diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fecfe18ad3..9e125484f8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ jobs: steps: - uses: actions/setup-go@v3 with: - go-version: 1.19.x + go-version: 1.20.x - uses: actions/checkout@v3 - name: Install Requirements run: | @@ -25,7 +25,7 @@ jobs: steps: - uses: actions/setup-go@v3 with: - go-version: 1.19.x + go-version: 1.20.x - uses: actions/checkout@v3 - name: Install Requirements run: | @@ -44,7 +44,7 @@ jobs: steps: - uses: actions/setup-go@v3 with: - go-version: 1.19.x + go-version: 1.20.x - uses: actions/checkout@v3 - name: Install Requirements run: | diff --git a/cmd/skywire-cli/commands/log/root.go b/cmd/skywire-cli/commands/log/root.go index 18c3c20728..5340174cff 100644 --- a/cmd/skywire-cli/commands/log/root.go +++ b/cmd/skywire-cli/commands/log/root.go @@ -12,9 +12,11 @@ import ( "net/http" "os" "sync" + "sync/atomic" "time" "github.com/hashicorp/go-version" + "github.com/sirupsen/logrus" "github.com/skycoin/dmsg/pkg/dmsgget" "github.com/skycoin/dmsg/pkg/dmsghttp" "github.com/spf13/cobra" @@ -38,6 +40,9 @@ var ( logOnly bool surveyOnly bool deleteOnErrors bool + fetchFile string + fetchFrom string + writeDir string ) func init() { @@ -45,9 +50,12 @@ func init() { logCmd.Flags().StringVarP(&env, "env", "e", "prod", "deployment to get uptimes from") logCmd.Flags().BoolVarP(&logOnly, "log", "l", false, "fetch only transport logs") logCmd.Flags().BoolVarP(&surveyOnly, "survey", "v", false, "fetch only surveys") + logCmd.Flags().StringVarP(&fetchFile, "file", "f", "", "fetch only a specific file from all online visors") + logCmd.Flags().StringVarP(&fetchFrom, "pks", "k", "", "fetch only from specific public keys ; semicolon separated") + logCmd.Flags().StringVarP(&writeDir, "dir", "d", "log_collecting", "save files to specified dir") logCmd.Flags().BoolVarP(&deleteOnErrors, "clean", "c", false, "delete files and folders on errors") - logCmd.Flags().StringVar(&minv, "minv", "v1.3.4", "minimum visor version to fetch from") - logCmd.Flags().IntVarP(&duration, "duration", "n", 0, "numberof days before today to fetch transport logs for") + logCmd.Flags().StringVar(&minv, "minv", "v1.3.11", "minimum visor version to fetch from") + logCmd.Flags().IntVarP(&duration, "duration", "n", 0, "number of days before today to fetch transport logs for") logCmd.Flags().BoolVar(&allVisors, "all", false, "consider all visors ; no version filtering") logCmd.Flags().IntVar(&batchSize, "batchSize", 50, "number of visor in each batch") logCmd.Flags().Int64Var(&maxFileSize, "maxfilesize", 30, "maximum file size allowed to download during collecting logs, in KB") @@ -59,13 +67,13 @@ func init() { logCmd.Flags().VarP(&sk, "sk", "s", "a random key is generated if unspecified\n\r") } -// RootCmd is surveyCmd +// RootCmd is logCmd var RootCmd = logCmd var logCmd = &cobra.Command{ Use: "log", Short: "survey & transport log collection", - Long: "collect surveys and transport logging from visors which are online in the uptime tracker", + Long: "Fetch health, survey, and transport logging from visors which are online in the uptime tracker\nhttp://ut.skywire.skycoin.com/uptimes?v=v2\nhttp://ut.skywire.skycoin.com/uptimes?v=v2&visors=;;", Run: func(cmd *cobra.Command, args []string) { log := logging.MustGetLogger("log-collecting") if logOnly && surveyOnly { @@ -81,15 +89,15 @@ var logCmd = &cobra.Command{ }() // Preparing directories - if _, err := os.ReadDir("log_collecting"); err != nil { - if err := os.Mkdir("log_collecting", 0750); err != nil { - log.Error("Unable to log_collecting directory") + if _, err := os.ReadDir(writeDir); err != nil { + if err := os.Mkdir(writeDir, 0750); err != nil { + log.Error("Unable to create directory " + writeDir) return } } - if err := os.Chdir("log_collecting"); err != nil { - log.Error("Unable to change directory to log_collecting") + if err := os.Chdir(writeDir); err != nil { + log.Error("Unable to change directory to " + writeDir) return } @@ -98,13 +106,19 @@ var logCmd = &cobra.Command{ flag.Parse() // Set the uptime tracker to fetch data from - endpoint := skyenv.UptimeTrackerAddr + "/uptimes?v=v2" + endpoint := skyenv.UptimeTrackerAddr if env == "test" { - endpoint = skyenv.TestUptimeTrackerAddr + "/uptimes?v=v2" + endpoint = skyenv.TestUptimeTrackerAddr } + endpoint = endpoint + "/uptimes?v=v2" if utAddr != "" { endpoint = utAddr } + + if fetchFrom != "" { + endpoint = endpoint + "&visors=" + fetchFrom + } + //Fetch the uptime data over http uptimes, err := getUptimes(endpoint, log) if err != nil { @@ -141,56 +155,74 @@ var logCmd = &cobra.Command{ // Get visors data var wg sync.WaitGroup for _, v := range uptimes { + //only attempt to fetch from online visors if v.Online { + if fetchFile == "" { + visorVersion, err := version.NewVersion(v.Version) //nolint + if err != nil { + log.Warnf("The version %s for visor %s is not valid", v.Version, v.PubKey) + continue + } + if !allVisors && visorVersion.LessThan(minimumVersion) { + log.Warnf("The version %s for visor %s does not satisfy our minimum version condition", v.Version, v.PubKey) + continue + } + wg.Add(1) + go func(key string, wg *sync.WaitGroup) { + httpC := http.Client{Transport: dmsghttp.MakeHTTPTransport(ctx, dmsgC), Timeout: 10 * time.Second} + defer httpC.CloseIdleConnections() + defer wg.Done() - visorVersion, err := version.NewVersion(v.Version) //nolint - if err != nil { - log.Warnf("The version %s for visor %s is not valid", v.Version, v.PubKey) - continue - } - if !allVisors && visorVersion.LessThan(minimumVersion) { - log.Warnf("The version %s for visor %s does not satisfy our minimum version condition", v.Version, v.PubKey) - continue - } - wg.Add(1) - go func(key string, wg *sync.WaitGroup) { - httpC := http.Client{Transport: dmsghttp.MakeHTTPTransport(ctx, dmsgC), Timeout: 10 * time.Second} - defer httpC.CloseIdleConnections() - defer wg.Done() - - deleteOnError := false - if _, err := os.ReadDir(key); err != nil { - if err := os.Mkdir(key, 0750); err != nil { - log.Errorf("Unable to create directory for visor %s", key) - return + deleteOnError := false + if _, err := os.ReadDir(key); err != nil { + if err := os.Mkdir(key, 0750); err != nil { + log.Errorf("Unable to create directory for visor %s", key) + return + } + deleteOnError = true } - deleteOnError = true - } - // health check before downloading anything else - // delete that folder if the health check fails - err = download(ctx, log, httpC, "health", "health.json", key, maxFileSize) - if err != nil { - if deleteOnErrors { - if deleteOnError { - bulkFolders = append(bulkFolders, key) + // health check before downloading anything else + // delete that folder if the health check fails + err = download(ctx, log, httpC, "health", "health.json", key, maxFileSize) + if err != nil { + if deleteOnErrors { + if deleteOnError { + bulkFolders = append(bulkFolders, key) + } + return } - return } - } - if !logOnly { - download(ctx, log, httpC, "node-info.json", "node-info.json", key, maxFileSize) //nolint - } - if !surveyOnly { - for i := 0; i <= duration; i++ { - date := time.Now().AddDate(0, 0, -i).UTC().Format("2006-01-02") - download(ctx, log, httpC, "transport_logs/"+date+".csv", date+".csv", key, maxFileSize) //nolint + if !logOnly { + download(ctx, log, httpC, "node-info.json", "node-info.json", key, maxFileSize) //nolint } + if !surveyOnly { + for i := 0; i <= duration; i++ { + date := time.Now().AddDate(0, 0, -i).UTC().Format("2006-01-02") + download(ctx, log, httpC, date+".csv", date+".csv", key, maxFileSize) //nolint + } + } + }(v.PubKey, &wg) + batchSize-- + if batchSize == 0 { + time.Sleep(15 * time.Second) + batchSize = 50 } - }(v.PubKey, &wg) - batchSize-- - if batchSize == 0 { - time.Sleep(15 * time.Second) - batchSize = 50 + } + //omit the filters if a file was specified + if fetchFile != "" { + wg.Add(1) + go func(key string, wg *sync.WaitGroup) { + httpC := http.Client{Transport: dmsghttp.MakeHTTPTransport(ctx, dmsgC), Timeout: 10 * time.Second} + defer httpC.CloseIdleConnections() + defer wg.Done() + if _, err := os.ReadDir(key); err != nil { + if err := os.Mkdir(key, 0750); err != nil { + log.Errorf("Unable to create directory for visor %s", key) + return + } + } + _ = download(ctx, log, httpC, fetchFile, fetchFile, key, maxFileSize) //nolint + }(v.PubKey, &wg) } } } @@ -210,13 +242,93 @@ func download(ctx context.Context, log *logging.Logger, httpC http.Client, targe file, _ := os.Create(pubkey + "/" + fileName) //nolint defer file.Close() //nolint - if err := dmsgget.Download(ctx, log, &httpC, file, target, maxSize); err != nil { + if err := downloadDmsg(ctx, log, &httpC, file, target, maxSize); err != nil { log.WithError(err).Errorf("The %s for visor %s not available", fileName, pubkey) return err } return nil } +// downloadDmsg downloads a file from the given URL into 'w'. +func downloadDmsg(ctx context.Context, log logrus.FieldLogger, httpC *http.Client, w io.Writer, urlStr string, maxSize int64) error { + req, err := http.NewRequest(http.MethodGet, urlStr, nil) + if err != nil { + log.WithError(err).Fatal("Failed to formulate HTTP request.") + } + resp, err := httpC.Do(req) + if err != nil { + return fmt.Errorf("failed to connect to HTTP server: %w", err) + } + if resp.StatusCode == http.StatusOK { + // 200 OK + if maxSize > 0 { + if resp.ContentLength > maxSize*1024 { + return fmt.Errorf("requested file size is more than allowed size: %d KB > %d KB", (resp.ContentLength / 1024), maxSize) + } + } + n, err := CancellableCopy(ctx, w, resp.Body, resp.ContentLength) + if err != nil { + return fmt.Errorf("download failed at %d/%dB: %w", n, resp.ContentLength, err) + } + defer func() { + if err := resp.Body.Close(); err != nil { + log.WithError(err).Warn("HTTP Response body closed with non-nil error.") + } + }() + return nil + } + // Convert the non-200 status code to an error + return &httpError{Status: resp.StatusCode} +} + +type readerFunc func(p []byte) (n int, err error) + +func (rf readerFunc) Read(p []byte) (n int, err error) { return rf(p) } + +// CancellableCopy will call the Reader and Writer interface multiple time, in order +// to copy by chunk (avoiding loading the whole file in memory). +func CancellableCopy(ctx context.Context, w io.Writer, body io.ReadCloser, length int64) (int64, error) { + + n, err := io.Copy(io.MultiWriter(w, &ProgressWriter{Total: length}), readerFunc(func(p []byte) (int, error) { + + // golang non-blocking channel: https://gobyexample.com/non-blocking-channel-operations + select { + + // if context has been canceled + case <-ctx.Done(): + // stop process and propagate "Download Canceled" error + return 0, errors.New("Download Canceled") + default: + // otherwise just run default io.Reader implementation + return body.Read(p) + } + })) + return n, err +} + +// ProgressWriter prints the progress of a download to stdout. +type ProgressWriter struct { + // atomic requires 64-bit alignment for struct field access + Current int64 + Total int64 +} + +// Write implements io.Writer +func (pw *ProgressWriter) Write(p []byte) (int, error) { + n := len(p) + + current := atomic.AddInt64(&pw.Current, int64(n)) + total := atomic.LoadInt64(&pw.Total) + pc := fmt.Sprintf("%d%%", current*100/total) + fmt.Printf("Downloading: %d/%dB (%s)", current, total, pc) + if current != total { + fmt.Print("\r") + } else { + fmt.Print("\n") + } + return n, nil +} + func getUptimes(endpoint string, log *logging.Logger) ([]VisorUptimeResponse, error) { var results []VisorUptimeResponse @@ -272,3 +384,11 @@ func getAllDMSGServers() []dmsgServer { type dmsgServer struct { PK cipher.PubKey `json:"static"` } + +type httpError struct { + Status int +} + +func (e *httpError) Error() string { + return fmt.Sprintf("http error: %d", e.Status) +} diff --git a/go.mod b/go.mod index db7be8c211..e5acf50af2 100644 --- a/go.mod +++ b/go.mod @@ -6,68 +6,56 @@ require ( github.com/AudriusButkevicius/pfilter v0.0.11 github.com/VictoriaMetrics/metrics v1.24.0 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 + github.com/bitfield/script v0.22.0 + github.com/blang/semver/v4 v4.0.0 github.com/ccding/go-stun/stun v0.0.0-20200514191101-4dc67bcdb029 github.com/gen2brain/dlgs v0.0.0-20220603100644-40c77870fa8d - github.com/google/uuid v1.3.0 + github.com/gin-gonic/gin v1.9.1 + github.com/go-chi/chi/v5 v5.0.10 + github.com/gocarina/gocsv v0.0.0-20230616125104-99d496ca653d + github.com/google/uuid v1.3.1 github.com/gorilla/securecookie v1.1.1 + github.com/hashicorp/go-version v1.6.0 github.com/hashicorp/yamux v0.1.1 - github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/reedsolomon v1.11.7 // indirect + github.com/ivanpirog/coloredcobra v1.0.1 + github.com/james-barrow/golang-ipc v1.2.4 + github.com/jaypipes/ghw v0.12.0 github.com/konsorten/go-windows-terminal-sequences v1.0.3 - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect - github.com/shirou/gopsutil/v3 v3.23.5 + github.com/lib/pq v1.10.9 + github.com/orandin/lumberjackrus v1.0.1 + github.com/pterm/pterm v0.12.66 + github.com/shirou/gopsutil/v3 v3.23.7 github.com/sirupsen/logrus v1.9.3 + github.com/skycoin/dmsg v1.3.11 github.com/skycoin/skycoin v0.27.1 + github.com/skycoin/skywire-utilities v1.3.11 + github.com/skycoin/systray v1.10.0 github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 github.com/spf13/cobra v1.7.0 + github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.8.4 github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 - github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect - github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect - github.com/tjfoc/gmsm v1.4.1 // indirect github.com/toqueteos/webbrowser v1.2.0 github.com/xtaci/kcp-go v5.4.20+incompatible + github.com/zcalusic/sysinfo v1.0.1 go.etcd.io/bbolt v1.3.7 - golang.org/x/net v0.11.0 - golang.org/x/sys v0.9.0 - golang.org/x/term v0.9.0 // indirect - golang.org/x/tools v0.10.0 // indirect - golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b - nhooyr.io/websocket v1.8.7 // indirect -) - -require ( - github.com/bitfield/script v0.22.0 - github.com/blang/semver/v4 v4.0.0 - github.com/gin-gonic/gin v1.9.1 - github.com/go-chi/chi/v5 v5.0.8 - github.com/gocarina/gocsv v0.0.0-20230616125104-99d496ca653d - github.com/hashicorp/go-version v1.6.0 - github.com/ivanpirog/coloredcobra v1.0.1 - github.com/james-barrow/golang-ipc v1.1.0 - github.com/jaypipes/ghw v0.11.0 - github.com/lib/pq v1.10.9 - github.com/orandin/lumberjackrus v1.0.1 - github.com/pterm/pterm v0.12.62 - github.com/skycoin/dmsg v1.3.0-rc1.0.20230619181939-277586bbacd7 - github.com/skycoin/skywire-utilities v0.0.0-20230601232053-0abbc9604fbc - github.com/skycoin/systray v1.10.0 - github.com/spf13/pflag v1.0.5 - github.com/zcalusic/sysinfo v1.0.0 + golang.org/x/net v0.14.0 golang.org/x/sync v0.3.0 + golang.org/x/sys v0.11.0 + golang.zx2c4.com/wireguard v0.0.0-20230704135630-469159ecf7d1 ) require ( - atomicgo.dev/cursor v0.1.2 // indirect + atomicgo.dev/cursor v0.2.0 // indirect atomicgo.dev/keyboard v0.2.9 // indirect - atomicgo.dev/schedule v0.0.2 // indirect + atomicgo.dev/schedule v0.1.0 // indirect github.com/ActiveState/termtest/conpty v0.5.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/StackExchange/wmi v1.2.1 // indirect - github.com/bytedance/sonic v1.9.1 // indirect - github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/bytedance/sonic v1.10.0 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect + github.com/chenzhuoyu/iasm v0.9.0 // indirect github.com/containerd/console v1.0.3 // indirect github.com/creack/pty v1.1.18 // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -75,45 +63,50 @@ require ( github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/ghodss/yaml v1.0.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.14.1 // indirect - github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect + github.com/go-playground/validator/v10 v10.15.1 // indirect + github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/goccy/go-json v0.10.2 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/golang/mock v1.6.0 // indirect - github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect - github.com/gookit/color v1.5.3 // indirect + github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f // indirect + github.com/gookit/color v1.5.4 // indirect github.com/gopherjs/gopherjs v1.17.2 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/itchyny/gojq v0.12.12 // indirect + github.com/itchyny/gojq v0.12.13 // indirect github.com/itchyny/timefmt-go v0.1.5 // indirect github.com/jaypipes/pcidb v1.0.0 // indirect - github.com/klauspost/compress v1.16.6 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.16.7 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect + github.com/klauspost/reedsolomon v1.11.8 // indirect github.com/leodido/go-urn v1.2.4 // indirect github.com/lithammer/fuzzysearch v1.1.8 // indirect - github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a // indirect + github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect - github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/onsi/ginkgo/v2 v2.2.0 // indirect - github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/onsi/ginkgo/v2 v2.12.0 // indirect + github.com/pelletier/go-toml/v2 v2.0.9 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/quic-go/qtls-go1-18 v0.2.0 // indirect - github.com/quic-go/qtls-go1-19 v0.2.0 // indirect - github.com/quic-go/qtls-go1-20 v0.1.0 // indirect - github.com/quic-go/quic-go v0.32.0 // indirect + github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect + github.com/quic-go/qtls-go1-20 v0.3.3 // indirect + github.com/quic-go/quic-go v0.38.1 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/skycoin/noise v0.0.0-20180327030543-2492fe189ae6 // indirect - github.com/stretchr/objx v0.5.0 // indirect - github.com/tklauser/go-sysconf v0.3.11 // indirect + github.com/stretchr/objx v0.5.1 // indirect + github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect + github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect + github.com/tjfoc/gmsm v1.4.1 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect @@ -122,18 +115,21 @@ require ( github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect - golang.org/x/arch v0.3.0 // indirect - golang.org/x/crypto v0.10.0 // indirect - golang.org/x/exp v0.0.0-20221205204356-47842c84f3db // indirect - golang.org/x/mod v0.11.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/arch v0.4.0 // indirect + golang.org/x/crypto v0.12.0 // indirect + golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/term v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect + golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect howett.net/plist v1.0.0 // indirect - mvdan.cc/sh/v3 v3.6.0 // indirect + mvdan.cc/sh/v3 v3.7.0 // indirect + nhooyr.io/websocket v1.8.7 // indirect ) // Uncomment for tests with alternate branches of 'dmsg' diff --git a/go.sum b/go.sum index c0e2f17407..7ea7a57d51 100644 --- a/go.sum +++ b/go.sum @@ -1,58 +1,11 @@ atomicgo.dev/assert v0.0.2 h1:FiKeMiZSgRrZsPo9qn/7vmr7mCsh5SZyXY4YGYiYwrg= -atomicgo.dev/cursor v0.1.2 h1:zLIcqxTFymd9Uv2gloPEv5YfnnCkJ4SCdPlYm5374pA= -atomicgo.dev/cursor v0.1.2/go.mod h1:Lr4ZJB3U7DfPPOkbH7/6TOtJ4vFGHlgj1nc+n900IpU= +atomicgo.dev/cursor v0.2.0 h1:H6XN5alUJ52FZZUkI7AlJbUc1aW38GWZalpYRPpoPOw= +atomicgo.dev/cursor v0.2.0/go.mod h1:Lr4ZJB3U7DfPPOkbH7/6TOtJ4vFGHlgj1nc+n900IpU= atomicgo.dev/keyboard v0.2.9 h1:tOsIid3nlPLZ3lwgG8KZMp/SFmr7P0ssEN5JUsm78K8= atomicgo.dev/keyboard v0.2.9/go.mod h1:BC4w9g00XkxH/f1HXhW2sXmJFOCWbKn9xrOunSFtExQ= -atomicgo.dev/schedule v0.0.2 h1:2e/4KY6t3wokja01Cyty6qgkQM8MotJzjtqCH70oX2Q= -atomicgo.dev/schedule v0.0.2/go.mod h1:xeUa3oAkiuHYh8bKiQBRojqAMq3PXXbJujjb0hw8pEU= +atomicgo.dev/schedule v0.1.0 h1:nTthAbhZS5YZmgYbb2+DH8uQIZcTlIrd4eYr3UQxEjs= +atomicgo.dev/schedule v0.1.0/go.mod h1:xeUa3oAkiuHYh8bKiQBRojqAMq3PXXbJujjb0hw8pEU= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/ActiveState/termtest/conpty v0.5.0 h1:JLUe6YDs4Jw4xNPCU+8VwTpniYOGeKzQg4SM2YHQNA8= github.com/ActiveState/termtest/conpty v0.5.0/go.mod h1:LO4208FLsxw6DcNZ1UtuGUMW+ga9PFtX4ntv8Ymg9og= github.com/AudriusButkevicius/pfilter v0.0.11 h1:6emuvqNeH1gGlqkML35pEizyPcaxdAN4JO9sdgwcx78= @@ -61,8 +14,6 @@ github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/MarvinJWendt/testza v0.1.0/go.mod h1:7AxNvlfeHP7Z/hDQ5JtE3OKYT3XFUeLCDE2DQninSqs= github.com/MarvinJWendt/testza v0.2.1/go.mod h1:God7bhG8n6uQxwdScay+gjm9/LnO4D3kkcZX4hv9Rp8= github.com/MarvinJWendt/testza v0.2.8/go.mod h1:nwIcjmr0Zz+Rcwfh3/4UhBp7ePKVhuBExvZqnKYWlII= @@ -73,97 +24,50 @@ github.com/MarvinJWendt/testza v0.4.2/go.mod h1:mSdhXiKH8sg/gQehJ63bINcCKp7RtYew github.com/MarvinJWendt/testza v0.5.2 h1:53KDo64C1z/h/d/stCYCPY69bt/OSwjq5KpFNwi+zB4= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= -github.com/VictoriaMetrics/metrics v1.18.1/go.mod h1:ArjwVz7WpgpegX/JpB0zpNF2h2232kErkEnzH1sxMmA= github.com/VictoriaMetrics/metrics v1.24.0 h1:ILavebReOjYctAGY5QU2F9X0MYvkcrG3aEn2RKa1Zkw= github.com/VictoriaMetrics/metrics v1.24.0/go.mod h1:eFT25kvsTidQFHb6U0oa0rTrDRdz4xTYjpL8+UPohys= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/atomicgo/cursor v0.0.1/go.mod h1:cBON2QmmrysudxNBFthvMtN32r3jxVRIvzkUiF/RuIk= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitfield/script v0.22.0 h1:LA7QHuEsXMPD52YLtxWrlqCCy+9FOpzNYfsRHC5Gsrc= github.com/bitfield/script v0.22.0/go.mod h1:ms4w+9B8f2/W0mbsgWDVTtl7K94bYuZc3AunnJC4Ebs= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= -github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= -github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= +github.com/bytedance/sonic v1.10.0 h1:qtNZduETEIWJVIyDl01BeNxur2rW9OwTQ/yBqFRkKEk= +github.com/bytedance/sonic v1.10.0/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= github.com/ccding/go-stun/stun v0.0.0-20200514191101-4dc67bcdb029 h1:POmUHfxXdeyM8Aomg4tKDcwATCFuW+cYLkj6pwsw9pc= github.com/ccding/go-stun/stun v0.0.0-20200514191101-4dc67bcdb029/go.mod h1:Rpr5n9cGHYdM3S3IK8ROSUUUYjQOu+MSUCZDcJbYWi8= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0= +github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA= +github.com/chenzhuoyu/iasm v0.9.0 h1:9fhXjVzq5hUy2gkhhgHl95zG2cEAhw9OSGs8toWWAwo= +github.com/chenzhuoyu/iasm v0.9.0/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.15/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/frankban/quicktest v1.14.5 h1:dfYrrRyLtiqT9GyKXgdh+k4inNeTvmGbuSgZ3lx3GhA= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/gen2brain/dlgs v0.0.0-20220603100644-40c77870fa8d h1:dHYKX8CBAs1zSGXm3q3M15CLAEwPEkwrK1ed8FCo+Xo= @@ -175,20 +79,13 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= -github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-chi/chi/v5 v5.0.8-0.20220103230436-7dbe9a0bd10f/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-chi/chi/v5 v5.0.8 h1:lD+NLqFcAi1ovnVZpsnObHGW4xb4J8lNmoYVfECH1Y0= -github.com/go-chi/chi/v5 v5.0.8/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-chi/chi/v5 v5.0.10 h1:rLz5avzKpjqxrYwXNfmjkrYYXOyLJd37pz53UFHC6vk= +github.com/go-chi/chi/v5 v5.0.10/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= @@ -198,203 +95,102 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.14.1 h1:9c50NUPC30zyuKprjL3vNZ0m5oG+jU0zvx4AqHGnv4k= -github.com/go-playground/validator/v10 v10.14.1/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= -github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= +github.com/go-playground/validator/v10 v10.15.1 h1:BSe8uhN+xQ4r5guV/ywQI4gO59C2raYcGffYWZEjZzM= +github.com/go-playground/validator/v10 v10.15.1/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= +github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= +github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk= github.com/gocarina/gocsv v0.0.0-20230616125104-99d496ca653d h1:KbPOUXFUDJxwZ04vbmDOc3yuruGvVO+LOa7cVER3yWw= github.com/gocarina/gocsv v0.0.0-20230616125104-99d496ca653d/go.mod h1:5YoVOkjYAQumqlV356Hj3xeYh4BdZuLE0/nRkf2NKkI= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 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.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f h1:pDhu5sgp8yJlEF/g6osliIIpF9K4F5jvkULXa4daRDQ= +github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= -github.com/gookit/color v1.5.3 h1:twfIhZs4QLCtimkP7MOxlF3A0U/5cDPseRT9M/+2SCE= -github.com/gookit/color v1.5.3/go.mod h1:NUzwzeehUfl7GIb36pqId+UGmRfQcU/WiiyTTeNjHtE= +github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= +github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/itchyny/gojq v0.12.12 h1:x+xGI9BXqKoJQZkr95ibpe3cdrTbY8D9lonrK433rcA= github.com/itchyny/gojq v0.12.12/go.mod h1:j+3sVkjxwd7A7Z5jrbKibgOLn0ZfLWkV+Awxr/pyzJE= +github.com/itchyny/gojq v0.12.13 h1:IxyYlHYIlspQHHTE0f3cJF0NKDMfajxViuhBLnHd/QU= +github.com/itchyny/gojq v0.12.13/go.mod h1:JzwzAqenfhrPUuwbmEz3nu3JQmFLlQTQMUcOdnu/Sf4= github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE= github.com/itchyny/timefmt-go v0.1.5/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8= github.com/ivanpirog/coloredcobra v1.0.1 h1:aURSdEmlR90/tSiWS0dMjdwOvCVUeYLfltLfbgNxrN4= github.com/ivanpirog/coloredcobra v1.0.1/go.mod h1:iho4nEKcnwZFiniGSdcgdvRgZNjxm+h20acv8vqmN6Q= -github.com/james-barrow/golang-ipc v1.1.0 h1:/195vE/wvgc4iGNQ6fn1l6W1awI4DcOTGjQeNhRlgBQ= -github.com/james-barrow/golang-ipc v1.1.0/go.mod h1:+egiWSbOWmiPucFGSl4GNB1YSzrVGehyl7/7pW4N8F0= -github.com/jaypipes/ghw v0.11.0 h1:i0pKvAM7eZk0KvLm9vzpcpDKTRnfR6AQ5pFkPVnYJXU= -github.com/jaypipes/ghw v0.11.0/go.mod h1:jeJGbkRB2lL3/gxYzNYzEDETV1ZJ56OKr+CSeSEym+g= +github.com/james-barrow/golang-ipc v1.2.4 h1:d4NXRQxq6OWviWU8uAaob8R0YZGy/PhAkXGLpBNpkA4= +github.com/james-barrow/golang-ipc v1.2.4/go.mod h1:+egiWSbOWmiPucFGSl4GNB1YSzrVGehyl7/7pW4N8F0= +github.com/jaypipes/ghw v0.12.0 h1:xU2/MDJfWmBhJnujHY9qwXQLs3DBsf0/Xa9vECY0Tho= +github.com/jaypipes/ghw v0.12.0/go.mod h1:jeJGbkRB2lL3/gxYzNYzEDETV1ZJ56OKr+CSeSEym+g= github.com/jaypipes/pcidb v1.0.0 h1:vtZIfkiCUE42oYbJS0TAq9XSfSmcsgo9IdxSm9qzYU8= github.com/jaypipes/pcidb v1.0.0/go.mod h1:TnYUvqhPBzCKnH34KrIX22kAeEbDCSRJ9cqLRCuNDfk= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.10.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.16.6 h1:91SKEy4K37vkp255cJ8QesJhjyRO0hn9i9G0GoUwLsk= -github.com/klauspost/compress v1.16.6/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.10/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/klauspost/reedsolomon v1.11.7 h1:9uaHU0slncktTEEg4+7Vl7q7XUNMBUOK4R9gnKhMjAU= -github.com/klauspost/reedsolomon v1.11.7/go.mod h1:4bXRN+cVzMdml6ti7qLouuYi32KHJ5MGv0Qd8a47h6A= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/klauspost/reedsolomon v1.11.8 h1:s8RpUW5TK4hjr+djiOpbZJB4ksx+TdYbRH7vHQpwPOY= +github.com/klauspost/reedsolomon v1.11.8/go.mod h1:4bXRN+cVzMdml6ti7qLouuYi32KHJ5MGv0Qd8a47h6A= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -408,21 +204,12 @@ github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4= github.com/lithammer/fuzzysearch v1.1.8/go.mod h1:IdqeyBClc3FFqSzYq/MXESsS4S0FsZ5ajtkr5xPLts4= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a h1:N9zuLhTvBSRt0gWSiJswwQ2HqDmtX/ZCDJURnKUt1Ik= +github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= 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-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -430,77 +217,35 @@ github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +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/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.2.0 h1:3ZNA3L1c5FYDFTTxbFeVGGD8jYvjYauHD30YgLxVsNI= -github.com/onsi/ginkgo/v2 v2.2.0/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/onsi/ginkgo/v2 v2.12.0 h1:UIVDowFPwpg6yMUpPjGkYvf06K3RAiJXUhCxEwQVHRI= +github.com/onsi/ginkgo/v2 v2.12.0/go.mod h1:ZNEzXISYlqpb8S36iN71ifqLi3vVD1rVJGvWRCJOUpQ= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= github.com/orandin/lumberjackrus v1.0.1 h1:7ysDQ0MHD79zIFN9/EiDHjUcgopNi5ehtxFDy8rUkWo= github.com/orandin/lumberjackrus v1.0.1/go.mod h1:xYLt6H8W93pKnQgUQaxsApS0Eb4BwHLOkxk5DVzf5H0= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= -github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= -github.com/pires/go-proxyproto v0.6.2/go.mod h1:Odh9VFOZJCf9G8cLW5o435Xf1J95Jw9Gw5rnCjcwzAY= +github.com/pelletier/go-toml/v2 v2.0.9 h1:uH2qQXheeefCCkuBBSLi7jCiSmj3VRh2+Goq2N7Xxu0= +github.com/pelletier/go-toml/v2 v2.0.9/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig= +github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/pterm/pterm v0.12.27/go.mod h1:PhQ89w4i95rhgE+xedAoqous6K9X+r6aSOI2eFF7DZI= github.com/pterm/pterm v0.12.29/go.mod h1:WI3qxgvoQFFGKGjGnJR849gU0TsEOvKn5Q8LlY1U7lg= github.com/pterm/pterm v0.12.30/go.mod h1:MOqLIyMOgmTDz9yorcYbcw+HsgoZo3BQfg2wtl3HEFE= @@ -508,86 +253,62 @@ github.com/pterm/pterm v0.12.31/go.mod h1:32ZAWZVXD7ZfG0s8qqHXePte42kdz8ECtRyEej github.com/pterm/pterm v0.12.33/go.mod h1:x+h2uL+n7CP/rel9+bImHD5lF3nM9vJj80k9ybiiTTE= github.com/pterm/pterm v0.12.36/go.mod h1:NjiL09hFhT/vWjQHSj1athJpx6H8cjpHXNAK5bUw8T8= github.com/pterm/pterm v0.12.40/go.mod h1:ffwPLwlbXxP+rxT0GsgDTzS3y3rmpAO1NMjUkGTYf8s= -github.com/pterm/pterm v0.12.62 h1:Xjj5Wl6UR4Il9xOiDUOZRwReRTdO75if/JdWsn9I59s= -github.com/pterm/pterm v0.12.62/go.mod h1:+c3ujjE7N5qmNx6eKAa7YVSC6m/gCorJJKhzwYTbL90= -github.com/quic-go/qtls-go1-18 v0.2.0 h1:5ViXqBZ90wpUcZS0ge79rf029yx0dYB0McyPJwqqj7U= -github.com/quic-go/qtls-go1-18 v0.2.0/go.mod h1:moGulGHK7o6O8lSPSZNoOwcLvJKJ85vVNc7oJFD65bc= -github.com/quic-go/qtls-go1-19 v0.2.0 h1:Cvn2WdhyViFUHoOqK52i51k4nDX8EwIh5VJiVM4nttk= -github.com/quic-go/qtls-go1-19 v0.2.0/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI= -github.com/quic-go/qtls-go1-20 v0.1.0 h1:d1PK3ErFy9t7zxKsG3NXBJXZjp/kMLoIb3y/kV54oAI= -github.com/quic-go/qtls-go1-20 v0.1.0/go.mod h1:JKtK6mjbAVcUTN/9jZpvLbGxvdWIKS8uT7EiStoU1SM= -github.com/quic-go/quic-go v0.32.0 h1:lY02md31s1JgPiiyfqJijpu/UX/Iun304FI3yUqX7tA= -github.com/quic-go/quic-go v0.32.0/go.mod h1:/fCsKANhQIeD5l76c2JFU+07gVE3KaA0FP+0zMWwfwo= +github.com/pterm/pterm v0.12.66 h1:bjsoMyUstaarzJ1NG7+1HGT7afR0JVMYsR3ooPeh4bo= +github.com/pterm/pterm v0.12.66/go.mod h1:nFuT9ZVkkCi8o4L1dtWuYPwDQxggLh4C263qG5nTLpQ= +github.com/quic-go/qtls-go1-20 v0.3.3 h1:17/glZSLI9P9fDAeyCHBFSWSqJcwx1byhLwP5eUIDCM= +github.com/quic-go/qtls-go1-20 v0.3.3/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= +github.com/quic-go/quic-go v0.38.1 h1:M36YWA5dEhEeT+slOu/SwMEucbYd0YFidxG3KlGPZaE= +github.com/quic-go/quic-go v0.38.1/go.mod h1:ijnZM7JsFIkp4cRyjxJNIzdSfCLmUMg9wdyhGmg+SN4= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -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/rogpeppe/go-internal v1.10.1-0.20230524175051-ec119421bb97 h1:3RPlVWzZ/PDqmVuf/FKHARG5EMid/tl7cv54Sw/QRVY= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shirou/gopsutil/v3 v3.23.5 h1:5SgDCeQ0KW0S4N0znjeM/eFHXXOKyv2dVNgRq/c9P6Y= -github.com/shirou/gopsutil/v3 v3.23.5/go.mod h1:Ng3Maa27Q2KARVJ0SPZF5NdrQSC3XHKP8IIWrHgMeLY= +github.com/shirou/gopsutil/v3 v3.23.7 h1:C+fHO8hfIppoJ1WdsVm1RoI0RwXoNdfTK7yWXV0wVj4= +github.com/shirou/gopsutil/v3 v3.23.7/go.mod h1:c4gnmoRC0hQuaLqvxnx1//VXQ0Ms/X9UnJF8pddY5z4= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skycoin/dmsg v1.3.0-rc1.0.20230619181939-277586bbacd7 h1:tjLPOM4MZtg3itlCms9YyzVc8k/nJoqbwa7rczNbTXc= -github.com/skycoin/dmsg v1.3.0-rc1.0.20230619181939-277586bbacd7/go.mod h1:n0aJzDynCJXNoUSd6AK88/WbMJRhXCskswdmQ0TjhLQ= +github.com/skycoin/dmsg v1.3.11 h1:l2T8SuAHYrrgCfzgJIqaT/9rwlBgTyRwsfNOBbsWCX0= +github.com/skycoin/dmsg v1.3.11/go.mod h1:3j74fE5sFiMJoMfqF9qGhC6GVRqCMkX4l2EHc0OQkGc= github.com/skycoin/noise v0.0.0-20180327030543-2492fe189ae6 h1:1Nc5EBY6pjfw1kwW0duwyG+7WliWz5u9kgk1h5MnLuA= github.com/skycoin/noise v0.0.0-20180327030543-2492fe189ae6/go.mod h1:UXghlricA7J3aRD/k7p/zBObQfmBawwCxIVPVjz2Q3o= github.com/skycoin/skycoin v0.27.1 h1:HatxsRwVSPaV4qxH6290xPBmkH/HgiuAoY2qC+e8C9I= github.com/skycoin/skycoin v0.27.1/go.mod h1:78nHjQzd8KG0jJJVL/j0xMmrihXi70ti63fh8vXScJw= -github.com/skycoin/skywire-utilities v0.0.0-20230314131305-bdd8e27cbd46/go.mod h1:X5H+fKC3rD11/sm4t9V2FWy/aet7OdEilaO2Ar3waXY= -github.com/skycoin/skywire-utilities v0.0.0-20230601232053-0abbc9604fbc h1:gEoSRbVm1AeHkKHqXocftHoESJAaabeYxWSffLdP0P8= -github.com/skycoin/skywire-utilities v0.0.0-20230601232053-0abbc9604fbc/go.mod h1:X5H+fKC3rD11/sm4t9V2FWy/aet7OdEilaO2Ar3waXY= +github.com/skycoin/skywire-utilities v1.3.11 h1:xTdbBUmhjpn0UgACojZl1BS40WEftX/oBx4UVUZ58lY= +github.com/skycoin/skywire-utilities v1.3.11/go.mod h1:X5H+fKC3rD11/sm4t9V2FWy/aet7OdEilaO2Ar3waXY= github.com/skycoin/systray v1.10.0 h1:fQZJHMylpVvfmOOTLvUssfyHVDoC8Idx6Ba2BlLEuGg= github.com/skycoin/systray v1.10.0/go.mod h1:/i17Eni5GxFiboIZceeamY5LktDSFFRCvd3fBMerQ+4= github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 h1:TG/diQgUe0pntT/2D9tmUCz4VNwm9MfrtPr0SU2qSX8= github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8/go.mod h1:P5HUIBuIWKbyjl083/loAegFkfbFNx5i2qEP4CNbm7E= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/objx v0.5.1 h1:4VhoImhV/Bm0ToFkXFi8hXNXwpDRZ/ynw3amt82mzq0= +github.com/stretchr/objx v0.5.1/go.mod h1:/iHQpkQwBD6DLUmQ4pE+s1TXdob1mORJ4/UFdrifcy0= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 h1:89CEmDvlq/F7SJEOqkIdNDGJXrQIhuIx9D2DBXjavSU= @@ -596,14 +317,14 @@ github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b h1:fj5tQ8acgNUr6O8LE github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b/go.mod h1:5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4= github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= -github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/toqueteos/webbrowser v1.2.0 h1:tVP/gpK69Fx+qMJKsLE7TD8LuGWPnEV71wBN9rrstGQ= github.com/toqueteos/webbrowser v1.2.0/go.mod h1:XWoZq4cyp9WeUeak7w7LXRUQf1F1ATJMir8RTqb4ayM= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= @@ -621,265 +342,91 @@ github.com/xtaci/kcp-go v5.4.20+incompatible h1:TN1uey3Raw0sTz0Fg8GkfM0uH3YwzhnZ github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 h1:EWU6Pktpas0n8lLQwDsRyZfmkPeRbdgPtW609es+/9E= github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37/go.mod h1:HpMP7DB2CyokmAh4lp0EQnnWhmycP/TvwBGzvuie+H0= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zcalusic/sysinfo v1.0.0 h1:z9V/+HCuMi+3jXT3RTvX6HOPpXIqwhGllN0yYmRUhpQ= -github.com/zcalusic/sysinfo v1.0.0/go.mod h1:LxwKwtQdbTIQc65drhjQzYzt0o7jfB80LrrZm7SWn8o= +github.com/zcalusic/sysinfo v1.0.1 h1:cVh8q3codjh43AGRTa54dJ2Zq+qPejv8n2VWpxKViwc= +github.com/zcalusic/sysinfo v1.0.1/go.mod h1:LxwKwtQdbTIQc65drhjQzYzt0o7jfB80LrrZm7SWn8o= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= -go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= -golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/arch v0.4.0 h1:A8WCeEWhLwPBKNbFi5Wv5UTCBx5zzubnXDlMOFAzFMc= +golang.org/x/arch v0.4.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20221205204356-47842c84f3db h1:D/cFflL63o2KSLJIwjlcIt8PR064j/xsmdEJL/YvY/o= -golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ= +golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -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.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= -golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20200317015054-43a5402ce75a/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.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/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-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200428200454-593003d681fa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -887,258 +434,64 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= -golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= 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.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= -golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg= -golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= +golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 h1:Vve/L0v7CXXuxUmaMGIEK/dEeq7uiqb5qBgQrZzIE7E= +golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= 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= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI= -golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b h1:J1CaxgLerRR5lgx3wnr6L04cJFbWoceSK9JWBdglINo= -golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b/go.mod h1:tqur9LnfstdR9ep2LaJT4lFUl0EjlHtge+gAjmsHUG4= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= +golang.zx2c4.com/wireguard v0.0.0-20230704135630-469159ecf7d1 h1:EY138uSo1JYlDq+97u1FtcOUwPpIU6WL1Lkt7WpYjPA= +golang.zx2c4.com/wireguard v0.0.0-20230704135630-469159ecf7d1/go.mod h1:tqur9LnfstdR9ep2LaJT4lFUl0EjlHtge+gAjmsHUG4= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= 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.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/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-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -1147,21 +500,14 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gvisor.dev/gvisor v0.0.0-20221203005347-703fd9b7fbc0 h1:Wobr37noukisGxpKo5jAsLREcpj61RxrWYzD8uwveOY= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM= howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= mvdan.cc/editorconfig v0.2.0/go.mod h1:lvnnD3BNdBYkhq+B4uBuFFKatfp02eB6HixDvEz91C0= -mvdan.cc/sh/v3 v3.6.0 h1:gtva4EXJ0dFNvl5bHjcUEvws+KRcDslT8VKheTYkbGU= mvdan.cc/sh/v3 v3.6.0/go.mod h1:U4mhtBLZ32iWhif5/lD+ygy1zrgaQhUu+XFy7C8+TTA= -nhooyr.io/websocket v1.8.2/go.mod h1:LiqdCg1Cu7TPWxEvPjPa0TGYxCsy4pHNTN9gGluwBpQ= +mvdan.cc/sh/v3 v3.7.0 h1:lSTjdP/1xsddtaKfGg7Myu7DnlHItd3/M2tomOcNNBg= +mvdan.cc/sh/v3 v3.7.0/go.mod h1:K2gwkaesF/D7av7Kxl0HbF5kGOd2ArupNTX3X44+8l8= nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/pkg/visor/logserver/api.go b/pkg/visor/logserver/api.go index 21fe804b96..1b1573eeed 100644 --- a/pkg/visor/logserver/api.go +++ b/pkg/visor/logserver/api.go @@ -113,6 +113,20 @@ func New(log *logging.Logger, tpLogPath, localPath, customPath string, whitelist // File not found, return 404 c.Writer.WriteHeader(http.StatusNotFound) }) + // serve transport log files + r.GET("/transport_logs/:file", func(c *gin.Context) { + // files with .csv extension are **likely** transport log files + if filepath.Ext(c.Param("file")) == ".csv" { + // check transport logs dir for the file, and serve it if it exists + _, err := os.Stat(filepath.Join(tpLogPath, c.Param("file"))) + if err == nil { + c.File(filepath.Join(tpLogPath, c.Param("file"))) + return + } + } + // File not found, return 404 + c.Writer.WriteHeader(http.StatusNotFound) + }) api.Handler = r return api @@ -146,10 +160,6 @@ func whitelistAuth(whitelistedPKs []cipher.PubKey) gin.HandlerFunc { remotePK, _, err := net.SplitHostPort(c.Request.RemoteAddr) if err != nil { c.Writer.WriteHeader(http.StatusInternalServerError) - _, err := c.Writer.Write([]byte("500 Internal Server Error")) - if err != nil { - httputil.GetLogger(c.Request).WithError(err).Errorf("write http response") - } c.AbortWithStatus(http.StatusInternalServerError) return } @@ -170,10 +180,6 @@ func whitelistAuth(whitelistedPKs []cipher.PubKey) gin.HandlerFunc { } else { // Otherwise, return a 401 Unauthorized error. c.Writer.WriteHeader(http.StatusUnauthorized) - _, err := c.Writer.Write([]byte("401 Unauthorized")) - if err != nil { - httputil.GetLogger(c.Request).WithError(err).Errorf("write http response") - } c.AbortWithStatus(http.StatusUnauthorized) return } diff --git a/vendor/atomicgo.dev/cursor/README.md b/vendor/atomicgo.dev/cursor/README.md index 44493c2858..0f79974585 100644 --- a/vendor/atomicgo.dev/cursor/README.md +++ b/vendor/atomicgo.dev/cursor/README.md @@ -78,6 +78,7 @@ Special thanks to github.com/k0kubun/go\-ansi which this project is based on. ## Index - [func Bottom\(\)](<#Bottom>) +- [func Clear\(\)](<#Clear>) - [func ClearLine\(\)](<#ClearLine>) - [func ClearLinesDown\(n int\)](<#ClearLinesDown>) - [func ClearLinesUp\(n int\)](<#ClearLinesUp>) @@ -98,14 +99,38 @@ Special thanks to github.com/k0kubun/go\-ansi which this project is based on. - [func UpAndClear\(n int\)](<#UpAndClear>) - [type Area](<#Area>) - [func NewArea\(\) Area](<#NewArea>) + - [func \(area \*Area\) Bottom\(\)](<#Area.Bottom>) - [func \(area \*Area\) Clear\(\)](<#Area.Clear>) + - [func \(area \*Area\) ClearLinesDown\(n int\)](<#Area.ClearLinesDown>) + - [func \(area \*Area\) ClearLinesUp\(n int\)](<#Area.ClearLinesUp>) + - [func \(area \*Area\) Down\(n int\)](<#Area.Down>) + - [func \(area \*Area\) DownAndClear\(n int\)](<#Area.DownAndClear>) + - [func \(area \*Area\) Move\(x, y int\)](<#Area.Move>) + - [func \(area \*Area\) StartOfLine\(\)](<#Area.StartOfLine>) + - [func \(area \*Area\) StartOfLineDown\(n int\)](<#Area.StartOfLineDown>) + - [func \(area \*Area\) StartOfLineUp\(n int\)](<#Area.StartOfLineUp>) + - [func \(area \*Area\) Top\(\)](<#Area.Top>) + - [func \(area \*Area\) Up\(n int\)](<#Area.Up>) + - [func \(area \*Area\) UpAndClear\(n int\)](<#Area.UpAndClear>) - [func \(area \*Area\) Update\(content string\)](<#Area.Update>) - [func \(area Area\) WithWriter\(writer Writer\) Area](<#Area.WithWriter>) +- [type Cursor](<#Cursor>) + - [func NewCursor\(\) \*Cursor](<#NewCursor>) + - [func \(c \*Cursor\) Clear\(\)](<#Cursor.Clear>) + - [func \(c \*Cursor\) ClearLine\(\)](<#Cursor.ClearLine>) + - [func \(c \*Cursor\) Down\(n int\)](<#Cursor.Down>) + - [func \(c \*Cursor\) Hide\(\)](<#Cursor.Hide>) + - [func \(c \*Cursor\) HorizontalAbsolute\(n int\)](<#Cursor.HorizontalAbsolute>) + - [func \(c \*Cursor\) Left\(n int\)](<#Cursor.Left>) + - [func \(c \*Cursor\) Right\(n int\)](<#Cursor.Right>) + - [func \(c \*Cursor\) Show\(\)](<#Cursor.Show>) + - [func \(c \*Cursor\) Up\(n int\)](<#Cursor.Up>) + - [func \(c \*Cursor\) WithWriter\(w Writer\) \*Cursor](<#Cursor.WithWriter>) - [type Writer](<#Writer>) -## func [Bottom]() +## func [Bottom]() ```go func Bottom() @@ -113,8 +138,17 @@ func Bottom() Bottom moves the cursor to the bottom of the terminal. This is done by calculating how many lines were moved by Up and Down. + +## func [Clear]() + +```go +func Clear() +``` + +Clear clears the current position and moves the cursor to the left. + -## func [ClearLine]() +## func [ClearLine]() ```go func ClearLine() @@ -123,7 +157,7 @@ func ClearLine() ClearLine clears the current line and moves the cursor to it's start position. -## func [ClearLinesDown]() +## func [ClearLinesDown]() ```go func ClearLinesDown(n int) @@ -132,7 +166,7 @@ func ClearLinesDown(n int) ClearLinesDown clears n lines downwards from the current position and moves the cursor. -## func [ClearLinesUp]() +## func [ClearLinesUp]() ```go func ClearLinesUp(n int) @@ -141,7 +175,7 @@ func ClearLinesUp(n int) ClearLinesUp clears n lines upwards from the current position and moves the cursor. -## func [Down]() +## func [Down]() ```go func Down(n int) @@ -150,7 +184,7 @@ func Down(n int) Down moves the cursor n lines down relative to the current position. -## func [DownAndClear]() +## func [DownAndClear]() ```go func DownAndClear(n int) @@ -159,7 +193,7 @@ func DownAndClear(n int) DownAndClear moves the cursor down by n lines, then clears the line. -## func [Hide]() +## func [Hide]() ```go func Hide() @@ -168,7 +202,7 @@ func Hide() Hide the cursor. Don't forget to show the cursor at least at the end of your application with Show. Otherwise the user might have a terminal with a permanently hidden cursor, until they reopen the terminal. -## func [HorizontalAbsolute]() +## func [HorizontalAbsolute]() ```go func HorizontalAbsolute(n int) @@ -177,7 +211,7 @@ func HorizontalAbsolute(n int) HorizontalAbsolute moves the cursor to n horizontally. The position n is absolute to the start of the line. -## func [Left]() +## func [Left]() ```go func Left(n int) @@ -186,7 +220,7 @@ func Left(n int) Left moves the cursor n characters to the left relative to the current position. -## func [Move]() +## func [Move]() ```go func Move(x, y int) @@ -195,7 +229,7 @@ func Move(x, y int) Move moves the cursor relative by x and y. -## func [Right]() +## func [Right]() ```go func Right(n int) @@ -204,16 +238,16 @@ func Right(n int) Right moves the cursor n characters to the right relative to the current position. -## func [SetTarget]() +## func [SetTarget]() ```go func SetTarget(w Writer) ``` -SetTarget allows for any arbitrary io.Writer to be used for cursor movement \(will not work on Windows\). +SetTarget sets to output target of the default curser to the provided cursor.Writer \(wrapping io.Writer\). -## func [Show]() +## func [Show]() ```go func Show() @@ -222,7 +256,7 @@ func Show() Show the cursor if it was hidden previously. Don't forget to show the cursor at least at the end of your application. Otherwise the user might have a terminal with a permanently hidden cursor, until they reopen the terminal. -## func [StartOfLine]() +## func [StartOfLine]() ```go func StartOfLine() @@ -231,7 +265,7 @@ func StartOfLine() StartOfLine moves the cursor to the start of the current line. -## func [StartOfLineDown]() +## func [StartOfLineDown]() ```go func StartOfLineDown(n int) @@ -240,7 +274,7 @@ func StartOfLineDown(n int) StartOfLineDown moves the cursor down by n lines, then moves to cursor to the start of the line. -## func [StartOfLineUp]() +## func [StartOfLineUp]() ```go func StartOfLineUp(n int) @@ -258,7 +292,7 @@ func TestCustomIOWriter(t *testing.T) TestCustomIOWriter tests the cursor functions with a custom Writer. -## func [Up]() +## func [Up]() ```go func Up(n int) @@ -267,7 +301,7 @@ func Up(n int) Up moves the cursor n lines up relative to the current position. -## func [UpAndClear]() +## func [UpAndClear]() ```go func UpAndClear(n int) @@ -276,7 +310,7 @@ func UpAndClear(n int) UpAndClear moves the cursor up by n lines, then clears the line. -## type [Area]() +## type [Area]() Area displays content which can be updated on the fly. You can use this to create live output, charts, dropdowns, etc. @@ -287,7 +321,7 @@ type Area struct { ``` -### func [NewArea]() +### func [NewArea]() ```go func NewArea() Area @@ -295,8 +329,17 @@ func NewArea() Area NewArea returns a new Area. + +### func \(\*Area\) [Bottom]() + +```go +func (area *Area) Bottom() +``` + +Bottom moves the cursor to the bottom of the terminal. This is done by calculating how many lines were moved by Up and Down. + -### func \(\*Area\) [Clear]() +### func \(\*Area\) [Clear]() ```go func (area *Area) Clear() @@ -304,26 +347,235 @@ func (area *Area) Clear() Clear clears the content of the Area. + +### func \(\*Area\) [ClearLinesDown]() + +```go +func (area *Area) ClearLinesDown(n int) +``` + +ClearLinesDown clears n lines downwards from the current position and moves the cursor. + + +### func \(\*Area\) [ClearLinesUp]() + +```go +func (area *Area) ClearLinesUp(n int) +``` + +ClearLinesUp clears n lines upwards from the current position and moves the cursor. + + +### func \(\*Area\) [Down]() + +```go +func (area *Area) Down(n int) +``` + +Down moves the cursor of the area down one line. + + +### func \(\*Area\) [DownAndClear]() + +```go +func (area *Area) DownAndClear(n int) +``` + +DownAndClear moves the cursor down by n lines, then clears the line. + + +### func \(\*Area\) [Move]() + +```go +func (area *Area) Move(x, y int) +``` + +Move moves the cursor relative by x and y. + + +### func \(\*Area\) [StartOfLine]() + +```go +func (area *Area) StartOfLine() +``` + +StartOfLine moves the cursor to the start of the current line. + + +### func \(\*Area\) [StartOfLineDown]() + +```go +func (area *Area) StartOfLineDown(n int) +``` + +StartOfLineDown moves the cursor down by n lines, then moves to cursor to the start of the line. + + +### func \(\*Area\) [StartOfLineUp]() + +```go +func (area *Area) StartOfLineUp(n int) +``` + +StartOfLineUp moves the cursor up by n lines, then moves to cursor to the start of the line. + + +### func \(\*Area\) [Top]() + +```go +func (area *Area) Top() +``` + +Top moves the cursor to the top of the area. This is done by calculating how many lines were moved by Up and Down. + + +### func \(\*Area\) [Up]() + +```go +func (area *Area) Up(n int) +``` + +Up moves the cursor of the area up one line. + + +### func \(\*Area\) [UpAndClear]() + +```go +func (area *Area) UpAndClear(n int) +``` + +UpAndClear moves the cursor up by n lines, then clears the line. + -### func \(\*Area\) [Update]() +### func \(\*Area\) [Update]() ```go func (area *Area) Update(content string) ``` -Update overwrites the content of the Area. +Update overwrites the content of the Area and adjusts its height based on content. -### func \(Area\) [WithWriter]() +### func \(Area\) [WithWriter]() ```go func (area Area) WithWriter(writer Writer) Area ``` -WithWriter sets a custom writer for the Area. +WithWriter sets the custom writer. + + +## type [Cursor]() + +Cursor displays content which can be updated on the fly. You can use this to create live output, charts, dropdowns, etc. + +```go +type Cursor struct { + // contains filtered or unexported fields +} +``` + + +### func [NewCursor]() + +```go +func NewCursor() *Cursor +``` + +NewCursor creates a new Cursor instance writing to os.Stdout. + + +### func \(\*Cursor\) [Clear]() + +```go +func (c *Cursor) Clear() +``` + +Clear clears the current position and moves the cursor to the left. + + +### func \(\*Cursor\) [ClearLine]() + +```go +func (c *Cursor) ClearLine() +``` + +ClearLine clears the current line and moves the cursor to it's start position. + + +### func \(\*Cursor\) [Down]() + +```go +func (c *Cursor) Down(n int) +``` + +Down moves the cursor n lines down relative to the current position. + + +### func \(\*Cursor\) [Hide]() + +```go +func (c *Cursor) Hide() +``` + +Hide the cursor. Don't forget to show the cursor at least at the end of your application with Show. Otherwise the user might have a terminal with a permanently hidden cursor, until they reopen the terminal. + + +### func \(\*Cursor\) [HorizontalAbsolute]() + +```go +func (c *Cursor) HorizontalAbsolute(n int) +``` + +HorizontalAbsolute moves the cursor to n horizontally. The position n is absolute to the start of the line. + + +### func \(\*Cursor\) [Left]() + +```go +func (c *Cursor) Left(n int) +``` + +Left moves the cursor n characters to the left relative to the current position. + + +### func \(\*Cursor\) [Right]() + +```go +func (c *Cursor) Right(n int) +``` + +Right moves the cursor n characters to the right relative to the current position. + + +### func \(\*Cursor\) [Show]() + +```go +func (c *Cursor) Show() +``` + +Show the cursor if it was hidden previously. Don't forget to show the cursor at least at the end of your application. Otherwise the user might have a terminal with a permanently hidden cursor, until they reopen the terminal. + + +### func \(\*Cursor\) [Up]() + +```go +func (c *Cursor) Up(n int) +``` + +Up moves the cursor n lines up relative to the current position. + + +### func \(\*Cursor\) [WithWriter]() + +```go +func (c *Cursor) WithWriter(w Writer) *Cursor +``` + +WithWriter allows for any arbitrary Writer to be used for cursor movement abstracted. -## type [Writer]() +## type [Writer]() Writer is an expanded io.Writer interface with a file descriptor. diff --git a/vendor/atomicgo.dev/cursor/area.go b/vendor/atomicgo.dev/cursor/area.go index e467b564a8..5b26b5db5d 100644 --- a/vendor/atomicgo.dev/cursor/area.go +++ b/vendor/atomicgo.dev/cursor/area.go @@ -1,7 +1,6 @@ package cursor import ( - "fmt" "os" "strings" ) @@ -9,43 +8,157 @@ import ( // Area displays content which can be updated on the fly. // You can use this to create live output, charts, dropdowns, etc. type Area struct { - height int - writer Writer + height int + writer Writer + cursor *Cursor + cursorPosY int } // NewArea returns a new Area. func NewArea() Area { return Area{ - writer: os.Stdout, - height: 0, + height: 0, + writer: os.Stdout, + cursor: cursor, + cursorPosY: 0, } } -// WithWriter sets a custom writer for the Area. +// WithWriter sets the custom writer. func (area Area) WithWriter(writer Writer) Area { area.writer = writer + area.cursor = area.cursor.WithWriter(writer) return area } // Clear clears the content of the Area. func (area *Area) Clear() { - Bottom() + // Initialize writer if not done yet + if area.writer == nil { + area.writer = os.Stdout + } if area.height > 0 { - ClearLinesUp(area.height) + area.Bottom() + area.ClearLinesUp(area.height) + area.StartOfLine() + } else { + area.StartOfLine() + area.cursor.ClearLine() } } -// Update overwrites the content of the Area. +// Update overwrites the content of the Area and adjusts its height based on content. func (area *Area) Update(content string) { - oldWriter := target - - SetTarget(area.writer) // Temporary set the target to the Area's writer so we can use the cursor functions area.Clear() - SetTarget(oldWriter) // Reset the target to the old writer - fmt.Fprintln(area.writer, content) + area.writeArea(content) + area.cursorPosY = 0 + area.height = strings.Count(content, "\n") +} + +// Up moves the cursor of the area up one line. +func (area *Area) Up(n int) { + if n > 0 { + if area.cursorPosY+n > area.height { + n = area.height - area.cursorPosY + } + + area.cursor.Up(n) + area.cursorPosY += n + } +} + +// Down moves the cursor of the area down one line. +func (area *Area) Down(n int) { + if n > 0 { + if area.cursorPosY-n < 0 { + n = area.height - area.cursorPosY + } + + area.cursor.Down(n) + area.cursorPosY -= n + } +} + +// Bottom moves the cursor to the bottom of the terminal. +// This is done by calculating how many lines were moved by Up and Down. +func (area *Area) Bottom() { + if area.cursorPosY > 0 { + area.Down(area.cursorPosY) + area.cursorPosY = 0 + } +} + +// Top moves the cursor to the top of the area. +// This is done by calculating how many lines were moved by Up and Down. +func (area *Area) Top() { + if area.cursorPosY < area.height { + area.Up(area.height - area.cursorPosY) + area.cursorPosY = area.height + } +} + +// StartOfLine moves the cursor to the start of the current line. +func (area *Area) StartOfLine() { + area.cursor.HorizontalAbsolute(0) +} - height = 0 - area.height = len(strings.Split(content, "\n")) +// StartOfLineDown moves the cursor down by n lines, then moves to cursor to the start of the line. +func (area *Area) StartOfLineDown(n int) { + area.Down(n) + area.StartOfLine() +} + +// StartOfLineUp moves the cursor up by n lines, then moves to cursor to the start of the line. +func (area *Area) StartOfLineUp(n int) { + area.Up(n) + area.StartOfLine() +} + +// UpAndClear moves the cursor up by n lines, then clears the line. +func (area *Area) UpAndClear(n int) { + area.Up(n) + area.cursor.ClearLine() +} + +// DownAndClear moves the cursor down by n lines, then clears the line. +func (area *Area) DownAndClear(n int) { + area.Down(n) + area.cursor.ClearLine() +} + +// Move moves the cursor relative by x and y. +func (area *Area) Move(x, y int) { + if x > 0 { + area.cursor.Right(x) + } else if x < 0 { + area.cursor.Left(-x) + } + + if y > 0 { + area.Up(y) + } else if y < 0 { + area.Down(-y) + } +} + +// ClearLinesUp clears n lines upwards from the current position and moves the cursor. +func (area *Area) ClearLinesUp(n int) { + area.StartOfLine() + area.cursor.ClearLine() + + for i := 0; i < n; i++ { + area.UpAndClear(1) + } +} + +// ClearLinesDown clears n lines downwards from the current position and moves the cursor. +func (area *Area) ClearLinesDown(n int) { + area.StartOfLine() + area.cursor.ClearLine() + + for i := 0; i < n; i++ { + area.DownAndClear(1) + } } diff --git a/vendor/atomicgo.dev/cursor/area_other.go b/vendor/atomicgo.dev/cursor/area_other.go new file mode 100644 index 0000000000..b92390de07 --- /dev/null +++ b/vendor/atomicgo.dev/cursor/area_other.go @@ -0,0 +1,13 @@ +//go:build !windows +// +build !windows + +package cursor + +import ( + "fmt" +) + +// Update overwrites the content of the Area and adjusts its height based on content. +func (area *Area) writeArea(content string) { + fmt.Fprint(area.writer, content) +} diff --git a/vendor/atomicgo.dev/cursor/area_windows.go b/vendor/atomicgo.dev/cursor/area_windows.go new file mode 100644 index 0000000000..de7dd29292 --- /dev/null +++ b/vendor/atomicgo.dev/cursor/area_windows.go @@ -0,0 +1,21 @@ +//go:build windows +// +build windows + +package cursor + +import ( + "fmt" +) + +// writeArea is a helper for platform dependant output. +// For Windows newlines '\n' in the content are replaced by '\r\n' +func (area *Area) writeArea(content string) { + last := ' ' + for _, r := range content { + if r == '\n' && last != '\r' { + fmt.Fprint(area.writer, "\r\n") + continue + } + fmt.Fprint(area.writer, string(r)) + } +} diff --git a/vendor/atomicgo.dev/cursor/cursor.go b/vendor/atomicgo.dev/cursor/cursor.go index e59e968b01..89a3efcfae 100644 --- a/vendor/atomicgo.dev/cursor/cursor.go +++ b/vendor/atomicgo.dev/cursor/cursor.go @@ -1,70 +1,26 @@ -//go:build !windows -// +build !windows - package cursor import ( - "fmt" "os" ) -var target Writer = os.Stdout - -// SetTarget allows for any arbitrary io.Writer to be used -// for cursor movement (will not work on Windows). -func SetTarget(w Writer) { - target = w +// Cursor displays content which can be updated on the fly. +// You can use this to create live output, charts, dropdowns, etc. +type Cursor struct { + writer Writer } -// Up moves the cursor n lines up relative to the current position. -func Up(n int) { - fmt.Fprintf(target, "\x1b[%dA", n) - height += n +// NewCursor creates a new Cursor instance writing to os.Stdout. +func NewCursor() *Cursor { + return &Cursor{writer: os.Stdout} } -// Down moves the cursor n lines down relative to the current position. -func Down(n int) { - fmt.Fprintf(target, "\x1b[%dB", n) - - if height-n <= 0 { - height = 0 - } else { - height -= n +// WithWriter allows for any arbitrary Writer to be used +// for cursor movement abstracted. +func (c *Cursor) WithWriter(w Writer) *Cursor { + if w != nil { + c.writer = w } -} - -// Right moves the cursor n characters to the right relative to the current position. -func Right(n int) { - fmt.Fprintf(target, "\x1b[%dC", n) -} - -// Left moves the cursor n characters to the left relative to the current position. -func Left(n int) { - fmt.Fprintf(target, "\x1b[%dD", n) -} - -// HorizontalAbsolute moves the cursor to n horizontally. -// The position n is absolute to the start of the line. -func HorizontalAbsolute(n int) { - n++ // Moves the line to the character after n - fmt.Fprintf(target, "\x1b[%dG", n) -} - -// Show the cursor if it was hidden previously. -// Don't forget to show the cursor at least at the end of your application. -// Otherwise the user might have a terminal with a permanently hidden cursor, until they reopen the terminal. -func Show() { - fmt.Fprint(target, "\x1b[?25h") -} - -// Hide the cursor. -// Don't forget to show the cursor at least at the end of your application with Show. -// Otherwise the user might have a terminal with a permanently hidden cursor, until they reopen the terminal. -func Hide() { - fmt.Fprintf(target, "\x1b[?25l") -} -// ClearLine clears the current line and moves the cursor to it's start position. -func ClearLine() { - fmt.Fprintf(target, "\x1b[2K") + return c } diff --git a/vendor/atomicgo.dev/cursor/cursor_other.go b/vendor/atomicgo.dev/cursor/cursor_other.go new file mode 100644 index 0000000000..7c185578f1 --- /dev/null +++ b/vendor/atomicgo.dev/cursor/cursor_other.go @@ -0,0 +1,67 @@ +//go:build !windows +// +build !windows + +package cursor + +import ( + "fmt" +) + +// Up moves the cursor n lines up relative to the current position. +func (c *Cursor) Up(n int) { + if n > 0 { + fmt.Fprintf(c.writer, "\x1b[%dA", n) + } +} + +// Down moves the cursor n lines down relative to the current position. +func (c *Cursor) Down(n int) { + if n > 0 { + fmt.Fprintf(c.writer, "\x1b[%dB", n) + } +} + +// Right moves the cursor n characters to the right relative to the current position. +func (c *Cursor) Right(n int) { + if n > 0 { + fmt.Fprintf(c.writer, "\x1b[%dC", n) + } +} + +// Left moves the cursor n characters to the left relative to the current position. +func (c *Cursor) Left(n int) { + if n > 0 { + fmt.Fprintf(c.writer, "\x1b[%dD", n) + } +} + +// HorizontalAbsolute moves the cursor to n horizontally. +// The position n is absolute to the start of the line. +func (c *Cursor) HorizontalAbsolute(n int) { + n++ // Moves the line to the character after n + fmt.Fprintf(c.writer, "\x1b[%dG", n) +} + +// Show the cursor if it was hidden previously. +// Don't forget to show the cursor at least at the end of your application. +// Otherwise the user might have a terminal with a permanently hidden cursor, until they reopen the terminal. +func (c *Cursor) Show() { + fmt.Fprint(c.writer, "\x1b[?25h") +} + +// Hide the cursor. +// Don't forget to show the cursor at least at the end of your application with Show. +// Otherwise the user might have a terminal with a permanently hidden cursor, until they reopen the terminal. +func (c *Cursor) Hide() { + fmt.Fprintf(c.writer, "\x1b[?25l") +} + +// ClearLine clears the current line and moves the cursor to it's start position. +func (c *Cursor) ClearLine() { + fmt.Fprintf(c.writer, "\x1b[2K") +} + +// Clear clears the current position and moves the cursor to the left. +func (c *Cursor) Clear() { + fmt.Fprintf(c.writer, "\x1b[K") +} diff --git a/vendor/atomicgo.dev/cursor/cursor_windows.go b/vendor/atomicgo.dev/cursor/cursor_windows.go index 9a6173baec..ebe2bc592d 100644 --- a/vendor/atomicgo.dev/cursor/cursor_windows.go +++ b/vendor/atomicgo.dev/cursor/cursor_windows.go @@ -1,46 +1,35 @@ +//go:build windows +// +build windows + package cursor import ( - "os" "syscall" "unsafe" ) -var target Writer = os.Stdout - -// SetTarget allows for any arbitrary Writer to be used -func SetTarget(w Writer) { - target = w -} - // Up moves the cursor n lines up relative to the current position. -func Up(n int) { - move(0, -n) - height += n +func (c *Cursor) Up(n int) { + c.move(0, -n) } // Down moves the cursor n lines down relative to the current position. -func Down(n int) { - move(0, n) - if height-n <= 0 { - height = 0 - } else { - height -= n - } +func (c *Cursor) Down(n int) { + c.move(0, n) } // Right moves the cursor n characters to the right relative to the current position. -func Right(n int) { - move(n, 0) +func (c *Cursor) Right(n int) { + c.move(n, 0) } // Left moves the cursor n characters to the left relative to the current position. -func Left(n int) { - move(-n, 0) +func (c *Cursor) Left(n int) { + c.move(-n, 0) } -func move(x int, y int) { - handle := syscall.Handle(target.Fd()) +func (c *Cursor) move(x int, y int) { + handle := syscall.Handle(c.writer.Fd()) var csbi consoleScreenBufferInfo _, _, _ = procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) @@ -54,8 +43,8 @@ func move(x int, y int) { // HorizontalAbsolute moves the cursor to n horizontally. // The position n is absolute to the start of the line. -func HorizontalAbsolute(n int) { - handle := syscall.Handle(target.Fd()) +func (c *Cursor) HorizontalAbsolute(n int) { + handle := syscall.Handle(c.writer.Fd()) var csbi consoleScreenBufferInfo _, _, _ = procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) @@ -74,8 +63,8 @@ func HorizontalAbsolute(n int) { // Show the cursor if it was hidden previously. // Don't forget to show the cursor at least at the end of your application. // Otherwise the user might have a terminal with a permanently hidden cursor, until he reopens the terminal. -func Show() { - handle := syscall.Handle(target.Fd()) +func (c *Cursor) Show() { + handle := syscall.Handle(c.writer.Fd()) var cci consoleCursorInfo _, _, _ = procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&cci))) @@ -87,8 +76,8 @@ func Show() { // Hide the cursor. // Don't forget to show the cursor at least at the end of your application with Show. // Otherwise the user might have a terminal with a permanently hidden cursor, until he reopens the terminal. -func Hide() { - handle := syscall.Handle(target.Fd()) +func (c *Cursor) Hide() { + handle := syscall.Handle(c.writer.Fd()) var cci consoleCursorInfo _, _, _ = procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&cci))) @@ -98,8 +87,8 @@ func Hide() { } // ClearLine clears the current line and moves the cursor to its start position. -func ClearLine() { - handle := syscall.Handle(target.Fd()) +func (c *Cursor) ClearLine() { + handle := syscall.Handle(c.writer.Fd()) var csbi consoleScreenBufferInfo _, _, _ = procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) @@ -110,3 +99,20 @@ func ClearLine() { x = csbi.size.x _, _, _ = procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(x), uintptr(*(*int32)(unsafe.Pointer(&cursor))), uintptr(unsafe.Pointer(&w))) } + +// Clear clears the current position and moves the cursor to the left. +func (c *Cursor) Clear() { + handle := syscall.Handle(c.writer.Fd()) + + var csbi consoleScreenBufferInfo + _, _, _ = procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + + var w uint32 + cursor := csbi.cursorPosition + _, _, _ = procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(1), uintptr(*(*int32)(unsafe.Pointer(&cursor))), uintptr(unsafe.Pointer(&w))) + + if cursor.x > 0 { + cursor.x-- + } + _, _, _ = procSetConsoleCursorPosition.Call(uintptr(handle), uintptr(*(*int32)(unsafe.Pointer(&cursor)))) +} diff --git a/vendor/atomicgo.dev/cursor/go.work b/vendor/atomicgo.dev/cursor/go.work new file mode 100644 index 0000000000..c71ff3ba75 --- /dev/null +++ b/vendor/atomicgo.dev/cursor/go.work @@ -0,0 +1,10 @@ +go 1.18 + +use . + +// replace git.neotel.at/go/c5rest => /home/rl/work/c5rest +// replace git.neotel.at/go/c5db => /home/rl/work/c5db + +// replace github.com/pterm/pterm => H:/work/github.com/pterm/pterm + +// replace atomicgo.dev/cursor => H:/github.com/atomicgo.dev/cursor diff --git a/vendor/atomicgo.dev/cursor/utils.go b/vendor/atomicgo.dev/cursor/utils.go index 6bf619b7bd..4b75f09e01 100644 --- a/vendor/atomicgo.dev/cursor/utils.go +++ b/vendor/atomicgo.dev/cursor/utils.go @@ -1,17 +1,92 @@ package cursor -import "io" +import ( + "io" + "os" +) -var height int +// +// Helpers for global cursor handling on os.Stdout +// + +var autoheight int +var cursor = &Cursor{writer: os.Stdout} + +// Writer is an expanded io.Writer interface with a file descriptor. +type Writer interface { + io.Writer + Fd() uintptr +} + +// SetTarget sets to output target of the default curser to the +// provided cursor.Writer (wrapping io.Writer). +func SetTarget(w Writer) { + cursor = cursor.WithWriter(w) +} + +// Up moves the cursor n lines up relative to the current position. +func Up(n int) { + cursor.Up(n) + autoheight += n +} + +// Down moves the cursor n lines down relative to the current position. +func Down(n int) { + cursor.Down(n) + + if autoheight > 0 { + autoheight -= n + } +} + +// Right moves the cursor n characters to the right relative to the current position. +func Right(n int) { + cursor.Right(n) +} + +// Left moves the cursor n characters to the left relative to the current position. +func Left(n int) { + cursor.Left(n) +} + +// HorizontalAbsolute moves the cursor to n horizontally. +// The position n is absolute to the start of the line. +func HorizontalAbsolute(n int) { + cursor.HorizontalAbsolute(n) +} + +// Show the cursor if it was hidden previously. +// Don't forget to show the cursor at least at the end of your application. +// Otherwise the user might have a terminal with a permanently hidden cursor, until they reopen the terminal. +func Show() { + cursor.Show() +} + +// Hide the cursor. +// Don't forget to show the cursor at least at the end of your application with Show. +// Otherwise the user might have a terminal with a permanently hidden cursor, until they reopen the terminal. +func Hide() { + cursor.Hide() +} + +// ClearLine clears the current line and moves the cursor to it's start position. +func ClearLine() { + cursor.ClearLine() +} + +// Clear clears the current position and moves the cursor to the left. +func Clear() { + cursor.Clear() +} // Bottom moves the cursor to the bottom of the terminal. // This is done by calculating how many lines were moved by Up and Down. func Bottom() { - if height > 0 { - Down(height) + if autoheight > 0 { + Down(autoheight) StartOfLine() - height = 0 + autoheight = 0 } } @@ -74,9 +149,3 @@ func ClearLinesDown(n int) { DownAndClear(1) } } - -// Writer is an expanded io.Writer interface with a file descriptor. -type Writer interface { - io.Writer - Fd() uintptr -} diff --git a/vendor/atomicgo.dev/schedule/.golangci.yml b/vendor/atomicgo.dev/schedule/.golangci.yml index d5a1a2e1c9..796ca35c7c 100644 --- a/vendor/atomicgo.dev/schedule/.golangci.yml +++ b/vendor/atomicgo.dev/schedule/.golangci.yml @@ -17,54 +17,83 @@ linters-settings: - ptrToRefParam - paramTypeCombine - unnamedResult - misspell: - locale: US linters: disable-all: true enable: + # default linters - errcheck - gosimple - govet - ineffassign - staticcheck + - typecheck + - unused + # additional linters + - asasalint - asciicheck + - bidichk - bodyclose + - containedctx + - contextcheck + - decorder - dupl - durationcheck + - errchkjson + - errname - errorlint - exhaustive - - gci - - gocognit + - exhaustruct + - exportloopref + - forcetypeassert + - gocheckcompilerdirectives - gocritic - godot - godox - goerr113 - gofmt - - goimports - goprintffuncname - - misspell + - gosec + - gosmopolitan + - importas + - ireturn + - nakedret + - nestif - nilerr - - noctx + - nilnil - prealloc - predeclared + - revive + - rowserrcheck + - tagalign + - tenv - thelper + - tparallel - unconvert - unparam + - usestdlibvars - wastedassign + - whitespace - wrapcheck + - wsl + - gocyclo + - misspell issues: - # Excluding configuration per-path, per-linter, per-text and per-source + include: + - EXC0012 + - EXC0014 exclude-rules: - path: _test\.go linters: + - gocyclo - errcheck - dupl + - gosec - gocritic - - wrapcheck - - goerr113 - # https://github.com/go-critic/go-critic/issues/926 - linters: - gocritic text: "unnecessaryDefer:" + - linters: + - gocritic + text: "preferDecodeRune:" service: - golangci-lint-version: 1.39.x # use the fixed version to not introduce new linters unexpectedly + golangci-lint-version: 1.53.x diff --git a/vendor/atomicgo.dev/schedule/README.md b/vendor/atomicgo.dev/schedule/README.md index ca0b291fc9..3f7f9a8460 100644 --- a/vendor/atomicgo.dev/schedule/README.md +++ b/vendor/atomicgo.dev/schedule/README.md @@ -1,13 +1,14 @@

AtomicGo | schedule

+Downloads Latest Release -Tests +Tests @@ -18,21 +19,19 @@ Unit test count - -Issues - - License: MIT + + +Go report +

---

-Get The Module -| Documentation | Contributing @@ -49,11 +48,6 @@

-
-
- ----------------------------------------------------------------------------------------------------- - -

@@ -61,11 +55,6 @@

-
-
- ----------------------------------------------------------------------------------------------------- - -

@@ -86,19 +75,20 @@ It can run a function at a given time, in a given duration, or repeatedly at a g ## Index -- [type Task](<#type-task>) - - [func After(d time.Duration, task func()) *Task](<#func-after>) - - [func At(t time.Time, task func()) *Task](<#func-at>) - - [func Every(interval time.Duration, task func()) *Task](<#func-every>) - - [func (s *Task) ExecutesIn() time.Duration](<#func-task-executesin>) - - [func (s *Task) IsActive() bool](<#func-task-isactive>) - - [func (s *Task) NextExecutionTime() time.Time](<#func-task-nextexecutiontime>) - - [func (s *Task) StartedAt() time.Time](<#func-task-startedat>) - - [func (s *Task) Stop()](<#func-task-stop>) - - [func (s *Task) Wait()](<#func-task-wait>) +- [type Task](<#Task>) + - [func After\(d time.Duration, task func\(\)\) \*Task](<#After>) + - [func At\(t time.Time, task func\(\)\) \*Task](<#At>) + - [func Every\(interval time.Duration, task func\(\) bool\) \*Task](<#Every>) + - [func \(s \*Task\) ExecutesIn\(\) time.Duration](<#Task.ExecutesIn>) + - [func \(s \*Task\) IsActive\(\) bool](<#Task.IsActive>) + - [func \(s \*Task\) NextExecutionTime\(\) time.Time](<#Task.NextExecutionTime>) + - [func \(s \*Task\) StartedAt\(\) time.Time](<#Task.StartedAt>) + - [func \(s \*Task\) Stop\(\)](<#Task.Stop>) + - [func \(s \*Task\) Wait\(\)](<#Task.Wait>) -## type Task + +## type [Task]() Task holds information about the running task and can be used to stop running tasks. @@ -108,7 +98,8 @@ type Task struct { } ``` -### func After + +### func [After]() ```go func After(d time.Duration, task func()) *Task @@ -119,6 +110,8 @@ After executes the task after the given duration. The function is non\-blocking.
Example

+ + ```go package main @@ -143,7 +136,8 @@ func main() {

-### func At + +### func [At]() ```go func At(t time.Time, task func()) *Task @@ -154,6 +148,8 @@ At executes the task at the given time. The function is non\-blocking. If you wa
Example

+ + ```go package main @@ -178,17 +174,20 @@ func main() {

-### func Every + +### func [Every]() ```go -func Every(interval time.Duration, task func()) *Task +func Every(interval time.Duration, task func() bool) *Task ``` -Every executes the task in the given interval. The function is non\-blocking. If you want to wait for the task to be executed, use the Task.Wait method. +Every executes the task in the given interval, as long as the task function returns true. The function is non\-blocking. If you want to wait for the task to be executed, use the Task.Wait method.
Example

+ + ```go package main @@ -200,8 +199,9 @@ import ( ) func main() { - task := schedule.Every(5*time.Second, func() { - fmt.Println("5 seconds are over!") + task := schedule.Every(time.Second, func() bool { + fmt.Println("1 second is over!") + return true // return false to stop the task }) fmt.Println("Some stuff happening...") @@ -215,7 +215,8 @@ func main() {

-### func \(\*Task\) ExecutesIn + +### func \(\*Task\) [ExecutesIn]() ```go func (s *Task) ExecutesIn() time.Duration @@ -223,7 +224,8 @@ func (s *Task) ExecutesIn() time.Duration ExecutesIn returns the duration until the next execution. -### func \(\*Task\) IsActive + +### func \(\*Task\) [IsActive]() ```go func (s *Task) IsActive() bool @@ -231,7 +233,8 @@ func (s *Task) IsActive() bool IsActive returns true if the scheduler is active. -### func \(\*Task\) NextExecutionTime + +### func \(\*Task\) [NextExecutionTime]() ```go func (s *Task) NextExecutionTime() time.Time @@ -239,7 +242,8 @@ func (s *Task) NextExecutionTime() time.Time NextExecutionTime returns the time when the next execution will happen. -### func \(\*Task\) StartedAt + +### func \(\*Task\) [StartedAt]() ```go func (s *Task) StartedAt() time.Time @@ -247,7 +251,8 @@ func (s *Task) StartedAt() time.Time StartedAt returns the time when the scheduler was started. -### func \(\*Task\) Stop + +### func \(\*Task\) [Stop]() ```go func (s *Task) Stop() @@ -255,7 +260,8 @@ func (s *Task) Stop() Stop stops the scheduler. -### func \(\*Task\) Wait + +### func \(\*Task\) [Wait]() ```go func (s *Task) Wait() @@ -263,8 +269,6 @@ func (s *Task) Wait() Wait blocks until the scheduler is stopped. After and At will stop automatically after the task is executed. - - Generated by [gomarkdoc]() diff --git a/vendor/atomicgo.dev/schedule/schedule.go b/vendor/atomicgo.dev/schedule/schedule.go index 1ab1c8390a..635d29d369 100644 --- a/vendor/atomicgo.dev/schedule/schedule.go +++ b/vendor/atomicgo.dev/schedule/schedule.go @@ -91,9 +91,9 @@ func At(t time.Time, task func()) *Task { return scheduler } -// Every executes the task in the given interval. +// Every executes the task in the given interval, as long as the task function returns true. // The function is non-blocking. If you want to wait for the task to be executed, use the Task.Wait method. -func Every(interval time.Duration, task func()) *Task { +func Every(interval time.Duration, task func() bool) *Task { scheduler := newTask() scheduler.nextExecution = time.Now().Add(interval) diff --git a/vendor/github.com/bytedance/sonic/Makefile b/vendor/github.com/bytedance/sonic/Makefile index 8cc0acf15c..c672c313e7 100644 --- a/vendor/github.com/bytedance/sonic/Makefile +++ b/vendor/github.com/bytedance/sonic/Makefile @@ -23,12 +23,12 @@ CPU_avx := amd64 CPU_avx2 := amd64 CPU_sse := amd64 -TMPL_avx := fastint_amd64_test fastfloat_amd64_test native_amd64_test native_export_amd64 -TMPL_avx2 := fastint_amd64_test fastfloat_amd64_test native_amd64_test native_export_amd64 -TMPL_sse := fastint_amd64_test fastfloat_amd64_test native_amd64_test native_export_amd64 +TMPL_avx := fastint_amd64_test fastfloat_amd64_test native_amd64_test recover_amd64_test +TMPL_avx2 := fastint_amd64_test fastfloat_amd64_test native_amd64_test recover_amd64_test +TMPL_sse := fastint_amd64_test fastfloat_amd64_test native_amd64_test recover_amd64_test -CFLAGS_avx := -msse -mno-sse4 -mavx -mpclmul -mno-avx2 -DUSE_AVX=1 -DUSE_AVX2=0 -CFLAGS_avx2 := -msse -mno-sse4 -mavx -mpclmul -mavx2 -DUSE_AVX=1 -DUSE_AVX2=1 +CFLAGS_avx := -msse -mno-sse4 -mavx -mpclmul -mno-avx2 -mstack-alignment=0 -DUSE_AVX=1 -DUSE_AVX2=0 +CFLAGS_avx2 := -msse -mno-sse4 -mavx -mpclmul -mavx2 -mstack-alignment=0 -DUSE_AVX=1 -DUSE_AVX2=1 CFLAGS_sse := -msse -mno-sse4 -mno-avx -mno-avx2 -mpclmul CC_amd64 := clang @@ -66,7 +66,7 @@ define build_arch $(eval @cpu := $(value CPU_$(1))) $(eval @deps := $(foreach tmpl,$(value TMPL_$(1)),${OUT_DIR}/$(1)/${tmpl}.go)) $(eval @asmin := ${TMP_DIR}/$(1)/native.s) - $(eval @asmout := ${OUT_DIR}/$(1)/native_${@cpu}.s) + $(eval @asmout := ${OUT_DIR}/$(1)/native_text_${@cpu}.go) $(eval @stubin := ${OUT_DIR}/native_${@cpu}.tmpl) $(eval @stubout := ${OUT_DIR}/$(1)/native_${@cpu}.go) @@ -75,8 +75,7 @@ $(1): ${@asmout} ${@deps} ${@asmout}: ${@stubout} ${NATIVE_SRC} mkdir -p ${TMP_DIR}/$(1) $${CC_${@cpu}} $${CFLAGS} $${CFLAGS_$(1)} -S -o ${TMP_DIR}/$(1)/native.s ${SRC_FILE} - python3 $${ASM2ASM_${@cpu}} ${@asmout} ${TMP_DIR}/$(1)/native.s - asmfmt -w ${@asmout} + python3 $${ASM2ASM_${@cpu}} -r ${@stubout} ${TMP_DIR}/$(1)/native.s $(eval $(call \ build_tmpl, \ diff --git a/vendor/github.com/bytedance/sonic/README.md b/vendor/github.com/bytedance/sonic/README.md index cdb32a57de..42772018c1 100644 --- a/vendor/github.com/bytedance/sonic/README.md +++ b/vendor/github.com/bytedance/sonic/README.md @@ -5,8 +5,8 @@ English | [中文](README_ZH_CN.md) A blazingly fast JSON serializing & deserializing library, accelerated by JIT (just-in-time compiling) and SIMD (single-instruction-multiple-data). ## Requirement -- Go 1.15~1.20 -- Linux/MacOS/Windows +- Go 1.16~1.21 +- Linux / MacOS / Windows(need go1.17 above) - Amd64 ARCH ## Features @@ -76,6 +76,10 @@ BenchmarkSetOne_Jsoniter-16 79475 ns/op 163.8 BenchmarkSetOne_Parallel_Sonic-16 850.9 ns/op 15305.31 MB/s 1584 B/op 17 allocs/op BenchmarkSetOne_Parallel_Sjson-16 18194 ns/op 715.77 MB/s 52247 B/op 9 allocs/op BenchmarkSetOne_Parallel_Jsoniter-16 33560 ns/op 388.05 MB/s 45892 B/op 964 allocs/op +BenchmarkLoadNode/LoadAll()-16 11384 ns/op 1143.93 MB/s 6307 B/op 25 allocs/op +BenchmarkLoadNode_Parallel/LoadAll()-16 5493 ns/op 2370.68 MB/s 7145 B/op 25 allocs/op +BenchmarkLoadNode/Interface()-16 17722 ns/op 734.85 MB/s 13323 B/op 88 allocs/op +BenchmarkLoadNode_Parallel/Interface()-16 10330 ns/op 1260.70 MB/s 15178 B/op 88 allocs/op ``` - [Small](https://github.com/bytedance/sonic/blob/main/testdata/small.go) (400B, 11 keys, 3 layers) ![small benchmarks](./docs/imgs/bench-small.png) @@ -282,6 +286,42 @@ println(string(buf) == string(exp)) // true - iteration: `Values()`, `Properties()`, `ForEach()`, `SortKeys()` - modification: `Set()`, `SetByIndex()`, `Add()` +### Ast.Visitor +Sonic provides an advanced API for fully parsing JSON into non-standard types (neither `struct` not `map[string]interface{}`) without using any intermediate representation (`ast.Node` or `interface{}`). For example, you might have the following types which are like `interface{}` but actually not `interface{}`: +```go +type UserNode interface {} + +// the following types implement the UserNode interface. +type ( + UserNull struct{} + UserBool struct{ Value bool } + UserInt64 struct{ Value int64 } + UserFloat64 struct{ Value float64 } + UserString struct{ Value string } + UserObject struct{ Value map[string]UserNode } + UserArray struct{ Value []UserNode } +) +``` +Sonic provides the following API to return **the preorder traversal of a JSON AST**. The `ast.Visitor` is a SAX style interface which is used in some C++ JSON library. You should implement `ast.Visitor` by yourself and pass it to `ast.Preorder()` method. In your visitor you can make your custom types to represent JSON values. There may be an O(n) space container (such as stack) in your visitor to record the object / array hierarchy. +```go +func Preorder(str string, visitor Visitor, opts *VisitorOptions) error + +type Visitor interface { + OnNull() error + OnBool(v bool) error + OnString(v string) error + OnInt64(v int64, n json.Number) error + OnFloat64(v float64, n json.Number) error + OnObjectBegin(capacity int) error + OnObjectKey(key string) error + OnObjectEnd() error + OnArrayBegin(capacity int) error + OnArrayEnd() error +} +``` + +See [ast/visitor.go](https://github.com/bytedance/sonic/blob/main/ast/visitor.go) for detailed usage. We also implement a demo visitor for `UserNode` in [ast/visitor_test.go](https://github.com/bytedance/sonic/blob/main/ast/visitor_test.go). + ## Compatibility Sonic **DOES NOT** ensure to support all environments, due to the difficulty of developing high-performance codes. For developers who use sonic to build their applications in different environments, we have the following suggestions: @@ -311,7 +351,7 @@ func init() { err := sonic.Pretouch(reflect.TypeOf(v)) // with more CompileOption... - err := sonic.Pretouch(reflect.TypeOf(v), + err := sonic.Pretouch(reflect.TypeOf(v), // If the type is too deep nesting (nesting depth > option.DefaultMaxInlineDepth), // you can set compile recursive loops in Pretouch for better stability in JIT. option.WithCompileRecursiveDepth(loop), @@ -358,5 +398,14 @@ Why? Because `ast.Node` stores its children using `array`: **CAUTION:** `ast.Node` **DOESN'T** ensure concurrent security directly, due to its **lazy-load** design. However, you can call `Node.Load()`/`Node.LoadAll()` to achieve that, which may bring performance reduction while it still works faster than converting to `map` or `interface{}` +### Ast.Node or Ast.Visitor? +For generic data, `ast.Node` should be enough for your needs in most cases. + +However, `ast.Node` is designed for partially processing JSON string. It has some special designs such as lazy-load which might not be suitable for directly parsing the whole JSON string like `Unmarshal()`. Although `ast.Node` is better then `map` or `interface{}`, it's also a kind of intermediate representation after all if your final types are customized and you have to convert the above types to your custom types after parsing. + +For better performance, in previous case the `ast.Visitor` will be the better choice. It performs JSON decoding like `Unmarshal()` and you can directly use your final types to represents a JSON AST without any intermediate representations. + +But `ast.Visitor` is not a very handy API. You might need to write a lot of code to implement your visitor and carefully maintain the tree hierarchy during decoding. Please read the comments in [ast/visitor.go](https://github.com/bytedance/sonic/blob/main/ast/visitor.go) carefully if you decide to use this API. + ## Community Sonic is a subproject of [CloudWeGo](https://www.cloudwego.io/). We are committed to building a cloud native ecosystem. diff --git a/vendor/github.com/bytedance/sonic/README_ZH_CN.md b/vendor/github.com/bytedance/sonic/README_ZH_CN.md index 43fd1d6772..dc5cfb5df2 100644 --- a/vendor/github.com/bytedance/sonic/README_ZH_CN.md +++ b/vendor/github.com/bytedance/sonic/README_ZH_CN.md @@ -6,8 +6,8 @@ ## 依赖 -- Go 1.15~1.20 -- Linux/MacOS/Windows +- Go 1.16~1.20 +- Linux / MacOS / Windows(需要 Go1.17 以上) - Amd64 架构 ## 特色 @@ -79,6 +79,10 @@ BenchmarkSetOne_Jsoniter-16 79475 ns/op 163.8 BenchmarkSetOne_Parallel_Sonic-16 850.9 ns/op 15305.31 MB/s 1584 B/op 17 allocs/op BenchmarkSetOne_Parallel_Sjson-16 18194 ns/op 715.77 MB/s 52247 B/op 9 allocs/op BenchmarkSetOne_Parallel_Jsoniter-16 33560 ns/op 388.05 MB/s 45892 B/op 964 allocs/op +BenchmarkLoadNode/LoadAll()-16 11384 ns/op 1143.93 MB/s 6307 B/op 25 allocs/op +BenchmarkLoadNode_Parallel/LoadAll()-16 5493 ns/op 2370.68 MB/s 7145 B/op 25 allocs/op +BenchmarkLoadNode/Interface()-16 17722 ns/op 734.85 MB/s 13323 B/op 88 allocs/op +BenchmarkLoadNode_Parallel/Interface()-16 10330 ns/op 1260.70 MB/s 15178 B/op 88 allocs/op ``` - [小型](https://github.com/bytedance/sonic/blob/main/testdata/small.go) (400B, 11 个键, 3 层) ![small benchmarks](./docs/imgs/bench-small.png) @@ -298,6 +302,41 @@ println(string(buf) == string(exp)) // true - 迭代: `Values()`, `Properties()`, `ForEach()`, `SortKeys()` - 修改: `Set()`, `SetByIndex()`, `Add()` +### `Ast.Visitor` +Sonic 提供了一个高级的 API 用于直接全量解析 JSON 到非标准容器里 (既不是 `struct` 也不是 `map[string]interface{}`) 且不需要借助任何中间表示 (`ast.Node` 或 `interface{}`)。举个例子,你可能定义了下述的类型,它们看起来像 `interface{}`,但实际上并不是: +```go +type UserNode interface {} + +// the following types implement the UserNode interface. +type ( + UserNull struct{} + UserBool struct{ Value bool } + UserInt64 struct{ Value int64 } + UserFloat64 struct{ Value float64 } + UserString struct{ Value string } + UserObject struct{ Value map[string]UserNode } + UserArray struct{ Value []UserNode } +) +``` +Sonic 提供了下述的 API 来返回 **“对 JSON AST 的前序遍历”**。`ast.Visitor` 是一个 SAX 风格的接口,这在某些 C++ 的 JSON 解析库中被使用到。你需要自己实现一个 `ast.Visitor`,将它传递给 `ast.Preorder()` 方法。在你的实现中你可以使用自定义的类型来表示 JSON 的值。在你的 `ast.Visitor` 中,可能需要有一个 O(n) 空间复杂度的容器(比如说栈)来记录 object / array 的层级。 +```go +func Preorder(str string, visitor Visitor, opts *VisitorOptions) error + +type Visitor interface { + OnNull() error + OnBool(v bool) error + OnString(v string) error + OnInt64(v int64, n json.Number) error + OnFloat64(v float64, n json.Number) error + OnObjectBegin(capacity int) error + OnObjectKey(key string) error + OnObjectEnd() error + OnArrayBegin(capacity int) error + OnArrayEnd() error +} +``` +详细用法参看 [ast/visitor.go](https://github.com/bytedance/sonic/blob/main/ast/visitor.go),我们还为 `UserNode` 实现了一个示例 `ast.Visitor`,你可以在 [ast/visitor_test.go](https://github.com/bytedance/sonic/blob/main/ast/visitor_test.go) 中找到它。 + ## 兼容性 由于开发高性能代码的困难性, Sonic **不**保证对所有环境的支持。对于在不同环境中使用 Sonic 构建应用程序的开发者,我们有以下建议: @@ -327,7 +366,7 @@ func init() { err := sonic.Pretouch(reflect.TypeOf(v)) // with more CompileOption... - err := sonic.Pretouch(reflect.TypeOf(v), + err := sonic.Pretouch(reflect.TypeOf(v), // If the type is too deep nesting (nesting depth > option.DefaultMaxInlineDepth), // you can set compile recursive loops in Pretouch for better stability in JIT. option.WithCompileRecursiveDepth(loop), @@ -377,6 +416,15 @@ go someFunc(user) **注意**:由于 `ast.Node` 的惰性加载设计,其**不能**直接保证并发安全性,但你可以调用 `Node.Load()` / `Node.LoadAll()` 来实现并发安全。尽管可能会带来性能损失,但仍比转换成 `map` 或 `interface{}` 更为高效。 +### 使用 `ast.Node` 还是 `ast.Visitor`? +对于泛型数据的解析,`ast.Node` 在大多数场景上应该能够满足你的需求。 + +然而,`ast.Node` 是一种针对部分解析 JSON 而设计的泛型容器,它包含一些特殊设计,比如惰性加载,如果你希望像 `Unmarshal()` 那样直接解析整个 JSON,这些设计可能并不合适。尽管 `ast.Node` 相较于 `map` 或 `interface{}` 来说是更好的一种泛型容器,但它毕竟也是一种中间表示,如果你的最终类型是自定义的,你还得在解析完成后将上述类型转化成你自定义的类型。 + +在上述场景中,如果想要有更极致的性能,`ast.Visitor` 会是更好的选择。它采用和 `Unmarshal()` 类似的形式解析 JSON,并且你可以直接使用你的最终类型去表示 JSON AST,而不需要经过额外的任何中间表示。 + +但是,`ast.Visitor` 并不是一个很易用的 API。你可能需要写大量的代码去实现自己的 `ast.Visitor`,并且需要在解析过程中仔细维护树的层级。如果你决定要使用这个 API,请先仔细阅读 [ast/visitor.go](https://github.com/bytedance/sonic/blob/main/ast/visitor.go) 中的注释。 + ## 社区 Sonic 是 [CloudWeGo](https://www.cloudwego.io/) 下的一个子项目。我们致力于构建云原生生态系统。 diff --git a/vendor/github.com/bytedance/sonic/api.go b/vendor/github.com/bytedance/sonic/api.go index a042476f16..fa738f21d2 100644 --- a/vendor/github.com/bytedance/sonic/api.go +++ b/vendor/github.com/bytedance/sonic/api.go @@ -183,4 +183,9 @@ func Get(src []byte, path ...interface{}) (ast.Node, error) { // which can reduce unnecessary memory copy. func GetFromString(src string, path ...interface{}) (ast.Node, error) { return ast.NewSearcher(src).GetByPath(path...) -} \ No newline at end of file +} + +// Valid reports whether data is a valid JSON encoding. +func Valid(data []byte) bool { + return ConfigDefault.Valid(data) +} diff --git a/vendor/github.com/bytedance/sonic/ast/api_amd64.go b/vendor/github.com/bytedance/sonic/ast/api_amd64.go index 3047f59c30..da6738efd0 100644 --- a/vendor/github.com/bytedance/sonic/ast/api_amd64.go +++ b/vendor/github.com/bytedance/sonic/ast/api_amd64.go @@ -1,4 +1,4 @@ -// +build amd64,go1.15,!go1.21 +// +build amd64,go1.16,!go1.22 /* * Copyright 2022 ByteDance Inc. @@ -87,7 +87,13 @@ func encodeBase64(src []byte) string { func (self *Parser) decodeValue() (val types.JsonState) { sv := (*rt.GoString)(unsafe.Pointer(&self.s)) - self.p = native.Value(sv.Ptr, sv.Len, self.p, &val, 0) + flag := types.F_USE_NUMBER + if self.dbuf != nil { + flag = 0 + val.Dbuf = self.dbuf + val.Dcap = types.MaxDigitNums + } + self.p = native.Value(sv.Ptr, sv.Len, self.p, &val, uint64(flag)) return } @@ -148,4 +154,4 @@ func (self *Searcher) GetByPath(path ...interface{}) (Node, error) { return Node{}, self.parser.ExportError(err) } return newRawNode(self.parser.s[start:self.parser.p], t), nil -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/ast/api_compat.go b/vendor/github.com/bytedance/sonic/ast/api_compat.go index b18b5ae8c6..7b475eb618 100644 --- a/vendor/github.com/bytedance/sonic/ast/api_compat.go +++ b/vendor/github.com/bytedance/sonic/ast/api_compat.go @@ -1,4 +1,4 @@ -// +build !amd64 go1.21 +// +build !amd64 !go1.16 go1.22 /* * Copyright 2022 ByteDance Inc. @@ -27,6 +27,10 @@ import ( `github.com/bytedance/sonic/internal/rt` ) +func init() { + println("WARNING: sonic only supports Go1.16~1.20 && CPU amd64, but your environment is not suitable") +} + func quote(buf *[]byte, val string) { quoteString(buf, val) } @@ -49,7 +53,7 @@ func encodeBase64(src []byte) string { } func (self *Parser) decodeValue() (val types.JsonState) { - e, v := decodeValue(self.s, self.p) + e, v := decodeValue(self.s, self.p, self.dbuf == nil) if e < 0 { return v } diff --git a/vendor/github.com/bytedance/sonic/ast/buffer.go b/vendor/github.com/bytedance/sonic/ast/buffer.go new file mode 100644 index 0000000000..93f4ff47a4 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/ast/buffer.go @@ -0,0 +1,329 @@ +/** + * Copyright 2023 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ast + +import ( + `sort` + `unsafe` +) + +type nodeChunk [_DEFAULT_NODE_CAP]Node + +type linkedNodes struct { + head nodeChunk + tail []*nodeChunk + size int +} + +func (self *linkedNodes) Cap() int { + if self == nil { + return 0 + } + return (len(self.tail)+1)*_DEFAULT_NODE_CAP +} + +func (self *linkedNodes) Len() int { + if self == nil { + return 0 + } + return self.size +} + +func (self *linkedNodes) At(i int) (*Node) { + if self == nil { + return nil + } + if i >= 0 && i= _DEFAULT_NODE_CAP && i= 0 { + c += 1 + c>>_APPEND_GROW_SHIFT + tmp := make([]*nodeChunk, a + 1, c) + copy(tmp, self.tail) + self.tail = tmp + } else if a >= len(self.tail) { + self.tail = self.tail[:a+1] + } + + var n = &self.tail[a] + if *n == nil { + *n = new(nodeChunk) + } + (*n)[b] = v + self.size++ +} + +func (self *linkedNodes) ToSlice(con []Node) { + if len(con) < self.size { + return + } + i := (self.size-1) + a, b := i/_DEFAULT_NODE_CAP-1, i%_DEFAULT_NODE_CAP + if a < 0 { + copy(con, self.head[:b+1]) + return + } else { + copy(con, self.head[:]) + con = con[_DEFAULT_NODE_CAP:] + } + + for i:=0; i>_APPEND_GROW_SHIFT + self.tail = make([]*nodeChunk, a+1, c) + } + self.tail = self.tail[:a+1] + + for i:=0; i= 0 && i < _DEFAULT_NODE_CAP && i= _DEFAULT_NODE_CAP && i= 0 { + c += 1 + c>>_APPEND_GROW_SHIFT + tmp := make([]*pairChunk, a + 1, c) + copy(tmp, self.tail) + self.tail = tmp + } else if a >= len(self.tail) { + self.tail = self.tail[:a+1] + } + + var n = &self.tail[a] + if *n == nil { + *n = new(pairChunk) + } + (*n)[b] = v + self.size++ +} + +// linear search +func (self *linkedPairs) Get(key string) (*Pair, int) { + for i:=0; i>_APPEND_GROW_SHIFT + self.tail = make([]*pairChunk, a+1, c) + } + self.tail = self.tail[:a+1] + + for i:=0; i len(b) { + l = len(b) + } + for i := d; i < l; i++ { + if a[i] == b[i] { + continue + } + return a[i] < b[i] + } + return len(a) < len(b) +} + +type parseObjectStack struct { + parser Parser + v linkedPairs +} + +type parseArrayStack struct { + parser Parser + v linkedNodes +} + +func newLazyArray(p *Parser) Node { + s := new(parseArrayStack) + s.parser = *p + return Node{ + t: _V_ARRAY_LAZY, + p: unsafe.Pointer(s), + } +} + +func newLazyObject(p *Parser) Node { + s := new(parseObjectStack) + s.parser = *p + return Node{ + t: _V_OBJECT_LAZY, + p: unsafe.Pointer(s), + } +} + +func (self *Node) getParserAndArrayStack() (*Parser, *parseArrayStack) { + stack := (*parseArrayStack)(self.p) + return &stack.parser, stack +} + +func (self *Node) getParserAndObjectStack() (*Parser, *parseObjectStack) { + stack := (*parseObjectStack)(self.p) + return &stack.parser, stack +} + diff --git a/vendor/github.com/bytedance/sonic/ast/decode.go b/vendor/github.com/bytedance/sonic/ast/decode.go index 6a5f6fea33..3e08bfcb29 100644 --- a/vendor/github.com/bytedance/sonic/ast/decode.go +++ b/vendor/github.com/bytedance/sonic/ast/decode.go @@ -220,7 +220,7 @@ func decodeFloat64(src string, pos int) (ret int, v float64, err error) { return ret, v, nil } -func decodeValue(src string, pos int) (ret int, v types.JsonState) { +func decodeValue(src string, pos int, skipnum bool) (ret int, v types.JsonState) { pos = skipBlank(src, pos) if pos < 0 { return pos, types.JsonState{Vt: types.ValueType(pos)} @@ -256,20 +256,30 @@ func decodeValue(src string, pos int) (ret int, v types.JsonState) { } return ret, types.JsonState{Vt: types.V_FALSE} case '-', '+', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': - var iv int64 - ret, iv, _ = decodeInt64(src, pos) - if ret >= 0 { - return ret, types.JsonState{Vt: types.V_INTEGER, Iv: iv, Ep: pos} - } else if ret != -int(types.ERR_INVALID_NUMBER_FMT) { - return ret, types.JsonState{Vt: types.ValueType(ret)} - } - var fv float64 - ret, fv, _ = decodeFloat64(src, pos) - if ret >= 0 { - return ret, types.JsonState{Vt: types.V_DOUBLE, Dv: fv, Ep: pos} + if skipnum { + ret = skipNumber(src, pos) + if ret >= 0 { + return ret, types.JsonState{Vt: types.V_DOUBLE, Iv: 0, Ep: pos} + } else { + return ret, types.JsonState{Vt: types.ValueType(ret)} + } } else { - return ret, types.JsonState{Vt: types.ValueType(ret)} + var iv int64 + ret, iv, _ = decodeInt64(src, pos) + if ret >= 0 { + return ret, types.JsonState{Vt: types.V_INTEGER, Iv: iv, Ep: pos} + } else if ret != -int(types.ERR_INVALID_NUMBER_FMT) { + return ret, types.JsonState{Vt: types.ValueType(ret)} + } + var fv float64 + ret, fv, _ = decodeFloat64(src, pos) + if ret >= 0 { + return ret, types.JsonState{Vt: types.V_DOUBLE, Dv: fv, Ep: pos} + } else { + return ret, types.JsonState{Vt: types.ValueType(ret)} + } } + default: return -int(types.ERR_INVALID_CHAR), types.JsonState{Vt:-types.ValueType(types.ERR_INVALID_CHAR)} } diff --git a/vendor/github.com/bytedance/sonic/ast/encode.go b/vendor/github.com/bytedance/sonic/ast/encode.go index 1187e30c26..263ae5a9de 100644 --- a/vendor/github.com/bytedance/sonic/ast/encode.go +++ b/vendor/github.com/bytedance/sonic/ast/encode.go @@ -19,8 +19,6 @@ package ast import ( `sync` `unicode/utf8` - - `github.com/bytedance/sonic/internal/rt` ) const ( @@ -165,18 +163,18 @@ func (self *Node) encodeFalse(buf *[]byte) error { } func (self *Node) encodeNumber(buf *[]byte) error { - str := rt.StrFrom(self.p, self.v) + str := self.toString() *buf = append(*buf, str...) return nil } func (self *Node) encodeString(buf *[]byte) error { - if self.v == 0 { + if self.l == 0 { *buf = append(*buf, '"', '"') return nil } - quote(buf, rt.StrFrom(self.p, self.v)) + quote(buf, self.toString()) return nil } @@ -195,16 +193,28 @@ func (self *Node) encodeArray(buf *[]byte) error { *buf = append(*buf, '[') - var p = (*Node)(self.p) - err := p.encode(buf) - if err != nil { - return err + var s = (*linkedNodes)(self.p) + var started bool + if nb > 0 { + n := s.At(0) + if n.Exists() { + if err := n.encode(buf); err != nil { + return err + } + started = true + } } + for i := 1; i < nb; i++ { - *buf = append(*buf, ',') - p = p.unsafe_next() - err := p.encode(buf) - if err != nil { + n := s.At(i) + if !n.Exists() { + continue + } + if started { + *buf = append(*buf, ',') + } + started = true + if err := n.encode(buf); err != nil { return err } } @@ -240,20 +250,32 @@ func (self *Node) encodeObject(buf *[]byte) error { *buf = append(*buf, '{') - var p = (*Pair)(self.p) - err := p.encode(buf) - if err != nil { - return err + var s = (*linkedPairs)(self.p) + var started bool + if nb > 0 { + n := s.At(0) + if n.Value.Exists() { + if err := n.encode(buf); err != nil { + return err + } + started = true + } } + for i := 1; i < nb; i++ { - *buf = append(*buf, ',') - p = p.unsafe_next() - err := p.encode(buf) - if err != nil { + n := s.At(i) + if !n.Value.Exists() { + continue + } + if started { + *buf = append(*buf, ',') + } + started = true + if err := n.encode(buf); err != nil { return err } } *buf = append(*buf, '}') return nil -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/ast/error.go b/vendor/github.com/bytedance/sonic/ast/error.go index f4c441ae6c..00a04468ef 100644 --- a/vendor/github.com/bytedance/sonic/ast/error.go +++ b/vendor/github.com/bytedance/sonic/ast/error.go @@ -8,23 +8,55 @@ import ( `github.com/bytedance/sonic/internal/native/types` ) -func (self *Parser) syntaxError(err types.ParsingError) SyntaxError { - return SyntaxError{ - Pos : self.p, - Src : self.s, - Code: err, + +func newError(err types.ParsingError, msg string) *Node { + return &Node{ + t: V_ERROR, + l: uint(err), + p: unsafe.Pointer(&msg), } } +// Error returns error message if the node is invalid +func (self Node) Error() string { + if self.t != V_ERROR { + return "" + } else { + return *(*string)(self.p) + } +} + func newSyntaxError(err SyntaxError) *Node { msg := err.Description() return &Node{ t: V_ERROR, - v: int64(err.Code), + l: uint(err.Code), p: unsafe.Pointer(&msg), } } +func (self *Parser) syntaxError(err types.ParsingError) SyntaxError { + return SyntaxError{ + Pos : self.p, + Src : self.s, + Code: err, + } +} + +func unwrapError(err error) *Node { + if se, ok := err.(*Node); ok { + return se + }else if sse, ok := err.(Node); ok { + return &sse + } else { + msg := err.Error() + return &Node{ + t: V_ERROR, + p: unsafe.Pointer(&msg), + } + } +} + type SyntaxError struct { Pos int Src string diff --git a/vendor/github.com/bytedance/sonic/ast/iterator.go b/vendor/github.com/bytedance/sonic/ast/iterator.go index 03a25b4e9f..3c4187a9ca 100644 --- a/vendor/github.com/bytedance/sonic/ast/iterator.go +++ b/vendor/github.com/bytedance/sonic/ast/iterator.go @@ -82,26 +82,54 @@ type ObjectIterator struct { Iterator } +func (self *ListIterator) next() *Node { +next_start: + if !self.HasNext() { + return nil + } else { + n := self.p.nodeAt(self.i) + self.i++ + if !n.Exists() { + goto next_start + } + return n + } +} + // Next scans through children of underlying V_ARRAY, // copies each child to v, and returns .HasNext(). func (self *ListIterator) Next(v *Node) bool { - if !self.HasNext() { + n := self.next() + if n == nil { return false + } + *v = *n + return true +} + +func (self *ObjectIterator) next() *Pair { +next_start: + if !self.HasNext() { + return nil } else { - *v, self.i = *self.p.nodeAt(self.i), self.i + 1 - return true + n := self.p.pairAt(self.i) + self.i++ + if !n.Value.Exists() { + goto next_start + } + return n } } // Next scans through children of underlying V_OBJECT, // copies each child to v, and returns .HasNext(). func (self *ObjectIterator) Next(p *Pair) bool { - if !self.HasNext() { + n := self.next() + if n == nil { return false - } else { - *p, self.i = *self.p.pairAt(self.i), self.i + 1 - return true } + *p = *n + return true } // Sequence represents scanning path of single-layer nodes. @@ -129,36 +157,39 @@ type Scanner func(path Sequence, node *Node) bool // // Especailly, if the node is not V_ARRAY or V_OBJECT, // the node itself will be returned and Sequence.Index == -1. +// +// NOTICE: A unsetted node WON'T trigger sc, but its index still counts into Path.Index func (self *Node) ForEach(sc Scanner) error { switch self.itype() { case types.V_ARRAY: - ns, err := self.UnsafeArray() + iter, err := self.Values() if err != nil { return err } - for i := range ns { - if !sc(Sequence{i, nil}, &ns[i]) { - return err + v := iter.next() + for v != nil { + if !sc(Sequence{iter.i-1, nil}, v) { + return nil } + v = iter.next() } case types.V_OBJECT: - ns, err := self.UnsafeMap() + iter, err := self.Properties() if err != nil { return err } - for i := range ns { - if !sc(Sequence{i, &ns[i].Key}, &ns[i].Value) { - return err + v := iter.next() + for v != nil { + if !sc(Sequence{iter.i-1, &v.Key}, &v.Value) { + return nil } + v = iter.next() } default: + if self.Check() != nil { + return self + } sc(Sequence{-1, nil}, self) } - return self.Check() + return nil } - -type PairSlice []Pair - -func (self PairSlice) Sort() { - radixQsort(self, 0, maxDepth(len(self))) -} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/ast/node.go b/vendor/github.com/bytedance/sonic/ast/node.go index 6b5ad8a3ed..444c8fe42a 100644 --- a/vendor/github.com/bytedance/sonic/ast/node.go +++ b/vendor/github.com/bytedance/sonic/ast/node.go @@ -51,12 +51,12 @@ const ( const ( V_NONE = 0 V_ERROR = 1 - V_NULL = 2 - V_TRUE = 3 - V_FALSE = 4 - V_ARRAY = 5 - V_OBJECT = 6 - V_STRING = 7 + V_NULL = int(types.V_NULL) + V_TRUE = int(types.V_TRUE) + V_FALSE = int(types.V_FALSE) + V_ARRAY = int(types.V_ARRAY) + V_OBJECT = int(types.V_OBJECT) + V_STRING = int(types.V_STRING) V_NUMBER = int(_V_NUMBER) V_ANY = int(_V_ANY) ) @@ -66,8 +66,8 @@ var ( ) type Node struct { - v int64 t types.ValueType + l uint p unsafe.Pointer } @@ -82,9 +82,9 @@ func (self *Node) UnmarshalJSON(data []byte) (err error) { // Type returns json type represented by the node // It will be one of belows: -// V_NONE = 0 (empty node) +// V_NONE = 0 (empty node, key not exists) // V_ERROR = 1 (error node) -// V_NULL = 2 (json value `null`) +// V_NULL = 2 (json value `null`, key exists) // V_TRUE = 3 (json value `true`) // V_FALSE = 4 (json value `false`) // V_ARRAY = 5 (json value array) @@ -102,7 +102,7 @@ func (self Node) itype() types.ValueType { // Exists returns false only if the self is nil or empty node V_NONE func (self *Node) Exists() bool { - return self != nil && self.t != _V_NONE + return self.Valid() && self.t != _V_NONE } // Valid reports if self is NOT V_ERROR or nil @@ -114,7 +114,7 @@ func (self *Node) Valid() bool { } // Check checks if the node itself is valid, and return: -// - ErrNotFound If the node is nil +// - ErrNotExist If the node is nil // - Its underlying error If the node is V_ERROR func (self *Node) Check() error { if self == nil { @@ -126,15 +126,6 @@ func (self *Node) Check() error { } } -// Error returns error message if the node is invalid -func (self Node) Error() string { - if self.t != V_ERROR { - return "" - } else { - return *(*string)(self.p) - } -} - // IsRaw returns true if node's underlying value is raw json func (self Node) IsRaw() bool { return self.t&_V_RAW != 0 @@ -156,7 +147,7 @@ func (self *Node) Raw() (string, error) { buf, err := self.MarshalJSON() return rt.Mem2Str(buf), err } - return rt.StrFrom(self.p, self.v), nil + return self.toString(), nil } func (self *Node) checkRaw() error { @@ -181,14 +172,14 @@ func (self *Node) Bool() (bool, error) { case types.V_FALSE : return false, nil case types.V_NULL : return false, nil case _V_NUMBER : - if i, err := numberToInt64(self); err == nil { + if i, err := self.toInt64(); err == nil { return i != 0, nil - } else if f, err := numberToFloat64(self); err == nil { + } else if f, err := self.toFloat64(); err == nil { return f != 0, nil } else { return false, err } - case types.V_STRING: return strconv.ParseBool(rt.StrFrom(self.p, self.v)) + case types.V_STRING: return strconv.ParseBool(self.toString()) case _V_ANY : any := self.packAny() switch v := any.(type) { @@ -229,9 +220,9 @@ func (self *Node) Int64() (int64, error) { } switch self.t { case _V_NUMBER, types.V_STRING : - if i, err := numberToInt64(self); err == nil { + if i, err := self.toInt64(); err == nil { return i, nil - } else if f, err := numberToFloat64(self); err == nil { + } else if f, err := self.toFloat64(); err == nil { return int64(f), nil } else { return 0, err @@ -283,7 +274,7 @@ func (self *Node) StrictInt64() (int64, error) { return 0, err } switch self.t { - case _V_NUMBER : return numberToInt64(self) + case _V_NUMBER : return self.toInt64() case _V_ANY : any := self.packAny() switch v := any.(type) { @@ -325,12 +316,12 @@ func (self *Node) Number() (json.Number, error) { return json.Number(""), err } switch self.t { - case _V_NUMBER : return toNumber(self) , nil + case _V_NUMBER : return self.toNumber(), nil case types.V_STRING : - if _, err := numberToInt64(self); err == nil { - return toNumber(self), nil - } else if _, err := numberToFloat64(self); err == nil { - return toNumber(self), nil + if _, err := self.toInt64(); err == nil { + return self.toNumber(), nil + } else if _, err := self.toFloat64(); err == nil { + return self.toNumber(), nil } else { return json.Number(""), err } @@ -372,7 +363,7 @@ func (self *Node) StrictNumber() (json.Number, error) { return json.Number(""), err } switch self.t { - case _V_NUMBER : return toNumber(self) , nil + case _V_NUMBER : return self.toNumber() , nil case _V_ANY : if v, ok := self.packAny().(json.Number); ok { return v, nil @@ -394,7 +385,7 @@ func (self *Node) String() (string, error) { case types.V_NULL : return "" , nil case types.V_TRUE : return "true" , nil case types.V_FALSE : return "false", nil - case types.V_STRING, _V_NUMBER : return rt.StrFrom(self.p, self.v), nil + case types.V_STRING, _V_NUMBER : return self.toString(), nil case _V_ANY : any := self.packAny() switch v := any.(type) { @@ -426,7 +417,7 @@ func (self *Node) StrictString() (string, error) { return "", err } switch self.t { - case types.V_STRING : return rt.StrFrom(self.p, self.v), nil + case types.V_STRING : return self.toString(), nil case _V_ANY : if v, ok := self.packAny().(string); ok { return v, nil @@ -445,7 +436,7 @@ func (self *Node) Float64() (float64, error) { return 0.0, err } switch self.t { - case _V_NUMBER, types.V_STRING : return numberToFloat64(self) + case _V_NUMBER, types.V_STRING : return self.toFloat64() case types.V_TRUE : return 1.0, nil case types.V_FALSE : return 0.0, nil case types.V_NULL : return 0.0, nil @@ -494,7 +485,7 @@ func (self *Node) StrictFloat64() (float64, error) { return 0.0, err } switch self.t { - case _V_NUMBER : return numberToFloat64(self) + case _V_NUMBER : return self.toFloat64() case _V_ANY : any := self.packAny() switch v := any.(type) { @@ -509,15 +500,14 @@ func (self *Node) StrictFloat64() (float64, error) { /** Sequencial Value Methods **/ // Len returns children count of a array|object|string node -// For partially loaded node, it also works but only counts the parsed children +// WARN: For partially loaded node, it also works but only counts the parsed children +// WARN: For ARRAY|OBJECT nodes which has been conducted `UnsetXX()`, its length WON'T change func (self *Node) Len() (int, error) { if err := self.checkRaw(); err != nil { return 0, err } - if self.t == types.V_ARRAY || self.t == types.V_OBJECT || self.t == _V_ARRAY_LAZY || self.t == _V_OBJECT_LAZY { - return int(self.v & _LEN_MASK), nil - } else if self.t == types.V_STRING { - return int(self.v), nil + if self.t == types.V_ARRAY || self.t == types.V_OBJECT || self.t == _V_ARRAY_LAZY || self.t == _V_OBJECT_LAZY || self.t == types.V_STRING { + return int(self.l), nil } else if self.t == _V_NONE || self.t == types.V_NULL { return 0, nil } else { @@ -526,7 +516,7 @@ func (self *Node) Len() (int, error) { } func (self Node) len() int { - return int(self.v & _LEN_MASK) + return int(self.l) } // Cap returns malloc capacity of a array|object node for children @@ -534,19 +524,16 @@ func (self *Node) Cap() (int, error) { if err := self.checkRaw(); err != nil { return 0, err } - if self.t == types.V_ARRAY || self.t == types.V_OBJECT || self.t == _V_ARRAY_LAZY || self.t == _V_OBJECT_LAZY { - return int(self.v >> _CAP_BITS), nil - } else if self.t == _V_NONE || self.t == types.V_NULL { - return 0, nil - } else { - return 0, ErrUnsupportType + switch self.t { + case types.V_ARRAY: return (*linkedNodes)(self.p).Cap(), nil + case types.V_OBJECT: return (*linkedPairs)(self.p).Cap(), nil + case _V_ARRAY_LAZY: return (*parseArrayStack)(self.p).v.Cap(), nil + case _V_OBJECT_LAZY: return (*parseObjectStack)(self.p).v.Cap(), nil + case _V_NONE, types.V_NULL: return 0, nil + default: return 0, ErrUnsupportType } } -func (self Node) cap() int { - return int(self.v >> _CAP_BITS) -} - // Set sets the node of given key under self, and reports if the key has existed. // // If self is V_NONE or V_NULL, it becomes V_OBJECT and sets the node at the key. @@ -561,20 +548,15 @@ func (self *Node) Set(key string, node Node) (bool, error) { } p := self.Get(key) + if !p.Exists() { - l := self.len() - c := self.cap() - if l == c { - // TODO: maybe change append size in future - c += _DEFAULT_NODE_CAP - mem := unsafe_NewArray(_PAIR_TYPE, c) - memmove(mem, self.p, _PAIR_SIZE * uintptr(l)) - self.p = mem + // self must be fully-loaded here + if self.len() == 0 { + *self = newObject(new(linkedPairs)) } - v := self.pairAt(l) - v.Key = key - v.Value = node - self.setCapAndLen(c, l+1) + s := (*linkedPairs)(self.p) + s.Add(Pair{key, node}) + self.l++ return false, nil } else if err := p.Check(); err != nil { @@ -590,7 +572,8 @@ func (self *Node) SetAny(key string, val interface{}) (bool, error) { return self.Set(key, NewAny(val)) } -// Unset remove the node of given key under object parent, and reports if the key has existed. +// Unset RESET the node of given key under object parent, and reports if the key has existed. +// WARN: After conducting `UnsetXX()`, the node's length WON'T change func (self *Node) Unset(key string) (bool, error) { self.must(types.V_OBJECT, "an object") p, i := self.skipKey(key) @@ -629,12 +612,16 @@ func (self *Node) SetAnyByIndex(index int, val interface{}) (bool, error) { } // UnsetByIndex remove the node of given index +// WARN: After conducting `UnsetXX()`, the node's length WON'T change func (self *Node) UnsetByIndex(index int) (bool, error) { var p *Node it := self.itype() if it == types.V_ARRAY { p = self.Index(index) }else if it == types.V_OBJECT { + if err := self.checkRaw(); err != nil { + return false, err + } pr := self.skipIndexPair(index) if pr == nil { return false, ErrNotExist @@ -665,26 +652,17 @@ func (self *Node) Add(node Node) error { return nil } - if err := self.should(types.V_ARRAY, "an array"); err != nil { - return err - } - if err := self.skipAllIndex(); err != nil { + s, err := self.unsafeArray() + if err != nil { return err } - var p rt.GoSlice - p.Cap = self.cap() - p.Len = self.len() - p.Ptr = self.p - - s := *(*[]Node)(unsafe.Pointer(&p)) - s = append(s, node) - - self.p = unsafe.Pointer(&s[0]) - self.setCapAndLen(cap(s), len(s)) + s.Add(node) + self.l++ return nil } + // SetAny wraps val with V_ANY node, and Add() the node. func (self *Node) AddAny(val interface{}) error { return self.Add(NewAny(val)) @@ -730,6 +708,8 @@ func (self *Node) Get(key string) *Node { // Index indexies node at given idx, // node type CAN be either V_OBJECT or V_ARRAY +// WARN: After conducting `UnsetXX()`, the node's length WON'T change, +// thus its children's indexing WON'T change too func (self *Node) Index(idx int) *Node { if err := self.checkRaw(); err != nil { return unwrapError(err) @@ -753,6 +733,8 @@ func (self *Node) Index(idx int) *Node { // IndexPair indexies pair at given idx, // node type MUST be either V_OBJECT +// WARN: After conducting `UnsetXX()`, the node's length WON'T change, +// thus its children's indexing WON'T change too func (self *Node) IndexPair(idx int) *Pair { if err := self.should(types.V_OBJECT, "an object"); err != nil { return nil @@ -837,25 +819,39 @@ func (self *Node) MapUseNode() (map[string]Node, error) { // MapUnsafe exports the underlying pointer to its children map // WARN: don't use it unless you know what you are doing -func (self *Node) UnsafeMap() ([]Pair, error) { +// +// Deprecated: this API now returns copied nodes instead of directly reference, +// func (self *Node) UnsafeMap() ([]Pair, error) { +// if err := self.should(types.V_OBJECT, "an object"); err != nil { +// return nil, err +// } +// if err := self.skipAllKey(); err != nil { +// return nil, err +// } +// return self.toGenericObjectUsePair() +// } + +func (self *Node) unsafeMap() (*linkedPairs, error) { if err := self.should(types.V_OBJECT, "an object"); err != nil { return nil, err } if err := self.skipAllKey(); err != nil { return nil, err } - s := rt.Ptr2SlicePtr(self.p, int(self.len()), self.cap()) - return *(*[]Pair)(s), nil + if self.p == nil { + *self = newObject(new(linkedPairs)) + } + return (*linkedPairs)(self.p), nil } // SortKeys sorts children of a V_OBJECT node in ascending key-order. // If recurse is true, it recursively sorts children's children as long as a V_OBJECT node is found. func (self *Node) SortKeys(recurse bool) (err error) { - ps, err := self.UnsafeMap() + ps, err := self.unsafeMap() if err != nil { return err } - PairSlice(ps).Sort() + ps.Sort() if recurse { var sc Scanner sc = func(path Sequence, node *Node) bool { @@ -936,15 +932,30 @@ func (self *Node) ArrayUseNode() ([]Node, error) { // ArrayUnsafe exports the underlying pointer to its children array // WARN: don't use it unless you know what you are doing -func (self *Node) UnsafeArray() ([]Node, error) { +// +// Deprecated: this API now returns copied nodes instead of directly reference, +// which has no difference with ArrayUseNode +// func (self *Node) UnsafeArray() ([]Node, error) { +// if err := self.should(types.V_ARRAY, "an array"); err != nil { +// return nil, err +// } +// if err := self.skipAllIndex(); err != nil { +// return nil, err +// } +// return self.toGenericArrayUseNode() +// } + +func (self *Node) unsafeArray() (*linkedNodes, error) { if err := self.should(types.V_ARRAY, "an array"); err != nil { return nil, err } if err := self.skipAllIndex(); err != nil { return nil, err } - s := rt.Ptr2SlicePtr(self.p, self.len(), self.cap()) - return *(*[]Node)(s), nil + if self.p == nil { + *self = newArray(new(linkedNodes)) + } + return (*linkedNodes)(self.p), nil } // Interface loads all children under all pathes from this node, @@ -961,9 +972,9 @@ func (self *Node) Interface() (interface{}, error) { case types.V_FALSE : return false, nil case types.V_ARRAY : return self.toGenericArray() case types.V_OBJECT : return self.toGenericObject() - case types.V_STRING : return rt.StrFrom(self.p, self.v), nil + case types.V_STRING : return self.toString(), nil case _V_NUMBER : - v, err := numberToFloat64(self) + v, err := self.toFloat64() if err != nil { return nil, err } @@ -1005,8 +1016,8 @@ func (self *Node) InterfaceUseNumber() (interface{}, error) { case types.V_FALSE : return false, nil case types.V_ARRAY : return self.toGenericArrayUseNumber() case types.V_OBJECT : return self.toGenericObjectUseNumber() - case types.V_STRING : return rt.StrFrom(self.p, self.v), nil - case _V_NUMBER : return toNumber(self), nil + case types.V_STRING : return self.toString(), nil + case _V_NUMBER : return self.toNumber(), nil case _V_ARRAY_LAZY : if err := self.loadAllIndex(); err != nil { return nil, err @@ -1114,13 +1125,14 @@ var ( _PAIR_TYPE = rt.UnpackEface(Pair{}).Type ) -func (self *Node) setCapAndLen(cap int, len int) { - if self.t == types.V_ARRAY || self.t == types.V_OBJECT || self.t == _V_ARRAY_LAZY || self.t == _V_OBJECT_LAZY { - self.v = int64(len&_LEN_MASK | cap<<_CAP_BITS) - } else { - panic("value does not have a length") - } -} +// func (self *Node) setCapAndLen(cap int, len int) { +// if self.t == types.V_ARRAY || self.t == types.V_OBJECT || self.t == _V_ARRAY_LAZY || self.t == _V_OBJECT_LAZY { +// self.l = uint32(len) +// self.c = uint32(cap) +// } else { +// panic("value does not have a length") +// } +// } func (self *Node) unsafe_next() *Node { return (*Node)(unsafe.Pointer(uintptr(unsafe.Pointer(self)) + _NODE_SIZE)) @@ -1153,37 +1165,25 @@ func (self *Node) should(t types.ValueType, s string) error { } func (self *Node) nodeAt(i int) *Node { - var p = self.p + var p *linkedNodes if self.isLazy() { _, stack := self.getParserAndArrayStack() - p = *(*unsafe.Pointer)(unsafe.Pointer(&stack.v)) + p = &stack.v + } else { + p = (*linkedNodes)(self.p) } - return (*Node)(unsafe.Pointer(uintptr(p) + uintptr(i)*_NODE_SIZE)) + return p.At(i) } func (self *Node) pairAt(i int) *Pair { - var p = self.p + var p *linkedPairs if self.isLazy() { _, stack := self.getParserAndObjectStack() - p = *(*unsafe.Pointer)(unsafe.Pointer(&stack.v)) + p = &stack.v + } else { + p = (*linkedPairs)(self.p) } - return (*Pair)(unsafe.Pointer(uintptr(p) + uintptr(i)*_PAIR_SIZE)) -} - -func (self *Node) getParserAndArrayStack() (*Parser, *parseArrayStack) { - stack := (*parseArrayStack)(self.p) - ret := (*rt.GoSlice)(unsafe.Pointer(&stack.v)) - ret.Len = self.len() - ret.Cap = self.cap() - return &stack.parser, stack -} - -func (self *Node) getParserAndObjectStack() (*Parser, *parseObjectStack) { - stack := (*parseObjectStack)(self.p) - ret := (*rt.GoSlice)(unsafe.Pointer(&stack.v)) - ret.Len = self.len() - ret.Cap = self.cap() - return &stack.parser, stack + return p.At(i) } func (self *Node) skipAllIndex() error { @@ -1194,7 +1194,7 @@ func (self *Node) skipAllIndex() error { parser, stack := self.getParserAndArrayStack() parser.skipValue = true parser.noLazy = true - *self, err = parser.decodeArray(stack.v) + *self, err = parser.decodeArray(&stack.v) if err != 0 { return parser.ExportError(err) } @@ -1209,7 +1209,7 @@ func (self *Node) skipAllKey() error { parser, stack := self.getParserAndObjectStack() parser.skipValue = true parser.noLazy = true - *self, err = parser.decodeObject(stack.v) + *self, err = parser.decodeObject(&stack.v) if err != 0 { return parser.ExportError(err) } @@ -1223,21 +1223,16 @@ func (self *Node) skipKey(key string) (*Node, int) { if nb > 0 { /* linear search */ var p *Pair + var i int if lazy { s := (*parseObjectStack)(self.p) - p = &s.v[0] + p, i = s.v.Get(key) } else { - p = (*Pair)(self.p) + p, i = (*linkedPairs)(self.p).Get(key) } - if p.Key == key { - return &p.Value, 0 - } - for i := 1; i < nb; i++ { - p = p.unsafe_next() - if p.Key == key { - return &p.Value, i - } + if p != nil { + return &p.Value, i } } @@ -1311,7 +1306,7 @@ func (self *Node) loadAllIndex() error { var err types.ParsingError parser, stack := self.getParserAndArrayStack() parser.noLazy = true - *self, err = parser.decodeArray(stack.v) + *self, err = parser.decodeArray(&stack.v) if err != 0 { return parser.ExportError(err) } @@ -1325,7 +1320,7 @@ func (self *Node) loadAllKey() error { var err types.ParsingError parser, stack := self.getParserAndObjectStack() parser.noLazy = true - *self, err = parser.decodeObject(stack.v) + *self, err = parser.decodeObject(&stack.v) if err != 0 { return parser.ExportError(err) } @@ -1333,58 +1328,36 @@ func (self *Node) loadAllKey() error { } func (self *Node) removeNode(i int) { - nb := self.len() - 1 node := self.nodeAt(i) - if i == nb { - self.setCapAndLen(self.cap(), nb) - *node = Node{} + if node == nil { return } - - from := self.nodeAt(i + 1) - memmove(unsafe.Pointer(node), unsafe.Pointer(from), _NODE_SIZE * uintptr(nb - i)) - - last := self.nodeAt(nb) - *last = Node{} - - self.setCapAndLen(self.cap(), nb) + *node = Node{} + // NOTICE: for consistency with linkedNodes, we DOSEN'T reduce size here + // self.l-- } func (self *Node) removePair(i int) { - nb := self.len() - 1 - node := self.pairAt(i) - if i == nb { - self.setCapAndLen(self.cap(), nb) - *node = Pair{} + last := self.pairAt(i) + if last == nil { return } - - from := self.pairAt(i + 1) - memmove(unsafe.Pointer(node), unsafe.Pointer(from), _PAIR_SIZE * uintptr(nb - i)) - - last := self.pairAt(nb) *last = Pair{} - - self.setCapAndLen(self.cap(), nb) + // NOTICE: for consistency with linkedNodes, we DOSEN'T reduce size here + // self.l-- } func (self *Node) toGenericArray() ([]interface{}, error) { nb := self.len() - ret := make([]interface{}, nb) if nb == 0 { - return ret, nil + return []interface{}{}, nil } - + ret := make([]interface{}, nb) + /* convert each item */ - var p = (*Node)(self.p) - x, err := p.Interface() - if err != nil { - return nil, err - } - ret[0] = x - - for i := 1; i < nb; i++ { - p = p.unsafe_next() + var s = (*linkedNodes)(self.p) + for i := 0; i < nb; i++ { + p := s.At(i) x, err := p.Interface() if err != nil { return nil, err @@ -1398,21 +1371,15 @@ func (self *Node) toGenericArray() ([]interface{}, error) { func (self *Node) toGenericArrayUseNumber() ([]interface{}, error) { nb := self.len() - ret := make([]interface{}, nb) if nb == 0 { - return ret, nil + return []interface{}{}, nil } + ret := make([]interface{}, nb) /* convert each item */ - var p = (*Node)(self.p) - x, err := p.InterfaceUseNumber() - if err != nil { - return nil, err - } - ret[0] = x - - for i := 1; i < nb; i++ { - p = p.unsafe_next() + var s = (*linkedNodes)(self.p) + for i := 0; i < nb; i++ { + p := s.At(i) x, err := p.InterfaceUseNumber() if err != nil { return nil, err @@ -1426,45 +1393,28 @@ func (self *Node) toGenericArrayUseNumber() ([]interface{}, error) { func (self *Node) toGenericArrayUseNode() ([]Node, error) { var nb = self.len() - var out = make([]Node, nb) if nb == 0 { - return out, nil - } - - var p = (*Node)(self.p) - out[0] = *p - if err := p.Check(); err != nil { - return nil, err + return []Node{}, nil } - for i := 1; i < nb; i++ { - p = p.unsafe_next() - if err := p.Check(); err != nil { - return nil, err - } - out[i] = *p - } + var s = (*linkedNodes)(self.p) + var out = make([]Node, nb) + s.ToSlice(out) return out, nil } func (self *Node) toGenericObject() (map[string]interface{}, error) { nb := self.len() - ret := make(map[string]interface{}, nb) if nb == 0 { - return ret, nil + return map[string]interface{}{}, nil } + ret := make(map[string]interface{}, nb) /* convert each item */ - var p = (*Pair)(self.p) - x, err := p.Value.Interface() - if err != nil { - return nil, err - } - ret[p.Key] = x - - for i := 1; i < nb; i++ { - p = p.unsafe_next() + var s = (*linkedPairs)(self.p) + for i := 0; i < nb; i++ { + p := s.At(i) x, err := p.Value.Interface() if err != nil { return nil, err @@ -1479,21 +1429,15 @@ func (self *Node) toGenericObject() (map[string]interface{}, error) { func (self *Node) toGenericObjectUseNumber() (map[string]interface{}, error) { nb := self.len() - ret := make(map[string]interface{}, nb) if nb == 0 { - return ret, nil + return map[string]interface{}{}, nil } + ret := make(map[string]interface{}, nb) /* convert each item */ - var p = (*Pair)(self.p) - x, err := p.Value.InterfaceUseNumber() - if err != nil { - return nil, err - } - ret[p.Key] = x - - for i := 1; i < nb; i++ { - p = p.unsafe_next() + var s = (*linkedPairs)(self.p) + for i := 0; i < nb; i++ { + p := s.At(i) x, err := p.Value.InterfaceUseNumber() if err != nil { return nil, err @@ -1507,25 +1451,28 @@ func (self *Node) toGenericObjectUseNumber() (map[string]interface{}, error) { func (self *Node) toGenericObjectUseNode() (map[string]Node, error) { var nb = self.len() - var out = make(map[string]Node, nb) if nb == 0 { - return out, nil + return map[string]Node{}, nil } - var p = (*Pair)(self.p) - out[p.Key] = p.Value - if err := p.Value.Check(); err != nil { - return nil, err - } + var s = (*linkedPairs)(self.p) + var out = make(map[string]Node, nb) + s.ToMap(out) - for i := 1; i < nb; i++ { - p = p.unsafe_next() - if err := p.Value.Check(); err != nil { - return nil, err - } - out[p.Key] = p.Value + /* all done */ + return out, nil +} + +func (self *Node) toGenericObjectUsePair() ([]Pair, error) { + var nb = self.len() + if nb == 0 { + return []Pair{}, nil } + var s = (*linkedPairs)(self.p) + var out = make([]Pair, nb) + s.ToSlice(out) + /* all done */ return out, nil } @@ -1536,15 +1483,12 @@ var ( nullNode = Node{t: types.V_NULL} trueNode = Node{t: types.V_TRUE} falseNode = Node{t: types.V_FALSE} - - emptyArrayNode = Node{t: types.V_ARRAY} - emptyObjectNode = Node{t: types.V_OBJECT} ) // NewRaw creates a node of raw json. // If the input json is invalid, NewRaw returns a error Node. func NewRaw(json string) Node { - parser := NewParser(json) + parser := NewParserObj(json) start, err := parser.skip() if err != 0 { return *newError(err, err.Message()) @@ -1567,7 +1511,6 @@ func NewAny(any interface{}) Node { default: return Node{ t: _V_ANY, - v: 0, p: unsafe.Pointer(&any), } } @@ -1585,7 +1528,6 @@ func NewBytes(src []byte) Node { // NewNull creates a node of type V_NULL func NewNull() Node { return Node{ - v: 0, p: nil, t: types.V_NULL, } @@ -1600,7 +1542,6 @@ func NewBool(v bool) Node { t = types.V_TRUE } return Node{ - v: 0, p: nil, t: t, } @@ -1610,26 +1551,30 @@ func NewBool(v bool) Node { // v must be a decimal string complying with RFC8259 func NewNumber(v string) Node { return Node{ - v: int64(len(v) & _LEN_MASK), + l: uint(len(v)), p: rt.StrPtr(v), t: _V_NUMBER, } } -func toNumber(node *Node) json.Number { - return json.Number(rt.StrFrom(node.p, node.v)) +func (node Node) toNumber() json.Number { + return json.Number(rt.StrFrom(node.p, int64(node.l))) } -func numberToFloat64(node *Node) (float64, error) { - ret,err := toNumber(node).Float64() +func (self Node) toString() string { + return rt.StrFrom(self.p, int64(self.l)) +} + +func (node Node) toFloat64() (float64, error) { + ret, err := node.toNumber().Float64() if err != nil { return 0, err } return ret, nil } -func numberToInt64(node *Node) (int64, error) { - ret,err := toNumber(node).Int64() +func (node Node) toInt64() (int64, error) { + ret,err := node.toNumber().Int64() if err != nil { return 0, err } @@ -1640,7 +1585,7 @@ func newBytes(v []byte) Node { return Node{ t: types.V_STRING, p: mem2ptr(v), - v: int64(len(v) & _LEN_MASK), + l: uint(len(v)), } } @@ -1652,103 +1597,65 @@ func NewString(v string) Node { return Node{ t: types.V_STRING, p: rt.StrPtr(v), - v: int64(len(v) & _LEN_MASK), + l: uint(len(v)), } } // NewArray creates a node of type V_ARRAY, // using v as its underlying children func NewArray(v []Node) Node { + s := new(linkedNodes) + s.FromSlice(v) + return newArray(s) +} + +func newArray(v *linkedNodes) Node { return Node{ t: types.V_ARRAY, - v: int64(len(v)&_LEN_MASK | cap(v)<<_CAP_BITS), - p: *(*unsafe.Pointer)(unsafe.Pointer(&v)), + l: uint(v.Len()), + p: unsafe.Pointer(v), } } -func (self *Node) setArray(v []Node) { +func (self *Node) setArray(v *linkedNodes) { self.t = types.V_ARRAY - self.setCapAndLen(cap(v), len(v)) - self.p = *(*unsafe.Pointer)(unsafe.Pointer(&v)) + self.l = uint(v.Len()) + self.p = unsafe.Pointer(v) } // NewObject creates a node of type V_OBJECT, // using v as its underlying children func NewObject(v []Pair) Node { - return Node{ - t: types.V_OBJECT, - v: int64(len(v)&_LEN_MASK | cap(v)<<_CAP_BITS), - p: *(*unsafe.Pointer)(unsafe.Pointer(&v)), - } + s := new(linkedPairs) + s.FromSlice(v) + return newObject(s) } -func (self *Node) setObject(v []Pair) { - self.t = types.V_OBJECT - self.setCapAndLen(cap(v), len(v)) - self.p = *(*unsafe.Pointer)(unsafe.Pointer(&v)) -} - -type parseObjectStack struct { - parser Parser - v []Pair -} - -type parseArrayStack struct { - parser Parser - v []Node -} - -func newLazyArray(p *Parser, v []Node) Node { - s := new(parseArrayStack) - s.parser = *p - s.v = v +func newObject(v *linkedPairs) Node { return Node{ - t: _V_ARRAY_LAZY, - v: int64(len(v)&_LEN_MASK | cap(v)<<_CAP_BITS), - p: unsafe.Pointer(s), - } -} - -func (self *Node) setLazyArray(p *Parser, v []Node) { - s := new(parseArrayStack) - s.parser = *p - s.v = v - self.t = _V_ARRAY_LAZY - self.setCapAndLen(cap(v), len(v)) - self.p = (unsafe.Pointer)(s) -} - -func newLazyObject(p *Parser, v []Pair) Node { - s := new(parseObjectStack) - s.parser = *p - s.v = v - return Node{ - t: _V_OBJECT_LAZY, - v: int64(len(v)&_LEN_MASK | cap(v)<<_CAP_BITS), - p: unsafe.Pointer(s), + t: types.V_OBJECT, + l: uint(v.Len()), + p: unsafe.Pointer(v), } } -func (self *Node) setLazyObject(p *Parser, v []Pair) { - s := new(parseObjectStack) - s.parser = *p - s.v = v - self.t = _V_OBJECT_LAZY - self.setCapAndLen(cap(v), len(v)) - self.p = (unsafe.Pointer)(s) +func (self *Node) setObject(v *linkedPairs) { + self.t = types.V_OBJECT + self.l = uint(v.Len()) + self.p = unsafe.Pointer(v) } func newRawNode(str string, typ types.ValueType) Node { return Node{ t: _V_RAW | typ, p: rt.StrPtr(str), - v: int64(len(str) & _LEN_MASK), + l: uint(len(str)), } } func (self *Node) parseRaw(full bool) { - raw := rt.StrFrom(self.p, self.v) - parser := NewParser(raw) + raw := self.toString() + parser := NewParserObj(raw) if full { parser.noLazy = true parser.skipValue = false @@ -1760,14 +1667,6 @@ func (self *Node) parseRaw(full bool) { } } -func newError(err types.ParsingError, msg string) *Node { - return &Node{ - t: V_ERROR, - v: int64(err), - p: unsafe.Pointer(&msg), - } -} - var typeJumpTable = [256]types.ValueType{ '"' : types.V_STRING, '-' : _V_NUMBER, @@ -1791,18 +1690,3 @@ var typeJumpTable = [256]types.ValueType{ func switchRawType(c byte) types.ValueType { return typeJumpTable[c] } - -func unwrapError(err error) *Node { - if se, ok := err.(*Node); ok { - return se - }else if sse, ok := err.(Node); ok { - return &sse - } else { - msg := err.Error() - return &Node{ - t: V_ERROR, - v: 0, - p: unsafe.Pointer(&msg), - } - } -} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/ast/parser.go b/vendor/github.com/bytedance/sonic/ast/parser.go index 0a8e7b068c..cb16f20bb0 100644 --- a/vendor/github.com/bytedance/sonic/ast/parser.go +++ b/vendor/github.com/bytedance/sonic/ast/parser.go @@ -18,11 +18,15 @@ package ast import ( `fmt` + `github.com/bytedance/sonic/internal/native/types` `github.com/bytedance/sonic/internal/rt` ) -const _DEFAULT_NODE_CAP int = 16 +const ( + _DEFAULT_NODE_CAP int = 8 + _APPEND_GROW_SHIFT = 1 +) const ( _ERR_NOT_FOUND types.ParsingError = 33 @@ -30,7 +34,10 @@ const ( ) var ( + // ErrNotExist means both key and value doesn't exist ErrNotExist error = newError(_ERR_NOT_FOUND, "value not exists") + + // ErrUnsupportType means API on the node is unsupported ErrUnsupportType error = newError(_ERR_UNSUPPORT_TYPE, "unsupported type") ) @@ -39,6 +46,7 @@ type Parser struct { s string noLazy bool skipValue bool + dbuf *byte } /** Parser Private Methods **/ @@ -107,7 +115,7 @@ func (self *Parser) lspace(sp int) int { return sp } -func (self *Parser) decodeArray(ret []Node) (Node, types.ParsingError) { +func (self *Parser) decodeArray(ret *linkedNodes) (Node, types.ParsingError) { sp := self.p ns := len(self.s) @@ -119,7 +127,7 @@ func (self *Parser) decodeArray(ret []Node) (Node, types.ParsingError) { /* check for empty array */ if self.s[self.p] == ']' { self.p++ - return emptyArrayNode, 0 + return Node{t: types.V_ARRAY}, 0 } /* allocate array space and parse every element */ @@ -149,7 +157,7 @@ func (self *Parser) decodeArray(ret []Node) (Node, types.ParsingError) { } /* add the value to result */ - ret = append(ret, val) + ret.Add(val) self.p = self.lspace(self.p) /* check for EOF */ @@ -160,17 +168,17 @@ func (self *Parser) decodeArray(ret []Node) (Node, types.ParsingError) { /* check for the next character */ switch self.s[self.p] { case ',' : self.p++ - case ']' : self.p++; return NewArray(ret), 0 - default: - if val.isLazy() { - return newLazyArray(self, ret), 0 - } - return Node{}, types.ERR_INVALID_CHAR + case ']' : self.p++; return newArray(ret), 0 + default: + // if val.isLazy() { + // return newLazyArray(self, ret), 0 + // } + return Node{}, types.ERR_INVALID_CHAR } } } -func (self *Parser) decodeObject(ret []Pair) (Node, types.ParsingError) { +func (self *Parser) decodeObject(ret *linkedPairs) (Node, types.ParsingError) { sp := self.p ns := len(self.s) @@ -182,7 +190,7 @@ func (self *Parser) decodeObject(ret []Pair) (Node, types.ParsingError) { /* check for empty object */ if self.s[self.p] == '}' { self.p++ - return emptyObjectNode, 0 + return Node{t: types.V_OBJECT}, 0 } /* decode each pair */ @@ -235,7 +243,8 @@ func (self *Parser) decodeObject(ret []Pair) (Node, types.ParsingError) { } /* add the value to result */ - ret = append(ret, Pair{Key: key, Value: val}) + // FIXME: ret's address may change here, thus previous referred node in ret may be invalid !! + ret.Add(Pair{Key: key, Value: val}) self.p = self.lspace(self.p) /* check for EOF */ @@ -246,11 +255,11 @@ func (self *Parser) decodeObject(ret []Pair) (Node, types.ParsingError) { /* check for the next character */ switch self.s[self.p] { case ',' : self.p++ - case '}' : self.p++; return NewObject(ret), 0 + case '}' : self.p++; return newObject(ret), 0 default: - if val.isLazy() { - return newLazyObject(self, ret), 0 - } + // if val.isLazy() { + // return newLazyObject(self, ret), 0 + // } return Node{}, types.ERR_INVALID_CHAR } } @@ -290,15 +299,23 @@ func (self *Parser) Parse() (Node, types.ParsingError) { case types.V_FALSE : return falseNode, 0 case types.V_STRING : return self.decodeString(val.Iv, val.Ep) case types.V_ARRAY: + if p := skipBlank(self.s, self.p); p >= self.p && self.s[p] == ']' { + self.p = p + 1 + return Node{t: types.V_ARRAY}, 0 + } if self.noLazy { - return self.decodeArray(make([]Node, 0, _DEFAULT_NODE_CAP)) + return self.decodeArray(new(linkedNodes)) } - return newLazyArray(self, make([]Node, 0, _DEFAULT_NODE_CAP)), 0 + return newLazyArray(self), 0 case types.V_OBJECT: + if p := skipBlank(self.s, self.p); p >= self.p && self.s[p] == '}' { + self.p = p + 1 + return Node{t: types.V_OBJECT}, 0 + } if self.noLazy { - return self.decodeObject(make([]Pair, 0, _DEFAULT_NODE_CAP)) + return self.decodeObject(new(linkedPairs)) } - return newLazyObject(self, make([]Pair, 0, _DEFAULT_NODE_CAP)), 0 + return newLazyObject(self), 0 case types.V_DOUBLE : return NewNumber(self.s[val.Ep:self.p]), 0 case types.V_INTEGER : return NewNumber(self.s[val.Ep:self.p]), 0 default : return Node{}, types.ParsingError(-val.Vt) @@ -429,7 +446,7 @@ func (self *Node) skipNextNode() *Node { } parser, stack := self.getParserAndArrayStack() - ret := stack.v + ret := &stack.v sp := parser.p ns := len(parser.s) @@ -458,7 +475,8 @@ func (self *Node) skipNextNode() *Node { } /* add the value to result */ - ret = append(ret, val) + ret.Add(val) + self.l++ parser.p = parser.lspace(parser.p) /* check for EOF */ @@ -470,12 +488,11 @@ func (self *Node) skipNextNode() *Node { switch parser.s[parser.p] { case ',': parser.p++ - self.setLazyArray(parser, ret) - return &ret[len(ret)-1] + return ret.At(ret.Len()-1) case ']': parser.p++ self.setArray(ret) - return &ret[len(ret)-1] + return ret.At(ret.Len()-1) default: return newSyntaxError(parser.syntaxError(types.ERR_INVALID_CHAR)) } @@ -487,7 +504,7 @@ func (self *Node) skipNextPair() (*Pair) { } parser, stack := self.getParserAndObjectStack() - ret := stack.v + ret := &stack.v sp := parser.p ns := len(parser.s) @@ -541,7 +558,8 @@ func (self *Node) skipNextPair() (*Pair) { } /* add the value to result */ - ret = append(ret, Pair{Key: key, Value: val}) + ret.Add(Pair{Key: key, Value: val}) + self.l++ parser.p = parser.lspace(parser.p) /* check for EOF */ @@ -553,12 +571,11 @@ func (self *Node) skipNextPair() (*Pair) { switch parser.s[parser.p] { case ',': parser.p++ - self.setLazyObject(parser, ret) - return &ret[len(ret)-1] + return ret.At(ret.Len()-1) case '}': parser.p++ self.setObject(ret) - return &ret[len(ret)-1] + return ret.At(ret.Len()-1) default: return &Pair{key, *newSyntaxError(parser.syntaxError(types.ERR_INVALID_CHAR))} } @@ -601,10 +618,30 @@ func LoadsUseNumber(src string) (int, interface{}, error) { } } +// NewParser returns pointer of new allocated parser func NewParser(src string) *Parser { return &Parser{s: src} } +// NewParser returns new allocated parser +func NewParserObj(src string) Parser { + return Parser{s: src} +} + +// decodeNumber controls if parser decodes the number values instead of skip them +// WARN: once you set decodeNumber(true), please set decodeNumber(false) before you drop the parser +// otherwise the memory CANNOT be reused +func (self *Parser) decodeNumber(decode bool) { + if !decode && self.dbuf != nil { + types.FreeDbuf(self.dbuf) + self.dbuf = nil + return + } + if decode && self.dbuf == nil { + self.dbuf = types.NewDbuf() + } +} + // ExportError converts types.ParsingError to std Error func (self *Parser) ExportError(err types.ParsingError) error { if err == _ERR_NOT_FOUND { @@ -615,4 +652,4 @@ func (self *Parser) ExportError(err types.ParsingError) error { Src : self.s, Code: err, }.Description()) -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/ast/sort.go b/vendor/github.com/bytedance/sonic/ast/sort.go deleted file mode 100644 index 0a9f145598..0000000000 --- a/vendor/github.com/bytedance/sonic/ast/sort.go +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright 2021 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package ast - -// Algorithm 3-way Radix Quicksort, d means the radix. -// Reference: https://algs4.cs.princeton.edu/51radix/Quick3string.java.html -func radixQsort(kvs PairSlice, d, maxDepth int) { - for len(kvs) > 11 { - // To avoid the worst case of quickSort (time: O(n^2)), use introsort here. - // Reference: https://en.wikipedia.org/wiki/Introsort and - // https://github.com/golang/go/issues/467 - if maxDepth == 0 { - heapSort(kvs, 0, len(kvs)) - return - } - maxDepth-- - - p := pivot(kvs, d) - lt, i, gt := 0, 0, len(kvs) - for i < gt { - c := byteAt(kvs[i].Key, d) - if c < p { - swap(kvs, lt, i) - i++ - lt++ - } else if c > p { - gt-- - swap(kvs, i, gt) - } else { - i++ - } - } - - // kvs[0:lt] < v = kvs[lt:gt] < kvs[gt:len(kvs)] - // Native implemention: - // radixQsort(kvs[:lt], d, maxDepth) - // if p > -1 { - // radixQsort(kvs[lt:gt], d+1, maxDepth) - // } - // radixQsort(kvs[gt:], d, maxDepth) - // Optimize as follows: make recursive calls only for the smaller parts. - // Reference: https://www.geeksforgeeks.org/quicksort-tail-call-optimization-reducing-worst-case-space-log-n/ - if p == -1 { - if lt > len(kvs) - gt { - radixQsort(kvs[gt:], d, maxDepth) - kvs = kvs[:lt] - } else { - radixQsort(kvs[:lt], d, maxDepth) - kvs = kvs[gt:] - } - } else { - ml := maxThree(lt, gt-lt, len(kvs)-gt) - if ml == lt { - radixQsort(kvs[lt:gt], d+1, maxDepth) - radixQsort(kvs[gt:], d, maxDepth) - kvs = kvs[:lt] - } else if ml == gt-lt { - radixQsort(kvs[:lt], d, maxDepth) - radixQsort(kvs[gt:], d, maxDepth) - kvs = kvs[lt:gt] - d += 1 - } else { - radixQsort(kvs[:lt], d, maxDepth) - radixQsort(kvs[lt:gt], d+1, maxDepth) - kvs = kvs[gt:] - } - } - } - insertRadixSort(kvs, d) -} - -func insertRadixSort(kvs PairSlice, d int) { - for i := 1; i < len(kvs); i++ { - for j := i; j > 0 && lessFrom(kvs[j].Key, kvs[j-1].Key, d); j-- { - swap(kvs, j, j-1) - } - } -} - -func pivot(kvs PairSlice, d int) int { - m := len(kvs) >> 1 - if len(kvs) > 40 { - // Tukey's ``Ninther,'' median of three mediankvs of three. - t := len(kvs) / 8 - return medianThree( - medianThree(byteAt(kvs[0].Key, d), byteAt(kvs[t].Key, d), byteAt(kvs[2*t].Key, d)), - medianThree(byteAt(kvs[m].Key, d), byteAt(kvs[m-t].Key, d), byteAt(kvs[m+t].Key, d)), - medianThree(byteAt(kvs[len(kvs)-1].Key, d), - byteAt(kvs[len(kvs)-1-t].Key, d), - byteAt(kvs[len(kvs)-1-2*t].Key, d))) - } - return medianThree(byteAt(kvs[0].Key, d), byteAt(kvs[m].Key, d), byteAt(kvs[len(kvs)-1].Key, d)) -} - -func medianThree(i, j, k int) int { - if i > j { - i, j = j, i - } // i < j - if k < i { - return i - } - if k > j { - return j - } - return k -} - -func maxThree(i, j, k int) int { - max := i - if max < j { - max = j - } - if max < k { - max = k - } - return max -} - -// maxDepth returns a threshold at which quicksort should switch -// to heapsort. It returnkvs 2*ceil(lg(n+1)). -func maxDepth(n int) int { - var depth int - for i := n; i > 0; i >>= 1 { - depth++ - } - return depth * 2 -} - -// siftDown implements the heap property on kvs[lo:hi]. -// first is an offset into the array where the root of the heap lies. -func siftDown(kvs PairSlice, lo, hi, first int) { - root := lo - for { - child := 2*root + 1 - if child >= hi { - break - } - if child+1 < hi && kvs[first+child].Key < kvs[first+child+1].Key { - child++ - } - if kvs[first+root].Key >= kvs[first+child].Key { - return - } - swap(kvs, first+root, first+child) - root = child - } -} - -func heapSort(kvs PairSlice, a, b int) { - first := a - lo := 0 - hi := b - a - - // Build heap with the greatest element at top. - for i := (hi - 1) / 2; i >= 0; i-- { - siftDown(kvs, i, hi, first) - } - - // Pop elements, the largest first, into end of kvs. - for i := hi - 1; i >= 0; i-- { - swap(kvs, first, first+i) - siftDown(kvs, lo, i, first) - } -} - -// Note that Pair.Key is NOT pointed to Pair.m when map key is integer after swap -func swap(kvs PairSlice, a, b int) { - kvs[a].Key, kvs[b].Key = kvs[b].Key, kvs[a].Key - kvs[a].Value, kvs[b].Value = kvs[b].Value, kvs[a].Value -} - -// Compare two strings from the pos d. -func lessFrom(a, b string, d int) bool { - l := len(a) - if l > len(b) { - l = len(b) - } - for i := d; i < l; i++ { - if a[i] == b[i] { - continue - } - return a[i] < b[i] - } - return len(a) < len(b) -} - -func byteAt(b string, p int) int { - if p < len(b) { - return int(b[p]) - } - return -1 -} diff --git a/vendor/github.com/bytedance/sonic/ast/stubs_go120.go b/vendor/github.com/bytedance/sonic/ast/stubs_go120.go index bd6fff680d..6f830529d2 100644 --- a/vendor/github.com/bytedance/sonic/ast/stubs_go120.go +++ b/vendor/github.com/bytedance/sonic/ast/stubs_go120.go @@ -52,4 +52,4 @@ var ( ) //go:linkname unquoteBytes encoding/json.unquoteBytes -func unquoteBytes(s []byte) (t []byte, ok bool) \ No newline at end of file +func unquoteBytes(s []byte) (t []byte, ok bool) diff --git a/vendor/github.com/bytedance/sonic/ast/visitor.go b/vendor/github.com/bytedance/sonic/ast/visitor.go new file mode 100644 index 0000000000..4019c31a2e --- /dev/null +++ b/vendor/github.com/bytedance/sonic/ast/visitor.go @@ -0,0 +1,315 @@ +/* + * Copyright 2021 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ast + +import ( + `encoding/json` + + `github.com/bytedance/sonic/internal/native/types` +) + +// Visitor handles the callbacks during preorder traversal of a JSON AST. +// +// According to the JSON RFC8259, a JSON AST can be defined by +// the following rules without seperator / whitespace tokens. +// +// JSON-AST = value +// value = false / null / true / object / array / number / string +// object = begin-object [ member *( member ) ] end-object +// member = string value +// array = begin-array [ value *( value ) ] end-array +// +type Visitor interface { + + // OnNull handles a JSON null value. + OnNull() error + + // OnBool handles a JSON true / false value. + OnBool(v bool) error + + // OnString handles a JSON string value. + OnString(v string) error + + // OnInt64 handles a JSON number value with int64 type. + OnInt64(v int64, n json.Number) error + + // OnFloat64 handles a JSON number value with float64 type. + OnFloat64(v float64, n json.Number) error + + // OnObjectBegin handles the beginning of a JSON object value with a + // suggested capacity that can be used to make your custom object container. + // + // After this point the visitor will receive a sequence of callbacks like + // [string, value, string, value, ......, ObjectEnd]. + // + // Note: + // 1. This is a recursive definition which means the value can + // also be a JSON object / array described by a sequence of callbacks. + // 2. The suggested capacity will be 0 if current object is empty. + // 3. Currently sonic use a fixed capacity for non-empty object (keep in + // sync with ast.Node) which might not be very suitable. This may be + // improved in future version. + OnObjectBegin(capacity int) error + + // OnObjectKey handles a JSON object key string in member. + OnObjectKey(key string) error + + // OnObjectEnd handles the ending of a JSON object value. + OnObjectEnd() error + + // OnArrayBegin handles the beginning of a JSON array value with a + // suggested capacity that can be used to make your custom array container. + // + // After this point the visitor will receive a sequence of callbacks like + // [value, value, value, ......, ArrayEnd]. + // + // Note: + // 1. This is a recursive definition which means the value can + // also be a JSON object / array described by a sequence of callbacks. + // 2. The suggested capacity will be 0 if current array is empty. + // 3. Currently sonic use a fixed capacity for non-empty array (keep in + // sync with ast.Node) which might not be very suitable. This may be + // improved in future version. + OnArrayBegin(capacity int) error + + // OnArrayEnd handles the ending of a JSON array value. + OnArrayEnd() error +} + +// VisitorOptions contains all Visitor's options. The default value is an +// empty VisitorOptions{}. +type VisitorOptions struct { + // OnlyNumber indicates parser to directly return number value without + // conversion, then the first argument of OnInt64 / OnFloat64 will always + // be zero. + OnlyNumber bool +} + +var defaultVisitorOptions = &VisitorOptions{} + +// Preorder decodes the whole JSON string and callbacks each AST node to visitor +// during preorder traversal. Any visitor method with an error returned will +// break the traversal and the given error will be directly returned. The opts +// argument can be reused after every call. +func Preorder(str string, visitor Visitor, opts *VisitorOptions) error { + if opts == nil { + opts = defaultVisitorOptions + } + // process VisitorOptions first to guarantee that all options will be + // constant during decoding and make options more readable. + var ( + optDecodeNumber = !opts.OnlyNumber + ) + + tv := &traverser{ + parser: Parser{ + s: str, + noLazy: true, + skipValue: false, + }, + visitor: visitor, + } + + if optDecodeNumber { + tv.parser.decodeNumber(true) + } + + err := tv.decodeValue() + + if optDecodeNumber { + tv.parser.decodeNumber(false) + } + return err +} + +type traverser struct { + parser Parser + visitor Visitor +} + +// NOTE: keep in sync with (*Parser).Parse method. +func (self *traverser) decodeValue() error { + switch val := self.parser.decodeValue(); val.Vt { + case types.V_EOF: + return types.ERR_EOF + case types.V_NULL: + return self.visitor.OnNull() + case types.V_TRUE: + return self.visitor.OnBool(true) + case types.V_FALSE: + return self.visitor.OnBool(false) + case types.V_STRING: + return self.decodeString(val.Iv, val.Ep) + case types.V_DOUBLE: + return self.visitor.OnFloat64(val.Dv, + json.Number(self.parser.s[val.Ep:self.parser.p])) + case types.V_INTEGER: + return self.visitor.OnInt64(val.Iv, + json.Number(self.parser.s[val.Ep:self.parser.p])) + case types.V_ARRAY: + return self.decodeArray() + case types.V_OBJECT: + return self.decodeObject() + default: + return types.ParsingError(-val.Vt) + } +} + +// NOTE: keep in sync with (*Parser).decodeArray method. +func (self *traverser) decodeArray() error { + sp := self.parser.p + ns := len(self.parser.s) + + /* check for EOF */ + self.parser.p = self.parser.lspace(sp) + if self.parser.p >= ns { + return types.ERR_EOF + } + + /* check for empty array */ + if self.parser.s[self.parser.p] == ']' { + self.parser.p++ + if err := self.visitor.OnArrayBegin(0); err != nil { + return err + } + return self.visitor.OnArrayEnd() + } + + /* allocate array space and parse every element */ + if err := self.visitor.OnArrayBegin(_DEFAULT_NODE_CAP); err != nil { + return err + } + for { + /* decode the value */ + if err := self.decodeValue(); err != nil { + return err + } + self.parser.p = self.parser.lspace(self.parser.p) + + /* check for EOF */ + if self.parser.p >= ns { + return types.ERR_EOF + } + + /* check for the next character */ + switch self.parser.s[self.parser.p] { + case ',': + self.parser.p++ + case ']': + self.parser.p++ + return self.visitor.OnArrayEnd() + default: + return types.ERR_INVALID_CHAR + } + } +} + +// NOTE: keep in sync with (*Parser).decodeObject method. +func (self *traverser) decodeObject() error { + sp := self.parser.p + ns := len(self.parser.s) + + /* check for EOF */ + self.parser.p = self.parser.lspace(sp) + if self.parser.p >= ns { + return types.ERR_EOF + } + + /* check for empty object */ + if self.parser.s[self.parser.p] == '}' { + self.parser.p++ + if err := self.visitor.OnObjectBegin(0); err != nil { + return err + } + return self.visitor.OnObjectEnd() + } + + /* allocate object space and decode each pair */ + if err := self.visitor.OnObjectBegin(_DEFAULT_NODE_CAP); err != nil { + return err + } + for { + var njs types.JsonState + var err types.ParsingError + + /* decode the key */ + if njs = self.parser.decodeValue(); njs.Vt != types.V_STRING { + return types.ERR_INVALID_CHAR + } + + /* extract the key */ + idx := self.parser.p - 1 + key := self.parser.s[njs.Iv:idx] + + /* check for escape sequence */ + if njs.Ep != -1 { + if key, err = unquote(key); err != 0 { + return err + } + } + + if err := self.visitor.OnObjectKey(key); err != nil { + return err + } + + /* expect a ':' delimiter */ + if err = self.parser.delim(); err != 0 { + return err + } + + /* decode the value */ + if err := self.decodeValue(); err != nil { + return err + } + + self.parser.p = self.parser.lspace(self.parser.p) + + /* check for EOF */ + if self.parser.p >= ns { + return types.ERR_EOF + } + + /* check for the next character */ + switch self.parser.s[self.parser.p] { + case ',': + self.parser.p++ + case '}': + self.parser.p++ + return self.visitor.OnObjectEnd() + default: + return types.ERR_INVALID_CHAR + } + } +} + +// NOTE: keep in sync with (*Parser).decodeString method. +func (self *traverser) decodeString(iv int64, ep int) error { + p := self.parser.p - 1 + s := self.parser.s[iv:p] + + /* fast path: no escape sequence */ + if ep == -1 { + return self.visitor.OnString(s) + } + + /* unquote the string */ + out, err := unquote(s) + if err != 0 { + return err + } + return self.visitor.OnString(out) +} diff --git a/vendor/github.com/bytedance/sonic/bench-arm.sh b/vendor/github.com/bytedance/sonic/bench-arm.sh deleted file mode 100644 index b47d6278a0..0000000000 --- a/vendor/github.com/bytedance/sonic/bench-arm.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -pwd=$(pwd) -export SONIC_NO_ASYNC_GC=1 - -cd $pwd/ast -go test -benchmem -run=^$ -benchtime=1000000x -bench "^(BenchmarkGet.*|BenchmarkSet.*)$" - -go test -benchmem -run=^$ -benchtime=10000x -bench "^(BenchmarkParser_.*|BenchmarkEncode.*)$" - -go test -benchmem -run=^$ -benchtime=10000000x -bench "^(BenchmarkNodeGetByPath|BenchmarkStructGetByPath|BenchmarkNodeIndex|BenchmarkStructIndex|BenchmarkSliceIndex|BenchmarkMapIndex|BenchmarkNodeGet|BenchmarkSliceGet|BenchmarkMapGet|BenchmarkNodeSet|BenchmarkMapSet|BenchmarkNodeSetByIndex|BenchmarkSliceSetByIndex|BenchmarkStructSetByIndex|BenchmarkNodeUnset|BenchmarkMapUnset|BenchmarkNodUnsetByIndex|BenchmarkSliceUnsetByIndex|BenchmarkNodeAdd|BenchmarkSliceAdd|BenchmarkMapAdd)$" - -unset SONIC_NO_ASYNC_GC -cd $pwd \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/bench.py b/vendor/github.com/bytedance/sonic/bench.py deleted file mode 100644 index 1d4c35739f..0000000000 --- a/vendor/github.com/bytedance/sonic/bench.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ByteDance Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import tempfile -import os -import subprocess -import argparse - -gbench_prefix = "SONIC_NO_ASYNC_GC=1 go test -benchmem -run=none " - -def run(cmd): - print(cmd) - if os.system(cmd): - print ("Failed to run cmd: %s"%(cmd)) - exit(1) - -def run_s(cmd): - print (cmd) - try: - res = os.popen(cmd) - except subprocess.CalledProcessError as e: - if e.returncode: - print (e.output) - exit(1) - return res.read() - -def run_r(cmd): - print (cmd) - try: - cmds = cmd.split(' ') - data = subprocess.check_output(cmds, stderr=subprocess.STDOUT) - except subprocess.CalledProcessError as e: - if e.returncode: - print (e.output) - exit(1) - return data.decode("utf-8") - -def compare(args): - # detech current branch. - # result = run_r("git branch") - current_branch = run_s("git status | head -n1 | sed 's/On branch //'") - # for br in result.split('\n'): - # if br.startswith("* "): - # current_branch = br.lstrip('* ') - # break - - if not current_branch: - print ("Failed to detech current branch") - return None - - # get the current diff - (fd, diff) = tempfile.mkstemp() - run("git diff > %s"%diff) - - # early return if currrent is main branch. - print ("Current branch: %s"%(current_branch)) - if current_branch == "main": - print ("Cannot compare at the main branch.Please build a new branch") - return None - - # benchmark current branch - (fd, target) = tempfile.mkstemp(".target.txt") - run("%s %s ./... 2>&1 | tee %s" %(gbench_prefix, args, target)) - - # trying to switch to the latest main branch - run("git checkout -- .") - if current_branch != "main": - run("git checkout main") - run("git pull --allow-unrelated-histories origin main") - - # benchmark main branch - (fd, main) = tempfile.mkstemp(".main.txt") - run("%s %s ./... 2>&1 | tee %s" %(gbench_prefix, args, main)) - - # diff the result - # benchstat = "go get golang.org/x/perf/cmd/benchstat && go install golang.org/x/perf/cmd/benchstat" - run( "benchstat -sort=delta %s %s"%(main, target)) - run("git checkout -- .") - - # restore branch - if current_branch != "main": - run("git checkout %s"%(current_branch)) - run("patch -p1 < %s" % (diff)) - return target - -def main(): - argparser = argparse.ArgumentParser(description='Tools to test the performance. Example: ./bench.py -b Decoder_Generic_Sonic -c') - argparser.add_argument('-b', '--bench', dest='filter', required=False, - help='Specify the filter for golang benchmark') - argparser.add_argument('-c', '--compare', dest='compare', action='store_true', required=False, - help='Compare with the main benchmarking') - argparser.add_argument('-t', '--times', dest='times', required=False, - help='benchmark the times') - argparser.add_argument('-r', '--repeat_times', dest='count', required=False, - help='benchmark the count') - args = argparser.parse_args() - - if args.filter: - gbench_args = "-bench=%s"%(args.filter) - else: - gbench_args = "-bench=." - - if args.times: - gbench_args += " -benchtime=%s"%(args.times) - - if args.count: - gbench_args += " -count=%s"%(args.count) - else: - gbench_args += " -count=10" - - if args.compare: - target = compare(gbench_args) - else: - target = None - - if not target: - (fd, target) = tempfile.mkstemp(".target.txt") - run("%s %s ./... 2>&1 | tee %s" %(gbench_prefix, gbench_args, target)) - -if __name__ == "__main__": - main() diff --git a/vendor/github.com/bytedance/sonic/bench.sh b/vendor/github.com/bytedance/sonic/bench.sh deleted file mode 100644 index 701986b58a..0000000000 --- a/vendor/github.com/bytedance/sonic/bench.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash - -pwd=$(pwd) -export SONIC_NO_ASYNC_GC=1 - -cd $pwd/encoder -go test -benchmem -run=^$ -benchtime=100000x -bench "^(BenchmarkEncoder_.*)$" - -cd $pwd/decoder -go test -benchmem -run=^$ -benchtime=100000x -bench "^(BenchmarkDecoder_.*)$" - -cd $pwd/ast -go test -benchmem -run=^$ -benchtime=1000000x -bench "^(BenchmarkGet.*|BenchmarkSet.*)$" - -go test -benchmem -run=^$ -benchtime=10000x -bench "^(BenchmarkParser_.*|BenchmarkEncode.*)$" - -go test -benchmem -run=^$ -benchtime=10000000x -bench "^(BenchmarkNodeGetByPath|BenchmarkStructGetByPath|BenchmarkNodeIndex|BenchmarkStructIndex|BenchmarkSliceIndex|BenchmarkMapIndex|BenchmarkNodeGet|BenchmarkSliceGet|BenchmarkMapGet|BenchmarkNodeSet|BenchmarkMapSet|BenchmarkNodeSetByIndex|BenchmarkSliceSetByIndex|BenchmarkStructSetByIndex|BenchmarkNodeUnset|BenchmarkMapUnset|BenchmarkNodUnsetByIndex|BenchmarkSliceUnsetByIndex|BenchmarkNodeAdd|BenchmarkSliceAdd|BenchmarkMapAdd)$" - -cd $pwd/external_jsonlib_test/benchmark_test -go test -benchmem -run=^$ -benchtime=100000x -bench "^(BenchmarkEncoder_.*|BenchmarkDecoder_.*)$" - -go test -benchmem -run=^$ -benchtime=1000000x -bench "^(BenchmarkGet.*|BenchmarkSet.*)$" - -go test -benchmem -run=^$ -benchtime=10000x -bench "^(BenchmarkParser_.*)$" - -unset SONIC_NO_ASYNC_GC -cd $pwd \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/check_branch_name.sh b/vendor/github.com/bytedance/sonic/check_branch_name.sh deleted file mode 100644 index d1905dab13..0000000000 --- a/vendor/github.com/bytedance/sonic/check_branch_name.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -current=$(git status | head -n1 | sed 's/On branch //') -name=${1:-$current} -if [[ ! $name =~ ^(((opt(imize)?|feat(ure)?|doc|(bug|hot)?fix|test|refact(or)?|ci)/.+)|(main|develop)|(release/.+)|(release-v[0-9]+\.[0-9]+)|(release/v[0-9]+\.[0-9]+\.[0-9]+(-[a-z0-9.]+(\+[a-z0-9.]+)?)?)|revert-[a-z0-9]+)$ ]]; then - echo "branch name '$name' is invalid" - exit 1 -else - echo "branch name '$name' is valid" -fi diff --git a/vendor/github.com/bytedance/sonic/compat.go b/vendor/github.com/bytedance/sonic/compat.go index 015aa62bfb..ec414c0cf8 100644 --- a/vendor/github.com/bytedance/sonic/compat.go +++ b/vendor/github.com/bytedance/sonic/compat.go @@ -1,4 +1,4 @@ -// +build !amd64 go1.21 +// +build !amd64 !go1.16 go1.22 /* * Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/decoder/decoder_amd64.go b/vendor/github.com/bytedance/sonic/decoder/decoder_amd64.go index 2ef19957cc..7c28455145 100644 --- a/vendor/github.com/bytedance/sonic/decoder/decoder_amd64.go +++ b/vendor/github.com/bytedance/sonic/decoder/decoder_amd64.go @@ -1,4 +1,4 @@ -// +build amd64,go1.15,!go1.21 +// +build amd64,go1.16,!go1.22 /* * Copyright 2023 ByteDance Inc. @@ -25,6 +25,10 @@ import ( // Decoder is the decoder context object type Decoder = decoder.Decoder +// SyntaxError represents json syntax error +type SyntaxError = decoder.SyntaxError + +// MismatchTypeError represents dismatching between json and object type MismatchTypeError = decoder.MismatchTypeError // Options for decode. @@ -42,8 +46,6 @@ const ( // StreamDecoder is the decoder context object for streaming input. type StreamDecoder = decoder.StreamDecoder -type SyntaxError = decoder.SyntaxError - var ( // NewDecoder creates a new decoder instance. NewDecoder = decoder.NewDecoder diff --git a/vendor/github.com/bytedance/sonic/decoder/decoder_compat.go b/vendor/github.com/bytedance/sonic/decoder/decoder_compat.go index e6b9463d70..466d842e8e 100644 --- a/vendor/github.com/bytedance/sonic/decoder/decoder_compat.go +++ b/vendor/github.com/bytedance/sonic/decoder/decoder_compat.go @@ -1,4 +1,4 @@ -// +build !amd64 go1.21 +// +build !amd64 !go1.16 go1.22 /* * Copyright 2023 ByteDance Inc. @@ -14,28 +14,34 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. -*/ + */ package decoder import ( - `encoding/json` - `bytes` - `reflect` - `github.com/bytedance/sonic/internal/native/types` - `github.com/bytedance/sonic/option` - `io` + `bytes` + `encoding/json` + `io` + `reflect` + `unsafe` + + `github.com/bytedance/sonic/internal/native/types` + `github.com/bytedance/sonic/option` ) +func init() { + println("WARNING: sonic only supports Go1.16~1.20 && CPU amd64, but your environment is not suitable") +} + const ( - _F_use_int64 = iota - _F_use_number - _F_disable_urc - _F_disable_unknown - _F_copy_string - _F_validate_string - - _F_allow_control = 31 + _F_use_int64 = 0 + _F_disable_urc = 2 + _F_disable_unknown = 3 + _F_copy_string = 4 + + _F_use_number = types.B_USE_NUMBER + _F_validate_string = types.B_VALIDATE_STRING + _F_allow_control = types.B_ALLOW_CONTROL ) type Options uint64 @@ -163,34 +169,26 @@ func Pretouch(vt reflect.Type, opts ...option.CompileOption) error { return nil } -type StreamDecoder struct { - r io.Reader - buf []byte - scanp int - scanned int64 - err error - Decoder -} +type StreamDecoder = json.Decoder // NewStreamDecoder adapts to encoding/json.NewDecoder API. // // NewStreamDecoder returns a new decoder that reads from r. func NewStreamDecoder(r io.Reader) *StreamDecoder { - return &StreamDecoder{r : r} + return json.NewDecoder(r) } -// Decode decodes input stream into val with corresponding data. -// Redundantly bytes may be read and left in its buffer, and can be used at next call. -// Either io error from underlying io.Reader (except io.EOF) -// or syntax error from data will be recorded and stop subsequently decoding. -func (self *StreamDecoder) Decode(val interface{}) (err error) { - dec := json.NewDecoder(self.r) - if (self.f | uint64(OptionUseNumber)) != 0 { - dec.UseNumber() - } - if (self.f | uint64(OptionDisableUnknown)) != 0 { - dec.DisallowUnknownFields() - } - return dec.Decode(val) +// SyntaxError represents json syntax error +type SyntaxError json.SyntaxError + +// Description +func (s SyntaxError) Description() string { + return (*json.SyntaxError)(unsafe.Pointer(&s)).Error() +} +// Error +func (s SyntaxError) Error() string { + return (*json.SyntaxError)(unsafe.Pointer(&s)).Error() } +// MismatchTypeError represents dismatching between json and object +type MismatchTypeError json.UnmarshalTypeError \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/encoder/encoder_amd64.go b/vendor/github.com/bytedance/sonic/encoder/encoder_amd64.go index fa107c73fb..0ef336b724 100644 --- a/vendor/github.com/bytedance/sonic/encoder/encoder_amd64.go +++ b/vendor/github.com/bytedance/sonic/encoder/encoder_amd64.go @@ -1,4 +1,4 @@ -// +build amd64,go1.15,!go1.21 +// +build amd64,go1.16,!go1.22 /* * Copyright 2023 ByteDance Inc. @@ -105,4 +105,4 @@ var ( // // NewStreamEncoder returns a new encoder that write to w. NewStreamEncoder = encoder.NewStreamEncoder -) \ No newline at end of file +) diff --git a/vendor/github.com/bytedance/sonic/encoder/encoder_compat.go b/vendor/github.com/bytedance/sonic/encoder/encoder_compat.go index afa80d561f..222eea5b2a 100644 --- a/vendor/github.com/bytedance/sonic/encoder/encoder_compat.go +++ b/vendor/github.com/bytedance/sonic/encoder/encoder_compat.go @@ -1,4 +1,4 @@ -// +build !amd64 go1.21 +// +build !amd64 !go1.16 go1.22 /* * Copyright 2023 ByteDance Inc. @@ -27,6 +27,10 @@ import ( `github.com/bytedance/sonic/option` ) +func init() { + println("WARNING: sonic only supports Go1.16~1.20 && CPU amd64, but your environment is not suitable") +} + // Options is a set of encoding options. type Options uint64 @@ -212,23 +216,12 @@ func Valid(data []byte) (ok bool, start int) { } // StreamEncoder uses io.Writer as -type StreamEncoder struct { - w io.Writer - Encoder -} +type StreamEncoder = json.Encoder // NewStreamEncoder adapts to encoding/json.NewDecoder API. // // NewStreamEncoder returns a new encoder that write to w. func NewStreamEncoder(w io.Writer) *StreamEncoder { - return &StreamEncoder{w: w} + return json.NewEncoder(w) } -// Encode encodes interface{} as JSON to io.Writer -func (enc *StreamEncoder) Encode(val interface{}) (err error) { - jenc := json.NewEncoder(enc.w) - jenc.SetEscapeHTML((enc.Opts & EscapeHTML) != 0) - jenc.SetIndent(enc.prefix, enc.indent) - err = jenc.Encode(val) - return err -} diff --git a/vendor/github.com/bytedance/sonic/internal/abi/abi.go b/vendor/github.com/bytedance/sonic/internal/abi/abi.go new file mode 100644 index 0000000000..b0aa68a108 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/abi/abi.go @@ -0,0 +1,197 @@ +/* + * Copyright 2022 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package abi + +import ( + `fmt` + `reflect` + `sort` + `strings` + + `github.com/bytedance/sonic/internal/rt` +) + +type FunctionLayout struct { + FP uint32 + Args []Parameter + Rets []Parameter +} + +func (self FunctionLayout) String() string { + return self.formatFn() +} + +func (self FunctionLayout) ArgSize() uint32 { + size := uintptr(0) + for _, arg := range self.Args { + size += arg.Type.Size() + } + return uint32(size) +} + +type slot struct { + p bool + m uint32 +} + +func (self FunctionLayout) StackMap() *rt.StackMap { + var st []slot + var mb rt.StackMapBuilder + + /* add arguments */ + for _, v := range self.Args { + st = append(st, slot { + m: v.Mem, + p: v.IsPointer, + }) + } + + /* add stack-passed return values */ + for _, v := range self.Rets { + if !v.InRegister { + st = append(st, slot { + m: v.Mem, + p: v.IsPointer, + }) + } + } + + /* sort by memory offset */ + sort.Slice(st, func(i int, j int) bool { + return st[i].m < st[j].m + }) + + /* add the bits */ + for _, v := range st { + mb.AddField(v.p) + } + + /* build the stack map */ + return mb.Build() +} + +func (self FunctionLayout) formatFn() string { + fp := self.FP + return fmt.Sprintf("\n%#04x\nRets:\n%s\nArgs:\n%s", fp, self.formatSeq(self.Rets, &fp), self.formatSeq(self.Args, &fp)) +} + +func (self FunctionLayout) formatSeq(v []Parameter, fp *uint32) string { + nb := len(v) + mm := make([]string, 0, len(v)) + + /* convert each part */ + for i := nb-1; i >=0; i-- { + *fp -= PtrSize + mm = append(mm, fmt.Sprintf("%#04x %s", *fp, v[i].String())) + } + + /* join them together */ + return strings.Join(mm, "\n") +} + +type Frame struct { + desc *FunctionLayout + locals []bool + ccall bool +} + +func NewFrame(desc *FunctionLayout, locals []bool, ccall bool) Frame { + fr := Frame{} + fr.desc = desc + fr.locals = locals + fr.ccall = ccall + return fr +} + +func (self *Frame) String() string { + out := self.desc.String() + + off := -8 + out += fmt.Sprintf("\n%#4x [Return PC]", off) + off -= 8 + out += fmt.Sprintf("\n%#4x [RBP]", off) + off -= 8 + + for _, v := range ReservedRegs(self.ccall) { + out += fmt.Sprintf("\n%#4x [%v]", off, v) + off -= PtrSize + } + + for _, b := range self.locals { + out += fmt.Sprintf("\n%#4x [%v]", off, b) + off -= PtrSize + } + + return out +} + +func (self *Frame) Prev() uint32 { + return self.Size() + PtrSize +} + +func (self *Frame) Size() uint32 { + return uint32(self.Offs() + PtrSize) +} + +func (self *Frame) Offs() uint32 { + return uint32(len(ReservedRegs(self.ccall)) * PtrSize + len(self.locals)*PtrSize) +} + +func (self *Frame) ArgPtrs() *rt.StackMap { + return self.desc.StackMap() +} + +func (self *Frame) LocalPtrs() *rt.StackMap { + var m rt.StackMapBuilder + for _, b := range self.locals { + m.AddFields(len(ReservedRegs(self.ccall)), b) + } + return m.Build() +} + +func alignUp(n uint32, a int) uint32 { + return (uint32(n) + uint32(a) - 1) &^ (uint32(a) - 1) +} + +func isPointer(vt reflect.Type) bool { + switch vt.Kind() { + case reflect.Bool : fallthrough + case reflect.Int : fallthrough + case reflect.Int8 : fallthrough + case reflect.Int16 : fallthrough + case reflect.Int32 : fallthrough + case reflect.Int64 : fallthrough + case reflect.Uint : fallthrough + case reflect.Uint8 : fallthrough + case reflect.Uint16 : fallthrough + case reflect.Uint32 : fallthrough + case reflect.Uint64 : fallthrough + case reflect.Float32 : fallthrough + case reflect.Float64 : fallthrough + case reflect.Uintptr : return false + case reflect.Chan : fallthrough + case reflect.Func : fallthrough + case reflect.Map : fallthrough + case reflect.Ptr : fallthrough + case reflect.UnsafePointer : return true + case reflect.Complex64 : fallthrough + case reflect.Complex128 : fallthrough + case reflect.Array : fallthrough + case reflect.Struct : panic("abi: unsupported types") + default : panic("abi: invalid value type") + } +} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/abi/abi_amd64.go b/vendor/github.com/bytedance/sonic/internal/abi/abi_amd64.go new file mode 100644 index 0000000000..be1a6b7c96 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/abi/abi_amd64.go @@ -0,0 +1,282 @@ +/* + * Copyright 2022 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package abi + +import ( + `fmt` + `reflect` + `unsafe` + + . `github.com/chenzhuoyu/iasm/x86_64` +) + +const ( + PtrSize = 8 // pointer size + PtrAlign = 8 // pointer alignment +) + +var iregOrderC = []Register{ + RDI, + RSI, + RDX, + RCX, + R8, + R9, +} + +var xregOrderC = []Register{ + XMM0, + XMM1, + XMM2, + XMM3, + XMM4, + XMM5, + XMM6, + XMM7, +} + +var ( + intType = reflect.TypeOf(0) + ptrType = reflect.TypeOf(unsafe.Pointer(nil)) +) + +func (self *Frame) argv(i int) *MemoryOperand { + return Ptr(RSP, int32(self.Prev() + self.desc.Args[i].Mem)) +} + +// spillv is used for growstack spill registers +func (self *Frame) spillv(i int) *MemoryOperand { + // remain one slot for caller return pc + return Ptr(RSP, PtrSize + int32(self.desc.Args[i].Mem)) +} + +func (self *Frame) retv(i int) *MemoryOperand { + return Ptr(RSP, int32(self.Prev() + self.desc.Rets[i].Mem)) +} + +func (self *Frame) resv(i int) *MemoryOperand { + return Ptr(RSP, int32(self.Offs() - uint32((i+1) * PtrSize))) +} + +func (self *Frame) emitGrowStack(p *Program, entry *Label) { + // spill all register arguments + for i, v := range self.desc.Args { + if v.InRegister { + if v.IsFloat == floatKind64 { + p.MOVSD(v.Reg, self.spillv(i)) + } else if v.IsFloat == floatKind32 { + p.MOVSS(v.Reg, self.spillv(i)) + }else { + p.MOVQ(v.Reg, self.spillv(i)) + } + } + } + + // call runtime.morestack_noctxt + p.MOVQ(F_morestack_noctxt, R12) + p.CALLQ(R12) + // load all register arguments + for i, v := range self.desc.Args { + if v.InRegister { + if v.IsFloat == floatKind64 { + p.MOVSD(self.spillv(i), v.Reg) + } else if v.IsFloat == floatKind32 { + p.MOVSS(self.spillv(i), v.Reg) + }else { + p.MOVQ(self.spillv(i), v.Reg) + } + } + } + + // jump back to the function entry + p.JMP(entry) +} + +func (self *Frame) GrowStackTextSize() uint32 { + p := DefaultArch.CreateProgram() + // spill all register arguments + for i, v := range self.desc.Args { + if v.InRegister { + if v.IsFloat == floatKind64 { + p.MOVSD(v.Reg, self.spillv(i)) + } else if v.IsFloat == floatKind32 { + p.MOVSS(v.Reg, self.spillv(i)) + }else { + p.MOVQ(v.Reg, self.spillv(i)) + } + } + } + + // call runtime.morestack_noctxt + p.MOVQ(F_morestack_noctxt, R12) + p.CALLQ(R12) + // load all register arguments + for i, v := range self.desc.Args { + if v.InRegister { + if v.IsFloat == floatKind64 { + p.MOVSD(self.spillv(i), v.Reg) + } else if v.IsFloat == floatKind32 { + p.MOVSS(self.spillv(i), v.Reg) + } else { + p.MOVQ(self.spillv(i), v.Reg) + } + } + } + + // jump back to the function entry + l := CreateLabel("") + p.Link(l) + p.JMP(l) + + return uint32(len(p.Assemble(0))) +} + +func (self *Frame) emitPrologue(p *Program) { + p.SUBQ(self.Size(), RSP) + p.MOVQ(RBP, Ptr(RSP, int32(self.Offs()))) + p.LEAQ(Ptr(RSP, int32(self.Offs())), RBP) +} + +func (self *Frame) emitEpilogue(p *Program) { + p.MOVQ(Ptr(RSP, int32(self.Offs())), RBP) + p.ADDQ(self.Size(), RSP) + p.RET() +} + +func (self *Frame) emitReserveRegs(p *Program) { + // spill reserved registers + for i, r := range ReservedRegs(self.ccall) { + switch r.(type) { + case Register64: + p.MOVQ(r, self.resv(i)) + case XMMRegister: + p.MOVSD(r, self.resv(i)) + default: + panic(fmt.Sprintf("unsupported register type %t to reserve", r)) + } + } +} + +func (self *Frame) emitSpillPtrs(p *Program) { + // spill pointer argument registers + for i, r := range self.desc.Args { + if r.InRegister && r.IsPointer { + p.MOVQ(r.Reg, self.argv(i)) + } + } +} + +func (self *Frame) emitClearPtrs(p *Program) { + // spill pointer argument registers + for i, r := range self.desc.Args { + if r.InRegister && r.IsPointer { + p.MOVQ(int64(0), self.argv(i)) + } + } +} + +func (self *Frame) emitCallC(p *Program, addr uintptr) { + p.MOVQ(addr, RAX) + p.CALLQ(RAX) +} + +type floatKind uint8 + +const ( + notFloatKind floatKind = iota + floatKind32 + floatKind64 +) + +type Parameter struct { + InRegister bool + IsPointer bool + IsFloat floatKind + Reg Register + Mem uint32 + Type reflect.Type +} + +func mkIReg(vt reflect.Type, reg Register64) (p Parameter) { + p.Reg = reg + p.Type = vt + p.InRegister = true + p.IsPointer = isPointer(vt) + return +} + +func isFloat(vt reflect.Type) floatKind { + switch vt.Kind() { + case reflect.Float32: + return floatKind32 + case reflect.Float64: + return floatKind64 + default: + return notFloatKind + } +} + +func mkXReg(vt reflect.Type, reg XMMRegister) (p Parameter) { + p.Reg = reg + p.Type = vt + p.InRegister = true + p.IsFloat = isFloat(vt) + return +} + +func mkStack(vt reflect.Type, mem uint32) (p Parameter) { + p.Mem = mem + p.Type = vt + p.InRegister = false + p.IsPointer = isPointer(vt) + p.IsFloat = isFloat(vt) + return +} + +func (self Parameter) String() string { + if self.InRegister { + return fmt.Sprintf("[%%%s, Pointer(%v), Float(%v)]", self.Reg, self.IsPointer, self.IsFloat) + } else { + return fmt.Sprintf("[%d(FP), Pointer(%v), Float(%v)]", self.Mem, self.IsPointer, self.IsFloat) + } +} + +func CallC(addr uintptr, fr Frame, maxStack uintptr) []byte { + p := DefaultArch.CreateProgram() + + stack := CreateLabel("_stack_grow") + entry := CreateLabel("_entry") + p.Link(entry) + fr.emitStackCheck(p, stack, maxStack) + fr.emitPrologue(p) + fr.emitReserveRegs(p) + fr.emitSpillPtrs(p) + fr.emitExchangeArgs(p) + fr.emitCallC(p, addr) + fr.emitExchangeRets(p) + fr.emitRestoreRegs(p) + fr.emitEpilogue(p) + p.Link(stack) + fr.emitGrowStack(p, entry) + + return p.Assemble(0) +} + + +func (self *Frame) emitDebug(p *Program) { + p.INT(3) +} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/abi/abi_legacy_amd64.go b/vendor/github.com/bytedance/sonic/internal/abi/abi_legacy_amd64.go new file mode 100644 index 0000000000..f13c815fc8 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/abi/abi_legacy_amd64.go @@ -0,0 +1,182 @@ +//go:build !go1.17 +// +build !go1.17 + +/* + * Copyright 2022 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package abi + +import ( + `fmt` + `reflect` + `runtime` + + . `github.com/chenzhuoyu/iasm/x86_64` +) + +func ReservedRegs(callc bool) []Register { + return nil +} + +func salloc(p []Parameter, sp uint32, vt reflect.Type) (uint32, []Parameter) { + switch vt.Kind() { + case reflect.Bool : return sp + 8, append(p, mkStack(reflect.TypeOf(false), sp)) + case reflect.Int : return sp + 8, append(p, mkStack(intType, sp)) + case reflect.Int8 : return sp + 8, append(p, mkStack(reflect.TypeOf(int8(0)), sp)) + case reflect.Int16 : return sp + 8, append(p, mkStack(reflect.TypeOf(int16(0)), sp)) + case reflect.Int32 : return sp + 8, append(p, mkStack(reflect.TypeOf(int32(0)), sp)) + case reflect.Int64 : return sp + 8, append(p, mkStack(reflect.TypeOf(int64(0)), sp)) + case reflect.Uint : return sp + 8, append(p, mkStack(reflect.TypeOf(uint(0)), sp)) + case reflect.Uint8 : return sp + 8, append(p, mkStack(reflect.TypeOf(uint8(0)), sp)) + case reflect.Uint16 : return sp + 8, append(p, mkStack(reflect.TypeOf(uint16(0)), sp)) + case reflect.Uint32 : return sp + 8, append(p, mkStack(reflect.TypeOf(uint32(0)), sp)) + case reflect.Uint64 : return sp + 8, append(p, mkStack(reflect.TypeOf(uint64(0)), sp)) + case reflect.Uintptr : return sp + 8, append(p, mkStack(reflect.TypeOf(uintptr(0)), sp)) + case reflect.Float32 : return sp + 8, append(p, mkStack(reflect.TypeOf(float32(0)), sp)) + case reflect.Float64 : return sp + 8, append(p, mkStack(reflect.TypeOf(float64(0)), sp)) + case reflect.Complex64 : panic("abi: go116: not implemented: complex64") + case reflect.Complex128 : panic("abi: go116: not implemented: complex128") + case reflect.Array : panic("abi: go116: not implemented: arrays") + case reflect.Chan : return sp + 8, append(p, mkStack(reflect.TypeOf((chan int)(nil)), sp)) + case reflect.Func : return sp + 8, append(p, mkStack(reflect.TypeOf((func())(nil)), sp)) + case reflect.Map : return sp + 8, append(p, mkStack(reflect.TypeOf((map[int]int)(nil)), sp)) + case reflect.Ptr : return sp + 8, append(p, mkStack(reflect.TypeOf((*int)(nil)), sp)) + case reflect.UnsafePointer : return sp + 8, append(p, mkStack(ptrType, sp)) + case reflect.Interface : return sp + 16, append(p, mkStack(ptrType, sp), mkStack(ptrType, sp + 8)) + case reflect.Slice : return sp + 24, append(p, mkStack(ptrType, sp), mkStack(intType, sp + 8), mkStack(intType, sp + 16)) + case reflect.String : return sp + 16, append(p, mkStack(ptrType, sp), mkStack(intType, sp + 8)) + case reflect.Struct : panic("abi: go116: not implemented: structs") + default : panic("abi: invalid value type") + } +} + +func NewFunctionLayout(ft reflect.Type) FunctionLayout { + var sp uint32 + var fn FunctionLayout + + /* assign every arguments */ + for i := 0; i < ft.NumIn(); i++ { + sp, fn.Args = salloc(fn.Args, sp, ft.In(i)) + } + + /* assign every return value */ + for i := 0; i < ft.NumOut(); i++ { + sp, fn.Rets = salloc(fn.Rets, sp, ft.Out(i)) + } + + /* update function ID and stack pointer */ + fn.FP = sp + return fn +} + +func (self *Frame) emitExchangeArgs(p *Program) { + iregArgs, xregArgs := 0, 0 + for _, v := range self.desc.Args { + if v.IsFloat != notFloatKind { + xregArgs += 1 + } else { + iregArgs += 1 + } + } + + if iregArgs > len(iregOrderC) { + panic("too many arguments, only support at most 6 integer arguments now") + } + if xregArgs > len(xregOrderC) { + panic("too many arguments, only support at most 8 float arguments now") + } + + ic, xc := iregArgs, xregArgs + for i := 0; i < len(self.desc.Args); i++ { + arg := self.desc.Args[i] + if arg.IsFloat == floatKind64 { + p.MOVSD(self.argv(i), xregOrderC[xregArgs - xc]) + xc -= 1 + } else if arg.IsFloat == floatKind32 { + p.MOVSS(self.argv(i), xregOrderC[xregArgs - xc]) + xc -= 1 + } else { + p.MOVQ(self.argv(i), iregOrderC[iregArgs - ic]) + ic -= 1 + } + } +} + +func (self *Frame) emitStackCheck(p *Program, to *Label, maxStack uintptr) { + // get the current goroutine + switch runtime.GOOS { + case "linux" : p.MOVQ(Abs(-8), R14).FS() + case "darwin" : p.MOVQ(Abs(0x30), R14).GS() + case "windows": break // windows always stores G pointer at R14 + default : panic("unsupported operating system") + } + + // check the stack guard + p.LEAQ(Ptr(RSP, -int32(self.Size() + uint32(maxStack))), RAX) + p.CMPQ(Ptr(R14, _G_stackguard0), RAX) + p.JBE(to) +} + +func (self *Frame) StackCheckTextSize() uint32 { + p := DefaultArch.CreateProgram() + + // get the current goroutine + switch runtime.GOOS { + case "linux" : p.MOVQ(Abs(-8), R14).FS() + case "darwin" : p.MOVQ(Abs(0x30), R14).GS() + case "windows": break // windows always stores G pointer at R14 + default : panic("unsupported operating system") + } + + // check the stack guard + p.LEAQ(Ptr(RSP, -int32(self.Size())), RAX) + p.CMPQ(Ptr(R14, _G_stackguard0), RAX) + l := CreateLabel("") + p.Link(l) + p.JBE(l) + + return uint32(len(p.Assemble(0))) +} + +func (self *Frame) emitExchangeRets(p *Program) { + if len(self.desc.Rets) > 1 { + panic("too many results, only support one result now") + } + // store result + if len(self.desc.Rets) ==1 { + if self.desc.Rets[0].IsFloat == floatKind64 { + p.MOVSD(xregOrderC[0], self.retv(0)) + } else if self.desc.Rets[0].IsFloat == floatKind32 { + p.MOVSS(xregOrderC[0], self.retv(0)) + } else { + p.MOVQ(RAX, self.retv(0)) + } + } +} + +func (self *Frame) emitRestoreRegs(p *Program) { + // load reserved registers + for i, r := range ReservedRegs(self.ccall) { + switch r.(type) { + case Register64: + p.MOVQ(self.resv(i), r) + case XMMRegister: + p.MOVSD(self.resv(i), r) + default: + panic(fmt.Sprintf("unsupported register type %t to reserve", r)) + } + } +} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/abi/abi_regabi_amd64.go b/vendor/github.com/bytedance/sonic/internal/abi/abi_regabi_amd64.go new file mode 100644 index 0000000000..91cdf8c3df --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/abi/abi_regabi_amd64.go @@ -0,0 +1,316 @@ +//go:build go1.17 +// +build go1.17 + +/* + * Copyright 2022 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** Go Internal ABI implementation + * + * This module implements the function layout algorithm described by the Go internal ABI. + * See https://github.com/golang/go/blob/master/src/cmd/compile/abi-internal.md for more info. + */ + +package abi + +import ( + `fmt` + `reflect` + + . `github.com/chenzhuoyu/iasm/x86_64` +) + +/** Frame Structure of the Generated Function + FP +------------------------------+ + | . . . | + | 2nd reg argument spill space | + + 1st reg argument spill space | + | | + | . . . | + | 2nd stack-assigned result | + + 1st stack-assigned result | + | | + | . . . | + | 2nd stack-assigned argument | + | 1st stack-assigned argument | + | stack-assigned receiver | +prev() +------------------------------+ (Previous Frame) + Return PC | +size() -------------------------------| + Saved RBP | +offs() -------------------------------| + 1th Reserved Registers | + -------------------------------| + 2th Reserved Registers | + -------------------------------| + Local Variables | + RSP -------------------------------|↓ lower addresses +*/ + +const zeroRegGo = XMM15 + +var iregOrderGo = [...]Register64 { + RAX,// RDI + RBX,// RSI + RCX,// RDX + RDI,// RCX + RSI,// R8 + R8, // R9 + R9, + R10, + R11, +} + +var xregOrderGo = [...]XMMRegister { + XMM0, + XMM1, + XMM2, + XMM3, + XMM4, + XMM5, + XMM6, + XMM7, + XMM8, + XMM9, + XMM10, + XMM11, + XMM12, + XMM13, + XMM14, +} + +func ReservedRegs(callc bool) []Register { + if callc { + return nil + } + return []Register { + R14, // current goroutine + R15, // GOT reference + } +} + +type stackAlloc struct { + s uint32 + i int + x int +} + +func (self *stackAlloc) reset() { + self.i, self.x = 0, 0 +} + +func (self *stackAlloc) ireg(vt reflect.Type) (p Parameter) { + p = mkIReg(vt, iregOrderGo[self.i]) + self.i++ + return +} + +func (self *stackAlloc) xreg(vt reflect.Type) (p Parameter) { + p = mkXReg(vt, xregOrderGo[self.x]) + self.x++ + return +} + +func (self *stackAlloc) stack(vt reflect.Type) (p Parameter) { + p = mkStack(vt, self.s) + self.s += uint32(vt.Size()) + return +} + +func (self *stackAlloc) spill(n uint32, a int) uint32 { + self.s = alignUp(self.s, a) + n + return self.s +} + +func (self *stackAlloc) alloc(p []Parameter, vt reflect.Type) []Parameter { + nb := vt.Size() + vk := vt.Kind() + + /* zero-sized objects are allocated on stack */ + if nb == 0 { + return append(p, mkStack(intType, self.s)) + } + + /* check for value type */ + switch vk { + case reflect.Bool : return self.valloc(p, reflect.TypeOf(false)) + case reflect.Int : return self.valloc(p, intType) + case reflect.Int8 : return self.valloc(p, reflect.TypeOf(int8(0))) + case reflect.Int16 : return self.valloc(p, reflect.TypeOf(int16(0))) + case reflect.Int32 : return self.valloc(p, reflect.TypeOf(uint32(0))) + case reflect.Int64 : return self.valloc(p, reflect.TypeOf(int64(0))) + case reflect.Uint : return self.valloc(p, reflect.TypeOf(uint(0))) + case reflect.Uint8 : return self.valloc(p, reflect.TypeOf(uint8(0))) + case reflect.Uint16 : return self.valloc(p, reflect.TypeOf(uint16(0))) + case reflect.Uint32 : return self.valloc(p, reflect.TypeOf(uint32(0))) + case reflect.Uint64 : return self.valloc(p, reflect.TypeOf(uint64(0))) + case reflect.Uintptr : return self.valloc(p, reflect.TypeOf(uintptr(0))) + case reflect.Float32 : return self.valloc(p, reflect.TypeOf(float32(0))) + case reflect.Float64 : return self.valloc(p, reflect.TypeOf(float64(0))) + case reflect.Complex64 : panic("abi: go117: not implemented: complex64") + case reflect.Complex128 : panic("abi: go117: not implemented: complex128") + case reflect.Array : panic("abi: go117: not implemented: arrays") + case reflect.Chan : return self.valloc(p, reflect.TypeOf((chan int)(nil))) + case reflect.Func : return self.valloc(p, reflect.TypeOf((func())(nil))) + case reflect.Map : return self.valloc(p, reflect.TypeOf((map[int]int)(nil))) + case reflect.Ptr : return self.valloc(p, reflect.TypeOf((*int)(nil))) + case reflect.UnsafePointer : return self.valloc(p, ptrType) + case reflect.Interface : return self.valloc(p, ptrType, ptrType) + case reflect.Slice : return self.valloc(p, ptrType, intType, intType) + case reflect.String : return self.valloc(p, ptrType, intType) + case reflect.Struct : panic("abi: go117: not implemented: structs") + default : panic("abi: invalid value type") + } +} + +func (self *stackAlloc) valloc(p []Parameter, vts ...reflect.Type) []Parameter { + for _, vt := range vts { + enum := isFloat(vt) + if enum != notFloatKind && self.x < len(xregOrderGo) { + p = append(p, self.xreg(vt)) + } else if enum == notFloatKind && self.i < len(iregOrderGo) { + p = append(p, self.ireg(vt)) + } else { + p = append(p, self.stack(vt)) + } + } + return p +} + +func NewFunctionLayout(ft reflect.Type) FunctionLayout { + var sa stackAlloc + var fn FunctionLayout + + /* assign every arguments */ + for i := 0; i < ft.NumIn(); i++ { + fn.Args = sa.alloc(fn.Args, ft.In(i)) + } + + /* reset the register counter, and add a pointer alignment field */ + sa.reset() + + /* assign every return value */ + for i := 0; i < ft.NumOut(); i++ { + fn.Rets = sa.alloc(fn.Rets, ft.Out(i)) + } + + sa.spill(0, PtrAlign) + + /* assign spill slots */ + for i := 0; i < len(fn.Args); i++ { + if fn.Args[i].InRegister { + fn.Args[i].Mem = sa.spill(PtrSize, PtrAlign) - PtrSize + } + } + + /* add the final pointer alignment field */ + fn.FP = sa.spill(0, PtrAlign) + return fn +} + +func (self *Frame) emitExchangeArgs(p *Program) { + iregArgs := make([]Parameter, 0, len(self.desc.Args)) + xregArgs := 0 + for _, v := range self.desc.Args { + if v.InRegister { + if v.IsFloat != notFloatKind { + xregArgs += 1 + } else { + iregArgs = append(iregArgs, v) + } + } else { + panic("not support stack-assgined arguments now") + } + } + if xregArgs > len(xregOrderC) { + panic("too many arguments, only support at most 8 integer register arguments now") + } + + switch len(iregArgs) { + case 0, 1, 2, 3: { + //Fast-Path: when arguments count are less than four, just exchange the registers + for i := 0; i < len(iregArgs); i++ { + p.MOVQ(iregOrderGo[i], iregOrderC[i]) + } + } + case 4, 5, 6: { + // need to spill 3th ~ regArgs registers before exchange + for i := 3; i < len(iregArgs); i++ { + arg := iregArgs[i] + // pointer args have already been spilled + if !arg.IsPointer { + p.MOVQ(iregOrderGo[i], Ptr(RSP, int32(self.Prev() + arg.Mem))) + } + } + p.MOVQ(iregOrderGo[0], iregOrderC[0]) + p.MOVQ(iregOrderGo[1], iregOrderC[1]) + p.MOVQ(iregOrderGo[2], iregOrderC[2]) + for i := 3; i < len(iregArgs); i++ { + arg := iregArgs[i] + p.MOVQ(Ptr(RSP, int32(self.Prev() + arg.Mem)), iregOrderC[i]) + } + } + default: + panic("too many arguments, only support at most 6 integer register arguments now") + } +} + +func (self *Frame) emitStackCheck(p *Program, to *Label, maxStack uintptr) { + p.LEAQ(Ptr(RSP, int32(-(self.Size() + uint32(maxStack)))), R12) + p.CMPQ(Ptr(R14, _G_stackguard0), R12) + p.JBE(to) +} + +func (self *Frame) StackCheckTextSize() uint32 { + p := DefaultArch.CreateProgram() + p.LEAQ(Ptr(RSP, int32(-(self.Size()))), R12) + p.CMPQ(Ptr(R14, _G_stackguard0), R12) + to := CreateLabel("") + p.Link(to) + p.JBE(to) + return uint32(len(p.Assemble(0))) +} + +func (self *Frame) emitExchangeRets(p *Program) { + if len(self.desc.Rets) > 1 { + panic("too many results, only support one result now") + } + // store result + if len(self.desc.Rets) == 1 && !self.desc.Rets[0].InRegister { + if self.desc.Rets[0].IsFloat == floatKind64 { + p.MOVSD(xregOrderC[0], self.retv(0)) + } else if self.desc.Rets[0].IsFloat == floatKind32 { + p.MOVSS(xregOrderC[0], self.retv(0)) + } else { + p.MOVQ(RAX, self.retv(0)) + } + } +} + +func (self *Frame) emitRestoreRegs(p *Program) { + // load reserved registers + for i, r := range ReservedRegs(self.ccall) { + switch r.(type) { + case Register64: + p.MOVQ(self.resv(i), r) + case XMMRegister: + p.MOVSD(self.resv(i), r) + default: + panic(fmt.Sprintf("unsupported register type %t to reserve", r)) + } + } + // zero xmm15 for go abi + p.XORPS(zeroRegGo, zeroRegGo) +} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/loader/loader_go115.go b/vendor/github.com/bytedance/sonic/internal/abi/stubs.go similarity index 59% rename from vendor/github.com/bytedance/sonic/loader/loader_go115.go rename to vendor/github.com/bytedance/sonic/internal/abi/stubs.go index a1d4d78923..b2486a1cf6 100644 --- a/vendor/github.com/bytedance/sonic/loader/loader_go115.go +++ b/vendor/github.com/bytedance/sonic/internal/abi/stubs.go @@ -1,8 +1,5 @@ -//go:build go1.15 && !go1.16 -// +build go1.15,!go1.16 - -/* - * Copyright 2021 ByteDance Inc. +/** + * Copyright 2023 ByteDance Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,12 +14,22 @@ * limitations under the License. */ -package loader +package abi import ( - `github.com/bytedance/sonic/internal/loader` + _ `unsafe` + + `github.com/bytedance/sonic/internal/rt` +) + +const ( + _G_stackguard0 = 0x10 ) -func (self Loader) LoadOne(text []byte, funcName string, frameSize int, argSize int, argStackmap []bool, localStackmap []bool) Function { - return Function(loader.Loader(text).Load(funcName, frameSize, argSize, argStackmap, localStackmap)) -} \ No newline at end of file +var ( + F_morestack_noctxt = uintptr(rt.FuncAddr(morestack_noctxt)) +) + +//go:linkname morestack_noctxt runtime.morestack_noctxt +func morestack_noctxt() + diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/asm_stubs_amd64_go116.go b/vendor/github.com/bytedance/sonic/internal/decoder/asm_stubs_amd64_go116.go new file mode 100644 index 0000000000..4c4c850ac0 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/decoder/asm_stubs_amd64_go116.go @@ -0,0 +1,130 @@ +// +build go1.16,!go1.17 + +// Copyright 2023 CloudWeGo Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package decoder + +import ( + `strconv` + _ `unsafe` + + `github.com/bytedance/sonic/internal/jit` + `github.com/bytedance/sonic/internal/rt` + `github.com/twitchyliquid64/golang-asm/obj` + `github.com/twitchyliquid64/golang-asm/obj/x86` +) + +var _runtime_writeBarrier uintptr = rt.GcwbAddr() + +//go:linkname gcWriteBarrierAX runtime.gcWriteBarrier +func gcWriteBarrierAX() + +var ( + _V_writeBarrier = jit.Imm(int64(_runtime_writeBarrier)) + + _F_gcWriteBarrierAX = jit.Func(gcWriteBarrierAX) +) + +func (self *_Assembler) WritePtrAX(i int, rec obj.Addr, saveDI bool) { + self.Emit("MOVQ", _V_writeBarrier, _R10) + self.Emit("CMPL", jit.Ptr(_R10, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + if saveDI { + self.save(_DI) + } + self.Emit("LEAQ", rec, _DI) + self.Emit("MOVQ", _F_gcWriteBarrierAX, _R10) // MOVQ ${fn}, AX + self.Rjmp("CALL", _R10) + if saveDI { + self.load(_DI) + } + self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", _AX, rec) + self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") +} + +func (self *_Assembler) WriteRecNotAX(i int, ptr obj.Addr, rec obj.Addr, saveDI bool, saveAX bool) { + if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { + panic("rec contains AX!") + } + self.Emit("MOVQ", _V_writeBarrier, _R10) + self.Emit("CMPL", jit.Ptr(_R10, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + if saveAX { + self.Emit("XCHGQ", ptr, _AX) + } else { + self.Emit("MOVQ", ptr, _AX) + } + if saveDI { + self.save(_DI) + } + self.Emit("LEAQ", rec, _DI) + self.Emit("MOVQ", _F_gcWriteBarrierAX, _R10) // MOVQ ${fn}, AX + self.Rjmp("CALL", _R10) + if saveDI { + self.load(_DI) + } + if saveAX { + self.Emit("XCHGQ", ptr, _AX) + } + self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", ptr, rec) + self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") +} + + +func (self *_ValueDecoder) WritePtrAX(i int, rec obj.Addr, saveDI bool) { + self.Emit("MOVQ", _V_writeBarrier, _R10) + self.Emit("CMPL", jit.Ptr(_R10, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + if saveDI { + self.save(_DI) + } + self.Emit("LEAQ", rec, _DI) + self.Emit("MOVQ", _F_gcWriteBarrierAX, _R10) // MOVQ ${fn}, AX + self.Rjmp("CALL", _R10) + if saveDI { + self.load(_DI) + } + self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", _AX, rec) + self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") +} + +func (self *_ValueDecoder) WriteRecNotAX(i int, ptr obj.Addr, rec obj.Addr, saveDI bool) { + if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { + panic("rec contains AX!") + } + self.Emit("MOVQ", _V_writeBarrier, _R10) + self.Emit("CMPL", jit.Ptr(_R10, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", ptr, _AX) + if saveDI { + self.save(_DI) + } + self.Emit("LEAQ", rec, _DI) + self.Emit("MOVQ", _F_gcWriteBarrierAX, _R10) // MOVQ ${fn}, AX + self.Rjmp("CALL", _R10) + if saveDI { + self.load(_DI) + } + self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", ptr, rec) + self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") +} diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/asm_stubs_amd64_go117.go b/vendor/github.com/bytedance/sonic/internal/decoder/asm_stubs_amd64_go117.go new file mode 100644 index 0000000000..b0125a792a --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/decoder/asm_stubs_amd64_go117.go @@ -0,0 +1,126 @@ +// +build go1.17,!go1.21 + +// Copyright 2023 CloudWeGo Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package decoder + +import ( + `strconv` + `unsafe` + + `github.com/bytedance/sonic/internal/jit` + `github.com/twitchyliquid64/golang-asm/obj` + `github.com/twitchyliquid64/golang-asm/obj/x86` +) + +//go:linkname _runtime_writeBarrier runtime.writeBarrier +var _runtime_writeBarrier uintptr + +//go:linkname gcWriteBarrierAX runtime.gcWriteBarrier +func gcWriteBarrierAX() + +var ( + _V_writeBarrier = jit.Imm(int64(uintptr(unsafe.Pointer(&_runtime_writeBarrier)))) + + _F_gcWriteBarrierAX = jit.Func(gcWriteBarrierAX) +) + +func (self *_Assembler) WritePtrAX(i int, rec obj.Addr, saveDI bool) { + self.Emit("MOVQ", _V_writeBarrier, _R9) + self.Emit("CMPL", jit.Ptr(_R9, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + if saveDI { + self.save(_DI) + } + self.Emit("LEAQ", rec, _DI) + self.call(_F_gcWriteBarrierAX) + if saveDI { + self.load(_DI) + } + self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", _AX, rec) + self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") +} + +func (self *_Assembler) WriteRecNotAX(i int, ptr obj.Addr, rec obj.Addr, saveDI bool, saveAX bool) { + if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { + panic("rec contains AX!") + } + self.Emit("MOVQ", _V_writeBarrier, _R9) + self.Emit("CMPL", jit.Ptr(_R9, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + if saveAX { + self.Emit("XCHGQ", ptr, _AX) + } else { + self.Emit("MOVQ", ptr, _AX) + } + if saveDI { + self.save(_DI) + } + self.Emit("LEAQ", rec, _DI) + self.call(_F_gcWriteBarrierAX) + if saveDI { + self.load(_DI) + } + if saveAX { + self.Emit("XCHGQ", ptr, _AX) + } + self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", ptr, rec) + self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") +} + + +func (self *_ValueDecoder) WritePtrAX(i int, rec obj.Addr, saveDI bool) { + self.Emit("MOVQ", _V_writeBarrier, _R9) + self.Emit("CMPL", jit.Ptr(_R9, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + if saveDI { + self.save(_DI) + } + self.Emit("LEAQ", rec, _DI) + self.call(_F_gcWriteBarrierAX) + if saveDI { + self.load(_DI) + } + self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", _AX, rec) + self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") +} + +func (self *_ValueDecoder) WriteRecNotAX(i int, ptr obj.Addr, rec obj.Addr, saveDI bool) { + if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { + panic("rec contains AX!") + } + self.Emit("MOVQ", _V_writeBarrier, _AX) + self.Emit("CMPL", jit.Ptr(_AX, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", ptr, _AX) + if saveDI { + self.save(_DI) + } + self.Emit("LEAQ", rec, _DI) + self.call(_F_gcWriteBarrierAX) + if saveDI { + self.load(_DI) + } + self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", ptr, rec) + self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") +} diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/asm_stubs_amd64_go121.go b/vendor/github.com/bytedance/sonic/internal/decoder/asm_stubs_amd64_go121.go new file mode 100644 index 0000000000..018892f597 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/decoder/asm_stubs_amd64_go121.go @@ -0,0 +1,133 @@ +// +build go1.21,!go1.22 + +// Copyright 2023 CloudWeGo Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package decoder + +import ( + `strconv` + `unsafe` + + `github.com/bytedance/sonic/internal/jit` + `github.com/twitchyliquid64/golang-asm/obj` + `github.com/twitchyliquid64/golang-asm/obj/x86` +) + +//go:linkname _runtime_writeBarrier runtime.writeBarrier +var _runtime_writeBarrier uintptr + +//go:nosplit +//go:linkname gcWriteBarrier2 runtime.gcWriteBarrier2 +func gcWriteBarrier2() + +// Notice: gcWriteBarrier must use R11 register!! +var _R11 = _IC + +var ( + _V_writeBarrier = jit.Imm(int64(uintptr(unsafe.Pointer(&_runtime_writeBarrier)))) + + _F_gcWriteBarrier2 = jit.Func(gcWriteBarrier2) +) + +func (self *_Assembler) WritePtrAX(i int, rec obj.Addr, saveDI bool) { + self.Emit("MOVQ", _V_writeBarrier, _R9) + self.Emit("CMPL", jit.Ptr(_R9, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + if saveDI { + self.save(_DI, _R11) + } else { + self.save(_R11) + } + self.Emit("MOVQ", _F_gcWriteBarrier2, _R11) + self.Rjmp("CALL", _R11) + self.Emit("MOVQ", _AX, jit.Ptr(_R11, 0)) + self.Emit("MOVQ", rec, _DI) + self.Emit("MOVQ", _DI, jit.Ptr(_R11, 8)) + if saveDI { + self.load(_DI, _R11) + } else { + self.load(_R11) + } + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", _AX, rec) +} + +func (self *_Assembler) WriteRecNotAX(i int, ptr obj.Addr, rec obj.Addr, saveDI bool, saveAX bool) { + if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { + panic("rec contains AX!") + } + self.Emit("MOVQ", _V_writeBarrier, _R9) + self.Emit("CMPL", jit.Ptr(_R9, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + if saveAX { + self.save(_AX, _R11) + } else { + self.save(_R11) + } + self.Emit("MOVQ", _F_gcWriteBarrier2, _R11) + self.Rjmp("CALL", _R11) + self.Emit("MOVQ", ptr, jit.Ptr(_R11, 0)) + self.Emit("MOVQ", rec, _AX) + self.Emit("MOVQ", _AX, jit.Ptr(_R11, 8)) + self.load(_R11) + if saveAX { + self.load(_AX, _R11) + } else { + self.load(_R11) + } + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", ptr, rec) +} + +func (self *_ValueDecoder) WritePtrAX(i int, rec obj.Addr, saveDI bool) { + self.Emit("MOVQ", _V_writeBarrier, _R9) + self.Emit("CMPL", jit.Ptr(_R9, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + if saveDI { + self.save(_DI, _R11) + } else { + self.save(_R11) + } + self.Emit("MOVQ", _F_gcWriteBarrier2, _R11) + self.Rjmp("CALL", _R11) + self.Emit("MOVQ", _AX, jit.Ptr(_R11, 0)) + self.Emit("MOVQ", rec, _DI) + self.Emit("MOVQ", _DI, jit.Ptr(_R11, 8)) + if saveDI { + self.load(_DI, _R11) + } else { + self.load(_R11) + } + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", _AX, rec) +} + +func (self *_ValueDecoder) WriteRecNotAX(i int, ptr obj.Addr, rec obj.Addr, saveDI bool) { + if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { + panic("rec contains AX!") + } + self.Emit("MOVQ", _V_writeBarrier, _AX) + self.Emit("CMPL", jit.Ptr(_AX, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.save(_R11) + self.Emit("MOVQ", _F_gcWriteBarrier2, _R11) + self.Rjmp("CALL", _R11) + self.Emit("MOVQ", ptr, jit.Ptr(_R11, 0)) + self.Emit("MOVQ", rec, _AX) + self.Emit("MOVQ", _AX, jit.Ptr(_R11, 8)) + self.load(_R11) + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", ptr, rec) +} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/assembler_amd64_go117.go b/vendor/github.com/bytedance/sonic/internal/decoder/assembler_regabi_amd64.go similarity index 97% rename from vendor/github.com/bytedance/sonic/internal/decoder/assembler_amd64_go117.go rename to vendor/github.com/bytedance/sonic/internal/decoder/assembler_regabi_amd64.go index 27413739de..3d223e14e7 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/assembler_amd64_go117.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/assembler_regabi_amd64.go @@ -1,5 +1,5 @@ -//go:build go1.17 && !go1.21 -// +build go1.17,!go1.21 +//go:build go1.17 && !go1.22 +// +build go1.17,!go1.22 /* * Copyright 2021 ByteDance Inc. @@ -24,7 +24,6 @@ import ( `fmt` `math` `reflect` - `strconv` `unsafe` `github.com/bytedance/sonic/internal/caching` @@ -33,7 +32,6 @@ import ( `github.com/bytedance/sonic/internal/native/types` `github.com/bytedance/sonic/internal/rt` `github.com/twitchyliquid64/golang-asm/obj` - `github.com/twitchyliquid64/golang-asm/obj/x86` ) /** Register Allocations @@ -825,8 +823,8 @@ var ( ) var ( - _Vp_max_f32 = new(float64) - _Vp_min_f32 = new(float64) + _Vp_max_f32 = new(float32) + _Vp_min_f32 = new(float32) ) func init() { @@ -835,17 +833,15 @@ func init() { } func (self *_Assembler) range_single_X0() { - self.Emit("MOVSD" , _VAR_st_Dv, _X0) // MOVSD st.Dv, X0 + self.Emit("CVTSD2SS", _VAR_st_Dv, _X0) // CVTSD2SS _VAR_st_Dv, X0 self.Emit("MOVQ" , _V_max_f32, _CX) // MOVQ _max_f32, CX self.Emit("MOVQ" , jit.Gitab(_I_float32), _ET) // MOVQ ${itab(float32)}, ET self.Emit("MOVQ" , jit.Gtype(_T_float32), _EP) // MOVQ ${type(float32)}, EP - self.Emit("UCOMISD" , jit.Ptr(_CX, 0), _X0) // UCOMISD (CX), X0 + self.Emit("UCOMISS" , jit.Ptr(_CX, 0), _X0) // UCOMISS (CX), X0 self.Sjmp("JA" , _LB_range_error) // JA _range_error self.Emit("MOVQ" , _V_min_f32, _CX) // MOVQ _min_f32, CX - self.Emit("MOVSD" , jit.Ptr(_CX, 0), _X1) // MOVSD (CX), X1 - self.Emit("UCOMISD" , _X0, _X1) // UCOMISD X0, X1 - self.Sjmp("JA" , _LB_range_error) // JA _range_error - self.Emit("CVTSD2SS", _X0, _X0) // CVTSD2SS X0, X0 + self.Emit("UCOMISS" , jit.Ptr(_CX, 0), _X0) // UCOMISS (CX), X0 + self.Sjmp("JB" , _LB_range_error) // JB _range_error } func (self *_Assembler) range_signed_CX(i *rt.GoItab, t *rt.GoType, a int64, b int64) { @@ -1931,62 +1927,3 @@ func (self *_Assembler) print_gc(i int, p1 *_Instr, p2 *_Instr) { self.Emit("MOVQ", jit.Imm(int64(i)), _AX) // MOVQ $(i), (SP) self.call_go(_F_println) } - -//go:linkname _runtime_writeBarrier runtime.writeBarrier -var _runtime_writeBarrier uintptr - -//go:linkname gcWriteBarrierAX runtime.gcWriteBarrier -func gcWriteBarrierAX() - -var ( - _V_writeBarrier = jit.Imm(int64(uintptr(unsafe.Pointer(&_runtime_writeBarrier)))) - - _F_gcWriteBarrierAX = jit.Func(gcWriteBarrierAX) -) - -func (self *_Assembler) WritePtrAX(i int, rec obj.Addr, saveDI bool) { - self.Emit("MOVQ", _V_writeBarrier, _R9) - self.Emit("CMPL", jit.Ptr(_R9, 0), jit.Imm(0)) - self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - if saveDI { - self.save(_DI) - } - self.Emit("LEAQ", rec, _DI) - self.call(_F_gcWriteBarrierAX) - if saveDI { - self.load(_DI) - } - self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", _AX, rec) - self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") -} - -func (self *_Assembler) WriteRecNotAX(i int, ptr obj.Addr, rec obj.Addr, saveDI bool, saveAX bool) { - if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { - panic("rec contains AX!") - } - self.Emit("MOVQ", _V_writeBarrier, _R9) - self.Emit("CMPL", jit.Ptr(_R9, 0), jit.Imm(0)) - self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - if saveAX { - self.Emit("XCHGQ", ptr, _AX) - } else { - self.Emit("MOVQ", ptr, _AX) - } - if saveDI { - self.save(_DI) - } - self.Emit("LEAQ", rec, _DI) - self.call(_F_gcWriteBarrierAX) - if saveDI { - self.load(_DI) - } - if saveAX { - self.Emit("XCHGQ", ptr, _AX) - } - self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", ptr, rec) - self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") -} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/assembler_amd64_go116.go b/vendor/github.com/bytedance/sonic/internal/decoder/assembler_stkabi_amd64.go similarity index 97% rename from vendor/github.com/bytedance/sonic/internal/decoder/assembler_amd64_go116.go rename to vendor/github.com/bytedance/sonic/internal/decoder/assembler_stkabi_amd64.go index a2618bb3ce..57a38b4203 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/assembler_amd64_go116.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/assembler_stkabi_amd64.go @@ -1,4 +1,4 @@ -// +build go1.15,!go1.17 +// +build go1.16,!go1.17 /* * Copyright 2021 ByteDance Inc. @@ -23,7 +23,6 @@ import ( `fmt` `math` `reflect` - `strconv` `unsafe` `github.com/bytedance/sonic/internal/caching` @@ -32,7 +31,6 @@ import ( `github.com/bytedance/sonic/internal/native/types` `github.com/bytedance/sonic/internal/rt` `github.com/twitchyliquid64/golang-asm/obj` - `github.com/twitchyliquid64/golang-asm/obj/x86` ) /** Register Allocations @@ -818,8 +816,8 @@ var ( ) var ( - _Vp_max_f32 = new(float64) - _Vp_min_f32 = new(float64) + _Vp_max_f32 = new(float32) + _Vp_min_f32 = new(float32) ) func init() { @@ -828,17 +826,15 @@ func init() { } func (self *_Assembler) range_single() { - self.Emit("MOVSD" , _VAR_st_Dv, _X0) // MOVSD st.Dv, X0 + self.Emit("CVTSD2SS", _VAR_st_Dv, _X0) // CVTSD2SS st.Dv, X0 self.Emit("MOVQ" , _V_max_f32, _AX) // MOVQ _max_f32, AX self.Emit("MOVQ" , jit.Gitab(_I_float32), _ET) // MOVQ ${itab(float32)}, ET self.Emit("MOVQ" , jit.Gtype(_T_float32), _EP) // MOVQ ${type(float32)}, EP - self.Emit("UCOMISD" , jit.Ptr(_AX, 0), _X0) // UCOMISD (AX), X0 + self.Emit("UCOMISS" , jit.Ptr(_AX, 0), _X0) // UCOMISS (AX), X0 self.Sjmp("JA" , _LB_range_error) // JA _range_error self.Emit("MOVQ" , _V_min_f32, _AX) // MOVQ _min_f32, AX - self.Emit("MOVSD" , jit.Ptr(_AX, 0), _X1) // MOVSD (AX), X1 - self.Emit("UCOMISD" , _X0, _X1) // UCOMISD X0, X1 - self.Sjmp("JA" , _LB_range_error) // JA _range_error - self.Emit("CVTSD2SS", _X0, _X0) // CVTSD2SS X0, X0 + self.Emit("UCOMISS" , jit.Ptr(_AX, 0), _X0) // UCOMISS (AX), X0 + self.Sjmp("JB" , _LB_range_error) // JB _range_error } func (self *_Assembler) range_signed(i *rt.GoItab, t *rt.GoType, a int64, b int64) { @@ -1951,63 +1947,3 @@ func (self *_Assembler) print_gc(i int, p1 *_Instr, p2 *_Instr) { self.Emit("MOVQ", jit.Imm(int64(i)), jit.Ptr(_SP, 0)) // MOVQ $(i), (SP) self.call_go(_F_println) } - -var _runtime_writeBarrier uintptr = rt.GcwbAddr() - -//go:linkname gcWriteBarrierAX runtime.gcWriteBarrier -func gcWriteBarrierAX() - -var ( - _V_writeBarrier = jit.Imm(int64(_runtime_writeBarrier)) - - _F_gcWriteBarrierAX = jit.Func(gcWriteBarrierAX) -) - -func (self *_Assembler) WritePtrAX(i int, rec obj.Addr, saveDI bool) { - self.Emit("MOVQ", _V_writeBarrier, _R10) - self.Emit("CMPL", jit.Ptr(_R10, 0), jit.Imm(0)) - self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - if saveDI { - self.save(_DI) - } - self.Emit("LEAQ", rec, _DI) - self.Emit("MOVQ", _F_gcWriteBarrierAX, _R10) // MOVQ ${fn}, AX - self.Rjmp("CALL", _R10) - if saveDI { - self.load(_DI) - } - self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", _AX, rec) - self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") -} - -func (self *_Assembler) WriteRecNotAX(i int, ptr obj.Addr, rec obj.Addr, saveDI bool, saveAX bool) { - if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { - panic("rec contains AX!") - } - self.Emit("MOVQ", _V_writeBarrier, _R10) - self.Emit("CMPL", jit.Ptr(_R10, 0), jit.Imm(0)) - self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - if saveAX { - self.Emit("XCHGQ", ptr, _AX) - } else { - self.Emit("MOVQ", ptr, _AX) - } - if saveDI { - self.save(_DI) - } - self.Emit("LEAQ", rec, _DI) - self.Emit("MOVQ", _F_gcWriteBarrierAX, _R10) // MOVQ ${fn}, AX - self.Rjmp("CALL", _R10) - if saveDI { - self.load(_DI) - } - if saveAX { - self.Emit("XCHGQ", ptr, _AX) - } - self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", ptr, rec) - self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") -} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/compiler.go b/vendor/github.com/bytedance/sonic/internal/decoder/compiler.go index 8f3905fca3..e9e2b77fcc 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/compiler.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/compiler.go @@ -1152,4 +1152,4 @@ func (self *_Compiler) checkIfSkip(p *_Program, vt reflect.Type, c byte) int { p.pin(j) p.int(_OP_add, 1) return s -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/debug.go b/vendor/github.com/bytedance/sonic/internal/decoder/debug.go index 9cf3a6a002..d5537ed9af 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/debug.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/debug.go @@ -67,4 +67,4 @@ func (self *_Assembler) debug_instr(i int, v *_Instr) { } self.force_gc() } -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/decoder.go b/vendor/github.com/bytedance/sonic/internal/decoder/decoder.go index 19ad719659..8453db8610 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/decoder.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/decoder.go @@ -30,14 +30,14 @@ import ( ) const ( - _F_use_int64 = iota - _F_use_number - _F_disable_urc - _F_disable_unknown - _F_copy_string - _F_validate_string - - _F_allow_control = 31 + _F_use_int64 = 0 + _F_disable_urc = 2 + _F_disable_unknown = 3 + _F_copy_string = 4 + + _F_use_number = types.B_USE_NUMBER + _F_validate_string = types.B_VALIDATE_STRING + _F_allow_control = types.B_ALLOW_CONTROL ) type Options uint64 @@ -252,4 +252,4 @@ func Skip(data []byte) (start int, end int) { ret := native.SkipOne(&s, &p, m, uint64(0)) types.FreeStateMachine(m) return ret, p -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/errors.go b/vendor/github.com/bytedance/sonic/internal/decoder/errors.go index c905fdfb0c..4453f5cfe1 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/errors.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/errors.go @@ -44,45 +44,55 @@ func (self SyntaxError) Description() string { } func (self SyntaxError) description() string { - i := 16 - p := self.Pos - i - q := self.Pos + i - /* check for empty source */ if self.Src == "" { return fmt.Sprintf("no sources available: %#v", self) } + p, x, q, y := calcBounds(len(self.Src), self.Pos) + + /* compose the error description */ + return fmt.Sprintf( + "at index %d: %s\n\n\t%s\n\t%s^%s\n", + self.Pos, + self.Message(), + self.Src[p:q], + strings.Repeat(".", x), + strings.Repeat(".", y), + ) +} + +func calcBounds(size int, pos int) (lbound int, lwidth int, rbound int, rwidth int) { + if pos >= size || pos < 0 { + return 0, 0, size, 0 + } + + i := 16 + lbound = pos - i + rbound = pos + i + /* prevent slicing before the beginning */ - if p < 0 { - p, q, i = 0, q - p, i + p + if lbound < 0 { + lbound, rbound, i = 0, rbound - lbound, i + lbound } /* prevent slicing beyond the end */ - if n := len(self.Src); q > n { - n = q - n - q = len(self.Src) + if n := size; rbound > n { + n = rbound - n + rbound = size /* move the left bound if possible */ - if p > n { + if lbound > n { i += n - p -= n + lbound -= n } } /* left and right length */ - x := clamp_zero(i) - y := clamp_zero(q - p - i - 1) + lwidth = clamp_zero(i) + rwidth = clamp_zero(rbound - lbound - i - 1) - /* compose the error description */ - return fmt.Sprintf( - "at index %d: %s\n\n\t%s\n\t%s^%s\n", - self.Pos, - self.Message(), - self.Src[p:q], - strings.Repeat(".", x), - strings.Repeat(".", y), - ) + return } func (self SyntaxError) Message() string { @@ -107,16 +117,19 @@ var stackOverflow = &json.UnsupportedValueError { Value : reflect.ValueOf("..."), } -//go:nosplit func error_wrap(src string, pos int, code types.ParsingError) error { - return SyntaxError { + return *error_wrap_heap(src, pos, code) +} + +//go:noinline +func error_wrap_heap(src string, pos int, code types.ParsingError) *SyntaxError { + return &SyntaxError { Pos : pos, Src : src, Code : code, } } -//go:nosplit func error_type(vt *rt.GoType) error { return &json.UnmarshalTypeError{Type: vt.Pack()} } @@ -158,7 +171,6 @@ func (self MismatchTypeError) Description() string { return fmt.Sprintf("Mismatch type %s with value %s %s", self.Type.String(), swithchJSONType(self.Src, self.Pos), se.description()) } -//go:nosplit func error_mismatch(src string, pos int, vt *rt.GoType) error { return &MismatchTypeError { Pos : pos, @@ -167,12 +179,10 @@ func error_mismatch(src string, pos int, vt *rt.GoType) error { } } -//go:nosplit func error_field(name string) error { return errors.New("json: unknown field " + strconv.Quote(name)) } -//go:nosplit func error_value(value string, vtype reflect.Type) error { return &json.UnmarshalTypeError { Type : vtype, diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/generic_amd64_go117.go b/vendor/github.com/bytedance/sonic/internal/decoder/generic_regabi_amd64.go similarity index 95% rename from vendor/github.com/bytedance/sonic/internal/decoder/generic_amd64_go117.go rename to vendor/github.com/bytedance/sonic/internal/decoder/generic_regabi_amd64.go index df1cd9f5bb..337af054c6 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/generic_amd64_go117.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/generic_regabi_amd64.go @@ -1,5 +1,4 @@ -//go:build go1.17 && !go1.21 -// +build go1.17,!go1.21 +// +build go1.17,!go1.22 /* * Copyright 2021 ByteDance Inc. @@ -23,13 +22,11 @@ import ( `encoding/json` `fmt` `reflect` - `strconv` `github.com/bytedance/sonic/internal/jit` `github.com/bytedance/sonic/internal/native` `github.com/bytedance/sonic/internal/native/types` `github.com/twitchyliquid64/golang-asm/obj` - `github.com/twitchyliquid64/golang-asm/obj/x86` ) /** Crucial Registers: @@ -286,7 +283,7 @@ func (self *_ValueDecoder) compile() { self.Emit("LEAQ", _VAR_ss, _CX) // LEAQ ss, CX self.Emit("MOVQ", _VAR_df, _R8) // MOVQ $df, R8 self.Emit("BTSQ", jit.Imm(_F_allow_control), _R8) // ANDQ $1<<_F_allow_control, R8 - self.callc(_F_value) // CALL value + self.callc(_F_value) // CALL value self.Emit("MOVQ", _AX, _IC) // MOVQ AX, IC /* check for errors */ @@ -720,46 +717,6 @@ func (self *_ValueDecoder) compile() { } } -func (self *_ValueDecoder) WritePtrAX(i int, rec obj.Addr, saveDI bool) { - self.Emit("MOVQ", _V_writeBarrier, _R9) - self.Emit("CMPL", jit.Ptr(_R9, 0), jit.Imm(0)) - self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - if saveDI { - self.save(_DI) - } - self.Emit("LEAQ", rec, _DI) - self.call(_F_gcWriteBarrierAX) - if saveDI { - self.load(_DI) - } - self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", _AX, rec) - self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") -} - -func (self *_ValueDecoder) WriteRecNotAX(i int, ptr obj.Addr, rec obj.Addr, saveDI bool) { - if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { - panic("rec contains AX!") - } - self.Emit("MOVQ", _V_writeBarrier, _AX) - self.Emit("CMPL", jit.Ptr(_AX, 0), jit.Imm(0)) - self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", ptr, _AX) - if saveDI { - self.save(_DI) - } - self.Emit("LEAQ", rec, _DI) - self.call(_F_gcWriteBarrierAX) - if saveDI { - self.load(_DI) - } - self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", ptr, rec) - self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") -} - /** Generic Decoder **/ var ( diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/generic_amd64_go117_test.s b/vendor/github.com/bytedance/sonic/internal/decoder/generic_regabi_amd64_test.s similarity index 97% rename from vendor/github.com/bytedance/sonic/internal/decoder/generic_amd64_go117_test.s rename to vendor/github.com/bytedance/sonic/internal/decoder/generic_regabi_amd64_test.s index 6c2686de9a..1c46928de5 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/generic_amd64_go117_test.s +++ b/vendor/github.com/bytedance/sonic/internal/decoder/generic_regabi_amd64_test.s @@ -1,4 +1,4 @@ -// +build go1.17,!go1.21 +// +build go1.17,!go1.22 // // Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/generic_amd64_go116.go b/vendor/github.com/bytedance/sonic/internal/decoder/generic_stkabi_amd64.go similarity index 95% rename from vendor/github.com/bytedance/sonic/internal/decoder/generic_amd64_go116.go rename to vendor/github.com/bytedance/sonic/internal/decoder/generic_stkabi_amd64.go index b597043f9d..8ce5c2926f 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/generic_amd64_go116.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/generic_stkabi_amd64.go @@ -1,4 +1,4 @@ -// +build go1.15,!go1.17 +// +build go1.16,!go1.17 /* * Copyright 2021 ByteDance Inc. @@ -22,13 +22,11 @@ import ( `encoding/json` `fmt` `reflect` - `strconv` `github.com/bytedance/sonic/internal/jit` `github.com/bytedance/sonic/internal/native` `github.com/bytedance/sonic/internal/native/types` `github.com/twitchyliquid64/golang-asm/obj` - `github.com/twitchyliquid64/golang-asm/obj/x86` ) /** Crucial Registers: @@ -645,7 +643,8 @@ func (self *_ValueDecoder) compile() { self.Emit("MOVQ", _R8, _VAR_cs_p) self.Emit("MOVQ", _AX, _VAR_cs_n) self.Emit("MOVQ", _DI, _VAR_cs_LR) - self.Emit("MOVQ", _T_byte, jit.Ptr(_SP, 0)) + self.Emit("MOVQ", _T_byte, _R8) + self.Emit("MOVQ", _R8, jit.Ptr(_SP, 0)) self.Emit("MOVQ", _AX, jit.Ptr(_SP, 8)) self.Emit("MOVQ", _AX, jit.Ptr(_SP, 16)) self.call_go(_F_makeslice) @@ -722,48 +721,6 @@ func (self *_ValueDecoder) compile() { } } -func (self *_ValueDecoder) WritePtrAX(i int, rec obj.Addr, saveDI bool) { - self.Emit("MOVQ", _V_writeBarrier, _R10) - self.Emit("CMPL", jit.Ptr(_R10, 0), jit.Imm(0)) - self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - if saveDI { - self.save(_DI) - } - self.Emit("LEAQ", rec, _DI) - self.Emit("MOVQ", _F_gcWriteBarrierAX, _R10) // MOVQ ${fn}, AX - self.Rjmp("CALL", _R10) - if saveDI { - self.load(_DI) - } - self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", _AX, rec) - self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") -} - -func (self *_ValueDecoder) WriteRecNotAX(i int, ptr obj.Addr, rec obj.Addr, saveDI bool) { - if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { - panic("rec contains AX!") - } - self.Emit("MOVQ", _V_writeBarrier, _R10) - self.Emit("CMPL", jit.Ptr(_R10, 0), jit.Imm(0)) - self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", ptr, _AX) - if saveDI { - self.save(_DI) - } - self.Emit("LEAQ", rec, _DI) - self.Emit("MOVQ", _F_gcWriteBarrierAX, _R10) // MOVQ ${fn}, AX - self.Rjmp("CALL", _R10) - if saveDI { - self.load(_DI) - } - self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", ptr, rec) - self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") -} - /** Generic Decoder **/ var ( diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/generic_amd64_test.s b/vendor/github.com/bytedance/sonic/internal/decoder/generic_stkabi_amd64_test.s similarity index 97% rename from vendor/github.com/bytedance/sonic/internal/decoder/generic_amd64_test.s rename to vendor/github.com/bytedance/sonic/internal/decoder/generic_stkabi_amd64_test.s index 36cb1f5f39..4e509c2f8e 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/generic_amd64_test.s +++ b/vendor/github.com/bytedance/sonic/internal/decoder/generic_stkabi_amd64_test.s @@ -1,4 +1,4 @@ -// +build go1.15,!go1.17 +// +build go1.16,!go1.17 // // Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/pools.go b/vendor/github.com/bytedance/sonic/internal/decoder/pools.go index 06adc7fa14..bcd14cc64c 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/pools.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/pools.go @@ -29,7 +29,7 @@ const ( _MinSlice = 2 _MaxStack = 4096 // 4k slots _MaxStackBytes = _MaxStack * _PtrBytes - _MaxDigitNums = 800 // used in atof fallback algorithm + _MaxDigitNums = types.MaxDigitNums // used in atof fallback algorithm ) const ( @@ -140,4 +140,4 @@ func findOrCompile(vt *rt.GoType) (_Decoder, error) { } else { return nil, err } -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/stream.go b/vendor/github.com/bytedance/sonic/internal/decoder/stream.go index e1e0f73b96..a3716435af 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/stream.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/stream.go @@ -21,8 +21,9 @@ import ( `io` `sync` - `github.com/bytedance/sonic/option` + `github.com/bytedance/sonic/internal/native` `github.com/bytedance/sonic/internal/native/types` + `github.com/bytedance/sonic/option` ) var ( @@ -71,6 +72,7 @@ func (self *StreamDecoder) Decode(val interface{}) (err error) { var first = true var repeat = true + read_more: for { l := len(buf) @@ -97,11 +99,20 @@ read_more: l := len(buf) if l > 0 { self.Decoder.Reset(string(buf)) - err = self.Decoder.Decode(val) - if err != nil { - if repeat && self.repeatable(err) { + + var x int + if ret := native.SkipOneFast(&self.s, &x); ret < 0 { + if repeat { goto read_more + } else { + err = SyntaxError{x, self.s, types.ParsingError(-ret), ""} + self.err = err + return } + } + + err = self.Decoder.Decode(val) + if err != nil { self.err = err } diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/stubs_go115.go b/vendor/github.com/bytedance/sonic/internal/decoder/stubs_go116.go similarity index 99% rename from vendor/github.com/bytedance/sonic/internal/decoder/stubs_go115.go rename to vendor/github.com/bytedance/sonic/internal/decoder/stubs_go116.go index 1a0917c3c3..c6e133d8cb 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/stubs_go115.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/stubs_go116.go @@ -1,4 +1,4 @@ -// +build go1.15,!go1.20 +// +build go1.16,!go1.20 /* * Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/stubs_go120.go b/vendor/github.com/bytedance/sonic/internal/decoder/stubs_go120.go index cde6a19728..73960ea142 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/stubs_go120.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/stubs_go120.go @@ -82,23 +82,23 @@ func makemap_small() unsafe.Pointer //go:linkname mapassign runtime.mapassign //goland:noinspection GoUnusedParameter -func mapassign(t *rt.GoType, h unsafe.Pointer, k unsafe.Pointer) unsafe.Pointer +func mapassign(t *rt.GoMapType, h unsafe.Pointer, k unsafe.Pointer) unsafe.Pointer //go:linkname mapassign_fast32 runtime.mapassign_fast32 //goland:noinspection GoUnusedParameter -func mapassign_fast32(t *rt.GoType, h unsafe.Pointer, k uint32) unsafe.Pointer +func mapassign_fast32(t *rt.GoMapType, h unsafe.Pointer, k uint32) unsafe.Pointer //go:linkname mapassign_fast64 runtime.mapassign_fast64 //goland:noinspection GoUnusedParameter -func mapassign_fast64(t *rt.GoType, h unsafe.Pointer, k uint64) unsafe.Pointer +func mapassign_fast64(t *rt.GoMapType, h unsafe.Pointer, k uint64) unsafe.Pointer //go:linkname mapassign_fast64ptr runtime.mapassign_fast64ptr //goland:noinspection GoUnusedParameter -func mapassign_fast64ptr(t *rt.GoType, h unsafe.Pointer, k unsafe.Pointer) unsafe.Pointer +func mapassign_fast64ptr(t *rt.GoMapType, h unsafe.Pointer, k unsafe.Pointer) unsafe.Pointer //go:linkname mapassign_faststr runtime.mapassign_faststr //goland:noinspection GoUnusedParameter -func mapassign_faststr(t *rt.GoType, h unsafe.Pointer, s string) unsafe.Pointer +func mapassign_faststr(t *rt.GoMapType, h unsafe.Pointer, s string) unsafe.Pointer //go:nosplit //go:linkname memclrHasPointers runtime.memclrHasPointers @@ -108,4 +108,4 @@ func memclrHasPointers(ptr unsafe.Pointer, n uintptr) //go:noescape //go:linkname memclrNoHeapPointers runtime.memclrNoHeapPointers //goland:noinspection GoUnusedParameter -func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr) \ No newline at end of file +func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr) diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/asm_stubs_amd64_go116.go b/vendor/github.com/bytedance/sonic/internal/encoder/asm_stubs_amd64_go116.go new file mode 100644 index 0000000000..0a99f30abf --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/encoder/asm_stubs_amd64_go116.go @@ -0,0 +1,51 @@ +// +build go1.16,!go1.17 + +// Copyright 2023 CloudWeGo Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package encoder + +import ( + `strconv` + + `github.com/bytedance/sonic/internal/jit` + `github.com/twitchyliquid64/golang-asm/obj` + `github.com/twitchyliquid64/golang-asm/obj/x86` +) + +var ( + _V_writeBarrier = jit.Imm(int64(_runtime_writeBarrier)) + + _F_gcWriteBarrierAX = jit.Func(gcWriteBarrierAX) +) + +func (self *_Assembler) WritePtr(i int, ptr obj.Addr, rec obj.Addr) { + if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { + panic("rec contains AX!") + } + self.Emit("MOVQ", _V_writeBarrier, _R10) + self.Emit("CMPL", jit.Ptr(_R10, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", ptr, _AX) + self.xsave(_DI) + self.Emit("LEAQ", rec, _DI) + self.Emit("MOVQ", _F_gcWriteBarrierAX, _R10) // MOVQ ${fn}, AX + self.Rjmp("CALL", _R10) + self.xload(_DI) + self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", ptr, rec) + self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") +} + diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/asm_stubs_amd64_go117.go b/vendor/github.com/bytedance/sonic/internal/encoder/asm_stubs_amd64_go117.go new file mode 100644 index 0000000000..5a3cf1a60c --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/encoder/asm_stubs_amd64_go117.go @@ -0,0 +1,51 @@ +// +build go1.17,!go1.21 + +// Copyright 2023 CloudWeGo Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package encoder + +import ( + `strconv` + `unsafe` + + `github.com/bytedance/sonic/internal/jit` + `github.com/twitchyliquid64/golang-asm/obj` + `github.com/twitchyliquid64/golang-asm/obj/x86` +) + +var ( + _V_writeBarrier = jit.Imm(int64(uintptr(unsafe.Pointer(&_runtime_writeBarrier)))) + + _F_gcWriteBarrierAX = jit.Func(gcWriteBarrierAX) +) + +func (self *_Assembler) WritePtr(i int, ptr obj.Addr, rec obj.Addr) { + if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { + panic("rec contains AX!") + } + self.Emit("MOVQ", _V_writeBarrier, _BX) + self.Emit("CMPL", jit.Ptr(_BX, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.xsave(_DI) + self.Emit("MOVQ", ptr, _AX) + self.Emit("LEAQ", rec, _DI) + self.Emit("MOVQ", _F_gcWriteBarrierAX, _BX) // MOVQ ${fn}, AX + self.Rjmp("CALL", _BX) + self.xload(_DI) + self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", ptr, rec) + self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") +} diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/asm_stubs_amd64_go121.go b/vendor/github.com/bytedance/sonic/internal/encoder/asm_stubs_amd64_go121.go new file mode 100644 index 0000000000..2f9445ac49 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/encoder/asm_stubs_amd64_go121.go @@ -0,0 +1,50 @@ +// +build go1.21,!go1.22 + +// Copyright 2023 CloudWeGo Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package encoder + +import ( + `strconv` + `unsafe` + + `github.com/bytedance/sonic/internal/jit` + `github.com/twitchyliquid64/golang-asm/obj` + `github.com/twitchyliquid64/golang-asm/obj/x86` +) + +var ( + _V_writeBarrier = jit.Imm(int64(uintptr(unsafe.Pointer(&_runtime_writeBarrier)))) + + _F_gcWriteBarrier2 = jit.Func(gcWriteBarrier2) +) + +func (self *_Assembler) WritePtr(i int, ptr obj.Addr, old obj.Addr) { + if old.Reg == x86.REG_AX || old.Index == x86.REG_AX { + panic("rec contains AX!") + } + self.Emit("MOVQ", _V_writeBarrier, _BX) + self.Emit("CMPL", jit.Ptr(_BX, 0), jit.Imm(0)) + self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.xsave(_SP_q) + self.Emit("MOVQ", _F_gcWriteBarrier2, _BX) // MOVQ ${fn}, AX + self.Rjmp("CALL", _BX) + self.Emit("MOVQ", ptr, jit.Ptr(_SP_q, 0)) + self.Emit("MOVQ", old, _AX) + self.Emit("MOVQ", _AX, jit.Ptr(_SP_q, 8)) + self.xload(_SP_q) + self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") + self.Emit("MOVQ", ptr, old) +} diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/assembler_amd64_go117.go b/vendor/github.com/bytedance/sonic/internal/encoder/assembler_regabi_amd64.go similarity index 97% rename from vendor/github.com/bytedance/sonic/internal/encoder/assembler_amd64_go117.go rename to vendor/github.com/bytedance/sonic/internal/encoder/assembler_regabi_amd64.go index 1f1b28073e..a89364b141 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/assembler_amd64_go117.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/assembler_regabi_amd64.go @@ -1,5 +1,5 @@ -//go:build go1.17 && !go1.21 -// +build go1.17,!go1.21 +//go:build go1.17 && !go1.22 +// +build go1.17,!go1.22 /* * Copyright 2021 ByteDance Inc. @@ -435,8 +435,8 @@ func (self *_Assembler) save_state() { self.Sjmp("JAE" , _LB_error_too_deep) // JA _error_too_deep self.Emit("MOVQ", _SP_x, jit.Sib(_ST, _CX, 1, 8)) // MOVQ SP.x, 8(ST)(CX) self.Emit("MOVQ", _SP_f, jit.Sib(_ST, _CX, 1, 16)) // MOVQ SP.f, 16(ST)(CX) - self.WriteRecNotAX(0, _SP_p, jit.Sib(_ST, _CX, 1, 24)) // MOVQ SP.p, 24(ST)(CX) - self.WriteRecNotAX(1, _SP_q, jit.Sib(_ST, _CX, 1, 32)) // MOVQ SP.q, 32(ST)(CX) + self.WritePtr(0, _SP_p, jit.Sib(_ST, _CX, 1, 24)) // MOVQ SP.p, 24(ST)(CX) + self.WritePtr(1, _SP_q, jit.Sib(_ST, _CX, 1, 32)) // MOVQ SP.q, 32(ST)(CX) self.Emit("MOVQ", _R9, jit.Ptr(_ST, 0)) // MOVQ R9, (ST) } @@ -1175,28 +1175,3 @@ func (self *_Assembler) print_gc(i int, p1 *_Instr, p2 *_Instr) { self.Emit("MOVQ", jit.Imm(int64(i)), _AX) // MOVQ $(i), CX self.call_go(_F_println) } - -var ( - _V_writeBarrier = jit.Imm(int64(uintptr(unsafe.Pointer(&_runtime_writeBarrier)))) - - _F_gcWriteBarrierAX = jit.Func(gcWriteBarrierAX) -) - -func (self *_Assembler) WriteRecNotAX(i int, ptr obj.Addr, rec obj.Addr) { - if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { - panic("rec contains AX!") - } - self.Emit("MOVQ", _V_writeBarrier, _BX) - self.Emit("CMPL", jit.Ptr(_BX, 0), jit.Imm(0)) - self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.xsave(_DI) - self.Emit("MOVQ", ptr, _AX) - self.Emit("LEAQ", rec, _DI) - self.Emit("MOVQ", _F_gcWriteBarrierAX, _BX) // MOVQ ${fn}, AX - self.Rjmp("CALL", _BX) - self.xload(_DI) - self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", ptr, rec) - self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") -} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/assembler_amd64_go116.go b/vendor/github.com/bytedance/sonic/internal/encoder/assembler_stkabi_amd64.go similarity index 97% rename from vendor/github.com/bytedance/sonic/internal/encoder/assembler_amd64_go116.go rename to vendor/github.com/bytedance/sonic/internal/encoder/assembler_stkabi_amd64.go index d056259f2b..89dafc84ee 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/assembler_amd64_go116.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/assembler_stkabi_amd64.go @@ -1,4 +1,4 @@ -// +build go1.15,!go1.17 +// +build go1.16,!go1.17 /* * Copyright 2021 ByteDance Inc. @@ -421,8 +421,8 @@ func (self *_Assembler) save_state() { self.Sjmp("JAE" , _LB_error_too_deep) // JA _error_too_deep self.Emit("MOVQ", _SP_x, jit.Sib(_ST, _CX, 1, 8)) // MOVQ SP.x, 8(ST)(CX) self.Emit("MOVQ", _SP_f, jit.Sib(_ST, _CX, 1, 16)) // MOVQ SP.f, 16(ST)(CX) - self.WriteRecNotAX(0, _SP_p, jit.Sib(_ST, _CX, 1, 24)) // MOVQ SP.p, 24(ST)(CX) - self.WriteRecNotAX(1, _SP_q, jit.Sib(_ST, _CX, 1, 32)) // MOVQ SP.q, 32(ST)(CX) + self.WritePtr(0, _SP_p, jit.Sib(_ST, _CX, 1, 24)) // MOVQ SP.p, 24(ST)(CX) + self.WritePtr(1, _SP_q, jit.Sib(_ST, _CX, 1, 32)) // MOVQ SP.q, 32(ST)(CX) self.Emit("MOVQ", _R8, jit.Ptr(_ST, 0)) // MOVQ R8, (ST) } @@ -579,7 +579,8 @@ var ( func (self *_Assembler) more_space() { self.Link(_LB_more_space) - self.Emit("MOVQ", _T_byte, jit.Ptr(_SP, 0)) // MOVQ $_T_byte, (SP) + self.Emit("MOVQ", _T_byte, _AX) // MOVQ $_T_byte, _AX + self.Emit("MOVQ", _AX, jit.Ptr(_SP, 0)) // MOVQ _AX, (SP) self.Emit("MOVQ", _RP, jit.Ptr(_SP, 8)) // MOVQ RP, 8(SP) self.Emit("MOVQ", _RL, jit.Ptr(_SP, 16)) // MOVQ RL, 16(SP) self.Emit("MOVQ", _RC, jit.Ptr(_SP, 24)) // MOVQ RC, 24(SP) @@ -1172,28 +1173,3 @@ func (self *_Assembler) print_gc(i int, p1 *_Instr, p2 *_Instr) { self.Emit("MOVQ", jit.Imm(int64(i)), jit.Ptr(_SP, 0)) // MOVQ $(i), (SP) self.call_go(_F_println) } - -var ( - _V_writeBarrier = jit.Imm(int64(_runtime_writeBarrier)) - - _F_gcWriteBarrierAX = jit.Func(gcWriteBarrierAX) -) - -func (self *_Assembler) WriteRecNotAX(i int, ptr obj.Addr, rec obj.Addr) { - if rec.Reg == x86.REG_AX || rec.Index == x86.REG_AX { - panic("rec contains AX!") - } - self.Emit("MOVQ", _V_writeBarrier, _R10) - self.Emit("CMPL", jit.Ptr(_R10, 0), jit.Imm(0)) - self.Sjmp("JE", "_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", ptr, _AX) - self.xsave(_DI) - self.Emit("LEAQ", rec, _DI) - self.Emit("MOVQ", _F_gcWriteBarrierAX, _R10) // MOVQ ${fn}, AX - self.Rjmp("CALL", _R10) - self.xload(_DI) - self.Sjmp("JMP", "_end_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Link("_no_writeBarrier" + strconv.Itoa(i) + "_{n}") - self.Emit("MOVQ", ptr, rec) - self.Link("_end_writeBarrier" + strconv.Itoa(i) + "_{n}") -} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/debug_go116.go b/vendor/github.com/bytedance/sonic/internal/encoder/debug_go116.go index 4bc9c15c1d..d8d0c45cc7 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/debug_go116.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/debug_go116.go @@ -1,4 +1,4 @@ -// +build go1.15,!go1.17 +// +build go1.16,!go1.17 /* * Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/debug_go117.go b/vendor/github.com/bytedance/sonic/internal/encoder/debug_go117.go index e1016de323..56a6cbf5e4 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/debug_go117.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/debug_go117.go @@ -1,4 +1,4 @@ -// +build go1.17,!go1.21 +// +build go1.17,!go1.22 /* * Copyright 2021 ByteDance Inc. @@ -202,4 +202,4 @@ func (self *_Assembler) print_ptr(i int, ptr obj.Addr, lea bool) { self.Emit("MOVQ", _R10, _BX) self.dcall(_F_printptr) self.dload(_REG_debug...) -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/encoder.go b/vendor/github.com/bytedance/sonic/internal/encoder/encoder.go index 3c46061a48..757e73ff0f 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/encoder.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/encoder.go @@ -292,7 +292,6 @@ func Pretouch(vt reflect.Type, opts ...option.CompileOption) error { cfg := option.DefaultCompileOptions() for _, opt := range opts { opt(&cfg) - break } return pretouchRec(map[reflect.Type]uint8{vt: 0}, cfg) } @@ -325,4 +324,4 @@ func Valid(data []byte) (ok bool, start int) { } return true, ret -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/errors.go b/vendor/github.com/bytedance/sonic/internal/encoder/errors.go index ac6848a5b7..6e9d0c783a 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/errors.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/errors.go @@ -62,4 +62,4 @@ func goPanic(code int, val unsafe.Pointer) { default: panic("encoder error!") } -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/pools.go b/vendor/github.com/bytedance/sonic/internal/encoder/pools.go index 9892ba11b8..a2800ddefd 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/pools.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/pools.go @@ -190,4 +190,4 @@ func pretouchRec(vtm map[reflect.Type]uint8, opts option.CompileOptions) error { } opts.RecursiveDepth -= 1 return pretouchRec(next, opts) -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/primitives.go b/vendor/github.com/bytedance/sonic/internal/encoder/primitives.go index 78fb29ff63..318038967c 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/primitives.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/primitives.go @@ -165,4 +165,4 @@ func asJson(v unsafe.Pointer) (string, error) { text := assertI2I(_T_json_Marshaler, *(*rt.GoIface)(v)) r, e := (*(*json.Marshaler)(unsafe.Pointer(&text))).MarshalJSON() return rt.Mem2Str(r), e -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/stream.go b/vendor/github.com/bytedance/sonic/internal/encoder/stream.go index 8f73a2bf07..b6f3ce5fb7 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/stream.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/stream.go @@ -81,4 +81,4 @@ func (enc *StreamEncoder) Encode(val interface{}) (err error) { free_bytes: freeBytes(out) return err -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/stubs_go116.go b/vendor/github.com/bytedance/sonic/internal/encoder/stubs_go116.go index 40d06f4afb..5577c58d7c 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/stubs_go116.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/stubs_go116.go @@ -1,4 +1,4 @@ -// +build go1.15,!go1.17 +// +build go1.16,!go1.17 /* * Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/stubs_go120.go b/vendor/github.com/bytedance/sonic/internal/encoder/stubs_go120.go index f1a7d10c72..94a2c0f561 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/stubs_go120.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/stubs_go120.go @@ -1,4 +1,4 @@ -// +build go1.20 +// +build go1.20,!go1.21 /* * Copyright 2021 ByteDance Inc. @@ -63,4 +63,4 @@ func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr) var _runtime_writeBarrier uintptr //go:linkname gcWriteBarrierAX runtime.gcWriteBarrier -func gcWriteBarrierAX() \ No newline at end of file +func gcWriteBarrierAX() diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/stubs_go121.go b/vendor/github.com/bytedance/sonic/internal/encoder/stubs_go121.go new file mode 100644 index 0000000000..e194fbbf31 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/encoder/stubs_go121.go @@ -0,0 +1,66 @@ +// +build go1.21 + +/* + * Copyright 2021 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package encoder + +import ( + `unsafe` + + _ `github.com/chenzhuoyu/base64x` + + `github.com/bytedance/sonic/internal/rt` +) + +//go:linkname _subr__b64encode github.com/chenzhuoyu/base64x._subr__b64encode +var _subr__b64encode uintptr + +//go:noescape +//go:linkname memmove runtime.memmove +//goland:noinspection GoUnusedParameter +func memmove(to unsafe.Pointer, from unsafe.Pointer, n uintptr) + +//go:linkname growslice reflect.growslice +//goland:noinspection GoUnusedParameter +func growslice(et *rt.GoType, old rt.GoSlice, cap int) rt.GoSlice + +//go:linkname assertI2I runtime.assertI2I2 +//goland:noinspection GoUnusedParameter +func assertI2I(inter *rt.GoType, i rt.GoIface) rt.GoIface + +//go:linkname mapiternext runtime.mapiternext +//goland:noinspection GoUnusedParameter +func mapiternext(it *rt.GoMapIterator) + +//go:linkname mapiterinit runtime.mapiterinit +//goland:noinspection GoUnusedParameter +func mapiterinit(t *rt.GoMapType, m *rt.GoMap, it *rt.GoMapIterator) + +//go:linkname isValidNumber encoding/json.isValidNumber +//goland:noinspection GoUnusedParameter +func isValidNumber(s string) bool + +//go:noescape +//go:linkname memclrNoHeapPointers runtime.memclrNoHeapPointers +//goland:noinspection GoUnusedParameter +func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr) + +//go:linkname _runtime_writeBarrier runtime.writeBarrier +var _runtime_writeBarrier uintptr + +//go:linkname gcWriteBarrier2 runtime.gcWriteBarrier2 +func gcWriteBarrier2() diff --git a/vendor/github.com/bytedance/sonic/internal/loader/funcdata.go b/vendor/github.com/bytedance/sonic/internal/loader/funcdata.go deleted file mode 100644 index 59a3cb349e..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/loader/funcdata.go +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2021 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package loader - -import ( - `reflect` - `sync` - `unsafe` - - `github.com/bytedance/sonic/internal/rt` -) - -//go:linkname lastmoduledatap runtime.lastmoduledatap -//goland:noinspection GoUnusedGlobalVariable -var lastmoduledatap *_ModuleData - -//go:linkname moduledataverify1 runtime.moduledataverify1 -func moduledataverify1(_ *_ModuleData) - -// PCDATA and FUNCDATA table indexes. -// -// See funcdata.h and $GROOT/src/cmd/internal/objabi/funcdata.go. -const ( - _FUNCDATA_ArgsPointerMaps = 0 - _FUNCDATA_LocalsPointerMaps = 1 -) - -type funcInfo struct { - *_Func - datap *_ModuleData -} - -//go:linkname findfunc runtime.findfunc -func findfunc(pc uintptr) funcInfo - -//go:linkname funcdata runtime.funcdata -func funcdata(f funcInfo, i uint8) unsafe.Pointer - -var ( - modLock sync.Mutex - modList []*_ModuleData -) - -var emptyByte byte - -func encodeVariant(v int) []byte { - var u int - var r []byte - - /* split every 7 bits */ - for v > 127 { - u = v & 0x7f - v = v >> 7 - r = append(r, byte(u) | 0x80) - } - - /* check for last one */ - if v == 0 { - return r - } - - /* add the last one */ - r = append(r, byte(v)) - return r -} - -func registerModule(mod *_ModuleData) { - modLock.Lock() - modList = append(modList, mod) - lastmoduledatap.next = mod - lastmoduledatap = mod - modLock.Unlock() -} - -func stackMap(f interface{}) (args uintptr, locals uintptr) { - fv := reflect.ValueOf(f) - if fv.Kind() != reflect.Func { - panic("f must be reflect.Func kind!") - } - fi := findfunc(fv.Pointer()) - return uintptr(funcdata(fi, uint8(_FUNCDATA_ArgsPointerMaps))), uintptr(funcdata(fi, uint8(_FUNCDATA_LocalsPointerMaps))) -} - -var moduleCache = struct{ - m map[*_ModuleData][]byte - l sync.Mutex -}{ - m : make(map[*_ModuleData][]byte), -} - -func cacheStackmap(argPtrs []bool, localPtrs []bool, mod *_ModuleData) (argptrs uintptr, localptrs uintptr) { - as := rt.StackMapBuilder{} - for _, b := range argPtrs { - as.AddField(b) - } - ab, _ := as.Build().MarshalBinary() - ls := rt.StackMapBuilder{} - for _, b := range localPtrs { - ls.AddField(b) - } - lb, _ := ls.Build().MarshalBinary() - cache := make([]byte, len(ab) + len(lb)) - copy(cache, ab) - copy(cache[len(ab):], lb) - moduleCache.l.Lock() - moduleCache.m[mod] = cache - moduleCache.l.Unlock() - return uintptr(rt.IndexByte(cache, 0)), uintptr(rt.IndexByte(cache, len(ab))) - -} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/loader/funcdata_go115.go b/vendor/github.com/bytedance/sonic/internal/loader/funcdata_go115.go deleted file mode 100644 index b0d2d6c650..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/loader/funcdata_go115.go +++ /dev/null @@ -1,169 +0,0 @@ -// +build go1.15,!go1.16 - -/* - * Copyright 2021 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package loader - -import ( - `unsafe` - - `github.com/bytedance/sonic/internal/rt` -) - -type _Func struct { - entry uintptr // start pc - nameoff int32 // function name - args int32 // in/out args size - deferreturn uint32 // offset of start of a deferreturn call instruction from entry, if any. - pcsp int32 - pcfile int32 - pcln int32 - npcdata int32 - funcID uint8 // set for certain special runtime functions - _ [2]int8 // unused - nfuncdata uint8 // must be last - argptrs uintptr - localptrs uintptr -} - -type _FuncTab struct { - entry uintptr - funcoff uintptr -} - -type _BitVector struct { - n int32 // # of bits - bytedata *uint8 -} - -type _PtabEntry struct { - name int32 - typ int32 -} - -type _TextSection struct { - vaddr uintptr // prelinked section vaddr - length uintptr // section length - baseaddr uintptr // relocated section address -} - -type _ModuleData struct { - pclntable []byte - ftab []_FuncTab - filetab []uint32 - findfunctab *_FindFuncBucket - minpc, maxpc uintptr - text, etext uintptr - noptrdata, enoptrdata uintptr - data, edata uintptr - bss, ebss uintptr - noptrbss, enoptrbss uintptr - end, gcdata, gcbss uintptr - types, etypes uintptr - textsectmap []_TextSection - typelinks []int32 // offsets from types - itablinks []*rt.GoItab - ptab []_PtabEntry - pluginpath string - pkghashes []byte - modulename string - modulehashes []byte - hasmain uint8 // 1 if module contains the main function, 0 otherwise - gcdatamask, gcbssmask _BitVector - typemap map[int32]*rt.GoType // offset to *_rtype in previous module - bad bool // module failed to load and should be ignored - next *_ModuleData -} - -type _FindFuncBucket struct { - idx uint32 - subbuckets [16]byte -} - -var findFuncTab = &_FindFuncBucket { - idx: 1, -} - -func registerFunction(name string, pc uintptr, textSize uintptr, fp int, args int, size uintptr, argPtrs []bool, localPtrs []bool) { - mod := new(_ModuleData) - minpc := pc - maxpc := pc + size - - /* build the PC & line table */ - pclnt := []byte { - 0xfb, 0xff, 0xff, 0xff, // magic : 0xfffffffb - 0, // pad1 : 0 - 0, // pad2 : 0 - 1, // minLC : 1 - 4 << (^uintptr(0) >> 63), // ptrSize : 4 << (^uintptr(0) >> 63) - } - - // cache arg and local stackmap - argptrs, localptrs := cacheStackmap(argPtrs, localPtrs, mod) - - /* add the function name */ - noff := len(pclnt) - pclnt = append(append(pclnt, name...), 0) - - /* add PCDATA */ - pcsp := len(pclnt) - pclnt = append(pclnt, encodeVariant((fp + 1) << 1)...) - pclnt = append(pclnt, encodeVariant(int(size))...) - - /* function entry */ - fnv := _Func { - entry : pc, - nameoff : int32(noff), - args : int32(args), - pcsp : int32(pcsp), - nfuncdata : 2, - argptrs : uintptr(argptrs), - localptrs : uintptr(localptrs), - } - - /* align the func to 8 bytes */ - if p := len(pclnt) % 8; p != 0 { - pclnt = append(pclnt, make([]byte, 8 - p)...) - } - - /* add the function descriptor */ - foff := len(pclnt) - pclnt = append(pclnt, (*(*[unsafe.Sizeof(_Func{})]byte)(unsafe.Pointer(&fnv)))[:]...) - - /* function table */ - tab := []_FuncTab { - {entry: pc, funcoff: uintptr(foff)}, - {entry: pc, funcoff: uintptr(foff)}, - {entry: maxpc}, - } - - /* module data */ - *mod = _ModuleData { - pclntable : pclnt, - ftab : tab, - findfunctab : findFuncTab, - minpc : minpc, - maxpc : maxpc, - modulename : name, - gcdata: uintptr(unsafe.Pointer(&emptyByte)), - gcbss: uintptr(unsafe.Pointer(&emptyByte)), - } - - /* verify and register the new module */ - moduledataverify1(mod) - registerModule(mod) -} diff --git a/vendor/github.com/bytedance/sonic/internal/loader/funcdata_go116.go b/vendor/github.com/bytedance/sonic/internal/loader/funcdata_go116.go deleted file mode 100644 index f01747f93e..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/loader/funcdata_go116.go +++ /dev/null @@ -1,175 +0,0 @@ -//go:build go1.16 && !go1.18 -// +build go1.16,!go1.18 - -/* - * Copyright 2021 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package loader - -import ( - `unsafe` -) - -type _Func struct { - entry uintptr // start pc - nameoff int32 // function name - args int32 // in/out args size - deferreturn uint32 // offset of start of a deferreturn call instruction from entry, if any. - pcsp uint32 - pcfile uint32 - pcln uint32 - npcdata uint32 - cuOffset uint32 // runtime.cutab offset of this function's CU - funcID uint8 // set for certain special runtime functions - _ [2]byte // pad - nfuncdata uint8 // must be last - argptrs uintptr - localptrs uintptr -} - -type _FuncTab struct { - entry uintptr - funcoff uintptr -} - -type _PCHeader struct { - magic uint32 // 0xFFFFFFFA - pad1, pad2 uint8 // 0,0 - minLC uint8 // min instruction size - ptrSize uint8 // size of a ptr in bytes - nfunc int // number of functions in the module - nfiles uint // number of entries in the file tab. - funcnameOffset uintptr // offset to the funcnametab variable from _PCHeader - cuOffset uintptr // offset to the cutab variable from _PCHeader - filetabOffset uintptr // offset to the filetab variable from _PCHeader - pctabOffset uintptr // offset to the pctab varible from _PCHeader - pclnOffset uintptr // offset to the pclntab variable from _PCHeader -} - -type _BitVector struct { - n int32 // # of bits - bytedata *uint8 -} - -type _PtabEntry struct { - name int32 - typ int32 -} - -type _TextSection struct { - vaddr uintptr // prelinked section vaddr - length uintptr // section length - baseaddr uintptr // relocated section address -} - -type _ModuleData struct { - pcHeader *_PCHeader - funcnametab []byte - cutab []uint32 - filetab []byte - pctab []byte - pclntable []_Func - ftab []_FuncTab - findfunctab *_FindFuncBucket - minpc, maxpc uintptr - text, etext uintptr - noptrdata, enoptrdata uintptr - data, edata uintptr - bss, ebss uintptr - noptrbss, enoptrbss uintptr - end, gcdata, gcbss uintptr - types, etypes uintptr - textsectmap []_TextSection - typelinks []int32 - itablinks []unsafe.Pointer - ptab []_PtabEntry - pluginpath string - pkghashes []struct{} - modulename string - modulehashes []struct{} - hasmain uint8 - gcdatamask, gcbssmask _BitVector - typemap map[int32]unsafe.Pointer - bad bool - next *_ModuleData -} - -type _FindFuncBucket struct { - idx uint32 - subbuckets [16]byte -} - -var modHeader = &_PCHeader { - magic : 0xfffffffa, - minLC : 1, - nfunc : 1, - ptrSize : 4 << (^uintptr(0) >> 63), -} - -var findFuncTab = &_FindFuncBucket { - idx: 1, -} - -func makePCtab(fp int) []byte { - return append([]byte{0}, encodeVariant((fp + 1) << 1)...) -} - -func registerFunction(name string, pc uintptr, textSize uintptr, fp int, args int, size uintptr, argPtrs []bool, localPtrs []bool) { - mod := new(_ModuleData) - - minpc := pc - maxpc := pc + size - - // cache arg and local stackmap - argptrs, localptrs := cacheStackmap(argPtrs, localPtrs, mod) - - /* function entry */ - lnt := []_Func {{ - entry : pc, - nameoff : 1, - args : int32(args), - pcsp : 1, - nfuncdata : 2, - argptrs : uintptr(argptrs), - localptrs : uintptr(localptrs), - }} - - /* function table */ - tab := []_FuncTab { - {entry: pc}, - {entry: pc}, - {entry: maxpc}, - } - - /* module data */ - *mod = _ModuleData { - pcHeader : modHeader, - funcnametab : append(append([]byte{0}, name...), 0), - pctab : append(makePCtab(fp), encodeVariant(int(size))...), - pclntable : lnt, - ftab : tab, - findfunctab : findFuncTab, - minpc : minpc, - maxpc : maxpc, - modulename : name, - gcdata: uintptr(unsafe.Pointer(&emptyByte)), - gcbss: uintptr(unsafe.Pointer(&emptyByte)), - } - - /* verify and register the new module */ - moduledataverify1(mod) - registerModule(mod) -} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/loader/funcdata_go118.go b/vendor/github.com/bytedance/sonic/internal/loader/funcdata_go118.go deleted file mode 100644 index f1d585d979..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/loader/funcdata_go118.go +++ /dev/null @@ -1,201 +0,0 @@ -// +build go1.18,!go1.20 - -/* - * Copyright 2021 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package loader - -import ( - `unsafe` - - `github.com/bytedance/sonic/internal/rt` -) - -// A FuncFlag holds bits about a function. -// This list must match the list in cmd/internal/objabi/funcid.go. -type funcFlag uint8 - -type _Func struct { - entryOff uint32 // start pc - nameoff int32 // function name - args int32 // in/out args size - deferreturn uint32 // offset of start of a deferreturn call instruction from entry, if any. - pcsp uint32 - pcfile uint32 - pcln uint32 - npcdata uint32 - cuOffset uint32 // runtime.cutab offset of this function's CU - funcID uint8 // set for certain special runtime functions - flag funcFlag - _ [1]byte // pad - nfuncdata uint8 // must be last - argptrs uint32 - localptrs uint32 -} - -type _FuncTab struct { - entry uint32 - funcoff uint32 -} - -type _PCHeader struct { - magic uint32 // 0xFFFFFFF0 - pad1, pad2 uint8 // 0,0 - minLC uint8 // min instruction size - ptrSize uint8 // size of a ptr in bytes - nfunc int // number of functions in the module - nfiles uint // number of entries in the file tab - textStart uintptr // base for function entry PC offsets in this module, equal to moduledata.text - funcnameOffset uintptr // offset to the funcnametab variable from pcHeader - cuOffset uintptr // offset to the cutab variable from pcHeader - filetabOffset uintptr // offset to the filetab variable from pcHeader - pctabOffset uintptr // offset to the pctab variable from pcHeader - pclnOffset uintptr // offset to the pclntab variable from pcHeader -} - -type _BitVector struct { - n int32 // # of bits - bytedata *uint8 -} - -type _PtabEntry struct { - name int32 - typ int32 -} - -type _TextSection struct { - vaddr uintptr // prelinked section vaddr - length uintptr // section length - baseaddr uintptr // relocated section address -} - -type _ModuleData struct { - pcHeader *_PCHeader - funcnametab []byte - cutab []uint32 - filetab []byte - pctab []byte - pclntable []byte - ftab []_FuncTab - findfunctab *_FindFuncBucket - minpc, maxpc uintptr - text, etext uintptr - noptrdata, enoptrdata uintptr - data, edata uintptr - bss, ebss uintptr - noptrbss, enoptrbss uintptr - end, gcdata, gcbss uintptr - types, etypes uintptr - rodata uintptr - gofunc uintptr - textsectmap []_TextSection - typelinks []int32 - itablinks []unsafe.Pointer - ptab []_PtabEntry - pluginpath string - pkghashes []struct{} - modulename string - modulehashes []struct{} - hasmain uint8 - gcdatamask, gcbssmask _BitVector - typemap map[int32]unsafe.Pointer - bad bool - next *_ModuleData -} - - -type _FindFuncBucket struct { - idx uint32 - subbuckets [16]byte -} - - - -func makePCtab(fp int) []byte { - return append([]byte{0}, encodeVariant((fp + 1) << 1)...) -} - -func registerFunction(name string, pc uintptr, textSize uintptr, fp int, args int, size uintptr, argPtrs []bool, localPtrs []bool) { - mod := new(_ModuleData) - - minpc := pc - maxpc := pc + size - - findFuncTab := make([]_FindFuncBucket, textSize/4096 + 1) - - modHeader := &_PCHeader { - magic : 0xfffffff0, - minLC : 1, - nfunc : 1, - ptrSize : 4 << (^uintptr(0) >> 63), - textStart: minpc, - } - - // cache arg and local stackmap - argptrs, localptrs := cacheStackmap(argPtrs, localPtrs, mod) - - base := argptrs - if argptrs > localptrs { - base = localptrs - } - - /* function entry */ - lnt := []_Func {{ - entryOff : 0, - nameoff : 1, - args : int32(args), - pcsp : 1, - nfuncdata : 2, - argptrs: uint32(argptrs - base), - localptrs: uint32(localptrs - base), - }} - nlnt := len(lnt)*int(unsafe.Sizeof(_Func{})) - plnt := unsafe.Pointer(&lnt[0]) - - /* function table */ - ftab := []_FuncTab { - {entry : 0, funcoff : 16}, - {entry : uint32(size)}, - } - nftab := len(ftab)*int(unsafe.Sizeof(_FuncTab{})) - pftab := unsafe.Pointer(&ftab[0]) - - pclntab := make([]byte, 0, nftab + nlnt) - pclntab = append(pclntab, rt.BytesFrom(pftab, nftab, nftab)...) - pclntab = append(pclntab, rt.BytesFrom(plnt, nlnt, nlnt)...) - - /* module data */ - *mod = _ModuleData { - pcHeader : modHeader, - funcnametab : append(append([]byte{0}, name...), 0), - pctab : append(makePCtab(fp), encodeVariant(int(size))...), - pclntable : pclntab, - ftab : ftab, - text : minpc, - etext : pc + textSize, - findfunctab : &findFuncTab[0], - minpc : minpc, - maxpc : maxpc, - modulename : name, - gcdata: uintptr(unsafe.Pointer(&emptyByte)), - gcbss: uintptr(unsafe.Pointer(&emptyByte)), - gofunc: base, - } - - /* verify and register the new module */ - moduledataverify1(mod) - registerModule(mod) -} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/loader/funcdata_go120.go b/vendor/github.com/bytedance/sonic/internal/loader/funcdata_go120.go deleted file mode 100644 index c12f8a73c3..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/loader/funcdata_go120.go +++ /dev/null @@ -1,201 +0,0 @@ -// +build go1.20 - -/* - * Copyright 2021 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package loader - -import ( - `unsafe` - - `github.com/bytedance/sonic/internal/rt` -) - -// A FuncFlag holds bits about a function. -// This list must match the list in cmd/internal/objabi/funcid.go. -type funcFlag uint8 - -type _Func struct { - entryOff uint32 // start pc - nameoff int32 // function name - args int32 // in/out args size - deferreturn uint32 // offset of start of a deferreturn call instruction from entry, if any. - pcsp uint32 - pcfile uint32 - pcln uint32 - npcdata uint32 - cuOffset uint32 // runtime.cutab offset of this function's CU - funcID uint8 // set for certain special runtime functions - flag funcFlag - _ [1]byte // pad - nfuncdata uint8 // must be last - argptrs uint32 - localptrs uint32 -} - -type _FuncTab struct { - entry uint32 - funcoff uint32 -} - -type _PCHeader struct { - magic uint32 // 0xFFFFFFF0 - pad1, pad2 uint8 // 0,0 - minLC uint8 // min instruction size - ptrSize uint8 // size of a ptr in bytes - nfunc int // number of functions in the module - nfiles uint // number of entries in the file tab - textStart uintptr // base for function entry PC offsets in this module, equal to moduledata.text - funcnameOffset uintptr // offset to the funcnametab variable from pcHeader - cuOffset uintptr // offset to the cutab variable from pcHeader - filetabOffset uintptr // offset to the filetab variable from pcHeader - pctabOffset uintptr // offset to the pctab variable from pcHeader - pclnOffset uintptr // offset to the pclntab variable from pcHeader -} - -type _BitVector struct { - n int32 // # of bits - bytedata *uint8 -} - -type _PtabEntry struct { - name int32 - typ int32 -} - -type _TextSection struct { - vaddr uintptr // prelinked section vaddr - length uintptr // section length - baseaddr uintptr // relocated section address -} - -type _ModuleData struct { - pcHeader *_PCHeader - funcnametab []byte - cutab []uint32 - filetab []byte - pctab []byte - pclntable []byte - ftab []_FuncTab - findfunctab *_FindFuncBucket - minpc, maxpc uintptr - text, etext uintptr - noptrdata, enoptrdata uintptr - data, edata uintptr - bss, ebss uintptr - noptrbss, enoptrbss uintptr - end, gcdata, gcbss uintptr - types, etypes uintptr - rodata uintptr - gofunc uintptr - textsectmap []_TextSection - typelinks []int32 - itablinks []unsafe.Pointer - ptab []_PtabEntry - pluginpath string - pkghashes []struct{} - modulename string - modulehashes []struct{} - hasmain uint8 - gcdatamask, gcbssmask _BitVector - typemap map[int32]unsafe.Pointer - bad bool - next *_ModuleData -} - - -type _FindFuncBucket struct { - idx uint32 - subbuckets [16]byte -} - - - -func makePCtab(fp int) []byte { - return append([]byte{0}, encodeVariant((fp + 1) << 1)...) -} - -func registerFunction(name string, pc uintptr, textSize uintptr, fp int, args int, size uintptr, argPtrs []bool, localPtrs []bool) { - mod := new(_ModuleData) - - minpc := pc - maxpc := pc + size - - findFuncTab := make([]_FindFuncBucket, textSize/4096 + 1) - - modHeader := &_PCHeader { - magic : 0xfffffff0, - minLC : 1, - nfunc : 1, - ptrSize : 4 << (^uintptr(0) >> 63), - textStart: minpc, - } - - // cache arg and local stackmap - argptrs, localptrs := cacheStackmap(argPtrs, localPtrs, mod) - - base := argptrs - if argptrs > localptrs { - base = localptrs - } - - /* function entry */ - lnt := []_Func {{ - entryOff : 0, - nameoff : 1, - args : int32(args), - pcsp : 1, - nfuncdata : 2, - argptrs: uint32(argptrs - base), - localptrs: uint32(localptrs - base), - }} - nlnt := len(lnt)*int(unsafe.Sizeof(_Func{})) - plnt := unsafe.Pointer(&lnt[0]) - - /* function table */ - ftab := []_FuncTab { - {entry : 0, funcoff : 16}, - {entry : uint32(size)}, - } - nftab := len(ftab)*int(unsafe.Sizeof(_FuncTab{})) - pftab := unsafe.Pointer(&ftab[0]) - - pclntab := make([]byte, 0, nftab + nlnt) - pclntab = append(pclntab, rt.BytesFrom(pftab, nftab, nftab)...) - pclntab = append(pclntab, rt.BytesFrom(plnt, nlnt, nlnt)...) - - /* module data */ - *mod = _ModuleData { - pcHeader : modHeader, - funcnametab : append(append([]byte{0}, name...), 0), - pctab : append(makePCtab(fp), encodeVariant(int(size))...), - pclntable : pclntab, - ftab : ftab, - text : minpc, - etext : pc + textSize, - findfunctab : &findFuncTab[0], - minpc : minpc, - maxpc : maxpc, - modulename : name, - gcdata: uintptr(unsafe.Pointer(&emptyByte)), - gcbss: uintptr(unsafe.Pointer(&emptyByte)), - gofunc: base, - } - - /* verify and register the new module */ - moduledataverify1(mod) - registerModule(mod) -} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/loader/loader.go b/vendor/github.com/bytedance/sonic/internal/loader/loader.go deleted file mode 100644 index 6446a5f075..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/loader/loader.go +++ /dev/null @@ -1,74 +0,0 @@ -//go:build darwin || linux -// +build darwin linux - -/* - * Copyright 2021 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package loader - -import ( - `fmt` - `os` - `reflect` - `syscall` - `unsafe` -) - -const ( - _AP = syscall.MAP_ANON | syscall.MAP_PRIVATE - _RX = syscall.PROT_READ | syscall.PROT_EXEC - _RW = syscall.PROT_READ | syscall.PROT_WRITE -) - -type Loader []byte -type Function unsafe.Pointer - -func (self Loader) Load(fn string, fp int, args int, argPtrs []bool, localPtrs []bool) (f Function) { - p := os.Getpagesize() - n := (((len(self) - 1) / p) + 1) * p - - /* register the function */ - m := mmap(n) - v := fmt.Sprintf("runtime.__%s_%x", fn, m) - - registerFunction(v, m, uintptr(n), fp, args, uintptr(len(self)), argPtrs, localPtrs) - - /* reference as a slice */ - s := *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader { - Data : m, - Cap : n, - Len : len(self), - })) - - /* copy the machine code, and make it executable */ - copy(s, self) - mprotect(m, n) - return Function(&m) -} - -func mmap(nb int) uintptr { - if m, _, e := syscall.RawSyscall6(syscall.SYS_MMAP, 0, uintptr(nb), _RW, _AP, 0, 0); e != 0 { - panic(e) - } else { - return m - } -} - -func mprotect(p uintptr, nb int) { - if _, _, err := syscall.RawSyscall(syscall.SYS_MPROTECT, p, uintptr(nb), _RX); err != 0 { - panic(err) - } -} diff --git a/vendor/github.com/bytedance/sonic/internal/loader/loader_windows.go b/vendor/github.com/bytedance/sonic/internal/loader/loader_windows.go deleted file mode 100644 index 4053ee9bbf..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/loader/loader_windows.go +++ /dev/null @@ -1,111 +0,0 @@ -//go:build windows -// +build windows - -/* - * Copyright 2021 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package loader - -import ( - `fmt` - `os` - `reflect` - `syscall` - `unsafe` -) - -const ( - MEM_COMMIT = 0x00001000 - MEM_RESERVE = 0x00002000 -) - -var ( - libKernel32 = syscall.NewLazyDLL("KERNEL32.DLL") - libKernel32_VirtualAlloc = libKernel32.NewProc("VirtualAlloc") - libKernel32_VirtualProtect = libKernel32.NewProc("VirtualProtect") -) - -type Loader []byte -type Function unsafe.Pointer - -func (self Loader) Load(fn string, fp int, args int, argPtrs []bool, localPtrs []bool) (f Function) { - p := os.Getpagesize() - n := (((len(self) - 1) / p) + 1) * p - - /* register the function */ - m := mmap(n) - v := fmt.Sprintf("runtime.__%s_%x", fn, m) - - registerFunction(v, m, uintptr(n), fp, args, uintptr(len(self)), argPtrs, localPtrs) - - /* reference as a slice */ - s := *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader { - Data : m, - Cap : n, - Len : len(self), - })) - - /* copy the machine code, and make it executable */ - copy(s, self) - mprotect(m, n) - return Function(&m) -} - -func mmap(nb int) uintptr { - addr, err := winapi_VirtualAlloc(0, nb, MEM_COMMIT|MEM_RESERVE, syscall.PAGE_READWRITE) - if err != nil { - panic(err) - } - return addr -} - -func mprotect(p uintptr, nb int) (oldProtect int) { - err := winapi_VirtualProtect(p, nb, syscall.PAGE_EXECUTE_READ, &oldProtect) - if err != nil { - panic(err) - } - return -} - -// winapi_VirtualAlloc allocate memory -// Doc: https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc -func winapi_VirtualAlloc(lpAddr uintptr, dwSize int, flAllocationType int, flProtect int) (uintptr, error) { - r1, _, err := libKernel32_VirtualAlloc.Call( - lpAddr, - uintptr(dwSize), - uintptr(flAllocationType), - uintptr(flProtect), - ) - if r1 == 0 { - return 0, err - } - return r1, nil -} - -// winapi_VirtualProtect change memory protection -// Doc: https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualprotect -func winapi_VirtualProtect(lpAddr uintptr, dwSize int, flNewProtect int, lpflOldProtect *int) error { - r1, _, err := libKernel32_VirtualProtect.Call( - lpAddr, - uintptr(dwSize), - uintptr(flNewProtect), - uintptr(unsafe.Pointer(lpflOldProtect)), - ) - if r1 == 0 { - return err - } - return nil -} diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx/native_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx/native_amd64.go index d6a861068c..627ac177c9 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx/native_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx/native_amd64.go @@ -1,5 +1,7 @@ // Code generated by Makefile, DO NOT EDIT. +// Code generated by Makefile, DO NOT EDIT. + /* * Copyright 2021 ByteDance Inc. * @@ -22,114 +24,168 @@ import ( `unsafe` `github.com/bytedance/sonic/internal/native/types` + `github.com/bytedance/sonic/internal/rt` +) + +var ( + __i64toa func(out unsafe.Pointer, val int64) (ret int) + + __u64toa func(out unsafe.Pointer, val uint64) (ret int) + + __f64toa func(out unsafe.Pointer, val float64) (ret int) + + __f32toa func(out unsafe.Pointer, val float32) (ret int) + + __lspace func(sp unsafe.Pointer, nb int, off int) (ret int) + + __quote func(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn unsafe.Pointer, flags uint64) (ret int) + + __html_escape func(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn unsafe.Pointer) (ret int) + + __unquote func(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep unsafe.Pointer, flags uint64) (ret int) + + __value func(s unsafe.Pointer, n int, p int, v unsafe.Pointer, flags uint64) (ret int) + + __vstring func(s unsafe.Pointer, p unsafe.Pointer, v unsafe.Pointer, flags uint64) + + __vnumber func(s unsafe.Pointer, p unsafe.Pointer, v unsafe.Pointer) + + __vsigned func(s unsafe.Pointer, p unsafe.Pointer, v unsafe.Pointer) + + __vunsigned func(s unsafe.Pointer, p unsafe.Pointer, v unsafe.Pointer) + + __skip_one func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer, flags uint64) (ret int) + + __skip_one_fast func(s unsafe.Pointer, p unsafe.Pointer) (ret int) + + __skip_array func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer, flags uint64) (ret int) + + __skip_object func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer, flags uint64) (ret int) + + __skip_number func(s unsafe.Pointer, p unsafe.Pointer) (ret int) + + __validate_one func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer) (ret int) + + __get_by_path func(s unsafe.Pointer, p unsafe.Pointer, path unsafe.Pointer, m unsafe.Pointer) (ret int) + + __validate_utf8 func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer) (ret int) + + __validate_utf8_fast func(s unsafe.Pointer) (ret int) + + __fsm_exec func(m unsafe.Pointer, s unsafe.Pointer, p unsafe.Pointer, flags uint64) (ret int) ) //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __i64toa(out *byte, val int64) (ret int) +func i64toa(out *byte, val int64) (ret int) { + return __i64toa(rt.NoEscape(unsafe.Pointer(out)), val) +} + +//go:nosplit +func u64toa(out *byte, val uint64) (ret int) { + return __u64toa(rt.NoEscape(unsafe.Pointer(out)), val) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __u64toa(out *byte, val uint64) (ret int) +func f64toa(out *byte, val float64) (ret int) { + return __f64toa(rt.NoEscape(unsafe.Pointer(out)), val) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __f64toa(out *byte, val float64) (ret int) +func f32toa(out *byte, val float32) (ret int) { + return __f32toa(rt.NoEscape(unsafe.Pointer(out)), val) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __f32toa(out *byte, val float32) (ret int) +func lspace(sp unsafe.Pointer, nb int, off int) (ret int) { + return __lspace(rt.NoEscape(sp), nb, off) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __lspace(sp unsafe.Pointer, nb int, off int) (ret int) +func quote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int, flags uint64) (ret int) { + return __quote(rt.NoEscape(unsafe.Pointer(sp)), nb, rt.NoEscape(unsafe.Pointer(dp)), rt.NoEscape(unsafe.Pointer(dn)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __quote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int, flags uint64) (ret int) +func html_escape(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int) (ret int) { + return __html_escape(rt.NoEscape(unsafe.Pointer(sp)), nb, rt.NoEscape(unsafe.Pointer(dp)), rt.NoEscape(unsafe.Pointer(dn))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __html_escape(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int) (ret int) +func unquote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) (ret int) { + return __unquote(rt.NoEscape(unsafe.Pointer(sp)), nb, rt.NoEscape(unsafe.Pointer(dp)), rt.NoEscape(unsafe.Pointer(ep)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __unquote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) (ret int) +func value(s unsafe.Pointer, n int, p int, v *types.JsonState, flags uint64) (ret int) { + return __value(rt.NoEscape(unsafe.Pointer(s)), n, p, rt.NoEscape(unsafe.Pointer(v)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __value(s unsafe.Pointer, n int, p int, v *types.JsonState, flags uint64) (ret int) +func vstring(s *string, p *int, v *types.JsonState, flags uint64) { + __vstring(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(v)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __vstring(s *string, p *int, v *types.JsonState, flags uint64) +func vnumber(s *string, p *int, v *types.JsonState) { + __vnumber(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(v))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __vnumber(s *string, p *int, v *types.JsonState) +func vsigned(s *string, p *int, v *types.JsonState) { + __vsigned(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(v))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __vsigned(s *string, p *int, v *types.JsonState) +func vunsigned(s *string, p *int, v *types.JsonState) { + __vunsigned(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(v))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __vunsigned(s *string, p *int, v *types.JsonState) +func skip_one(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) { + return __skip_one(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_one(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) +func skip_one_fast(s *string, p *int) (ret int) { + return __skip_one_fast(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_one_fast(s *string, p *int) (ret int) +func skip_array(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) { + return __skip_array(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_array(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) +func skip_object(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) { + return __skip_object(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_object(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) +func skip_number(s *string, p *int) (ret int) { + return __skip_number(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_number(s *string, p *int) (ret int) +func validate_one(s *string, p *int, m *types.StateMachine) (ret int) { + return __validate_one(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __validate_one(s *string, p *int, m *types.StateMachine) (ret int) +func get_by_path(s *string, p *int, path *[]interface{}, m *types.StateMachine) (ret int) { + return __get_by_path(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(path)), rt.NoEscape(unsafe.Pointer(m))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __get_by_path(s *string, p *int, path *[]interface{}, m *types.StateMachine) (ret int) +func validate_utf8(s *string, p *int, m *types.StateMachine) (ret int) { + return __validate_utf8(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __validate_utf8(s *string, p *int, m *types.StateMachine) (ret int) +func validate_utf8_fast(s *string) (ret int) { + return __validate_utf8_fast(rt.NoEscape(unsafe.Pointer(s))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __validate_utf8_fast(s *string) (ret int) \ No newline at end of file +func fsm_exec(m *types.StateMachine, s *string, p *int, flags uint64) (ret int) { + return __fsm_exec(rt.NoEscape(unsafe.Pointer(m)), rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), flags) +} diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx/native_amd64.s b/vendor/github.com/bytedance/sonic/internal/native/avx/native_amd64.s deleted file mode 100644 index 86eb365794..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/native/avx/native_amd64.s +++ /dev/null @@ -1,15342 +0,0 @@ -// +build !noasm !appengine -// Code generated by asm2asm, DO NOT EDIT. - -#include "go_asm.h" -#include "funcdata.h" -#include "textflag.h" - -TEXT ·__native_entry__(SB), NOSPLIT, $0 - NO_LOCAL_POINTERS - LONG $0xf9058d48; WORD $0xffff; BYTE $0xff // leaq $-7(%rip), %rax - LONG $0x24448948; BYTE $0x08 // movq %rax, $8(%rsp) - BYTE $0xc3 // retq - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_lspace: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x3948; BYTE $0xd6 // cmpq %rdx, %rsi - LONG $0x004e840f; WORD $0x0000 // je LBB0_1, $78(%rip) - LONG $0x37048d4c // leaq (%rdi,%rsi), %r8 - LONG $0x3a448d48; BYTE $0x01 // leaq $1(%rdx,%rdi), %rax - WORD $0x2948; BYTE $0xf2 // subq %rsi, %rdx - QUAD $0x000100002600be48; WORD $0x0000 // movabsq $4294977024, %rsi - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB0_3: - LONG $0xff48be0f // movsbl $-1(%rax), %ecx - WORD $0xf983; BYTE $0x20 // cmpl $32, %ecx - LONG $0x002c870f; WORD $0x0000 // ja LBB0_5, $44(%rip) - LONG $0xcea30f48 // btq %rcx, %rsi - LONG $0x0022830f; WORD $0x0000 // jae LBB0_5, $34(%rip) - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0xff48; BYTE $0xc2 // incq %rdx - LONG $0xffdd850f; WORD $0xffff // jne LBB0_3, $-35(%rip) - WORD $0x2949; BYTE $0xf8 // subq %rdi, %r8 - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB0_1: - WORD $0x0148; BYTE $0xfa // addq %rdi, %rdx - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - WORD $0x2949; BYTE $0xf8 // subq %rdi, %r8 - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB0_5: - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x0148; BYTE $0xf8 // addq %rdi, %rax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x0000000000000000; QUAD $0x0000000000000000; QUAD $0x0000000000000000; LONG $0x00000000; WORD $0x0000; BYTE $0x00 // .p2align 5, 0x00 - -LCPI1_0: - QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' - QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' - - // .p2align 4, 0x90 -_f64toa: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax - LONG $0x7ef9e1c4; BYTE $0xc2 // vmovq %xmm0, %rdx - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - LONG $0x34e8c148 // shrq $52, %rax - LONG $0x0007ff25; BYTE $0x00 // andl $2047, %eax - LONG $0x0007ff3d; BYTE $0x00 // cmpl $2047, %eax - LONG $0x0ade840f; WORD $0x0000 // je LBB1_1, $2782(%rip) - WORD $0x8949; BYTE $0xfe // movq %rdi, %r14 - WORD $0x07c6; BYTE $0x2d // movb $45, (%rdi) - WORD $0x8949; BYTE $0xd4 // movq %rdx, %r12 - LONG $0x3fecc149 // shrq $63, %r12 - LONG $0x273c8d4e // leaq (%rdi,%r12), %r15 - QUAD $0x00000000550c8d48 // leaq (,%rdx,2), %rcx - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x01e3840f; WORD $0x0000 // je LBB1_3, $483(%rip) - QUAD $0xffffffffffffbf48; WORD $0x000f // movabsq $4503599627370495, %rdi - WORD $0x2148; BYTE $0xfa // andq %rdi, %rdx - WORD $0xc085 // testl %eax, %eax - LONG $0x0aae840f; WORD $0x0000 // je LBB1_5, $2734(%rip) - WORD $0xff48; BYTE $0xc7 // incq %rdi - WORD $0x0948; BYTE $0xd7 // orq %rdx, %rdi - LONG $0xfbcd988d; WORD $0xffff // leal $-1075(%rax), %ebx - LONG $0xfc01888d; WORD $0xffff // leal $-1023(%rax), %ecx - WORD $0xf983; BYTE $0x34 // cmpl $52, %ecx - LONG $0x001a870f; WORD $0x0000 // ja LBB1_6, $26(%rip) - WORD $0xd989 // movl %ebx, %ecx - WORD $0xd9f7 // negl %ecx - LONG $0xffc6c748; WORD $0xffff; BYTE $0xff // movq $-1, %rsi - WORD $0xd348; BYTE $0xe6 // shlq %cl, %rsi - WORD $0xf748; BYTE $0xd6 // notq %rsi - WORD $0x8548; BYTE $0xf7 // testq %rsi, %rdi - LONG $0x0421840f; WORD $0x0000 // je LBB1_11, $1057(%rip) - -LBB1_6: - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - WORD $0x940f; BYTE $0xc1 // sete %cl - WORD $0xf883; BYTE $0x01 // cmpl $1, %eax - WORD $0x970f; BYTE $0xc0 // seta %al - WORD $0xc820 // andb %cl, %al - WORD $0xb60f; BYTE $0xc0 // movzbl %al, %eax - LONG $0x4413cb69; WORD $0x0013 // imull $1262611, %ebx, %ecx - WORD $0xd231 // xorl %edx, %edx - WORD $0xc084 // testb %al, %al - LONG $0x0101b941; WORD $0xfff8 // movl $-524031, %r9d - LONG $0xca440f44 // cmovel %edx, %r9d - LONG $0xb8748d48; BYTE $0xfe // leaq $-2(%rax,%rdi,4), %rsi - WORD $0x0141; BYTE $0xc9 // addl %ecx, %r9d - LONG $0x16f9c141 // sarl $22, %r9d - LONG $0xb1c96941; WORD $0xe56c; BYTE $0xff // imull $-1741647, %r9d, %ecx - WORD $0xe9c1; BYTE $0x13 // shrl $19, %ecx - WORD $0xd901 // addl %ebx, %ecx - LONG $0x000124b8; BYTE $0x00 // movl $292, %eax - WORD $0x2944; BYTE $0xc8 // subl %r9d, %eax - LONG $0x04e0c148 // shlq $4, %rax - LONG $0x3a158d48; WORD $0x00bb; BYTE $0x00 // leaq $47930(%rip), %rdx /* _pow10_ceil_sig.g(%rip) */ - LONG $0x101c8b4c // movq (%rax,%rdx), %r11 - LONG $0x106c8b4c; BYTE $0x08 // movq $8(%rax,%rdx), %r13 - WORD $0xc1fe // incb %cl - WORD $0xd348; BYTE $0xe6 // shlq %cl, %rsi - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe5 // mulq %r13 - WORD $0x8948; BYTE $0xd3 // movq %rdx, %rbx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe3 // mulq %r11 - QUAD $0x00000000bd348d48 // leaq (,%rdi,4), %rsi - WORD $0x0148; BYTE $0xd8 // addq %rbx, %rax - LONG $0x00d28348 // adcq $0, %rdx - WORD $0xdb31 // xorl %ebx, %ebx - LONG $0x01f88348 // cmpq $1, %rax - WORD $0x970f; BYTE $0xc3 // seta %bl - WORD $0x0948; BYTE $0xd3 // orq %rdx, %rbx - WORD $0xd348; BYTE $0xe6 // shlq %cl, %rsi - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe5 // mulq %r13 - WORD $0x8949; BYTE $0xd2 // movq %rdx, %r10 - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe3 // mulq %r11 - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - QUAD $0x00000002bd348d48 // leaq $2(,%rdi,4), %rsi - WORD $0x014c; BYTE $0xd0 // addq %r10, %rax - LONG $0x00d08349 // adcq $0, %r8 - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - LONG $0x01f88348 // cmpq $1, %rax - LONG $0xc2970f41 // seta %r10b - WORD $0x094d; BYTE $0xc2 // orq %r8, %r10 - WORD $0xd348; BYTE $0xe6 // shlq %cl, %rsi - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe5 // mulq %r13 - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe3 // mulq %r11 - WORD $0x0148; BYTE $0xc8 // addq %rcx, %rax - LONG $0x00d28348 // adcq $0, %rdx - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x01f88348 // cmpq $1, %rax - WORD $0x970f; BYTE $0xc1 // seta %cl - WORD $0x0948; BYTE $0xd1 // orq %rdx, %rcx - WORD $0xe783; BYTE $0x01 // andl $1, %edi - WORD $0x0148; BYTE $0xfb // addq %rdi, %rbx - WORD $0x2948; BYTE $0xf9 // subq %rdi, %rcx - LONG $0x28fa8349 // cmpq $40, %r10 - LONG $0x003e820f; WORD $0x0000 // jb LBB1_29, $62(%rip) - QUAD $0xcccccccccccdba48; WORD $0xcccc // movabsq $-3689348814741910323, %rdx - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - WORD $0xf748; BYTE $0xe2 // mulq %rdx - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - LONG $0x05efc148 // shrq $5, %rdi - QUAD $0x00000000fd048d48 // leaq (,%rdi,8), %rax - LONG $0x80148d48 // leaq (%rax,%rax,4), %rdx - WORD $0x3948; BYTE $0xd3 // cmpq %rdx, %rbx - LONG $0xc6970f40 // seta %sil - LONG $0x80448d48; BYTE $0x28 // leaq $40(%rax,%rax,4), %rax - WORD $0x3948; BYTE $0xc8 // cmpq %rcx, %rax - WORD $0x960f; BYTE $0xc2 // setbe %dl - WORD $0x3040; BYTE $0xf2 // xorb %sil, %dl - LONG $0x0130840f; WORD $0x0000 // je LBB1_8, $304(%rip) - -LBB1_29: - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - LONG $0x02e8c148 // shrq $2, %rax - WORD $0x894c; BYTE $0xc2 // movq %r8, %rdx - LONG $0xfce28348 // andq $-4, %rdx - WORD $0x3948; BYTE $0xd3 // cmpq %rdx, %rbx - LONG $0xc7970f40 // seta %dil - LONG $0x04728d48 // leaq $4(%rdx), %rsi - WORD $0x3948; BYTE $0xce // cmpq %rcx, %rsi - WORD $0x960f; BYTE $0xc3 // setbe %bl - WORD $0x3040; BYTE $0xfb // xorb %dil, %bl - LONG $0x0053840f; WORD $0x0000 // je LBB1_30, $83(%rip) - LONG $0x02ca8348 // orq $2, %rdx - LONG $0x000001bf; BYTE $0x00 // movl $1, %edi - WORD $0x3949; BYTE $0xd2 // cmpq %rdx, %r10 - LONG $0x000e870f; WORD $0x0000 // ja LBB1_33, $14(%rip) - WORD $0x940f; BYTE $0xc1 // sete %cl - LONG $0x02e8c041 // shrb $2, %r8b - WORD $0x2041; BYTE $0xc8 // andb %cl, %r8b - LONG $0xf8b60f41 // movzbl %r8b, %edi - -LBB1_33: - WORD $0x0148; BYTE $0xc7 // addq %rax, %rdi - QUAD $0x0001ffffff80b848; WORD $0x0000 // movabsq $8589934464, %rax - LONG $0xe47f0548; WORD $0x540b // addq $1410065535, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x003a870f; WORD $0x0000 // ja LBB1_35, $58(%rip) - LONG $0x0000eae9; BYTE $0x00 // jmp LBB1_41, $234(%rip) - -LBB1_3: - LONG $0x3007c641 // movb $48, (%r15) - WORD $0x2945; BYTE $0xf7 // subl %r14d, %r15d - WORD $0xff41; BYTE $0xc7 // incl %r15d - WORD $0x8944; BYTE $0xfb // movl %r15d, %ebx - LONG $0x0008a2e9; BYTE $0x00 // jmp LBB1_116, $2210(%rip) - -LBB1_30: - WORD $0x3948; BYTE $0xf1 // cmpq %rsi, %rcx - LONG $0xffd88348 // sbbq $-1, %rax - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - QUAD $0x0001ffffff80b848; WORD $0x0000 // movabsq $8589934464, %rax - LONG $0xe47f0548; WORD $0x540b // addq $1410065535, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x00b5860f; WORD $0x0000 // jbe LBB1_41, $181(%rip) - -LBB1_35: - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x0be8c148 // shrq $11, %rax - LONG $0x00000bba; BYTE $0x00 // movl $11, %edx - LONG $0x0edd3d48; WORD $0x02e9 // cmpq $48828125, %rax - LONG $0x0127820f; WORD $0x0000 // jb LBB1_51, $295(%rip) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x0ce8c148 // shrq $12, %rax - LONG $0x00000cba; BYTE $0x00 // movl $12, %edx - LONG $0x4a513d48; WORD $0x0e8d // cmpq $244140625, %rax - LONG $0x010f820f; WORD $0x0000 // jb LBB1_51, $271(%rip) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x0de8c148 // shrq $13, %rax - LONG $0x00000dba; BYTE $0x00 // movl $13, %edx - LONG $0x73953d48; WORD $0x48c2 // cmpq $1220703125, %rax - LONG $0x00f7820f; WORD $0x0000 // jb LBB1_51, $247(%rip) - LONG $0x00000eba; BYTE $0x00 // movl $14, %edx - QUAD $0x5af3107a4000b848; WORD $0x0000 // movabsq $100000000000000, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x00df820f; WORD $0x0000 // jb LBB1_51, $223(%rip) - LONG $0x00000fba; BYTE $0x00 // movl $15, %edx - QUAD $0x8d7ea4c68000b848; WORD $0x0003 // movabsq $1000000000000000, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x00c7820f; WORD $0x0000 // jb LBB1_51, $199(%rip) - QUAD $0x86f26fc10000b848; WORD $0x0023 // movabsq $10000000000000000, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x000011ba; BYTE $0x00 // movl $17, %edx - -LBB1_50: - WORD $0xda83; BYTE $0x00 // sbbl $0, %edx - LONG $0x0000ade9; BYTE $0x00 // jmp LBB1_51, $173(%rip) - -LBB1_8: - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0xffdf8348 // sbbq $-1, %rdi - WORD $0xff41; BYTE $0xc1 // incl %r9d - QUAD $0x0001ffffff80b848; WORD $0x0000 // movabsq $8589934464, %rax - LONG $0xe47f0548; WORD $0x540b // addq $1410065535, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0xff4b870f; WORD $0xffff // ja LBB1_35, $-181(%rip) - -LBB1_41: - LONG $0x000001ba; BYTE $0x00 // movl $1, %edx - LONG $0x0aff8348 // cmpq $10, %rdi - LONG $0x007b820f; WORD $0x0000 // jb LBB1_51, $123(%rip) - LONG $0x000002ba; BYTE $0x00 // movl $2, %edx - LONG $0x64ff8348 // cmpq $100, %rdi - LONG $0x006c820f; WORD $0x0000 // jb LBB1_51, $108(%rip) - LONG $0x000003ba; BYTE $0x00 // movl $3, %edx - LONG $0xe8ff8148; WORD $0x0003; BYTE $0x00 // cmpq $1000, %rdi - LONG $0x005a820f; WORD $0x0000 // jb LBB1_51, $90(%rip) - LONG $0x000004ba; BYTE $0x00 // movl $4, %edx - LONG $0x10ff8148; WORD $0x0027; BYTE $0x00 // cmpq $10000, %rdi - LONG $0x0048820f; WORD $0x0000 // jb LBB1_51, $72(%rip) - LONG $0x000005ba; BYTE $0x00 // movl $5, %edx - LONG $0xa0ff8148; WORD $0x0186; BYTE $0x00 // cmpq $100000, %rdi - LONG $0x0036820f; WORD $0x0000 // jb LBB1_51, $54(%rip) - LONG $0x000006ba; BYTE $0x00 // movl $6, %edx - LONG $0x40ff8148; WORD $0x0f42; BYTE $0x00 // cmpq $1000000, %rdi - LONG $0x0024820f; WORD $0x0000 // jb LBB1_51, $36(%rip) - LONG $0x000007ba; BYTE $0x00 // movl $7, %edx - LONG $0x80ff8148; WORD $0x9896; BYTE $0x00 // cmpq $10000000, %rdi - LONG $0x0012820f; WORD $0x0000 // jb LBB1_51, $18(%rip) - LONG $0x000008ba; BYTE $0x00 // movl $8, %edx - LONG $0x00ff8148; WORD $0xf5e1; BYTE $0x05 // cmpq $100000000, %rdi - LONG $0x0754830f; WORD $0x0000 // jae LBB1_49, $1876(%rip) - -LBB1_51: - LONG $0x0a2c8d46 // leal (%rdx,%r9), %r13d - LONG $0x0a448d42; BYTE $0x05 // leal $5(%rdx,%r9), %eax - WORD $0xf883; BYTE $0x1b // cmpl $27, %eax - LONG $0x009d820f; WORD $0x0000 // jb LBB1_64, $157(%rip) - LONG $0x01678d4d // leaq $1(%r15), %r12 - WORD $0x894c; BYTE $0xe6 // movq %r12, %rsi - LONG $0x0082cfe8; BYTE $0x00 // callq _format_significand, $33487(%rip) - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB1_53: - LONG $0x30ff7b80 // cmpb $48, $-1(%rbx) - LONG $0xff5b8d48 // leaq $-1(%rbx), %rbx - LONG $0xfff2840f; WORD $0xffff // je LBB1_53, $-14(%rip) - LONG $0x01478a41 // movb $1(%r15), %al - WORD $0x8841; BYTE $0x07 // movb %al, (%r15) - LONG $0x01438d48 // leaq $1(%rbx), %rax - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x294c; BYTE $0xe1 // subq %r12, %rcx - LONG $0x02f98348 // cmpq $2, %rcx - LONG $0x00088c0f; WORD $0x0000 // jl LBB1_56, $8(%rip) - LONG $0x2404c641; BYTE $0x2e // movb $46, (%r12) - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - -LBB1_56: - WORD $0x03c6; BYTE $0x65 // movb $101, (%rbx) - LONG $0xff458d41 // leal $-1(%r13), %eax - WORD $0x8545; BYTE $0xed // testl %r13d, %r13d - LONG $0x01548e0f; WORD $0x0000 // jle LBB1_57, $340(%rip) - LONG $0x2b0143c6 // movb $43, $1(%rbx) - WORD $0xf883; BYTE $0x64 // cmpl $100, %eax - LONG $0x01568c0f; WORD $0x0000 // jl LBB1_61, $342(%rip) - -LBB1_60: - WORD $0xc189 // movl %eax, %ecx - LONG $0xcccccdba; BYTE $0xcc // movl $3435973837, %edx - LONG $0xd1af0f48 // imulq %rcx, %rdx - LONG $0x23eac148 // shrq $35, %rdx - WORD $0x0c8d; BYTE $0x12 // leal (%rdx,%rdx), %ecx - WORD $0x0c8d; BYTE $0x89 // leal (%rcx,%rcx,4), %ecx - WORD $0xc829 // subl %ecx, %eax - LONG $0x140d8d48; WORD $0x00b7; BYTE $0x00 // leaq $46868(%rip), %rcx /* _Digits(%rip) */ - LONG $0x510cb70f // movzwl (%rcx,%rdx,2), %ecx - LONG $0x024b8966 // movw %cx, $2(%rbx) - WORD $0x300c // orb $48, %al - WORD $0x4388; BYTE $0x04 // movb %al, $4(%rbx) - LONG $0x05c38348 // addq $5, %rbx - LONG $0x00068ee9; BYTE $0x00 // jmp LBB1_115, $1678(%rip) - -LBB1_64: - WORD $0x8545; BYTE $0xc9 // testl %r9d, %r9d - LONG $0x013c880f; WORD $0x0000 // js LBB1_65, $316(%rip) - WORD $0x634d; BYTE $0xed // movslq %r13d, %r13 - LONG $0x2f1c8d4b // leaq (%r15,%r13), %rbx - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - LONG $0x0006c6e8; BYTE $0x00 // callq _format_integer, $1734(%rip) - WORD $0x3948; BYTE $0xd8 // cmpq %rbx, %rax - LONG $0x066d830f; WORD $0x0000 // jae LBB1_115, $1645(%rip) - WORD $0x014d; BYTE $0xec // addq %r13, %r12 - WORD $0x2949; BYTE $0xc4 // subq %rax, %r12 - WORD $0x014d; BYTE $0xf4 // addq %r14, %r12 - LONG $0x80fc8149; WORD $0x0000; BYTE $0x00 // cmpq $128, %r12 - LONG $0x0317820f; WORD $0x0000 // jb LBB1_114, $791(%rip) - WORD $0x894c; BYTE $0xe1 // movq %r12, %rcx - LONG $0x80e18348 // andq $-128, %rcx - LONG $0x80798d48 // leaq $-128(%rcx), %rdi - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - LONG $0x07eec148 // shrq $7, %rsi - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0xf289 // movl %esi, %edx - WORD $0xe283; BYTE $0x03 // andl $3, %edx - LONG $0x80ff8148; WORD $0x0001; BYTE $0x00 // cmpq $384, %rdi - LONG $0x01fc830f; WORD $0x0000 // jae LBB1_107, $508(%rip) - WORD $0xff31 // xorl %edi, %edi - LONG $0x00029de9; BYTE $0x00 // jmp LBB1_109, $669(%rip) - -LBB1_11: - WORD $0xd348; BYTE $0xef // shrq %cl, %rdi - QUAD $0x0001ffffff80b848; WORD $0x0000 // movabsq $8589934464, %rax - LONG $0xe47f0548; WORD $0x540b // addq $1410065535, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x013f860f; WORD $0x0000 // jbe LBB1_18, $319(%rip) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x0be8c148 // shrq $11, %rax - LONG $0x00000bba; BYTE $0x00 // movl $11, %edx - LONG $0x0edd3d48; WORD $0x02e9 // cmpq $48828125, %rax - LONG $0x01b1820f; WORD $0x0000 // jb LBB1_28, $433(%rip) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x0ce8c148 // shrq $12, %rax - LONG $0x00000cba; BYTE $0x00 // movl $12, %edx - LONG $0x4a513d48; WORD $0x0e8d // cmpq $244140625, %rax - LONG $0x0199820f; WORD $0x0000 // jb LBB1_28, $409(%rip) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x0de8c148 // shrq $13, %rax - LONG $0x00000dba; BYTE $0x00 // movl $13, %edx - LONG $0x73953d48; WORD $0x48c2 // cmpq $1220703125, %rax - LONG $0x0181820f; WORD $0x0000 // jb LBB1_28, $385(%rip) - LONG $0x00000eba; BYTE $0x00 // movl $14, %edx - QUAD $0x5af3107a4000b848; WORD $0x0000 // movabsq $100000000000000, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x0169820f; WORD $0x0000 // jb LBB1_28, $361(%rip) - LONG $0x00000fba; BYTE $0x00 // movl $15, %edx - QUAD $0x8d7ea4c68000b848; WORD $0x0003 // movabsq $1000000000000000, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x0151820f; WORD $0x0000 // jb LBB1_28, $337(%rip) - QUAD $0x86f26fc10000b848; WORD $0x0023 // movabsq $10000000000000000, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x000011ba; BYTE $0x00 // movl $17, %edx - -LBB1_27: - WORD $0xda83; BYTE $0x00 // sbbl $0, %edx - LONG $0x000137e9; BYTE $0x00 // jmp LBB1_28, $311(%rip) - -LBB1_57: - LONG $0x2d0143c6 // movb $45, $1(%rbx) - WORD $0xd8f7 // negl %eax - WORD $0xf883; BYTE $0x64 // cmpl $100, %eax - LONG $0xfeaa8d0f; WORD $0xffff // jge LBB1_60, $-342(%rip) - -LBB1_61: - WORD $0xf883; BYTE $0x0a // cmpl $10, %eax - LONG $0x00878c0f; WORD $0x0000 // jl LBB1_63, $135(%rip) - WORD $0xc089 // movl %eax, %eax - LONG $0xca0d8d48; WORD $0x00b5; BYTE $0x00 // leaq $46538(%rip), %rcx /* _Digits(%rip) */ - LONG $0x4104b70f // movzwl (%rcx,%rax,2), %eax - LONG $0x02438966 // movw %ax, $2(%rbx) - LONG $0x04c38348 // addq $4, %rbx - LONG $0x000549e9; BYTE $0x00 // jmp LBB1_115, $1353(%rip) - -LBB1_65: - WORD $0x8545; BYTE $0xed // testl %r13d, %r13d - LONG $0x031f8f0f; WORD $0x0000 // jg LBB1_78, $799(%rip) - LONG $0x07c74166; WORD $0x2e30 // movw $11824, (%r15) - LONG $0x02c78349 // addq $2, %r15 - WORD $0x8545; BYTE $0xed // testl %r13d, %r13d - LONG $0x030c890f; WORD $0x0000 // jns LBB1_78, $780(%rip) - WORD $0x8941; BYTE $0xd0 // movl %edx, %r8d - WORD $0xf741; BYTE $0xd0 // notl %r8d - WORD $0x2945; BYTE $0xc8 // subl %r9d, %r8d - WORD $0xc031 // xorl %eax, %eax - LONG $0x7ff88341 // cmpl $127, %r8d - LONG $0x02de820f; WORD $0x0000 // jb LBB1_76, $734(%rip) - WORD $0xff49; BYTE $0xc0 // incq %r8 - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - QUAD $0x0001ffffff80b948; WORD $0x0000 // movabsq $8589934464, %rcx - WORD $0x2148; BYTE $0xc8 // andq %rcx, %rax - LONG $0x80488d48 // leaq $-128(%rax), %rcx - WORD $0x8948; BYTE $0xce // movq %rcx, %rsi - LONG $0x07eec148 // shrq $7, %rsi - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x8941; BYTE $0xf1 // movl %esi, %r9d - LONG $0x03e18341 // andl $3, %r9d - LONG $0x80f98148; WORD $0x0001; BYTE $0x00 // cmpq $384, %rcx - LONG $0x01b7830f; WORD $0x0000 // jae LBB1_70, $439(%rip) - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x00025ae9; BYTE $0x00 // jmp LBB1_72, $602(%rip) - -LBB1_63: - WORD $0x3004 // addb $48, %al - WORD $0x4388; BYTE $0x02 // movb %al, $2(%rbx) - LONG $0x03c38348 // addq $3, %rbx - LONG $0x0004cee9; BYTE $0x00 // jmp LBB1_115, $1230(%rip) - -LBB1_18: - LONG $0x000001ba; BYTE $0x00 // movl $1, %edx - LONG $0x0aff8348 // cmpq $10, %rdi - LONG $0x007b820f; WORD $0x0000 // jb LBB1_28, $123(%rip) - LONG $0x000002ba; BYTE $0x00 // movl $2, %edx - LONG $0x64ff8348 // cmpq $100, %rdi - LONG $0x006c820f; WORD $0x0000 // jb LBB1_28, $108(%rip) - LONG $0x000003ba; BYTE $0x00 // movl $3, %edx - LONG $0xe8ff8148; WORD $0x0003; BYTE $0x00 // cmpq $1000, %rdi - LONG $0x005a820f; WORD $0x0000 // jb LBB1_28, $90(%rip) - LONG $0x000004ba; BYTE $0x00 // movl $4, %edx - LONG $0x10ff8148; WORD $0x0027; BYTE $0x00 // cmpq $10000, %rdi - LONG $0x0048820f; WORD $0x0000 // jb LBB1_28, $72(%rip) - LONG $0x000005ba; BYTE $0x00 // movl $5, %edx - LONG $0xa0ff8148; WORD $0x0186; BYTE $0x00 // cmpq $100000, %rdi - LONG $0x0036820f; WORD $0x0000 // jb LBB1_28, $54(%rip) - LONG $0x000006ba; BYTE $0x00 // movl $6, %edx - LONG $0x40ff8148; WORD $0x0f42; BYTE $0x00 // cmpq $1000000, %rdi - LONG $0x0024820f; WORD $0x0000 // jb LBB1_28, $36(%rip) - LONG $0x000007ba; BYTE $0x00 // movl $7, %edx - LONG $0x80ff8148; WORD $0x9896; BYTE $0x00 // cmpq $10000000, %rdi - LONG $0x0012820f; WORD $0x0000 // jb LBB1_28, $18(%rip) - LONG $0x000008ba; BYTE $0x00 // movl $8, %edx - LONG $0x00ff8148; WORD $0xf5e1; BYTE $0x05 // cmpq $100000000, %rdi - LONG $0x0480830f; WORD $0x0000 // jae LBB1_26, $1152(%rip) - -LBB1_28: - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - LONG $0x00048ce8; BYTE $0x00 // callq _format_integer, $1164(%rip) - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - LONG $0x000434e9; BYTE $0x00 // jmp LBB1_115, $1076(%rip) - -LBB1_107: - LONG $0xfce68348 // andq $-4, %rsi - WORD $0xf748; BYTE $0xde // negq %rsi - WORD $0xff31 // xorl %edi, %edi - QUAD $0xfffff923056ffdc5 // vmovdqa $-1757(%rip), %ymm0 /* LCPI1_0(%rip) */ - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB1_108: - LONG $0x047ffec5; BYTE $0x38 // vmovdqu %ymm0, (%rax,%rdi) - LONG $0x447ffec5; WORD $0x2038 // vmovdqu %ymm0, $32(%rax,%rdi) - LONG $0x447ffec5; WORD $0x4038 // vmovdqu %ymm0, $64(%rax,%rdi) - LONG $0x447ffec5; WORD $0x6038 // vmovdqu %ymm0, $96(%rax,%rdi) - QUAD $0x00008038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $128(%rax,%rdi) - QUAD $0x0000a038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $160(%rax,%rdi) - QUAD $0x0000c038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $192(%rax,%rdi) - QUAD $0x0000e038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $224(%rax,%rdi) - QUAD $0x00010038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $256(%rax,%rdi) - QUAD $0x00012038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $288(%rax,%rdi) - QUAD $0x00014038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $320(%rax,%rdi) - QUAD $0x00016038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $352(%rax,%rdi) - QUAD $0x00018038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $384(%rax,%rdi) - QUAD $0x0001a038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $416(%rax,%rdi) - QUAD $0x0001c038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $448(%rax,%rdi) - QUAD $0x0001e038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $480(%rax,%rdi) - LONG $0x00c78148; WORD $0x0002; BYTE $0x00 // addq $512, %rdi - LONG $0x04c68348 // addq $4, %rsi - LONG $0xff6c850f; WORD $0xffff // jne LBB1_108, $-148(%rip) - -LBB1_109: - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x0033840f; WORD $0x0000 // je LBB1_112, $51(%rip) - LONG $0x07748d48; BYTE $0x60 // leaq $96(%rdi,%rax), %rsi - WORD $0xf748; BYTE $0xda // negq %rdx - QUAD $0xfffff873056ffdc5 // vmovdqa $-1933(%rip), %ymm0 /* LCPI1_0(%rip) */ - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB1_111: - LONG $0x467ffec5; BYTE $0xa0 // vmovdqu %ymm0, $-96(%rsi) - LONG $0x467ffec5; BYTE $0xc0 // vmovdqu %ymm0, $-64(%rsi) - LONG $0x467ffec5; BYTE $0xe0 // vmovdqu %ymm0, $-32(%rsi) - LONG $0x067ffec5 // vmovdqu %ymm0, (%rsi) - LONG $0x80ee8348 // subq $-128, %rsi - WORD $0xff48; BYTE $0xc2 // incq %rdx - LONG $0xffe0850f; WORD $0xffff // jne LBB1_111, $-32(%rip) - -LBB1_112: - WORD $0x394c; BYTE $0xe1 // cmpq %r12, %rcx - LONG $0x0347840f; WORD $0x0000 // je LBB1_115, $839(%rip) - WORD $0x0148; BYTE $0xc8 // addq %rcx, %rax - LONG $0x90909090 // .p2align 4, 0x90 - -LBB1_114: - WORD $0x00c6; BYTE $0x30 // movb $48, (%rax) - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x3948; BYTE $0xc3 // cmpq %rax, %rbx - LONG $0xfff1850f; WORD $0xffff // jne LBB1_114, $-15(%rip) - LONG $0x00032ce9; BYTE $0x00 // jmp LBB1_115, $812(%rip) - -LBB1_70: - QUAD $0x000001e2349c8d4b // leaq $482(%r12,%r14), %rbx - LONG $0xfce68348 // andq $-4, %rsi - WORD $0xf748; BYTE $0xde // negq %rsi - WORD $0xc931 // xorl %ecx, %ecx - QUAD $0xfffff813056ffdc5 // vmovdqa $-2029(%rip), %ymm0 /* LCPI1_0(%rip) */ - -LBB1_71: - QUAD $0xfffe200b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-480(%rbx,%rcx) - QUAD $0xfffe400b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-448(%rbx,%rcx) - QUAD $0xfffe600b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-416(%rbx,%rcx) - QUAD $0xfffe800b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-384(%rbx,%rcx) - QUAD $0xfffea00b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-352(%rbx,%rcx) - QUAD $0xfffec00b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-320(%rbx,%rcx) - QUAD $0xfffee00b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-288(%rbx,%rcx) - QUAD $0xffff000b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-256(%rbx,%rcx) - QUAD $0xffff200b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-224(%rbx,%rcx) - QUAD $0xffff400b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-192(%rbx,%rcx) - QUAD $0xffff600b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-160(%rbx,%rcx) - LONG $0x447ffec5; WORD $0x800b // vmovdqu %ymm0, $-128(%rbx,%rcx) - LONG $0x447ffec5; WORD $0xa00b // vmovdqu %ymm0, $-96(%rbx,%rcx) - LONG $0x447ffec5; WORD $0xc00b // vmovdqu %ymm0, $-64(%rbx,%rcx) - LONG $0x447ffec5; WORD $0xe00b // vmovdqu %ymm0, $-32(%rbx,%rcx) - LONG $0x047ffec5; BYTE $0x0b // vmovdqu %ymm0, (%rbx,%rcx) - LONG $0x00c18148; WORD $0x0002; BYTE $0x00 // addq $512, %rcx - LONG $0x04c68348 // addq $4, %rsi - LONG $0xff6f850f; WORD $0xffff // jne LBB1_71, $-145(%rip) - -LBB1_72: - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x0033840f; WORD $0x0000 // je LBB1_75, $51(%rip) - WORD $0x014c; BYTE $0xe1 // addq %r12, %rcx - LONG $0x0e4c8d49; BYTE $0x62 // leaq $98(%r14,%rcx), %rcx - WORD $0xf749; BYTE $0xd9 // negq %r9 - QUAD $0xfffff766056ffdc5 // vmovdqa $-2202(%rip), %ymm0 /* LCPI1_0(%rip) */ - -LBB1_74: - LONG $0x417ffec5; BYTE $0xa0 // vmovdqu %ymm0, $-96(%rcx) - LONG $0x417ffec5; BYTE $0xc0 // vmovdqu %ymm0, $-64(%rcx) - LONG $0x417ffec5; BYTE $0xe0 // vmovdqu %ymm0, $-32(%rcx) - LONG $0x017ffec5 // vmovdqu %ymm0, (%rcx) - LONG $0x80e98348 // subq $-128, %rcx - WORD $0xff49; BYTE $0xc1 // incq %r9 - LONG $0xffe0850f; WORD $0xffff // jne LBB1_74, $-32(%rip) - -LBB1_75: - WORD $0x0149; BYTE $0xc7 // addq %rax, %r15 - WORD $0x3949; BYTE $0xc0 // cmpq %rax, %r8 - LONG $0x0019840f; WORD $0x0000 // je LBB1_78, $25(%rip) - -LBB1_76: - WORD $0x0144; BYTE $0xe8 // addl %r13d, %eax - WORD $0xd8f7 // negl %eax - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB1_77: - LONG $0x3007c641 // movb $48, (%r15) - WORD $0xff49; BYTE $0xc7 // incq %r15 - WORD $0xc8ff // decl %eax - LONG $0xfff1850f; WORD $0xffff // jne LBB1_77, $-15(%rip) - -LBB1_78: - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x007dc6e8; BYTE $0x00 // callq _format_significand, $32198(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB1_79: - LONG $0x30ff7880 // cmpb $48, $-1(%rax) - LONG $0xff408d48 // leaq $-1(%rax), %rax - LONG $0xfff2840f; WORD $0xffff // je LBB1_79, $-14(%rip) - LONG $0x01588d48 // leaq $1(%rax), %rbx - WORD $0x8545; BYTE $0xed // testl %r13d, %r13d - LONG $0x01f58e0f; WORD $0x0000 // jle LBB1_115, $501(%rip) - WORD $0xda89 // movl %ebx, %edx - WORD $0x2944; BYTE $0xfa // subl %r15d, %edx - WORD $0x8944; BYTE $0xe9 // movl %r13d, %ecx - WORD $0xd129 // subl %edx, %ecx - LONG $0x00258d0f; WORD $0x0000 // jge LBB1_82, $37(%rip) - WORD $0x2944; BYTE $0xea // subl %r13d, %edx - LONG $0x00c48e0f; WORD $0x0000 // jle LBB1_100, $196(%rip) - WORD $0xd689 // movl %edx, %esi - LONG $0xff568d48 // leaq $-1(%rsi), %rdx - WORD $0xf189 // movl %esi, %ecx - WORD $0xe183; BYTE $0x03 // andl $3, %ecx - LONG $0x03fa8348 // cmpq $3, %rdx - LONG $0x005c830f; WORD $0x0000 // jae LBB1_101, $92(%rip) - WORD $0xd231 // xorl %edx, %edx - LONG $0x000078e9; BYTE $0x00 // jmp LBB1_97, $120(%rip) - -LBB1_82: - LONG $0x01ba8e0f; WORD $0x0000 // jle LBB1_115, $442(%rip) - WORD $0x0145; BYTE $0xfd // addl %r15d, %r13d - WORD $0x8941; BYTE $0xd8 // movl %ebx, %r8d - WORD $0xf741; BYTE $0xd0 // notl %r8d - WORD $0x0145; BYTE $0xe8 // addl %r13d, %r8d - WORD $0xd231 // xorl %edx, %edx - LONG $0x7ef88341 // cmpl $126, %r8d - LONG $0x0192860f; WORD $0x0000 // jbe LBB1_92, $402(%rip) - WORD $0xff49; BYTE $0xc0 // incq %r8 - QUAD $0x0001ffffff80b949; WORD $0x0000 // movabsq $8589934464, %r9 - WORD $0x214d; BYTE $0xc1 // andq %r8, %r9 - LONG $0x80518d49 // leaq $-128(%r9), %rdx - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - LONG $0x07efc148 // shrq $7, %rdi - WORD $0xff48; BYTE $0xc7 // incq %rdi - WORD $0xfe89 // movl %edi, %esi - WORD $0xe683; BYTE $0x03 // andl $3, %esi - LONG $0x80fa8148; WORD $0x0001; BYTE $0x00 // cmpq $384, %rdx - LONG $0x006e830f; WORD $0x0000 // jae LBB1_86, $110(%rip) - WORD $0xd231 // xorl %edx, %edx - LONG $0x00010de9; BYTE $0x00 // jmp LBB1_88, $269(%rip) - -LBB1_101: - WORD $0xe683; BYTE $0xfc // andl $-4, %esi - WORD $0xf748; BYTE $0xde // negq %rsi - WORD $0xd231 // xorl %edx, %edx - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB1_102: - LONG $0xfd107c8b // movl $-3(%rax,%rdx), %edi - LONG $0xfe107c89 // movl %edi, $-2(%rax,%rdx) - LONG $0xfcc28348 // addq $-4, %rdx - WORD $0x3948; BYTE $0xd6 // cmpq %rdx, %rsi - LONG $0xffeb850f; WORD $0xffff // jne LBB1_102, $-21(%rip) - WORD $0xf748; BYTE $0xda // negq %rdx - -LBB1_97: - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x0027840f; WORD $0x0000 // je LBB1_100, $39(%rip) - WORD $0xf748; BYTE $0xda // negq %rdx - WORD $0xf748; BYTE $0xd9 // negq %rcx - WORD $0xf631 // xorl %esi, %esi - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB1_99: - LONG $0x323c8d48 // leaq (%rdx,%rsi), %rdi - LONG $0x381cb60f // movzbl (%rax,%rdi), %ebx - LONG $0x01385c88 // movb %bl, $1(%rax,%rdi) - WORD $0xff48; BYTE $0xce // decq %rsi - WORD $0x3948; BYTE $0xf1 // cmpq %rsi, %rcx - LONG $0xffe8850f; WORD $0xffff // jne LBB1_99, $-24(%rip) - -LBB1_100: - WORD $0x6349; BYTE $0xcd // movslq %r13d, %rcx - LONG $0x0f04c641; BYTE $0x2e // movb $46, (%r15,%rcx) - LONG $0x02c08348 // addq $2, %rax - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - LONG $0x000104e9; BYTE $0x00 // jmp LBB1_115, $260(%rip) - -LBB1_86: - LONG $0xfce78348 // andq $-4, %rdi - WORD $0xf748; BYTE $0xdf // negq %rdi - WORD $0xd231 // xorl %edx, %edx - QUAD $0xfffff5f3056ffdc5 // vmovdqa $-2573(%rip), %ymm0 /* LCPI1_0(%rip) */ - -LBB1_87: - LONG $0x447ffec5; WORD $0x0110 // vmovdqu %ymm0, $1(%rax,%rdx) - LONG $0x447ffec5; WORD $0x2110 // vmovdqu %ymm0, $33(%rax,%rdx) - LONG $0x447ffec5; WORD $0x4110 // vmovdqu %ymm0, $65(%rax,%rdx) - LONG $0x447ffec5; WORD $0x6110 // vmovdqu %ymm0, $97(%rax,%rdx) - QUAD $0x00008110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $129(%rax,%rdx) - QUAD $0x0000a110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $161(%rax,%rdx) - QUAD $0x0000c110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $193(%rax,%rdx) - QUAD $0x0000e110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $225(%rax,%rdx) - QUAD $0x00010110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $257(%rax,%rdx) - QUAD $0x00012110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $289(%rax,%rdx) - QUAD $0x00014110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $321(%rax,%rdx) - QUAD $0x00016110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $353(%rax,%rdx) - QUAD $0x00018110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $385(%rax,%rdx) - QUAD $0x0001a110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $417(%rax,%rdx) - QUAD $0x0001c110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $449(%rax,%rdx) - QUAD $0x0001e110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $481(%rax,%rdx) - LONG $0x00c28148; WORD $0x0002; BYTE $0x00 // addq $512, %rdx - LONG $0x04c78348 // addq $4, %rdi - LONG $0xff6b850f; WORD $0xffff // jne LBB1_87, $-149(%rip) - -LBB1_88: - LONG $0x085c8d4a; BYTE $0x01 // leaq $1(%rax,%r9), %rbx - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x0030840f; WORD $0x0000 // je LBB1_91, $48(%rip) - LONG $0x10448d48; BYTE $0x61 // leaq $97(%rax,%rdx), %rax - WORD $0xf748; BYTE $0xde // negq %rsi - QUAD $0xfffff540056ffdc5 // vmovdqa $-2752(%rip), %ymm0 /* LCPI1_0(%rip) */ - -LBB1_90: - LONG $0x407ffec5; BYTE $0xa0 // vmovdqu %ymm0, $-96(%rax) - LONG $0x407ffec5; BYTE $0xc0 // vmovdqu %ymm0, $-64(%rax) - LONG $0x407ffec5; BYTE $0xe0 // vmovdqu %ymm0, $-32(%rax) - LONG $0x007ffec5 // vmovdqu %ymm0, (%rax) - LONG $0x80e88348 // subq $-128, %rax - WORD $0xff48; BYTE $0xc6 // incq %rsi - LONG $0xffe0850f; WORD $0xffff // jne LBB1_90, $-32(%rip) - -LBB1_91: - WORD $0x8944; BYTE $0xca // movl %r9d, %edx - WORD $0x394d; BYTE $0xc8 // cmpq %r9, %r8 - LONG $0x0014840f; WORD $0x0000 // je LBB1_115, $20(%rip) - LONG $0x90909090 // .p2align 4, 0x90 - -LBB1_92: - WORD $0x03c6; BYTE $0x30 // movb $48, (%rbx) - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0xc2ff // incl %edx - WORD $0xca39 // cmpl %ecx, %edx - LONG $0xfff08c0f; WORD $0xffff // jl LBB1_92, $-16(%rip) - -LBB1_115: - WORD $0x2944; BYTE $0xf3 // subl %r14d, %ebx - -LBB1_116: - WORD $0xd889 // movl %ebx, %eax - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB1_49: - LONG $0x00ff8148; WORD $0x9aca; BYTE $0x3b // cmpq $1000000000, %rdi - LONG $0x00000aba; BYTE $0x00 // movl $10, %edx - LONG $0xfff7e6e9; BYTE $0xff // jmp LBB1_50, $-2074(%rip) - -LBB1_1: - WORD $0xdb31 // xorl %ebx, %ebx - LONG $0xffffd4e9; BYTE $0xff // jmp LBB1_116, $-44(%rip) - -LBB1_5: - LONG $0xfffbcebb; BYTE $0xff // movl $-1074, %ebx - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - LONG $0xfff57ae9; BYTE $0xff // jmp LBB1_6, $-2694(%rip) - -LBB1_26: - LONG $0x00ff8148; WORD $0x9aca; BYTE $0x3b // cmpq $1000000000, %rdi - LONG $0x00000aba; BYTE $0x00 // movl $10, %edx - LONG $0xfffa30e9; BYTE $0xff // jmp LBB1_27, $-1488(%rip) - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_format_integer: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - BYTE $0x53 // pushq %rbx - WORD $0x8941; BYTE $0xd0 // movl %edx, %r8d - WORD $0x0149; BYTE $0xf0 // addq %rsi, %r8 - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x20e8c148 // shrq $32, %rax - LONG $0x0016850f; WORD $0x0000 // jne LBB2_2, $22(%rip) - WORD $0x894d; BYTE $0xc3 // movq %r8, %r11 - LONG $0x2710ff81; WORD $0x0000 // cmpl $10000, %edi - LONG $0x00c3830f; WORD $0x0000 // jae LBB2_5, $195(%rip) - -LBB2_4: - WORD $0xfa89 // movl %edi, %edx - LONG $0x00011ae9; BYTE $0x00 // jmp LBB2_7, $282(%rip) - -LBB2_2: - QUAD $0x77118461cefdb948; WORD $0xabcc // movabsq $-6067343680855748867, %rcx - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - WORD $0xf748; BYTE $0xe1 // mulq %rcx - LONG $0x1aeac148 // shrq $26, %rdx - LONG $0x1f00ca69; WORD $0xfa0a // imull $-100000000, %edx, %ecx - WORD $0xf901 // addl %edi, %ecx - LONG $0x1759b941; WORD $0xd1b7 // movl $3518437209, %r9d - WORD $0x8948; BYTE $0xc8 // movq %rcx, %rax - LONG $0xc1af0f49 // imulq %r9, %rax - LONG $0x2de8c148 // shrq $45, %rax - LONG $0x2710f869; WORD $0x0000 // imull $10000, %eax, %edi - WORD $0xf929 // subl %edi, %ecx - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - LONG $0xf9af0f49 // imulq %r9, %rdi - LONG $0x2defc148 // shrq $45, %rdi - LONG $0x2710ff69; WORD $0x0000 // imull $10000, %edi, %edi - WORD $0xf829 // subl %edi, %eax - WORD $0xb70f; BYTE $0xf9 // movzwl %cx, %edi - WORD $0xefc1; BYTE $0x02 // shrl $2, %edi - LONG $0x7bcf6944; WORD $0x0014; BYTE $0x00 // imull $5243, %edi, %r9d - LONG $0x11e9c141 // shrl $17, %r9d - LONG $0x64f96b41 // imull $100, %r9d, %edi - WORD $0xf929 // subl %edi, %ecx - LONG $0xd1b70f44 // movzwl %cx, %r10d - WORD $0xb70f; BYTE $0xf8 // movzwl %ax, %edi - WORD $0xefc1; BYTE $0x02 // shrl $2, %edi - LONG $0x147bff69; WORD $0x0000 // imull $5243, %edi, %edi - WORD $0xefc1; BYTE $0x11 // shrl $17, %edi - WORD $0xcf6b; BYTE $0x64 // imull $100, %edi, %ecx - WORD $0xc829 // subl %ecx, %eax - LONG $0xd8b70f44 // movzwl %ax, %r11d - LONG $0x700d8d48; WORD $0x00af; BYTE $0x00 // leaq $44912(%rip), %rcx /* _Digits(%rip) */ - LONG $0x04b70f42; BYTE $0x51 // movzwl (%rcx,%r10,2), %eax - LONG $0x40894166; BYTE $0xfe // movw %ax, $-2(%r8) - LONG $0x04b70f42; BYTE $0x49 // movzwl (%rcx,%r9,2), %eax - LONG $0x40894166; BYTE $0xfc // movw %ax, $-4(%r8) - LONG $0x04b70f42; BYTE $0x59 // movzwl (%rcx,%r11,2), %eax - LONG $0x40894166; BYTE $0xfa // movw %ax, $-6(%r8) - LONG $0xf8588d4d // leaq $-8(%r8), %r11 - LONG $0x790cb70f // movzwl (%rcx,%rdi,2), %ecx - LONG $0x48894166; BYTE $0xf8 // movw %cx, $-8(%r8) - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - LONG $0x2710ff81; WORD $0x0000 // cmpl $10000, %edi - LONG $0xff3d820f; WORD $0xffff // jb LBB2_4, $-195(%rip) - -LBB2_5: - LONG $0x1759b941; WORD $0xd1b7 // movl $3518437209, %r9d - LONG $0x29158d4c; WORD $0x00af; BYTE $0x00 // leaq $44841(%rip), %r10 /* _Digits(%rip) */ - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB2_6: - WORD $0xfa89 // movl %edi, %edx - LONG $0xd1af0f49 // imulq %r9, %rdx - LONG $0x2deac148 // shrq $45, %rdx - LONG $0xd8f0ca69; WORD $0xffff // imull $-10000, %edx, %ecx - WORD $0xf901 // addl %edi, %ecx - LONG $0x1fc16948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rcx, %rax - LONG $0x25e8c148 // shrq $37, %rax - WORD $0xd86b; BYTE $0x64 // imull $100, %eax, %ebx - WORD $0xd929 // subl %ebx, %ecx - LONG $0x0cb70f41; BYTE $0x4a // movzwl (%r10,%rcx,2), %ecx - LONG $0x4b894166; BYTE $0xfe // movw %cx, $-2(%r11) - LONG $0x04b70f41; BYTE $0x42 // movzwl (%r10,%rax,2), %eax - LONG $0x43894166; BYTE $0xfc // movw %ax, $-4(%r11) - LONG $0xfcc38349 // addq $-4, %r11 - LONG $0xe0ffff81; WORD $0x05f5 // cmpl $99999999, %edi - WORD $0xd789 // movl %edx, %edi - LONG $0xffb8870f; WORD $0xffff // ja LBB2_6, $-72(%rip) - -LBB2_7: - WORD $0xfa83; BYTE $0x64 // cmpl $100, %edx - LONG $0x002d820f; WORD $0x0000 // jb LBB2_9, $45(%rip) - WORD $0xb70f; BYTE $0xc2 // movzwl %dx, %eax - WORD $0xe8c1; BYTE $0x02 // shrl $2, %eax - LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax - WORD $0xe8c1; BYTE $0x11 // shrl $17, %eax - WORD $0xc86b; BYTE $0x64 // imull $100, %eax, %ecx - WORD $0xca29 // subl %ecx, %edx - WORD $0xb70f; BYTE $0xca // movzwl %dx, %ecx - LONG $0xb1158d48; WORD $0x00ae; BYTE $0x00 // leaq $44721(%rip), %rdx /* _Digits(%rip) */ - LONG $0x4a0cb70f // movzwl (%rdx,%rcx,2), %ecx - LONG $0x4b894166; BYTE $0xfe // movw %cx, $-2(%r11) - LONG $0xfec38349 // addq $-2, %r11 - WORD $0xc289 // movl %eax, %edx - -LBB2_9: - WORD $0xfa83; BYTE $0x0a // cmpl $10, %edx - LONG $0x0018820f; WORD $0x0000 // jb LBB2_11, $24(%rip) - WORD $0xd089 // movl %edx, %eax - LONG $0x900d8d48; WORD $0x00ae; BYTE $0x00 // leaq $44688(%rip), %rcx /* _Digits(%rip) */ - LONG $0x4104b70f // movzwl (%rcx,%rax,2), %eax - LONG $0x43894166; BYTE $0xfe // movw %ax, $-2(%r11) - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB2_11: - WORD $0xc280; BYTE $0x30 // addb $48, %dl - WORD $0x1688 // movb %dl, (%rsi) - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -_i64toa: - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x0005880f; WORD $0x0000 // js LBB3_1, $5(%rip) - LONG $0x000062e9; BYTE $0x00 // jmp _u64toa, $98(%rip) - -LBB3_1: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x07c6; BYTE $0x2d // movb $45, (%rdi) - WORD $0xff48; BYTE $0xc7 // incq %rdi - WORD $0xf748; BYTE $0xde // negq %rsi - LONG $0x000050e8; BYTE $0x00 // callq _u64toa, $80(%rip) - WORD $0xc0ff // incl %eax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x0000000000000000; LONG $0x00000000 // .p2align 4, 0x00 - -LCPI4_0: - QUAD $0x00000000d1b71759 // .quad 3518437209 - QUAD $0x00000000d1b71759 // .quad 3518437209 - -LCPI4_3: - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - -LCPI4_4: - QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' - - // .p2align 3, 0x00 -LCPI4_1: - QUAD $0x80003334147b20c5 // .quad -9223315738079846203 - -LCPI4_2: - QUAD $0x8000200008000080 // .quad -9223336852348469120 - - // .p2align 4, 0x90 -_u64toa: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - LONG $0x0ffe8148; WORD $0x0027; BYTE $0x00 // cmpq $9999, %rsi - LONG $0x00a2870f; WORD $0x0000 // ja LBB4_8, $162(%rip) - WORD $0xb70f; BYTE $0xc6 // movzwl %si, %eax - WORD $0xe8c1; BYTE $0x02 // shrl $2, %eax - LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax - WORD $0xe8c1; BYTE $0x11 // shrl $17, %eax - LONG $0x00148d48 // leaq (%rax,%rax), %rdx - WORD $0xc06b; BYTE $0x64 // imull $100, %eax, %eax - WORD $0xf189 // movl %esi, %ecx - WORD $0xc129 // subl %eax, %ecx - WORD $0xb70f; BYTE $0xc1 // movzwl %cx, %eax - WORD $0x0148; BYTE $0xc0 // addq %rax, %rax - LONG $0x03e8fe81; WORD $0x0000 // cmpl $1000, %esi - LONG $0x0016820f; WORD $0x0000 // jb LBB4_3, $22(%rip) - LONG $0xbc0d8d48; WORD $0x00ad; BYTE $0x00 // leaq $44476(%rip), %rcx /* _Digits(%rip) */ - WORD $0x0c8a; BYTE $0x0a // movb (%rdx,%rcx), %cl - WORD $0x0f88 // movb %cl, (%rdi) - LONG $0x000001b9; BYTE $0x00 // movl $1, %ecx - LONG $0x00000be9; BYTE $0x00 // jmp LBB4_4, $11(%rip) - -LBB4_3: - WORD $0xc931 // xorl %ecx, %ecx - WORD $0xfe83; BYTE $0x64 // cmpl $100, %esi - LONG $0x0045820f; WORD $0x0000 // jb LBB4_5, $69(%rip) - -LBB4_4: - WORD $0xb70f; BYTE $0xd2 // movzwl %dx, %edx - LONG $0x01ca8348 // orq $1, %rdx - LONG $0x94358d48; WORD $0x00ad; BYTE $0x00 // leaq $44436(%rip), %rsi /* _Digits(%rip) */ - WORD $0x148a; BYTE $0x32 // movb (%rdx,%rsi), %dl - WORD $0xce89 // movl %ecx, %esi - WORD $0xc1ff // incl %ecx - WORD $0x1488; BYTE $0x37 // movb %dl, (%rdi,%rsi) - -LBB4_6: - LONG $0x83158d48; WORD $0x00ad; BYTE $0x00 // leaq $44419(%rip), %rdx /* _Digits(%rip) */ - WORD $0x148a; BYTE $0x10 // movb (%rax,%rdx), %dl - WORD $0xce89 // movl %ecx, %esi - WORD $0xc1ff // incl %ecx - WORD $0x1488; BYTE $0x37 // movb %dl, (%rdi,%rsi) - -LBB4_7: - WORD $0xb70f; BYTE $0xc0 // movzwl %ax, %eax - LONG $0x01c88348 // orq $1, %rax - LONG $0x6b158d48; WORD $0x00ad; BYTE $0x00 // leaq $44395(%rip), %rdx /* _Digits(%rip) */ - WORD $0x048a; BYTE $0x10 // movb (%rax,%rdx), %al - WORD $0xca89 // movl %ecx, %edx - WORD $0xc1ff // incl %ecx - WORD $0x0488; BYTE $0x17 // movb %al, (%rdi,%rdx) - WORD $0xc889 // movl %ecx, %eax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB4_5: - WORD $0xc931 // xorl %ecx, %ecx - WORD $0xfe83; BYTE $0x0a // cmpl $10, %esi - LONG $0xffc8830f; WORD $0xffff // jae LBB4_6, $-56(%rip) - LONG $0xffffd4e9; BYTE $0xff // jmp LBB4_7, $-44(%rip) - -LBB4_8: - LONG $0xfffe8148; WORD $0xf5e0; BYTE $0x05 // cmpq $99999999, %rsi - LONG $0x011e870f; WORD $0x0000 // ja LBB4_16, $286(%rip) - WORD $0xf089 // movl %esi, %eax - LONG $0xb71759ba; BYTE $0xd1 // movl $3518437209, %edx - LONG $0xd0af0f48 // imulq %rax, %rdx - LONG $0x2deac148 // shrq $45, %rdx - LONG $0x10c26944; WORD $0x0027; BYTE $0x00 // imull $10000, %edx, %r8d - WORD $0xf189 // movl %esi, %ecx - WORD $0x2944; BYTE $0xc1 // subl %r8d, %ecx - LONG $0x83d0694c; WORD $0x1bde; BYTE $0x43 // imulq $1125899907, %rax, %r10 - LONG $0x31eac149 // shrq $49, %r10 - LONG $0xfee28341 // andl $-2, %r10d - WORD $0xb70f; BYTE $0xc2 // movzwl %dx, %eax - WORD $0xe8c1; BYTE $0x02 // shrl $2, %eax - LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax - WORD $0xe8c1; BYTE $0x11 // shrl $17, %eax - WORD $0xc06b; BYTE $0x64 // imull $100, %eax, %eax - WORD $0xc229 // subl %eax, %edx - LONG $0xcab70f44 // movzwl %dx, %r9d - WORD $0x014d; BYTE $0xc9 // addq %r9, %r9 - WORD $0xb70f; BYTE $0xc1 // movzwl %cx, %eax - WORD $0xe8c1; BYTE $0x02 // shrl $2, %eax - LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax - WORD $0xe8c1; BYTE $0x11 // shrl $17, %eax - LONG $0x00048d4c // leaq (%rax,%rax), %r8 - WORD $0xc06b; BYTE $0x64 // imull $100, %eax, %eax - WORD $0xc129 // subl %eax, %ecx - LONG $0xd9b70f44 // movzwl %cx, %r11d - WORD $0x014d; BYTE $0xdb // addq %r11, %r11 - LONG $0x9680fe81; WORD $0x0098 // cmpl $10000000, %esi - LONG $0x0017820f; WORD $0x0000 // jb LBB4_11, $23(%rip) - LONG $0xc9058d48; WORD $0x00ac; BYTE $0x00 // leaq $44233(%rip), %rax /* _Digits(%rip) */ - LONG $0x02048a41 // movb (%r10,%rax), %al - WORD $0x0788 // movb %al, (%rdi) - LONG $0x000001b9; BYTE $0x00 // movl $1, %ecx - LONG $0x00000ee9; BYTE $0x00 // jmp LBB4_12, $14(%rip) - -LBB4_11: - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x4240fe81; WORD $0x000f // cmpl $1000000, %esi - LONG $0x0076820f; WORD $0x0000 // jb LBB4_13, $118(%rip) - -LBB4_12: - WORD $0x8944; BYTE $0xd0 // movl %r10d, %eax - LONG $0x01c88348 // orq $1, %rax - LONG $0x9d358d48; WORD $0x00ac; BYTE $0x00 // leaq $44189(%rip), %rsi /* _Digits(%rip) */ - WORD $0x048a; BYTE $0x30 // movb (%rax,%rsi), %al - WORD $0xce89 // movl %ecx, %esi - WORD $0xc1ff // incl %ecx - WORD $0x0488; BYTE $0x37 // movb %al, (%rdi,%rsi) - -LBB4_14: - LONG $0x8c058d48; WORD $0x00ac; BYTE $0x00 // leaq $44172(%rip), %rax /* _Digits(%rip) */ - LONG $0x01048a41 // movb (%r9,%rax), %al - WORD $0xce89 // movl %ecx, %esi - WORD $0xc1ff // incl %ecx - WORD $0x0488; BYTE $0x37 // movb %al, (%rdi,%rsi) - -LBB4_15: - LONG $0xc1b70f41 // movzwl %r9w, %eax - LONG $0x01c88348 // orq $1, %rax - LONG $0x72358d48; WORD $0x00ac; BYTE $0x00 // leaq $44146(%rip), %rsi /* _Digits(%rip) */ - WORD $0x048a; BYTE $0x30 // movb (%rax,%rsi), %al - WORD $0xca89 // movl %ecx, %edx - WORD $0x0488; BYTE $0x17 // movb %al, (%rdi,%rdx) - LONG $0x30048a41 // movb (%r8,%rsi), %al - LONG $0x01174488 // movb %al, $1(%rdi,%rdx) - LONG $0xc0b70f41 // movzwl %r8w, %eax - LONG $0x01c88348 // orq $1, %rax - WORD $0x048a; BYTE $0x30 // movb (%rax,%rsi), %al - LONG $0x02174488 // movb %al, $2(%rdi,%rdx) - LONG $0x33048a41 // movb (%r11,%rsi), %al - LONG $0x03174488 // movb %al, $3(%rdi,%rdx) - LONG $0xc3b70f41 // movzwl %r11w, %eax - LONG $0x01c88348 // orq $1, %rax - WORD $0x048a; BYTE $0x30 // movb (%rax,%rsi), %al - WORD $0xc183; BYTE $0x05 // addl $5, %ecx - LONG $0x04174488 // movb %al, $4(%rdi,%rdx) - WORD $0xc889 // movl %ecx, %eax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB4_13: - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x86a0fe81; WORD $0x0001 // cmpl $100000, %esi - LONG $0xff94830f; WORD $0xffff // jae LBB4_14, $-108(%rip) - LONG $0xffffa1e9; BYTE $0xff // jmp LBB4_15, $-95(%rip) - -LBB4_16: - QUAD $0x86f26fc0ffffb848; WORD $0x0023 // movabsq $9999999999999999, %rax - WORD $0x3948; BYTE $0xc6 // cmpq %rax, %rsi - LONG $0x0105870f; WORD $0x0000 // ja LBB4_18, $261(%rip) - QUAD $0x77118461cefdb948; WORD $0xabcc // movabsq $-6067343680855748867, %rcx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf748; BYTE $0xe1 // mulq %rcx - LONG $0x1aeac148 // shrq $26, %rdx - LONG $0xe100c269; WORD $0x05f5 // imull $100000000, %edx, %eax - WORD $0xc629 // subl %eax, %esi - LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - QUAD $0xfffffda70d6ff9c5 // vmovdqa $-601(%rip), %xmm1 /* LCPI4_0(%rip) */ - LONG $0xd1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm2 - LONG $0xd273e9c5; BYTE $0x2d // vpsrlq $45, %xmm2, %xmm2 - LONG $0x002710b8; BYTE $0x00 // movl $10000, %eax - LONG $0x6ef9e1c4; BYTE $0xd8 // vmovq %rax, %xmm3 - LONG $0xe3f4e9c5 // vpmuludq %xmm3, %xmm2, %xmm4 - LONG $0xc4faf9c5 // vpsubd %xmm4, %xmm0, %xmm0 - LONG $0xc061e9c5 // vpunpcklwd %xmm0, %xmm2, %xmm0 - LONG $0xf073f9c5; BYTE $0x02 // vpsllq $2, %xmm0, %xmm0 - LONG $0xc070fbc5; BYTE $0x50 // vpshuflw $80, %xmm0, %xmm0 - LONG $0xc070f9c5; BYTE $0x50 // vpshufd $80, %xmm0, %xmm0 - QUAD $0xfffffda11512fbc5 // vmovddup $-607(%rip), %xmm2 /* LCPI4_1(%rip) */ - LONG $0xc2e4f9c5 // vpmulhuw %xmm2, %xmm0, %xmm0 - QUAD $0xfffffd9d2512fbc5 // vmovddup $-611(%rip), %xmm4 /* LCPI4_2(%rip) */ - LONG $0xc4e4f9c5 // vpmulhuw %xmm4, %xmm0, %xmm0 - QUAD $0xfffffd692d6ff9c5 // vmovdqa $-663(%rip), %xmm5 /* LCPI4_3(%rip) */ - LONG $0xf5d5f9c5 // vpmullw %xmm5, %xmm0, %xmm6 - LONG $0xf673c9c5; BYTE $0x10 // vpsllq $16, %xmm6, %xmm6 - LONG $0xc6f9f9c5 // vpsubw %xmm6, %xmm0, %xmm0 - LONG $0xf66ef9c5 // vmovd %esi, %xmm6 - LONG $0xc9f4c9c5 // vpmuludq %xmm1, %xmm6, %xmm1 - LONG $0xd173f1c5; BYTE $0x2d // vpsrlq $45, %xmm1, %xmm1 - LONG $0xdbf4f1c5 // vpmuludq %xmm3, %xmm1, %xmm3 - LONG $0xdbfac9c5 // vpsubd %xmm3, %xmm6, %xmm3 - LONG $0xcb61f1c5 // vpunpcklwd %xmm3, %xmm1, %xmm1 - LONG $0xf173f1c5; BYTE $0x02 // vpsllq $2, %xmm1, %xmm1 - LONG $0xc970fbc5; BYTE $0x50 // vpshuflw $80, %xmm1, %xmm1 - LONG $0xc970f9c5; BYTE $0x50 // vpshufd $80, %xmm1, %xmm1 - LONG $0xcae4f1c5 // vpmulhuw %xmm2, %xmm1, %xmm1 - LONG $0xcce4f1c5 // vpmulhuw %xmm4, %xmm1, %xmm1 - LONG $0xd5d5f1c5 // vpmullw %xmm5, %xmm1, %xmm2 - LONG $0xf273e9c5; BYTE $0x10 // vpsllq $16, %xmm2, %xmm2 - LONG $0xcaf9f1c5 // vpsubw %xmm2, %xmm1, %xmm1 - LONG $0xc167f9c5 // vpackuswb %xmm1, %xmm0, %xmm0 - QUAD $0xfffffd230dfcf9c5 // vpaddb $-733(%rip), %xmm0, %xmm1 /* LCPI4_4(%rip) */ - LONG $0xd2efe9c5 // vpxor %xmm2, %xmm2, %xmm2 - LONG $0xc274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - LONG $0x0080000d; BYTE $0x00 // orl $32768, %eax - LONG $0xff7fff35; BYTE $0xff // xorl $-32769, %eax - WORD $0xbc0f; BYTE $0xc0 // bsfl %eax, %eax - LONG $0x000010b9; BYTE $0x00 // movl $16, %ecx - WORD $0xc129 // subl %eax, %ecx - LONG $0x04e0c148 // shlq $4, %rax - LONG $0x78158d48; WORD $0x00d2; BYTE $0x00 // leaq $53880(%rip), %rdx /* _VecShiftShuffles(%rip) */ - LONG $0x0071e2c4; WORD $0x1004 // vpshufb (%rax,%rdx), %xmm1, %xmm0 - LONG $0x077ffac5 // vmovdqu %xmm0, (%rdi) - WORD $0xc889 // movl %ecx, %eax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB4_18: - QUAD $0x652fb1137857b948; WORD $0x39a5 // movabsq $4153837486827862103, %rcx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf748; BYTE $0xe1 // mulq %rcx - LONG $0x33eac148 // shrq $51, %rdx - QUAD $0x86f26fc10000b848; WORD $0x0023 // movabsq $10000000000000000, %rax - LONG $0xc2af0f48 // imulq %rdx, %rax - WORD $0x2948; BYTE $0xc6 // subq %rax, %rsi - WORD $0xfa83; BYTE $0x09 // cmpl $9, %edx - LONG $0x000f870f; WORD $0x0000 // ja LBB4_20, $15(%rip) - WORD $0xc280; BYTE $0x30 // addb $48, %dl - WORD $0x1788 // movb %dl, (%rdi) - LONG $0x000001b9; BYTE $0x00 // movl $1, %ecx - LONG $0x0000bae9; BYTE $0x00 // jmp LBB4_25, $186(%rip) - -LBB4_20: - WORD $0xfa83; BYTE $0x63 // cmpl $99, %edx - LONG $0x001f870f; WORD $0x0000 // ja LBB4_22, $31(%rip) - WORD $0xd089 // movl %edx, %eax - LONG $0xbb0d8d48; WORD $0x00aa; BYTE $0x00 // leaq $43707(%rip), %rcx /* _Digits(%rip) */ - WORD $0x148a; BYTE $0x41 // movb (%rcx,%rax,2), %dl - LONG $0x0141448a // movb $1(%rcx,%rax,2), %al - WORD $0x1788 // movb %dl, (%rdi) - WORD $0x4788; BYTE $0x01 // movb %al, $1(%rdi) - LONG $0x000002b9; BYTE $0x00 // movl $2, %ecx - LONG $0x000092e9; BYTE $0x00 // jmp LBB4_25, $146(%rip) - -LBB4_22: - WORD $0xd089 // movl %edx, %eax - WORD $0xe8c1; BYTE $0x02 // shrl $2, %eax - LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax - WORD $0xe8c1; BYTE $0x11 // shrl $17, %eax - LONG $0x03e7fa81; WORD $0x0000 // cmpl $999, %edx - LONG $0x003c870f; WORD $0x0000 // ja LBB4_24, $60(%rip) - WORD $0xc083; BYTE $0x30 // addl $48, %eax - WORD $0x0788 // movb %al, (%rdi) - WORD $0xb70f; BYTE $0xc2 // movzwl %dx, %eax - WORD $0xc189 // movl %eax, %ecx - WORD $0xe9c1; BYTE $0x02 // shrl $2, %ecx - LONG $0x147bc969; WORD $0x0000 // imull $5243, %ecx, %ecx - WORD $0xe9c1; BYTE $0x11 // shrl $17, %ecx - WORD $0xc96b; BYTE $0x64 // imull $100, %ecx, %ecx - WORD $0xc829 // subl %ecx, %eax - WORD $0xb70f; BYTE $0xc0 // movzwl %ax, %eax - LONG $0x660d8d48; WORD $0x00aa; BYTE $0x00 // leaq $43622(%rip), %rcx /* _Digits(%rip) */ - WORD $0x148a; BYTE $0x41 // movb (%rcx,%rax,2), %dl - LONG $0x0141448a // movb $1(%rcx,%rax,2), %al - WORD $0x5788; BYTE $0x01 // movb %dl, $1(%rdi) - WORD $0x4788; BYTE $0x02 // movb %al, $2(%rdi) - LONG $0x000003b9; BYTE $0x00 // movl $3, %ecx - LONG $0x00003ce9; BYTE $0x00 // jmp LBB4_25, $60(%rip) - -LBB4_24: - WORD $0xc86b; BYTE $0x64 // imull $100, %eax, %ecx - WORD $0xca29 // subl %ecx, %edx - WORD $0xb70f; BYTE $0xc0 // movzwl %ax, %eax - LONG $0x40058d4c; WORD $0x00aa; BYTE $0x00 // leaq $43584(%rip), %r8 /* _Digits(%rip) */ - LONG $0x400c8a41 // movb (%r8,%rax,2), %cl - LONG $0x40448a41; BYTE $0x01 // movb $1(%r8,%rax,2), %al - WORD $0x0f88 // movb %cl, (%rdi) - WORD $0x4788; BYTE $0x01 // movb %al, $1(%rdi) - WORD $0xb70f; BYTE $0xc2 // movzwl %dx, %eax - LONG $0x400c8a41 // movb (%r8,%rax,2), %cl - WORD $0x0148; BYTE $0xc0 // addq %rax, %rax - WORD $0x4f88; BYTE $0x02 // movb %cl, $2(%rdi) - WORD $0xc883; BYTE $0x01 // orl $1, %eax - WORD $0xb70f; BYTE $0xc0 // movzwl %ax, %eax - LONG $0x00048a42 // movb (%rax,%r8), %al - WORD $0x4788; BYTE $0x03 // movb %al, $3(%rdi) - LONG $0x000004b9; BYTE $0x00 // movl $4, %ecx - -LBB4_25: - QUAD $0x77118461cefdba48; WORD $0xabcc // movabsq $-6067343680855748867, %rdx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf748; BYTE $0xe2 // mulq %rdx - LONG $0x1aeac148 // shrq $26, %rdx - LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - QUAD $0xfffffbb30d6ff9c5 // vmovdqa $-1101(%rip), %xmm1 /* LCPI4_0(%rip) */ - LONG $0xd1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm2 - LONG $0xd273e9c5; BYTE $0x2d // vpsrlq $45, %xmm2, %xmm2 - LONG $0x002710b8; BYTE $0x00 // movl $10000, %eax - LONG $0x6ef9e1c4; BYTE $0xd8 // vmovq %rax, %xmm3 - LONG $0xe3f4e9c5 // vpmuludq %xmm3, %xmm2, %xmm4 - LONG $0xc4faf9c5 // vpsubd %xmm4, %xmm0, %xmm0 - LONG $0xc061e9c5 // vpunpcklwd %xmm0, %xmm2, %xmm0 - LONG $0xf073f9c5; BYTE $0x02 // vpsllq $2, %xmm0, %xmm0 - LONG $0xc070fbc5; BYTE $0x50 // vpshuflw $80, %xmm0, %xmm0 - LONG $0xc070f9c5; BYTE $0x50 // vpshufd $80, %xmm0, %xmm0 - QUAD $0xfffffbad1512fbc5 // vmovddup $-1107(%rip), %xmm2 /* LCPI4_1(%rip) */ - LONG $0xc2e4f9c5 // vpmulhuw %xmm2, %xmm0, %xmm0 - QUAD $0xfffffba92512fbc5 // vmovddup $-1111(%rip), %xmm4 /* LCPI4_2(%rip) */ - LONG $0xc4e4f9c5 // vpmulhuw %xmm4, %xmm0, %xmm0 - QUAD $0xfffffb752d6ff9c5 // vmovdqa $-1163(%rip), %xmm5 /* LCPI4_3(%rip) */ - LONG $0xf5d5f9c5 // vpmullw %xmm5, %xmm0, %xmm6 - LONG $0xf673c9c5; BYTE $0x10 // vpsllq $16, %xmm6, %xmm6 - LONG $0xc6f9f9c5 // vpsubw %xmm6, %xmm0, %xmm0 - LONG $0xe100c269; WORD $0x05f5 // imull $100000000, %edx, %eax - WORD $0xc629 // subl %eax, %esi - LONG $0xf66ef9c5 // vmovd %esi, %xmm6 - LONG $0xc9f4c9c5 // vpmuludq %xmm1, %xmm6, %xmm1 - LONG $0xd173f1c5; BYTE $0x2d // vpsrlq $45, %xmm1, %xmm1 - LONG $0xdbf4f1c5 // vpmuludq %xmm3, %xmm1, %xmm3 - LONG $0xdbfac9c5 // vpsubd %xmm3, %xmm6, %xmm3 - LONG $0xcb61f1c5 // vpunpcklwd %xmm3, %xmm1, %xmm1 - LONG $0xf173f1c5; BYTE $0x02 // vpsllq $2, %xmm1, %xmm1 - LONG $0xc970fbc5; BYTE $0x50 // vpshuflw $80, %xmm1, %xmm1 - LONG $0xc970f9c5; BYTE $0x50 // vpshufd $80, %xmm1, %xmm1 - LONG $0xcae4f1c5 // vpmulhuw %xmm2, %xmm1, %xmm1 - LONG $0xcce4f1c5 // vpmulhuw %xmm4, %xmm1, %xmm1 - LONG $0xd5d5f1c5 // vpmullw %xmm5, %xmm1, %xmm2 - LONG $0xf273e9c5; BYTE $0x10 // vpsllq $16, %xmm2, %xmm2 - LONG $0xcaf9f1c5 // vpsubw %xmm2, %xmm1, %xmm1 - LONG $0xc167f9c5 // vpackuswb %xmm1, %xmm0, %xmm0 - QUAD $0xfffffb2705fcf9c5 // vpaddb $-1241(%rip), %xmm0, %xmm0 /* LCPI4_4(%rip) */ - WORD $0xc889 // movl %ecx, %eax - LONG $0x047ffac5; BYTE $0x07 // vmovdqu %xmm0, (%rdi,%rax) - WORD $0xc983; BYTE $0x10 // orl $16, %ecx - WORD $0xc889 // movl %ecx, %eax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x0000000000000000; BYTE $0x00 // .p2align 4, 0x00 - -LCPI5_0: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -LCPI5_1: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - -LCPI5_2: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - - // .p2align 4, 0x90 -_quote: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax - WORD $0x8949; BYTE $0xcd // movq %rcx, %r13 - WORD $0x8949; BYTE $0xd7 // movq %rdx, %r15 - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0x8b4c; BYTE $0x31 // movq (%rcx), %r14 - LONG $0x01c0f641 // testb $1, %r8b - LONG $0xcb0d8d48; WORD $0x00d0; BYTE $0x00 // leaq $53451(%rip), %rcx /* __SingleQuoteTab(%rip) */ - LONG $0xc4058d4c; WORD $0x00e0; BYTE $0x00 // leaq $57540(%rip), %r8 /* __DoubleQuoteTab(%rip) */ - LONG $0xc1440f4c // cmoveq %rcx, %r8 - QUAD $0x00000000f50c8d48 // leaq (,%rsi,8), %rcx - WORD $0x3949; BYTE $0xce // cmpq %rcx, %r14 - LONG $0x04328d0f; WORD $0x0000 // jge LBB5_51, $1074(%rip) - WORD $0x894d; BYTE $0xfb // movq %r15, %r11 - WORD $0x8949; BYTE $0xfa // movq %rdi, %r10 - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0414840f; WORD $0x0000 // je LBB5_74, $1044(%rip) - QUAD $0xffffff78056ff9c5 // vmovdqa $-136(%rip), %xmm0 /* LCPI5_0(%rip) */ - QUAD $0xffffff800d6ff9c5 // vmovdqa $-128(%rip), %xmm1 /* LCPI5_1(%rip) */ - QUAD $0xffffff88156ff9c5 // vmovdqa $-120(%rip), %xmm2 /* LCPI5_2(%rip) */ - LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 - WORD $0x8949; BYTE $0xfa // movq %rdi, %r10 - WORD $0x894d; BYTE $0xfb // movq %r15, %r11 - LONG $0xd07d894c // movq %r15, $-48(%rbp) - -LBB5_3: - LONG $0x0ff88348 // cmpq $15, %rax - WORD $0x9f0f; BYTE $0xc2 // setg %dl - WORD $0x894d; BYTE $0xf1 // movq %r14, %r9 - WORD $0x894d; BYTE $0xdf // movq %r11, %r15 - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x894d; BYTE $0xd4 // movq %r10, %r12 - LONG $0x10fe8349 // cmpq $16, %r14 - LONG $0x008d8c0f; WORD $0x0000 // jl LBB5_9, $141(%rip) - LONG $0x10f88348 // cmpq $16, %rax - LONG $0x00838c0f; WORD $0x0000 // jl LBB5_9, $131(%rip) - WORD $0x894d; BYTE $0xd4 // movq %r10, %r12 - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - WORD $0x894d; BYTE $0xdf // movq %r11, %r15 - WORD $0x894c; BYTE $0xf3 // movq %r14, %rbx - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB5_6: - LONG $0x6f7ac1c4; WORD $0x2424 // vmovdqu (%r12), %xmm4 - LONG $0xec64f9c5 // vpcmpgtb %xmm4, %xmm0, %xmm5 - LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 - LONG $0xfa74d9c5 // vpcmpeqb %xmm2, %xmm4, %xmm7 - LONG $0xf6ebc1c5 // vpor %xmm6, %xmm7, %xmm6 - LONG $0x7f7ac1c4; BYTE $0x27 // vmovdqu %xmm4, (%r15) - LONG $0xe364d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm4 - LONG $0xe4dbd1c5 // vpand %xmm4, %xmm5, %xmm4 - LONG $0xe4ebc9c5 // vpor %xmm4, %xmm6, %xmm4 - LONG $0xccd7f9c5 // vpmovmskb %xmm4, %ecx - WORD $0x8566; BYTE $0xc9 // testw %cx, %cx - LONG $0x011a850f; WORD $0x0000 // jne LBB5_18, $282(%rip) - LONG $0x10c48349 // addq $16, %r12 - LONG $0x10c78349 // addq $16, %r15 - LONG $0xf04e8d48 // leaq $-16(%rsi), %rcx - LONG $0xf04b8d4c // leaq $-16(%rbx), %r9 - LONG $0x1ffe8348 // cmpq $31, %rsi - WORD $0x9f0f; BYTE $0xc2 // setg %dl - LONG $0x20fe8348 // cmpq $32, %rsi - LONG $0x001b8c0f; WORD $0x0000 // jl LBB5_9, $27(%rip) - WORD $0x8948; BYTE $0xce // movq %rcx, %rsi - LONG $0x1ffb8348 // cmpq $31, %rbx - WORD $0x894c; BYTE $0xcb // movq %r9, %rbx - LONG $0xff9b8f0f; WORD $0xffff // jg LBB5_6, $-101(%rip) - QUAD $0x9090909090909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB5_9: - WORD $0xd284 // testb %dl, %dl - LONG $0x006a840f; WORD $0x0000 // je LBB5_13, $106(%rip) - WORD $0x894c; BYTE $0xea // movq %r13, %rdx - LONG $0x6f7ac1c4; WORD $0x2424 // vmovdqu (%r12), %xmm4 - LONG $0xec64f9c5 // vpcmpgtb %xmm4, %xmm0, %xmm5 - LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 - LONG $0xfa74d9c5 // vpcmpeqb %xmm2, %xmm4, %xmm7 - LONG $0xf6ebc1c5 // vpor %xmm6, %xmm7, %xmm6 - LONG $0xfb64d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm7 - LONG $0xefdbd1c5 // vpand %xmm7, %xmm5, %xmm5 - LONG $0xedebc9c5 // vpor %xmm5, %xmm6, %xmm5 - LONG $0xcdd7f9c5 // vpmovmskb %xmm5, %ecx - LONG $0x0000c981; WORD $0x0001 // orl $65536, %ecx - LONG $0xe9bc0f44 // bsfl %ecx, %r13d - LONG $0x7ef9e1c4; BYTE $0xe1 // vmovq %xmm4, %rcx - WORD $0x394d; BYTE $0xe9 // cmpq %r13, %r9 - LONG $0x00be8d0f; WORD $0x0000 // jge LBB5_19, $190(%rip) - LONG $0x08f98349 // cmpq $8, %r9 - LONG $0x00ff820f; WORD $0x0000 // jb LBB5_22, $255(%rip) - WORD $0x8949; BYTE $0x0f // movq %rcx, (%r15) - LONG $0x246c8d4d; BYTE $0x08 // leaq $8(%r12), %r13 - LONG $0x08c78349 // addq $8, %r15 - LONG $0xf8718d49 // leaq $-8(%r9), %rsi - LONG $0x04fe8348 // cmpq $4, %rsi - LONG $0x00f58d0f; WORD $0x0000 // jge LBB5_23, $245(%rip) - LONG $0x000103e9; BYTE $0x00 // jmp LBB5_24, $259(%rip) - -LBB5_13: - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x01458e0f; WORD $0x0000 // jle LBB5_28, $325(%rip) - WORD $0x8948; BYTE $0xca // movq %rcx, %rdx - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x013c8e0f; WORD $0x0000 // jle LBB5_29, $316(%rip) - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB5_15: - LONG $0x34b60f41; BYTE $0x24 // movzbl (%r12), %esi - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - LONG $0x04e2c148 // shlq $4, %rdx - LONG $0x2d1d8d48; WORD $0x00cf; BYTE $0x00 // leaq $53037(%rip), %rbx /* __SingleQuoteTab(%rip) */ - LONG $0x1a3c8348; BYTE $0x00 // cmpq $0, (%rdx,%rbx) - LONG $0x0082850f; WORD $0x0000 // jne LBB5_21, $130(%rip) - LONG $0xff518d48 // leaq $-1(%rcx), %rdx - WORD $0xff49; BYTE $0xc4 // incq %r12 - WORD $0x8841; BYTE $0x37 // movb %sil, (%r15) - LONG $0x02f98348 // cmpq $2, %rcx - LONG $0x01018c0f; WORD $0x0000 // jl LBB5_29, $257(%rip) - LONG $0xff718d49 // leaq $-1(%r9), %rsi - WORD $0xff49; BYTE $0xc7 // incq %r15 - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - LONG $0x01f98349 // cmpq $1, %r9 - WORD $0x8949; BYTE $0xf1 // movq %rsi, %r9 - LONG $0xffb78f0f; WORD $0xffff // jg LBB5_15, $-73(%rip) - LONG $0x0000e5e9; BYTE $0x00 // jmp LBB5_29, $229(%rip) - -LBB5_18: - WORD $0xb70f; BYTE $0xc9 // movzwl %cx, %ecx - WORD $0x294d; BYTE $0xd4 // subq %r10, %r12 - LONG $0xc9bc0f44 // bsfl %ecx, %r9d - WORD $0x014d; BYTE $0xe1 // addq %r12, %r9 - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0xd07d8b4c // movq $-48(%rbp), %r15 - QUAD $0x000300000001bc49; WORD $0x0000 // movabsq $12884901889, %r12 - LONG $0x0166890f; WORD $0x0000 // jns LBB5_37, $358(%rip) - LONG $0x0004abe9; BYTE $0x00 // jmp LBB5_78, $1195(%rip) - -LBB5_19: - LONG $0x08fd8341 // cmpl $8, %r13d - LONG $0x00da820f; WORD $0x0000 // jb LBB5_30, $218(%rip) - WORD $0x8949; BYTE $0x0f // movq %rcx, (%r15) - LONG $0x24748d49; BYTE $0x08 // leaq $8(%r12), %rsi - LONG $0x08c78349 // addq $8, %r15 - LONG $0xf85d8d49 // leaq $-8(%r13), %rbx - LONG $0x04fb8348 // cmpq $4, %rbx - LONG $0x00d08d0f; WORD $0x0000 // jge LBB5_31, $208(%rip) - LONG $0x0000dce9; BYTE $0x00 // jmp LBB5_32, $220(%rip) - -LBB5_21: - WORD $0x294d; BYTE $0xd4 // subq %r10, %r12 - WORD $0x894d; BYTE $0xe1 // movq %r12, %r9 - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0xd07d8b4c // movq $-48(%rbp), %r15 - QUAD $0x000300000001bc49; WORD $0x0000 // movabsq $12884901889, %r12 - LONG $0x011b890f; WORD $0x0000 // jns LBB5_37, $283(%rip) - LONG $0x000460e9; BYTE $0x00 // jmp LBB5_78, $1120(%rip) - -LBB5_22: - WORD $0x894d; BYTE $0xe5 // movq %r12, %r13 - WORD $0x894c; BYTE $0xce // movq %r9, %rsi - LONG $0x04fe8348 // cmpq $4, %rsi - LONG $0x00138c0f; WORD $0x0000 // jl LBB5_24, $19(%rip) - -LBB5_23: - LONG $0x004d8b41 // movl (%r13), %ecx - WORD $0x8941; BYTE $0x0f // movl %ecx, (%r15) - LONG $0x04c58349 // addq $4, %r13 - LONG $0x04c78349 // addq $4, %r15 - LONG $0xfcc68348 // addq $-4, %rsi - -LBB5_24: - LONG $0x02fe8348 // cmpq $2, %rsi - LONG $0x0023820f; WORD $0x0000 // jb LBB5_25, $35(%rip) - LONG $0x4db70f41; BYTE $0x00 // movzwl (%r13), %ecx - LONG $0x0f894166 // movw %cx, (%r15) - LONG $0x02c58349 // addq $2, %r13 - LONG $0x02c78349 // addq $2, %r15 - LONG $0xfec68348 // addq $-2, %rsi - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x000e850f; WORD $0x0000 // jne LBB5_26, $14(%rip) - LONG $0x000010e9; BYTE $0x00 // jmp LBB5_27, $16(%rip) - -LBB5_25: - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x0007840f; WORD $0x0000 // je LBB5_27, $7(%rip) - -LBB5_26: - LONG $0x004d8a41 // movb (%r13), %cl - WORD $0x8841; BYTE $0x0f // movb %cl, (%r15) - -LBB5_27: - WORD $0x294d; BYTE $0xd1 // subq %r10, %r9 - WORD $0x014d; BYTE $0xe1 // addq %r12, %r9 - WORD $0xf749; BYTE $0xd1 // notq %r9 - LONG $0x00008ee9; BYTE $0x00 // jmp LBB5_36, $142(%rip) - -LBB5_28: - WORD $0x8948; BYTE $0xca // movq %rcx, %rdx - -LBB5_29: - WORD $0x294d; BYTE $0xd4 // subq %r10, %r12 - WORD $0xf748; BYTE $0xda // negq %rdx - WORD $0x194d; BYTE $0xc9 // sbbq %r9, %r9 - WORD $0x314d; BYTE $0xe1 // xorq %r12, %r9 - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0xd07d8b4c // movq $-48(%rbp), %r15 - QUAD $0x000300000001bc49; WORD $0x0000 // movabsq $12884901889, %r12 - LONG $0x0082890f; WORD $0x0000 // jns LBB5_37, $130(%rip) - LONG $0x0003c7e9; BYTE $0x00 // jmp LBB5_78, $967(%rip) - -LBB5_30: - WORD $0x894c; BYTE $0xe6 // movq %r12, %rsi - WORD $0x894c; BYTE $0xeb // movq %r13, %rbx - LONG $0x04fb8348 // cmpq $4, %rbx - LONG $0x00118c0f; WORD $0x0000 // jl LBB5_32, $17(%rip) - -LBB5_31: - WORD $0x0e8b // movl (%rsi), %ecx - WORD $0x8941; BYTE $0x0f // movl %ecx, (%r15) - LONG $0x04c68348 // addq $4, %rsi - LONG $0x04c78349 // addq $4, %r15 - LONG $0xfcc38348 // addq $-4, %rbx - -LBB5_32: - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0x0021820f; WORD $0x0000 // jb LBB5_33, $33(%rip) - WORD $0xb70f; BYTE $0x0e // movzwl (%rsi), %ecx - LONG $0x0f894166 // movw %cx, (%r15) - LONG $0x02c68348 // addq $2, %rsi - LONG $0x02c78349 // addq $2, %r15 - LONG $0xfec38348 // addq $-2, %rbx - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x000e850f; WORD $0x0000 // jne LBB5_34, $14(%rip) - LONG $0x00000ee9; BYTE $0x00 // jmp LBB5_35, $14(%rip) - -LBB5_33: - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x0005840f; WORD $0x0000 // je LBB5_35, $5(%rip) - -LBB5_34: - WORD $0x0e8a // movb (%rsi), %cl - WORD $0x8841; BYTE $0x0f // movb %cl, (%r15) - -LBB5_35: - WORD $0x294d; BYTE $0xd4 // subq %r10, %r12 - WORD $0x014d; BYTE $0xec // addq %r13, %r12 - WORD $0x894d; BYTE $0xe1 // movq %r12, %r9 - -LBB5_36: - WORD $0x8949; BYTE $0xd5 // movq %rdx, %r13 - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0xd07d8b4c // movq $-48(%rbp), %r15 - QUAD $0x000300000001bc49; WORD $0x0000 // movabsq $12884901889, %r12 - LONG $0x034a880f; WORD $0x0000 // js LBB5_78, $842(%rip) - -LBB5_37: - WORD $0x014d; BYTE $0xca // addq %r9, %r10 - WORD $0x014d; BYTE $0xcb // addq %r9, %r11 - WORD $0x394c; BYTE $0xc8 // cmpq %r9, %rax - LONG $0x00cd840f; WORD $0x0000 // je LBB5_74, $205(%rip) - WORD $0x294d; BYTE $0xce // subq %r9, %r14 - WORD $0x2949; BYTE $0xc1 // subq %rax, %r9 - LONG $0x00001de9; BYTE $0x00 // jmp LBB5_40, $29(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB5_39: - WORD $0xff49; BYTE $0xc2 // incq %r10 - WORD $0x0149; BYTE $0xc3 // addq %rax, %r11 - WORD $0xff49; BYTE $0xc1 // incq %r9 - LONG $0x00a5840f; WORD $0x0000 // je LBB5_74, $165(%rip) - -LBB5_40: - LONG $0x0ab60f41 // movzbl (%r10), %ecx - LONG $0x04e1c148 // shlq $4, %rcx - LONG $0x08348b49 // movq (%r8,%rcx), %rsi - WORD $0xf685 // testl %esi, %esi - LONG $0x0082840f; WORD $0x0000 // je LBB5_48, $130(%rip) - WORD $0x6348; BYTE $0xc6 // movslq %esi, %rax - WORD $0x2949; BYTE $0xc6 // subq %rax, %r14 - LONG $0x02d48c0f; WORD $0x0000 // jl LBB5_75, $724(%rip) - LONG $0x20e6c148 // shlq $32, %rsi - LONG $0x08548d49; BYTE $0x08 // leaq $8(%r8,%rcx), %rdx - WORD $0x394c; BYTE $0xe6 // cmpq %r12, %rsi - LONG $0x002f8c0f; WORD $0x0000 // jl LBB5_44, $47(%rip) - WORD $0x128b // movl (%rdx), %edx - WORD $0x8941; BYTE $0x13 // movl %edx, (%r11) - LONG $0x08548d49; BYTE $0x0c // leaq $12(%r8,%rcx), %rdx - LONG $0x044b8d49 // leaq $4(%r11), %rcx - LONG $0xfc708d48 // leaq $-4(%rax), %rsi - LONG $0x02fe8348 // cmpq $2, %rsi - LONG $0x0023830f; WORD $0x0000 // jae LBB5_45, $35(%rip) - LONG $0x000030e9; BYTE $0x00 // jmp LBB5_46, $48(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB5_44: - WORD $0x894c; BYTE $0xd9 // movq %r11, %rcx - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - LONG $0x02fe8348 // cmpq $2, %rsi - LONG $0x0012820f; WORD $0x0000 // jb LBB5_46, $18(%rip) - -LBB5_45: - WORD $0xb70f; BYTE $0x1a // movzwl (%rdx), %ebx - WORD $0x8966; BYTE $0x19 // movw %bx, (%rcx) - LONG $0x02c28348 // addq $2, %rdx - LONG $0x02c18348 // addq $2, %rcx - LONG $0xfec68348 // addq $-2, %rsi - -LBB5_46: - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0xff65840f; WORD $0xffff // je LBB5_39, $-155(%rip) - WORD $0xb60f; BYTE $0x12 // movzbl (%rdx), %edx - WORD $0x1188 // movb %dl, (%rcx) - LONG $0xffff5be9; BYTE $0xff // jmp LBB5_39, $-165(%rip) - -LBB5_48: - WORD $0x894c; BYTE $0xc8 // movq %r9, %rax - WORD $0xf748; BYTE $0xd8 // negq %rax - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0xfc12850f; WORD $0xffff // jne LBB5_3, $-1006(%rip) - -LBB5_74: - WORD $0x294d; BYTE $0xfb // subq %r15, %r11 - LONG $0x005d894d // movq %r11, (%r13) - WORD $0x2949; BYTE $0xfa // subq %rdi, %r10 - LONG $0x00024de9; BYTE $0x00 // jmp LBB5_76, $589(%rip) - -LBB5_51: - LONG $0x760d8d4c; WORD $0x00ec; BYTE $0x00 // leaq $60534(%rip), %r9 /* __EscTab(%rip) */ - QUAD $0xfffffb4e056ff9c5 // vmovdqa $-1202(%rip), %xmm0 /* LCPI5_0(%rip) */ - QUAD $0xfffffb560d6ff9c5 // vmovdqa $-1194(%rip), %xmm1 /* LCPI5_1(%rip) */ - QUAD $0xfffffb5e156ff9c5 // vmovdqa $-1186(%rip), %xmm2 /* LCPI5_2(%rip) */ - LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 - WORD $0x894c; BYTE $0xfb // movq %r15, %rbx - WORD $0x8949; BYTE $0xc2 // movq %rax, %r10 - -LBB5_52: - LONG $0x10fa8349 // cmpq $16, %r10 - LONG $0x005d8c0f; WORD $0x0000 // jl LBB5_57, $93(%rip) - LONG $0x000010b9; BYTE $0x00 // movl $16, %ecx - WORD $0xd231 // xorl %edx, %edx - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB5_54: - LONG $0x246ffac5; BYTE $0x17 // vmovdqu (%rdi,%rdx), %xmm4 - LONG $0xec64f9c5 // vpcmpgtb %xmm4, %xmm0, %xmm5 - LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 - LONG $0xfa74d9c5 // vpcmpeqb %xmm2, %xmm4, %xmm7 - LONG $0xf6ebc1c5 // vpor %xmm6, %xmm7, %xmm6 - LONG $0x247ffac5; BYTE $0x13 // vmovdqu %xmm4, (%rbx,%rdx) - LONG $0xe364d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm4 - LONG $0xe4dbd1c5 // vpand %xmm4, %xmm5, %xmm4 - LONG $0xe4ebc9c5 // vpor %xmm4, %xmm6, %xmm4 - LONG $0xf4d7f9c5 // vpmovmskb %xmm4, %esi - WORD $0x8566; BYTE $0xf6 // testw %si, %si - LONG $0x0139850f; WORD $0x0000 // jne LBB5_67, $313(%rip) - LONG $0x10c28348 // addq $16, %rdx - LONG $0x0a748d49; BYTE $0xf0 // leaq $-16(%r10,%rcx), %rsi - LONG $0xf0c18348 // addq $-16, %rcx - LONG $0x1ffe8348 // cmpq $31, %rsi - LONG $0xffb68f0f; WORD $0xffff // jg LBB5_54, $-74(%rip) - WORD $0x0148; BYTE $0xd7 // addq %rdx, %rdi - WORD $0x2949; BYTE $0xd2 // subq %rdx, %r10 - WORD $0x0148; BYTE $0xd3 // addq %rdx, %rbx - -LBB5_57: - LONG $0x08fa8349 // cmpq $8, %r10 - LONG $0x00858c0f; WORD $0x0000 // jl LBB5_61, $133(%rip) - WORD $0xb60f; BYTE $0x0f // movzbl (%rdi), %ecx - LONG $0x0cb60f42; BYTE $0x09 // movzbl (%rcx,%r9), %ecx - LONG $0x0157b60f // movzbl $1(%rdi), %edx - LONG $0x14b60f42; BYTE $0x0a // movzbl (%rdx,%r9), %edx - WORD $0xd201 // addl %edx, %edx - WORD $0xca09 // orl %ecx, %edx - LONG $0x024fb60f // movzbl $2(%rdi), %ecx - LONG $0x34b60f42; BYTE $0x09 // movzbl (%rcx,%r9), %esi - WORD $0xe6c1; BYTE $0x02 // shll $2, %esi - LONG $0x034fb60f // movzbl $3(%rdi), %ecx - LONG $0x0cb60f42; BYTE $0x09 // movzbl (%rcx,%r9), %ecx - WORD $0xe1c1; BYTE $0x03 // shll $3, %ecx - WORD $0xf109 // orl %esi, %ecx - WORD $0xd109 // orl %edx, %ecx - WORD $0x8b48; BYTE $0x17 // movq (%rdi), %rdx - WORD $0x8948; BYTE $0x13 // movq %rdx, (%rbx) - WORD $0xc984 // testb %cl, %cl - LONG $0x0131850f; WORD $0x0000 // jne LBB5_71, $305(%rip) - LONG $0x044fb60f // movzbl $4(%rdi), %ecx - LONG $0x0cb60f42; BYTE $0x09 // movzbl (%rcx,%r9), %ecx - LONG $0x0557b60f // movzbl $5(%rdi), %edx - LONG $0x14b60f42; BYTE $0x0a // movzbl (%rdx,%r9), %edx - WORD $0xd201 // addl %edx, %edx - WORD $0xca09 // orl %ecx, %edx - LONG $0x064fb60f // movzbl $6(%rdi), %ecx - LONG $0x34b60f42; BYTE $0x09 // movzbl (%rcx,%r9), %esi - WORD $0xe6c1; BYTE $0x02 // shll $2, %esi - LONG $0x074fb60f // movzbl $7(%rdi), %ecx - LONG $0x0cb60f42; BYTE $0x09 // movzbl (%rcx,%r9), %ecx - WORD $0xe1c1; BYTE $0x03 // shll $3, %ecx - WORD $0xf109 // orl %esi, %ecx - WORD $0xd109 // orl %edx, %ecx - WORD $0xc984 // testb %cl, %cl - LONG $0x0108850f; WORD $0x0000 // jne LBB5_72, $264(%rip) - LONG $0x08c38348 // addq $8, %rbx - LONG $0x08c78348 // addq $8, %rdi - LONG $0xf8c28349 // addq $-8, %r10 - -LBB5_61: - LONG $0x04fa8349 // cmpq $4, %r10 - LONG $0x00498c0f; WORD $0x0000 // jl LBB5_64, $73(%rip) - WORD $0xb60f; BYTE $0x0f // movzbl (%rdi), %ecx - LONG $0x0cb60f42; BYTE $0x09 // movzbl (%rcx,%r9), %ecx - LONG $0x0157b60f // movzbl $1(%rdi), %edx - LONG $0x14b60f42; BYTE $0x0a // movzbl (%rdx,%r9), %edx - WORD $0xd201 // addl %edx, %edx - WORD $0xca09 // orl %ecx, %edx - LONG $0x024fb60f // movzbl $2(%rdi), %ecx - LONG $0x34b60f42; BYTE $0x09 // movzbl (%rcx,%r9), %esi - WORD $0xe6c1; BYTE $0x02 // shll $2, %esi - LONG $0x034fb60f // movzbl $3(%rdi), %ecx - LONG $0x0cb60f42; BYTE $0x09 // movzbl (%rcx,%r9), %ecx - WORD $0xe1c1; BYTE $0x03 // shll $3, %ecx - WORD $0xf109 // orl %esi, %ecx - WORD $0xd109 // orl %edx, %ecx - WORD $0x178b // movl (%rdi), %edx - WORD $0x1389 // movl %edx, (%rbx) - WORD $0xc984 // testb %cl, %cl - LONG $0x00a4850f; WORD $0x0000 // jne LBB5_71, $164(%rip) - LONG $0x04c38348 // addq $4, %rbx - LONG $0x04c78348 // addq $4, %rdi - LONG $0xfcc28349 // addq $-4, %r10 - -LBB5_64: - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0x00b98e0f; WORD $0x0000 // jle LBB5_73, $185(%rip) - WORD $0x9090 // .p2align 4, 0x90 - -LBB5_65: - WORD $0xb60f; BYTE $0x0f // movzbl (%rdi), %ecx - LONG $0x093c8042; BYTE $0x00 // cmpb $0, (%rcx,%r9) - LONG $0x0036850f; WORD $0x0000 // jne LBB5_68, $54(%rip) - WORD $0xff48; BYTE $0xc7 // incq %rdi - WORD $0x0b88 // movb %cl, (%rbx) - WORD $0xff48; BYTE $0xc3 // incq %rbx - LONG $0xff4a8d49 // leaq $-1(%r10), %rcx - LONG $0x01fa8349 // cmpq $1, %r10 - WORD $0x8949; BYTE $0xca // movq %rcx, %r10 - LONG $0xffd98f0f; WORD $0xffff // jg LBB5_65, $-39(%rip) - LONG $0x00008be9; BYTE $0x00 // jmp LBB5_73, $139(%rip) - -LBB5_67: - WORD $0xb70f; BYTE $0xce // movzwl %si, %ecx - WORD $0xbc0f; BYTE $0xc9 // bsfl %ecx, %ecx - WORD $0x0148; BYTE $0xcf // addq %rcx, %rdi - WORD $0x0148; BYTE $0xd7 // addq %rdx, %rdi - WORD $0x2949; BYTE $0xca // subq %rcx, %r10 - WORD $0x2949; BYTE $0xd2 // subq %rdx, %r10 - WORD $0x0148; BYTE $0xcb // addq %rcx, %rbx - WORD $0x0148; BYTE $0xd3 // addq %rdx, %rbx - -LBB5_68: - WORD $0x0f8a // movb (%rdi), %cl - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB5_69: - WORD $0x8948; BYTE $0xda // movq %rbx, %rdx - WORD $0xb60f; BYTE $0xc9 // movzbl %cl, %ecx - LONG $0x04e1c148 // shlq $4, %rcx - LONG $0x081c6349 // movslq (%r8,%rcx), %rbx - LONG $0x084c8b49; BYTE $0x08 // movq $8(%r8,%rcx), %rcx - WORD $0x8948; BYTE $0x0a // movq %rcx, (%rdx) - WORD $0x0148; BYTE $0xd3 // addq %rdx, %rbx - LONG $0x02fa8349 // cmpq $2, %r10 - LONG $0x00448c0f; WORD $0x0000 // jl LBB5_73, $68(%rip) - WORD $0xff49; BYTE $0xca // decq %r10 - LONG $0x014fb60f // movzbl $1(%rdi), %ecx - WORD $0xff48; BYTE $0xc7 // incq %rdi - LONG $0x093c8042; BYTE $0x00 // cmpb $0, (%rcx,%r9) - LONG $0xffc8850f; WORD $0xffff // jne LBB5_69, $-56(%rip) - LONG $0xfffe1fe9; BYTE $0xff // jmp LBB5_52, $-481(%rip) - -LBB5_71: - WORD $0xbc0f; BYTE $0xc9 // bsfl %ecx, %ecx - WORD $0x0148; BYTE $0xcf // addq %rcx, %rdi - WORD $0x2949; BYTE $0xca // subq %rcx, %r10 - WORD $0x0148; BYTE $0xcb // addq %rcx, %rbx - LONG $0xffffa6e9; BYTE $0xff // jmp LBB5_68, $-90(%rip) - -LBB5_72: - WORD $0xbc0f; BYTE $0xc9 // bsfl %ecx, %ecx - LONG $0x04518d48 // leaq $4(%rcx), %rdx - LONG $0x0f7c8d48; BYTE $0x04 // leaq $4(%rdi,%rcx), %rdi - WORD $0x2949; BYTE $0xd2 // subq %rdx, %r10 - LONG $0x0b5c8d48; BYTE $0x04 // leaq $4(%rbx,%rcx), %rbx - LONG $0xffff8de9; BYTE $0xff // jmp LBB5_68, $-115(%rip) - -LBB5_73: - WORD $0x294c; BYTE $0xfb // subq %r15, %rbx - LONG $0x005d8949 // movq %rbx, (%r13) - LONG $0x000010e9; BYTE $0x00 // jmp LBB5_77, $16(%rip) - -LBB5_75: - WORD $0x294d; BYTE $0xfb // subq %r15, %r11 - LONG $0x005d894d // movq %r11, (%r13) - WORD $0xf749; BYTE $0xd2 // notq %r10 - WORD $0x0149; BYTE $0xfa // addq %rdi, %r10 - -LBB5_76: - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - -LBB5_77: - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB5_78: - WORD $0x294d; BYTE $0xfb // subq %r15, %r11 - WORD $0x894c; BYTE $0xc8 // movq %r9, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x014c; BYTE $0xd8 // addq %r11, %rax - LONG $0x00458949 // movq %rax, (%r13) - WORD $0x294c; BYTE $0xd7 // subq %r10, %rdi - WORD $0x014c; BYTE $0xcf // addq %r9, %rdi - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0xffffd3e9; BYTE $0xff // jmp LBB5_77, $-45(%rip) - - // .p2align 4, 0x00 -LCPI6_0: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - - // .p2align 4, 0x90 -_unquote: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x28ec8348 // subq $40, %rsp - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x066f840f; WORD $0x0000 // je LBB6_81, $1647(%rip) - WORD $0x8949; BYTE $0xf3 // movq %rsi, %r11 - LONG $0xc84d8948 // movq %rcx, $-56(%rbp) - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - LONG $0xb845894c // movq %r8, $-72(%rbp) - WORD $0x8945; BYTE $0xc2 // movl %r8d, %r10d - LONG $0x01e28341 // andl $1, %r10d - LONG $0xba058d4c; WORD $0x00ea; BYTE $0x00 // leaq $60090(%rip), %r8 /* __UnquoteTab(%rip) */ - QUAD $0xffffffb2056ff9c5 // vmovdqa $-78(%rip), %xmm0 /* LCPI6_0(%rip) */ - WORD $0x8949; BYTE $0xf9 // movq %rdi, %r9 - WORD $0x8949; BYTE $0xf5 // movq %rsi, %r13 - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - -LBB6_2: - LONG $0x5c398041 // cmpb $92, (%r9) - LONG $0x000f850f; WORD $0x0000 // jne LBB6_4, $15(%rip) - WORD $0xf631 // xorl %esi, %esi - LONG $0x0000c8e9; BYTE $0x00 // jmp LBB6_13, $200(%rip) - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB6_4: - WORD $0x894d; BYTE $0xee // movq %r13, %r14 - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x894d; BYTE $0xcf // movq %r9, %r15 - LONG $0x10fd8349 // cmpq $16, %r13 - LONG $0x00408c0f; WORD $0x0000 // jl LBB6_7, $64(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB6_5: - LONG $0x6f7ac1c4; BYTE $0x0f // vmovdqu (%r15), %xmm1 - LONG $0x097ffac5 // vmovdqu %xmm1, (%rcx) - LONG $0xc874f1c5 // vpcmpeqb %xmm0, %xmm1, %xmm1 - LONG $0xf1d7f9c5 // vpmovmskb %xmm1, %esi - WORD $0x8566; BYTE $0xf6 // testw %si, %si - LONG $0x0060850f; WORD $0x0000 // jne LBB6_12, $96(%rip) - LONG $0x10c78349 // addq $16, %r15 - LONG $0x10c18348 // addq $16, %rcx - LONG $0xf0768d49 // leaq $-16(%r14), %rsi - LONG $0x1ffe8349 // cmpq $31, %r14 - WORD $0x8949; BYTE $0xf6 // movq %rsi, %r14 - LONG $0xffcd8f0f; WORD $0xffff // jg LBB6_5, $-51(%rip) - -LBB6_7: - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x05d3840f; WORD $0x0000 // je LBB6_82, $1491(%rip) - WORD $0xf631 // xorl %esi, %esi - WORD $0x9090 // .p2align 4, 0x90 - -LBB6_9: - LONG $0x1cb60f41; BYTE $0x37 // movzbl (%r15,%rsi), %ebx - WORD $0xfb80; BYTE $0x5c // cmpb $92, %bl - LONG $0x0014840f; WORD $0x0000 // je LBB6_11, $20(%rip) - WORD $0x1c88; BYTE $0x31 // movb %bl, (%rcx,%rsi) - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x3949; BYTE $0xf6 // cmpq %rsi, %r14 - LONG $0xffe3850f; WORD $0xffff // jne LBB6_9, $-29(%rip) - LONG $0x0005ade9; BYTE $0x00 // jmp LBB6_82, $1453(%rip) - -LBB6_11: - WORD $0x0149; BYTE $0xf7 // addq %rsi, %r15 - WORD $0x294d; BYTE $0xcf // subq %r9, %r15 - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - LONG $0xfffe8348 // cmpq $-1, %rsi - LONG $0x002b850f; WORD $0x0000 // jne LBB6_13, $43(%rip) - LONG $0x000595e9; BYTE $0x00 // jmp LBB6_82, $1429(%rip) - -LBB6_12: - WORD $0xb70f; BYTE $0xce // movzwl %si, %ecx - WORD $0x294d; BYTE $0xcf // subq %r9, %r15 - LONG $0xf1bc0f48 // bsfq %rcx, %rsi - WORD $0x014c; BYTE $0xfe // addq %r15, %rsi - LONG $0xfffe8348 // cmpq $-1, %rsi - LONG $0x057e840f; WORD $0x0000 // je LBB6_82, $1406(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB6_13: - LONG $0x024e8d48 // leaq $2(%rsi), %rcx - WORD $0x2949; BYTE $0xcd // subq %rcx, %r13 - LONG $0x075b880f; WORD $0x0000 // js LBB6_111, $1883(%rip) - LONG $0x314c8d4d; BYTE $0x02 // leaq $2(%r9,%rsi), %r9 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0x03f5850f; WORD $0x0000 // jne LBB6_58, $1013(%rip) - -LBB6_15: - WORD $0x0148; BYTE $0xf0 // addq %rsi, %rax - LONG $0x49b60f41; BYTE $0xff // movzbl $-1(%r9), %ecx - LONG $0x010c8a42 // movb (%rcx,%r8), %cl - WORD $0xf980; BYTE $0xff // cmpb $-1, %cl - LONG $0x0020840f; WORD $0x0000 // je LBB6_18, $32(%rip) - WORD $0xc984 // testb %cl, %cl - LONG $0x0600840f; WORD $0x0000 // je LBB6_93, $1536(%rip) - WORD $0x0888 // movb %cl, (%rax) - WORD $0xff48; BYTE $0xc0 // incq %rax - LONG $0x0003c0e9; BYTE $0x00 // jmp LBB6_57, $960(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB6_18: - LONG $0x03fd8349 // cmpq $3, %r13 - LONG $0x070e8e0f; WORD $0x0000 // jle LBB6_111, $1806(%rip) - WORD $0x8b41; BYTE $0x31 // movl (%r9), %esi - WORD $0xf189 // movl %esi, %ecx - WORD $0xd1f7 // notl %ecx - LONG $0xcfd09e8d; WORD $0xcfcf // leal $-808464432(%rsi), %ebx - LONG $0x8080e181; WORD $0x8080 // andl $-2139062144, %ecx - WORD $0xd985 // testl %ebx, %ecx - LONG $0x050f850f; WORD $0x0000 // jne LBB6_84, $1295(%rip) - LONG $0x19199e8d; WORD $0x1919 // leal $421075225(%rsi), %ebx - WORD $0xf309 // orl %esi, %ebx - LONG $0x8080c3f7; WORD $0x8080 // testl $-2139062144, %ebx - LONG $0x04fb850f; WORD $0x0000 // jne LBB6_84, $1275(%rip) - WORD $0xf389 // movl %esi, %ebx - LONG $0x7f7fe381; WORD $0x7f7f // andl $2139062143, %ebx - LONG $0xc0c0be41; WORD $0xc0c0 // movl $-1061109568, %r14d - WORD $0x2941; BYTE $0xde // subl %ebx, %r14d - LONG $0x46bb8d44; WORD $0x4646; BYTE $0x46 // leal $1179010630(%rbx), %r15d - WORD $0x2141; BYTE $0xce // andl %ecx, %r14d - WORD $0x8545; BYTE $0xfe // testl %r15d, %r14d - LONG $0x04d7850f; WORD $0x0000 // jne LBB6_84, $1239(%rip) - LONG $0xe0e0be41; WORD $0xe0e0 // movl $-522133280, %r14d - WORD $0x2941; BYTE $0xde // subl %ebx, %r14d - LONG $0x3939c381; WORD $0x3939 // addl $960051513, %ebx - WORD $0x2144; BYTE $0xf1 // andl %r14d, %ecx - WORD $0xd985 // testl %ebx, %ecx - LONG $0x04bd850f; WORD $0x0000 // jne LBB6_84, $1213(%rip) - WORD $0xce0f // bswapl %esi - WORD $0xf189 // movl %esi, %ecx - WORD $0xe9c1; BYTE $0x04 // shrl $4, %ecx - WORD $0xd1f7 // notl %ecx - LONG $0x0101e181; WORD $0x0101 // andl $16843009, %ecx - WORD $0x0c8d; BYTE $0xc9 // leal (%rcx,%rcx,8), %ecx - LONG $0x0f0fe681; WORD $0x0f0f // andl $252645135, %esi - WORD $0xce01 // addl %ecx, %esi - WORD $0xf189 // movl %esi, %ecx - WORD $0xe9c1; BYTE $0x04 // shrl $4, %ecx - WORD $0xf109 // orl %esi, %ecx - LONG $0xf9b60f44 // movzbl %cl, %r15d - WORD $0xe9c1; BYTE $0x08 // shrl $8, %ecx - LONG $0xff00e181; WORD $0x0000 // andl $65280, %ecx - WORD $0x0941; BYTE $0xcf // orl %ecx, %r15d - LONG $0xfc758d4d // leaq $-4(%r13), %r14 - LONG $0x80ff8141; WORD $0x0000; BYTE $0x00 // cmpl $128, %r15d - LONG $0x0356820f; WORD $0x0000 // jb LBB6_66, $854(%rip) - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0x014b850f; WORD $0x0000 // jne LBB6_38, $331(%rip) - -LBB6_25: - LONG $0x00ff8141; WORD $0x0008; BYTE $0x00 // cmpl $2048, %r15d - LONG $0x034c820f; WORD $0x0000 // jb LBB6_68, $844(%rip) - WORD $0x8944; BYTE $0xf9 // movl %r15d, %ecx - LONG $0xf800e181; WORD $0xffff // andl $-2048, %ecx - LONG $0xd800f981; WORD $0x0000 // cmpl $55296, %ecx - LONG $0x0299850f; WORD $0x0000 // jne LBB6_54, $665(%rip) - LONG $0xffff8141; WORD $0x00db; BYTE $0x00 // cmpl $56319, %r15d - LONG $0x034f870f; WORD $0x0000 // ja LBB6_69, $847(%rip) - LONG $0x06fe8349 // cmpq $6, %r14 - LONG $0x03458c0f; WORD $0x0000 // jl LBB6_69, $837(%rip) - LONG $0x217c8043; WORD $0x5c04 // cmpb $92, $4(%r9,%r12) - LONG $0x0339850f; WORD $0x0000 // jne LBB6_69, $825(%rip) - LONG $0x217c8043; WORD $0x7505 // cmpb $117, $5(%r9,%r12) - LONG $0x032d850f; WORD $0x0000 // jne LBB6_69, $813(%rip) - LONG $0x21748b43; BYTE $0x06 // movl $6(%r9,%r12), %esi - WORD $0xf189 // movl %esi, %ecx - WORD $0xd1f7 // notl %ecx - LONG $0xcfd09e8d; WORD $0xcfcf // leal $-808464432(%rsi), %ebx - LONG $0x8080e181; WORD $0x8080 // andl $-2139062144, %ecx - WORD $0xd985 // testl %ebx, %ecx - LONG $0x04d9850f; WORD $0x0000 // jne LBB6_95, $1241(%rip) - LONG $0x19199e8d; WORD $0x1919 // leal $421075225(%rsi), %ebx - WORD $0xf309 // orl %esi, %ebx - LONG $0x8080c3f7; WORD $0x8080 // testl $-2139062144, %ebx - LONG $0x04c5850f; WORD $0x0000 // jne LBB6_95, $1221(%rip) - WORD $0xf389 // movl %esi, %ebx - LONG $0x7f7fe381; WORD $0x7f7f // andl $2139062143, %ebx - LONG $0xc0d445c7; WORD $0xc0c0; BYTE $0xc0 // movl $-1061109568, $-44(%rbp) - WORD $0x5d29; BYTE $0xd4 // subl %ebx, $-44(%rbp) - LONG $0xb0758948 // movq %rsi, $-80(%rbp) - LONG $0x4646b38d; WORD $0x4646 // leal $1179010630(%rbx), %esi - WORD $0x7589; BYTE $0xc4 // movl %esi, $-60(%rbp) - WORD $0x4d21; BYTE $0xd4 // andl %ecx, $-44(%rbp) - WORD $0x758b; BYTE $0xc4 // movl $-60(%rbp), %esi - WORD $0x7585; BYTE $0xd4 // testl %esi, $-44(%rbp) - LONG $0xb0758b48 // movq $-80(%rbp), %rsi - LONG $0x0493850f; WORD $0x0000 // jne LBB6_95, $1171(%rip) - LONG $0xe0d445c7; WORD $0xe0e0; BYTE $0xe0 // movl $-522133280, $-44(%rbp) - WORD $0x5d29; BYTE $0xd4 // subl %ebx, $-44(%rbp) - LONG $0x3939c381; WORD $0x3939 // addl $960051513, %ebx - WORD $0x4d23; BYTE $0xd4 // andl $-44(%rbp), %ecx - WORD $0xd985 // testl %ebx, %ecx - LONG $0x0478850f; WORD $0x0000 // jne LBB6_95, $1144(%rip) - WORD $0xce0f // bswapl %esi - WORD $0xf189 // movl %esi, %ecx - WORD $0xe9c1; BYTE $0x04 // shrl $4, %ecx - WORD $0xd1f7 // notl %ecx - LONG $0x0101e181; WORD $0x0101 // andl $16843009, %ecx - WORD $0x0c8d; BYTE $0xc9 // leal (%rcx,%rcx,8), %ecx - LONG $0x0f0fe681; WORD $0x0f0f // andl $252645135, %esi - WORD $0xce01 // addl %ecx, %esi - WORD $0xf189 // movl %esi, %ecx - WORD $0xe9c1; BYTE $0x04 // shrl $4, %ecx - WORD $0xf109 // orl %esi, %ecx - WORD $0xce89 // movl %ecx, %esi - WORD $0xeec1; BYTE $0x08 // shrl $8, %esi - LONG $0xff00e681; WORD $0x0000 // andl $65280, %esi - WORD $0xb60f; BYTE $0xd9 // movzbl %cl, %ebx - WORD $0xf309 // orl %esi, %ebx - LONG $0x0000e181; WORD $0x00fc // andl $16515072, %ecx - LONG $0x0000f981; WORD $0x00dc // cmpl $14417920, %ecx - LONG $0x02b1840f; WORD $0x0000 // je LBB6_75, $689(%rip) - LONG $0x02b845f6 // testb $2, $-72(%rbp) - LONG $0x0564840f; WORD $0x0000 // je LBB6_114, $1380(%rip) - LONG $0xfac68349 // addq $-6, %r14 - LONG $0xef00c766; BYTE $0xbf // movw $-16401, (%rax) - LONG $0xbd0240c6 // movb $-67, $2(%rax) - LONG $0x03c08348 // addq $3, %rax - LONG $0x06c48349 // addq $6, %r12 - WORD $0x8941; BYTE $0xdf // movl %ebx, %r15d - WORD $0xfb83; BYTE $0x7f // cmpl $127, %ebx - LONG $0xfec3870f; WORD $0xffff // ja LBB6_25, $-317(%rip) - LONG $0x00015ee9; BYTE $0x00 // jmp LBB6_53, $350(%rip) - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB6_38: - LONG $0x00ff8141; WORD $0x0008; BYTE $0x00 // cmpl $2048, %r15d - LONG $0x0201820f; WORD $0x0000 // jb LBB6_68, $513(%rip) - WORD $0x8944; BYTE $0xf9 // movl %r15d, %ecx - LONG $0xf800e181; WORD $0xffff // andl $-2048, %ecx - LONG $0xd800f981; WORD $0x0000 // cmpl $55296, %ecx - LONG $0x014e850f; WORD $0x0000 // jne LBB6_54, $334(%rip) - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x04be8e0f; WORD $0x0000 // jle LBB6_108, $1214(%rip) - LONG $0x217c8043; WORD $0x5c04 // cmpb $92, $4(%r9,%r12) - LONG $0x022d850f; WORD $0x0000 // jne LBB6_73, $557(%rip) - LONG $0xffff8141; WORD $0x00db; BYTE $0x00 // cmpl $56319, %r15d - LONG $0x01f9870f; WORD $0x0000 // ja LBB6_70, $505(%rip) - LONG $0x07fe8349 // cmpq $7, %r14 - LONG $0x01ef8c0f; WORD $0x0000 // jl LBB6_70, $495(%rip) - LONG $0x217c8043; WORD $0x5c05 // cmpb $92, $5(%r9,%r12) - LONG $0x01e3850f; WORD $0x0000 // jne LBB6_70, $483(%rip) - LONG $0x217c8043; WORD $0x7506 // cmpb $117, $6(%r9,%r12) - LONG $0x01d7850f; WORD $0x0000 // jne LBB6_70, $471(%rip) - LONG $0x21748b43; BYTE $0x07 // movl $7(%r9,%r12), %esi - WORD $0xf189 // movl %esi, %ecx - WORD $0xd1f7 // notl %ecx - LONG $0xcfd09e8d; WORD $0xcfcf // leal $-808464432(%rsi), %ebx - LONG $0x8080e181; WORD $0x8080 // andl $-2139062144, %ecx - WORD $0xd985 // testl %ebx, %ecx - LONG $0x0383850f; WORD $0x0000 // jne LBB6_96, $899(%rip) - LONG $0x19199e8d; WORD $0x1919 // leal $421075225(%rsi), %ebx - WORD $0xf309 // orl %esi, %ebx - LONG $0x8080c3f7; WORD $0x8080 // testl $-2139062144, %ebx - LONG $0x036f850f; WORD $0x0000 // jne LBB6_96, $879(%rip) - WORD $0xf389 // movl %esi, %ebx - LONG $0x7f7fe381; WORD $0x7f7f // andl $2139062143, %ebx - LONG $0xc0d445c7; WORD $0xc0c0; BYTE $0xc0 // movl $-1061109568, $-44(%rbp) - WORD $0x5d29; BYTE $0xd4 // subl %ebx, $-44(%rbp) - LONG $0xb0758948 // movq %rsi, $-80(%rbp) - LONG $0x4646b38d; WORD $0x4646 // leal $1179010630(%rbx), %esi - WORD $0x7589; BYTE $0xc4 // movl %esi, $-60(%rbp) - WORD $0x4d21; BYTE $0xd4 // andl %ecx, $-44(%rbp) - WORD $0x758b; BYTE $0xc4 // movl $-60(%rbp), %esi - WORD $0x7585; BYTE $0xd4 // testl %esi, $-44(%rbp) - LONG $0xb0758b48 // movq $-80(%rbp), %rsi - LONG $0x033d850f; WORD $0x0000 // jne LBB6_96, $829(%rip) - LONG $0xe0d445c7; WORD $0xe0e0; BYTE $0xe0 // movl $-522133280, $-44(%rbp) - WORD $0x5d29; BYTE $0xd4 // subl %ebx, $-44(%rbp) - LONG $0x3939c381; WORD $0x3939 // addl $960051513, %ebx - WORD $0x4d23; BYTE $0xd4 // andl $-44(%rbp), %ecx - WORD $0xd985 // testl %ebx, %ecx - LONG $0x0322850f; WORD $0x0000 // jne LBB6_96, $802(%rip) - WORD $0xce0f // bswapl %esi - WORD $0xf189 // movl %esi, %ecx - WORD $0xe9c1; BYTE $0x04 // shrl $4, %ecx - WORD $0xd1f7 // notl %ecx - LONG $0x0101e181; WORD $0x0101 // andl $16843009, %ecx - WORD $0x0c8d; BYTE $0xc9 // leal (%rcx,%rcx,8), %ecx - LONG $0x0f0fe681; WORD $0x0f0f // andl $252645135, %esi - WORD $0xce01 // addl %ecx, %esi - WORD $0xf189 // movl %esi, %ecx - WORD $0xe9c1; BYTE $0x04 // shrl $4, %ecx - WORD $0xf109 // orl %esi, %ecx - WORD $0xce89 // movl %ecx, %esi - WORD $0xeec1; BYTE $0x08 // shrl $8, %esi - LONG $0xff00e681; WORD $0x0000 // andl $65280, %esi - WORD $0xb60f; BYTE $0xd9 // movzbl %cl, %ebx - WORD $0xf309 // orl %esi, %ebx - LONG $0x0000e181; WORD $0x00fc // andl $16515072, %ecx - LONG $0x0000f981; WORD $0x00dc // cmpl $14417920, %ecx - LONG $0x0162840f; WORD $0x0000 // je LBB6_76, $354(%rip) - LONG $0x02b845f6 // testb $2, $-72(%rbp) - LONG $0x040e840f; WORD $0x0000 // je LBB6_115, $1038(%rip) - LONG $0xf9c68349 // addq $-7, %r14 - LONG $0xef00c766; BYTE $0xbf // movw $-16401, (%rax) - LONG $0xbd0240c6 // movb $-67, $2(%rax) - LONG $0x03c08348 // addq $3, %rax - LONG $0x07c48349 // addq $7, %r12 - WORD $0x8941; BYTE $0xdf // movl %ebx, %r15d - LONG $0x0080fb81; WORD $0x0000 // cmpl $128, %ebx - LONG $0xfeab830f; WORD $0xffff // jae LBB6_38, $-341(%rip) - -LBB6_53: - LONG $0x214c8d4f; BYTE $0x04 // leaq $4(%r9,%r12), %r9 - WORD $0x8941; BYTE $0xdf // movl %ebx, %r15d - LONG $0x0000a1e9; BYTE $0x00 // jmp LBB6_67, $161(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB6_54: - LONG $0x214c8d4f; BYTE $0x04 // leaq $4(%r9,%r12), %r9 - WORD $0x8944; BYTE $0xf9 // movl %r15d, %ecx - WORD $0xe9c1; BYTE $0x0c // shrl $12, %ecx - WORD $0xc980; BYTE $0xe0 // orb $-32, %cl - WORD $0x0888 // movb %cl, (%rax) - WORD $0x8944; BYTE $0xf9 // movl %r15d, %ecx - WORD $0xe9c1; BYTE $0x06 // shrl $6, %ecx - WORD $0xe180; BYTE $0x3f // andb $63, %cl - WORD $0xc980; BYTE $0x80 // orb $-128, %cl - WORD $0x4888; BYTE $0x01 // movb %cl, $1(%rax) - LONG $0x3fe78041 // andb $63, %r15b - LONG $0x80cf8041 // orb $-128, %r15b - LONG $0x02788844 // movb %r15b, $2(%rax) - -LBB6_55: - LONG $0x03c08348 // addq $3, %rax - -LBB6_56: - WORD $0x894d; BYTE $0xf5 // movq %r14, %r13 - -LBB6_57: - WORD $0x854d; BYTE $0xed // testq %r13, %r13 - LONG $0xfb1c850f; WORD $0xffff // jne LBB6_2, $-1252(%rip) - LONG $0x000350e9; BYTE $0x00 // jmp LBB6_110, $848(%rip) - -LBB6_58: - WORD $0x8545; BYTE $0xed // testl %r13d, %r13d - LONG $0x034f840f; WORD $0x0000 // je LBB6_111, $847(%rip) - LONG $0xff798041; BYTE $0x5c // cmpb $92, $-1(%r9) - LONG $0x022d850f; WORD $0x0000 // jne LBB6_94, $557(%rip) - LONG $0x5c398041 // cmpb $92, (%r9) - LONG $0x0026850f; WORD $0x0000 // jne LBB6_65, $38(%rip) - LONG $0x01fd8341 // cmpl $1, %r13d - LONG $0x03308e0f; WORD $0x0000 // jle LBB6_111, $816(%rip) - LONG $0x01498a41 // movb $1(%r9), %cl - WORD $0xf980; BYTE $0x22 // cmpb $34, %cl - LONG $0x0009840f; WORD $0x0000 // je LBB6_64, $9(%rip) - WORD $0xf980; BYTE $0x5c // cmpb $92, %cl - LONG $0x02e2850f; WORD $0x0000 // jne LBB6_106, $738(%rip) - -LBB6_64: - WORD $0xff49; BYTE $0xc1 // incq %r9 - WORD $0xff49; BYTE $0xcd // decq %r13 - -LBB6_65: - WORD $0xff49; BYTE $0xc1 // incq %r9 - WORD $0xff49; BYTE $0xcd // decq %r13 - LONG $0xfffbbce9; BYTE $0xff // jmp LBB6_15, $-1092(%rip) - -LBB6_66: - LONG $0x04c18349 // addq $4, %r9 - -LBB6_67: - WORD $0x8844; BYTE $0x38 // movb %r15b, (%rax) - WORD $0xff48; BYTE $0xc0 // incq %rax - LONG $0xffff91e9; BYTE $0xff // jmp LBB6_56, $-111(%rip) - -LBB6_68: - LONG $0x214c8d4f; BYTE $0x04 // leaq $4(%r9,%r12), %r9 - WORD $0x8944; BYTE $0xf9 // movl %r15d, %ecx - WORD $0xe9c1; BYTE $0x06 // shrl $6, %ecx - WORD $0xc980; BYTE $0xc0 // orb $-64, %cl - WORD $0x0888 // movb %cl, (%rax) - LONG $0x3fe78041 // andb $63, %r15b - LONG $0x80cf8041 // orb $-128, %r15b - LONG $0x01788844 // movb %r15b, $1(%rax) - LONG $0x02c08348 // addq $2, %rax - LONG $0xffff6ce9; BYTE $0xff // jmp LBB6_56, $-148(%rip) - -LBB6_69: - LONG $0x214c8d4f; BYTE $0x04 // leaq $4(%r9,%r12), %r9 - LONG $0x00000fe9; BYTE $0x00 // jmp LBB6_71, $15(%rip) - -LBB6_70: - LONG $0x214c8d4f; BYTE $0x05 // leaq $5(%r9,%r12), %r9 - WORD $0x294d; BYTE $0xe5 // subq %r12, %r13 - LONG $0xfbc58349 // addq $-5, %r13 - WORD $0x894d; BYTE $0xee // movq %r13, %r14 - -LBB6_71: - LONG $0x02b845f6 // testb $2, $-72(%rbp) - LONG $0x0308840f; WORD $0x0000 // je LBB6_117, $776(%rip) - -LBB6_72: - LONG $0xef00c766; BYTE $0xbf // movw $-16401, (%rax) - LONG $0xbd0240c6 // movb $-67, $2(%rax) - LONG $0xffff37e9; BYTE $0xff // jmp LBB6_55, $-201(%rip) - -LBB6_73: - LONG $0x02b845f6 // testb $2, $-72(%rbp) - LONG $0x02fd840f; WORD $0x0000 // je LBB6_118, $765(%rip) - LONG $0x214c8d4f; BYTE $0x04 // leaq $4(%r9,%r12), %r9 - LONG $0xffffdee9; BYTE $0xff // jmp LBB6_72, $-34(%rip) - -LBB6_75: - LONG $0x214c8d4f; BYTE $0x0a // leaq $10(%r9,%r12), %r9 - WORD $0x294d; BYTE $0xe5 // subq %r12, %r13 - LONG $0xf6c58349 // addq $-10, %r13 - LONG $0x00000ce9; BYTE $0x00 // jmp LBB6_77, $12(%rip) - -LBB6_76: - LONG $0x214c8d4f; BYTE $0x0b // leaq $11(%r9,%r12), %r9 - WORD $0x294d; BYTE $0xe5 // subq %r12, %r13 - LONG $0xf5c58349 // addq $-11, %r13 - -LBB6_77: - LONG $0x0ae7c141 // shll $10, %r15d - QUAD $0xfca024001f8c8d41 // leal $-56613888(%r15,%rbx), %ecx - LONG $0x0000f981; WORD $0x0011 // cmpl $1114112, %ecx - LONG $0x001c820f; WORD $0x0000 // jb LBB6_80, $28(%rip) - LONG $0x02b845f6 // testb $2, $-72(%rbp) - LONG $0x0264840f; WORD $0x0000 // je LBB6_112, $612(%rip) - LONG $0xef00c766; BYTE $0xbf // movw $-16401, (%rax) - LONG $0xbd0240c6 // movb $-67, $2(%rax) - LONG $0x03c08348 // addq $3, %rax - LONG $0xfffed9e9; BYTE $0xff // jmp LBB6_57, $-295(%rip) - -LBB6_80: - WORD $0xce89 // movl %ecx, %esi - WORD $0xeec1; BYTE $0x12 // shrl $18, %esi - LONG $0xf0ce8040 // orb $-16, %sil - WORD $0x8840; BYTE $0x30 // movb %sil, (%rax) - WORD $0xce89 // movl %ecx, %esi - WORD $0xeec1; BYTE $0x0c // shrl $12, %esi - LONG $0x3fe68040 // andb $63, %sil - LONG $0x80ce8040 // orb $-128, %sil - LONG $0x01708840 // movb %sil, $1(%rax) - WORD $0xce89 // movl %ecx, %esi - WORD $0xeec1; BYTE $0x06 // shrl $6, %esi - LONG $0x3fe68040 // andb $63, %sil - LONG $0x80ce8040 // orb $-128, %sil - LONG $0x02708840 // movb %sil, $2(%rax) - WORD $0xe180; BYTE $0x3f // andb $63, %cl - WORD $0xc980; BYTE $0x80 // orb $-128, %cl - WORD $0x4888; BYTE $0x03 // movb %cl, $3(%rax) - LONG $0x04c08348 // addq $4, %rax - LONG $0xfffe99e9; BYTE $0xff // jmp LBB6_57, $-359(%rip) - -LBB6_81: - WORD $0x3145; BYTE $0xed // xorl %r13d, %r13d - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - -LBB6_82: - WORD $0x014c; BYTE $0xe8 // addq %r13, %rax - WORD $0x2948; BYTE $0xd0 // subq %rdx, %rax - -LBB6_83: - LONG $0x28c48348 // addq $40, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB6_84: - WORD $0x894c; BYTE $0xca // movq %r9, %rdx - WORD $0x2948; BYTE $0xfa // subq %rdi, %rdx - LONG $0xc87d8b48 // movq $-56(%rbp), %rdi - WORD $0x8948; BYTE $0x17 // movq %rdx, (%rdi) - WORD $0x8a41; BYTE $0x09 // movb (%r9), %cl - WORD $0x718d; BYTE $0xd0 // leal $-48(%rcx), %esi - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0x0afe8040 // cmpb $10, %sil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_86, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xffbe870f; WORD $0xffff // ja LBB6_83, $-66(%rip) - -LBB6_86: - LONG $0x014a8d48 // leaq $1(%rdx), %rcx - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - LONG $0x01498a41 // movb $1(%r9), %cl - WORD $0x718d; BYTE $0xd0 // leal $-48(%rcx), %esi - LONG $0x0afe8040 // cmpb $10, %sil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_88, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xff97870f; WORD $0xffff // ja LBB6_83, $-105(%rip) - -LBB6_88: - LONG $0x024a8d48 // leaq $2(%rdx), %rcx - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - LONG $0x02498a41 // movb $2(%r9), %cl - WORD $0x718d; BYTE $0xd0 // leal $-48(%rcx), %esi - LONG $0x0afe8040 // cmpb $10, %sil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_90, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xff70870f; WORD $0xffff // ja LBB6_83, $-144(%rip) - -LBB6_90: - LONG $0x034a8d48 // leaq $3(%rdx), %rcx - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - LONG $0x03498a41 // movb $3(%r9), %cl - WORD $0x718d; BYTE $0xd0 // leal $-48(%rcx), %esi - LONG $0x0afe8040 // cmpb $10, %sil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_92, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xff49870f; WORD $0xffff // ja LBB6_83, $-183(%rip) - -LBB6_92: - LONG $0x04c28348 // addq $4, %rdx - WORD $0x8948; BYTE $0x17 // movq %rdx, (%rdi) - LONG $0xffff3de9; BYTE $0xff // jmp LBB6_83, $-195(%rip) - -LBB6_93: - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x0149; BYTE $0xf9 // addq %rdi, %r9 - LONG $0xc8458b48 // movq $-56(%rbp), %rax - WORD $0x894c; BYTE $0x08 // movq %r9, (%rax) - LONG $0xfdc0c748; WORD $0xffff; BYTE $0xff // movq $-3, %rax - LONG $0xffff24e9; BYTE $0xff // jmp LBB6_83, $-220(%rip) - -LBB6_94: - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x0149; BYTE $0xf9 // addq %rdi, %r9 - LONG $0x0000dae9; BYTE $0x00 // jmp LBB6_107, $218(%rip) - -LBB6_95: - LONG $0x21748d4b; BYTE $0x04 // leaq $4(%r9,%r12), %rsi - LONG $0x000005e9; BYTE $0x00 // jmp LBB6_97, $5(%rip) - -LBB6_96: - LONG $0x21748d4b; BYTE $0x05 // leaq $5(%r9,%r12), %rsi - -LBB6_97: - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - WORD $0x2948; BYTE $0xfa // subq %rdi, %rdx - LONG $0x02c28348 // addq $2, %rdx - LONG $0xc8458b48 // movq $-56(%rbp), %rax - WORD $0x8948; BYTE $0x10 // movq %rdx, (%rax) - WORD $0x4e8a; BYTE $0x02 // movb $2(%rsi), %cl - WORD $0x798d; BYTE $0xd0 // leal $-48(%rcx), %edi - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0x0aff8040 // cmpb $10, %dil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_99, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xfed3870f; WORD $0xffff // ja LBB6_83, $-301(%rip) - -LBB6_99: - LONG $0x014a8d48 // leaq $1(%rdx), %rcx - LONG $0xc87d8b48 // movq $-56(%rbp), %rdi - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - WORD $0x4e8a; BYTE $0x03 // movb $3(%rsi), %cl - WORD $0x798d; BYTE $0xd0 // leal $-48(%rcx), %edi - LONG $0x0aff8040 // cmpb $10, %dil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_101, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xfea9870f; WORD $0xffff // ja LBB6_83, $-343(%rip) - -LBB6_101: - LONG $0x024a8d48 // leaq $2(%rdx), %rcx - LONG $0xc87d8b48 // movq $-56(%rbp), %rdi - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - WORD $0x4e8a; BYTE $0x04 // movb $4(%rsi), %cl - WORD $0x798d; BYTE $0xd0 // leal $-48(%rcx), %edi - LONG $0x0aff8040 // cmpb $10, %dil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_103, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xfe7f870f; WORD $0xffff // ja LBB6_83, $-385(%rip) - -LBB6_103: - LONG $0x034a8d48 // leaq $3(%rdx), %rcx - LONG $0xc87d8b48 // movq $-56(%rbp), %rdi - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - WORD $0x4e8a; BYTE $0x05 // movb $5(%rsi), %cl - WORD $0x718d; BYTE $0xd0 // leal $-48(%rcx), %esi - LONG $0x0afe8040 // cmpb $10, %sil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_105, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xfe55870f; WORD $0xffff // ja LBB6_83, $-427(%rip) - -LBB6_105: - LONG $0x04c28348 // addq $4, %rdx - LONG $0xc84d8b48 // movq $-56(%rbp), %rcx - WORD $0x8948; BYTE $0x11 // movq %rdx, (%rcx) - LONG $0xfffe45e9; BYTE $0xff // jmp LBB6_83, $-443(%rip) - -LBB6_106: - WORD $0x2949; BYTE $0xf9 // subq %rdi, %r9 - WORD $0xff49; BYTE $0xc1 // incq %r9 - -LBB6_107: - LONG $0xc8458b48 // movq $-56(%rbp), %rax - WORD $0x894c; BYTE $0x08 // movq %r9, (%rax) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0xfffe2ce9; BYTE $0xff // jmp LBB6_83, $-468(%rip) - -LBB6_108: - LONG $0x02b845f6 // testb $2, $-72(%rbp) - LONG $0x0015840f; WORD $0x0000 // je LBB6_111, $21(%rip) - LONG $0xef00c766; BYTE $0xbf // movw $-16401, (%rax) - LONG $0xbd0240c6 // movb $-67, $2(%rax) - LONG $0x03c08348 // addq $3, %rax - -LBB6_110: - WORD $0x3145; BYTE $0xed // xorl %r13d, %r13d - LONG $0xfffe07e9; BYTE $0xff // jmp LBB6_82, $-505(%rip) - -LBB6_111: - LONG $0xc8458b48 // movq $-56(%rbp), %rax - WORD $0x894c; BYTE $0x18 // movq %r11, (%rax) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xfffdfae9; BYTE $0xff // jmp LBB6_83, $-518(%rip) - -LBB6_112: - WORD $0x2949; BYTE $0xf9 // subq %rdi, %r9 - LONG $0xfcc18349 // addq $-4, %r9 - -LBB6_113: - LONG $0xc8458b48 // movq $-56(%rbp), %rax - WORD $0x894c; BYTE $0x08 // movq %r9, (%rax) - LONG $0xfcc0c748; WORD $0xffff; BYTE $0xff // movq $-4, %rax - LONG $0xfffde0e9; BYTE $0xff // jmp LBB6_83, $-544(%rip) - -LBB6_114: - LONG $0x21448d4b; BYTE $0x0a // leaq $10(%r9,%r12), %rax - LONG $0x000005e9; BYTE $0x00 // jmp LBB6_116, $5(%rip) - -LBB6_115: - LONG $0x21448d4b; BYTE $0x0b // leaq $11(%r9,%r12), %rax - -LBB6_116: - WORD $0x2948; BYTE $0xf8 // subq %rdi, %rax - LONG $0xfcc08348 // addq $-4, %rax - LONG $0xc84d8b48 // movq $-56(%rbp), %rcx - WORD $0x8948; BYTE $0x01 // movq %rax, (%rcx) - LONG $0xfcc0c748; WORD $0xffff; BYTE $0xff // movq $-4, %rax - LONG $0xfffdb7e9; BYTE $0xff // jmp LBB6_83, $-585(%rip) - -LBB6_117: - LONG $0x3a448d49; BYTE $0x04 // leaq $4(%r10,%rdi), %rax - WORD $0x2949; BYTE $0xc1 // subq %rax, %r9 - LONG $0xffffb7e9; BYTE $0xff // jmp LBB6_113, $-73(%rip) - -LBB6_118: - WORD $0x014d; BYTE $0xe1 // addq %r12, %r9 - WORD $0x2949; BYTE $0xf9 // subq %rdi, %r9 - LONG $0xfffface9; BYTE $0xff // jmp LBB6_113, $-84(%rip) - QUAD $0x0000000000000000; WORD $0x0000 // .p2align 4, 0x00 - -LCPI7_0: - QUAD $0x2626262626262626; QUAD $0x2626262626262626 // .space 16, '&&&&&&&&&&&&&&&&' - -LCPI7_1: - QUAD $0xe2e2e2e2e2e2e2e2; QUAD $0xe2e2e2e2e2e2e2e2 // .space 16, '\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2' - -LCPI7_2: - QUAD $0xfdfdfdfdfdfdfdfd; QUAD $0xfdfdfdfdfdfdfdfd // .space 16, '\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd' - -LCPI7_3: - QUAD $0x3c3c3c3c3c3c3c3c; QUAD $0x3c3c3c3c3c3c3c3c // .space 16, '<<<<<<<<<<<<<<<<' - - // .p2align 4, 0x90 -_html_escape: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x10ec8348 // subq $16, %rsp - LONG $0xc84d8948 // movq %rcx, $-56(%rbp) - WORD $0x8949; BYTE $0xd2 // movq %rdx, %r10 - LONG $0xd0558948 // movq %rdx, $-48(%rbp) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x04618e0f; WORD $0x0000 // jle LBB7_67, $1121(%rip) - LONG $0xc8458b48 // movq $-56(%rbp), %rax - WORD $0x8b4c; BYTE $0x08 // movq (%rax), %r9 - QUAD $0xffffff89056ff9c5 // vmovdqa $-119(%rip), %xmm0 /* LCPI7_0(%rip) */ - QUAD $0xffffff910d6ff9c5 // vmovdqa $-111(%rip), %xmm1 /* LCPI7_1(%rip) */ - QUAD $0xffffff99156ff9c5 // vmovdqa $-103(%rip), %xmm2 /* LCPI7_2(%rip) */ - QUAD $0xffffffa11d6ff9c5 // vmovdqa $-95(%rip), %xmm3 /* LCPI7_3(%rip) */ - LONG $0x5a1d8d4c; WORD $0x00e2; BYTE $0x00 // leaq $57946(%rip), %r11 /* __HtmlQuoteTab(%rip) */ - WORD $0x8949; BYTE $0xff // movq %rdi, %r15 - LONG $0xd0558b4c // movq $-48(%rbp), %r10 - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB7_2: - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x043e8e0f; WORD $0x0000 // jle LBB7_3, $1086(%rip) - LONG $0x0ffe8348 // cmpq $15, %rsi - WORD $0x9f0f; BYTE $0xc3 // setg %bl - WORD $0x894d; BYTE $0xcc // movq %r9, %r12 - WORD $0x894d; BYTE $0xd0 // movq %r10, %r8 - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0x894d; BYTE $0xfd // movq %r15, %r13 - LONG $0x10f98349 // cmpq $16, %r9 - LONG $0x008a8c0f; WORD $0x0000 // jl LBB7_11, $138(%rip) - LONG $0x10fe8348 // cmpq $16, %rsi - LONG $0x00808c0f; WORD $0x0000 // jl LBB7_11, $128(%rip) - WORD $0x894d; BYTE $0xfd // movq %r15, %r13 - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - WORD $0x894d; BYTE $0xd0 // movq %r10, %r8 - WORD $0x894c; BYTE $0xc9 // movq %r9, %rcx - LONG $0x90909090 // .p2align 4, 0x90 - -LBB7_7: - LONG $0x6f7ac1c4; WORD $0x0065 // vmovdqu (%r13), %xmm4 - LONG $0xe874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm5 - LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 - LONG $0xedebc9c5 // vpor %xmm5, %xmm6, %xmm5 - LONG $0xf2dbd9c5 // vpand %xmm2, %xmm4, %xmm6 - LONG $0xf374c9c5 // vpcmpeqb %xmm3, %xmm6, %xmm6 - LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 - LONG $0x7f7ac1c4; BYTE $0x20 // vmovdqu %xmm4, (%r8) - LONG $0xc5d7f9c5 // vpmovmskb %xmm5, %eax - WORD $0x8566; BYTE $0xc0 // testw %ax, %ax - LONG $0x0130850f; WORD $0x0000 // jne LBB7_8, $304(%rip) - LONG $0x10c58349 // addq $16, %r13 - LONG $0x10c08349 // addq $16, %r8 - LONG $0xf0428d48 // leaq $-16(%rdx), %rax - LONG $0xf0618d4c // leaq $-16(%rcx), %r12 - LONG $0x1ffa8348 // cmpq $31, %rdx - WORD $0x9f0f; BYTE $0xc3 // setg %bl - LONG $0x20fa8348 // cmpq $32, %rdx - LONG $0x001f8c0f; WORD $0x0000 // jl LBB7_11, $31(%rip) - WORD $0x8948; BYTE $0xc2 // movq %rax, %rdx - LONG $0x1ff98348 // cmpq $31, %rcx - WORD $0x894c; BYTE $0xe1 // movq %r12, %rcx - LONG $0xff9f8f0f; WORD $0xffff // jg LBB7_7, $-97(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB7_11: - WORD $0xdb84 // testb %bl, %bl - LONG $0x0068840f; WORD $0x0000 // je LBB7_12, $104(%rip) - LONG $0x6f7ac1c4; WORD $0x0065 // vmovdqu (%r13), %xmm4 - LONG $0xe874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm5 - LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 - LONG $0xedebc9c5 // vpor %xmm5, %xmm6, %xmm5 - LONG $0xf2dbd9c5 // vpand %xmm2, %xmm4, %xmm6 - LONG $0xf374c9c5 // vpcmpeqb %xmm3, %xmm6, %xmm6 - LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 - LONG $0xc5d7f9c5 // vpmovmskb %xmm5, %eax - LONG $0x0100000d; BYTE $0x00 // orl $65536, %eax - LONG $0xf0bc0f44 // bsfl %eax, %r14d - LONG $0x7ef9e1c4; BYTE $0xe0 // vmovq %xmm4, %rax - WORD $0x394d; BYTE $0xf4 // cmpq %r14, %r12 - LONG $0x00ca8d0f; WORD $0x0000 // jge LBB7_15, $202(%rip) - LONG $0x08fc8349 // cmpq $8, %r12 - LONG $0x00f0820f; WORD $0x0000 // jb LBB7_26, $240(%rip) - WORD $0x8949; BYTE $0x00 // movq %rax, (%r8) - LONG $0x08758d4d // leaq $8(%r13), %r14 - LONG $0x08c08349 // addq $8, %r8 - LONG $0x24448d49; BYTE $0xf8 // leaq $-8(%r12), %rax - LONG $0x04f88348 // cmpq $4, %rax - LONG $0x00e68d0f; WORD $0x0000 // jge LBB7_29, $230(%rip) - LONG $0x0000f3e9; BYTE $0x00 // jmp LBB7_30, $243(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB7_12: - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x01148e0f; WORD $0x0000 // jle LBB7_13, $276(%rip) - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x010b8e0f; WORD $0x0000 // jle LBB7_40, $267(%rip) - QUAD $0x9090909090909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB7_36: - LONG $0x55b60f41; BYTE $0x00 // movzbl (%r13), %edx - LONG $0x3efa8348 // cmpq $62, %rdx - LONG $0x0014870f; WORD $0x0000 // ja LBB7_37, $20(%rip) - QUAD $0x004000000000b948; WORD $0x5000 // movabsq $5764607797912141824, %rcx - LONG $0xd1a30f48 // btq %rdx, %rcx - LONG $0x0080820f; WORD $0x0000 // jb LBB7_42, $128(%rip) - -LBB7_37: - WORD $0xfa80; BYTE $0xe2 // cmpb $-30, %dl - LONG $0x0077840f; WORD $0x0000 // je LBB7_42, $119(%rip) - LONG $0xff488d48 // leaq $-1(%rax), %rcx - WORD $0xff49; BYTE $0xc5 // incq %r13 - WORD $0x8841; BYTE $0x10 // movb %dl, (%r8) - LONG $0x02f88348 // cmpq $2, %rax - LONG $0x00c08c0f; WORD $0x0000 // jl LBB7_40, $192(%rip) - LONG $0x24548d49; BYTE $0xff // leaq $-1(%r12), %rdx - WORD $0xff49; BYTE $0xc0 // incq %r8 - WORD $0x8948; BYTE $0xc8 // movq %rcx, %rax - LONG $0x01fc8349 // cmpq $1, %r12 - WORD $0x8949; BYTE $0xd4 // movq %rdx, %r12 - LONG $0xffa88f0f; WORD $0xffff // jg LBB7_36, $-88(%rip) - LONG $0x0000a3e9; BYTE $0x00 // jmp LBB7_40, $163(%rip) - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB7_8: - WORD $0xb70f; BYTE $0xc0 // movzwl %ax, %eax - WORD $0x294d; BYTE $0xfd // subq %r15, %r13 - LONG $0xe0bc0f44 // bsfl %eax, %r12d - WORD $0x014d; BYTE $0xec // addq %r13, %r12 - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x00f3890f; WORD $0x0000 // jns LBB7_46, $243(%rip) - LONG $0x000249e9; BYTE $0x00 // jmp LBB7_45, $585(%rip) - -LBB7_15: - LONG $0x08fe8341 // cmpl $8, %r14d - LONG $0x0095820f; WORD $0x0000 // jb LBB7_16, $149(%rip) - WORD $0x8949; BYTE $0x00 // movq %rax, (%r8) - LONG $0x08658d4d // leaq $8(%r13), %r12 - LONG $0x08c08349 // addq $8, %r8 - LONG $0xf8468d49 // leaq $-8(%r14), %rax - LONG $0x04f88348 // cmpq $4, %rax - LONG $0x008c8d0f; WORD $0x0000 // jge LBB7_19, $140(%rip) - LONG $0x00009ae9; BYTE $0x00 // jmp LBB7_20, $154(%rip) - -LBB7_42: - WORD $0x294d; BYTE $0xfd // subq %r15, %r13 - LONG $0x0000b2e9; BYTE $0x00 // jmp LBB7_43, $178(%rip) - -LBB7_26: - WORD $0x894d; BYTE $0xee // movq %r13, %r14 - WORD $0x894c; BYTE $0xe0 // movq %r12, %rax - LONG $0x04f88348 // cmpq $4, %rax - LONG $0x00128c0f; WORD $0x0000 // jl LBB7_30, $18(%rip) - -LBB7_29: - WORD $0x8b41; BYTE $0x0e // movl (%r14), %ecx - WORD $0x8941; BYTE $0x08 // movl %ecx, (%r8) - LONG $0x04c68349 // addq $4, %r14 - LONG $0x04c08349 // addq $4, %r8 - LONG $0xfcc08348 // addq $-4, %rax - -LBB7_30: - LONG $0x02f88348 // cmpq $2, %rax - LONG $0x015b830f; WORD $0x0000 // jae LBB7_31, $347(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0006840f; WORD $0x0000 // je LBB7_34, $6(%rip) - -LBB7_33: - WORD $0x8a41; BYTE $0x06 // movb (%r14), %al - WORD $0x8841; BYTE $0x00 // movb %al, (%r8) - -LBB7_34: - WORD $0x294d; BYTE $0xfc // subq %r15, %r12 - WORD $0x014d; BYTE $0xec // addq %r13, %r12 - WORD $0xf749; BYTE $0xd4 // notq %r12 - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x0071890f; WORD $0x0000 // jns LBB7_46, $113(%rip) - LONG $0x0001c7e9; BYTE $0x00 // jmp LBB7_45, $455(%rip) - -LBB7_13: - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - -LBB7_40: - WORD $0x294d; BYTE $0xfd // subq %r15, %r13 - WORD $0xf748; BYTE $0xd9 // negq %rcx - WORD $0x194d; BYTE $0xe4 // sbbq %r12, %r12 - WORD $0x314d; BYTE $0xec // xorq %r13, %r12 - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x0054890f; WORD $0x0000 // jns LBB7_46, $84(%rip) - LONG $0x0001aae9; BYTE $0x00 // jmp LBB7_45, $426(%rip) - -LBB7_16: - WORD $0x894d; BYTE $0xec // movq %r13, %r12 - WORD $0x894c; BYTE $0xf0 // movq %r14, %rax - LONG $0x04f88348 // cmpq $4, %rax - LONG $0x00138c0f; WORD $0x0000 // jl LBB7_20, $19(%rip) - -LBB7_19: - LONG $0x240c8b41 // movl (%r12), %ecx - WORD $0x8941; BYTE $0x08 // movl %ecx, (%r8) - LONG $0x04c48349 // addq $4, %r12 - LONG $0x04c08349 // addq $4, %r8 - LONG $0xfcc08348 // addq $-4, %rax - -LBB7_20: - LONG $0x02f88348 // cmpq $2, %rax - LONG $0x010d830f; WORD $0x0000 // jae LBB7_21, $269(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0007840f; WORD $0x0000 // je LBB7_24, $7(%rip) - -LBB7_23: - LONG $0x24048a41 // movb (%r12), %al - WORD $0x8841; BYTE $0x00 // movb %al, (%r8) - -LBB7_24: - WORD $0x294d; BYTE $0xfd // subq %r15, %r13 - WORD $0x014d; BYTE $0xf5 // addq %r14, %r13 - -LBB7_43: - WORD $0x894d; BYTE $0xec // movq %r13, %r12 - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x015b880f; WORD $0x0000 // js LBB7_45, $347(%rip) - -LBB7_46: - WORD $0x014d; BYTE $0xe7 // addq %r12, %r15 - WORD $0x014d; BYTE $0xe2 // addq %r12, %r10 - WORD $0x294c; BYTE $0xe6 // subq %r12, %rsi - LONG $0x016e8e0f; WORD $0x0000 // jle LBB7_47, $366(%rip) - WORD $0x294d; BYTE $0xe1 // subq %r12, %r9 - WORD $0x8a41; BYTE $0x0f // movb (%r15), %cl - WORD $0xf980; BYTE $0xe2 // cmpb $-30, %cl - LONG $0x00f0840f; WORD $0x0000 // je LBB7_50, $240(%rip) - WORD $0x894c; BYTE $0xf8 // movq %r15, %rax - -LBB7_54: - WORD $0xb60f; BYTE $0xd1 // movzbl %cl, %edx - LONG $0x04e2c148 // shlq $4, %rdx - LONG $0x1a0c8b4a // movq (%rdx,%r11), %rcx - WORD $0x634c; BYTE $0xe1 // movslq %ecx, %r12 - WORD $0x294d; BYTE $0xe1 // subq %r12, %r9 - LONG $0x015b8c0f; WORD $0x0000 // jl LBB7_55, $347(%rip) - LONG $0x20e1c148 // shlq $32, %rcx - LONG $0x1a748d4e; BYTE $0x08 // leaq $8(%rdx,%r11), %r14 - QUAD $0x000300000001bb48; WORD $0x0000 // movabsq $12884901889, %rbx - WORD $0x3948; BYTE $0xd9 // cmpq %rbx, %rcx - LONG $0x00238c0f; WORD $0x0000 // jl LBB7_59, $35(%rip) - WORD $0x8b41; BYTE $0x0e // movl (%r14), %ecx - WORD $0x8941; BYTE $0x0a // movl %ecx, (%r10) - LONG $0x1a748d4e; BYTE $0x0c // leaq $12(%rdx,%r11), %r14 - LONG $0x04428d4d // leaq $4(%r10), %r8 - LONG $0x24548d49; BYTE $0xfc // leaq $-4(%r12), %rdx - LONG $0x02fa8348 // cmpq $2, %rdx - LONG $0x0015830f; WORD $0x0000 // jae LBB7_62, $21(%rip) - LONG $0x000024e9; BYTE $0x00 // jmp LBB7_63, $36(%rip) - - // .p2align 4, 0x90 -LBB7_59: - WORD $0x894d; BYTE $0xd0 // movq %r10, %r8 - WORD $0x894c; BYTE $0xe2 // movq %r12, %rdx - LONG $0x02fa8348 // cmpq $2, %rdx - LONG $0x0014820f; WORD $0x0000 // jb LBB7_63, $20(%rip) - -LBB7_62: - LONG $0x0eb70f41 // movzwl (%r14), %ecx - LONG $0x08894166 // movw %cx, (%r8) - LONG $0x02c68349 // addq $2, %r14 - LONG $0x02c08349 // addq $2, %r8 - LONG $0xfec28348 // addq $-2, %rdx - -LBB7_63: - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x0006840f; WORD $0x0000 // je LBB7_65, $6(%rip) - WORD $0x8a41; BYTE $0x0e // movb (%r14), %cl - WORD $0x8841; BYTE $0x08 // movb %cl, (%r8) - -LBB7_65: - WORD $0x014d; BYTE $0xe2 // addq %r12, %r10 - -LBB7_66: - WORD $0xff48; BYTE $0xc0 // incq %rax - LONG $0xff4e8d48 // leaq $-1(%rsi), %rcx - WORD $0x8949; BYTE $0xc7 // movq %rax, %r15 - LONG $0x01fe8348 // cmpq $1, %rsi - WORD $0x8948; BYTE $0xce // movq %rcx, %rsi - LONG $0xfc938f0f; WORD $0xffff // jg LBB7_2, $-877(%rip) - LONG $0x0000b7e9; BYTE $0x00 // jmp LBB7_67, $183(%rip) - -LBB7_31: - LONG $0x0eb70f41 // movzwl (%r14), %ecx - LONG $0x08894166 // movw %cx, (%r8) - LONG $0x02c68349 // addq $2, %r14 - LONG $0x02c08349 // addq $2, %r8 - LONG $0xfec08348 // addq $-2, %rax - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xfe91850f; WORD $0xffff // jne LBB7_33, $-367(%rip) - LONG $0xfffe92e9; BYTE $0xff // jmp LBB7_34, $-366(%rip) - -LBB7_21: - LONG $0x0cb70f41; BYTE $0x24 // movzwl (%r12), %ecx - LONG $0x08894166 // movw %cx, (%r8) - LONG $0x02c48349 // addq $2, %r12 - LONG $0x02c08349 // addq $2, %r8 - LONG $0xfec08348 // addq $-2, %rax - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xfede850f; WORD $0xffff // jne LBB7_23, $-290(%rip) - LONG $0xfffee0e9; BYTE $0xff // jmp LBB7_24, $-288(%rip) - -LBB7_50: - LONG $0x03fe8348 // cmpq $3, %rsi - LONG $0x00288c0f; WORD $0x0000 // jl LBB7_56, $40(%rip) - LONG $0x017f8041; BYTE $0x80 // cmpb $-128, $1(%r15) - LONG $0x001d850f; WORD $0x0000 // jne LBB7_56, $29(%rip) - LONG $0x024f8a41 // movb $2(%r15), %cl - WORD $0xc889 // movl %ecx, %eax - WORD $0xfe24 // andb $-2, %al - WORD $0xa83c // cmpb $-88, %al - LONG $0x000d850f; WORD $0x0000 // jne LBB7_56, $13(%rip) - LONG $0x02478d49 // leaq $2(%r15), %rax - LONG $0xfec68348 // addq $-2, %rsi - LONG $0xfffee1e9; BYTE $0xff // jmp LBB7_54, $-287(%rip) - -LBB7_56: - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x00558e0f; WORD $0x0000 // jle LBB7_3, $85(%rip) - LONG $0xe202c641 // movb $-30, (%r10) - WORD $0xff49; BYTE $0xc2 // incq %r10 - WORD $0xff49; BYTE $0xc9 // decq %r9 - WORD $0x894c; BYTE $0xf8 // movq %r15, %rax - LONG $0xffff52e9; BYTE $0xff // jmp LBB7_66, $-174(%rip) - -LBB7_45: - LONG $0xd0552b4c // subq $-48(%rbp), %r10 - WORD $0x894c; BYTE $0xe0 // movq %r12, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x014c; BYTE $0xd0 // addq %r10, %rax - LONG $0xc84d8b48 // movq $-56(%rbp), %rcx - WORD $0x8948; BYTE $0x01 // movq %rax, (%rcx) - WORD $0x294c; BYTE $0xff // subq %r15, %rdi - WORD $0x014c; BYTE $0xe7 // addq %r12, %rdi - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x00002ae9; BYTE $0x00 // jmp LBB7_68, $42(%rip) - -LBB7_47: - WORD $0x894c; BYTE $0xf8 // movq %r15, %rax - -LBB7_67: - LONG $0xd0552b4c // subq $-48(%rbp), %r10 - LONG $0xc84d8b48 // movq $-56(%rbp), %rcx - WORD $0x894c; BYTE $0x11 // movq %r10, (%rcx) - WORD $0x2948; BYTE $0xf8 // subq %rdi, %rax - LONG $0x000014e9; BYTE $0x00 // jmp LBB7_68, $20(%rip) - -LBB7_55: - LONG $0xd0552b4c // subq $-48(%rbp), %r10 - LONG $0xc8458b48 // movq $-56(%rbp), %rax - WORD $0x894c; BYTE $0x10 // movq %r10, (%rax) - -LBB7_3: - WORD $0xf749; BYTE $0xd7 // notq %r15 - WORD $0x0149; BYTE $0xff // addq %rdi, %r15 - WORD $0x894c; BYTE $0xf8 // movq %r15, %rax - -LBB7_68: - LONG $0x10c48348 // addq $16, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - BYTE $0x90 // .p2align 4, 0x90 - -_atof_eisel_lemire64: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - LONG $0x015c868d; WORD $0x0000 // leal $348(%rsi), %eax - LONG $0x0002b73d; BYTE $0x00 // cmpl $695, %eax - LONG $0x0115870f; WORD $0x0000 // ja LBB8_1, $277(%rip) - WORD $0x8949; BYTE $0xc8 // movq %rcx, %r8 - WORD $0x8941; BYTE $0xd1 // movl %edx, %r9d - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0x000d840f; WORD $0x0000 // je LBB8_4, $13(%rip) - LONG $0xd7bd0f4c // bsrq %rdi, %r10 - LONG $0x3ff28349 // xorq $63, %r10 - LONG $0x000006e9; BYTE $0x00 // jmp LBB8_5, $6(%rip) - -LBB8_4: - LONG $0x0040ba41; WORD $0x0000 // movl $64, %r10d - -LBB8_5: - WORD $0x8944; BYTE $0xd1 // movl %r10d, %ecx - WORD $0xd348; BYTE $0xe7 // shlq %cl, %rdi - WORD $0xc389 // movl %eax, %ebx - LONG $0x04e3c148 // shlq $4, %rbx - LONG $0xf1358d4c; WORD $0x0067; BYTE $0x00 // leaq $26609(%rip), %r14 /* _POW10_M128_TAB(%rip) */ - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x3364f74a; BYTE $0x08 // mulq $8(%rbx,%r14) - WORD $0x8949; BYTE $0xc7 // movq %rax, %r15 - WORD $0x8949; BYTE $0xd3 // movq %rdx, %r11 - WORD $0x8944; BYTE $0xd8 // movl %r11d, %eax - LONG $0x0001ff25; BYTE $0x00 // andl $511, %eax - WORD $0x8948; BYTE $0xf9 // movq %rdi, %rcx - WORD $0xf748; BYTE $0xd1 // notq %rcx - WORD $0x3949; BYTE $0xcf // cmpq %rcx, %r15 - LONG $0x004f860f; WORD $0x0000 // jbe LBB8_11, $79(%rip) - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - LONG $0x0001ff3d; BYTE $0x00 // cmpl $511, %eax - LONG $0x0044850f; WORD $0x0000 // jne LBB8_13, $68(%rip) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x3324f74a // mulq (%rbx,%r14) - WORD $0x014c; BYTE $0xfa // addq %r15, %rdx - LONG $0x00d38349 // adcq $0, %r11 - WORD $0x3948; BYTE $0xc8 // cmpq %rcx, %rax - LONG $0x001d860f; WORD $0x0000 // jbe LBB8_12, $29(%rip) - LONG $0xfffa8348 // cmpq $-1, %rdx - LONG $0x0013850f; WORD $0x0000 // jne LBB8_12, $19(%rip) - WORD $0x8944; BYTE $0xd8 // movl %r11d, %eax - LONG $0x0001ff25; BYTE $0x00 // andl $511, %eax - LONG $0x0001ff3d; BYTE $0x00 // cmpl $511, %eax - LONG $0x0079840f; WORD $0x0000 // je LBB8_1, $121(%rip) - -LBB8_12: - WORD $0x8944; BYTE $0xd8 // movl %r11d, %eax - LONG $0x0001ff25; BYTE $0x00 // andl $511, %eax - LONG $0x000003e9; BYTE $0x00 // jmp LBB8_13, $3(%rip) - -LBB8_11: - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - -LBB8_13: - WORD $0x894c; BYTE $0xdf // movq %r11, %rdi - LONG $0x3fefc148 // shrq $63, %rdi - WORD $0x4f8d; BYTE $0x09 // leal $9(%rdi), %ecx - WORD $0xd349; BYTE $0xeb // shrq %cl, %r11 - WORD $0x0948; BYTE $0xd0 // orq %rdx, %rax - LONG $0x000f850f; WORD $0x0000 // jne LBB8_16, $15(%rip) - WORD $0x8944; BYTE $0xd8 // movl %r11d, %eax - WORD $0xe083; BYTE $0x03 // andl $3, %eax - WORD $0xf883; BYTE $0x01 // cmpl $1, %eax - LONG $0x0044840f; WORD $0x0000 // je LBB8_1, $68(%rip) - -LBB8_16: - LONG $0x526ac669; WORD $0x0003 // imull $217706, %esi, %eax - WORD $0xf8c1; BYTE $0x10 // sarl $16, %eax - LONG $0x00043f05; BYTE $0x00 // addl $1087, %eax - WORD $0x6348; BYTE $0xd0 // movslq %eax, %rdx - WORD $0x8944; BYTE $0xd8 // movl %r11d, %eax - WORD $0xe083; BYTE $0x01 // andl $1, %eax - WORD $0x014c; BYTE $0xd8 // addq %r11, %rax - QUAD $0x000000000000b948; WORD $0x01c0 // movabsq $126100789566373888, %rcx - WORD $0x2148; BYTE $0xc1 // andq %rax, %rcx - WORD $0x294c; BYTE $0xd2 // subq %r10, %rdx - LONG $0x3a548d48; BYTE $0xfe // leaq $-2(%rdx,%rdi), %rdx - LONG $0x01f98348 // cmpq $1, %rcx - LONG $0xffda8348 // sbbq $-1, %rdx - LONG $0xfdfa8148; WORD $0x0007; BYTE $0x00 // cmpq $2045, %rdx - LONG $0x0009860f; WORD $0x0000 // jbe LBB8_18, $9(%rip) - -LBB8_1: - WORD $0xc031 // xorl %eax, %eax - -LBB8_19: - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB8_18: - WORD $0xff48; BYTE $0xc2 // incq %rdx - LONG $0x01f98348 // cmpq $1, %rcx - WORD $0x02b1 // movb $2, %cl - WORD $0xd980; BYTE $0x00 // sbbb $0, %cl - WORD $0xd348; BYTE $0xe8 // shrq %cl, %rax - LONG $0x34e2c148 // shlq $52, %rdx - QUAD $0xffffffffffffb948; WORD $0x000f // movabsq $4503599627370495, %rcx - WORD $0x2148; BYTE $0xc1 // andq %rax, %rcx - WORD $0x0948; BYTE $0xd1 // orq %rdx, %rcx - QUAD $0x000000000000b848; WORD $0x8000 // movabsq $-9223372036854775808, %rax - WORD $0x0948; BYTE $0xc8 // orq %rcx, %rax - LONG $0xfff98341 // cmpl $-1, %r9d - LONG $0xc1450f48 // cmovneq %rcx, %rax - WORD $0x8949; BYTE $0x00 // movq %rax, (%r8) - WORD $0x01b0 // movb $1, %al - LONG $0xffffb7e9; BYTE $0xff // jmp LBB8_19, $-73(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -_decimal_to_f64: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax - WORD $0x8948; BYTE $0xf3 // movq %rsi, %rbx - WORD $0x8949; BYTE $0xff // movq %rdi, %r15 - QUAD $0x000000000000bd49; WORD $0x0010 // movabsq $4503599627370496, %r13 - LONG $0x00107f83 // cmpl $0, $16(%rdi) - LONG $0x002f840f; WORD $0x0000 // je LBB9_4, $47(%rip) - QUAD $0x000000000000be49; WORD $0x7ff0 // movabsq $9218868437227405312, %r14 - LONG $0x14478b41 // movl $20(%r15), %eax - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - LONG $0x0001363d; BYTE $0x00 // cmpl $310, %eax - LONG $0x034c8f0f; WORD $0x0000 // jg LBB9_64, $844(%rip) - LONG $0xfffeb63d; BYTE $0xff // cmpl $-330, %eax - LONG $0x00138d0f; WORD $0x0000 // jge LBB9_5, $19(%rip) - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - LONG $0x000339e9; BYTE $0x00 // jmp LBB9_64, $825(%rip) - -LBB9_4: - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - LONG $0x00032ee9; BYTE $0x00 // jmp LBB9_64, $814(%rip) - -LBB9_5: - WORD $0xc085 // testl %eax, %eax - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - LONG $0x005a8e0f; WORD $0x0000 // jle LBB9_12, $90(%rip) - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - LONG $0xd8358d4c; WORD $0x0091; BYTE $0x00 // leaq $37336(%rip), %r14 /* _POW_TAB(%rip) */ - LONG $0x00002de9; BYTE $0x00 // jmp LBB9_8, $45(%rip) - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB9_10: - WORD $0xc089 // movl %eax, %eax - LONG $0x861c8b41 // movl (%r14,%rax,4), %ebx - LONG $0x107f8341; BYTE $0x00 // cmpl $0, $16(%r15) - LONG $0x000a840f; WORD $0x0000 // je LBB9_7, $10(%rip) - -LBB9_11: - WORD $0x894c; BYTE $0xff // movq %r15, %rdi - WORD $0xde89 // movl %ebx, %esi - LONG $0x0060f5e8; BYTE $0x00 // callq _right_shift, $24821(%rip) - -LBB9_7: - WORD $0x0141; BYTE $0xdc // addl %ebx, %r12d - LONG $0x14478b41 // movl $20(%r15), %eax - WORD $0xc085 // testl %eax, %eax - LONG $0x001e8e0f; WORD $0x0000 // jle LBB9_12, $30(%rip) - -LBB9_8: - WORD $0xf883; BYTE $0x08 // cmpl $8, %eax - LONG $0xffcd8e0f; WORD $0xffff // jle LBB9_10, $-51(%rip) - LONG $0x00001bbb; BYTE $0x00 // movl $27, %ebx - LONG $0x107f8341; BYTE $0x00 // cmpl $0, $16(%r15) - LONG $0xffce850f; WORD $0xffff // jne LBB9_11, $-50(%rip) - LONG $0xffffd3e9; BYTE $0xff // jmp LBB9_7, $-45(%rip) - -LBB9_12: - LONG $0x81358d4c; WORD $0x0091; BYTE $0x00 // leaq $37249(%rip), %r14 /* _POW_TAB(%rip) */ - LONG $0x00002de9; BYTE $0x00 // jmp LBB9_14, $45(%rip) - -LBB9_18: - LONG $0x00001bbb; BYTE $0x00 // movl $27, %ebx - LONG $0x107f8341; BYTE $0x00 // cmpl $0, $16(%r15) - LONG $0x001a840f; WORD $0x0000 // je LBB9_13, $26(%rip) - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB9_20: - WORD $0x894c; BYTE $0xff // movq %r15, %rdi - WORD $0xde89 // movl %ebx, %esi - LONG $0x005ea6e8; BYTE $0x00 // callq _left_shift, $24230(%rip) - LONG $0x14478b41 // movl $20(%r15), %eax - -LBB9_13: - WORD $0x2941; BYTE $0xdc // subl %ebx, %r12d - -LBB9_14: - WORD $0xc085 // testl %eax, %eax - LONG $0x0017880f; WORD $0x0000 // js LBB9_17, $23(%rip) - LONG $0x0035850f; WORD $0x0000 // jne LBB9_21, $53(%rip) - WORD $0x8b49; BYTE $0x0f // movq (%r15), %rcx - WORD $0x3980; BYTE $0x35 // cmpb $53, (%rcx) - LONG $0x000e8c0f; WORD $0x0000 // jl LBB9_19, $14(%rip) - LONG $0x000024e9; BYTE $0x00 // jmp LBB9_21, $36(%rip) - - // .p2align 4, 0x90 -LBB9_17: - WORD $0xf883; BYTE $0xf8 // cmpl $-8, %eax - LONG $0xffab8c0f; WORD $0xffff // jl LBB9_18, $-85(%rip) - -LBB9_19: - WORD $0xc189 // movl %eax, %ecx - WORD $0xd9f7 // negl %ecx - WORD $0x6348; BYTE $0xc9 // movslq %ecx, %rcx - LONG $0x8e1c8b41 // movl (%r14,%rcx,4), %ebx - LONG $0x107f8341; BYTE $0x00 // cmpl $0, $16(%r15) - LONG $0xffb1850f; WORD $0xffff // jne LBB9_20, $-79(%rip) - LONG $0xffffbae9; BYTE $0xff // jmp LBB9_13, $-70(%rip) - -LBB9_21: - LONG $0x02fc8141; WORD $0xfffc; BYTE $0xff // cmpl $-1022, %r12d - LONG $0x00538f0f; WORD $0x0000 // jg LBB9_27, $83(%rip) - LONG $0x107f8341; BYTE $0x00 // cmpl $0, $16(%r15) - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - LONG $0x0060840f; WORD $0x0000 // je LBB9_29, $96(%rip) - LONG $0xc6fc8141; WORD $0xfffb; BYTE $0xff // cmpl $-1082, %r12d - LONG $0x005e8f0f; WORD $0x0000 // jg LBB9_30, $94(%rip) - LONG $0xc1c48141; WORD $0x0003; BYTE $0x00 // addl $961, %r12d - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB9_25: - WORD $0x894c; BYTE $0xff // movq %r15, %rdi - LONG $0x00003cbe; BYTE $0x00 // movl $60, %esi - LONG $0x006003e8; BYTE $0x00 // callq _right_shift, $24579(%rip) - LONG $0x3cc48341 // addl $60, %r12d - LONG $0x88fc8341 // cmpl $-120, %r12d - LONG $0xffe58c0f; WORD $0xffff // jl LBB9_25, $-27(%rip) - LONG $0x3cc48341 // addl $60, %r12d - LONG $0x00002ee9; BYTE $0x00 // jmp LBB9_31, $46(%rip) - -LBB9_27: - LONG $0x00fc8141; WORD $0x0004; BYTE $0x00 // cmpl $1024, %r12d - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - LONG $0x01a48f0f; WORD $0x0000 // jg LBB9_61, $420(%rip) - WORD $0xff41; BYTE $0xcc // decl %r12d - WORD $0x8945; BYTE $0xe6 // movl %r12d, %r14d - LONG $0x000026e9; BYTE $0x00 // jmp LBB9_32, $38(%rip) - -LBB9_29: - LONG $0xfc02be41; WORD $0xffff // movl $-1022, %r14d - LONG $0x000033e9; BYTE $0x00 // jmp LBB9_34, $51(%rip) - -LBB9_30: - LONG $0xfdc48141; WORD $0x0003; BYTE $0x00 // addl $1021, %r12d - -LBB9_31: - WORD $0xf741; BYTE $0xdc // negl %r12d - WORD $0x894c; BYTE $0xff // movq %r15, %rdi - WORD $0x8944; BYTE $0xe6 // movl %r12d, %esi - LONG $0x005fb0e8; BYTE $0x00 // callq _right_shift, $24496(%rip) - LONG $0xfc02be41; WORD $0xffff // movl $-1022, %r14d - -LBB9_32: - LONG $0x107f8341; BYTE $0x00 // cmpl $0, $16(%r15) - LONG $0x000d840f; WORD $0x0000 // je LBB9_34, $13(%rip) - WORD $0x894c; BYTE $0xff // movq %r15, %rdi - LONG $0x000035be; BYTE $0x00 // movl $53, %esi - LONG $0x005da2e8; BYTE $0x00 // callq _left_shift, $23970(%rip) - -LBB9_34: - LONG $0x14478b41 // movl $20(%r15), %eax - LONG $0xffc4c749; WORD $0xffff; BYTE $0xff // movq $-1, %r12 - WORD $0xf883; BYTE $0x14 // cmpl $20, %eax - LONG $0x015f8f0f; WORD $0x0000 // jg LBB9_63, $351(%rip) - WORD $0xc085 // testl %eax, %eax - LONG $0x00548e0f; WORD $0x0000 // jle LBB9_40, $84(%rip) - LONG $0x10578b41 // movl $16(%r15), %edx - WORD $0xf631 // xorl %esi, %esi - WORD $0xd285 // testl %edx, %edx - WORD $0x480f; BYTE $0xd6 // cmovsl %esi, %edx - LONG $0xff488d4c // leaq $-1(%rax), %r9 - WORD $0x3949; BYTE $0xd1 // cmpq %rdx, %r9 - LONG $0xca430f44 // cmovael %edx, %r9d - LONG $0x01418d45 // leal $1(%r9), %r8d - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB9_37: - WORD $0x3948; BYTE $0xf2 // cmpq %rsi, %rdx - LONG $0x002b840f; WORD $0x0000 // je LBB9_41, $43(%rip) - LONG $0xa43c8d4b // leaq (%r12,%r12,4), %rdi - WORD $0x8b49; BYTE $0x0f // movq (%r15), %rcx - LONG $0x0cbe0f48; BYTE $0x31 // movsbq (%rcx,%rsi), %rcx - LONG $0x79648d4c; BYTE $0xd0 // leaq $-48(%rcx,%rdi,2), %r12 - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x3948; BYTE $0xf0 // cmpq %rsi, %rax - LONG $0xffda850f; WORD $0xffff // jne LBB9_37, $-38(%rip) - WORD $0x8945; BYTE $0xc1 // movl %r8d, %r9d - LONG $0x000006e9; BYTE $0x00 // jmp LBB9_41, $6(%rip) - -LBB9_40: - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - -LBB9_41: - WORD $0x3944; BYTE $0xc8 // cmpl %r9d, %eax - LONG $0x00638e0f; WORD $0x0000 // jle LBB9_49, $99(%rip) - WORD $0xc689 // movl %eax, %esi - WORD $0x2944; BYTE $0xce // subl %r9d, %esi - WORD $0x8944; BYTE $0xca // movl %r9d, %edx - WORD $0xd2f7 // notl %edx - WORD $0xc201 // addl %eax, %edx - WORD $0xe683; BYTE $0x07 // andl $7, %esi - LONG $0x0022840f; WORD $0x0000 // je LBB9_46, $34(%rip) - WORD $0xdef7 // negl %esi - WORD $0xff31 // xorl %edi, %edi - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB9_44: - WORD $0x014d; BYTE $0xe4 // addq %r12, %r12 - LONG $0xa4248d4f // leaq (%r12,%r12,4), %r12 - WORD $0xcfff // decl %edi - WORD $0xfe39 // cmpl %edi, %esi - LONG $0xffef850f; WORD $0xffff // jne LBB9_44, $-17(%rip) - WORD $0x2941; BYTE $0xf9 // subl %edi, %r9d - -LBB9_46: - WORD $0xfa83; BYTE $0x07 // cmpl $7, %edx - LONG $0x0023820f; WORD $0x0000 // jb LBB9_49, $35(%rip) - WORD $0xc289 // movl %eax, %edx - WORD $0x2944; BYTE $0xca // subl %r9d, %edx - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB9_48: - LONG $0x00e4694d; WORD $0xf5e1; BYTE $0x05 // imulq $100000000, %r12, %r12 - WORD $0xc283; BYTE $0xf8 // addl $-8, %edx - LONG $0xfff0850f; WORD $0xffff // jne LBB9_48, $-16(%rip) - -LBB9_49: - WORD $0xc085 // testl %eax, %eax - LONG $0x0049880f; WORD $0x0000 // js LBB9_57, $73(%rip) - LONG $0x10778b41 // movl $16(%r15), %esi - WORD $0xc639 // cmpl %eax, %esi - LONG $0x003d8e0f; WORD $0x0000 // jle LBB9_57, $61(%rip) - WORD $0x8b49; BYTE $0x17 // movq (%r15), %rdx - WORD $0x0c8a; BYTE $0x02 // movb (%rdx,%rax), %cl - WORD $0x788d; BYTE $0x01 // leal $1(%rax), %edi - WORD $0xf739 // cmpl %esi, %edi - LONG $0x00be850f; WORD $0x0000 // jne LBB9_58, $190(%rip) - WORD $0xf980; BYTE $0x35 // cmpb $53, %cl - LONG $0x00b5850f; WORD $0x0000 // jne LBB9_58, $181(%rip) - LONG $0x1c7f8341; BYTE $0x00 // cmpl $0, $28(%r15) - WORD $0x950f; BYTE $0xc1 // setne %cl - LONG $0x0017850f; WORD $0x0000 // jne LBB9_59, $23(%rip) - WORD $0xc085 // testl %eax, %eax - LONG $0x000f8e0f; WORD $0x0000 // jle LBB9_59, $15(%rip) - WORD $0xc8ff // decl %eax - WORD $0x0c8a; BYTE $0x02 // movb (%rdx,%rax), %cl - WORD $0xe180; BYTE $0x01 // andb $1, %cl - LONG $0x000002e9; BYTE $0x00 // jmp LBB9_59, $2(%rip) - -LBB9_57: - WORD $0xc931 // xorl %ecx, %ecx - -LBB9_59: - WORD $0xb60f; BYTE $0xc1 // movzbl %cl, %eax - WORD $0x0149; BYTE $0xc4 // addq %rax, %r12 - QUAD $0x000000000000b848; WORD $0x0020 // movabsq $9007199254740992, %rax - WORD $0x3949; BYTE $0xc4 // cmpq %rax, %r12 - LONG $0x0025850f; WORD $0x0000 // jne LBB9_63, $37(%rip) - LONG $0xfefe8141; WORD $0x0003; BYTE $0x00 // cmpl $1022, %r14d - LONG $0x00128e0f; WORD $0x0000 // jle LBB9_62, $18(%rip) - -LBB9_61: - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - QUAD $0x000000000000be49; WORD $0x7ff0 // movabsq $9218868437227405312, %r14 - LONG $0x000025e9; BYTE $0x00 // jmp LBB9_64, $37(%rip) - -LBB9_62: - WORD $0xff41; BYTE $0xc6 // incl %r14d - WORD $0x894d; BYTE $0xec // movq %r13, %r12 - -LBB9_63: - WORD $0x894c; BYTE $0xe0 // movq %r12, %rax - WORD $0x214c; BYTE $0xe8 // andq %r13, %rax - LONG $0xffc68141; WORD $0x0003; BYTE $0x00 // addl $1023, %r14d - LONG $0xffe68141; WORD $0x0007; BYTE $0x00 // andl $2047, %r14d - LONG $0x34e6c149 // shlq $52, %r14 - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xf0440f4c // cmoveq %rax, %r14 - -LBB9_64: - WORD $0xff49; BYTE $0xcd // decq %r13 - WORD $0x214d; BYTE $0xe5 // andq %r12, %r13 - WORD $0x094d; BYTE $0xf5 // orq %r14, %r13 - QUAD $0x000000000000b848; WORD $0x8000 // movabsq $-9223372036854775808, %rax - WORD $0x094c; BYTE $0xe8 // orq %r13, %rax - LONG $0x187f8341; BYTE $0x00 // cmpl $0, $24(%r15) - LONG $0xc5440f49 // cmoveq %r13, %rax - WORD $0x8948; BYTE $0x03 // movq %rax, (%rbx) - WORD $0xc031 // xorl %eax, %eax - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB9_58: - WORD $0xf980; BYTE $0x34 // cmpb $52, %cl - WORD $0x9f0f; BYTE $0xc1 // setg %cl - LONG $0xffff65e9; BYTE $0xff // jmp LBB9_59, $-155(%rip) - WORD $0x9090 // .p2align 4, 0x90 - -_atof_native: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - LONG $0x30ec8348 // subq $48, %rsp - QUAD $0x00000000d845c748 // movq $0, $-40(%rbp) - LONG $0xe0558948 // movq %rdx, $-32(%rbp) - LONG $0xe84d8948 // movq %rcx, $-24(%rbp) - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x0044840f; WORD $0x0000 // je LBB10_5, $68(%rip) - WORD $0x02c6; BYTE $0x00 // movb $0, (%rdx) - LONG $0x01f98348 // cmpq $1, %rcx - LONG $0x0037840f; WORD $0x0000 // je LBB10_5, $55(%rip) - LONG $0x000142c6 // movb $0, $1(%rdx) - LONG $0xe87d8348; BYTE $0x03 // cmpq $3, $-24(%rbp) - LONG $0x0028820f; WORD $0x0000 // jb LBB10_5, $40(%rip) - LONG $0x000002b8; BYTE $0x00 // movl $2, %eax - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB10_4: - LONG $0xe04d8b48 // movq $-32(%rbp), %rcx - LONG $0x000104c6 // movb $0, (%rcx,%rax) - WORD $0xff48; BYTE $0xc0 // incq %rax - LONG $0xe8453948 // cmpq %rax, $-24(%rbp) - LONG $0xffeb870f; WORD $0xffff // ja LBB10_4, $-21(%rip) - -LBB10_5: - LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 - LONG $0x4511f8c5; BYTE $0xf0 // vmovups %xmm0, $-16(%rbp) - WORD $0x3f80; BYTE $0x2d // cmpb $45, (%rdi) - LONG $0x0021850f; WORD $0x0000 // jne LBB10_8, $33(%rip) - LONG $0x01f845c7; WORD $0x0000; BYTE $0x00 // movl $1, $-8(%rbp) - LONG $0x000001b8; BYTE $0x00 // movl $1, %eax - WORD $0x3948; BYTE $0xf0 // cmpq %rsi, %rax - LONG $0x00178c0f; WORD $0x0000 // jl LBB10_9, $23(%rip) - -LBB10_7: - LONG $0x00f445c7; WORD $0x0000; BYTE $0x00 // movl $0, $-12(%rbp) - LONG $0x0001a1e9; BYTE $0x00 // jmp LBB10_39, $417(%rip) - -LBB10_8: - WORD $0xc031 // xorl %eax, %eax - WORD $0x3948; BYTE $0xf0 // cmpq %rsi, %rax - LONG $0xffe98d0f; WORD $0xffff // jge LBB10_7, $-23(%rip) - -LBB10_9: - WORD $0xb341; BYTE $0x01 // movb $1, %r11b - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x3145; BYTE $0xc0 // xorl %r8d, %r8d - LONG $0x00001fe9; BYTE $0x00 // jmp LBB10_13, $31(%rip) - -LBB10_21: - LONG $0x01fc45c7; WORD $0x0000; BYTE $0x00 // movl $1, $-4(%rbp) - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB10_12: - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x3948; BYTE $0xf0 // cmpq %rsi, %rax - LONG $0xc39c0f41 // setl %r11b - WORD $0x3948; BYTE $0xc6 // cmpq %rax, %rsi - LONG $0x0090840f; WORD $0x0000 // je LBB10_23, $144(%rip) - -LBB10_13: - LONG $0x070cb60f // movzbl (%rdi,%rax), %ecx - WORD $0x518d; BYTE $0xd0 // leal $-48(%rcx), %edx - WORD $0xfa80; BYTE $0x09 // cmpb $9, %dl - LONG $0x002d870f; WORD $0x0000 // ja LBB10_18, $45(%rip) - WORD $0xf980; BYTE $0x30 // cmpb $48, %cl - LONG $0x0044850f; WORD $0x0000 // jne LBB10_20, $68(%rip) - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x0063840f; WORD $0x0000 // je LBB10_22, $99(%rip) - WORD $0x634d; BYTE $0xd9 // movslq %r9d, %r11 - LONG $0xe85d394c // cmpq %r11, $-24(%rbp) - LONG $0x003b870f; WORD $0x0000 // ja LBB10_10, $59(%rip) - LONG $0x000049e9; BYTE $0x00 // jmp LBB10_11, $73(%rip) - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB10_18: - WORD $0xf980; BYTE $0x2e // cmpb $46, %cl - LONG $0x009b850f; WORD $0x0000 // jne LBB10_30, $155(%rip) - LONG $0xf4558944 // movl %r10d, $-12(%rbp) - LONG $0x0001b841; WORD $0x0000 // movl $1, %r8d - LONG $0xffff98e9; BYTE $0xff // jmp LBB10_12, $-104(%rip) - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB10_20: - WORD $0x634d; BYTE $0xda // movslq %r10d, %r11 - LONG $0xe85d394c // cmpq %r11, $-24(%rbp) - LONG $0xff77860f; WORD $0xffff // jbe LBB10_21, $-137(%rip) - -LBB10_10: - LONG $0xe0558b48 // movq $-32(%rbp), %rdx - LONG $0x1a0c8842 // movb %cl, (%rdx,%r11) - LONG $0xf04d8b44 // movl $-16(%rbp), %r9d - WORD $0xff41; BYTE $0xc1 // incl %r9d - LONG $0xf04d8944 // movl %r9d, $-16(%rbp) - -LBB10_11: - WORD $0x8945; BYTE $0xca // movl %r9d, %r10d - LONG $0xffff68e9; BYTE $0xff // jmp LBB10_12, $-152(%rip) - -LBB10_22: - WORD $0x4dff; BYTE $0xf4 // decl $-12(%rbp) - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - LONG $0xffff5de9; BYTE $0xff // jmp LBB10_12, $-163(%rip) - -LBB10_23: - WORD $0xf189 // movl %esi, %ecx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0x8545; BYTE $0xc0 // testl %r8d, %r8d - LONG $0x0004850f; WORD $0x0000 // jne LBB10_25, $4(%rip) - -LBB10_24: - LONG $0xf44d8944 // movl %r9d, $-12(%rbp) - -LBB10_25: - LONG $0x01c3f641 // testb $1, %r11b - LONG $0x00ba840f; WORD $0x0000 // je LBB10_39, $186(%rip) - WORD $0x0c8a; BYTE $0x0f // movb (%rdi,%rcx), %cl - WORD $0xc980; BYTE $0x20 // orb $32, %cl - WORD $0xf980; BYTE $0x65 // cmpb $101, %cl - LONG $0x00ab850f; WORD $0x0000 // jne LBB10_39, $171(%rip) - WORD $0xc289 // movl %eax, %edx - LONG $0x01174c8a // movb $1(%rdi,%rdx), %cl - WORD $0xf980; BYTE $0x2d // cmpb $45, %cl - LONG $0x0028840f; WORD $0x0000 // je LBB10_31, $40(%rip) - LONG $0x0001b841; WORD $0x0000 // movl $1, %r8d - WORD $0xf980; BYTE $0x2b // cmpb $43, %cl - LONG $0x0038850f; WORD $0x0000 // jne LBB10_33, $56(%rip) - WORD $0xc083; BYTE $0x02 // addl $2, %eax - LONG $0x00001ae9; BYTE $0x00 // jmp LBB10_32, $26(%rip) - -LBB10_30: - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x8545; BYTE $0xc0 // testl %r8d, %r8d - LONG $0xffb5850f; WORD $0xffff // jne LBB10_25, $-75(%rip) - LONG $0xfffface9; BYTE $0xff // jmp LBB10_24, $-84(%rip) - -LBB10_31: - WORD $0xc083; BYTE $0x02 // addl $2, %eax - LONG $0xffffb841; WORD $0xffff // movl $-1, %r8d - -LBB10_32: - WORD $0xc289 // movl %eax, %edx - WORD $0x6348; BYTE $0xd2 // movslq %edx, %rdx - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x3948; BYTE $0xf2 // cmpq %rsi, %rdx - LONG $0x00178c0f; WORD $0x0000 // jl LBB10_34, $23(%rip) - LONG $0x00004de9; BYTE $0x00 // jmp LBB10_38, $77(%rip) - -LBB10_33: - WORD $0xff48; BYTE $0xc2 // incq %rdx - WORD $0x6348; BYTE $0xd2 // movslq %edx, %rdx - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x3948; BYTE $0xf2 // cmpq %rsi, %rdx - LONG $0x003b8d0f; WORD $0x0000 // jge LBB10_38, $59(%rip) - -LBB10_34: - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB10_35: - LONG $0x0ff98141; WORD $0x0027; BYTE $0x00 // cmpl $9999, %r9d - LONG $0x00248f0f; WORD $0x0000 // jg LBB10_38, $36(%rip) - LONG $0x170cb60f // movzbl (%rdi,%rdx), %ecx - WORD $0x418d; BYTE $0xd0 // leal $-48(%rcx), %eax - WORD $0x093c // cmpb $9, %al - LONG $0x0015870f; WORD $0x0000 // ja LBB10_38, $21(%rip) - LONG $0x89048d43 // leal (%r9,%r9,4), %eax - LONG $0x414c8d44; BYTE $0xd0 // leal $-48(%rcx,%rax,2), %r9d - WORD $0xff48; BYTE $0xc2 // incq %rdx - WORD $0x3948; BYTE $0xd6 // cmpq %rdx, %rsi - LONG $0xffcf850f; WORD $0xffff // jne LBB10_35, $-49(%rip) - -LBB10_38: - LONG $0xc8af0f45 // imull %r8d, %r9d - LONG $0xf44d0144 // addl %r9d, $-12(%rbp) - -LBB10_39: - LONG $0xe07d8d48 // leaq $-32(%rbp), %rdi - LONG $0xd8758d48 // leaq $-40(%rbp), %rsi - LONG $0xfff9eae8; BYTE $0xff // callq _decimal_to_f64, $-1558(%rip) - LONG $0x4510fbc5; BYTE $0xd8 // vmovsd $-40(%rbp), %xmm0 - LONG $0x30c48348 // addq $48, %rsp - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_value: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x28ec8348 // subq $40, %rsp - WORD $0x8949; BYTE $0xce // movq %rcx, %r14 - WORD $0x8949; BYTE $0xd4 // movq %rdx, %r12 - WORD $0x8949; BYTE $0xf7 // movq %rsi, %r15 - WORD $0x8949; BYTE $0xfd // movq %rdi, %r13 - LONG $0xd0558948 // movq %rdx, $-48(%rbp) - LONG $0xb07d8948 // movq %rdi, $-80(%rbp) - LONG $0xb8758948 // movq %rsi, $-72(%rbp) - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0x2948; BYTE $0xf0 // subq %rsi, %rax - LONG $0x002b830f; WORD $0x0000 // jae LBB11_5, $43(%rip) - LONG $0x254c8a43; BYTE $0x00 // movb (%r13,%r12), %cl - WORD $0xf980; BYTE $0x0d // cmpb $13, %cl - LONG $0x001d840f; WORD $0x0000 // je LBB11_5, $29(%rip) - WORD $0xf980; BYTE $0x20 // cmpb $32, %cl - LONG $0x0014840f; WORD $0x0000 // je LBB11_5, $20(%rip) - WORD $0x518d; BYTE $0xf7 // leal $-9(%rcx), %edx - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x0008860f; WORD $0x0000 // jbe LBB11_5, $8(%rip) - WORD $0x894c; BYTE $0xe3 // movq %r12, %rbx - LONG $0x000132e9; BYTE $0x00 // jmp LBB11_28, $306(%rip) - -LBB11_5: - LONG $0x245c8d49; BYTE $0x01 // leaq $1(%r12), %rbx - WORD $0x394c; BYTE $0xfb // cmpq %r15, %rbx - LONG $0x0023830f; WORD $0x0000 // jae LBB11_9, $35(%rip) - LONG $0x1d4c8a41; BYTE $0x00 // movb (%r13,%rbx), %cl - WORD $0xf980; BYTE $0x0d // cmpb $13, %cl - LONG $0x0015840f; WORD $0x0000 // je LBB11_9, $21(%rip) - WORD $0xf980; BYTE $0x20 // cmpb $32, %cl - LONG $0x000c840f; WORD $0x0000 // je LBB11_9, $12(%rip) - WORD $0x518d; BYTE $0xf7 // leal $-9(%rcx), %edx - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x0101870f; WORD $0x0000 // ja LBB11_28, $257(%rip) - -LBB11_9: - LONG $0x245c8d49; BYTE $0x02 // leaq $2(%r12), %rbx - WORD $0x394c; BYTE $0xfb // cmpq %r15, %rbx - LONG $0x0023830f; WORD $0x0000 // jae LBB11_13, $35(%rip) - LONG $0x1d4c8a41; BYTE $0x00 // movb (%r13,%rbx), %cl - WORD $0xf980; BYTE $0x0d // cmpb $13, %cl - LONG $0x0015840f; WORD $0x0000 // je LBB11_13, $21(%rip) - WORD $0xf980; BYTE $0x20 // cmpb $32, %cl - LONG $0x000c840f; WORD $0x0000 // je LBB11_13, $12(%rip) - WORD $0x518d; BYTE $0xf7 // leal $-9(%rcx), %edx - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x00d0870f; WORD $0x0000 // ja LBB11_28, $208(%rip) - -LBB11_13: - LONG $0x245c8d49; BYTE $0x03 // leaq $3(%r12), %rbx - WORD $0x394c; BYTE $0xfb // cmpq %r15, %rbx - LONG $0x0023830f; WORD $0x0000 // jae LBB11_17, $35(%rip) - LONG $0x1d4c8a41; BYTE $0x00 // movb (%r13,%rbx), %cl - WORD $0xf980; BYTE $0x0d // cmpb $13, %cl - LONG $0x0015840f; WORD $0x0000 // je LBB11_17, $21(%rip) - WORD $0xf980; BYTE $0x20 // cmpb $32, %cl - LONG $0x000c840f; WORD $0x0000 // je LBB11_17, $12(%rip) - WORD $0x518d; BYTE $0xf7 // leal $-9(%rcx), %edx - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x009f870f; WORD $0x0000 // ja LBB11_28, $159(%rip) - -LBB11_17: - LONG $0x244c8d49; BYTE $0x04 // leaq $4(%r12), %rcx - WORD $0x394c; BYTE $0xf9 // cmpq %r15, %rcx - LONG $0x0057830f; WORD $0x0000 // jae LBB11_23, $87(%rip) - WORD $0x3949; BYTE $0xcf // cmpq %rcx, %r15 - LONG $0x005a840f; WORD $0x0000 // je LBB11_24, $90(%rip) - LONG $0x3d4c8d4b; BYTE $0x00 // leaq (%r13,%r15), %rcx - LONG $0x04c08348 // addq $4, %rax - LONG $0x2c5c8d4b; BYTE $0x05 // leaq $5(%r12,%r13), %rbx - QUAD $0x000100002600ba48; WORD $0x0000 // movabsq $4294977024, %rdx - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB11_20: - LONG $0xff73be0f // movsbl $-1(%rbx), %esi - WORD $0xfe83; BYTE $0x20 // cmpl $32, %esi - LONG $0x003e870f; WORD $0x0000 // ja LBB11_26, $62(%rip) - LONG $0xf2a30f48 // btq %rsi, %rdx - LONG $0x0034830f; WORD $0x0000 // jae LBB11_26, $52(%rip) - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0xff48; BYTE $0xc0 // incq %rax - LONG $0xffdd850f; WORD $0xffff // jne LBB11_20, $-35(%rip) - LONG $0x00000fe9; BYTE $0x00 // jmp LBB11_25, $15(%rip) - -LBB11_23: - LONG $0xd04d8948 // movq %rcx, $-48(%rbp) - WORD $0x8949; BYTE $0xcc // movq %rcx, %r12 - LONG $0x000079e9; BYTE $0x00 // jmp LBB11_32, $121(%rip) - -LBB11_24: - WORD $0x014c; BYTE $0xe9 // addq %r13, %rcx - -LBB11_25: - WORD $0x294c; BYTE $0xe9 // subq %r13, %rcx - WORD $0x8948; BYTE $0xcb // movq %rcx, %rbx - WORD $0x394c; BYTE $0xfb // cmpq %r15, %rbx - LONG $0x0017820f; WORD $0x0000 // jb LBB11_27, $23(%rip) - LONG $0x000062e9; BYTE $0x00 // jmp LBB11_32, $98(%rip) - -LBB11_26: - WORD $0x894c; BYTE $0xe8 // movq %r13, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - WORD $0x394c; BYTE $0xfb // cmpq %r15, %rbx - LONG $0x0050830f; WORD $0x0000 // jae LBB11_32, $80(%rip) - -LBB11_27: - LONG $0x1d4c8a41; BYTE $0x00 // movb (%r13,%rbx), %cl - -LBB11_28: - LONG $0x01638d4c // leaq $1(%rbx), %r12 - LONG $0xd065894c // movq %r12, $-48(%rbp) - WORD $0xbe0f; BYTE $0xc1 // movsbl %cl, %eax - WORD $0xf883; BYTE $0x7d // cmpl $125, %eax - LONG $0x00c4870f; WORD $0x0000 // ja LBB11_41, $196(%rip) - LONG $0x83158d48; WORD $0x0003; BYTE $0x00 // leaq $899(%rip), %rdx /* LJTI11_0(%rip) */ - LONG $0x82046348 // movslq (%rdx,%rax,4), %rax - WORD $0x0148; BYTE $0xd0 // addq %rdx, %rax - JMP AX - -LBB11_30: - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - LONG $0x02c0f641 // testb $2, %r8b - LONG $0x0035850f; WORD $0x0000 // jne LBB11_35, $53(%rip) - LONG $0xb07d8d48 // leaq $-80(%rbp), %rdi - LONG $0xd0758d48 // leaq $-48(%rbp), %rsi - WORD $0x894c; BYTE $0xf2 // movq %r14, %rdx - LONG $0x000b6ce8; BYTE $0x00 // callq _vnumber, $2924(%rip) - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - LONG $0x00000ae9; BYTE $0x00 // jmp LBB11_34, $10(%rip) - -LBB11_32: - LONG $0x0106c749; WORD $0x0000; BYTE $0x00 // movq $1, (%r14) - -LBB11_33: - WORD $0x894c; BYTE $0xe3 // movq %r12, %rbx - -LBB11_34: - WORD $0x8948; BYTE $0xd8 // movq %rbx, %rax - LONG $0x28c48348 // addq $40, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB11_35: - LONG $0xc875894c // movq %r14, $-56(%rbp) - LONG $0x1d748d4d; BYTE $0x00 // leaq (%r13,%rbx), %r14 - WORD $0xc031 // xorl %eax, %eax - WORD $0xf980; BYTE $0x2d // cmpb $45, %cl - WORD $0x940f; BYTE $0xc0 // sete %al - WORD $0x0149; BYTE $0xc6 // addq %rax, %r14 - WORD $0x2949; BYTE $0xc7 // subq %rax, %r15 - LONG $0x02e2840f; WORD $0x0000 // je LBB11_85, $738(%rip) - WORD $0x394c; BYTE $0xfb // cmpq %r15, %rbx - LONG $0x000d830f; WORD $0x0000 // jae LBB11_38, $13(%rip) - WORD $0x8a41; BYTE $0x06 // movb (%r14), %al - WORD $0xd004 // addb $-48, %al - WORD $0x0a3c // cmpb $10, %al - LONG $0x02e5830f; WORD $0x0000 // jae LBB11_87, $741(%rip) - -LBB11_38: - WORD $0x894c; BYTE $0xf7 // movq %r14, %rdi - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - LONG $0x001f09e8; BYTE $0x00 // callq _do_skip_number, $7945(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x02cb880f; WORD $0x0000 // js LBB11_86, $715(%rip) - WORD $0x0149; BYTE $0xc6 // addq %rax, %r14 - WORD $0x294d; BYTE $0xee // subq %r13, %r14 - LONG $0xd075894c // movq %r14, $-48(%rbp) - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x02cc8e0f; WORD $0x0000 // jle LBB11_88, $716(%rip) - LONG $0xc8458b48 // movq $-56(%rbp), %rax - LONG $0x0800c748; WORD $0x0000; BYTE $0x00 // movq $8, (%rax) - LONG $0x18588948 // movq %rbx, $24(%rax) - WORD $0x894c; BYTE $0xf3 // movq %r14, %rbx - LONG $0xffff7de9; BYTE $0xff // jmp LBB11_34, $-131(%rip) - -LBB11_41: - LONG $0xfe06c749; WORD $0xffff; BYTE $0xff // movq $-2, (%r14) - LONG $0xffff71e9; BYTE $0xff // jmp LBB11_34, $-143(%rip) - -LBB11_42: - QUAD $0xffffffffc045c748 // movq $-1, $-64(%rbp) - LONG $0xb07d8d48 // leaq $-80(%rbp), %rdi - LONG $0xc0558d48 // leaq $-64(%rbp), %rdx - WORD $0x894c; BYTE $0xe6 // movq %r12, %rsi - WORD $0x894c; BYTE $0xc1 // movq %r8, %rcx - LONG $0x00054fe8; BYTE $0x00 // callq _advance_string, $1359(%rip) - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0150880f; WORD $0x0000 // js LBB11_61, $336(%rip) - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - LONG $0x1066894d // movq %r12, $16(%r14) - LONG $0xc0458b48 // movq $-64(%rbp), %rax - WORD $0x3948; BYTE $0xd8 // cmpq %rbx, %rax - LONG $0xffc1c748; WORD $0xffff; BYTE $0xff // movq $-1, %rcx - LONG $0xc84c0f48 // cmovlq %rax, %rcx - LONG $0x184e8949 // movq %rcx, $24(%r14) - LONG $0x000007b8; BYTE $0x00 // movl $7, %eax - WORD $0x8949; BYTE $0x06 // movq %rax, (%r14) - LONG $0xffff1fe9; BYTE $0xff // jmp LBB11_34, $-225(%rip) - -LBB11_44: - WORD $0x8545; BYTE $0xc0 // testl %r8d, %r8d - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0x00000bb9; BYTE $0x00 // movl $11, %ecx - LONG $0x0000f8e9; BYTE $0x00 // jmp LBB11_60, $248(%rip) - -LBB11_45: - WORD $0x8545; BYTE $0xc0 // testl %r8d, %r8d - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0x00000ab9; BYTE $0x00 // movl $10, %ecx - LONG $0x0000e4e9; BYTE $0x00 // jmp LBB11_60, $228(%rip) - -LBB11_46: - LONG $0x0506c749; WORD $0x0000; BYTE $0x00 // movq $5, (%r14) - LONG $0xfffee8e9; BYTE $0xff // jmp LBB11_33, $-280(%rip) - -LBB11_47: - WORD $0x8545; BYTE $0xc0 // testl %r8d, %r8d - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0x00000cb9; BYTE $0x00 // movl $12, %ecx - LONG $0x0000c4e9; BYTE $0x00 // jmp LBB11_60, $196(%rip) - -LBB11_48: - LONG $0xfc478d49 // leaq $-4(%r15), %rax - WORD $0x3948; BYTE $0xc3 // cmpq %rax, %rbx - LONG $0x008c830f; WORD $0x0000 // jae LBB11_57, $140(%rip) - LONG $0x254c8b43; BYTE $0x00 // movl (%r13,%r12), %ecx - LONG $0x6c61f981; WORD $0x6573 // cmpl $1702063201, %ecx - LONG $0x00ce850f; WORD $0x0000 // jne LBB11_62, $206(%rip) - LONG $0x05c38348 // addq $5, %rbx - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - LONG $0x000004b8; BYTE $0x00 // movl $4, %eax - WORD $0x8949; BYTE $0xdf // movq %rbx, %r15 - LONG $0x0001aae9; BYTE $0x00 // jmp LBB11_84, $426(%rip) - -LBB11_51: - LONG $0xfd478d49 // leaq $-3(%r15), %rax - WORD $0x3948; BYTE $0xc3 // cmpq %rax, %rbx - LONG $0x0059830f; WORD $0x0000 // jae LBB11_57, $89(%rip) - LONG $0x1d4c8b41; BYTE $0x00 // movl (%r13,%rbx), %ecx - LONG $0x756ef981; WORD $0x6c6c // cmpl $1819047278, %ecx - LONG $0x00da850f; WORD $0x0000 // jne LBB11_66, $218(%rip) - LONG $0x04c38348 // addq $4, %rbx - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - LONG $0x000002b8; BYTE $0x00 // movl $2, %eax - WORD $0x8949; BYTE $0xdf // movq %rbx, %r15 - LONG $0x000177e9; BYTE $0x00 // jmp LBB11_84, $375(%rip) - -LBB11_54: - LONG $0xfd478d49 // leaq $-3(%r15), %rax - WORD $0x3948; BYTE $0xc3 // cmpq %rax, %rbx - LONG $0x0026830f; WORD $0x0000 // jae LBB11_57, $38(%rip) - LONG $0x1d4c8b41; BYTE $0x00 // movl (%r13,%rbx), %ecx - LONG $0x7274f981; WORD $0x6575 // cmpl $1702195828, %ecx - LONG $0x00ea850f; WORD $0x0000 // jne LBB11_70, $234(%rip) - LONG $0x04c38348 // addq $4, %rbx - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - LONG $0x000003b8; BYTE $0x00 // movl $3, %eax - WORD $0x8949; BYTE $0xdf // movq %rbx, %r15 - LONG $0x000144e9; BYTE $0x00 // jmp LBB11_84, $324(%rip) - -LBB11_57: - LONG $0xd07d894c // movq %r15, $-48(%rbp) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0x000134e9; BYTE $0x00 // jmp LBB11_84, $308(%rip) - -LBB11_58: - LONG $0x0606c749; WORD $0x0000; BYTE $0x00 // movq $6, (%r14) - LONG $0xfffe1fe9; BYTE $0xff // jmp LBB11_33, $-481(%rip) - -LBB11_59: - WORD $0x8545; BYTE $0xc0 // testl %r8d, %r8d - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0x00000db9; BYTE $0x00 // movl $13, %ecx - -LBB11_60: - LONG $0xc8490f48 // cmovnsq %rax, %rcx - WORD $0x8949; BYTE $0x0e // movq %rcx, (%r14) - LONG $0x1ff8c141 // sarl $31, %r8d - WORD $0xf741; BYTE $0xd0 // notl %r8d - WORD $0x6349; BYTE $0xc0 // movslq %r8d, %rax - WORD $0x0149; BYTE $0xc4 // addq %rax, %r12 - LONG $0xfffdf7e9; BYTE $0xff // jmp LBB11_33, $-521(%rip) - -LBB11_61: - LONG $0xd07d894c // movq %r15, $-48(%rbp) - WORD $0x8949; BYTE $0x1e // movq %rbx, (%r14) - WORD $0x894c; BYTE $0xfb // movq %r15, %rbx - LONG $0xfffdebe9; BYTE $0xff // jmp LBB11_34, $-533(%rip) - -LBB11_62: - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - WORD $0xf980; BYTE $0x61 // cmpb $97, %cl - LONG $0x00bd850f; WORD $0x0000 // jne LBB11_74, $189(%rip) - LONG $0x1d7c8041; WORD $0x6c02 // cmpb $108, $2(%r13,%rbx) - LONG $0x00c1850f; WORD $0x0000 // jne LBB11_81, $193(%rip) - LONG $0x1d7c8041; WORD $0x7303 // cmpb $115, $3(%r13,%rbx) - LONG $0x00be850f; WORD $0x0000 // jne LBB11_79, $190(%rip) - LONG $0x047b8d4c // leaq $4(%rbx), %r15 - LONG $0x054b8d48 // leaq $5(%rbx), %rcx - LONG $0x1d7c8041; WORD $0x6504 // cmpb $101, $4(%r13,%rbx) - LONG $0xf9440f4c // cmoveq %rcx, %r15 - LONG $0x0000aee9; BYTE $0x00 // jmp LBB11_83, $174(%rip) - -LBB11_66: - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - WORD $0xf980; BYTE $0x6e // cmpb $110, %cl - LONG $0x0072850f; WORD $0x0000 // jne LBB11_76, $114(%rip) - LONG $0x1d7c8041; WORD $0x7501 // cmpb $117, $1(%r13,%rbx) - LONG $0x0076850f; WORD $0x0000 // jne LBB11_77, $118(%rip) - LONG $0x1d7c8041; WORD $0x6c02 // cmpb $108, $2(%r13,%rbx) - LONG $0x0072850f; WORD $0x0000 // jne LBB11_81, $114(%rip) - LONG $0x037b8d4c // leaq $3(%rbx), %r15 - LONG $0x044b8d48 // leaq $4(%rbx), %rcx - LONG $0x1d7c8041; WORD $0x6c03 // cmpb $108, $3(%r13,%rbx) - LONG $0xf9440f4c // cmoveq %rcx, %r15 - LONG $0x00006be9; BYTE $0x00 // jmp LBB11_83, $107(%rip) - -LBB11_70: - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - WORD $0xf980; BYTE $0x74 // cmpb $116, %cl - LONG $0x002f850f; WORD $0x0000 // jne LBB11_76, $47(%rip) - LONG $0x1d7c8041; WORD $0x7201 // cmpb $114, $1(%r13,%rbx) - LONG $0x0033850f; WORD $0x0000 // jne LBB11_77, $51(%rip) - LONG $0x1d7c8041; WORD $0x7502 // cmpb $117, $2(%r13,%rbx) - LONG $0x002f850f; WORD $0x0000 // jne LBB11_81, $47(%rip) - LONG $0x037b8d4c // leaq $3(%rbx), %r15 - LONG $0x044b8d48 // leaq $4(%rbx), %rcx - LONG $0x1d7c8041; WORD $0x6503 // cmpb $101, $3(%r13,%rbx) - LONG $0xf9440f4c // cmoveq %rcx, %r15 - LONG $0x000028e9; BYTE $0x00 // jmp LBB11_83, $40(%rip) - -LBB11_76: - WORD $0x8949; BYTE $0xdf // movq %rbx, %r15 - LONG $0x000024e9; BYTE $0x00 // jmp LBB11_84, $36(%rip) - -LBB11_74: - WORD $0x894d; BYTE $0xe7 // movq %r12, %r15 - LONG $0x00001ce9; BYTE $0x00 // jmp LBB11_84, $28(%rip) - -LBB11_77: - WORD $0xff48; BYTE $0xc3 // incq %rbx - LONG $0x00000de9; BYTE $0x00 // jmp LBB11_82, $13(%rip) - -LBB11_81: - LONG $0x02c38348 // addq $2, %rbx - LONG $0x000004e9; BYTE $0x00 // jmp LBB11_82, $4(%rip) - -LBB11_79: - LONG $0x03c38348 // addq $3, %rbx - -LBB11_82: - WORD $0x8949; BYTE $0xdf // movq %rbx, %r15 - -LBB11_83: - LONG $0xd07d894c // movq %r15, $-48(%rbp) - -LBB11_84: - WORD $0x8949; BYTE $0x06 // movq %rax, (%r14) - WORD $0x894c; BYTE $0xfb // movq %r15, %rbx - LONG $0xfffcefe9; BYTE $0xff // jmp LBB11_34, $-785(%rip) - -LBB11_85: - WORD $0x294d; BYTE $0xee // subq %r13, %r14 - LONG $0xd075894c // movq %r14, $-48(%rbp) - LONG $0xffc3c748; WORD $0xffff; BYTE $0xff // movq $-1, %rbx - LONG $0x000014e9; BYTE $0x00 // jmp LBB11_88, $20(%rip) - -LBB11_86: - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0149; BYTE $0xc6 // addq %rax, %r14 - -LBB11_87: - WORD $0x294d; BYTE $0xee // subq %r13, %r14 - LONG $0xd075894c // movq %r14, $-48(%rbp) - LONG $0xfec3c748; WORD $0xffff; BYTE $0xff // movq $-2, %rbx - -LBB11_88: - LONG $0xc8458b48 // movq $-56(%rbp), %rax - WORD $0x8948; BYTE $0x18 // movq %rbx, (%rax) - WORD $0x894c; BYTE $0xf3 // movq %r14, %rbx - LONG $0xfffcb9e9; BYTE $0xff // jmp LBB11_34, $-839(%rip) - WORD $0x9090 // .p2align 2, 0x90 - - // .set L11_0_set_32, LBB11_32-LJTI11_0 - // .set L11_0_set_41, LBB11_41-LJTI11_0 - // .set L11_0_set_42, LBB11_42-LJTI11_0 - // .set L11_0_set_44, LBB11_44-LJTI11_0 - // .set L11_0_set_30, LBB11_30-LJTI11_0 - // .set L11_0_set_45, LBB11_45-LJTI11_0 - // .set L11_0_set_46, LBB11_46-LJTI11_0 - // .set L11_0_set_47, LBB11_47-LJTI11_0 - // .set L11_0_set_48, LBB11_48-LJTI11_0 - // .set L11_0_set_51, LBB11_51-LJTI11_0 - // .set L11_0_set_54, LBB11_54-LJTI11_0 - // .set L11_0_set_58, LBB11_58-LJTI11_0 - // .set L11_0_set_59, LBB11_59-LJTI11_0 -LJTI11_0: - LONG $0xfffffcad // .long L11_0_set_32 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd46 // .long L11_0_set_42 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd98 // .long L11_0_set_44 - LONG $0xfffffc86 // .long L11_0_set_30 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffc86 // .long L11_0_set_30 - LONG $0xfffffc86 // .long L11_0_set_30 - LONG $0xfffffc86 // .long L11_0_set_30 - LONG $0xfffffc86 // .long L11_0_set_30 - LONG $0xfffffc86 // .long L11_0_set_30 - LONG $0xfffffc86 // .long L11_0_set_30 - LONG $0xfffffc86 // .long L11_0_set_30 - LONG $0xfffffc86 // .long L11_0_set_30 - LONG $0xfffffc86 // .long L11_0_set_30 - LONG $0xfffffc86 // .long L11_0_set_30 - LONG $0xfffffdac // .long L11_0_set_45 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffdc0 // .long L11_0_set_46 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffdcc // .long L11_0_set_47 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffde0 // .long L11_0_set_48 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffe13 // .long L11_0_set_51 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffe46 // .long L11_0_set_54 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffe89 // .long L11_0_set_58 - LONG $0xfffffd3a // .long L11_0_set_41 - LONG $0xfffffe95 // .long L11_0_set_59 - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -_vstring: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x10ec8348 // subq $16, %rsp - WORD $0x8949; BYTE $0xd6 // movq %rdx, %r14 - WORD $0x8948; BYTE $0xf3 // movq %rsi, %rbx - WORD $0x8949; BYTE $0xff // movq %rdi, %r15 - QUAD $0xffffffffd845c748 // movq $-1, $-40(%rbp) - WORD $0x8b4c; BYTE $0x26 // movq (%rsi), %r12 - LONG $0xd8558d48 // leaq $-40(%rbp), %rdx - WORD $0x894c; BYTE $0xe6 // movq %r12, %rsi - LONG $0x000081e8; BYTE $0x00 // callq _advance_string, $129(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0027880f; WORD $0x0000 // js LBB12_1, $39(%rip) - WORD $0x8948; BYTE $0x03 // movq %rax, (%rbx) - LONG $0x1066894d // movq %r12, $16(%r14) - LONG $0xd84d8b48 // movq $-40(%rbp), %rcx - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xc14c0f48 // cmovlq %rcx, %rax - LONG $0x18468949 // movq %rax, $24(%r14) - LONG $0x000007b8; BYTE $0x00 // movl $7, %eax - LONG $0x000007e9; BYTE $0x00 // jmp LBB12_3, $7(%rip) - -LBB12_1: - LONG $0x084f8b49 // movq $8(%r15), %rcx - WORD $0x8948; BYTE $0x0b // movq %rcx, (%rbx) - -LBB12_3: - WORD $0x8949; BYTE $0x06 // movq %rax, (%r14) - LONG $0x10c48348 // addq $16, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x0000000000000000; WORD $0x0000 // .p2align 4, 0x00 - -LCPI13_0: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - -LCPI13_1: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - -LCPI13_2: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - - // .p2align 4, 0x90 -_advance_string: - WORD $0xc1f6; BYTE $0x20 // testb $32, %cl - LONG $0x0005850f; WORD $0x0000 // jne LBB13_2, $5(%rip) - LONG $0x005552e9; BYTE $0x00 // jmp _advance_string_default, $21842(%rip) - -LBB13_2: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x20ec8348 // subq $32, %rsp - LONG $0x085f8b48 // movq $8(%rdi), %rbx - WORD $0x2948; BYTE $0xf3 // subq %rsi, %rbx - LONG $0x04d4840f; WORD $0x0000 // je LBB13_21, $1236(%rip) - WORD $0x8b48; BYTE $0x07 // movq (%rdi), %rax - LONG $0xc0458948 // movq %rax, $-64(%rbp) - WORD $0x0148; BYTE $0xc6 // addq %rax, %rsi - LONG $0xc8558948 // movq %rdx, $-56(%rbp) - LONG $0xff02c748; WORD $0xffff; BYTE $0xff // movq $-1, (%rdx) - LONG $0x40fb8348 // cmpq $64, %rbx - LONG $0x024a820f; WORD $0x0000 // jb LBB13_22, $586(%rip) - QUAD $0xffffffffd045c748 // movq $-1, $-48(%rbp) - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - QUAD $0xffffff72056f79c5 // vmovdqa $-142(%rip), %xmm8 /* LCPI13_0(%rip) */ - QUAD $0xffffff7a0d6ff9c5 // vmovdqa $-134(%rip), %xmm1 /* LCPI13_1(%rip) */ - QUAD $0xffffff82156ff9c5 // vmovdqa $-126(%rip), %xmm2 /* LCPI13_2(%rip) */ - LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB13_5: - LONG $0xb85d8948 // movq %rbx, $-72(%rbp) - LONG $0x266ffac5 // vmovdqu (%rsi), %xmm4 - LONG $0x6e6ffac5; BYTE $0x10 // vmovdqu $16(%rsi), %xmm5 - LONG $0x766ffac5; BYTE $0x20 // vmovdqu $32(%rsi), %xmm6 - LONG $0x7e6ffac5; BYTE $0x30 // vmovdqu $48(%rsi), %xmm7 - LONG $0xc474b9c5 // vpcmpeqb %xmm4, %xmm8, %xmm0 - LONG $0xe8d779c5 // vpmovmskb %xmm0, %r13d - LONG $0xc574b9c5 // vpcmpeqb %xmm5, %xmm8, %xmm0 - LONG $0xd0d7f9c5 // vpmovmskb %xmm0, %edx - LONG $0xc674b9c5 // vpcmpeqb %xmm6, %xmm8, %xmm0 - LONG $0xf0d779c5 // vpmovmskb %xmm0, %r14d - LONG $0xc774b9c5 // vpcmpeqb %xmm7, %xmm8, %xmm0 - LONG $0xd8d779c5 // vpmovmskb %xmm0, %r11d - LONG $0xc174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0xc174d1c5 // vpcmpeqb %xmm1, %xmm5, %xmm0 - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - LONG $0xc174c9c5 // vpcmpeqb %xmm1, %xmm6, %xmm0 - LONG $0xc0d779c5 // vpmovmskb %xmm0, %r8d - LONG $0xc174c1c5 // vpcmpeqb %xmm1, %xmm7, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - LONG $0xc464e9c5 // vpcmpgtb %xmm4, %xmm2, %xmm0 - LONG $0xe364d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm4 - LONG $0xc4dbf9c5 // vpand %xmm4, %xmm0, %xmm0 - LONG $0xd8d7f9c5 // vpmovmskb %xmm0, %ebx - LONG $0xc564e9c5 // vpcmpgtb %xmm5, %xmm2, %xmm0 - LONG $0xe364d1c5 // vpcmpgtb %xmm3, %xmm5, %xmm4 - LONG $0xc4dbf9c5 // vpand %xmm4, %xmm0, %xmm0 - LONG $0xf8d7f9c5 // vpmovmskb %xmm0, %edi - LONG $0xc664e9c5 // vpcmpgtb %xmm6, %xmm2, %xmm0 - LONG $0xe364c9c5 // vpcmpgtb %xmm3, %xmm6, %xmm4 - LONG $0xc4dbf9c5 // vpand %xmm4, %xmm0, %xmm0 - LONG $0xd0d779c5 // vpmovmskb %xmm0, %r10d - LONG $0xc764e9c5 // vpcmpgtb %xmm7, %xmm2, %xmm0 - LONG $0xe364c1c5 // vpcmpgtb %xmm3, %xmm7, %xmm4 - LONG $0xc4dbf9c5 // vpand %xmm4, %xmm0, %xmm0 - LONG $0xe0d779c5 // vpmovmskb %xmm0, %r12d - LONG $0x30e3c149 // shlq $48, %r11 - LONG $0x20e6c149 // shlq $32, %r14 - LONG $0x10e2c148 // shlq $16, %rdx - WORD $0x0949; BYTE $0xd5 // orq %rdx, %r13 - WORD $0x094d; BYTE $0xf5 // orq %r14, %r13 - WORD $0x094d; BYTE $0xdd // orq %r11, %r13 - LONG $0x30e0c148 // shlq $48, %rax - LONG $0x20e0c149 // shlq $32, %r8 - LONG $0x10e1c149 // shlq $16, %r9 - WORD $0x094c; BYTE $0xc9 // orq %r9, %rcx - WORD $0x094c; BYTE $0xc1 // orq %r8, %rcx - LONG $0x30e4c149 // shlq $48, %r12 - LONG $0x20e2c149 // shlq $32, %r10 - LONG $0x10e7c148 // shlq $16, %rdi - WORD $0x0948; BYTE $0xfb // orq %rdi, %rbx - WORD $0x094c; BYTE $0xd3 // orq %r10, %rbx - WORD $0x0948; BYTE $0xc1 // orq %rax, %rcx - LONG $0x003c850f; WORD $0x0000 // jne LBB13_10, $60(%rip) - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0x0057850f; WORD $0x0000 // jne LBB13_12, $87(%rip) - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - WORD $0x094c; BYTE $0xe3 // orq %r12, %rbx - WORD $0x854d; BYTE $0xed // testq %r13, %r13 - LONG $0x009d850f; WORD $0x0000 // jne LBB13_13, $157(%rip) - -LBB13_8: - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x00f2850f; WORD $0x0000 // jne LBB13_19, $242(%rip) - LONG $0x40c68348 // addq $64, %rsi - LONG $0xb85d8b48 // movq $-72(%rbp), %rbx - LONG $0xc0c38348 // addq $-64, %rbx - LONG $0x3ffb8348 // cmpq $63, %rbx - LONG $0xfef0870f; WORD $0xffff // ja LBB13_5, $-272(%rip) - LONG $0x00010be9; BYTE $0x00 // jmp LBB13_23, $267(%rip) - -LBB13_10: - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0x0019850f; WORD $0x0000 // jne LBB13_12, $25(%rip) - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - LONG $0xc0452b48 // subq $-64(%rbp), %rax - LONG $0xd1bc0f48 // bsfq %rcx, %rdx - WORD $0x0148; BYTE $0xc2 // addq %rax, %rdx - LONG $0xc8458b48 // movq $-56(%rbp), %rax - LONG $0xd0558948 // movq %rdx, $-48(%rbp) - WORD $0x8948; BYTE $0x10 // movq %rdx, (%rax) - -LBB13_12: - WORD $0x894c; BYTE $0xf8 // movq %r15, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x2148; BYTE $0xc8 // andq %rcx, %rax - LONG $0x00148d48 // leaq (%rax,%rax), %rdx - WORD $0x094c; BYTE $0xfa // orq %r15, %rdx - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x2148; BYTE $0xcf // andq %rcx, %rdi - QUAD $0xaaaaaaaaaaaab948; WORD $0xaaaa // movabsq $-6148914691236517206, %rcx - WORD $0x2148; BYTE $0xcf // andq %rcx, %rdi - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - WORD $0x0148; BYTE $0xc7 // addq %rax, %rdi - LONG $0xc7920f41 // setb %r15b - WORD $0x0148; BYTE $0xff // addq %rdi, %rdi - QUAD $0x555555555555b848; WORD $0x5555 // movabsq $6148914691236517205, %rax - WORD $0x3148; BYTE $0xc7 // xorq %rax, %rdi - WORD $0x2148; BYTE $0xd7 // andq %rdx, %rdi - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x2149; BYTE $0xfd // andq %rdi, %r13 - WORD $0x094c; BYTE $0xe3 // orq %r12, %rbx - WORD $0x854d; BYTE $0xed // testq %r13, %r13 - LONG $0xff63840f; WORD $0xffff // je LBB13_8, $-157(%rip) - -LBB13_13: - LONG $0xc5bc0f49 // bsfq %r13, %rax - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x0029840f; WORD $0x0000 // je LBB13_17, $41(%rip) - LONG $0xcbbc0f48 // bsfq %rbx, %rcx - LONG $0xc8558b48 // movq $-56(%rbp), %rdx - LONG $0xc0752b48 // subq $-64(%rbp), %rsi - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0x002a820f; WORD $0x0000 // jb LBB13_18, $42(%rip) - -LBB13_15: - LONG $0x06448d48; BYTE $0x01 // leaq $1(%rsi,%rax), %rax - -LBB13_16: - LONG $0x20c48348 // addq $32, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB13_17: - LONG $0x000040b9; BYTE $0x00 // movl $64, %ecx - LONG $0xc8558b48 // movq $-56(%rbp), %rdx - LONG $0xc0752b48 // subq $-64(%rbp), %rsi - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0xffd6830f; WORD $0xffff // jae LBB13_15, $-42(%rip) - -LBB13_18: - WORD $0x0148; BYTE $0xf1 // addq %rsi, %rcx - WORD $0x8948; BYTE $0x0a // movq %rcx, (%rdx) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0xffffc9e9; BYTE $0xff // jmp LBB13_16, $-55(%rip) - -LBB13_19: - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0xffb7850f; WORD $0xffff // jne LBB13_16, $-73(%rip) - LONG $0xcbbc0f48 // bsfq %rbx, %rcx - LONG $0xc0752b48 // subq $-64(%rbp), %rsi - WORD $0x0148; BYTE $0xce // addq %rcx, %rsi - LONG $0xc84d8b48 // movq $-56(%rbp), %rcx - WORD $0x8948; BYTE $0x31 // movq %rsi, (%rcx) - LONG $0xffffa0e9; BYTE $0xff // jmp LBB13_16, $-96(%rip) - -LBB13_22: - QUAD $0xffffffffd045c748 // movq $-1, $-48(%rbp) - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - -LBB13_23: - LONG $0x20fb8348 // cmpq $32, %rbx - LONG $0x00e1820f; WORD $0x0000 // jb LBB13_36, $225(%rip) - LONG $0x066ffac5 // vmovdqu (%rsi), %xmm0 - LONG $0x4e6ffac5; BYTE $0x10 // vmovdqu $16(%rsi), %xmm1 - QUAD $0xfffffd15156ff9c5 // vmovdqa $-747(%rip), %xmm2 /* LCPI13_0(%rip) */ - LONG $0xda74f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm3 - LONG $0xdbd779c5 // vpmovmskb %xmm3, %r11d - LONG $0xd274f1c5 // vpcmpeqb %xmm2, %xmm1, %xmm2 - LONG $0xd2d7f9c5 // vpmovmskb %xmm2, %edx - QUAD $0xfffffd0d156ff9c5 // vmovdqa $-755(%rip), %xmm2 /* LCPI13_1(%rip) */ - LONG $0xda74f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm3 - LONG $0xd3d779c5 // vpmovmskb %xmm3, %r10d - LONG $0xd274f1c5 // vpcmpeqb %xmm2, %xmm1, %xmm2 - LONG $0xc2d7f9c5 // vpmovmskb %xmm2, %eax - QUAD $0xfffffd05156ff9c5 // vmovdqa $-763(%rip), %xmm2 /* LCPI13_2(%rip) */ - LONG $0xd864e9c5 // vpcmpgtb %xmm0, %xmm2, %xmm3 - LONG $0xe476d9c5 // vpcmpeqd %xmm4, %xmm4, %xmm4 - LONG $0xc464f9c5 // vpcmpgtb %xmm4, %xmm0, %xmm0 - LONG $0xc0dbe1c5 // vpand %xmm0, %xmm3, %xmm0 - LONG $0xc0d779c5 // vpmovmskb %xmm0, %r8d - LONG $0xc164e9c5 // vpcmpgtb %xmm1, %xmm2, %xmm0 - LONG $0xcc64f1c5 // vpcmpgtb %xmm4, %xmm1, %xmm1 - LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 - LONG $0xf8d7f9c5 // vpmovmskb %xmm0, %edi - LONG $0x10e2c148 // shlq $16, %rdx - WORD $0x0949; BYTE $0xd3 // orq %rdx, %r11 - LONG $0x10e0c148 // shlq $16, %rax - LONG $0x10e7c148 // shlq $16, %rdi - WORD $0x0949; BYTE $0xc2 // orq %rax, %r10 - LONG $0x0111850f; WORD $0x0000 // jne LBB13_48, $273(%rip) - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0x012c850f; WORD $0x0000 // jne LBB13_50, $300(%rip) - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - -LBB13_27: - WORD $0x094c; BYTE $0xc7 // orq %r8, %rdi - LONG $0x000040b8; BYTE $0x00 // movl $64, %eax - LONG $0x000040ba; BYTE $0x00 // movl $64, %edx - WORD $0x854d; BYTE $0xdb // testq %r11, %r11 - LONG $0x0004840f; WORD $0x0000 // je LBB13_29, $4(%rip) - LONG $0xd3bc0f49 // bsfq %r11, %rdx - -LBB13_29: - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0x0004840f; WORD $0x0000 // je LBB13_31, $4(%rip) - LONG $0xc7bc0f48 // bsfq %rdi, %rax - -LBB13_31: - WORD $0x854d; BYTE $0xdb // testq %r11, %r11 - LONG $0x0017840f; WORD $0x0000 // je LBB13_34, $23(%rip) - LONG $0xc0752b48 // subq $-64(%rbp), %rsi - WORD $0x3948; BYTE $0xd0 // cmpq %rdx, %rax - LONG $0x0124820f; WORD $0x0000 // jb LBB13_51, $292(%rip) - LONG $0x16448d48; BYTE $0x01 // leaq $1(%rsi,%rdx), %rax - LONG $0xfffebbe9; BYTE $0xff // jmp LBB13_16, $-325(%rip) - -LBB13_34: - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0x0127850f; WORD $0x0000 // jne LBB13_52, $295(%rip) - LONG $0x20c68348 // addq $32, %rsi - LONG $0xe0c38348 // addq $-32, %rbx - -LBB13_36: - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0x0122850f; WORD $0x0000 // jne LBB13_53, $290(%rip) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0xfe91840f; WORD $0xffff // je LBB13_16, $-367(%rip) - -LBB13_38: - LONG $0xc87d8b48 // movq $-56(%rbp), %rdi - -LBB13_39: - WORD $0xb60f; BYTE $0x0e // movzbl (%rsi), %ecx - WORD $0xf980; BYTE $0x22 // cmpb $34, %cl - LONG $0x0075840f; WORD $0x0000 // je LBB13_47, $117(%rip) - WORD $0xf980; BYTE $0x5c // cmpb $92, %cl - LONG $0x0026840f; WORD $0x0000 // je LBB13_43, $38(%rip) - WORD $0xf980; BYTE $0x1f // cmpb $31, %cl - LONG $0x0146860f; WORD $0x0000 // jbe LBB13_57, $326(%rip) - LONG $0xffc1c748; WORD $0xffff; BYTE $0xff // movq $-1, %rcx - LONG $0x000001ba; BYTE $0x00 // movl $1, %edx - WORD $0x0148; BYTE $0xd6 // addq %rdx, %rsi - WORD $0x0148; BYTE $0xcb // addq %rcx, %rbx - LONG $0xffca850f; WORD $0xffff // jne LBB13_39, $-54(%rip) - LONG $0xfffe52e9; BYTE $0xff // jmp LBB13_16, $-430(%rip) - -LBB13_43: - LONG $0x01fb8348 // cmpq $1, %rbx - LONG $0xfe48840f; WORD $0xffff // je LBB13_16, $-440(%rip) - WORD $0x8949; BYTE $0xd8 // movq %rbx, %r8 - LONG $0xfec1c748; WORD $0xffff; BYTE $0xff // movq $-2, %rcx - LONG $0x000002ba; BYTE $0x00 // movl $2, %edx - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0x000e850f; WORD $0x0000 // jne LBB13_46, $14(%rip) - WORD $0x8948; BYTE $0xf3 // movq %rsi, %rbx - LONG $0xc05d2b48 // subq $-64(%rbp), %rbx - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - WORD $0x8948; BYTE $0x1f // movq %rbx, (%rdi) - -LBB13_46: - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - WORD $0x0148; BYTE $0xd6 // addq %rdx, %rsi - WORD $0x0148; BYTE $0xcb // addq %rcx, %rbx - LONG $0xff84850f; WORD $0xffff // jne LBB13_39, $-124(%rip) - LONG $0xfffe0ce9; BYTE $0xff // jmp LBB13_16, $-500(%rip) - -LBB13_47: - LONG $0xc0752b48 // subq $-64(%rbp), %rsi - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - LONG $0xfffdfde9; BYTE $0xff // jmp LBB13_16, $-515(%rip) - -LBB13_48: - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0x0019850f; WORD $0x0000 // jne LBB13_50, $25(%rip) - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - LONG $0xc0452b48 // subq $-64(%rbp), %rax - LONG $0xd2bc0f49 // bsfq %r10, %rdx - WORD $0x0148; BYTE $0xc2 // addq %rax, %rdx - LONG $0xc8458b48 // movq $-56(%rbp), %rax - LONG $0xd0558948 // movq %rdx, $-48(%rbp) - WORD $0x8948; BYTE $0x10 // movq %rdx, (%rax) - -LBB13_50: - WORD $0x8944; BYTE $0xf8 // movl %r15d, %eax - WORD $0xd0f7 // notl %eax - WORD $0x2144; BYTE $0xd0 // andl %r10d, %eax - LONG $0x470c8d45 // leal (%r15,%rax,2), %r9d - WORD $0x148d; BYTE $0x00 // leal (%rax,%rax), %edx - WORD $0xd2f7 // notl %edx - WORD $0x2144; BYTE $0xd2 // andl %r10d, %edx - LONG $0xaaaae281; WORD $0xaaaa // andl $-1431655766, %edx - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - WORD $0xc201 // addl %eax, %edx - LONG $0xc7920f41 // setb %r15b - WORD $0xd201 // addl %edx, %edx - LONG $0x5555f281; WORD $0x5555 // xorl $1431655765, %edx - WORD $0x2144; BYTE $0xca // andl %r9d, %edx - WORD $0xd2f7 // notl %edx - WORD $0x2141; BYTE $0xd3 // andl %edx, %r11d - LONG $0xfffe9fe9; BYTE $0xff // jmp LBB13_27, $-353(%rip) - -LBB13_51: - WORD $0x0148; BYTE $0xf0 // addq %rsi, %rax - LONG $0xc84d8b48 // movq $-56(%rbp), %rcx - WORD $0x8948; BYTE $0x01 // movq %rax, (%rcx) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0xfffd8be9; BYTE $0xff // jmp LBB13_16, $-629(%rip) - -LBB13_52: - LONG $0xc0752b48 // subq $-64(%rbp), %rsi - WORD $0x0148; BYTE $0xc6 // addq %rax, %rsi - LONG $0x00005ae9; BYTE $0x00 // jmp LBB13_58, $90(%rip) - -LBB13_53: - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x0041840f; WORD $0x0000 // je LBB13_21, $65(%rip) - WORD $0x8948; BYTE $0xda // movq %rbx, %rdx - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0x0015850f; WORD $0x0000 // jne LBB13_56, $21(%rip) - LONG $0xc04d8b48 // movq $-64(%rbp), %rcx - WORD $0xf748; BYTE $0xd1 // notq %rcx - WORD $0x0148; BYTE $0xf1 // addq %rsi, %rcx - LONG $0xc8458b48 // movq $-56(%rbp), %rax - LONG $0xd04d8948 // movq %rcx, $-48(%rbp) - WORD $0x8948; BYTE $0x08 // movq %rcx, (%rax) - -LBB13_56: - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x8948; BYTE $0xd3 // movq %rdx, %rbx - WORD $0xff48; BYTE $0xcb // decq %rbx - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0xfea9850f; WORD $0xffff // jne LBB13_38, $-343(%rip) - LONG $0xfffd35e9; BYTE $0xff // jmp LBB13_16, $-715(%rip) - -LBB13_21: - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xfffd29e9; BYTE $0xff // jmp LBB13_16, $-727(%rip) - -LBB13_57: - LONG $0xc0752b48 // subq $-64(%rbp), %rsi - -LBB13_58: - LONG $0xc8458b48 // movq $-56(%rbp), %rax - WORD $0x8948; BYTE $0x30 // movq %rsi, (%rax) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0xfffd12e9; BYTE $0xff // jmp LBB13_16, $-750(%rip) - QUAD $0x0000000000000000; LONG $0x00000000; BYTE $0x00 // .p2align 4, 0x00 - -LCPI14_0: - LONG $0x43300000 // .long 1127219200 - LONG $0x45300000 // .long 1160773632 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - -LCPI14_1: - QUAD $0x4330000000000000 // .quad 0x4330000000000000 - QUAD $0x4530000000000000 // .quad 0x4530000000000000 - - // .p2align 3, 0x00 -LCPI14_2: - QUAD $0x430c6bf526340000 // .quad 0x430c6bf526340000 - -LCPI14_3: - QUAD $0xc30c6bf526340000 // .quad 0xc30c6bf526340000 - - // .p2align 4, 0x90 -_vnumber: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x38ec8348 // subq $56, %rsp - WORD $0x8949; BYTE $0xd6 // movq %rdx, %r14 - QUAD $0x00000000c845c748 // movq $0, $-56(%rbp) - WORD $0x8b48; BYTE $0x06 // movq (%rsi), %rax - WORD $0x8b4c; BYTE $0x3f // movq (%rdi), %r15 - LONG $0x086f8b4c // movq $8(%rdi), %r13 - LONG $0x205a8b48 // movq $32(%rdx), %rbx - LONG $0x285a8b4c // movq $40(%rdx), %r11 - LONG $0x0902c748; WORD $0x0000; BYTE $0x00 // movq $9, (%rdx) - LONG $0xc057f9c5 // vxorpd %xmm0, %xmm0, %xmm0 - LONG $0x4211f9c5; BYTE $0x08 // vmovupd %xmm0, $8(%rdx) - WORD $0x8b48; BYTE $0x0e // movq (%rsi), %rcx - LONG $0x184a8948 // movq %rcx, $24(%rdx) - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x0045830f; WORD $0x0000 // jae LBB14_6, $69(%rip) - LONG $0x073c8a41 // movb (%r15,%rax), %dil - LONG $0x0001ba41; WORD $0x0000 // movl $1, %r10d - LONG $0x2dff8040 // cmpb $45, %dil - LONG $0x0016850f; WORD $0x0000 // jne LBB14_4, $22(%rip) - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x0025830f; WORD $0x0000 // jae LBB14_6, $37(%rip) - LONG $0x073c8a41 // movb (%r15,%rax), %dil - LONG $0xffffba41; WORD $0xffff // movl $-1, %r10d - -LBB14_4: - WORD $0x4f8d; BYTE $0xd0 // leal $-48(%rdi), %ecx - WORD $0xf980; BYTE $0x0a // cmpb $10, %cl - LONG $0x0028820f; WORD $0x0000 // jb LBB14_9, $40(%rip) - WORD $0x8948; BYTE $0x06 // movq %rax, (%rsi) - LONG $0xfe06c749; WORD $0xffff; BYTE $0xff // movq $-2, (%r14) - LONG $0x00000ae9; BYTE $0x00 // jmp LBB14_8, $10(%rip) - -LBB14_6: - WORD $0x894c; BYTE $0x2e // movq %r13, (%rsi) - -LBB14_7: - LONG $0xff06c749; WORD $0xffff; BYTE $0xff // movq $-1, (%r14) - -LBB14_8: - LONG $0x38c48348 // addq $56, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB14_9: - LONG $0x30ff8040 // cmpb $48, %dil - LONG $0x0035850f; WORD $0x0000 // jne LBB14_13, $53(%rip) - LONG $0x01488d4c // leaq $1(%rax), %r9 - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x00bf830f; WORD $0x0000 // jae LBB14_22, $191(%rip) - LONG $0x0f148a43 // movb (%r15,%r9), %dl - WORD $0xc280; BYTE $0xd2 // addb $-46, %dl - WORD $0xfa80; BYTE $0x37 // cmpb $55, %dl - LONG $0x00af870f; WORD $0x0000 // ja LBB14_22, $175(%rip) - LONG $0xc2b60f44 // movzbl %dl, %r8d - QUAD $0x000000800001ba48; WORD $0x0080 // movabsq $36028797027352577, %rdx - LONG $0xc2a30f4c // btq %r8, %rdx - LONG $0x0097830f; WORD $0x0000 // jae LBB14_22, $151(%rip) - -LBB14_13: - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0xa05d8948 // movq %rbx, $-96(%rbp) - LONG $0xc0558944 // movl %r10d, $-64(%rbp) - LONG $0xd0758948 // movq %rsi, $-48(%rbp) - LONG $0x0075830f; WORD $0x0000 // jae LBB14_21, $117(%rip) - WORD $0xf980; BYTE $0x09 // cmpb $9, %cl - LONG $0x0081870f; WORD $0x0000 // ja LBB14_23, $129(%rip) - LONG $0xffd0b841; WORD $0xffff // movl $4294967248, %r8d - LONG $0xff4d8d4d // leaq $-1(%r13), %r9 - WORD $0xc931 // xorl %ecx, %ecx - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB14_16: - LONG $0x12fa8341 // cmpl $18, %r10d - LONG $0x00268f0f; WORD $0x0000 // jg LBB14_18, $38(%rip) - LONG $0xa4148d4b // leaq (%r12,%r12,4), %rdx - LONG $0xffbe0f40 // movsbl %dil, %edi - WORD $0x0144; BYTE $0xc7 // addl %r8d, %edi - LONG $0x57248d4c // leaq (%rdi,%rdx,2), %r12 - WORD $0xff41; BYTE $0xc2 // incl %r10d - LONG $0x000011e9; BYTE $0x00 // jmp LBB14_19, $17(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB14_18: - WORD $0xc1ff // incl %ecx - -LBB14_19: - WORD $0x3949; BYTE $0xc1 // cmpq %rax, %r9 - LONG $0x0079840f; WORD $0x0000 // je LBB14_28, $121(%rip) - LONG $0x7cb60f41; WORD $0x0107 // movzbl $1(%r15,%rax), %edi - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x578d; BYTE $0xd0 // leal $-48(%rdi), %edx - WORD $0xfa80; BYTE $0x0a // cmpb $10, %dl - LONG $0xffb0820f; WORD $0xffff // jb LBB14_16, $-80(%rip) - LONG $0x00001de9; BYTE $0x00 // jmp LBB14_24, $29(%rip) - -LBB14_21: - WORD $0xc931 // xorl %ecx, %ecx - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - LONG $0x000055e9; BYTE $0x00 // jmp LBB14_29, $85(%rip) - -LBB14_22: - WORD $0x894c; BYTE $0x0e // movq %r9, (%rsi) - LONG $0xffff13e9; BYTE $0xff // jmp LBB14_8, $-237(%rip) - -LBB14_23: - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0xc931 // xorl %ecx, %ecx - -LBB14_24: - WORD $0xd231 // xorl %edx, %edx - WORD $0xc985 // testl %ecx, %ecx - WORD $0x9f0f; BYTE $0xc2 // setg %dl - WORD $0x5589; BYTE $0xc4 // movl %edx, $-60(%rbp) - WORD $0xb041; BYTE $0x01 // movb $1, %r8b - LONG $0x2eff8040 // cmpb $46, %dil - LONG $0x003b850f; WORD $0x0000 // jne LBB14_30, $59(%rip) - WORD $0xff48; BYTE $0xc0 // incq %rax - LONG $0x0806c749; WORD $0x0000; BYTE $0x00 // movq $8, (%r14) - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x0268830f; WORD $0x0000 // jae LBB14_68, $616(%rip) - LONG $0x07148a41 // movb (%r15,%rax), %dl - WORD $0xc280; BYTE $0xd0 // addb $-48, %dl - WORD $0xfa80; BYTE $0x0a // cmpb $10, %dl - LONG $0x0401830f; WORD $0x0000 // jae LBB14_91, $1025(%rip) - WORD $0x3145; BYTE $0xc0 // xorl %r8d, %r8d - LONG $0x000010e9; BYTE $0x00 // jmp LBB14_30, $16(%rip) - -LBB14_28: - WORD $0x894c; BYTE $0xe8 // movq %r13, %rax - -LBB14_29: - WORD $0xd231 // xorl %edx, %edx - WORD $0xc985 // testl %ecx, %ecx - WORD $0x9f0f; BYTE $0xc2 // setg %dl - WORD $0x5589; BYTE $0xc4 // movl %edx, $-60(%rbp) - WORD $0xb041; BYTE $0x01 // movb $1, %r8b - -LBB14_30: - WORD $0xc985 // testl %ecx, %ecx - LONG $0x0056850f; WORD $0x0000 // jne LBB14_39, $86(%rip) - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x004d850f; WORD $0x0000 // jne LBB14_39, $77(%rip) - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x003c830f; WORD $0x0000 // jae LBB14_37, $60(%rip) - WORD $0xc689 // movl %eax, %esi - WORD $0x2944; BYTE $0xee // subl %r13d, %esi - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0xc931 // xorl %ecx, %ecx - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB14_34: - LONG $0x073c8041; BYTE $0x30 // cmpb $48, (%r15,%rax) - LONG $0x0024850f; WORD $0x0000 // jne LBB14_38, $36(%rip) - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0xc9ff // decl %ecx - WORD $0x3949; BYTE $0xc5 // cmpq %rax, %r13 - LONG $0xffe7850f; WORD $0xffff // jne LBB14_34, $-25(%rip) - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - WORD $0x8445; BYTE $0xc0 // testb %r8b, %r8b - LONG $0x0122850f; WORD $0x0000 // jne LBB14_58, $290(%rip) - LONG $0x000152e9; BYTE $0x00 // jmp LBB14_62, $338(%rip) - -LBB14_37: - WORD $0xc931 // xorl %ecx, %ecx - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - -LBB14_38: - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - -LBB14_39: - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x0051830f; WORD $0x0000 // jae LBB14_45, $81(%rip) - LONG $0x12fa8341 // cmpl $18, %r10d - LONG $0x00478f0f; WORD $0x0000 // jg LBB14_45, $71(%rip) - LONG $0xffd0b941; WORD $0xffff // movl $4294967248, %r9d - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB14_42: - LONG $0x14b60f41; BYTE $0x07 // movzbl (%r15,%rax), %edx - WORD $0x7a8d; BYTE $0xd0 // leal $-48(%rdx), %edi - LONG $0x09ff8040 // cmpb $9, %dil - LONG $0x002a870f; WORD $0x0000 // ja LBB14_45, $42(%rip) - LONG $0xa43c8d4b // leaq (%r12,%r12,4), %rdi - WORD $0x0144; BYTE $0xca // addl %r9d, %edx - LONG $0x7a248d4c // leaq (%rdx,%rdi,2), %r12 - WORD $0xc9ff // decl %ecx - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x0011830f; WORD $0x0000 // jae LBB14_45, $17(%rip) - LONG $0x01528d41 // leal $1(%r10), %edx - LONG $0x12fa8341 // cmpl $18, %r10d - WORD $0x8941; BYTE $0xd2 // movl %edx, %r10d - LONG $0xffc48c0f; WORD $0xffff // jl LBB14_42, $-60(%rip) - -LBB14_45: - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x00a4830f; WORD $0x0000 // jae LBB14_57, $164(%rip) - LONG $0x07348a41 // movb (%r15,%rax), %sil - WORD $0x568d; BYTE $0xd0 // leal $-48(%rsi), %edx - WORD $0xfa80; BYTE $0x09 // cmpb $9, %dl - LONG $0x0030870f; WORD $0x0000 // ja LBB14_51, $48(%rip) - LONG $0xff7d8d49 // leaq $-1(%r13), %rdi - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB14_48: - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x0167840f; WORD $0x0000 // je LBB14_69, $359(%rip) - LONG $0x74b60f41; WORD $0x0107 // movzbl $1(%r15,%rax), %esi - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x568d; BYTE $0xd0 // leal $-48(%rsi), %edx - WORD $0xfa80; BYTE $0x09 // cmpb $9, %dl - LONG $0xffe2860f; WORD $0xffff // jbe LBB14_48, $-30(%rip) - LONG $0x01c445c7; WORD $0x0000; BYTE $0x00 // movl $1, $-60(%rbp) - -LBB14_51: - LONG $0x20ce8040 // orb $32, %sil - LONG $0x65fe8040 // cmpb $101, %sil - LONG $0x0056850f; WORD $0x0000 // jne LBB14_57, $86(%rip) - LONG $0x01788d48 // leaq $1(%rax), %rdi - LONG $0x0806c749; WORD $0x0000; BYTE $0x00 // movq $8, (%r14) - WORD $0x394c; BYTE $0xef // cmpq %r13, %rdi - LONG $0x011d830f; WORD $0x0000 // jae LBB14_68, $285(%rip) - LONG $0x3f348a41 // movb (%r15,%rdi), %sil - LONG $0x2dfe8040 // cmpb $45, %sil - LONG $0x0010840f; WORD $0x0000 // je LBB14_55, $16(%rip) - LONG $0x0001b841; WORD $0x0000 // movl $1, %r8d - LONG $0x2bfe8040 // cmpb $43, %sil - LONG $0x0298850f; WORD $0x0000 // jne LBB14_89, $664(%rip) - -LBB14_55: - LONG $0x02c08348 // addq $2, %rax - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x00f2830f; WORD $0x0000 // jae LBB14_68, $242(%rip) - WORD $0xd231 // xorl %edx, %edx - LONG $0x2bfe8040 // cmpb $43, %sil - WORD $0x940f; BYTE $0xc2 // sete %dl - LONG $0x12448d44; BYTE $0xff // leal $-1(%rdx,%rdx), %r8d - LONG $0x07348a41 // movb (%r15,%rax), %sil - LONG $0x000277e9; BYTE $0x00 // jmp LBB14_90, $631(%rip) - -LBB14_57: - WORD $0xce89 // movl %ecx, %esi - WORD $0x8949; BYTE $0xc5 // movq %rax, %r13 - WORD $0x8445; BYTE $0xc0 // testb %r8b, %r8b - LONG $0x0035840f; WORD $0x0000 // je LBB14_62, $53(%rip) - -LBB14_58: - WORD $0xf685 // testl %esi, %esi - LONG $0x0026850f; WORD $0x0000 // jne LBB14_61, $38(%rip) - QUAD $0x000000000000b848; WORD $0x8000 // movabsq $-9223372036854775808, %rax - LONG $0xc04d6348 // movslq $-64(%rbp), %rcx - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x00f2890f; WORD $0x0000 // jns LBB14_72, $242(%rip) - WORD $0x894c; BYTE $0xe2 // movq %r12, %rdx - WORD $0x2148; BYTE $0xca // andq %rcx, %rdx - WORD $0x3948; BYTE $0xc2 // cmpq %rax, %rdx - LONG $0x00e3840f; WORD $0x0000 // je LBB14_72, $227(%rip) - -LBB14_61: - LONG $0x0806c749; WORD $0x0000; BYTE $0x00 // movq $8, (%r14) - -LBB14_62: - QUAD $0x00000000b845c748 // movq $0, $-72(%rbp) - LONG $0x6ef9c1c4; BYTE $0xc4 // vmovq %r12, %xmm0 - QUAD $0xfffffc2f0562f9c5 // vpunpckldq $-977(%rip), %xmm0, %xmm0 /* LCPI14_0(%rip) */ - QUAD $0xfffffc37055cf9c5 // vsubpd $-969(%rip), %xmm0, %xmm0 /* LCPI14_1(%rip) */ - LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd $1, %xmm0, %xmm1 - LONG $0xc058f3c5 // vaddsd %xmm0, %xmm1, %xmm0 - LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp) - WORD $0x894c; BYTE $0xe0 // movq %r12, %rax - LONG $0x34e8c148 // shrq $52, %rax - LONG $0x011f850f; WORD $0x0000 // jne LBB14_77, $287(%rip) - LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx - WORD $0x458b; BYTE $0xc0 // movl $-64(%rbp), %eax - WORD $0xe8c1; BYTE $0x1f // shrl $31, %eax - LONG $0x3fe0c148 // shlq $63, %rax - WORD $0x0948; BYTE $0xc8 // orq %rcx, %rax - LONG $0xc8458948 // movq %rax, $-56(%rbp) - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x019f840f; WORD $0x0000 // je LBB14_85, $415(%rip) - WORD $0xf685 // testl %esi, %esi - LONG $0x0197840f; WORD $0x0000 // je LBB14_85, $407(%rip) - LONG $0x6ef9e1c4; BYTE $0xc0 // vmovq %rax, %xmm0 - WORD $0x468d; BYTE $0xff // leal $-1(%rsi), %eax - WORD $0xf883; BYTE $0x24 // cmpl $36, %eax - LONG $0x004a870f; WORD $0x0000 // ja LBB14_70, $74(%rip) - WORD $0xfe83; BYTE $0x17 // cmpl $23, %esi - LONG $0x00a48c0f; WORD $0x0000 // jl LBB14_73, $164(%rip) - WORD $0x468d; BYTE $0xea // leal $-22(%rsi), %eax - LONG $0xc00d8d48; WORD $0x00ed; BYTE $0x00 // leaq $60864(%rip), %rcx /* _P10_TAB(%rip) */ - LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0 - LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp) - LONG $0x000016b8; BYTE $0x00 // movl $22, %eax - LONG $0x000088e9; BYTE $0x00 // jmp LBB14_74, $136(%rip) - -LBB14_68: - LONG $0xd0458b48 // movq $-48(%rbp), %rax - WORD $0x894c; BYTE $0x28 // movq %r13, (%rax) - LONG $0xfffc66e9; BYTE $0xff // jmp LBB14_7, $-922(%rip) - -LBB14_69: - LONG $0x01c445c7; WORD $0x0000; BYTE $0x00 // movl $1, $-60(%rbp) - WORD $0xce89 // movl %ecx, %esi - WORD $0x8445; BYTE $0xc0 // testb %r8b, %r8b - LONG $0xff15850f; WORD $0xffff // jne LBB14_58, $-235(%rip) - LONG $0xffff45e9; BYTE $0xff // jmp LBB14_62, $-187(%rip) - -LBB14_70: - WORD $0xfe83; BYTE $0xea // cmpl $-22, %esi - LONG $0x0094820f; WORD $0x0000 // jb LBB14_77, $148(%rip) - WORD $0xdef7 // negl %esi - LONG $0x77058d48; WORD $0x00ed; BYTE $0x00 // leaq $60791(%rip), %rax /* _P10_TAB(%rip) */ - LONG $0x045efbc5; BYTE $0xf0 // vdivsd (%rax,%rsi,8), %xmm0, %xmm0 - LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp) - LONG $0x0000dee9; BYTE $0x00 // jmp LBB14_81, $222(%rip) - -LBB14_72: - LONG $0x6ef9c1c4; BYTE $0xc4 // vmovq %r12, %xmm0 - LONG $0xe1af0f4c // imulq %rcx, %r12 - QUAD $0xfffffb570562f9c5 // vpunpckldq $-1193(%rip), %xmm0, %xmm0 /* LCPI14_0(%rip) */ - QUAD $0xfffffb5f055cf9c5 // vsubpd $-1185(%rip), %xmm0, %xmm0 /* LCPI14_1(%rip) */ - LONG $0x1066894d // movq %r12, $16(%r14) - LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd $1, %xmm0, %xmm1 - LONG $0xc058f3c5 // vaddsd %xmm0, %xmm1, %xmm0 - WORD $0x2148; BYTE $0xc8 // andq %rcx, %rax - LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx - WORD $0x0948; BYTE $0xc1 // orq %rax, %rcx - LONG $0x084e8949 // movq %rcx, $8(%r14) - LONG $0xd0458b48 // movq $-48(%rbp), %rax - WORD $0x894c; BYTE $0x28 // movq %r13, (%rax) - LONG $0xfffbf3e9; BYTE $0xff // jmp LBB14_8, $-1037(%rip) - -LBB14_73: - WORD $0xf089 // movl %esi, %eax - -LBB14_74: - QUAD $0xfffffb3c052ef9c5 // vucomisd $-1220(%rip), %xmm0 /* LCPI14_2(%rip) */ - LONG $0x002a870f; WORD $0x0000 // ja LBB14_77, $42(%rip) - QUAD $0xfffffb360d10fbc5 // vmovsd $-1226(%rip), %xmm1 /* LCPI14_3(%rip) */ - LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 - LONG $0x0018870f; WORD $0x0000 // ja LBB14_77, $24(%rip) - WORD $0xc089 // movl %eax, %eax - LONG $0xfb0d8d48; WORD $0x00ec; BYTE $0x00 // leaq $60667(%rip), %rcx /* _P10_TAB(%rip) */ - LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0 - LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp) - LONG $0x000062e9; BYTE $0x00 // jmp LBB14_81, $98(%rip) - -LBB14_77: - LONG $0xa85d894c // movq %r11, $-88(%rbp) - LONG $0xc84d8d48 // leaq $-56(%rbp), %rcx - WORD $0x894c; BYTE $0xe7 // movq %r12, %rdi - WORD $0x5d8b; BYTE $0xc0 // movl $-64(%rbp), %ebx - WORD $0xda89 // movl %ebx, %edx - LONG $0xb0758948 // movq %rsi, $-80(%rbp) - LONG $0xffe613e8; BYTE $0xff // callq _atof_eisel_lemire64, $-6637(%rip) - WORD $0xc084 // testb %al, %al - LONG $0x004b840f; WORD $0x0000 // je LBB14_83, $75(%rip) - LONG $0xb0758b48 // movq $-80(%rbp), %rsi - LONG $0x00c47d83 // cmpl $0, $-60(%rbp) - LONG $0x006c840f; WORD $0x0000 // je LBB14_84, $108(%rip) - WORD $0xff49; BYTE $0xc4 // incq %r12 - LONG $0xb84d8d48 // leaq $-72(%rbp), %rcx - WORD $0x894c; BYTE $0xe7 // movq %r12, %rdi - WORD $0xda89 // movl %ebx, %edx - LONG $0xffe5ece8; BYTE $0xff // callq _atof_eisel_lemire64, $-6676(%rip) - WORD $0xc084 // testb %al, %al - LONG $0x0024840f; WORD $0x0000 // je LBB14_83, $36(%rip) - LONG $0x4d10fbc5; BYTE $0xb8 // vmovsd $-72(%rbp), %xmm1 - LONG $0x4510fbc5; BYTE $0xc8 // vmovsd $-56(%rbp), %xmm0 - LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 - LONG $0x0010850f; WORD $0x0000 // jne LBB14_83, $16(%rip) - LONG $0x000a8a0f; WORD $0x0000 // jp LBB14_83, $10(%rip) - -LBB14_81: - LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax - LONG $0x000033e9; BYTE $0x00 // jmp LBB14_85, $51(%rip) - -LBB14_83: - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - WORD $0x8b48; BYTE $0x03 // movq (%rbx), %rax - WORD $0x0149; BYTE $0xc7 // addq %rax, %r15 - WORD $0x894c; BYTE $0xee // movq %r13, %rsi - WORD $0x2948; BYTE $0xc6 // subq %rax, %rsi - WORD $0x894c; BYTE $0xff // movq %r15, %rdi - LONG $0xa0558b48 // movq $-96(%rbp), %rdx - LONG $0xa84d8b48 // movq $-88(%rbp), %rcx - LONG $0xffeaf0e8; BYTE $0xff // callq _atof_native, $-5392(%rip) - LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp) - LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax - LONG $0x000008e9; BYTE $0x00 // jmp LBB14_86, $8(%rip) - -LBB14_84: - LONG $0xc8458b48 // movq $-56(%rbp), %rax - -LBB14_85: - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - -LBB14_86: - QUAD $0x000000000000b948; WORD $0x8000 // movabsq $-9223372036854775808, %rcx - WORD $0xff48; BYTE $0xc9 // decq %rcx - WORD $0x2148; BYTE $0xc1 // andq %rax, %rcx - QUAD $0x000000000000ba48; WORD $0x7ff0 // movabsq $9218868437227405312, %rdx - WORD $0x3948; BYTE $0xd1 // cmpq %rdx, %rcx - LONG $0x0007850f; WORD $0x0000 // jne LBB14_88, $7(%rip) - LONG $0xf806c749; WORD $0xffff; BYTE $0xff // movq $-8, (%r14) - -LBB14_88: - LONG $0x08468949 // movq %rax, $8(%r14) - WORD $0x894c; BYTE $0x2b // movq %r13, (%rbx) - LONG $0xfffae0e9; BYTE $0xff // jmp LBB14_8, $-1312(%rip) - -LBB14_89: - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - -LBB14_90: - WORD $0x7e8d; BYTE $0xd0 // leal $-48(%rsi), %edi - LONG $0x09ff8040 // cmpb $9, %dil - LONG $0x0013860f; WORD $0x0000 // jbe LBB14_92, $19(%rip) - -LBB14_91: - LONG $0xd04d8b48 // movq $-48(%rbp), %rcx - WORD $0x8948; BYTE $0x01 // movq %rax, (%rcx) - LONG $0xfe06c749; WORD $0xffff; BYTE $0xff // movq $-2, (%r14) - LONG $0xfffabde9; BYTE $0xff // jmp LBB14_8, $-1347(%rip) - -LBB14_92: - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x0049830f; WORD $0x0000 // jae LBB14_98, $73(%rip) - LONG $0x09ff8040 // cmpb $9, %dil - LONG $0x003f870f; WORD $0x0000 // ja LBB14_98, $63(%rip) - LONG $0xff4d8d4d // leaq $-1(%r13), %r9 - WORD $0xff31 // xorl %edi, %edi - -LBB14_95: - WORD $0xfa89 // movl %edi, %edx - LONG $0x2710ff81; WORD $0x0000 // cmpl $10000, %edi - WORD $0x3c8d; BYTE $0x92 // leal (%rdx,%rdx,4), %edi - LONG $0xf6b60f40 // movzbl %sil, %esi - LONG $0xd07e7c8d // leal $-48(%rsi,%rdi,2), %edi - WORD $0x4d0f; BYTE $0xfa // cmovgel %edx, %edi - WORD $0x3949; BYTE $0xc1 // cmpq %rax, %r9 - LONG $0x0021840f; WORD $0x0000 // je LBB14_99, $33(%rip) - LONG $0x74b60f41; WORD $0x0107 // movzbl $1(%r15,%rax), %esi - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x568d; BYTE $0xd0 // leal $-48(%rsi), %edx - WORD $0xfa80; BYTE $0x0a // cmpb $10, %dl - LONG $0xffcc820f; WORD $0xffff // jb LBB14_95, $-52(%rip) - LONG $0x00000ae9; BYTE $0x00 // jmp LBB14_100, $10(%rip) - -LBB14_98: - WORD $0xff31 // xorl %edi, %edi - LONG $0x000003e9; BYTE $0x00 // jmp LBB14_100, $3(%rip) - -LBB14_99: - WORD $0x894c; BYTE $0xe8 // movq %r13, %rax - -LBB14_100: - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - LONG $0xf0af0f41 // imull %r8d, %esi - WORD $0xce01 // addl %ecx, %esi - WORD $0x8949; BYTE $0xc5 // movq %rax, %r13 - LONG $0xfffd3fe9; BYTE $0xff // jmp LBB14_62, $-705(%rip) - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_vsigned: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - BYTE $0x53 // pushq %rbx - WORD $0x8b48; BYTE $0x06 // movq (%rsi), %rax - WORD $0x8b4c; BYTE $0x0f // movq (%rdi), %r9 - LONG $0x085f8b4c // movq $8(%rdi), %r11 - LONG $0x0902c748; WORD $0x0000; BYTE $0x00 // movq $9, (%rdx) - LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 - LONG $0x4211f8c5; BYTE $0x08 // vmovups %xmm0, $8(%rdx) - WORD $0x8b48; BYTE $0x0e // movq (%rsi), %rcx - LONG $0x184a8948 // movq %rcx, $24(%rdx) - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - LONG $0x0044830f; WORD $0x0000 // jae LBB15_1, $68(%rip) - LONG $0x010c8a41 // movb (%r9,%rax), %cl - LONG $0x0001b841; WORD $0x0000 // movl $1, %r8d - WORD $0xf980; BYTE $0x2d // cmpb $45, %cl - LONG $0x0017850f; WORD $0x0000 // jne LBB15_5, $23(%rip) - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - LONG $0x0025830f; WORD $0x0000 // jae LBB15_1, $37(%rip) - LONG $0x010c8a41 // movb (%r9,%rax), %cl - LONG $0xffc0c749; WORD $0xffff; BYTE $0xff // movq $-1, %r8 - -LBB15_5: - WORD $0x798d; BYTE $0xd0 // leal $-48(%rcx), %edi - LONG $0x0aff8040 // cmpb $10, %dil - LONG $0x001a820f; WORD $0x0000 // jb LBB15_7, $26(%rip) - WORD $0x8948; BYTE $0x06 // movq %rax, (%rsi) - LONG $0xfe02c748; WORD $0xffff; BYTE $0xff // movq $-2, (%rdx) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB15_1: - WORD $0x894c; BYTE $0x1e // movq %r11, (%rsi) - LONG $0xff02c748; WORD $0xffff; BYTE $0xff // movq $-1, (%rdx) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB15_7: - WORD $0xf980; BYTE $0x30 // cmpb $48, %cl - LONG $0x0035850f; WORD $0x0000 // jne LBB15_12, $53(%rip) - LONG $0x01788d48 // leaq $1(%rax), %rdi - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - LONG $0x0081830f; WORD $0x0000 // jae LBB15_11, $129(%rip) - LONG $0x390c8a41 // movb (%r9,%rdi), %cl - WORD $0xc180; BYTE $0xd2 // addb $-46, %cl - WORD $0xf980; BYTE $0x37 // cmpb $55, %cl - LONG $0x0071870f; WORD $0x0000 // ja LBB15_11, $113(%rip) - LONG $0xd1b60f44 // movzbl %cl, %r10d - QUAD $0x000000800001b948; WORD $0x0080 // movabsq $36028797027352577, %rcx - LONG $0xd1a30f4c // btq %r10, %rcx - LONG $0x0059830f; WORD $0x0000 // jae LBB15_11, $89(%rip) - -LBB15_12: - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - WORD $0x894d; BYTE $0xda // movq %r11, %r10 - LONG $0xd0470f4c // cmovaq %rax, %r10 - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB15_13: - WORD $0x3949; BYTE $0xc2 // cmpq %rax, %r10 - LONG $0x007f840f; WORD $0x0000 // je LBB15_23, $127(%rip) - LONG $0x3cbe0f49; BYTE $0x01 // movsbq (%r9,%rax), %rdi - WORD $0x5f8d; BYTE $0xd0 // leal $-48(%rdi), %ebx - WORD $0xfb80; BYTE $0x09 // cmpb $9, %bl - LONG $0x0033870f; WORD $0x0000 // ja LBB15_18, $51(%rip) - LONG $0x0ac96b48 // imulq $10, %rcx, %rcx - LONG $0x0013800f; WORD $0x0000 // jo LBB15_17, $19(%rip) - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0xc783; BYTE $0xd0 // addl $-48, %edi - LONG $0xf8af0f49 // imulq %r8, %rdi - WORD $0x0148; BYTE $0xf9 // addq %rdi, %rcx - LONG $0xffc9810f; WORD $0xffff // jno LBB15_13, $-55(%rip) - -LBB15_17: - WORD $0xff48; BYTE $0xc8 // decq %rax - WORD $0x8948; BYTE $0x06 // movq %rax, (%rsi) - LONG $0xfb02c748; WORD $0xffff; BYTE $0xff // movq $-5, (%rdx) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB15_11: - WORD $0x8948; BYTE $0x3e // movq %rdi, (%rsi) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB15_18: - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - LONG $0x002f830f; WORD $0x0000 // jae LBB15_22, $47(%rip) - LONG $0x013c8a41 // movb (%r9,%rax), %dil - LONG $0x2eff8040 // cmpb $46, %dil - LONG $0x0014840f; WORD $0x0000 // je LBB15_25, $20(%rip) - LONG $0x45ff8040 // cmpb $69, %dil - LONG $0x000a840f; WORD $0x0000 // je LBB15_25, $10(%rip) - LONG $0x65ff8040 // cmpb $101, %dil - LONG $0x000d850f; WORD $0x0000 // jne LBB15_22, $13(%rip) - -LBB15_25: - WORD $0x8948; BYTE $0x06 // movq %rax, (%rsi) - LONG $0xfa02c748; WORD $0xffff; BYTE $0xff // movq $-6, (%rdx) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB15_22: - WORD $0x8949; BYTE $0xc2 // movq %rax, %r10 - -LBB15_23: - WORD $0x894c; BYTE $0x16 // movq %r10, (%rsi) - LONG $0x104a8948 // movq %rcx, $16(%rdx) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -_vunsigned: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - BYTE $0x53 // pushq %rbx - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - WORD $0x8b48; BYTE $0x0e // movq (%rsi), %rcx - WORD $0x8b4c; BYTE $0x0f // movq (%rdi), %r9 - LONG $0x085f8b4c // movq $8(%rdi), %r11 - LONG $0x0902c748; WORD $0x0000; BYTE $0x00 // movq $9, (%rdx) - LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 - LONG $0x4211f8c5; BYTE $0x08 // vmovups %xmm0, $8(%rdx) - WORD $0x8b48; BYTE $0x06 // movq (%rsi), %rax - LONG $0x18428948 // movq %rax, $24(%rdx) - WORD $0x394c; BYTE $0xd9 // cmpq %r11, %rcx - LONG $0x0019830f; WORD $0x0000 // jae LBB16_1, $25(%rip) - LONG $0x09048a41 // movb (%r9,%rcx), %al - WORD $0x2d3c // cmpb $45, %al - LONG $0x001a850f; WORD $0x0000 // jne LBB16_4, $26(%rip) - -LBB16_3: - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - LONG $0xfa00c749; WORD $0xffff; BYTE $0xff // movq $-6, (%r8) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB16_1: - WORD $0x894c; BYTE $0x1e // movq %r11, (%rsi) - LONG $0xff00c749; WORD $0xffff; BYTE $0xff // movq $-1, (%r8) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB16_4: - WORD $0x508d; BYTE $0xd0 // leal $-48(%rax), %edx - WORD $0xfa80; BYTE $0x0a // cmpb $10, %dl - LONG $0x000d820f; WORD $0x0000 // jb LBB16_6, $13(%rip) - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - LONG $0xfe00c749; WORD $0xffff; BYTE $0xff // movq $-2, (%r8) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB16_6: - WORD $0x303c // cmpb $48, %al - LONG $0x0026850f; WORD $0x0000 // jne LBB16_7, $38(%rip) - LONG $0x09448a41; BYTE $0x01 // movb $1(%r9,%rcx), %al - WORD $0xd204 // addb $-46, %al - WORD $0x373c // cmpb $55, %al - LONG $0x00b6870f; WORD $0x0000 // ja LBB16_16, $182(%rip) - WORD $0xb60f; BYTE $0xc0 // movzbl %al, %eax - QUAD $0x000000800001ba48; WORD $0x0080 // movabsq $36028797027352577, %rdx - LONG $0xc2a30f48 // btq %rax, %rdx - LONG $0x009f830f; WORD $0x0000 // jae LBB16_16, $159(%rip) - -LBB16_7: - WORD $0xc031 // xorl %eax, %eax - LONG $0x000aba41; WORD $0x0000 // movl $10, %r10d - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB16_8: - WORD $0x3949; BYTE $0xcb // cmpq %rcx, %r11 - LONG $0x007b840f; WORD $0x0000 // je LBB16_22, $123(%rip) - LONG $0x3cbe0f41; BYTE $0x09 // movsbl (%r9,%rcx), %edi - WORD $0x578d; BYTE $0xd0 // leal $-48(%rdi), %edx - WORD $0xfa80; BYTE $0x09 // cmpb $9, %dl - LONG $0x003f870f; WORD $0x0000 // ja LBB16_17, $63(%rip) - WORD $0xf749; BYTE $0xe2 // mulq %r10 - LONG $0x0026800f; WORD $0x0000 // jo LBB16_13, $38(%rip) - WORD $0xff48; BYTE $0xc1 // incq %rcx - WORD $0xc783; BYTE $0xd0 // addl $-48, %edi - WORD $0xdb31 // xorl %ebx, %ebx - WORD $0x0148; BYTE $0xf8 // addq %rdi, %rax - WORD $0x920f; BYTE $0xc3 // setb %bl - WORD $0x8948; BYTE $0xda // movq %rbx, %rdx - WORD $0xf748; BYTE $0xda // negq %rdx - WORD $0x3148; BYTE $0xd3 // xorq %rdx, %rbx - LONG $0x0009850f; WORD $0x0000 // jne LBB16_13, $9(%rip) - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0xffb7890f; WORD $0xffff // jns LBB16_8, $-73(%rip) - -LBB16_13: - WORD $0xff48; BYTE $0xc9 // decq %rcx - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - LONG $0xfb00c749; WORD $0xffff; BYTE $0xff // movq $-5, (%r8) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB16_17: - WORD $0x394c; BYTE $0xd9 // cmpq %r11, %rcx - LONG $0x001f830f; WORD $0x0000 // jae LBB16_21, $31(%rip) - LONG $0x09148a41 // movb (%r9,%rcx), %dl - WORD $0xfa80; BYTE $0x2e // cmpb $46, %dl - LONG $0xff1f840f; WORD $0xffff // je LBB16_3, $-225(%rip) - WORD $0xfa80; BYTE $0x45 // cmpb $69, %dl - LONG $0xff16840f; WORD $0xffff // je LBB16_3, $-234(%rip) - WORD $0xfa80; BYTE $0x65 // cmpb $101, %dl - LONG $0xff0d840f; WORD $0xffff // je LBB16_3, $-243(%rip) - -LBB16_21: - WORD $0x8949; BYTE $0xcb // movq %rcx, %r11 - -LBB16_22: - WORD $0x894c; BYTE $0x1e // movq %r11, (%rsi) - LONG $0x10408949 // movq %rax, $16(%r8) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB16_16: - WORD $0xff48; BYTE $0xc1 // incq %rcx - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x0000000000000000; BYTE $0x00 // .p2align 4, 0x00 - -LCPI17_0: - QUAD $0x0000000000000001 // .quad 1 - QUAD $0x0000000000000005 // .quad 5 - - // .p2align 4, 0x90 -_skip_array: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - QUAD $0xffffffdb0528f8c5 // vmovaps $-37(%rip), %xmm0 /* LCPI17_0(%rip) */ - LONG $0x0011f8c5 // vmovups %xmm0, (%rax) - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - BYTE $0x5d // popq %rbp - LONG $0x00000ee9; BYTE $0x00 // jmp _fsm_exec, $14(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -_fsm_exec: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x28ec8348 // subq $40, %rsp - LONG $0xb84d8948 // movq %rcx, $-72(%rbp) - LONG $0x003f8348 // cmpq $0, (%rdi) - LONG $0x0591840f; WORD $0x0000 // je LBB18_76, $1425(%rip) - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - WORD $0x8949; BYTE $0xfc // movq %rdi, %r12 - LONG $0x08468d48 // leaq $8(%rsi), %rax - LONG $0xd0458948 // movq %rax, $-48(%rbp) - LONG $0xffc6c749; WORD $0xffff; BYTE $0xff // movq $-1, %r14 - QUAD $0x000100002600bb49; WORD $0x0000 // movabsq $4294977024, %r11 - LONG $0xc0758948 // movq %rsi, $-64(%rbp) - LONG $0x000029e9; BYTE $0x00 // jmp LBB18_3, $41(%rip) - -LBB18_2: - LONG $0x03488d48 // leaq $3(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x05a98e0f; WORD $0x0000 // jle LBB18_83, $1449(%rip) - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB18_61: - LONG $0x24148b4d // movq (%r12), %r10 - WORD $0x894d; BYTE $0xf7 // movq %r14, %r15 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0x0547840f; WORD $0x0000 // je LBB18_77, $1351(%rip) - -LBB18_3: - WORD $0x894d; BYTE $0xf1 // movq %r14, %r9 - WORD $0x8b48; BYTE $0x3e // movq (%rsi), %rdi - LONG $0x084e8b48 // movq $8(%rsi), %rcx - WORD $0x8b49; BYTE $0x00 // movq (%r8), %rax - WORD $0x8948; BYTE $0xc2 // movq %rax, %rdx - WORD $0x2948; BYTE $0xca // subq %rcx, %rdx - LONG $0x0037830f; WORD $0x0000 // jae LBB18_8, $55(%rip) - WORD $0x1c8a; BYTE $0x07 // movb (%rdi,%rax), %bl - WORD $0xfb80; BYTE $0x0d // cmpb $13, %bl - LONG $0x002b840f; WORD $0x0000 // je LBB18_8, $43(%rip) - WORD $0xfb80; BYTE $0x20 // cmpb $32, %bl - LONG $0x0022840f; WORD $0x0000 // je LBB18_8, $34(%rip) - WORD $0xc380; BYTE $0xf7 // addb $-9, %bl - WORD $0xfb80; BYTE $0x01 // cmpb $1, %bl - LONG $0x0016860f; WORD $0x0000 // jbe LBB18_8, $22(%rip) - WORD $0x8949; BYTE $0xc6 // movq %rax, %r14 - LONG $0x000130e9; BYTE $0x00 // jmp LBB18_29, $304(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB18_8: - LONG $0x01708d4c // leaq $1(%rax), %r14 - WORD $0x3949; BYTE $0xce // cmpq %rcx, %r14 - LONG $0x0023830f; WORD $0x0000 // jae LBB18_12, $35(%rip) - LONG $0x371c8a42 // movb (%rdi,%r14), %bl - WORD $0xfb80; BYTE $0x0d // cmpb $13, %bl - LONG $0x0016840f; WORD $0x0000 // je LBB18_12, $22(%rip) - WORD $0xfb80; BYTE $0x20 // cmpb $32, %bl - LONG $0x000d840f; WORD $0x0000 // je LBB18_12, $13(%rip) - WORD $0xc380; BYTE $0xf7 // addb $-9, %bl - WORD $0xfb80; BYTE $0x01 // cmpb $1, %bl - LONG $0x00f3870f; WORD $0x0000 // ja LBB18_29, $243(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB18_12: - LONG $0x02708d4c // leaq $2(%rax), %r14 - WORD $0x3949; BYTE $0xce // cmpq %rcx, %r14 - LONG $0x0023830f; WORD $0x0000 // jae LBB18_16, $35(%rip) - LONG $0x371c8a42 // movb (%rdi,%r14), %bl - WORD $0xfb80; BYTE $0x0d // cmpb $13, %bl - LONG $0x0016840f; WORD $0x0000 // je LBB18_16, $22(%rip) - WORD $0xfb80; BYTE $0x20 // cmpb $32, %bl - LONG $0x000d840f; WORD $0x0000 // je LBB18_16, $13(%rip) - WORD $0xc380; BYTE $0xf7 // addb $-9, %bl - WORD $0xfb80; BYTE $0x01 // cmpb $1, %bl - LONG $0x00c3870f; WORD $0x0000 // ja LBB18_29, $195(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB18_16: - LONG $0x03708d4c // leaq $3(%rax), %r14 - WORD $0x3949; BYTE $0xce // cmpq %rcx, %r14 - LONG $0x0023830f; WORD $0x0000 // jae LBB18_20, $35(%rip) - LONG $0x371c8a42 // movb (%rdi,%r14), %bl - WORD $0xfb80; BYTE $0x0d // cmpb $13, %bl - LONG $0x0016840f; WORD $0x0000 // je LBB18_20, $22(%rip) - WORD $0xfb80; BYTE $0x20 // cmpb $32, %bl - LONG $0x000d840f; WORD $0x0000 // je LBB18_20, $13(%rip) - WORD $0xc380; BYTE $0xf7 // addb $-9, %bl - WORD $0xfb80; BYTE $0x01 // cmpb $1, %bl - LONG $0x0093870f; WORD $0x0000 // ja LBB18_29, $147(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB18_20: - LONG $0x04588d48 // leaq $4(%rax), %rbx - WORD $0x3948; BYTE $0xd9 // cmpq %rbx, %rcx - LONG $0x0450860f; WORD $0x0000 // jbe LBB18_75, $1104(%rip) - WORD $0x3948; BYTE $0xd9 // cmpq %rbx, %rcx - LONG $0x004a840f; WORD $0x0000 // je LBB18_26, $74(%rip) - LONG $0x0f1c8d48 // leaq (%rdi,%rcx), %rbx - LONG $0x04c28348 // addq $4, %rdx - LONG $0x07748d4c; BYTE $0x05 // leaq $5(%rdi,%rax), %r14 - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB18_23: - LONG $0x46be0f41; BYTE $0xff // movsbl $-1(%r14), %eax - WORD $0xf883; BYTE $0x20 // cmpl $32, %eax - LONG $0x0042870f; WORD $0x0000 // ja LBB18_28, $66(%rip) - LONG $0xc3a30f49 // btq %rax, %r11 - LONG $0x0038830f; WORD $0x0000 // jae LBB18_28, $56(%rip) - WORD $0xff49; BYTE $0xc6 // incq %r14 - WORD $0xff48; BYTE $0xc2 // incq %rdx - LONG $0xffdc850f; WORD $0xffff // jne LBB18_23, $-36(%rip) - LONG $0x00000ae9; BYTE $0x00 // jmp LBB18_27, $10(%rip) - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB18_26: - WORD $0x0148; BYTE $0xfb // addq %rdi, %rbx - -LBB18_27: - WORD $0x2948; BYTE $0xfb // subq %rdi, %rbx - WORD $0x8949; BYTE $0xde // movq %rbx, %r14 - WORD $0x3949; BYTE $0xce // cmpq %rcx, %r14 - LONG $0x0020820f; WORD $0x0000 // jb LBB18_29, $32(%rip) - LONG $0x0003e9e9; BYTE $0x00 // jmp LBB18_76, $1001(%rip) - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB18_28: - WORD $0x8948; BYTE $0xfa // movq %rdi, %rdx - WORD $0xf748; BYTE $0xd2 // notq %rdx - WORD $0x0149; BYTE $0xd6 // addq %rdx, %r14 - WORD $0x3949; BYTE $0xce // cmpq %rcx, %r14 - LONG $0x03ce830f; WORD $0x0000 // jae LBB18_76, $974(%rip) - -LBB18_29: - LONG $0x014e8d49 // leaq $1(%r14), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0x0cbe0f42; BYTE $0x37 // movsbl (%rdi,%r14), %ecx - LONG $0xffc7c749; WORD $0xffff; BYTE $0xff // movq $-1, %r15 - WORD $0xc985 // testl %ecx, %ecx - LONG $0x03ba840f; WORD $0x0000 // je LBB18_77, $954(%rip) - LONG $0x242c8b4d // movq (%r12), %r13 - LONG $0xff558d4d // leaq $-1(%r13), %r10 - LONG $0xec1c8b43 // movl (%r12,%r13,8), %ebx - LONG $0xfff98349 // cmpq $-1, %r9 - LONG $0xf1450f4d // cmovneq %r9, %r14 - WORD $0xcbff // decl %ebx - WORD $0xfb83; BYTE $0x05 // cmpl $5, %ebx - LONG $0x0037870f; WORD $0x0000 // ja LBB18_35, $55(%rip) - LONG $0xfd158d48; WORD $0x0004; BYTE $0x00 // leaq $1277(%rip), %rdx /* LJTI18_0(%rip) */ - LONG $0x9a046348 // movslq (%rdx,%rbx,4), %rax - WORD $0x0148; BYTE $0xd0 // addq %rdx, %rax - JMP AX - -LBB18_32: - WORD $0xf983; BYTE $0x2c // cmpl $44, %ecx - LONG $0x0199840f; WORD $0x0000 // je LBB18_53, $409(%rip) - WORD $0xf983; BYTE $0x5d // cmpl $93, %ecx - LONG $0x03d6850f; WORD $0x0000 // jne LBB18_85, $982(%rip) - LONG $0x2414894d // movq %r10, (%r12) - WORD $0x894d; BYTE $0xf7 // movq %r14, %r15 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0xfe22850f; WORD $0xffff // jne LBB18_3, $-478(%rip) - LONG $0x000364e9; BYTE $0x00 // jmp LBB18_77, $868(%rip) - -LBB18_35: - LONG $0x2414894d // movq %r10, (%r12) - WORD $0xf983; BYTE $0x7b // cmpl $123, %ecx - LONG $0x00f8860f; WORD $0x0000 // jbe LBB18_51, $248(%rip) - LONG $0x0003afe9; BYTE $0x00 // jmp LBB18_85, $943(%rip) - -LBB18_36: - WORD $0xf983; BYTE $0x2c // cmpl $44, %ecx - LONG $0x0183840f; WORD $0x0000 // je LBB18_55, $387(%rip) - WORD $0xf983; BYTE $0x7d // cmpl $125, %ecx - LONG $0x039d850f; WORD $0x0000 // jne LBB18_85, $925(%rip) - LONG $0x2414894d // movq %r10, (%r12) - WORD $0x894d; BYTE $0xf7 // movq %r14, %r15 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0xfde9850f; WORD $0xffff // jne LBB18_3, $-535(%rip) - LONG $0x00032be9; BYTE $0x00 // jmp LBB18_77, $811(%rip) - -LBB18_39: - WORD $0xf980; BYTE $0x22 // cmpb $34, %cl - LONG $0x037f850f; WORD $0x0000 // jne LBB18_85, $895(%rip) - QUAD $0x00000004ec04c74b // movq $4, (%r12,%r13,8) - -LBB18_41: - QUAD $0xffffffffc845c748 // movq $-1, $-56(%rbp) - WORD $0x8b4d; BYTE $0x28 // movq (%r8), %r13 - WORD $0x8948; BYTE $0xf7 // movq %rsi, %rdi - WORD $0x894c; BYTE $0xee // movq %r13, %rsi - LONG $0xc8558d48 // leaq $-56(%rbp), %rdx - LONG $0xb84d8b48 // movq $-72(%rbp), %rcx - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - LONG $0xffee92e8; BYTE $0xff // callq _advance_string, $-4462(%rip) - WORD $0x8949; BYTE $0xc7 // movq %rax, %r15 - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x030b880f; WORD $0x0000 // js LBB18_78, $779(%rip) - WORD $0x894c; BYTE $0x3b // movq %r15, (%rbx) - WORD $0x854d; BYTE $0xed // testq %r13, %r13 - WORD $0x8949; BYTE $0xd8 // movq %rbx, %r8 - LONG $0xc0758b48 // movq $-64(%rbp), %rsi - QUAD $0x000100002600bb49; WORD $0x0000 // movabsq $4294977024, %r11 - LONG $0xfd798f0f; WORD $0xffff // jg LBB18_61, $-647(%rip) - LONG $0x000301e9; BYTE $0x00 // jmp LBB18_79, $769(%rip) - -LBB18_43: - WORD $0xf980; BYTE $0x3a // cmpb $58, %cl - LONG $0x031f850f; WORD $0x0000 // jne LBB18_85, $799(%rip) - QUAD $0x00000000ec04c74b // movq $0, (%r12,%r13,8) - LONG $0xfffd5ee9; BYTE $0xff // jmp LBB18_61, $-674(%rip) - -LBB18_45: - WORD $0xf980; BYTE $0x5d // cmpb $93, %cl - LONG $0x003c850f; WORD $0x0000 // jne LBB18_50, $60(%rip) - LONG $0x2414894d // movq %r10, (%r12) - WORD $0x894d; BYTE $0xf7 // movq %r14, %r15 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0xfd55850f; WORD $0xffff // jne LBB18_3, $-683(%rip) - LONG $0x000297e9; BYTE $0x00 // jmp LBB18_77, $663(%rip) - -LBB18_47: - WORD $0xf983; BYTE $0x22 // cmpl $34, %ecx - LONG $0x00eb840f; WORD $0x0000 // je LBB18_57, $235(%rip) - WORD $0xf983; BYTE $0x7d // cmpl $125, %ecx - LONG $0x02e2850f; WORD $0x0000 // jne LBB18_85, $738(%rip) - LONG $0x2414894d // movq %r10, (%r12) - WORD $0x894d; BYTE $0xf7 // movq %r14, %r15 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0xfd2e850f; WORD $0xffff // jne LBB18_3, $-722(%rip) - LONG $0x000270e9; BYTE $0x00 // jmp LBB18_77, $624(%rip) - -LBB18_50: - QUAD $0x00000001ec04c74b // movq $1, (%r12,%r13,8) - WORD $0xf983; BYTE $0x7b // cmpl $123, %ecx - LONG $0x02bc870f; WORD $0x0000 // ja LBB18_85, $700(%rip) - -LBB18_51: - WORD $0xc889 // movl %ecx, %eax - LONG $0xd70d8d48; WORD $0x0003; BYTE $0x00 // leaq $983(%rip), %rcx /* LJTI18_1(%rip) */ - LONG $0x81046348 // movslq (%rcx,%rax,4), %rax - WORD $0x0148; BYTE $0xc8 // addq %rcx, %rax - JMP AX - -LBB18_52: - WORD $0x8b49; BYTE $0x18 // movq (%r8), %rbx - LONG $0xff7b8d4c // leaq $-1(%rbx), %r15 - LONG $0x1f7c8d48; BYTE $0xff // leaq $-1(%rdi,%rbx), %rdi - LONG $0xd0458b48 // movq $-48(%rbp), %rax - WORD $0x8b48; BYTE $0x30 // movq (%rax), %rsi - WORD $0x294c; BYTE $0xfe // subq %r15, %rsi - WORD $0x894d; BYTE $0xc5 // movq %r8, %r13 - LONG $0x000728e8; BYTE $0x00 // callq _do_skip_number, $1832(%rip) - QUAD $0x000100002600bb49; WORD $0x0000 // movabsq $4294977024, %r11 - LONG $0xc0758b48 // movq $-64(%rbp), %rsi - WORD $0x894d; BYTE $0xe8 // movq %r13, %r8 - LONG $0xff488d48 // leaq $-1(%rax), %rcx - LONG $0xfec2c748; WORD $0xffff; BYTE $0xff // movq $-2, %rdx - WORD $0x2948; BYTE $0xc2 // subq %rax, %rdx - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xd1490f48 // cmovnsq %rcx, %rdx - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0xf8480f4c // cmovsq %rax, %r15 - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - LONG $0x00558949 // movq %rdx, (%r13) - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0xfc97890f; WORD $0xffff // jns LBB18_61, $-873(%rip) - LONG $0x0001e9e9; BYTE $0x00 // jmp LBB18_77, $489(%rip) - -LBB18_53: - LONG $0xfffd8149; WORD $0x000f; BYTE $0x00 // cmpq $4095, %r13 - LONG $0x01ee8f0f; WORD $0x0000 // jg LBB18_80, $494(%rip) - LONG $0x01458d49 // leaq $1(%r13), %rax - LONG $0x24048949 // movq %rax, (%r12) - QUAD $0x00000008ec44c74b; BYTE $0x00 // movq $0, $8(%r12,%r13,8) - LONG $0xfffc6fe9; BYTE $0xff // jmp LBB18_61, $-913(%rip) - -LBB18_55: - LONG $0xfffd8149; WORD $0x000f; BYTE $0x00 // cmpq $4095, %r13 - LONG $0x01cb8f0f; WORD $0x0000 // jg LBB18_80, $459(%rip) - LONG $0x01458d49 // leaq $1(%r13), %rax - LONG $0x24048949 // movq %rax, (%r12) - QUAD $0x00000308ec44c74b; BYTE $0x00 // movq $3, $8(%r12,%r13,8) - LONG $0xfffc4ce9; BYTE $0xff // jmp LBB18_61, $-948(%rip) - -LBB18_57: - QUAD $0x00000002ec04c74b // movq $2, (%r12,%r13,8) - QUAD $0xffffffffc845c748 // movq $-1, $-56(%rbp) - WORD $0x8b4d; BYTE $0x28 // movq (%r8), %r13 - WORD $0x8948; BYTE $0xf7 // movq %rsi, %rdi - WORD $0x894c; BYTE $0xee // movq %r13, %rsi - LONG $0xc8558d48 // leaq $-56(%rbp), %rdx - LONG $0xb84d8b48 // movq $-72(%rbp), %rcx - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - LONG $0xffed13e8; BYTE $0xff // callq _advance_string, $-4845(%rip) - WORD $0x8949; BYTE $0xc7 // movq %rax, %r15 - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x018c880f; WORD $0x0000 // js LBB18_78, $396(%rip) - WORD $0x894c; BYTE $0x3b // movq %r15, (%rbx) - WORD $0x854d; BYTE $0xed // testq %r13, %r13 - LONG $0x01988e0f; WORD $0x0000 // jle LBB18_79, $408(%rip) - LONG $0x24048b49 // movq (%r12), %rax - LONG $0x0fff3d48; WORD $0x0000 // cmpq $4095, %rax - LONG $0x01648f0f; WORD $0x0000 // jg LBB18_80, $356(%rip) - WORD $0x8949; BYTE $0xd8 // movq %rbx, %r8 - LONG $0x01488d48 // leaq $1(%rax), %rcx - LONG $0x240c8949 // movq %rcx, (%r12) - QUAD $0x00000408c444c749; BYTE $0x00 // movq $4, $8(%r12,%rax,8) - LONG $0xc0758b48 // movq $-64(%rbp), %rsi - QUAD $0x000100002600bb49; WORD $0x0000 // movabsq $4294977024, %r11 - LONG $0xfffbd4e9; BYTE $0xff // jmp LBB18_61, $-1068(%rip) - -LBB18_62: - WORD $0x8b4d; BYTE $0x38 // movq (%r8), %r15 - WORD $0x014c; BYTE $0xff // addq %r15, %rdi - LONG $0xd0458b48 // movq $-48(%rbp), %rax - WORD $0x8b48; BYTE $0x30 // movq (%rax), %rsi - WORD $0x294c; BYTE $0xfe // subq %r15, %rsi - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - LONG $0x00060ce8; BYTE $0x00 // callq _do_skip_number, $1548(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x015e880f; WORD $0x0000 // js LBB18_84, $350(%rip) - WORD $0x014c; BYTE $0xf8 // addq %r15, %rax - WORD $0x8948; BYTE $0x03 // movq %rax, (%rbx) - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - WORD $0x8949; BYTE $0xd8 // movq %rbx, %r8 - LONG $0xc0758b48 // movq $-64(%rbp), %rsi - QUAD $0x000100002600bb49; WORD $0x0000 // movabsq $4294977024, %r11 - LONG $0xfb938f0f; WORD $0xffff // jg LBB18_61, $-1133(%rip) - LONG $0x00014ee9; BYTE $0x00 // jmp LBB18_91, $334(%rip) - -LBB18_64: - LONG $0x24048b49 // movq (%r12), %rax - LONG $0x0fff3d48; WORD $0x0000 // cmpq $4095, %rax - LONG $0x00e78f0f; WORD $0x0000 // jg LBB18_80, $231(%rip) - LONG $0x01488d48 // leaq $1(%rax), %rcx - LONG $0x240c8949 // movq %rcx, (%r12) - QUAD $0x00000508c444c749; BYTE $0x00 // movq $5, $8(%r12,%rax,8) - LONG $0xfffb68e9; BYTE $0xff // jmp LBB18_61, $-1176(%rip) - -LBB18_66: - WORD $0x8b49; BYTE $0x00 // movq (%r8), %rax - LONG $0xd04d8b48 // movq $-48(%rbp), %rcx - WORD $0x8b48; BYTE $0x09 // movq (%rcx), %rcx - LONG $0xfc518d48 // leaq $-4(%rcx), %rdx - WORD $0x3948; BYTE $0xd0 // cmpq %rdx, %rax - LONG $0x00e9870f; WORD $0x0000 // ja LBB18_88, $233(%rip) - WORD $0x0c8b; BYTE $0x07 // movl (%rdi,%rax), %ecx - LONG $0x6c61f981; WORD $0x6573 // cmpl $1702063201, %ecx - LONG $0x010a850f; WORD $0x0000 // jne LBB18_92, $266(%rip) - LONG $0x04488d48 // leaq $4(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xfb328f0f; WORD $0xffff // jg LBB18_61, $-1230(%rip) - LONG $0x0000cde9; BYTE $0x00 // jmp LBB18_83, $205(%rip) - -LBB18_69: - WORD $0x8b49; BYTE $0x00 // movq (%r8), %rax - LONG $0xd04d8b48 // movq $-48(%rbp), %rcx - WORD $0x8b48; BYTE $0x09 // movq (%rcx), %rcx - LONG $0xfd518d48 // leaq $-3(%rcx), %rdx - WORD $0x3948; BYTE $0xd0 // cmpq %rdx, %rax - LONG $0x00ae870f; WORD $0x0000 // ja LBB18_88, $174(%rip) - QUAD $0x6c6c756eff077c81 // cmpl $1819047278, $-1(%rdi,%rax) - LONG $0xfaef840f; WORD $0xffff // je LBB18_2, $-1297(%rip) - LONG $0x00011de9; BYTE $0x00 // jmp LBB18_97, $285(%rip) - -LBB18_71: - WORD $0x8b49; BYTE $0x00 // movq (%r8), %rax - LONG $0xd04d8b48 // movq $-48(%rbp), %rcx - WORD $0x8b48; BYTE $0x09 // movq (%rcx), %rcx - LONG $0xfd518d48 // leaq $-3(%rcx), %rdx - WORD $0x3948; BYTE $0xd0 // cmpq %rdx, %rax - LONG $0x0084870f; WORD $0x0000 // ja LBB18_88, $132(%rip) - QUAD $0x65757274ff077c81 // cmpl $1702195828, $-1(%rdi,%rax) - LONG $0xfac5840f; WORD $0xffff // je LBB18_2, $-1339(%rip) - LONG $0x000142e9; BYTE $0x00 // jmp LBB18_101, $322(%rip) - -LBB18_73: - LONG $0x24048b49 // movq (%r12), %rax - LONG $0x0fff3d48; WORD $0x0000 // cmpq $4095, %rax - LONG $0x00328f0f; WORD $0x0000 // jg LBB18_80, $50(%rip) - LONG $0x01488d48 // leaq $1(%rax), %rcx - LONG $0x240c8949 // movq %rcx, (%r12) - QUAD $0x00000608c444c749; BYTE $0x00 // movq $6, $8(%r12,%rax,8) - LONG $0xfffab3e9; BYTE $0xff // jmp LBB18_61, $-1357(%rip) - -LBB18_75: - WORD $0x8949; BYTE $0x18 // movq %rbx, (%r8) - -LBB18_76: - LONG $0xffc7c749; WORD $0xffff; BYTE $0xff // movq $-1, %r15 - -LBB18_77: - WORD $0x894c; BYTE $0xf8 // movq %r15, %rax - LONG $0x28c48348 // addq $40, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB18_80: - LONG $0xf9c7c749; WORD $0xffff; BYTE $0xff // movq $-7, %r15 - LONG $0xffffe2e9; BYTE $0xff // jmp LBB18_77, $-30(%rip) - -LBB18_78: - LONG $0xffff8349 // cmpq $-1, %r15 - LONG $0xc8458d48 // leaq $-56(%rbp), %rax - LONG $0x45440f48; BYTE $0xd0 // cmoveq $-48(%rbp), %rax - WORD $0x8b48; BYTE $0x00 // movq (%rax), %rax - WORD $0x8948; BYTE $0x03 // movq %rax, (%rbx) - LONG $0xffffcae9; BYTE $0xff // jmp LBB18_77, $-54(%rip) - -LBB18_79: - WORD $0xff49; BYTE $0xcd // decq %r13 - WORD $0x894d; BYTE $0xef // movq %r13, %r15 - LONG $0xffffbfe9; BYTE $0xff // jmp LBB18_77, $-65(%rip) - -LBB18_88: - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0xffffb7e9; BYTE $0xff // jmp LBB18_77, $-73(%rip) - -LBB18_83: - WORD $0xff48; BYTE $0xc8 // decq %rax - WORD $0x8949; BYTE $0xc7 // movq %rax, %r15 - LONG $0xfffface9; BYTE $0xff // jmp LBB18_77, $-84(%rip) - -LBB18_84: - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0149; BYTE $0xc7 // addq %rax, %r15 - WORD $0x894c; BYTE $0x3b // movq %r15, (%rbx) - -LBB18_85: - LONG $0xfec7c749; WORD $0xffff; BYTE $0xff // movq $-2, %r15 - LONG $0xffff97e9; BYTE $0xff // jmp LBB18_77, $-105(%rip) - -LBB18_91: - WORD $0xff49; BYTE $0xcf // decq %r15 - LONG $0xffff8fe9; BYTE $0xff // jmp LBB18_77, $-113(%rip) - -LBB18_92: - LONG $0xfec7c749; WORD $0xffff; BYTE $0xff // movq $-2, %r15 - WORD $0xf980; BYTE $0x61 // cmpb $97, %cl - LONG $0xff7f850f; WORD $0xffff // jne LBB18_77, $-129(%rip) - LONG $0x01488d48 // leaq $1(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0x01077c80; BYTE $0x6c // cmpb $108, $1(%rdi,%rax) - LONG $0xff6d850f; WORD $0xffff // jne LBB18_77, $-147(%rip) - LONG $0x02488d48 // leaq $2(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0x02077c80; BYTE $0x73 // cmpb $115, $2(%rdi,%rax) - LONG $0xff5b850f; WORD $0xffff // jne LBB18_77, $-165(%rip) - LONG $0x03488d48 // leaq $3(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0x03077c80; BYTE $0x65 // cmpb $101, $3(%rdi,%rax) - LONG $0xff49850f; WORD $0xffff // jne LBB18_77, $-183(%rip) - LONG $0x04c08348 // addq $4, %rax - WORD $0x8949; BYTE $0x00 // movq %rax, (%r8) - LONG $0xffff3de9; BYTE $0xff // jmp LBB18_77, $-195(%rip) - -LBB18_97: - LONG $0xff488d48 // leaq $-1(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0xfec7c749; WORD $0xffff; BYTE $0xff // movq $-2, %r15 - LONG $0xff077c80; BYTE $0x6e // cmpb $110, $-1(%rdi,%rax) - LONG $0xff24850f; WORD $0xffff // jne LBB18_77, $-220(%rip) - WORD $0x8949; BYTE $0x00 // movq %rax, (%r8) - LONG $0x75073c80 // cmpb $117, (%rdi,%rax) - LONG $0xff17850f; WORD $0xffff // jne LBB18_77, $-233(%rip) - LONG $0x01488d48 // leaq $1(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0x01077c80; BYTE $0x6c // cmpb $108, $1(%rdi,%rax) - LONG $0xff05850f; WORD $0xffff // jne LBB18_77, $-251(%rip) - LONG $0x02488d48 // leaq $2(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0x02077c80; BYTE $0x6c // cmpb $108, $2(%rdi,%rax) - LONG $0xfef3850f; WORD $0xffff // jne LBB18_77, $-269(%rip) - LONG $0x00004ae9; BYTE $0x00 // jmp LBB18_105, $74(%rip) - -LBB18_101: - LONG $0xff488d48 // leaq $-1(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0xfec7c749; WORD $0xffff; BYTE $0xff // movq $-2, %r15 - LONG $0xff077c80; BYTE $0x74 // cmpb $116, $-1(%rdi,%rax) - LONG $0xfed5850f; WORD $0xffff // jne LBB18_77, $-299(%rip) - WORD $0x8949; BYTE $0x00 // movq %rax, (%r8) - LONG $0x72073c80 // cmpb $114, (%rdi,%rax) - LONG $0xfec8850f; WORD $0xffff // jne LBB18_77, $-312(%rip) - LONG $0x01488d48 // leaq $1(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0x01077c80; BYTE $0x75 // cmpb $117, $1(%rdi,%rax) - LONG $0xfeb6850f; WORD $0xffff // jne LBB18_77, $-330(%rip) - LONG $0x02488d48 // leaq $2(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0x02077c80; BYTE $0x65 // cmpb $101, $2(%rdi,%rax) - LONG $0xfea4850f; WORD $0xffff // jne LBB18_77, $-348(%rip) - -LBB18_105: - LONG $0x03c08348 // addq $3, %rax - WORD $0x8949; BYTE $0x00 // movq %rax, (%r8) - LONG $0xfffe98e9; BYTE $0xff // jmp LBB18_77, $-360(%rip) - BYTE $0x90 // .p2align 2, 0x90 - - // .set L18_0_set_32, LBB18_32-LJTI18_0 - // .set L18_0_set_36, LBB18_36-LJTI18_0 - // .set L18_0_set_39, LBB18_39-LJTI18_0 - // .set L18_0_set_43, LBB18_43-LJTI18_0 - // .set L18_0_set_45, LBB18_45-LJTI18_0 - // .set L18_0_set_47, LBB18_47-LJTI18_0 -LJTI18_0: - LONG $0xfffffb0c // .long L18_0_set_32 - LONG $0xfffffb45 // .long L18_0_set_36 - LONG $0xfffffb6c // .long L18_0_set_39 - LONG $0xfffffbcc // .long L18_0_set_43 - LONG $0xfffffbe2 // .long L18_0_set_45 - LONG $0xfffffc00 // .long L18_0_set_47 - - // .set L18_1_set_77, LBB18_77-LJTI18_1 - // .set L18_1_set_85, LBB18_85-LJTI18_1 - // .set L18_1_set_41, LBB18_41-LJTI18_1 - // .set L18_1_set_62, LBB18_62-LJTI18_1 - // .set L18_1_set_52, LBB18_52-LJTI18_1 - // .set L18_1_set_64, LBB18_64-LJTI18_1 - // .set L18_1_set_66, LBB18_66-LJTI18_1 - // .set L18_1_set_69, LBB18_69-LJTI18_1 - // .set L18_1_set_71, LBB18_71-LJTI18_1 - // .set L18_1_set_73, LBB18_73-LJTI18_1 -LJTI18_1: - LONG $0xfffffe7f // .long L18_1_set_77 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffb65 // .long L18_1_set_41 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffd54 // .long L18_1_set_62 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffc32 // .long L18_1_set_52 - LONG $0xfffffc32 // .long L18_1_set_52 - LONG $0xfffffc32 // .long L18_1_set_52 - LONG $0xfffffc32 // .long L18_1_set_52 - LONG $0xfffffc32 // .long L18_1_set_52 - LONG $0xfffffc32 // .long L18_1_set_52 - LONG $0xfffffc32 // .long L18_1_set_52 - LONG $0xfffffc32 // .long L18_1_set_52 - LONG $0xfffffc32 // .long L18_1_set_52 - LONG $0xfffffc32 // .long L18_1_set_52 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffd9a // .long L18_1_set_64 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffdc0 // .long L18_1_set_66 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffdfb // .long L18_1_set_69 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffe25 // .long L18_1_set_71 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffedc // .long L18_1_set_85 - LONG $0xfffffe4f // .long L18_1_set_73 - QUAD $0x0000000000000000 // .p2align 4, 0x00 - -LCPI19_0: - QUAD $0x0000000000000001 // .quad 1 - QUAD $0x0000000000000006 // .quad 6 - - // .p2align 4, 0x90 -_skip_object: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - QUAD $0xffffffdb0528f8c5 // vmovaps $-37(%rip), %xmm0 /* LCPI19_0(%rip) */ - LONG $0x0011f8c5 // vmovups %xmm0, (%rax) - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - BYTE $0x5d // popq %rbp - LONG $0xfff69ee9; BYTE $0xff // jmp _fsm_exec, $-2402(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -_skip_string: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x10ec8348 // subq $16, %rsp - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - WORD $0x8949; BYTE $0xf6 // movq %rsi, %r14 - WORD $0x8949; BYTE $0xff // movq %rdi, %r15 - QUAD $0xffffffffd845c748 // movq $-1, $-40(%rbp) - WORD $0x8b48; BYTE $0x1e // movq (%rsi), %rbx - LONG $0xd8658d4c // leaq $-40(%rbp), %r12 - WORD $0x8948; BYTE $0xde // movq %rbx, %rsi - WORD $0x894c; BYTE $0xe2 // movq %r12, %rdx - LONG $0xffe7aee8; BYTE $0xff // callq _advance_string, $-6226(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x000e880f; WORD $0x0000 // js LBB20_1, $14(%rip) - WORD $0xff48; BYTE $0xcb // decq %rbx - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x8948; BYTE $0xd8 // movq %rbx, %rax - LONG $0x000010e9; BYTE $0x00 // jmp LBB20_3, $16(%rip) - -LBB20_1: - LONG $0x08c78349 // addq $8, %r15 - LONG $0xfff88348 // cmpq $-1, %rax - LONG $0xe7440f4d // cmoveq %r15, %r12 - LONG $0x240c8b49 // movq (%r12), %rcx - -LBB20_3: - WORD $0x8949; BYTE $0x0e // movq %rcx, (%r14) - LONG $0x10c48348 // addq $16, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_skip_negative: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - WORD $0x8949; BYTE $0xf6 // movq %rsi, %r14 - WORD $0x8b48; BYTE $0x1e // movq (%rsi), %rbx - WORD $0x8b48; BYTE $0x07 // movq (%rdi), %rax - WORD $0x0148; BYTE $0xd8 // addq %rbx, %rax - LONG $0x08778b48 // movq $8(%rdi), %rsi - WORD $0x2948; BYTE $0xde // subq %rbx, %rsi - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - LONG $0x0000aee8; BYTE $0x00 // callq _do_skip_number, $174(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x000e880f; WORD $0x0000 // js LBB21_1, $14(%rip) - WORD $0x0148; BYTE $0xd8 // addq %rbx, %rax - WORD $0x8949; BYTE $0x06 // movq %rax, (%r14) - WORD $0xff48; BYTE $0xcb // decq %rbx - LONG $0x000010e9; BYTE $0x00 // jmp LBB21_3, $16(%rip) - -LBB21_1: - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - WORD $0x8949; BYTE $0x1e // movq %rbx, (%r14) - LONG $0xfec3c748; WORD $0xffff; BYTE $0xff // movq $-2, %rbx - -LBB21_3: - WORD $0x8948; BYTE $0xd8 // movq %rbx, %rax - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x0000000000000000; LONG $0x00000000; WORD $0x0000; BYTE $0x00 // .p2align 4, 0x00 - -LCPI22_0: - QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' - -LCPI22_1: - QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' - -LCPI22_2: - QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' - -LCPI22_3: - QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' - -LCPI22_4: - QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' - -LCPI22_5: - QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' - -LCPI22_6: - QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE' - - // .p2align 4, 0x90 -_do_skip_number: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x0248840f; WORD $0x0000 // je LBB22_34, $584(%rip) - WORD $0x3f80; BYTE $0x30 // cmpb $48, (%rdi) - LONG $0x0033850f; WORD $0x0000 // jne LBB22_5, $51(%rip) - LONG $0x000001ba; BYTE $0x00 // movl $1, %edx - LONG $0x01fe8348 // cmpq $1, %rsi - LONG $0x0301840f; WORD $0x0000 // je LBB22_52, $769(%rip) - WORD $0x478a; BYTE $0x01 // movb $1(%rdi), %al - WORD $0xd204 // addb $-46, %al - WORD $0x373c // cmpb $55, %al - LONG $0x02f4870f; WORD $0x0000 // ja LBB22_52, $756(%rip) - WORD $0xb60f; BYTE $0xc0 // movzbl %al, %eax - QUAD $0x000000800001b948; WORD $0x0080 // movabsq $36028797027352577, %rcx - LONG $0xc1a30f48 // btq %rax, %rcx - LONG $0x02dd830f; WORD $0x0000 // jae LBB22_52, $733(%rip) - -LBB22_5: - LONG $0x10fe8348 // cmpq $16, %rsi - LONG $0x02fd820f; WORD $0x0000 // jb LBB22_57, $765(%rip) - LONG $0xffc1c749; WORD $0xffff; BYTE $0xff // movq $-1, %r9 - QUAD $0xffffff29056f79c5 // vmovdqa $-215(%rip), %xmm8 /* LCPI22_0(%rip) */ - QUAD $0xffffff310d6f79c5 // vmovdqa $-207(%rip), %xmm9 /* LCPI22_1(%rip) */ - QUAD $0xffffff39156f79c5 // vmovdqa $-199(%rip), %xmm10 /* LCPI22_2(%rip) */ - QUAD $0xffffff411d6f79c5 // vmovdqa $-191(%rip), %xmm11 /* LCPI22_3(%rip) */ - QUAD $0xffffff49256ff9c5 // vmovdqa $-183(%rip), %xmm4 /* LCPI22_4(%rip) */ - QUAD $0xffffff512d6ff9c5 // vmovdqa $-175(%rip), %xmm5 /* LCPI22_5(%rip) */ - QUAD $0xffffff59356ff9c5 // vmovdqa $-167(%rip), %xmm6 /* LCPI22_6(%rip) */ - LONG $0xffffbb41; WORD $0xffff // movl $4294967295, %r11d - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xffc0c749; WORD $0xffff; BYTE $0xff // movq $-1, %r8 - WORD $0x8949; BYTE $0xfa // movq %rdi, %r10 - WORD $0x9090 // .p2align 4, 0x90 - -LBB22_7: - LONG $0x6f7ac1c4; BYTE $0x3a // vmovdqu (%r10), %xmm7 - LONG $0x6441c1c4; BYTE $0xc0 // vpcmpgtb %xmm8, %xmm7, %xmm0 - LONG $0xcf64b1c5 // vpcmpgtb %xmm7, %xmm9, %xmm1 - LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 - LONG $0xcf74a9c5 // vpcmpeqb %xmm7, %xmm10, %xmm1 - LONG $0xd774a1c5 // vpcmpeqb %xmm7, %xmm11, %xmm2 - LONG $0xc9ebe9c5 // vpor %xmm1, %xmm2, %xmm1 - LONG $0xd4dbc1c5 // vpand %xmm4, %xmm7, %xmm2 - LONG $0xd674e9c5 // vpcmpeqb %xmm6, %xmm2, %xmm2 - LONG $0xfd74c1c5 // vpcmpeqb %xmm5, %xmm7, %xmm7 - LONG $0xdfebe9c5 // vpor %xmm7, %xmm2, %xmm3 - LONG $0xc0ebf1c5 // vpor %xmm0, %xmm1, %xmm0 - LONG $0xc0ebe1c5 // vpor %xmm0, %xmm3, %xmm0 - LONG $0xd7d7f9c5 // vpmovmskb %xmm7, %edx - LONG $0xfad779c5 // vpmovmskb %xmm2, %r15d - LONG $0xf1d779c5 // vpmovmskb %xmm1, %r14d - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - WORD $0x314c; BYTE $0xd9 // xorq %r11, %rcx - LONG $0xc9bc0f48 // bsfq %rcx, %rcx - WORD $0xf983; BYTE $0x10 // cmpl $16, %ecx - LONG $0x0014840f; WORD $0x0000 // je LBB22_9, $20(%rip) - LONG $0xffffffbb; BYTE $0xff // movl $-1, %ebx - WORD $0xe3d3 // shll %cl, %ebx - WORD $0xd3f7 // notl %ebx - WORD $0xda21 // andl %ebx, %edx - WORD $0x2141; BYTE $0xdf // andl %ebx, %r15d - WORD $0x2144; BYTE $0xf3 // andl %r14d, %ebx - WORD $0x8941; BYTE $0xde // movl %ebx, %r14d - -LBB22_9: - WORD $0x5a8d; BYTE $0xff // leal $-1(%rdx), %ebx - WORD $0xd321 // andl %edx, %ebx - LONG $0x01fa850f; WORD $0x0000 // jne LBB22_50, $506(%rip) - LONG $0xff5f8d41 // leal $-1(%r15), %ebx - WORD $0x2144; BYTE $0xfb // andl %r15d, %ebx - LONG $0x01ed850f; WORD $0x0000 // jne LBB22_50, $493(%rip) - LONG $0xff5e8d41 // leal $-1(%r14), %ebx - WORD $0x2144; BYTE $0xf3 // andl %r14d, %ebx - LONG $0x01e0850f; WORD $0x0000 // jne LBB22_50, $480(%rip) - WORD $0xd285 // testl %edx, %edx - LONG $0x0019840f; WORD $0x0000 // je LBB22_15, $25(%rip) - WORD $0x894c; BYTE $0xd3 // movq %r10, %rbx - WORD $0x2948; BYTE $0xfb // subq %rdi, %rbx - WORD $0xbc0f; BYTE $0xd2 // bsfl %edx, %edx - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - LONG $0xfff88349 // cmpq $-1, %r8 - LONG $0x01cb850f; WORD $0x0000 // jne LBB22_51, $459(%rip) - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - -LBB22_15: - WORD $0x8545; BYTE $0xff // testl %r15d, %r15d - LONG $0x001a840f; WORD $0x0000 // je LBB22_18, $26(%rip) - WORD $0x894c; BYTE $0xd3 // movq %r10, %rbx - WORD $0x2948; BYTE $0xfb // subq %rdi, %rbx - LONG $0xd7bc0f41 // bsfl %r15d, %edx - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - LONG $0xfff88348 // cmpq $-1, %rax - LONG $0x01a8850f; WORD $0x0000 // jne LBB22_51, $424(%rip) - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - -LBB22_18: - WORD $0x8545; BYTE $0xf6 // testl %r14d, %r14d - LONG $0x001a840f; WORD $0x0000 // je LBB22_21, $26(%rip) - WORD $0x894c; BYTE $0xd3 // movq %r10, %rbx - WORD $0x2948; BYTE $0xfb // subq %rdi, %rbx - LONG $0xd6bc0f41 // bsfl %r14d, %edx - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - LONG $0xfff98349 // cmpq $-1, %r9 - LONG $0x0185850f; WORD $0x0000 // jne LBB22_51, $389(%rip) - WORD $0x8949; BYTE $0xd1 // movq %rdx, %r9 - -LBB22_21: - WORD $0xf983; BYTE $0x10 // cmpl $16, %ecx - LONG $0x00b7850f; WORD $0x0000 // jne LBB22_35, $183(%rip) - LONG $0x10c28349 // addq $16, %r10 - LONG $0xf0c68348 // addq $-16, %rsi - LONG $0x0ffe8348 // cmpq $15, %rsi - LONG $0xfeef870f; WORD $0xffff // ja LBB22_7, $-273(%rip) - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x009f840f; WORD $0x0000 // je LBB22_36, $159(%rip) - -LBB22_24: - LONG $0x321c8d4d // leaq (%r10,%rsi), %r11 - LONG $0x9f1d8d48; WORD $0x0001; BYTE $0x00 // leaq $415(%rip), %rbx /* LJTI22_0(%rip) */ - LONG $0x000012e9; BYTE $0x00 // jmp LBB22_26, $18(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB22_25: - WORD $0x8949; BYTE $0xca // movq %rcx, %r10 - WORD $0xff48; BYTE $0xce // decq %rsi - LONG $0x0149840f; WORD $0x0000 // je LBB22_54, $329(%rip) - -LBB22_26: - LONG $0x12be0f41 // movsbl (%r10), %edx - WORD $0xc283; BYTE $0xd5 // addl $-43, %edx - WORD $0xfa83; BYTE $0x3a // cmpl $58, %edx - LONG $0x006d870f; WORD $0x0000 // ja LBB22_36, $109(%rip) - LONG $0x014a8d49 // leaq $1(%r10), %rcx - LONG $0x93146348 // movslq (%rbx,%rdx,4), %rdx - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - JMP DX - -LBB22_28: - WORD $0x8948; BYTE $0xca // movq %rcx, %rdx - WORD $0x2948; BYTE $0xfa // subq %rdi, %rdx - LONG $0xfff98349 // cmpq $-1, %r9 - LONG $0x0134850f; WORD $0x0000 // jne LBB22_58, $308(%rip) - WORD $0xff48; BYTE $0xca // decq %rdx - WORD $0x8949; BYTE $0xd1 // movq %rdx, %r9 - LONG $0xffffbce9; BYTE $0xff // jmp LBB22_25, $-68(%rip) - -LBB22_30: - WORD $0x8948; BYTE $0xca // movq %rcx, %rdx - WORD $0x2948; BYTE $0xfa // subq %rdi, %rdx - LONG $0xfff88348 // cmpq $-1, %rax - LONG $0x0119850f; WORD $0x0000 // jne LBB22_58, $281(%rip) - WORD $0xff48; BYTE $0xca // decq %rdx - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - LONG $0xffffa1e9; BYTE $0xff // jmp LBB22_25, $-95(%rip) - -LBB22_32: - WORD $0x8948; BYTE $0xca // movq %rcx, %rdx - WORD $0x2948; BYTE $0xfa // subq %rdi, %rdx - LONG $0xfff88349 // cmpq $-1, %r8 - LONG $0x00fe850f; WORD $0x0000 // jne LBB22_58, $254(%rip) - WORD $0xff48; BYTE $0xca // decq %rdx - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - LONG $0xffff86e9; BYTE $0xff // jmp LBB22_25, $-122(%rip) - -LBB22_34: - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0x0000c8e9; BYTE $0x00 // jmp LBB22_53, $200(%rip) - -LBB22_35: - WORD $0x0149; BYTE $0xca // addq %rcx, %r10 - -LBB22_36: - LONG $0xffc2c748; WORD $0xffff; BYTE $0xff // movq $-1, %rdx - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x00b2840f; WORD $0x0000 // je LBB22_52, $178(%rip) - -LBB22_37: - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x00a9840f; WORD $0x0000 // je LBB22_52, $169(%rip) - WORD $0x854d; BYTE $0xc0 // testq %r8, %r8 - LONG $0x00a0840f; WORD $0x0000 // je LBB22_52, $160(%rip) - WORD $0x2949; BYTE $0xfa // subq %rdi, %r10 - LONG $0xff4a8d49 // leaq $-1(%r10), %rcx - WORD $0x3948; BYTE $0xc8 // cmpq %rcx, %rax - LONG $0x0036840f; WORD $0x0000 // je LBB22_45, $54(%rip) - WORD $0x3949; BYTE $0xc8 // cmpq %rcx, %r8 - LONG $0x002d840f; WORD $0x0000 // je LBB22_45, $45(%rip) - WORD $0x3949; BYTE $0xc9 // cmpq %rcx, %r9 - LONG $0x0024840f; WORD $0x0000 // je LBB22_45, $36(%rip) - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x00298e0f; WORD $0x0000 // jle LBB22_46, $41(%rip) - LONG $0xff498d49 // leaq $-1(%r9), %rcx - WORD $0x3948; BYTE $0xc8 // cmpq %rcx, %rax - LONG $0x001c840f; WORD $0x0000 // je LBB22_46, $28(%rip) - WORD $0xf749; BYTE $0xd1 // notq %r9 - WORD $0x894c; BYTE $0xca // movq %r9, %rdx - WORD $0x894c; BYTE $0xc8 // movq %r9, %rax - LONG $0x00005de9; BYTE $0x00 // jmp LBB22_53, $93(%rip) - -LBB22_45: - WORD $0xf749; BYTE $0xda // negq %r10 - WORD $0x894c; BYTE $0xd2 // movq %r10, %rdx - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - LONG $0x00004fe9; BYTE $0x00 // jmp LBB22_53, $79(%rip) - -LBB22_46: - WORD $0x894c; BYTE $0xc1 // movq %r8, %rcx - WORD $0x0948; BYTE $0xc1 // orq %rax, %rcx - WORD $0x3949; BYTE $0xc0 // cmpq %rax, %r8 - LONG $0x00178c0f; WORD $0x0000 // jl LBB22_49, $23(%rip) - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x000e880f; WORD $0x0000 // js LBB22_49, $14(%rip) - WORD $0xf749; BYTE $0xd0 // notq %r8 - WORD $0x894c; BYTE $0xc2 // movq %r8, %rdx - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - LONG $0x000029e9; BYTE $0x00 // jmp LBB22_53, $41(%rip) - -LBB22_49: - LONG $0xff508d48 // leaq $-1(%rax), %rdx - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - WORD $0xf748; BYTE $0xd0 // notq %rax - LONG $0xc2480f49 // cmovsq %r10, %rax - WORD $0x3949; BYTE $0xd0 // cmpq %rdx, %r8 - LONG $0xc2450f49 // cmovneq %r10, %rax - LONG $0x00000fe9; BYTE $0x00 // jmp LBB22_53, $15(%rip) - -LBB22_50: - WORD $0x2949; BYTE $0xfa // subq %rdi, %r10 - WORD $0xbc0f; BYTE $0xd3 // bsfl %ebx, %edx - WORD $0x014c; BYTE $0xd2 // addq %r10, %rdx - -LBB22_51: - WORD $0xf748; BYTE $0xd2 // notq %rdx - -LBB22_52: - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - -LBB22_53: - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB22_54: - WORD $0x894d; BYTE $0xda // movq %r11, %r10 - LONG $0xffc2c748; WORD $0xffff; BYTE $0xff // movq $-1, %rdx - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xff31850f; WORD $0xffff // jne LBB22_37, $-207(%rip) - LONG $0xffffdee9; BYTE $0xff // jmp LBB22_52, $-34(%rip) - -LBB22_58: - WORD $0xf748; BYTE $0xda // negq %rdx - LONG $0xffffd6e9; BYTE $0xff // jmp LBB22_52, $-42(%rip) - -LBB22_57: - LONG $0xffc0c749; WORD $0xffff; BYTE $0xff // movq $-1, %r8 - WORD $0x8949; BYTE $0xfa // movq %rdi, %r10 - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xffc1c749; WORD $0xffff; BYTE $0xff // movq $-1, %r9 - LONG $0xfffe58e9; BYTE $0xff // jmp LBB22_24, $-424(%rip) - WORD $0x9090 // .p2align 2, 0x90 - - // .set L22_0_set_28, LBB22_28-LJTI22_0 - // .set L22_0_set_36, LBB22_36-LJTI22_0 - // .set L22_0_set_32, LBB22_32-LJTI22_0 - // .set L22_0_set_25, LBB22_25-LJTI22_0 - // .set L22_0_set_30, LBB22_30-LJTI22_0 -LJTI22_0: - LONG $0xfffffe95 // .long L22_0_set_28 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffe95 // .long L22_0_set_28 - LONG $0xfffffecb // .long L22_0_set_32 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffe6c // .long L22_0_set_25 - LONG $0xfffffe6c // .long L22_0_set_25 - LONG $0xfffffe6c // .long L22_0_set_25 - LONG $0xfffffe6c // .long L22_0_set_25 - LONG $0xfffffe6c // .long L22_0_set_25 - LONG $0xfffffe6c // .long L22_0_set_25 - LONG $0xfffffe6c // .long L22_0_set_25 - LONG $0xfffffe6c // .long L22_0_set_25 - LONG $0xfffffe6c // .long L22_0_set_25 - LONG $0xfffffe6c // .long L22_0_set_25 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffeb0 // .long L22_0_set_30 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffef5 // .long L22_0_set_36 - LONG $0xfffffeb0 // .long L22_0_set_30 - - // .p2align 4, 0x90 -_skip_positive: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax - WORD $0x8949; BYTE $0xf6 // movq %rsi, %r14 - WORD $0x8b4c; BYTE $0x3e // movq (%rsi), %r15 - LONG $0xff5f8d49 // leaq $-1(%r15), %rbx - WORD $0x8b48; BYTE $0x07 // movq (%rdi), %rax - WORD $0x0148; BYTE $0xd8 // addq %rbx, %rax - LONG $0x08778b48 // movq $8(%rdi), %rsi - WORD $0x2948; BYTE $0xde // subq %rbx, %rsi - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - LONG $0xfffb77e8; BYTE $0xff // callq _do_skip_number, $-1161(%rip) - LONG $0xff508d48 // leaq $-1(%rax), %rdx - LONG $0xfec1c748; WORD $0xffff; BYTE $0xff // movq $-2, %rcx - LONG $0xfec6c748; WORD $0xffff; BYTE $0xff // movq $-2, %rsi - WORD $0x2948; BYTE $0xc6 // subq %rax, %rsi - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xf2490f48 // cmovnsq %rdx, %rsi - LONG $0xcb490f48 // cmovnsq %rbx, %rcx - WORD $0x014c; BYTE $0xfe // addq %r15, %rsi - WORD $0x8949; BYTE $0x36 // movq %rsi, (%r14) - WORD $0x8948; BYTE $0xc8 // movq %rcx, %rax - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_skip_number: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - WORD $0x8949; BYTE $0xf6 // movq %rsi, %r14 - WORD $0x8b4c; BYTE $0x27 // movq (%rdi), %r12 - LONG $0x08778b48 // movq $8(%rdi), %rsi - WORD $0x8b4d; BYTE $0x3e // movq (%r14), %r15 - WORD $0xc031 // xorl %eax, %eax - LONG $0x3c3c8043; BYTE $0x2d // cmpb $45, (%r12,%r15) - LONG $0x3c1c8d4b // leaq (%r12,%r15), %rbx - WORD $0x940f; BYTE $0xc0 // sete %al - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - WORD $0x2948; BYTE $0xc6 // subq %rax, %rsi - LONG $0x003b840f; WORD $0x0000 // je LBB24_6, $59(%rip) - WORD $0x3949; BYTE $0xf7 // cmpq %rsi, %r15 - LONG $0x000c830f; WORD $0x0000 // jae LBB24_3, $12(%rip) - WORD $0x038a // movb (%rbx), %al - WORD $0xd004 // addb $-48, %al - WORD $0x093c // cmpb $9, %al - LONG $0x0038870f; WORD $0x0000 // ja LBB24_8, $56(%rip) - -LBB24_3: - WORD $0x8948; BYTE $0xdf // movq %rbx, %rdi - LONG $0xfffaf1e8; BYTE $0xff // callq _do_skip_number, $-1295(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0021880f; WORD $0x0000 // js LBB24_7, $33(%rip) - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - -LBB24_5: - WORD $0x294c; BYTE $0xe3 // subq %r12, %rbx - WORD $0x8949; BYTE $0x1e // movq %rbx, (%r14) - WORD $0x894c; BYTE $0xf8 // movq %r15, %rax - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB24_6: - LONG $0xffc7c749; WORD $0xffff; BYTE $0xff // movq $-1, %r15 - LONG $0xffffe2e9; BYTE $0xff // jmp LBB24_5, $-30(%rip) - -LBB24_7: - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - -LBB24_8: - LONG $0xfec7c749; WORD $0xffff; BYTE $0xff // movq $-2, %r15 - LONG $0xffffd0e9; BYTE $0xff // jmp LBB24_5, $-48(%rip) - LONG $0x00000000; BYTE $0x00 // .p2align 4, 0x00 - -LCPI25_0: - LONG $0x00000001 // .long 1 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - - // .p2align 4, 0x90 -_skip_one: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - QUAD $0xffffffdb0528f8c5 // vmovaps $-37(%rip), %xmm0 /* LCPI25_0(%rip) */ - LONG $0x0011f8c5 // vmovups %xmm0, (%rax) - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - BYTE $0x5d // popq %rbp - LONG $0xffefcee9; BYTE $0xff // jmp _fsm_exec, $-4146(%rip) - QUAD $0x0000000000000000; LONG $0x00000000; WORD $0x0000 // .p2align 4, 0x00 - -LCPI26_0: - LONG $0x00000001 // .long 1 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - - // .p2align 4, 0x90 -_validate_one: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - QUAD $0xffffffdb0528f8c5 // vmovaps $-37(%rip), %xmm0 /* LCPI26_0(%rip) */ - LONG $0x0011f8c5 // vmovups %xmm0, (%rax) - LONG $0x000020b9; BYTE $0x00 // movl $32, %ecx - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - BYTE $0x5d // popq %rbp - LONG $0xffef89e9; BYTE $0xff // jmp _fsm_exec, $-4215(%rip) - QUAD $0x0000000000000000; BYTE $0x00 // .p2align 4, 0x00 - -LCPI27_0: - QUAD $0x2c2c2c2c2c2c2c2c; QUAD $0x2c2c2c2c2c2c2c2c // .space 16, ',,,,,,,,,,,,,,,,' - -LCPI27_1: - QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' - -LCPI27_2: - QUAD $0x5d5d5d5d5d5d5d5d; QUAD $0x5d5d5d5d5d5d5d5d // .space 16, ']]]]]]]]]]]]]]]]' - -LCPI27_3: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - -LCPI27_4: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - -LCPI27_5: - QUAD $0x7b7b7b7b7b7b7b7b; QUAD $0x7b7b7b7b7b7b7b7b // .space 16, '{{{{{{{{{{{{{{{{' - -LCPI27_6: - QUAD $0x7d7d7d7d7d7d7d7d; QUAD $0x7d7d7d7d7d7d7d7d // .space 16, '}}}}}}}}}}}}}}}}' - -LCPI27_7: - QUAD $0x5b5b5b5b5b5b5b5b; QUAD $0x5b5b5b5b5b5b5b5b // .space 16, '[[[[[[[[[[[[[[[[' - - // .p2align 4, 0x90 -_skip_one_fast: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0xe0e48348 // andq $-32, %rsp - LONG $0x80ec8148; WORD $0x0000; BYTE $0x00 // subq $128, %rsp - WORD $0x8b4c; BYTE $0x37 // movq (%rdi), %r14 - LONG $0x08478b4c // movq $8(%rdi), %r8 - WORD $0x8b48; BYTE $0x16 // movq (%rsi), %rdx - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0x294c; BYTE $0xc0 // subq %r8, %rax - LONG $0x002a830f; WORD $0x0000 // jae LBB27_5, $42(%rip) - LONG $0x160c8a41 // movb (%r14,%rdx), %cl - WORD $0xf980; BYTE $0x0d // cmpb $13, %cl - LONG $0x001d840f; WORD $0x0000 // je LBB27_5, $29(%rip) - WORD $0xf980; BYTE $0x20 // cmpb $32, %cl - LONG $0x0014840f; WORD $0x0000 // je LBB27_5, $20(%rip) - WORD $0xc180; BYTE $0xf7 // addb $-9, %cl - WORD $0xf980; BYTE $0x01 // cmpb $1, %cl - LONG $0x0008860f; WORD $0x0000 // jbe LBB27_5, $8(%rip) - WORD $0x8949; BYTE $0xd3 // movq %rdx, %r11 - LONG $0x000137e9; BYTE $0x00 // jmp LBB27_27, $311(%rip) - -LBB27_5: - LONG $0x015a8d4c // leaq $1(%rdx), %r11 - WORD $0x394d; BYTE $0xc3 // cmpq %r8, %r11 - LONG $0x0022830f; WORD $0x0000 // jae LBB27_9, $34(%rip) - LONG $0x1e0c8a43 // movb (%r14,%r11), %cl - WORD $0xf980; BYTE $0x0d // cmpb $13, %cl - LONG $0x0015840f; WORD $0x0000 // je LBB27_9, $21(%rip) - WORD $0xf980; BYTE $0x20 // cmpb $32, %cl - LONG $0x000c840f; WORD $0x0000 // je LBB27_9, $12(%rip) - WORD $0xc180; BYTE $0xf7 // addb $-9, %cl - WORD $0xf980; BYTE $0x01 // cmpb $1, %cl - LONG $0x0108870f; WORD $0x0000 // ja LBB27_27, $264(%rip) - -LBB27_9: - LONG $0x025a8d4c // leaq $2(%rdx), %r11 - WORD $0x394d; BYTE $0xc3 // cmpq %r8, %r11 - LONG $0x0022830f; WORD $0x0000 // jae LBB27_13, $34(%rip) - LONG $0x1e0c8a43 // movb (%r14,%r11), %cl - WORD $0xf980; BYTE $0x0d // cmpb $13, %cl - LONG $0x0015840f; WORD $0x0000 // je LBB27_13, $21(%rip) - WORD $0xf980; BYTE $0x20 // cmpb $32, %cl - LONG $0x000c840f; WORD $0x0000 // je LBB27_13, $12(%rip) - WORD $0xc180; BYTE $0xf7 // addb $-9, %cl - WORD $0xf980; BYTE $0x01 // cmpb $1, %cl - LONG $0x00d9870f; WORD $0x0000 // ja LBB27_27, $217(%rip) - -LBB27_13: - LONG $0x035a8d4c // leaq $3(%rdx), %r11 - WORD $0x394d; BYTE $0xc3 // cmpq %r8, %r11 - LONG $0x0022830f; WORD $0x0000 // jae LBB27_17, $34(%rip) - LONG $0x1e0c8a43 // movb (%r14,%r11), %cl - WORD $0xf980; BYTE $0x0d // cmpb $13, %cl - LONG $0x0015840f; WORD $0x0000 // je LBB27_17, $21(%rip) - WORD $0xf980; BYTE $0x20 // cmpb $32, %cl - LONG $0x000c840f; WORD $0x0000 // je LBB27_17, $12(%rip) - WORD $0xc180; BYTE $0xf7 // addb $-9, %cl - WORD $0xf980; BYTE $0x01 // cmpb $1, %cl - LONG $0x00aa870f; WORD $0x0000 // ja LBB27_27, $170(%rip) - -LBB27_17: - LONG $0x044a8d48 // leaq $4(%rdx), %rcx - WORD $0x3949; BYTE $0xc8 // cmpq %rcx, %r8 - LONG $0x0057860f; WORD $0x0000 // jbe LBB27_23, $87(%rip) - WORD $0x3949; BYTE $0xc8 // cmpq %rcx, %r8 - LONG $0x005d840f; WORD $0x0000 // je LBB27_24, $93(%rip) - LONG $0x060c8d4b // leaq (%r14,%r8), %rcx - LONG $0x04c08348 // addq $4, %rax - LONG $0x325c8d4e; BYTE $0x05 // leaq $5(%rdx,%r14), %r11 - QUAD $0x000100002600ba48; WORD $0x0000 // movabsq $4294977024, %rdx - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB27_20: - LONG $0x5bbe0f41; BYTE $0xff // movsbl $-1(%r11), %ebx - WORD $0xfb83; BYTE $0x20 // cmpl $32, %ebx - LONG $0x0048870f; WORD $0x0000 // ja LBB27_26, $72(%rip) - LONG $0xdaa30f48 // btq %rbx, %rdx - LONG $0x003e830f; WORD $0x0000 // jae LBB27_26, $62(%rip) - WORD $0xff49; BYTE $0xc3 // incq %r11 - WORD $0xff48; BYTE $0xc0 // incq %rax - LONG $0xffdc850f; WORD $0xffff // jne LBB27_20, $-36(%rip) - LONG $0x000012e9; BYTE $0x00 // jmp LBB27_25, $18(%rip) - -LBB27_23: - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0x000120e9; BYTE $0x00 // jmp LBB27_44, $288(%rip) - -LBB27_24: - WORD $0x014c; BYTE $0xf1 // addq %r14, %rcx - -LBB27_25: - WORD $0x294c; BYTE $0xf1 // subq %r14, %rcx - WORD $0x8949; BYTE $0xcb // movq %rcx, %r11 - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x394d; BYTE $0xc3 // cmpq %r8, %r11 - LONG $0x001e820f; WORD $0x0000 // jb LBB27_27, $30(%rip) - LONG $0x000102e9; BYTE $0x00 // jmp LBB27_44, $258(%rip) - -LBB27_26: - WORD $0x894c; BYTE $0xf0 // movq %r14, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0149; BYTE $0xc3 // addq %rax, %r11 - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x394d; BYTE $0xc3 // cmpq %r8, %r11 - LONG $0x00e9830f; WORD $0x0000 // jae LBB27_44, $233(%rip) - -LBB27_27: - LONG $0x015b8d49 // leaq $1(%r11), %rbx - WORD $0x8948; BYTE $0x1e // movq %rbx, (%rsi) - LONG $0x0cbe0f43; BYTE $0x1e // movsbl (%r14,%r11), %ecx - WORD $0xf983; BYTE $0x7b // cmpl $123, %ecx - LONG $0x00f9870f; WORD $0x0000 // ja LBB27_46, $249(%rip) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xf6158d48; WORD $0x0009; BYTE $0x00 // leaq $2550(%rip), %rdx /* LJTI27_0(%rip) */ - LONG $0x8a0c6348 // movslq (%rdx,%rcx,4), %rcx - WORD $0x0148; BYTE $0xd1 // addq %rdx, %rcx - JMP CX - -LBB27_29: - LONG $0x08478b48 // movq $8(%rdi), %rax - WORD $0x2948; BYTE $0xd8 // subq %rbx, %rax - WORD $0x014c; BYTE $0xf3 // addq %r14, %rbx - LONG $0x10f88348 // cmpq $16, %rax - LONG $0x0054820f; WORD $0x0000 // jb LBB27_33, $84(%rip) - QUAD $0xfffffda9056ff9c5 // vmovdqa $-599(%rip), %xmm0 /* LCPI27_0(%rip) */ - QUAD $0xfffffdb10d6ff9c5 // vmovdqa $-591(%rip), %xmm1 /* LCPI27_1(%rip) */ - QUAD $0xfffffdb9156ff9c5 // vmovdqa $-583(%rip), %xmm2 /* LCPI27_2(%rip) */ - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB27_31: - LONG $0x1b6ffac5 // vmovdqu (%rbx), %xmm3 - LONG $0xe074e1c5 // vpcmpeqb %xmm0, %xmm3, %xmm4 - LONG $0xd9dbe1c5 // vpand %xmm1, %xmm3, %xmm3 - LONG $0xda74e1c5 // vpcmpeqb %xmm2, %xmm3, %xmm3 - LONG $0xdcebe1c5 // vpor %xmm4, %xmm3, %xmm3 - LONG $0xcbd7f9c5 // vpmovmskb %xmm3, %ecx - WORD $0x8566; BYTE $0xc9 // testw %cx, %cx - LONG $0x0054850f; WORD $0x0000 // jne LBB27_41, $84(%rip) - LONG $0x10c38348 // addq $16, %rbx - LONG $0xf0c08348 // addq $-16, %rax - LONG $0x0ff88348 // cmpq $15, %rax - LONG $0xffcd870f; WORD $0xffff // ja LBB27_31, $-51(%rip) - -LBB27_33: - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0031840f; WORD $0x0000 // je LBB27_40, $49(%rip) - LONG $0x030c8d48 // leaq (%rbx,%rax), %rcx - -LBB27_35: - WORD $0xb60f; BYTE $0x13 // movzbl (%rbx), %edx - WORD $0xfa80; BYTE $0x2c // cmpb $44, %dl - LONG $0x0021840f; WORD $0x0000 // je LBB27_40, $33(%rip) - WORD $0xfa80; BYTE $0x7d // cmpb $125, %dl - LONG $0x0018840f; WORD $0x0000 // je LBB27_40, $24(%rip) - WORD $0xfa80; BYTE $0x5d // cmpb $93, %dl - LONG $0x000f840f; WORD $0x0000 // je LBB27_40, $15(%rip) - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0xffd6850f; WORD $0xffff // jne LBB27_35, $-42(%rip) - WORD $0x8948; BYTE $0xcb // movq %rcx, %rbx - -LBB27_40: - WORD $0x294c; BYTE $0xf3 // subq %r14, %rbx - LONG $0x00000de9; BYTE $0x00 // jmp LBB27_42, $13(%rip) - -LBB27_41: - WORD $0xb70f; BYTE $0xc1 // movzwl %cx, %eax - LONG $0xc0bc0f48 // bsfq %rax, %rax - WORD $0x294c; BYTE $0xf3 // subq %r14, %rbx - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - -LBB27_42: - WORD $0x8948; BYTE $0x1e // movq %rbx, (%rsi) - -LBB27_43: - WORD $0x894c; BYTE $0xd8 // movq %r11, %rax - -LBB27_44: - LONG $0xd8658d48 // leaq $-40(%rbp), %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB27_45: - LONG $0x044b8d49 // leaq $4(%r11), %rcx - LONG $0x084f3b48 // cmpq $8(%rdi), %rcx - LONG $0xffe0870f; WORD $0xffff // ja LBB27_44, $-32(%rip) - LONG $0x00049ce9; BYTE $0x00 // jmp LBB27_82, $1180(%rip) - -LBB27_46: - WORD $0x894c; BYTE $0x1e // movq %r11, (%rsi) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0xffffcce9; BYTE $0xff // jmp LBB27_44, $-52(%rip) - -LBB27_47: - LONG $0x08478b4c // movq $8(%rdi), %r8 - WORD $0x894d; BYTE $0xc7 // movq %r8, %r15 - WORD $0x2949; BYTE $0xdf // subq %rbx, %r15 - LONG $0x20ff8349 // cmpq $32, %r15 - LONG $0x08b18c0f; WORD $0x0000 // jl LBB27_116, $2225(%rip) - LONG $0xffffb941; WORD $0xffff // movl $4294967295, %r9d - LONG $0x1e148d4f // leaq (%r14,%r11), %r10 - WORD $0x294d; BYTE $0xd8 // subq %r11, %r8 - LONG $0x001fbd41; WORD $0x0000 // movl $31, %r13d - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - QUAD $0xfffffcd2056ff9c5 // vmovdqa $-814(%rip), %xmm0 /* LCPI27_3(%rip) */ - QUAD $0xfffffcda0d6ff9c5 // vmovdqa $-806(%rip), %xmm1 /* LCPI27_4(%rip) */ - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - LONG $0x000024e9; BYTE $0x00 // jmp LBB27_49, $36(%rip) - WORD $0x9090 // .p2align 4, 0x90 - -LBB27_51: - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - WORD $0xc985 // testl %ecx, %ecx - LONG $0x009e850f; WORD $0x0000 // jne LBB27_109, $158(%rip) - -LBB27_52: - LONG $0x20c78349 // addq $32, %r15 - LONG $0x284c8d4b; BYTE $0xe0 // leaq $-32(%r8,%r13), %rcx - LONG $0xe0c58349 // addq $-32, %r13 - LONG $0x3ff98348 // cmpq $63, %rcx - LONG $0x07dc8e0f; WORD $0x0000 // jle LBB27_53, $2012(%rip) - -LBB27_49: - LONG $0x6f7a81c4; WORD $0x3a54; BYTE $0x01 // vmovdqu $1(%r10,%r15), %xmm2 - LONG $0x6f7a81c4; WORD $0x3a5c; BYTE $0x11 // vmovdqu $17(%r10,%r15), %xmm3 - LONG $0xe074e9c5 // vpcmpeqb %xmm0, %xmm2, %xmm4 - LONG $0xfcd7f9c5 // vpmovmskb %xmm4, %edi - LONG $0xe074e1c5 // vpcmpeqb %xmm0, %xmm3, %xmm4 - LONG $0xccd7f9c5 // vpmovmskb %xmm4, %ecx - LONG $0x10e1c148 // shlq $16, %rcx - WORD $0x0948; BYTE $0xf9 // orq %rdi, %rcx - LONG $0xd174e9c5 // vpcmpeqb %xmm1, %xmm2, %xmm2 - LONG $0xdad7f9c5 // vpmovmskb %xmm2, %ebx - LONG $0xd174e1c5 // vpcmpeqb %xmm1, %xmm3, %xmm2 - LONG $0xfad7f9c5 // vpmovmskb %xmm2, %edi - LONG $0x10e7c148 // shlq $16, %rdi - WORD $0x0948; BYTE $0xdf // orq %rbx, %rdi - WORD $0x8948; BYTE $0xfb // movq %rdi, %rbx - WORD $0x094c; BYTE $0xe3 // orq %r12, %rbx - LONG $0xff96840f; WORD $0xffff // je LBB27_51, $-106(%rip) - WORD $0x8944; BYTE $0xe3 // movl %r12d, %ebx - WORD $0x3144; BYTE $0xcb // xorl %r9d, %ebx - WORD $0xdf21 // andl %ebx, %edi - WORD $0x1c8d; BYTE $0x3f // leal (%rdi,%rdi), %ebx - WORD $0x0944; BYTE $0xe3 // orl %r12d, %ebx - LONG $0xab918d41; WORD $0xaaaa; BYTE $0xaa // leal $-1431655765(%r9), %edx - WORD $0xda31 // xorl %ebx, %edx - WORD $0xfa21 // andl %edi, %edx - LONG $0xaaaae281; WORD $0xaaaa // andl $-1431655766, %edx - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - WORD $0xfa01 // addl %edi, %edx - LONG $0xc4920f41 // setb %r12b - WORD $0xd201 // addl %edx, %edx - LONG $0x5555f281; WORD $0x5555 // xorl $1431655765, %edx - WORD $0xda21 // andl %ebx, %edx - WORD $0x3144; BYTE $0xca // xorl %r9d, %edx - WORD $0xd121 // andl %edx, %ecx - WORD $0xc985 // testl %ecx, %ecx - LONG $0xff62840f; WORD $0xffff // je LBB27_52, $-158(%rip) - -LBB27_109: - LONG $0xc1bc0f48 // bsfq %rcx, %rax - WORD $0x0149; BYTE $0xc2 // addq %rax, %r10 - WORD $0x014d; BYTE $0xfa // addq %r15, %r10 - WORD $0x294d; BYTE $0xf2 // subq %r14, %r10 - LONG $0x02c28349 // addq $2, %r10 - WORD $0x894c; BYTE $0x16 // movq %r10, (%rsi) - LONG $0xfffec3e9; BYTE $0xff // jmp LBB27_43, $-317(%rip) - -LBB27_56: - LONG $0x084f8b48 // movq $8(%rdi), %rcx - WORD $0x2948; BYTE $0xd9 // subq %rbx, %rcx - WORD $0x0149; BYTE $0xde // addq %rbx, %r14 - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - QUAD $0xfffffbf9156f79c5 // vmovdqa $-1031(%rip), %xmm10 /* LCPI27_4(%rip) */ - QUAD $0xfffffbe10d6ff9c5 // vmovdqa $-1055(%rip), %xmm1 /* LCPI27_3(%rip) */ - LONG $0x763141c4; BYTE $0xc9 // vpcmpeqd %xmm9, %xmm9, %xmm9 - QUAD $0xfffffc141d6ff9c5 // vmovdqa $-1004(%rip), %xmm3 /* LCPI27_7(%rip) */ - QUAD $0xfffffbbc256ff9c5 // vmovdqa $-1092(%rip), %xmm4 /* LCPI27_2(%rip) */ - LONG $0x573841c4; BYTE $0xc0 // vxorps %xmm8, %xmm8, %xmm8 - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - WORD $0x3145; BYTE $0xc0 // xorl %r8d, %r8d - WORD $0xdb31 // xorl %ebx, %ebx - LONG $0x40f98348 // cmpq $64, %rcx - LONG $0x244c8948; BYTE $0x08 // movq %rcx, $8(%rsp) - LONG $0x2444894c; BYTE $0x18 // movq %r8, $24(%rsp) - LONG $0x01338d0f; WORD $0x0000 // jge LBB27_57, $307(%rip) - -LBB27_66: - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x076b8e0f; WORD $0x0000 // jle LBB27_117, $1899(%rip) - LONG $0x44297cc5; WORD $0x4024 // vmovaps %ymm8, $64(%rsp) - LONG $0x44297cc5; WORD $0x2024 // vmovaps %ymm8, $32(%rsp) - WORD $0x8944; BYTE $0xf1 // movl %r14d, %ecx - LONG $0x0fffe181; WORD $0x0000 // andl $4095, %ecx - LONG $0x0fc1f981; WORD $0x0000 // cmpl $4033, %ecx - LONG $0x0109820f; WORD $0x0000 // jb LBB27_57, $265(%rip) - LONG $0x247c8348; WORD $0x2008 // cmpq $32, $8(%rsp) - LONG $0x002e820f; WORD $0x0000 // jb LBB27_70, $46(%rip) - LONG $0x1078c1c4; BYTE $0x06 // vmovups (%r14), %xmm0 - LONG $0x4429f8c5; WORD $0x2024 // vmovaps %xmm0, $32(%rsp) - LONG $0x6f7ac1c4; WORD $0x1046 // vmovdqu $16(%r14), %xmm0 - LONG $0x447ff9c5; WORD $0x3024 // vmovdqa %xmm0, $48(%rsp) - LONG $0x20c68349 // addq $32, %r14 - LONG $0x244c8b48; BYTE $0x08 // movq $8(%rsp), %rcx - LONG $0xe0518d48 // leaq $-32(%rcx), %rdx - LONG $0x24448d4c; BYTE $0x40 // leaq $64(%rsp), %r8 - LONG $0x00000ae9; BYTE $0x00 // jmp LBB27_71, $10(%rip) - -LBB27_70: - LONG $0x24448d4c; BYTE $0x20 // leaq $32(%rsp), %r8 - LONG $0x24548b48; BYTE $0x08 // movq $8(%rsp), %rdx - -LBB27_71: - LONG $0x10fa8348 // cmpq $16, %rdx - LONG $0x005c820f; WORD $0x0000 // jb LBB27_72, $92(%rip) - LONG $0x6f7ac1c4; BYTE $0x06 // vmovdqu (%r14), %xmm0 - LONG $0x7f7ac1c4; BYTE $0x00 // vmovdqu %xmm0, (%r8) - LONG $0x10c68349 // addq $16, %r14 - LONG $0x10c08349 // addq $16, %r8 - LONG $0xf0c28348 // addq $-16, %rdx - LONG $0x08fa8348 // cmpq $8, %rdx - LONG $0x0046830f; WORD $0x0000 // jae LBB27_77, $70(%rip) - -LBB27_73: - LONG $0x04fa8348 // cmpq $4, %rdx - LONG $0x00588c0f; WORD $0x0000 // jl LBB27_74, $88(%rip) - -LBB27_78: - WORD $0x8b41; BYTE $0x0e // movl (%r14), %ecx - WORD $0x8941; BYTE $0x08 // movl %ecx, (%r8) - LONG $0x04c68349 // addq $4, %r14 - LONG $0x04c08349 // addq $4, %r8 - LONG $0xfcc28348 // addq $-4, %rdx - LONG $0x02fa8348 // cmpq $2, %rdx - LONG $0x0046830f; WORD $0x0000 // jae LBB27_79, $70(%rip) - -LBB27_75: - WORD $0x894c; BYTE $0xf1 // movq %r14, %rcx - LONG $0x24748d4c; BYTE $0x20 // leaq $32(%rsp), %r14 - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x005a850f; WORD $0x0000 // jne LBB27_80, $90(%rip) - LONG $0x00005fe9; BYTE $0x00 // jmp LBB27_57, $95(%rip) - -LBB27_72: - LONG $0x08fa8348 // cmpq $8, %rdx - LONG $0xffba820f; WORD $0xffff // jb LBB27_73, $-70(%rip) - -LBB27_77: - WORD $0x8b49; BYTE $0x0e // movq (%r14), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0x08c68349 // addq $8, %r14 - LONG $0x08c08349 // addq $8, %r8 - LONG $0xf8c28348 // addq $-8, %rdx - LONG $0x04fa8348 // cmpq $4, %rdx - LONG $0xffa88d0f; WORD $0xffff // jge LBB27_78, $-88(%rip) - -LBB27_74: - LONG $0x02fa8348 // cmpq $2, %rdx - LONG $0xffba820f; WORD $0xffff // jb LBB27_75, $-70(%rip) - -LBB27_79: - LONG $0x0eb70f41 // movzwl (%r14), %ecx - LONG $0x08894166 // movw %cx, (%r8) - LONG $0x02c68349 // addq $2, %r14 - LONG $0x02c08349 // addq $2, %r8 - LONG $0xfec28348 // addq $-2, %rdx - WORD $0x894c; BYTE $0xf1 // movq %r14, %rcx - LONG $0x24748d4c; BYTE $0x20 // leaq $32(%rsp), %r14 - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x000a840f; WORD $0x0000 // je LBB27_57, $10(%rip) - -LBB27_80: - WORD $0x098a // movb (%rcx), %cl - WORD $0x8841; BYTE $0x08 // movb %cl, (%r8) - LONG $0x24748d4c; BYTE $0x20 // leaq $32(%rsp), %r14 - -LBB27_57: - LONG $0x6f7ac1c4; BYTE $0x16 // vmovdqu (%r14), %xmm2 - LONG $0x6f7ac1c4; WORD $0x106e // vmovdqu $16(%r14), %xmm5 - LONG $0x6f7ac1c4; WORD $0x207e // vmovdqu $32(%r14), %xmm7 - LONG $0x6f7ac1c4; WORD $0x3076 // vmovdqu $48(%r14), %xmm6 - LONG $0xc274a9c5 // vpcmpeqb %xmm2, %xmm10, %xmm0 - LONG $0xd0d7f9c5 // vpmovmskb %xmm0, %edx - LONG $0xc574a9c5 // vpcmpeqb %xmm5, %xmm10, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0xc774a9c5 // vpcmpeqb %xmm7, %xmm10, %xmm0 - LONG $0xe8d779c5 // vpmovmskb %xmm0, %r13d - LONG $0xc674a9c5 // vpcmpeqb %xmm6, %xmm10, %xmm0 - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - LONG $0x30e1c149 // shlq $48, %r9 - LONG $0x20e5c149 // shlq $32, %r13 - LONG $0x10e1c148 // shlq $16, %rcx - WORD $0x0948; BYTE $0xca // orq %rcx, %rdx - WORD $0x094c; BYTE $0xea // orq %r13, %rdx - WORD $0x094c; BYTE $0xca // orq %r9, %rdx - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - WORD $0x094c; BYTE $0xf9 // orq %r15, %rcx - LONG $0x004e840f; WORD $0x0000 // je LBB27_59, $78(%rip) - WORD $0x894d; BYTE $0xf8 // movq %r15, %r8 - WORD $0xf749; BYTE $0xd0 // notq %r8 - WORD $0x2149; BYTE $0xd0 // andq %rdx, %r8 - LONG $0x000c8d4f // leaq (%r8,%r8), %r9 - WORD $0x094d; BYTE $0xf9 // orq %r15, %r9 - WORD $0x894d; BYTE $0xcc // movq %r9, %r12 - QUAD $0xaaaaaaaaaaaab948; WORD $0xaaaa // movabsq $-6148914691236517206, %rcx - WORD $0x3149; BYTE $0xcc // xorq %rcx, %r12 - WORD $0x2148; BYTE $0xca // andq %rcx, %rdx - WORD $0x214c; BYTE $0xe2 // andq %r12, %rdx - WORD $0xc931 // xorl %ecx, %ecx - WORD $0x014c; BYTE $0xc2 // addq %r8, %rdx - WORD $0x920f; BYTE $0xc1 // setb %cl - LONG $0x244c8948; BYTE $0x10 // movq %rcx, $16(%rsp) - WORD $0x0148; BYTE $0xd2 // addq %rdx, %rdx - QUAD $0x555555555555b948; WORD $0x5555 // movabsq $6148914691236517205, %rcx - WORD $0x3148; BYTE $0xca // xorq %rcx, %rdx - WORD $0x214c; BYTE $0xca // andq %r9, %rdx - WORD $0xf748; BYTE $0xd2 // notq %rdx - LONG $0x00000ee9; BYTE $0x00 // jmp LBB27_60, $14(%rip) - -LBB27_59: - LONG $0xffc2c748; WORD $0xffff; BYTE $0xff // movq $-1, %rdx - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x244c8948; BYTE $0x10 // movq %rcx, $16(%rsp) - -LBB27_60: - LONG $0xc174d1c5 // vpcmpeqb %xmm1, %xmm5, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0x10e1c148 // shlq $16, %rcx - LONG $0xc174e9c5 // vpcmpeqb %xmm1, %xmm2, %xmm0 - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - WORD $0x0949; BYTE $0xc9 // orq %rcx, %r9 - LONG $0xc174c1c5 // vpcmpeqb %xmm1, %xmm7, %xmm0 - LONG $0xe8d779c5 // vpmovmskb %xmm0, %r13d - LONG $0x20e5c149 // shlq $32, %r13 - WORD $0x094d; BYTE $0xcd // orq %r9, %r13 - LONG $0xc174c9c5 // vpcmpeqb %xmm1, %xmm6, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0x30e1c148 // shlq $48, %rcx - WORD $0x094c; BYTE $0xe9 // orq %r13, %rcx - WORD $0x2148; BYTE $0xd1 // andq %rdx, %rcx - LONG $0x6ef9e1c4; BYTE $0xc1 // vmovq %rcx, %xmm0 - LONG $0x4479c3c4; WORD $0x00c1 // vpclmulqdq $0, %xmm9, %xmm0, %xmm0 - LONG $0x7ef9c1c4; BYTE $0xc5 // vmovq %xmm0, %r13 - WORD $0x314d; BYTE $0xd5 // xorq %r10, %r13 - LONG $0xc374e9c5 // vpcmpeqb %xmm3, %xmm2, %xmm0 - LONG $0xf8d779c5 // vpmovmskb %xmm0, %r15d - LONG $0xc374d1c5 // vpcmpeqb %xmm3, %xmm5, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0xc374c1c5 // vpcmpeqb %xmm3, %xmm7, %xmm0 - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - LONG $0xc374c9c5 // vpcmpeqb %xmm3, %xmm6, %xmm0 - LONG $0xd0d779c5 // vpmovmskb %xmm0, %r10d - LONG $0x30e2c149 // shlq $48, %r10 - LONG $0x20e1c149 // shlq $32, %r9 - LONG $0x10e1c148 // shlq $16, %rcx - WORD $0x0949; BYTE $0xcf // orq %rcx, %r15 - WORD $0x094d; BYTE $0xcf // orq %r9, %r15 - WORD $0x094d; BYTE $0xd7 // orq %r10, %r15 - WORD $0x894d; BYTE $0xe9 // movq %r13, %r9 - WORD $0xf749; BYTE $0xd1 // notq %r9 - WORD $0x214d; BYTE $0xcf // andq %r9, %r15 - LONG $0xc474e9c5 // vpcmpeqb %xmm4, %xmm2, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0xc474d1c5 // vpcmpeqb %xmm4, %xmm5, %xmm0 - LONG $0xd0d779c5 // vpmovmskb %xmm0, %r10d - LONG $0xc474c1c5 // vpcmpeqb %xmm4, %xmm7, %xmm0 - LONG $0xc0d779c5 // vpmovmskb %xmm0, %r8d - LONG $0xc474c9c5 // vpcmpeqb %xmm4, %xmm6, %xmm0 - LONG $0xe0d779c5 // vpmovmskb %xmm0, %r12d - LONG $0x30e4c149 // shlq $48, %r12 - LONG $0x20e0c149 // shlq $32, %r8 - LONG $0x10e2c149 // shlq $16, %r10 - WORD $0x094c; BYTE $0xd1 // orq %r10, %rcx - WORD $0x094c; BYTE $0xc1 // orq %r8, %rcx - WORD $0x094c; BYTE $0xe1 // orq %r12, %rcx - WORD $0x214c; BYTE $0xc9 // andq %r9, %rcx - LONG $0x0039840f; WORD $0x0000 // je LBB27_64, $57(%rip) - LONG $0x24448b4c; BYTE $0x18 // movq $24(%rsp), %r8 - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB27_62: - LONG $0xff518d4c // leaq $-1(%rcx), %r10 - WORD $0x894c; BYTE $0xd2 // movq %r10, %rdx - WORD $0x214c; BYTE $0xfa // andq %r15, %rdx - LONG $0xb80f48f3; BYTE $0xd2 // popcntq %rdx, %rdx - WORD $0x014c; BYTE $0xc2 // addq %r8, %rdx - WORD $0x3948; BYTE $0xda // cmpq %rbx, %rdx - LONG $0x03e0860f; WORD $0x0000 // jbe LBB27_108, $992(%rip) - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0x214c; BYTE $0xd1 // andq %r10, %rcx - LONG $0xffd9850f; WORD $0xffff // jne LBB27_62, $-39(%rip) - LONG $0x000005e9; BYTE $0x00 // jmp LBB27_65, $5(%rip) - -LBB27_64: - LONG $0x24448b4c; BYTE $0x18 // movq $24(%rsp), %r8 - -LBB27_65: - LONG $0x3ffdc149 // sarq $63, %r13 - LONG $0xb80f49f3; BYTE $0xcf // popcntq %r15, %rcx - WORD $0x0149; BYTE $0xc8 // addq %rcx, %r8 - LONG $0x40c68349 // addq $64, %r14 - LONG $0x244c8b48; BYTE $0x08 // movq $8(%rsp), %rcx - LONG $0xc0c18348 // addq $-64, %rcx - WORD $0x894d; BYTE $0xea // movq %r13, %r10 - LONG $0x247c8b4c; BYTE $0x10 // movq $16(%rsp), %r15 - LONG $0x40f98348 // cmpq $64, %rcx - LONG $0x244c8948; BYTE $0x08 // movq %rcx, $8(%rsp) - LONG $0x2444894c; BYTE $0x18 // movq %r8, $24(%rsp) - LONG $0xfe128d0f; WORD $0xffff // jge LBB27_57, $-494(%rip) - LONG $0xfffcdae9; BYTE $0xff // jmp LBB27_66, $-806(%rip) - -LBB27_81: - LONG $0x054b8d49 // leaq $5(%r11), %rcx - LONG $0x084f3b48 // cmpq $8(%rdi), %rcx - LONG $0xfb3f870f; WORD $0xffff // ja LBB27_44, $-1217(%rip) - -LBB27_82: - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - LONG $0xfffb34e9; BYTE $0xff // jmp LBB27_43, $-1228(%rip) - -LBB27_83: - LONG $0x084f8b48 // movq $8(%rdi), %rcx - WORD $0x2948; BYTE $0xd9 // subq %rbx, %rcx - WORD $0x0149; BYTE $0xde // addq %rbx, %r14 - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - QUAD $0xfffff86a156f79c5 // vmovdqa $-1942(%rip), %xmm10 /* LCPI27_4(%rip) */ - QUAD $0xfffff8520d6ff9c5 // vmovdqa $-1966(%rip), %xmm1 /* LCPI27_3(%rip) */ - LONG $0x763141c4; BYTE $0xc9 // vpcmpeqd %xmm9, %xmm9, %xmm9 - QUAD $0xfffff8651d6ff9c5 // vmovdqa $-1947(%rip), %xmm3 /* LCPI27_5(%rip) */ - QUAD $0xfffff86d256ff9c5 // vmovdqa $-1939(%rip), %xmm4 /* LCPI27_6(%rip) */ - LONG $0x573841c4; BYTE $0xc0 // vxorps %xmm8, %xmm8, %xmm8 - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - WORD $0x3145; BYTE $0xc0 // xorl %r8d, %r8d - WORD $0xdb31 // xorl %ebx, %ebx - LONG $0x40f98348 // cmpq $64, %rcx - LONG $0x244c8948; BYTE $0x08 // movq %rcx, $8(%rsp) - LONG $0x2444894c; BYTE $0x18 // movq %r8, $24(%rsp) - LONG $0x01338d0f; WORD $0x0000 // jge LBB27_84, $307(%rip) - -LBB27_93: - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x03dc8e0f; WORD $0x0000 // jle LBB27_117, $988(%rip) - LONG $0x44297cc5; WORD $0x4024 // vmovaps %ymm8, $64(%rsp) - LONG $0x44297cc5; WORD $0x2024 // vmovaps %ymm8, $32(%rsp) - WORD $0x8944; BYTE $0xf1 // movl %r14d, %ecx - LONG $0x0fffe181; WORD $0x0000 // andl $4095, %ecx - LONG $0x0fc1f981; WORD $0x0000 // cmpl $4033, %ecx - LONG $0x0109820f; WORD $0x0000 // jb LBB27_84, $265(%rip) - LONG $0x247c8348; WORD $0x2008 // cmpq $32, $8(%rsp) - LONG $0x002e820f; WORD $0x0000 // jb LBB27_97, $46(%rip) - LONG $0x1078c1c4; BYTE $0x06 // vmovups (%r14), %xmm0 - LONG $0x4429f8c5; WORD $0x2024 // vmovaps %xmm0, $32(%rsp) - LONG $0x6f7ac1c4; WORD $0x1046 // vmovdqu $16(%r14), %xmm0 - LONG $0x447ff9c5; WORD $0x3024 // vmovdqa %xmm0, $48(%rsp) - LONG $0x20c68349 // addq $32, %r14 - LONG $0x244c8b48; BYTE $0x08 // movq $8(%rsp), %rcx - LONG $0xe0518d48 // leaq $-32(%rcx), %rdx - LONG $0x24448d4c; BYTE $0x40 // leaq $64(%rsp), %r8 - LONG $0x00000ae9; BYTE $0x00 // jmp LBB27_98, $10(%rip) - -LBB27_97: - LONG $0x24448d4c; BYTE $0x20 // leaq $32(%rsp), %r8 - LONG $0x24548b48; BYTE $0x08 // movq $8(%rsp), %rdx - -LBB27_98: - LONG $0x10fa8348 // cmpq $16, %rdx - LONG $0x005c820f; WORD $0x0000 // jb LBB27_99, $92(%rip) - LONG $0x6f7ac1c4; BYTE $0x06 // vmovdqu (%r14), %xmm0 - LONG $0x7f7ac1c4; BYTE $0x00 // vmovdqu %xmm0, (%r8) - LONG $0x10c68349 // addq $16, %r14 - LONG $0x10c08349 // addq $16, %r8 - LONG $0xf0c28348 // addq $-16, %rdx - LONG $0x08fa8348 // cmpq $8, %rdx - LONG $0x0046830f; WORD $0x0000 // jae LBB27_104, $70(%rip) - -LBB27_100: - LONG $0x04fa8348 // cmpq $4, %rdx - LONG $0x00588c0f; WORD $0x0000 // jl LBB27_101, $88(%rip) - -LBB27_105: - WORD $0x8b41; BYTE $0x0e // movl (%r14), %ecx - WORD $0x8941; BYTE $0x08 // movl %ecx, (%r8) - LONG $0x04c68349 // addq $4, %r14 - LONG $0x04c08349 // addq $4, %r8 - LONG $0xfcc28348 // addq $-4, %rdx - LONG $0x02fa8348 // cmpq $2, %rdx - LONG $0x0046830f; WORD $0x0000 // jae LBB27_106, $70(%rip) - -LBB27_102: - WORD $0x894c; BYTE $0xf1 // movq %r14, %rcx - LONG $0x24748d4c; BYTE $0x20 // leaq $32(%rsp), %r14 - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x005a850f; WORD $0x0000 // jne LBB27_107, $90(%rip) - LONG $0x00005fe9; BYTE $0x00 // jmp LBB27_84, $95(%rip) - -LBB27_99: - LONG $0x08fa8348 // cmpq $8, %rdx - LONG $0xffba820f; WORD $0xffff // jb LBB27_100, $-70(%rip) - -LBB27_104: - WORD $0x8b49; BYTE $0x0e // movq (%r14), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0x08c68349 // addq $8, %r14 - LONG $0x08c08349 // addq $8, %r8 - LONG $0xf8c28348 // addq $-8, %rdx - LONG $0x04fa8348 // cmpq $4, %rdx - LONG $0xffa88d0f; WORD $0xffff // jge LBB27_105, $-88(%rip) - -LBB27_101: - LONG $0x02fa8348 // cmpq $2, %rdx - LONG $0xffba820f; WORD $0xffff // jb LBB27_102, $-70(%rip) - -LBB27_106: - LONG $0x0eb70f41 // movzwl (%r14), %ecx - LONG $0x08894166 // movw %cx, (%r8) - LONG $0x02c68349 // addq $2, %r14 - LONG $0x02c08349 // addq $2, %r8 - LONG $0xfec28348 // addq $-2, %rdx - WORD $0x894c; BYTE $0xf1 // movq %r14, %rcx - LONG $0x24748d4c; BYTE $0x20 // leaq $32(%rsp), %r14 - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x000a840f; WORD $0x0000 // je LBB27_84, $10(%rip) - -LBB27_107: - WORD $0x098a // movb (%rcx), %cl - WORD $0x8841; BYTE $0x08 // movb %cl, (%r8) - LONG $0x24748d4c; BYTE $0x20 // leaq $32(%rsp), %r14 - -LBB27_84: - LONG $0x6f7ac1c4; BYTE $0x16 // vmovdqu (%r14), %xmm2 - LONG $0x6f7ac1c4; WORD $0x106e // vmovdqu $16(%r14), %xmm5 - LONG $0x6f7ac1c4; WORD $0x207e // vmovdqu $32(%r14), %xmm7 - LONG $0x6f7ac1c4; WORD $0x3076 // vmovdqu $48(%r14), %xmm6 - LONG $0xc274a9c5 // vpcmpeqb %xmm2, %xmm10, %xmm0 - LONG $0xd0d7f9c5 // vpmovmskb %xmm0, %edx - LONG $0xc574a9c5 // vpcmpeqb %xmm5, %xmm10, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0xc774a9c5 // vpcmpeqb %xmm7, %xmm10, %xmm0 - LONG $0xe8d779c5 // vpmovmskb %xmm0, %r13d - LONG $0xc674a9c5 // vpcmpeqb %xmm6, %xmm10, %xmm0 - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - LONG $0x30e1c149 // shlq $48, %r9 - LONG $0x20e5c149 // shlq $32, %r13 - LONG $0x10e1c148 // shlq $16, %rcx - WORD $0x0948; BYTE $0xca // orq %rcx, %rdx - WORD $0x094c; BYTE $0xea // orq %r13, %rdx - WORD $0x094c; BYTE $0xca // orq %r9, %rdx - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - WORD $0x094c; BYTE $0xf9 // orq %r15, %rcx - LONG $0x004e840f; WORD $0x0000 // je LBB27_86, $78(%rip) - WORD $0x894d; BYTE $0xf8 // movq %r15, %r8 - WORD $0xf749; BYTE $0xd0 // notq %r8 - WORD $0x2149; BYTE $0xd0 // andq %rdx, %r8 - LONG $0x000c8d4f // leaq (%r8,%r8), %r9 - WORD $0x094d; BYTE $0xf9 // orq %r15, %r9 - WORD $0x894d; BYTE $0xcc // movq %r9, %r12 - QUAD $0xaaaaaaaaaaaab948; WORD $0xaaaa // movabsq $-6148914691236517206, %rcx - WORD $0x3149; BYTE $0xcc // xorq %rcx, %r12 - WORD $0x2148; BYTE $0xca // andq %rcx, %rdx - WORD $0x214c; BYTE $0xe2 // andq %r12, %rdx - WORD $0xc931 // xorl %ecx, %ecx - WORD $0x014c; BYTE $0xc2 // addq %r8, %rdx - WORD $0x920f; BYTE $0xc1 // setb %cl - LONG $0x244c8948; BYTE $0x10 // movq %rcx, $16(%rsp) - WORD $0x0148; BYTE $0xd2 // addq %rdx, %rdx - QUAD $0x555555555555b948; WORD $0x5555 // movabsq $6148914691236517205, %rcx - WORD $0x3148; BYTE $0xca // xorq %rcx, %rdx - WORD $0x214c; BYTE $0xca // andq %r9, %rdx - WORD $0xf748; BYTE $0xd2 // notq %rdx - LONG $0x00000ee9; BYTE $0x00 // jmp LBB27_87, $14(%rip) - -LBB27_86: - LONG $0xffc2c748; WORD $0xffff; BYTE $0xff // movq $-1, %rdx - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x244c8948; BYTE $0x10 // movq %rcx, $16(%rsp) - -LBB27_87: - LONG $0xc174d1c5 // vpcmpeqb %xmm1, %xmm5, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0x10e1c148 // shlq $16, %rcx - LONG $0xc174e9c5 // vpcmpeqb %xmm1, %xmm2, %xmm0 - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - WORD $0x0949; BYTE $0xc9 // orq %rcx, %r9 - LONG $0xc174c1c5 // vpcmpeqb %xmm1, %xmm7, %xmm0 - LONG $0xe8d779c5 // vpmovmskb %xmm0, %r13d - LONG $0x20e5c149 // shlq $32, %r13 - WORD $0x094d; BYTE $0xcd // orq %r9, %r13 - LONG $0xc174c9c5 // vpcmpeqb %xmm1, %xmm6, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0x30e1c148 // shlq $48, %rcx - WORD $0x094c; BYTE $0xe9 // orq %r13, %rcx - WORD $0x2148; BYTE $0xd1 // andq %rdx, %rcx - LONG $0x6ef9e1c4; BYTE $0xc1 // vmovq %rcx, %xmm0 - LONG $0x4479c3c4; WORD $0x00c1 // vpclmulqdq $0, %xmm9, %xmm0, %xmm0 - LONG $0x7ef9c1c4; BYTE $0xc5 // vmovq %xmm0, %r13 - WORD $0x314d; BYTE $0xd5 // xorq %r10, %r13 - LONG $0xc374e9c5 // vpcmpeqb %xmm3, %xmm2, %xmm0 - LONG $0xf8d779c5 // vpmovmskb %xmm0, %r15d - LONG $0xc374d1c5 // vpcmpeqb %xmm3, %xmm5, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0xc374c1c5 // vpcmpeqb %xmm3, %xmm7, %xmm0 - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - LONG $0xc374c9c5 // vpcmpeqb %xmm3, %xmm6, %xmm0 - LONG $0xd0d779c5 // vpmovmskb %xmm0, %r10d - LONG $0x30e2c149 // shlq $48, %r10 - LONG $0x20e1c149 // shlq $32, %r9 - LONG $0x10e1c148 // shlq $16, %rcx - WORD $0x0949; BYTE $0xcf // orq %rcx, %r15 - WORD $0x094d; BYTE $0xcf // orq %r9, %r15 - WORD $0x094d; BYTE $0xd7 // orq %r10, %r15 - WORD $0x894d; BYTE $0xe9 // movq %r13, %r9 - WORD $0xf749; BYTE $0xd1 // notq %r9 - WORD $0x214d; BYTE $0xcf // andq %r9, %r15 - LONG $0xc474e9c5 // vpcmpeqb %xmm4, %xmm2, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0xc474d1c5 // vpcmpeqb %xmm4, %xmm5, %xmm0 - LONG $0xd0d779c5 // vpmovmskb %xmm0, %r10d - LONG $0xc474c1c5 // vpcmpeqb %xmm4, %xmm7, %xmm0 - LONG $0xc0d779c5 // vpmovmskb %xmm0, %r8d - LONG $0xc474c9c5 // vpcmpeqb %xmm4, %xmm6, %xmm0 - LONG $0xe0d779c5 // vpmovmskb %xmm0, %r12d - LONG $0x30e4c149 // shlq $48, %r12 - LONG $0x20e0c149 // shlq $32, %r8 - LONG $0x10e2c149 // shlq $16, %r10 - WORD $0x094c; BYTE $0xd1 // orq %r10, %rcx - WORD $0x094c; BYTE $0xc1 // orq %r8, %rcx - WORD $0x094c; BYTE $0xe1 // orq %r12, %rcx - WORD $0x214c; BYTE $0xc9 // andq %r9, %rcx - LONG $0x003a840f; WORD $0x0000 // je LBB27_91, $58(%rip) - LONG $0x24448b4c; BYTE $0x18 // movq $24(%rsp), %r8 - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB27_89: - LONG $0xff518d4c // leaq $-1(%rcx), %r10 - WORD $0x894c; BYTE $0xd2 // movq %r10, %rdx - WORD $0x214c; BYTE $0xfa // andq %r15, %rdx - LONG $0xb80f48f3; BYTE $0xd2 // popcntq %rdx, %rdx - WORD $0x014c; BYTE $0xc2 // addq %r8, %rdx - WORD $0x3948; BYTE $0xda // cmpq %rbx, %rdx - LONG $0x0050860f; WORD $0x0000 // jbe LBB27_108, $80(%rip) - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0x214c; BYTE $0xd1 // andq %r10, %rcx - LONG $0xffd9850f; WORD $0xffff // jne LBB27_89, $-39(%rip) - LONG $0x000005e9; BYTE $0x00 // jmp LBB27_92, $5(%rip) - -LBB27_91: - LONG $0x24448b4c; BYTE $0x18 // movq $24(%rsp), %r8 - -LBB27_92: - LONG $0x3ffdc149 // sarq $63, %r13 - LONG $0xb80f49f3; BYTE $0xcf // popcntq %r15, %rcx - WORD $0x0149; BYTE $0xc8 // addq %rcx, %r8 - LONG $0x40c68349 // addq $64, %r14 - LONG $0x244c8b48; BYTE $0x08 // movq $8(%rsp), %rcx - LONG $0xc0c18348 // addq $-64, %rcx - WORD $0x894d; BYTE $0xea // movq %r13, %r10 - LONG $0x247c8b4c; BYTE $0x10 // movq $16(%rsp), %r15 - LONG $0x40f98348 // cmpq $64, %rcx - LONG $0x244c8948; BYTE $0x08 // movq %rcx, $8(%rsp) - LONG $0x2444894c; BYTE $0x18 // movq %r8, $24(%rsp) - LONG $0xfe118d0f; WORD $0xffff // jge LBB27_84, $-495(%rip) - LONG $0xfffcd9e9; BYTE $0xff // jmp LBB27_93, $-807(%rip) - -LBB27_108: - LONG $0x08478b48 // movq $8(%rdi), %rax - LONG $0xc9bc0f48 // bsfq %rcx, %rcx - LONG $0x244c2b48; BYTE $0x08 // subq $8(%rsp), %rcx - LONG $0x01448d48; BYTE $0x01 // leaq $1(%rcx,%rax), %rax - WORD $0x8948; BYTE $0x06 // movq %rax, (%rsi) - LONG $0x084f8b48 // movq $8(%rdi), %rcx - WORD $0x3948; BYTE $0xc8 // cmpq %rcx, %rax - LONG $0xc1470f48 // cmovaq %rcx, %rax - WORD $0x8948; BYTE $0x06 // movq %rax, (%rsi) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xd8470f4c // cmovaq %rax, %r11 - LONG $0xfff787e9; BYTE $0xff // jmp LBB27_43, $-2169(%rip) - -LBB27_53: - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x008e850f; WORD $0x0000 // jne LBB27_118, $142(%rip) - LONG $0x175c8d4b; BYTE $0x01 // leaq $1(%r15,%r10), %rbx - WORD $0xf749; BYTE $0xd7 // notq %r15 - WORD $0x014d; BYTE $0xc7 // addq %r8, %r15 - -LBB27_55: - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0x00248f0f; WORD $0x0000 // jg LBB27_112, $36(%rip) - LONG $0xfff768e9; BYTE $0xff // jmp LBB27_44, $-2200(%rip) - -LBB27_110: - LONG $0xfec1c748; WORD $0xffff; BYTE $0xff // movq $-2, %rcx - LONG $0x000002b8; BYTE $0x00 // movl $2, %eax - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x0149; BYTE $0xcf // addq %rcx, %r15 - LONG $0xf7498e0f; WORD $0xffff // jle LBB27_44, $-2231(%rip) - -LBB27_112: - WORD $0xb60f; BYTE $0x03 // movzbl (%rbx), %eax - WORD $0x5c3c // cmpb $92, %al - LONG $0xffd6840f; WORD $0xffff // je LBB27_110, $-42(%rip) - WORD $0x223c // cmpb $34, %al - LONG $0x0024840f; WORD $0x0000 // je LBB27_115, $36(%rip) - LONG $0xffc1c748; WORD $0xffff; BYTE $0xff // movq $-1, %rcx - LONG $0x000001b8; BYTE $0x00 // movl $1, %eax - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x0149; BYTE $0xcf // addq %rcx, %r15 - LONG $0xffce8f0f; WORD $0xffff // jg LBB27_112, $-50(%rip) - LONG $0xfff712e9; BYTE $0xff // jmp LBB27_44, $-2286(%rip) - -LBB27_115: - WORD $0x294c; BYTE $0xf3 // subq %r14, %rbx - WORD $0xff48; BYTE $0xc3 // incq %rbx - LONG $0xfff701e9; BYTE $0xff // jmp LBB27_42, $-2303(%rip) - -LBB27_116: - WORD $0x014c; BYTE $0xf3 // addq %r14, %rbx - LONG $0xffff89e9; BYTE $0xff // jmp LBB27_55, $-119(%rip) - -LBB27_117: - LONG $0x084f8b48 // movq $8(%rdi), %rcx - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - LONG $0xfff6f3e9; BYTE $0xff // jmp LBB27_44, $-2317(%rip) - -LBB27_118: - LONG $0xff488d49 // leaq $-1(%r8), %rcx - WORD $0x394c; BYTE $0xf9 // cmpq %r15, %rcx - LONG $0xf6e6840f; WORD $0xffff // je LBB27_44, $-2330(%rip) - LONG $0x175c8d4b; BYTE $0x02 // leaq $2(%r15,%r10), %rbx - WORD $0x294d; BYTE $0xf8 // subq %r15, %r8 - LONG $0xfec08349 // addq $-2, %r8 - WORD $0x894d; BYTE $0xc7 // movq %r8, %r15 - LONG $0xffff5ce9; BYTE $0xff // jmp LBB27_55, $-164(%rip) - WORD $0x9090 // .p2align 2, 0x90 - - // .set L27_0_set_44, LBB27_44-LJTI27_0 - // .set L27_0_set_46, LBB27_46-LJTI27_0 - // .set L27_0_set_47, LBB27_47-LJTI27_0 - // .set L27_0_set_29, LBB27_29-LJTI27_0 - // .set L27_0_set_56, LBB27_56-LJTI27_0 - // .set L27_0_set_81, LBB27_81-LJTI27_0 - // .set L27_0_set_45, LBB27_45-LJTI27_0 - // .set L27_0_set_83, LBB27_83-LJTI27_0 -LJTI27_0: - LONG $0xfffff6d0 // .long L27_0_set_44 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff704 // .long L27_0_set_47 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff613 // .long L27_0_set_29 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff613 // .long L27_0_set_29 - LONG $0xfffff613 // .long L27_0_set_29 - LONG $0xfffff613 // .long L27_0_set_29 - LONG $0xfffff613 // .long L27_0_set_29 - LONG $0xfffff613 // .long L27_0_set_29 - LONG $0xfffff613 // .long L27_0_set_29 - LONG $0xfffff613 // .long L27_0_set_29 - LONG $0xfffff613 // .long L27_0_set_29 - LONG $0xfffff613 // .long L27_0_set_29 - LONG $0xfffff613 // .long L27_0_set_29 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff80a // .long L27_0_set_56 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffffb83 // .long L27_0_set_81 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6e2 // .long L27_0_set_45 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6e2 // .long L27_0_set_45 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffff6f5 // .long L27_0_set_46 - LONG $0xfffffb99 // .long L27_0_set_83 - QUAD $0x0000000000000000 // .p2align 4, 0x00 - -LCPI28_0: - LONG $0x00000001 // .long 1 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - - // .p2align 4, 0x90 -_get_by_path: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x38ec8348 // subq $56, %rsp - WORD $0x8949; BYTE $0xf5 // movq %rsi, %r13 - WORD $0x8949; BYTE $0xfb // movq %rdi, %r11 - LONG $0x08528b4c // movq $8(%rdx), %r10 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0x0f10840f; WORD $0x0000 // je LBB28_243, $3856(%rip) - WORD $0x8b48; BYTE $0x02 // movq (%rdx), %rax - LONG $0x04e2c149 // shlq $4, %r10 - LONG $0xb8458948 // movq %rax, $-72(%rbp) - WORD $0x0149; BYTE $0xc2 // addq %rax, %r10 - WORD $0x8b4d; BYTE $0x0b // movq (%r11), %r9 - LONG $0x00558b49 // movq (%r13), %rdx - QUAD $0x000100002600bc49; WORD $0x0000 // movabsq $4294977024, %r12 - LONG $0xc05d894c // movq %r11, $-64(%rbp) - LONG $0xa04d8948 // movq %rcx, $-96(%rbp) - LONG $0xa855894c // movq %r10, $-88(%rbp) - -LBB28_2: - LONG $0x08438b4d // movq $8(%r11), %r8 - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - WORD $0x294c; BYTE $0xc7 // subq %r8, %rdi - LONG $0x0031830f; WORD $0x0000 // jae LBB28_7, $49(%rip) - LONG $0x11048a41 // movb (%r9,%rdx), %al - WORD $0x0d3c // cmpb $13, %al - LONG $0x0025840f; WORD $0x0000 // je LBB28_7, $37(%rip) - WORD $0x203c // cmpb $32, %al - LONG $0x001d840f; WORD $0x0000 // je LBB28_7, $29(%rip) - WORD $0xf704 // addb $-9, %al - WORD $0x013c // cmpb $1, %al - LONG $0x0013860f; WORD $0x0000 // jbe LBB28_7, $19(%rip) - WORD $0x8948; BYTE $0xd6 // movq %rdx, %rsi - LONG $0x0000fde9; BYTE $0x00 // jmp LBB28_28, $253(%rip) - QUAD $0x9090909090909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_7: - LONG $0x01728d48 // leaq $1(%rdx), %rsi - WORD $0x394c; BYTE $0xc6 // cmpq %r8, %rsi - LONG $0x0023830f; WORD $0x0000 // jae LBB28_11, $35(%rip) - LONG $0x31048a41 // movb (%r9,%rsi), %al - WORD $0x0d3c // cmpb $13, %al - LONG $0x0017840f; WORD $0x0000 // je LBB28_11, $23(%rip) - WORD $0x203c // cmpb $32, %al - LONG $0x000f840f; WORD $0x0000 // je LBB28_11, $15(%rip) - WORD $0xf704 // addb $-9, %al - WORD $0x013c // cmpb $1, %al - LONG $0x00c7870f; WORD $0x0000 // ja LBB28_28, $199(%rip) - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_11: - LONG $0x02728d48 // leaq $2(%rdx), %rsi - WORD $0x394c; BYTE $0xc6 // cmpq %r8, %rsi - LONG $0x0023830f; WORD $0x0000 // jae LBB28_15, $35(%rip) - LONG $0x31048a41 // movb (%r9,%rsi), %al - WORD $0x0d3c // cmpb $13, %al - LONG $0x0017840f; WORD $0x0000 // je LBB28_15, $23(%rip) - WORD $0x203c // cmpb $32, %al - LONG $0x000f840f; WORD $0x0000 // je LBB28_15, $15(%rip) - WORD $0xf704 // addb $-9, %al - WORD $0x013c // cmpb $1, %al - LONG $0x0097870f; WORD $0x0000 // ja LBB28_28, $151(%rip) - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_15: - LONG $0x03728d48 // leaq $3(%rdx), %rsi - WORD $0x394c; BYTE $0xc6 // cmpq %r8, %rsi - LONG $0x0023830f; WORD $0x0000 // jae LBB28_19, $35(%rip) - LONG $0x31048a41 // movb (%r9,%rsi), %al - WORD $0x0d3c // cmpb $13, %al - LONG $0x0017840f; WORD $0x0000 // je LBB28_19, $23(%rip) - WORD $0x203c // cmpb $32, %al - LONG $0x000f840f; WORD $0x0000 // je LBB28_19, $15(%rip) - WORD $0xf704 // addb $-9, %al - WORD $0x013c // cmpb $1, %al - LONG $0x0067870f; WORD $0x0000 // ja LBB28_28, $103(%rip) - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_19: - LONG $0x04428d48 // leaq $4(%rdx), %rax - WORD $0x3949; BYTE $0xc0 // cmpq %rax, %r8 - LONG $0x0083860f; WORD $0x0000 // jbe LBB28_25, $131(%rip) - WORD $0x3949; BYTE $0xc0 // cmpq %rax, %r8 - LONG $0x0095840f; WORD $0x0000 // je LBB28_26, $149(%rip) - LONG $0x01048d4b // leaq (%r9,%r8), %rax - LONG $0x04c78348 // addq $4, %rdi - LONG $0x11748d49; BYTE $0x05 // leaq $5(%r9,%rdx), %rsi - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_22: - LONG $0xff5ebe0f // movsbl $-1(%rsi), %ebx - WORD $0xfb83; BYTE $0x20 // cmpl $32, %ebx - LONG $0x0bae870f; WORD $0x0000 // ja LBB28_29, $2990(%rip) - LONG $0xdca30f49 // btq %rbx, %r12 - LONG $0x0ba4830f; WORD $0x0000 // jae LBB28_29, $2980(%rip) - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0xff48; BYTE $0xc7 // incq %rdi - LONG $0xffdd850f; WORD $0xffff // jne LBB28_22, $-35(%rip) - WORD $0x294c; BYTE $0xc8 // subq %r9, %rax - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - WORD $0x394c; BYTE $0xc6 // cmpq %r8, %rsi - LONG $0x005b830f; WORD $0x0000 // jae LBB28_30, $91(%rip) - -LBB28_28: - LONG $0x01468d48 // leaq $1(%rsi), %rax - LONG $0x00458949 // movq %rax, (%r13) - LONG $0x31348a41 // movb (%r9,%rsi), %sil - LONG $0xb8558b48 // movq $-72(%rbp), %rdx - WORD $0x8b48; BYTE $0x12 // movq (%rdx), %rdx - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x0062850f; WORD $0x0000 // jne LBB28_31, $98(%rip) - LONG $0x000dece9; BYTE $0x00 // jmp LBB28_250, $3564(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_25: - LONG $0x00458949 // movq %rax, (%r13) - WORD $0xf631 // xorl %esi, %esi - LONG $0xb8558b48 // movq $-72(%rbp), %rdx - WORD $0x8b48; BYTE $0x12 // movq (%rdx), %rdx - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x003a850f; WORD $0x0000 // jne LBB28_31, $58(%rip) - LONG $0x000dc4e9; BYTE $0x00 // jmp LBB28_250, $3524(%rip) - -LBB28_26: - WORD $0x014c; BYTE $0xc8 // addq %r9, %rax - WORD $0x294c; BYTE $0xc8 // subq %r9, %rax - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - WORD $0x394c; BYTE $0xc6 // cmpq %r8, %rsi - LONG $0xffa5820f; WORD $0xffff // jb LBB28_28, $-91(%rip) - -LBB28_30: - WORD $0xf631 // xorl %esi, %esi - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - LONG $0xb8558b48 // movq $-72(%rbp), %rdx - WORD $0x8b48; BYTE $0x12 // movq (%rdx), %rdx - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x0d9d840f; WORD $0x0000 // je LBB28_250, $3485(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB28_31: - WORD $0x528a; BYTE $0x17 // movb $23(%rdx), %dl - WORD $0xe280; BYTE $0x1f // andb $31, %dl - WORD $0xfa80; BYTE $0x02 // cmpb $2, %dl - LONG $0x0021840f; WORD $0x0000 // je LBB28_183, $33(%rip) - WORD $0xfa80; BYTE $0x18 // cmpb $24, %dl - LONG $0x0d77850f; WORD $0x0000 // jne LBB28_250, $3447(%rip) - LONG $0x7bfe8040 // cmpb $123, %sil - LONG $0xc86d894c // movq %r13, $-56(%rbp) - LONG $0x0179840f; WORD $0x0000 // je LBB28_34, $377(%rip) - LONG $0x000d34e9; BYTE $0x00 // jmp LBB28_246, $3380(%rip) - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_183: - LONG $0x5bfe8040 // cmpb $91, %sil - LONG $0x0d25850f; WORD $0x0000 // jne LBB28_246, $3365(%rip) - LONG $0xb8558b48 // movq $-72(%rbp), %rdx - LONG $0x08528b48 // movq $8(%rdx), %rdx - WORD $0x8b4c; BYTE $0x32 // movq (%rdx), %r14 - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x0d41880f; WORD $0x0000 // js LBB28_250, $3393(%rip) - LONG $0x08438b4d // movq $8(%r11), %r8 - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - WORD $0x294c; BYTE $0xc6 // subq %r8, %rsi - LONG $0x0032830f; WORD $0x0000 // jae LBB28_190, $50(%rip) - LONG $0x01148a41 // movb (%r9,%rax), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0025840f; WORD $0x0000 // je LBB28_190, $37(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x001c840f; WORD $0x0000 // je LBB28_190, $28(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x0010860f; WORD $0x0000 // jbe LBB28_190, $16(%rip) - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - LONG $0x000ac3e9; BYTE $0x00 // jmp LBB28_212, $2755(%rip) - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB28_190: - LONG $0x01788d48 // leaq $1(%rax), %rdi - WORD $0x394c; BYTE $0xc7 // cmpq %r8, %rdi - LONG $0x0023830f; WORD $0x0000 // jae LBB28_194, $35(%rip) - LONG $0x39148a41 // movb (%r9,%rdi), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_194, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_194, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x0a8c870f; WORD $0x0000 // ja LBB28_212, $2700(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_194: - LONG $0x02788d48 // leaq $2(%rax), %rdi - WORD $0x394c; BYTE $0xc7 // cmpq %r8, %rdi - LONG $0x0023830f; WORD $0x0000 // jae LBB28_198, $35(%rip) - LONG $0x39148a41 // movb (%r9,%rdi), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_198, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_198, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x0a5c870f; WORD $0x0000 // ja LBB28_212, $2652(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_198: - LONG $0x03788d48 // leaq $3(%rax), %rdi - WORD $0x394c; BYTE $0xc7 // cmpq %r8, %rdi - LONG $0x0023830f; WORD $0x0000 // jae LBB28_202, $35(%rip) - LONG $0x39148a41 // movb (%r9,%rdi), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_202, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_202, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x0a2c870f; WORD $0x0000 // ja LBB28_212, $2604(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_202: - LONG $0x04508d48 // leaq $4(%rax), %rdx - WORD $0x3949; BYTE $0xd0 // cmpq %rdx, %r8 - LONG $0x09d2860f; WORD $0x0000 // jbe LBB28_208, $2514(%rip) - WORD $0x3949; BYTE $0xd0 // cmpq %rdx, %r8 - LONG $0x09ec840f; WORD $0x0000 // je LBB28_209, $2540(%rip) - LONG $0x01148d4b // leaq (%r9,%r8), %rdx - LONG $0x04c68348 // addq $4, %rsi - LONG $0x017c8d49; BYTE $0x05 // leaq $5(%r9,%rax), %rdi - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_205: - LONG $0xff4fbe0f // movsbl $-1(%rdi), %ecx - WORD $0xf983; BYTE $0x20 // cmpl $32, %ecx - LONG $0x09dc870f; WORD $0x0000 // ja LBB28_211, $2524(%rip) - LONG $0xcca30f49 // btq %rcx, %r12 - LONG $0x09d2830f; WORD $0x0000 // jae LBB28_211, $2514(%rip) - WORD $0xff48; BYTE $0xc7 // incq %rdi - WORD $0xff48; BYTE $0xc6 // incq %rsi - LONG $0xffdd850f; WORD $0xffff // jne LBB28_205, $-35(%rip) - LONG $0x0009ade9; BYTE $0x00 // jmp LBB28_210, $2477(%rip) - -LBB28_179: - WORD $0x894c; BYTE $0xca // movq %r9, %rdx - WORD $0xf748; BYTE $0xd2 // notq %rdx - WORD $0x0148; BYTE $0xd7 // addq %rdx, %rdi - WORD $0x3948; BYTE $0xcf // cmpq %rcx, %rdi - LONG $0x0bd5830f; WORD $0x0000 // jae LBB28_246, $3029(%rip) - -LBB28_180: - LONG $0x01478d48 // leaq $1(%rdi), %rax - LONG $0x00458949 // movq %rax, (%r13) - LONG $0x390c8a41 // movb (%r9,%rdi), %cl - WORD $0xf980; BYTE $0x2c // cmpb $44, %cl - LONG $0x0c06850f; WORD $0x0000 // jne LBB28_252, $3078(%rip) - -LBB28_34: - LONG $0x084b8b49 // movq $8(%r11), %rcx - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - WORD $0x2948; BYTE $0xce // subq %rcx, %rsi - LONG $0x0031830f; WORD $0x0000 // jae LBB28_39, $49(%rip) - LONG $0x01148a41 // movb (%r9,%rax), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0024840f; WORD $0x0000 // je LBB28_39, $36(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x001b840f; WORD $0x0000 // je LBB28_39, $27(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x000f860f; WORD $0x0000 // jbe LBB28_39, $15(%rip) - WORD $0x8949; BYTE $0xc7 // movq %rax, %r15 - LONG $0x000129e9; BYTE $0x00 // jmp LBB28_60, $297(%rip) - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_39: - LONG $0x01788d4c // leaq $1(%rax), %r15 - WORD $0x3949; BYTE $0xcf // cmpq %rcx, %r15 - LONG $0x0023830f; WORD $0x0000 // jae LBB28_43, $35(%rip) - LONG $0x39148a43 // movb (%r9,%r15), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_43, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_43, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x00f3870f; WORD $0x0000 // ja LBB28_60, $243(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_43: - LONG $0x02788d4c // leaq $2(%rax), %r15 - WORD $0x3949; BYTE $0xcf // cmpq %rcx, %r15 - LONG $0x0023830f; WORD $0x0000 // jae LBB28_47, $35(%rip) - LONG $0x39148a43 // movb (%r9,%r15), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_47, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_47, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x00c3870f; WORD $0x0000 // ja LBB28_60, $195(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_47: - LONG $0x03788d4c // leaq $3(%rax), %r15 - WORD $0x3949; BYTE $0xcf // cmpq %rcx, %r15 - LONG $0x0023830f; WORD $0x0000 // jae LBB28_51, $35(%rip) - LONG $0x39148a43 // movb (%r9,%r15), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_51, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_51, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x0093870f; WORD $0x0000 // ja LBB28_60, $147(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_51: - LONG $0x04508d48 // leaq $4(%rax), %rdx - WORD $0x3948; BYTE $0xd1 // cmpq %rdx, %rcx - LONG $0x0adb860f; WORD $0x0000 // jbe LBB28_244, $2779(%rip) - WORD $0x3948; BYTE $0xd1 // cmpq %rdx, %rcx - LONG $0x004a840f; WORD $0x0000 // je LBB28_57, $74(%rip) - LONG $0x09148d49 // leaq (%r9,%rcx), %rdx - LONG $0x04c68348 // addq $4, %rsi - LONG $0x017c8d4d; BYTE $0x05 // leaq $5(%r9,%rax), %r15 - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_54: - LONG $0x7fbe0f41; BYTE $0xff // movsbl $-1(%r15), %edi - WORD $0xff83; BYTE $0x20 // cmpl $32, %edi - LONG $0x0042870f; WORD $0x0000 // ja LBB28_59, $66(%rip) - LONG $0xfca30f49 // btq %rdi, %r12 - LONG $0x0038830f; WORD $0x0000 // jae LBB28_59, $56(%rip) - WORD $0xff49; BYTE $0xc7 // incq %r15 - WORD $0xff48; BYTE $0xc6 // incq %rsi - LONG $0xffdc850f; WORD $0xffff // jne LBB28_54, $-36(%rip) - LONG $0x00000ae9; BYTE $0x00 // jmp LBB28_58, $10(%rip) - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_57: - WORD $0x014c; BYTE $0xca // addq %r9, %rdx - -LBB28_58: - WORD $0x294c; BYTE $0xca // subq %r9, %rdx - WORD $0x8949; BYTE $0xd7 // movq %rdx, %r15 - WORD $0x3949; BYTE $0xcf // cmpq %rcx, %r15 - LONG $0x0020820f; WORD $0x0000 // jb LBB28_60, $32(%rip) - LONG $0x000a78e9; BYTE $0x00 // jmp LBB28_246, $2680(%rip) - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_59: - WORD $0x894c; BYTE $0xca // movq %r9, %rdx - WORD $0xf748; BYTE $0xd2 // notq %rdx - WORD $0x0149; BYTE $0xd7 // addq %rdx, %r15 - WORD $0x3949; BYTE $0xcf // cmpq %rcx, %r15 - LONG $0x0a5d830f; WORD $0x0000 // jae LBB28_246, $2653(%rip) - -LBB28_60: - LONG $0x015f8d49 // leaq $1(%r15), %rbx - LONG $0x005d8949 // movq %rbx, (%r13) - LONG $0x390c8a43 // movb (%r9,%r15), %cl - WORD $0xf980; BYTE $0x22 // cmpb $34, %cl - LONG $0x0a8b850f; WORD $0x0000 // jne LBB28_251, $2699(%rip) - LONG $0xb8458b48 // movq $-72(%rbp), %rax - LONG $0x08408b48 // movq $8(%rax), %rax - WORD $0x8b4c; BYTE $0x30 // movq (%rax), %r14 - LONG $0x08688b4c // movq $8(%rax), %r13 - QUAD $0xffffffffb045c748 // movq $-1, $-80(%rbp) - WORD $0x894c; BYTE $0xdf // movq %r11, %rdi - WORD $0x8948; BYTE $0xde // movq %rbx, %rsi - LONG $0xb0558d48 // leaq $-80(%rbp), %rdx - LONG $0x0022c3e8; BYTE $0x00 // callq _advance_string_default, $8899(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0a7b880f; WORD $0x0000 // js LBB28_254, $2683(%rip) - LONG $0xc84d8b48 // movq $-56(%rbp), %rcx - WORD $0x8948; BYTE $0x01 // movq %rax, (%rcx) - LONG $0xb04d8b48 // movq $-80(%rbp), %rcx - LONG $0xfff98348 // cmpq $-1, %rcx - LONG $0x0009840f; WORD $0x0000 // je LBB28_64, $9(%rip) - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0x01308e0f; WORD $0x0000 // jle LBB28_84, $304(%rip) - -LBB28_64: - WORD $0x8948; BYTE $0xc2 // movq %rax, %rdx - WORD $0x294c; BYTE $0xfa // subq %r15, %rdx - LONG $0xfec28348 // addq $-2, %rdx - LONG $0x0001ba41; WORD $0x0000 // movl $1, %r10d - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - WORD $0x094c; BYTE $0xe9 // orq %r13, %rcx - LONG $0xc05d8b4c // movq $-64(%rbp), %r11 - LONG $0x00cf840f; WORD $0x0000 // je LBB28_79, $207(%rip) - WORD $0x394c; BYTE $0xea // cmpq %r13, %rdx - LONG $0x00c3850f; WORD $0x0000 // jne LBB28_78, $195(%rip) - WORD $0x0349; BYTE $0x1b // addq (%r11), %rbx - LONG $0x10fd8349 // cmpq $16, %r13 - LONG $0x0033820f; WORD $0x0000 // jb LBB28_69, $51(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB28_67: - LONG $0x036ffac5 // vmovdqu (%rbx), %xmm0 - LONG $0x7479c1c4; BYTE $0x06 // vpcmpeqb (%r14), %xmm0, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0xfff98366 // cmpw $-1, %cx - LONG $0x0099850f; WORD $0x0000 // jne LBB28_78, $153(%rip) - LONG $0x10c38348 // addq $16, %rbx - LONG $0x10c68349 // addq $16, %r14 - LONG $0xf0c58349 // addq $-16, %r13 - LONG $0x0ffd8349 // cmpq $15, %r13 - LONG $0xffd3870f; WORD $0xffff // ja LBB28_67, $-45(%rip) - -LBB28_69: - WORD $0x8944; BYTE $0xf1 // movl %r14d, %ecx - LONG $0x0fffe181; WORD $0x0000 // andl $4095, %ecx - LONG $0x0ff0f981; WORD $0x0000 // cmpl $4080, %ecx - LONG $0x0042870f; WORD $0x0000 // ja LBB28_73, $66(%rip) - WORD $0xd989 // movl %ebx, %ecx - LONG $0x0fffe181; WORD $0x0000 // andl $4095, %ecx - LONG $0x0ff1f981; WORD $0x0000 // cmpl $4081, %ecx - LONG $0x002e830f; WORD $0x0000 // jae LBB28_73, $46(%rip) - LONG $0x036ffac5 // vmovdqu (%rbx), %xmm0 - LONG $0x7479c1c4; BYTE $0x06 // vpcmpeqb (%r14), %xmm0, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0xfff98366 // cmpw $-1, %cx - WORD $0x940f; BYTE $0xc2 // sete %dl - WORD $0xd1f7 // notl %ecx - WORD $0xb70f; BYTE $0xc9 // movzwl %cx, %ecx - LONG $0xc9bc0f48 // bsfq %rcx, %rcx - WORD $0x394c; BYTE $0xe9 // cmpq %r13, %rcx - WORD $0x930f; BYTE $0xc1 // setae %cl - WORD $0xd108 // orb %dl, %cl - LONG $0xd1b60f44 // movzbl %cl, %r10d - LONG $0x00002fe9; BYTE $0x00 // jmp LBB28_79, $47(%rip) - -LBB28_73: - WORD $0x854d; BYTE $0xed // testq %r13, %r13 - LONG $0x0026840f; WORD $0x0000 // je LBB28_79, $38(%rip) - WORD $0xd231 // xorl %edx, %edx - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_75: - LONG $0x130cb60f // movzbl (%rbx,%rdx), %ecx - LONG $0x160c3a41 // cmpb (%r14,%rdx), %cl - LONG $0x0012850f; WORD $0x0000 // jne LBB28_78, $18(%rip) - WORD $0xff48; BYTE $0xc2 // incq %rdx - WORD $0x3949; BYTE $0xd5 // cmpq %rdx, %r13 - LONG $0xffe6850f; WORD $0xffff // jne LBB28_75, $-26(%rip) - LONG $0x000004e9; BYTE $0x00 // jmp LBB28_79, $4(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_78: - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - -LBB28_79: - WORD $0x8b4d; BYTE $0x0b // movq (%r11), %r9 - LONG $0xc86d8b4c // movq $-56(%rbp), %r13 - LONG $0x08738b49 // movq $8(%r11), %rsi - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - WORD $0x2948; BYTE $0xf7 // subq %rsi, %rdi - LONG $0x03f6830f; WORD $0x0000 // jae LBB28_131, $1014(%rip) - -LBB28_80: - LONG $0x01148a41 // movb (%r9,%rax), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x03e9840f; WORD $0x0000 // je LBB28_131, $1001(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x03e0840f; WORD $0x0000 // je LBB28_131, $992(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x03d4860f; WORD $0x0000 // jbe LBB28_131, $980(%rip) - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - LONG $0x0004eee9; BYTE $0x00 // jmp LBB28_152, $1262(%rip) - -LBB28_84: - QUAD $0x00000000d045c748 // movq $0, $-48(%rbp) - LONG $0xc04d8b48 // movq $-64(%rbp), %rcx - WORD $0x8b4c; BYTE $0x09 // movq (%rcx), %r9 - WORD $0x014c; BYTE $0xcb // addq %r9, %rbx - LONG $0x01448d4d; BYTE $0xff // leaq $-1(%r9,%rax), %r8 - LONG $0x2e1c8d4f // leaq (%r14,%r13), %r11 - WORD $0x854d; BYTE $0xed // testq %r13, %r13 - LONG $0x037a8e0f; WORD $0x0000 // jle LBB28_128, $890(%rip) - WORD $0x3949; BYTE $0xd8 // cmpq %rbx, %r8 - LONG $0xc86d8b4c // movq $-56(%rbp), %r13 - LONG $0x0371860f; WORD $0x0000 // jbe LBB28_129, $881(%rip) - -LBB28_86: - WORD $0x0b8a // movb (%rbx), %cl - WORD $0xf980; BYTE $0x5c // cmpb $92, %cl - LONG $0x0058850f; WORD $0x0000 // jne LBB28_91, $88(%rip) - WORD $0x894c; BYTE $0xc2 // movq %r8, %rdx - WORD $0x2948; BYTE $0xda // subq %rbx, %rdx - LONG $0xffc1c748; WORD $0xffff; BYTE $0xff // movq $-1, %rcx - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x09188e0f; WORD $0x0000 // jle LBB28_258, $2328(%rip) - LONG $0x0173b60f // movzbl $1(%rbx), %esi - LONG $0x0f3d8d48; WORD $0x0099; BYTE $0x00 // leaq $39183(%rip), %rdi /* __UnquoteTab(%rip) */ - LONG $0x3e3c8a44 // movb (%rsi,%rdi), %r15b - LONG $0xffff8041 // cmpb $-1, %r15b - LONG $0x003d840f; WORD $0x0000 // je LBB28_93, $61(%rip) - WORD $0x8445; BYTE $0xff // testb %r15b, %r15b - LONG $0x08e4840f; WORD $0x0000 // je LBB28_256, $2276(%rip) - LONG $0xd07d8844 // movb %r15b, $-48(%rbp) - LONG $0x02c38348 // addq $2, %rbx - LONG $0x000001ba; BYTE $0x00 // movl $1, %edx - LONG $0x15548d4c; BYTE $0xd0 // leaq $-48(%rbp,%rdx), %r10 - WORD $0x394d; BYTE $0xde // cmpq %r11, %r14 - LONG $0x0130820f; WORD $0x0000 // jb LBB28_104, $304(%rip) - LONG $0x0002e6e9; BYTE $0x00 // jmp LBB28_112, $742(%rip) - -LBB28_91: - WORD $0x3a41; BYTE $0x0e // cmpb (%r14), %cl - LONG $0x05c6850f; WORD $0x0000 // jne LBB28_182, $1478(%rip) - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0xff49; BYTE $0xc6 // incq %r14 - LONG $0x0002dfe9; BYTE $0x00 // jmp LBB28_114, $735(%rip) - -LBB28_93: - LONG $0x03fa8348 // cmpq $3, %rdx - LONG $0x08b58e0f; WORD $0x0000 // jle LBB28_257, $2229(%rip) - WORD $0x4b8b; BYTE $0x02 // movl $2(%rbx), %ecx - WORD $0xce89 // movl %ecx, %esi - WORD $0xd6f7 // notl %esi - LONG $0xcfd0b98d; WORD $0xcfcf // leal $-808464432(%rcx), %edi - LONG $0x8080e681; WORD $0x8080 // andl $-2139062144, %esi - WORD $0xfe85 // testl %edi, %esi - LONG $0x087b850f; WORD $0x0000 // jne LBB28_255, $2171(%rip) - LONG $0x1919b98d; WORD $0x1919 // leal $421075225(%rcx), %edi - WORD $0xcf09 // orl %ecx, %edi - LONG $0x8080c7f7; WORD $0x8080 // testl $-2139062144, %edi - LONG $0x0867850f; WORD $0x0000 // jne LBB28_255, $2151(%rip) - WORD $0xcf89 // movl %ecx, %edi - LONG $0x7f7fe781; WORD $0x7f7f // andl $2139062143, %edi - LONG $0xc0c0ba41; WORD $0xc0c0 // movl $-1061109568, %r10d - WORD $0x2941; BYTE $0xfa // subl %edi, %r10d - LONG $0x46bf8d44; WORD $0x4646; BYTE $0x46 // leal $1179010630(%rdi), %r15d - WORD $0x2141; BYTE $0xf2 // andl %esi, %r10d - WORD $0x8545; BYTE $0xfa // testl %r15d, %r10d - LONG $0x0843850f; WORD $0x0000 // jne LBB28_255, $2115(%rip) - LONG $0xe0e0ba41; WORD $0xe0e0 // movl $-522133280, %r10d - WORD $0x2941; BYTE $0xfa // subl %edi, %r10d - LONG $0x3939c781; WORD $0x3939 // addl $960051513, %edi - WORD $0x2144; BYTE $0xd6 // andl %r10d, %esi - WORD $0xfe85 // testl %edi, %esi - LONG $0x0829850f; WORD $0x0000 // jne LBB28_255, $2089(%rip) - WORD $0xc90f // bswapl %ecx - WORD $0xce89 // movl %ecx, %esi - WORD $0xeec1; BYTE $0x04 // shrl $4, %esi - WORD $0xd6f7 // notl %esi - LONG $0x0101e681; WORD $0x0101 // andl $16843009, %esi - WORD $0x348d; BYTE $0xf6 // leal (%rsi,%rsi,8), %esi - LONG $0x0f0fe181; WORD $0x0f0f // andl $252645135, %ecx - WORD $0xf101 // addl %esi, %ecx - WORD $0x8941; BYTE $0xcf // movl %ecx, %r15d - LONG $0x04efc141 // shrl $4, %r15d - WORD $0x0941; BYTE $0xcf // orl %ecx, %r15d - WORD $0x8944; BYTE $0xfe // movl %r15d, %esi - WORD $0xeec1; BYTE $0x08 // shrl $8, %esi - LONG $0xff00e681; WORD $0x0000 // andl $65280, %esi - LONG $0xcfb60f41 // movzbl %r15b, %ecx - WORD $0xf109 // orl %esi, %ecx - LONG $0x06538d4c // leaq $6(%rbx), %r10 - WORD $0xf983; BYTE $0x7f // cmpl $127, %ecx - LONG $0x00ae860f; WORD $0x0000 // jbe LBB28_116, $174(%rip) - LONG $0x07fff981; WORD $0x0000 // cmpl $2047, %ecx - LONG $0x00b0860f; WORD $0x0000 // jbe LBB28_117, $176(%rip) - WORD $0x8944; BYTE $0xff // movl %r15d, %edi - LONG $0x0000e781; WORD $0x00f8 // andl $16252928, %edi - LONG $0x0000ff81; WORD $0x00d8 // cmpl $14155776, %edi - LONG $0x00bd840f; WORD $0x0000 // je LBB28_118, $189(%rip) - WORD $0xeec1; BYTE $0x0c // shrl $12, %esi - LONG $0xe0ce8040 // orb $-32, %sil - LONG $0xd0758840 // movb %sil, $-48(%rbp) - WORD $0xe9c1; BYTE $0x06 // shrl $6, %ecx - WORD $0xe180; BYTE $0x3f // andb $63, %cl - WORD $0xc980; BYTE $0x80 // orb $-128, %cl - WORD $0x4d88; BYTE $0xd1 // movb %cl, $-47(%rbp) - LONG $0x3fe78041 // andb $63, %r15b - LONG $0x80cf8041 // orb $-128, %r15b - LONG $0xd27d8844 // movb %r15b, $-46(%rbp) - LONG $0x000003ba; BYTE $0x00 // movl $3, %edx - WORD $0x8941; BYTE $0xf7 // movl %esi, %r15d - -LBB28_102: - WORD $0x894c; BYTE $0xd3 // movq %r10, %rbx - LONG $0x15548d4c; BYTE $0xd0 // leaq $-48(%rbp,%rdx), %r10 - WORD $0x394d; BYTE $0xde // cmpq %r11, %r14 - LONG $0x01bb830f; WORD $0x0000 // jae LBB28_112, $443(%rip) - -LBB28_104: - LONG $0xd04d8d48 // leaq $-48(%rbp), %rcx - WORD $0x3949; BYTE $0xca // cmpq %rcx, %r10 - LONG $0x01ae860f; WORD $0x0000 // jbe LBB28_112, $430(%rip) - WORD $0x3845; BYTE $0x3e // cmpb %r15b, (%r14) - LONG $0x01a5850f; WORD $0x0000 // jne LBB28_112, $421(%rip) - WORD $0xff49; BYTE $0xc6 // incq %r14 - LONG $0xd1758d48 // leaq $-47(%rbp), %rsi - WORD $0x894c; BYTE $0xf7 // movq %r14, %rdi - -LBB28_107: - WORD $0x8949; BYTE $0xfe // movq %rdi, %r14 - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - WORD $0x394c; BYTE $0xd6 // cmpq %r10, %rsi - LONG $0x0190830f; WORD $0x0000 // jae LBB28_113, $400(%rip) - WORD $0x394d; BYTE $0xde // cmpq %r11, %r14 - LONG $0x0187830f; WORD $0x0000 // jae LBB28_113, $391(%rip) - LONG $0x0eb60f41 // movzbl (%r14), %ecx - LONG $0x017e8d49 // leaq $1(%r14), %rdi - LONG $0x01728d48 // leaq $1(%rdx), %rsi - WORD $0x0a3a // cmpb (%rdx), %cl - LONG $0xffd4840f; WORD $0xffff // je LBB28_107, $-44(%rip) - LONG $0x00016ee9; BYTE $0x00 // jmp LBB28_113, $366(%rip) - -LBB28_116: - LONG $0xd07d8844 // movb %r15b, $-48(%rbp) - LONG $0x000001ba; BYTE $0x00 // movl $1, %edx - LONG $0xffff90e9; BYTE $0xff // jmp LBB28_102, $-112(%rip) - -LBB28_117: - WORD $0xe9c1; BYTE $0x06 // shrl $6, %ecx - WORD $0xc980; BYTE $0xc0 // orb $-64, %cl - WORD $0x4d88; BYTE $0xd0 // movb %cl, $-48(%rbp) - LONG $0x3fe78041 // andb $63, %r15b - LONG $0x80cf8041 // orb $-128, %r15b - LONG $0xd17d8844 // movb %r15b, $-47(%rbp) - LONG $0x000002ba; BYTE $0x00 // movl $2, %edx - WORD $0x8941; BYTE $0xcf // movl %ecx, %r15d - LONG $0xffff6ee9; BYTE $0xff // jmp LBB28_102, $-146(%rip) - -LBB28_118: - LONG $0x06fa8348 // cmpq $6, %rdx - LONG $0x07388c0f; WORD $0x0000 // jl LBB28_260, $1848(%rip) - LONG $0xdbfff981; WORD $0x0000 // cmpl $56319, %ecx - LONG $0x072c870f; WORD $0x0000 // ja LBB28_260, $1836(%rip) - LONG $0x5c3a8041 // cmpb $92, (%r10) - LONG $0x0722850f; WORD $0x0000 // jne LBB28_260, $1826(%rip) - LONG $0x75077b80 // cmpb $117, $7(%rbx) - LONG $0x0718850f; WORD $0x0000 // jne LBB28_260, $1816(%rip) - LONG $0x08538d4c // leaq $8(%rbx), %r10 - WORD $0x538b; BYTE $0x08 // movl $8(%rbx), %edx - WORD $0xd789 // movl %edx, %edi - WORD $0xd7f7 // notl %edi - LONG $0xcfd0b28d; WORD $0xcfcf // leal $-808464432(%rdx), %esi - LONG $0x8080e781; WORD $0x8080 // andl $-2139062144, %edi - WORD $0xf785 // testl %esi, %edi - LONG $0x06ed850f; WORD $0x0000 // jne LBB28_259, $1773(%rip) - LONG $0x1919b28d; WORD $0x1919 // leal $421075225(%rdx), %esi - WORD $0xd609 // orl %edx, %esi - LONG $0x8080c6f7; WORD $0x8080 // testl $-2139062144, %esi - LONG $0x06d9850f; WORD $0x0000 // jne LBB28_259, $1753(%rip) - WORD $0xd689 // movl %edx, %esi - LONG $0x7f7fe681; WORD $0x7f7f // andl $2139062143, %esi - LONG $0xc0c0bf41; WORD $0xc0c0 // movl $-1061109568, %r15d - WORD $0x2941; BYTE $0xf7 // subl %esi, %r15d - LONG $0x46ae8d44; WORD $0x4646; BYTE $0x46 // leal $1179010630(%rsi), %r13d - WORD $0x2141; BYTE $0xff // andl %edi, %r15d - WORD $0x8545; BYTE $0xef // testl %r13d, %r15d - LONG $0x06b5850f; WORD $0x0000 // jne LBB28_259, $1717(%rip) - LONG $0xe0e0bf41; WORD $0xe0e0 // movl $-522133280, %r15d - WORD $0x2941; BYTE $0xf7 // subl %esi, %r15d - LONG $0x3939c681; WORD $0x3939 // addl $960051513, %esi - WORD $0x2144; BYTE $0xff // andl %r15d, %edi - WORD $0xf785 // testl %esi, %edi - LONG $0x069b850f; WORD $0x0000 // jne LBB28_259, $1691(%rip) - WORD $0xca0f // bswapl %edx - WORD $0xd689 // movl %edx, %esi - WORD $0xeec1; BYTE $0x04 // shrl $4, %esi - WORD $0xd6f7 // notl %esi - LONG $0x0101e681; WORD $0x0101 // andl $16843009, %esi - WORD $0x348d; BYTE $0xf6 // leal (%rsi,%rsi,8), %esi - LONG $0x0f0fe281; WORD $0x0f0f // andl $252645135, %edx - WORD $0xf201 // addl %esi, %edx - WORD $0xd689 // movl %edx, %esi - WORD $0xeec1; BYTE $0x04 // shrl $4, %esi - WORD $0xd609 // orl %edx, %esi - WORD $0xf289 // movl %esi, %edx - LONG $0x0000e281; WORD $0x00fc // andl $16515072, %edx - LONG $0x0000fa81; WORD $0x00dc // cmpl $14417920, %edx - LONG $0x0672850f; WORD $0x0000 // jne LBB28_260, $1650(%rip) - WORD $0xf289 // movl %esi, %edx - WORD $0xeac1; BYTE $0x08 // shrl $8, %edx - LONG $0xff00e281; WORD $0x0000 // andl $65280, %edx - LONG $0xf6b60f40 // movzbl %sil, %esi - WORD $0xd609 // orl %edx, %esi - WORD $0xe1c1; BYTE $0x0a // shll $10, %ecx - LONG $0x00318c8d; WORD $0xa024; BYTE $0xfc // leal $-56613888(%rcx,%rsi), %ecx - WORD $0x8941; BYTE $0xcf // movl %ecx, %r15d - LONG $0x12efc141 // shrl $18, %r15d - LONG $0xf0cf8041 // orb $-16, %r15b - LONG $0xd07d8844 // movb %r15b, $-48(%rbp) - WORD $0xca89 // movl %ecx, %edx - WORD $0xeac1; BYTE $0x0c // shrl $12, %edx - WORD $0xe280; BYTE $0x3f // andb $63, %dl - WORD $0xca80; BYTE $0x80 // orb $-128, %dl - WORD $0x5588; BYTE $0xd1 // movb %dl, $-47(%rbp) - WORD $0xca89 // movl %ecx, %edx - WORD $0xeac1; BYTE $0x06 // shrl $6, %edx - WORD $0xe280; BYTE $0x3f // andb $63, %dl - WORD $0xca80; BYTE $0x80 // orb $-128, %dl - WORD $0x5588; BYTE $0xd2 // movb %dl, $-46(%rbp) - WORD $0xe180; BYTE $0x3f // andb $63, %cl - WORD $0xc980; BYTE $0x80 // orb $-128, %cl - WORD $0x4d88; BYTE $0xd3 // movb %cl, $-45(%rbp) - LONG $0x0cc38348 // addq $12, %rbx - LONG $0x000004ba; BYTE $0x00 // movl $4, %edx - LONG $0xc86d8b4c // movq $-56(%rbp), %r13 - LONG $0x15548d4c; BYTE $0xd0 // leaq $-48(%rbp,%rdx), %r10 - WORD $0x394d; BYTE $0xde // cmpq %r11, %r14 - LONG $0xfe45820f; WORD $0xffff // jb LBB28_104, $-443(%rip) - -LBB28_112: - LONG $0xd0558d48 // leaq $-48(%rbp), %rdx - -LBB28_113: - WORD $0x394c; BYTE $0xd2 // cmpq %r10, %rdx - LONG $0x02dc850f; WORD $0x0000 // jne LBB28_182, $732(%rip) - -LBB28_114: - WORD $0x3949; BYTE $0xd8 // cmpq %rbx, %r8 - LONG $0x0012860f; WORD $0x0000 // jbe LBB28_129, $18(%rip) - WORD $0x394d; BYTE $0xde // cmpq %r11, %r14 - LONG $0xfc98820f; WORD $0xffff // jb LBB28_86, $-872(%rip) - LONG $0x000004e9; BYTE $0x00 // jmp LBB28_129, $4(%rip) - -LBB28_128: - LONG $0xc86d8b4c // movq $-56(%rbp), %r13 - -LBB28_129: - WORD $0x3149; BYTE $0xd8 // xorq %rbx, %r8 - WORD $0x314d; BYTE $0xde // xorq %r11, %r14 - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x094d; BYTE $0xc6 // orq %r8, %r14 - LONG $0xc2940f41 // sete %r10b - -LBB28_130: - LONG $0xc05d8b4c // movq $-64(%rbp), %r11 - LONG $0x08738b49 // movq $8(%r11), %rsi - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - WORD $0x2948; BYTE $0xf7 // subq %rsi, %rdi - LONG $0xfc10820f; WORD $0xffff // jb LBB28_80, $-1008(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB28_131: - LONG $0x01588d48 // leaq $1(%rax), %rbx - WORD $0x3948; BYTE $0xf3 // cmpq %rsi, %rbx - LONG $0x0023830f; WORD $0x0000 // jae LBB28_135, $35(%rip) - LONG $0x19148a41 // movb (%r9,%rbx), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_135, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_135, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x00f3870f; WORD $0x0000 // ja LBB28_152, $243(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_135: - LONG $0x02588d48 // leaq $2(%rax), %rbx - WORD $0x3948; BYTE $0xf3 // cmpq %rsi, %rbx - LONG $0x0023830f; WORD $0x0000 // jae LBB28_139, $35(%rip) - LONG $0x19148a41 // movb (%r9,%rbx), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_139, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_139, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x00c3870f; WORD $0x0000 // ja LBB28_152, $195(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_139: - LONG $0x03588d48 // leaq $3(%rax), %rbx - WORD $0x3948; BYTE $0xf3 // cmpq %rsi, %rbx - LONG $0x0023830f; WORD $0x0000 // jae LBB28_143, $35(%rip) - LONG $0x19148a41 // movb (%r9,%rbx), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_143, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_143, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x0093870f; WORD $0x0000 // ja LBB28_152, $147(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_143: - LONG $0x04508d48 // leaq $4(%rax), %rdx - WORD $0x3948; BYTE $0xd6 // cmpq %rdx, %rsi - LONG $0x045b860f; WORD $0x0000 // jbe LBB28_244, $1115(%rip) - WORD $0x3948; BYTE $0xd6 // cmpq %rdx, %rsi - LONG $0x004a840f; WORD $0x0000 // je LBB28_149, $74(%rip) - LONG $0x31148d49 // leaq (%r9,%rsi), %rdx - LONG $0x04c78348 // addq $4, %rdi - LONG $0x015c8d49; BYTE $0x05 // leaq $5(%r9,%rax), %rbx - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_146: - LONG $0xff4bbe0f // movsbl $-1(%rbx), %ecx - WORD $0xf983; BYTE $0x20 // cmpl $32, %ecx - LONG $0x0043870f; WORD $0x0000 // ja LBB28_151, $67(%rip) - LONG $0xcca30f49 // btq %rcx, %r12 - LONG $0x0039830f; WORD $0x0000 // jae LBB28_151, $57(%rip) - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0xff48; BYTE $0xc7 // incq %rdi - LONG $0xffdd850f; WORD $0xffff // jne LBB28_146, $-35(%rip) - LONG $0x00000be9; BYTE $0x00 // jmp LBB28_150, $11(%rip) - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB28_149: - WORD $0x014c; BYTE $0xca // addq %r9, %rdx - -LBB28_150: - WORD $0x294c; BYTE $0xca // subq %r9, %rdx - WORD $0x8948; BYTE $0xd3 // movq %rdx, %rbx - WORD $0x3948; BYTE $0xf3 // cmpq %rsi, %rbx - LONG $0x0020820f; WORD $0x0000 // jb LBB28_152, $32(%rip) - LONG $0x0003f8e9; BYTE $0x00 // jmp LBB28_246, $1016(%rip) - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_151: - WORD $0x894c; BYTE $0xc9 // movq %r9, %rcx - WORD $0xf748; BYTE $0xd1 // notq %rcx - WORD $0x0148; BYTE $0xcb // addq %rcx, %rbx - WORD $0x3948; BYTE $0xf3 // cmpq %rsi, %rbx - LONG $0x03dd830f; WORD $0x0000 // jae LBB28_246, $989(%rip) - -LBB28_152: - LONG $0x01538d48 // leaq $1(%rbx), %rdx - LONG $0x00558949 // movq %rdx, (%r13) - LONG $0x193c8041; BYTE $0x3a // cmpb $58, (%r9,%rbx) - LONG $0x03c7850f; WORD $0x0000 // jne LBB28_245, $967(%rip) - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0x0379850f; WORD $0x0000 // jne LBB28_242, $889(%rip) - WORD $0x894c; BYTE $0xdf // movq %r11, %rdi - WORD $0x894c; BYTE $0xee // movq %r13, %rsi - LONG $0xffe6a7e8; BYTE $0xff // callq _skip_one_fast, $-6489(%rip) - LONG $0xc05d8b4c // movq $-64(%rbp), %r11 - WORD $0x8b4d; BYTE $0x0b // movq (%r11), %r9 - LONG $0x084b8b49 // movq $8(%r11), %rcx - LONG $0x00458b49 // movq (%r13), %rax - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - WORD $0x2948; BYTE $0xce // subq %rcx, %rsi - LONG $0x002c830f; WORD $0x0000 // jae LBB28_159, $44(%rip) - LONG $0x01148a41 // movb (%r9,%rax), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x001f840f; WORD $0x0000 // je LBB28_159, $31(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_159, $22(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x000a860f; WORD $0x0000 // jbe LBB28_159, $10(%rip) - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - LONG $0xfff79ce9; BYTE $0xff // jmp LBB28_180, $-2148(%rip) - WORD $0x9090 // .p2align 4, 0x90 - -LBB28_159: - LONG $0x01788d48 // leaq $1(%rax), %rdi - WORD $0x3948; BYTE $0xcf // cmpq %rcx, %rdi - LONG $0x0023830f; WORD $0x0000 // jae LBB28_163, $35(%rip) - LONG $0x39148a41 // movb (%r9,%rdi), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_163, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_163, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0xf76b870f; WORD $0xffff // ja LBB28_180, $-2197(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_163: - LONG $0x02788d48 // leaq $2(%rax), %rdi - WORD $0x3948; BYTE $0xcf // cmpq %rcx, %rdi - LONG $0x0023830f; WORD $0x0000 // jae LBB28_167, $35(%rip) - LONG $0x39148a41 // movb (%r9,%rdi), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_167, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_167, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0xf73b870f; WORD $0xffff // ja LBB28_180, $-2245(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_167: - LONG $0x03788d48 // leaq $3(%rax), %rdi - WORD $0x3948; BYTE $0xcf // cmpq %rcx, %rdi - LONG $0x0023830f; WORD $0x0000 // jae LBB28_171, $35(%rip) - LONG $0x39148a41 // movb (%r9,%rdi), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_171, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_171, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0xf70b870f; WORD $0xffff // ja LBB28_180, $-2293(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_171: - LONG $0x04508d48 // leaq $4(%rax), %rdx - WORD $0x3948; BYTE $0xd1 // cmpq %rdx, %rcx - LONG $0x02cb860f; WORD $0x0000 // jbe LBB28_244, $715(%rip) - WORD $0x3948; BYTE $0xd1 // cmpq %rdx, %rcx - LONG $0x004a840f; WORD $0x0000 // je LBB28_177, $74(%rip) - LONG $0x09148d49 // leaq (%r9,%rcx), %rdx - LONG $0x04c68348 // addq $4, %rsi - LONG $0x017c8d49; BYTE $0x05 // leaq $5(%r9,%rax), %rdi - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_174: - LONG $0xff5fbe0f // movsbl $-1(%rdi), %ebx - WORD $0xfb83; BYTE $0x20 // cmpl $32, %ebx - LONG $0xf6bb870f; WORD $0xffff // ja LBB28_179, $-2373(%rip) - LONG $0xdca30f49 // btq %rbx, %r12 - LONG $0xf6b1830f; WORD $0xffff // jae LBB28_179, $-2383(%rip) - WORD $0xff48; BYTE $0xc7 // incq %rdi - WORD $0xff48; BYTE $0xc6 // incq %rsi - LONG $0xffdd850f; WORD $0xffff // jne LBB28_174, $-35(%rip) - LONG $0x00000be9; BYTE $0x00 // jmp LBB28_178, $11(%rip) - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB28_177: - WORD $0x014c; BYTE $0xca // addq %r9, %rdx - -LBB28_178: - WORD $0x294c; BYTE $0xca // subq %r9, %rdx - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - WORD $0x3948; BYTE $0xcf // cmpq %rcx, %rdi - LONG $0xf698820f; WORD $0xffff // jb LBB28_180, $-2408(%rip) - LONG $0x000268e9; BYTE $0x00 // jmp LBB28_246, $616(%rip) - -LBB28_182: - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - LONG $0xfffd47e9; BYTE $0xff // jmp LBB28_130, $-697(%rip) - -LBB28_208: - LONG $0x00558949 // movq %rdx, (%r13) - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - LONG $0x000053e9; BYTE $0x00 // jmp LBB28_213, $83(%rip) - -LBB28_29: - WORD $0x894c; BYTE $0xc8 // movq %r9, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0148; BYTE $0xc6 // addq %rax, %rsi - WORD $0x394c; BYTE $0xc6 // cmpq %r8, %rsi - LONG $0xf465820f; WORD $0xffff // jb LBB28_28, $-2971(%rip) - LONG $0xfff4bbe9; BYTE $0xff // jmp LBB28_30, $-2885(%rip) - -LBB28_209: - WORD $0x014c; BYTE $0xca // addq %r9, %rdx - -LBB28_210: - WORD $0x294c; BYTE $0xca // subq %r9, %rdx - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - WORD $0x394c; BYTE $0xc7 // cmpq %r8, %rdi - LONG $0x0017820f; WORD $0x0000 // jb LBB28_212, $23(%rip) - LONG $0x000025e9; BYTE $0x00 // jmp LBB28_213, $37(%rip) - -LBB28_211: - WORD $0x894c; BYTE $0xc9 // movq %r9, %rcx - WORD $0xf748; BYTE $0xd1 // notq %rcx - WORD $0x0148; BYTE $0xcf // addq %rcx, %rdi - WORD $0x394c; BYTE $0xc7 // cmpq %r8, %rdi - LONG $0x0013830f; WORD $0x0000 // jae LBB28_213, $19(%rip) - -LBB28_212: - LONG $0x01478d48 // leaq $1(%rdi), %rax - LONG $0x00458949 // movq %rax, (%r13) - LONG $0x393c8041; BYTE $0x5d // cmpb $93, (%r9,%rdi) - LONG $0x0250840f; WORD $0x0000 // je LBB28_253, $592(%rip) - -LBB28_213: - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0x00458949 // movq %rax, (%r13) - WORD $0x8948; BYTE $0xc2 // movq %rax, %rdx - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x01a68e0f; WORD $0x0000 // jle LBB28_242, $422(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_214: - WORD $0x894c; BYTE $0xdf // movq %r11, %rdi - WORD $0x894c; BYTE $0xee // movq %r13, %rsi - LONG $0xffe4c5e8; BYTE $0xff // callq _skip_one_fast, $-6971(%rip) - LONG $0xc05d8b4c // movq $-64(%rbp), %r11 - WORD $0x8b4d; BYTE $0x0b // movq (%r11), %r9 - LONG $0x084b8b49 // movq $8(%r11), %rcx - LONG $0x00458b49 // movq (%r13), %rax - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - WORD $0x2948; BYTE $0xce // subq %rcx, %rsi - LONG $0x002a830f; WORD $0x0000 // jae LBB28_219, $42(%rip) - LONG $0x01148a41 // movb (%r9,%rax), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x001d840f; WORD $0x0000 // je LBB28_219, $29(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x0014840f; WORD $0x0000 // je LBB28_219, $20(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x0008860f; WORD $0x0000 // jbe LBB28_219, $8(%rip) - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - LONG $0x000122e9; BYTE $0x00 // jmp LBB28_240, $290(%rip) - - // .p2align 4, 0x90 -LBB28_219: - LONG $0x01788d48 // leaq $1(%rax), %rdi - WORD $0x3948; BYTE $0xcf // cmpq %rcx, %rdi - LONG $0x0023830f; WORD $0x0000 // jae LBB28_223, $35(%rip) - LONG $0x39148a41 // movb (%r9,%rdi), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_223, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_223, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x00f3870f; WORD $0x0000 // ja LBB28_240, $243(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_223: - LONG $0x02788d48 // leaq $2(%rax), %rdi - WORD $0x3948; BYTE $0xcf // cmpq %rcx, %rdi - LONG $0x0023830f; WORD $0x0000 // jae LBB28_227, $35(%rip) - LONG $0x39148a41 // movb (%r9,%rdi), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_227, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_227, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x00c3870f; WORD $0x0000 // ja LBB28_240, $195(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_227: - LONG $0x03788d48 // leaq $3(%rax), %rdi - WORD $0x3948; BYTE $0xcf // cmpq %rcx, %rdi - LONG $0x0023830f; WORD $0x0000 // jae LBB28_231, $35(%rip) - LONG $0x39148a41 // movb (%r9,%rdi), %dl - WORD $0xfa80; BYTE $0x0d // cmpb $13, %dl - LONG $0x0016840f; WORD $0x0000 // je LBB28_231, $22(%rip) - WORD $0xfa80; BYTE $0x20 // cmpb $32, %dl - LONG $0x000d840f; WORD $0x0000 // je LBB28_231, $13(%rip) - WORD $0xc280; BYTE $0xf7 // addb $-9, %dl - WORD $0xfa80; BYTE $0x01 // cmpb $1, %dl - LONG $0x0093870f; WORD $0x0000 // ja LBB28_240, $147(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB28_231: - LONG $0x04508d48 // leaq $4(%rax), %rdx - WORD $0x3948; BYTE $0xd1 // cmpq %rdx, %rcx - LONG $0x00eb860f; WORD $0x0000 // jbe LBB28_244, $235(%rip) - WORD $0x3948; BYTE $0xd1 // cmpq %rdx, %rcx - LONG $0x004a840f; WORD $0x0000 // je LBB28_237, $74(%rip) - LONG $0x09148d49 // leaq (%r9,%rcx), %rdx - LONG $0x04c68348 // addq $4, %rsi - LONG $0x017c8d49; BYTE $0x05 // leaq $5(%r9,%rax), %rdi - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_234: - LONG $0xff5fbe0f // movsbl $-1(%rdi), %ebx - WORD $0xfb83; BYTE $0x20 // cmpl $32, %ebx - LONG $0x0043870f; WORD $0x0000 // ja LBB28_239, $67(%rip) - LONG $0xdca30f49 // btq %rbx, %r12 - LONG $0x0039830f; WORD $0x0000 // jae LBB28_239, $57(%rip) - WORD $0xff48; BYTE $0xc7 // incq %rdi - WORD $0xff48; BYTE $0xc6 // incq %rsi - LONG $0xffdd850f; WORD $0xffff // jne LBB28_234, $-35(%rip) - LONG $0x00000be9; BYTE $0x00 // jmp LBB28_238, $11(%rip) - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB28_237: - WORD $0x014c; BYTE $0xca // addq %r9, %rdx - -LBB28_238: - WORD $0x294c; BYTE $0xca // subq %r9, %rdx - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - WORD $0x3948; BYTE $0xcf // cmpq %rcx, %rdi - LONG $0x0020820f; WORD $0x0000 // jb LBB28_240, $32(%rip) - LONG $0x000088e9; BYTE $0x00 // jmp LBB28_246, $136(%rip) - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_239: - WORD $0x894c; BYTE $0xca // movq %r9, %rdx - WORD $0xf748; BYTE $0xd2 // notq %rdx - WORD $0x0148; BYTE $0xd7 // addq %rdx, %rdi - WORD $0x3948; BYTE $0xcf // cmpq %rcx, %rdi - LONG $0x006d830f; WORD $0x0000 // jae LBB28_246, $109(%rip) - -LBB28_240: - LONG $0x01578d48 // leaq $1(%rdi), %rdx - LONG $0x00558949 // movq %rdx, (%r13) - LONG $0x39048a41 // movb (%r9,%rdi), %al - WORD $0x2c3c // cmpb $44, %al - LONG $0x0079850f; WORD $0x0000 // jne LBB28_248, $121(%rip) - LONG $0xff468d49 // leaq $-1(%r14), %rax - LONG $0x02fe8349 // cmpq $2, %r14 - WORD $0x8949; BYTE $0xc6 // movq %rax, %r14 - LONG $0xfe698d0f; WORD $0xffff // jge LBB28_214, $-407(%rip) - -LBB28_242: - LONG $0xb8458b48 // movq $-72(%rbp), %rax - LONG $0x10c08348 // addq $16, %rax - LONG $0xa8558b4c // movq $-88(%rbp), %r10 - LONG $0xb8458948 // movq %rax, $-72(%rbp) - WORD $0x394c; BYTE $0xd0 // cmpq %r10, %rax - LONG $0xa04d8b48 // movq $-96(%rbp), %rcx - LONG $0xf11b850f; WORD $0xffff // jne LBB28_2, $-3813(%rip) - -LBB28_243: - QUAD $0xfffff0b4056ff9c5 // vmovdqa $-3916(%rip), %xmm0 /* LCPI28_0(%rip) */ - LONG $0x017ffac5 // vmovdqu %xmm0, (%rcx) - WORD $0x8948; BYTE $0xcf // movq %rcx, %rdi - WORD $0x894c; BYTE $0xde // movq %r11, %rsi - WORD $0x894c; BYTE $0xea // movq %r13, %rdx - WORD $0xc931 // xorl %ecx, %ecx - LONG $0xffd200e8; BYTE $0xff // callq _fsm_exec, $-11776(%rip) - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - LONG $0x000015e9; BYTE $0x00 // jmp LBB28_247, $21(%rip) - -LBB28_244: - LONG $0x00558949 // movq %rdx, (%r13) - -LBB28_245: - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - -LBB28_246: - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0x00458949 // movq %rax, (%r13) - LONG $0xfec1c748; WORD $0xffff; BYTE $0xff // movq $-2, %rcx - -LBB28_247: - WORD $0x8948; BYTE $0xc8 // movq %rcx, %rax - LONG $0x38c48348 // addq $56, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB28_248: - WORD $0x5d3c // cmpb $93, %al - LONG $0xffd5850f; WORD $0xffff // jne LBB28_245, $-43(%rip) - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - LONG $0x00001fe9; BYTE $0x00 // jmp LBB28_253, $31(%rip) - -LBB28_250: - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0x00458949 // movq %rax, (%r13) - LONG $0xdec1c748; WORD $0xffff; BYTE $0xff // movq $-34, %rcx - LONG $0xffffcbe9; BYTE $0xff // jmp LBB28_247, $-53(%rip) - -LBB28_251: - WORD $0x8948; BYTE $0xd8 // movq %rbx, %rax - -LBB28_252: - WORD $0xf980; BYTE $0x7d // cmpb $125, %cl - LONG $0xffb1850f; WORD $0xffff // jne LBB28_246, $-79(%rip) - -LBB28_253: - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0x00458949 // movq %rax, (%r13) - LONG $0xdfc1c748; WORD $0xffff; BYTE $0xff // movq $-33, %rcx - LONG $0xfffface9; BYTE $0xff // jmp LBB28_247, $-84(%rip) - -LBB28_254: - LONG $0xc0458b48 // movq $-64(%rbp), %rax - LONG $0x08408b48 // movq $8(%rax), %rax - LONG $0xc84d8b48 // movq $-56(%rbp), %rcx - WORD $0x8948; BYTE $0x01 // movq %rax, (%rcx) - LONG $0xffc1c748; WORD $0xffff; BYTE $0xff // movq $-1, %rcx - LONG $0xffff91e9; BYTE $0xff // jmp LBB28_247, $-111(%rip) - -LBB28_255: - LONG $0x02c38348 // addq $2, %rbx - LONG $0xfec1c748; WORD $0xffff; BYTE $0xff // movq $-2, %rcx - LONG $0x000012e9; BYTE $0x00 // jmp LBB28_258, $18(%rip) - -LBB28_256: - WORD $0xff48; BYTE $0xc3 // incq %rbx - LONG $0xfdc1c748; WORD $0xffff; BYTE $0xff // movq $-3, %rcx - LONG $0x000003e9; BYTE $0x00 // jmp LBB28_258, $3(%rip) - -LBB28_257: - WORD $0xff48; BYTE $0xc3 // incq %rbx - -LBB28_258: - WORD $0x294c; BYTE $0xcb // subq %r9, %rbx - LONG $0x005d8949 // movq %rbx, (%r13) - LONG $0xffff63e9; BYTE $0xff // jmp LBB28_247, $-157(%rip) - -LBB28_259: - LONG $0xfec1c748; WORD $0xffff; BYTE $0xff // movq $-2, %rcx - LONG $0x000007e9; BYTE $0x00 // jmp LBB28_261, $7(%rip) - -LBB28_260: - LONG $0xfcc1c748; WORD $0xffff; BYTE $0xff // movq $-4, %rcx - -LBB28_261: - WORD $0x894c; BYTE $0xd3 // movq %r10, %rbx - LONG $0xc86d8b4c // movq $-56(%rbp), %r13 - LONG $0xffffd5e9; BYTE $0xff // jmp LBB28_258, $-43(%rip) - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_validate_utf8: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax - WORD $0x8b4c; BYTE $0x17 // movq (%rdi), %r10 - LONG $0x085f8b4c // movq $8(%rdi), %r11 - WORD $0x8b48; BYTE $0x0e // movq (%rsi), %rcx - WORD $0x014c; BYTE $0xd1 // addq %r10, %rcx - LONG $0x1a448d4f; BYTE $0xfd // leaq $-3(%r10,%r11), %r8 - LONG $0x000010e9; BYTE $0x00 // jmp LBB29_1, $16(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB29_19: - WORD $0x0148; BYTE $0xd9 // addq %rbx, %rcx - -LBB29_1: - WORD $0x394c; BYTE $0xc1 // cmpq %r8, %rcx - LONG $0x00e1830f; WORD $0x0000 // jae LBB29_2, $225(%rip) - LONG $0x000001bb; BYTE $0x00 // movl $1, %ebx - WORD $0x3980; BYTE $0x00 // cmpb $0, (%rcx) - LONG $0xffe6890f; WORD $0xffff // jns LBB29_19, $-26(%rip) - WORD $0x018b // movl (%rcx), %eax - WORD $0xc789 // movl %eax, %edi - LONG $0xc0f0e781; WORD $0x00c0 // andl $12632304, %edi - LONG $0x80e0ff81; WORD $0x0080 // cmpl $8421600, %edi - LONG $0x0030850f; WORD $0x0000 // jne LBB29_10, $48(%rip) - WORD $0xc789 // movl %eax, %edi - LONG $0x200fe781; WORD $0x0000 // andl $8207, %edi - LONG $0x200dff81; WORD $0x0000 // cmpl $8205, %edi - LONG $0x001c840f; WORD $0x0000 // je LBB29_10, $28(%rip) - LONG $0x000003bb; BYTE $0x00 // movl $3, %ebx - WORD $0xff85 // testl %edi, %edi - LONG $0xffaf850f; WORD $0xffff // jne LBB29_19, $-81(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB29_10: - WORD $0xc789 // movl %eax, %edi - LONG $0xc0e0e781; WORD $0x0000 // andl $49376, %edi - LONG $0x80c0ff81; WORD $0x0000 // cmpl $32960, %edi - LONG $0x0010850f; WORD $0x0000 // jne LBB29_12, $16(%rip) - WORD $0xc789 // movl %eax, %edi - LONG $0x000002bb; BYTE $0x00 // movl $2, %ebx - WORD $0xe783; BYTE $0x1e // andl $30, %edi - LONG $0xff7c850f; WORD $0xffff // jne LBB29_19, $-132(%rip) - -LBB29_12: - WORD $0xc789 // movl %eax, %edi - LONG $0xc0f8e781; WORD $0xc0c0 // andl $-1061109512, %edi - LONG $0x80f0ff81; WORD $0x8080 // cmpl $-2139062032, %edi - LONG $0x0026850f; WORD $0x0000 // jne LBB29_16, $38(%rip) - WORD $0xc789 // movl %eax, %edi - LONG $0x3007e781; WORD $0x0000 // andl $12295, %edi - LONG $0x0018840f; WORD $0x0000 // je LBB29_16, $24(%rip) - LONG $0x000004bb; BYTE $0x00 // movl $4, %ebx - WORD $0x04a8 // testb $4, %al - LONG $0xff4d840f; WORD $0xffff // je LBB29_19, $-179(%rip) - LONG $0x00300325; BYTE $0x00 // andl $12291, %eax - LONG $0xff42840f; WORD $0xffff // je LBB29_19, $-190(%rip) - -LBB29_16: - WORD $0x8948; BYTE $0xcf // movq %rcx, %rdi - WORD $0x294c; BYTE $0xd7 // subq %r10, %rdi - WORD $0x8b48; BYTE $0x1a // movq (%rdx), %rbx - LONG $0x00fb8148; WORD $0x0010; BYTE $0x00 // cmpq $4096, %rbx - LONG $0x0187830f; WORD $0x0000 // jae LBB29_17, $391(%rip) - WORD $0x6348; BYTE $0xc7 // movslq %edi, %rax - LONG $0x017b8d48 // leaq $1(%rbx), %rdi - WORD $0x8948; BYTE $0x3a // movq %rdi, (%rdx) - LONG $0xda448948; BYTE $0x08 // movq %rax, $8(%rdx,%rbx,8) - LONG $0x000001bb; BYTE $0x00 // movl $1, %ebx - LONG $0xffff13e9; BYTE $0xff // jmp LBB29_19, $-237(%rip) - -LBB29_2: - WORD $0x014d; BYTE $0xd3 // addq %r10, %r11 - WORD $0x394c; BYTE $0xd9 // cmpq %r11, %rcx - LONG $0x013e830f; WORD $0x0000 // jae LBB29_36, $318(%rip) - LONG $0xdc458d4c // leaq $-36(%rbp), %r8 - LONG $0xda4d8d4c // leaq $-38(%rbp), %r9 - LONG $0x000016e9; BYTE $0x00 // jmp LBB29_4, $22(%rip) - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB29_5: - WORD $0xff48; BYTE $0xc1 // incq %rcx - WORD $0x394c; BYTE $0xd9 // cmpq %r11, %rcx - LONG $0x011b830f; WORD $0x0000 // jae LBB29_36, $283(%rip) - -LBB29_4: - WORD $0x3980; BYTE $0x00 // cmpb $0, (%rcx) - LONG $0xffeb890f; WORD $0xffff // jns LBB29_5, $-21(%rip) - LONG $0x00dc45c6 // movb $0, $-36(%rbp) - LONG $0x00da45c6 // movb $0, $-38(%rbp) - WORD $0x894c; BYTE $0xdb // movq %r11, %rbx - WORD $0x2948; BYTE $0xcb // subq %rcx, %rbx - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0x0035820f; WORD $0x0000 // jb LBB29_21, $53(%rip) - LONG $0x21b60f44 // movzbl (%rcx), %r12d - LONG $0x71b60f44; BYTE $0x01 // movzbl $1(%rcx), %r14d - LONG $0xdc658844 // movb %r12b, $-36(%rbp) - LONG $0x02798d4c // leaq $2(%rcx), %r15 - LONG $0xfec38348 // addq $-2, %rbx - WORD $0x894c; BYTE $0xcf // movq %r9, %rdi - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x0029840f; WORD $0x0000 // je LBB29_24, $41(%rip) - -LBB29_25: - LONG $0x07b60f41 // movzbl (%r15), %eax - WORD $0x0788 // movb %al, (%rdi) - LONG $0x65b60f44; BYTE $0xdc // movzbl $-36(%rbp), %r12d - LONG $0xda7db60f // movzbl $-38(%rbp), %edi - LONG $0x000017e9; BYTE $0x00 // jmp LBB29_26, $23(%rip) - -LBB29_21: - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0x894c; BYTE $0xc7 // movq %r8, %rdi - WORD $0x8949; BYTE $0xcf // movq %rcx, %r15 - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0xffd7850f; WORD $0xffff // jne LBB29_25, $-41(%rip) - -LBB29_24: - WORD $0xff31 // xorl %edi, %edi - -LBB29_26: - LONG $0xc7b60f40 // movzbl %dil, %eax - WORD $0xe0c1; BYTE $0x10 // shll $16, %eax - LONG $0xdeb60f41 // movzbl %r14b, %ebx - WORD $0xe3c1; BYTE $0x08 // shll $8, %ebx - LONG $0xfcb60f41 // movzbl %r12b, %edi - WORD $0xdf09 // orl %ebx, %edi - WORD $0xf809 // orl %edi, %eax - LONG $0xc0c0f025; BYTE $0x00 // andl $12632304, %eax - LONG $0x8080e03d; BYTE $0x00 // cmpl $8421600, %eax - LONG $0x0021850f; WORD $0x0000 // jne LBB29_29, $33(%rip) - WORD $0xf889 // movl %edi, %eax - LONG $0x00200f25; BYTE $0x00 // andl $8207, %eax - LONG $0x00200d3d; BYTE $0x00 // cmpl $8205, %eax - LONG $0x000f840f; WORD $0x0000 // je LBB29_29, $15(%rip) - LONG $0x000003bb; BYTE $0x00 // movl $3, %ebx - WORD $0xc085 // testl %eax, %eax - LONG $0x0023850f; WORD $0x0000 // jne LBB29_34, $35(%rip) - WORD $0x9090 // .p2align 4, 0x90 - -LBB29_29: - LONG $0x1ec4f641 // testb $30, %r12b - LONG $0x0028840f; WORD $0x0000 // je LBB29_31, $40(%rip) - LONG $0xc0e0e781; WORD $0x0000 // andl $49376, %edi - LONG $0x000002bb; BYTE $0x00 // movl $2, %ebx - LONG $0x80c0ff81; WORD $0x0000 // cmpl $32960, %edi - LONG $0x0011850f; WORD $0x0000 // jne LBB29_31, $17(%rip) - -LBB29_34: - WORD $0x0148; BYTE $0xd9 // addq %rbx, %rcx - WORD $0x394c; BYTE $0xd9 // cmpq %r11, %rcx - LONG $0xff1f820f; WORD $0xffff // jb LBB29_4, $-225(%rip) - LONG $0x000035e9; BYTE $0x00 // jmp LBB29_36, $53(%rip) - -LBB29_31: - WORD $0x8948; BYTE $0xc8 // movq %rcx, %rax - WORD $0x294c; BYTE $0xd0 // subq %r10, %rax - WORD $0x8b48; BYTE $0x3a // movq (%rdx), %rdi - LONG $0x00ff8148; WORD $0x0010; BYTE $0x00 // cmpq $4096, %rdi - LONG $0x0034830f; WORD $0x0000 // jae LBB29_32, $52(%rip) - WORD $0x9848 // cltq - LONG $0x015f8d48 // leaq $1(%rdi), %rbx - WORD $0x8948; BYTE $0x1a // movq %rbx, (%rdx) - LONG $0xfa448948; BYTE $0x08 // movq %rax, $8(%rdx,%rdi,8) - LONG $0x000001bb; BYTE $0x00 // movl $1, %ebx - WORD $0x0148; BYTE $0xd9 // addq %rbx, %rcx - WORD $0x394c; BYTE $0xd9 // cmpq %r11, %rcx - LONG $0xfee5820f; WORD $0xffff // jb LBB29_4, $-283(%rip) - -LBB29_36: - WORD $0x294c; BYTE $0xd1 // subq %r10, %rcx - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - WORD $0xc031 // xorl %eax, %eax - -LBB29_37: - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB29_32: - WORD $0x8948; BYTE $0x06 // movq %rax, (%rsi) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xffffe4e9; BYTE $0xff // jmp LBB29_37, $-28(%rip) - -LBB29_17: - WORD $0x8948; BYTE $0x3e // movq %rdi, (%rsi) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xffffd5e9; BYTE $0xff // jmp LBB29_37, $-43(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -_validate_utf8_fast: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax - WORD $0x8b4c; BYTE $0x17 // movq (%rdi), %r10 - LONG $0x085f8b4c // movq $8(%rdi), %r11 - LONG $0x1a748d4b; BYTE $0xfd // leaq $-3(%r10,%r11), %rsi - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - WORD $0x3949; BYTE $0xf2 // cmpq %rsi, %r10 - LONG $0x00e0830f; WORD $0x0000 // jae LBB30_14, $224(%rip) - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - LONG $0x000016e9; BYTE $0x00 // jmp LBB30_3, $22(%rip) - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB30_2: - WORD $0x0148; BYTE $0xd0 // addq %rdx, %rax - WORD $0x3948; BYTE $0xf0 // cmpq %rsi, %rax - LONG $0x00c2830f; WORD $0x0000 // jae LBB30_14, $194(%rip) - -LBB30_3: - LONG $0x000001ba; BYTE $0x00 // movl $1, %edx - WORD $0x3880; BYTE $0x00 // cmpb $0, (%rax) - LONG $0xffe6890f; WORD $0xffff // jns LBB30_2, $-26(%rip) - WORD $0x388b // movl (%rax), %edi - WORD $0xf989 // movl %edi, %ecx - LONG $0xc0f0e181; WORD $0x00c0 // andl $12632304, %ecx - LONG $0x80e0f981; WORD $0x0080 // cmpl $8421600, %ecx - LONG $0x0030850f; WORD $0x0000 // jne LBB30_7, $48(%rip) - WORD $0xf989 // movl %edi, %ecx - LONG $0x200fe181; WORD $0x0000 // andl $8207, %ecx - LONG $0x200df981; WORD $0x0000 // cmpl $8205, %ecx - LONG $0x001c840f; WORD $0x0000 // je LBB30_7, $28(%rip) - LONG $0x000003ba; BYTE $0x00 // movl $3, %edx - WORD $0xc985 // testl %ecx, %ecx - LONG $0xffaf850f; WORD $0xffff // jne LBB30_2, $-81(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB30_7: - WORD $0xf989 // movl %edi, %ecx - LONG $0xc0e0e181; WORD $0x0000 // andl $49376, %ecx - LONG $0x80c0f981; WORD $0x0000 // cmpl $32960, %ecx - LONG $0x0010850f; WORD $0x0000 // jne LBB30_9, $16(%rip) - WORD $0xf989 // movl %edi, %ecx - LONG $0x000002ba; BYTE $0x00 // movl $2, %edx - WORD $0xe183; BYTE $0x1e // andl $30, %ecx - LONG $0xff7c850f; WORD $0xffff // jne LBB30_2, $-132(%rip) - -LBB30_9: - WORD $0xf989 // movl %edi, %ecx - LONG $0xc0f8e181; WORD $0xc0c0 // andl $-1061109512, %ecx - LONG $0x80f0f981; WORD $0x8080 // cmpl $-2139062032, %ecx - LONG $0x0029850f; WORD $0x0000 // jne LBB30_13, $41(%rip) - WORD $0xf989 // movl %edi, %ecx - LONG $0x3007e181; WORD $0x0000 // andl $12295, %ecx - LONG $0x001b840f; WORD $0x0000 // je LBB30_13, $27(%rip) - LONG $0x000004ba; BYTE $0x00 // movl $4, %edx - LONG $0x04c7f640 // testb $4, %dil - LONG $0xff4b840f; WORD $0xffff // je LBB30_2, $-181(%rip) - LONG $0x3003e781; WORD $0x0000 // andl $12291, %edi - LONG $0xff3f840f; WORD $0xffff // je LBB30_2, $-193(%rip) - -LBB30_13: - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x014c; BYTE $0xd0 // addq %r10, %rax - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB30_14: - WORD $0x014d; BYTE $0xd3 // addq %r10, %r11 - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - LONG $0x0103830f; WORD $0x0000 // jae LBB30_30, $259(%rip) - LONG $0xf4458d4c // leaq $-12(%rbp), %r8 - LONG $0xf24d8d4c // leaq $-14(%rbp), %r9 - LONG $0x000015e9; BYTE $0x00 // jmp LBB30_17, $21(%rip) - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB30_16: - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - LONG $0x00e1830f; WORD $0x0000 // jae LBB30_30, $225(%rip) - -LBB30_17: - WORD $0x3880; BYTE $0x00 // cmpb $0, (%rax) - LONG $0xffeb890f; WORD $0xffff // jns LBB30_16, $-21(%rip) - LONG $0x00f445c6 // movb $0, $-12(%rbp) - LONG $0x00f245c6 // movb $0, $-14(%rbp) - WORD $0x894c; BYTE $0xda // movq %r11, %rdx - WORD $0x2948; BYTE $0xc2 // subq %rax, %rdx - LONG $0x02fa8348 // cmpq $2, %rdx - LONG $0x0031820f; WORD $0x0000 // jb LBB30_21, $49(%rip) - WORD $0xb60f; BYTE $0x30 // movzbl (%rax), %esi - LONG $0x0178b60f // movzbl $1(%rax), %edi - LONG $0xf4758840 // movb %sil, $-12(%rbp) - LONG $0x02488d48 // leaq $2(%rax), %rcx - LONG $0xfec28348 // addq $-2, %rdx - WORD $0x894c; BYTE $0xcb // movq %r9, %rbx - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x0025840f; WORD $0x0000 // je LBB30_22, $37(%rip) - -LBB30_20: - WORD $0xb60f; BYTE $0x09 // movzbl (%rcx), %ecx - WORD $0x0b88 // movb %cl, (%rbx) - LONG $0xf475b60f // movzbl $-12(%rbp), %esi - LONG $0xf24db60f // movzbl $-14(%rbp), %ecx - LONG $0x000015e9; BYTE $0x00 // jmp LBB30_23, $21(%rip) - -LBB30_21: - WORD $0xf631 // xorl %esi, %esi - WORD $0xff31 // xorl %edi, %edi - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0xffdb850f; WORD $0xffff // jne LBB30_20, $-37(%rip) - -LBB30_22: - WORD $0xc931 // xorl %ecx, %ecx - -LBB30_23: - WORD $0xb60f; BYTE $0xc9 // movzbl %cl, %ecx - WORD $0xe1c1; BYTE $0x10 // shll $16, %ecx - LONG $0xffb60f40 // movzbl %dil, %edi - WORD $0xe7c1; BYTE $0x08 // shll $8, %edi - LONG $0xd6b60f40 // movzbl %sil, %edx - WORD $0xfa09 // orl %edi, %edx - WORD $0xd109 // orl %edx, %ecx - LONG $0xc0f0e181; WORD $0x00c0 // andl $12632304, %ecx - LONG $0x80e0f981; WORD $0x0080 // cmpl $8421600, %ecx - LONG $0x0026850f; WORD $0x0000 // jne LBB30_26, $38(%rip) - WORD $0xd789 // movl %edx, %edi - LONG $0x200fe781; WORD $0x0000 // andl $8207, %edi - LONG $0x200dff81; WORD $0x0000 // cmpl $8205, %edi - LONG $0x0012840f; WORD $0x0000 // je LBB30_26, $18(%rip) - LONG $0x000003b9; BYTE $0x00 // movl $3, %ecx - WORD $0xff85 // testl %edi, %edi - LONG $0x0026850f; WORD $0x0000 // jne LBB30_28, $38(%rip) - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB30_26: - LONG $0x1ec6f640 // testb $30, %sil - LONG $0xff07840f; WORD $0xffff // je LBB30_13, $-249(%rip) - LONG $0xc0e0e281; WORD $0x0000 // andl $49376, %edx - LONG $0x000002b9; BYTE $0x00 // movl $2, %ecx - LONG $0x80c0fa81; WORD $0x0000 // cmpl $32960, %edx - LONG $0xfef0850f; WORD $0xffff // jne LBB30_13, $-272(%rip) - -LBB30_28: - WORD $0x0148; BYTE $0xc8 // addq %rcx, %rax - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - LONG $0xff1f820f; WORD $0xffff // jb LBB30_17, $-225(%rip) - -LBB30_30: - WORD $0xc031 // xorl %eax, %eax - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x0000000000000000; QUAD $0x0000000000000000; QUAD $0x0000000000000000; WORD $0x0000 // .p2align 5, 0x00 - -LCPI31_0: - QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' - QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' - - // .p2align 4, 0x90 -_f32toa: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0xc07ef9c5 // vmovd %xmm0, %eax - WORD $0xc189 // movl %eax, %ecx - WORD $0xe9c1; BYTE $0x17 // shrl $23, %ecx - WORD $0xb60f; BYTE $0xd9 // movzbl %cl, %ebx - LONG $0x00fffb81; WORD $0x0000 // cmpl $255, %ebx - LONG $0x0cf1840f; WORD $0x0000 // je LBB31_138, $3313(%rip) - WORD $0x07c6; BYTE $0x2d // movb $45, (%rdi) - WORD $0x8941; BYTE $0xc1 // movl %eax, %r9d - LONG $0x1fe9c141 // shrl $31, %r9d - LONG $0x0f048d4e // leaq (%rdi,%r9), %r8 - LONG $0xffffffa9; BYTE $0x7f // testl $2147483647, %eax - LONG $0x01bf840f; WORD $0x0000 // je LBB31_11, $447(%rip) - LONG $0x7fffff25; BYTE $0x00 // andl $8388607, %eax - WORD $0xdb85 // testl %ebx, %ebx - LONG $0x0cd3840f; WORD $0x0000 // je LBB31_139, $3283(%rip) - LONG $0x0000b08d; WORD $0x0080 // leal $8388608(%rax), %esi - LONG $0x6abb8d44; WORD $0xffff; BYTE $0xff // leal $-150(%rbx), %r15d - WORD $0x4b8d; BYTE $0x81 // leal $-127(%rbx), %ecx - WORD $0xf983; BYTE $0x17 // cmpl $23, %ecx - LONG $0x0019870f; WORD $0x0000 // ja LBB31_5, $25(%rip) - WORD $0x8944; BYTE $0xf9 // movl %r15d, %ecx - WORD $0xd9f7 // negl %ecx - LONG $0xffc2c748; WORD $0xffff; BYTE $0xff // movq $-1, %rdx - WORD $0xd348; BYTE $0xe2 // shlq %cl, %rdx - WORD $0xd2f7 // notl %edx - WORD $0xf285 // testl %esi, %edx - LONG $0x03fc840f; WORD $0x0000 // je LBB31_32, $1020(%rip) - -LBB31_5: - WORD $0x8941; BYTE $0xf6 // movl %esi, %r14d - LONG $0x01e68341 // andl $1, %r14d - WORD $0xc085 // testl %eax, %eax - WORD $0x940f; BYTE $0xc0 // sete %al - WORD $0xfb83; BYTE $0x01 // cmpl $1, %ebx - WORD $0x970f; BYTE $0xc1 // seta %cl - WORD $0xc120 // andb %al, %cl - WORD $0xb60f; BYTE $0xc9 // movzbl %cl, %ecx - WORD $0x8941; BYTE $0xf2 // movl %esi, %r10d - LONG $0x02e2c141 // shll $2, %r10d - LONG $0xfeb1448d // leal $-2(%rcx,%rsi,4), %eax - LONG $0x13d76941; WORD $0x1344; BYTE $0x00 // imull $1262611, %r15d, %edx - WORD $0xdb31 // xorl %ebx, %ebx - WORD $0xc984 // testb %cl, %cl - LONG $0x0101bb41; WORD $0xfff8 // movl $-524031, %r11d - LONG $0xdb440f44 // cmovel %ebx, %r11d - WORD $0x0141; BYTE $0xd3 // addl %edx, %r11d - LONG $0x16fbc141 // sarl $22, %r11d - LONG $0xb1cb6941; WORD $0xe56c; BYTE $0xff // imull $-1741647, %r11d, %ecx - WORD $0xe9c1; BYTE $0x13 // shrl $19, %ecx - WORD $0x0144; BYTE $0xf9 // addl %r15d, %ecx - LONG $0x00001fba; BYTE $0x00 // movl $31, %edx - WORD $0x2944; BYTE $0xda // subl %r11d, %edx - LONG $0x991d8d48; WORD $0x00b4; BYTE $0x00 // leaq $46233(%rip), %rbx /* _pow10_ceil_sig_f32.g(%rip) */ - WORD $0xc1fe // incb %cl - WORD $0xe0d3 // shll %cl, %eax - LONG $0xd3248b4c // movq (%rbx,%rdx,8), %r12 - WORD $0xf749; BYTE $0xe4 // mulq %r12 - LONG $0x20e8c148 // shrq $32, %rax - WORD $0xdb31 // xorl %ebx, %ebx - WORD $0xf883; BYTE $0x01 // cmpl $1, %eax - WORD $0x970f; BYTE $0xc3 // seta %bl - WORD $0xd341; BYTE $0xe2 // shll %cl, %r10d - WORD $0xd309 // orl %edx, %ebx - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - WORD $0xf749; BYTE $0xe4 // mulq %r12 - WORD $0x8949; BYTE $0xd2 // movq %rdx, %r10 - LONG $0x20e8c148 // shrq $32, %rax - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - WORD $0xf883; BYTE $0x01 // cmpl $1, %eax - LONG $0xc7970f41 // seta %r15b - LONG $0x02b5048d; WORD $0x0000; BYTE $0x00 // leal $2(,%rsi,4), %eax - WORD $0xe0d3 // shll %cl, %eax - WORD $0x0945; BYTE $0xd7 // orl %r10d, %r15d - WORD $0xf749; BYTE $0xe4 // mulq %r12 - LONG $0x20e8c148 // shrq $32, %rax - WORD $0xc931 // xorl %ecx, %ecx - WORD $0xf883; BYTE $0x01 // cmpl $1, %eax - WORD $0x970f; BYTE $0xc1 // seta %cl - WORD $0xd109 // orl %edx, %ecx - WORD $0x0144; BYTE $0xf3 // addl %r14d, %ebx - WORD $0x2944; BYTE $0xf1 // subl %r14d, %ecx - LONG $0x28ff8341 // cmpl $40, %r15d - LONG $0x003d820f; WORD $0x0000 // jb LBB31_7, $61(%rip) - WORD $0x8944; BYTE $0xd0 // movl %r10d, %eax - LONG $0xcccdbd41; WORD $0xcccc // movl $3435973837, %r13d - LONG $0xe8af0f4c // imulq %rax, %r13 - LONG $0x25edc149 // shrq $37, %r13 - WORD $0x8941; BYTE $0xde // movl %ebx, %r14d - QUAD $0x00000000ed348d4a // leaq (,%r13,8), %rsi - LONG $0xb6048d48 // leaq (%rsi,%rsi,4), %rax - WORD $0x394c; BYTE $0xf0 // cmpq %r14, %rax - LONG $0xc6920f41 // setb %r14b - LONG $0xb6648d4c; BYTE $0x28 // leaq $40(%rsi,%rsi,4), %r12 - WORD $0xce89 // movl %ecx, %esi - WORD $0x3949; BYTE $0xf4 // cmpq %rsi, %r12 - WORD $0x960f; BYTE $0xc0 // setbe %al - WORD $0x3044; BYTE $0xf0 // xorb %r14b, %al - LONG $0x01e9840f; WORD $0x0000 // je LBB31_16, $489(%rip) - -LBB31_7: - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - LONG $0x02e8c148 // shrq $2, %rax - WORD $0x8944; BYTE $0xd6 // movl %r10d, %esi - WORD $0xe683; BYTE $0xfc // andl $-4, %esi - WORD $0xf339 // cmpl %esi, %ebx - LONG $0xc6970f41 // seta %r14b - WORD $0x568d; BYTE $0x04 // leal $4(%rsi), %edx - WORD $0xca39 // cmpl %ecx, %edx - WORD $0x960f; BYTE $0xc3 // setbe %bl - WORD $0x3044; BYTE $0xf3 // xorb %r14b, %bl - LONG $0x0074840f; WORD $0x0000 // je LBB31_12, $116(%rip) - WORD $0xce83; BYTE $0x02 // orl $2, %esi - LONG $0x0001bd41; WORD $0x0000 // movl $1, %r13d - WORD $0x3941; BYTE $0xf7 // cmpl %esi, %r15d - LONG $0x000e870f; WORD $0x0000 // ja LBB31_10, $14(%rip) - WORD $0x940f; BYTE $0xc1 // sete %cl - LONG $0x02eac041 // shrb $2, %r10b - WORD $0x2041; BYTE $0xca // andb %cl, %r10b - LONG $0xeab60f45 // movzbl %r10b, %r13d - -LBB31_10: - WORD $0x0141; BYTE $0xc5 // addl %eax, %r13d - LONG $0xa0fd8141; WORD $0x0186; BYTE $0x00 // cmpl $100000, %r13d - LONG $0x0059820f; WORD $0x0000 // jb LBB31_17, $89(%rip) - -LBB31_13: - LONG $0x000006be; BYTE $0x00 // movl $6, %esi - LONG $0x40fd8141; WORD $0x0f42; BYTE $0x00 // cmpl $1000000, %r13d - LONG $0x0086820f; WORD $0x0000 // jb LBB31_22, $134(%rip) - LONG $0x000007be; BYTE $0x00 // movl $7, %esi - LONG $0x80fd8141; WORD $0x9896; BYTE $0x00 // cmpl $10000000, %r13d - LONG $0x0074820f; WORD $0x0000 // jb LBB31_22, $116(%rip) - LONG $0x00fd8141; WORD $0xf5e1; BYTE $0x05 // cmpl $100000000, %r13d - LONG $0x000009be; BYTE $0x00 // movl $9, %esi - LONG $0x000060e9; BYTE $0x00 // jmp LBB31_21, $96(%rip) - -LBB31_11: - LONG $0x3000c641 // movb $48, (%r8) - WORD $0x2941; BYTE $0xf8 // subl %edi, %r8d - WORD $0xff41; BYTE $0xc0 // incl %r8d - LONG $0x000af9e9; BYTE $0x00 // jmp LBB31_137, $2809(%rip) - -LBB31_12: - WORD $0xd139 // cmpl %edx, %ecx - WORD $0xd883; BYTE $0xff // sbbl $-1, %eax - WORD $0x8941; BYTE $0xc5 // movl %eax, %r13d - LONG $0xa0fd8141; WORD $0x0186; BYTE $0x00 // cmpl $100000, %r13d - LONG $0xffa7830f; WORD $0xffff // jae LBB31_13, $-89(%rip) - -LBB31_17: - LONG $0x000001be; BYTE $0x00 // movl $1, %esi - LONG $0x0afd8341 // cmpl $10, %r13d - LONG $0x0030820f; WORD $0x0000 // jb LBB31_22, $48(%rip) - LONG $0x000002be; BYTE $0x00 // movl $2, %esi - LONG $0x64fd8341 // cmpl $100, %r13d - LONG $0x0021820f; WORD $0x0000 // jb LBB31_22, $33(%rip) - LONG $0x000003be; BYTE $0x00 // movl $3, %esi - LONG $0xe8fd8141; WORD $0x0003; BYTE $0x00 // cmpl $1000, %r13d - LONG $0x000f820f; WORD $0x0000 // jb LBB31_22, $15(%rip) - LONG $0x10fd8141; WORD $0x0027; BYTE $0x00 // cmpl $10000, %r13d - LONG $0x000005be; BYTE $0x00 // movl $5, %esi - -LBB31_21: - WORD $0xde83; BYTE $0x00 // sbbl $0, %esi - -LBB31_22: - LONG $0x1e148d46 // leal (%rsi,%r11), %r10d - LONG $0x1e448d42; BYTE $0x05 // leal $5(%rsi,%r11), %eax - WORD $0xf883; BYTE $0x1b // cmpl $27, %eax - LONG $0x0075820f; WORD $0x0000 // jb LBB31_26, $117(%rip) - WORD $0xf089 // movl %esi, %eax - LONG $0x00748d4d; BYTE $0x01 // leaq $1(%r8,%rax), %r14 - LONG $0x10fd8141; WORD $0x0027; BYTE $0x00 // cmpl $10000, %r13d - LONG $0x00f3820f; WORD $0x0000 // jb LBB31_30, $243(%rip) - WORD $0x8944; BYTE $0xe8 // movl %r13d, %eax - LONG $0xb71759bb; BYTE $0xd1 // movl $3518437209, %ebx - LONG $0xd8af0f48 // imulq %rax, %rbx - LONG $0x2debc148 // shrq $45, %rbx - LONG $0xd8f0c369; WORD $0xffff // imull $-10000, %ebx, %eax - WORD $0x0144; BYTE $0xe8 // addl %r13d, %eax - LONG $0x048b840f; WORD $0x0000 // je LBB31_62, $1163(%rip) - WORD $0xc189 // movl %eax, %ecx - LONG $0x1fc96948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rcx, %rcx - LONG $0x25e9c148 // shrq $37, %rcx - WORD $0xd16b; BYTE $0x64 // imull $100, %ecx, %edx - WORD $0xd029 // subl %edx, %eax - LONG $0x32158d48; WORD $0x003f; BYTE $0x00 // leaq $16178(%rip), %rdx /* _Digits(%rip) */ - LONG $0x4204b70f // movzwl (%rdx,%rax,2), %eax - LONG $0x46894166; BYTE $0xfe // movw %ax, $-2(%r14) - LONG $0x4a04b70f // movzwl (%rdx,%rcx,2), %eax - LONG $0x46894166; BYTE $0xfc // movw %ax, $-4(%r14) - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - LONG $0xfc4e8d49 // leaq $-4(%r14), %rcx - WORD $0xfb83; BYTE $0x64 // cmpl $100, %ebx - LONG $0x00ab830f; WORD $0x0000 // jae LBB31_64, $171(%rip) - -LBB31_31: - WORD $0xda89 // movl %ebx, %edx - LONG $0x0000e8e9; BYTE $0x00 // jmp LBB31_66, $232(%rip) - -LBB31_26: - WORD $0x8941; BYTE $0xf4 // movl %esi, %r12d - WORD $0x8545; BYTE $0xdb // testl %r11d, %r11d - LONG $0x021d880f; WORD $0x0000 // js LBB31_38, $541(%rip) - LONG $0x20348d4b // leaq (%r8,%r12), %rsi - LONG $0x10fd8141; WORD $0x0027; BYTE $0x00 // cmpl $10000, %r13d - LONG $0x028d820f; WORD $0x0000 // jb LBB31_43, $653(%rip) - WORD $0x8944; BYTE $0xe8 // movl %r13d, %eax - LONG $0xb71759b9; BYTE $0xd1 // movl $3518437209, %ecx - LONG $0xc8af0f48 // imulq %rax, %rcx - LONG $0x2de9c148 // shrq $45, %rcx - LONG $0xd8f0c169; WORD $0xffff // imull $-10000, %ecx, %eax - WORD $0x0144; BYTE $0xe8 // addl %r13d, %eax - LONG $0x1fd06948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rax, %rdx - LONG $0x25eac148 // shrq $37, %rdx - WORD $0xda6b; BYTE $0x64 // imull $100, %edx, %ebx - WORD $0xd829 // subl %ebx, %eax - LONG $0xbc1d8d48; WORD $0x003e; BYTE $0x00 // leaq $16060(%rip), %rbx /* _Digits(%rip) */ - LONG $0x4304b70f // movzwl (%rbx,%rax,2), %eax - LONG $0xfe468966 // movw %ax, $-2(%rsi) - LONG $0xfc468d48 // leaq $-4(%rsi), %rax - LONG $0x5314b70f // movzwl (%rbx,%rdx,2), %edx - LONG $0xfc568966 // movw %dx, $-4(%rsi) - WORD $0x8941; BYTE $0xcd // movl %ecx, %r13d - LONG $0x64fd8341 // cmpl $100, %r13d - LONG $0x0249830f; WORD $0x0000 // jae LBB31_44, $585(%rip) - -LBB31_29: - WORD $0x8944; BYTE $0xe9 // movl %r13d, %ecx - LONG $0x000286e9; BYTE $0x00 // jmp LBB31_46, $646(%rip) - -LBB31_16: - WORD $0x394c; BYTE $0xe6 // cmpq %r12, %rsi - LONG $0xffdd8341 // sbbl $-1, %r13d - WORD $0xff41; BYTE $0xc3 // incl %r11d - LONG $0xa0fd8141; WORD $0x0186; BYTE $0x00 // cmpl $100000, %r13d - LONG $0xfe54830f; WORD $0xffff // jae LBB31_13, $-428(%rip) - LONG $0xfffea8e9; BYTE $0xff // jmp LBB31_17, $-344(%rip) - -LBB31_30: - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x894c; BYTE $0xf1 // movq %r14, %rcx - WORD $0x8944; BYTE $0xeb // movl %r13d, %ebx - WORD $0xfb83; BYTE $0x64 // cmpl $100, %ebx - LONG $0xff55820f; WORD $0xffff // jb LBB31_31, $-171(%rip) - -LBB31_64: - WORD $0xff48; BYTE $0xc9 // decq %rcx - LONG $0x5b1d8d4c; WORD $0x003e; BYTE $0x00 // leaq $15963(%rip), %r11 /* _Digits(%rip) */ - QUAD $0x9090909090909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB31_65: - WORD $0xda89 // movl %ebx, %edx - LONG $0x1fd26948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rdx, %rdx - LONG $0x25eac148 // shrq $37, %rdx - WORD $0xc26b; BYTE $0x64 // imull $100, %edx, %eax - WORD $0xde89 // movl %ebx, %esi - WORD $0xc629 // subl %eax, %esi - LONG $0x04b70f41; BYTE $0x73 // movzwl (%r11,%rsi,2), %eax - LONG $0xff418966 // movw %ax, $-1(%rcx) - LONG $0xfec18348 // addq $-2, %rcx - LONG $0x270ffb81; WORD $0x0000 // cmpl $9999, %ebx - WORD $0xd389 // movl %edx, %ebx - LONG $0xffd1870f; WORD $0xffff // ja LBB31_65, $-47(%rip) - -LBB31_66: - LONG $0x01708d49 // leaq $1(%r8), %rsi - WORD $0xfa83; BYTE $0x0a // cmpl $10, %edx - LONG $0x001d820f; WORD $0x0000 // jb LBB31_68, $29(%rip) - WORD $0xd089 // movl %edx, %eax - LONG $0x0b0d8d48; WORD $0x003e; BYTE $0x00 // leaq $15883(%rip), %rcx /* _Digits(%rip) */ - WORD $0x148a; BYTE $0x41 // movb (%rcx,%rax,2), %dl - LONG $0x0141448a // movb $1(%rcx,%rax,2), %al - LONG $0x01508841 // movb %dl, $1(%r8) - LONG $0x02408841 // movb %al, $2(%r8) - LONG $0x000005e9; BYTE $0x00 // jmp LBB31_69, $5(%rip) - -LBB31_68: - WORD $0xc280; BYTE $0x30 // addb $48, %dl - WORD $0x1688 // movb %dl, (%rsi) - -LBB31_69: - WORD $0x294d; BYTE $0xce // subq %r9, %r14 - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB31_70: - LONG $0xff7e8041; BYTE $0x30 // cmpb $48, $-1(%r14) - LONG $0xff768d4d // leaq $-1(%r14), %r14 - LONG $0xfff1840f; WORD $0xffff // je LBB31_70, $-15(%rip) - WORD $0x8841; BYTE $0x10 // movb %dl, (%r8) - LONG $0x01468d49 // leaq $1(%r14), %rax - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x2948; BYTE $0xf1 // subq %rsi, %rcx - LONG $0x02f98348 // cmpq $2, %rcx - LONG $0x00068c0f; WORD $0x0000 // jl LBB31_73, $6(%rip) - WORD $0x06c6; BYTE $0x2e // movb $46, (%rsi) - WORD $0x8949; BYTE $0xc6 // movq %rax, %r14 - -LBB31_73: - LONG $0x6506c641 // movb $101, (%r14) - LONG $0xff428d41 // leal $-1(%r10), %eax - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x01228e0f; WORD $0x0000 // jle LBB31_76, $290(%rip) - LONG $0x0146c641; BYTE $0x2b // movb $43, $1(%r14) - WORD $0xf883; BYTE $0x0a // cmpl $10, %eax - LONG $0x01248c0f; WORD $0x0000 // jl LBB31_77, $292(%rip) - -LBB31_75: - WORD $0x9848 // cltq - LONG $0x8c0d8d48; WORD $0x003d; BYTE $0x00 // leaq $15756(%rip), %rcx /* _Digits(%rip) */ - LONG $0x4104b70f // movzwl (%rcx,%rax,2), %eax - LONG $0x46894166; BYTE $0x02 // movw %ax, $2(%r14) - LONG $0x04c68349 // addq $4, %r14 - WORD $0x894d; BYTE $0xf0 // movq %r14, %r8 - LONG $0x000889e9; BYTE $0x00 // jmp LBB31_136, $2185(%rip) - -LBB31_32: - WORD $0xeed3 // shrl %cl, %esi - LONG $0x86a0fe81; WORD $0x0001 // cmpl $100000, %esi - LONG $0x01f1820f; WORD $0x0000 // jb LBB31_52, $497(%rip) - LONG $0x000006b8; BYTE $0x00 // movl $6, %eax - LONG $0x4240fe81; WORD $0x000f // cmpl $1000000, %esi - LONG $0x0020820f; WORD $0x0000 // jb LBB31_36, $32(%rip) - LONG $0x000007b8; BYTE $0x00 // movl $7, %eax - LONG $0x9680fe81; WORD $0x0098 // cmpl $10000000, %esi - LONG $0x000f820f; WORD $0x0000 // jb LBB31_36, $15(%rip) - LONG $0xe100fe81; WORD $0x05f5 // cmpl $100000000, %esi - LONG $0x000009b8; BYTE $0x00 // movl $9, %eax - LONG $0x00d88348 // sbbq $0, %rax - -LBB31_36: - WORD $0x014c; BYTE $0xc0 // addq %r8, %rax - -LBB31_37: - WORD $0xf189 // movl %esi, %ecx - LONG $0xb71759ba; BYTE $0xd1 // movl $3518437209, %edx - LONG $0xd1af0f48 // imulq %rcx, %rdx - LONG $0x2deac148 // shrq $45, %rdx - LONG $0xd8f0ca69; WORD $0xffff // imull $-10000, %edx, %ecx - WORD $0xf101 // addl %esi, %ecx - LONG $0x1ff16948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rcx, %rsi - LONG $0x25eec148 // shrq $37, %rsi - WORD $0xde6b; BYTE $0x64 // imull $100, %esi, %ebx - WORD $0xd929 // subl %ebx, %ecx - LONG $0x071d8d48; WORD $0x003d; BYTE $0x00 // leaq $15623(%rip), %rbx /* _Digits(%rip) */ - LONG $0x4b0cb70f // movzwl (%rbx,%rcx,2), %ecx - LONG $0xfe488966 // movw %cx, $-2(%rax) - LONG $0x730cb70f // movzwl (%rbx,%rsi,2), %ecx - LONG $0xfc488966 // movw %cx, $-4(%rax) - WORD $0x8949; BYTE $0xc1 // movq %rax, %r9 - LONG $0xfcc08348 // addq $-4, %rax - WORD $0xd689 // movl %edx, %esi - WORD $0xfe83; BYTE $0x64 // cmpl $100, %esi - LONG $0x01ac830f; WORD $0x0000 // jae LBB31_56, $428(%rip) - LONG $0x0001efe9; BYTE $0x00 // jmp LBB31_58, $495(%rip) - -LBB31_38: - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x04878f0f; WORD $0x0000 // jg LBB31_96, $1159(%rip) - LONG $0x00c74166; WORD $0x2e30 // movw $11824, (%r8) - LONG $0x02c08349 // addq $2, %r8 - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x0474890f; WORD $0x0000 // jns LBB31_96, $1140(%rip) - WORD $0xd6f7 // notl %esi - WORD $0x2944; BYTE $0xde // subl %r11d, %esi - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - WORD $0xfe83; BYTE $0x7f // cmpl $127, %esi - LONG $0x043e820f; WORD $0x0000 // jb LBB31_94, $1086(%rip) - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x8949; BYTE $0xf7 // movq %rsi, %r15 - LONG $0x80e78349 // andq $-128, %r15 - LONG $0x80478d49 // leaq $-128(%r15), %rax - WORD $0x8949; BYTE $0xc6 // movq %rax, %r14 - LONG $0x07eec149 // shrq $7, %r14 - WORD $0xff49; BYTE $0xc6 // incq %r14 - WORD $0x8945; BYTE $0xf3 // movl %r14d, %r11d - LONG $0x03e38341 // andl $3, %r11d - LONG $0x01803d48; WORD $0x0000 // cmpq $384, %rax - LONG $0x0321830f; WORD $0x0000 // jae LBB31_88, $801(%rip) - WORD $0xdb31 // xorl %ebx, %ebx - LONG $0x0003c4e9; BYTE $0x00 // jmp LBB31_90, $964(%rip) - -LBB31_76: - LONG $0x0146c641; BYTE $0x2d // movb $45, $1(%r14) - WORD $0xd8f7 // negl %eax - WORD $0xf883; BYTE $0x0a // cmpl $10, %eax - LONG $0xfedc8d0f; WORD $0xffff // jge LBB31_75, $-292(%rip) - -LBB31_77: - WORD $0x3004 // addb $48, %al - LONG $0x02468841 // movb %al, $2(%r14) - LONG $0x03c68349 // addq $3, %r14 - WORD $0x894d; BYTE $0xf0 // movq %r14, %r8 - LONG $0x000771e9; BYTE $0x00 // jmp LBB31_136, $1905(%rip) - -LBB31_43: - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - LONG $0x64fd8341 // cmpl $100, %r13d - LONG $0xfdb7820f; WORD $0xffff // jb LBB31_29, $-585(%rip) - -LBB31_44: - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0x481d8d4c; WORD $0x003c; BYTE $0x00 // leaq $15432(%rip), %r11 /* _Digits(%rip) */ - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB31_45: - WORD $0x8944; BYTE $0xe9 // movl %r13d, %ecx - LONG $0x1fc96948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rcx, %rcx - LONG $0x25e9c148 // shrq $37, %rcx - WORD $0xd96b; BYTE $0x64 // imull $100, %ecx, %ebx - WORD $0x8944; BYTE $0xea // movl %r13d, %edx - WORD $0xda29 // subl %ebx, %edx - LONG $0x14b70f41; BYTE $0x53 // movzwl (%r11,%rdx,2), %edx - LONG $0xff508966 // movw %dx, $-1(%rax) - LONG $0xfec08348 // addq $-2, %rax - LONG $0x0ffd8141; WORD $0x0027; BYTE $0x00 // cmpl $9999, %r13d - WORD $0x8941; BYTE $0xcd // movl %ecx, %r13d - LONG $0xffcd870f; WORD $0xffff // ja LBB31_45, $-51(%rip) - -LBB31_46: - WORD $0x6349; BYTE $0xc2 // movslq %r10d, %rax - WORD $0xf983; BYTE $0x0a // cmpl $10, %ecx - LONG $0x0022820f; WORD $0x0000 // jb LBB31_48, $34(%rip) - WORD $0xc989 // movl %ecx, %ecx - LONG $0xf8158d48; WORD $0x003b; BYTE $0x00 // leaq $15352(%rip), %rdx /* _Digits(%rip) */ - LONG $0x4a0cb70f // movzwl (%rdx,%rcx,2), %ecx - LONG $0x08894166 // movw %cx, (%r8) - WORD $0x0149; BYTE $0xc0 // addq %rax, %r8 - WORD $0x3949; BYTE $0xc4 // cmpq %rax, %r12 - LONG $0x00178c0f; WORD $0x0000 // jl LBB31_49, $23(%rip) - LONG $0x0006f1e9; BYTE $0x00 // jmp LBB31_136, $1777(%rip) - -LBB31_48: - WORD $0xc180; BYTE $0x30 // addb $48, %cl - WORD $0x8841; BYTE $0x08 // movb %cl, (%r8) - WORD $0x0149; BYTE $0xc0 // addq %rax, %r8 - WORD $0x3949; BYTE $0xc4 // cmpq %rax, %r12 - LONG $0x06df8d0f; WORD $0x0000 // jge LBB31_136, $1759(%rip) - -LBB31_49: - LONG $0x21048d4b // leaq (%r9,%r12), %rax - LONG $0x075c8d4c; BYTE $0x01 // leaq $1(%rdi,%rax), %r11 - WORD $0x394d; BYTE $0xc3 // cmpq %r8, %r11 - LONG $0xd8460f4d // cmovbeq %r8, %r11 - LONG $0x0f0c8d4a // leaq (%rdi,%r9), %rcx - WORD $0x014c; BYTE $0xe1 // addq %r12, %rcx - WORD $0x2949; BYTE $0xcb // subq %rcx, %r11 - LONG $0x80fb8149; WORD $0x0000; BYTE $0x00 // cmpq $128, %r11 - LONG $0x0206820f; WORD $0x0000 // jb LBB31_85, $518(%rip) - WORD $0x894d; BYTE $0xda // movq %r11, %r10 - LONG $0x80e28349 // andq $-128, %r10 - LONG $0x804a8d49 // leaq $-128(%r10), %rcx - WORD $0x8948; BYTE $0xcb // movq %rcx, %rbx - LONG $0x07ebc148 // shrq $7, %rbx - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0xda89 // movl %ebx, %edx - WORD $0xe283; BYTE $0x03 // andl $3, %edx - LONG $0x80f98148; WORD $0x0001; BYTE $0x00 // cmpq $384, %rcx - LONG $0x00d7830f; WORD $0x0000 // jae LBB31_78, $215(%rip) - WORD $0xc031 // xorl %eax, %eax - LONG $0x000188e9; BYTE $0x00 // jmp LBB31_80, $392(%rip) - -LBB31_52: - LONG $0x0001b941; WORD $0x0000 // movl $1, %r9d - WORD $0xfe83; BYTE $0x0a // cmpl $10, %esi - LONG $0x0021820f; WORD $0x0000 // jb LBB31_55, $33(%rip) - LONG $0x0002b941; WORD $0x0000 // movl $2, %r9d - WORD $0xfe83; BYTE $0x64 // cmpl $100, %esi - LONG $0x0012820f; WORD $0x0000 // jb LBB31_55, $18(%rip) - LONG $0x0003b941; WORD $0x0000 // movl $3, %r9d - LONG $0x03e8fe81; WORD $0x0000 // cmpl $1000, %esi - LONG $0x01bc830f; WORD $0x0000 // jae LBB31_86, $444(%rip) - -LBB31_55: - WORD $0x014d; BYTE $0xc1 // addq %r8, %r9 - WORD $0x894c; BYTE $0xc8 // movq %r9, %rax - WORD $0xfe83; BYTE $0x64 // cmpl $100, %esi - LONG $0x0048820f; WORD $0x0000 // jb LBB31_58, $72(%rip) - -LBB31_56: - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0x2f158d4c; WORD $0x003b; BYTE $0x00 // leaq $15151(%rip), %r10 /* _Digits(%rip) */ - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB31_57: - WORD $0xf389 // movl %esi, %ebx - WORD $0xf689 // movl %esi, %esi - LONG $0x1ff66948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rsi, %rsi - LONG $0x25eec148 // shrq $37, %rsi - WORD $0xce6b; BYTE $0x64 // imull $100, %esi, %ecx - WORD $0xda89 // movl %ebx, %edx - WORD $0xca29 // subl %ecx, %edx - LONG $0x0cb70f41; BYTE $0x52 // movzwl (%r10,%rdx,2), %ecx - LONG $0xff488966 // movw %cx, $-1(%rax) - LONG $0xfec08348 // addq $-2, %rax - LONG $0x270ffb81; WORD $0x0000 // cmpl $9999, %ebx - LONG $0xffd1870f; WORD $0xffff // ja LBB31_57, $-47(%rip) - -LBB31_58: - WORD $0xfe83; BYTE $0x0a // cmpl $10, %esi - LONG $0x0016820f; WORD $0x0000 // jb LBB31_60, $22(%rip) - WORD $0xf089 // movl %esi, %eax - LONG $0xdf0d8d48; WORD $0x003a; BYTE $0x00 // leaq $15071(%rip), %rcx /* _Digits(%rip) */ - LONG $0x4104b70f // movzwl (%rcx,%rax,2), %eax - LONG $0x00894166 // movw %ax, (%r8) - LONG $0x000007e9; BYTE $0x00 // jmp LBB31_61, $7(%rip) - -LBB31_60: - LONG $0x30c68040 // addb $48, %sil - WORD $0x8841; BYTE $0x30 // movb %sil, (%r8) - -LBB31_61: - WORD $0x2941; BYTE $0xf9 // subl %edi, %r9d - WORD $0x8945; BYTE $0xc8 // movl %r9d, %r8d - LONG $0x0005d5e9; BYTE $0x00 // jmp LBB31_137, $1493(%rip) - -LBB31_62: - LONG $0x0004b941; WORD $0x0000 // movl $4, %r9d - LONG $0xfc4e8d49 // leaq $-4(%r14), %rcx - WORD $0xfb83; BYTE $0x64 // cmpl $100, %ebx - LONG $0xfb9d820f; WORD $0xffff // jb LBB31_31, $-1123(%rip) - LONG $0xfffc43e9; BYTE $0xff // jmp LBB31_64, $-957(%rip) - -LBB31_78: - QUAD $0x000001e0078c8d48 // leaq $480(%rdi,%rax), %rcx - LONG $0xfce38348 // andq $-4, %rbx - WORD $0xf748; BYTE $0xdb // negq %rbx - WORD $0xc031 // xorl %eax, %eax - QUAD $0xfffff87f056ffdc5 // vmovdqa $-1921(%rip), %ymm0 /* LCPI31_0(%rip) */ - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB31_79: - QUAD $0xfffe2001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-480(%rcx,%rax) - QUAD $0xfffe4001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-448(%rcx,%rax) - QUAD $0xfffe6001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-416(%rcx,%rax) - QUAD $0xfffe8001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-384(%rcx,%rax) - QUAD $0xfffea001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-352(%rcx,%rax) - QUAD $0xfffec001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-320(%rcx,%rax) - QUAD $0xfffee001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-288(%rcx,%rax) - QUAD $0xffff0001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-256(%rcx,%rax) - QUAD $0xffff2001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-224(%rcx,%rax) - QUAD $0xffff4001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-192(%rcx,%rax) - QUAD $0xffff6001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-160(%rcx,%rax) - LONG $0x447ffec5; WORD $0x8001 // vmovdqu %ymm0, $-128(%rcx,%rax) - LONG $0x447ffec5; WORD $0xa001 // vmovdqu %ymm0, $-96(%rcx,%rax) - LONG $0x447ffec5; WORD $0xc001 // vmovdqu %ymm0, $-64(%rcx,%rax) - LONG $0x447ffec5; WORD $0xe001 // vmovdqu %ymm0, $-32(%rcx,%rax) - LONG $0x047ffec5; BYTE $0x01 // vmovdqu %ymm0, (%rcx,%rax) - LONG $0x02000548; WORD $0x0000 // addq $512, %rax - LONG $0x04c38348 // addq $4, %rbx - LONG $0xff70850f; WORD $0xffff // jne LBB31_79, $-144(%rip) - -LBB31_80: - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x0037840f; WORD $0x0000 // je LBB31_83, $55(%rip) - WORD $0x014c; BYTE $0xc8 // addq %r9, %rax - WORD $0x014c; BYTE $0xe0 // addq %r12, %rax - LONG $0x07448d48; BYTE $0x60 // leaq $96(%rdi,%rax), %rax - WORD $0xf748; BYTE $0xda // negq %rdx - QUAD $0xfffff7c1056ffdc5 // vmovdqa $-2111(%rip), %ymm0 /* LCPI31_0(%rip) */ - BYTE $0x90 // .p2align 4, 0x90 - -LBB31_82: - LONG $0x407ffec5; BYTE $0xa0 // vmovdqu %ymm0, $-96(%rax) - LONG $0x407ffec5; BYTE $0xc0 // vmovdqu %ymm0, $-64(%rax) - LONG $0x407ffec5; BYTE $0xe0 // vmovdqu %ymm0, $-32(%rax) - LONG $0x007ffec5 // vmovdqu %ymm0, (%rax) - LONG $0x80e88348 // subq $-128, %rax - WORD $0xff48; BYTE $0xc2 // incq %rdx - LONG $0xffe0850f; WORD $0xffff // jne LBB31_82, $-32(%rip) - -LBB31_83: - WORD $0x394d; BYTE $0xda // cmpq %r11, %r10 - LONG $0x04b9840f; WORD $0x0000 // je LBB31_136, $1209(%rip) - WORD $0x014c; BYTE $0xd6 // addq %r10, %rsi - LONG $0x90909090 // .p2align 4, 0x90 - -LBB31_85: - WORD $0x06c6; BYTE $0x30 // movb $48, (%rsi) - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x394c; BYTE $0xc6 // cmpq %r8, %rsi - LONG $0xfff1820f; WORD $0xffff // jb LBB31_85, $-15(%rip) - LONG $0x00049ee9; BYTE $0x00 // jmp LBB31_136, $1182(%rip) - -LBB31_86: - LONG $0x2710fe81; WORD $0x0000 // cmpl $10000, %esi - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - LONG $0x00d88348 // sbbq $0, %rax - LONG $0x05c08348 // addq $5, %rax - LONG $0x2710fe81; WORD $0x0000 // cmpl $10000, %esi - LONG $0xfc3a830f; WORD $0xffff // jae LBB31_37, $-966(%rip) - WORD $0x8949; BYTE $0xc1 // movq %rax, %r9 - LONG $0xfffe2ee9; BYTE $0xff // jmp LBB31_56, $-466(%rip) - -LBB31_88: - QUAD $0x000001e239848d49 // leaq $482(%r9,%rdi), %rax - LONG $0xfce68349 // andq $-4, %r14 - WORD $0xf749; BYTE $0xde // negq %r14 - WORD $0xdb31 // xorl %ebx, %ebx - QUAD $0xfffff73e056ffdc5 // vmovdqa $-2242(%rip), %ymm0 /* LCPI31_0(%rip) */ - -LBB31_89: - QUAD $0xfffe2018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-480(%rax,%rbx) - QUAD $0xfffe4018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-448(%rax,%rbx) - QUAD $0xfffe6018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-416(%rax,%rbx) - QUAD $0xfffe8018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-384(%rax,%rbx) - QUAD $0xfffea018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-352(%rax,%rbx) - QUAD $0xfffec018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-320(%rax,%rbx) - QUAD $0xfffee018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-288(%rax,%rbx) - QUAD $0xffff0018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-256(%rax,%rbx) - QUAD $0xffff2018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-224(%rax,%rbx) - QUAD $0xffff4018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-192(%rax,%rbx) - QUAD $0xffff6018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-160(%rax,%rbx) - LONG $0x447ffec5; WORD $0x8018 // vmovdqu %ymm0, $-128(%rax,%rbx) - LONG $0x447ffec5; WORD $0xa018 // vmovdqu %ymm0, $-96(%rax,%rbx) - LONG $0x447ffec5; WORD $0xc018 // vmovdqu %ymm0, $-64(%rax,%rbx) - LONG $0x447ffec5; WORD $0xe018 // vmovdqu %ymm0, $-32(%rax,%rbx) - LONG $0x047ffec5; BYTE $0x18 // vmovdqu %ymm0, (%rax,%rbx) - LONG $0x00c38148; WORD $0x0002; BYTE $0x00 // addq $512, %rbx - LONG $0x04c68349 // addq $4, %r14 - LONG $0xff6f850f; WORD $0xffff // jne LBB31_89, $-145(%rip) - -LBB31_90: - WORD $0x854d; BYTE $0xdb // testq %r11, %r11 - LONG $0x0033840f; WORD $0x0000 // je LBB31_93, $51(%rip) - WORD $0x014c; BYTE $0xcb // addq %r9, %rbx - LONG $0x1f448d48; BYTE $0x62 // leaq $98(%rdi,%rbx), %rax - WORD $0xf749; BYTE $0xdb // negq %r11 - QUAD $0xfffff691056ffdc5 // vmovdqa $-2415(%rip), %ymm0 /* LCPI31_0(%rip) */ - -LBB31_92: - LONG $0x407ffec5; BYTE $0xa0 // vmovdqu %ymm0, $-96(%rax) - LONG $0x407ffec5; BYTE $0xc0 // vmovdqu %ymm0, $-64(%rax) - LONG $0x407ffec5; BYTE $0xe0 // vmovdqu %ymm0, $-32(%rax) - LONG $0x007ffec5 // vmovdqu %ymm0, (%rax) - LONG $0x80e88348 // subq $-128, %rax - WORD $0xff49; BYTE $0xc3 // incq %r11 - LONG $0xffe0850f; WORD $0xffff // jne LBB31_92, $-32(%rip) - -LBB31_93: - WORD $0x014d; BYTE $0xf8 // addq %r15, %r8 - WORD $0x394c; BYTE $0xfe // cmpq %r15, %rsi - LONG $0x0025840f; WORD $0x0000 // je LBB31_96, $37(%rip) - -LBB31_94: - WORD $0x0145; BYTE $0xd7 // addl %r10d, %r15d - WORD $0xf741; BYTE $0xdf // negl %r15d - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB31_95: - LONG $0x3000c641 // movb $48, (%r8) - WORD $0xff49; BYTE $0xc0 // incq %r8 - WORD $0xff41; BYTE $0xcf // decl %r15d - LONG $0xfff0850f; WORD $0xffff // jne LBB31_95, $-16(%rip) - -LBB31_96: - LONG $0x20048d4b // leaq (%r8,%r12), %rax - LONG $0x10fd8141; WORD $0x0027; BYTE $0x00 // cmpl $10000, %r13d - LONG $0x0063820f; WORD $0x0000 // jb LBB31_99, $99(%rip) - WORD $0x8944; BYTE $0xe9 // movl %r13d, %ecx - LONG $0x1759bb41; WORD $0xd1b7 // movl $3518437209, %r11d - LONG $0xd9af0f4c // imulq %rcx, %r11 - LONG $0x2debc149 // shrq $45, %r11 - LONG $0xf0cb6941; WORD $0xffd8; BYTE $0xff // imull $-10000, %r11d, %ecx - WORD $0x0144; BYTE $0xe9 // addl %r13d, %ecx - LONG $0x0190840f; WORD $0x0000 // je LBB31_101, $400(%rip) - WORD $0xca89 // movl %ecx, %edx - LONG $0x1fd26948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rdx, %rdx - LONG $0x25eac148 // shrq $37, %rdx - WORD $0xda6b; BYTE $0x64 // imull $100, %edx, %ebx - WORD $0xd929 // subl %ebx, %ecx - LONG $0x051d8d48; WORD $0x0038; BYTE $0x00 // leaq $14341(%rip), %rbx /* _Digits(%rip) */ - LONG $0x4b0cb70f // movzwl (%rbx,%rcx,2), %ecx - LONG $0xfe488966 // movw %cx, $-2(%rax) - LONG $0x530cb70f // movzwl (%rbx,%rdx,2), %ecx - LONG $0xfc488966 // movw %cx, $-4(%rax) - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - LONG $0xfcc08348 // addq $-4, %rax - LONG $0x64fb8341 // cmpl $100, %r11d - LONG $0x0018830f; WORD $0x0000 // jae LBB31_103, $24(%rip) - -LBB31_100: - WORD $0x8944; BYTE $0xd9 // movl %r11d, %ecx - LONG $0x00004ee9; BYTE $0x00 // jmp LBB31_105, $78(%rip) - -LBB31_99: - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x8945; BYTE $0xeb // movl %r13d, %r11d - LONG $0x64fb8341 // cmpl $100, %r11d - LONG $0xffe8820f; WORD $0xffff // jb LBB31_100, $-24(%rip) - -LBB31_103: - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0xc2158d48; WORD $0x0037; BYTE $0x00 // leaq $14274(%rip), %rdx /* _Digits(%rip) */ - WORD $0x9090 // .p2align 4, 0x90 - -LBB31_104: - WORD $0x8944; BYTE $0xd9 // movl %r11d, %ecx - LONG $0x1fc96948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rcx, %rcx - LONG $0x25e9c148 // shrq $37, %rcx - WORD $0xd96b; BYTE $0x64 // imull $100, %ecx, %ebx - WORD $0x8944; BYTE $0xde // movl %r11d, %esi - WORD $0xde29 // subl %ebx, %esi - LONG $0x7234b70f // movzwl (%rdx,%rsi,2), %esi - LONG $0xff708966 // movw %si, $-1(%rax) - LONG $0xfec08348 // addq $-2, %rax - LONG $0x0ffb8141; WORD $0x0027; BYTE $0x00 // cmpl $9999, %r11d - WORD $0x8941; BYTE $0xcb // movl %ecx, %r11d - LONG $0xffce870f; WORD $0xffff // ja LBB31_104, $-50(%rip) - -LBB31_105: - WORD $0xf983; BYTE $0x0a // cmpl $10, %ecx - LONG $0x0016820f; WORD $0x0000 // jb LBB31_107, $22(%rip) - WORD $0xc889 // movl %ecx, %eax - LONG $0x7c0d8d48; WORD $0x0037; BYTE $0x00 // leaq $14204(%rip), %rcx /* _Digits(%rip) */ - LONG $0x4104b70f // movzwl (%rcx,%rax,2), %eax - LONG $0x00894166 // movw %ax, (%r8) - LONG $0x000006e9; BYTE $0x00 // jmp LBB31_108, $6(%rip) - -LBB31_107: - WORD $0xc180; BYTE $0x30 // addb $48, %cl - WORD $0x8841; BYTE $0x08 // movb %cl, (%r8) - -LBB31_108: - WORD $0x294d; BYTE $0xcc // subq %r9, %r12 - LONG $0x24548d49; BYTE $0x01 // leaq $1(%r12), %rdx - LONG $0x24748d49; BYTE $0x61 // leaq $97(%r12), %rsi - LONG $0x24448d49; BYTE $0x02 // leaq $2(%r12), %rax - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB31_109: - WORD $0xff48; BYTE $0xce // decq %rsi - WORD $0xff48; BYTE $0xca // decq %rdx - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0x207c8043; WORD $0x30ff // cmpb $48, $-1(%r8,%r12) - LONG $0x24648d4d; BYTE $0xff // leaq $-1(%r12), %r12 - LONG $0xffe6840f; WORD $0xffff // je LBB31_109, $-26(%rip) - LONG $0x100c8d4d // leaq (%r8,%rdx), %r9 - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x00938e0f; WORD $0x0000 // jle LBB31_115, $147(%rip) - WORD $0x8944; BYTE $0xc9 // movl %r9d, %ecx - WORD $0x2944; BYTE $0xc1 // subl %r8d, %ecx - WORD $0xcb89 // movl %ecx, %ebx - WORD $0x2944; BYTE $0xd3 // subl %r10d, %ebx - LONG $0x00278e0f; WORD $0x0000 // jle LBB31_116, $39(%rip) - WORD $0xdb85 // testl %ebx, %ebx - LONG $0x00fa8e0f; WORD $0x0000 // jle LBB31_127, $250(%rip) - WORD $0x8941; BYTE $0xdb // movl %ebx, %r11d - LONG $0xff4b8d49 // leaq $-1(%r11), %rcx - WORD $0x8945; BYTE $0xd9 // movl %r11d, %r9d - LONG $0x03e18341 // andl $3, %r9d - LONG $0x03f98348 // cmpq $3, %rcx - LONG $0x0083830f; WORD $0x0000 // jae LBB31_121, $131(%rip) - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x0000ade9; BYTE $0x00 // jmp LBB31_124, $173(%rip) - -LBB31_116: - WORD $0x8945; BYTE $0xd6 // movl %r10d, %r14d - WORD $0x2941; BYTE $0xce // subl %ecx, %r14d - LONG $0x004f8e0f; WORD $0x0000 // jle LBB31_115, $79(%rip) - WORD $0x0145; BYTE $0xc2 // addl %r8d, %r10d - WORD $0x8945; BYTE $0xcb // movl %r9d, %r11d - WORD $0xf741; BYTE $0xd3 // notl %r11d - WORD $0x0145; BYTE $0xd3 // addl %r10d, %r11d - WORD $0xc031 // xorl %eax, %eax - LONG $0x7efb8341 // cmpl $126, %r11d - LONG $0x01bd860f; WORD $0x0000 // jbe LBB31_134, $445(%rip) - WORD $0xff49; BYTE $0xc3 // incq %r11 - WORD $0x894c; BYTE $0xd8 // movq %r11, %rax - LONG $0x80e08348 // andq $-128, %rax - LONG $0x000c8d4d // leaq (%r8,%rax), %r9 - LONG $0x80488d48 // leaq $-128(%rax), %rcx - WORD $0x8949; BYTE $0xcf // movq %rcx, %r15 - LONG $0x07efc149 // shrq $7, %r15 - WORD $0xff49; BYTE $0xc7 // incq %r15 - WORD $0x8945; BYTE $0xfa // movl %r15d, %r10d - LONG $0x03e28341 // andl $3, %r10d - LONG $0x80f98148; WORD $0x0001; BYTE $0x00 // cmpq $384, %rcx - LONG $0x0097830f; WORD $0x0000 // jae LBB31_128, $151(%rip) - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x000139e9; BYTE $0x00 // jmp LBB31_130, $313(%rip) - -LBB31_115: - WORD $0x894d; BYTE $0xc8 // movq %r9, %r8 - LONG $0x0001a0e9; BYTE $0x00 // jmp LBB31_136, $416(%rip) - -LBB31_101: - LONG $0x0004b941; WORD $0x0000 // movl $4, %r9d - LONG $0xfcc08348 // addq $-4, %rax - LONG $0x64fb8341 // cmpl $100, %r11d - LONG $0xfe96820f; WORD $0xffff // jb LBB31_100, $-362(%rip) - LONG $0xfffea9e9; BYTE $0xff // jmp LBB31_103, $-343(%rip) - -LBB31_121: - LONG $0xfce38341 // andl $-4, %r11d - WORD $0xf749; BYTE $0xdb // negq %r11 - WORD $0xc931 // xorl %ecx, %ecx - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB31_122: - LONG $0x081c8d49 // leaq (%r8,%rcx), %rbx - LONG $0xfc1a748b // movl $-4(%rdx,%rbx), %esi - LONG $0xfd1a7489 // movl %esi, $-3(%rdx,%rbx) - LONG $0xfcc18348 // addq $-4, %rcx - WORD $0x3949; BYTE $0xcb // cmpq %rcx, %r11 - LONG $0xffe7850f; WORD $0xffff // jne LBB31_122, $-25(%rip) - WORD $0xf748; BYTE $0xd9 // negq %rcx - -LBB31_124: - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x0025840f; WORD $0x0000 // je LBB31_127, $37(%rip) - WORD $0xf749; BYTE $0xd9 // negq %r9 - WORD $0x894c; BYTE $0xc2 // movq %r8, %rdx - WORD $0x2948; BYTE $0xca // subq %rcx, %rdx - WORD $0xc931 // xorl %ecx, %ecx - - // .p2align 4, 0x90 -LBB31_126: - LONG $0x0a348d48 // leaq (%rdx,%rcx), %rsi - LONG $0x1cb60f41; BYTE $0x34 // movzbl (%r12,%rsi), %ebx - LONG $0x345c8841; BYTE $0x01 // movb %bl, $1(%r12,%rsi) - WORD $0xff48; BYTE $0xc9 // decq %rcx - WORD $0x3949; BYTE $0xc9 // cmpq %rcx, %r9 - LONG $0xffe6850f; WORD $0xffff // jne LBB31_126, $-26(%rip) - -LBB31_127: - WORD $0x6349; BYTE $0xca // movslq %r10d, %rcx - LONG $0x0804c641; BYTE $0x2e // movb $46, (%r8,%rcx) - WORD $0x0149; BYTE $0xc0 // addq %rax, %r8 - LONG $0x000118e9; BYTE $0x00 // jmp LBB31_136, $280(%rip) - -LBB31_128: - LONG $0xfce78349 // andq $-4, %r15 - WORD $0xf749; BYTE $0xdf // negq %r15 - WORD $0xc931 // xorl %ecx, %ecx - QUAD $0xfffff3e5056ffdc5 // vmovdqa $-3099(%rip), %ymm0 /* LCPI31_0(%rip) */ - -LBB31_129: - LONG $0x081c8d49 // leaq (%r8,%rcx), %rbx - LONG $0x047ffec5; BYTE $0x1a // vmovdqu %ymm0, (%rdx,%rbx) - LONG $0x447ffec5; WORD $0x201a // vmovdqu %ymm0, $32(%rdx,%rbx) - LONG $0x447ffec5; WORD $0x401a // vmovdqu %ymm0, $64(%rdx,%rbx) - LONG $0x447ffec5; WORD $0x601a // vmovdqu %ymm0, $96(%rdx,%rbx) - QUAD $0x0000801a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $128(%rdx,%rbx) - QUAD $0x0000a01a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $160(%rdx,%rbx) - QUAD $0x0000c01a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $192(%rdx,%rbx) - QUAD $0x0000e01a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $224(%rdx,%rbx) - QUAD $0x0001001a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $256(%rdx,%rbx) - QUAD $0x0001201a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $288(%rdx,%rbx) - QUAD $0x0001401a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $320(%rdx,%rbx) - QUAD $0x0001601a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $352(%rdx,%rbx) - QUAD $0x0001801a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $384(%rdx,%rbx) - QUAD $0x0001a01a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $416(%rdx,%rbx) - QUAD $0x0001c01a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $448(%rdx,%rbx) - QUAD $0x0001e01a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $480(%rdx,%rbx) - LONG $0x00c18148; WORD $0x0002; BYTE $0x00 // addq $512, %rcx - LONG $0x04c78349 // addq $4, %r15 - LONG $0xff68850f; WORD $0xffff // jne LBB31_129, $-152(%rip) - -LBB31_130: - WORD $0x0149; BYTE $0xd1 // addq %rdx, %r9 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0x0035840f; WORD $0x0000 // je LBB31_133, $53(%rip) - WORD $0x0149; BYTE $0xc8 // addq %rcx, %r8 - WORD $0x0149; BYTE $0xf0 // addq %rsi, %r8 - WORD $0xf749; BYTE $0xda // negq %r10 - QUAD $0xfffff330056ffdc5 // vmovdqa $-3280(%rip), %ymm0 /* LCPI31_0(%rip) */ - -LBB31_132: - LONG $0x7f7ec1c4; WORD $0xa040 // vmovdqu %ymm0, $-96(%r8) - LONG $0x7f7ec1c4; WORD $0xc040 // vmovdqu %ymm0, $-64(%r8) - LONG $0x7f7ec1c4; WORD $0xe040 // vmovdqu %ymm0, $-32(%r8) - LONG $0x7f7ec1c4; BYTE $0x00 // vmovdqu %ymm0, (%r8) - LONG $0x80e88349 // subq $-128, %r8 - WORD $0xff49; BYTE $0xc2 // incq %r10 - LONG $0xffdc850f; WORD $0xffff // jne LBB31_132, $-36(%rip) - -LBB31_133: - WORD $0x894d; BYTE $0xc8 // movq %r9, %r8 - WORD $0x3949; BYTE $0xc3 // cmpq %rax, %r11 - LONG $0x0022840f; WORD $0x0000 // je LBB31_136, $34(%rip) - -LBB31_134: - WORD $0x894d; BYTE $0xc8 // movq %r9, %r8 - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB31_135: - LONG $0x3000c641 // movb $48, (%r8) - WORD $0xff49; BYTE $0xc0 // incq %r8 - WORD $0xc0ff // incl %eax - WORD $0x3944; BYTE $0xf0 // cmpl %r14d, %eax - LONG $0xffee8c0f; WORD $0xffff // jl LBB31_135, $-18(%rip) - -LBB31_136: - WORD $0x2941; BYTE $0xf8 // subl %edi, %r8d - -LBB31_137: - WORD $0x8944; BYTE $0xc0 // movl %r8d, %eax - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB31_138: - WORD $0x3145; BYTE $0xc0 // xorl %r8d, %r8d - LONG $0xffffe7e9; BYTE $0xff // jmp LBB31_137, $-25(%rip) - -LBB31_139: - LONG $0xff6bbf41; WORD $0xffff // movl $-149, %r15d - WORD $0xc689 // movl %eax, %esi - LONG $0xfff352e9; BYTE $0xff // jmp LBB31_5, $-3246(%rip) - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -_format_significand: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - WORD $0x634c; BYTE $0xc2 // movslq %edx, %r8 - WORD $0x0149; BYTE $0xf0 // addq %rsi, %r8 - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x20e8c148 // shrq $32, %rax - LONG $0x001c850f; WORD $0x0000 // jne LBB32_2, $28(%rip) - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x894d; BYTE $0xc6 // movq %r8, %r14 - WORD $0x8948; BYTE $0xfa // movq %rdi, %rdx - LONG $0x2710fa81; WORD $0x0000 // cmpl $10000, %edx - LONG $0x00e3830f; WORD $0x0000 // jae LBB32_8, $227(%rip) - -LBB32_7: - WORD $0xd789 // movl %edx, %edi - LONG $0x000132e9; BYTE $0x00 // jmp LBB32_10, $306(%rip) - -LBB32_2: - QUAD $0x77118461cefdb948; WORD $0xabcc // movabsq $-6067343680855748867, %rcx - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - WORD $0xf748; BYTE $0xe1 // mulq %rcx - LONG $0x1aeac148 // shrq $26, %rdx - LONG $0x1f00ca69; WORD $0xfa0a // imull $-100000000, %edx, %ecx - WORD $0xf901 // addl %edi, %ecx - LONG $0x00a4840f; WORD $0x0000 // je LBB32_3, $164(%rip) - WORD $0xc889 // movl %ecx, %eax - LONG $0x1759b941; WORD $0xd1b7 // movl $3518437209, %r9d - LONG $0xc1af0f49 // imulq %r9, %rax - LONG $0x2de8c148 // shrq $45, %rax - LONG $0x2710f869; WORD $0x0000 // imull $10000, %eax, %edi - WORD $0xf929 // subl %edi, %ecx - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - LONG $0xf9af0f49 // imulq %r9, %rdi - LONG $0x2defc148 // shrq $45, %rdi - LONG $0x2710ff69; WORD $0x0000 // imull $10000, %edi, %edi - WORD $0xf829 // subl %edi, %eax - WORD $0xb70f; BYTE $0xf9 // movzwl %cx, %edi - WORD $0xefc1; BYTE $0x02 // shrl $2, %edi - LONG $0x7bcf6944; WORD $0x0014; BYTE $0x00 // imull $5243, %edi, %r9d - LONG $0x11e9c141 // shrl $17, %r9d - LONG $0x64f96b41 // imull $100, %r9d, %edi - WORD $0xf929 // subl %edi, %ecx - LONG $0xd1b70f44 // movzwl %cx, %r10d - WORD $0xb70f; BYTE $0xf8 // movzwl %ax, %edi - WORD $0xefc1; BYTE $0x02 // shrl $2, %edi - LONG $0x147bff69; WORD $0x0000 // imull $5243, %edi, %edi - WORD $0xefc1; BYTE $0x11 // shrl $17, %edi - WORD $0xcf6b; BYTE $0x64 // imull $100, %edi, %ecx - WORD $0xc829 // subl %ecx, %eax - LONG $0xd8b70f44 // movzwl %ax, %r11d - LONG $0x030d8d48; WORD $0x0034; BYTE $0x00 // leaq $13315(%rip), %rcx /* _Digits(%rip) */ - LONG $0x04b70f42; BYTE $0x51 // movzwl (%rcx,%r10,2), %eax - LONG $0x40894166; BYTE $0xfe // movw %ax, $-2(%r8) - LONG $0x04b70f42; BYTE $0x49 // movzwl (%rcx,%r9,2), %eax - LONG $0x40894166; BYTE $0xfc // movw %ax, $-4(%r8) - LONG $0x04b70f42; BYTE $0x59 // movzwl (%rcx,%r11,2), %eax - LONG $0x40894166; BYTE $0xfa // movw %ax, $-6(%r8) - LONG $0x7904b70f // movzwl (%rcx,%rdi,2), %eax - LONG $0x40894166; BYTE $0xf8 // movw %ax, $-8(%r8) - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - LONG $0xf8708d4d // leaq $-8(%r8), %r14 - LONG $0x2710fa81; WORD $0x0000 // cmpl $10000, %edx - LONG $0xff38820f; WORD $0xffff // jb LBB32_7, $-200(%rip) - LONG $0x000016e9; BYTE $0x00 // jmp LBB32_8, $22(%rip) - -LBB32_3: - LONG $0x0008b941; WORD $0x0000 // movl $8, %r9d - LONG $0xf8708d4d // leaq $-8(%r8), %r14 - LONG $0x2710fa81; WORD $0x0000 // cmpl $10000, %edx - LONG $0xff1d820f; WORD $0xffff // jb LBB32_7, $-227(%rip) - -LBB32_8: - LONG $0x1759ba41; WORD $0xd1b7 // movl $3518437209, %r10d - LONG $0xa11d8d4c; WORD $0x0033; BYTE $0x00 // leaq $13217(%rip), %r11 /* _Digits(%rip) */ - BYTE $0x90 // .p2align 4, 0x90 - -LBB32_9: - WORD $0xd789 // movl %edx, %edi - LONG $0xfaaf0f49 // imulq %r10, %rdi - LONG $0x2defc148 // shrq $45, %rdi - LONG $0xd8f0c769; WORD $0xffff // imull $-10000, %edi, %eax - WORD $0xd001 // addl %edx, %eax - LONG $0x1fd86948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rax, %rbx - LONG $0x25ebc148 // shrq $37, %rbx - WORD $0xcb6b; BYTE $0x64 // imull $100, %ebx, %ecx - WORD $0xc829 // subl %ecx, %eax - LONG $0x04b70f41; BYTE $0x43 // movzwl (%r11,%rax,2), %eax - LONG $0x46894166; BYTE $0xfe // movw %ax, $-2(%r14) - LONG $0x04b70f41; BYTE $0x5b // movzwl (%r11,%rbx,2), %eax - LONG $0x46894166; BYTE $0xfc // movw %ax, $-4(%r14) - LONG $0xfcc68349 // addq $-4, %r14 - LONG $0xe0fffa81; WORD $0x05f5 // cmpl $99999999, %edx - WORD $0xfa89 // movl %edi, %edx - LONG $0xffb8870f; WORD $0xffff // ja LBB32_9, $-72(%rip) - -LBB32_10: - WORD $0xff83; BYTE $0x64 // cmpl $100, %edi - LONG $0x0020830f; WORD $0x0000 // jae LBB32_11, $32(%rip) - WORD $0xff83; BYTE $0x0a // cmpl $10, %edi - LONG $0x004d820f; WORD $0x0000 // jb LBB32_14, $77(%rip) - -LBB32_13: - WORD $0xf889 // movl %edi, %eax - LONG $0x3d0d8d48; WORD $0x0033; BYTE $0x00 // leaq $13117(%rip), %rcx /* _Digits(%rip) */ - LONG $0x4104b70f // movzwl (%rcx,%rax,2), %eax - LONG $0x46894166; BYTE $0xfe // movw %ax, $-2(%r14) - LONG $0x00003de9; BYTE $0x00 // jmp LBB32_15, $61(%rip) - -LBB32_11: - WORD $0xb70f; BYTE $0xc7 // movzwl %di, %eax - WORD $0xe8c1; BYTE $0x02 // shrl $2, %eax - LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax - WORD $0xe8c1; BYTE $0x11 // shrl $17, %eax - WORD $0xc86b; BYTE $0x64 // imull $100, %eax, %ecx - WORD $0xcf29 // subl %ecx, %edi - WORD $0xb70f; BYTE $0xcf // movzwl %di, %ecx - LONG $0x11158d48; WORD $0x0033; BYTE $0x00 // leaq $13073(%rip), %rdx /* _Digits(%rip) */ - LONG $0x4a0cb70f // movzwl (%rdx,%rcx,2), %ecx - LONG $0x4e894166; BYTE $0xfe // movw %cx, $-2(%r14) - LONG $0xfec68349 // addq $-2, %r14 - WORD $0xc789 // movl %eax, %edi - WORD $0xff83; BYTE $0x0a // cmpl $10, %edi - LONG $0xffb3830f; WORD $0xffff // jae LBB32_13, $-77(%rip) - -LBB32_14: - LONG $0x30c78040 // addb $48, %dil - WORD $0x8840; BYTE $0x3e // movb %dil, (%rsi) - -LBB32_15: - WORD $0x294d; BYTE $0xc8 // subq %r9, %r8 - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_left_shift: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - WORD $0xf189 // movl %esi, %ecx - LONG $0x68d16b48 // imulq $104, %rcx, %rdx - LONG $0xbc358d48; WORD $0x008c; BYTE $0x00 // leaq $36028(%rip), %rsi /* _LSHIFT_TAB(%rip) */ - LONG $0x32048b44 // movl (%rdx,%rsi), %r8d - WORD $0x8b4c; BYTE $0x17 // movq (%rdi), %r10 - LONG $0x104f634c // movslq $16(%rdi), %r9 - LONG $0x0432448a // movb $4(%rdx,%rsi), %al - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x0036840f; WORD $0x0000 // je LBB33_6, $54(%rip) - LONG $0x32548d48; BYTE $0x05 // leaq $5(%rdx,%rsi), %rdx - WORD $0xf631 // xorl %esi, %esi - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB33_3: - WORD $0xc084 // testb %al, %al - LONG $0x0025840f; WORD $0x0000 // je LBB33_8, $37(%rip) - LONG $0x32043841 // cmpb %al, (%r10,%rsi) - LONG $0x0189850f; WORD $0x0000 // jne LBB33_5, $393(%rip) - LONG $0x3204b60f // movzbl (%rdx,%rsi), %eax - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x3949; BYTE $0xf1 // cmpq %rsi, %r9 - LONG $0xffde850f; WORD $0xffff // jne LBB33_3, $-34(%rip) - -LBB33_6: - WORD $0xc084 // testb %al, %al - LONG $0x0003840f; WORD $0x0000 // je LBB33_8, $3(%rip) - -LBB33_7: - WORD $0xff41; BYTE $0xc8 // decl %r8d - -LBB33_8: - WORD $0x8545; BYTE $0xc9 // testl %r9d, %r9d - LONG $0x008c8e0f; WORD $0x0000 // jle LBB33_23, $140(%rip) - LONG $0x08048d43 // leal (%r8,%r9), %eax - WORD $0x634c; BYTE $0xf0 // movslq %eax, %r14 - WORD $0xff49; BYTE $0xce // decq %r14 - WORD $0xd231 // xorl %edx, %edx - QUAD $0xcccccccccccdbb49; WORD $0xcccc // movabsq $-3689348814741910323, %r11 - LONG $0x90909090 // .p2align 4, 0x90 - -LBB33_10: - LONG $0x74be0f4b; WORD $0xff0a // movsbq $-1(%r10,%r9), %rsi - LONG $0xd0c68348 // addq $-48, %rsi - WORD $0xd348; BYTE $0xe6 // shlq %cl, %rsi - WORD $0x0148; BYTE $0xd6 // addq %rdx, %rsi - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe3 // mulq %r11 - LONG $0x03eac148 // shrq $3, %rdx - LONG $0x12048d48 // leaq (%rdx,%rdx), %rax - LONG $0x801c8d48 // leaq (%rax,%rax,4), %rbx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0x2948; BYTE $0xd8 // subq %rbx, %rax - LONG $0x0877394c // cmpq %r14, $8(%rdi) - LONG $0x000e860f; WORD $0x0000 // jbe LBB33_16, $14(%rip) - WORD $0x3004 // addb $48, %al - LONG $0x32048843 // movb %al, (%r10,%r14) - LONG $0x000013e9; BYTE $0x00 // jmp LBB33_18, $19(%rip) - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB33_16: - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0007840f; WORD $0x0000 // je LBB33_18, $7(%rip) - LONG $0x011c47c7; WORD $0x0000; BYTE $0x00 // movl $1, $28(%rdi) - -LBB33_18: - LONG $0x02f98349 // cmpq $2, %r9 - LONG $0x000e8c0f; WORD $0x0000 // jl LBB33_12, $14(%rip) - WORD $0xff49; BYTE $0xc9 // decq %r9 - WORD $0x8b4c; BYTE $0x17 // movq (%rdi), %r10 - WORD $0xff49; BYTE $0xce // decq %r14 - LONG $0xffff98e9; BYTE $0xff // jmp LBB33_10, $-104(%rip) - -LBB33_12: - LONG $0x0afe8348 // cmpq $10, %rsi - LONG $0x0067830f; WORD $0x0000 // jae LBB33_13, $103(%rip) - -LBB33_23: - LONG $0x104f6348 // movslq $16(%rdi), %rcx - WORD $0x6349; BYTE $0xc0 // movslq %r8d, %rax - WORD $0x0148; BYTE $0xc8 // addq %rcx, %rax - WORD $0x4789; BYTE $0x10 // movl %eax, $16(%rdi) - LONG $0x084f8b48 // movq $8(%rdi), %rcx - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0x0005870f; WORD $0x0000 // ja LBB33_25, $5(%rip) - WORD $0x4f89; BYTE $0x10 // movl %ecx, $16(%rdi) - WORD $0xc889 // movl %ecx, %eax - -LBB33_25: - LONG $0x14470144 // addl %r8d, $20(%rdi) - WORD $0xc085 // testl %eax, %eax - LONG $0x002f8e0f; WORD $0x0000 // jle LBB33_29, $47(%rip) - WORD $0x8b48; BYTE $0x0f // movq (%rdi), %rcx - WORD $0xc289 // movl %eax, %edx - WORD $0xff48; BYTE $0xc2 // incq %rdx - QUAD $0x9090909090909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB33_27: - WORD $0xc8ff // decl %eax - LONG $0x30013c80 // cmpb $48, (%rcx,%rax) - LONG $0x0018850f; WORD $0x0000 // jne LBB33_31, $24(%rip) - WORD $0x4789; BYTE $0x10 // movl %eax, $16(%rdi) - WORD $0xff48; BYTE $0xca // decq %rdx - LONG $0x01fa8348 // cmpq $1, %rdx - LONG $0xffe48f0f; WORD $0xffff // jg LBB33_27, $-28(%rip) - -LBB33_29: - WORD $0xc085 // testl %eax, %eax - LONG $0x006b840f; WORD $0x0000 // je LBB33_30, $107(%rip) - -LBB33_31: - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB33_13: - WORD $0x6349; BYTE $0xf6 // movslq %r14d, %rsi - WORD $0xff48; BYTE $0xce // decq %rsi - LONG $0x000021e9; BYTE $0x00 // jmp LBB33_14, $33(%rip) - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB33_15: - WORD $0x3004 // addb $48, %al - WORD $0x8b48; BYTE $0x1f // movq (%rdi), %rbx - WORD $0x0488; BYTE $0x33 // movb %al, (%rbx,%rsi) - -LBB33_22: - WORD $0xff48; BYTE $0xce // decq %rsi - LONG $0x09f98348 // cmpq $9, %rcx - LONG $0xff6d860f; WORD $0xffff // jbe LBB33_23, $-147(%rip) - -LBB33_14: - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0xf749; BYTE $0xe3 // mulq %r11 - LONG $0x03eac148 // shrq $3, %rdx - LONG $0x12048d48 // leaq (%rdx,%rdx), %rax - LONG $0x801c8d48 // leaq (%rax,%rax,4), %rbx - WORD $0x8948; BYTE $0xc8 // movq %rcx, %rax - WORD $0x2948; BYTE $0xd8 // subq %rbx, %rax - LONG $0x08773948 // cmpq %rsi, $8(%rdi) - LONG $0xffc6870f; WORD $0xffff // ja LBB33_15, $-58(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xffc5840f; WORD $0xffff // je LBB33_22, $-59(%rip) - LONG $0x011c47c7; WORD $0x0000; BYTE $0x00 // movl $1, $28(%rdi) - LONG $0xffffb9e9; BYTE $0xff // jmp LBB33_22, $-71(%rip) - -LBB33_30: - LONG $0x001447c7; WORD $0x0000; BYTE $0x00 // movl $0, $20(%rdi) - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB33_5: - LONG $0xfe898c0f; WORD $0xffff // jl LBB33_7, $-375(%rip) - LONG $0xfffe87e9; BYTE $0xff // jmp LBB33_8, $-377(%rip) - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -_right_shift: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - BYTE $0x53 // pushq %rbx - WORD $0xf189 // movl %esi, %ecx - LONG $0x10478b44 // movl $16(%rdi), %r8d - WORD $0xd231 // xorl %edx, %edx - WORD $0x8545; BYTE $0xc0 // testl %r8d, %r8d - LONG $0x0000bb41; WORD $0x0000 // movl $0, %r11d - LONG $0xd8490f45 // cmovnsl %r8d, %r11d - WORD $0xc031 // xorl %eax, %eax - LONG $0x90909090 // .p2align 4, 0x90 - -LBB34_1: - WORD $0x3949; BYTE $0xd3 // cmpq %rdx, %r11 - LONG $0x0132840f; WORD $0x0000 // je LBB34_2, $306(%rip) - LONG $0x80048d48 // leaq (%rax,%rax,4), %rax - WORD $0x8b48; BYTE $0x37 // movq (%rdi), %rsi - LONG $0x34be0f48; BYTE $0x16 // movsbq (%rsi,%rdx), %rsi - LONG $0x46448d48; BYTE $0xd0 // leaq $-48(%rsi,%rax,2), %rax - WORD $0xff48; BYTE $0xc2 // incq %rdx - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - WORD $0xd348; BYTE $0xee // shrq %cl, %rsi - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0xffd4840f; WORD $0xffff // je LBB34_1, $-44(%rip) - WORD $0x8941; BYTE $0xd3 // movl %edx, %r11d - -LBB34_7: - WORD $0x578b; BYTE $0x14 // movl $20(%rdi), %edx - WORD $0x2944; BYTE $0xda // subl %r11d, %edx - WORD $0xc2ff // incl %edx - LONG $0xffc1c749; WORD $0xffff; BYTE $0xff // movq $-1, %r9 - WORD $0xd349; BYTE $0xe1 // shlq %cl, %r9 - WORD $0x5789; BYTE $0x14 // movl %edx, $20(%rdi) - WORD $0xf749; BYTE $0xd1 // notq %r9 - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x3945; BYTE $0xc3 // cmpl %r8d, %r11d - LONG $0x00648d0f; WORD $0x0000 // jge LBB34_10, $100(%rip) - WORD $0x634d; BYTE $0xc3 // movslq %r11d, %r8 - WORD $0x8b48; BYTE $0x37 // movq (%rdi), %rsi - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - LONG $0x90909090 // .p2align 4, 0x90 - -LBB34_9: - WORD $0x8948; BYTE $0xc2 // movq %rax, %rdx - WORD $0xd348; BYTE $0xea // shrq %cl, %rdx - WORD $0x214c; BYTE $0xc8 // andq %r9, %rax - WORD $0xc280; BYTE $0x30 // addb $48, %dl - LONG $0x16148842 // movb %dl, (%rsi,%r10) - WORD $0x8b48; BYTE $0x37 // movq (%rdi), %rsi - LONG $0x06148d4a // leaq (%rsi,%r8), %rdx - LONG $0x1cbe0f4d; BYTE $0x12 // movsbq (%r10,%rdx), %r11 - LONG $0x105c8d4b; BYTE $0x01 // leaq $1(%r8,%r10), %rbx - LONG $0x01528d4d // leaq $1(%r10), %r10 - LONG $0x80048d48 // leaq (%rax,%rax,4), %rax - LONG $0x43448d49; BYTE $0xd0 // leaq $-48(%r11,%rax,2), %rax - LONG $0x10576348 // movslq $16(%rdi), %rdx - WORD $0x3948; BYTE $0xd3 // cmpq %rdx, %rbx - LONG $0xffc58c0f; WORD $0xffff // jl LBB34_9, $-59(%rip) - LONG $0x000017e9; BYTE $0x00 // jmp LBB34_10, $23(%rip) - - // .p2align 4, 0x90 -LBB34_12: - LONG $0x30c68040 // addb $48, %sil - WORD $0x8b48; BYTE $0x1f // movq (%rdi), %rbx - LONG $0x13348840 // movb %sil, (%rbx,%rdx) - WORD $0xc2ff // incl %edx - WORD $0x8941; BYTE $0xd2 // movl %edx, %r10d - -LBB34_15: - WORD $0x0148; BYTE $0xc0 // addq %rax, %rax - LONG $0x80048d48 // leaq (%rax,%rax,4), %rax - -LBB34_10: - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x002b840f; WORD $0x0000 // je LBB34_16, $43(%rip) - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - WORD $0xd348; BYTE $0xee // shrq %cl, %rsi - WORD $0x214c; BYTE $0xc8 // andq %r9, %rax - WORD $0x6349; BYTE $0xd2 // movslq %r10d, %rdx - LONG $0x08573948 // cmpq %rdx, $8(%rdi) - LONG $0xffca870f; WORD $0xffff // ja LBB34_12, $-54(%rip) - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0xffd1840f; WORD $0xffff // je LBB34_15, $-47(%rip) - LONG $0x011c47c7; WORD $0x0000; BYTE $0x00 // movl $1, $28(%rdi) - LONG $0xffffc5e9; BYTE $0xff // jmp LBB34_15, $-59(%rip) - -LBB34_16: - LONG $0x10578944 // movl %r10d, $16(%rdi) - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x00378e0f; WORD $0x0000 // jle LBB34_20, $55(%rip) - WORD $0x8b48; BYTE $0x07 // movq (%rdi), %rax - WORD $0x8944; BYTE $0xd1 // movl %r10d, %ecx - WORD $0xff48; BYTE $0xc1 // incq %rcx - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB34_18: - WORD $0xff41; BYTE $0xca // decl %r10d - LONG $0x103c8042; BYTE $0x30 // cmpb $48, (%rax,%r10) - LONG $0x001a850f; WORD $0x0000 // jne LBB34_22, $26(%rip) - LONG $0x10578944 // movl %r10d, $16(%rdi) - WORD $0xff48; BYTE $0xc9 // decq %rcx - LONG $0x01f98348 // cmpq $1, %rcx - LONG $0xffe18f0f; WORD $0xffff // jg LBB34_18, $-31(%rip) - -LBB34_20: - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x0045840f; WORD $0x0000 // je LBB34_21, $69(%rip) - -LBB34_22: - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB34_2: - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0043840f; WORD $0x0000 // je LBB34_23, $67(%rip) - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - WORD $0x8948; BYTE $0xc2 // movq %rax, %rdx - WORD $0xd348; BYTE $0xea // shrq %cl, %rdx - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0xfed0850f; WORD $0xffff // jne LBB34_7, $-304(%rip) - -LBB34_4: - WORD $0x0148; BYTE $0xc0 // addq %rax, %rax - LONG $0x80048d48 // leaq (%rax,%rax,4), %rax - WORD $0xff41; BYTE $0xc3 // incl %r11d - WORD $0x8948; BYTE $0xc2 // movq %rax, %rdx - WORD $0xd348; BYTE $0xea // shrq %cl, %rdx - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0xffe7840f; WORD $0xffff // je LBB34_4, $-25(%rip) - LONG $0xfffeb2e9; BYTE $0xff // jmp LBB34_7, $-334(%rip) - -LBB34_21: - LONG $0x001447c7; WORD $0x0000; BYTE $0x00 // movl $0, $20(%rdi) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB34_23: - LONG $0x001047c7; WORD $0x0000; BYTE $0x00 // movl $0, $16(%rdi) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x0000000000000000; LONG $0x00000000; WORD $0x0000; BYTE $0x00 // .p2align 4, 0x00 - -LCPI35_0: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - -LCPI35_1: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - - // .p2align 4, 0x90 -_advance_string_default: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax - LONG $0x087f8b4c // movq $8(%rdi), %r15 - WORD $0x2949; BYTE $0xf7 // subq %rsi, %r15 - LONG $0x0327840f; WORD $0x0000 // je LBB35_13, $807(%rip) - WORD $0x8b4c; BYTE $0x1f // movq (%rdi), %r11 - WORD $0x014c; BYTE $0xde // addq %r11, %rsi - LONG $0xff02c748; WORD $0xffff; BYTE $0xff // movq $-1, (%rdx) - LONG $0x40ff8349 // cmpq $64, %r15 - LONG $0x015f820f; WORD $0x0000 // jb LBB35_14, $351(%rip) - QUAD $0xffffffffd045c748 // movq $-1, $-48(%rbp) - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - QUAD $0xffffff9b056ff9c5 // vmovdqa $-101(%rip), %xmm0 /* LCPI35_0(%rip) */ - QUAD $0xffffffa30d6ff9c5 // vmovdqa $-93(%rip), %xmm1 /* LCPI35_1(%rip) */ - QUAD $0x555555555555ba49; WORD $0x5555 // movabsq $6148914691236517205, %r10 - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB35_3: - LONG $0x166ffac5 // vmovdqu (%rsi), %xmm2 - LONG $0x5e6ffac5; BYTE $0x10 // vmovdqu $16(%rsi), %xmm3 - LONG $0x666ffac5; BYTE $0x20 // vmovdqu $32(%rsi), %xmm4 - LONG $0x6e6ffac5; BYTE $0x30 // vmovdqu $48(%rsi), %xmm5 - LONG $0xf074e9c5 // vpcmpeqb %xmm0, %xmm2, %xmm6 - LONG $0xe6d779c5 // vpmovmskb %xmm6, %r12d - LONG $0xf074e1c5 // vpcmpeqb %xmm0, %xmm3, %xmm6 - LONG $0xc6d7f9c5 // vpmovmskb %xmm6, %eax - LONG $0xf074d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm6 - LONG $0xced7f9c5 // vpmovmskb %xmm6, %ecx - LONG $0xf074d1c5 // vpcmpeqb %xmm0, %xmm5, %xmm6 - LONG $0xfed7f9c5 // vpmovmskb %xmm6, %edi - LONG $0xd174e9c5 // vpcmpeqb %xmm1, %xmm2, %xmm2 - LONG $0xdad7f9c5 // vpmovmskb %xmm2, %ebx - LONG $0xd174e1c5 // vpcmpeqb %xmm1, %xmm3, %xmm2 - LONG $0xead779c5 // vpmovmskb %xmm2, %r13d - LONG $0xd174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm2 - LONG $0xc2d779c5 // vpmovmskb %xmm2, %r8d - LONG $0xd174d1c5 // vpcmpeqb %xmm1, %xmm5, %xmm2 - LONG $0xcad779c5 // vpmovmskb %xmm2, %r9d - LONG $0x30e7c148 // shlq $48, %rdi - LONG $0x20e1c148 // shlq $32, %rcx - LONG $0x10e0c148 // shlq $16, %rax - WORD $0x0949; BYTE $0xc4 // orq %rax, %r12 - WORD $0x0949; BYTE $0xcc // orq %rcx, %r12 - WORD $0x0949; BYTE $0xfc // orq %rdi, %r12 - LONG $0x30e1c149 // shlq $48, %r9 - LONG $0x20e0c149 // shlq $32, %r8 - LONG $0x10e5c149 // shlq $16, %r13 - WORD $0x094c; BYTE $0xeb // orq %r13, %rbx - WORD $0x094c; BYTE $0xc3 // orq %r8, %rbx - WORD $0x094c; BYTE $0xcb // orq %r9, %rbx - LONG $0x002c850f; WORD $0x0000 // jne LBB35_7, $44(%rip) - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x0042850f; WORD $0x0000 // jne LBB35_9, $66(%rip) - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x007e850f; WORD $0x0000 // jne LBB35_10, $126(%rip) - -LBB35_6: - LONG $0x40c68348 // addq $64, %rsi - LONG $0xc0c78349 // addq $-64, %r15 - LONG $0x3fff8349 // cmpq $63, %r15 - LONG $0xff56870f; WORD $0xffff // ja LBB35_3, $-170(%rip) - LONG $0x00008de9; BYTE $0x00 // jmp LBB35_15, $141(%rip) - -LBB35_7: - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0x0014850f; WORD $0x0000 // jne LBB35_9, $20(%rip) - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0x294c; BYTE $0xd8 // subq %r11, %rax - LONG $0xcbbc0f48 // bsfq %rbx, %rcx - WORD $0x0148; BYTE $0xc1 // addq %rax, %rcx - LONG $0xd04d8948 // movq %rcx, $-48(%rbp) - WORD $0x8948; BYTE $0x0a // movq %rcx, (%rdx) - -LBB35_9: - WORD $0x894c; BYTE $0xf0 // movq %r14, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x2148; BYTE $0xd8 // andq %rbx, %rax - LONG $0x000c8d48 // leaq (%rax,%rax), %rcx - WORD $0x094c; BYTE $0xf1 // orq %r14, %rcx - WORD $0x8948; BYTE $0xcf // movq %rcx, %rdi - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x2148; BYTE $0xdf // andq %rbx, %rdi - QUAD $0xaaaaaaaaaaaabb48; WORD $0xaaaa // movabsq $-6148914691236517206, %rbx - WORD $0x2148; BYTE $0xdf // andq %rbx, %rdi - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0x0148; BYTE $0xc7 // addq %rax, %rdi - LONG $0xc6920f41 // setb %r14b - WORD $0x0148; BYTE $0xff // addq %rdi, %rdi - WORD $0x314c; BYTE $0xd7 // xorq %r10, %rdi - WORD $0x2148; BYTE $0xcf // andq %rcx, %rdi - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x2149; BYTE $0xfc // andq %rdi, %r12 - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0xff82840f; WORD $0xffff // je LBB35_6, $-126(%rip) - -LBB35_10: - LONG $0xc4bc0f49 // bsfq %r12, %rax - -LBB35_11: - WORD $0x294c; BYTE $0xde // subq %r11, %rsi - LONG $0x06448d48; BYTE $0x01 // leaq $1(%rsi,%rax), %rax - -LBB35_12: - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB35_14: - QUAD $0xffffffffd045c748 // movq $-1, $-48(%rbp) - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - -LBB35_15: - LONG $0x20ff8349 // cmpq $32, %r15 - LONG $0x00cb820f; WORD $0x0000 // jb LBB35_24, $203(%rip) - LONG $0x066ffac5 // vmovdqu (%rsi), %xmm0 - LONG $0x4e6ffac5; BYTE $0x10 // vmovdqu $16(%rsi), %xmm1 - QUAD $0xfffffe29156ff9c5 // vmovdqa $-471(%rip), %xmm2 /* LCPI35_0(%rip) */ - QUAD $0xfffffe311d6ff9c5 // vmovdqa $-463(%rip), %xmm3 /* LCPI35_1(%rip) */ - LONG $0xe274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm4 - LONG $0xfcd7f9c5 // vpmovmskb %xmm4, %edi - LONG $0xd274f1c5 // vpcmpeqb %xmm2, %xmm1, %xmm2 - LONG $0xc2d7f9c5 // vpmovmskb %xmm2, %eax - LONG $0xc374f9c5 // vpcmpeqb %xmm3, %xmm0, %xmm0 - LONG $0xd8d7f9c5 // vpmovmskb %xmm0, %ebx - LONG $0xc374f1c5 // vpcmpeqb %xmm3, %xmm1, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0x10e0c148 // shlq $16, %rax - WORD $0x0948; BYTE $0xc7 // orq %rax, %rdi - LONG $0x10e1c148 // shlq $16, %rcx - WORD $0x0948; BYTE $0xcb // orq %rcx, %rbx - LONG $0x001e850f; WORD $0x0000 // jne LBB35_20, $30(%rip) - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x0034850f; WORD $0x0000 // jne LBB35_22, $52(%rip) - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0x0061840f; WORD $0x0000 // je LBB35_23, $97(%rip) - -LBB35_19: - LONG $0xc7bc0f48 // bsfq %rdi, %rax - LONG $0xffff69e9; BYTE $0xff // jmp LBB35_11, $-151(%rip) - -LBB35_20: - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0x0014850f; WORD $0x0000 // jne LBB35_22, $20(%rip) - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0x294c; BYTE $0xd8 // subq %r11, %rax - LONG $0xcbbc0f48 // bsfq %rbx, %rcx - WORD $0x0148; BYTE $0xc1 // addq %rax, %rcx - LONG $0xd04d8948 // movq %rcx, $-48(%rbp) - WORD $0x8948; BYTE $0x0a // movq %rcx, (%rdx) - -LBB35_22: - WORD $0x8944; BYTE $0xf0 // movl %r14d, %eax - WORD $0xd0f7 // notl %eax - WORD $0xd821 // andl %ebx, %eax - LONG $0x46048d45 // leal (%r14,%rax,2), %r8d - WORD $0x0c8d; BYTE $0x00 // leal (%rax,%rax), %ecx - WORD $0xd1f7 // notl %ecx - WORD $0xd921 // andl %ebx, %ecx - LONG $0xaaaae181; WORD $0xaaaa // andl $-1431655766, %ecx - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0xc101 // addl %eax, %ecx - LONG $0xc6920f41 // setb %r14b - WORD $0xc901 // addl %ecx, %ecx - LONG $0x5555f181; WORD $0x5555 // xorl $1431655765, %ecx - WORD $0x2144; BYTE $0xc1 // andl %r8d, %ecx - WORD $0xd1f7 // notl %ecx - WORD $0xcf21 // andl %ecx, %edi - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0xff9f850f; WORD $0xffff // jne LBB35_19, $-97(%rip) - -LBB35_23: - LONG $0x20c68348 // addq $32, %rsi - LONG $0xe0c78349 // addq $-32, %r15 - -LBB35_24: - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x0089850f; WORD $0x0000 // jne LBB35_35, $137(%rip) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0xfef8840f; WORD $0xffff // je LBB35_12, $-264(%rip) - -LBB35_26: - WORD $0x894d; BYTE $0xd9 // movq %r11, %r9 - WORD $0xf749; BYTE $0xd1 // notq %r9 - -LBB35_27: - LONG $0x017e8d48 // leaq $1(%rsi), %rdi - WORD $0xb60f; BYTE $0x1e // movzbl (%rsi), %ebx - WORD $0xfb80; BYTE $0x22 // cmpb $34, %bl - LONG $0x0058840f; WORD $0x0000 // je LBB35_34, $88(%rip) - LONG $0xff578d4d // leaq $-1(%r15), %r10 - WORD $0xfb80; BYTE $0x5c // cmpb $92, %bl - LONG $0x0014840f; WORD $0x0000 // je LBB35_30, $20(%rip) - WORD $0x894d; BYTE $0xd7 // movq %r10, %r15 - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0xffd4850f; WORD $0xffff // jne LBB35_27, $-44(%rip) - LONG $0xfffec1e9; BYTE $0xff // jmp LBB35_12, $-319(%rip) - -LBB35_30: - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0xfeb8840f; WORD $0xffff // je LBB35_12, $-328(%rip) - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0x000a850f; WORD $0x0000 // jne LBB35_33, $10(%rip) - WORD $0x014c; BYTE $0xcf // addq %r9, %rdi - WORD $0x8948; BYTE $0x3a // movq %rdi, (%rdx) - LONG $0xd07d8948 // movq %rdi, $-48(%rbp) - -LBB35_33: - LONG $0x02c68348 // addq $2, %rsi - LONG $0xfec78349 // addq $-2, %r15 - WORD $0x894d; BYTE $0xfa // movq %r15, %r10 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0xff9d850f; WORD $0xffff // jne LBB35_27, $-99(%rip) - LONG $0xfffe8ae9; BYTE $0xff // jmp LBB35_12, $-374(%rip) - -LBB35_34: - WORD $0x294c; BYTE $0xdf // subq %r11, %rdi - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0xfffe7fe9; BYTE $0xff // jmp LBB35_12, $-385(%rip) - -LBB35_35: - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0x0036840f; WORD $0x0000 // je LBB35_13, $54(%rip) - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0x0010850f; WORD $0x0000 // jne LBB35_38, $16(%rip) - WORD $0x894c; BYTE $0xd8 // movq %r11, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0148; BYTE $0xf0 // addq %rsi, %rax - LONG $0xd0458948 // movq %rax, $-48(%rbp) - WORD $0x8948; BYTE $0x02 // movq %rax, (%rdx) - -LBB35_38: - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0xff49; BYTE $0xcf // decq %r15 - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0xff4d850f; WORD $0xffff // jne LBB35_26, $-179(%rip) - LONG $0xfffe40e9; BYTE $0xff // jmp LBB35_12, $-448(%rip) - -LBB35_13: - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xfffe34e9; BYTE $0xff // jmp LBB35_12, $-460(%rip) - WORD $0x0000 // .p2align 4, 0x00 - -_POW10_M128_TAB: - QUAD $0x1732c869cd60e453 // .quad 1671618768450675795 - QUAD $0xfa8fd5a0081c0288 // .quad -391859759250406776 - QUAD $0x0e7fbd42205c8eb4 // .quad 1044761730281672372 - QUAD $0x9c99e58405118195 // .quad -7162441377172586091 - QUAD $0x521fac92a873b261 // .quad 5917638181279478369 - QUAD $0xc3c05ee50655e1fa // .quad -4341365703038344710 - QUAD $0xe6a797b752909ef9 // .quad -1826324310255427847 - QUAD $0xf4b0769e47eb5a78 // .quad -815021110370542984 - QUAD $0x9028bed2939a635c // .quad -8058981721550724260 - QUAD $0x98ee4a22ecf3188b // .quad -7426917221622671221 - QUAD $0x7432ee873880fc33 // .quad 8373016921771146291 - QUAD $0xbf29dcaba82fdeae // .quad -4671960508600951122 - QUAD $0x113faa2906a13b3f // .quad 1242899115359157055 - QUAD $0xeef453d6923bd65a // .quad -1228264617323800998 - QUAD $0x4ac7ca59a424c507 // .quad 5388497965526861063 - QUAD $0x9558b4661b6565f8 // .quad -7685194413468457480 - QUAD $0x5d79bcf00d2df649 // .quad 6735622456908576329 - QUAD $0xbaaee17fa23ebf76 // .quad -4994806998408183946 - QUAD $0xf4d82c2c107973dc // .quad -803843965719055396 - QUAD $0xe95a99df8ace6f53 // .quad -1631822729582842029 - QUAD $0x79071b9b8a4be869 // .quad 8720969558280366185 - QUAD $0x91d8a02bb6c10594 // .quad -7937418233630358124 - QUAD $0x9748e2826cdee284 // .quad -7545532125859093884 - QUAD $0xb64ec836a47146f9 // .quad -5310086773610559751 - QUAD $0xfd1b1b2308169b25 // .quad -208543120469091547 - QUAD $0xe3e27a444d8d98b7 // .quad -2025922448585811785 - QUAD $0xfe30f0f5e50e20f7 // .quad -130339450293182217 - QUAD $0x8e6d8c6ab0787f72 // .quad -8183730558007214222 - QUAD $0xbdbd2d335e51a935 // .quad -4774610331293865675 - QUAD $0xb208ef855c969f4f // .quad -5617977179081629873 - QUAD $0xad2c788035e61382 // .quad -5968262914117332094 - QUAD $0xde8b2b66b3bc4723 // .quad -2410785455424649437 - QUAD $0x4c3bcb5021afcc31 // .quad 5493207715531443249 - QUAD $0x8b16fb203055ac76 // .quad -8424269937281487754 - QUAD $0xdf4abe242a1bbf3d // .quad -2356862392440471747 - QUAD $0xaddcb9e83c6b1793 // .quad -5918651403174471789 - QUAD $0xd71d6dad34a2af0d // .quad -2946077990550589683 - QUAD $0xd953e8624b85dd78 // .quad -2786628235540701832 - QUAD $0x8672648c40e5ad68 // .quad -8758827771735200408 - QUAD $0x87d4713d6f33aa6b // .quad -8659171674854020501 - QUAD $0x680efdaf511f18c2 // .quad 7498209359040551106 - QUAD $0xa9c98d8ccb009506 // .quad -6212278575140137722 - QUAD $0x0212bd1b2566def2 // .quad 149389661945913074 - QUAD $0xd43bf0effdc0ba48 // .quad -3153662200497784248 - QUAD $0x014bb630f7604b57 // .quad 93368538716195671 - QUAD $0x84a57695fe98746d // .quad -8888567902952197011 - QUAD $0x419ea3bd35385e2d // .quad 4728396691822632493 - QUAD $0xa5ced43b7e3e9188 // .quad -6499023860262858360 - QUAD $0x52064cac828675b9 // .quad 5910495864778290617 - QUAD $0xcf42894a5dce35ea // .quad -3512093806901185046 - QUAD $0x7343efebd1940993 // .quad 8305745933913819539 - QUAD $0x818995ce7aa0e1b2 // .quad -9112587656954322510 - QUAD $0x1014ebe6c5f90bf8 // .quad 1158810380537498616 - QUAD $0xa1ebfb4219491a1f // .quad -6779048552765515233 - QUAD $0xd41a26e077774ef6 // .quad -3163173042755514634 - QUAD $0xca66fa129f9b60a6 // .quad -3862124672529506138 - QUAD $0x8920b098955522b4 // .quad -8565652321871781196 - QUAD $0xfd00b897478238d0 // .quad -215969822234494768 - QUAD $0x55b46e5f5d5535b0 // .quad 6175682344898606512 - QUAD $0x9e20735e8cb16382 // .quad -7052510166537641086 - QUAD $0xeb2189f734aa831d // .quad -1503769105731517667 - QUAD $0xc5a890362fddbc62 // .quad -4203951689744663454 - QUAD $0xa5e9ec7501d523e4 // .quad -6491397400591784988 - QUAD $0xf712b443bbd52b7b // .quad -643253593753441413 - QUAD $0x47b233c92125366e // .quad 5166248661484910190 - QUAD $0x9a6bb0aa55653b2d // .quad -7319562523736982739 - QUAD $0x999ec0bb696e840a // .quad -7377247228426025974 - QUAD $0xc1069cd4eabe89f8 // .quad -4537767136243840520 - QUAD $0xc00670ea43ca250d // .quad -4609873017105144563 - QUAD $0xf148440a256e2c76 // .quad -1060522901877412746 - QUAD $0x380406926a5e5728 // .quad 4036358391950366504 - QUAD $0x96cd2a865764dbca // .quad -7580355841314464822 - QUAD $0xc605083704f5ecf2 // .quad -4177924046916817678 - QUAD $0xbc807527ed3e12bc // .quad -4863758783215693124 - QUAD $0xf7864a44c633682e // .quad -610719040218634194 - QUAD $0xeba09271e88d976b // .quad -1468012460592228501 - QUAD $0x7ab3ee6afbe0211d // .quad 8841672636718129437 - QUAD $0x93445b8731587ea3 // .quad -7835036815511224669 - QUAD $0x5960ea05bad82964 // .quad 6440404777470273892 - QUAD $0xb8157268fdae9e4c // .quad -5182110000961642932 - QUAD $0x6fb92487298e33bd // .quad 8050505971837842365 - QUAD $0xe61acf033d1a45df // .quad -1865951482774665761 - QUAD $0xa5d3b6d479f8e056 // .quad -6497648813669818282 - QUAD $0x8fd0c16206306bab // .quad -8083748704375247957 - QUAD $0x8f48a4899877186c // .quad -8122061017087272852 - QUAD $0xb3c4f1ba87bc8696 // .quad -5492999862041672042 - QUAD $0x331acdabfe94de87 // .quad 3682481783923072647 - QUAD $0xe0b62e2929aba83c // .quad -2254563809124702148 - QUAD $0x9ff0c08b7f1d0b14 // .quad -6921820921902855404 - QUAD $0x8c71dcd9ba0b4925 // .quad -8326631408344020699 - QUAD $0x07ecf0ae5ee44dd9 // .quad 571095884476206553 - QUAD $0xaf8e5410288e1b6f // .quad -5796603242002637969 - QUAD $0xc9e82cd9f69d6150 // .quad -3897816162832129712 - QUAD $0xdb71e91432b1a24a // .quad -2634068034075909558 - QUAD $0xbe311c083a225cd2 // .quad -4741978110983775022 - QUAD $0x892731ac9faf056e // .quad -8563821548938525330 - QUAD $0x6dbd630a48aaf406 // .quad 7907585416552444934 - QUAD $0xab70fe17c79ac6ca // .quad -6093090917745768758 - QUAD $0x092cbbccdad5b108 // .quad 661109733835780360 - QUAD $0xd64d3d9db981787d // .quad -3004677628754823043 - QUAD $0x25bbf56008c58ea5 // .quad 2719036592861056677 - QUAD $0x85f0468293f0eb4e // .quad -8795452545612846258 - QUAD $0xaf2af2b80af6f24e // .quad -5824576295778454962 - QUAD $0xa76c582338ed2621 // .quad -6382629663588669919 - QUAD $0x1af5af660db4aee1 // .quad 1942651667131707105 - QUAD $0xd1476e2c07286faa // .quad -3366601061058449494 - QUAD $0x50d98d9fc890ed4d // .quad 5825843310384704845 - QUAD $0x82cca4db847945ca // .quad -9021654690802612790 - QUAD $0xe50ff107bab528a0 // .quad -1941067898873894752 - QUAD $0xa37fce126597973c // .quad -6665382345075878084 - QUAD $0x1e53ed49a96272c8 // .quad 2185351144835019464 - QUAD $0xcc5fc196fefd7d0c // .quad -3720041912917459700 - QUAD $0x25e8e89c13bb0f7a // .quad 2731688931043774330 - QUAD $0xff77b1fcbebcdc4f // .quad -38366372719436721 - QUAD $0x77b191618c54e9ac // .quad 8624834609543440812 - QUAD $0x9faacf3df73609b1 // .quad -6941508010590729807 - QUAD $0xd59df5b9ef6a2417 // .quad -3054014793352862697 - QUAD $0xc795830d75038c1d // .quad -4065198994811024355 - QUAD $0x4b0573286b44ad1d // .quad 5405853545163697437 - QUAD $0xf97ae3d0d2446f25 // .quad -469812725086392539 - QUAD $0x4ee367f9430aec32 // .quad 5684501474941004850 - QUAD $0x9becce62836ac577 // .quad -7211161980820077193 - QUAD $0x229c41f793cda73f // .quad 2493940825248868159 - QUAD $0xc2e801fb244576d5 // .quad -4402266457597708587 - QUAD $0x6b43527578c1110f // .quad 7729112049988473103 - QUAD $0xf3a20279ed56d48a // .quad -891147053569747830 - QUAD $0x830a13896b78aaa9 // .quad -9004363024039368023 - QUAD $0x9845418c345644d6 // .quad -7474495936122174250 - QUAD $0x23cc986bc656d553 // .quad 2579604275232953683 - QUAD $0xbe5691ef416bd60c // .quad -4731433901725329908 - QUAD $0x2cbfbe86b7ec8aa8 // .quad 3224505344041192104 - QUAD $0xedec366b11c6cb8f // .quad -1302606358729274481 - QUAD $0x7bf7d71432f3d6a9 // .quad 8932844867666826921 - QUAD $0x94b3a202eb1c3f39 // .quad -7731658001846878407 - QUAD $0xdaf5ccd93fb0cc53 // .quad -2669001970698630061 - QUAD $0xb9e08a83a5e34f07 // .quad -5052886483881210105 - QUAD $0xd1b3400f8f9cff68 // .quad -3336252463373287576 - QUAD $0xe858ad248f5c22c9 // .quad -1704422086424124727 - QUAD $0x23100809b9c21fa1 // .quad 2526528228819083169 - QUAD $0x91376c36d99995be // .quad -7982792831656159810 - QUAD $0xabd40a0c2832a78a // .quad -6065211750830921846 - QUAD $0xb58547448ffffb2d // .quad -5366805021142811859 - QUAD $0x16c90c8f323f516c // .quad 1641857348316123500 - QUAD $0xe2e69915b3fff9f9 // .quad -2096820258001126919 - QUAD $0xae3da7d97f6792e3 // .quad -5891368184943504669 - QUAD $0x8dd01fad907ffc3b // .quad -8228041688891786181 - QUAD $0x99cd11cfdf41779c // .quad -7364210231179380836 - QUAD $0xb1442798f49ffb4a // .quad -5673366092687344822 - QUAD $0x40405643d711d583 // .quad 4629795266307937667 - QUAD $0xdd95317f31c7fa1d // .quad -2480021597431793123 - QUAD $0x482835ea666b2572 // .quad 5199465050656154994 - QUAD $0x8a7d3eef7f1cfc52 // .quad -8467542526035952558 - QUAD $0xda3243650005eecf // .quad -2724040723534582065 - QUAD $0xad1c8eab5ee43b66 // .quad -5972742139117552794 - QUAD $0x90bed43e40076a82 // .quad -8016736922845615486 - QUAD $0xd863b256369d4a40 // .quad -2854241655469553088 - QUAD $0x5a7744a6e804a291 // .quad 6518754469289960081 - QUAD $0x873e4f75e2224e68 // .quad -8701430062309552536 - QUAD $0x711515d0a205cb36 // .quad 8148443086612450102 - QUAD $0xa90de3535aaae202 // .quad -6265101559459552766 - QUAD $0x0d5a5b44ca873e03 // .quad 962181821410786819 - QUAD $0xd3515c2831559a83 // .quad -3219690930897053053 - QUAD $0xe858790afe9486c2 // .quad -1704479370831952190 - QUAD $0x8412d9991ed58091 // .quad -8929835859451740015 - QUAD $0x626e974dbe39a872 // .quad 7092772823314835570 - QUAD $0xa5178fff668ae0b6 // .quad -6550608805887287114 - QUAD $0xfb0a3d212dc8128f // .quad -357406007711231345 - QUAD $0xce5d73ff402d98e3 // .quad -3576574988931720989 - QUAD $0x7ce66634bc9d0b99 // .quad 8999993282035256217 - QUAD $0x80fa687f881c7f8e // .quad -9152888395723407474 - QUAD $0x1c1fffc1ebc44e80 // .quad 2026619565689294464 - QUAD $0xa139029f6a239f72 // .quad -6829424476226871438 - QUAD $0xa327ffb266b56220 // .quad -6690097579743157728 - QUAD $0xc987434744ac874e // .quad -3925094576856201394 - QUAD $0x4bf1ff9f0062baa8 // .quad 5472436080603216552 - QUAD $0xfbe9141915d7a922 // .quad -294682202642863838 - QUAD $0x6f773fc3603db4a9 // .quad 8031958568804398249 - QUAD $0x9d71ac8fada6c9b5 // .quad -7101705404292871755 - QUAD $0xcb550fb4384d21d3 // .quad -3795109844276665901 - QUAD $0xc4ce17b399107c22 // .quad -4265445736938701790 - QUAD $0x7e2a53a146606a48 // .quad 9091170749936331336 - QUAD $0xf6019da07f549b2b // .quad -720121152745989333 - QUAD $0x2eda7444cbfc426d // .quad 3376138709496513133 - QUAD $0x99c102844f94e0fb // .quad -7367604748107325189 - QUAD $0xfa911155fefb5308 // .quad -391512631556746488 - QUAD $0xc0314325637a1939 // .quad -4597819916706768583 - QUAD $0x793555ab7eba27ca // .quad 8733981247408842698 - QUAD $0xf03d93eebc589f88 // .quad -1135588877456072824 - QUAD $0x4bc1558b2f3458de // .quad 5458738279630526686 - QUAD $0x96267c7535b763b5 // .quad -7627272076051127371 - QUAD $0x9eb1aaedfb016f16 // .quad -7011635205744005354 - QUAD $0xbbb01b9283253ca2 // .quad -4922404076636521310 - QUAD $0x465e15a979c1cadc // .quad 5070514048102157020 - QUAD $0xea9c227723ee8bcb // .quad -1541319077368263733 - QUAD $0x0bfacd89ec191ec9 // .quad 863228270850154185 - QUAD $0x92a1958a7675175f // .quad -7880853450996246689 - QUAD $0xcef980ec671f667b // .quad -3532650679864695173 - QUAD $0xb749faed14125d36 // .quad -5239380795317920458 - QUAD $0x82b7e12780e7401a // .quad -9027499368258256870 - QUAD $0xe51c79a85916f484 // .quad -1937539975720012668 - QUAD $0xd1b2ecb8b0908810 // .quad -3336344095947716592 - QUAD $0x8f31cc0937ae58d2 // .quad -8128491512466089774 - QUAD $0x861fa7e6dcb4aa15 // .quad -8782116138362033643 - QUAD $0xb2fe3f0b8599ef07 // .quad -5548928372155224313 - QUAD $0x67a791e093e1d49a // .quad 7469098900757009562 - QUAD $0xdfbdcece67006ac9 // .quad -2324474446766642487 - QUAD $0xe0c8bb2c5c6d24e0 // .quad -2249342214667950880 - QUAD $0x8bd6a141006042bd // .quad -8370325556870233411 - QUAD $0x58fae9f773886e18 // .quad 6411694268519837208 - QUAD $0xaecc49914078536d // .quad -5851220927660403859 - QUAD $0xaf39a475506a899e // .quad -5820440219632367202 - QUAD $0xda7f5bf590966848 // .quad -2702340141148116920 - QUAD $0x6d8406c952429603 // .quad 7891439908798240259 - QUAD $0x888f99797a5e012d // .quad -8606491615858654931 - QUAD $0xc8e5087ba6d33b83 // .quad -3970758169284363389 - QUAD $0xaab37fd7d8f58178 // .quad -6146428501395930760 - QUAD $0xfb1e4a9a90880a64 // .quad -351761693178066332 - QUAD $0xd5605fcdcf32e1d6 // .quad -3071349608317525546 - QUAD $0x5cf2eea09a55067f // .quad 6697677969404790399 - QUAD $0x855c3be0a17fcd26 // .quad -8837122532839535322 - QUAD $0xf42faa48c0ea481e // .quad -851274575098787810 - QUAD $0xa6b34ad8c9dfc06f // .quad -6434717147622031249 - QUAD $0xf13b94daf124da26 // .quad -1064093218873484762 - QUAD $0xd0601d8efc57b08b // .quad -3431710416100151157 - QUAD $0x76c53d08d6b70858 // .quad 8558313775058847832 - QUAD $0x823c12795db6ce57 // .quad -9062348037703676329 - QUAD $0x54768c4b0c64ca6e // .quad 6086206200396171886 - QUAD $0xa2cb1717b52481ed // .quad -6716249028702207507 - QUAD $0xa9942f5dcf7dfd09 // .quad -6227300304786948855 - QUAD $0xcb7ddcdda26da268 // .quad -3783625267450371480 - QUAD $0xd3f93b35435d7c4c // .quad -3172439362556298164 - QUAD $0xfe5d54150b090b02 // .quad -117845565885576446 - QUAD $0xc47bc5014a1a6daf // .quad -4288617610811380305 - QUAD $0x9efa548d26e5a6e1 // .quad -6991182506319567135 - QUAD $0x359ab6419ca1091b // .quad 3862600023340550427 - QUAD $0xc6b8e9b0709f109a // .quad -4127292114472071014 - QUAD $0xc30163d203c94b62 // .quad -4395122007679087774 - QUAD $0xf867241c8cc6d4c0 // .quad -547429124662700864 - QUAD $0x79e0de63425dcf1d // .quad 8782263791269039901 - QUAD $0x9b407691d7fc44f8 // .quad -7259672230555269896 - QUAD $0x985915fc12f542e4 // .quad -7468914334623251740 - QUAD $0xc21094364dfb5636 // .quad -4462904269766699466 - QUAD $0x3e6f5b7b17b2939d // .quad 4498915137003099037 - QUAD $0xf294b943e17a2bc4 // .quad -966944318780986428 - QUAD $0xa705992ceecf9c42 // .quad -6411550076227838910 - QUAD $0x979cf3ca6cec5b5a // .quad -7521869226879198374 - QUAD $0x50c6ff782a838353 // .quad 5820620459997365075 - QUAD $0xbd8430bd08277231 // .quad -4790650515171610063 - QUAD $0xa4f8bf5635246428 // .quad -6559282480285457368 - QUAD $0xece53cec4a314ebd // .quad -1376627125537124675 - QUAD $0x871b7795e136be99 // .quad -8711237568605798759 - QUAD $0x940f4613ae5ed136 // .quad -7777920981101784778 - QUAD $0x28e2557b59846e3f // .quad 2946011094524915263 - QUAD $0xb913179899f68584 // .quad -5110715207949843068 - QUAD $0x331aeada2fe589cf // .quad 3682513868156144079 - QUAD $0xe757dd7ec07426e5 // .quad -1776707991509915931 - QUAD $0x3ff0d2c85def7621 // .quad 4607414176811284001 - QUAD $0x9096ea6f3848984f // .quad -8027971522334779313 - QUAD $0x0fed077a756b53a9 // .quad 1147581702586717097 - QUAD $0xb4bca50b065abe63 // .quad -5423278384491086237 - QUAD $0xd3e8495912c62894 // .quad -3177208890193991532 - QUAD $0xe1ebce4dc7f16dfb // .quad -2167411962186469893 - QUAD $0x64712dd7abbbd95c // .quad 7237616480483531100 - QUAD $0x8d3360f09cf6e4bd // .quad -8272161504007625539 - QUAD $0xbd8d794d96aacfb3 // .quad -4788037454677749837 - QUAD $0xb080392cc4349dec // .quad -5728515861582144020 - QUAD $0xecf0d7a0fc5583a0 // .quad -1373360799919799392 - QUAD $0xdca04777f541c567 // .quad -2548958808550292121 - QUAD $0xf41686c49db57244 // .quad -858350499949874620 - QUAD $0x89e42caaf9491b60 // .quad -8510628282985014432 - QUAD $0x311c2875c522ced5 // .quad 3538747893490044629 - QUAD $0xac5d37d5b79b6239 // .quad -6026599335303880135 - QUAD $0x7d633293366b828b // .quad 9035120885289943691 - QUAD $0xd77485cb25823ac7 // .quad -2921563150702462265 - QUAD $0xae5dff9c02033197 // .quad -5882264492762254953 - QUAD $0x86a8d39ef77164bc // .quad -8743505996830120772 - QUAD $0xd9f57f830283fdfc // .quad -2741144597525430788 - QUAD $0xa8530886b54dbdeb // .quad -6317696477610263061 - QUAD $0xd072df63c324fd7b // .quad -3426430746906788485 - QUAD $0xd267caa862a12d66 // .quad -3285434578585440922 - QUAD $0x4247cb9e59f71e6d // .quad 4776009810824339053 - QUAD $0x8380dea93da4bc60 // .quad -8970925639256982432 - QUAD $0x52d9be85f074e608 // .quad 5970012263530423816 - QUAD $0xa46116538d0deb78 // .quad -6601971030643840136 - QUAD $0x67902e276c921f8b // .quad 7462515329413029771 - QUAD $0xcd795be870516656 // .quad -3640777769877412266 - QUAD $0x00ba1cd8a3db53b6 // .quad 52386062455755702 - QUAD $0x806bd9714632dff6 // .quad -9193015133814464522 - QUAD $0x80e8a40eccd228a4 // .quad -9157889458785081180 - QUAD $0xa086cfcd97bf97f3 // .quad -6879582898840692749 - QUAD $0x6122cd128006b2cd // .quad 6999382250228200141 - QUAD $0xc8a883c0fdaf7df0 // .quad -3987792605123478032 - QUAD $0x796b805720085f81 // .quad 8749227812785250177 - QUAD $0xfad2a4b13d1b5d6c // .quad -373054737976959636 - QUAD $0xcbe3303674053bb0 // .quad -3755104653863994448 - QUAD $0x9cc3a6eec6311a63 // .quad -7150688238876681629 - QUAD $0xbedbfc4411068a9c // .quad -4693880817329993060 - QUAD $0xc3f490aa77bd60fc // .quad -4326674280168464132 - QUAD $0xee92fb5515482d44 // .quad -1255665003235103420 - QUAD $0xf4f1b4d515acb93b // .quad -796656831783192261 - QUAD $0x751bdd152d4d1c4a // .quad 8438581409832836170 - QUAD $0x991711052d8bf3c5 // .quad -7415439547505577019 - QUAD $0xd262d45a78a0635d // .quad -3286831292991118499 - QUAD $0xbf5cd54678eef0b6 // .quad -4657613415954583370 - QUAD $0x86fb897116c87c34 // .quad -8720225134666286028 - QUAD $0xef340a98172aace4 // .quad -1210330751515841308 - QUAD $0xd45d35e6ae3d4da0 // .quad -3144297699952734816 - QUAD $0x9580869f0e7aac0e // .quad -7673985747338482674 - QUAD $0x8974836059cca109 // .quad -8542058143368306423 - QUAD $0xbae0a846d2195712 // .quad -4980796165745715438 - QUAD $0x2bd1a438703fc94b // .quad 3157485376071780683 - QUAD $0xe998d258869facd7 // .quad -1614309188754756393 - QUAD $0x7b6306a34627ddcf // .quad 8890957387685944783 - QUAD $0x91ff83775423cc06 // .quad -7926472270612804602 - QUAD $0x1a3bc84c17b1d542 // .quad 1890324697752655170 - QUAD $0xb67f6455292cbf08 // .quad -5296404319838617848 - QUAD $0x20caba5f1d9e4a93 // .quad 2362905872190818963 - QUAD $0xe41f3d6a7377eeca // .quad -2008819381370884406 - QUAD $0x547eb47b7282ee9c // .quad 6088502188546649756 - QUAD $0x8e938662882af53e // .quad -8173041140997884610 - QUAD $0xe99e619a4f23aa43 // .quad -1612744301171463613 - QUAD $0xb23867fb2a35b28d // .quad -5604615407819967859 - QUAD $0x6405fa00e2ec94d4 // .quad 7207441660390446292 - QUAD $0xdec681f9f4c31f31 // .quad -2394083241347571919 - QUAD $0xde83bc408dd3dd04 // .quad -2412877989897052924 - QUAD $0x8b3c113c38f9f37e // .quad -8413831053483314306 - QUAD $0x9624ab50b148d445 // .quad -7627783505798704059 - QUAD $0xae0b158b4738705e // .quad -5905602798426754978 - QUAD $0x3badd624dd9b0957 // .quad 4300328673033783639 - QUAD $0xd98ddaee19068c76 // .quad -2770317479606055818 - QUAD $0xe54ca5d70a80e5d6 // .quad -1923980597781273130 - QUAD $0x87f8a8d4cfa417c9 // .quad -8648977452394866743 - QUAD $0x5e9fcf4ccd211f4c // .quad 6818396289628184396 - QUAD $0xa9f6d30a038d1dbc // .quad -6199535797066195524 - QUAD $0x7647c3200069671f // .quad 8522995362035230495 - QUAD $0xd47487cc8470652b // .quad -3137733727905356501 - QUAD $0x29ecd9f40041e073 // .quad 3021029092058325107 - QUAD $0x84c8d4dfd2c63f3b // .quad -8878612607581929669 - QUAD $0xf468107100525890 // .quad -835399653354481520 - QUAD $0xa5fb0a17c777cf09 // .quad -6486579741050024183 - QUAD $0x7182148d4066eeb4 // .quad 8179122470161673908 - QUAD $0xcf79cc9db955c2cc // .quad -3496538657885142324 - QUAD $0xc6f14cd848405530 // .quad -4111420493003729616 - QUAD $0x81ac1fe293d599bf // .quad -9102865688819295809 - QUAD $0xb8ada00e5a506a7c // .quad -5139275616254662020 - QUAD $0xa21727db38cb002f // .quad -6766896092596731857 - QUAD $0xa6d90811f0e4851c // .quad -6424094520318327524 - QUAD $0xca9cf1d206fdc03b // .quad -3846934097318526917 - QUAD $0x908f4a166d1da663 // .quad -8030118150397909405 - QUAD $0xfd442e4688bd304a // .quad -196981603220770742 - QUAD $0x9a598e4e043287fe // .quad -7324666853212387330 - QUAD $0x9e4a9cec15763e2e // .quad -7040642529654063570 - QUAD $0x40eff1e1853f29fd // .quad 4679224488766679549 - QUAD $0xc5dd44271ad3cdba // .quad -4189117143640191558 - QUAD $0xd12bee59e68ef47c // .quad -3374341425896426372 - QUAD $0xf7549530e188c128 // .quad -624710411122851544 - QUAD $0x82bb74f8301958ce // .quad -9026492418826348338 - QUAD $0x9a94dd3e8cf578b9 // .quad -7307973034592864071 - QUAD $0xe36a52363c1faf01 // .quad -2059743486678159615 - QUAD $0xc13a148e3032d6e7 // .quad -4523280274813692185 - QUAD $0xdc44e6c3cb279ac1 // .quad -2574679358347699519 - QUAD $0xf18899b1bc3f8ca1 // .quad -1042414325089727327 - QUAD $0x29ab103a5ef8c0b9 // .quad 3002511419460075705 - QUAD $0x96f5600f15a7b7e5 // .quad -7569037980822161435 - QUAD $0x7415d448f6b6f0e7 // .quad 8364825292752482535 - QUAD $0xbcb2b812db11a5de // .quad -4849611457600313890 - QUAD $0x111b495b3464ad21 // .quad 1232659579085827361 - QUAD $0xebdf661791d60f56 // .quad -1450328303573004458 - QUAD $0xcab10dd900beec34 // .quad -3841273781498745804 - QUAD $0x936b9fcebb25c995 // .quad -7823984217374209643 - QUAD $0x3d5d514f40eea742 // .quad 4421779809981343554 - QUAD $0xb84687c269ef3bfb // .quad -5168294253290374149 - QUAD $0x0cb4a5a3112a5112 // .quad 915538744049291538 - QUAD $0xe65829b3046b0afa // .quad -1848681798185579782 - QUAD $0x47f0e785eaba72ab // .quad 5183897733458195115 - QUAD $0x8ff71a0fe2c2e6dc // .quad -8072955151507069220 - QUAD $0x59ed216765690f56 // .quad 6479872166822743894 - QUAD $0xb3f4e093db73a093 // .quad -5479507920956448621 - QUAD $0x306869c13ec3532c // .quad 3488154190101041964 - QUAD $0xe0f218b8d25088b8 // .quad -2237698882768172872 - QUAD $0x1e414218c73a13fb // .quad 2180096368813151227 - QUAD $0x8c974f7383725573 // .quad -8316090829371189901 - QUAD $0xe5d1929ef90898fa // .quad -1886565557410948870 - QUAD $0xafbd2350644eeacf // .quad -5783427518286599473 - QUAD $0xdf45f746b74abf39 // .quad -2358206946763686087 - QUAD $0xdbac6c247d62a583 // .quad -2617598379430861437 - QUAD $0x6b8bba8c328eb783 // .quad 7749492695127472003 - QUAD $0x894bc396ce5da772 // .quad -8553528014785370254 - QUAD $0x066ea92f3f326564 // .quad 463493832054564196 - QUAD $0xab9eb47c81f5114f // .quad -6080224000054324913 - QUAD $0xc80a537b0efefebd // .quad -4032318728359182659 - QUAD $0xd686619ba27255a2 // .quad -2988593981640518238 - QUAD $0xbd06742ce95f5f36 // .quad -4826042214438183114 - QUAD $0x8613fd0145877585 // .quad -8785400266166405755 - QUAD $0x2c48113823b73704 // .quad 3190819268807046916 - QUAD $0xa798fc4196e952e7 // .quad -6370064314280619289 - QUAD $0xf75a15862ca504c5 // .quad -623161932418579259 - QUAD $0xd17f3b51fca3a7a0 // .quad -3350894374423386208 - QUAD $0x9a984d73dbe722fb // .quad -7307005235402693893 - QUAD $0x82ef85133de648c4 // .quad -9011838011655698236 - QUAD $0xc13e60d0d2e0ebba // .quad -4522070525825979462 - QUAD $0xa3ab66580d5fdaf5 // .quad -6653111496142234891 - QUAD $0x318df905079926a8 // .quad 3570783879572301480 - QUAD $0xcc963fee10b7d1b3 // .quad -3704703351750405709 - QUAD $0xfdf17746497f7052 // .quad -148206168962011054 - QUAD $0xffbbcfe994e5c61f // .quad -19193171260619233 - QUAD $0xfeb6ea8bedefa633 // .quad -92628855601256909 - QUAD $0x9fd561f1fd0f9bd3 // .quad -6929524759678968877 - QUAD $0xfe64a52ee96b8fc0 // .quad -115786069501571136 - QUAD $0xc7caba6e7c5382c8 // .quad -4050219931171323192 - QUAD $0x3dfdce7aa3c673b0 // .quad 4466953431550423984 - QUAD $0xf9bd690a1b68637b // .quad -451088895536766085 - QUAD $0x06bea10ca65c084e // .quad 486002885505321038 - QUAD $0x9c1661a651213e2d // .quad -7199459587351560659 - QUAD $0x486e494fcff30a62 // .quad 5219189625309039202 - QUAD $0xc31bfa0fe5698db8 // .quad -4387638465762062920 - QUAD $0x5a89dba3c3efccfa // .quad 6523987031636299002 - QUAD $0xf3e2f893dec3f126 // .quad -872862063775190746 - QUAD $0xf89629465a75e01c // .quad -534194123654701028 - QUAD $0x986ddb5c6b3a76b7 // .quad -7463067817500576073 - QUAD $0xf6bbb397f1135823 // .quad -667742654568376285 - QUAD $0xbe89523386091465 // .quad -4717148753448332187 - QUAD $0x746aa07ded582e2c // .quad 8388693718644305452 - QUAD $0xee2ba6c0678b597f // .quad -1284749923383027329 - QUAD $0xa8c2a44eb4571cdc // .quad -6286281471915778852 - QUAD $0x94db483840b717ef // .quad -7720497729755473937 - QUAD $0x92f34d62616ce413 // .quad -7857851839894723565 - QUAD $0xba121a4650e4ddeb // .quad -5038936143766954517 - QUAD $0x77b020baf9c81d17 // .quad 8624429273841147159 - QUAD $0xe896a0d7e51e1566 // .quad -1686984161281305242 - QUAD $0x0ace1474dc1d122e // .quad 778582277723329070 - QUAD $0x915e2486ef32cd60 // .quad -7971894128441897632 - QUAD $0x0d819992132456ba // .quad 973227847154161338 - QUAD $0xb5b5ada8aaff80b8 // .quad -5353181642124984136 - QUAD $0x10e1fff697ed6c69 // .quad 1216534808942701673 - QUAD $0xe3231912d5bf60e6 // .quad -2079791034228842266 - QUAD $0xca8d3ffa1ef463c1 // .quad -3851351762838199359 - QUAD $0x8df5efabc5979c8f // .quad -8217398424034108273 - QUAD $0xbd308ff8a6b17cb2 // .quad -4814189703547749198 - QUAD $0xb1736b96b6fd83b3 // .quad -5660062011615247437 - QUAD $0xac7cb3f6d05ddbde // .quad -6017737129434686498 - QUAD $0xddd0467c64bce4a0 // .quad -2463391496091671392 - QUAD $0x6bcdf07a423aa96b // .quad 7768129340171790699 - QUAD $0x8aa22c0dbef60ee4 // .quad -8457148712698376476 - QUAD $0x86c16c98d2c953c6 // .quad -8736582398494813242 - QUAD $0xad4ab7112eb3929d // .quad -5959749872445582691 - QUAD $0xe871c7bf077ba8b7 // .quad -1697355961263740745 - QUAD $0xd89d64d57a607744 // .quad -2838001322129590460 - QUAD $0x11471cd764ad4972 // .quad 1244995533423855986 - QUAD $0x87625f056c7c4a8b // .quad -8691279853972075893 - QUAD $0xd598e40d3dd89bcf // .quad -3055441601647567921 - QUAD $0xa93af6c6c79b5d2d // .quad -6252413799037706963 - QUAD $0x4aff1d108d4ec2c3 // .quad 5404070034795315907 - QUAD $0xd389b47879823479 // .quad -3203831230369745799 - QUAD $0xcedf722a585139ba // .quad -3539985255894009414 - QUAD $0x843610cb4bf160cb // .quad -8919923546622172981 - QUAD $0xc2974eb4ee658828 // .quad -4424981569867511768 - QUAD $0xa54394fe1eedb8fe // .quad -6538218414850328322 - QUAD $0x733d226229feea32 // .quad 8303831092947774002 - QUAD $0xce947a3da6a9273e // .quad -3561087000135522498 - QUAD $0x0806357d5a3f525f // .quad 578208414664970847 - QUAD $0x811ccc668829b887 // .quad -9143208402725783417 - QUAD $0xca07c2dcb0cf26f7 // .quad -3888925500096174345 - QUAD $0xa163ff802a3426a8 // .quad -6817324484979841368 - QUAD $0xfc89b393dd02f0b5 // .quad -249470856692830027 - QUAD $0xc9bcff6034c13052 // .quad -3909969587797413806 - QUAD $0xbbac2078d443ace2 // .quad -4923524589293425438 - QUAD $0xfc2c3f3841f17c67 // .quad -275775966319379353 - QUAD $0xd54b944b84aa4c0d // .quad -3077202868308390899 - QUAD $0x9d9ba7832936edc0 // .quad -7089889006590693952 - QUAD $0x0a9e795e65d4df11 // .quad 765182433041899281 - QUAD $0xc5029163f384a931 // .quad -4250675239810979535 - QUAD $0x4d4617b5ff4a16d5 // .quad 5568164059729762005 - QUAD $0xf64335bcf065d37d // .quad -701658031336336515 - QUAD $0x504bced1bf8e4e45 // .quad 5785945546544795205 - QUAD $0x99ea0196163fa42e // .quad -7356065297226292178 - QUAD $0xe45ec2862f71e1d6 // .quad -1990940103673781802 - QUAD $0xc06481fb9bcf8d39 // .quad -4583395603105477319 - QUAD $0x5d767327bb4e5a4c // .quad 6734696907262548556 - QUAD $0xf07da27a82c37088 // .quad -1117558485454458744 - QUAD $0x3a6a07f8d510f86f // .quad 4209185567039092847 - QUAD $0x964e858c91ba2655 // .quad -7616003081050118571 - QUAD $0x890489f70a55368b // .quad -8573576096483297653 - QUAD $0xbbe226efb628afea // .quad -4908317832885260310 - QUAD $0x2b45ac74ccea842e // .quad 3118087934678041646 - QUAD $0xeadab0aba3b2dbe5 // .quad -1523711272679187483 - QUAD $0x3b0b8bc90012929d // .quad 4254647968387469981 - QUAD $0x92c8ae6b464fc96f // .quad -7869848573065574033 - QUAD $0x09ce6ebb40173744 // .quad 706623942056949572 - QUAD $0xb77ada0617e3bbcb // .quad -5225624697904579637 - QUAD $0xcc420a6a101d0515 // .quad -3728406090856200939 - QUAD $0xe55990879ddcaabd // .quad -1920344853953336643 - QUAD $0x9fa946824a12232d // .quad -6941939825212513491 - QUAD $0x8f57fa54c2a9eab6 // .quad -8117744561361917258 - QUAD $0x47939822dc96abf9 // .quad 5157633273766521849 - QUAD $0xb32df8e9f3546564 // .quad -5535494683275008668 - QUAD $0x59787e2b93bc56f7 // .quad 6447041592208152311 - QUAD $0xdff9772470297ebd // .quad -2307682335666372931 - QUAD $0x57eb4edb3c55b65a // .quad 6335244004343789146 - QUAD $0x8bfbea76c619ef36 // .quad -8359830487432564938 - QUAD $0xede622920b6b23f1 // .quad -1304317031425039375 - QUAD $0xaefae51477a06b03 // .quad -5838102090863318269 - QUAD $0xe95fab368e45eced // .quad -1630396289281299219 - QUAD $0xdab99e59958885c4 // .quad -2685941595151759932 - QUAD $0x11dbcb0218ebb414 // .quad 1286845328412881940 - QUAD $0x88b402f7fd75539b // .quad -8596242524610931813 - QUAD $0xd652bdc29f26a119 // .quad -3003129357911285479 - QUAD $0xaae103b5fcd2a881 // .quad -6133617137336276863 - QUAD $0x4be76d3346f0495f // .quad 5469460339465668959 - QUAD $0xd59944a37c0752a2 // .quad -3055335403242958174 - QUAD $0x6f70a4400c562ddb // .quad 8030098730593431003 - QUAD $0x857fcae62d8493a5 // .quad -8827113654667930715 - QUAD $0xcb4ccd500f6bb952 // .quad -3797434642040374958 - QUAD $0xa6dfbd9fb8e5b88e // .quad -6422206049907525490 - QUAD $0x7e2000a41346a7a7 // .quad 9088264752731695015 - QUAD $0xd097ad07a71f26b2 // .quad -3416071543957018958 - QUAD $0x8ed400668c0c28c8 // .quad -8154892584824854328 - QUAD $0x825ecc24c873782f // .quad -9052573742614218705 - QUAD $0x728900802f0f32fa // .quad 8253128342678483706 - QUAD $0xa2f67f2dfa90563b // .quad -6704031159840385477 - QUAD $0x4f2b40a03ad2ffb9 // .quad 5704724409920716729 - QUAD $0xcbb41ef979346bca // .quad -3768352931373093942 - QUAD $0xe2f610c84987bfa8 // .quad -2092466524453879896 - QUAD $0xfea126b7d78186bc // .quad -98755145788979524 - QUAD $0x0dd9ca7d2df4d7c9 // .quad 998051431430019017 - QUAD $0x9f24b832e6b0f436 // .quad -6979250993759194058 - QUAD $0x91503d1c79720dbb // .quad -7975807747567252037 - QUAD $0xc6ede63fa05d3143 // .quad -4112377723771604669 - QUAD $0x75a44c6397ce912a // .quad 8476984389250486570 - QUAD $0xf8a95fcf88747d94 // .quad -528786136287117932 - QUAD $0xc986afbe3ee11aba // .quad -3925256793573221702 - QUAD $0x9b69dbe1b548ce7c // .quad -7248020362820530564 - QUAD $0xfbe85badce996168 // .quad -294884973539139224 - QUAD $0xc24452da229b021b // .quad -4448339435098275301 - QUAD $0xfae27299423fb9c3 // .quad -368606216923924029 - QUAD $0xf2d56790ab41c2a2 // .quad -948738275445456222 - QUAD $0xdccd879fc967d41a // .quad -2536221894791146470 - QUAD $0x97c560ba6b0919a5 // .quad -7510490449794491995 - QUAD $0x5400e987bbc1c920 // .quad 6053094668365842720 - QUAD $0xbdb6b8e905cb600f // .quad -4776427043815727089 - QUAD $0x290123e9aab23b68 // .quad 2954682317029915496 - QUAD $0xed246723473e3813 // .quad -1358847786342270957 - QUAD $0xf9a0b6720aaf6521 // .quad -459166561069996767 - QUAD $0x9436c0760c86e30b // .quad -7766808894105001205 - QUAD $0xf808e40e8d5b3e69 // .quad -573958201337495959 - QUAD $0xb94470938fa89bce // .quad -5096825099203863602 - QUAD $0xb60b1d1230b20e04 // .quad -5329133770099257852 - QUAD $0xe7958cb87392c2c2 // .quad -1759345355577441598 - QUAD $0xb1c6f22b5e6f48c2 // .quad -5636551615525730110 - QUAD $0x90bd77f3483bb9b9 // .quad -8017119874876982855 - QUAD $0x1e38aeb6360b1af3 // .quad 2177682517447613171 - QUAD $0xb4ecd5f01a4aa828 // .quad -5409713825168840664 - QUAD $0x25c6da63c38de1b0 // .quad 2722103146809516464 - QUAD $0xe2280b6c20dd5232 // .quad -2150456263033662926 - QUAD $0x579c487e5a38ad0e // .quad 6313000485183335694 - QUAD $0x8d590723948a535f // .quad -8261564192037121185 - QUAD $0x2d835a9df0c6d851 // .quad 3279564588051781713 - QUAD $0xb0af48ec79ace837 // .quad -5715269221619013577 - QUAD $0xf8e431456cf88e65 // .quad -512230283362660763 - QUAD $0xdcdb1b2798182244 // .quad -2532400508596379068 - QUAD $0x1b8e9ecb641b58ff // .quad 1985699082112030975 - QUAD $0x8a08f0f8bf0f156b // .quad -8500279345513818773 - QUAD $0xe272467e3d222f3f // .quad -2129562165787349185 - QUAD $0xac8b2d36eed2dac5 // .quad -6013663163464885563 - QUAD $0x5b0ed81dcc6abb0f // .quad 6561419329620589327 - QUAD $0xd7adf884aa879177 // .quad -2905392935903719049 - QUAD $0x98e947129fc2b4e9 // .quad -7428327965055601431 - QUAD $0x86ccbb52ea94baea // .quad -8733399612580906262 - QUAD $0x3f2398d747b36224 // .quad 4549648098962661924 - QUAD $0xa87fea27a539e9a5 // .quad -6305063497298744923 - QUAD $0x8eec7f0d19a03aad // .quad -8147997931578836307 - QUAD $0xd29fe4b18e88640e // .quad -3269643353196043250 - QUAD $0x1953cf68300424ac // .quad 1825030320404309164 - QUAD $0x83a3eeeef9153e89 // .quad -8961056123388608887 - QUAD $0x5fa8c3423c052dd7 // .quad 6892973918932774359 - QUAD $0xa48ceaaab75a8e2b // .quad -6589634135808373205 - QUAD $0x3792f412cb06794d // .quad 4004531380238580045 - QUAD $0xcdb02555653131b6 // .quad -3625356651333078602 - QUAD $0xe2bbd88bbee40bd0 // .quad -2108853905778275376 - QUAD $0x808e17555f3ebf11 // .quad -9183376934724255983 - QUAD $0x5b6aceaeae9d0ec4 // .quad 6587304654631931588 - QUAD $0xa0b19d2ab70e6ed6 // .quad -6867535149977932074 - QUAD $0xf245825a5a445275 // .quad -989241218564861323 - QUAD $0xc8de047564d20a8b // .quad -3972732919045027189 - QUAD $0xeed6e2f0f0d56712 // .quad -1236551523206076654 - QUAD $0xfb158592be068d2e // .quad -354230130378896082 - QUAD $0x55464dd69685606b // .quad 6144684325637283947 - QUAD $0x9ced737bb6c4183d // .quad -7138922859127891907 - QUAD $0xaa97e14c3c26b886 // .quad -6154202648235558778 - QUAD $0xc428d05aa4751e4c // .quad -4311967555482476980 - QUAD $0xd53dd99f4b3066a8 // .quad -3081067291867060568 - QUAD $0xf53304714d9265df // .quad -778273425925708321 - QUAD $0xe546a8038efe4029 // .quad -1925667057416912855 - QUAD $0x993fe2c6d07b7fab // .quad -7403949918844649557 - QUAD $0xde98520472bdd033 // .quad -2407083821771141069 - QUAD $0xbf8fdb78849a5f96 // .quad -4643251380128424042 - QUAD $0x963e66858f6d4440 // .quad -7620540795641314240 - QUAD $0xef73d256a5c0f77c // .quad -1192378206733142148 - QUAD $0xdde7001379a44aa8 // .quad -2456994988062127448 - QUAD $0x95a8637627989aad // .quad -7662765406849295699 - QUAD $0x5560c018580d5d52 // .quad 6152128301777116498 - QUAD $0xbb127c53b17ec159 // .quad -4966770740134231719 - QUAD $0xaab8f01e6e10b4a6 // .quad -6144897678060768090 - QUAD $0xe9d71b689dde71af // .quad -1596777406740401745 - QUAD $0xcab3961304ca70e8 // .quad -3840561048787980056 - QUAD $0x9226712162ab070d // .quad -7915514906853832947 - QUAD $0x3d607b97c5fd0d22 // .quad 4422670725869800738 - QUAD $0xb6b00d69bb55c8d1 // .quad -5282707615139903279 - QUAD $0x8cb89a7db77c506a // .quad -8306719647944912790 - QUAD $0xe45c10c42a2b3b05 // .quad -1991698500497491195 - QUAD $0x77f3608e92adb242 // .quad 8643358275316593218 - QUAD $0x8eb98a7a9a5b04e3 // .quad -8162340590452013853 - QUAD $0x55f038b237591ed3 // .quad 6192511825718353619 - QUAD $0xb267ed1940f1c61c // .quad -5591239719637629412 - QUAD $0x6b6c46dec52f6688 // .quad 7740639782147942024 - QUAD $0xdf01e85f912e37a3 // .quad -2377363631119648861 - QUAD $0x2323ac4b3b3da015 // .quad 2532056854628769813 - QUAD $0x8b61313bbabce2c6 // .quad -8403381297090862394 - QUAD $0xabec975e0a0d081a // .quad -6058300968568813542 - QUAD $0xae397d8aa96c1b77 // .quad -5892540602936190089 - QUAD $0x96e7bd358c904a21 // .quad -7572876210711016927 - QUAD $0xd9c7dced53c72255 // .quad -2753989735242849707 - QUAD $0x7e50d64177da2e54 // .quad 9102010423587778132 - QUAD $0x881cea14545c7575 // .quad -8638772612167862923 - QUAD $0xdde50bd1d5d0b9e9 // .quad -2457545025797441047 - QUAD $0xaa242499697392d2 // .quad -6186779746782440750 - QUAD $0x955e4ec64b44e864 // .quad -7683617300674189212 - QUAD $0xd4ad2dbfc3d07787 // .quad -3121788665050663033 - QUAD $0xbd5af13bef0b113e // .quad -4802260812921368258 - QUAD $0x84ec3c97da624ab4 // .quad -8868646943297746252 - QUAD $0xecb1ad8aeacdd58e // .quad -1391139997724322418 - QUAD $0xa6274bbdd0fadd61 // .quad -6474122660694794911 - QUAD $0x67de18eda5814af2 // .quad 7484447039699372786 - QUAD $0xcfb11ead453994ba // .quad -3480967307441105734 - QUAD $0x80eacf948770ced7 // .quad -9157278655470055721 - QUAD $0x81ceb32c4b43fcf4 // .quad -9093133594791772940 - QUAD $0xa1258379a94d028d // .quad -6834912300910181747 - QUAD $0xa2425ff75e14fc31 // .quad -6754730975062328271 - QUAD $0x096ee45813a04330 // .quad 679731660717048624 - QUAD $0xcad2f7f5359a3b3e // .quad -3831727700400522434 - QUAD $0x8bca9d6e188853fc // .quad -8373707460958465028 - QUAD $0xfd87b5f28300ca0d // .quad -177973607073265139 - QUAD $0x775ea264cf55347d // .quad 8601490892183123069 - QUAD $0x9e74d1b791e07e48 // .quad -7028762532061872568 - QUAD $0x95364afe032a819d // .quad -7694880458480647779 - QUAD $0xc612062576589dda // .quad -4174267146649952806 - QUAD $0x3a83ddbd83f52204 // .quad 4216457482181353988 - QUAD $0xf79687aed3eec551 // .quad -606147914885053103 - QUAD $0xc4926a9672793542 // .quad -4282243101277735614 - QUAD $0x9abe14cd44753b52 // .quad -7296371474444240046 - QUAD $0x75b7053c0f178293 // .quad 8482254178684994195 - QUAD $0xc16d9a0095928a27 // .quad -4508778324627912153 - QUAD $0x5324c68b12dd6338 // .quad 5991131704928854840 - QUAD $0xf1c90080baf72cb1 // .quad -1024286887357502287 - QUAD $0xd3f6fc16ebca5e03 // .quad -3173071712060547581 - QUAD $0x971da05074da7bee // .quad -7557708332239520786 - QUAD $0x88f4bb1ca6bcf584 // .quad -8578025658503072380 - QUAD $0xbce5086492111aea // .quad -4835449396872013078 - QUAD $0x2b31e9e3d06c32e5 // .quad 3112525982153323237 - QUAD $0xec1e4a7db69561a5 // .quad -1432625727662628443 - QUAD $0x3aff322e62439fcf // .quad 4251171748059520975 - QUAD $0x9392ee8e921d5d07 // .quad -7812920107430224633 - QUAD $0x09befeb9fad487c2 // .quad 702278666647013314 - QUAD $0xb877aa3236a4b449 // .quad -5154464115860392887 - QUAD $0x4c2ebe687989a9b3 // .quad 5489534351736154547 - QUAD $0xe69594bec44de15b // .quad -1831394126398103205 - QUAD $0x0f9d37014bf60a10 // .quad 1125115960621402640 - QUAD $0x901d7cf73ab0acd9 // .quad -8062150356639896359 - QUAD $0x538484c19ef38c94 // .quad 6018080969204141204 - QUAD $0xb424dc35095cd80f // .quad -5466001927372482545 - QUAD $0x2865a5f206b06fb9 // .quad 2910915193077788601 - QUAD $0xe12e13424bb40e13 // .quad -2220816390788215277 - QUAD $0xf93f87b7442e45d3 // .quad -486521013540076077 - QUAD $0x8cbccc096f5088cb // .quad -8305539271883716405 - QUAD $0xf78f69a51539d748 // .quad -608151266925095096 - QUAD $0xafebff0bcb24aafe // .quad -5770238071427257602 - QUAD $0xb573440e5a884d1b // .quad -5371875102083756773 - QUAD $0xdbe6fecebdedd5be // .quad -2601111570856684098 - QUAD $0x31680a88f8953030 // .quad 3560107088838733872 - QUAD $0x89705f4136b4a597 // .quad -8543223759426509417 - QUAD $0xfdc20d2b36ba7c3d // .quad -161552157378970563 - QUAD $0xabcc77118461cefc // .quad -6067343680855748868 - QUAD $0x3d32907604691b4c // .quad 4409745821703674700 - QUAD $0xd6bf94d5e57a42bc // .quad -2972493582642298180 - QUAD $0xa63f9a49c2c1b10f // .quad -6467280898289979121 - QUAD $0x8637bd05af6c69b5 // .quad -8775337516792518219 - QUAD $0x0fcf80dc33721d53 // .quad 1139270913992301907 - QUAD $0xa7c5ac471b478423 // .quad -6357485877563259869 - QUAD $0xd3c36113404ea4a8 // .quad -3187597375937010520 - QUAD $0xd1b71758e219652b // .quad -3335171328526686933 - QUAD $0x645a1cac083126e9 // .quad 7231123676894144233 - QUAD $0x83126e978d4fdf3b // .quad -9002011107970261189 - QUAD $0x3d70a3d70a3d70a3 // .quad 4427218577690292387 - QUAD $0xa3d70a3d70a3d70a // .quad -6640827866535438582 - QUAD $0xcccccccccccccccc; QUAD $0xcccccccccccccccc // .space 16, '\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc' - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x8000000000000000 // .quad -9223372036854775808 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xa000000000000000 // .quad -6917529027641081856 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xc800000000000000 // .quad -4035225266123964416 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xfa00000000000000 // .quad -432345564227567616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9c40000000000000 // .quad -7187745005283311616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xc350000000000000 // .quad -4372995238176751616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xf424000000000000 // .quad -854558029293551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9896800000000000 // .quad -7451627795949551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xbebc200000000000 // .quad -4702848726509551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xee6b280000000000 // .quad -1266874889709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9502f90000000000 // .quad -7709325833709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xba43b74000000000 // .quad -5024971273709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xe8d4a51000000000 // .quad -1669528073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9184e72a00000000 // .quad -7960984073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xb5e620f480000000 // .quad -5339544073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xe35fa931a0000000 // .quad -2062744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x8e1bc9bf04000000 // .quad -8206744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xb1a2bc2ec5000000 // .quad -5646744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xde0b6b3a76400000 // .quad -2446744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x8ac7230489e80000 // .quad -8446744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xad78ebc5ac620000 // .quad -5946744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xd8d726b7177a8000 // .quad -2821744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x878678326eac9000 // .quad -8681119073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xa968163f0a57b400 // .quad -6239712823709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xd3c21bcecceda100 // .quad -3187955011209551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x84595161401484a0 // .quad -8910000909647051616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xa56fa5b99019a5c8 // .quad -6525815118631426616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xcecb8f27f4200f3a // .quad -3545582879861895366 - QUAD $0x4000000000000000 // .quad 4611686018427387904 - QUAD $0x813f3978f8940984 // .quad -9133518327554766460 - QUAD $0x5000000000000000 // .quad 5764607523034234880 - QUAD $0xa18f07d736b90be5 // .quad -6805211891016070171 - QUAD $0xa400000000000000 // .quad -6629298651489370112 - QUAD $0xc9f2c9cd04674ede // .quad -3894828845342699810 - QUAD $0x4d00000000000000 // .quad 5548434740920451072 - QUAD $0xfc6f7c4045812296 // .quad -256850038250986858 - QUAD $0xf020000000000000 // .quad -1143914305352105984 - QUAD $0x9dc5ada82b70b59d // .quad -7078060301547948643 - QUAD $0x6c28000000000000 // .quad 7793479155164643328 - QUAD $0xc5371912364ce305 // .quad -4235889358507547899 - QUAD $0xc732000000000000 // .quad -4093209111326359552 - QUAD $0xf684df56c3e01bc6 // .quad -683175679707046970 - QUAD $0x3c7f400000000000 // .quad 4359273333062107136 - QUAD $0x9a130b963a6c115c // .quad -7344513827457986212 - QUAD $0x4b9f100000000000 // .quad 5449091666327633920 - QUAD $0xc097ce7bc90715b3 // .quad -4568956265895094861 - QUAD $0x1e86d40000000000 // .quad 2199678564482154496 - QUAD $0xf0bdc21abb48db20 // .quad -1099509313941480672 - QUAD $0x1314448000000000 // .quad 1374799102801346560 - QUAD $0x96769950b50d88f4 // .quad -7604722348854507276 - QUAD $0x17d955a000000000 // .quad 1718498878501683200 - QUAD $0xbc143fa4e250eb31 // .quad -4894216917640746191 - QUAD $0x5dcfab0800000000 // .quad 6759809616554491904 - QUAD $0xeb194f8e1ae525fd // .quad -1506085128623544835 - QUAD $0x5aa1cae500000000 // .quad 6530724019560251392 - QUAD $0x92efd1b8d0cf37be // .quad -7858832233030797378 - QUAD $0xf14a3d9e40000000 // .quad -1059967012404461568 - QUAD $0xb7abc627050305ad // .quad -5211854272861108819 - QUAD $0x6d9ccd05d0000000 // .quad 7898413271349198848 - QUAD $0xe596b7b0c643c719 // .quad -1903131822648998119 - QUAD $0xe4820023a2000000 // .quad -1981020733047832576 - QUAD $0x8f7e32ce7bea5c6f // .quad -8106986416796705681 - QUAD $0xdda2802c8a800000 // .quad -2476275916309790720 - QUAD $0xb35dbf821ae4f38b // .quad -5522047002568494197 - QUAD $0xd50b2037ad200000 // .quad -3095344895387238400 - QUAD $0xe0352f62a19e306e // .quad -2290872734783229842 - QUAD $0x4526f422cc340000 // .quad 4982938468024057856 - QUAD $0x8c213d9da502de45 // .quad -8349324486880600507 - QUAD $0x9670b12b7f410000 // .quad -7606384970252091392 - QUAD $0xaf298d050e4395d6 // .quad -5824969590173362730 - QUAD $0x3c0cdd765f114000 // .quad 4327076842467049472 - QUAD $0xdaf3f04651d47b4c // .quad -2669525969289315508 - QUAD $0xa5880a69fb6ac800 // .quad -6518949010312869888 - QUAD $0x88d8762bf324cd0f // .quad -8585982758446904049 - QUAD $0x8eea0d047a457a00 // .quad -8148686262891087360 - QUAD $0xab0e93b6efee0053 // .quad -6120792429631242157 - QUAD $0x72a4904598d6d880 // .quad 8260886245095692416 - QUAD $0xd5d238a4abe98068 // .quad -3039304518611664792 - QUAD $0x47a6da2b7f864750 // .quad 5163053903184807760 - QUAD $0x85a36366eb71f041 // .quad -8817094351773372351 - QUAD $0x999090b65f67d924 // .quad -7381240676301154012 - QUAD $0xa70c3c40a64e6c51 // .quad -6409681921289327535 - QUAD $0xfff4b4e3f741cf6d // .quad -3178808521666707 - QUAD $0xd0cf4b50cfe20765 // .quad -3400416383184271515 - QUAD $0xbff8f10e7a8921a4 // .quad -4613672773753429596 - QUAD $0x82818f1281ed449f // .quad -9042789267131251553 - QUAD $0xaff72d52192b6a0d // .quad -5767090967191786995 - QUAD $0xa321f2d7226895c7 // .quad -6691800565486676537 - QUAD $0x9bf4f8a69f764490 // .quad -7208863708989733744 - QUAD $0xcbea6f8ceb02bb39 // .quad -3753064688430957767 - QUAD $0x02f236d04753d5b4 // .quad 212292400617608628 - QUAD $0xfee50b7025c36a08 // .quad -79644842111309304 - QUAD $0x01d762422c946590 // .quad 132682750386005392 - QUAD $0x9f4f2726179a2245 // .quad -6967307053960650171 - QUAD $0x424d3ad2b7b97ef5 // .quad 4777539456409894645 - QUAD $0xc722f0ef9d80aad6 // .quad -4097447799023424810 - QUAD $0xd2e0898765a7deb2 // .quad -3251447716342407502 - QUAD $0xf8ebad2b84e0d58b // .quad -510123730351893109 - QUAD $0x63cc55f49f88eb2f // .quad 7191217214140771119 - QUAD $0x9b934c3b330c8577 // .quad -7236356359111015049 - QUAD $0x3cbf6b71c76b25fb // .quad 4377335499248575995 - QUAD $0xc2781f49ffcfa6d5 // .quad -4433759430461380907 - QUAD $0x8bef464e3945ef7a // .quad -8363388681221443718 - QUAD $0xf316271c7fc3908a // .quad -930513269649338230 - QUAD $0x97758bf0e3cbb5ac // .quad -7532960934977096276 - QUAD $0x97edd871cfda3a56 // .quad -7499099821171918250 - QUAD $0x3d52eeed1cbea317 // .quad 4418856886560793367 - QUAD $0xbde94e8e43d0c8ec // .quad -4762188758037509908 - QUAD $0x4ca7aaa863ee4bdd // .quad 5523571108200991709 - QUAD $0xed63a231d4c4fb27 // .quad -1341049929119499481 - QUAD $0x8fe8caa93e74ef6a // .quad -8076983103442849942 - QUAD $0x945e455f24fb1cf8 // .quad -7755685233340769032 - QUAD $0xb3e2fd538e122b44 // .quad -5484542860876174524 - QUAD $0xb975d6b6ee39e436 // .quad -5082920523248573386 - QUAD $0x60dbbca87196b616 // .quad 6979379479186945558 - QUAD $0xe7d34c64a9c85d44 // .quad -1741964635633328828 - QUAD $0xbc8955e946fe31cd // .quad -4861259862362934835 - QUAD $0x90e40fbeea1d3a4a // .quad -8006256924911912374 - QUAD $0x6babab6398bdbe41 // .quad 7758483227328495169 - QUAD $0xb51d13aea4a488dd // .quad -5396135137712502563 - QUAD $0xc696963c7eed2dd1 // .quad -4136954021121544751 - QUAD $0xe264589a4dcdab14 // .quad -2133482903713240300 - QUAD $0xfc1e1de5cf543ca2 // .quad -279753253987271518 - QUAD $0x8d7eb76070a08aec // .quad -8250955842461857044 - QUAD $0x3b25a55f43294bcb // .quad 4261994450943298507 - QUAD $0xb0de65388cc8ada8 // .quad -5702008784649933400 - QUAD $0x49ef0eb713f39ebe // .quad 5327493063679123134 - QUAD $0xdd15fe86affad912 // .quad -2515824962385028846 - QUAD $0x6e3569326c784337 // .quad 7941369183226839863 - QUAD $0x8a2dbf142dfcc7ab // .quad -8489919629131724885 - QUAD $0x49c2c37f07965404 // .quad 5315025460606161924 - QUAD $0xacb92ed9397bf996 // .quad -6000713517987268202 - QUAD $0xdc33745ec97be906 // .quad -2579590211097073402 - QUAD $0xd7e77a8f87daf7fb // .quad -2889205879056697349 - QUAD $0x69a028bb3ded71a3 // .quad 7611128154919104931 - QUAD $0x86f0ac99b4e8dafd // .quad -8723282702051517699 - QUAD $0xc40832ea0d68ce0c // .quad -4321147861633282548 - QUAD $0xa8acd7c0222311bc // .quad -6292417359137009220 - QUAD $0xf50a3fa490c30190 // .quad -789748808614215280 - QUAD $0xd2d80db02aabd62b // .quad -3253835680493873621 - QUAD $0x792667c6da79e0fa // .quad 8729779031470891258 - QUAD $0x83c7088e1aab65db // .quad -8951176327949752869 - QUAD $0x577001b891185938 // .quad 6300537770911226168 - QUAD $0xa4b8cab1a1563f52 // .quad -6577284391509803182 - QUAD $0xed4c0226b55e6f86 // .quad -1347699823215743098 - QUAD $0xcde6fd5e09abcf26 // .quad -3609919470959866074 - QUAD $0x544f8158315b05b4 // .quad 6075216638131242420 - QUAD $0x80b05e5ac60b6178 // .quad -9173728696990998152 - QUAD $0x696361ae3db1c721 // .quad 7594020797664053025 - QUAD $0xa0dc75f1778e39d6 // .quad -6855474852811359786 - QUAD $0x03bc3a19cd1e38e9 // .quad 269153960225290473 - QUAD $0xc913936dd571c84c // .quad -3957657547586811828 - QUAD $0x04ab48a04065c723 // .quad 336442450281613091 - QUAD $0xfb5878494ace3a5f // .quad -335385916056126881 - QUAD $0x62eb0d64283f9c76 // .quad 7127805559067090038 - QUAD $0x9d174b2dcec0e47b // .quad -7127145225176161157 - QUAD $0x3ba5d0bd324f8394 // .quad 4298070930406474644 - QUAD $0xc45d1df942711d9a // .quad -4297245513042813542 - QUAD $0xca8f44ec7ee36479 // .quad -3850783373846682503 - QUAD $0xf5746577930d6500 // .quad -759870872876129024 - QUAD $0x7e998b13cf4e1ecb // .quad 9122475437414293195 - QUAD $0x9968bf6abbe85f20 // .quad -7392448323188662496 - QUAD $0x9e3fedd8c321a67e // .quad -7043649776941685122 - QUAD $0xbfc2ef456ae276e8 // .quad -4628874385558440216 - QUAD $0xc5cfe94ef3ea101e // .quad -4192876202749718498 - QUAD $0xefb3ab16c59b14a2 // .quad -1174406963520662366 - QUAD $0xbba1f1d158724a12 // .quad -4926390635932268014 - QUAD $0x95d04aee3b80ece5 // .quad -7651533379841495835 - QUAD $0x2a8a6e45ae8edc97 // .quad 3065383741939440791 - QUAD $0xbb445da9ca61281f // .quad -4952730706374481889 - QUAD $0xf52d09d71a3293bd // .quad -779956341003086915 - QUAD $0xea1575143cf97226 // .quad -1579227364540714458 - QUAD $0x593c2626705f9c56 // .quad 6430056314514152534 - QUAD $0x924d692ca61be758 // .quad -7904546130479028392 - QUAD $0x6f8b2fb00c77836c // .quad 8037570393142690668 - QUAD $0xb6e0c377cfa2e12e // .quad -5268996644671397586 - QUAD $0x0b6dfb9c0f956447 // .quad 823590954573587527 - QUAD $0xe498f455c38b997a // .quad -1974559787411859078 - QUAD $0x4724bd4189bd5eac // .quad 5126430365035880108 - QUAD $0x8edf98b59a373fec // .quad -8151628894773493780 - QUAD $0x58edec91ec2cb657 // .quad 6408037956294850135 - QUAD $0xb2977ee300c50fe7 // .quad -5577850100039479321 - QUAD $0x2f2967b66737e3ed // .quad 3398361426941174765 - QUAD $0xdf3d5e9bc0f653e1 // .quad -2360626606621961247 - QUAD $0xbd79e0d20082ee74 // .quad -4793553135802847628 - QUAD $0x8b865b215899f46c // .quad -8392920656779807636 - QUAD $0xecd8590680a3aa11 // .quad -1380255401326171631 - QUAD $0xae67f1e9aec07187 // .quad -5879464802547371641 - QUAD $0xe80e6f4820cc9495 // .quad -1725319251657714539 - QUAD $0xda01ee641a708de9 // .quad -2737644984756826647 - QUAD $0x3109058d147fdcdd // .quad 3533361486141316317 - QUAD $0x884134fe908658b2 // .quad -8628557143114098510 - QUAD $0xbd4b46f0599fd415 // .quad -4806670179178130411 - QUAD $0xaa51823e34a7eede // .quad -6174010410465235234 - QUAD $0x6c9e18ac7007c91a // .quad 7826720331309500698 - QUAD $0xd4e5e2cdc1d1ea96 // .quad -3105826994654156138 - QUAD $0x03e2cf6bc604ddb0 // .quad 280014188641050032 - QUAD $0x850fadc09923329e // .quad -8858670899299929442 - QUAD $0x84db8346b786151c // .quad -8873354301053463268 - QUAD $0xa6539930bf6bff45 // .quad -6461652605697523899 - QUAD $0xe612641865679a63 // .quad -1868320839462053277 - QUAD $0xcfe87f7cef46ff16 // .quad -3465379738694516970 - QUAD $0x4fcb7e8f3f60c07e // .quad 5749828502977298558 - QUAD $0x81f14fae158c5f6e // .quad -9083391364325154962 - QUAD $0xe3be5e330f38f09d // .quad -2036086408133152611 - QUAD $0xa26da3999aef7749 // .quad -6742553186979055799 - QUAD $0x5cadf5bfd3072cc5 // .quad 6678264026688335045 - QUAD $0xcb090c8001ab551c // .quad -3816505465296431844 - QUAD $0x73d9732fc7c8f7f6 // .quad 8347830033360418806 - QUAD $0xfdcb4fa002162a63 // .quad -158945813193151901 - QUAD $0x2867e7fddcdd9afa // .quad 2911550761636567802 - QUAD $0x9e9f11c4014dda7e // .quad -7016870160886801794 - QUAD $0xb281e1fd541501b8 // .quad -5583933584809066056 - QUAD $0xc646d63501a1511d // .quad -4159401682681114339 - QUAD $0x1f225a7ca91a4226 // .quad 2243455055843443238 - QUAD $0xf7d88bc24209a565 // .quad -587566084924005019 - QUAD $0x3375788de9b06958 // .quad 3708002419115845976 - QUAD $0x9ae757596946075f // .quad -7284757830718584993 - QUAD $0x0052d6b1641c83ae // .quad 23317005467419566 - QUAD $0xc1a12d2fc3978937 // .quad -4494261269970843337 - QUAD $0xc0678c5dbd23a49a // .quad -4582539761593113446 - QUAD $0xf209787bb47d6b84 // .quad -1006140569036166268 - QUAD $0xf840b7ba963646e0 // .quad -558244341782001952 - QUAD $0x9745eb4d50ce6332 // .quad -7546366883288685774 - QUAD $0xb650e5a93bc3d898 // .quad -5309491445654890344 - QUAD $0xbd176620a501fbff // .quad -4821272585683469313 - QUAD $0xa3e51f138ab4cebe // .quad -6636864307068612930 - QUAD $0xec5d3fa8ce427aff // .quad -1414904713676948737 - QUAD $0xc66f336c36b10137 // .quad -4148040191917883081 - QUAD $0x93ba47c980e98cdf // .quad -7801844473689174817 - QUAD $0xb80b0047445d4184 // .quad -5185050239897353852 - QUAD $0xb8a8d9bbe123f017 // .quad -5140619573684080617 - QUAD $0xa60dc059157491e5 // .quad -6481312799871692315 - QUAD $0xe6d3102ad96cec1d // .quad -1814088448677712867 - QUAD $0x87c89837ad68db2f // .quad -8662506518347195601 - QUAD $0x9043ea1ac7e41392 // .quad -8051334308064652398 - QUAD $0x29babe4598c311fb // .quad 3006924907348169211 - QUAD $0xb454e4a179dd1877 // .quad -5452481866653427593 - QUAD $0xf4296dd6fef3d67a // .quad -853029884242176390 - QUAD $0xe16a1dc9d8545e94 // .quad -2203916314889396588 - QUAD $0x1899e4a65f58660c // .quad 1772699331562333708 - QUAD $0x8ce2529e2734bb1d // .quad -8294976724446954723 - QUAD $0x5ec05dcff72e7f8f // .quad 6827560182880305039 - QUAD $0xb01ae745b101e9e4 // .quad -5757034887131305500 - QUAD $0x76707543f4fa1f73 // .quad 8534450228600381299 - QUAD $0xdc21a1171d42645d // .quad -2584607590486743971 - QUAD $0x6a06494a791c53a8 // .quad 7639874402088932264 - QUAD $0x899504ae72497eba // .quad -8532908771695296838 - QUAD $0x0487db9d17636892 // .quad 326470965756389522 - QUAD $0xabfa45da0edbde69 // .quad -6054449946191733143 - QUAD $0x45a9d2845d3c42b6 // .quad 5019774725622874806 - QUAD $0xd6f8d7509292d603 // .quad -2956376414312278525 - QUAD $0x0b8a2392ba45a9b2 // .quad 831516194300602802 - QUAD $0x865b86925b9bc5c2 // .quad -8765264286586255934 - QUAD $0x8e6cac7768d7141e // .quad -8183976793979022306 - QUAD $0xa7f26836f282b732 // .quad -6344894339805432014 - QUAD $0x3207d795430cd926 // .quad 3605087062808385830 - QUAD $0xd1ef0244af2364ff // .quad -3319431906329402113 - QUAD $0x7f44e6bd49e807b8 // .quad 9170708441896323000 - QUAD $0x8335616aed761f1f // .quad -8992173969096958177 - QUAD $0x5f16206c9c6209a6 // .quad 6851699533943015846 - QUAD $0xa402b9c5a8d3a6e7 // .quad -6628531442943809817 - QUAD $0x36dba887c37a8c0f // .quad 3952938399001381903 - QUAD $0xcd036837130890a1 // .quad -3673978285252374367 - QUAD $0xc2494954da2c9789 // .quad -4446942528265218167 - QUAD $0x802221226be55a64 // .quad -9213765455923815836 - QUAD $0xf2db9baa10b7bd6c // .quad -946992141904134804 - QUAD $0xa02aa96b06deb0fd // .quad -6905520801477381891 - QUAD $0x6f92829494e5acc7 // .quad 8039631859474607303 - QUAD $0xc83553c5c8965d3d // .quad -4020214983419339459 - QUAD $0xcb772339ba1f17f9 // .quad -3785518230938904583 - QUAD $0xfa42a8b73abbf48c // .quad -413582710846786420 - QUAD $0xff2a760414536efb // .quad -60105885123121413 - QUAD $0x9c69a97284b578d7 // .quad -7176018221920323369 - QUAD $0xfef5138519684aba // .quad -75132356403901766 - QUAD $0xc38413cf25e2d70d // .quad -4358336758973016307 - QUAD $0x7eb258665fc25d69 // .quad 9129456591349898601 - QUAD $0xf46518c2ef5b8cd1 // .quad -836234930288882479 - QUAD $0xef2f773ffbd97a61 // .quad -1211618658047395231 - QUAD $0x98bf2f79d5993802 // .quad -7440175859071633406 - QUAD $0xaafb550ffacfd8fa // .quad -6126209340986631942 - QUAD $0xbeeefb584aff8603 // .quad -4688533805412153853 - QUAD $0x95ba2a53f983cf38 // .quad -7657761676233289928 - QUAD $0xeeaaba2e5dbf6784 // .quad -1248981238337804412 - QUAD $0xdd945a747bf26183 // .quad -2480258038432112253 - QUAD $0x952ab45cfa97a0b2 // .quad -7698142301602209614 - QUAD $0x94f971119aeef9e4 // .quad -7712008566467528220 - QUAD $0xba756174393d88df // .quad -5010991858575374113 - QUAD $0x7a37cd5601aab85d // .quad 8806733365625141341 - QUAD $0xe912b9d1478ceb17 // .quad -1652053804791829737 - QUAD $0xac62e055c10ab33a // .quad -6025006692552756422 - QUAD $0x91abb422ccb812ee // .quad -7950062655635975442 - QUAD $0x577b986b314d6009 // .quad 6303799689591218185 - QUAD $0xb616a12b7fe617aa // .quad -5325892301117581398 - QUAD $0xed5a7e85fda0b80b // .quad -1343622424865753077 - QUAD $0xe39c49765fdf9d94 // .quad -2045679357969588844 - QUAD $0x14588f13be847307 // .quad 1466078993672598279 - QUAD $0x8e41ade9fbebc27d // .quad -8196078626372074883 - QUAD $0x596eb2d8ae258fc8 // .quad 6444284760518135752 - QUAD $0xb1d219647ae6b31c // .quad -5633412264537705700 - QUAD $0x6fca5f8ed9aef3bb // .quad 8055355950647669691 - QUAD $0xde469fbd99a05fe3 // .quad -2430079312244744221 - QUAD $0x25de7bb9480d5854 // .quad 2728754459941099604 - QUAD $0x8aec23d680043bee // .quad -8436328597794046994 - QUAD $0xaf561aa79a10ae6a // .quad -5812428961928401302 - QUAD $0xada72ccc20054ae9 // .quad -5933724728815170839 - QUAD $0x1b2ba1518094da04 // .quad 1957835834444274180 - QUAD $0xd910f7ff28069da4 // .quad -2805469892591575644 - QUAD $0x90fb44d2f05d0842 // .quad -7999724640327104446 - QUAD $0x87aa9aff79042286 // .quad -8670947710510816634 - QUAD $0x353a1607ac744a53 // .quad 3835402254873283155 - QUAD $0xa99541bf57452b28 // .quad -6226998619711132888 - QUAD $0x42889b8997915ce8 // .quad 4794252818591603944 - QUAD $0xd3fa922f2d1675f2 // .quad -3172062256211528206 - QUAD $0x69956135febada11 // .quad 7608094030047140369 - QUAD $0x847c9b5d7c2e09b7 // .quad -8900067937773286985 - QUAD $0x43fab9837e699095 // .quad 4898431519131537557 - QUAD $0xa59bc234db398c25 // .quad -6513398903789220827 - QUAD $0x94f967e45e03f4bb // .quad -7712018656367741765 - QUAD $0xcf02b2c21207ef2e // .quad -3530062611309138130 - QUAD $0x1d1be0eebac278f5 // .quad 2097517367411243253 - QUAD $0x8161afb94b44f57d // .quad -9123818159709293187 - QUAD $0x6462d92a69731732 // .quad 7233582727691441970 - QUAD $0xa1ba1ba79e1632dc // .quad -6793086681209228580 - QUAD $0x7d7b8f7503cfdcfe // .quad 9041978409614302462 - QUAD $0xca28a291859bbf93 // .quad -3879672333084147821 - QUAD $0x5cda735244c3d43e // .quad 6690786993590490174 - QUAD $0xfcb2cb35e702af78 // .quad -237904397927796872 - QUAD $0x3a0888136afa64a7 // .quad 4181741870994056359 - QUAD $0x9defbf01b061adab // .quad -7066219276345954901 - QUAD $0x088aaa1845b8fdd0 // .quad 615491320315182544 - QUAD $0xc56baec21c7a1916 // .quad -4221088077005055722 - QUAD $0x8aad549e57273d45 // .quad -8454007886460797627 - QUAD $0xf6c69a72a3989f5b // .quad -664674077828931749 - QUAD $0x36ac54e2f678864b // .quad 3939617107816777291 - QUAD $0x9a3c2087a63f6399 // .quad -7332950326284164199 - QUAD $0x84576a1bb416a7dd // .quad -8910536670511192099 - QUAD $0xc0cb28a98fcf3c7f // .quad -4554501889427817345 - QUAD $0x656d44a2a11c51d5 // .quad 7308573235570561493 - QUAD $0xf0fdf2d3f3c30b9f // .quad -1081441343357383777 - QUAD $0x9f644ae5a4b1b325 // .quad -6961356773836868827 - QUAD $0x969eb7c47859e743 // .quad -7593429867239446717 - QUAD $0x873d5d9f0dde1fee // .quad -8701695967296086034 - QUAD $0xbc4665b596706114 // .quad -4880101315621920492 - QUAD $0xa90cb506d155a7ea // .quad -6265433940692719638 - QUAD $0xeb57ff22fc0c7959 // .quad -1488440626100012711 - QUAD $0x09a7f12442d588f2 // .quad 695789805494438130 - QUAD $0x9316ff75dd87cbd8 // .quad -7847804418953589800 - QUAD $0x0c11ed6d538aeb2f // .quad 869737256868047663 - QUAD $0xb7dcbf5354e9bece // .quad -5198069505264599346 - QUAD $0x8f1668c8a86da5fa // .quad -8136200465769716230 - QUAD $0xe5d3ef282a242e81 // .quad -1885900863153361279 - QUAD $0xf96e017d694487bc // .quad -473439272678684740 - QUAD $0x8fa475791a569d10 // .quad -8096217067111932656 - QUAD $0x37c981dcc395a9ac // .quad 4019886927579031980 - QUAD $0xb38d92d760ec4455 // .quad -5508585315462527915 - QUAD $0x85bbe253f47b1417 // .quad -8810199395808373737 - QUAD $0xe070f78d3927556a // .quad -2274045625900771990 - QUAD $0x93956d7478ccec8e // .quad -7812217631593927538 - QUAD $0x8c469ab843b89562 // .quad -8338807543829064350 - QUAD $0x387ac8d1970027b2 // .quad 4069786015789754290 - QUAD $0xaf58416654a6babb // .quad -5811823411358942533 - QUAD $0x06997b05fcc0319e // .quad 475546501309804958 - QUAD $0xdb2e51bfe9d0696a // .quad -2653093245771290262 - QUAD $0x441fece3bdf81f03 // .quad 4908902581746016003 - QUAD $0x88fcf317f22241e2 // .quad -8575712306248138270 - QUAD $0xd527e81cad7626c3 // .quad -3087243809672255805 - QUAD $0xab3c2fddeeaad25a // .quad -6107954364382784934 - QUAD $0x8a71e223d8d3b074 // .quad -8470740780517707660 - QUAD $0xd60b3bd56a5586f1 // .quad -3023256937051093263 - QUAD $0xf6872d5667844e49 // .quad -682526969396179383 - QUAD $0x85c7056562757456 // .quad -8807064613298015146 - QUAD $0xb428f8ac016561db // .quad -5464844730172612133 - QUAD $0xa738c6bebb12d16c // .quad -6397144748195131028 - QUAD $0xe13336d701beba52 // .quad -2219369894288377262 - QUAD $0xd106f86e69d785c7 // .quad -3384744916816525881 - QUAD $0xecc0024661173473 // .quad -1387106183930235789 - QUAD $0x82a45b450226b39c // .quad -9032994600651410532 - QUAD $0x27f002d7f95d0190 // .quad 2877803288514593168 - QUAD $0xa34d721642b06084 // .quad -6679557232386875260 - QUAD $0x31ec038df7b441f4 // .quad 3597254110643241460 - QUAD $0xcc20ce9bd35c78a5 // .quad -3737760522056206171 - QUAD $0x7e67047175a15271 // .quad 9108253656731439729 - QUAD $0xff290242c83396ce // .quad -60514634142869810 - QUAD $0x0f0062c6e984d386 // .quad 1080972517029761926 - QUAD $0x9f79a169bd203e41 // .quad -6955350673980375487 - QUAD $0x52c07b78a3e60868 // .quad 5962901664714590312 - QUAD $0xc75809c42c684dd1 // .quad -4082502324048081455 - QUAD $0xa7709a56ccdf8a82 // .quad -6381430974388925822 - QUAD $0xf92e0c3537826145 // .quad -491441886632713915 - QUAD $0x88a66076400bb691 // .quad -8600080377420466543 - QUAD $0x9bbcc7a142b17ccb // .quad -7224680206786528053 - QUAD $0x6acff893d00ea435 // .quad 7696643601933968437 - QUAD $0xc2abf989935ddbfe // .quad -4419164240055772162 - QUAD $0x0583f6b8c4124d43 // .quad 397432465562684739 - QUAD $0xf356f7ebf83552fe // .quad -912269281642327298 - QUAD $0xc3727a337a8b704a // .quad -4363290727450709942 - QUAD $0x98165af37b2153de // .quad -7487697328667536418 - QUAD $0x744f18c0592e4c5c // .quad 8380944645968776284 - QUAD $0xbe1bf1b059e9a8d6 // .quad -4747935642407032618 - QUAD $0x1162def06f79df73 // .quad 1252808770606194547 - QUAD $0xeda2ee1c7064130c // .quad -1323233534581402868 - QUAD $0x8addcb5645ac2ba8 // .quad -8440366555225904216 - QUAD $0x9485d4d1c63e8be7 // .quad -7744549986754458649 - QUAD $0x6d953e2bd7173692 // .quad 7896285879677171346 - QUAD $0xb9a74a0637ce2ee1 // .quad -5069001465015685407 - QUAD $0xc8fa8db6ccdd0437 // .quad -3964700705685699529 - QUAD $0xe8111c87c5c1ba99 // .quad -1724565812842218855 - QUAD $0x1d9c9892400a22a2 // .quad 2133748077373825698 - QUAD $0x910ab1d4db9914a0 // .quad -7995382660667468640 - QUAD $0x2503beb6d00cab4b // .quad 2667185096717282123 - QUAD $0xb54d5e4a127f59c8 // .quad -5382542307406947896 - QUAD $0x2e44ae64840fd61d // .quad 3333981370896602653 - QUAD $0xe2a0b5dc971f303a // .quad -2116491865831296966 - QUAD $0x5ceaecfed289e5d2 // .quad 6695424375237764562 - QUAD $0x8da471a9de737e24 // .quad -8240336443785642460 - QUAD $0x7425a83e872c5f47 // .quad 8369280469047205703 - QUAD $0xb10d8e1456105dad // .quad -5688734536304665171 - QUAD $0xd12f124e28f77719 // .quad -3373457468973156583 - QUAD $0xdd50f1996b947518 // .quad -2499232151953443560 - QUAD $0x82bd6b70d99aaa6f // .quad -9025939945749304721 - QUAD $0x8a5296ffe33cc92f // .quad -8479549122611984081 - QUAD $0x636cc64d1001550b // .quad 7164319141522920715 - QUAD $0xace73cbfdc0bfb7b // .quad -5987750384837592197 - QUAD $0x3c47f7e05401aa4e // .quad 4343712908476262990 - QUAD $0xd8210befd30efa5a // .quad -2873001962619602342 - QUAD $0x65acfaec34810a71 // .quad 7326506586225052273 - QUAD $0x8714a775e3e95c78 // .quad -8713155254278333320 - QUAD $0x7f1839a741a14d0d // .quad 9158133232781315341 - QUAD $0xa8d9d1535ce3b396 // .quad -6279758049420528746 - QUAD $0x1ede48111209a050 // .quad 2224294504121868368 - QUAD $0xd31045a8341ca07c // .quad -3238011543348273028 - QUAD $0x934aed0aab460432 // .quad -7833187971778608078 - QUAD $0x83ea2b892091e44d // .quad -8941286242233752499 - QUAD $0xf81da84d5617853f // .quad -568112927868484289 - QUAD $0xa4e4b66b68b65d60 // .quad -6564921784364802720 - QUAD $0x36251260ab9d668e // .quad 3901544858591782542 - QUAD $0xce1de40642e3f4b9 // .quad -3594466212028615495 - QUAD $0xc1d72b7c6b426019 // .quad -4479063491021217767 - QUAD $0x80d2ae83e9ce78f3 // .quad -9164070410158966541 - QUAD $0xb24cf65b8612f81f // .quad -5598829363776522209 - QUAD $0xa1075a24e4421730 // .quad -6843401994271320272 - QUAD $0xdee033f26797b627 // .quad -2386850686293264857 - QUAD $0xc94930ae1d529cfc // .quad -3942566474411762436 - QUAD $0x169840ef017da3b1 // .quad 1628122660560806833 - QUAD $0xfb9b7cd9a4a7443c // .quad -316522074587315140 - QUAD $0x8e1f289560ee864e // .quad -8205795374004271538 - QUAD $0x9d412e0806e88aa5 // .quad -7115355324258153819 - QUAD $0xf1a6f2bab92a27e2 // .quad -1033872180650563614 - QUAD $0xc491798a08a2ad4e // .quad -4282508136895304370 - QUAD $0xae10af696774b1db // .quad -5904026244240592421 - QUAD $0xf5b5d7ec8acb58a2 // .quad -741449152691742558 - QUAD $0xacca6da1e0a8ef29 // .quad -5995859411864064215 - QUAD $0x9991a6f3d6bf1765 // .quad -7380934748073420955 - QUAD $0x17fd090a58d32af3 // .quad 1728547772024695539 - QUAD $0xbff610b0cc6edd3f // .quad -4614482416664388289 - QUAD $0xddfc4b4cef07f5b0 // .quad -2451001303396518480 - QUAD $0xeff394dcff8a948e // .quad -1156417002403097458 - QUAD $0x4abdaf101564f98e // .quad 5385653213018257806 - QUAD $0x95f83d0a1fb69cd9 // .quad -7640289654143017767 - QUAD $0x9d6d1ad41abe37f1 // .quad -7102991539009341455 - QUAD $0xbb764c4ca7a4440f // .quad -4938676049251384305 - QUAD $0x84c86189216dc5ed // .quad -8878739423761676819 - QUAD $0xea53df5fd18d5513 // .quad -1561659043136842477 - QUAD $0x32fd3cf5b4e49bb4 // .quad 3674159897003727796 - QUAD $0x92746b9be2f8552c // .quad -7893565929601608404 - QUAD $0x3fbc8c33221dc2a1 // .quad 4592699871254659745 - QUAD $0xb7118682dbb66a77 // .quad -5255271393574622601 - QUAD $0x0fabaf3feaa5334a // .quad 1129188820640936778 - QUAD $0xe4d5e82392a40515 // .quad -1957403223540890347 - QUAD $0x29cb4d87f2a7400e // .quad 3011586022114279438 - QUAD $0x8f05b1163ba6832d // .quad -8140906042354138323 - QUAD $0x743e20e9ef511012 // .quad 8376168546070237202 - QUAD $0xb2c71d5bca9023f8 // .quad -5564446534515285000 - QUAD $0x914da9246b255416 // .quad -7976533391121755114 - QUAD $0xdf78e4b2bd342cf6 // .quad -2343872149716718346 - QUAD $0x1ad089b6c2f7548e // .quad 1932195658189984910 - QUAD $0x8bab8eefb6409c1a // .quad -8382449121214030822 - QUAD $0xa184ac2473b529b1 // .quad -6808127464117294671 - QUAD $0xae9672aba3d0c320 // .quad -5866375383090150624 - QUAD $0xc9e5d72d90a2741e // .quad -3898473311719230434 - QUAD $0xda3c0f568cc4f3e8 // .quad -2721283210435300376 - QUAD $0x7e2fa67c7a658892 // .quad 9092669226243950738 - QUAD $0x8865899617fb1871 // .quad -8618331034163144591 - QUAD $0xddbb901b98feeab7 // .quad -2469221522477225289 - QUAD $0xaa7eebfb9df9de8d // .quad -6161227774276542835 - QUAD $0x552a74227f3ea565 // .quad 6136845133758244197 - QUAD $0xd51ea6fa85785631 // .quad -3089848699418290639 - QUAD $0xd53a88958f87275f // .quad -3082000819042179233 - QUAD $0x8533285c936b35de // .quad -8848684464777513506 - QUAD $0x8a892abaf368f137 // .quad -8464187042230111945 - QUAD $0xa67ff273b8460356 // .quad -6449169562544503978 - QUAD $0x2d2b7569b0432d85 // .quad 3254824252494523781 - QUAD $0xd01fef10a657842c // .quad -3449775934753242068 - QUAD $0x9c3b29620e29fc73 // .quad -7189106879045698445 - QUAD $0x8213f56a67f6b29b // .quad -9073638986861858149 - QUAD $0x8349f3ba91b47b8f // .quad -8986383598807123057 - QUAD $0xa298f2c501f45f42 // .quad -6730362715149934782 - QUAD $0x241c70a936219a73 // .quad 2602078556773259891 - QUAD $0xcb3f2f7642717713 // .quad -3801267375510030573 - QUAD $0xed238cd383aa0110 // .quad -1359087822460813040 - QUAD $0xfe0efb53d30dd4d7 // .quad -139898200960150313 - QUAD $0xf4363804324a40aa // .quad -849429889038008150 - QUAD $0x9ec95d1463e8a506 // .quad -7004965403241175802 - QUAD $0xb143c6053edcd0d5 // .quad -5673473379724898091 - QUAD $0xc67bb4597ce2ce48 // .quad -4144520735624081848 - QUAD $0xdd94b7868e94050a // .quad -2480155706228734710 - QUAD $0xf81aa16fdc1b81da // .quad -568964901102714406 - QUAD $0xca7cf2b4191c8326 // .quad -3855940325606653146 - QUAD $0x9b10a4e5e9913128 // .quad -7273132090830278360 - QUAD $0xfd1c2f611f63a3f0 // .quad -208239388580928528 - QUAD $0xc1d4ce1f63f57d72 // .quad -4479729095110460046 - QUAD $0xbc633b39673c8cec // .quad -4871985254153548564 - QUAD $0xf24a01a73cf2dccf // .quad -987975350460687153 - QUAD $0xd5be0503e085d813 // .quad -3044990783845967853 - QUAD $0x976e41088617ca01 // .quad -7535013621679011327 - QUAD $0x4b2d8644d8a74e18 // .quad 5417133557047315992 - QUAD $0xbd49d14aa79dbc82 // .quad -4807081008671376254 - QUAD $0xddf8e7d60ed1219e // .quad -2451955090545630818 - QUAD $0xec9c459d51852ba2 // .quad -1397165242411832414 - QUAD $0xcabb90e5c942b503 // .quad -3838314940804713213 - QUAD $0x93e1ab8252f33b45 // .quad -7790757304148477115 - QUAD $0x3d6a751f3b936243 // .quad 4425478360848884291 - QUAD $0xb8da1662e7b00a17 // .quad -5126760611758208489 - QUAD $0x0cc512670a783ad4 // .quad 920161932633717460 - QUAD $0xe7109bfba19c0c9d // .quad -1796764746270372707 - QUAD $0x27fb2b80668b24c5 // .quad 2880944217109767365 - QUAD $0x906a617d450187e2 // .quad -8040506994060064798 - QUAD $0xb1f9f660802dedf6 // .quad -5622191765467566602 - QUAD $0xb484f9dc9641e9da // .quad -5438947724147693094 - QUAD $0x5e7873f8a0396973 // .quad 6807318348447705459 - QUAD $0xe1a63853bbd26451 // .quad -2186998636757228463 - QUAD $0xdb0b487b6423e1e8 // .quad -2662955059861265944 - QUAD $0x8d07e33455637eb2 // .quad -8284403175614349646 - QUAD $0x91ce1a9a3d2cda62 // .quad -7940379843253970334 - QUAD $0xb049dc016abc5e5f // .quad -5743817951090549153 - QUAD $0x7641a140cc7810fb // .quad 8521269269642088699 - QUAD $0xdc5c5301c56b75f7 // .quad -2568086420435798537 - QUAD $0xa9e904c87fcb0a9d // .quad -6203421752542164323 - QUAD $0x89b9b3e11b6329ba // .quad -8522583040413455942 - QUAD $0x546345fa9fbdcd44 // .quad 6080780864604458308 - QUAD $0xac2820d9623bf429 // .quad -6041542782089432023 - QUAD $0xa97c177947ad4095 // .quad -6234081974526590827 - QUAD $0xd732290fbacaf133 // .quad -2940242459184402125 - QUAD $0x49ed8eabcccc485d // .quad 5327070802775656541 - QUAD $0x867f59a9d4bed6c0 // .quad -8755180564631333184 - QUAD $0x5c68f256bfff5a74 // .quad 6658838503469570676 - QUAD $0xa81f301449ee8c70 // .quad -6332289687361778576 - QUAD $0x73832eec6fff3111 // .quad 8323548129336963345 - QUAD $0xd226fc195c6a2f8c // .quad -3303676090774835316 - QUAD $0xc831fd53c5ff7eab // .quad -4021154456019173717 - QUAD $0x83585d8fd9c25db7 // .quad -8982326584375353929 - QUAD $0xba3e7ca8b77f5e55 // .quad -5026443070023967147 - QUAD $0xa42e74f3d032f525 // .quad -6616222212041804507 - QUAD $0x28ce1bd2e55f35eb // .quad 2940318199324816875 - QUAD $0xcd3a1230c43fb26f // .quad -3658591746624867729 - QUAD $0x7980d163cf5b81b3 // .quad 8755227902219092403 - QUAD $0x80444b5e7aa7cf85 // .quad -9204148869281624187 - QUAD $0xd7e105bcc332621f // .quad -2891023177508298209 - QUAD $0xa0555e361951c366 // .quad -6893500068174642330 - QUAD $0x8dd9472bf3fefaa7 // .quad -8225464990312760665 - QUAD $0xc86ab5c39fa63440 // .quad -4005189066790915008 - QUAD $0xb14f98f6f0feb951 // .quad -5670145219463562927 - QUAD $0xfa856334878fc150 // .quad -394800315061255856 - QUAD $0x6ed1bf9a569f33d3 // .quad 7985374283903742931 - QUAD $0x9c935e00d4b9d8d2 // .quad -7164279224554366766 - QUAD $0x0a862f80ec4700c8 // .quad 758345818024902856 - QUAD $0xc3b8358109e84f07 // .quad -4343663012265570553 - QUAD $0xcd27bb612758c0fa // .quad -3663753745896259334 - QUAD $0xf4a642e14c6262c8 // .quad -817892746904575288 - QUAD $0x8038d51cb897789c // .quad -9207375118826243940 - QUAD $0x98e7e9cccfbd7dbd // .quad -7428711994456441411 - QUAD $0xe0470a63e6bd56c3 // .quad -2285846861678029117 - QUAD $0xbf21e44003acdd2c // .quad -4674203974643163860 - QUAD $0x1858ccfce06cac74 // .quad 1754377441329851508 - QUAD $0xeeea5d5004981478 // .quad -1231068949876566920 - QUAD $0x0f37801e0c43ebc8 // .quad 1096485900831157192 - QUAD $0x95527a5202df0ccb // .quad -7686947121313936181 - QUAD $0xd30560258f54e6ba // .quad -3241078642388441414 - QUAD $0xbaa718e68396cffd // .quad -4996997883215032323 - QUAD $0x47c6b82ef32a2069 // .quad 5172023733869224041 - QUAD $0xe950df20247c83fd // .quad -1634561335591402499 - QUAD $0x4cdc331d57fa5441 // .quad 5538357842881958977 - QUAD $0x91d28b7416cdd27e // .quad -7939129862385708418 - QUAD $0xe0133fe4adf8e952 // .quad -2300424733252327086 - QUAD $0xb6472e511c81471d // .quad -5312226309554747619 - QUAD $0x58180fddd97723a6 // .quad 6347841120289366950 - QUAD $0xe3d8f9e563a198e5 // .quad -2028596868516046619 - QUAD $0x570f09eaa7ea7648 // .quad 6273243709394548296 - QUAD $0x8e679c2f5e44ff8f // .quad -8185402070463610993 - QUAD $0x2cd2cc6551e513da // .quad 3229868618315797466 - QUAD $0xb201833b35d63f73 // .quad -5620066569652125837 - QUAD $0xf8077f7ea65e58d1 // .quad -574350245532641071 - QUAD $0xde81e40a034bcf4f // .quad -2413397193637769393 - QUAD $0xfb04afaf27faf782 // .quad -358968903457900670 - QUAD $0x8b112e86420f6191 // .quad -8425902273664687727 - QUAD $0x79c5db9af1f9b563 // .quad 8774660907532399971 - QUAD $0xadd57a27d29339f6 // .quad -5920691823653471754 - QUAD $0x18375281ae7822bc // .quad 1744954097560724156 - QUAD $0xd94ad8b1c7380874 // .quad -2789178761139451788 - QUAD $0x8f2293910d0b15b5 // .quad -8132775725879323211 - QUAD $0x87cec76f1c830548 // .quad -8660765753353239224 - QUAD $0xb2eb3875504ddb22 // .quad -5554283638921766110 - QUAD $0xa9c2794ae3a3c69a // .quad -6214271173264161126 - QUAD $0x5fa60692a46151eb // .quad 6892203506629956075 - QUAD $0xd433179d9c8cb841 // .quad -3156152948152813503 - QUAD $0xdbc7c41ba6bcd333 // .quad -2609901835997359309 - QUAD $0x849feec281d7f328 // .quad -8890124620236590296 - QUAD $0x12b9b522906c0800 // .quad 1349308723430688768 - QUAD $0xa5c7ea73224deff3 // .quad -6500969756868349965 - QUAD $0xd768226b34870a00 // .quad -2925050114139026944 - QUAD $0xcf39e50feae16bef // .quad -3514526177658049553 - QUAD $0xe6a1158300d46640 // .quad -1828156321336891840 - QUAD $0x81842f29f2cce375 // .quad -9114107888677362827 - QUAD $0x60495ae3c1097fd0 // .quad 6938176635183661008 - QUAD $0xa1e53af46f801c53 // .quad -6780948842419315629 - QUAD $0x385bb19cb14bdfc4 // .quad 4061034775552188356 - QUAD $0xca5e89b18b602368 // .quad -3864500034596756632 - QUAD $0x46729e03dd9ed7b5 // .quad 5076293469440235445 - QUAD $0xfcf62c1dee382c42 // .quad -218939024818557886 - QUAD $0x6c07a2c26a8346d1 // .quad 7784369436827535057 - QUAD $0x9e19db92b4e31ba9 // .quad -7054365918152680535 - QUAD $0xc7098b7305241885 // .quad -4104596259247744891 - QUAD $0xc5a05277621be293 // .quad -4206271379263462765 - QUAD $0xb8cbee4fc66d1ea7 // .quad -5130745324059681113 - QUAD $0xf70867153aa2db38 // .quad -646153205651940552 - QUAD $0x737f74f1dc043328 // .quad 8322499218531169064 - QUAD $0x9a65406d44a5c903 // .quad -7321374781173544701 - QUAD $0x505f522e53053ff2 // .quad 5791438004736573426 - QUAD $0xc0fe908895cf3b44 // .quad -4540032458039542972 - QUAD $0x647726b9e7c68fef // .quad 7239297505920716783 - QUAD $0xf13e34aabb430a15 // .quad -1063354554122040811 - QUAD $0x5eca783430dc19f5 // .quad 6830403950414141941 - QUAD $0x96c6e0eab509e64d // .quad -7582125623967357363 - QUAD $0xb67d16413d132072 // .quad -5297053117264486286 - QUAD $0xbc789925624c5fe0 // .quad -4865971011531808800 - QUAD $0xe41c5bd18c57e88f // .quad -2009630378153219953 - QUAD $0xeb96bf6ebadf77d8 // .quad -1470777745987373096 - QUAD $0x8e91b962f7b6f159 // .quad -8173548013986844327 - QUAD $0x933e37a534cbaae7 // .quad -7836765118883190041 - QUAD $0x723627bbb5a4adb0 // .quad 8229809056225996208 - QUAD $0xb80dc58e81fe95a1 // .quad -5184270380176599647 - QUAD $0xcec3b1aaa30dd91c // .quad -3547796734999668452 - QUAD $0xe61136f2227e3b09 // .quad -1868651956793361655 - QUAD $0x213a4f0aa5e8a7b1 // .quad 2394313059052595121 - QUAD $0x8fcac257558ee4e6 // .quad -8085436500636932890 - QUAD $0xa988e2cd4f62d19d // .quad -6230480713039031907 - QUAD $0xb3bd72ed2af29e1f // .quad -5495109607368778209 - QUAD $0x93eb1b80a33b8605 // .quad -7788100891298789883 - QUAD $0xe0accfa875af45a7 // .quad -2257200990783584857 - QUAD $0xbc72f130660533c3 // .quad -4867563057061743677 - QUAD $0x8c6c01c9498d8b88 // .quad -8328279646880822392 - QUAD $0xeb8fad7c7f8680b4 // .quad -1472767802899791692 - QUAD $0xaf87023b9bf0ee6a // .quad -5798663540173640086 - QUAD $0xa67398db9f6820e1 // .quad -6452645772052127519 - QUAD $0xdb68c2ca82ed2a05 // .quad -2636643406789662203 - QUAD $0x88083f8943a1148c // .quad -8644589625959967604 - QUAD $0x892179be91d43a43 // .quad -8565431156884620733 - QUAD $0x6a0a4f6b948959b0 // .quad 7641007041259592112 - QUAD $0xab69d82e364948d4 // .quad -6095102927678388012 - QUAD $0x848ce34679abb01c // .quad -8895485272135061476 - QUAD $0xd6444e39c3db9b09 // .quad -3007192641170597111 - QUAD $0xf2d80e0c0c0b4e11 // .quad -947992276657025519 - QUAD $0x85eab0e41a6940e5 // .quad -8797024428372705051 - QUAD $0x6f8e118f0f0e2195 // .quad 8038381691033493909 - QUAD $0xa7655d1d2103911f // .quad -6384594517038493409 - QUAD $0x4b7195f2d2d1a9fb // .quad 5436291095364479483 - QUAD $0xd13eb46469447567 // .quad -3369057127870728857 - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - - // .p2align 4, 0x00 -_POW_TAB: - LONG $0x00000001 // .long 1 - LONG $0x00000003 // .long 3 - LONG $0x00000006 // .long 6 - LONG $0x00000009 // .long 9 - LONG $0x0000000d // .long 13 - LONG $0x00000010 // .long 16 - LONG $0x00000013 // .long 19 - LONG $0x00000017 // .long 23 - LONG $0x0000001a // .long 26 - - // .p2align 2, 0x00 -_MASK_USE_NUMBER: - LONG $0x00000002 // .long 2 - QUAD $0x0000000000000000 // .p2align 4, 0x00 - -_Digits: - QUAD $0x3330323031303030; QUAD $0x3730363035303430 // .ascii 16, '0001020304050607' - QUAD $0x3131303139303830; QUAD $0x3531343133313231 // .ascii 16, '0809101112131415' - QUAD $0x3931383137313631; QUAD $0x3332323231323032 // .ascii 16, '1617181920212223' - QUAD $0x3732363235323432; QUAD $0x3133303339323832 // .ascii 16, '2425262728293031' - QUAD $0x3533343333333233; QUAD $0x3933383337333633 // .ascii 16, '3233343536373839' - QUAD $0x3334323431343034; QUAD $0x3734363435343434 // .ascii 16, '4041424344454647' - QUAD $0x3135303539343834; QUAD $0x3535343533353235 // .ascii 16, '4849505152535455' - QUAD $0x3935383537353635; QUAD $0x3336323631363036 // .ascii 16, '5657585960616263' - QUAD $0x3736363635363436; QUAD $0x3137303739363836 // .ascii 16, '6465666768697071' - QUAD $0x3537343733373237; QUAD $0x3937383737373637 // .ascii 16, '7273747576777879' - QUAD $0x3338323831383038; QUAD $0x3738363835383438 // .ascii 16, '8081828384858687' - QUAD $0x3139303939383838; QUAD $0x3539343933393239 // .ascii 16, '8889909192939495' - QUAD $0x3939383937393639 // .ascii 8, '96979899' - QUAD $0x0000000000000000 // .p2align 4, 0x00 - -_LB_1ee00aeb: // _pow10_ceil_sig.g - QUAD $0xff77b1fcbebcdc4f // .quad -38366372719436721 - QUAD $0x25e8e89c13bb0f7b // .quad 2731688931043774331 - QUAD $0x9faacf3df73609b1 // .quad -6941508010590729807 - QUAD $0x77b191618c54e9ad // .quad 8624834609543440813 - QUAD $0xc795830d75038c1d // .quad -4065198994811024355 - QUAD $0xd59df5b9ef6a2418 // .quad -3054014793352862696 - QUAD $0xf97ae3d0d2446f25 // .quad -469812725086392539 - QUAD $0x4b0573286b44ad1e // .quad 5405853545163697438 - QUAD $0x9becce62836ac577 // .quad -7211161980820077193 - QUAD $0x4ee367f9430aec33 // .quad 5684501474941004851 - QUAD $0xc2e801fb244576d5 // .quad -4402266457597708587 - QUAD $0x229c41f793cda740 // .quad 2493940825248868160 - QUAD $0xf3a20279ed56d48a // .quad -891147053569747830 - QUAD $0x6b43527578c11110 // .quad 7729112049988473104 - QUAD $0x9845418c345644d6 // .quad -7474495936122174250 - QUAD $0x830a13896b78aaaa // .quad -9004363024039368022 - QUAD $0xbe5691ef416bd60c // .quad -4731433901725329908 - QUAD $0x23cc986bc656d554 // .quad 2579604275232953684 - QUAD $0xedec366b11c6cb8f // .quad -1302606358729274481 - QUAD $0x2cbfbe86b7ec8aa9 // .quad 3224505344041192105 - QUAD $0x94b3a202eb1c3f39 // .quad -7731658001846878407 - QUAD $0x7bf7d71432f3d6aa // .quad 8932844867666826922 - QUAD $0xb9e08a83a5e34f07 // .quad -5052886483881210105 - QUAD $0xdaf5ccd93fb0cc54 // .quad -2669001970698630060 - QUAD $0xe858ad248f5c22c9 // .quad -1704422086424124727 - QUAD $0xd1b3400f8f9cff69 // .quad -3336252463373287575 - QUAD $0x91376c36d99995be // .quad -7982792831656159810 - QUAD $0x23100809b9c21fa2 // .quad 2526528228819083170 - QUAD $0xb58547448ffffb2d // .quad -5366805021142811859 - QUAD $0xabd40a0c2832a78b // .quad -6065211750830921845 - QUAD $0xe2e69915b3fff9f9 // .quad -2096820258001126919 - QUAD $0x16c90c8f323f516d // .quad 1641857348316123501 - QUAD $0x8dd01fad907ffc3b // .quad -8228041688891786181 - QUAD $0xae3da7d97f6792e4 // .quad -5891368184943504668 - QUAD $0xb1442798f49ffb4a // .quad -5673366092687344822 - QUAD $0x99cd11cfdf41779d // .quad -7364210231179380835 - QUAD $0xdd95317f31c7fa1d // .quad -2480021597431793123 - QUAD $0x40405643d711d584 // .quad 4629795266307937668 - QUAD $0x8a7d3eef7f1cfc52 // .quad -8467542526035952558 - QUAD $0x482835ea666b2573 // .quad 5199465050656154995 - QUAD $0xad1c8eab5ee43b66 // .quad -5972742139117552794 - QUAD $0xda3243650005eed0 // .quad -2724040723534582064 - QUAD $0xd863b256369d4a40 // .quad -2854241655469553088 - QUAD $0x90bed43e40076a83 // .quad -8016736922845615485 - QUAD $0x873e4f75e2224e68 // .quad -8701430062309552536 - QUAD $0x5a7744a6e804a292 // .quad 6518754469289960082 - QUAD $0xa90de3535aaae202 // .quad -6265101559459552766 - QUAD $0x711515d0a205cb37 // .quad 8148443086612450103 - QUAD $0xd3515c2831559a83 // .quad -3219690930897053053 - QUAD $0x0d5a5b44ca873e04 // .quad 962181821410786820 - QUAD $0x8412d9991ed58091 // .quad -8929835859451740015 - QUAD $0xe858790afe9486c3 // .quad -1704479370831952189 - QUAD $0xa5178fff668ae0b6 // .quad -6550608805887287114 - QUAD $0x626e974dbe39a873 // .quad 7092772823314835571 - QUAD $0xce5d73ff402d98e3 // .quad -3576574988931720989 - QUAD $0xfb0a3d212dc81290 // .quad -357406007711231344 - QUAD $0x80fa687f881c7f8e // .quad -9152888395723407474 - QUAD $0x7ce66634bc9d0b9a // .quad 8999993282035256218 - QUAD $0xa139029f6a239f72 // .quad -6829424476226871438 - QUAD $0x1c1fffc1ebc44e81 // .quad 2026619565689294465 - QUAD $0xc987434744ac874e // .quad -3925094576856201394 - QUAD $0xa327ffb266b56221 // .quad -6690097579743157727 - QUAD $0xfbe9141915d7a922 // .quad -294682202642863838 - QUAD $0x4bf1ff9f0062baa9 // .quad 5472436080603216553 - QUAD $0x9d71ac8fada6c9b5 // .quad -7101705404292871755 - QUAD $0x6f773fc3603db4aa // .quad 8031958568804398250 - QUAD $0xc4ce17b399107c22 // .quad -4265445736938701790 - QUAD $0xcb550fb4384d21d4 // .quad -3795109844276665900 - QUAD $0xf6019da07f549b2b // .quad -720121152745989333 - QUAD $0x7e2a53a146606a49 // .quad 9091170749936331337 - QUAD $0x99c102844f94e0fb // .quad -7367604748107325189 - QUAD $0x2eda7444cbfc426e // .quad 3376138709496513134 - QUAD $0xc0314325637a1939 // .quad -4597819916706768583 - QUAD $0xfa911155fefb5309 // .quad -391512631556746487 - QUAD $0xf03d93eebc589f88 // .quad -1135588877456072824 - QUAD $0x793555ab7eba27cb // .quad 8733981247408842699 - QUAD $0x96267c7535b763b5 // .quad -7627272076051127371 - QUAD $0x4bc1558b2f3458df // .quad 5458738279630526687 - QUAD $0xbbb01b9283253ca2 // .quad -4922404076636521310 - QUAD $0x9eb1aaedfb016f17 // .quad -7011635205744005353 - QUAD $0xea9c227723ee8bcb // .quad -1541319077368263733 - QUAD $0x465e15a979c1cadd // .quad 5070514048102157021 - QUAD $0x92a1958a7675175f // .quad -7880853450996246689 - QUAD $0x0bfacd89ec191eca // .quad 863228270850154186 - QUAD $0xb749faed14125d36 // .quad -5239380795317920458 - QUAD $0xcef980ec671f667c // .quad -3532650679864695172 - QUAD $0xe51c79a85916f484 // .quad -1937539975720012668 - QUAD $0x82b7e12780e7401b // .quad -9027499368258256869 - QUAD $0x8f31cc0937ae58d2 // .quad -8128491512466089774 - QUAD $0xd1b2ecb8b0908811 // .quad -3336344095947716591 - QUAD $0xb2fe3f0b8599ef07 // .quad -5548928372155224313 - QUAD $0x861fa7e6dcb4aa16 // .quad -8782116138362033642 - QUAD $0xdfbdcece67006ac9 // .quad -2324474446766642487 - QUAD $0x67a791e093e1d49b // .quad 7469098900757009563 - QUAD $0x8bd6a141006042bd // .quad -8370325556870233411 - QUAD $0xe0c8bb2c5c6d24e1 // .quad -2249342214667950879 - QUAD $0xaecc49914078536d // .quad -5851220927660403859 - QUAD $0x58fae9f773886e19 // .quad 6411694268519837209 - QUAD $0xda7f5bf590966848 // .quad -2702340141148116920 - QUAD $0xaf39a475506a899f // .quad -5820440219632367201 - QUAD $0x888f99797a5e012d // .quad -8606491615858654931 - QUAD $0x6d8406c952429604 // .quad 7891439908798240260 - QUAD $0xaab37fd7d8f58178 // .quad -6146428501395930760 - QUAD $0xc8e5087ba6d33b84 // .quad -3970758169284363388 - QUAD $0xd5605fcdcf32e1d6 // .quad -3071349608317525546 - QUAD $0xfb1e4a9a90880a65 // .quad -351761693178066331 - QUAD $0x855c3be0a17fcd26 // .quad -8837122532839535322 - QUAD $0x5cf2eea09a550680 // .quad 6697677969404790400 - QUAD $0xa6b34ad8c9dfc06f // .quad -6434717147622031249 - QUAD $0xf42faa48c0ea481f // .quad -851274575098787809 - QUAD $0xd0601d8efc57b08b // .quad -3431710416100151157 - QUAD $0xf13b94daf124da27 // .quad -1064093218873484761 - QUAD $0x823c12795db6ce57 // .quad -9062348037703676329 - QUAD $0x76c53d08d6b70859 // .quad 8558313775058847833 - QUAD $0xa2cb1717b52481ed // .quad -6716249028702207507 - QUAD $0x54768c4b0c64ca6f // .quad 6086206200396171887 - QUAD $0xcb7ddcdda26da268 // .quad -3783625267450371480 - QUAD $0xa9942f5dcf7dfd0a // .quad -6227300304786948854 - QUAD $0xfe5d54150b090b02 // .quad -117845565885576446 - QUAD $0xd3f93b35435d7c4d // .quad -3172439362556298163 - QUAD $0x9efa548d26e5a6e1 // .quad -6991182506319567135 - QUAD $0xc47bc5014a1a6db0 // .quad -4288617610811380304 - QUAD $0xc6b8e9b0709f109a // .quad -4127292114472071014 - QUAD $0x359ab6419ca1091c // .quad 3862600023340550428 - QUAD $0xf867241c8cc6d4c0 // .quad -547429124662700864 - QUAD $0xc30163d203c94b63 // .quad -4395122007679087773 - QUAD $0x9b407691d7fc44f8 // .quad -7259672230555269896 - QUAD $0x79e0de63425dcf1e // .quad 8782263791269039902 - QUAD $0xc21094364dfb5636 // .quad -4462904269766699466 - QUAD $0x985915fc12f542e5 // .quad -7468914334623251739 - QUAD $0xf294b943e17a2bc4 // .quad -966944318780986428 - QUAD $0x3e6f5b7b17b2939e // .quad 4498915137003099038 - QUAD $0x979cf3ca6cec5b5a // .quad -7521869226879198374 - QUAD $0xa705992ceecf9c43 // .quad -6411550076227838909 - QUAD $0xbd8430bd08277231 // .quad -4790650515171610063 - QUAD $0x50c6ff782a838354 // .quad 5820620459997365076 - QUAD $0xece53cec4a314ebd // .quad -1376627125537124675 - QUAD $0xa4f8bf5635246429 // .quad -6559282480285457367 - QUAD $0x940f4613ae5ed136 // .quad -7777920981101784778 - QUAD $0x871b7795e136be9a // .quad -8711237568605798758 - QUAD $0xb913179899f68584 // .quad -5110715207949843068 - QUAD $0x28e2557b59846e40 // .quad 2946011094524915264 - QUAD $0xe757dd7ec07426e5 // .quad -1776707991509915931 - QUAD $0x331aeada2fe589d0 // .quad 3682513868156144080 - QUAD $0x9096ea6f3848984f // .quad -8027971522334779313 - QUAD $0x3ff0d2c85def7622 // .quad 4607414176811284002 - QUAD $0xb4bca50b065abe63 // .quad -5423278384491086237 - QUAD $0x0fed077a756b53aa // .quad 1147581702586717098 - QUAD $0xe1ebce4dc7f16dfb // .quad -2167411962186469893 - QUAD $0xd3e8495912c62895 // .quad -3177208890193991531 - QUAD $0x8d3360f09cf6e4bd // .quad -8272161504007625539 - QUAD $0x64712dd7abbbd95d // .quad 7237616480483531101 - QUAD $0xb080392cc4349dec // .quad -5728515861582144020 - QUAD $0xbd8d794d96aacfb4 // .quad -4788037454677749836 - QUAD $0xdca04777f541c567 // .quad -2548958808550292121 - QUAD $0xecf0d7a0fc5583a1 // .quad -1373360799919799391 - QUAD $0x89e42caaf9491b60 // .quad -8510628282985014432 - QUAD $0xf41686c49db57245 // .quad -858350499949874619 - QUAD $0xac5d37d5b79b6239 // .quad -6026599335303880135 - QUAD $0x311c2875c522ced6 // .quad 3538747893490044630 - QUAD $0xd77485cb25823ac7 // .quad -2921563150702462265 - QUAD $0x7d633293366b828c // .quad 9035120885289943692 - QUAD $0x86a8d39ef77164bc // .quad -8743505996830120772 - QUAD $0xae5dff9c02033198 // .quad -5882264492762254952 - QUAD $0xa8530886b54dbdeb // .quad -6317696477610263061 - QUAD $0xd9f57f830283fdfd // .quad -2741144597525430787 - QUAD $0xd267caa862a12d66 // .quad -3285434578585440922 - QUAD $0xd072df63c324fd7c // .quad -3426430746906788484 - QUAD $0x8380dea93da4bc60 // .quad -8970925639256982432 - QUAD $0x4247cb9e59f71e6e // .quad 4776009810824339054 - QUAD $0xa46116538d0deb78 // .quad -6601971030643840136 - QUAD $0x52d9be85f074e609 // .quad 5970012263530423817 - QUAD $0xcd795be870516656 // .quad -3640777769877412266 - QUAD $0x67902e276c921f8c // .quad 7462515329413029772 - QUAD $0x806bd9714632dff6 // .quad -9193015133814464522 - QUAD $0x00ba1cd8a3db53b7 // .quad 52386062455755703 - QUAD $0xa086cfcd97bf97f3 // .quad -6879582898840692749 - QUAD $0x80e8a40eccd228a5 // .quad -9157889458785081179 - QUAD $0xc8a883c0fdaf7df0 // .quad -3987792605123478032 - QUAD $0x6122cd128006b2ce // .quad 6999382250228200142 - QUAD $0xfad2a4b13d1b5d6c // .quad -373054737976959636 - QUAD $0x796b805720085f82 // .quad 8749227812785250178 - QUAD $0x9cc3a6eec6311a63 // .quad -7150688238876681629 - QUAD $0xcbe3303674053bb1 // .quad -3755104653863994447 - QUAD $0xc3f490aa77bd60fc // .quad -4326674280168464132 - QUAD $0xbedbfc4411068a9d // .quad -4693880817329993059 - QUAD $0xf4f1b4d515acb93b // .quad -796656831783192261 - QUAD $0xee92fb5515482d45 // .quad -1255665003235103419 - QUAD $0x991711052d8bf3c5 // .quad -7415439547505577019 - QUAD $0x751bdd152d4d1c4b // .quad 8438581409832836171 - QUAD $0xbf5cd54678eef0b6 // .quad -4657613415954583370 - QUAD $0xd262d45a78a0635e // .quad -3286831292991118498 - QUAD $0xef340a98172aace4 // .quad -1210330751515841308 - QUAD $0x86fb897116c87c35 // .quad -8720225134666286027 - QUAD $0x9580869f0e7aac0e // .quad -7673985747338482674 - QUAD $0xd45d35e6ae3d4da1 // .quad -3144297699952734815 - QUAD $0xbae0a846d2195712 // .quad -4980796165745715438 - QUAD $0x8974836059cca10a // .quad -8542058143368306422 - QUAD $0xe998d258869facd7 // .quad -1614309188754756393 - QUAD $0x2bd1a438703fc94c // .quad 3157485376071780684 - QUAD $0x91ff83775423cc06 // .quad -7926472270612804602 - QUAD $0x7b6306a34627ddd0 // .quad 8890957387685944784 - QUAD $0xb67f6455292cbf08 // .quad -5296404319838617848 - QUAD $0x1a3bc84c17b1d543 // .quad 1890324697752655171 - QUAD $0xe41f3d6a7377eeca // .quad -2008819381370884406 - QUAD $0x20caba5f1d9e4a94 // .quad 2362905872190818964 - QUAD $0x8e938662882af53e // .quad -8173041140997884610 - QUAD $0x547eb47b7282ee9d // .quad 6088502188546649757 - QUAD $0xb23867fb2a35b28d // .quad -5604615407819967859 - QUAD $0xe99e619a4f23aa44 // .quad -1612744301171463612 - QUAD $0xdec681f9f4c31f31 // .quad -2394083241347571919 - QUAD $0x6405fa00e2ec94d5 // .quad 7207441660390446293 - QUAD $0x8b3c113c38f9f37e // .quad -8413831053483314306 - QUAD $0xde83bc408dd3dd05 // .quad -2412877989897052923 - QUAD $0xae0b158b4738705e // .quad -5905602798426754978 - QUAD $0x9624ab50b148d446 // .quad -7627783505798704058 - QUAD $0xd98ddaee19068c76 // .quad -2770317479606055818 - QUAD $0x3badd624dd9b0958 // .quad 4300328673033783640 - QUAD $0x87f8a8d4cfa417c9 // .quad -8648977452394866743 - QUAD $0xe54ca5d70a80e5d7 // .quad -1923980597781273129 - QUAD $0xa9f6d30a038d1dbc // .quad -6199535797066195524 - QUAD $0x5e9fcf4ccd211f4d // .quad 6818396289628184397 - QUAD $0xd47487cc8470652b // .quad -3137733727905356501 - QUAD $0x7647c32000696720 // .quad 8522995362035230496 - QUAD $0x84c8d4dfd2c63f3b // .quad -8878612607581929669 - QUAD $0x29ecd9f40041e074 // .quad 3021029092058325108 - QUAD $0xa5fb0a17c777cf09 // .quad -6486579741050024183 - QUAD $0xf468107100525891 // .quad -835399653354481519 - QUAD $0xcf79cc9db955c2cc // .quad -3496538657885142324 - QUAD $0x7182148d4066eeb5 // .quad 8179122470161673909 - QUAD $0x81ac1fe293d599bf // .quad -9102865688819295809 - QUAD $0xc6f14cd848405531 // .quad -4111420493003729615 - QUAD $0xa21727db38cb002f // .quad -6766896092596731857 - QUAD $0xb8ada00e5a506a7d // .quad -5139275616254662019 - QUAD $0xca9cf1d206fdc03b // .quad -3846934097318526917 - QUAD $0xa6d90811f0e4851d // .quad -6424094520318327523 - QUAD $0xfd442e4688bd304a // .quad -196981603220770742 - QUAD $0x908f4a166d1da664 // .quad -8030118150397909404 - QUAD $0x9e4a9cec15763e2e // .quad -7040642529654063570 - QUAD $0x9a598e4e043287ff // .quad -7324666853212387329 - QUAD $0xc5dd44271ad3cdba // .quad -4189117143640191558 - QUAD $0x40eff1e1853f29fe // .quad 4679224488766679550 - QUAD $0xf7549530e188c128 // .quad -624710411122851544 - QUAD $0xd12bee59e68ef47d // .quad -3374341425896426371 - QUAD $0x9a94dd3e8cf578b9 // .quad -7307973034592864071 - QUAD $0x82bb74f8301958cf // .quad -9026492418826348337 - QUAD $0xc13a148e3032d6e7 // .quad -4523280274813692185 - QUAD $0xe36a52363c1faf02 // .quad -2059743486678159614 - QUAD $0xf18899b1bc3f8ca1 // .quad -1042414325089727327 - QUAD $0xdc44e6c3cb279ac2 // .quad -2574679358347699518 - QUAD $0x96f5600f15a7b7e5 // .quad -7569037980822161435 - QUAD $0x29ab103a5ef8c0ba // .quad 3002511419460075706 - QUAD $0xbcb2b812db11a5de // .quad -4849611457600313890 - QUAD $0x7415d448f6b6f0e8 // .quad 8364825292752482536 - QUAD $0xebdf661791d60f56 // .quad -1450328303573004458 - QUAD $0x111b495b3464ad22 // .quad 1232659579085827362 - QUAD $0x936b9fcebb25c995 // .quad -7823984217374209643 - QUAD $0xcab10dd900beec35 // .quad -3841273781498745803 - QUAD $0xb84687c269ef3bfb // .quad -5168294253290374149 - QUAD $0x3d5d514f40eea743 // .quad 4421779809981343555 - QUAD $0xe65829b3046b0afa // .quad -1848681798185579782 - QUAD $0x0cb4a5a3112a5113 // .quad 915538744049291539 - QUAD $0x8ff71a0fe2c2e6dc // .quad -8072955151507069220 - QUAD $0x47f0e785eaba72ac // .quad 5183897733458195116 - QUAD $0xb3f4e093db73a093 // .quad -5479507920956448621 - QUAD $0x59ed216765690f57 // .quad 6479872166822743895 - QUAD $0xe0f218b8d25088b8 // .quad -2237698882768172872 - QUAD $0x306869c13ec3532d // .quad 3488154190101041965 - QUAD $0x8c974f7383725573 // .quad -8316090829371189901 - QUAD $0x1e414218c73a13fc // .quad 2180096368813151228 - QUAD $0xafbd2350644eeacf // .quad -5783427518286599473 - QUAD $0xe5d1929ef90898fb // .quad -1886565557410948869 - QUAD $0xdbac6c247d62a583 // .quad -2617598379430861437 - QUAD $0xdf45f746b74abf3a // .quad -2358206946763686086 - QUAD $0x894bc396ce5da772 // .quad -8553528014785370254 - QUAD $0x6b8bba8c328eb784 // .quad 7749492695127472004 - QUAD $0xab9eb47c81f5114f // .quad -6080224000054324913 - QUAD $0x066ea92f3f326565 // .quad 463493832054564197 - QUAD $0xd686619ba27255a2 // .quad -2988593981640518238 - QUAD $0xc80a537b0efefebe // .quad -4032318728359182658 - QUAD $0x8613fd0145877585 // .quad -8785400266166405755 - QUAD $0xbd06742ce95f5f37 // .quad -4826042214438183113 - QUAD $0xa798fc4196e952e7 // .quad -6370064314280619289 - QUAD $0x2c48113823b73705 // .quad 3190819268807046917 - QUAD $0xd17f3b51fca3a7a0 // .quad -3350894374423386208 - QUAD $0xf75a15862ca504c6 // .quad -623161932418579258 - QUAD $0x82ef85133de648c4 // .quad -9011838011655698236 - QUAD $0x9a984d73dbe722fc // .quad -7307005235402693892 - QUAD $0xa3ab66580d5fdaf5 // .quad -6653111496142234891 - QUAD $0xc13e60d0d2e0ebbb // .quad -4522070525825979461 - QUAD $0xcc963fee10b7d1b3 // .quad -3704703351750405709 - QUAD $0x318df905079926a9 // .quad 3570783879572301481 - QUAD $0xffbbcfe994e5c61f // .quad -19193171260619233 - QUAD $0xfdf17746497f7053 // .quad -148206168962011053 - QUAD $0x9fd561f1fd0f9bd3 // .quad -6929524759678968877 - QUAD $0xfeb6ea8bedefa634 // .quad -92628855601256908 - QUAD $0xc7caba6e7c5382c8 // .quad -4050219931171323192 - QUAD $0xfe64a52ee96b8fc1 // .quad -115786069501571135 - QUAD $0xf9bd690a1b68637b // .quad -451088895536766085 - QUAD $0x3dfdce7aa3c673b1 // .quad 4466953431550423985 - QUAD $0x9c1661a651213e2d // .quad -7199459587351560659 - QUAD $0x06bea10ca65c084f // .quad 486002885505321039 - QUAD $0xc31bfa0fe5698db8 // .quad -4387638465762062920 - QUAD $0x486e494fcff30a63 // .quad 5219189625309039203 - QUAD $0xf3e2f893dec3f126 // .quad -872862063775190746 - QUAD $0x5a89dba3c3efccfb // .quad 6523987031636299003 - QUAD $0x986ddb5c6b3a76b7 // .quad -7463067817500576073 - QUAD $0xf89629465a75e01d // .quad -534194123654701027 - QUAD $0xbe89523386091465 // .quad -4717148753448332187 - QUAD $0xf6bbb397f1135824 // .quad -667742654568376284 - QUAD $0xee2ba6c0678b597f // .quad -1284749923383027329 - QUAD $0x746aa07ded582e2d // .quad 8388693718644305453 - QUAD $0x94db483840b717ef // .quad -7720497729755473937 - QUAD $0xa8c2a44eb4571cdd // .quad -6286281471915778851 - QUAD $0xba121a4650e4ddeb // .quad -5038936143766954517 - QUAD $0x92f34d62616ce414 // .quad -7857851839894723564 - QUAD $0xe896a0d7e51e1566 // .quad -1686984161281305242 - QUAD $0x77b020baf9c81d18 // .quad 8624429273841147160 - QUAD $0x915e2486ef32cd60 // .quad -7971894128441897632 - QUAD $0x0ace1474dc1d122f // .quad 778582277723329071 - QUAD $0xb5b5ada8aaff80b8 // .quad -5353181642124984136 - QUAD $0x0d819992132456bb // .quad 973227847154161339 - QUAD $0xe3231912d5bf60e6 // .quad -2079791034228842266 - QUAD $0x10e1fff697ed6c6a // .quad 1216534808942701674 - QUAD $0x8df5efabc5979c8f // .quad -8217398424034108273 - QUAD $0xca8d3ffa1ef463c2 // .quad -3851351762838199358 - QUAD $0xb1736b96b6fd83b3 // .quad -5660062011615247437 - QUAD $0xbd308ff8a6b17cb3 // .quad -4814189703547749197 - QUAD $0xddd0467c64bce4a0 // .quad -2463391496091671392 - QUAD $0xac7cb3f6d05ddbdf // .quad -6017737129434686497 - QUAD $0x8aa22c0dbef60ee4 // .quad -8457148712698376476 - QUAD $0x6bcdf07a423aa96c // .quad 7768129340171790700 - QUAD $0xad4ab7112eb3929d // .quad -5959749872445582691 - QUAD $0x86c16c98d2c953c7 // .quad -8736582398494813241 - QUAD $0xd89d64d57a607744 // .quad -2838001322129590460 - QUAD $0xe871c7bf077ba8b8 // .quad -1697355961263740744 - QUAD $0x87625f056c7c4a8b // .quad -8691279853972075893 - QUAD $0x11471cd764ad4973 // .quad 1244995533423855987 - QUAD $0xa93af6c6c79b5d2d // .quad -6252413799037706963 - QUAD $0xd598e40d3dd89bd0 // .quad -3055441601647567920 - QUAD $0xd389b47879823479 // .quad -3203831230369745799 - QUAD $0x4aff1d108d4ec2c4 // .quad 5404070034795315908 - QUAD $0x843610cb4bf160cb // .quad -8919923546622172981 - QUAD $0xcedf722a585139bb // .quad -3539985255894009413 - QUAD $0xa54394fe1eedb8fe // .quad -6538218414850328322 - QUAD $0xc2974eb4ee658829 // .quad -4424981569867511767 - QUAD $0xce947a3da6a9273e // .quad -3561087000135522498 - QUAD $0x733d226229feea33 // .quad 8303831092947774003 - QUAD $0x811ccc668829b887 // .quad -9143208402725783417 - QUAD $0x0806357d5a3f5260 // .quad 578208414664970848 - QUAD $0xa163ff802a3426a8 // .quad -6817324484979841368 - QUAD $0xca07c2dcb0cf26f8 // .quad -3888925500096174344 - QUAD $0xc9bcff6034c13052 // .quad -3909969587797413806 - QUAD $0xfc89b393dd02f0b6 // .quad -249470856692830026 - QUAD $0xfc2c3f3841f17c67 // .quad -275775966319379353 - QUAD $0xbbac2078d443ace3 // .quad -4923524589293425437 - QUAD $0x9d9ba7832936edc0 // .quad -7089889006590693952 - QUAD $0xd54b944b84aa4c0e // .quad -3077202868308390898 - QUAD $0xc5029163f384a931 // .quad -4250675239810979535 - QUAD $0x0a9e795e65d4df12 // .quad 765182433041899282 - QUAD $0xf64335bcf065d37d // .quad -701658031336336515 - QUAD $0x4d4617b5ff4a16d6 // .quad 5568164059729762006 - QUAD $0x99ea0196163fa42e // .quad -7356065297226292178 - QUAD $0x504bced1bf8e4e46 // .quad 5785945546544795206 - QUAD $0xc06481fb9bcf8d39 // .quad -4583395603105477319 - QUAD $0xe45ec2862f71e1d7 // .quad -1990940103673781801 - QUAD $0xf07da27a82c37088 // .quad -1117558485454458744 - QUAD $0x5d767327bb4e5a4d // .quad 6734696907262548557 - QUAD $0x964e858c91ba2655 // .quad -7616003081050118571 - QUAD $0x3a6a07f8d510f870 // .quad 4209185567039092848 - QUAD $0xbbe226efb628afea // .quad -4908317832885260310 - QUAD $0x890489f70a55368c // .quad -8573576096483297652 - QUAD $0xeadab0aba3b2dbe5 // .quad -1523711272679187483 - QUAD $0x2b45ac74ccea842f // .quad 3118087934678041647 - QUAD $0x92c8ae6b464fc96f // .quad -7869848573065574033 - QUAD $0x3b0b8bc90012929e // .quad 4254647968387469982 - QUAD $0xb77ada0617e3bbcb // .quad -5225624697904579637 - QUAD $0x09ce6ebb40173745 // .quad 706623942056949573 - QUAD $0xe55990879ddcaabd // .quad -1920344853953336643 - QUAD $0xcc420a6a101d0516 // .quad -3728406090856200938 - QUAD $0x8f57fa54c2a9eab6 // .quad -8117744561361917258 - QUAD $0x9fa946824a12232e // .quad -6941939825212513490 - QUAD $0xb32df8e9f3546564 // .quad -5535494683275008668 - QUAD $0x47939822dc96abfa // .quad 5157633273766521850 - QUAD $0xdff9772470297ebd // .quad -2307682335666372931 - QUAD $0x59787e2b93bc56f8 // .quad 6447041592208152312 - QUAD $0x8bfbea76c619ef36 // .quad -8359830487432564938 - QUAD $0x57eb4edb3c55b65b // .quad 6335244004343789147 - QUAD $0xaefae51477a06b03 // .quad -5838102090863318269 - QUAD $0xede622920b6b23f2 // .quad -1304317031425039374 - QUAD $0xdab99e59958885c4 // .quad -2685941595151759932 - QUAD $0xe95fab368e45ecee // .quad -1630396289281299218 - QUAD $0x88b402f7fd75539b // .quad -8596242524610931813 - QUAD $0x11dbcb0218ebb415 // .quad 1286845328412881941 - QUAD $0xaae103b5fcd2a881 // .quad -6133617137336276863 - QUAD $0xd652bdc29f26a11a // .quad -3003129357911285478 - QUAD $0xd59944a37c0752a2 // .quad -3055335403242958174 - QUAD $0x4be76d3346f04960 // .quad 5469460339465668960 - QUAD $0x857fcae62d8493a5 // .quad -8827113654667930715 - QUAD $0x6f70a4400c562ddc // .quad 8030098730593431004 - QUAD $0xa6dfbd9fb8e5b88e // .quad -6422206049907525490 - QUAD $0xcb4ccd500f6bb953 // .quad -3797434642040374957 - QUAD $0xd097ad07a71f26b2 // .quad -3416071543957018958 - QUAD $0x7e2000a41346a7a8 // .quad 9088264752731695016 - QUAD $0x825ecc24c873782f // .quad -9052573742614218705 - QUAD $0x8ed400668c0c28c9 // .quad -8154892584824854327 - QUAD $0xa2f67f2dfa90563b // .quad -6704031159840385477 - QUAD $0x728900802f0f32fb // .quad 8253128342678483707 - QUAD $0xcbb41ef979346bca // .quad -3768352931373093942 - QUAD $0x4f2b40a03ad2ffba // .quad 5704724409920716730 - QUAD $0xfea126b7d78186bc // .quad -98755145788979524 - QUAD $0xe2f610c84987bfa9 // .quad -2092466524453879895 - QUAD $0x9f24b832e6b0f436 // .quad -6979250993759194058 - QUAD $0x0dd9ca7d2df4d7ca // .quad 998051431430019018 - QUAD $0xc6ede63fa05d3143 // .quad -4112377723771604669 - QUAD $0x91503d1c79720dbc // .quad -7975807747567252036 - QUAD $0xf8a95fcf88747d94 // .quad -528786136287117932 - QUAD $0x75a44c6397ce912b // .quad 8476984389250486571 - QUAD $0x9b69dbe1b548ce7c // .quad -7248020362820530564 - QUAD $0xc986afbe3ee11abb // .quad -3925256793573221701 - QUAD $0xc24452da229b021b // .quad -4448339435098275301 - QUAD $0xfbe85badce996169 // .quad -294884973539139223 - QUAD $0xf2d56790ab41c2a2 // .quad -948738275445456222 - QUAD $0xfae27299423fb9c4 // .quad -368606216923924028 - QUAD $0x97c560ba6b0919a5 // .quad -7510490449794491995 - QUAD $0xdccd879fc967d41b // .quad -2536221894791146469 - QUAD $0xbdb6b8e905cb600f // .quad -4776427043815727089 - QUAD $0x5400e987bbc1c921 // .quad 6053094668365842721 - QUAD $0xed246723473e3813 // .quad -1358847786342270957 - QUAD $0x290123e9aab23b69 // .quad 2954682317029915497 - QUAD $0x9436c0760c86e30b // .quad -7766808894105001205 - QUAD $0xf9a0b6720aaf6522 // .quad -459166561069996766 - QUAD $0xb94470938fa89bce // .quad -5096825099203863602 - QUAD $0xf808e40e8d5b3e6a // .quad -573958201337495958 - QUAD $0xe7958cb87392c2c2 // .quad -1759345355577441598 - QUAD $0xb60b1d1230b20e05 // .quad -5329133770099257851 - QUAD $0x90bd77f3483bb9b9 // .quad -8017119874876982855 - QUAD $0xb1c6f22b5e6f48c3 // .quad -5636551615525730109 - QUAD $0xb4ecd5f01a4aa828 // .quad -5409713825168840664 - QUAD $0x1e38aeb6360b1af4 // .quad 2177682517447613172 - QUAD $0xe2280b6c20dd5232 // .quad -2150456263033662926 - QUAD $0x25c6da63c38de1b1 // .quad 2722103146809516465 - QUAD $0x8d590723948a535f // .quad -8261564192037121185 - QUAD $0x579c487e5a38ad0f // .quad 6313000485183335695 - QUAD $0xb0af48ec79ace837 // .quad -5715269221619013577 - QUAD $0x2d835a9df0c6d852 // .quad 3279564588051781714 - QUAD $0xdcdb1b2798182244 // .quad -2532400508596379068 - QUAD $0xf8e431456cf88e66 // .quad -512230283362660762 - QUAD $0x8a08f0f8bf0f156b // .quad -8500279345513818773 - QUAD $0x1b8e9ecb641b5900 // .quad 1985699082112030976 - QUAD $0xac8b2d36eed2dac5 // .quad -6013663163464885563 - QUAD $0xe272467e3d222f40 // .quad -2129562165787349184 - QUAD $0xd7adf884aa879177 // .quad -2905392935903719049 - QUAD $0x5b0ed81dcc6abb10 // .quad 6561419329620589328 - QUAD $0x86ccbb52ea94baea // .quad -8733399612580906262 - QUAD $0x98e947129fc2b4ea // .quad -7428327965055601430 - QUAD $0xa87fea27a539e9a5 // .quad -6305063497298744923 - QUAD $0x3f2398d747b36225 // .quad 4549648098962661925 - QUAD $0xd29fe4b18e88640e // .quad -3269643353196043250 - QUAD $0x8eec7f0d19a03aae // .quad -8147997931578836306 - QUAD $0x83a3eeeef9153e89 // .quad -8961056123388608887 - QUAD $0x1953cf68300424ad // .quad 1825030320404309165 - QUAD $0xa48ceaaab75a8e2b // .quad -6589634135808373205 - QUAD $0x5fa8c3423c052dd8 // .quad 6892973918932774360 - QUAD $0xcdb02555653131b6 // .quad -3625356651333078602 - QUAD $0x3792f412cb06794e // .quad 4004531380238580046 - QUAD $0x808e17555f3ebf11 // .quad -9183376934724255983 - QUAD $0xe2bbd88bbee40bd1 // .quad -2108853905778275375 - QUAD $0xa0b19d2ab70e6ed6 // .quad -6867535149977932074 - QUAD $0x5b6aceaeae9d0ec5 // .quad 6587304654631931589 - QUAD $0xc8de047564d20a8b // .quad -3972732919045027189 - QUAD $0xf245825a5a445276 // .quad -989241218564861322 - QUAD $0xfb158592be068d2e // .quad -354230130378896082 - QUAD $0xeed6e2f0f0d56713 // .quad -1236551523206076653 - QUAD $0x9ced737bb6c4183d // .quad -7138922859127891907 - QUAD $0x55464dd69685606c // .quad 6144684325637283948 - QUAD $0xc428d05aa4751e4c // .quad -4311967555482476980 - QUAD $0xaa97e14c3c26b887 // .quad -6154202648235558777 - QUAD $0xf53304714d9265df // .quad -778273425925708321 - QUAD $0xd53dd99f4b3066a9 // .quad -3081067291867060567 - QUAD $0x993fe2c6d07b7fab // .quad -7403949918844649557 - QUAD $0xe546a8038efe402a // .quad -1925667057416912854 - QUAD $0xbf8fdb78849a5f96 // .quad -4643251380128424042 - QUAD $0xde98520472bdd034 // .quad -2407083821771141068 - QUAD $0xef73d256a5c0f77c // .quad -1192378206733142148 - QUAD $0x963e66858f6d4441 // .quad -7620540795641314239 - QUAD $0x95a8637627989aad // .quad -7662765406849295699 - QUAD $0xdde7001379a44aa9 // .quad -2456994988062127447 - QUAD $0xbb127c53b17ec159 // .quad -4966770740134231719 - QUAD $0x5560c018580d5d53 // .quad 6152128301777116499 - QUAD $0xe9d71b689dde71af // .quad -1596777406740401745 - QUAD $0xaab8f01e6e10b4a7 // .quad -6144897678060768089 - QUAD $0x9226712162ab070d // .quad -7915514906853832947 - QUAD $0xcab3961304ca70e9 // .quad -3840561048787980055 - QUAD $0xb6b00d69bb55c8d1 // .quad -5282707615139903279 - QUAD $0x3d607b97c5fd0d23 // .quad 4422670725869800739 - QUAD $0xe45c10c42a2b3b05 // .quad -1991698500497491195 - QUAD $0x8cb89a7db77c506b // .quad -8306719647944912789 - QUAD $0x8eb98a7a9a5b04e3 // .quad -8162340590452013853 - QUAD $0x77f3608e92adb243 // .quad 8643358275316593219 - QUAD $0xb267ed1940f1c61c // .quad -5591239719637629412 - QUAD $0x55f038b237591ed4 // .quad 6192511825718353620 - QUAD $0xdf01e85f912e37a3 // .quad -2377363631119648861 - QUAD $0x6b6c46dec52f6689 // .quad 7740639782147942025 - QUAD $0x8b61313bbabce2c6 // .quad -8403381297090862394 - QUAD $0x2323ac4b3b3da016 // .quad 2532056854628769814 - QUAD $0xae397d8aa96c1b77 // .quad -5892540602936190089 - QUAD $0xabec975e0a0d081b // .quad -6058300968568813541 - QUAD $0xd9c7dced53c72255 // .quad -2753989735242849707 - QUAD $0x96e7bd358c904a22 // .quad -7572876210711016926 - QUAD $0x881cea14545c7575 // .quad -8638772612167862923 - QUAD $0x7e50d64177da2e55 // .quad 9102010423587778133 - QUAD $0xaa242499697392d2 // .quad -6186779746782440750 - QUAD $0xdde50bd1d5d0b9ea // .quad -2457545025797441046 - QUAD $0xd4ad2dbfc3d07787 // .quad -3121788665050663033 - QUAD $0x955e4ec64b44e865 // .quad -7683617300674189211 - QUAD $0x84ec3c97da624ab4 // .quad -8868646943297746252 - QUAD $0xbd5af13bef0b113f // .quad -4802260812921368257 - QUAD $0xa6274bbdd0fadd61 // .quad -6474122660694794911 - QUAD $0xecb1ad8aeacdd58f // .quad -1391139997724322417 - QUAD $0xcfb11ead453994ba // .quad -3480967307441105734 - QUAD $0x67de18eda5814af3 // .quad 7484447039699372787 - QUAD $0x81ceb32c4b43fcf4 // .quad -9093133594791772940 - QUAD $0x80eacf948770ced8 // .quad -9157278655470055720 - QUAD $0xa2425ff75e14fc31 // .quad -6754730975062328271 - QUAD $0xa1258379a94d028e // .quad -6834912300910181746 - QUAD $0xcad2f7f5359a3b3e // .quad -3831727700400522434 - QUAD $0x096ee45813a04331 // .quad 679731660717048625 - QUAD $0xfd87b5f28300ca0d // .quad -177973607073265139 - QUAD $0x8bca9d6e188853fd // .quad -8373707460958465027 - QUAD $0x9e74d1b791e07e48 // .quad -7028762532061872568 - QUAD $0x775ea264cf55347e // .quad 8601490892183123070 - QUAD $0xc612062576589dda // .quad -4174267146649952806 - QUAD $0x95364afe032a819e // .quad -7694880458480647778 - QUAD $0xf79687aed3eec551 // .quad -606147914885053103 - QUAD $0x3a83ddbd83f52205 // .quad 4216457482181353989 - QUAD $0x9abe14cd44753b52 // .quad -7296371474444240046 - QUAD $0xc4926a9672793543 // .quad -4282243101277735613 - QUAD $0xc16d9a0095928a27 // .quad -4508778324627912153 - QUAD $0x75b7053c0f178294 // .quad 8482254178684994196 - QUAD $0xf1c90080baf72cb1 // .quad -1024286887357502287 - QUAD $0x5324c68b12dd6339 // .quad 5991131704928854841 - QUAD $0x971da05074da7bee // .quad -7557708332239520786 - QUAD $0xd3f6fc16ebca5e04 // .quad -3173071712060547580 - QUAD $0xbce5086492111aea // .quad -4835449396872013078 - QUAD $0x88f4bb1ca6bcf585 // .quad -8578025658503072379 - QUAD $0xec1e4a7db69561a5 // .quad -1432625727662628443 - QUAD $0x2b31e9e3d06c32e6 // .quad 3112525982153323238 - QUAD $0x9392ee8e921d5d07 // .quad -7812920107430224633 - QUAD $0x3aff322e62439fd0 // .quad 4251171748059520976 - QUAD $0xb877aa3236a4b449 // .quad -5154464115860392887 - QUAD $0x09befeb9fad487c3 // .quad 702278666647013315 - QUAD $0xe69594bec44de15b // .quad -1831394126398103205 - QUAD $0x4c2ebe687989a9b4 // .quad 5489534351736154548 - QUAD $0x901d7cf73ab0acd9 // .quad -8062150356639896359 - QUAD $0x0f9d37014bf60a11 // .quad 1125115960621402641 - QUAD $0xb424dc35095cd80f // .quad -5466001927372482545 - QUAD $0x538484c19ef38c95 // .quad 6018080969204141205 - QUAD $0xe12e13424bb40e13 // .quad -2220816390788215277 - QUAD $0x2865a5f206b06fba // .quad 2910915193077788602 - QUAD $0x8cbccc096f5088cb // .quad -8305539271883716405 - QUAD $0xf93f87b7442e45d4 // .quad -486521013540076076 - QUAD $0xafebff0bcb24aafe // .quad -5770238071427257602 - QUAD $0xf78f69a51539d749 // .quad -608151266925095095 - QUAD $0xdbe6fecebdedd5be // .quad -2601111570856684098 - QUAD $0xb573440e5a884d1c // .quad -5371875102083756772 - QUAD $0x89705f4136b4a597 // .quad -8543223759426509417 - QUAD $0x31680a88f8953031 // .quad 3560107088838733873 - QUAD $0xabcc77118461cefc // .quad -6067343680855748868 - QUAD $0xfdc20d2b36ba7c3e // .quad -161552157378970562 - QUAD $0xd6bf94d5e57a42bc // .quad -2972493582642298180 - QUAD $0x3d32907604691b4d // .quad 4409745821703674701 - QUAD $0x8637bd05af6c69b5 // .quad -8775337516792518219 - QUAD $0xa63f9a49c2c1b110 // .quad -6467280898289979120 - QUAD $0xa7c5ac471b478423 // .quad -6357485877563259869 - QUAD $0x0fcf80dc33721d54 // .quad 1139270913992301908 - QUAD $0xd1b71758e219652b // .quad -3335171328526686933 - QUAD $0xd3c36113404ea4a9 // .quad -3187597375937010519 - QUAD $0x83126e978d4fdf3b // .quad -9002011107970261189 - QUAD $0x645a1cac083126ea // .quad 7231123676894144234 - QUAD $0xa3d70a3d70a3d70a // .quad -6640827866535438582 - QUAD $0x3d70a3d70a3d70a4 // .quad 4427218577690292388 - QUAD $0xcccccccccccccccc // .quad -3689348814741910324 - QUAD $0xcccccccccccccccd // .quad -3689348814741910323 - QUAD $0x8000000000000000 // .quad -9223372036854775808 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xa000000000000000 // .quad -6917529027641081856 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xc800000000000000 // .quad -4035225266123964416 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xfa00000000000000 // .quad -432345564227567616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9c40000000000000 // .quad -7187745005283311616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xc350000000000000 // .quad -4372995238176751616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xf424000000000000 // .quad -854558029293551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9896800000000000 // .quad -7451627795949551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xbebc200000000000 // .quad -4702848726509551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xee6b280000000000 // .quad -1266874889709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9502f90000000000 // .quad -7709325833709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xba43b74000000000 // .quad -5024971273709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xe8d4a51000000000 // .quad -1669528073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9184e72a00000000 // .quad -7960984073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xb5e620f480000000 // .quad -5339544073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xe35fa931a0000000 // .quad -2062744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x8e1bc9bf04000000 // .quad -8206744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xb1a2bc2ec5000000 // .quad -5646744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xde0b6b3a76400000 // .quad -2446744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x8ac7230489e80000 // .quad -8446744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xad78ebc5ac620000 // .quad -5946744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xd8d726b7177a8000 // .quad -2821744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x878678326eac9000 // .quad -8681119073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xa968163f0a57b400 // .quad -6239712823709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xd3c21bcecceda100 // .quad -3187955011209551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x84595161401484a0 // .quad -8910000909647051616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xa56fa5b99019a5c8 // .quad -6525815118631426616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xcecb8f27f4200f3a // .quad -3545582879861895366 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x813f3978f8940984 // .quad -9133518327554766460 - QUAD $0x4000000000000000 // .quad 4611686018427387904 - QUAD $0xa18f07d736b90be5 // .quad -6805211891016070171 - QUAD $0x5000000000000000 // .quad 5764607523034234880 - QUAD $0xc9f2c9cd04674ede // .quad -3894828845342699810 - QUAD $0xa400000000000000 // .quad -6629298651489370112 - QUAD $0xfc6f7c4045812296 // .quad -256850038250986858 - QUAD $0x4d00000000000000 // .quad 5548434740920451072 - QUAD $0x9dc5ada82b70b59d // .quad -7078060301547948643 - QUAD $0xf020000000000000 // .quad -1143914305352105984 - QUAD $0xc5371912364ce305 // .quad -4235889358507547899 - QUAD $0x6c28000000000000 // .quad 7793479155164643328 - QUAD $0xf684df56c3e01bc6 // .quad -683175679707046970 - QUAD $0xc732000000000000 // .quad -4093209111326359552 - QUAD $0x9a130b963a6c115c // .quad -7344513827457986212 - QUAD $0x3c7f400000000000 // .quad 4359273333062107136 - QUAD $0xc097ce7bc90715b3 // .quad -4568956265895094861 - QUAD $0x4b9f100000000000 // .quad 5449091666327633920 - QUAD $0xf0bdc21abb48db20 // .quad -1099509313941480672 - QUAD $0x1e86d40000000000 // .quad 2199678564482154496 - QUAD $0x96769950b50d88f4 // .quad -7604722348854507276 - QUAD $0x1314448000000000 // .quad 1374799102801346560 - QUAD $0xbc143fa4e250eb31 // .quad -4894216917640746191 - QUAD $0x17d955a000000000 // .quad 1718498878501683200 - QUAD $0xeb194f8e1ae525fd // .quad -1506085128623544835 - QUAD $0x5dcfab0800000000 // .quad 6759809616554491904 - QUAD $0x92efd1b8d0cf37be // .quad -7858832233030797378 - QUAD $0x5aa1cae500000000 // .quad 6530724019560251392 - QUAD $0xb7abc627050305ad // .quad -5211854272861108819 - QUAD $0xf14a3d9e40000000 // .quad -1059967012404461568 - QUAD $0xe596b7b0c643c719 // .quad -1903131822648998119 - QUAD $0x6d9ccd05d0000000 // .quad 7898413271349198848 - QUAD $0x8f7e32ce7bea5c6f // .quad -8106986416796705681 - QUAD $0xe4820023a2000000 // .quad -1981020733047832576 - QUAD $0xb35dbf821ae4f38b // .quad -5522047002568494197 - QUAD $0xdda2802c8a800000 // .quad -2476275916309790720 - QUAD $0xe0352f62a19e306e // .quad -2290872734783229842 - QUAD $0xd50b2037ad200000 // .quad -3095344895387238400 - QUAD $0x8c213d9da502de45 // .quad -8349324486880600507 - QUAD $0x4526f422cc340000 // .quad 4982938468024057856 - QUAD $0xaf298d050e4395d6 // .quad -5824969590173362730 - QUAD $0x9670b12b7f410000 // .quad -7606384970252091392 - QUAD $0xdaf3f04651d47b4c // .quad -2669525969289315508 - QUAD $0x3c0cdd765f114000 // .quad 4327076842467049472 - QUAD $0x88d8762bf324cd0f // .quad -8585982758446904049 - QUAD $0xa5880a69fb6ac800 // .quad -6518949010312869888 - QUAD $0xab0e93b6efee0053 // .quad -6120792429631242157 - QUAD $0x8eea0d047a457a00 // .quad -8148686262891087360 - QUAD $0xd5d238a4abe98068 // .quad -3039304518611664792 - QUAD $0x72a4904598d6d880 // .quad 8260886245095692416 - QUAD $0x85a36366eb71f041 // .quad -8817094351773372351 - QUAD $0x47a6da2b7f864750 // .quad 5163053903184807760 - QUAD $0xa70c3c40a64e6c51 // .quad -6409681921289327535 - QUAD $0x999090b65f67d924 // .quad -7381240676301154012 - QUAD $0xd0cf4b50cfe20765 // .quad -3400416383184271515 - QUAD $0xfff4b4e3f741cf6d // .quad -3178808521666707 - QUAD $0x82818f1281ed449f // .quad -9042789267131251553 - QUAD $0xbff8f10e7a8921a5 // .quad -4613672773753429595 - QUAD $0xa321f2d7226895c7 // .quad -6691800565486676537 - QUAD $0xaff72d52192b6a0e // .quad -5767090967191786994 - QUAD $0xcbea6f8ceb02bb39 // .quad -3753064688430957767 - QUAD $0x9bf4f8a69f764491 // .quad -7208863708989733743 - QUAD $0xfee50b7025c36a08 // .quad -79644842111309304 - QUAD $0x02f236d04753d5b5 // .quad 212292400617608629 - QUAD $0x9f4f2726179a2245 // .quad -6967307053960650171 - QUAD $0x01d762422c946591 // .quad 132682750386005393 - QUAD $0xc722f0ef9d80aad6 // .quad -4097447799023424810 - QUAD $0x424d3ad2b7b97ef6 // .quad 4777539456409894646 - QUAD $0xf8ebad2b84e0d58b // .quad -510123730351893109 - QUAD $0xd2e0898765a7deb3 // .quad -3251447716342407501 - QUAD $0x9b934c3b330c8577 // .quad -7236356359111015049 - QUAD $0x63cc55f49f88eb30 // .quad 7191217214140771120 - QUAD $0xc2781f49ffcfa6d5 // .quad -4433759430461380907 - QUAD $0x3cbf6b71c76b25fc // .quad 4377335499248575996 - QUAD $0xf316271c7fc3908a // .quad -930513269649338230 - QUAD $0x8bef464e3945ef7b // .quad -8363388681221443717 - QUAD $0x97edd871cfda3a56 // .quad -7499099821171918250 - QUAD $0x97758bf0e3cbb5ad // .quad -7532960934977096275 - QUAD $0xbde94e8e43d0c8ec // .quad -4762188758037509908 - QUAD $0x3d52eeed1cbea318 // .quad 4418856886560793368 - QUAD $0xed63a231d4c4fb27 // .quad -1341049929119499481 - QUAD $0x4ca7aaa863ee4bde // .quad 5523571108200991710 - QUAD $0x945e455f24fb1cf8 // .quad -7755685233340769032 - QUAD $0x8fe8caa93e74ef6b // .quad -8076983103442849941 - QUAD $0xb975d6b6ee39e436 // .quad -5082920523248573386 - QUAD $0xb3e2fd538e122b45 // .quad -5484542860876174523 - QUAD $0xe7d34c64a9c85d44 // .quad -1741964635633328828 - QUAD $0x60dbbca87196b617 // .quad 6979379479186945559 - QUAD $0x90e40fbeea1d3a4a // .quad -8006256924911912374 - QUAD $0xbc8955e946fe31ce // .quad -4861259862362934834 - QUAD $0xb51d13aea4a488dd // .quad -5396135137712502563 - QUAD $0x6babab6398bdbe42 // .quad 7758483227328495170 - QUAD $0xe264589a4dcdab14 // .quad -2133482903713240300 - QUAD $0xc696963c7eed2dd2 // .quad -4136954021121544750 - QUAD $0x8d7eb76070a08aec // .quad -8250955842461857044 - QUAD $0xfc1e1de5cf543ca3 // .quad -279753253987271517 - QUAD $0xb0de65388cc8ada8 // .quad -5702008784649933400 - QUAD $0x3b25a55f43294bcc // .quad 4261994450943298508 - QUAD $0xdd15fe86affad912 // .quad -2515824962385028846 - QUAD $0x49ef0eb713f39ebf // .quad 5327493063679123135 - QUAD $0x8a2dbf142dfcc7ab // .quad -8489919629131724885 - QUAD $0x6e3569326c784338 // .quad 7941369183226839864 - QUAD $0xacb92ed9397bf996 // .quad -6000713517987268202 - QUAD $0x49c2c37f07965405 // .quad 5315025460606161925 - QUAD $0xd7e77a8f87daf7fb // .quad -2889205879056697349 - QUAD $0xdc33745ec97be907 // .quad -2579590211097073401 - QUAD $0x86f0ac99b4e8dafd // .quad -8723282702051517699 - QUAD $0x69a028bb3ded71a4 // .quad 7611128154919104932 - QUAD $0xa8acd7c0222311bc // .quad -6292417359137009220 - QUAD $0xc40832ea0d68ce0d // .quad -4321147861633282547 - QUAD $0xd2d80db02aabd62b // .quad -3253835680493873621 - QUAD $0xf50a3fa490c30191 // .quad -789748808614215279 - QUAD $0x83c7088e1aab65db // .quad -8951176327949752869 - QUAD $0x792667c6da79e0fb // .quad 8729779031470891259 - QUAD $0xa4b8cab1a1563f52 // .quad -6577284391509803182 - QUAD $0x577001b891185939 // .quad 6300537770911226169 - QUAD $0xcde6fd5e09abcf26 // .quad -3609919470959866074 - QUAD $0xed4c0226b55e6f87 // .quad -1347699823215743097 - QUAD $0x80b05e5ac60b6178 // .quad -9173728696990998152 - QUAD $0x544f8158315b05b5 // .quad 6075216638131242421 - QUAD $0xa0dc75f1778e39d6 // .quad -6855474852811359786 - QUAD $0x696361ae3db1c722 // .quad 7594020797664053026 - QUAD $0xc913936dd571c84c // .quad -3957657547586811828 - QUAD $0x03bc3a19cd1e38ea // .quad 269153960225290474 - QUAD $0xfb5878494ace3a5f // .quad -335385916056126881 - QUAD $0x04ab48a04065c724 // .quad 336442450281613092 - QUAD $0x9d174b2dcec0e47b // .quad -7127145225176161157 - QUAD $0x62eb0d64283f9c77 // .quad 7127805559067090039 - QUAD $0xc45d1df942711d9a // .quad -4297245513042813542 - QUAD $0x3ba5d0bd324f8395 // .quad 4298070930406474645 - QUAD $0xf5746577930d6500 // .quad -759870872876129024 - QUAD $0xca8f44ec7ee3647a // .quad -3850783373846682502 - QUAD $0x9968bf6abbe85f20 // .quad -7392448323188662496 - QUAD $0x7e998b13cf4e1ecc // .quad 9122475437414293196 - QUAD $0xbfc2ef456ae276e8 // .quad -4628874385558440216 - QUAD $0x9e3fedd8c321a67f // .quad -7043649776941685121 - QUAD $0xefb3ab16c59b14a2 // .quad -1174406963520662366 - QUAD $0xc5cfe94ef3ea101f // .quad -4192876202749718497 - QUAD $0x95d04aee3b80ece5 // .quad -7651533379841495835 - QUAD $0xbba1f1d158724a13 // .quad -4926390635932268013 - QUAD $0xbb445da9ca61281f // .quad -4952730706374481889 - QUAD $0x2a8a6e45ae8edc98 // .quad 3065383741939440792 - QUAD $0xea1575143cf97226 // .quad -1579227364540714458 - QUAD $0xf52d09d71a3293be // .quad -779956341003086914 - QUAD $0x924d692ca61be758 // .quad -7904546130479028392 - QUAD $0x593c2626705f9c57 // .quad 6430056314514152535 - QUAD $0xb6e0c377cfa2e12e // .quad -5268996644671397586 - QUAD $0x6f8b2fb00c77836d // .quad 8037570393142690669 - QUAD $0xe498f455c38b997a // .quad -1974559787411859078 - QUAD $0x0b6dfb9c0f956448 // .quad 823590954573587528 - QUAD $0x8edf98b59a373fec // .quad -8151628894773493780 - QUAD $0x4724bd4189bd5ead // .quad 5126430365035880109 - QUAD $0xb2977ee300c50fe7 // .quad -5577850100039479321 - QUAD $0x58edec91ec2cb658 // .quad 6408037956294850136 - QUAD $0xdf3d5e9bc0f653e1 // .quad -2360626606621961247 - QUAD $0x2f2967b66737e3ee // .quad 3398361426941174766 - QUAD $0x8b865b215899f46c // .quad -8392920656779807636 - QUAD $0xbd79e0d20082ee75 // .quad -4793553135802847627 - QUAD $0xae67f1e9aec07187 // .quad -5879464802547371641 - QUAD $0xecd8590680a3aa12 // .quad -1380255401326171630 - QUAD $0xda01ee641a708de9 // .quad -2737644984756826647 - QUAD $0xe80e6f4820cc9496 // .quad -1725319251657714538 - QUAD $0x884134fe908658b2 // .quad -8628557143114098510 - QUAD $0x3109058d147fdcde // .quad 3533361486141316318 - QUAD $0xaa51823e34a7eede // .quad -6174010410465235234 - QUAD $0xbd4b46f0599fd416 // .quad -4806670179178130410 - QUAD $0xd4e5e2cdc1d1ea96 // .quad -3105826994654156138 - QUAD $0x6c9e18ac7007c91b // .quad 7826720331309500699 - QUAD $0x850fadc09923329e // .quad -8858670899299929442 - QUAD $0x03e2cf6bc604ddb1 // .quad 280014188641050033 - QUAD $0xa6539930bf6bff45 // .quad -6461652605697523899 - QUAD $0x84db8346b786151d // .quad -8873354301053463267 - QUAD $0xcfe87f7cef46ff16 // .quad -3465379738694516970 - QUAD $0xe612641865679a64 // .quad -1868320839462053276 - QUAD $0x81f14fae158c5f6e // .quad -9083391364325154962 - QUAD $0x4fcb7e8f3f60c07f // .quad 5749828502977298559 - QUAD $0xa26da3999aef7749 // .quad -6742553186979055799 - QUAD $0xe3be5e330f38f09e // .quad -2036086408133152610 - QUAD $0xcb090c8001ab551c // .quad -3816505465296431844 - QUAD $0x5cadf5bfd3072cc6 // .quad 6678264026688335046 - QUAD $0xfdcb4fa002162a63 // .quad -158945813193151901 - QUAD $0x73d9732fc7c8f7f7 // .quad 8347830033360418807 - QUAD $0x9e9f11c4014dda7e // .quad -7016870160886801794 - QUAD $0x2867e7fddcdd9afb // .quad 2911550761636567803 - QUAD $0xc646d63501a1511d // .quad -4159401682681114339 - QUAD $0xb281e1fd541501b9 // .quad -5583933584809066055 - QUAD $0xf7d88bc24209a565 // .quad -587566084924005019 - QUAD $0x1f225a7ca91a4227 // .quad 2243455055843443239 - QUAD $0x9ae757596946075f // .quad -7284757830718584993 - QUAD $0x3375788de9b06959 // .quad 3708002419115845977 - QUAD $0xc1a12d2fc3978937 // .quad -4494261269970843337 - QUAD $0x0052d6b1641c83af // .quad 23317005467419567 - QUAD $0xf209787bb47d6b84 // .quad -1006140569036166268 - QUAD $0xc0678c5dbd23a49b // .quad -4582539761593113445 - QUAD $0x9745eb4d50ce6332 // .quad -7546366883288685774 - QUAD $0xf840b7ba963646e1 // .quad -558244341782001951 - QUAD $0xbd176620a501fbff // .quad -4821272585683469313 - QUAD $0xb650e5a93bc3d899 // .quad -5309491445654890343 - QUAD $0xec5d3fa8ce427aff // .quad -1414904713676948737 - QUAD $0xa3e51f138ab4cebf // .quad -6636864307068612929 - QUAD $0x93ba47c980e98cdf // .quad -7801844473689174817 - QUAD $0xc66f336c36b10138 // .quad -4148040191917883080 - QUAD $0xb8a8d9bbe123f017 // .quad -5140619573684080617 - QUAD $0xb80b0047445d4185 // .quad -5185050239897353851 - QUAD $0xe6d3102ad96cec1d // .quad -1814088448677712867 - QUAD $0xa60dc059157491e6 // .quad -6481312799871692314 - QUAD $0x9043ea1ac7e41392 // .quad -8051334308064652398 - QUAD $0x87c89837ad68db30 // .quad -8662506518347195600 - QUAD $0xb454e4a179dd1877 // .quad -5452481866653427593 - QUAD $0x29babe4598c311fc // .quad 3006924907348169212 - QUAD $0xe16a1dc9d8545e94 // .quad -2203916314889396588 - QUAD $0xf4296dd6fef3d67b // .quad -853029884242176389 - QUAD $0x8ce2529e2734bb1d // .quad -8294976724446954723 - QUAD $0x1899e4a65f58660d // .quad 1772699331562333709 - QUAD $0xb01ae745b101e9e4 // .quad -5757034887131305500 - QUAD $0x5ec05dcff72e7f90 // .quad 6827560182880305040 - QUAD $0xdc21a1171d42645d // .quad -2584607590486743971 - QUAD $0x76707543f4fa1f74 // .quad 8534450228600381300 - QUAD $0x899504ae72497eba // .quad -8532908771695296838 - QUAD $0x6a06494a791c53a9 // .quad 7639874402088932265 - QUAD $0xabfa45da0edbde69 // .quad -6054449946191733143 - QUAD $0x0487db9d17636893 // .quad 326470965756389523 - QUAD $0xd6f8d7509292d603 // .quad -2956376414312278525 - QUAD $0x45a9d2845d3c42b7 // .quad 5019774725622874807 - QUAD $0x865b86925b9bc5c2 // .quad -8765264286586255934 - QUAD $0x0b8a2392ba45a9b3 // .quad 831516194300602803 - QUAD $0xa7f26836f282b732 // .quad -6344894339805432014 - QUAD $0x8e6cac7768d7141f // .quad -8183976793979022305 - QUAD $0xd1ef0244af2364ff // .quad -3319431906329402113 - QUAD $0x3207d795430cd927 // .quad 3605087062808385831 - QUAD $0x8335616aed761f1f // .quad -8992173969096958177 - QUAD $0x7f44e6bd49e807b9 // .quad 9170708441896323001 - QUAD $0xa402b9c5a8d3a6e7 // .quad -6628531442943809817 - QUAD $0x5f16206c9c6209a7 // .quad 6851699533943015847 - QUAD $0xcd036837130890a1 // .quad -3673978285252374367 - QUAD $0x36dba887c37a8c10 // .quad 3952938399001381904 - QUAD $0x802221226be55a64 // .quad -9213765455923815836 - QUAD $0xc2494954da2c978a // .quad -4446942528265218166 - QUAD $0xa02aa96b06deb0fd // .quad -6905520801477381891 - QUAD $0xf2db9baa10b7bd6d // .quad -946992141904134803 - QUAD $0xc83553c5c8965d3d // .quad -4020214983419339459 - QUAD $0x6f92829494e5acc8 // .quad 8039631859474607304 - QUAD $0xfa42a8b73abbf48c // .quad -413582710846786420 - QUAD $0xcb772339ba1f17fa // .quad -3785518230938904582 - QUAD $0x9c69a97284b578d7 // .quad -7176018221920323369 - QUAD $0xff2a760414536efc // .quad -60105885123121412 - QUAD $0xc38413cf25e2d70d // .quad -4358336758973016307 - QUAD $0xfef5138519684abb // .quad -75132356403901765 - QUAD $0xf46518c2ef5b8cd1 // .quad -836234930288882479 - QUAD $0x7eb258665fc25d6a // .quad 9129456591349898602 - QUAD $0x98bf2f79d5993802 // .quad -7440175859071633406 - QUAD $0xef2f773ffbd97a62 // .quad -1211618658047395230 - QUAD $0xbeeefb584aff8603 // .quad -4688533805412153853 - QUAD $0xaafb550ffacfd8fb // .quad -6126209340986631941 - QUAD $0xeeaaba2e5dbf6784 // .quad -1248981238337804412 - QUAD $0x95ba2a53f983cf39 // .quad -7657761676233289927 - QUAD $0x952ab45cfa97a0b2 // .quad -7698142301602209614 - QUAD $0xdd945a747bf26184 // .quad -2480258038432112252 - QUAD $0xba756174393d88df // .quad -5010991858575374113 - QUAD $0x94f971119aeef9e5 // .quad -7712008566467528219 - QUAD $0xe912b9d1478ceb17 // .quad -1652053804791829737 - QUAD $0x7a37cd5601aab85e // .quad 8806733365625141342 - QUAD $0x91abb422ccb812ee // .quad -7950062655635975442 - QUAD $0xac62e055c10ab33b // .quad -6025006692552756421 - QUAD $0xb616a12b7fe617aa // .quad -5325892301117581398 - QUAD $0x577b986b314d600a // .quad 6303799689591218186 - QUAD $0xe39c49765fdf9d94 // .quad -2045679357969588844 - QUAD $0xed5a7e85fda0b80c // .quad -1343622424865753076 - QUAD $0x8e41ade9fbebc27d // .quad -8196078626372074883 - QUAD $0x14588f13be847308 // .quad 1466078993672598280 - QUAD $0xb1d219647ae6b31c // .quad -5633412264537705700 - QUAD $0x596eb2d8ae258fc9 // .quad 6444284760518135753 - QUAD $0xde469fbd99a05fe3 // .quad -2430079312244744221 - QUAD $0x6fca5f8ed9aef3bc // .quad 8055355950647669692 - QUAD $0x8aec23d680043bee // .quad -8436328597794046994 - QUAD $0x25de7bb9480d5855 // .quad 2728754459941099605 - QUAD $0xada72ccc20054ae9 // .quad -5933724728815170839 - QUAD $0xaf561aa79a10ae6b // .quad -5812428961928401301 - QUAD $0xd910f7ff28069da4 // .quad -2805469892591575644 - QUAD $0x1b2ba1518094da05 // .quad 1957835834444274181 - QUAD $0x87aa9aff79042286 // .quad -8670947710510816634 - QUAD $0x90fb44d2f05d0843 // .quad -7999724640327104445 - QUAD $0xa99541bf57452b28 // .quad -6226998619711132888 - QUAD $0x353a1607ac744a54 // .quad 3835402254873283156 - QUAD $0xd3fa922f2d1675f2 // .quad -3172062256211528206 - QUAD $0x42889b8997915ce9 // .quad 4794252818591603945 - QUAD $0x847c9b5d7c2e09b7 // .quad -8900067937773286985 - QUAD $0x69956135febada12 // .quad 7608094030047140370 - QUAD $0xa59bc234db398c25 // .quad -6513398903789220827 - QUAD $0x43fab9837e699096 // .quad 4898431519131537558 - QUAD $0xcf02b2c21207ef2e // .quad -3530062611309138130 - QUAD $0x94f967e45e03f4bc // .quad -7712018656367741764 - QUAD $0x8161afb94b44f57d // .quad -9123818159709293187 - QUAD $0x1d1be0eebac278f6 // .quad 2097517367411243254 - QUAD $0xa1ba1ba79e1632dc // .quad -6793086681209228580 - QUAD $0x6462d92a69731733 // .quad 7233582727691441971 - QUAD $0xca28a291859bbf93 // .quad -3879672333084147821 - QUAD $0x7d7b8f7503cfdcff // .quad 9041978409614302463 - QUAD $0xfcb2cb35e702af78 // .quad -237904397927796872 - QUAD $0x5cda735244c3d43f // .quad 6690786993590490175 - QUAD $0x9defbf01b061adab // .quad -7066219276345954901 - QUAD $0x3a0888136afa64a8 // .quad 4181741870994056360 - QUAD $0xc56baec21c7a1916 // .quad -4221088077005055722 - QUAD $0x088aaa1845b8fdd1 // .quad 615491320315182545 - QUAD $0xf6c69a72a3989f5b // .quad -664674077828931749 - QUAD $0x8aad549e57273d46 // .quad -8454007886460797626 - QUAD $0x9a3c2087a63f6399 // .quad -7332950326284164199 - QUAD $0x36ac54e2f678864c // .quad 3939617107816777292 - QUAD $0xc0cb28a98fcf3c7f // .quad -4554501889427817345 - QUAD $0x84576a1bb416a7de // .quad -8910536670511192098 - QUAD $0xf0fdf2d3f3c30b9f // .quad -1081441343357383777 - QUAD $0x656d44a2a11c51d6 // .quad 7308573235570561494 - QUAD $0x969eb7c47859e743 // .quad -7593429867239446717 - QUAD $0x9f644ae5a4b1b326 // .quad -6961356773836868826 - QUAD $0xbc4665b596706114 // .quad -4880101315621920492 - QUAD $0x873d5d9f0dde1fef // .quad -8701695967296086033 - QUAD $0xeb57ff22fc0c7959 // .quad -1488440626100012711 - QUAD $0xa90cb506d155a7eb // .quad -6265433940692719637 - QUAD $0x9316ff75dd87cbd8 // .quad -7847804418953589800 - QUAD $0x09a7f12442d588f3 // .quad 695789805494438131 - QUAD $0xb7dcbf5354e9bece // .quad -5198069505264599346 - QUAD $0x0c11ed6d538aeb30 // .quad 869737256868047664 - QUAD $0xe5d3ef282a242e81 // .quad -1885900863153361279 - QUAD $0x8f1668c8a86da5fb // .quad -8136200465769716229 - QUAD $0x8fa475791a569d10 // .quad -8096217067111932656 - QUAD $0xf96e017d694487bd // .quad -473439272678684739 - QUAD $0xb38d92d760ec4455 // .quad -5508585315462527915 - QUAD $0x37c981dcc395a9ad // .quad 4019886927579031981 - QUAD $0xe070f78d3927556a // .quad -2274045625900771990 - QUAD $0x85bbe253f47b1418 // .quad -8810199395808373736 - QUAD $0x8c469ab843b89562 // .quad -8338807543829064350 - QUAD $0x93956d7478ccec8f // .quad -7812217631593927537 - QUAD $0xaf58416654a6babb // .quad -5811823411358942533 - QUAD $0x387ac8d1970027b3 // .quad 4069786015789754291 - QUAD $0xdb2e51bfe9d0696a // .quad -2653093245771290262 - QUAD $0x06997b05fcc0319f // .quad 475546501309804959 - QUAD $0x88fcf317f22241e2 // .quad -8575712306248138270 - QUAD $0x441fece3bdf81f04 // .quad 4908902581746016004 - QUAD $0xab3c2fddeeaad25a // .quad -6107954364382784934 - QUAD $0xd527e81cad7626c4 // .quad -3087243809672255804 - QUAD $0xd60b3bd56a5586f1 // .quad -3023256937051093263 - QUAD $0x8a71e223d8d3b075 // .quad -8470740780517707659 - QUAD $0x85c7056562757456 // .quad -8807064613298015146 - QUAD $0xf6872d5667844e4a // .quad -682526969396179382 - QUAD $0xa738c6bebb12d16c // .quad -6397144748195131028 - QUAD $0xb428f8ac016561dc // .quad -5464844730172612132 - QUAD $0xd106f86e69d785c7 // .quad -3384744916816525881 - QUAD $0xe13336d701beba53 // .quad -2219369894288377261 - QUAD $0x82a45b450226b39c // .quad -9032994600651410532 - QUAD $0xecc0024661173474 // .quad -1387106183930235788 - QUAD $0xa34d721642b06084 // .quad -6679557232386875260 - QUAD $0x27f002d7f95d0191 // .quad 2877803288514593169 - QUAD $0xcc20ce9bd35c78a5 // .quad -3737760522056206171 - QUAD $0x31ec038df7b441f5 // .quad 3597254110643241461 - QUAD $0xff290242c83396ce // .quad -60514634142869810 - QUAD $0x7e67047175a15272 // .quad 9108253656731439730 - QUAD $0x9f79a169bd203e41 // .quad -6955350673980375487 - QUAD $0x0f0062c6e984d387 // .quad 1080972517029761927 - QUAD $0xc75809c42c684dd1 // .quad -4082502324048081455 - QUAD $0x52c07b78a3e60869 // .quad 5962901664714590313 - QUAD $0xf92e0c3537826145 // .quad -491441886632713915 - QUAD $0xa7709a56ccdf8a83 // .quad -6381430974388925821 - QUAD $0x9bbcc7a142b17ccb // .quad -7224680206786528053 - QUAD $0x88a66076400bb692 // .quad -8600080377420466542 - QUAD $0xc2abf989935ddbfe // .quad -4419164240055772162 - QUAD $0x6acff893d00ea436 // .quad 7696643601933968438 - QUAD $0xf356f7ebf83552fe // .quad -912269281642327298 - QUAD $0x0583f6b8c4124d44 // .quad 397432465562684740 - QUAD $0x98165af37b2153de // .quad -7487697328667536418 - QUAD $0xc3727a337a8b704b // .quad -4363290727450709941 - QUAD $0xbe1bf1b059e9a8d6 // .quad -4747935642407032618 - QUAD $0x744f18c0592e4c5d // .quad 8380944645968776285 - QUAD $0xeda2ee1c7064130c // .quad -1323233534581402868 - QUAD $0x1162def06f79df74 // .quad 1252808770606194548 - QUAD $0x9485d4d1c63e8be7 // .quad -7744549986754458649 - QUAD $0x8addcb5645ac2ba9 // .quad -8440366555225904215 - QUAD $0xb9a74a0637ce2ee1 // .quad -5069001465015685407 - QUAD $0x6d953e2bd7173693 // .quad 7896285879677171347 - QUAD $0xe8111c87c5c1ba99 // .quad -1724565812842218855 - QUAD $0xc8fa8db6ccdd0438 // .quad -3964700705685699528 - QUAD $0x910ab1d4db9914a0 // .quad -7995382660667468640 - QUAD $0x1d9c9892400a22a3 // .quad 2133748077373825699 - QUAD $0xb54d5e4a127f59c8 // .quad -5382542307406947896 - QUAD $0x2503beb6d00cab4c // .quad 2667185096717282124 - QUAD $0xe2a0b5dc971f303a // .quad -2116491865831296966 - QUAD $0x2e44ae64840fd61e // .quad 3333981370896602654 - QUAD $0x8da471a9de737e24 // .quad -8240336443785642460 - QUAD $0x5ceaecfed289e5d3 // .quad 6695424375237764563 - QUAD $0xb10d8e1456105dad // .quad -5688734536304665171 - QUAD $0x7425a83e872c5f48 // .quad 8369280469047205704 - QUAD $0xdd50f1996b947518 // .quad -2499232151953443560 - QUAD $0xd12f124e28f7771a // .quad -3373457468973156582 - QUAD $0x8a5296ffe33cc92f // .quad -8479549122611984081 - QUAD $0x82bd6b70d99aaa70 // .quad -9025939945749304720 - QUAD $0xace73cbfdc0bfb7b // .quad -5987750384837592197 - QUAD $0x636cc64d1001550c // .quad 7164319141522920716 - QUAD $0xd8210befd30efa5a // .quad -2873001962619602342 - QUAD $0x3c47f7e05401aa4f // .quad 4343712908476262991 - QUAD $0x8714a775e3e95c78 // .quad -8713155254278333320 - QUAD $0x65acfaec34810a72 // .quad 7326506586225052274 - QUAD $0xa8d9d1535ce3b396 // .quad -6279758049420528746 - QUAD $0x7f1839a741a14d0e // .quad 9158133232781315342 - QUAD $0xd31045a8341ca07c // .quad -3238011543348273028 - QUAD $0x1ede48111209a051 // .quad 2224294504121868369 - QUAD $0x83ea2b892091e44d // .quad -8941286242233752499 - QUAD $0x934aed0aab460433 // .quad -7833187971778608077 - QUAD $0xa4e4b66b68b65d60 // .quad -6564921784364802720 - QUAD $0xf81da84d56178540 // .quad -568112927868484288 - QUAD $0xce1de40642e3f4b9 // .quad -3594466212028615495 - QUAD $0x36251260ab9d668f // .quad 3901544858591782543 - QUAD $0x80d2ae83e9ce78f3 // .quad -9164070410158966541 - QUAD $0xc1d72b7c6b42601a // .quad -4479063491021217766 - QUAD $0xa1075a24e4421730 // .quad -6843401994271320272 - QUAD $0xb24cf65b8612f820 // .quad -5598829363776522208 - QUAD $0xc94930ae1d529cfc // .quad -3942566474411762436 - QUAD $0xdee033f26797b628 // .quad -2386850686293264856 - QUAD $0xfb9b7cd9a4a7443c // .quad -316522074587315140 - QUAD $0x169840ef017da3b2 // .quad 1628122660560806834 - QUAD $0x9d412e0806e88aa5 // .quad -7115355324258153819 - QUAD $0x8e1f289560ee864f // .quad -8205795374004271537 - QUAD $0xc491798a08a2ad4e // .quad -4282508136895304370 - QUAD $0xf1a6f2bab92a27e3 // .quad -1033872180650563613 - QUAD $0xf5b5d7ec8acb58a2 // .quad -741449152691742558 - QUAD $0xae10af696774b1dc // .quad -5904026244240592420 - QUAD $0x9991a6f3d6bf1765 // .quad -7380934748073420955 - QUAD $0xacca6da1e0a8ef2a // .quad -5995859411864064214 - QUAD $0xbff610b0cc6edd3f // .quad -4614482416664388289 - QUAD $0x17fd090a58d32af4 // .quad 1728547772024695540 - QUAD $0xeff394dcff8a948e // .quad -1156417002403097458 - QUAD $0xddfc4b4cef07f5b1 // .quad -2451001303396518479 - QUAD $0x95f83d0a1fb69cd9 // .quad -7640289654143017767 - QUAD $0x4abdaf101564f98f // .quad 5385653213018257807 - QUAD $0xbb764c4ca7a4440f // .quad -4938676049251384305 - QUAD $0x9d6d1ad41abe37f2 // .quad -7102991539009341454 - QUAD $0xea53df5fd18d5513 // .quad -1561659043136842477 - QUAD $0x84c86189216dc5ee // .quad -8878739423761676818 - QUAD $0x92746b9be2f8552c // .quad -7893565929601608404 - QUAD $0x32fd3cf5b4e49bb5 // .quad 3674159897003727797 - QUAD $0xb7118682dbb66a77 // .quad -5255271393574622601 - QUAD $0x3fbc8c33221dc2a2 // .quad 4592699871254659746 - QUAD $0xe4d5e82392a40515 // .quad -1957403223540890347 - QUAD $0x0fabaf3feaa5334b // .quad 1129188820640936779 - QUAD $0x8f05b1163ba6832d // .quad -8140906042354138323 - QUAD $0x29cb4d87f2a7400f // .quad 3011586022114279439 - QUAD $0xb2c71d5bca9023f8 // .quad -5564446534515285000 - QUAD $0x743e20e9ef511013 // .quad 8376168546070237203 - QUAD $0xdf78e4b2bd342cf6 // .quad -2343872149716718346 - QUAD $0x914da9246b255417 // .quad -7976533391121755113 - QUAD $0x8bab8eefb6409c1a // .quad -8382449121214030822 - QUAD $0x1ad089b6c2f7548f // .quad 1932195658189984911 - QUAD $0xae9672aba3d0c320 // .quad -5866375383090150624 - QUAD $0xa184ac2473b529b2 // .quad -6808127464117294670 - QUAD $0xda3c0f568cc4f3e8 // .quad -2721283210435300376 - QUAD $0xc9e5d72d90a2741f // .quad -3898473311719230433 - QUAD $0x8865899617fb1871 // .quad -8618331034163144591 - QUAD $0x7e2fa67c7a658893 // .quad 9092669226243950739 - QUAD $0xaa7eebfb9df9de8d // .quad -6161227774276542835 - QUAD $0xddbb901b98feeab8 // .quad -2469221522477225288 - QUAD $0xd51ea6fa85785631 // .quad -3089848699418290639 - QUAD $0x552a74227f3ea566 // .quad 6136845133758244198 - QUAD $0x8533285c936b35de // .quad -8848684464777513506 - QUAD $0xd53a88958f872760 // .quad -3082000819042179232 - QUAD $0xa67ff273b8460356 // .quad -6449169562544503978 - QUAD $0x8a892abaf368f138 // .quad -8464187042230111944 - QUAD $0xd01fef10a657842c // .quad -3449775934753242068 - QUAD $0x2d2b7569b0432d86 // .quad 3254824252494523782 - QUAD $0x8213f56a67f6b29b // .quad -9073638986861858149 - QUAD $0x9c3b29620e29fc74 // .quad -7189106879045698444 - QUAD $0xa298f2c501f45f42 // .quad -6730362715149934782 - QUAD $0x8349f3ba91b47b90 // .quad -8986383598807123056 - QUAD $0xcb3f2f7642717713 // .quad -3801267375510030573 - QUAD $0x241c70a936219a74 // .quad 2602078556773259892 - QUAD $0xfe0efb53d30dd4d7 // .quad -139898200960150313 - QUAD $0xed238cd383aa0111 // .quad -1359087822460813039 - QUAD $0x9ec95d1463e8a506 // .quad -7004965403241175802 - QUAD $0xf4363804324a40ab // .quad -849429889038008149 - QUAD $0xc67bb4597ce2ce48 // .quad -4144520735624081848 - QUAD $0xb143c6053edcd0d6 // .quad -5673473379724898090 - QUAD $0xf81aa16fdc1b81da // .quad -568964901102714406 - QUAD $0xdd94b7868e94050b // .quad -2480155706228734709 - QUAD $0x9b10a4e5e9913128 // .quad -7273132090830278360 - QUAD $0xca7cf2b4191c8327 // .quad -3855940325606653145 - QUAD $0xc1d4ce1f63f57d72 // .quad -4479729095110460046 - QUAD $0xfd1c2f611f63a3f1 // .quad -208239388580928527 - QUAD $0xf24a01a73cf2dccf // .quad -987975350460687153 - QUAD $0xbc633b39673c8ced // .quad -4871985254153548563 - QUAD $0x976e41088617ca01 // .quad -7535013621679011327 - QUAD $0xd5be0503e085d814 // .quad -3044990783845967852 - QUAD $0xbd49d14aa79dbc82 // .quad -4807081008671376254 - QUAD $0x4b2d8644d8a74e19 // .quad 5417133557047315993 - QUAD $0xec9c459d51852ba2 // .quad -1397165242411832414 - QUAD $0xddf8e7d60ed1219f // .quad -2451955090545630817 - QUAD $0x93e1ab8252f33b45 // .quad -7790757304148477115 - QUAD $0xcabb90e5c942b504 // .quad -3838314940804713212 - QUAD $0xb8da1662e7b00a17 // .quad -5126760611758208489 - QUAD $0x3d6a751f3b936244 // .quad 4425478360848884292 - QUAD $0xe7109bfba19c0c9d // .quad -1796764746270372707 - QUAD $0x0cc512670a783ad5 // .quad 920161932633717461 - QUAD $0x906a617d450187e2 // .quad -8040506994060064798 - QUAD $0x27fb2b80668b24c6 // .quad 2880944217109767366 - QUAD $0xb484f9dc9641e9da // .quad -5438947724147693094 - QUAD $0xb1f9f660802dedf7 // .quad -5622191765467566601 - QUAD $0xe1a63853bbd26451 // .quad -2186998636757228463 - QUAD $0x5e7873f8a0396974 // .quad 6807318348447705460 - QUAD $0x8d07e33455637eb2 // .quad -8284403175614349646 - QUAD $0xdb0b487b6423e1e9 // .quad -2662955059861265943 - QUAD $0xb049dc016abc5e5f // .quad -5743817951090549153 - QUAD $0x91ce1a9a3d2cda63 // .quad -7940379843253970333 - QUAD $0xdc5c5301c56b75f7 // .quad -2568086420435798537 - QUAD $0x7641a140cc7810fc // .quad 8521269269642088700 - QUAD $0x89b9b3e11b6329ba // .quad -8522583040413455942 - QUAD $0xa9e904c87fcb0a9e // .quad -6203421752542164322 - QUAD $0xac2820d9623bf429 // .quad -6041542782089432023 - QUAD $0x546345fa9fbdcd45 // .quad 6080780864604458309 - QUAD $0xd732290fbacaf133 // .quad -2940242459184402125 - QUAD $0xa97c177947ad4096 // .quad -6234081974526590826 - QUAD $0x867f59a9d4bed6c0 // .quad -8755180564631333184 - QUAD $0x49ed8eabcccc485e // .quad 5327070802775656542 - QUAD $0xa81f301449ee8c70 // .quad -6332289687361778576 - QUAD $0x5c68f256bfff5a75 // .quad 6658838503469570677 - QUAD $0xd226fc195c6a2f8c // .quad -3303676090774835316 - QUAD $0x73832eec6fff3112 // .quad 8323548129336963346 - QUAD $0x83585d8fd9c25db7 // .quad -8982326584375353929 - QUAD $0xc831fd53c5ff7eac // .quad -4021154456019173716 - QUAD $0xa42e74f3d032f525 // .quad -6616222212041804507 - QUAD $0xba3e7ca8b77f5e56 // .quad -5026443070023967146 - QUAD $0xcd3a1230c43fb26f // .quad -3658591746624867729 - QUAD $0x28ce1bd2e55f35ec // .quad 2940318199324816876 - QUAD $0x80444b5e7aa7cf85 // .quad -9204148869281624187 - QUAD $0x7980d163cf5b81b4 // .quad 8755227902219092404 - QUAD $0xa0555e361951c366 // .quad -6893500068174642330 - QUAD $0xd7e105bcc3326220 // .quad -2891023177508298208 - QUAD $0xc86ab5c39fa63440 // .quad -4005189066790915008 - QUAD $0x8dd9472bf3fefaa8 // .quad -8225464990312760664 - QUAD $0xfa856334878fc150 // .quad -394800315061255856 - QUAD $0xb14f98f6f0feb952 // .quad -5670145219463562926 - QUAD $0x9c935e00d4b9d8d2 // .quad -7164279224554366766 - QUAD $0x6ed1bf9a569f33d4 // .quad 7985374283903742932 - QUAD $0xc3b8358109e84f07 // .quad -4343663012265570553 - QUAD $0x0a862f80ec4700c9 // .quad 758345818024902857 - QUAD $0xf4a642e14c6262c8 // .quad -817892746904575288 - QUAD $0xcd27bb612758c0fb // .quad -3663753745896259333 - QUAD $0x98e7e9cccfbd7dbd // .quad -7428711994456441411 - QUAD $0x8038d51cb897789d // .quad -9207375118826243939 - QUAD $0xbf21e44003acdd2c // .quad -4674203974643163860 - QUAD $0xe0470a63e6bd56c4 // .quad -2285846861678029116 - QUAD $0xeeea5d5004981478 // .quad -1231068949876566920 - QUAD $0x1858ccfce06cac75 // .quad 1754377441329851509 - QUAD $0x95527a5202df0ccb // .quad -7686947121313936181 - QUAD $0x0f37801e0c43ebc9 // .quad 1096485900831157193 - QUAD $0xbaa718e68396cffd // .quad -4996997883215032323 - QUAD $0xd30560258f54e6bb // .quad -3241078642388441413 - QUAD $0xe950df20247c83fd // .quad -1634561335591402499 - QUAD $0x47c6b82ef32a206a // .quad 5172023733869224042 - QUAD $0x91d28b7416cdd27e // .quad -7939129862385708418 - QUAD $0x4cdc331d57fa5442 // .quad 5538357842881958978 - QUAD $0xb6472e511c81471d // .quad -5312226309554747619 - QUAD $0xe0133fe4adf8e953 // .quad -2300424733252327085 - QUAD $0xe3d8f9e563a198e5 // .quad -2028596868516046619 - QUAD $0x58180fddd97723a7 // .quad 6347841120289366951 - QUAD $0x8e679c2f5e44ff8f // .quad -8185402070463610993 - QUAD $0x570f09eaa7ea7649 // .quad 6273243709394548297 - QUAD $0xb201833b35d63f73 // .quad -5620066569652125837 - QUAD $0x2cd2cc6551e513db // .quad 3229868618315797467 - QUAD $0xde81e40a034bcf4f // .quad -2413397193637769393 - QUAD $0xf8077f7ea65e58d2 // .quad -574350245532641070 - QUAD $0x8b112e86420f6191 // .quad -8425902273664687727 - QUAD $0xfb04afaf27faf783 // .quad -358968903457900669 - QUAD $0xadd57a27d29339f6 // .quad -5920691823653471754 - QUAD $0x79c5db9af1f9b564 // .quad 8774660907532399972 - QUAD $0xd94ad8b1c7380874 // .quad -2789178761139451788 - QUAD $0x18375281ae7822bd // .quad 1744954097560724157 - QUAD $0x87cec76f1c830548 // .quad -8660765753353239224 - QUAD $0x8f2293910d0b15b6 // .quad -8132775725879323210 - QUAD $0xa9c2794ae3a3c69a // .quad -6214271173264161126 - QUAD $0xb2eb3875504ddb23 // .quad -5554283638921766109 - QUAD $0xd433179d9c8cb841 // .quad -3156152948152813503 - QUAD $0x5fa60692a46151ec // .quad 6892203506629956076 - QUAD $0x849feec281d7f328 // .quad -8890124620236590296 - QUAD $0xdbc7c41ba6bcd334 // .quad -2609901835997359308 - QUAD $0xa5c7ea73224deff3 // .quad -6500969756868349965 - QUAD $0x12b9b522906c0801 // .quad 1349308723430688769 - QUAD $0xcf39e50feae16bef // .quad -3514526177658049553 - QUAD $0xd768226b34870a01 // .quad -2925050114139026943 - QUAD $0x81842f29f2cce375 // .quad -9114107888677362827 - QUAD $0xe6a1158300d46641 // .quad -1828156321336891839 - QUAD $0xa1e53af46f801c53 // .quad -6780948842419315629 - QUAD $0x60495ae3c1097fd1 // .quad 6938176635183661009 - QUAD $0xca5e89b18b602368 // .quad -3864500034596756632 - QUAD $0x385bb19cb14bdfc5 // .quad 4061034775552188357 - QUAD $0xfcf62c1dee382c42 // .quad -218939024818557886 - QUAD $0x46729e03dd9ed7b6 // .quad 5076293469440235446 - QUAD $0x9e19db92b4e31ba9 // .quad -7054365918152680535 - QUAD $0x6c07a2c26a8346d2 // .quad 7784369436827535058 - - // .p2align 4, 0x00 -_VecShiftShuffles: - QUAD $0x0706050403020100; QUAD $0x0f0e0d0c0b0a0908 // .ascii 16, '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' - QUAD $0x0807060504030201; QUAD $0xff0f0e0d0c0b0a09 // .ascii 16, '\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff' - QUAD $0x0908070605040302; QUAD $0xffff0f0e0d0c0b0a // .ascii 16, '\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff' - QUAD $0x0a09080706050403; QUAD $0xffffff0f0e0d0c0b // .ascii 16, '\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff' - QUAD $0x0b0a090807060504; QUAD $0xffffffff0f0e0d0c // .ascii 16, '\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff' - QUAD $0x0c0b0a0908070605; QUAD $0xffffffffff0f0e0d // .ascii 16, '\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff' - QUAD $0x0d0c0b0a09080706; QUAD $0xffffffffffff0f0e // .ascii 16, '\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff' - QUAD $0x0e0d0c0b0a090807; QUAD $0xffffffffffffff0f // .ascii 16, '\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff' - QUAD $0x0f0e0d0c0b0a0908; QUAD $0xffffffffffffffff // .ascii 16, '\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff' - - // .p2align 4, 0x00 -__SingleQuoteTab: - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000030303030755c // .asciz 8, '\\u0000\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000031303030755c // .asciz 8, '\\u0001\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000032303030755c // .asciz 8, '\\u0002\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000033303030755c // .asciz 8, '\\u0003\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000034303030755c // .asciz 8, '\\u0004\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000035303030755c // .asciz 8, '\\u0005\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000036303030755c // .asciz 8, '\\u0006\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000037303030755c // .asciz 8, '\\u0007\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000038303030755c // .asciz 8, '\\u0008\x00\x00' - QUAD $0x0000000000000002 // .quad 2 - QUAD $0x000000000000745c // .asciz 8, '\\t\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000002 // .quad 2 - QUAD $0x0000000000006e5c // .asciz 8, '\\n\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000062303030755c // .asciz 8, '\\u000b\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000063303030755c // .asciz 8, '\\u000c\x00\x00' - QUAD $0x0000000000000002 // .quad 2 - QUAD $0x000000000000725c // .asciz 8, '\\r\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000065303030755c // .asciz 8, '\\u000e\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000066303030755c // .asciz 8, '\\u000f\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000030313030755c // .asciz 8, '\\u0010\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000031313030755c // .asciz 8, '\\u0011\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000032313030755c // .asciz 8, '\\u0012\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000033313030755c // .asciz 8, '\\u0013\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000034313030755c // .asciz 8, '\\u0014\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000035313030755c // .asciz 8, '\\u0015\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000036313030755c // .asciz 8, '\\u0016\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000037313030755c // .asciz 8, '\\u0017\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000038313030755c // .asciz 8, '\\u0018\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000039313030755c // .asciz 8, '\\u0019\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000061313030755c // .asciz 8, '\\u001a\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000062313030755c // .asciz 8, '\\u001b\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000063313030755c // .asciz 8, '\\u001c\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000064313030755c // .asciz 8, '\\u001d\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000065313030755c // .asciz 8, '\\u001e\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000066313030755c // .asciz 8, '\\u001f\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000002 // .quad 2 - QUAD $0x000000000000225c // .asciz 8, '\\"\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000002 // .quad 2 - QUAD $0x0000000000005c5c // .asciz 8, '\\\\\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - - // .p2align 4, 0x00 -__DoubleQuoteTab: - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0030303030755c5c // .asciz 8, '\\\\u0000\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0031303030755c5c // .asciz 8, '\\\\u0001\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0032303030755c5c // .asciz 8, '\\\\u0002\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0033303030755c5c // .asciz 8, '\\\\u0003\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0034303030755c5c // .asciz 8, '\\\\u0004\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0035303030755c5c // .asciz 8, '\\\\u0005\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0036303030755c5c // .asciz 8, '\\\\u0006\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0037303030755c5c // .asciz 8, '\\\\u0007\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0038303030755c5c // .asciz 8, '\\\\u0008\x00' - QUAD $0x0000000000000003 // .quad 3 - QUAD $0x0000000000745c5c // .asciz 8, '\\\\t\x00\x00\x00\x00\x00' - QUAD $0x0000000000000003 // .quad 3 - QUAD $0x00000000006e5c5c // .asciz 8, '\\\\n\x00\x00\x00\x00\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0062303030755c5c // .asciz 8, '\\\\u000b\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0063303030755c5c // .asciz 8, '\\\\u000c\x00' - QUAD $0x0000000000000003 // .quad 3 - QUAD $0x0000000000725c5c // .asciz 8, '\\\\r\x00\x00\x00\x00\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0065303030755c5c // .asciz 8, '\\\\u000e\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0066303030755c5c // .asciz 8, '\\\\u000f\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0030313030755c5c // .asciz 8, '\\\\u0010\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0031313030755c5c // .asciz 8, '\\\\u0011\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0032313030755c5c // .asciz 8, '\\\\u0012\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0033313030755c5c // .asciz 8, '\\\\u0013\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0034313030755c5c // .asciz 8, '\\\\u0014\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0035313030755c5c // .asciz 8, '\\\\u0015\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0036313030755c5c // .asciz 8, '\\\\u0016\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0037313030755c5c // .asciz 8, '\\\\u0017\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0038313030755c5c // .asciz 8, '\\\\u0018\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0039313030755c5c // .asciz 8, '\\\\u0019\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0061313030755c5c // .asciz 8, '\\\\u001a\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0062313030755c5c // .asciz 8, '\\\\u001b\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0063313030755c5c // .asciz 8, '\\\\u001c\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0064313030755c5c // .asciz 8, '\\\\u001d\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0065313030755c5c // .asciz 8, '\\\\u001e\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0066313030755c5c // .asciz 8, '\\\\u001f\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000004 // .quad 4 - QUAD $0x00000000225c5c5c // .asciz 8, '\\\\\\"\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000004 // .quad 4 - QUAD $0x000000005c5c5c5c // .asciz 8, '\\\\\\\\\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - - // .p2align 4, 0x00 -__EscTab: - QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .ascii 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' - QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .ascii 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' - QUAD $0x0000000000010000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; LONG $0x00000000; BYTE $0x01 // .ascii 13, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - WORD $0x0000; BYTE $0x00 // .space 3, '\x00\x00\x00' - - // .p2align 4, 0x00 -__UnquoteTab: - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000220000; QUAD $0x2f00000000000000 // .ascii 16, '\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000005c00000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00' - QUAD $0x000c000000080000; QUAD $0x000a000000000000 // .ascii 16, '\x00\x00\x08\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\n\x00' - LONG $0x000d0000; WORD $0xff09 // .ascii 6, '\x00\x00\r\x00\t\xff' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; WORD $0x0000 // .space 10, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - - // .p2align 4, 0x00 -__HtmlQuoteTab: - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000036323030755c // .asciz 8, '\\u0026\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000063333030755c // .asciz 8, '\\u003c\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000065333030755c // .asciz 8, '\\u003e\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000038323032755c // .asciz 8, '\\u2028\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000039323032755c // .asciz 8, '\\u2029\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - - // .p2align 4, 0x00 -_LSHIFT_TAB: - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000 // .space 8, '\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000001 // .long 1 - QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000001 // .long 1 - QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000001 // .long 1 - QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000002 // .long 2 - QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000002 // .long 2 - QUAD $0x0000000035323133; QUAD $0x0000000000000000 // .asciz 16, '3125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000002 // .long 2 - QUAD $0x0000003532363531; QUAD $0x0000000000000000 // .asciz 16, '15625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000003 // .long 3 - QUAD $0x0000003532313837; QUAD $0x0000000000000000 // .asciz 16, '78125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000003 // .long 3 - QUAD $0x0000353236303933; QUAD $0x0000000000000000 // .asciz 16, '390625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000003 // .long 3 - QUAD $0x0035323133353931; QUAD $0x0000000000000000 // .asciz 16, '1953125\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000004 // .long 4 - QUAD $0x0035323635363739; QUAD $0x0000000000000000 // .asciz 16, '9765625\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000004 // .long 4 - QUAD $0x3532313832383834; QUAD $0x0000000000000000 // .asciz 16, '48828125\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000004 // .long 4 - QUAD $0x3236303431343432; QUAD $0x0000000000000035 // .asciz 16, '244140625\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000004 // .long 4 - QUAD $0x3133303730323231; QUAD $0x0000000000003532 // .asciz 16, '1220703125\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000005 // .long 5 - QUAD $0x3635313533303136; QUAD $0x0000000000003532 // .asciz 16, '6103515625\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000005 // .long 5 - QUAD $0x3837353731353033; QUAD $0x0000000000353231 // .asciz 16, '30517578125\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000005 // .long 5 - QUAD $0x3938373835323531; QUAD $0x0000000035323630 // .asciz 16, '152587890625\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000006 // .long 6 - QUAD $0x3534393339323637; QUAD $0x0000000035323133 // .asciz 16, '762939453125\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000006 // .long 6 - QUAD $0x3237393634313833; QUAD $0x0000003532363536 // .asciz 16, '3814697265625\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000006 // .long 6 - QUAD $0x3638343337303931; QUAD $0x0000353231383233 // .asciz 16, '19073486328125\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000007 // .long 7 - QUAD $0x3133343736333539; QUAD $0x0000353236303436 // .asciz 16, '95367431640625\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000007 // .long 7 - QUAD $0x3531373338363734; QUAD $0x0035323133303238 // .asciz 16, '476837158203125\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000007 // .long 7 - QUAD $0x3735383134383332; QUAD $0x3532363531303139 // .asciz 16, '2384185791015625' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000007 // .long 7 - QUAD $0x3832393032393131; QUAD $0x3231383730353539 // .asciz 16, '1192092895507812' - QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000008 // .long 8 - QUAD $0x3434363430363935; QUAD $0x3236303933353737 // .asciz 16, '5960464477539062' - QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000008 // .long 8 - QUAD $0x3232333230383932; QUAD $0x3133353936373833 // .asciz 16, '2980232238769531' - QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000008 // .long 8 - QUAD $0x3136313130393431; QUAD $0x3536373438333931 // .asciz 16, '1490116119384765' - QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000009 // .long 9 - QUAD $0x3530383530353437; QUAD $0x3832383332393639 // .asciz 16, '7450580596923828' - QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000009 // .long 9 - QUAD $0x3230393235323733; QUAD $0x3431393136343839 // .asciz 16, '3725290298461914' - QUAD $0x0000000035323630; QUAD $0x0000000000000000 // .asciz 16, '0625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000009 // .long 9 - QUAD $0x3135343632363831; QUAD $0x3735393033323934 // .asciz 16, '1862645149230957' - QUAD $0x0000003532313330; QUAD $0x0000000000000000 // .asciz 16, '03125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000a // .long 10 - QUAD $0x3735323233313339; QUAD $0x3538373435313634 // .asciz 16, '9313225746154785' - QUAD $0x0000003532363531; QUAD $0x0000000000000000 // .asciz 16, '15625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000a // .long 10 - QUAD $0x3832313636353634; QUAD $0x3239333737303337 // .asciz 16, '4656612873077392' - QUAD $0x0000353231383735; QUAD $0x0000000000000000 // .asciz 16, '578125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000a // .long 10 - QUAD $0x3436303338323332; QUAD $0x3639363833353633 // .asciz 16, '2328306436538696' - QUAD $0x0035323630393832; QUAD $0x0000000000000000 // .asciz 16, '2890625\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000a // .long 10 - QUAD $0x3233353134363131; QUAD $0x3834333936323831 // .asciz 16, '1164153218269348' - QUAD $0x3532313335343431; QUAD $0x0000000000000000 // .asciz 16, '14453125\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000b // .long 11 - QUAD $0x3036363730323835; QUAD $0x3034373634333139 // .asciz 16, '5820766091346740' - QUAD $0x3532363536323237; QUAD $0x0000000000000000 // .asciz 16, '72265625\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000b // .long 11 - QUAD $0x3033383330313932; QUAD $0x3037333337363534 // .asciz 16, '2910383045673370' - QUAD $0x3231383233313633; QUAD $0x0000000000000035 // .asciz 16, '361328125\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000b // .long 11 - QUAD $0x3531393135353431; QUAD $0x3538363633383232 // .asciz 16, '1455191522836685' - QUAD $0x3630343636303831; QUAD $0x0000000000003532 // .asciz 16, '1806640625\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000c // .long 12 - QUAD $0x3637353935373237; QUAD $0x3532343338313431 // .asciz 16, '7275957614183425' - QUAD $0x3133303233333039; QUAD $0x0000000000003532 // .asciz 16, '9033203125\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000c // .long 12 - QUAD $0x3838373937333633; QUAD $0x3231373139303730 // .asciz 16, '3637978807091712' - QUAD $0x3531303636313539; QUAD $0x0000000000353236 // .asciz 16, '95166015625\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000c // .long 12 - QUAD $0x3439383938313831; QUAD $0x3635383534353330 // .asciz 16, '1818989403545856' - QUAD $0x3730303338353734; QUAD $0x0000000035323138 // .asciz 16, '475830078125\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000d // .long 13 - QUAD $0x3037343934393039; QUAD $0x3238323932373731 // .asciz 16, '9094947017729282' - QUAD $0x3933303531393733; QUAD $0x0000000035323630 // .asciz 16, '379150390625\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000d // .long 13 - QUAD $0x3533373437343534; QUAD $0x3134363436383830 // .asciz 16, '4547473508864641' - QUAD $0x3931353735393831; QUAD $0x0000003532313335 // .asciz 16, '1895751953125\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000d // .long 13 - QUAD $0x3736333733373232; QUAD $0x3032333233343435 // .asciz 16, '2273736754432320' - QUAD $0x3935373837343935; QUAD $0x0000353236353637 // .asciz 16, '59478759765625\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000d // .long 13 - QUAD $0x3338363836333131; QUAD $0x3036313631323737 // .asciz 16, '1136868377216160' - QUAD $0x3937333933373932; QUAD $0x0035323138323838 // .asciz 16, '297393798828125\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000e // .long 14 - QUAD $0x3831343334383635; QUAD $0x3130383038303638 // .asciz 16, '5684341886080801' - QUAD $0x3939383639363834; QUAD $0x0035323630343134 // .asciz 16, '486968994140625\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000e // .long 14 - QUAD $0x3930373132343832; QUAD $0x3030343034303334 // .asciz 16, '2842170943040400' - QUAD $0x3934343834333437; QUAD $0x3532313330373037 // .asciz 16, '7434844970703125' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000e // .long 14 - QUAD $0x3435383031323431; QUAD $0x3030323032353137 // .asciz 16, '1421085471520200' - QUAD $0x3432323437313733; QUAD $0x3236353135333538 // .asciz 16, '3717422485351562' - QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000f // .long 15 - QUAD $0x3337323435303137; QUAD $0x3130303130363735 // .asciz 16, '7105427357601001' - QUAD $0x3432313137383538; QUAD $0x3231383735373632 // .asciz 16, '8587112426757812' - QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000f // .long 15 - QUAD $0x3633313732353533; QUAD $0x3030353030383837 // .asciz 16, '3552713678800500' - QUAD $0x3236353533393239; QUAD $0x3630393837333331 // .asciz 16, '9293556213378906' - QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000f // .long 15 - QUAD $0x3836353336373731; QUAD $0x3035323030343933 // .asciz 16, '1776356839400250' - QUAD $0x3138373736343634; QUAD $0x3335343938363630 // .asciz 16, '4646778106689453' - QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000010 // .long 16 - QUAD $0x3134383731383838; QUAD $0x3235323130303739 // .asciz 16, '8881784197001252' - QUAD $0x3530393833333233; QUAD $0x3536323734343333 // .asciz 16, '3233890533447265' - QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000010 // .long 16 - QUAD $0x3032393830343434; QUAD $0x3632363030353839 // .asciz 16, '4440892098500626' - QUAD $0x3235343936313631; QUAD $0x3233363332373636 // .asciz 16, '1616945266723632' - QUAD $0x0000000035323138; QUAD $0x0000000000000000 // .asciz 16, '8125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000010 // .long 16 - QUAD $0x3036343430323232; QUAD $0x3331333035323934 // .asciz 16, '2220446049250313' - QUAD $0x3632373438303830; QUAD $0x3631383136333333 // .asciz 16, '0808472633361816' - QUAD $0x0000003532363034; QUAD $0x0000000000000000 // .asciz 16, '40625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000010 // .long 16 - QUAD $0x3033323230313131; QUAD $0x3635313532363432 // .asciz 16, '1110223024625156' - QUAD $0x3336333234303435; QUAD $0x3830393038363631 // .asciz 16, '5404236316680908' - QUAD $0x0000353231333032; QUAD $0x0000000000000000 // .asciz 16, '203125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000011 // .long 17 - QUAD $0x3135313131353535; QUAD $0x3238373532313332 // .asciz 16, '5551115123125782' - QUAD $0x3531383131323037; QUAD $0x3134353430343338 // .asciz 16, '7021181583404541' - QUAD $0x0000353236353130; QUAD $0x0000000000000000 // .asciz 16, '015625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000011 // .long 17 - QUAD $0x3537353535373732; QUAD $0x3139383236353136 // .asciz 16, '2775557561562891' - QUAD $0x3730393530313533; QUAD $0x3037323230373139 // .asciz 16, '3510590791702270' - QUAD $0x0035323138373035; QUAD $0x0000000000000000 // .asciz 16, '5078125\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000011 // .long 17 - QUAD $0x3738373737383331; QUAD $0x3534343138373038 // .asciz 16, '1387778780781445' - QUAD $0x3335393235353736; QUAD $0x3533313135383539 // .asciz 16, '6755295395851135' - QUAD $0x3532363039333532; QUAD $0x0000000000000000 // .asciz 16, '25390625\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000012 // .long 18 - QUAD $0x3933393838333936; QUAD $0x3832323730393330 // .asciz 16, '6938893903907228' - QUAD $0x3936373436373733; QUAD $0x3637363535323937 // .asciz 16, '3776476979255676' - QUAD $0x3532313335393632; QUAD $0x0000000000000000 // .asciz 16, '26953125\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000012 // .long 18 - QUAD $0x3936343439363433; QUAD $0x3431363335393135 // .asciz 16, '3469446951953614' - QUAD $0x3438333238383831; QUAD $0x3833383732363938 // .asciz 16, '1888238489627838' - QUAD $0x3236353637343331; QUAD $0x0000000000000035 // .asciz 16, '134765625\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000012 // .long 18 - QUAD $0x3433323734333731; QUAD $0x3730383637393537 // .asciz 16, '1734723475976807' - QUAD $0x3239313134343930; QUAD $0x3931393331383434 // .asciz 16, '0944119244813919' - QUAD $0x3138323833373630; QUAD $0x0000000000003532 // .asciz 16, '0673828125\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000013 // .long 19 - QUAD $0x3337313633373638; QUAD $0x3533303438383937 // .asciz 16, '8673617379884035' - QUAD $0x3236393530323734; QUAD $0x3539353936303432 // .asciz 16, '4720596224069595' - QUAD $0x3630343139363333; QUAD $0x0000000000003532 // .asciz 16, '3369140625\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - QUAD $0x0000000000000000 // .p2align 4, 0x00 - -_P10_TAB: - QUAD $0x3ff0000000000000 // .quad 0x3ff0000000000000 - QUAD $0x4024000000000000 // .quad 0x4024000000000000 - QUAD $0x4059000000000000 // .quad 0x4059000000000000 - QUAD $0x408f400000000000 // .quad 0x408f400000000000 - QUAD $0x40c3880000000000 // .quad 0x40c3880000000000 - QUAD $0x40f86a0000000000 // .quad 0x40f86a0000000000 - QUAD $0x412e848000000000 // .quad 0x412e848000000000 - QUAD $0x416312d000000000 // .quad 0x416312d000000000 - QUAD $0x4197d78400000000 // .quad 0x4197d78400000000 - QUAD $0x41cdcd6500000000 // .quad 0x41cdcd6500000000 - QUAD $0x4202a05f20000000 // .quad 0x4202a05f20000000 - QUAD $0x42374876e8000000 // .quad 0x42374876e8000000 - QUAD $0x426d1a94a2000000 // .quad 0x426d1a94a2000000 - QUAD $0x42a2309ce5400000 // .quad 0x42a2309ce5400000 - QUAD $0x42d6bcc41e900000 // .quad 0x42d6bcc41e900000 - QUAD $0x430c6bf526340000 // .quad 0x430c6bf526340000 - QUAD $0x4341c37937e08000 // .quad 0x4341c37937e08000 - QUAD $0x4376345785d8a000 // .quad 0x4376345785d8a000 - QUAD $0x43abc16d674ec800 // .quad 0x43abc16d674ec800 - QUAD $0x43e158e460913d00 // .quad 0x43e158e460913d00 - QUAD $0x4415af1d78b58c40 // .quad 0x4415af1d78b58c40 - QUAD $0x444b1ae4d6e2ef50 // .quad 0x444b1ae4d6e2ef50 - QUAD $0x4480f0cf064dd592 // .quad 0x4480f0cf064dd592 - QUAD $0x0000000000000000 // .p2align 4, 0x00 - -_LB_5bf8fe43: // _pow10_ceil_sig_f32.g - QUAD $0x81ceb32c4b43fcf5 // .quad -9093133594791772939 - QUAD $0xa2425ff75e14fc32 // .quad -6754730975062328270 - QUAD $0xcad2f7f5359a3b3f // .quad -3831727700400522433 - QUAD $0xfd87b5f28300ca0e // .quad -177973607073265138 - QUAD $0x9e74d1b791e07e49 // .quad -7028762532061872567 - QUAD $0xc612062576589ddb // .quad -4174267146649952805 - QUAD $0xf79687aed3eec552 // .quad -606147914885053102 - QUAD $0x9abe14cd44753b53 // .quad -7296371474444240045 - QUAD $0xc16d9a0095928a28 // .quad -4508778324627912152 - QUAD $0xf1c90080baf72cb2 // .quad -1024286887357502286 - QUAD $0x971da05074da7bef // .quad -7557708332239520785 - QUAD $0xbce5086492111aeb // .quad -4835449396872013077 - QUAD $0xec1e4a7db69561a6 // .quad -1432625727662628442 - QUAD $0x9392ee8e921d5d08 // .quad -7812920107430224632 - QUAD $0xb877aa3236a4b44a // .quad -5154464115860392886 - QUAD $0xe69594bec44de15c // .quad -1831394126398103204 - QUAD $0x901d7cf73ab0acda // .quad -8062150356639896358 - QUAD $0xb424dc35095cd810 // .quad -5466001927372482544 - QUAD $0xe12e13424bb40e14 // .quad -2220816390788215276 - QUAD $0x8cbccc096f5088cc // .quad -8305539271883716404 - QUAD $0xafebff0bcb24aaff // .quad -5770238071427257601 - QUAD $0xdbe6fecebdedd5bf // .quad -2601111570856684097 - QUAD $0x89705f4136b4a598 // .quad -8543223759426509416 - QUAD $0xabcc77118461cefd // .quad -6067343680855748867 - QUAD $0xd6bf94d5e57a42bd // .quad -2972493582642298179 - QUAD $0x8637bd05af6c69b6 // .quad -8775337516792518218 - QUAD $0xa7c5ac471b478424 // .quad -6357485877563259868 - QUAD $0xd1b71758e219652c // .quad -3335171328526686932 - QUAD $0x83126e978d4fdf3c // .quad -9002011107970261188 - QUAD $0xa3d70a3d70a3d70b // .quad -6640827866535438581 - QUAD $0xcccccccccccccccd // .quad -3689348814741910323 - QUAD $0x8000000000000000 // .quad -9223372036854775808 - QUAD $0xa000000000000000 // .quad -6917529027641081856 - QUAD $0xc800000000000000 // .quad -4035225266123964416 - QUAD $0xfa00000000000000 // .quad -432345564227567616 - QUAD $0x9c40000000000000 // .quad -7187745005283311616 - QUAD $0xc350000000000000 // .quad -4372995238176751616 - QUAD $0xf424000000000000 // .quad -854558029293551616 - QUAD $0x9896800000000000 // .quad -7451627795949551616 - QUAD $0xbebc200000000000 // .quad -4702848726509551616 - QUAD $0xee6b280000000000 // .quad -1266874889709551616 - QUAD $0x9502f90000000000 // .quad -7709325833709551616 - QUAD $0xba43b74000000000 // .quad -5024971273709551616 - QUAD $0xe8d4a51000000000 // .quad -1669528073709551616 - QUAD $0x9184e72a00000000 // .quad -7960984073709551616 - QUAD $0xb5e620f480000000 // .quad -5339544073709551616 - QUAD $0xe35fa931a0000000 // .quad -2062744073709551616 - QUAD $0x8e1bc9bf04000000 // .quad -8206744073709551616 - QUAD $0xb1a2bc2ec5000000 // .quad -5646744073709551616 - QUAD $0xde0b6b3a76400000 // .quad -2446744073709551616 - QUAD $0x8ac7230489e80000 // .quad -8446744073709551616 - QUAD $0xad78ebc5ac620000 // .quad -5946744073709551616 - QUAD $0xd8d726b7177a8000 // .quad -2821744073709551616 - QUAD $0x878678326eac9000 // .quad -8681119073709551616 - QUAD $0xa968163f0a57b400 // .quad -6239712823709551616 - QUAD $0xd3c21bcecceda100 // .quad -3187955011209551616 - QUAD $0x84595161401484a0 // .quad -8910000909647051616 - QUAD $0xa56fa5b99019a5c8 // .quad -6525815118631426616 - QUAD $0xcecb8f27f4200f3a // .quad -3545582879861895366 - QUAD $0x813f3978f8940985 // .quad -9133518327554766459 - QUAD $0xa18f07d736b90be6 // .quad -6805211891016070170 - QUAD $0xc9f2c9cd04674edf // .quad -3894828845342699809 - QUAD $0xfc6f7c4045812297 // .quad -256850038250986857 - QUAD $0x9dc5ada82b70b59e // .quad -7078060301547948642 - QUAD $0xc5371912364ce306 // .quad -4235889358507547898 - QUAD $0xf684df56c3e01bc7 // .quad -683175679707046969 - QUAD $0x9a130b963a6c115d // .quad -7344513827457986211 - QUAD $0xc097ce7bc90715b4 // .quad -4568956265895094860 - QUAD $0xf0bdc21abb48db21 // .quad -1099509313941480671 - QUAD $0x96769950b50d88f5 // .quad -7604722348854507275 - QUAD $0xbc143fa4e250eb32 // .quad -4894216917640746190 - QUAD $0xeb194f8e1ae525fe // .quad -1506085128623544834 - QUAD $0x92efd1b8d0cf37bf // .quad -7858832233030797377 - QUAD $0xb7abc627050305ae // .quad -5211854272861108818 - QUAD $0xe596b7b0c643c71a // .quad -1903131822648998118 - QUAD $0x8f7e32ce7bea5c70 // .quad -8106986416796705680 - QUAD $0xb35dbf821ae4f38c // .quad -5522047002568494196 - -TEXT ·__f32toa(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -48(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_f32toa: - MOVQ out+0(FP), DI - MOVSD val+8(FP), X0 - CALL ·__native_entry__+31264(SB) // _f32toa - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__f64toa(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -80(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_f64toa: - MOVQ out+0(FP), DI - MOVSD val+8(FP), X0 - CALL ·__native_entry__+192(SB) // _f64toa - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__get_by_path(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -304(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_get_by_path: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ path+16(FP), DX - MOVQ m+24(FP), CX - CALL ·__native_entry__+25856(SB) // _get_by_path - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__html_escape(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -64(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_html_escape: - MOVQ sp+0(FP), DI - MOVQ nb+8(FP), SI - MOVQ dp+16(FP), DX - MOVQ dn+24(FP), CX - CALL ·__native_entry__+9040(SB) // _html_escape - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__i64toa(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -16(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_i64toa: - MOVQ out+0(FP), DI - MOVQ val+8(FP), SI - CALL ·__native_entry__+3488(SB) // _i64toa - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__lspace(SB), NOSPLIT | NOFRAME, $0 - 32 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -8(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_lspace: - MOVQ sp+0(FP), DI - MOVQ nb+8(FP), SI - MOVQ off+16(FP), DX - CALL ·__native_entry__+16(SB) // _lspace - MOVQ AX, ret+24(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__quote(SB), NOSPLIT | NOFRAME, $0 - 48 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -56(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_quote: - MOVQ sp+0(FP), DI - MOVQ nb+8(FP), SI - MOVQ dp+16(FP), DX - MOVQ dn+24(FP), CX - MOVQ flags+32(FP), R8 - CALL ·__native_entry__+4880(SB) // _quote - MOVQ AX, ret+40(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_array(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_array: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - MOVQ flags+24(FP), CX - CALL ·__native_entry__+17952(SB) // _skip_array - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_number(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -72(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_number: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - CALL ·__native_entry__+21952(SB) // _skip_number - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_object(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_object: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - MOVQ flags+24(FP), CX - CALL ·__native_entry__+20368(SB) // _skip_object - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_one(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_one: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - MOVQ flags+24(FP), CX - CALL ·__native_entry__+22112(SB) // _skip_one - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_one_fast(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -200(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_one_fast: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - CALL ·__native_entry__+22352(SB) // _skip_one_fast - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__u64toa(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -8(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_u64toa: - MOVQ out+0(FP), DI - MOVQ val+8(FP), SI - CALL ·__native_entry__+3600(SB) // _u64toa - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__unquote(SB), NOSPLIT | NOFRAME, $0 - 48 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -88(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_unquote: - MOVQ sp+0(FP), DI - MOVQ nb+8(FP), SI - MOVQ dp+16(FP), DX - MOVQ ep+24(FP), CX - MOVQ flags+32(FP), R8 - CALL ·__native_entry__+6672(SB) // _unquote - MOVQ AX, ret+40(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__validate_one(SB), NOSPLIT | NOFRAME, $0 - 32 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_validate_one: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - CALL ·__native_entry__+22176(SB) // _validate_one - MOVQ AX, ret+24(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__validate_utf8(SB), NOSPLIT | NOFRAME, $0 - 32 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -48(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_validate_utf8: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - CALL ·__native_entry__+30000(SB) // _validate_utf8 - MOVQ AX, ret+24(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__validate_utf8_fast(SB), NOSPLIT | NOFRAME, $0 - 16 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -24(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_validate_utf8_fast: - MOVQ s+0(FP), DI - CALL ·__native_entry__+30672(SB) // _validate_utf8_fast - MOVQ AX, ret+8(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__value(SB), NOSPLIT | NOFRAME, $0 - 48 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -328(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_value: - MOVQ s+0(FP), DI - MOVQ n+8(FP), SI - MOVQ p+16(FP), DX - MOVQ v+24(FP), CX - MOVQ flags+32(FP), R8 - CALL ·__native_entry__+12224(SB) // _value - MOVQ AX, ret+40(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__vnumber(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -240(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_vnumber: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ v+16(FP), DX - LEAQ ·__native_entry__+15616(SB), AX // _vnumber - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__vsigned(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -16(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_vsigned: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ v+16(FP), DX - LEAQ ·__native_entry__+17232(SB), AX // _vsigned - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__vstring(SB), NOSPLIT | NOFRAME, $0 - 32 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -136(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_vstring: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ v+16(FP), DX - MOVQ flags+24(FP), CX - LEAQ ·__native_entry__+14064(SB), AX // _vstring - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__vunsigned(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -16(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_vunsigned: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ v+16(FP), DX - LEAQ ·__native_entry__+17600(SB), AX // _vunsigned - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx/native_export_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx/native_export_amd64.go deleted file mode 100644 index 1ca7f57536..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/native/avx/native_export_amd64.go +++ /dev/null @@ -1,49 +0,0 @@ -// Code generated by Makefile, DO NOT EDIT. - -/* - * Copyright 2021 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package avx - -var ( - S_f64toa = _subr__f64toa - S_f32toa = _subr__f32toa - S_i64toa = _subr__i64toa - S_u64toa = _subr__u64toa - S_lspace = _subr__lspace -) - -var ( - S_quote = _subr__quote - S_unquote = _subr__unquote -) - -var ( - S_value = _subr__value - S_vstring = _subr__vstring - S_vnumber = _subr__vnumber - S_vsigned = _subr__vsigned - S_vunsigned = _subr__vunsigned -) - -var ( - S_skip_one = _subr__skip_one - S_skip_one_fast = _subr__skip_one_fast - S_skip_array = _subr__skip_array - S_skip_object = _subr__skip_object - S_skip_number = _subr__skip_number - S_get_by_path = _subr__get_by_path -) diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx/native_subr_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx/native_subr_amd64.go index f20095d3d8..ebbc57a0d2 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx/native_subr_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx/native_subr_amd64.go @@ -3,107 +3,601 @@ package avx -//go:nosplit -//go:noescape -//goland:noinspection ALL -func __native_entry__() uintptr +import ( + `github.com/bytedance/sonic/loader` +) -var ( - _subr__f32toa = __native_entry__() + 31264 - _subr__f64toa = __native_entry__() + 192 - _subr__get_by_path = __native_entry__() + 25856 - _subr__html_escape = __native_entry__() + 9040 - _subr__i64toa = __native_entry__() + 3488 - _subr__lspace = __native_entry__() + 16 - _subr__quote = __native_entry__() + 4880 - _subr__skip_array = __native_entry__() + 17952 - _subr__skip_number = __native_entry__() + 21952 - _subr__skip_object = __native_entry__() + 20368 - _subr__skip_one = __native_entry__() + 22112 - _subr__skip_one_fast = __native_entry__() + 22352 - _subr__u64toa = __native_entry__() + 3600 - _subr__unquote = __native_entry__() + 6672 - _subr__validate_one = __native_entry__() + 22176 - _subr__validate_utf8 = __native_entry__() + 30000 - _subr__validate_utf8_fast = __native_entry__() + 30672 - _subr__value = __native_entry__() + 12224 - _subr__vnumber = __native_entry__() + 15616 - _subr__vsigned = __native_entry__() + 17232 - _subr__vstring = __native_entry__() + 14064 - _subr__vunsigned = __native_entry__() + 17600 +const ( + _entry__f32toa = 31136 + _entry__f64toa = 192 + _entry__format_significand = 35248 + _entry__format_integer = 3040 + _entry__fsm_exec = 17920 + _entry__advance_string = 14320 + _entry__advance_string_default = 36640 + _entry__do_skip_number = 20528 + _entry__get_by_path = 25680 + _entry__skip_one_fast = 22160 + _entry__html_escape = 8912 + _entry__i64toa = 3472 + _entry__u64toa = 3584 + _entry__lspace = 16 + _entry__quote = 4864 + _entry__skip_array = 17872 + _entry__skip_number = 21792 + _entry__skip_object = 20160 + _entry__skip_one = 21936 + _entry__unquote = 6576 + _entry__validate_one = 21984 + _entry__validate_utf8 = 29888 + _entry__validate_utf8_fast = 30560 + _entry__value = 12320 + _entry__vnumber = 15648 + _entry__atof_eisel_lemire64 = 10160 + _entry__atof_native = 11712 + _entry__decimal_to_f64 = 10528 + _entry__right_shift = 36208 + _entry__left_shift = 35712 + _entry__vsigned = 17200 + _entry__vstring = 14144 + _entry__vunsigned = 17520 ) const ( _stack__f32toa = 48 _stack__f64toa = 80 - _stack__get_by_path = 304 - _stack__html_escape = 64 + _stack__format_significand = 24 + _stack__format_integer = 16 + _stack__fsm_exec = 168 + _stack__advance_string = 64 + _stack__advance_string_default = 64 + _stack__do_skip_number = 48 + _stack__get_by_path = 280 + _stack__skip_one_fast = 176 + _stack__html_escape = 72 _stack__i64toa = 16 + _stack__u64toa = 8 _stack__lspace = 8 _stack__quote = 56 - _stack__skip_array = 128 - _stack__skip_number = 72 - _stack__skip_object = 128 - _stack__skip_one = 128 - _stack__skip_one_fast = 200 - _stack__u64toa = 8 + _stack__skip_array = 176 + _stack__skip_number = 88 + _stack__skip_object = 176 + _stack__skip_one = 176 _stack__unquote = 88 - _stack__validate_one = 128 + _stack__validate_one = 176 _stack__validate_utf8 = 48 _stack__validate_utf8_fast = 24 _stack__value = 328 _stack__vnumber = 240 + _stack__atof_eisel_lemire64 = 32 + _stack__atof_native = 136 + _stack__decimal_to_f64 = 80 + _stack__right_shift = 8 + _stack__left_shift = 24 _stack__vsigned = 16 - _stack__vstring = 136 - _stack__vunsigned = 16 + _stack__vstring = 120 + _stack__vunsigned = 8 ) -var ( - _ = _subr__f32toa - _ = _subr__f64toa - _ = _subr__get_by_path - _ = _subr__html_escape - _ = _subr__i64toa - _ = _subr__lspace - _ = _subr__quote - _ = _subr__skip_array - _ = _subr__skip_number - _ = _subr__skip_object - _ = _subr__skip_one - _ = _subr__skip_one_fast - _ = _subr__u64toa - _ = _subr__unquote - _ = _subr__validate_one - _ = _subr__validate_utf8 - _ = _subr__validate_utf8_fast - _ = _subr__value - _ = _subr__vnumber - _ = _subr__vsigned - _ = _subr__vstring - _ = _subr__vunsigned +const ( + _size__f32toa = 3392 + _size__f64toa = 2848 + _size__format_significand = 464 + _size__format_integer = 432 + _size__fsm_exec = 1692 + _size__advance_string = 1280 + _size__advance_string_default = 944 + _size__do_skip_number = 924 + _size__get_by_path = 4208 + _size__skip_one_fast = 3016 + _size__html_escape = 1248 + _size__i64toa = 48 + _size__u64toa = 1232 + _size__lspace = 144 + _size__quote = 1696 + _size__skip_array = 48 + _size__skip_number = 144 + _size__skip_object = 48 + _size__skip_one = 48 + _size__unquote = 2272 + _size__validate_one = 48 + _size__validate_utf8 = 672 + _size__validate_utf8_fast = 544 + _size__value = 1316 + _size__vnumber = 1552 + _size__atof_eisel_lemire64 = 368 + _size__atof_native = 608 + _size__decimal_to_f64 = 1184 + _size__right_shift = 400 + _size__left_shift = 496 + _size__vsigned = 320 + _size__vstring = 128 + _size__vunsigned = 336 ) -const ( - _ = _stack__f32toa - _ = _stack__f64toa - _ = _stack__get_by_path - _ = _stack__html_escape - _ = _stack__i64toa - _ = _stack__lspace - _ = _stack__quote - _ = _stack__skip_array - _ = _stack__skip_number - _ = _stack__skip_object - _ = _stack__skip_one - _ = _stack__skip_one_fast - _ = _stack__u64toa - _ = _stack__unquote - _ = _stack__validate_one - _ = _stack__validate_utf8 - _ = _stack__validate_utf8_fast - _ = _stack__value - _ = _stack__vnumber - _ = _stack__vsigned - _ = _stack__vstring - _ = _stack__vunsigned +var ( + _pcsp__f32toa = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {3350, 48}, + {3351, 40}, + {3353, 32}, + {3355, 24}, + {3357, 16}, + {3359, 8}, + {3363, 0}, + {3385, 48}, + } + _pcsp__f64toa = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {2788, 56}, + {2792, 48}, + {2793, 40}, + {2795, 32}, + {2797, 24}, + {2799, 16}, + {2801, 8}, + {2805, 0}, + {2843, 56}, + } + _pcsp__format_significand = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {452, 24}, + {453, 16}, + {455, 8}, + {457, 0}, + } + _pcsp__format_integer = [][2]uint32{ + {1, 0}, + {4, 8}, + {412, 16}, + {413, 8}, + {414, 0}, + {423, 16}, + {424, 8}, + {426, 0}, + } + _pcsp__fsm_exec = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {1342, 104}, + {1346, 48}, + {1347, 40}, + {1349, 32}, + {1351, 24}, + {1353, 16}, + {1355, 8}, + {1356, 0}, + {1692, 104}, + } + _pcsp__advance_string = [][2]uint32{ + {14, 0}, + {18, 8}, + {20, 16}, + {22, 24}, + {24, 32}, + {26, 40}, + {27, 48}, + {557, 56}, + {561, 48}, + {562, 40}, + {564, 32}, + {566, 24}, + {568, 16}, + {570, 8}, + {571, 0}, + {1268, 56}, + } + _pcsp__advance_string_default = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {552, 64}, + {556, 48}, + {557, 40}, + {559, 32}, + {561, 24}, + {563, 16}, + {565, 8}, + {566, 0}, + {931, 64}, + } + _pcsp__do_skip_number = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {849, 48}, + {850, 40}, + {852, 32}, + {854, 24}, + {856, 16}, + {858, 8}, + {859, 0}, + {924, 48}, + } + _pcsp__get_by_path = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {4012, 104}, + {4016, 48}, + {4017, 40}, + {4019, 32}, + {4021, 24}, + {4023, 16}, + {4025, 8}, + {4026, 0}, + {4194, 104}, + } + _pcsp__skip_one_fast = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {658, 176}, + {659, 168}, + {661, 160}, + {663, 152}, + {665, 144}, + {667, 136}, + {671, 128}, + {3016, 176}, + } + _pcsp__html_escape = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {1224, 72}, + {1228, 48}, + {1229, 40}, + {1231, 32}, + {1233, 24}, + {1235, 16}, + {1237, 8}, + {1239, 0}, + } + _pcsp__i64toa = [][2]uint32{ + {14, 0}, + {34, 8}, + {36, 0}, + } + _pcsp__u64toa = [][2]uint32{ + {1, 0}, + {161, 8}, + {162, 0}, + {457, 8}, + {458, 0}, + {756, 8}, + {757, 0}, + {1221, 8}, + {1223, 0}, + } + _pcsp__lspace = [][2]uint32{ + {1, 0}, + {89, 8}, + {90, 0}, + {103, 8}, + {104, 0}, + {111, 8}, + {113, 0}, + } + _pcsp__quote = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {1649, 56}, + {1653, 48}, + {1654, 40}, + {1656, 32}, + {1658, 24}, + {1660, 16}, + {1662, 8}, + {1663, 0}, + {1690, 56}, + } + _pcsp__skip_array = [][2]uint32{ + {1, 0}, + {28, 8}, + {34, 0}, + } + _pcsp__skip_number = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {100, 40}, + {101, 32}, + {103, 24}, + {105, 16}, + {107, 8}, + {108, 0}, + {139, 40}, + } + _pcsp__skip_object = [][2]uint32{ + {1, 0}, + {28, 8}, + {34, 0}, + } + _pcsp__skip_one = [][2]uint32{ + {1, 0}, + {30, 8}, + {36, 0}, + } + _pcsp__unquote = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {1684, 88}, + {1688, 48}, + {1689, 40}, + {1691, 32}, + {1693, 24}, + {1695, 16}, + {1697, 8}, + {1698, 0}, + {2270, 88}, + } + _pcsp__validate_one = [][2]uint32{ + {1, 0}, + {35, 8}, + {41, 0}, + } + _pcsp__validate_utf8 = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {11, 40}, + {623, 48}, + {627, 40}, + {628, 32}, + {630, 24}, + {632, 16}, + {634, 8}, + {635, 0}, + {666, 48}, + } + _pcsp__validate_utf8_fast = [][2]uint32{ + {1, 0}, + {4, 8}, + {5, 16}, + {247, 24}, + {251, 16}, + {252, 8}, + {253, 0}, + {527, 24}, + {531, 16}, + {532, 8}, + {534, 0}, + } + _pcsp__value = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {495, 88}, + {499, 48}, + {500, 40}, + {502, 32}, + {504, 24}, + {506, 16}, + {508, 8}, + {509, 0}, + {1316, 88}, + } + _pcsp__vnumber = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {803, 104}, + {807, 48}, + {808, 40}, + {810, 32}, + {812, 24}, + {814, 16}, + {816, 8}, + {817, 0}, + {1547, 104}, + } + _pcsp__atof_eisel_lemire64 = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {292, 32}, + {293, 24}, + {295, 16}, + {297, 8}, + {298, 0}, + {362, 32}, + } + _pcsp__atof_native = [][2]uint32{ + {1, 0}, + {4, 8}, + {587, 56}, + {591, 8}, + {593, 0}, + } + _pcsp__decimal_to_f64 = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {1144, 56}, + {1148, 48}, + {1149, 40}, + {1151, 32}, + {1153, 24}, + {1155, 16}, + {1157, 8}, + {1158, 0}, + {1169, 56}, + } + _pcsp__right_shift = [][2]uint32{ + {1, 0}, + {318, 8}, + {319, 0}, + {387, 8}, + {388, 0}, + {396, 8}, + {398, 0}, + } + _pcsp__left_shift = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {363, 24}, + {364, 16}, + {366, 8}, + {367, 0}, + {470, 24}, + {471, 16}, + {473, 8}, + {474, 0}, + {486, 24}, + } + _pcsp__vsigned = [][2]uint32{ + {1, 0}, + {4, 8}, + {112, 16}, + {113, 8}, + {114, 0}, + {125, 16}, + {126, 8}, + {127, 0}, + {260, 16}, + {261, 8}, + {262, 0}, + {266, 16}, + {267, 8}, + {268, 0}, + {306, 16}, + {307, 8}, + {308, 0}, + {316, 16}, + {317, 8}, + {319, 0}, + } + _pcsp__vstring = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {11, 40}, + {105, 56}, + {109, 40}, + {110, 32}, + {112, 24}, + {114, 16}, + {116, 8}, + {118, 0}, + } + _pcsp__vunsigned = [][2]uint32{ + {1, 0}, + {71, 8}, + {72, 0}, + {83, 8}, + {84, 0}, + {107, 8}, + {108, 0}, + {273, 8}, + {274, 0}, + {312, 8}, + {313, 0}, + {320, 8}, + {322, 0}, + } ) + +var Funcs = []loader.CFunc{ + {"__native_entry__", 0, 67, 0, nil}, + {"_f32toa", _entry__f32toa, _size__f32toa, _stack__f32toa, _pcsp__f32toa}, + {"_f64toa", _entry__f64toa, _size__f64toa, _stack__f64toa, _pcsp__f64toa}, + {"_format_significand", _entry__format_significand, _size__format_significand, _stack__format_significand, _pcsp__format_significand}, + {"_format_integer", _entry__format_integer, _size__format_integer, _stack__format_integer, _pcsp__format_integer}, + {"_fsm_exec", _entry__fsm_exec, _size__fsm_exec, _stack__fsm_exec, _pcsp__fsm_exec}, + {"_advance_string", _entry__advance_string, _size__advance_string, _stack__advance_string, _pcsp__advance_string}, + {"_advance_string_default", _entry__advance_string_default, _size__advance_string_default, _stack__advance_string_default, _pcsp__advance_string_default}, + {"_do_skip_number", _entry__do_skip_number, _size__do_skip_number, _stack__do_skip_number, _pcsp__do_skip_number}, + {"_get_by_path", _entry__get_by_path, _size__get_by_path, _stack__get_by_path, _pcsp__get_by_path}, + {"_skip_one_fast", _entry__skip_one_fast, _size__skip_one_fast, _stack__skip_one_fast, _pcsp__skip_one_fast}, + {"_html_escape", _entry__html_escape, _size__html_escape, _stack__html_escape, _pcsp__html_escape}, + {"_i64toa", _entry__i64toa, _size__i64toa, _stack__i64toa, _pcsp__i64toa}, + {"_u64toa", _entry__u64toa, _size__u64toa, _stack__u64toa, _pcsp__u64toa}, + {"_lspace", _entry__lspace, _size__lspace, _stack__lspace, _pcsp__lspace}, + {"_quote", _entry__quote, _size__quote, _stack__quote, _pcsp__quote}, + {"_skip_array", _entry__skip_array, _size__skip_array, _stack__skip_array, _pcsp__skip_array}, + {"_skip_number", _entry__skip_number, _size__skip_number, _stack__skip_number, _pcsp__skip_number}, + {"_skip_object", _entry__skip_object, _size__skip_object, _stack__skip_object, _pcsp__skip_object}, + {"_skip_one", _entry__skip_one, _size__skip_one, _stack__skip_one, _pcsp__skip_one}, + {"_unquote", _entry__unquote, _size__unquote, _stack__unquote, _pcsp__unquote}, + {"_validate_one", _entry__validate_one, _size__validate_one, _stack__validate_one, _pcsp__validate_one}, + {"_validate_utf8", _entry__validate_utf8, _size__validate_utf8, _stack__validate_utf8, _pcsp__validate_utf8}, + {"_validate_utf8_fast", _entry__validate_utf8_fast, _size__validate_utf8_fast, _stack__validate_utf8_fast, _pcsp__validate_utf8_fast}, + {"_value", _entry__value, _size__value, _stack__value, _pcsp__value}, + {"_vnumber", _entry__vnumber, _size__vnumber, _stack__vnumber, _pcsp__vnumber}, + {"_atof_eisel_lemire64", _entry__atof_eisel_lemire64, _size__atof_eisel_lemire64, _stack__atof_eisel_lemire64, _pcsp__atof_eisel_lemire64}, + {"_atof_native", _entry__atof_native, _size__atof_native, _stack__atof_native, _pcsp__atof_native}, + {"_decimal_to_f64", _entry__decimal_to_f64, _size__decimal_to_f64, _stack__decimal_to_f64, _pcsp__decimal_to_f64}, + {"_right_shift", _entry__right_shift, _size__right_shift, _stack__right_shift, _pcsp__right_shift}, + {"_left_shift", _entry__left_shift, _size__left_shift, _stack__left_shift, _pcsp__left_shift}, + {"_vsigned", _entry__vsigned, _size__vsigned, _stack__vsigned, _pcsp__vsigned}, + {"_vstring", _entry__vstring, _size__vstring, _stack__vstring, _pcsp__vstring}, + {"_vunsigned", _entry__vunsigned, _size__vunsigned, _stack__vunsigned, _pcsp__vunsigned}, +} diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx/native_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx/native_text_amd64.go new file mode 100644 index 0000000000..45ad52ef75 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/native/avx/native_text_amd64.go @@ -0,0 +1,14075 @@ +// +build amd64 +// Code generated by asm2asm, DO NOT EDIT. + +package avx + +var Text__native_entry__ = []byte{ + 0x48, 0x8d, 0x05, 0xf9, 0xff, 0xff, 0xff, // leaq $-7(%rip), %rax + 0x48, 0x89, 0x44, 0x24, 0x08, //0x00000007 movq %rax, $8(%rsp) + 0xc3, //0x0000000c retq + 0x90, 0x90, 0x90, //0x0000000d .p2align 4, 0x90 + //0x00000010 _lspace + 0x55, //0x00000010 pushq %rbp + 0x48, 0x89, 0xe5, //0x00000011 movq %rsp, %rbp + 0x48, 0x39, 0xd6, //0x00000014 cmpq %rdx, %rsi + 0x0f, 0x84, 0x4e, 0x00, 0x00, 0x00, //0x00000017 je LBB0_1 + 0x4c, 0x8d, 0x04, 0x37, //0x0000001d leaq (%rdi,%rsi), %r8 + 0x48, 0x8d, 0x44, 0x3a, 0x01, //0x00000021 leaq $1(%rdx,%rdi), %rax + 0x48, 0x29, 0xf2, //0x00000026 subq %rsi, %rdx + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000029 movabsq $4294977024, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000033 .p2align 4, 0x90 + //0x00000040 LBB0_3 + 0x0f, 0xbe, 0x48, 0xff, //0x00000040 movsbl $-1(%rax), %ecx + 0x83, 0xf9, 0x20, //0x00000044 cmpl $32, %ecx + 0x0f, 0x87, 0x2c, 0x00, 0x00, 0x00, //0x00000047 ja LBB0_5 + 0x48, 0x0f, 0xa3, 0xce, //0x0000004d btq %rcx, %rsi + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x00000051 jae LBB0_5 + 0x48, 0xff, 0xc0, //0x00000057 incq %rax + 0x48, 0xff, 0xc2, //0x0000005a incq %rdx + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x0000005d jne LBB0_3 + 0x49, 0x29, 0xf8, //0x00000063 subq %rdi, %r8 + 0x4c, 0x89, 0xc0, //0x00000066 movq %r8, %rax + 0x5d, //0x00000069 popq %rbp + 0xc3, //0x0000006a retq + //0x0000006b LBB0_1 + 0x48, 0x01, 0xfa, //0x0000006b addq %rdi, %rdx + 0x49, 0x89, 0xd0, //0x0000006e movq %rdx, %r8 + 0x49, 0x29, 0xf8, //0x00000071 subq %rdi, %r8 + 0x4c, 0x89, 0xc0, //0x00000074 movq %r8, %rax + 0x5d, //0x00000077 popq %rbp + 0xc3, //0x00000078 retq + //0x00000079 LBB0_5 + 0x48, 0xf7, 0xd7, //0x00000079 notq %rdi + 0x48, 0x01, 0xf8, //0x0000007c addq %rdi, %rax + 0x5d, //0x0000007f popq %rbp + 0xc3, //0x00000080 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00000081 .p2align 5, 0x00 + //0x000000a0 LCPI1_0 + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x000000a0 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x000000b0 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + //0x000000c0 .p2align 4, 0x90 + //0x000000c0 _f64toa + 0x55, //0x000000c0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000000c1 movq %rsp, %rbp + 0x41, 0x57, //0x000000c4 pushq %r15 + 0x41, 0x56, //0x000000c6 pushq %r14 + 0x41, 0x55, //0x000000c8 pushq %r13 + 0x41, 0x54, //0x000000ca pushq %r12 + 0x53, //0x000000cc pushq %rbx + 0x50, //0x000000cd pushq %rax + 0xc4, 0xe1, 0xf9, 0x7e, 0xc2, //0x000000ce vmovq %xmm0, %rdx + 0x48, 0x89, 0xd0, //0x000000d3 movq %rdx, %rax + 0x48, 0xc1, 0xe8, 0x34, //0x000000d6 shrq $52, %rax + 0x25, 0xff, 0x07, 0x00, 0x00, //0x000000da andl $2047, %eax + 0x3d, 0xff, 0x07, 0x00, 0x00, //0x000000df cmpl $2047, %eax + 0x0f, 0x84, 0xcc, 0x0a, 0x00, 0x00, //0x000000e4 je LBB1_114 + 0x49, 0x89, 0xfe, //0x000000ea movq %rdi, %r14 + 0xc6, 0x07, 0x2d, //0x000000ed movb $45, (%rdi) + 0x49, 0x89, 0xd4, //0x000000f0 movq %rdx, %r12 + 0x49, 0xc1, 0xec, 0x3f, //0x000000f3 shrq $63, %r12 + 0x4e, 0x8d, 0x3c, 0x27, //0x000000f7 leaq (%rdi,%r12), %r15 + 0x48, 0x8d, 0x0c, 0x55, 0x00, 0x00, 0x00, 0x00, //0x000000fb leaq (,%rdx,2), %rcx + 0x48, 0x85, 0xc9, //0x00000103 testq %rcx, %rcx + 0x0f, 0x84, 0x75, 0x02, 0x00, 0x00, //0x00000106 je LBB1_19 + 0x48, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, //0x0000010c movabsq $4503599627370495, %rdi + 0x48, 0x21, 0xfa, //0x00000116 andq %rdi, %rdx + 0x85, 0xc0, //0x00000119 testl %eax, %eax + 0x0f, 0x84, 0x9c, 0x0a, 0x00, 0x00, //0x0000011b je LBB1_115 + 0x48, 0xff, 0xc7, //0x00000121 incq %rdi + 0x48, 0x09, 0xd7, //0x00000124 orq %rdx, %rdi + 0x8d, 0x98, 0xcd, 0xfb, 0xff, 0xff, //0x00000127 leal $-1075(%rax), %ebx + 0x8d, 0x88, 0x01, 0xfc, 0xff, 0xff, //0x0000012d leal $-1023(%rax), %ecx + 0x83, 0xf9, 0x34, //0x00000133 cmpl $52, %ecx + 0x0f, 0x87, 0x1d, 0x00, 0x00, 0x00, //0x00000136 ja LBB1_5 + 0xb9, 0x33, 0x04, 0x00, 0x00, //0x0000013c movl $1075, %ecx + 0x29, 0xc1, //0x00000141 subl %eax, %ecx + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00000143 movq $-1, %rsi + 0x48, 0xd3, 0xe6, //0x0000014a shlq %cl, %rsi + 0x48, 0xf7, 0xd6, //0x0000014d notq %rsi + 0x48, 0x85, 0xf7, //0x00000150 testq %rsi, %rdi + 0x0f, 0x84, 0x10, 0x04, 0x00, 0x00, //0x00000153 je LBB1_43 + //0x00000159 LBB1_5 + 0x48, 0x85, 0xd2, //0x00000159 testq %rdx, %rdx + 0x0f, 0x94, 0xc1, //0x0000015c sete %cl + 0x83, 0xf8, 0x01, //0x0000015f cmpl $1, %eax + 0x0f, 0x97, 0xc0, //0x00000162 seta %al + 0x20, 0xc8, //0x00000165 andb %cl, %al + 0x0f, 0xb6, 0xc0, //0x00000167 movzbl %al, %eax + 0x48, 0x8d, 0x74, 0xb8, 0xfe, //0x0000016a leaq $-2(%rax,%rdi,4), %rsi + 0x44, 0x69, 0xcb, 0x13, 0x44, 0x13, 0x00, //0x0000016f imull $1262611, %ebx, %r9d + 0x31, 0xc9, //0x00000176 xorl %ecx, %ecx + 0x84, 0xc0, //0x00000178 testb %al, %al + 0xb8, 0xff, 0xfe, 0x07, 0x00, //0x0000017a movl $524031, %eax + 0x0f, 0x44, 0xc1, //0x0000017f cmovel %ecx, %eax + 0x41, 0x29, 0xc1, //0x00000182 subl %eax, %r9d + 0x41, 0xc1, 0xf9, 0x16, //0x00000185 sarl $22, %r9d + 0x41, 0x69, 0xc9, 0xb1, 0x6c, 0xe5, 0xff, //0x00000189 imull $-1741647, %r9d, %ecx + 0xc1, 0xe9, 0x13, //0x00000190 shrl $19, %ecx + 0x01, 0xd9, //0x00000193 addl %ebx, %ecx + 0xb8, 0x24, 0x01, 0x00, 0x00, //0x00000195 movl $292, %eax + 0x44, 0x29, 0xc8, //0x0000019a subl %r9d, %eax + 0x48, 0x98, //0x0000019d cltq + 0x48, 0xc1, 0xe0, 0x04, //0x0000019f shlq $4, %rax + 0x48, 0x8d, 0x15, 0xb6, 0xbd, 0x00, 0x00, //0x000001a3 leaq $48566(%rip), %rdx /* _pow10_ceil_sig.g+0(%rip) */ + 0x4c, 0x8b, 0x1c, 0x10, //0x000001aa movq (%rax,%rdx), %r11 + 0x4c, 0x8b, 0x6c, 0x10, 0x08, //0x000001ae movq $8(%rax,%rdx), %r13 + 0xfe, 0xc1, //0x000001b3 incb %cl + 0x48, 0xd3, 0xe6, //0x000001b5 shlq %cl, %rsi + 0x48, 0x89, 0xf0, //0x000001b8 movq %rsi, %rax + 0x49, 0xf7, 0xe5, //0x000001bb mulq %r13 + 0x48, 0x89, 0xd3, //0x000001be movq %rdx, %rbx + 0x48, 0x89, 0xf0, //0x000001c1 movq %rsi, %rax + 0x49, 0xf7, 0xe3, //0x000001c4 mulq %r11 + 0x48, 0x8d, 0x34, 0xbd, 0x00, 0x00, 0x00, 0x00, //0x000001c7 leaq (,%rdi,4), %rsi + 0x48, 0x01, 0xd8, //0x000001cf addq %rbx, %rax + 0x48, 0x83, 0xd2, 0x00, //0x000001d2 adcq $0, %rdx + 0x31, 0xdb, //0x000001d6 xorl %ebx, %ebx + 0x48, 0x83, 0xf8, 0x01, //0x000001d8 cmpq $1, %rax + 0x0f, 0x97, 0xc3, //0x000001dc seta %bl + 0x48, 0x09, 0xd3, //0x000001df orq %rdx, %rbx + 0x48, 0xd3, 0xe6, //0x000001e2 shlq %cl, %rsi + 0x48, 0x89, 0xf0, //0x000001e5 movq %rsi, %rax + 0x49, 0xf7, 0xe5, //0x000001e8 mulq %r13 + 0x49, 0x89, 0xd2, //0x000001eb movq %rdx, %r10 + 0x48, 0x89, 0xf0, //0x000001ee movq %rsi, %rax + 0x49, 0xf7, 0xe3, //0x000001f1 mulq %r11 + 0x49, 0x89, 0xd0, //0x000001f4 movq %rdx, %r8 + 0x48, 0x8d, 0x34, 0xbd, 0x02, 0x00, 0x00, 0x00, //0x000001f7 leaq $2(,%rdi,4), %rsi + 0x4c, 0x01, 0xd0, //0x000001ff addq %r10, %rax + 0x49, 0x83, 0xd0, 0x00, //0x00000202 adcq $0, %r8 + 0x45, 0x31, 0xd2, //0x00000206 xorl %r10d, %r10d + 0x48, 0x83, 0xf8, 0x01, //0x00000209 cmpq $1, %rax + 0x41, 0x0f, 0x97, 0xc2, //0x0000020d seta %r10b + 0x4d, 0x09, 0xc2, //0x00000211 orq %r8, %r10 + 0x48, 0xd3, 0xe6, //0x00000214 shlq %cl, %rsi + 0x48, 0x89, 0xf0, //0x00000217 movq %rsi, %rax + 0x49, 0xf7, 0xe5, //0x0000021a mulq %r13 + 0x48, 0x89, 0xd1, //0x0000021d movq %rdx, %rcx + 0x48, 0x89, 0xf0, //0x00000220 movq %rsi, %rax + 0x49, 0xf7, 0xe3, //0x00000223 mulq %r11 + 0x48, 0x01, 0xc8, //0x00000226 addq %rcx, %rax + 0x48, 0x83, 0xd2, 0x00, //0x00000229 adcq $0, %rdx + 0x31, 0xc9, //0x0000022d xorl %ecx, %ecx + 0x48, 0x83, 0xf8, 0x01, //0x0000022f cmpq $1, %rax + 0x0f, 0x97, 0xc1, //0x00000233 seta %cl + 0x48, 0x09, 0xd1, //0x00000236 orq %rdx, %rcx + 0x83, 0xe7, 0x01, //0x00000239 andl $1, %edi + 0x48, 0x01, 0xfb, //0x0000023c addq %rdi, %rbx + 0x48, 0x29, 0xf9, //0x0000023f subq %rdi, %rcx + 0x49, 0x83, 0xfa, 0x28, //0x00000242 cmpq $40, %r10 + 0x0f, 0x82, 0x01, 0x01, 0x00, 0x00, //0x00000246 jb LBB1_17 + 0x48, 0xba, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x0000024c movabsq $-3689348814741910323, %rdx + 0x4c, 0x89, 0xc0, //0x00000256 movq %r8, %rax + 0x48, 0xf7, 0xe2, //0x00000259 mulq %rdx + 0x48, 0x89, 0xd7, //0x0000025c movq %rdx, %rdi + 0x48, 0xc1, 0xef, 0x05, //0x0000025f shrq $5, %rdi + 0x48, 0x8d, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x00, //0x00000263 leaq (,%rdi,8), %rax + 0x48, 0x8d, 0x14, 0x80, //0x0000026b leaq (%rax,%rax,4), %rdx + 0x48, 0x39, 0xd3, //0x0000026f cmpq %rdx, %rbx + 0x40, 0x0f, 0x96, 0xc6, //0x00000272 setbe %sil + 0x48, 0x8d, 0x44, 0x80, 0x28, //0x00000276 leaq $40(%rax,%rax,4), %rax + 0x48, 0x39, 0xc8, //0x0000027b cmpq %rcx, %rax + 0x0f, 0x96, 0xc2, //0x0000027e setbe %dl + 0x40, 0x38, 0xd6, //0x00000281 cmpb %dl, %sil + 0x0f, 0x84, 0xc3, 0x00, 0x00, 0x00, //0x00000284 je LBB1_17 + 0x31, 0xd2, //0x0000028a xorl %edx, %edx + 0x48, 0x39, 0xc8, //0x0000028c cmpq %rcx, %rax + 0x0f, 0x96, 0xc2, //0x0000028f setbe %dl + 0x48, 0x01, 0xd7, //0x00000292 addq %rdx, %rdi + 0x41, 0xff, 0xc1, //0x00000295 incl %r9d + 0x48, 0xbb, 0x80, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, //0x00000298 movabsq $8589934464, %rbx + 0x48, 0x8d, 0x83, 0x7f, 0xe4, 0x0b, 0x54, //0x000002a2 leaq $1410065535(%rbx), %rax + 0x48, 0x39, 0xc7, //0x000002a9 cmpq %rax, %rdi + 0x0f, 0x87, 0x1e, 0x01, 0x00, 0x00, //0x000002ac ja LBB1_23 + //0x000002b2 LBB1_8 + 0xba, 0x01, 0x00, 0x00, 0x00, //0x000002b2 movl $1, %edx + 0x48, 0x83, 0xff, 0x0a, //0x000002b7 cmpq $10, %rdi + 0x0f, 0x82, 0x9c, 0x01, 0x00, 0x00, //0x000002bb jb LBB1_30 + 0xba, 0x02, 0x00, 0x00, 0x00, //0x000002c1 movl $2, %edx + 0x48, 0x83, 0xff, 0x64, //0x000002c6 cmpq $100, %rdi + 0x0f, 0x82, 0x8d, 0x01, 0x00, 0x00, //0x000002ca jb LBB1_30 + 0xba, 0x03, 0x00, 0x00, 0x00, //0x000002d0 movl $3, %edx + 0x48, 0x81, 0xff, 0xe8, 0x03, 0x00, 0x00, //0x000002d5 cmpq $1000, %rdi + 0x0f, 0x82, 0x7b, 0x01, 0x00, 0x00, //0x000002dc jb LBB1_30 + 0xba, 0x04, 0x00, 0x00, 0x00, //0x000002e2 movl $4, %edx + 0x48, 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x000002e7 cmpq $10000, %rdi + 0x0f, 0x82, 0x69, 0x01, 0x00, 0x00, //0x000002ee jb LBB1_30 + 0xba, 0x05, 0x00, 0x00, 0x00, //0x000002f4 movl $5, %edx + 0x48, 0x81, 0xff, 0xa0, 0x86, 0x01, 0x00, //0x000002f9 cmpq $100000, %rdi + 0x0f, 0x82, 0x57, 0x01, 0x00, 0x00, //0x00000300 jb LBB1_30 + 0xba, 0x06, 0x00, 0x00, 0x00, //0x00000306 movl $6, %edx + 0x48, 0x81, 0xff, 0x40, 0x42, 0x0f, 0x00, //0x0000030b cmpq $1000000, %rdi + 0x0f, 0x82, 0x45, 0x01, 0x00, 0x00, //0x00000312 jb LBB1_30 + 0xba, 0x07, 0x00, 0x00, 0x00, //0x00000318 movl $7, %edx + 0x48, 0x81, 0xff, 0x80, 0x96, 0x98, 0x00, //0x0000031d cmpq $10000000, %rdi + 0x0f, 0x82, 0x33, 0x01, 0x00, 0x00, //0x00000324 jb LBB1_30 + 0xba, 0x08, 0x00, 0x00, 0x00, //0x0000032a movl $8, %edx + 0x48, 0x81, 0xff, 0x00, 0xe1, 0xf5, 0x05, //0x0000032f cmpq $100000000, %rdi + 0x0f, 0x82, 0x21, 0x01, 0x00, 0x00, //0x00000336 jb LBB1_30 + 0x48, 0x81, 0xff, 0x00, 0xca, 0x9a, 0x3b, //0x0000033c cmpq $1000000000, %rdi + 0xba, 0x0a, 0x00, 0x00, 0x00, //0x00000343 movl $10, %edx + 0xe9, 0x0d, 0x01, 0x00, 0x00, //0x00000348 jmp LBB1_29 + //0x0000034d LBB1_17 + 0x4d, 0x89, 0xc3, //0x0000034d movq %r8, %r11 + 0x49, 0xc1, 0xeb, 0x02, //0x00000350 shrq $2, %r11 + 0x4c, 0x89, 0xc2, //0x00000354 movq %r8, %rdx + 0x48, 0x83, 0xe2, 0xfc, //0x00000357 andq $-4, %rdx + 0x48, 0x39, 0xd3, //0x0000035b cmpq %rdx, %rbx + 0x0f, 0x96, 0xc3, //0x0000035e setbe %bl + 0x48, 0x8d, 0x72, 0x04, //0x00000361 leaq $4(%rdx), %rsi + 0x48, 0x39, 0xce, //0x00000365 cmpq %rcx, %rsi + 0x0f, 0x96, 0xc0, //0x00000368 setbe %al + 0x38, 0xc3, //0x0000036b cmpb %al, %bl + 0x0f, 0x84, 0x20, 0x00, 0x00, 0x00, //0x0000036d je LBB1_20 + 0x31, 0xff, //0x00000373 xorl %edi, %edi + 0x48, 0x39, 0xce, //0x00000375 cmpq %rcx, %rsi + 0x40, 0x0f, 0x96, 0xc7, //0x00000378 setbe %dil + 0xe9, 0x32, 0x00, 0x00, 0x00, //0x0000037c jmp LBB1_22 + //0x00000381 LBB1_19 + 0x41, 0xc6, 0x07, 0x30, //0x00000381 movb $48, (%r15) + 0x45, 0x29, 0xf7, //0x00000385 subl %r14d, %r15d + 0x41, 0xff, 0xc7, //0x00000388 incl %r15d + 0x44, 0x89, 0xfb, //0x0000038b movl %r15d, %ebx + 0xe9, 0x0f, 0x08, 0x00, 0x00, //0x0000038e jmp LBB1_113 + //0x00000393 LBB1_20 + 0x48, 0x83, 0xca, 0x02, //0x00000393 orq $2, %rdx + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00000397 movl $1, %edi + 0x49, 0x39, 0xd2, //0x0000039c cmpq %rdx, %r10 + 0x0f, 0x87, 0x0e, 0x00, 0x00, 0x00, //0x0000039f ja LBB1_22 + 0x0f, 0x94, 0xc0, //0x000003a5 sete %al + 0x41, 0xc0, 0xe8, 0x02, //0x000003a8 shrb $2, %r8b + 0x41, 0x20, 0xc0, //0x000003ac andb %al, %r8b + 0x41, 0x0f, 0xb6, 0xf8, //0x000003af movzbl %r8b, %edi + //0x000003b3 LBB1_22 + 0x4c, 0x01, 0xdf, //0x000003b3 addq %r11, %rdi + 0x48, 0xbb, 0x80, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, //0x000003b6 movabsq $8589934464, %rbx + 0x48, 0x8d, 0x83, 0x7f, 0xe4, 0x0b, 0x54, //0x000003c0 leaq $1410065535(%rbx), %rax + 0x48, 0x39, 0xc7, //0x000003c7 cmpq %rax, %rdi + 0x0f, 0x86, 0xe2, 0xfe, 0xff, 0xff, //0x000003ca jbe LBB1_8 + //0x000003d0 LBB1_23 + 0x48, 0x89, 0xf8, //0x000003d0 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0b, //0x000003d3 shrq $11, %rax + 0xba, 0x0b, 0x00, 0x00, 0x00, //0x000003d7 movl $11, %edx + 0x48, 0x3d, 0xdd, 0x0e, 0xe9, 0x02, //0x000003dc cmpq $48828125, %rax + 0x0f, 0x82, 0x75, 0x00, 0x00, 0x00, //0x000003e2 jb LBB1_30 + 0x48, 0x89, 0xf8, //0x000003e8 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0c, //0x000003eb shrq $12, %rax + 0xba, 0x0c, 0x00, 0x00, 0x00, //0x000003ef movl $12, %edx + 0x48, 0x3d, 0x51, 0x4a, 0x8d, 0x0e, //0x000003f4 cmpq $244140625, %rax + 0x0f, 0x82, 0x5d, 0x00, 0x00, 0x00, //0x000003fa jb LBB1_30 + 0x48, 0x89, 0xf8, //0x00000400 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0d, //0x00000403 shrq $13, %rax + 0xba, 0x0d, 0x00, 0x00, 0x00, //0x00000407 movl $13, %edx + 0x48, 0x3d, 0x95, 0x73, 0xc2, 0x48, //0x0000040c cmpq $1220703125, %rax + 0x0f, 0x82, 0x45, 0x00, 0x00, 0x00, //0x00000412 jb LBB1_30 + 0xba, 0x0e, 0x00, 0x00, 0x00, //0x00000418 movl $14, %edx + 0x48, 0xb8, 0x00, 0x40, 0x7a, 0x10, 0xf3, 0x5a, 0x00, 0x00, //0x0000041d movabsq $100000000000000, %rax + 0x48, 0x39, 0xc7, //0x00000427 cmpq %rax, %rdi + 0x0f, 0x82, 0x2d, 0x00, 0x00, 0x00, //0x0000042a jb LBB1_30 + 0xba, 0x0f, 0x00, 0x00, 0x00, //0x00000430 movl $15, %edx + 0x48, 0xb8, 0x00, 0x80, 0xc6, 0xa4, 0x7e, 0x8d, 0x03, 0x00, //0x00000435 movabsq $1000000000000000, %rax + 0x48, 0x39, 0xc7, //0x0000043f cmpq %rax, %rdi + 0x0f, 0x82, 0x15, 0x00, 0x00, 0x00, //0x00000442 jb LBB1_30 + 0x48, 0xb8, 0x00, 0x00, 0xc1, 0x6f, 0xf2, 0x86, 0x23, 0x00, //0x00000448 movabsq $10000000000000000, %rax + 0x48, 0x39, 0xc7, //0x00000452 cmpq %rax, %rdi + 0xba, 0x11, 0x00, 0x00, 0x00, //0x00000455 movl $17, %edx + //0x0000045a LBB1_29 + 0x83, 0xda, 0x00, //0x0000045a sbbl $0, %edx + //0x0000045d LBB1_30 + 0x46, 0x8d, 0x2c, 0x0a, //0x0000045d leal (%rdx,%r9), %r13d + 0x42, 0x8d, 0x44, 0x0a, 0x05, //0x00000461 leal $5(%rdx,%r9), %eax + 0x83, 0xf8, 0x1b, //0x00000466 cmpl $27, %eax + 0x0f, 0x82, 0x95, 0x00, 0x00, 0x00, //0x00000469 jb LBB1_38 + 0x4d, 0x8d, 0x67, 0x01, //0x0000046f leaq $1(%r15), %r12 + 0x4c, 0x89, 0xe6, //0x00000473 movq %r12, %rsi + 0xe8, 0x35, 0x85, 0x00, 0x00, //0x00000476 callq _format_significand + 0x48, 0x89, 0xc3, //0x0000047b movq %rax, %rbx + 0x90, 0x90, //0x0000047e .p2align 4, 0x90 + //0x00000480 LBB1_32 + 0x80, 0x7b, 0xff, 0x30, //0x00000480 cmpb $48, $-1(%rbx) + 0x48, 0x8d, 0x5b, 0xff, //0x00000484 leaq $-1(%rbx), %rbx + 0x0f, 0x84, 0xf2, 0xff, 0xff, 0xff, //0x00000488 je LBB1_32 + 0x41, 0x8a, 0x47, 0x01, //0x0000048e movb $1(%r15), %al + 0x41, 0x88, 0x07, //0x00000492 movb %al, (%r15) + 0x48, 0x8d, 0x43, 0x01, //0x00000495 leaq $1(%rbx), %rax + 0x48, 0x89, 0xc1, //0x00000499 movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x0000049c subq %r12, %rcx + 0x48, 0x83, 0xf9, 0x02, //0x0000049f cmpq $2, %rcx + 0x0f, 0x8c, 0x08, 0x00, 0x00, 0x00, //0x000004a3 jl LBB1_35 + 0x41, 0xc6, 0x04, 0x24, 0x2e, //0x000004a9 movb $46, (%r12) + 0x48, 0x89, 0xc3, //0x000004ae movq %rax, %rbx + //0x000004b1 LBB1_35 + 0xc6, 0x03, 0x65, //0x000004b1 movb $101, (%rbx) + 0x45, 0x85, 0xed, //0x000004b4 testl %r13d, %r13d + 0x0f, 0x8e, 0x5a, 0x01, 0x00, 0x00, //0x000004b7 jle LBB1_51 + 0x41, 0xff, 0xcd, //0x000004bd decl %r13d + 0xc6, 0x43, 0x01, 0x2b, //0x000004c0 movb $43, $1(%rbx) + 0x44, 0x89, 0xe8, //0x000004c4 movl %r13d, %eax + 0x83, 0xf8, 0x64, //0x000004c7 cmpl $100, %eax + 0x0f, 0x8c, 0x5c, 0x01, 0x00, 0x00, //0x000004ca jl LBB1_52 + //0x000004d0 LBB1_37 + 0x89, 0xc1, //0x000004d0 movl %eax, %ecx + 0xba, 0xcd, 0xcc, 0xcc, 0xcc, //0x000004d2 movl $3435973837, %edx + 0x48, 0x0f, 0xaf, 0xd1, //0x000004d7 imulq %rcx, %rdx + 0x48, 0xc1, 0xea, 0x23, //0x000004db shrq $35, %rdx + 0x8d, 0x0c, 0x12, //0x000004df leal (%rdx,%rdx), %ecx + 0x8d, 0x0c, 0x89, //0x000004e2 leal (%rcx,%rcx,4), %ecx + 0x29, 0xc8, //0x000004e5 subl %ecx, %eax + 0x48, 0x8d, 0x0d, 0xa2, 0xb9, 0x00, 0x00, //0x000004e7 leaq $47522(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x51, //0x000004ee movzwl (%rcx,%rdx,2), %ecx + 0x66, 0x89, 0x4b, 0x02, //0x000004f2 movw %cx, $2(%rbx) + 0x0c, 0x30, //0x000004f6 orb $48, %al + 0x88, 0x43, 0x04, //0x000004f8 movb %al, $4(%rbx) + 0x48, 0x83, 0xc3, 0x05, //0x000004fb addq $5, %rbx + 0xe9, 0x9b, 0x06, 0x00, 0x00, //0x000004ff jmp LBB1_112 + //0x00000504 LBB1_38 + 0x45, 0x85, 0xc9, //0x00000504 testl %r9d, %r9d + 0x0f, 0x88, 0x42, 0x01, 0x00, 0x00, //0x00000507 js LBB1_54 + 0x4d, 0x63, 0xed, //0x0000050d movslq %r13d, %r13 + 0x4b, 0x8d, 0x1c, 0x2f, //0x00000510 leaq (%r15,%r13), %rbx + 0x4c, 0x89, 0xfe, //0x00000514 movq %r15, %rsi + 0xe8, 0xc4, 0x06, 0x00, 0x00, //0x00000517 callq _format_integer + 0x48, 0x39, 0xd8, //0x0000051c cmpq %rbx, %rax + 0x0f, 0x83, 0x7a, 0x06, 0x00, 0x00, //0x0000051f jae LBB1_112 + 0x4d, 0x01, 0xec, //0x00000525 addq %r13, %r12 + 0x49, 0x29, 0xc4, //0x00000528 subq %rax, %r12 + 0x4d, 0x01, 0xf4, //0x0000052b addq %r14, %r12 + 0x49, 0x81, 0xfc, 0x80, 0x00, 0x00, 0x00, //0x0000052e cmpq $128, %r12 + 0x0f, 0x82, 0x15, 0x03, 0x00, 0x00, //0x00000535 jb LBB1_76 + 0x4c, 0x89, 0xe1, //0x0000053b movq %r12, %rcx + 0x48, 0x83, 0xe1, 0x80, //0x0000053e andq $-128, %rcx + 0x48, 0x8d, 0x79, 0x80, //0x00000542 leaq $-128(%rcx), %rdi + 0x48, 0x89, 0xfe, //0x00000546 movq %rdi, %rsi + 0x48, 0xc1, 0xee, 0x07, //0x00000549 shrq $7, %rsi + 0x48, 0xff, 0xc6, //0x0000054d incq %rsi + 0x89, 0xf2, //0x00000550 movl %esi, %edx + 0x83, 0xe2, 0x03, //0x00000552 andl $3, %edx + 0x48, 0x81, 0xff, 0x80, 0x01, 0x00, 0x00, //0x00000555 cmpq $384, %rdi + 0x0f, 0x83, 0xf8, 0x01, 0x00, 0x00, //0x0000055c jae LBB1_69 + 0x31, 0xff, //0x00000562 xorl %edi, %edi + 0xe9, 0x9b, 0x02, 0x00, 0x00, //0x00000564 jmp LBB1_71 + //0x00000569 LBB1_43 + 0x48, 0xd3, 0xef, //0x00000569 shrq %cl, %rdi + 0x48, 0xb8, 0x80, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, //0x0000056c movabsq $8589934464, %rax + 0x48, 0x05, 0x7f, 0xe4, 0x0b, 0x54, //0x00000576 addq $1410065535, %rax + 0x48, 0x39, 0xc7, //0x0000057c cmpq %rax, %rdi + 0x0f, 0x86, 0x3b, 0x01, 0x00, 0x00, //0x0000057f jbe LBB1_60 + 0x48, 0x89, 0xf8, //0x00000585 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0b, //0x00000588 shrq $11, %rax + 0xba, 0x0b, 0x00, 0x00, 0x00, //0x0000058c movl $11, %edx + 0x48, 0x3d, 0xdd, 0x0e, 0xe9, 0x02, //0x00000591 cmpq $48828125, %rax + 0x0f, 0x82, 0xad, 0x01, 0x00, 0x00, //0x00000597 jb LBB1_68 + 0x48, 0x89, 0xf8, //0x0000059d movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0c, //0x000005a0 shrq $12, %rax + 0xba, 0x0c, 0x00, 0x00, 0x00, //0x000005a4 movl $12, %edx + 0x48, 0x3d, 0x51, 0x4a, 0x8d, 0x0e, //0x000005a9 cmpq $244140625, %rax + 0x0f, 0x82, 0x95, 0x01, 0x00, 0x00, //0x000005af jb LBB1_68 + 0x48, 0x89, 0xf8, //0x000005b5 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0d, //0x000005b8 shrq $13, %rax + 0xba, 0x0d, 0x00, 0x00, 0x00, //0x000005bc movl $13, %edx + 0x48, 0x3d, 0x95, 0x73, 0xc2, 0x48, //0x000005c1 cmpq $1220703125, %rax + 0x0f, 0x82, 0x7d, 0x01, 0x00, 0x00, //0x000005c7 jb LBB1_68 + 0xba, 0x0e, 0x00, 0x00, 0x00, //0x000005cd movl $14, %edx + 0x48, 0xb8, 0x00, 0x40, 0x7a, 0x10, 0xf3, 0x5a, 0x00, 0x00, //0x000005d2 movabsq $100000000000000, %rax + 0x48, 0x39, 0xc7, //0x000005dc cmpq %rax, %rdi + 0x0f, 0x82, 0x65, 0x01, 0x00, 0x00, //0x000005df jb LBB1_68 + 0xba, 0x0f, 0x00, 0x00, 0x00, //0x000005e5 movl $15, %edx + 0x48, 0xb8, 0x00, 0x80, 0xc6, 0xa4, 0x7e, 0x8d, 0x03, 0x00, //0x000005ea movabsq $1000000000000000, %rax + 0x48, 0x39, 0xc7, //0x000005f4 cmpq %rax, %rdi + 0x0f, 0x82, 0x4d, 0x01, 0x00, 0x00, //0x000005f7 jb LBB1_68 + 0x48, 0xb8, 0x00, 0x00, 0xc1, 0x6f, 0xf2, 0x86, 0x23, 0x00, //0x000005fd movabsq $10000000000000000, %rax + 0x48, 0x39, 0xc7, //0x00000607 cmpq %rax, %rdi + 0xba, 0x11, 0x00, 0x00, 0x00, //0x0000060a movl $17, %edx + //0x0000060f LBB1_50 + 0x83, 0xda, 0x00, //0x0000060f sbbl $0, %edx + 0xe9, 0x33, 0x01, 0x00, 0x00, //0x00000612 jmp LBB1_68 + //0x00000617 LBB1_51 + 0xc6, 0x43, 0x01, 0x2d, //0x00000617 movb $45, $1(%rbx) + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x0000061b movl $1, %eax + 0x44, 0x29, 0xe8, //0x00000620 subl %r13d, %eax + 0x83, 0xf8, 0x64, //0x00000623 cmpl $100, %eax + 0x0f, 0x8d, 0xa4, 0xfe, 0xff, 0xff, //0x00000626 jge LBB1_37 + //0x0000062c LBB1_52 + 0x83, 0xf8, 0x0a, //0x0000062c cmpl $10, %eax + 0x0f, 0x8c, 0x7d, 0x00, 0x00, 0x00, //0x0000062f jl LBB1_59 + 0x48, 0x98, //0x00000635 cltq + 0x48, 0x8d, 0x0d, 0x52, 0xb8, 0x00, 0x00, //0x00000637 leaq $47186(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x0000063e movzwl (%rcx,%rax,2), %eax + 0x66, 0x89, 0x43, 0x02, //0x00000642 movw %ax, $2(%rbx) + 0x48, 0x83, 0xc3, 0x04, //0x00000646 addq $4, %rbx + 0xe9, 0x50, 0x05, 0x00, 0x00, //0x0000064a jmp LBB1_112 + //0x0000064f LBB1_54 + 0x45, 0x85, 0xed, //0x0000064f testl %r13d, %r13d + 0x0f, 0x8f, 0x19, 0x03, 0x00, 0x00, //0x00000652 jg LBB1_85 + 0x66, 0x41, 0xc7, 0x07, 0x30, 0x2e, //0x00000658 movw $11824, (%r15) + 0x49, 0x83, 0xc7, 0x02, //0x0000065e addq $2, %r15 + 0x45, 0x85, 0xed, //0x00000662 testl %r13d, %r13d + 0x0f, 0x89, 0x06, 0x03, 0x00, 0x00, //0x00000665 jns LBB1_85 + 0x31, 0xc0, //0x0000066b xorl %eax, %eax + 0x41, 0x83, 0xfd, 0x80, //0x0000066d cmpl $-128, %r13d + 0x0f, 0x87, 0xe1, 0x02, 0x00, 0x00, //0x00000671 ja LBB1_83 + 0x45, 0x89, 0xe8, //0x00000677 movl %r13d, %r8d + 0x41, 0xf7, 0xd0, //0x0000067a notl %r8d + 0x49, 0xff, 0xc0, //0x0000067d incq %r8 + 0x4c, 0x89, 0xc0, //0x00000680 movq %r8, %rax + 0x49, 0x89, 0xda, //0x00000683 movq %rbx, %r10 + 0x48, 0x21, 0xd8, //0x00000686 andq %rbx, %rax + 0x48, 0x8d, 0x48, 0x80, //0x00000689 leaq $-128(%rax), %rcx + 0x48, 0x89, 0xcb, //0x0000068d movq %rcx, %rbx + 0x48, 0xc1, 0xeb, 0x07, //0x00000690 shrq $7, %rbx + 0x48, 0xff, 0xc3, //0x00000694 incq %rbx + 0x41, 0x89, 0xd9, //0x00000697 movl %ebx, %r9d + 0x41, 0x83, 0xe1, 0x03, //0x0000069a andl $3, %r9d + 0x48, 0x81, 0xf9, 0x80, 0x01, 0x00, 0x00, //0x0000069e cmpq $384, %rcx + 0x0f, 0x83, 0xb9, 0x01, 0x00, 0x00, //0x000006a5 jae LBB1_77 + 0x31, 0xdb, //0x000006ab xorl %ebx, %ebx + 0xe9, 0x5b, 0x02, 0x00, 0x00, //0x000006ad jmp LBB1_79 + //0x000006b2 LBB1_59 + 0x04, 0x30, //0x000006b2 addb $48, %al + 0x88, 0x43, 0x02, //0x000006b4 movb %al, $2(%rbx) + 0x48, 0x83, 0xc3, 0x03, //0x000006b7 addq $3, %rbx + 0xe9, 0xdf, 0x04, 0x00, 0x00, //0x000006bb jmp LBB1_112 + //0x000006c0 LBB1_60 + 0xba, 0x01, 0x00, 0x00, 0x00, //0x000006c0 movl $1, %edx + 0x48, 0x83, 0xff, 0x0a, //0x000006c5 cmpq $10, %rdi + 0x0f, 0x82, 0x7b, 0x00, 0x00, 0x00, //0x000006c9 jb LBB1_68 + 0xba, 0x02, 0x00, 0x00, 0x00, //0x000006cf movl $2, %edx + 0x48, 0x83, 0xff, 0x64, //0x000006d4 cmpq $100, %rdi + 0x0f, 0x82, 0x6c, 0x00, 0x00, 0x00, //0x000006d8 jb LBB1_68 + 0xba, 0x03, 0x00, 0x00, 0x00, //0x000006de movl $3, %edx + 0x48, 0x81, 0xff, 0xe8, 0x03, 0x00, 0x00, //0x000006e3 cmpq $1000, %rdi + 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x000006ea jb LBB1_68 + 0xba, 0x04, 0x00, 0x00, 0x00, //0x000006f0 movl $4, %edx + 0x48, 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x000006f5 cmpq $10000, %rdi + 0x0f, 0x82, 0x48, 0x00, 0x00, 0x00, //0x000006fc jb LBB1_68 + 0xba, 0x05, 0x00, 0x00, 0x00, //0x00000702 movl $5, %edx + 0x48, 0x81, 0xff, 0xa0, 0x86, 0x01, 0x00, //0x00000707 cmpq $100000, %rdi + 0x0f, 0x82, 0x36, 0x00, 0x00, 0x00, //0x0000070e jb LBB1_68 + 0xba, 0x06, 0x00, 0x00, 0x00, //0x00000714 movl $6, %edx + 0x48, 0x81, 0xff, 0x40, 0x42, 0x0f, 0x00, //0x00000719 cmpq $1000000, %rdi + 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x00000720 jb LBB1_68 + 0xba, 0x07, 0x00, 0x00, 0x00, //0x00000726 movl $7, %edx + 0x48, 0x81, 0xff, 0x80, 0x96, 0x98, 0x00, //0x0000072b cmpq $10000000, %rdi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00000732 jb LBB1_68 + 0xba, 0x08, 0x00, 0x00, 0x00, //0x00000738 movl $8, %edx + 0x48, 0x81, 0xff, 0x00, 0xe1, 0xf5, 0x05, //0x0000073d cmpq $100000000, %rdi + 0x0f, 0x83, 0x80, 0x04, 0x00, 0x00, //0x00000744 jae LBB1_116 + //0x0000074a LBB1_68 + 0x4c, 0x89, 0xfe, //0x0000074a movq %r15, %rsi + 0xe8, 0x8e, 0x04, 0x00, 0x00, //0x0000074d callq _format_integer + 0x48, 0x89, 0xc3, //0x00000752 movq %rax, %rbx + 0xe9, 0x45, 0x04, 0x00, 0x00, //0x00000755 jmp LBB1_112 + //0x0000075a LBB1_69 + 0x48, 0x29, 0xd6, //0x0000075a subq %rdx, %rsi + 0x31, 0xff, //0x0000075d xorl %edi, %edi + 0xc5, 0xfd, 0x6f, 0x05, 0x39, 0xf9, 0xff, 0xff, //0x0000075f vmovdqa $-1735(%rip), %ymm0 /* LCPI1_0+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000767 .p2align 4, 0x90 + //0x00000770 LBB1_70 + 0xc5, 0xfe, 0x7f, 0x04, 0x38, //0x00000770 vmovdqu %ymm0, (%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x20, //0x00000775 vmovdqu %ymm0, $32(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x40, //0x0000077b vmovdqu %ymm0, $64(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x60, //0x00000781 vmovdqu %ymm0, $96(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x80, 0x00, 0x00, 0x00, //0x00000787 vmovdqu %ymm0, $128(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xa0, 0x00, 0x00, 0x00, //0x00000790 vmovdqu %ymm0, $160(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xc0, 0x00, 0x00, 0x00, //0x00000799 vmovdqu %ymm0, $192(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xe0, 0x00, 0x00, 0x00, //0x000007a2 vmovdqu %ymm0, $224(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x00, 0x01, 0x00, 0x00, //0x000007ab vmovdqu %ymm0, $256(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x20, 0x01, 0x00, 0x00, //0x000007b4 vmovdqu %ymm0, $288(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x40, 0x01, 0x00, 0x00, //0x000007bd vmovdqu %ymm0, $320(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x60, 0x01, 0x00, 0x00, //0x000007c6 vmovdqu %ymm0, $352(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x80, 0x01, 0x00, 0x00, //0x000007cf vmovdqu %ymm0, $384(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xa0, 0x01, 0x00, 0x00, //0x000007d8 vmovdqu %ymm0, $416(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xc0, 0x01, 0x00, 0x00, //0x000007e1 vmovdqu %ymm0, $448(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xe0, 0x01, 0x00, 0x00, //0x000007ea vmovdqu %ymm0, $480(%rax,%rdi) + 0x48, 0x81, 0xc7, 0x00, 0x02, 0x00, 0x00, //0x000007f3 addq $512, %rdi + 0x48, 0x83, 0xc6, 0xfc, //0x000007fa addq $-4, %rsi + 0x0f, 0x85, 0x6c, 0xff, 0xff, 0xff, //0x000007fe jne LBB1_70 + //0x00000804 LBB1_71 + 0x48, 0x85, 0xd2, //0x00000804 testq %rdx, %rdx + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00000807 je LBB1_74 + 0x48, 0x8d, 0x74, 0x07, 0x60, //0x0000080d leaq $96(%rdi,%rax), %rsi + 0x48, 0xf7, 0xda, //0x00000812 negq %rdx + 0xc5, 0xfd, 0x6f, 0x05, 0x83, 0xf8, 0xff, 0xff, //0x00000815 vmovdqa $-1917(%rip), %ymm0 /* LCPI1_0+0(%rip) */ + 0x90, 0x90, 0x90, //0x0000081d .p2align 4, 0x90 + //0x00000820 LBB1_73 + 0xc5, 0xfe, 0x7f, 0x46, 0xa0, //0x00000820 vmovdqu %ymm0, $-96(%rsi) + 0xc5, 0xfe, 0x7f, 0x46, 0xc0, //0x00000825 vmovdqu %ymm0, $-64(%rsi) + 0xc5, 0xfe, 0x7f, 0x46, 0xe0, //0x0000082a vmovdqu %ymm0, $-32(%rsi) + 0xc5, 0xfe, 0x7f, 0x06, //0x0000082f vmovdqu %ymm0, (%rsi) + 0x48, 0x83, 0xee, 0x80, //0x00000833 subq $-128, %rsi + 0x48, 0xff, 0xc2, //0x00000837 incq %rdx + 0x0f, 0x85, 0xe0, 0xff, 0xff, 0xff, //0x0000083a jne LBB1_73 + //0x00000840 LBB1_74 + 0x4c, 0x39, 0xe1, //0x00000840 cmpq %r12, %rcx + 0x0f, 0x84, 0x56, 0x03, 0x00, 0x00, //0x00000843 je LBB1_112 + 0x48, 0x01, 0xc8, //0x00000849 addq %rcx, %rax + 0x90, 0x90, 0x90, 0x90, //0x0000084c .p2align 4, 0x90 + //0x00000850 LBB1_76 + 0xc6, 0x00, 0x30, //0x00000850 movb $48, (%rax) + 0x48, 0xff, 0xc0, //0x00000853 incq %rax + 0x48, 0x39, 0xc3, //0x00000856 cmpq %rax, %rbx + 0x0f, 0x85, 0xf1, 0xff, 0xff, 0xff, //0x00000859 jne LBB1_76 + 0xe9, 0x3b, 0x03, 0x00, 0x00, //0x0000085f jmp LBB1_112 + //0x00000864 LBB1_77 + 0x4b, 0x8d, 0x8c, 0x34, 0xe2, 0x01, 0x00, 0x00, //0x00000864 leaq $482(%r12,%r14), %rcx + 0x4c, 0x89, 0xce, //0x0000086c movq %r9, %rsi + 0x48, 0x29, 0xde, //0x0000086f subq %rbx, %rsi + 0x31, 0xdb, //0x00000872 xorl %ebx, %ebx + 0xc5, 0xfd, 0x6f, 0x05, 0x24, 0xf8, 0xff, 0xff, //0x00000874 vmovdqa $-2012(%rip), %ymm0 /* LCPI1_0+0(%rip) */ + //0x0000087c LBB1_78 + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x20, 0xfe, 0xff, 0xff, //0x0000087c vmovdqu %ymm0, $-480(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x40, 0xfe, 0xff, 0xff, //0x00000885 vmovdqu %ymm0, $-448(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x60, 0xfe, 0xff, 0xff, //0x0000088e vmovdqu %ymm0, $-416(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x80, 0xfe, 0xff, 0xff, //0x00000897 vmovdqu %ymm0, $-384(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0xa0, 0xfe, 0xff, 0xff, //0x000008a0 vmovdqu %ymm0, $-352(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0xc0, 0xfe, 0xff, 0xff, //0x000008a9 vmovdqu %ymm0, $-320(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0xe0, 0xfe, 0xff, 0xff, //0x000008b2 vmovdqu %ymm0, $-288(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x00, 0xff, 0xff, 0xff, //0x000008bb vmovdqu %ymm0, $-256(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x20, 0xff, 0xff, 0xff, //0x000008c4 vmovdqu %ymm0, $-224(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x40, 0xff, 0xff, 0xff, //0x000008cd vmovdqu %ymm0, $-192(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x60, 0xff, 0xff, 0xff, //0x000008d6 vmovdqu %ymm0, $-160(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x19, 0x80, //0x000008df vmovdqu %ymm0, $-128(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x19, 0xa0, //0x000008e5 vmovdqu %ymm0, $-96(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x19, 0xc0, //0x000008eb vmovdqu %ymm0, $-64(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x19, 0xe0, //0x000008f1 vmovdqu %ymm0, $-32(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x04, 0x19, //0x000008f7 vmovdqu %ymm0, (%rcx,%rbx) + 0x48, 0x81, 0xc3, 0x00, 0x02, 0x00, 0x00, //0x000008fc addq $512, %rbx + 0x48, 0x83, 0xc6, 0x04, //0x00000903 addq $4, %rsi + 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00000907 jne LBB1_78 + //0x0000090d LBB1_79 + 0x4d, 0x85, 0xc9, //0x0000090d testq %r9, %r9 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00000910 je LBB1_82 + 0x4c, 0x01, 0xe3, //0x00000916 addq %r12, %rbx + 0x49, 0x8d, 0x4c, 0x1e, 0x62, //0x00000919 leaq $98(%r14,%rbx), %rcx + 0x49, 0xf7, 0xd9, //0x0000091e negq %r9 + 0xc5, 0xfd, 0x6f, 0x05, 0x77, 0xf7, 0xff, 0xff, //0x00000921 vmovdqa $-2185(%rip), %ymm0 /* LCPI1_0+0(%rip) */ + //0x00000929 LBB1_81 + 0xc5, 0xfe, 0x7f, 0x41, 0xa0, //0x00000929 vmovdqu %ymm0, $-96(%rcx) + 0xc5, 0xfe, 0x7f, 0x41, 0xc0, //0x0000092e vmovdqu %ymm0, $-64(%rcx) + 0xc5, 0xfe, 0x7f, 0x41, 0xe0, //0x00000933 vmovdqu %ymm0, $-32(%rcx) + 0xc5, 0xfe, 0x7f, 0x01, //0x00000938 vmovdqu %ymm0, (%rcx) + 0x48, 0x83, 0xe9, 0x80, //0x0000093c subq $-128, %rcx + 0x49, 0xff, 0xc1, //0x00000940 incq %r9 + 0x0f, 0x85, 0xe0, 0xff, 0xff, 0xff, //0x00000943 jne LBB1_81 + //0x00000949 LBB1_82 + 0x49, 0x01, 0xc7, //0x00000949 addq %rax, %r15 + 0x49, 0x39, 0xc0, //0x0000094c cmpq %rax, %r8 + 0x4c, 0x89, 0xd3, //0x0000094f movq %r10, %rbx + 0x0f, 0x84, 0x19, 0x00, 0x00, 0x00, //0x00000952 je LBB1_85 + //0x00000958 LBB1_83 + 0x44, 0x89, 0xe9, //0x00000958 movl %r13d, %ecx + 0xf7, 0xd9, //0x0000095b negl %ecx + 0x90, 0x90, 0x90, //0x0000095d .p2align 4, 0x90 + //0x00000960 LBB1_84 + 0x41, 0xc6, 0x07, 0x30, //0x00000960 movb $48, (%r15) + 0x49, 0xff, 0xc7, //0x00000964 incq %r15 + 0xff, 0xc0, //0x00000967 incl %eax + 0x39, 0xc8, //0x00000969 cmpl %ecx, %eax + 0x0f, 0x8c, 0xef, 0xff, 0xff, 0xff, //0x0000096b jl LBB1_84 + //0x00000971 LBB1_85 + 0x4c, 0x89, 0xfe, //0x00000971 movq %r15, %rsi + 0xc5, 0xf8, 0x77, //0x00000974 vzeroupper + 0xe8, 0x34, 0x80, 0x00, 0x00, //0x00000977 callq _format_significand + 0x90, 0x90, 0x90, 0x90, //0x0000097c .p2align 4, 0x90 + //0x00000980 LBB1_86 + 0x80, 0x78, 0xff, 0x30, //0x00000980 cmpb $48, $-1(%rax) + 0x48, 0x8d, 0x40, 0xff, //0x00000984 leaq $-1(%rax), %rax + 0x0f, 0x84, 0xf2, 0xff, 0xff, 0xff, //0x00000988 je LBB1_86 + 0x48, 0x8d, 0x48, 0x01, //0x0000098e leaq $1(%rax), %rcx + 0x45, 0x85, 0xed, //0x00000992 testl %r13d, %r13d + 0x0f, 0x8e, 0x83, 0x00, 0x00, 0x00, //0x00000995 jle LBB1_91 + 0x89, 0xca, //0x0000099b movl %ecx, %edx + 0x44, 0x29, 0xfa, //0x0000099d subl %r15d, %edx + 0x41, 0x39, 0xd5, //0x000009a0 cmpl %edx, %r13d + 0x0f, 0x8d, 0x21, 0x00, 0x00, 0x00, //0x000009a3 jge LBB1_92 + 0x43, 0x8d, 0x54, 0x3d, 0x00, //0x000009a9 leal (%r13,%r15), %edx + 0x29, 0xd1, //0x000009ae subl %edx, %ecx + 0x48, 0x8d, 0x71, 0xff, //0x000009b0 leaq $-1(%rcx), %rsi + 0x89, 0xca, //0x000009b4 movl %ecx, %edx + 0x83, 0xe2, 0x03, //0x000009b6 andl $3, %edx + 0x48, 0x83, 0xfe, 0x03, //0x000009b9 cmpq $3, %rsi + 0x0f, 0x83, 0x63, 0x00, 0x00, 0x00, //0x000009bd jae LBB1_96 + 0x31, 0xc9, //0x000009c3 xorl %ecx, %ecx + 0xe9, 0x7e, 0x00, 0x00, 0x00, //0x000009c5 jmp LBB1_99 + //0x000009ca LBB1_92 + 0x0f, 0x8e, 0x4e, 0x00, 0x00, 0x00, //0x000009ca jle LBB1_91 + 0x48, 0x89, 0xde, //0x000009d0 movq %rbx, %rsi + 0x45, 0x01, 0xfd, //0x000009d3 addl %r15d, %r13d + 0x41, 0x89, 0xc8, //0x000009d6 movl %ecx, %r8d + 0x41, 0xf7, 0xd0, //0x000009d9 notl %r8d + 0x45, 0x01, 0xe8, //0x000009dc addl %r13d, %r8d + 0x31, 0xd2, //0x000009df xorl %edx, %edx + 0x48, 0x89, 0xcb, //0x000009e1 movq %rcx, %rbx + 0x41, 0x83, 0xf8, 0x7e, //0x000009e4 cmpl $126, %r8d + 0x0f, 0x86, 0x8f, 0x01, 0x00, 0x00, //0x000009e8 jbe LBB1_110 + 0x49, 0xff, 0xc0, //0x000009ee incq %r8 + 0x48, 0x89, 0xf3, //0x000009f1 movq %rsi, %rbx + 0x4c, 0x21, 0xc3, //0x000009f4 andq %r8, %rbx + 0x48, 0x8d, 0x73, 0x80, //0x000009f7 leaq $-128(%rbx), %rsi + 0x48, 0x89, 0xf7, //0x000009fb movq %rsi, %rdi + 0x48, 0xc1, 0xef, 0x07, //0x000009fe shrq $7, %rdi + 0x48, 0xff, 0xc7, //0x00000a02 incq %rdi + 0x89, 0xfa, //0x00000a05 movl %edi, %edx + 0x83, 0xe2, 0x03, //0x00000a07 andl $3, %edx + 0x48, 0x81, 0xfe, 0x80, 0x01, 0x00, 0x00, //0x00000a0a cmpq $384, %rsi + 0x0f, 0x83, 0x75, 0x00, 0x00, 0x00, //0x00000a11 jae LBB1_104 + 0x31, 0xff, //0x00000a17 xorl %edi, %edi + 0xe9, 0x13, 0x01, 0x00, 0x00, //0x00000a19 jmp LBB1_106 + //0x00000a1e LBB1_91 + 0x48, 0x89, 0xcb, //0x00000a1e movq %rcx, %rbx + 0xe9, 0x79, 0x01, 0x00, 0x00, //0x00000a21 jmp LBB1_112 + //0x00000a26 LBB1_96 + 0x48, 0x89, 0xd6, //0x00000a26 movq %rdx, %rsi + 0x48, 0x29, 0xce, //0x00000a29 subq %rcx, %rsi + 0x31, 0xc9, //0x00000a2c xorl %ecx, %ecx + 0x90, 0x90, //0x00000a2e .p2align 4, 0x90 + //0x00000a30 LBB1_97 + 0x8b, 0x7c, 0x08, 0xfd, //0x00000a30 movl $-3(%rax,%rcx), %edi + 0x89, 0x7c, 0x08, 0xfe, //0x00000a34 movl %edi, $-2(%rax,%rcx) + 0x48, 0x83, 0xc1, 0xfc, //0x00000a38 addq $-4, %rcx + 0x48, 0x39, 0xce, //0x00000a3c cmpq %rcx, %rsi + 0x0f, 0x85, 0xeb, 0xff, 0xff, 0xff, //0x00000a3f jne LBB1_97 + 0x48, 0xf7, 0xd9, //0x00000a45 negq %rcx + //0x00000a48 LBB1_99 + 0x48, 0x85, 0xd2, //0x00000a48 testq %rdx, %rdx + 0x0f, 0x84, 0x27, 0x00, 0x00, 0x00, //0x00000a4b je LBB1_102 + 0x48, 0xf7, 0xd9, //0x00000a51 negq %rcx + 0x48, 0xf7, 0xda, //0x00000a54 negq %rdx + 0x31, 0xf6, //0x00000a57 xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000a59 .p2align 4, 0x90 + //0x00000a60 LBB1_101 + 0x48, 0x8d, 0x3c, 0x31, //0x00000a60 leaq (%rcx,%rsi), %rdi + 0x0f, 0xb6, 0x1c, 0x38, //0x00000a64 movzbl (%rax,%rdi), %ebx + 0x88, 0x5c, 0x38, 0x01, //0x00000a68 movb %bl, $1(%rax,%rdi) + 0x48, 0xff, 0xce, //0x00000a6c decq %rsi + 0x48, 0x39, 0xf2, //0x00000a6f cmpq %rsi, %rdx + 0x0f, 0x85, 0xe8, 0xff, 0xff, 0xff, //0x00000a72 jne LBB1_101 + //0x00000a78 LBB1_102 + 0x49, 0x63, 0xcd, //0x00000a78 movslq %r13d, %rcx + 0x41, 0xc6, 0x04, 0x0f, 0x2e, //0x00000a7b movb $46, (%r15,%rcx) + 0x48, 0x83, 0xc0, 0x02, //0x00000a80 addq $2, %rax + 0x48, 0x89, 0xc3, //0x00000a84 movq %rax, %rbx + 0xe9, 0x13, 0x01, 0x00, 0x00, //0x00000a87 jmp LBB1_112 + //0x00000a8c LBB1_104 + 0x48, 0x89, 0xd6, //0x00000a8c movq %rdx, %rsi + 0x48, 0x29, 0xfe, //0x00000a8f subq %rdi, %rsi + 0x31, 0xff, //0x00000a92 xorl %edi, %edi + 0xc5, 0xfd, 0x6f, 0x05, 0x04, 0xf6, 0xff, 0xff, //0x00000a94 vmovdqa $-2556(%rip), %ymm0 /* LCPI1_0+0(%rip) */ + //0x00000a9c LBB1_105 + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x01, //0x00000a9c vmovdqu %ymm0, $1(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x21, //0x00000aa2 vmovdqu %ymm0, $33(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x41, //0x00000aa8 vmovdqu %ymm0, $65(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x61, //0x00000aae vmovdqu %ymm0, $97(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x81, 0x00, 0x00, 0x00, //0x00000ab4 vmovdqu %ymm0, $129(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xa1, 0x00, 0x00, 0x00, //0x00000abd vmovdqu %ymm0, $161(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xc1, 0x00, 0x00, 0x00, //0x00000ac6 vmovdqu %ymm0, $193(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xe1, 0x00, 0x00, 0x00, //0x00000acf vmovdqu %ymm0, $225(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x01, 0x01, 0x00, 0x00, //0x00000ad8 vmovdqu %ymm0, $257(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x21, 0x01, 0x00, 0x00, //0x00000ae1 vmovdqu %ymm0, $289(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x41, 0x01, 0x00, 0x00, //0x00000aea vmovdqu %ymm0, $321(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x61, 0x01, 0x00, 0x00, //0x00000af3 vmovdqu %ymm0, $353(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x81, 0x01, 0x00, 0x00, //0x00000afc vmovdqu %ymm0, $385(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xa1, 0x01, 0x00, 0x00, //0x00000b05 vmovdqu %ymm0, $417(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xc1, 0x01, 0x00, 0x00, //0x00000b0e vmovdqu %ymm0, $449(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xe1, 0x01, 0x00, 0x00, //0x00000b17 vmovdqu %ymm0, $481(%rax,%rdi) + 0x48, 0x81, 0xc7, 0x00, 0x02, 0x00, 0x00, //0x00000b20 addq $512, %rdi + 0x48, 0x83, 0xc6, 0x04, //0x00000b27 addq $4, %rsi + 0x0f, 0x85, 0x6b, 0xff, 0xff, 0xff, //0x00000b2b jne LBB1_105 + //0x00000b31 LBB1_106 + 0x48, 0x89, 0xde, //0x00000b31 movq %rbx, %rsi + 0x48, 0x8d, 0x5c, 0x18, 0x01, //0x00000b34 leaq $1(%rax,%rbx), %rbx + 0x48, 0x85, 0xd2, //0x00000b39 testq %rdx, %rdx + 0x0f, 0x84, 0x30, 0x00, 0x00, 0x00, //0x00000b3c je LBB1_109 + 0x48, 0x8d, 0x44, 0x38, 0x61, //0x00000b42 leaq $97(%rax,%rdi), %rax + 0x48, 0xf7, 0xda, //0x00000b47 negq %rdx + 0xc5, 0xfd, 0x6f, 0x05, 0x4e, 0xf5, 0xff, 0xff, //0x00000b4a vmovdqa $-2738(%rip), %ymm0 /* LCPI1_0+0(%rip) */ + //0x00000b52 LBB1_108 + 0xc5, 0xfe, 0x7f, 0x40, 0xa0, //0x00000b52 vmovdqu %ymm0, $-96(%rax) + 0xc5, 0xfe, 0x7f, 0x40, 0xc0, //0x00000b57 vmovdqu %ymm0, $-64(%rax) + 0xc5, 0xfe, 0x7f, 0x40, 0xe0, //0x00000b5c vmovdqu %ymm0, $-32(%rax) + 0xc5, 0xfe, 0x7f, 0x00, //0x00000b61 vmovdqu %ymm0, (%rax) + 0x48, 0x83, 0xe8, 0x80, //0x00000b65 subq $-128, %rax + 0x48, 0xff, 0xc2, //0x00000b69 incq %rdx + 0x0f, 0x85, 0xe0, 0xff, 0xff, 0xff, //0x00000b6c jne LBB1_108 + //0x00000b72 LBB1_109 + 0x89, 0xf2, //0x00000b72 movl %esi, %edx + 0x49, 0x39, 0xf0, //0x00000b74 cmpq %rsi, %r8 + 0x0f, 0x84, 0x22, 0x00, 0x00, 0x00, //0x00000b77 je LBB1_112 + //0x00000b7d LBB1_110 + 0x41, 0x29, 0xd5, //0x00000b7d subl %edx, %r13d + 0x41, 0x29, 0xcd, //0x00000b80 subl %ecx, %r13d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000b83 .p2align 4, 0x90 + //0x00000b90 LBB1_111 + 0xc6, 0x03, 0x30, //0x00000b90 movb $48, (%rbx) + 0x48, 0xff, 0xc3, //0x00000b93 incq %rbx + 0x41, 0xff, 0xcd, //0x00000b96 decl %r13d + 0x0f, 0x85, 0xf1, 0xff, 0xff, 0xff, //0x00000b99 jne LBB1_111 + //0x00000b9f LBB1_112 + 0x44, 0x29, 0xf3, //0x00000b9f subl %r14d, %ebx + //0x00000ba2 LBB1_113 + 0x89, 0xd8, //0x00000ba2 movl %ebx, %eax + 0x48, 0x83, 0xc4, 0x08, //0x00000ba4 addq $8, %rsp + 0x5b, //0x00000ba8 popq %rbx + 0x41, 0x5c, //0x00000ba9 popq %r12 + 0x41, 0x5d, //0x00000bab popq %r13 + 0x41, 0x5e, //0x00000bad popq %r14 + 0x41, 0x5f, //0x00000baf popq %r15 + 0x5d, //0x00000bb1 popq %rbp + 0xc5, 0xf8, 0x77, //0x00000bb2 vzeroupper + 0xc3, //0x00000bb5 retq + //0x00000bb6 LBB1_114 + 0x31, 0xdb, //0x00000bb6 xorl %ebx, %ebx + 0xe9, 0xe5, 0xff, 0xff, 0xff, //0x00000bb8 jmp LBB1_113 + //0x00000bbd LBB1_115 + 0xbb, 0xce, 0xfb, 0xff, 0xff, //0x00000bbd movl $-1074, %ebx + 0x48, 0x89, 0xd7, //0x00000bc2 movq %rdx, %rdi + 0xe9, 0x8f, 0xf5, 0xff, 0xff, //0x00000bc5 jmp LBB1_5 + //0x00000bca LBB1_116 + 0x48, 0x81, 0xff, 0x00, 0xca, 0x9a, 0x3b, //0x00000bca cmpq $1000000000, %rdi + 0xba, 0x0a, 0x00, 0x00, 0x00, //0x00000bd1 movl $10, %edx + 0xe9, 0x34, 0xfa, 0xff, 0xff, //0x00000bd6 jmp LBB1_50 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000bdb .p2align 4, 0x90 + //0x00000be0 _format_integer + 0x55, //0x00000be0 pushq %rbp + 0x48, 0x89, 0xe5, //0x00000be1 movq %rsp, %rbp + 0x53, //0x00000be4 pushq %rbx + 0x41, 0x89, 0xd0, //0x00000be5 movl %edx, %r8d + 0x49, 0x01, 0xf0, //0x00000be8 addq %rsi, %r8 + 0x48, 0x89, 0xf8, //0x00000beb movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x20, //0x00000bee shrq $32, %rax + 0x0f, 0x84, 0xc3, 0x00, 0x00, 0x00, //0x00000bf2 je LBB2_1 + 0x48, 0xb9, 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x00000bf8 movabsq $-6067343680855748867, %rcx + 0x48, 0x89, 0xf8, //0x00000c02 movq %rdi, %rax + 0x48, 0xf7, 0xe1, //0x00000c05 mulq %rcx + 0x48, 0xc1, 0xea, 0x1a, //0x00000c08 shrq $26, %rdx + 0x69, 0xca, 0x00, 0x1f, 0x0a, 0xfa, //0x00000c0c imull $-100000000, %edx, %ecx + 0x01, 0xf9, //0x00000c12 addl %edi, %ecx + 0x41, 0xb9, 0x59, 0x17, 0xb7, 0xd1, //0x00000c14 movl $3518437209, %r9d + 0x48, 0x89, 0xc8, //0x00000c1a movq %rcx, %rax + 0x49, 0x0f, 0xaf, 0xc1, //0x00000c1d imulq %r9, %rax + 0x48, 0xc1, 0xe8, 0x2d, //0x00000c21 shrq $45, %rax + 0x69, 0xf8, 0x10, 0x27, 0x00, 0x00, //0x00000c25 imull $10000, %eax, %edi + 0x29, 0xf9, //0x00000c2b subl %edi, %ecx + 0x48, 0x89, 0xc7, //0x00000c2d movq %rax, %rdi + 0x49, 0x0f, 0xaf, 0xf9, //0x00000c30 imulq %r9, %rdi + 0x48, 0xc1, 0xef, 0x2d, //0x00000c34 shrq $45, %rdi + 0x69, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00000c38 imull $10000, %edi, %edi + 0x29, 0xf8, //0x00000c3e subl %edi, %eax + 0x0f, 0xb7, 0xf9, //0x00000c40 movzwl %cx, %edi + 0xc1, 0xef, 0x02, //0x00000c43 shrl $2, %edi + 0x44, 0x69, 0xcf, 0x7b, 0x14, 0x00, 0x00, //0x00000c46 imull $5243, %edi, %r9d + 0x41, 0xc1, 0xe9, 0x11, //0x00000c4d shrl $17, %r9d + 0x41, 0x6b, 0xf9, 0x64, //0x00000c51 imull $100, %r9d, %edi + 0x29, 0xf9, //0x00000c55 subl %edi, %ecx + 0x44, 0x0f, 0xb7, 0xd1, //0x00000c57 movzwl %cx, %r10d + 0x0f, 0xb7, 0xf8, //0x00000c5b movzwl %ax, %edi + 0xc1, 0xef, 0x02, //0x00000c5e shrl $2, %edi + 0x69, 0xff, 0x7b, 0x14, 0x00, 0x00, //0x00000c61 imull $5243, %edi, %edi + 0xc1, 0xef, 0x11, //0x00000c67 shrl $17, %edi + 0x6b, 0xcf, 0x64, //0x00000c6a imull $100, %edi, %ecx + 0x29, 0xc8, //0x00000c6d subl %ecx, %eax + 0x44, 0x0f, 0xb7, 0xd8, //0x00000c6f movzwl %ax, %r11d + 0x48, 0x8d, 0x0d, 0x16, 0xb2, 0x00, 0x00, //0x00000c73 leaq $45590(%rip), %rcx /* _Digits+0(%rip) */ + 0x42, 0x0f, 0xb7, 0x04, 0x51, //0x00000c7a movzwl (%rcx,%r10,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfe, //0x00000c7f movw %ax, $-2(%r8) + 0x42, 0x0f, 0xb7, 0x04, 0x49, //0x00000c84 movzwl (%rcx,%r9,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfc, //0x00000c89 movw %ax, $-4(%r8) + 0x42, 0x0f, 0xb7, 0x04, 0x59, //0x00000c8e movzwl (%rcx,%r11,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfa, //0x00000c93 movw %ax, $-6(%r8) + 0x4d, 0x8d, 0x58, 0xf8, //0x00000c98 leaq $-8(%r8), %r11 + 0x0f, 0xb7, 0x0c, 0x79, //0x00000c9c movzwl (%rcx,%rdi,2), %ecx + 0x66, 0x41, 0x89, 0x48, 0xf8, //0x00000ca0 movw %cx, $-8(%r8) + 0x48, 0x89, 0xd7, //0x00000ca5 movq %rdx, %rdi + 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00000ca8 cmpl $10000, %edi + 0x0f, 0x83, 0x16, 0x00, 0x00, 0x00, //0x00000cae jae LBB2_5 + //0x00000cb4 LBB2_4 + 0x89, 0xfa, //0x00000cb4 movl %edi, %edx + 0xe9, 0x6d, 0x00, 0x00, 0x00, //0x00000cb6 jmp LBB2_7 + //0x00000cbb LBB2_1 + 0x4d, 0x89, 0xc3, //0x00000cbb movq %r8, %r11 + 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00000cbe cmpl $10000, %edi + 0x0f, 0x82, 0xea, 0xff, 0xff, 0xff, //0x00000cc4 jb LBB2_4 + //0x00000cca LBB2_5 + 0x41, 0xb9, 0x59, 0x17, 0xb7, 0xd1, //0x00000cca movl $3518437209, %r9d + 0x4c, 0x8d, 0x15, 0xb9, 0xb1, 0x00, 0x00, //0x00000cd0 leaq $45497(%rip), %r10 /* _Digits+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000cd7 .p2align 4, 0x90 + //0x00000ce0 LBB2_6 + 0x89, 0xfa, //0x00000ce0 movl %edi, %edx + 0x49, 0x0f, 0xaf, 0xd1, //0x00000ce2 imulq %r9, %rdx + 0x48, 0xc1, 0xea, 0x2d, //0x00000ce6 shrq $45, %rdx + 0x69, 0xca, 0xf0, 0xd8, 0xff, 0xff, //0x00000cea imull $-10000, %edx, %ecx + 0x01, 0xf9, //0x00000cf0 addl %edi, %ecx + 0x48, 0x69, 0xc1, 0x1f, 0x85, 0xeb, 0x51, //0x00000cf2 imulq $1374389535, %rcx, %rax + 0x48, 0xc1, 0xe8, 0x25, //0x00000cf9 shrq $37, %rax + 0x6b, 0xd8, 0x64, //0x00000cfd imull $100, %eax, %ebx + 0x29, 0xd9, //0x00000d00 subl %ebx, %ecx + 0x41, 0x0f, 0xb7, 0x0c, 0x4a, //0x00000d02 movzwl (%r10,%rcx,2), %ecx + 0x66, 0x41, 0x89, 0x4b, 0xfe, //0x00000d07 movw %cx, $-2(%r11) + 0x41, 0x0f, 0xb7, 0x04, 0x42, //0x00000d0c movzwl (%r10,%rax,2), %eax + 0x66, 0x41, 0x89, 0x43, 0xfc, //0x00000d11 movw %ax, $-4(%r11) + 0x49, 0x83, 0xc3, 0xfc, //0x00000d16 addq $-4, %r11 + 0x81, 0xff, 0xff, 0xe0, 0xf5, 0x05, //0x00000d1a cmpl $99999999, %edi + 0x89, 0xd7, //0x00000d20 movl %edx, %edi + 0x0f, 0x87, 0xb8, 0xff, 0xff, 0xff, //0x00000d22 ja LBB2_6 + //0x00000d28 LBB2_7 + 0x83, 0xfa, 0x64, //0x00000d28 cmpl $100, %edx + 0x0f, 0x82, 0x2d, 0x00, 0x00, 0x00, //0x00000d2b jb LBB2_9 + 0x0f, 0xb7, 0xc2, //0x00000d31 movzwl %dx, %eax + 0xc1, 0xe8, 0x02, //0x00000d34 shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00000d37 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00000d3d shrl $17, %eax + 0x6b, 0xc8, 0x64, //0x00000d40 imull $100, %eax, %ecx + 0x29, 0xca, //0x00000d43 subl %ecx, %edx + 0x0f, 0xb7, 0xca, //0x00000d45 movzwl %dx, %ecx + 0x48, 0x8d, 0x15, 0x41, 0xb1, 0x00, 0x00, //0x00000d48 leaq $45377(%rip), %rdx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4a, //0x00000d4f movzwl (%rdx,%rcx,2), %ecx + 0x66, 0x41, 0x89, 0x4b, 0xfe, //0x00000d53 movw %cx, $-2(%r11) + 0x49, 0x83, 0xc3, 0xfe, //0x00000d58 addq $-2, %r11 + 0x89, 0xc2, //0x00000d5c movl %eax, %edx + //0x00000d5e LBB2_9 + 0x83, 0xfa, 0x0a, //0x00000d5e cmpl $10, %edx + 0x0f, 0x82, 0x18, 0x00, 0x00, 0x00, //0x00000d61 jb LBB2_11 + 0x89, 0xd0, //0x00000d67 movl %edx, %eax + 0x48, 0x8d, 0x0d, 0x20, 0xb1, 0x00, 0x00, //0x00000d69 leaq $45344(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x00000d70 movzwl (%rcx,%rax,2), %eax + 0x66, 0x41, 0x89, 0x43, 0xfe, //0x00000d74 movw %ax, $-2(%r11) + 0x4c, 0x89, 0xc0, //0x00000d79 movq %r8, %rax + 0x5b, //0x00000d7c popq %rbx + 0x5d, //0x00000d7d popq %rbp + 0xc3, //0x00000d7e retq + //0x00000d7f LBB2_11 + 0x80, 0xc2, 0x30, //0x00000d7f addb $48, %dl + 0x88, 0x16, //0x00000d82 movb %dl, (%rsi) + 0x4c, 0x89, 0xc0, //0x00000d84 movq %r8, %rax + 0x5b, //0x00000d87 popq %rbx + 0x5d, //0x00000d88 popq %rbp + 0xc3, //0x00000d89 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000d8a .p2align 4, 0x90 + //0x00000d90 _i64toa + 0x48, 0x85, 0xf6, //0x00000d90 testq %rsi, %rsi + 0x0f, 0x88, 0x05, 0x00, 0x00, 0x00, //0x00000d93 js LBB3_1 + 0xe9, 0x62, 0x00, 0x00, 0x00, //0x00000d99 jmp _u64toa + //0x00000d9e LBB3_1 + 0x55, //0x00000d9e pushq %rbp + 0x48, 0x89, 0xe5, //0x00000d9f movq %rsp, %rbp + 0xc6, 0x07, 0x2d, //0x00000da2 movb $45, (%rdi) + 0x48, 0xff, 0xc7, //0x00000da5 incq %rdi + 0x48, 0xf7, 0xde, //0x00000da8 negq %rsi + 0xe8, 0x50, 0x00, 0x00, 0x00, //0x00000dab callq _u64toa + 0xff, 0xc0, //0x00000db0 incl %eax + 0x5d, //0x00000db2 popq %rbp + 0xc3, //0x00000db3 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00000db4 .p2align 4, 0x00 + //0x00000dc0 LCPI4_0 + 0x59, 0x17, 0xb7, 0xd1, 0x00, 0x00, 0x00, 0x00, //0x00000dc0 .quad 3518437209 + 0x59, 0x17, 0xb7, 0xd1, 0x00, 0x00, 0x00, 0x00, //0x00000dc8 .quad 3518437209 + //0x00000dd0 LCPI4_3 + 0x0a, 0x00, //0x00000dd0 .word 10 + 0x0a, 0x00, //0x00000dd2 .word 10 + 0x0a, 0x00, //0x00000dd4 .word 10 + 0x0a, 0x00, //0x00000dd6 .word 10 + 0x0a, 0x00, //0x00000dd8 .word 10 + 0x0a, 0x00, //0x00000dda .word 10 + 0x0a, 0x00, //0x00000ddc .word 10 + 0x0a, 0x00, //0x00000dde .word 10 + //0x00000de0 LCPI4_4 + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x00000de0 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + //0x00000df0 .p2align 3, 0x00 + //0x00000df0 LCPI4_1 + 0xc5, 0x20, 0x7b, 0x14, 0x34, 0x33, 0x00, 0x80, //0x00000df0 .quad -9223315738079846203 + //0x00000df8 LCPI4_2 + 0x80, 0x00, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, //0x00000df8 .quad -9223336852348469120 + //0x00000e00 .p2align 4, 0x90 + //0x00000e00 _u64toa + 0x55, //0x00000e00 pushq %rbp + 0x48, 0x89, 0xe5, //0x00000e01 movq %rsp, %rbp + 0x48, 0x81, 0xfe, 0x0f, 0x27, 0x00, 0x00, //0x00000e04 cmpq $9999, %rsi + 0x0f, 0x87, 0xa2, 0x00, 0x00, 0x00, //0x00000e0b ja LBB4_8 + 0x0f, 0xb7, 0xc6, //0x00000e11 movzwl %si, %eax + 0xc1, 0xe8, 0x02, //0x00000e14 shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00000e17 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00000e1d shrl $17, %eax + 0x48, 0x8d, 0x14, 0x00, //0x00000e20 leaq (%rax,%rax), %rdx + 0x6b, 0xc0, 0x64, //0x00000e24 imull $100, %eax, %eax + 0x89, 0xf1, //0x00000e27 movl %esi, %ecx + 0x29, 0xc1, //0x00000e29 subl %eax, %ecx + 0x0f, 0xb7, 0xc1, //0x00000e2b movzwl %cx, %eax + 0x48, 0x01, 0xc0, //0x00000e2e addq %rax, %rax + 0x81, 0xfe, 0xe8, 0x03, 0x00, 0x00, //0x00000e31 cmpl $1000, %esi + 0x0f, 0x82, 0x16, 0x00, 0x00, 0x00, //0x00000e37 jb LBB4_3 + 0x48, 0x8d, 0x0d, 0x4c, 0xb0, 0x00, 0x00, //0x00000e3d leaq $45132(%rip), %rcx /* _Digits+0(%rip) */ + 0x8a, 0x0c, 0x0a, //0x00000e44 movb (%rdx,%rcx), %cl + 0x88, 0x0f, //0x00000e47 movb %cl, (%rdi) + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00000e49 movl $1, %ecx + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00000e4e jmp LBB4_4 + //0x00000e53 LBB4_3 + 0x31, 0xc9, //0x00000e53 xorl %ecx, %ecx + 0x83, 0xfe, 0x64, //0x00000e55 cmpl $100, %esi + 0x0f, 0x82, 0x45, 0x00, 0x00, 0x00, //0x00000e58 jb LBB4_5 + //0x00000e5e LBB4_4 + 0x0f, 0xb7, 0xd2, //0x00000e5e movzwl %dx, %edx + 0x48, 0x83, 0xca, 0x01, //0x00000e61 orq $1, %rdx + 0x48, 0x8d, 0x35, 0x24, 0xb0, 0x00, 0x00, //0x00000e65 leaq $45092(%rip), %rsi /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x32, //0x00000e6c movb (%rdx,%rsi), %dl + 0x89, 0xce, //0x00000e6f movl %ecx, %esi + 0xff, 0xc1, //0x00000e71 incl %ecx + 0x88, 0x14, 0x37, //0x00000e73 movb %dl, (%rdi,%rsi) + //0x00000e76 LBB4_6 + 0x48, 0x8d, 0x15, 0x13, 0xb0, 0x00, 0x00, //0x00000e76 leaq $45075(%rip), %rdx /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x10, //0x00000e7d movb (%rax,%rdx), %dl + 0x89, 0xce, //0x00000e80 movl %ecx, %esi + 0xff, 0xc1, //0x00000e82 incl %ecx + 0x88, 0x14, 0x37, //0x00000e84 movb %dl, (%rdi,%rsi) + //0x00000e87 LBB4_7 + 0x0f, 0xb7, 0xc0, //0x00000e87 movzwl %ax, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00000e8a orq $1, %rax + 0x48, 0x8d, 0x15, 0xfb, 0xaf, 0x00, 0x00, //0x00000e8e leaq $45051(%rip), %rdx /* _Digits+0(%rip) */ + 0x8a, 0x04, 0x10, //0x00000e95 movb (%rax,%rdx), %al + 0x89, 0xca, //0x00000e98 movl %ecx, %edx + 0xff, 0xc1, //0x00000e9a incl %ecx + 0x88, 0x04, 0x17, //0x00000e9c movb %al, (%rdi,%rdx) + 0x89, 0xc8, //0x00000e9f movl %ecx, %eax + 0x5d, //0x00000ea1 popq %rbp + 0xc3, //0x00000ea2 retq + //0x00000ea3 LBB4_5 + 0x31, 0xc9, //0x00000ea3 xorl %ecx, %ecx + 0x83, 0xfe, 0x0a, //0x00000ea5 cmpl $10, %esi + 0x0f, 0x83, 0xc8, 0xff, 0xff, 0xff, //0x00000ea8 jae LBB4_6 + 0xe9, 0xd4, 0xff, 0xff, 0xff, //0x00000eae jmp LBB4_7 + //0x00000eb3 LBB4_8 + 0x48, 0x81, 0xfe, 0xff, 0xe0, 0xf5, 0x05, //0x00000eb3 cmpq $99999999, %rsi + 0x0f, 0x87, 0x1e, 0x01, 0x00, 0x00, //0x00000eba ja LBB4_16 + 0x89, 0xf0, //0x00000ec0 movl %esi, %eax + 0xba, 0x59, 0x17, 0xb7, 0xd1, //0x00000ec2 movl $3518437209, %edx + 0x48, 0x0f, 0xaf, 0xd0, //0x00000ec7 imulq %rax, %rdx + 0x48, 0xc1, 0xea, 0x2d, //0x00000ecb shrq $45, %rdx + 0x44, 0x69, 0xc2, 0x10, 0x27, 0x00, 0x00, //0x00000ecf imull $10000, %edx, %r8d + 0x89, 0xf1, //0x00000ed6 movl %esi, %ecx + 0x44, 0x29, 0xc1, //0x00000ed8 subl %r8d, %ecx + 0x4c, 0x69, 0xd0, 0x83, 0xde, 0x1b, 0x43, //0x00000edb imulq $1125899907, %rax, %r10 + 0x49, 0xc1, 0xea, 0x31, //0x00000ee2 shrq $49, %r10 + 0x41, 0x83, 0xe2, 0xfe, //0x00000ee6 andl $-2, %r10d + 0x0f, 0xb7, 0xc2, //0x00000eea movzwl %dx, %eax + 0xc1, 0xe8, 0x02, //0x00000eed shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00000ef0 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00000ef6 shrl $17, %eax + 0x6b, 0xc0, 0x64, //0x00000ef9 imull $100, %eax, %eax + 0x29, 0xc2, //0x00000efc subl %eax, %edx + 0x44, 0x0f, 0xb7, 0xca, //0x00000efe movzwl %dx, %r9d + 0x4d, 0x01, 0xc9, //0x00000f02 addq %r9, %r9 + 0x0f, 0xb7, 0xc1, //0x00000f05 movzwl %cx, %eax + 0xc1, 0xe8, 0x02, //0x00000f08 shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00000f0b imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00000f11 shrl $17, %eax + 0x4c, 0x8d, 0x04, 0x00, //0x00000f14 leaq (%rax,%rax), %r8 + 0x6b, 0xc0, 0x64, //0x00000f18 imull $100, %eax, %eax + 0x29, 0xc1, //0x00000f1b subl %eax, %ecx + 0x44, 0x0f, 0xb7, 0xd9, //0x00000f1d movzwl %cx, %r11d + 0x4d, 0x01, 0xdb, //0x00000f21 addq %r11, %r11 + 0x81, 0xfe, 0x80, 0x96, 0x98, 0x00, //0x00000f24 cmpl $10000000, %esi + 0x0f, 0x82, 0x17, 0x00, 0x00, 0x00, //0x00000f2a jb LBB4_11 + 0x48, 0x8d, 0x05, 0x59, 0xaf, 0x00, 0x00, //0x00000f30 leaq $44889(%rip), %rax /* _Digits+0(%rip) */ + 0x41, 0x8a, 0x04, 0x02, //0x00000f37 movb (%r10,%rax), %al + 0x88, 0x07, //0x00000f3b movb %al, (%rdi) + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00000f3d movl $1, %ecx + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00000f42 jmp LBB4_12 + //0x00000f47 LBB4_11 + 0x31, 0xc9, //0x00000f47 xorl %ecx, %ecx + 0x81, 0xfe, 0x40, 0x42, 0x0f, 0x00, //0x00000f49 cmpl $1000000, %esi + 0x0f, 0x82, 0x76, 0x00, 0x00, 0x00, //0x00000f4f jb LBB4_13 + //0x00000f55 LBB4_12 + 0x44, 0x89, 0xd0, //0x00000f55 movl %r10d, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00000f58 orq $1, %rax + 0x48, 0x8d, 0x35, 0x2d, 0xaf, 0x00, 0x00, //0x00000f5c leaq $44845(%rip), %rsi /* _Digits+0(%rip) */ + 0x8a, 0x04, 0x30, //0x00000f63 movb (%rax,%rsi), %al + 0x89, 0xce, //0x00000f66 movl %ecx, %esi + 0xff, 0xc1, //0x00000f68 incl %ecx + 0x88, 0x04, 0x37, //0x00000f6a movb %al, (%rdi,%rsi) + //0x00000f6d LBB4_14 + 0x48, 0x8d, 0x05, 0x1c, 0xaf, 0x00, 0x00, //0x00000f6d leaq $44828(%rip), %rax /* _Digits+0(%rip) */ + 0x41, 0x8a, 0x04, 0x01, //0x00000f74 movb (%r9,%rax), %al + 0x89, 0xce, //0x00000f78 movl %ecx, %esi + 0xff, 0xc1, //0x00000f7a incl %ecx + 0x88, 0x04, 0x37, //0x00000f7c movb %al, (%rdi,%rsi) + //0x00000f7f LBB4_15 + 0x41, 0x0f, 0xb7, 0xc1, //0x00000f7f movzwl %r9w, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00000f83 orq $1, %rax + 0x48, 0x8d, 0x35, 0x02, 0xaf, 0x00, 0x00, //0x00000f87 leaq $44802(%rip), %rsi /* _Digits+0(%rip) */ + 0x8a, 0x04, 0x30, //0x00000f8e movb (%rax,%rsi), %al + 0x89, 0xca, //0x00000f91 movl %ecx, %edx + 0x88, 0x04, 0x3a, //0x00000f93 movb %al, (%rdx,%rdi) + 0x41, 0x8a, 0x04, 0x30, //0x00000f96 movb (%r8,%rsi), %al + 0x88, 0x44, 0x3a, 0x01, //0x00000f9a movb %al, $1(%rdx,%rdi) + 0x41, 0x0f, 0xb7, 0xc0, //0x00000f9e movzwl %r8w, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00000fa2 orq $1, %rax + 0x8a, 0x04, 0x30, //0x00000fa6 movb (%rax,%rsi), %al + 0x88, 0x44, 0x3a, 0x02, //0x00000fa9 movb %al, $2(%rdx,%rdi) + 0x41, 0x8a, 0x04, 0x33, //0x00000fad movb (%r11,%rsi), %al + 0x88, 0x44, 0x3a, 0x03, //0x00000fb1 movb %al, $3(%rdx,%rdi) + 0x41, 0x0f, 0xb7, 0xc3, //0x00000fb5 movzwl %r11w, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00000fb9 orq $1, %rax + 0x8a, 0x04, 0x30, //0x00000fbd movb (%rax,%rsi), %al + 0x83, 0xc1, 0x05, //0x00000fc0 addl $5, %ecx + 0x88, 0x44, 0x3a, 0x04, //0x00000fc3 movb %al, $4(%rdx,%rdi) + 0x89, 0xc8, //0x00000fc7 movl %ecx, %eax + 0x5d, //0x00000fc9 popq %rbp + 0xc3, //0x00000fca retq + //0x00000fcb LBB4_13 + 0x31, 0xc9, //0x00000fcb xorl %ecx, %ecx + 0x81, 0xfe, 0xa0, 0x86, 0x01, 0x00, //0x00000fcd cmpl $100000, %esi + 0x0f, 0x83, 0x94, 0xff, 0xff, 0xff, //0x00000fd3 jae LBB4_14 + 0xe9, 0xa1, 0xff, 0xff, 0xff, //0x00000fd9 jmp LBB4_15 + //0x00000fde LBB4_16 + 0x48, 0xb8, 0xff, 0xff, 0xc0, 0x6f, 0xf2, 0x86, 0x23, 0x00, //0x00000fde movabsq $9999999999999999, %rax + 0x48, 0x39, 0xc6, //0x00000fe8 cmpq %rax, %rsi + 0x0f, 0x87, 0x05, 0x01, 0x00, 0x00, //0x00000feb ja LBB4_18 + 0x48, 0xb9, 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x00000ff1 movabsq $-6067343680855748867, %rcx + 0x48, 0x89, 0xf0, //0x00000ffb movq %rsi, %rax + 0x48, 0xf7, 0xe1, //0x00000ffe mulq %rcx + 0x48, 0xc1, 0xea, 0x1a, //0x00001001 shrq $26, %rdx + 0x69, 0xc2, 0x00, 0xe1, 0xf5, 0x05, //0x00001005 imull $100000000, %edx, %eax + 0x29, 0xc6, //0x0000100b subl %eax, %esi + 0xc5, 0xf9, 0x6e, 0xc2, //0x0000100d vmovd %edx, %xmm0 + 0xc5, 0xf9, 0x6f, 0x0d, 0xa7, 0xfd, 0xff, 0xff, //0x00001011 vmovdqa $-601(%rip), %xmm1 /* LCPI4_0+0(%rip) */ + 0xc5, 0xf9, 0xf4, 0xd1, //0x00001019 vpmuludq %xmm1, %xmm0, %xmm2 + 0xc5, 0xe9, 0x73, 0xd2, 0x2d, //0x0000101d vpsrlq $45, %xmm2, %xmm2 + 0xb8, 0x10, 0x27, 0x00, 0x00, //0x00001022 movl $10000, %eax + 0xc4, 0xe1, 0xf9, 0x6e, 0xd8, //0x00001027 vmovq %rax, %xmm3 + 0xc5, 0xe9, 0xf4, 0xe3, //0x0000102c vpmuludq %xmm3, %xmm2, %xmm4 + 0xc5, 0xf9, 0xfa, 0xc4, //0x00001030 vpsubd %xmm4, %xmm0, %xmm0 + 0xc5, 0xe9, 0x61, 0xc0, //0x00001034 vpunpcklwd %xmm0, %xmm2, %xmm0 + 0xc5, 0xf9, 0x73, 0xf0, 0x02, //0x00001038 vpsllq $2, %xmm0, %xmm0 + 0xc5, 0xfb, 0x70, 0xc0, 0x50, //0x0000103d vpshuflw $80, %xmm0, %xmm0 + 0xc5, 0xf9, 0x70, 0xc0, 0x50, //0x00001042 vpshufd $80, %xmm0, %xmm0 + 0xc5, 0xfb, 0x12, 0x15, 0xa1, 0xfd, 0xff, 0xff, //0x00001047 vmovddup $-607(%rip), %xmm2 /* LCPI4_1+0(%rip) */ + 0xc5, 0xf9, 0xe4, 0xc2, //0x0000104f vpmulhuw %xmm2, %xmm0, %xmm0 + 0xc5, 0xfb, 0x12, 0x25, 0x9d, 0xfd, 0xff, 0xff, //0x00001053 vmovddup $-611(%rip), %xmm4 /* LCPI4_2+0(%rip) */ + 0xc5, 0xf9, 0xe4, 0xc4, //0x0000105b vpmulhuw %xmm4, %xmm0, %xmm0 + 0xc5, 0xf9, 0x6f, 0x2d, 0x69, 0xfd, 0xff, 0xff, //0x0000105f vmovdqa $-663(%rip), %xmm5 /* LCPI4_3+0(%rip) */ + 0xc5, 0xf9, 0xd5, 0xf5, //0x00001067 vpmullw %xmm5, %xmm0, %xmm6 + 0xc5, 0xc9, 0x73, 0xf6, 0x10, //0x0000106b vpsllq $16, %xmm6, %xmm6 + 0xc5, 0xf9, 0xf9, 0xc6, //0x00001070 vpsubw %xmm6, %xmm0, %xmm0 + 0xc5, 0xf9, 0x6e, 0xf6, //0x00001074 vmovd %esi, %xmm6 + 0xc5, 0xc9, 0xf4, 0xc9, //0x00001078 vpmuludq %xmm1, %xmm6, %xmm1 + 0xc5, 0xf1, 0x73, 0xd1, 0x2d, //0x0000107c vpsrlq $45, %xmm1, %xmm1 + 0xc5, 0xf1, 0xf4, 0xdb, //0x00001081 vpmuludq %xmm3, %xmm1, %xmm3 + 0xc5, 0xc9, 0xfa, 0xdb, //0x00001085 vpsubd %xmm3, %xmm6, %xmm3 + 0xc5, 0xf1, 0x61, 0xcb, //0x00001089 vpunpcklwd %xmm3, %xmm1, %xmm1 + 0xc5, 0xf1, 0x73, 0xf1, 0x02, //0x0000108d vpsllq $2, %xmm1, %xmm1 + 0xc5, 0xfb, 0x70, 0xc9, 0x50, //0x00001092 vpshuflw $80, %xmm1, %xmm1 + 0xc5, 0xf9, 0x70, 0xc9, 0x50, //0x00001097 vpshufd $80, %xmm1, %xmm1 + 0xc5, 0xf1, 0xe4, 0xca, //0x0000109c vpmulhuw %xmm2, %xmm1, %xmm1 + 0xc5, 0xf1, 0xe4, 0xcc, //0x000010a0 vpmulhuw %xmm4, %xmm1, %xmm1 + 0xc5, 0xf1, 0xd5, 0xd5, //0x000010a4 vpmullw %xmm5, %xmm1, %xmm2 + 0xc5, 0xe9, 0x73, 0xf2, 0x10, //0x000010a8 vpsllq $16, %xmm2, %xmm2 + 0xc5, 0xf1, 0xf9, 0xca, //0x000010ad vpsubw %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x67, 0xc1, //0x000010b1 vpackuswb %xmm1, %xmm0, %xmm0 + 0xc5, 0xf9, 0xfc, 0x0d, 0x23, 0xfd, 0xff, 0xff, //0x000010b5 vpaddb $-733(%rip), %xmm0, %xmm1 /* LCPI4_4+0(%rip) */ + 0xc5, 0xe9, 0xef, 0xd2, //0x000010bd vpxor %xmm2, %xmm2, %xmm2 + 0xc5, 0xf9, 0x74, 0xc2, //0x000010c1 vpcmpeqb %xmm2, %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc0, //0x000010c5 vpmovmskb %xmm0, %eax + 0x0d, 0x00, 0x80, 0x00, 0x00, //0x000010c9 orl $32768, %eax + 0x35, 0xff, 0x7f, 0xff, 0xff, //0x000010ce xorl $-32769, %eax + 0x0f, 0xbc, 0xc0, //0x000010d3 bsfl %eax, %eax + 0xb9, 0x10, 0x00, 0x00, 0x00, //0x000010d6 movl $16, %ecx + 0x29, 0xc1, //0x000010db subl %eax, %ecx + 0x48, 0xc1, 0xe0, 0x04, //0x000010dd shlq $4, %rax + 0x48, 0x8d, 0x15, 0x08, 0xd5, 0x00, 0x00, //0x000010e1 leaq $54536(%rip), %rdx /* _VecShiftShuffles+0(%rip) */ + 0xc4, 0xe2, 0x71, 0x00, 0x04, 0x10, //0x000010e8 vpshufb (%rax,%rdx), %xmm1, %xmm0 + 0xc5, 0xfa, 0x7f, 0x07, //0x000010ee vmovdqu %xmm0, (%rdi) + 0x89, 0xc8, //0x000010f2 movl %ecx, %eax + 0x5d, //0x000010f4 popq %rbp + 0xc3, //0x000010f5 retq + //0x000010f6 LBB4_18 + 0x48, 0xb9, 0x57, 0x78, 0x13, 0xb1, 0x2f, 0x65, 0xa5, 0x39, //0x000010f6 movabsq $4153837486827862103, %rcx + 0x48, 0x89, 0xf0, //0x00001100 movq %rsi, %rax + 0x48, 0xf7, 0xe1, //0x00001103 mulq %rcx + 0x48, 0xc1, 0xea, 0x33, //0x00001106 shrq $51, %rdx + 0x48, 0xb8, 0x00, 0x00, 0xc1, 0x6f, 0xf2, 0x86, 0x23, 0x00, //0x0000110a movabsq $10000000000000000, %rax + 0x48, 0x0f, 0xaf, 0xc2, //0x00001114 imulq %rdx, %rax + 0x48, 0x29, 0xc6, //0x00001118 subq %rax, %rsi + 0x83, 0xfa, 0x09, //0x0000111b cmpl $9, %edx + 0x0f, 0x87, 0x0f, 0x00, 0x00, 0x00, //0x0000111e ja LBB4_20 + 0x80, 0xc2, 0x30, //0x00001124 addb $48, %dl + 0x88, 0x17, //0x00001127 movb %dl, (%rdi) + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00001129 movl $1, %ecx + 0xe9, 0xba, 0x00, 0x00, 0x00, //0x0000112e jmp LBB4_25 + //0x00001133 LBB4_20 + 0x83, 0xfa, 0x63, //0x00001133 cmpl $99, %edx + 0x0f, 0x87, 0x1f, 0x00, 0x00, 0x00, //0x00001136 ja LBB4_22 + 0x89, 0xd0, //0x0000113c movl %edx, %eax + 0x48, 0x8d, 0x0d, 0x4b, 0xad, 0x00, 0x00, //0x0000113e leaq $44363(%rip), %rcx /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x41, //0x00001145 movb (%rcx,%rax,2), %dl + 0x8a, 0x44, 0x41, 0x01, //0x00001148 movb $1(%rcx,%rax,2), %al + 0x88, 0x17, //0x0000114c movb %dl, (%rdi) + 0x88, 0x47, 0x01, //0x0000114e movb %al, $1(%rdi) + 0xb9, 0x02, 0x00, 0x00, 0x00, //0x00001151 movl $2, %ecx + 0xe9, 0x92, 0x00, 0x00, 0x00, //0x00001156 jmp LBB4_25 + //0x0000115b LBB4_22 + 0x89, 0xd0, //0x0000115b movl %edx, %eax + 0xc1, 0xe8, 0x02, //0x0000115d shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00001160 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00001166 shrl $17, %eax + 0x81, 0xfa, 0xe7, 0x03, 0x00, 0x00, //0x00001169 cmpl $999, %edx + 0x0f, 0x87, 0x3c, 0x00, 0x00, 0x00, //0x0000116f ja LBB4_24 + 0x83, 0xc0, 0x30, //0x00001175 addl $48, %eax + 0x88, 0x07, //0x00001178 movb %al, (%rdi) + 0x0f, 0xb7, 0xc2, //0x0000117a movzwl %dx, %eax + 0x89, 0xc1, //0x0000117d movl %eax, %ecx + 0xc1, 0xe9, 0x02, //0x0000117f shrl $2, %ecx + 0x69, 0xc9, 0x7b, 0x14, 0x00, 0x00, //0x00001182 imull $5243, %ecx, %ecx + 0xc1, 0xe9, 0x11, //0x00001188 shrl $17, %ecx + 0x6b, 0xc9, 0x64, //0x0000118b imull $100, %ecx, %ecx + 0x29, 0xc8, //0x0000118e subl %ecx, %eax + 0x0f, 0xb7, 0xc0, //0x00001190 movzwl %ax, %eax + 0x48, 0x8d, 0x0d, 0xf6, 0xac, 0x00, 0x00, //0x00001193 leaq $44278(%rip), %rcx /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x41, //0x0000119a movb (%rcx,%rax,2), %dl + 0x8a, 0x44, 0x41, 0x01, //0x0000119d movb $1(%rcx,%rax,2), %al + 0x88, 0x57, 0x01, //0x000011a1 movb %dl, $1(%rdi) + 0x88, 0x47, 0x02, //0x000011a4 movb %al, $2(%rdi) + 0xb9, 0x03, 0x00, 0x00, 0x00, //0x000011a7 movl $3, %ecx + 0xe9, 0x3c, 0x00, 0x00, 0x00, //0x000011ac jmp LBB4_25 + //0x000011b1 LBB4_24 + 0x6b, 0xc8, 0x64, //0x000011b1 imull $100, %eax, %ecx + 0x29, 0xca, //0x000011b4 subl %ecx, %edx + 0x0f, 0xb7, 0xc0, //0x000011b6 movzwl %ax, %eax + 0x4c, 0x8d, 0x05, 0xd0, 0xac, 0x00, 0x00, //0x000011b9 leaq $44240(%rip), %r8 /* _Digits+0(%rip) */ + 0x41, 0x8a, 0x0c, 0x40, //0x000011c0 movb (%r8,%rax,2), %cl + 0x41, 0x8a, 0x44, 0x40, 0x01, //0x000011c4 movb $1(%r8,%rax,2), %al + 0x88, 0x0f, //0x000011c9 movb %cl, (%rdi) + 0x88, 0x47, 0x01, //0x000011cb movb %al, $1(%rdi) + 0x0f, 0xb7, 0xc2, //0x000011ce movzwl %dx, %eax + 0x41, 0x8a, 0x0c, 0x40, //0x000011d1 movb (%r8,%rax,2), %cl + 0x48, 0x01, 0xc0, //0x000011d5 addq %rax, %rax + 0x88, 0x4f, 0x02, //0x000011d8 movb %cl, $2(%rdi) + 0x83, 0xc8, 0x01, //0x000011db orl $1, %eax + 0x0f, 0xb7, 0xc0, //0x000011de movzwl %ax, %eax + 0x42, 0x8a, 0x04, 0x00, //0x000011e1 movb (%rax,%r8), %al + 0x88, 0x47, 0x03, //0x000011e5 movb %al, $3(%rdi) + 0xb9, 0x04, 0x00, 0x00, 0x00, //0x000011e8 movl $4, %ecx + //0x000011ed LBB4_25 + 0x48, 0xba, 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x000011ed movabsq $-6067343680855748867, %rdx + 0x48, 0x89, 0xf0, //0x000011f7 movq %rsi, %rax + 0x48, 0xf7, 0xe2, //0x000011fa mulq %rdx + 0x48, 0xc1, 0xea, 0x1a, //0x000011fd shrq $26, %rdx + 0xc5, 0xf9, 0x6e, 0xc2, //0x00001201 vmovd %edx, %xmm0 + 0xc5, 0xf9, 0x6f, 0x0d, 0xb3, 0xfb, 0xff, 0xff, //0x00001205 vmovdqa $-1101(%rip), %xmm1 /* LCPI4_0+0(%rip) */ + 0xc5, 0xf9, 0xf4, 0xd1, //0x0000120d vpmuludq %xmm1, %xmm0, %xmm2 + 0xc5, 0xe9, 0x73, 0xd2, 0x2d, //0x00001211 vpsrlq $45, %xmm2, %xmm2 + 0xb8, 0x10, 0x27, 0x00, 0x00, //0x00001216 movl $10000, %eax + 0xc4, 0xe1, 0xf9, 0x6e, 0xd8, //0x0000121b vmovq %rax, %xmm3 + 0xc5, 0xe9, 0xf4, 0xe3, //0x00001220 vpmuludq %xmm3, %xmm2, %xmm4 + 0xc5, 0xf9, 0xfa, 0xc4, //0x00001224 vpsubd %xmm4, %xmm0, %xmm0 + 0xc5, 0xe9, 0x61, 0xc0, //0x00001228 vpunpcklwd %xmm0, %xmm2, %xmm0 + 0xc5, 0xf9, 0x73, 0xf0, 0x02, //0x0000122c vpsllq $2, %xmm0, %xmm0 + 0xc5, 0xfb, 0x70, 0xc0, 0x50, //0x00001231 vpshuflw $80, %xmm0, %xmm0 + 0xc5, 0xf9, 0x70, 0xc0, 0x50, //0x00001236 vpshufd $80, %xmm0, %xmm0 + 0xc5, 0xfb, 0x12, 0x15, 0xad, 0xfb, 0xff, 0xff, //0x0000123b vmovddup $-1107(%rip), %xmm2 /* LCPI4_1+0(%rip) */ + 0xc5, 0xf9, 0xe4, 0xc2, //0x00001243 vpmulhuw %xmm2, %xmm0, %xmm0 + 0xc5, 0xfb, 0x12, 0x25, 0xa9, 0xfb, 0xff, 0xff, //0x00001247 vmovddup $-1111(%rip), %xmm4 /* LCPI4_2+0(%rip) */ + 0xc5, 0xf9, 0xe4, 0xc4, //0x0000124f vpmulhuw %xmm4, %xmm0, %xmm0 + 0xc5, 0xf9, 0x6f, 0x2d, 0x75, 0xfb, 0xff, 0xff, //0x00001253 vmovdqa $-1163(%rip), %xmm5 /* LCPI4_3+0(%rip) */ + 0xc5, 0xf9, 0xd5, 0xf5, //0x0000125b vpmullw %xmm5, %xmm0, %xmm6 + 0xc5, 0xc9, 0x73, 0xf6, 0x10, //0x0000125f vpsllq $16, %xmm6, %xmm6 + 0xc5, 0xf9, 0xf9, 0xc6, //0x00001264 vpsubw %xmm6, %xmm0, %xmm0 + 0x69, 0xc2, 0x00, 0xe1, 0xf5, 0x05, //0x00001268 imull $100000000, %edx, %eax + 0x29, 0xc6, //0x0000126e subl %eax, %esi + 0xc5, 0xf9, 0x6e, 0xf6, //0x00001270 vmovd %esi, %xmm6 + 0xc5, 0xc9, 0xf4, 0xc9, //0x00001274 vpmuludq %xmm1, %xmm6, %xmm1 + 0xc5, 0xf1, 0x73, 0xd1, 0x2d, //0x00001278 vpsrlq $45, %xmm1, %xmm1 + 0xc5, 0xf1, 0xf4, 0xdb, //0x0000127d vpmuludq %xmm3, %xmm1, %xmm3 + 0xc5, 0xc9, 0xfa, 0xdb, //0x00001281 vpsubd %xmm3, %xmm6, %xmm3 + 0xc5, 0xf1, 0x61, 0xcb, //0x00001285 vpunpcklwd %xmm3, %xmm1, %xmm1 + 0xc5, 0xf1, 0x73, 0xf1, 0x02, //0x00001289 vpsllq $2, %xmm1, %xmm1 + 0xc5, 0xfb, 0x70, 0xc9, 0x50, //0x0000128e vpshuflw $80, %xmm1, %xmm1 + 0xc5, 0xf9, 0x70, 0xc9, 0x50, //0x00001293 vpshufd $80, %xmm1, %xmm1 + 0xc5, 0xf1, 0xe4, 0xca, //0x00001298 vpmulhuw %xmm2, %xmm1, %xmm1 + 0xc5, 0xf1, 0xe4, 0xcc, //0x0000129c vpmulhuw %xmm4, %xmm1, %xmm1 + 0xc5, 0xf1, 0xd5, 0xd5, //0x000012a0 vpmullw %xmm5, %xmm1, %xmm2 + 0xc5, 0xe9, 0x73, 0xf2, 0x10, //0x000012a4 vpsllq $16, %xmm2, %xmm2 + 0xc5, 0xf1, 0xf9, 0xca, //0x000012a9 vpsubw %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x67, 0xc1, //0x000012ad vpackuswb %xmm1, %xmm0, %xmm0 + 0xc5, 0xf9, 0xfc, 0x05, 0x27, 0xfb, 0xff, 0xff, //0x000012b1 vpaddb $-1241(%rip), %xmm0, %xmm0 /* LCPI4_4+0(%rip) */ + 0x89, 0xc8, //0x000012b9 movl %ecx, %eax + 0xc5, 0xfa, 0x7f, 0x04, 0x07, //0x000012bb vmovdqu %xmm0, (%rdi,%rax) + 0x83, 0xc9, 0x10, //0x000012c0 orl $16, %ecx + 0x89, 0xc8, //0x000012c3 movl %ecx, %eax + 0x5d, //0x000012c5 popq %rbp + 0xc3, //0x000012c6 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000012c7 .p2align 4, 0x00 + //0x000012d0 LCPI5_0 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x000012d0 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x000012e0 LCPI5_1 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x000012e0 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x000012f0 LCPI5_2 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000012f0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x00001300 .p2align 4, 0x90 + //0x00001300 _quote + 0x55, //0x00001300 pushq %rbp + 0x48, 0x89, 0xe5, //0x00001301 movq %rsp, %rbp + 0x41, 0x57, //0x00001304 pushq %r15 + 0x41, 0x56, //0x00001306 pushq %r14 + 0x41, 0x55, //0x00001308 pushq %r13 + 0x41, 0x54, //0x0000130a pushq %r12 + 0x53, //0x0000130c pushq %rbx + 0x50, //0x0000130d pushq %rax + 0x49, 0x89, 0xcb, //0x0000130e movq %rcx, %r11 + 0x49, 0x89, 0xd4, //0x00001311 movq %rdx, %r12 + 0x48, 0x89, 0xf0, //0x00001314 movq %rsi, %rax + 0x4c, 0x8b, 0x31, //0x00001317 movq (%rcx), %r14 + 0x41, 0xf6, 0xc0, 0x01, //0x0000131a testb $1, %r8b + 0x48, 0x8d, 0x0d, 0x5b, 0xd3, 0x00, 0x00, //0x0000131e leaq $54107(%rip), %rcx /* __SingleQuoteTab+0(%rip) */ + 0x4c, 0x8d, 0x05, 0x54, 0xe3, 0x00, 0x00, //0x00001325 leaq $58196(%rip), %r8 /* __DoubleQuoteTab+0(%rip) */ + 0x4c, 0x0f, 0x44, 0xc1, //0x0000132c cmoveq %rcx, %r8 + 0x48, 0x8d, 0x0c, 0xf5, 0x00, 0x00, 0x00, 0x00, //0x00001330 leaq (,%rsi,8), %rcx + 0x49, 0x39, 0xce, //0x00001338 cmpq %rcx, %r14 + 0x0f, 0x8d, 0xe1, 0x03, 0x00, 0x00, //0x0000133b jge LBB5_51 + 0x4d, 0x89, 0xe7, //0x00001341 movq %r12, %r15 + 0x49, 0x89, 0xfa, //0x00001344 movq %rdi, %r10 + 0x48, 0x85, 0xc0, //0x00001347 testq %rax, %rax + 0x0f, 0x84, 0xc4, 0x03, 0x00, 0x00, //0x0000134a je LBB5_74 + 0xc5, 0xf9, 0x6f, 0x05, 0x78, 0xff, 0xff, 0xff, //0x00001350 vmovdqa $-136(%rip), %xmm0 /* LCPI5_0+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0x80, 0xff, 0xff, 0xff, //0x00001358 vmovdqa $-128(%rip), %xmm1 /* LCPI5_1+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x15, 0x88, 0xff, 0xff, 0xff, //0x00001360 vmovdqa $-120(%rip), %xmm2 /* LCPI5_2+0(%rip) */ + 0xc5, 0xe1, 0x76, 0xdb, //0x00001368 vpcmpeqd %xmm3, %xmm3, %xmm3 + 0x49, 0x89, 0xfa, //0x0000136c movq %rdi, %r10 + 0x4d, 0x89, 0xe7, //0x0000136f movq %r12, %r15 + 0x4c, 0x89, 0x65, 0xd0, //0x00001372 movq %r12, $-48(%rbp) + //0x00001376 LBB5_3 + 0x4c, 0x89, 0xda, //0x00001376 movq %r11, %rdx + 0x48, 0x83, 0xf8, 0x0f, //0x00001379 cmpq $15, %rax + 0x41, 0x0f, 0x9f, 0xc3, //0x0000137d setg %r11b + 0x4d, 0x89, 0xf1, //0x00001381 movq %r14, %r9 + 0x4d, 0x89, 0xfd, //0x00001384 movq %r15, %r13 + 0x48, 0x89, 0xc6, //0x00001387 movq %rax, %rsi + 0x4d, 0x89, 0xd4, //0x0000138a movq %r10, %r12 + 0x49, 0x83, 0xfe, 0x10, //0x0000138d cmpq $16, %r14 + 0x0f, 0x8c, 0x89, 0x00, 0x00, 0x00, //0x00001391 jl LBB5_9 + 0x48, 0x83, 0xf8, 0x10, //0x00001397 cmpq $16, %rax + 0x0f, 0x8c, 0x7f, 0x00, 0x00, 0x00, //0x0000139b jl LBB5_9 + 0x4d, 0x89, 0xd4, //0x000013a1 movq %r10, %r12 + 0x48, 0x89, 0xc6, //0x000013a4 movq %rax, %rsi + 0x4d, 0x89, 0xfd, //0x000013a7 movq %r15, %r13 + 0x4c, 0x89, 0xf3, //0x000013aa movq %r14, %rbx + 0x90, 0x90, 0x90, //0x000013ad .p2align 4, 0x90 + //0x000013b0 LBB5_6 + 0xc4, 0xc1, 0x7a, 0x6f, 0x24, 0x24, //0x000013b0 vmovdqu (%r12), %xmm4 + 0xc5, 0xf9, 0x64, 0xec, //0x000013b6 vpcmpgtb %xmm4, %xmm0, %xmm5 + 0xc5, 0xd9, 0x74, 0xf1, //0x000013ba vpcmpeqb %xmm1, %xmm4, %xmm6 + 0xc5, 0xd9, 0x74, 0xfa, //0x000013be vpcmpeqb %xmm2, %xmm4, %xmm7 + 0xc5, 0xc1, 0xeb, 0xf6, //0x000013c2 vpor %xmm6, %xmm7, %xmm6 + 0xc4, 0xc1, 0x7a, 0x7f, 0x65, 0x00, //0x000013c6 vmovdqu %xmm4, (%r13) + 0xc5, 0xd9, 0x64, 0xe3, //0x000013cc vpcmpgtb %xmm3, %xmm4, %xmm4 + 0xc5, 0xd9, 0xdb, 0xe5, //0x000013d0 vpand %xmm5, %xmm4, %xmm4 + 0xc5, 0xc9, 0xeb, 0xe4, //0x000013d4 vpor %xmm4, %xmm6, %xmm4 + 0xc5, 0xf9, 0xd7, 0xcc, //0x000013d8 vpmovmskb %xmm4, %ecx + 0x66, 0x85, 0xc9, //0x000013dc testw %cx, %cx + 0x0f, 0x85, 0x20, 0x01, 0x00, 0x00, //0x000013df jne LBB5_19 + 0x49, 0x83, 0xc4, 0x10, //0x000013e5 addq $16, %r12 + 0x49, 0x83, 0xc5, 0x10, //0x000013e9 addq $16, %r13 + 0x4c, 0x8d, 0x4b, 0xf0, //0x000013ed leaq $-16(%rbx), %r9 + 0x48, 0x83, 0xfe, 0x1f, //0x000013f1 cmpq $31, %rsi + 0x41, 0x0f, 0x9f, 0xc3, //0x000013f5 setg %r11b + 0x48, 0x83, 0xfe, 0x20, //0x000013f9 cmpq $32, %rsi + 0x48, 0x8d, 0x76, 0xf0, //0x000013fd leaq $-16(%rsi), %rsi + 0x0f, 0x8c, 0x19, 0x00, 0x00, 0x00, //0x00001401 jl LBB5_9 + 0x48, 0x83, 0xfb, 0x1f, //0x00001407 cmpq $31, %rbx + 0x4c, 0x89, 0xcb, //0x0000140b movq %r9, %rbx + 0x0f, 0x8f, 0x9c, 0xff, 0xff, 0xff, //0x0000140e jg LBB5_6 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001414 .p2align 4, 0x90 + //0x00001420 LBB5_9 + 0x45, 0x84, 0xdb, //0x00001420 testb %r11b, %r11b + 0x0f, 0x84, 0x68, 0x00, 0x00, 0x00, //0x00001423 je LBB5_13 + 0xc4, 0xc1, 0x7a, 0x6f, 0x24, 0x24, //0x00001429 vmovdqu (%r12), %xmm4 + 0xc5, 0xf9, 0x64, 0xec, //0x0000142f vpcmpgtb %xmm4, %xmm0, %xmm5 + 0xc5, 0xd9, 0x74, 0xf1, //0x00001433 vpcmpeqb %xmm1, %xmm4, %xmm6 + 0xc5, 0xd9, 0x74, 0xfa, //0x00001437 vpcmpeqb %xmm2, %xmm4, %xmm7 + 0xc5, 0xc1, 0xeb, 0xf6, //0x0000143b vpor %xmm6, %xmm7, %xmm6 + 0xc5, 0xd9, 0x64, 0xfb, //0x0000143f vpcmpgtb %xmm3, %xmm4, %xmm7 + 0xc5, 0xc1, 0xdb, 0xed, //0x00001443 vpand %xmm5, %xmm7, %xmm5 + 0xc5, 0xc9, 0xeb, 0xed, //0x00001447 vpor %xmm5, %xmm6, %xmm5 + 0xc5, 0xf9, 0xd7, 0xcd, //0x0000144b vpmovmskb %xmm5, %ecx + 0x81, 0xc9, 0x00, 0x00, 0x01, 0x00, //0x0000144f orl $65536, %ecx + 0x44, 0x0f, 0xbc, 0xd9, //0x00001455 bsfl %ecx, %r11d + 0xc4, 0xe1, 0xf9, 0x7e, 0xe1, //0x00001459 vmovq %xmm4, %rcx + 0x4d, 0x39, 0xd9, //0x0000145e cmpq %r11, %r9 + 0x0f, 0x8d, 0xb0, 0x00, 0x00, 0x00, //0x00001461 jge LBB5_20 + 0x49, 0x83, 0xf9, 0x08, //0x00001467 cmpq $8, %r9 + 0x0f, 0x82, 0xdb, 0x00, 0x00, 0x00, //0x0000146b jb LBB5_23 + 0x49, 0x89, 0x4d, 0x00, //0x00001471 movq %rcx, (%r13) + 0x4d, 0x8d, 0x5c, 0x24, 0x08, //0x00001475 leaq $8(%r12), %r11 + 0x49, 0x83, 0xc5, 0x08, //0x0000147a addq $8, %r13 + 0x49, 0x8d, 0x71, 0xf8, //0x0000147e leaq $-8(%r9), %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00001482 cmpq $4, %rsi + 0x0f, 0x8d, 0xd0, 0x00, 0x00, 0x00, //0x00001486 jge LBB5_24 + 0xe9, 0xde, 0x00, 0x00, 0x00, //0x0000148c jmp LBB5_25 + //0x00001491 LBB5_13 + 0x4d, 0x85, 0xc9, //0x00001491 testq %r9, %r9 + 0x49, 0x89, 0xd3, //0x00001494 movq %rdx, %r11 + 0x0f, 0x8e, 0x57, 0x00, 0x00, 0x00, //0x00001497 jle LBB5_18 + 0x48, 0x85, 0xf6, //0x0000149d testq %rsi, %rsi + 0x0f, 0x8e, 0x4e, 0x00, 0x00, 0x00, //0x000014a0 jle LBB5_18 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000014a6 .p2align 4, 0x90 + //0x000014b0 LBB5_15 + 0x41, 0x0f, 0xb6, 0x1c, 0x24, //0x000014b0 movzbl (%r12), %ebx + 0x48, 0x89, 0xd9, //0x000014b5 movq %rbx, %rcx + 0x48, 0xc1, 0xe1, 0x04, //0x000014b8 shlq $4, %rcx + 0x48, 0x8d, 0x15, 0xbd, 0xd1, 0x00, 0x00, //0x000014bc leaq $53693(%rip), %rdx /* __SingleQuoteTab+0(%rip) */ + 0x48, 0x83, 0x3c, 0x11, 0x00, //0x000014c3 cmpq $0, (%rcx,%rdx) + 0x0f, 0x85, 0x73, 0x00, 0x00, 0x00, //0x000014c8 jne LBB5_22 + 0x49, 0xff, 0xc4, //0x000014ce incq %r12 + 0x41, 0x88, 0x5d, 0x00, //0x000014d1 movb %bl, (%r13) + 0x48, 0x83, 0xfe, 0x02, //0x000014d5 cmpq $2, %rsi + 0x48, 0x8d, 0x76, 0xff, //0x000014d9 leaq $-1(%rsi), %rsi + 0x0f, 0x8c, 0x11, 0x00, 0x00, 0x00, //0x000014dd jl LBB5_18 + 0x49, 0xff, 0xc5, //0x000014e3 incq %r13 + 0x49, 0x83, 0xf9, 0x01, //0x000014e6 cmpq $1, %r9 + 0x4d, 0x8d, 0x49, 0xff, //0x000014ea leaq $-1(%r9), %r9 + 0x0f, 0x8f, 0xbc, 0xff, 0xff, 0xff, //0x000014ee jg LBB5_15 + //0x000014f4 LBB5_18 + 0x4d, 0x29, 0xd4, //0x000014f4 subq %r10, %r12 + 0x48, 0xf7, 0xde, //0x000014f7 negq %rsi + 0x4d, 0x19, 0xc9, //0x000014fa sbbq %r9, %r9 + 0x4d, 0x31, 0xe1, //0x000014fd xorq %r12, %r9 + 0xe9, 0x1e, 0x01, 0x00, 0x00, //0x00001500 jmp LBB5_36 + //0x00001505 LBB5_19 + 0x0f, 0xb7, 0xc9, //0x00001505 movzwl %cx, %ecx + 0x4d, 0x29, 0xd4, //0x00001508 subq %r10, %r12 + 0x44, 0x0f, 0xbc, 0xc9, //0x0000150b bsfl %ecx, %r9d + 0x4d, 0x01, 0xe1, //0x0000150f addq %r12, %r9 + 0xe9, 0x09, 0x01, 0x00, 0x00, //0x00001512 jmp LBB5_35 + //0x00001517 LBB5_20 + 0x41, 0x83, 0xfb, 0x08, //0x00001517 cmpl $8, %r11d + 0x0f, 0x82, 0x99, 0x00, 0x00, 0x00, //0x0000151b jb LBB5_29 + 0x49, 0x89, 0x4d, 0x00, //0x00001521 movq %rcx, (%r13) + 0x49, 0x8d, 0x5c, 0x24, 0x08, //0x00001525 leaq $8(%r12), %rbx + 0x49, 0x83, 0xc5, 0x08, //0x0000152a addq $8, %r13 + 0x49, 0x8d, 0x73, 0xf8, //0x0000152e leaq $-8(%r11), %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00001532 cmpq $4, %rsi + 0x0f, 0x8d, 0x8e, 0x00, 0x00, 0x00, //0x00001536 jge LBB5_30 + 0xe9, 0x9b, 0x00, 0x00, 0x00, //0x0000153c jmp LBB5_31 + //0x00001541 LBB5_22 + 0x4d, 0x29, 0xd4, //0x00001541 subq %r10, %r12 + 0x4d, 0x89, 0xe1, //0x00001544 movq %r12, %r9 + 0xe9, 0xd7, 0x00, 0x00, 0x00, //0x00001547 jmp LBB5_36 + //0x0000154c LBB5_23 + 0x4d, 0x89, 0xe3, //0x0000154c movq %r12, %r11 + 0x4c, 0x89, 0xce, //0x0000154f movq %r9, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00001552 cmpq $4, %rsi + 0x0f, 0x8c, 0x13, 0x00, 0x00, 0x00, //0x00001556 jl LBB5_25 + //0x0000155c LBB5_24 + 0x41, 0x8b, 0x0b, //0x0000155c movl (%r11), %ecx + 0x41, 0x89, 0x4d, 0x00, //0x0000155f movl %ecx, (%r13) + 0x49, 0x83, 0xc3, 0x04, //0x00001563 addq $4, %r11 + 0x49, 0x83, 0xc5, 0x04, //0x00001567 addq $4, %r13 + 0x48, 0x83, 0xc6, 0xfc, //0x0000156b addq $-4, %rsi + //0x0000156f LBB5_25 + 0x48, 0x83, 0xfe, 0x02, //0x0000156f cmpq $2, %rsi + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x00001573 jb LBB5_26 + 0x41, 0x0f, 0xb7, 0x0b, //0x00001579 movzwl (%r11), %ecx + 0x66, 0x41, 0x89, 0x4d, 0x00, //0x0000157d movw %cx, (%r13) + 0x49, 0x83, 0xc3, 0x02, //0x00001582 addq $2, %r11 + 0x49, 0x83, 0xc5, 0x02, //0x00001586 addq $2, %r13 + 0x48, 0x83, 0xc6, 0xfe, //0x0000158a addq $-2, %rsi + 0x48, 0x85, 0xf6, //0x0000158e testq %rsi, %rsi + 0x0f, 0x85, 0x0e, 0x00, 0x00, 0x00, //0x00001591 jne LBB5_27 + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00001597 jmp LBB5_28 + //0x0000159c LBB5_26 + 0x48, 0x85, 0xf6, //0x0000159c testq %rsi, %rsi + 0x0f, 0x84, 0x07, 0x00, 0x00, 0x00, //0x0000159f je LBB5_28 + //0x000015a5 LBB5_27 + 0x41, 0x8a, 0x0b, //0x000015a5 movb (%r11), %cl + 0x41, 0x88, 0x4d, 0x00, //0x000015a8 movb %cl, (%r13) + //0x000015ac LBB5_28 + 0x4d, 0x29, 0xd1, //0x000015ac subq %r10, %r9 + 0x4d, 0x01, 0xe1, //0x000015af addq %r12, %r9 + 0x49, 0xf7, 0xd1, //0x000015b2 notq %r9 + 0xe9, 0x66, 0x00, 0x00, 0x00, //0x000015b5 jmp LBB5_35 + //0x000015ba LBB5_29 + 0x4c, 0x89, 0xe3, //0x000015ba movq %r12, %rbx + 0x4c, 0x89, 0xde, //0x000015bd movq %r11, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x000015c0 cmpq $4, %rsi + 0x0f, 0x8c, 0x12, 0x00, 0x00, 0x00, //0x000015c4 jl LBB5_31 + //0x000015ca LBB5_30 + 0x8b, 0x0b, //0x000015ca movl (%rbx), %ecx + 0x41, 0x89, 0x4d, 0x00, //0x000015cc movl %ecx, (%r13) + 0x48, 0x83, 0xc3, 0x04, //0x000015d0 addq $4, %rbx + 0x49, 0x83, 0xc5, 0x04, //0x000015d4 addq $4, %r13 + 0x48, 0x83, 0xc6, 0xfc, //0x000015d8 addq $-4, %rsi + //0x000015dc LBB5_31 + 0x48, 0x83, 0xfe, 0x02, //0x000015dc cmpq $2, %rsi + 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x000015e0 jb LBB5_32 + 0x0f, 0xb7, 0x0b, //0x000015e6 movzwl (%rbx), %ecx + 0x66, 0x41, 0x89, 0x4d, 0x00, //0x000015e9 movw %cx, (%r13) + 0x48, 0x83, 0xc3, 0x02, //0x000015ee addq $2, %rbx + 0x49, 0x83, 0xc5, 0x02, //0x000015f2 addq $2, %r13 + 0x48, 0x83, 0xc6, 0xfe, //0x000015f6 addq $-2, %rsi + 0x48, 0x85, 0xf6, //0x000015fa testq %rsi, %rsi + 0x0f, 0x85, 0x0e, 0x00, 0x00, 0x00, //0x000015fd jne LBB5_33 + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00001603 jmp LBB5_34 + //0x00001608 LBB5_32 + 0x48, 0x85, 0xf6, //0x00001608 testq %rsi, %rsi + 0x0f, 0x84, 0x06, 0x00, 0x00, 0x00, //0x0000160b je LBB5_34 + //0x00001611 LBB5_33 + 0x8a, 0x0b, //0x00001611 movb (%rbx), %cl + 0x41, 0x88, 0x4d, 0x00, //0x00001613 movb %cl, (%r13) + //0x00001617 LBB5_34 + 0x4d, 0x29, 0xd4, //0x00001617 subq %r10, %r12 + 0x4d, 0x01, 0xdc, //0x0000161a addq %r11, %r12 + 0x4d, 0x89, 0xe1, //0x0000161d movq %r12, %r9 + //0x00001620 LBB5_35 + 0x49, 0x89, 0xd3, //0x00001620 movq %rdx, %r11 + //0x00001623 LBB5_36 + 0x4d, 0x85, 0xc9, //0x00001623 testq %r9, %r9 + 0x4c, 0x8b, 0x65, 0xd0, //0x00001626 movq $-48(%rbp), %r12 + 0x49, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, //0x0000162a movabsq $12884901889, %r13 + 0x0f, 0x88, 0x46, 0x03, 0x00, 0x00, //0x00001634 js LBB5_78 + 0x4d, 0x01, 0xca, //0x0000163a addq %r9, %r10 + 0x4d, 0x01, 0xcf, //0x0000163d addq %r9, %r15 + 0x4c, 0x39, 0xc8, //0x00001640 cmpq %r9, %rax + 0x0f, 0x84, 0xcb, 0x00, 0x00, 0x00, //0x00001643 je LBB5_74 + 0x4d, 0x29, 0xce, //0x00001649 subq %r9, %r14 + 0x49, 0x29, 0xc1, //0x0000164c subq %rax, %r9 + 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x0000164f jmp LBB5_40 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001654 .p2align 4, 0x90 + //0x00001660 LBB5_39 + 0x49, 0xff, 0xc2, //0x00001660 incq %r10 + 0x49, 0x01, 0xc7, //0x00001663 addq %rax, %r15 + 0x49, 0xff, 0xc1, //0x00001666 incq %r9 + 0x0f, 0x84, 0xa5, 0x00, 0x00, 0x00, //0x00001669 je LBB5_74 + //0x0000166f LBB5_40 + 0x41, 0x0f, 0xb6, 0x0a, //0x0000166f movzbl (%r10), %ecx + 0x48, 0xc1, 0xe1, 0x04, //0x00001673 shlq $4, %rcx + 0x49, 0x8b, 0x1c, 0x08, //0x00001677 movq (%r8,%rcx), %rbx + 0x85, 0xdb, //0x0000167b testl %ebx, %ebx + 0x0f, 0x84, 0x82, 0x00, 0x00, 0x00, //0x0000167d je LBB5_48 + 0x48, 0x63, 0xc3, //0x00001683 movslq %ebx, %rax + 0x49, 0x29, 0xc6, //0x00001686 subq %rax, %r14 + 0x0f, 0x8c, 0xd3, 0x02, 0x00, 0x00, //0x00001689 jl LBB5_75 + 0x48, 0xc1, 0xe3, 0x20, //0x0000168f shlq $32, %rbx + 0x49, 0x8d, 0x74, 0x08, 0x08, //0x00001693 leaq $8(%r8,%rcx), %rsi + 0x4c, 0x39, 0xeb, //0x00001698 cmpq %r13, %rbx + 0x0f, 0x8c, 0x2f, 0x00, 0x00, 0x00, //0x0000169b jl LBB5_44 + 0x8b, 0x36, //0x000016a1 movl (%rsi), %esi + 0x41, 0x89, 0x37, //0x000016a3 movl %esi, (%r15) + 0x49, 0x8d, 0x74, 0x08, 0x0c, //0x000016a6 leaq $12(%r8,%rcx), %rsi + 0x49, 0x8d, 0x5f, 0x04, //0x000016ab leaq $4(%r15), %rbx + 0x48, 0x8d, 0x48, 0xfc, //0x000016af leaq $-4(%rax), %rcx + 0x48, 0x83, 0xf9, 0x02, //0x000016b3 cmpq $2, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000016b7 jae LBB5_45 + 0xe9, 0x30, 0x00, 0x00, 0x00, //0x000016bd jmp LBB5_46 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000016c2 .p2align 4, 0x90 + //0x000016d0 LBB5_44 + 0x4c, 0x89, 0xfb, //0x000016d0 movq %r15, %rbx + 0x48, 0x89, 0xc1, //0x000016d3 movq %rax, %rcx + 0x48, 0x83, 0xf9, 0x02, //0x000016d6 cmpq $2, %rcx + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x000016da jb LBB5_46 + //0x000016e0 LBB5_45 + 0x0f, 0xb7, 0x16, //0x000016e0 movzwl (%rsi), %edx + 0x66, 0x89, 0x13, //0x000016e3 movw %dx, (%rbx) + 0x48, 0x83, 0xc6, 0x02, //0x000016e6 addq $2, %rsi + 0x48, 0x83, 0xc3, 0x02, //0x000016ea addq $2, %rbx + 0x48, 0x83, 0xc1, 0xfe, //0x000016ee addq $-2, %rcx + //0x000016f2 LBB5_46 + 0x48, 0x85, 0xc9, //0x000016f2 testq %rcx, %rcx + 0x0f, 0x84, 0x65, 0xff, 0xff, 0xff, //0x000016f5 je LBB5_39 + 0x0f, 0xb6, 0x0e, //0x000016fb movzbl (%rsi), %ecx + 0x88, 0x0b, //0x000016fe movb %cl, (%rbx) + 0xe9, 0x5b, 0xff, 0xff, 0xff, //0x00001700 jmp LBB5_39 + //0x00001705 LBB5_48 + 0x4c, 0x89, 0xc8, //0x00001705 movq %r9, %rax + 0x48, 0xf7, 0xd8, //0x00001708 negq %rax + 0x4d, 0x85, 0xc9, //0x0000170b testq %r9, %r9 + 0x0f, 0x85, 0x62, 0xfc, 0xff, 0xff, //0x0000170e jne LBB5_3 + //0x00001714 LBB5_74 + 0x4d, 0x29, 0xe7, //0x00001714 subq %r12, %r15 + 0x4d, 0x89, 0x3b, //0x00001717 movq %r15, (%r11) + 0x49, 0x29, 0xfa, //0x0000171a subq %rdi, %r10 + 0xe9, 0x4c, 0x02, 0x00, 0x00, //0x0000171d jmp LBB5_76 + //0x00001722 LBB5_51 + 0x4c, 0x8d, 0x0d, 0x57, 0xef, 0x00, 0x00, //0x00001722 leaq $61271(%rip), %r9 /* __EscTab+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x05, 0x9f, 0xfb, 0xff, 0xff, //0x00001729 vmovdqa $-1121(%rip), %xmm0 /* LCPI5_0+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0xa7, 0xfb, 0xff, 0xff, //0x00001731 vmovdqa $-1113(%rip), %xmm1 /* LCPI5_1+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x15, 0xaf, 0xfb, 0xff, 0xff, //0x00001739 vmovdqa $-1105(%rip), %xmm2 /* LCPI5_2+0(%rip) */ + 0xc5, 0xe1, 0x76, 0xdb, //0x00001741 vpcmpeqd %xmm3, %xmm3, %xmm3 + 0x4c, 0x89, 0xe3, //0x00001745 movq %r12, %rbx + 0x49, 0x89, 0xc2, //0x00001748 movq %rax, %r10 + //0x0000174b LBB5_52 + 0x49, 0x83, 0xfa, 0x10, //0x0000174b cmpq $16, %r10 + 0x0f, 0x8c, 0x5e, 0x00, 0x00, 0x00, //0x0000174f jl LBB5_57 + 0xb9, 0x10, 0x00, 0x00, 0x00, //0x00001755 movl $16, %ecx + 0x31, 0xf6, //0x0000175a xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, //0x0000175c .p2align 4, 0x90 + //0x00001760 LBB5_54 + 0xc5, 0xfa, 0x6f, 0x24, 0x37, //0x00001760 vmovdqu (%rdi,%rsi), %xmm4 + 0xc5, 0xf9, 0x64, 0xec, //0x00001765 vpcmpgtb %xmm4, %xmm0, %xmm5 + 0xc5, 0xd9, 0x74, 0xf1, //0x00001769 vpcmpeqb %xmm1, %xmm4, %xmm6 + 0xc5, 0xd9, 0x74, 0xfa, //0x0000176d vpcmpeqb %xmm2, %xmm4, %xmm7 + 0xc5, 0xc1, 0xeb, 0xf6, //0x00001771 vpor %xmm6, %xmm7, %xmm6 + 0xc5, 0xfa, 0x7f, 0x24, 0x33, //0x00001775 vmovdqu %xmm4, (%rbx,%rsi) + 0xc5, 0xd9, 0x64, 0xe3, //0x0000177a vpcmpgtb %xmm3, %xmm4, %xmm4 + 0xc5, 0xd9, 0xdb, 0xe5, //0x0000177e vpand %xmm5, %xmm4, %xmm4 + 0xc5, 0xc9, 0xeb, 0xe4, //0x00001782 vpor %xmm4, %xmm6, %xmm4 + 0xc5, 0xf9, 0xd7, 0xd4, //0x00001786 vpmovmskb %xmm4, %edx + 0x66, 0x85, 0xd2, //0x0000178a testw %dx, %dx + 0x0f, 0x85, 0x36, 0x01, 0x00, 0x00, //0x0000178d jne LBB5_67 + 0x48, 0x83, 0xc6, 0x10, //0x00001793 addq $16, %rsi + 0x49, 0x8d, 0x54, 0x0a, 0xf0, //0x00001797 leaq $-16(%r10,%rcx), %rdx + 0x48, 0x83, 0xc1, 0xf0, //0x0000179c addq $-16, %rcx + 0x48, 0x83, 0xfa, 0x1f, //0x000017a0 cmpq $31, %rdx + 0x0f, 0x8f, 0xb6, 0xff, 0xff, 0xff, //0x000017a4 jg LBB5_54 + 0x48, 0x01, 0xf7, //0x000017aa addq %rsi, %rdi + 0x49, 0x29, 0xf2, //0x000017ad subq %rsi, %r10 + 0x48, 0x01, 0xf3, //0x000017b0 addq %rsi, %rbx + //0x000017b3 LBB5_57 + 0x49, 0x83, 0xfa, 0x08, //0x000017b3 cmpq $8, %r10 + 0x0f, 0x8c, 0x85, 0x00, 0x00, 0x00, //0x000017b7 jl LBB5_61 + 0x0f, 0xb6, 0x0f, //0x000017bd movzbl (%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x000017c0 movzbl (%rcx,%r9), %ecx + 0x0f, 0xb6, 0x57, 0x01, //0x000017c5 movzbl $1(%rdi), %edx + 0x42, 0x0f, 0xb6, 0x14, 0x0a, //0x000017c9 movzbl (%rdx,%r9), %edx + 0x01, 0xd2, //0x000017ce addl %edx, %edx + 0x09, 0xca, //0x000017d0 orl %ecx, %edx + 0x0f, 0xb6, 0x4f, 0x02, //0x000017d2 movzbl $2(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x34, 0x09, //0x000017d6 movzbl (%rcx,%r9), %esi + 0xc1, 0xe6, 0x02, //0x000017db shll $2, %esi + 0x0f, 0xb6, 0x4f, 0x03, //0x000017de movzbl $3(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x000017e2 movzbl (%rcx,%r9), %ecx + 0xc1, 0xe1, 0x03, //0x000017e7 shll $3, %ecx + 0x09, 0xf1, //0x000017ea orl %esi, %ecx + 0x09, 0xd1, //0x000017ec orl %edx, %ecx + 0x48, 0x8b, 0x17, //0x000017ee movq (%rdi), %rdx + 0x48, 0x89, 0x13, //0x000017f1 movq %rdx, (%rbx) + 0x84, 0xc9, //0x000017f4 testb %cl, %cl + 0x0f, 0x85, 0x31, 0x01, 0x00, 0x00, //0x000017f6 jne LBB5_71 + 0x0f, 0xb6, 0x4f, 0x04, //0x000017fc movzbl $4(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x00001800 movzbl (%rcx,%r9), %ecx + 0x0f, 0xb6, 0x57, 0x05, //0x00001805 movzbl $5(%rdi), %edx + 0x42, 0x0f, 0xb6, 0x14, 0x0a, //0x00001809 movzbl (%rdx,%r9), %edx + 0x01, 0xd2, //0x0000180e addl %edx, %edx + 0x09, 0xca, //0x00001810 orl %ecx, %edx + 0x0f, 0xb6, 0x4f, 0x06, //0x00001812 movzbl $6(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x34, 0x09, //0x00001816 movzbl (%rcx,%r9), %esi + 0xc1, 0xe6, 0x02, //0x0000181b shll $2, %esi + 0x0f, 0xb6, 0x4f, 0x07, //0x0000181e movzbl $7(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x00001822 movzbl (%rcx,%r9), %ecx + 0xc1, 0xe1, 0x03, //0x00001827 shll $3, %ecx + 0x09, 0xf1, //0x0000182a orl %esi, %ecx + 0x09, 0xd1, //0x0000182c orl %edx, %ecx + 0x84, 0xc9, //0x0000182e testb %cl, %cl + 0x0f, 0x85, 0x08, 0x01, 0x00, 0x00, //0x00001830 jne LBB5_72 + 0x48, 0x83, 0xc3, 0x08, //0x00001836 addq $8, %rbx + 0x48, 0x83, 0xc7, 0x08, //0x0000183a addq $8, %rdi + 0x49, 0x83, 0xc2, 0xf8, //0x0000183e addq $-8, %r10 + //0x00001842 LBB5_61 + 0x49, 0x83, 0xfa, 0x04, //0x00001842 cmpq $4, %r10 + 0x0f, 0x8c, 0x49, 0x00, 0x00, 0x00, //0x00001846 jl LBB5_64 + 0x0f, 0xb6, 0x0f, //0x0000184c movzbl (%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x0000184f movzbl (%rcx,%r9), %ecx + 0x0f, 0xb6, 0x57, 0x01, //0x00001854 movzbl $1(%rdi), %edx + 0x42, 0x0f, 0xb6, 0x14, 0x0a, //0x00001858 movzbl (%rdx,%r9), %edx + 0x01, 0xd2, //0x0000185d addl %edx, %edx + 0x09, 0xca, //0x0000185f orl %ecx, %edx + 0x0f, 0xb6, 0x4f, 0x02, //0x00001861 movzbl $2(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x34, 0x09, //0x00001865 movzbl (%rcx,%r9), %esi + 0xc1, 0xe6, 0x02, //0x0000186a shll $2, %esi + 0x0f, 0xb6, 0x4f, 0x03, //0x0000186d movzbl $3(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x00001871 movzbl (%rcx,%r9), %ecx + 0xc1, 0xe1, 0x03, //0x00001876 shll $3, %ecx + 0x09, 0xf1, //0x00001879 orl %esi, %ecx + 0x09, 0xd1, //0x0000187b orl %edx, %ecx + 0x8b, 0x17, //0x0000187d movl (%rdi), %edx + 0x89, 0x13, //0x0000187f movl %edx, (%rbx) + 0x84, 0xc9, //0x00001881 testb %cl, %cl + 0x0f, 0x85, 0xa4, 0x00, 0x00, 0x00, //0x00001883 jne LBB5_71 + 0x48, 0x83, 0xc3, 0x04, //0x00001889 addq $4, %rbx + 0x48, 0x83, 0xc7, 0x04, //0x0000188d addq $4, %rdi + 0x49, 0x83, 0xc2, 0xfc, //0x00001891 addq $-4, %r10 + //0x00001895 LBB5_64 + 0x4d, 0x85, 0xd2, //0x00001895 testq %r10, %r10 + 0x0f, 0x8e, 0xb9, 0x00, 0x00, 0x00, //0x00001898 jle LBB5_73 + 0x90, 0x90, //0x0000189e .p2align 4, 0x90 + //0x000018a0 LBB5_65 + 0x0f, 0xb6, 0x0f, //0x000018a0 movzbl (%rdi), %ecx + 0x42, 0x80, 0x3c, 0x09, 0x00, //0x000018a3 cmpb $0, (%rcx,%r9) + 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x000018a8 jne LBB5_68 + 0x48, 0xff, 0xc7, //0x000018ae incq %rdi + 0x88, 0x0b, //0x000018b1 movb %cl, (%rbx) + 0x48, 0xff, 0xc3, //0x000018b3 incq %rbx + 0x49, 0x83, 0xfa, 0x01, //0x000018b6 cmpq $1, %r10 + 0x4d, 0x8d, 0x52, 0xff, //0x000018ba leaq $-1(%r10), %r10 + 0x0f, 0x8f, 0xdc, 0xff, 0xff, 0xff, //0x000018be jg LBB5_65 + 0xe9, 0x8e, 0x00, 0x00, 0x00, //0x000018c4 jmp LBB5_73 + //0x000018c9 LBB5_67 + 0x0f, 0xb7, 0xca, //0x000018c9 movzwl %dx, %ecx + 0x0f, 0xbc, 0xc9, //0x000018cc bsfl %ecx, %ecx + 0x48, 0x01, 0xcf, //0x000018cf addq %rcx, %rdi + 0x48, 0x01, 0xf7, //0x000018d2 addq %rsi, %rdi + 0x49, 0x29, 0xca, //0x000018d5 subq %rcx, %r10 + 0x49, 0x29, 0xf2, //0x000018d8 subq %rsi, %r10 + 0x48, 0x01, 0xcb, //0x000018db addq %rcx, %rbx + 0x48, 0x01, 0xf3, //0x000018de addq %rsi, %rbx + //0x000018e1 LBB5_68 + 0x8a, 0x0f, //0x000018e1 movb (%rdi), %cl + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000018e3 .p2align 4, 0x90 + //0x000018f0 LBB5_69 + 0x48, 0x89, 0xda, //0x000018f0 movq %rbx, %rdx + 0x0f, 0xb6, 0xc9, //0x000018f3 movzbl %cl, %ecx + 0x48, 0xc1, 0xe1, 0x04, //0x000018f6 shlq $4, %rcx + 0x49, 0x63, 0x1c, 0x08, //0x000018fa movslq (%r8,%rcx), %rbx + 0x49, 0x8b, 0x4c, 0x08, 0x08, //0x000018fe movq $8(%r8,%rcx), %rcx + 0x48, 0x89, 0x0a, //0x00001903 movq %rcx, (%rdx) + 0x48, 0x01, 0xd3, //0x00001906 addq %rdx, %rbx + 0x49, 0x83, 0xfa, 0x02, //0x00001909 cmpq $2, %r10 + 0x0f, 0x8c, 0x44, 0x00, 0x00, 0x00, //0x0000190d jl LBB5_73 + 0x49, 0xff, 0xca, //0x00001913 decq %r10 + 0x0f, 0xb6, 0x4f, 0x01, //0x00001916 movzbl $1(%rdi), %ecx + 0x48, 0xff, 0xc7, //0x0000191a incq %rdi + 0x42, 0x80, 0x3c, 0x09, 0x00, //0x0000191d cmpb $0, (%rcx,%r9) + 0x0f, 0x85, 0xc8, 0xff, 0xff, 0xff, //0x00001922 jne LBB5_69 + 0xe9, 0x1e, 0xfe, 0xff, 0xff, //0x00001928 jmp LBB5_52 + //0x0000192d LBB5_71 + 0x0f, 0xbc, 0xc9, //0x0000192d bsfl %ecx, %ecx + 0x48, 0x01, 0xcf, //0x00001930 addq %rcx, %rdi + 0x49, 0x29, 0xca, //0x00001933 subq %rcx, %r10 + 0x48, 0x01, 0xcb, //0x00001936 addq %rcx, %rbx + 0xe9, 0xa3, 0xff, 0xff, 0xff, //0x00001939 jmp LBB5_68 + //0x0000193e LBB5_72 + 0x0f, 0xbc, 0xc9, //0x0000193e bsfl %ecx, %ecx + 0x48, 0x8d, 0x51, 0x04, //0x00001941 leaq $4(%rcx), %rdx + 0x48, 0x8d, 0x7c, 0x0f, 0x04, //0x00001945 leaq $4(%rdi,%rcx), %rdi + 0x49, 0x29, 0xd2, //0x0000194a subq %rdx, %r10 + 0x48, 0x8d, 0x5c, 0x0b, 0x04, //0x0000194d leaq $4(%rbx,%rcx), %rbx + 0xe9, 0x8a, 0xff, 0xff, 0xff, //0x00001952 jmp LBB5_68 + //0x00001957 LBB5_73 + 0x4c, 0x29, 0xe3, //0x00001957 subq %r12, %rbx + 0x49, 0x89, 0x1b, //0x0000195a movq %rbx, (%r11) + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x0000195d jmp LBB5_77 + //0x00001962 LBB5_75 + 0x4d, 0x29, 0xe7, //0x00001962 subq %r12, %r15 + 0x4d, 0x89, 0x3b, //0x00001965 movq %r15, (%r11) + 0x49, 0xf7, 0xd2, //0x00001968 notq %r10 + 0x49, 0x01, 0xfa, //0x0000196b addq %rdi, %r10 + //0x0000196e LBB5_76 + 0x4c, 0x89, 0xd0, //0x0000196e movq %r10, %rax + //0x00001971 LBB5_77 + 0x48, 0x83, 0xc4, 0x08, //0x00001971 addq $8, %rsp + 0x5b, //0x00001975 popq %rbx + 0x41, 0x5c, //0x00001976 popq %r12 + 0x41, 0x5d, //0x00001978 popq %r13 + 0x41, 0x5e, //0x0000197a popq %r14 + 0x41, 0x5f, //0x0000197c popq %r15 + 0x5d, //0x0000197e popq %rbp + 0xc3, //0x0000197f retq + //0x00001980 LBB5_78 + 0x4d, 0x29, 0xe7, //0x00001980 subq %r12, %r15 + 0x49, 0xf7, 0xd1, //0x00001983 notq %r9 + 0x4d, 0x01, 0xcf, //0x00001986 addq %r9, %r15 + 0x4d, 0x89, 0x3b, //0x00001989 movq %r15, (%r11) + 0x49, 0x29, 0xfa, //0x0000198c subq %rdi, %r10 + 0x4d, 0x01, 0xca, //0x0000198f addq %r9, %r10 + 0x49, 0xf7, 0xd2, //0x00001992 notq %r10 + 0xe9, 0xd4, 0xff, 0xff, 0xff, //0x00001995 jmp LBB5_76 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000199a .p2align 4, 0x00 + //0x000019a0 LCPI6_0 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000019a0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x000019b0 .p2align 4, 0x90 + //0x000019b0 _unquote + 0x55, //0x000019b0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000019b1 movq %rsp, %rbp + 0x41, 0x57, //0x000019b4 pushq %r15 + 0x41, 0x56, //0x000019b6 pushq %r14 + 0x41, 0x55, //0x000019b8 pushq %r13 + 0x41, 0x54, //0x000019ba pushq %r12 + 0x53, //0x000019bc pushq %rbx + 0x48, 0x83, 0xec, 0x28, //0x000019bd subq $40, %rsp + 0x48, 0x85, 0xf6, //0x000019c1 testq %rsi, %rsi + 0x0f, 0x84, 0x6e, 0x06, 0x00, 0x00, //0x000019c4 je LBB6_82 + 0x49, 0x89, 0xf3, //0x000019ca movq %rsi, %r11 + 0x48, 0x89, 0x4d, 0xc8, //0x000019cd movq %rcx, $-56(%rbp) + 0x4c, 0x89, 0xc0, //0x000019d1 movq %r8, %rax + 0x4c, 0x89, 0x45, 0xb8, //0x000019d4 movq %r8, $-72(%rbp) + 0x45, 0x89, 0xc2, //0x000019d8 movl %r8d, %r10d + 0x41, 0x83, 0xe2, 0x01, //0x000019db andl $1, %r10d + 0x4c, 0x8d, 0x05, 0x9a, 0xed, 0x00, 0x00, //0x000019df leaq $60826(%rip), %r8 /* __UnquoteTab+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x05, 0xb2, 0xff, 0xff, 0xff, //0x000019e6 vmovdqa $-78(%rip), %xmm0 /* LCPI6_0+0(%rip) */ + 0x49, 0x89, 0xf9, //0x000019ee movq %rdi, %r9 + 0x49, 0x89, 0xf5, //0x000019f1 movq %rsi, %r13 + 0x48, 0x89, 0xd0, //0x000019f4 movq %rdx, %rax + //0x000019f7 LBB6_2 + 0x41, 0x80, 0x39, 0x5c, //0x000019f7 cmpb $92, (%r9) + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x000019fb jne LBB6_4 + 0x31, 0xf6, //0x00001a01 xorl %esi, %esi + 0xe9, 0xc8, 0x00, 0x00, 0x00, //0x00001a03 jmp LBB6_13 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001a08 .p2align 4, 0x90 + //0x00001a10 LBB6_4 + 0x4d, 0x89, 0xef, //0x00001a10 movq %r13, %r15 + 0x48, 0x89, 0xc6, //0x00001a13 movq %rax, %rsi + 0x4d, 0x89, 0xce, //0x00001a16 movq %r9, %r14 + 0x49, 0x83, 0xfd, 0x10, //0x00001a19 cmpq $16, %r13 + 0x0f, 0x8c, 0x3d, 0x00, 0x00, 0x00, //0x00001a1d jl LBB6_7 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001a23 .p2align 4, 0x90 + //0x00001a30 LBB6_5 + 0xc4, 0xc1, 0x7a, 0x6f, 0x0e, //0x00001a30 vmovdqu (%r14), %xmm1 + 0xc5, 0xfa, 0x7f, 0x0e, //0x00001a35 vmovdqu %xmm1, (%rsi) + 0xc5, 0xf1, 0x74, 0xc8, //0x00001a39 vpcmpeqb %xmm0, %xmm1, %xmm1 + 0xc5, 0xf9, 0xd7, 0xd9, //0x00001a3d vpmovmskb %xmm1, %ebx + 0x66, 0x85, 0xdb, //0x00001a41 testw %bx, %bx + 0x0f, 0x85, 0x60, 0x00, 0x00, 0x00, //0x00001a44 jne LBB6_12 + 0x49, 0x83, 0xc6, 0x10, //0x00001a4a addq $16, %r14 + 0x48, 0x83, 0xc6, 0x10, //0x00001a4e addq $16, %rsi + 0x49, 0x83, 0xff, 0x1f, //0x00001a52 cmpq $31, %r15 + 0x4d, 0x8d, 0x7f, 0xf0, //0x00001a56 leaq $-16(%r15), %r15 + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00001a5a jg LBB6_5 + //0x00001a60 LBB6_7 + 0x4d, 0x85, 0xff, //0x00001a60 testq %r15, %r15 + 0x0f, 0x84, 0xd5, 0x05, 0x00, 0x00, //0x00001a63 je LBB6_83 + 0x31, 0xdb, //0x00001a69 xorl %ebx, %ebx + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001a6b .p2align 4, 0x90 + //0x00001a70 LBB6_9 + 0x41, 0x0f, 0xb6, 0x0c, 0x1e, //0x00001a70 movzbl (%r14,%rbx), %ecx + 0x80, 0xf9, 0x5c, //0x00001a75 cmpb $92, %cl + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00001a78 je LBB6_11 + 0x88, 0x0c, 0x1e, //0x00001a7e movb %cl, (%rsi,%rbx) + 0x48, 0xff, 0xc3, //0x00001a81 incq %rbx + 0x49, 0x39, 0xdf, //0x00001a84 cmpq %rbx, %r15 + 0x0f, 0x85, 0xe3, 0xff, 0xff, 0xff, //0x00001a87 jne LBB6_9 + 0xe9, 0xac, 0x05, 0x00, 0x00, //0x00001a8d jmp LBB6_83 + //0x00001a92 LBB6_11 + 0x49, 0x01, 0xde, //0x00001a92 addq %rbx, %r14 + 0x4d, 0x29, 0xce, //0x00001a95 subq %r9, %r14 + 0x4c, 0x89, 0xf6, //0x00001a98 movq %r14, %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00001a9b cmpq $-1, %rsi + 0x0f, 0x85, 0x2b, 0x00, 0x00, 0x00, //0x00001a9f jne LBB6_13 + 0xe9, 0x94, 0x05, 0x00, 0x00, //0x00001aa5 jmp LBB6_83 + //0x00001aaa LBB6_12 + 0x0f, 0xb7, 0xcb, //0x00001aaa movzwl %bx, %ecx + 0x4d, 0x29, 0xce, //0x00001aad subq %r9, %r14 + 0x48, 0x0f, 0xbc, 0xf1, //0x00001ab0 bsfq %rcx, %rsi + 0x4c, 0x01, 0xf6, //0x00001ab4 addq %r14, %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00001ab7 cmpq $-1, %rsi + 0x0f, 0x84, 0x7d, 0x05, 0x00, 0x00, //0x00001abb je LBB6_83 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001ac1 .p2align 4, 0x90 + //0x00001ad0 LBB6_13 + 0x48, 0x8d, 0x4e, 0x02, //0x00001ad0 leaq $2(%rsi), %rcx + 0x49, 0x29, 0xcd, //0x00001ad4 subq %rcx, %r13 + 0x0f, 0x88, 0x2a, 0x06, 0x00, 0x00, //0x00001ad7 js LBB6_94 + 0x4d, 0x8d, 0x4c, 0x31, 0x02, //0x00001add leaq $2(%r9,%rsi), %r9 + 0x4d, 0x85, 0xd2, //0x00001ae2 testq %r10, %r10 + 0x0f, 0x85, 0xe5, 0x03, 0x00, 0x00, //0x00001ae5 jne LBB6_58 + //0x00001aeb LBB6_15 + 0x48, 0x01, 0xf0, //0x00001aeb addq %rsi, %rax + 0x41, 0x0f, 0xb6, 0x49, 0xff, //0x00001aee movzbl $-1(%r9), %ecx + 0x42, 0x8a, 0x0c, 0x01, //0x00001af3 movb (%rcx,%r8), %cl + 0x80, 0xf9, 0xff, //0x00001af7 cmpb $-1, %cl + 0x0f, 0x84, 0x20, 0x00, 0x00, 0x00, //0x00001afa je LBB6_18 + 0x84, 0xc9, //0x00001b00 testb %cl, %cl + 0x0f, 0x84, 0x12, 0x06, 0x00, 0x00, //0x00001b02 je LBB6_95 + 0x88, 0x08, //0x00001b08 movb %cl, (%rax) + 0x48, 0xff, 0xc0, //0x00001b0a incq %rax + 0xe9, 0xb0, 0x03, 0x00, 0x00, //0x00001b0d jmp LBB6_57 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001b12 .p2align 4, 0x90 + //0x00001b20 LBB6_18 + 0x49, 0x83, 0xfd, 0x03, //0x00001b20 cmpq $3, %r13 + 0x0f, 0x8e, 0xdd, 0x05, 0x00, 0x00, //0x00001b24 jle LBB6_94 + 0x41, 0x8b, 0x31, //0x00001b2a movl (%r9), %esi + 0x89, 0xf1, //0x00001b2d movl %esi, %ecx + 0xf7, 0xd1, //0x00001b2f notl %ecx + 0x8d, 0x9e, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001b31 leal $-808464432(%rsi), %ebx + 0x81, 0xe1, 0x80, 0x80, 0x80, 0x80, //0x00001b37 andl $-2139062144, %ecx + 0x85, 0xd9, //0x00001b3d testl %ebx, %ecx + 0x0f, 0x85, 0x0e, 0x05, 0x00, 0x00, //0x00001b3f jne LBB6_85 + 0x8d, 0x9e, 0x19, 0x19, 0x19, 0x19, //0x00001b45 leal $421075225(%rsi), %ebx + 0x09, 0xf3, //0x00001b4b orl %esi, %ebx + 0xf7, 0xc3, 0x80, 0x80, 0x80, 0x80, //0x00001b4d testl $-2139062144, %ebx + 0x0f, 0x85, 0xfa, 0x04, 0x00, 0x00, //0x00001b53 jne LBB6_85 + 0x89, 0xf3, //0x00001b59 movl %esi, %ebx + 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001b5b andl $2139062143, %ebx + 0x41, 0xbe, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001b61 movl $-1061109568, %r14d + 0x41, 0x29, 0xde, //0x00001b67 subl %ebx, %r14d + 0x44, 0x8d, 0xbb, 0x46, 0x46, 0x46, 0x46, //0x00001b6a leal $1179010630(%rbx), %r15d + 0x41, 0x21, 0xce, //0x00001b71 andl %ecx, %r14d + 0x45, 0x85, 0xfe, //0x00001b74 testl %r15d, %r14d + 0x0f, 0x85, 0xd6, 0x04, 0x00, 0x00, //0x00001b77 jne LBB6_85 + 0x41, 0xbe, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001b7d movl $-522133280, %r14d + 0x41, 0x29, 0xde, //0x00001b83 subl %ebx, %r14d + 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x00001b86 addl $960051513, %ebx + 0x44, 0x21, 0xf1, //0x00001b8c andl %r14d, %ecx + 0x85, 0xd9, //0x00001b8f testl %ebx, %ecx + 0x0f, 0x85, 0xbc, 0x04, 0x00, 0x00, //0x00001b91 jne LBB6_85 + 0x0f, 0xce, //0x00001b97 bswapl %esi + 0x89, 0xf1, //0x00001b99 movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001b9b shrl $4, %ecx + 0xf7, 0xd1, //0x00001b9e notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00001ba0 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00001ba6 leal (%rcx,%rcx,8), %ecx + 0x81, 0xe6, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001ba9 andl $252645135, %esi + 0x01, 0xce, //0x00001baf addl %ecx, %esi + 0x89, 0xf1, //0x00001bb1 movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001bb3 shrl $4, %ecx + 0x09, 0xf1, //0x00001bb6 orl %esi, %ecx + 0x44, 0x0f, 0xb6, 0xf9, //0x00001bb8 movzbl %cl, %r15d + 0xc1, 0xe9, 0x08, //0x00001bbc shrl $8, %ecx + 0x81, 0xe1, 0x00, 0xff, 0x00, 0x00, //0x00001bbf andl $65280, %ecx + 0x41, 0x09, 0xcf, //0x00001bc5 orl %ecx, %r15d + 0x4d, 0x8d, 0x75, 0xfc, //0x00001bc8 leaq $-4(%r13), %r14 + 0x41, 0x81, 0xff, 0x80, 0x00, 0x00, 0x00, //0x00001bcc cmpl $128, %r15d + 0x0f, 0x82, 0x46, 0x03, 0x00, 0x00, //0x00001bd3 jb LBB6_66 + 0x45, 0x31, 0xe4, //0x00001bd9 xorl %r12d, %r12d + 0x4d, 0x85, 0xd2, //0x00001bdc testq %r10, %r10 + 0x0f, 0x84, 0x5b, 0x01, 0x00, 0x00, //0x00001bdf je LBB6_40 + //0x00001be5 LBB6_25 + 0x41, 0x81, 0xff, 0x00, 0x08, 0x00, 0x00, //0x00001be5 cmpl $2048, %r15d + 0x0f, 0x82, 0x3c, 0x03, 0x00, 0x00, //0x00001bec jb LBB6_68 + 0x44, 0x89, 0xf9, //0x00001bf2 movl %r15d, %ecx + 0x81, 0xe1, 0x00, 0xf8, 0xff, 0xff, //0x00001bf5 andl $-2048, %ecx + 0x81, 0xf9, 0x00, 0xd8, 0x00, 0x00, //0x00001bfb cmpl $55296, %ecx + 0x0f, 0x85, 0x89, 0x02, 0x00, 0x00, //0x00001c01 jne LBB6_54 + 0x4d, 0x85, 0xf6, //0x00001c07 testq %r14, %r14 + 0x0f, 0x8e, 0x6b, 0x03, 0x00, 0x00, //0x00001c0a jle LBB6_72 + 0x43, 0x80, 0x7c, 0x21, 0x04, 0x5c, //0x00001c10 cmpb $92, $4(%r9,%r12) + 0x0f, 0x85, 0x6e, 0x03, 0x00, 0x00, //0x00001c16 jne LBB6_73 + 0x41, 0x81, 0xff, 0xff, 0xdb, 0x00, 0x00, //0x00001c1c cmpl $56319, %r15d + 0x0f, 0x87, 0x34, 0x03, 0x00, 0x00, //0x00001c23 ja LBB6_70 + 0x49, 0x83, 0xfe, 0x07, //0x00001c29 cmpq $7, %r14 + 0x0f, 0x8c, 0x2a, 0x03, 0x00, 0x00, //0x00001c2d jl LBB6_70 + 0x43, 0x80, 0x7c, 0x21, 0x05, 0x5c, //0x00001c33 cmpb $92, $5(%r9,%r12) + 0x0f, 0x85, 0x1e, 0x03, 0x00, 0x00, //0x00001c39 jne LBB6_70 + 0x43, 0x80, 0x7c, 0x21, 0x06, 0x75, //0x00001c3f cmpb $117, $6(%r9,%r12) + 0x0f, 0x85, 0x12, 0x03, 0x00, 0x00, //0x00001c45 jne LBB6_70 + 0x43, 0x8b, 0x74, 0x21, 0x07, //0x00001c4b movl $7(%r9,%r12), %esi + 0x89, 0xf1, //0x00001c50 movl %esi, %ecx + 0xf7, 0xd1, //0x00001c52 notl %ecx + 0x8d, 0x9e, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001c54 leal $-808464432(%rsi), %ebx + 0x81, 0xe1, 0x80, 0x80, 0x80, 0x80, //0x00001c5a andl $-2139062144, %ecx + 0x85, 0xd9, //0x00001c60 testl %ebx, %ecx + 0x0f, 0x85, 0xe8, 0x04, 0x00, 0x00, //0x00001c62 jne LBB6_99 + 0x8d, 0x9e, 0x19, 0x19, 0x19, 0x19, //0x00001c68 leal $421075225(%rsi), %ebx + 0x09, 0xf3, //0x00001c6e orl %esi, %ebx + 0xf7, 0xc3, 0x80, 0x80, 0x80, 0x80, //0x00001c70 testl $-2139062144, %ebx + 0x0f, 0x85, 0xd4, 0x04, 0x00, 0x00, //0x00001c76 jne LBB6_99 + 0x89, 0xf3, //0x00001c7c movl %esi, %ebx + 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001c7e andl $2139062143, %ebx + 0xc7, 0x45, 0xd4, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001c84 movl $-1061109568, $-44(%rbp) + 0x29, 0x5d, 0xd4, //0x00001c8b subl %ebx, $-44(%rbp) + 0x48, 0x89, 0x75, 0xb0, //0x00001c8e movq %rsi, $-80(%rbp) + 0x8d, 0xb3, 0x46, 0x46, 0x46, 0x46, //0x00001c92 leal $1179010630(%rbx), %esi + 0x89, 0x75, 0xc4, //0x00001c98 movl %esi, $-60(%rbp) + 0x21, 0x4d, 0xd4, //0x00001c9b andl %ecx, $-44(%rbp) + 0x8b, 0x75, 0xc4, //0x00001c9e movl $-60(%rbp), %esi + 0x85, 0x75, 0xd4, //0x00001ca1 testl %esi, $-44(%rbp) + 0x48, 0x8b, 0x75, 0xb0, //0x00001ca4 movq $-80(%rbp), %rsi + 0x0f, 0x85, 0xa2, 0x04, 0x00, 0x00, //0x00001ca8 jne LBB6_99 + 0xc7, 0x45, 0xd4, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001cae movl $-522133280, $-44(%rbp) + 0x29, 0x5d, 0xd4, //0x00001cb5 subl %ebx, $-44(%rbp) + 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x00001cb8 addl $960051513, %ebx + 0x23, 0x4d, 0xd4, //0x00001cbe andl $-44(%rbp), %ecx + 0x85, 0xd9, //0x00001cc1 testl %ebx, %ecx + 0x0f, 0x85, 0x87, 0x04, 0x00, 0x00, //0x00001cc3 jne LBB6_99 + 0x0f, 0xce, //0x00001cc9 bswapl %esi + 0x89, 0xf1, //0x00001ccb movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001ccd shrl $4, %ecx + 0xf7, 0xd1, //0x00001cd0 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00001cd2 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00001cd8 leal (%rcx,%rcx,8), %ecx + 0x81, 0xe6, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001cdb andl $252645135, %esi + 0x01, 0xce, //0x00001ce1 addl %ecx, %esi + 0x89, 0xf1, //0x00001ce3 movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001ce5 shrl $4, %ecx + 0x09, 0xf1, //0x00001ce8 orl %esi, %ecx + 0x89, 0xce, //0x00001cea movl %ecx, %esi + 0xc1, 0xee, 0x08, //0x00001cec shrl $8, %esi + 0x81, 0xe6, 0x00, 0xff, 0x00, 0x00, //0x00001cef andl $65280, %esi + 0x0f, 0xb6, 0xd9, //0x00001cf5 movzbl %cl, %ebx + 0x09, 0xf3, //0x00001cf8 orl %esi, %ebx + 0x81, 0xe1, 0x00, 0x00, 0xfc, 0x00, //0x00001cfa andl $16515072, %ecx + 0x81, 0xf9, 0x00, 0x00, 0xdc, 0x00, //0x00001d00 cmpl $14417920, %ecx + 0x0f, 0x84, 0xac, 0x02, 0x00, 0x00, //0x00001d06 je LBB6_77 + 0xf6, 0x45, 0xb8, 0x02, //0x00001d0c testb $2, $-72(%rbp) + 0x0f, 0x84, 0x41, 0x05, 0x00, 0x00, //0x00001d10 je LBB6_114 + 0x49, 0x83, 0xc6, 0xf9, //0x00001d16 addq $-7, %r14 + 0x66, 0xc7, 0x00, 0xef, 0xbf, //0x00001d1a movw $-16401, (%rax) + 0xc6, 0x40, 0x02, 0xbd, //0x00001d1f movb $-67, $2(%rax) + 0x48, 0x83, 0xc0, 0x03, //0x00001d23 addq $3, %rax + 0x49, 0x83, 0xc4, 0x07, //0x00001d27 addq $7, %r12 + 0x41, 0x89, 0xdf, //0x00001d2b movl %ebx, %r15d + 0x83, 0xfb, 0x7f, //0x00001d2e cmpl $127, %ebx + 0x0f, 0x87, 0xae, 0xfe, 0xff, 0xff, //0x00001d31 ja LBB6_25 + 0xe9, 0x44, 0x01, 0x00, 0x00, //0x00001d37 jmp LBB6_53 + 0x90, 0x90, 0x90, 0x90, //0x00001d3c .p2align 4, 0x90 + //0x00001d40 LBB6_40 + 0x41, 0x81, 0xff, 0x00, 0x08, 0x00, 0x00, //0x00001d40 cmpl $2048, %r15d + 0x0f, 0x82, 0xe1, 0x01, 0x00, 0x00, //0x00001d47 jb LBB6_68 + 0x44, 0x89, 0xf9, //0x00001d4d movl %r15d, %ecx + 0x81, 0xe1, 0x00, 0xf8, 0xff, 0xff, //0x00001d50 andl $-2048, %ecx + 0x81, 0xf9, 0x00, 0xd8, 0x00, 0x00, //0x00001d56 cmpl $55296, %ecx + 0x0f, 0x85, 0x2e, 0x01, 0x00, 0x00, //0x00001d5c jne LBB6_54 + 0x41, 0x81, 0xff, 0xff, 0xdb, 0x00, 0x00, //0x00001d62 cmpl $56319, %r15d + 0x0f, 0x87, 0xe4, 0x01, 0x00, 0x00, //0x00001d69 ja LBB6_69 + 0x49, 0x83, 0xfe, 0x06, //0x00001d6f cmpq $6, %r14 + 0x0f, 0x8c, 0xda, 0x01, 0x00, 0x00, //0x00001d73 jl LBB6_69 + 0x43, 0x80, 0x7c, 0x21, 0x04, 0x5c, //0x00001d79 cmpb $92, $4(%r9,%r12) + 0x0f, 0x85, 0xce, 0x01, 0x00, 0x00, //0x00001d7f jne LBB6_69 + 0x43, 0x80, 0x7c, 0x21, 0x05, 0x75, //0x00001d85 cmpb $117, $5(%r9,%r12) + 0x0f, 0x85, 0xc2, 0x01, 0x00, 0x00, //0x00001d8b jne LBB6_69 + 0x43, 0x8b, 0x74, 0x21, 0x06, //0x00001d91 movl $6(%r9,%r12), %esi + 0x89, 0xf1, //0x00001d96 movl %esi, %ecx + 0xf7, 0xd1, //0x00001d98 notl %ecx + 0x8d, 0x9e, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001d9a leal $-808464432(%rsi), %ebx + 0x81, 0xe1, 0x80, 0x80, 0x80, 0x80, //0x00001da0 andl $-2139062144, %ecx + 0x85, 0xd9, //0x00001da6 testl %ebx, %ecx + 0x0f, 0x85, 0x98, 0x03, 0x00, 0x00, //0x00001da8 jne LBB6_98 + 0x8d, 0x9e, 0x19, 0x19, 0x19, 0x19, //0x00001dae leal $421075225(%rsi), %ebx + 0x09, 0xf3, //0x00001db4 orl %esi, %ebx + 0xf7, 0xc3, 0x80, 0x80, 0x80, 0x80, //0x00001db6 testl $-2139062144, %ebx + 0x0f, 0x85, 0x84, 0x03, 0x00, 0x00, //0x00001dbc jne LBB6_98 + 0x89, 0xf3, //0x00001dc2 movl %esi, %ebx + 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001dc4 andl $2139062143, %ebx + 0xc7, 0x45, 0xd4, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001dca movl $-1061109568, $-44(%rbp) + 0x29, 0x5d, 0xd4, //0x00001dd1 subl %ebx, $-44(%rbp) + 0x48, 0x89, 0x75, 0xb0, //0x00001dd4 movq %rsi, $-80(%rbp) + 0x8d, 0xb3, 0x46, 0x46, 0x46, 0x46, //0x00001dd8 leal $1179010630(%rbx), %esi + 0x89, 0x75, 0xc4, //0x00001dde movl %esi, $-60(%rbp) + 0x21, 0x4d, 0xd4, //0x00001de1 andl %ecx, $-44(%rbp) + 0x8b, 0x75, 0xc4, //0x00001de4 movl $-60(%rbp), %esi + 0x85, 0x75, 0xd4, //0x00001de7 testl %esi, $-44(%rbp) + 0x48, 0x8b, 0x75, 0xb0, //0x00001dea movq $-80(%rbp), %rsi + 0x0f, 0x85, 0x52, 0x03, 0x00, 0x00, //0x00001dee jne LBB6_98 + 0xc7, 0x45, 0xd4, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001df4 movl $-522133280, $-44(%rbp) + 0x29, 0x5d, 0xd4, //0x00001dfb subl %ebx, $-44(%rbp) + 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x00001dfe addl $960051513, %ebx + 0x23, 0x4d, 0xd4, //0x00001e04 andl $-44(%rbp), %ecx + 0x85, 0xd9, //0x00001e07 testl %ebx, %ecx + 0x0f, 0x85, 0x37, 0x03, 0x00, 0x00, //0x00001e09 jne LBB6_98 + 0x0f, 0xce, //0x00001e0f bswapl %esi + 0x89, 0xf1, //0x00001e11 movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001e13 shrl $4, %ecx + 0xf7, 0xd1, //0x00001e16 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00001e18 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00001e1e leal (%rcx,%rcx,8), %ecx + 0x81, 0xe6, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001e21 andl $252645135, %esi + 0x01, 0xce, //0x00001e27 addl %ecx, %esi + 0x89, 0xf1, //0x00001e29 movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001e2b shrl $4, %ecx + 0x09, 0xf1, //0x00001e2e orl %esi, %ecx + 0x89, 0xce, //0x00001e30 movl %ecx, %esi + 0xc1, 0xee, 0x08, //0x00001e32 shrl $8, %esi + 0x81, 0xe6, 0x00, 0xff, 0x00, 0x00, //0x00001e35 andl $65280, %esi + 0x0f, 0xb6, 0xd9, //0x00001e3b movzbl %cl, %ebx + 0x09, 0xf3, //0x00001e3e orl %esi, %ebx + 0x81, 0xe1, 0x00, 0x00, 0xfc, 0x00, //0x00001e40 andl $16515072, %ecx + 0x81, 0xf9, 0x00, 0x00, 0xdc, 0x00, //0x00001e46 cmpl $14417920, %ecx + 0x0f, 0x84, 0x55, 0x01, 0x00, 0x00, //0x00001e4c je LBB6_76 + 0xf6, 0x45, 0xb8, 0x02, //0x00001e52 testb $2, $-72(%rbp) + 0x0f, 0x84, 0xf1, 0x03, 0x00, 0x00, //0x00001e56 je LBB6_113 + 0x49, 0x83, 0xc6, 0xfa, //0x00001e5c addq $-6, %r14 + 0x66, 0xc7, 0x00, 0xef, 0xbf, //0x00001e60 movw $-16401, (%rax) + 0xc6, 0x40, 0x02, 0xbd, //0x00001e65 movb $-67, $2(%rax) + 0x48, 0x83, 0xc0, 0x03, //0x00001e69 addq $3, %rax + 0x49, 0x83, 0xc4, 0x06, //0x00001e6d addq $6, %r12 + 0x41, 0x89, 0xdf, //0x00001e71 movl %ebx, %r15d + 0x81, 0xfb, 0x80, 0x00, 0x00, 0x00, //0x00001e74 cmpl $128, %ebx + 0x0f, 0x83, 0xc0, 0xfe, 0xff, 0xff, //0x00001e7a jae LBB6_40 + //0x00001e80 LBB6_53 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00001e80 leaq $4(%r9,%r12), %r9 + 0x41, 0x89, 0xdf, //0x00001e85 movl %ebx, %r15d + 0xe9, 0x96, 0x00, 0x00, 0x00, //0x00001e88 jmp LBB6_67 + 0x90, 0x90, 0x90, //0x00001e8d .p2align 4, 0x90 + //0x00001e90 LBB6_54 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00001e90 leaq $4(%r9,%r12), %r9 + 0x44, 0x89, 0xf9, //0x00001e95 movl %r15d, %ecx + 0xc1, 0xe9, 0x0c, //0x00001e98 shrl $12, %ecx + 0x80, 0xc9, 0xe0, //0x00001e9b orb $-32, %cl + 0x88, 0x08, //0x00001e9e movb %cl, (%rax) + 0x44, 0x89, 0xf9, //0x00001ea0 movl %r15d, %ecx + 0xc1, 0xe9, 0x06, //0x00001ea3 shrl $6, %ecx + 0x80, 0xe1, 0x3f, //0x00001ea6 andb $63, %cl + 0x80, 0xc9, 0x80, //0x00001ea9 orb $-128, %cl + 0x88, 0x48, 0x01, //0x00001eac movb %cl, $1(%rax) + 0x41, 0x80, 0xe7, 0x3f, //0x00001eaf andb $63, %r15b + 0x41, 0x80, 0xcf, 0x80, //0x00001eb3 orb $-128, %r15b + 0x44, 0x88, 0x78, 0x02, //0x00001eb7 movb %r15b, $2(%rax) + //0x00001ebb LBB6_55 + 0x48, 0x83, 0xc0, 0x03, //0x00001ebb addq $3, %rax + //0x00001ebf LBB6_56 + 0x4d, 0x89, 0xf5, //0x00001ebf movq %r14, %r13 + //0x00001ec2 LBB6_57 + 0x4d, 0x85, 0xed, //0x00001ec2 testq %r13, %r13 + 0x0f, 0x85, 0x2c, 0xfb, 0xff, 0xff, //0x00001ec5 jne LBB6_2 + 0xe9, 0x63, 0x02, 0x00, 0x00, //0x00001ecb jmp LBB6_96 + //0x00001ed0 LBB6_58 + 0x45, 0x85, 0xed, //0x00001ed0 testl %r13d, %r13d + 0x0f, 0x84, 0x2e, 0x02, 0x00, 0x00, //0x00001ed3 je LBB6_94 + 0x41, 0x80, 0x79, 0xff, 0x5c, //0x00001ed9 cmpb $92, $-1(%r9) + 0x0f, 0x85, 0x57, 0x02, 0x00, 0x00, //0x00001ede jne LBB6_97 + 0x41, 0x80, 0x39, 0x5c, //0x00001ee4 cmpb $92, (%r9) + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x00001ee8 jne LBB6_65 + 0x41, 0x83, 0xfd, 0x01, //0x00001eee cmpl $1, %r13d + 0x0f, 0x8e, 0x0f, 0x02, 0x00, 0x00, //0x00001ef2 jle LBB6_94 + 0x41, 0x8a, 0x49, 0x01, //0x00001ef8 movb $1(%r9), %cl + 0x80, 0xf9, 0x22, //0x00001efc cmpb $34, %cl + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x00001eff je LBB6_64 + 0x80, 0xf9, 0x5c, //0x00001f05 cmpb $92, %cl + 0x0f, 0x85, 0x0c, 0x03, 0x00, 0x00, //0x00001f08 jne LBB6_109 + //0x00001f0e LBB6_64 + 0x49, 0xff, 0xc1, //0x00001f0e incq %r9 + 0x49, 0xff, 0xcd, //0x00001f11 decq %r13 + //0x00001f14 LBB6_65 + 0x49, 0xff, 0xc1, //0x00001f14 incq %r9 + 0x49, 0xff, 0xcd, //0x00001f17 decq %r13 + 0xe9, 0xcc, 0xfb, 0xff, 0xff, //0x00001f1a jmp LBB6_15 + //0x00001f1f LBB6_66 + 0x49, 0x83, 0xc1, 0x04, //0x00001f1f addq $4, %r9 + //0x00001f23 LBB6_67 + 0x44, 0x88, 0x38, //0x00001f23 movb %r15b, (%rax) + 0x48, 0xff, 0xc0, //0x00001f26 incq %rax + 0xe9, 0x91, 0xff, 0xff, 0xff, //0x00001f29 jmp LBB6_56 + //0x00001f2e LBB6_68 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00001f2e leaq $4(%r9,%r12), %r9 + 0x44, 0x89, 0xf9, //0x00001f33 movl %r15d, %ecx + 0xc1, 0xe9, 0x06, //0x00001f36 shrl $6, %ecx + 0x80, 0xc9, 0xc0, //0x00001f39 orb $-64, %cl + 0x88, 0x08, //0x00001f3c movb %cl, (%rax) + 0x41, 0x80, 0xe7, 0x3f, //0x00001f3e andb $63, %r15b + 0x41, 0x80, 0xcf, 0x80, //0x00001f42 orb $-128, %r15b + 0x44, 0x88, 0x78, 0x01, //0x00001f46 movb %r15b, $1(%rax) + 0x48, 0x83, 0xc0, 0x02, //0x00001f4a addq $2, %rax + 0xe9, 0x6c, 0xff, 0xff, 0xff, //0x00001f4e jmp LBB6_56 + //0x00001f53 LBB6_69 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00001f53 leaq $4(%r9,%r12), %r9 + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00001f58 jmp LBB6_71 + //0x00001f5d LBB6_70 + 0x4f, 0x8d, 0x4c, 0x21, 0x05, //0x00001f5d leaq $5(%r9,%r12), %r9 + 0x4d, 0x29, 0xe5, //0x00001f62 subq %r12, %r13 + 0x49, 0x83, 0xc5, 0xfb, //0x00001f65 addq $-5, %r13 + 0x4d, 0x89, 0xee, //0x00001f69 movq %r13, %r14 + //0x00001f6c LBB6_71 + 0xf6, 0x45, 0xb8, 0x02, //0x00001f6c testb $2, $-72(%rbp) + 0x0f, 0x85, 0x23, 0x00, 0x00, 0x00, //0x00001f70 jne LBB6_75 + 0xe9, 0xfb, 0x02, 0x00, 0x00, //0x00001f76 jmp LBB6_116 + //0x00001f7b LBB6_72 + 0xf6, 0x45, 0xb8, 0x02, //0x00001f7b testb $2, $-72(%rbp) + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001f7f jne LBB6_74 + 0xe9, 0x7d, 0x01, 0x00, 0x00, //0x00001f85 jmp LBB6_94 + //0x00001f8a LBB6_73 + 0xf6, 0x45, 0xb8, 0x02, //0x00001f8a testb $2, $-72(%rbp) + 0x0f, 0x84, 0xef, 0x02, 0x00, 0x00, //0x00001f8e je LBB6_117 + //0x00001f94 LBB6_74 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00001f94 leaq $4(%r9,%r12), %r9 + //0x00001f99 LBB6_75 + 0x66, 0xc7, 0x00, 0xef, 0xbf, //0x00001f99 movw $-16401, (%rax) + 0xc6, 0x40, 0x02, 0xbd, //0x00001f9e movb $-67, $2(%rax) + 0xe9, 0x14, 0xff, 0xff, 0xff, //0x00001fa2 jmp LBB6_55 + //0x00001fa7 LBB6_76 + 0x4f, 0x8d, 0x4c, 0x21, 0x0a, //0x00001fa7 leaq $10(%r9,%r12), %r9 + 0x4d, 0x29, 0xe5, //0x00001fac subq %r12, %r13 + 0x49, 0x83, 0xc5, 0xf6, //0x00001faf addq $-10, %r13 + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x00001fb3 jmp LBB6_78 + //0x00001fb8 LBB6_77 + 0x4f, 0x8d, 0x4c, 0x21, 0x0b, //0x00001fb8 leaq $11(%r9,%r12), %r9 + 0x4d, 0x29, 0xe5, //0x00001fbd subq %r12, %r13 + 0x49, 0x83, 0xc5, 0xf5, //0x00001fc0 addq $-11, %r13 + //0x00001fc4 LBB6_78 + 0x41, 0xc1, 0xe7, 0x0a, //0x00001fc4 shll $10, %r15d + 0x41, 0x8d, 0x8c, 0x1f, 0x00, 0x24, 0xa0, 0xfc, //0x00001fc8 leal $-56613888(%r15,%rbx), %ecx + 0x81, 0xf9, 0x00, 0x00, 0x11, 0x00, //0x00001fd0 cmpl $1114112, %ecx + 0x0f, 0x82, 0x1c, 0x00, 0x00, 0x00, //0x00001fd6 jb LBB6_81 + 0xf6, 0x45, 0xb8, 0x02, //0x00001fdc testb $2, $-72(%rbp) + 0x0f, 0x84, 0x4d, 0x02, 0x00, 0x00, //0x00001fe0 je LBB6_111 + 0x66, 0xc7, 0x00, 0xef, 0xbf, //0x00001fe6 movw $-16401, (%rax) + 0xc6, 0x40, 0x02, 0xbd, //0x00001feb movb $-67, $2(%rax) + 0x48, 0x83, 0xc0, 0x03, //0x00001fef addq $3, %rax + 0xe9, 0xca, 0xfe, 0xff, 0xff, //0x00001ff3 jmp LBB6_57 + //0x00001ff8 LBB6_81 + 0x89, 0xce, //0x00001ff8 movl %ecx, %esi + 0xc1, 0xee, 0x12, //0x00001ffa shrl $18, %esi + 0x40, 0x80, 0xce, 0xf0, //0x00001ffd orb $-16, %sil + 0x40, 0x88, 0x30, //0x00002001 movb %sil, (%rax) + 0x89, 0xce, //0x00002004 movl %ecx, %esi + 0xc1, 0xee, 0x0c, //0x00002006 shrl $12, %esi + 0x40, 0x80, 0xe6, 0x3f, //0x00002009 andb $63, %sil + 0x40, 0x80, 0xce, 0x80, //0x0000200d orb $-128, %sil + 0x40, 0x88, 0x70, 0x01, //0x00002011 movb %sil, $1(%rax) + 0x89, 0xce, //0x00002015 movl %ecx, %esi + 0xc1, 0xee, 0x06, //0x00002017 shrl $6, %esi + 0x40, 0x80, 0xe6, 0x3f, //0x0000201a andb $63, %sil + 0x40, 0x80, 0xce, 0x80, //0x0000201e orb $-128, %sil + 0x40, 0x88, 0x70, 0x02, //0x00002022 movb %sil, $2(%rax) + 0x80, 0xe1, 0x3f, //0x00002026 andb $63, %cl + 0x80, 0xc9, 0x80, //0x00002029 orb $-128, %cl + 0x88, 0x48, 0x03, //0x0000202c movb %cl, $3(%rax) + 0x48, 0x83, 0xc0, 0x04, //0x0000202f addq $4, %rax + 0xe9, 0x8a, 0xfe, 0xff, 0xff, //0x00002033 jmp LBB6_57 + //0x00002038 LBB6_82 + 0x45, 0x31, 0xed, //0x00002038 xorl %r13d, %r13d + 0x48, 0x89, 0xd0, //0x0000203b movq %rdx, %rax + //0x0000203e LBB6_83 + 0x4c, 0x01, 0xe8, //0x0000203e addq %r13, %rax + 0x48, 0x29, 0xd0, //0x00002041 subq %rdx, %rax + //0x00002044 LBB6_84 + 0x48, 0x83, 0xc4, 0x28, //0x00002044 addq $40, %rsp + 0x5b, //0x00002048 popq %rbx + 0x41, 0x5c, //0x00002049 popq %r12 + 0x41, 0x5d, //0x0000204b popq %r13 + 0x41, 0x5e, //0x0000204d popq %r14 + 0x41, 0x5f, //0x0000204f popq %r15 + 0x5d, //0x00002051 popq %rbp + 0xc3, //0x00002052 retq + //0x00002053 LBB6_85 + 0x4c, 0x89, 0xca, //0x00002053 movq %r9, %rdx + 0x48, 0x29, 0xfa, //0x00002056 subq %rdi, %rdx + 0x48, 0x8b, 0x7d, 0xc8, //0x00002059 movq $-56(%rbp), %rdi + 0x48, 0x89, 0x17, //0x0000205d movq %rdx, (%rdi) + 0x41, 0x8a, 0x09, //0x00002060 movb (%r9), %cl + 0x8d, 0x71, 0xd0, //0x00002063 leal $-48(%rcx), %esi + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00002066 movq $-2, %rax + 0x40, 0x80, 0xfe, 0x0a, //0x0000206d cmpb $10, %sil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x00002071 jb LBB6_87 + 0x80, 0xe1, 0xdf, //0x00002077 andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x0000207a addb $-65, %cl + 0x80, 0xf9, 0x05, //0x0000207d cmpb $5, %cl + 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x00002080 ja LBB6_84 + //0x00002086 LBB6_87 + 0x48, 0x8d, 0x4a, 0x01, //0x00002086 leaq $1(%rdx), %rcx + 0x48, 0x89, 0x0f, //0x0000208a movq %rcx, (%rdi) + 0x41, 0x8a, 0x49, 0x01, //0x0000208d movb $1(%r9), %cl + 0x8d, 0x71, 0xd0, //0x00002091 leal $-48(%rcx), %esi + 0x40, 0x80, 0xfe, 0x0a, //0x00002094 cmpb $10, %sil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x00002098 jb LBB6_89 + 0x80, 0xe1, 0xdf, //0x0000209e andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x000020a1 addb $-65, %cl + 0x80, 0xf9, 0x05, //0x000020a4 cmpb $5, %cl + 0x0f, 0x87, 0x97, 0xff, 0xff, 0xff, //0x000020a7 ja LBB6_84 + //0x000020ad LBB6_89 + 0x48, 0x8d, 0x4a, 0x02, //0x000020ad leaq $2(%rdx), %rcx + 0x48, 0x89, 0x0f, //0x000020b1 movq %rcx, (%rdi) + 0x41, 0x8a, 0x49, 0x02, //0x000020b4 movb $2(%r9), %cl + 0x8d, 0x71, 0xd0, //0x000020b8 leal $-48(%rcx), %esi + 0x40, 0x80, 0xfe, 0x0a, //0x000020bb cmpb $10, %sil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x000020bf jb LBB6_91 + 0x80, 0xe1, 0xdf, //0x000020c5 andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x000020c8 addb $-65, %cl + 0x80, 0xf9, 0x05, //0x000020cb cmpb $5, %cl + 0x0f, 0x87, 0x70, 0xff, 0xff, 0xff, //0x000020ce ja LBB6_84 + //0x000020d4 LBB6_91 + 0x48, 0x8d, 0x4a, 0x03, //0x000020d4 leaq $3(%rdx), %rcx + 0x48, 0x89, 0x0f, //0x000020d8 movq %rcx, (%rdi) + 0x41, 0x8a, 0x49, 0x03, //0x000020db movb $3(%r9), %cl + 0x8d, 0x71, 0xd0, //0x000020df leal $-48(%rcx), %esi + 0x40, 0x80, 0xfe, 0x0a, //0x000020e2 cmpb $10, %sil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x000020e6 jb LBB6_93 + 0x80, 0xe1, 0xdf, //0x000020ec andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x000020ef addb $-65, %cl + 0x80, 0xf9, 0x05, //0x000020f2 cmpb $5, %cl + 0x0f, 0x87, 0x49, 0xff, 0xff, 0xff, //0x000020f5 ja LBB6_84 + //0x000020fb LBB6_93 + 0x48, 0x83, 0xc2, 0x04, //0x000020fb addq $4, %rdx + 0x48, 0x89, 0x17, //0x000020ff movq %rdx, (%rdi) + 0xe9, 0x3d, 0xff, 0xff, 0xff, //0x00002102 jmp LBB6_84 + //0x00002107 LBB6_94 + 0x48, 0x8b, 0x45, 0xc8, //0x00002107 movq $-56(%rbp), %rax + 0x4c, 0x89, 0x18, //0x0000210b movq %r11, (%rax) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000210e movq $-1, %rax + 0xe9, 0x2a, 0xff, 0xff, 0xff, //0x00002115 jmp LBB6_84 + //0x0000211a LBB6_95 + 0x48, 0xf7, 0xd7, //0x0000211a notq %rdi + 0x49, 0x01, 0xf9, //0x0000211d addq %rdi, %r9 + 0x48, 0x8b, 0x45, 0xc8, //0x00002120 movq $-56(%rbp), %rax + 0x4c, 0x89, 0x08, //0x00002124 movq %r9, (%rax) + 0x48, 0xc7, 0xc0, 0xfd, 0xff, 0xff, 0xff, //0x00002127 movq $-3, %rax + 0xe9, 0x11, 0xff, 0xff, 0xff, //0x0000212e jmp LBB6_84 + //0x00002133 LBB6_96 + 0x45, 0x31, 0xed, //0x00002133 xorl %r13d, %r13d + 0xe9, 0x03, 0xff, 0xff, 0xff, //0x00002136 jmp LBB6_83 + //0x0000213b LBB6_97 + 0x48, 0xf7, 0xd7, //0x0000213b notq %rdi + 0x49, 0x01, 0xf9, //0x0000213e addq %rdi, %r9 + 0xe9, 0xda, 0x00, 0x00, 0x00, //0x00002141 jmp LBB6_110 + //0x00002146 LBB6_98 + 0x4b, 0x8d, 0x74, 0x21, 0x04, //0x00002146 leaq $4(%r9,%r12), %rsi + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x0000214b jmp LBB6_100 + //0x00002150 LBB6_99 + 0x4b, 0x8d, 0x74, 0x21, 0x05, //0x00002150 leaq $5(%r9,%r12), %rsi + //0x00002155 LBB6_100 + 0x48, 0x89, 0xf2, //0x00002155 movq %rsi, %rdx + 0x48, 0x29, 0xfa, //0x00002158 subq %rdi, %rdx + 0x48, 0x83, 0xc2, 0x02, //0x0000215b addq $2, %rdx + 0x48, 0x8b, 0x45, 0xc8, //0x0000215f movq $-56(%rbp), %rax + 0x48, 0x89, 0x10, //0x00002163 movq %rdx, (%rax) + 0x8a, 0x4e, 0x02, //0x00002166 movb $2(%rsi), %cl + 0x8d, 0x79, 0xd0, //0x00002169 leal $-48(%rcx), %edi + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x0000216c movq $-2, %rax + 0x40, 0x80, 0xff, 0x0a, //0x00002173 cmpb $10, %dil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x00002177 jb LBB6_102 + 0x80, 0xe1, 0xdf, //0x0000217d andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x00002180 addb $-65, %cl + 0x80, 0xf9, 0x05, //0x00002183 cmpb $5, %cl + 0x0f, 0x87, 0xb8, 0xfe, 0xff, 0xff, //0x00002186 ja LBB6_84 + //0x0000218c LBB6_102 + 0x48, 0x8d, 0x4a, 0x01, //0x0000218c leaq $1(%rdx), %rcx + 0x48, 0x8b, 0x7d, 0xc8, //0x00002190 movq $-56(%rbp), %rdi + 0x48, 0x89, 0x0f, //0x00002194 movq %rcx, (%rdi) + 0x8a, 0x4e, 0x03, //0x00002197 movb $3(%rsi), %cl + 0x8d, 0x79, 0xd0, //0x0000219a leal $-48(%rcx), %edi + 0x40, 0x80, 0xff, 0x0a, //0x0000219d cmpb $10, %dil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x000021a1 jb LBB6_104 + 0x80, 0xe1, 0xdf, //0x000021a7 andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x000021aa addb $-65, %cl + 0x80, 0xf9, 0x05, //0x000021ad cmpb $5, %cl + 0x0f, 0x87, 0x8e, 0xfe, 0xff, 0xff, //0x000021b0 ja LBB6_84 + //0x000021b6 LBB6_104 + 0x48, 0x8d, 0x4a, 0x02, //0x000021b6 leaq $2(%rdx), %rcx + 0x48, 0x8b, 0x7d, 0xc8, //0x000021ba movq $-56(%rbp), %rdi + 0x48, 0x89, 0x0f, //0x000021be movq %rcx, (%rdi) + 0x8a, 0x4e, 0x04, //0x000021c1 movb $4(%rsi), %cl + 0x8d, 0x79, 0xd0, //0x000021c4 leal $-48(%rcx), %edi + 0x40, 0x80, 0xff, 0x0a, //0x000021c7 cmpb $10, %dil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x000021cb jb LBB6_106 + 0x80, 0xe1, 0xdf, //0x000021d1 andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x000021d4 addb $-65, %cl + 0x80, 0xf9, 0x05, //0x000021d7 cmpb $5, %cl + 0x0f, 0x87, 0x64, 0xfe, 0xff, 0xff, //0x000021da ja LBB6_84 + //0x000021e0 LBB6_106 + 0x48, 0x8d, 0x4a, 0x03, //0x000021e0 leaq $3(%rdx), %rcx + 0x48, 0x8b, 0x7d, 0xc8, //0x000021e4 movq $-56(%rbp), %rdi + 0x48, 0x89, 0x0f, //0x000021e8 movq %rcx, (%rdi) + 0x8a, 0x4e, 0x05, //0x000021eb movb $5(%rsi), %cl + 0x8d, 0x71, 0xd0, //0x000021ee leal $-48(%rcx), %esi + 0x40, 0x80, 0xfe, 0x0a, //0x000021f1 cmpb $10, %sil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x000021f5 jb LBB6_108 + 0x80, 0xe1, 0xdf, //0x000021fb andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x000021fe addb $-65, %cl + 0x80, 0xf9, 0x05, //0x00002201 cmpb $5, %cl + 0x0f, 0x87, 0x3a, 0xfe, 0xff, 0xff, //0x00002204 ja LBB6_84 + //0x0000220a LBB6_108 + 0x48, 0x83, 0xc2, 0x04, //0x0000220a addq $4, %rdx + 0x48, 0x8b, 0x4d, 0xc8, //0x0000220e movq $-56(%rbp), %rcx + 0x48, 0x89, 0x11, //0x00002212 movq %rdx, (%rcx) + 0xe9, 0x2a, 0xfe, 0xff, 0xff, //0x00002215 jmp LBB6_84 + //0x0000221a LBB6_109 + 0x49, 0x29, 0xf9, //0x0000221a subq %rdi, %r9 + 0x49, 0xff, 0xc1, //0x0000221d incq %r9 + //0x00002220 LBB6_110 + 0x48, 0x8b, 0x45, 0xc8, //0x00002220 movq $-56(%rbp), %rax + 0x4c, 0x89, 0x08, //0x00002224 movq %r9, (%rax) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00002227 movq $-2, %rax + 0xe9, 0x11, 0xfe, 0xff, 0xff, //0x0000222e jmp LBB6_84 + //0x00002233 LBB6_111 + 0x49, 0x29, 0xf9, //0x00002233 subq %rdi, %r9 + 0x49, 0x83, 0xc1, 0xfc, //0x00002236 addq $-4, %r9 + //0x0000223a LBB6_112 + 0x48, 0x8b, 0x45, 0xc8, //0x0000223a movq $-56(%rbp), %rax + 0x4c, 0x89, 0x08, //0x0000223e movq %r9, (%rax) + 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x00002241 movq $-4, %rax + 0xe9, 0xf7, 0xfd, 0xff, 0xff, //0x00002248 jmp LBB6_84 + //0x0000224d LBB6_113 + 0x4b, 0x8d, 0x44, 0x21, 0x0a, //0x0000224d leaq $10(%r9,%r12), %rax + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00002252 jmp LBB6_115 + //0x00002257 LBB6_114 + 0x4b, 0x8d, 0x44, 0x21, 0x0b, //0x00002257 leaq $11(%r9,%r12), %rax + //0x0000225c LBB6_115 + 0x48, 0x29, 0xf8, //0x0000225c subq %rdi, %rax + 0x48, 0x83, 0xc0, 0xfc, //0x0000225f addq $-4, %rax + 0x48, 0x8b, 0x4d, 0xc8, //0x00002263 movq $-56(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00002267 movq %rax, (%rcx) + 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x0000226a movq $-4, %rax + 0xe9, 0xce, 0xfd, 0xff, 0xff, //0x00002271 jmp LBB6_84 + //0x00002276 LBB6_116 + 0x49, 0x8d, 0x44, 0x3a, 0x04, //0x00002276 leaq $4(%r10,%rdi), %rax + 0x49, 0x29, 0xc1, //0x0000227b subq %rax, %r9 + 0xe9, 0xb7, 0xff, 0xff, 0xff, //0x0000227e jmp LBB6_112 + //0x00002283 LBB6_117 + 0x4d, 0x01, 0xe1, //0x00002283 addq %r12, %r9 + 0x49, 0x29, 0xf9, //0x00002286 subq %rdi, %r9 + 0xe9, 0xac, 0xff, 0xff, 0xff, //0x00002289 jmp LBB6_112 + 0x00, 0x00, //0x0000228e .p2align 4, 0x00 + //0x00002290 LCPI7_0 + 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, //0x00002290 QUAD $0x2626262626262626; QUAD $0x2626262626262626 // .space 16, '&&&&&&&&&&&&&&&&' + //0x000022a0 LCPI7_1 + 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, //0x000022a0 QUAD $0xe2e2e2e2e2e2e2e2; QUAD $0xe2e2e2e2e2e2e2e2 // .space 16, '\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2' + //0x000022b0 LCPI7_2 + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, //0x000022b0 QUAD $0x0202020202020202; QUAD $0x0202020202020202 // .space 16, '\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' + //0x000022c0 LCPI7_3 + 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, //0x000022c0 QUAD $0x3e3e3e3e3e3e3e3e; QUAD $0x3e3e3e3e3e3e3e3e // .space 16, '>>>>>>>>>>>>>>>>' + //0x000022d0 .p2align 4, 0x90 + //0x000022d0 _html_escape + 0x55, //0x000022d0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000022d1 movq %rsp, %rbp + 0x41, 0x57, //0x000022d4 pushq %r15 + 0x41, 0x56, //0x000022d6 pushq %r14 + 0x41, 0x55, //0x000022d8 pushq %r13 + 0x41, 0x54, //0x000022da pushq %r12 + 0x53, //0x000022dc pushq %rbx + 0x48, 0x83, 0xec, 0x18, //0x000022dd subq $24, %rsp + 0x48, 0x89, 0x4d, 0xc0, //0x000022e1 movq %rcx, $-64(%rbp) + 0x49, 0x89, 0xd2, //0x000022e5 movq %rdx, %r10 + 0x48, 0x89, 0x55, 0xc8, //0x000022e8 movq %rdx, $-56(%rbp) + 0x48, 0x89, 0x7d, 0xd0, //0x000022ec movq %rdi, $-48(%rbp) + 0x48, 0x89, 0xf8, //0x000022f0 movq %rdi, %rax + 0x48, 0x85, 0xf6, //0x000022f3 testq %rsi, %rsi + 0x0f, 0x8e, 0x73, 0x04, 0x00, 0x00, //0x000022f6 jle LBB7_59 + 0x48, 0x8b, 0x45, 0xc0, //0x000022fc movq $-64(%rbp), %rax + 0x4c, 0x8b, 0x08, //0x00002300 movq (%rax), %r9 + 0xc5, 0xf9, 0x6f, 0x05, 0x85, 0xff, 0xff, 0xff, //0x00002303 vmovdqa $-123(%rip), %xmm0 /* LCPI7_0+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0x8d, 0xff, 0xff, 0xff, //0x0000230b vmovdqa $-115(%rip), %xmm1 /* LCPI7_1+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x15, 0x95, 0xff, 0xff, 0xff, //0x00002313 vmovdqa $-107(%rip), %xmm2 /* LCPI7_2+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x1d, 0x9d, 0xff, 0xff, 0xff, //0x0000231b vmovdqa $-99(%rip), %xmm3 /* LCPI7_3+0(%rip) */ + 0x49, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x50, //0x00002323 movabsq $5764607797912141824, %r14 + 0x4c, 0x8d, 0x1d, 0x4c, 0xe5, 0x00, 0x00, //0x0000232d leaq $58700(%rip), %r11 /* __HtmlQuoteTab+0(%rip) */ + 0x4c, 0x8b, 0x7d, 0xd0, //0x00002334 movq $-48(%rbp), %r15 + 0x4c, 0x8b, 0x55, 0xc8, //0x00002338 movq $-56(%rbp), %r10 + 0x90, 0x90, 0x90, 0x90, //0x0000233c .p2align 4, 0x90 + //0x00002340 LBB7_2 + 0x4d, 0x85, 0xc9, //0x00002340 testq %r9, %r9 + 0x0f, 0x8e, 0x45, 0x04, 0x00, 0x00, //0x00002343 jle LBB7_61 + 0x48, 0x83, 0xfe, 0x0f, //0x00002349 cmpq $15, %rsi + 0x0f, 0x9f, 0xc3, //0x0000234d setg %bl + 0x4d, 0x89, 0xcc, //0x00002350 movq %r9, %r12 + 0x4d, 0x89, 0xd0, //0x00002353 movq %r10, %r8 + 0x48, 0x89, 0xf0, //0x00002356 movq %rsi, %rax + 0x4d, 0x89, 0xfd, //0x00002359 movq %r15, %r13 + 0x49, 0x83, 0xf9, 0x10, //0x0000235c cmpq $16, %r9 + 0x0f, 0x8c, 0x7a, 0x00, 0x00, 0x00, //0x00002360 jl LBB7_9 + 0x48, 0x83, 0xfe, 0x10, //0x00002366 cmpq $16, %rsi + 0x0f, 0x8c, 0x70, 0x00, 0x00, 0x00, //0x0000236a jl LBB7_9 + 0x4d, 0x89, 0xfd, //0x00002370 movq %r15, %r13 + 0x48, 0x89, 0xf0, //0x00002373 movq %rsi, %rax + 0x4d, 0x89, 0xd0, //0x00002376 movq %r10, %r8 + 0x4c, 0x89, 0xc9, //0x00002379 movq %r9, %rcx + 0x90, 0x90, 0x90, 0x90, //0x0000237c .p2align 4, 0x90 + //0x00002380 LBB7_6 + 0xc4, 0xc1, 0x7a, 0x6f, 0x65, 0x00, //0x00002380 vmovdqu (%r13), %xmm4 + 0xc5, 0xd9, 0x74, 0xe8, //0x00002386 vpcmpeqb %xmm0, %xmm4, %xmm5 + 0xc5, 0xd9, 0x74, 0xf1, //0x0000238a vpcmpeqb %xmm1, %xmm4, %xmm6 + 0xc5, 0xc9, 0xeb, 0xed, //0x0000238e vpor %xmm5, %xmm6, %xmm5 + 0xc5, 0xd9, 0xeb, 0xf2, //0x00002392 vpor %xmm2, %xmm4, %xmm6 + 0xc5, 0xc9, 0x74, 0xf3, //0x00002396 vpcmpeqb %xmm3, %xmm6, %xmm6 + 0xc5, 0xd1, 0xeb, 0xee, //0x0000239a vpor %xmm6, %xmm5, %xmm5 + 0xc4, 0xc1, 0x7a, 0x7f, 0x20, //0x0000239e vmovdqu %xmm4, (%r8) + 0xc5, 0xf9, 0xd7, 0xd5, //0x000023a3 vpmovmskb %xmm5, %edx + 0x66, 0x85, 0xd2, //0x000023a7 testw %dx, %dx + 0x0f, 0x85, 0x30, 0x01, 0x00, 0x00, //0x000023aa jne LBB7_21 + 0x49, 0x83, 0xc5, 0x10, //0x000023b0 addq $16, %r13 + 0x49, 0x83, 0xc0, 0x10, //0x000023b4 addq $16, %r8 + 0x4c, 0x8d, 0x61, 0xf0, //0x000023b8 leaq $-16(%rcx), %r12 + 0x48, 0x83, 0xf8, 0x1f, //0x000023bc cmpq $31, %rax + 0x0f, 0x9f, 0xc3, //0x000023c0 setg %bl + 0x48, 0x83, 0xf8, 0x20, //0x000023c3 cmpq $32, %rax + 0x48, 0x8d, 0x40, 0xf0, //0x000023c7 leaq $-16(%rax), %rax + 0x0f, 0x8c, 0x0f, 0x00, 0x00, 0x00, //0x000023cb jl LBB7_9 + 0x48, 0x83, 0xf9, 0x1f, //0x000023d1 cmpq $31, %rcx + 0x4c, 0x89, 0xe1, //0x000023d5 movq %r12, %rcx + 0x0f, 0x8f, 0xa2, 0xff, 0xff, 0xff, //0x000023d8 jg LBB7_6 + 0x90, 0x90, //0x000023de .p2align 4, 0x90 + //0x000023e0 LBB7_9 + 0x84, 0xdb, //0x000023e0 testb %bl, %bl + 0x0f, 0x84, 0x68, 0x00, 0x00, 0x00, //0x000023e2 je LBB7_13 + 0x4c, 0x89, 0xf2, //0x000023e8 movq %r14, %rdx + 0xc4, 0xc1, 0x7a, 0x6f, 0x65, 0x00, //0x000023eb vmovdqu (%r13), %xmm4 + 0xc5, 0xd9, 0x74, 0xe8, //0x000023f1 vpcmpeqb %xmm0, %xmm4, %xmm5 + 0xc5, 0xd9, 0x74, 0xf1, //0x000023f5 vpcmpeqb %xmm1, %xmm4, %xmm6 + 0xc5, 0xc9, 0xeb, 0xed, //0x000023f9 vpor %xmm5, %xmm6, %xmm5 + 0xc5, 0xd9, 0xeb, 0xf2, //0x000023fd vpor %xmm2, %xmm4, %xmm6 + 0xc5, 0xc9, 0x74, 0xf3, //0x00002401 vpcmpeqb %xmm3, %xmm6, %xmm6 + 0xc5, 0xd1, 0xeb, 0xee, //0x00002405 vpor %xmm6, %xmm5, %xmm5 + 0xc5, 0xf9, 0xd7, 0xc5, //0x00002409 vpmovmskb %xmm5, %eax + 0x0d, 0x00, 0x00, 0x01, 0x00, //0x0000240d orl $65536, %eax + 0x44, 0x0f, 0xbc, 0xf0, //0x00002412 bsfl %eax, %r14d + 0xc4, 0xe1, 0xf9, 0x7e, 0xe0, //0x00002416 vmovq %xmm4, %rax + 0x4d, 0x39, 0xf4, //0x0000241b cmpq %r14, %r12 + 0x0f, 0x8d, 0xd7, 0x00, 0x00, 0x00, //0x0000241e jge LBB7_22 + 0x49, 0x83, 0xfc, 0x08, //0x00002424 cmpq $8, %r12 + 0x0f, 0x82, 0x09, 0x01, 0x00, 0x00, //0x00002428 jb LBB7_25 + 0x49, 0x89, 0x00, //0x0000242e movq %rax, (%r8) + 0x4d, 0x8d, 0x75, 0x08, //0x00002431 leaq $8(%r13), %r14 + 0x49, 0x83, 0xc0, 0x08, //0x00002435 addq $8, %r8 + 0x49, 0x8d, 0x44, 0x24, 0xf8, //0x00002439 leaq $-8(%r12), %rax + 0x48, 0x83, 0xf8, 0x04, //0x0000243e cmpq $4, %rax + 0x0f, 0x8d, 0xff, 0x00, 0x00, 0x00, //0x00002442 jge LBB7_26 + 0xe9, 0x0c, 0x01, 0x00, 0x00, //0x00002448 jmp LBB7_27 + 0x90, 0x90, 0x90, //0x0000244d .p2align 4, 0x90 + //0x00002450 LBB7_13 + 0x4d, 0x85, 0xe4, //0x00002450 testq %r12, %r12 + 0x0f, 0x8e, 0x67, 0x00, 0x00, 0x00, //0x00002453 jle LBB7_20 + 0x48, 0x85, 0xc0, //0x00002459 testq %rax, %rax + 0x0f, 0x8e, 0x5e, 0x00, 0x00, 0x00, //0x0000245c jle LBB7_20 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002462 .p2align 4, 0x90 + //0x00002470 LBB7_15 + 0x41, 0x0f, 0xb6, 0x4d, 0x00, //0x00002470 movzbl (%r13), %ecx + 0x48, 0x83, 0xf9, 0x3e, //0x00002475 cmpq $62, %rcx + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x00002479 ja LBB7_17 + 0x49, 0x0f, 0xa3, 0xce, //0x0000247f btq %rcx, %r14 + 0x0f, 0x82, 0x9a, 0x00, 0x00, 0x00, //0x00002483 jb LBB7_24 + //0x00002489 LBB7_17 + 0x80, 0xf9, 0xe2, //0x00002489 cmpb $-30, %cl + 0x0f, 0x84, 0x91, 0x00, 0x00, 0x00, //0x0000248c je LBB7_24 + 0x49, 0xff, 0xc5, //0x00002492 incq %r13 + 0x41, 0x88, 0x08, //0x00002495 movb %cl, (%r8) + 0x48, 0x83, 0xf8, 0x02, //0x00002498 cmpq $2, %rax + 0x48, 0x8d, 0x40, 0xff, //0x0000249c leaq $-1(%rax), %rax + 0x0f, 0x8c, 0x1a, 0x00, 0x00, 0x00, //0x000024a0 jl LBB7_20 + 0x49, 0xff, 0xc0, //0x000024a6 incq %r8 + 0x49, 0x83, 0xfc, 0x01, //0x000024a9 cmpq $1, %r12 + 0x4d, 0x8d, 0x64, 0x24, 0xff, //0x000024ad leaq $-1(%r12), %r12 + 0x0f, 0x8f, 0xb8, 0xff, 0xff, 0xff, //0x000024b2 jg LBB7_15 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000024b8 .p2align 4, 0x90 + //0x000024c0 LBB7_20 + 0x4d, 0x29, 0xfd, //0x000024c0 subq %r15, %r13 + 0x48, 0xf7, 0xd8, //0x000024c3 negq %rax + 0x4d, 0x19, 0xe4, //0x000024c6 sbbq %r12, %r12 + 0x4d, 0x31, 0xec, //0x000024c9 xorq %r13, %r12 + 0x4d, 0x85, 0xe4, //0x000024cc testq %r12, %r12 + 0x0f, 0x89, 0x5b, 0x01, 0x00, 0x00, //0x000024cf jns LBB7_37 + 0xe9, 0x72, 0x02, 0x00, 0x00, //0x000024d5 jmp LBB7_57 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000024da .p2align 4, 0x90 + //0x000024e0 LBB7_21 + 0x0f, 0xb7, 0xc2, //0x000024e0 movzwl %dx, %eax + 0x4d, 0x29, 0xfd, //0x000024e3 subq %r15, %r13 + 0x44, 0x0f, 0xbc, 0xe0, //0x000024e6 bsfl %eax, %r12d + 0x4d, 0x01, 0xec, //0x000024ea addq %r13, %r12 + 0x4d, 0x85, 0xe4, //0x000024ed testq %r12, %r12 + 0x0f, 0x89, 0x3a, 0x01, 0x00, 0x00, //0x000024f0 jns LBB7_37 + 0xe9, 0x51, 0x02, 0x00, 0x00, //0x000024f6 jmp LBB7_57 + //0x000024fb LBB7_22 + 0x41, 0x83, 0xfe, 0x08, //0x000024fb cmpl $8, %r14d + 0x0f, 0x82, 0xa9, 0x00, 0x00, 0x00, //0x000024ff jb LBB7_31 + 0x49, 0x89, 0x00, //0x00002505 movq %rax, (%r8) + 0x4d, 0x8d, 0x65, 0x08, //0x00002508 leaq $8(%r13), %r12 + 0x49, 0x83, 0xc0, 0x08, //0x0000250c addq $8, %r8 + 0x49, 0x8d, 0x46, 0xf8, //0x00002510 leaq $-8(%r14), %rax + 0x48, 0x83, 0xf8, 0x04, //0x00002514 cmpq $4, %rax + 0x0f, 0x8d, 0xa0, 0x00, 0x00, 0x00, //0x00002518 jge LBB7_32 + 0xe9, 0xae, 0x00, 0x00, 0x00, //0x0000251e jmp LBB7_33 + //0x00002523 LBB7_24 + 0x4d, 0x29, 0xfd, //0x00002523 subq %r15, %r13 + 0x4d, 0x89, 0xec, //0x00002526 movq %r13, %r12 + 0x4d, 0x85, 0xe4, //0x00002529 testq %r12, %r12 + 0x0f, 0x89, 0xfe, 0x00, 0x00, 0x00, //0x0000252c jns LBB7_37 + 0xe9, 0x15, 0x02, 0x00, 0x00, //0x00002532 jmp LBB7_57 + //0x00002537 LBB7_25 + 0x4d, 0x89, 0xee, //0x00002537 movq %r13, %r14 + 0x4c, 0x89, 0xe0, //0x0000253a movq %r12, %rax + 0x48, 0x83, 0xf8, 0x04, //0x0000253d cmpq $4, %rax + 0x0f, 0x8c, 0x12, 0x00, 0x00, 0x00, //0x00002541 jl LBB7_27 + //0x00002547 LBB7_26 + 0x41, 0x8b, 0x0e, //0x00002547 movl (%r14), %ecx + 0x41, 0x89, 0x08, //0x0000254a movl %ecx, (%r8) + 0x49, 0x83, 0xc6, 0x04, //0x0000254d addq $4, %r14 + 0x49, 0x83, 0xc0, 0x04, //0x00002551 addq $4, %r8 + 0x48, 0x83, 0xc0, 0xfc, //0x00002555 addq $-4, %rax + //0x00002559 LBB7_27 + 0x48, 0x83, 0xf8, 0x02, //0x00002559 cmpq $2, %rax + 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x0000255d jb LBB7_28 + 0x41, 0x0f, 0xb7, 0x0e, //0x00002563 movzwl (%r14), %ecx + 0x66, 0x41, 0x89, 0x08, //0x00002567 movw %cx, (%r8) + 0x49, 0x83, 0xc6, 0x02, //0x0000256b addq $2, %r14 + 0x49, 0x83, 0xc0, 0x02, //0x0000256f addq $2, %r8 + 0x48, 0x83, 0xc0, 0xfe, //0x00002573 addq $-2, %rax + 0x48, 0x85, 0xc0, //0x00002577 testq %rax, %rax + 0x0f, 0x85, 0x0e, 0x00, 0x00, 0x00, //0x0000257a jne LBB7_29 + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00002580 jmp LBB7_30 + //0x00002585 LBB7_28 + 0x48, 0x85, 0xc0, //0x00002585 testq %rax, %rax + 0x0f, 0x84, 0x06, 0x00, 0x00, 0x00, //0x00002588 je LBB7_30 + //0x0000258e LBB7_29 + 0x41, 0x8a, 0x06, //0x0000258e movb (%r14), %al + 0x41, 0x88, 0x00, //0x00002591 movb %al, (%r8) + //0x00002594 LBB7_30 + 0x4d, 0x29, 0xfc, //0x00002594 subq %r15, %r12 + 0x4d, 0x01, 0xec, //0x00002597 addq %r13, %r12 + 0x49, 0xf7, 0xd4, //0x0000259a notq %r12 + 0x49, 0x89, 0xd6, //0x0000259d movq %rdx, %r14 + 0x4d, 0x85, 0xe4, //0x000025a0 testq %r12, %r12 + 0x0f, 0x89, 0x87, 0x00, 0x00, 0x00, //0x000025a3 jns LBB7_37 + 0xe9, 0x9e, 0x01, 0x00, 0x00, //0x000025a9 jmp LBB7_57 + //0x000025ae LBB7_31 + 0x4d, 0x89, 0xec, //0x000025ae movq %r13, %r12 + 0x4c, 0x89, 0xf0, //0x000025b1 movq %r14, %rax + 0x48, 0x83, 0xf8, 0x04, //0x000025b4 cmpq $4, %rax + 0x0f, 0x8c, 0x13, 0x00, 0x00, 0x00, //0x000025b8 jl LBB7_33 + //0x000025be LBB7_32 + 0x41, 0x8b, 0x0c, 0x24, //0x000025be movl (%r12), %ecx + 0x41, 0x89, 0x08, //0x000025c2 movl %ecx, (%r8) + 0x49, 0x83, 0xc4, 0x04, //0x000025c5 addq $4, %r12 + 0x49, 0x83, 0xc0, 0x04, //0x000025c9 addq $4, %r8 + 0x48, 0x83, 0xc0, 0xfc, //0x000025cd addq $-4, %rax + //0x000025d1 LBB7_33 + 0x48, 0x83, 0xf8, 0x02, //0x000025d1 cmpq $2, %rax + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x000025d5 jb LBB7_34 + 0x41, 0x0f, 0xb7, 0x0c, 0x24, //0x000025db movzwl (%r12), %ecx + 0x66, 0x41, 0x89, 0x08, //0x000025e0 movw %cx, (%r8) + 0x49, 0x83, 0xc4, 0x02, //0x000025e4 addq $2, %r12 + 0x49, 0x83, 0xc0, 0x02, //0x000025e8 addq $2, %r8 + 0x48, 0x83, 0xc0, 0xfe, //0x000025ec addq $-2, %rax + 0x48, 0x85, 0xc0, //0x000025f0 testq %rax, %rax + 0x0f, 0x85, 0x0e, 0x00, 0x00, 0x00, //0x000025f3 jne LBB7_35 + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x000025f9 jmp LBB7_36 + //0x000025fe LBB7_34 + 0x48, 0x85, 0xc0, //0x000025fe testq %rax, %rax + 0x0f, 0x84, 0x07, 0x00, 0x00, 0x00, //0x00002601 je LBB7_36 + //0x00002607 LBB7_35 + 0x41, 0x8a, 0x04, 0x24, //0x00002607 movb (%r12), %al + 0x41, 0x88, 0x00, //0x0000260b movb %al, (%r8) + //0x0000260e LBB7_36 + 0x4d, 0x29, 0xfd, //0x0000260e subq %r15, %r13 + 0x4d, 0x01, 0xf5, //0x00002611 addq %r14, %r13 + 0x4d, 0x89, 0xec, //0x00002614 movq %r13, %r12 + 0x49, 0x89, 0xd6, //0x00002617 movq %rdx, %r14 + 0x4d, 0x85, 0xe4, //0x0000261a testq %r12, %r12 + 0x0f, 0x88, 0x29, 0x01, 0x00, 0x00, //0x0000261d js LBB7_57 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002623 .p2align 4, 0x90 + //0x00002630 LBB7_37 + 0x4d, 0x01, 0xe7, //0x00002630 addq %r12, %r15 + 0x4d, 0x01, 0xe2, //0x00002633 addq %r12, %r10 + 0x4c, 0x29, 0xe6, //0x00002636 subq %r12, %rsi + 0x0f, 0x8e, 0x2d, 0x01, 0x00, 0x00, //0x00002639 jle LBB7_58 + 0x4d, 0x29, 0xe1, //0x0000263f subq %r12, %r9 + 0x41, 0x8a, 0x0f, //0x00002642 movb (%r15), %cl + 0x80, 0xf9, 0xe2, //0x00002645 cmpb $-30, %cl + 0x0f, 0x84, 0xb1, 0x00, 0x00, 0x00, //0x00002648 je LBB7_51 + 0x4c, 0x89, 0xf8, //0x0000264e movq %r15, %rax + //0x00002651 LBB7_40 + 0x0f, 0xb6, 0xd1, //0x00002651 movzbl %cl, %edx + 0x48, 0xc1, 0xe2, 0x04, //0x00002654 shlq $4, %rdx + 0x4a, 0x8b, 0x3c, 0x1a, //0x00002658 movq (%rdx,%r11), %rdi + 0x48, 0x63, 0xdf, //0x0000265c movslq %edi, %rbx + 0x49, 0x29, 0xd9, //0x0000265f subq %rbx, %r9 + 0x0f, 0x8c, 0x1b, 0x01, 0x00, 0x00, //0x00002662 jl LBB7_60 + 0x48, 0xc1, 0xe7, 0x20, //0x00002668 shlq $32, %rdi + 0x4e, 0x8d, 0x7c, 0x1a, 0x08, //0x0000266c leaq $8(%rdx,%r11), %r15 + 0x48, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, //0x00002671 movabsq $12884901889, %rcx + 0x48, 0x39, 0xcf, //0x0000267b cmpq %rcx, %rdi + 0x0f, 0x8c, 0x2c, 0x00, 0x00, 0x00, //0x0000267e jl LBB7_43 + 0x41, 0x8b, 0x0f, //0x00002684 movl (%r15), %ecx + 0x41, 0x89, 0x0a, //0x00002687 movl %ecx, (%r10) + 0x4e, 0x8d, 0x7c, 0x1a, 0x0c, //0x0000268a leaq $12(%rdx,%r11), %r15 + 0x4d, 0x8d, 0x42, 0x04, //0x0000268f leaq $4(%r10), %r8 + 0x48, 0x8d, 0x7b, 0xfc, //0x00002693 leaq $-4(%rbx), %rdi + 0x48, 0x83, 0xff, 0x02, //0x00002697 cmpq $2, %rdi + 0x0f, 0x83, 0x1f, 0x00, 0x00, 0x00, //0x0000269b jae LBB7_44 + 0xe9, 0x2e, 0x00, 0x00, 0x00, //0x000026a1 jmp LBB7_45 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000026a6 .p2align 4, 0x90 + //0x000026b0 LBB7_43 + 0x4d, 0x89, 0xd0, //0x000026b0 movq %r10, %r8 + 0x48, 0x89, 0xdf, //0x000026b3 movq %rbx, %rdi + 0x48, 0x83, 0xff, 0x02, //0x000026b6 cmpq $2, %rdi + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x000026ba jb LBB7_45 + //0x000026c0 LBB7_44 + 0x41, 0x0f, 0xb7, 0x17, //0x000026c0 movzwl (%r15), %edx + 0x66, 0x41, 0x89, 0x10, //0x000026c4 movw %dx, (%r8) + 0x49, 0x83, 0xc7, 0x02, //0x000026c8 addq $2, %r15 + 0x49, 0x83, 0xc0, 0x02, //0x000026cc addq $2, %r8 + 0x48, 0x83, 0xc7, 0xfe, //0x000026d0 addq $-2, %rdi + //0x000026d4 LBB7_45 + 0x48, 0x85, 0xff, //0x000026d4 testq %rdi, %rdi + 0x0f, 0x84, 0x06, 0x00, 0x00, 0x00, //0x000026d7 je LBB7_47 + 0x41, 0x8a, 0x0f, //0x000026dd movb (%r15), %cl + 0x41, 0x88, 0x08, //0x000026e0 movb %cl, (%r8) + //0x000026e3 LBB7_47 + 0x49, 0x01, 0xda, //0x000026e3 addq %rbx, %r10 + //0x000026e6 LBB7_48 + 0x48, 0xff, 0xc0, //0x000026e6 incq %rax + 0x49, 0x89, 0xc7, //0x000026e9 movq %rax, %r15 + 0x48, 0x83, 0xfe, 0x01, //0x000026ec cmpq $1, %rsi + 0x48, 0x8d, 0x76, 0xff, //0x000026f0 leaq $-1(%rsi), %rsi + 0x0f, 0x8f, 0x46, 0xfc, 0xff, 0xff, //0x000026f4 jg LBB7_2 + 0xe9, 0x70, 0x00, 0x00, 0x00, //0x000026fa jmp LBB7_59 + //0x000026ff LBB7_51 + 0x48, 0x83, 0xfe, 0x03, //0x000026ff cmpq $3, %rsi + 0x0f, 0x8c, 0x28, 0x00, 0x00, 0x00, //0x00002703 jl LBB7_55 + 0x41, 0x80, 0x7f, 0x01, 0x80, //0x00002709 cmpb $-128, $1(%r15) + 0x0f, 0x85, 0x1d, 0x00, 0x00, 0x00, //0x0000270e jne LBB7_55 + 0x41, 0x8a, 0x4f, 0x02, //0x00002714 movb $2(%r15), %cl + 0x89, 0xc8, //0x00002718 movl %ecx, %eax + 0x24, 0xfe, //0x0000271a andb $-2, %al + 0x3c, 0xa8, //0x0000271c cmpb $-88, %al + 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x0000271e jne LBB7_55 + 0x49, 0x8d, 0x47, 0x02, //0x00002724 leaq $2(%r15), %rax + 0x48, 0x83, 0xc6, 0xfe, //0x00002728 addq $-2, %rsi + 0xe9, 0x20, 0xff, 0xff, 0xff, //0x0000272c jmp LBB7_40 + //0x00002731 LBB7_55 + 0x4d, 0x85, 0xc9, //0x00002731 testq %r9, %r9 + 0x0f, 0x8e, 0x54, 0x00, 0x00, 0x00, //0x00002734 jle LBB7_61 + 0x41, 0xc6, 0x02, 0xe2, //0x0000273a movb $-30, (%r10) + 0x49, 0xff, 0xc2, //0x0000273e incq %r10 + 0x49, 0xff, 0xc9, //0x00002741 decq %r9 + 0x4c, 0x89, 0xf8, //0x00002744 movq %r15, %rax + 0xe9, 0x9a, 0xff, 0xff, 0xff, //0x00002747 jmp LBB7_48 + //0x0000274c LBB7_57 + 0x4c, 0x2b, 0x55, 0xc8, //0x0000274c subq $-56(%rbp), %r10 + 0x49, 0xf7, 0xd4, //0x00002750 notq %r12 + 0x4d, 0x01, 0xe2, //0x00002753 addq %r12, %r10 + 0x48, 0x8b, 0x45, 0xc0, //0x00002756 movq $-64(%rbp), %rax + 0x4c, 0x89, 0x10, //0x0000275a movq %r10, (%rax) + 0x4c, 0x2b, 0x7d, 0xd0, //0x0000275d subq $-48(%rbp), %r15 + 0x4d, 0x01, 0xe7, //0x00002761 addq %r12, %r15 + 0x49, 0xf7, 0xd7, //0x00002764 notq %r15 + 0xe9, 0x29, 0x00, 0x00, 0x00, //0x00002767 jmp LBB7_62 + //0x0000276c LBB7_58 + 0x4c, 0x89, 0xf8, //0x0000276c movq %r15, %rax + //0x0000276f LBB7_59 + 0x4c, 0x2b, 0x55, 0xc8, //0x0000276f subq $-56(%rbp), %r10 + 0x48, 0x8b, 0x4d, 0xc0, //0x00002773 movq $-64(%rbp), %rcx + 0x4c, 0x89, 0x11, //0x00002777 movq %r10, (%rcx) + 0x48, 0x2b, 0x45, 0xd0, //0x0000277a subq $-48(%rbp), %rax + 0xe9, 0x15, 0x00, 0x00, 0x00, //0x0000277e jmp LBB7_63 + //0x00002783 LBB7_60 + 0x4c, 0x2b, 0x55, 0xc8, //0x00002783 subq $-56(%rbp), %r10 + 0x48, 0x8b, 0x45, 0xc0, //0x00002787 movq $-64(%rbp), %rax + 0x4c, 0x89, 0x10, //0x0000278b movq %r10, (%rax) + //0x0000278e LBB7_61 + 0x49, 0xf7, 0xd7, //0x0000278e notq %r15 + 0x4c, 0x03, 0x7d, 0xd0, //0x00002791 addq $-48(%rbp), %r15 + //0x00002795 LBB7_62 + 0x4c, 0x89, 0xf8, //0x00002795 movq %r15, %rax + //0x00002798 LBB7_63 + 0x48, 0x83, 0xc4, 0x18, //0x00002798 addq $24, %rsp + 0x5b, //0x0000279c popq %rbx + 0x41, 0x5c, //0x0000279d popq %r12 + 0x41, 0x5d, //0x0000279f popq %r13 + 0x41, 0x5e, //0x000027a1 popq %r14 + 0x41, 0x5f, //0x000027a3 popq %r15 + 0x5d, //0x000027a5 popq %rbp + 0xc3, //0x000027a6 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000027a7 .p2align 4, 0x90 + //0x000027b0 _atof_eisel_lemire64 + 0x55, //0x000027b0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000027b1 movq %rsp, %rbp + 0x41, 0x57, //0x000027b4 pushq %r15 + 0x41, 0x56, //0x000027b6 pushq %r14 + 0x53, //0x000027b8 pushq %rbx + 0x8d, 0x86, 0x5c, 0x01, 0x00, 0x00, //0x000027b9 leal $348(%rsi), %eax + 0x3d, 0xb7, 0x02, 0x00, 0x00, //0x000027bf cmpl $695, %eax + 0x0f, 0x87, 0x08, 0x01, 0x00, 0x00, //0x000027c4 ja LBB8_1 + 0x49, 0x89, 0xc8, //0x000027ca movq %rcx, %r8 + 0x41, 0x89, 0xd1, //0x000027cd movl %edx, %r9d + 0x48, 0x85, 0xff, //0x000027d0 testq %rdi, %rdi + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000027d3 je LBB8_4 + 0x4c, 0x0f, 0xbd, 0xd7, //0x000027d9 bsrq %rdi, %r10 + 0x49, 0x83, 0xf2, 0x3f, //0x000027dd xorq $63, %r10 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x000027e1 jmp LBB8_5 + //0x000027e6 LBB8_4 + 0x41, 0xba, 0x40, 0x00, 0x00, 0x00, //0x000027e6 movl $64, %r10d + //0x000027ec LBB8_5 + 0x44, 0x89, 0xd1, //0x000027ec movl %r10d, %ecx + 0x48, 0xd3, 0xe7, //0x000027ef shlq %cl, %rdi + 0x89, 0xc1, //0x000027f2 movl %eax, %ecx + 0x48, 0xc1, 0xe1, 0x04, //0x000027f4 shlq $4, %rcx + 0x4c, 0x8d, 0x3d, 0xd1, 0x6a, 0x00, 0x00, //0x000027f8 leaq $27345(%rip), %r15 /* _POW10_M128_TAB+0(%rip) */ + 0x48, 0x89, 0xf8, //0x000027ff movq %rdi, %rax + 0x4a, 0xf7, 0x64, 0x39, 0x08, //0x00002802 mulq $8(%rcx,%r15) + 0x49, 0x89, 0xc3, //0x00002807 movq %rax, %r11 + 0x49, 0x89, 0xd6, //0x0000280a movq %rdx, %r14 + 0x81, 0xe2, 0xff, 0x01, 0x00, 0x00, //0x0000280d andl $511, %edx + 0x48, 0x89, 0xfb, //0x00002813 movq %rdi, %rbx + 0x48, 0xf7, 0xd3, //0x00002816 notq %rbx + 0x48, 0x39, 0xd8, //0x00002819 cmpq %rbx, %rax + 0x0f, 0x86, 0x42, 0x00, 0x00, 0x00, //0x0000281c jbe LBB8_11 + 0x81, 0xfa, 0xff, 0x01, 0x00, 0x00, //0x00002822 cmpl $511, %edx + 0x0f, 0x85, 0x36, 0x00, 0x00, 0x00, //0x00002828 jne LBB8_11 + 0x48, 0x89, 0xf8, //0x0000282e movq %rdi, %rax + 0x4a, 0xf7, 0x24, 0x39, //0x00002831 mulq (%rcx,%r15) + 0x49, 0x01, 0xd3, //0x00002835 addq %rdx, %r11 + 0x49, 0x83, 0xd6, 0x00, //0x00002838 adcq $0, %r14 + 0x44, 0x89, 0xf2, //0x0000283c movl %r14d, %edx + 0x81, 0xe2, 0xff, 0x01, 0x00, 0x00, //0x0000283f andl $511, %edx + 0x48, 0x39, 0xd8, //0x00002845 cmpq %rbx, %rax + 0x0f, 0x86, 0x16, 0x00, 0x00, 0x00, //0x00002848 jbe LBB8_11 + 0x49, 0x83, 0xfb, 0xff, //0x0000284e cmpq $-1, %r11 + 0x0f, 0x85, 0x0c, 0x00, 0x00, 0x00, //0x00002852 jne LBB8_11 + 0x81, 0xfa, 0xff, 0x01, 0x00, 0x00, //0x00002858 cmpl $511, %edx + 0x0f, 0x84, 0x6e, 0x00, 0x00, 0x00, //0x0000285e je LBB8_1 + //0x00002864 LBB8_11 + 0x4c, 0x89, 0xf7, //0x00002864 movq %r14, %rdi + 0x48, 0xc1, 0xef, 0x3f, //0x00002867 shrq $63, %rdi + 0x8d, 0x4f, 0x09, //0x0000286b leal $9(%rdi), %ecx + 0x49, 0xd3, 0xee, //0x0000286e shrq %cl, %r14 + 0x4c, 0x09, 0xda, //0x00002871 orq %r11, %rdx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00002874 jne LBB8_14 + 0x44, 0x89, 0xf0, //0x0000287a movl %r14d, %eax + 0x83, 0xe0, 0x03, //0x0000287d andl $3, %eax + 0x83, 0xf8, 0x01, //0x00002880 cmpl $1, %eax + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x00002883 je LBB8_1 + //0x00002889 LBB8_14 + 0x69, 0xc6, 0x6a, 0x52, 0x03, 0x00, //0x00002889 imull $217706, %esi, %eax + 0xc1, 0xf8, 0x10, //0x0000288f sarl $16, %eax + 0x05, 0x3f, 0x04, 0x00, 0x00, //0x00002892 addl $1087, %eax + 0x48, 0x98, //0x00002897 cltq + 0x4c, 0x29, 0xd0, //0x00002899 subq %r10, %rax + 0x48, 0x83, 0xf7, 0x01, //0x0000289c xorq $1, %rdi + 0x48, 0x29, 0xf8, //0x000028a0 subq %rdi, %rax + 0x44, 0x89, 0xf2, //0x000028a3 movl %r14d, %edx + 0x83, 0xe2, 0x01, //0x000028a6 andl $1, %edx + 0x4c, 0x01, 0xf2, //0x000028a9 addq %r14, %rdx + 0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, //0x000028ac movabsq $126100789566373888, %rcx + 0x48, 0x21, 0xd1, //0x000028b6 andq %rdx, %rcx + 0x48, 0x83, 0xf9, 0x01, //0x000028b9 cmpq $1, %rcx + 0x48, 0x83, 0xd8, 0xff, //0x000028bd sbbq $-1, %rax + 0x48, 0x8d, 0x70, 0xff, //0x000028c1 leaq $-1(%rax), %rsi + 0x48, 0x81, 0xfe, 0xfd, 0x07, 0x00, 0x00, //0x000028c5 cmpq $2045, %rsi + 0x0f, 0x86, 0x09, 0x00, 0x00, 0x00, //0x000028cc jbe LBB8_16 + //0x000028d2 LBB8_1 + 0x31, 0xc0, //0x000028d2 xorl %eax, %eax + //0x000028d4 LBB8_17 + 0x5b, //0x000028d4 popq %rbx + 0x41, 0x5e, //0x000028d5 popq %r14 + 0x41, 0x5f, //0x000028d7 popq %r15 + 0x5d, //0x000028d9 popq %rbp + 0xc3, //0x000028da retq + //0x000028db LBB8_16 + 0x48, 0x83, 0xf9, 0x01, //0x000028db cmpq $1, %rcx + 0xb1, 0x02, //0x000028df movb $2, %cl + 0x80, 0xd9, 0x00, //0x000028e1 sbbb $0, %cl + 0x48, 0xd3, 0xea, //0x000028e4 shrq %cl, %rdx + 0x48, 0xc1, 0xe0, 0x34, //0x000028e7 shlq $52, %rax + 0x48, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, //0x000028eb movabsq $4503599627370495, %rcx + 0x48, 0x21, 0xd1, //0x000028f5 andq %rdx, %rcx + 0x48, 0x09, 0xc1, //0x000028f8 orq %rax, %rcx + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x000028fb movabsq $-9223372036854775808, %rax + 0x48, 0x09, 0xc8, //0x00002905 orq %rcx, %rax + 0x41, 0x83, 0xf9, 0xff, //0x00002908 cmpl $-1, %r9d + 0x48, 0x0f, 0x45, 0xc1, //0x0000290c cmovneq %rcx, %rax + 0x49, 0x89, 0x00, //0x00002910 movq %rax, (%r8) + 0xb0, 0x01, //0x00002913 movb $1, %al + 0xe9, 0xba, 0xff, 0xff, 0xff, //0x00002915 jmp LBB8_17 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000291a .p2align 4, 0x90 + //0x00002920 _decimal_to_f64 + 0x55, //0x00002920 pushq %rbp + 0x48, 0x89, 0xe5, //0x00002921 movq %rsp, %rbp + 0x41, 0x57, //0x00002924 pushq %r15 + 0x41, 0x56, //0x00002926 pushq %r14 + 0x41, 0x55, //0x00002928 pushq %r13 + 0x41, 0x54, //0x0000292a pushq %r12 + 0x53, //0x0000292c pushq %rbx + 0x50, //0x0000292d pushq %rax + 0x48, 0x89, 0xf3, //0x0000292e movq %rsi, %rbx + 0x49, 0x89, 0xfc, //0x00002931 movq %rdi, %r12 + 0x49, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, //0x00002934 movabsq $4503599627370496, %r13 + 0x83, 0x7f, 0x10, 0x00, //0x0000293e cmpl $0, $16(%rdi) + 0x0f, 0x84, 0x30, 0x00, 0x00, 0x00, //0x00002942 je LBB9_4 + 0x49, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, //0x00002948 movabsq $9218868437227405312, %r14 + 0x41, 0x8b, 0x44, 0x24, 0x14, //0x00002952 movl $20(%r12), %eax + 0x45, 0x31, 0xff, //0x00002957 xorl %r15d, %r15d + 0x3d, 0x36, 0x01, 0x00, 0x00, //0x0000295a cmpl $310, %eax + 0x0f, 0x8f, 0x0e, 0x04, 0x00, 0x00, //0x0000295f jg LBB9_78 + 0x3d, 0xb6, 0xfe, 0xff, 0xff, //0x00002965 cmpl $-330, %eax + 0x0f, 0x8d, 0x13, 0x00, 0x00, 0x00, //0x0000296a jge LBB9_5 + 0x45, 0x31, 0xf6, //0x00002970 xorl %r14d, %r14d + 0xe9, 0xfb, 0x03, 0x00, 0x00, //0x00002973 jmp LBB9_78 + //0x00002978 LBB9_4 + 0x45, 0x31, 0xf6, //0x00002978 xorl %r14d, %r14d + 0x45, 0x31, 0xff, //0x0000297b xorl %r15d, %r15d + 0xe9, 0xf0, 0x03, 0x00, 0x00, //0x0000297e jmp LBB9_78 + //0x00002983 LBB9_5 + 0x85, 0xc0, //0x00002983 testl %eax, %eax + 0x48, 0x89, 0x5d, 0xd0, //0x00002985 movq %rbx, $-48(%rbp) + 0x0f, 0x8e, 0xf1, 0x00, 0x00, 0x00, //0x00002989 jle LBB9_22 + 0x45, 0x31, 0xff, //0x0000298f xorl %r15d, %r15d + 0xe9, 0x25, 0x00, 0x00, 0x00, //0x00002992 jmp LBB9_9 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002997 .p2align 4, 0x90 + //0x000029a0 LBB9_7 + 0xf7, 0xdb, //0x000029a0 negl %ebx + 0x4c, 0x89, 0xe7, //0x000029a2 movq %r12, %rdi + 0x89, 0xde, //0x000029a5 movl %ebx, %esi + 0xe8, 0xc4, 0x63, 0x00, 0x00, //0x000029a7 callq _right_shift + //0x000029ac LBB9_8 + 0x45, 0x01, 0xf7, //0x000029ac addl %r14d, %r15d + 0x41, 0x8b, 0x44, 0x24, 0x14, //0x000029af movl $20(%r12), %eax + 0x85, 0xc0, //0x000029b4 testl %eax, %eax + 0x0f, 0x8e, 0xc4, 0x00, 0x00, 0x00, //0x000029b6 jle LBB9_22 + //0x000029bc LBB9_9 + 0x41, 0xbe, 0x1b, 0x00, 0x00, 0x00, //0x000029bc movl $27, %r14d + 0x83, 0xf8, 0x08, //0x000029c2 cmpl $8, %eax + 0x0f, 0x8f, 0x0d, 0x00, 0x00, 0x00, //0x000029c5 jg LBB9_11 + 0x89, 0xc0, //0x000029cb movl %eax, %eax + 0x48, 0x8d, 0x0d, 0x8c, 0x94, 0x00, 0x00, //0x000029cd leaq $38028(%rip), %rcx /* _POW_TAB+0(%rip) */ + 0x44, 0x8b, 0x34, 0x81, //0x000029d4 movl (%rcx,%rax,4), %r14d + //0x000029d8 LBB9_11 + 0x45, 0x85, 0xf6, //0x000029d8 testl %r14d, %r14d + 0x0f, 0x84, 0xcb, 0xff, 0xff, 0xff, //0x000029db je LBB9_8 + 0x41, 0x83, 0x7c, 0x24, 0x10, 0x00, //0x000029e1 cmpl $0, $16(%r12) + 0x0f, 0x84, 0xbf, 0xff, 0xff, 0xff, //0x000029e7 je LBB9_8 + 0x44, 0x89, 0xf3, //0x000029ed movl %r14d, %ebx + 0xf7, 0xdb, //0x000029f0 negl %ebx + 0x45, 0x85, 0xf6, //0x000029f2 testl %r14d, %r14d + 0x0f, 0x88, 0x35, 0x00, 0x00, 0x00, //0x000029f5 js LBB9_16 + 0x41, 0x83, 0xfe, 0x3d, //0x000029fb cmpl $61, %r14d + 0x0f, 0x8c, 0x9b, 0xff, 0xff, 0xff, //0x000029ff jl LBB9_7 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002a05 .p2align 4, 0x90 + //0x00002a10 LBB9_15 + 0x4c, 0x89, 0xe7, //0x00002a10 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00002a13 movl $60, %esi + 0xe8, 0x53, 0x63, 0x00, 0x00, //0x00002a18 callq _right_shift + 0x8d, 0x43, 0x3c, //0x00002a1d leal $60(%rbx), %eax + 0x83, 0xfb, 0x88, //0x00002a20 cmpl $-120, %ebx + 0x89, 0xc3, //0x00002a23 movl %eax, %ebx + 0x0f, 0x8c, 0xe5, 0xff, 0xff, 0xff, //0x00002a25 jl LBB9_15 + 0xe9, 0x70, 0xff, 0xff, 0xff, //0x00002a2b jmp LBB9_7 + //0x00002a30 LBB9_16 + 0x41, 0x83, 0xfe, 0xc3, //0x00002a30 cmpl $-61, %r14d + 0x0f, 0x8f, 0x26, 0x00, 0x00, 0x00, //0x00002a34 jg LBB9_18 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002a3a .p2align 4, 0x90 + //0x00002a40 LBB9_17 + 0x4c, 0x89, 0xe7, //0x00002a40 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00002a43 movl $60, %esi + 0xe8, 0x33, 0x61, 0x00, 0x00, //0x00002a48 callq _left_shift + 0x8d, 0x73, 0xc4, //0x00002a4d leal $-60(%rbx), %esi + 0x83, 0xfb, 0x78, //0x00002a50 cmpl $120, %ebx + 0x89, 0xf3, //0x00002a53 movl %esi, %ebx + 0x0f, 0x8f, 0xe5, 0xff, 0xff, 0xff, //0x00002a55 jg LBB9_17 + 0xe9, 0x02, 0x00, 0x00, 0x00, //0x00002a5b jmp LBB9_19 + //0x00002a60 LBB9_18 + 0x89, 0xde, //0x00002a60 movl %ebx, %esi + //0x00002a62 LBB9_19 + 0x4c, 0x89, 0xe7, //0x00002a62 movq %r12, %rdi + 0xe8, 0x16, 0x61, 0x00, 0x00, //0x00002a65 callq _left_shift + 0xe9, 0x3d, 0xff, 0xff, 0xff, //0x00002a6a jmp LBB9_8 + 0x90, //0x00002a6f .p2align 4, 0x90 + //0x00002a70 LBB9_20 + 0x4c, 0x89, 0xe7, //0x00002a70 movq %r12, %rdi + 0xe8, 0x08, 0x61, 0x00, 0x00, //0x00002a73 callq _left_shift + //0x00002a78 LBB9_21 + 0x45, 0x29, 0xf7, //0x00002a78 subl %r14d, %r15d + 0x41, 0x8b, 0x44, 0x24, 0x14, //0x00002a7b movl $20(%r12), %eax + //0x00002a80 LBB9_22 + 0x85, 0xc0, //0x00002a80 testl %eax, %eax + 0x0f, 0x88, 0x18, 0x00, 0x00, 0x00, //0x00002a82 js LBB9_25 + 0x0f, 0x85, 0xbe, 0x00, 0x00, 0x00, //0x00002a88 jne LBB9_36 + 0x49, 0x8b, 0x0c, 0x24, //0x00002a8e movq (%r12), %rcx + 0x80, 0x39, 0x35, //0x00002a92 cmpb $53, (%rcx) + 0x0f, 0x8c, 0x14, 0x00, 0x00, 0x00, //0x00002a95 jl LBB9_26 + 0xe9, 0xac, 0x00, 0x00, 0x00, //0x00002a9b jmp LBB9_36 + //0x00002aa0 .p2align 4, 0x90 + //0x00002aa0 LBB9_25 + 0x41, 0xbe, 0x1b, 0x00, 0x00, 0x00, //0x00002aa0 movl $27, %r14d + 0x83, 0xf8, 0xf8, //0x00002aa6 cmpl $-8, %eax + 0x0f, 0x8c, 0x0f, 0x00, 0x00, 0x00, //0x00002aa9 jl LBB9_27 + //0x00002aaf LBB9_26 + 0xf7, 0xd8, //0x00002aaf negl %eax + 0x48, 0x98, //0x00002ab1 cltq + 0x48, 0x8d, 0x0d, 0xa6, 0x93, 0x00, 0x00, //0x00002ab3 leaq $37798(%rip), %rcx /* _POW_TAB+0(%rip) */ + 0x44, 0x8b, 0x34, 0x81, //0x00002aba movl (%rcx,%rax,4), %r14d + //0x00002abe LBB9_27 + 0x45, 0x85, 0xf6, //0x00002abe testl %r14d, %r14d + 0x0f, 0x84, 0xb1, 0xff, 0xff, 0xff, //0x00002ac1 je LBB9_21 + 0x41, 0x83, 0x7c, 0x24, 0x10, 0x00, //0x00002ac7 cmpl $0, $16(%r12) + 0x0f, 0x84, 0xa5, 0xff, 0xff, 0xff, //0x00002acd je LBB9_21 + 0x45, 0x85, 0xf6, //0x00002ad3 testl %r14d, %r14d + 0x0f, 0x8e, 0x34, 0x00, 0x00, 0x00, //0x00002ad6 jle LBB9_33 + 0x44, 0x89, 0xf6, //0x00002adc movl %r14d, %esi + 0x41, 0x83, 0xfe, 0x3d, //0x00002adf cmpl $61, %r14d + 0x0f, 0x8c, 0x87, 0xff, 0xff, 0xff, //0x00002ae3 jl LBB9_20 + 0x44, 0x89, 0xf3, //0x00002ae9 movl %r14d, %ebx + 0x90, 0x90, 0x90, 0x90, //0x00002aec .p2align 4, 0x90 + //0x00002af0 LBB9_32 + 0x4c, 0x89, 0xe7, //0x00002af0 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00002af3 movl $60, %esi + 0xe8, 0x83, 0x60, 0x00, 0x00, //0x00002af8 callq _left_shift + 0x8d, 0x73, 0xc4, //0x00002afd leal $-60(%rbx), %esi + 0x83, 0xfb, 0x78, //0x00002b00 cmpl $120, %ebx + 0x89, 0xf3, //0x00002b03 movl %esi, %ebx + 0x0f, 0x8f, 0xe5, 0xff, 0xff, 0xff, //0x00002b05 jg LBB9_32 + 0xe9, 0x60, 0xff, 0xff, 0xff, //0x00002b0b jmp LBB9_20 + //0x00002b10 LBB9_33 + 0x44, 0x89, 0xf3, //0x00002b10 movl %r14d, %ebx + 0x41, 0x83, 0xfe, 0xc3, //0x00002b13 cmpl $-61, %r14d + 0x0f, 0x8f, 0x1e, 0x00, 0x00, 0x00, //0x00002b17 jg LBB9_35 + 0x90, 0x90, 0x90, //0x00002b1d .p2align 4, 0x90 + //0x00002b20 LBB9_34 + 0x4c, 0x89, 0xe7, //0x00002b20 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00002b23 movl $60, %esi + 0xe8, 0x43, 0x62, 0x00, 0x00, //0x00002b28 callq _right_shift + 0x8d, 0x43, 0x3c, //0x00002b2d leal $60(%rbx), %eax + 0x83, 0xfb, 0x88, //0x00002b30 cmpl $-120, %ebx + 0x89, 0xc3, //0x00002b33 movl %eax, %ebx + 0x0f, 0x8c, 0xe5, 0xff, 0xff, 0xff, //0x00002b35 jl LBB9_34 + //0x00002b3b LBB9_35 + 0xf7, 0xdb, //0x00002b3b negl %ebx + 0x4c, 0x89, 0xe7, //0x00002b3d movq %r12, %rdi + 0x89, 0xde, //0x00002b40 movl %ebx, %esi + 0xe8, 0x29, 0x62, 0x00, 0x00, //0x00002b42 callq _right_shift + 0xe9, 0x2c, 0xff, 0xff, 0xff, //0x00002b47 jmp LBB9_21 + //0x00002b4c LBB9_36 + 0x41, 0x81, 0xff, 0x02, 0xfc, 0xff, 0xff, //0x00002b4c cmpl $-1022, %r15d + 0x0f, 0x8f, 0x4b, 0x00, 0x00, 0x00, //0x00002b53 jg LBB9_42 + 0x41, 0x83, 0x7c, 0x24, 0x10, 0x00, //0x00002b59 cmpl $0, $16(%r12) + 0x48, 0x8b, 0x5d, 0xd0, //0x00002b5f movq $-48(%rbp), %rbx + 0x0f, 0x84, 0x57, 0x00, 0x00, 0x00, //0x00002b63 je LBB9_44 + 0x41, 0x81, 0xff, 0xc6, 0xfb, 0xff, 0xff, //0x00002b69 cmpl $-1082, %r15d + 0x0f, 0x8f, 0x55, 0x00, 0x00, 0x00, //0x00002b70 jg LBB9_45 + 0x41, 0x81, 0xc7, 0xc1, 0x03, 0x00, 0x00, //0x00002b76 addl $961, %r15d + 0x90, 0x90, 0x90, //0x00002b7d .p2align 4, 0x90 + //0x00002b80 LBB9_40 + 0x4c, 0x89, 0xe7, //0x00002b80 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00002b83 movl $60, %esi + 0xe8, 0xe3, 0x61, 0x00, 0x00, //0x00002b88 callq _right_shift + 0x41, 0x83, 0xc7, 0x3c, //0x00002b8d addl $60, %r15d + 0x41, 0x83, 0xff, 0x88, //0x00002b91 cmpl $-120, %r15d + 0x0f, 0x8c, 0xe5, 0xff, 0xff, 0xff, //0x00002b95 jl LBB9_40 + 0x41, 0x83, 0xc7, 0x3c, //0x00002b9b addl $60, %r15d + 0xe9, 0x2e, 0x00, 0x00, 0x00, //0x00002b9f jmp LBB9_46 + //0x00002ba4 LBB9_42 + 0x41, 0x81, 0xff, 0x00, 0x04, 0x00, 0x00, //0x00002ba4 cmpl $1024, %r15d + 0x48, 0x8b, 0x5d, 0xd0, //0x00002bab movq $-48(%rbp), %rbx + 0x0f, 0x8f, 0x87, 0x01, 0x00, 0x00, //0x00002baf jg LBB9_75 + 0x41, 0xff, 0xcf, //0x00002bb5 decl %r15d + 0x45, 0x89, 0xfe, //0x00002bb8 movl %r15d, %r14d + 0xe9, 0x26, 0x00, 0x00, 0x00, //0x00002bbb jmp LBB9_47 + //0x00002bc0 LBB9_44 + 0x41, 0xbe, 0x02, 0xfc, 0xff, 0xff, //0x00002bc0 movl $-1022, %r14d + 0xe9, 0x34, 0x00, 0x00, 0x00, //0x00002bc6 jmp LBB9_49 + //0x00002bcb LBB9_45 + 0x41, 0x81, 0xc7, 0xfd, 0x03, 0x00, 0x00, //0x00002bcb addl $1021, %r15d + //0x00002bd2 LBB9_46 + 0x41, 0xf7, 0xdf, //0x00002bd2 negl %r15d + 0x4c, 0x89, 0xe7, //0x00002bd5 movq %r12, %rdi + 0x44, 0x89, 0xfe, //0x00002bd8 movl %r15d, %esi + 0xe8, 0x90, 0x61, 0x00, 0x00, //0x00002bdb callq _right_shift + 0x41, 0xbe, 0x02, 0xfc, 0xff, 0xff, //0x00002be0 movl $-1022, %r14d + //0x00002be6 LBB9_47 + 0x41, 0x83, 0x7c, 0x24, 0x10, 0x00, //0x00002be6 cmpl $0, $16(%r12) + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00002bec je LBB9_49 + 0x4c, 0x89, 0xe7, //0x00002bf2 movq %r12, %rdi + 0xbe, 0x35, 0x00, 0x00, 0x00, //0x00002bf5 movl $53, %esi + 0xe8, 0x81, 0x5f, 0x00, 0x00, //0x00002bfa callq _left_shift + //0x00002bff LBB9_49 + 0x4d, 0x63, 0x44, 0x24, 0x14, //0x00002bff movslq $20(%r12), %r8 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002c04 movq $-1, %r15 + 0x49, 0x83, 0xf8, 0x14, //0x00002c0b cmpq $20, %r8 + 0x0f, 0x8f, 0x3f, 0x01, 0x00, 0x00, //0x00002c0f jg LBB9_77 + 0x44, 0x89, 0xc1, //0x00002c15 movl %r8d, %ecx + 0x85, 0xc9, //0x00002c18 testl %ecx, %ecx + 0x0f, 0x8e, 0x3c, 0x00, 0x00, 0x00, //0x00002c1a jle LBB9_54 + 0x49, 0x63, 0x74, 0x24, 0x10, //0x00002c20 movslq $16(%r12), %rsi + 0x31, 0xd2, //0x00002c25 xorl %edx, %edx + 0x45, 0x31, 0xff, //0x00002c27 xorl %r15d, %r15d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002c2a .p2align 4, 0x90 + //0x00002c30 LBB9_52 + 0x48, 0x39, 0xf2, //0x00002c30 cmpq %rsi, %rdx + 0x0f, 0x8d, 0x28, 0x00, 0x00, 0x00, //0x00002c33 jge LBB9_55 + 0x4b, 0x8d, 0x04, 0xbf, //0x00002c39 leaq (%r15,%r15,4), %rax + 0x49, 0x8b, 0x3c, 0x24, //0x00002c3d movq (%r12), %rdi + 0x48, 0x0f, 0xbe, 0x3c, 0x17, //0x00002c41 movsbq (%rdi,%rdx), %rdi + 0x4c, 0x8d, 0x7c, 0x47, 0xd0, //0x00002c46 leaq $-48(%rdi,%rax,2), %r15 + 0x48, 0xff, 0xc2, //0x00002c4b incq %rdx + 0x48, 0x39, 0xd1, //0x00002c4e cmpq %rdx, %rcx + 0x0f, 0x85, 0xd9, 0xff, 0xff, 0xff, //0x00002c51 jne LBB9_52 + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00002c57 jmp LBB9_55 + //0x00002c5c LBB9_54 + 0x31, 0xd2, //0x00002c5c xorl %edx, %edx + 0x45, 0x31, 0xff, //0x00002c5e xorl %r15d, %r15d + //0x00002c61 LBB9_55 + 0x41, 0x39, 0xd0, //0x00002c61 cmpl %edx, %r8d + 0x0f, 0x8e, 0x56, 0x00, 0x00, 0x00, //0x00002c64 jle LBB9_63 + 0x89, 0xcf, //0x00002c6a movl %ecx, %edi + 0x29, 0xd7, //0x00002c6c subl %edx, %edi + 0x89, 0xd6, //0x00002c6e movl %edx, %esi + 0xf7, 0xd6, //0x00002c70 notl %esi + 0x44, 0x01, 0xc6, //0x00002c72 addl %r8d, %esi + 0x83, 0xe7, 0x07, //0x00002c75 andl $7, %edi + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00002c78 je LBB9_60 + 0xf7, 0xdf, //0x00002c7e negl %edi + 0x31, 0xc0, //0x00002c80 xorl %eax, %eax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002c82 .p2align 4, 0x90 + //0x00002c90 LBB9_58 + 0x4d, 0x01, 0xff, //0x00002c90 addq %r15, %r15 + 0x4f, 0x8d, 0x3c, 0xbf, //0x00002c93 leaq (%r15,%r15,4), %r15 + 0xff, 0xc8, //0x00002c97 decl %eax + 0x39, 0xc7, //0x00002c99 cmpl %eax, %edi + 0x0f, 0x85, 0xef, 0xff, 0xff, 0xff, //0x00002c9b jne LBB9_58 + 0x29, 0xc2, //0x00002ca1 subl %eax, %edx + //0x00002ca3 LBB9_60 + 0x83, 0xfe, 0x07, //0x00002ca3 cmpl $7, %esi + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00002ca6 jb LBB9_63 + 0x89, 0xc8, //0x00002cac movl %ecx, %eax + 0x29, 0xd0, //0x00002cae subl %edx, %eax + //0x00002cb0 .p2align 4, 0x90 + //0x00002cb0 LBB9_62 + 0x4d, 0x69, 0xff, 0x00, 0xe1, 0xf5, 0x05, //0x00002cb0 imulq $100000000, %r15, %r15 + 0x83, 0xc0, 0xf8, //0x00002cb7 addl $-8, %eax + 0x0f, 0x85, 0xf0, 0xff, 0xff, 0xff, //0x00002cba jne LBB9_62 + //0x00002cc0 LBB9_63 + 0x85, 0xc9, //0x00002cc0 testl %ecx, %ecx + 0x0f, 0x88, 0x4c, 0x00, 0x00, 0x00, //0x00002cc2 js LBB9_71 + 0x41, 0x8b, 0x54, 0x24, 0x10, //0x00002cc8 movl $16(%r12), %edx + 0x44, 0x39, 0xc2, //0x00002ccd cmpl %r8d, %edx + 0x0f, 0x8e, 0x3e, 0x00, 0x00, 0x00, //0x00002cd0 jle LBB9_71 + 0x49, 0x8b, 0x34, 0x24, //0x00002cd6 movq (%r12), %rsi + 0x8a, 0x04, 0x0e, //0x00002cda movb (%rsi,%rcx), %al + 0x8d, 0x79, 0x01, //0x00002cdd leal $1(%rcx), %edi + 0x39, 0xd7, //0x00002ce0 cmpl %edx, %edi + 0x0f, 0x85, 0xbf, 0x00, 0x00, 0x00, //0x00002ce2 jne LBB9_72 + 0x3c, 0x35, //0x00002ce8 cmpb $53, %al + 0x0f, 0x85, 0xb7, 0x00, 0x00, 0x00, //0x00002cea jne LBB9_72 + 0x41, 0x83, 0x7c, 0x24, 0x1c, 0x00, //0x00002cf0 cmpl $0, $28(%r12) + 0x0f, 0x95, 0xc2, //0x00002cf6 setne %dl + 0x0f, 0x85, 0x17, 0x00, 0x00, 0x00, //0x00002cf9 jne LBB9_73 + 0x85, 0xc9, //0x00002cff testl %ecx, %ecx + 0x0f, 0x8e, 0x0f, 0x00, 0x00, 0x00, //0x00002d01 jle LBB9_73 + 0x41, 0x8a, 0x54, 0x30, 0xff, //0x00002d07 movb $-1(%r8,%rsi), %dl + 0x80, 0xe2, 0x01, //0x00002d0c andb $1, %dl + 0xe9, 0x02, 0x00, 0x00, 0x00, //0x00002d0f jmp LBB9_73 + //0x00002d14 LBB9_71 + 0x31, 0xd2, //0x00002d14 xorl %edx, %edx + //0x00002d16 LBB9_73 + 0x0f, 0xb6, 0xc2, //0x00002d16 movzbl %dl, %eax + 0x49, 0x01, 0xc7, //0x00002d19 addq %rax, %r15 + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, //0x00002d1c movabsq $9007199254740992, %rax + 0x49, 0x39, 0xc7, //0x00002d26 cmpq %rax, %r15 + 0x0f, 0x85, 0x25, 0x00, 0x00, 0x00, //0x00002d29 jne LBB9_77 + 0x41, 0x81, 0xfe, 0xfe, 0x03, 0x00, 0x00, //0x00002d2f cmpl $1022, %r14d + 0x0f, 0x8e, 0x12, 0x00, 0x00, 0x00, //0x00002d36 jle LBB9_76 + //0x00002d3c LBB9_75 + 0x45, 0x31, 0xff, //0x00002d3c xorl %r15d, %r15d + 0x49, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, //0x00002d3f movabsq $9218868437227405312, %r14 + 0xe9, 0x25, 0x00, 0x00, 0x00, //0x00002d49 jmp LBB9_78 + //0x00002d4e LBB9_76 + 0x41, 0xff, 0xc6, //0x00002d4e incl %r14d + 0x4d, 0x89, 0xef, //0x00002d51 movq %r13, %r15 + //0x00002d54 LBB9_77 + 0x4c, 0x89, 0xf8, //0x00002d54 movq %r15, %rax + 0x4c, 0x21, 0xe8, //0x00002d57 andq %r13, %rax + 0x41, 0x81, 0xc6, 0xff, 0x03, 0x00, 0x00, //0x00002d5a addl $1023, %r14d + 0x41, 0x81, 0xe6, 0xff, 0x07, 0x00, 0x00, //0x00002d61 andl $2047, %r14d + 0x49, 0xc1, 0xe6, 0x34, //0x00002d68 shlq $52, %r14 + 0x48, 0x85, 0xc0, //0x00002d6c testq %rax, %rax + 0x4c, 0x0f, 0x44, 0xf0, //0x00002d6f cmoveq %rax, %r14 + //0x00002d73 LBB9_78 + 0x49, 0xff, 0xcd, //0x00002d73 decq %r13 + 0x4d, 0x21, 0xfd, //0x00002d76 andq %r15, %r13 + 0x4d, 0x09, 0xf5, //0x00002d79 orq %r14, %r13 + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x00002d7c movabsq $-9223372036854775808, %rax + 0x4c, 0x09, 0xe8, //0x00002d86 orq %r13, %rax + 0x41, 0x83, 0x7c, 0x24, 0x18, 0x00, //0x00002d89 cmpl $0, $24(%r12) + 0x49, 0x0f, 0x44, 0xc5, //0x00002d8f cmoveq %r13, %rax + 0x48, 0x89, 0x03, //0x00002d93 movq %rax, (%rbx) + 0x31, 0xc0, //0x00002d96 xorl %eax, %eax + 0x48, 0x83, 0xc4, 0x08, //0x00002d98 addq $8, %rsp + 0x5b, //0x00002d9c popq %rbx + 0x41, 0x5c, //0x00002d9d popq %r12 + 0x41, 0x5d, //0x00002d9f popq %r13 + 0x41, 0x5e, //0x00002da1 popq %r14 + 0x41, 0x5f, //0x00002da3 popq %r15 + 0x5d, //0x00002da5 popq %rbp + 0xc3, //0x00002da6 retq + //0x00002da7 LBB9_72 + 0x3c, 0x34, //0x00002da7 cmpb $52, %al + 0x0f, 0x9f, 0xc2, //0x00002da9 setg %dl + 0xe9, 0x65, 0xff, 0xff, 0xff, //0x00002dac jmp LBB9_73 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002db1 .p2align 4, 0x90 + //0x00002dc0 _atof_native + 0x55, //0x00002dc0 pushq %rbp + 0x48, 0x89, 0xe5, //0x00002dc1 movq %rsp, %rbp + 0x48, 0x83, 0xec, 0x30, //0x00002dc4 subq $48, %rsp + 0x48, 0xc7, 0x45, 0xd8, 0x00, 0x00, 0x00, 0x00, //0x00002dc8 movq $0, $-40(%rbp) + 0x48, 0x89, 0x55, 0xe0, //0x00002dd0 movq %rdx, $-32(%rbp) + 0x48, 0x89, 0x4d, 0xe8, //0x00002dd4 movq %rcx, $-24(%rbp) + 0x48, 0x85, 0xc9, //0x00002dd8 testq %rcx, %rcx + 0x0f, 0x84, 0x44, 0x00, 0x00, 0x00, //0x00002ddb je LBB10_5 + 0xc6, 0x02, 0x00, //0x00002de1 movb $0, (%rdx) + 0x48, 0x83, 0xf9, 0x01, //0x00002de4 cmpq $1, %rcx + 0x0f, 0x84, 0x37, 0x00, 0x00, 0x00, //0x00002de8 je LBB10_5 + 0xc6, 0x42, 0x01, 0x00, //0x00002dee movb $0, $1(%rdx) + 0x48, 0x83, 0x7d, 0xe8, 0x03, //0x00002df2 cmpq $3, $-24(%rbp) + 0x0f, 0x82, 0x28, 0x00, 0x00, 0x00, //0x00002df7 jb LBB10_5 + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00002dfd movl $2, %eax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002e02 .p2align 4, 0x90 + //0x00002e10 LBB10_4 + 0x48, 0x8b, 0x4d, 0xe0, //0x00002e10 movq $-32(%rbp), %rcx + 0xc6, 0x04, 0x01, 0x00, //0x00002e14 movb $0, (%rcx,%rax) + 0x48, 0xff, 0xc0, //0x00002e18 incq %rax + 0x48, 0x39, 0x45, 0xe8, //0x00002e1b cmpq %rax, $-24(%rbp) + 0x0f, 0x87, 0xeb, 0xff, 0xff, 0xff, //0x00002e1f ja LBB10_4 + //0x00002e25 LBB10_5 + 0xc5, 0xf8, 0x57, 0xc0, //0x00002e25 vxorps %xmm0, %xmm0, %xmm0 + 0xc5, 0xf8, 0x11, 0x45, 0xf0, //0x00002e29 vmovups %xmm0, $-16(%rbp) + 0x80, 0x3f, 0x2d, //0x00002e2e cmpb $45, (%rdi) + 0x0f, 0x85, 0x21, 0x00, 0x00, 0x00, //0x00002e31 jne LBB10_6 + 0xc7, 0x45, 0xf8, 0x01, 0x00, 0x00, 0x00, //0x00002e37 movl $1, $-8(%rbp) + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00002e3e movl $1, %eax + 0x48, 0x39, 0xf0, //0x00002e43 cmpq %rsi, %rax + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x00002e46 jl LBB10_9 + //0x00002e4c LBB10_41 + 0xc7, 0x45, 0xf4, 0x00, 0x00, 0x00, 0x00, //0x00002e4c movl $0, $-12(%rbp) + 0xe9, 0xa1, 0x01, 0x00, 0x00, //0x00002e53 jmp LBB10_40 + //0x00002e58 LBB10_6 + 0x31, 0xc0, //0x00002e58 xorl %eax, %eax + 0x48, 0x39, 0xf0, //0x00002e5a cmpq %rsi, %rax + 0x0f, 0x8d, 0xe9, 0xff, 0xff, 0xff, //0x00002e5d jge LBB10_41 + //0x00002e63 LBB10_9 + 0x41, 0xb3, 0x01, //0x00002e63 movb $1, %r11b + 0x45, 0x31, 0xc9, //0x00002e66 xorl %r9d, %r9d + 0x45, 0x31, 0xd2, //0x00002e69 xorl %r10d, %r10d + 0x45, 0x31, 0xc0, //0x00002e6c xorl %r8d, %r8d + 0xe9, 0x25, 0x00, 0x00, 0x00, //0x00002e6f jmp LBB10_10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002e74 .p2align 4, 0x90 + //0x00002e80 LBB10_13 + 0xff, 0x4d, 0xf4, //0x00002e80 decl $-12(%rbp) + 0x45, 0x31, 0xd2, //0x00002e83 xorl %r10d, %r10d + //0x00002e86 LBB10_22 + 0x48, 0xff, 0xc0, //0x00002e86 incq %rax + 0x48, 0x39, 0xf0, //0x00002e89 cmpq %rsi, %rax + 0x41, 0x0f, 0x9c, 0xc3, //0x00002e8c setl %r11b + 0x48, 0x39, 0xc6, //0x00002e90 cmpq %rax, %rsi + 0x0f, 0x84, 0x8f, 0x00, 0x00, 0x00, //0x00002e93 je LBB10_23 + //0x00002e99 LBB10_10 + 0x0f, 0xb6, 0x0c, 0x07, //0x00002e99 movzbl (%rdi,%rax), %ecx + 0x8d, 0x51, 0xd0, //0x00002e9d leal $-48(%rcx), %edx + 0x80, 0xfa, 0x09, //0x00002ea0 cmpb $9, %dl + 0x0f, 0x87, 0x47, 0x00, 0x00, 0x00, //0x00002ea3 ja LBB10_19 + 0x45, 0x85, 0xd2, //0x00002ea9 testl %r10d, %r10d + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00002eac jne LBB10_14 + 0x80, 0xf9, 0x30, //0x00002eb2 cmpb $48, %cl + 0x0f, 0x84, 0xc5, 0xff, 0xff, 0xff, //0x00002eb5 je LBB10_13 + //0x00002ebb LBB10_14 + 0x4d, 0x63, 0xd1, //0x00002ebb movslq %r9d, %r10 + 0x4c, 0x39, 0x55, 0xe8, //0x00002ebe cmpq %r10, $-24(%rbp) + 0x0f, 0x86, 0x40, 0x00, 0x00, 0x00, //0x00002ec2 jbe LBB10_16 + 0x48, 0x8b, 0x55, 0xe0, //0x00002ec8 movq $-32(%rbp), %rdx + 0x42, 0x88, 0x0c, 0x12, //0x00002ecc movb %cl, (%rdx,%r10) + 0x44, 0x8b, 0x4d, 0xf0, //0x00002ed0 movl $-16(%rbp), %r9d + 0x41, 0xff, 0xc1, //0x00002ed4 incl %r9d + 0x44, 0x89, 0x4d, 0xf0, //0x00002ed7 movl %r9d, $-16(%rbp) + 0x45, 0x89, 0xca, //0x00002edb movl %r9d, %r10d + 0xe9, 0xa3, 0xff, 0xff, 0xff, //0x00002ede jmp LBB10_22 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002ee3 .p2align 4, 0x90 + //0x00002ef0 LBB10_19 + 0x80, 0xf9, 0x2e, //0x00002ef0 cmpb $46, %cl + 0x0f, 0x85, 0x80, 0x00, 0x00, 0x00, //0x00002ef3 jne LBB10_20 + 0x44, 0x89, 0x55, 0xf4, //0x00002ef9 movl %r10d, $-12(%rbp) + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00002efd movl $1, %r8d + 0xe9, 0x7e, 0xff, 0xff, 0xff, //0x00002f03 jmp LBB10_22 + //0x00002f08 LBB10_16 + 0x80, 0xf9, 0x30, //0x00002f08 cmpb $48, %cl + 0x0f, 0x85, 0x08, 0x00, 0x00, 0x00, //0x00002f0b jne LBB10_18 + 0x45, 0x89, 0xca, //0x00002f11 movl %r9d, %r10d + 0xe9, 0x6d, 0xff, 0xff, 0xff, //0x00002f14 jmp LBB10_22 + //0x00002f19 LBB10_18 + 0xc7, 0x45, 0xfc, 0x01, 0x00, 0x00, 0x00, //0x00002f19 movl $1, $-4(%rbp) + 0x45, 0x89, 0xca, //0x00002f20 movl %r9d, %r10d + 0xe9, 0x5e, 0xff, 0xff, 0xff, //0x00002f23 jmp LBB10_22 + //0x00002f28 LBB10_23 + 0x89, 0xf1, //0x00002f28 movl %esi, %ecx + 0x48, 0x89, 0xf0, //0x00002f2a movq %rsi, %rax + 0x45, 0x85, 0xc0, //0x00002f2d testl %r8d, %r8d + 0x0f, 0x85, 0x04, 0x00, 0x00, 0x00, //0x00002f30 jne LBB10_26 + //0x00002f36 LBB10_25 + 0x44, 0x89, 0x4d, 0xf4, //0x00002f36 movl %r9d, $-12(%rbp) + //0x00002f3a LBB10_26 + 0x41, 0xf6, 0xc3, 0x01, //0x00002f3a testb $1, %r11b + 0x0f, 0x84, 0xb5, 0x00, 0x00, 0x00, //0x00002f3e je LBB10_40 + 0x8a, 0x0c, 0x0f, //0x00002f44 movb (%rdi,%rcx), %cl + 0x80, 0xc9, 0x20, //0x00002f47 orb $32, %cl + 0x80, 0xf9, 0x65, //0x00002f4a cmpb $101, %cl + 0x0f, 0x85, 0xa6, 0x00, 0x00, 0x00, //0x00002f4d jne LBB10_40 + 0x89, 0xc2, //0x00002f53 movl %eax, %edx + 0x8a, 0x4c, 0x17, 0x01, //0x00002f55 movb $1(%rdi,%rdx), %cl + 0x80, 0xf9, 0x2d, //0x00002f59 cmpb $45, %cl + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00002f5c je LBB10_32 + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00002f62 movl $1, %r8d + 0x80, 0xf9, 0x2b, //0x00002f68 cmpb $43, %cl + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00002f6b jne LBB10_30 + 0x83, 0xc0, 0x02, //0x00002f71 addl $2, %eax + 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x00002f74 jmp LBB10_33 + //0x00002f79 LBB10_20 + 0x48, 0x89, 0xc1, //0x00002f79 movq %rax, %rcx + 0x45, 0x85, 0xc0, //0x00002f7c testl %r8d, %r8d + 0x0f, 0x85, 0xb5, 0xff, 0xff, 0xff, //0x00002f7f jne LBB10_26 + 0xe9, 0xac, 0xff, 0xff, 0xff, //0x00002f85 jmp LBB10_25 + //0x00002f8a LBB10_32 + 0x83, 0xc0, 0x02, //0x00002f8a addl $2, %eax + 0x41, 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00002f8d movl $-1, %r8d + //0x00002f93 LBB10_33 + 0x89, 0xc2, //0x00002f93 movl %eax, %edx + 0x48, 0x63, 0xd2, //0x00002f95 movslq %edx, %rdx + 0x45, 0x31, 0xc9, //0x00002f98 xorl %r9d, %r9d + 0x48, 0x39, 0xf2, //0x00002f9b cmpq %rsi, %rdx + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x00002f9e jl LBB10_35 + 0xe9, 0x48, 0x00, 0x00, 0x00, //0x00002fa4 jmp LBB10_39 + //0x00002fa9 LBB10_30 + 0x48, 0xff, 0xc2, //0x00002fa9 incq %rdx + 0x48, 0x63, 0xd2, //0x00002fac movslq %edx, %rdx + 0x45, 0x31, 0xc9, //0x00002faf xorl %r9d, %r9d + 0x48, 0x39, 0xf2, //0x00002fb2 cmpq %rsi, %rdx + 0x0f, 0x8d, 0x36, 0x00, 0x00, 0x00, //0x00002fb5 jge LBB10_39 + //0x00002fbb LBB10_35 + 0x45, 0x31, 0xc9, //0x00002fbb xorl %r9d, %r9d + 0x90, 0x90, //0x00002fbe .p2align 4, 0x90 + //0x00002fc0 LBB10_36 + 0x41, 0x81, 0xf9, 0x0f, 0x27, 0x00, 0x00, //0x00002fc0 cmpl $9999, %r9d + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00002fc7 jg LBB10_39 + 0x0f, 0xb6, 0x0c, 0x17, //0x00002fcd movzbl (%rdi,%rdx), %ecx + 0x8d, 0x41, 0xd0, //0x00002fd1 leal $-48(%rcx), %eax + 0x3c, 0x09, //0x00002fd4 cmpb $9, %al + 0x0f, 0x87, 0x15, 0x00, 0x00, 0x00, //0x00002fd6 ja LBB10_39 + 0x43, 0x8d, 0x04, 0x89, //0x00002fdc leal (%r9,%r9,4), %eax + 0x44, 0x8d, 0x4c, 0x41, 0xd0, //0x00002fe0 leal $-48(%rcx,%rax,2), %r9d + 0x48, 0xff, 0xc2, //0x00002fe5 incq %rdx + 0x48, 0x39, 0xd6, //0x00002fe8 cmpq %rdx, %rsi + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00002feb jne LBB10_36 + //0x00002ff1 LBB10_39 + 0x45, 0x0f, 0xaf, 0xc8, //0x00002ff1 imull %r8d, %r9d + 0x44, 0x01, 0x4d, 0xf4, //0x00002ff5 addl %r9d, $-12(%rbp) + //0x00002ff9 LBB10_40 + 0x48, 0x8d, 0x7d, 0xe0, //0x00002ff9 leaq $-32(%rbp), %rdi + 0x48, 0x8d, 0x75, 0xd8, //0x00002ffd leaq $-40(%rbp), %rsi + 0xe8, 0x1a, 0xf9, 0xff, 0xff, //0x00003001 callq _decimal_to_f64 + 0xc5, 0xfb, 0x10, 0x45, 0xd8, //0x00003006 vmovsd $-40(%rbp), %xmm0 + 0x48, 0x83, 0xc4, 0x30, //0x0000300b addq $48, %rsp + 0x5d, //0x0000300f popq %rbp + 0xc3, //0x00003010 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003011 .p2align 4, 0x90 + //0x00003020 _value + 0x55, //0x00003020 pushq %rbp + 0x48, 0x89, 0xe5, //0x00003021 movq %rsp, %rbp + 0x41, 0x57, //0x00003024 pushq %r15 + 0x41, 0x56, //0x00003026 pushq %r14 + 0x41, 0x55, //0x00003028 pushq %r13 + 0x41, 0x54, //0x0000302a pushq %r12 + 0x53, //0x0000302c pushq %rbx + 0x48, 0x83, 0xec, 0x28, //0x0000302d subq $40, %rsp + 0x49, 0x89, 0xc9, //0x00003031 movq %rcx, %r9 + 0x49, 0x89, 0xd4, //0x00003034 movq %rdx, %r12 + 0x49, 0x89, 0xf7, //0x00003037 movq %rsi, %r15 + 0x49, 0x89, 0xfd, //0x0000303a movq %rdi, %r13 + 0x48, 0x89, 0x55, 0xd0, //0x0000303d movq %rdx, $-48(%rbp) + 0x48, 0x89, 0x7d, 0xb0, //0x00003041 movq %rdi, $-80(%rbp) + 0x48, 0x89, 0x75, 0xb8, //0x00003045 movq %rsi, $-72(%rbp) + 0x48, 0x89, 0xd0, //0x00003049 movq %rdx, %rax + 0x48, 0x29, 0xf0, //0x0000304c subq %rsi, %rax + 0x0f, 0x83, 0x2b, 0x00, 0x00, 0x00, //0x0000304f jae LBB11_5 + 0x43, 0x8a, 0x4c, 0x25, 0x00, //0x00003055 movb (%r13,%r12), %cl + 0x80, 0xf9, 0x0d, //0x0000305a cmpb $13, %cl + 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x0000305d je LBB11_5 + 0x80, 0xf9, 0x20, //0x00003063 cmpb $32, %cl + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00003066 je LBB11_5 + 0x8d, 0x51, 0xf7, //0x0000306c leal $-9(%rcx), %edx + 0x80, 0xfa, 0x01, //0x0000306f cmpb $1, %dl + 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x00003072 jbe LBB11_5 + 0x4c, 0x89, 0xe3, //0x00003078 movq %r12, %rbx + 0xe9, 0x32, 0x01, 0x00, 0x00, //0x0000307b jmp LBB11_28 + //0x00003080 LBB11_5 + 0x49, 0x8d, 0x5c, 0x24, 0x01, //0x00003080 leaq $1(%r12), %rbx + 0x4c, 0x39, 0xfb, //0x00003085 cmpq %r15, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00003088 jae LBB11_9 + 0x41, 0x8a, 0x4c, 0x1d, 0x00, //0x0000308e movb (%r13,%rbx), %cl + 0x80, 0xf9, 0x0d, //0x00003093 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00003096 je LBB11_9 + 0x80, 0xf9, 0x20, //0x0000309c cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000309f je LBB11_9 + 0x8d, 0x51, 0xf7, //0x000030a5 leal $-9(%rcx), %edx + 0x80, 0xfa, 0x01, //0x000030a8 cmpb $1, %dl + 0x0f, 0x87, 0x01, 0x01, 0x00, 0x00, //0x000030ab ja LBB11_28 + //0x000030b1 LBB11_9 + 0x49, 0x8d, 0x5c, 0x24, 0x02, //0x000030b1 leaq $2(%r12), %rbx + 0x4c, 0x39, 0xfb, //0x000030b6 cmpq %r15, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000030b9 jae LBB11_13 + 0x41, 0x8a, 0x4c, 0x1d, 0x00, //0x000030bf movb (%r13,%rbx), %cl + 0x80, 0xf9, 0x0d, //0x000030c4 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000030c7 je LBB11_13 + 0x80, 0xf9, 0x20, //0x000030cd cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000030d0 je LBB11_13 + 0x8d, 0x51, 0xf7, //0x000030d6 leal $-9(%rcx), %edx + 0x80, 0xfa, 0x01, //0x000030d9 cmpb $1, %dl + 0x0f, 0x87, 0xd0, 0x00, 0x00, 0x00, //0x000030dc ja LBB11_28 + //0x000030e2 LBB11_13 + 0x49, 0x8d, 0x5c, 0x24, 0x03, //0x000030e2 leaq $3(%r12), %rbx + 0x4c, 0x39, 0xfb, //0x000030e7 cmpq %r15, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000030ea jae LBB11_17 + 0x41, 0x8a, 0x4c, 0x1d, 0x00, //0x000030f0 movb (%r13,%rbx), %cl + 0x80, 0xf9, 0x0d, //0x000030f5 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000030f8 je LBB11_17 + 0x80, 0xf9, 0x20, //0x000030fe cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00003101 je LBB11_17 + 0x8d, 0x51, 0xf7, //0x00003107 leal $-9(%rcx), %edx + 0x80, 0xfa, 0x01, //0x0000310a cmpb $1, %dl + 0x0f, 0x87, 0x9f, 0x00, 0x00, 0x00, //0x0000310d ja LBB11_28 + //0x00003113 LBB11_17 + 0x49, 0x8d, 0x4c, 0x24, 0x04, //0x00003113 leaq $4(%r12), %rcx + 0x4c, 0x39, 0xf9, //0x00003118 cmpq %r15, %rcx + 0x0f, 0x83, 0x57, 0x00, 0x00, 0x00, //0x0000311b jae LBB11_23 + 0x49, 0x39, 0xcf, //0x00003121 cmpq %rcx, %r15 + 0x0f, 0x84, 0x5a, 0x00, 0x00, 0x00, //0x00003124 je LBB11_24 + 0x4b, 0x8d, 0x4c, 0x3d, 0x00, //0x0000312a leaq (%r13,%r15), %rcx + 0x48, 0x83, 0xc0, 0x04, //0x0000312f addq $4, %rax + 0x4b, 0x8d, 0x5c, 0x2c, 0x05, //0x00003133 leaq $5(%r12,%r13), %rbx + 0x48, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003138 movabsq $4294977024, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003142 .p2align 4, 0x90 + //0x00003150 LBB11_20 + 0x0f, 0xbe, 0x73, 0xff, //0x00003150 movsbl $-1(%rbx), %esi + 0x83, 0xfe, 0x20, //0x00003154 cmpl $32, %esi + 0x0f, 0x87, 0x3e, 0x00, 0x00, 0x00, //0x00003157 ja LBB11_26 + 0x48, 0x0f, 0xa3, 0xf2, //0x0000315d btq %rsi, %rdx + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00003161 jae LBB11_26 + 0x48, 0xff, 0xc3, //0x00003167 incq %rbx + 0x48, 0xff, 0xc0, //0x0000316a incq %rax + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x0000316d jne LBB11_20 + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00003173 jmp LBB11_25 + //0x00003178 LBB11_23 + 0x48, 0x89, 0x4d, 0xd0, //0x00003178 movq %rcx, $-48(%rbp) + 0x49, 0x89, 0xcc, //0x0000317c movq %rcx, %r12 + 0xe9, 0x7e, 0x00, 0x00, 0x00, //0x0000317f jmp LBB11_32 + //0x00003184 LBB11_24 + 0x4c, 0x01, 0xe9, //0x00003184 addq %r13, %rcx + //0x00003187 LBB11_25 + 0x4c, 0x29, 0xe9, //0x00003187 subq %r13, %rcx + 0x48, 0x89, 0xcb, //0x0000318a movq %rcx, %rbx + 0x4c, 0x39, 0xfb, //0x0000318d cmpq %r15, %rbx + 0x0f, 0x82, 0x17, 0x00, 0x00, 0x00, //0x00003190 jb LBB11_27 + 0xe9, 0x67, 0x00, 0x00, 0x00, //0x00003196 jmp LBB11_32 + //0x0000319b LBB11_26 + 0x4c, 0x89, 0xe8, //0x0000319b movq %r13, %rax + 0x48, 0xf7, 0xd0, //0x0000319e notq %rax + 0x48, 0x01, 0xc3, //0x000031a1 addq %rax, %rbx + 0x4c, 0x39, 0xfb, //0x000031a4 cmpq %r15, %rbx + 0x0f, 0x83, 0x55, 0x00, 0x00, 0x00, //0x000031a7 jae LBB11_32 + //0x000031ad LBB11_27 + 0x41, 0x8a, 0x4c, 0x1d, 0x00, //0x000031ad movb (%r13,%rbx), %cl + //0x000031b2 LBB11_28 + 0x4c, 0x8d, 0x63, 0x01, //0x000031b2 leaq $1(%rbx), %r12 + 0x4c, 0x89, 0x65, 0xd0, //0x000031b6 movq %r12, $-48(%rbp) + 0x0f, 0xbe, 0xc1, //0x000031ba movsbl %cl, %eax + 0x83, 0xf8, 0x7d, //0x000031bd cmpl $125, %eax + 0x0f, 0x87, 0xc4, 0x00, 0x00, 0x00, //0x000031c0 ja LBB11_41 + 0x4d, 0x8d, 0x74, 0x1d, 0x00, //0x000031c6 leaq (%r13,%rbx), %r14 + 0x48, 0x8d, 0x15, 0x72, 0x03, 0x00, 0x00, //0x000031cb leaq $882(%rip), %rdx /* LJTI11_0+0(%rip) */ + 0x48, 0x63, 0x04, 0x82, //0x000031d2 movslq (%rdx,%rax,4), %rax + 0x48, 0x01, 0xd0, //0x000031d6 addq %rdx, %rax + 0xff, 0xe0, //0x000031d9 jmpq *%rax + //0x000031db LBB11_30 + 0x48, 0x89, 0x5d, 0xd0, //0x000031db movq %rbx, $-48(%rbp) + 0x41, 0xf6, 0xc0, 0x02, //0x000031df testb $2, %r8b + 0x0f, 0x85, 0x35, 0x00, 0x00, 0x00, //0x000031e3 jne LBB11_35 + 0x48, 0x8d, 0x7d, 0xb0, //0x000031e9 leaq $-80(%rbp), %rdi + 0x48, 0x8d, 0x75, 0xd0, //0x000031ed leaq $-48(%rbp), %rsi + 0x4c, 0x89, 0xca, //0x000031f1 movq %r9, %rdx + 0xe8, 0x27, 0x0b, 0x00, 0x00, //0x000031f4 callq _vnumber + 0x48, 0x8b, 0x5d, 0xd0, //0x000031f9 movq $-48(%rbp), %rbx + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x000031fd jmp LBB11_34 + //0x00003202 LBB11_32 + 0x49, 0xc7, 0x01, 0x01, 0x00, 0x00, 0x00, //0x00003202 movq $1, (%r9) + //0x00003209 LBB11_33 + 0x4c, 0x89, 0xe3, //0x00003209 movq %r12, %rbx + //0x0000320c LBB11_34 + 0x48, 0x89, 0xd8, //0x0000320c movq %rbx, %rax + 0x48, 0x83, 0xc4, 0x28, //0x0000320f addq $40, %rsp + 0x5b, //0x00003213 popq %rbx + 0x41, 0x5c, //0x00003214 popq %r12 + 0x41, 0x5d, //0x00003216 popq %r13 + 0x41, 0x5e, //0x00003218 popq %r14 + 0x41, 0x5f, //0x0000321a popq %r15 + 0x5d, //0x0000321c popq %rbp + 0xc3, //0x0000321d retq + //0x0000321e LBB11_35 + 0x31, 0xc0, //0x0000321e xorl %eax, %eax + 0x80, 0xf9, 0x2d, //0x00003220 cmpb $45, %cl + 0x0f, 0x94, 0xc0, //0x00003223 sete %al + 0x49, 0x01, 0xc6, //0x00003226 addq %rax, %r14 + 0x49, 0x29, 0xc7, //0x00003229 subq %rax, %r15 + 0x0f, 0x84, 0xda, 0x02, 0x00, 0x00, //0x0000322c je LBB11_85 + 0x4c, 0x89, 0x4d, 0xc8, //0x00003232 movq %r9, $-56(%rbp) + 0x4c, 0x39, 0xfb, //0x00003236 cmpq %r15, %rbx + 0x0f, 0x83, 0x0d, 0x00, 0x00, 0x00, //0x00003239 jae LBB11_38 + 0x41, 0x8a, 0x06, //0x0000323f movb (%r14), %al + 0x04, 0xd0, //0x00003242 addb $-48, %al + 0x3c, 0x0a, //0x00003244 cmpb $10, %al + 0x0f, 0x83, 0xd9, 0x02, 0x00, 0x00, //0x00003246 jae LBB11_87 + //0x0000324c LBB11_38 + 0x4c, 0x89, 0xf7, //0x0000324c movq %r14, %rdi + 0x4c, 0x89, 0xfe, //0x0000324f movq %r15, %rsi + 0xe8, 0xd9, 0x1d, 0x00, 0x00, //0x00003252 callq _do_skip_number + 0x48, 0x85, 0xc0, //0x00003257 testq %rax, %rax + 0x0f, 0x88, 0xbf, 0x02, 0x00, 0x00, //0x0000325a js LBB11_86 + 0x49, 0x01, 0xc6, //0x00003260 addq %rax, %r14 + 0x4d, 0x29, 0xee, //0x00003263 subq %r13, %r14 + 0x4c, 0x89, 0x75, 0xd0, //0x00003266 movq %r14, $-48(%rbp) + 0x4d, 0x85, 0xe4, //0x0000326a testq %r12, %r12 + 0x4c, 0x8b, 0x4d, 0xc8, //0x0000326d movq $-56(%rbp), %r9 + 0x0f, 0x8e, 0xc0, 0x02, 0x00, 0x00, //0x00003271 jle LBB11_88 + 0x49, 0xc7, 0x01, 0x08, 0x00, 0x00, 0x00, //0x00003277 movq $8, (%r9) + 0x49, 0x89, 0x59, 0x18, //0x0000327e movq %rbx, $24(%r9) + 0x4c, 0x89, 0xf3, //0x00003282 movq %r14, %rbx + 0xe9, 0x82, 0xff, 0xff, 0xff, //0x00003285 jmp LBB11_34 + //0x0000328a LBB11_41 + 0x49, 0xc7, 0x01, 0xfe, 0xff, 0xff, 0xff, //0x0000328a movq $-2, (%r9) + 0xe9, 0x76, 0xff, 0xff, 0xff, //0x00003291 jmp LBB11_34 + //0x00003296 LBB11_42 + 0x4d, 0x89, 0xce, //0x00003296 movq %r9, %r14 + 0x48, 0xc7, 0x45, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003299 movq $-1, $-64(%rbp) + 0x48, 0x8d, 0x7d, 0xb0, //0x000032a1 leaq $-80(%rbp), %rdi + 0x48, 0x8d, 0x55, 0xc0, //0x000032a5 leaq $-64(%rbp), %rdx + 0x4c, 0x89, 0xe6, //0x000032a9 movq %r12, %rsi + 0x4c, 0x89, 0xc1, //0x000032ac movq %r8, %rcx + 0xe8, 0x3c, 0x05, 0x00, 0x00, //0x000032af callq _advance_string + 0x48, 0x89, 0xc3, //0x000032b4 movq %rax, %rbx + 0x48, 0x85, 0xc0, //0x000032b7 testq %rax, %rax + 0x0f, 0x88, 0x41, 0x01, 0x00, 0x00, //0x000032ba js LBB11_61 + 0x48, 0x89, 0x5d, 0xd0, //0x000032c0 movq %rbx, $-48(%rbp) + 0x4d, 0x89, 0x66, 0x10, //0x000032c4 movq %r12, $16(%r14) + 0x48, 0x8b, 0x45, 0xc0, //0x000032c8 movq $-64(%rbp), %rax + 0x48, 0x39, 0xd8, //0x000032cc cmpq %rbx, %rax + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000032cf movq $-1, %rcx + 0x48, 0x0f, 0x4c, 0xc8, //0x000032d6 cmovlq %rax, %rcx + 0x49, 0x89, 0x4e, 0x18, //0x000032da movq %rcx, $24(%r14) + 0xb8, 0x07, 0x00, 0x00, 0x00, //0x000032de movl $7, %eax + 0x49, 0x89, 0x06, //0x000032e3 movq %rax, (%r14) + 0xe9, 0x21, 0xff, 0xff, 0xff, //0x000032e6 jmp LBB11_34 + //0x000032eb LBB11_44 + 0x31, 0xc0, //0x000032eb xorl %eax, %eax + 0x45, 0x85, 0xc0, //0x000032ed testl %r8d, %r8d + 0x0f, 0x99, 0xc0, //0x000032f0 setns %al + 0xb9, 0x0b, 0x00, 0x00, 0x00, //0x000032f3 movl $11, %ecx + 0xe9, 0xee, 0x00, 0x00, 0x00, //0x000032f8 jmp LBB11_60 + //0x000032fd LBB11_45 + 0x31, 0xc0, //0x000032fd xorl %eax, %eax + 0x45, 0x85, 0xc0, //0x000032ff testl %r8d, %r8d + 0x0f, 0x99, 0xc0, //0x00003302 setns %al + 0xb9, 0x0a, 0x00, 0x00, 0x00, //0x00003305 movl $10, %ecx + 0xe9, 0xdc, 0x00, 0x00, 0x00, //0x0000330a jmp LBB11_60 + //0x0000330f LBB11_46 + 0x49, 0xc7, 0x01, 0x05, 0x00, 0x00, 0x00, //0x0000330f movq $5, (%r9) + 0xe9, 0xee, 0xfe, 0xff, 0xff, //0x00003316 jmp LBB11_33 + //0x0000331b LBB11_47 + 0x31, 0xc0, //0x0000331b xorl %eax, %eax + 0x45, 0x85, 0xc0, //0x0000331d testl %r8d, %r8d + 0x0f, 0x99, 0xc0, //0x00003320 setns %al + 0xb9, 0x0c, 0x00, 0x00, 0x00, //0x00003323 movl $12, %ecx + 0xe9, 0xbe, 0x00, 0x00, 0x00, //0x00003328 jmp LBB11_60 + //0x0000332d LBB11_48 + 0x49, 0x8d, 0x47, 0xfc, //0x0000332d leaq $-4(%r15), %rax + 0x48, 0x39, 0xc3, //0x00003331 cmpq %rax, %rbx + 0x0f, 0x83, 0x88, 0x00, 0x00, 0x00, //0x00003334 jae LBB11_57 + 0x43, 0x8b, 0x4c, 0x25, 0x00, //0x0000333a movl (%r13,%r12), %ecx + 0x81, 0xf9, 0x61, 0x6c, 0x73, 0x65, //0x0000333f cmpl $1702063201, %ecx + 0x0f, 0x85, 0xc5, 0x00, 0x00, 0x00, //0x00003345 jne LBB11_62 + 0x48, 0x83, 0xc3, 0x05, //0x0000334b addq $5, %rbx + 0x48, 0x89, 0x5d, 0xd0, //0x0000334f movq %rbx, $-48(%rbp) + 0xb8, 0x04, 0x00, 0x00, 0x00, //0x00003353 movl $4, %eax + 0x49, 0x89, 0xdf, //0x00003358 movq %rbx, %r15 + 0xe9, 0xa1, 0x01, 0x00, 0x00, //0x0000335b jmp LBB11_84 + //0x00003360 LBB11_51 + 0x49, 0x8d, 0x47, 0xfd, //0x00003360 leaq $-3(%r15), %rax + 0x48, 0x39, 0xc3, //0x00003364 cmpq %rax, %rbx + 0x0f, 0x83, 0x55, 0x00, 0x00, 0x00, //0x00003367 jae LBB11_57 + 0x41, 0x8b, 0x0e, //0x0000336d movl (%r14), %ecx + 0x81, 0xf9, 0x6e, 0x75, 0x6c, 0x6c, //0x00003370 cmpl $1819047278, %ecx + 0x0f, 0x85, 0xd3, 0x00, 0x00, 0x00, //0x00003376 jne LBB11_66 + 0x48, 0x83, 0xc3, 0x04, //0x0000337c addq $4, %rbx + 0x48, 0x89, 0x5d, 0xd0, //0x00003380 movq %rbx, $-48(%rbp) + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00003384 movl $2, %eax + 0x49, 0x89, 0xdf, //0x00003389 movq %rbx, %r15 + 0xe9, 0x70, 0x01, 0x00, 0x00, //0x0000338c jmp LBB11_84 + //0x00003391 LBB11_54 + 0x49, 0x8d, 0x47, 0xfd, //0x00003391 leaq $-3(%r15), %rax + 0x48, 0x39, 0xc3, //0x00003395 cmpq %rax, %rbx + 0x0f, 0x83, 0x24, 0x00, 0x00, 0x00, //0x00003398 jae LBB11_57 + 0x41, 0x8b, 0x0e, //0x0000339e movl (%r14), %ecx + 0x81, 0xf9, 0x74, 0x72, 0x75, 0x65, //0x000033a1 cmpl $1702195828, %ecx + 0x0f, 0x85, 0xe5, 0x00, 0x00, 0x00, //0x000033a7 jne LBB11_70 + 0x48, 0x83, 0xc3, 0x04, //0x000033ad addq $4, %rbx + 0x48, 0x89, 0x5d, 0xd0, //0x000033b1 movq %rbx, $-48(%rbp) + 0xb8, 0x03, 0x00, 0x00, 0x00, //0x000033b5 movl $3, %eax + 0x49, 0x89, 0xdf, //0x000033ba movq %rbx, %r15 + 0xe9, 0x3f, 0x01, 0x00, 0x00, //0x000033bd jmp LBB11_84 + //0x000033c2 LBB11_57 + 0x4c, 0x89, 0x7d, 0xd0, //0x000033c2 movq %r15, $-48(%rbp) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000033c6 movq $-1, %rax + 0xe9, 0x2f, 0x01, 0x00, 0x00, //0x000033cd jmp LBB11_84 + //0x000033d2 LBB11_58 + 0x49, 0xc7, 0x01, 0x06, 0x00, 0x00, 0x00, //0x000033d2 movq $6, (%r9) + 0xe9, 0x2b, 0xfe, 0xff, 0xff, //0x000033d9 jmp LBB11_33 + //0x000033de LBB11_59 + 0x31, 0xc0, //0x000033de xorl %eax, %eax + 0x45, 0x85, 0xc0, //0x000033e0 testl %r8d, %r8d + 0x0f, 0x99, 0xc0, //0x000033e3 setns %al + 0xb9, 0x0d, 0x00, 0x00, 0x00, //0x000033e6 movl $13, %ecx + //0x000033eb LBB11_60 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x000033eb movq $-2, %rdx + 0x48, 0x0f, 0x48, 0xd1, //0x000033f2 cmovsq %rcx, %rdx + 0x49, 0x89, 0x11, //0x000033f6 movq %rdx, (%r9) + 0x49, 0x29, 0xc4, //0x000033f9 subq %rax, %r12 + 0xe9, 0x08, 0xfe, 0xff, 0xff, //0x000033fc jmp LBB11_33 + //0x00003401 LBB11_61 + 0x4c, 0x89, 0x7d, 0xd0, //0x00003401 movq %r15, $-48(%rbp) + 0x49, 0x89, 0x1e, //0x00003405 movq %rbx, (%r14) + 0x4c, 0x89, 0xfb, //0x00003408 movq %r15, %rbx + 0xe9, 0xfc, 0xfd, 0xff, 0xff, //0x0000340b jmp LBB11_34 + //0x00003410 LBB11_62 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003410 movq $-2, %rax + 0x80, 0xf9, 0x61, //0x00003417 cmpb $97, %cl + 0x0f, 0x85, 0xbd, 0x00, 0x00, 0x00, //0x0000341a jne LBB11_74 + 0x41, 0x80, 0x7c, 0x1d, 0x02, 0x6c, //0x00003420 cmpb $108, $2(%r13,%rbx) + 0x0f, 0x85, 0xc1, 0x00, 0x00, 0x00, //0x00003426 jne LBB11_81 + 0x41, 0x80, 0x7c, 0x1d, 0x03, 0x73, //0x0000342c cmpb $115, $3(%r13,%rbx) + 0x0f, 0x85, 0xbe, 0x00, 0x00, 0x00, //0x00003432 jne LBB11_79 + 0x4c, 0x8d, 0x7b, 0x04, //0x00003438 leaq $4(%rbx), %r15 + 0x48, 0x8d, 0x4b, 0x05, //0x0000343c leaq $5(%rbx), %rcx + 0x41, 0x80, 0x7c, 0x1d, 0x04, 0x65, //0x00003440 cmpb $101, $4(%r13,%rbx) + 0x4c, 0x0f, 0x44, 0xf9, //0x00003446 cmoveq %rcx, %r15 + 0xe9, 0xae, 0x00, 0x00, 0x00, //0x0000344a jmp LBB11_83 + //0x0000344f LBB11_66 + 0x48, 0x89, 0x5d, 0xd0, //0x0000344f movq %rbx, $-48(%rbp) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003453 movq $-2, %rax + 0x80, 0xf9, 0x6e, //0x0000345a cmpb $110, %cl + 0x0f, 0x85, 0x72, 0x00, 0x00, 0x00, //0x0000345d jne LBB11_76 + 0x41, 0x80, 0x7c, 0x1d, 0x01, 0x75, //0x00003463 cmpb $117, $1(%r13,%rbx) + 0x0f, 0x85, 0x76, 0x00, 0x00, 0x00, //0x00003469 jne LBB11_77 + 0x41, 0x80, 0x7c, 0x1d, 0x02, 0x6c, //0x0000346f cmpb $108, $2(%r13,%rbx) + 0x0f, 0x85, 0x72, 0x00, 0x00, 0x00, //0x00003475 jne LBB11_81 + 0x4c, 0x8d, 0x7b, 0x03, //0x0000347b leaq $3(%rbx), %r15 + 0x48, 0x8d, 0x4b, 0x04, //0x0000347f leaq $4(%rbx), %rcx + 0x41, 0x80, 0x7c, 0x1d, 0x03, 0x6c, //0x00003483 cmpb $108, $3(%r13,%rbx) + 0x4c, 0x0f, 0x44, 0xf9, //0x00003489 cmoveq %rcx, %r15 + 0xe9, 0x6b, 0x00, 0x00, 0x00, //0x0000348d jmp LBB11_83 + //0x00003492 LBB11_70 + 0x48, 0x89, 0x5d, 0xd0, //0x00003492 movq %rbx, $-48(%rbp) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003496 movq $-2, %rax + 0x80, 0xf9, 0x74, //0x0000349d cmpb $116, %cl + 0x0f, 0x85, 0x2f, 0x00, 0x00, 0x00, //0x000034a0 jne LBB11_76 + 0x41, 0x80, 0x7c, 0x1d, 0x01, 0x72, //0x000034a6 cmpb $114, $1(%r13,%rbx) + 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x000034ac jne LBB11_77 + 0x41, 0x80, 0x7c, 0x1d, 0x02, 0x75, //0x000034b2 cmpb $117, $2(%r13,%rbx) + 0x0f, 0x85, 0x2f, 0x00, 0x00, 0x00, //0x000034b8 jne LBB11_81 + 0x4c, 0x8d, 0x7b, 0x03, //0x000034be leaq $3(%rbx), %r15 + 0x48, 0x8d, 0x4b, 0x04, //0x000034c2 leaq $4(%rbx), %rcx + 0x41, 0x80, 0x7c, 0x1d, 0x03, 0x65, //0x000034c6 cmpb $101, $3(%r13,%rbx) + 0x4c, 0x0f, 0x44, 0xf9, //0x000034cc cmoveq %rcx, %r15 + 0xe9, 0x28, 0x00, 0x00, 0x00, //0x000034d0 jmp LBB11_83 + //0x000034d5 LBB11_76 + 0x49, 0x89, 0xdf, //0x000034d5 movq %rbx, %r15 + 0xe9, 0x24, 0x00, 0x00, 0x00, //0x000034d8 jmp LBB11_84 + //0x000034dd LBB11_74 + 0x4d, 0x89, 0xe7, //0x000034dd movq %r12, %r15 + 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x000034e0 jmp LBB11_84 + //0x000034e5 LBB11_77 + 0x48, 0xff, 0xc3, //0x000034e5 incq %rbx + 0xe9, 0x0d, 0x00, 0x00, 0x00, //0x000034e8 jmp LBB11_82 + //0x000034ed LBB11_81 + 0x48, 0x83, 0xc3, 0x02, //0x000034ed addq $2, %rbx + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x000034f1 jmp LBB11_82 + //0x000034f6 LBB11_79 + 0x48, 0x83, 0xc3, 0x03, //0x000034f6 addq $3, %rbx + //0x000034fa LBB11_82 + 0x49, 0x89, 0xdf, //0x000034fa movq %rbx, %r15 + //0x000034fd LBB11_83 + 0x4c, 0x89, 0x7d, 0xd0, //0x000034fd movq %r15, $-48(%rbp) + //0x00003501 LBB11_84 + 0x49, 0x89, 0x01, //0x00003501 movq %rax, (%r9) + 0x4c, 0x89, 0xfb, //0x00003504 movq %r15, %rbx + 0xe9, 0x00, 0xfd, 0xff, 0xff, //0x00003507 jmp LBB11_34 + //0x0000350c LBB11_85 + 0x4d, 0x29, 0xee, //0x0000350c subq %r13, %r14 + 0x4c, 0x89, 0x75, 0xd0, //0x0000350f movq %r14, $-48(%rbp) + 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00003513 movq $-1, %rbx + 0xe9, 0x18, 0x00, 0x00, 0x00, //0x0000351a jmp LBB11_88 + //0x0000351f LBB11_86 + 0x48, 0xf7, 0xd0, //0x0000351f notq %rax + 0x49, 0x01, 0xc6, //0x00003522 addq %rax, %r14 + //0x00003525 LBB11_87 + 0x4d, 0x29, 0xee, //0x00003525 subq %r13, %r14 + 0x4c, 0x89, 0x75, 0xd0, //0x00003528 movq %r14, $-48(%rbp) + 0x48, 0xc7, 0xc3, 0xfe, 0xff, 0xff, 0xff, //0x0000352c movq $-2, %rbx + 0x4c, 0x8b, 0x4d, 0xc8, //0x00003533 movq $-56(%rbp), %r9 + //0x00003537 LBB11_88 + 0x49, 0x89, 0x19, //0x00003537 movq %rbx, (%r9) + 0x4c, 0x89, 0xf3, //0x0000353a movq %r14, %rbx + 0xe9, 0xca, 0xfc, 0xff, 0xff, //0x0000353d jmp LBB11_34 + 0x90, 0x90, //0x00003542 .p2align 2, 0x90 + // // .set L11_0_set_32, LBB11_32-LJTI11_0 + // // .set L11_0_set_41, LBB11_41-LJTI11_0 + // // .set L11_0_set_42, LBB11_42-LJTI11_0 + // // .set L11_0_set_44, LBB11_44-LJTI11_0 + // // .set L11_0_set_30, LBB11_30-LJTI11_0 + // // .set L11_0_set_45, LBB11_45-LJTI11_0 + // // .set L11_0_set_46, LBB11_46-LJTI11_0 + // // .set L11_0_set_47, LBB11_47-LJTI11_0 + // // .set L11_0_set_48, LBB11_48-LJTI11_0 + // // .set L11_0_set_51, LBB11_51-LJTI11_0 + // // .set L11_0_set_54, LBB11_54-LJTI11_0 + // // .set L11_0_set_58, LBB11_58-LJTI11_0 + // // .set L11_0_set_59, LBB11_59-LJTI11_0 + //0x00003544 LJTI11_0 + 0xbe, 0xfc, 0xff, 0xff, //0x00003544 .long L11_0_set_32 + 0x46, 0xfd, 0xff, 0xff, //0x00003548 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000354c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003550 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003554 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003558 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000355c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003560 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003564 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003568 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000356c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003570 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003574 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003578 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000357c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003580 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003584 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003588 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000358c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003590 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003594 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003598 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000359c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035a0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035a4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035a8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035ac .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035b0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035b4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035b8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035bc .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035c0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035c4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035c8 .long L11_0_set_41 + 0x52, 0xfd, 0xff, 0xff, //0x000035cc .long L11_0_set_42 + 0x46, 0xfd, 0xff, 0xff, //0x000035d0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035d4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035d8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035dc .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035e0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035e4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035e8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035ec .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035f0 .long L11_0_set_41 + 0xa7, 0xfd, 0xff, 0xff, //0x000035f4 .long L11_0_set_44 + 0x97, 0xfc, 0xff, 0xff, //0x000035f8 .long L11_0_set_30 + 0x46, 0xfd, 0xff, 0xff, //0x000035fc .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003600 .long L11_0_set_41 + 0x97, 0xfc, 0xff, 0xff, //0x00003604 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003608 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x0000360c .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003610 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003614 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003618 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x0000361c .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003620 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003624 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003628 .long L11_0_set_30 + 0xb9, 0xfd, 0xff, 0xff, //0x0000362c .long L11_0_set_45 + 0x46, 0xfd, 0xff, 0xff, //0x00003630 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003634 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003638 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000363c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003640 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003644 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003648 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000364c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003650 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003654 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003658 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000365c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003660 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003664 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003668 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000366c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003670 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003674 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003678 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000367c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003680 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003684 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003688 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000368c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003690 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003694 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003698 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000369c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036a0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036a4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036a8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036ac .long L11_0_set_41 + 0xcb, 0xfd, 0xff, 0xff, //0x000036b0 .long L11_0_set_46 + 0x46, 0xfd, 0xff, 0xff, //0x000036b4 .long L11_0_set_41 + 0xd7, 0xfd, 0xff, 0xff, //0x000036b8 .long L11_0_set_47 + 0x46, 0xfd, 0xff, 0xff, //0x000036bc .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036c0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036c4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036c8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036cc .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036d0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036d4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036d8 .long L11_0_set_41 + 0xe9, 0xfd, 0xff, 0xff, //0x000036dc .long L11_0_set_48 + 0x46, 0xfd, 0xff, 0xff, //0x000036e0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036e4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036e8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036ec .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036f0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036f4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036f8 .long L11_0_set_41 + 0x1c, 0xfe, 0xff, 0xff, //0x000036fc .long L11_0_set_51 + 0x46, 0xfd, 0xff, 0xff, //0x00003700 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003704 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003708 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000370c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003710 .long L11_0_set_41 + 0x4d, 0xfe, 0xff, 0xff, //0x00003714 .long L11_0_set_54 + 0x46, 0xfd, 0xff, 0xff, //0x00003718 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000371c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003720 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003724 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003728 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000372c .long L11_0_set_41 + 0x8e, 0xfe, 0xff, 0xff, //0x00003730 .long L11_0_set_58 + 0x46, 0xfd, 0xff, 0xff, //0x00003734 .long L11_0_set_41 + 0x9a, 0xfe, 0xff, 0xff, //0x00003738 .long L11_0_set_59 + 0x90, 0x90, 0x90, 0x90, //0x0000373c .p2align 4, 0x90 + //0x00003740 _vstring + 0x55, //0x00003740 pushq %rbp + 0x48, 0x89, 0xe5, //0x00003741 movq %rsp, %rbp + 0x41, 0x57, //0x00003744 pushq %r15 + 0x41, 0x56, //0x00003746 pushq %r14 + 0x41, 0x54, //0x00003748 pushq %r12 + 0x53, //0x0000374a pushq %rbx + 0x48, 0x83, 0xec, 0x10, //0x0000374b subq $16, %rsp + 0x49, 0x89, 0xd6, //0x0000374f movq %rdx, %r14 + 0x48, 0x89, 0xf3, //0x00003752 movq %rsi, %rbx + 0x49, 0x89, 0xff, //0x00003755 movq %rdi, %r15 + 0x48, 0xc7, 0x45, 0xd8, 0xff, 0xff, 0xff, 0xff, //0x00003758 movq $-1, $-40(%rbp) + 0x4c, 0x8b, 0x26, //0x00003760 movq (%rsi), %r12 + 0x48, 0x8d, 0x55, 0xd8, //0x00003763 leaq $-40(%rbp), %rdx + 0x4c, 0x89, 0xe6, //0x00003767 movq %r12, %rsi + 0xe8, 0x81, 0x00, 0x00, 0x00, //0x0000376a callq _advance_string + 0x48, 0x85, 0xc0, //0x0000376f testq %rax, %rax + 0x0f, 0x88, 0x27, 0x00, 0x00, 0x00, //0x00003772 js LBB12_1 + 0x48, 0x89, 0x03, //0x00003778 movq %rax, (%rbx) + 0x4d, 0x89, 0x66, 0x10, //0x0000377b movq %r12, $16(%r14) + 0x48, 0x8b, 0x4d, 0xd8, //0x0000377f movq $-40(%rbp), %rcx + 0x48, 0x39, 0xc1, //0x00003783 cmpq %rax, %rcx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003786 movq $-1, %rax + 0x48, 0x0f, 0x4c, 0xc1, //0x0000378d cmovlq %rcx, %rax + 0x49, 0x89, 0x46, 0x18, //0x00003791 movq %rax, $24(%r14) + 0xb8, 0x07, 0x00, 0x00, 0x00, //0x00003795 movl $7, %eax + 0xe9, 0x07, 0x00, 0x00, 0x00, //0x0000379a jmp LBB12_3 + //0x0000379f LBB12_1 + 0x49, 0x8b, 0x4f, 0x08, //0x0000379f movq $8(%r15), %rcx + 0x48, 0x89, 0x0b, //0x000037a3 movq %rcx, (%rbx) + //0x000037a6 LBB12_3 + 0x49, 0x89, 0x06, //0x000037a6 movq %rax, (%r14) + 0x48, 0x83, 0xc4, 0x10, //0x000037a9 addq $16, %rsp + 0x5b, //0x000037ad popq %rbx + 0x41, 0x5c, //0x000037ae popq %r12 + 0x41, 0x5e, //0x000037b0 popq %r14 + 0x41, 0x5f, //0x000037b2 popq %r15 + 0x5d, //0x000037b4 popq %rbp + 0xc3, //0x000037b5 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000037b6 .p2align 4, 0x00 + //0x000037c0 LCPI13_0 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x000037c0 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x000037d0 LCPI13_1 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000037d0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x000037e0 LCPI13_2 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x000037e0 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x000037f0 .p2align 4, 0x90 + //0x000037f0 _advance_string + 0xf6, 0xc1, 0x20, //0x000037f0 testb $32, %cl + 0x0f, 0x85, 0x05, 0x00, 0x00, 0x00, //0x000037f3 jne LBB13_2 + 0xe9, 0x22, 0x57, 0x00, 0x00, //0x000037f9 jmp _advance_string_default + //0x000037fe LBB13_2 + 0x55, //0x000037fe pushq %rbp + 0x48, 0x89, 0xe5, //0x000037ff movq %rsp, %rbp + 0x41, 0x57, //0x00003802 pushq %r15 + 0x41, 0x56, //0x00003804 pushq %r14 + 0x41, 0x55, //0x00003806 pushq %r13 + 0x41, 0x54, //0x00003808 pushq %r12 + 0x53, //0x0000380a pushq %rbx + 0x50, //0x0000380b pushq %rax + 0x4c, 0x8b, 0x7f, 0x08, //0x0000380c movq $8(%rdi), %r15 + 0x49, 0x29, 0xf7, //0x00003810 subq %rsi, %r15 + 0x0f, 0x84, 0xac, 0x04, 0x00, 0x00, //0x00003813 je LBB13_45 + 0x48, 0x8b, 0x07, //0x00003819 movq (%rdi), %rax + 0x48, 0x89, 0x45, 0xd0, //0x0000381c movq %rax, $-48(%rbp) + 0x48, 0x01, 0xc6, //0x00003820 addq %rax, %rsi + 0x48, 0xc7, 0x02, 0xff, 0xff, 0xff, 0xff, //0x00003823 movq $-1, (%rdx) + 0x49, 0x83, 0xff, 0x40, //0x0000382a cmpq $64, %r15 + 0x0f, 0x82, 0xd0, 0x03, 0x00, 0x00, //0x0000382e jb LBB13_46 + 0x45, 0x89, 0xf9, //0x00003834 movl %r15d, %r9d + 0x41, 0x83, 0xe1, 0x3f, //0x00003837 andl $63, %r9d + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x0000383b movq $-1, %r14 + 0x45, 0x31, 0xe4, //0x00003842 xorl %r12d, %r12d + 0xc5, 0x79, 0x6f, 0x05, 0x73, 0xff, 0xff, 0xff, //0x00003845 vmovdqa $-141(%rip), %xmm8 /* LCPI13_0+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0x7b, 0xff, 0xff, 0xff, //0x0000384d vmovdqa $-133(%rip), %xmm1 /* LCPI13_1+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x15, 0x83, 0xff, 0xff, 0xff, //0x00003855 vmovdqa $-125(%rip), %xmm2 /* LCPI13_2+0(%rip) */ + 0xc5, 0xe1, 0x76, 0xdb, //0x0000385d vpcmpeqd %xmm3, %xmm3, %xmm3 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003861 .p2align 4, 0x90 + //0x00003870 LBB13_5 + 0xc5, 0xfa, 0x6f, 0x3e, //0x00003870 vmovdqu (%rsi), %xmm7 + 0xc5, 0xfa, 0x6f, 0x76, 0x10, //0x00003874 vmovdqu $16(%rsi), %xmm6 + 0xc5, 0xfa, 0x6f, 0x6e, 0x20, //0x00003879 vmovdqu $32(%rsi), %xmm5 + 0xc5, 0xfa, 0x6f, 0x66, 0x30, //0x0000387e vmovdqu $48(%rsi), %xmm4 + 0xc5, 0xb9, 0x74, 0xc7, //0x00003883 vpcmpeqb %xmm7, %xmm8, %xmm0 + 0xc5, 0x79, 0xd7, 0xd8, //0x00003887 vpmovmskb %xmm0, %r11d + 0xc5, 0xb9, 0x74, 0xc6, //0x0000388b vpcmpeqb %xmm6, %xmm8, %xmm0 + 0xc5, 0x79, 0xd7, 0xd0, //0x0000388f vpmovmskb %xmm0, %r10d + 0xc5, 0xb9, 0x74, 0xc5, //0x00003893 vpcmpeqb %xmm5, %xmm8, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00003897 vpmovmskb %xmm0, %ecx + 0xc5, 0xb9, 0x74, 0xc4, //0x0000389b vpcmpeqb %xmm4, %xmm8, %xmm0 + 0xc5, 0x79, 0xd7, 0xe8, //0x0000389f vpmovmskb %xmm0, %r13d + 0xc5, 0xc1, 0x74, 0xc1, //0x000038a3 vpcmpeqb %xmm1, %xmm7, %xmm0 + 0xc5, 0x79, 0xd7, 0xc0, //0x000038a7 vpmovmskb %xmm0, %r8d + 0xc5, 0xc9, 0x74, 0xc1, //0x000038ab vpcmpeqb %xmm1, %xmm6, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc0, //0x000038af vpmovmskb %xmm0, %eax + 0xc5, 0xd1, 0x74, 0xc1, //0x000038b3 vpcmpeqb %xmm1, %xmm5, %xmm0 + 0x49, 0xc1, 0xe2, 0x10, //0x000038b7 shlq $16, %r10 + 0x4d, 0x09, 0xd3, //0x000038bb orq %r10, %r11 + 0xc5, 0xf9, 0xd7, 0xd8, //0x000038be vpmovmskb %xmm0, %ebx + 0xc5, 0xd9, 0x74, 0xc1, //0x000038c2 vpcmpeqb %xmm1, %xmm4, %xmm0 + 0x48, 0xc1, 0xe1, 0x20, //0x000038c6 shlq $32, %rcx + 0x49, 0x09, 0xcb, //0x000038ca orq %rcx, %r11 + 0xc5, 0xf9, 0xd7, 0xf8, //0x000038cd vpmovmskb %xmm0, %edi + 0xc5, 0xe9, 0x64, 0xc7, //0x000038d1 vpcmpgtb %xmm7, %xmm2, %xmm0 + 0xc5, 0xc1, 0x64, 0xfb, //0x000038d5 vpcmpgtb %xmm3, %xmm7, %xmm7 + 0xc5, 0xc1, 0xdb, 0xc0, //0x000038d9 vpand %xmm0, %xmm7, %xmm0 + 0x48, 0xc1, 0xe0, 0x10, //0x000038dd shlq $16, %rax + 0x49, 0x09, 0xc0, //0x000038e1 orq %rax, %r8 + 0xc5, 0xf9, 0xd7, 0xc8, //0x000038e4 vpmovmskb %xmm0, %ecx + 0xc5, 0xe9, 0x64, 0xc6, //0x000038e8 vpcmpgtb %xmm6, %xmm2, %xmm0 + 0xc5, 0xc9, 0x64, 0xf3, //0x000038ec vpcmpgtb %xmm3, %xmm6, %xmm6 + 0xc5, 0xc9, 0xdb, 0xc0, //0x000038f0 vpand %xmm0, %xmm6, %xmm0 + 0x48, 0xc1, 0xe3, 0x20, //0x000038f4 shlq $32, %rbx + 0x49, 0x09, 0xd8, //0x000038f8 orq %rbx, %r8 + 0xc5, 0xf9, 0xd7, 0xd8, //0x000038fb vpmovmskb %xmm0, %ebx + 0xc5, 0xe9, 0x64, 0xc5, //0x000038ff vpcmpgtb %xmm5, %xmm2, %xmm0 + 0xc5, 0xd1, 0x64, 0xeb, //0x00003903 vpcmpgtb %xmm3, %xmm5, %xmm5 + 0xc5, 0xd1, 0xdb, 0xc0, //0x00003907 vpand %xmm0, %xmm5, %xmm0 + 0x48, 0xc1, 0xe7, 0x30, //0x0000390b shlq $48, %rdi + 0x49, 0x09, 0xf8, //0x0000390f orq %rdi, %r8 + 0xc5, 0xf9, 0xd7, 0xc0, //0x00003912 vpmovmskb %xmm0, %eax + 0xc5, 0xe9, 0x64, 0xc4, //0x00003916 vpcmpgtb %xmm4, %xmm2, %xmm0 + 0xc5, 0xd9, 0x64, 0xe3, //0x0000391a vpcmpgtb %xmm3, %xmm4, %xmm4 + 0xc5, 0xd9, 0xdb, 0xc0, //0x0000391e vpand %xmm0, %xmm4, %xmm0 + 0x48, 0xc1, 0xe3, 0x10, //0x00003922 shlq $16, %rbx + 0x48, 0x09, 0xd9, //0x00003926 orq %rbx, %rcx + 0xc5, 0x79, 0xd7, 0xd0, //0x00003929 vpmovmskb %xmm0, %r10d + 0x49, 0xc1, 0xe5, 0x30, //0x0000392d shlq $48, %r13 + 0x48, 0xc1, 0xe0, 0x20, //0x00003931 shlq $32, %rax + 0x49, 0x83, 0xfe, 0xff, //0x00003935 cmpq $-1, %r14 + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00003939 jne LBB13_7 + 0x4d, 0x85, 0xc0, //0x0000393f testq %r8, %r8 + 0x0f, 0x85, 0x9c, 0x00, 0x00, 0x00, //0x00003942 jne LBB13_12 + //0x00003948 LBB13_7 + 0x49, 0xc1, 0xe2, 0x30, //0x00003948 shlq $48, %r10 + 0x48, 0x09, 0xc1, //0x0000394c orq %rax, %rcx + 0x4d, 0x09, 0xeb, //0x0000394f orq %r13, %r11 + 0x4c, 0x89, 0xc0, //0x00003952 movq %r8, %rax + 0x4c, 0x09, 0xe0, //0x00003955 orq %r12, %rax + 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x00003958 jne LBB13_11 + 0x4c, 0x09, 0xd1, //0x0000395e orq %r10, %rcx + 0x4d, 0x85, 0xdb, //0x00003961 testq %r11, %r11 + 0x0f, 0x85, 0x90, 0x00, 0x00, 0x00, //0x00003964 jne LBB13_13 + //0x0000396a LBB13_9 + 0x48, 0x85, 0xc9, //0x0000396a testq %rcx, %rcx + 0x0f, 0x85, 0xdd, 0x00, 0x00, 0x00, //0x0000396d jne LBB13_19 + 0x48, 0x83, 0xc6, 0x40, //0x00003973 addq $64, %rsi + 0x49, 0x83, 0xc7, 0xc0, //0x00003977 addq $-64, %r15 + 0x49, 0x83, 0xff, 0x3f, //0x0000397b cmpq $63, %r15 + 0x0f, 0x87, 0xeb, 0xfe, 0xff, 0xff, //0x0000397f ja LBB13_5 + 0xe9, 0xea, 0x00, 0x00, 0x00, //0x00003985 jmp LBB13_21 + //0x0000398a LBB13_11 + 0x4c, 0x89, 0xe0, //0x0000398a movq %r12, %rax + 0x48, 0xf7, 0xd0, //0x0000398d notq %rax + 0x4c, 0x21, 0xc0, //0x00003990 andq %r8, %rax + 0x4c, 0x8d, 0x2c, 0x00, //0x00003993 leaq (%rax,%rax), %r13 + 0x4d, 0x09, 0xe5, //0x00003997 orq %r12, %r13 + 0x4c, 0x89, 0xeb, //0x0000399a movq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x0000399d notq %rbx + 0x4c, 0x21, 0xc3, //0x000039a0 andq %r8, %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000039a3 movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfb, //0x000039ad andq %rdi, %rbx + 0x45, 0x31, 0xe4, //0x000039b0 xorl %r12d, %r12d + 0x48, 0x01, 0xc3, //0x000039b3 addq %rax, %rbx + 0x41, 0x0f, 0x92, 0xc4, //0x000039b6 setb %r12b + 0x48, 0x01, 0xdb, //0x000039ba addq %rbx, %rbx + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000039bd movabsq $6148914691236517205, %rax + 0x48, 0x31, 0xc3, //0x000039c7 xorq %rax, %rbx + 0x4c, 0x21, 0xeb, //0x000039ca andq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x000039cd notq %rbx + 0x49, 0x21, 0xdb, //0x000039d0 andq %rbx, %r11 + 0x4c, 0x09, 0xd1, //0x000039d3 orq %r10, %rcx + 0x4d, 0x85, 0xdb, //0x000039d6 testq %r11, %r11 + 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x000039d9 je LBB13_9 + 0xe9, 0x16, 0x00, 0x00, 0x00, //0x000039df jmp LBB13_13 + //0x000039e4 LBB13_12 + 0x48, 0x89, 0xf7, //0x000039e4 movq %rsi, %rdi + 0x48, 0x2b, 0x7d, 0xd0, //0x000039e7 subq $-48(%rbp), %rdi + 0x4d, 0x0f, 0xbc, 0xf0, //0x000039eb bsfq %r8, %r14 + 0x49, 0x01, 0xfe, //0x000039ef addq %rdi, %r14 + 0x4c, 0x89, 0x32, //0x000039f2 movq %r14, (%rdx) + 0xe9, 0x4e, 0xff, 0xff, 0xff, //0x000039f5 jmp LBB13_7 + //0x000039fa LBB13_13 + 0x49, 0x0f, 0xbc, 0xc3, //0x000039fa bsfq %r11, %rax + 0x48, 0x85, 0xc9, //0x000039fe testq %rcx, %rcx + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00003a01 je LBB13_17 + 0x48, 0x0f, 0xbc, 0xc9, //0x00003a07 bsfq %rcx, %rcx + 0x48, 0x2b, 0x75, 0xd0, //0x00003a0b subq $-48(%rbp), %rsi + 0x48, 0x39, 0xc1, //0x00003a0f cmpq %rax, %rcx + 0x0f, 0x82, 0x26, 0x00, 0x00, 0x00, //0x00003a12 jb LBB13_18 + //0x00003a18 LBB13_15 + 0x48, 0x8d, 0x44, 0x06, 0x01, //0x00003a18 leaq $1(%rsi,%rax), %rax + //0x00003a1d LBB13_16 + 0x48, 0x83, 0xc4, 0x08, //0x00003a1d addq $8, %rsp + 0x5b, //0x00003a21 popq %rbx + 0x41, 0x5c, //0x00003a22 popq %r12 + 0x41, 0x5d, //0x00003a24 popq %r13 + 0x41, 0x5e, //0x00003a26 popq %r14 + 0x41, 0x5f, //0x00003a28 popq %r15 + 0x5d, //0x00003a2a popq %rbp + 0xc3, //0x00003a2b retq + //0x00003a2c LBB13_17 + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00003a2c movl $64, %ecx + 0x48, 0x2b, 0x75, 0xd0, //0x00003a31 subq $-48(%rbp), %rsi + 0x48, 0x39, 0xc1, //0x00003a35 cmpq %rax, %rcx + 0x0f, 0x83, 0xda, 0xff, 0xff, 0xff, //0x00003a38 jae LBB13_15 + //0x00003a3e LBB13_18 + 0x48, 0x01, 0xf1, //0x00003a3e addq %rsi, %rcx + 0x48, 0x89, 0x0a, //0x00003a41 movq %rcx, (%rdx) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003a44 movq $-2, %rax + 0xe9, 0xcd, 0xff, 0xff, 0xff, //0x00003a4b jmp LBB13_16 + //0x00003a50 LBB13_19 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003a50 movq $-2, %rax + 0x49, 0x83, 0xfe, 0xff, //0x00003a57 cmpq $-1, %r14 + 0x0f, 0x85, 0xbc, 0xff, 0xff, 0xff, //0x00003a5b jne LBB13_16 + 0x48, 0x0f, 0xbc, 0xc9, //0x00003a61 bsfq %rcx, %rcx + 0x48, 0x2b, 0x75, 0xd0, //0x00003a65 subq $-48(%rbp), %rsi + 0x48, 0x01, 0xce, //0x00003a69 addq %rcx, %rsi + 0x48, 0x89, 0x32, //0x00003a6c movq %rsi, (%rdx) + 0xe9, 0xa9, 0xff, 0xff, 0xff, //0x00003a6f jmp LBB13_16 + //0x00003a74 LBB13_21 + 0x4d, 0x89, 0xcf, //0x00003a74 movq %r9, %r15 + 0x49, 0x83, 0xff, 0x20, //0x00003a77 cmpq $32, %r15 + 0x0f, 0x82, 0xf1, 0x00, 0x00, 0x00, //0x00003a7b jb LBB13_34 + //0x00003a81 LBB13_22 + 0xc5, 0xfa, 0x6f, 0x06, //0x00003a81 vmovdqu (%rsi), %xmm0 + 0xc5, 0xfa, 0x6f, 0x4e, 0x10, //0x00003a85 vmovdqu $16(%rsi), %xmm1 + 0xc5, 0xf9, 0x6f, 0x15, 0x2e, 0xfd, 0xff, 0xff, //0x00003a8a vmovdqa $-722(%rip), %xmm2 /* LCPI13_0+0(%rip) */ + 0xc5, 0xf9, 0x74, 0xda, //0x00003a92 vpcmpeqb %xmm2, %xmm0, %xmm3 + 0xc5, 0xf9, 0xd7, 0xfb, //0x00003a96 vpmovmskb %xmm3, %edi + 0xc5, 0xf1, 0x74, 0xd2, //0x00003a9a vpcmpeqb %xmm2, %xmm1, %xmm2 + 0xc5, 0x79, 0xd7, 0xca, //0x00003a9e vpmovmskb %xmm2, %r9d + 0xc5, 0xf9, 0x6f, 0x15, 0x26, 0xfd, 0xff, 0xff, //0x00003aa2 vmovdqa $-730(%rip), %xmm2 /* LCPI13_1+0(%rip) */ + 0xc5, 0xf9, 0x74, 0xda, //0x00003aaa vpcmpeqb %xmm2, %xmm0, %xmm3 + 0xc5, 0xf9, 0xd7, 0xc3, //0x00003aae vpmovmskb %xmm3, %eax + 0xc5, 0xf1, 0x74, 0xd2, //0x00003ab2 vpcmpeqb %xmm2, %xmm1, %xmm2 + 0xc5, 0xf9, 0xd7, 0xca, //0x00003ab6 vpmovmskb %xmm2, %ecx + 0xc5, 0xf9, 0x6f, 0x15, 0x1e, 0xfd, 0xff, 0xff, //0x00003aba vmovdqa $-738(%rip), %xmm2 /* LCPI13_2+0(%rip) */ + 0xc5, 0xe9, 0x64, 0xd8, //0x00003ac2 vpcmpgtb %xmm0, %xmm2, %xmm3 + 0xc5, 0xd9, 0x76, 0xe4, //0x00003ac6 vpcmpeqd %xmm4, %xmm4, %xmm4 + 0xc5, 0xf9, 0x64, 0xc4, //0x00003aca vpcmpgtb %xmm4, %xmm0, %xmm0 + 0xc5, 0xf9, 0xdb, 0xc3, //0x00003ace vpand %xmm3, %xmm0, %xmm0 + 0xc5, 0x79, 0xd7, 0xc0, //0x00003ad2 vpmovmskb %xmm0, %r8d + 0xc5, 0xe9, 0x64, 0xc1, //0x00003ad6 vpcmpgtb %xmm1, %xmm2, %xmm0 + 0xc5, 0xf1, 0x64, 0xcc, //0x00003ada vpcmpgtb %xmm4, %xmm1, %xmm1 + 0xc5, 0xf1, 0xdb, 0xc0, //0x00003ade vpand %xmm0, %xmm1, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd8, //0x00003ae2 vpmovmskb %xmm0, %ebx + 0x49, 0xc1, 0xe1, 0x10, //0x00003ae6 shlq $16, %r9 + 0x48, 0xc1, 0xe1, 0x10, //0x00003aea shlq $16, %rcx + 0x48, 0x09, 0xc8, //0x00003aee orq %rcx, %rax + 0x49, 0x83, 0xfe, 0xff, //0x00003af1 cmpq $-1, %r14 + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00003af5 jne LBB13_24 + 0x48, 0x85, 0xc0, //0x00003afb testq %rax, %rax + 0x0f, 0x85, 0x64, 0x01, 0x00, 0x00, //0x00003afe jne LBB13_49 + //0x00003b04 LBB13_24 + 0x48, 0xc1, 0xe3, 0x10, //0x00003b04 shlq $16, %rbx + 0x49, 0x09, 0xf9, //0x00003b08 orq %rdi, %r9 + 0x48, 0x89, 0xc1, //0x00003b0b movq %rax, %rcx + 0x4c, 0x09, 0xe1, //0x00003b0e orq %r12, %rcx + 0x0f, 0x85, 0x06, 0x01, 0x00, 0x00, //0x00003b11 jne LBB13_47 + //0x00003b17 LBB13_25 + 0x4c, 0x09, 0xc3, //0x00003b17 orq %r8, %rbx + 0xb8, 0x40, 0x00, 0x00, 0x00, //0x00003b1a movl $64, %eax + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00003b1f movl $64, %ecx + 0x4d, 0x85, 0xc9, //0x00003b24 testq %r9, %r9 + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00003b27 je LBB13_27 + 0x49, 0x0f, 0xbc, 0xc9, //0x00003b2d bsfq %r9, %rcx + //0x00003b31 LBB13_27 + 0x48, 0x0f, 0xbc, 0xfb, //0x00003b31 bsfq %rbx, %rdi + 0x48, 0x85, 0xdb, //0x00003b35 testq %rbx, %rbx + 0x0f, 0x84, 0x03, 0x00, 0x00, 0x00, //0x00003b38 je LBB13_29 + 0x48, 0x89, 0xf8, //0x00003b3e movq %rdi, %rax + //0x00003b41 LBB13_29 + 0x4d, 0x85, 0xc9, //0x00003b41 testq %r9, %r9 + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00003b44 je LBB13_32 + 0x48, 0x2b, 0x75, 0xd0, //0x00003b4a subq $-48(%rbp), %rsi + 0x48, 0x39, 0xc8, //0x00003b4e cmpq %rcx, %rax + 0x0f, 0x82, 0xff, 0x00, 0x00, 0x00, //0x00003b51 jb LBB13_48 + 0x48, 0x8d, 0x44, 0x0e, 0x01, //0x00003b57 leaq $1(%rsi,%rcx), %rax + 0xe9, 0xbc, 0xfe, 0xff, 0xff, //0x00003b5c jmp LBB13_16 + //0x00003b61 LBB13_32 + 0x48, 0x85, 0xdb, //0x00003b61 testq %rbx, %rbx + 0x0f, 0x85, 0x14, 0x01, 0x00, 0x00, //0x00003b64 jne LBB13_50 + 0x48, 0x83, 0xc6, 0x20, //0x00003b6a addq $32, %rsi + 0x49, 0x83, 0xc7, 0xe0, //0x00003b6e addq $-32, %r15 + //0x00003b72 LBB13_34 + 0x4d, 0x85, 0xe4, //0x00003b72 testq %r12, %r12 + 0x0f, 0x85, 0x0f, 0x01, 0x00, 0x00, //0x00003b75 jne LBB13_51 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003b7b movq $-1, %rax + 0x4d, 0x85, 0xff, //0x00003b82 testq %r15, %r15 + 0x0f, 0x84, 0x92, 0xfe, 0xff, 0xff, //0x00003b85 je LBB13_16 + //0x00003b8b LBB13_36 + 0x0f, 0xb6, 0x0e, //0x00003b8b movzbl (%rsi), %ecx + 0x80, 0xf9, 0x22, //0x00003b8e cmpb $34, %cl + 0x0f, 0x84, 0x5e, 0x00, 0x00, 0x00, //0x00003b91 je LBB13_44 + 0x80, 0xf9, 0x5c, //0x00003b97 cmpb $92, %cl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00003b9a je LBB13_41 + 0x80, 0xf9, 0x1f, //0x00003ba0 cmpb $31, %cl + 0x0f, 0x86, 0x28, 0x01, 0x00, 0x00, //0x00003ba3 jbe LBB13_55 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003ba9 movq $-1, %rcx + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00003bb0 movl $1, %edi + //0x00003bb5 LBB13_40 + 0x48, 0x01, 0xfe, //0x00003bb5 addq %rdi, %rsi + 0x49, 0x01, 0xcf, //0x00003bb8 addq %rcx, %r15 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00003bbb jne LBB13_36 + 0xe9, 0x57, 0xfe, 0xff, 0xff, //0x00003bc1 jmp LBB13_16 + //0x00003bc6 LBB13_41 + 0x49, 0x83, 0xff, 0x01, //0x00003bc6 cmpq $1, %r15 + 0x0f, 0x84, 0x4d, 0xfe, 0xff, 0xff, //0x00003bca je LBB13_16 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003bd0 movq $-2, %rcx + 0xbf, 0x02, 0x00, 0x00, 0x00, //0x00003bd7 movl $2, %edi + 0x49, 0x83, 0xfe, 0xff, //0x00003bdc cmpq $-1, %r14 + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00003be0 jne LBB13_40 + 0x49, 0x89, 0xf6, //0x00003be6 movq %rsi, %r14 + 0x4c, 0x2b, 0x75, 0xd0, //0x00003be9 subq $-48(%rbp), %r14 + 0x4c, 0x89, 0x32, //0x00003bed movq %r14, (%rdx) + 0xe9, 0xc0, 0xff, 0xff, 0xff, //0x00003bf0 jmp LBB13_40 + //0x00003bf5 LBB13_44 + 0x48, 0x2b, 0x75, 0xd0, //0x00003bf5 subq $-48(%rbp), %rsi + 0x48, 0xff, 0xc6, //0x00003bf9 incq %rsi + 0x48, 0x89, 0xf0, //0x00003bfc movq %rsi, %rax + 0xe9, 0x19, 0xfe, 0xff, 0xff, //0x00003bff jmp LBB13_16 + //0x00003c04 LBB13_46 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003c04 movq $-1, %r14 + 0x45, 0x31, 0xe4, //0x00003c0b xorl %r12d, %r12d + 0x49, 0x83, 0xff, 0x20, //0x00003c0e cmpq $32, %r15 + 0x0f, 0x83, 0x69, 0xfe, 0xff, 0xff, //0x00003c12 jae LBB13_22 + 0xe9, 0x55, 0xff, 0xff, 0xff, //0x00003c18 jmp LBB13_34 + //0x00003c1d LBB13_47 + 0x44, 0x89, 0xe1, //0x00003c1d movl %r12d, %ecx + 0xf7, 0xd1, //0x00003c20 notl %ecx + 0x21, 0xc1, //0x00003c22 andl %eax, %ecx + 0x44, 0x8d, 0x14, 0x09, //0x00003c24 leal (%rcx,%rcx), %r10d + 0x45, 0x09, 0xe2, //0x00003c28 orl %r12d, %r10d + 0x44, 0x89, 0xd7, //0x00003c2b movl %r10d, %edi + 0xf7, 0xd7, //0x00003c2e notl %edi + 0x21, 0xc7, //0x00003c30 andl %eax, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003c32 andl $-1431655766, %edi + 0x45, 0x31, 0xe4, //0x00003c38 xorl %r12d, %r12d + 0x01, 0xcf, //0x00003c3b addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc4, //0x00003c3d setb %r12b + 0x01, 0xff, //0x00003c41 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00003c43 xorl $1431655765, %edi + 0x44, 0x21, 0xd7, //0x00003c49 andl %r10d, %edi + 0xf7, 0xd7, //0x00003c4c notl %edi + 0x41, 0x21, 0xf9, //0x00003c4e andl %edi, %r9d + 0xe9, 0xc1, 0xfe, 0xff, 0xff, //0x00003c51 jmp LBB13_25 + //0x00003c56 LBB13_48 + 0x48, 0x01, 0xf0, //0x00003c56 addq %rsi, %rax + 0x48, 0x89, 0x02, //0x00003c59 movq %rax, (%rdx) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c5c movq $-2, %rax + 0xe9, 0xb5, 0xfd, 0xff, 0xff, //0x00003c63 jmp LBB13_16 + //0x00003c68 LBB13_49 + 0x48, 0x89, 0xf1, //0x00003c68 movq %rsi, %rcx + 0x48, 0x2b, 0x4d, 0xd0, //0x00003c6b subq $-48(%rbp), %rcx + 0x4c, 0x0f, 0xbc, 0xf0, //0x00003c6f bsfq %rax, %r14 + 0x49, 0x01, 0xce, //0x00003c73 addq %rcx, %r14 + 0x4c, 0x89, 0x32, //0x00003c76 movq %r14, (%rdx) + 0xe9, 0x86, 0xfe, 0xff, 0xff, //0x00003c79 jmp LBB13_24 + //0x00003c7e LBB13_50 + 0x48, 0x2b, 0x75, 0xd0, //0x00003c7e subq $-48(%rbp), %rsi + 0x48, 0x01, 0xfe, //0x00003c82 addq %rdi, %rsi + 0xe9, 0x4b, 0x00, 0x00, 0x00, //0x00003c85 jmp LBB13_56 + //0x00003c8a LBB13_51 + 0x4d, 0x85, 0xff, //0x00003c8a testq %r15, %r15 + 0x0f, 0x84, 0x32, 0x00, 0x00, 0x00, //0x00003c8d je LBB13_45 + 0x49, 0x83, 0xfe, 0xff, //0x00003c93 cmpq $-1, %r14 + 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x00003c97 jne LBB13_54 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003c9d movq $-48(%rbp), %r14 + 0x49, 0xf7, 0xd6, //0x00003ca1 notq %r14 + 0x49, 0x01, 0xf6, //0x00003ca4 addq %rsi, %r14 + 0x4c, 0x89, 0x32, //0x00003ca7 movq %r14, (%rdx) + //0x00003caa LBB13_54 + 0x48, 0xff, 0xc6, //0x00003caa incq %rsi + 0x49, 0xff, 0xcf, //0x00003cad decq %r15 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003cb0 movq $-1, %rax + 0x4d, 0x85, 0xff, //0x00003cb7 testq %r15, %r15 + 0x0f, 0x85, 0xcb, 0xfe, 0xff, 0xff, //0x00003cba jne LBB13_36 + 0xe9, 0x58, 0xfd, 0xff, 0xff, //0x00003cc0 jmp LBB13_16 + //0x00003cc5 LBB13_45 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003cc5 movq $-1, %rax + 0xe9, 0x4c, 0xfd, 0xff, 0xff, //0x00003ccc jmp LBB13_16 + //0x00003cd1 LBB13_55 + 0x48, 0x2b, 0x75, 0xd0, //0x00003cd1 subq $-48(%rbp), %rsi + //0x00003cd5 LBB13_56 + 0x48, 0x89, 0x32, //0x00003cd5 movq %rsi, (%rdx) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003cd8 movq $-2, %rax + 0xe9, 0x39, 0xfd, 0xff, 0xff, //0x00003cdf jmp LBB13_16 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00003ce4 .p2align 4, 0x00 + //0x00003cf0 LCPI14_0 + 0x00, 0x00, 0x30, 0x43, //0x00003cf0 .long 1127219200 + 0x00, 0x00, 0x30, 0x45, //0x00003cf4 .long 1160773632 + 0x00, 0x00, 0x00, 0x00, //0x00003cf8 .long 0 + 0x00, 0x00, 0x00, 0x00, //0x00003cfc .long 0 + //0x00003d00 LCPI14_1 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x43, //0x00003d00 .quad 4841369599423283200 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x45, //0x00003d08 .quad 4985484787499139072 + //0x00003d10 .p2align 3, 0x00 + //0x00003d10 LCPI14_2 + 0x00, 0x00, 0x34, 0x26, 0xf5, 0x6b, 0x0c, 0x43, //0x00003d10 .quad 4831355200913801216 + //0x00003d18 LCPI14_3 + 0x00, 0x00, 0x34, 0x26, 0xf5, 0x6b, 0x0c, 0xc3, //0x00003d18 .quad -4392016835940974592 + //0x00003d20 .p2align 4, 0x90 + //0x00003d20 _vnumber + 0x55, //0x00003d20 pushq %rbp + 0x48, 0x89, 0xe5, //0x00003d21 movq %rsp, %rbp + 0x41, 0x57, //0x00003d24 pushq %r15 + 0x41, 0x56, //0x00003d26 pushq %r14 + 0x41, 0x55, //0x00003d28 pushq %r13 + 0x41, 0x54, //0x00003d2a pushq %r12 + 0x53, //0x00003d2c pushq %rbx + 0x48, 0x83, 0xec, 0x38, //0x00003d2d subq $56, %rsp + 0x48, 0x89, 0xd3, //0x00003d31 movq %rdx, %rbx + 0x49, 0x89, 0xf6, //0x00003d34 movq %rsi, %r14 + 0x48, 0xc7, 0x45, 0xd0, 0x00, 0x00, 0x00, 0x00, //0x00003d37 movq $0, $-48(%rbp) + 0x48, 0x8b, 0x06, //0x00003d3f movq (%rsi), %rax + 0x4c, 0x8b, 0x3f, //0x00003d42 movq (%rdi), %r15 + 0x4c, 0x8b, 0x6f, 0x08, //0x00003d45 movq $8(%rdi), %r13 + 0x4c, 0x8b, 0x52, 0x20, //0x00003d49 movq $32(%rdx), %r10 + 0x4c, 0x8b, 0x5a, 0x28, //0x00003d4d movq $40(%rdx), %r11 + 0x48, 0xc7, 0x02, 0x09, 0x00, 0x00, 0x00, //0x00003d51 movq $9, (%rdx) + 0xc5, 0xf9, 0x57, 0xc0, //0x00003d58 vxorpd %xmm0, %xmm0, %xmm0 + 0xc5, 0xf9, 0x11, 0x42, 0x08, //0x00003d5c vmovupd %xmm0, $8(%rdx) + 0x48, 0x8b, 0x0e, //0x00003d61 movq (%rsi), %rcx + 0x48, 0x89, 0x4a, 0x18, //0x00003d64 movq %rcx, $24(%rdx) + 0x4c, 0x39, 0xe8, //0x00003d68 cmpq %r13, %rax + 0x0f, 0x83, 0xc8, 0x02, 0x00, 0x00, //0x00003d6b jae LBB14_52 + 0x41, 0x8a, 0x3c, 0x07, //0x00003d71 movb (%r15,%rax), %dil + 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00003d75 movl $1, %r9d + 0x40, 0x80, 0xff, 0x2d, //0x00003d7b cmpb $45, %dil + 0x0f, 0x85, 0x16, 0x00, 0x00, 0x00, //0x00003d7f jne LBB14_4 + 0x48, 0xff, 0xc0, //0x00003d85 incq %rax + 0x4c, 0x39, 0xe8, //0x00003d88 cmpq %r13, %rax + 0x0f, 0x83, 0xa8, 0x02, 0x00, 0x00, //0x00003d8b jae LBB14_52 + 0x41, 0x8a, 0x3c, 0x07, //0x00003d91 movb (%r15,%rax), %dil + 0x41, 0xb9, 0xff, 0xff, 0xff, 0xff, //0x00003d95 movl $-1, %r9d + //0x00003d9b LBB14_4 + 0x8d, 0x4f, 0xd0, //0x00003d9b leal $-48(%rdi), %ecx + 0x80, 0xf9, 0x0a, //0x00003d9e cmpb $10, %cl + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x00003da1 jb LBB14_6 + //0x00003da7 LBB14_5 + 0x49, 0x89, 0x06, //0x00003da7 movq %rax, (%r14) + 0x48, 0xc7, 0x03, 0xfe, 0xff, 0xff, 0xff, //0x00003daa movq $-2, (%rbx) + 0xe9, 0x8d, 0x02, 0x00, 0x00, //0x00003db1 jmp LBB14_53 + //0x00003db6 LBB14_6 + 0x40, 0x80, 0xff, 0x30, //0x00003db6 cmpb $48, %dil + 0x0f, 0x85, 0x35, 0x00, 0x00, 0x00, //0x00003dba jne LBB14_10 + 0x48, 0x8d, 0x70, 0x01, //0x00003dc0 leaq $1(%rax), %rsi + 0x4c, 0x39, 0xe8, //0x00003dc4 cmpq %r13, %rax + 0x0f, 0x83, 0xa4, 0x00, 0x00, 0x00, //0x00003dc7 jae LBB14_19 + 0x41, 0x8a, 0x14, 0x37, //0x00003dcd movb (%r15,%rsi), %dl + 0x80, 0xc2, 0xd2, //0x00003dd1 addb $-46, %dl + 0x80, 0xfa, 0x37, //0x00003dd4 cmpb $55, %dl + 0x0f, 0x87, 0x94, 0x00, 0x00, 0x00, //0x00003dd7 ja LBB14_19 + 0x44, 0x0f, 0xb6, 0xc2, //0x00003ddd movzbl %dl, %r8d + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00003de1 movabsq $36028797027352577, %rdx + 0x4c, 0x0f, 0xa3, 0xc2, //0x00003deb btq %r8, %rdx + 0x0f, 0x83, 0x7c, 0x00, 0x00, 0x00, //0x00003def jae LBB14_19 + //0x00003df5 LBB14_10 + 0x4c, 0x39, 0xe8, //0x00003df5 cmpq %r13, %rax + 0x0f, 0x83, 0x67, 0x00, 0x00, 0x00, //0x00003df8 jae LBB14_18 + 0x80, 0xf9, 0x09, //0x00003dfe cmpb $9, %cl + 0x0f, 0x87, 0x72, 0x00, 0x00, 0x00, //0x00003e01 ja LBB14_20 + 0x4d, 0x8d, 0x45, 0xff, //0x00003e07 leaq $-1(%r13), %r8 + 0x31, 0xc9, //0x00003e0b xorl %ecx, %ecx + 0x31, 0xf6, //0x00003e0d xorl %esi, %esi + 0x45, 0x31, 0xe4, //0x00003e0f xorl %r12d, %r12d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003e12 .p2align 4, 0x90 + //0x00003e20 LBB14_13 + 0x83, 0xfe, 0x12, //0x00003e20 cmpl $18, %esi + 0x0f, 0x8f, 0x17, 0x00, 0x00, 0x00, //0x00003e23 jg LBB14_15 + 0x48, 0x0f, 0xbe, 0xff, //0x00003e29 movsbq %dil, %rdi + 0x4b, 0x8d, 0x14, 0xa4, //0x00003e2d leaq (%r12,%r12,4), %rdx + 0x4c, 0x8d, 0x64, 0x57, 0xd0, //0x00003e31 leaq $-48(%rdi,%rdx,2), %r12 + 0xff, 0xc6, //0x00003e36 incl %esi + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00003e38 jmp LBB14_16 + 0x90, 0x90, 0x90, //0x00003e3d .p2align 4, 0x90 + //0x00003e40 LBB14_15 + 0xff, 0xc1, //0x00003e40 incl %ecx + //0x00003e42 LBB14_16 + 0x49, 0x39, 0xc0, //0x00003e42 cmpq %rax, %r8 + 0x0f, 0x84, 0x7d, 0x00, 0x00, 0x00, //0x00003e45 je LBB14_24 + 0x41, 0x0f, 0xb6, 0x7c, 0x07, 0x01, //0x00003e4b movzbl $1(%r15,%rax), %edi + 0x48, 0xff, 0xc0, //0x00003e51 incq %rax + 0x8d, 0x57, 0xd0, //0x00003e54 leal $-48(%rdi), %edx + 0x80, 0xfa, 0x0a, //0x00003e57 cmpb $10, %dl + 0x0f, 0x82, 0xc0, 0xff, 0xff, 0xff, //0x00003e5a jb LBB14_13 + 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x00003e60 jmp LBB14_21 + //0x00003e65 LBB14_18 + 0x31, 0xc9, //0x00003e65 xorl %ecx, %ecx + 0x31, 0xf6, //0x00003e67 xorl %esi, %esi + 0x45, 0x31, 0xe4, //0x00003e69 xorl %r12d, %r12d + 0xe9, 0x5a, 0x00, 0x00, 0x00, //0x00003e6c jmp LBB14_25 + //0x00003e71 LBB14_19 + 0x49, 0x89, 0x36, //0x00003e71 movq %rsi, (%r14) + 0xe9, 0xca, 0x01, 0x00, 0x00, //0x00003e74 jmp LBB14_53 + //0x00003e79 LBB14_20 + 0x45, 0x31, 0xe4, //0x00003e79 xorl %r12d, %r12d + 0x31, 0xf6, //0x00003e7c xorl %esi, %esi + 0x31, 0xc9, //0x00003e7e xorl %ecx, %ecx + //0x00003e80 LBB14_21 + 0x31, 0xd2, //0x00003e80 xorl %edx, %edx + 0x85, 0xc9, //0x00003e82 testl %ecx, %ecx + 0x0f, 0x9f, 0xc2, //0x00003e84 setg %dl + 0x89, 0x55, 0xcc, //0x00003e87 movl %edx, $-52(%rbp) + 0x41, 0xb8, 0x09, 0x00, 0x00, 0x00, //0x00003e8a movl $9, %r8d + 0x40, 0x80, 0xff, 0x2e, //0x00003e90 cmpb $46, %dil + 0x0f, 0x85, 0x41, 0x00, 0x00, 0x00, //0x00003e94 jne LBB14_26 + 0x48, 0xff, 0xc0, //0x00003e9a incq %rax + 0x48, 0xc7, 0x03, 0x08, 0x00, 0x00, 0x00, //0x00003e9d movq $8, (%rbx) + 0x4c, 0x39, 0xe8, //0x00003ea4 cmpq %r13, %rax + 0x0f, 0x83, 0x8c, 0x01, 0x00, 0x00, //0x00003ea7 jae LBB14_52 + 0x41, 0x8a, 0x14, 0x07, //0x00003ead movb (%r15,%rax), %dl + 0x80, 0xc2, 0xd0, //0x00003eb1 addb $-48, %dl + 0x41, 0xb8, 0x08, 0x00, 0x00, 0x00, //0x00003eb4 movl $8, %r8d + 0x80, 0xfa, 0x0a, //0x00003eba cmpb $10, %dl + 0x0f, 0x83, 0xe4, 0xfe, 0xff, 0xff, //0x00003ebd jae LBB14_5 + 0xe9, 0x13, 0x00, 0x00, 0x00, //0x00003ec3 jmp LBB14_26 + //0x00003ec8 LBB14_24 + 0x4c, 0x89, 0xe8, //0x00003ec8 movq %r13, %rax + //0x00003ecb LBB14_25 + 0x31, 0xd2, //0x00003ecb xorl %edx, %edx + 0x85, 0xc9, //0x00003ecd testl %ecx, %ecx + 0x0f, 0x9f, 0xc2, //0x00003ecf setg %dl + 0x89, 0x55, 0xcc, //0x00003ed2 movl %edx, $-52(%rbp) + 0x41, 0xb8, 0x09, 0x00, 0x00, 0x00, //0x00003ed5 movl $9, %r8d + //0x00003edb LBB14_26 + 0x85, 0xc9, //0x00003edb testl %ecx, %ecx + 0x0f, 0x85, 0x4f, 0x00, 0x00, 0x00, //0x00003edd jne LBB14_35 + 0x4d, 0x85, 0xe4, //0x00003ee3 testq %r12, %r12 + 0x0f, 0x85, 0x46, 0x00, 0x00, 0x00, //0x00003ee6 jne LBB14_35 + 0x4c, 0x39, 0xe8, //0x00003eec cmpq %r13, %rax + 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00003eef jae LBB14_33 + 0x89, 0xc7, //0x00003ef5 movl %eax, %edi + 0x44, 0x29, 0xef, //0x00003ef7 subl %r13d, %edi + 0x31, 0xf6, //0x00003efa xorl %esi, %esi + 0x31, 0xc9, //0x00003efc xorl %ecx, %ecx + 0x90, 0x90, //0x00003efe .p2align 4, 0x90 + //0x00003f00 LBB14_30 + 0x41, 0x80, 0x3c, 0x07, 0x30, //0x00003f00 cmpb $48, (%r15,%rax) + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003f05 jne LBB14_34 + 0x48, 0xff, 0xc0, //0x00003f0b incq %rax + 0xff, 0xc9, //0x00003f0e decl %ecx + 0x49, 0x39, 0xc5, //0x00003f10 cmpq %rax, %r13 + 0x0f, 0x85, 0xe7, 0xff, 0xff, 0xff, //0x00003f13 jne LBB14_30 + 0x45, 0x31, 0xe4, //0x00003f19 xorl %r12d, %r12d + 0x41, 0x83, 0xf8, 0x09, //0x00003f1c cmpl $9, %r8d + 0x0f, 0x84, 0x3b, 0x01, 0x00, 0x00, //0x00003f20 je LBB14_55 + 0xe9, 0x6a, 0x01, 0x00, 0x00, //0x00003f26 jmp LBB14_59 + //0x00003f2b LBB14_33 + 0x31, 0xc9, //0x00003f2b xorl %ecx, %ecx + 0x31, 0xf6, //0x00003f2d xorl %esi, %esi + //0x00003f2f LBB14_34 + 0x45, 0x31, 0xe4, //0x00003f2f xorl %r12d, %r12d + //0x00003f32 LBB14_35 + 0x4c, 0x39, 0xe8, //0x00003f32 cmpq %r13, %rax + 0x0f, 0x83, 0x4b, 0x00, 0x00, 0x00, //0x00003f35 jae LBB14_40 + 0x83, 0xfe, 0x12, //0x00003f3b cmpl $18, %esi + 0x0f, 0x8f, 0x42, 0x00, 0x00, 0x00, //0x00003f3e jg LBB14_40 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003f44 .p2align 4, 0x90 + //0x00003f50 LBB14_37 + 0x41, 0x0f, 0xb6, 0x3c, 0x07, //0x00003f50 movzbl (%r15,%rax), %edi + 0x8d, 0x57, 0xd0, //0x00003f55 leal $-48(%rdi), %edx + 0x80, 0xfa, 0x09, //0x00003f58 cmpb $9, %dl + 0x0f, 0x87, 0x25, 0x00, 0x00, 0x00, //0x00003f5b ja LBB14_40 + 0x4b, 0x8d, 0x14, 0xa4, //0x00003f61 leaq (%r12,%r12,4), %rdx + 0x4c, 0x8d, 0x64, 0x57, 0xd0, //0x00003f65 leaq $-48(%rdi,%rdx,2), %r12 + 0xff, 0xc9, //0x00003f6a decl %ecx + 0x48, 0xff, 0xc0, //0x00003f6c incq %rax + 0x4c, 0x39, 0xe8, //0x00003f6f cmpq %r13, %rax + 0x0f, 0x83, 0x0e, 0x00, 0x00, 0x00, //0x00003f72 jae LBB14_40 + 0x8d, 0x56, 0x01, //0x00003f78 leal $1(%rsi), %edx + 0x83, 0xfe, 0x12, //0x00003f7b cmpl $18, %esi + 0x89, 0xd6, //0x00003f7e movl %edx, %esi + 0x0f, 0x8c, 0xca, 0xff, 0xff, 0xff, //0x00003f80 jl LBB14_37 + //0x00003f86 LBB14_40 + 0x4c, 0x39, 0xe8, //0x00003f86 cmpq %r13, %rax + 0x0f, 0x83, 0xc3, 0x00, 0x00, 0x00, //0x00003f89 jae LBB14_54 + 0x41, 0x8a, 0x34, 0x07, //0x00003f8f movb (%r15,%rax), %sil + 0x8d, 0x56, 0xd0, //0x00003f93 leal $-48(%rsi), %edx + 0x80, 0xfa, 0x09, //0x00003f96 cmpb $9, %dl + 0x0f, 0x87, 0x36, 0x00, 0x00, 0x00, //0x00003f99 ja LBB14_46 + 0x49, 0x8d, 0x7d, 0xff, //0x00003f9f leaq $-1(%r13), %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003fa3 .p2align 4, 0x90 + //0x00003fb0 LBB14_43 + 0x48, 0x39, 0xc7, //0x00003fb0 cmpq %rax, %rdi + 0x0f, 0x84, 0x40, 0x02, 0x00, 0x00, //0x00003fb3 je LBB14_76 + 0x41, 0x0f, 0xb6, 0x74, 0x07, 0x01, //0x00003fb9 movzbl $1(%r15,%rax), %esi + 0x48, 0xff, 0xc0, //0x00003fbf incq %rax + 0x8d, 0x56, 0xd0, //0x00003fc2 leal $-48(%rsi), %edx + 0x80, 0xfa, 0x09, //0x00003fc5 cmpb $9, %dl + 0x0f, 0x86, 0xe2, 0xff, 0xff, 0xff, //0x00003fc8 jbe LBB14_43 + 0xc7, 0x45, 0xcc, 0x01, 0x00, 0x00, 0x00, //0x00003fce movl $1, $-52(%rbp) + //0x00003fd5 LBB14_46 + 0x40, 0x80, 0xce, 0x20, //0x00003fd5 orb $32, %sil + 0x40, 0x80, 0xfe, 0x65, //0x00003fd9 cmpb $101, %sil + 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x00003fdd jne LBB14_54 + 0x48, 0x8d, 0x78, 0x01, //0x00003fe3 leaq $1(%rax), %rdi + 0x48, 0xc7, 0x03, 0x08, 0x00, 0x00, 0x00, //0x00003fe7 movq $8, (%rbx) + 0x4c, 0x39, 0xef, //0x00003fee cmpq %r13, %rdi + 0x0f, 0x83, 0x42, 0x00, 0x00, 0x00, //0x00003ff1 jae LBB14_52 + 0x41, 0x8a, 0x34, 0x3f, //0x00003ff7 movb (%r15,%rdi), %sil + 0x40, 0x80, 0xfe, 0x2d, //0x00003ffb cmpb $45, %sil + 0x0f, 0x84, 0x10, 0x00, 0x00, 0x00, //0x00003fff je LBB14_50 + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00004005 movl $1, %r8d + 0x40, 0x80, 0xfe, 0x2b, //0x0000400b cmpb $43, %sil + 0x0f, 0x85, 0x94, 0x02, 0x00, 0x00, //0x0000400f jne LBB14_85 + //0x00004015 LBB14_50 + 0x48, 0x83, 0xc0, 0x02, //0x00004015 addq $2, %rax + 0x4c, 0x39, 0xe8, //0x00004019 cmpq %r13, %rax + 0x0f, 0x83, 0x17, 0x00, 0x00, 0x00, //0x0000401c jae LBB14_52 + 0x31, 0xd2, //0x00004022 xorl %edx, %edx + 0x40, 0x80, 0xfe, 0x2b, //0x00004024 cmpb $43, %sil + 0x0f, 0x94, 0xc2, //0x00004028 sete %dl + 0x44, 0x8d, 0x44, 0x12, 0xff, //0x0000402b leal $-1(%rdx,%rdx), %r8d + 0x41, 0x8a, 0x34, 0x07, //0x00004030 movb (%r15,%rax), %sil + 0xe9, 0x73, 0x02, 0x00, 0x00, //0x00004034 jmp LBB14_86 + //0x00004039 LBB14_52 + 0x4d, 0x89, 0x2e, //0x00004039 movq %r13, (%r14) + 0x48, 0xc7, 0x03, 0xff, 0xff, 0xff, 0xff, //0x0000403c movq $-1, (%rbx) + //0x00004043 LBB14_53 + 0x48, 0x83, 0xc4, 0x38, //0x00004043 addq $56, %rsp + 0x5b, //0x00004047 popq %rbx + 0x41, 0x5c, //0x00004048 popq %r12 + 0x41, 0x5d, //0x0000404a popq %r13 + 0x41, 0x5e, //0x0000404c popq %r14 + 0x41, 0x5f, //0x0000404e popq %r15 + 0x5d, //0x00004050 popq %rbp + 0xc3, //0x00004051 retq + //0x00004052 LBB14_54 + 0x89, 0xcf, //0x00004052 movl %ecx, %edi + 0x49, 0x89, 0xc5, //0x00004054 movq %rax, %r13 + 0x41, 0x83, 0xf8, 0x09, //0x00004057 cmpl $9, %r8d + 0x0f, 0x85, 0x34, 0x00, 0x00, 0x00, //0x0000405b jne LBB14_59 + //0x00004061 LBB14_55 + 0x85, 0xff, //0x00004061 testl %edi, %edi + 0x0f, 0x85, 0x25, 0x00, 0x00, 0x00, //0x00004063 jne LBB14_58 + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x00004069 movabsq $-9223372036854775808, %rax + 0x49, 0x63, 0xc9, //0x00004073 movslq %r9d, %rcx + 0x4d, 0x85, 0xe4, //0x00004076 testq %r12, %r12 + 0x0f, 0x89, 0xba, 0x01, 0x00, 0x00, //0x00004079 jns LBB14_80 + 0x4c, 0x89, 0xe2, //0x0000407f movq %r12, %rdx + 0x48, 0x21, 0xca, //0x00004082 andq %rcx, %rdx + 0x48, 0x39, 0xc2, //0x00004085 cmpq %rax, %rdx + 0x0f, 0x84, 0xab, 0x01, 0x00, 0x00, //0x00004088 je LBB14_80 + //0x0000408e LBB14_58 + 0x48, 0xc7, 0x03, 0x08, 0x00, 0x00, 0x00, //0x0000408e movq $8, (%rbx) + //0x00004095 LBB14_59 + 0x48, 0xc7, 0x45, 0xc0, 0x00, 0x00, 0x00, 0x00, //0x00004095 movq $0, $-64(%rbp) + 0xc4, 0xc1, 0xf9, 0x6e, 0xc4, //0x0000409d vmovq %r12, %xmm0 + 0xc5, 0xf9, 0x62, 0x05, 0x46, 0xfc, 0xff, 0xff, //0x000040a2 vpunpckldq $-954(%rip), %xmm0, %xmm0 /* LCPI14_0+0(%rip) */ + 0xc5, 0xf9, 0x5c, 0x05, 0x4e, 0xfc, 0xff, 0xff, //0x000040aa vsubpd $-946(%rip), %xmm0, %xmm0 /* LCPI14_1+0(%rip) */ + 0xc4, 0xe3, 0x79, 0x05, 0xc8, 0x01, //0x000040b2 vpermilpd $1, %xmm0, %xmm1 + 0xc5, 0xf3, 0x58, 0xc0, //0x000040b8 vaddsd %xmm0, %xmm1, %xmm0 + 0xc5, 0xfb, 0x11, 0x45, 0xd0, //0x000040bc vmovsd %xmm0, $-48(%rbp) + 0x4c, 0x89, 0xe0, //0x000040c1 movq %r12, %rax + 0x48, 0xc1, 0xe8, 0x34, //0x000040c4 shrq $52, %rax + 0x0f, 0x84, 0xc8, 0x00, 0x00, 0x00, //0x000040c8 je LBB14_71 + //0x000040ce LBB14_60 + 0x4c, 0x89, 0x5d, 0xb0, //0x000040ce movq %r11, $-80(%rbp) + 0x4c, 0x89, 0x55, 0xa8, //0x000040d2 movq %r10, $-88(%rbp) + 0x48, 0x8d, 0x4d, 0xd0, //0x000040d6 leaq $-48(%rbp), %rcx + 0x48, 0x89, 0xfe, //0x000040da movq %rdi, %rsi + 0x4c, 0x89, 0xe7, //0x000040dd movq %r12, %rdi + 0x48, 0x89, 0x75, 0xb8, //0x000040e0 movq %rsi, $-72(%rbp) + 0x44, 0x89, 0xca, //0x000040e4 movl %r9d, %edx + 0x44, 0x89, 0x4d, 0xc8, //0x000040e7 movl %r9d, $-56(%rbp) + 0xe8, 0xc0, 0xe6, 0xff, 0xff, //0x000040eb callq _atof_eisel_lemire64 + 0x84, 0xc0, //0x000040f0 testb %al, %al + 0x0f, 0x84, 0x42, 0x00, 0x00, 0x00, //0x000040f2 je LBB14_64 + 0x48, 0x8b, 0x75, 0xb8, //0x000040f8 movq $-72(%rbp), %rsi + 0x8b, 0x55, 0xc8, //0x000040fc movl $-56(%rbp), %edx + 0x83, 0x7d, 0xcc, 0x00, //0x000040ff cmpl $0, $-52(%rbp) + 0x0f, 0x84, 0x27, 0x01, 0x00, 0x00, //0x00004103 je LBB14_79 + 0x49, 0xff, 0xc4, //0x00004109 incq %r12 + 0x48, 0x8d, 0x4d, 0xc0, //0x0000410c leaq $-64(%rbp), %rcx + 0x4c, 0x89, 0xe7, //0x00004110 movq %r12, %rdi + 0xe8, 0x98, 0xe6, 0xff, 0xff, //0x00004113 callq _atof_eisel_lemire64 + 0x84, 0xc0, //0x00004118 testb %al, %al + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x0000411a je LBB14_64 + 0xc5, 0xfb, 0x10, 0x4d, 0xc0, //0x00004120 vmovsd $-64(%rbp), %xmm1 + 0xc5, 0xfb, 0x10, 0x45, 0xd0, //0x00004125 vmovsd $-48(%rbp), %xmm0 + 0xc5, 0xf9, 0x2e, 0xc8, //0x0000412a vucomisd %xmm0, %xmm1 + 0x0f, 0x85, 0x06, 0x00, 0x00, 0x00, //0x0000412e jne LBB14_64 + 0x0f, 0x8b, 0x21, 0x00, 0x00, 0x00, //0x00004134 jnp LBB14_66 + //0x0000413a LBB14_64 + 0x49, 0x8b, 0x06, //0x0000413a movq (%r14), %rax + 0x49, 0x01, 0xc7, //0x0000413d addq %rax, %r15 + 0x4c, 0x89, 0xee, //0x00004140 movq %r13, %rsi + 0x48, 0x29, 0xc6, //0x00004143 subq %rax, %rsi + 0x4c, 0x89, 0xff, //0x00004146 movq %r15, %rdi + 0x48, 0x8b, 0x55, 0xa8, //0x00004149 movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x4d, 0xb0, //0x0000414d movq $-80(%rbp), %rcx + 0xe8, 0x6a, 0xec, 0xff, 0xff, //0x00004151 callq _atof_native + //0x00004156 LBB14_65 + 0xc5, 0xfb, 0x11, 0x45, 0xd0, //0x00004156 vmovsd %xmm0, $-48(%rbp) + //0x0000415b LBB14_66 + 0xc4, 0xe1, 0xf9, 0x7e, 0xc0, //0x0000415b vmovq %xmm0, %rax + //0x00004160 LBB14_67 + 0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x00004160 movabsq $-9223372036854775808, %rcx + 0x48, 0xff, 0xc9, //0x0000416a decq %rcx + 0x48, 0x21, 0xc1, //0x0000416d andq %rax, %rcx + 0x48, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, //0x00004170 movabsq $9218868437227405312, %rdx + 0x48, 0x39, 0xd1, //0x0000417a cmpq %rdx, %rcx + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x0000417d jne LBB14_69 + 0x48, 0xc7, 0x03, 0xf8, 0xff, 0xff, 0xff, //0x00004183 movq $-8, (%rbx) + //0x0000418a LBB14_69 + 0x48, 0x89, 0x43, 0x08, //0x0000418a movq %rax, $8(%rbx) + //0x0000418e LBB14_70 + 0x4d, 0x89, 0x2e, //0x0000418e movq %r13, (%r14) + 0xe9, 0xad, 0xfe, 0xff, 0xff, //0x00004191 jmp LBB14_53 + //0x00004196 LBB14_71 + 0xc4, 0xe1, 0xf9, 0x7e, 0xc1, //0x00004196 vmovq %xmm0, %rcx + 0x44, 0x89, 0xc8, //0x0000419b movl %r9d, %eax + 0xc1, 0xe8, 0x1f, //0x0000419e shrl $31, %eax + 0x48, 0xc1, 0xe0, 0x3f, //0x000041a1 shlq $63, %rax + 0x48, 0x09, 0xc8, //0x000041a5 orq %rcx, %rax + 0x48, 0x89, 0x45, 0xd0, //0x000041a8 movq %rax, $-48(%rbp) + 0x4d, 0x85, 0xe4, //0x000041ac testq %r12, %r12 + 0x0f, 0x84, 0xab, 0xff, 0xff, 0xff, //0x000041af je LBB14_67 + 0x85, 0xff, //0x000041b5 testl %edi, %edi + 0x0f, 0x84, 0xa3, 0xff, 0xff, 0xff, //0x000041b7 je LBB14_67 + 0xc4, 0xe1, 0xf9, 0x6e, 0xc0, //0x000041bd vmovq %rax, %xmm0 + 0x8d, 0x47, 0xff, //0x000041c2 leal $-1(%rdi), %eax + 0x83, 0xf8, 0x24, //0x000041c5 cmpl $36, %eax + 0x0f, 0x87, 0x43, 0x00, 0x00, 0x00, //0x000041c8 ja LBB14_77 + 0x83, 0xff, 0x17, //0x000041ce cmpl $23, %edi + 0x0f, 0x8c, 0x9d, 0x00, 0x00, 0x00, //0x000041d1 jl LBB14_81 + 0x48, 0x63, 0xc7, //0x000041d7 movslq %edi, %rax + 0x48, 0x8d, 0x0d, 0x6f, 0xef, 0x00, 0x00, //0x000041da leaq $61295(%rip), %rcx /* _P10_TAB+0(%rip) */ + 0xc5, 0xfb, 0x59, 0x84, 0xc1, 0x50, 0xff, 0xff, 0xff, //0x000041e1 vmulsd $-176(%rcx,%rax,8), %xmm0, %xmm0 + 0xc5, 0xfb, 0x11, 0x45, 0xd0, //0x000041ea vmovsd %xmm0, $-48(%rbp) + 0xb8, 0x16, 0x00, 0x00, 0x00, //0x000041ef movl $22, %eax + 0xe9, 0x7d, 0x00, 0x00, 0x00, //0x000041f4 jmp LBB14_82 + //0x000041f9 LBB14_76 + 0xc7, 0x45, 0xcc, 0x01, 0x00, 0x00, 0x00, //0x000041f9 movl $1, $-52(%rbp) + 0x89, 0xcf, //0x00004200 movl %ecx, %edi + 0x41, 0x83, 0xf8, 0x09, //0x00004202 cmpl $9, %r8d + 0x0f, 0x84, 0x55, 0xfe, 0xff, 0xff, //0x00004206 je LBB14_55 + 0xe9, 0x84, 0xfe, 0xff, 0xff, //0x0000420c jmp LBB14_59 + //0x00004211 LBB14_77 + 0x83, 0xff, 0xea, //0x00004211 cmpl $-22, %edi + 0x0f, 0x82, 0xb4, 0xfe, 0xff, 0xff, //0x00004214 jb LBB14_60 + 0xf7, 0xdf, //0x0000421a negl %edi + 0x48, 0x63, 0xc7, //0x0000421c movslq %edi, %rax + 0x48, 0x8d, 0x0d, 0x2a, 0xef, 0x00, 0x00, //0x0000421f leaq $61226(%rip), %rcx /* _P10_TAB+0(%rip) */ + 0xc5, 0xfb, 0x5e, 0x04, 0xc1, //0x00004226 vdivsd (%rcx,%rax,8), %xmm0, %xmm0 + 0xe9, 0x26, 0xff, 0xff, 0xff, //0x0000422b jmp LBB14_65 + //0x00004230 LBB14_79 + 0x48, 0x8b, 0x45, 0xd0, //0x00004230 movq $-48(%rbp), %rax + 0xe9, 0x27, 0xff, 0xff, 0xff, //0x00004234 jmp LBB14_67 + //0x00004239 LBB14_80 + 0xc4, 0xc1, 0xf9, 0x6e, 0xc4, //0x00004239 vmovq %r12, %xmm0 + 0x4c, 0x0f, 0xaf, 0xe1, //0x0000423e imulq %rcx, %r12 + 0xc5, 0xf9, 0x62, 0x05, 0xa6, 0xfa, 0xff, 0xff, //0x00004242 vpunpckldq $-1370(%rip), %xmm0, %xmm0 /* LCPI14_0+0(%rip) */ + 0xc5, 0xf9, 0x5c, 0x05, 0xae, 0xfa, 0xff, 0xff, //0x0000424a vsubpd $-1362(%rip), %xmm0, %xmm0 /* LCPI14_1+0(%rip) */ + 0x4c, 0x89, 0x63, 0x10, //0x00004252 movq %r12, $16(%rbx) + 0xc4, 0xe3, 0x79, 0x05, 0xc8, 0x01, //0x00004256 vpermilpd $1, %xmm0, %xmm1 + 0xc5, 0xf3, 0x58, 0xc0, //0x0000425c vaddsd %xmm0, %xmm1, %xmm0 + 0x48, 0x21, 0xc8, //0x00004260 andq %rcx, %rax + 0xc4, 0xe1, 0xf9, 0x7e, 0xc1, //0x00004263 vmovq %xmm0, %rcx + 0x48, 0x09, 0xc1, //0x00004268 orq %rax, %rcx + 0x48, 0x89, 0x4b, 0x08, //0x0000426b movq %rcx, $8(%rbx) + 0xe9, 0x1a, 0xff, 0xff, 0xff, //0x0000426f jmp LBB14_70 + //0x00004274 LBB14_81 + 0x89, 0xf8, //0x00004274 movl %edi, %eax + //0x00004276 LBB14_82 + 0xc5, 0xf9, 0x2e, 0x05, 0x92, 0xfa, 0xff, 0xff, //0x00004276 vucomisd $-1390(%rip), %xmm0 /* LCPI14_2+0(%rip) */ + 0x0f, 0x87, 0x4a, 0xfe, 0xff, 0xff, //0x0000427e ja LBB14_60 + 0xc5, 0xfb, 0x10, 0x0d, 0x8c, 0xfa, 0xff, 0xff, //0x00004284 vmovsd $-1396(%rip), %xmm1 /* LCPI14_3+0(%rip) */ + 0xc5, 0xf9, 0x2e, 0xc8, //0x0000428c vucomisd %xmm0, %xmm1 + 0x0f, 0x87, 0x38, 0xfe, 0xff, 0xff, //0x00004290 ja LBB14_60 + 0x89, 0xc0, //0x00004296 movl %eax, %eax + 0x48, 0x8d, 0x0d, 0xb1, 0xee, 0x00, 0x00, //0x00004298 leaq $61105(%rip), %rcx /* _P10_TAB+0(%rip) */ + 0xc5, 0xfb, 0x59, 0x04, 0xc1, //0x0000429f vmulsd (%rcx,%rax,8), %xmm0, %xmm0 + 0xe9, 0xad, 0xfe, 0xff, 0xff, //0x000042a4 jmp LBB14_65 + //0x000042a9 LBB14_85 + 0x48, 0x89, 0xf8, //0x000042a9 movq %rdi, %rax + //0x000042ac LBB14_86 + 0x8d, 0x7e, 0xd0, //0x000042ac leal $-48(%rsi), %edi + 0x40, 0x80, 0xff, 0x09, //0x000042af cmpb $9, %dil + 0x0f, 0x87, 0xee, 0xfa, 0xff, 0xff, //0x000042b3 ja LBB14_5 + 0x44, 0x89, 0x4d, 0xc8, //0x000042b9 movl %r9d, $-56(%rbp) + 0x4c, 0x39, 0xe8, //0x000042bd cmpq %r13, %rax + 0x0f, 0x83, 0x49, 0x00, 0x00, 0x00, //0x000042c0 jae LBB14_93 + 0x40, 0x80, 0xff, 0x09, //0x000042c6 cmpb $9, %dil + 0x0f, 0x87, 0x3f, 0x00, 0x00, 0x00, //0x000042ca ja LBB14_93 + 0x4d, 0x8d, 0x4d, 0xff, //0x000042d0 leaq $-1(%r13), %r9 + 0x31, 0xff, //0x000042d4 xorl %edi, %edi + //0x000042d6 LBB14_90 + 0x89, 0xfa, //0x000042d6 movl %edi, %edx + 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x000042d8 cmpl $10000, %edi + 0x8d, 0x3c, 0x92, //0x000042de leal (%rdx,%rdx,4), %edi + 0x40, 0x0f, 0xb6, 0xf6, //0x000042e1 movzbl %sil, %esi + 0x8d, 0x7c, 0x7e, 0xd0, //0x000042e5 leal $-48(%rsi,%rdi,2), %edi + 0x0f, 0x4d, 0xfa, //0x000042e9 cmovgel %edx, %edi + 0x49, 0x39, 0xc1, //0x000042ec cmpq %rax, %r9 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x000042ef je LBB14_94 + 0x41, 0x0f, 0xb6, 0x74, 0x07, 0x01, //0x000042f5 movzbl $1(%r15,%rax), %esi + 0x48, 0xff, 0xc0, //0x000042fb incq %rax + 0x8d, 0x56, 0xd0, //0x000042fe leal $-48(%rsi), %edx + 0x80, 0xfa, 0x0a, //0x00004301 cmpb $10, %dl + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00004304 jb LBB14_90 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x0000430a jmp LBB14_95 + //0x0000430f LBB14_93 + 0x31, 0xff, //0x0000430f xorl %edi, %edi + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00004311 jmp LBB14_95 + //0x00004316 LBB14_94 + 0x4c, 0x89, 0xe8, //0x00004316 movq %r13, %rax + //0x00004319 LBB14_95 + 0x41, 0x0f, 0xaf, 0xf8, //0x00004319 imull %r8d, %edi + 0x01, 0xcf, //0x0000431d addl %ecx, %edi + 0x49, 0x89, 0xc5, //0x0000431f movq %rax, %r13 + 0x44, 0x8b, 0x4d, 0xc8, //0x00004322 movl $-56(%rbp), %r9d + 0xe9, 0x6a, 0xfd, 0xff, 0xff, //0x00004326 jmp LBB14_59 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000432b .p2align 4, 0x90 + //0x00004330 _vsigned + 0x55, //0x00004330 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004331 movq %rsp, %rbp + 0x53, //0x00004334 pushq %rbx + 0x48, 0x8b, 0x1e, //0x00004335 movq (%rsi), %rbx + 0x4c, 0x8b, 0x07, //0x00004338 movq (%rdi), %r8 + 0x4c, 0x8b, 0x57, 0x08, //0x0000433b movq $8(%rdi), %r10 + 0x48, 0xc7, 0x02, 0x09, 0x00, 0x00, 0x00, //0x0000433f movq $9, (%rdx) + 0xc5, 0xf8, 0x57, 0xc0, //0x00004346 vxorps %xmm0, %xmm0, %xmm0 + 0xc5, 0xf8, 0x11, 0x42, 0x08, //0x0000434a vmovups %xmm0, $8(%rdx) + 0x48, 0x8b, 0x0e, //0x0000434f movq (%rsi), %rcx + 0x48, 0x89, 0x4a, 0x18, //0x00004352 movq %rcx, $24(%rdx) + 0x4c, 0x39, 0xd3, //0x00004356 cmpq %r10, %rbx + 0x0f, 0x83, 0x44, 0x00, 0x00, 0x00, //0x00004359 jae LBB15_1 + 0x41, 0x8a, 0x0c, 0x18, //0x0000435f movb (%r8,%rbx), %cl + 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00004363 movl $1, %r9d + 0x80, 0xf9, 0x2d, //0x00004369 cmpb $45, %cl + 0x0f, 0x85, 0x17, 0x00, 0x00, 0x00, //0x0000436c jne LBB15_5 + 0x48, 0xff, 0xc3, //0x00004372 incq %rbx + 0x4c, 0x39, 0xd3, //0x00004375 cmpq %r10, %rbx + 0x0f, 0x83, 0x25, 0x00, 0x00, 0x00, //0x00004378 jae LBB15_1 + 0x41, 0x8a, 0x0c, 0x18, //0x0000437e movb (%r8,%rbx), %cl + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00004382 movq $-1, %r9 + //0x00004389 LBB15_5 + 0x8d, 0x79, 0xd0, //0x00004389 leal $-48(%rcx), %edi + 0x40, 0x80, 0xff, 0x0a, //0x0000438c cmpb $10, %dil + 0x0f, 0x82, 0x1a, 0x00, 0x00, 0x00, //0x00004390 jb LBB15_7 + 0x48, 0x89, 0x1e, //0x00004396 movq %rbx, (%rsi) + 0x48, 0xc7, 0x02, 0xfe, 0xff, 0xff, 0xff, //0x00004399 movq $-2, (%rdx) + 0x5b, //0x000043a0 popq %rbx + 0x5d, //0x000043a1 popq %rbp + 0xc3, //0x000043a2 retq + //0x000043a3 LBB15_1 + 0x4c, 0x89, 0x16, //0x000043a3 movq %r10, (%rsi) + 0x48, 0xc7, 0x02, 0xff, 0xff, 0xff, 0xff, //0x000043a6 movq $-1, (%rdx) + 0x5b, //0x000043ad popq %rbx + 0x5d, //0x000043ae popq %rbp + 0xc3, //0x000043af retq + //0x000043b0 LBB15_7 + 0x80, 0xf9, 0x30, //0x000043b0 cmpb $48, %cl + 0x0f, 0x85, 0x35, 0x00, 0x00, 0x00, //0x000043b3 jne LBB15_8 + 0x48, 0x8d, 0x7b, 0x01, //0x000043b9 leaq $1(%rbx), %rdi + 0x4c, 0x39, 0xd3, //0x000043bd cmpq %r10, %rbx + 0x0f, 0x83, 0x71, 0x00, 0x00, 0x00, //0x000043c0 jae LBB15_17 + 0x41, 0x8a, 0x0c, 0x38, //0x000043c6 movb (%r8,%rdi), %cl + 0x80, 0xc1, 0xd2, //0x000043ca addb $-46, %cl + 0x80, 0xf9, 0x37, //0x000043cd cmpb $55, %cl + 0x0f, 0x87, 0x61, 0x00, 0x00, 0x00, //0x000043d0 ja LBB15_17 + 0x44, 0x0f, 0xb6, 0xd9, //0x000043d6 movzbl %cl, %r11d + 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000043da movabsq $36028797027352577, %rcx + 0x4c, 0x0f, 0xa3, 0xd9, //0x000043e4 btq %r11, %rcx + 0x0f, 0x83, 0x49, 0x00, 0x00, 0x00, //0x000043e8 jae LBB15_17 + //0x000043ee LBB15_8 + 0x31, 0xff, //0x000043ee xorl %edi, %edi + //0x000043f0 .p2align 4, 0x90 + //0x000043f0 LBB15_9 + 0x4c, 0x39, 0xd3, //0x000043f0 cmpq %r10, %rbx + 0x0f, 0x83, 0x6c, 0x00, 0x00, 0x00, //0x000043f3 jae LBB15_22 + 0x49, 0x0f, 0xbe, 0x0c, 0x18, //0x000043f9 movsbq (%r8,%rbx), %rcx + 0x8d, 0x41, 0xd0, //0x000043fe leal $-48(%rcx), %eax + 0x3c, 0x09, //0x00004401 cmpb $9, %al + 0x0f, 0x87, 0x34, 0x00, 0x00, 0x00, //0x00004403 ja LBB15_18 + 0x48, 0x6b, 0xff, 0x0a, //0x00004409 imulq $10, %rdi, %rdi + 0x0f, 0x80, 0x14, 0x00, 0x00, 0x00, //0x0000440d jo LBB15_13 + 0x48, 0xff, 0xc3, //0x00004413 incq %rbx + 0x48, 0x83, 0xc1, 0xd0, //0x00004416 addq $-48, %rcx + 0x49, 0x0f, 0xaf, 0xc9, //0x0000441a imulq %r9, %rcx + 0x48, 0x01, 0xcf, //0x0000441e addq %rcx, %rdi + 0x0f, 0x81, 0xc9, 0xff, 0xff, 0xff, //0x00004421 jno LBB15_9 + //0x00004427 LBB15_13 + 0x48, 0xff, 0xcb, //0x00004427 decq %rbx + 0x48, 0x89, 0x1e, //0x0000442a movq %rbx, (%rsi) + 0x48, 0xc7, 0x02, 0xfb, 0xff, 0xff, 0xff, //0x0000442d movq $-5, (%rdx) + 0x5b, //0x00004434 popq %rbx + 0x5d, //0x00004435 popq %rbp + 0xc3, //0x00004436 retq + //0x00004437 LBB15_17 + 0x48, 0x89, 0x3e, //0x00004437 movq %rdi, (%rsi) + 0x5b, //0x0000443a popq %rbx + 0x5d, //0x0000443b popq %rbp + 0xc3, //0x0000443c retq + //0x0000443d LBB15_18 + 0x80, 0xf9, 0x65, //0x0000443d cmpb $101, %cl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00004440 je LBB15_21 + 0x80, 0xf9, 0x45, //0x00004446 cmpb $69, %cl + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x00004449 je LBB15_21 + 0x80, 0xf9, 0x2e, //0x0000444f cmpb $46, %cl + 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x00004452 jne LBB15_22 + //0x00004458 LBB15_21 + 0x48, 0x89, 0x1e, //0x00004458 movq %rbx, (%rsi) + 0x48, 0xc7, 0x02, 0xfa, 0xff, 0xff, 0xff, //0x0000445b movq $-6, (%rdx) + 0x5b, //0x00004462 popq %rbx + 0x5d, //0x00004463 popq %rbp + 0xc3, //0x00004464 retq + //0x00004465 LBB15_22 + 0x48, 0x89, 0x1e, //0x00004465 movq %rbx, (%rsi) + 0x48, 0x89, 0x7a, 0x10, //0x00004468 movq %rdi, $16(%rdx) + 0x5b, //0x0000446c popq %rbx + 0x5d, //0x0000446d popq %rbp + 0xc3, //0x0000446e retq + 0x90, //0x0000446f .p2align 4, 0x90 + //0x00004470 _vunsigned + 0x55, //0x00004470 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004471 movq %rsp, %rbp + 0x49, 0x89, 0xd0, //0x00004474 movq %rdx, %r8 + 0x48, 0x8b, 0x0e, //0x00004477 movq (%rsi), %rcx + 0x4c, 0x8b, 0x0f, //0x0000447a movq (%rdi), %r9 + 0x4c, 0x8b, 0x5f, 0x08, //0x0000447d movq $8(%rdi), %r11 + 0x48, 0xc7, 0x02, 0x09, 0x00, 0x00, 0x00, //0x00004481 movq $9, (%rdx) + 0xc5, 0xf8, 0x57, 0xc0, //0x00004488 vxorps %xmm0, %xmm0, %xmm0 + 0xc5, 0xf8, 0x11, 0x42, 0x08, //0x0000448c vmovups %xmm0, $8(%rdx) + 0x48, 0x8b, 0x06, //0x00004491 movq (%rsi), %rax + 0x48, 0x89, 0x42, 0x18, //0x00004494 movq %rax, $24(%rdx) + 0x4c, 0x39, 0xd9, //0x00004498 cmpq %r11, %rcx + 0x0f, 0x83, 0x18, 0x00, 0x00, 0x00, //0x0000449b jae LBB16_1 + 0x41, 0x8a, 0x04, 0x09, //0x000044a1 movb (%r9,%rcx), %al + 0x3c, 0x2d, //0x000044a5 cmpb $45, %al + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x000044a7 jne LBB16_4 + //0x000044ad LBB16_3 + 0x48, 0x89, 0x0e, //0x000044ad movq %rcx, (%rsi) + 0x49, 0xc7, 0x00, 0xfa, 0xff, 0xff, 0xff, //0x000044b0 movq $-6, (%r8) + 0x5d, //0x000044b7 popq %rbp + 0xc3, //0x000044b8 retq + //0x000044b9 LBB16_1 + 0x4c, 0x89, 0x1e, //0x000044b9 movq %r11, (%rsi) + 0x49, 0xc7, 0x00, 0xff, 0xff, 0xff, 0xff, //0x000044bc movq $-1, (%r8) + 0x5d, //0x000044c3 popq %rbp + 0xc3, //0x000044c4 retq + //0x000044c5 LBB16_4 + 0x8d, 0x50, 0xd0, //0x000044c5 leal $-48(%rax), %edx + 0x80, 0xfa, 0x0a, //0x000044c8 cmpb $10, %dl + 0x0f, 0x82, 0x0c, 0x00, 0x00, 0x00, //0x000044cb jb LBB16_6 + 0x48, 0x89, 0x0e, //0x000044d1 movq %rcx, (%rsi) + 0x49, 0xc7, 0x00, 0xfe, 0xff, 0xff, 0xff, //0x000044d4 movq $-2, (%r8) + 0x5d, //0x000044db popq %rbp + 0xc3, //0x000044dc retq + //0x000044dd LBB16_6 + 0x3c, 0x30, //0x000044dd cmpb $48, %al + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x000044df jne LBB16_7 + 0x41, 0x8a, 0x44, 0x09, 0x01, //0x000044e5 movb $1(%r9,%rcx), %al + 0x04, 0xd2, //0x000044ea addb $-46, %al + 0x3c, 0x37, //0x000044ec cmpb $55, %al + 0x0f, 0x87, 0xb6, 0x00, 0x00, 0x00, //0x000044ee ja LBB16_16 + 0x0f, 0xb6, 0xc0, //0x000044f4 movzbl %al, %eax + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000044f7 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xc2, //0x00004501 btq %rax, %rdx + 0x0f, 0x83, 0x9f, 0x00, 0x00, 0x00, //0x00004505 jae LBB16_16 + //0x0000450b LBB16_7 + 0x31, 0xc0, //0x0000450b xorl %eax, %eax + 0x41, 0xba, 0x0a, 0x00, 0x00, 0x00, //0x0000450d movl $10, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004513 .p2align 4, 0x90 + //0x00004520 LBB16_8 + 0x4c, 0x39, 0xd9, //0x00004520 cmpq %r11, %rcx + 0x0f, 0x83, 0x78, 0x00, 0x00, 0x00, //0x00004523 jae LBB16_20 + 0x41, 0x0f, 0xbe, 0x3c, 0x09, //0x00004529 movsbl (%r9,%rcx), %edi + 0x8d, 0x57, 0xd0, //0x0000452e leal $-48(%rdi), %edx + 0x80, 0xfa, 0x09, //0x00004531 cmpb $9, %dl + 0x0f, 0x87, 0x49, 0x00, 0x00, 0x00, //0x00004534 ja LBB16_17 + 0x49, 0xf7, 0xe2, //0x0000453a mulq %r10 + 0x0f, 0x80, 0x31, 0x00, 0x00, 0x00, //0x0000453d jo LBB16_13 + 0x48, 0xff, 0xc1, //0x00004543 incq %rcx + 0x83, 0xc7, 0xd0, //0x00004546 addl $-48, %edi + 0x48, 0x63, 0xd7, //0x00004549 movslq %edi, %rdx + 0x48, 0x89, 0xd7, //0x0000454c movq %rdx, %rdi + 0x48, 0xc1, 0xff, 0x3f, //0x0000454f sarq $63, %rdi + 0x48, 0x01, 0xd0, //0x00004553 addq %rdx, %rax + 0x48, 0x83, 0xd7, 0x00, //0x00004556 adcq $0, %rdi + 0x89, 0xfa, //0x0000455a movl %edi, %edx + 0x83, 0xe2, 0x01, //0x0000455c andl $1, %edx + 0x48, 0xf7, 0xda, //0x0000455f negq %rdx + 0x48, 0x31, 0xd7, //0x00004562 xorq %rdx, %rdi + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00004565 jne LBB16_13 + 0x48, 0x85, 0xd2, //0x0000456b testq %rdx, %rdx + 0x0f, 0x89, 0xac, 0xff, 0xff, 0xff, //0x0000456e jns LBB16_8 + //0x00004574 LBB16_13 + 0x48, 0xff, 0xc9, //0x00004574 decq %rcx + 0x48, 0x89, 0x0e, //0x00004577 movq %rcx, (%rsi) + 0x49, 0xc7, 0x00, 0xfb, 0xff, 0xff, 0xff, //0x0000457a movq $-5, (%r8) + 0x5d, //0x00004581 popq %rbp + 0xc3, //0x00004582 retq + //0x00004583 LBB16_17 + 0x40, 0x80, 0xff, 0x65, //0x00004583 cmpb $101, %dil + 0x0f, 0x84, 0x20, 0xff, 0xff, 0xff, //0x00004587 je LBB16_3 + 0x40, 0x80, 0xff, 0x45, //0x0000458d cmpb $69, %dil + 0x0f, 0x84, 0x16, 0xff, 0xff, 0xff, //0x00004591 je LBB16_3 + 0x40, 0x80, 0xff, 0x2e, //0x00004597 cmpb $46, %dil + 0x0f, 0x84, 0x0c, 0xff, 0xff, 0xff, //0x0000459b je LBB16_3 + //0x000045a1 LBB16_20 + 0x48, 0x89, 0x0e, //0x000045a1 movq %rcx, (%rsi) + 0x49, 0x89, 0x40, 0x10, //0x000045a4 movq %rax, $16(%r8) + 0x5d, //0x000045a8 popq %rbp + 0xc3, //0x000045a9 retq + //0x000045aa LBB16_16 + 0x48, 0xff, 0xc1, //0x000045aa incq %rcx + 0x48, 0x89, 0x0e, //0x000045ad movq %rcx, (%rsi) + 0x5d, //0x000045b0 popq %rbp + 0xc3, //0x000045b1 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000045b2 .p2align 4, 0x00 + //0x000045c0 LCPI17_0 + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000045c0 .quad 1 + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000045c8 .quad 5 + //0x000045d0 .p2align 4, 0x90 + //0x000045d0 _skip_array + 0x55, //0x000045d0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000045d1 movq %rsp, %rbp + 0x48, 0x89, 0xd0, //0x000045d4 movq %rdx, %rax + 0x48, 0x89, 0xf2, //0x000045d7 movq %rsi, %rdx + 0x48, 0x89, 0xfe, //0x000045da movq %rdi, %rsi + 0xc5, 0xf8, 0x28, 0x05, 0xdb, 0xff, 0xff, 0xff, //0x000045dd vmovaps $-37(%rip), %xmm0 /* LCPI17_0+0(%rip) */ + 0xc5, 0xf8, 0x11, 0x00, //0x000045e5 vmovups %xmm0, (%rax) + 0x48, 0x89, 0xc7, //0x000045e9 movq %rax, %rdi + 0x5d, //0x000045ec popq %rbp + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x000045ed jmp _fsm_exec + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000045f2 .p2align 4, 0x90 + //0x00004600 _fsm_exec + 0x55, //0x00004600 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004601 movq %rsp, %rbp + 0x41, 0x57, //0x00004604 pushq %r15 + 0x41, 0x56, //0x00004606 pushq %r14 + 0x41, 0x55, //0x00004608 pushq %r13 + 0x41, 0x54, //0x0000460a pushq %r12 + 0x53, //0x0000460c pushq %rbx + 0x48, 0x83, 0xec, 0x38, //0x0000460d subq $56, %rsp + 0x48, 0x89, 0x4d, 0xa8, //0x00004611 movq %rcx, $-88(%rbp) + 0x4c, 0x8b, 0x0f, //0x00004615 movq (%rdi), %r9 + 0x4d, 0x85, 0xc9, //0x00004618 testq %r9, %r9 + 0x0f, 0x84, 0x16, 0x05, 0x00, 0x00, //0x0000461b je LBB18_2 + 0x49, 0x89, 0xd0, //0x00004621 movq %rdx, %r8 + 0x49, 0x89, 0xfa, //0x00004624 movq %rdi, %r10 + 0x48, 0x8d, 0x46, 0x08, //0x00004627 leaq $8(%rsi), %rax + 0x48, 0x89, 0x45, 0xc8, //0x0000462b movq %rax, $-56(%rbp) + 0x4c, 0x8b, 0x2a, //0x0000462f movq (%rdx), %r13 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00004632 movq $-1, %r14 + 0x49, 0xbc, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00004639 movabsq $4294977024, %r12 + 0x4c, 0x8d, 0x1d, 0x52, 0x06, 0x00, 0x00, //0x00004643 leaq $1618(%rip), %r11 /* LJTI18_0+0(%rip) */ + 0x48, 0x89, 0x55, 0xd0, //0x0000464a movq %rdx, $-48(%rbp) + 0x48, 0x89, 0x75, 0xb0, //0x0000464e movq %rsi, $-80(%rbp) + 0x48, 0x89, 0x7d, 0xb8, //0x00004652 movq %rdi, $-72(%rbp) + 0xe9, 0x3d, 0x00, 0x00, 0x00, //0x00004656 jmp LBB18_8 + //0x0000465b LBB18_3 + 0x49, 0x8b, 0x02, //0x0000465b movq (%r10), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x0000465e cmpq $4095, %rax + 0x0f, 0x8f, 0xe3, 0x04, 0x00, 0x00, //0x00004664 jg LBB18_82 + 0x48, 0x8d, 0x48, 0x01, //0x0000466a leaq $1(%rax), %rcx + 0x49, 0x89, 0x0a, //0x0000466e movq %rcx, (%r10) + 0x49, 0xc7, 0x44, 0xc2, 0x08, 0x06, 0x00, 0x00, 0x00, //0x00004671 movq $6, $8(%r10,%rax,8) + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000467a .p2align 4, 0x90 + //0x00004680 LBB18_5 + 0x4c, 0x89, 0xe9, //0x00004680 movq %r13, %rcx + //0x00004683 LBB18_6 + 0x49, 0x8b, 0x12, //0x00004683 movq (%r10), %rdx + 0x49, 0x89, 0xcd, //0x00004686 movq %rcx, %r13 + //0x00004689 LBB18_7 + 0x49, 0x89, 0xd1, //0x00004689 movq %rdx, %r9 + 0x4c, 0x89, 0xf0, //0x0000468c movq %r14, %rax + 0x48, 0x85, 0xd2, //0x0000468f testq %rdx, %rdx + 0x0f, 0x84, 0xa6, 0x04, 0x00, 0x00, //0x00004692 je LBB18_88 + //0x00004698 LBB18_8 + 0x48, 0x8b, 0x3e, //0x00004698 movq (%rsi), %rdi + 0x48, 0x8b, 0x46, 0x08, //0x0000469b movq $8(%rsi), %rax + 0x4c, 0x89, 0xea, //0x0000469f movq %r13, %rdx + 0x48, 0x29, 0xc2, //0x000046a2 subq %rax, %rdx + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x000046a5 jae LBB18_13 + 0x42, 0x8a, 0x1c, 0x2f, //0x000046ab movb (%rdi,%r13), %bl + 0x80, 0xfb, 0x0d, //0x000046af cmpb $13, %bl + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x000046b2 je LBB18_13 + 0x80, 0xfb, 0x20, //0x000046b8 cmpb $32, %bl + 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x000046bb je LBB18_13 + 0x80, 0xc3, 0xf7, //0x000046c1 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000046c4 cmpb $1, %bl + 0x0f, 0x86, 0x13, 0x00, 0x00, 0x00, //0x000046c7 jbe LBB18_13 + 0x4d, 0x89, 0xef, //0x000046cd movq %r13, %r15 + 0xe9, 0x2d, 0x01, 0x00, 0x00, //0x000046d0 jmp LBB18_34 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000046d5 .p2align 4, 0x90 + //0x000046e0 LBB18_13 + 0x4d, 0x8d, 0x7d, 0x01, //0x000046e0 leaq $1(%r13), %r15 + 0x49, 0x39, 0xc7, //0x000046e4 cmpq %rax, %r15 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000046e7 jae LBB18_17 + 0x42, 0x8a, 0x1c, 0x3f, //0x000046ed movb (%rdi,%r15), %bl + 0x80, 0xfb, 0x0d, //0x000046f1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000046f4 je LBB18_17 + 0x80, 0xfb, 0x20, //0x000046fa cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000046fd je LBB18_17 + 0x80, 0xc3, 0xf7, //0x00004703 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00004706 cmpb $1, %bl + 0x0f, 0x87, 0xf3, 0x00, 0x00, 0x00, //0x00004709 ja LBB18_34 + 0x90, //0x0000470f .p2align 4, 0x90 + //0x00004710 LBB18_17 + 0x4d, 0x8d, 0x7d, 0x02, //0x00004710 leaq $2(%r13), %r15 + 0x49, 0x39, 0xc7, //0x00004714 cmpq %rax, %r15 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00004717 jae LBB18_21 + 0x42, 0x8a, 0x1c, 0x3f, //0x0000471d movb (%rdi,%r15), %bl + 0x80, 0xfb, 0x0d, //0x00004721 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00004724 je LBB18_21 + 0x80, 0xfb, 0x20, //0x0000472a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000472d je LBB18_21 + 0x80, 0xc3, 0xf7, //0x00004733 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00004736 cmpb $1, %bl + 0x0f, 0x87, 0xc3, 0x00, 0x00, 0x00, //0x00004739 ja LBB18_34 + 0x90, //0x0000473f .p2align 4, 0x90 + //0x00004740 LBB18_21 + 0x4d, 0x8d, 0x7d, 0x03, //0x00004740 leaq $3(%r13), %r15 + 0x49, 0x39, 0xc7, //0x00004744 cmpq %rax, %r15 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00004747 jae LBB18_25 + 0x42, 0x8a, 0x1c, 0x3f, //0x0000474d movb (%rdi,%r15), %bl + 0x80, 0xfb, 0x0d, //0x00004751 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00004754 je LBB18_25 + 0x80, 0xfb, 0x20, //0x0000475a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000475d je LBB18_25 + 0x80, 0xc3, 0xf7, //0x00004763 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00004766 cmpb $1, %bl + 0x0f, 0x87, 0x93, 0x00, 0x00, 0x00, //0x00004769 ja LBB18_34 + 0x90, //0x0000476f .p2align 4, 0x90 + //0x00004770 LBB18_25 + 0x49, 0x8d, 0x4d, 0x04, //0x00004770 leaq $4(%r13), %rcx + 0x48, 0x39, 0xc8, //0x00004774 cmpq %rcx, %rax + 0x0f, 0x86, 0xb7, 0x03, 0x00, 0x00, //0x00004777 jbe LBB18_79 + 0x48, 0x39, 0xc8, //0x0000477d cmpq %rcx, %rax + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x00004780 je LBB18_31 + 0x48, 0x8d, 0x0c, 0x07, //0x00004786 leaq (%rdi,%rax), %rcx + 0x48, 0x83, 0xc2, 0x04, //0x0000478a addq $4, %rdx + 0x4e, 0x8d, 0x7c, 0x2f, 0x05, //0x0000478e leaq $5(%rdi,%r13), %r15 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004793 .p2align 4, 0x90 + //0x000047a0 LBB18_28 + 0x41, 0x0f, 0xbe, 0x5f, 0xff, //0x000047a0 movsbl $-1(%r15), %ebx + 0x83, 0xfb, 0x20, //0x000047a5 cmpl $32, %ebx + 0x0f, 0x87, 0x42, 0x00, 0x00, 0x00, //0x000047a8 ja LBB18_33 + 0x49, 0x0f, 0xa3, 0xdc, //0x000047ae btq %rbx, %r12 + 0x0f, 0x83, 0x38, 0x00, 0x00, 0x00, //0x000047b2 jae LBB18_33 + 0x49, 0xff, 0xc7, //0x000047b8 incq %r15 + 0x48, 0xff, 0xc2, //0x000047bb incq %rdx + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x000047be jne LBB18_28 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x000047c4 jmp LBB18_32 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000047c9 .p2align 4, 0x90 + //0x000047d0 LBB18_31 + 0x48, 0x01, 0xf9, //0x000047d0 addq %rdi, %rcx + //0x000047d3 LBB18_32 + 0x48, 0x29, 0xf9, //0x000047d3 subq %rdi, %rcx + 0x49, 0x89, 0xcf, //0x000047d6 movq %rcx, %r15 + 0x49, 0x39, 0xc7, //0x000047d9 cmpq %rax, %r15 + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x000047dc jb LBB18_34 + 0xe9, 0x50, 0x03, 0x00, 0x00, //0x000047e2 jmp LBB18_2 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000047e7 .p2align 4, 0x90 + //0x000047f0 LBB18_33 + 0x48, 0x89, 0xfa, //0x000047f0 movq %rdi, %rdx + 0x48, 0xf7, 0xd2, //0x000047f3 notq %rdx + 0x49, 0x01, 0xd7, //0x000047f6 addq %rdx, %r15 + 0x49, 0x39, 0xc7, //0x000047f9 cmpq %rax, %r15 + 0x0f, 0x83, 0x35, 0x03, 0x00, 0x00, //0x000047fc jae LBB18_2 + //0x00004802 LBB18_34 + 0x4d, 0x8d, 0x6f, 0x01, //0x00004802 leaq $1(%r15), %r13 + 0x4d, 0x89, 0x28, //0x00004806 movq %r13, (%r8) + 0x42, 0x0f, 0xbe, 0x0c, 0x3f, //0x00004809 movsbl (%rdi,%r15), %ecx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000480e movq $-1, %rax + 0x85, 0xc9, //0x00004815 testl %ecx, %ecx + 0x0f, 0x84, 0x21, 0x03, 0x00, 0x00, //0x00004817 je LBB18_88 + 0x49, 0x8d, 0x51, 0xff, //0x0000481d leaq $-1(%r9), %rdx + 0x43, 0x8b, 0x1c, 0xca, //0x00004821 movl (%r10,%r9,8), %ebx + 0x49, 0x83, 0xfe, 0xff, //0x00004825 cmpq $-1, %r14 + 0x4d, 0x0f, 0x44, 0xf7, //0x00004829 cmoveq %r15, %r14 + 0xff, 0xcb, //0x0000482d decl %ebx + 0x83, 0xfb, 0x05, //0x0000482f cmpl $5, %ebx + 0x0f, 0x87, 0x20, 0x00, 0x00, 0x00, //0x00004832 ja LBB18_40 + 0x49, 0x63, 0x1c, 0x9b, //0x00004838 movslq (%r11,%rbx,4), %rbx + 0x4c, 0x01, 0xdb, //0x0000483c addq %r11, %rbx + 0xff, 0xe3, //0x0000483f jmpq *%rbx + //0x00004841 LBB18_37 + 0x83, 0xf9, 0x2c, //0x00004841 cmpl $44, %ecx + 0x0f, 0x84, 0x5d, 0x01, 0x00, 0x00, //0x00004844 je LBB18_58 + 0x83, 0xf9, 0x5d, //0x0000484a cmpl $93, %ecx + 0x0f, 0x84, 0xab, 0x00, 0x00, 0x00, //0x0000484d je LBB18_39 + 0xe9, 0x32, 0x03, 0x00, 0x00, //0x00004853 jmp LBB18_87 + //0x00004858 LBB18_40 + 0x49, 0x89, 0x12, //0x00004858 movq %rdx, (%r10) + 0x83, 0xf9, 0x7b, //0x0000485b cmpl $123, %ecx + 0x0f, 0x86, 0xd1, 0x00, 0x00, 0x00, //0x0000485e jbe LBB18_56 + 0xe9, 0x21, 0x03, 0x00, 0x00, //0x00004864 jmp LBB18_87 + //0x00004869 LBB18_41 + 0x83, 0xf9, 0x2c, //0x00004869 cmpl $44, %ecx + 0x0f, 0x84, 0x57, 0x01, 0x00, 0x00, //0x0000486c je LBB18_60 + 0x83, 0xf9, 0x7d, //0x00004872 cmpl $125, %ecx + 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, //0x00004875 je LBB18_39 + 0xe9, 0x0a, 0x03, 0x00, 0x00, //0x0000487b jmp LBB18_87 + //0x00004880 LBB18_44 + 0x80, 0xf9, 0x22, //0x00004880 cmpb $34, %cl + 0x0f, 0x85, 0x01, 0x03, 0x00, 0x00, //0x00004883 jne LBB18_87 + 0x4b, 0xc7, 0x04, 0xca, 0x04, 0x00, 0x00, 0x00, //0x00004889 movq $4, (%r10,%r9,8) + //0x00004891 LBB18_46 + 0x48, 0xc7, 0x45, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004891 movq $-1, $-64(%rbp) + 0x48, 0x89, 0xf7, //0x00004899 movq %rsi, %rdi + 0x4c, 0x89, 0xee, //0x0000489c movq %r13, %rsi + 0x48, 0x8d, 0x55, 0xc0, //0x0000489f leaq $-64(%rbp), %rdx + 0x48, 0x8b, 0x4d, 0xa8, //0x000048a3 movq $-88(%rbp), %rcx + 0xe8, 0x44, 0xef, 0xff, 0xff, //0x000048a7 callq _advance_string + 0x48, 0x89, 0xc1, //0x000048ac movq %rax, %rcx + 0x48, 0x85, 0xc0, //0x000048af testq %rax, %rax + 0x0f, 0x88, 0xa1, 0x02, 0x00, 0x00, //0x000048b2 js LBB18_81 + //0x000048b8 LBB18_47 + 0x4c, 0x8b, 0x45, 0xd0, //0x000048b8 movq $-48(%rbp), %r8 + 0x49, 0x89, 0x08, //0x000048bc movq %rcx, (%r8) + 0x4c, 0x89, 0xf8, //0x000048bf movq %r15, %rax + 0x4d, 0x85, 0xed, //0x000048c2 testq %r13, %r13 + 0x48, 0x8b, 0x75, 0xb0, //0x000048c5 movq $-80(%rbp), %rsi + 0x4c, 0x8b, 0x55, 0xb8, //0x000048c9 movq $-72(%rbp), %r10 + 0x4c, 0x8d, 0x1d, 0xc8, 0x03, 0x00, 0x00, //0x000048cd leaq $968(%rip), %r11 /* LJTI18_0+0(%rip) */ + 0x0f, 0x8f, 0xa9, 0xfd, 0xff, 0xff, //0x000048d4 jg LBB18_6 + 0xe9, 0x5f, 0x02, 0x00, 0x00, //0x000048da jmp LBB18_88 + //0x000048df LBB18_48 + 0x80, 0xf9, 0x3a, //0x000048df cmpb $58, %cl + 0x0f, 0x85, 0xa2, 0x02, 0x00, 0x00, //0x000048e2 jne LBB18_87 + 0x4b, 0xc7, 0x04, 0xca, 0x00, 0x00, 0x00, 0x00, //0x000048e8 movq $0, (%r10,%r9,8) + 0xe9, 0x8b, 0xfd, 0xff, 0xff, //0x000048f0 jmp LBB18_5 + //0x000048f5 LBB18_50 + 0x80, 0xf9, 0x5d, //0x000048f5 cmpb $93, %cl + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x000048f8 jne LBB18_55 + //0x000048fe LBB18_39 + 0x49, 0x89, 0x12, //0x000048fe movq %rdx, (%r10) + 0xe9, 0x83, 0xfd, 0xff, 0xff, //0x00004901 jmp LBB18_7 + //0x00004906 LBB18_52 + 0x83, 0xf9, 0x22, //0x00004906 cmpl $34, %ecx + 0x0f, 0x84, 0xdc, 0x00, 0x00, 0x00, //0x00004909 je LBB18_62 + 0x83, 0xf9, 0x7d, //0x0000490f cmpl $125, %ecx + 0x0f, 0x85, 0x72, 0x02, 0x00, 0x00, //0x00004912 jne LBB18_87 + 0x49, 0x89, 0x12, //0x00004918 movq %rdx, (%r10) + 0x4c, 0x8b, 0x45, 0xd0, //0x0000491b movq $-48(%rbp), %r8 + 0xe9, 0x65, 0xfd, 0xff, 0xff, //0x0000491f jmp LBB18_7 + //0x00004924 LBB18_55 + 0x4b, 0xc7, 0x04, 0xca, 0x01, 0x00, 0x00, 0x00, //0x00004924 movq $1, (%r10,%r9,8) + 0x83, 0xf9, 0x7b, //0x0000492c cmpl $123, %ecx + 0x0f, 0x87, 0x55, 0x02, 0x00, 0x00, //0x0000492f ja LBB18_87 + //0x00004935 LBB18_56 + 0x4a, 0x8d, 0x1c, 0x3f, //0x00004935 leaq (%rdi,%r15), %rbx + 0x89, 0xca, //0x00004939 movl %ecx, %edx + 0x48, 0x8d, 0x0d, 0x72, 0x03, 0x00, 0x00, //0x0000493b leaq $882(%rip), %rcx /* LJTI18_1+0(%rip) */ + 0x48, 0x63, 0x14, 0x91, //0x00004942 movslq (%rcx,%rdx,4), %rdx + 0x48, 0x01, 0xca, //0x00004946 addq %rcx, %rdx + 0xff, 0xe2, //0x00004949 jmpq *%rdx + //0x0000494b LBB18_57 + 0x48, 0x8b, 0x45, 0xc8, //0x0000494b movq $-56(%rbp), %rax + 0x48, 0x8b, 0x30, //0x0000494f movq (%rax), %rsi + 0x4c, 0x29, 0xfe, //0x00004952 subq %r15, %rsi + 0x48, 0x89, 0xdf, //0x00004955 movq %rbx, %rdi + 0xe8, 0xd3, 0x06, 0x00, 0x00, //0x00004958 callq _do_skip_number + 0x4c, 0x8d, 0x1d, 0x38, 0x03, 0x00, 0x00, //0x0000495d leaq $824(%rip), %r11 /* LJTI18_0+0(%rip) */ + 0x4c, 0x8b, 0x55, 0xb8, //0x00004964 movq $-72(%rbp), %r10 + 0x48, 0x8b, 0x75, 0xb0, //0x00004968 movq $-80(%rbp), %rsi + 0x4c, 0x8b, 0x45, 0xd0, //0x0000496c movq $-48(%rbp), %r8 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00004970 movq $-2, %rdx + 0x48, 0x29, 0xc2, //0x00004977 subq %rax, %rdx + 0x48, 0x85, 0xc0, //0x0000497a testq %rax, %rax + 0x48, 0x8d, 0x48, 0xff, //0x0000497d leaq $-1(%rax), %rcx + 0x48, 0x0f, 0x48, 0xca, //0x00004981 cmovsq %rdx, %rcx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00004985 movq $-2, %rax + 0x4c, 0x0f, 0x48, 0xf8, //0x0000498c cmovsq %rax, %r15 + 0x4c, 0x01, 0xe9, //0x00004990 addq %r13, %rcx + 0x49, 0x89, 0x08, //0x00004993 movq %rcx, (%r8) + 0x4c, 0x89, 0xf8, //0x00004996 movq %r15, %rax + 0x4d, 0x85, 0xff, //0x00004999 testq %r15, %r15 + 0x0f, 0x89, 0xe1, 0xfc, 0xff, 0xff, //0x0000499c jns LBB18_6 + 0xe9, 0x97, 0x01, 0x00, 0x00, //0x000049a2 jmp LBB18_88 + //0x000049a7 LBB18_58 + 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000049a7 cmpq $4095, %r9 + 0x0f, 0x8f, 0x99, 0x01, 0x00, 0x00, //0x000049ae jg LBB18_82 + 0x49, 0x8d, 0x41, 0x01, //0x000049b4 leaq $1(%r9), %rax + 0x49, 0x89, 0x02, //0x000049b8 movq %rax, (%r10) + 0x4b, 0xc7, 0x44, 0xca, 0x08, 0x00, 0x00, 0x00, 0x00, //0x000049bb movq $0, $8(%r10,%r9,8) + 0xe9, 0xb7, 0xfc, 0xff, 0xff, //0x000049c4 jmp LBB18_5 + //0x000049c9 LBB18_60 + 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000049c9 cmpq $4095, %r9 + 0x0f, 0x8f, 0x77, 0x01, 0x00, 0x00, //0x000049d0 jg LBB18_82 + 0x49, 0x8d, 0x41, 0x01, //0x000049d6 leaq $1(%r9), %rax + 0x49, 0x89, 0x02, //0x000049da movq %rax, (%r10) + 0x4b, 0xc7, 0x44, 0xca, 0x08, 0x03, 0x00, 0x00, 0x00, //0x000049dd movq $3, $8(%r10,%r9,8) + 0xe9, 0x95, 0xfc, 0xff, 0xff, //0x000049e6 jmp LBB18_5 + //0x000049eb LBB18_62 + 0x4b, 0xc7, 0x04, 0xca, 0x02, 0x00, 0x00, 0x00, //0x000049eb movq $2, (%r10,%r9,8) + 0x48, 0xc7, 0x45, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000049f3 movq $-1, $-64(%rbp) + 0x48, 0x89, 0xf7, //0x000049fb movq %rsi, %rdi + 0x4c, 0x89, 0xee, //0x000049fe movq %r13, %rsi + 0x48, 0x8d, 0x55, 0xc0, //0x00004a01 leaq $-64(%rbp), %rdx + 0x48, 0x8b, 0x4d, 0xa8, //0x00004a05 movq $-88(%rbp), %rcx + 0xe8, 0xe2, 0xed, 0xff, 0xff, //0x00004a09 callq _advance_string + 0x48, 0x89, 0xc1, //0x00004a0e movq %rax, %rcx + 0x48, 0x85, 0xc0, //0x00004a11 testq %rax, %rax + 0x0f, 0x88, 0x3f, 0x01, 0x00, 0x00, //0x00004a14 js LBB18_81 + 0x4c, 0x8b, 0x45, 0xd0, //0x00004a1a movq $-48(%rbp), %r8 + 0x49, 0x89, 0x08, //0x00004a1e movq %rcx, (%r8) + 0x4c, 0x89, 0xf8, //0x00004a21 movq %r15, %rax + 0x4d, 0x85, 0xed, //0x00004a24 testq %r13, %r13 + 0x48, 0x8b, 0x75, 0xb0, //0x00004a27 movq $-80(%rbp), %rsi + 0x4c, 0x8b, 0x55, 0xb8, //0x00004a2b movq $-72(%rbp), %r10 + 0x4c, 0x8d, 0x1d, 0x66, 0x02, 0x00, 0x00, //0x00004a2f leaq $614(%rip), %r11 /* LJTI18_0+0(%rip) */ + 0x0f, 0x8e, 0x02, 0x01, 0x00, 0x00, //0x00004a36 jle LBB18_88 + 0x49, 0x8b, 0x02, //0x00004a3c movq (%r10), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00004a3f cmpq $4095, %rax + 0x0f, 0x8f, 0x02, 0x01, 0x00, 0x00, //0x00004a45 jg LBB18_82 + 0x48, 0x8d, 0x50, 0x01, //0x00004a4b leaq $1(%rax), %rdx + 0x49, 0x89, 0x12, //0x00004a4f movq %rdx, (%r10) + 0x49, 0xc7, 0x44, 0xc2, 0x08, 0x04, 0x00, 0x00, 0x00, //0x00004a52 movq $4, $8(%r10,%rax,8) + 0xe9, 0x23, 0xfc, 0xff, 0xff, //0x00004a5b jmp LBB18_6 + //0x00004a60 LBB18_66 + 0x4c, 0x01, 0xef, //0x00004a60 addq %r13, %rdi + 0x48, 0x8b, 0x45, 0xc8, //0x00004a63 movq $-56(%rbp), %rax + 0x48, 0x8b, 0x30, //0x00004a67 movq (%rax), %rsi + 0x4c, 0x29, 0xee, //0x00004a6a subq %r13, %rsi + 0xe8, 0xbe, 0x05, 0x00, 0x00, //0x00004a6d callq _do_skip_number + 0x48, 0x89, 0xc1, //0x00004a72 movq %rax, %rcx + 0x48, 0x85, 0xc0, //0x00004a75 testq %rax, %rax + 0x0f, 0x88, 0x02, 0x01, 0x00, 0x00, //0x00004a78 js LBB18_86 + 0x4c, 0x01, 0xe9, //0x00004a7e addq %r13, %rcx + 0xe9, 0x32, 0xfe, 0xff, 0xff, //0x00004a81 jmp LBB18_47 + //0x00004a86 LBB18_68 + 0x49, 0x8b, 0x02, //0x00004a86 movq (%r10), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00004a89 cmpq $4095, %rax + 0x0f, 0x8f, 0xb8, 0x00, 0x00, 0x00, //0x00004a8f jg LBB18_82 + 0x48, 0x8d, 0x48, 0x01, //0x00004a95 leaq $1(%rax), %rcx + 0x49, 0x89, 0x0a, //0x00004a99 movq %rcx, (%r10) + 0x49, 0xc7, 0x44, 0xc2, 0x08, 0x05, 0x00, 0x00, 0x00, //0x00004a9c movq $5, $8(%r10,%rax,8) + 0xe9, 0xd6, 0xfb, 0xff, 0xff, //0x00004aa5 jmp LBB18_5 + //0x00004aaa LBB18_70 + 0x48, 0x8b, 0x4d, 0xc8, //0x00004aaa movq $-56(%rbp), %rcx + 0x48, 0x8b, 0x09, //0x00004aae movq (%rcx), %rcx + 0x48, 0x8d, 0x51, 0xfc, //0x00004ab1 leaq $-4(%rcx), %rdx + 0x49, 0x39, 0xd7, //0x00004ab5 cmpq %rdx, %r15 + 0x0f, 0x83, 0xd8, 0x00, 0x00, 0x00, //0x00004ab8 jae LBB18_90 + 0x42, 0x8b, 0x0c, 0x2f, //0x00004abe movl (%rdi,%r13), %ecx + 0x81, 0xf9, 0x61, 0x6c, 0x73, 0x65, //0x00004ac2 cmpl $1702063201, %ecx + 0x0f, 0x85, 0x21, 0x01, 0x00, 0x00, //0x00004ac8 jne LBB18_97 + 0x49, 0x8d, 0x4f, 0x05, //0x00004ace leaq $5(%r15), %rcx + 0xe9, 0x49, 0x00, 0x00, 0x00, //0x00004ad2 jmp LBB18_78 + //0x00004ad7 LBB18_73 + 0x48, 0x8b, 0x55, 0xc8, //0x00004ad7 movq $-56(%rbp), %rdx + 0x48, 0x8b, 0x12, //0x00004adb movq (%rdx), %rdx + 0x48, 0x8d, 0x4a, 0xfd, //0x00004ade leaq $-3(%rdx), %rcx + 0x49, 0x39, 0xcf, //0x00004ae2 cmpq %rcx, %r15 + 0x0f, 0x83, 0x8d, 0x00, 0x00, 0x00, //0x00004ae5 jae LBB18_92 + 0x81, 0x3b, 0x6e, 0x75, 0x6c, 0x6c, //0x00004aeb cmpl $1819047278, (%rbx) + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00004af1 je LBB18_77 + 0xe9, 0x48, 0x01, 0x00, 0x00, //0x00004af7 jmp LBB18_102 + //0x00004afc LBB18_75 + 0x48, 0x8b, 0x55, 0xc8, //0x00004afc movq $-56(%rbp), %rdx + 0x48, 0x8b, 0x12, //0x00004b00 movq (%rdx), %rdx + 0x48, 0x8d, 0x4a, 0xfd, //0x00004b03 leaq $-3(%rdx), %rcx + 0x49, 0x39, 0xcf, //0x00004b07 cmpq %rcx, %r15 + 0x0f, 0x83, 0x68, 0x00, 0x00, 0x00, //0x00004b0a jae LBB18_92 + 0x81, 0x3b, 0x74, 0x72, 0x75, 0x65, //0x00004b10 cmpl $1702195828, (%rbx) + 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, //0x00004b16 jne LBB18_93 + //0x00004b1c LBB18_77 + 0x49, 0x8d, 0x4f, 0x04, //0x00004b1c leaq $4(%r15), %rcx + //0x00004b20 LBB18_78 + 0x49, 0x89, 0x08, //0x00004b20 movq %rcx, (%r8) + 0x4c, 0x89, 0xf8, //0x00004b23 movq %r15, %rax + 0x4d, 0x85, 0xed, //0x00004b26 testq %r13, %r13 + 0x0f, 0x8f, 0x54, 0xfb, 0xff, 0xff, //0x00004b29 jg LBB18_6 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00004b2f jmp LBB18_88 + //0x00004b34 LBB18_79 + 0x49, 0x89, 0x08, //0x00004b34 movq %rcx, (%r8) + //0x00004b37 LBB18_2 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004b37 movq $-1, %rax + //0x00004b3e LBB18_88 + 0x48, 0x83, 0xc4, 0x38, //0x00004b3e addq $56, %rsp + 0x5b, //0x00004b42 popq %rbx + 0x41, 0x5c, //0x00004b43 popq %r12 + 0x41, 0x5d, //0x00004b45 popq %r13 + 0x41, 0x5e, //0x00004b47 popq %r14 + 0x41, 0x5f, //0x00004b49 popq %r15 + 0x5d, //0x00004b4b popq %rbp + 0xc3, //0x00004b4c retq + //0x00004b4d LBB18_82 + 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x00004b4d movq $-7, %rax + 0xe9, 0xe5, 0xff, 0xff, 0xff, //0x00004b54 jmp LBB18_88 + //0x00004b59 LBB18_81 + 0x48, 0x83, 0xf9, 0xff, //0x00004b59 cmpq $-1, %rcx + 0x48, 0x8d, 0x45, 0xc0, //0x00004b5d leaq $-64(%rbp), %rax + 0x48, 0x0f, 0x44, 0x45, 0xc8, //0x00004b61 cmoveq $-56(%rbp), %rax + 0x48, 0x8b, 0x00, //0x00004b66 movq (%rax), %rax + 0x48, 0x8b, 0x55, 0xd0, //0x00004b69 movq $-48(%rbp), %rdx + 0x48, 0x89, 0x02, //0x00004b6d movq %rax, (%rdx) + 0x48, 0x89, 0xc8, //0x00004b70 movq %rcx, %rax + 0xe9, 0xc6, 0xff, 0xff, 0xff, //0x00004b73 jmp LBB18_88 + //0x00004b78 LBB18_92 + 0x49, 0x89, 0x10, //0x00004b78 movq %rdx, (%r8) + 0xe9, 0xbe, 0xff, 0xff, 0xff, //0x00004b7b jmp LBB18_88 + //0x00004b80 LBB18_86 + 0x49, 0x29, 0xcf, //0x00004b80 subq %rcx, %r15 + 0x48, 0x8b, 0x45, 0xd0, //0x00004b83 movq $-48(%rbp), %rax + 0x4c, 0x89, 0x38, //0x00004b87 movq %r15, (%rax) + //0x00004b8a LBB18_87 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00004b8a movq $-2, %rax + 0xe9, 0xa8, 0xff, 0xff, 0xff, //0x00004b91 jmp LBB18_88 + //0x00004b96 LBB18_90 + 0x49, 0x89, 0x08, //0x00004b96 movq %rcx, (%r8) + 0xe9, 0xa0, 0xff, 0xff, 0xff, //0x00004b99 jmp LBB18_88 + //0x00004b9e LBB18_93 + 0x4d, 0x89, 0x38, //0x00004b9e movq %r15, (%r8) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00004ba1 movq $-2, %rax + 0x80, 0x3b, 0x74, //0x00004ba8 cmpb $116, (%rbx) + 0x0f, 0x85, 0x8d, 0xff, 0xff, 0xff, //0x00004bab jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x01, //0x00004bb1 leaq $1(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004bb5 movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x01, 0x72, //0x00004bb8 cmpb $114, $1(%rdi,%r15) + 0x0f, 0x85, 0x7a, 0xff, 0xff, 0xff, //0x00004bbe jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x02, //0x00004bc4 leaq $2(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004bc8 movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x02, 0x75, //0x00004bcb cmpb $117, $2(%rdi,%r15) + 0x0f, 0x85, 0x67, 0xff, 0xff, 0xff, //0x00004bd1 jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x03, //0x00004bd7 leaq $3(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004bdb movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x03, 0x65, //0x00004bde cmpb $101, $3(%rdi,%r15) + 0x0f, 0x84, 0xa6, 0x00, 0x00, 0x00, //0x00004be4 je LBB18_106 + 0xe9, 0x4f, 0xff, 0xff, 0xff, //0x00004bea jmp LBB18_88 + //0x00004bef LBB18_97 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00004bef movq $-2, %rax + 0x80, 0xf9, 0x61, //0x00004bf6 cmpb $97, %cl + 0x0f, 0x85, 0x3f, 0xff, 0xff, 0xff, //0x00004bf9 jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x02, //0x00004bff leaq $2(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004c03 movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x02, 0x6c, //0x00004c06 cmpb $108, $2(%rdi,%r15) + 0x0f, 0x85, 0x2c, 0xff, 0xff, 0xff, //0x00004c0c jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x03, //0x00004c12 leaq $3(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004c16 movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x03, 0x73, //0x00004c19 cmpb $115, $3(%rdi,%r15) + 0x0f, 0x85, 0x19, 0xff, 0xff, 0xff, //0x00004c1f jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x04, //0x00004c25 leaq $4(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004c29 movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x04, 0x65, //0x00004c2c cmpb $101, $4(%rdi,%r15) + 0x0f, 0x85, 0x06, 0xff, 0xff, 0xff, //0x00004c32 jne LBB18_88 + 0x49, 0x83, 0xc7, 0x05, //0x00004c38 addq $5, %r15 + 0x4d, 0x89, 0x38, //0x00004c3c movq %r15, (%r8) + 0xe9, 0xfa, 0xfe, 0xff, 0xff, //0x00004c3f jmp LBB18_88 + //0x00004c44 LBB18_102 + 0x4d, 0x89, 0x38, //0x00004c44 movq %r15, (%r8) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00004c47 movq $-2, %rax + 0x80, 0x3b, 0x6e, //0x00004c4e cmpb $110, (%rbx) + 0x0f, 0x85, 0xe7, 0xfe, 0xff, 0xff, //0x00004c51 jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x01, //0x00004c57 leaq $1(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004c5b movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x01, 0x75, //0x00004c5e cmpb $117, $1(%rdi,%r15) + 0x0f, 0x85, 0xd4, 0xfe, 0xff, 0xff, //0x00004c64 jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x02, //0x00004c6a leaq $2(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004c6e movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x02, 0x6c, //0x00004c71 cmpb $108, $2(%rdi,%r15) + 0x0f, 0x85, 0xc1, 0xfe, 0xff, 0xff, //0x00004c77 jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x03, //0x00004c7d leaq $3(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004c81 movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x03, 0x6c, //0x00004c84 cmpb $108, $3(%rdi,%r15) + 0x0f, 0x85, 0xae, 0xfe, 0xff, 0xff, //0x00004c8a jne LBB18_88 + //0x00004c90 LBB18_106 + 0x49, 0x83, 0xc7, 0x04, //0x00004c90 addq $4, %r15 + 0x4d, 0x89, 0x38, //0x00004c94 movq %r15, (%r8) + 0xe9, 0xa2, 0xfe, 0xff, 0xff, //0x00004c97 jmp LBB18_88 + //0x00004c9c .p2align 2, 0x90 + // // .set L18_0_set_37, LBB18_37-LJTI18_0 + // // .set L18_0_set_41, LBB18_41-LJTI18_0 + // // .set L18_0_set_44, LBB18_44-LJTI18_0 + // // .set L18_0_set_48, LBB18_48-LJTI18_0 + // // .set L18_0_set_50, LBB18_50-LJTI18_0 + // // .set L18_0_set_52, LBB18_52-LJTI18_0 + //0x00004c9c LJTI18_0 + 0xa5, 0xfb, 0xff, 0xff, //0x00004c9c .long L18_0_set_37 + 0xcd, 0xfb, 0xff, 0xff, //0x00004ca0 .long L18_0_set_41 + 0xe4, 0xfb, 0xff, 0xff, //0x00004ca4 .long L18_0_set_44 + 0x43, 0xfc, 0xff, 0xff, //0x00004ca8 .long L18_0_set_48 + 0x59, 0xfc, 0xff, 0xff, //0x00004cac .long L18_0_set_50 + 0x6a, 0xfc, 0xff, 0xff, //0x00004cb0 .long L18_0_set_52 + // // .set L18_1_set_88, LBB18_88-LJTI18_1 + // // .set L18_1_set_87, LBB18_87-LJTI18_1 + // // .set L18_1_set_46, LBB18_46-LJTI18_1 + // // .set L18_1_set_66, LBB18_66-LJTI18_1 + // // .set L18_1_set_57, LBB18_57-LJTI18_1 + // // .set L18_1_set_68, LBB18_68-LJTI18_1 + // // .set L18_1_set_70, LBB18_70-LJTI18_1 + // // .set L18_1_set_73, LBB18_73-LJTI18_1 + // // .set L18_1_set_75, LBB18_75-LJTI18_1 + // // .set L18_1_set_3, LBB18_3-LJTI18_1 + //0x00004cb4 LJTI18_1 + 0x8a, 0xfe, 0xff, 0xff, //0x00004cb4 .long L18_1_set_88 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cb8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cbc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cc0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cc4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cc8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ccc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cd0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cd4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cd8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cdc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ce0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ce4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ce8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cec .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cf0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cf4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cf8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004cfc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d00 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d04 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d08 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d0c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d10 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d14 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d18 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d1c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d20 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d24 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d28 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d2c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d30 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d34 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d38 .long L18_1_set_87 + 0xdd, 0xfb, 0xff, 0xff, //0x00004d3c .long L18_1_set_46 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d40 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d44 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d48 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d4c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d50 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d54 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d58 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d5c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d60 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d64 .long L18_1_set_87 + 0xac, 0xfd, 0xff, 0xff, //0x00004d68 .long L18_1_set_66 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d6c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d70 .long L18_1_set_87 + 0x97, 0xfc, 0xff, 0xff, //0x00004d74 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004d78 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004d7c .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004d80 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004d84 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004d88 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004d8c .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004d90 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004d94 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004d98 .long L18_1_set_57 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d9c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004da0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004da4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004da8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dac .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004db0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004db4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004db8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dbc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dc0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dc4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dc8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dcc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dd0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dd4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dd8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ddc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004de0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004de4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004de8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dec .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004df0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004df4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004df8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dfc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e00 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e04 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e08 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e0c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e10 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e14 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e18 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e1c .long L18_1_set_87 + 0xd2, 0xfd, 0xff, 0xff, //0x00004e20 .long L18_1_set_68 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e24 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e28 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e2c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e30 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e34 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e38 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e3c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e40 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e44 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e48 .long L18_1_set_87 + 0xf6, 0xfd, 0xff, 0xff, //0x00004e4c .long L18_1_set_70 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e50 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e54 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e58 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e5c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e60 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e64 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e68 .long L18_1_set_87 + 0x23, 0xfe, 0xff, 0xff, //0x00004e6c .long L18_1_set_73 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e70 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e74 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e78 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e7c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e80 .long L18_1_set_87 + 0x48, 0xfe, 0xff, 0xff, //0x00004e84 .long L18_1_set_75 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e88 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e8c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e90 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e94 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e98 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e9c .long L18_1_set_87 + 0xa7, 0xf9, 0xff, 0xff, //0x00004ea0 .long L18_1_set_3 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004ea4 .p2align 4, 0x00 + //0x00004eb0 LCPI19_0 + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004eb0 .quad 1 + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004eb8 .quad 6 + //0x00004ec0 .p2align 4, 0x90 + //0x00004ec0 _skip_object + 0x55, //0x00004ec0 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004ec1 movq %rsp, %rbp + 0x48, 0x89, 0xd0, //0x00004ec4 movq %rdx, %rax + 0x48, 0x89, 0xf2, //0x00004ec7 movq %rsi, %rdx + 0x48, 0x89, 0xfe, //0x00004eca movq %rdi, %rsi + 0xc5, 0xf8, 0x28, 0x05, 0xdb, 0xff, 0xff, 0xff, //0x00004ecd vmovaps $-37(%rip), %xmm0 /* LCPI19_0+0(%rip) */ + 0xc5, 0xf8, 0x11, 0x00, //0x00004ed5 vmovups %xmm0, (%rax) + 0x48, 0x89, 0xc7, //0x00004ed9 movq %rax, %rdi + 0x5d, //0x00004edc popq %rbp + 0xe9, 0x1e, 0xf7, 0xff, 0xff, //0x00004edd jmp _fsm_exec + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004ee2 .p2align 4, 0x90 + //0x00004ef0 _skip_string + 0x55, //0x00004ef0 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004ef1 movq %rsp, %rbp + 0x41, 0x57, //0x00004ef4 pushq %r15 + 0x41, 0x56, //0x00004ef6 pushq %r14 + 0x41, 0x54, //0x00004ef8 pushq %r12 + 0x53, //0x00004efa pushq %rbx + 0x48, 0x83, 0xec, 0x10, //0x00004efb subq $16, %rsp + 0x48, 0x89, 0xd1, //0x00004eff movq %rdx, %rcx + 0x49, 0x89, 0xf6, //0x00004f02 movq %rsi, %r14 + 0x49, 0x89, 0xff, //0x00004f05 movq %rdi, %r15 + 0x48, 0xc7, 0x45, 0xd8, 0xff, 0xff, 0xff, 0xff, //0x00004f08 movq $-1, $-40(%rbp) + 0x48, 0x8b, 0x1e, //0x00004f10 movq (%rsi), %rbx + 0x4c, 0x8d, 0x65, 0xd8, //0x00004f13 leaq $-40(%rbp), %r12 + 0x48, 0x89, 0xde, //0x00004f17 movq %rbx, %rsi + 0x4c, 0x89, 0xe2, //0x00004f1a movq %r12, %rdx + 0xe8, 0xce, 0xe8, 0xff, 0xff, //0x00004f1d callq _advance_string + 0x48, 0x85, 0xc0, //0x00004f22 testq %rax, %rax + 0x0f, 0x88, 0x0e, 0x00, 0x00, 0x00, //0x00004f25 js LBB20_1 + 0x48, 0xff, 0xcb, //0x00004f2b decq %rbx + 0x48, 0x89, 0xc1, //0x00004f2e movq %rax, %rcx + 0x48, 0x89, 0xd8, //0x00004f31 movq %rbx, %rax + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00004f34 jmp LBB20_3 + //0x00004f39 LBB20_1 + 0x49, 0x83, 0xc7, 0x08, //0x00004f39 addq $8, %r15 + 0x48, 0x83, 0xf8, 0xff, //0x00004f3d cmpq $-1, %rax + 0x4d, 0x0f, 0x44, 0xe7, //0x00004f41 cmoveq %r15, %r12 + 0x49, 0x8b, 0x0c, 0x24, //0x00004f45 movq (%r12), %rcx + //0x00004f49 LBB20_3 + 0x49, 0x89, 0x0e, //0x00004f49 movq %rcx, (%r14) + 0x48, 0x83, 0xc4, 0x10, //0x00004f4c addq $16, %rsp + 0x5b, //0x00004f50 popq %rbx + 0x41, 0x5c, //0x00004f51 popq %r12 + 0x41, 0x5e, //0x00004f53 popq %r14 + 0x41, 0x5f, //0x00004f55 popq %r15 + 0x5d, //0x00004f57 popq %rbp + 0xc3, //0x00004f58 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004f59 .p2align 4, 0x90 + //0x00004f60 _skip_negative + 0x55, //0x00004f60 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004f61 movq %rsp, %rbp + 0x41, 0x56, //0x00004f64 pushq %r14 + 0x53, //0x00004f66 pushq %rbx + 0x49, 0x89, 0xf6, //0x00004f67 movq %rsi, %r14 + 0x48, 0x8b, 0x1e, //0x00004f6a movq (%rsi), %rbx + 0x48, 0x8b, 0x07, //0x00004f6d movq (%rdi), %rax + 0x48, 0x01, 0xd8, //0x00004f70 addq %rbx, %rax + 0x48, 0x8b, 0x77, 0x08, //0x00004f73 movq $8(%rdi), %rsi + 0x48, 0x29, 0xde, //0x00004f77 subq %rbx, %rsi + 0x48, 0x89, 0xc7, //0x00004f7a movq %rax, %rdi + 0xe8, 0xae, 0x00, 0x00, 0x00, //0x00004f7d callq _do_skip_number + 0x48, 0x85, 0xc0, //0x00004f82 testq %rax, %rax + 0x0f, 0x88, 0x0e, 0x00, 0x00, 0x00, //0x00004f85 js LBB21_1 + 0x48, 0x01, 0xd8, //0x00004f8b addq %rbx, %rax + 0x49, 0x89, 0x06, //0x00004f8e movq %rax, (%r14) + 0x48, 0xff, 0xcb, //0x00004f91 decq %rbx + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00004f94 jmp LBB21_3 + //0x00004f99 LBB21_1 + 0x48, 0xf7, 0xd0, //0x00004f99 notq %rax + 0x48, 0x01, 0xc3, //0x00004f9c addq %rax, %rbx + 0x49, 0x89, 0x1e, //0x00004f9f movq %rbx, (%r14) + 0x48, 0xc7, 0xc3, 0xfe, 0xff, 0xff, 0xff, //0x00004fa2 movq $-2, %rbx + //0x00004fa9 LBB21_3 + 0x48, 0x89, 0xd8, //0x00004fa9 movq %rbx, %rax + 0x5b, //0x00004fac popq %rbx + 0x41, 0x5e, //0x00004fad popq %r14 + 0x5d, //0x00004faf popq %rbp + 0xc3, //0x00004fb0 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004fb1 .p2align 4, 0x00 + //0x00004fc0 LCPI22_0 + 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, //0x00004fc0 QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' + //0x00004fd0 LCPI22_1 + 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, //0x00004fd0 QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' + //0x00004fe0 LCPI22_2 + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, //0x00004fe0 QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' + //0x00004ff0 LCPI22_3 + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, //0x00004ff0 QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' + //0x00005000 LCPI22_4 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00005000 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x00005010 LCPI22_5 + 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, //0x00005010 QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' + //0x00005020 LCPI22_6 + 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, //0x00005020 QUAD $0x6565656565656565; QUAD $0x6565656565656565 // .space 16, 'eeeeeeeeeeeeeeee' + //0x00005030 .p2align 4, 0x90 + //0x00005030 _do_skip_number + 0x55, //0x00005030 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005031 movq %rsp, %rbp + 0x41, 0x57, //0x00005034 pushq %r15 + 0x41, 0x56, //0x00005036 pushq %r14 + 0x41, 0x55, //0x00005038 pushq %r13 + 0x41, 0x54, //0x0000503a pushq %r12 + 0x53, //0x0000503c pushq %rbx + 0x48, 0x85, 0xf6, //0x0000503d testq %rsi, %rsi + 0x0f, 0x84, 0x64, 0x02, 0x00, 0x00, //0x00005040 je LBB22_34 + 0x80, 0x3f, 0x30, //0x00005046 cmpb $48, (%rdi) + 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x00005049 jne LBB22_5 + 0xba, 0x01, 0x00, 0x00, 0x00, //0x0000504f movl $1, %edx + 0x48, 0x83, 0xfe, 0x01, //0x00005054 cmpq $1, %rsi + 0x0f, 0x84, 0x20, 0x03, 0x00, 0x00, //0x00005058 je LBB22_52 + 0x8a, 0x47, 0x01, //0x0000505e movb $1(%rdi), %al + 0x04, 0xd2, //0x00005061 addb $-46, %al + 0x3c, 0x37, //0x00005063 cmpb $55, %al + 0x0f, 0x87, 0x13, 0x03, 0x00, 0x00, //0x00005065 ja LBB22_52 + 0x0f, 0xb6, 0xc0, //0x0000506b movzbl %al, %eax + 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x0000506e movabsq $36028797027352577, %rcx + 0x48, 0x0f, 0xa3, 0xc1, //0x00005078 btq %rax, %rcx + 0x0f, 0x83, 0xfc, 0x02, 0x00, 0x00, //0x0000507c jae LBB22_52 + //0x00005082 LBB22_5 + 0x48, 0x83, 0xfe, 0x10, //0x00005082 cmpq $16, %rsi + 0x0f, 0x82, 0x20, 0x03, 0x00, 0x00, //0x00005086 jb LBB22_57 + 0x4c, 0x8d, 0x5e, 0xf0, //0x0000508c leaq $-16(%rsi), %r11 + 0x4c, 0x89, 0xd8, //0x00005090 movq %r11, %rax + 0x48, 0x83, 0xe0, 0xf0, //0x00005093 andq $-16, %rax + 0x4c, 0x8d, 0x54, 0x38, 0x10, //0x00005097 leaq $16(%rax,%rdi), %r10 + 0x41, 0x83, 0xe3, 0x0f, //0x0000509c andl $15, %r11d + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000050a0 movq $-1, %r9 + 0xc5, 0x79, 0x6f, 0x05, 0x11, 0xff, 0xff, 0xff, //0x000050a7 vmovdqa $-239(%rip), %xmm8 /* LCPI22_0+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x0d, 0x19, 0xff, 0xff, 0xff, //0x000050af vmovdqa $-231(%rip), %xmm9 /* LCPI22_1+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x15, 0x21, 0xff, 0xff, 0xff, //0x000050b7 vmovdqa $-223(%rip), %xmm10 /* LCPI22_2+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x1d, 0x29, 0xff, 0xff, 0xff, //0x000050bf vmovdqa $-215(%rip), %xmm11 /* LCPI22_3+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x25, 0x31, 0xff, 0xff, 0xff, //0x000050c7 vmovdqa $-207(%rip), %xmm4 /* LCPI22_4+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x2d, 0x39, 0xff, 0xff, 0xff, //0x000050cf vmovdqa $-199(%rip), %xmm5 /* LCPI22_5+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x35, 0x41, 0xff, 0xff, 0xff, //0x000050d7 vmovdqa $-191(%rip), %xmm6 /* LCPI22_6+0(%rip) */ + 0x41, 0xbe, 0xff, 0xff, 0xff, 0xff, //0x000050df movl $4294967295, %r14d + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000050e5 movq $-1, %rax + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000050ec movq $-1, %r8 + 0x49, 0x89, 0xff, //0x000050f3 movq %rdi, %r15 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000050f6 .p2align 4, 0x90 + //0x00005100 LBB22_7 + 0xc4, 0xc1, 0x7a, 0x6f, 0x3f, //0x00005100 vmovdqu (%r15), %xmm7 + 0xc4, 0xc1, 0x41, 0x64, 0xc0, //0x00005105 vpcmpgtb %xmm8, %xmm7, %xmm0 + 0xc5, 0xb1, 0x64, 0xcf, //0x0000510a vpcmpgtb %xmm7, %xmm9, %xmm1 + 0xc5, 0xf9, 0xdb, 0xc1, //0x0000510e vpand %xmm1, %xmm0, %xmm0 + 0xc5, 0xa9, 0x74, 0xcf, //0x00005112 vpcmpeqb %xmm7, %xmm10, %xmm1 + 0xc5, 0xa1, 0x74, 0xd7, //0x00005116 vpcmpeqb %xmm7, %xmm11, %xmm2 + 0xc5, 0xe9, 0xeb, 0xc9, //0x0000511a vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xc1, 0xeb, 0xd4, //0x0000511e vpor %xmm4, %xmm7, %xmm2 + 0xc5, 0xe9, 0x74, 0xd6, //0x00005122 vpcmpeqb %xmm6, %xmm2, %xmm2 + 0xc5, 0xc1, 0x74, 0xfd, //0x00005126 vpcmpeqb %xmm5, %xmm7, %xmm7 + 0xc5, 0xe9, 0xeb, 0xdf, //0x0000512a vpor %xmm7, %xmm2, %xmm3 + 0xc5, 0xf1, 0xeb, 0xc0, //0x0000512e vpor %xmm0, %xmm1, %xmm0 + 0xc5, 0xe1, 0xeb, 0xc0, //0x00005132 vpor %xmm0, %xmm3, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd7, //0x00005136 vpmovmskb %xmm7, %edx + 0xc5, 0x79, 0xd7, 0xea, //0x0000513a vpmovmskb %xmm2, %r13d + 0xc5, 0x79, 0xd7, 0xe1, //0x0000513e vpmovmskb %xmm1, %r12d + 0xc5, 0xf9, 0xd7, 0xc8, //0x00005142 vpmovmskb %xmm0, %ecx + 0x4c, 0x31, 0xf1, //0x00005146 xorq %r14, %rcx + 0x48, 0x0f, 0xbc, 0xc9, //0x00005149 bsfq %rcx, %rcx + 0x83, 0xf9, 0x10, //0x0000514d cmpl $16, %ecx + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00005150 je LBB22_9 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x00005156 movl $-1, %ebx + 0xd3, 0xe3, //0x0000515b shll %cl, %ebx + 0xf7, 0xd3, //0x0000515d notl %ebx + 0x21, 0xda, //0x0000515f andl %ebx, %edx + 0x41, 0x21, 0xdd, //0x00005161 andl %ebx, %r13d + 0x44, 0x21, 0xe3, //0x00005164 andl %r12d, %ebx + 0x41, 0x89, 0xdc, //0x00005167 movl %ebx, %r12d + //0x0000516a LBB22_9 + 0x8d, 0x5a, 0xff, //0x0000516a leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x0000516d andl %edx, %ebx + 0x0f, 0x85, 0xfd, 0x01, 0x00, 0x00, //0x0000516f jne LBB22_50 + 0x41, 0x8d, 0x5d, 0xff, //0x00005175 leal $-1(%r13), %ebx + 0x44, 0x21, 0xeb, //0x00005179 andl %r13d, %ebx + 0x0f, 0x85, 0xf0, 0x01, 0x00, 0x00, //0x0000517c jne LBB22_50 + 0x41, 0x8d, 0x5c, 0x24, 0xff, //0x00005182 leal $-1(%r12), %ebx + 0x44, 0x21, 0xe3, //0x00005187 andl %r12d, %ebx + 0x0f, 0x85, 0xe2, 0x01, 0x00, 0x00, //0x0000518a jne LBB22_50 + 0x85, 0xd2, //0x00005190 testl %edx, %edx + 0x0f, 0x84, 0x19, 0x00, 0x00, 0x00, //0x00005192 je LBB22_15 + 0x4c, 0x89, 0xfb, //0x00005198 movq %r15, %rbx + 0x48, 0x29, 0xfb, //0x0000519b subq %rdi, %rbx + 0x0f, 0xbc, 0xd2, //0x0000519e bsfl %edx, %edx + 0x48, 0x01, 0xda, //0x000051a1 addq %rbx, %rdx + 0x49, 0x83, 0xf8, 0xff, //0x000051a4 cmpq $-1, %r8 + 0x0f, 0x85, 0xcd, 0x01, 0x00, 0x00, //0x000051a8 jne LBB22_51 + 0x49, 0x89, 0xd0, //0x000051ae movq %rdx, %r8 + //0x000051b1 LBB22_15 + 0x45, 0x85, 0xed, //0x000051b1 testl %r13d, %r13d + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x000051b4 je LBB22_18 + 0x4c, 0x89, 0xfb, //0x000051ba movq %r15, %rbx + 0x48, 0x29, 0xfb, //0x000051bd subq %rdi, %rbx + 0x41, 0x0f, 0xbc, 0xd5, //0x000051c0 bsfl %r13d, %edx + 0x48, 0x01, 0xda, //0x000051c4 addq %rbx, %rdx + 0x48, 0x83, 0xf8, 0xff, //0x000051c7 cmpq $-1, %rax + 0x0f, 0x85, 0xaa, 0x01, 0x00, 0x00, //0x000051cb jne LBB22_51 + 0x48, 0x89, 0xd0, //0x000051d1 movq %rdx, %rax + //0x000051d4 LBB22_18 + 0x45, 0x85, 0xe4, //0x000051d4 testl %r12d, %r12d + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x000051d7 je LBB22_21 + 0x4c, 0x89, 0xfb, //0x000051dd movq %r15, %rbx + 0x48, 0x29, 0xfb, //0x000051e0 subq %rdi, %rbx + 0x41, 0x0f, 0xbc, 0xd4, //0x000051e3 bsfl %r12d, %edx + 0x48, 0x01, 0xda, //0x000051e7 addq %rbx, %rdx + 0x49, 0x83, 0xf9, 0xff, //0x000051ea cmpq $-1, %r9 + 0x0f, 0x85, 0x87, 0x01, 0x00, 0x00, //0x000051ee jne LBB22_51 + 0x49, 0x89, 0xd1, //0x000051f4 movq %rdx, %r9 + //0x000051f7 LBB22_21 + 0x83, 0xf9, 0x10, //0x000051f7 cmpl $16, %ecx + 0x0f, 0x85, 0xb6, 0x00, 0x00, 0x00, //0x000051fa jne LBB22_35 + 0x49, 0x83, 0xc7, 0x10, //0x00005200 addq $16, %r15 + 0x48, 0x83, 0xc6, 0xf0, //0x00005204 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x0f, //0x00005208 cmpq $15, %rsi + 0x0f, 0x87, 0xee, 0xfe, 0xff, 0xff, //0x0000520c ja LBB22_7 + 0x4d, 0x85, 0xdb, //0x00005212 testq %r11, %r11 + 0x0f, 0x84, 0xa1, 0x00, 0x00, 0x00, //0x00005215 je LBB22_36 + //0x0000521b LBB22_24 + 0x4b, 0x8d, 0x0c, 0x1a, //0x0000521b leaq (%r10,%r11), %rcx + 0x48, 0x8d, 0x35, 0xa6, 0x01, 0x00, 0x00, //0x0000521f leaq $422(%rip), %rsi /* LJTI22_0+0(%rip) */ + 0xe9, 0x11, 0x00, 0x00, 0x00, //0x00005226 jmp LBB22_26 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000522b .p2align 4, 0x90 + //0x00005230 LBB22_25 + 0x49, 0x89, 0xda, //0x00005230 movq %rbx, %r10 + 0x49, 0xff, 0xcb, //0x00005233 decq %r11 + 0x0f, 0x84, 0x50, 0x01, 0x00, 0x00, //0x00005236 je LBB22_54 + //0x0000523c LBB22_26 + 0x41, 0x0f, 0xbe, 0x12, //0x0000523c movsbl (%r10), %edx + 0x83, 0xc2, 0xd5, //0x00005240 addl $-43, %edx + 0x83, 0xfa, 0x3a, //0x00005243 cmpl $58, %edx + 0x0f, 0x87, 0x70, 0x00, 0x00, 0x00, //0x00005246 ja LBB22_36 + 0x49, 0x8d, 0x5a, 0x01, //0x0000524c leaq $1(%r10), %rbx + 0x48, 0x63, 0x14, 0x96, //0x00005250 movslq (%rsi,%rdx,4), %rdx + 0x48, 0x01, 0xf2, //0x00005254 addq %rsi, %rdx + 0xff, 0xe2, //0x00005257 jmpq *%rdx + //0x00005259 LBB22_28 + 0x48, 0x89, 0xda, //0x00005259 movq %rbx, %rdx + 0x48, 0x29, 0xfa, //0x0000525c subq %rdi, %rdx + 0x49, 0x83, 0xf9, 0xff, //0x0000525f cmpq $-1, %r9 + 0x0f, 0x85, 0x3b, 0x01, 0x00, 0x00, //0x00005263 jne LBB22_58 + 0x48, 0xff, 0xca, //0x00005269 decq %rdx + 0x49, 0x89, 0xd1, //0x0000526c movq %rdx, %r9 + 0xe9, 0xbc, 0xff, 0xff, 0xff, //0x0000526f jmp LBB22_25 + //0x00005274 LBB22_30 + 0x48, 0x89, 0xda, //0x00005274 movq %rbx, %rdx + 0x48, 0x29, 0xfa, //0x00005277 subq %rdi, %rdx + 0x48, 0x83, 0xf8, 0xff, //0x0000527a cmpq $-1, %rax + 0x0f, 0x85, 0x20, 0x01, 0x00, 0x00, //0x0000527e jne LBB22_58 + 0x48, 0xff, 0xca, //0x00005284 decq %rdx + 0x48, 0x89, 0xd0, //0x00005287 movq %rdx, %rax + 0xe9, 0xa1, 0xff, 0xff, 0xff, //0x0000528a jmp LBB22_25 + //0x0000528f LBB22_32 + 0x48, 0x89, 0xda, //0x0000528f movq %rbx, %rdx + 0x48, 0x29, 0xfa, //0x00005292 subq %rdi, %rdx + 0x49, 0x83, 0xf8, 0xff, //0x00005295 cmpq $-1, %r8 + 0x0f, 0x85, 0x05, 0x01, 0x00, 0x00, //0x00005299 jne LBB22_58 + 0x48, 0xff, 0xca, //0x0000529f decq %rdx + 0x49, 0x89, 0xd0, //0x000052a2 movq %rdx, %r8 + 0xe9, 0x86, 0xff, 0xff, 0xff, //0x000052a5 jmp LBB22_25 + //0x000052aa LBB22_34 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000052aa movq $-1, %rax + 0xe9, 0xcb, 0x00, 0x00, 0x00, //0x000052b1 jmp LBB22_53 + //0x000052b6 LBB22_35 + 0x49, 0x01, 0xcf, //0x000052b6 addq %rcx, %r15 + 0x4d, 0x89, 0xfa, //0x000052b9 movq %r15, %r10 + //0x000052bc LBB22_36 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000052bc movq $-1, %rdx + 0x48, 0x85, 0xc0, //0x000052c3 testq %rax, %rax + 0x0f, 0x84, 0xb2, 0x00, 0x00, 0x00, //0x000052c6 je LBB22_52 + //0x000052cc LBB22_37 + 0x4d, 0x85, 0xc9, //0x000052cc testq %r9, %r9 + 0x0f, 0x84, 0xa9, 0x00, 0x00, 0x00, //0x000052cf je LBB22_52 + 0x4d, 0x85, 0xc0, //0x000052d5 testq %r8, %r8 + 0x0f, 0x84, 0xa0, 0x00, 0x00, 0x00, //0x000052d8 je LBB22_52 + 0x49, 0x29, 0xfa, //0x000052de subq %rdi, %r10 + 0x49, 0x8d, 0x4a, 0xff, //0x000052e1 leaq $-1(%r10), %rcx + 0x48, 0x39, 0xc8, //0x000052e5 cmpq %rcx, %rax + 0x0f, 0x84, 0x36, 0x00, 0x00, 0x00, //0x000052e8 je LBB22_45 + 0x49, 0x39, 0xc8, //0x000052ee cmpq %rcx, %r8 + 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x000052f1 je LBB22_45 + 0x49, 0x39, 0xc9, //0x000052f7 cmpq %rcx, %r9 + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000052fa je LBB22_45 + 0x4d, 0x85, 0xc9, //0x00005300 testq %r9, %r9 + 0x0f, 0x8e, 0x29, 0x00, 0x00, 0x00, //0x00005303 jle LBB22_46 + 0x49, 0x8d, 0x49, 0xff, //0x00005309 leaq $-1(%r9), %rcx + 0x48, 0x39, 0xc8, //0x0000530d cmpq %rcx, %rax + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x00005310 je LBB22_46 + 0x49, 0xf7, 0xd1, //0x00005316 notq %r9 + 0x4c, 0x89, 0xca, //0x00005319 movq %r9, %rdx + 0x4c, 0x89, 0xc8, //0x0000531c movq %r9, %rax + 0xe9, 0x5d, 0x00, 0x00, 0x00, //0x0000531f jmp LBB22_53 + //0x00005324 LBB22_45 + 0x49, 0xf7, 0xda, //0x00005324 negq %r10 + 0x4c, 0x89, 0xd2, //0x00005327 movq %r10, %rdx + 0x4c, 0x89, 0xd0, //0x0000532a movq %r10, %rax + 0xe9, 0x4f, 0x00, 0x00, 0x00, //0x0000532d jmp LBB22_53 + //0x00005332 LBB22_46 + 0x4c, 0x89, 0xc1, //0x00005332 movq %r8, %rcx + 0x48, 0x09, 0xc1, //0x00005335 orq %rax, %rcx + 0x49, 0x39, 0xc0, //0x00005338 cmpq %rax, %r8 + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x0000533b jl LBB22_49 + 0x48, 0x85, 0xc9, //0x00005341 testq %rcx, %rcx + 0x0f, 0x88, 0x0e, 0x00, 0x00, 0x00, //0x00005344 js LBB22_49 + 0x49, 0xf7, 0xd0, //0x0000534a notq %r8 + 0x4c, 0x89, 0xc2, //0x0000534d movq %r8, %rdx + 0x4c, 0x89, 0xc0, //0x00005350 movq %r8, %rax + 0xe9, 0x29, 0x00, 0x00, 0x00, //0x00005353 jmp LBB22_53 + //0x00005358 LBB22_49 + 0x48, 0x85, 0xc9, //0x00005358 testq %rcx, %rcx + 0x48, 0x8d, 0x48, 0xff, //0x0000535b leaq $-1(%rax), %rcx + 0x48, 0xf7, 0xd0, //0x0000535f notq %rax + 0x49, 0x0f, 0x48, 0xc2, //0x00005362 cmovsq %r10, %rax + 0x49, 0x39, 0xc8, //0x00005366 cmpq %rcx, %r8 + 0x49, 0x0f, 0x45, 0xc2, //0x00005369 cmovneq %r10, %rax + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x0000536d jmp LBB22_53 + //0x00005372 LBB22_50 + 0x49, 0x29, 0xff, //0x00005372 subq %rdi, %r15 + 0x0f, 0xbc, 0xd3, //0x00005375 bsfl %ebx, %edx + 0x4c, 0x01, 0xfa, //0x00005378 addq %r15, %rdx + //0x0000537b LBB22_51 + 0x48, 0xf7, 0xd2, //0x0000537b notq %rdx + //0x0000537e LBB22_52 + 0x48, 0x89, 0xd0, //0x0000537e movq %rdx, %rax + //0x00005381 LBB22_53 + 0x5b, //0x00005381 popq %rbx + 0x41, 0x5c, //0x00005382 popq %r12 + 0x41, 0x5d, //0x00005384 popq %r13 + 0x41, 0x5e, //0x00005386 popq %r14 + 0x41, 0x5f, //0x00005388 popq %r15 + 0x5d, //0x0000538a popq %rbp + 0xc3, //0x0000538b retq + //0x0000538c LBB22_54 + 0x49, 0x89, 0xca, //0x0000538c movq %rcx, %r10 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000538f movq $-1, %rdx + 0x48, 0x85, 0xc0, //0x00005396 testq %rax, %rax + 0x0f, 0x85, 0x2d, 0xff, 0xff, 0xff, //0x00005399 jne LBB22_37 + 0xe9, 0xda, 0xff, 0xff, 0xff, //0x0000539f jmp LBB22_52 + //0x000053a4 LBB22_58 + 0x48, 0xf7, 0xda, //0x000053a4 negq %rdx + 0xe9, 0xd2, 0xff, 0xff, 0xff, //0x000053a7 jmp LBB22_52 + //0x000053ac LBB22_57 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000053ac movq $-1, %r8 + 0x49, 0x89, 0xfa, //0x000053b3 movq %rdi, %r10 + 0x49, 0x89, 0xf3, //0x000053b6 movq %rsi, %r11 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000053b9 movq $-1, %rax + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000053c0 movq $-1, %r9 + 0xe9, 0x4f, 0xfe, 0xff, 0xff, //0x000053c7 jmp LBB22_24 + //0x000053cc .p2align 2, 0x90 + // // .set L22_0_set_28, LBB22_28-LJTI22_0 + // // .set L22_0_set_36, LBB22_36-LJTI22_0 + // // .set L22_0_set_32, LBB22_32-LJTI22_0 + // // .set L22_0_set_25, LBB22_25-LJTI22_0 + // // .set L22_0_set_30, LBB22_30-LJTI22_0 + //0x000053cc LJTI22_0 + 0x8d, 0xfe, 0xff, 0xff, //0x000053cc .long L22_0_set_28 + 0xf0, 0xfe, 0xff, 0xff, //0x000053d0 .long L22_0_set_36 + 0x8d, 0xfe, 0xff, 0xff, //0x000053d4 .long L22_0_set_28 + 0xc3, 0xfe, 0xff, 0xff, //0x000053d8 .long L22_0_set_32 + 0xf0, 0xfe, 0xff, 0xff, //0x000053dc .long L22_0_set_36 + 0x64, 0xfe, 0xff, 0xff, //0x000053e0 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x000053e4 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x000053e8 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x000053ec .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x000053f0 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x000053f4 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x000053f8 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x000053fc .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x00005400 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x00005404 .long L22_0_set_25 + 0xf0, 0xfe, 0xff, 0xff, //0x00005408 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000540c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005410 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005414 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005418 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000541c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005420 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005424 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005428 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000542c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005430 .long L22_0_set_36 + 0xa8, 0xfe, 0xff, 0xff, //0x00005434 .long L22_0_set_30 + 0xf0, 0xfe, 0xff, 0xff, //0x00005438 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000543c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005440 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005444 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005448 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000544c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005450 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005454 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005458 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000545c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005460 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005464 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005468 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000546c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005470 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005474 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005478 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000547c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005480 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005484 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005488 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000548c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005490 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005494 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005498 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000549c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054a0 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054a4 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054a8 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054ac .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054b0 .long L22_0_set_36 + 0xa8, 0xfe, 0xff, 0xff, //0x000054b4 .long L22_0_set_30 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000054b8 .p2align 4, 0x90 + //0x000054c0 _skip_positive + 0x55, //0x000054c0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000054c1 movq %rsp, %rbp + 0x41, 0x57, //0x000054c4 pushq %r15 + 0x41, 0x56, //0x000054c6 pushq %r14 + 0x53, //0x000054c8 pushq %rbx + 0x50, //0x000054c9 pushq %rax + 0x49, 0x89, 0xf6, //0x000054ca movq %rsi, %r14 + 0x4c, 0x8b, 0x3e, //0x000054cd movq (%rsi), %r15 + 0x49, 0x8d, 0x5f, 0xff, //0x000054d0 leaq $-1(%r15), %rbx + 0x48, 0x8b, 0x07, //0x000054d4 movq (%rdi), %rax + 0x48, 0x01, 0xd8, //0x000054d7 addq %rbx, %rax + 0x48, 0x8b, 0x77, 0x08, //0x000054da movq $8(%rdi), %rsi + 0x48, 0x29, 0xde, //0x000054de subq %rbx, %rsi + 0x48, 0x89, 0xc7, //0x000054e1 movq %rax, %rdi + 0xe8, 0x47, 0xfb, 0xff, 0xff, //0x000054e4 callq _do_skip_number + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000054e9 movq $-2, %rcx + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x000054f0 movq $-2, %rdx + 0x48, 0x29, 0xc2, //0x000054f7 subq %rax, %rdx + 0x48, 0x85, 0xc0, //0x000054fa testq %rax, %rax + 0x48, 0x8d, 0x40, 0xff, //0x000054fd leaq $-1(%rax), %rax + 0x48, 0x0f, 0x48, 0xc2, //0x00005501 cmovsq %rdx, %rax + 0x48, 0x0f, 0x49, 0xcb, //0x00005505 cmovnsq %rbx, %rcx + 0x4c, 0x01, 0xf8, //0x00005509 addq %r15, %rax + 0x49, 0x89, 0x06, //0x0000550c movq %rax, (%r14) + 0x48, 0x89, 0xc8, //0x0000550f movq %rcx, %rax + 0x48, 0x83, 0xc4, 0x08, //0x00005512 addq $8, %rsp + 0x5b, //0x00005516 popq %rbx + 0x41, 0x5e, //0x00005517 popq %r14 + 0x41, 0x5f, //0x00005519 popq %r15 + 0x5d, //0x0000551b popq %rbp + 0xc3, //0x0000551c retq + 0x90, 0x90, 0x90, //0x0000551d .p2align 4, 0x90 + //0x00005520 _skip_number + 0x55, //0x00005520 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005521 movq %rsp, %rbp + 0x41, 0x57, //0x00005524 pushq %r15 + 0x41, 0x56, //0x00005526 pushq %r14 + 0x41, 0x54, //0x00005528 pushq %r12 + 0x53, //0x0000552a pushq %rbx + 0x49, 0x89, 0xf6, //0x0000552b movq %rsi, %r14 + 0x4c, 0x8b, 0x27, //0x0000552e movq (%rdi), %r12 + 0x48, 0x8b, 0x77, 0x08, //0x00005531 movq $8(%rdi), %rsi + 0x4d, 0x8b, 0x3e, //0x00005535 movq (%r14), %r15 + 0x31, 0xc0, //0x00005538 xorl %eax, %eax + 0x43, 0x80, 0x3c, 0x3c, 0x2d, //0x0000553a cmpb $45, (%r12,%r15) + 0x4b, 0x8d, 0x1c, 0x3c, //0x0000553f leaq (%r12,%r15), %rbx + 0x0f, 0x94, 0xc0, //0x00005543 sete %al + 0x48, 0x01, 0xc3, //0x00005546 addq %rax, %rbx + 0x48, 0x29, 0xc6, //0x00005549 subq %rax, %rsi + 0x0f, 0x84, 0x3b, 0x00, 0x00, 0x00, //0x0000554c je LBB24_6 + 0x49, 0x39, 0xf7, //0x00005552 cmpq %rsi, %r15 + 0x0f, 0x83, 0x0c, 0x00, 0x00, 0x00, //0x00005555 jae LBB24_3 + 0x8a, 0x03, //0x0000555b movb (%rbx), %al + 0x04, 0xd0, //0x0000555d addb $-48, %al + 0x3c, 0x09, //0x0000555f cmpb $9, %al + 0x0f, 0x87, 0x38, 0x00, 0x00, 0x00, //0x00005561 ja LBB24_8 + //0x00005567 LBB24_3 + 0x48, 0x89, 0xdf, //0x00005567 movq %rbx, %rdi + 0xe8, 0xc1, 0xfa, 0xff, 0xff, //0x0000556a callq _do_skip_number + 0x48, 0x85, 0xc0, //0x0000556f testq %rax, %rax + 0x0f, 0x88, 0x21, 0x00, 0x00, 0x00, //0x00005572 js LBB24_7 + 0x48, 0x01, 0xc3, //0x00005578 addq %rax, %rbx + //0x0000557b LBB24_5 + 0x4c, 0x29, 0xe3, //0x0000557b subq %r12, %rbx + 0x49, 0x89, 0x1e, //0x0000557e movq %rbx, (%r14) + 0x4c, 0x89, 0xf8, //0x00005581 movq %r15, %rax + 0x5b, //0x00005584 popq %rbx + 0x41, 0x5c, //0x00005585 popq %r12 + 0x41, 0x5e, //0x00005587 popq %r14 + 0x41, 0x5f, //0x00005589 popq %r15 + 0x5d, //0x0000558b popq %rbp + 0xc3, //0x0000558c retq + //0x0000558d LBB24_6 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000558d movq $-1, %r15 + 0xe9, 0xe2, 0xff, 0xff, 0xff, //0x00005594 jmp LBB24_5 + //0x00005599 LBB24_7 + 0x48, 0xf7, 0xd0, //0x00005599 notq %rax + 0x48, 0x01, 0xc3, //0x0000559c addq %rax, %rbx + //0x0000559f LBB24_8 + 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x0000559f movq $-2, %r15 + 0xe9, 0xd0, 0xff, 0xff, 0xff, //0x000055a6 jmp LBB24_5 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000055ab .p2align 4, 0x90 + //0x000055b0 _skip_one + 0x55, //0x000055b0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000055b1 movq %rsp, %rbp + 0x48, 0x89, 0xd0, //0x000055b4 movq %rdx, %rax + 0x48, 0x89, 0xf2, //0x000055b7 movq %rsi, %rdx + 0x48, 0x89, 0xfe, //0x000055ba movq %rdi, %rsi + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x000055bd movl $1, %edi + 0xc4, 0xe1, 0xf9, 0x6e, 0xc7, //0x000055c2 vmovq %rdi, %xmm0 + 0xc5, 0xfa, 0x7f, 0x00, //0x000055c7 vmovdqu %xmm0, (%rax) + 0x48, 0x89, 0xc7, //0x000055cb movq %rax, %rdi + 0x5d, //0x000055ce popq %rbp + 0xe9, 0x2c, 0xf0, 0xff, 0xff, //0x000055cf jmp _fsm_exec + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000055d4 .p2align 4, 0x90 + //0x000055e0 _validate_one + 0x55, //0x000055e0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000055e1 movq %rsp, %rbp + 0x48, 0x89, 0xd0, //0x000055e4 movq %rdx, %rax + 0x48, 0x89, 0xf2, //0x000055e7 movq %rsi, %rdx + 0x48, 0x89, 0xfe, //0x000055ea movq %rdi, %rsi + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x000055ed movl $1, %ecx + 0xc4, 0xe1, 0xf9, 0x6e, 0xc1, //0x000055f2 vmovq %rcx, %xmm0 + 0xc5, 0xfa, 0x7f, 0x00, //0x000055f7 vmovdqu %xmm0, (%rax) + 0xb9, 0x20, 0x00, 0x00, 0x00, //0x000055fb movl $32, %ecx + 0x48, 0x89, 0xc7, //0x00005600 movq %rax, %rdi + 0x5d, //0x00005603 popq %rbp + 0xe9, 0xf7, 0xef, 0xff, 0xff, //0x00005604 jmp _fsm_exec + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005609 .p2align 4, 0x00 + //0x00005610 LCPI27_0 + 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, //0x00005610 QUAD $0x2c2c2c2c2c2c2c2c; QUAD $0x2c2c2c2c2c2c2c2c // .space 16, ',,,,,,,,,,,,,,,,' + //0x00005620 LCPI27_1 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00005620 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x00005630 LCPI27_2 + 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, //0x00005630 QUAD $0x7d7d7d7d7d7d7d7d; QUAD $0x7d7d7d7d7d7d7d7d // .space 16, '}}}}}}}}}}}}}}}}' + //0x00005640 LCPI27_3 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x00005640 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x00005650 LCPI27_4 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x00005650 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x00005660 LCPI27_5 + 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, //0x00005660 QUAD $0x7b7b7b7b7b7b7b7b; QUAD $0x7b7b7b7b7b7b7b7b // .space 16, '{{{{{{{{{{{{{{{{' + //0x00005670 LCPI27_6 + 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, //0x00005670 QUAD $0x5b5b5b5b5b5b5b5b; QUAD $0x5b5b5b5b5b5b5b5b // .space 16, '[[[[[[[[[[[[[[[[' + //0x00005680 LCPI27_7 + 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, //0x00005680 QUAD $0x5d5d5d5d5d5d5d5d; QUAD $0x5d5d5d5d5d5d5d5d // .space 16, ']]]]]]]]]]]]]]]]' + //0x00005690 .p2align 4, 0x90 + //0x00005690 _skip_one_fast + 0x55, //0x00005690 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005691 movq %rsp, %rbp + 0x41, 0x57, //0x00005694 pushq %r15 + 0x41, 0x56, //0x00005696 pushq %r14 + 0x41, 0x55, //0x00005698 pushq %r13 + 0x41, 0x54, //0x0000569a pushq %r12 + 0x53, //0x0000569c pushq %rbx + 0x48, 0x81, 0xec, 0x80, 0x00, 0x00, 0x00, //0x0000569d subq $128, %rsp + 0x4c, 0x8b, 0x37, //0x000056a4 movq (%rdi), %r14 + 0x4c, 0x8b, 0x47, 0x08, //0x000056a7 movq $8(%rdi), %r8 + 0x48, 0x8b, 0x16, //0x000056ab movq (%rsi), %rdx + 0x48, 0x89, 0xd0, //0x000056ae movq %rdx, %rax + 0x4c, 0x29, 0xc0, //0x000056b1 subq %r8, %rax + 0x0f, 0x83, 0x2a, 0x00, 0x00, 0x00, //0x000056b4 jae LBB27_5 + 0x41, 0x8a, 0x0c, 0x16, //0x000056ba movb (%r14,%rdx), %cl + 0x80, 0xf9, 0x0d, //0x000056be cmpb $13, %cl + 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x000056c1 je LBB27_5 + 0x80, 0xf9, 0x20, //0x000056c7 cmpb $32, %cl + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000056ca je LBB27_5 + 0x80, 0xc1, 0xf7, //0x000056d0 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x000056d3 cmpb $1, %cl + 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x000056d6 jbe LBB27_5 + 0x49, 0x89, 0xd3, //0x000056dc movq %rdx, %r11 + 0xe9, 0x2b, 0x01, 0x00, 0x00, //0x000056df jmp LBB27_27 + //0x000056e4 LBB27_5 + 0x4c, 0x8d, 0x5a, 0x01, //0x000056e4 leaq $1(%rdx), %r11 + 0x4d, 0x39, 0xc3, //0x000056e8 cmpq %r8, %r11 + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x000056eb jae LBB27_9 + 0x43, 0x8a, 0x0c, 0x1e, //0x000056f1 movb (%r14,%r11), %cl + 0x80, 0xf9, 0x0d, //0x000056f5 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000056f8 je LBB27_9 + 0x80, 0xf9, 0x20, //0x000056fe cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00005701 je LBB27_9 + 0x80, 0xc1, 0xf7, //0x00005707 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x0000570a cmpb $1, %cl + 0x0f, 0x87, 0xfc, 0x00, 0x00, 0x00, //0x0000570d ja LBB27_27 + //0x00005713 LBB27_9 + 0x4c, 0x8d, 0x5a, 0x02, //0x00005713 leaq $2(%rdx), %r11 + 0x4d, 0x39, 0xc3, //0x00005717 cmpq %r8, %r11 + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x0000571a jae LBB27_13 + 0x43, 0x8a, 0x0c, 0x1e, //0x00005720 movb (%r14,%r11), %cl + 0x80, 0xf9, 0x0d, //0x00005724 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00005727 je LBB27_13 + 0x80, 0xf9, 0x20, //0x0000572d cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00005730 je LBB27_13 + 0x80, 0xc1, 0xf7, //0x00005736 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x00005739 cmpb $1, %cl + 0x0f, 0x87, 0xcd, 0x00, 0x00, 0x00, //0x0000573c ja LBB27_27 + //0x00005742 LBB27_13 + 0x4c, 0x8d, 0x5a, 0x03, //0x00005742 leaq $3(%rdx), %r11 + 0x4d, 0x39, 0xc3, //0x00005746 cmpq %r8, %r11 + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x00005749 jae LBB27_17 + 0x43, 0x8a, 0x0c, 0x1e, //0x0000574f movb (%r14,%r11), %cl + 0x80, 0xf9, 0x0d, //0x00005753 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00005756 je LBB27_17 + 0x80, 0xf9, 0x20, //0x0000575c cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000575f je LBB27_17 + 0x80, 0xc1, 0xf7, //0x00005765 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x00005768 cmpb $1, %cl + 0x0f, 0x87, 0x9e, 0x00, 0x00, 0x00, //0x0000576b ja LBB27_27 + //0x00005771 LBB27_17 + 0x48, 0x8d, 0x4a, 0x04, //0x00005771 leaq $4(%rdx), %rcx + 0x49, 0x39, 0xc8, //0x00005775 cmpq %rcx, %r8 + 0x0f, 0x86, 0x4b, 0x00, 0x00, 0x00, //0x00005778 jbe LBB27_23 + 0x49, 0x39, 0xc8, //0x0000577e cmpq %rcx, %r8 + 0x0f, 0x84, 0x51, 0x00, 0x00, 0x00, //0x00005781 je LBB27_24 + 0x4b, 0x8d, 0x0c, 0x06, //0x00005787 leaq (%r14,%r8), %rcx + 0x48, 0x83, 0xc0, 0x04, //0x0000578b addq $4, %rax + 0x4e, 0x8d, 0x5c, 0x32, 0x05, //0x0000578f leaq $5(%rdx,%r14), %r11 + 0x48, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00005794 movabsq $4294977024, %rdx + 0x90, 0x90, //0x0000579e .p2align 4, 0x90 + //0x000057a0 LBB27_20 + 0x41, 0x0f, 0xbe, 0x5b, 0xff, //0x000057a0 movsbl $-1(%r11), %ebx + 0x83, 0xfb, 0x20, //0x000057a5 cmpl $32, %ebx + 0x0f, 0x87, 0x48, 0x00, 0x00, 0x00, //0x000057a8 ja LBB27_26 + 0x48, 0x0f, 0xa3, 0xda, //0x000057ae btq %rbx, %rdx + 0x0f, 0x83, 0x3e, 0x00, 0x00, 0x00, //0x000057b2 jae LBB27_26 + 0x49, 0xff, 0xc3, //0x000057b8 incq %r11 + 0x48, 0xff, 0xc0, //0x000057bb incq %rax + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x000057be jne LBB27_20 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x000057c4 jmp LBB27_25 + //0x000057c9 LBB27_23 + 0x48, 0x89, 0x0e, //0x000057c9 movq %rcx, (%rsi) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000057cc movq $-1, %rax + 0xe9, 0x46, 0x01, 0x00, 0x00, //0x000057d3 jmp LBB27_45 + //0x000057d8 LBB27_24 + 0x4c, 0x01, 0xf1, //0x000057d8 addq %r14, %rcx + //0x000057db LBB27_25 + 0x4c, 0x29, 0xf1, //0x000057db subq %r14, %rcx + 0x49, 0x89, 0xcb, //0x000057de movq %rcx, %r11 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000057e1 movq $-1, %rax + 0x4d, 0x39, 0xc3, //0x000057e8 cmpq %r8, %r11 + 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x000057eb jb LBB27_27 + 0xe9, 0x28, 0x01, 0x00, 0x00, //0x000057f1 jmp LBB27_45 + //0x000057f6 LBB27_26 + 0x4c, 0x89, 0xf0, //0x000057f6 movq %r14, %rax + 0x48, 0xf7, 0xd0, //0x000057f9 notq %rax + 0x49, 0x01, 0xc3, //0x000057fc addq %rax, %r11 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000057ff movq $-1, %rax + 0x4d, 0x39, 0xc3, //0x00005806 cmpq %r8, %r11 + 0x0f, 0x83, 0x0f, 0x01, 0x00, 0x00, //0x00005809 jae LBB27_45 + //0x0000580f LBB27_27 + 0x49, 0x8d, 0x5b, 0x01, //0x0000580f leaq $1(%r11), %rbx + 0x48, 0x89, 0x1e, //0x00005813 movq %rbx, (%rsi) + 0x43, 0x0f, 0xbe, 0x0c, 0x1e, //0x00005816 movsbl (%r14,%r11), %ecx + 0x83, 0xf9, 0x7b, //0x0000581b cmpl $123, %ecx + 0x0f, 0x87, 0x1f, 0x01, 0x00, 0x00, //0x0000581e ja LBB27_47 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00005824 movq $-1, %rax + 0x48, 0x8d, 0x15, 0x26, 0x0a, 0x00, 0x00, //0x0000582b leaq $2598(%rip), %rdx /* LJTI27_0+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x00005832 movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x00005836 addq %rdx, %rcx + 0xff, 0xe1, //0x00005839 jmpq *%rcx + //0x0000583b LBB27_29 + 0x48, 0x8b, 0x4f, 0x08, //0x0000583b movq $8(%rdi), %rcx + 0x48, 0x89, 0xc8, //0x0000583f movq %rcx, %rax + 0x48, 0x29, 0xd8, //0x00005842 subq %rbx, %rax + 0x4c, 0x01, 0xf3, //0x00005845 addq %r14, %rbx + 0x48, 0x83, 0xf8, 0x10, //0x00005848 cmpq $16, %rax + 0x0f, 0x82, 0x77, 0x00, 0x00, 0x00, //0x0000584c jb LBB27_34 + 0x4c, 0x29, 0xd9, //0x00005852 subq %r11, %rcx + 0x48, 0x83, 0xc1, 0xef, //0x00005855 addq $-17, %rcx + 0x48, 0x89, 0xca, //0x00005859 movq %rcx, %rdx + 0x48, 0x83, 0xe2, 0xf0, //0x0000585c andq $-16, %rdx + 0x4c, 0x01, 0xda, //0x00005860 addq %r11, %rdx + 0x49, 0x8d, 0x54, 0x16, 0x11, //0x00005863 leaq $17(%r14,%rdx), %rdx + 0x83, 0xe1, 0x0f, //0x00005868 andl $15, %ecx + 0xc5, 0xf9, 0x6f, 0x05, 0x9d, 0xfd, 0xff, 0xff, //0x0000586b vmovdqa $-611(%rip), %xmm0 /* LCPI27_0+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0xa5, 0xfd, 0xff, 0xff, //0x00005873 vmovdqa $-603(%rip), %xmm1 /* LCPI27_1+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x15, 0xad, 0xfd, 0xff, 0xff, //0x0000587b vmovdqa $-595(%rip), %xmm2 /* LCPI27_2+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005883 .p2align 4, 0x90 + //0x00005890 LBB27_31 + 0xc5, 0xfa, 0x6f, 0x1b, //0x00005890 vmovdqu (%rbx), %xmm3 + 0xc5, 0xe1, 0x74, 0xe0, //0x00005894 vpcmpeqb %xmm0, %xmm3, %xmm4 + 0xc5, 0xe1, 0xeb, 0xd9, //0x00005898 vpor %xmm1, %xmm3, %xmm3 + 0xc5, 0xe1, 0x74, 0xda, //0x0000589c vpcmpeqb %xmm2, %xmm3, %xmm3 + 0xc5, 0xe1, 0xeb, 0xdc, //0x000058a0 vpor %xmm4, %xmm3, %xmm3 + 0xc5, 0xf9, 0xd7, 0xfb, //0x000058a4 vpmovmskb %xmm3, %edi + 0x66, 0x85, 0xff, //0x000058a8 testw %di, %di + 0x0f, 0x85, 0x5a, 0x00, 0x00, 0x00, //0x000058ab jne LBB27_42 + 0x48, 0x83, 0xc3, 0x10, //0x000058b1 addq $16, %rbx + 0x48, 0x83, 0xc0, 0xf0, //0x000058b5 addq $-16, %rax + 0x48, 0x83, 0xf8, 0x0f, //0x000058b9 cmpq $15, %rax + 0x0f, 0x87, 0xcd, 0xff, 0xff, 0xff, //0x000058bd ja LBB27_31 + 0x48, 0x89, 0xc8, //0x000058c3 movq %rcx, %rax + 0x48, 0x89, 0xd3, //0x000058c6 movq %rdx, %rbx + //0x000058c9 LBB27_34 + 0x48, 0x85, 0xc0, //0x000058c9 testq %rax, %rax + 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x000058cc je LBB27_41 + 0x48, 0x8d, 0x0c, 0x03, //0x000058d2 leaq (%rbx,%rax), %rcx + //0x000058d6 LBB27_36 + 0x0f, 0xb6, 0x13, //0x000058d6 movzbl (%rbx), %edx + 0x80, 0xfa, 0x2c, //0x000058d9 cmpb $44, %dl + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x000058dc je LBB27_41 + 0x80, 0xfa, 0x7d, //0x000058e2 cmpb $125, %dl + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x000058e5 je LBB27_41 + 0x80, 0xfa, 0x5d, //0x000058eb cmpb $93, %dl + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x000058ee je LBB27_41 + 0x48, 0xff, 0xc3, //0x000058f4 incq %rbx + 0x48, 0xff, 0xc8, //0x000058f7 decq %rax + 0x0f, 0x85, 0xd6, 0xff, 0xff, 0xff, //0x000058fa jne LBB27_36 + 0x48, 0x89, 0xcb, //0x00005900 movq %rcx, %rbx + //0x00005903 LBB27_41 + 0x4c, 0x29, 0xf3, //0x00005903 subq %r14, %rbx + 0xe9, 0x0d, 0x00, 0x00, 0x00, //0x00005906 jmp LBB27_43 + //0x0000590b LBB27_42 + 0x0f, 0xb7, 0xc7, //0x0000590b movzwl %di, %eax + 0x48, 0x0f, 0xbc, 0xc0, //0x0000590e bsfq %rax, %rax + 0x4c, 0x29, 0xf3, //0x00005912 subq %r14, %rbx + 0x48, 0x01, 0xc3, //0x00005915 addq %rax, %rbx + //0x00005918 LBB27_43 + 0x48, 0x89, 0x1e, //0x00005918 movq %rbx, (%rsi) + //0x0000591b LBB27_44 + 0x4c, 0x89, 0xd8, //0x0000591b movq %r11, %rax + //0x0000591e LBB27_45 + 0x48, 0x8d, 0x65, 0xd8, //0x0000591e leaq $-40(%rbp), %rsp + 0x5b, //0x00005922 popq %rbx + 0x41, 0x5c, //0x00005923 popq %r12 + 0x41, 0x5d, //0x00005925 popq %r13 + 0x41, 0x5e, //0x00005927 popq %r14 + 0x41, 0x5f, //0x00005929 popq %r15 + 0x5d, //0x0000592b popq %rbp + 0xc5, 0xf8, 0x77, //0x0000592c vzeroupper + 0xc3, //0x0000592f retq + //0x00005930 LBB27_46 + 0x49, 0x8d, 0x4b, 0x04, //0x00005930 leaq $4(%r11), %rcx + 0x48, 0x3b, 0x4f, 0x08, //0x00005934 cmpq $8(%rdi), %rcx + 0x0f, 0x87, 0xe0, 0xff, 0xff, 0xff, //0x00005938 ja LBB27_45 + 0xe9, 0xa6, 0x04, 0x00, 0x00, //0x0000593e jmp LBB27_83 + //0x00005943 LBB27_47 + 0x4c, 0x89, 0x1e, //0x00005943 movq %r11, (%rsi) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00005946 movq $-2, %rax + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000594d jmp LBB27_45 + //0x00005952 LBB27_48 + 0x4c, 0x8b, 0x47, 0x08, //0x00005952 movq $8(%rdi), %r8 + 0x4d, 0x89, 0xc7, //0x00005956 movq %r8, %r15 + 0x49, 0x29, 0xdf, //0x00005959 subq %rbx, %r15 + 0x49, 0x83, 0xff, 0x20, //0x0000595c cmpq $32, %r15 + 0x0f, 0x8c, 0xbb, 0x08, 0x00, 0x00, //0x00005960 jl LBB27_117 + 0x41, 0xb9, 0xff, 0xff, 0xff, 0xff, //0x00005966 movl $4294967295, %r9d + 0x4f, 0x8d, 0x14, 0x1e, //0x0000596c leaq (%r14,%r11), %r10 + 0x4d, 0x29, 0xd8, //0x00005970 subq %r11, %r8 + 0x41, 0xbd, 0x1f, 0x00, 0x00, 0x00, //0x00005973 movl $31, %r13d + 0x45, 0x31, 0xff, //0x00005979 xorl %r15d, %r15d + 0xc5, 0xf9, 0x6f, 0x05, 0xbc, 0xfc, 0xff, 0xff, //0x0000597c vmovdqa $-836(%rip), %xmm0 /* LCPI27_3+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0xc4, 0xfc, 0xff, 0xff, //0x00005984 vmovdqa $-828(%rip), %xmm1 /* LCPI27_4+0(%rip) */ + 0x45, 0x31, 0xe4, //0x0000598c xorl %r12d, %r12d + 0xe9, 0x2e, 0x00, 0x00, 0x00, //0x0000598f jmp LBB27_50 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005994 .p2align 4, 0x90 + //0x000059a0 LBB27_52 + 0x45, 0x31, 0xe4, //0x000059a0 xorl %r12d, %r12d + 0x85, 0xc9, //0x000059a3 testl %ecx, %ecx + 0x0f, 0x85, 0x9e, 0x00, 0x00, 0x00, //0x000059a5 jne LBB27_110 + //0x000059ab LBB27_53 + 0x49, 0x83, 0xc7, 0x20, //0x000059ab addq $32, %r15 + 0x4b, 0x8d, 0x4c, 0x28, 0xe0, //0x000059af leaq $-32(%r8,%r13), %rcx + 0x49, 0x83, 0xc5, 0xe0, //0x000059b4 addq $-32, %r13 + 0x48, 0x83, 0xf9, 0x3f, //0x000059b8 cmpq $63, %rcx + 0x0f, 0x8e, 0xdc, 0x07, 0x00, 0x00, //0x000059bc jle LBB27_54 + //0x000059c2 LBB27_50 + 0xc4, 0x81, 0x7a, 0x6f, 0x54, 0x3a, 0x01, //0x000059c2 vmovdqu $1(%r10,%r15), %xmm2 + 0xc4, 0x81, 0x7a, 0x6f, 0x5c, 0x3a, 0x11, //0x000059c9 vmovdqu $17(%r10,%r15), %xmm3 + 0xc5, 0xe9, 0x74, 0xe0, //0x000059d0 vpcmpeqb %xmm0, %xmm2, %xmm4 + 0xc5, 0xf9, 0xd7, 0xfc, //0x000059d4 vpmovmskb %xmm4, %edi + 0xc5, 0xe1, 0x74, 0xe0, //0x000059d8 vpcmpeqb %xmm0, %xmm3, %xmm4 + 0xc5, 0xf9, 0xd7, 0xcc, //0x000059dc vpmovmskb %xmm4, %ecx + 0x48, 0xc1, 0xe1, 0x10, //0x000059e0 shlq $16, %rcx + 0x48, 0x09, 0xf9, //0x000059e4 orq %rdi, %rcx + 0xc5, 0xe9, 0x74, 0xd1, //0x000059e7 vpcmpeqb %xmm1, %xmm2, %xmm2 + 0xc5, 0xf9, 0xd7, 0xda, //0x000059eb vpmovmskb %xmm2, %ebx + 0xc5, 0xe1, 0x74, 0xd1, //0x000059ef vpcmpeqb %xmm1, %xmm3, %xmm2 + 0xc5, 0xf9, 0xd7, 0xfa, //0x000059f3 vpmovmskb %xmm2, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x000059f7 shlq $16, %rdi + 0x48, 0x09, 0xdf, //0x000059fb orq %rbx, %rdi + 0x48, 0x89, 0xfb, //0x000059fe movq %rdi, %rbx + 0x4c, 0x09, 0xe3, //0x00005a01 orq %r12, %rbx + 0x0f, 0x84, 0x96, 0xff, 0xff, 0xff, //0x00005a04 je LBB27_52 + 0x44, 0x89, 0xe3, //0x00005a0a movl %r12d, %ebx + 0x44, 0x31, 0xcb, //0x00005a0d xorl %r9d, %ebx + 0x21, 0xdf, //0x00005a10 andl %ebx, %edi + 0x8d, 0x1c, 0x3f, //0x00005a12 leal (%rdi,%rdi), %ebx + 0x44, 0x09, 0xe3, //0x00005a15 orl %r12d, %ebx + 0x41, 0x8d, 0x91, 0xab, 0xaa, 0xaa, 0xaa, //0x00005a18 leal $-1431655765(%r9), %edx + 0x31, 0xda, //0x00005a1f xorl %ebx, %edx + 0x21, 0xfa, //0x00005a21 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00005a23 andl $-1431655766, %edx + 0x45, 0x31, 0xe4, //0x00005a29 xorl %r12d, %r12d + 0x01, 0xfa, //0x00005a2c addl %edi, %edx + 0x41, 0x0f, 0x92, 0xc4, //0x00005a2e setb %r12b + 0x01, 0xd2, //0x00005a32 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00005a34 xorl $1431655765, %edx + 0x21, 0xda, //0x00005a3a andl %ebx, %edx + 0x44, 0x31, 0xca, //0x00005a3c xorl %r9d, %edx + 0x21, 0xd1, //0x00005a3f andl %edx, %ecx + 0x85, 0xc9, //0x00005a41 testl %ecx, %ecx + 0x0f, 0x84, 0x62, 0xff, 0xff, 0xff, //0x00005a43 je LBB27_53 + //0x00005a49 LBB27_110 + 0x48, 0x0f, 0xbc, 0xc1, //0x00005a49 bsfq %rcx, %rax + 0x49, 0x01, 0xc2, //0x00005a4d addq %rax, %r10 + 0x4d, 0x01, 0xfa, //0x00005a50 addq %r15, %r10 + 0x4d, 0x29, 0xf2, //0x00005a53 subq %r14, %r10 + 0x49, 0x83, 0xc2, 0x02, //0x00005a56 addq $2, %r10 + 0x4c, 0x89, 0x16, //0x00005a5a movq %r10, (%rsi) + 0xe9, 0xb9, 0xfe, 0xff, 0xff, //0x00005a5d jmp LBB27_44 + //0x00005a62 LBB27_57 + 0x48, 0x8b, 0x4f, 0x08, //0x00005a62 movq $8(%rdi), %rcx + 0x48, 0x29, 0xd9, //0x00005a66 subq %rbx, %rcx + 0x49, 0x01, 0xde, //0x00005a69 addq %rbx, %r14 + 0x45, 0x31, 0xe4, //0x00005a6c xorl %r12d, %r12d + 0xc5, 0x79, 0x6f, 0x15, 0xc9, 0xfb, 0xff, 0xff, //0x00005a6f vmovdqa $-1079(%rip), %xmm10 /* LCPI27_3+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0xd1, 0xfb, 0xff, 0xff, //0x00005a77 vmovdqa $-1071(%rip), %xmm1 /* LCPI27_4+0(%rip) */ + 0xc4, 0x41, 0x31, 0x76, 0xc9, //0x00005a7f vpcmpeqd %xmm9, %xmm9, %xmm9 + 0xc5, 0xf9, 0x6f, 0x1d, 0xe4, 0xfb, 0xff, 0xff, //0x00005a84 vmovdqa $-1052(%rip), %xmm3 /* LCPI27_6+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x25, 0xec, 0xfb, 0xff, 0xff, //0x00005a8c vmovdqa $-1044(%rip), %xmm4 /* LCPI27_7+0(%rip) */ + 0xc4, 0x41, 0x38, 0x57, 0xc0, //0x00005a94 vxorps %xmm8, %xmm8, %xmm8 + 0x31, 0xdb, //0x00005a99 xorl %ebx, %ebx + 0x45, 0x31, 0xc0, //0x00005a9b xorl %r8d, %r8d + 0x45, 0x31, 0xff, //0x00005a9e xorl %r15d, %r15d + 0x48, 0x83, 0xf9, 0x40, //0x00005aa1 cmpq $64, %rcx + 0x48, 0x89, 0x4c, 0x24, 0x08, //0x00005aa5 movq %rcx, $8(%rsp) + 0x4c, 0x89, 0x44, 0x24, 0x10, //0x00005aaa movq %r8, $16(%rsp) + 0x0f, 0x8d, 0x33, 0x01, 0x00, 0x00, //0x00005aaf jge LBB27_58 + //0x00005ab5 LBB27_67 + 0x48, 0x85, 0xc9, //0x00005ab5 testq %rcx, %rcx + 0x0f, 0x8e, 0x6b, 0x07, 0x00, 0x00, //0x00005ab8 jle LBB27_118 + 0xc5, 0x7c, 0x11, 0x44, 0x24, 0x40, //0x00005abe vmovups %ymm8, $64(%rsp) + 0xc5, 0x7c, 0x11, 0x44, 0x24, 0x20, //0x00005ac4 vmovups %ymm8, $32(%rsp) + 0x44, 0x89, 0xf1, //0x00005aca movl %r14d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00005acd andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00005ad3 cmpl $4033, %ecx + 0x0f, 0x82, 0x09, 0x01, 0x00, 0x00, //0x00005ad9 jb LBB27_58 + 0x48, 0x83, 0x7c, 0x24, 0x08, 0x20, //0x00005adf cmpq $32, $8(%rsp) + 0x0f, 0x82, 0x2e, 0x00, 0x00, 0x00, //0x00005ae5 jb LBB27_71 + 0xc4, 0xc1, 0x78, 0x10, 0x06, //0x00005aeb vmovups (%r14), %xmm0 + 0xc5, 0xf8, 0x11, 0x44, 0x24, 0x20, //0x00005af0 vmovups %xmm0, $32(%rsp) + 0xc4, 0xc1, 0x7a, 0x6f, 0x46, 0x10, //0x00005af6 vmovdqu $16(%r14), %xmm0 + 0xc5, 0xfa, 0x7f, 0x44, 0x24, 0x30, //0x00005afc vmovdqu %xmm0, $48(%rsp) + 0x49, 0x83, 0xc6, 0x20, //0x00005b02 addq $32, %r14 + 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x00005b06 movq $8(%rsp), %rcx + 0x48, 0x8d, 0x51, 0xe0, //0x00005b0b leaq $-32(%rcx), %rdx + 0x4c, 0x8d, 0x44, 0x24, 0x40, //0x00005b0f leaq $64(%rsp), %r8 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00005b14 jmp LBB27_72 + //0x00005b19 LBB27_71 + 0x4c, 0x8d, 0x44, 0x24, 0x20, //0x00005b19 leaq $32(%rsp), %r8 + 0x48, 0x8b, 0x54, 0x24, 0x08, //0x00005b1e movq $8(%rsp), %rdx + //0x00005b23 LBB27_72 + 0x48, 0x83, 0xfa, 0x10, //0x00005b23 cmpq $16, %rdx + 0x0f, 0x82, 0x5c, 0x00, 0x00, 0x00, //0x00005b27 jb LBB27_73 + 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00005b2d vmovdqu (%r14), %xmm0 + 0xc4, 0xc1, 0x7a, 0x7f, 0x00, //0x00005b32 vmovdqu %xmm0, (%r8) + 0x49, 0x83, 0xc6, 0x10, //0x00005b37 addq $16, %r14 + 0x49, 0x83, 0xc0, 0x10, //0x00005b3b addq $16, %r8 + 0x48, 0x83, 0xc2, 0xf0, //0x00005b3f addq $-16, %rdx + 0x48, 0x83, 0xfa, 0x08, //0x00005b43 cmpq $8, %rdx + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x00005b47 jae LBB27_78 + //0x00005b4d LBB27_74 + 0x48, 0x83, 0xfa, 0x04, //0x00005b4d cmpq $4, %rdx + 0x0f, 0x8c, 0x58, 0x00, 0x00, 0x00, //0x00005b51 jl LBB27_75 + //0x00005b57 LBB27_79 + 0x41, 0x8b, 0x0e, //0x00005b57 movl (%r14), %ecx + 0x41, 0x89, 0x08, //0x00005b5a movl %ecx, (%r8) + 0x49, 0x83, 0xc6, 0x04, //0x00005b5d addq $4, %r14 + 0x49, 0x83, 0xc0, 0x04, //0x00005b61 addq $4, %r8 + 0x48, 0x83, 0xc2, 0xfc, //0x00005b65 addq $-4, %rdx + 0x48, 0x83, 0xfa, 0x02, //0x00005b69 cmpq $2, %rdx + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x00005b6d jae LBB27_80 + //0x00005b73 LBB27_76 + 0x4c, 0x89, 0xf1, //0x00005b73 movq %r14, %rcx + 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00005b76 leaq $32(%rsp), %r14 + 0x48, 0x85, 0xd2, //0x00005b7b testq %rdx, %rdx + 0x0f, 0x85, 0x5a, 0x00, 0x00, 0x00, //0x00005b7e jne LBB27_81 + 0xe9, 0x5f, 0x00, 0x00, 0x00, //0x00005b84 jmp LBB27_58 + //0x00005b89 LBB27_73 + 0x48, 0x83, 0xfa, 0x08, //0x00005b89 cmpq $8, %rdx + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00005b8d jb LBB27_74 + //0x00005b93 LBB27_78 + 0x49, 0x8b, 0x0e, //0x00005b93 movq (%r14), %rcx + 0x49, 0x89, 0x08, //0x00005b96 movq %rcx, (%r8) + 0x49, 0x83, 0xc6, 0x08, //0x00005b99 addq $8, %r14 + 0x49, 0x83, 0xc0, 0x08, //0x00005b9d addq $8, %r8 + 0x48, 0x83, 0xc2, 0xf8, //0x00005ba1 addq $-8, %rdx + 0x48, 0x83, 0xfa, 0x04, //0x00005ba5 cmpq $4, %rdx + 0x0f, 0x8d, 0xa8, 0xff, 0xff, 0xff, //0x00005ba9 jge LBB27_79 + //0x00005baf LBB27_75 + 0x48, 0x83, 0xfa, 0x02, //0x00005baf cmpq $2, %rdx + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00005bb3 jb LBB27_76 + //0x00005bb9 LBB27_80 + 0x41, 0x0f, 0xb7, 0x0e, //0x00005bb9 movzwl (%r14), %ecx + 0x66, 0x41, 0x89, 0x08, //0x00005bbd movw %cx, (%r8) + 0x49, 0x83, 0xc6, 0x02, //0x00005bc1 addq $2, %r14 + 0x49, 0x83, 0xc0, 0x02, //0x00005bc5 addq $2, %r8 + 0x48, 0x83, 0xc2, 0xfe, //0x00005bc9 addq $-2, %rdx + 0x4c, 0x89, 0xf1, //0x00005bcd movq %r14, %rcx + 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00005bd0 leaq $32(%rsp), %r14 + 0x48, 0x85, 0xd2, //0x00005bd5 testq %rdx, %rdx + 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00005bd8 je LBB27_58 + //0x00005bde LBB27_81 + 0x8a, 0x09, //0x00005bde movb (%rcx), %cl + 0x41, 0x88, 0x08, //0x00005be0 movb %cl, (%r8) + 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00005be3 leaq $32(%rsp), %r14 + //0x00005be8 LBB27_58 + 0xc4, 0xc1, 0x7a, 0x6f, 0x16, //0x00005be8 vmovdqu (%r14), %xmm2 + 0xc4, 0xc1, 0x7a, 0x6f, 0x6e, 0x10, //0x00005bed vmovdqu $16(%r14), %xmm5 + 0xc4, 0xc1, 0x7a, 0x6f, 0x7e, 0x20, //0x00005bf3 vmovdqu $32(%r14), %xmm7 + 0xc4, 0xc1, 0x7a, 0x6f, 0x76, 0x30, //0x00005bf9 vmovdqu $48(%r14), %xmm6 + 0xc5, 0xa9, 0x74, 0xc2, //0x00005bff vpcmpeqb %xmm2, %xmm10, %xmm0 + 0xc5, 0x79, 0xd7, 0xe8, //0x00005c03 vpmovmskb %xmm0, %r13d + 0xc5, 0xa9, 0x74, 0xc5, //0x00005c07 vpcmpeqb %xmm5, %xmm10, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00005c0b vpmovmskb %xmm0, %ecx + 0xc5, 0xa9, 0x74, 0xc7, //0x00005c0f vpcmpeqb %xmm7, %xmm10, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd0, //0x00005c13 vpmovmskb %xmm0, %edx + 0xc5, 0xa9, 0x74, 0xc6, //0x00005c17 vpcmpeqb %xmm6, %xmm10, %xmm0 + 0xc5, 0x79, 0xd7, 0xc8, //0x00005c1b vpmovmskb %xmm0, %r9d + 0x49, 0xc1, 0xe1, 0x30, //0x00005c1f shlq $48, %r9 + 0x48, 0xc1, 0xe2, 0x20, //0x00005c23 shlq $32, %rdx + 0x48, 0xc1, 0xe1, 0x10, //0x00005c27 shlq $16, %rcx + 0x49, 0x09, 0xcd, //0x00005c2b orq %rcx, %r13 + 0x49, 0x09, 0xd5, //0x00005c2e orq %rdx, %r13 + 0x4d, 0x09, 0xcd, //0x00005c31 orq %r9, %r13 + 0xc5, 0xe9, 0x74, 0xc1, //0x00005c34 vpcmpeqb %xmm1, %xmm2, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00005c38 vpmovmskb %xmm0, %ecx + 0xc5, 0xd1, 0x74, 0xc1, //0x00005c3c vpcmpeqb %xmm1, %xmm5, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd0, //0x00005c40 vpmovmskb %xmm0, %edx + 0xc5, 0xc1, 0x74, 0xc1, //0x00005c44 vpcmpeqb %xmm1, %xmm7, %xmm0 + 0xc5, 0x79, 0xd7, 0xc8, //0x00005c48 vpmovmskb %xmm0, %r9d + 0xc5, 0xc9, 0x74, 0xc1, //0x00005c4c vpcmpeqb %xmm1, %xmm6, %xmm0 + 0xc5, 0x79, 0xd7, 0xd0, //0x00005c50 vpmovmskb %xmm0, %r10d + 0x49, 0xc1, 0xe2, 0x30, //0x00005c54 shlq $48, %r10 + 0x49, 0xc1, 0xe1, 0x20, //0x00005c58 shlq $32, %r9 + 0x48, 0xc1, 0xe2, 0x10, //0x00005c5c shlq $16, %rdx + 0x48, 0x09, 0xd1, //0x00005c60 orq %rdx, %rcx + 0x4c, 0x09, 0xc9, //0x00005c63 orq %r9, %rcx + 0x4c, 0x09, 0xd1, //0x00005c66 orq %r10, %rcx + 0x48, 0x89, 0xca, //0x00005c69 movq %rcx, %rdx + 0x48, 0x09, 0xda, //0x00005c6c orq %rbx, %rdx + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x00005c6f je LBB27_60 + 0x48, 0x89, 0xda, //0x00005c75 movq %rbx, %rdx + 0x48, 0xf7, 0xd2, //0x00005c78 notq %rdx + 0x48, 0x21, 0xca, //0x00005c7b andq %rcx, %rdx + 0x4c, 0x8d, 0x0c, 0x12, //0x00005c7e leaq (%rdx,%rdx), %r9 + 0x49, 0x09, 0xd9, //0x00005c82 orq %rbx, %r9 + 0x4d, 0x89, 0xca, //0x00005c85 movq %r9, %r10 + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00005c88 movabsq $-6148914691236517206, %rbx + 0x49, 0x31, 0xda, //0x00005c92 xorq %rbx, %r10 + 0x48, 0x21, 0xd9, //0x00005c95 andq %rbx, %rcx + 0x4c, 0x21, 0xd1, //0x00005c98 andq %r10, %rcx + 0x31, 0xdb, //0x00005c9b xorl %ebx, %ebx + 0x48, 0x01, 0xd1, //0x00005c9d addq %rdx, %rcx + 0x0f, 0x92, 0xc3, //0x00005ca0 setb %bl + 0x48, 0x01, 0xc9, //0x00005ca3 addq %rcx, %rcx + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00005ca6 movabsq $6148914691236517205, %rdx + 0x48, 0x31, 0xd1, //0x00005cb0 xorq %rdx, %rcx + 0x4c, 0x21, 0xc9, //0x00005cb3 andq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x00005cb6 notq %rcx + 0xe9, 0x09, 0x00, 0x00, 0x00, //0x00005cb9 jmp LBB27_61 + //0x00005cbe LBB27_60 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00005cbe movq $-1, %rcx + 0x31, 0xdb, //0x00005cc5 xorl %ebx, %ebx + //0x00005cc7 LBB27_61 + 0x48, 0x89, 0x5c, 0x24, 0x18, //0x00005cc7 movq %rbx, $24(%rsp) + 0x4c, 0x21, 0xe9, //0x00005ccc andq %r13, %rcx + 0xc4, 0xe1, 0xf9, 0x6e, 0xc1, //0x00005ccf vmovq %rcx, %xmm0 + 0xc4, 0xc3, 0x79, 0x44, 0xc1, 0x00, //0x00005cd4 vpclmulqdq $0, %xmm9, %xmm0, %xmm0 + 0xc4, 0xc1, 0xf9, 0x7e, 0xc5, //0x00005cda vmovq %xmm0, %r13 + 0x4d, 0x31, 0xe5, //0x00005cdf xorq %r12, %r13 + 0xc5, 0xe9, 0x74, 0xc3, //0x00005ce2 vpcmpeqb %xmm3, %xmm2, %xmm0 + 0xc5, 0x79, 0xd7, 0xd0, //0x00005ce6 vpmovmskb %xmm0, %r10d + 0xc5, 0xd1, 0x74, 0xc3, //0x00005cea vpcmpeqb %xmm3, %xmm5, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00005cee vpmovmskb %xmm0, %ecx + 0xc5, 0xc1, 0x74, 0xc3, //0x00005cf2 vpcmpeqb %xmm3, %xmm7, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd0, //0x00005cf6 vpmovmskb %xmm0, %edx + 0xc5, 0xc9, 0x74, 0xc3, //0x00005cfa vpcmpeqb %xmm3, %xmm6, %xmm0 + 0xc5, 0x79, 0xd7, 0xc8, //0x00005cfe vpmovmskb %xmm0, %r9d + 0x49, 0xc1, 0xe1, 0x30, //0x00005d02 shlq $48, %r9 + 0x48, 0xc1, 0xe2, 0x20, //0x00005d06 shlq $32, %rdx + 0x48, 0xc1, 0xe1, 0x10, //0x00005d0a shlq $16, %rcx + 0x49, 0x09, 0xca, //0x00005d0e orq %rcx, %r10 + 0x49, 0x09, 0xd2, //0x00005d11 orq %rdx, %r10 + 0x4d, 0x09, 0xca, //0x00005d14 orq %r9, %r10 + 0x4d, 0x89, 0xe9, //0x00005d17 movq %r13, %r9 + 0x49, 0xf7, 0xd1, //0x00005d1a notq %r9 + 0x4d, 0x21, 0xca, //0x00005d1d andq %r9, %r10 + 0xc5, 0xe9, 0x74, 0xc4, //0x00005d20 vpcmpeqb %xmm4, %xmm2, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00005d24 vpmovmskb %xmm0, %ecx + 0xc5, 0xd1, 0x74, 0xc4, //0x00005d28 vpcmpeqb %xmm4, %xmm5, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd0, //0x00005d2c vpmovmskb %xmm0, %edx + 0xc5, 0xc1, 0x74, 0xc4, //0x00005d30 vpcmpeqb %xmm4, %xmm7, %xmm0 + 0xc5, 0x79, 0xd7, 0xc0, //0x00005d34 vpmovmskb %xmm0, %r8d + 0xc5, 0xc9, 0x74, 0xc4, //0x00005d38 vpcmpeqb %xmm4, %xmm6, %xmm0 + 0xc5, 0x79, 0xd7, 0xe0, //0x00005d3c vpmovmskb %xmm0, %r12d + 0x49, 0xc1, 0xe4, 0x30, //0x00005d40 shlq $48, %r12 + 0x49, 0xc1, 0xe0, 0x20, //0x00005d44 shlq $32, %r8 + 0x48, 0xc1, 0xe2, 0x10, //0x00005d48 shlq $16, %rdx + 0x48, 0x09, 0xd1, //0x00005d4c orq %rdx, %rcx + 0x4c, 0x09, 0xc1, //0x00005d4f orq %r8, %rcx + 0x4c, 0x09, 0xe1, //0x00005d52 orq %r12, %rcx + 0x4c, 0x21, 0xc9, //0x00005d55 andq %r9, %rcx + 0x0f, 0x84, 0x3e, 0x00, 0x00, 0x00, //0x00005d58 je LBB27_65 + 0x4c, 0x8b, 0x44, 0x24, 0x10, //0x00005d5e movq $16(%rsp), %r8 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005d63 .p2align 4, 0x90 + //0x00005d70 LBB27_63 + 0x48, 0x8d, 0x59, 0xff, //0x00005d70 leaq $-1(%rcx), %rbx + 0x48, 0x89, 0xda, //0x00005d74 movq %rbx, %rdx + 0x4c, 0x21, 0xd2, //0x00005d77 andq %r10, %rdx + 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x00005d7a popcntq %rdx, %rdx + 0x4c, 0x01, 0xc2, //0x00005d7f addq %r8, %rdx + 0x4c, 0x39, 0xfa, //0x00005d82 cmpq %r15, %rdx + 0x0f, 0x86, 0xe0, 0x03, 0x00, 0x00, //0x00005d85 jbe LBB27_109 + 0x49, 0xff, 0xc7, //0x00005d8b incq %r15 + 0x48, 0x21, 0xd9, //0x00005d8e andq %rbx, %rcx + 0x0f, 0x85, 0xd9, 0xff, 0xff, 0xff, //0x00005d91 jne LBB27_63 + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00005d97 jmp LBB27_66 + //0x00005d9c LBB27_65 + 0x4c, 0x8b, 0x44, 0x24, 0x10, //0x00005d9c movq $16(%rsp), %r8 + //0x00005da1 LBB27_66 + 0x49, 0xc1, 0xfd, 0x3f, //0x00005da1 sarq $63, %r13 + 0xf3, 0x49, 0x0f, 0xb8, 0xca, //0x00005da5 popcntq %r10, %rcx + 0x49, 0x01, 0xc8, //0x00005daa addq %rcx, %r8 + 0x49, 0x83, 0xc6, 0x40, //0x00005dad addq $64, %r14 + 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x00005db1 movq $8(%rsp), %rcx + 0x48, 0x83, 0xc1, 0xc0, //0x00005db6 addq $-64, %rcx + 0x4d, 0x89, 0xec, //0x00005dba movq %r13, %r12 + 0x48, 0x8b, 0x5c, 0x24, 0x18, //0x00005dbd movq $24(%rsp), %rbx + 0x48, 0x83, 0xf9, 0x40, //0x00005dc2 cmpq $64, %rcx + 0x48, 0x89, 0x4c, 0x24, 0x08, //0x00005dc6 movq %rcx, $8(%rsp) + 0x4c, 0x89, 0x44, 0x24, 0x10, //0x00005dcb movq %r8, $16(%rsp) + 0x0f, 0x8d, 0x12, 0xfe, 0xff, 0xff, //0x00005dd0 jge LBB27_58 + 0xe9, 0xda, 0xfc, 0xff, 0xff, //0x00005dd6 jmp LBB27_67 + //0x00005ddb LBB27_82 + 0x49, 0x8d, 0x4b, 0x05, //0x00005ddb leaq $5(%r11), %rcx + 0x48, 0x3b, 0x4f, 0x08, //0x00005ddf cmpq $8(%rdi), %rcx + 0x0f, 0x87, 0x35, 0xfb, 0xff, 0xff, //0x00005de3 ja LBB27_45 + //0x00005de9 LBB27_83 + 0x48, 0x89, 0x0e, //0x00005de9 movq %rcx, (%rsi) + 0xe9, 0x2a, 0xfb, 0xff, 0xff, //0x00005dec jmp LBB27_44 + //0x00005df1 LBB27_84 + 0x48, 0x8b, 0x4f, 0x08, //0x00005df1 movq $8(%rdi), %rcx + 0x48, 0x29, 0xd9, //0x00005df5 subq %rbx, %rcx + 0x49, 0x01, 0xde, //0x00005df8 addq %rbx, %r14 + 0x45, 0x31, 0xe4, //0x00005dfb xorl %r12d, %r12d + 0xc5, 0x79, 0x6f, 0x15, 0x3a, 0xf8, 0xff, 0xff, //0x00005dfe vmovdqa $-1990(%rip), %xmm10 /* LCPI27_3+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0x42, 0xf8, 0xff, 0xff, //0x00005e06 vmovdqa $-1982(%rip), %xmm1 /* LCPI27_4+0(%rip) */ + 0xc4, 0x41, 0x31, 0x76, 0xc9, //0x00005e0e vpcmpeqd %xmm9, %xmm9, %xmm9 + 0xc5, 0xf9, 0x6f, 0x1d, 0x45, 0xf8, 0xff, 0xff, //0x00005e13 vmovdqa $-1979(%rip), %xmm3 /* LCPI27_5+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x25, 0x0d, 0xf8, 0xff, 0xff, //0x00005e1b vmovdqa $-2035(%rip), %xmm4 /* LCPI27_2+0(%rip) */ + 0xc4, 0x41, 0x38, 0x57, 0xc0, //0x00005e23 vxorps %xmm8, %xmm8, %xmm8 + 0x31, 0xdb, //0x00005e28 xorl %ebx, %ebx + 0x45, 0x31, 0xc0, //0x00005e2a xorl %r8d, %r8d + 0x45, 0x31, 0xff, //0x00005e2d xorl %r15d, %r15d + 0x48, 0x83, 0xf9, 0x40, //0x00005e30 cmpq $64, %rcx + 0x48, 0x89, 0x4c, 0x24, 0x08, //0x00005e34 movq %rcx, $8(%rsp) + 0x4c, 0x89, 0x44, 0x24, 0x10, //0x00005e39 movq %r8, $16(%rsp) + 0x0f, 0x8d, 0x33, 0x01, 0x00, 0x00, //0x00005e3e jge LBB27_85 + //0x00005e44 LBB27_94 + 0x48, 0x85, 0xc9, //0x00005e44 testq %rcx, %rcx + 0x0f, 0x8e, 0xdc, 0x03, 0x00, 0x00, //0x00005e47 jle LBB27_118 + 0xc5, 0x7c, 0x11, 0x44, 0x24, 0x40, //0x00005e4d vmovups %ymm8, $64(%rsp) + 0xc5, 0x7c, 0x11, 0x44, 0x24, 0x20, //0x00005e53 vmovups %ymm8, $32(%rsp) + 0x44, 0x89, 0xf1, //0x00005e59 movl %r14d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00005e5c andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00005e62 cmpl $4033, %ecx + 0x0f, 0x82, 0x09, 0x01, 0x00, 0x00, //0x00005e68 jb LBB27_85 + 0x48, 0x83, 0x7c, 0x24, 0x08, 0x20, //0x00005e6e cmpq $32, $8(%rsp) + 0x0f, 0x82, 0x2e, 0x00, 0x00, 0x00, //0x00005e74 jb LBB27_98 + 0xc4, 0xc1, 0x78, 0x10, 0x06, //0x00005e7a vmovups (%r14), %xmm0 + 0xc5, 0xf8, 0x11, 0x44, 0x24, 0x20, //0x00005e7f vmovups %xmm0, $32(%rsp) + 0xc4, 0xc1, 0x7a, 0x6f, 0x46, 0x10, //0x00005e85 vmovdqu $16(%r14), %xmm0 + 0xc5, 0xfa, 0x7f, 0x44, 0x24, 0x30, //0x00005e8b vmovdqu %xmm0, $48(%rsp) + 0x49, 0x83, 0xc6, 0x20, //0x00005e91 addq $32, %r14 + 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x00005e95 movq $8(%rsp), %rcx + 0x48, 0x8d, 0x51, 0xe0, //0x00005e9a leaq $-32(%rcx), %rdx + 0x4c, 0x8d, 0x44, 0x24, 0x40, //0x00005e9e leaq $64(%rsp), %r8 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00005ea3 jmp LBB27_99 + //0x00005ea8 LBB27_98 + 0x4c, 0x8d, 0x44, 0x24, 0x20, //0x00005ea8 leaq $32(%rsp), %r8 + 0x48, 0x8b, 0x54, 0x24, 0x08, //0x00005ead movq $8(%rsp), %rdx + //0x00005eb2 LBB27_99 + 0x48, 0x83, 0xfa, 0x10, //0x00005eb2 cmpq $16, %rdx + 0x0f, 0x82, 0x5c, 0x00, 0x00, 0x00, //0x00005eb6 jb LBB27_100 + 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00005ebc vmovdqu (%r14), %xmm0 + 0xc4, 0xc1, 0x7a, 0x7f, 0x00, //0x00005ec1 vmovdqu %xmm0, (%r8) + 0x49, 0x83, 0xc6, 0x10, //0x00005ec6 addq $16, %r14 + 0x49, 0x83, 0xc0, 0x10, //0x00005eca addq $16, %r8 + 0x48, 0x83, 0xc2, 0xf0, //0x00005ece addq $-16, %rdx + 0x48, 0x83, 0xfa, 0x08, //0x00005ed2 cmpq $8, %rdx + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x00005ed6 jae LBB27_105 + //0x00005edc LBB27_101 + 0x48, 0x83, 0xfa, 0x04, //0x00005edc cmpq $4, %rdx + 0x0f, 0x8c, 0x58, 0x00, 0x00, 0x00, //0x00005ee0 jl LBB27_102 + //0x00005ee6 LBB27_106 + 0x41, 0x8b, 0x0e, //0x00005ee6 movl (%r14), %ecx + 0x41, 0x89, 0x08, //0x00005ee9 movl %ecx, (%r8) + 0x49, 0x83, 0xc6, 0x04, //0x00005eec addq $4, %r14 + 0x49, 0x83, 0xc0, 0x04, //0x00005ef0 addq $4, %r8 + 0x48, 0x83, 0xc2, 0xfc, //0x00005ef4 addq $-4, %rdx + 0x48, 0x83, 0xfa, 0x02, //0x00005ef8 cmpq $2, %rdx + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x00005efc jae LBB27_107 + //0x00005f02 LBB27_103 + 0x4c, 0x89, 0xf1, //0x00005f02 movq %r14, %rcx + 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00005f05 leaq $32(%rsp), %r14 + 0x48, 0x85, 0xd2, //0x00005f0a testq %rdx, %rdx + 0x0f, 0x85, 0x5a, 0x00, 0x00, 0x00, //0x00005f0d jne LBB27_108 + 0xe9, 0x5f, 0x00, 0x00, 0x00, //0x00005f13 jmp LBB27_85 + //0x00005f18 LBB27_100 + 0x48, 0x83, 0xfa, 0x08, //0x00005f18 cmpq $8, %rdx + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00005f1c jb LBB27_101 + //0x00005f22 LBB27_105 + 0x49, 0x8b, 0x0e, //0x00005f22 movq (%r14), %rcx + 0x49, 0x89, 0x08, //0x00005f25 movq %rcx, (%r8) + 0x49, 0x83, 0xc6, 0x08, //0x00005f28 addq $8, %r14 + 0x49, 0x83, 0xc0, 0x08, //0x00005f2c addq $8, %r8 + 0x48, 0x83, 0xc2, 0xf8, //0x00005f30 addq $-8, %rdx + 0x48, 0x83, 0xfa, 0x04, //0x00005f34 cmpq $4, %rdx + 0x0f, 0x8d, 0xa8, 0xff, 0xff, 0xff, //0x00005f38 jge LBB27_106 + //0x00005f3e LBB27_102 + 0x48, 0x83, 0xfa, 0x02, //0x00005f3e cmpq $2, %rdx + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00005f42 jb LBB27_103 + //0x00005f48 LBB27_107 + 0x41, 0x0f, 0xb7, 0x0e, //0x00005f48 movzwl (%r14), %ecx + 0x66, 0x41, 0x89, 0x08, //0x00005f4c movw %cx, (%r8) + 0x49, 0x83, 0xc6, 0x02, //0x00005f50 addq $2, %r14 + 0x49, 0x83, 0xc0, 0x02, //0x00005f54 addq $2, %r8 + 0x48, 0x83, 0xc2, 0xfe, //0x00005f58 addq $-2, %rdx + 0x4c, 0x89, 0xf1, //0x00005f5c movq %r14, %rcx + 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00005f5f leaq $32(%rsp), %r14 + 0x48, 0x85, 0xd2, //0x00005f64 testq %rdx, %rdx + 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00005f67 je LBB27_85 + //0x00005f6d LBB27_108 + 0x8a, 0x09, //0x00005f6d movb (%rcx), %cl + 0x41, 0x88, 0x08, //0x00005f6f movb %cl, (%r8) + 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00005f72 leaq $32(%rsp), %r14 + //0x00005f77 LBB27_85 + 0xc4, 0xc1, 0x7a, 0x6f, 0x16, //0x00005f77 vmovdqu (%r14), %xmm2 + 0xc4, 0xc1, 0x7a, 0x6f, 0x6e, 0x10, //0x00005f7c vmovdqu $16(%r14), %xmm5 + 0xc4, 0xc1, 0x7a, 0x6f, 0x7e, 0x20, //0x00005f82 vmovdqu $32(%r14), %xmm7 + 0xc4, 0xc1, 0x7a, 0x6f, 0x76, 0x30, //0x00005f88 vmovdqu $48(%r14), %xmm6 + 0xc5, 0xa9, 0x74, 0xc2, //0x00005f8e vpcmpeqb %xmm2, %xmm10, %xmm0 + 0xc5, 0x79, 0xd7, 0xe8, //0x00005f92 vpmovmskb %xmm0, %r13d + 0xc5, 0xa9, 0x74, 0xc5, //0x00005f96 vpcmpeqb %xmm5, %xmm10, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00005f9a vpmovmskb %xmm0, %ecx + 0xc5, 0xa9, 0x74, 0xc7, //0x00005f9e vpcmpeqb %xmm7, %xmm10, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd0, //0x00005fa2 vpmovmskb %xmm0, %edx + 0xc5, 0xa9, 0x74, 0xc6, //0x00005fa6 vpcmpeqb %xmm6, %xmm10, %xmm0 + 0xc5, 0x79, 0xd7, 0xc8, //0x00005faa vpmovmskb %xmm0, %r9d + 0x49, 0xc1, 0xe1, 0x30, //0x00005fae shlq $48, %r9 + 0x48, 0xc1, 0xe2, 0x20, //0x00005fb2 shlq $32, %rdx + 0x48, 0xc1, 0xe1, 0x10, //0x00005fb6 shlq $16, %rcx + 0x49, 0x09, 0xcd, //0x00005fba orq %rcx, %r13 + 0x49, 0x09, 0xd5, //0x00005fbd orq %rdx, %r13 + 0x4d, 0x09, 0xcd, //0x00005fc0 orq %r9, %r13 + 0xc5, 0xe9, 0x74, 0xc1, //0x00005fc3 vpcmpeqb %xmm1, %xmm2, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00005fc7 vpmovmskb %xmm0, %ecx + 0xc5, 0xd1, 0x74, 0xc1, //0x00005fcb vpcmpeqb %xmm1, %xmm5, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd0, //0x00005fcf vpmovmskb %xmm0, %edx + 0xc5, 0xc1, 0x74, 0xc1, //0x00005fd3 vpcmpeqb %xmm1, %xmm7, %xmm0 + 0xc5, 0x79, 0xd7, 0xc8, //0x00005fd7 vpmovmskb %xmm0, %r9d + 0xc5, 0xc9, 0x74, 0xc1, //0x00005fdb vpcmpeqb %xmm1, %xmm6, %xmm0 + 0xc5, 0x79, 0xd7, 0xd0, //0x00005fdf vpmovmskb %xmm0, %r10d + 0x49, 0xc1, 0xe2, 0x30, //0x00005fe3 shlq $48, %r10 + 0x49, 0xc1, 0xe1, 0x20, //0x00005fe7 shlq $32, %r9 + 0x48, 0xc1, 0xe2, 0x10, //0x00005feb shlq $16, %rdx + 0x48, 0x09, 0xd1, //0x00005fef orq %rdx, %rcx + 0x4c, 0x09, 0xc9, //0x00005ff2 orq %r9, %rcx + 0x4c, 0x09, 0xd1, //0x00005ff5 orq %r10, %rcx + 0x48, 0x89, 0xca, //0x00005ff8 movq %rcx, %rdx + 0x48, 0x09, 0xda, //0x00005ffb orq %rbx, %rdx + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x00005ffe je LBB27_87 + 0x48, 0x89, 0xda, //0x00006004 movq %rbx, %rdx + 0x48, 0xf7, 0xd2, //0x00006007 notq %rdx + 0x48, 0x21, 0xca, //0x0000600a andq %rcx, %rdx + 0x4c, 0x8d, 0x0c, 0x12, //0x0000600d leaq (%rdx,%rdx), %r9 + 0x49, 0x09, 0xd9, //0x00006011 orq %rbx, %r9 + 0x4d, 0x89, 0xca, //0x00006014 movq %r9, %r10 + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00006017 movabsq $-6148914691236517206, %rbx + 0x49, 0x31, 0xda, //0x00006021 xorq %rbx, %r10 + 0x48, 0x21, 0xd9, //0x00006024 andq %rbx, %rcx + 0x4c, 0x21, 0xd1, //0x00006027 andq %r10, %rcx + 0x31, 0xdb, //0x0000602a xorl %ebx, %ebx + 0x48, 0x01, 0xd1, //0x0000602c addq %rdx, %rcx + 0x0f, 0x92, 0xc3, //0x0000602f setb %bl + 0x48, 0x01, 0xc9, //0x00006032 addq %rcx, %rcx + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00006035 movabsq $6148914691236517205, %rdx + 0x48, 0x31, 0xd1, //0x0000603f xorq %rdx, %rcx + 0x4c, 0x21, 0xc9, //0x00006042 andq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x00006045 notq %rcx + 0xe9, 0x09, 0x00, 0x00, 0x00, //0x00006048 jmp LBB27_88 + //0x0000604d LBB27_87 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000604d movq $-1, %rcx + 0x31, 0xdb, //0x00006054 xorl %ebx, %ebx + //0x00006056 LBB27_88 + 0x48, 0x89, 0x5c, 0x24, 0x18, //0x00006056 movq %rbx, $24(%rsp) + 0x4c, 0x21, 0xe9, //0x0000605b andq %r13, %rcx + 0xc4, 0xe1, 0xf9, 0x6e, 0xc1, //0x0000605e vmovq %rcx, %xmm0 + 0xc4, 0xc3, 0x79, 0x44, 0xc1, 0x00, //0x00006063 vpclmulqdq $0, %xmm9, %xmm0, %xmm0 + 0xc4, 0xc1, 0xf9, 0x7e, 0xc5, //0x00006069 vmovq %xmm0, %r13 + 0x4d, 0x31, 0xe5, //0x0000606e xorq %r12, %r13 + 0xc5, 0xe9, 0x74, 0xc3, //0x00006071 vpcmpeqb %xmm3, %xmm2, %xmm0 + 0xc5, 0x79, 0xd7, 0xd0, //0x00006075 vpmovmskb %xmm0, %r10d + 0xc5, 0xd1, 0x74, 0xc3, //0x00006079 vpcmpeqb %xmm3, %xmm5, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x0000607d vpmovmskb %xmm0, %ecx + 0xc5, 0xc1, 0x74, 0xc3, //0x00006081 vpcmpeqb %xmm3, %xmm7, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd0, //0x00006085 vpmovmskb %xmm0, %edx + 0xc5, 0xc9, 0x74, 0xc3, //0x00006089 vpcmpeqb %xmm3, %xmm6, %xmm0 + 0xc5, 0x79, 0xd7, 0xc8, //0x0000608d vpmovmskb %xmm0, %r9d + 0x49, 0xc1, 0xe1, 0x30, //0x00006091 shlq $48, %r9 + 0x48, 0xc1, 0xe2, 0x20, //0x00006095 shlq $32, %rdx + 0x48, 0xc1, 0xe1, 0x10, //0x00006099 shlq $16, %rcx + 0x49, 0x09, 0xca, //0x0000609d orq %rcx, %r10 + 0x49, 0x09, 0xd2, //0x000060a0 orq %rdx, %r10 + 0x4d, 0x09, 0xca, //0x000060a3 orq %r9, %r10 + 0x4d, 0x89, 0xe9, //0x000060a6 movq %r13, %r9 + 0x49, 0xf7, 0xd1, //0x000060a9 notq %r9 + 0x4d, 0x21, 0xca, //0x000060ac andq %r9, %r10 + 0xc5, 0xe9, 0x74, 0xc4, //0x000060af vpcmpeqb %xmm4, %xmm2, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x000060b3 vpmovmskb %xmm0, %ecx + 0xc5, 0xd1, 0x74, 0xc4, //0x000060b7 vpcmpeqb %xmm4, %xmm5, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd0, //0x000060bb vpmovmskb %xmm0, %edx + 0xc5, 0xc1, 0x74, 0xc4, //0x000060bf vpcmpeqb %xmm4, %xmm7, %xmm0 + 0xc5, 0x79, 0xd7, 0xc0, //0x000060c3 vpmovmskb %xmm0, %r8d + 0xc5, 0xc9, 0x74, 0xc4, //0x000060c7 vpcmpeqb %xmm4, %xmm6, %xmm0 + 0xc5, 0x79, 0xd7, 0xe0, //0x000060cb vpmovmskb %xmm0, %r12d + 0x49, 0xc1, 0xe4, 0x30, //0x000060cf shlq $48, %r12 + 0x49, 0xc1, 0xe0, 0x20, //0x000060d3 shlq $32, %r8 + 0x48, 0xc1, 0xe2, 0x10, //0x000060d7 shlq $16, %rdx + 0x48, 0x09, 0xd1, //0x000060db orq %rdx, %rcx + 0x4c, 0x09, 0xc1, //0x000060de orq %r8, %rcx + 0x4c, 0x09, 0xe1, //0x000060e1 orq %r12, %rcx + 0x4c, 0x21, 0xc9, //0x000060e4 andq %r9, %rcx + 0x0f, 0x84, 0x3f, 0x00, 0x00, 0x00, //0x000060e7 je LBB27_92 + 0x4c, 0x8b, 0x44, 0x24, 0x10, //0x000060ed movq $16(%rsp), %r8 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000060f2 .p2align 4, 0x90 + //0x00006100 LBB27_90 + 0x48, 0x8d, 0x59, 0xff, //0x00006100 leaq $-1(%rcx), %rbx + 0x48, 0x89, 0xda, //0x00006104 movq %rbx, %rdx + 0x4c, 0x21, 0xd2, //0x00006107 andq %r10, %rdx + 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x0000610a popcntq %rdx, %rdx + 0x4c, 0x01, 0xc2, //0x0000610f addq %r8, %rdx + 0x4c, 0x39, 0xfa, //0x00006112 cmpq %r15, %rdx + 0x0f, 0x86, 0x50, 0x00, 0x00, 0x00, //0x00006115 jbe LBB27_109 + 0x49, 0xff, 0xc7, //0x0000611b incq %r15 + 0x48, 0x21, 0xd9, //0x0000611e andq %rbx, %rcx + 0x0f, 0x85, 0xd9, 0xff, 0xff, 0xff, //0x00006121 jne LBB27_90 + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00006127 jmp LBB27_93 + //0x0000612c LBB27_92 + 0x4c, 0x8b, 0x44, 0x24, 0x10, //0x0000612c movq $16(%rsp), %r8 + //0x00006131 LBB27_93 + 0x49, 0xc1, 0xfd, 0x3f, //0x00006131 sarq $63, %r13 + 0xf3, 0x49, 0x0f, 0xb8, 0xca, //0x00006135 popcntq %r10, %rcx + 0x49, 0x01, 0xc8, //0x0000613a addq %rcx, %r8 + 0x49, 0x83, 0xc6, 0x40, //0x0000613d addq $64, %r14 + 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x00006141 movq $8(%rsp), %rcx + 0x48, 0x83, 0xc1, 0xc0, //0x00006146 addq $-64, %rcx + 0x4d, 0x89, 0xec, //0x0000614a movq %r13, %r12 + 0x48, 0x8b, 0x5c, 0x24, 0x18, //0x0000614d movq $24(%rsp), %rbx + 0x48, 0x83, 0xf9, 0x40, //0x00006152 cmpq $64, %rcx + 0x48, 0x89, 0x4c, 0x24, 0x08, //0x00006156 movq %rcx, $8(%rsp) + 0x4c, 0x89, 0x44, 0x24, 0x10, //0x0000615b movq %r8, $16(%rsp) + 0x0f, 0x8d, 0x11, 0xfe, 0xff, 0xff, //0x00006160 jge LBB27_85 + 0xe9, 0xd9, 0xfc, 0xff, 0xff, //0x00006166 jmp LBB27_94 + //0x0000616b LBB27_109 + 0x48, 0x8b, 0x47, 0x08, //0x0000616b movq $8(%rdi), %rax + 0x48, 0x0f, 0xbc, 0xc9, //0x0000616f bsfq %rcx, %rcx + 0x48, 0x2b, 0x4c, 0x24, 0x08, //0x00006173 subq $8(%rsp), %rcx + 0x48, 0x8d, 0x44, 0x01, 0x01, //0x00006178 leaq $1(%rcx,%rax), %rax + 0x48, 0x89, 0x06, //0x0000617d movq %rax, (%rsi) + 0x48, 0x8b, 0x4f, 0x08, //0x00006180 movq $8(%rdi), %rcx + 0x48, 0x39, 0xc8, //0x00006184 cmpq %rcx, %rax + 0x48, 0x0f, 0x47, 0xc1, //0x00006187 cmovaq %rcx, %rax + 0x48, 0x89, 0x06, //0x0000618b movq %rax, (%rsi) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000618e movq $-1, %rax + 0x4c, 0x0f, 0x47, 0xd8, //0x00006195 cmovaq %rax, %r11 + 0xe9, 0x7d, 0xf7, 0xff, 0xff, //0x00006199 jmp LBB27_44 + //0x0000619e LBB27_54 + 0x4d, 0x85, 0xe4, //0x0000619e testq %r12, %r12 + 0x0f, 0x85, 0x8e, 0x00, 0x00, 0x00, //0x000061a1 jne LBB27_119 + 0x4b, 0x8d, 0x5c, 0x17, 0x01, //0x000061a7 leaq $1(%r15,%r10), %rbx + 0x49, 0xf7, 0xd7, //0x000061ac notq %r15 + 0x4d, 0x01, 0xc7, //0x000061af addq %r8, %r15 + //0x000061b2 LBB27_56 + 0x4d, 0x85, 0xff, //0x000061b2 testq %r15, %r15 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x000061b5 jg LBB27_113 + 0xe9, 0x5e, 0xf7, 0xff, 0xff, //0x000061bb jmp LBB27_45 + //0x000061c0 LBB27_111 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000061c0 movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000061c7 movl $2, %eax + 0x48, 0x01, 0xc3, //0x000061cc addq %rax, %rbx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000061cf movq $-1, %rax + 0x49, 0x01, 0xcf, //0x000061d6 addq %rcx, %r15 + 0x0f, 0x8e, 0x3f, 0xf7, 0xff, 0xff, //0x000061d9 jle LBB27_45 + //0x000061df LBB27_113 + 0x0f, 0xb6, 0x03, //0x000061df movzbl (%rbx), %eax + 0x3c, 0x5c, //0x000061e2 cmpb $92, %al + 0x0f, 0x84, 0xd6, 0xff, 0xff, 0xff, //0x000061e4 je LBB27_111 + 0x3c, 0x22, //0x000061ea cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000061ec je LBB27_116 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000061f2 movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000061f9 movl $1, %eax + 0x48, 0x01, 0xc3, //0x000061fe addq %rax, %rbx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00006201 movq $-1, %rax + 0x49, 0x01, 0xcf, //0x00006208 addq %rcx, %r15 + 0x0f, 0x8f, 0xce, 0xff, 0xff, 0xff, //0x0000620b jg LBB27_113 + 0xe9, 0x08, 0xf7, 0xff, 0xff, //0x00006211 jmp LBB27_45 + //0x00006216 LBB27_116 + 0x4c, 0x29, 0xf3, //0x00006216 subq %r14, %rbx + 0x48, 0xff, 0xc3, //0x00006219 incq %rbx + 0xe9, 0xf7, 0xf6, 0xff, 0xff, //0x0000621c jmp LBB27_43 + //0x00006221 LBB27_117 + 0x4c, 0x01, 0xf3, //0x00006221 addq %r14, %rbx + 0xe9, 0x89, 0xff, 0xff, 0xff, //0x00006224 jmp LBB27_56 + //0x00006229 LBB27_118 + 0x48, 0x8b, 0x4f, 0x08, //0x00006229 movq $8(%rdi), %rcx + 0x48, 0x89, 0x0e, //0x0000622d movq %rcx, (%rsi) + 0xe9, 0xe9, 0xf6, 0xff, 0xff, //0x00006230 jmp LBB27_45 + //0x00006235 LBB27_119 + 0x49, 0x8d, 0x48, 0xff, //0x00006235 leaq $-1(%r8), %rcx + 0x4c, 0x39, 0xf9, //0x00006239 cmpq %r15, %rcx + 0x0f, 0x84, 0xdc, 0xf6, 0xff, 0xff, //0x0000623c je LBB27_45 + 0x4b, 0x8d, 0x5c, 0x17, 0x02, //0x00006242 leaq $2(%r15,%r10), %rbx + 0x4d, 0x29, 0xf8, //0x00006247 subq %r15, %r8 + 0x49, 0x83, 0xc0, 0xfe, //0x0000624a addq $-2, %r8 + 0x4d, 0x89, 0xc7, //0x0000624e movq %r8, %r15 + 0xe9, 0x5c, 0xff, 0xff, 0xff, //0x00006251 jmp LBB27_56 + 0x90, 0x90, //0x00006256 .p2align 2, 0x90 + // // .set L27_0_set_45, LBB27_45-LJTI27_0 + // // .set L27_0_set_47, LBB27_47-LJTI27_0 + // // .set L27_0_set_48, LBB27_48-LJTI27_0 + // // .set L27_0_set_29, LBB27_29-LJTI27_0 + // // .set L27_0_set_57, LBB27_57-LJTI27_0 + // // .set L27_0_set_82, LBB27_82-LJTI27_0 + // // .set L27_0_set_46, LBB27_46-LJTI27_0 + // // .set L27_0_set_84, LBB27_84-LJTI27_0 + //0x00006258 LJTI27_0 + 0xc6, 0xf6, 0xff, 0xff, //0x00006258 .long L27_0_set_45 + 0xeb, 0xf6, 0xff, 0xff, //0x0000625c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006260 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006264 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006268 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000626c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006270 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006274 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006278 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000627c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006280 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006284 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006288 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000628c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006290 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006294 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006298 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000629c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062a0 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062a4 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062a8 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062ac .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062b0 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062b4 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062b8 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062bc .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062c0 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062c4 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062c8 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062cc .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062d0 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062d4 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062d8 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062dc .long L27_0_set_47 + 0xfa, 0xf6, 0xff, 0xff, //0x000062e0 .long L27_0_set_48 + 0xeb, 0xf6, 0xff, 0xff, //0x000062e4 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062e8 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062ec .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062f0 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062f4 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062f8 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000062fc .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006300 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006304 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006308 .long L27_0_set_47 + 0xe3, 0xf5, 0xff, 0xff, //0x0000630c .long L27_0_set_29 + 0xeb, 0xf6, 0xff, 0xff, //0x00006310 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006314 .long L27_0_set_47 + 0xe3, 0xf5, 0xff, 0xff, //0x00006318 .long L27_0_set_29 + 0xe3, 0xf5, 0xff, 0xff, //0x0000631c .long L27_0_set_29 + 0xe3, 0xf5, 0xff, 0xff, //0x00006320 .long L27_0_set_29 + 0xe3, 0xf5, 0xff, 0xff, //0x00006324 .long L27_0_set_29 + 0xe3, 0xf5, 0xff, 0xff, //0x00006328 .long L27_0_set_29 + 0xe3, 0xf5, 0xff, 0xff, //0x0000632c .long L27_0_set_29 + 0xe3, 0xf5, 0xff, 0xff, //0x00006330 .long L27_0_set_29 + 0xe3, 0xf5, 0xff, 0xff, //0x00006334 .long L27_0_set_29 + 0xe3, 0xf5, 0xff, 0xff, //0x00006338 .long L27_0_set_29 + 0xe3, 0xf5, 0xff, 0xff, //0x0000633c .long L27_0_set_29 + 0xeb, 0xf6, 0xff, 0xff, //0x00006340 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006344 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006348 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000634c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006350 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006354 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006358 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000635c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006360 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006364 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006368 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000636c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006370 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006374 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006378 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000637c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006380 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006384 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006388 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000638c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006390 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006394 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006398 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000639c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063a0 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063a4 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063a8 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063ac .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063b0 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063b4 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063b8 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063bc .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063c0 .long L27_0_set_47 + 0x0a, 0xf8, 0xff, 0xff, //0x000063c4 .long L27_0_set_57 + 0xeb, 0xf6, 0xff, 0xff, //0x000063c8 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063cc .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063d0 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063d4 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063d8 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063dc .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063e0 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063e4 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063e8 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063ec .long L27_0_set_47 + 0x83, 0xfb, 0xff, 0xff, //0x000063f0 .long L27_0_set_82 + 0xeb, 0xf6, 0xff, 0xff, //0x000063f4 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063f8 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x000063fc .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006400 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006404 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006408 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000640c .long L27_0_set_47 + 0xd8, 0xf6, 0xff, 0xff, //0x00006410 .long L27_0_set_46 + 0xeb, 0xf6, 0xff, 0xff, //0x00006414 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006418 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000641c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006420 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006424 .long L27_0_set_47 + 0xd8, 0xf6, 0xff, 0xff, //0x00006428 .long L27_0_set_46 + 0xeb, 0xf6, 0xff, 0xff, //0x0000642c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006430 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006434 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006438 .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x0000643c .long L27_0_set_47 + 0xeb, 0xf6, 0xff, 0xff, //0x00006440 .long L27_0_set_47 + 0x99, 0xfb, 0xff, 0xff, //0x00006444 .long L27_0_set_84 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006448 .p2align 4, 0x90 + //0x00006450 _get_by_path + 0x55, //0x00006450 pushq %rbp + 0x48, 0x89, 0xe5, //0x00006451 movq %rsp, %rbp + 0x41, 0x57, //0x00006454 pushq %r15 + 0x41, 0x56, //0x00006456 pushq %r14 + 0x41, 0x55, //0x00006458 pushq %r13 + 0x41, 0x54, //0x0000645a pushq %r12 + 0x53, //0x0000645c pushq %rbx + 0x48, 0x83, 0xec, 0x38, //0x0000645d subq $56, %rsp + 0x49, 0x89, 0xf7, //0x00006461 movq %rsi, %r15 + 0x49, 0x89, 0xfb, //0x00006464 movq %rdi, %r11 + 0x4c, 0x8b, 0x52, 0x08, //0x00006467 movq $8(%rdx), %r10 + 0x4d, 0x85, 0xd2, //0x0000646b testq %r10, %r10 + 0x0f, 0x84, 0x4c, 0x0f, 0x00, 0x00, //0x0000646e je LBB28_244 + 0x48, 0x8b, 0x02, //0x00006474 movq (%rdx), %rax + 0x49, 0xc1, 0xe2, 0x04, //0x00006477 shlq $4, %r10 + 0x48, 0x89, 0x45, 0xb8, //0x0000647b movq %rax, $-72(%rbp) + 0x49, 0x01, 0xc2, //0x0000647f addq %rax, %r10 + 0x4d, 0x8b, 0x0b, //0x00006482 movq (%r11), %r9 + 0x49, 0x8b, 0x17, //0x00006485 movq (%r15), %rdx + 0x49, 0xbc, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00006488 movabsq $4294977024, %r12 + 0x4c, 0x89, 0x5d, 0xc0, //0x00006492 movq %r11, $-64(%rbp) + 0x48, 0x89, 0x4d, 0xa0, //0x00006496 movq %rcx, $-96(%rbp) + 0x4c, 0x89, 0x55, 0xa8, //0x0000649a movq %r10, $-88(%rbp) + //0x0000649e LBB28_2 + 0x4d, 0x8b, 0x43, 0x08, //0x0000649e movq $8(%r11), %r8 + 0x48, 0x89, 0xd7, //0x000064a2 movq %rdx, %rdi + 0x4c, 0x29, 0xc7, //0x000064a5 subq %r8, %rdi + 0x0f, 0x83, 0x32, 0x00, 0x00, 0x00, //0x000064a8 jae LBB28_7 + 0x41, 0x8a, 0x04, 0x11, //0x000064ae movb (%r9,%rdx), %al + 0x3c, 0x0d, //0x000064b2 cmpb $13, %al + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x000064b4 je LBB28_7 + 0x3c, 0x20, //0x000064ba cmpb $32, %al + 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x000064bc je LBB28_7 + 0x04, 0xf7, //0x000064c2 addb $-9, %al + 0x3c, 0x01, //0x000064c4 cmpb $1, %al + 0x0f, 0x86, 0x14, 0x00, 0x00, 0x00, //0x000064c6 jbe LBB28_7 + 0x48, 0x89, 0xd6, //0x000064cc movq %rdx, %rsi + 0xe9, 0xfe, 0x00, 0x00, 0x00, //0x000064cf jmp LBB28_28 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000064d4 .p2align 4, 0x90 + //0x000064e0 LBB28_7 + 0x48, 0x8d, 0x72, 0x01, //0x000064e0 leaq $1(%rdx), %rsi + 0x4c, 0x39, 0xc6, //0x000064e4 cmpq %r8, %rsi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000064e7 jae LBB28_11 + 0x41, 0x8a, 0x04, 0x31, //0x000064ed movb (%r9,%rsi), %al + 0x3c, 0x0d, //0x000064f1 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x000064f3 je LBB28_11 + 0x3c, 0x20, //0x000064f9 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x000064fb je LBB28_11 + 0x04, 0xf7, //0x00006501 addb $-9, %al + 0x3c, 0x01, //0x00006503 cmpb $1, %al + 0x0f, 0x87, 0xc7, 0x00, 0x00, 0x00, //0x00006505 ja LBB28_28 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000650b .p2align 4, 0x90 + //0x00006510 LBB28_11 + 0x48, 0x8d, 0x72, 0x02, //0x00006510 leaq $2(%rdx), %rsi + 0x4c, 0x39, 0xc6, //0x00006514 cmpq %r8, %rsi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006517 jae LBB28_15 + 0x41, 0x8a, 0x04, 0x31, //0x0000651d movb (%r9,%rsi), %al + 0x3c, 0x0d, //0x00006521 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00006523 je LBB28_15 + 0x3c, 0x20, //0x00006529 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000652b je LBB28_15 + 0x04, 0xf7, //0x00006531 addb $-9, %al + 0x3c, 0x01, //0x00006533 cmpb $1, %al + 0x0f, 0x87, 0x97, 0x00, 0x00, 0x00, //0x00006535 ja LBB28_28 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000653b .p2align 4, 0x90 + //0x00006540 LBB28_15 + 0x48, 0x8d, 0x72, 0x03, //0x00006540 leaq $3(%rdx), %rsi + 0x4c, 0x39, 0xc6, //0x00006544 cmpq %r8, %rsi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006547 jae LBB28_19 + 0x41, 0x8a, 0x04, 0x31, //0x0000654d movb (%r9,%rsi), %al + 0x3c, 0x0d, //0x00006551 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00006553 je LBB28_19 + 0x3c, 0x20, //0x00006559 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000655b je LBB28_19 + 0x04, 0xf7, //0x00006561 addb $-9, %al + 0x3c, 0x01, //0x00006563 cmpb $1, %al + 0x0f, 0x87, 0x67, 0x00, 0x00, 0x00, //0x00006565 ja LBB28_28 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000656b .p2align 4, 0x90 + //0x00006570 LBB28_19 + 0x48, 0x8d, 0x42, 0x04, //0x00006570 leaq $4(%rdx), %rax + 0x49, 0x39, 0xc0, //0x00006574 cmpq %rax, %r8 + 0x0f, 0x86, 0x83, 0x00, 0x00, 0x00, //0x00006577 jbe LBB28_25 + 0x49, 0x39, 0xc0, //0x0000657d cmpq %rax, %r8 + 0x0f, 0x84, 0x94, 0x00, 0x00, 0x00, //0x00006580 je LBB28_26 + 0x4b, 0x8d, 0x04, 0x01, //0x00006586 leaq (%r9,%r8), %rax + 0x48, 0x83, 0xc7, 0x04, //0x0000658a addq $4, %rdi + 0x49, 0x8d, 0x74, 0x11, 0x05, //0x0000658e leaq $5(%r9,%rdx), %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006593 .p2align 4, 0x90 + //0x000065a0 LBB28_22 + 0x0f, 0xbe, 0x5e, 0xff, //0x000065a0 movsbl $-1(%rsi), %ebx + 0x83, 0xfb, 0x20, //0x000065a4 cmpl $32, %ebx + 0x0f, 0x87, 0xfd, 0x0b, 0x00, 0x00, //0x000065a7 ja LBB28_29 + 0x49, 0x0f, 0xa3, 0xdc, //0x000065ad btq %rbx, %r12 + 0x0f, 0x83, 0xf3, 0x0b, 0x00, 0x00, //0x000065b1 jae LBB28_29 + 0x48, 0xff, 0xc6, //0x000065b7 incq %rsi + 0x48, 0xff, 0xc7, //0x000065ba incq %rdi + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000065bd jne LBB28_22 + 0x4c, 0x29, 0xc8, //0x000065c3 subq %r9, %rax + 0x48, 0x89, 0xc6, //0x000065c6 movq %rax, %rsi + 0x4c, 0x39, 0xc6, //0x000065c9 cmpq %r8, %rsi + 0x0f, 0x83, 0x5a, 0x00, 0x00, 0x00, //0x000065cc jae LBB28_30 + //0x000065d2 LBB28_28 + 0x48, 0x8d, 0x46, 0x01, //0x000065d2 leaq $1(%rsi), %rax + 0x49, 0x89, 0x07, //0x000065d6 movq %rax, (%r15) + 0x41, 0x8a, 0x34, 0x31, //0x000065d9 movb (%r9,%rsi), %sil + 0x48, 0x8b, 0x55, 0xb8, //0x000065dd movq $-72(%rbp), %rdx + 0x48, 0x8b, 0x12, //0x000065e1 movq (%rdx), %rdx + 0x48, 0x85, 0xd2, //0x000065e4 testq %rdx, %rdx + 0x0f, 0x85, 0x63, 0x00, 0x00, 0x00, //0x000065e7 jne LBB28_31 + 0xe9, 0x29, 0x0e, 0x00, 0x00, //0x000065ed jmp LBB28_251 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000065f2 .p2align 4, 0x90 + //0x00006600 LBB28_25 + 0x49, 0x89, 0x07, //0x00006600 movq %rax, (%r15) + 0x31, 0xf6, //0x00006603 xorl %esi, %esi + 0x48, 0x8b, 0x55, 0xb8, //0x00006605 movq $-72(%rbp), %rdx + 0x48, 0x8b, 0x12, //0x00006609 movq (%rdx), %rdx + 0x48, 0x85, 0xd2, //0x0000660c testq %rdx, %rdx + 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x0000660f jne LBB28_31 + 0xe9, 0x01, 0x0e, 0x00, 0x00, //0x00006615 jmp LBB28_251 + //0x0000661a LBB28_26 + 0x4c, 0x01, 0xc8, //0x0000661a addq %r9, %rax + 0x4c, 0x29, 0xc8, //0x0000661d subq %r9, %rax + 0x48, 0x89, 0xc6, //0x00006620 movq %rax, %rsi + 0x4c, 0x39, 0xc6, //0x00006623 cmpq %r8, %rsi + 0x0f, 0x82, 0xa6, 0xff, 0xff, 0xff, //0x00006626 jb LBB28_28 + //0x0000662c LBB28_30 + 0x31, 0xf6, //0x0000662c xorl %esi, %esi + 0x48, 0x89, 0xd0, //0x0000662e movq %rdx, %rax + 0x48, 0x8b, 0x55, 0xb8, //0x00006631 movq $-72(%rbp), %rdx + 0x48, 0x8b, 0x12, //0x00006635 movq (%rdx), %rdx + 0x48, 0x85, 0xd2, //0x00006638 testq %rdx, %rdx + 0x0f, 0x84, 0xda, 0x0d, 0x00, 0x00, //0x0000663b je LBB28_251 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006641 .p2align 4, 0x90 + //0x00006650 LBB28_31 + 0x8a, 0x52, 0x17, //0x00006650 movb $23(%rdx), %dl + 0x80, 0xe2, 0x1f, //0x00006653 andb $31, %dl + 0x80, 0xfa, 0x02, //0x00006656 cmpb $2, %dl + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00006659 je LBB28_184 + 0x80, 0xfa, 0x18, //0x0000665f cmpb $24, %dl + 0x0f, 0x85, 0xb3, 0x0d, 0x00, 0x00, //0x00006662 jne LBB28_251 + 0x40, 0x80, 0xfe, 0x7b, //0x00006668 cmpb $123, %sil + 0x4c, 0x89, 0x7d, 0xd0, //0x0000666c movq %r15, $-48(%rbp) + 0x0f, 0x84, 0x78, 0x01, 0x00, 0x00, //0x00006670 je LBB28_34 + 0xe9, 0x71, 0x0d, 0x00, 0x00, //0x00006676 jmp LBB28_247 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000667b .p2align 4, 0x90 + //0x00006680 LBB28_184 + 0x40, 0x80, 0xfe, 0x5b, //0x00006680 cmpb $91, %sil + 0x0f, 0x85, 0x62, 0x0d, 0x00, 0x00, //0x00006684 jne LBB28_247 + 0x48, 0x8b, 0x55, 0xb8, //0x0000668a movq $-72(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000668e movq $8(%rdx), %rdx + 0x4c, 0x8b, 0x32, //0x00006692 movq (%rdx), %r14 + 0x4d, 0x85, 0xf6, //0x00006695 testq %r14, %r14 + 0x0f, 0x88, 0x7d, 0x0d, 0x00, 0x00, //0x00006698 js LBB28_251 + 0x4d, 0x8b, 0x43, 0x08, //0x0000669e movq $8(%r11), %r8 + 0x48, 0x89, 0xc6, //0x000066a2 movq %rax, %rsi + 0x4c, 0x29, 0xc6, //0x000066a5 subq %r8, %rsi + 0x0f, 0x83, 0x32, 0x00, 0x00, 0x00, //0x000066a8 jae LBB28_191 + 0x41, 0x8a, 0x14, 0x01, //0x000066ae movb (%r9,%rax), %dl + 0x80, 0xfa, 0x0d, //0x000066b2 cmpb $13, %dl + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x000066b5 je LBB28_191 + 0x80, 0xfa, 0x20, //0x000066bb cmpb $32, %dl + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x000066be je LBB28_191 + 0x80, 0xc2, 0xf7, //0x000066c4 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000066c7 cmpb $1, %dl + 0x0f, 0x86, 0x10, 0x00, 0x00, 0x00, //0x000066ca jbe LBB28_191 + 0x48, 0x89, 0xc7, //0x000066d0 movq %rax, %rdi + 0xe9, 0x12, 0x0b, 0x00, 0x00, //0x000066d3 jmp LBB28_213 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000066d8 .p2align 4, 0x90 + //0x000066e0 LBB28_191 + 0x48, 0x8d, 0x78, 0x01, //0x000066e0 leaq $1(%rax), %rdi + 0x4c, 0x39, 0xc7, //0x000066e4 cmpq %r8, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000066e7 jae LBB28_195 + 0x41, 0x8a, 0x14, 0x39, //0x000066ed movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x000066f1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000066f4 je LBB28_195 + 0x80, 0xfa, 0x20, //0x000066fa cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000066fd je LBB28_195 + 0x80, 0xc2, 0xf7, //0x00006703 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006706 cmpb $1, %dl + 0x0f, 0x87, 0xdb, 0x0a, 0x00, 0x00, //0x00006709 ja LBB28_213 + 0x90, //0x0000670f .p2align 4, 0x90 + //0x00006710 LBB28_195 + 0x48, 0x8d, 0x78, 0x02, //0x00006710 leaq $2(%rax), %rdi + 0x4c, 0x39, 0xc7, //0x00006714 cmpq %r8, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006717 jae LBB28_199 + 0x41, 0x8a, 0x14, 0x39, //0x0000671d movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x00006721 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00006724 je LBB28_199 + 0x80, 0xfa, 0x20, //0x0000672a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000672d je LBB28_199 + 0x80, 0xc2, 0xf7, //0x00006733 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006736 cmpb $1, %dl + 0x0f, 0x87, 0xab, 0x0a, 0x00, 0x00, //0x00006739 ja LBB28_213 + 0x90, //0x0000673f .p2align 4, 0x90 + //0x00006740 LBB28_199 + 0x48, 0x8d, 0x78, 0x03, //0x00006740 leaq $3(%rax), %rdi + 0x4c, 0x39, 0xc7, //0x00006744 cmpq %r8, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006747 jae LBB28_203 + 0x41, 0x8a, 0x14, 0x39, //0x0000674d movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x00006751 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00006754 je LBB28_203 + 0x80, 0xfa, 0x20, //0x0000675a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000675d je LBB28_203 + 0x80, 0xc2, 0xf7, //0x00006763 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006766 cmpb $1, %dl + 0x0f, 0x87, 0x7b, 0x0a, 0x00, 0x00, //0x00006769 ja LBB28_213 + 0x90, //0x0000676f .p2align 4, 0x90 + //0x00006770 LBB28_203 + 0x48, 0x8d, 0x50, 0x04, //0x00006770 leaq $4(%rax), %rdx + 0x49, 0x39, 0xd0, //0x00006774 cmpq %rdx, %r8 + 0x0f, 0x86, 0x22, 0x0a, 0x00, 0x00, //0x00006777 jbe LBB28_209 + 0x49, 0x39, 0xd0, //0x0000677d cmpq %rdx, %r8 + 0x0f, 0x84, 0x3b, 0x0a, 0x00, 0x00, //0x00006780 je LBB28_210 + 0x4b, 0x8d, 0x14, 0x01, //0x00006786 leaq (%r9,%r8), %rdx + 0x48, 0x83, 0xc6, 0x04, //0x0000678a addq $4, %rsi + 0x49, 0x8d, 0x7c, 0x01, 0x05, //0x0000678e leaq $5(%r9,%rax), %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006793 .p2align 4, 0x90 + //0x000067a0 LBB28_206 + 0x0f, 0xbe, 0x4f, 0xff, //0x000067a0 movsbl $-1(%rdi), %ecx + 0x83, 0xf9, 0x20, //0x000067a4 cmpl $32, %ecx + 0x0f, 0x87, 0x2b, 0x0a, 0x00, 0x00, //0x000067a7 ja LBB28_212 + 0x49, 0x0f, 0xa3, 0xcc, //0x000067ad btq %rcx, %r12 + 0x0f, 0x83, 0x21, 0x0a, 0x00, 0x00, //0x000067b1 jae LBB28_212 + 0x48, 0xff, 0xc7, //0x000067b7 incq %rdi + 0x48, 0xff, 0xc6, //0x000067ba incq %rsi + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000067bd jne LBB28_206 + 0xe9, 0xfc, 0x09, 0x00, 0x00, //0x000067c3 jmp LBB28_211 + //0x000067c8 LBB28_180 + 0x4c, 0x89, 0xca, //0x000067c8 movq %r9, %rdx + 0x48, 0xf7, 0xd2, //0x000067cb notq %rdx + 0x48, 0x01, 0xd7, //0x000067ce addq %rdx, %rdi + 0x48, 0x39, 0xcf, //0x000067d1 cmpq %rcx, %rdi + 0x0f, 0x83, 0x12, 0x0c, 0x00, 0x00, //0x000067d4 jae LBB28_247 + //0x000067da LBB28_181 + 0x48, 0x8d, 0x47, 0x01, //0x000067da leaq $1(%rdi), %rax + 0x49, 0x89, 0x07, //0x000067de movq %rax, (%r15) + 0x41, 0x8a, 0x0c, 0x39, //0x000067e1 movb (%r9,%rdi), %cl + 0x80, 0xf9, 0x2c, //0x000067e5 cmpb $44, %cl + 0x0f, 0x85, 0x42, 0x0c, 0x00, 0x00, //0x000067e8 jne LBB28_253 + //0x000067ee LBB28_34 + 0x49, 0x8b, 0x4b, 0x08, //0x000067ee movq $8(%r11), %rcx + 0x48, 0x89, 0xc6, //0x000067f2 movq %rax, %rsi + 0x48, 0x29, 0xce, //0x000067f5 subq %rcx, %rsi + 0x0f, 0x83, 0x32, 0x00, 0x00, 0x00, //0x000067f8 jae LBB28_39 + 0x41, 0x8a, 0x14, 0x01, //0x000067fe movb (%r9,%rax), %dl + 0x80, 0xfa, 0x0d, //0x00006802 cmpb $13, %dl + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00006805 je LBB28_39 + 0x80, 0xfa, 0x20, //0x0000680b cmpb $32, %dl + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x0000680e je LBB28_39 + 0x80, 0xc2, 0xf7, //0x00006814 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006817 cmpb $1, %dl + 0x0f, 0x86, 0x10, 0x00, 0x00, 0x00, //0x0000681a jbe LBB28_39 + 0x49, 0x89, 0xc5, //0x00006820 movq %rax, %r13 + 0xe9, 0x2a, 0x01, 0x00, 0x00, //0x00006823 jmp LBB28_60 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006828 .p2align 4, 0x90 + //0x00006830 LBB28_39 + 0x4c, 0x8d, 0x68, 0x01, //0x00006830 leaq $1(%rax), %r13 + 0x49, 0x39, 0xcd, //0x00006834 cmpq %rcx, %r13 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006837 jae LBB28_43 + 0x43, 0x8a, 0x14, 0x29, //0x0000683d movb (%r9,%r13), %dl + 0x80, 0xfa, 0x0d, //0x00006841 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00006844 je LBB28_43 + 0x80, 0xfa, 0x20, //0x0000684a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000684d je LBB28_43 + 0x80, 0xc2, 0xf7, //0x00006853 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006856 cmpb $1, %dl + 0x0f, 0x87, 0xf3, 0x00, 0x00, 0x00, //0x00006859 ja LBB28_60 + 0x90, //0x0000685f .p2align 4, 0x90 + //0x00006860 LBB28_43 + 0x4c, 0x8d, 0x68, 0x02, //0x00006860 leaq $2(%rax), %r13 + 0x49, 0x39, 0xcd, //0x00006864 cmpq %rcx, %r13 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006867 jae LBB28_47 + 0x43, 0x8a, 0x14, 0x29, //0x0000686d movb (%r9,%r13), %dl + 0x80, 0xfa, 0x0d, //0x00006871 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00006874 je LBB28_47 + 0x80, 0xfa, 0x20, //0x0000687a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000687d je LBB28_47 + 0x80, 0xc2, 0xf7, //0x00006883 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006886 cmpb $1, %dl + 0x0f, 0x87, 0xc3, 0x00, 0x00, 0x00, //0x00006889 ja LBB28_60 + 0x90, //0x0000688f .p2align 4, 0x90 + //0x00006890 LBB28_47 + 0x4c, 0x8d, 0x68, 0x03, //0x00006890 leaq $3(%rax), %r13 + 0x49, 0x39, 0xcd, //0x00006894 cmpq %rcx, %r13 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006897 jae LBB28_51 + 0x43, 0x8a, 0x14, 0x29, //0x0000689d movb (%r9,%r13), %dl + 0x80, 0xfa, 0x0d, //0x000068a1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000068a4 je LBB28_51 + 0x80, 0xfa, 0x20, //0x000068aa cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000068ad je LBB28_51 + 0x80, 0xc2, 0xf7, //0x000068b3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000068b6 cmpb $1, %dl + 0x0f, 0x87, 0x93, 0x00, 0x00, 0x00, //0x000068b9 ja LBB28_60 + 0x90, //0x000068bf .p2align 4, 0x90 + //0x000068c0 LBB28_51 + 0x48, 0x8d, 0x50, 0x04, //0x000068c0 leaq $4(%rax), %rdx + 0x48, 0x39, 0xd1, //0x000068c4 cmpq %rdx, %rcx + 0x0f, 0x86, 0x19, 0x0b, 0x00, 0x00, //0x000068c7 jbe LBB28_245 + 0x48, 0x39, 0xd1, //0x000068cd cmpq %rdx, %rcx + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x000068d0 je LBB28_57 + 0x49, 0x8d, 0x14, 0x09, //0x000068d6 leaq (%r9,%rcx), %rdx + 0x48, 0x83, 0xc6, 0x04, //0x000068da addq $4, %rsi + 0x4d, 0x8d, 0x6c, 0x01, 0x05, //0x000068de leaq $5(%r9,%rax), %r13 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000068e3 .p2align 4, 0x90 + //0x000068f0 LBB28_54 + 0x41, 0x0f, 0xbe, 0x7d, 0xff, //0x000068f0 movsbl $-1(%r13), %edi + 0x83, 0xff, 0x20, //0x000068f5 cmpl $32, %edi + 0x0f, 0x87, 0x42, 0x00, 0x00, 0x00, //0x000068f8 ja LBB28_59 + 0x49, 0x0f, 0xa3, 0xfc, //0x000068fe btq %rdi, %r12 + 0x0f, 0x83, 0x38, 0x00, 0x00, 0x00, //0x00006902 jae LBB28_59 + 0x49, 0xff, 0xc5, //0x00006908 incq %r13 + 0x48, 0xff, 0xc6, //0x0000690b incq %rsi + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000690e jne LBB28_54 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00006914 jmp LBB28_58 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006919 .p2align 4, 0x90 + //0x00006920 LBB28_57 + 0x4c, 0x01, 0xca, //0x00006920 addq %r9, %rdx + //0x00006923 LBB28_58 + 0x4c, 0x29, 0xca, //0x00006923 subq %r9, %rdx + 0x49, 0x89, 0xd5, //0x00006926 movq %rdx, %r13 + 0x49, 0x39, 0xcd, //0x00006929 cmpq %rcx, %r13 + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x0000692c jb LBB28_60 + 0xe9, 0xb5, 0x0a, 0x00, 0x00, //0x00006932 jmp LBB28_247 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006937 .p2align 4, 0x90 + //0x00006940 LBB28_59 + 0x4c, 0x89, 0xca, //0x00006940 movq %r9, %rdx + 0x48, 0xf7, 0xd2, //0x00006943 notq %rdx + 0x49, 0x01, 0xd5, //0x00006946 addq %rdx, %r13 + 0x49, 0x39, 0xcd, //0x00006949 cmpq %rcx, %r13 + 0x0f, 0x83, 0x9a, 0x0a, 0x00, 0x00, //0x0000694c jae LBB28_247 + //0x00006952 LBB28_60 + 0x49, 0x8d, 0x5d, 0x01, //0x00006952 leaq $1(%r13), %rbx + 0x49, 0x89, 0x1f, //0x00006956 movq %rbx, (%r15) + 0x43, 0x8a, 0x0c, 0x29, //0x00006959 movb (%r9,%r13), %cl + 0x80, 0xf9, 0x22, //0x0000695d cmpb $34, %cl + 0x0f, 0x85, 0xc7, 0x0a, 0x00, 0x00, //0x00006960 jne LBB28_252 + 0x48, 0x8b, 0x45, 0xb8, //0x00006966 movq $-72(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x0000696a movq $8(%rax), %rax + 0x4c, 0x8b, 0x30, //0x0000696e movq (%rax), %r14 + 0x4c, 0x8b, 0x78, 0x08, //0x00006971 movq $8(%rax), %r15 + 0x48, 0xc7, 0x45, 0xb0, 0xff, 0xff, 0xff, 0xff, //0x00006975 movq $-1, $-80(%rbp) + 0x4c, 0x89, 0xdf, //0x0000697d movq %r11, %rdi + 0x48, 0x89, 0xde, //0x00006980 movq %rbx, %rsi + 0x48, 0x8d, 0x55, 0xb0, //0x00006983 leaq $-80(%rbp), %rdx + 0xe8, 0x94, 0x25, 0x00, 0x00, //0x00006987 callq _advance_string_default + 0x48, 0x85, 0xc0, //0x0000698c testq %rax, %rax + 0x0f, 0x88, 0xb6, 0x0a, 0x00, 0x00, //0x0000698f js LBB28_255 + 0x48, 0x8b, 0x4d, 0xd0, //0x00006995 movq $-48(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00006999 movq %rax, (%rcx) + 0x48, 0x8b, 0x4d, 0xb0, //0x0000699c movq $-80(%rbp), %rcx + 0x48, 0x83, 0xf9, 0xff, //0x000069a0 cmpq $-1, %rcx + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x000069a4 je LBB28_64 + 0x48, 0x39, 0xc1, //0x000069aa cmpq %rax, %rcx + 0x0f, 0x8e, 0x61, 0x01, 0x00, 0x00, //0x000069ad jle LBB28_87 + //0x000069b3 LBB28_64 + 0x48, 0x89, 0xc2, //0x000069b3 movq %rax, %rdx + 0x4c, 0x29, 0xea, //0x000069b6 subq %r13, %rdx + 0x48, 0x83, 0xc2, 0xfe, //0x000069b9 addq $-2, %rdx + 0x41, 0xba, 0x01, 0x00, 0x00, 0x00, //0x000069bd movl $1, %r10d + 0x48, 0x89, 0xd1, //0x000069c3 movq %rdx, %rcx + 0x4c, 0x09, 0xf9, //0x000069c6 orq %r15, %rcx + 0x4c, 0x8b, 0x5d, 0xc0, //0x000069c9 movq $-64(%rbp), %r11 + 0x0f, 0x84, 0x00, 0x01, 0x00, 0x00, //0x000069cd je LBB28_82 + 0x4c, 0x39, 0xfa, //0x000069d3 cmpq %r15, %rdx + 0x0f, 0x85, 0xf4, 0x00, 0x00, 0x00, //0x000069d6 jne LBB28_81 + 0x49, 0x03, 0x1b, //0x000069dc addq (%r11), %rbx + 0x49, 0x83, 0xff, 0x10, //0x000069df cmpq $16, %r15 + 0x0f, 0x82, 0x5b, 0x00, 0x00, 0x00, //0x000069e3 jb LBB28_71 + 0x49, 0x8d, 0x57, 0xf0, //0x000069e9 leaq $-16(%r15), %rdx + 0x48, 0x89, 0xd1, //0x000069ed movq %rdx, %rcx + 0x48, 0x83, 0xe1, 0xf0, //0x000069f0 andq $-16, %rcx + 0x4c, 0x8d, 0x44, 0x0b, 0x10, //0x000069f4 leaq $16(%rbx,%rcx), %r8 + 0x49, 0x8d, 0x7c, 0x0e, 0x10, //0x000069f9 leaq $16(%r14,%rcx), %rdi + 0x83, 0xe2, 0x0f, //0x000069fe andl $15, %edx + 0x31, 0xf6, //0x00006a01 xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006a03 .p2align 4, 0x90 + //0x00006a10 LBB28_68 + 0xc5, 0xfa, 0x6f, 0x04, 0x33, //0x00006a10 vmovdqu (%rbx,%rsi), %xmm0 + 0xc4, 0xc1, 0x79, 0x74, 0x04, 0x36, //0x00006a15 vpcmpeqb (%r14,%rsi), %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00006a1b vpmovmskb %xmm0, %ecx + 0x66, 0x83, 0xf9, 0xff, //0x00006a1f cmpw $-1, %cx + 0x0f, 0x85, 0xa7, 0x00, 0x00, 0x00, //0x00006a23 jne LBB28_81 + 0x49, 0x83, 0xc7, 0xf0, //0x00006a29 addq $-16, %r15 + 0x48, 0x83, 0xc6, 0x10, //0x00006a2d addq $16, %rsi + 0x49, 0x83, 0xff, 0x0f, //0x00006a31 cmpq $15, %r15 + 0x0f, 0x87, 0xd5, 0xff, 0xff, 0xff, //0x00006a35 ja LBB28_68 + 0x49, 0x89, 0xd7, //0x00006a3b movq %rdx, %r15 + 0x49, 0x89, 0xfe, //0x00006a3e movq %rdi, %r14 + 0x4c, 0x89, 0xc3, //0x00006a41 movq %r8, %rbx + //0x00006a44 LBB28_71 + 0x44, 0x89, 0xf1, //0x00006a44 movl %r14d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00006a47 andl $4095, %ecx + 0x81, 0xf9, 0xf0, 0x0f, 0x00, 0x00, //0x00006a4d cmpl $4080, %ecx + 0x0f, 0x87, 0x43, 0x00, 0x00, 0x00, //0x00006a53 ja LBB28_76 + 0x89, 0xd9, //0x00006a59 movl %ebx, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00006a5b andl $4095, %ecx + 0x81, 0xf9, 0xf1, 0x0f, 0x00, 0x00, //0x00006a61 cmpl $4081, %ecx + 0x0f, 0x83, 0x2f, 0x00, 0x00, 0x00, //0x00006a67 jae LBB28_76 + 0xc5, 0xfa, 0x6f, 0x03, //0x00006a6d vmovdqu (%rbx), %xmm0 + 0xc4, 0xc1, 0x79, 0x74, 0x06, //0x00006a71 vpcmpeqb (%r14), %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd0, //0x00006a76 vpmovmskb %xmm0, %edx + 0x66, 0x83, 0xfa, 0xff, //0x00006a7a cmpw $-1, %dx + 0x0f, 0x84, 0x4f, 0x00, 0x00, 0x00, //0x00006a7e je LBB28_82 + 0xf7, 0xd2, //0x00006a84 notl %edx + 0x0f, 0xb7, 0xca, //0x00006a86 movzwl %dx, %ecx + 0x48, 0x0f, 0xbc, 0xc9, //0x00006a89 bsfq %rcx, %rcx + 0x45, 0x31, 0xd2, //0x00006a8d xorl %r10d, %r10d + 0x4c, 0x39, 0xf9, //0x00006a90 cmpq %r15, %rcx + 0x41, 0x0f, 0x93, 0xc2, //0x00006a93 setae %r10b + 0xe9, 0x37, 0x00, 0x00, 0x00, //0x00006a97 jmp LBB28_82 + //0x00006a9c LBB28_76 + 0x4d, 0x85, 0xff, //0x00006a9c testq %r15, %r15 + 0x0f, 0x84, 0x2e, 0x00, 0x00, 0x00, //0x00006a9f je LBB28_82 + 0x31, 0xd2, //0x00006aa5 xorl %edx, %edx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006aa7 .p2align 4, 0x90 + //0x00006ab0 LBB28_78 + 0x0f, 0xb6, 0x0c, 0x13, //0x00006ab0 movzbl (%rbx,%rdx), %ecx + 0x41, 0x3a, 0x0c, 0x16, //0x00006ab4 cmpb (%r14,%rdx), %cl + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00006ab8 jne LBB28_81 + 0x48, 0xff, 0xc2, //0x00006abe incq %rdx + 0x49, 0x39, 0xd7, //0x00006ac1 cmpq %rdx, %r15 + 0x0f, 0x85, 0xe6, 0xff, 0xff, 0xff, //0x00006ac4 jne LBB28_78 + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00006aca jmp LBB28_82 + 0x90, //0x00006acf .p2align 4, 0x90 + //0x00006ad0 LBB28_81 + 0x45, 0x31, 0xd2, //0x00006ad0 xorl %r10d, %r10d + //0x00006ad3 LBB28_82 + 0x4d, 0x8b, 0x0b, //0x00006ad3 movq (%r11), %r9 + 0x4c, 0x8b, 0x7d, 0xd0, //0x00006ad6 movq $-48(%rbp), %r15 + 0x49, 0x8b, 0x73, 0x08, //0x00006ada movq $8(%r11), %rsi + 0x48, 0x89, 0xc7, //0x00006ade movq %rax, %rdi + 0x48, 0x29, 0xf7, //0x00006ae1 subq %rsi, %rdi + 0x0f, 0x83, 0x16, 0x04, 0x00, 0x00, //0x00006ae4 jae LBB28_132 + //0x00006aea LBB28_83 + 0x41, 0x8a, 0x14, 0x01, //0x00006aea movb (%r9,%rax), %dl + 0x80, 0xfa, 0x0d, //0x00006aee cmpb $13, %dl + 0x0f, 0x84, 0x09, 0x04, 0x00, 0x00, //0x00006af1 je LBB28_132 + 0x80, 0xfa, 0x20, //0x00006af7 cmpb $32, %dl + 0x0f, 0x84, 0x00, 0x04, 0x00, 0x00, //0x00006afa je LBB28_132 + 0x80, 0xc2, 0xf7, //0x00006b00 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006b03 cmpb $1, %dl + 0x0f, 0x86, 0xf4, 0x03, 0x00, 0x00, //0x00006b06 jbe LBB28_132 + 0x48, 0x89, 0xc3, //0x00006b0c movq %rax, %rbx + 0xe9, 0x0e, 0x05, 0x00, 0x00, //0x00006b0f jmp LBB28_153 + //0x00006b14 LBB28_87 + 0x48, 0xc7, 0x45, 0xc8, 0x00, 0x00, 0x00, 0x00, //0x00006b14 movq $0, $-56(%rbp) + 0x48, 0x8b, 0x4d, 0xc0, //0x00006b1c movq $-64(%rbp), %rcx + 0x4c, 0x8b, 0x09, //0x00006b20 movq (%rcx), %r9 + 0x4c, 0x01, 0xcb, //0x00006b23 addq %r9, %rbx + 0x4d, 0x8d, 0x44, 0x01, 0xff, //0x00006b26 leaq $-1(%r9,%rax), %r8 + 0x4f, 0x8d, 0x1c, 0x3e, //0x00006b2b leaq (%r14,%r15), %r11 + 0x4d, 0x85, 0xff, //0x00006b2f testq %r15, %r15 + 0x0f, 0x8e, 0xa0, 0x03, 0x00, 0x00, //0x00006b32 jle LBB28_129 + 0x49, 0x39, 0xd8, //0x00006b38 cmpq %rbx, %r8 + 0x4c, 0x8b, 0x7d, 0xd0, //0x00006b3b movq $-48(%rbp), %r15 + 0x0f, 0x86, 0x97, 0x03, 0x00, 0x00, //0x00006b3f jbe LBB28_130 + //0x00006b45 LBB28_89 + 0x8a, 0x0b, //0x00006b45 movb (%rbx), %cl + 0x80, 0xf9, 0x5c, //0x00006b47 cmpb $92, %cl + 0x0f, 0x85, 0x58, 0x00, 0x00, 0x00, //0x00006b4a jne LBB28_94 + 0x4c, 0x89, 0xc2, //0x00006b50 movq %r8, %rdx + 0x48, 0x29, 0xda, //0x00006b53 subq %rbx, %rdx + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00006b56 movq $-1, %rcx + 0x48, 0x85, 0xd2, //0x00006b5d testq %rdx, %rdx + 0x0f, 0x8e, 0x22, 0x09, 0x00, 0x00, //0x00006b60 jle LBB28_259 + 0x0f, 0xb6, 0x73, 0x01, //0x00006b66 movzbl $1(%rbx), %esi + 0x48, 0x8d, 0x3d, 0x0f, 0x9c, 0x00, 0x00, //0x00006b6a leaq $39951(%rip), %rdi /* __UnquoteTab+0(%rip) */ + 0x44, 0x8a, 0x3c, 0x3e, //0x00006b71 movb (%rsi,%rdi), %r15b + 0x41, 0x80, 0xff, 0xff, //0x00006b75 cmpb $-1, %r15b + 0x0f, 0x84, 0x3d, 0x00, 0x00, 0x00, //0x00006b79 je LBB28_96 + 0x45, 0x84, 0xff, //0x00006b7f testb %r15b, %r15b + 0x0f, 0x84, 0xee, 0x08, 0x00, 0x00, //0x00006b82 je LBB28_257 + 0x44, 0x88, 0x7d, 0xc8, //0x00006b88 movb %r15b, $-56(%rbp) + 0x48, 0x83, 0xc3, 0x02, //0x00006b8c addq $2, %rbx + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00006b90 movl $1, %edx + 0x4c, 0x8d, 0x54, 0x15, 0xc8, //0x00006b95 leaq $-56(%rbp,%rdx), %r10 + 0x4d, 0x39, 0xde, //0x00006b9a cmpq %r11, %r14 + 0x0f, 0x82, 0x30, 0x01, 0x00, 0x00, //0x00006b9d jb LBB28_107 + 0xe9, 0x08, 0x03, 0x00, 0x00, //0x00006ba3 jmp LBB28_113 + //0x00006ba8 LBB28_94 + 0x41, 0x3a, 0x0e, //0x00006ba8 cmpb (%r14), %cl + 0x0f, 0x85, 0xe6, 0x05, 0x00, 0x00, //0x00006bab jne LBB28_183 + 0x48, 0xff, 0xc3, //0x00006bb1 incq %rbx + 0x49, 0xff, 0xc6, //0x00006bb4 incq %r14 + 0xe9, 0x05, 0x03, 0x00, 0x00, //0x00006bb7 jmp LBB28_115 + //0x00006bbc LBB28_96 + 0x48, 0x83, 0xfa, 0x03, //0x00006bbc cmpq $3, %rdx + 0x0f, 0x8e, 0xbf, 0x08, 0x00, 0x00, //0x00006bc0 jle LBB28_258 + 0x8b, 0x4b, 0x02, //0x00006bc6 movl $2(%rbx), %ecx + 0x89, 0xce, //0x00006bc9 movl %ecx, %esi + 0xf7, 0xd6, //0x00006bcb notl %esi + 0x8d, 0xb9, 0xd0, 0xcf, 0xcf, 0xcf, //0x00006bcd leal $-808464432(%rcx), %edi + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00006bd3 andl $-2139062144, %esi + 0x85, 0xfe, //0x00006bd9 testl %edi, %esi + 0x0f, 0x85, 0x85, 0x08, 0x00, 0x00, //0x00006bdb jne LBB28_256 + 0x8d, 0xb9, 0x19, 0x19, 0x19, 0x19, //0x00006be1 leal $421075225(%rcx), %edi + 0x09, 0xcf, //0x00006be7 orl %ecx, %edi + 0xf7, 0xc7, 0x80, 0x80, 0x80, 0x80, //0x00006be9 testl $-2139062144, %edi + 0x0f, 0x85, 0x71, 0x08, 0x00, 0x00, //0x00006bef jne LBB28_256 + 0x89, 0xcf, //0x00006bf5 movl %ecx, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x00006bf7 andl $2139062143, %edi + 0x41, 0xba, 0xc0, 0xc0, 0xc0, 0xc0, //0x00006bfd movl $-1061109568, %r10d + 0x41, 0x29, 0xfa, //0x00006c03 subl %edi, %r10d + 0x44, 0x8d, 0xbf, 0x46, 0x46, 0x46, 0x46, //0x00006c06 leal $1179010630(%rdi), %r15d + 0x41, 0x21, 0xf2, //0x00006c0d andl %esi, %r10d + 0x45, 0x85, 0xfa, //0x00006c10 testl %r15d, %r10d + 0x0f, 0x85, 0x4d, 0x08, 0x00, 0x00, //0x00006c13 jne LBB28_256 + 0x41, 0xba, 0xe0, 0xe0, 0xe0, 0xe0, //0x00006c19 movl $-522133280, %r10d + 0x41, 0x29, 0xfa, //0x00006c1f subl %edi, %r10d + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x00006c22 addl $960051513, %edi + 0x44, 0x21, 0xd6, //0x00006c28 andl %r10d, %esi + 0x85, 0xfe, //0x00006c2b testl %edi, %esi + 0x0f, 0x85, 0x33, 0x08, 0x00, 0x00, //0x00006c2d jne LBB28_256 + 0x0f, 0xc9, //0x00006c33 bswapl %ecx + 0x89, 0xce, //0x00006c35 movl %ecx, %esi + 0xc1, 0xee, 0x04, //0x00006c37 shrl $4, %esi + 0xf7, 0xd6, //0x00006c3a notl %esi + 0x81, 0xe6, 0x01, 0x01, 0x01, 0x01, //0x00006c3c andl $16843009, %esi + 0x8d, 0x34, 0xf6, //0x00006c42 leal (%rsi,%rsi,8), %esi + 0x81, 0xe1, 0x0f, 0x0f, 0x0f, 0x0f, //0x00006c45 andl $252645135, %ecx + 0x01, 0xf1, //0x00006c4b addl %esi, %ecx + 0x41, 0x89, 0xcf, //0x00006c4d movl %ecx, %r15d + 0x41, 0xc1, 0xef, 0x04, //0x00006c50 shrl $4, %r15d + 0x41, 0x09, 0xcf, //0x00006c54 orl %ecx, %r15d + 0x44, 0x89, 0xfe, //0x00006c57 movl %r15d, %esi + 0xc1, 0xee, 0x08, //0x00006c5a shrl $8, %esi + 0x81, 0xe6, 0x00, 0xff, 0x00, 0x00, //0x00006c5d andl $65280, %esi + 0x41, 0x0f, 0xb6, 0xcf, //0x00006c63 movzbl %r15b, %ecx + 0x09, 0xf1, //0x00006c67 orl %esi, %ecx + 0x4c, 0x8d, 0x53, 0x06, //0x00006c69 leaq $6(%rbx), %r10 + 0x83, 0xf9, 0x7f, //0x00006c6d cmpl $127, %ecx + 0x0f, 0x86, 0xb2, 0x00, 0x00, 0x00, //0x00006c70 jbe LBB28_117 + 0x81, 0xf9, 0xff, 0x07, 0x00, 0x00, //0x00006c76 cmpl $2047, %ecx + 0x0f, 0x86, 0xc5, 0x00, 0x00, 0x00, //0x00006c7c jbe LBB28_118 + 0x44, 0x89, 0xff, //0x00006c82 movl %r15d, %edi + 0x81, 0xe7, 0x00, 0x00, 0xf8, 0x00, //0x00006c85 andl $16252928, %edi + 0x81, 0xff, 0x00, 0x00, 0xd8, 0x00, //0x00006c8b cmpl $14155776, %edi + 0x0f, 0x84, 0xe3, 0x00, 0x00, 0x00, //0x00006c91 je LBB28_119 + 0xc1, 0xee, 0x0c, //0x00006c97 shrl $12, %esi + 0x40, 0x80, 0xce, 0xe0, //0x00006c9a orb $-32, %sil + 0x40, 0x88, 0x75, 0xc8, //0x00006c9e movb %sil, $-56(%rbp) + 0xc1, 0xe9, 0x06, //0x00006ca2 shrl $6, %ecx + 0x80, 0xe1, 0x3f, //0x00006ca5 andb $63, %cl + 0x80, 0xc9, 0x80, //0x00006ca8 orb $-128, %cl + 0x88, 0x4d, 0xc9, //0x00006cab movb %cl, $-55(%rbp) + 0x41, 0x80, 0xe7, 0x3f, //0x00006cae andb $63, %r15b + 0x41, 0x80, 0xcf, 0x80, //0x00006cb2 orb $-128, %r15b + 0x44, 0x88, 0x7d, 0xca, //0x00006cb6 movb %r15b, $-54(%rbp) + 0xba, 0x03, 0x00, 0x00, 0x00, //0x00006cba movl $3, %edx + 0x41, 0x89, 0xf7, //0x00006cbf movl %esi, %r15d + 0x4c, 0x89, 0xd3, //0x00006cc2 movq %r10, %rbx + 0x4c, 0x8d, 0x54, 0x15, 0xc8, //0x00006cc5 leaq $-56(%rbp,%rdx), %r10 + 0x4d, 0x39, 0xde, //0x00006cca cmpq %r11, %r14 + 0x0f, 0x83, 0xdd, 0x01, 0x00, 0x00, //0x00006ccd jae LBB28_113 + //0x00006cd3 LBB28_107 + 0x48, 0x8d, 0x4d, 0xc8, //0x00006cd3 leaq $-56(%rbp), %rcx + 0x49, 0x39, 0xca, //0x00006cd7 cmpq %rcx, %r10 + 0x0f, 0x86, 0xd0, 0x01, 0x00, 0x00, //0x00006cda jbe LBB28_113 + 0x45, 0x38, 0x3e, //0x00006ce0 cmpb %r15b, (%r14) + 0x0f, 0x85, 0xc7, 0x01, 0x00, 0x00, //0x00006ce3 jne LBB28_113 + 0x49, 0xff, 0xc6, //0x00006ce9 incq %r14 + 0x48, 0x8d, 0x75, 0xc9, //0x00006cec leaq $-55(%rbp), %rsi + 0x4c, 0x89, 0xf7, //0x00006cf0 movq %r14, %rdi + 0x4c, 0x8b, 0x7d, 0xd0, //0x00006cf3 movq $-48(%rbp), %r15 + //0x00006cf7 LBB28_110 + 0x49, 0x89, 0xfe, //0x00006cf7 movq %rdi, %r14 + 0x48, 0x89, 0xf2, //0x00006cfa movq %rsi, %rdx + 0x4c, 0x39, 0xd6, //0x00006cfd cmpq %r10, %rsi + 0x0f, 0x83, 0xb2, 0x01, 0x00, 0x00, //0x00006d00 jae LBB28_114 + 0x4d, 0x39, 0xde, //0x00006d06 cmpq %r11, %r14 + 0x0f, 0x83, 0xa9, 0x01, 0x00, 0x00, //0x00006d09 jae LBB28_114 + 0x41, 0x0f, 0xb6, 0x0e, //0x00006d0f movzbl (%r14), %ecx + 0x49, 0x8d, 0x7e, 0x01, //0x00006d13 leaq $1(%r14), %rdi + 0x48, 0x8d, 0x72, 0x01, //0x00006d17 leaq $1(%rdx), %rsi + 0x3a, 0x0a, //0x00006d1b cmpb (%rdx), %cl + 0x0f, 0x84, 0xd4, 0xff, 0xff, 0xff, //0x00006d1d je LBB28_110 + 0xe9, 0x90, 0x01, 0x00, 0x00, //0x00006d23 jmp LBB28_114 + //0x00006d28 LBB28_117 + 0x44, 0x88, 0x7d, 0xc8, //0x00006d28 movb %r15b, $-56(%rbp) + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00006d2c movl $1, %edx + 0x4c, 0x89, 0xd3, //0x00006d31 movq %r10, %rbx + 0x4c, 0x8d, 0x54, 0x15, 0xc8, //0x00006d34 leaq $-56(%rbp,%rdx), %r10 + 0x4d, 0x39, 0xde, //0x00006d39 cmpq %r11, %r14 + 0x0f, 0x82, 0x91, 0xff, 0xff, 0xff, //0x00006d3c jb LBB28_107 + 0xe9, 0x69, 0x01, 0x00, 0x00, //0x00006d42 jmp LBB28_113 + //0x00006d47 LBB28_118 + 0xc1, 0xe9, 0x06, //0x00006d47 shrl $6, %ecx + 0x80, 0xc9, 0xc0, //0x00006d4a orb $-64, %cl + 0x88, 0x4d, 0xc8, //0x00006d4d movb %cl, $-56(%rbp) + 0x41, 0x80, 0xe7, 0x3f, //0x00006d50 andb $63, %r15b + 0x41, 0x80, 0xcf, 0x80, //0x00006d54 orb $-128, %r15b + 0x44, 0x88, 0x7d, 0xc9, //0x00006d58 movb %r15b, $-55(%rbp) + 0xba, 0x02, 0x00, 0x00, 0x00, //0x00006d5c movl $2, %edx + 0x41, 0x89, 0xcf, //0x00006d61 movl %ecx, %r15d + 0x4c, 0x89, 0xd3, //0x00006d64 movq %r10, %rbx + 0x4c, 0x8d, 0x54, 0x15, 0xc8, //0x00006d67 leaq $-56(%rbp,%rdx), %r10 + 0x4d, 0x39, 0xde, //0x00006d6c cmpq %r11, %r14 + 0x0f, 0x82, 0x5e, 0xff, 0xff, 0xff, //0x00006d6f jb LBB28_107 + 0xe9, 0x36, 0x01, 0x00, 0x00, //0x00006d75 jmp LBB28_113 + //0x00006d7a LBB28_119 + 0x48, 0x83, 0xfa, 0x06, //0x00006d7a cmpq $6, %rdx + 0x0f, 0x8c, 0x1f, 0x07, 0x00, 0x00, //0x00006d7e jl LBB28_261 + 0x81, 0xf9, 0xff, 0xdb, 0x00, 0x00, //0x00006d84 cmpl $56319, %ecx + 0x0f, 0x87, 0x13, 0x07, 0x00, 0x00, //0x00006d8a ja LBB28_261 + 0x41, 0x80, 0x3a, 0x5c, //0x00006d90 cmpb $92, (%r10) + 0x0f, 0x85, 0x09, 0x07, 0x00, 0x00, //0x00006d94 jne LBB28_261 + 0x80, 0x7b, 0x07, 0x75, //0x00006d9a cmpb $117, $7(%rbx) + 0x0f, 0x85, 0xff, 0x06, 0x00, 0x00, //0x00006d9e jne LBB28_261 + 0x4c, 0x8d, 0x53, 0x08, //0x00006da4 leaq $8(%rbx), %r10 + 0x8b, 0x53, 0x08, //0x00006da8 movl $8(%rbx), %edx + 0x89, 0xd7, //0x00006dab movl %edx, %edi + 0xf7, 0xd7, //0x00006dad notl %edi + 0x8d, 0xb2, 0xd0, 0xcf, 0xcf, 0xcf, //0x00006daf leal $-808464432(%rdx), %esi + 0x81, 0xe7, 0x80, 0x80, 0x80, 0x80, //0x00006db5 andl $-2139062144, %edi + 0x85, 0xf7, //0x00006dbb testl %esi, %edi + 0x0f, 0x85, 0xd4, 0x06, 0x00, 0x00, //0x00006dbd jne LBB28_260 + 0x8d, 0xb2, 0x19, 0x19, 0x19, 0x19, //0x00006dc3 leal $421075225(%rdx), %esi + 0x09, 0xd6, //0x00006dc9 orl %edx, %esi + 0xf7, 0xc6, 0x80, 0x80, 0x80, 0x80, //0x00006dcb testl $-2139062144, %esi + 0x0f, 0x85, 0xc0, 0x06, 0x00, 0x00, //0x00006dd1 jne LBB28_260 + 0x89, 0xd6, //0x00006dd7 movl %edx, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x00006dd9 andl $2139062143, %esi + 0x41, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, //0x00006ddf movl $-1061109568, %r15d + 0x41, 0x29, 0xf7, //0x00006de5 subl %esi, %r15d + 0x44, 0x8d, 0xae, 0x46, 0x46, 0x46, 0x46, //0x00006de8 leal $1179010630(%rsi), %r13d + 0x41, 0x21, 0xff, //0x00006def andl %edi, %r15d + 0x45, 0x85, 0xef, //0x00006df2 testl %r13d, %r15d + 0x0f, 0x85, 0x9c, 0x06, 0x00, 0x00, //0x00006df5 jne LBB28_260 + 0x41, 0xbf, 0xe0, 0xe0, 0xe0, 0xe0, //0x00006dfb movl $-522133280, %r15d + 0x41, 0x29, 0xf7, //0x00006e01 subl %esi, %r15d + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x00006e04 addl $960051513, %esi + 0x44, 0x21, 0xff, //0x00006e0a andl %r15d, %edi + 0x85, 0xf7, //0x00006e0d testl %esi, %edi + 0x0f, 0x85, 0x82, 0x06, 0x00, 0x00, //0x00006e0f jne LBB28_260 + 0x0f, 0xca, //0x00006e15 bswapl %edx + 0x89, 0xd6, //0x00006e17 movl %edx, %esi + 0xc1, 0xee, 0x04, //0x00006e19 shrl $4, %esi + 0xf7, 0xd6, //0x00006e1c notl %esi + 0x81, 0xe6, 0x01, 0x01, 0x01, 0x01, //0x00006e1e andl $16843009, %esi + 0x8d, 0x34, 0xf6, //0x00006e24 leal (%rsi,%rsi,8), %esi + 0x81, 0xe2, 0x0f, 0x0f, 0x0f, 0x0f, //0x00006e27 andl $252645135, %edx + 0x01, 0xf2, //0x00006e2d addl %esi, %edx + 0x89, 0xd6, //0x00006e2f movl %edx, %esi + 0xc1, 0xee, 0x04, //0x00006e31 shrl $4, %esi + 0x09, 0xd6, //0x00006e34 orl %edx, %esi + 0x89, 0xf2, //0x00006e36 movl %esi, %edx + 0x81, 0xe2, 0x00, 0x00, 0xfc, 0x00, //0x00006e38 andl $16515072, %edx + 0x81, 0xfa, 0x00, 0x00, 0xdc, 0x00, //0x00006e3e cmpl $14417920, %edx + 0x0f, 0x85, 0x59, 0x06, 0x00, 0x00, //0x00006e44 jne LBB28_261 + 0x89, 0xf2, //0x00006e4a movl %esi, %edx + 0xc1, 0xea, 0x08, //0x00006e4c shrl $8, %edx + 0x81, 0xe2, 0x00, 0xff, 0x00, 0x00, //0x00006e4f andl $65280, %edx + 0x40, 0x0f, 0xb6, 0xf6, //0x00006e55 movzbl %sil, %esi + 0x09, 0xd6, //0x00006e59 orl %edx, %esi + 0xc1, 0xe1, 0x0a, //0x00006e5b shll $10, %ecx + 0x8d, 0x8c, 0x31, 0x00, 0x24, 0xa0, 0xfc, //0x00006e5e leal $-56613888(%rcx,%rsi), %ecx + 0x41, 0x89, 0xcf, //0x00006e65 movl %ecx, %r15d + 0x41, 0xc1, 0xef, 0x12, //0x00006e68 shrl $18, %r15d + 0x41, 0x80, 0xcf, 0xf0, //0x00006e6c orb $-16, %r15b + 0x44, 0x88, 0x7d, 0xc8, //0x00006e70 movb %r15b, $-56(%rbp) + 0x89, 0xca, //0x00006e74 movl %ecx, %edx + 0xc1, 0xea, 0x0c, //0x00006e76 shrl $12, %edx + 0x80, 0xe2, 0x3f, //0x00006e79 andb $63, %dl + 0x80, 0xca, 0x80, //0x00006e7c orb $-128, %dl + 0x88, 0x55, 0xc9, //0x00006e7f movb %dl, $-55(%rbp) + 0x89, 0xca, //0x00006e82 movl %ecx, %edx + 0xc1, 0xea, 0x06, //0x00006e84 shrl $6, %edx + 0x80, 0xe2, 0x3f, //0x00006e87 andb $63, %dl + 0x80, 0xca, 0x80, //0x00006e8a orb $-128, %dl + 0x88, 0x55, 0xca, //0x00006e8d movb %dl, $-54(%rbp) + 0x80, 0xe1, 0x3f, //0x00006e90 andb $63, %cl + 0x80, 0xc9, 0x80, //0x00006e93 orb $-128, %cl + 0x88, 0x4d, 0xcb, //0x00006e96 movb %cl, $-53(%rbp) + 0x48, 0x83, 0xc3, 0x0c, //0x00006e99 addq $12, %rbx + 0xba, 0x04, 0x00, 0x00, 0x00, //0x00006e9d movl $4, %edx + 0x4c, 0x8d, 0x54, 0x15, 0xc8, //0x00006ea2 leaq $-56(%rbp,%rdx), %r10 + 0x4d, 0x39, 0xde, //0x00006ea7 cmpq %r11, %r14 + 0x0f, 0x82, 0x23, 0xfe, 0xff, 0xff, //0x00006eaa jb LBB28_107 + //0x00006eb0 LBB28_113 + 0x48, 0x8d, 0x55, 0xc8, //0x00006eb0 leaq $-56(%rbp), %rdx + 0x4c, 0x8b, 0x7d, 0xd0, //0x00006eb4 movq $-48(%rbp), %r15 + //0x00006eb8 LBB28_114 + 0x4c, 0x39, 0xd2, //0x00006eb8 cmpq %r10, %rdx + 0x0f, 0x85, 0xd6, 0x02, 0x00, 0x00, //0x00006ebb jne LBB28_183 + //0x00006ec1 LBB28_115 + 0x49, 0x39, 0xd8, //0x00006ec1 cmpq %rbx, %r8 + 0x0f, 0x86, 0x12, 0x00, 0x00, 0x00, //0x00006ec4 jbe LBB28_130 + 0x4d, 0x39, 0xde, //0x00006eca cmpq %r11, %r14 + 0x0f, 0x82, 0x72, 0xfc, 0xff, 0xff, //0x00006ecd jb LBB28_89 + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00006ed3 jmp LBB28_130 + //0x00006ed8 LBB28_129 + 0x4c, 0x8b, 0x7d, 0xd0, //0x00006ed8 movq $-48(%rbp), %r15 + //0x00006edc LBB28_130 + 0x49, 0x31, 0xd8, //0x00006edc xorq %rbx, %r8 + 0x4d, 0x31, 0xde, //0x00006edf xorq %r11, %r14 + 0x45, 0x31, 0xd2, //0x00006ee2 xorl %r10d, %r10d + 0x4d, 0x09, 0xc6, //0x00006ee5 orq %r8, %r14 + 0x41, 0x0f, 0x94, 0xc2, //0x00006ee8 sete %r10b + //0x00006eec LBB28_131 + 0x4c, 0x8b, 0x5d, 0xc0, //0x00006eec movq $-64(%rbp), %r11 + 0x49, 0x8b, 0x73, 0x08, //0x00006ef0 movq $8(%r11), %rsi + 0x48, 0x89, 0xc7, //0x00006ef4 movq %rax, %rdi + 0x48, 0x29, 0xf7, //0x00006ef7 subq %rsi, %rdi + 0x0f, 0x82, 0xea, 0xfb, 0xff, 0xff, //0x00006efa jb LBB28_83 + //0x00006f00 .p2align 4, 0x90 + //0x00006f00 LBB28_132 + 0x48, 0x8d, 0x58, 0x01, //0x00006f00 leaq $1(%rax), %rbx + 0x48, 0x39, 0xf3, //0x00006f04 cmpq %rsi, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006f07 jae LBB28_136 + 0x41, 0x8a, 0x14, 0x19, //0x00006f0d movb (%r9,%rbx), %dl + 0x80, 0xfa, 0x0d, //0x00006f11 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00006f14 je LBB28_136 + 0x80, 0xfa, 0x20, //0x00006f1a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00006f1d je LBB28_136 + 0x80, 0xc2, 0xf7, //0x00006f23 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006f26 cmpb $1, %dl + 0x0f, 0x87, 0xf3, 0x00, 0x00, 0x00, //0x00006f29 ja LBB28_153 + 0x90, //0x00006f2f .p2align 4, 0x90 + //0x00006f30 LBB28_136 + 0x48, 0x8d, 0x58, 0x02, //0x00006f30 leaq $2(%rax), %rbx + 0x48, 0x39, 0xf3, //0x00006f34 cmpq %rsi, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006f37 jae LBB28_140 + 0x41, 0x8a, 0x14, 0x19, //0x00006f3d movb (%r9,%rbx), %dl + 0x80, 0xfa, 0x0d, //0x00006f41 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00006f44 je LBB28_140 + 0x80, 0xfa, 0x20, //0x00006f4a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00006f4d je LBB28_140 + 0x80, 0xc2, 0xf7, //0x00006f53 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006f56 cmpb $1, %dl + 0x0f, 0x87, 0xc3, 0x00, 0x00, 0x00, //0x00006f59 ja LBB28_153 + 0x90, //0x00006f5f .p2align 4, 0x90 + //0x00006f60 LBB28_140 + 0x48, 0x8d, 0x58, 0x03, //0x00006f60 leaq $3(%rax), %rbx + 0x48, 0x39, 0xf3, //0x00006f64 cmpq %rsi, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006f67 jae LBB28_144 + 0x41, 0x8a, 0x14, 0x19, //0x00006f6d movb (%r9,%rbx), %dl + 0x80, 0xfa, 0x0d, //0x00006f71 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00006f74 je LBB28_144 + 0x80, 0xfa, 0x20, //0x00006f7a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00006f7d je LBB28_144 + 0x80, 0xc2, 0xf7, //0x00006f83 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006f86 cmpb $1, %dl + 0x0f, 0x87, 0x93, 0x00, 0x00, 0x00, //0x00006f89 ja LBB28_153 + 0x90, //0x00006f8f .p2align 4, 0x90 + //0x00006f90 LBB28_144 + 0x48, 0x8d, 0x50, 0x04, //0x00006f90 leaq $4(%rax), %rdx + 0x48, 0x39, 0xd6, //0x00006f94 cmpq %rdx, %rsi + 0x0f, 0x86, 0x49, 0x04, 0x00, 0x00, //0x00006f97 jbe LBB28_245 + 0x48, 0x39, 0xd6, //0x00006f9d cmpq %rdx, %rsi + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x00006fa0 je LBB28_150 + 0x49, 0x8d, 0x14, 0x31, //0x00006fa6 leaq (%r9,%rsi), %rdx + 0x48, 0x83, 0xc7, 0x04, //0x00006faa addq $4, %rdi + 0x49, 0x8d, 0x5c, 0x01, 0x05, //0x00006fae leaq $5(%r9,%rax), %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006fb3 .p2align 4, 0x90 + //0x00006fc0 LBB28_147 + 0x0f, 0xbe, 0x4b, 0xff, //0x00006fc0 movsbl $-1(%rbx), %ecx + 0x83, 0xf9, 0x20, //0x00006fc4 cmpl $32, %ecx + 0x0f, 0x87, 0x43, 0x00, 0x00, 0x00, //0x00006fc7 ja LBB28_152 + 0x49, 0x0f, 0xa3, 0xcc, //0x00006fcd btq %rcx, %r12 + 0x0f, 0x83, 0x39, 0x00, 0x00, 0x00, //0x00006fd1 jae LBB28_152 + 0x48, 0xff, 0xc3, //0x00006fd7 incq %rbx + 0x48, 0xff, 0xc7, //0x00006fda incq %rdi + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00006fdd jne LBB28_147 + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00006fe3 jmp LBB28_151 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006fe8 .p2align 4, 0x90 + //0x00006ff0 LBB28_150 + 0x4c, 0x01, 0xca, //0x00006ff0 addq %r9, %rdx + //0x00006ff3 LBB28_151 + 0x4c, 0x29, 0xca, //0x00006ff3 subq %r9, %rdx + 0x48, 0x89, 0xd3, //0x00006ff6 movq %rdx, %rbx + 0x48, 0x39, 0xf3, //0x00006ff9 cmpq %rsi, %rbx + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x00006ffc jb LBB28_153 + 0xe9, 0xe5, 0x03, 0x00, 0x00, //0x00007002 jmp LBB28_247 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007007 .p2align 4, 0x90 + //0x00007010 LBB28_152 + 0x4c, 0x89, 0xc9, //0x00007010 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x00007013 notq %rcx + 0x48, 0x01, 0xcb, //0x00007016 addq %rcx, %rbx + 0x48, 0x39, 0xf3, //0x00007019 cmpq %rsi, %rbx + 0x0f, 0x83, 0xca, 0x03, 0x00, 0x00, //0x0000701c jae LBB28_247 + //0x00007022 LBB28_153 + 0x48, 0x8d, 0x53, 0x01, //0x00007022 leaq $1(%rbx), %rdx + 0x49, 0x89, 0x17, //0x00007026 movq %rdx, (%r15) + 0x41, 0x80, 0x3c, 0x19, 0x3a, //0x00007029 cmpb $58, (%r9,%rbx) + 0x0f, 0x85, 0xb5, 0x03, 0x00, 0x00, //0x0000702e jne LBB28_246 + 0x4d, 0x85, 0xd2, //0x00007034 testq %r10, %r10 + 0x0f, 0x85, 0x66, 0x03, 0x00, 0x00, //0x00007037 jne LBB28_243 + 0x4c, 0x89, 0xdf, //0x0000703d movq %r11, %rdi + 0x4c, 0x89, 0xfe, //0x00007040 movq %r15, %rsi + 0xe8, 0x48, 0xe6, 0xff, 0xff, //0x00007043 callq _skip_one_fast + 0x4c, 0x8b, 0x5d, 0xc0, //0x00007048 movq $-64(%rbp), %r11 + 0x4d, 0x8b, 0x0b, //0x0000704c movq (%r11), %r9 + 0x49, 0x8b, 0x4b, 0x08, //0x0000704f movq $8(%r11), %rcx + 0x49, 0x8b, 0x07, //0x00007053 movq (%r15), %rax + 0x48, 0x89, 0xc6, //0x00007056 movq %rax, %rsi + 0x48, 0x29, 0xce, //0x00007059 subq %rcx, %rsi + 0x0f, 0x83, 0x2e, 0x00, 0x00, 0x00, //0x0000705c jae LBB28_160 + 0x41, 0x8a, 0x14, 0x01, //0x00007062 movb (%r9,%rax), %dl + 0x80, 0xfa, 0x0d, //0x00007066 cmpb $13, %dl + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00007069 je LBB28_160 + 0x80, 0xfa, 0x20, //0x0000706f cmpb $32, %dl + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x00007072 je LBB28_160 + 0x80, 0xc2, 0xf7, //0x00007078 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x0000707b cmpb $1, %dl + 0x0f, 0x86, 0x0c, 0x00, 0x00, 0x00, //0x0000707e jbe LBB28_160 + 0x48, 0x89, 0xc7, //0x00007084 movq %rax, %rdi + 0xe9, 0x4e, 0xf7, 0xff, 0xff, //0x00007087 jmp LBB28_181 + 0x90, 0x90, 0x90, 0x90, //0x0000708c .p2align 4, 0x90 + //0x00007090 LBB28_160 + 0x48, 0x8d, 0x78, 0x01, //0x00007090 leaq $1(%rax), %rdi + 0x48, 0x39, 0xcf, //0x00007094 cmpq %rcx, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00007097 jae LBB28_164 + 0x41, 0x8a, 0x14, 0x39, //0x0000709d movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x000070a1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000070a4 je LBB28_164 + 0x80, 0xfa, 0x20, //0x000070aa cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000070ad je LBB28_164 + 0x80, 0xc2, 0xf7, //0x000070b3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000070b6 cmpb $1, %dl + 0x0f, 0x87, 0x1b, 0xf7, 0xff, 0xff, //0x000070b9 ja LBB28_181 + 0x90, //0x000070bf .p2align 4, 0x90 + //0x000070c0 LBB28_164 + 0x48, 0x8d, 0x78, 0x02, //0x000070c0 leaq $2(%rax), %rdi + 0x48, 0x39, 0xcf, //0x000070c4 cmpq %rcx, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000070c7 jae LBB28_168 + 0x41, 0x8a, 0x14, 0x39, //0x000070cd movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x000070d1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000070d4 je LBB28_168 + 0x80, 0xfa, 0x20, //0x000070da cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000070dd je LBB28_168 + 0x80, 0xc2, 0xf7, //0x000070e3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000070e6 cmpb $1, %dl + 0x0f, 0x87, 0xeb, 0xf6, 0xff, 0xff, //0x000070e9 ja LBB28_181 + 0x90, //0x000070ef .p2align 4, 0x90 + //0x000070f0 LBB28_168 + 0x48, 0x8d, 0x78, 0x03, //0x000070f0 leaq $3(%rax), %rdi + 0x48, 0x39, 0xcf, //0x000070f4 cmpq %rcx, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000070f7 jae LBB28_172 + 0x41, 0x8a, 0x14, 0x39, //0x000070fd movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x00007101 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00007104 je LBB28_172 + 0x80, 0xfa, 0x20, //0x0000710a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000710d je LBB28_172 + 0x80, 0xc2, 0xf7, //0x00007113 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00007116 cmpb $1, %dl + 0x0f, 0x87, 0xbb, 0xf6, 0xff, 0xff, //0x00007119 ja LBB28_181 + 0x90, //0x0000711f .p2align 4, 0x90 + //0x00007120 LBB28_172 + 0x48, 0x8d, 0x50, 0x04, //0x00007120 leaq $4(%rax), %rdx + 0x48, 0x39, 0xd1, //0x00007124 cmpq %rdx, %rcx + 0x0f, 0x86, 0xb9, 0x02, 0x00, 0x00, //0x00007127 jbe LBB28_245 + 0x48, 0x39, 0xd1, //0x0000712d cmpq %rdx, %rcx + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x00007130 je LBB28_178 + 0x49, 0x8d, 0x14, 0x09, //0x00007136 leaq (%r9,%rcx), %rdx + 0x48, 0x83, 0xc6, 0x04, //0x0000713a addq $4, %rsi + 0x49, 0x8d, 0x7c, 0x01, 0x05, //0x0000713e leaq $5(%r9,%rax), %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007143 .p2align 4, 0x90 + //0x00007150 LBB28_175 + 0x0f, 0xbe, 0x5f, 0xff, //0x00007150 movsbl $-1(%rdi), %ebx + 0x83, 0xfb, 0x20, //0x00007154 cmpl $32, %ebx + 0x0f, 0x87, 0x6b, 0xf6, 0xff, 0xff, //0x00007157 ja LBB28_180 + 0x49, 0x0f, 0xa3, 0xdc, //0x0000715d btq %rbx, %r12 + 0x0f, 0x83, 0x61, 0xf6, 0xff, 0xff, //0x00007161 jae LBB28_180 + 0x48, 0xff, 0xc7, //0x00007167 incq %rdi + 0x48, 0xff, 0xc6, //0x0000716a incq %rsi + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x0000716d jne LBB28_175 + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00007173 jmp LBB28_179 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007178 .p2align 4, 0x90 + //0x00007180 LBB28_178 + 0x4c, 0x01, 0xca, //0x00007180 addq %r9, %rdx + //0x00007183 LBB28_179 + 0x4c, 0x29, 0xca, //0x00007183 subq %r9, %rdx + 0x48, 0x89, 0xd7, //0x00007186 movq %rdx, %rdi + 0x48, 0x39, 0xcf, //0x00007189 cmpq %rcx, %rdi + 0x0f, 0x82, 0x48, 0xf6, 0xff, 0xff, //0x0000718c jb LBB28_181 + 0xe9, 0x55, 0x02, 0x00, 0x00, //0x00007192 jmp LBB28_247 + //0x00007197 LBB28_183 + 0x45, 0x31, 0xd2, //0x00007197 xorl %r10d, %r10d + 0xe9, 0x4d, 0xfd, 0xff, 0xff, //0x0000719a jmp LBB28_131 + //0x0000719f LBB28_209 + 0x49, 0x89, 0x17, //0x0000719f movq %rdx, (%r15) + 0x48, 0x89, 0xd0, //0x000071a2 movq %rdx, %rax + 0xe9, 0x52, 0x00, 0x00, 0x00, //0x000071a5 jmp LBB28_214 + //0x000071aa LBB28_29 + 0x4c, 0x89, 0xc8, //0x000071aa movq %r9, %rax + 0x48, 0xf7, 0xd0, //0x000071ad notq %rax + 0x48, 0x01, 0xc6, //0x000071b0 addq %rax, %rsi + 0x4c, 0x39, 0xc6, //0x000071b3 cmpq %r8, %rsi + 0x0f, 0x82, 0x16, 0xf4, 0xff, 0xff, //0x000071b6 jb LBB28_28 + 0xe9, 0x6b, 0xf4, 0xff, 0xff, //0x000071bc jmp LBB28_30 + //0x000071c1 LBB28_210 + 0x4c, 0x01, 0xca, //0x000071c1 addq %r9, %rdx + //0x000071c4 LBB28_211 + 0x4c, 0x29, 0xca, //0x000071c4 subq %r9, %rdx + 0x48, 0x89, 0xd7, //0x000071c7 movq %rdx, %rdi + 0x4c, 0x39, 0xc7, //0x000071ca cmpq %r8, %rdi + 0x0f, 0x82, 0x17, 0x00, 0x00, 0x00, //0x000071cd jb LBB28_213 + 0xe9, 0x24, 0x00, 0x00, 0x00, //0x000071d3 jmp LBB28_214 + //0x000071d8 LBB28_212 + 0x4c, 0x89, 0xc9, //0x000071d8 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x000071db notq %rcx + 0x48, 0x01, 0xcf, //0x000071de addq %rcx, %rdi + 0x4c, 0x39, 0xc7, //0x000071e1 cmpq %r8, %rdi + 0x0f, 0x83, 0x12, 0x00, 0x00, 0x00, //0x000071e4 jae LBB28_214 + //0x000071ea LBB28_213 + 0x48, 0x8d, 0x47, 0x01, //0x000071ea leaq $1(%rdi), %rax + 0x49, 0x89, 0x07, //0x000071ee movq %rax, (%r15) + 0x41, 0x80, 0x3c, 0x39, 0x5d, //0x000071f1 cmpb $93, (%r9,%rdi) + 0x0f, 0x84, 0x3d, 0x02, 0x00, 0x00, //0x000071f6 je LBB28_254 + //0x000071fc LBB28_214 + 0x48, 0xff, 0xc8, //0x000071fc decq %rax + 0x49, 0x89, 0x07, //0x000071ff movq %rax, (%r15) + 0x48, 0x89, 0xc2, //0x00007202 movq %rax, %rdx + 0x4d, 0x85, 0xf6, //0x00007205 testq %r14, %r14 + 0x0f, 0x8e, 0x95, 0x01, 0x00, 0x00, //0x00007208 jle LBB28_243 + 0x90, 0x90, //0x0000720e .p2align 4, 0x90 + //0x00007210 LBB28_215 + 0x4c, 0x89, 0xdf, //0x00007210 movq %r11, %rdi + 0x4c, 0x89, 0xfe, //0x00007213 movq %r15, %rsi + 0xe8, 0x75, 0xe4, 0xff, 0xff, //0x00007216 callq _skip_one_fast + 0x4c, 0x8b, 0x5d, 0xc0, //0x0000721b movq $-64(%rbp), %r11 + 0x4d, 0x8b, 0x0b, //0x0000721f movq (%r11), %r9 + 0x49, 0x8b, 0x4b, 0x08, //0x00007222 movq $8(%r11), %rcx + 0x49, 0x8b, 0x07, //0x00007226 movq (%r15), %rax + 0x48, 0x89, 0xc6, //0x00007229 movq %rax, %rsi + 0x48, 0x29, 0xce, //0x0000722c subq %rcx, %rsi + 0x0f, 0x83, 0x2b, 0x00, 0x00, 0x00, //0x0000722f jae LBB28_220 + 0x41, 0x8a, 0x14, 0x01, //0x00007235 movb (%r9,%rax), %dl + 0x80, 0xfa, 0x0d, //0x00007239 cmpb $13, %dl + 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x0000723c je LBB28_220 + 0x80, 0xfa, 0x20, //0x00007242 cmpb $32, %dl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00007245 je LBB28_220 + 0x80, 0xc2, 0xf7, //0x0000724b addb $-9, %dl + 0x80, 0xfa, 0x01, //0x0000724e cmpb $1, %dl + 0x0f, 0x86, 0x09, 0x00, 0x00, 0x00, //0x00007251 jbe LBB28_220 + 0x48, 0x89, 0xc7, //0x00007257 movq %rax, %rdi + 0xe9, 0x23, 0x01, 0x00, 0x00, //0x0000725a jmp LBB28_241 + 0x90, //0x0000725f .p2align 4, 0x90 + //0x00007260 LBB28_220 + 0x48, 0x8d, 0x78, 0x01, //0x00007260 leaq $1(%rax), %rdi + 0x48, 0x39, 0xcf, //0x00007264 cmpq %rcx, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00007267 jae LBB28_224 + 0x41, 0x8a, 0x14, 0x39, //0x0000726d movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x00007271 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00007274 je LBB28_224 + 0x80, 0xfa, 0x20, //0x0000727a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000727d je LBB28_224 + 0x80, 0xc2, 0xf7, //0x00007283 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00007286 cmpb $1, %dl + 0x0f, 0x87, 0xf3, 0x00, 0x00, 0x00, //0x00007289 ja LBB28_241 + 0x90, //0x0000728f .p2align 4, 0x90 + //0x00007290 LBB28_224 + 0x48, 0x8d, 0x78, 0x02, //0x00007290 leaq $2(%rax), %rdi + 0x48, 0x39, 0xcf, //0x00007294 cmpq %rcx, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00007297 jae LBB28_228 + 0x41, 0x8a, 0x14, 0x39, //0x0000729d movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x000072a1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000072a4 je LBB28_228 + 0x80, 0xfa, 0x20, //0x000072aa cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000072ad je LBB28_228 + 0x80, 0xc2, 0xf7, //0x000072b3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000072b6 cmpb $1, %dl + 0x0f, 0x87, 0xc3, 0x00, 0x00, 0x00, //0x000072b9 ja LBB28_241 + 0x90, //0x000072bf .p2align 4, 0x90 + //0x000072c0 LBB28_228 + 0x48, 0x8d, 0x78, 0x03, //0x000072c0 leaq $3(%rax), %rdi + 0x48, 0x39, 0xcf, //0x000072c4 cmpq %rcx, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000072c7 jae LBB28_232 + 0x41, 0x8a, 0x14, 0x39, //0x000072cd movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x000072d1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000072d4 je LBB28_232 + 0x80, 0xfa, 0x20, //0x000072da cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000072dd je LBB28_232 + 0x80, 0xc2, 0xf7, //0x000072e3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000072e6 cmpb $1, %dl + 0x0f, 0x87, 0x93, 0x00, 0x00, 0x00, //0x000072e9 ja LBB28_241 + 0x90, //0x000072ef .p2align 4, 0x90 + //0x000072f0 LBB28_232 + 0x48, 0x8d, 0x50, 0x04, //0x000072f0 leaq $4(%rax), %rdx + 0x48, 0x39, 0xd1, //0x000072f4 cmpq %rdx, %rcx + 0x0f, 0x86, 0xe9, 0x00, 0x00, 0x00, //0x000072f7 jbe LBB28_245 + 0x48, 0x39, 0xd1, //0x000072fd cmpq %rdx, %rcx + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x00007300 je LBB28_238 + 0x49, 0x8d, 0x14, 0x09, //0x00007306 leaq (%r9,%rcx), %rdx + 0x48, 0x83, 0xc6, 0x04, //0x0000730a addq $4, %rsi + 0x49, 0x8d, 0x7c, 0x01, 0x05, //0x0000730e leaq $5(%r9,%rax), %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007313 .p2align 4, 0x90 + //0x00007320 LBB28_235 + 0x0f, 0xbe, 0x5f, 0xff, //0x00007320 movsbl $-1(%rdi), %ebx + 0x83, 0xfb, 0x20, //0x00007324 cmpl $32, %ebx + 0x0f, 0x87, 0x43, 0x00, 0x00, 0x00, //0x00007327 ja LBB28_240 + 0x49, 0x0f, 0xa3, 0xdc, //0x0000732d btq %rbx, %r12 + 0x0f, 0x83, 0x39, 0x00, 0x00, 0x00, //0x00007331 jae LBB28_240 + 0x48, 0xff, 0xc7, //0x00007337 incq %rdi + 0x48, 0xff, 0xc6, //0x0000733a incq %rsi + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x0000733d jne LBB28_235 + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00007343 jmp LBB28_239 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007348 .p2align 4, 0x90 + //0x00007350 LBB28_238 + 0x4c, 0x01, 0xca, //0x00007350 addq %r9, %rdx + //0x00007353 LBB28_239 + 0x4c, 0x29, 0xca, //0x00007353 subq %r9, %rdx + 0x48, 0x89, 0xd7, //0x00007356 movq %rdx, %rdi + 0x48, 0x39, 0xcf, //0x00007359 cmpq %rcx, %rdi + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x0000735c jb LBB28_241 + 0xe9, 0x85, 0x00, 0x00, 0x00, //0x00007362 jmp LBB28_247 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007367 .p2align 4, 0x90 + //0x00007370 LBB28_240 + 0x4c, 0x89, 0xca, //0x00007370 movq %r9, %rdx + 0x48, 0xf7, 0xd2, //0x00007373 notq %rdx + 0x48, 0x01, 0xd7, //0x00007376 addq %rdx, %rdi + 0x48, 0x39, 0xcf, //0x00007379 cmpq %rcx, %rdi + 0x0f, 0x83, 0x6a, 0x00, 0x00, 0x00, //0x0000737c jae LBB28_247 + //0x00007382 LBB28_241 + 0x48, 0x8d, 0x57, 0x01, //0x00007382 leaq $1(%rdi), %rdx + 0x49, 0x89, 0x17, //0x00007386 movq %rdx, (%r15) + 0x41, 0x8a, 0x04, 0x39, //0x00007389 movb (%r9,%rdi), %al + 0x3c, 0x2c, //0x0000738d cmpb $44, %al + 0x0f, 0x85, 0x76, 0x00, 0x00, 0x00, //0x0000738f jne LBB28_249 + 0x49, 0x83, 0xfe, 0x02, //0x00007395 cmpq $2, %r14 + 0x4d, 0x8d, 0x76, 0xff, //0x00007399 leaq $-1(%r14), %r14 + 0x0f, 0x8d, 0x6d, 0xfe, 0xff, 0xff, //0x0000739d jge LBB28_215 + //0x000073a3 LBB28_243 + 0x48, 0x8b, 0x45, 0xb8, //0x000073a3 movq $-72(%rbp), %rax + 0x48, 0x83, 0xc0, 0x10, //0x000073a7 addq $16, %rax + 0x4c, 0x8b, 0x55, 0xa8, //0x000073ab movq $-88(%rbp), %r10 + 0x48, 0x89, 0x45, 0xb8, //0x000073af movq %rax, $-72(%rbp) + 0x4c, 0x39, 0xd0, //0x000073b3 cmpq %r10, %rax + 0x48, 0x8b, 0x4d, 0xa0, //0x000073b6 movq $-96(%rbp), %rcx + 0x0f, 0x85, 0xde, 0xf0, 0xff, 0xff, //0x000073ba jne LBB28_2 + //0x000073c0 LBB28_244 + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000073c0 movl $1, %eax + 0xc4, 0xe1, 0xf9, 0x6e, 0xc0, //0x000073c5 vmovq %rax, %xmm0 + 0xc5, 0xfa, 0x7f, 0x01, //0x000073ca vmovdqu %xmm0, (%rcx) + 0x48, 0x89, 0xcf, //0x000073ce movq %rcx, %rdi + 0x4c, 0x89, 0xde, //0x000073d1 movq %r11, %rsi + 0x4c, 0x89, 0xfa, //0x000073d4 movq %r15, %rdx + 0x31, 0xc9, //0x000073d7 xorl %ecx, %ecx + 0xe8, 0x22, 0xd2, 0xff, 0xff, //0x000073d9 callq _fsm_exec + 0x48, 0x89, 0xc1, //0x000073de movq %rax, %rcx + 0xe9, 0x13, 0x00, 0x00, 0x00, //0x000073e1 jmp LBB28_248 + //0x000073e6 LBB28_245 + 0x49, 0x89, 0x17, //0x000073e6 movq %rdx, (%r15) + //0x000073e9 LBB28_246 + 0x48, 0x89, 0xd0, //0x000073e9 movq %rdx, %rax + //0x000073ec LBB28_247 + 0x48, 0xff, 0xc8, //0x000073ec decq %rax + 0x49, 0x89, 0x07, //0x000073ef movq %rax, (%r15) + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000073f2 movq $-2, %rcx + //0x000073f9 LBB28_248 + 0x48, 0x89, 0xc8, //0x000073f9 movq %rcx, %rax + 0x48, 0x83, 0xc4, 0x38, //0x000073fc addq $56, %rsp + 0x5b, //0x00007400 popq %rbx + 0x41, 0x5c, //0x00007401 popq %r12 + 0x41, 0x5d, //0x00007403 popq %r13 + 0x41, 0x5e, //0x00007405 popq %r14 + 0x41, 0x5f, //0x00007407 popq %r15 + 0x5d, //0x00007409 popq %rbp + 0xc3, //0x0000740a retq + //0x0000740b LBB28_249 + 0x3c, 0x5d, //0x0000740b cmpb $93, %al + 0x0f, 0x85, 0xd6, 0xff, 0xff, 0xff, //0x0000740d jne LBB28_246 + 0x48, 0x89, 0xd0, //0x00007413 movq %rdx, %rax + 0xe9, 0x1e, 0x00, 0x00, 0x00, //0x00007416 jmp LBB28_254 + //0x0000741b LBB28_251 + 0x48, 0xff, 0xc8, //0x0000741b decq %rax + 0x49, 0x89, 0x07, //0x0000741e movq %rax, (%r15) + 0x48, 0xc7, 0xc1, 0xde, 0xff, 0xff, 0xff, //0x00007421 movq $-34, %rcx + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x00007428 jmp LBB28_248 + //0x0000742d LBB28_252 + 0x48, 0x89, 0xd8, //0x0000742d movq %rbx, %rax + //0x00007430 LBB28_253 + 0x80, 0xf9, 0x7d, //0x00007430 cmpb $125, %cl + 0x0f, 0x85, 0xb3, 0xff, 0xff, 0xff, //0x00007433 jne LBB28_247 + //0x00007439 LBB28_254 + 0x48, 0xff, 0xc8, //0x00007439 decq %rax + 0x49, 0x89, 0x07, //0x0000743c movq %rax, (%r15) + 0x48, 0xc7, 0xc1, 0xdf, 0xff, 0xff, 0xff, //0x0000743f movq $-33, %rcx + 0xe9, 0xae, 0xff, 0xff, 0xff, //0x00007446 jmp LBB28_248 + //0x0000744b LBB28_255 + 0x48, 0x8b, 0x45, 0xc0, //0x0000744b movq $-64(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x0000744f movq $8(%rax), %rax + 0x48, 0x8b, 0x4d, 0xd0, //0x00007453 movq $-48(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00007457 movq %rax, (%rcx) + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000745a movq $-1, %rcx + 0xe9, 0x93, 0xff, 0xff, 0xff, //0x00007461 jmp LBB28_248 + //0x00007466 LBB28_256 + 0x48, 0x83, 0xc3, 0x02, //0x00007466 addq $2, %rbx + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x0000746a movq $-2, %rcx + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00007471 jmp LBB28_259 + //0x00007476 LBB28_257 + 0x48, 0xff, 0xc3, //0x00007476 incq %rbx + 0x48, 0xc7, 0xc1, 0xfd, 0xff, 0xff, 0xff, //0x00007479 movq $-3, %rcx + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00007480 jmp LBB28_259 + //0x00007485 LBB28_258 + 0x48, 0xff, 0xc3, //0x00007485 incq %rbx + //0x00007488 LBB28_259 + 0x48, 0x8b, 0x45, 0xd0, //0x00007488 movq $-48(%rbp), %rax + 0x4c, 0x29, 0xcb, //0x0000748c subq %r9, %rbx + 0x48, 0x89, 0x18, //0x0000748f movq %rbx, (%rax) + 0xe9, 0x62, 0xff, 0xff, 0xff, //0x00007492 jmp LBB28_248 + //0x00007497 LBB28_260 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00007497 movq $-2, %rcx + 0xe9, 0x07, 0x00, 0x00, 0x00, //0x0000749e jmp LBB28_262 + //0x000074a3 LBB28_261 + 0x48, 0xc7, 0xc1, 0xfc, 0xff, 0xff, 0xff, //0x000074a3 movq $-4, %rcx + //0x000074aa LBB28_262 + 0x4c, 0x89, 0xd3, //0x000074aa movq %r10, %rbx + 0xe9, 0xd6, 0xff, 0xff, 0xff, //0x000074ad jmp LBB28_259 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000074b2 .p2align 4, 0x90 + //0x000074c0 _validate_utf8 + 0x55, //0x000074c0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000074c1 movq %rsp, %rbp + 0x41, 0x57, //0x000074c4 pushq %r15 + 0x41, 0x56, //0x000074c6 pushq %r14 + 0x41, 0x54, //0x000074c8 pushq %r12 + 0x53, //0x000074ca pushq %rbx + 0x50, //0x000074cb pushq %rax + 0x4c, 0x8b, 0x17, //0x000074cc movq (%rdi), %r10 + 0x4c, 0x8b, 0x5f, 0x08, //0x000074cf movq $8(%rdi), %r11 + 0x48, 0x8b, 0x0e, //0x000074d3 movq (%rsi), %rcx + 0x4c, 0x01, 0xd1, //0x000074d6 addq %r10, %rcx + 0x4f, 0x8d, 0x44, 0x1a, 0xfd, //0x000074d9 leaq $-3(%r10,%r11), %r8 + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x000074de jmp LBB29_1 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000074e3 .p2align 4, 0x90 + //0x000074f0 LBB29_19 + 0x48, 0x01, 0xd9, //0x000074f0 addq %rbx, %rcx + //0x000074f3 LBB29_1 + 0x4c, 0x39, 0xc1, //0x000074f3 cmpq %r8, %rcx + 0x0f, 0x83, 0xe1, 0x00, 0x00, 0x00, //0x000074f6 jae LBB29_2 + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x000074fc movl $1, %ebx + 0x80, 0x39, 0x00, //0x00007501 cmpb $0, (%rcx) + 0x0f, 0x89, 0xe6, 0xff, 0xff, 0xff, //0x00007504 jns LBB29_19 + 0x8b, 0x01, //0x0000750a movl (%rcx), %eax + 0x89, 0xc7, //0x0000750c movl %eax, %edi + 0x81, 0xe7, 0xf0, 0xc0, 0xc0, 0x00, //0x0000750e andl $12632304, %edi + 0x81, 0xff, 0xe0, 0x80, 0x80, 0x00, //0x00007514 cmpl $8421600, %edi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000751a jne LBB29_10 + 0x89, 0xc7, //0x00007520 movl %eax, %edi + 0x81, 0xe7, 0x0f, 0x20, 0x00, 0x00, //0x00007522 andl $8207, %edi + 0x81, 0xff, 0x0d, 0x20, 0x00, 0x00, //0x00007528 cmpl $8205, %edi + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x0000752e je LBB29_10 + 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00007534 movl $3, %ebx + 0x85, 0xff, //0x00007539 testl %edi, %edi + 0x0f, 0x85, 0xaf, 0xff, 0xff, 0xff, //0x0000753b jne LBB29_19 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007541 .p2align 4, 0x90 + //0x00007550 LBB29_10 + 0x89, 0xc7, //0x00007550 movl %eax, %edi + 0x81, 0xe7, 0xe0, 0xc0, 0x00, 0x00, //0x00007552 andl $49376, %edi + 0x81, 0xff, 0xc0, 0x80, 0x00, 0x00, //0x00007558 cmpl $32960, %edi + 0x0f, 0x85, 0x10, 0x00, 0x00, 0x00, //0x0000755e jne LBB29_12 + 0x89, 0xc7, //0x00007564 movl %eax, %edi + 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00007566 movl $2, %ebx + 0x83, 0xe7, 0x1e, //0x0000756b andl $30, %edi + 0x0f, 0x85, 0x7c, 0xff, 0xff, 0xff, //0x0000756e jne LBB29_19 + //0x00007574 LBB29_12 + 0x89, 0xc7, //0x00007574 movl %eax, %edi + 0x81, 0xe7, 0xf8, 0xc0, 0xc0, 0xc0, //0x00007576 andl $-1061109512, %edi + 0x81, 0xff, 0xf0, 0x80, 0x80, 0x80, //0x0000757c cmpl $-2139062032, %edi + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x00007582 jne LBB29_16 + 0x89, 0xc7, //0x00007588 movl %eax, %edi + 0x81, 0xe7, 0x07, 0x30, 0x00, 0x00, //0x0000758a andl $12295, %edi + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x00007590 je LBB29_16 + 0xbb, 0x04, 0x00, 0x00, 0x00, //0x00007596 movl $4, %ebx + 0xa8, 0x04, //0x0000759b testb $4, %al + 0x0f, 0x84, 0x4d, 0xff, 0xff, 0xff, //0x0000759d je LBB29_19 + 0x25, 0x03, 0x30, 0x00, 0x00, //0x000075a3 andl $12291, %eax + 0x0f, 0x84, 0x42, 0xff, 0xff, 0xff, //0x000075a8 je LBB29_19 + //0x000075ae LBB29_16 + 0x48, 0x89, 0xcf, //0x000075ae movq %rcx, %rdi + 0x4c, 0x29, 0xd7, //0x000075b1 subq %r10, %rdi + 0x48, 0x8b, 0x1a, //0x000075b4 movq (%rdx), %rbx + 0x48, 0x81, 0xfb, 0x00, 0x10, 0x00, 0x00, //0x000075b7 cmpq $4096, %rbx + 0x0f, 0x83, 0x87, 0x01, 0x00, 0x00, //0x000075be jae LBB29_17 + 0x48, 0x63, 0xc7, //0x000075c4 movslq %edi, %rax + 0x48, 0x8d, 0x7b, 0x01, //0x000075c7 leaq $1(%rbx), %rdi + 0x48, 0x89, 0x3a, //0x000075cb movq %rdi, (%rdx) + 0x48, 0x89, 0x44, 0xda, 0x08, //0x000075ce movq %rax, $8(%rdx,%rbx,8) + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x000075d3 movl $1, %ebx + 0xe9, 0x13, 0xff, 0xff, 0xff, //0x000075d8 jmp LBB29_19 + //0x000075dd LBB29_2 + 0x4d, 0x01, 0xd3, //0x000075dd addq %r10, %r11 + 0x4c, 0x39, 0xd9, //0x000075e0 cmpq %r11, %rcx + 0x0f, 0x83, 0x3e, 0x01, 0x00, 0x00, //0x000075e3 jae LBB29_36 + 0x4c, 0x8d, 0x45, 0xdc, //0x000075e9 leaq $-36(%rbp), %r8 + 0x4c, 0x8d, 0x4d, 0xda, //0x000075ed leaq $-38(%rbp), %r9 + 0xe9, 0x16, 0x00, 0x00, 0x00, //0x000075f1 jmp LBB29_4 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000075f6 .p2align 4, 0x90 + //0x00007600 LBB29_5 + 0x48, 0xff, 0xc1, //0x00007600 incq %rcx + 0x4c, 0x39, 0xd9, //0x00007603 cmpq %r11, %rcx + 0x0f, 0x83, 0x1b, 0x01, 0x00, 0x00, //0x00007606 jae LBB29_36 + //0x0000760c LBB29_4 + 0x80, 0x39, 0x00, //0x0000760c cmpb $0, (%rcx) + 0x0f, 0x89, 0xeb, 0xff, 0xff, 0xff, //0x0000760f jns LBB29_5 + 0xc6, 0x45, 0xdc, 0x00, //0x00007615 movb $0, $-36(%rbp) + 0xc6, 0x45, 0xda, 0x00, //0x00007619 movb $0, $-38(%rbp) + 0x4c, 0x89, 0xdb, //0x0000761d movq %r11, %rbx + 0x48, 0x29, 0xcb, //0x00007620 subq %rcx, %rbx + 0x48, 0x83, 0xfb, 0x02, //0x00007623 cmpq $2, %rbx + 0x0f, 0x82, 0x35, 0x00, 0x00, 0x00, //0x00007627 jb LBB29_21 + 0x44, 0x0f, 0xb6, 0x21, //0x0000762d movzbl (%rcx), %r12d + 0x44, 0x0f, 0xb6, 0x71, 0x01, //0x00007631 movzbl $1(%rcx), %r14d + 0x44, 0x88, 0x65, 0xdc, //0x00007636 movb %r12b, $-36(%rbp) + 0x4c, 0x8d, 0x79, 0x02, //0x0000763a leaq $2(%rcx), %r15 + 0x48, 0x83, 0xc3, 0xfe, //0x0000763e addq $-2, %rbx + 0x4c, 0x89, 0xcf, //0x00007642 movq %r9, %rdi + 0x48, 0x85, 0xdb, //0x00007645 testq %rbx, %rbx + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x00007648 je LBB29_24 + //0x0000764e LBB29_25 + 0x41, 0x0f, 0xb6, 0x07, //0x0000764e movzbl (%r15), %eax + 0x88, 0x07, //0x00007652 movb %al, (%rdi) + 0x44, 0x0f, 0xb6, 0x65, 0xdc, //0x00007654 movzbl $-36(%rbp), %r12d + 0x0f, 0xb6, 0x7d, 0xda, //0x00007659 movzbl $-38(%rbp), %edi + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x0000765d jmp LBB29_26 + //0x00007662 LBB29_21 + 0x45, 0x31, 0xe4, //0x00007662 xorl %r12d, %r12d + 0x45, 0x31, 0xf6, //0x00007665 xorl %r14d, %r14d + 0x4c, 0x89, 0xc7, //0x00007668 movq %r8, %rdi + 0x49, 0x89, 0xcf, //0x0000766b movq %rcx, %r15 + 0x48, 0x85, 0xdb, //0x0000766e testq %rbx, %rbx + 0x0f, 0x85, 0xd7, 0xff, 0xff, 0xff, //0x00007671 jne LBB29_25 + //0x00007677 LBB29_24 + 0x31, 0xff, //0x00007677 xorl %edi, %edi + //0x00007679 LBB29_26 + 0x40, 0x0f, 0xb6, 0xc7, //0x00007679 movzbl %dil, %eax + 0xc1, 0xe0, 0x10, //0x0000767d shll $16, %eax + 0x41, 0x0f, 0xb6, 0xde, //0x00007680 movzbl %r14b, %ebx + 0xc1, 0xe3, 0x08, //0x00007684 shll $8, %ebx + 0x41, 0x0f, 0xb6, 0xfc, //0x00007687 movzbl %r12b, %edi + 0x09, 0xdf, //0x0000768b orl %ebx, %edi + 0x09, 0xf8, //0x0000768d orl %edi, %eax + 0x25, 0xf0, 0xc0, 0xc0, 0x00, //0x0000768f andl $12632304, %eax + 0x3d, 0xe0, 0x80, 0x80, 0x00, //0x00007694 cmpl $8421600, %eax + 0x0f, 0x85, 0x21, 0x00, 0x00, 0x00, //0x00007699 jne LBB29_29 + 0x89, 0xf8, //0x0000769f movl %edi, %eax + 0x25, 0x0f, 0x20, 0x00, 0x00, //0x000076a1 andl $8207, %eax + 0x3d, 0x0d, 0x20, 0x00, 0x00, //0x000076a6 cmpl $8205, %eax + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x000076ab je LBB29_29 + 0xbb, 0x03, 0x00, 0x00, 0x00, //0x000076b1 movl $3, %ebx + 0x85, 0xc0, //0x000076b6 testl %eax, %eax + 0x0f, 0x85, 0x23, 0x00, 0x00, 0x00, //0x000076b8 jne LBB29_34 + 0x90, 0x90, //0x000076be .p2align 4, 0x90 + //0x000076c0 LBB29_29 + 0x41, 0xf6, 0xc4, 0x1e, //0x000076c0 testb $30, %r12b + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x000076c4 je LBB29_31 + 0x81, 0xe7, 0xe0, 0xc0, 0x00, 0x00, //0x000076ca andl $49376, %edi + 0xbb, 0x02, 0x00, 0x00, 0x00, //0x000076d0 movl $2, %ebx + 0x81, 0xff, 0xc0, 0x80, 0x00, 0x00, //0x000076d5 cmpl $32960, %edi + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x000076db jne LBB29_31 + //0x000076e1 LBB29_34 + 0x48, 0x01, 0xd9, //0x000076e1 addq %rbx, %rcx + 0x4c, 0x39, 0xd9, //0x000076e4 cmpq %r11, %rcx + 0x0f, 0x82, 0x1f, 0xff, 0xff, 0xff, //0x000076e7 jb LBB29_4 + 0xe9, 0x35, 0x00, 0x00, 0x00, //0x000076ed jmp LBB29_36 + //0x000076f2 LBB29_31 + 0x48, 0x89, 0xc8, //0x000076f2 movq %rcx, %rax + 0x4c, 0x29, 0xd0, //0x000076f5 subq %r10, %rax + 0x48, 0x8b, 0x3a, //0x000076f8 movq (%rdx), %rdi + 0x48, 0x81, 0xff, 0x00, 0x10, 0x00, 0x00, //0x000076fb cmpq $4096, %rdi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00007702 jae LBB29_32 + 0x48, 0x98, //0x00007708 cltq + 0x48, 0x8d, 0x5f, 0x01, //0x0000770a leaq $1(%rdi), %rbx + 0x48, 0x89, 0x1a, //0x0000770e movq %rbx, (%rdx) + 0x48, 0x89, 0x44, 0xfa, 0x08, //0x00007711 movq %rax, $8(%rdx,%rdi,8) + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00007716 movl $1, %ebx + 0x48, 0x01, 0xd9, //0x0000771b addq %rbx, %rcx + 0x4c, 0x39, 0xd9, //0x0000771e cmpq %r11, %rcx + 0x0f, 0x82, 0xe5, 0xfe, 0xff, 0xff, //0x00007721 jb LBB29_4 + //0x00007727 LBB29_36 + 0x4c, 0x29, 0xd1, //0x00007727 subq %r10, %rcx + 0x48, 0x89, 0x0e, //0x0000772a movq %rcx, (%rsi) + 0x31, 0xc0, //0x0000772d xorl %eax, %eax + //0x0000772f LBB29_37 + 0x48, 0x83, 0xc4, 0x08, //0x0000772f addq $8, %rsp + 0x5b, //0x00007733 popq %rbx + 0x41, 0x5c, //0x00007734 popq %r12 + 0x41, 0x5e, //0x00007736 popq %r14 + 0x41, 0x5f, //0x00007738 popq %r15 + 0x5d, //0x0000773a popq %rbp + 0xc3, //0x0000773b retq + //0x0000773c LBB29_32 + 0x48, 0x89, 0x06, //0x0000773c movq %rax, (%rsi) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000773f movq $-1, %rax + 0xe9, 0xe4, 0xff, 0xff, 0xff, //0x00007746 jmp LBB29_37 + //0x0000774b LBB29_17 + 0x48, 0x89, 0x3e, //0x0000774b movq %rdi, (%rsi) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000774e movq $-1, %rax + 0xe9, 0xd5, 0xff, 0xff, 0xff, //0x00007755 jmp LBB29_37 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000775a .p2align 4, 0x90 + //0x00007760 _validate_utf8_fast + 0x55, //0x00007760 pushq %rbp + 0x48, 0x89, 0xe5, //0x00007761 movq %rsp, %rbp + 0x53, //0x00007764 pushq %rbx + 0x50, //0x00007765 pushq %rax + 0x4c, 0x8b, 0x17, //0x00007766 movq (%rdi), %r10 + 0x4c, 0x8b, 0x5f, 0x08, //0x00007769 movq $8(%rdi), %r11 + 0x4b, 0x8d, 0x74, 0x1a, 0xfd, //0x0000776d leaq $-3(%r10,%r11), %rsi + 0x4c, 0x89, 0xd0, //0x00007772 movq %r10, %rax + 0x49, 0x39, 0xf2, //0x00007775 cmpq %rsi, %r10 + 0x0f, 0x83, 0xe0, 0x00, 0x00, 0x00, //0x00007778 jae LBB30_14 + 0x4c, 0x89, 0xd0, //0x0000777e movq %r10, %rax + 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00007781 jmp LBB30_3 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007786 .p2align 4, 0x90 + //0x00007790 LBB30_2 + 0x48, 0x01, 0xd0, //0x00007790 addq %rdx, %rax + 0x48, 0x39, 0xf0, //0x00007793 cmpq %rsi, %rax + 0x0f, 0x83, 0xc2, 0x00, 0x00, 0x00, //0x00007796 jae LBB30_14 + //0x0000779c LBB30_3 + 0xba, 0x01, 0x00, 0x00, 0x00, //0x0000779c movl $1, %edx + 0x80, 0x38, 0x00, //0x000077a1 cmpb $0, (%rax) + 0x0f, 0x89, 0xe6, 0xff, 0xff, 0xff, //0x000077a4 jns LBB30_2 + 0x8b, 0x38, //0x000077aa movl (%rax), %edi + 0x89, 0xf9, //0x000077ac movl %edi, %ecx + 0x81, 0xe1, 0xf0, 0xc0, 0xc0, 0x00, //0x000077ae andl $12632304, %ecx + 0x81, 0xf9, 0xe0, 0x80, 0x80, 0x00, //0x000077b4 cmpl $8421600, %ecx + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000077ba jne LBB30_7 + 0x89, 0xf9, //0x000077c0 movl %edi, %ecx + 0x81, 0xe1, 0x0f, 0x20, 0x00, 0x00, //0x000077c2 andl $8207, %ecx + 0x81, 0xf9, 0x0d, 0x20, 0x00, 0x00, //0x000077c8 cmpl $8205, %ecx + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x000077ce je LBB30_7 + 0xba, 0x03, 0x00, 0x00, 0x00, //0x000077d4 movl $3, %edx + 0x85, 0xc9, //0x000077d9 testl %ecx, %ecx + 0x0f, 0x85, 0xaf, 0xff, 0xff, 0xff, //0x000077db jne LBB30_2 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000077e1 .p2align 4, 0x90 + //0x000077f0 LBB30_7 + 0x89, 0xf9, //0x000077f0 movl %edi, %ecx + 0x81, 0xe1, 0xe0, 0xc0, 0x00, 0x00, //0x000077f2 andl $49376, %ecx + 0x81, 0xf9, 0xc0, 0x80, 0x00, 0x00, //0x000077f8 cmpl $32960, %ecx + 0x0f, 0x85, 0x10, 0x00, 0x00, 0x00, //0x000077fe jne LBB30_9 + 0x89, 0xf9, //0x00007804 movl %edi, %ecx + 0xba, 0x02, 0x00, 0x00, 0x00, //0x00007806 movl $2, %edx + 0x83, 0xe1, 0x1e, //0x0000780b andl $30, %ecx + 0x0f, 0x85, 0x7c, 0xff, 0xff, 0xff, //0x0000780e jne LBB30_2 + //0x00007814 LBB30_9 + 0x89, 0xf9, //0x00007814 movl %edi, %ecx + 0x81, 0xe1, 0xf8, 0xc0, 0xc0, 0xc0, //0x00007816 andl $-1061109512, %ecx + 0x81, 0xf9, 0xf0, 0x80, 0x80, 0x80, //0x0000781c cmpl $-2139062032, %ecx + 0x0f, 0x85, 0x29, 0x00, 0x00, 0x00, //0x00007822 jne LBB30_13 + 0x89, 0xf9, //0x00007828 movl %edi, %ecx + 0x81, 0xe1, 0x07, 0x30, 0x00, 0x00, //0x0000782a andl $12295, %ecx + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00007830 je LBB30_13 + 0xba, 0x04, 0x00, 0x00, 0x00, //0x00007836 movl $4, %edx + 0x40, 0xf6, 0xc7, 0x04, //0x0000783b testb $4, %dil + 0x0f, 0x84, 0x4b, 0xff, 0xff, 0xff, //0x0000783f je LBB30_2 + 0x81, 0xe7, 0x03, 0x30, 0x00, 0x00, //0x00007845 andl $12291, %edi + 0x0f, 0x84, 0x3f, 0xff, 0xff, 0xff, //0x0000784b je LBB30_2 + //0x00007851 LBB30_13 + 0x48, 0xf7, 0xd0, //0x00007851 notq %rax + 0x4c, 0x01, 0xd0, //0x00007854 addq %r10, %rax + 0x48, 0x83, 0xc4, 0x08, //0x00007857 addq $8, %rsp + 0x5b, //0x0000785b popq %rbx + 0x5d, //0x0000785c popq %rbp + 0xc3, //0x0000785d retq + //0x0000785e LBB30_14 + 0x4d, 0x01, 0xd3, //0x0000785e addq %r10, %r11 + 0x4c, 0x39, 0xd8, //0x00007861 cmpq %r11, %rax + 0x0f, 0x83, 0x03, 0x01, 0x00, 0x00, //0x00007864 jae LBB30_30 + 0x4c, 0x8d, 0x45, 0xf4, //0x0000786a leaq $-12(%rbp), %r8 + 0x4c, 0x8d, 0x4d, 0xf2, //0x0000786e leaq $-14(%rbp), %r9 + 0xe9, 0x15, 0x00, 0x00, 0x00, //0x00007872 jmp LBB30_17 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007877 .p2align 4, 0x90 + //0x00007880 LBB30_16 + 0x48, 0xff, 0xc0, //0x00007880 incq %rax + 0x4c, 0x39, 0xd8, //0x00007883 cmpq %r11, %rax + 0x0f, 0x83, 0xe1, 0x00, 0x00, 0x00, //0x00007886 jae LBB30_30 + //0x0000788c LBB30_17 + 0x80, 0x38, 0x00, //0x0000788c cmpb $0, (%rax) + 0x0f, 0x89, 0xeb, 0xff, 0xff, 0xff, //0x0000788f jns LBB30_16 + 0xc6, 0x45, 0xf4, 0x00, //0x00007895 movb $0, $-12(%rbp) + 0xc6, 0x45, 0xf2, 0x00, //0x00007899 movb $0, $-14(%rbp) + 0x4c, 0x89, 0xda, //0x0000789d movq %r11, %rdx + 0x48, 0x29, 0xc2, //0x000078a0 subq %rax, %rdx + 0x48, 0x83, 0xfa, 0x02, //0x000078a3 cmpq $2, %rdx + 0x0f, 0x82, 0x31, 0x00, 0x00, 0x00, //0x000078a7 jb LBB30_21 + 0x0f, 0xb6, 0x30, //0x000078ad movzbl (%rax), %esi + 0x0f, 0xb6, 0x78, 0x01, //0x000078b0 movzbl $1(%rax), %edi + 0x40, 0x88, 0x75, 0xf4, //0x000078b4 movb %sil, $-12(%rbp) + 0x48, 0x8d, 0x48, 0x02, //0x000078b8 leaq $2(%rax), %rcx + 0x48, 0x83, 0xc2, 0xfe, //0x000078bc addq $-2, %rdx + 0x4c, 0x89, 0xcb, //0x000078c0 movq %r9, %rbx + 0x48, 0x85, 0xd2, //0x000078c3 testq %rdx, %rdx + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x000078c6 je LBB30_22 + //0x000078cc LBB30_20 + 0x0f, 0xb6, 0x09, //0x000078cc movzbl (%rcx), %ecx + 0x88, 0x0b, //0x000078cf movb %cl, (%rbx) + 0x0f, 0xb6, 0x75, 0xf4, //0x000078d1 movzbl $-12(%rbp), %esi + 0x0f, 0xb6, 0x4d, 0xf2, //0x000078d5 movzbl $-14(%rbp), %ecx + 0xe9, 0x15, 0x00, 0x00, 0x00, //0x000078d9 jmp LBB30_23 + //0x000078de LBB30_21 + 0x31, 0xf6, //0x000078de xorl %esi, %esi + 0x31, 0xff, //0x000078e0 xorl %edi, %edi + 0x4c, 0x89, 0xc3, //0x000078e2 movq %r8, %rbx + 0x48, 0x89, 0xc1, //0x000078e5 movq %rax, %rcx + 0x48, 0x85, 0xd2, //0x000078e8 testq %rdx, %rdx + 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x000078eb jne LBB30_20 + //0x000078f1 LBB30_22 + 0x31, 0xc9, //0x000078f1 xorl %ecx, %ecx + //0x000078f3 LBB30_23 + 0x0f, 0xb6, 0xc9, //0x000078f3 movzbl %cl, %ecx + 0xc1, 0xe1, 0x10, //0x000078f6 shll $16, %ecx + 0x40, 0x0f, 0xb6, 0xff, //0x000078f9 movzbl %dil, %edi + 0xc1, 0xe7, 0x08, //0x000078fd shll $8, %edi + 0x40, 0x0f, 0xb6, 0xd6, //0x00007900 movzbl %sil, %edx + 0x09, 0xfa, //0x00007904 orl %edi, %edx + 0x09, 0xd1, //0x00007906 orl %edx, %ecx + 0x81, 0xe1, 0xf0, 0xc0, 0xc0, 0x00, //0x00007908 andl $12632304, %ecx + 0x81, 0xf9, 0xe0, 0x80, 0x80, 0x00, //0x0000790e cmpl $8421600, %ecx + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x00007914 jne LBB30_26 + 0x89, 0xd7, //0x0000791a movl %edx, %edi + 0x81, 0xe7, 0x0f, 0x20, 0x00, 0x00, //0x0000791c andl $8207, %edi + 0x81, 0xff, 0x0d, 0x20, 0x00, 0x00, //0x00007922 cmpl $8205, %edi + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00007928 je LBB30_26 + 0xb9, 0x03, 0x00, 0x00, 0x00, //0x0000792e movl $3, %ecx + 0x85, 0xff, //0x00007933 testl %edi, %edi + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x00007935 jne LBB30_28 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000793b .p2align 4, 0x90 + //0x00007940 LBB30_26 + 0x40, 0xf6, 0xc6, 0x1e, //0x00007940 testb $30, %sil + 0x0f, 0x84, 0x07, 0xff, 0xff, 0xff, //0x00007944 je LBB30_13 + 0x81, 0xe2, 0xe0, 0xc0, 0x00, 0x00, //0x0000794a andl $49376, %edx + 0xb9, 0x02, 0x00, 0x00, 0x00, //0x00007950 movl $2, %ecx + 0x81, 0xfa, 0xc0, 0x80, 0x00, 0x00, //0x00007955 cmpl $32960, %edx + 0x0f, 0x85, 0xf0, 0xfe, 0xff, 0xff, //0x0000795b jne LBB30_13 + //0x00007961 LBB30_28 + 0x48, 0x01, 0xc8, //0x00007961 addq %rcx, %rax + 0x4c, 0x39, 0xd8, //0x00007964 cmpq %r11, %rax + 0x0f, 0x82, 0x1f, 0xff, 0xff, 0xff, //0x00007967 jb LBB30_17 + //0x0000796d LBB30_30 + 0x31, 0xc0, //0x0000796d xorl %eax, %eax + 0x48, 0x83, 0xc4, 0x08, //0x0000796f addq $8, %rsp + 0x5b, //0x00007973 popq %rbx + 0x5d, //0x00007974 popq %rbp + 0xc3, //0x00007975 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00007976 .p2align 5, 0x00 + //0x00007980 LCPI31_0 + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x00007980 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x00007990 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + //0x000079a0 .p2align 4, 0x90 + //0x000079a0 _f32toa + 0x55, //0x000079a0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000079a1 movq %rsp, %rbp + 0x41, 0x57, //0x000079a4 pushq %r15 + 0x41, 0x56, //0x000079a6 pushq %r14 + 0x41, 0x55, //0x000079a8 pushq %r13 + 0x41, 0x54, //0x000079aa pushq %r12 + 0x53, //0x000079ac pushq %rbx + 0xc5, 0xf9, 0x7e, 0xc0, //0x000079ad vmovd %xmm0, %eax + 0x89, 0xc1, //0x000079b1 movl %eax, %ecx + 0xc1, 0xe9, 0x17, //0x000079b3 shrl $23, %ecx + 0x0f, 0xb6, 0xd9, //0x000079b6 movzbl %cl, %ebx + 0x81, 0xfb, 0xff, 0x00, 0x00, 0x00, //0x000079b9 cmpl $255, %ebx + 0x0f, 0x84, 0xff, 0x0c, 0x00, 0x00, //0x000079bf je LBB31_139 + 0xc6, 0x07, 0x2d, //0x000079c5 movb $45, (%rdi) + 0x41, 0x89, 0xc1, //0x000079c8 movl %eax, %r9d + 0x41, 0xc1, 0xe9, 0x1f, //0x000079cb shrl $31, %r9d + 0x4e, 0x8d, 0x04, 0x0f, //0x000079cf leaq (%rdi,%r9), %r8 + 0xa9, 0xff, 0xff, 0xff, 0x7f, //0x000079d3 testl $2147483647, %eax + 0x0f, 0x84, 0xc6, 0x01, 0x00, 0x00, //0x000079d8 je LBB31_14 + 0x25, 0xff, 0xff, 0x7f, 0x00, //0x000079de andl $8388607, %eax + 0x85, 0xdb, //0x000079e3 testl %ebx, %ebx + 0x0f, 0x84, 0xe1, 0x0c, 0x00, 0x00, //0x000079e5 je LBB31_140 + 0x8d, 0xb0, 0x00, 0x00, 0x80, 0x00, //0x000079eb leal $8388608(%rax), %esi + 0x44, 0x8d, 0xbb, 0x6a, 0xff, 0xff, 0xff, //0x000079f1 leal $-150(%rbx), %r15d + 0x8d, 0x4b, 0x81, //0x000079f8 leal $-127(%rbx), %ecx + 0x83, 0xf9, 0x17, //0x000079fb cmpl $23, %ecx + 0x0f, 0x87, 0x1b, 0x00, 0x00, 0x00, //0x000079fe ja LBB31_5 + 0xb9, 0x96, 0x00, 0x00, 0x00, //0x00007a04 movl $150, %ecx + 0x29, 0xd9, //0x00007a09 subl %ebx, %ecx + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00007a0b movq $-1, %rdx + 0x48, 0xd3, 0xe2, //0x00007a12 shlq %cl, %rdx + 0xf7, 0xd2, //0x00007a15 notl %edx + 0x85, 0xf2, //0x00007a17 testl %esi, %edx + 0x0f, 0x84, 0x12, 0x04, 0x00, 0x00, //0x00007a19 je LBB31_32 + //0x00007a1f LBB31_5 + 0x41, 0x89, 0xf6, //0x00007a1f movl %esi, %r14d + 0x41, 0x83, 0xe6, 0x01, //0x00007a22 andl $1, %r14d + 0x85, 0xc0, //0x00007a26 testl %eax, %eax + 0x0f, 0x94, 0xc0, //0x00007a28 sete %al + 0x83, 0xfb, 0x01, //0x00007a2b cmpl $1, %ebx + 0x0f, 0x97, 0xc1, //0x00007a2e seta %cl + 0x20, 0xc1, //0x00007a31 andb %al, %cl + 0x0f, 0xb6, 0xc9, //0x00007a33 movzbl %cl, %ecx + 0x41, 0x89, 0xf2, //0x00007a36 movl %esi, %r10d + 0x41, 0xc1, 0xe2, 0x02, //0x00007a39 shll $2, %r10d + 0x8d, 0x44, 0xb1, 0xfe, //0x00007a3d leal $-2(%rcx,%rsi,4), %eax + 0x45, 0x69, 0xdf, 0x13, 0x44, 0x13, 0x00, //0x00007a41 imull $1262611, %r15d, %r11d + 0x31, 0xd2, //0x00007a48 xorl %edx, %edx + 0x84, 0xc9, //0x00007a4a testb %cl, %cl + 0xb9, 0xff, 0xfe, 0x07, 0x00, //0x00007a4c movl $524031, %ecx + 0x0f, 0x44, 0xca, //0x00007a51 cmovel %edx, %ecx + 0x41, 0x29, 0xcb, //0x00007a54 subl %ecx, %r11d + 0x41, 0xc1, 0xfb, 0x16, //0x00007a57 sarl $22, %r11d + 0x41, 0x69, 0xcb, 0xb1, 0x6c, 0xe5, 0xff, //0x00007a5b imull $-1741647, %r11d, %ecx + 0xc1, 0xe9, 0x13, //0x00007a62 shrl $19, %ecx + 0x44, 0x01, 0xf9, //0x00007a65 addl %r15d, %ecx + 0xba, 0x1f, 0x00, 0x00, 0x00, //0x00007a68 movl $31, %edx + 0x44, 0x29, 0xda, //0x00007a6d subl %r11d, %edx + 0x48, 0x63, 0xd2, //0x00007a70 movslq %edx, %rdx + 0x48, 0x8d, 0x1d, 0x96, 0xb7, 0x00, 0x00, //0x00007a73 leaq $46998(%rip), %rbx /* _pow10_ceil_sig_f32.g+0(%rip) */ + 0xfe, 0xc1, //0x00007a7a incb %cl + 0xd3, 0xe0, //0x00007a7c shll %cl, %eax + 0x4c, 0x8b, 0x24, 0xd3, //0x00007a7e movq (%rbx,%rdx,8), %r12 + 0x49, 0xf7, 0xe4, //0x00007a82 mulq %r12 + 0x48, 0xc1, 0xe8, 0x20, //0x00007a85 shrq $32, %rax + 0x31, 0xdb, //0x00007a89 xorl %ebx, %ebx + 0x83, 0xf8, 0x01, //0x00007a8b cmpl $1, %eax + 0x0f, 0x97, 0xc3, //0x00007a8e seta %bl + 0x41, 0xd3, 0xe2, //0x00007a91 shll %cl, %r10d + 0x09, 0xd3, //0x00007a94 orl %edx, %ebx + 0x4c, 0x89, 0xd0, //0x00007a96 movq %r10, %rax + 0x49, 0xf7, 0xe4, //0x00007a99 mulq %r12 + 0x49, 0x89, 0xd2, //0x00007a9c movq %rdx, %r10 + 0x48, 0xc1, 0xe8, 0x20, //0x00007a9f shrq $32, %rax + 0x45, 0x31, 0xff, //0x00007aa3 xorl %r15d, %r15d + 0x83, 0xf8, 0x01, //0x00007aa6 cmpl $1, %eax + 0x41, 0x0f, 0x97, 0xc7, //0x00007aa9 seta %r15b + 0x8d, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x00, //0x00007aad leal $2(,%rsi,4), %eax + 0xd3, 0xe0, //0x00007ab4 shll %cl, %eax + 0x45, 0x09, 0xd7, //0x00007ab6 orl %r10d, %r15d + 0x49, 0xf7, 0xe4, //0x00007ab9 mulq %r12 + 0x48, 0xc1, 0xe8, 0x20, //0x00007abc shrq $32, %rax + 0x31, 0xc9, //0x00007ac0 xorl %ecx, %ecx + 0x83, 0xf8, 0x01, //0x00007ac2 cmpl $1, %eax + 0x0f, 0x97, 0xc1, //0x00007ac5 seta %cl + 0x09, 0xd1, //0x00007ac8 orl %edx, %ecx + 0x44, 0x01, 0xf3, //0x00007aca addl %r14d, %ebx + 0x44, 0x29, 0xf1, //0x00007acd subl %r14d, %ecx + 0x41, 0x83, 0xff, 0x28, //0x00007ad0 cmpl $40, %r15d + 0x0f, 0x82, 0x9a, 0x00, 0x00, 0x00, //0x00007ad4 jb LBB31_12 + 0x44, 0x89, 0xd2, //0x00007ada movl %r10d, %edx + 0xb8, 0xcd, 0xcc, 0xcc, 0xcc, //0x00007add movl $3435973837, %eax + 0x48, 0x0f, 0xaf, 0xc2, //0x00007ae2 imulq %rdx, %rax + 0x48, 0xc1, 0xe8, 0x25, //0x00007ae6 shrq $37, %rax + 0x41, 0x89, 0xde, //0x00007aea movl %ebx, %r14d + 0x48, 0x8d, 0x34, 0xc5, 0x00, 0x00, 0x00, 0x00, //0x00007aed leaq (,%rax,8), %rsi + 0x48, 0x8d, 0x14, 0xb6, //0x00007af5 leaq (%rsi,%rsi,4), %rdx + 0x4c, 0x39, 0xf2, //0x00007af9 cmpq %r14, %rdx + 0x41, 0x0f, 0x93, 0xc4, //0x00007afc setae %r12b + 0x4c, 0x8d, 0x74, 0xb6, 0x28, //0x00007b00 leaq $40(%rsi,%rsi,4), %r14 + 0x89, 0xce, //0x00007b05 movl %ecx, %esi + 0x49, 0x39, 0xf6, //0x00007b07 cmpq %rsi, %r14 + 0x0f, 0x96, 0xc2, //0x00007b0a setbe %dl + 0x41, 0x38, 0xd4, //0x00007b0d cmpb %dl, %r12b + 0x0f, 0x84, 0x5e, 0x00, 0x00, 0x00, //0x00007b10 je LBB31_12 + 0x45, 0x31, 0xed, //0x00007b16 xorl %r13d, %r13d + 0x49, 0x39, 0xf6, //0x00007b19 cmpq %rsi, %r14 + 0x41, 0x0f, 0x96, 0xc5, //0x00007b1c setbe %r13b + 0x41, 0x01, 0xc5, //0x00007b20 addl %eax, %r13d + 0x41, 0xff, 0xc3, //0x00007b23 incl %r11d + 0x41, 0x81, 0xfd, 0xa0, 0x86, 0x01, 0x00, //0x00007b26 cmpl $100000, %r13d + 0x0f, 0x83, 0xb0, 0x00, 0x00, 0x00, //0x00007b2d jae LBB31_18 + //0x00007b33 LBB31_8 + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00007b33 movl $1, %eax + 0x41, 0x83, 0xfd, 0x0a, //0x00007b38 cmpl $10, %r13d + 0x0f, 0x82, 0xd4, 0x00, 0x00, 0x00, //0x00007b3c jb LBB31_22 + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00007b42 movl $2, %eax + 0x41, 0x83, 0xfd, 0x64, //0x00007b47 cmpl $100, %r13d + 0x0f, 0x82, 0xc5, 0x00, 0x00, 0x00, //0x00007b4b jb LBB31_22 + 0xb8, 0x03, 0x00, 0x00, 0x00, //0x00007b51 movl $3, %eax + 0x41, 0x81, 0xfd, 0xe8, 0x03, 0x00, 0x00, //0x00007b56 cmpl $1000, %r13d + 0x0f, 0x82, 0xb3, 0x00, 0x00, 0x00, //0x00007b5d jb LBB31_22 + 0x41, 0x81, 0xfd, 0x10, 0x27, 0x00, 0x00, //0x00007b63 cmpl $10000, %r13d + 0xb8, 0x05, 0x00, 0x00, 0x00, //0x00007b6a movl $5, %eax + 0xe9, 0x9f, 0x00, 0x00, 0x00, //0x00007b6f jmp LBB31_21 + //0x00007b74 LBB31_12 + 0x4d, 0x89, 0xd6, //0x00007b74 movq %r10, %r14 + 0x49, 0xc1, 0xee, 0x02, //0x00007b77 shrq $2, %r14 + 0x44, 0x89, 0xd6, //0x00007b7b movl %r10d, %esi + 0x83, 0xe6, 0xfc, //0x00007b7e andl $-4, %esi + 0x39, 0xf3, //0x00007b81 cmpl %esi, %ebx + 0x0f, 0x96, 0xc2, //0x00007b83 setbe %dl + 0x8d, 0x5e, 0x04, //0x00007b86 leal $4(%rsi), %ebx + 0x39, 0xcb, //0x00007b89 cmpl %ecx, %ebx + 0x0f, 0x96, 0xc0, //0x00007b8b setbe %al + 0x38, 0xc2, //0x00007b8e cmpb %al, %dl + 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x00007b90 je LBB31_15 + 0x45, 0x31, 0xed, //0x00007b96 xorl %r13d, %r13d + 0x39, 0xcb, //0x00007b99 cmpl %ecx, %ebx + 0x41, 0x0f, 0x96, 0xc5, //0x00007b9b setbe %r13b + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00007b9f jmp LBB31_17 + //0x00007ba4 LBB31_14 + 0x41, 0xc6, 0x00, 0x30, //0x00007ba4 movb $48, (%r8) + 0x41, 0x29, 0xf8, //0x00007ba8 subl %edi, %r8d + 0x41, 0xff, 0xc0, //0x00007bab incl %r8d + 0xe9, 0x00, 0x0b, 0x00, 0x00, //0x00007bae jmp LBB31_138 + //0x00007bb3 LBB31_15 + 0x83, 0xce, 0x02, //0x00007bb3 orl $2, %esi + 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x00007bb6 movl $1, %r13d + 0x41, 0x39, 0xf7, //0x00007bbc cmpl %esi, %r15d + 0x0f, 0x87, 0x0e, 0x00, 0x00, 0x00, //0x00007bbf ja LBB31_17 + 0x0f, 0x94, 0xc0, //0x00007bc5 sete %al + 0x41, 0xc0, 0xea, 0x02, //0x00007bc8 shrb $2, %r10b + 0x41, 0x20, 0xc2, //0x00007bcc andb %al, %r10b + 0x45, 0x0f, 0xb6, 0xea, //0x00007bcf movzbl %r10b, %r13d + //0x00007bd3 LBB31_17 + 0x45, 0x01, 0xf5, //0x00007bd3 addl %r14d, %r13d + 0x41, 0x81, 0xfd, 0xa0, 0x86, 0x01, 0x00, //0x00007bd6 cmpl $100000, %r13d + 0x0f, 0x82, 0x50, 0xff, 0xff, 0xff, //0x00007bdd jb LBB31_8 + //0x00007be3 LBB31_18 + 0xb8, 0x06, 0x00, 0x00, 0x00, //0x00007be3 movl $6, %eax + 0x41, 0x81, 0xfd, 0x40, 0x42, 0x0f, 0x00, //0x00007be8 cmpl $1000000, %r13d + 0x0f, 0x82, 0x21, 0x00, 0x00, 0x00, //0x00007bef jb LBB31_22 + 0xb8, 0x07, 0x00, 0x00, 0x00, //0x00007bf5 movl $7, %eax + 0x41, 0x81, 0xfd, 0x80, 0x96, 0x98, 0x00, //0x00007bfa cmpl $10000000, %r13d + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x00007c01 jb LBB31_22 + 0x41, 0x81, 0xfd, 0x00, 0xe1, 0xf5, 0x05, //0x00007c07 cmpl $100000000, %r13d + 0xb8, 0x09, 0x00, 0x00, 0x00, //0x00007c0e movl $9, %eax + //0x00007c13 LBB31_21 + 0x83, 0xd8, 0x00, //0x00007c13 sbbl $0, %eax + //0x00007c16 LBB31_22 + 0x46, 0x8d, 0x3c, 0x18, //0x00007c16 leal (%rax,%r11), %r15d + 0x42, 0x8d, 0x4c, 0x18, 0x05, //0x00007c1a leal $5(%rax,%r11), %ecx + 0x83, 0xf9, 0x1b, //0x00007c1f cmpl $27, %ecx + 0x0f, 0x82, 0x77, 0x00, 0x00, 0x00, //0x00007c22 jb LBB31_26 + 0x89, 0xc0, //0x00007c28 movl %eax, %eax + 0x49, 0x8d, 0x5c, 0x00, 0x01, //0x00007c2a leaq $1(%r8,%rax), %rbx + 0x41, 0x81, 0xfd, 0x10, 0x27, 0x00, 0x00, //0x00007c2f cmpl $10000, %r13d + 0x0f, 0x82, 0xd9, 0x00, 0x00, 0x00, //0x00007c36 jb LBB31_30 + 0x44, 0x89, 0xe8, //0x00007c3c movl %r13d, %eax + 0x41, 0xbb, 0x59, 0x17, 0xb7, 0xd1, //0x00007c3f movl $3518437209, %r11d + 0x4c, 0x0f, 0xaf, 0xd8, //0x00007c45 imulq %rax, %r11 + 0x49, 0xc1, 0xeb, 0x2d, //0x00007c49 shrq $45, %r11 + 0x41, 0x69, 0xc3, 0xf0, 0xd8, 0xff, 0xff, //0x00007c4d imull $-10000, %r11d, %eax + 0x44, 0x01, 0xe8, //0x00007c54 addl %r13d, %eax + 0x0f, 0x84, 0xb3, 0x04, 0x00, 0x00, //0x00007c57 je LBB31_62 + 0x89, 0xc1, //0x00007c5d movl %eax, %ecx + 0x48, 0x69, 0xc9, 0x1f, 0x85, 0xeb, 0x51, //0x00007c5f imulq $1374389535, %rcx, %rcx + 0x48, 0xc1, 0xe9, 0x25, //0x00007c66 shrq $37, %rcx + 0x6b, 0xd1, 0x64, //0x00007c6a imull $100, %ecx, %edx + 0x29, 0xd0, //0x00007c6d subl %edx, %eax + 0x48, 0x8d, 0x15, 0x1a, 0x42, 0x00, 0x00, //0x00007c6f leaq $16922(%rip), %rdx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x42, //0x00007c76 movzwl (%rdx,%rax,2), %eax + 0x66, 0x89, 0x43, 0xfe, //0x00007c7a movw %ax, $-2(%rbx) + 0x0f, 0xb7, 0x04, 0x4a, //0x00007c7e movzwl (%rdx,%rcx,2), %eax + 0x66, 0x89, 0x43, 0xfc, //0x00007c82 movw %ax, $-4(%rbx) + 0x45, 0x31, 0xc9, //0x00007c86 xorl %r9d, %r9d + 0x48, 0x8d, 0x4b, 0xfc, //0x00007c89 leaq $-4(%rbx), %rcx + 0x41, 0x83, 0xfb, 0x64, //0x00007c8d cmpl $100, %r11d + 0x0f, 0x83, 0x91, 0x00, 0x00, 0x00, //0x00007c91 jae LBB31_64 + //0x00007c97 LBB31_31 + 0x44, 0x89, 0xda, //0x00007c97 movl %r11d, %edx + 0xe9, 0xd4, 0x00, 0x00, 0x00, //0x00007c9a jmp LBB31_66 + //0x00007c9f LBB31_26 + 0x41, 0x89, 0xc4, //0x00007c9f movl %eax, %r12d + 0x45, 0x85, 0xdb, //0x00007ca2 testl %r11d, %r11d + 0x0f, 0x88, 0x1d, 0x02, 0x00, 0x00, //0x00007ca5 js LBB31_38 + 0x4b, 0x8d, 0x34, 0x20, //0x00007cab leaq (%r8,%r12), %rsi + 0x41, 0x81, 0xfd, 0x10, 0x27, 0x00, 0x00, //0x00007caf cmpl $10000, %r13d + 0x0f, 0x82, 0xa7, 0x02, 0x00, 0x00, //0x00007cb6 jb LBB31_43 + 0x44, 0x89, 0xe8, //0x00007cbc movl %r13d, %eax + 0xb9, 0x59, 0x17, 0xb7, 0xd1, //0x00007cbf movl $3518437209, %ecx + 0x48, 0x0f, 0xaf, 0xc8, //0x00007cc4 imulq %rax, %rcx + 0x48, 0xc1, 0xe9, 0x2d, //0x00007cc8 shrq $45, %rcx + 0x69, 0xc1, 0xf0, 0xd8, 0xff, 0xff, //0x00007ccc imull $-10000, %ecx, %eax + 0x44, 0x01, 0xe8, //0x00007cd2 addl %r13d, %eax + 0x48, 0x69, 0xd0, 0x1f, 0x85, 0xeb, 0x51, //0x00007cd5 imulq $1374389535, %rax, %rdx + 0x48, 0xc1, 0xea, 0x25, //0x00007cdc shrq $37, %rdx + 0x6b, 0xda, 0x64, //0x00007ce0 imull $100, %edx, %ebx + 0x29, 0xd8, //0x00007ce3 subl %ebx, %eax + 0x48, 0x8d, 0x1d, 0xa4, 0x41, 0x00, 0x00, //0x00007ce5 leaq $16804(%rip), %rbx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x43, //0x00007cec movzwl (%rbx,%rax,2), %eax + 0x66, 0x89, 0x46, 0xfe, //0x00007cf0 movw %ax, $-2(%rsi) + 0x48, 0x8d, 0x46, 0xfc, //0x00007cf4 leaq $-4(%rsi), %rax + 0x0f, 0xb7, 0x14, 0x53, //0x00007cf8 movzwl (%rbx,%rdx,2), %edx + 0x66, 0x89, 0x56, 0xfc, //0x00007cfc movw %dx, $-4(%rsi) + 0x41, 0x89, 0xcd, //0x00007d00 movl %ecx, %r13d + 0x41, 0x83, 0xfd, 0x64, //0x00007d03 cmpl $100, %r13d + 0x0f, 0x83, 0x63, 0x02, 0x00, 0x00, //0x00007d07 jae LBB31_44 + //0x00007d0d LBB31_29 + 0x44, 0x89, 0xe9, //0x00007d0d movl %r13d, %ecx + 0xe9, 0x9e, 0x02, 0x00, 0x00, //0x00007d10 jmp LBB31_46 + //0x00007d15 LBB31_30 + 0x45, 0x31, 0xc9, //0x00007d15 xorl %r9d, %r9d + 0x48, 0x89, 0xd9, //0x00007d18 movq %rbx, %rcx + 0x45, 0x89, 0xeb, //0x00007d1b movl %r13d, %r11d + 0x41, 0x83, 0xfb, 0x64, //0x00007d1e cmpl $100, %r11d + 0x0f, 0x82, 0x6f, 0xff, 0xff, 0xff, //0x00007d22 jb LBB31_31 + //0x00007d28 LBB31_64 + 0x48, 0xff, 0xc9, //0x00007d28 decq %rcx + 0x4c, 0x8d, 0x15, 0x5e, 0x41, 0x00, 0x00, //0x00007d2b leaq $16734(%rip), %r10 /* _Digits+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007d32 .p2align 4, 0x90 + //0x00007d40 LBB31_65 + 0x44, 0x89, 0xda, //0x00007d40 movl %r11d, %edx + 0x48, 0x69, 0xd2, 0x1f, 0x85, 0xeb, 0x51, //0x00007d43 imulq $1374389535, %rdx, %rdx + 0x48, 0xc1, 0xea, 0x25, //0x00007d4a shrq $37, %rdx + 0x6b, 0xc2, 0x64, //0x00007d4e imull $100, %edx, %eax + 0x44, 0x89, 0xde, //0x00007d51 movl %r11d, %esi + 0x29, 0xc6, //0x00007d54 subl %eax, %esi + 0x41, 0x0f, 0xb7, 0x04, 0x72, //0x00007d56 movzwl (%r10,%rsi,2), %eax + 0x66, 0x89, 0x41, 0xff, //0x00007d5b movw %ax, $-1(%rcx) + 0x48, 0x83, 0xc1, 0xfe, //0x00007d5f addq $-2, %rcx + 0x41, 0x81, 0xfb, 0x0f, 0x27, 0x00, 0x00, //0x00007d63 cmpl $9999, %r11d + 0x41, 0x89, 0xd3, //0x00007d6a movl %edx, %r11d + 0x0f, 0x87, 0xcd, 0xff, 0xff, 0xff, //0x00007d6d ja LBB31_65 + //0x00007d73 LBB31_66 + 0x49, 0x8d, 0x70, 0x01, //0x00007d73 leaq $1(%r8), %rsi + 0x83, 0xfa, 0x0a, //0x00007d77 cmpl $10, %edx + 0x0f, 0x82, 0x1d, 0x00, 0x00, 0x00, //0x00007d7a jb LBB31_68 + 0x89, 0xd0, //0x00007d80 movl %edx, %eax + 0x48, 0x8d, 0x0d, 0x07, 0x41, 0x00, 0x00, //0x00007d82 leaq $16647(%rip), %rcx /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x41, //0x00007d89 movb (%rcx,%rax,2), %dl + 0x8a, 0x44, 0x41, 0x01, //0x00007d8c movb $1(%rcx,%rax,2), %al + 0x41, 0x88, 0x50, 0x01, //0x00007d90 movb %dl, $1(%r8) + 0x41, 0x88, 0x40, 0x02, //0x00007d94 movb %al, $2(%r8) + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00007d98 jmp LBB31_69 + //0x00007d9d LBB31_68 + 0x80, 0xc2, 0x30, //0x00007d9d addb $48, %dl + 0x88, 0x16, //0x00007da0 movb %dl, (%rsi) + //0x00007da2 LBB31_69 + 0x4c, 0x29, 0xcb, //0x00007da2 subq %r9, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007da5 .p2align 4, 0x90 + //0x00007db0 LBB31_70 + 0x80, 0x7b, 0xff, 0x30, //0x00007db0 cmpb $48, $-1(%rbx) + 0x48, 0x8d, 0x5b, 0xff, //0x00007db4 leaq $-1(%rbx), %rbx + 0x0f, 0x84, 0xf2, 0xff, 0xff, 0xff, //0x00007db8 je LBB31_70 + 0x41, 0x88, 0x10, //0x00007dbe movb %dl, (%r8) + 0x48, 0x8d, 0x43, 0x01, //0x00007dc1 leaq $1(%rbx), %rax + 0x48, 0x89, 0xc1, //0x00007dc5 movq %rax, %rcx + 0x48, 0x29, 0xf1, //0x00007dc8 subq %rsi, %rcx + 0x48, 0x83, 0xf9, 0x02, //0x00007dcb cmpq $2, %rcx + 0x0f, 0x8c, 0x06, 0x00, 0x00, 0x00, //0x00007dcf jl LBB31_73 + 0xc6, 0x06, 0x2e, //0x00007dd5 movb $46, (%rsi) + 0x48, 0x89, 0xc3, //0x00007dd8 movq %rax, %rbx + //0x00007ddb LBB31_73 + 0xc6, 0x03, 0x65, //0x00007ddb movb $101, (%rbx) + 0x45, 0x85, 0xff, //0x00007dde testl %r15d, %r15d + 0x0f, 0x8e, 0x41, 0x01, 0x00, 0x00, //0x00007de1 jle LBB31_76 + 0x41, 0xff, 0xcf, //0x00007de7 decl %r15d + 0xc6, 0x43, 0x01, 0x2b, //0x00007dea movb $43, $1(%rbx) + 0x44, 0x89, 0xf8, //0x00007dee movl %r15d, %eax + 0x83, 0xf8, 0x64, //0x00007df1 cmpl $100, %eax + 0x0f, 0x8c, 0x43, 0x01, 0x00, 0x00, //0x00007df4 jl LBB31_77 + //0x00007dfa LBB31_75 + 0x89, 0xc1, //0x00007dfa movl %eax, %ecx + 0xba, 0xcd, 0xcc, 0xcc, 0xcc, //0x00007dfc movl $3435973837, %edx + 0x48, 0x0f, 0xaf, 0xd1, //0x00007e01 imulq %rcx, %rdx + 0x48, 0xc1, 0xea, 0x23, //0x00007e05 shrq $35, %rdx + 0x8d, 0x0c, 0x12, //0x00007e09 leal (%rdx,%rdx), %ecx + 0x8d, 0x0c, 0x89, //0x00007e0c leal (%rcx,%rcx,4), %ecx + 0x29, 0xc8, //0x00007e0f subl %ecx, %eax + 0x48, 0x8d, 0x0d, 0x78, 0x40, 0x00, 0x00, //0x00007e11 leaq $16504(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x51, //0x00007e18 movzwl (%rcx,%rdx,2), %ecx + 0x66, 0x89, 0x4b, 0x02, //0x00007e1c movw %cx, $2(%rbx) + 0x0c, 0x30, //0x00007e20 orb $48, %al + 0x88, 0x43, 0x04, //0x00007e22 movb %al, $4(%rbx) + 0x48, 0x83, 0xc3, 0x05, //0x00007e25 addq $5, %rbx + 0x49, 0x89, 0xd8, //0x00007e29 movq %rbx, %r8 + 0xe9, 0x7f, 0x08, 0x00, 0x00, //0x00007e2c jmp LBB31_137 + //0x00007e31 LBB31_32 + 0xd3, 0xee, //0x00007e31 shrl %cl, %esi + 0x81, 0xfe, 0xa0, 0x86, 0x01, 0x00, //0x00007e33 cmpl $100000, %esi + 0x0f, 0x82, 0x1a, 0x02, 0x00, 0x00, //0x00007e39 jb LBB31_52 + 0xb8, 0x06, 0x00, 0x00, 0x00, //0x00007e3f movl $6, %eax + 0x81, 0xfe, 0x40, 0x42, 0x0f, 0x00, //0x00007e44 cmpl $1000000, %esi + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x00007e4a jb LBB31_36 + 0xb8, 0x07, 0x00, 0x00, 0x00, //0x00007e50 movl $7, %eax + 0x81, 0xfe, 0x80, 0x96, 0x98, 0x00, //0x00007e55 cmpl $10000000, %esi + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x00007e5b jb LBB31_36 + 0x81, 0xfe, 0x00, 0xe1, 0xf5, 0x05, //0x00007e61 cmpl $100000000, %esi + 0xb8, 0x09, 0x00, 0x00, 0x00, //0x00007e67 movl $9, %eax + 0x48, 0x83, 0xd8, 0x00, //0x00007e6c sbbq $0, %rax + //0x00007e70 LBB31_36 + 0x4c, 0x01, 0xc0, //0x00007e70 addq %r8, %rax + //0x00007e73 LBB31_37 + 0x89, 0xf1, //0x00007e73 movl %esi, %ecx + 0xba, 0x59, 0x17, 0xb7, 0xd1, //0x00007e75 movl $3518437209, %edx + 0x48, 0x0f, 0xaf, 0xd1, //0x00007e7a imulq %rcx, %rdx + 0x48, 0xc1, 0xea, 0x2d, //0x00007e7e shrq $45, %rdx + 0x69, 0xca, 0xf0, 0xd8, 0xff, 0xff, //0x00007e82 imull $-10000, %edx, %ecx + 0x01, 0xf1, //0x00007e88 addl %esi, %ecx + 0x48, 0x69, 0xf1, 0x1f, 0x85, 0xeb, 0x51, //0x00007e8a imulq $1374389535, %rcx, %rsi + 0x48, 0xc1, 0xee, 0x25, //0x00007e91 shrq $37, %rsi + 0x6b, 0xde, 0x64, //0x00007e95 imull $100, %esi, %ebx + 0x29, 0xd9, //0x00007e98 subl %ebx, %ecx + 0x48, 0x8d, 0x1d, 0xef, 0x3f, 0x00, 0x00, //0x00007e9a leaq $16367(%rip), %rbx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4b, //0x00007ea1 movzwl (%rbx,%rcx,2), %ecx + 0x66, 0x89, 0x48, 0xfe, //0x00007ea5 movw %cx, $-2(%rax) + 0x0f, 0xb7, 0x0c, 0x73, //0x00007ea9 movzwl (%rbx,%rsi,2), %ecx + 0x66, 0x89, 0x48, 0xfc, //0x00007ead movw %cx, $-4(%rax) + 0x49, 0x89, 0xc1, //0x00007eb1 movq %rax, %r9 + 0x48, 0x83, 0xc0, 0xfc, //0x00007eb4 addq $-4, %rax + 0x89, 0xd6, //0x00007eb8 movl %edx, %esi + 0x83, 0xfe, 0x64, //0x00007eba cmpl $100, %esi + 0x0f, 0x83, 0xd5, 0x01, 0x00, 0x00, //0x00007ebd jae LBB31_56 + 0xe9, 0x17, 0x02, 0x00, 0x00, //0x00007ec3 jmp LBB31_58 + //0x00007ec8 LBB31_38 + 0x45, 0x85, 0xff, //0x00007ec8 testl %r15d, %r15d + 0x0f, 0x8f, 0x90, 0x04, 0x00, 0x00, //0x00007ecb jg LBB31_98 + 0x66, 0x41, 0xc7, 0x00, 0x30, 0x2e, //0x00007ed1 movw $11824, (%r8) + 0x49, 0x83, 0xc0, 0x02, //0x00007ed7 addq $2, %r8 + 0x45, 0x85, 0xff, //0x00007edb testl %r15d, %r15d + 0x0f, 0x89, 0x7d, 0x04, 0x00, 0x00, //0x00007ede jns LBB31_98 + 0x31, 0xf6, //0x00007ee4 xorl %esi, %esi + 0x41, 0x83, 0xff, 0x80, //0x00007ee6 cmpl $-128, %r15d + 0x0f, 0x87, 0x5a, 0x04, 0x00, 0x00, //0x00007eea ja LBB31_96 + 0x45, 0x89, 0xfa, //0x00007ef0 movl %r15d, %r10d + 0x41, 0xf7, 0xd2, //0x00007ef3 notl %r10d + 0x49, 0xff, 0xc2, //0x00007ef6 incq %r10 + 0x4c, 0x89, 0xd6, //0x00007ef9 movq %r10, %rsi + 0x48, 0x83, 0xe6, 0x80, //0x00007efc andq $-128, %rsi + 0x48, 0x8d, 0x46, 0x80, //0x00007f00 leaq $-128(%rsi), %rax + 0x48, 0x89, 0xc1, //0x00007f04 movq %rax, %rcx + 0x48, 0xc1, 0xe9, 0x07, //0x00007f07 shrq $7, %rcx + 0x48, 0xff, 0xc1, //0x00007f0b incq %rcx + 0x41, 0x89, 0xcb, //0x00007f0e movl %ecx, %r11d + 0x41, 0x83, 0xe3, 0x03, //0x00007f11 andl $3, %r11d + 0x48, 0x3d, 0x80, 0x01, 0x00, 0x00, //0x00007f15 cmpq $384, %rax + 0x0f, 0x83, 0x38, 0x03, 0x00, 0x00, //0x00007f1b jae LBB31_90 + 0x31, 0xdb, //0x00007f21 xorl %ebx, %ebx + 0xe9, 0xda, 0x03, 0x00, 0x00, //0x00007f23 jmp LBB31_92 + //0x00007f28 LBB31_76 + 0xc6, 0x43, 0x01, 0x2d, //0x00007f28 movb $45, $1(%rbx) + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00007f2c movl $1, %eax + 0x44, 0x29, 0xf8, //0x00007f31 subl %r15d, %eax + 0x83, 0xf8, 0x64, //0x00007f34 cmpl $100, %eax + 0x0f, 0x8d, 0xbd, 0xfe, 0xff, 0xff, //0x00007f37 jge LBB31_75 + //0x00007f3d LBB31_77 + 0x83, 0xf8, 0x0a, //0x00007f3d cmpl $10, %eax + 0x0f, 0x8c, 0x02, 0x01, 0x00, 0x00, //0x00007f40 jl LBB31_79 + 0x48, 0x98, //0x00007f46 cltq + 0x48, 0x8d, 0x0d, 0x41, 0x3f, 0x00, 0x00, //0x00007f48 leaq $16193(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x00007f4f movzwl (%rcx,%rax,2), %eax + 0x66, 0x89, 0x43, 0x02, //0x00007f53 movw %ax, $2(%rbx) + 0x48, 0x83, 0xc3, 0x04, //0x00007f57 addq $4, %rbx + 0x49, 0x89, 0xd8, //0x00007f5b movq %rbx, %r8 + 0xe9, 0x4d, 0x07, 0x00, 0x00, //0x00007f5e jmp LBB31_137 + //0x00007f63 LBB31_43 + 0x48, 0x89, 0xf0, //0x00007f63 movq %rsi, %rax + 0x41, 0x83, 0xfd, 0x64, //0x00007f66 cmpl $100, %r13d + 0x0f, 0x82, 0x9d, 0xfd, 0xff, 0xff, //0x00007f6a jb LBB31_29 + //0x00007f70 LBB31_44 + 0x48, 0xff, 0xc8, //0x00007f70 decq %rax + 0x4c, 0x8d, 0x15, 0x16, 0x3f, 0x00, 0x00, //0x00007f73 leaq $16150(%rip), %r10 /* _Digits+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007f7a .p2align 4, 0x90 + //0x00007f80 LBB31_45 + 0x44, 0x89, 0xe9, //0x00007f80 movl %r13d, %ecx + 0x48, 0x69, 0xc9, 0x1f, 0x85, 0xeb, 0x51, //0x00007f83 imulq $1374389535, %rcx, %rcx + 0x48, 0xc1, 0xe9, 0x25, //0x00007f8a shrq $37, %rcx + 0x6b, 0xd9, 0x64, //0x00007f8e imull $100, %ecx, %ebx + 0x44, 0x89, 0xea, //0x00007f91 movl %r13d, %edx + 0x29, 0xda, //0x00007f94 subl %ebx, %edx + 0x41, 0x0f, 0xb7, 0x14, 0x52, //0x00007f96 movzwl (%r10,%rdx,2), %edx + 0x66, 0x89, 0x50, 0xff, //0x00007f9b movw %dx, $-1(%rax) + 0x48, 0x83, 0xc0, 0xfe, //0x00007f9f addq $-2, %rax + 0x41, 0x81, 0xfd, 0x0f, 0x27, 0x00, 0x00, //0x00007fa3 cmpl $9999, %r13d + 0x41, 0x89, 0xcd, //0x00007faa movl %ecx, %r13d + 0x0f, 0x87, 0xcd, 0xff, 0xff, 0xff, //0x00007fad ja LBB31_45 + //0x00007fb3 LBB31_46 + 0x49, 0x63, 0xc7, //0x00007fb3 movslq %r15d, %rax + 0x83, 0xf9, 0x0a, //0x00007fb6 cmpl $10, %ecx + 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x00007fb9 jb LBB31_48 + 0x89, 0xc9, //0x00007fbf movl %ecx, %ecx + 0x48, 0x8d, 0x15, 0xc8, 0x3e, 0x00, 0x00, //0x00007fc1 leaq $16072(%rip), %rdx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4a, //0x00007fc8 movzwl (%rdx,%rcx,2), %ecx + 0x66, 0x41, 0x89, 0x08, //0x00007fcc movw %cx, (%r8) + 0x49, 0x01, 0xc0, //0x00007fd0 addq %rax, %r8 + 0x49, 0x39, 0xc4, //0x00007fd3 cmpq %rax, %r12 + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x00007fd6 jl LBB31_49 + 0xe9, 0xcf, 0x06, 0x00, 0x00, //0x00007fdc jmp LBB31_137 + //0x00007fe1 LBB31_48 + 0x80, 0xc1, 0x30, //0x00007fe1 addb $48, %cl + 0x41, 0x88, 0x08, //0x00007fe4 movb %cl, (%r8) + 0x49, 0x01, 0xc0, //0x00007fe7 addq %rax, %r8 + 0x49, 0x39, 0xc4, //0x00007fea cmpq %rax, %r12 + 0x0f, 0x8d, 0xbd, 0x06, 0x00, 0x00, //0x00007fed jge LBB31_137 + //0x00007ff3 LBB31_49 + 0x4b, 0x8d, 0x04, 0x21, //0x00007ff3 leaq (%r9,%r12), %rax + 0x4c, 0x8d, 0x5c, 0x07, 0x01, //0x00007ff7 leaq $1(%rdi,%rax), %r11 + 0x4d, 0x39, 0xc3, //0x00007ffc cmpq %r8, %r11 + 0x4d, 0x0f, 0x46, 0xd8, //0x00007fff cmovbeq %r8, %r11 + 0x4a, 0x8d, 0x0c, 0x0f, //0x00008003 leaq (%rdi,%r9), %rcx + 0x4c, 0x01, 0xe1, //0x00008007 addq %r12, %rcx + 0x49, 0x29, 0xcb, //0x0000800a subq %rcx, %r11 + 0x49, 0x81, 0xfb, 0x80, 0x00, 0x00, 0x00, //0x0000800d cmpq $128, %r11 + 0x0f, 0x82, 0x06, 0x02, 0x00, 0x00, //0x00008014 jb LBB31_87 + 0x4d, 0x89, 0xda, //0x0000801a movq %r11, %r10 + 0x49, 0x83, 0xe2, 0x80, //0x0000801d andq $-128, %r10 + 0x49, 0x8d, 0x4a, 0x80, //0x00008021 leaq $-128(%r10), %rcx + 0x48, 0x89, 0xcb, //0x00008025 movq %rcx, %rbx + 0x48, 0xc1, 0xeb, 0x07, //0x00008028 shrq $7, %rbx + 0x48, 0xff, 0xc3, //0x0000802c incq %rbx + 0x89, 0xda, //0x0000802f movl %ebx, %edx + 0x83, 0xe2, 0x03, //0x00008031 andl $3, %edx + 0x48, 0x81, 0xf9, 0x80, 0x01, 0x00, 0x00, //0x00008034 cmpq $384, %rcx + 0x0f, 0x83, 0xe8, 0x00, 0x00, 0x00, //0x0000803b jae LBB31_80 + 0x31, 0xc0, //0x00008041 xorl %eax, %eax + 0xe9, 0x88, 0x01, 0x00, 0x00, //0x00008043 jmp LBB31_82 + //0x00008048 LBB31_79 + 0x04, 0x30, //0x00008048 addb $48, %al + 0x88, 0x43, 0x02, //0x0000804a movb %al, $2(%rbx) + 0x48, 0x83, 0xc3, 0x03, //0x0000804d addq $3, %rbx + 0x49, 0x89, 0xd8, //0x00008051 movq %rbx, %r8 + 0xe9, 0x57, 0x06, 0x00, 0x00, //0x00008054 jmp LBB31_137 + //0x00008059 LBB31_52 + 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00008059 movl $1, %r9d + 0x83, 0xfe, 0x0a, //0x0000805f cmpl $10, %esi + 0x0f, 0x82, 0x21, 0x00, 0x00, 0x00, //0x00008062 jb LBB31_55 + 0x41, 0xb9, 0x02, 0x00, 0x00, 0x00, //0x00008068 movl $2, %r9d + 0x83, 0xfe, 0x64, //0x0000806e cmpl $100, %esi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00008071 jb LBB31_55 + 0x41, 0xb9, 0x03, 0x00, 0x00, 0x00, //0x00008077 movl $3, %r9d + 0x81, 0xfe, 0xe8, 0x03, 0x00, 0x00, //0x0000807d cmpl $1000, %esi + 0x0f, 0x83, 0xab, 0x01, 0x00, 0x00, //0x00008083 jae LBB31_88 + //0x00008089 LBB31_55 + 0x4d, 0x01, 0xc1, //0x00008089 addq %r8, %r9 + 0x4c, 0x89, 0xc8, //0x0000808c movq %r9, %rax + 0x83, 0xfe, 0x64, //0x0000808f cmpl $100, %esi + 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00008092 jb LBB31_58 + //0x00008098 LBB31_56 + 0x48, 0xff, 0xc8, //0x00008098 decq %rax + 0x4c, 0x8d, 0x15, 0xee, 0x3d, 0x00, 0x00, //0x0000809b leaq $15854(%rip), %r10 /* _Digits+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000080a2 .p2align 4, 0x90 + //0x000080b0 LBB31_57 + 0x89, 0xf3, //0x000080b0 movl %esi, %ebx + 0x89, 0xf6, //0x000080b2 movl %esi, %esi + 0x48, 0x69, 0xf6, 0x1f, 0x85, 0xeb, 0x51, //0x000080b4 imulq $1374389535, %rsi, %rsi + 0x48, 0xc1, 0xee, 0x25, //0x000080bb shrq $37, %rsi + 0x6b, 0xce, 0x64, //0x000080bf imull $100, %esi, %ecx + 0x89, 0xda, //0x000080c2 movl %ebx, %edx + 0x29, 0xca, //0x000080c4 subl %ecx, %edx + 0x41, 0x0f, 0xb7, 0x0c, 0x52, //0x000080c6 movzwl (%r10,%rdx,2), %ecx + 0x66, 0x89, 0x48, 0xff, //0x000080cb movw %cx, $-1(%rax) + 0x48, 0x83, 0xc0, 0xfe, //0x000080cf addq $-2, %rax + 0x81, 0xfb, 0x0f, 0x27, 0x00, 0x00, //0x000080d3 cmpl $9999, %ebx + 0x0f, 0x87, 0xd1, 0xff, 0xff, 0xff, //0x000080d9 ja LBB31_57 + //0x000080df LBB31_58 + 0x83, 0xfe, 0x0a, //0x000080df cmpl $10, %esi + 0x0f, 0x82, 0x16, 0x00, 0x00, 0x00, //0x000080e2 jb LBB31_60 + 0x89, 0xf0, //0x000080e8 movl %esi, %eax + 0x48, 0x8d, 0x0d, 0x9f, 0x3d, 0x00, 0x00, //0x000080ea leaq $15775(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x000080f1 movzwl (%rcx,%rax,2), %eax + 0x66, 0x41, 0x89, 0x00, //0x000080f5 movw %ax, (%r8) + 0xe9, 0x07, 0x00, 0x00, 0x00, //0x000080f9 jmp LBB31_61 + //0x000080fe LBB31_60 + 0x40, 0x80, 0xc6, 0x30, //0x000080fe addb $48, %sil + 0x41, 0x88, 0x30, //0x00008102 movb %sil, (%r8) + //0x00008105 LBB31_61 + 0x41, 0x29, 0xf9, //0x00008105 subl %edi, %r9d + 0x45, 0x89, 0xc8, //0x00008108 movl %r9d, %r8d + 0xe9, 0xa3, 0x05, 0x00, 0x00, //0x0000810b jmp LBB31_138 + //0x00008110 LBB31_62 + 0x41, 0xb9, 0x04, 0x00, 0x00, 0x00, //0x00008110 movl $4, %r9d + 0x48, 0x8d, 0x4b, 0xfc, //0x00008116 leaq $-4(%rbx), %rcx + 0x41, 0x83, 0xfb, 0x64, //0x0000811a cmpl $100, %r11d + 0x0f, 0x82, 0x73, 0xfb, 0xff, 0xff, //0x0000811e jb LBB31_31 + 0xe9, 0xff, 0xfb, 0xff, 0xff, //0x00008124 jmp LBB31_64 + //0x00008129 LBB31_80 + 0x48, 0x29, 0xd3, //0x00008129 subq %rdx, %rbx + 0x48, 0x8d, 0x8c, 0x07, 0xe0, 0x01, 0x00, 0x00, //0x0000812c leaq $480(%rdi,%rax), %rcx + 0x31, 0xc0, //0x00008134 xorl %eax, %eax + 0xc5, 0xfd, 0x6f, 0x05, 0x42, 0xf8, 0xff, 0xff, //0x00008136 vmovdqa $-1982(%rip), %ymm0 /* LCPI31_0+0(%rip) */ + 0x90, 0x90, //0x0000813e .p2align 4, 0x90 + //0x00008140 LBB31_81 + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x20, 0xfe, 0xff, 0xff, //0x00008140 vmovdqu %ymm0, $-480(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x40, 0xfe, 0xff, 0xff, //0x00008149 vmovdqu %ymm0, $-448(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x60, 0xfe, 0xff, 0xff, //0x00008152 vmovdqu %ymm0, $-416(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x80, 0xfe, 0xff, 0xff, //0x0000815b vmovdqu %ymm0, $-384(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0xa0, 0xfe, 0xff, 0xff, //0x00008164 vmovdqu %ymm0, $-352(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0xc0, 0xfe, 0xff, 0xff, //0x0000816d vmovdqu %ymm0, $-320(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0xe0, 0xfe, 0xff, 0xff, //0x00008176 vmovdqu %ymm0, $-288(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x00, 0xff, 0xff, 0xff, //0x0000817f vmovdqu %ymm0, $-256(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x20, 0xff, 0xff, 0xff, //0x00008188 vmovdqu %ymm0, $-224(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x40, 0xff, 0xff, 0xff, //0x00008191 vmovdqu %ymm0, $-192(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x60, 0xff, 0xff, 0xff, //0x0000819a vmovdqu %ymm0, $-160(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x01, 0x80, //0x000081a3 vmovdqu %ymm0, $-128(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x01, 0xa0, //0x000081a9 vmovdqu %ymm0, $-96(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x01, 0xc0, //0x000081af vmovdqu %ymm0, $-64(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x01, 0xe0, //0x000081b5 vmovdqu %ymm0, $-32(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x04, 0x01, //0x000081bb vmovdqu %ymm0, (%rcx,%rax) + 0x48, 0x05, 0x00, 0x02, 0x00, 0x00, //0x000081c0 addq $512, %rax + 0x48, 0x83, 0xc3, 0xfc, //0x000081c6 addq $-4, %rbx + 0x0f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x000081ca jne LBB31_81 + //0x000081d0 LBB31_82 + 0x48, 0x85, 0xd2, //0x000081d0 testq %rdx, %rdx + 0x0f, 0x84, 0x37, 0x00, 0x00, 0x00, //0x000081d3 je LBB31_85 + 0x4c, 0x01, 0xc8, //0x000081d9 addq %r9, %rax + 0x4c, 0x01, 0xe0, //0x000081dc addq %r12, %rax + 0x48, 0x8d, 0x44, 0x07, 0x60, //0x000081df leaq $96(%rdi,%rax), %rax + 0x48, 0xf7, 0xda, //0x000081e4 negq %rdx + 0xc5, 0xfd, 0x6f, 0x05, 0x91, 0xf7, 0xff, 0xff, //0x000081e7 vmovdqa $-2159(%rip), %ymm0 /* LCPI31_0+0(%rip) */ + 0x90, //0x000081ef .p2align 4, 0x90 + //0x000081f0 LBB31_84 + 0xc5, 0xfe, 0x7f, 0x40, 0xa0, //0x000081f0 vmovdqu %ymm0, $-96(%rax) + 0xc5, 0xfe, 0x7f, 0x40, 0xc0, //0x000081f5 vmovdqu %ymm0, $-64(%rax) + 0xc5, 0xfe, 0x7f, 0x40, 0xe0, //0x000081fa vmovdqu %ymm0, $-32(%rax) + 0xc5, 0xfe, 0x7f, 0x00, //0x000081ff vmovdqu %ymm0, (%rax) + 0x48, 0x83, 0xe8, 0x80, //0x00008203 subq $-128, %rax + 0x48, 0xff, 0xc2, //0x00008207 incq %rdx + 0x0f, 0x85, 0xe0, 0xff, 0xff, 0xff, //0x0000820a jne LBB31_84 + //0x00008210 LBB31_85 + 0x4d, 0x39, 0xda, //0x00008210 cmpq %r11, %r10 + 0x0f, 0x84, 0x97, 0x04, 0x00, 0x00, //0x00008213 je LBB31_137 + 0x4c, 0x01, 0xd6, //0x00008219 addq %r10, %rsi + 0x90, 0x90, 0x90, 0x90, //0x0000821c .p2align 4, 0x90 + //0x00008220 LBB31_87 + 0xc6, 0x06, 0x30, //0x00008220 movb $48, (%rsi) + 0x48, 0xff, 0xc6, //0x00008223 incq %rsi + 0x4c, 0x39, 0xc6, //0x00008226 cmpq %r8, %rsi + 0x0f, 0x82, 0xf1, 0xff, 0xff, 0xff, //0x00008229 jb LBB31_87 + 0xe9, 0x7c, 0x04, 0x00, 0x00, //0x0000822f jmp LBB31_137 + //0x00008234 LBB31_88 + 0x81, 0xfe, 0x10, 0x27, 0x00, 0x00, //0x00008234 cmpl $10000, %esi + 0x4c, 0x89, 0xc0, //0x0000823a movq %r8, %rax + 0x48, 0x83, 0xd8, 0x00, //0x0000823d sbbq $0, %rax + 0x48, 0x83, 0xc0, 0x05, //0x00008241 addq $5, %rax + 0x81, 0xfe, 0x10, 0x27, 0x00, 0x00, //0x00008245 cmpl $10000, %esi + 0x0f, 0x83, 0x22, 0xfc, 0xff, 0xff, //0x0000824b jae LBB31_37 + 0x49, 0x89, 0xc1, //0x00008251 movq %rax, %r9 + 0xe9, 0x3f, 0xfe, 0xff, 0xff, //0x00008254 jmp LBB31_56 + //0x00008259 LBB31_90 + 0x49, 0x8d, 0x84, 0x39, 0xe2, 0x01, 0x00, 0x00, //0x00008259 leaq $482(%r9,%rdi), %rax + 0x4d, 0x89, 0xde, //0x00008261 movq %r11, %r14 + 0x49, 0x29, 0xce, //0x00008264 subq %rcx, %r14 + 0x31, 0xdb, //0x00008267 xorl %ebx, %ebx + 0xc5, 0xfd, 0x6f, 0x05, 0x0f, 0xf7, 0xff, 0xff, //0x00008269 vmovdqa $-2289(%rip), %ymm0 /* LCPI31_0+0(%rip) */ + //0x00008271 LBB31_91 + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x20, 0xfe, 0xff, 0xff, //0x00008271 vmovdqu %ymm0, $-480(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x40, 0xfe, 0xff, 0xff, //0x0000827a vmovdqu %ymm0, $-448(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x60, 0xfe, 0xff, 0xff, //0x00008283 vmovdqu %ymm0, $-416(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x80, 0xfe, 0xff, 0xff, //0x0000828c vmovdqu %ymm0, $-384(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0xa0, 0xfe, 0xff, 0xff, //0x00008295 vmovdqu %ymm0, $-352(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0xc0, 0xfe, 0xff, 0xff, //0x0000829e vmovdqu %ymm0, $-320(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0xe0, 0xfe, 0xff, 0xff, //0x000082a7 vmovdqu %ymm0, $-288(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x00, 0xff, 0xff, 0xff, //0x000082b0 vmovdqu %ymm0, $-256(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x20, 0xff, 0xff, 0xff, //0x000082b9 vmovdqu %ymm0, $-224(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x40, 0xff, 0xff, 0xff, //0x000082c2 vmovdqu %ymm0, $-192(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x60, 0xff, 0xff, 0xff, //0x000082cb vmovdqu %ymm0, $-160(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x18, 0x80, //0x000082d4 vmovdqu %ymm0, $-128(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x18, 0xa0, //0x000082da vmovdqu %ymm0, $-96(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x18, 0xc0, //0x000082e0 vmovdqu %ymm0, $-64(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x18, 0xe0, //0x000082e6 vmovdqu %ymm0, $-32(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x04, 0x18, //0x000082ec vmovdqu %ymm0, (%rax,%rbx) + 0x48, 0x81, 0xc3, 0x00, 0x02, 0x00, 0x00, //0x000082f1 addq $512, %rbx + 0x49, 0x83, 0xc6, 0x04, //0x000082f8 addq $4, %r14 + 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x000082fc jne LBB31_91 + //0x00008302 LBB31_92 + 0x4d, 0x85, 0xdb, //0x00008302 testq %r11, %r11 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00008305 je LBB31_95 + 0x4c, 0x01, 0xcb, //0x0000830b addq %r9, %rbx + 0x48, 0x8d, 0x44, 0x1f, 0x62, //0x0000830e leaq $98(%rdi,%rbx), %rax + 0x49, 0xf7, 0xdb, //0x00008313 negq %r11 + 0xc5, 0xfd, 0x6f, 0x05, 0x62, 0xf6, 0xff, 0xff, //0x00008316 vmovdqa $-2462(%rip), %ymm0 /* LCPI31_0+0(%rip) */ + //0x0000831e LBB31_94 + 0xc5, 0xfe, 0x7f, 0x40, 0xa0, //0x0000831e vmovdqu %ymm0, $-96(%rax) + 0xc5, 0xfe, 0x7f, 0x40, 0xc0, //0x00008323 vmovdqu %ymm0, $-64(%rax) + 0xc5, 0xfe, 0x7f, 0x40, 0xe0, //0x00008328 vmovdqu %ymm0, $-32(%rax) + 0xc5, 0xfe, 0x7f, 0x00, //0x0000832d vmovdqu %ymm0, (%rax) + 0x48, 0x83, 0xe8, 0x80, //0x00008331 subq $-128, %rax + 0x49, 0xff, 0xc3, //0x00008335 incq %r11 + 0x0f, 0x85, 0xe0, 0xff, 0xff, 0xff, //0x00008338 jne LBB31_94 + //0x0000833e LBB31_95 + 0x49, 0x01, 0xf0, //0x0000833e addq %rsi, %r8 + 0x49, 0x39, 0xf2, //0x00008341 cmpq %rsi, %r10 + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00008344 je LBB31_98 + //0x0000834a LBB31_96 + 0x44, 0x89, 0xf8, //0x0000834a movl %r15d, %eax + 0xf7, 0xd8, //0x0000834d negl %eax + 0x90, //0x0000834f .p2align 4, 0x90 + //0x00008350 LBB31_97 + 0x41, 0xc6, 0x00, 0x30, //0x00008350 movb $48, (%r8) + 0x49, 0xff, 0xc0, //0x00008354 incq %r8 + 0xff, 0xc6, //0x00008357 incl %esi + 0x39, 0xc6, //0x00008359 cmpl %eax, %esi + 0x0f, 0x8c, 0xef, 0xff, 0xff, 0xff, //0x0000835b jl LBB31_97 + //0x00008361 LBB31_98 + 0x4b, 0x8d, 0x04, 0x20, //0x00008361 leaq (%r8,%r12), %rax + 0x41, 0x81, 0xfd, 0x10, 0x27, 0x00, 0x00, //0x00008365 cmpl $10000, %r13d + 0x0f, 0x82, 0x63, 0x00, 0x00, 0x00, //0x0000836c jb LBB31_101 + 0x44, 0x89, 0xe9, //0x00008372 movl %r13d, %ecx + 0x41, 0xba, 0x59, 0x17, 0xb7, 0xd1, //0x00008375 movl $3518437209, %r10d + 0x4c, 0x0f, 0xaf, 0xd1, //0x0000837b imulq %rcx, %r10 + 0x49, 0xc1, 0xea, 0x2d, //0x0000837f shrq $45, %r10 + 0x41, 0x69, 0xca, 0xf0, 0xd8, 0xff, 0xff, //0x00008383 imull $-10000, %r10d, %ecx + 0x44, 0x01, 0xe9, //0x0000838a addl %r13d, %ecx + 0x0f, 0x84, 0x87, 0x01, 0x00, 0x00, //0x0000838d je LBB31_103 + 0x89, 0xca, //0x00008393 movl %ecx, %edx + 0x48, 0x69, 0xd2, 0x1f, 0x85, 0xeb, 0x51, //0x00008395 imulq $1374389535, %rdx, %rdx + 0x48, 0xc1, 0xea, 0x25, //0x0000839c shrq $37, %rdx + 0x6b, 0xda, 0x64, //0x000083a0 imull $100, %edx, %ebx + 0x29, 0xd9, //0x000083a3 subl %ebx, %ecx + 0x48, 0x8d, 0x1d, 0xe4, 0x3a, 0x00, 0x00, //0x000083a5 leaq $15076(%rip), %rbx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4b, //0x000083ac movzwl (%rbx,%rcx,2), %ecx + 0x66, 0x89, 0x48, 0xfe, //0x000083b0 movw %cx, $-2(%rax) + 0x0f, 0xb7, 0x0c, 0x53, //0x000083b4 movzwl (%rbx,%rdx,2), %ecx + 0x66, 0x89, 0x48, 0xfc, //0x000083b8 movw %cx, $-4(%rax) + 0x45, 0x31, 0xc9, //0x000083bc xorl %r9d, %r9d + 0x48, 0x83, 0xc0, 0xfc, //0x000083bf addq $-4, %rax + 0x41, 0x83, 0xfa, 0x64, //0x000083c3 cmpl $100, %r10d + 0x0f, 0x83, 0x18, 0x00, 0x00, 0x00, //0x000083c7 jae LBB31_105 + //0x000083cd LBB31_102 + 0x44, 0x89, 0xd1, //0x000083cd movl %r10d, %ecx + 0xe9, 0x4d, 0x00, 0x00, 0x00, //0x000083d0 jmp LBB31_107 + //0x000083d5 LBB31_101 + 0x45, 0x31, 0xc9, //0x000083d5 xorl %r9d, %r9d + 0x45, 0x89, 0xea, //0x000083d8 movl %r13d, %r10d + 0x41, 0x83, 0xfa, 0x64, //0x000083db cmpl $100, %r10d + 0x0f, 0x82, 0xe8, 0xff, 0xff, 0xff, //0x000083df jb LBB31_102 + //0x000083e5 LBB31_105 + 0x48, 0xff, 0xc8, //0x000083e5 decq %rax + 0x48, 0x8d, 0x15, 0xa1, 0x3a, 0x00, 0x00, //0x000083e8 leaq $15009(%rip), %rdx /* _Digits+0(%rip) */ + 0x90, //0x000083ef .p2align 4, 0x90 + //0x000083f0 LBB31_106 + 0x44, 0x89, 0xd1, //0x000083f0 movl %r10d, %ecx + 0x48, 0x69, 0xc9, 0x1f, 0x85, 0xeb, 0x51, //0x000083f3 imulq $1374389535, %rcx, %rcx + 0x48, 0xc1, 0xe9, 0x25, //0x000083fa shrq $37, %rcx + 0x6b, 0xd9, 0x64, //0x000083fe imull $100, %ecx, %ebx + 0x44, 0x89, 0xd6, //0x00008401 movl %r10d, %esi + 0x29, 0xde, //0x00008404 subl %ebx, %esi + 0x0f, 0xb7, 0x34, 0x72, //0x00008406 movzwl (%rdx,%rsi,2), %esi + 0x66, 0x89, 0x70, 0xff, //0x0000840a movw %si, $-1(%rax) + 0x48, 0x83, 0xc0, 0xfe, //0x0000840e addq $-2, %rax + 0x41, 0x81, 0xfa, 0x0f, 0x27, 0x00, 0x00, //0x00008412 cmpl $9999, %r10d + 0x41, 0x89, 0xca, //0x00008419 movl %ecx, %r10d + 0x0f, 0x87, 0xce, 0xff, 0xff, 0xff, //0x0000841c ja LBB31_106 + //0x00008422 LBB31_107 + 0x83, 0xf9, 0x0a, //0x00008422 cmpl $10, %ecx + 0x0f, 0x82, 0x16, 0x00, 0x00, 0x00, //0x00008425 jb LBB31_109 + 0x89, 0xc8, //0x0000842b movl %ecx, %eax + 0x48, 0x8d, 0x0d, 0x5c, 0x3a, 0x00, 0x00, //0x0000842d leaq $14940(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x00008434 movzwl (%rcx,%rax,2), %eax + 0x66, 0x41, 0x89, 0x00, //0x00008438 movw %ax, (%r8) + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x0000843c jmp LBB31_110 + //0x00008441 LBB31_109 + 0x80, 0xc1, 0x30, //0x00008441 addb $48, %cl + 0x41, 0x88, 0x08, //0x00008444 movb %cl, (%r8) + //0x00008447 LBB31_110 + 0x4d, 0x29, 0xcc, //0x00008447 subq %r9, %r12 + 0x49, 0x8d, 0x74, 0x24, 0x01, //0x0000844a leaq $1(%r12), %rsi + 0x49, 0x8d, 0x54, 0x24, 0x61, //0x0000844f leaq $97(%r12), %rdx + 0x49, 0x8d, 0x44, 0x24, 0x02, //0x00008454 leaq $2(%r12), %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008459 .p2align 4, 0x90 + //0x00008460 LBB31_111 + 0x48, 0xff, 0xca, //0x00008460 decq %rdx + 0x48, 0xff, 0xce, //0x00008463 decq %rsi + 0x48, 0xff, 0xc8, //0x00008466 decq %rax + 0x43, 0x80, 0x7c, 0x20, 0xff, 0x30, //0x00008469 cmpb $48, $-1(%r8,%r12) + 0x4d, 0x8d, 0x64, 0x24, 0xff, //0x0000846f leaq $-1(%r12), %r12 + 0x0f, 0x84, 0xe6, 0xff, 0xff, 0xff, //0x00008474 je LBB31_111 + 0x4d, 0x8d, 0x0c, 0x30, //0x0000847a leaq (%r8,%rsi), %r9 + 0x45, 0x85, 0xff, //0x0000847e testl %r15d, %r15d + 0x0f, 0x8e, 0x8b, 0x00, 0x00, 0x00, //0x00008481 jle LBB31_116 + 0x44, 0x89, 0xc9, //0x00008487 movl %r9d, %ecx + 0x44, 0x29, 0xc1, //0x0000848a subl %r8d, %ecx + 0x41, 0x39, 0xcf, //0x0000848d cmpl %ecx, %r15d + 0x0f, 0x8d, 0x23, 0x00, 0x00, 0x00, //0x00008490 jge LBB31_117 + 0x43, 0x8d, 0x0c, 0x07, //0x00008496 leal (%r15,%r8), %ecx + 0x41, 0x29, 0xc9, //0x0000849a subl %ecx, %r9d + 0x49, 0x8d, 0x49, 0xff, //0x0000849d leaq $-1(%r9), %rcx + 0x45, 0x89, 0xca, //0x000084a1 movl %r9d, %r10d + 0x41, 0x83, 0xe2, 0x03, //0x000084a4 andl $3, %r10d + 0x48, 0x83, 0xf9, 0x03, //0x000084a8 cmpq $3, %rcx + 0x0f, 0x83, 0x81, 0x00, 0x00, 0x00, //0x000084ac jae LBB31_121 + 0x31, 0xc9, //0x000084b2 xorl %ecx, %ecx + 0xe9, 0xa3, 0x00, 0x00, 0x00, //0x000084b4 jmp LBB31_124 + //0x000084b9 LBB31_117 + 0x0f, 0x8e, 0x53, 0x00, 0x00, 0x00, //0x000084b9 jle LBB31_116 + 0x45, 0x01, 0xc7, //0x000084bf addl %r8d, %r15d + 0x45, 0x89, 0xce, //0x000084c2 movl %r9d, %r14d + 0x41, 0xf7, 0xd6, //0x000084c5 notl %r14d + 0x45, 0x01, 0xfe, //0x000084c8 addl %r15d, %r14d + 0x45, 0x31, 0xd2, //0x000084cb xorl %r10d, %r10d + 0x4d, 0x89, 0xcb, //0x000084ce movq %r9, %r11 + 0x41, 0x83, 0xfe, 0x7e, //0x000084d1 cmpl $126, %r14d + 0x0f, 0x86, 0xb4, 0x01, 0x00, 0x00, //0x000084d5 jbe LBB31_135 + 0x49, 0xff, 0xc6, //0x000084db incq %r14 + 0x4d, 0x89, 0xf2, //0x000084de movq %r14, %r10 + 0x49, 0x83, 0xe2, 0x80, //0x000084e1 andq $-128, %r10 + 0x4f, 0x8d, 0x1c, 0x10, //0x000084e5 leaq (%r8,%r10), %r11 + 0x49, 0x8d, 0x5a, 0x80, //0x000084e9 leaq $-128(%r10), %rbx + 0x48, 0x89, 0xd9, //0x000084ed movq %rbx, %rcx + 0x48, 0xc1, 0xe9, 0x07, //0x000084f0 shrq $7, %rcx + 0x48, 0xff, 0xc1, //0x000084f4 incq %rcx + 0x41, 0x89, 0xcc, //0x000084f7 movl %ecx, %r12d + 0x41, 0x83, 0xe4, 0x03, //0x000084fa andl $3, %r12d + 0x48, 0x81, 0xfb, 0x80, 0x01, 0x00, 0x00, //0x000084fe cmpq $384, %rbx + 0x0f, 0x83, 0x8f, 0x00, 0x00, 0x00, //0x00008505 jae LBB31_129 + 0x31, 0xc9, //0x0000850b xorl %ecx, %ecx + 0xe9, 0x30, 0x01, 0x00, 0x00, //0x0000850d jmp LBB31_131 + //0x00008512 LBB31_116 + 0x4d, 0x89, 0xc8, //0x00008512 movq %r9, %r8 + 0xe9, 0x96, 0x01, 0x00, 0x00, //0x00008515 jmp LBB31_137 + //0x0000851a LBB31_103 + 0x41, 0xb9, 0x04, 0x00, 0x00, 0x00, //0x0000851a movl $4, %r9d + 0x48, 0x83, 0xc0, 0xfc, //0x00008520 addq $-4, %rax + 0x41, 0x83, 0xfa, 0x64, //0x00008524 cmpl $100, %r10d + 0x0f, 0x82, 0x9f, 0xfe, 0xff, 0xff, //0x00008528 jb LBB31_102 + 0xe9, 0xb2, 0xfe, 0xff, 0xff, //0x0000852e jmp LBB31_105 + //0x00008533 LBB31_121 + 0x4d, 0x89, 0xd3, //0x00008533 movq %r10, %r11 + 0x4d, 0x29, 0xcb, //0x00008536 subq %r9, %r11 + 0x31, 0xc9, //0x00008539 xorl %ecx, %ecx + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000853b .p2align 4, 0x90 + //0x00008540 LBB31_122 + 0x49, 0x8d, 0x1c, 0x08, //0x00008540 leaq (%r8,%rcx), %rbx + 0x8b, 0x54, 0x1e, 0xfc, //0x00008544 movl $-4(%rsi,%rbx), %edx + 0x89, 0x54, 0x1e, 0xfd, //0x00008548 movl %edx, $-3(%rsi,%rbx) + 0x48, 0x83, 0xc1, 0xfc, //0x0000854c addq $-4, %rcx + 0x49, 0x39, 0xcb, //0x00008550 cmpq %rcx, %r11 + 0x0f, 0x85, 0xe7, 0xff, 0xff, 0xff, //0x00008553 jne LBB31_122 + 0x48, 0xf7, 0xd9, //0x00008559 negq %rcx + //0x0000855c LBB31_124 + 0x4d, 0x85, 0xd2, //0x0000855c testq %r10, %r10 + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x0000855f je LBB31_127 + 0x49, 0xf7, 0xda, //0x00008565 negq %r10 + 0x4c, 0x89, 0xc2, //0x00008568 movq %r8, %rdx + 0x48, 0x29, 0xca, //0x0000856b subq %rcx, %rdx + 0x31, 0xc9, //0x0000856e xorl %ecx, %ecx + //0x00008570 .p2align 4, 0x90 + //0x00008570 LBB31_126 + 0x48, 0x8d, 0x34, 0x0a, //0x00008570 leaq (%rdx,%rcx), %rsi + 0x41, 0x0f, 0xb6, 0x1c, 0x34, //0x00008574 movzbl (%r12,%rsi), %ebx + 0x41, 0x88, 0x5c, 0x34, 0x01, //0x00008579 movb %bl, $1(%r12,%rsi) + 0x48, 0xff, 0xc9, //0x0000857e decq %rcx + 0x49, 0x39, 0xca, //0x00008581 cmpq %rcx, %r10 + 0x0f, 0x85, 0xe6, 0xff, 0xff, 0xff, //0x00008584 jne LBB31_126 + //0x0000858a LBB31_127 + 0x49, 0x63, 0xcf, //0x0000858a movslq %r15d, %rcx + 0x41, 0xc6, 0x04, 0x08, 0x2e, //0x0000858d movb $46, (%r8,%rcx) + 0x49, 0x01, 0xc0, //0x00008592 addq %rax, %r8 + 0xe9, 0x16, 0x01, 0x00, 0x00, //0x00008595 jmp LBB31_137 + //0x0000859a LBB31_129 + 0x4c, 0x89, 0xe3, //0x0000859a movq %r12, %rbx + 0x48, 0x29, 0xcb, //0x0000859d subq %rcx, %rbx + 0x31, 0xc9, //0x000085a0 xorl %ecx, %ecx + 0xc5, 0xfd, 0x6f, 0x05, 0xd6, 0xf3, 0xff, 0xff, //0x000085a2 vmovdqa $-3114(%rip), %ymm0 /* LCPI31_0+0(%rip) */ + //0x000085aa LBB31_130 + 0x49, 0x8d, 0x04, 0x08, //0x000085aa leaq (%r8,%rcx), %rax + 0xc5, 0xfe, 0x7f, 0x04, 0x06, //0x000085ae vmovdqu %ymm0, (%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x06, 0x20, //0x000085b3 vmovdqu %ymm0, $32(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x06, 0x40, //0x000085b9 vmovdqu %ymm0, $64(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x06, 0x60, //0x000085bf vmovdqu %ymm0, $96(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0x80, 0x00, 0x00, 0x00, //0x000085c5 vmovdqu %ymm0, $128(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0xa0, 0x00, 0x00, 0x00, //0x000085ce vmovdqu %ymm0, $160(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0xc0, 0x00, 0x00, 0x00, //0x000085d7 vmovdqu %ymm0, $192(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0xe0, 0x00, 0x00, 0x00, //0x000085e0 vmovdqu %ymm0, $224(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0x00, 0x01, 0x00, 0x00, //0x000085e9 vmovdqu %ymm0, $256(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0x20, 0x01, 0x00, 0x00, //0x000085f2 vmovdqu %ymm0, $288(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0x40, 0x01, 0x00, 0x00, //0x000085fb vmovdqu %ymm0, $320(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0x60, 0x01, 0x00, 0x00, //0x00008604 vmovdqu %ymm0, $352(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0x80, 0x01, 0x00, 0x00, //0x0000860d vmovdqu %ymm0, $384(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0xa0, 0x01, 0x00, 0x00, //0x00008616 vmovdqu %ymm0, $416(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0xc0, 0x01, 0x00, 0x00, //0x0000861f vmovdqu %ymm0, $448(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0xe0, 0x01, 0x00, 0x00, //0x00008628 vmovdqu %ymm0, $480(%rsi,%rax) + 0x48, 0x81, 0xc1, 0x00, 0x02, 0x00, 0x00, //0x00008631 addq $512, %rcx + 0x48, 0x83, 0xc3, 0x04, //0x00008638 addq $4, %rbx + 0x0f, 0x85, 0x68, 0xff, 0xff, 0xff, //0x0000863c jne LBB31_130 + //0x00008642 LBB31_131 + 0x49, 0x01, 0xf3, //0x00008642 addq %rsi, %r11 + 0x4d, 0x85, 0xe4, //0x00008645 testq %r12, %r12 + 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00008648 je LBB31_134 + 0x49, 0x01, 0xc8, //0x0000864e addq %rcx, %r8 + 0x49, 0x01, 0xd0, //0x00008651 addq %rdx, %r8 + 0x49, 0xf7, 0xdc, //0x00008654 negq %r12 + 0xc5, 0xfd, 0x6f, 0x05, 0x21, 0xf3, 0xff, 0xff, //0x00008657 vmovdqa $-3295(%rip), %ymm0 /* LCPI31_0+0(%rip) */ + //0x0000865f LBB31_133 + 0xc4, 0xc1, 0x7e, 0x7f, 0x40, 0xa0, //0x0000865f vmovdqu %ymm0, $-96(%r8) + 0xc4, 0xc1, 0x7e, 0x7f, 0x40, 0xc0, //0x00008665 vmovdqu %ymm0, $-64(%r8) + 0xc4, 0xc1, 0x7e, 0x7f, 0x40, 0xe0, //0x0000866b vmovdqu %ymm0, $-32(%r8) + 0xc4, 0xc1, 0x7e, 0x7f, 0x00, //0x00008671 vmovdqu %ymm0, (%r8) + 0x49, 0x83, 0xe8, 0x80, //0x00008676 subq $-128, %r8 + 0x49, 0xff, 0xc4, //0x0000867a incq %r12 + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000867d jne LBB31_133 + //0x00008683 LBB31_134 + 0x4d, 0x89, 0xd8, //0x00008683 movq %r11, %r8 + 0x4d, 0x39, 0xd6, //0x00008686 cmpq %r10, %r14 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00008689 je LBB31_137 + //0x0000868f LBB31_135 + 0x45, 0x29, 0xd7, //0x0000868f subl %r10d, %r15d + 0x45, 0x29, 0xcf, //0x00008692 subl %r9d, %r15d + 0x4d, 0x89, 0xd8, //0x00008695 movq %r11, %r8 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008698 .p2align 4, 0x90 + //0x000086a0 LBB31_136 + 0x41, 0xc6, 0x00, 0x30, //0x000086a0 movb $48, (%r8) + 0x49, 0xff, 0xc0, //0x000086a4 incq %r8 + 0x41, 0xff, 0xcf, //0x000086a7 decl %r15d + 0x0f, 0x85, 0xf0, 0xff, 0xff, 0xff, //0x000086aa jne LBB31_136 + //0x000086b0 LBB31_137 + 0x41, 0x29, 0xf8, //0x000086b0 subl %edi, %r8d + //0x000086b3 LBB31_138 + 0x44, 0x89, 0xc0, //0x000086b3 movl %r8d, %eax + 0x5b, //0x000086b6 popq %rbx + 0x41, 0x5c, //0x000086b7 popq %r12 + 0x41, 0x5d, //0x000086b9 popq %r13 + 0x41, 0x5e, //0x000086bb popq %r14 + 0x41, 0x5f, //0x000086bd popq %r15 + 0x5d, //0x000086bf popq %rbp + 0xc5, 0xf8, 0x77, //0x000086c0 vzeroupper + 0xc3, //0x000086c3 retq + //0x000086c4 LBB31_139 + 0x45, 0x31, 0xc0, //0x000086c4 xorl %r8d, %r8d + 0xe9, 0xe7, 0xff, 0xff, 0xff, //0x000086c7 jmp LBB31_138 + //0x000086cc LBB31_140 + 0x41, 0xbf, 0x6b, 0xff, 0xff, 0xff, //0x000086cc movl $-149, %r15d + 0x89, 0xc6, //0x000086d2 movl %eax, %esi + 0xe9, 0x46, 0xf3, 0xff, 0xff, //0x000086d4 jmp LBB31_5 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000086d9 .p2align 4, 0x00 + //0x000086e0 LCPI32_0 + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, //0x000086e0 QUAD $0x4040404040404040; QUAD $0x4040404040404040 // .space 16, '@@@@@@@@@@@@@@@@' + //0x000086f0 LCPI32_1 + 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, //0x000086f0 QUAD $0x5b5b5b5b5b5b5b5b; QUAD $0x5b5b5b5b5b5b5b5b // .space 16, '[[[[[[[[[[[[[[[[' + //0x00008700 LCPI32_2 + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00008700 QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .space 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + //0x00008710 LCPI32_3 + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, //0x00008710 QUAD $0xbfbfbfbfbfbfbfbf; QUAD $0xbfbfbfbfbfbfbfbf // .space 16, '\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf' + //0x00008720 LCPI32_4 + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, //0x00008720 QUAD $0x1919191919191919; QUAD $0x1919191919191919 // .space 16, '\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19' + //0x00008730 LCPI32_5 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00008730 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x00008740 .p2align 4, 0x90 + //0x00008740 _to_lower + 0x55, //0x00008740 pushq %rbp + 0x48, 0x89, 0xe5, //0x00008741 movq %rsp, %rbp + 0x41, 0x56, //0x00008744 pushq %r14 + 0x53, //0x00008746 pushq %rbx + 0x31, 0xc9, //0x00008747 xorl %ecx, %ecx + 0xc5, 0xf9, 0x6f, 0x05, 0x8f, 0xff, 0xff, 0xff, //0x00008749 vmovdqa $-113(%rip), %xmm0 /* LCPI32_0+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0x97, 0xff, 0xff, 0xff, //0x00008751 vmovdqa $-105(%rip), %xmm1 /* LCPI32_1+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x15, 0x9f, 0xff, 0xff, 0xff, //0x00008759 vmovdqa $-97(%rip), %xmm2 /* LCPI32_2+0(%rip) */ + 0x48, 0x89, 0xd3, //0x00008761 movq %rdx, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008764 .p2align 4, 0x90 + //0x00008770 LBB32_1 + 0xc5, 0xfa, 0x6f, 0x1c, 0x0e, //0x00008770 vmovdqu (%rsi,%rcx), %xmm3 + 0xc5, 0xe1, 0x64, 0xe0, //0x00008775 vpcmpgtb %xmm0, %xmm3, %xmm4 + 0xc5, 0xf1, 0x64, 0xeb, //0x00008779 vpcmpgtb %xmm3, %xmm1, %xmm5 + 0xc5, 0xd1, 0xdb, 0xe4, //0x0000877d vpand %xmm4, %xmm5, %xmm4 + 0xc5, 0xd9, 0xdb, 0xe2, //0x00008781 vpand %xmm2, %xmm4, %xmm4 + 0xc5, 0xd9, 0x71, 0xf4, 0x05, //0x00008785 vpsllw $5, %xmm4, %xmm4 + 0xc5, 0xd9, 0xfc, 0xdb, //0x0000878a vpaddb %xmm3, %xmm4, %xmm3 + 0xc5, 0xfa, 0x7f, 0x1c, 0x0f, //0x0000878e vmovdqu %xmm3, (%rdi,%rcx) + 0x48, 0x83, 0xc3, 0xf0, //0x00008793 addq $-16, %rbx + 0x48, 0x83, 0xc1, 0x10, //0x00008797 addq $16, %rcx + 0x48, 0x83, 0xfb, 0x0f, //0x0000879b cmpq $15, %rbx + 0x0f, 0x87, 0xcb, 0xff, 0xff, 0xff, //0x0000879f ja LBB32_1 + 0x49, 0x89, 0xd2, //0x000087a5 movq %rdx, %r10 + 0x49, 0x29, 0xca, //0x000087a8 subq %rcx, %r10 + 0x0f, 0x84, 0xe2, 0x01, 0x00, 0x00, //0x000087ab je LBB32_20 + 0x4c, 0x8d, 0x0c, 0x0f, //0x000087b1 leaq (%rdi,%rcx), %r9 + 0x4c, 0x8d, 0x04, 0x0e, //0x000087b5 leaq (%rsi,%rcx), %r8 + 0x48, 0x83, 0xfb, 0x10, //0x000087b9 cmpq $16, %rbx + 0x0f, 0x82, 0x26, 0x00, 0x00, 0x00, //0x000087bd jb LBB32_14 + 0x49, 0x83, 0xc2, 0x10, //0x000087c3 addq $16, %r10 + 0x48, 0x8d, 0x44, 0x0e, 0xf0, //0x000087c7 leaq $-16(%rsi,%rcx), %rax + 0x4c, 0x01, 0xd0, //0x000087cc addq %r10, %rax + 0x49, 0x39, 0xc1, //0x000087cf cmpq %rax, %r9 + 0x0f, 0x83, 0x2c, 0x00, 0x00, 0x00, //0x000087d2 jae LBB32_6 + 0x48, 0x8d, 0x44, 0x0f, 0xf0, //0x000087d8 leaq $-16(%rdi,%rcx), %rax + 0x4c, 0x01, 0xd0, //0x000087dd addq %r10, %rax + 0x49, 0x39, 0xc0, //0x000087e0 cmpq %rax, %r8 + 0x0f, 0x83, 0x1b, 0x00, 0x00, 0x00, //0x000087e3 jae LBB32_6 + //0x000087e9 LBB32_14 + 0xf6, 0xc3, 0x01, //0x000087e9 testb $1, %bl + 0x0f, 0x85, 0x23, 0x01, 0x00, 0x00, //0x000087ec jne LBB32_16 + //0x000087f2 LBB32_15 + 0x48, 0x89, 0xd9, //0x000087f2 movq %rbx, %rcx + 0x48, 0x83, 0xfb, 0x01, //0x000087f5 cmpq $1, %rbx + 0x0f, 0x85, 0x40, 0x01, 0x00, 0x00, //0x000087f9 jne LBB32_18 + 0xe9, 0x8f, 0x01, 0x00, 0x00, //0x000087ff jmp LBB32_20 + //0x00008804 LBB32_6 + 0x49, 0x89, 0xd8, //0x00008804 movq %rbx, %r8 + 0x49, 0x83, 0xe0, 0xf0, //0x00008807 andq $-16, %r8 + 0x49, 0x8d, 0x40, 0xf0, //0x0000880b leaq $-16(%r8), %rax + 0x49, 0x89, 0xc2, //0x0000880f movq %rax, %r10 + 0x49, 0xc1, 0xea, 0x04, //0x00008812 shrq $4, %r10 + 0x4d, 0x8d, 0x4a, 0x01, //0x00008816 leaq $1(%r10), %r9 + 0x48, 0x85, 0xc0, //0x0000881a testq %rax, %rax + 0x0f, 0x84, 0x75, 0x01, 0x00, 0x00, //0x0000881d je LBB32_7 + 0x41, 0x8d, 0x42, 0x01, //0x00008823 leal $1(%r10), %eax + 0x0f, 0xb6, 0xc0, //0x00008827 movzbl %al, %eax + 0x83, 0xe0, 0x01, //0x0000882a andl $1, %eax + 0x49, 0xf7, 0xd2, //0x0000882d notq %r10 + 0x49, 0x01, 0xc2, //0x00008830 addq %rax, %r10 + 0x45, 0x31, 0xdb, //0x00008833 xorl %r11d, %r11d + 0xc5, 0xf9, 0x6f, 0x05, 0xd2, 0xfe, 0xff, 0xff, //0x00008836 vmovdqa $-302(%rip), %xmm0 /* LCPI32_3+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0xda, 0xfe, 0xff, 0xff, //0x0000883e vmovdqa $-294(%rip), %xmm1 /* LCPI32_4+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x15, 0xe2, 0xfe, 0xff, 0xff, //0x00008846 vmovdqa $-286(%rip), %xmm2 /* LCPI32_5+0(%rip) */ + 0x90, 0x90, //0x0000884e .p2align 4, 0x90 + //0x00008850 LBB32_9 + 0x4e, 0x8d, 0x34, 0x1e, //0x00008850 leaq (%rsi,%r11), %r14 + 0xc4, 0xa1, 0x7a, 0x6f, 0x1c, 0x31, //0x00008854 vmovdqu (%rcx,%r14), %xmm3 + 0xc5, 0xe1, 0xfc, 0xe0, //0x0000885a vpaddb %xmm0, %xmm3, %xmm4 + 0xc5, 0xd9, 0xda, 0xe9, //0x0000885e vpminub %xmm1, %xmm4, %xmm5 + 0xc5, 0xd9, 0x74, 0xe5, //0x00008862 vpcmpeqb %xmm5, %xmm4, %xmm4 + 0xc5, 0xe1, 0xfc, 0xea, //0x00008866 vpaddb %xmm2, %xmm3, %xmm5 + 0xc4, 0xe3, 0x61, 0x4c, 0xdd, 0x40, //0x0000886a vpblendvb %xmm4, %xmm5, %xmm3, %xmm3 + 0x4a, 0x8d, 0x04, 0x1f, //0x00008870 leaq (%rdi,%r11), %rax + 0xc5, 0xfa, 0x7f, 0x1c, 0x01, //0x00008874 vmovdqu %xmm3, (%rcx,%rax) + 0xc4, 0xa1, 0x7a, 0x6f, 0x5c, 0x31, 0x10, //0x00008879 vmovdqu $16(%rcx,%r14), %xmm3 + 0xc5, 0xe1, 0xfc, 0xe0, //0x00008880 vpaddb %xmm0, %xmm3, %xmm4 + 0xc5, 0xd9, 0xda, 0xe9, //0x00008884 vpminub %xmm1, %xmm4, %xmm5 + 0xc5, 0xd9, 0x74, 0xe5, //0x00008888 vpcmpeqb %xmm5, %xmm4, %xmm4 + 0xc5, 0xe1, 0xfc, 0xea, //0x0000888c vpaddb %xmm2, %xmm3, %xmm5 + 0xc4, 0xe3, 0x61, 0x4c, 0xdd, 0x40, //0x00008890 vpblendvb %xmm4, %xmm5, %xmm3, %xmm3 + 0xc5, 0xfa, 0x7f, 0x5c, 0x01, 0x10, //0x00008896 vmovdqu %xmm3, $16(%rcx,%rax) + 0x49, 0x83, 0xc3, 0x20, //0x0000889c addq $32, %r11 + 0x49, 0x83, 0xc2, 0x02, //0x000088a0 addq $2, %r10 + 0x0f, 0x85, 0xa6, 0xff, 0xff, 0xff, //0x000088a4 jne LBB32_9 + 0x41, 0xf6, 0xc1, 0x01, //0x000088aa testb $1, %r9b + 0x0f, 0x84, 0x34, 0x00, 0x00, 0x00, //0x000088ae je LBB32_12 + //0x000088b4 LBB32_11 + 0x4a, 0x8d, 0x04, 0x1e, //0x000088b4 leaq (%rsi,%r11), %rax + 0xc5, 0xfa, 0x6f, 0x04, 0x01, //0x000088b8 vmovdqu (%rcx,%rax), %xmm0 + 0xc5, 0xf9, 0xfc, 0x0d, 0x4b, 0xfe, 0xff, 0xff, //0x000088bd vpaddb $-437(%rip), %xmm0, %xmm1 /* LCPI32_3+0(%rip) */ + 0xc5, 0xf1, 0xda, 0x15, 0x53, 0xfe, 0xff, 0xff, //0x000088c5 vpminub $-429(%rip), %xmm1, %xmm2 /* LCPI32_4+0(%rip) */ + 0xc5, 0xf1, 0x74, 0xca, //0x000088cd vpcmpeqb %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0xfc, 0x15, 0x57, 0xfe, 0xff, 0xff, //0x000088d1 vpaddb $-425(%rip), %xmm0, %xmm2 /* LCPI32_5+0(%rip) */ + 0xc4, 0xe3, 0x79, 0x4c, 0xc2, 0x10, //0x000088d9 vpblendvb %xmm1, %xmm2, %xmm0, %xmm0 + 0x49, 0x01, 0xfb, //0x000088df addq %rdi, %r11 + 0xc4, 0xa1, 0x7a, 0x7f, 0x04, 0x19, //0x000088e2 vmovdqu %xmm0, (%rcx,%r11) + //0x000088e8 LBB32_12 + 0x4c, 0x39, 0xc3, //0x000088e8 cmpq %r8, %rbx + 0x0f, 0x84, 0xa2, 0x00, 0x00, 0x00, //0x000088eb je LBB32_20 + 0x4c, 0x01, 0xc6, //0x000088f1 addq %r8, %rsi + 0x4c, 0x29, 0xc2, //0x000088f4 subq %r8, %rdx + 0x4c, 0x01, 0xc7, //0x000088f7 addq %r8, %rdi + 0x48, 0x01, 0xce, //0x000088fa addq %rcx, %rsi + 0x48, 0x29, 0xca, //0x000088fd subq %rcx, %rdx + 0x48, 0x01, 0xcf, //0x00008900 addq %rcx, %rdi + 0x49, 0x89, 0xf0, //0x00008903 movq %rsi, %r8 + 0x48, 0x89, 0xd3, //0x00008906 movq %rdx, %rbx + 0x49, 0x89, 0xf9, //0x00008909 movq %rdi, %r9 + 0xf6, 0xc3, 0x01, //0x0000890c testb $1, %bl + 0x0f, 0x84, 0xdd, 0xfe, 0xff, 0xff, //0x0000890f je LBB32_15 + //0x00008915 LBB32_16 + 0x41, 0x0f, 0xb6, 0x00, //0x00008915 movzbl (%r8), %eax + 0x8d, 0x48, 0xbf, //0x00008919 leal $-65(%rax), %ecx + 0x8d, 0x50, 0x20, //0x0000891c leal $32(%rax), %edx + 0x80, 0xf9, 0x1a, //0x0000891f cmpb $26, %cl + 0x0f, 0xb6, 0xd2, //0x00008922 movzbl %dl, %edx + 0x0f, 0x43, 0xd0, //0x00008925 cmovael %eax, %edx + 0x48, 0x8d, 0x4b, 0xff, //0x00008928 leaq $-1(%rbx), %rcx + 0x41, 0x88, 0x11, //0x0000892c movb %dl, (%r9) + 0x49, 0xff, 0xc0, //0x0000892f incq %r8 + 0x49, 0xff, 0xc1, //0x00008932 incq %r9 + 0x48, 0x83, 0xfb, 0x01, //0x00008935 cmpq $1, %rbx + 0x0f, 0x84, 0x54, 0x00, 0x00, 0x00, //0x00008939 je LBB32_20 + //0x0000893f LBB32_18 + 0x31, 0xc0, //0x0000893f xorl %eax, %eax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008941 .p2align 4, 0x90 + //0x00008950 LBB32_19 + 0x41, 0x0f, 0xb6, 0x14, 0x00, //0x00008950 movzbl (%r8,%rax), %edx + 0x8d, 0x72, 0xbf, //0x00008955 leal $-65(%rdx), %esi + 0x8d, 0x7a, 0x20, //0x00008958 leal $32(%rdx), %edi + 0x40, 0x80, 0xfe, 0x1a, //0x0000895b cmpb $26, %sil + 0x40, 0x0f, 0xb6, 0xf7, //0x0000895f movzbl %dil, %esi + 0x0f, 0x43, 0xf2, //0x00008963 cmovael %edx, %esi + 0x41, 0x88, 0x34, 0x01, //0x00008966 movb %sil, (%r9,%rax) + 0x41, 0x0f, 0xb6, 0x54, 0x00, 0x01, //0x0000896a movzbl $1(%r8,%rax), %edx + 0x8d, 0x72, 0xbf, //0x00008970 leal $-65(%rdx), %esi + 0x8d, 0x7a, 0x20, //0x00008973 leal $32(%rdx), %edi + 0x40, 0x80, 0xfe, 0x1a, //0x00008976 cmpb $26, %sil + 0x40, 0x0f, 0xb6, 0xf7, //0x0000897a movzbl %dil, %esi + 0x0f, 0x43, 0xf2, //0x0000897e cmovael %edx, %esi + 0x41, 0x88, 0x74, 0x01, 0x01, //0x00008981 movb %sil, $1(%r9,%rax) + 0x48, 0x83, 0xc0, 0x02, //0x00008986 addq $2, %rax + 0x48, 0x39, 0xc1, //0x0000898a cmpq %rax, %rcx + 0x0f, 0x85, 0xbd, 0xff, 0xff, 0xff, //0x0000898d jne LBB32_19 + //0x00008993 LBB32_20 + 0x5b, //0x00008993 popq %rbx + 0x41, 0x5e, //0x00008994 popq %r14 + 0x5d, //0x00008996 popq %rbp + 0xc3, //0x00008997 retq + //0x00008998 LBB32_7 + 0x45, 0x31, 0xdb, //0x00008998 xorl %r11d, %r11d + 0x41, 0xf6, 0xc1, 0x01, //0x0000899b testb $1, %r9b + 0x0f, 0x85, 0x0f, 0xff, 0xff, 0xff, //0x0000899f jne LBB32_11 + 0xe9, 0x3e, 0xff, 0xff, 0xff, //0x000089a5 jmp LBB32_12 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000089aa .p2align 4, 0x90 + //0x000089b0 _format_significand + 0x55, //0x000089b0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000089b1 movq %rsp, %rbp + 0x41, 0x56, //0x000089b4 pushq %r14 + 0x53, //0x000089b6 pushq %rbx + 0x4c, 0x63, 0xc2, //0x000089b7 movslq %edx, %r8 + 0x49, 0x01, 0xf0, //0x000089ba addq %rsi, %r8 + 0x48, 0x89, 0xf8, //0x000089bd movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x20, //0x000089c0 shrq $32, %rax + 0x0f, 0x84, 0xb6, 0x00, 0x00, 0x00, //0x000089c4 je LBB33_1 + 0x48, 0xb9, 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x000089ca movabsq $-6067343680855748867, %rcx + 0x48, 0x89, 0xf8, //0x000089d4 movq %rdi, %rax + 0x48, 0xf7, 0xe1, //0x000089d7 mulq %rcx + 0x48, 0xc1, 0xea, 0x1a, //0x000089da shrq $26, %rdx + 0x69, 0xca, 0x00, 0x1f, 0x0a, 0xfa, //0x000089de imull $-100000000, %edx, %ecx + 0x01, 0xf9, //0x000089e4 addl %edi, %ecx + 0x0f, 0x84, 0xb0, 0x00, 0x00, 0x00, //0x000089e6 je LBB33_3 + 0x89, 0xc8, //0x000089ec movl %ecx, %eax + 0x41, 0xb9, 0x59, 0x17, 0xb7, 0xd1, //0x000089ee movl $3518437209, %r9d + 0x49, 0x0f, 0xaf, 0xc1, //0x000089f4 imulq %r9, %rax + 0x48, 0xc1, 0xe8, 0x2d, //0x000089f8 shrq $45, %rax + 0x69, 0xf8, 0x10, 0x27, 0x00, 0x00, //0x000089fc imull $10000, %eax, %edi + 0x29, 0xf9, //0x00008a02 subl %edi, %ecx + 0x48, 0x89, 0xc7, //0x00008a04 movq %rax, %rdi + 0x49, 0x0f, 0xaf, 0xf9, //0x00008a07 imulq %r9, %rdi + 0x48, 0xc1, 0xef, 0x2d, //0x00008a0b shrq $45, %rdi + 0x69, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00008a0f imull $10000, %edi, %edi + 0x29, 0xf8, //0x00008a15 subl %edi, %eax + 0x0f, 0xb7, 0xf9, //0x00008a17 movzwl %cx, %edi + 0xc1, 0xef, 0x02, //0x00008a1a shrl $2, %edi + 0x44, 0x69, 0xcf, 0x7b, 0x14, 0x00, 0x00, //0x00008a1d imull $5243, %edi, %r9d + 0x41, 0xc1, 0xe9, 0x11, //0x00008a24 shrl $17, %r9d + 0x41, 0x6b, 0xf9, 0x64, //0x00008a28 imull $100, %r9d, %edi + 0x29, 0xf9, //0x00008a2c subl %edi, %ecx + 0x44, 0x0f, 0xb7, 0xd1, //0x00008a2e movzwl %cx, %r10d + 0x0f, 0xb7, 0xf8, //0x00008a32 movzwl %ax, %edi + 0xc1, 0xef, 0x02, //0x00008a35 shrl $2, %edi + 0x69, 0xff, 0x7b, 0x14, 0x00, 0x00, //0x00008a38 imull $5243, %edi, %edi + 0xc1, 0xef, 0x11, //0x00008a3e shrl $17, %edi + 0x6b, 0xcf, 0x64, //0x00008a41 imull $100, %edi, %ecx + 0x29, 0xc8, //0x00008a44 subl %ecx, %eax + 0x44, 0x0f, 0xb7, 0xd8, //0x00008a46 movzwl %ax, %r11d + 0x48, 0x8d, 0x0d, 0x3f, 0x34, 0x00, 0x00, //0x00008a4a leaq $13375(%rip), %rcx /* _Digits+0(%rip) */ + 0x42, 0x0f, 0xb7, 0x04, 0x51, //0x00008a51 movzwl (%rcx,%r10,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfe, //0x00008a56 movw %ax, $-2(%r8) + 0x42, 0x0f, 0xb7, 0x04, 0x49, //0x00008a5b movzwl (%rcx,%r9,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfc, //0x00008a60 movw %ax, $-4(%r8) + 0x42, 0x0f, 0xb7, 0x04, 0x59, //0x00008a65 movzwl (%rcx,%r11,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfa, //0x00008a6a movw %ax, $-6(%r8) + 0x0f, 0xb7, 0x04, 0x79, //0x00008a6f movzwl (%rcx,%rdi,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xf8, //0x00008a73 movw %ax, $-8(%r8) + 0x45, 0x31, 0xc9, //0x00008a78 xorl %r9d, %r9d + 0xe9, 0x22, 0x00, 0x00, 0x00, //0x00008a7b jmp LBB33_5 + //0x00008a80 LBB33_1 + 0x45, 0x31, 0xc9, //0x00008a80 xorl %r9d, %r9d + 0x4d, 0x89, 0xc6, //0x00008a83 movq %r8, %r14 + 0x48, 0x89, 0xfa, //0x00008a86 movq %rdi, %rdx + 0x81, 0xfa, 0x10, 0x27, 0x00, 0x00, //0x00008a89 cmpl $10000, %edx + 0x0f, 0x83, 0x1d, 0x00, 0x00, 0x00, //0x00008a8f jae LBB33_8 + //0x00008a95 LBB33_7 + 0x89, 0xd7, //0x00008a95 movl %edx, %edi + 0xe9, 0x6c, 0x00, 0x00, 0x00, //0x00008a97 jmp LBB33_10 + //0x00008a9c LBB33_3 + 0x41, 0xb9, 0x08, 0x00, 0x00, 0x00, //0x00008a9c movl $8, %r9d + //0x00008aa2 LBB33_5 + 0x4d, 0x8d, 0x70, 0xf8, //0x00008aa2 leaq $-8(%r8), %r14 + 0x81, 0xfa, 0x10, 0x27, 0x00, 0x00, //0x00008aa6 cmpl $10000, %edx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00008aac jb LBB33_7 + //0x00008ab2 LBB33_8 + 0x41, 0xba, 0x59, 0x17, 0xb7, 0xd1, //0x00008ab2 movl $3518437209, %r10d + 0x4c, 0x8d, 0x1d, 0xd1, 0x33, 0x00, 0x00, //0x00008ab8 leaq $13265(%rip), %r11 /* _Digits+0(%rip) */ + 0x90, //0x00008abf .p2align 4, 0x90 + //0x00008ac0 LBB33_9 + 0x89, 0xd7, //0x00008ac0 movl %edx, %edi + 0x49, 0x0f, 0xaf, 0xfa, //0x00008ac2 imulq %r10, %rdi + 0x48, 0xc1, 0xef, 0x2d, //0x00008ac6 shrq $45, %rdi + 0x69, 0xc7, 0xf0, 0xd8, 0xff, 0xff, //0x00008aca imull $-10000, %edi, %eax + 0x01, 0xd0, //0x00008ad0 addl %edx, %eax + 0x48, 0x69, 0xd8, 0x1f, 0x85, 0xeb, 0x51, //0x00008ad2 imulq $1374389535, %rax, %rbx + 0x48, 0xc1, 0xeb, 0x25, //0x00008ad9 shrq $37, %rbx + 0x6b, 0xcb, 0x64, //0x00008add imull $100, %ebx, %ecx + 0x29, 0xc8, //0x00008ae0 subl %ecx, %eax + 0x41, 0x0f, 0xb7, 0x04, 0x43, //0x00008ae2 movzwl (%r11,%rax,2), %eax + 0x66, 0x41, 0x89, 0x46, 0xfe, //0x00008ae7 movw %ax, $-2(%r14) + 0x41, 0x0f, 0xb7, 0x04, 0x5b, //0x00008aec movzwl (%r11,%rbx,2), %eax + 0x66, 0x41, 0x89, 0x46, 0xfc, //0x00008af1 movw %ax, $-4(%r14) + 0x49, 0x83, 0xc6, 0xfc, //0x00008af6 addq $-4, %r14 + 0x81, 0xfa, 0xff, 0xe0, 0xf5, 0x05, //0x00008afa cmpl $99999999, %edx + 0x89, 0xfa, //0x00008b00 movl %edi, %edx + 0x0f, 0x87, 0xb8, 0xff, 0xff, 0xff, //0x00008b02 ja LBB33_9 + //0x00008b08 LBB33_10 + 0x83, 0xff, 0x64, //0x00008b08 cmpl $100, %edi + 0x0f, 0x83, 0x20, 0x00, 0x00, 0x00, //0x00008b0b jae LBB33_11 + 0x83, 0xff, 0x0a, //0x00008b11 cmpl $10, %edi + 0x0f, 0x82, 0x4d, 0x00, 0x00, 0x00, //0x00008b14 jb LBB33_14 + //0x00008b1a LBB33_13 + 0x89, 0xf8, //0x00008b1a movl %edi, %eax + 0x48, 0x8d, 0x0d, 0x6d, 0x33, 0x00, 0x00, //0x00008b1c leaq $13165(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x00008b23 movzwl (%rcx,%rax,2), %eax + 0x66, 0x41, 0x89, 0x46, 0xfe, //0x00008b27 movw %ax, $-2(%r14) + 0xe9, 0x3d, 0x00, 0x00, 0x00, //0x00008b2c jmp LBB33_15 + //0x00008b31 LBB33_11 + 0x0f, 0xb7, 0xc7, //0x00008b31 movzwl %di, %eax + 0xc1, 0xe8, 0x02, //0x00008b34 shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00008b37 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00008b3d shrl $17, %eax + 0x6b, 0xc8, 0x64, //0x00008b40 imull $100, %eax, %ecx + 0x29, 0xcf, //0x00008b43 subl %ecx, %edi + 0x0f, 0xb7, 0xcf, //0x00008b45 movzwl %di, %ecx + 0x48, 0x8d, 0x15, 0x41, 0x33, 0x00, 0x00, //0x00008b48 leaq $13121(%rip), %rdx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4a, //0x00008b4f movzwl (%rdx,%rcx,2), %ecx + 0x66, 0x41, 0x89, 0x4e, 0xfe, //0x00008b53 movw %cx, $-2(%r14) + 0x49, 0x83, 0xc6, 0xfe, //0x00008b58 addq $-2, %r14 + 0x89, 0xc7, //0x00008b5c movl %eax, %edi + 0x83, 0xff, 0x0a, //0x00008b5e cmpl $10, %edi + 0x0f, 0x83, 0xb3, 0xff, 0xff, 0xff, //0x00008b61 jae LBB33_13 + //0x00008b67 LBB33_14 + 0x40, 0x80, 0xc7, 0x30, //0x00008b67 addb $48, %dil + 0x40, 0x88, 0x3e, //0x00008b6b movb %dil, (%rsi) + //0x00008b6e LBB33_15 + 0x4d, 0x29, 0xc8, //0x00008b6e subq %r9, %r8 + 0x4c, 0x89, 0xc0, //0x00008b71 movq %r8, %rax + 0x5b, //0x00008b74 popq %rbx + 0x41, 0x5e, //0x00008b75 popq %r14 + 0x5d, //0x00008b77 popq %rbp + 0xc3, //0x00008b78 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008b79 .p2align 4, 0x90 + //0x00008b80 _left_shift + 0x55, //0x00008b80 pushq %rbp + 0x48, 0x89, 0xe5, //0x00008b81 movq %rsp, %rbp + 0x41, 0x56, //0x00008b84 pushq %r14 + 0x53, //0x00008b86 pushq %rbx + 0x89, 0xf1, //0x00008b87 movl %esi, %ecx + 0x48, 0x6b, 0xd1, 0x68, //0x00008b89 imulq $104, %rcx, %rdx + 0x48, 0x8d, 0x35, 0xec, 0x8c, 0x00, 0x00, //0x00008b8d leaq $36076(%rip), %rsi /* _LSHIFT_TAB+0(%rip) */ + 0x44, 0x8b, 0x04, 0x32, //0x00008b94 movl (%rdx,%rsi), %r8d + 0x4c, 0x8b, 0x17, //0x00008b98 movq (%rdi), %r10 + 0x4c, 0x63, 0x4f, 0x10, //0x00008b9b movslq $16(%rdi), %r9 + 0x8a, 0x44, 0x32, 0x04, //0x00008b9f movb $4(%rdx,%rsi), %al + 0x4d, 0x85, 0xc9, //0x00008ba3 testq %r9, %r9 + 0x0f, 0x84, 0x36, 0x00, 0x00, 0x00, //0x00008ba6 je LBB34_6 + 0x48, 0x8d, 0x54, 0x32, 0x05, //0x00008bac leaq $5(%rdx,%rsi), %rdx + 0x31, 0xf6, //0x00008bb1 xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008bb3 .p2align 4, 0x90 + //0x00008bc0 LBB34_3 + 0x84, 0xc0, //0x00008bc0 testb %al, %al + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00008bc2 je LBB34_8 + 0x41, 0x38, 0x04, 0x32, //0x00008bc8 cmpb %al, (%r10,%rsi) + 0x0f, 0x85, 0x89, 0x01, 0x00, 0x00, //0x00008bcc jne LBB34_5 + 0x0f, 0xb6, 0x04, 0x32, //0x00008bd2 movzbl (%rdx,%rsi), %eax + 0x48, 0xff, 0xc6, //0x00008bd6 incq %rsi + 0x49, 0x39, 0xf1, //0x00008bd9 cmpq %rsi, %r9 + 0x0f, 0x85, 0xde, 0xff, 0xff, 0xff, //0x00008bdc jne LBB34_3 + //0x00008be2 LBB34_6 + 0x84, 0xc0, //0x00008be2 testb %al, %al + 0x0f, 0x84, 0x03, 0x00, 0x00, 0x00, //0x00008be4 je LBB34_8 + //0x00008bea LBB34_7 + 0x41, 0xff, 0xc8, //0x00008bea decl %r8d + //0x00008bed LBB34_8 + 0x45, 0x85, 0xc9, //0x00008bed testl %r9d, %r9d + 0x0f, 0x8e, 0x8c, 0x00, 0x00, 0x00, //0x00008bf0 jle LBB34_23 + 0x43, 0x8d, 0x04, 0x08, //0x00008bf6 leal (%r8,%r9), %eax + 0x4c, 0x63, 0xf0, //0x00008bfa movslq %eax, %r14 + 0x49, 0xff, 0xce, //0x00008bfd decq %r14 + 0x31, 0xd2, //0x00008c00 xorl %edx, %edx + 0x49, 0xbb, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x00008c02 movabsq $-3689348814741910323, %r11 + 0x90, 0x90, 0x90, 0x90, //0x00008c0c .p2align 4, 0x90 + //0x00008c10 LBB34_10 + 0x4b, 0x0f, 0xbe, 0x74, 0x0a, 0xff, //0x00008c10 movsbq $-1(%r10,%r9), %rsi + 0x48, 0x83, 0xc6, 0xd0, //0x00008c16 addq $-48, %rsi + 0x48, 0xd3, 0xe6, //0x00008c1a shlq %cl, %rsi + 0x48, 0x01, 0xd6, //0x00008c1d addq %rdx, %rsi + 0x48, 0x89, 0xf0, //0x00008c20 movq %rsi, %rax + 0x49, 0xf7, 0xe3, //0x00008c23 mulq %r11 + 0x48, 0xc1, 0xea, 0x03, //0x00008c26 shrq $3, %rdx + 0x48, 0x8d, 0x04, 0x12, //0x00008c2a leaq (%rdx,%rdx), %rax + 0x48, 0x8d, 0x1c, 0x80, //0x00008c2e leaq (%rax,%rax,4), %rbx + 0x48, 0x89, 0xf0, //0x00008c32 movq %rsi, %rax + 0x48, 0x29, 0xd8, //0x00008c35 subq %rbx, %rax + 0x4c, 0x39, 0x77, 0x08, //0x00008c38 cmpq %r14, $8(%rdi) + 0x0f, 0x86, 0x0e, 0x00, 0x00, 0x00, //0x00008c3c jbe LBB34_16 + 0x04, 0x30, //0x00008c42 addb $48, %al + 0x43, 0x88, 0x04, 0x32, //0x00008c44 movb %al, (%r10,%r14) + 0xe9, 0x13, 0x00, 0x00, 0x00, //0x00008c48 jmp LBB34_18 + 0x90, 0x90, 0x90, //0x00008c4d .p2align 4, 0x90 + //0x00008c50 LBB34_16 + 0x48, 0x85, 0xc0, //0x00008c50 testq %rax, %rax + 0x0f, 0x84, 0x07, 0x00, 0x00, 0x00, //0x00008c53 je LBB34_18 + 0xc7, 0x47, 0x1c, 0x01, 0x00, 0x00, 0x00, //0x00008c59 movl $1, $28(%rdi) + //0x00008c60 LBB34_18 + 0x49, 0x83, 0xf9, 0x02, //0x00008c60 cmpq $2, %r9 + 0x0f, 0x8c, 0x0e, 0x00, 0x00, 0x00, //0x00008c64 jl LBB34_12 + 0x49, 0xff, 0xc9, //0x00008c6a decq %r9 + 0x4c, 0x8b, 0x17, //0x00008c6d movq (%rdi), %r10 + 0x49, 0xff, 0xce, //0x00008c70 decq %r14 + 0xe9, 0x98, 0xff, 0xff, 0xff, //0x00008c73 jmp LBB34_10 + //0x00008c78 LBB34_12 + 0x48, 0x83, 0xfe, 0x0a, //0x00008c78 cmpq $10, %rsi + 0x0f, 0x83, 0x6e, 0x00, 0x00, 0x00, //0x00008c7c jae LBB34_13 + //0x00008c82 LBB34_23 + 0x48, 0x63, 0x4f, 0x10, //0x00008c82 movslq $16(%rdi), %rcx + 0x49, 0x63, 0xc0, //0x00008c86 movslq %r8d, %rax + 0x48, 0x01, 0xc8, //0x00008c89 addq %rcx, %rax + 0x89, 0x47, 0x10, //0x00008c8c movl %eax, $16(%rdi) + 0x48, 0x8b, 0x4f, 0x08, //0x00008c8f movq $8(%rdi), %rcx + 0x48, 0x39, 0xc1, //0x00008c93 cmpq %rax, %rcx + 0x0f, 0x87, 0x05, 0x00, 0x00, 0x00, //0x00008c96 ja LBB34_25 + 0x89, 0x4f, 0x10, //0x00008c9c movl %ecx, $16(%rdi) + 0x89, 0xc8, //0x00008c9f movl %ecx, %eax + //0x00008ca1 LBB34_25 + 0x44, 0x01, 0x47, 0x14, //0x00008ca1 addl %r8d, $20(%rdi) + 0x85, 0xc0, //0x00008ca5 testl %eax, %eax + 0x0f, 0x8e, 0x36, 0x00, 0x00, 0x00, //0x00008ca7 jle LBB34_29 + 0x48, 0x8b, 0x0f, //0x00008cad movq (%rdi), %rcx + 0x89, 0xc0, //0x00008cb0 movl %eax, %eax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008cb2 .p2align 4, 0x90 + //0x00008cc0 LBB34_27 + 0x80, 0x7c, 0x01, 0xff, 0x30, //0x00008cc0 cmpb $48, $-1(%rcx,%rax) + 0x0f, 0x85, 0x20, 0x00, 0x00, 0x00, //0x00008cc5 jne LBB34_31 + 0x89, 0xc2, //0x00008ccb movl %eax, %edx + 0x48, 0xff, 0xc8, //0x00008ccd decq %rax + 0xff, 0xca, //0x00008cd0 decl %edx + 0x89, 0x57, 0x10, //0x00008cd2 movl %edx, $16(%rdi) + 0x48, 0x8d, 0x50, 0x01, //0x00008cd5 leaq $1(%rax), %rdx + 0x48, 0x83, 0xfa, 0x01, //0x00008cd9 cmpq $1, %rdx + 0x0f, 0x8f, 0xdd, 0xff, 0xff, 0xff, //0x00008cdd jg LBB34_27 + //0x00008ce3 LBB34_29 + 0x85, 0xc0, //0x00008ce3 testl %eax, %eax + 0x0f, 0x84, 0x64, 0x00, 0x00, 0x00, //0x00008ce5 je LBB34_30 + //0x00008ceb LBB34_31 + 0x5b, //0x00008ceb popq %rbx + 0x41, 0x5e, //0x00008cec popq %r14 + 0x5d, //0x00008cee popq %rbp + 0xc3, //0x00008cef retq + //0x00008cf0 LBB34_13 + 0x49, 0x63, 0xf6, //0x00008cf0 movslq %r14d, %rsi + 0x48, 0xff, 0xce, //0x00008cf3 decq %rsi + 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x00008cf6 jmp LBB34_14 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008cfb .p2align 4, 0x90 + //0x00008d00 LBB34_15 + 0x04, 0x30, //0x00008d00 addb $48, %al + 0x48, 0x8b, 0x1f, //0x00008d02 movq (%rdi), %rbx + 0x88, 0x04, 0x33, //0x00008d05 movb %al, (%rbx,%rsi) + //0x00008d08 LBB34_22 + 0x48, 0xff, 0xce, //0x00008d08 decq %rsi + 0x48, 0x83, 0xf9, 0x09, //0x00008d0b cmpq $9, %rcx + 0x0f, 0x86, 0x6d, 0xff, 0xff, 0xff, //0x00008d0f jbe LBB34_23 + //0x00008d15 LBB34_14 + 0x48, 0x89, 0xd1, //0x00008d15 movq %rdx, %rcx + 0x48, 0x89, 0xd0, //0x00008d18 movq %rdx, %rax + 0x49, 0xf7, 0xe3, //0x00008d1b mulq %r11 + 0x48, 0xc1, 0xea, 0x03, //0x00008d1e shrq $3, %rdx + 0x48, 0x8d, 0x04, 0x12, //0x00008d22 leaq (%rdx,%rdx), %rax + 0x48, 0x8d, 0x1c, 0x80, //0x00008d26 leaq (%rax,%rax,4), %rbx + 0x48, 0x89, 0xc8, //0x00008d2a movq %rcx, %rax + 0x48, 0x29, 0xd8, //0x00008d2d subq %rbx, %rax + 0x48, 0x39, 0x77, 0x08, //0x00008d30 cmpq %rsi, $8(%rdi) + 0x0f, 0x87, 0xc6, 0xff, 0xff, 0xff, //0x00008d34 ja LBB34_15 + 0x48, 0x85, 0xc0, //0x00008d3a testq %rax, %rax + 0x0f, 0x84, 0xc5, 0xff, 0xff, 0xff, //0x00008d3d je LBB34_22 + 0xc7, 0x47, 0x1c, 0x01, 0x00, 0x00, 0x00, //0x00008d43 movl $1, $28(%rdi) + 0xe9, 0xb9, 0xff, 0xff, 0xff, //0x00008d4a jmp LBB34_22 + //0x00008d4f LBB34_30 + 0xc7, 0x47, 0x14, 0x00, 0x00, 0x00, 0x00, //0x00008d4f movl $0, $20(%rdi) + 0x5b, //0x00008d56 popq %rbx + 0x41, 0x5e, //0x00008d57 popq %r14 + 0x5d, //0x00008d59 popq %rbp + 0xc3, //0x00008d5a retq + //0x00008d5b LBB34_5 + 0x0f, 0x8c, 0x89, 0xfe, 0xff, 0xff, //0x00008d5b jl LBB34_7 + 0xe9, 0x87, 0xfe, 0xff, 0xff, //0x00008d61 jmp LBB34_8 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008d66 .p2align 4, 0x90 + //0x00008d70 _right_shift + 0x55, //0x00008d70 pushq %rbp + 0x48, 0x89, 0xe5, //0x00008d71 movq %rsp, %rbp + 0x89, 0xf1, //0x00008d74 movl %esi, %ecx + 0x4c, 0x63, 0x4f, 0x10, //0x00008d76 movslq $16(%rdi), %r9 + 0x31, 0xf6, //0x00008d7a xorl %esi, %esi + 0x31, 0xc0, //0x00008d7c xorl %eax, %eax + 0x90, 0x90, //0x00008d7e .p2align 4, 0x90 + //0x00008d80 LBB35_1 + 0x4c, 0x39, 0xce, //0x00008d80 cmpq %r9, %rsi + 0x0f, 0x8d, 0x27, 0x01, 0x00, 0x00, //0x00008d83 jge LBB35_2 + 0x48, 0x8d, 0x04, 0x80, //0x00008d89 leaq (%rax,%rax,4), %rax + 0x48, 0x8b, 0x17, //0x00008d8d movq (%rdi), %rdx + 0x48, 0x0f, 0xbe, 0x14, 0x32, //0x00008d90 movsbq (%rdx,%rsi), %rdx + 0x48, 0x8d, 0x44, 0x42, 0xd0, //0x00008d95 leaq $-48(%rdx,%rax,2), %rax + 0x48, 0xff, 0xc6, //0x00008d9a incq %rsi + 0x48, 0x89, 0xc2, //0x00008d9d movq %rax, %rdx + 0x48, 0xd3, 0xea, //0x00008da0 shrq %cl, %rdx + 0x48, 0x85, 0xd2, //0x00008da3 testq %rdx, %rdx + 0x0f, 0x84, 0xd4, 0xff, 0xff, 0xff, //0x00008da6 je LBB35_1 + //0x00008dac LBB35_6 + 0x8b, 0x57, 0x14, //0x00008dac movl $20(%rdi), %edx + 0x29, 0xf2, //0x00008daf subl %esi, %edx + 0xff, 0xc2, //0x00008db1 incl %edx + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00008db3 movq $-1, %r8 + 0x49, 0xd3, 0xe0, //0x00008dba shlq %cl, %r8 + 0x89, 0x57, 0x14, //0x00008dbd movl %edx, $20(%rdi) + 0x49, 0xf7, 0xd0, //0x00008dc0 notq %r8 + 0x45, 0x31, 0xd2, //0x00008dc3 xorl %r10d, %r10d + 0x44, 0x39, 0xce, //0x00008dc6 cmpl %r9d, %esi + 0x0f, 0x8d, 0x69, 0x00, 0x00, 0x00, //0x00008dc9 jge LBB35_9 + 0x4c, 0x63, 0xce, //0x00008dcf movslq %esi, %r9 + 0x48, 0x8b, 0x37, //0x00008dd2 movq (%rdi), %rsi + 0x45, 0x31, 0xd2, //0x00008dd5 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008dd8 .p2align 4, 0x90 + //0x00008de0 LBB35_8 + 0x48, 0x89, 0xc2, //0x00008de0 movq %rax, %rdx + 0x48, 0xd3, 0xea, //0x00008de3 shrq %cl, %rdx + 0x4c, 0x21, 0xc0, //0x00008de6 andq %r8, %rax + 0x80, 0xc2, 0x30, //0x00008de9 addb $48, %dl + 0x42, 0x88, 0x14, 0x16, //0x00008dec movb %dl, (%rsi,%r10) + 0x48, 0x8d, 0x04, 0x80, //0x00008df0 leaq (%rax,%rax,4), %rax + 0x48, 0x8b, 0x37, //0x00008df4 movq (%rdi), %rsi + 0x4a, 0x8d, 0x14, 0x0e, //0x00008df7 leaq (%rsi,%r9), %rdx + 0x49, 0x0f, 0xbe, 0x14, 0x12, //0x00008dfb movsbq (%r10,%rdx), %rdx + 0x48, 0x8d, 0x44, 0x42, 0xd0, //0x00008e00 leaq $-48(%rdx,%rax,2), %rax + 0x4c, 0x63, 0x5f, 0x10, //0x00008e05 movslq $16(%rdi), %r11 + 0x4b, 0x8d, 0x54, 0x11, 0x01, //0x00008e09 leaq $1(%r9,%r10), %rdx + 0x49, 0xff, 0xc2, //0x00008e0e incq %r10 + 0x4c, 0x39, 0xda, //0x00008e11 cmpq %r11, %rdx + 0x0f, 0x8c, 0xc6, 0xff, 0xff, 0xff, //0x00008e14 jl LBB35_8 + 0xe9, 0x19, 0x00, 0x00, 0x00, //0x00008e1a jmp LBB35_9 + 0x90, //0x00008e1f .p2align 4, 0x90 + //0x00008e20 LBB35_11 + 0x40, 0x80, 0xc6, 0x30, //0x00008e20 addb $48, %sil + 0x48, 0x8b, 0x17, //0x00008e24 movq (%rdi), %rdx + 0x42, 0x88, 0x34, 0x0a, //0x00008e27 movb %sil, (%rdx,%r9) + 0x41, 0xff, 0xc1, //0x00008e2b incl %r9d + 0x45, 0x89, 0xca, //0x00008e2e movl %r9d, %r10d + //0x00008e31 LBB35_14 + 0x48, 0x01, 0xc0, //0x00008e31 addq %rax, %rax + 0x48, 0x8d, 0x04, 0x80, //0x00008e34 leaq (%rax,%rax,4), %rax + //0x00008e38 LBB35_9 + 0x48, 0x85, 0xc0, //0x00008e38 testq %rax, %rax + 0x0f, 0x84, 0x2b, 0x00, 0x00, 0x00, //0x00008e3b je LBB35_15 + 0x48, 0x89, 0xc6, //0x00008e41 movq %rax, %rsi + 0x48, 0xd3, 0xee, //0x00008e44 shrq %cl, %rsi + 0x4c, 0x21, 0xc0, //0x00008e47 andq %r8, %rax + 0x4d, 0x63, 0xca, //0x00008e4a movslq %r10d, %r9 + 0x4c, 0x39, 0x4f, 0x08, //0x00008e4d cmpq %r9, $8(%rdi) + 0x0f, 0x87, 0xc9, 0xff, 0xff, 0xff, //0x00008e51 ja LBB35_11 + 0x48, 0x85, 0xf6, //0x00008e57 testq %rsi, %rsi + 0x0f, 0x84, 0xd1, 0xff, 0xff, 0xff, //0x00008e5a je LBB35_14 + 0xc7, 0x47, 0x1c, 0x01, 0x00, 0x00, 0x00, //0x00008e60 movl $1, $28(%rdi) + 0xe9, 0xc5, 0xff, 0xff, 0xff, //0x00008e67 jmp LBB35_14 + //0x00008e6c LBB35_15 + 0x44, 0x89, 0x57, 0x10, //0x00008e6c movl %r10d, $16(%rdi) + 0x45, 0x85, 0xd2, //0x00008e70 testl %r10d, %r10d + 0x0f, 0x8e, 0x2c, 0x00, 0x00, 0x00, //0x00008e73 jle LBB35_19 + 0x48, 0x8b, 0x07, //0x00008e79 movq (%rdi), %rax + 0x45, 0x89, 0xd2, //0x00008e7c movl %r10d, %r10d + 0x90, //0x00008e7f .p2align 4, 0x90 + //0x00008e80 LBB35_17 + 0x42, 0x80, 0x7c, 0x10, 0xff, 0x30, //0x00008e80 cmpb $48, $-1(%rax,%r10) + 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00008e86 jne LBB35_21 + 0x44, 0x89, 0xd1, //0x00008e8c movl %r10d, %ecx + 0x49, 0xff, 0xca, //0x00008e8f decq %r10 + 0xff, 0xc9, //0x00008e92 decl %ecx + 0x89, 0x4f, 0x10, //0x00008e94 movl %ecx, $16(%rdi) + 0x49, 0x8d, 0x4a, 0x01, //0x00008e97 leaq $1(%r10), %rcx + 0x48, 0x83, 0xf9, 0x01, //0x00008e9b cmpq $1, %rcx + 0x0f, 0x8f, 0xdb, 0xff, 0xff, 0xff, //0x00008e9f jg LBB35_17 + //0x00008ea5 LBB35_19 + 0x45, 0x85, 0xd2, //0x00008ea5 testl %r10d, %r10d + 0x0f, 0x84, 0x3e, 0x00, 0x00, 0x00, //0x00008ea8 je LBB35_20 + //0x00008eae LBB35_21 + 0x5d, //0x00008eae popq %rbp + 0xc3, //0x00008eaf retq + //0x00008eb0 LBB35_2 + 0x48, 0x85, 0xc0, //0x00008eb0 testq %rax, %rax + 0x0f, 0x84, 0x3c, 0x00, 0x00, 0x00, //0x00008eb3 je LBB35_22 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008eb9 .p2align 4, 0x90 + 0x48, 0x89, 0xc2, //0x00008ec0 movq %rax, %rdx + 0x48, 0xd3, 0xea, //0x00008ec3 shrq %cl, %rdx + 0x48, 0x85, 0xd2, //0x00008ec6 testq %rdx, %rdx + 0x0f, 0x85, 0xdd, 0xfe, 0xff, 0xff, //0x00008ec9 jne LBB35_6 + //0x00008ecf LBB35_4 + 0x48, 0x01, 0xc0, //0x00008ecf addq %rax, %rax + 0x48, 0x8d, 0x04, 0x80, //0x00008ed2 leaq (%rax,%rax,4), %rax + 0xff, 0xc6, //0x00008ed6 incl %esi + 0x48, 0x89, 0xc2, //0x00008ed8 movq %rax, %rdx + 0x48, 0xd3, 0xea, //0x00008edb shrq %cl, %rdx + 0x48, 0x85, 0xd2, //0x00008ede testq %rdx, %rdx + 0x0f, 0x84, 0xe8, 0xff, 0xff, 0xff, //0x00008ee1 je LBB35_4 + 0xe9, 0xc0, 0xfe, 0xff, 0xff, //0x00008ee7 jmp LBB35_6 + //0x00008eec LBB35_20 + 0xc7, 0x47, 0x14, 0x00, 0x00, 0x00, 0x00, //0x00008eec movl $0, $20(%rdi) + 0x5d, //0x00008ef3 popq %rbp + 0xc3, //0x00008ef4 retq + //0x00008ef5 LBB35_22 + 0xc7, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, //0x00008ef5 movl $0, $16(%rdi) + 0x5d, //0x00008efc popq %rbp + 0xc3, //0x00008efd retq + 0x00, 0x00, //0x00008efe .p2align 4, 0x00 + //0x00008f00 LCPI36_0 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x00008f00 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x00008f10 LCPI36_1 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x00008f10 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x00008f20 .p2align 4, 0x90 + //0x00008f20 _advance_string_default + 0x55, //0x00008f20 pushq %rbp + 0x48, 0x89, 0xe5, //0x00008f21 movq %rsp, %rbp + 0x41, 0x57, //0x00008f24 pushq %r15 + 0x41, 0x56, //0x00008f26 pushq %r14 + 0x41, 0x55, //0x00008f28 pushq %r13 + 0x41, 0x54, //0x00008f2a pushq %r12 + 0x53, //0x00008f2c pushq %rbx + 0x48, 0x83, 0xec, 0x10, //0x00008f2d subq $16, %rsp + 0x4c, 0x8b, 0x67, 0x08, //0x00008f31 movq $8(%rdi), %r12 + 0x49, 0x29, 0xf4, //0x00008f35 subq %rsi, %r12 + 0x0f, 0x84, 0x79, 0x03, 0x00, 0x00, //0x00008f38 je LBB36_17 + 0x48, 0x8b, 0x07, //0x00008f3e movq (%rdi), %rax + 0x48, 0x89, 0x45, 0xd0, //0x00008f41 movq %rax, $-48(%rbp) + 0x48, 0x01, 0xc6, //0x00008f45 addq %rax, %rsi + 0x48, 0x89, 0x55, 0xc8, //0x00008f48 movq %rdx, $-56(%rbp) + 0x48, 0xc7, 0x02, 0xff, 0xff, 0xff, 0xff, //0x00008f4c movq $-1, (%rdx) + 0x49, 0x83, 0xfc, 0x40, //0x00008f53 cmpq $64, %r12 + 0x0f, 0x82, 0xfa, 0x01, 0x00, 0x00, //0x00008f57 jb LBB36_18 + 0x45, 0x89, 0xe1, //0x00008f5d movl %r12d, %r9d + 0x41, 0x83, 0xe1, 0x3f, //0x00008f60 andl $63, %r9d + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00008f64 movq $-1, %r14 + 0x45, 0x31, 0xff, //0x00008f6b xorl %r15d, %r15d + 0xc5, 0xf9, 0x6f, 0x05, 0x8a, 0xff, 0xff, 0xff, //0x00008f6e vmovdqa $-118(%rip), %xmm0 /* LCPI36_0+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0x92, 0xff, 0xff, 0xff, //0x00008f76 vmovdqa $-110(%rip), %xmm1 /* LCPI36_1+0(%rip) */ + 0x48, 0x8b, 0x55, 0xd0, //0x00008f7e movq $-48(%rbp), %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008f82 .p2align 4, 0x90 + //0x00008f90 LBB36_3 + 0xc5, 0xfa, 0x6f, 0x16, //0x00008f90 vmovdqu (%rsi), %xmm2 + 0xc5, 0xfa, 0x6f, 0x5e, 0x10, //0x00008f94 vmovdqu $16(%rsi), %xmm3 + 0xc5, 0xfa, 0x6f, 0x66, 0x20, //0x00008f99 vmovdqu $32(%rsi), %xmm4 + 0xc5, 0xfa, 0x6f, 0x6e, 0x30, //0x00008f9e vmovdqu $48(%rsi), %xmm5 + 0xc5, 0xe9, 0x74, 0xf0, //0x00008fa3 vpcmpeqb %xmm0, %xmm2, %xmm6 + 0xc5, 0xf9, 0xd7, 0xde, //0x00008fa7 vpmovmskb %xmm6, %ebx + 0xc5, 0xe1, 0x74, 0xf0, //0x00008fab vpcmpeqb %xmm0, %xmm3, %xmm6 + 0xc5, 0xf9, 0xd7, 0xce, //0x00008faf vpmovmskb %xmm6, %ecx + 0xc5, 0xd9, 0x74, 0xf0, //0x00008fb3 vpcmpeqb %xmm0, %xmm4, %xmm6 + 0xc5, 0xf9, 0xd7, 0xc6, //0x00008fb7 vpmovmskb %xmm6, %eax + 0xc5, 0xd1, 0x74, 0xf0, //0x00008fbb vpcmpeqb %xmm0, %xmm5, %xmm6 + 0xc5, 0x79, 0xd7, 0xee, //0x00008fbf vpmovmskb %xmm6, %r13d + 0xc5, 0xe9, 0x74, 0xd1, //0x00008fc3 vpcmpeqb %xmm1, %xmm2, %xmm2 + 0xc5, 0xf9, 0xd7, 0xfa, //0x00008fc7 vpmovmskb %xmm2, %edi + 0xc5, 0xe1, 0x74, 0xd1, //0x00008fcb vpcmpeqb %xmm1, %xmm3, %xmm2 + 0xc5, 0x79, 0xd7, 0xd2, //0x00008fcf vpmovmskb %xmm2, %r10d + 0xc5, 0xd9, 0x74, 0xd1, //0x00008fd3 vpcmpeqb %xmm1, %xmm4, %xmm2 + 0xc5, 0x79, 0xd7, 0xda, //0x00008fd7 vpmovmskb %xmm2, %r11d + 0xc5, 0xd1, 0x74, 0xd1, //0x00008fdb vpcmpeqb %xmm1, %xmm5, %xmm2 + 0xc5, 0x79, 0xd7, 0xc2, //0x00008fdf vpmovmskb %xmm2, %r8d + 0x49, 0xc1, 0xe5, 0x30, //0x00008fe3 shlq $48, %r13 + 0x48, 0xc1, 0xe0, 0x20, //0x00008fe7 shlq $32, %rax + 0x48, 0xc1, 0xe1, 0x10, //0x00008feb shlq $16, %rcx + 0x48, 0x09, 0xcb, //0x00008fef orq %rcx, %rbx + 0x48, 0x09, 0xc3, //0x00008ff2 orq %rax, %rbx + 0x49, 0xc1, 0xe0, 0x30, //0x00008ff5 shlq $48, %r8 + 0x49, 0xc1, 0xe3, 0x20, //0x00008ff9 shlq $32, %r11 + 0x49, 0xc1, 0xe2, 0x10, //0x00008ffd shlq $16, %r10 + 0x4c, 0x09, 0xd7, //0x00009001 orq %r10, %rdi + 0x4c, 0x09, 0xdf, //0x00009004 orq %r11, %rdi + 0x4c, 0x09, 0xc7, //0x00009007 orq %r8, %rdi + 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x0000900a je LBB36_5 + 0x49, 0x83, 0xfe, 0xff, //0x00009010 cmpq $-1, %r14 + 0x0f, 0x84, 0x2f, 0x00, 0x00, 0x00, //0x00009014 je LBB36_8 + //0x0000901a LBB36_5 + 0x4c, 0x09, 0xeb, //0x0000901a orq %r13, %rbx + 0x48, 0x89, 0xf8, //0x0000901d movq %rdi, %rax + 0x4c, 0x09, 0xf8, //0x00009020 orq %r15, %rax + 0x0f, 0x85, 0x43, 0x00, 0x00, 0x00, //0x00009023 jne LBB36_9 + //0x00009029 LBB36_6 + 0x48, 0x85, 0xdb, //0x00009029 testq %rbx, %rbx + 0x0f, 0x85, 0x0a, 0x01, 0x00, 0x00, //0x0000902c jne LBB36_15 + //0x00009032 LBB36_7 + 0x48, 0x83, 0xc6, 0x40, //0x00009032 addq $64, %rsi + 0x49, 0x83, 0xc4, 0xc0, //0x00009036 addq $-64, %r12 + 0x49, 0x83, 0xfc, 0x3f, //0x0000903a cmpq $63, %r12 + 0x0f, 0x87, 0x4c, 0xff, 0xff, 0xff, //0x0000903e ja LBB36_3 + 0xe9, 0x7a, 0x00, 0x00, 0x00, //0x00009044 jmp LBB36_10 + //0x00009049 LBB36_8 + 0x48, 0x89, 0xf0, //0x00009049 movq %rsi, %rax + 0x48, 0x29, 0xd0, //0x0000904c subq %rdx, %rax + 0x4c, 0x0f, 0xbc, 0xf7, //0x0000904f bsfq %rdi, %r14 + 0x49, 0x01, 0xc6, //0x00009053 addq %rax, %r14 + 0x48, 0x8b, 0x45, 0xc8, //0x00009056 movq $-56(%rbp), %rax + 0x4c, 0x89, 0x30, //0x0000905a movq %r14, (%rax) + 0x4c, 0x09, 0xeb, //0x0000905d orq %r13, %rbx + 0x48, 0x89, 0xf8, //0x00009060 movq %rdi, %rax + 0x4c, 0x09, 0xf8, //0x00009063 orq %r15, %rax + 0x0f, 0x84, 0xbd, 0xff, 0xff, 0xff, //0x00009066 je LBB36_6 + //0x0000906c LBB36_9 + 0x4c, 0x89, 0xf8, //0x0000906c movq %r15, %rax + 0x48, 0xf7, 0xd0, //0x0000906f notq %rax + 0x48, 0x21, 0xf8, //0x00009072 andq %rdi, %rax + 0x4c, 0x8d, 0x04, 0x00, //0x00009075 leaq (%rax,%rax), %r8 + 0x4d, 0x09, 0xf8, //0x00009079 orq %r15, %r8 + 0x4c, 0x89, 0xc1, //0x0000907c movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x0000907f notq %rcx + 0x48, 0x21, 0xf9, //0x00009082 andq %rdi, %rcx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00009085 movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xf9, //0x0000908f andq %rdi, %rcx + 0x45, 0x31, 0xff, //0x00009092 xorl %r15d, %r15d + 0x48, 0x01, 0xc1, //0x00009095 addq %rax, %rcx + 0x41, 0x0f, 0x92, 0xc7, //0x00009098 setb %r15b + 0x48, 0x01, 0xc9, //0x0000909c addq %rcx, %rcx + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000909f movabsq $6148914691236517205, %rax + 0x48, 0x31, 0xc1, //0x000090a9 xorq %rax, %rcx + 0x4c, 0x21, 0xc1, //0x000090ac andq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x000090af notq %rcx + 0x48, 0x21, 0xcb, //0x000090b2 andq %rcx, %rbx + 0x48, 0x85, 0xdb, //0x000090b5 testq %rbx, %rbx + 0x0f, 0x84, 0x74, 0xff, 0xff, 0xff, //0x000090b8 je LBB36_7 + 0xe9, 0x79, 0x00, 0x00, 0x00, //0x000090be jmp LBB36_15 + //0x000090c3 LBB36_10 + 0x4d, 0x89, 0xcc, //0x000090c3 movq %r9, %r12 + 0x49, 0x83, 0xfc, 0x20, //0x000090c6 cmpq $32, %r12 + 0x0f, 0x82, 0x0b, 0x01, 0x00, 0x00, //0x000090ca jb LBB36_22 + //0x000090d0 LBB36_11 + 0xc5, 0xfa, 0x6f, 0x06, //0x000090d0 vmovdqu (%rsi), %xmm0 + 0xc5, 0xfa, 0x6f, 0x4e, 0x10, //0x000090d4 vmovdqu $16(%rsi), %xmm1 + 0xc5, 0xf9, 0x6f, 0x15, 0x1f, 0xfe, 0xff, 0xff, //0x000090d9 vmovdqa $-481(%rip), %xmm2 /* LCPI36_0+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x1d, 0x27, 0xfe, 0xff, 0xff, //0x000090e1 vmovdqa $-473(%rip), %xmm3 /* LCPI36_1+0(%rip) */ + 0xc5, 0xf9, 0x74, 0xe2, //0x000090e9 vpcmpeqb %xmm2, %xmm0, %xmm4 + 0xc5, 0xf9, 0xd7, 0xfc, //0x000090ed vpmovmskb %xmm4, %edi + 0xc5, 0xf1, 0x74, 0xd2, //0x000090f1 vpcmpeqb %xmm2, %xmm1, %xmm2 + 0xc5, 0xf9, 0xd7, 0xda, //0x000090f5 vpmovmskb %xmm2, %ebx + 0xc5, 0xf9, 0x74, 0xc3, //0x000090f9 vpcmpeqb %xmm3, %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc0, //0x000090fd vpmovmskb %xmm0, %eax + 0xc5, 0xf1, 0x74, 0xc3, //0x00009101 vpcmpeqb %xmm3, %xmm1, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00009105 vpmovmskb %xmm0, %ecx + 0x48, 0xc1, 0xe3, 0x10, //0x00009109 shlq $16, %rbx + 0x48, 0xc1, 0xe1, 0x10, //0x0000910d shlq $16, %rcx + 0x48, 0x09, 0xc8, //0x00009111 orq %rcx, %rax + 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00009114 je LBB36_13 + 0x49, 0x83, 0xfe, 0xff, //0x0000911a cmpq $-1, %r14 + 0x0f, 0x84, 0x50, 0x00, 0x00, 0x00, //0x0000911e je LBB36_19 + //0x00009124 LBB36_13 + 0x48, 0x09, 0xfb, //0x00009124 orq %rdi, %rbx + 0x48, 0x89, 0xc1, //0x00009127 movq %rax, %rcx + 0x4c, 0x09, 0xf9, //0x0000912a orq %r15, %rcx + 0x0f, 0x85, 0x64, 0x00, 0x00, 0x00, //0x0000912d jne LBB36_20 + //0x00009133 LBB36_14 + 0x48, 0x85, 0xdb, //0x00009133 testq %rbx, %rbx + 0x0f, 0x84, 0x97, 0x00, 0x00, 0x00, //0x00009136 je LBB36_21 + //0x0000913c LBB36_15 + 0x48, 0x0f, 0xbc, 0xc3, //0x0000913c bsfq %rbx, %rax + 0x48, 0x29, 0xd6, //0x00009140 subq %rdx, %rsi + 0x48, 0x8d, 0x44, 0x06, 0x01, //0x00009143 leaq $1(%rsi,%rax), %rax + //0x00009148 LBB36_16 + 0x48, 0x83, 0xc4, 0x10, //0x00009148 addq $16, %rsp + 0x5b, //0x0000914c popq %rbx + 0x41, 0x5c, //0x0000914d popq %r12 + 0x41, 0x5d, //0x0000914f popq %r13 + 0x41, 0x5e, //0x00009151 popq %r14 + 0x41, 0x5f, //0x00009153 popq %r15 + 0x5d, //0x00009155 popq %rbp + 0xc3, //0x00009156 retq + //0x00009157 LBB36_18 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00009157 movq $-1, %r14 + 0x45, 0x31, 0xff, //0x0000915e xorl %r15d, %r15d + 0x48, 0x8b, 0x55, 0xd0, //0x00009161 movq $-48(%rbp), %rdx + 0x49, 0x83, 0xfc, 0x20, //0x00009165 cmpq $32, %r12 + 0x0f, 0x83, 0x61, 0xff, 0xff, 0xff, //0x00009169 jae LBB36_11 + 0xe9, 0x67, 0x00, 0x00, 0x00, //0x0000916f jmp LBB36_22 + //0x00009174 LBB36_19 + 0x48, 0x89, 0xf1, //0x00009174 movq %rsi, %rcx + 0x48, 0x29, 0xd1, //0x00009177 subq %rdx, %rcx + 0x4c, 0x0f, 0xbc, 0xf0, //0x0000917a bsfq %rax, %r14 + 0x49, 0x01, 0xce, //0x0000917e addq %rcx, %r14 + 0x48, 0x8b, 0x4d, 0xc8, //0x00009181 movq $-56(%rbp), %rcx + 0x4c, 0x89, 0x31, //0x00009185 movq %r14, (%rcx) + 0x48, 0x09, 0xfb, //0x00009188 orq %rdi, %rbx + 0x48, 0x89, 0xc1, //0x0000918b movq %rax, %rcx + 0x4c, 0x09, 0xf9, //0x0000918e orq %r15, %rcx + 0x0f, 0x84, 0x9c, 0xff, 0xff, 0xff, //0x00009191 je LBB36_14 + //0x00009197 LBB36_20 + 0x44, 0x89, 0xf9, //0x00009197 movl %r15d, %ecx + 0xf7, 0xd1, //0x0000919a notl %ecx + 0x21, 0xc1, //0x0000919c andl %eax, %ecx + 0x44, 0x8d, 0x04, 0x09, //0x0000919e leal (%rcx,%rcx), %r8d + 0x45, 0x09, 0xf8, //0x000091a2 orl %r15d, %r8d + 0x44, 0x89, 0xc7, //0x000091a5 movl %r8d, %edi + 0xf7, 0xd7, //0x000091a8 notl %edi + 0x21, 0xc7, //0x000091aa andl %eax, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x000091ac andl $-1431655766, %edi + 0x45, 0x31, 0xff, //0x000091b2 xorl %r15d, %r15d + 0x01, 0xcf, //0x000091b5 addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc7, //0x000091b7 setb %r15b + 0x01, 0xff, //0x000091bb addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x000091bd xorl $1431655765, %edi + 0x44, 0x21, 0xc7, //0x000091c3 andl %r8d, %edi + 0xf7, 0xd7, //0x000091c6 notl %edi + 0x21, 0xfb, //0x000091c8 andl %edi, %ebx + 0x48, 0x85, 0xdb, //0x000091ca testq %rbx, %rbx + 0x0f, 0x85, 0x69, 0xff, 0xff, 0xff, //0x000091cd jne LBB36_15 + //0x000091d3 LBB36_21 + 0x48, 0x83, 0xc6, 0x20, //0x000091d3 addq $32, %rsi + 0x49, 0x83, 0xc4, 0xe0, //0x000091d7 addq $-32, %r12 + //0x000091db LBB36_22 + 0x4d, 0x85, 0xff, //0x000091db testq %r15, %r15 + 0x0f, 0x85, 0x90, 0x00, 0x00, 0x00, //0x000091de jne LBB36_33 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000091e4 movq $-1, %rax + 0x4d, 0x85, 0xe4, //0x000091eb testq %r12, %r12 + 0x0f, 0x84, 0x54, 0xff, 0xff, 0xff, //0x000091ee je LBB36_16 + //0x000091f4 LBB36_24 + 0x49, 0x89, 0xd1, //0x000091f4 movq %rdx, %r9 + 0x49, 0xf7, 0xd1, //0x000091f7 notq %r9 + 0x48, 0x8b, 0x4d, 0xc8, //0x000091fa movq $-56(%rbp), %rcx + //0x000091fe LBB36_25 + 0x48, 0x8d, 0x7e, 0x01, //0x000091fe leaq $1(%rsi), %rdi + 0x0f, 0xb6, 0x1e, //0x00009202 movzbl (%rsi), %ebx + 0x80, 0xfb, 0x22, //0x00009205 cmpb $34, %bl + 0x0f, 0x84, 0x5b, 0x00, 0x00, 0x00, //0x00009208 je LBB36_32 + 0x4d, 0x8d, 0x54, 0x24, 0xff, //0x0000920e leaq $-1(%r12), %r10 + 0x80, 0xfb, 0x5c, //0x00009213 cmpb $92, %bl + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00009216 je LBB36_28 + 0x4d, 0x89, 0xd4, //0x0000921c movq %r10, %r12 + 0x48, 0x89, 0xfe, //0x0000921f movq %rdi, %rsi + 0x4d, 0x85, 0xd2, //0x00009222 testq %r10, %r10 + 0x0f, 0x85, 0xd3, 0xff, 0xff, 0xff, //0x00009225 jne LBB36_25 + 0xe9, 0x18, 0xff, 0xff, 0xff, //0x0000922b jmp LBB36_16 + //0x00009230 LBB36_28 + 0x4d, 0x85, 0xd2, //0x00009230 testq %r10, %r10 + 0x0f, 0x84, 0x0f, 0xff, 0xff, 0xff, //0x00009233 je LBB36_16 + 0x49, 0x83, 0xfe, 0xff, //0x00009239 cmpq $-1, %r14 + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x0000923d jne LBB36_31 + 0x4c, 0x01, 0xcf, //0x00009243 addq %r9, %rdi + 0x48, 0x89, 0x39, //0x00009246 movq %rdi, (%rcx) + 0x49, 0x89, 0xfe, //0x00009249 movq %rdi, %r14 + //0x0000924c LBB36_31 + 0x48, 0x83, 0xc6, 0x02, //0x0000924c addq $2, %rsi + 0x49, 0x83, 0xc4, 0xfe, //0x00009250 addq $-2, %r12 + 0x4d, 0x89, 0xe2, //0x00009254 movq %r12, %r10 + 0x48, 0x8b, 0x55, 0xd0, //0x00009257 movq $-48(%rbp), %rdx + 0x4d, 0x85, 0xd2, //0x0000925b testq %r10, %r10 + 0x0f, 0x85, 0x9a, 0xff, 0xff, 0xff, //0x0000925e jne LBB36_25 + 0xe9, 0xdf, 0xfe, 0xff, 0xff, //0x00009264 jmp LBB36_16 + //0x00009269 LBB36_32 + 0x48, 0x29, 0xd7, //0x00009269 subq %rdx, %rdi + 0x48, 0x89, 0xf8, //0x0000926c movq %rdi, %rax + 0xe9, 0xd4, 0xfe, 0xff, 0xff, //0x0000926f jmp LBB36_16 + //0x00009274 LBB36_33 + 0x4d, 0x85, 0xe4, //0x00009274 testq %r12, %r12 + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00009277 je LBB36_17 + 0x49, 0x83, 0xfe, 0xff, //0x0000927d cmpq $-1, %r14 + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x00009281 jne LBB36_36 + 0x4c, 0x8b, 0x75, 0xd0, //0x00009287 movq $-48(%rbp), %r14 + 0x49, 0xf7, 0xd6, //0x0000928b notq %r14 + 0x49, 0x01, 0xf6, //0x0000928e addq %rsi, %r14 + 0x48, 0x8b, 0x45, 0xc8, //0x00009291 movq $-56(%rbp), %rax + 0x4c, 0x89, 0x30, //0x00009295 movq %r14, (%rax) + //0x00009298 LBB36_36 + 0x48, 0xff, 0xc6, //0x00009298 incq %rsi + 0x49, 0xff, 0xcc, //0x0000929b decq %r12 + 0x48, 0x8b, 0x55, 0xd0, //0x0000929e movq $-48(%rbp), %rdx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000092a2 movq $-1, %rax + 0x4d, 0x85, 0xe4, //0x000092a9 testq %r12, %r12 + 0x0f, 0x85, 0x42, 0xff, 0xff, 0xff, //0x000092ac jne LBB36_24 + 0xe9, 0x91, 0xfe, 0xff, 0xff, //0x000092b2 jmp LBB36_16 + //0x000092b7 LBB36_17 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000092b7 movq $-1, %rax + 0xe9, 0x85, 0xfe, 0xff, 0xff, //0x000092be jmp LBB36_16 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000092c3 .p2align 4, 0x00 + //0x000092d0 _POW10_M128_TAB + 0x53, 0xe4, 0x60, 0xcd, 0x69, 0xc8, 0x32, 0x17, //0x000092d0 .quad 1671618768450675795 + 0x88, 0x02, 0x1c, 0x08, 0xa0, 0xd5, 0x8f, 0xfa, //0x000092d8 .quad -391859759250406776 + 0xb4, 0x8e, 0x5c, 0x20, 0x42, 0xbd, 0x7f, 0x0e, //0x000092e0 .quad 1044761730281672372 + 0x95, 0x81, 0x11, 0x05, 0x84, 0xe5, 0x99, 0x9c, //0x000092e8 .quad -7162441377172586091 + 0x61, 0xb2, 0x73, 0xa8, 0x92, 0xac, 0x1f, 0x52, //0x000092f0 .quad 5917638181279478369 + 0xfa, 0xe1, 0x55, 0x06, 0xe5, 0x5e, 0xc0, 0xc3, //0x000092f8 .quad -4341365703038344710 + 0xf9, 0x9e, 0x90, 0x52, 0xb7, 0x97, 0xa7, 0xe6, //0x00009300 .quad -1826324310255427847 + 0x78, 0x5a, 0xeb, 0x47, 0x9e, 0x76, 0xb0, 0xf4, //0x00009308 .quad -815021110370542984 + 0x5c, 0x63, 0x9a, 0x93, 0xd2, 0xbe, 0x28, 0x90, //0x00009310 .quad -8058981721550724260 + 0x8b, 0x18, 0xf3, 0xec, 0x22, 0x4a, 0xee, 0x98, //0x00009318 .quad -7426917221622671221 + 0x33, 0xfc, 0x80, 0x38, 0x87, 0xee, 0x32, 0x74, //0x00009320 .quad 8373016921771146291 + 0xae, 0xde, 0x2f, 0xa8, 0xab, 0xdc, 0x29, 0xbf, //0x00009328 .quad -4671960508600951122 + 0x3f, 0x3b, 0xa1, 0x06, 0x29, 0xaa, 0x3f, 0x11, //0x00009330 .quad 1242899115359157055 + 0x5a, 0xd6, 0x3b, 0x92, 0xd6, 0x53, 0xf4, 0xee, //0x00009338 .quad -1228264617323800998 + 0x07, 0xc5, 0x24, 0xa4, 0x59, 0xca, 0xc7, 0x4a, //0x00009340 .quad 5388497965526861063 + 0xf8, 0x65, 0x65, 0x1b, 0x66, 0xb4, 0x58, 0x95, //0x00009348 .quad -7685194413468457480 + 0x49, 0xf6, 0x2d, 0x0d, 0xf0, 0xbc, 0x79, 0x5d, //0x00009350 .quad 6735622456908576329 + 0x76, 0xbf, 0x3e, 0xa2, 0x7f, 0xe1, 0xae, 0xba, //0x00009358 .quad -4994806998408183946 + 0xdc, 0x73, 0x79, 0x10, 0x2c, 0x2c, 0xd8, 0xf4, //0x00009360 .quad -803843965719055396 + 0x53, 0x6f, 0xce, 0x8a, 0xdf, 0x99, 0x5a, 0xe9, //0x00009368 .quad -1631822729582842029 + 0x69, 0xe8, 0x4b, 0x8a, 0x9b, 0x1b, 0x07, 0x79, //0x00009370 .quad 8720969558280366185 + 0x94, 0x05, 0xc1, 0xb6, 0x2b, 0xa0, 0xd8, 0x91, //0x00009378 .quad -7937418233630358124 + 0x84, 0xe2, 0xde, 0x6c, 0x82, 0xe2, 0x48, 0x97, //0x00009380 .quad -7545532125859093884 + 0xf9, 0x46, 0x71, 0xa4, 0x36, 0xc8, 0x4e, 0xb6, //0x00009388 .quad -5310086773610559751 + 0x25, 0x9b, 0x16, 0x08, 0x23, 0x1b, 0x1b, 0xfd, //0x00009390 .quad -208543120469091547 + 0xb7, 0x98, 0x8d, 0x4d, 0x44, 0x7a, 0xe2, 0xe3, //0x00009398 .quad -2025922448585811785 + 0xf7, 0x20, 0x0e, 0xe5, 0xf5, 0xf0, 0x30, 0xfe, //0x000093a0 .quad -130339450293182217 + 0x72, 0x7f, 0x78, 0xb0, 0x6a, 0x8c, 0x6d, 0x8e, //0x000093a8 .quad -8183730558007214222 + 0x35, 0xa9, 0x51, 0x5e, 0x33, 0x2d, 0xbd, 0xbd, //0x000093b0 .quad -4774610331293865675 + 0x4f, 0x9f, 0x96, 0x5c, 0x85, 0xef, 0x08, 0xb2, //0x000093b8 .quad -5617977179081629873 + 0x82, 0x13, 0xe6, 0x35, 0x80, 0x78, 0x2c, 0xad, //0x000093c0 .quad -5968262914117332094 + 0x23, 0x47, 0xbc, 0xb3, 0x66, 0x2b, 0x8b, 0xde, //0x000093c8 .quad -2410785455424649437 + 0x31, 0xcc, 0xaf, 0x21, 0x50, 0xcb, 0x3b, 0x4c, //0x000093d0 .quad 5493207715531443249 + 0x76, 0xac, 0x55, 0x30, 0x20, 0xfb, 0x16, 0x8b, //0x000093d8 .quad -8424269937281487754 + 0x3d, 0xbf, 0x1b, 0x2a, 0x24, 0xbe, 0x4a, 0xdf, //0x000093e0 .quad -2356862392440471747 + 0x93, 0x17, 0x6b, 0x3c, 0xe8, 0xb9, 0xdc, 0xad, //0x000093e8 .quad -5918651403174471789 + 0x0d, 0xaf, 0xa2, 0x34, 0xad, 0x6d, 0x1d, 0xd7, //0x000093f0 .quad -2946077990550589683 + 0x78, 0xdd, 0x85, 0x4b, 0x62, 0xe8, 0x53, 0xd9, //0x000093f8 .quad -2786628235540701832 + 0x68, 0xad, 0xe5, 0x40, 0x8c, 0x64, 0x72, 0x86, //0x00009400 .quad -8758827771735200408 + 0x6b, 0xaa, 0x33, 0x6f, 0x3d, 0x71, 0xd4, 0x87, //0x00009408 .quad -8659171674854020501 + 0xc2, 0x18, 0x1f, 0x51, 0xaf, 0xfd, 0x0e, 0x68, //0x00009410 .quad 7498209359040551106 + 0x06, 0x95, 0x00, 0xcb, 0x8c, 0x8d, 0xc9, 0xa9, //0x00009418 .quad -6212278575140137722 + 0xf2, 0xde, 0x66, 0x25, 0x1b, 0xbd, 0x12, 0x02, //0x00009420 .quad 149389661945913074 + 0x48, 0xba, 0xc0, 0xfd, 0xef, 0xf0, 0x3b, 0xd4, //0x00009428 .quad -3153662200497784248 + 0x57, 0x4b, 0x60, 0xf7, 0x30, 0xb6, 0x4b, 0x01, //0x00009430 .quad 93368538716195671 + 0x6d, 0x74, 0x98, 0xfe, 0x95, 0x76, 0xa5, 0x84, //0x00009438 .quad -8888567902952197011 + 0x2d, 0x5e, 0x38, 0x35, 0xbd, 0xa3, 0x9e, 0x41, //0x00009440 .quad 4728396691822632493 + 0x88, 0x91, 0x3e, 0x7e, 0x3b, 0xd4, 0xce, 0xa5, //0x00009448 .quad -6499023860262858360 + 0xb9, 0x75, 0x86, 0x82, 0xac, 0x4c, 0x06, 0x52, //0x00009450 .quad 5910495864778290617 + 0xea, 0x35, 0xce, 0x5d, 0x4a, 0x89, 0x42, 0xcf, //0x00009458 .quad -3512093806901185046 + 0x93, 0x09, 0x94, 0xd1, 0xeb, 0xef, 0x43, 0x73, //0x00009460 .quad 8305745933913819539 + 0xb2, 0xe1, 0xa0, 0x7a, 0xce, 0x95, 0x89, 0x81, //0x00009468 .quad -9112587656954322510 + 0xf8, 0x0b, 0xf9, 0xc5, 0xe6, 0xeb, 0x14, 0x10, //0x00009470 .quad 1158810380537498616 + 0x1f, 0x1a, 0x49, 0x19, 0x42, 0xfb, 0xeb, 0xa1, //0x00009478 .quad -6779048552765515233 + 0xf6, 0x4e, 0x77, 0x77, 0xe0, 0x26, 0x1a, 0xd4, //0x00009480 .quad -3163173042755514634 + 0xa6, 0x60, 0x9b, 0x9f, 0x12, 0xfa, 0x66, 0xca, //0x00009488 .quad -3862124672529506138 + 0xb4, 0x22, 0x55, 0x95, 0x98, 0xb0, 0x20, 0x89, //0x00009490 .quad -8565652321871781196 + 0xd0, 0x38, 0x82, 0x47, 0x97, 0xb8, 0x00, 0xfd, //0x00009498 .quad -215969822234494768 + 0xb0, 0x35, 0x55, 0x5d, 0x5f, 0x6e, 0xb4, 0x55, //0x000094a0 .quad 6175682344898606512 + 0x82, 0x63, 0xb1, 0x8c, 0x5e, 0x73, 0x20, 0x9e, //0x000094a8 .quad -7052510166537641086 + 0x1d, 0x83, 0xaa, 0x34, 0xf7, 0x89, 0x21, 0xeb, //0x000094b0 .quad -1503769105731517667 + 0x62, 0xbc, 0xdd, 0x2f, 0x36, 0x90, 0xa8, 0xc5, //0x000094b8 .quad -4203951689744663454 + 0xe4, 0x23, 0xd5, 0x01, 0x75, 0xec, 0xe9, 0xa5, //0x000094c0 .quad -6491397400591784988 + 0x7b, 0x2b, 0xd5, 0xbb, 0x43, 0xb4, 0x12, 0xf7, //0x000094c8 .quad -643253593753441413 + 0x6e, 0x36, 0x25, 0x21, 0xc9, 0x33, 0xb2, 0x47, //0x000094d0 .quad 5166248661484910190 + 0x2d, 0x3b, 0x65, 0x55, 0xaa, 0xb0, 0x6b, 0x9a, //0x000094d8 .quad -7319562523736982739 + 0x0a, 0x84, 0x6e, 0x69, 0xbb, 0xc0, 0x9e, 0x99, //0x000094e0 .quad -7377247228426025974 + 0xf8, 0x89, 0xbe, 0xea, 0xd4, 0x9c, 0x06, 0xc1, //0x000094e8 .quad -4537767136243840520 + 0x0d, 0x25, 0xca, 0x43, 0xea, 0x70, 0x06, 0xc0, //0x000094f0 .quad -4609873017105144563 + 0x76, 0x2c, 0x6e, 0x25, 0x0a, 0x44, 0x48, 0xf1, //0x000094f8 .quad -1060522901877412746 + 0x28, 0x57, 0x5e, 0x6a, 0x92, 0x06, 0x04, 0x38, //0x00009500 .quad 4036358391950366504 + 0xca, 0xdb, 0x64, 0x57, 0x86, 0x2a, 0xcd, 0x96, //0x00009508 .quad -7580355841314464822 + 0xf2, 0xec, 0xf5, 0x04, 0x37, 0x08, 0x05, 0xc6, //0x00009510 .quad -4177924046916817678 + 0xbc, 0x12, 0x3e, 0xed, 0x27, 0x75, 0x80, 0xbc, //0x00009518 .quad -4863758783215693124 + 0x2e, 0x68, 0x33, 0xc6, 0x44, 0x4a, 0x86, 0xf7, //0x00009520 .quad -610719040218634194 + 0x6b, 0x97, 0x8d, 0xe8, 0x71, 0x92, 0xa0, 0xeb, //0x00009528 .quad -1468012460592228501 + 0x1d, 0x21, 0xe0, 0xfb, 0x6a, 0xee, 0xb3, 0x7a, //0x00009530 .quad 8841672636718129437 + 0xa3, 0x7e, 0x58, 0x31, 0x87, 0x5b, 0x44, 0x93, //0x00009538 .quad -7835036815511224669 + 0x64, 0x29, 0xd8, 0xba, 0x05, 0xea, 0x60, 0x59, //0x00009540 .quad 6440404777470273892 + 0x4c, 0x9e, 0xae, 0xfd, 0x68, 0x72, 0x15, 0xb8, //0x00009548 .quad -5182110000961642932 + 0xbd, 0x33, 0x8e, 0x29, 0x87, 0x24, 0xb9, 0x6f, //0x00009550 .quad 8050505971837842365 + 0xdf, 0x45, 0x1a, 0x3d, 0x03, 0xcf, 0x1a, 0xe6, //0x00009558 .quad -1865951482774665761 + 0x56, 0xe0, 0xf8, 0x79, 0xd4, 0xb6, 0xd3, 0xa5, //0x00009560 .quad -6497648813669818282 + 0xab, 0x6b, 0x30, 0x06, 0x62, 0xc1, 0xd0, 0x8f, //0x00009568 .quad -8083748704375247957 + 0x6c, 0x18, 0x77, 0x98, 0x89, 0xa4, 0x48, 0x8f, //0x00009570 .quad -8122061017087272852 + 0x96, 0x86, 0xbc, 0x87, 0xba, 0xf1, 0xc4, 0xb3, //0x00009578 .quad -5492999862041672042 + 0x87, 0xde, 0x94, 0xfe, 0xab, 0xcd, 0x1a, 0x33, //0x00009580 .quad 3682481783923072647 + 0x3c, 0xa8, 0xab, 0x29, 0x29, 0x2e, 0xb6, 0xe0, //0x00009588 .quad -2254563809124702148 + 0x14, 0x0b, 0x1d, 0x7f, 0x8b, 0xc0, 0xf0, 0x9f, //0x00009590 .quad -6921820921902855404 + 0x25, 0x49, 0x0b, 0xba, 0xd9, 0xdc, 0x71, 0x8c, //0x00009598 .quad -8326631408344020699 + 0xd9, 0x4d, 0xe4, 0x5e, 0xae, 0xf0, 0xec, 0x07, //0x000095a0 .quad 571095884476206553 + 0x6f, 0x1b, 0x8e, 0x28, 0x10, 0x54, 0x8e, 0xaf, //0x000095a8 .quad -5796603242002637969 + 0x50, 0x61, 0x9d, 0xf6, 0xd9, 0x2c, 0xe8, 0xc9, //0x000095b0 .quad -3897816162832129712 + 0x4a, 0xa2, 0xb1, 0x32, 0x14, 0xe9, 0x71, 0xdb, //0x000095b8 .quad -2634068034075909558 + 0xd2, 0x5c, 0x22, 0x3a, 0x08, 0x1c, 0x31, 0xbe, //0x000095c0 .quad -4741978110983775022 + 0x6e, 0x05, 0xaf, 0x9f, 0xac, 0x31, 0x27, 0x89, //0x000095c8 .quad -8563821548938525330 + 0x06, 0xf4, 0xaa, 0x48, 0x0a, 0x63, 0xbd, 0x6d, //0x000095d0 .quad 7907585416552444934 + 0xca, 0xc6, 0x9a, 0xc7, 0x17, 0xfe, 0x70, 0xab, //0x000095d8 .quad -6093090917745768758 + 0x08, 0xb1, 0xd5, 0xda, 0xcc, 0xbb, 0x2c, 0x09, //0x000095e0 .quad 661109733835780360 + 0x7d, 0x78, 0x81, 0xb9, 0x9d, 0x3d, 0x4d, 0xd6, //0x000095e8 .quad -3004677628754823043 + 0xa5, 0x8e, 0xc5, 0x08, 0x60, 0xf5, 0xbb, 0x25, //0x000095f0 .quad 2719036592861056677 + 0x4e, 0xeb, 0xf0, 0x93, 0x82, 0x46, 0xf0, 0x85, //0x000095f8 .quad -8795452545612846258 + 0x4e, 0xf2, 0xf6, 0x0a, 0xb8, 0xf2, 0x2a, 0xaf, //0x00009600 .quad -5824576295778454962 + 0x21, 0x26, 0xed, 0x38, 0x23, 0x58, 0x6c, 0xa7, //0x00009608 .quad -6382629663588669919 + 0xe1, 0xae, 0xb4, 0x0d, 0x66, 0xaf, 0xf5, 0x1a, //0x00009610 .quad 1942651667131707105 + 0xaa, 0x6f, 0x28, 0x07, 0x2c, 0x6e, 0x47, 0xd1, //0x00009618 .quad -3366601061058449494 + 0x4d, 0xed, 0x90, 0xc8, 0x9f, 0x8d, 0xd9, 0x50, //0x00009620 .quad 5825843310384704845 + 0xca, 0x45, 0x79, 0x84, 0xdb, 0xa4, 0xcc, 0x82, //0x00009628 .quad -9021654690802612790 + 0xa0, 0x28, 0xb5, 0xba, 0x07, 0xf1, 0x0f, 0xe5, //0x00009630 .quad -1941067898873894752 + 0x3c, 0x97, 0x97, 0x65, 0x12, 0xce, 0x7f, 0xa3, //0x00009638 .quad -6665382345075878084 + 0xc8, 0x72, 0x62, 0xa9, 0x49, 0xed, 0x53, 0x1e, //0x00009640 .quad 2185351144835019464 + 0x0c, 0x7d, 0xfd, 0xfe, 0x96, 0xc1, 0x5f, 0xcc, //0x00009648 .quad -3720041912917459700 + 0x7a, 0x0f, 0xbb, 0x13, 0x9c, 0xe8, 0xe8, 0x25, //0x00009650 .quad 2731688931043774330 + 0x4f, 0xdc, 0xbc, 0xbe, 0xfc, 0xb1, 0x77, 0xff, //0x00009658 .quad -38366372719436721 + 0xac, 0xe9, 0x54, 0x8c, 0x61, 0x91, 0xb1, 0x77, //0x00009660 .quad 8624834609543440812 + 0xb1, 0x09, 0x36, 0xf7, 0x3d, 0xcf, 0xaa, 0x9f, //0x00009668 .quad -6941508010590729807 + 0x17, 0x24, 0x6a, 0xef, 0xb9, 0xf5, 0x9d, 0xd5, //0x00009670 .quad -3054014793352862697 + 0x1d, 0x8c, 0x03, 0x75, 0x0d, 0x83, 0x95, 0xc7, //0x00009678 .quad -4065198994811024355 + 0x1d, 0xad, 0x44, 0x6b, 0x28, 0x73, 0x05, 0x4b, //0x00009680 .quad 5405853545163697437 + 0x25, 0x6f, 0x44, 0xd2, 0xd0, 0xe3, 0x7a, 0xf9, //0x00009688 .quad -469812725086392539 + 0x32, 0xec, 0x0a, 0x43, 0xf9, 0x67, 0xe3, 0x4e, //0x00009690 .quad 5684501474941004850 + 0x77, 0xc5, 0x6a, 0x83, 0x62, 0xce, 0xec, 0x9b, //0x00009698 .quad -7211161980820077193 + 0x3f, 0xa7, 0xcd, 0x93, 0xf7, 0x41, 0x9c, 0x22, //0x000096a0 .quad 2493940825248868159 + 0xd5, 0x76, 0x45, 0x24, 0xfb, 0x01, 0xe8, 0xc2, //0x000096a8 .quad -4402266457597708587 + 0x0f, 0x11, 0xc1, 0x78, 0x75, 0x52, 0x43, 0x6b, //0x000096b0 .quad 7729112049988473103 + 0x8a, 0xd4, 0x56, 0xed, 0x79, 0x02, 0xa2, 0xf3, //0x000096b8 .quad -891147053569747830 + 0xa9, 0xaa, 0x78, 0x6b, 0x89, 0x13, 0x0a, 0x83, //0x000096c0 .quad -9004363024039368023 + 0xd6, 0x44, 0x56, 0x34, 0x8c, 0x41, 0x45, 0x98, //0x000096c8 .quad -7474495936122174250 + 0x53, 0xd5, 0x56, 0xc6, 0x6b, 0x98, 0xcc, 0x23, //0x000096d0 .quad 2579604275232953683 + 0x0c, 0xd6, 0x6b, 0x41, 0xef, 0x91, 0x56, 0xbe, //0x000096d8 .quad -4731433901725329908 + 0xa8, 0x8a, 0xec, 0xb7, 0x86, 0xbe, 0xbf, 0x2c, //0x000096e0 .quad 3224505344041192104 + 0x8f, 0xcb, 0xc6, 0x11, 0x6b, 0x36, 0xec, 0xed, //0x000096e8 .quad -1302606358729274481 + 0xa9, 0xd6, 0xf3, 0x32, 0x14, 0xd7, 0xf7, 0x7b, //0x000096f0 .quad 8932844867666826921 + 0x39, 0x3f, 0x1c, 0xeb, 0x02, 0xa2, 0xb3, 0x94, //0x000096f8 .quad -7731658001846878407 + 0x53, 0xcc, 0xb0, 0x3f, 0xd9, 0xcc, 0xf5, 0xda, //0x00009700 .quad -2669001970698630061 + 0x07, 0x4f, 0xe3, 0xa5, 0x83, 0x8a, 0xe0, 0xb9, //0x00009708 .quad -5052886483881210105 + 0x68, 0xff, 0x9c, 0x8f, 0x0f, 0x40, 0xb3, 0xd1, //0x00009710 .quad -3336252463373287576 + 0xc9, 0x22, 0x5c, 0x8f, 0x24, 0xad, 0x58, 0xe8, //0x00009718 .quad -1704422086424124727 + 0xa1, 0x1f, 0xc2, 0xb9, 0x09, 0x08, 0x10, 0x23, //0x00009720 .quad 2526528228819083169 + 0xbe, 0x95, 0x99, 0xd9, 0x36, 0x6c, 0x37, 0x91, //0x00009728 .quad -7982792831656159810 + 0x8a, 0xa7, 0x32, 0x28, 0x0c, 0x0a, 0xd4, 0xab, //0x00009730 .quad -6065211750830921846 + 0x2d, 0xfb, 0xff, 0x8f, 0x44, 0x47, 0x85, 0xb5, //0x00009738 .quad -5366805021142811859 + 0x6c, 0x51, 0x3f, 0x32, 0x8f, 0x0c, 0xc9, 0x16, //0x00009740 .quad 1641857348316123500 + 0xf9, 0xf9, 0xff, 0xb3, 0x15, 0x99, 0xe6, 0xe2, //0x00009748 .quad -2096820258001126919 + 0xe3, 0x92, 0x67, 0x7f, 0xd9, 0xa7, 0x3d, 0xae, //0x00009750 .quad -5891368184943504669 + 0x3b, 0xfc, 0x7f, 0x90, 0xad, 0x1f, 0xd0, 0x8d, //0x00009758 .quad -8228041688891786181 + 0x9c, 0x77, 0x41, 0xdf, 0xcf, 0x11, 0xcd, 0x99, //0x00009760 .quad -7364210231179380836 + 0x4a, 0xfb, 0x9f, 0xf4, 0x98, 0x27, 0x44, 0xb1, //0x00009768 .quad -5673366092687344822 + 0x83, 0xd5, 0x11, 0xd7, 0x43, 0x56, 0x40, 0x40, //0x00009770 .quad 4629795266307937667 + 0x1d, 0xfa, 0xc7, 0x31, 0x7f, 0x31, 0x95, 0xdd, //0x00009778 .quad -2480021597431793123 + 0x72, 0x25, 0x6b, 0x66, 0xea, 0x35, 0x28, 0x48, //0x00009780 .quad 5199465050656154994 + 0x52, 0xfc, 0x1c, 0x7f, 0xef, 0x3e, 0x7d, 0x8a, //0x00009788 .quad -8467542526035952558 + 0xcf, 0xee, 0x05, 0x00, 0x65, 0x43, 0x32, 0xda, //0x00009790 .quad -2724040723534582065 + 0x66, 0x3b, 0xe4, 0x5e, 0xab, 0x8e, 0x1c, 0xad, //0x00009798 .quad -5972742139117552794 + 0x82, 0x6a, 0x07, 0x40, 0x3e, 0xd4, 0xbe, 0x90, //0x000097a0 .quad -8016736922845615486 + 0x40, 0x4a, 0x9d, 0x36, 0x56, 0xb2, 0x63, 0xd8, //0x000097a8 .quad -2854241655469553088 + 0x91, 0xa2, 0x04, 0xe8, 0xa6, 0x44, 0x77, 0x5a, //0x000097b0 .quad 6518754469289960081 + 0x68, 0x4e, 0x22, 0xe2, 0x75, 0x4f, 0x3e, 0x87, //0x000097b8 .quad -8701430062309552536 + 0x36, 0xcb, 0x05, 0xa2, 0xd0, 0x15, 0x15, 0x71, //0x000097c0 .quad 8148443086612450102 + 0x02, 0xe2, 0xaa, 0x5a, 0x53, 0xe3, 0x0d, 0xa9, //0x000097c8 .quad -6265101559459552766 + 0x03, 0x3e, 0x87, 0xca, 0x44, 0x5b, 0x5a, 0x0d, //0x000097d0 .quad 962181821410786819 + 0x83, 0x9a, 0x55, 0x31, 0x28, 0x5c, 0x51, 0xd3, //0x000097d8 .quad -3219690930897053053 + 0xc2, 0x86, 0x94, 0xfe, 0x0a, 0x79, 0x58, 0xe8, //0x000097e0 .quad -1704479370831952190 + 0x91, 0x80, 0xd5, 0x1e, 0x99, 0xd9, 0x12, 0x84, //0x000097e8 .quad -8929835859451740015 + 0x72, 0xa8, 0x39, 0xbe, 0x4d, 0x97, 0x6e, 0x62, //0x000097f0 .quad 7092772823314835570 + 0xb6, 0xe0, 0x8a, 0x66, 0xff, 0x8f, 0x17, 0xa5, //0x000097f8 .quad -6550608805887287114 + 0x8f, 0x12, 0xc8, 0x2d, 0x21, 0x3d, 0x0a, 0xfb, //0x00009800 .quad -357406007711231345 + 0xe3, 0x98, 0x2d, 0x40, 0xff, 0x73, 0x5d, 0xce, //0x00009808 .quad -3576574988931720989 + 0x99, 0x0b, 0x9d, 0xbc, 0x34, 0x66, 0xe6, 0x7c, //0x00009810 .quad 8999993282035256217 + 0x8e, 0x7f, 0x1c, 0x88, 0x7f, 0x68, 0xfa, 0x80, //0x00009818 .quad -9152888395723407474 + 0x80, 0x4e, 0xc4, 0xeb, 0xc1, 0xff, 0x1f, 0x1c, //0x00009820 .quad 2026619565689294464 + 0x72, 0x9f, 0x23, 0x6a, 0x9f, 0x02, 0x39, 0xa1, //0x00009828 .quad -6829424476226871438 + 0x20, 0x62, 0xb5, 0x66, 0xb2, 0xff, 0x27, 0xa3, //0x00009830 .quad -6690097579743157728 + 0x4e, 0x87, 0xac, 0x44, 0x47, 0x43, 0x87, 0xc9, //0x00009838 .quad -3925094576856201394 + 0xa8, 0xba, 0x62, 0x00, 0x9f, 0xff, 0xf1, 0x4b, //0x00009840 .quad 5472436080603216552 + 0x22, 0xa9, 0xd7, 0x15, 0x19, 0x14, 0xe9, 0xfb, //0x00009848 .quad -294682202642863838 + 0xa9, 0xb4, 0x3d, 0x60, 0xc3, 0x3f, 0x77, 0x6f, //0x00009850 .quad 8031958568804398249 + 0xb5, 0xc9, 0xa6, 0xad, 0x8f, 0xac, 0x71, 0x9d, //0x00009858 .quad -7101705404292871755 + 0xd3, 0x21, 0x4d, 0x38, 0xb4, 0x0f, 0x55, 0xcb, //0x00009860 .quad -3795109844276665901 + 0x22, 0x7c, 0x10, 0x99, 0xb3, 0x17, 0xce, 0xc4, //0x00009868 .quad -4265445736938701790 + 0x48, 0x6a, 0x60, 0x46, 0xa1, 0x53, 0x2a, 0x7e, //0x00009870 .quad 9091170749936331336 + 0x2b, 0x9b, 0x54, 0x7f, 0xa0, 0x9d, 0x01, 0xf6, //0x00009878 .quad -720121152745989333 + 0x6d, 0x42, 0xfc, 0xcb, 0x44, 0x74, 0xda, 0x2e, //0x00009880 .quad 3376138709496513133 + 0xfb, 0xe0, 0x94, 0x4f, 0x84, 0x02, 0xc1, 0x99, //0x00009888 .quad -7367604748107325189 + 0x08, 0x53, 0xfb, 0xfe, 0x55, 0x11, 0x91, 0xfa, //0x00009890 .quad -391512631556746488 + 0x39, 0x19, 0x7a, 0x63, 0x25, 0x43, 0x31, 0xc0, //0x00009898 .quad -4597819916706768583 + 0xca, 0x27, 0xba, 0x7e, 0xab, 0x55, 0x35, 0x79, //0x000098a0 .quad 8733981247408842698 + 0x88, 0x9f, 0x58, 0xbc, 0xee, 0x93, 0x3d, 0xf0, //0x000098a8 .quad -1135588877456072824 + 0xde, 0x58, 0x34, 0x2f, 0x8b, 0x55, 0xc1, 0x4b, //0x000098b0 .quad 5458738279630526686 + 0xb5, 0x63, 0xb7, 0x35, 0x75, 0x7c, 0x26, 0x96, //0x000098b8 .quad -7627272076051127371 + 0x16, 0x6f, 0x01, 0xfb, 0xed, 0xaa, 0xb1, 0x9e, //0x000098c0 .quad -7011635205744005354 + 0xa2, 0x3c, 0x25, 0x83, 0x92, 0x1b, 0xb0, 0xbb, //0x000098c8 .quad -4922404076636521310 + 0xdc, 0xca, 0xc1, 0x79, 0xa9, 0x15, 0x5e, 0x46, //0x000098d0 .quad 5070514048102157020 + 0xcb, 0x8b, 0xee, 0x23, 0x77, 0x22, 0x9c, 0xea, //0x000098d8 .quad -1541319077368263733 + 0xc9, 0x1e, 0x19, 0xec, 0x89, 0xcd, 0xfa, 0x0b, //0x000098e0 .quad 863228270850154185 + 0x5f, 0x17, 0x75, 0x76, 0x8a, 0x95, 0xa1, 0x92, //0x000098e8 .quad -7880853450996246689 + 0x7b, 0x66, 0x1f, 0x67, 0xec, 0x80, 0xf9, 0xce, //0x000098f0 .quad -3532650679864695173 + 0x36, 0x5d, 0x12, 0x14, 0xed, 0xfa, 0x49, 0xb7, //0x000098f8 .quad -5239380795317920458 + 0x1a, 0x40, 0xe7, 0x80, 0x27, 0xe1, 0xb7, 0x82, //0x00009900 .quad -9027499368258256870 + 0x84, 0xf4, 0x16, 0x59, 0xa8, 0x79, 0x1c, 0xe5, //0x00009908 .quad -1937539975720012668 + 0x10, 0x88, 0x90, 0xb0, 0xb8, 0xec, 0xb2, 0xd1, //0x00009910 .quad -3336344095947716592 + 0xd2, 0x58, 0xae, 0x37, 0x09, 0xcc, 0x31, 0x8f, //0x00009918 .quad -8128491512466089774 + 0x15, 0xaa, 0xb4, 0xdc, 0xe6, 0xa7, 0x1f, 0x86, //0x00009920 .quad -8782116138362033643 + 0x07, 0xef, 0x99, 0x85, 0x0b, 0x3f, 0xfe, 0xb2, //0x00009928 .quad -5548928372155224313 + 0x9a, 0xd4, 0xe1, 0x93, 0xe0, 0x91, 0xa7, 0x67, //0x00009930 .quad 7469098900757009562 + 0xc9, 0x6a, 0x00, 0x67, 0xce, 0xce, 0xbd, 0xdf, //0x00009938 .quad -2324474446766642487 + 0xe0, 0x24, 0x6d, 0x5c, 0x2c, 0xbb, 0xc8, 0xe0, //0x00009940 .quad -2249342214667950880 + 0xbd, 0x42, 0x60, 0x00, 0x41, 0xa1, 0xd6, 0x8b, //0x00009948 .quad -8370325556870233411 + 0x18, 0x6e, 0x88, 0x73, 0xf7, 0xe9, 0xfa, 0x58, //0x00009950 .quad 6411694268519837208 + 0x6d, 0x53, 0x78, 0x40, 0x91, 0x49, 0xcc, 0xae, //0x00009958 .quad -5851220927660403859 + 0x9e, 0x89, 0x6a, 0x50, 0x75, 0xa4, 0x39, 0xaf, //0x00009960 .quad -5820440219632367202 + 0x48, 0x68, 0x96, 0x90, 0xf5, 0x5b, 0x7f, 0xda, //0x00009968 .quad -2702340141148116920 + 0x03, 0x96, 0x42, 0x52, 0xc9, 0x06, 0x84, 0x6d, //0x00009970 .quad 7891439908798240259 + 0x2d, 0x01, 0x5e, 0x7a, 0x79, 0x99, 0x8f, 0x88, //0x00009978 .quad -8606491615858654931 + 0x83, 0x3b, 0xd3, 0xa6, 0x7b, 0x08, 0xe5, 0xc8, //0x00009980 .quad -3970758169284363389 + 0x78, 0x81, 0xf5, 0xd8, 0xd7, 0x7f, 0xb3, 0xaa, //0x00009988 .quad -6146428501395930760 + 0x64, 0x0a, 0x88, 0x90, 0x9a, 0x4a, 0x1e, 0xfb, //0x00009990 .quad -351761693178066332 + 0xd6, 0xe1, 0x32, 0xcf, 0xcd, 0x5f, 0x60, 0xd5, //0x00009998 .quad -3071349608317525546 + 0x7f, 0x06, 0x55, 0x9a, 0xa0, 0xee, 0xf2, 0x5c, //0x000099a0 .quad 6697677969404790399 + 0x26, 0xcd, 0x7f, 0xa1, 0xe0, 0x3b, 0x5c, 0x85, //0x000099a8 .quad -8837122532839535322 + 0x1e, 0x48, 0xea, 0xc0, 0x48, 0xaa, 0x2f, 0xf4, //0x000099b0 .quad -851274575098787810 + 0x6f, 0xc0, 0xdf, 0xc9, 0xd8, 0x4a, 0xb3, 0xa6, //0x000099b8 .quad -6434717147622031249 + 0x26, 0xda, 0x24, 0xf1, 0xda, 0x94, 0x3b, 0xf1, //0x000099c0 .quad -1064093218873484762 + 0x8b, 0xb0, 0x57, 0xfc, 0x8e, 0x1d, 0x60, 0xd0, //0x000099c8 .quad -3431710416100151157 + 0x58, 0x08, 0xb7, 0xd6, 0x08, 0x3d, 0xc5, 0x76, //0x000099d0 .quad 8558313775058847832 + 0x57, 0xce, 0xb6, 0x5d, 0x79, 0x12, 0x3c, 0x82, //0x000099d8 .quad -9062348037703676329 + 0x6e, 0xca, 0x64, 0x0c, 0x4b, 0x8c, 0x76, 0x54, //0x000099e0 .quad 6086206200396171886 + 0xed, 0x81, 0x24, 0xb5, 0x17, 0x17, 0xcb, 0xa2, //0x000099e8 .quad -6716249028702207507 + 0x09, 0xfd, 0x7d, 0xcf, 0x5d, 0x2f, 0x94, 0xa9, //0x000099f0 .quad -6227300304786948855 + 0x68, 0xa2, 0x6d, 0xa2, 0xdd, 0xdc, 0x7d, 0xcb, //0x000099f8 .quad -3783625267450371480 + 0x4c, 0x7c, 0x5d, 0x43, 0x35, 0x3b, 0xf9, 0xd3, //0x00009a00 .quad -3172439362556298164 + 0x02, 0x0b, 0x09, 0x0b, 0x15, 0x54, 0x5d, 0xfe, //0x00009a08 .quad -117845565885576446 + 0xaf, 0x6d, 0x1a, 0x4a, 0x01, 0xc5, 0x7b, 0xc4, //0x00009a10 .quad -4288617610811380305 + 0xe1, 0xa6, 0xe5, 0x26, 0x8d, 0x54, 0xfa, 0x9e, //0x00009a18 .quad -6991182506319567135 + 0x1b, 0x09, 0xa1, 0x9c, 0x41, 0xb6, 0x9a, 0x35, //0x00009a20 .quad 3862600023340550427 + 0x9a, 0x10, 0x9f, 0x70, 0xb0, 0xe9, 0xb8, 0xc6, //0x00009a28 .quad -4127292114472071014 + 0x62, 0x4b, 0xc9, 0x03, 0xd2, 0x63, 0x01, 0xc3, //0x00009a30 .quad -4395122007679087774 + 0xc0, 0xd4, 0xc6, 0x8c, 0x1c, 0x24, 0x67, 0xf8, //0x00009a38 .quad -547429124662700864 + 0x1d, 0xcf, 0x5d, 0x42, 0x63, 0xde, 0xe0, 0x79, //0x00009a40 .quad 8782263791269039901 + 0xf8, 0x44, 0xfc, 0xd7, 0x91, 0x76, 0x40, 0x9b, //0x00009a48 .quad -7259672230555269896 + 0xe4, 0x42, 0xf5, 0x12, 0xfc, 0x15, 0x59, 0x98, //0x00009a50 .quad -7468914334623251740 + 0x36, 0x56, 0xfb, 0x4d, 0x36, 0x94, 0x10, 0xc2, //0x00009a58 .quad -4462904269766699466 + 0x9d, 0x93, 0xb2, 0x17, 0x7b, 0x5b, 0x6f, 0x3e, //0x00009a60 .quad 4498915137003099037 + 0xc4, 0x2b, 0x7a, 0xe1, 0x43, 0xb9, 0x94, 0xf2, //0x00009a68 .quad -966944318780986428 + 0x42, 0x9c, 0xcf, 0xee, 0x2c, 0x99, 0x05, 0xa7, //0x00009a70 .quad -6411550076227838910 + 0x5a, 0x5b, 0xec, 0x6c, 0xca, 0xf3, 0x9c, 0x97, //0x00009a78 .quad -7521869226879198374 + 0x53, 0x83, 0x83, 0x2a, 0x78, 0xff, 0xc6, 0x50, //0x00009a80 .quad 5820620459997365075 + 0x31, 0x72, 0x27, 0x08, 0xbd, 0x30, 0x84, 0xbd, //0x00009a88 .quad -4790650515171610063 + 0x28, 0x64, 0x24, 0x35, 0x56, 0xbf, 0xf8, 0xa4, //0x00009a90 .quad -6559282480285457368 + 0xbd, 0x4e, 0x31, 0x4a, 0xec, 0x3c, 0xe5, 0xec, //0x00009a98 .quad -1376627125537124675 + 0x99, 0xbe, 0x36, 0xe1, 0x95, 0x77, 0x1b, 0x87, //0x00009aa0 .quad -8711237568605798759 + 0x36, 0xd1, 0x5e, 0xae, 0x13, 0x46, 0x0f, 0x94, //0x00009aa8 .quad -7777920981101784778 + 0x3f, 0x6e, 0x84, 0x59, 0x7b, 0x55, 0xe2, 0x28, //0x00009ab0 .quad 2946011094524915263 + 0x84, 0x85, 0xf6, 0x99, 0x98, 0x17, 0x13, 0xb9, //0x00009ab8 .quad -5110715207949843068 + 0xcf, 0x89, 0xe5, 0x2f, 0xda, 0xea, 0x1a, 0x33, //0x00009ac0 .quad 3682513868156144079 + 0xe5, 0x26, 0x74, 0xc0, 0x7e, 0xdd, 0x57, 0xe7, //0x00009ac8 .quad -1776707991509915931 + 0x21, 0x76, 0xef, 0x5d, 0xc8, 0xd2, 0xf0, 0x3f, //0x00009ad0 .quad 4607414176811284001 + 0x4f, 0x98, 0x48, 0x38, 0x6f, 0xea, 0x96, 0x90, //0x00009ad8 .quad -8027971522334779313 + 0xa9, 0x53, 0x6b, 0x75, 0x7a, 0x07, 0xed, 0x0f, //0x00009ae0 .quad 1147581702586717097 + 0x63, 0xbe, 0x5a, 0x06, 0x0b, 0xa5, 0xbc, 0xb4, //0x00009ae8 .quad -5423278384491086237 + 0x94, 0x28, 0xc6, 0x12, 0x59, 0x49, 0xe8, 0xd3, //0x00009af0 .quad -3177208890193991532 + 0xfb, 0x6d, 0xf1, 0xc7, 0x4d, 0xce, 0xeb, 0xe1, //0x00009af8 .quad -2167411962186469893 + 0x5c, 0xd9, 0xbb, 0xab, 0xd7, 0x2d, 0x71, 0x64, //0x00009b00 .quad 7237616480483531100 + 0xbd, 0xe4, 0xf6, 0x9c, 0xf0, 0x60, 0x33, 0x8d, //0x00009b08 .quad -8272161504007625539 + 0xb3, 0xcf, 0xaa, 0x96, 0x4d, 0x79, 0x8d, 0xbd, //0x00009b10 .quad -4788037454677749837 + 0xec, 0x9d, 0x34, 0xc4, 0x2c, 0x39, 0x80, 0xb0, //0x00009b18 .quad -5728515861582144020 + 0xa0, 0x83, 0x55, 0xfc, 0xa0, 0xd7, 0xf0, 0xec, //0x00009b20 .quad -1373360799919799392 + 0x67, 0xc5, 0x41, 0xf5, 0x77, 0x47, 0xa0, 0xdc, //0x00009b28 .quad -2548958808550292121 + 0x44, 0x72, 0xb5, 0x9d, 0xc4, 0x86, 0x16, 0xf4, //0x00009b30 .quad -858350499949874620 + 0x60, 0x1b, 0x49, 0xf9, 0xaa, 0x2c, 0xe4, 0x89, //0x00009b38 .quad -8510628282985014432 + 0xd5, 0xce, 0x22, 0xc5, 0x75, 0x28, 0x1c, 0x31, //0x00009b40 .quad 3538747893490044629 + 0x39, 0x62, 0x9b, 0xb7, 0xd5, 0x37, 0x5d, 0xac, //0x00009b48 .quad -6026599335303880135 + 0x8b, 0x82, 0x6b, 0x36, 0x93, 0x32, 0x63, 0x7d, //0x00009b50 .quad 9035120885289943691 + 0xc7, 0x3a, 0x82, 0x25, 0xcb, 0x85, 0x74, 0xd7, //0x00009b58 .quad -2921563150702462265 + 0x97, 0x31, 0x03, 0x02, 0x9c, 0xff, 0x5d, 0xae, //0x00009b60 .quad -5882264492762254953 + 0xbc, 0x64, 0x71, 0xf7, 0x9e, 0xd3, 0xa8, 0x86, //0x00009b68 .quad -8743505996830120772 + 0xfc, 0xfd, 0x83, 0x02, 0x83, 0x7f, 0xf5, 0xd9, //0x00009b70 .quad -2741144597525430788 + 0xeb, 0xbd, 0x4d, 0xb5, 0x86, 0x08, 0x53, 0xa8, //0x00009b78 .quad -6317696477610263061 + 0x7b, 0xfd, 0x24, 0xc3, 0x63, 0xdf, 0x72, 0xd0, //0x00009b80 .quad -3426430746906788485 + 0x66, 0x2d, 0xa1, 0x62, 0xa8, 0xca, 0x67, 0xd2, //0x00009b88 .quad -3285434578585440922 + 0x6d, 0x1e, 0xf7, 0x59, 0x9e, 0xcb, 0x47, 0x42, //0x00009b90 .quad 4776009810824339053 + 0x60, 0xbc, 0xa4, 0x3d, 0xa9, 0xde, 0x80, 0x83, //0x00009b98 .quad -8970925639256982432 + 0x08, 0xe6, 0x74, 0xf0, 0x85, 0xbe, 0xd9, 0x52, //0x00009ba0 .quad 5970012263530423816 + 0x78, 0xeb, 0x0d, 0x8d, 0x53, 0x16, 0x61, 0xa4, //0x00009ba8 .quad -6601971030643840136 + 0x8b, 0x1f, 0x92, 0x6c, 0x27, 0x2e, 0x90, 0x67, //0x00009bb0 .quad 7462515329413029771 + 0x56, 0x66, 0x51, 0x70, 0xe8, 0x5b, 0x79, 0xcd, //0x00009bb8 .quad -3640777769877412266 + 0xb6, 0x53, 0xdb, 0xa3, 0xd8, 0x1c, 0xba, 0x00, //0x00009bc0 .quad 52386062455755702 + 0xf6, 0xdf, 0x32, 0x46, 0x71, 0xd9, 0x6b, 0x80, //0x00009bc8 .quad -9193015133814464522 + 0xa4, 0x28, 0xd2, 0xcc, 0x0e, 0xa4, 0xe8, 0x80, //0x00009bd0 .quad -9157889458785081180 + 0xf3, 0x97, 0xbf, 0x97, 0xcd, 0xcf, 0x86, 0xa0, //0x00009bd8 .quad -6879582898840692749 + 0xcd, 0xb2, 0x06, 0x80, 0x12, 0xcd, 0x22, 0x61, //0x00009be0 .quad 6999382250228200141 + 0xf0, 0x7d, 0xaf, 0xfd, 0xc0, 0x83, 0xa8, 0xc8, //0x00009be8 .quad -3987792605123478032 + 0x81, 0x5f, 0x08, 0x20, 0x57, 0x80, 0x6b, 0x79, //0x00009bf0 .quad 8749227812785250177 + 0x6c, 0x5d, 0x1b, 0x3d, 0xb1, 0xa4, 0xd2, 0xfa, //0x00009bf8 .quad -373054737976959636 + 0xb0, 0x3b, 0x05, 0x74, 0x36, 0x30, 0xe3, 0xcb, //0x00009c00 .quad -3755104653863994448 + 0x63, 0x1a, 0x31, 0xc6, 0xee, 0xa6, 0xc3, 0x9c, //0x00009c08 .quad -7150688238876681629 + 0x9c, 0x8a, 0x06, 0x11, 0x44, 0xfc, 0xdb, 0xbe, //0x00009c10 .quad -4693880817329993060 + 0xfc, 0x60, 0xbd, 0x77, 0xaa, 0x90, 0xf4, 0xc3, //0x00009c18 .quad -4326674280168464132 + 0x44, 0x2d, 0x48, 0x15, 0x55, 0xfb, 0x92, 0xee, //0x00009c20 .quad -1255665003235103420 + 0x3b, 0xb9, 0xac, 0x15, 0xd5, 0xb4, 0xf1, 0xf4, //0x00009c28 .quad -796656831783192261 + 0x4a, 0x1c, 0x4d, 0x2d, 0x15, 0xdd, 0x1b, 0x75, //0x00009c30 .quad 8438581409832836170 + 0xc5, 0xf3, 0x8b, 0x2d, 0x05, 0x11, 0x17, 0x99, //0x00009c38 .quad -7415439547505577019 + 0x5d, 0x63, 0xa0, 0x78, 0x5a, 0xd4, 0x62, 0xd2, //0x00009c40 .quad -3286831292991118499 + 0xb6, 0xf0, 0xee, 0x78, 0x46, 0xd5, 0x5c, 0xbf, //0x00009c48 .quad -4657613415954583370 + 0x34, 0x7c, 0xc8, 0x16, 0x71, 0x89, 0xfb, 0x86, //0x00009c50 .quad -8720225134666286028 + 0xe4, 0xac, 0x2a, 0x17, 0x98, 0x0a, 0x34, 0xef, //0x00009c58 .quad -1210330751515841308 + 0xa0, 0x4d, 0x3d, 0xae, 0xe6, 0x35, 0x5d, 0xd4, //0x00009c60 .quad -3144297699952734816 + 0x0e, 0xac, 0x7a, 0x0e, 0x9f, 0x86, 0x80, 0x95, //0x00009c68 .quad -7673985747338482674 + 0x09, 0xa1, 0xcc, 0x59, 0x60, 0x83, 0x74, 0x89, //0x00009c70 .quad -8542058143368306423 + 0x12, 0x57, 0x19, 0xd2, 0x46, 0xa8, 0xe0, 0xba, //0x00009c78 .quad -4980796165745715438 + 0x4b, 0xc9, 0x3f, 0x70, 0x38, 0xa4, 0xd1, 0x2b, //0x00009c80 .quad 3157485376071780683 + 0xd7, 0xac, 0x9f, 0x86, 0x58, 0xd2, 0x98, 0xe9, //0x00009c88 .quad -1614309188754756393 + 0xcf, 0xdd, 0x27, 0x46, 0xa3, 0x06, 0x63, 0x7b, //0x00009c90 .quad 8890957387685944783 + 0x06, 0xcc, 0x23, 0x54, 0x77, 0x83, 0xff, 0x91, //0x00009c98 .quad -7926472270612804602 + 0x42, 0xd5, 0xb1, 0x17, 0x4c, 0xc8, 0x3b, 0x1a, //0x00009ca0 .quad 1890324697752655170 + 0x08, 0xbf, 0x2c, 0x29, 0x55, 0x64, 0x7f, 0xb6, //0x00009ca8 .quad -5296404319838617848 + 0x93, 0x4a, 0x9e, 0x1d, 0x5f, 0xba, 0xca, 0x20, //0x00009cb0 .quad 2362905872190818963 + 0xca, 0xee, 0x77, 0x73, 0x6a, 0x3d, 0x1f, 0xe4, //0x00009cb8 .quad -2008819381370884406 + 0x9c, 0xee, 0x82, 0x72, 0x7b, 0xb4, 0x7e, 0x54, //0x00009cc0 .quad 6088502188546649756 + 0x3e, 0xf5, 0x2a, 0x88, 0x62, 0x86, 0x93, 0x8e, //0x00009cc8 .quad -8173041140997884610 + 0x43, 0xaa, 0x23, 0x4f, 0x9a, 0x61, 0x9e, 0xe9, //0x00009cd0 .quad -1612744301171463613 + 0x8d, 0xb2, 0x35, 0x2a, 0xfb, 0x67, 0x38, 0xb2, //0x00009cd8 .quad -5604615407819967859 + 0xd4, 0x94, 0xec, 0xe2, 0x00, 0xfa, 0x05, 0x64, //0x00009ce0 .quad 7207441660390446292 + 0x31, 0x1f, 0xc3, 0xf4, 0xf9, 0x81, 0xc6, 0xde, //0x00009ce8 .quad -2394083241347571919 + 0x04, 0xdd, 0xd3, 0x8d, 0x40, 0xbc, 0x83, 0xde, //0x00009cf0 .quad -2412877989897052924 + 0x7e, 0xf3, 0xf9, 0x38, 0x3c, 0x11, 0x3c, 0x8b, //0x00009cf8 .quad -8413831053483314306 + 0x45, 0xd4, 0x48, 0xb1, 0x50, 0xab, 0x24, 0x96, //0x00009d00 .quad -7627783505798704059 + 0x5e, 0x70, 0x38, 0x47, 0x8b, 0x15, 0x0b, 0xae, //0x00009d08 .quad -5905602798426754978 + 0x57, 0x09, 0x9b, 0xdd, 0x24, 0xd6, 0xad, 0x3b, //0x00009d10 .quad 4300328673033783639 + 0x76, 0x8c, 0x06, 0x19, 0xee, 0xda, 0x8d, 0xd9, //0x00009d18 .quad -2770317479606055818 + 0xd6, 0xe5, 0x80, 0x0a, 0xd7, 0xa5, 0x4c, 0xe5, //0x00009d20 .quad -1923980597781273130 + 0xc9, 0x17, 0xa4, 0xcf, 0xd4, 0xa8, 0xf8, 0x87, //0x00009d28 .quad -8648977452394866743 + 0x4c, 0x1f, 0x21, 0xcd, 0x4c, 0xcf, 0x9f, 0x5e, //0x00009d30 .quad 6818396289628184396 + 0xbc, 0x1d, 0x8d, 0x03, 0x0a, 0xd3, 0xf6, 0xa9, //0x00009d38 .quad -6199535797066195524 + 0x1f, 0x67, 0x69, 0x00, 0x20, 0xc3, 0x47, 0x76, //0x00009d40 .quad 8522995362035230495 + 0x2b, 0x65, 0x70, 0x84, 0xcc, 0x87, 0x74, 0xd4, //0x00009d48 .quad -3137733727905356501 + 0x73, 0xe0, 0x41, 0x00, 0xf4, 0xd9, 0xec, 0x29, //0x00009d50 .quad 3021029092058325107 + 0x3b, 0x3f, 0xc6, 0xd2, 0xdf, 0xd4, 0xc8, 0x84, //0x00009d58 .quad -8878612607581929669 + 0x90, 0x58, 0x52, 0x00, 0x71, 0x10, 0x68, 0xf4, //0x00009d60 .quad -835399653354481520 + 0x09, 0xcf, 0x77, 0xc7, 0x17, 0x0a, 0xfb, 0xa5, //0x00009d68 .quad -6486579741050024183 + 0xb4, 0xee, 0x66, 0x40, 0x8d, 0x14, 0x82, 0x71, //0x00009d70 .quad 8179122470161673908 + 0xcc, 0xc2, 0x55, 0xb9, 0x9d, 0xcc, 0x79, 0xcf, //0x00009d78 .quad -3496538657885142324 + 0x30, 0x55, 0x40, 0x48, 0xd8, 0x4c, 0xf1, 0xc6, //0x00009d80 .quad -4111420493003729616 + 0xbf, 0x99, 0xd5, 0x93, 0xe2, 0x1f, 0xac, 0x81, //0x00009d88 .quad -9102865688819295809 + 0x7c, 0x6a, 0x50, 0x5a, 0x0e, 0xa0, 0xad, 0xb8, //0x00009d90 .quad -5139275616254662020 + 0x2f, 0x00, 0xcb, 0x38, 0xdb, 0x27, 0x17, 0xa2, //0x00009d98 .quad -6766896092596731857 + 0x1c, 0x85, 0xe4, 0xf0, 0x11, 0x08, 0xd9, 0xa6, //0x00009da0 .quad -6424094520318327524 + 0x3b, 0xc0, 0xfd, 0x06, 0xd2, 0xf1, 0x9c, 0xca, //0x00009da8 .quad -3846934097318526917 + 0x63, 0xa6, 0x1d, 0x6d, 0x16, 0x4a, 0x8f, 0x90, //0x00009db0 .quad -8030118150397909405 + 0x4a, 0x30, 0xbd, 0x88, 0x46, 0x2e, 0x44, 0xfd, //0x00009db8 .quad -196981603220770742 + 0xfe, 0x87, 0x32, 0x04, 0x4e, 0x8e, 0x59, 0x9a, //0x00009dc0 .quad -7324666853212387330 + 0x2e, 0x3e, 0x76, 0x15, 0xec, 0x9c, 0x4a, 0x9e, //0x00009dc8 .quad -7040642529654063570 + 0xfd, 0x29, 0x3f, 0x85, 0xe1, 0xf1, 0xef, 0x40, //0x00009dd0 .quad 4679224488766679549 + 0xba, 0xcd, 0xd3, 0x1a, 0x27, 0x44, 0xdd, 0xc5, //0x00009dd8 .quad -4189117143640191558 + 0x7c, 0xf4, 0x8e, 0xe6, 0x59, 0xee, 0x2b, 0xd1, //0x00009de0 .quad -3374341425896426372 + 0x28, 0xc1, 0x88, 0xe1, 0x30, 0x95, 0x54, 0xf7, //0x00009de8 .quad -624710411122851544 + 0xce, 0x58, 0x19, 0x30, 0xf8, 0x74, 0xbb, 0x82, //0x00009df0 .quad -9026492418826348338 + 0xb9, 0x78, 0xf5, 0x8c, 0x3e, 0xdd, 0x94, 0x9a, //0x00009df8 .quad -7307973034592864071 + 0x01, 0xaf, 0x1f, 0x3c, 0x36, 0x52, 0x6a, 0xe3, //0x00009e00 .quad -2059743486678159615 + 0xe7, 0xd6, 0x32, 0x30, 0x8e, 0x14, 0x3a, 0xc1, //0x00009e08 .quad -4523280274813692185 + 0xc1, 0x9a, 0x27, 0xcb, 0xc3, 0xe6, 0x44, 0xdc, //0x00009e10 .quad -2574679358347699519 + 0xa1, 0x8c, 0x3f, 0xbc, 0xb1, 0x99, 0x88, 0xf1, //0x00009e18 .quad -1042414325089727327 + 0xb9, 0xc0, 0xf8, 0x5e, 0x3a, 0x10, 0xab, 0x29, //0x00009e20 .quad 3002511419460075705 + 0xe5, 0xb7, 0xa7, 0x15, 0x0f, 0x60, 0xf5, 0x96, //0x00009e28 .quad -7569037980822161435 + 0xe7, 0xf0, 0xb6, 0xf6, 0x48, 0xd4, 0x15, 0x74, //0x00009e30 .quad 8364825292752482535 + 0xde, 0xa5, 0x11, 0xdb, 0x12, 0xb8, 0xb2, 0xbc, //0x00009e38 .quad -4849611457600313890 + 0x21, 0xad, 0x64, 0x34, 0x5b, 0x49, 0x1b, 0x11, //0x00009e40 .quad 1232659579085827361 + 0x56, 0x0f, 0xd6, 0x91, 0x17, 0x66, 0xdf, 0xeb, //0x00009e48 .quad -1450328303573004458 + 0x34, 0xec, 0xbe, 0x00, 0xd9, 0x0d, 0xb1, 0xca, //0x00009e50 .quad -3841273781498745804 + 0x95, 0xc9, 0x25, 0xbb, 0xce, 0x9f, 0x6b, 0x93, //0x00009e58 .quad -7823984217374209643 + 0x42, 0xa7, 0xee, 0x40, 0x4f, 0x51, 0x5d, 0x3d, //0x00009e60 .quad 4421779809981343554 + 0xfb, 0x3b, 0xef, 0x69, 0xc2, 0x87, 0x46, 0xb8, //0x00009e68 .quad -5168294253290374149 + 0x12, 0x51, 0x2a, 0x11, 0xa3, 0xa5, 0xb4, 0x0c, //0x00009e70 .quad 915538744049291538 + 0xfa, 0x0a, 0x6b, 0x04, 0xb3, 0x29, 0x58, 0xe6, //0x00009e78 .quad -1848681798185579782 + 0xab, 0x72, 0xba, 0xea, 0x85, 0xe7, 0xf0, 0x47, //0x00009e80 .quad 5183897733458195115 + 0xdc, 0xe6, 0xc2, 0xe2, 0x0f, 0x1a, 0xf7, 0x8f, //0x00009e88 .quad -8072955151507069220 + 0x56, 0x0f, 0x69, 0x65, 0x67, 0x21, 0xed, 0x59, //0x00009e90 .quad 6479872166822743894 + 0x93, 0xa0, 0x73, 0xdb, 0x93, 0xe0, 0xf4, 0xb3, //0x00009e98 .quad -5479507920956448621 + 0x2c, 0x53, 0xc3, 0x3e, 0xc1, 0x69, 0x68, 0x30, //0x00009ea0 .quad 3488154190101041964 + 0xb8, 0x88, 0x50, 0xd2, 0xb8, 0x18, 0xf2, 0xe0, //0x00009ea8 .quad -2237698882768172872 + 0xfb, 0x13, 0x3a, 0xc7, 0x18, 0x42, 0x41, 0x1e, //0x00009eb0 .quad 2180096368813151227 + 0x73, 0x55, 0x72, 0x83, 0x73, 0x4f, 0x97, 0x8c, //0x00009eb8 .quad -8316090829371189901 + 0xfa, 0x98, 0x08, 0xf9, 0x9e, 0x92, 0xd1, 0xe5, //0x00009ec0 .quad -1886565557410948870 + 0xcf, 0xea, 0x4e, 0x64, 0x50, 0x23, 0xbd, 0xaf, //0x00009ec8 .quad -5783427518286599473 + 0x39, 0xbf, 0x4a, 0xb7, 0x46, 0xf7, 0x45, 0xdf, //0x00009ed0 .quad -2358206946763686087 + 0x83, 0xa5, 0x62, 0x7d, 0x24, 0x6c, 0xac, 0xdb, //0x00009ed8 .quad -2617598379430861437 + 0x83, 0xb7, 0x8e, 0x32, 0x8c, 0xba, 0x8b, 0x6b, //0x00009ee0 .quad 7749492695127472003 + 0x72, 0xa7, 0x5d, 0xce, 0x96, 0xc3, 0x4b, 0x89, //0x00009ee8 .quad -8553528014785370254 + 0x64, 0x65, 0x32, 0x3f, 0x2f, 0xa9, 0x6e, 0x06, //0x00009ef0 .quad 463493832054564196 + 0x4f, 0x11, 0xf5, 0x81, 0x7c, 0xb4, 0x9e, 0xab, //0x00009ef8 .quad -6080224000054324913 + 0xbd, 0xfe, 0xfe, 0x0e, 0x7b, 0x53, 0x0a, 0xc8, //0x00009f00 .quad -4032318728359182659 + 0xa2, 0x55, 0x72, 0xa2, 0x9b, 0x61, 0x86, 0xd6, //0x00009f08 .quad -2988593981640518238 + 0x36, 0x5f, 0x5f, 0xe9, 0x2c, 0x74, 0x06, 0xbd, //0x00009f10 .quad -4826042214438183114 + 0x85, 0x75, 0x87, 0x45, 0x01, 0xfd, 0x13, 0x86, //0x00009f18 .quad -8785400266166405755 + 0x04, 0x37, 0xb7, 0x23, 0x38, 0x11, 0x48, 0x2c, //0x00009f20 .quad 3190819268807046916 + 0xe7, 0x52, 0xe9, 0x96, 0x41, 0xfc, 0x98, 0xa7, //0x00009f28 .quad -6370064314280619289 + 0xc5, 0x04, 0xa5, 0x2c, 0x86, 0x15, 0x5a, 0xf7, //0x00009f30 .quad -623161932418579259 + 0xa0, 0xa7, 0xa3, 0xfc, 0x51, 0x3b, 0x7f, 0xd1, //0x00009f38 .quad -3350894374423386208 + 0xfb, 0x22, 0xe7, 0xdb, 0x73, 0x4d, 0x98, 0x9a, //0x00009f40 .quad -7307005235402693893 + 0xc4, 0x48, 0xe6, 0x3d, 0x13, 0x85, 0xef, 0x82, //0x00009f48 .quad -9011838011655698236 + 0xba, 0xeb, 0xe0, 0xd2, 0xd0, 0x60, 0x3e, 0xc1, //0x00009f50 .quad -4522070525825979462 + 0xf5, 0xda, 0x5f, 0x0d, 0x58, 0x66, 0xab, 0xa3, //0x00009f58 .quad -6653111496142234891 + 0xa8, 0x26, 0x99, 0x07, 0x05, 0xf9, 0x8d, 0x31, //0x00009f60 .quad 3570783879572301480 + 0xb3, 0xd1, 0xb7, 0x10, 0xee, 0x3f, 0x96, 0xcc, //0x00009f68 .quad -3704703351750405709 + 0x52, 0x70, 0x7f, 0x49, 0x46, 0x77, 0xf1, 0xfd, //0x00009f70 .quad -148206168962011054 + 0x1f, 0xc6, 0xe5, 0x94, 0xe9, 0xcf, 0xbb, 0xff, //0x00009f78 .quad -19193171260619233 + 0x33, 0xa6, 0xef, 0xed, 0x8b, 0xea, 0xb6, 0xfe, //0x00009f80 .quad -92628855601256909 + 0xd3, 0x9b, 0x0f, 0xfd, 0xf1, 0x61, 0xd5, 0x9f, //0x00009f88 .quad -6929524759678968877 + 0xc0, 0x8f, 0x6b, 0xe9, 0x2e, 0xa5, 0x64, 0xfe, //0x00009f90 .quad -115786069501571136 + 0xc8, 0x82, 0x53, 0x7c, 0x6e, 0xba, 0xca, 0xc7, //0x00009f98 .quad -4050219931171323192 + 0xb0, 0x73, 0xc6, 0xa3, 0x7a, 0xce, 0xfd, 0x3d, //0x00009fa0 .quad 4466953431550423984 + 0x7b, 0x63, 0x68, 0x1b, 0x0a, 0x69, 0xbd, 0xf9, //0x00009fa8 .quad -451088895536766085 + 0x4e, 0x08, 0x5c, 0xa6, 0x0c, 0xa1, 0xbe, 0x06, //0x00009fb0 .quad 486002885505321038 + 0x2d, 0x3e, 0x21, 0x51, 0xa6, 0x61, 0x16, 0x9c, //0x00009fb8 .quad -7199459587351560659 + 0x62, 0x0a, 0xf3, 0xcf, 0x4f, 0x49, 0x6e, 0x48, //0x00009fc0 .quad 5219189625309039202 + 0xb8, 0x8d, 0x69, 0xe5, 0x0f, 0xfa, 0x1b, 0xc3, //0x00009fc8 .quad -4387638465762062920 + 0xfa, 0xcc, 0xef, 0xc3, 0xa3, 0xdb, 0x89, 0x5a, //0x00009fd0 .quad 6523987031636299002 + 0x26, 0xf1, 0xc3, 0xde, 0x93, 0xf8, 0xe2, 0xf3, //0x00009fd8 .quad -872862063775190746 + 0x1c, 0xe0, 0x75, 0x5a, 0x46, 0x29, 0x96, 0xf8, //0x00009fe0 .quad -534194123654701028 + 0xb7, 0x76, 0x3a, 0x6b, 0x5c, 0xdb, 0x6d, 0x98, //0x00009fe8 .quad -7463067817500576073 + 0x23, 0x58, 0x13, 0xf1, 0x97, 0xb3, 0xbb, 0xf6, //0x00009ff0 .quad -667742654568376285 + 0x65, 0x14, 0x09, 0x86, 0x33, 0x52, 0x89, 0xbe, //0x00009ff8 .quad -4717148753448332187 + 0x2c, 0x2e, 0x58, 0xed, 0x7d, 0xa0, 0x6a, 0x74, //0x0000a000 .quad 8388693718644305452 + 0x7f, 0x59, 0x8b, 0x67, 0xc0, 0xa6, 0x2b, 0xee, //0x0000a008 .quad -1284749923383027329 + 0xdc, 0x1c, 0x57, 0xb4, 0x4e, 0xa4, 0xc2, 0xa8, //0x0000a010 .quad -6286281471915778852 + 0xef, 0x17, 0xb7, 0x40, 0x38, 0x48, 0xdb, 0x94, //0x0000a018 .quad -7720497729755473937 + 0x13, 0xe4, 0x6c, 0x61, 0x62, 0x4d, 0xf3, 0x92, //0x0000a020 .quad -7857851839894723565 + 0xeb, 0xdd, 0xe4, 0x50, 0x46, 0x1a, 0x12, 0xba, //0x0000a028 .quad -5038936143766954517 + 0x17, 0x1d, 0xc8, 0xf9, 0xba, 0x20, 0xb0, 0x77, //0x0000a030 .quad 8624429273841147159 + 0x66, 0x15, 0x1e, 0xe5, 0xd7, 0xa0, 0x96, 0xe8, //0x0000a038 .quad -1686984161281305242 + 0x2e, 0x12, 0x1d, 0xdc, 0x74, 0x14, 0xce, 0x0a, //0x0000a040 .quad 778582277723329070 + 0x60, 0xcd, 0x32, 0xef, 0x86, 0x24, 0x5e, 0x91, //0x0000a048 .quad -7971894128441897632 + 0xba, 0x56, 0x24, 0x13, 0x92, 0x99, 0x81, 0x0d, //0x0000a050 .quad 973227847154161338 + 0xb8, 0x80, 0xff, 0xaa, 0xa8, 0xad, 0xb5, 0xb5, //0x0000a058 .quad -5353181642124984136 + 0x69, 0x6c, 0xed, 0x97, 0xf6, 0xff, 0xe1, 0x10, //0x0000a060 .quad 1216534808942701673 + 0xe6, 0x60, 0xbf, 0xd5, 0x12, 0x19, 0x23, 0xe3, //0x0000a068 .quad -2079791034228842266 + 0xc1, 0x63, 0xf4, 0x1e, 0xfa, 0x3f, 0x8d, 0xca, //0x0000a070 .quad -3851351762838199359 + 0x8f, 0x9c, 0x97, 0xc5, 0xab, 0xef, 0xf5, 0x8d, //0x0000a078 .quad -8217398424034108273 + 0xb2, 0x7c, 0xb1, 0xa6, 0xf8, 0x8f, 0x30, 0xbd, //0x0000a080 .quad -4814189703547749198 + 0xb3, 0x83, 0xfd, 0xb6, 0x96, 0x6b, 0x73, 0xb1, //0x0000a088 .quad -5660062011615247437 + 0xde, 0xdb, 0x5d, 0xd0, 0xf6, 0xb3, 0x7c, 0xac, //0x0000a090 .quad -6017737129434686498 + 0xa0, 0xe4, 0xbc, 0x64, 0x7c, 0x46, 0xd0, 0xdd, //0x0000a098 .quad -2463391496091671392 + 0x6b, 0xa9, 0x3a, 0x42, 0x7a, 0xf0, 0xcd, 0x6b, //0x0000a0a0 .quad 7768129340171790699 + 0xe4, 0x0e, 0xf6, 0xbe, 0x0d, 0x2c, 0xa2, 0x8a, //0x0000a0a8 .quad -8457148712698376476 + 0xc6, 0x53, 0xc9, 0xd2, 0x98, 0x6c, 0xc1, 0x86, //0x0000a0b0 .quad -8736582398494813242 + 0x9d, 0x92, 0xb3, 0x2e, 0x11, 0xb7, 0x4a, 0xad, //0x0000a0b8 .quad -5959749872445582691 + 0xb7, 0xa8, 0x7b, 0x07, 0xbf, 0xc7, 0x71, 0xe8, //0x0000a0c0 .quad -1697355961263740745 + 0x44, 0x77, 0x60, 0x7a, 0xd5, 0x64, 0x9d, 0xd8, //0x0000a0c8 .quad -2838001322129590460 + 0x72, 0x49, 0xad, 0x64, 0xd7, 0x1c, 0x47, 0x11, //0x0000a0d0 .quad 1244995533423855986 + 0x8b, 0x4a, 0x7c, 0x6c, 0x05, 0x5f, 0x62, 0x87, //0x0000a0d8 .quad -8691279853972075893 + 0xcf, 0x9b, 0xd8, 0x3d, 0x0d, 0xe4, 0x98, 0xd5, //0x0000a0e0 .quad -3055441601647567921 + 0x2d, 0x5d, 0x9b, 0xc7, 0xc6, 0xf6, 0x3a, 0xa9, //0x0000a0e8 .quad -6252413799037706963 + 0xc3, 0xc2, 0x4e, 0x8d, 0x10, 0x1d, 0xff, 0x4a, //0x0000a0f0 .quad 5404070034795315907 + 0x79, 0x34, 0x82, 0x79, 0x78, 0xb4, 0x89, 0xd3, //0x0000a0f8 .quad -3203831230369745799 + 0xba, 0x39, 0x51, 0x58, 0x2a, 0x72, 0xdf, 0xce, //0x0000a100 .quad -3539985255894009414 + 0xcb, 0x60, 0xf1, 0x4b, 0xcb, 0x10, 0x36, 0x84, //0x0000a108 .quad -8919923546622172981 + 0x28, 0x88, 0x65, 0xee, 0xb4, 0x4e, 0x97, 0xc2, //0x0000a110 .quad -4424981569867511768 + 0xfe, 0xb8, 0xed, 0x1e, 0xfe, 0x94, 0x43, 0xa5, //0x0000a118 .quad -6538218414850328322 + 0x32, 0xea, 0xfe, 0x29, 0x62, 0x22, 0x3d, 0x73, //0x0000a120 .quad 8303831092947774002 + 0x3e, 0x27, 0xa9, 0xa6, 0x3d, 0x7a, 0x94, 0xce, //0x0000a128 .quad -3561087000135522498 + 0x5f, 0x52, 0x3f, 0x5a, 0x7d, 0x35, 0x06, 0x08, //0x0000a130 .quad 578208414664970847 + 0x87, 0xb8, 0x29, 0x88, 0x66, 0xcc, 0x1c, 0x81, //0x0000a138 .quad -9143208402725783417 + 0xf7, 0x26, 0xcf, 0xb0, 0xdc, 0xc2, 0x07, 0xca, //0x0000a140 .quad -3888925500096174345 + 0xa8, 0x26, 0x34, 0x2a, 0x80, 0xff, 0x63, 0xa1, //0x0000a148 .quad -6817324484979841368 + 0xb5, 0xf0, 0x02, 0xdd, 0x93, 0xb3, 0x89, 0xfc, //0x0000a150 .quad -249470856692830027 + 0x52, 0x30, 0xc1, 0x34, 0x60, 0xff, 0xbc, 0xc9, //0x0000a158 .quad -3909969587797413806 + 0xe2, 0xac, 0x43, 0xd4, 0x78, 0x20, 0xac, 0xbb, //0x0000a160 .quad -4923524589293425438 + 0x67, 0x7c, 0xf1, 0x41, 0x38, 0x3f, 0x2c, 0xfc, //0x0000a168 .quad -275775966319379353 + 0x0d, 0x4c, 0xaa, 0x84, 0x4b, 0x94, 0x4b, 0xd5, //0x0000a170 .quad -3077202868308390899 + 0xc0, 0xed, 0x36, 0x29, 0x83, 0xa7, 0x9b, 0x9d, //0x0000a178 .quad -7089889006590693952 + 0x11, 0xdf, 0xd4, 0x65, 0x5e, 0x79, 0x9e, 0x0a, //0x0000a180 .quad 765182433041899281 + 0x31, 0xa9, 0x84, 0xf3, 0x63, 0x91, 0x02, 0xc5, //0x0000a188 .quad -4250675239810979535 + 0xd5, 0x16, 0x4a, 0xff, 0xb5, 0x17, 0x46, 0x4d, //0x0000a190 .quad 5568164059729762005 + 0x7d, 0xd3, 0x65, 0xf0, 0xbc, 0x35, 0x43, 0xf6, //0x0000a198 .quad -701658031336336515 + 0x45, 0x4e, 0x8e, 0xbf, 0xd1, 0xce, 0x4b, 0x50, //0x0000a1a0 .quad 5785945546544795205 + 0x2e, 0xa4, 0x3f, 0x16, 0x96, 0x01, 0xea, 0x99, //0x0000a1a8 .quad -7356065297226292178 + 0xd6, 0xe1, 0x71, 0x2f, 0x86, 0xc2, 0x5e, 0xe4, //0x0000a1b0 .quad -1990940103673781802 + 0x39, 0x8d, 0xcf, 0x9b, 0xfb, 0x81, 0x64, 0xc0, //0x0000a1b8 .quad -4583395603105477319 + 0x4c, 0x5a, 0x4e, 0xbb, 0x27, 0x73, 0x76, 0x5d, //0x0000a1c0 .quad 6734696907262548556 + 0x88, 0x70, 0xc3, 0x82, 0x7a, 0xa2, 0x7d, 0xf0, //0x0000a1c8 .quad -1117558485454458744 + 0x6f, 0xf8, 0x10, 0xd5, 0xf8, 0x07, 0x6a, 0x3a, //0x0000a1d0 .quad 4209185567039092847 + 0x55, 0x26, 0xba, 0x91, 0x8c, 0x85, 0x4e, 0x96, //0x0000a1d8 .quad -7616003081050118571 + 0x8b, 0x36, 0x55, 0x0a, 0xf7, 0x89, 0x04, 0x89, //0x0000a1e0 .quad -8573576096483297653 + 0xea, 0xaf, 0x28, 0xb6, 0xef, 0x26, 0xe2, 0xbb, //0x0000a1e8 .quad -4908317832885260310 + 0x2e, 0x84, 0xea, 0xcc, 0x74, 0xac, 0x45, 0x2b, //0x0000a1f0 .quad 3118087934678041646 + 0xe5, 0xdb, 0xb2, 0xa3, 0xab, 0xb0, 0xda, 0xea, //0x0000a1f8 .quad -1523711272679187483 + 0x9d, 0x92, 0x12, 0x00, 0xc9, 0x8b, 0x0b, 0x3b, //0x0000a200 .quad 4254647968387469981 + 0x6f, 0xc9, 0x4f, 0x46, 0x6b, 0xae, 0xc8, 0x92, //0x0000a208 .quad -7869848573065574033 + 0x44, 0x37, 0x17, 0x40, 0xbb, 0x6e, 0xce, 0x09, //0x0000a210 .quad 706623942056949572 + 0xcb, 0xbb, 0xe3, 0x17, 0x06, 0xda, 0x7a, 0xb7, //0x0000a218 .quad -5225624697904579637 + 0x15, 0x05, 0x1d, 0x10, 0x6a, 0x0a, 0x42, 0xcc, //0x0000a220 .quad -3728406090856200939 + 0xbd, 0xaa, 0xdc, 0x9d, 0x87, 0x90, 0x59, 0xe5, //0x0000a228 .quad -1920344853953336643 + 0x2d, 0x23, 0x12, 0x4a, 0x82, 0x46, 0xa9, 0x9f, //0x0000a230 .quad -6941939825212513491 + 0xb6, 0xea, 0xa9, 0xc2, 0x54, 0xfa, 0x57, 0x8f, //0x0000a238 .quad -8117744561361917258 + 0xf9, 0xab, 0x96, 0xdc, 0x22, 0x98, 0x93, 0x47, //0x0000a240 .quad 5157633273766521849 + 0x64, 0x65, 0x54, 0xf3, 0xe9, 0xf8, 0x2d, 0xb3, //0x0000a248 .quad -5535494683275008668 + 0xf7, 0x56, 0xbc, 0x93, 0x2b, 0x7e, 0x78, 0x59, //0x0000a250 .quad 6447041592208152311 + 0xbd, 0x7e, 0x29, 0x70, 0x24, 0x77, 0xf9, 0xdf, //0x0000a258 .quad -2307682335666372931 + 0x5a, 0xb6, 0x55, 0x3c, 0xdb, 0x4e, 0xeb, 0x57, //0x0000a260 .quad 6335244004343789146 + 0x36, 0xef, 0x19, 0xc6, 0x76, 0xea, 0xfb, 0x8b, //0x0000a268 .quad -8359830487432564938 + 0xf1, 0x23, 0x6b, 0x0b, 0x92, 0x22, 0xe6, 0xed, //0x0000a270 .quad -1304317031425039375 + 0x03, 0x6b, 0xa0, 0x77, 0x14, 0xe5, 0xfa, 0xae, //0x0000a278 .quad -5838102090863318269 + 0xed, 0xec, 0x45, 0x8e, 0x36, 0xab, 0x5f, 0xe9, //0x0000a280 .quad -1630396289281299219 + 0xc4, 0x85, 0x88, 0x95, 0x59, 0x9e, 0xb9, 0xda, //0x0000a288 .quad -2685941595151759932 + 0x14, 0xb4, 0xeb, 0x18, 0x02, 0xcb, 0xdb, 0x11, //0x0000a290 .quad 1286845328412881940 + 0x9b, 0x53, 0x75, 0xfd, 0xf7, 0x02, 0xb4, 0x88, //0x0000a298 .quad -8596242524610931813 + 0x19, 0xa1, 0x26, 0x9f, 0xc2, 0xbd, 0x52, 0xd6, //0x0000a2a0 .quad -3003129357911285479 + 0x81, 0xa8, 0xd2, 0xfc, 0xb5, 0x03, 0xe1, 0xaa, //0x0000a2a8 .quad -6133617137336276863 + 0x5f, 0x49, 0xf0, 0x46, 0x33, 0x6d, 0xe7, 0x4b, //0x0000a2b0 .quad 5469460339465668959 + 0xa2, 0x52, 0x07, 0x7c, 0xa3, 0x44, 0x99, 0xd5, //0x0000a2b8 .quad -3055335403242958174 + 0xdb, 0x2d, 0x56, 0x0c, 0x40, 0xa4, 0x70, 0x6f, //0x0000a2c0 .quad 8030098730593431003 + 0xa5, 0x93, 0x84, 0x2d, 0xe6, 0xca, 0x7f, 0x85, //0x0000a2c8 .quad -8827113654667930715 + 0x52, 0xb9, 0x6b, 0x0f, 0x50, 0xcd, 0x4c, 0xcb, //0x0000a2d0 .quad -3797434642040374958 + 0x8e, 0xb8, 0xe5, 0xb8, 0x9f, 0xbd, 0xdf, 0xa6, //0x0000a2d8 .quad -6422206049907525490 + 0xa7, 0xa7, 0x46, 0x13, 0xa4, 0x00, 0x20, 0x7e, //0x0000a2e0 .quad 9088264752731695015 + 0xb2, 0x26, 0x1f, 0xa7, 0x07, 0xad, 0x97, 0xd0, //0x0000a2e8 .quad -3416071543957018958 + 0xc8, 0x28, 0x0c, 0x8c, 0x66, 0x00, 0xd4, 0x8e, //0x0000a2f0 .quad -8154892584824854328 + 0x2f, 0x78, 0x73, 0xc8, 0x24, 0xcc, 0x5e, 0x82, //0x0000a2f8 .quad -9052573742614218705 + 0xfa, 0x32, 0x0f, 0x2f, 0x80, 0x00, 0x89, 0x72, //0x0000a300 .quad 8253128342678483706 + 0x3b, 0x56, 0x90, 0xfa, 0x2d, 0x7f, 0xf6, 0xa2, //0x0000a308 .quad -6704031159840385477 + 0xb9, 0xff, 0xd2, 0x3a, 0xa0, 0x40, 0x2b, 0x4f, //0x0000a310 .quad 5704724409920716729 + 0xca, 0x6b, 0x34, 0x79, 0xf9, 0x1e, 0xb4, 0xcb, //0x0000a318 .quad -3768352931373093942 + 0xa8, 0xbf, 0x87, 0x49, 0xc8, 0x10, 0xf6, 0xe2, //0x0000a320 .quad -2092466524453879896 + 0xbc, 0x86, 0x81, 0xd7, 0xb7, 0x26, 0xa1, 0xfe, //0x0000a328 .quad -98755145788979524 + 0xc9, 0xd7, 0xf4, 0x2d, 0x7d, 0xca, 0xd9, 0x0d, //0x0000a330 .quad 998051431430019017 + 0x36, 0xf4, 0xb0, 0xe6, 0x32, 0xb8, 0x24, 0x9f, //0x0000a338 .quad -6979250993759194058 + 0xbb, 0x0d, 0x72, 0x79, 0x1c, 0x3d, 0x50, 0x91, //0x0000a340 .quad -7975807747567252037 + 0x43, 0x31, 0x5d, 0xa0, 0x3f, 0xe6, 0xed, 0xc6, //0x0000a348 .quad -4112377723771604669 + 0x2a, 0x91, 0xce, 0x97, 0x63, 0x4c, 0xa4, 0x75, //0x0000a350 .quad 8476984389250486570 + 0x94, 0x7d, 0x74, 0x88, 0xcf, 0x5f, 0xa9, 0xf8, //0x0000a358 .quad -528786136287117932 + 0xba, 0x1a, 0xe1, 0x3e, 0xbe, 0xaf, 0x86, 0xc9, //0x0000a360 .quad -3925256793573221702 + 0x7c, 0xce, 0x48, 0xb5, 0xe1, 0xdb, 0x69, 0x9b, //0x0000a368 .quad -7248020362820530564 + 0x68, 0x61, 0x99, 0xce, 0xad, 0x5b, 0xe8, 0xfb, //0x0000a370 .quad -294884973539139224 + 0x1b, 0x02, 0x9b, 0x22, 0xda, 0x52, 0x44, 0xc2, //0x0000a378 .quad -4448339435098275301 + 0xc3, 0xb9, 0x3f, 0x42, 0x99, 0x72, 0xe2, 0xfa, //0x0000a380 .quad -368606216923924029 + 0xa2, 0xc2, 0x41, 0xab, 0x90, 0x67, 0xd5, 0xf2, //0x0000a388 .quad -948738275445456222 + 0x1a, 0xd4, 0x67, 0xc9, 0x9f, 0x87, 0xcd, 0xdc, //0x0000a390 .quad -2536221894791146470 + 0xa5, 0x19, 0x09, 0x6b, 0xba, 0x60, 0xc5, 0x97, //0x0000a398 .quad -7510490449794491995 + 0x20, 0xc9, 0xc1, 0xbb, 0x87, 0xe9, 0x00, 0x54, //0x0000a3a0 .quad 6053094668365842720 + 0x0f, 0x60, 0xcb, 0x05, 0xe9, 0xb8, 0xb6, 0xbd, //0x0000a3a8 .quad -4776427043815727089 + 0x68, 0x3b, 0xb2, 0xaa, 0xe9, 0x23, 0x01, 0x29, //0x0000a3b0 .quad 2954682317029915496 + 0x13, 0x38, 0x3e, 0x47, 0x23, 0x67, 0x24, 0xed, //0x0000a3b8 .quad -1358847786342270957 + 0x21, 0x65, 0xaf, 0x0a, 0x72, 0xb6, 0xa0, 0xf9, //0x0000a3c0 .quad -459166561069996767 + 0x0b, 0xe3, 0x86, 0x0c, 0x76, 0xc0, 0x36, 0x94, //0x0000a3c8 .quad -7766808894105001205 + 0x69, 0x3e, 0x5b, 0x8d, 0x0e, 0xe4, 0x08, 0xf8, //0x0000a3d0 .quad -573958201337495959 + 0xce, 0x9b, 0xa8, 0x8f, 0x93, 0x70, 0x44, 0xb9, //0x0000a3d8 .quad -5096825099203863602 + 0x04, 0x0e, 0xb2, 0x30, 0x12, 0x1d, 0x0b, 0xb6, //0x0000a3e0 .quad -5329133770099257852 + 0xc2, 0xc2, 0x92, 0x73, 0xb8, 0x8c, 0x95, 0xe7, //0x0000a3e8 .quad -1759345355577441598 + 0xc2, 0x48, 0x6f, 0x5e, 0x2b, 0xf2, 0xc6, 0xb1, //0x0000a3f0 .quad -5636551615525730110 + 0xb9, 0xb9, 0x3b, 0x48, 0xf3, 0x77, 0xbd, 0x90, //0x0000a3f8 .quad -8017119874876982855 + 0xf3, 0x1a, 0x0b, 0x36, 0xb6, 0xae, 0x38, 0x1e, //0x0000a400 .quad 2177682517447613171 + 0x28, 0xa8, 0x4a, 0x1a, 0xf0, 0xd5, 0xec, 0xb4, //0x0000a408 .quad -5409713825168840664 + 0xb0, 0xe1, 0x8d, 0xc3, 0x63, 0xda, 0xc6, 0x25, //0x0000a410 .quad 2722103146809516464 + 0x32, 0x52, 0xdd, 0x20, 0x6c, 0x0b, 0x28, 0xe2, //0x0000a418 .quad -2150456263033662926 + 0x0e, 0xad, 0x38, 0x5a, 0x7e, 0x48, 0x9c, 0x57, //0x0000a420 .quad 6313000485183335694 + 0x5f, 0x53, 0x8a, 0x94, 0x23, 0x07, 0x59, 0x8d, //0x0000a428 .quad -8261564192037121185 + 0x51, 0xd8, 0xc6, 0xf0, 0x9d, 0x5a, 0x83, 0x2d, //0x0000a430 .quad 3279564588051781713 + 0x37, 0xe8, 0xac, 0x79, 0xec, 0x48, 0xaf, 0xb0, //0x0000a438 .quad -5715269221619013577 + 0x65, 0x8e, 0xf8, 0x6c, 0x45, 0x31, 0xe4, 0xf8, //0x0000a440 .quad -512230283362660763 + 0x44, 0x22, 0x18, 0x98, 0x27, 0x1b, 0xdb, 0xdc, //0x0000a448 .quad -2532400508596379068 + 0xff, 0x58, 0x1b, 0x64, 0xcb, 0x9e, 0x8e, 0x1b, //0x0000a450 .quad 1985699082112030975 + 0x6b, 0x15, 0x0f, 0xbf, 0xf8, 0xf0, 0x08, 0x8a, //0x0000a458 .quad -8500279345513818773 + 0x3f, 0x2f, 0x22, 0x3d, 0x7e, 0x46, 0x72, 0xe2, //0x0000a460 .quad -2129562165787349185 + 0xc5, 0xda, 0xd2, 0xee, 0x36, 0x2d, 0x8b, 0xac, //0x0000a468 .quad -6013663163464885563 + 0x0f, 0xbb, 0x6a, 0xcc, 0x1d, 0xd8, 0x0e, 0x5b, //0x0000a470 .quad 6561419329620589327 + 0x77, 0x91, 0x87, 0xaa, 0x84, 0xf8, 0xad, 0xd7, //0x0000a478 .quad -2905392935903719049 + 0xe9, 0xb4, 0xc2, 0x9f, 0x12, 0x47, 0xe9, 0x98, //0x0000a480 .quad -7428327965055601431 + 0xea, 0xba, 0x94, 0xea, 0x52, 0xbb, 0xcc, 0x86, //0x0000a488 .quad -8733399612580906262 + 0x24, 0x62, 0xb3, 0x47, 0xd7, 0x98, 0x23, 0x3f, //0x0000a490 .quad 4549648098962661924 + 0xa5, 0xe9, 0x39, 0xa5, 0x27, 0xea, 0x7f, 0xa8, //0x0000a498 .quad -6305063497298744923 + 0xad, 0x3a, 0xa0, 0x19, 0x0d, 0x7f, 0xec, 0x8e, //0x0000a4a0 .quad -8147997931578836307 + 0x0e, 0x64, 0x88, 0x8e, 0xb1, 0xe4, 0x9f, 0xd2, //0x0000a4a8 .quad -3269643353196043250 + 0xac, 0x24, 0x04, 0x30, 0x68, 0xcf, 0x53, 0x19, //0x0000a4b0 .quad 1825030320404309164 + 0x89, 0x3e, 0x15, 0xf9, 0xee, 0xee, 0xa3, 0x83, //0x0000a4b8 .quad -8961056123388608887 + 0xd7, 0x2d, 0x05, 0x3c, 0x42, 0xc3, 0xa8, 0x5f, //0x0000a4c0 .quad 6892973918932774359 + 0x2b, 0x8e, 0x5a, 0xb7, 0xaa, 0xea, 0x8c, 0xa4, //0x0000a4c8 .quad -6589634135808373205 + 0x4d, 0x79, 0x06, 0xcb, 0x12, 0xf4, 0x92, 0x37, //0x0000a4d0 .quad 4004531380238580045 + 0xb6, 0x31, 0x31, 0x65, 0x55, 0x25, 0xb0, 0xcd, //0x0000a4d8 .quad -3625356651333078602 + 0xd0, 0x0b, 0xe4, 0xbe, 0x8b, 0xd8, 0xbb, 0xe2, //0x0000a4e0 .quad -2108853905778275376 + 0x11, 0xbf, 0x3e, 0x5f, 0x55, 0x17, 0x8e, 0x80, //0x0000a4e8 .quad -9183376934724255983 + 0xc4, 0x0e, 0x9d, 0xae, 0xae, 0xce, 0x6a, 0x5b, //0x0000a4f0 .quad 6587304654631931588 + 0xd6, 0x6e, 0x0e, 0xb7, 0x2a, 0x9d, 0xb1, 0xa0, //0x0000a4f8 .quad -6867535149977932074 + 0x75, 0x52, 0x44, 0x5a, 0x5a, 0x82, 0x45, 0xf2, //0x0000a500 .quad -989241218564861323 + 0x8b, 0x0a, 0xd2, 0x64, 0x75, 0x04, 0xde, 0xc8, //0x0000a508 .quad -3972732919045027189 + 0x12, 0x67, 0xd5, 0xf0, 0xf0, 0xe2, 0xd6, 0xee, //0x0000a510 .quad -1236551523206076654 + 0x2e, 0x8d, 0x06, 0xbe, 0x92, 0x85, 0x15, 0xfb, //0x0000a518 .quad -354230130378896082 + 0x6b, 0x60, 0x85, 0x96, 0xd6, 0x4d, 0x46, 0x55, //0x0000a520 .quad 6144684325637283947 + 0x3d, 0x18, 0xc4, 0xb6, 0x7b, 0x73, 0xed, 0x9c, //0x0000a528 .quad -7138922859127891907 + 0x86, 0xb8, 0x26, 0x3c, 0x4c, 0xe1, 0x97, 0xaa, //0x0000a530 .quad -6154202648235558778 + 0x4c, 0x1e, 0x75, 0xa4, 0x5a, 0xd0, 0x28, 0xc4, //0x0000a538 .quad -4311967555482476980 + 0xa8, 0x66, 0x30, 0x4b, 0x9f, 0xd9, 0x3d, 0xd5, //0x0000a540 .quad -3081067291867060568 + 0xdf, 0x65, 0x92, 0x4d, 0x71, 0x04, 0x33, 0xf5, //0x0000a548 .quad -778273425925708321 + 0x29, 0x40, 0xfe, 0x8e, 0x03, 0xa8, 0x46, 0xe5, //0x0000a550 .quad -1925667057416912855 + 0xab, 0x7f, 0x7b, 0xd0, 0xc6, 0xe2, 0x3f, 0x99, //0x0000a558 .quad -7403949918844649557 + 0x33, 0xd0, 0xbd, 0x72, 0x04, 0x52, 0x98, 0xde, //0x0000a560 .quad -2407083821771141069 + 0x96, 0x5f, 0x9a, 0x84, 0x78, 0xdb, 0x8f, 0xbf, //0x0000a568 .quad -4643251380128424042 + 0x40, 0x44, 0x6d, 0x8f, 0x85, 0x66, 0x3e, 0x96, //0x0000a570 .quad -7620540795641314240 + 0x7c, 0xf7, 0xc0, 0xa5, 0x56, 0xd2, 0x73, 0xef, //0x0000a578 .quad -1192378206733142148 + 0xa8, 0x4a, 0xa4, 0x79, 0x13, 0x00, 0xe7, 0xdd, //0x0000a580 .quad -2456994988062127448 + 0xad, 0x9a, 0x98, 0x27, 0x76, 0x63, 0xa8, 0x95, //0x0000a588 .quad -7662765406849295699 + 0x52, 0x5d, 0x0d, 0x58, 0x18, 0xc0, 0x60, 0x55, //0x0000a590 .quad 6152128301777116498 + 0x59, 0xc1, 0x7e, 0xb1, 0x53, 0x7c, 0x12, 0xbb, //0x0000a598 .quad -4966770740134231719 + 0xa6, 0xb4, 0x10, 0x6e, 0x1e, 0xf0, 0xb8, 0xaa, //0x0000a5a0 .quad -6144897678060768090 + 0xaf, 0x71, 0xde, 0x9d, 0x68, 0x1b, 0xd7, 0xe9, //0x0000a5a8 .quad -1596777406740401745 + 0xe8, 0x70, 0xca, 0x04, 0x13, 0x96, 0xb3, 0xca, //0x0000a5b0 .quad -3840561048787980056 + 0x0d, 0x07, 0xab, 0x62, 0x21, 0x71, 0x26, 0x92, //0x0000a5b8 .quad -7915514906853832947 + 0x22, 0x0d, 0xfd, 0xc5, 0x97, 0x7b, 0x60, 0x3d, //0x0000a5c0 .quad 4422670725869800738 + 0xd1, 0xc8, 0x55, 0xbb, 0x69, 0x0d, 0xb0, 0xb6, //0x0000a5c8 .quad -5282707615139903279 + 0x6a, 0x50, 0x7c, 0xb7, 0x7d, 0x9a, 0xb8, 0x8c, //0x0000a5d0 .quad -8306719647944912790 + 0x05, 0x3b, 0x2b, 0x2a, 0xc4, 0x10, 0x5c, 0xe4, //0x0000a5d8 .quad -1991698500497491195 + 0x42, 0xb2, 0xad, 0x92, 0x8e, 0x60, 0xf3, 0x77, //0x0000a5e0 .quad 8643358275316593218 + 0xe3, 0x04, 0x5b, 0x9a, 0x7a, 0x8a, 0xb9, 0x8e, //0x0000a5e8 .quad -8162340590452013853 + 0xd3, 0x1e, 0x59, 0x37, 0xb2, 0x38, 0xf0, 0x55, //0x0000a5f0 .quad 6192511825718353619 + 0x1c, 0xc6, 0xf1, 0x40, 0x19, 0xed, 0x67, 0xb2, //0x0000a5f8 .quad -5591239719637629412 + 0x88, 0x66, 0x2f, 0xc5, 0xde, 0x46, 0x6c, 0x6b, //0x0000a600 .quad 7740639782147942024 + 0xa3, 0x37, 0x2e, 0x91, 0x5f, 0xe8, 0x01, 0xdf, //0x0000a608 .quad -2377363631119648861 + 0x15, 0xa0, 0x3d, 0x3b, 0x4b, 0xac, 0x23, 0x23, //0x0000a610 .quad 2532056854628769813 + 0xc6, 0xe2, 0xbc, 0xba, 0x3b, 0x31, 0x61, 0x8b, //0x0000a618 .quad -8403381297090862394 + 0x1a, 0x08, 0x0d, 0x0a, 0x5e, 0x97, 0xec, 0xab, //0x0000a620 .quad -6058300968568813542 + 0x77, 0x1b, 0x6c, 0xa9, 0x8a, 0x7d, 0x39, 0xae, //0x0000a628 .quad -5892540602936190089 + 0x21, 0x4a, 0x90, 0x8c, 0x35, 0xbd, 0xe7, 0x96, //0x0000a630 .quad -7572876210711016927 + 0x55, 0x22, 0xc7, 0x53, 0xed, 0xdc, 0xc7, 0xd9, //0x0000a638 .quad -2753989735242849707 + 0x54, 0x2e, 0xda, 0x77, 0x41, 0xd6, 0x50, 0x7e, //0x0000a640 .quad 9102010423587778132 + 0x75, 0x75, 0x5c, 0x54, 0x14, 0xea, 0x1c, 0x88, //0x0000a648 .quad -8638772612167862923 + 0xe9, 0xb9, 0xd0, 0xd5, 0xd1, 0x0b, 0xe5, 0xdd, //0x0000a650 .quad -2457545025797441047 + 0xd2, 0x92, 0x73, 0x69, 0x99, 0x24, 0x24, 0xaa, //0x0000a658 .quad -6186779746782440750 + 0x64, 0xe8, 0x44, 0x4b, 0xc6, 0x4e, 0x5e, 0x95, //0x0000a660 .quad -7683617300674189212 + 0x87, 0x77, 0xd0, 0xc3, 0xbf, 0x2d, 0xad, 0xd4, //0x0000a668 .quad -3121788665050663033 + 0x3e, 0x11, 0x0b, 0xef, 0x3b, 0xf1, 0x5a, 0xbd, //0x0000a670 .quad -4802260812921368258 + 0xb4, 0x4a, 0x62, 0xda, 0x97, 0x3c, 0xec, 0x84, //0x0000a678 .quad -8868646943297746252 + 0x8e, 0xd5, 0xcd, 0xea, 0x8a, 0xad, 0xb1, 0xec, //0x0000a680 .quad -1391139997724322418 + 0x61, 0xdd, 0xfa, 0xd0, 0xbd, 0x4b, 0x27, 0xa6, //0x0000a688 .quad -6474122660694794911 + 0xf2, 0x4a, 0x81, 0xa5, 0xed, 0x18, 0xde, 0x67, //0x0000a690 .quad 7484447039699372786 + 0xba, 0x94, 0x39, 0x45, 0xad, 0x1e, 0xb1, 0xcf, //0x0000a698 .quad -3480967307441105734 + 0xd7, 0xce, 0x70, 0x87, 0x94, 0xcf, 0xea, 0x80, //0x0000a6a0 .quad -9157278655470055721 + 0xf4, 0xfc, 0x43, 0x4b, 0x2c, 0xb3, 0xce, 0x81, //0x0000a6a8 .quad -9093133594791772940 + 0x8d, 0x02, 0x4d, 0xa9, 0x79, 0x83, 0x25, 0xa1, //0x0000a6b0 .quad -6834912300910181747 + 0x31, 0xfc, 0x14, 0x5e, 0xf7, 0x5f, 0x42, 0xa2, //0x0000a6b8 .quad -6754730975062328271 + 0x30, 0x43, 0xa0, 0x13, 0x58, 0xe4, 0x6e, 0x09, //0x0000a6c0 .quad 679731660717048624 + 0x3e, 0x3b, 0x9a, 0x35, 0xf5, 0xf7, 0xd2, 0xca, //0x0000a6c8 .quad -3831727700400522434 + 0xfc, 0x53, 0x88, 0x18, 0x6e, 0x9d, 0xca, 0x8b, //0x0000a6d0 .quad -8373707460958465028 + 0x0d, 0xca, 0x00, 0x83, 0xf2, 0xb5, 0x87, 0xfd, //0x0000a6d8 .quad -177973607073265139 + 0x7d, 0x34, 0x55, 0xcf, 0x64, 0xa2, 0x5e, 0x77, //0x0000a6e0 .quad 8601490892183123069 + 0x48, 0x7e, 0xe0, 0x91, 0xb7, 0xd1, 0x74, 0x9e, //0x0000a6e8 .quad -7028762532061872568 + 0x9d, 0x81, 0x2a, 0x03, 0xfe, 0x4a, 0x36, 0x95, //0x0000a6f0 .quad -7694880458480647779 + 0xda, 0x9d, 0x58, 0x76, 0x25, 0x06, 0x12, 0xc6, //0x0000a6f8 .quad -4174267146649952806 + 0x04, 0x22, 0xf5, 0x83, 0xbd, 0xdd, 0x83, 0x3a, //0x0000a700 .quad 4216457482181353988 + 0x51, 0xc5, 0xee, 0xd3, 0xae, 0x87, 0x96, 0xf7, //0x0000a708 .quad -606147914885053103 + 0x42, 0x35, 0x79, 0x72, 0x96, 0x6a, 0x92, 0xc4, //0x0000a710 .quad -4282243101277735614 + 0x52, 0x3b, 0x75, 0x44, 0xcd, 0x14, 0xbe, 0x9a, //0x0000a718 .quad -7296371474444240046 + 0x93, 0x82, 0x17, 0x0f, 0x3c, 0x05, 0xb7, 0x75, //0x0000a720 .quad 8482254178684994195 + 0x27, 0x8a, 0x92, 0x95, 0x00, 0x9a, 0x6d, 0xc1, //0x0000a728 .quad -4508778324627912153 + 0x38, 0x63, 0xdd, 0x12, 0x8b, 0xc6, 0x24, 0x53, //0x0000a730 .quad 5991131704928854840 + 0xb1, 0x2c, 0xf7, 0xba, 0x80, 0x00, 0xc9, 0xf1, //0x0000a738 .quad -1024286887357502287 + 0x03, 0x5e, 0xca, 0xeb, 0x16, 0xfc, 0xf6, 0xd3, //0x0000a740 .quad -3173071712060547581 + 0xee, 0x7b, 0xda, 0x74, 0x50, 0xa0, 0x1d, 0x97, //0x0000a748 .quad -7557708332239520786 + 0x84, 0xf5, 0xbc, 0xa6, 0x1c, 0xbb, 0xf4, 0x88, //0x0000a750 .quad -8578025658503072380 + 0xea, 0x1a, 0x11, 0x92, 0x64, 0x08, 0xe5, 0xbc, //0x0000a758 .quad -4835449396872013078 + 0xe5, 0x32, 0x6c, 0xd0, 0xe3, 0xe9, 0x31, 0x2b, //0x0000a760 .quad 3112525982153323237 + 0xa5, 0x61, 0x95, 0xb6, 0x7d, 0x4a, 0x1e, 0xec, //0x0000a768 .quad -1432625727662628443 + 0xcf, 0x9f, 0x43, 0x62, 0x2e, 0x32, 0xff, 0x3a, //0x0000a770 .quad 4251171748059520975 + 0x07, 0x5d, 0x1d, 0x92, 0x8e, 0xee, 0x92, 0x93, //0x0000a778 .quad -7812920107430224633 + 0xc2, 0x87, 0xd4, 0xfa, 0xb9, 0xfe, 0xbe, 0x09, //0x0000a780 .quad 702278666647013314 + 0x49, 0xb4, 0xa4, 0x36, 0x32, 0xaa, 0x77, 0xb8, //0x0000a788 .quad -5154464115860392887 + 0xb3, 0xa9, 0x89, 0x79, 0x68, 0xbe, 0x2e, 0x4c, //0x0000a790 .quad 5489534351736154547 + 0x5b, 0xe1, 0x4d, 0xc4, 0xbe, 0x94, 0x95, 0xe6, //0x0000a798 .quad -1831394126398103205 + 0x10, 0x0a, 0xf6, 0x4b, 0x01, 0x37, 0x9d, 0x0f, //0x0000a7a0 .quad 1125115960621402640 + 0xd9, 0xac, 0xb0, 0x3a, 0xf7, 0x7c, 0x1d, 0x90, //0x0000a7a8 .quad -8062150356639896359 + 0x94, 0x8c, 0xf3, 0x9e, 0xc1, 0x84, 0x84, 0x53, //0x0000a7b0 .quad 6018080969204141204 + 0x0f, 0xd8, 0x5c, 0x09, 0x35, 0xdc, 0x24, 0xb4, //0x0000a7b8 .quad -5466001927372482545 + 0xb9, 0x6f, 0xb0, 0x06, 0xf2, 0xa5, 0x65, 0x28, //0x0000a7c0 .quad 2910915193077788601 + 0x13, 0x0e, 0xb4, 0x4b, 0x42, 0x13, 0x2e, 0xe1, //0x0000a7c8 .quad -2220816390788215277 + 0xd3, 0x45, 0x2e, 0x44, 0xb7, 0x87, 0x3f, 0xf9, //0x0000a7d0 .quad -486521013540076077 + 0xcb, 0x88, 0x50, 0x6f, 0x09, 0xcc, 0xbc, 0x8c, //0x0000a7d8 .quad -8305539271883716405 + 0x48, 0xd7, 0x39, 0x15, 0xa5, 0x69, 0x8f, 0xf7, //0x0000a7e0 .quad -608151266925095096 + 0xfe, 0xaa, 0x24, 0xcb, 0x0b, 0xff, 0xeb, 0xaf, //0x0000a7e8 .quad -5770238071427257602 + 0x1b, 0x4d, 0x88, 0x5a, 0x0e, 0x44, 0x73, 0xb5, //0x0000a7f0 .quad -5371875102083756773 + 0xbe, 0xd5, 0xed, 0xbd, 0xce, 0xfe, 0xe6, 0xdb, //0x0000a7f8 .quad -2601111570856684098 + 0x30, 0x30, 0x95, 0xf8, 0x88, 0x0a, 0x68, 0x31, //0x0000a800 .quad 3560107088838733872 + 0x97, 0xa5, 0xb4, 0x36, 0x41, 0x5f, 0x70, 0x89, //0x0000a808 .quad -8543223759426509417 + 0x3d, 0x7c, 0xba, 0x36, 0x2b, 0x0d, 0xc2, 0xfd, //0x0000a810 .quad -161552157378970563 + 0xfc, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x0000a818 .quad -6067343680855748868 + 0x4c, 0x1b, 0x69, 0x04, 0x76, 0x90, 0x32, 0x3d, //0x0000a820 .quad 4409745821703674700 + 0xbc, 0x42, 0x7a, 0xe5, 0xd5, 0x94, 0xbf, 0xd6, //0x0000a828 .quad -2972493582642298180 + 0x0f, 0xb1, 0xc1, 0xc2, 0x49, 0x9a, 0x3f, 0xa6, //0x0000a830 .quad -6467280898289979121 + 0xb5, 0x69, 0x6c, 0xaf, 0x05, 0xbd, 0x37, 0x86, //0x0000a838 .quad -8775337516792518219 + 0x53, 0x1d, 0x72, 0x33, 0xdc, 0x80, 0xcf, 0x0f, //0x0000a840 .quad 1139270913992301907 + 0x23, 0x84, 0x47, 0x1b, 0x47, 0xac, 0xc5, 0xa7, //0x0000a848 .quad -6357485877563259869 + 0xa8, 0xa4, 0x4e, 0x40, 0x13, 0x61, 0xc3, 0xd3, //0x0000a850 .quad -3187597375937010520 + 0x2b, 0x65, 0x19, 0xe2, 0x58, 0x17, 0xb7, 0xd1, //0x0000a858 .quad -3335171328526686933 + 0xe9, 0x26, 0x31, 0x08, 0xac, 0x1c, 0x5a, 0x64, //0x0000a860 .quad 7231123676894144233 + 0x3b, 0xdf, 0x4f, 0x8d, 0x97, 0x6e, 0x12, 0x83, //0x0000a868 .quad -9002011107970261189 + 0xa3, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, 0x70, 0x3d, //0x0000a870 .quad 4427218577690292387 + 0x0a, 0xd7, 0xa3, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, //0x0000a878 .quad -6640827866535438582 + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x0000a880 QUAD $0xcccccccccccccccc; QUAD $0xcccccccccccccccc // .space 16, '\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a890 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x0000a898 .quad -9223372036854775808 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a8a0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, //0x0000a8a8 .quad -6917529027641081856 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a8b0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, //0x0000a8b8 .quad -4035225266123964416 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a8c0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, //0x0000a8c8 .quad -432345564227567616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a8d0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x9c, //0x0000a8d8 .quad -7187745005283311616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a8e0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xc3, //0x0000a8e8 .quad -4372995238176751616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a8f0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xf4, //0x0000a8f8 .quad -854558029293551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a900 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x98, //0x0000a908 .quad -7451627795949551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a910 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xbc, 0xbe, //0x0000a918 .quad -4702848726509551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a920 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6b, 0xee, //0x0000a928 .quad -1266874889709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a930 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x02, 0x95, //0x0000a938 .quad -7709325833709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a940 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x40, 0xb7, 0x43, 0xba, //0x0000a948 .quad -5024971273709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a950 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0xd4, 0xe8, //0x0000a958 .quad -1669528073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a960 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xe7, 0x84, 0x91, //0x0000a968 .quad -7960984073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a970 .quad 0 + 0x00, 0x00, 0x00, 0x80, 0xf4, 0x20, 0xe6, 0xb5, //0x0000a978 .quad -5339544073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a980 .quad 0 + 0x00, 0x00, 0x00, 0xa0, 0x31, 0xa9, 0x5f, 0xe3, //0x0000a988 .quad -2062744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a990 .quad 0 + 0x00, 0x00, 0x00, 0x04, 0xbf, 0xc9, 0x1b, 0x8e, //0x0000a998 .quad -8206744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a9a0 .quad 0 + 0x00, 0x00, 0x00, 0xc5, 0x2e, 0xbc, 0xa2, 0xb1, //0x0000a9a8 .quad -5646744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a9b0 .quad 0 + 0x00, 0x00, 0x40, 0x76, 0x3a, 0x6b, 0x0b, 0xde, //0x0000a9b8 .quad -2446744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a9c0 .quad 0 + 0x00, 0x00, 0xe8, 0x89, 0x04, 0x23, 0xc7, 0x8a, //0x0000a9c8 .quad -8446744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a9d0 .quad 0 + 0x00, 0x00, 0x62, 0xac, 0xc5, 0xeb, 0x78, 0xad, //0x0000a9d8 .quad -5946744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a9e0 .quad 0 + 0x00, 0x80, 0x7a, 0x17, 0xb7, 0x26, 0xd7, 0xd8, //0x0000a9e8 .quad -2821744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000a9f0 .quad 0 + 0x00, 0x90, 0xac, 0x6e, 0x32, 0x78, 0x86, 0x87, //0x0000a9f8 .quad -8681119073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000aa00 .quad 0 + 0x00, 0xb4, 0x57, 0x0a, 0x3f, 0x16, 0x68, 0xa9, //0x0000aa08 .quad -6239712823709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000aa10 .quad 0 + 0x00, 0xa1, 0xed, 0xcc, 0xce, 0x1b, 0xc2, 0xd3, //0x0000aa18 .quad -3187955011209551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000aa20 .quad 0 + 0xa0, 0x84, 0x14, 0x40, 0x61, 0x51, 0x59, 0x84, //0x0000aa28 .quad -8910000909647051616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000aa30 .quad 0 + 0xc8, 0xa5, 0x19, 0x90, 0xb9, 0xa5, 0x6f, 0xa5, //0x0000aa38 .quad -6525815118631426616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000aa40 .quad 0 + 0x3a, 0x0f, 0x20, 0xf4, 0x27, 0x8f, 0xcb, 0xce, //0x0000aa48 .quad -3545582879861895366 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, //0x0000aa50 .quad 4611686018427387904 + 0x84, 0x09, 0x94, 0xf8, 0x78, 0x39, 0x3f, 0x81, //0x0000aa58 .quad -9133518327554766460 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, //0x0000aa60 .quad 5764607523034234880 + 0xe5, 0x0b, 0xb9, 0x36, 0xd7, 0x07, 0x8f, 0xa1, //0x0000aa68 .quad -6805211891016070171 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, //0x0000aa70 .quad -6629298651489370112 + 0xde, 0x4e, 0x67, 0x04, 0xcd, 0xc9, 0xf2, 0xc9, //0x0000aa78 .quad -3894828845342699810 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, //0x0000aa80 .quad 5548434740920451072 + 0x96, 0x22, 0x81, 0x45, 0x40, 0x7c, 0x6f, 0xfc, //0x0000aa88 .quad -256850038250986858 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf0, //0x0000aa90 .quad -1143914305352105984 + 0x9d, 0xb5, 0x70, 0x2b, 0xa8, 0xad, 0xc5, 0x9d, //0x0000aa98 .quad -7078060301547948643 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, //0x0000aaa0 .quad 7793479155164643328 + 0x05, 0xe3, 0x4c, 0x36, 0x12, 0x19, 0x37, 0xc5, //0x0000aaa8 .quad -4235889358507547899 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0xc7, //0x0000aab0 .quad -4093209111326359552 + 0xc6, 0x1b, 0xe0, 0xc3, 0x56, 0xdf, 0x84, 0xf6, //0x0000aab8 .quad -683175679707046970 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7f, 0x3c, //0x0000aac0 .quad 4359273333062107136 + 0x5c, 0x11, 0x6c, 0x3a, 0x96, 0x0b, 0x13, 0x9a, //0x0000aac8 .quad -7344513827457986212 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9f, 0x4b, //0x0000aad0 .quad 5449091666327633920 + 0xb3, 0x15, 0x07, 0xc9, 0x7b, 0xce, 0x97, 0xc0, //0x0000aad8 .quad -4568956265895094861 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x86, 0x1e, //0x0000aae0 .quad 2199678564482154496 + 0x20, 0xdb, 0x48, 0xbb, 0x1a, 0xc2, 0xbd, 0xf0, //0x0000aae8 .quad -1099509313941480672 + 0x00, 0x00, 0x00, 0x00, 0x80, 0x44, 0x14, 0x13, //0x0000aaf0 .quad 1374799102801346560 + 0xf4, 0x88, 0x0d, 0xb5, 0x50, 0x99, 0x76, 0x96, //0x0000aaf8 .quad -7604722348854507276 + 0x00, 0x00, 0x00, 0x00, 0xa0, 0x55, 0xd9, 0x17, //0x0000ab00 .quad 1718498878501683200 + 0x31, 0xeb, 0x50, 0xe2, 0xa4, 0x3f, 0x14, 0xbc, //0x0000ab08 .quad -4894216917640746191 + 0x00, 0x00, 0x00, 0x00, 0x08, 0xab, 0xcf, 0x5d, //0x0000ab10 .quad 6759809616554491904 + 0xfd, 0x25, 0xe5, 0x1a, 0x8e, 0x4f, 0x19, 0xeb, //0x0000ab18 .quad -1506085128623544835 + 0x00, 0x00, 0x00, 0x00, 0xe5, 0xca, 0xa1, 0x5a, //0x0000ab20 .quad 6530724019560251392 + 0xbe, 0x37, 0xcf, 0xd0, 0xb8, 0xd1, 0xef, 0x92, //0x0000ab28 .quad -7858832233030797378 + 0x00, 0x00, 0x00, 0x40, 0x9e, 0x3d, 0x4a, 0xf1, //0x0000ab30 .quad -1059967012404461568 + 0xad, 0x05, 0x03, 0x05, 0x27, 0xc6, 0xab, 0xb7, //0x0000ab38 .quad -5211854272861108819 + 0x00, 0x00, 0x00, 0xd0, 0x05, 0xcd, 0x9c, 0x6d, //0x0000ab40 .quad 7898413271349198848 + 0x19, 0xc7, 0x43, 0xc6, 0xb0, 0xb7, 0x96, 0xe5, //0x0000ab48 .quad -1903131822648998119 + 0x00, 0x00, 0x00, 0xa2, 0x23, 0x00, 0x82, 0xe4, //0x0000ab50 .quad -1981020733047832576 + 0x6f, 0x5c, 0xea, 0x7b, 0xce, 0x32, 0x7e, 0x8f, //0x0000ab58 .quad -8106986416796705681 + 0x00, 0x00, 0x80, 0x8a, 0x2c, 0x80, 0xa2, 0xdd, //0x0000ab60 .quad -2476275916309790720 + 0x8b, 0xf3, 0xe4, 0x1a, 0x82, 0xbf, 0x5d, 0xb3, //0x0000ab68 .quad -5522047002568494197 + 0x00, 0x00, 0x20, 0xad, 0x37, 0x20, 0x0b, 0xd5, //0x0000ab70 .quad -3095344895387238400 + 0x6e, 0x30, 0x9e, 0xa1, 0x62, 0x2f, 0x35, 0xe0, //0x0000ab78 .quad -2290872734783229842 + 0x00, 0x00, 0x34, 0xcc, 0x22, 0xf4, 0x26, 0x45, //0x0000ab80 .quad 4982938468024057856 + 0x45, 0xde, 0x02, 0xa5, 0x9d, 0x3d, 0x21, 0x8c, //0x0000ab88 .quad -8349324486880600507 + 0x00, 0x00, 0x41, 0x7f, 0x2b, 0xb1, 0x70, 0x96, //0x0000ab90 .quad -7606384970252091392 + 0xd6, 0x95, 0x43, 0x0e, 0x05, 0x8d, 0x29, 0xaf, //0x0000ab98 .quad -5824969590173362730 + 0x00, 0x40, 0x11, 0x5f, 0x76, 0xdd, 0x0c, 0x3c, //0x0000aba0 .quad 4327076842467049472 + 0x4c, 0x7b, 0xd4, 0x51, 0x46, 0xf0, 0xf3, 0xda, //0x0000aba8 .quad -2669525969289315508 + 0x00, 0xc8, 0x6a, 0xfb, 0x69, 0x0a, 0x88, 0xa5, //0x0000abb0 .quad -6518949010312869888 + 0x0f, 0xcd, 0x24, 0xf3, 0x2b, 0x76, 0xd8, 0x88, //0x0000abb8 .quad -8585982758446904049 + 0x00, 0x7a, 0x45, 0x7a, 0x04, 0x0d, 0xea, 0x8e, //0x0000abc0 .quad -8148686262891087360 + 0x53, 0x00, 0xee, 0xef, 0xb6, 0x93, 0x0e, 0xab, //0x0000abc8 .quad -6120792429631242157 + 0x80, 0xd8, 0xd6, 0x98, 0x45, 0x90, 0xa4, 0x72, //0x0000abd0 .quad 8260886245095692416 + 0x68, 0x80, 0xe9, 0xab, 0xa4, 0x38, 0xd2, 0xd5, //0x0000abd8 .quad -3039304518611664792 + 0x50, 0x47, 0x86, 0x7f, 0x2b, 0xda, 0xa6, 0x47, //0x0000abe0 .quad 5163053903184807760 + 0x41, 0xf0, 0x71, 0xeb, 0x66, 0x63, 0xa3, 0x85, //0x0000abe8 .quad -8817094351773372351 + 0x24, 0xd9, 0x67, 0x5f, 0xb6, 0x90, 0x90, 0x99, //0x0000abf0 .quad -7381240676301154012 + 0x51, 0x6c, 0x4e, 0xa6, 0x40, 0x3c, 0x0c, 0xa7, //0x0000abf8 .quad -6409681921289327535 + 0x6d, 0xcf, 0x41, 0xf7, 0xe3, 0xb4, 0xf4, 0xff, //0x0000ac00 .quad -3178808521666707 + 0x65, 0x07, 0xe2, 0xcf, 0x50, 0x4b, 0xcf, 0xd0, //0x0000ac08 .quad -3400416383184271515 + 0xa4, 0x21, 0x89, 0x7a, 0x0e, 0xf1, 0xf8, 0xbf, //0x0000ac10 .quad -4613672773753429596 + 0x9f, 0x44, 0xed, 0x81, 0x12, 0x8f, 0x81, 0x82, //0x0000ac18 .quad -9042789267131251553 + 0x0d, 0x6a, 0x2b, 0x19, 0x52, 0x2d, 0xf7, 0xaf, //0x0000ac20 .quad -5767090967191786995 + 0xc7, 0x95, 0x68, 0x22, 0xd7, 0xf2, 0x21, 0xa3, //0x0000ac28 .quad -6691800565486676537 + 0x90, 0x44, 0x76, 0x9f, 0xa6, 0xf8, 0xf4, 0x9b, //0x0000ac30 .quad -7208863708989733744 + 0x39, 0xbb, 0x02, 0xeb, 0x8c, 0x6f, 0xea, 0xcb, //0x0000ac38 .quad -3753064688430957767 + 0xb4, 0xd5, 0x53, 0x47, 0xd0, 0x36, 0xf2, 0x02, //0x0000ac40 .quad 212292400617608628 + 0x08, 0x6a, 0xc3, 0x25, 0x70, 0x0b, 0xe5, 0xfe, //0x0000ac48 .quad -79644842111309304 + 0x90, 0x65, 0x94, 0x2c, 0x42, 0x62, 0xd7, 0x01, //0x0000ac50 .quad 132682750386005392 + 0x45, 0x22, 0x9a, 0x17, 0x26, 0x27, 0x4f, 0x9f, //0x0000ac58 .quad -6967307053960650171 + 0xf5, 0x7e, 0xb9, 0xb7, 0xd2, 0x3a, 0x4d, 0x42, //0x0000ac60 .quad 4777539456409894645 + 0xd6, 0xaa, 0x80, 0x9d, 0xef, 0xf0, 0x22, 0xc7, //0x0000ac68 .quad -4097447799023424810 + 0xb2, 0xde, 0xa7, 0x65, 0x87, 0x89, 0xe0, 0xd2, //0x0000ac70 .quad -3251447716342407502 + 0x8b, 0xd5, 0xe0, 0x84, 0x2b, 0xad, 0xeb, 0xf8, //0x0000ac78 .quad -510123730351893109 + 0x2f, 0xeb, 0x88, 0x9f, 0xf4, 0x55, 0xcc, 0x63, //0x0000ac80 .quad 7191217214140771119 + 0x77, 0x85, 0x0c, 0x33, 0x3b, 0x4c, 0x93, 0x9b, //0x0000ac88 .quad -7236356359111015049 + 0xfb, 0x25, 0x6b, 0xc7, 0x71, 0x6b, 0xbf, 0x3c, //0x0000ac90 .quad 4377335499248575995 + 0xd5, 0xa6, 0xcf, 0xff, 0x49, 0x1f, 0x78, 0xc2, //0x0000ac98 .quad -4433759430461380907 + 0x7a, 0xef, 0x45, 0x39, 0x4e, 0x46, 0xef, 0x8b, //0x0000aca0 .quad -8363388681221443718 + 0x8a, 0x90, 0xc3, 0x7f, 0x1c, 0x27, 0x16, 0xf3, //0x0000aca8 .quad -930513269649338230 + 0xac, 0xb5, 0xcb, 0xe3, 0xf0, 0x8b, 0x75, 0x97, //0x0000acb0 .quad -7532960934977096276 + 0x56, 0x3a, 0xda, 0xcf, 0x71, 0xd8, 0xed, 0x97, //0x0000acb8 .quad -7499099821171918250 + 0x17, 0xa3, 0xbe, 0x1c, 0xed, 0xee, 0x52, 0x3d, //0x0000acc0 .quad 4418856886560793367 + 0xec, 0xc8, 0xd0, 0x43, 0x8e, 0x4e, 0xe9, 0xbd, //0x0000acc8 .quad -4762188758037509908 + 0xdd, 0x4b, 0xee, 0x63, 0xa8, 0xaa, 0xa7, 0x4c, //0x0000acd0 .quad 5523571108200991709 + 0x27, 0xfb, 0xc4, 0xd4, 0x31, 0xa2, 0x63, 0xed, //0x0000acd8 .quad -1341049929119499481 + 0x6a, 0xef, 0x74, 0x3e, 0xa9, 0xca, 0xe8, 0x8f, //0x0000ace0 .quad -8076983103442849942 + 0xf8, 0x1c, 0xfb, 0x24, 0x5f, 0x45, 0x5e, 0x94, //0x0000ace8 .quad -7755685233340769032 + 0x44, 0x2b, 0x12, 0x8e, 0x53, 0xfd, 0xe2, 0xb3, //0x0000acf0 .quad -5484542860876174524 + 0x36, 0xe4, 0x39, 0xee, 0xb6, 0xd6, 0x75, 0xb9, //0x0000acf8 .quad -5082920523248573386 + 0x16, 0xb6, 0x96, 0x71, 0xa8, 0xbc, 0xdb, 0x60, //0x0000ad00 .quad 6979379479186945558 + 0x44, 0x5d, 0xc8, 0xa9, 0x64, 0x4c, 0xd3, 0xe7, //0x0000ad08 .quad -1741964635633328828 + 0xcd, 0x31, 0xfe, 0x46, 0xe9, 0x55, 0x89, 0xbc, //0x0000ad10 .quad -4861259862362934835 + 0x4a, 0x3a, 0x1d, 0xea, 0xbe, 0x0f, 0xe4, 0x90, //0x0000ad18 .quad -8006256924911912374 + 0x41, 0xbe, 0xbd, 0x98, 0x63, 0xab, 0xab, 0x6b, //0x0000ad20 .quad 7758483227328495169 + 0xdd, 0x88, 0xa4, 0xa4, 0xae, 0x13, 0x1d, 0xb5, //0x0000ad28 .quad -5396135137712502563 + 0xd1, 0x2d, 0xed, 0x7e, 0x3c, 0x96, 0x96, 0xc6, //0x0000ad30 .quad -4136954021121544751 + 0x14, 0xab, 0xcd, 0x4d, 0x9a, 0x58, 0x64, 0xe2, //0x0000ad38 .quad -2133482903713240300 + 0xa2, 0x3c, 0x54, 0xcf, 0xe5, 0x1d, 0x1e, 0xfc, //0x0000ad40 .quad -279753253987271518 + 0xec, 0x8a, 0xa0, 0x70, 0x60, 0xb7, 0x7e, 0x8d, //0x0000ad48 .quad -8250955842461857044 + 0xcb, 0x4b, 0x29, 0x43, 0x5f, 0xa5, 0x25, 0x3b, //0x0000ad50 .quad 4261994450943298507 + 0xa8, 0xad, 0xc8, 0x8c, 0x38, 0x65, 0xde, 0xb0, //0x0000ad58 .quad -5702008784649933400 + 0xbe, 0x9e, 0xf3, 0x13, 0xb7, 0x0e, 0xef, 0x49, //0x0000ad60 .quad 5327493063679123134 + 0x12, 0xd9, 0xfa, 0xaf, 0x86, 0xfe, 0x15, 0xdd, //0x0000ad68 .quad -2515824962385028846 + 0x37, 0x43, 0x78, 0x6c, 0x32, 0x69, 0x35, 0x6e, //0x0000ad70 .quad 7941369183226839863 + 0xab, 0xc7, 0xfc, 0x2d, 0x14, 0xbf, 0x2d, 0x8a, //0x0000ad78 .quad -8489919629131724885 + 0x04, 0x54, 0x96, 0x07, 0x7f, 0xc3, 0xc2, 0x49, //0x0000ad80 .quad 5315025460606161924 + 0x96, 0xf9, 0x7b, 0x39, 0xd9, 0x2e, 0xb9, 0xac, //0x0000ad88 .quad -6000713517987268202 + 0x06, 0xe9, 0x7b, 0xc9, 0x5e, 0x74, 0x33, 0xdc, //0x0000ad90 .quad -2579590211097073402 + 0xfb, 0xf7, 0xda, 0x87, 0x8f, 0x7a, 0xe7, 0xd7, //0x0000ad98 .quad -2889205879056697349 + 0xa3, 0x71, 0xed, 0x3d, 0xbb, 0x28, 0xa0, 0x69, //0x0000ada0 .quad 7611128154919104931 + 0xfd, 0xda, 0xe8, 0xb4, 0x99, 0xac, 0xf0, 0x86, //0x0000ada8 .quad -8723282702051517699 + 0x0c, 0xce, 0x68, 0x0d, 0xea, 0x32, 0x08, 0xc4, //0x0000adb0 .quad -4321147861633282548 + 0xbc, 0x11, 0x23, 0x22, 0xc0, 0xd7, 0xac, 0xa8, //0x0000adb8 .quad -6292417359137009220 + 0x90, 0x01, 0xc3, 0x90, 0xa4, 0x3f, 0x0a, 0xf5, //0x0000adc0 .quad -789748808614215280 + 0x2b, 0xd6, 0xab, 0x2a, 0xb0, 0x0d, 0xd8, 0xd2, //0x0000adc8 .quad -3253835680493873621 + 0xfa, 0xe0, 0x79, 0xda, 0xc6, 0x67, 0x26, 0x79, //0x0000add0 .quad 8729779031470891258 + 0xdb, 0x65, 0xab, 0x1a, 0x8e, 0x08, 0xc7, 0x83, //0x0000add8 .quad -8951176327949752869 + 0x38, 0x59, 0x18, 0x91, 0xb8, 0x01, 0x70, 0x57, //0x0000ade0 .quad 6300537770911226168 + 0x52, 0x3f, 0x56, 0xa1, 0xb1, 0xca, 0xb8, 0xa4, //0x0000ade8 .quad -6577284391509803182 + 0x86, 0x6f, 0x5e, 0xb5, 0x26, 0x02, 0x4c, 0xed, //0x0000adf0 .quad -1347699823215743098 + 0x26, 0xcf, 0xab, 0x09, 0x5e, 0xfd, 0xe6, 0xcd, //0x0000adf8 .quad -3609919470959866074 + 0xb4, 0x05, 0x5b, 0x31, 0x58, 0x81, 0x4f, 0x54, //0x0000ae00 .quad 6075216638131242420 + 0x78, 0x61, 0x0b, 0xc6, 0x5a, 0x5e, 0xb0, 0x80, //0x0000ae08 .quad -9173728696990998152 + 0x21, 0xc7, 0xb1, 0x3d, 0xae, 0x61, 0x63, 0x69, //0x0000ae10 .quad 7594020797664053025 + 0xd6, 0x39, 0x8e, 0x77, 0xf1, 0x75, 0xdc, 0xa0, //0x0000ae18 .quad -6855474852811359786 + 0xe9, 0x38, 0x1e, 0xcd, 0x19, 0x3a, 0xbc, 0x03, //0x0000ae20 .quad 269153960225290473 + 0x4c, 0xc8, 0x71, 0xd5, 0x6d, 0x93, 0x13, 0xc9, //0x0000ae28 .quad -3957657547586811828 + 0x23, 0xc7, 0x65, 0x40, 0xa0, 0x48, 0xab, 0x04, //0x0000ae30 .quad 336442450281613091 + 0x5f, 0x3a, 0xce, 0x4a, 0x49, 0x78, 0x58, 0xfb, //0x0000ae38 .quad -335385916056126881 + 0x76, 0x9c, 0x3f, 0x28, 0x64, 0x0d, 0xeb, 0x62, //0x0000ae40 .quad 7127805559067090038 + 0x7b, 0xe4, 0xc0, 0xce, 0x2d, 0x4b, 0x17, 0x9d, //0x0000ae48 .quad -7127145225176161157 + 0x94, 0x83, 0x4f, 0x32, 0xbd, 0xd0, 0xa5, 0x3b, //0x0000ae50 .quad 4298070930406474644 + 0x9a, 0x1d, 0x71, 0x42, 0xf9, 0x1d, 0x5d, 0xc4, //0x0000ae58 .quad -4297245513042813542 + 0x79, 0x64, 0xe3, 0x7e, 0xec, 0x44, 0x8f, 0xca, //0x0000ae60 .quad -3850783373846682503 + 0x00, 0x65, 0x0d, 0x93, 0x77, 0x65, 0x74, 0xf5, //0x0000ae68 .quad -759870872876129024 + 0xcb, 0x1e, 0x4e, 0xcf, 0x13, 0x8b, 0x99, 0x7e, //0x0000ae70 .quad 9122475437414293195 + 0x20, 0x5f, 0xe8, 0xbb, 0x6a, 0xbf, 0x68, 0x99, //0x0000ae78 .quad -7392448323188662496 + 0x7e, 0xa6, 0x21, 0xc3, 0xd8, 0xed, 0x3f, 0x9e, //0x0000ae80 .quad -7043649776941685122 + 0xe8, 0x76, 0xe2, 0x6a, 0x45, 0xef, 0xc2, 0xbf, //0x0000ae88 .quad -4628874385558440216 + 0x1e, 0x10, 0xea, 0xf3, 0x4e, 0xe9, 0xcf, 0xc5, //0x0000ae90 .quad -4192876202749718498 + 0xa2, 0x14, 0x9b, 0xc5, 0x16, 0xab, 0xb3, 0xef, //0x0000ae98 .quad -1174406963520662366 + 0x12, 0x4a, 0x72, 0x58, 0xd1, 0xf1, 0xa1, 0xbb, //0x0000aea0 .quad -4926390635932268014 + 0xe5, 0xec, 0x80, 0x3b, 0xee, 0x4a, 0xd0, 0x95, //0x0000aea8 .quad -7651533379841495835 + 0x97, 0xdc, 0x8e, 0xae, 0x45, 0x6e, 0x8a, 0x2a, //0x0000aeb0 .quad 3065383741939440791 + 0x1f, 0x28, 0x61, 0xca, 0xa9, 0x5d, 0x44, 0xbb, //0x0000aeb8 .quad -4952730706374481889 + 0xbd, 0x93, 0x32, 0x1a, 0xd7, 0x09, 0x2d, 0xf5, //0x0000aec0 .quad -779956341003086915 + 0x26, 0x72, 0xf9, 0x3c, 0x14, 0x75, 0x15, 0xea, //0x0000aec8 .quad -1579227364540714458 + 0x56, 0x9c, 0x5f, 0x70, 0x26, 0x26, 0x3c, 0x59, //0x0000aed0 .quad 6430056314514152534 + 0x58, 0xe7, 0x1b, 0xa6, 0x2c, 0x69, 0x4d, 0x92, //0x0000aed8 .quad -7904546130479028392 + 0x6c, 0x83, 0x77, 0x0c, 0xb0, 0x2f, 0x8b, 0x6f, //0x0000aee0 .quad 8037570393142690668 + 0x2e, 0xe1, 0xa2, 0xcf, 0x77, 0xc3, 0xe0, 0xb6, //0x0000aee8 .quad -5268996644671397586 + 0x47, 0x64, 0x95, 0x0f, 0x9c, 0xfb, 0x6d, 0x0b, //0x0000aef0 .quad 823590954573587527 + 0x7a, 0x99, 0x8b, 0xc3, 0x55, 0xf4, 0x98, 0xe4, //0x0000aef8 .quad -1974559787411859078 + 0xac, 0x5e, 0xbd, 0x89, 0x41, 0xbd, 0x24, 0x47, //0x0000af00 .quad 5126430365035880108 + 0xec, 0x3f, 0x37, 0x9a, 0xb5, 0x98, 0xdf, 0x8e, //0x0000af08 .quad -8151628894773493780 + 0x57, 0xb6, 0x2c, 0xec, 0x91, 0xec, 0xed, 0x58, //0x0000af10 .quad 6408037956294850135 + 0xe7, 0x0f, 0xc5, 0x00, 0xe3, 0x7e, 0x97, 0xb2, //0x0000af18 .quad -5577850100039479321 + 0xed, 0xe3, 0x37, 0x67, 0xb6, 0x67, 0x29, 0x2f, //0x0000af20 .quad 3398361426941174765 + 0xe1, 0x53, 0xf6, 0xc0, 0x9b, 0x5e, 0x3d, 0xdf, //0x0000af28 .quad -2360626606621961247 + 0x74, 0xee, 0x82, 0x00, 0xd2, 0xe0, 0x79, 0xbd, //0x0000af30 .quad -4793553135802847628 + 0x6c, 0xf4, 0x99, 0x58, 0x21, 0x5b, 0x86, 0x8b, //0x0000af38 .quad -8392920656779807636 + 0x11, 0xaa, 0xa3, 0x80, 0x06, 0x59, 0xd8, 0xec, //0x0000af40 .quad -1380255401326171631 + 0x87, 0x71, 0xc0, 0xae, 0xe9, 0xf1, 0x67, 0xae, //0x0000af48 .quad -5879464802547371641 + 0x95, 0x94, 0xcc, 0x20, 0x48, 0x6f, 0x0e, 0xe8, //0x0000af50 .quad -1725319251657714539 + 0xe9, 0x8d, 0x70, 0x1a, 0x64, 0xee, 0x01, 0xda, //0x0000af58 .quad -2737644984756826647 + 0xdd, 0xdc, 0x7f, 0x14, 0x8d, 0x05, 0x09, 0x31, //0x0000af60 .quad 3533361486141316317 + 0xb2, 0x58, 0x86, 0x90, 0xfe, 0x34, 0x41, 0x88, //0x0000af68 .quad -8628557143114098510 + 0x15, 0xd4, 0x9f, 0x59, 0xf0, 0x46, 0x4b, 0xbd, //0x0000af70 .quad -4806670179178130411 + 0xde, 0xee, 0xa7, 0x34, 0x3e, 0x82, 0x51, 0xaa, //0x0000af78 .quad -6174010410465235234 + 0x1a, 0xc9, 0x07, 0x70, 0xac, 0x18, 0x9e, 0x6c, //0x0000af80 .quad 7826720331309500698 + 0x96, 0xea, 0xd1, 0xc1, 0xcd, 0xe2, 0xe5, 0xd4, //0x0000af88 .quad -3105826994654156138 + 0xb0, 0xdd, 0x04, 0xc6, 0x6b, 0xcf, 0xe2, 0x03, //0x0000af90 .quad 280014188641050032 + 0x9e, 0x32, 0x23, 0x99, 0xc0, 0xad, 0x0f, 0x85, //0x0000af98 .quad -8858670899299929442 + 0x1c, 0x15, 0x86, 0xb7, 0x46, 0x83, 0xdb, 0x84, //0x0000afa0 .quad -8873354301053463268 + 0x45, 0xff, 0x6b, 0xbf, 0x30, 0x99, 0x53, 0xa6, //0x0000afa8 .quad -6461652605697523899 + 0x63, 0x9a, 0x67, 0x65, 0x18, 0x64, 0x12, 0xe6, //0x0000afb0 .quad -1868320839462053277 + 0x16, 0xff, 0x46, 0xef, 0x7c, 0x7f, 0xe8, 0xcf, //0x0000afb8 .quad -3465379738694516970 + 0x7e, 0xc0, 0x60, 0x3f, 0x8f, 0x7e, 0xcb, 0x4f, //0x0000afc0 .quad 5749828502977298558 + 0x6e, 0x5f, 0x8c, 0x15, 0xae, 0x4f, 0xf1, 0x81, //0x0000afc8 .quad -9083391364325154962 + 0x9d, 0xf0, 0x38, 0x0f, 0x33, 0x5e, 0xbe, 0xe3, //0x0000afd0 .quad -2036086408133152611 + 0x49, 0x77, 0xef, 0x9a, 0x99, 0xa3, 0x6d, 0xa2, //0x0000afd8 .quad -6742553186979055799 + 0xc5, 0x2c, 0x07, 0xd3, 0xbf, 0xf5, 0xad, 0x5c, //0x0000afe0 .quad 6678264026688335045 + 0x1c, 0x55, 0xab, 0x01, 0x80, 0x0c, 0x09, 0xcb, //0x0000afe8 .quad -3816505465296431844 + 0xf6, 0xf7, 0xc8, 0xc7, 0x2f, 0x73, 0xd9, 0x73, //0x0000aff0 .quad 8347830033360418806 + 0x63, 0x2a, 0x16, 0x02, 0xa0, 0x4f, 0xcb, 0xfd, //0x0000aff8 .quad -158945813193151901 + 0xfa, 0x9a, 0xdd, 0xdc, 0xfd, 0xe7, 0x67, 0x28, //0x0000b000 .quad 2911550761636567802 + 0x7e, 0xda, 0x4d, 0x01, 0xc4, 0x11, 0x9f, 0x9e, //0x0000b008 .quad -7016870160886801794 + 0xb8, 0x01, 0x15, 0x54, 0xfd, 0xe1, 0x81, 0xb2, //0x0000b010 .quad -5583933584809066056 + 0x1d, 0x51, 0xa1, 0x01, 0x35, 0xd6, 0x46, 0xc6, //0x0000b018 .quad -4159401682681114339 + 0x26, 0x42, 0x1a, 0xa9, 0x7c, 0x5a, 0x22, 0x1f, //0x0000b020 .quad 2243455055843443238 + 0x65, 0xa5, 0x09, 0x42, 0xc2, 0x8b, 0xd8, 0xf7, //0x0000b028 .quad -587566084924005019 + 0x58, 0x69, 0xb0, 0xe9, 0x8d, 0x78, 0x75, 0x33, //0x0000b030 .quad 3708002419115845976 + 0x5f, 0x07, 0x46, 0x69, 0x59, 0x57, 0xe7, 0x9a, //0x0000b038 .quad -7284757830718584993 + 0xae, 0x83, 0x1c, 0x64, 0xb1, 0xd6, 0x52, 0x00, //0x0000b040 .quad 23317005467419566 + 0x37, 0x89, 0x97, 0xc3, 0x2f, 0x2d, 0xa1, 0xc1, //0x0000b048 .quad -4494261269970843337 + 0x9a, 0xa4, 0x23, 0xbd, 0x5d, 0x8c, 0x67, 0xc0, //0x0000b050 .quad -4582539761593113446 + 0x84, 0x6b, 0x7d, 0xb4, 0x7b, 0x78, 0x09, 0xf2, //0x0000b058 .quad -1006140569036166268 + 0xe0, 0x46, 0x36, 0x96, 0xba, 0xb7, 0x40, 0xf8, //0x0000b060 .quad -558244341782001952 + 0x32, 0x63, 0xce, 0x50, 0x4d, 0xeb, 0x45, 0x97, //0x0000b068 .quad -7546366883288685774 + 0x98, 0xd8, 0xc3, 0x3b, 0xa9, 0xe5, 0x50, 0xb6, //0x0000b070 .quad -5309491445654890344 + 0xff, 0xfb, 0x01, 0xa5, 0x20, 0x66, 0x17, 0xbd, //0x0000b078 .quad -4821272585683469313 + 0xbe, 0xce, 0xb4, 0x8a, 0x13, 0x1f, 0xe5, 0xa3, //0x0000b080 .quad -6636864307068612930 + 0xff, 0x7a, 0x42, 0xce, 0xa8, 0x3f, 0x5d, 0xec, //0x0000b088 .quad -1414904713676948737 + 0x37, 0x01, 0xb1, 0x36, 0x6c, 0x33, 0x6f, 0xc6, //0x0000b090 .quad -4148040191917883081 + 0xdf, 0x8c, 0xe9, 0x80, 0xc9, 0x47, 0xba, 0x93, //0x0000b098 .quad -7801844473689174817 + 0x84, 0x41, 0x5d, 0x44, 0x47, 0x00, 0x0b, 0xb8, //0x0000b0a0 .quad -5185050239897353852 + 0x17, 0xf0, 0x23, 0xe1, 0xbb, 0xd9, 0xa8, 0xb8, //0x0000b0a8 .quad -5140619573684080617 + 0xe5, 0x91, 0x74, 0x15, 0x59, 0xc0, 0x0d, 0xa6, //0x0000b0b0 .quad -6481312799871692315 + 0x1d, 0xec, 0x6c, 0xd9, 0x2a, 0x10, 0xd3, 0xe6, //0x0000b0b8 .quad -1814088448677712867 + 0x2f, 0xdb, 0x68, 0xad, 0x37, 0x98, 0xc8, 0x87, //0x0000b0c0 .quad -8662506518347195601 + 0x92, 0x13, 0xe4, 0xc7, 0x1a, 0xea, 0x43, 0x90, //0x0000b0c8 .quad -8051334308064652398 + 0xfb, 0x11, 0xc3, 0x98, 0x45, 0xbe, 0xba, 0x29, //0x0000b0d0 .quad 3006924907348169211 + 0x77, 0x18, 0xdd, 0x79, 0xa1, 0xe4, 0x54, 0xb4, //0x0000b0d8 .quad -5452481866653427593 + 0x7a, 0xd6, 0xf3, 0xfe, 0xd6, 0x6d, 0x29, 0xf4, //0x0000b0e0 .quad -853029884242176390 + 0x94, 0x5e, 0x54, 0xd8, 0xc9, 0x1d, 0x6a, 0xe1, //0x0000b0e8 .quad -2203916314889396588 + 0x0c, 0x66, 0x58, 0x5f, 0xa6, 0xe4, 0x99, 0x18, //0x0000b0f0 .quad 1772699331562333708 + 0x1d, 0xbb, 0x34, 0x27, 0x9e, 0x52, 0xe2, 0x8c, //0x0000b0f8 .quad -8294976724446954723 + 0x8f, 0x7f, 0x2e, 0xf7, 0xcf, 0x5d, 0xc0, 0x5e, //0x0000b100 .quad 6827560182880305039 + 0xe4, 0xe9, 0x01, 0xb1, 0x45, 0xe7, 0x1a, 0xb0, //0x0000b108 .quad -5757034887131305500 + 0x73, 0x1f, 0xfa, 0xf4, 0x43, 0x75, 0x70, 0x76, //0x0000b110 .quad 8534450228600381299 + 0x5d, 0x64, 0x42, 0x1d, 0x17, 0xa1, 0x21, 0xdc, //0x0000b118 .quad -2584607590486743971 + 0xa8, 0x53, 0x1c, 0x79, 0x4a, 0x49, 0x06, 0x6a, //0x0000b120 .quad 7639874402088932264 + 0xba, 0x7e, 0x49, 0x72, 0xae, 0x04, 0x95, 0x89, //0x0000b128 .quad -8532908771695296838 + 0x92, 0x68, 0x63, 0x17, 0x9d, 0xdb, 0x87, 0x04, //0x0000b130 .quad 326470965756389522 + 0x69, 0xde, 0xdb, 0x0e, 0xda, 0x45, 0xfa, 0xab, //0x0000b138 .quad -6054449946191733143 + 0xb6, 0x42, 0x3c, 0x5d, 0x84, 0xd2, 0xa9, 0x45, //0x0000b140 .quad 5019774725622874806 + 0x03, 0xd6, 0x92, 0x92, 0x50, 0xd7, 0xf8, 0xd6, //0x0000b148 .quad -2956376414312278525 + 0xb2, 0xa9, 0x45, 0xba, 0x92, 0x23, 0x8a, 0x0b, //0x0000b150 .quad 831516194300602802 + 0xc2, 0xc5, 0x9b, 0x5b, 0x92, 0x86, 0x5b, 0x86, //0x0000b158 .quad -8765264286586255934 + 0x1e, 0x14, 0xd7, 0x68, 0x77, 0xac, 0x6c, 0x8e, //0x0000b160 .quad -8183976793979022306 + 0x32, 0xb7, 0x82, 0xf2, 0x36, 0x68, 0xf2, 0xa7, //0x0000b168 .quad -6344894339805432014 + 0x26, 0xd9, 0x0c, 0x43, 0x95, 0xd7, 0x07, 0x32, //0x0000b170 .quad 3605087062808385830 + 0xff, 0x64, 0x23, 0xaf, 0x44, 0x02, 0xef, 0xd1, //0x0000b178 .quad -3319431906329402113 + 0xb8, 0x07, 0xe8, 0x49, 0xbd, 0xe6, 0x44, 0x7f, //0x0000b180 .quad 9170708441896323000 + 0x1f, 0x1f, 0x76, 0xed, 0x6a, 0x61, 0x35, 0x83, //0x0000b188 .quad -8992173969096958177 + 0xa6, 0x09, 0x62, 0x9c, 0x6c, 0x20, 0x16, 0x5f, //0x0000b190 .quad 6851699533943015846 + 0xe7, 0xa6, 0xd3, 0xa8, 0xc5, 0xb9, 0x02, 0xa4, //0x0000b198 .quad -6628531442943809817 + 0x0f, 0x8c, 0x7a, 0xc3, 0x87, 0xa8, 0xdb, 0x36, //0x0000b1a0 .quad 3952938399001381903 + 0xa1, 0x90, 0x08, 0x13, 0x37, 0x68, 0x03, 0xcd, //0x0000b1a8 .quad -3673978285252374367 + 0x89, 0x97, 0x2c, 0xda, 0x54, 0x49, 0x49, 0xc2, //0x0000b1b0 .quad -4446942528265218167 + 0x64, 0x5a, 0xe5, 0x6b, 0x22, 0x21, 0x22, 0x80, //0x0000b1b8 .quad -9213765455923815836 + 0x6c, 0xbd, 0xb7, 0x10, 0xaa, 0x9b, 0xdb, 0xf2, //0x0000b1c0 .quad -946992141904134804 + 0xfd, 0xb0, 0xde, 0x06, 0x6b, 0xa9, 0x2a, 0xa0, //0x0000b1c8 .quad -6905520801477381891 + 0xc7, 0xac, 0xe5, 0x94, 0x94, 0x82, 0x92, 0x6f, //0x0000b1d0 .quad 8039631859474607303 + 0x3d, 0x5d, 0x96, 0xc8, 0xc5, 0x53, 0x35, 0xc8, //0x0000b1d8 .quad -4020214983419339459 + 0xf9, 0x17, 0x1f, 0xba, 0x39, 0x23, 0x77, 0xcb, //0x0000b1e0 .quad -3785518230938904583 + 0x8c, 0xf4, 0xbb, 0x3a, 0xb7, 0xa8, 0x42, 0xfa, //0x0000b1e8 .quad -413582710846786420 + 0xfb, 0x6e, 0x53, 0x14, 0x04, 0x76, 0x2a, 0xff, //0x0000b1f0 .quad -60105885123121413 + 0xd7, 0x78, 0xb5, 0x84, 0x72, 0xa9, 0x69, 0x9c, //0x0000b1f8 .quad -7176018221920323369 + 0xba, 0x4a, 0x68, 0x19, 0x85, 0x13, 0xf5, 0xfe, //0x0000b200 .quad -75132356403901766 + 0x0d, 0xd7, 0xe2, 0x25, 0xcf, 0x13, 0x84, 0xc3, //0x0000b208 .quad -4358336758973016307 + 0x69, 0x5d, 0xc2, 0x5f, 0x66, 0x58, 0xb2, 0x7e, //0x0000b210 .quad 9129456591349898601 + 0xd1, 0x8c, 0x5b, 0xef, 0xc2, 0x18, 0x65, 0xf4, //0x0000b218 .quad -836234930288882479 + 0x61, 0x7a, 0xd9, 0xfb, 0x3f, 0x77, 0x2f, 0xef, //0x0000b220 .quad -1211618658047395231 + 0x02, 0x38, 0x99, 0xd5, 0x79, 0x2f, 0xbf, 0x98, //0x0000b228 .quad -7440175859071633406 + 0xfa, 0xd8, 0xcf, 0xfa, 0x0f, 0x55, 0xfb, 0xaa, //0x0000b230 .quad -6126209340986631942 + 0x03, 0x86, 0xff, 0x4a, 0x58, 0xfb, 0xee, 0xbe, //0x0000b238 .quad -4688533805412153853 + 0x38, 0xcf, 0x83, 0xf9, 0x53, 0x2a, 0xba, 0x95, //0x0000b240 .quad -7657761676233289928 + 0x84, 0x67, 0xbf, 0x5d, 0x2e, 0xba, 0xaa, 0xee, //0x0000b248 .quad -1248981238337804412 + 0x83, 0x61, 0xf2, 0x7b, 0x74, 0x5a, 0x94, 0xdd, //0x0000b250 .quad -2480258038432112253 + 0xb2, 0xa0, 0x97, 0xfa, 0x5c, 0xb4, 0x2a, 0x95, //0x0000b258 .quad -7698142301602209614 + 0xe4, 0xf9, 0xee, 0x9a, 0x11, 0x71, 0xf9, 0x94, //0x0000b260 .quad -7712008566467528220 + 0xdf, 0x88, 0x3d, 0x39, 0x74, 0x61, 0x75, 0xba, //0x0000b268 .quad -5010991858575374113 + 0x5d, 0xb8, 0xaa, 0x01, 0x56, 0xcd, 0x37, 0x7a, //0x0000b270 .quad 8806733365625141341 + 0x17, 0xeb, 0x8c, 0x47, 0xd1, 0xb9, 0x12, 0xe9, //0x0000b278 .quad -1652053804791829737 + 0x3a, 0xb3, 0x0a, 0xc1, 0x55, 0xe0, 0x62, 0xac, //0x0000b280 .quad -6025006692552756422 + 0xee, 0x12, 0xb8, 0xcc, 0x22, 0xb4, 0xab, 0x91, //0x0000b288 .quad -7950062655635975442 + 0x09, 0x60, 0x4d, 0x31, 0x6b, 0x98, 0x7b, 0x57, //0x0000b290 .quad 6303799689591218185 + 0xaa, 0x17, 0xe6, 0x7f, 0x2b, 0xa1, 0x16, 0xb6, //0x0000b298 .quad -5325892301117581398 + 0x0b, 0xb8, 0xa0, 0xfd, 0x85, 0x7e, 0x5a, 0xed, //0x0000b2a0 .quad -1343622424865753077 + 0x94, 0x9d, 0xdf, 0x5f, 0x76, 0x49, 0x9c, 0xe3, //0x0000b2a8 .quad -2045679357969588844 + 0x07, 0x73, 0x84, 0xbe, 0x13, 0x8f, 0x58, 0x14, //0x0000b2b0 .quad 1466078993672598279 + 0x7d, 0xc2, 0xeb, 0xfb, 0xe9, 0xad, 0x41, 0x8e, //0x0000b2b8 .quad -8196078626372074883 + 0xc8, 0x8f, 0x25, 0xae, 0xd8, 0xb2, 0x6e, 0x59, //0x0000b2c0 .quad 6444284760518135752 + 0x1c, 0xb3, 0xe6, 0x7a, 0x64, 0x19, 0xd2, 0xb1, //0x0000b2c8 .quad -5633412264537705700 + 0xbb, 0xf3, 0xae, 0xd9, 0x8e, 0x5f, 0xca, 0x6f, //0x0000b2d0 .quad 8055355950647669691 + 0xe3, 0x5f, 0xa0, 0x99, 0xbd, 0x9f, 0x46, 0xde, //0x0000b2d8 .quad -2430079312244744221 + 0x54, 0x58, 0x0d, 0x48, 0xb9, 0x7b, 0xde, 0x25, //0x0000b2e0 .quad 2728754459941099604 + 0xee, 0x3b, 0x04, 0x80, 0xd6, 0x23, 0xec, 0x8a, //0x0000b2e8 .quad -8436328597794046994 + 0x6a, 0xae, 0x10, 0x9a, 0xa7, 0x1a, 0x56, 0xaf, //0x0000b2f0 .quad -5812428961928401302 + 0xe9, 0x4a, 0x05, 0x20, 0xcc, 0x2c, 0xa7, 0xad, //0x0000b2f8 .quad -5933724728815170839 + 0x04, 0xda, 0x94, 0x80, 0x51, 0xa1, 0x2b, 0x1b, //0x0000b300 .quad 1957835834444274180 + 0xa4, 0x9d, 0x06, 0x28, 0xff, 0xf7, 0x10, 0xd9, //0x0000b308 .quad -2805469892591575644 + 0x42, 0x08, 0x5d, 0xf0, 0xd2, 0x44, 0xfb, 0x90, //0x0000b310 .quad -7999724640327104446 + 0x86, 0x22, 0x04, 0x79, 0xff, 0x9a, 0xaa, 0x87, //0x0000b318 .quad -8670947710510816634 + 0x53, 0x4a, 0x74, 0xac, 0x07, 0x16, 0x3a, 0x35, //0x0000b320 .quad 3835402254873283155 + 0x28, 0x2b, 0x45, 0x57, 0xbf, 0x41, 0x95, 0xa9, //0x0000b328 .quad -6226998619711132888 + 0xe8, 0x5c, 0x91, 0x97, 0x89, 0x9b, 0x88, 0x42, //0x0000b330 .quad 4794252818591603944 + 0xf2, 0x75, 0x16, 0x2d, 0x2f, 0x92, 0xfa, 0xd3, //0x0000b338 .quad -3172062256211528206 + 0x11, 0xda, 0xba, 0xfe, 0x35, 0x61, 0x95, 0x69, //0x0000b340 .quad 7608094030047140369 + 0xb7, 0x09, 0x2e, 0x7c, 0x5d, 0x9b, 0x7c, 0x84, //0x0000b348 .quad -8900067937773286985 + 0x95, 0x90, 0x69, 0x7e, 0x83, 0xb9, 0xfa, 0x43, //0x0000b350 .quad 4898431519131537557 + 0x25, 0x8c, 0x39, 0xdb, 0x34, 0xc2, 0x9b, 0xa5, //0x0000b358 .quad -6513398903789220827 + 0xbb, 0xf4, 0x03, 0x5e, 0xe4, 0x67, 0xf9, 0x94, //0x0000b360 .quad -7712018656367741765 + 0x2e, 0xef, 0x07, 0x12, 0xc2, 0xb2, 0x02, 0xcf, //0x0000b368 .quad -3530062611309138130 + 0xf5, 0x78, 0xc2, 0xba, 0xee, 0xe0, 0x1b, 0x1d, //0x0000b370 .quad 2097517367411243253 + 0x7d, 0xf5, 0x44, 0x4b, 0xb9, 0xaf, 0x61, 0x81, //0x0000b378 .quad -9123818159709293187 + 0x32, 0x17, 0x73, 0x69, 0x2a, 0xd9, 0x62, 0x64, //0x0000b380 .quad 7233582727691441970 + 0xdc, 0x32, 0x16, 0x9e, 0xa7, 0x1b, 0xba, 0xa1, //0x0000b388 .quad -6793086681209228580 + 0xfe, 0xdc, 0xcf, 0x03, 0x75, 0x8f, 0x7b, 0x7d, //0x0000b390 .quad 9041978409614302462 + 0x93, 0xbf, 0x9b, 0x85, 0x91, 0xa2, 0x28, 0xca, //0x0000b398 .quad -3879672333084147821 + 0x3e, 0xd4, 0xc3, 0x44, 0x52, 0x73, 0xda, 0x5c, //0x0000b3a0 .quad 6690786993590490174 + 0x78, 0xaf, 0x02, 0xe7, 0x35, 0xcb, 0xb2, 0xfc, //0x0000b3a8 .quad -237904397927796872 + 0xa7, 0x64, 0xfa, 0x6a, 0x13, 0x88, 0x08, 0x3a, //0x0000b3b0 .quad 4181741870994056359 + 0xab, 0xad, 0x61, 0xb0, 0x01, 0xbf, 0xef, 0x9d, //0x0000b3b8 .quad -7066219276345954901 + 0xd0, 0xfd, 0xb8, 0x45, 0x18, 0xaa, 0x8a, 0x08, //0x0000b3c0 .quad 615491320315182544 + 0x16, 0x19, 0x7a, 0x1c, 0xc2, 0xae, 0x6b, 0xc5, //0x0000b3c8 .quad -4221088077005055722 + 0x45, 0x3d, 0x27, 0x57, 0x9e, 0x54, 0xad, 0x8a, //0x0000b3d0 .quad -8454007886460797627 + 0x5b, 0x9f, 0x98, 0xa3, 0x72, 0x9a, 0xc6, 0xf6, //0x0000b3d8 .quad -664674077828931749 + 0x4b, 0x86, 0x78, 0xf6, 0xe2, 0x54, 0xac, 0x36, //0x0000b3e0 .quad 3939617107816777291 + 0x99, 0x63, 0x3f, 0xa6, 0x87, 0x20, 0x3c, 0x9a, //0x0000b3e8 .quad -7332950326284164199 + 0xdd, 0xa7, 0x16, 0xb4, 0x1b, 0x6a, 0x57, 0x84, //0x0000b3f0 .quad -8910536670511192099 + 0x7f, 0x3c, 0xcf, 0x8f, 0xa9, 0x28, 0xcb, 0xc0, //0x0000b3f8 .quad -4554501889427817345 + 0xd5, 0x51, 0x1c, 0xa1, 0xa2, 0x44, 0x6d, 0x65, //0x0000b400 .quad 7308573235570561493 + 0x9f, 0x0b, 0xc3, 0xf3, 0xd3, 0xf2, 0xfd, 0xf0, //0x0000b408 .quad -1081441343357383777 + 0x25, 0xb3, 0xb1, 0xa4, 0xe5, 0x4a, 0x64, 0x9f, //0x0000b410 .quad -6961356773836868827 + 0x43, 0xe7, 0x59, 0x78, 0xc4, 0xb7, 0x9e, 0x96, //0x0000b418 .quad -7593429867239446717 + 0xee, 0x1f, 0xde, 0x0d, 0x9f, 0x5d, 0x3d, 0x87, //0x0000b420 .quad -8701695967296086034 + 0x14, 0x61, 0x70, 0x96, 0xb5, 0x65, 0x46, 0xbc, //0x0000b428 .quad -4880101315621920492 + 0xea, 0xa7, 0x55, 0xd1, 0x06, 0xb5, 0x0c, 0xa9, //0x0000b430 .quad -6265433940692719638 + 0x59, 0x79, 0x0c, 0xfc, 0x22, 0xff, 0x57, 0xeb, //0x0000b438 .quad -1488440626100012711 + 0xf2, 0x88, 0xd5, 0x42, 0x24, 0xf1, 0xa7, 0x09, //0x0000b440 .quad 695789805494438130 + 0xd8, 0xcb, 0x87, 0xdd, 0x75, 0xff, 0x16, 0x93, //0x0000b448 .quad -7847804418953589800 + 0x2f, 0xeb, 0x8a, 0x53, 0x6d, 0xed, 0x11, 0x0c, //0x0000b450 .quad 869737256868047663 + 0xce, 0xbe, 0xe9, 0x54, 0x53, 0xbf, 0xdc, 0xb7, //0x0000b458 .quad -5198069505264599346 + 0xfa, 0xa5, 0x6d, 0xa8, 0xc8, 0x68, 0x16, 0x8f, //0x0000b460 .quad -8136200465769716230 + 0x81, 0x2e, 0x24, 0x2a, 0x28, 0xef, 0xd3, 0xe5, //0x0000b468 .quad -1885900863153361279 + 0xbc, 0x87, 0x44, 0x69, 0x7d, 0x01, 0x6e, 0xf9, //0x0000b470 .quad -473439272678684740 + 0x10, 0x9d, 0x56, 0x1a, 0x79, 0x75, 0xa4, 0x8f, //0x0000b478 .quad -8096217067111932656 + 0xac, 0xa9, 0x95, 0xc3, 0xdc, 0x81, 0xc9, 0x37, //0x0000b480 .quad 4019886927579031980 + 0x55, 0x44, 0xec, 0x60, 0xd7, 0x92, 0x8d, 0xb3, //0x0000b488 .quad -5508585315462527915 + 0x17, 0x14, 0x7b, 0xf4, 0x53, 0xe2, 0xbb, 0x85, //0x0000b490 .quad -8810199395808373737 + 0x6a, 0x55, 0x27, 0x39, 0x8d, 0xf7, 0x70, 0xe0, //0x0000b498 .quad -2274045625900771990 + 0x8e, 0xec, 0xcc, 0x78, 0x74, 0x6d, 0x95, 0x93, //0x0000b4a0 .quad -7812217631593927538 + 0x62, 0x95, 0xb8, 0x43, 0xb8, 0x9a, 0x46, 0x8c, //0x0000b4a8 .quad -8338807543829064350 + 0xb2, 0x27, 0x00, 0x97, 0xd1, 0xc8, 0x7a, 0x38, //0x0000b4b0 .quad 4069786015789754290 + 0xbb, 0xba, 0xa6, 0x54, 0x66, 0x41, 0x58, 0xaf, //0x0000b4b8 .quad -5811823411358942533 + 0x9e, 0x31, 0xc0, 0xfc, 0x05, 0x7b, 0x99, 0x06, //0x0000b4c0 .quad 475546501309804958 + 0x6a, 0x69, 0xd0, 0xe9, 0xbf, 0x51, 0x2e, 0xdb, //0x0000b4c8 .quad -2653093245771290262 + 0x03, 0x1f, 0xf8, 0xbd, 0xe3, 0xec, 0x1f, 0x44, //0x0000b4d0 .quad 4908902581746016003 + 0xe2, 0x41, 0x22, 0xf2, 0x17, 0xf3, 0xfc, 0x88, //0x0000b4d8 .quad -8575712306248138270 + 0xc3, 0x26, 0x76, 0xad, 0x1c, 0xe8, 0x27, 0xd5, //0x0000b4e0 .quad -3087243809672255805 + 0x5a, 0xd2, 0xaa, 0xee, 0xdd, 0x2f, 0x3c, 0xab, //0x0000b4e8 .quad -6107954364382784934 + 0x74, 0xb0, 0xd3, 0xd8, 0x23, 0xe2, 0x71, 0x8a, //0x0000b4f0 .quad -8470740780517707660 + 0xf1, 0x86, 0x55, 0x6a, 0xd5, 0x3b, 0x0b, 0xd6, //0x0000b4f8 .quad -3023256937051093263 + 0x49, 0x4e, 0x84, 0x67, 0x56, 0x2d, 0x87, 0xf6, //0x0000b500 .quad -682526969396179383 + 0x56, 0x74, 0x75, 0x62, 0x65, 0x05, 0xc7, 0x85, //0x0000b508 .quad -8807064613298015146 + 0xdb, 0x61, 0x65, 0x01, 0xac, 0xf8, 0x28, 0xb4, //0x0000b510 .quad -5464844730172612133 + 0x6c, 0xd1, 0x12, 0xbb, 0xbe, 0xc6, 0x38, 0xa7, //0x0000b518 .quad -6397144748195131028 + 0x52, 0xba, 0xbe, 0x01, 0xd7, 0x36, 0x33, 0xe1, //0x0000b520 .quad -2219369894288377262 + 0xc7, 0x85, 0xd7, 0x69, 0x6e, 0xf8, 0x06, 0xd1, //0x0000b528 .quad -3384744916816525881 + 0x73, 0x34, 0x17, 0x61, 0x46, 0x02, 0xc0, 0xec, //0x0000b530 .quad -1387106183930235789 + 0x9c, 0xb3, 0x26, 0x02, 0x45, 0x5b, 0xa4, 0x82, //0x0000b538 .quad -9032994600651410532 + 0x90, 0x01, 0x5d, 0xf9, 0xd7, 0x02, 0xf0, 0x27, //0x0000b540 .quad 2877803288514593168 + 0x84, 0x60, 0xb0, 0x42, 0x16, 0x72, 0x4d, 0xa3, //0x0000b548 .quad -6679557232386875260 + 0xf4, 0x41, 0xb4, 0xf7, 0x8d, 0x03, 0xec, 0x31, //0x0000b550 .quad 3597254110643241460 + 0xa5, 0x78, 0x5c, 0xd3, 0x9b, 0xce, 0x20, 0xcc, //0x0000b558 .quad -3737760522056206171 + 0x71, 0x52, 0xa1, 0x75, 0x71, 0x04, 0x67, 0x7e, //0x0000b560 .quad 9108253656731439729 + 0xce, 0x96, 0x33, 0xc8, 0x42, 0x02, 0x29, 0xff, //0x0000b568 .quad -60514634142869810 + 0x86, 0xd3, 0x84, 0xe9, 0xc6, 0x62, 0x00, 0x0f, //0x0000b570 .quad 1080972517029761926 + 0x41, 0x3e, 0x20, 0xbd, 0x69, 0xa1, 0x79, 0x9f, //0x0000b578 .quad -6955350673980375487 + 0x68, 0x08, 0xe6, 0xa3, 0x78, 0x7b, 0xc0, 0x52, //0x0000b580 .quad 5962901664714590312 + 0xd1, 0x4d, 0x68, 0x2c, 0xc4, 0x09, 0x58, 0xc7, //0x0000b588 .quad -4082502324048081455 + 0x82, 0x8a, 0xdf, 0xcc, 0x56, 0x9a, 0x70, 0xa7, //0x0000b590 .quad -6381430974388925822 + 0x45, 0x61, 0x82, 0x37, 0x35, 0x0c, 0x2e, 0xf9, //0x0000b598 .quad -491441886632713915 + 0x91, 0xb6, 0x0b, 0x40, 0x76, 0x60, 0xa6, 0x88, //0x0000b5a0 .quad -8600080377420466543 + 0xcb, 0x7c, 0xb1, 0x42, 0xa1, 0xc7, 0xbc, 0x9b, //0x0000b5a8 .quad -7224680206786528053 + 0x35, 0xa4, 0x0e, 0xd0, 0x93, 0xf8, 0xcf, 0x6a, //0x0000b5b0 .quad 7696643601933968437 + 0xfe, 0xdb, 0x5d, 0x93, 0x89, 0xf9, 0xab, 0xc2, //0x0000b5b8 .quad -4419164240055772162 + 0x43, 0x4d, 0x12, 0xc4, 0xb8, 0xf6, 0x83, 0x05, //0x0000b5c0 .quad 397432465562684739 + 0xfe, 0x52, 0x35, 0xf8, 0xeb, 0xf7, 0x56, 0xf3, //0x0000b5c8 .quad -912269281642327298 + 0x4a, 0x70, 0x8b, 0x7a, 0x33, 0x7a, 0x72, 0xc3, //0x0000b5d0 .quad -4363290727450709942 + 0xde, 0x53, 0x21, 0x7b, 0xf3, 0x5a, 0x16, 0x98, //0x0000b5d8 .quad -7487697328667536418 + 0x5c, 0x4c, 0x2e, 0x59, 0xc0, 0x18, 0x4f, 0x74, //0x0000b5e0 .quad 8380944645968776284 + 0xd6, 0xa8, 0xe9, 0x59, 0xb0, 0xf1, 0x1b, 0xbe, //0x0000b5e8 .quad -4747935642407032618 + 0x73, 0xdf, 0x79, 0x6f, 0xf0, 0xde, 0x62, 0x11, //0x0000b5f0 .quad 1252808770606194547 + 0x0c, 0x13, 0x64, 0x70, 0x1c, 0xee, 0xa2, 0xed, //0x0000b5f8 .quad -1323233534581402868 + 0xa8, 0x2b, 0xac, 0x45, 0x56, 0xcb, 0xdd, 0x8a, //0x0000b600 .quad -8440366555225904216 + 0xe7, 0x8b, 0x3e, 0xc6, 0xd1, 0xd4, 0x85, 0x94, //0x0000b608 .quad -7744549986754458649 + 0x92, 0x36, 0x17, 0xd7, 0x2b, 0x3e, 0x95, 0x6d, //0x0000b610 .quad 7896285879677171346 + 0xe1, 0x2e, 0xce, 0x37, 0x06, 0x4a, 0xa7, 0xb9, //0x0000b618 .quad -5069001465015685407 + 0x37, 0x04, 0xdd, 0xcc, 0xb6, 0x8d, 0xfa, 0xc8, //0x0000b620 .quad -3964700705685699529 + 0x99, 0xba, 0xc1, 0xc5, 0x87, 0x1c, 0x11, 0xe8, //0x0000b628 .quad -1724565812842218855 + 0xa2, 0x22, 0x0a, 0x40, 0x92, 0x98, 0x9c, 0x1d, //0x0000b630 .quad 2133748077373825698 + 0xa0, 0x14, 0x99, 0xdb, 0xd4, 0xb1, 0x0a, 0x91, //0x0000b638 .quad -7995382660667468640 + 0x4b, 0xab, 0x0c, 0xd0, 0xb6, 0xbe, 0x03, 0x25, //0x0000b640 .quad 2667185096717282123 + 0xc8, 0x59, 0x7f, 0x12, 0x4a, 0x5e, 0x4d, 0xb5, //0x0000b648 .quad -5382542307406947896 + 0x1d, 0xd6, 0x0f, 0x84, 0x64, 0xae, 0x44, 0x2e, //0x0000b650 .quad 3333981370896602653 + 0x3a, 0x30, 0x1f, 0x97, 0xdc, 0xb5, 0xa0, 0xe2, //0x0000b658 .quad -2116491865831296966 + 0xd2, 0xe5, 0x89, 0xd2, 0xfe, 0xec, 0xea, 0x5c, //0x0000b660 .quad 6695424375237764562 + 0x24, 0x7e, 0x73, 0xde, 0xa9, 0x71, 0xa4, 0x8d, //0x0000b668 .quad -8240336443785642460 + 0x47, 0x5f, 0x2c, 0x87, 0x3e, 0xa8, 0x25, 0x74, //0x0000b670 .quad 8369280469047205703 + 0xad, 0x5d, 0x10, 0x56, 0x14, 0x8e, 0x0d, 0xb1, //0x0000b678 .quad -5688734536304665171 + 0x19, 0x77, 0xf7, 0x28, 0x4e, 0x12, 0x2f, 0xd1, //0x0000b680 .quad -3373457468973156583 + 0x18, 0x75, 0x94, 0x6b, 0x99, 0xf1, 0x50, 0xdd, //0x0000b688 .quad -2499232151953443560 + 0x6f, 0xaa, 0x9a, 0xd9, 0x70, 0x6b, 0xbd, 0x82, //0x0000b690 .quad -9025939945749304721 + 0x2f, 0xc9, 0x3c, 0xe3, 0xff, 0x96, 0x52, 0x8a, //0x0000b698 .quad -8479549122611984081 + 0x0b, 0x55, 0x01, 0x10, 0x4d, 0xc6, 0x6c, 0x63, //0x0000b6a0 .quad 7164319141522920715 + 0x7b, 0xfb, 0x0b, 0xdc, 0xbf, 0x3c, 0xe7, 0xac, //0x0000b6a8 .quad -5987750384837592197 + 0x4e, 0xaa, 0x01, 0x54, 0xe0, 0xf7, 0x47, 0x3c, //0x0000b6b0 .quad 4343712908476262990 + 0x5a, 0xfa, 0x0e, 0xd3, 0xef, 0x0b, 0x21, 0xd8, //0x0000b6b8 .quad -2873001962619602342 + 0x71, 0x0a, 0x81, 0x34, 0xec, 0xfa, 0xac, 0x65, //0x0000b6c0 .quad 7326506586225052273 + 0x78, 0x5c, 0xe9, 0xe3, 0x75, 0xa7, 0x14, 0x87, //0x0000b6c8 .quad -8713155254278333320 + 0x0d, 0x4d, 0xa1, 0x41, 0xa7, 0x39, 0x18, 0x7f, //0x0000b6d0 .quad 9158133232781315341 + 0x96, 0xb3, 0xe3, 0x5c, 0x53, 0xd1, 0xd9, 0xa8, //0x0000b6d8 .quad -6279758049420528746 + 0x50, 0xa0, 0x09, 0x12, 0x11, 0x48, 0xde, 0x1e, //0x0000b6e0 .quad 2224294504121868368 + 0x7c, 0xa0, 0x1c, 0x34, 0xa8, 0x45, 0x10, 0xd3, //0x0000b6e8 .quad -3238011543348273028 + 0x32, 0x04, 0x46, 0xab, 0x0a, 0xed, 0x4a, 0x93, //0x0000b6f0 .quad -7833187971778608078 + 0x4d, 0xe4, 0x91, 0x20, 0x89, 0x2b, 0xea, 0x83, //0x0000b6f8 .quad -8941286242233752499 + 0x3f, 0x85, 0x17, 0x56, 0x4d, 0xa8, 0x1d, 0xf8, //0x0000b700 .quad -568112927868484289 + 0x60, 0x5d, 0xb6, 0x68, 0x6b, 0xb6, 0xe4, 0xa4, //0x0000b708 .quad -6564921784364802720 + 0x8e, 0x66, 0x9d, 0xab, 0x60, 0x12, 0x25, 0x36, //0x0000b710 .quad 3901544858591782542 + 0xb9, 0xf4, 0xe3, 0x42, 0x06, 0xe4, 0x1d, 0xce, //0x0000b718 .quad -3594466212028615495 + 0x19, 0x60, 0x42, 0x6b, 0x7c, 0x2b, 0xd7, 0xc1, //0x0000b720 .quad -4479063491021217767 + 0xf3, 0x78, 0xce, 0xe9, 0x83, 0xae, 0xd2, 0x80, //0x0000b728 .quad -9164070410158966541 + 0x1f, 0xf8, 0x12, 0x86, 0x5b, 0xf6, 0x4c, 0xb2, //0x0000b730 .quad -5598829363776522209 + 0x30, 0x17, 0x42, 0xe4, 0x24, 0x5a, 0x07, 0xa1, //0x0000b738 .quad -6843401994271320272 + 0x27, 0xb6, 0x97, 0x67, 0xf2, 0x33, 0xe0, 0xde, //0x0000b740 .quad -2386850686293264857 + 0xfc, 0x9c, 0x52, 0x1d, 0xae, 0x30, 0x49, 0xc9, //0x0000b748 .quad -3942566474411762436 + 0xb1, 0xa3, 0x7d, 0x01, 0xef, 0x40, 0x98, 0x16, //0x0000b750 .quad 1628122660560806833 + 0x3c, 0x44, 0xa7, 0xa4, 0xd9, 0x7c, 0x9b, 0xfb, //0x0000b758 .quad -316522074587315140 + 0x4e, 0x86, 0xee, 0x60, 0x95, 0x28, 0x1f, 0x8e, //0x0000b760 .quad -8205795374004271538 + 0xa5, 0x8a, 0xe8, 0x06, 0x08, 0x2e, 0x41, 0x9d, //0x0000b768 .quad -7115355324258153819 + 0xe2, 0x27, 0x2a, 0xb9, 0xba, 0xf2, 0xa6, 0xf1, //0x0000b770 .quad -1033872180650563614 + 0x4e, 0xad, 0xa2, 0x08, 0x8a, 0x79, 0x91, 0xc4, //0x0000b778 .quad -4282508136895304370 + 0xdb, 0xb1, 0x74, 0x67, 0x69, 0xaf, 0x10, 0xae, //0x0000b780 .quad -5904026244240592421 + 0xa2, 0x58, 0xcb, 0x8a, 0xec, 0xd7, 0xb5, 0xf5, //0x0000b788 .quad -741449152691742558 + 0x29, 0xef, 0xa8, 0xe0, 0xa1, 0x6d, 0xca, 0xac, //0x0000b790 .quad -5995859411864064215 + 0x65, 0x17, 0xbf, 0xd6, 0xf3, 0xa6, 0x91, 0x99, //0x0000b798 .quad -7380934748073420955 + 0xf3, 0x2a, 0xd3, 0x58, 0x0a, 0x09, 0xfd, 0x17, //0x0000b7a0 .quad 1728547772024695539 + 0x3f, 0xdd, 0x6e, 0xcc, 0xb0, 0x10, 0xf6, 0xbf, //0x0000b7a8 .quad -4614482416664388289 + 0xb0, 0xf5, 0x07, 0xef, 0x4c, 0x4b, 0xfc, 0xdd, //0x0000b7b0 .quad -2451001303396518480 + 0x8e, 0x94, 0x8a, 0xff, 0xdc, 0x94, 0xf3, 0xef, //0x0000b7b8 .quad -1156417002403097458 + 0x8e, 0xf9, 0x64, 0x15, 0x10, 0xaf, 0xbd, 0x4a, //0x0000b7c0 .quad 5385653213018257806 + 0xd9, 0x9c, 0xb6, 0x1f, 0x0a, 0x3d, 0xf8, 0x95, //0x0000b7c8 .quad -7640289654143017767 + 0xf1, 0x37, 0xbe, 0x1a, 0xd4, 0x1a, 0x6d, 0x9d, //0x0000b7d0 .quad -7102991539009341455 + 0x0f, 0x44, 0xa4, 0xa7, 0x4c, 0x4c, 0x76, 0xbb, //0x0000b7d8 .quad -4938676049251384305 + 0xed, 0xc5, 0x6d, 0x21, 0x89, 0x61, 0xc8, 0x84, //0x0000b7e0 .quad -8878739423761676819 + 0x13, 0x55, 0x8d, 0xd1, 0x5f, 0xdf, 0x53, 0xea, //0x0000b7e8 .quad -1561659043136842477 + 0xb4, 0x9b, 0xe4, 0xb4, 0xf5, 0x3c, 0xfd, 0x32, //0x0000b7f0 .quad 3674159897003727796 + 0x2c, 0x55, 0xf8, 0xe2, 0x9b, 0x6b, 0x74, 0x92, //0x0000b7f8 .quad -7893565929601608404 + 0xa1, 0xc2, 0x1d, 0x22, 0x33, 0x8c, 0xbc, 0x3f, //0x0000b800 .quad 4592699871254659745 + 0x77, 0x6a, 0xb6, 0xdb, 0x82, 0x86, 0x11, 0xb7, //0x0000b808 .quad -5255271393574622601 + 0x4a, 0x33, 0xa5, 0xea, 0x3f, 0xaf, 0xab, 0x0f, //0x0000b810 .quad 1129188820640936778 + 0x15, 0x05, 0xa4, 0x92, 0x23, 0xe8, 0xd5, 0xe4, //0x0000b818 .quad -1957403223540890347 + 0x0e, 0x40, 0xa7, 0xf2, 0x87, 0x4d, 0xcb, 0x29, //0x0000b820 .quad 3011586022114279438 + 0x2d, 0x83, 0xa6, 0x3b, 0x16, 0xb1, 0x05, 0x8f, //0x0000b828 .quad -8140906042354138323 + 0x12, 0x10, 0x51, 0xef, 0xe9, 0x20, 0x3e, 0x74, //0x0000b830 .quad 8376168546070237202 + 0xf8, 0x23, 0x90, 0xca, 0x5b, 0x1d, 0xc7, 0xb2, //0x0000b838 .quad -5564446534515285000 + 0x16, 0x54, 0x25, 0x6b, 0x24, 0xa9, 0x4d, 0x91, //0x0000b840 .quad -7976533391121755114 + 0xf6, 0x2c, 0x34, 0xbd, 0xb2, 0xe4, 0x78, 0xdf, //0x0000b848 .quad -2343872149716718346 + 0x8e, 0x54, 0xf7, 0xc2, 0xb6, 0x89, 0xd0, 0x1a, //0x0000b850 .quad 1932195658189984910 + 0x1a, 0x9c, 0x40, 0xb6, 0xef, 0x8e, 0xab, 0x8b, //0x0000b858 .quad -8382449121214030822 + 0xb1, 0x29, 0xb5, 0x73, 0x24, 0xac, 0x84, 0xa1, //0x0000b860 .quad -6808127464117294671 + 0x20, 0xc3, 0xd0, 0xa3, 0xab, 0x72, 0x96, 0xae, //0x0000b868 .quad -5866375383090150624 + 0x1e, 0x74, 0xa2, 0x90, 0x2d, 0xd7, 0xe5, 0xc9, //0x0000b870 .quad -3898473311719230434 + 0xe8, 0xf3, 0xc4, 0x8c, 0x56, 0x0f, 0x3c, 0xda, //0x0000b878 .quad -2721283210435300376 + 0x92, 0x88, 0x65, 0x7a, 0x7c, 0xa6, 0x2f, 0x7e, //0x0000b880 .quad 9092669226243950738 + 0x71, 0x18, 0xfb, 0x17, 0x96, 0x89, 0x65, 0x88, //0x0000b888 .quad -8618331034163144591 + 0xb7, 0xea, 0xfe, 0x98, 0x1b, 0x90, 0xbb, 0xdd, //0x0000b890 .quad -2469221522477225289 + 0x8d, 0xde, 0xf9, 0x9d, 0xfb, 0xeb, 0x7e, 0xaa, //0x0000b898 .quad -6161227774276542835 + 0x65, 0xa5, 0x3e, 0x7f, 0x22, 0x74, 0x2a, 0x55, //0x0000b8a0 .quad 6136845133758244197 + 0x31, 0x56, 0x78, 0x85, 0xfa, 0xa6, 0x1e, 0xd5, //0x0000b8a8 .quad -3089848699418290639 + 0x5f, 0x27, 0x87, 0x8f, 0x95, 0x88, 0x3a, 0xd5, //0x0000b8b0 .quad -3082000819042179233 + 0xde, 0x35, 0x6b, 0x93, 0x5c, 0x28, 0x33, 0x85, //0x0000b8b8 .quad -8848684464777513506 + 0x37, 0xf1, 0x68, 0xf3, 0xba, 0x2a, 0x89, 0x8a, //0x0000b8c0 .quad -8464187042230111945 + 0x56, 0x03, 0x46, 0xb8, 0x73, 0xf2, 0x7f, 0xa6, //0x0000b8c8 .quad -6449169562544503978 + 0x85, 0x2d, 0x43, 0xb0, 0x69, 0x75, 0x2b, 0x2d, //0x0000b8d0 .quad 3254824252494523781 + 0x2c, 0x84, 0x57, 0xa6, 0x10, 0xef, 0x1f, 0xd0, //0x0000b8d8 .quad -3449775934753242068 + 0x73, 0xfc, 0x29, 0x0e, 0x62, 0x29, 0x3b, 0x9c, //0x0000b8e0 .quad -7189106879045698445 + 0x9b, 0xb2, 0xf6, 0x67, 0x6a, 0xf5, 0x13, 0x82, //0x0000b8e8 .quad -9073638986861858149 + 0x8f, 0x7b, 0xb4, 0x91, 0xba, 0xf3, 0x49, 0x83, //0x0000b8f0 .quad -8986383598807123057 + 0x42, 0x5f, 0xf4, 0x01, 0xc5, 0xf2, 0x98, 0xa2, //0x0000b8f8 .quad -6730362715149934782 + 0x73, 0x9a, 0x21, 0x36, 0xa9, 0x70, 0x1c, 0x24, //0x0000b900 .quad 2602078556773259891 + 0x13, 0x77, 0x71, 0x42, 0x76, 0x2f, 0x3f, 0xcb, //0x0000b908 .quad -3801267375510030573 + 0x10, 0x01, 0xaa, 0x83, 0xd3, 0x8c, 0x23, 0xed, //0x0000b910 .quad -1359087822460813040 + 0xd7, 0xd4, 0x0d, 0xd3, 0x53, 0xfb, 0x0e, 0xfe, //0x0000b918 .quad -139898200960150313 + 0xaa, 0x40, 0x4a, 0x32, 0x04, 0x38, 0x36, 0xf4, //0x0000b920 .quad -849429889038008150 + 0x06, 0xa5, 0xe8, 0x63, 0x14, 0x5d, 0xc9, 0x9e, //0x0000b928 .quad -7004965403241175802 + 0xd5, 0xd0, 0xdc, 0x3e, 0x05, 0xc6, 0x43, 0xb1, //0x0000b930 .quad -5673473379724898091 + 0x48, 0xce, 0xe2, 0x7c, 0x59, 0xb4, 0x7b, 0xc6, //0x0000b938 .quad -4144520735624081848 + 0x0a, 0x05, 0x94, 0x8e, 0x86, 0xb7, 0x94, 0xdd, //0x0000b940 .quad -2480155706228734710 + 0xda, 0x81, 0x1b, 0xdc, 0x6f, 0xa1, 0x1a, 0xf8, //0x0000b948 .quad -568964901102714406 + 0x26, 0x83, 0x1c, 0x19, 0xb4, 0xf2, 0x7c, 0xca, //0x0000b950 .quad -3855940325606653146 + 0x28, 0x31, 0x91, 0xe9, 0xe5, 0xa4, 0x10, 0x9b, //0x0000b958 .quad -7273132090830278360 + 0xf0, 0xa3, 0x63, 0x1f, 0x61, 0x2f, 0x1c, 0xfd, //0x0000b960 .quad -208239388580928528 + 0x72, 0x7d, 0xf5, 0x63, 0x1f, 0xce, 0xd4, 0xc1, //0x0000b968 .quad -4479729095110460046 + 0xec, 0x8c, 0x3c, 0x67, 0x39, 0x3b, 0x63, 0xbc, //0x0000b970 .quad -4871985254153548564 + 0xcf, 0xdc, 0xf2, 0x3c, 0xa7, 0x01, 0x4a, 0xf2, //0x0000b978 .quad -987975350460687153 + 0x13, 0xd8, 0x85, 0xe0, 0x03, 0x05, 0xbe, 0xd5, //0x0000b980 .quad -3044990783845967853 + 0x01, 0xca, 0x17, 0x86, 0x08, 0x41, 0x6e, 0x97, //0x0000b988 .quad -7535013621679011327 + 0x18, 0x4e, 0xa7, 0xd8, 0x44, 0x86, 0x2d, 0x4b, //0x0000b990 .quad 5417133557047315992 + 0x82, 0xbc, 0x9d, 0xa7, 0x4a, 0xd1, 0x49, 0xbd, //0x0000b998 .quad -4807081008671376254 + 0x9e, 0x21, 0xd1, 0x0e, 0xd6, 0xe7, 0xf8, 0xdd, //0x0000b9a0 .quad -2451955090545630818 + 0xa2, 0x2b, 0x85, 0x51, 0x9d, 0x45, 0x9c, 0xec, //0x0000b9a8 .quad -1397165242411832414 + 0x03, 0xb5, 0x42, 0xc9, 0xe5, 0x90, 0xbb, 0xca, //0x0000b9b0 .quad -3838314940804713213 + 0x45, 0x3b, 0xf3, 0x52, 0x82, 0xab, 0xe1, 0x93, //0x0000b9b8 .quad -7790757304148477115 + 0x43, 0x62, 0x93, 0x3b, 0x1f, 0x75, 0x6a, 0x3d, //0x0000b9c0 .quad 4425478360848884291 + 0x17, 0x0a, 0xb0, 0xe7, 0x62, 0x16, 0xda, 0xb8, //0x0000b9c8 .quad -5126760611758208489 + 0xd4, 0x3a, 0x78, 0x0a, 0x67, 0x12, 0xc5, 0x0c, //0x0000b9d0 .quad 920161932633717460 + 0x9d, 0x0c, 0x9c, 0xa1, 0xfb, 0x9b, 0x10, 0xe7, //0x0000b9d8 .quad -1796764746270372707 + 0xc5, 0x24, 0x8b, 0x66, 0x80, 0x2b, 0xfb, 0x27, //0x0000b9e0 .quad 2880944217109767365 + 0xe2, 0x87, 0x01, 0x45, 0x7d, 0x61, 0x6a, 0x90, //0x0000b9e8 .quad -8040506994060064798 + 0xf6, 0xed, 0x2d, 0x80, 0x60, 0xf6, 0xf9, 0xb1, //0x0000b9f0 .quad -5622191765467566602 + 0xda, 0xe9, 0x41, 0x96, 0xdc, 0xf9, 0x84, 0xb4, //0x0000b9f8 .quad -5438947724147693094 + 0x73, 0x69, 0x39, 0xa0, 0xf8, 0x73, 0x78, 0x5e, //0x0000ba00 .quad 6807318348447705459 + 0x51, 0x64, 0xd2, 0xbb, 0x53, 0x38, 0xa6, 0xe1, //0x0000ba08 .quad -2186998636757228463 + 0xe8, 0xe1, 0x23, 0x64, 0x7b, 0x48, 0x0b, 0xdb, //0x0000ba10 .quad -2662955059861265944 + 0xb2, 0x7e, 0x63, 0x55, 0x34, 0xe3, 0x07, 0x8d, //0x0000ba18 .quad -8284403175614349646 + 0x62, 0xda, 0x2c, 0x3d, 0x9a, 0x1a, 0xce, 0x91, //0x0000ba20 .quad -7940379843253970334 + 0x5f, 0x5e, 0xbc, 0x6a, 0x01, 0xdc, 0x49, 0xb0, //0x0000ba28 .quad -5743817951090549153 + 0xfb, 0x10, 0x78, 0xcc, 0x40, 0xa1, 0x41, 0x76, //0x0000ba30 .quad 8521269269642088699 + 0xf7, 0x75, 0x6b, 0xc5, 0x01, 0x53, 0x5c, 0xdc, //0x0000ba38 .quad -2568086420435798537 + 0x9d, 0x0a, 0xcb, 0x7f, 0xc8, 0x04, 0xe9, 0xa9, //0x0000ba40 .quad -6203421752542164323 + 0xba, 0x29, 0x63, 0x1b, 0xe1, 0xb3, 0xb9, 0x89, //0x0000ba48 .quad -8522583040413455942 + 0x44, 0xcd, 0xbd, 0x9f, 0xfa, 0x45, 0x63, 0x54, //0x0000ba50 .quad 6080780864604458308 + 0x29, 0xf4, 0x3b, 0x62, 0xd9, 0x20, 0x28, 0xac, //0x0000ba58 .quad -6041542782089432023 + 0x95, 0x40, 0xad, 0x47, 0x79, 0x17, 0x7c, 0xa9, //0x0000ba60 .quad -6234081974526590827 + 0x33, 0xf1, 0xca, 0xba, 0x0f, 0x29, 0x32, 0xd7, //0x0000ba68 .quad -2940242459184402125 + 0x5d, 0x48, 0xcc, 0xcc, 0xab, 0x8e, 0xed, 0x49, //0x0000ba70 .quad 5327070802775656541 + 0xc0, 0xd6, 0xbe, 0xd4, 0xa9, 0x59, 0x7f, 0x86, //0x0000ba78 .quad -8755180564631333184 + 0x74, 0x5a, 0xff, 0xbf, 0x56, 0xf2, 0x68, 0x5c, //0x0000ba80 .quad 6658838503469570676 + 0x70, 0x8c, 0xee, 0x49, 0x14, 0x30, 0x1f, 0xa8, //0x0000ba88 .quad -6332289687361778576 + 0x11, 0x31, 0xff, 0x6f, 0xec, 0x2e, 0x83, 0x73, //0x0000ba90 .quad 8323548129336963345 + 0x8c, 0x2f, 0x6a, 0x5c, 0x19, 0xfc, 0x26, 0xd2, //0x0000ba98 .quad -3303676090774835316 + 0xab, 0x7e, 0xff, 0xc5, 0x53, 0xfd, 0x31, 0xc8, //0x0000baa0 .quad -4021154456019173717 + 0xb7, 0x5d, 0xc2, 0xd9, 0x8f, 0x5d, 0x58, 0x83, //0x0000baa8 .quad -8982326584375353929 + 0x55, 0x5e, 0x7f, 0xb7, 0xa8, 0x7c, 0x3e, 0xba, //0x0000bab0 .quad -5026443070023967147 + 0x25, 0xf5, 0x32, 0xd0, 0xf3, 0x74, 0x2e, 0xa4, //0x0000bab8 .quad -6616222212041804507 + 0xeb, 0x35, 0x5f, 0xe5, 0xd2, 0x1b, 0xce, 0x28, //0x0000bac0 .quad 2940318199324816875 + 0x6f, 0xb2, 0x3f, 0xc4, 0x30, 0x12, 0x3a, 0xcd, //0x0000bac8 .quad -3658591746624867729 + 0xb3, 0x81, 0x5b, 0xcf, 0x63, 0xd1, 0x80, 0x79, //0x0000bad0 .quad 8755227902219092403 + 0x85, 0xcf, 0xa7, 0x7a, 0x5e, 0x4b, 0x44, 0x80, //0x0000bad8 .quad -9204148869281624187 + 0x1f, 0x62, 0x32, 0xc3, 0xbc, 0x05, 0xe1, 0xd7, //0x0000bae0 .quad -2891023177508298209 + 0x66, 0xc3, 0x51, 0x19, 0x36, 0x5e, 0x55, 0xa0, //0x0000bae8 .quad -6893500068174642330 + 0xa7, 0xfa, 0xfe, 0xf3, 0x2b, 0x47, 0xd9, 0x8d, //0x0000baf0 .quad -8225464990312760665 + 0x40, 0x34, 0xa6, 0x9f, 0xc3, 0xb5, 0x6a, 0xc8, //0x0000baf8 .quad -4005189066790915008 + 0x51, 0xb9, 0xfe, 0xf0, 0xf6, 0x98, 0x4f, 0xb1, //0x0000bb00 .quad -5670145219463562927 + 0x50, 0xc1, 0x8f, 0x87, 0x34, 0x63, 0x85, 0xfa, //0x0000bb08 .quad -394800315061255856 + 0xd3, 0x33, 0x9f, 0x56, 0x9a, 0xbf, 0xd1, 0x6e, //0x0000bb10 .quad 7985374283903742931 + 0xd2, 0xd8, 0xb9, 0xd4, 0x00, 0x5e, 0x93, 0x9c, //0x0000bb18 .quad -7164279224554366766 + 0xc8, 0x00, 0x47, 0xec, 0x80, 0x2f, 0x86, 0x0a, //0x0000bb20 .quad 758345818024902856 + 0x07, 0x4f, 0xe8, 0x09, 0x81, 0x35, 0xb8, 0xc3, //0x0000bb28 .quad -4343663012265570553 + 0xfa, 0xc0, 0x58, 0x27, 0x61, 0xbb, 0x27, 0xcd, //0x0000bb30 .quad -3663753745896259334 + 0xc8, 0x62, 0x62, 0x4c, 0xe1, 0x42, 0xa6, 0xf4, //0x0000bb38 .quad -817892746904575288 + 0x9c, 0x78, 0x97, 0xb8, 0x1c, 0xd5, 0x38, 0x80, //0x0000bb40 .quad -9207375118826243940 + 0xbd, 0x7d, 0xbd, 0xcf, 0xcc, 0xe9, 0xe7, 0x98, //0x0000bb48 .quad -7428711994456441411 + 0xc3, 0x56, 0xbd, 0xe6, 0x63, 0x0a, 0x47, 0xe0, //0x0000bb50 .quad -2285846861678029117 + 0x2c, 0xdd, 0xac, 0x03, 0x40, 0xe4, 0x21, 0xbf, //0x0000bb58 .quad -4674203974643163860 + 0x74, 0xac, 0x6c, 0xe0, 0xfc, 0xcc, 0x58, 0x18, //0x0000bb60 .quad 1754377441329851508 + 0x78, 0x14, 0x98, 0x04, 0x50, 0x5d, 0xea, 0xee, //0x0000bb68 .quad -1231068949876566920 + 0xc8, 0xeb, 0x43, 0x0c, 0x1e, 0x80, 0x37, 0x0f, //0x0000bb70 .quad 1096485900831157192 + 0xcb, 0x0c, 0xdf, 0x02, 0x52, 0x7a, 0x52, 0x95, //0x0000bb78 .quad -7686947121313936181 + 0xba, 0xe6, 0x54, 0x8f, 0x25, 0x60, 0x05, 0xd3, //0x0000bb80 .quad -3241078642388441414 + 0xfd, 0xcf, 0x96, 0x83, 0xe6, 0x18, 0xa7, 0xba, //0x0000bb88 .quad -4996997883215032323 + 0x69, 0x20, 0x2a, 0xf3, 0x2e, 0xb8, 0xc6, 0x47, //0x0000bb90 .quad 5172023733869224041 + 0xfd, 0x83, 0x7c, 0x24, 0x20, 0xdf, 0x50, 0xe9, //0x0000bb98 .quad -1634561335591402499 + 0x41, 0x54, 0xfa, 0x57, 0x1d, 0x33, 0xdc, 0x4c, //0x0000bba0 .quad 5538357842881958977 + 0x7e, 0xd2, 0xcd, 0x16, 0x74, 0x8b, 0xd2, 0x91, //0x0000bba8 .quad -7939129862385708418 + 0x52, 0xe9, 0xf8, 0xad, 0xe4, 0x3f, 0x13, 0xe0, //0x0000bbb0 .quad -2300424733252327086 + 0x1d, 0x47, 0x81, 0x1c, 0x51, 0x2e, 0x47, 0xb6, //0x0000bbb8 .quad -5312226309554747619 + 0xa6, 0x23, 0x77, 0xd9, 0xdd, 0x0f, 0x18, 0x58, //0x0000bbc0 .quad 6347841120289366950 + 0xe5, 0x98, 0xa1, 0x63, 0xe5, 0xf9, 0xd8, 0xe3, //0x0000bbc8 .quad -2028596868516046619 + 0x48, 0x76, 0xea, 0xa7, 0xea, 0x09, 0x0f, 0x57, //0x0000bbd0 .quad 6273243709394548296 + 0x8f, 0xff, 0x44, 0x5e, 0x2f, 0x9c, 0x67, 0x8e, //0x0000bbd8 .quad -8185402070463610993 + 0xda, 0x13, 0xe5, 0x51, 0x65, 0xcc, 0xd2, 0x2c, //0x0000bbe0 .quad 3229868618315797466 + 0x73, 0x3f, 0xd6, 0x35, 0x3b, 0x83, 0x01, 0xb2, //0x0000bbe8 .quad -5620066569652125837 + 0xd1, 0x58, 0x5e, 0xa6, 0x7e, 0x7f, 0x07, 0xf8, //0x0000bbf0 .quad -574350245532641071 + 0x4f, 0xcf, 0x4b, 0x03, 0x0a, 0xe4, 0x81, 0xde, //0x0000bbf8 .quad -2413397193637769393 + 0x82, 0xf7, 0xfa, 0x27, 0xaf, 0xaf, 0x04, 0xfb, //0x0000bc00 .quad -358968903457900670 + 0x91, 0x61, 0x0f, 0x42, 0x86, 0x2e, 0x11, 0x8b, //0x0000bc08 .quad -8425902273664687727 + 0x63, 0xb5, 0xf9, 0xf1, 0x9a, 0xdb, 0xc5, 0x79, //0x0000bc10 .quad 8774660907532399971 + 0xf6, 0x39, 0x93, 0xd2, 0x27, 0x7a, 0xd5, 0xad, //0x0000bc18 .quad -5920691823653471754 + 0xbc, 0x22, 0x78, 0xae, 0x81, 0x52, 0x37, 0x18, //0x0000bc20 .quad 1744954097560724156 + 0x74, 0x08, 0x38, 0xc7, 0xb1, 0xd8, 0x4a, 0xd9, //0x0000bc28 .quad -2789178761139451788 + 0xb5, 0x15, 0x0b, 0x0d, 0x91, 0x93, 0x22, 0x8f, //0x0000bc30 .quad -8132775725879323211 + 0x48, 0x05, 0x83, 0x1c, 0x6f, 0xc7, 0xce, 0x87, //0x0000bc38 .quad -8660765753353239224 + 0x22, 0xdb, 0x4d, 0x50, 0x75, 0x38, 0xeb, 0xb2, //0x0000bc40 .quad -5554283638921766110 + 0x9a, 0xc6, 0xa3, 0xe3, 0x4a, 0x79, 0xc2, 0xa9, //0x0000bc48 .quad -6214271173264161126 + 0xeb, 0x51, 0x61, 0xa4, 0x92, 0x06, 0xa6, 0x5f, //0x0000bc50 .quad 6892203506629956075 + 0x41, 0xb8, 0x8c, 0x9c, 0x9d, 0x17, 0x33, 0xd4, //0x0000bc58 .quad -3156152948152813503 + 0x33, 0xd3, 0xbc, 0xa6, 0x1b, 0xc4, 0xc7, 0xdb, //0x0000bc60 .quad -2609901835997359309 + 0x28, 0xf3, 0xd7, 0x81, 0xc2, 0xee, 0x9f, 0x84, //0x0000bc68 .quad -8890124620236590296 + 0x00, 0x08, 0x6c, 0x90, 0x22, 0xb5, 0xb9, 0x12, //0x0000bc70 .quad 1349308723430688768 + 0xf3, 0xef, 0x4d, 0x22, 0x73, 0xea, 0xc7, 0xa5, //0x0000bc78 .quad -6500969756868349965 + 0x00, 0x0a, 0x87, 0x34, 0x6b, 0x22, 0x68, 0xd7, //0x0000bc80 .quad -2925050114139026944 + 0xef, 0x6b, 0xe1, 0xea, 0x0f, 0xe5, 0x39, 0xcf, //0x0000bc88 .quad -3514526177658049553 + 0x40, 0x66, 0xd4, 0x00, 0x83, 0x15, 0xa1, 0xe6, //0x0000bc90 .quad -1828156321336891840 + 0x75, 0xe3, 0xcc, 0xf2, 0x29, 0x2f, 0x84, 0x81, //0x0000bc98 .quad -9114107888677362827 + 0xd0, 0x7f, 0x09, 0xc1, 0xe3, 0x5a, 0x49, 0x60, //0x0000bca0 .quad 6938176635183661008 + 0x53, 0x1c, 0x80, 0x6f, 0xf4, 0x3a, 0xe5, 0xa1, //0x0000bca8 .quad -6780948842419315629 + 0xc4, 0xdf, 0x4b, 0xb1, 0x9c, 0xb1, 0x5b, 0x38, //0x0000bcb0 .quad 4061034775552188356 + 0x68, 0x23, 0x60, 0x8b, 0xb1, 0x89, 0x5e, 0xca, //0x0000bcb8 .quad -3864500034596756632 + 0xb5, 0xd7, 0x9e, 0xdd, 0x03, 0x9e, 0x72, 0x46, //0x0000bcc0 .quad 5076293469440235445 + 0x42, 0x2c, 0x38, 0xee, 0x1d, 0x2c, 0xf6, 0xfc, //0x0000bcc8 .quad -218939024818557886 + 0xd1, 0x46, 0x83, 0x6a, 0xc2, 0xa2, 0x07, 0x6c, //0x0000bcd0 .quad 7784369436827535057 + 0xa9, 0x1b, 0xe3, 0xb4, 0x92, 0xdb, 0x19, 0x9e, //0x0000bcd8 .quad -7054365918152680535 + 0x85, 0x18, 0x24, 0x05, 0x73, 0x8b, 0x09, 0xc7, //0x0000bce0 .quad -4104596259247744891 + 0x93, 0xe2, 0x1b, 0x62, 0x77, 0x52, 0xa0, 0xc5, //0x0000bce8 .quad -4206271379263462765 + 0xa7, 0x1e, 0x6d, 0xc6, 0x4f, 0xee, 0xcb, 0xb8, //0x0000bcf0 .quad -5130745324059681113 + 0x38, 0xdb, 0xa2, 0x3a, 0x15, 0x67, 0x08, 0xf7, //0x0000bcf8 .quad -646153205651940552 + 0x28, 0x33, 0x04, 0xdc, 0xf1, 0x74, 0x7f, 0x73, //0x0000bd00 .quad 8322499218531169064 + 0x03, 0xc9, 0xa5, 0x44, 0x6d, 0x40, 0x65, 0x9a, //0x0000bd08 .quad -7321374781173544701 + 0xf2, 0x3f, 0x05, 0x53, 0x2e, 0x52, 0x5f, 0x50, //0x0000bd10 .quad 5791438004736573426 + 0x44, 0x3b, 0xcf, 0x95, 0x88, 0x90, 0xfe, 0xc0, //0x0000bd18 .quad -4540032458039542972 + 0xef, 0x8f, 0xc6, 0xe7, 0xb9, 0x26, 0x77, 0x64, //0x0000bd20 .quad 7239297505920716783 + 0x15, 0x0a, 0x43, 0xbb, 0xaa, 0x34, 0x3e, 0xf1, //0x0000bd28 .quad -1063354554122040811 + 0xf5, 0x19, 0xdc, 0x30, 0x34, 0x78, 0xca, 0x5e, //0x0000bd30 .quad 6830403950414141941 + 0x4d, 0xe6, 0x09, 0xb5, 0xea, 0xe0, 0xc6, 0x96, //0x0000bd38 .quad -7582125623967357363 + 0x72, 0x20, 0x13, 0x3d, 0x41, 0x16, 0x7d, 0xb6, //0x0000bd40 .quad -5297053117264486286 + 0xe0, 0x5f, 0x4c, 0x62, 0x25, 0x99, 0x78, 0xbc, //0x0000bd48 .quad -4865971011531808800 + 0x8f, 0xe8, 0x57, 0x8c, 0xd1, 0x5b, 0x1c, 0xe4, //0x0000bd50 .quad -2009630378153219953 + 0xd8, 0x77, 0xdf, 0xba, 0x6e, 0xbf, 0x96, 0xeb, //0x0000bd58 .quad -1470777745987373096 + 0x59, 0xf1, 0xb6, 0xf7, 0x62, 0xb9, 0x91, 0x8e, //0x0000bd60 .quad -8173548013986844327 + 0xe7, 0xaa, 0xcb, 0x34, 0xa5, 0x37, 0x3e, 0x93, //0x0000bd68 .quad -7836765118883190041 + 0xb0, 0xad, 0xa4, 0xb5, 0xbb, 0x27, 0x36, 0x72, //0x0000bd70 .quad 8229809056225996208 + 0xa1, 0x95, 0xfe, 0x81, 0x8e, 0xc5, 0x0d, 0xb8, //0x0000bd78 .quad -5184270380176599647 + 0x1c, 0xd9, 0x0d, 0xa3, 0xaa, 0xb1, 0xc3, 0xce, //0x0000bd80 .quad -3547796734999668452 + 0x09, 0x3b, 0x7e, 0x22, 0xf2, 0x36, 0x11, 0xe6, //0x0000bd88 .quad -1868651956793361655 + 0xb1, 0xa7, 0xe8, 0xa5, 0x0a, 0x4f, 0x3a, 0x21, //0x0000bd90 .quad 2394313059052595121 + 0xe6, 0xe4, 0x8e, 0x55, 0x57, 0xc2, 0xca, 0x8f, //0x0000bd98 .quad -8085436500636932890 + 0x9d, 0xd1, 0x62, 0x4f, 0xcd, 0xe2, 0x88, 0xa9, //0x0000bda0 .quad -6230480713039031907 + 0x1f, 0x9e, 0xf2, 0x2a, 0xed, 0x72, 0xbd, 0xb3, //0x0000bda8 .quad -5495109607368778209 + 0x05, 0x86, 0x3b, 0xa3, 0x80, 0x1b, 0xeb, 0x93, //0x0000bdb0 .quad -7788100891298789883 + 0xa7, 0x45, 0xaf, 0x75, 0xa8, 0xcf, 0xac, 0xe0, //0x0000bdb8 .quad -2257200990783584857 + 0xc3, 0x33, 0x05, 0x66, 0x30, 0xf1, 0x72, 0xbc, //0x0000bdc0 .quad -4867563057061743677 + 0x88, 0x8b, 0x8d, 0x49, 0xc9, 0x01, 0x6c, 0x8c, //0x0000bdc8 .quad -8328279646880822392 + 0xb4, 0x80, 0x86, 0x7f, 0x7c, 0xad, 0x8f, 0xeb, //0x0000bdd0 .quad -1472767802899791692 + 0x6a, 0xee, 0xf0, 0x9b, 0x3b, 0x02, 0x87, 0xaf, //0x0000bdd8 .quad -5798663540173640086 + 0xe1, 0x20, 0x68, 0x9f, 0xdb, 0x98, 0x73, 0xa6, //0x0000bde0 .quad -6452645772052127519 + 0x05, 0x2a, 0xed, 0x82, 0xca, 0xc2, 0x68, 0xdb, //0x0000bde8 .quad -2636643406789662203 + 0x8c, 0x14, 0xa1, 0x43, 0x89, 0x3f, 0x08, 0x88, //0x0000bdf0 .quad -8644589625959967604 + 0x43, 0x3a, 0xd4, 0x91, 0xbe, 0x79, 0x21, 0x89, //0x0000bdf8 .quad -8565431156884620733 + 0xb0, 0x59, 0x89, 0x94, 0x6b, 0x4f, 0x0a, 0x6a, //0x0000be00 .quad 7641007041259592112 + 0xd4, 0x48, 0x49, 0x36, 0x2e, 0xd8, 0x69, 0xab, //0x0000be08 .quad -6095102927678388012 + 0x1c, 0xb0, 0xab, 0x79, 0x46, 0xe3, 0x8c, 0x84, //0x0000be10 .quad -8895485272135061476 + 0x09, 0x9b, 0xdb, 0xc3, 0x39, 0x4e, 0x44, 0xd6, //0x0000be18 .quad -3007192641170597111 + 0x11, 0x4e, 0x0b, 0x0c, 0x0c, 0x0e, 0xd8, 0xf2, //0x0000be20 .quad -947992276657025519 + 0xe5, 0x40, 0x69, 0x1a, 0xe4, 0xb0, 0xea, 0x85, //0x0000be28 .quad -8797024428372705051 + 0x95, 0x21, 0x0e, 0x0f, 0x8f, 0x11, 0x8e, 0x6f, //0x0000be30 .quad 8038381691033493909 + 0x1f, 0x91, 0x03, 0x21, 0x1d, 0x5d, 0x65, 0xa7, //0x0000be38 .quad -6384594517038493409 + 0xfb, 0xa9, 0xd1, 0xd2, 0xf2, 0x95, 0x71, 0x4b, //0x0000be40 .quad 5436291095364479483 + 0x67, 0x75, 0x44, 0x69, 0x64, 0xb4, 0x3e, 0xd1, //0x0000be48 .quad -3369057127870728857 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000be50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x0000be60 .p2align 4, 0x00 + //0x0000be60 _POW_TAB + 0x01, 0x00, 0x00, 0x00, //0x0000be60 .long 1 + 0x03, 0x00, 0x00, 0x00, //0x0000be64 .long 3 + 0x06, 0x00, 0x00, 0x00, //0x0000be68 .long 6 + 0x09, 0x00, 0x00, 0x00, //0x0000be6c .long 9 + 0x0d, 0x00, 0x00, 0x00, //0x0000be70 .long 13 + 0x10, 0x00, 0x00, 0x00, //0x0000be74 .long 16 + 0x13, 0x00, 0x00, 0x00, //0x0000be78 .long 19 + 0x17, 0x00, 0x00, 0x00, //0x0000be7c .long 23 + 0x1a, 0x00, 0x00, 0x00, //0x0000be80 .long 26 + //0x0000be84 .p2align 2, 0x00 + //0x0000be84 _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x0000be84 .long 2 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000be88 .p2align 4, 0x00 + //0x0000be90 _Digits + 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30, 0x33, 0x30, 0x34, 0x30, 0x35, 0x30, 0x36, 0x30, 0x37, //0x0000be90 QUAD $0x3330323031303030; QUAD $0x3730363035303430 // .ascii 16, '0001020304050607' + 0x30, 0x38, 0x30, 0x39, 0x31, 0x30, 0x31, 0x31, 0x31, 0x32, 0x31, 0x33, 0x31, 0x34, 0x31, 0x35, //0x0000bea0 QUAD $0x3131303139303830; QUAD $0x3531343133313231 // .ascii 16, '0809101112131415' + 0x31, 0x36, 0x31, 0x37, 0x31, 0x38, 0x31, 0x39, 0x32, 0x30, 0x32, 0x31, 0x32, 0x32, 0x32, 0x33, //0x0000beb0 QUAD $0x3931383137313631; QUAD $0x3332323231323032 // .ascii 16, '1617181920212223' + 0x32, 0x34, 0x32, 0x35, 0x32, 0x36, 0x32, 0x37, 0x32, 0x38, 0x32, 0x39, 0x33, 0x30, 0x33, 0x31, //0x0000bec0 QUAD $0x3732363235323432; QUAD $0x3133303339323832 // .ascii 16, '2425262728293031' + 0x33, 0x32, 0x33, 0x33, 0x33, 0x34, 0x33, 0x35, 0x33, 0x36, 0x33, 0x37, 0x33, 0x38, 0x33, 0x39, //0x0000bed0 QUAD $0x3533343333333233; QUAD $0x3933383337333633 // .ascii 16, '3233343536373839' + 0x34, 0x30, 0x34, 0x31, 0x34, 0x32, 0x34, 0x33, 0x34, 0x34, 0x34, 0x35, 0x34, 0x36, 0x34, 0x37, //0x0000bee0 QUAD $0x3334323431343034; QUAD $0x3734363435343434 // .ascii 16, '4041424344454647' + 0x34, 0x38, 0x34, 0x39, 0x35, 0x30, 0x35, 0x31, 0x35, 0x32, 0x35, 0x33, 0x35, 0x34, 0x35, 0x35, //0x0000bef0 QUAD $0x3135303539343834; QUAD $0x3535343533353235 // .ascii 16, '4849505152535455' + 0x35, 0x36, 0x35, 0x37, 0x35, 0x38, 0x35, 0x39, 0x36, 0x30, 0x36, 0x31, 0x36, 0x32, 0x36, 0x33, //0x0000bf00 QUAD $0x3935383537353635; QUAD $0x3336323631363036 // .ascii 16, '5657585960616263' + 0x36, 0x34, 0x36, 0x35, 0x36, 0x36, 0x36, 0x37, 0x36, 0x38, 0x36, 0x39, 0x37, 0x30, 0x37, 0x31, //0x0000bf10 QUAD $0x3736363635363436; QUAD $0x3137303739363836 // .ascii 16, '6465666768697071' + 0x37, 0x32, 0x37, 0x33, 0x37, 0x34, 0x37, 0x35, 0x37, 0x36, 0x37, 0x37, 0x37, 0x38, 0x37, 0x39, //0x0000bf20 QUAD $0x3537343733373237; QUAD $0x3937383737373637 // .ascii 16, '7273747576777879' + 0x38, 0x30, 0x38, 0x31, 0x38, 0x32, 0x38, 0x33, 0x38, 0x34, 0x38, 0x35, 0x38, 0x36, 0x38, 0x37, //0x0000bf30 QUAD $0x3338323831383038; QUAD $0x3738363835383438 // .ascii 16, '8081828384858687' + 0x38, 0x38, 0x38, 0x39, 0x39, 0x30, 0x39, 0x31, 0x39, 0x32, 0x39, 0x33, 0x39, 0x34, 0x39, 0x35, //0x0000bf40 QUAD $0x3139303939383838; QUAD $0x3539343933393239 // .ascii 16, '8889909192939495' + 0x39, 0x36, 0x39, 0x37, 0x39, 0x38, 0x39, 0x39, //0x0000bf50 QUAD $0x3939383937393639 // .ascii 8, '96979899' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000bf58 .p2align 4, 0x00 + //0x0000bf60 _pow10_ceil_sig.g + 0x4f, 0xdc, 0xbc, 0xbe, 0xfc, 0xb1, 0x77, 0xff, //0x0000bf60 .quad -38366372719436721 + 0x7b, 0x0f, 0xbb, 0x13, 0x9c, 0xe8, 0xe8, 0x25, //0x0000bf68 .quad 2731688931043774331 + 0xb1, 0x09, 0x36, 0xf7, 0x3d, 0xcf, 0xaa, 0x9f, //0x0000bf70 .quad -6941508010590729807 + 0xad, 0xe9, 0x54, 0x8c, 0x61, 0x91, 0xb1, 0x77, //0x0000bf78 .quad 8624834609543440813 + 0x1d, 0x8c, 0x03, 0x75, 0x0d, 0x83, 0x95, 0xc7, //0x0000bf80 .quad -4065198994811024355 + 0x18, 0x24, 0x6a, 0xef, 0xb9, 0xf5, 0x9d, 0xd5, //0x0000bf88 .quad -3054014793352862696 + 0x25, 0x6f, 0x44, 0xd2, 0xd0, 0xe3, 0x7a, 0xf9, //0x0000bf90 .quad -469812725086392539 + 0x1e, 0xad, 0x44, 0x6b, 0x28, 0x73, 0x05, 0x4b, //0x0000bf98 .quad 5405853545163697438 + 0x77, 0xc5, 0x6a, 0x83, 0x62, 0xce, 0xec, 0x9b, //0x0000bfa0 .quad -7211161980820077193 + 0x33, 0xec, 0x0a, 0x43, 0xf9, 0x67, 0xe3, 0x4e, //0x0000bfa8 .quad 5684501474941004851 + 0xd5, 0x76, 0x45, 0x24, 0xfb, 0x01, 0xe8, 0xc2, //0x0000bfb0 .quad -4402266457597708587 + 0x40, 0xa7, 0xcd, 0x93, 0xf7, 0x41, 0x9c, 0x22, //0x0000bfb8 .quad 2493940825248868160 + 0x8a, 0xd4, 0x56, 0xed, 0x79, 0x02, 0xa2, 0xf3, //0x0000bfc0 .quad -891147053569747830 + 0x10, 0x11, 0xc1, 0x78, 0x75, 0x52, 0x43, 0x6b, //0x0000bfc8 .quad 7729112049988473104 + 0xd6, 0x44, 0x56, 0x34, 0x8c, 0x41, 0x45, 0x98, //0x0000bfd0 .quad -7474495936122174250 + 0xaa, 0xaa, 0x78, 0x6b, 0x89, 0x13, 0x0a, 0x83, //0x0000bfd8 .quad -9004363024039368022 + 0x0c, 0xd6, 0x6b, 0x41, 0xef, 0x91, 0x56, 0xbe, //0x0000bfe0 .quad -4731433901725329908 + 0x54, 0xd5, 0x56, 0xc6, 0x6b, 0x98, 0xcc, 0x23, //0x0000bfe8 .quad 2579604275232953684 + 0x8f, 0xcb, 0xc6, 0x11, 0x6b, 0x36, 0xec, 0xed, //0x0000bff0 .quad -1302606358729274481 + 0xa9, 0x8a, 0xec, 0xb7, 0x86, 0xbe, 0xbf, 0x2c, //0x0000bff8 .quad 3224505344041192105 + 0x39, 0x3f, 0x1c, 0xeb, 0x02, 0xa2, 0xb3, 0x94, //0x0000c000 .quad -7731658001846878407 + 0xaa, 0xd6, 0xf3, 0x32, 0x14, 0xd7, 0xf7, 0x7b, //0x0000c008 .quad 8932844867666826922 + 0x07, 0x4f, 0xe3, 0xa5, 0x83, 0x8a, 0xe0, 0xb9, //0x0000c010 .quad -5052886483881210105 + 0x54, 0xcc, 0xb0, 0x3f, 0xd9, 0xcc, 0xf5, 0xda, //0x0000c018 .quad -2669001970698630060 + 0xc9, 0x22, 0x5c, 0x8f, 0x24, 0xad, 0x58, 0xe8, //0x0000c020 .quad -1704422086424124727 + 0x69, 0xff, 0x9c, 0x8f, 0x0f, 0x40, 0xb3, 0xd1, //0x0000c028 .quad -3336252463373287575 + 0xbe, 0x95, 0x99, 0xd9, 0x36, 0x6c, 0x37, 0x91, //0x0000c030 .quad -7982792831656159810 + 0xa2, 0x1f, 0xc2, 0xb9, 0x09, 0x08, 0x10, 0x23, //0x0000c038 .quad 2526528228819083170 + 0x2d, 0xfb, 0xff, 0x8f, 0x44, 0x47, 0x85, 0xb5, //0x0000c040 .quad -5366805021142811859 + 0x8b, 0xa7, 0x32, 0x28, 0x0c, 0x0a, 0xd4, 0xab, //0x0000c048 .quad -6065211750830921845 + 0xf9, 0xf9, 0xff, 0xb3, 0x15, 0x99, 0xe6, 0xe2, //0x0000c050 .quad -2096820258001126919 + 0x6d, 0x51, 0x3f, 0x32, 0x8f, 0x0c, 0xc9, 0x16, //0x0000c058 .quad 1641857348316123501 + 0x3b, 0xfc, 0x7f, 0x90, 0xad, 0x1f, 0xd0, 0x8d, //0x0000c060 .quad -8228041688891786181 + 0xe4, 0x92, 0x67, 0x7f, 0xd9, 0xa7, 0x3d, 0xae, //0x0000c068 .quad -5891368184943504668 + 0x4a, 0xfb, 0x9f, 0xf4, 0x98, 0x27, 0x44, 0xb1, //0x0000c070 .quad -5673366092687344822 + 0x9d, 0x77, 0x41, 0xdf, 0xcf, 0x11, 0xcd, 0x99, //0x0000c078 .quad -7364210231179380835 + 0x1d, 0xfa, 0xc7, 0x31, 0x7f, 0x31, 0x95, 0xdd, //0x0000c080 .quad -2480021597431793123 + 0x84, 0xd5, 0x11, 0xd7, 0x43, 0x56, 0x40, 0x40, //0x0000c088 .quad 4629795266307937668 + 0x52, 0xfc, 0x1c, 0x7f, 0xef, 0x3e, 0x7d, 0x8a, //0x0000c090 .quad -8467542526035952558 + 0x73, 0x25, 0x6b, 0x66, 0xea, 0x35, 0x28, 0x48, //0x0000c098 .quad 5199465050656154995 + 0x66, 0x3b, 0xe4, 0x5e, 0xab, 0x8e, 0x1c, 0xad, //0x0000c0a0 .quad -5972742139117552794 + 0xd0, 0xee, 0x05, 0x00, 0x65, 0x43, 0x32, 0xda, //0x0000c0a8 .quad -2724040723534582064 + 0x40, 0x4a, 0x9d, 0x36, 0x56, 0xb2, 0x63, 0xd8, //0x0000c0b0 .quad -2854241655469553088 + 0x83, 0x6a, 0x07, 0x40, 0x3e, 0xd4, 0xbe, 0x90, //0x0000c0b8 .quad -8016736922845615485 + 0x68, 0x4e, 0x22, 0xe2, 0x75, 0x4f, 0x3e, 0x87, //0x0000c0c0 .quad -8701430062309552536 + 0x92, 0xa2, 0x04, 0xe8, 0xa6, 0x44, 0x77, 0x5a, //0x0000c0c8 .quad 6518754469289960082 + 0x02, 0xe2, 0xaa, 0x5a, 0x53, 0xe3, 0x0d, 0xa9, //0x0000c0d0 .quad -6265101559459552766 + 0x37, 0xcb, 0x05, 0xa2, 0xd0, 0x15, 0x15, 0x71, //0x0000c0d8 .quad 8148443086612450103 + 0x83, 0x9a, 0x55, 0x31, 0x28, 0x5c, 0x51, 0xd3, //0x0000c0e0 .quad -3219690930897053053 + 0x04, 0x3e, 0x87, 0xca, 0x44, 0x5b, 0x5a, 0x0d, //0x0000c0e8 .quad 962181821410786820 + 0x91, 0x80, 0xd5, 0x1e, 0x99, 0xd9, 0x12, 0x84, //0x0000c0f0 .quad -8929835859451740015 + 0xc3, 0x86, 0x94, 0xfe, 0x0a, 0x79, 0x58, 0xe8, //0x0000c0f8 .quad -1704479370831952189 + 0xb6, 0xe0, 0x8a, 0x66, 0xff, 0x8f, 0x17, 0xa5, //0x0000c100 .quad -6550608805887287114 + 0x73, 0xa8, 0x39, 0xbe, 0x4d, 0x97, 0x6e, 0x62, //0x0000c108 .quad 7092772823314835571 + 0xe3, 0x98, 0x2d, 0x40, 0xff, 0x73, 0x5d, 0xce, //0x0000c110 .quad -3576574988931720989 + 0x90, 0x12, 0xc8, 0x2d, 0x21, 0x3d, 0x0a, 0xfb, //0x0000c118 .quad -357406007711231344 + 0x8e, 0x7f, 0x1c, 0x88, 0x7f, 0x68, 0xfa, 0x80, //0x0000c120 .quad -9152888395723407474 + 0x9a, 0x0b, 0x9d, 0xbc, 0x34, 0x66, 0xe6, 0x7c, //0x0000c128 .quad 8999993282035256218 + 0x72, 0x9f, 0x23, 0x6a, 0x9f, 0x02, 0x39, 0xa1, //0x0000c130 .quad -6829424476226871438 + 0x81, 0x4e, 0xc4, 0xeb, 0xc1, 0xff, 0x1f, 0x1c, //0x0000c138 .quad 2026619565689294465 + 0x4e, 0x87, 0xac, 0x44, 0x47, 0x43, 0x87, 0xc9, //0x0000c140 .quad -3925094576856201394 + 0x21, 0x62, 0xb5, 0x66, 0xb2, 0xff, 0x27, 0xa3, //0x0000c148 .quad -6690097579743157727 + 0x22, 0xa9, 0xd7, 0x15, 0x19, 0x14, 0xe9, 0xfb, //0x0000c150 .quad -294682202642863838 + 0xa9, 0xba, 0x62, 0x00, 0x9f, 0xff, 0xf1, 0x4b, //0x0000c158 .quad 5472436080603216553 + 0xb5, 0xc9, 0xa6, 0xad, 0x8f, 0xac, 0x71, 0x9d, //0x0000c160 .quad -7101705404292871755 + 0xaa, 0xb4, 0x3d, 0x60, 0xc3, 0x3f, 0x77, 0x6f, //0x0000c168 .quad 8031958568804398250 + 0x22, 0x7c, 0x10, 0x99, 0xb3, 0x17, 0xce, 0xc4, //0x0000c170 .quad -4265445736938701790 + 0xd4, 0x21, 0x4d, 0x38, 0xb4, 0x0f, 0x55, 0xcb, //0x0000c178 .quad -3795109844276665900 + 0x2b, 0x9b, 0x54, 0x7f, 0xa0, 0x9d, 0x01, 0xf6, //0x0000c180 .quad -720121152745989333 + 0x49, 0x6a, 0x60, 0x46, 0xa1, 0x53, 0x2a, 0x7e, //0x0000c188 .quad 9091170749936331337 + 0xfb, 0xe0, 0x94, 0x4f, 0x84, 0x02, 0xc1, 0x99, //0x0000c190 .quad -7367604748107325189 + 0x6e, 0x42, 0xfc, 0xcb, 0x44, 0x74, 0xda, 0x2e, //0x0000c198 .quad 3376138709496513134 + 0x39, 0x19, 0x7a, 0x63, 0x25, 0x43, 0x31, 0xc0, //0x0000c1a0 .quad -4597819916706768583 + 0x09, 0x53, 0xfb, 0xfe, 0x55, 0x11, 0x91, 0xfa, //0x0000c1a8 .quad -391512631556746487 + 0x88, 0x9f, 0x58, 0xbc, 0xee, 0x93, 0x3d, 0xf0, //0x0000c1b0 .quad -1135588877456072824 + 0xcb, 0x27, 0xba, 0x7e, 0xab, 0x55, 0x35, 0x79, //0x0000c1b8 .quad 8733981247408842699 + 0xb5, 0x63, 0xb7, 0x35, 0x75, 0x7c, 0x26, 0x96, //0x0000c1c0 .quad -7627272076051127371 + 0xdf, 0x58, 0x34, 0x2f, 0x8b, 0x55, 0xc1, 0x4b, //0x0000c1c8 .quad 5458738279630526687 + 0xa2, 0x3c, 0x25, 0x83, 0x92, 0x1b, 0xb0, 0xbb, //0x0000c1d0 .quad -4922404076636521310 + 0x17, 0x6f, 0x01, 0xfb, 0xed, 0xaa, 0xb1, 0x9e, //0x0000c1d8 .quad -7011635205744005353 + 0xcb, 0x8b, 0xee, 0x23, 0x77, 0x22, 0x9c, 0xea, //0x0000c1e0 .quad -1541319077368263733 + 0xdd, 0xca, 0xc1, 0x79, 0xa9, 0x15, 0x5e, 0x46, //0x0000c1e8 .quad 5070514048102157021 + 0x5f, 0x17, 0x75, 0x76, 0x8a, 0x95, 0xa1, 0x92, //0x0000c1f0 .quad -7880853450996246689 + 0xca, 0x1e, 0x19, 0xec, 0x89, 0xcd, 0xfa, 0x0b, //0x0000c1f8 .quad 863228270850154186 + 0x36, 0x5d, 0x12, 0x14, 0xed, 0xfa, 0x49, 0xb7, //0x0000c200 .quad -5239380795317920458 + 0x7c, 0x66, 0x1f, 0x67, 0xec, 0x80, 0xf9, 0xce, //0x0000c208 .quad -3532650679864695172 + 0x84, 0xf4, 0x16, 0x59, 0xa8, 0x79, 0x1c, 0xe5, //0x0000c210 .quad -1937539975720012668 + 0x1b, 0x40, 0xe7, 0x80, 0x27, 0xe1, 0xb7, 0x82, //0x0000c218 .quad -9027499368258256869 + 0xd2, 0x58, 0xae, 0x37, 0x09, 0xcc, 0x31, 0x8f, //0x0000c220 .quad -8128491512466089774 + 0x11, 0x88, 0x90, 0xb0, 0xb8, 0xec, 0xb2, 0xd1, //0x0000c228 .quad -3336344095947716591 + 0x07, 0xef, 0x99, 0x85, 0x0b, 0x3f, 0xfe, 0xb2, //0x0000c230 .quad -5548928372155224313 + 0x16, 0xaa, 0xb4, 0xdc, 0xe6, 0xa7, 0x1f, 0x86, //0x0000c238 .quad -8782116138362033642 + 0xc9, 0x6a, 0x00, 0x67, 0xce, 0xce, 0xbd, 0xdf, //0x0000c240 .quad -2324474446766642487 + 0x9b, 0xd4, 0xe1, 0x93, 0xe0, 0x91, 0xa7, 0x67, //0x0000c248 .quad 7469098900757009563 + 0xbd, 0x42, 0x60, 0x00, 0x41, 0xa1, 0xd6, 0x8b, //0x0000c250 .quad -8370325556870233411 + 0xe1, 0x24, 0x6d, 0x5c, 0x2c, 0xbb, 0xc8, 0xe0, //0x0000c258 .quad -2249342214667950879 + 0x6d, 0x53, 0x78, 0x40, 0x91, 0x49, 0xcc, 0xae, //0x0000c260 .quad -5851220927660403859 + 0x19, 0x6e, 0x88, 0x73, 0xf7, 0xe9, 0xfa, 0x58, //0x0000c268 .quad 6411694268519837209 + 0x48, 0x68, 0x96, 0x90, 0xf5, 0x5b, 0x7f, 0xda, //0x0000c270 .quad -2702340141148116920 + 0x9f, 0x89, 0x6a, 0x50, 0x75, 0xa4, 0x39, 0xaf, //0x0000c278 .quad -5820440219632367201 + 0x2d, 0x01, 0x5e, 0x7a, 0x79, 0x99, 0x8f, 0x88, //0x0000c280 .quad -8606491615858654931 + 0x04, 0x96, 0x42, 0x52, 0xc9, 0x06, 0x84, 0x6d, //0x0000c288 .quad 7891439908798240260 + 0x78, 0x81, 0xf5, 0xd8, 0xd7, 0x7f, 0xb3, 0xaa, //0x0000c290 .quad -6146428501395930760 + 0x84, 0x3b, 0xd3, 0xa6, 0x7b, 0x08, 0xe5, 0xc8, //0x0000c298 .quad -3970758169284363388 + 0xd6, 0xe1, 0x32, 0xcf, 0xcd, 0x5f, 0x60, 0xd5, //0x0000c2a0 .quad -3071349608317525546 + 0x65, 0x0a, 0x88, 0x90, 0x9a, 0x4a, 0x1e, 0xfb, //0x0000c2a8 .quad -351761693178066331 + 0x26, 0xcd, 0x7f, 0xa1, 0xe0, 0x3b, 0x5c, 0x85, //0x0000c2b0 .quad -8837122532839535322 + 0x80, 0x06, 0x55, 0x9a, 0xa0, 0xee, 0xf2, 0x5c, //0x0000c2b8 .quad 6697677969404790400 + 0x6f, 0xc0, 0xdf, 0xc9, 0xd8, 0x4a, 0xb3, 0xa6, //0x0000c2c0 .quad -6434717147622031249 + 0x1f, 0x48, 0xea, 0xc0, 0x48, 0xaa, 0x2f, 0xf4, //0x0000c2c8 .quad -851274575098787809 + 0x8b, 0xb0, 0x57, 0xfc, 0x8e, 0x1d, 0x60, 0xd0, //0x0000c2d0 .quad -3431710416100151157 + 0x27, 0xda, 0x24, 0xf1, 0xda, 0x94, 0x3b, 0xf1, //0x0000c2d8 .quad -1064093218873484761 + 0x57, 0xce, 0xb6, 0x5d, 0x79, 0x12, 0x3c, 0x82, //0x0000c2e0 .quad -9062348037703676329 + 0x59, 0x08, 0xb7, 0xd6, 0x08, 0x3d, 0xc5, 0x76, //0x0000c2e8 .quad 8558313775058847833 + 0xed, 0x81, 0x24, 0xb5, 0x17, 0x17, 0xcb, 0xa2, //0x0000c2f0 .quad -6716249028702207507 + 0x6f, 0xca, 0x64, 0x0c, 0x4b, 0x8c, 0x76, 0x54, //0x0000c2f8 .quad 6086206200396171887 + 0x68, 0xa2, 0x6d, 0xa2, 0xdd, 0xdc, 0x7d, 0xcb, //0x0000c300 .quad -3783625267450371480 + 0x0a, 0xfd, 0x7d, 0xcf, 0x5d, 0x2f, 0x94, 0xa9, //0x0000c308 .quad -6227300304786948854 + 0x02, 0x0b, 0x09, 0x0b, 0x15, 0x54, 0x5d, 0xfe, //0x0000c310 .quad -117845565885576446 + 0x4d, 0x7c, 0x5d, 0x43, 0x35, 0x3b, 0xf9, 0xd3, //0x0000c318 .quad -3172439362556298163 + 0xe1, 0xa6, 0xe5, 0x26, 0x8d, 0x54, 0xfa, 0x9e, //0x0000c320 .quad -6991182506319567135 + 0xb0, 0x6d, 0x1a, 0x4a, 0x01, 0xc5, 0x7b, 0xc4, //0x0000c328 .quad -4288617610811380304 + 0x9a, 0x10, 0x9f, 0x70, 0xb0, 0xe9, 0xb8, 0xc6, //0x0000c330 .quad -4127292114472071014 + 0x1c, 0x09, 0xa1, 0x9c, 0x41, 0xb6, 0x9a, 0x35, //0x0000c338 .quad 3862600023340550428 + 0xc0, 0xd4, 0xc6, 0x8c, 0x1c, 0x24, 0x67, 0xf8, //0x0000c340 .quad -547429124662700864 + 0x63, 0x4b, 0xc9, 0x03, 0xd2, 0x63, 0x01, 0xc3, //0x0000c348 .quad -4395122007679087773 + 0xf8, 0x44, 0xfc, 0xd7, 0x91, 0x76, 0x40, 0x9b, //0x0000c350 .quad -7259672230555269896 + 0x1e, 0xcf, 0x5d, 0x42, 0x63, 0xde, 0xe0, 0x79, //0x0000c358 .quad 8782263791269039902 + 0x36, 0x56, 0xfb, 0x4d, 0x36, 0x94, 0x10, 0xc2, //0x0000c360 .quad -4462904269766699466 + 0xe5, 0x42, 0xf5, 0x12, 0xfc, 0x15, 0x59, 0x98, //0x0000c368 .quad -7468914334623251739 + 0xc4, 0x2b, 0x7a, 0xe1, 0x43, 0xb9, 0x94, 0xf2, //0x0000c370 .quad -966944318780986428 + 0x9e, 0x93, 0xb2, 0x17, 0x7b, 0x5b, 0x6f, 0x3e, //0x0000c378 .quad 4498915137003099038 + 0x5a, 0x5b, 0xec, 0x6c, 0xca, 0xf3, 0x9c, 0x97, //0x0000c380 .quad -7521869226879198374 + 0x43, 0x9c, 0xcf, 0xee, 0x2c, 0x99, 0x05, 0xa7, //0x0000c388 .quad -6411550076227838909 + 0x31, 0x72, 0x27, 0x08, 0xbd, 0x30, 0x84, 0xbd, //0x0000c390 .quad -4790650515171610063 + 0x54, 0x83, 0x83, 0x2a, 0x78, 0xff, 0xc6, 0x50, //0x0000c398 .quad 5820620459997365076 + 0xbd, 0x4e, 0x31, 0x4a, 0xec, 0x3c, 0xe5, 0xec, //0x0000c3a0 .quad -1376627125537124675 + 0x29, 0x64, 0x24, 0x35, 0x56, 0xbf, 0xf8, 0xa4, //0x0000c3a8 .quad -6559282480285457367 + 0x36, 0xd1, 0x5e, 0xae, 0x13, 0x46, 0x0f, 0x94, //0x0000c3b0 .quad -7777920981101784778 + 0x9a, 0xbe, 0x36, 0xe1, 0x95, 0x77, 0x1b, 0x87, //0x0000c3b8 .quad -8711237568605798758 + 0x84, 0x85, 0xf6, 0x99, 0x98, 0x17, 0x13, 0xb9, //0x0000c3c0 .quad -5110715207949843068 + 0x40, 0x6e, 0x84, 0x59, 0x7b, 0x55, 0xe2, 0x28, //0x0000c3c8 .quad 2946011094524915264 + 0xe5, 0x26, 0x74, 0xc0, 0x7e, 0xdd, 0x57, 0xe7, //0x0000c3d0 .quad -1776707991509915931 + 0xd0, 0x89, 0xe5, 0x2f, 0xda, 0xea, 0x1a, 0x33, //0x0000c3d8 .quad 3682513868156144080 + 0x4f, 0x98, 0x48, 0x38, 0x6f, 0xea, 0x96, 0x90, //0x0000c3e0 .quad -8027971522334779313 + 0x22, 0x76, 0xef, 0x5d, 0xc8, 0xd2, 0xf0, 0x3f, //0x0000c3e8 .quad 4607414176811284002 + 0x63, 0xbe, 0x5a, 0x06, 0x0b, 0xa5, 0xbc, 0xb4, //0x0000c3f0 .quad -5423278384491086237 + 0xaa, 0x53, 0x6b, 0x75, 0x7a, 0x07, 0xed, 0x0f, //0x0000c3f8 .quad 1147581702586717098 + 0xfb, 0x6d, 0xf1, 0xc7, 0x4d, 0xce, 0xeb, 0xe1, //0x0000c400 .quad -2167411962186469893 + 0x95, 0x28, 0xc6, 0x12, 0x59, 0x49, 0xe8, 0xd3, //0x0000c408 .quad -3177208890193991531 + 0xbd, 0xe4, 0xf6, 0x9c, 0xf0, 0x60, 0x33, 0x8d, //0x0000c410 .quad -8272161504007625539 + 0x5d, 0xd9, 0xbb, 0xab, 0xd7, 0x2d, 0x71, 0x64, //0x0000c418 .quad 7237616480483531101 + 0xec, 0x9d, 0x34, 0xc4, 0x2c, 0x39, 0x80, 0xb0, //0x0000c420 .quad -5728515861582144020 + 0xb4, 0xcf, 0xaa, 0x96, 0x4d, 0x79, 0x8d, 0xbd, //0x0000c428 .quad -4788037454677749836 + 0x67, 0xc5, 0x41, 0xf5, 0x77, 0x47, 0xa0, 0xdc, //0x0000c430 .quad -2548958808550292121 + 0xa1, 0x83, 0x55, 0xfc, 0xa0, 0xd7, 0xf0, 0xec, //0x0000c438 .quad -1373360799919799391 + 0x60, 0x1b, 0x49, 0xf9, 0xaa, 0x2c, 0xe4, 0x89, //0x0000c440 .quad -8510628282985014432 + 0x45, 0x72, 0xb5, 0x9d, 0xc4, 0x86, 0x16, 0xf4, //0x0000c448 .quad -858350499949874619 + 0x39, 0x62, 0x9b, 0xb7, 0xd5, 0x37, 0x5d, 0xac, //0x0000c450 .quad -6026599335303880135 + 0xd6, 0xce, 0x22, 0xc5, 0x75, 0x28, 0x1c, 0x31, //0x0000c458 .quad 3538747893490044630 + 0xc7, 0x3a, 0x82, 0x25, 0xcb, 0x85, 0x74, 0xd7, //0x0000c460 .quad -2921563150702462265 + 0x8c, 0x82, 0x6b, 0x36, 0x93, 0x32, 0x63, 0x7d, //0x0000c468 .quad 9035120885289943692 + 0xbc, 0x64, 0x71, 0xf7, 0x9e, 0xd3, 0xa8, 0x86, //0x0000c470 .quad -8743505996830120772 + 0x98, 0x31, 0x03, 0x02, 0x9c, 0xff, 0x5d, 0xae, //0x0000c478 .quad -5882264492762254952 + 0xeb, 0xbd, 0x4d, 0xb5, 0x86, 0x08, 0x53, 0xa8, //0x0000c480 .quad -6317696477610263061 + 0xfd, 0xfd, 0x83, 0x02, 0x83, 0x7f, 0xf5, 0xd9, //0x0000c488 .quad -2741144597525430787 + 0x66, 0x2d, 0xa1, 0x62, 0xa8, 0xca, 0x67, 0xd2, //0x0000c490 .quad -3285434578585440922 + 0x7c, 0xfd, 0x24, 0xc3, 0x63, 0xdf, 0x72, 0xd0, //0x0000c498 .quad -3426430746906788484 + 0x60, 0xbc, 0xa4, 0x3d, 0xa9, 0xde, 0x80, 0x83, //0x0000c4a0 .quad -8970925639256982432 + 0x6e, 0x1e, 0xf7, 0x59, 0x9e, 0xcb, 0x47, 0x42, //0x0000c4a8 .quad 4776009810824339054 + 0x78, 0xeb, 0x0d, 0x8d, 0x53, 0x16, 0x61, 0xa4, //0x0000c4b0 .quad -6601971030643840136 + 0x09, 0xe6, 0x74, 0xf0, 0x85, 0xbe, 0xd9, 0x52, //0x0000c4b8 .quad 5970012263530423817 + 0x56, 0x66, 0x51, 0x70, 0xe8, 0x5b, 0x79, 0xcd, //0x0000c4c0 .quad -3640777769877412266 + 0x8c, 0x1f, 0x92, 0x6c, 0x27, 0x2e, 0x90, 0x67, //0x0000c4c8 .quad 7462515329413029772 + 0xf6, 0xdf, 0x32, 0x46, 0x71, 0xd9, 0x6b, 0x80, //0x0000c4d0 .quad -9193015133814464522 + 0xb7, 0x53, 0xdb, 0xa3, 0xd8, 0x1c, 0xba, 0x00, //0x0000c4d8 .quad 52386062455755703 + 0xf3, 0x97, 0xbf, 0x97, 0xcd, 0xcf, 0x86, 0xa0, //0x0000c4e0 .quad -6879582898840692749 + 0xa5, 0x28, 0xd2, 0xcc, 0x0e, 0xa4, 0xe8, 0x80, //0x0000c4e8 .quad -9157889458785081179 + 0xf0, 0x7d, 0xaf, 0xfd, 0xc0, 0x83, 0xa8, 0xc8, //0x0000c4f0 .quad -3987792605123478032 + 0xce, 0xb2, 0x06, 0x80, 0x12, 0xcd, 0x22, 0x61, //0x0000c4f8 .quad 6999382250228200142 + 0x6c, 0x5d, 0x1b, 0x3d, 0xb1, 0xa4, 0xd2, 0xfa, //0x0000c500 .quad -373054737976959636 + 0x82, 0x5f, 0x08, 0x20, 0x57, 0x80, 0x6b, 0x79, //0x0000c508 .quad 8749227812785250178 + 0x63, 0x1a, 0x31, 0xc6, 0xee, 0xa6, 0xc3, 0x9c, //0x0000c510 .quad -7150688238876681629 + 0xb1, 0x3b, 0x05, 0x74, 0x36, 0x30, 0xe3, 0xcb, //0x0000c518 .quad -3755104653863994447 + 0xfc, 0x60, 0xbd, 0x77, 0xaa, 0x90, 0xf4, 0xc3, //0x0000c520 .quad -4326674280168464132 + 0x9d, 0x8a, 0x06, 0x11, 0x44, 0xfc, 0xdb, 0xbe, //0x0000c528 .quad -4693880817329993059 + 0x3b, 0xb9, 0xac, 0x15, 0xd5, 0xb4, 0xf1, 0xf4, //0x0000c530 .quad -796656831783192261 + 0x45, 0x2d, 0x48, 0x15, 0x55, 0xfb, 0x92, 0xee, //0x0000c538 .quad -1255665003235103419 + 0xc5, 0xf3, 0x8b, 0x2d, 0x05, 0x11, 0x17, 0x99, //0x0000c540 .quad -7415439547505577019 + 0x4b, 0x1c, 0x4d, 0x2d, 0x15, 0xdd, 0x1b, 0x75, //0x0000c548 .quad 8438581409832836171 + 0xb6, 0xf0, 0xee, 0x78, 0x46, 0xd5, 0x5c, 0xbf, //0x0000c550 .quad -4657613415954583370 + 0x5e, 0x63, 0xa0, 0x78, 0x5a, 0xd4, 0x62, 0xd2, //0x0000c558 .quad -3286831292991118498 + 0xe4, 0xac, 0x2a, 0x17, 0x98, 0x0a, 0x34, 0xef, //0x0000c560 .quad -1210330751515841308 + 0x35, 0x7c, 0xc8, 0x16, 0x71, 0x89, 0xfb, 0x86, //0x0000c568 .quad -8720225134666286027 + 0x0e, 0xac, 0x7a, 0x0e, 0x9f, 0x86, 0x80, 0x95, //0x0000c570 .quad -7673985747338482674 + 0xa1, 0x4d, 0x3d, 0xae, 0xe6, 0x35, 0x5d, 0xd4, //0x0000c578 .quad -3144297699952734815 + 0x12, 0x57, 0x19, 0xd2, 0x46, 0xa8, 0xe0, 0xba, //0x0000c580 .quad -4980796165745715438 + 0x0a, 0xa1, 0xcc, 0x59, 0x60, 0x83, 0x74, 0x89, //0x0000c588 .quad -8542058143368306422 + 0xd7, 0xac, 0x9f, 0x86, 0x58, 0xd2, 0x98, 0xe9, //0x0000c590 .quad -1614309188754756393 + 0x4c, 0xc9, 0x3f, 0x70, 0x38, 0xa4, 0xd1, 0x2b, //0x0000c598 .quad 3157485376071780684 + 0x06, 0xcc, 0x23, 0x54, 0x77, 0x83, 0xff, 0x91, //0x0000c5a0 .quad -7926472270612804602 + 0xd0, 0xdd, 0x27, 0x46, 0xa3, 0x06, 0x63, 0x7b, //0x0000c5a8 .quad 8890957387685944784 + 0x08, 0xbf, 0x2c, 0x29, 0x55, 0x64, 0x7f, 0xb6, //0x0000c5b0 .quad -5296404319838617848 + 0x43, 0xd5, 0xb1, 0x17, 0x4c, 0xc8, 0x3b, 0x1a, //0x0000c5b8 .quad 1890324697752655171 + 0xca, 0xee, 0x77, 0x73, 0x6a, 0x3d, 0x1f, 0xe4, //0x0000c5c0 .quad -2008819381370884406 + 0x94, 0x4a, 0x9e, 0x1d, 0x5f, 0xba, 0xca, 0x20, //0x0000c5c8 .quad 2362905872190818964 + 0x3e, 0xf5, 0x2a, 0x88, 0x62, 0x86, 0x93, 0x8e, //0x0000c5d0 .quad -8173041140997884610 + 0x9d, 0xee, 0x82, 0x72, 0x7b, 0xb4, 0x7e, 0x54, //0x0000c5d8 .quad 6088502188546649757 + 0x8d, 0xb2, 0x35, 0x2a, 0xfb, 0x67, 0x38, 0xb2, //0x0000c5e0 .quad -5604615407819967859 + 0x44, 0xaa, 0x23, 0x4f, 0x9a, 0x61, 0x9e, 0xe9, //0x0000c5e8 .quad -1612744301171463612 + 0x31, 0x1f, 0xc3, 0xf4, 0xf9, 0x81, 0xc6, 0xde, //0x0000c5f0 .quad -2394083241347571919 + 0xd5, 0x94, 0xec, 0xe2, 0x00, 0xfa, 0x05, 0x64, //0x0000c5f8 .quad 7207441660390446293 + 0x7e, 0xf3, 0xf9, 0x38, 0x3c, 0x11, 0x3c, 0x8b, //0x0000c600 .quad -8413831053483314306 + 0x05, 0xdd, 0xd3, 0x8d, 0x40, 0xbc, 0x83, 0xde, //0x0000c608 .quad -2412877989897052923 + 0x5e, 0x70, 0x38, 0x47, 0x8b, 0x15, 0x0b, 0xae, //0x0000c610 .quad -5905602798426754978 + 0x46, 0xd4, 0x48, 0xb1, 0x50, 0xab, 0x24, 0x96, //0x0000c618 .quad -7627783505798704058 + 0x76, 0x8c, 0x06, 0x19, 0xee, 0xda, 0x8d, 0xd9, //0x0000c620 .quad -2770317479606055818 + 0x58, 0x09, 0x9b, 0xdd, 0x24, 0xd6, 0xad, 0x3b, //0x0000c628 .quad 4300328673033783640 + 0xc9, 0x17, 0xa4, 0xcf, 0xd4, 0xa8, 0xf8, 0x87, //0x0000c630 .quad -8648977452394866743 + 0xd7, 0xe5, 0x80, 0x0a, 0xd7, 0xa5, 0x4c, 0xe5, //0x0000c638 .quad -1923980597781273129 + 0xbc, 0x1d, 0x8d, 0x03, 0x0a, 0xd3, 0xf6, 0xa9, //0x0000c640 .quad -6199535797066195524 + 0x4d, 0x1f, 0x21, 0xcd, 0x4c, 0xcf, 0x9f, 0x5e, //0x0000c648 .quad 6818396289628184397 + 0x2b, 0x65, 0x70, 0x84, 0xcc, 0x87, 0x74, 0xd4, //0x0000c650 .quad -3137733727905356501 + 0x20, 0x67, 0x69, 0x00, 0x20, 0xc3, 0x47, 0x76, //0x0000c658 .quad 8522995362035230496 + 0x3b, 0x3f, 0xc6, 0xd2, 0xdf, 0xd4, 0xc8, 0x84, //0x0000c660 .quad -8878612607581929669 + 0x74, 0xe0, 0x41, 0x00, 0xf4, 0xd9, 0xec, 0x29, //0x0000c668 .quad 3021029092058325108 + 0x09, 0xcf, 0x77, 0xc7, 0x17, 0x0a, 0xfb, 0xa5, //0x0000c670 .quad -6486579741050024183 + 0x91, 0x58, 0x52, 0x00, 0x71, 0x10, 0x68, 0xf4, //0x0000c678 .quad -835399653354481519 + 0xcc, 0xc2, 0x55, 0xb9, 0x9d, 0xcc, 0x79, 0xcf, //0x0000c680 .quad -3496538657885142324 + 0xb5, 0xee, 0x66, 0x40, 0x8d, 0x14, 0x82, 0x71, //0x0000c688 .quad 8179122470161673909 + 0xbf, 0x99, 0xd5, 0x93, 0xe2, 0x1f, 0xac, 0x81, //0x0000c690 .quad -9102865688819295809 + 0x31, 0x55, 0x40, 0x48, 0xd8, 0x4c, 0xf1, 0xc6, //0x0000c698 .quad -4111420493003729615 + 0x2f, 0x00, 0xcb, 0x38, 0xdb, 0x27, 0x17, 0xa2, //0x0000c6a0 .quad -6766896092596731857 + 0x7d, 0x6a, 0x50, 0x5a, 0x0e, 0xa0, 0xad, 0xb8, //0x0000c6a8 .quad -5139275616254662019 + 0x3b, 0xc0, 0xfd, 0x06, 0xd2, 0xf1, 0x9c, 0xca, //0x0000c6b0 .quad -3846934097318526917 + 0x1d, 0x85, 0xe4, 0xf0, 0x11, 0x08, 0xd9, 0xa6, //0x0000c6b8 .quad -6424094520318327523 + 0x4a, 0x30, 0xbd, 0x88, 0x46, 0x2e, 0x44, 0xfd, //0x0000c6c0 .quad -196981603220770742 + 0x64, 0xa6, 0x1d, 0x6d, 0x16, 0x4a, 0x8f, 0x90, //0x0000c6c8 .quad -8030118150397909404 + 0x2e, 0x3e, 0x76, 0x15, 0xec, 0x9c, 0x4a, 0x9e, //0x0000c6d0 .quad -7040642529654063570 + 0xff, 0x87, 0x32, 0x04, 0x4e, 0x8e, 0x59, 0x9a, //0x0000c6d8 .quad -7324666853212387329 + 0xba, 0xcd, 0xd3, 0x1a, 0x27, 0x44, 0xdd, 0xc5, //0x0000c6e0 .quad -4189117143640191558 + 0xfe, 0x29, 0x3f, 0x85, 0xe1, 0xf1, 0xef, 0x40, //0x0000c6e8 .quad 4679224488766679550 + 0x28, 0xc1, 0x88, 0xe1, 0x30, 0x95, 0x54, 0xf7, //0x0000c6f0 .quad -624710411122851544 + 0x7d, 0xf4, 0x8e, 0xe6, 0x59, 0xee, 0x2b, 0xd1, //0x0000c6f8 .quad -3374341425896426371 + 0xb9, 0x78, 0xf5, 0x8c, 0x3e, 0xdd, 0x94, 0x9a, //0x0000c700 .quad -7307973034592864071 + 0xcf, 0x58, 0x19, 0x30, 0xf8, 0x74, 0xbb, 0x82, //0x0000c708 .quad -9026492418826348337 + 0xe7, 0xd6, 0x32, 0x30, 0x8e, 0x14, 0x3a, 0xc1, //0x0000c710 .quad -4523280274813692185 + 0x02, 0xaf, 0x1f, 0x3c, 0x36, 0x52, 0x6a, 0xe3, //0x0000c718 .quad -2059743486678159614 + 0xa1, 0x8c, 0x3f, 0xbc, 0xb1, 0x99, 0x88, 0xf1, //0x0000c720 .quad -1042414325089727327 + 0xc2, 0x9a, 0x27, 0xcb, 0xc3, 0xe6, 0x44, 0xdc, //0x0000c728 .quad -2574679358347699518 + 0xe5, 0xb7, 0xa7, 0x15, 0x0f, 0x60, 0xf5, 0x96, //0x0000c730 .quad -7569037980822161435 + 0xba, 0xc0, 0xf8, 0x5e, 0x3a, 0x10, 0xab, 0x29, //0x0000c738 .quad 3002511419460075706 + 0xde, 0xa5, 0x11, 0xdb, 0x12, 0xb8, 0xb2, 0xbc, //0x0000c740 .quad -4849611457600313890 + 0xe8, 0xf0, 0xb6, 0xf6, 0x48, 0xd4, 0x15, 0x74, //0x0000c748 .quad 8364825292752482536 + 0x56, 0x0f, 0xd6, 0x91, 0x17, 0x66, 0xdf, 0xeb, //0x0000c750 .quad -1450328303573004458 + 0x22, 0xad, 0x64, 0x34, 0x5b, 0x49, 0x1b, 0x11, //0x0000c758 .quad 1232659579085827362 + 0x95, 0xc9, 0x25, 0xbb, 0xce, 0x9f, 0x6b, 0x93, //0x0000c760 .quad -7823984217374209643 + 0x35, 0xec, 0xbe, 0x00, 0xd9, 0x0d, 0xb1, 0xca, //0x0000c768 .quad -3841273781498745803 + 0xfb, 0x3b, 0xef, 0x69, 0xc2, 0x87, 0x46, 0xb8, //0x0000c770 .quad -5168294253290374149 + 0x43, 0xa7, 0xee, 0x40, 0x4f, 0x51, 0x5d, 0x3d, //0x0000c778 .quad 4421779809981343555 + 0xfa, 0x0a, 0x6b, 0x04, 0xb3, 0x29, 0x58, 0xe6, //0x0000c780 .quad -1848681798185579782 + 0x13, 0x51, 0x2a, 0x11, 0xa3, 0xa5, 0xb4, 0x0c, //0x0000c788 .quad 915538744049291539 + 0xdc, 0xe6, 0xc2, 0xe2, 0x0f, 0x1a, 0xf7, 0x8f, //0x0000c790 .quad -8072955151507069220 + 0xac, 0x72, 0xba, 0xea, 0x85, 0xe7, 0xf0, 0x47, //0x0000c798 .quad 5183897733458195116 + 0x93, 0xa0, 0x73, 0xdb, 0x93, 0xe0, 0xf4, 0xb3, //0x0000c7a0 .quad -5479507920956448621 + 0x57, 0x0f, 0x69, 0x65, 0x67, 0x21, 0xed, 0x59, //0x0000c7a8 .quad 6479872166822743895 + 0xb8, 0x88, 0x50, 0xd2, 0xb8, 0x18, 0xf2, 0xe0, //0x0000c7b0 .quad -2237698882768172872 + 0x2d, 0x53, 0xc3, 0x3e, 0xc1, 0x69, 0x68, 0x30, //0x0000c7b8 .quad 3488154190101041965 + 0x73, 0x55, 0x72, 0x83, 0x73, 0x4f, 0x97, 0x8c, //0x0000c7c0 .quad -8316090829371189901 + 0xfc, 0x13, 0x3a, 0xc7, 0x18, 0x42, 0x41, 0x1e, //0x0000c7c8 .quad 2180096368813151228 + 0xcf, 0xea, 0x4e, 0x64, 0x50, 0x23, 0xbd, 0xaf, //0x0000c7d0 .quad -5783427518286599473 + 0xfb, 0x98, 0x08, 0xf9, 0x9e, 0x92, 0xd1, 0xe5, //0x0000c7d8 .quad -1886565557410948869 + 0x83, 0xa5, 0x62, 0x7d, 0x24, 0x6c, 0xac, 0xdb, //0x0000c7e0 .quad -2617598379430861437 + 0x3a, 0xbf, 0x4a, 0xb7, 0x46, 0xf7, 0x45, 0xdf, //0x0000c7e8 .quad -2358206946763686086 + 0x72, 0xa7, 0x5d, 0xce, 0x96, 0xc3, 0x4b, 0x89, //0x0000c7f0 .quad -8553528014785370254 + 0x84, 0xb7, 0x8e, 0x32, 0x8c, 0xba, 0x8b, 0x6b, //0x0000c7f8 .quad 7749492695127472004 + 0x4f, 0x11, 0xf5, 0x81, 0x7c, 0xb4, 0x9e, 0xab, //0x0000c800 .quad -6080224000054324913 + 0x65, 0x65, 0x32, 0x3f, 0x2f, 0xa9, 0x6e, 0x06, //0x0000c808 .quad 463493832054564197 + 0xa2, 0x55, 0x72, 0xa2, 0x9b, 0x61, 0x86, 0xd6, //0x0000c810 .quad -2988593981640518238 + 0xbe, 0xfe, 0xfe, 0x0e, 0x7b, 0x53, 0x0a, 0xc8, //0x0000c818 .quad -4032318728359182658 + 0x85, 0x75, 0x87, 0x45, 0x01, 0xfd, 0x13, 0x86, //0x0000c820 .quad -8785400266166405755 + 0x37, 0x5f, 0x5f, 0xe9, 0x2c, 0x74, 0x06, 0xbd, //0x0000c828 .quad -4826042214438183113 + 0xe7, 0x52, 0xe9, 0x96, 0x41, 0xfc, 0x98, 0xa7, //0x0000c830 .quad -6370064314280619289 + 0x05, 0x37, 0xb7, 0x23, 0x38, 0x11, 0x48, 0x2c, //0x0000c838 .quad 3190819268807046917 + 0xa0, 0xa7, 0xa3, 0xfc, 0x51, 0x3b, 0x7f, 0xd1, //0x0000c840 .quad -3350894374423386208 + 0xc6, 0x04, 0xa5, 0x2c, 0x86, 0x15, 0x5a, 0xf7, //0x0000c848 .quad -623161932418579258 + 0xc4, 0x48, 0xe6, 0x3d, 0x13, 0x85, 0xef, 0x82, //0x0000c850 .quad -9011838011655698236 + 0xfc, 0x22, 0xe7, 0xdb, 0x73, 0x4d, 0x98, 0x9a, //0x0000c858 .quad -7307005235402693892 + 0xf5, 0xda, 0x5f, 0x0d, 0x58, 0x66, 0xab, 0xa3, //0x0000c860 .quad -6653111496142234891 + 0xbb, 0xeb, 0xe0, 0xd2, 0xd0, 0x60, 0x3e, 0xc1, //0x0000c868 .quad -4522070525825979461 + 0xb3, 0xd1, 0xb7, 0x10, 0xee, 0x3f, 0x96, 0xcc, //0x0000c870 .quad -3704703351750405709 + 0xa9, 0x26, 0x99, 0x07, 0x05, 0xf9, 0x8d, 0x31, //0x0000c878 .quad 3570783879572301481 + 0x1f, 0xc6, 0xe5, 0x94, 0xe9, 0xcf, 0xbb, 0xff, //0x0000c880 .quad -19193171260619233 + 0x53, 0x70, 0x7f, 0x49, 0x46, 0x77, 0xf1, 0xfd, //0x0000c888 .quad -148206168962011053 + 0xd3, 0x9b, 0x0f, 0xfd, 0xf1, 0x61, 0xd5, 0x9f, //0x0000c890 .quad -6929524759678968877 + 0x34, 0xa6, 0xef, 0xed, 0x8b, 0xea, 0xb6, 0xfe, //0x0000c898 .quad -92628855601256908 + 0xc8, 0x82, 0x53, 0x7c, 0x6e, 0xba, 0xca, 0xc7, //0x0000c8a0 .quad -4050219931171323192 + 0xc1, 0x8f, 0x6b, 0xe9, 0x2e, 0xa5, 0x64, 0xfe, //0x0000c8a8 .quad -115786069501571135 + 0x7b, 0x63, 0x68, 0x1b, 0x0a, 0x69, 0xbd, 0xf9, //0x0000c8b0 .quad -451088895536766085 + 0xb1, 0x73, 0xc6, 0xa3, 0x7a, 0xce, 0xfd, 0x3d, //0x0000c8b8 .quad 4466953431550423985 + 0x2d, 0x3e, 0x21, 0x51, 0xa6, 0x61, 0x16, 0x9c, //0x0000c8c0 .quad -7199459587351560659 + 0x4f, 0x08, 0x5c, 0xa6, 0x0c, 0xa1, 0xbe, 0x06, //0x0000c8c8 .quad 486002885505321039 + 0xb8, 0x8d, 0x69, 0xe5, 0x0f, 0xfa, 0x1b, 0xc3, //0x0000c8d0 .quad -4387638465762062920 + 0x63, 0x0a, 0xf3, 0xcf, 0x4f, 0x49, 0x6e, 0x48, //0x0000c8d8 .quad 5219189625309039203 + 0x26, 0xf1, 0xc3, 0xde, 0x93, 0xf8, 0xe2, 0xf3, //0x0000c8e0 .quad -872862063775190746 + 0xfb, 0xcc, 0xef, 0xc3, 0xa3, 0xdb, 0x89, 0x5a, //0x0000c8e8 .quad 6523987031636299003 + 0xb7, 0x76, 0x3a, 0x6b, 0x5c, 0xdb, 0x6d, 0x98, //0x0000c8f0 .quad -7463067817500576073 + 0x1d, 0xe0, 0x75, 0x5a, 0x46, 0x29, 0x96, 0xf8, //0x0000c8f8 .quad -534194123654701027 + 0x65, 0x14, 0x09, 0x86, 0x33, 0x52, 0x89, 0xbe, //0x0000c900 .quad -4717148753448332187 + 0x24, 0x58, 0x13, 0xf1, 0x97, 0xb3, 0xbb, 0xf6, //0x0000c908 .quad -667742654568376284 + 0x7f, 0x59, 0x8b, 0x67, 0xc0, 0xa6, 0x2b, 0xee, //0x0000c910 .quad -1284749923383027329 + 0x2d, 0x2e, 0x58, 0xed, 0x7d, 0xa0, 0x6a, 0x74, //0x0000c918 .quad 8388693718644305453 + 0xef, 0x17, 0xb7, 0x40, 0x38, 0x48, 0xdb, 0x94, //0x0000c920 .quad -7720497729755473937 + 0xdd, 0x1c, 0x57, 0xb4, 0x4e, 0xa4, 0xc2, 0xa8, //0x0000c928 .quad -6286281471915778851 + 0xeb, 0xdd, 0xe4, 0x50, 0x46, 0x1a, 0x12, 0xba, //0x0000c930 .quad -5038936143766954517 + 0x14, 0xe4, 0x6c, 0x61, 0x62, 0x4d, 0xf3, 0x92, //0x0000c938 .quad -7857851839894723564 + 0x66, 0x15, 0x1e, 0xe5, 0xd7, 0xa0, 0x96, 0xe8, //0x0000c940 .quad -1686984161281305242 + 0x18, 0x1d, 0xc8, 0xf9, 0xba, 0x20, 0xb0, 0x77, //0x0000c948 .quad 8624429273841147160 + 0x60, 0xcd, 0x32, 0xef, 0x86, 0x24, 0x5e, 0x91, //0x0000c950 .quad -7971894128441897632 + 0x2f, 0x12, 0x1d, 0xdc, 0x74, 0x14, 0xce, 0x0a, //0x0000c958 .quad 778582277723329071 + 0xb8, 0x80, 0xff, 0xaa, 0xa8, 0xad, 0xb5, 0xb5, //0x0000c960 .quad -5353181642124984136 + 0xbb, 0x56, 0x24, 0x13, 0x92, 0x99, 0x81, 0x0d, //0x0000c968 .quad 973227847154161339 + 0xe6, 0x60, 0xbf, 0xd5, 0x12, 0x19, 0x23, 0xe3, //0x0000c970 .quad -2079791034228842266 + 0x6a, 0x6c, 0xed, 0x97, 0xf6, 0xff, 0xe1, 0x10, //0x0000c978 .quad 1216534808942701674 + 0x8f, 0x9c, 0x97, 0xc5, 0xab, 0xef, 0xf5, 0x8d, //0x0000c980 .quad -8217398424034108273 + 0xc2, 0x63, 0xf4, 0x1e, 0xfa, 0x3f, 0x8d, 0xca, //0x0000c988 .quad -3851351762838199358 + 0xb3, 0x83, 0xfd, 0xb6, 0x96, 0x6b, 0x73, 0xb1, //0x0000c990 .quad -5660062011615247437 + 0xb3, 0x7c, 0xb1, 0xa6, 0xf8, 0x8f, 0x30, 0xbd, //0x0000c998 .quad -4814189703547749197 + 0xa0, 0xe4, 0xbc, 0x64, 0x7c, 0x46, 0xd0, 0xdd, //0x0000c9a0 .quad -2463391496091671392 + 0xdf, 0xdb, 0x5d, 0xd0, 0xf6, 0xb3, 0x7c, 0xac, //0x0000c9a8 .quad -6017737129434686497 + 0xe4, 0x0e, 0xf6, 0xbe, 0x0d, 0x2c, 0xa2, 0x8a, //0x0000c9b0 .quad -8457148712698376476 + 0x6c, 0xa9, 0x3a, 0x42, 0x7a, 0xf0, 0xcd, 0x6b, //0x0000c9b8 .quad 7768129340171790700 + 0x9d, 0x92, 0xb3, 0x2e, 0x11, 0xb7, 0x4a, 0xad, //0x0000c9c0 .quad -5959749872445582691 + 0xc7, 0x53, 0xc9, 0xd2, 0x98, 0x6c, 0xc1, 0x86, //0x0000c9c8 .quad -8736582398494813241 + 0x44, 0x77, 0x60, 0x7a, 0xd5, 0x64, 0x9d, 0xd8, //0x0000c9d0 .quad -2838001322129590460 + 0xb8, 0xa8, 0x7b, 0x07, 0xbf, 0xc7, 0x71, 0xe8, //0x0000c9d8 .quad -1697355961263740744 + 0x8b, 0x4a, 0x7c, 0x6c, 0x05, 0x5f, 0x62, 0x87, //0x0000c9e0 .quad -8691279853972075893 + 0x73, 0x49, 0xad, 0x64, 0xd7, 0x1c, 0x47, 0x11, //0x0000c9e8 .quad 1244995533423855987 + 0x2d, 0x5d, 0x9b, 0xc7, 0xc6, 0xf6, 0x3a, 0xa9, //0x0000c9f0 .quad -6252413799037706963 + 0xd0, 0x9b, 0xd8, 0x3d, 0x0d, 0xe4, 0x98, 0xd5, //0x0000c9f8 .quad -3055441601647567920 + 0x79, 0x34, 0x82, 0x79, 0x78, 0xb4, 0x89, 0xd3, //0x0000ca00 .quad -3203831230369745799 + 0xc4, 0xc2, 0x4e, 0x8d, 0x10, 0x1d, 0xff, 0x4a, //0x0000ca08 .quad 5404070034795315908 + 0xcb, 0x60, 0xf1, 0x4b, 0xcb, 0x10, 0x36, 0x84, //0x0000ca10 .quad -8919923546622172981 + 0xbb, 0x39, 0x51, 0x58, 0x2a, 0x72, 0xdf, 0xce, //0x0000ca18 .quad -3539985255894009413 + 0xfe, 0xb8, 0xed, 0x1e, 0xfe, 0x94, 0x43, 0xa5, //0x0000ca20 .quad -6538218414850328322 + 0x29, 0x88, 0x65, 0xee, 0xb4, 0x4e, 0x97, 0xc2, //0x0000ca28 .quad -4424981569867511767 + 0x3e, 0x27, 0xa9, 0xa6, 0x3d, 0x7a, 0x94, 0xce, //0x0000ca30 .quad -3561087000135522498 + 0x33, 0xea, 0xfe, 0x29, 0x62, 0x22, 0x3d, 0x73, //0x0000ca38 .quad 8303831092947774003 + 0x87, 0xb8, 0x29, 0x88, 0x66, 0xcc, 0x1c, 0x81, //0x0000ca40 .quad -9143208402725783417 + 0x60, 0x52, 0x3f, 0x5a, 0x7d, 0x35, 0x06, 0x08, //0x0000ca48 .quad 578208414664970848 + 0xa8, 0x26, 0x34, 0x2a, 0x80, 0xff, 0x63, 0xa1, //0x0000ca50 .quad -6817324484979841368 + 0xf8, 0x26, 0xcf, 0xb0, 0xdc, 0xc2, 0x07, 0xca, //0x0000ca58 .quad -3888925500096174344 + 0x52, 0x30, 0xc1, 0x34, 0x60, 0xff, 0xbc, 0xc9, //0x0000ca60 .quad -3909969587797413806 + 0xb6, 0xf0, 0x02, 0xdd, 0x93, 0xb3, 0x89, 0xfc, //0x0000ca68 .quad -249470856692830026 + 0x67, 0x7c, 0xf1, 0x41, 0x38, 0x3f, 0x2c, 0xfc, //0x0000ca70 .quad -275775966319379353 + 0xe3, 0xac, 0x43, 0xd4, 0x78, 0x20, 0xac, 0xbb, //0x0000ca78 .quad -4923524589293425437 + 0xc0, 0xed, 0x36, 0x29, 0x83, 0xa7, 0x9b, 0x9d, //0x0000ca80 .quad -7089889006590693952 + 0x0e, 0x4c, 0xaa, 0x84, 0x4b, 0x94, 0x4b, 0xd5, //0x0000ca88 .quad -3077202868308390898 + 0x31, 0xa9, 0x84, 0xf3, 0x63, 0x91, 0x02, 0xc5, //0x0000ca90 .quad -4250675239810979535 + 0x12, 0xdf, 0xd4, 0x65, 0x5e, 0x79, 0x9e, 0x0a, //0x0000ca98 .quad 765182433041899282 + 0x7d, 0xd3, 0x65, 0xf0, 0xbc, 0x35, 0x43, 0xf6, //0x0000caa0 .quad -701658031336336515 + 0xd6, 0x16, 0x4a, 0xff, 0xb5, 0x17, 0x46, 0x4d, //0x0000caa8 .quad 5568164059729762006 + 0x2e, 0xa4, 0x3f, 0x16, 0x96, 0x01, 0xea, 0x99, //0x0000cab0 .quad -7356065297226292178 + 0x46, 0x4e, 0x8e, 0xbf, 0xd1, 0xce, 0x4b, 0x50, //0x0000cab8 .quad 5785945546544795206 + 0x39, 0x8d, 0xcf, 0x9b, 0xfb, 0x81, 0x64, 0xc0, //0x0000cac0 .quad -4583395603105477319 + 0xd7, 0xe1, 0x71, 0x2f, 0x86, 0xc2, 0x5e, 0xe4, //0x0000cac8 .quad -1990940103673781801 + 0x88, 0x70, 0xc3, 0x82, 0x7a, 0xa2, 0x7d, 0xf0, //0x0000cad0 .quad -1117558485454458744 + 0x4d, 0x5a, 0x4e, 0xbb, 0x27, 0x73, 0x76, 0x5d, //0x0000cad8 .quad 6734696907262548557 + 0x55, 0x26, 0xba, 0x91, 0x8c, 0x85, 0x4e, 0x96, //0x0000cae0 .quad -7616003081050118571 + 0x70, 0xf8, 0x10, 0xd5, 0xf8, 0x07, 0x6a, 0x3a, //0x0000cae8 .quad 4209185567039092848 + 0xea, 0xaf, 0x28, 0xb6, 0xef, 0x26, 0xe2, 0xbb, //0x0000caf0 .quad -4908317832885260310 + 0x8c, 0x36, 0x55, 0x0a, 0xf7, 0x89, 0x04, 0x89, //0x0000caf8 .quad -8573576096483297652 + 0xe5, 0xdb, 0xb2, 0xa3, 0xab, 0xb0, 0xda, 0xea, //0x0000cb00 .quad -1523711272679187483 + 0x2f, 0x84, 0xea, 0xcc, 0x74, 0xac, 0x45, 0x2b, //0x0000cb08 .quad 3118087934678041647 + 0x6f, 0xc9, 0x4f, 0x46, 0x6b, 0xae, 0xc8, 0x92, //0x0000cb10 .quad -7869848573065574033 + 0x9e, 0x92, 0x12, 0x00, 0xc9, 0x8b, 0x0b, 0x3b, //0x0000cb18 .quad 4254647968387469982 + 0xcb, 0xbb, 0xe3, 0x17, 0x06, 0xda, 0x7a, 0xb7, //0x0000cb20 .quad -5225624697904579637 + 0x45, 0x37, 0x17, 0x40, 0xbb, 0x6e, 0xce, 0x09, //0x0000cb28 .quad 706623942056949573 + 0xbd, 0xaa, 0xdc, 0x9d, 0x87, 0x90, 0x59, 0xe5, //0x0000cb30 .quad -1920344853953336643 + 0x16, 0x05, 0x1d, 0x10, 0x6a, 0x0a, 0x42, 0xcc, //0x0000cb38 .quad -3728406090856200938 + 0xb6, 0xea, 0xa9, 0xc2, 0x54, 0xfa, 0x57, 0x8f, //0x0000cb40 .quad -8117744561361917258 + 0x2e, 0x23, 0x12, 0x4a, 0x82, 0x46, 0xa9, 0x9f, //0x0000cb48 .quad -6941939825212513490 + 0x64, 0x65, 0x54, 0xf3, 0xe9, 0xf8, 0x2d, 0xb3, //0x0000cb50 .quad -5535494683275008668 + 0xfa, 0xab, 0x96, 0xdc, 0x22, 0x98, 0x93, 0x47, //0x0000cb58 .quad 5157633273766521850 + 0xbd, 0x7e, 0x29, 0x70, 0x24, 0x77, 0xf9, 0xdf, //0x0000cb60 .quad -2307682335666372931 + 0xf8, 0x56, 0xbc, 0x93, 0x2b, 0x7e, 0x78, 0x59, //0x0000cb68 .quad 6447041592208152312 + 0x36, 0xef, 0x19, 0xc6, 0x76, 0xea, 0xfb, 0x8b, //0x0000cb70 .quad -8359830487432564938 + 0x5b, 0xb6, 0x55, 0x3c, 0xdb, 0x4e, 0xeb, 0x57, //0x0000cb78 .quad 6335244004343789147 + 0x03, 0x6b, 0xa0, 0x77, 0x14, 0xe5, 0xfa, 0xae, //0x0000cb80 .quad -5838102090863318269 + 0xf2, 0x23, 0x6b, 0x0b, 0x92, 0x22, 0xe6, 0xed, //0x0000cb88 .quad -1304317031425039374 + 0xc4, 0x85, 0x88, 0x95, 0x59, 0x9e, 0xb9, 0xda, //0x0000cb90 .quad -2685941595151759932 + 0xee, 0xec, 0x45, 0x8e, 0x36, 0xab, 0x5f, 0xe9, //0x0000cb98 .quad -1630396289281299218 + 0x9b, 0x53, 0x75, 0xfd, 0xf7, 0x02, 0xb4, 0x88, //0x0000cba0 .quad -8596242524610931813 + 0x15, 0xb4, 0xeb, 0x18, 0x02, 0xcb, 0xdb, 0x11, //0x0000cba8 .quad 1286845328412881941 + 0x81, 0xa8, 0xd2, 0xfc, 0xb5, 0x03, 0xe1, 0xaa, //0x0000cbb0 .quad -6133617137336276863 + 0x1a, 0xa1, 0x26, 0x9f, 0xc2, 0xbd, 0x52, 0xd6, //0x0000cbb8 .quad -3003129357911285478 + 0xa2, 0x52, 0x07, 0x7c, 0xa3, 0x44, 0x99, 0xd5, //0x0000cbc0 .quad -3055335403242958174 + 0x60, 0x49, 0xf0, 0x46, 0x33, 0x6d, 0xe7, 0x4b, //0x0000cbc8 .quad 5469460339465668960 + 0xa5, 0x93, 0x84, 0x2d, 0xe6, 0xca, 0x7f, 0x85, //0x0000cbd0 .quad -8827113654667930715 + 0xdc, 0x2d, 0x56, 0x0c, 0x40, 0xa4, 0x70, 0x6f, //0x0000cbd8 .quad 8030098730593431004 + 0x8e, 0xb8, 0xe5, 0xb8, 0x9f, 0xbd, 0xdf, 0xa6, //0x0000cbe0 .quad -6422206049907525490 + 0x53, 0xb9, 0x6b, 0x0f, 0x50, 0xcd, 0x4c, 0xcb, //0x0000cbe8 .quad -3797434642040374957 + 0xb2, 0x26, 0x1f, 0xa7, 0x07, 0xad, 0x97, 0xd0, //0x0000cbf0 .quad -3416071543957018958 + 0xa8, 0xa7, 0x46, 0x13, 0xa4, 0x00, 0x20, 0x7e, //0x0000cbf8 .quad 9088264752731695016 + 0x2f, 0x78, 0x73, 0xc8, 0x24, 0xcc, 0x5e, 0x82, //0x0000cc00 .quad -9052573742614218705 + 0xc9, 0x28, 0x0c, 0x8c, 0x66, 0x00, 0xd4, 0x8e, //0x0000cc08 .quad -8154892584824854327 + 0x3b, 0x56, 0x90, 0xfa, 0x2d, 0x7f, 0xf6, 0xa2, //0x0000cc10 .quad -6704031159840385477 + 0xfb, 0x32, 0x0f, 0x2f, 0x80, 0x00, 0x89, 0x72, //0x0000cc18 .quad 8253128342678483707 + 0xca, 0x6b, 0x34, 0x79, 0xf9, 0x1e, 0xb4, 0xcb, //0x0000cc20 .quad -3768352931373093942 + 0xba, 0xff, 0xd2, 0x3a, 0xa0, 0x40, 0x2b, 0x4f, //0x0000cc28 .quad 5704724409920716730 + 0xbc, 0x86, 0x81, 0xd7, 0xb7, 0x26, 0xa1, 0xfe, //0x0000cc30 .quad -98755145788979524 + 0xa9, 0xbf, 0x87, 0x49, 0xc8, 0x10, 0xf6, 0xe2, //0x0000cc38 .quad -2092466524453879895 + 0x36, 0xf4, 0xb0, 0xe6, 0x32, 0xb8, 0x24, 0x9f, //0x0000cc40 .quad -6979250993759194058 + 0xca, 0xd7, 0xf4, 0x2d, 0x7d, 0xca, 0xd9, 0x0d, //0x0000cc48 .quad 998051431430019018 + 0x43, 0x31, 0x5d, 0xa0, 0x3f, 0xe6, 0xed, 0xc6, //0x0000cc50 .quad -4112377723771604669 + 0xbc, 0x0d, 0x72, 0x79, 0x1c, 0x3d, 0x50, 0x91, //0x0000cc58 .quad -7975807747567252036 + 0x94, 0x7d, 0x74, 0x88, 0xcf, 0x5f, 0xa9, 0xf8, //0x0000cc60 .quad -528786136287117932 + 0x2b, 0x91, 0xce, 0x97, 0x63, 0x4c, 0xa4, 0x75, //0x0000cc68 .quad 8476984389250486571 + 0x7c, 0xce, 0x48, 0xb5, 0xe1, 0xdb, 0x69, 0x9b, //0x0000cc70 .quad -7248020362820530564 + 0xbb, 0x1a, 0xe1, 0x3e, 0xbe, 0xaf, 0x86, 0xc9, //0x0000cc78 .quad -3925256793573221701 + 0x1b, 0x02, 0x9b, 0x22, 0xda, 0x52, 0x44, 0xc2, //0x0000cc80 .quad -4448339435098275301 + 0x69, 0x61, 0x99, 0xce, 0xad, 0x5b, 0xe8, 0xfb, //0x0000cc88 .quad -294884973539139223 + 0xa2, 0xc2, 0x41, 0xab, 0x90, 0x67, 0xd5, 0xf2, //0x0000cc90 .quad -948738275445456222 + 0xc4, 0xb9, 0x3f, 0x42, 0x99, 0x72, 0xe2, 0xfa, //0x0000cc98 .quad -368606216923924028 + 0xa5, 0x19, 0x09, 0x6b, 0xba, 0x60, 0xc5, 0x97, //0x0000cca0 .quad -7510490449794491995 + 0x1b, 0xd4, 0x67, 0xc9, 0x9f, 0x87, 0xcd, 0xdc, //0x0000cca8 .quad -2536221894791146469 + 0x0f, 0x60, 0xcb, 0x05, 0xe9, 0xb8, 0xb6, 0xbd, //0x0000ccb0 .quad -4776427043815727089 + 0x21, 0xc9, 0xc1, 0xbb, 0x87, 0xe9, 0x00, 0x54, //0x0000ccb8 .quad 6053094668365842721 + 0x13, 0x38, 0x3e, 0x47, 0x23, 0x67, 0x24, 0xed, //0x0000ccc0 .quad -1358847786342270957 + 0x69, 0x3b, 0xb2, 0xaa, 0xe9, 0x23, 0x01, 0x29, //0x0000ccc8 .quad 2954682317029915497 + 0x0b, 0xe3, 0x86, 0x0c, 0x76, 0xc0, 0x36, 0x94, //0x0000ccd0 .quad -7766808894105001205 + 0x22, 0x65, 0xaf, 0x0a, 0x72, 0xb6, 0xa0, 0xf9, //0x0000ccd8 .quad -459166561069996766 + 0xce, 0x9b, 0xa8, 0x8f, 0x93, 0x70, 0x44, 0xb9, //0x0000cce0 .quad -5096825099203863602 + 0x6a, 0x3e, 0x5b, 0x8d, 0x0e, 0xe4, 0x08, 0xf8, //0x0000cce8 .quad -573958201337495958 + 0xc2, 0xc2, 0x92, 0x73, 0xb8, 0x8c, 0x95, 0xe7, //0x0000ccf0 .quad -1759345355577441598 + 0x05, 0x0e, 0xb2, 0x30, 0x12, 0x1d, 0x0b, 0xb6, //0x0000ccf8 .quad -5329133770099257851 + 0xb9, 0xb9, 0x3b, 0x48, 0xf3, 0x77, 0xbd, 0x90, //0x0000cd00 .quad -8017119874876982855 + 0xc3, 0x48, 0x6f, 0x5e, 0x2b, 0xf2, 0xc6, 0xb1, //0x0000cd08 .quad -5636551615525730109 + 0x28, 0xa8, 0x4a, 0x1a, 0xf0, 0xd5, 0xec, 0xb4, //0x0000cd10 .quad -5409713825168840664 + 0xf4, 0x1a, 0x0b, 0x36, 0xb6, 0xae, 0x38, 0x1e, //0x0000cd18 .quad 2177682517447613172 + 0x32, 0x52, 0xdd, 0x20, 0x6c, 0x0b, 0x28, 0xe2, //0x0000cd20 .quad -2150456263033662926 + 0xb1, 0xe1, 0x8d, 0xc3, 0x63, 0xda, 0xc6, 0x25, //0x0000cd28 .quad 2722103146809516465 + 0x5f, 0x53, 0x8a, 0x94, 0x23, 0x07, 0x59, 0x8d, //0x0000cd30 .quad -8261564192037121185 + 0x0f, 0xad, 0x38, 0x5a, 0x7e, 0x48, 0x9c, 0x57, //0x0000cd38 .quad 6313000485183335695 + 0x37, 0xe8, 0xac, 0x79, 0xec, 0x48, 0xaf, 0xb0, //0x0000cd40 .quad -5715269221619013577 + 0x52, 0xd8, 0xc6, 0xf0, 0x9d, 0x5a, 0x83, 0x2d, //0x0000cd48 .quad 3279564588051781714 + 0x44, 0x22, 0x18, 0x98, 0x27, 0x1b, 0xdb, 0xdc, //0x0000cd50 .quad -2532400508596379068 + 0x66, 0x8e, 0xf8, 0x6c, 0x45, 0x31, 0xe4, 0xf8, //0x0000cd58 .quad -512230283362660762 + 0x6b, 0x15, 0x0f, 0xbf, 0xf8, 0xf0, 0x08, 0x8a, //0x0000cd60 .quad -8500279345513818773 + 0x00, 0x59, 0x1b, 0x64, 0xcb, 0x9e, 0x8e, 0x1b, //0x0000cd68 .quad 1985699082112030976 + 0xc5, 0xda, 0xd2, 0xee, 0x36, 0x2d, 0x8b, 0xac, //0x0000cd70 .quad -6013663163464885563 + 0x40, 0x2f, 0x22, 0x3d, 0x7e, 0x46, 0x72, 0xe2, //0x0000cd78 .quad -2129562165787349184 + 0x77, 0x91, 0x87, 0xaa, 0x84, 0xf8, 0xad, 0xd7, //0x0000cd80 .quad -2905392935903719049 + 0x10, 0xbb, 0x6a, 0xcc, 0x1d, 0xd8, 0x0e, 0x5b, //0x0000cd88 .quad 6561419329620589328 + 0xea, 0xba, 0x94, 0xea, 0x52, 0xbb, 0xcc, 0x86, //0x0000cd90 .quad -8733399612580906262 + 0xea, 0xb4, 0xc2, 0x9f, 0x12, 0x47, 0xe9, 0x98, //0x0000cd98 .quad -7428327965055601430 + 0xa5, 0xe9, 0x39, 0xa5, 0x27, 0xea, 0x7f, 0xa8, //0x0000cda0 .quad -6305063497298744923 + 0x25, 0x62, 0xb3, 0x47, 0xd7, 0x98, 0x23, 0x3f, //0x0000cda8 .quad 4549648098962661925 + 0x0e, 0x64, 0x88, 0x8e, 0xb1, 0xe4, 0x9f, 0xd2, //0x0000cdb0 .quad -3269643353196043250 + 0xae, 0x3a, 0xa0, 0x19, 0x0d, 0x7f, 0xec, 0x8e, //0x0000cdb8 .quad -8147997931578836306 + 0x89, 0x3e, 0x15, 0xf9, 0xee, 0xee, 0xa3, 0x83, //0x0000cdc0 .quad -8961056123388608887 + 0xad, 0x24, 0x04, 0x30, 0x68, 0xcf, 0x53, 0x19, //0x0000cdc8 .quad 1825030320404309165 + 0x2b, 0x8e, 0x5a, 0xb7, 0xaa, 0xea, 0x8c, 0xa4, //0x0000cdd0 .quad -6589634135808373205 + 0xd8, 0x2d, 0x05, 0x3c, 0x42, 0xc3, 0xa8, 0x5f, //0x0000cdd8 .quad 6892973918932774360 + 0xb6, 0x31, 0x31, 0x65, 0x55, 0x25, 0xb0, 0xcd, //0x0000cde0 .quad -3625356651333078602 + 0x4e, 0x79, 0x06, 0xcb, 0x12, 0xf4, 0x92, 0x37, //0x0000cde8 .quad 4004531380238580046 + 0x11, 0xbf, 0x3e, 0x5f, 0x55, 0x17, 0x8e, 0x80, //0x0000cdf0 .quad -9183376934724255983 + 0xd1, 0x0b, 0xe4, 0xbe, 0x8b, 0xd8, 0xbb, 0xe2, //0x0000cdf8 .quad -2108853905778275375 + 0xd6, 0x6e, 0x0e, 0xb7, 0x2a, 0x9d, 0xb1, 0xa0, //0x0000ce00 .quad -6867535149977932074 + 0xc5, 0x0e, 0x9d, 0xae, 0xae, 0xce, 0x6a, 0x5b, //0x0000ce08 .quad 6587304654631931589 + 0x8b, 0x0a, 0xd2, 0x64, 0x75, 0x04, 0xde, 0xc8, //0x0000ce10 .quad -3972732919045027189 + 0x76, 0x52, 0x44, 0x5a, 0x5a, 0x82, 0x45, 0xf2, //0x0000ce18 .quad -989241218564861322 + 0x2e, 0x8d, 0x06, 0xbe, 0x92, 0x85, 0x15, 0xfb, //0x0000ce20 .quad -354230130378896082 + 0x13, 0x67, 0xd5, 0xf0, 0xf0, 0xe2, 0xd6, 0xee, //0x0000ce28 .quad -1236551523206076653 + 0x3d, 0x18, 0xc4, 0xb6, 0x7b, 0x73, 0xed, 0x9c, //0x0000ce30 .quad -7138922859127891907 + 0x6c, 0x60, 0x85, 0x96, 0xd6, 0x4d, 0x46, 0x55, //0x0000ce38 .quad 6144684325637283948 + 0x4c, 0x1e, 0x75, 0xa4, 0x5a, 0xd0, 0x28, 0xc4, //0x0000ce40 .quad -4311967555482476980 + 0x87, 0xb8, 0x26, 0x3c, 0x4c, 0xe1, 0x97, 0xaa, //0x0000ce48 .quad -6154202648235558777 + 0xdf, 0x65, 0x92, 0x4d, 0x71, 0x04, 0x33, 0xf5, //0x0000ce50 .quad -778273425925708321 + 0xa9, 0x66, 0x30, 0x4b, 0x9f, 0xd9, 0x3d, 0xd5, //0x0000ce58 .quad -3081067291867060567 + 0xab, 0x7f, 0x7b, 0xd0, 0xc6, 0xe2, 0x3f, 0x99, //0x0000ce60 .quad -7403949918844649557 + 0x2a, 0x40, 0xfe, 0x8e, 0x03, 0xa8, 0x46, 0xe5, //0x0000ce68 .quad -1925667057416912854 + 0x96, 0x5f, 0x9a, 0x84, 0x78, 0xdb, 0x8f, 0xbf, //0x0000ce70 .quad -4643251380128424042 + 0x34, 0xd0, 0xbd, 0x72, 0x04, 0x52, 0x98, 0xde, //0x0000ce78 .quad -2407083821771141068 + 0x7c, 0xf7, 0xc0, 0xa5, 0x56, 0xd2, 0x73, 0xef, //0x0000ce80 .quad -1192378206733142148 + 0x41, 0x44, 0x6d, 0x8f, 0x85, 0x66, 0x3e, 0x96, //0x0000ce88 .quad -7620540795641314239 + 0xad, 0x9a, 0x98, 0x27, 0x76, 0x63, 0xa8, 0x95, //0x0000ce90 .quad -7662765406849295699 + 0xa9, 0x4a, 0xa4, 0x79, 0x13, 0x00, 0xe7, 0xdd, //0x0000ce98 .quad -2456994988062127447 + 0x59, 0xc1, 0x7e, 0xb1, 0x53, 0x7c, 0x12, 0xbb, //0x0000cea0 .quad -4966770740134231719 + 0x53, 0x5d, 0x0d, 0x58, 0x18, 0xc0, 0x60, 0x55, //0x0000cea8 .quad 6152128301777116499 + 0xaf, 0x71, 0xde, 0x9d, 0x68, 0x1b, 0xd7, 0xe9, //0x0000ceb0 .quad -1596777406740401745 + 0xa7, 0xb4, 0x10, 0x6e, 0x1e, 0xf0, 0xb8, 0xaa, //0x0000ceb8 .quad -6144897678060768089 + 0x0d, 0x07, 0xab, 0x62, 0x21, 0x71, 0x26, 0x92, //0x0000cec0 .quad -7915514906853832947 + 0xe9, 0x70, 0xca, 0x04, 0x13, 0x96, 0xb3, 0xca, //0x0000cec8 .quad -3840561048787980055 + 0xd1, 0xc8, 0x55, 0xbb, 0x69, 0x0d, 0xb0, 0xb6, //0x0000ced0 .quad -5282707615139903279 + 0x23, 0x0d, 0xfd, 0xc5, 0x97, 0x7b, 0x60, 0x3d, //0x0000ced8 .quad 4422670725869800739 + 0x05, 0x3b, 0x2b, 0x2a, 0xc4, 0x10, 0x5c, 0xe4, //0x0000cee0 .quad -1991698500497491195 + 0x6b, 0x50, 0x7c, 0xb7, 0x7d, 0x9a, 0xb8, 0x8c, //0x0000cee8 .quad -8306719647944912789 + 0xe3, 0x04, 0x5b, 0x9a, 0x7a, 0x8a, 0xb9, 0x8e, //0x0000cef0 .quad -8162340590452013853 + 0x43, 0xb2, 0xad, 0x92, 0x8e, 0x60, 0xf3, 0x77, //0x0000cef8 .quad 8643358275316593219 + 0x1c, 0xc6, 0xf1, 0x40, 0x19, 0xed, 0x67, 0xb2, //0x0000cf00 .quad -5591239719637629412 + 0xd4, 0x1e, 0x59, 0x37, 0xb2, 0x38, 0xf0, 0x55, //0x0000cf08 .quad 6192511825718353620 + 0xa3, 0x37, 0x2e, 0x91, 0x5f, 0xe8, 0x01, 0xdf, //0x0000cf10 .quad -2377363631119648861 + 0x89, 0x66, 0x2f, 0xc5, 0xde, 0x46, 0x6c, 0x6b, //0x0000cf18 .quad 7740639782147942025 + 0xc6, 0xe2, 0xbc, 0xba, 0x3b, 0x31, 0x61, 0x8b, //0x0000cf20 .quad -8403381297090862394 + 0x16, 0xa0, 0x3d, 0x3b, 0x4b, 0xac, 0x23, 0x23, //0x0000cf28 .quad 2532056854628769814 + 0x77, 0x1b, 0x6c, 0xa9, 0x8a, 0x7d, 0x39, 0xae, //0x0000cf30 .quad -5892540602936190089 + 0x1b, 0x08, 0x0d, 0x0a, 0x5e, 0x97, 0xec, 0xab, //0x0000cf38 .quad -6058300968568813541 + 0x55, 0x22, 0xc7, 0x53, 0xed, 0xdc, 0xc7, 0xd9, //0x0000cf40 .quad -2753989735242849707 + 0x22, 0x4a, 0x90, 0x8c, 0x35, 0xbd, 0xe7, 0x96, //0x0000cf48 .quad -7572876210711016926 + 0x75, 0x75, 0x5c, 0x54, 0x14, 0xea, 0x1c, 0x88, //0x0000cf50 .quad -8638772612167862923 + 0x55, 0x2e, 0xda, 0x77, 0x41, 0xd6, 0x50, 0x7e, //0x0000cf58 .quad 9102010423587778133 + 0xd2, 0x92, 0x73, 0x69, 0x99, 0x24, 0x24, 0xaa, //0x0000cf60 .quad -6186779746782440750 + 0xea, 0xb9, 0xd0, 0xd5, 0xd1, 0x0b, 0xe5, 0xdd, //0x0000cf68 .quad -2457545025797441046 + 0x87, 0x77, 0xd0, 0xc3, 0xbf, 0x2d, 0xad, 0xd4, //0x0000cf70 .quad -3121788665050663033 + 0x65, 0xe8, 0x44, 0x4b, 0xc6, 0x4e, 0x5e, 0x95, //0x0000cf78 .quad -7683617300674189211 + 0xb4, 0x4a, 0x62, 0xda, 0x97, 0x3c, 0xec, 0x84, //0x0000cf80 .quad -8868646943297746252 + 0x3f, 0x11, 0x0b, 0xef, 0x3b, 0xf1, 0x5a, 0xbd, //0x0000cf88 .quad -4802260812921368257 + 0x61, 0xdd, 0xfa, 0xd0, 0xbd, 0x4b, 0x27, 0xa6, //0x0000cf90 .quad -6474122660694794911 + 0x8f, 0xd5, 0xcd, 0xea, 0x8a, 0xad, 0xb1, 0xec, //0x0000cf98 .quad -1391139997724322417 + 0xba, 0x94, 0x39, 0x45, 0xad, 0x1e, 0xb1, 0xcf, //0x0000cfa0 .quad -3480967307441105734 + 0xf3, 0x4a, 0x81, 0xa5, 0xed, 0x18, 0xde, 0x67, //0x0000cfa8 .quad 7484447039699372787 + 0xf4, 0xfc, 0x43, 0x4b, 0x2c, 0xb3, 0xce, 0x81, //0x0000cfb0 .quad -9093133594791772940 + 0xd8, 0xce, 0x70, 0x87, 0x94, 0xcf, 0xea, 0x80, //0x0000cfb8 .quad -9157278655470055720 + 0x31, 0xfc, 0x14, 0x5e, 0xf7, 0x5f, 0x42, 0xa2, //0x0000cfc0 .quad -6754730975062328271 + 0x8e, 0x02, 0x4d, 0xa9, 0x79, 0x83, 0x25, 0xa1, //0x0000cfc8 .quad -6834912300910181746 + 0x3e, 0x3b, 0x9a, 0x35, 0xf5, 0xf7, 0xd2, 0xca, //0x0000cfd0 .quad -3831727700400522434 + 0x31, 0x43, 0xa0, 0x13, 0x58, 0xe4, 0x6e, 0x09, //0x0000cfd8 .quad 679731660717048625 + 0x0d, 0xca, 0x00, 0x83, 0xf2, 0xb5, 0x87, 0xfd, //0x0000cfe0 .quad -177973607073265139 + 0xfd, 0x53, 0x88, 0x18, 0x6e, 0x9d, 0xca, 0x8b, //0x0000cfe8 .quad -8373707460958465027 + 0x48, 0x7e, 0xe0, 0x91, 0xb7, 0xd1, 0x74, 0x9e, //0x0000cff0 .quad -7028762532061872568 + 0x7e, 0x34, 0x55, 0xcf, 0x64, 0xa2, 0x5e, 0x77, //0x0000cff8 .quad 8601490892183123070 + 0xda, 0x9d, 0x58, 0x76, 0x25, 0x06, 0x12, 0xc6, //0x0000d000 .quad -4174267146649952806 + 0x9e, 0x81, 0x2a, 0x03, 0xfe, 0x4a, 0x36, 0x95, //0x0000d008 .quad -7694880458480647778 + 0x51, 0xc5, 0xee, 0xd3, 0xae, 0x87, 0x96, 0xf7, //0x0000d010 .quad -606147914885053103 + 0x05, 0x22, 0xf5, 0x83, 0xbd, 0xdd, 0x83, 0x3a, //0x0000d018 .quad 4216457482181353989 + 0x52, 0x3b, 0x75, 0x44, 0xcd, 0x14, 0xbe, 0x9a, //0x0000d020 .quad -7296371474444240046 + 0x43, 0x35, 0x79, 0x72, 0x96, 0x6a, 0x92, 0xc4, //0x0000d028 .quad -4282243101277735613 + 0x27, 0x8a, 0x92, 0x95, 0x00, 0x9a, 0x6d, 0xc1, //0x0000d030 .quad -4508778324627912153 + 0x94, 0x82, 0x17, 0x0f, 0x3c, 0x05, 0xb7, 0x75, //0x0000d038 .quad 8482254178684994196 + 0xb1, 0x2c, 0xf7, 0xba, 0x80, 0x00, 0xc9, 0xf1, //0x0000d040 .quad -1024286887357502287 + 0x39, 0x63, 0xdd, 0x12, 0x8b, 0xc6, 0x24, 0x53, //0x0000d048 .quad 5991131704928854841 + 0xee, 0x7b, 0xda, 0x74, 0x50, 0xa0, 0x1d, 0x97, //0x0000d050 .quad -7557708332239520786 + 0x04, 0x5e, 0xca, 0xeb, 0x16, 0xfc, 0xf6, 0xd3, //0x0000d058 .quad -3173071712060547580 + 0xea, 0x1a, 0x11, 0x92, 0x64, 0x08, 0xe5, 0xbc, //0x0000d060 .quad -4835449396872013078 + 0x85, 0xf5, 0xbc, 0xa6, 0x1c, 0xbb, 0xf4, 0x88, //0x0000d068 .quad -8578025658503072379 + 0xa5, 0x61, 0x95, 0xb6, 0x7d, 0x4a, 0x1e, 0xec, //0x0000d070 .quad -1432625727662628443 + 0xe6, 0x32, 0x6c, 0xd0, 0xe3, 0xe9, 0x31, 0x2b, //0x0000d078 .quad 3112525982153323238 + 0x07, 0x5d, 0x1d, 0x92, 0x8e, 0xee, 0x92, 0x93, //0x0000d080 .quad -7812920107430224633 + 0xd0, 0x9f, 0x43, 0x62, 0x2e, 0x32, 0xff, 0x3a, //0x0000d088 .quad 4251171748059520976 + 0x49, 0xb4, 0xa4, 0x36, 0x32, 0xaa, 0x77, 0xb8, //0x0000d090 .quad -5154464115860392887 + 0xc3, 0x87, 0xd4, 0xfa, 0xb9, 0xfe, 0xbe, 0x09, //0x0000d098 .quad 702278666647013315 + 0x5b, 0xe1, 0x4d, 0xc4, 0xbe, 0x94, 0x95, 0xe6, //0x0000d0a0 .quad -1831394126398103205 + 0xb4, 0xa9, 0x89, 0x79, 0x68, 0xbe, 0x2e, 0x4c, //0x0000d0a8 .quad 5489534351736154548 + 0xd9, 0xac, 0xb0, 0x3a, 0xf7, 0x7c, 0x1d, 0x90, //0x0000d0b0 .quad -8062150356639896359 + 0x11, 0x0a, 0xf6, 0x4b, 0x01, 0x37, 0x9d, 0x0f, //0x0000d0b8 .quad 1125115960621402641 + 0x0f, 0xd8, 0x5c, 0x09, 0x35, 0xdc, 0x24, 0xb4, //0x0000d0c0 .quad -5466001927372482545 + 0x95, 0x8c, 0xf3, 0x9e, 0xc1, 0x84, 0x84, 0x53, //0x0000d0c8 .quad 6018080969204141205 + 0x13, 0x0e, 0xb4, 0x4b, 0x42, 0x13, 0x2e, 0xe1, //0x0000d0d0 .quad -2220816390788215277 + 0xba, 0x6f, 0xb0, 0x06, 0xf2, 0xa5, 0x65, 0x28, //0x0000d0d8 .quad 2910915193077788602 + 0xcb, 0x88, 0x50, 0x6f, 0x09, 0xcc, 0xbc, 0x8c, //0x0000d0e0 .quad -8305539271883716405 + 0xd4, 0x45, 0x2e, 0x44, 0xb7, 0x87, 0x3f, 0xf9, //0x0000d0e8 .quad -486521013540076076 + 0xfe, 0xaa, 0x24, 0xcb, 0x0b, 0xff, 0xeb, 0xaf, //0x0000d0f0 .quad -5770238071427257602 + 0x49, 0xd7, 0x39, 0x15, 0xa5, 0x69, 0x8f, 0xf7, //0x0000d0f8 .quad -608151266925095095 + 0xbe, 0xd5, 0xed, 0xbd, 0xce, 0xfe, 0xe6, 0xdb, //0x0000d100 .quad -2601111570856684098 + 0x1c, 0x4d, 0x88, 0x5a, 0x0e, 0x44, 0x73, 0xb5, //0x0000d108 .quad -5371875102083756772 + 0x97, 0xa5, 0xb4, 0x36, 0x41, 0x5f, 0x70, 0x89, //0x0000d110 .quad -8543223759426509417 + 0x31, 0x30, 0x95, 0xf8, 0x88, 0x0a, 0x68, 0x31, //0x0000d118 .quad 3560107088838733873 + 0xfc, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x0000d120 .quad -6067343680855748868 + 0x3e, 0x7c, 0xba, 0x36, 0x2b, 0x0d, 0xc2, 0xfd, //0x0000d128 .quad -161552157378970562 + 0xbc, 0x42, 0x7a, 0xe5, 0xd5, 0x94, 0xbf, 0xd6, //0x0000d130 .quad -2972493582642298180 + 0x4d, 0x1b, 0x69, 0x04, 0x76, 0x90, 0x32, 0x3d, //0x0000d138 .quad 4409745821703674701 + 0xb5, 0x69, 0x6c, 0xaf, 0x05, 0xbd, 0x37, 0x86, //0x0000d140 .quad -8775337516792518219 + 0x10, 0xb1, 0xc1, 0xc2, 0x49, 0x9a, 0x3f, 0xa6, //0x0000d148 .quad -6467280898289979120 + 0x23, 0x84, 0x47, 0x1b, 0x47, 0xac, 0xc5, 0xa7, //0x0000d150 .quad -6357485877563259869 + 0x54, 0x1d, 0x72, 0x33, 0xdc, 0x80, 0xcf, 0x0f, //0x0000d158 .quad 1139270913992301908 + 0x2b, 0x65, 0x19, 0xe2, 0x58, 0x17, 0xb7, 0xd1, //0x0000d160 .quad -3335171328526686933 + 0xa9, 0xa4, 0x4e, 0x40, 0x13, 0x61, 0xc3, 0xd3, //0x0000d168 .quad -3187597375937010519 + 0x3b, 0xdf, 0x4f, 0x8d, 0x97, 0x6e, 0x12, 0x83, //0x0000d170 .quad -9002011107970261189 + 0xea, 0x26, 0x31, 0x08, 0xac, 0x1c, 0x5a, 0x64, //0x0000d178 .quad 7231123676894144234 + 0x0a, 0xd7, 0xa3, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, //0x0000d180 .quad -6640827866535438582 + 0xa4, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, 0x70, 0x3d, //0x0000d188 .quad 4427218577690292388 + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x0000d190 .quad -3689348814741910324 + 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x0000d198 .quad -3689348814741910323 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x0000d1a0 .quad -9223372036854775808 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d1a8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, //0x0000d1b0 .quad -6917529027641081856 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d1b8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, //0x0000d1c0 .quad -4035225266123964416 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d1c8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, //0x0000d1d0 .quad -432345564227567616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d1d8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x9c, //0x0000d1e0 .quad -7187745005283311616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d1e8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xc3, //0x0000d1f0 .quad -4372995238176751616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d1f8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xf4, //0x0000d200 .quad -854558029293551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d208 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x98, //0x0000d210 .quad -7451627795949551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d218 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xbc, 0xbe, //0x0000d220 .quad -4702848726509551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d228 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6b, 0xee, //0x0000d230 .quad -1266874889709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d238 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x02, 0x95, //0x0000d240 .quad -7709325833709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d248 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x40, 0xb7, 0x43, 0xba, //0x0000d250 .quad -5024971273709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d258 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0xd4, 0xe8, //0x0000d260 .quad -1669528073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d268 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xe7, 0x84, 0x91, //0x0000d270 .quad -7960984073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d278 .quad 0 + 0x00, 0x00, 0x00, 0x80, 0xf4, 0x20, 0xe6, 0xb5, //0x0000d280 .quad -5339544073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d288 .quad 0 + 0x00, 0x00, 0x00, 0xa0, 0x31, 0xa9, 0x5f, 0xe3, //0x0000d290 .quad -2062744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d298 .quad 0 + 0x00, 0x00, 0x00, 0x04, 0xbf, 0xc9, 0x1b, 0x8e, //0x0000d2a0 .quad -8206744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d2a8 .quad 0 + 0x00, 0x00, 0x00, 0xc5, 0x2e, 0xbc, 0xa2, 0xb1, //0x0000d2b0 .quad -5646744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d2b8 .quad 0 + 0x00, 0x00, 0x40, 0x76, 0x3a, 0x6b, 0x0b, 0xde, //0x0000d2c0 .quad -2446744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d2c8 .quad 0 + 0x00, 0x00, 0xe8, 0x89, 0x04, 0x23, 0xc7, 0x8a, //0x0000d2d0 .quad -8446744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d2d8 .quad 0 + 0x00, 0x00, 0x62, 0xac, 0xc5, 0xeb, 0x78, 0xad, //0x0000d2e0 .quad -5946744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d2e8 .quad 0 + 0x00, 0x80, 0x7a, 0x17, 0xb7, 0x26, 0xd7, 0xd8, //0x0000d2f0 .quad -2821744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d2f8 .quad 0 + 0x00, 0x90, 0xac, 0x6e, 0x32, 0x78, 0x86, 0x87, //0x0000d300 .quad -8681119073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d308 .quad 0 + 0x00, 0xb4, 0x57, 0x0a, 0x3f, 0x16, 0x68, 0xa9, //0x0000d310 .quad -6239712823709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d318 .quad 0 + 0x00, 0xa1, 0xed, 0xcc, 0xce, 0x1b, 0xc2, 0xd3, //0x0000d320 .quad -3187955011209551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d328 .quad 0 + 0xa0, 0x84, 0x14, 0x40, 0x61, 0x51, 0x59, 0x84, //0x0000d330 .quad -8910000909647051616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d338 .quad 0 + 0xc8, 0xa5, 0x19, 0x90, 0xb9, 0xa5, 0x6f, 0xa5, //0x0000d340 .quad -6525815118631426616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d348 .quad 0 + 0x3a, 0x0f, 0x20, 0xf4, 0x27, 0x8f, 0xcb, 0xce, //0x0000d350 .quad -3545582879861895366 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d358 .quad 0 + 0x84, 0x09, 0x94, 0xf8, 0x78, 0x39, 0x3f, 0x81, //0x0000d360 .quad -9133518327554766460 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, //0x0000d368 .quad 4611686018427387904 + 0xe5, 0x0b, 0xb9, 0x36, 0xd7, 0x07, 0x8f, 0xa1, //0x0000d370 .quad -6805211891016070171 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, //0x0000d378 .quad 5764607523034234880 + 0xde, 0x4e, 0x67, 0x04, 0xcd, 0xc9, 0xf2, 0xc9, //0x0000d380 .quad -3894828845342699810 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, //0x0000d388 .quad -6629298651489370112 + 0x96, 0x22, 0x81, 0x45, 0x40, 0x7c, 0x6f, 0xfc, //0x0000d390 .quad -256850038250986858 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, //0x0000d398 .quad 5548434740920451072 + 0x9d, 0xb5, 0x70, 0x2b, 0xa8, 0xad, 0xc5, 0x9d, //0x0000d3a0 .quad -7078060301547948643 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf0, //0x0000d3a8 .quad -1143914305352105984 + 0x05, 0xe3, 0x4c, 0x36, 0x12, 0x19, 0x37, 0xc5, //0x0000d3b0 .quad -4235889358507547899 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, //0x0000d3b8 .quad 7793479155164643328 + 0xc6, 0x1b, 0xe0, 0xc3, 0x56, 0xdf, 0x84, 0xf6, //0x0000d3c0 .quad -683175679707046970 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0xc7, //0x0000d3c8 .quad -4093209111326359552 + 0x5c, 0x11, 0x6c, 0x3a, 0x96, 0x0b, 0x13, 0x9a, //0x0000d3d0 .quad -7344513827457986212 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7f, 0x3c, //0x0000d3d8 .quad 4359273333062107136 + 0xb3, 0x15, 0x07, 0xc9, 0x7b, 0xce, 0x97, 0xc0, //0x0000d3e0 .quad -4568956265895094861 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9f, 0x4b, //0x0000d3e8 .quad 5449091666327633920 + 0x20, 0xdb, 0x48, 0xbb, 0x1a, 0xc2, 0xbd, 0xf0, //0x0000d3f0 .quad -1099509313941480672 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x86, 0x1e, //0x0000d3f8 .quad 2199678564482154496 + 0xf4, 0x88, 0x0d, 0xb5, 0x50, 0x99, 0x76, 0x96, //0x0000d400 .quad -7604722348854507276 + 0x00, 0x00, 0x00, 0x00, 0x80, 0x44, 0x14, 0x13, //0x0000d408 .quad 1374799102801346560 + 0x31, 0xeb, 0x50, 0xe2, 0xa4, 0x3f, 0x14, 0xbc, //0x0000d410 .quad -4894216917640746191 + 0x00, 0x00, 0x00, 0x00, 0xa0, 0x55, 0xd9, 0x17, //0x0000d418 .quad 1718498878501683200 + 0xfd, 0x25, 0xe5, 0x1a, 0x8e, 0x4f, 0x19, 0xeb, //0x0000d420 .quad -1506085128623544835 + 0x00, 0x00, 0x00, 0x00, 0x08, 0xab, 0xcf, 0x5d, //0x0000d428 .quad 6759809616554491904 + 0xbe, 0x37, 0xcf, 0xd0, 0xb8, 0xd1, 0xef, 0x92, //0x0000d430 .quad -7858832233030797378 + 0x00, 0x00, 0x00, 0x00, 0xe5, 0xca, 0xa1, 0x5a, //0x0000d438 .quad 6530724019560251392 + 0xad, 0x05, 0x03, 0x05, 0x27, 0xc6, 0xab, 0xb7, //0x0000d440 .quad -5211854272861108819 + 0x00, 0x00, 0x00, 0x40, 0x9e, 0x3d, 0x4a, 0xf1, //0x0000d448 .quad -1059967012404461568 + 0x19, 0xc7, 0x43, 0xc6, 0xb0, 0xb7, 0x96, 0xe5, //0x0000d450 .quad -1903131822648998119 + 0x00, 0x00, 0x00, 0xd0, 0x05, 0xcd, 0x9c, 0x6d, //0x0000d458 .quad 7898413271349198848 + 0x6f, 0x5c, 0xea, 0x7b, 0xce, 0x32, 0x7e, 0x8f, //0x0000d460 .quad -8106986416796705681 + 0x00, 0x00, 0x00, 0xa2, 0x23, 0x00, 0x82, 0xe4, //0x0000d468 .quad -1981020733047832576 + 0x8b, 0xf3, 0xe4, 0x1a, 0x82, 0xbf, 0x5d, 0xb3, //0x0000d470 .quad -5522047002568494197 + 0x00, 0x00, 0x80, 0x8a, 0x2c, 0x80, 0xa2, 0xdd, //0x0000d478 .quad -2476275916309790720 + 0x6e, 0x30, 0x9e, 0xa1, 0x62, 0x2f, 0x35, 0xe0, //0x0000d480 .quad -2290872734783229842 + 0x00, 0x00, 0x20, 0xad, 0x37, 0x20, 0x0b, 0xd5, //0x0000d488 .quad -3095344895387238400 + 0x45, 0xde, 0x02, 0xa5, 0x9d, 0x3d, 0x21, 0x8c, //0x0000d490 .quad -8349324486880600507 + 0x00, 0x00, 0x34, 0xcc, 0x22, 0xf4, 0x26, 0x45, //0x0000d498 .quad 4982938468024057856 + 0xd6, 0x95, 0x43, 0x0e, 0x05, 0x8d, 0x29, 0xaf, //0x0000d4a0 .quad -5824969590173362730 + 0x00, 0x00, 0x41, 0x7f, 0x2b, 0xb1, 0x70, 0x96, //0x0000d4a8 .quad -7606384970252091392 + 0x4c, 0x7b, 0xd4, 0x51, 0x46, 0xf0, 0xf3, 0xda, //0x0000d4b0 .quad -2669525969289315508 + 0x00, 0x40, 0x11, 0x5f, 0x76, 0xdd, 0x0c, 0x3c, //0x0000d4b8 .quad 4327076842467049472 + 0x0f, 0xcd, 0x24, 0xf3, 0x2b, 0x76, 0xd8, 0x88, //0x0000d4c0 .quad -8585982758446904049 + 0x00, 0xc8, 0x6a, 0xfb, 0x69, 0x0a, 0x88, 0xa5, //0x0000d4c8 .quad -6518949010312869888 + 0x53, 0x00, 0xee, 0xef, 0xb6, 0x93, 0x0e, 0xab, //0x0000d4d0 .quad -6120792429631242157 + 0x00, 0x7a, 0x45, 0x7a, 0x04, 0x0d, 0xea, 0x8e, //0x0000d4d8 .quad -8148686262891087360 + 0x68, 0x80, 0xe9, 0xab, 0xa4, 0x38, 0xd2, 0xd5, //0x0000d4e0 .quad -3039304518611664792 + 0x80, 0xd8, 0xd6, 0x98, 0x45, 0x90, 0xa4, 0x72, //0x0000d4e8 .quad 8260886245095692416 + 0x41, 0xf0, 0x71, 0xeb, 0x66, 0x63, 0xa3, 0x85, //0x0000d4f0 .quad -8817094351773372351 + 0x50, 0x47, 0x86, 0x7f, 0x2b, 0xda, 0xa6, 0x47, //0x0000d4f8 .quad 5163053903184807760 + 0x51, 0x6c, 0x4e, 0xa6, 0x40, 0x3c, 0x0c, 0xa7, //0x0000d500 .quad -6409681921289327535 + 0x24, 0xd9, 0x67, 0x5f, 0xb6, 0x90, 0x90, 0x99, //0x0000d508 .quad -7381240676301154012 + 0x65, 0x07, 0xe2, 0xcf, 0x50, 0x4b, 0xcf, 0xd0, //0x0000d510 .quad -3400416383184271515 + 0x6d, 0xcf, 0x41, 0xf7, 0xe3, 0xb4, 0xf4, 0xff, //0x0000d518 .quad -3178808521666707 + 0x9f, 0x44, 0xed, 0x81, 0x12, 0x8f, 0x81, 0x82, //0x0000d520 .quad -9042789267131251553 + 0xa5, 0x21, 0x89, 0x7a, 0x0e, 0xf1, 0xf8, 0xbf, //0x0000d528 .quad -4613672773753429595 + 0xc7, 0x95, 0x68, 0x22, 0xd7, 0xf2, 0x21, 0xa3, //0x0000d530 .quad -6691800565486676537 + 0x0e, 0x6a, 0x2b, 0x19, 0x52, 0x2d, 0xf7, 0xaf, //0x0000d538 .quad -5767090967191786994 + 0x39, 0xbb, 0x02, 0xeb, 0x8c, 0x6f, 0xea, 0xcb, //0x0000d540 .quad -3753064688430957767 + 0x91, 0x44, 0x76, 0x9f, 0xa6, 0xf8, 0xf4, 0x9b, //0x0000d548 .quad -7208863708989733743 + 0x08, 0x6a, 0xc3, 0x25, 0x70, 0x0b, 0xe5, 0xfe, //0x0000d550 .quad -79644842111309304 + 0xb5, 0xd5, 0x53, 0x47, 0xd0, 0x36, 0xf2, 0x02, //0x0000d558 .quad 212292400617608629 + 0x45, 0x22, 0x9a, 0x17, 0x26, 0x27, 0x4f, 0x9f, //0x0000d560 .quad -6967307053960650171 + 0x91, 0x65, 0x94, 0x2c, 0x42, 0x62, 0xd7, 0x01, //0x0000d568 .quad 132682750386005393 + 0xd6, 0xaa, 0x80, 0x9d, 0xef, 0xf0, 0x22, 0xc7, //0x0000d570 .quad -4097447799023424810 + 0xf6, 0x7e, 0xb9, 0xb7, 0xd2, 0x3a, 0x4d, 0x42, //0x0000d578 .quad 4777539456409894646 + 0x8b, 0xd5, 0xe0, 0x84, 0x2b, 0xad, 0xeb, 0xf8, //0x0000d580 .quad -510123730351893109 + 0xb3, 0xde, 0xa7, 0x65, 0x87, 0x89, 0xe0, 0xd2, //0x0000d588 .quad -3251447716342407501 + 0x77, 0x85, 0x0c, 0x33, 0x3b, 0x4c, 0x93, 0x9b, //0x0000d590 .quad -7236356359111015049 + 0x30, 0xeb, 0x88, 0x9f, 0xf4, 0x55, 0xcc, 0x63, //0x0000d598 .quad 7191217214140771120 + 0xd5, 0xa6, 0xcf, 0xff, 0x49, 0x1f, 0x78, 0xc2, //0x0000d5a0 .quad -4433759430461380907 + 0xfc, 0x25, 0x6b, 0xc7, 0x71, 0x6b, 0xbf, 0x3c, //0x0000d5a8 .quad 4377335499248575996 + 0x8a, 0x90, 0xc3, 0x7f, 0x1c, 0x27, 0x16, 0xf3, //0x0000d5b0 .quad -930513269649338230 + 0x7b, 0xef, 0x45, 0x39, 0x4e, 0x46, 0xef, 0x8b, //0x0000d5b8 .quad -8363388681221443717 + 0x56, 0x3a, 0xda, 0xcf, 0x71, 0xd8, 0xed, 0x97, //0x0000d5c0 .quad -7499099821171918250 + 0xad, 0xb5, 0xcb, 0xe3, 0xf0, 0x8b, 0x75, 0x97, //0x0000d5c8 .quad -7532960934977096275 + 0xec, 0xc8, 0xd0, 0x43, 0x8e, 0x4e, 0xe9, 0xbd, //0x0000d5d0 .quad -4762188758037509908 + 0x18, 0xa3, 0xbe, 0x1c, 0xed, 0xee, 0x52, 0x3d, //0x0000d5d8 .quad 4418856886560793368 + 0x27, 0xfb, 0xc4, 0xd4, 0x31, 0xa2, 0x63, 0xed, //0x0000d5e0 .quad -1341049929119499481 + 0xde, 0x4b, 0xee, 0x63, 0xa8, 0xaa, 0xa7, 0x4c, //0x0000d5e8 .quad 5523571108200991710 + 0xf8, 0x1c, 0xfb, 0x24, 0x5f, 0x45, 0x5e, 0x94, //0x0000d5f0 .quad -7755685233340769032 + 0x6b, 0xef, 0x74, 0x3e, 0xa9, 0xca, 0xe8, 0x8f, //0x0000d5f8 .quad -8076983103442849941 + 0x36, 0xe4, 0x39, 0xee, 0xb6, 0xd6, 0x75, 0xb9, //0x0000d600 .quad -5082920523248573386 + 0x45, 0x2b, 0x12, 0x8e, 0x53, 0xfd, 0xe2, 0xb3, //0x0000d608 .quad -5484542860876174523 + 0x44, 0x5d, 0xc8, 0xa9, 0x64, 0x4c, 0xd3, 0xe7, //0x0000d610 .quad -1741964635633328828 + 0x17, 0xb6, 0x96, 0x71, 0xa8, 0xbc, 0xdb, 0x60, //0x0000d618 .quad 6979379479186945559 + 0x4a, 0x3a, 0x1d, 0xea, 0xbe, 0x0f, 0xe4, 0x90, //0x0000d620 .quad -8006256924911912374 + 0xce, 0x31, 0xfe, 0x46, 0xe9, 0x55, 0x89, 0xbc, //0x0000d628 .quad -4861259862362934834 + 0xdd, 0x88, 0xa4, 0xa4, 0xae, 0x13, 0x1d, 0xb5, //0x0000d630 .quad -5396135137712502563 + 0x42, 0xbe, 0xbd, 0x98, 0x63, 0xab, 0xab, 0x6b, //0x0000d638 .quad 7758483227328495170 + 0x14, 0xab, 0xcd, 0x4d, 0x9a, 0x58, 0x64, 0xe2, //0x0000d640 .quad -2133482903713240300 + 0xd2, 0x2d, 0xed, 0x7e, 0x3c, 0x96, 0x96, 0xc6, //0x0000d648 .quad -4136954021121544750 + 0xec, 0x8a, 0xa0, 0x70, 0x60, 0xb7, 0x7e, 0x8d, //0x0000d650 .quad -8250955842461857044 + 0xa3, 0x3c, 0x54, 0xcf, 0xe5, 0x1d, 0x1e, 0xfc, //0x0000d658 .quad -279753253987271517 + 0xa8, 0xad, 0xc8, 0x8c, 0x38, 0x65, 0xde, 0xb0, //0x0000d660 .quad -5702008784649933400 + 0xcc, 0x4b, 0x29, 0x43, 0x5f, 0xa5, 0x25, 0x3b, //0x0000d668 .quad 4261994450943298508 + 0x12, 0xd9, 0xfa, 0xaf, 0x86, 0xfe, 0x15, 0xdd, //0x0000d670 .quad -2515824962385028846 + 0xbf, 0x9e, 0xf3, 0x13, 0xb7, 0x0e, 0xef, 0x49, //0x0000d678 .quad 5327493063679123135 + 0xab, 0xc7, 0xfc, 0x2d, 0x14, 0xbf, 0x2d, 0x8a, //0x0000d680 .quad -8489919629131724885 + 0x38, 0x43, 0x78, 0x6c, 0x32, 0x69, 0x35, 0x6e, //0x0000d688 .quad 7941369183226839864 + 0x96, 0xf9, 0x7b, 0x39, 0xd9, 0x2e, 0xb9, 0xac, //0x0000d690 .quad -6000713517987268202 + 0x05, 0x54, 0x96, 0x07, 0x7f, 0xc3, 0xc2, 0x49, //0x0000d698 .quad 5315025460606161925 + 0xfb, 0xf7, 0xda, 0x87, 0x8f, 0x7a, 0xe7, 0xd7, //0x0000d6a0 .quad -2889205879056697349 + 0x07, 0xe9, 0x7b, 0xc9, 0x5e, 0x74, 0x33, 0xdc, //0x0000d6a8 .quad -2579590211097073401 + 0xfd, 0xda, 0xe8, 0xb4, 0x99, 0xac, 0xf0, 0x86, //0x0000d6b0 .quad -8723282702051517699 + 0xa4, 0x71, 0xed, 0x3d, 0xbb, 0x28, 0xa0, 0x69, //0x0000d6b8 .quad 7611128154919104932 + 0xbc, 0x11, 0x23, 0x22, 0xc0, 0xd7, 0xac, 0xa8, //0x0000d6c0 .quad -6292417359137009220 + 0x0d, 0xce, 0x68, 0x0d, 0xea, 0x32, 0x08, 0xc4, //0x0000d6c8 .quad -4321147861633282547 + 0x2b, 0xd6, 0xab, 0x2a, 0xb0, 0x0d, 0xd8, 0xd2, //0x0000d6d0 .quad -3253835680493873621 + 0x91, 0x01, 0xc3, 0x90, 0xa4, 0x3f, 0x0a, 0xf5, //0x0000d6d8 .quad -789748808614215279 + 0xdb, 0x65, 0xab, 0x1a, 0x8e, 0x08, 0xc7, 0x83, //0x0000d6e0 .quad -8951176327949752869 + 0xfb, 0xe0, 0x79, 0xda, 0xc6, 0x67, 0x26, 0x79, //0x0000d6e8 .quad 8729779031470891259 + 0x52, 0x3f, 0x56, 0xa1, 0xb1, 0xca, 0xb8, 0xa4, //0x0000d6f0 .quad -6577284391509803182 + 0x39, 0x59, 0x18, 0x91, 0xb8, 0x01, 0x70, 0x57, //0x0000d6f8 .quad 6300537770911226169 + 0x26, 0xcf, 0xab, 0x09, 0x5e, 0xfd, 0xe6, 0xcd, //0x0000d700 .quad -3609919470959866074 + 0x87, 0x6f, 0x5e, 0xb5, 0x26, 0x02, 0x4c, 0xed, //0x0000d708 .quad -1347699823215743097 + 0x78, 0x61, 0x0b, 0xc6, 0x5a, 0x5e, 0xb0, 0x80, //0x0000d710 .quad -9173728696990998152 + 0xb5, 0x05, 0x5b, 0x31, 0x58, 0x81, 0x4f, 0x54, //0x0000d718 .quad 6075216638131242421 + 0xd6, 0x39, 0x8e, 0x77, 0xf1, 0x75, 0xdc, 0xa0, //0x0000d720 .quad -6855474852811359786 + 0x22, 0xc7, 0xb1, 0x3d, 0xae, 0x61, 0x63, 0x69, //0x0000d728 .quad 7594020797664053026 + 0x4c, 0xc8, 0x71, 0xd5, 0x6d, 0x93, 0x13, 0xc9, //0x0000d730 .quad -3957657547586811828 + 0xea, 0x38, 0x1e, 0xcd, 0x19, 0x3a, 0xbc, 0x03, //0x0000d738 .quad 269153960225290474 + 0x5f, 0x3a, 0xce, 0x4a, 0x49, 0x78, 0x58, 0xfb, //0x0000d740 .quad -335385916056126881 + 0x24, 0xc7, 0x65, 0x40, 0xa0, 0x48, 0xab, 0x04, //0x0000d748 .quad 336442450281613092 + 0x7b, 0xe4, 0xc0, 0xce, 0x2d, 0x4b, 0x17, 0x9d, //0x0000d750 .quad -7127145225176161157 + 0x77, 0x9c, 0x3f, 0x28, 0x64, 0x0d, 0xeb, 0x62, //0x0000d758 .quad 7127805559067090039 + 0x9a, 0x1d, 0x71, 0x42, 0xf9, 0x1d, 0x5d, 0xc4, //0x0000d760 .quad -4297245513042813542 + 0x95, 0x83, 0x4f, 0x32, 0xbd, 0xd0, 0xa5, 0x3b, //0x0000d768 .quad 4298070930406474645 + 0x00, 0x65, 0x0d, 0x93, 0x77, 0x65, 0x74, 0xf5, //0x0000d770 .quad -759870872876129024 + 0x7a, 0x64, 0xe3, 0x7e, 0xec, 0x44, 0x8f, 0xca, //0x0000d778 .quad -3850783373846682502 + 0x20, 0x5f, 0xe8, 0xbb, 0x6a, 0xbf, 0x68, 0x99, //0x0000d780 .quad -7392448323188662496 + 0xcc, 0x1e, 0x4e, 0xcf, 0x13, 0x8b, 0x99, 0x7e, //0x0000d788 .quad 9122475437414293196 + 0xe8, 0x76, 0xe2, 0x6a, 0x45, 0xef, 0xc2, 0xbf, //0x0000d790 .quad -4628874385558440216 + 0x7f, 0xa6, 0x21, 0xc3, 0xd8, 0xed, 0x3f, 0x9e, //0x0000d798 .quad -7043649776941685121 + 0xa2, 0x14, 0x9b, 0xc5, 0x16, 0xab, 0xb3, 0xef, //0x0000d7a0 .quad -1174406963520662366 + 0x1f, 0x10, 0xea, 0xf3, 0x4e, 0xe9, 0xcf, 0xc5, //0x0000d7a8 .quad -4192876202749718497 + 0xe5, 0xec, 0x80, 0x3b, 0xee, 0x4a, 0xd0, 0x95, //0x0000d7b0 .quad -7651533379841495835 + 0x13, 0x4a, 0x72, 0x58, 0xd1, 0xf1, 0xa1, 0xbb, //0x0000d7b8 .quad -4926390635932268013 + 0x1f, 0x28, 0x61, 0xca, 0xa9, 0x5d, 0x44, 0xbb, //0x0000d7c0 .quad -4952730706374481889 + 0x98, 0xdc, 0x8e, 0xae, 0x45, 0x6e, 0x8a, 0x2a, //0x0000d7c8 .quad 3065383741939440792 + 0x26, 0x72, 0xf9, 0x3c, 0x14, 0x75, 0x15, 0xea, //0x0000d7d0 .quad -1579227364540714458 + 0xbe, 0x93, 0x32, 0x1a, 0xd7, 0x09, 0x2d, 0xf5, //0x0000d7d8 .quad -779956341003086914 + 0x58, 0xe7, 0x1b, 0xa6, 0x2c, 0x69, 0x4d, 0x92, //0x0000d7e0 .quad -7904546130479028392 + 0x57, 0x9c, 0x5f, 0x70, 0x26, 0x26, 0x3c, 0x59, //0x0000d7e8 .quad 6430056314514152535 + 0x2e, 0xe1, 0xa2, 0xcf, 0x77, 0xc3, 0xe0, 0xb6, //0x0000d7f0 .quad -5268996644671397586 + 0x6d, 0x83, 0x77, 0x0c, 0xb0, 0x2f, 0x8b, 0x6f, //0x0000d7f8 .quad 8037570393142690669 + 0x7a, 0x99, 0x8b, 0xc3, 0x55, 0xf4, 0x98, 0xe4, //0x0000d800 .quad -1974559787411859078 + 0x48, 0x64, 0x95, 0x0f, 0x9c, 0xfb, 0x6d, 0x0b, //0x0000d808 .quad 823590954573587528 + 0xec, 0x3f, 0x37, 0x9a, 0xb5, 0x98, 0xdf, 0x8e, //0x0000d810 .quad -8151628894773493780 + 0xad, 0x5e, 0xbd, 0x89, 0x41, 0xbd, 0x24, 0x47, //0x0000d818 .quad 5126430365035880109 + 0xe7, 0x0f, 0xc5, 0x00, 0xe3, 0x7e, 0x97, 0xb2, //0x0000d820 .quad -5577850100039479321 + 0x58, 0xb6, 0x2c, 0xec, 0x91, 0xec, 0xed, 0x58, //0x0000d828 .quad 6408037956294850136 + 0xe1, 0x53, 0xf6, 0xc0, 0x9b, 0x5e, 0x3d, 0xdf, //0x0000d830 .quad -2360626606621961247 + 0xee, 0xe3, 0x37, 0x67, 0xb6, 0x67, 0x29, 0x2f, //0x0000d838 .quad 3398361426941174766 + 0x6c, 0xf4, 0x99, 0x58, 0x21, 0x5b, 0x86, 0x8b, //0x0000d840 .quad -8392920656779807636 + 0x75, 0xee, 0x82, 0x00, 0xd2, 0xe0, 0x79, 0xbd, //0x0000d848 .quad -4793553135802847627 + 0x87, 0x71, 0xc0, 0xae, 0xe9, 0xf1, 0x67, 0xae, //0x0000d850 .quad -5879464802547371641 + 0x12, 0xaa, 0xa3, 0x80, 0x06, 0x59, 0xd8, 0xec, //0x0000d858 .quad -1380255401326171630 + 0xe9, 0x8d, 0x70, 0x1a, 0x64, 0xee, 0x01, 0xda, //0x0000d860 .quad -2737644984756826647 + 0x96, 0x94, 0xcc, 0x20, 0x48, 0x6f, 0x0e, 0xe8, //0x0000d868 .quad -1725319251657714538 + 0xb2, 0x58, 0x86, 0x90, 0xfe, 0x34, 0x41, 0x88, //0x0000d870 .quad -8628557143114098510 + 0xde, 0xdc, 0x7f, 0x14, 0x8d, 0x05, 0x09, 0x31, //0x0000d878 .quad 3533361486141316318 + 0xde, 0xee, 0xa7, 0x34, 0x3e, 0x82, 0x51, 0xaa, //0x0000d880 .quad -6174010410465235234 + 0x16, 0xd4, 0x9f, 0x59, 0xf0, 0x46, 0x4b, 0xbd, //0x0000d888 .quad -4806670179178130410 + 0x96, 0xea, 0xd1, 0xc1, 0xcd, 0xe2, 0xe5, 0xd4, //0x0000d890 .quad -3105826994654156138 + 0x1b, 0xc9, 0x07, 0x70, 0xac, 0x18, 0x9e, 0x6c, //0x0000d898 .quad 7826720331309500699 + 0x9e, 0x32, 0x23, 0x99, 0xc0, 0xad, 0x0f, 0x85, //0x0000d8a0 .quad -8858670899299929442 + 0xb1, 0xdd, 0x04, 0xc6, 0x6b, 0xcf, 0xe2, 0x03, //0x0000d8a8 .quad 280014188641050033 + 0x45, 0xff, 0x6b, 0xbf, 0x30, 0x99, 0x53, 0xa6, //0x0000d8b0 .quad -6461652605697523899 + 0x1d, 0x15, 0x86, 0xb7, 0x46, 0x83, 0xdb, 0x84, //0x0000d8b8 .quad -8873354301053463267 + 0x16, 0xff, 0x46, 0xef, 0x7c, 0x7f, 0xe8, 0xcf, //0x0000d8c0 .quad -3465379738694516970 + 0x64, 0x9a, 0x67, 0x65, 0x18, 0x64, 0x12, 0xe6, //0x0000d8c8 .quad -1868320839462053276 + 0x6e, 0x5f, 0x8c, 0x15, 0xae, 0x4f, 0xf1, 0x81, //0x0000d8d0 .quad -9083391364325154962 + 0x7f, 0xc0, 0x60, 0x3f, 0x8f, 0x7e, 0xcb, 0x4f, //0x0000d8d8 .quad 5749828502977298559 + 0x49, 0x77, 0xef, 0x9a, 0x99, 0xa3, 0x6d, 0xa2, //0x0000d8e0 .quad -6742553186979055799 + 0x9e, 0xf0, 0x38, 0x0f, 0x33, 0x5e, 0xbe, 0xe3, //0x0000d8e8 .quad -2036086408133152610 + 0x1c, 0x55, 0xab, 0x01, 0x80, 0x0c, 0x09, 0xcb, //0x0000d8f0 .quad -3816505465296431844 + 0xc6, 0x2c, 0x07, 0xd3, 0xbf, 0xf5, 0xad, 0x5c, //0x0000d8f8 .quad 6678264026688335046 + 0x63, 0x2a, 0x16, 0x02, 0xa0, 0x4f, 0xcb, 0xfd, //0x0000d900 .quad -158945813193151901 + 0xf7, 0xf7, 0xc8, 0xc7, 0x2f, 0x73, 0xd9, 0x73, //0x0000d908 .quad 8347830033360418807 + 0x7e, 0xda, 0x4d, 0x01, 0xc4, 0x11, 0x9f, 0x9e, //0x0000d910 .quad -7016870160886801794 + 0xfb, 0x9a, 0xdd, 0xdc, 0xfd, 0xe7, 0x67, 0x28, //0x0000d918 .quad 2911550761636567803 + 0x1d, 0x51, 0xa1, 0x01, 0x35, 0xd6, 0x46, 0xc6, //0x0000d920 .quad -4159401682681114339 + 0xb9, 0x01, 0x15, 0x54, 0xfd, 0xe1, 0x81, 0xb2, //0x0000d928 .quad -5583933584809066055 + 0x65, 0xa5, 0x09, 0x42, 0xc2, 0x8b, 0xd8, 0xf7, //0x0000d930 .quad -587566084924005019 + 0x27, 0x42, 0x1a, 0xa9, 0x7c, 0x5a, 0x22, 0x1f, //0x0000d938 .quad 2243455055843443239 + 0x5f, 0x07, 0x46, 0x69, 0x59, 0x57, 0xe7, 0x9a, //0x0000d940 .quad -7284757830718584993 + 0x59, 0x69, 0xb0, 0xe9, 0x8d, 0x78, 0x75, 0x33, //0x0000d948 .quad 3708002419115845977 + 0x37, 0x89, 0x97, 0xc3, 0x2f, 0x2d, 0xa1, 0xc1, //0x0000d950 .quad -4494261269970843337 + 0xaf, 0x83, 0x1c, 0x64, 0xb1, 0xd6, 0x52, 0x00, //0x0000d958 .quad 23317005467419567 + 0x84, 0x6b, 0x7d, 0xb4, 0x7b, 0x78, 0x09, 0xf2, //0x0000d960 .quad -1006140569036166268 + 0x9b, 0xa4, 0x23, 0xbd, 0x5d, 0x8c, 0x67, 0xc0, //0x0000d968 .quad -4582539761593113445 + 0x32, 0x63, 0xce, 0x50, 0x4d, 0xeb, 0x45, 0x97, //0x0000d970 .quad -7546366883288685774 + 0xe1, 0x46, 0x36, 0x96, 0xba, 0xb7, 0x40, 0xf8, //0x0000d978 .quad -558244341782001951 + 0xff, 0xfb, 0x01, 0xa5, 0x20, 0x66, 0x17, 0xbd, //0x0000d980 .quad -4821272585683469313 + 0x99, 0xd8, 0xc3, 0x3b, 0xa9, 0xe5, 0x50, 0xb6, //0x0000d988 .quad -5309491445654890343 + 0xff, 0x7a, 0x42, 0xce, 0xa8, 0x3f, 0x5d, 0xec, //0x0000d990 .quad -1414904713676948737 + 0xbf, 0xce, 0xb4, 0x8a, 0x13, 0x1f, 0xe5, 0xa3, //0x0000d998 .quad -6636864307068612929 + 0xdf, 0x8c, 0xe9, 0x80, 0xc9, 0x47, 0xba, 0x93, //0x0000d9a0 .quad -7801844473689174817 + 0x38, 0x01, 0xb1, 0x36, 0x6c, 0x33, 0x6f, 0xc6, //0x0000d9a8 .quad -4148040191917883080 + 0x17, 0xf0, 0x23, 0xe1, 0xbb, 0xd9, 0xa8, 0xb8, //0x0000d9b0 .quad -5140619573684080617 + 0x85, 0x41, 0x5d, 0x44, 0x47, 0x00, 0x0b, 0xb8, //0x0000d9b8 .quad -5185050239897353851 + 0x1d, 0xec, 0x6c, 0xd9, 0x2a, 0x10, 0xd3, 0xe6, //0x0000d9c0 .quad -1814088448677712867 + 0xe6, 0x91, 0x74, 0x15, 0x59, 0xc0, 0x0d, 0xa6, //0x0000d9c8 .quad -6481312799871692314 + 0x92, 0x13, 0xe4, 0xc7, 0x1a, 0xea, 0x43, 0x90, //0x0000d9d0 .quad -8051334308064652398 + 0x30, 0xdb, 0x68, 0xad, 0x37, 0x98, 0xc8, 0x87, //0x0000d9d8 .quad -8662506518347195600 + 0x77, 0x18, 0xdd, 0x79, 0xa1, 0xe4, 0x54, 0xb4, //0x0000d9e0 .quad -5452481866653427593 + 0xfc, 0x11, 0xc3, 0x98, 0x45, 0xbe, 0xba, 0x29, //0x0000d9e8 .quad 3006924907348169212 + 0x94, 0x5e, 0x54, 0xd8, 0xc9, 0x1d, 0x6a, 0xe1, //0x0000d9f0 .quad -2203916314889396588 + 0x7b, 0xd6, 0xf3, 0xfe, 0xd6, 0x6d, 0x29, 0xf4, //0x0000d9f8 .quad -853029884242176389 + 0x1d, 0xbb, 0x34, 0x27, 0x9e, 0x52, 0xe2, 0x8c, //0x0000da00 .quad -8294976724446954723 + 0x0d, 0x66, 0x58, 0x5f, 0xa6, 0xe4, 0x99, 0x18, //0x0000da08 .quad 1772699331562333709 + 0xe4, 0xe9, 0x01, 0xb1, 0x45, 0xe7, 0x1a, 0xb0, //0x0000da10 .quad -5757034887131305500 + 0x90, 0x7f, 0x2e, 0xf7, 0xcf, 0x5d, 0xc0, 0x5e, //0x0000da18 .quad 6827560182880305040 + 0x5d, 0x64, 0x42, 0x1d, 0x17, 0xa1, 0x21, 0xdc, //0x0000da20 .quad -2584607590486743971 + 0x74, 0x1f, 0xfa, 0xf4, 0x43, 0x75, 0x70, 0x76, //0x0000da28 .quad 8534450228600381300 + 0xba, 0x7e, 0x49, 0x72, 0xae, 0x04, 0x95, 0x89, //0x0000da30 .quad -8532908771695296838 + 0xa9, 0x53, 0x1c, 0x79, 0x4a, 0x49, 0x06, 0x6a, //0x0000da38 .quad 7639874402088932265 + 0x69, 0xde, 0xdb, 0x0e, 0xda, 0x45, 0xfa, 0xab, //0x0000da40 .quad -6054449946191733143 + 0x93, 0x68, 0x63, 0x17, 0x9d, 0xdb, 0x87, 0x04, //0x0000da48 .quad 326470965756389523 + 0x03, 0xd6, 0x92, 0x92, 0x50, 0xd7, 0xf8, 0xd6, //0x0000da50 .quad -2956376414312278525 + 0xb7, 0x42, 0x3c, 0x5d, 0x84, 0xd2, 0xa9, 0x45, //0x0000da58 .quad 5019774725622874807 + 0xc2, 0xc5, 0x9b, 0x5b, 0x92, 0x86, 0x5b, 0x86, //0x0000da60 .quad -8765264286586255934 + 0xb3, 0xa9, 0x45, 0xba, 0x92, 0x23, 0x8a, 0x0b, //0x0000da68 .quad 831516194300602803 + 0x32, 0xb7, 0x82, 0xf2, 0x36, 0x68, 0xf2, 0xa7, //0x0000da70 .quad -6344894339805432014 + 0x1f, 0x14, 0xd7, 0x68, 0x77, 0xac, 0x6c, 0x8e, //0x0000da78 .quad -8183976793979022305 + 0xff, 0x64, 0x23, 0xaf, 0x44, 0x02, 0xef, 0xd1, //0x0000da80 .quad -3319431906329402113 + 0x27, 0xd9, 0x0c, 0x43, 0x95, 0xd7, 0x07, 0x32, //0x0000da88 .quad 3605087062808385831 + 0x1f, 0x1f, 0x76, 0xed, 0x6a, 0x61, 0x35, 0x83, //0x0000da90 .quad -8992173969096958177 + 0xb9, 0x07, 0xe8, 0x49, 0xbd, 0xe6, 0x44, 0x7f, //0x0000da98 .quad 9170708441896323001 + 0xe7, 0xa6, 0xd3, 0xa8, 0xc5, 0xb9, 0x02, 0xa4, //0x0000daa0 .quad -6628531442943809817 + 0xa7, 0x09, 0x62, 0x9c, 0x6c, 0x20, 0x16, 0x5f, //0x0000daa8 .quad 6851699533943015847 + 0xa1, 0x90, 0x08, 0x13, 0x37, 0x68, 0x03, 0xcd, //0x0000dab0 .quad -3673978285252374367 + 0x10, 0x8c, 0x7a, 0xc3, 0x87, 0xa8, 0xdb, 0x36, //0x0000dab8 .quad 3952938399001381904 + 0x64, 0x5a, 0xe5, 0x6b, 0x22, 0x21, 0x22, 0x80, //0x0000dac0 .quad -9213765455923815836 + 0x8a, 0x97, 0x2c, 0xda, 0x54, 0x49, 0x49, 0xc2, //0x0000dac8 .quad -4446942528265218166 + 0xfd, 0xb0, 0xde, 0x06, 0x6b, 0xa9, 0x2a, 0xa0, //0x0000dad0 .quad -6905520801477381891 + 0x6d, 0xbd, 0xb7, 0x10, 0xaa, 0x9b, 0xdb, 0xf2, //0x0000dad8 .quad -946992141904134803 + 0x3d, 0x5d, 0x96, 0xc8, 0xc5, 0x53, 0x35, 0xc8, //0x0000dae0 .quad -4020214983419339459 + 0xc8, 0xac, 0xe5, 0x94, 0x94, 0x82, 0x92, 0x6f, //0x0000dae8 .quad 8039631859474607304 + 0x8c, 0xf4, 0xbb, 0x3a, 0xb7, 0xa8, 0x42, 0xfa, //0x0000daf0 .quad -413582710846786420 + 0xfa, 0x17, 0x1f, 0xba, 0x39, 0x23, 0x77, 0xcb, //0x0000daf8 .quad -3785518230938904582 + 0xd7, 0x78, 0xb5, 0x84, 0x72, 0xa9, 0x69, 0x9c, //0x0000db00 .quad -7176018221920323369 + 0xfc, 0x6e, 0x53, 0x14, 0x04, 0x76, 0x2a, 0xff, //0x0000db08 .quad -60105885123121412 + 0x0d, 0xd7, 0xe2, 0x25, 0xcf, 0x13, 0x84, 0xc3, //0x0000db10 .quad -4358336758973016307 + 0xbb, 0x4a, 0x68, 0x19, 0x85, 0x13, 0xf5, 0xfe, //0x0000db18 .quad -75132356403901765 + 0xd1, 0x8c, 0x5b, 0xef, 0xc2, 0x18, 0x65, 0xf4, //0x0000db20 .quad -836234930288882479 + 0x6a, 0x5d, 0xc2, 0x5f, 0x66, 0x58, 0xb2, 0x7e, //0x0000db28 .quad 9129456591349898602 + 0x02, 0x38, 0x99, 0xd5, 0x79, 0x2f, 0xbf, 0x98, //0x0000db30 .quad -7440175859071633406 + 0x62, 0x7a, 0xd9, 0xfb, 0x3f, 0x77, 0x2f, 0xef, //0x0000db38 .quad -1211618658047395230 + 0x03, 0x86, 0xff, 0x4a, 0x58, 0xfb, 0xee, 0xbe, //0x0000db40 .quad -4688533805412153853 + 0xfb, 0xd8, 0xcf, 0xfa, 0x0f, 0x55, 0xfb, 0xaa, //0x0000db48 .quad -6126209340986631941 + 0x84, 0x67, 0xbf, 0x5d, 0x2e, 0xba, 0xaa, 0xee, //0x0000db50 .quad -1248981238337804412 + 0x39, 0xcf, 0x83, 0xf9, 0x53, 0x2a, 0xba, 0x95, //0x0000db58 .quad -7657761676233289927 + 0xb2, 0xa0, 0x97, 0xfa, 0x5c, 0xb4, 0x2a, 0x95, //0x0000db60 .quad -7698142301602209614 + 0x84, 0x61, 0xf2, 0x7b, 0x74, 0x5a, 0x94, 0xdd, //0x0000db68 .quad -2480258038432112252 + 0xdf, 0x88, 0x3d, 0x39, 0x74, 0x61, 0x75, 0xba, //0x0000db70 .quad -5010991858575374113 + 0xe5, 0xf9, 0xee, 0x9a, 0x11, 0x71, 0xf9, 0x94, //0x0000db78 .quad -7712008566467528219 + 0x17, 0xeb, 0x8c, 0x47, 0xd1, 0xb9, 0x12, 0xe9, //0x0000db80 .quad -1652053804791829737 + 0x5e, 0xb8, 0xaa, 0x01, 0x56, 0xcd, 0x37, 0x7a, //0x0000db88 .quad 8806733365625141342 + 0xee, 0x12, 0xb8, 0xcc, 0x22, 0xb4, 0xab, 0x91, //0x0000db90 .quad -7950062655635975442 + 0x3b, 0xb3, 0x0a, 0xc1, 0x55, 0xe0, 0x62, 0xac, //0x0000db98 .quad -6025006692552756421 + 0xaa, 0x17, 0xe6, 0x7f, 0x2b, 0xa1, 0x16, 0xb6, //0x0000dba0 .quad -5325892301117581398 + 0x0a, 0x60, 0x4d, 0x31, 0x6b, 0x98, 0x7b, 0x57, //0x0000dba8 .quad 6303799689591218186 + 0x94, 0x9d, 0xdf, 0x5f, 0x76, 0x49, 0x9c, 0xe3, //0x0000dbb0 .quad -2045679357969588844 + 0x0c, 0xb8, 0xa0, 0xfd, 0x85, 0x7e, 0x5a, 0xed, //0x0000dbb8 .quad -1343622424865753076 + 0x7d, 0xc2, 0xeb, 0xfb, 0xe9, 0xad, 0x41, 0x8e, //0x0000dbc0 .quad -8196078626372074883 + 0x08, 0x73, 0x84, 0xbe, 0x13, 0x8f, 0x58, 0x14, //0x0000dbc8 .quad 1466078993672598280 + 0x1c, 0xb3, 0xe6, 0x7a, 0x64, 0x19, 0xd2, 0xb1, //0x0000dbd0 .quad -5633412264537705700 + 0xc9, 0x8f, 0x25, 0xae, 0xd8, 0xb2, 0x6e, 0x59, //0x0000dbd8 .quad 6444284760518135753 + 0xe3, 0x5f, 0xa0, 0x99, 0xbd, 0x9f, 0x46, 0xde, //0x0000dbe0 .quad -2430079312244744221 + 0xbc, 0xf3, 0xae, 0xd9, 0x8e, 0x5f, 0xca, 0x6f, //0x0000dbe8 .quad 8055355950647669692 + 0xee, 0x3b, 0x04, 0x80, 0xd6, 0x23, 0xec, 0x8a, //0x0000dbf0 .quad -8436328597794046994 + 0x55, 0x58, 0x0d, 0x48, 0xb9, 0x7b, 0xde, 0x25, //0x0000dbf8 .quad 2728754459941099605 + 0xe9, 0x4a, 0x05, 0x20, 0xcc, 0x2c, 0xa7, 0xad, //0x0000dc00 .quad -5933724728815170839 + 0x6b, 0xae, 0x10, 0x9a, 0xa7, 0x1a, 0x56, 0xaf, //0x0000dc08 .quad -5812428961928401301 + 0xa4, 0x9d, 0x06, 0x28, 0xff, 0xf7, 0x10, 0xd9, //0x0000dc10 .quad -2805469892591575644 + 0x05, 0xda, 0x94, 0x80, 0x51, 0xa1, 0x2b, 0x1b, //0x0000dc18 .quad 1957835834444274181 + 0x86, 0x22, 0x04, 0x79, 0xff, 0x9a, 0xaa, 0x87, //0x0000dc20 .quad -8670947710510816634 + 0x43, 0x08, 0x5d, 0xf0, 0xd2, 0x44, 0xfb, 0x90, //0x0000dc28 .quad -7999724640327104445 + 0x28, 0x2b, 0x45, 0x57, 0xbf, 0x41, 0x95, 0xa9, //0x0000dc30 .quad -6226998619711132888 + 0x54, 0x4a, 0x74, 0xac, 0x07, 0x16, 0x3a, 0x35, //0x0000dc38 .quad 3835402254873283156 + 0xf2, 0x75, 0x16, 0x2d, 0x2f, 0x92, 0xfa, 0xd3, //0x0000dc40 .quad -3172062256211528206 + 0xe9, 0x5c, 0x91, 0x97, 0x89, 0x9b, 0x88, 0x42, //0x0000dc48 .quad 4794252818591603945 + 0xb7, 0x09, 0x2e, 0x7c, 0x5d, 0x9b, 0x7c, 0x84, //0x0000dc50 .quad -8900067937773286985 + 0x12, 0xda, 0xba, 0xfe, 0x35, 0x61, 0x95, 0x69, //0x0000dc58 .quad 7608094030047140370 + 0x25, 0x8c, 0x39, 0xdb, 0x34, 0xc2, 0x9b, 0xa5, //0x0000dc60 .quad -6513398903789220827 + 0x96, 0x90, 0x69, 0x7e, 0x83, 0xb9, 0xfa, 0x43, //0x0000dc68 .quad 4898431519131537558 + 0x2e, 0xef, 0x07, 0x12, 0xc2, 0xb2, 0x02, 0xcf, //0x0000dc70 .quad -3530062611309138130 + 0xbc, 0xf4, 0x03, 0x5e, 0xe4, 0x67, 0xf9, 0x94, //0x0000dc78 .quad -7712018656367741764 + 0x7d, 0xf5, 0x44, 0x4b, 0xb9, 0xaf, 0x61, 0x81, //0x0000dc80 .quad -9123818159709293187 + 0xf6, 0x78, 0xc2, 0xba, 0xee, 0xe0, 0x1b, 0x1d, //0x0000dc88 .quad 2097517367411243254 + 0xdc, 0x32, 0x16, 0x9e, 0xa7, 0x1b, 0xba, 0xa1, //0x0000dc90 .quad -6793086681209228580 + 0x33, 0x17, 0x73, 0x69, 0x2a, 0xd9, 0x62, 0x64, //0x0000dc98 .quad 7233582727691441971 + 0x93, 0xbf, 0x9b, 0x85, 0x91, 0xa2, 0x28, 0xca, //0x0000dca0 .quad -3879672333084147821 + 0xff, 0xdc, 0xcf, 0x03, 0x75, 0x8f, 0x7b, 0x7d, //0x0000dca8 .quad 9041978409614302463 + 0x78, 0xaf, 0x02, 0xe7, 0x35, 0xcb, 0xb2, 0xfc, //0x0000dcb0 .quad -237904397927796872 + 0x3f, 0xd4, 0xc3, 0x44, 0x52, 0x73, 0xda, 0x5c, //0x0000dcb8 .quad 6690786993590490175 + 0xab, 0xad, 0x61, 0xb0, 0x01, 0xbf, 0xef, 0x9d, //0x0000dcc0 .quad -7066219276345954901 + 0xa8, 0x64, 0xfa, 0x6a, 0x13, 0x88, 0x08, 0x3a, //0x0000dcc8 .quad 4181741870994056360 + 0x16, 0x19, 0x7a, 0x1c, 0xc2, 0xae, 0x6b, 0xc5, //0x0000dcd0 .quad -4221088077005055722 + 0xd1, 0xfd, 0xb8, 0x45, 0x18, 0xaa, 0x8a, 0x08, //0x0000dcd8 .quad 615491320315182545 + 0x5b, 0x9f, 0x98, 0xa3, 0x72, 0x9a, 0xc6, 0xf6, //0x0000dce0 .quad -664674077828931749 + 0x46, 0x3d, 0x27, 0x57, 0x9e, 0x54, 0xad, 0x8a, //0x0000dce8 .quad -8454007886460797626 + 0x99, 0x63, 0x3f, 0xa6, 0x87, 0x20, 0x3c, 0x9a, //0x0000dcf0 .quad -7332950326284164199 + 0x4c, 0x86, 0x78, 0xf6, 0xe2, 0x54, 0xac, 0x36, //0x0000dcf8 .quad 3939617107816777292 + 0x7f, 0x3c, 0xcf, 0x8f, 0xa9, 0x28, 0xcb, 0xc0, //0x0000dd00 .quad -4554501889427817345 + 0xde, 0xa7, 0x16, 0xb4, 0x1b, 0x6a, 0x57, 0x84, //0x0000dd08 .quad -8910536670511192098 + 0x9f, 0x0b, 0xc3, 0xf3, 0xd3, 0xf2, 0xfd, 0xf0, //0x0000dd10 .quad -1081441343357383777 + 0xd6, 0x51, 0x1c, 0xa1, 0xa2, 0x44, 0x6d, 0x65, //0x0000dd18 .quad 7308573235570561494 + 0x43, 0xe7, 0x59, 0x78, 0xc4, 0xb7, 0x9e, 0x96, //0x0000dd20 .quad -7593429867239446717 + 0x26, 0xb3, 0xb1, 0xa4, 0xe5, 0x4a, 0x64, 0x9f, //0x0000dd28 .quad -6961356773836868826 + 0x14, 0x61, 0x70, 0x96, 0xb5, 0x65, 0x46, 0xbc, //0x0000dd30 .quad -4880101315621920492 + 0xef, 0x1f, 0xde, 0x0d, 0x9f, 0x5d, 0x3d, 0x87, //0x0000dd38 .quad -8701695967296086033 + 0x59, 0x79, 0x0c, 0xfc, 0x22, 0xff, 0x57, 0xeb, //0x0000dd40 .quad -1488440626100012711 + 0xeb, 0xa7, 0x55, 0xd1, 0x06, 0xb5, 0x0c, 0xa9, //0x0000dd48 .quad -6265433940692719637 + 0xd8, 0xcb, 0x87, 0xdd, 0x75, 0xff, 0x16, 0x93, //0x0000dd50 .quad -7847804418953589800 + 0xf3, 0x88, 0xd5, 0x42, 0x24, 0xf1, 0xa7, 0x09, //0x0000dd58 .quad 695789805494438131 + 0xce, 0xbe, 0xe9, 0x54, 0x53, 0xbf, 0xdc, 0xb7, //0x0000dd60 .quad -5198069505264599346 + 0x30, 0xeb, 0x8a, 0x53, 0x6d, 0xed, 0x11, 0x0c, //0x0000dd68 .quad 869737256868047664 + 0x81, 0x2e, 0x24, 0x2a, 0x28, 0xef, 0xd3, 0xe5, //0x0000dd70 .quad -1885900863153361279 + 0xfb, 0xa5, 0x6d, 0xa8, 0xc8, 0x68, 0x16, 0x8f, //0x0000dd78 .quad -8136200465769716229 + 0x10, 0x9d, 0x56, 0x1a, 0x79, 0x75, 0xa4, 0x8f, //0x0000dd80 .quad -8096217067111932656 + 0xbd, 0x87, 0x44, 0x69, 0x7d, 0x01, 0x6e, 0xf9, //0x0000dd88 .quad -473439272678684739 + 0x55, 0x44, 0xec, 0x60, 0xd7, 0x92, 0x8d, 0xb3, //0x0000dd90 .quad -5508585315462527915 + 0xad, 0xa9, 0x95, 0xc3, 0xdc, 0x81, 0xc9, 0x37, //0x0000dd98 .quad 4019886927579031981 + 0x6a, 0x55, 0x27, 0x39, 0x8d, 0xf7, 0x70, 0xe0, //0x0000dda0 .quad -2274045625900771990 + 0x18, 0x14, 0x7b, 0xf4, 0x53, 0xe2, 0xbb, 0x85, //0x0000dda8 .quad -8810199395808373736 + 0x62, 0x95, 0xb8, 0x43, 0xb8, 0x9a, 0x46, 0x8c, //0x0000ddb0 .quad -8338807543829064350 + 0x8f, 0xec, 0xcc, 0x78, 0x74, 0x6d, 0x95, 0x93, //0x0000ddb8 .quad -7812217631593927537 + 0xbb, 0xba, 0xa6, 0x54, 0x66, 0x41, 0x58, 0xaf, //0x0000ddc0 .quad -5811823411358942533 + 0xb3, 0x27, 0x00, 0x97, 0xd1, 0xc8, 0x7a, 0x38, //0x0000ddc8 .quad 4069786015789754291 + 0x6a, 0x69, 0xd0, 0xe9, 0xbf, 0x51, 0x2e, 0xdb, //0x0000ddd0 .quad -2653093245771290262 + 0x9f, 0x31, 0xc0, 0xfc, 0x05, 0x7b, 0x99, 0x06, //0x0000ddd8 .quad 475546501309804959 + 0xe2, 0x41, 0x22, 0xf2, 0x17, 0xf3, 0xfc, 0x88, //0x0000dde0 .quad -8575712306248138270 + 0x04, 0x1f, 0xf8, 0xbd, 0xe3, 0xec, 0x1f, 0x44, //0x0000dde8 .quad 4908902581746016004 + 0x5a, 0xd2, 0xaa, 0xee, 0xdd, 0x2f, 0x3c, 0xab, //0x0000ddf0 .quad -6107954364382784934 + 0xc4, 0x26, 0x76, 0xad, 0x1c, 0xe8, 0x27, 0xd5, //0x0000ddf8 .quad -3087243809672255804 + 0xf1, 0x86, 0x55, 0x6a, 0xd5, 0x3b, 0x0b, 0xd6, //0x0000de00 .quad -3023256937051093263 + 0x75, 0xb0, 0xd3, 0xd8, 0x23, 0xe2, 0x71, 0x8a, //0x0000de08 .quad -8470740780517707659 + 0x56, 0x74, 0x75, 0x62, 0x65, 0x05, 0xc7, 0x85, //0x0000de10 .quad -8807064613298015146 + 0x4a, 0x4e, 0x84, 0x67, 0x56, 0x2d, 0x87, 0xf6, //0x0000de18 .quad -682526969396179382 + 0x6c, 0xd1, 0x12, 0xbb, 0xbe, 0xc6, 0x38, 0xa7, //0x0000de20 .quad -6397144748195131028 + 0xdc, 0x61, 0x65, 0x01, 0xac, 0xf8, 0x28, 0xb4, //0x0000de28 .quad -5464844730172612132 + 0xc7, 0x85, 0xd7, 0x69, 0x6e, 0xf8, 0x06, 0xd1, //0x0000de30 .quad -3384744916816525881 + 0x53, 0xba, 0xbe, 0x01, 0xd7, 0x36, 0x33, 0xe1, //0x0000de38 .quad -2219369894288377261 + 0x9c, 0xb3, 0x26, 0x02, 0x45, 0x5b, 0xa4, 0x82, //0x0000de40 .quad -9032994600651410532 + 0x74, 0x34, 0x17, 0x61, 0x46, 0x02, 0xc0, 0xec, //0x0000de48 .quad -1387106183930235788 + 0x84, 0x60, 0xb0, 0x42, 0x16, 0x72, 0x4d, 0xa3, //0x0000de50 .quad -6679557232386875260 + 0x91, 0x01, 0x5d, 0xf9, 0xd7, 0x02, 0xf0, 0x27, //0x0000de58 .quad 2877803288514593169 + 0xa5, 0x78, 0x5c, 0xd3, 0x9b, 0xce, 0x20, 0xcc, //0x0000de60 .quad -3737760522056206171 + 0xf5, 0x41, 0xb4, 0xf7, 0x8d, 0x03, 0xec, 0x31, //0x0000de68 .quad 3597254110643241461 + 0xce, 0x96, 0x33, 0xc8, 0x42, 0x02, 0x29, 0xff, //0x0000de70 .quad -60514634142869810 + 0x72, 0x52, 0xa1, 0x75, 0x71, 0x04, 0x67, 0x7e, //0x0000de78 .quad 9108253656731439730 + 0x41, 0x3e, 0x20, 0xbd, 0x69, 0xa1, 0x79, 0x9f, //0x0000de80 .quad -6955350673980375487 + 0x87, 0xd3, 0x84, 0xe9, 0xc6, 0x62, 0x00, 0x0f, //0x0000de88 .quad 1080972517029761927 + 0xd1, 0x4d, 0x68, 0x2c, 0xc4, 0x09, 0x58, 0xc7, //0x0000de90 .quad -4082502324048081455 + 0x69, 0x08, 0xe6, 0xa3, 0x78, 0x7b, 0xc0, 0x52, //0x0000de98 .quad 5962901664714590313 + 0x45, 0x61, 0x82, 0x37, 0x35, 0x0c, 0x2e, 0xf9, //0x0000dea0 .quad -491441886632713915 + 0x83, 0x8a, 0xdf, 0xcc, 0x56, 0x9a, 0x70, 0xa7, //0x0000dea8 .quad -6381430974388925821 + 0xcb, 0x7c, 0xb1, 0x42, 0xa1, 0xc7, 0xbc, 0x9b, //0x0000deb0 .quad -7224680206786528053 + 0x92, 0xb6, 0x0b, 0x40, 0x76, 0x60, 0xa6, 0x88, //0x0000deb8 .quad -8600080377420466542 + 0xfe, 0xdb, 0x5d, 0x93, 0x89, 0xf9, 0xab, 0xc2, //0x0000dec0 .quad -4419164240055772162 + 0x36, 0xa4, 0x0e, 0xd0, 0x93, 0xf8, 0xcf, 0x6a, //0x0000dec8 .quad 7696643601933968438 + 0xfe, 0x52, 0x35, 0xf8, 0xeb, 0xf7, 0x56, 0xf3, //0x0000ded0 .quad -912269281642327298 + 0x44, 0x4d, 0x12, 0xc4, 0xb8, 0xf6, 0x83, 0x05, //0x0000ded8 .quad 397432465562684740 + 0xde, 0x53, 0x21, 0x7b, 0xf3, 0x5a, 0x16, 0x98, //0x0000dee0 .quad -7487697328667536418 + 0x4b, 0x70, 0x8b, 0x7a, 0x33, 0x7a, 0x72, 0xc3, //0x0000dee8 .quad -4363290727450709941 + 0xd6, 0xa8, 0xe9, 0x59, 0xb0, 0xf1, 0x1b, 0xbe, //0x0000def0 .quad -4747935642407032618 + 0x5d, 0x4c, 0x2e, 0x59, 0xc0, 0x18, 0x4f, 0x74, //0x0000def8 .quad 8380944645968776285 + 0x0c, 0x13, 0x64, 0x70, 0x1c, 0xee, 0xa2, 0xed, //0x0000df00 .quad -1323233534581402868 + 0x74, 0xdf, 0x79, 0x6f, 0xf0, 0xde, 0x62, 0x11, //0x0000df08 .quad 1252808770606194548 + 0xe7, 0x8b, 0x3e, 0xc6, 0xd1, 0xd4, 0x85, 0x94, //0x0000df10 .quad -7744549986754458649 + 0xa9, 0x2b, 0xac, 0x45, 0x56, 0xcb, 0xdd, 0x8a, //0x0000df18 .quad -8440366555225904215 + 0xe1, 0x2e, 0xce, 0x37, 0x06, 0x4a, 0xa7, 0xb9, //0x0000df20 .quad -5069001465015685407 + 0x93, 0x36, 0x17, 0xd7, 0x2b, 0x3e, 0x95, 0x6d, //0x0000df28 .quad 7896285879677171347 + 0x99, 0xba, 0xc1, 0xc5, 0x87, 0x1c, 0x11, 0xe8, //0x0000df30 .quad -1724565812842218855 + 0x38, 0x04, 0xdd, 0xcc, 0xb6, 0x8d, 0xfa, 0xc8, //0x0000df38 .quad -3964700705685699528 + 0xa0, 0x14, 0x99, 0xdb, 0xd4, 0xb1, 0x0a, 0x91, //0x0000df40 .quad -7995382660667468640 + 0xa3, 0x22, 0x0a, 0x40, 0x92, 0x98, 0x9c, 0x1d, //0x0000df48 .quad 2133748077373825699 + 0xc8, 0x59, 0x7f, 0x12, 0x4a, 0x5e, 0x4d, 0xb5, //0x0000df50 .quad -5382542307406947896 + 0x4c, 0xab, 0x0c, 0xd0, 0xb6, 0xbe, 0x03, 0x25, //0x0000df58 .quad 2667185096717282124 + 0x3a, 0x30, 0x1f, 0x97, 0xdc, 0xb5, 0xa0, 0xe2, //0x0000df60 .quad -2116491865831296966 + 0x1e, 0xd6, 0x0f, 0x84, 0x64, 0xae, 0x44, 0x2e, //0x0000df68 .quad 3333981370896602654 + 0x24, 0x7e, 0x73, 0xde, 0xa9, 0x71, 0xa4, 0x8d, //0x0000df70 .quad -8240336443785642460 + 0xd3, 0xe5, 0x89, 0xd2, 0xfe, 0xec, 0xea, 0x5c, //0x0000df78 .quad 6695424375237764563 + 0xad, 0x5d, 0x10, 0x56, 0x14, 0x8e, 0x0d, 0xb1, //0x0000df80 .quad -5688734536304665171 + 0x48, 0x5f, 0x2c, 0x87, 0x3e, 0xa8, 0x25, 0x74, //0x0000df88 .quad 8369280469047205704 + 0x18, 0x75, 0x94, 0x6b, 0x99, 0xf1, 0x50, 0xdd, //0x0000df90 .quad -2499232151953443560 + 0x1a, 0x77, 0xf7, 0x28, 0x4e, 0x12, 0x2f, 0xd1, //0x0000df98 .quad -3373457468973156582 + 0x2f, 0xc9, 0x3c, 0xe3, 0xff, 0x96, 0x52, 0x8a, //0x0000dfa0 .quad -8479549122611984081 + 0x70, 0xaa, 0x9a, 0xd9, 0x70, 0x6b, 0xbd, 0x82, //0x0000dfa8 .quad -9025939945749304720 + 0x7b, 0xfb, 0x0b, 0xdc, 0xbf, 0x3c, 0xe7, 0xac, //0x0000dfb0 .quad -5987750384837592197 + 0x0c, 0x55, 0x01, 0x10, 0x4d, 0xc6, 0x6c, 0x63, //0x0000dfb8 .quad 7164319141522920716 + 0x5a, 0xfa, 0x0e, 0xd3, 0xef, 0x0b, 0x21, 0xd8, //0x0000dfc0 .quad -2873001962619602342 + 0x4f, 0xaa, 0x01, 0x54, 0xe0, 0xf7, 0x47, 0x3c, //0x0000dfc8 .quad 4343712908476262991 + 0x78, 0x5c, 0xe9, 0xe3, 0x75, 0xa7, 0x14, 0x87, //0x0000dfd0 .quad -8713155254278333320 + 0x72, 0x0a, 0x81, 0x34, 0xec, 0xfa, 0xac, 0x65, //0x0000dfd8 .quad 7326506586225052274 + 0x96, 0xb3, 0xe3, 0x5c, 0x53, 0xd1, 0xd9, 0xa8, //0x0000dfe0 .quad -6279758049420528746 + 0x0e, 0x4d, 0xa1, 0x41, 0xa7, 0x39, 0x18, 0x7f, //0x0000dfe8 .quad 9158133232781315342 + 0x7c, 0xa0, 0x1c, 0x34, 0xa8, 0x45, 0x10, 0xd3, //0x0000dff0 .quad -3238011543348273028 + 0x51, 0xa0, 0x09, 0x12, 0x11, 0x48, 0xde, 0x1e, //0x0000dff8 .quad 2224294504121868369 + 0x4d, 0xe4, 0x91, 0x20, 0x89, 0x2b, 0xea, 0x83, //0x0000e000 .quad -8941286242233752499 + 0x33, 0x04, 0x46, 0xab, 0x0a, 0xed, 0x4a, 0x93, //0x0000e008 .quad -7833187971778608077 + 0x60, 0x5d, 0xb6, 0x68, 0x6b, 0xb6, 0xe4, 0xa4, //0x0000e010 .quad -6564921784364802720 + 0x40, 0x85, 0x17, 0x56, 0x4d, 0xa8, 0x1d, 0xf8, //0x0000e018 .quad -568112927868484288 + 0xb9, 0xf4, 0xe3, 0x42, 0x06, 0xe4, 0x1d, 0xce, //0x0000e020 .quad -3594466212028615495 + 0x8f, 0x66, 0x9d, 0xab, 0x60, 0x12, 0x25, 0x36, //0x0000e028 .quad 3901544858591782543 + 0xf3, 0x78, 0xce, 0xe9, 0x83, 0xae, 0xd2, 0x80, //0x0000e030 .quad -9164070410158966541 + 0x1a, 0x60, 0x42, 0x6b, 0x7c, 0x2b, 0xd7, 0xc1, //0x0000e038 .quad -4479063491021217766 + 0x30, 0x17, 0x42, 0xe4, 0x24, 0x5a, 0x07, 0xa1, //0x0000e040 .quad -6843401994271320272 + 0x20, 0xf8, 0x12, 0x86, 0x5b, 0xf6, 0x4c, 0xb2, //0x0000e048 .quad -5598829363776522208 + 0xfc, 0x9c, 0x52, 0x1d, 0xae, 0x30, 0x49, 0xc9, //0x0000e050 .quad -3942566474411762436 + 0x28, 0xb6, 0x97, 0x67, 0xf2, 0x33, 0xe0, 0xde, //0x0000e058 .quad -2386850686293264856 + 0x3c, 0x44, 0xa7, 0xa4, 0xd9, 0x7c, 0x9b, 0xfb, //0x0000e060 .quad -316522074587315140 + 0xb2, 0xa3, 0x7d, 0x01, 0xef, 0x40, 0x98, 0x16, //0x0000e068 .quad 1628122660560806834 + 0xa5, 0x8a, 0xe8, 0x06, 0x08, 0x2e, 0x41, 0x9d, //0x0000e070 .quad -7115355324258153819 + 0x4f, 0x86, 0xee, 0x60, 0x95, 0x28, 0x1f, 0x8e, //0x0000e078 .quad -8205795374004271537 + 0x4e, 0xad, 0xa2, 0x08, 0x8a, 0x79, 0x91, 0xc4, //0x0000e080 .quad -4282508136895304370 + 0xe3, 0x27, 0x2a, 0xb9, 0xba, 0xf2, 0xa6, 0xf1, //0x0000e088 .quad -1033872180650563613 + 0xa2, 0x58, 0xcb, 0x8a, 0xec, 0xd7, 0xb5, 0xf5, //0x0000e090 .quad -741449152691742558 + 0xdc, 0xb1, 0x74, 0x67, 0x69, 0xaf, 0x10, 0xae, //0x0000e098 .quad -5904026244240592420 + 0x65, 0x17, 0xbf, 0xd6, 0xf3, 0xa6, 0x91, 0x99, //0x0000e0a0 .quad -7380934748073420955 + 0x2a, 0xef, 0xa8, 0xe0, 0xa1, 0x6d, 0xca, 0xac, //0x0000e0a8 .quad -5995859411864064214 + 0x3f, 0xdd, 0x6e, 0xcc, 0xb0, 0x10, 0xf6, 0xbf, //0x0000e0b0 .quad -4614482416664388289 + 0xf4, 0x2a, 0xd3, 0x58, 0x0a, 0x09, 0xfd, 0x17, //0x0000e0b8 .quad 1728547772024695540 + 0x8e, 0x94, 0x8a, 0xff, 0xdc, 0x94, 0xf3, 0xef, //0x0000e0c0 .quad -1156417002403097458 + 0xb1, 0xf5, 0x07, 0xef, 0x4c, 0x4b, 0xfc, 0xdd, //0x0000e0c8 .quad -2451001303396518479 + 0xd9, 0x9c, 0xb6, 0x1f, 0x0a, 0x3d, 0xf8, 0x95, //0x0000e0d0 .quad -7640289654143017767 + 0x8f, 0xf9, 0x64, 0x15, 0x10, 0xaf, 0xbd, 0x4a, //0x0000e0d8 .quad 5385653213018257807 + 0x0f, 0x44, 0xa4, 0xa7, 0x4c, 0x4c, 0x76, 0xbb, //0x0000e0e0 .quad -4938676049251384305 + 0xf2, 0x37, 0xbe, 0x1a, 0xd4, 0x1a, 0x6d, 0x9d, //0x0000e0e8 .quad -7102991539009341454 + 0x13, 0x55, 0x8d, 0xd1, 0x5f, 0xdf, 0x53, 0xea, //0x0000e0f0 .quad -1561659043136842477 + 0xee, 0xc5, 0x6d, 0x21, 0x89, 0x61, 0xc8, 0x84, //0x0000e0f8 .quad -8878739423761676818 + 0x2c, 0x55, 0xf8, 0xe2, 0x9b, 0x6b, 0x74, 0x92, //0x0000e100 .quad -7893565929601608404 + 0xb5, 0x9b, 0xe4, 0xb4, 0xf5, 0x3c, 0xfd, 0x32, //0x0000e108 .quad 3674159897003727797 + 0x77, 0x6a, 0xb6, 0xdb, 0x82, 0x86, 0x11, 0xb7, //0x0000e110 .quad -5255271393574622601 + 0xa2, 0xc2, 0x1d, 0x22, 0x33, 0x8c, 0xbc, 0x3f, //0x0000e118 .quad 4592699871254659746 + 0x15, 0x05, 0xa4, 0x92, 0x23, 0xe8, 0xd5, 0xe4, //0x0000e120 .quad -1957403223540890347 + 0x4b, 0x33, 0xa5, 0xea, 0x3f, 0xaf, 0xab, 0x0f, //0x0000e128 .quad 1129188820640936779 + 0x2d, 0x83, 0xa6, 0x3b, 0x16, 0xb1, 0x05, 0x8f, //0x0000e130 .quad -8140906042354138323 + 0x0f, 0x40, 0xa7, 0xf2, 0x87, 0x4d, 0xcb, 0x29, //0x0000e138 .quad 3011586022114279439 + 0xf8, 0x23, 0x90, 0xca, 0x5b, 0x1d, 0xc7, 0xb2, //0x0000e140 .quad -5564446534515285000 + 0x13, 0x10, 0x51, 0xef, 0xe9, 0x20, 0x3e, 0x74, //0x0000e148 .quad 8376168546070237203 + 0xf6, 0x2c, 0x34, 0xbd, 0xb2, 0xe4, 0x78, 0xdf, //0x0000e150 .quad -2343872149716718346 + 0x17, 0x54, 0x25, 0x6b, 0x24, 0xa9, 0x4d, 0x91, //0x0000e158 .quad -7976533391121755113 + 0x1a, 0x9c, 0x40, 0xb6, 0xef, 0x8e, 0xab, 0x8b, //0x0000e160 .quad -8382449121214030822 + 0x8f, 0x54, 0xf7, 0xc2, 0xb6, 0x89, 0xd0, 0x1a, //0x0000e168 .quad 1932195658189984911 + 0x20, 0xc3, 0xd0, 0xa3, 0xab, 0x72, 0x96, 0xae, //0x0000e170 .quad -5866375383090150624 + 0xb2, 0x29, 0xb5, 0x73, 0x24, 0xac, 0x84, 0xa1, //0x0000e178 .quad -6808127464117294670 + 0xe8, 0xf3, 0xc4, 0x8c, 0x56, 0x0f, 0x3c, 0xda, //0x0000e180 .quad -2721283210435300376 + 0x1f, 0x74, 0xa2, 0x90, 0x2d, 0xd7, 0xe5, 0xc9, //0x0000e188 .quad -3898473311719230433 + 0x71, 0x18, 0xfb, 0x17, 0x96, 0x89, 0x65, 0x88, //0x0000e190 .quad -8618331034163144591 + 0x93, 0x88, 0x65, 0x7a, 0x7c, 0xa6, 0x2f, 0x7e, //0x0000e198 .quad 9092669226243950739 + 0x8d, 0xde, 0xf9, 0x9d, 0xfb, 0xeb, 0x7e, 0xaa, //0x0000e1a0 .quad -6161227774276542835 + 0xb8, 0xea, 0xfe, 0x98, 0x1b, 0x90, 0xbb, 0xdd, //0x0000e1a8 .quad -2469221522477225288 + 0x31, 0x56, 0x78, 0x85, 0xfa, 0xa6, 0x1e, 0xd5, //0x0000e1b0 .quad -3089848699418290639 + 0x66, 0xa5, 0x3e, 0x7f, 0x22, 0x74, 0x2a, 0x55, //0x0000e1b8 .quad 6136845133758244198 + 0xde, 0x35, 0x6b, 0x93, 0x5c, 0x28, 0x33, 0x85, //0x0000e1c0 .quad -8848684464777513506 + 0x60, 0x27, 0x87, 0x8f, 0x95, 0x88, 0x3a, 0xd5, //0x0000e1c8 .quad -3082000819042179232 + 0x56, 0x03, 0x46, 0xb8, 0x73, 0xf2, 0x7f, 0xa6, //0x0000e1d0 .quad -6449169562544503978 + 0x38, 0xf1, 0x68, 0xf3, 0xba, 0x2a, 0x89, 0x8a, //0x0000e1d8 .quad -8464187042230111944 + 0x2c, 0x84, 0x57, 0xa6, 0x10, 0xef, 0x1f, 0xd0, //0x0000e1e0 .quad -3449775934753242068 + 0x86, 0x2d, 0x43, 0xb0, 0x69, 0x75, 0x2b, 0x2d, //0x0000e1e8 .quad 3254824252494523782 + 0x9b, 0xb2, 0xf6, 0x67, 0x6a, 0xf5, 0x13, 0x82, //0x0000e1f0 .quad -9073638986861858149 + 0x74, 0xfc, 0x29, 0x0e, 0x62, 0x29, 0x3b, 0x9c, //0x0000e1f8 .quad -7189106879045698444 + 0x42, 0x5f, 0xf4, 0x01, 0xc5, 0xf2, 0x98, 0xa2, //0x0000e200 .quad -6730362715149934782 + 0x90, 0x7b, 0xb4, 0x91, 0xba, 0xf3, 0x49, 0x83, //0x0000e208 .quad -8986383598807123056 + 0x13, 0x77, 0x71, 0x42, 0x76, 0x2f, 0x3f, 0xcb, //0x0000e210 .quad -3801267375510030573 + 0x74, 0x9a, 0x21, 0x36, 0xa9, 0x70, 0x1c, 0x24, //0x0000e218 .quad 2602078556773259892 + 0xd7, 0xd4, 0x0d, 0xd3, 0x53, 0xfb, 0x0e, 0xfe, //0x0000e220 .quad -139898200960150313 + 0x11, 0x01, 0xaa, 0x83, 0xd3, 0x8c, 0x23, 0xed, //0x0000e228 .quad -1359087822460813039 + 0x06, 0xa5, 0xe8, 0x63, 0x14, 0x5d, 0xc9, 0x9e, //0x0000e230 .quad -7004965403241175802 + 0xab, 0x40, 0x4a, 0x32, 0x04, 0x38, 0x36, 0xf4, //0x0000e238 .quad -849429889038008149 + 0x48, 0xce, 0xe2, 0x7c, 0x59, 0xb4, 0x7b, 0xc6, //0x0000e240 .quad -4144520735624081848 + 0xd6, 0xd0, 0xdc, 0x3e, 0x05, 0xc6, 0x43, 0xb1, //0x0000e248 .quad -5673473379724898090 + 0xda, 0x81, 0x1b, 0xdc, 0x6f, 0xa1, 0x1a, 0xf8, //0x0000e250 .quad -568964901102714406 + 0x0b, 0x05, 0x94, 0x8e, 0x86, 0xb7, 0x94, 0xdd, //0x0000e258 .quad -2480155706228734709 + 0x28, 0x31, 0x91, 0xe9, 0xe5, 0xa4, 0x10, 0x9b, //0x0000e260 .quad -7273132090830278360 + 0x27, 0x83, 0x1c, 0x19, 0xb4, 0xf2, 0x7c, 0xca, //0x0000e268 .quad -3855940325606653145 + 0x72, 0x7d, 0xf5, 0x63, 0x1f, 0xce, 0xd4, 0xc1, //0x0000e270 .quad -4479729095110460046 + 0xf1, 0xa3, 0x63, 0x1f, 0x61, 0x2f, 0x1c, 0xfd, //0x0000e278 .quad -208239388580928527 + 0xcf, 0xdc, 0xf2, 0x3c, 0xa7, 0x01, 0x4a, 0xf2, //0x0000e280 .quad -987975350460687153 + 0xed, 0x8c, 0x3c, 0x67, 0x39, 0x3b, 0x63, 0xbc, //0x0000e288 .quad -4871985254153548563 + 0x01, 0xca, 0x17, 0x86, 0x08, 0x41, 0x6e, 0x97, //0x0000e290 .quad -7535013621679011327 + 0x14, 0xd8, 0x85, 0xe0, 0x03, 0x05, 0xbe, 0xd5, //0x0000e298 .quad -3044990783845967852 + 0x82, 0xbc, 0x9d, 0xa7, 0x4a, 0xd1, 0x49, 0xbd, //0x0000e2a0 .quad -4807081008671376254 + 0x19, 0x4e, 0xa7, 0xd8, 0x44, 0x86, 0x2d, 0x4b, //0x0000e2a8 .quad 5417133557047315993 + 0xa2, 0x2b, 0x85, 0x51, 0x9d, 0x45, 0x9c, 0xec, //0x0000e2b0 .quad -1397165242411832414 + 0x9f, 0x21, 0xd1, 0x0e, 0xd6, 0xe7, 0xf8, 0xdd, //0x0000e2b8 .quad -2451955090545630817 + 0x45, 0x3b, 0xf3, 0x52, 0x82, 0xab, 0xe1, 0x93, //0x0000e2c0 .quad -7790757304148477115 + 0x04, 0xb5, 0x42, 0xc9, 0xe5, 0x90, 0xbb, 0xca, //0x0000e2c8 .quad -3838314940804713212 + 0x17, 0x0a, 0xb0, 0xe7, 0x62, 0x16, 0xda, 0xb8, //0x0000e2d0 .quad -5126760611758208489 + 0x44, 0x62, 0x93, 0x3b, 0x1f, 0x75, 0x6a, 0x3d, //0x0000e2d8 .quad 4425478360848884292 + 0x9d, 0x0c, 0x9c, 0xa1, 0xfb, 0x9b, 0x10, 0xe7, //0x0000e2e0 .quad -1796764746270372707 + 0xd5, 0x3a, 0x78, 0x0a, 0x67, 0x12, 0xc5, 0x0c, //0x0000e2e8 .quad 920161932633717461 + 0xe2, 0x87, 0x01, 0x45, 0x7d, 0x61, 0x6a, 0x90, //0x0000e2f0 .quad -8040506994060064798 + 0xc6, 0x24, 0x8b, 0x66, 0x80, 0x2b, 0xfb, 0x27, //0x0000e2f8 .quad 2880944217109767366 + 0xda, 0xe9, 0x41, 0x96, 0xdc, 0xf9, 0x84, 0xb4, //0x0000e300 .quad -5438947724147693094 + 0xf7, 0xed, 0x2d, 0x80, 0x60, 0xf6, 0xf9, 0xb1, //0x0000e308 .quad -5622191765467566601 + 0x51, 0x64, 0xd2, 0xbb, 0x53, 0x38, 0xa6, 0xe1, //0x0000e310 .quad -2186998636757228463 + 0x74, 0x69, 0x39, 0xa0, 0xf8, 0x73, 0x78, 0x5e, //0x0000e318 .quad 6807318348447705460 + 0xb2, 0x7e, 0x63, 0x55, 0x34, 0xe3, 0x07, 0x8d, //0x0000e320 .quad -8284403175614349646 + 0xe9, 0xe1, 0x23, 0x64, 0x7b, 0x48, 0x0b, 0xdb, //0x0000e328 .quad -2662955059861265943 + 0x5f, 0x5e, 0xbc, 0x6a, 0x01, 0xdc, 0x49, 0xb0, //0x0000e330 .quad -5743817951090549153 + 0x63, 0xda, 0x2c, 0x3d, 0x9a, 0x1a, 0xce, 0x91, //0x0000e338 .quad -7940379843253970333 + 0xf7, 0x75, 0x6b, 0xc5, 0x01, 0x53, 0x5c, 0xdc, //0x0000e340 .quad -2568086420435798537 + 0xfc, 0x10, 0x78, 0xcc, 0x40, 0xa1, 0x41, 0x76, //0x0000e348 .quad 8521269269642088700 + 0xba, 0x29, 0x63, 0x1b, 0xe1, 0xb3, 0xb9, 0x89, //0x0000e350 .quad -8522583040413455942 + 0x9e, 0x0a, 0xcb, 0x7f, 0xc8, 0x04, 0xe9, 0xa9, //0x0000e358 .quad -6203421752542164322 + 0x29, 0xf4, 0x3b, 0x62, 0xd9, 0x20, 0x28, 0xac, //0x0000e360 .quad -6041542782089432023 + 0x45, 0xcd, 0xbd, 0x9f, 0xfa, 0x45, 0x63, 0x54, //0x0000e368 .quad 6080780864604458309 + 0x33, 0xf1, 0xca, 0xba, 0x0f, 0x29, 0x32, 0xd7, //0x0000e370 .quad -2940242459184402125 + 0x96, 0x40, 0xad, 0x47, 0x79, 0x17, 0x7c, 0xa9, //0x0000e378 .quad -6234081974526590826 + 0xc0, 0xd6, 0xbe, 0xd4, 0xa9, 0x59, 0x7f, 0x86, //0x0000e380 .quad -8755180564631333184 + 0x5e, 0x48, 0xcc, 0xcc, 0xab, 0x8e, 0xed, 0x49, //0x0000e388 .quad 5327070802775656542 + 0x70, 0x8c, 0xee, 0x49, 0x14, 0x30, 0x1f, 0xa8, //0x0000e390 .quad -6332289687361778576 + 0x75, 0x5a, 0xff, 0xbf, 0x56, 0xf2, 0x68, 0x5c, //0x0000e398 .quad 6658838503469570677 + 0x8c, 0x2f, 0x6a, 0x5c, 0x19, 0xfc, 0x26, 0xd2, //0x0000e3a0 .quad -3303676090774835316 + 0x12, 0x31, 0xff, 0x6f, 0xec, 0x2e, 0x83, 0x73, //0x0000e3a8 .quad 8323548129336963346 + 0xb7, 0x5d, 0xc2, 0xd9, 0x8f, 0x5d, 0x58, 0x83, //0x0000e3b0 .quad -8982326584375353929 + 0xac, 0x7e, 0xff, 0xc5, 0x53, 0xfd, 0x31, 0xc8, //0x0000e3b8 .quad -4021154456019173716 + 0x25, 0xf5, 0x32, 0xd0, 0xf3, 0x74, 0x2e, 0xa4, //0x0000e3c0 .quad -6616222212041804507 + 0x56, 0x5e, 0x7f, 0xb7, 0xa8, 0x7c, 0x3e, 0xba, //0x0000e3c8 .quad -5026443070023967146 + 0x6f, 0xb2, 0x3f, 0xc4, 0x30, 0x12, 0x3a, 0xcd, //0x0000e3d0 .quad -3658591746624867729 + 0xec, 0x35, 0x5f, 0xe5, 0xd2, 0x1b, 0xce, 0x28, //0x0000e3d8 .quad 2940318199324816876 + 0x85, 0xcf, 0xa7, 0x7a, 0x5e, 0x4b, 0x44, 0x80, //0x0000e3e0 .quad -9204148869281624187 + 0xb4, 0x81, 0x5b, 0xcf, 0x63, 0xd1, 0x80, 0x79, //0x0000e3e8 .quad 8755227902219092404 + 0x66, 0xc3, 0x51, 0x19, 0x36, 0x5e, 0x55, 0xa0, //0x0000e3f0 .quad -6893500068174642330 + 0x20, 0x62, 0x32, 0xc3, 0xbc, 0x05, 0xe1, 0xd7, //0x0000e3f8 .quad -2891023177508298208 + 0x40, 0x34, 0xa6, 0x9f, 0xc3, 0xb5, 0x6a, 0xc8, //0x0000e400 .quad -4005189066790915008 + 0xa8, 0xfa, 0xfe, 0xf3, 0x2b, 0x47, 0xd9, 0x8d, //0x0000e408 .quad -8225464990312760664 + 0x50, 0xc1, 0x8f, 0x87, 0x34, 0x63, 0x85, 0xfa, //0x0000e410 .quad -394800315061255856 + 0x52, 0xb9, 0xfe, 0xf0, 0xf6, 0x98, 0x4f, 0xb1, //0x0000e418 .quad -5670145219463562926 + 0xd2, 0xd8, 0xb9, 0xd4, 0x00, 0x5e, 0x93, 0x9c, //0x0000e420 .quad -7164279224554366766 + 0xd4, 0x33, 0x9f, 0x56, 0x9a, 0xbf, 0xd1, 0x6e, //0x0000e428 .quad 7985374283903742932 + 0x07, 0x4f, 0xe8, 0x09, 0x81, 0x35, 0xb8, 0xc3, //0x0000e430 .quad -4343663012265570553 + 0xc9, 0x00, 0x47, 0xec, 0x80, 0x2f, 0x86, 0x0a, //0x0000e438 .quad 758345818024902857 + 0xc8, 0x62, 0x62, 0x4c, 0xe1, 0x42, 0xa6, 0xf4, //0x0000e440 .quad -817892746904575288 + 0xfb, 0xc0, 0x58, 0x27, 0x61, 0xbb, 0x27, 0xcd, //0x0000e448 .quad -3663753745896259333 + 0xbd, 0x7d, 0xbd, 0xcf, 0xcc, 0xe9, 0xe7, 0x98, //0x0000e450 .quad -7428711994456441411 + 0x9d, 0x78, 0x97, 0xb8, 0x1c, 0xd5, 0x38, 0x80, //0x0000e458 .quad -9207375118826243939 + 0x2c, 0xdd, 0xac, 0x03, 0x40, 0xe4, 0x21, 0xbf, //0x0000e460 .quad -4674203974643163860 + 0xc4, 0x56, 0xbd, 0xe6, 0x63, 0x0a, 0x47, 0xe0, //0x0000e468 .quad -2285846861678029116 + 0x78, 0x14, 0x98, 0x04, 0x50, 0x5d, 0xea, 0xee, //0x0000e470 .quad -1231068949876566920 + 0x75, 0xac, 0x6c, 0xe0, 0xfc, 0xcc, 0x58, 0x18, //0x0000e478 .quad 1754377441329851509 + 0xcb, 0x0c, 0xdf, 0x02, 0x52, 0x7a, 0x52, 0x95, //0x0000e480 .quad -7686947121313936181 + 0xc9, 0xeb, 0x43, 0x0c, 0x1e, 0x80, 0x37, 0x0f, //0x0000e488 .quad 1096485900831157193 + 0xfd, 0xcf, 0x96, 0x83, 0xe6, 0x18, 0xa7, 0xba, //0x0000e490 .quad -4996997883215032323 + 0xbb, 0xe6, 0x54, 0x8f, 0x25, 0x60, 0x05, 0xd3, //0x0000e498 .quad -3241078642388441413 + 0xfd, 0x83, 0x7c, 0x24, 0x20, 0xdf, 0x50, 0xe9, //0x0000e4a0 .quad -1634561335591402499 + 0x6a, 0x20, 0x2a, 0xf3, 0x2e, 0xb8, 0xc6, 0x47, //0x0000e4a8 .quad 5172023733869224042 + 0x7e, 0xd2, 0xcd, 0x16, 0x74, 0x8b, 0xd2, 0x91, //0x0000e4b0 .quad -7939129862385708418 + 0x42, 0x54, 0xfa, 0x57, 0x1d, 0x33, 0xdc, 0x4c, //0x0000e4b8 .quad 5538357842881958978 + 0x1d, 0x47, 0x81, 0x1c, 0x51, 0x2e, 0x47, 0xb6, //0x0000e4c0 .quad -5312226309554747619 + 0x53, 0xe9, 0xf8, 0xad, 0xe4, 0x3f, 0x13, 0xe0, //0x0000e4c8 .quad -2300424733252327085 + 0xe5, 0x98, 0xa1, 0x63, 0xe5, 0xf9, 0xd8, 0xe3, //0x0000e4d0 .quad -2028596868516046619 + 0xa7, 0x23, 0x77, 0xd9, 0xdd, 0x0f, 0x18, 0x58, //0x0000e4d8 .quad 6347841120289366951 + 0x8f, 0xff, 0x44, 0x5e, 0x2f, 0x9c, 0x67, 0x8e, //0x0000e4e0 .quad -8185402070463610993 + 0x49, 0x76, 0xea, 0xa7, 0xea, 0x09, 0x0f, 0x57, //0x0000e4e8 .quad 6273243709394548297 + 0x73, 0x3f, 0xd6, 0x35, 0x3b, 0x83, 0x01, 0xb2, //0x0000e4f0 .quad -5620066569652125837 + 0xdb, 0x13, 0xe5, 0x51, 0x65, 0xcc, 0xd2, 0x2c, //0x0000e4f8 .quad 3229868618315797467 + 0x4f, 0xcf, 0x4b, 0x03, 0x0a, 0xe4, 0x81, 0xde, //0x0000e500 .quad -2413397193637769393 + 0xd2, 0x58, 0x5e, 0xa6, 0x7e, 0x7f, 0x07, 0xf8, //0x0000e508 .quad -574350245532641070 + 0x91, 0x61, 0x0f, 0x42, 0x86, 0x2e, 0x11, 0x8b, //0x0000e510 .quad -8425902273664687727 + 0x83, 0xf7, 0xfa, 0x27, 0xaf, 0xaf, 0x04, 0xfb, //0x0000e518 .quad -358968903457900669 + 0xf6, 0x39, 0x93, 0xd2, 0x27, 0x7a, 0xd5, 0xad, //0x0000e520 .quad -5920691823653471754 + 0x64, 0xb5, 0xf9, 0xf1, 0x9a, 0xdb, 0xc5, 0x79, //0x0000e528 .quad 8774660907532399972 + 0x74, 0x08, 0x38, 0xc7, 0xb1, 0xd8, 0x4a, 0xd9, //0x0000e530 .quad -2789178761139451788 + 0xbd, 0x22, 0x78, 0xae, 0x81, 0x52, 0x37, 0x18, //0x0000e538 .quad 1744954097560724157 + 0x48, 0x05, 0x83, 0x1c, 0x6f, 0xc7, 0xce, 0x87, //0x0000e540 .quad -8660765753353239224 + 0xb6, 0x15, 0x0b, 0x0d, 0x91, 0x93, 0x22, 0x8f, //0x0000e548 .quad -8132775725879323210 + 0x9a, 0xc6, 0xa3, 0xe3, 0x4a, 0x79, 0xc2, 0xa9, //0x0000e550 .quad -6214271173264161126 + 0x23, 0xdb, 0x4d, 0x50, 0x75, 0x38, 0xeb, 0xb2, //0x0000e558 .quad -5554283638921766109 + 0x41, 0xb8, 0x8c, 0x9c, 0x9d, 0x17, 0x33, 0xd4, //0x0000e560 .quad -3156152948152813503 + 0xec, 0x51, 0x61, 0xa4, 0x92, 0x06, 0xa6, 0x5f, //0x0000e568 .quad 6892203506629956076 + 0x28, 0xf3, 0xd7, 0x81, 0xc2, 0xee, 0x9f, 0x84, //0x0000e570 .quad -8890124620236590296 + 0x34, 0xd3, 0xbc, 0xa6, 0x1b, 0xc4, 0xc7, 0xdb, //0x0000e578 .quad -2609901835997359308 + 0xf3, 0xef, 0x4d, 0x22, 0x73, 0xea, 0xc7, 0xa5, //0x0000e580 .quad -6500969756868349965 + 0x01, 0x08, 0x6c, 0x90, 0x22, 0xb5, 0xb9, 0x12, //0x0000e588 .quad 1349308723430688769 + 0xef, 0x6b, 0xe1, 0xea, 0x0f, 0xe5, 0x39, 0xcf, //0x0000e590 .quad -3514526177658049553 + 0x01, 0x0a, 0x87, 0x34, 0x6b, 0x22, 0x68, 0xd7, //0x0000e598 .quad -2925050114139026943 + 0x75, 0xe3, 0xcc, 0xf2, 0x29, 0x2f, 0x84, 0x81, //0x0000e5a0 .quad -9114107888677362827 + 0x41, 0x66, 0xd4, 0x00, 0x83, 0x15, 0xa1, 0xe6, //0x0000e5a8 .quad -1828156321336891839 + 0x53, 0x1c, 0x80, 0x6f, 0xf4, 0x3a, 0xe5, 0xa1, //0x0000e5b0 .quad -6780948842419315629 + 0xd1, 0x7f, 0x09, 0xc1, 0xe3, 0x5a, 0x49, 0x60, //0x0000e5b8 .quad 6938176635183661009 + 0x68, 0x23, 0x60, 0x8b, 0xb1, 0x89, 0x5e, 0xca, //0x0000e5c0 .quad -3864500034596756632 + 0xc5, 0xdf, 0x4b, 0xb1, 0x9c, 0xb1, 0x5b, 0x38, //0x0000e5c8 .quad 4061034775552188357 + 0x42, 0x2c, 0x38, 0xee, 0x1d, 0x2c, 0xf6, 0xfc, //0x0000e5d0 .quad -218939024818557886 + 0xb6, 0xd7, 0x9e, 0xdd, 0x03, 0x9e, 0x72, 0x46, //0x0000e5d8 .quad 5076293469440235446 + 0xa9, 0x1b, 0xe3, 0xb4, 0x92, 0xdb, 0x19, 0x9e, //0x0000e5e0 .quad -7054365918152680535 + 0xd2, 0x46, 0x83, 0x6a, 0xc2, 0xa2, 0x07, 0x6c, //0x0000e5e8 .quad 7784369436827535058 + //0x0000e5f0 .p2align 4, 0x00 + //0x0000e5f0 _VecShiftShuffles + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, //0x0000e5f0 QUAD $0x0706050403020100; QUAD $0x0f0e0d0c0b0a0908 // .ascii 16, '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, //0x0000e600 QUAD $0x0807060504030201; QUAD $0xff0f0e0d0c0b0a09 // .ascii 16, '\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff' + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, //0x0000e610 QUAD $0x0908070605040302; QUAD $0xffff0f0e0d0c0b0a // .ascii 16, '\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff' + 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, //0x0000e620 QUAD $0x0a09080706050403; QUAD $0xffffff0f0e0d0c0b // .ascii 16, '\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff' + 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, //0x0000e630 QUAD $0x0b0a090807060504; QUAD $0xffffffff0f0e0d0c // .ascii 16, '\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff' + 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0000e640 QUAD $0x0c0b0a0908070605; QUAD $0xffffffffff0f0e0d // .ascii 16, '\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff' + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0000e650 QUAD $0x0d0c0b0a09080706; QUAD $0xffffffffffff0f0e // .ascii 16, '\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff' + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0000e660 QUAD $0x0e0d0c0b0a090807; QUAD $0xffffffffffffff0f // .ascii 16, '\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff' + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0000e670 QUAD $0x0f0e0d0c0b0a0908; QUAD $0xffffffffffffffff // .ascii 16, '\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff' + //0x0000e680 .p2align 4, 0x00 + //0x0000e680 __SingleQuoteTab + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e680 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, //0x0000e688 QUAD $0x000030303030755c // .asciz 8, '\\u0000\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e690 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x31, 0x00, 0x00, //0x0000e698 QUAD $0x000031303030755c // .asciz 8, '\\u0001\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e6a0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x32, 0x00, 0x00, //0x0000e6a8 QUAD $0x000032303030755c // .asciz 8, '\\u0002\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e6b0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x33, 0x00, 0x00, //0x0000e6b8 QUAD $0x000033303030755c // .asciz 8, '\\u0003\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e6c0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x34, 0x00, 0x00, //0x0000e6c8 QUAD $0x000034303030755c // .asciz 8, '\\u0004\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e6d0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x35, 0x00, 0x00, //0x0000e6d8 QUAD $0x000035303030755c // .asciz 8, '\\u0005\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e6e0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x36, 0x00, 0x00, //0x0000e6e8 QUAD $0x000036303030755c // .asciz 8, '\\u0006\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e6f0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x37, 0x00, 0x00, //0x0000e6f8 QUAD $0x000037303030755c // .asciz 8, '\\u0007\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e700 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x38, 0x00, 0x00, //0x0000e708 QUAD $0x000038303030755c // .asciz 8, '\\u0008\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e710 .quad 2 + 0x5c, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e718 QUAD $0x000000000000745c // .asciz 8, '\\t\x00\x00\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e720 .quad 2 + 0x5c, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e728 QUAD $0x0000000000006e5c // .asciz 8, '\\n\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e730 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x62, 0x00, 0x00, //0x0000e738 QUAD $0x000062303030755c // .asciz 8, '\\u000b\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e740 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x63, 0x00, 0x00, //0x0000e748 QUAD $0x000063303030755c // .asciz 8, '\\u000c\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e750 .quad 2 + 0x5c, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e758 QUAD $0x000000000000725c // .asciz 8, '\\r\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e760 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x65, 0x00, 0x00, //0x0000e768 QUAD $0x000065303030755c // .asciz 8, '\\u000e\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e770 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x66, 0x00, 0x00, //0x0000e778 QUAD $0x000066303030755c // .asciz 8, '\\u000f\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e780 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x30, 0x00, 0x00, //0x0000e788 QUAD $0x000030313030755c // .asciz 8, '\\u0010\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e790 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x31, 0x00, 0x00, //0x0000e798 QUAD $0x000031313030755c // .asciz 8, '\\u0011\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e7a0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x32, 0x00, 0x00, //0x0000e7a8 QUAD $0x000032313030755c // .asciz 8, '\\u0012\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e7b0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x33, 0x00, 0x00, //0x0000e7b8 QUAD $0x000033313030755c // .asciz 8, '\\u0013\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e7c0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x34, 0x00, 0x00, //0x0000e7c8 QUAD $0x000034313030755c // .asciz 8, '\\u0014\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e7d0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x35, 0x00, 0x00, //0x0000e7d8 QUAD $0x000035313030755c // .asciz 8, '\\u0015\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e7e0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x36, 0x00, 0x00, //0x0000e7e8 QUAD $0x000036313030755c // .asciz 8, '\\u0016\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e7f0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x37, 0x00, 0x00, //0x0000e7f8 QUAD $0x000037313030755c // .asciz 8, '\\u0017\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e800 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x38, 0x00, 0x00, //0x0000e808 QUAD $0x000038313030755c // .asciz 8, '\\u0018\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e810 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x39, 0x00, 0x00, //0x0000e818 QUAD $0x000039313030755c // .asciz 8, '\\u0019\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e820 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x61, 0x00, 0x00, //0x0000e828 QUAD $0x000061313030755c // .asciz 8, '\\u001a\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e830 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x00, 0x00, //0x0000e838 QUAD $0x000062313030755c // .asciz 8, '\\u001b\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e840 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x63, 0x00, 0x00, //0x0000e848 QUAD $0x000063313030755c // .asciz 8, '\\u001c\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e850 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x64, 0x00, 0x00, //0x0000e858 QUAD $0x000064313030755c // .asciz 8, '\\u001d\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e860 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x65, 0x00, 0x00, //0x0000e868 QUAD $0x000065313030755c // .asciz 8, '\\u001e\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e870 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x66, 0x00, 0x00, //0x0000e878 QUAD $0x000066313030755c // .asciz 8, '\\u001f\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e880 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e890 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e8a0 .quad 2 + 0x5c, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e8a8 QUAD $0x000000000000225c // .asciz 8, '\\"\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e8b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e8c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e8d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e8e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e8f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e900 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e910 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e920 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e930 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e940 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e950 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e960 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e970 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e980 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e990 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eaa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eab0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eac0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ead0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eae0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eaf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eba0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ebb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ebc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ebd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ebe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ebf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec40 .quad 2 + 0x5c, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec48 QUAD $0x0000000000005c5c // .asciz 8, '\\\\\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eca0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ecb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ecc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ecd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ece0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ecf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eda0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000edb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000edc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000edd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ede0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000edf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eea0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eeb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eec0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eed0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eee0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eef0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000efa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000efb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000efc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000efd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000efe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eff0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f000 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f010 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f020 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f030 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f040 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f050 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f060 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f070 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f080 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f090 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f0a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f0b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f0c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f0d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f0e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f0f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f100 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f110 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f120 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f130 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f140 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f150 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f160 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f170 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f180 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f190 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f1a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f1b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f1c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f1d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f1e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f1f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f200 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f210 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f220 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f230 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f240 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f250 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f260 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f270 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f280 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f290 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f2a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f2b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f2c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f2d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f2e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f2f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f300 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f310 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f320 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f330 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f340 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f350 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f360 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f370 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f380 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f390 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f400 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f410 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f420 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f430 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f440 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f450 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f460 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f470 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f480 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f490 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f500 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f510 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f520 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f530 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f540 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f550 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f560 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f570 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f580 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f590 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f600 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f610 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f620 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f630 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f640 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f650 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f660 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f670 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x0000f680 .p2align 4, 0x00 + //0x0000f680 __DoubleQuoteTab + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f680 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x30, 0x00, //0x0000f688 QUAD $0x0030303030755c5c // .asciz 8, '\\\\u0000\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f690 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x31, 0x00, //0x0000f698 QUAD $0x0031303030755c5c // .asciz 8, '\\\\u0001\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6a0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x32, 0x00, //0x0000f6a8 QUAD $0x0032303030755c5c // .asciz 8, '\\\\u0002\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6b0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x33, 0x00, //0x0000f6b8 QUAD $0x0033303030755c5c // .asciz 8, '\\\\u0003\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6c0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x34, 0x00, //0x0000f6c8 QUAD $0x0034303030755c5c // .asciz 8, '\\\\u0004\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6d0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x35, 0x00, //0x0000f6d8 QUAD $0x0035303030755c5c // .asciz 8, '\\\\u0005\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6e0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x36, 0x00, //0x0000f6e8 QUAD $0x0036303030755c5c // .asciz 8, '\\\\u0006\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6f0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x37, 0x00, //0x0000f6f8 QUAD $0x0037303030755c5c // .asciz 8, '\\\\u0007\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f700 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x38, 0x00, //0x0000f708 QUAD $0x0038303030755c5c // .asciz 8, '\\\\u0008\x00' + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f710 .quad 3 + 0x5c, 0x5c, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f718 QUAD $0x0000000000745c5c // .asciz 8, '\\\\t\x00\x00\x00\x00\x00' + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f720 .quad 3 + 0x5c, 0x5c, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f728 QUAD $0x00000000006e5c5c // .asciz 8, '\\\\n\x00\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f730 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x62, 0x00, //0x0000f738 QUAD $0x0062303030755c5c // .asciz 8, '\\\\u000b\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f740 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x63, 0x00, //0x0000f748 QUAD $0x0063303030755c5c // .asciz 8, '\\\\u000c\x00' + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f750 .quad 3 + 0x5c, 0x5c, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f758 QUAD $0x0000000000725c5c // .asciz 8, '\\\\r\x00\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f760 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x65, 0x00, //0x0000f768 QUAD $0x0065303030755c5c // .asciz 8, '\\\\u000e\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f770 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x66, 0x00, //0x0000f778 QUAD $0x0066303030755c5c // .asciz 8, '\\\\u000f\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f780 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x30, 0x00, //0x0000f788 QUAD $0x0030313030755c5c // .asciz 8, '\\\\u0010\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f790 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x31, 0x00, //0x0000f798 QUAD $0x0031313030755c5c // .asciz 8, '\\\\u0011\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7a0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x32, 0x00, //0x0000f7a8 QUAD $0x0032313030755c5c // .asciz 8, '\\\\u0012\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7b0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x33, 0x00, //0x0000f7b8 QUAD $0x0033313030755c5c // .asciz 8, '\\\\u0013\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7c0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x34, 0x00, //0x0000f7c8 QUAD $0x0034313030755c5c // .asciz 8, '\\\\u0014\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7d0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x35, 0x00, //0x0000f7d8 QUAD $0x0035313030755c5c // .asciz 8, '\\\\u0015\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7e0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x36, 0x00, //0x0000f7e8 QUAD $0x0036313030755c5c // .asciz 8, '\\\\u0016\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7f0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x37, 0x00, //0x0000f7f8 QUAD $0x0037313030755c5c // .asciz 8, '\\\\u0017\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f800 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x38, 0x00, //0x0000f808 QUAD $0x0038313030755c5c // .asciz 8, '\\\\u0018\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f810 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x39, 0x00, //0x0000f818 QUAD $0x0039313030755c5c // .asciz 8, '\\\\u0019\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f820 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x61, 0x00, //0x0000f828 QUAD $0x0061313030755c5c // .asciz 8, '\\\\u001a\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f830 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x00, //0x0000f838 QUAD $0x0062313030755c5c // .asciz 8, '\\\\u001b\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f840 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x63, 0x00, //0x0000f848 QUAD $0x0063313030755c5c // .asciz 8, '\\\\u001c\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f850 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x64, 0x00, //0x0000f858 QUAD $0x0064313030755c5c // .asciz 8, '\\\\u001d\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f860 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x65, 0x00, //0x0000f868 QUAD $0x0065313030755c5c // .asciz 8, '\\\\u001e\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f870 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x66, 0x00, //0x0000f878 QUAD $0x0066313030755c5c // .asciz 8, '\\\\u001f\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f880 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f890 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8a0 .quad 4 + 0x5c, 0x5c, 0x5c, 0x22, 0x00, 0x00, 0x00, 0x00, //0x0000f8a8 QUAD $0x00000000225c5c5c // .asciz 8, '\\\\\\"\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f900 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f910 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f920 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f930 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f940 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f950 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f960 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f970 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f980 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f990 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000faa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fab0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fac0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fad0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fae0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000faf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fba0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc40 .quad 4 + 0x5c, 0x5c, 0x5c, 0x5c, 0x00, 0x00, 0x00, 0x00, //0x0000fc48 QUAD $0x000000005c5c5c5c // .asciz 8, '\\\\\\\\\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fca0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fcb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fcc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fcd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fce0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fcf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fda0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fdb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fdc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fdd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fde0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fdf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fea0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000feb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fec0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fed0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fee0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fef0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fff0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010000 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010010 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010020 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010030 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010040 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010050 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010060 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010070 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010080 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010090 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010100 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010110 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010120 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010130 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010140 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010150 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010160 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010170 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010180 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010190 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010200 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010210 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010220 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010230 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010240 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010250 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010260 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010270 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010280 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010290 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010300 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010310 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010320 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010330 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010340 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010350 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010360 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010370 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010380 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010390 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010400 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010410 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010420 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010430 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010440 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010450 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010460 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010470 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010480 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010490 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010500 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010510 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010520 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010530 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010540 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010550 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010560 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010570 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010580 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010590 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010600 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010610 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010620 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010630 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010640 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010650 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010660 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010670 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x00010680 .p2align 4, 0x00 + //0x00010680 __EscTab + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00010680 QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .ascii 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00010690 QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .ascii 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106a0 QUAD $0x0000000000010000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, //0x000106d0 QUAD $0x0000000000000000; LONG $0x00000000; BYTE $0x01 // .ascii 13, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106dd QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106ed QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106fd QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001070d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001071d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001072d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001073d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001074d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001075d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001076d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, //0x0001077d WORD $0x0000; BYTE $0x00 // .space 3, '\x00\x00\x00' + //0x00010780 .p2align 4, 0x00 + //0x00010780 __UnquoteTab + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010780 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010790 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, //0x000107a0 QUAD $0x0000000000220000; QUAD $0x2f00000000000000 // .ascii 16, '\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, //0x000107d0 QUAD $0x0000000000000000; QUAD $0x0000005c00000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00' + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, //0x000107e0 QUAD $0x000c000000080000; QUAD $0x000a000000000000 // .ascii 16, '\x00\x00\x08\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\n\x00' + 0x00, 0x00, 0x0d, 0x00, 0x09, 0xff, //0x000107f0 LONG $0x000d0000; WORD $0xff09 // .ascii 6, '\x00\x00\r\x00\t\xff' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107f6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010806 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010816 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010826 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010836 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010846 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010856 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010866 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010876 QUAD $0x0000000000000000; WORD $0x0000 // .space 10, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x00010880 .p2align 4, 0x00 + //0x00010880 __HtmlQuoteTab + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010880 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010890 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010900 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010910 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010920 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010930 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010940 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010950 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010960 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010970 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010980 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010990 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010aa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ab0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ac0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ad0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ae0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x32, 0x36, 0x00, 0x00, //0x00010ae8 QUAD $0x000036323030755c // .asciz 8, '\\u0026\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010af0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ba0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010bb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010bc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010bd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010be0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010bf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c40 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x33, 0x63, 0x00, 0x00, //0x00010c48 QUAD $0x000063333030755c // .asciz 8, '\\u003c\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c60 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x33, 0x65, 0x00, 0x00, //0x00010c68 QUAD $0x000065333030755c // .asciz 8, '\\u003e\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ca0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010cb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010cc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010cd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ce0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010cf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010da0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010db0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010dc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010dd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010de0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010df0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ea0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010eb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ec0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ed0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ee0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ef0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ff0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011000 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011010 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011020 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011030 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011040 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011050 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011060 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011070 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011080 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011090 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011100 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011110 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011120 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011130 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011140 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011150 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011160 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011170 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011180 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011190 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011200 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011210 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011220 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011230 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011240 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011250 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011260 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011270 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011280 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011290 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011300 .quad 6 + 0x5c, 0x75, 0x32, 0x30, 0x32, 0x38, 0x00, 0x00, //0x00011308 QUAD $0x000038323032755c // .asciz 8, '\\u2028\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011310 .quad 6 + 0x5c, 0x75, 0x32, 0x30, 0x32, 0x39, 0x00, 0x00, //0x00011318 QUAD $0x000039323032755c // .asciz 8, '\\u2029\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011320 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011330 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011340 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011350 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011360 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011370 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011380 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011390 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011400 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011410 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011420 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011430 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011440 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011450 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011460 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011470 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011480 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011490 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011500 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011510 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011520 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011530 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011540 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011550 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011560 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011570 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011580 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011590 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011600 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011610 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011620 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011630 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011640 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011650 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011660 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011670 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011680 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011690 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011700 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011710 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011720 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011730 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011740 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011750 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011760 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011770 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011780 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011790 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011800 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011810 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011820 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011830 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011840 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011850 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011860 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011870 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x00011880 .p2align 4, 0x00 + //0x00011880 _LSHIFT_TAB + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011880 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011890 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118e0 QUAD $0x0000000000000000 // .space 8, '\x00\x00\x00\x00\x00\x00\x00\x00' + 0x01, 0x00, 0x00, 0x00, //0x000118e8 .long 1 + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118ec QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118fc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001190c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001191c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001192c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001193c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001194c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x01, 0x00, 0x00, 0x00, //0x00011950 .long 1 + 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011954 QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011964 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011974 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011984 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011994 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119a4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000119b4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x01, 0x00, 0x00, 0x00, //0x000119b8 .long 1 + 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119bc QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119ec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119fc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a0c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011a1c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, //0x00011a20 .long 2 + 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a24 QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a34 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a44 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a54 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a64 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a74 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011a84 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, //0x00011a88 .long 2 + 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a8c QUAD $0x0000000035323133; QUAD $0x0000000000000000 // .asciz 16, '3125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a9c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011aac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011abc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011acc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011adc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011aec LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, //0x00011af0 .long 2 + 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011af4 QUAD $0x0000003532363531; QUAD $0x0000000000000000 // .asciz 16, '15625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b04 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b14 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b24 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b34 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b44 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011b54 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x03, 0x00, 0x00, 0x00, //0x00011b58 .long 3 + 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b5c QUAD $0x0000003532313837; QUAD $0x0000000000000000 // .asciz 16, '78125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b6c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b7c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b8c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b9c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011bac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011bbc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x03, 0x00, 0x00, 0x00, //0x00011bc0 .long 3 + 0x33, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011bc4 QUAD $0x0000353236303933; QUAD $0x0000000000000000 // .asciz 16, '390625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011bd4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011be4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011bf4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c04 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c14 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011c24 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x03, 0x00, 0x00, 0x00, //0x00011c28 .long 3 + 0x31, 0x39, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c2c QUAD $0x0035323133353931; QUAD $0x0000000000000000 // .asciz 16, '1953125\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c4c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c5c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c6c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c7c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011c8c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, //0x00011c90 .long 4 + 0x39, 0x37, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c94 QUAD $0x0035323635363739; QUAD $0x0000000000000000 // .asciz 16, '9765625\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ca4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011cb4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011cc4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011cd4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ce4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011cf4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, //0x00011cf8 .long 4 + 0x34, 0x38, 0x38, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011cfc QUAD $0x3532313832383834; QUAD $0x0000000000000000 // .asciz 16, '48828125\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d0c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d1c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d2c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d4c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011d5c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, //0x00011d60 .long 4 + 0x32, 0x34, 0x34, 0x31, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d64 QUAD $0x3236303431343432; QUAD $0x0000000000000035 // .asciz 16, '244140625\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d74 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d84 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d94 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011da4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011db4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011dc4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, //0x00011dc8 .long 4 + 0x31, 0x32, 0x32, 0x30, 0x37, 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011dcc QUAD $0x3133303730323231; QUAD $0x0000000000003532 // .asciz 16, '1220703125\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ddc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011dec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011dfc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e0c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e1c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011e2c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x05, 0x00, 0x00, 0x00, //0x00011e30 .long 5 + 0x36, 0x31, 0x30, 0x33, 0x35, 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e34 QUAD $0x3635313533303136; QUAD $0x0000000000003532 // .asciz 16, '6103515625\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e44 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e54 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e64 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e74 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e84 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011e94 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x05, 0x00, 0x00, 0x00, //0x00011e98 .long 5 + 0x33, 0x30, 0x35, 0x31, 0x37, 0x35, 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e9c QUAD $0x3837353731353033; QUAD $0x0000000000353231 // .asciz 16, '30517578125\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011eac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ebc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ecc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011edc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011eec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011efc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x05, 0x00, 0x00, 0x00, //0x00011f00 .long 5 + 0x31, 0x35, 0x32, 0x35, 0x38, 0x37, 0x38, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, //0x00011f04 QUAD $0x3938373835323531; QUAD $0x0000000035323630 // .asciz 16, '152587890625\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f14 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f24 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f34 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f44 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f54 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011f64 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, //0x00011f68 .long 6 + 0x37, 0x36, 0x32, 0x39, 0x33, 0x39, 0x34, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, //0x00011f6c QUAD $0x3534393339323637; QUAD $0x0000000035323133 // .asciz 16, '762939453125\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f7c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f8c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f9c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011fac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011fbc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011fcc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, //0x00011fd0 .long 6 + 0x33, 0x38, 0x31, 0x34, 0x36, 0x39, 0x37, 0x32, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, //0x00011fd4 QUAD $0x3237393634313833; QUAD $0x0000003532363536 // .asciz 16, '3814697265625\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011fe4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ff4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012004 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012014 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012024 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012034 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, //0x00012038 .long 6 + 0x31, 0x39, 0x30, 0x37, 0x33, 0x34, 0x38, 0x36, 0x33, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, //0x0001203c QUAD $0x3638343337303931; QUAD $0x0000353231383233 // .asciz 16, '19073486328125\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001204c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001205c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001206c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001207c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001208c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001209c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, //0x000120a0 .long 7 + 0x39, 0x35, 0x33, 0x36, 0x37, 0x34, 0x33, 0x31, 0x36, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, //0x000120a4 QUAD $0x3133343736333539; QUAD $0x0000353236303436 // .asciz 16, '95367431640625\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120c4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120d4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012104 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, //0x00012108 .long 7 + 0x34, 0x37, 0x36, 0x38, 0x33, 0x37, 0x31, 0x35, 0x38, 0x32, 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, //0x0001210c QUAD $0x3531373338363734; QUAD $0x0035323133303238 // .asciz 16, '476837158203125\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001211c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001212c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001213c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001214c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001215c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001216c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, //0x00012170 .long 7 + 0x32, 0x33, 0x38, 0x34, 0x31, 0x38, 0x35, 0x37, 0x39, 0x31, 0x30, 0x31, 0x35, 0x36, 0x32, 0x35, //0x00012174 QUAD $0x3735383134383332; QUAD $0x3532363531303139 // .asciz 16, '2384185791015625' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012184 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012194 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121a4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121c4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000121d4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, //0x000121d8 .long 7 + 0x31, 0x31, 0x39, 0x32, 0x30, 0x39, 0x32, 0x38, 0x39, 0x35, 0x35, 0x30, 0x37, 0x38, 0x31, 0x32, //0x000121dc QUAD $0x3832393032393131; QUAD $0x3231383730353539 // .asciz 16, '1192092895507812' + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121ec QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121fc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001220c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001221c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001222c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001223c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x08, 0x00, 0x00, 0x00, //0x00012240 .long 8 + 0x35, 0x39, 0x36, 0x30, 0x34, 0x36, 0x34, 0x34, 0x37, 0x37, 0x35, 0x33, 0x39, 0x30, 0x36, 0x32, //0x00012244 QUAD $0x3434363430363935; QUAD $0x3236303933353737 // .asciz 16, '5960464477539062' + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012254 QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012264 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012274 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012284 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012294 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000122a4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x08, 0x00, 0x00, 0x00, //0x000122a8 .long 8 + 0x32, 0x39, 0x38, 0x30, 0x32, 0x33, 0x32, 0x32, 0x33, 0x38, 0x37, 0x36, 0x39, 0x35, 0x33, 0x31, //0x000122ac QUAD $0x3232333230383932; QUAD $0x3133353936373833 // .asciz 16, '2980232238769531' + 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122bc QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122ec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122fc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001230c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x08, 0x00, 0x00, 0x00, //0x00012310 .long 8 + 0x31, 0x34, 0x39, 0x30, 0x31, 0x31, 0x36, 0x31, 0x31, 0x39, 0x33, 0x38, 0x34, 0x37, 0x36, 0x35, //0x00012314 QUAD $0x3136313130393431; QUAD $0x3536373438333931 // .asciz 16, '1490116119384765' + 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012324 QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012334 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012344 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012354 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012364 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012374 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x09, 0x00, 0x00, 0x00, //0x00012378 .long 9 + 0x37, 0x34, 0x35, 0x30, 0x35, 0x38, 0x30, 0x35, 0x39, 0x36, 0x39, 0x32, 0x33, 0x38, 0x32, 0x38, //0x0001237c QUAD $0x3530383530353437; QUAD $0x3832383332393639 // .asciz 16, '7450580596923828' + 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001238c QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001239c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000123dc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x09, 0x00, 0x00, 0x00, //0x000123e0 .long 9 + 0x33, 0x37, 0x32, 0x35, 0x32, 0x39, 0x30, 0x32, 0x39, 0x38, 0x34, 0x36, 0x31, 0x39, 0x31, 0x34, //0x000123e4 QUAD $0x3230393235323733; QUAD $0x3431393136343839 // .asciz 16, '3725290298461914' + 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123f4 QUAD $0x0000000035323630; QUAD $0x0000000000000000 // .asciz 16, '0625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012404 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012414 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012424 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012434 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012444 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x09, 0x00, 0x00, 0x00, //0x00012448 .long 9 + 0x31, 0x38, 0x36, 0x32, 0x36, 0x34, 0x35, 0x31, 0x34, 0x39, 0x32, 0x33, 0x30, 0x39, 0x35, 0x37, //0x0001244c QUAD $0x3135343632363831; QUAD $0x3735393033323934 // .asciz 16, '1862645149230957' + 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001245c QUAD $0x0000003532313330; QUAD $0x0000000000000000 // .asciz 16, '03125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001246c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001247c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001248c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001249c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000124ac LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0a, 0x00, 0x00, 0x00, //0x000124b0 .long 10 + 0x39, 0x33, 0x31, 0x33, 0x32, 0x32, 0x35, 0x37, 0x34, 0x36, 0x31, 0x35, 0x34, 0x37, 0x38, 0x35, //0x000124b4 QUAD $0x3735323233313339; QUAD $0x3538373435313634 // .asciz 16, '9313225746154785' + 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124c4 QUAD $0x0000003532363531; QUAD $0x0000000000000000 // .asciz 16, '15625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124d4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012504 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012514 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0a, 0x00, 0x00, 0x00, //0x00012518 .long 10 + 0x34, 0x36, 0x35, 0x36, 0x36, 0x31, 0x32, 0x38, 0x37, 0x33, 0x30, 0x37, 0x37, 0x33, 0x39, 0x32, //0x0001251c QUAD $0x3832313636353634; QUAD $0x3239333737303337 // .asciz 16, '4656612873077392' + 0x35, 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001252c QUAD $0x0000353231383735; QUAD $0x0000000000000000 // .asciz 16, '578125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001253c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001254c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001255c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001256c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001257c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0a, 0x00, 0x00, 0x00, //0x00012580 .long 10 + 0x32, 0x33, 0x32, 0x38, 0x33, 0x30, 0x36, 0x34, 0x33, 0x36, 0x35, 0x33, 0x38, 0x36, 0x39, 0x36, //0x00012584 QUAD $0x3436303338323332; QUAD $0x3639363833353633 // .asciz 16, '2328306436538696' + 0x32, 0x38, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012594 QUAD $0x0035323630393832; QUAD $0x0000000000000000 // .asciz 16, '2890625\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125a4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125c4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125d4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000125e4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0a, 0x00, 0x00, 0x00, //0x000125e8 .long 10 + 0x31, 0x31, 0x36, 0x34, 0x31, 0x35, 0x33, 0x32, 0x31, 0x38, 0x32, 0x36, 0x39, 0x33, 0x34, 0x38, //0x000125ec QUAD $0x3233353134363131; QUAD $0x3834333936323831 // .asciz 16, '1164153218269348' + 0x31, 0x34, 0x34, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125fc QUAD $0x3532313335343431; QUAD $0x0000000000000000 // .asciz 16, '14453125\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001260c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001261c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001262c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001263c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001264c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0b, 0x00, 0x00, 0x00, //0x00012650 .long 11 + 0x35, 0x38, 0x32, 0x30, 0x37, 0x36, 0x36, 0x30, 0x39, 0x31, 0x33, 0x34, 0x36, 0x37, 0x34, 0x30, //0x00012654 QUAD $0x3036363730323835; QUAD $0x3034373634333139 // .asciz 16, '5820766091346740' + 0x37, 0x32, 0x32, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012664 QUAD $0x3532363536323237; QUAD $0x0000000000000000 // .asciz 16, '72265625\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012674 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012684 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012694 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126a4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000126b4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0b, 0x00, 0x00, 0x00, //0x000126b8 .long 11 + 0x32, 0x39, 0x31, 0x30, 0x33, 0x38, 0x33, 0x30, 0x34, 0x35, 0x36, 0x37, 0x33, 0x33, 0x37, 0x30, //0x000126bc QUAD $0x3033383330313932; QUAD $0x3037333337363534 // .asciz 16, '2910383045673370' + 0x33, 0x36, 0x31, 0x33, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126cc QUAD $0x3231383233313633; QUAD $0x0000000000000035 // .asciz 16, '361328125\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126ec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126fc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001270c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001271c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0b, 0x00, 0x00, 0x00, //0x00012720 .long 11 + 0x31, 0x34, 0x35, 0x35, 0x31, 0x39, 0x31, 0x35, 0x32, 0x32, 0x38, 0x33, 0x36, 0x36, 0x38, 0x35, //0x00012724 QUAD $0x3531393135353431; QUAD $0x3538363633383232 // .asciz 16, '1455191522836685' + 0x31, 0x38, 0x30, 0x36, 0x36, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012734 QUAD $0x3630343636303831; QUAD $0x0000000000003532 // .asciz 16, '1806640625\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012744 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012754 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012764 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012774 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012784 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0c, 0x00, 0x00, 0x00, //0x00012788 .long 12 + 0x37, 0x32, 0x37, 0x35, 0x39, 0x35, 0x37, 0x36, 0x31, 0x34, 0x31, 0x38, 0x33, 0x34, 0x32, 0x35, //0x0001278c QUAD $0x3637353935373237; QUAD $0x3532343338313431 // .asciz 16, '7275957614183425' + 0x39, 0x30, 0x33, 0x33, 0x32, 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001279c QUAD $0x3133303233333039; QUAD $0x0000000000003532 // .asciz 16, '9033203125\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000127ec LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0c, 0x00, 0x00, 0x00, //0x000127f0 .long 12 + 0x33, 0x36, 0x33, 0x37, 0x39, 0x37, 0x38, 0x38, 0x30, 0x37, 0x30, 0x39, 0x31, 0x37, 0x31, 0x32, //0x000127f4 QUAD $0x3838373937333633; QUAD $0x3231373139303730 // .asciz 16, '3637978807091712' + 0x39, 0x35, 0x31, 0x36, 0x36, 0x30, 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012804 QUAD $0x3531303636313539; QUAD $0x0000000000353236 // .asciz 16, '95166015625\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012814 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012824 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012834 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012844 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012854 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0c, 0x00, 0x00, 0x00, //0x00012858 .long 12 + 0x31, 0x38, 0x31, 0x38, 0x39, 0x38, 0x39, 0x34, 0x30, 0x33, 0x35, 0x34, 0x35, 0x38, 0x35, 0x36, //0x0001285c QUAD $0x3439383938313831; QUAD $0x3635383534353330 // .asciz 16, '1818989403545856' + 0x34, 0x37, 0x35, 0x38, 0x33, 0x30, 0x30, 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, //0x0001286c QUAD $0x3730303338353734; QUAD $0x0000000035323138 // .asciz 16, '475830078125\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001287c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001288c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001289c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000128ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000128bc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0d, 0x00, 0x00, 0x00, //0x000128c0 .long 13 + 0x39, 0x30, 0x39, 0x34, 0x39, 0x34, 0x37, 0x30, 0x31, 0x37, 0x37, 0x32, 0x39, 0x32, 0x38, 0x32, //0x000128c4 QUAD $0x3037343934393039; QUAD $0x3238323932373731 // .asciz 16, '9094947017729282' + 0x33, 0x37, 0x39, 0x31, 0x35, 0x30, 0x33, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, //0x000128d4 QUAD $0x3933303531393733; QUAD $0x0000000035323630 // .asciz 16, '379150390625\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000128e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000128f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012904 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012914 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012924 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0d, 0x00, 0x00, 0x00, //0x00012928 .long 13 + 0x34, 0x35, 0x34, 0x37, 0x34, 0x37, 0x33, 0x35, 0x30, 0x38, 0x38, 0x36, 0x34, 0x36, 0x34, 0x31, //0x0001292c QUAD $0x3533373437343534; QUAD $0x3134363436383830 // .asciz 16, '4547473508864641' + 0x31, 0x38, 0x39, 0x35, 0x37, 0x35, 0x31, 0x39, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, //0x0001293c QUAD $0x3931353735393831; QUAD $0x0000003532313335 // .asciz 16, '1895751953125\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001294c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001295c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001296c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001297c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001298c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0d, 0x00, 0x00, 0x00, //0x00012990 .long 13 + 0x32, 0x32, 0x37, 0x33, 0x37, 0x33, 0x36, 0x37, 0x35, 0x34, 0x34, 0x33, 0x32, 0x33, 0x32, 0x30, //0x00012994 QUAD $0x3736333733373232; QUAD $0x3032333233343435 // .asciz 16, '2273736754432320' + 0x35, 0x39, 0x34, 0x37, 0x38, 0x37, 0x35, 0x39, 0x37, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, //0x000129a4 QUAD $0x3935373837343935; QUAD $0x0000353236353637 // .asciz 16, '59478759765625\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129c4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129d4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000129f4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0d, 0x00, 0x00, 0x00, //0x000129f8 .long 13 + 0x31, 0x31, 0x33, 0x36, 0x38, 0x36, 0x38, 0x33, 0x37, 0x37, 0x32, 0x31, 0x36, 0x31, 0x36, 0x30, //0x000129fc QUAD $0x3338363836333131; QUAD $0x3036313631323737 // .asciz 16, '1136868377216160' + 0x32, 0x39, 0x37, 0x33, 0x39, 0x33, 0x37, 0x39, 0x38, 0x38, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, //0x00012a0c QUAD $0x3937333933373932; QUAD $0x0035323138323838 // .asciz 16, '297393798828125\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a1c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a2c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a4c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012a5c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0e, 0x00, 0x00, 0x00, //0x00012a60 .long 14 + 0x35, 0x36, 0x38, 0x34, 0x33, 0x34, 0x31, 0x38, 0x38, 0x36, 0x30, 0x38, 0x30, 0x38, 0x30, 0x31, //0x00012a64 QUAD $0x3831343334383635; QUAD $0x3130383038303638 // .asciz 16, '5684341886080801' + 0x34, 0x38, 0x36, 0x39, 0x36, 0x38, 0x39, 0x39, 0x34, 0x31, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, //0x00012a74 QUAD $0x3939383639363834; QUAD $0x0035323630343134 // .asciz 16, '486968994140625\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a84 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a94 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012aa4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ab4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012ac4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0e, 0x00, 0x00, 0x00, //0x00012ac8 .long 14 + 0x32, 0x38, 0x34, 0x32, 0x31, 0x37, 0x30, 0x39, 0x34, 0x33, 0x30, 0x34, 0x30, 0x34, 0x30, 0x30, //0x00012acc QUAD $0x3930373132343832; QUAD $0x3030343034303334 // .asciz 16, '2842170943040400' + 0x37, 0x34, 0x33, 0x34, 0x38, 0x34, 0x34, 0x39, 0x37, 0x30, 0x37, 0x30, 0x33, 0x31, 0x32, 0x35, //0x00012adc QUAD $0x3934343834333437; QUAD $0x3532313330373037 // .asciz 16, '7434844970703125' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012aec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012afc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b0c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b1c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012b2c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0e, 0x00, 0x00, 0x00, //0x00012b30 .long 14 + 0x31, 0x34, 0x32, 0x31, 0x30, 0x38, 0x35, 0x34, 0x37, 0x31, 0x35, 0x32, 0x30, 0x32, 0x30, 0x30, //0x00012b34 QUAD $0x3435383031323431; QUAD $0x3030323032353137 // .asciz 16, '1421085471520200' + 0x33, 0x37, 0x31, 0x37, 0x34, 0x32, 0x32, 0x34, 0x38, 0x35, 0x33, 0x35, 0x31, 0x35, 0x36, 0x32, //0x00012b44 QUAD $0x3432323437313733; QUAD $0x3236353135333538 // .asciz 16, '3717422485351562' + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b54 QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b64 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b74 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b84 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012b94 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0f, 0x00, 0x00, 0x00, //0x00012b98 .long 15 + 0x37, 0x31, 0x30, 0x35, 0x34, 0x32, 0x37, 0x33, 0x35, 0x37, 0x36, 0x30, 0x31, 0x30, 0x30, 0x31, //0x00012b9c QUAD $0x3337323435303137; QUAD $0x3130303130363735 // .asciz 16, '7105427357601001' + 0x38, 0x35, 0x38, 0x37, 0x31, 0x31, 0x32, 0x34, 0x32, 0x36, 0x37, 0x35, 0x37, 0x38, 0x31, 0x32, //0x00012bac QUAD $0x3432313137383538; QUAD $0x3231383735373632 // .asciz 16, '8587112426757812' + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bbc QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bcc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bdc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012bfc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0f, 0x00, 0x00, 0x00, //0x00012c00 .long 15 + 0x33, 0x35, 0x35, 0x32, 0x37, 0x31, 0x33, 0x36, 0x37, 0x38, 0x38, 0x30, 0x30, 0x35, 0x30, 0x30, //0x00012c04 QUAD $0x3633313732353533; QUAD $0x3030353030383837 // .asciz 16, '3552713678800500' + 0x39, 0x32, 0x39, 0x33, 0x35, 0x35, 0x36, 0x32, 0x31, 0x33, 0x33, 0x37, 0x38, 0x39, 0x30, 0x36, //0x00012c14 QUAD $0x3236353533393239; QUAD $0x3630393837333331 // .asciz 16, '9293556213378906' + 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c24 QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c34 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c44 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c54 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012c64 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0f, 0x00, 0x00, 0x00, //0x00012c68 .long 15 + 0x31, 0x37, 0x37, 0x36, 0x33, 0x35, 0x36, 0x38, 0x33, 0x39, 0x34, 0x30, 0x30, 0x32, 0x35, 0x30, //0x00012c6c QUAD $0x3836353336373731; QUAD $0x3035323030343933 // .asciz 16, '1776356839400250' + 0x34, 0x36, 0x34, 0x36, 0x37, 0x37, 0x38, 0x31, 0x30, 0x36, 0x36, 0x38, 0x39, 0x34, 0x35, 0x33, //0x00012c7c QUAD $0x3138373736343634; QUAD $0x3335343938363630 // .asciz 16, '4646778106689453' + 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c8c QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c9c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012cac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012cbc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012ccc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x10, 0x00, 0x00, 0x00, //0x00012cd0 .long 16 + 0x38, 0x38, 0x38, 0x31, 0x37, 0x38, 0x34, 0x31, 0x39, 0x37, 0x30, 0x30, 0x31, 0x32, 0x35, 0x32, //0x00012cd4 QUAD $0x3134383731383838; QUAD $0x3235323130303739 // .asciz 16, '8881784197001252' + 0x33, 0x32, 0x33, 0x33, 0x38, 0x39, 0x30, 0x35, 0x33, 0x33, 0x34, 0x34, 0x37, 0x32, 0x36, 0x35, //0x00012ce4 QUAD $0x3530393833333233; QUAD $0x3536323734343333 // .asciz 16, '3233890533447265' + 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012cf4 QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d04 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d14 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d24 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012d34 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x10, 0x00, 0x00, 0x00, //0x00012d38 .long 16 + 0x34, 0x34, 0x34, 0x30, 0x38, 0x39, 0x32, 0x30, 0x39, 0x38, 0x35, 0x30, 0x30, 0x36, 0x32, 0x36, //0x00012d3c QUAD $0x3032393830343434; QUAD $0x3632363030353839 // .asciz 16, '4440892098500626' + 0x31, 0x36, 0x31, 0x36, 0x39, 0x34, 0x35, 0x32, 0x36, 0x36, 0x37, 0x32, 0x33, 0x36, 0x33, 0x32, //0x00012d4c QUAD $0x3235343936313631; QUAD $0x3233363332373636 // .asciz 16, '1616945266723632' + 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d5c QUAD $0x0000000035323138; QUAD $0x0000000000000000 // .asciz 16, '8125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d6c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d7c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d8c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012d9c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x10, 0x00, 0x00, 0x00, //0x00012da0 .long 16 + 0x32, 0x32, 0x32, 0x30, 0x34, 0x34, 0x36, 0x30, 0x34, 0x39, 0x32, 0x35, 0x30, 0x33, 0x31, 0x33, //0x00012da4 QUAD $0x3036343430323232; QUAD $0x3331333035323934 // .asciz 16, '2220446049250313' + 0x30, 0x38, 0x30, 0x38, 0x34, 0x37, 0x32, 0x36, 0x33, 0x33, 0x33, 0x36, 0x31, 0x38, 0x31, 0x36, //0x00012db4 QUAD $0x3632373438303830; QUAD $0x3631383136333333 // .asciz 16, '0808472633361816' + 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012dc4 QUAD $0x0000003532363034; QUAD $0x0000000000000000 // .asciz 16, '40625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012dd4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012de4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012df4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012e04 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x10, 0x00, 0x00, 0x00, //0x00012e08 .long 16 + 0x31, 0x31, 0x31, 0x30, 0x32, 0x32, 0x33, 0x30, 0x32, 0x34, 0x36, 0x32, 0x35, 0x31, 0x35, 0x36, //0x00012e0c QUAD $0x3033323230313131; QUAD $0x3635313532363432 // .asciz 16, '1110223024625156' + 0x35, 0x34, 0x30, 0x34, 0x32, 0x33, 0x36, 0x33, 0x31, 0x36, 0x36, 0x38, 0x30, 0x39, 0x30, 0x38, //0x00012e1c QUAD $0x3336333234303435; QUAD $0x3830393038363631 // .asciz 16, '5404236316680908' + 0x32, 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e2c QUAD $0x0000353231333032; QUAD $0x0000000000000000 // .asciz 16, '203125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e4c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e5c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012e6c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x11, 0x00, 0x00, 0x00, //0x00012e70 .long 17 + 0x35, 0x35, 0x35, 0x31, 0x31, 0x31, 0x35, 0x31, 0x32, 0x33, 0x31, 0x32, 0x35, 0x37, 0x38, 0x32, //0x00012e74 QUAD $0x3135313131353535; QUAD $0x3238373532313332 // .asciz 16, '5551115123125782' + 0x37, 0x30, 0x32, 0x31, 0x31, 0x38, 0x31, 0x35, 0x38, 0x33, 0x34, 0x30, 0x34, 0x35, 0x34, 0x31, //0x00012e84 QUAD $0x3531383131323037; QUAD $0x3134353430343338 // .asciz 16, '7021181583404541' + 0x30, 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e94 QUAD $0x0000353236353130; QUAD $0x0000000000000000 // .asciz 16, '015625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ea4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012eb4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ec4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012ed4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x11, 0x00, 0x00, 0x00, //0x00012ed8 .long 17 + 0x32, 0x37, 0x37, 0x35, 0x35, 0x35, 0x37, 0x35, 0x36, 0x31, 0x35, 0x36, 0x32, 0x38, 0x39, 0x31, //0x00012edc QUAD $0x3537353535373732; QUAD $0x3139383236353136 // .asciz 16, '2775557561562891' + 0x33, 0x35, 0x31, 0x30, 0x35, 0x39, 0x30, 0x37, 0x39, 0x31, 0x37, 0x30, 0x32, 0x32, 0x37, 0x30, //0x00012eec QUAD $0x3730393530313533; QUAD $0x3037323230373139 // .asciz 16, '3510590791702270' + 0x35, 0x30, 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012efc QUAD $0x0035323138373035; QUAD $0x0000000000000000 // .asciz 16, '5078125\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f0c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f1c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f2c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012f3c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x11, 0x00, 0x00, 0x00, //0x00012f40 .long 17 + 0x31, 0x33, 0x38, 0x37, 0x37, 0x37, 0x38, 0x37, 0x38, 0x30, 0x37, 0x38, 0x31, 0x34, 0x34, 0x35, //0x00012f44 QUAD $0x3738373737383331; QUAD $0x3534343138373038 // .asciz 16, '1387778780781445' + 0x36, 0x37, 0x35, 0x35, 0x32, 0x39, 0x35, 0x33, 0x39, 0x35, 0x38, 0x35, 0x31, 0x31, 0x33, 0x35, //0x00012f54 QUAD $0x3335393235353736; QUAD $0x3533313135383539 // .asciz 16, '6755295395851135' + 0x32, 0x35, 0x33, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f64 QUAD $0x3532363039333532; QUAD $0x0000000000000000 // .asciz 16, '25390625\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f74 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f84 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f94 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012fa4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x12, 0x00, 0x00, 0x00, //0x00012fa8 .long 18 + 0x36, 0x39, 0x33, 0x38, 0x38, 0x39, 0x33, 0x39, 0x30, 0x33, 0x39, 0x30, 0x37, 0x32, 0x32, 0x38, //0x00012fac QUAD $0x3933393838333936; QUAD $0x3832323730393330 // .asciz 16, '6938893903907228' + 0x33, 0x37, 0x37, 0x36, 0x34, 0x37, 0x36, 0x39, 0x37, 0x39, 0x32, 0x35, 0x35, 0x36, 0x37, 0x36, //0x00012fbc QUAD $0x3936373436373733; QUAD $0x3637363535323937 // .asciz 16, '3776476979255676' + 0x32, 0x36, 0x39, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012fcc QUAD $0x3532313335393632; QUAD $0x0000000000000000 // .asciz 16, '26953125\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012fdc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012fec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ffc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001300c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x12, 0x00, 0x00, 0x00, //0x00013010 .long 18 + 0x33, 0x34, 0x36, 0x39, 0x34, 0x34, 0x36, 0x39, 0x35, 0x31, 0x39, 0x35, 0x33, 0x36, 0x31, 0x34, //0x00013014 QUAD $0x3936343439363433; QUAD $0x3431363335393135 // .asciz 16, '3469446951953614' + 0x31, 0x38, 0x38, 0x38, 0x32, 0x33, 0x38, 0x34, 0x38, 0x39, 0x36, 0x32, 0x37, 0x38, 0x33, 0x38, //0x00013024 QUAD $0x3438333238383831; QUAD $0x3833383732363938 // .asciz 16, '1888238489627838' + 0x31, 0x33, 0x34, 0x37, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013034 QUAD $0x3236353637343331; QUAD $0x0000000000000035 // .asciz 16, '134765625\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013044 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013054 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013064 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013074 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x12, 0x00, 0x00, 0x00, //0x00013078 .long 18 + 0x31, 0x37, 0x33, 0x34, 0x37, 0x32, 0x33, 0x34, 0x37, 0x35, 0x39, 0x37, 0x36, 0x38, 0x30, 0x37, //0x0001307c QUAD $0x3433323734333731; QUAD $0x3730383637393537 // .asciz 16, '1734723475976807' + 0x30, 0x39, 0x34, 0x34, 0x31, 0x31, 0x39, 0x32, 0x34, 0x34, 0x38, 0x31, 0x33, 0x39, 0x31, 0x39, //0x0001308c QUAD $0x3239313134343930; QUAD $0x3931393331383434 // .asciz 16, '0944119244813919' + 0x30, 0x36, 0x37, 0x33, 0x38, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001309c QUAD $0x3138323833373630; QUAD $0x0000000000003532 // .asciz 16, '0673828125\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000130ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000130bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000130cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000130dc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x13, 0x00, 0x00, 0x00, //0x000130e0 .long 19 + 0x38, 0x36, 0x37, 0x33, 0x36, 0x31, 0x37, 0x33, 0x37, 0x39, 0x38, 0x38, 0x34, 0x30, 0x33, 0x35, //0x000130e4 QUAD $0x3337313633373638; QUAD $0x3533303438383937 // .asciz 16, '8673617379884035' + 0x34, 0x37, 0x32, 0x30, 0x35, 0x39, 0x36, 0x32, 0x32, 0x34, 0x30, 0x36, 0x39, 0x35, 0x39, 0x35, //0x000130f4 QUAD $0x3236393530323734; QUAD $0x3539353936303432 // .asciz 16, '4720596224069595' + 0x33, 0x33, 0x36, 0x39, 0x31, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013104 QUAD $0x3630343139363333; QUAD $0x0000000000003532 // .asciz 16, '3369140625\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013114 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013124 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013134 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013144 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013148 .p2align 4, 0x00 + //0x00013150 _P10_TAB + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, //0x00013150 .quad 4607182418800017408 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, //0x00013158 .quad 4621819117588971520 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, //0x00013160 .quad 4636737291354636288 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x8f, 0x40, //0x00013168 .quad 4652007308841189376 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc3, 0x40, //0x00013170 .quad 4666723172467343360 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xf8, 0x40, //0x00013178 .quad 4681608360884174848 + 0x00, 0x00, 0x00, 0x00, 0x80, 0x84, 0x2e, 0x41, //0x00013180 .quad 4696837146684686336 + 0x00, 0x00, 0x00, 0x00, 0xd0, 0x12, 0x63, 0x41, //0x00013188 .quad 4711630319722168320 + 0x00, 0x00, 0x00, 0x00, 0x84, 0xd7, 0x97, 0x41, //0x00013190 .quad 4726483295884279808 + 0x00, 0x00, 0x00, 0x00, 0x65, 0xcd, 0xcd, 0x41, //0x00013198 .quad 4741671816366391296 + 0x00, 0x00, 0x00, 0x20, 0x5f, 0xa0, 0x02, 0x42, //0x000131a0 .quad 4756540486875873280 + 0x00, 0x00, 0x00, 0xe8, 0x76, 0x48, 0x37, 0x42, //0x000131a8 .quad 4771362005757984768 + 0x00, 0x00, 0x00, 0xa2, 0x94, 0x1a, 0x6d, 0x42, //0x000131b0 .quad 4786511204640096256 + 0x00, 0x00, 0x40, 0xe5, 0x9c, 0x30, 0xa2, 0x42, //0x000131b8 .quad 4801453603149578240 + 0x00, 0x00, 0x90, 0x1e, 0xc4, 0xbc, 0xd6, 0x42, //0x000131c0 .quad 4816244402031689728 + 0x00, 0x00, 0x34, 0x26, 0xf5, 0x6b, 0x0c, 0x43, //0x000131c8 .quad 4831355200913801216 + 0x00, 0x80, 0xe0, 0x37, 0x79, 0xc3, 0x41, 0x43, //0x000131d0 .quad 4846369599423283200 + 0x00, 0xa0, 0xd8, 0x85, 0x57, 0x34, 0x76, 0x43, //0x000131d8 .quad 4861130398305394688 + 0x00, 0xc8, 0x4e, 0x67, 0x6d, 0xc1, 0xab, 0x43, //0x000131e0 .quad 4876203697187506176 + 0x00, 0x3d, 0x91, 0x60, 0xe4, 0x58, 0xe1, 0x43, //0x000131e8 .quad 4891288408196988160 + 0x40, 0x8c, 0xb5, 0x78, 0x1d, 0xaf, 0x15, 0x44, //0x000131f0 .quad 4906019910204099648 + 0x50, 0xef, 0xe2, 0xd6, 0xe4, 0x1a, 0x4b, 0x44, //0x000131f8 .quad 4921056587992461136 + 0x92, 0xd5, 0x4d, 0x06, 0xcf, 0xf0, 0x80, 0x44, //0x00013200 .quad 4936209963552724370 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013208 .p2align 4, 0x00 + //0x00013210 _pow10_ceil_sig_f32.g + 0xf5, 0xfc, 0x43, 0x4b, 0x2c, 0xb3, 0xce, 0x81, //0x00013210 .quad -9093133594791772939 + 0x32, 0xfc, 0x14, 0x5e, 0xf7, 0x5f, 0x42, 0xa2, //0x00013218 .quad -6754730975062328270 + 0x3f, 0x3b, 0x9a, 0x35, 0xf5, 0xf7, 0xd2, 0xca, //0x00013220 .quad -3831727700400522433 + 0x0e, 0xca, 0x00, 0x83, 0xf2, 0xb5, 0x87, 0xfd, //0x00013228 .quad -177973607073265138 + 0x49, 0x7e, 0xe0, 0x91, 0xb7, 0xd1, 0x74, 0x9e, //0x00013230 .quad -7028762532061872567 + 0xdb, 0x9d, 0x58, 0x76, 0x25, 0x06, 0x12, 0xc6, //0x00013238 .quad -4174267146649952805 + 0x52, 0xc5, 0xee, 0xd3, 0xae, 0x87, 0x96, 0xf7, //0x00013240 .quad -606147914885053102 + 0x53, 0x3b, 0x75, 0x44, 0xcd, 0x14, 0xbe, 0x9a, //0x00013248 .quad -7296371474444240045 + 0x28, 0x8a, 0x92, 0x95, 0x00, 0x9a, 0x6d, 0xc1, //0x00013250 .quad -4508778324627912152 + 0xb2, 0x2c, 0xf7, 0xba, 0x80, 0x00, 0xc9, 0xf1, //0x00013258 .quad -1024286887357502286 + 0xef, 0x7b, 0xda, 0x74, 0x50, 0xa0, 0x1d, 0x97, //0x00013260 .quad -7557708332239520785 + 0xeb, 0x1a, 0x11, 0x92, 0x64, 0x08, 0xe5, 0xbc, //0x00013268 .quad -4835449396872013077 + 0xa6, 0x61, 0x95, 0xb6, 0x7d, 0x4a, 0x1e, 0xec, //0x00013270 .quad -1432625727662628442 + 0x08, 0x5d, 0x1d, 0x92, 0x8e, 0xee, 0x92, 0x93, //0x00013278 .quad -7812920107430224632 + 0x4a, 0xb4, 0xa4, 0x36, 0x32, 0xaa, 0x77, 0xb8, //0x00013280 .quad -5154464115860392886 + 0x5c, 0xe1, 0x4d, 0xc4, 0xbe, 0x94, 0x95, 0xe6, //0x00013288 .quad -1831394126398103204 + 0xda, 0xac, 0xb0, 0x3a, 0xf7, 0x7c, 0x1d, 0x90, //0x00013290 .quad -8062150356639896358 + 0x10, 0xd8, 0x5c, 0x09, 0x35, 0xdc, 0x24, 0xb4, //0x00013298 .quad -5466001927372482544 + 0x14, 0x0e, 0xb4, 0x4b, 0x42, 0x13, 0x2e, 0xe1, //0x000132a0 .quad -2220816390788215276 + 0xcc, 0x88, 0x50, 0x6f, 0x09, 0xcc, 0xbc, 0x8c, //0x000132a8 .quad -8305539271883716404 + 0xff, 0xaa, 0x24, 0xcb, 0x0b, 0xff, 0xeb, 0xaf, //0x000132b0 .quad -5770238071427257601 + 0xbf, 0xd5, 0xed, 0xbd, 0xce, 0xfe, 0xe6, 0xdb, //0x000132b8 .quad -2601111570856684097 + 0x98, 0xa5, 0xb4, 0x36, 0x41, 0x5f, 0x70, 0x89, //0x000132c0 .quad -8543223759426509416 + 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x000132c8 .quad -6067343680855748867 + 0xbd, 0x42, 0x7a, 0xe5, 0xd5, 0x94, 0xbf, 0xd6, //0x000132d0 .quad -2972493582642298179 + 0xb6, 0x69, 0x6c, 0xaf, 0x05, 0xbd, 0x37, 0x86, //0x000132d8 .quad -8775337516792518218 + 0x24, 0x84, 0x47, 0x1b, 0x47, 0xac, 0xc5, 0xa7, //0x000132e0 .quad -6357485877563259868 + 0x2c, 0x65, 0x19, 0xe2, 0x58, 0x17, 0xb7, 0xd1, //0x000132e8 .quad -3335171328526686932 + 0x3c, 0xdf, 0x4f, 0x8d, 0x97, 0x6e, 0x12, 0x83, //0x000132f0 .quad -9002011107970261188 + 0x0b, 0xd7, 0xa3, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, //0x000132f8 .quad -6640827866535438581 + 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x00013300 .quad -3689348814741910323 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x00013308 .quad -9223372036854775808 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, //0x00013310 .quad -6917529027641081856 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, //0x00013318 .quad -4035225266123964416 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, //0x00013320 .quad -432345564227567616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x9c, //0x00013328 .quad -7187745005283311616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xc3, //0x00013330 .quad -4372995238176751616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xf4, //0x00013338 .quad -854558029293551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x98, //0x00013340 .quad -7451627795949551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xbc, 0xbe, //0x00013348 .quad -4702848726509551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6b, 0xee, //0x00013350 .quad -1266874889709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x02, 0x95, //0x00013358 .quad -7709325833709551616 + 0x00, 0x00, 0x00, 0x00, 0x40, 0xb7, 0x43, 0xba, //0x00013360 .quad -5024971273709551616 + 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0xd4, 0xe8, //0x00013368 .quad -1669528073709551616 + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xe7, 0x84, 0x91, //0x00013370 .quad -7960984073709551616 + 0x00, 0x00, 0x00, 0x80, 0xf4, 0x20, 0xe6, 0xb5, //0x00013378 .quad -5339544073709551616 + 0x00, 0x00, 0x00, 0xa0, 0x31, 0xa9, 0x5f, 0xe3, //0x00013380 .quad -2062744073709551616 + 0x00, 0x00, 0x00, 0x04, 0xbf, 0xc9, 0x1b, 0x8e, //0x00013388 .quad -8206744073709551616 + 0x00, 0x00, 0x00, 0xc5, 0x2e, 0xbc, 0xa2, 0xb1, //0x00013390 .quad -5646744073709551616 + 0x00, 0x00, 0x40, 0x76, 0x3a, 0x6b, 0x0b, 0xde, //0x00013398 .quad -2446744073709551616 + 0x00, 0x00, 0xe8, 0x89, 0x04, 0x23, 0xc7, 0x8a, //0x000133a0 .quad -8446744073709551616 + 0x00, 0x00, 0x62, 0xac, 0xc5, 0xeb, 0x78, 0xad, //0x000133a8 .quad -5946744073709551616 + 0x00, 0x80, 0x7a, 0x17, 0xb7, 0x26, 0xd7, 0xd8, //0x000133b0 .quad -2821744073709551616 + 0x00, 0x90, 0xac, 0x6e, 0x32, 0x78, 0x86, 0x87, //0x000133b8 .quad -8681119073709551616 + 0x00, 0xb4, 0x57, 0x0a, 0x3f, 0x16, 0x68, 0xa9, //0x000133c0 .quad -6239712823709551616 + 0x00, 0xa1, 0xed, 0xcc, 0xce, 0x1b, 0xc2, 0xd3, //0x000133c8 .quad -3187955011209551616 + 0xa0, 0x84, 0x14, 0x40, 0x61, 0x51, 0x59, 0x84, //0x000133d0 .quad -8910000909647051616 + 0xc8, 0xa5, 0x19, 0x90, 0xb9, 0xa5, 0x6f, 0xa5, //0x000133d8 .quad -6525815118631426616 + 0x3a, 0x0f, 0x20, 0xf4, 0x27, 0x8f, 0xcb, 0xce, //0x000133e0 .quad -3545582879861895366 + 0x85, 0x09, 0x94, 0xf8, 0x78, 0x39, 0x3f, 0x81, //0x000133e8 .quad -9133518327554766459 + 0xe6, 0x0b, 0xb9, 0x36, 0xd7, 0x07, 0x8f, 0xa1, //0x000133f0 .quad -6805211891016070170 + 0xdf, 0x4e, 0x67, 0x04, 0xcd, 0xc9, 0xf2, 0xc9, //0x000133f8 .quad -3894828845342699809 + 0x97, 0x22, 0x81, 0x45, 0x40, 0x7c, 0x6f, 0xfc, //0x00013400 .quad -256850038250986857 + 0x9e, 0xb5, 0x70, 0x2b, 0xa8, 0xad, 0xc5, 0x9d, //0x00013408 .quad -7078060301547948642 + 0x06, 0xe3, 0x4c, 0x36, 0x12, 0x19, 0x37, 0xc5, //0x00013410 .quad -4235889358507547898 + 0xc7, 0x1b, 0xe0, 0xc3, 0x56, 0xdf, 0x84, 0xf6, //0x00013418 .quad -683175679707046969 + 0x5d, 0x11, 0x6c, 0x3a, 0x96, 0x0b, 0x13, 0x9a, //0x00013420 .quad -7344513827457986211 + 0xb4, 0x15, 0x07, 0xc9, 0x7b, 0xce, 0x97, 0xc0, //0x00013428 .quad -4568956265895094860 + 0x21, 0xdb, 0x48, 0xbb, 0x1a, 0xc2, 0xbd, 0xf0, //0x00013430 .quad -1099509313941480671 + 0xf5, 0x88, 0x0d, 0xb5, 0x50, 0x99, 0x76, 0x96, //0x00013438 .quad -7604722348854507275 + 0x32, 0xeb, 0x50, 0xe2, 0xa4, 0x3f, 0x14, 0xbc, //0x00013440 .quad -4894216917640746190 + 0xfe, 0x25, 0xe5, 0x1a, 0x8e, 0x4f, 0x19, 0xeb, //0x00013448 .quad -1506085128623544834 + 0xbf, 0x37, 0xcf, 0xd0, 0xb8, 0xd1, 0xef, 0x92, //0x00013450 .quad -7858832233030797377 + 0xae, 0x05, 0x03, 0x05, 0x27, 0xc6, 0xab, 0xb7, //0x00013458 .quad -5211854272861108818 + 0x1a, 0xc7, 0x43, 0xc6, 0xb0, 0xb7, 0x96, 0xe5, //0x00013460 .quad -1903131822648998118 + 0x70, 0x5c, 0xea, 0x7b, 0xce, 0x32, 0x7e, 0x8f, //0x00013468 .quad -8106986416796705680 + 0x8c, 0xf3, 0xe4, 0x1a, 0x82, 0xbf, 0x5d, 0xb3, //0x00013470 .quad -5522047002568494196 +} diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/native_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/native_amd64.go index bebd83c802..1a4ea0ae3d 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/native_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/native_amd64.go @@ -1,5 +1,7 @@ // Code generated by Makefile, DO NOT EDIT. +// Code generated by Makefile, DO NOT EDIT. + /* * Copyright 2021 ByteDance Inc. * @@ -22,114 +24,168 @@ import ( `unsafe` `github.com/bytedance/sonic/internal/native/types` + `github.com/bytedance/sonic/internal/rt` +) + +var ( + __i64toa func(out unsafe.Pointer, val int64) (ret int) + + __u64toa func(out unsafe.Pointer, val uint64) (ret int) + + __f64toa func(out unsafe.Pointer, val float64) (ret int) + + __f32toa func(out unsafe.Pointer, val float32) (ret int) + + __lspace func(sp unsafe.Pointer, nb int, off int) (ret int) + + __quote func(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn unsafe.Pointer, flags uint64) (ret int) + + __html_escape func(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn unsafe.Pointer) (ret int) + + __unquote func(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep unsafe.Pointer, flags uint64) (ret int) + + __value func(s unsafe.Pointer, n int, p int, v unsafe.Pointer, flags uint64) (ret int) + + __vstring func(s unsafe.Pointer, p unsafe.Pointer, v unsafe.Pointer, flags uint64) + + __vnumber func(s unsafe.Pointer, p unsafe.Pointer, v unsafe.Pointer) + + __vsigned func(s unsafe.Pointer, p unsafe.Pointer, v unsafe.Pointer) + + __vunsigned func(s unsafe.Pointer, p unsafe.Pointer, v unsafe.Pointer) + + __skip_one func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer, flags uint64) (ret int) + + __skip_one_fast func(s unsafe.Pointer, p unsafe.Pointer) (ret int) + + __skip_array func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer, flags uint64) (ret int) + + __skip_object func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer, flags uint64) (ret int) + + __skip_number func(s unsafe.Pointer, p unsafe.Pointer) (ret int) + + __validate_one func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer) (ret int) + + __get_by_path func(s unsafe.Pointer, p unsafe.Pointer, path unsafe.Pointer, m unsafe.Pointer) (ret int) + + __validate_utf8 func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer) (ret int) + + __validate_utf8_fast func(s unsafe.Pointer) (ret int) + + __fsm_exec func(m unsafe.Pointer, s unsafe.Pointer, p unsafe.Pointer, flags uint64) (ret int) ) //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __i64toa(out *byte, val int64) (ret int) +func i64toa(out *byte, val int64) (ret int) { + return __i64toa(rt.NoEscape(unsafe.Pointer(out)), val) +} + +//go:nosplit +func u64toa(out *byte, val uint64) (ret int) { + return __u64toa(rt.NoEscape(unsafe.Pointer(out)), val) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __u64toa(out *byte, val uint64) (ret int) +func f64toa(out *byte, val float64) (ret int) { + return __f64toa(rt.NoEscape(unsafe.Pointer(out)), val) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __f64toa(out *byte, val float64) (ret int) +func f32toa(out *byte, val float32) (ret int) { + return __f32toa(rt.NoEscape(unsafe.Pointer(out)), val) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __f32toa(out *byte, val float32) (ret int) +func lspace(sp unsafe.Pointer, nb int, off int) (ret int) { + return __lspace(rt.NoEscape(sp), nb, off) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __lspace(sp unsafe.Pointer, nb int, off int) (ret int) +func quote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int, flags uint64) (ret int) { + return __quote(rt.NoEscape(unsafe.Pointer(sp)), nb, rt.NoEscape(unsafe.Pointer(dp)), rt.NoEscape(unsafe.Pointer(dn)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __quote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int, flags uint64) (ret int) +func html_escape(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int) (ret int) { + return __html_escape(rt.NoEscape(unsafe.Pointer(sp)), nb, rt.NoEscape(unsafe.Pointer(dp)), rt.NoEscape(unsafe.Pointer(dn))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __html_escape(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int) (ret int) +func unquote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) (ret int) { + return __unquote(rt.NoEscape(unsafe.Pointer(sp)), nb, rt.NoEscape(unsafe.Pointer(dp)), rt.NoEscape(unsafe.Pointer(ep)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __unquote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) (ret int) +func value(s unsafe.Pointer, n int, p int, v *types.JsonState, flags uint64) (ret int) { + return __value(rt.NoEscape(unsafe.Pointer(s)), n, p, rt.NoEscape(unsafe.Pointer(v)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __value(s unsafe.Pointer, n int, p int, v *types.JsonState, flags uint64) (ret int) +func vstring(s *string, p *int, v *types.JsonState, flags uint64) { + __vstring(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(v)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __vstring(s *string, p *int, v *types.JsonState, flags uint64) +func vnumber(s *string, p *int, v *types.JsonState) { + __vnumber(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(v))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __vnumber(s *string, p *int, v *types.JsonState) +func vsigned(s *string, p *int, v *types.JsonState) { + __vsigned(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(v))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __vsigned(s *string, p *int, v *types.JsonState) +func vunsigned(s *string, p *int, v *types.JsonState) { + __vunsigned(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(v))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __vunsigned(s *string, p *int, v *types.JsonState) +func skip_one(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) { + return __skip_one(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_one(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) +func skip_one_fast(s *string, p *int) (ret int) { + return __skip_one_fast(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_one_fast(s *string, p *int) (ret int) +func skip_array(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) { + return __skip_array(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_array(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) +func skip_object(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) { + return __skip_object(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_object(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) +func skip_number(s *string, p *int) (ret int) { + return __skip_number(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_number(s *string, p *int) (ret int) +func validate_one(s *string, p *int, m *types.StateMachine) (ret int) { + return __validate_one(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __validate_one(s *string, p *int, m *types.StateMachine) (ret int) +func get_by_path(s *string, p *int, path *[]interface{}, m *types.StateMachine) (ret int) { + return __get_by_path(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(path)), rt.NoEscape(unsafe.Pointer(m))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __get_by_path(s *string, p *int, path *[]interface{}, m *types.StateMachine) (ret int) +func validate_utf8(s *string, p *int, m *types.StateMachine) (ret int) { + return __validate_utf8(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __validate_utf8(s *string, p *int, m *types.StateMachine) (ret int) +func validate_utf8_fast(s *string) (ret int) { + return __validate_utf8_fast(rt.NoEscape(unsafe.Pointer(s))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __validate_utf8_fast(s *string) (ret int) \ No newline at end of file +func fsm_exec(m *types.StateMachine, s *string, p *int, flags uint64) (ret int) { + return __fsm_exec(rt.NoEscape(unsafe.Pointer(m)), rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), flags) +} diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/native_amd64.s b/vendor/github.com/bytedance/sonic/internal/native/avx2/native_amd64.s deleted file mode 100644 index 07789ae4a4..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/native_amd64.s +++ /dev/null @@ -1,15972 +0,0 @@ -// +build !noasm !appengine -// Code generated by asm2asm, DO NOT EDIT. - -#include "go_asm.h" -#include "funcdata.h" -#include "textflag.h" - -TEXT ·__native_entry__(SB), NOSPLIT, $0 - NO_LOCAL_POINTERS - LONG $0xf9058d48; WORD $0xffff; BYTE $0xff // leaq $-7(%rip), %rax - LONG $0x24448948; BYTE $0x08 // movq %rax, $8(%rsp) - BYTE $0xc3 // retq - QUAD $0x0000000000000000; QUAD $0x0000000000000000; WORD $0x0000; BYTE $0x00 // .p2align 5, 0x00 - -LCPI0_0: - BYTE $0x20 // .byte 32 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x09 // .byte 9 - BYTE $0x0a // .byte 10 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x0d // .byte 13 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x20 // .byte 32 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x09 // .byte 9 - BYTE $0x0a // .byte 10 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x0d // .byte 13 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - - // .p2align 4, 0x90 -_lspace: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - LONG $0x17048d48 // leaq (%rdi,%rdx), %rax - WORD $0x2948; BYTE $0xd6 // subq %rdx, %rsi - LONG $0x20fe8348 // cmpq $32, %rsi - LONG $0x0037820f; WORD $0x0000 // jb LBB0_5, $55(%rip) - QUAD $0xffffffc3056ffdc5 // vmovdqa $-61(%rip), %ymm0 /* LCPI0_0(%rip) */ - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB0_2: - LONG $0x086ffec5 // vmovdqu (%rax), %ymm1 - LONG $0x007de2c4; BYTE $0xd1 // vpshufb %ymm1, %ymm0, %ymm2 - LONG $0xca74f5c5 // vpcmpeqb %ymm2, %ymm1, %ymm1 - LONG $0xc9d7fdc5 // vpmovmskb %ymm1, %ecx - WORD $0xf983; BYTE $0xff // cmpl $-1, %ecx - LONG $0x005d850f; WORD $0x0000 // jne LBB0_3, $93(%rip) - LONG $0x20c08348 // addq $32, %rax - LONG $0xe0c68348 // addq $-32, %rsi - LONG $0x1ffe8348 // cmpq $31, %rsi - LONG $0xffd4870f; WORD $0xffff // ja LBB0_2, $-44(%rip) - -LBB0_5: - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x003a840f; WORD $0x0000 // je LBB0_12, $58(%rip) - LONG $0x30048d4c // leaq (%rax,%rsi), %r8 - WORD $0xff48; BYTE $0xc0 // incq %rax - QUAD $0x000100002600ba48; WORD $0x0000 // movabsq $4294977024, %rdx - -LBB0_7: - LONG $0xff48be0f // movsbl $-1(%rax), %ecx - WORD $0xf983; BYTE $0x20 // cmpl $32, %ecx - LONG $0x0038870f; WORD $0x0000 // ja LBB0_9, $56(%rip) - LONG $0xcaa30f48 // btq %rcx, %rdx - LONG $0x002e830f; WORD $0x0000 // jae LBB0_9, $46(%rip) - WORD $0xff48; BYTE $0xce // decq %rsi - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0xffda850f; WORD $0xffff // jne LBB0_7, $-38(%rip) - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - -LBB0_12: - WORD $0x2948; BYTE $0xf8 // subq %rdi, %rax - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB0_3: - WORD $0x2948; BYTE $0xf8 // subq %rdi, %rax - WORD $0xd1f7 // notl %ecx - WORD $0x6348; BYTE $0xc9 // movslq %ecx, %rcx - LONG $0xc9bc0f48 // bsfq %rcx, %rcx - WORD $0x0148; BYTE $0xc8 // addq %rcx, %rax - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB0_9: - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x0148; BYTE $0xf8 // addq %rdi, %rax - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - QUAD $0x0000000000000000; WORD $0x0000 // .p2align 5, 0x00 - -LCPI1_0: - QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' - QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' - - // .p2align 4, 0x90 -_f64toa: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax - LONG $0x7ef9e1c4; BYTE $0xc2 // vmovq %xmm0, %rdx - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - LONG $0x34e8c148 // shrq $52, %rax - LONG $0x0007ff25; BYTE $0x00 // andl $2047, %eax - LONG $0x0007ff3d; BYTE $0x00 // cmpl $2047, %eax - LONG $0x0ade840f; WORD $0x0000 // je LBB1_1, $2782(%rip) - WORD $0x8949; BYTE $0xfe // movq %rdi, %r14 - WORD $0x07c6; BYTE $0x2d // movb $45, (%rdi) - WORD $0x8949; BYTE $0xd4 // movq %rdx, %r12 - LONG $0x3fecc149 // shrq $63, %r12 - LONG $0x273c8d4e // leaq (%rdi,%r12), %r15 - QUAD $0x00000000550c8d48 // leaq (,%rdx,2), %rcx - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x01e3840f; WORD $0x0000 // je LBB1_3, $483(%rip) - QUAD $0xffffffffffffbf48; WORD $0x000f // movabsq $4503599627370495, %rdi - WORD $0x2148; BYTE $0xfa // andq %rdi, %rdx - WORD $0xc085 // testl %eax, %eax - LONG $0x0aae840f; WORD $0x0000 // je LBB1_5, $2734(%rip) - WORD $0xff48; BYTE $0xc7 // incq %rdi - WORD $0x0948; BYTE $0xd7 // orq %rdx, %rdi - LONG $0xfbcd988d; WORD $0xffff // leal $-1075(%rax), %ebx - LONG $0xfc01888d; WORD $0xffff // leal $-1023(%rax), %ecx - WORD $0xf983; BYTE $0x34 // cmpl $52, %ecx - LONG $0x001a870f; WORD $0x0000 // ja LBB1_6, $26(%rip) - WORD $0xd989 // movl %ebx, %ecx - WORD $0xd9f7 // negl %ecx - LONG $0xffc6c748; WORD $0xffff; BYTE $0xff // movq $-1, %rsi - WORD $0xd348; BYTE $0xe6 // shlq %cl, %rsi - WORD $0xf748; BYTE $0xd6 // notq %rsi - WORD $0x8548; BYTE $0xf7 // testq %rsi, %rdi - LONG $0x0421840f; WORD $0x0000 // je LBB1_11, $1057(%rip) - -LBB1_6: - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - WORD $0x940f; BYTE $0xc1 // sete %cl - WORD $0xf883; BYTE $0x01 // cmpl $1, %eax - WORD $0x970f; BYTE $0xc0 // seta %al - WORD $0xc820 // andb %cl, %al - WORD $0xb60f; BYTE $0xc0 // movzbl %al, %eax - LONG $0x4413cb69; WORD $0x0013 // imull $1262611, %ebx, %ecx - WORD $0xd231 // xorl %edx, %edx - WORD $0xc084 // testb %al, %al - LONG $0x0101b941; WORD $0xfff8 // movl $-524031, %r9d - LONG $0xca440f44 // cmovel %edx, %r9d - LONG $0xb8748d48; BYTE $0xfe // leaq $-2(%rax,%rdi,4), %rsi - WORD $0x0141; BYTE $0xc9 // addl %ecx, %r9d - LONG $0x16f9c141 // sarl $22, %r9d - LONG $0xb1c96941; WORD $0xe56c; BYTE $0xff // imull $-1741647, %r9d, %ecx - WORD $0xe9c1; BYTE $0x13 // shrl $19, %ecx - WORD $0xd901 // addl %ebx, %ecx - LONG $0x000124b8; BYTE $0x00 // movl $292, %eax - WORD $0x2944; BYTE $0xc8 // subl %r9d, %eax - LONG $0x04e0c148 // shlq $4, %rax - LONG $0xaa158d48; WORD $0x00c4; BYTE $0x00 // leaq $50346(%rip), %rdx /* _pow10_ceil_sig.g(%rip) */ - LONG $0x101c8b4c // movq (%rax,%rdx), %r11 - LONG $0x106c8b4c; BYTE $0x08 // movq $8(%rax,%rdx), %r13 - WORD $0xc1fe // incb %cl - WORD $0xd348; BYTE $0xe6 // shlq %cl, %rsi - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe5 // mulq %r13 - WORD $0x8948; BYTE $0xd3 // movq %rdx, %rbx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe3 // mulq %r11 - QUAD $0x00000000bd348d48 // leaq (,%rdi,4), %rsi - WORD $0x0148; BYTE $0xd8 // addq %rbx, %rax - LONG $0x00d28348 // adcq $0, %rdx - WORD $0xdb31 // xorl %ebx, %ebx - LONG $0x01f88348 // cmpq $1, %rax - WORD $0x970f; BYTE $0xc3 // seta %bl - WORD $0x0948; BYTE $0xd3 // orq %rdx, %rbx - WORD $0xd348; BYTE $0xe6 // shlq %cl, %rsi - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe5 // mulq %r13 - WORD $0x8949; BYTE $0xd2 // movq %rdx, %r10 - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe3 // mulq %r11 - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - QUAD $0x00000002bd348d48 // leaq $2(,%rdi,4), %rsi - WORD $0x014c; BYTE $0xd0 // addq %r10, %rax - LONG $0x00d08349 // adcq $0, %r8 - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - LONG $0x01f88348 // cmpq $1, %rax - LONG $0xc2970f41 // seta %r10b - WORD $0x094d; BYTE $0xc2 // orq %r8, %r10 - WORD $0xd348; BYTE $0xe6 // shlq %cl, %rsi - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe5 // mulq %r13 - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe3 // mulq %r11 - WORD $0x0148; BYTE $0xc8 // addq %rcx, %rax - LONG $0x00d28348 // adcq $0, %rdx - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x01f88348 // cmpq $1, %rax - WORD $0x970f; BYTE $0xc1 // seta %cl - WORD $0x0948; BYTE $0xd1 // orq %rdx, %rcx - WORD $0xe783; BYTE $0x01 // andl $1, %edi - WORD $0x0148; BYTE $0xfb // addq %rdi, %rbx - WORD $0x2948; BYTE $0xf9 // subq %rdi, %rcx - LONG $0x28fa8349 // cmpq $40, %r10 - LONG $0x003e820f; WORD $0x0000 // jb LBB1_29, $62(%rip) - QUAD $0xcccccccccccdba48; WORD $0xcccc // movabsq $-3689348814741910323, %rdx - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - WORD $0xf748; BYTE $0xe2 // mulq %rdx - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - LONG $0x05efc148 // shrq $5, %rdi - QUAD $0x00000000fd048d48 // leaq (,%rdi,8), %rax - LONG $0x80148d48 // leaq (%rax,%rax,4), %rdx - WORD $0x3948; BYTE $0xd3 // cmpq %rdx, %rbx - LONG $0xc6970f40 // seta %sil - LONG $0x80448d48; BYTE $0x28 // leaq $40(%rax,%rax,4), %rax - WORD $0x3948; BYTE $0xc8 // cmpq %rcx, %rax - WORD $0x960f; BYTE $0xc2 // setbe %dl - WORD $0x3040; BYTE $0xf2 // xorb %sil, %dl - LONG $0x0130840f; WORD $0x0000 // je LBB1_8, $304(%rip) - -LBB1_29: - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - LONG $0x02e8c148 // shrq $2, %rax - WORD $0x894c; BYTE $0xc2 // movq %r8, %rdx - LONG $0xfce28348 // andq $-4, %rdx - WORD $0x3948; BYTE $0xd3 // cmpq %rdx, %rbx - LONG $0xc7970f40 // seta %dil - LONG $0x04728d48 // leaq $4(%rdx), %rsi - WORD $0x3948; BYTE $0xce // cmpq %rcx, %rsi - WORD $0x960f; BYTE $0xc3 // setbe %bl - WORD $0x3040; BYTE $0xfb // xorb %dil, %bl - LONG $0x0053840f; WORD $0x0000 // je LBB1_30, $83(%rip) - LONG $0x02ca8348 // orq $2, %rdx - LONG $0x000001bf; BYTE $0x00 // movl $1, %edi - WORD $0x3949; BYTE $0xd2 // cmpq %rdx, %r10 - LONG $0x000e870f; WORD $0x0000 // ja LBB1_33, $14(%rip) - WORD $0x940f; BYTE $0xc1 // sete %cl - LONG $0x02e8c041 // shrb $2, %r8b - WORD $0x2041; BYTE $0xc8 // andb %cl, %r8b - LONG $0xf8b60f41 // movzbl %r8b, %edi - -LBB1_33: - WORD $0x0148; BYTE $0xc7 // addq %rax, %rdi - QUAD $0x0001ffffff80b848; WORD $0x0000 // movabsq $8589934464, %rax - LONG $0xe47f0548; WORD $0x540b // addq $1410065535, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x003a870f; WORD $0x0000 // ja LBB1_35, $58(%rip) - LONG $0x0000eae9; BYTE $0x00 // jmp LBB1_41, $234(%rip) - -LBB1_3: - LONG $0x3007c641 // movb $48, (%r15) - WORD $0x2945; BYTE $0xf7 // subl %r14d, %r15d - WORD $0xff41; BYTE $0xc7 // incl %r15d - WORD $0x8944; BYTE $0xfb // movl %r15d, %ebx - LONG $0x0008a2e9; BYTE $0x00 // jmp LBB1_116, $2210(%rip) - -LBB1_30: - WORD $0x3948; BYTE $0xf1 // cmpq %rsi, %rcx - LONG $0xffd88348 // sbbq $-1, %rax - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - QUAD $0x0001ffffff80b848; WORD $0x0000 // movabsq $8589934464, %rax - LONG $0xe47f0548; WORD $0x540b // addq $1410065535, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x00b5860f; WORD $0x0000 // jbe LBB1_41, $181(%rip) - -LBB1_35: - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x0be8c148 // shrq $11, %rax - LONG $0x00000bba; BYTE $0x00 // movl $11, %edx - LONG $0x0edd3d48; WORD $0x02e9 // cmpq $48828125, %rax - LONG $0x0127820f; WORD $0x0000 // jb LBB1_51, $295(%rip) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x0ce8c148 // shrq $12, %rax - LONG $0x00000cba; BYTE $0x00 // movl $12, %edx - LONG $0x4a513d48; WORD $0x0e8d // cmpq $244140625, %rax - LONG $0x010f820f; WORD $0x0000 // jb LBB1_51, $271(%rip) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x0de8c148 // shrq $13, %rax - LONG $0x00000dba; BYTE $0x00 // movl $13, %edx - LONG $0x73953d48; WORD $0x48c2 // cmpq $1220703125, %rax - LONG $0x00f7820f; WORD $0x0000 // jb LBB1_51, $247(%rip) - LONG $0x00000eba; BYTE $0x00 // movl $14, %edx - QUAD $0x5af3107a4000b848; WORD $0x0000 // movabsq $100000000000000, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x00df820f; WORD $0x0000 // jb LBB1_51, $223(%rip) - LONG $0x00000fba; BYTE $0x00 // movl $15, %edx - QUAD $0x8d7ea4c68000b848; WORD $0x0003 // movabsq $1000000000000000, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x00c7820f; WORD $0x0000 // jb LBB1_51, $199(%rip) - QUAD $0x86f26fc10000b848; WORD $0x0023 // movabsq $10000000000000000, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x000011ba; BYTE $0x00 // movl $17, %edx - -LBB1_50: - WORD $0xda83; BYTE $0x00 // sbbl $0, %edx - LONG $0x0000ade9; BYTE $0x00 // jmp LBB1_51, $173(%rip) - -LBB1_8: - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0xffdf8348 // sbbq $-1, %rdi - WORD $0xff41; BYTE $0xc1 // incl %r9d - QUAD $0x0001ffffff80b848; WORD $0x0000 // movabsq $8589934464, %rax - LONG $0xe47f0548; WORD $0x540b // addq $1410065535, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0xff4b870f; WORD $0xffff // ja LBB1_35, $-181(%rip) - -LBB1_41: - LONG $0x000001ba; BYTE $0x00 // movl $1, %edx - LONG $0x0aff8348 // cmpq $10, %rdi - LONG $0x007b820f; WORD $0x0000 // jb LBB1_51, $123(%rip) - LONG $0x000002ba; BYTE $0x00 // movl $2, %edx - LONG $0x64ff8348 // cmpq $100, %rdi - LONG $0x006c820f; WORD $0x0000 // jb LBB1_51, $108(%rip) - LONG $0x000003ba; BYTE $0x00 // movl $3, %edx - LONG $0xe8ff8148; WORD $0x0003; BYTE $0x00 // cmpq $1000, %rdi - LONG $0x005a820f; WORD $0x0000 // jb LBB1_51, $90(%rip) - LONG $0x000004ba; BYTE $0x00 // movl $4, %edx - LONG $0x10ff8148; WORD $0x0027; BYTE $0x00 // cmpq $10000, %rdi - LONG $0x0048820f; WORD $0x0000 // jb LBB1_51, $72(%rip) - LONG $0x000005ba; BYTE $0x00 // movl $5, %edx - LONG $0xa0ff8148; WORD $0x0186; BYTE $0x00 // cmpq $100000, %rdi - LONG $0x0036820f; WORD $0x0000 // jb LBB1_51, $54(%rip) - LONG $0x000006ba; BYTE $0x00 // movl $6, %edx - LONG $0x40ff8148; WORD $0x0f42; BYTE $0x00 // cmpq $1000000, %rdi - LONG $0x0024820f; WORD $0x0000 // jb LBB1_51, $36(%rip) - LONG $0x000007ba; BYTE $0x00 // movl $7, %edx - LONG $0x80ff8148; WORD $0x9896; BYTE $0x00 // cmpq $10000000, %rdi - LONG $0x0012820f; WORD $0x0000 // jb LBB1_51, $18(%rip) - LONG $0x000008ba; BYTE $0x00 // movl $8, %edx - LONG $0x00ff8148; WORD $0xf5e1; BYTE $0x05 // cmpq $100000000, %rdi - LONG $0x0754830f; WORD $0x0000 // jae LBB1_49, $1876(%rip) - -LBB1_51: - LONG $0x0a2c8d46 // leal (%rdx,%r9), %r13d - LONG $0x0a448d42; BYTE $0x05 // leal $5(%rdx,%r9), %eax - WORD $0xf883; BYTE $0x1b // cmpl $27, %eax - LONG $0x009d820f; WORD $0x0000 // jb LBB1_64, $157(%rip) - LONG $0x01678d4d // leaq $1(%r15), %r12 - WORD $0x894c; BYTE $0xe6 // movq %r12, %rsi - LONG $0x008cafe8; BYTE $0x00 // callq _format_significand, $36015(%rip) - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB1_53: - LONG $0x30ff7b80 // cmpb $48, $-1(%rbx) - LONG $0xff5b8d48 // leaq $-1(%rbx), %rbx - LONG $0xfff2840f; WORD $0xffff // je LBB1_53, $-14(%rip) - LONG $0x01478a41 // movb $1(%r15), %al - WORD $0x8841; BYTE $0x07 // movb %al, (%r15) - LONG $0x01438d48 // leaq $1(%rbx), %rax - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x294c; BYTE $0xe1 // subq %r12, %rcx - LONG $0x02f98348 // cmpq $2, %rcx - LONG $0x00088c0f; WORD $0x0000 // jl LBB1_56, $8(%rip) - LONG $0x2404c641; BYTE $0x2e // movb $46, (%r12) - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - -LBB1_56: - WORD $0x03c6; BYTE $0x65 // movb $101, (%rbx) - LONG $0xff458d41 // leal $-1(%r13), %eax - WORD $0x8545; BYTE $0xed // testl %r13d, %r13d - LONG $0x01548e0f; WORD $0x0000 // jle LBB1_57, $340(%rip) - LONG $0x2b0143c6 // movb $43, $1(%rbx) - WORD $0xf883; BYTE $0x64 // cmpl $100, %eax - LONG $0x01568c0f; WORD $0x0000 // jl LBB1_61, $342(%rip) - -LBB1_60: - WORD $0xc189 // movl %eax, %ecx - LONG $0xcccccdba; BYTE $0xcc // movl $3435973837, %edx - LONG $0xd1af0f48 // imulq %rcx, %rdx - LONG $0x23eac148 // shrq $35, %rdx - WORD $0x0c8d; BYTE $0x12 // leal (%rdx,%rdx), %ecx - WORD $0x0c8d; BYTE $0x89 // leal (%rcx,%rcx,4), %ecx - WORD $0xc829 // subl %ecx, %eax - LONG $0x840d8d48; WORD $0x00c0; BYTE $0x00 // leaq $49284(%rip), %rcx /* _Digits(%rip) */ - LONG $0x510cb70f // movzwl (%rcx,%rdx,2), %ecx - LONG $0x024b8966 // movw %cx, $2(%rbx) - WORD $0x300c // orb $48, %al - WORD $0x4388; BYTE $0x04 // movb %al, $4(%rbx) - LONG $0x05c38348 // addq $5, %rbx - LONG $0x00068ee9; BYTE $0x00 // jmp LBB1_115, $1678(%rip) - -LBB1_64: - WORD $0x8545; BYTE $0xc9 // testl %r9d, %r9d - LONG $0x013c880f; WORD $0x0000 // js LBB1_65, $316(%rip) - WORD $0x634d; BYTE $0xed // movslq %r13d, %r13 - LONG $0x2f1c8d4b // leaq (%r15,%r13), %rbx - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - LONG $0x0006c6e8; BYTE $0x00 // callq _format_integer, $1734(%rip) - WORD $0x3948; BYTE $0xd8 // cmpq %rbx, %rax - LONG $0x066d830f; WORD $0x0000 // jae LBB1_115, $1645(%rip) - WORD $0x014d; BYTE $0xec // addq %r13, %r12 - WORD $0x2949; BYTE $0xc4 // subq %rax, %r12 - WORD $0x014d; BYTE $0xf4 // addq %r14, %r12 - LONG $0x80fc8149; WORD $0x0000; BYTE $0x00 // cmpq $128, %r12 - LONG $0x0317820f; WORD $0x0000 // jb LBB1_114, $791(%rip) - WORD $0x894c; BYTE $0xe1 // movq %r12, %rcx - LONG $0x80e18348 // andq $-128, %rcx - LONG $0x80798d48 // leaq $-128(%rcx), %rdi - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - LONG $0x07eec148 // shrq $7, %rsi - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0xf289 // movl %esi, %edx - WORD $0xe283; BYTE $0x03 // andl $3, %edx - LONG $0x80ff8148; WORD $0x0001; BYTE $0x00 // cmpq $384, %rdi - LONG $0x01fc830f; WORD $0x0000 // jae LBB1_107, $508(%rip) - WORD $0xff31 // xorl %edi, %edi - LONG $0x00029de9; BYTE $0x00 // jmp LBB1_109, $669(%rip) - -LBB1_11: - WORD $0xd348; BYTE $0xef // shrq %cl, %rdi - QUAD $0x0001ffffff80b848; WORD $0x0000 // movabsq $8589934464, %rax - LONG $0xe47f0548; WORD $0x540b // addq $1410065535, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x013f860f; WORD $0x0000 // jbe LBB1_18, $319(%rip) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x0be8c148 // shrq $11, %rax - LONG $0x00000bba; BYTE $0x00 // movl $11, %edx - LONG $0x0edd3d48; WORD $0x02e9 // cmpq $48828125, %rax - LONG $0x01b1820f; WORD $0x0000 // jb LBB1_28, $433(%rip) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x0ce8c148 // shrq $12, %rax - LONG $0x00000cba; BYTE $0x00 // movl $12, %edx - LONG $0x4a513d48; WORD $0x0e8d // cmpq $244140625, %rax - LONG $0x0199820f; WORD $0x0000 // jb LBB1_28, $409(%rip) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x0de8c148 // shrq $13, %rax - LONG $0x00000dba; BYTE $0x00 // movl $13, %edx - LONG $0x73953d48; WORD $0x48c2 // cmpq $1220703125, %rax - LONG $0x0181820f; WORD $0x0000 // jb LBB1_28, $385(%rip) - LONG $0x00000eba; BYTE $0x00 // movl $14, %edx - QUAD $0x5af3107a4000b848; WORD $0x0000 // movabsq $100000000000000, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x0169820f; WORD $0x0000 // jb LBB1_28, $361(%rip) - LONG $0x00000fba; BYTE $0x00 // movl $15, %edx - QUAD $0x8d7ea4c68000b848; WORD $0x0003 // movabsq $1000000000000000, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x0151820f; WORD $0x0000 // jb LBB1_28, $337(%rip) - QUAD $0x86f26fc10000b848; WORD $0x0023 // movabsq $10000000000000000, %rax - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x000011ba; BYTE $0x00 // movl $17, %edx - -LBB1_27: - WORD $0xda83; BYTE $0x00 // sbbl $0, %edx - LONG $0x000137e9; BYTE $0x00 // jmp LBB1_28, $311(%rip) - -LBB1_57: - LONG $0x2d0143c6 // movb $45, $1(%rbx) - WORD $0xd8f7 // negl %eax - WORD $0xf883; BYTE $0x64 // cmpl $100, %eax - LONG $0xfeaa8d0f; WORD $0xffff // jge LBB1_60, $-342(%rip) - -LBB1_61: - WORD $0xf883; BYTE $0x0a // cmpl $10, %eax - LONG $0x00878c0f; WORD $0x0000 // jl LBB1_63, $135(%rip) - WORD $0xc089 // movl %eax, %eax - LONG $0x3a0d8d48; WORD $0x00bf; BYTE $0x00 // leaq $48954(%rip), %rcx /* _Digits(%rip) */ - LONG $0x4104b70f // movzwl (%rcx,%rax,2), %eax - LONG $0x02438966 // movw %ax, $2(%rbx) - LONG $0x04c38348 // addq $4, %rbx - LONG $0x000549e9; BYTE $0x00 // jmp LBB1_115, $1353(%rip) - -LBB1_65: - WORD $0x8545; BYTE $0xed // testl %r13d, %r13d - LONG $0x031f8f0f; WORD $0x0000 // jg LBB1_78, $799(%rip) - LONG $0x07c74166; WORD $0x2e30 // movw $11824, (%r15) - LONG $0x02c78349 // addq $2, %r15 - WORD $0x8545; BYTE $0xed // testl %r13d, %r13d - LONG $0x030c890f; WORD $0x0000 // jns LBB1_78, $780(%rip) - WORD $0x8941; BYTE $0xd0 // movl %edx, %r8d - WORD $0xf741; BYTE $0xd0 // notl %r8d - WORD $0x2945; BYTE $0xc8 // subl %r9d, %r8d - WORD $0xc031 // xorl %eax, %eax - LONG $0x7ff88341 // cmpl $127, %r8d - LONG $0x02de820f; WORD $0x0000 // jb LBB1_76, $734(%rip) - WORD $0xff49; BYTE $0xc0 // incq %r8 - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - QUAD $0x0001ffffff80b948; WORD $0x0000 // movabsq $8589934464, %rcx - WORD $0x2148; BYTE $0xc8 // andq %rcx, %rax - LONG $0x80488d48 // leaq $-128(%rax), %rcx - WORD $0x8948; BYTE $0xce // movq %rcx, %rsi - LONG $0x07eec148 // shrq $7, %rsi - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x8941; BYTE $0xf1 // movl %esi, %r9d - LONG $0x03e18341 // andl $3, %r9d - LONG $0x80f98148; WORD $0x0001; BYTE $0x00 // cmpq $384, %rcx - LONG $0x01b7830f; WORD $0x0000 // jae LBB1_70, $439(%rip) - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x00025ae9; BYTE $0x00 // jmp LBB1_72, $602(%rip) - -LBB1_63: - WORD $0x3004 // addb $48, %al - WORD $0x4388; BYTE $0x02 // movb %al, $2(%rbx) - LONG $0x03c38348 // addq $3, %rbx - LONG $0x0004cee9; BYTE $0x00 // jmp LBB1_115, $1230(%rip) - -LBB1_18: - LONG $0x000001ba; BYTE $0x00 // movl $1, %edx - LONG $0x0aff8348 // cmpq $10, %rdi - LONG $0x007b820f; WORD $0x0000 // jb LBB1_28, $123(%rip) - LONG $0x000002ba; BYTE $0x00 // movl $2, %edx - LONG $0x64ff8348 // cmpq $100, %rdi - LONG $0x006c820f; WORD $0x0000 // jb LBB1_28, $108(%rip) - LONG $0x000003ba; BYTE $0x00 // movl $3, %edx - LONG $0xe8ff8148; WORD $0x0003; BYTE $0x00 // cmpq $1000, %rdi - LONG $0x005a820f; WORD $0x0000 // jb LBB1_28, $90(%rip) - LONG $0x000004ba; BYTE $0x00 // movl $4, %edx - LONG $0x10ff8148; WORD $0x0027; BYTE $0x00 // cmpq $10000, %rdi - LONG $0x0048820f; WORD $0x0000 // jb LBB1_28, $72(%rip) - LONG $0x000005ba; BYTE $0x00 // movl $5, %edx - LONG $0xa0ff8148; WORD $0x0186; BYTE $0x00 // cmpq $100000, %rdi - LONG $0x0036820f; WORD $0x0000 // jb LBB1_28, $54(%rip) - LONG $0x000006ba; BYTE $0x00 // movl $6, %edx - LONG $0x40ff8148; WORD $0x0f42; BYTE $0x00 // cmpq $1000000, %rdi - LONG $0x0024820f; WORD $0x0000 // jb LBB1_28, $36(%rip) - LONG $0x000007ba; BYTE $0x00 // movl $7, %edx - LONG $0x80ff8148; WORD $0x9896; BYTE $0x00 // cmpq $10000000, %rdi - LONG $0x0012820f; WORD $0x0000 // jb LBB1_28, $18(%rip) - LONG $0x000008ba; BYTE $0x00 // movl $8, %edx - LONG $0x00ff8148; WORD $0xf5e1; BYTE $0x05 // cmpq $100000000, %rdi - LONG $0x0480830f; WORD $0x0000 // jae LBB1_26, $1152(%rip) - -LBB1_28: - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - LONG $0x00048ce8; BYTE $0x00 // callq _format_integer, $1164(%rip) - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - LONG $0x000434e9; BYTE $0x00 // jmp LBB1_115, $1076(%rip) - -LBB1_107: - LONG $0xfce68348 // andq $-4, %rsi - WORD $0xf748; BYTE $0xde // negq %rsi - WORD $0xff31 // xorl %edi, %edi - QUAD $0xfffff923056ffdc5 // vmovdqa $-1757(%rip), %ymm0 /* LCPI1_0(%rip) */ - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB1_108: - LONG $0x047ffec5; BYTE $0x38 // vmovdqu %ymm0, (%rax,%rdi) - LONG $0x447ffec5; WORD $0x2038 // vmovdqu %ymm0, $32(%rax,%rdi) - LONG $0x447ffec5; WORD $0x4038 // vmovdqu %ymm0, $64(%rax,%rdi) - LONG $0x447ffec5; WORD $0x6038 // vmovdqu %ymm0, $96(%rax,%rdi) - QUAD $0x00008038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $128(%rax,%rdi) - QUAD $0x0000a038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $160(%rax,%rdi) - QUAD $0x0000c038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $192(%rax,%rdi) - QUAD $0x0000e038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $224(%rax,%rdi) - QUAD $0x00010038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $256(%rax,%rdi) - QUAD $0x00012038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $288(%rax,%rdi) - QUAD $0x00014038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $320(%rax,%rdi) - QUAD $0x00016038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $352(%rax,%rdi) - QUAD $0x00018038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $384(%rax,%rdi) - QUAD $0x0001a038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $416(%rax,%rdi) - QUAD $0x0001c038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $448(%rax,%rdi) - QUAD $0x0001e038847ffec5; BYTE $0x00 // vmovdqu %ymm0, $480(%rax,%rdi) - LONG $0x00c78148; WORD $0x0002; BYTE $0x00 // addq $512, %rdi - LONG $0x04c68348 // addq $4, %rsi - LONG $0xff6c850f; WORD $0xffff // jne LBB1_108, $-148(%rip) - -LBB1_109: - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x0033840f; WORD $0x0000 // je LBB1_112, $51(%rip) - LONG $0x07748d48; BYTE $0x60 // leaq $96(%rdi,%rax), %rsi - WORD $0xf748; BYTE $0xda // negq %rdx - QUAD $0xfffff873056ffdc5 // vmovdqa $-1933(%rip), %ymm0 /* LCPI1_0(%rip) */ - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB1_111: - LONG $0x467ffec5; BYTE $0xa0 // vmovdqu %ymm0, $-96(%rsi) - LONG $0x467ffec5; BYTE $0xc0 // vmovdqu %ymm0, $-64(%rsi) - LONG $0x467ffec5; BYTE $0xe0 // vmovdqu %ymm0, $-32(%rsi) - LONG $0x067ffec5 // vmovdqu %ymm0, (%rsi) - LONG $0x80ee8348 // subq $-128, %rsi - WORD $0xff48; BYTE $0xc2 // incq %rdx - LONG $0xffe0850f; WORD $0xffff // jne LBB1_111, $-32(%rip) - -LBB1_112: - WORD $0x394c; BYTE $0xe1 // cmpq %r12, %rcx - LONG $0x0347840f; WORD $0x0000 // je LBB1_115, $839(%rip) - WORD $0x0148; BYTE $0xc8 // addq %rcx, %rax - LONG $0x90909090 // .p2align 4, 0x90 - -LBB1_114: - WORD $0x00c6; BYTE $0x30 // movb $48, (%rax) - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x3948; BYTE $0xc3 // cmpq %rax, %rbx - LONG $0xfff1850f; WORD $0xffff // jne LBB1_114, $-15(%rip) - LONG $0x00032ce9; BYTE $0x00 // jmp LBB1_115, $812(%rip) - -LBB1_70: - QUAD $0x000001e2349c8d4b // leaq $482(%r12,%r14), %rbx - LONG $0xfce68348 // andq $-4, %rsi - WORD $0xf748; BYTE $0xde // negq %rsi - WORD $0xc931 // xorl %ecx, %ecx - QUAD $0xfffff813056ffdc5 // vmovdqa $-2029(%rip), %ymm0 /* LCPI1_0(%rip) */ - -LBB1_71: - QUAD $0xfffe200b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-480(%rbx,%rcx) - QUAD $0xfffe400b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-448(%rbx,%rcx) - QUAD $0xfffe600b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-416(%rbx,%rcx) - QUAD $0xfffe800b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-384(%rbx,%rcx) - QUAD $0xfffea00b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-352(%rbx,%rcx) - QUAD $0xfffec00b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-320(%rbx,%rcx) - QUAD $0xfffee00b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-288(%rbx,%rcx) - QUAD $0xffff000b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-256(%rbx,%rcx) - QUAD $0xffff200b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-224(%rbx,%rcx) - QUAD $0xffff400b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-192(%rbx,%rcx) - QUAD $0xffff600b847ffec5; BYTE $0xff // vmovdqu %ymm0, $-160(%rbx,%rcx) - LONG $0x447ffec5; WORD $0x800b // vmovdqu %ymm0, $-128(%rbx,%rcx) - LONG $0x447ffec5; WORD $0xa00b // vmovdqu %ymm0, $-96(%rbx,%rcx) - LONG $0x447ffec5; WORD $0xc00b // vmovdqu %ymm0, $-64(%rbx,%rcx) - LONG $0x447ffec5; WORD $0xe00b // vmovdqu %ymm0, $-32(%rbx,%rcx) - LONG $0x047ffec5; BYTE $0x0b // vmovdqu %ymm0, (%rbx,%rcx) - LONG $0x00c18148; WORD $0x0002; BYTE $0x00 // addq $512, %rcx - LONG $0x04c68348 // addq $4, %rsi - LONG $0xff6f850f; WORD $0xffff // jne LBB1_71, $-145(%rip) - -LBB1_72: - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x0033840f; WORD $0x0000 // je LBB1_75, $51(%rip) - WORD $0x014c; BYTE $0xe1 // addq %r12, %rcx - LONG $0x0e4c8d49; BYTE $0x62 // leaq $98(%r14,%rcx), %rcx - WORD $0xf749; BYTE $0xd9 // negq %r9 - QUAD $0xfffff766056ffdc5 // vmovdqa $-2202(%rip), %ymm0 /* LCPI1_0(%rip) */ - -LBB1_74: - LONG $0x417ffec5; BYTE $0xa0 // vmovdqu %ymm0, $-96(%rcx) - LONG $0x417ffec5; BYTE $0xc0 // vmovdqu %ymm0, $-64(%rcx) - LONG $0x417ffec5; BYTE $0xe0 // vmovdqu %ymm0, $-32(%rcx) - LONG $0x017ffec5 // vmovdqu %ymm0, (%rcx) - LONG $0x80e98348 // subq $-128, %rcx - WORD $0xff49; BYTE $0xc1 // incq %r9 - LONG $0xffe0850f; WORD $0xffff // jne LBB1_74, $-32(%rip) - -LBB1_75: - WORD $0x0149; BYTE $0xc7 // addq %rax, %r15 - WORD $0x3949; BYTE $0xc0 // cmpq %rax, %r8 - LONG $0x0019840f; WORD $0x0000 // je LBB1_78, $25(%rip) - -LBB1_76: - WORD $0x0144; BYTE $0xe8 // addl %r13d, %eax - WORD $0xd8f7 // negl %eax - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB1_77: - LONG $0x3007c641 // movb $48, (%r15) - WORD $0xff49; BYTE $0xc7 // incq %r15 - WORD $0xc8ff // decl %eax - LONG $0xfff1850f; WORD $0xffff // jne LBB1_77, $-15(%rip) - -LBB1_78: - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x0087a6e8; BYTE $0x00 // callq _format_significand, $34726(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB1_79: - LONG $0x30ff7880 // cmpb $48, $-1(%rax) - LONG $0xff408d48 // leaq $-1(%rax), %rax - LONG $0xfff2840f; WORD $0xffff // je LBB1_79, $-14(%rip) - LONG $0x01588d48 // leaq $1(%rax), %rbx - WORD $0x8545; BYTE $0xed // testl %r13d, %r13d - LONG $0x01f58e0f; WORD $0x0000 // jle LBB1_115, $501(%rip) - WORD $0xda89 // movl %ebx, %edx - WORD $0x2944; BYTE $0xfa // subl %r15d, %edx - WORD $0x8944; BYTE $0xe9 // movl %r13d, %ecx - WORD $0xd129 // subl %edx, %ecx - LONG $0x00258d0f; WORD $0x0000 // jge LBB1_82, $37(%rip) - WORD $0x2944; BYTE $0xea // subl %r13d, %edx - LONG $0x00c48e0f; WORD $0x0000 // jle LBB1_100, $196(%rip) - WORD $0xd689 // movl %edx, %esi - LONG $0xff568d48 // leaq $-1(%rsi), %rdx - WORD $0xf189 // movl %esi, %ecx - WORD $0xe183; BYTE $0x03 // andl $3, %ecx - LONG $0x03fa8348 // cmpq $3, %rdx - LONG $0x005c830f; WORD $0x0000 // jae LBB1_101, $92(%rip) - WORD $0xd231 // xorl %edx, %edx - LONG $0x000078e9; BYTE $0x00 // jmp LBB1_97, $120(%rip) - -LBB1_82: - LONG $0x01ba8e0f; WORD $0x0000 // jle LBB1_115, $442(%rip) - WORD $0x0145; BYTE $0xfd // addl %r15d, %r13d - WORD $0x8941; BYTE $0xd8 // movl %ebx, %r8d - WORD $0xf741; BYTE $0xd0 // notl %r8d - WORD $0x0145; BYTE $0xe8 // addl %r13d, %r8d - WORD $0xd231 // xorl %edx, %edx - LONG $0x7ef88341 // cmpl $126, %r8d - LONG $0x0192860f; WORD $0x0000 // jbe LBB1_92, $402(%rip) - WORD $0xff49; BYTE $0xc0 // incq %r8 - QUAD $0x0001ffffff80b949; WORD $0x0000 // movabsq $8589934464, %r9 - WORD $0x214d; BYTE $0xc1 // andq %r8, %r9 - LONG $0x80518d49 // leaq $-128(%r9), %rdx - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - LONG $0x07efc148 // shrq $7, %rdi - WORD $0xff48; BYTE $0xc7 // incq %rdi - WORD $0xfe89 // movl %edi, %esi - WORD $0xe683; BYTE $0x03 // andl $3, %esi - LONG $0x80fa8148; WORD $0x0001; BYTE $0x00 // cmpq $384, %rdx - LONG $0x006e830f; WORD $0x0000 // jae LBB1_86, $110(%rip) - WORD $0xd231 // xorl %edx, %edx - LONG $0x00010de9; BYTE $0x00 // jmp LBB1_88, $269(%rip) - -LBB1_101: - WORD $0xe683; BYTE $0xfc // andl $-4, %esi - WORD $0xf748; BYTE $0xde // negq %rsi - WORD $0xd231 // xorl %edx, %edx - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB1_102: - LONG $0xfd107c8b // movl $-3(%rax,%rdx), %edi - LONG $0xfe107c89 // movl %edi, $-2(%rax,%rdx) - LONG $0xfcc28348 // addq $-4, %rdx - WORD $0x3948; BYTE $0xd6 // cmpq %rdx, %rsi - LONG $0xffeb850f; WORD $0xffff // jne LBB1_102, $-21(%rip) - WORD $0xf748; BYTE $0xda // negq %rdx - -LBB1_97: - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x0027840f; WORD $0x0000 // je LBB1_100, $39(%rip) - WORD $0xf748; BYTE $0xda // negq %rdx - WORD $0xf748; BYTE $0xd9 // negq %rcx - WORD $0xf631 // xorl %esi, %esi - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB1_99: - LONG $0x323c8d48 // leaq (%rdx,%rsi), %rdi - LONG $0x381cb60f // movzbl (%rax,%rdi), %ebx - LONG $0x01385c88 // movb %bl, $1(%rax,%rdi) - WORD $0xff48; BYTE $0xce // decq %rsi - WORD $0x3948; BYTE $0xf1 // cmpq %rsi, %rcx - LONG $0xffe8850f; WORD $0xffff // jne LBB1_99, $-24(%rip) - -LBB1_100: - WORD $0x6349; BYTE $0xcd // movslq %r13d, %rcx - LONG $0x0f04c641; BYTE $0x2e // movb $46, (%r15,%rcx) - LONG $0x02c08348 // addq $2, %rax - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - LONG $0x000104e9; BYTE $0x00 // jmp LBB1_115, $260(%rip) - -LBB1_86: - LONG $0xfce78348 // andq $-4, %rdi - WORD $0xf748; BYTE $0xdf // negq %rdi - WORD $0xd231 // xorl %edx, %edx - QUAD $0xfffff5f3056ffdc5 // vmovdqa $-2573(%rip), %ymm0 /* LCPI1_0(%rip) */ - -LBB1_87: - LONG $0x447ffec5; WORD $0x0110 // vmovdqu %ymm0, $1(%rax,%rdx) - LONG $0x447ffec5; WORD $0x2110 // vmovdqu %ymm0, $33(%rax,%rdx) - LONG $0x447ffec5; WORD $0x4110 // vmovdqu %ymm0, $65(%rax,%rdx) - LONG $0x447ffec5; WORD $0x6110 // vmovdqu %ymm0, $97(%rax,%rdx) - QUAD $0x00008110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $129(%rax,%rdx) - QUAD $0x0000a110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $161(%rax,%rdx) - QUAD $0x0000c110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $193(%rax,%rdx) - QUAD $0x0000e110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $225(%rax,%rdx) - QUAD $0x00010110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $257(%rax,%rdx) - QUAD $0x00012110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $289(%rax,%rdx) - QUAD $0x00014110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $321(%rax,%rdx) - QUAD $0x00016110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $353(%rax,%rdx) - QUAD $0x00018110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $385(%rax,%rdx) - QUAD $0x0001a110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $417(%rax,%rdx) - QUAD $0x0001c110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $449(%rax,%rdx) - QUAD $0x0001e110847ffec5; BYTE $0x00 // vmovdqu %ymm0, $481(%rax,%rdx) - LONG $0x00c28148; WORD $0x0002; BYTE $0x00 // addq $512, %rdx - LONG $0x04c78348 // addq $4, %rdi - LONG $0xff6b850f; WORD $0xffff // jne LBB1_87, $-149(%rip) - -LBB1_88: - LONG $0x085c8d4a; BYTE $0x01 // leaq $1(%rax,%r9), %rbx - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x0030840f; WORD $0x0000 // je LBB1_91, $48(%rip) - LONG $0x10448d48; BYTE $0x61 // leaq $97(%rax,%rdx), %rax - WORD $0xf748; BYTE $0xde // negq %rsi - QUAD $0xfffff540056ffdc5 // vmovdqa $-2752(%rip), %ymm0 /* LCPI1_0(%rip) */ - -LBB1_90: - LONG $0x407ffec5; BYTE $0xa0 // vmovdqu %ymm0, $-96(%rax) - LONG $0x407ffec5; BYTE $0xc0 // vmovdqu %ymm0, $-64(%rax) - LONG $0x407ffec5; BYTE $0xe0 // vmovdqu %ymm0, $-32(%rax) - LONG $0x007ffec5 // vmovdqu %ymm0, (%rax) - LONG $0x80e88348 // subq $-128, %rax - WORD $0xff48; BYTE $0xc6 // incq %rsi - LONG $0xffe0850f; WORD $0xffff // jne LBB1_90, $-32(%rip) - -LBB1_91: - WORD $0x8944; BYTE $0xca // movl %r9d, %edx - WORD $0x394d; BYTE $0xc8 // cmpq %r9, %r8 - LONG $0x0014840f; WORD $0x0000 // je LBB1_115, $20(%rip) - LONG $0x90909090 // .p2align 4, 0x90 - -LBB1_92: - WORD $0x03c6; BYTE $0x30 // movb $48, (%rbx) - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0xc2ff // incl %edx - WORD $0xca39 // cmpl %ecx, %edx - LONG $0xfff08c0f; WORD $0xffff // jl LBB1_92, $-16(%rip) - -LBB1_115: - WORD $0x2944; BYTE $0xf3 // subl %r14d, %ebx - -LBB1_116: - WORD $0xd889 // movl %ebx, %eax - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB1_49: - LONG $0x00ff8148; WORD $0x9aca; BYTE $0x3b // cmpq $1000000000, %rdi - LONG $0x00000aba; BYTE $0x00 // movl $10, %edx - LONG $0xfff7e6e9; BYTE $0xff // jmp LBB1_50, $-2074(%rip) - -LBB1_1: - WORD $0xdb31 // xorl %ebx, %ebx - LONG $0xffffd4e9; BYTE $0xff // jmp LBB1_116, $-44(%rip) - -LBB1_5: - LONG $0xfffbcebb; BYTE $0xff // movl $-1074, %ebx - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - LONG $0xfff57ae9; BYTE $0xff // jmp LBB1_6, $-2694(%rip) - -LBB1_26: - LONG $0x00ff8148; WORD $0x9aca; BYTE $0x3b // cmpq $1000000000, %rdi - LONG $0x00000aba; BYTE $0x00 // movl $10, %edx - LONG $0xfffa30e9; BYTE $0xff // jmp LBB1_27, $-1488(%rip) - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_format_integer: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - BYTE $0x53 // pushq %rbx - WORD $0x8941; BYTE $0xd0 // movl %edx, %r8d - WORD $0x0149; BYTE $0xf0 // addq %rsi, %r8 - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x20e8c148 // shrq $32, %rax - LONG $0x0016850f; WORD $0x0000 // jne LBB2_2, $22(%rip) - WORD $0x894d; BYTE $0xc3 // movq %r8, %r11 - LONG $0x2710ff81; WORD $0x0000 // cmpl $10000, %edi - LONG $0x00c3830f; WORD $0x0000 // jae LBB2_5, $195(%rip) - -LBB2_4: - WORD $0xfa89 // movl %edi, %edx - LONG $0x00011ae9; BYTE $0x00 // jmp LBB2_7, $282(%rip) - -LBB2_2: - QUAD $0x77118461cefdb948; WORD $0xabcc // movabsq $-6067343680855748867, %rcx - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - WORD $0xf748; BYTE $0xe1 // mulq %rcx - LONG $0x1aeac148 // shrq $26, %rdx - LONG $0x1f00ca69; WORD $0xfa0a // imull $-100000000, %edx, %ecx - WORD $0xf901 // addl %edi, %ecx - LONG $0x1759b941; WORD $0xd1b7 // movl $3518437209, %r9d - WORD $0x8948; BYTE $0xc8 // movq %rcx, %rax - LONG $0xc1af0f49 // imulq %r9, %rax - LONG $0x2de8c148 // shrq $45, %rax - LONG $0x2710f869; WORD $0x0000 // imull $10000, %eax, %edi - WORD $0xf929 // subl %edi, %ecx - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - LONG $0xf9af0f49 // imulq %r9, %rdi - LONG $0x2defc148 // shrq $45, %rdi - LONG $0x2710ff69; WORD $0x0000 // imull $10000, %edi, %edi - WORD $0xf829 // subl %edi, %eax - WORD $0xb70f; BYTE $0xf9 // movzwl %cx, %edi - WORD $0xefc1; BYTE $0x02 // shrl $2, %edi - LONG $0x7bcf6944; WORD $0x0014; BYTE $0x00 // imull $5243, %edi, %r9d - LONG $0x11e9c141 // shrl $17, %r9d - LONG $0x64f96b41 // imull $100, %r9d, %edi - WORD $0xf929 // subl %edi, %ecx - LONG $0xd1b70f44 // movzwl %cx, %r10d - WORD $0xb70f; BYTE $0xf8 // movzwl %ax, %edi - WORD $0xefc1; BYTE $0x02 // shrl $2, %edi - LONG $0x147bff69; WORD $0x0000 // imull $5243, %edi, %edi - WORD $0xefc1; BYTE $0x11 // shrl $17, %edi - WORD $0xcf6b; BYTE $0x64 // imull $100, %edi, %ecx - WORD $0xc829 // subl %ecx, %eax - LONG $0xd8b70f44 // movzwl %ax, %r11d - LONG $0xe00d8d48; WORD $0x00b8; BYTE $0x00 // leaq $47328(%rip), %rcx /* _Digits(%rip) */ - LONG $0x04b70f42; BYTE $0x51 // movzwl (%rcx,%r10,2), %eax - LONG $0x40894166; BYTE $0xfe // movw %ax, $-2(%r8) - LONG $0x04b70f42; BYTE $0x49 // movzwl (%rcx,%r9,2), %eax - LONG $0x40894166; BYTE $0xfc // movw %ax, $-4(%r8) - LONG $0x04b70f42; BYTE $0x59 // movzwl (%rcx,%r11,2), %eax - LONG $0x40894166; BYTE $0xfa // movw %ax, $-6(%r8) - LONG $0xf8588d4d // leaq $-8(%r8), %r11 - LONG $0x790cb70f // movzwl (%rcx,%rdi,2), %ecx - LONG $0x48894166; BYTE $0xf8 // movw %cx, $-8(%r8) - WORD $0x8948; BYTE $0xd7 // movq %rdx, %rdi - LONG $0x2710ff81; WORD $0x0000 // cmpl $10000, %edi - LONG $0xff3d820f; WORD $0xffff // jb LBB2_4, $-195(%rip) - -LBB2_5: - LONG $0x1759b941; WORD $0xd1b7 // movl $3518437209, %r9d - LONG $0x99158d4c; WORD $0x00b8; BYTE $0x00 // leaq $47257(%rip), %r10 /* _Digits(%rip) */ - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB2_6: - WORD $0xfa89 // movl %edi, %edx - LONG $0xd1af0f49 // imulq %r9, %rdx - LONG $0x2deac148 // shrq $45, %rdx - LONG $0xd8f0ca69; WORD $0xffff // imull $-10000, %edx, %ecx - WORD $0xf901 // addl %edi, %ecx - LONG $0x1fc16948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rcx, %rax - LONG $0x25e8c148 // shrq $37, %rax - WORD $0xd86b; BYTE $0x64 // imull $100, %eax, %ebx - WORD $0xd929 // subl %ebx, %ecx - LONG $0x0cb70f41; BYTE $0x4a // movzwl (%r10,%rcx,2), %ecx - LONG $0x4b894166; BYTE $0xfe // movw %cx, $-2(%r11) - LONG $0x04b70f41; BYTE $0x42 // movzwl (%r10,%rax,2), %eax - LONG $0x43894166; BYTE $0xfc // movw %ax, $-4(%r11) - LONG $0xfcc38349 // addq $-4, %r11 - LONG $0xe0ffff81; WORD $0x05f5 // cmpl $99999999, %edi - WORD $0xd789 // movl %edx, %edi - LONG $0xffb8870f; WORD $0xffff // ja LBB2_6, $-72(%rip) - -LBB2_7: - WORD $0xfa83; BYTE $0x64 // cmpl $100, %edx - LONG $0x002d820f; WORD $0x0000 // jb LBB2_9, $45(%rip) - WORD $0xb70f; BYTE $0xc2 // movzwl %dx, %eax - WORD $0xe8c1; BYTE $0x02 // shrl $2, %eax - LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax - WORD $0xe8c1; BYTE $0x11 // shrl $17, %eax - WORD $0xc86b; BYTE $0x64 // imull $100, %eax, %ecx - WORD $0xca29 // subl %ecx, %edx - WORD $0xb70f; BYTE $0xca // movzwl %dx, %ecx - LONG $0x21158d48; WORD $0x00b8; BYTE $0x00 // leaq $47137(%rip), %rdx /* _Digits(%rip) */ - LONG $0x4a0cb70f // movzwl (%rdx,%rcx,2), %ecx - LONG $0x4b894166; BYTE $0xfe // movw %cx, $-2(%r11) - LONG $0xfec38349 // addq $-2, %r11 - WORD $0xc289 // movl %eax, %edx - -LBB2_9: - WORD $0xfa83; BYTE $0x0a // cmpl $10, %edx - LONG $0x0018820f; WORD $0x0000 // jb LBB2_11, $24(%rip) - WORD $0xd089 // movl %edx, %eax - LONG $0x000d8d48; WORD $0x00b8; BYTE $0x00 // leaq $47104(%rip), %rcx /* _Digits(%rip) */ - LONG $0x4104b70f // movzwl (%rcx,%rax,2), %eax - LONG $0x43894166; BYTE $0xfe // movw %ax, $-2(%r11) - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB2_11: - WORD $0xc280; BYTE $0x30 // addb $48, %dl - WORD $0x1688 // movb %dl, (%rsi) - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -_i64toa: - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x0005880f; WORD $0x0000 // js LBB3_1, $5(%rip) - LONG $0x000062e9; BYTE $0x00 // jmp _u64toa, $98(%rip) - -LBB3_1: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x07c6; BYTE $0x2d // movb $45, (%rdi) - WORD $0xff48; BYTE $0xc7 // incq %rdi - WORD $0xf748; BYTE $0xde // negq %rsi - LONG $0x000050e8; BYTE $0x00 // callq _u64toa, $80(%rip) - WORD $0xc0ff // incl %eax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x0000000000000000; LONG $0x00000000 // .p2align 4, 0x00 - -LCPI4_0: - QUAD $0x00000000d1b71759 // .quad 3518437209 - QUAD $0x00000000d1b71759 // .quad 3518437209 - -LCPI4_3: - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - WORD $0x000a // .word 10 - -LCPI4_4: - QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' - - // .p2align 3, 0x00 -LCPI4_1: - QUAD $0x80003334147b20c5 // .quad -9223315738079846203 - -LCPI4_2: - QUAD $0x8000200008000080 // .quad -9223336852348469120 - - // .p2align 4, 0x90 -_u64toa: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - LONG $0x0ffe8148; WORD $0x0027; BYTE $0x00 // cmpq $9999, %rsi - LONG $0x00a2870f; WORD $0x0000 // ja LBB4_8, $162(%rip) - WORD $0xb70f; BYTE $0xc6 // movzwl %si, %eax - WORD $0xe8c1; BYTE $0x02 // shrl $2, %eax - LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax - WORD $0xe8c1; BYTE $0x11 // shrl $17, %eax - LONG $0x00148d48 // leaq (%rax,%rax), %rdx - WORD $0xc06b; BYTE $0x64 // imull $100, %eax, %eax - WORD $0xf189 // movl %esi, %ecx - WORD $0xc129 // subl %eax, %ecx - WORD $0xb70f; BYTE $0xc1 // movzwl %cx, %eax - WORD $0x0148; BYTE $0xc0 // addq %rax, %rax - LONG $0x03e8fe81; WORD $0x0000 // cmpl $1000, %esi - LONG $0x0016820f; WORD $0x0000 // jb LBB4_3, $22(%rip) - LONG $0x2c0d8d48; WORD $0x00b7; BYTE $0x00 // leaq $46892(%rip), %rcx /* _Digits(%rip) */ - WORD $0x0c8a; BYTE $0x0a // movb (%rdx,%rcx), %cl - WORD $0x0f88 // movb %cl, (%rdi) - LONG $0x000001b9; BYTE $0x00 // movl $1, %ecx - LONG $0x00000be9; BYTE $0x00 // jmp LBB4_4, $11(%rip) - -LBB4_3: - WORD $0xc931 // xorl %ecx, %ecx - WORD $0xfe83; BYTE $0x64 // cmpl $100, %esi - LONG $0x0045820f; WORD $0x0000 // jb LBB4_5, $69(%rip) - -LBB4_4: - WORD $0xb70f; BYTE $0xd2 // movzwl %dx, %edx - LONG $0x01ca8348 // orq $1, %rdx - LONG $0x04358d48; WORD $0x00b7; BYTE $0x00 // leaq $46852(%rip), %rsi /* _Digits(%rip) */ - WORD $0x148a; BYTE $0x32 // movb (%rdx,%rsi), %dl - WORD $0xce89 // movl %ecx, %esi - WORD $0xc1ff // incl %ecx - WORD $0x1488; BYTE $0x37 // movb %dl, (%rdi,%rsi) - -LBB4_6: - LONG $0xf3158d48; WORD $0x00b6; BYTE $0x00 // leaq $46835(%rip), %rdx /* _Digits(%rip) */ - WORD $0x148a; BYTE $0x10 // movb (%rax,%rdx), %dl - WORD $0xce89 // movl %ecx, %esi - WORD $0xc1ff // incl %ecx - WORD $0x1488; BYTE $0x37 // movb %dl, (%rdi,%rsi) - -LBB4_7: - WORD $0xb70f; BYTE $0xc0 // movzwl %ax, %eax - LONG $0x01c88348 // orq $1, %rax - LONG $0xdb158d48; WORD $0x00b6; BYTE $0x00 // leaq $46811(%rip), %rdx /* _Digits(%rip) */ - WORD $0x048a; BYTE $0x10 // movb (%rax,%rdx), %al - WORD $0xca89 // movl %ecx, %edx - WORD $0xc1ff // incl %ecx - WORD $0x0488; BYTE $0x17 // movb %al, (%rdi,%rdx) - WORD $0xc889 // movl %ecx, %eax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB4_5: - WORD $0xc931 // xorl %ecx, %ecx - WORD $0xfe83; BYTE $0x0a // cmpl $10, %esi - LONG $0xffc8830f; WORD $0xffff // jae LBB4_6, $-56(%rip) - LONG $0xffffd4e9; BYTE $0xff // jmp LBB4_7, $-44(%rip) - -LBB4_8: - LONG $0xfffe8148; WORD $0xf5e0; BYTE $0x05 // cmpq $99999999, %rsi - LONG $0x011e870f; WORD $0x0000 // ja LBB4_16, $286(%rip) - WORD $0xf089 // movl %esi, %eax - LONG $0xb71759ba; BYTE $0xd1 // movl $3518437209, %edx - LONG $0xd0af0f48 // imulq %rax, %rdx - LONG $0x2deac148 // shrq $45, %rdx - LONG $0x10c26944; WORD $0x0027; BYTE $0x00 // imull $10000, %edx, %r8d - WORD $0xf189 // movl %esi, %ecx - WORD $0x2944; BYTE $0xc1 // subl %r8d, %ecx - LONG $0x83d0694c; WORD $0x1bde; BYTE $0x43 // imulq $1125899907, %rax, %r10 - LONG $0x31eac149 // shrq $49, %r10 - LONG $0xfee28341 // andl $-2, %r10d - WORD $0xb70f; BYTE $0xc2 // movzwl %dx, %eax - WORD $0xe8c1; BYTE $0x02 // shrl $2, %eax - LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax - WORD $0xe8c1; BYTE $0x11 // shrl $17, %eax - WORD $0xc06b; BYTE $0x64 // imull $100, %eax, %eax - WORD $0xc229 // subl %eax, %edx - LONG $0xcab70f44 // movzwl %dx, %r9d - WORD $0x014d; BYTE $0xc9 // addq %r9, %r9 - WORD $0xb70f; BYTE $0xc1 // movzwl %cx, %eax - WORD $0xe8c1; BYTE $0x02 // shrl $2, %eax - LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax - WORD $0xe8c1; BYTE $0x11 // shrl $17, %eax - LONG $0x00048d4c // leaq (%rax,%rax), %r8 - WORD $0xc06b; BYTE $0x64 // imull $100, %eax, %eax - WORD $0xc129 // subl %eax, %ecx - LONG $0xd9b70f44 // movzwl %cx, %r11d - WORD $0x014d; BYTE $0xdb // addq %r11, %r11 - LONG $0x9680fe81; WORD $0x0098 // cmpl $10000000, %esi - LONG $0x0017820f; WORD $0x0000 // jb LBB4_11, $23(%rip) - LONG $0x39058d48; WORD $0x00b6; BYTE $0x00 // leaq $46649(%rip), %rax /* _Digits(%rip) */ - LONG $0x02048a41 // movb (%r10,%rax), %al - WORD $0x0788 // movb %al, (%rdi) - LONG $0x000001b9; BYTE $0x00 // movl $1, %ecx - LONG $0x00000ee9; BYTE $0x00 // jmp LBB4_12, $14(%rip) - -LBB4_11: - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x4240fe81; WORD $0x000f // cmpl $1000000, %esi - LONG $0x0076820f; WORD $0x0000 // jb LBB4_13, $118(%rip) - -LBB4_12: - WORD $0x8944; BYTE $0xd0 // movl %r10d, %eax - LONG $0x01c88348 // orq $1, %rax - LONG $0x0d358d48; WORD $0x00b6; BYTE $0x00 // leaq $46605(%rip), %rsi /* _Digits(%rip) */ - WORD $0x048a; BYTE $0x30 // movb (%rax,%rsi), %al - WORD $0xce89 // movl %ecx, %esi - WORD $0xc1ff // incl %ecx - WORD $0x0488; BYTE $0x37 // movb %al, (%rdi,%rsi) - -LBB4_14: - LONG $0xfc058d48; WORD $0x00b5; BYTE $0x00 // leaq $46588(%rip), %rax /* _Digits(%rip) */ - LONG $0x01048a41 // movb (%r9,%rax), %al - WORD $0xce89 // movl %ecx, %esi - WORD $0xc1ff // incl %ecx - WORD $0x0488; BYTE $0x37 // movb %al, (%rdi,%rsi) - -LBB4_15: - LONG $0xc1b70f41 // movzwl %r9w, %eax - LONG $0x01c88348 // orq $1, %rax - LONG $0xe2358d48; WORD $0x00b5; BYTE $0x00 // leaq $46562(%rip), %rsi /* _Digits(%rip) */ - WORD $0x048a; BYTE $0x30 // movb (%rax,%rsi), %al - WORD $0xca89 // movl %ecx, %edx - WORD $0x0488; BYTE $0x17 // movb %al, (%rdi,%rdx) - LONG $0x30048a41 // movb (%r8,%rsi), %al - LONG $0x01174488 // movb %al, $1(%rdi,%rdx) - LONG $0xc0b70f41 // movzwl %r8w, %eax - LONG $0x01c88348 // orq $1, %rax - WORD $0x048a; BYTE $0x30 // movb (%rax,%rsi), %al - LONG $0x02174488 // movb %al, $2(%rdi,%rdx) - LONG $0x33048a41 // movb (%r11,%rsi), %al - LONG $0x03174488 // movb %al, $3(%rdi,%rdx) - LONG $0xc3b70f41 // movzwl %r11w, %eax - LONG $0x01c88348 // orq $1, %rax - WORD $0x048a; BYTE $0x30 // movb (%rax,%rsi), %al - WORD $0xc183; BYTE $0x05 // addl $5, %ecx - LONG $0x04174488 // movb %al, $4(%rdi,%rdx) - WORD $0xc889 // movl %ecx, %eax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB4_13: - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x86a0fe81; WORD $0x0001 // cmpl $100000, %esi - LONG $0xff94830f; WORD $0xffff // jae LBB4_14, $-108(%rip) - LONG $0xffffa1e9; BYTE $0xff // jmp LBB4_15, $-95(%rip) - -LBB4_16: - QUAD $0x86f26fc0ffffb848; WORD $0x0023 // movabsq $9999999999999999, %rax - WORD $0x3948; BYTE $0xc6 // cmpq %rax, %rsi - LONG $0x0107870f; WORD $0x0000 // ja LBB4_18, $263(%rip) - QUAD $0x77118461cefdb948; WORD $0xabcc // movabsq $-6067343680855748867, %rcx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf748; BYTE $0xe1 // mulq %rcx - LONG $0x1aeac148 // shrq $26, %rdx - LONG $0xe100c269; WORD $0x05f5 // imull $100000000, %edx, %eax - WORD $0xc629 // subl %eax, %esi - LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - QUAD $0xfffffda70d6ff9c5 // vmovdqa $-601(%rip), %xmm1 /* LCPI4_0(%rip) */ - LONG $0xd1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm2 - LONG $0xd273e9c5; BYTE $0x2d // vpsrlq $45, %xmm2, %xmm2 - LONG $0x002710b8; BYTE $0x00 // movl $10000, %eax - LONG $0x6ef9e1c4; BYTE $0xd8 // vmovq %rax, %xmm3 - LONG $0xe3f4e9c5 // vpmuludq %xmm3, %xmm2, %xmm4 - LONG $0xc4faf9c5 // vpsubd %xmm4, %xmm0, %xmm0 - LONG $0xc061e9c5 // vpunpcklwd %xmm0, %xmm2, %xmm0 - LONG $0xf073f9c5; BYTE $0x02 // vpsllq $2, %xmm0, %xmm0 - LONG $0xc070fbc5; BYTE $0x50 // vpshuflw $80, %xmm0, %xmm0 - LONG $0xc070f9c5; BYTE $0x50 // vpshufd $80, %xmm0, %xmm0 - QUAD $0xfffda0155979e2c4; BYTE $0xff // vpbroadcastq $-608(%rip), %xmm2 /* LCPI4_1(%rip) */ - QUAD $0xfffd9f255979e2c4; BYTE $0xff // vpbroadcastq $-609(%rip), %xmm4 /* LCPI4_2(%rip) */ - LONG $0xc2e4f9c5 // vpmulhuw %xmm2, %xmm0, %xmm0 - LONG $0xc4e4f9c5 // vpmulhuw %xmm4, %xmm0, %xmm0 - QUAD $0xfffffd672d6ff9c5 // vmovdqa $-665(%rip), %xmm5 /* LCPI4_3(%rip) */ - LONG $0xf5d5f9c5 // vpmullw %xmm5, %xmm0, %xmm6 - LONG $0xf673c9c5; BYTE $0x10 // vpsllq $16, %xmm6, %xmm6 - LONG $0xc6f9f9c5 // vpsubw %xmm6, %xmm0, %xmm0 - LONG $0xf66ef9c5 // vmovd %esi, %xmm6 - LONG $0xc9f4c9c5 // vpmuludq %xmm1, %xmm6, %xmm1 - LONG $0xd173f1c5; BYTE $0x2d // vpsrlq $45, %xmm1, %xmm1 - LONG $0xdbf4f1c5 // vpmuludq %xmm3, %xmm1, %xmm3 - LONG $0xdbfac9c5 // vpsubd %xmm3, %xmm6, %xmm3 - LONG $0xcb61f1c5 // vpunpcklwd %xmm3, %xmm1, %xmm1 - LONG $0xf173f1c5; BYTE $0x02 // vpsllq $2, %xmm1, %xmm1 - LONG $0xc970fbc5; BYTE $0x50 // vpshuflw $80, %xmm1, %xmm1 - LONG $0xc970f9c5; BYTE $0x50 // vpshufd $80, %xmm1, %xmm1 - LONG $0xcae4f1c5 // vpmulhuw %xmm2, %xmm1, %xmm1 - LONG $0xcce4f1c5 // vpmulhuw %xmm4, %xmm1, %xmm1 - LONG $0xd5d5f1c5 // vpmullw %xmm5, %xmm1, %xmm2 - LONG $0xf273e9c5; BYTE $0x10 // vpsllq $16, %xmm2, %xmm2 - LONG $0xcaf9f1c5 // vpsubw %xmm2, %xmm1, %xmm1 - LONG $0xc167f9c5 // vpackuswb %xmm1, %xmm0, %xmm0 - QUAD $0xfffffd210dfcf9c5 // vpaddb $-735(%rip), %xmm0, %xmm1 /* LCPI4_4(%rip) */ - LONG $0xd2efe9c5 // vpxor %xmm2, %xmm2, %xmm2 - LONG $0xc274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - LONG $0x0080000d; BYTE $0x00 // orl $32768, %eax - LONG $0xff7fff35; BYTE $0xff // xorl $-32769, %eax - WORD $0xbc0f; BYTE $0xc0 // bsfl %eax, %eax - LONG $0x000010b9; BYTE $0x00 // movl $16, %ecx - WORD $0xc129 // subl %eax, %ecx - LONG $0x04e0c148 // shlq $4, %rax - LONG $0xe6158d48; WORD $0x00db; BYTE $0x00 // leaq $56294(%rip), %rdx /* _VecShiftShuffles(%rip) */ - LONG $0x0071e2c4; WORD $0x1004 // vpshufb (%rax,%rdx), %xmm1, %xmm0 - LONG $0x077ffac5 // vmovdqu %xmm0, (%rdi) - WORD $0xc889 // movl %ecx, %eax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB4_18: - QUAD $0x652fb1137857b948; WORD $0x39a5 // movabsq $4153837486827862103, %rcx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf748; BYTE $0xe1 // mulq %rcx - LONG $0x33eac148 // shrq $51, %rdx - QUAD $0x86f26fc10000b848; WORD $0x0023 // movabsq $10000000000000000, %rax - LONG $0xc2af0f48 // imulq %rdx, %rax - WORD $0x2948; BYTE $0xc6 // subq %rax, %rsi - WORD $0xfa83; BYTE $0x09 // cmpl $9, %edx - LONG $0x000f870f; WORD $0x0000 // ja LBB4_20, $15(%rip) - WORD $0xc280; BYTE $0x30 // addb $48, %dl - WORD $0x1788 // movb %dl, (%rdi) - LONG $0x000001b9; BYTE $0x00 // movl $1, %ecx - LONG $0x0000bae9; BYTE $0x00 // jmp LBB4_25, $186(%rip) - -LBB4_20: - WORD $0xfa83; BYTE $0x63 // cmpl $99, %edx - LONG $0x001f870f; WORD $0x0000 // ja LBB4_22, $31(%rip) - WORD $0xd089 // movl %edx, %eax - LONG $0x290d8d48; WORD $0x00b4; BYTE $0x00 // leaq $46121(%rip), %rcx /* _Digits(%rip) */ - WORD $0x148a; BYTE $0x41 // movb (%rcx,%rax,2), %dl - LONG $0x0141448a // movb $1(%rcx,%rax,2), %al - WORD $0x1788 // movb %dl, (%rdi) - WORD $0x4788; BYTE $0x01 // movb %al, $1(%rdi) - LONG $0x000002b9; BYTE $0x00 // movl $2, %ecx - LONG $0x000092e9; BYTE $0x00 // jmp LBB4_25, $146(%rip) - -LBB4_22: - WORD $0xd089 // movl %edx, %eax - WORD $0xe8c1; BYTE $0x02 // shrl $2, %eax - LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax - WORD $0xe8c1; BYTE $0x11 // shrl $17, %eax - LONG $0x03e7fa81; WORD $0x0000 // cmpl $999, %edx - LONG $0x003c870f; WORD $0x0000 // ja LBB4_24, $60(%rip) - WORD $0xc083; BYTE $0x30 // addl $48, %eax - WORD $0x0788 // movb %al, (%rdi) - WORD $0xb70f; BYTE $0xc2 // movzwl %dx, %eax - WORD $0xc189 // movl %eax, %ecx - WORD $0xe9c1; BYTE $0x02 // shrl $2, %ecx - LONG $0x147bc969; WORD $0x0000 // imull $5243, %ecx, %ecx - WORD $0xe9c1; BYTE $0x11 // shrl $17, %ecx - WORD $0xc96b; BYTE $0x64 // imull $100, %ecx, %ecx - WORD $0xc829 // subl %ecx, %eax - WORD $0xb70f; BYTE $0xc0 // movzwl %ax, %eax - LONG $0xd40d8d48; WORD $0x00b3; BYTE $0x00 // leaq $46036(%rip), %rcx /* _Digits(%rip) */ - WORD $0x148a; BYTE $0x41 // movb (%rcx,%rax,2), %dl - LONG $0x0141448a // movb $1(%rcx,%rax,2), %al - WORD $0x5788; BYTE $0x01 // movb %dl, $1(%rdi) - WORD $0x4788; BYTE $0x02 // movb %al, $2(%rdi) - LONG $0x000003b9; BYTE $0x00 // movl $3, %ecx - LONG $0x00003ce9; BYTE $0x00 // jmp LBB4_25, $60(%rip) - -LBB4_24: - WORD $0xc86b; BYTE $0x64 // imull $100, %eax, %ecx - WORD $0xca29 // subl %ecx, %edx - WORD $0xb70f; BYTE $0xc0 // movzwl %ax, %eax - LONG $0xae058d4c; WORD $0x00b3; BYTE $0x00 // leaq $45998(%rip), %r8 /* _Digits(%rip) */ - LONG $0x400c8a41 // movb (%r8,%rax,2), %cl - LONG $0x40448a41; BYTE $0x01 // movb $1(%r8,%rax,2), %al - WORD $0x0f88 // movb %cl, (%rdi) - WORD $0x4788; BYTE $0x01 // movb %al, $1(%rdi) - WORD $0xb70f; BYTE $0xc2 // movzwl %dx, %eax - LONG $0x400c8a41 // movb (%r8,%rax,2), %cl - WORD $0x0148; BYTE $0xc0 // addq %rax, %rax - WORD $0x4f88; BYTE $0x02 // movb %cl, $2(%rdi) - WORD $0xc883; BYTE $0x01 // orl $1, %eax - WORD $0xb70f; BYTE $0xc0 // movzwl %ax, %eax - LONG $0x00048a42 // movb (%rax,%r8), %al - WORD $0x4788; BYTE $0x03 // movb %al, $3(%rdi) - LONG $0x000004b9; BYTE $0x00 // movl $4, %ecx - -LBB4_25: - QUAD $0x77118461cefdba48; WORD $0xabcc // movabsq $-6067343680855748867, %rdx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf748; BYTE $0xe2 // mulq %rdx - LONG $0x1aeac148 // shrq $26, %rdx - LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - QUAD $0xfffffbb10d6ff9c5 // vmovdqa $-1103(%rip), %xmm1 /* LCPI4_0(%rip) */ - LONG $0xd1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm2 - LONG $0xd273e9c5; BYTE $0x2d // vpsrlq $45, %xmm2, %xmm2 - LONG $0x002710b8; BYTE $0x00 // movl $10000, %eax - LONG $0x6ef9e1c4; BYTE $0xd8 // vmovq %rax, %xmm3 - LONG $0xe3f4e9c5 // vpmuludq %xmm3, %xmm2, %xmm4 - LONG $0xc4faf9c5 // vpsubd %xmm4, %xmm0, %xmm0 - LONG $0xc061e9c5 // vpunpcklwd %xmm0, %xmm2, %xmm0 - LONG $0xf073f9c5; BYTE $0x02 // vpsllq $2, %xmm0, %xmm0 - LONG $0xc070fbc5; BYTE $0x50 // vpshuflw $80, %xmm0, %xmm0 - QUAD $0xfffbaf155979e2c4; BYTE $0xff // vpbroadcastq $-1105(%rip), %xmm2 /* LCPI4_1(%rip) */ - LONG $0xc070f9c5; BYTE $0x50 // vpshufd $80, %xmm0, %xmm0 - LONG $0xc2e4f9c5 // vpmulhuw %xmm2, %xmm0, %xmm0 - QUAD $0xfffba5255979e2c4; BYTE $0xff // vpbroadcastq $-1115(%rip), %xmm4 /* LCPI4_2(%rip) */ - LONG $0xc4e4f9c5 // vpmulhuw %xmm4, %xmm0, %xmm0 - QUAD $0xfffffb712d6ff9c5 // vmovdqa $-1167(%rip), %xmm5 /* LCPI4_3(%rip) */ - LONG $0xf5d5f9c5 // vpmullw %xmm5, %xmm0, %xmm6 - LONG $0xf673c9c5; BYTE $0x10 // vpsllq $16, %xmm6, %xmm6 - LONG $0xc6f9f9c5 // vpsubw %xmm6, %xmm0, %xmm0 - LONG $0xe100c269; WORD $0x05f5 // imull $100000000, %edx, %eax - WORD $0xc629 // subl %eax, %esi - LONG $0xf66ef9c5 // vmovd %esi, %xmm6 - LONG $0xc9f4c9c5 // vpmuludq %xmm1, %xmm6, %xmm1 - LONG $0xd173f1c5; BYTE $0x2d // vpsrlq $45, %xmm1, %xmm1 - LONG $0xdbf4f1c5 // vpmuludq %xmm3, %xmm1, %xmm3 - LONG $0xdbfac9c5 // vpsubd %xmm3, %xmm6, %xmm3 - LONG $0xcb61f1c5 // vpunpcklwd %xmm3, %xmm1, %xmm1 - LONG $0xf173f1c5; BYTE $0x02 // vpsllq $2, %xmm1, %xmm1 - LONG $0xc970fbc5; BYTE $0x50 // vpshuflw $80, %xmm1, %xmm1 - LONG $0xc970f9c5; BYTE $0x50 // vpshufd $80, %xmm1, %xmm1 - LONG $0xcae4f1c5 // vpmulhuw %xmm2, %xmm1, %xmm1 - LONG $0xcce4f1c5 // vpmulhuw %xmm4, %xmm1, %xmm1 - LONG $0xd5d5f1c5 // vpmullw %xmm5, %xmm1, %xmm2 - LONG $0xf273e9c5; BYTE $0x10 // vpsllq $16, %xmm2, %xmm2 - LONG $0xcaf9f1c5 // vpsubw %xmm2, %xmm1, %xmm1 - LONG $0xc167f9c5 // vpackuswb %xmm1, %xmm0, %xmm0 - QUAD $0xfffffb2305fcf9c5 // vpaddb $-1245(%rip), %xmm0, %xmm0 /* LCPI4_4(%rip) */ - WORD $0xc889 // movl %ecx, %eax - LONG $0x047ffac5; BYTE $0x07 // vmovdqu %xmm0, (%rdi,%rax) - WORD $0xc983; BYTE $0x10 // orl $16, %ecx - WORD $0xc889 // movl %ecx, %eax - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - LONG $0x00000000; BYTE $0x00 // .p2align 5, 0x00 - -LCPI5_0: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -LCPI5_1: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - -LCPI5_2: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - - // .p2align 4, 0x00 -LCPI5_3: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -LCPI5_4: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - -LCPI5_5: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - - // .p2align 4, 0x90 -_quote: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax - WORD $0x8949; BYTE $0xcf // movq %rcx, %r15 - WORD $0x8949; BYTE $0xf2 // movq %rsi, %r10 - WORD $0x8b4c; BYTE $0x09 // movq (%rcx), %r9 - LONG $0x01c0f641 // testb $1, %r8b - LONG $0xde058d48; WORD $0x00d9; BYTE $0x00 // leaq $55774(%rip), %rax /* __SingleQuoteTab(%rip) */ - LONG $0xd7058d4c; WORD $0x00e9; BYTE $0x00 // leaq $59863(%rip), %r8 /* __DoubleQuoteTab(%rip) */ - LONG $0xc0440f4c // cmoveq %rax, %r8 - QUAD $0x00000000f5048d48 // leaq (,%rsi,8), %rax - WORD $0x3949; BYTE $0xc1 // cmpq %rax, %r9 - LONG $0x06e78d0f; WORD $0x0000 // jge LBB5_88, $1767(%rip) - WORD $0x8949; BYTE $0xd4 // movq %rdx, %r12 - WORD $0x8949; BYTE $0xfb // movq %rdi, %r11 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0x0a22840f; WORD $0x0000 // je LBB5_120, $2594(%rip) - QUAD $0xffffff1b256ffdc5 // vmovdqa $-229(%rip), %ymm4 /* LCPI5_0(%rip) */ - QUAD $0xffffff332d6ffdc5 // vmovdqa $-205(%rip), %ymm5 /* LCPI5_1(%rip) */ - QUAD $0xffffff4b356ffdc5 // vmovdqa $-181(%rip), %ymm6 /* LCPI5_2(%rip) */ - LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - WORD $0x8949; BYTE $0xfb // movq %rdi, %r11 - WORD $0x8949; BYTE $0xd4 // movq %rdx, %r12 - LONG $0xd0558948 // movq %rdx, $-48(%rbp) - -LBB5_3: - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - LONG $0x1ffa8349 // cmpq $31, %r10 - WORD $0x9f0f; BYTE $0xc1 // setg %cl - WORD $0x894d; BYTE $0xce // movq %r9, %r14 - WORD $0x894c; BYTE $0xe6 // movq %r12, %rsi - WORD $0x894d; BYTE $0xd7 // movq %r10, %r15 - WORD $0x894d; BYTE $0xdd // movq %r11, %r13 - LONG $0x20f98349 // cmpq $32, %r9 - LONG $0x008c8c0f; WORD $0x0000 // jl LBB5_9, $140(%rip) - LONG $0x20fa8349 // cmpq $32, %r10 - LONG $0x00828c0f; WORD $0x0000 // jl LBB5_9, $130(%rip) - WORD $0x894d; BYTE $0xdd // movq %r11, %r13 - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - WORD $0x894c; BYTE $0xe6 // movq %r12, %rsi - WORD $0x894c; BYTE $0xcb // movq %r9, %rbx - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB5_6: - LONG $0x6f7ec1c4; WORD $0x0045 // vmovdqu (%r13), %ymm0 - LONG $0xc864ddc5 // vpcmpgtb %ymm0, %ymm4, %ymm1 - LONG $0xd574fdc5 // vpcmpeqb %ymm5, %ymm0, %ymm2 - LONG $0xde74fdc5 // vpcmpeqb %ymm6, %ymm0, %ymm3 - LONG $0xd2ebe5c5 // vpor %ymm2, %ymm3, %ymm2 - LONG $0x067ffec5 // vmovdqu %ymm0, (%rsi) - LONG $0x647dc1c4; BYTE $0xc0 // vpcmpgtb %ymm8, %ymm0, %ymm0 - LONG $0xc0dbf5c5 // vpand %ymm0, %ymm1, %ymm0 - LONG $0xc0ebedc5 // vpor %ymm0, %ymm2, %ymm0 - LONG $0xc8d7fdc5 // vpmovmskb %ymm0, %ecx - WORD $0xc985 // testl %ecx, %ecx - LONG $0x01f8850f; WORD $0x0000 // jne LBB5_19, $504(%rip) - LONG $0x20c58349 // addq $32, %r13 - LONG $0x20c68348 // addq $32, %rsi - LONG $0xe0788d4c // leaq $-32(%rax), %r15 - LONG $0xe0738d4c // leaq $-32(%rbx), %r14 - LONG $0x3ff88348 // cmpq $63, %rax - WORD $0x9f0f; BYTE $0xc1 // setg %cl - LONG $0x40f88348 // cmpq $64, %rax - LONG $0x001c8c0f; WORD $0x0000 // jl LBB5_9, $28(%rip) - WORD $0x894c; BYTE $0xf8 // movq %r15, %rax - LONG $0x3ffb8348 // cmpq $63, %rbx - WORD $0x894c; BYTE $0xf3 // movq %r14, %rbx - LONG $0xff9c8f0f; WORD $0xffff // jg LBB5_6, $-100(%rip) - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB5_9: - WORD $0xc984 // testb %cl, %cl - LONG $0x0081840f; WORD $0x0000 // je LBB5_13, $129(%rip) - LONG $0x6f7ec1c4; WORD $0x0045 // vmovdqu (%r13), %ymm0 - LONG $0xc864ddc5 // vpcmpgtb %ymm0, %ymm4, %ymm1 - LONG $0xd574fdc5 // vpcmpeqb %ymm5, %ymm0, %ymm2 - LONG $0xde74fdc5 // vpcmpeqb %ymm6, %ymm0, %ymm3 - LONG $0xd2ebe5c5 // vpor %ymm2, %ymm3, %ymm2 - LONG $0x647dc1c4; BYTE $0xc0 // vpcmpgtb %ymm8, %ymm0, %ymm0 - LONG $0xc0dbf5c5 // vpand %ymm0, %ymm1, %ymm0 - LONG $0xc0ebedc5 // vpor %ymm0, %ymm2, %ymm0 - LONG $0xc0d7fdc5 // vpmovmskb %ymm0, %eax - QUAD $0x000100000000b948; WORD $0x0000 // movabsq $4294967296, %rcx - WORD $0x0948; BYTE $0xc8 // orq %rcx, %rax - LONG $0xc8bc0f48 // bsfq %rax, %rcx - LONG $0x6f7ac1c4; WORD $0x0045 // vmovdqu (%r13), %xmm0 - LONG $0x16f9e3c4; WORD $0x01c0 // vpextrq $1, %xmm0, %rax - LONG $0x7ef9e1c4; BYTE $0xc3 // vmovq %xmm0, %rbx - WORD $0x394c; BYTE $0xf1 // cmpq %r14, %rcx - LONG $0x016d8e0f; WORD $0x0000 // jle LBB5_20, $365(%rip) - LONG $0x10fe8349 // cmpq $16, %r14 - WORD $0x8949; BYTE $0xd7 // movq %rdx, %r15 - LONG $0x01a3820f; WORD $0x0000 // jb LBB5_24, $419(%rip) - WORD $0x8948; BYTE $0x1e // movq %rbx, (%rsi) - LONG $0x08468948 // movq %rax, $8(%rsi) - LONG $0x10458d49 // leaq $16(%r13), %rax - LONG $0x10c68348 // addq $16, %rsi - LONG $0xf04e8d49 // leaq $-16(%r14), %rcx - LONG $0x08f98348 // cmpq $8, %rcx - LONG $0x0196830f; WORD $0x0000 // jae LBB5_25, $406(%rip) - LONG $0x0001a3e9; BYTE $0x00 // jmp LBB5_26, $419(%rip) - -LBB5_13: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x0fff8349 // cmpq $15, %r15 - WORD $0x9f0f; BYTE $0xc1 // setg %cl - LONG $0x10fe8349 // cmpq $16, %r14 - LONG $0x01f88c0f; WORD $0x0000 // jl LBB5_31, $504(%rip) - LONG $0x10ff8349 // cmpq $16, %r15 - QUAD $0xfffffe073d6ff9c5 // vmovdqa $-505(%rip), %xmm7 /* LCPI5_3(%rip) */ - QUAD $0xfffffe0f0d6f79c5 // vmovdqa $-497(%rip), %xmm9 /* LCPI5_4(%rip) */ - QUAD $0xfffffe17156f79c5 // vmovdqa $-489(%rip), %xmm10 /* LCPI5_5(%rip) */ - LONG $0x762141c4; BYTE $0xdb // vpcmpeqd %xmm11, %xmm11, %xmm11 - LONG $0x021e8c0f; WORD $0x0000 // jl LBB5_36, $542(%rip) - QUAD $0xfffffd84256ffdc5 // vmovdqa $-636(%rip), %ymm4 /* LCPI5_0(%rip) */ - QUAD $0xfffffd9c2d6ffdc5 // vmovdqa $-612(%rip), %ymm5 /* LCPI5_1(%rip) */ - QUAD $0xfffffdb4356ffdc5 // vmovdqa $-588(%rip), %ymm6 /* LCPI5_2(%rip) */ - LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB5_16: - LONG $0x6f7ac1c4; WORD $0x0045 // vmovdqu (%r13), %xmm0 - LONG $0xc864c1c5 // vpcmpgtb %xmm0, %xmm7, %xmm1 - LONG $0xd074b1c5 // vpcmpeqb %xmm0, %xmm9, %xmm2 - LONG $0xd874a9c5 // vpcmpeqb %xmm0, %xmm10, %xmm3 - LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 - LONG $0x067ffac5 // vmovdqu %xmm0, (%rsi) - LONG $0x6479c1c4; BYTE $0xc3 // vpcmpgtb %xmm11, %xmm0, %xmm0 - LONG $0xc0dbf1c5 // vpand %xmm0, %xmm1, %xmm0 - LONG $0xc0ebe9c5 // vpor %xmm0, %xmm2, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - WORD $0x8566; BYTE $0xc0 // testw %ax, %ax - LONG $0x00d1850f; WORD $0x0000 // jne LBB5_22, $209(%rip) - LONG $0x10c58349 // addq $16, %r13 - LONG $0x10c68348 // addq $16, %rsi - LONG $0xf0478d49 // leaq $-16(%r15), %rax - LONG $0xf05e8d49 // leaq $-16(%r14), %rbx - LONG $0x1fff8349 // cmpq $31, %r15 - WORD $0x9f0f; BYTE $0xc1 // setg %cl - LONG $0x20ff8349 // cmpq $32, %r15 - LONG $0x00108c0f; WORD $0x0000 // jl LBB5_32, $16(%rip) - WORD $0x8949; BYTE $0xc7 // movq %rax, %r15 - LONG $0x1ffe8349 // cmpq $31, %r14 - WORD $0x8949; BYTE $0xde // movq %rbx, %r14 - LONG $0xff9b8f0f; WORD $0xffff // jg LBB5_16, $-101(%rip) - -LBB5_32: - WORD $0xc984 // testb %cl, %cl - LONG $0x01b0840f; WORD $0x0000 // je LBB5_37, $432(%rip) - -LBB5_33: - LONG $0x6f7ac1c4; WORD $0x0045 // vmovdqu (%r13), %xmm0 - LONG $0xc864c1c5 // vpcmpgtb %xmm0, %xmm7, %xmm1 - LONG $0xd074b1c5 // vpcmpeqb %xmm0, %xmm9, %xmm2 - LONG $0xd874a9c5 // vpcmpeqb %xmm0, %xmm10, %xmm3 - LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 - LONG $0x6479c1c4; BYTE $0xdb // vpcmpgtb %xmm11, %xmm0, %xmm3 - LONG $0xcbdbf1c5 // vpand %xmm3, %xmm1, %xmm1 - LONG $0xc9ebe9c5 // vpor %xmm1, %xmm2, %xmm1 - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - LONG $0x0100000d; BYTE $0x00 // orl $65536, %eax - WORD $0xbc0f; BYTE $0xc0 // bsfl %eax, %eax - LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx - WORD $0x3948; BYTE $0xc3 // cmpq %rax, %rbx - WORD $0x8949; BYTE $0xd7 // movq %rdx, %r15 - LONG $0x02618d0f; WORD $0x0000 // jge LBB5_53, $609(%rip) - LONG $0x08fb8348 // cmpq $8, %rbx - LONG $0x027c820f; WORD $0x0000 // jb LBB5_56, $636(%rip) - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - LONG $0x08458d49 // leaq $8(%r13), %rax - LONG $0x08c68348 // addq $8, %rsi - LONG $0xf84b8d48 // leaq $-8(%rbx), %rcx - LONG $0x00026ee9; BYTE $0x00 // jmp LBB5_57, $622(%rip) - -LBB5_19: - WORD $0x294d; BYTE $0xdd // subq %r11, %r13 - LONG $0xf1bc0f44 // bsfl %ecx, %r14d - LONG $0x000038e9; BYTE $0x00 // jmp LBB5_23, $56(%rip) - -LBB5_20: - WORD $0xf983; BYTE $0x10 // cmpl $16, %ecx - WORD $0x8949; BYTE $0xd7 // movq %rdx, %r15 - LONG $0x01a3820f; WORD $0x0000 // jb LBB5_42, $419(%rip) - WORD $0x8948; BYTE $0x1e // movq %rbx, (%rsi) - LONG $0x08468948 // movq %rax, $8(%rsi) - LONG $0x10458d49 // leaq $16(%r13), %rax - LONG $0x10c68348 // addq $16, %rsi - LONG $0xf0598d48 // leaq $-16(%rcx), %rbx - LONG $0x08fb8348 // cmpq $8, %rbx - LONG $0x0196830f; WORD $0x0000 // jae LBB5_43, $406(%rip) - LONG $0x0001a3e9; BYTE $0x00 // jmp LBB5_44, $419(%rip) - -LBB5_22: - WORD $0xb70f; BYTE $0xc0 // movzwl %ax, %eax - WORD $0x294d; BYTE $0xdd // subq %r11, %r13 - LONG $0xf0bc0f44 // bsfl %eax, %r14d - -LBB5_23: - WORD $0x014d; BYTE $0xee // addq %r13, %r14 - WORD $0x8949; BYTE $0xd7 // movq %rdx, %r15 - LONG $0x0002dfe9; BYTE $0x00 // jmp LBB5_71, $735(%rip) - -LBB5_24: - WORD $0x894c; BYTE $0xe8 // movq %r13, %rax - WORD $0x894c; BYTE $0xf1 // movq %r14, %rcx - LONG $0x08f98348 // cmpq $8, %rcx - LONG $0x0012820f; WORD $0x0000 // jb LBB5_26, $18(%rip) - -LBB5_25: - WORD $0x8b48; BYTE $0x10 // movq (%rax), %rdx - WORD $0x8948; BYTE $0x16 // movq %rdx, (%rsi) - LONG $0x08c08348 // addq $8, %rax - LONG $0x08c68348 // addq $8, %rsi - LONG $0xf8c18348 // addq $-8, %rcx - -LBB5_26: - LONG $0x04f98348 // cmpq $4, %rcx - LONG $0x00358c0f; WORD $0x0000 // jl LBB5_27, $53(%rip) - WORD $0x108b // movl (%rax), %edx - WORD $0x1689 // movl %edx, (%rsi) - LONG $0x04c08348 // addq $4, %rax - LONG $0x04c68348 // addq $4, %rsi - LONG $0xfcc18348 // addq $-4, %rcx - LONG $0x02f98348 // cmpq $2, %rcx - LONG $0x0025830f; WORD $0x0000 // jae LBB5_50, $37(%rip) - -LBB5_28: - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x0004840f; WORD $0x0000 // je LBB5_30, $4(%rip) - -LBB5_29: - WORD $0x008a // movb (%rax), %al - WORD $0x0688 // movb %al, (%rsi) - -LBB5_30: - WORD $0x294d; BYTE $0xde // subq %r11, %r14 - WORD $0x014d; BYTE $0xee // addq %r13, %r14 - WORD $0xf749; BYTE $0xd6 // notq %r14 - LONG $0x00027ee9; BYTE $0x00 // jmp LBB5_71, $638(%rip) - -LBB5_27: - LONG $0x02f98348 // cmpq $2, %rcx - LONG $0xffdb820f; WORD $0xffff // jb LBB5_28, $-37(%rip) - -LBB5_50: - WORD $0xb70f; BYTE $0x10 // movzwl (%rax), %edx - WORD $0x8966; BYTE $0x16 // movw %dx, (%rsi) - LONG $0x02c08348 // addq $2, %rax - LONG $0x02c68348 // addq $2, %rsi - LONG $0xfec18348 // addq $-2, %rcx - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0xffc9850f; WORD $0xffff // jne LBB5_29, $-55(%rip) - LONG $0xffffc8e9; BYTE $0xff // jmp LBB5_30, $-56(%rip) - -LBB5_31: - WORD $0x894c; BYTE $0xf3 // movq %r14, %rbx - WORD $0x894c; BYTE $0xf8 // movq %r15, %rax - QUAD $0xfffffbad256ffdc5 // vmovdqa $-1107(%rip), %ymm4 /* LCPI5_0(%rip) */ - QUAD $0xfffffbc52d6ffdc5 // vmovdqa $-1083(%rip), %ymm5 /* LCPI5_1(%rip) */ - QUAD $0xfffffbdd356ffdc5 // vmovdqa $-1059(%rip), %ymm6 /* LCPI5_2(%rip) */ - LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - QUAD $0xfffffbf03d6ff9c5 // vmovdqa $-1040(%rip), %xmm7 /* LCPI5_3(%rip) */ - QUAD $0xfffffbf80d6f79c5 // vmovdqa $-1032(%rip), %xmm9 /* LCPI5_4(%rip) */ - QUAD $0xfffffc00156f79c5 // vmovdqa $-1024(%rip), %xmm10 /* LCPI5_5(%rip) */ - LONG $0x762141c4; BYTE $0xdb // vpcmpeqd %xmm11, %xmm11, %xmm11 - WORD $0xc984 // testb %cl, %cl - LONG $0x0030840f; WORD $0x0000 // je LBB5_37, $48(%rip) - LONG $0xfffe7be9; BYTE $0xff // jmp LBB5_33, $-389(%rip) - -LBB5_36: - WORD $0x894c; BYTE $0xf3 // movq %r14, %rbx - WORD $0x894c; BYTE $0xf8 // movq %r15, %rax - QUAD $0xfffffb60256ffdc5 // vmovdqa $-1184(%rip), %ymm4 /* LCPI5_0(%rip) */ - QUAD $0xfffffb782d6ffdc5 // vmovdqa $-1160(%rip), %ymm5 /* LCPI5_1(%rip) */ - QUAD $0xfffffb90356ffdc5 // vmovdqa $-1136(%rip), %ymm6 /* LCPI5_2(%rip) */ - LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - WORD $0xc984 // testb %cl, %cl - LONG $0xfe50850f; WORD $0xffff // jne LBB5_33, $-432(%rip) - -LBB5_37: - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - WORD $0x8949; BYTE $0xd7 // movq %rdx, %r15 - LONG $0xc6358d4c; WORD $0x00d5; BYTE $0x00 // leaq $54726(%rip), %r14 /* __SingleQuoteTab(%rip) */ - LONG $0x01758e0f; WORD $0x0000 // jle LBB5_62, $373(%rip) - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x016c8e0f; WORD $0x0000 // jle LBB5_63, $364(%rip) - LONG $0x90909090 // .p2align 4, 0x90 - -LBB5_39: - LONG $0x55b60f41; BYTE $0x00 // movzbl (%r13), %edx - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - LONG $0x04e1c148 // shlq $4, %rcx - LONG $0x313c834a; BYTE $0x00 // cmpq $0, (%rcx,%r14) - LONG $0x00d4850f; WORD $0x0000 // jne LBB5_55, $212(%rip) - LONG $0xff488d48 // leaq $-1(%rax), %rcx - WORD $0xff49; BYTE $0xc5 // incq %r13 - WORD $0x1688 // movb %dl, (%rsi) - LONG $0x02f88348 // cmpq $2, %rax - LONG $0x013e8c0f; WORD $0x0000 // jl LBB5_63, $318(%rip) - LONG $0xff538d48 // leaq $-1(%rbx), %rdx - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x8948; BYTE $0xc8 // movq %rcx, %rax - LONG $0x01fb8348 // cmpq $1, %rbx - WORD $0x8948; BYTE $0xd3 // movq %rdx, %rbx - LONG $0xffbf8f0f; WORD $0xffff // jg LBB5_39, $-65(%rip) - LONG $0x000122e9; BYTE $0x00 // jmp LBB5_63, $290(%rip) - -LBB5_42: - WORD $0x894c; BYTE $0xe8 // movq %r13, %rax - WORD $0x8948; BYTE $0xcb // movq %rcx, %rbx - LONG $0x08fb8348 // cmpq $8, %rbx - LONG $0x0012820f; WORD $0x0000 // jb LBB5_44, $18(%rip) - -LBB5_43: - WORD $0x8b48; BYTE $0x10 // movq (%rax), %rdx - WORD $0x8948; BYTE $0x16 // movq %rdx, (%rsi) - LONG $0x08c08348 // addq $8, %rax - LONG $0x08c68348 // addq $8, %rsi - LONG $0xf8c38348 // addq $-8, %rbx - -LBB5_44: - LONG $0x04fb8348 // cmpq $4, %rbx - LONG $0x00328c0f; WORD $0x0000 // jl LBB5_45, $50(%rip) - WORD $0x108b // movl (%rax), %edx - WORD $0x1689 // movl %edx, (%rsi) - LONG $0x04c08348 // addq $4, %rax - LONG $0x04c68348 // addq $4, %rsi - LONG $0xfcc38348 // addq $-4, %rbx - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0x0022830f; WORD $0x0000 // jae LBB5_52, $34(%rip) - -LBB5_46: - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x0004840f; WORD $0x0000 // je LBB5_48, $4(%rip) - -LBB5_47: - WORD $0x008a // movb (%rax), %al - WORD $0x0688 // movb %al, (%rsi) - -LBB5_48: - WORD $0x294d; BYTE $0xdd // subq %r11, %r13 - WORD $0x0149; BYTE $0xcd // addq %rcx, %r13 - LONG $0x000112e9; BYTE $0x00 // jmp LBB5_70, $274(%rip) - -LBB5_45: - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0xffde820f; WORD $0xffff // jb LBB5_46, $-34(%rip) - -LBB5_52: - WORD $0xb70f; BYTE $0x10 // movzwl (%rax), %edx - WORD $0x8966; BYTE $0x16 // movw %dx, (%rsi) - LONG $0x02c08348 // addq $2, %rax - LONG $0x02c68348 // addq $2, %rsi - LONG $0xfec38348 // addq $-2, %rbx - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0xffcc850f; WORD $0xffff // jne LBB5_47, $-52(%rip) - LONG $0xffffcbe9; BYTE $0xff // jmp LBB5_48, $-53(%rip) - -LBB5_53: - WORD $0xf883; BYTE $0x08 // cmpl $8, %eax - LONG $0x00a2820f; WORD $0x0000 // jb LBB5_64, $162(%rip) - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - LONG $0x084d8d49 // leaq $8(%r13), %rcx - LONG $0x08c68348 // addq $8, %rsi - LONG $0xf8588d48 // leaq $-8(%rax), %rbx - LONG $0x000094e9; BYTE $0x00 // jmp LBB5_65, $148(%rip) - -LBB5_55: - WORD $0x294d; BYTE $0xdd // subq %r11, %r13 - LONG $0x0000c3e9; BYTE $0x00 // jmp LBB5_70, $195(%rip) - -LBB5_56: - WORD $0x894c; BYTE $0xe8 // movq %r13, %rax - WORD $0x8948; BYTE $0xd9 // movq %rbx, %rcx - -LBB5_57: - LONG $0x04f98348 // cmpq $4, %rcx - LONG $0x00388c0f; WORD $0x0000 // jl LBB5_58, $56(%rip) - WORD $0x108b // movl (%rax), %edx - WORD $0x1689 // movl %edx, (%rsi) - LONG $0x04c08348 // addq $4, %rax - LONG $0x04c68348 // addq $4, %rsi - LONG $0xfcc18348 // addq $-4, %rcx - LONG $0x02f98348 // cmpq $2, %rcx - LONG $0x0028830f; WORD $0x0000 // jae LBB5_85, $40(%rip) - -LBB5_59: - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x0004840f; WORD $0x0000 // je LBB5_61, $4(%rip) - -LBB5_60: - WORD $0x008a // movb (%rax), %al - WORD $0x0688 // movb %al, (%rsi) - -LBB5_61: - WORD $0x294c; BYTE $0xdb // subq %r11, %rbx - WORD $0x014c; BYTE $0xeb // addq %r13, %rbx - WORD $0xf748; BYTE $0xd3 // notq %rbx - WORD $0x8949; BYTE $0xde // movq %rbx, %r14 - LONG $0x00007ee9; BYTE $0x00 // jmp LBB5_71, $126(%rip) - -LBB5_58: - LONG $0x02f98348 // cmpq $2, %rcx - LONG $0xffd8820f; WORD $0xffff // jb LBB5_59, $-40(%rip) - -LBB5_85: - WORD $0xb70f; BYTE $0x10 // movzwl (%rax), %edx - WORD $0x8966; BYTE $0x16 // movw %dx, (%rsi) - LONG $0x02c08348 // addq $2, %rax - LONG $0x02c68348 // addq $2, %rsi - LONG $0xfec18348 // addq $-2, %rcx - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0xffc6850f; WORD $0xffff // jne LBB5_60, $-58(%rip) - LONG $0xffffc5e9; BYTE $0xff // jmp LBB5_61, $-59(%rip) - -LBB5_62: - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - -LBB5_63: - WORD $0x294d; BYTE $0xdd // subq %r11, %r13 - WORD $0xf748; BYTE $0xd9 // negq %rcx - WORD $0x194d; BYTE $0xf6 // sbbq %r14, %r14 - WORD $0x314d; BYTE $0xee // xorq %r13, %r14 - LONG $0x000040e9; BYTE $0x00 // jmp LBB5_71, $64(%rip) - -LBB5_64: - WORD $0x894c; BYTE $0xe9 // movq %r13, %rcx - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - -LBB5_65: - LONG $0x04fb8348 // cmpq $4, %rbx - LONG $0x01228c0f; WORD $0x0000 // jl LBB5_66, $290(%rip) - WORD $0x118b // movl (%rcx), %edx - WORD $0x1689 // movl %edx, (%rsi) - LONG $0x04c18348 // addq $4, %rcx - LONG $0x04c68348 // addq $4, %rsi - LONG $0xfcc38348 // addq $-4, %rbx - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0x0112830f; WORD $0x0000 // jae LBB5_87, $274(%rip) - -LBB5_67: - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x0004840f; WORD $0x0000 // je LBB5_69, $4(%rip) - -LBB5_68: - WORD $0x098a // movb (%rcx), %cl - WORD $0x0e88 // movb %cl, (%rsi) - -LBB5_69: - WORD $0x294d; BYTE $0xdd // subq %r11, %r13 - WORD $0x0149; BYTE $0xc5 // addq %rax, %r13 - -LBB5_70: - WORD $0x894d; BYTE $0xee // movq %r13, %r14 - -LBB5_71: - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0xd0558b48 // movq $-48(%rbp), %rdx - QUAD $0x000300000001bd49; WORD $0x0000 // movabsq $12884901889, %r13 - LONG $0x0481880f; WORD $0x0000 // js LBB5_124, $1153(%rip) - WORD $0x014d; BYTE $0xf3 // addq %r14, %r11 - WORD $0x014d; BYTE $0xf4 // addq %r14, %r12 - WORD $0x394d; BYTE $0xf2 // cmpq %r14, %r10 - LONG $0x0440840f; WORD $0x0000 // je LBB5_120, $1088(%rip) - WORD $0x294d; BYTE $0xf1 // subq %r14, %r9 - WORD $0x294d; BYTE $0xd6 // subq %r10, %r14 - LONG $0x000015e9; BYTE $0x00 // jmp LBB5_75, $21(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB5_74: - WORD $0xff49; BYTE $0xc3 // incq %r11 - WORD $0x0149; BYTE $0xc4 // addq %rax, %r12 - WORD $0xff49; BYTE $0xc6 // incq %r14 - LONG $0x0420840f; WORD $0x0000 // je LBB5_120, $1056(%rip) - -LBB5_75: - LONG $0x33b60f41 // movzbl (%r11), %esi - LONG $0x04e6c148 // shlq $4, %rsi - LONG $0x301c8b49 // movq (%r8,%rsi), %rbx - WORD $0xdb85 // testl %ebx, %ebx - LONG $0x0084840f; WORD $0x0000 // je LBB5_83, $132(%rip) - WORD $0x6348; BYTE $0xc3 // movslq %ebx, %rax - WORD $0x2949; BYTE $0xc1 // subq %rax, %r9 - LONG $0x040e8c0f; WORD $0x0000 // jl LBB5_121, $1038(%rip) - LONG $0x20e3c148 // shlq $32, %rbx - LONG $0x304c8d49; BYTE $0x08 // leaq $8(%r8,%rsi), %rcx - WORD $0x394c; BYTE $0xeb // cmpq %r13, %rbx - LONG $0x002f8c0f; WORD $0x0000 // jl LBB5_79, $47(%rip) - WORD $0x098b // movl (%rcx), %ecx - LONG $0x240c8941 // movl %ecx, (%r12) - LONG $0x304c8d49; BYTE $0x0c // leaq $12(%r8,%rsi), %rcx - LONG $0x24548d4d; BYTE $0x04 // leaq $4(%r12), %r10 - LONG $0xfc588d48 // leaq $-4(%rax), %rbx - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0x0021830f; WORD $0x0000 // jae LBB5_80, $33(%rip) - LONG $0x00002fe9; BYTE $0x00 // jmp LBB5_81, $47(%rip) - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB5_79: - WORD $0x894d; BYTE $0xe2 // movq %r12, %r10 - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0x0013820f; WORD $0x0000 // jb LBB5_81, $19(%rip) - -LBB5_80: - WORD $0xb70f; BYTE $0x31 // movzwl (%rcx), %esi - LONG $0x32894166 // movw %si, (%r10) - LONG $0x02c18348 // addq $2, %rcx - LONG $0x02c28349 // addq $2, %r10 - LONG $0xfec38348 // addq $-2, %rbx - -LBB5_81: - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0xff64840f; WORD $0xffff // je LBB5_74, $-156(%rip) - WORD $0xb60f; BYTE $0x09 // movzbl (%rcx), %ecx - WORD $0x8841; BYTE $0x0a // movb %cl, (%r10) - LONG $0xffff59e9; BYTE $0xff // jmp LBB5_74, $-167(%rip) - -LBB5_83: - WORD $0x894d; BYTE $0xf2 // movq %r14, %r10 - WORD $0xf749; BYTE $0xda // negq %r10 - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0xf97e850f; WORD $0xffff // jne LBB5_3, $-1666(%rip) - LONG $0x000374e9; BYTE $0x00 // jmp LBB5_120, $884(%rip) - -LBB5_66: - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0xfeee820f; WORD $0xffff // jb LBB5_67, $-274(%rip) - -LBB5_87: - WORD $0xb70f; BYTE $0x11 // movzwl (%rcx), %edx - WORD $0x8966; BYTE $0x16 // movw %dx, (%rsi) - LONG $0x02c18348 // addq $2, %rcx - LONG $0x02c68348 // addq $2, %rsi - LONG $0xfec38348 // addq $-2, %rbx - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0xfedc850f; WORD $0xffff // jne LBB5_68, $-292(%rip) - LONG $0xfffedbe9; BYTE $0xff // jmp LBB5_69, $-293(%rip) - -LBB5_88: - LONG $0xd40d8d4c; WORD $0x00f2; BYTE $0x00 // leaq $62164(%rip), %r9 /* __EscTab(%rip) */ - QUAD $0xfffff83c156f7dc5 // vmovdqa $-1988(%rip), %ymm10 /* LCPI5_0(%rip) */ - QUAD $0xfffff8540d6f7dc5 // vmovdqa $-1964(%rip), %ymm9 /* LCPI5_1(%rip) */ - QUAD $0xfffff86c1d6f7dc5 // vmovdqa $-1940(%rip), %ymm11 /* LCPI5_2(%rip) */ - LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - WORD $0x8948; BYTE $0xd3 // movq %rdx, %rbx - WORD $0x894d; BYTE $0xd3 // movq %r10, %r11 - -LBB5_89: - LONG $0x10fb8349 // cmpq $16, %r11 - LONG $0x01278d0f; WORD $0x0000 // jge LBB5_90, $295(%rip) - -LBB5_95: - LONG $0x08fb8349 // cmpq $8, %r11 - LONG $0x00858c0f; WORD $0x0000 // jl LBB5_99, $133(%rip) - -LBB5_96: - WORD $0xb60f; BYTE $0x07 // movzbl (%rdi), %eax - LONG $0x04b60f42; BYTE $0x08 // movzbl (%rax,%r9), %eax - LONG $0x014fb60f // movzbl $1(%rdi), %ecx - LONG $0x0cb60f42; BYTE $0x09 // movzbl (%rcx,%r9), %ecx - WORD $0xc901 // addl %ecx, %ecx - WORD $0xc109 // orl %eax, %ecx - LONG $0x0247b60f // movzbl $2(%rdi), %eax - LONG $0x34b60f42; BYTE $0x08 // movzbl (%rax,%r9), %esi - WORD $0xe6c1; BYTE $0x02 // shll $2, %esi - LONG $0x0347b60f // movzbl $3(%rdi), %eax - LONG $0x04b60f42; BYTE $0x08 // movzbl (%rax,%r9), %eax - WORD $0xe0c1; BYTE $0x03 // shll $3, %eax - WORD $0xf009 // orl %esi, %eax - WORD $0xc809 // orl %ecx, %eax - WORD $0x8b48; BYTE $0x0f // movq (%rdi), %rcx - WORD $0x8948; BYTE $0x0b // movq %rcx, (%rbx) - WORD $0xc084 // testb %al, %al - LONG $0x029b850f; WORD $0x0000 // jne LBB5_117, $667(%rip) - LONG $0x0447b60f // movzbl $4(%rdi), %eax - LONG $0x04b60f42; BYTE $0x08 // movzbl (%rax,%r9), %eax - LONG $0x054fb60f // movzbl $5(%rdi), %ecx - LONG $0x0cb60f42; BYTE $0x09 // movzbl (%rcx,%r9), %ecx - WORD $0xc901 // addl %ecx, %ecx - WORD $0xc109 // orl %eax, %ecx - LONG $0x0647b60f // movzbl $6(%rdi), %eax - LONG $0x34b60f42; BYTE $0x08 // movzbl (%rax,%r9), %esi - WORD $0xe6c1; BYTE $0x02 // shll $2, %esi - LONG $0x0747b60f // movzbl $7(%rdi), %eax - LONG $0x04b60f42; BYTE $0x08 // movzbl (%rax,%r9), %eax - WORD $0xe0c1; BYTE $0x03 // shll $3, %eax - WORD $0xf009 // orl %esi, %eax - WORD $0xc809 // orl %ecx, %eax - WORD $0xc084 // testb %al, %al - LONG $0x026f850f; WORD $0x0000 // jne LBB5_118, $623(%rip) - LONG $0x08c38348 // addq $8, %rbx - LONG $0x08c78348 // addq $8, %rdi - LONG $0xf8c38349 // addq $-8, %r11 - -LBB5_99: - LONG $0x04fb8349 // cmpq $4, %r11 - LONG $0x00498c0f; WORD $0x0000 // jl LBB5_102, $73(%rip) - WORD $0xb60f; BYTE $0x07 // movzbl (%rdi), %eax - LONG $0x04b60f42; BYTE $0x08 // movzbl (%rax,%r9), %eax - LONG $0x014fb60f // movzbl $1(%rdi), %ecx - LONG $0x0cb60f42; BYTE $0x09 // movzbl (%rcx,%r9), %ecx - WORD $0xc901 // addl %ecx, %ecx - WORD $0xc109 // orl %eax, %ecx - LONG $0x0247b60f // movzbl $2(%rdi), %eax - LONG $0x34b60f42; BYTE $0x08 // movzbl (%rax,%r9), %esi - WORD $0xe6c1; BYTE $0x02 // shll $2, %esi - LONG $0x0347b60f // movzbl $3(%rdi), %eax - LONG $0x04b60f42; BYTE $0x08 // movzbl (%rax,%r9), %eax - WORD $0xe0c1; BYTE $0x03 // shll $3, %eax - WORD $0xf009 // orl %esi, %eax - WORD $0xc809 // orl %ecx, %eax - WORD $0x0f8b // movl (%rdi), %ecx - WORD $0x0b89 // movl %ecx, (%rbx) - WORD $0xc084 // testb %al, %al - LONG $0x020e850f; WORD $0x0000 // jne LBB5_117, $526(%rip) - LONG $0x04c38348 // addq $4, %rbx - LONG $0x04c78348 // addq $4, %rdi - LONG $0xfcc38349 // addq $-4, %r11 - -LBB5_102: - WORD $0x854d; BYTE $0xdb // testq %r11, %r11 - LONG $0x02208e0f; WORD $0x0000 // jle LBB5_119, $544(%rip) - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB5_103: - WORD $0xb60f; BYTE $0x07 // movzbl (%rdi), %eax - LONG $0x083c8042; BYTE $0x00 // cmpb $0, (%rax,%r9) - LONG $0x0194850f; WORD $0x0000 // jne LBB5_114, $404(%rip) - WORD $0xff48; BYTE $0xc7 // incq %rdi - WORD $0x0388 // movb %al, (%rbx) - WORD $0xff48; BYTE $0xc3 // incq %rbx - LONG $0xff438d49 // leaq $-1(%r11), %rax - LONG $0x01fb8349 // cmpq $1, %r11 - WORD $0x8949; BYTE $0xc3 // movq %rax, %r11 - LONG $0xffd98f0f; WORD $0xffff // jg LBB5_103, $-39(%rip) - LONG $0x0001e8e9; BYTE $0x00 // jmp LBB5_119, $488(%rip) - LONG $0x90909090 // .p2align 4, 0x90 - -LBB5_90: - LONG $0x20fb8349 // cmpq $32, %r11 - LONG $0x009f8c0f; WORD $0x0000 // jl LBB5_105, $159(%rip) - LONG $0x204b8d49 // leaq $32(%r11), %rcx - WORD $0xc031 // xorl %eax, %eax - - // .p2align 4, 0x90 -LBB5_92: - LONG $0x046ffec5; BYTE $0x07 // vmovdqu (%rdi,%rax), %ymm0 - LONG $0xc864adc5 // vpcmpgtb %ymm0, %ymm10, %ymm1 - LONG $0xd074b5c5 // vpcmpeqb %ymm0, %ymm9, %ymm2 - LONG $0xd874a5c5 // vpcmpeqb %ymm0, %ymm11, %ymm3 - LONG $0xd2ebe5c5 // vpor %ymm2, %ymm3, %ymm2 - LONG $0x047ffec5; BYTE $0x03 // vmovdqu %ymm0, (%rbx,%rax) - LONG $0x647dc1c4; BYTE $0xc0 // vpcmpgtb %ymm8, %ymm0, %ymm0 - LONG $0xc0dbf5c5 // vpand %ymm0, %ymm1, %ymm0 - LONG $0xc0ebedc5 // vpor %ymm0, %ymm2, %ymm0 - LONG $0xf0d7fdc5 // vpmovmskb %ymm0, %esi - WORD $0xf685 // testl %esi, %esi - LONG $0x011a850f; WORD $0x0000 // jne LBB5_111, $282(%rip) - LONG $0x20c08348 // addq $32, %rax - LONG $0xe0c18348 // addq $-32, %rcx - LONG $0x3ff98348 // cmpq $63, %rcx - LONG $0xffbb8f0f; WORD $0xffff // jg LBB5_92, $-69(%rip) - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - QUAD $0xfffff6cb1d6f7dc5 // vmovdqa $-2357(%rip), %ymm11 /* LCPI5_2(%rip) */ - QUAD $0xfffff6a30d6f7dc5 // vmovdqa $-2397(%rip), %ymm9 /* LCPI5_1(%rip) */ - QUAD $0xfffff67b156f7dc5 // vmovdqa $-2437(%rip), %ymm10 /* LCPI5_0(%rip) */ - WORD $0x0148; BYTE $0xc7 // addq %rax, %rdi - WORD $0x2949; BYTE $0xc3 // subq %rax, %r11 - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - LONG $0x30f98348 // cmpq $48, %rcx - QUAD $0xfffff6c63d6ff9c5 // vmovdqa $-2362(%rip), %xmm7 /* LCPI5_3(%rip) */ - QUAD $0xfffff6ce2d6ff9c5 // vmovdqa $-2354(%rip), %xmm5 /* LCPI5_4(%rip) */ - QUAD $0xfffff6d6256ff9c5 // vmovdqa $-2346(%rip), %xmm4 /* LCPI5_5(%rip) */ - LONG $0xf676c9c5 // vpcmpeqd %xmm6, %xmm6, %xmm6 - LONG $0x00418d0f; WORD $0x0000 // jge LBB5_106, $65(%rip) - LONG $0xfffe30e9; BYTE $0xff // jmp LBB5_95, $-464(%rip) - -LBB5_105: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - QUAD $0xfffff6771d6f7dc5 // vmovdqa $-2441(%rip), %ymm11 /* LCPI5_2(%rip) */ - QUAD $0xfffff64f0d6f7dc5 // vmovdqa $-2481(%rip), %ymm9 /* LCPI5_1(%rip) */ - QUAD $0xfffff627156f7dc5 // vmovdqa $-2521(%rip), %ymm10 /* LCPI5_0(%rip) */ - QUAD $0xfffff67f3d6ff9c5 // vmovdqa $-2433(%rip), %xmm7 /* LCPI5_3(%rip) */ - QUAD $0xfffff6872d6ff9c5 // vmovdqa $-2425(%rip), %xmm5 /* LCPI5_4(%rip) */ - QUAD $0xfffff68f256ff9c5 // vmovdqa $-2417(%rip), %xmm4 /* LCPI5_5(%rip) */ - LONG $0xf676c9c5 // vpcmpeqd %xmm6, %xmm6, %xmm6 - -LBB5_106: - LONG $0x000010b9; BYTE $0x00 // movl $16, %ecx - WORD $0xc031 // xorl %eax, %eax - LONG $0x90909090 // .p2align 4, 0x90 - -LBB5_107: - LONG $0x046ffac5; BYTE $0x07 // vmovdqu (%rdi,%rax), %xmm0 - LONG $0xc864c1c5 // vpcmpgtb %xmm0, %xmm7, %xmm1 - LONG $0xd574f9c5 // vpcmpeqb %xmm5, %xmm0, %xmm2 - LONG $0xdc74f9c5 // vpcmpeqb %xmm4, %xmm0, %xmm3 - LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 - LONG $0x047ffac5; BYTE $0x03 // vmovdqu %xmm0, (%rbx,%rax) - LONG $0xc664f9c5 // vpcmpgtb %xmm6, %xmm0, %xmm0 - LONG $0xc0dbf1c5 // vpand %xmm0, %xmm1, %xmm0 - LONG $0xc0ebe9c5 // vpor %xmm0, %xmm2, %xmm0 - LONG $0xf0d7f9c5 // vpmovmskb %xmm0, %esi - WORD $0x8566; BYTE $0xf6 // testw %si, %si - LONG $0x002f850f; WORD $0x0000 // jne LBB5_110, $47(%rip) - LONG $0x10c08348 // addq $16, %rax - LONG $0x0b748d49; BYTE $0xf0 // leaq $-16(%r11,%rcx), %rsi - LONG $0xf0c18348 // addq $-16, %rcx - LONG $0x1ffe8348 // cmpq $31, %rsi - LONG $0xffb68f0f; WORD $0xffff // jg LBB5_107, $-74(%rip) - WORD $0x0148; BYTE $0xc7 // addq %rax, %rdi - WORD $0x2949; BYTE $0xc3 // subq %rax, %r11 - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - LONG $0x08fb8349 // cmpq $8, %r11 - LONG $0xfd968d0f; WORD $0xffff // jge LBB5_96, $-618(%rip) - LONG $0xfffe16e9; BYTE $0xff // jmp LBB5_99, $-490(%rip) - -LBB5_110: - WORD $0xb70f; BYTE $0xce // movzwl %si, %ecx - WORD $0xbc0f; BYTE $0xc9 // bsfl %ecx, %ecx - LONG $0x000003e9; BYTE $0x00 // jmp LBB5_112, $3(%rip) - -LBB5_111: - WORD $0xbc0f; BYTE $0xce // bsfl %esi, %ecx - -LBB5_112: - WORD $0x0148; BYTE $0xcf // addq %rcx, %rdi - WORD $0x0148; BYTE $0xc7 // addq %rax, %rdi - WORD $0x2949; BYTE $0xcb // subq %rcx, %r11 - WORD $0x2949; BYTE $0xc3 // subq %rax, %r11 - WORD $0x0148; BYTE $0xcb // addq %rcx, %rbx - -LBB5_113: - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - -LBB5_114: - WORD $0x078a // movb (%rdi), %al - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB5_115: - WORD $0x8948; BYTE $0xd9 // movq %rbx, %rcx - WORD $0xb60f; BYTE $0xc0 // movzbl %al, %eax - LONG $0x04e0c148 // shlq $4, %rax - LONG $0x001c6349 // movslq (%r8,%rax), %rbx - LONG $0x00448b49; BYTE $0x08 // movq $8(%r8,%rax), %rax - WORD $0x8948; BYTE $0x01 // movq %rax, (%rcx) - WORD $0x0148; BYTE $0xcb // addq %rcx, %rbx - LONG $0x02fb8349 // cmpq $2, %r11 - LONG $0x00418c0f; WORD $0x0000 // jl LBB5_119, $65(%rip) - WORD $0xff49; BYTE $0xcb // decq %r11 - LONG $0x0147b60f // movzbl $1(%rdi), %eax - WORD $0xff48; BYTE $0xc7 // incq %rdi - LONG $0x083c8042; BYTE $0x00 // cmpb $0, (%rax,%r9) - LONG $0xffc8850f; WORD $0xffff // jne LBB5_115, $-56(%rip) - LONG $0xfffd12e9; BYTE $0xff // jmp LBB5_89, $-750(%rip) - -LBB5_117: - WORD $0xbc0f; BYTE $0xc0 // bsfl %eax, %eax - WORD $0x0148; BYTE $0xc7 // addq %rax, %rdi - WORD $0x2949; BYTE $0xc3 // subq %rax, %r11 - LONG $0xffffa4e9; BYTE $0xff // jmp LBB5_113, $-92(%rip) - -LBB5_118: - WORD $0xbc0f; BYTE $0xc0 // bsfl %eax, %eax - LONG $0x04488d48 // leaq $4(%rax), %rcx - LONG $0x077c8d48; BYTE $0x04 // leaq $4(%rdi,%rax), %rdi - WORD $0x2949; BYTE $0xcb // subq %rcx, %r11 - LONG $0x035c8d48; BYTE $0x04 // leaq $4(%rbx,%rax), %rbx - LONG $0xffff8ee9; BYTE $0xff // jmp LBB5_114, $-114(%rip) - -LBB5_119: - WORD $0x2948; BYTE $0xd3 // subq %rdx, %rbx - WORD $0x8949; BYTE $0x1f // movq %rbx, (%r15) - LONG $0x00001de9; BYTE $0x00 // jmp LBB5_123, $29(%rip) - -LBB5_120: - WORD $0x2949; BYTE $0xd4 // subq %rdx, %r12 - WORD $0x894d; BYTE $0x27 // movq %r12, (%r15) - WORD $0x2949; BYTE $0xfb // subq %rdi, %r11 - LONG $0x00000ce9; BYTE $0x00 // jmp LBB5_122, $12(%rip) - -LBB5_121: - WORD $0x2949; BYTE $0xd4 // subq %rdx, %r12 - WORD $0x894d; BYTE $0x27 // movq %r12, (%r15) - WORD $0xf749; BYTE $0xd3 // notq %r11 - WORD $0x0149; BYTE $0xfb // addq %rdi, %r11 - -LBB5_122: - WORD $0x894d; BYTE $0xda // movq %r11, %r10 - -LBB5_123: - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB5_124: - WORD $0x2949; BYTE $0xd4 // subq %rdx, %r12 - WORD $0x894c; BYTE $0xf0 // movq %r14, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x014c; BYTE $0xe0 // addq %r12, %rax - WORD $0x8949; BYTE $0x07 // movq %rax, (%r15) - WORD $0x294c; BYTE $0xdf // subq %r11, %rdi - WORD $0x014c; BYTE $0xf7 // addq %r14, %rdi - WORD $0x8949; BYTE $0xfa // movq %rdi, %r10 - LONG $0xffffcee9; BYTE $0xff // jmp LBB5_123, $-50(%rip) - QUAD $0x0000000000000000; QUAD $0x0000000000000000; WORD $0x0000 // .p2align 5, 0x00 - -LCPI6_0: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - - // .p2align 4, 0x00 -LCPI6_1: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - - // .p2align 4, 0x90 -_unquote: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x18ec8348 // subq $24, %rsp - WORD $0x8949; BYTE $0xd3 // movq %rdx, %r11 - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x0029840f; WORD $0x0000 // je LBB6_2, $41(%rip) - LONG $0xd04d8948 // movq %rcx, $-48(%rbp) - WORD $0x8945; BYTE $0xc2 // movl %r8d, %r10d - LONG $0x01e28341 // andl $1, %r10d - QUAD $0xffffffa00d6ffdc5 // vmovdqa $-96(%rip), %ymm1 /* LCPI6_0(%rip) */ - QUAD $0xffffffb8156ff9c5 // vmovdqa $-72(%rip), %xmm2 /* LCPI6_1(%rip) */ - WORD $0x8949; BYTE $0xf9 // movq %rdi, %r9 - WORD $0x8949; BYTE $0xf5 // movq %rsi, %r13 - WORD $0x894c; BYTE $0xda // movq %r11, %rdx - LONG $0x000056e9; BYTE $0x00 // jmp LBB6_8, $86(%rip) - -LBB6_2: - WORD $0x3145; BYTE $0xed // xorl %r13d, %r13d - WORD $0x894c; BYTE $0xda // movq %r11, %rdx - -LBB6_3: - WORD $0x014c; BYTE $0xea // addq %r13, %rdx - WORD $0x294c; BYTE $0xda // subq %r11, %rdx - -LBB6_4: - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - LONG $0x18c48348 // addq $24, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB6_5: - LONG $0x214c8d4f; BYTE $0x04 // leaq $4(%r9,%r12), %r9 - WORD $0x8944; BYTE $0xf8 // movl %r15d, %eax - WORD $0xe8c1; BYTE $0x06 // shrl $6, %eax - WORD $0xc00c // orb $-64, %al - WORD $0x0288 // movb %al, (%rdx) - LONG $0x3fe78041 // andb $63, %r15b - LONG $0x80cf8041 // orb $-128, %r15b - LONG $0x017a8844 // movb %r15b, $1(%rdx) - LONG $0x02c28348 // addq $2, %rdx - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB6_6: - WORD $0x894d; BYTE $0xf5 // movq %r14, %r13 - -LBB6_7: - WORD $0x854d; BYTE $0xed // testq %r13, %r13 - LONG $0x0846840f; WORD $0x0000 // je LBB6_115, $2118(%rip) - -LBB6_8: - LONG $0x5c398041 // cmpb $92, (%r9) - LONG $0x000a850f; WORD $0x0000 // jne LBB6_10, $10(%rip) - WORD $0xdb31 // xorl %ebx, %ebx - LONG $0x000143e9; BYTE $0x00 // jmp LBB6_24, $323(%rip) - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB6_10: - WORD $0x894d; BYTE $0xef // movq %r13, %r15 - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0x894d; BYTE $0xce // movq %r9, %r14 - LONG $0x20fd8349 // cmpq $32, %r13 - LONG $0x00408c0f; WORD $0x0000 // jl LBB6_14, $64(%rip) - WORD $0x894d; BYTE $0xce // movq %r9, %r14 - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0x894d; BYTE $0xec // movq %r13, %r12 - LONG $0x90909090 // .p2align 4, 0x90 - -LBB6_12: - LONG $0x6f7ec1c4; BYTE $0x06 // vmovdqu (%r14), %ymm0 - LONG $0x007ffec5 // vmovdqu %ymm0, (%rax) - LONG $0xc174fdc5 // vpcmpeqb %ymm1, %ymm0, %ymm0 - LONG $0xd8d7fdc5 // vpmovmskb %ymm0, %ebx - WORD $0xdb85 // testl %ebx, %ebx - LONG $0x00c1850f; WORD $0x0000 // jne LBB6_22, $193(%rip) - LONG $0x20c68349 // addq $32, %r14 - LONG $0x20c08348 // addq $32, %rax - LONG $0x247c8d4d; BYTE $0xe0 // leaq $-32(%r12), %r15 - LONG $0x3ffc8349 // cmpq $63, %r12 - WORD $0x894d; BYTE $0xfc // movq %r15, %r12 - LONG $0xffcd8f0f; WORD $0xffff // jg LBB6_12, $-51(%rip) - -LBB6_14: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - QUAD $0xfffffee2156ff9c5 // vmovdqa $-286(%rip), %xmm2 /* LCPI6_1(%rip) */ - LONG $0x10ff8349 // cmpq $16, %r15 - LONG $0x003b8c0f; WORD $0x0000 // jl LBB6_17, $59(%rip) - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB6_15: - LONG $0x6f7ac1c4; BYTE $0x06 // vmovdqu (%r14), %xmm0 - LONG $0x007ffac5 // vmovdqu %xmm0, (%rax) - LONG $0xc274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm0 - LONG $0xd8d7f9c5 // vpmovmskb %xmm0, %ebx - WORD $0x8566; BYTE $0xdb // testw %bx, %bx - LONG $0x008c850f; WORD $0x0000 // jne LBB6_23, $140(%rip) - LONG $0x10c68349 // addq $16, %r14 - LONG $0x10c08348 // addq $16, %rax - LONG $0xf04f8d49 // leaq $-16(%r15), %rcx - LONG $0x1fff8349 // cmpq $31, %r15 - WORD $0x8949; BYTE $0xcf // movq %rcx, %r15 - LONG $0xffcd8f0f; WORD $0xffff // jg LBB6_15, $-51(%rip) - -LBB6_17: - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0xfef0840f; WORD $0xffff // je LBB6_3, $-272(%rip) - WORD $0xdb31 // xorl %ebx, %ebx - QUAD $0xfffffe6a0d6ffdc5 // vmovdqa $-406(%rip), %ymm1 /* LCPI6_0(%rip) */ - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB6_19: - LONG $0x0cb60f41; BYTE $0x1e // movzbl (%r14,%rbx), %ecx - WORD $0xf980; BYTE $0x5c // cmpb $92, %cl - LONG $0x0014840f; WORD $0x0000 // je LBB6_21, $20(%rip) - WORD $0x0c88; BYTE $0x18 // movb %cl, (%rax,%rbx) - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0x3949; BYTE $0xdf // cmpq %rbx, %r15 - LONG $0xffe3850f; WORD $0xffff // jne LBB6_19, $-29(%rip) - LONG $0xfffebae9; BYTE $0xff // jmp LBB6_3, $-326(%rip) - -LBB6_21: - WORD $0x0149; BYTE $0xde // addq %rbx, %r14 - WORD $0x294d; BYTE $0xce // subq %r9, %r14 - WORD $0x894c; BYTE $0xf3 // movq %r14, %rbx - LONG $0xfffb8348 // cmpq $-1, %rbx - LONG $0x004b850f; WORD $0x0000 // jne LBB6_24, $75(%rip) - LONG $0xfffea2e9; BYTE $0xff // jmp LBB6_3, $-350(%rip) - -LBB6_22: - WORD $0x6348; BYTE $0xc3 // movslq %ebx, %rax - WORD $0x294d; BYTE $0xce // subq %r9, %r14 - LONG $0xd8bc0f48 // bsfq %rax, %rbx - WORD $0x014c; BYTE $0xf3 // addq %r14, %rbx - LONG $0xfffb8348 // cmpq $-1, %rbx - LONG $0x002f850f; WORD $0x0000 // jne LBB6_24, $47(%rip) - LONG $0xfffe86e9; BYTE $0xff // jmp LBB6_3, $-378(%rip) - -LBB6_23: - WORD $0xb70f; BYTE $0xc3 // movzwl %bx, %eax - WORD $0x294d; BYTE $0xce // subq %r9, %r14 - LONG $0xd8bc0f48 // bsfq %rax, %rbx - WORD $0x014c; BYTE $0xf3 // addq %r14, %rbx - QUAD $0xfffffdf50d6ffdc5 // vmovdqa $-523(%rip), %ymm1 /* LCPI6_0(%rip) */ - LONG $0xfffb8348 // cmpq $-1, %rbx - LONG $0xfe67840f; WORD $0xffff // je LBB6_3, $-409(%rip) - QUAD $0x9090909090909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB6_24: - LONG $0x02438d48 // leaq $2(%rbx), %rax - WORD $0x2949; BYTE $0xc5 // subq %rax, %r13 - LONG $0x06ed880f; WORD $0x0000 // js LBB6_116, $1773(%rip) - LONG $0x194c8d4d; BYTE $0x02 // leaq $2(%r9,%rbx), %r9 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0x03d6850f; WORD $0x0000 // jne LBB6_67, $982(%rip) - -LBB6_26: - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - LONG $0x41b60f41; BYTE $0xff // movzbl $-1(%r9), %eax - LONG $0xe60d8d48; WORD $0x00ed; BYTE $0x00 // leaq $60902(%rip), %rcx /* __UnquoteTab(%rip) */ - WORD $0x048a; BYTE $0x08 // movb (%rax,%rcx), %al - WORD $0xff3c // cmpb $-1, %al - LONG $0x001b840f; WORD $0x0000 // je LBB6_29, $27(%rip) - WORD $0xc084 // testb %al, %al - LONG $0x058d840f; WORD $0x0000 // je LBB6_98, $1421(%rip) - WORD $0x0288 // movb %al, (%rdx) - WORD $0xff48; BYTE $0xc2 // incq %rdx - LONG $0xfffe5ce9; BYTE $0xff // jmp LBB6_7, $-420(%rip) - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB6_29: - LONG $0x03fd8349 // cmpq $3, %r13 - LONG $0x06a08e0f; WORD $0x0000 // jle LBB6_116, $1696(%rip) - WORD $0x8b45; BYTE $0x31 // movl (%r9), %r14d - WORD $0x8945; BYTE $0xf7 // movl %r14d, %r15d - WORD $0xf741; BYTE $0xd7 // notl %r15d - LONG $0xd0868d41; WORD $0xcfcf; BYTE $0xcf // leal $-808464432(%r14), %eax - LONG $0x80e78141; WORD $0x8080; BYTE $0x80 // andl $-2139062144, %r15d - WORD $0x8541; BYTE $0xc7 // testl %eax, %r15d - LONG $0x049c850f; WORD $0x0000 // jne LBB6_89, $1180(%rip) - LONG $0x19868d41; WORD $0x1919; BYTE $0x19 // leal $421075225(%r14), %eax - WORD $0x0944; BYTE $0xf0 // orl %r14d, %eax - LONG $0x808080a9; BYTE $0x80 // testl $-2139062144, %eax - LONG $0x0487850f; WORD $0x0000 // jne LBB6_89, $1159(%rip) - WORD $0x8944; BYTE $0xf3 // movl %r14d, %ebx - LONG $0x7f7fe381; WORD $0x7f7f // andl $2139062143, %ebx - LONG $0xc0c0c0b8; BYTE $0xc0 // movl $-1061109568, %eax - WORD $0xd829 // subl %ebx, %eax - LONG $0x46468b8d; WORD $0x4646 // leal $1179010630(%rbx), %ecx - WORD $0x2144; BYTE $0xf8 // andl %r15d, %eax - WORD $0xc885 // testl %ecx, %eax - LONG $0x0466850f; WORD $0x0000 // jne LBB6_89, $1126(%rip) - LONG $0xe0e0e0b8; BYTE $0xe0 // movl $-522133280, %eax - WORD $0xd829 // subl %ebx, %eax - LONG $0x3939c381; WORD $0x3939 // addl $960051513, %ebx - WORD $0x2141; BYTE $0xc7 // andl %eax, %r15d - WORD $0x8541; BYTE $0xdf // testl %ebx, %r15d - LONG $0x044d850f; WORD $0x0000 // jne LBB6_89, $1101(%rip) - WORD $0x0f41; BYTE $0xce // bswapl %r14d - WORD $0x8944; BYTE $0xf0 // movl %r14d, %eax - WORD $0xe8c1; BYTE $0x04 // shrl $4, %eax - WORD $0xd0f7 // notl %eax - LONG $0x01010125; BYTE $0x01 // andl $16843009, %eax - WORD $0x048d; BYTE $0xc0 // leal (%rax,%rax,8), %eax - LONG $0x0fe68141; WORD $0x0f0f; BYTE $0x0f // andl $252645135, %r14d - WORD $0x0141; BYTE $0xc6 // addl %eax, %r14d - WORD $0x8944; BYTE $0xf0 // movl %r14d, %eax - WORD $0xe8c1; BYTE $0x04 // shrl $4, %eax - WORD $0x0944; BYTE $0xf0 // orl %r14d, %eax - LONG $0xf8b60f44 // movzbl %al, %r15d - WORD $0xe8c1; BYTE $0x08 // shrl $8, %eax - LONG $0x00ff0025; BYTE $0x00 // andl $65280, %eax - WORD $0x0941; BYTE $0xc7 // orl %eax, %r15d - LONG $0xfc758d4d // leaq $-4(%r13), %r14 - LONG $0x80ff8141; WORD $0x0000; BYTE $0x00 // cmpl $128, %r15d - LONG $0x032f820f; WORD $0x0000 // jb LBB6_75, $815(%rip) - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0x0145850f; WORD $0x0000 // jne LBB6_49, $325(%rip) - -LBB6_36: - LONG $0x00ff8141; WORD $0x0008; BYTE $0x00 // cmpl $2048, %r15d - LONG $0xfd4f820f; WORD $0xffff // jb LBB6_5, $-689(%rip) - WORD $0x8944; BYTE $0xf8 // movl %r15d, %eax - LONG $0xfff80025; BYTE $0xff // andl $-2048, %eax - LONG $0x00d8003d; BYTE $0x00 // cmpl $55296, %eax - LONG $0x0285850f; WORD $0x0000 // jne LBB6_65, $645(%rip) - LONG $0xffff8141; WORD $0x00db; BYTE $0x00 // cmpl $56319, %r15d - LONG $0x0305870f; WORD $0x0000 // ja LBB6_77, $773(%rip) - LONG $0x06fe8349 // cmpq $6, %r14 - LONG $0x02fb8c0f; WORD $0x0000 // jl LBB6_77, $763(%rip) - LONG $0x217c8043; WORD $0x5c04 // cmpb $92, $4(%r9,%r12) - LONG $0x02ef850f; WORD $0x0000 // jne LBB6_77, $751(%rip) - LONG $0x217c8043; WORD $0x7505 // cmpb $117, $5(%r9,%r12) - LONG $0x02e3850f; WORD $0x0000 // jne LBB6_77, $739(%rip) - LONG $0x214c8b43; BYTE $0x06 // movl $6(%r9,%r12), %ecx - WORD $0xcb89 // movl %ecx, %ebx - WORD $0xd3f7 // notl %ebx - LONG $0xcfd0818d; WORD $0xcfcf // leal $-808464432(%rcx), %eax - LONG $0x8080e381; WORD $0x8080 // andl $-2139062144, %ebx - WORD $0x5d89; BYTE $0xcc // movl %ebx, $-52(%rbp) - WORD $0xc385 // testl %eax, %ebx - LONG $0x0464850f; WORD $0x0000 // jne LBB6_100, $1124(%rip) - LONG $0x1919818d; WORD $0x1919 // leal $421075225(%rcx), %eax - WORD $0xc809 // orl %ecx, %eax - LONG $0x808080a9; BYTE $0x80 // testl $-2139062144, %eax - LONG $0x0451850f; WORD $0x0000 // jne LBB6_100, $1105(%rip) - WORD $0xcb89 // movl %ecx, %ebx - LONG $0x7f7fe381; WORD $0x7f7f // andl $2139062143, %ebx - LONG $0xc0c0c0b8; BYTE $0xc0 // movl $-1061109568, %eax - WORD $0xd829 // subl %ebx, %eax - LONG $0xc04d8948 // movq %rcx, $-64(%rbp) - LONG $0x46468b8d; WORD $0x4646 // leal $1179010630(%rbx), %ecx - WORD $0x4523; BYTE $0xcc // andl $-52(%rbp), %eax - WORD $0xc885 // testl %ecx, %eax - LONG $0xc04d8b48 // movq $-64(%rbp), %rcx - LONG $0x0429850f; WORD $0x0000 // jne LBB6_100, $1065(%rip) - LONG $0xe0e0e0b8; BYTE $0xe0 // movl $-522133280, %eax - WORD $0xd829 // subl %ebx, %eax - WORD $0x4589; BYTE $0xc8 // movl %eax, $-56(%rbp) - LONG $0x3939c381; WORD $0x3939 // addl $960051513, %ebx - WORD $0x458b; BYTE $0xcc // movl $-52(%rbp), %eax - WORD $0x4523; BYTE $0xc8 // andl $-56(%rbp), %eax - WORD $0xd885 // testl %ebx, %eax - LONG $0x040b850f; WORD $0x0000 // jne LBB6_100, $1035(%rip) - WORD $0xc90f // bswapl %ecx - WORD $0xc889 // movl %ecx, %eax - WORD $0xe8c1; BYTE $0x04 // shrl $4, %eax - WORD $0xd0f7 // notl %eax - LONG $0x01010125; BYTE $0x01 // andl $16843009, %eax - WORD $0x048d; BYTE $0xc0 // leal (%rax,%rax,8), %eax - LONG $0x0f0fe181; WORD $0x0f0f // andl $252645135, %ecx - WORD $0xc101 // addl %eax, %ecx - WORD $0xc889 // movl %ecx, %eax - WORD $0xe8c1; BYTE $0x04 // shrl $4, %eax - WORD $0xc809 // orl %ecx, %eax - WORD $0xc189 // movl %eax, %ecx - WORD $0xe9c1; BYTE $0x08 // shrl $8, %ecx - LONG $0xff00e181; WORD $0x0000 // andl $65280, %ecx - WORD $0xb60f; BYTE $0xd8 // movzbl %al, %ebx - WORD $0xcb09 // orl %ecx, %ebx - LONG $0xfc000025; BYTE $0x00 // andl $16515072, %eax - LONG $0xdc00003d; BYTE $0x00 // cmpl $14417920, %eax - LONG $0x026f840f; WORD $0x0000 // je LBB6_83, $623(%rip) - LONG $0x02c0f641 // testb $2, %r8b - LONG $0x04fa840f; WORD $0x0000 // je LBB6_119, $1274(%rip) - LONG $0xfac68349 // addq $-6, %r14 - LONG $0xef02c766; BYTE $0xbf // movw $-16401, (%rdx) - LONG $0xbd0242c6 // movb $-67, $2(%rdx) - LONG $0x03c28348 // addq $3, %rdx - LONG $0x06c48349 // addq $6, %r12 - WORD $0x8941; BYTE $0xdf // movl %ebx, %r15d - WORD $0xfb83; BYTE $0x7f // cmpl $127, %ebx - LONG $0xfecd870f; WORD $0xffff // ja LBB6_36, $-307(%rip) - LONG $0x000158e9; BYTE $0x00 // jmp LBB6_64, $344(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB6_49: - LONG $0x00ff8141; WORD $0x0008; BYTE $0x00 // cmpl $2048, %r15d - LONG $0xfc0a820f; WORD $0xffff // jb LBB6_5, $-1014(%rip) - WORD $0x8944; BYTE $0xf8 // movl %r15d, %eax - LONG $0xfff80025; BYTE $0xff // andl $-2048, %eax - LONG $0x00d8003d; BYTE $0x00 // cmpl $55296, %eax - LONG $0x0140850f; WORD $0x0000 // jne LBB6_65, $320(%rip) - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x04528e0f; WORD $0x0000 // jle LBB6_113, $1106(%rip) - LONG $0x217c8043; WORD $0x5c04 // cmpb $92, $4(%r9,%r12) - LONG $0x01e9850f; WORD $0x0000 // jne LBB6_81, $489(%rip) - LONG $0xffff8141; WORD $0x00db; BYTE $0x00 // cmpl $56319, %r15d - LONG $0x01b5870f; WORD $0x0000 // ja LBB6_78, $437(%rip) - LONG $0x07fe8349 // cmpq $7, %r14 - LONG $0x01ab8c0f; WORD $0x0000 // jl LBB6_78, $427(%rip) - LONG $0x217c8043; WORD $0x5c05 // cmpb $92, $5(%r9,%r12) - LONG $0x019f850f; WORD $0x0000 // jne LBB6_78, $415(%rip) - LONG $0x217c8043; WORD $0x7506 // cmpb $117, $6(%r9,%r12) - LONG $0x0193850f; WORD $0x0000 // jne LBB6_78, $403(%rip) - LONG $0x214c8b43; BYTE $0x07 // movl $7(%r9,%r12), %ecx - WORD $0xcb89 // movl %ecx, %ebx - WORD $0xd3f7 // notl %ebx - LONG $0xcfd0818d; WORD $0xcfcf // leal $-808464432(%rcx), %eax - LONG $0x8080e381; WORD $0x8080 // andl $-2139062144, %ebx - WORD $0x5d89; BYTE $0xcc // movl %ebx, $-52(%rbp) - WORD $0xc385 // testl %eax, %ebx - LONG $0x0314850f; WORD $0x0000 // jne LBB6_101, $788(%rip) - LONG $0x1919818d; WORD $0x1919 // leal $421075225(%rcx), %eax - WORD $0xc809 // orl %ecx, %eax - LONG $0x808080a9; BYTE $0x80 // testl $-2139062144, %eax - LONG $0x0301850f; WORD $0x0000 // jne LBB6_101, $769(%rip) - WORD $0xcb89 // movl %ecx, %ebx - LONG $0x7f7fe381; WORD $0x7f7f // andl $2139062143, %ebx - LONG $0xc0c0c0b8; BYTE $0xc0 // movl $-1061109568, %eax - WORD $0xd829 // subl %ebx, %eax - LONG $0xc04d8948 // movq %rcx, $-64(%rbp) - LONG $0x46468b8d; WORD $0x4646 // leal $1179010630(%rbx), %ecx - WORD $0x4523; BYTE $0xcc // andl $-52(%rbp), %eax - WORD $0xc885 // testl %ecx, %eax - LONG $0xc04d8b48 // movq $-64(%rbp), %rcx - LONG $0x02d9850f; WORD $0x0000 // jne LBB6_101, $729(%rip) - LONG $0xe0e0e0b8; BYTE $0xe0 // movl $-522133280, %eax - WORD $0xd829 // subl %ebx, %eax - WORD $0x4589; BYTE $0xc8 // movl %eax, $-56(%rbp) - LONG $0x3939c381; WORD $0x3939 // addl $960051513, %ebx - WORD $0x458b; BYTE $0xcc // movl $-52(%rbp), %eax - WORD $0x4523; BYTE $0xc8 // andl $-56(%rbp), %eax - WORD $0xd885 // testl %ebx, %eax - LONG $0x02bb850f; WORD $0x0000 // jne LBB6_101, $699(%rip) - WORD $0xc90f // bswapl %ecx - WORD $0xc889 // movl %ecx, %eax - WORD $0xe8c1; BYTE $0x04 // shrl $4, %eax - WORD $0xd0f7 // notl %eax - LONG $0x01010125; BYTE $0x01 // andl $16843009, %eax - WORD $0x048d; BYTE $0xc0 // leal (%rax,%rax,8), %eax - LONG $0x0f0fe181; WORD $0x0f0f // andl $252645135, %ecx - WORD $0xc101 // addl %eax, %ecx - WORD $0xc889 // movl %ecx, %eax - WORD $0xe8c1; BYTE $0x04 // shrl $4, %eax - WORD $0xc809 // orl %ecx, %eax - WORD $0xc189 // movl %eax, %ecx - WORD $0xe9c1; BYTE $0x08 // shrl $8, %ecx - LONG $0xff00e181; WORD $0x0000 // andl $65280, %ecx - WORD $0xb60f; BYTE $0xd8 // movzbl %al, %ebx - WORD $0xcb09 // orl %ecx, %ebx - LONG $0xfc000025; BYTE $0x00 // andl $16515072, %eax - LONG $0xdc00003d; BYTE $0x00 // cmpl $14417920, %eax - LONG $0x0126840f; WORD $0x0000 // je LBB6_84, $294(%rip) - LONG $0x02c0f641 // testb $2, %r8b - LONG $0x03aa840f; WORD $0x0000 // je LBB6_120, $938(%rip) - LONG $0xf9c68349 // addq $-7, %r14 - LONG $0xef02c766; BYTE $0xbf // movw $-16401, (%rdx) - LONG $0xbd0242c6 // movb $-67, $2(%rdx) - LONG $0x03c28348 // addq $3, %rdx - LONG $0x07c48349 // addq $7, %r12 - WORD $0x8941; BYTE $0xdf // movl %ebx, %r15d - LONG $0x0080fb81; WORD $0x0000 // cmpl $128, %ebx - LONG $0xfeb5830f; WORD $0xffff // jae LBB6_49, $-331(%rip) - -LBB6_64: - LONG $0x214c8d4f; BYTE $0x04 // leaq $4(%r9,%r12), %r9 - WORD $0x8941; BYTE $0xdf // movl %ebx, %r15d - LONG $0x00008ae9; BYTE $0x00 // jmp LBB6_76, $138(%rip) - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB6_65: - LONG $0x214c8d4f; BYTE $0x04 // leaq $4(%r9,%r12), %r9 - WORD $0x8944; BYTE $0xf8 // movl %r15d, %eax - WORD $0xe8c1; BYTE $0x0c // shrl $12, %eax - WORD $0xe00c // orb $-32, %al - WORD $0x0288 // movb %al, (%rdx) - WORD $0x8944; BYTE $0xf8 // movl %r15d, %eax - WORD $0xe8c1; BYTE $0x06 // shrl $6, %eax - WORD $0x3f24 // andb $63, %al - WORD $0x800c // orb $-128, %al - WORD $0x4288; BYTE $0x01 // movb %al, $1(%rdx) - LONG $0x3fe78041 // andb $63, %r15b - LONG $0x80cf8041 // orb $-128, %r15b - LONG $0x027a8844 // movb %r15b, $2(%rdx) - -LBB6_66: - LONG $0x03c28348 // addq $3, %rdx - LONG $0xfffaafe9; BYTE $0xff // jmp LBB6_6, $-1361(%rip) - -LBB6_67: - WORD $0x8545; BYTE $0xed // testl %r13d, %r13d - LONG $0x0300840f; WORD $0x0000 // je LBB6_116, $768(%rip) - LONG $0xff798041; BYTE $0x5c // cmpb $92, $-1(%r9) - LONG $0x01de850f; WORD $0x0000 // jne LBB6_99, $478(%rip) - LONG $0x5c398041 // cmpb $92, (%r9) - LONG $0x0024850f; WORD $0x0000 // jne LBB6_74, $36(%rip) - LONG $0x01fd8341 // cmpl $1, %r13d - LONG $0x02e18e0f; WORD $0x0000 // jle LBB6_116, $737(%rip) - LONG $0x01418a41 // movb $1(%r9), %al - WORD $0x223c // cmpb $34, %al - LONG $0x0008840f; WORD $0x0000 // je LBB6_73, $8(%rip) - WORD $0x5c3c // cmpb $92, %al - LONG $0x0295850f; WORD $0x0000 // jne LBB6_111, $661(%rip) - -LBB6_73: - WORD $0xff49; BYTE $0xc1 // incq %r9 - WORD $0xff49; BYTE $0xcd // decq %r13 - -LBB6_74: - WORD $0xff49; BYTE $0xc1 // incq %r9 - WORD $0xff49; BYTE $0xcd // decq %r13 - LONG $0xfffbdde9; BYTE $0xff // jmp LBB6_26, $-1059(%rip) - -LBB6_75: - LONG $0x04c18349 // addq $4, %r9 - -LBB6_76: - WORD $0x8844; BYTE $0x3a // movb %r15b, (%rdx) - WORD $0xff48; BYTE $0xc2 // incq %rdx - LONG $0xfffa53e9; BYTE $0xff // jmp LBB6_6, $-1453(%rip) - -LBB6_77: - LONG $0x214c8d4f; BYTE $0x04 // leaq $4(%r9,%r12), %r9 - LONG $0x00000fe9; BYTE $0x00 // jmp LBB6_79, $15(%rip) - -LBB6_78: - LONG $0x214c8d4f; BYTE $0x05 // leaq $5(%r9,%r12), %r9 - WORD $0x294d; BYTE $0xe5 // subq %r12, %r13 - LONG $0xfbc58349 // addq $-5, %r13 - WORD $0x894d; BYTE $0xee // movq %r13, %r14 - -LBB6_79: - LONG $0x02c0f641 // testb $2, %r8b - LONG $0x02e0840f; WORD $0x0000 // je LBB6_122, $736(%rip) - -LBB6_80: - LONG $0xef02c766; BYTE $0xbf // movw $-16401, (%rdx) - LONG $0xbd0242c6 // movb $-67, $2(%rdx) - LONG $0xffff6ae9; BYTE $0xff // jmp LBB6_66, $-150(%rip) - -LBB6_81: - LONG $0x02c0f641 // testb $2, %r8b - LONG $0x02d5840f; WORD $0x0000 // je LBB6_123, $725(%rip) - LONG $0x214c8d4f; BYTE $0x04 // leaq $4(%r9,%r12), %r9 - LONG $0xffffdee9; BYTE $0xff // jmp LBB6_80, $-34(%rip) - -LBB6_83: - LONG $0x214c8d4f; BYTE $0x0a // leaq $10(%r9,%r12), %r9 - WORD $0x294d; BYTE $0xe5 // subq %r12, %r13 - LONG $0xf6c58349 // addq $-10, %r13 - LONG $0x00000ce9; BYTE $0x00 // jmp LBB6_85, $12(%rip) - -LBB6_84: - LONG $0x214c8d4f; BYTE $0x0b // leaq $11(%r9,%r12), %r9 - WORD $0x294d; BYTE $0xe5 // subq %r12, %r13 - LONG $0xf5c58349 // addq $-11, %r13 - -LBB6_85: - LONG $0x0ae7c141 // shll $10, %r15d - QUAD $0xfca024001f9c8d41 // leal $-56613888(%r15,%rbx), %ebx - LONG $0x0000fb81; WORD $0x0011 // cmpl $1114112, %ebx - LONG $0x001c820f; WORD $0x0000 // jb LBB6_88, $28(%rip) - LONG $0x02c0f641 // testb $2, %r8b - LONG $0x023c840f; WORD $0x0000 // je LBB6_117, $572(%rip) - LONG $0xef02c766; BYTE $0xbf // movw $-16401, (%rdx) - LONG $0xbd0242c6 // movb $-67, $2(%rdx) - LONG $0x03c28348 // addq $3, %rdx - LONG $0xfff9c0e9; BYTE $0xff // jmp LBB6_7, $-1600(%rip) - -LBB6_88: - WORD $0xd889 // movl %ebx, %eax - WORD $0xe8c1; BYTE $0x12 // shrl $18, %eax - WORD $0xf00c // orb $-16, %al - WORD $0x0288 // movb %al, (%rdx) - WORD $0xd889 // movl %ebx, %eax - WORD $0xe8c1; BYTE $0x0c // shrl $12, %eax - WORD $0x3f24 // andb $63, %al - WORD $0x800c // orb $-128, %al - WORD $0x4288; BYTE $0x01 // movb %al, $1(%rdx) - WORD $0xd889 // movl %ebx, %eax - WORD $0xe8c1; BYTE $0x06 // shrl $6, %eax - WORD $0x3f24 // andb $63, %al - WORD $0x800c // orb $-128, %al - WORD $0x4288; BYTE $0x02 // movb %al, $2(%rdx) - WORD $0xe380; BYTE $0x3f // andb $63, %bl - WORD $0xcb80; BYTE $0x80 // orb $-128, %bl - WORD $0x5a88; BYTE $0x03 // movb %bl, $3(%rdx) - LONG $0x04c28348 // addq $4, %rdx - LONG $0xfff98de9; BYTE $0xff // jmp LBB6_7, $-1651(%rip) - -LBB6_89: - WORD $0x894c; BYTE $0xc8 // movq %r9, %rax - WORD $0x2948; BYTE $0xf8 // subq %rdi, %rax - LONG $0xd07d8b48 // movq $-48(%rbp), %rdi - WORD $0x8948; BYTE $0x07 // movq %rax, (%rdi) - WORD $0x8a41; BYTE $0x09 // movb (%r9), %cl - WORD $0x718d; BYTE $0xd0 // leal $-48(%rcx), %esi - LONG $0xfec2c748; WORD $0xffff; BYTE $0xff // movq $-2, %rdx - LONG $0x0afe8040 // cmpb $10, %sil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_91, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xf919870f; WORD $0xffff // ja LBB6_4, $-1767(%rip) - -LBB6_91: - LONG $0x01488d48 // leaq $1(%rax), %rcx - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - LONG $0x01498a41 // movb $1(%r9), %cl - WORD $0x718d; BYTE $0xd0 // leal $-48(%rcx), %esi - LONG $0x0afe8040 // cmpb $10, %sil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_93, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xf8f2870f; WORD $0xffff // ja LBB6_4, $-1806(%rip) - -LBB6_93: - LONG $0x02488d48 // leaq $2(%rax), %rcx - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - LONG $0x02498a41 // movb $2(%r9), %cl - WORD $0x718d; BYTE $0xd0 // leal $-48(%rcx), %esi - LONG $0x0afe8040 // cmpb $10, %sil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_95, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xf8cb870f; WORD $0xffff // ja LBB6_4, $-1845(%rip) - -LBB6_95: - LONG $0x03488d48 // leaq $3(%rax), %rcx - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - LONG $0x03498a41 // movb $3(%r9), %cl - WORD $0x718d; BYTE $0xd0 // leal $-48(%rcx), %esi - LONG $0x0afe8040 // cmpb $10, %sil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_97, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xf8a4870f; WORD $0xffff // ja LBB6_4, $-1884(%rip) - -LBB6_97: - LONG $0x04c08348 // addq $4, %rax - WORD $0x8948; BYTE $0x07 // movq %rax, (%rdi) - LONG $0xfff898e9; BYTE $0xff // jmp LBB6_4, $-1896(%rip) - -LBB6_98: - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x0149; BYTE $0xf9 // addq %rdi, %r9 - LONG $0xd0458b48 // movq $-48(%rbp), %rax - WORD $0x894c; BYTE $0x08 // movq %r9, (%rax) - LONG $0xfdc2c748; WORD $0xffff; BYTE $0xff // movq $-3, %rdx - LONG $0xfff87fe9; BYTE $0xff // jmp LBB6_4, $-1921(%rip) - -LBB6_99: - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x0149; BYTE $0xf9 // addq %rdi, %r9 - LONG $0x0000dae9; BYTE $0x00 // jmp LBB6_112, $218(%rip) - -LBB6_100: - LONG $0x21748d4b; BYTE $0x04 // leaq $4(%r9,%r12), %rsi - LONG $0x000005e9; BYTE $0x00 // jmp LBB6_102, $5(%rip) - -LBB6_101: - LONG $0x21748d4b; BYTE $0x05 // leaq $5(%r9,%r12), %rsi - -LBB6_102: - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0x2948; BYTE $0xf8 // subq %rdi, %rax - LONG $0x02c08348 // addq $2, %rax - LONG $0xd04d8b48 // movq $-48(%rbp), %rcx - WORD $0x8948; BYTE $0x01 // movq %rax, (%rcx) - WORD $0x4e8a; BYTE $0x02 // movb $2(%rsi), %cl - WORD $0x798d; BYTE $0xd0 // leal $-48(%rcx), %edi - LONG $0xfec2c748; WORD $0xffff; BYTE $0xff // movq $-2, %rdx - LONG $0x0aff8040 // cmpb $10, %dil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_104, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xf82e870f; WORD $0xffff // ja LBB6_4, $-2002(%rip) - -LBB6_104: - LONG $0x01488d48 // leaq $1(%rax), %rcx - LONG $0xd07d8b48 // movq $-48(%rbp), %rdi - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - WORD $0x4e8a; BYTE $0x03 // movb $3(%rsi), %cl - WORD $0x798d; BYTE $0xd0 // leal $-48(%rcx), %edi - LONG $0x0aff8040 // cmpb $10, %dil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_106, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xf804870f; WORD $0xffff // ja LBB6_4, $-2044(%rip) - -LBB6_106: - LONG $0x02488d48 // leaq $2(%rax), %rcx - LONG $0xd07d8b48 // movq $-48(%rbp), %rdi - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - WORD $0x4e8a; BYTE $0x04 // movb $4(%rsi), %cl - WORD $0x798d; BYTE $0xd0 // leal $-48(%rcx), %edi - LONG $0x0aff8040 // cmpb $10, %dil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_108, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xf7da870f; WORD $0xffff // ja LBB6_4, $-2086(%rip) - -LBB6_108: - LONG $0x03488d48 // leaq $3(%rax), %rcx - LONG $0xd07d8b48 // movq $-48(%rbp), %rdi - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - WORD $0x4e8a; BYTE $0x05 // movb $5(%rsi), %cl - WORD $0x718d; BYTE $0xd0 // leal $-48(%rcx), %esi - LONG $0x0afe8040 // cmpb $10, %sil - LONG $0x000f820f; WORD $0x0000 // jb LBB6_110, $15(%rip) - WORD $0xe180; BYTE $0xdf // andb $-33, %cl - WORD $0xc180; BYTE $0xbf // addb $-65, %cl - WORD $0xf980; BYTE $0x05 // cmpb $5, %cl - LONG $0xf7b0870f; WORD $0xffff // ja LBB6_4, $-2128(%rip) - -LBB6_110: - LONG $0x04c08348 // addq $4, %rax - LONG $0xd04d8b48 // movq $-48(%rbp), %rcx - WORD $0x8948; BYTE $0x01 // movq %rax, (%rcx) - LONG $0xfff7a0e9; BYTE $0xff // jmp LBB6_4, $-2144(%rip) - -LBB6_111: - WORD $0x2949; BYTE $0xf9 // subq %rdi, %r9 - WORD $0xff49; BYTE $0xc1 // incq %r9 - -LBB6_112: - LONG $0xd0458b48 // movq $-48(%rbp), %rax - WORD $0x894c; BYTE $0x08 // movq %r9, (%rax) - LONG $0xfec2c748; WORD $0xffff; BYTE $0xff // movq $-2, %rdx - LONG $0xfff787e9; BYTE $0xff // jmp LBB6_4, $-2169(%rip) - -LBB6_113: - LONG $0x02c0f641 // testb $2, %r8b - LONG $0x0015840f; WORD $0x0000 // je LBB6_116, $21(%rip) - LONG $0xef02c766; BYTE $0xbf // movw $-16401, (%rdx) - LONG $0xbd0242c6 // movb $-67, $2(%rdx) - LONG $0x03c28348 // addq $3, %rdx - -LBB6_115: - WORD $0x3145; BYTE $0xed // xorl %r13d, %r13d - LONG $0xfff762e9; BYTE $0xff // jmp LBB6_3, $-2206(%rip) - -LBB6_116: - LONG $0xd0458b48 // movq $-48(%rbp), %rax - WORD $0x8948; BYTE $0x30 // movq %rsi, (%rax) - LONG $0xffc2c748; WORD $0xffff; BYTE $0xff // movq $-1, %rdx - LONG $0xfff755e9; BYTE $0xff // jmp LBB6_4, $-2219(%rip) - -LBB6_117: - WORD $0x2949; BYTE $0xf9 // subq %rdi, %r9 - LONG $0xfcc18349 // addq $-4, %r9 - -LBB6_118: - LONG $0xd0458b48 // movq $-48(%rbp), %rax - WORD $0x894c; BYTE $0x08 // movq %r9, (%rax) - LONG $0xfcc2c748; WORD $0xffff; BYTE $0xff // movq $-4, %rdx - LONG $0xfff73be9; BYTE $0xff // jmp LBB6_4, $-2245(%rip) - -LBB6_119: - LONG $0x21448d4b; BYTE $0x0a // leaq $10(%r9,%r12), %rax - LONG $0x000005e9; BYTE $0x00 // jmp LBB6_121, $5(%rip) - -LBB6_120: - LONG $0x21448d4b; BYTE $0x0b // leaq $11(%r9,%r12), %rax - -LBB6_121: - WORD $0x2948; BYTE $0xf8 // subq %rdi, %rax - LONG $0xfcc08348 // addq $-4, %rax - LONG $0xd04d8b48 // movq $-48(%rbp), %rcx - WORD $0x8948; BYTE $0x01 // movq %rax, (%rcx) - LONG $0xfcc2c748; WORD $0xffff; BYTE $0xff // movq $-4, %rdx - LONG $0xfff712e9; BYTE $0xff // jmp LBB6_4, $-2286(%rip) - -LBB6_122: - LONG $0x3a448d49; BYTE $0x04 // leaq $4(%r10,%rdi), %rax - WORD $0x2949; BYTE $0xc1 // subq %rax, %r9 - LONG $0xffffb7e9; BYTE $0xff // jmp LBB6_118, $-73(%rip) - -LBB6_123: - WORD $0x014d; BYTE $0xe1 // addq %r12, %r9 - WORD $0x2949; BYTE $0xf9 // subq %rdi, %r9 - LONG $0xfffface9; BYTE $0xff // jmp LBB6_118, $-84(%rip) - QUAD $0x0000000000000000; QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .p2align 5, 0x00 - -LCPI7_0: - QUAD $0x2626262626262626; QUAD $0x2626262626262626 // .space 16, '&&&&&&&&&&&&&&&&' - QUAD $0x2626262626262626; QUAD $0x2626262626262626 // .space 16, '&&&&&&&&&&&&&&&&' - -LCPI7_1: - QUAD $0xe2e2e2e2e2e2e2e2; QUAD $0xe2e2e2e2e2e2e2e2 // .space 16, '\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2' - QUAD $0xe2e2e2e2e2e2e2e2; QUAD $0xe2e2e2e2e2e2e2e2 // .space 16, '\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2' - -LCPI7_2: - QUAD $0xfdfdfdfdfdfdfdfd; QUAD $0xfdfdfdfdfdfdfdfd // .space 16, '\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd' - QUAD $0xfdfdfdfdfdfdfdfd; QUAD $0xfdfdfdfdfdfdfdfd // .space 16, '\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd' - -LCPI7_3: - QUAD $0x3c3c3c3c3c3c3c3c; QUAD $0x3c3c3c3c3c3c3c3c // .space 16, '<<<<<<<<<<<<<<<<' - QUAD $0x3c3c3c3c3c3c3c3c; QUAD $0x3c3c3c3c3c3c3c3c // .space 16, '<<<<<<<<<<<<<<<<' - - // .p2align 4, 0x00 -LCPI7_4: - QUAD $0x2626262626262626; QUAD $0x2626262626262626 // .space 16, '&&&&&&&&&&&&&&&&' - -LCPI7_5: - QUAD $0xe2e2e2e2e2e2e2e2; QUAD $0xe2e2e2e2e2e2e2e2 // .space 16, '\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2' - -LCPI7_6: - QUAD $0xfdfdfdfdfdfdfdfd; QUAD $0xfdfdfdfdfdfdfdfd // .space 16, '\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd' - -LCPI7_7: - QUAD $0x3c3c3c3c3c3c3c3c; QUAD $0x3c3c3c3c3c3c3c3c // .space 16, '<<<<<<<<<<<<<<<<' - - // .p2align 4, 0x90 -_html_escape: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x18ec8348 // subq $24, %rsp - LONG $0xc04d8948 // movq %rcx, $-64(%rbp) - LONG $0xc8558948 // movq %rdx, $-56(%rbp) - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - LONG $0xd07d8948 // movq %rdi, $-48(%rbp) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x075f8e0f; WORD $0x0000 // jle LBB7_102, $1887(%rip) - WORD $0x8949; BYTE $0xf3 // movq %rsi, %r11 - LONG $0xc0458b48 // movq $-64(%rbp), %rax - WORD $0x8b4c; BYTE $0x08 // movq (%rax), %r9 - QUAD $0xffffff021d6ffdc5 // vmovdqa $-254(%rip), %ymm3 /* LCPI7_0(%rip) */ - QUAD $0xffffff1a256ffdc5 // vmovdqa $-230(%rip), %ymm4 /* LCPI7_1(%rip) */ - QUAD $0xffffff322d6ffdc5 // vmovdqa $-206(%rip), %ymm5 /* LCPI7_2(%rip) */ - QUAD $0xffffff4a356ffdc5 // vmovdqa $-182(%rip), %ymm6 /* LCPI7_3(%rip) */ - LONG $0x733d8d4c; WORD $0x00e6; BYTE $0x00 // leaq $58995(%rip), %r15 /* __HtmlQuoteTab(%rip) */ - QUAD $0x000300000001bf48; WORD $0x0000 // movabsq $12884901889, %rdi - LONG $0xd0658b4c // movq $-48(%rbp), %r12 - LONG $0xc8458b4c // movq $-56(%rbp), %r8 - BYTE $0x90 // .p2align 4, 0x90 - -LBB7_2: - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x07318e0f; WORD $0x0000 // jle LBB7_3, $1841(%rip) - LONG $0x1ffb8349 // cmpq $31, %r11 - WORD $0x9f0f; BYTE $0xc1 // setg %cl - WORD $0x894d; BYTE $0xca // movq %r9, %r10 - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - WORD $0x894d; BYTE $0xde // movq %r11, %r14 - WORD $0x894d; BYTE $0xe5 // movq %r12, %r13 - LONG $0x20f98349 // cmpq $32, %r9 - LONG $0x007a8c0f; WORD $0x0000 // jl LBB7_11, $122(%rip) - LONG $0x20fb8349 // cmpq $32, %r11 - LONG $0x00708c0f; WORD $0x0000 // jl LBB7_11, $112(%rip) - WORD $0x894d; BYTE $0xe5 // movq %r12, %r13 - WORD $0x894c; BYTE $0xde // movq %r11, %rsi - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - WORD $0x894c; BYTE $0xc8 // movq %r9, %rax - LONG $0x90909090 // .p2align 4, 0x90 - -LBB7_7: - LONG $0x6f7ec1c4; WORD $0x0045 // vmovdqu (%r13), %ymm0 - LONG $0xcb74fdc5 // vpcmpeqb %ymm3, %ymm0, %ymm1 - LONG $0xd474fdc5 // vpcmpeqb %ymm4, %ymm0, %ymm2 - LONG $0xc9ebedc5 // vpor %ymm1, %ymm2, %ymm1 - LONG $0xd5dbfdc5 // vpand %ymm5, %ymm0, %ymm2 - LONG $0xd674edc5 // vpcmpeqb %ymm6, %ymm2, %ymm2 - LONG $0xcaebf5c5 // vpor %ymm2, %ymm1, %ymm1 - LONG $0x037ffec5 // vmovdqu %ymm0, (%rbx) - LONG $0xc9d7fdc5 // vpmovmskb %ymm1, %ecx - WORD $0xc985 // testl %ecx, %ecx - LONG $0x01a2850f; WORD $0x0000 // jne LBB7_8, $418(%rip) - LONG $0x20c58349 // addq $32, %r13 - LONG $0x20c38348 // addq $32, %rbx - LONG $0xe0768d4c // leaq $-32(%rsi), %r14 - LONG $0xe0508d4c // leaq $-32(%rax), %r10 - LONG $0x3ffe8348 // cmpq $63, %rsi - WORD $0x9f0f; BYTE $0xc1 // setg %cl - LONG $0x40fe8348 // cmpq $64, %rsi - LONG $0x00118c0f; WORD $0x0000 // jl LBB7_11, $17(%rip) - WORD $0x894c; BYTE $0xf6 // movq %r14, %rsi - LONG $0x3ff88348 // cmpq $63, %rax - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - LONG $0xffa18f0f; WORD $0xffff // jg LBB7_7, $-95(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB7_11: - WORD $0xc984 // testb %cl, %cl - LONG $0x0088840f; WORD $0x0000 // je LBB7_37, $136(%rip) - LONG $0x6f7ec1c4; WORD $0x0045 // vmovdqu (%r13), %ymm0 - LONG $0xcb74fdc5 // vpcmpeqb %ymm3, %ymm0, %ymm1 - LONG $0xd474fdc5 // vpcmpeqb %ymm4, %ymm0, %ymm2 - LONG $0xc9ebedc5 // vpor %ymm1, %ymm2, %ymm1 - LONG $0xc5dbfdc5 // vpand %ymm5, %ymm0, %ymm0 - LONG $0xc674fdc5 // vpcmpeqb %ymm6, %ymm0, %ymm0 - LONG $0xc0ebf5c5 // vpor %ymm0, %ymm1, %ymm0 - LONG $0xc0d7fdc5 // vpmovmskb %ymm0, %eax - QUAD $0x000100000000b948; WORD $0x0000 // movabsq $4294967296, %rcx - WORD $0x0948; BYTE $0xc8 // orq %rcx, %rax - LONG $0xc8bc0f48 // bsfq %rax, %rcx - LONG $0x6f7ac1c4; WORD $0x0045 // vmovdqu (%r13), %xmm0 - LONG $0x16f9e3c4; WORD $0x01c0 // vpextrq $1, %xmm0, %rax - LONG $0x7ef9e1c4; BYTE $0xc2 // vmovq %xmm0, %rdx - WORD $0x394c; BYTE $0xd1 // cmpq %r10, %rcx - LONG $0x012a8e0f; WORD $0x0000 // jle LBB7_13, $298(%rip) - LONG $0x10fa8349 // cmpq $16, %r10 - LONG $0x0160820f; WORD $0x0000 // jb LBB7_26, $352(%rip) - WORD $0x8948; BYTE $0x13 // movq %rdx, (%rbx) - LONG $0x08438948 // movq %rax, $8(%rbx) - LONG $0x10458d49 // leaq $16(%r13), %rax - LONG $0x10c38348 // addq $16, %rbx - LONG $0xf0728d49 // leaq $-16(%r10), %rsi - LONG $0x08fe8348 // cmpq $8, %rsi - LONG $0x0153830f; WORD $0x0000 // jae LBB7_29, $339(%rip) - LONG $0x000160e9; BYTE $0x00 // jmp LBB7_30, $352(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB7_37: - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x0ffe8349 // cmpq $15, %r14 - LONG $0xc79f0f41 // setg %r15b - LONG $0x10fa8349 // cmpq $16, %r10 - LONG $0x01688c0f; WORD $0x0000 // jl LBB7_38, $360(%rip) - LONG $0x10fe8349 // cmpq $16, %r14 - QUAD $0xfffffdfc3d6ff9c5 // vmovdqa $-516(%rip), %xmm7 /* LCPI7_4(%rip) */ - QUAD $0xfffffe04056f79c5 // vmovdqa $-508(%rip), %xmm8 /* LCPI7_5(%rip) */ - QUAD $0xfffffe0c0d6f79c5 // vmovdqa $-500(%rip), %xmm9 /* LCPI7_6(%rip) */ - QUAD $0xfffffe14156f79c5 // vmovdqa $-492(%rip), %xmm10 /* LCPI7_7(%rip) */ - LONG $0x01f08c0f; WORD $0x0000 // jl LBB7_40, $496(%rip) - QUAD $0xfffffd561d6ffdc5 // vmovdqa $-682(%rip), %ymm3 /* LCPI7_0(%rip) */ - QUAD $0xfffffd6e256ffdc5 // vmovdqa $-658(%rip), %ymm4 /* LCPI7_1(%rip) */ - QUAD $0xfffffd862d6ffdc5 // vmovdqa $-634(%rip), %ymm5 /* LCPI7_2(%rip) */ - QUAD $0xfffffd9e356ffdc5 // vmovdqa $-610(%rip), %ymm6 /* LCPI7_3(%rip) */ - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB7_42: - LONG $0x6f7ac1c4; WORD $0x0045 // vmovdqu (%r13), %xmm0 - LONG $0xcf74f9c5 // vpcmpeqb %xmm7, %xmm0, %xmm1 - LONG $0xd074b9c5 // vpcmpeqb %xmm0, %xmm8, %xmm2 - LONG $0xc9ebe9c5 // vpor %xmm1, %xmm2, %xmm1 - LONG $0xd0dbb1c5 // vpand %xmm0, %xmm9, %xmm2 - LONG $0xd274a9c5 // vpcmpeqb %xmm2, %xmm10, %xmm2 - LONG $0xcaebf1c5 // vpor %xmm2, %xmm1, %xmm1 - LONG $0x037ffac5 // vmovdqu %xmm0, (%rbx) - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - WORD $0x8566; BYTE $0xc0 // testw %ax, %ax - LONG $0x007b850f; WORD $0x0000 // jne LBB7_43, $123(%rip) - LONG $0x10c58349 // addq $16, %r13 - LONG $0x10c38348 // addq $16, %rbx - LONG $0xf0468d49 // leaq $-16(%r14), %rax - LONG $0xf04a8d49 // leaq $-16(%r10), %rcx - LONG $0x1ffe8349 // cmpq $31, %r14 - LONG $0xc79f0f41 // setg %r15b - LONG $0x20fe8349 // cmpq $32, %r14 - LONG $0x01058c0f; WORD $0x0000 // jl LBB7_46, $261(%rip) - WORD $0x8949; BYTE $0xc6 // movq %rax, %r14 - LONG $0x1ffa8349 // cmpq $31, %r10 - WORD $0x8949; BYTE $0xca // movq %rcx, %r10 - LONG $0xff9f8f0f; WORD $0xffff // jg LBB7_42, $-97(%rip) - LONG $0x0000f0e9; BYTE $0x00 // jmp LBB7_46, $240(%rip) - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB7_8: - WORD $0x294d; BYTE $0xe5 // subq %r12, %r13 - LONG $0xd1bc0f44 // bsfl %ecx, %r10d - WORD $0x014d; BYTE $0xea // addq %r13, %r10 - LONG $0x00037be9; BYTE $0x00 // jmp LBB7_79, $891(%rip) - -LBB7_13: - WORD $0xf983; BYTE $0x10 // cmpl $16, %ecx - LONG $0x01e3820f; WORD $0x0000 // jb LBB7_14, $483(%rip) - WORD $0x8948; BYTE $0x13 // movq %rdx, (%rbx) - LONG $0x08438948 // movq %rax, $8(%rbx) - LONG $0x10458d49 // leaq $16(%r13), %rax - LONG $0x10c38348 // addq $16, %rbx - LONG $0xf0718d48 // leaq $-16(%rcx), %rsi - LONG $0x08fe8348 // cmpq $8, %rsi - LONG $0x01d6830f; WORD $0x0000 // jae LBB7_17, $470(%rip) - LONG $0x0001e3e9; BYTE $0x00 // jmp LBB7_18, $483(%rip) - -LBB7_43: - WORD $0xb70f; BYTE $0xc0 // movzwl %ax, %eax - WORD $0x294d; BYTE $0xe5 // subq %r12, %r13 - LONG $0xd0bc0f44 // bsfl %eax, %r10d - WORD $0x014d; BYTE $0xea // addq %r13, %r10 - WORD $0x8949; BYTE $0xd7 // movq %rdx, %r15 - LONG $0x00033be9; BYTE $0x00 // jmp LBB7_79, $827(%rip) - -LBB7_26: - WORD $0x894c; BYTE $0xe8 // movq %r13, %rax - WORD $0x894c; BYTE $0xd6 // movq %r10, %rsi - LONG $0x08fe8348 // cmpq $8, %rsi - LONG $0x0012820f; WORD $0x0000 // jb LBB7_30, $18(%rip) - -LBB7_29: - WORD $0x8b48; BYTE $0x08 // movq (%rax), %rcx - WORD $0x8948; BYTE $0x0b // movq %rcx, (%rbx) - LONG $0x08c08348 // addq $8, %rax - LONG $0x08c38348 // addq $8, %rbx - LONG $0xf8c68348 // addq $-8, %rsi - -LBB7_30: - LONG $0x04fe8348 // cmpq $4, %rsi - LONG $0x01ce8d0f; WORD $0x0000 // jge LBB7_31, $462(%rip) - LONG $0x02fe8348 // cmpq $2, %rsi - LONG $0x01de830f; WORD $0x0000 // jae LBB7_33, $478(%rip) - -LBB7_34: - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x0004840f; WORD $0x0000 // je LBB7_36, $4(%rip) - -LBB7_35: - WORD $0x008a // movb (%rax), %al - WORD $0x0388 // movb %al, (%rbx) - -LBB7_36: - WORD $0x294d; BYTE $0xe2 // subq %r12, %r10 - WORD $0x014d; BYTE $0xea // addq %r13, %r10 - WORD $0xf749; BYTE $0xd2 // notq %r10 - LONG $0x0002eae9; BYTE $0x00 // jmp LBB7_79, $746(%rip) - -LBB7_38: - WORD $0x894c; BYTE $0xd1 // movq %r10, %rcx - WORD $0x894c; BYTE $0xf0 // movq %r14, %rax - QUAD $0xfffffc121d6ffdc5 // vmovdqa $-1006(%rip), %ymm3 /* LCPI7_0(%rip) */ - QUAD $0xfffffc2a256ffdc5 // vmovdqa $-982(%rip), %ymm4 /* LCPI7_1(%rip) */ - QUAD $0xfffffc422d6ffdc5 // vmovdqa $-958(%rip), %ymm5 /* LCPI7_2(%rip) */ - QUAD $0xfffffc5a356ffdc5 // vmovdqa $-934(%rip), %ymm6 /* LCPI7_3(%rip) */ - QUAD $0xfffffc723d6ff9c5 // vmovdqa $-910(%rip), %xmm7 /* LCPI7_4(%rip) */ - QUAD $0xfffffc7a056f79c5 // vmovdqa $-902(%rip), %xmm8 /* LCPI7_5(%rip) */ - QUAD $0xfffffc820d6f79c5 // vmovdqa $-894(%rip), %xmm9 /* LCPI7_6(%rip) */ - QUAD $0xfffffc8a156f79c5 // vmovdqa $-886(%rip), %xmm10 /* LCPI7_7(%rip) */ - -LBB7_46: - WORD $0x8445; BYTE $0xff // testb %r15b, %r15b - LONG $0x0092840f; WORD $0x0000 // je LBB7_47, $146(%rip) - -LBB7_49: - LONG $0x6f7ac1c4; WORD $0x0045 // vmovdqu (%r13), %xmm0 - LONG $0xcf74f9c5 // vpcmpeqb %xmm7, %xmm0, %xmm1 - LONG $0xd074b9c5 // vpcmpeqb %xmm0, %xmm8, %xmm2 - LONG $0xc9ebe9c5 // vpor %xmm1, %xmm2, %xmm1 - LONG $0xd0dbb1c5 // vpand %xmm0, %xmm9, %xmm2 - LONG $0xd274a9c5 // vpcmpeqb %xmm2, %xmm10, %xmm2 - LONG $0xcaebf1c5 // vpor %xmm2, %xmm1, %xmm1 - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - LONG $0x0100000d; BYTE $0x00 // orl $65536, %eax - WORD $0xbc0f; BYTE $0xf0 // bsfl %eax, %esi - LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax - WORD $0x3948; BYTE $0xf1 // cmpq %rsi, %rcx - WORD $0x8949; BYTE $0xd7 // movq %rdx, %r15 - LONG $0x01938d0f; WORD $0x0000 // jge LBB7_50, $403(%rip) - LONG $0x08f98348 // cmpq $8, %rcx - LONG $0x01b8820f; WORD $0x0000 // jb LBB7_61, $440(%rip) - WORD $0x8948; BYTE $0x03 // movq %rax, (%rbx) - LONG $0x08458d49 // leaq $8(%r13), %rax - LONG $0x08c38348 // addq $8, %rbx - LONG $0xf8718d48 // leaq $-8(%rcx), %rsi - LONG $0x04fe8348 // cmpq $4, %rsi - LONG $0x01af8d0f; WORD $0x0000 // jge LBB7_64, $431(%rip) - LONG $0x0001bae9; BYTE $0x00 // jmp LBB7_65, $442(%rip) - -LBB7_40: - WORD $0x894c; BYTE $0xd1 // movq %r10, %rcx - WORD $0x894c; BYTE $0xf0 // movq %r14, %rax - QUAD $0xfffffb601d6ffdc5 // vmovdqa $-1184(%rip), %ymm3 /* LCPI7_0(%rip) */ - QUAD $0xfffffb78256ffdc5 // vmovdqa $-1160(%rip), %ymm4 /* LCPI7_1(%rip) */ - QUAD $0xfffffb902d6ffdc5 // vmovdqa $-1136(%rip), %ymm5 /* LCPI7_2(%rip) */ - QUAD $0xfffffba8356ffdc5 // vmovdqa $-1112(%rip), %ymm6 /* LCPI7_3(%rip) */ - WORD $0x8445; BYTE $0xff // testb %r15b, %r15b - LONG $0xff6e850f; WORD $0xffff // jne LBB7_49, $-146(%rip) - -LBB7_47: - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - WORD $0x8949; BYTE $0xd7 // movq %rdx, %r15 - LONG $0x01a78e0f; WORD $0x0000 // jle LBB7_48, $423(%rip) - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x019e8e0f; WORD $0x0000 // jle LBB7_75, $414(%rip) - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB7_71: - LONG $0x55b60f41; BYTE $0x00 // movzbl (%r13), %edx - LONG $0x3efa8348 // cmpq $62, %rdx - LONG $0x0014870f; WORD $0x0000 // ja LBB7_72, $20(%rip) - QUAD $0x004000000000be48; WORD $0x5000 // movabsq $5764607797912141824, %rsi - LONG $0xd6a30f48 // btq %rdx, %rsi - LONG $0x0121820f; WORD $0x0000 // jb LBB7_77, $289(%rip) - -LBB7_72: - WORD $0xfa80; BYTE $0xe2 // cmpb $-30, %dl - LONG $0x0118840f; WORD $0x0000 // je LBB7_77, $280(%rip) - LONG $0xff708d48 // leaq $-1(%rax), %rsi - WORD $0xff49; BYTE $0xc5 // incq %r13 - WORD $0x1388 // movb %dl, (%rbx) - LONG $0x02f88348 // cmpq $2, %rax - LONG $0x01588c0f; WORD $0x0000 // jl LBB7_75, $344(%rip) - LONG $0xff518d48 // leaq $-1(%rcx), %rdx - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - LONG $0x01f98348 // cmpq $1, %rcx - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - LONG $0xffaa8f0f; WORD $0xffff // jg LBB7_71, $-86(%rip) - LONG $0x00013ce9; BYTE $0x00 // jmp LBB7_75, $316(%rip) - -LBB7_14: - WORD $0x894c; BYTE $0xe8 // movq %r13, %rax - WORD $0x8948; BYTE $0xce // movq %rcx, %rsi - LONG $0x08fe8348 // cmpq $8, %rsi - LONG $0x0012820f; WORD $0x0000 // jb LBB7_18, $18(%rip) - -LBB7_17: - WORD $0x8b48; BYTE $0x10 // movq (%rax), %rdx - WORD $0x8948; BYTE $0x13 // movq %rdx, (%rbx) - LONG $0x08c08348 // addq $8, %rax - LONG $0x08c38348 // addq $8, %rbx - LONG $0xf8c68348 // addq $-8, %rsi - -LBB7_18: - LONG $0x04fe8348 // cmpq $4, %rsi - LONG $0x005c8d0f; WORD $0x0000 // jge LBB7_19, $92(%rip) - LONG $0x02fe8348 // cmpq $2, %rsi - LONG $0x006c830f; WORD $0x0000 // jae LBB7_21, $108(%rip) - -LBB7_22: - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x0004840f; WORD $0x0000 // je LBB7_24, $4(%rip) - -LBB7_23: - WORD $0x008a // movb (%rax), %al - WORD $0x0388 // movb %al, (%rbx) - -LBB7_24: - WORD $0x294d; BYTE $0xe5 // subq %r12, %r13 - WORD $0x0149; BYTE $0xcd // addq %rcx, %r13 - LONG $0x00013ee9; BYTE $0x00 // jmp LBB7_78, $318(%rip) - -LBB7_31: - WORD $0x088b // movl (%rax), %ecx - WORD $0x0b89 // movl %ecx, (%rbx) - LONG $0x04c08348 // addq $4, %rax - LONG $0x04c38348 // addq $4, %rbx - LONG $0xfcc68348 // addq $-4, %rsi - LONG $0x02fe8348 // cmpq $2, %rsi - LONG $0xfe22820f; WORD $0xffff // jb LBB7_34, $-478(%rip) - -LBB7_33: - WORD $0xb70f; BYTE $0x08 // movzwl (%rax), %ecx - WORD $0x8966; BYTE $0x0b // movw %cx, (%rbx) - LONG $0x02c08348 // addq $2, %rax - LONG $0x02c38348 // addq $2, %rbx - LONG $0xfec68348 // addq $-2, %rsi - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0xfe10850f; WORD $0xffff // jne LBB7_35, $-496(%rip) - LONG $0xfffe0fe9; BYTE $0xff // jmp LBB7_36, $-497(%rip) - -LBB7_19: - WORD $0x108b // movl (%rax), %edx - WORD $0x1389 // movl %edx, (%rbx) - LONG $0x04c08348 // addq $4, %rax - LONG $0x04c38348 // addq $4, %rbx - LONG $0xfcc68348 // addq $-4, %rsi - LONG $0x02fe8348 // cmpq $2, %rsi - LONG $0xff94820f; WORD $0xffff // jb LBB7_22, $-108(%rip) - -LBB7_21: - WORD $0xb70f; BYTE $0x10 // movzwl (%rax), %edx - WORD $0x8966; BYTE $0x13 // movw %dx, (%rbx) - LONG $0x02c08348 // addq $2, %rax - LONG $0x02c38348 // addq $2, %rbx - LONG $0xfec68348 // addq $-2, %rsi - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0xff82850f; WORD $0xffff // jne LBB7_23, $-126(%rip) - LONG $0xffff81e9; BYTE $0xff // jmp LBB7_24, $-127(%rip) - -LBB7_50: - WORD $0xfe83; BYTE $0x08 // cmpl $8, %esi - LONG $0x0082820f; WORD $0x0000 // jb LBB7_51, $130(%rip) - WORD $0x8948; BYTE $0x03 // movq %rax, (%rbx) - LONG $0x08558d4d // leaq $8(%r13), %r10 - LONG $0x08c38348 // addq $8, %rbx - LONG $0xf8468d48 // leaq $-8(%rsi), %rax - LONG $0x04f88348 // cmpq $4, %rax - LONG $0x00798d0f; WORD $0x0000 // jge LBB7_54, $121(%rip) - LONG $0x000085e9; BYTE $0x00 // jmp LBB7_55, $133(%rip) - -LBB7_77: - WORD $0x294d; BYTE $0xe5 // subq %r12, %r13 - LONG $0x00009be9; BYTE $0x00 // jmp LBB7_78, $155(%rip) - -LBB7_61: - WORD $0x894c; BYTE $0xe8 // movq %r13, %rax - WORD $0x8948; BYTE $0xce // movq %rcx, %rsi - LONG $0x04fe8348 // cmpq $4, %rsi - LONG $0x00108c0f; WORD $0x0000 // jl LBB7_65, $16(%rip) - -LBB7_64: - WORD $0x108b // movl (%rax), %edx - WORD $0x1389 // movl %edx, (%rbx) - LONG $0x04c08348 // addq $4, %rax - LONG $0x04c38348 // addq $4, %rbx - LONG $0xfcc68348 // addq $-4, %rsi - -LBB7_65: - LONG $0x02fe8348 // cmpq $2, %rsi - LONG $0x013e830f; WORD $0x0000 // jae LBB7_66, $318(%rip) - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x0004840f; WORD $0x0000 // je LBB7_69, $4(%rip) - -LBB7_68: - WORD $0x008a // movb (%rax), %al - WORD $0x0388 // movb %al, (%rbx) - -LBB7_69: - WORD $0x294c; BYTE $0xe1 // subq %r12, %rcx - WORD $0x014c; BYTE $0xe9 // addq %r13, %rcx - WORD $0xf748; BYTE $0xd1 // notq %rcx - WORD $0x8949; BYTE $0xca // movq %rcx, %r10 - LONG $0x000056e9; BYTE $0x00 // jmp LBB7_79, $86(%rip) - -LBB7_48: - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - -LBB7_75: - WORD $0x294d; BYTE $0xe5 // subq %r12, %r13 - WORD $0xf748; BYTE $0xde // negq %rsi - WORD $0x194d; BYTE $0xd2 // sbbq %r10, %r10 - WORD $0x314d; BYTE $0xea // xorq %r13, %r10 - LONG $0x000042e9; BYTE $0x00 // jmp LBB7_79, $66(%rip) - -LBB7_51: - WORD $0x894d; BYTE $0xea // movq %r13, %r10 - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - LONG $0x04f88348 // cmpq $4, %rax - LONG $0x00118c0f; WORD $0x0000 // jl LBB7_55, $17(%rip) - -LBB7_54: - WORD $0x8b41; BYTE $0x0a // movl (%r10), %ecx - WORD $0x0b89 // movl %ecx, (%rbx) - LONG $0x04c28349 // addq $4, %r10 - LONG $0x04c38348 // addq $4, %rbx - LONG $0xfcc08348 // addq $-4, %rax - -LBB7_55: - LONG $0x02f88348 // cmpq $2, %rax - LONG $0x0101830f; WORD $0x0000 // jae LBB7_56, $257(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0005840f; WORD $0x0000 // je LBB7_59, $5(%rip) - -LBB7_58: - WORD $0x8a41; BYTE $0x02 // movb (%r10), %al - WORD $0x0388 // movb %al, (%rbx) - -LBB7_59: - WORD $0x294d; BYTE $0xe5 // subq %r12, %r13 - WORD $0x0149; BYTE $0xf5 // addq %rsi, %r13 - -LBB7_78: - WORD $0x894d; BYTE $0xea // movq %r13, %r10 - -LBB7_79: - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0x0152880f; WORD $0x0000 // js LBB7_80, $338(%rip) - WORD $0x014d; BYTE $0xd4 // addq %r10, %r12 - WORD $0x014d; BYTE $0xd0 // addq %r10, %r8 - WORD $0x294d; BYTE $0xd3 // subq %r10, %r11 - LONG $0x01668e0f; WORD $0x0000 // jle LBB7_82, $358(%rip) - WORD $0x294d; BYTE $0xd1 // subq %r10, %r9 - LONG $0x240c8a41 // movb (%r12), %cl - WORD $0xf980; BYTE $0xe2 // cmpb $-30, %cl - LONG $0x00e3840f; WORD $0x0000 // je LBB7_85, $227(%rip) - WORD $0x894c; BYTE $0xe0 // movq %r12, %rax - -LBB7_89: - WORD $0xb60f; BYTE $0xd1 // movzbl %cl, %edx - LONG $0x04e2c148 // shlq $4, %rdx - LONG $0x3a1c8b4a // movq (%rdx,%r15), %rbx - WORD $0x6348; BYTE $0xf3 // movslq %ebx, %rsi - WORD $0x2949; BYTE $0xf1 // subq %rsi, %r9 - LONG $0x01538c0f; WORD $0x0000 // jl LBB7_90, $339(%rip) - LONG $0x20e3c148 // shlq $32, %rbx - LONG $0x3a4c8d4a; BYTE $0x08 // leaq $8(%rdx,%r15), %rcx - WORD $0x3948; BYTE $0xfb // cmpq %rdi, %rbx - LONG $0x00228c0f; WORD $0x0000 // jl LBB7_94, $34(%rip) - WORD $0x098b // movl (%rcx), %ecx - WORD $0x8941; BYTE $0x08 // movl %ecx, (%r8) - LONG $0x3a4c8d4a; BYTE $0x0c // leaq $12(%rdx,%r15), %rcx - LONG $0x04588d49 // leaq $4(%r8), %rbx - LONG $0xfc568d48 // leaq $-4(%rsi), %rdx - LONG $0x02fa8348 // cmpq $2, %rdx - LONG $0x0016830f; WORD $0x0000 // jae LBB7_97, $22(%rip) - LONG $0x000029e9; BYTE $0x00 // jmp LBB7_98, $41(%rip) - BYTE $0x90 // .p2align 4, 0x90 - -LBB7_94: - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - LONG $0x02fa8348 // cmpq $2, %rdx - LONG $0x0018820f; WORD $0x0000 // jb LBB7_98, $24(%rip) - -LBB7_97: - WORD $0x8949; BYTE $0xfa // movq %rdi, %r10 - WORD $0xb70f; BYTE $0x39 // movzwl (%rcx), %edi - WORD $0x8966; BYTE $0x3b // movw %di, (%rbx) - WORD $0x894c; BYTE $0xd7 // movq %r10, %rdi - LONG $0x02c18348 // addq $2, %rcx - LONG $0x02c38348 // addq $2, %rbx - LONG $0xfec28348 // addq $-2, %rdx - -LBB7_98: - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x0004840f; WORD $0x0000 // je LBB7_100, $4(%rip) - WORD $0x098a // movb (%rcx), %cl - WORD $0x0b88 // movb %cl, (%rbx) - -LBB7_100: - WORD $0x0149; BYTE $0xf0 // addq %rsi, %r8 - -LBB7_101: - WORD $0xff48; BYTE $0xc0 // incq %rax - LONG $0xff4b8d49 // leaq $-1(%r11), %rcx - WORD $0x8949; BYTE $0xc4 // movq %rax, %r12 - LONG $0x01fb8349 // cmpq $1, %r11 - WORD $0x8949; BYTE $0xcb // movq %rcx, %r11 - LONG $0xf9a18f0f; WORD $0xffff // jg LBB7_2, $-1631(%rip) - LONG $0x0000b7e9; BYTE $0x00 // jmp LBB7_102, $183(%rip) - -LBB7_66: - WORD $0xb70f; BYTE $0x10 // movzwl (%rax), %edx - WORD $0x8966; BYTE $0x13 // movw %dx, (%rbx) - LONG $0x02c08348 // addq $2, %rax - LONG $0x02c38348 // addq $2, %rbx - LONG $0xfec68348 // addq $-2, %rsi - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0xfeb0850f; WORD $0xffff // jne LBB7_68, $-336(%rip) - LONG $0xfffeafe9; BYTE $0xff // jmp LBB7_69, $-337(%rip) - -LBB7_56: - LONG $0x0ab70f41 // movzwl (%r10), %ecx - WORD $0x8966; BYTE $0x0b // movw %cx, (%rbx) - LONG $0x02c28349 // addq $2, %r10 - LONG $0x02c38348 // addq $2, %rbx - LONG $0xfec08348 // addq $-2, %rax - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xfeec850f; WORD $0xffff // jne LBB7_58, $-276(%rip) - LONG $0xfffeece9; BYTE $0xff // jmp LBB7_59, $-276(%rip) - -LBB7_85: - LONG $0x03fb8349 // cmpq $3, %r11 - LONG $0x002b8c0f; WORD $0x0000 // jl LBB7_91, $43(%rip) - LONG $0x247c8041; WORD $0x8001 // cmpb $-128, $1(%r12) - LONG $0x001f850f; WORD $0x0000 // jne LBB7_91, $31(%rip) - LONG $0x244c8a41; BYTE $0x02 // movb $2(%r12), %cl - WORD $0xc889 // movl %ecx, %eax - WORD $0xfe24 // andb $-2, %al - WORD $0xa83c // cmpb $-88, %al - LONG $0x000e850f; WORD $0x0000 // jne LBB7_91, $14(%rip) - LONG $0x24448d49; BYTE $0x02 // leaq $2(%r12), %rax - LONG $0xfec38349 // addq $-2, %r11 - LONG $0xfffeebe9; BYTE $0xff // jmp LBB7_89, $-277(%rip) - -LBB7_91: - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x00578e0f; WORD $0x0000 // jle LBB7_3, $87(%rip) - LONG $0xe200c641 // movb $-30, (%r8) - WORD $0xff49; BYTE $0xc0 // incq %r8 - WORD $0xff49; BYTE $0xc9 // decq %r9 - WORD $0x894c; BYTE $0xe0 // movq %r12, %rax - LONG $0xffff53e9; BYTE $0xff // jmp LBB7_101, $-173(%rip) - -LBB7_80: - LONG $0xc8452b4c // subq $-56(%rbp), %r8 - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x014c; BYTE $0xc0 // addq %r8, %rax - LONG $0xc04d8b48 // movq $-64(%rbp), %rcx - WORD $0x8948; BYTE $0x01 // movq %rax, (%rcx) - LONG $0xd0458b48 // movq $-48(%rbp), %rax - WORD $0x294c; BYTE $0xe0 // subq %r12, %rax - WORD $0x014c; BYTE $0xd0 // addq %r10, %rax - LONG $0x00002ce9; BYTE $0x00 // jmp LBB7_103, $44(%rip) - -LBB7_82: - WORD $0x894c; BYTE $0xe0 // movq %r12, %rax - -LBB7_102: - LONG $0xc8452b4c // subq $-56(%rbp), %r8 - LONG $0xc04d8b48 // movq $-64(%rbp), %rcx - WORD $0x894c; BYTE $0x01 // movq %r8, (%rcx) - LONG $0xd0452b48 // subq $-48(%rbp), %rax - LONG $0x000015e9; BYTE $0x00 // jmp LBB7_103, $21(%rip) - -LBB7_90: - LONG $0xc8452b4c // subq $-56(%rbp), %r8 - LONG $0xc0458b48 // movq $-64(%rbp), %rax - WORD $0x894c; BYTE $0x00 // movq %r8, (%rax) - -LBB7_3: - WORD $0xf749; BYTE $0xd4 // notq %r12 - LONG $0xd065034c // addq $-48(%rbp), %r12 - WORD $0x894c; BYTE $0xe0 // movq %r12, %rax - -LBB7_103: - LONG $0x18c48348 // addq $24, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -_atof_eisel_lemire64: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - LONG $0x015c868d; WORD $0x0000 // leal $348(%rsi), %eax - LONG $0x0002b73d; BYTE $0x00 // cmpl $695, %eax - LONG $0x0115870f; WORD $0x0000 // ja LBB8_1, $277(%rip) - WORD $0x8949; BYTE $0xc8 // movq %rcx, %r8 - WORD $0x8941; BYTE $0xd1 // movl %edx, %r9d - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0x000d840f; WORD $0x0000 // je LBB8_4, $13(%rip) - LONG $0xd7bd0f4c // bsrq %rdi, %r10 - LONG $0x3ff28349 // xorq $63, %r10 - LONG $0x000006e9; BYTE $0x00 // jmp LBB8_5, $6(%rip) - -LBB8_4: - LONG $0x0040ba41; WORD $0x0000 // movl $64, %r10d - -LBB8_5: - WORD $0x8944; BYTE $0xd1 // movl %r10d, %ecx - WORD $0xd348; BYTE $0xe7 // shlq %cl, %rdi - WORD $0xc389 // movl %eax, %ebx - LONG $0x04e3c148 // shlq $4, %rbx - LONG $0x01358d4c; WORD $0x0069; BYTE $0x00 // leaq $26881(%rip), %r14 /* _POW10_M128_TAB(%rip) */ - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x3364f74a; BYTE $0x08 // mulq $8(%rbx,%r14) - WORD $0x8949; BYTE $0xc7 // movq %rax, %r15 - WORD $0x8949; BYTE $0xd3 // movq %rdx, %r11 - WORD $0x8944; BYTE $0xd8 // movl %r11d, %eax - LONG $0x0001ff25; BYTE $0x00 // andl $511, %eax - WORD $0x8948; BYTE $0xf9 // movq %rdi, %rcx - WORD $0xf748; BYTE $0xd1 // notq %rcx - WORD $0x3949; BYTE $0xcf // cmpq %rcx, %r15 - LONG $0x004f860f; WORD $0x0000 // jbe LBB8_11, $79(%rip) - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - LONG $0x0001ff3d; BYTE $0x00 // cmpl $511, %eax - LONG $0x0044850f; WORD $0x0000 // jne LBB8_13, $68(%rip) - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x3324f74a // mulq (%rbx,%r14) - WORD $0x014c; BYTE $0xfa // addq %r15, %rdx - LONG $0x00d38349 // adcq $0, %r11 - WORD $0x3948; BYTE $0xc8 // cmpq %rcx, %rax - LONG $0x001d860f; WORD $0x0000 // jbe LBB8_12, $29(%rip) - LONG $0xfffa8348 // cmpq $-1, %rdx - LONG $0x0013850f; WORD $0x0000 // jne LBB8_12, $19(%rip) - WORD $0x8944; BYTE $0xd8 // movl %r11d, %eax - LONG $0x0001ff25; BYTE $0x00 // andl $511, %eax - LONG $0x0001ff3d; BYTE $0x00 // cmpl $511, %eax - LONG $0x0079840f; WORD $0x0000 // je LBB8_1, $121(%rip) - -LBB8_12: - WORD $0x8944; BYTE $0xd8 // movl %r11d, %eax - LONG $0x0001ff25; BYTE $0x00 // andl $511, %eax - LONG $0x000003e9; BYTE $0x00 // jmp LBB8_13, $3(%rip) - -LBB8_11: - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - -LBB8_13: - WORD $0x894c; BYTE $0xdf // movq %r11, %rdi - LONG $0x3fefc148 // shrq $63, %rdi - WORD $0x4f8d; BYTE $0x09 // leal $9(%rdi), %ecx - WORD $0xd349; BYTE $0xeb // shrq %cl, %r11 - WORD $0x0948; BYTE $0xd0 // orq %rdx, %rax - LONG $0x000f850f; WORD $0x0000 // jne LBB8_16, $15(%rip) - WORD $0x8944; BYTE $0xd8 // movl %r11d, %eax - WORD $0xe083; BYTE $0x03 // andl $3, %eax - WORD $0xf883; BYTE $0x01 // cmpl $1, %eax - LONG $0x0044840f; WORD $0x0000 // je LBB8_1, $68(%rip) - -LBB8_16: - LONG $0x526ac669; WORD $0x0003 // imull $217706, %esi, %eax - WORD $0xf8c1; BYTE $0x10 // sarl $16, %eax - LONG $0x00043f05; BYTE $0x00 // addl $1087, %eax - WORD $0x6348; BYTE $0xd0 // movslq %eax, %rdx - WORD $0x8944; BYTE $0xd8 // movl %r11d, %eax - WORD $0xe083; BYTE $0x01 // andl $1, %eax - WORD $0x014c; BYTE $0xd8 // addq %r11, %rax - QUAD $0x000000000000b948; WORD $0x01c0 // movabsq $126100789566373888, %rcx - WORD $0x2148; BYTE $0xc1 // andq %rax, %rcx - WORD $0x294c; BYTE $0xd2 // subq %r10, %rdx - LONG $0x3a548d48; BYTE $0xfe // leaq $-2(%rdx,%rdi), %rdx - LONG $0x01f98348 // cmpq $1, %rcx - LONG $0xffda8348 // sbbq $-1, %rdx - LONG $0xfdfa8148; WORD $0x0007; BYTE $0x00 // cmpq $2045, %rdx - LONG $0x0009860f; WORD $0x0000 // jbe LBB8_18, $9(%rip) - -LBB8_1: - WORD $0xc031 // xorl %eax, %eax - -LBB8_19: - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB8_18: - WORD $0xff48; BYTE $0xc2 // incq %rdx - LONG $0x01f98348 // cmpq $1, %rcx - WORD $0x02b1 // movb $2, %cl - WORD $0xd980; BYTE $0x00 // sbbb $0, %cl - WORD $0xd348; BYTE $0xe8 // shrq %cl, %rax - LONG $0x34e2c148 // shlq $52, %rdx - QUAD $0xffffffffffffb948; WORD $0x000f // movabsq $4503599627370495, %rcx - WORD $0x2148; BYTE $0xc1 // andq %rax, %rcx - WORD $0x0948; BYTE $0xd1 // orq %rdx, %rcx - QUAD $0x000000000000b848; WORD $0x8000 // movabsq $-9223372036854775808, %rax - WORD $0x0948; BYTE $0xc8 // orq %rcx, %rax - LONG $0xfff98341 // cmpl $-1, %r9d - LONG $0xc1450f48 // cmovneq %rcx, %rax - WORD $0x8949; BYTE $0x00 // movq %rax, (%r8) - WORD $0x01b0 // movb $1, %al - LONG $0xffffb7e9; BYTE $0xff // jmp LBB8_19, $-73(%rip) - QUAD $0x0000000000000000; QUAD $0x0000000000000000; LONG $0x00000000; WORD $0x0000 // .p2align 5, 0x00 - -LCPI9_0: - QUAD $0x0000000000000000 // .space 8, '\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000001 // .quad 1 - QUAD $0x0000000000000001 // .quad 1 - QUAD $0x0000000000000001 // .quad 1 - - // .p2align 3, 0x00 -LCPI9_1: - QUAD $0x0000000000000001 // .quad 1 - -LCPI9_2: - QUAD $0x0000000000002710 // .quad 10000 - -LCPI9_3: - QUAD $0x000000000000000a // .quad 10 - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -_decimal_to_f64: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax - WORD $0x8948; BYTE $0xf3 // movq %rsi, %rbx - WORD $0x8949; BYTE $0xff // movq %rdi, %r15 - QUAD $0x000000000000bd49; WORD $0x0010 // movabsq $4503599627370496, %r13 - LONG $0x00107f83 // cmpl $0, $16(%rdi) - LONG $0x002f840f; WORD $0x0000 // je LBB9_4, $47(%rip) - QUAD $0x000000000000be49; WORD $0x7ff0 // movabsq $9218868437227405312, %r14 - LONG $0x14478b41 // movl $20(%r15), %eax - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - LONG $0x0001363d; BYTE $0x00 // cmpl $310, %eax - LONG $0x052b8f0f; WORD $0x0000 // jg LBB9_69, $1323(%rip) - LONG $0xfffeb63d; BYTE $0xff // cmpl $-330, %eax - LONG $0x00138d0f; WORD $0x0000 // jge LBB9_5, $19(%rip) - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - LONG $0x000518e9; BYTE $0x00 // jmp LBB9_69, $1304(%rip) - -LBB9_4: - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - LONG $0x00050de9; BYTE $0x00 // jmp LBB9_69, $1293(%rip) - -LBB9_5: - WORD $0xc085 // testl %eax, %eax - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - LONG $0x005a8e0f; WORD $0x0000 // jle LBB9_12, $90(%rip) - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - LONG $0x98358d4c; WORD $0x0092; BYTE $0x00 // leaq $37528(%rip), %r14 /* _POW_TAB(%rip) */ - LONG $0x00002de9; BYTE $0x00 // jmp LBB9_8, $45(%rip) - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB9_10: - WORD $0xc089 // movl %eax, %eax - LONG $0x861c8b41 // movl (%r14,%rax,4), %ebx - LONG $0x107f8341; BYTE $0x00 // cmpl $0, $16(%r15) - LONG $0x000a840f; WORD $0x0000 // je LBB9_7, $10(%rip) - -LBB9_11: - WORD $0x894c; BYTE $0xff // movq %r15, %rdi - WORD $0xde89 // movl %ebx, %esi - LONG $0x006225e8; BYTE $0x00 // callq _right_shift, $25125(%rip) - -LBB9_7: - WORD $0x0141; BYTE $0xdc // addl %ebx, %r12d - LONG $0x14478b41 // movl $20(%r15), %eax - WORD $0xc085 // testl %eax, %eax - LONG $0x001e8e0f; WORD $0x0000 // jle LBB9_12, $30(%rip) - -LBB9_8: - WORD $0xf883; BYTE $0x08 // cmpl $8, %eax - LONG $0xffcd8e0f; WORD $0xffff // jle LBB9_10, $-51(%rip) - LONG $0x00001bbb; BYTE $0x00 // movl $27, %ebx - LONG $0x107f8341; BYTE $0x00 // cmpl $0, $16(%r15) - LONG $0xffce850f; WORD $0xffff // jne LBB9_11, $-50(%rip) - LONG $0xffffd3e9; BYTE $0xff // jmp LBB9_7, $-45(%rip) - -LBB9_12: - LONG $0x41358d4c; WORD $0x0092; BYTE $0x00 // leaq $37441(%rip), %r14 /* _POW_TAB(%rip) */ - LONG $0x00002de9; BYTE $0x00 // jmp LBB9_14, $45(%rip) - -LBB9_18: - LONG $0x00001bbb; BYTE $0x00 // movl $27, %ebx - LONG $0x107f8341; BYTE $0x00 // cmpl $0, $16(%r15) - LONG $0x001a840f; WORD $0x0000 // je LBB9_13, $26(%rip) - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB9_20: - WORD $0x894c; BYTE $0xff // movq %r15, %rdi - WORD $0xde89 // movl %ebx, %esi - LONG $0x005fd6e8; BYTE $0x00 // callq _left_shift, $24534(%rip) - LONG $0x14478b41 // movl $20(%r15), %eax - -LBB9_13: - WORD $0x2941; BYTE $0xdc // subl %ebx, %r12d - -LBB9_14: - WORD $0xc085 // testl %eax, %eax - LONG $0x0017880f; WORD $0x0000 // js LBB9_17, $23(%rip) - LONG $0x0035850f; WORD $0x0000 // jne LBB9_21, $53(%rip) - WORD $0x8b49; BYTE $0x0f // movq (%r15), %rcx - WORD $0x3980; BYTE $0x35 // cmpb $53, (%rcx) - LONG $0x000e8c0f; WORD $0x0000 // jl LBB9_19, $14(%rip) - LONG $0x000024e9; BYTE $0x00 // jmp LBB9_21, $36(%rip) - - // .p2align 4, 0x90 -LBB9_17: - WORD $0xf883; BYTE $0xf8 // cmpl $-8, %eax - LONG $0xffab8c0f; WORD $0xffff // jl LBB9_18, $-85(%rip) - -LBB9_19: - WORD $0xc189 // movl %eax, %ecx - WORD $0xd9f7 // negl %ecx - WORD $0x6348; BYTE $0xc9 // movslq %ecx, %rcx - LONG $0x8e1c8b41 // movl (%r14,%rcx,4), %ebx - LONG $0x107f8341; BYTE $0x00 // cmpl $0, $16(%r15) - LONG $0xffb1850f; WORD $0xffff // jne LBB9_20, $-79(%rip) - LONG $0xffffbae9; BYTE $0xff // jmp LBB9_13, $-70(%rip) - -LBB9_21: - LONG $0x02fc8141; WORD $0xfffc; BYTE $0xff // cmpl $-1022, %r12d - LONG $0x00538f0f; WORD $0x0000 // jg LBB9_27, $83(%rip) - LONG $0x107f8341; BYTE $0x00 // cmpl $0, $16(%r15) - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - LONG $0x0060840f; WORD $0x0000 // je LBB9_29, $96(%rip) - LONG $0xc6fc8141; WORD $0xfffb; BYTE $0xff // cmpl $-1082, %r12d - LONG $0x005e8f0f; WORD $0x0000 // jg LBB9_30, $94(%rip) - LONG $0xc1c48141; WORD $0x0003; BYTE $0x00 // addl $961, %r12d - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB9_25: - WORD $0x894c; BYTE $0xff // movq %r15, %rdi - LONG $0x00003cbe; BYTE $0x00 // movl $60, %esi - LONG $0x006133e8; BYTE $0x00 // callq _right_shift, $24883(%rip) - LONG $0x3cc48341 // addl $60, %r12d - LONG $0x88fc8341 // cmpl $-120, %r12d - LONG $0xffe58c0f; WORD $0xffff // jl LBB9_25, $-27(%rip) - LONG $0x3cc48341 // addl $60, %r12d - LONG $0x00002ee9; BYTE $0x00 // jmp LBB9_31, $46(%rip) - -LBB9_27: - LONG $0x00fc8141; WORD $0x0004; BYTE $0x00 // cmpl $1024, %r12d - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - LONG $0x03838f0f; WORD $0x0000 // jg LBB9_66, $899(%rip) - WORD $0xff41; BYTE $0xcc // decl %r12d - WORD $0x8945; BYTE $0xe6 // movl %r12d, %r14d - LONG $0x000026e9; BYTE $0x00 // jmp LBB9_32, $38(%rip) - -LBB9_29: - LONG $0xfc02be41; WORD $0xffff // movl $-1022, %r14d - LONG $0x000033e9; BYTE $0x00 // jmp LBB9_34, $51(%rip) - -LBB9_30: - LONG $0xfdc48141; WORD $0x0003; BYTE $0x00 // addl $1021, %r12d - -LBB9_31: - WORD $0xf741; BYTE $0xdc // negl %r12d - WORD $0x894c; BYTE $0xff // movq %r15, %rdi - WORD $0x8944; BYTE $0xe6 // movl %r12d, %esi - LONG $0x0060e0e8; BYTE $0x00 // callq _right_shift, $24800(%rip) - LONG $0xfc02be41; WORD $0xffff // movl $-1022, %r14d - -LBB9_32: - LONG $0x107f8341; BYTE $0x00 // cmpl $0, $16(%r15) - LONG $0x000d840f; WORD $0x0000 // je LBB9_34, $13(%rip) - WORD $0x894c; BYTE $0xff // movq %r15, %rdi - LONG $0x000035be; BYTE $0x00 // movl $53, %esi - LONG $0x005ed2e8; BYTE $0x00 // callq _left_shift, $24274(%rip) - -LBB9_34: - LONG $0x14478b41 // movl $20(%r15), %eax - LONG $0xffc4c749; WORD $0xffff; BYTE $0xff // movq $-1, %r12 - WORD $0xf883; BYTE $0x14 // cmpl $20, %eax - LONG $0x033e8f0f; WORD $0x0000 // jg LBB9_68, $830(%rip) - WORD $0xc085 // testl %eax, %eax - LONG $0x00548e0f; WORD $0x0000 // jle LBB9_40, $84(%rip) - LONG $0x10578b41 // movl $16(%r15), %edx - WORD $0xf631 // xorl %esi, %esi - WORD $0xd285 // testl %edx, %edx - WORD $0x480f; BYTE $0xd6 // cmovsl %esi, %edx - LONG $0xff488d4c // leaq $-1(%rax), %r9 - WORD $0x3949; BYTE $0xd1 // cmpq %rdx, %r9 - LONG $0xca430f44 // cmovael %edx, %r9d - LONG $0x01418d45 // leal $1(%r9), %r8d - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB9_37: - WORD $0x3948; BYTE $0xf2 // cmpq %rsi, %rdx - LONG $0x002b840f; WORD $0x0000 // je LBB9_41, $43(%rip) - LONG $0xa43c8d4b // leaq (%r12,%r12,4), %rdi - WORD $0x8b49; BYTE $0x0f // movq (%r15), %rcx - LONG $0x0cbe0f48; BYTE $0x31 // movsbq (%rcx,%rsi), %rcx - LONG $0x79648d4c; BYTE $0xd0 // leaq $-48(%rcx,%rdi,2), %r12 - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x3948; BYTE $0xf0 // cmpq %rsi, %rax - LONG $0xffda850f; WORD $0xffff // jne LBB9_37, $-38(%rip) - WORD $0x8945; BYTE $0xc1 // movl %r8d, %r9d - LONG $0x000006e9; BYTE $0x00 // jmp LBB9_41, $6(%rip) - -LBB9_40: - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - -LBB9_41: - WORD $0x3944; BYTE $0xc8 // cmpl %r9d, %eax - LONG $0x02428e0f; WORD $0x0000 // jle LBB9_54, $578(%rip) - WORD $0xc289 // movl %eax, %edx - WORD $0x2944; BYTE $0xca // subl %r9d, %edx - WORD $0xfa83; BYTE $0x10 // cmpl $16, %edx - LONG $0x0220820f; WORD $0x0000 // jb LBB9_52, $544(%rip) - WORD $0x8941; BYTE $0xd0 // movl %edx, %r8d - QUAD $0xfffffd2a056ff9c5 // vmovdqa $-726(%rip), %xmm0 /* LCPI9_0(%rip) */ - LONG $0x22f9c3c4; WORD $0x00c4 // vpinsrq $0, %r12, %xmm0, %xmm0 - LONG $0xf0e08341 // andl $-16, %r8d - QUAD $0xfffd1605027de3c4; WORD $0xf0ff // vpblendd $240, $-746(%rip), %ymm0, %ymm0 /* LCPI9_0(%rip) */ - LONG $0xf0488d41 // leal $-16(%r8), %ecx - WORD $0xcf89 // movl %ecx, %edi - WORD $0xefc1; BYTE $0x04 // shrl $4, %edi - WORD $0xc7ff // incl %edi - WORD $0xfe89 // movl %edi, %esi - WORD $0xe683; BYTE $0x03 // andl $3, %esi - WORD $0xf983; BYTE $0x30 // cmpl $48, %ecx - LONG $0x0016830f; WORD $0x0000 // jae LBB9_45, $22(%rip) - QUAD $0xfffd1415597de2c4; BYTE $0xff // vpbroadcastq $-748(%rip), %ymm2 /* LCPI9_1(%rip) */ - LONG $0xda6ffdc5 // vmovdqa %ymm2, %ymm3 - LONG $0xca6ffdc5 // vmovdqa %ymm2, %ymm1 - LONG $0x000088e9; BYTE $0x00 // jmp LBB9_47, $136(%rip) - -LBB9_45: - WORD $0xe783; BYTE $0xfc // andl $-4, %edi - WORD $0xdff7 // negl %edi - QUAD $0xfffcf915597de2c4; BYTE $0xff // vpbroadcastq $-775(%rip), %ymm2 /* LCPI9_1(%rip) */ - QUAD $0xfffcf825597de2c4; BYTE $0xff // vpbroadcastq $-776(%rip), %ymm4 /* LCPI9_2(%rip) */ - LONG $0xda6ffdc5 // vmovdqa %ymm2, %ymm3 - LONG $0xca6ffdc5 // vmovdqa %ymm2, %ymm1 - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB9_46: - LONG $0xecf4fdc5 // vpmuludq %ymm4, %ymm0, %ymm5 - LONG $0xd073fdc5; BYTE $0x20 // vpsrlq $32, %ymm0, %ymm0 - LONG $0xc4f4fdc5 // vpmuludq %ymm4, %ymm0, %ymm0 - LONG $0xf073fdc5; BYTE $0x20 // vpsllq $32, %ymm0, %ymm0 - LONG $0xc0d4d5c5 // vpaddq %ymm0, %ymm5, %ymm0 - LONG $0xecf4edc5 // vpmuludq %ymm4, %ymm2, %ymm5 - LONG $0xd273edc5; BYTE $0x20 // vpsrlq $32, %ymm2, %ymm2 - LONG $0xd4f4edc5 // vpmuludq %ymm4, %ymm2, %ymm2 - LONG $0xf273edc5; BYTE $0x20 // vpsllq $32, %ymm2, %ymm2 - LONG $0xd2d4d5c5 // vpaddq %ymm2, %ymm5, %ymm2 - LONG $0xecf4e5c5 // vpmuludq %ymm4, %ymm3, %ymm5 - LONG $0xd373e5c5; BYTE $0x20 // vpsrlq $32, %ymm3, %ymm3 - LONG $0xdcf4e5c5 // vpmuludq %ymm4, %ymm3, %ymm3 - LONG $0xf373e5c5; BYTE $0x20 // vpsllq $32, %ymm3, %ymm3 - LONG $0xdbd4d5c5 // vpaddq %ymm3, %ymm5, %ymm3 - LONG $0xecf4f5c5 // vpmuludq %ymm4, %ymm1, %ymm5 - LONG $0xd173f5c5; BYTE $0x20 // vpsrlq $32, %ymm1, %ymm1 - LONG $0xccf4f5c5 // vpmuludq %ymm4, %ymm1, %ymm1 - LONG $0xf173f5c5; BYTE $0x20 // vpsllq $32, %ymm1, %ymm1 - LONG $0xc9d4d5c5 // vpaddq %ymm1, %ymm5, %ymm1 - WORD $0xc783; BYTE $0x04 // addl $4, %edi - LONG $0xff9f850f; WORD $0xffff // jne LBB9_46, $-97(%rip) - -LBB9_47: - WORD $0xf685 // testl %esi, %esi - LONG $0x0077840f; WORD $0x0000 // je LBB9_50, $119(%rip) - WORD $0xdef7 // negl %esi - QUAD $0xfffc7c25597de2c4; BYTE $0xff // vpbroadcastq $-900(%rip), %ymm4 /* LCPI9_3(%rip) */ - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB9_49: - LONG $0xecf4fdc5 // vpmuludq %ymm4, %ymm0, %ymm5 - LONG $0xd073fdc5; BYTE $0x20 // vpsrlq $32, %ymm0, %ymm0 - LONG $0xc4f4fdc5 // vpmuludq %ymm4, %ymm0, %ymm0 - LONG $0xf073fdc5; BYTE $0x20 // vpsllq $32, %ymm0, %ymm0 - LONG $0xc0d4d5c5 // vpaddq %ymm0, %ymm5, %ymm0 - LONG $0xecf4edc5 // vpmuludq %ymm4, %ymm2, %ymm5 - LONG $0xd273edc5; BYTE $0x20 // vpsrlq $32, %ymm2, %ymm2 - LONG $0xd4f4edc5 // vpmuludq %ymm4, %ymm2, %ymm2 - LONG $0xf273edc5; BYTE $0x20 // vpsllq $32, %ymm2, %ymm2 - LONG $0xd2d4d5c5 // vpaddq %ymm2, %ymm5, %ymm2 - LONG $0xecf4e5c5 // vpmuludq %ymm4, %ymm3, %ymm5 - LONG $0xd373e5c5; BYTE $0x20 // vpsrlq $32, %ymm3, %ymm3 - LONG $0xdcf4e5c5 // vpmuludq %ymm4, %ymm3, %ymm3 - LONG $0xf373e5c5; BYTE $0x20 // vpsllq $32, %ymm3, %ymm3 - LONG $0xdbd4d5c5 // vpaddq %ymm3, %ymm5, %ymm3 - LONG $0xecf4f5c5 // vpmuludq %ymm4, %ymm1, %ymm5 - LONG $0xd173f5c5; BYTE $0x20 // vpsrlq $32, %ymm1, %ymm1 - LONG $0xccf4f5c5 // vpmuludq %ymm4, %ymm1, %ymm1 - LONG $0xf173f5c5; BYTE $0x20 // vpsllq $32, %ymm1, %ymm1 - LONG $0xc9d4d5c5 // vpaddq %ymm1, %ymm5, %ymm1 - WORD $0xc6ff // incl %esi - LONG $0xffa0850f; WORD $0xffff // jne LBB9_49, $-96(%rip) - -LBB9_50: - LONG $0xd273ddc5; BYTE $0x20 // vpsrlq $32, %ymm2, %ymm4 - LONG $0xe0f4ddc5 // vpmuludq %ymm0, %ymm4, %ymm4 - LONG $0xd073d5c5; BYTE $0x20 // vpsrlq $32, %ymm0, %ymm5 - LONG $0xedf4edc5 // vpmuludq %ymm5, %ymm2, %ymm5 - LONG $0xe4d4d5c5 // vpaddq %ymm4, %ymm5, %ymm4 - LONG $0xf473ddc5; BYTE $0x20 // vpsllq $32, %ymm4, %ymm4 - LONG $0xc0f4edc5 // vpmuludq %ymm0, %ymm2, %ymm0 - LONG $0xc4d4fdc5 // vpaddq %ymm4, %ymm0, %ymm0 - LONG $0xd373edc5; BYTE $0x20 // vpsrlq $32, %ymm3, %ymm2 - LONG $0xd0f4edc5 // vpmuludq %ymm0, %ymm2, %ymm2 - LONG $0xd073ddc5; BYTE $0x20 // vpsrlq $32, %ymm0, %ymm4 - LONG $0xe4f4e5c5 // vpmuludq %ymm4, %ymm3, %ymm4 - LONG $0xd2d4ddc5 // vpaddq %ymm2, %ymm4, %ymm2 - LONG $0xf273edc5; BYTE $0x20 // vpsllq $32, %ymm2, %ymm2 - LONG $0xc0f4e5c5 // vpmuludq %ymm0, %ymm3, %ymm0 - LONG $0xc2d4fdc5 // vpaddq %ymm2, %ymm0, %ymm0 - LONG $0xd173edc5; BYTE $0x20 // vpsrlq $32, %ymm1, %ymm2 - LONG $0xd0f4edc5 // vpmuludq %ymm0, %ymm2, %ymm2 - LONG $0xd073e5c5; BYTE $0x20 // vpsrlq $32, %ymm0, %ymm3 - LONG $0xdbf4f5c5 // vpmuludq %ymm3, %ymm1, %ymm3 - LONG $0xd2d4e5c5 // vpaddq %ymm2, %ymm3, %ymm2 - LONG $0xf273edc5; BYTE $0x20 // vpsllq $32, %ymm2, %ymm2 - LONG $0xc0f4f5c5 // vpmuludq %ymm0, %ymm1, %ymm0 - LONG $0xc2d4fdc5 // vpaddq %ymm2, %ymm0, %ymm0 - LONG $0x397de3c4; WORD $0x01c1 // vextracti128 $1, %ymm0, %xmm1 - LONG $0xd073e9c5; BYTE $0x20 // vpsrlq $32, %xmm0, %xmm2 - LONG $0xd1f4e9c5 // vpmuludq %xmm1, %xmm2, %xmm2 - LONG $0xd173e1c5; BYTE $0x20 // vpsrlq $32, %xmm1, %xmm3 - LONG $0xdbf4f9c5 // vpmuludq %xmm3, %xmm0, %xmm3 - LONG $0xd2d4e1c5 // vpaddq %xmm2, %xmm3, %xmm2 - LONG $0xf273e9c5; BYTE $0x20 // vpsllq $32, %xmm2, %xmm2 - LONG $0xc1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm0 - LONG $0xc2d4f9c5 // vpaddq %xmm2, %xmm0, %xmm0 - LONG $0xc870f9c5; BYTE $0x4e // vpshufd $78, %xmm0, %xmm1 - LONG $0xd073e9c5; BYTE $0x20 // vpsrlq $32, %xmm0, %xmm2 - LONG $0xd1f4e9c5 // vpmuludq %xmm1, %xmm2, %xmm2 - LONG $0xd873e1c5; BYTE $0x0c // vpsrldq $12, %xmm0, %xmm3 - LONG $0xdbf4f9c5 // vpmuludq %xmm3, %xmm0, %xmm3 - LONG $0xd2d4e1c5 // vpaddq %xmm2, %xmm3, %xmm2 - LONG $0xf273e9c5; BYTE $0x20 // vpsllq $32, %xmm2, %xmm2 - LONG $0xc1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm0 - LONG $0xc2d4f9c5 // vpaddq %xmm2, %xmm0, %xmm0 - LONG $0x7ef9c1c4; BYTE $0xc4 // vmovq %xmm0, %r12 - WORD $0x3944; BYTE $0xc2 // cmpl %r8d, %edx - LONG $0x0017840f; WORD $0x0000 // je LBB9_54, $23(%rip) - WORD $0x0145; BYTE $0xc1 // addl %r8d, %r9d - -LBB9_52: - WORD $0xc289 // movl %eax, %edx - WORD $0x2944; BYTE $0xca // subl %r9d, %edx - - // .p2align 4, 0x90 -LBB9_53: - WORD $0x014d; BYTE $0xe4 // addq %r12, %r12 - LONG $0xa4248d4f // leaq (%r12,%r12,4), %r12 - WORD $0xcaff // decl %edx - LONG $0xfff1850f; WORD $0xffff // jne LBB9_53, $-15(%rip) - -LBB9_54: - WORD $0xc085 // testl %eax, %eax - LONG $0x0049880f; WORD $0x0000 // js LBB9_62, $73(%rip) - LONG $0x10778b41 // movl $16(%r15), %esi - WORD $0xc639 // cmpl %eax, %esi - LONG $0x003d8e0f; WORD $0x0000 // jle LBB9_62, $61(%rip) - WORD $0x8b49; BYTE $0x17 // movq (%r15), %rdx - WORD $0x0c8a; BYTE $0x02 // movb (%rdx,%rax), %cl - WORD $0x788d; BYTE $0x01 // leal $1(%rax), %edi - WORD $0xf739 // cmpl %esi, %edi - LONG $0x00c1850f; WORD $0x0000 // jne LBB9_63, $193(%rip) - WORD $0xf980; BYTE $0x35 // cmpb $53, %cl - LONG $0x00b8850f; WORD $0x0000 // jne LBB9_63, $184(%rip) - LONG $0x1c7f8341; BYTE $0x00 // cmpl $0, $28(%r15) - WORD $0x950f; BYTE $0xc1 // setne %cl - LONG $0x0017850f; WORD $0x0000 // jne LBB9_64, $23(%rip) - WORD $0xc085 // testl %eax, %eax - LONG $0x000f8e0f; WORD $0x0000 // jle LBB9_64, $15(%rip) - WORD $0xc8ff // decl %eax - WORD $0x0c8a; BYTE $0x02 // movb (%rdx,%rax), %cl - WORD $0xe180; BYTE $0x01 // andb $1, %cl - LONG $0x000002e9; BYTE $0x00 // jmp LBB9_64, $2(%rip) - -LBB9_62: - WORD $0xc931 // xorl %ecx, %ecx - -LBB9_64: - WORD $0xb60f; BYTE $0xc1 // movzbl %cl, %eax - WORD $0x0149; BYTE $0xc4 // addq %rax, %r12 - QUAD $0x000000000000b848; WORD $0x0020 // movabsq $9007199254740992, %rax - WORD $0x3949; BYTE $0xc4 // cmpq %rax, %r12 - LONG $0x0025850f; WORD $0x0000 // jne LBB9_68, $37(%rip) - LONG $0xfefe8141; WORD $0x0003; BYTE $0x00 // cmpl $1022, %r14d - LONG $0x00128e0f; WORD $0x0000 // jle LBB9_67, $18(%rip) - -LBB9_66: - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - QUAD $0x000000000000be49; WORD $0x7ff0 // movabsq $9218868437227405312, %r14 - LONG $0x000025e9; BYTE $0x00 // jmp LBB9_69, $37(%rip) - -LBB9_67: - WORD $0xff41; BYTE $0xc6 // incl %r14d - WORD $0x894d; BYTE $0xec // movq %r13, %r12 - -LBB9_68: - WORD $0x894c; BYTE $0xe0 // movq %r12, %rax - WORD $0x214c; BYTE $0xe8 // andq %r13, %rax - LONG $0xffc68141; WORD $0x0003; BYTE $0x00 // addl $1023, %r14d - LONG $0xffe68141; WORD $0x0007; BYTE $0x00 // andl $2047, %r14d - LONG $0x34e6c149 // shlq $52, %r14 - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xf0440f4c // cmoveq %rax, %r14 - -LBB9_69: - WORD $0xff49; BYTE $0xcd // decq %r13 - WORD $0x214d; BYTE $0xe5 // andq %r12, %r13 - WORD $0x094d; BYTE $0xf5 // orq %r14, %r13 - QUAD $0x000000000000b848; WORD $0x8000 // movabsq $-9223372036854775808, %rax - WORD $0x094c; BYTE $0xe8 // orq %r13, %rax - LONG $0x187f8341; BYTE $0x00 // cmpl $0, $24(%r15) - LONG $0xc5440f49 // cmoveq %r13, %rax - WORD $0x8948; BYTE $0x03 // movq %rax, (%rbx) - WORD $0xc031 // xorl %eax, %eax - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB9_63: - WORD $0xf980; BYTE $0x34 // cmpb $52, %cl - WORD $0x9f0f; BYTE $0xc1 // setg %cl - LONG $0xffff62e9; BYTE $0xff // jmp LBB9_64, $-158(%rip) - - // .p2align 4, 0x90 -_atof_native: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - LONG $0x30ec8348 // subq $48, %rsp - QUAD $0x00000000d845c748 // movq $0, $-40(%rbp) - LONG $0xe0558948 // movq %rdx, $-32(%rbp) - LONG $0xe84d8948 // movq %rcx, $-24(%rbp) - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x0044840f; WORD $0x0000 // je LBB10_5, $68(%rip) - WORD $0x02c6; BYTE $0x00 // movb $0, (%rdx) - LONG $0x01f98348 // cmpq $1, %rcx - LONG $0x0037840f; WORD $0x0000 // je LBB10_5, $55(%rip) - LONG $0x000142c6 // movb $0, $1(%rdx) - LONG $0xe87d8348; BYTE $0x03 // cmpq $3, $-24(%rbp) - LONG $0x0028820f; WORD $0x0000 // jb LBB10_5, $40(%rip) - LONG $0x000002b8; BYTE $0x00 // movl $2, %eax - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB10_4: - LONG $0xe04d8b48 // movq $-32(%rbp), %rcx - LONG $0x000104c6 // movb $0, (%rcx,%rax) - WORD $0xff48; BYTE $0xc0 // incq %rax - LONG $0xe8453948 // cmpq %rax, $-24(%rbp) - LONG $0xffeb870f; WORD $0xffff // ja LBB10_4, $-21(%rip) - -LBB10_5: - LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 - LONG $0x4511f8c5; BYTE $0xf0 // vmovups %xmm0, $-16(%rbp) - WORD $0x3f80; BYTE $0x2d // cmpb $45, (%rdi) - LONG $0x0021850f; WORD $0x0000 // jne LBB10_8, $33(%rip) - LONG $0x01f845c7; WORD $0x0000; BYTE $0x00 // movl $1, $-8(%rbp) - LONG $0x000001b8; BYTE $0x00 // movl $1, %eax - WORD $0x3948; BYTE $0xf0 // cmpq %rsi, %rax - LONG $0x00178c0f; WORD $0x0000 // jl LBB10_9, $23(%rip) - -LBB10_7: - LONG $0x00f445c7; WORD $0x0000; BYTE $0x00 // movl $0, $-12(%rbp) - LONG $0x0001a1e9; BYTE $0x00 // jmp LBB10_39, $417(%rip) - -LBB10_8: - WORD $0xc031 // xorl %eax, %eax - WORD $0x3948; BYTE $0xf0 // cmpq %rsi, %rax - LONG $0xffe98d0f; WORD $0xffff // jge LBB10_7, $-23(%rip) - -LBB10_9: - WORD $0xb341; BYTE $0x01 // movb $1, %r11b - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x3145; BYTE $0xc0 // xorl %r8d, %r8d - LONG $0x00001fe9; BYTE $0x00 // jmp LBB10_13, $31(%rip) - -LBB10_21: - LONG $0x01fc45c7; WORD $0x0000; BYTE $0x00 // movl $1, $-4(%rbp) - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB10_12: - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x3948; BYTE $0xf0 // cmpq %rsi, %rax - LONG $0xc39c0f41 // setl %r11b - WORD $0x3948; BYTE $0xc6 // cmpq %rax, %rsi - LONG $0x0090840f; WORD $0x0000 // je LBB10_23, $144(%rip) - -LBB10_13: - LONG $0x070cb60f // movzbl (%rdi,%rax), %ecx - WORD $0x518d; BYTE $0xd0 // leal $-48(%rcx), %edx - WORD $0xfa80; BYTE $0x09 // cmpb $9, %dl - LONG $0x002d870f; WORD $0x0000 // ja LBB10_18, $45(%rip) - WORD $0xf980; BYTE $0x30 // cmpb $48, %cl - LONG $0x0044850f; WORD $0x0000 // jne LBB10_20, $68(%rip) - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x0063840f; WORD $0x0000 // je LBB10_22, $99(%rip) - WORD $0x634d; BYTE $0xd9 // movslq %r9d, %r11 - LONG $0xe85d394c // cmpq %r11, $-24(%rbp) - LONG $0x003b870f; WORD $0x0000 // ja LBB10_10, $59(%rip) - LONG $0x000049e9; BYTE $0x00 // jmp LBB10_11, $73(%rip) - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB10_18: - WORD $0xf980; BYTE $0x2e // cmpb $46, %cl - LONG $0x009b850f; WORD $0x0000 // jne LBB10_30, $155(%rip) - LONG $0xf4558944 // movl %r10d, $-12(%rbp) - LONG $0x0001b841; WORD $0x0000 // movl $1, %r8d - LONG $0xffff98e9; BYTE $0xff // jmp LBB10_12, $-104(%rip) - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB10_20: - WORD $0x634d; BYTE $0xda // movslq %r10d, %r11 - LONG $0xe85d394c // cmpq %r11, $-24(%rbp) - LONG $0xff77860f; WORD $0xffff // jbe LBB10_21, $-137(%rip) - -LBB10_10: - LONG $0xe0558b48 // movq $-32(%rbp), %rdx - LONG $0x1a0c8842 // movb %cl, (%rdx,%r11) - LONG $0xf04d8b44 // movl $-16(%rbp), %r9d - WORD $0xff41; BYTE $0xc1 // incl %r9d - LONG $0xf04d8944 // movl %r9d, $-16(%rbp) - -LBB10_11: - WORD $0x8945; BYTE $0xca // movl %r9d, %r10d - LONG $0xffff68e9; BYTE $0xff // jmp LBB10_12, $-152(%rip) - -LBB10_22: - WORD $0x4dff; BYTE $0xf4 // decl $-12(%rbp) - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - LONG $0xffff5de9; BYTE $0xff // jmp LBB10_12, $-163(%rip) - -LBB10_23: - WORD $0xf189 // movl %esi, %ecx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0x8545; BYTE $0xc0 // testl %r8d, %r8d - LONG $0x0004850f; WORD $0x0000 // jne LBB10_25, $4(%rip) - -LBB10_24: - LONG $0xf44d8944 // movl %r9d, $-12(%rbp) - -LBB10_25: - LONG $0x01c3f641 // testb $1, %r11b - LONG $0x00ba840f; WORD $0x0000 // je LBB10_39, $186(%rip) - WORD $0x0c8a; BYTE $0x0f // movb (%rdi,%rcx), %cl - WORD $0xc980; BYTE $0x20 // orb $32, %cl - WORD $0xf980; BYTE $0x65 // cmpb $101, %cl - LONG $0x00ab850f; WORD $0x0000 // jne LBB10_39, $171(%rip) - WORD $0xc289 // movl %eax, %edx - LONG $0x01174c8a // movb $1(%rdi,%rdx), %cl - WORD $0xf980; BYTE $0x2d // cmpb $45, %cl - LONG $0x0028840f; WORD $0x0000 // je LBB10_31, $40(%rip) - LONG $0x0001b841; WORD $0x0000 // movl $1, %r8d - WORD $0xf980; BYTE $0x2b // cmpb $43, %cl - LONG $0x0038850f; WORD $0x0000 // jne LBB10_33, $56(%rip) - WORD $0xc083; BYTE $0x02 // addl $2, %eax - LONG $0x00001ae9; BYTE $0x00 // jmp LBB10_32, $26(%rip) - -LBB10_30: - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x8545; BYTE $0xc0 // testl %r8d, %r8d - LONG $0xffb5850f; WORD $0xffff // jne LBB10_25, $-75(%rip) - LONG $0xfffface9; BYTE $0xff // jmp LBB10_24, $-84(%rip) - -LBB10_31: - WORD $0xc083; BYTE $0x02 // addl $2, %eax - LONG $0xffffb841; WORD $0xffff // movl $-1, %r8d - -LBB10_32: - WORD $0xc289 // movl %eax, %edx - WORD $0x6348; BYTE $0xd2 // movslq %edx, %rdx - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x3948; BYTE $0xf2 // cmpq %rsi, %rdx - LONG $0x00178c0f; WORD $0x0000 // jl LBB10_34, $23(%rip) - LONG $0x00004de9; BYTE $0x00 // jmp LBB10_38, $77(%rip) - -LBB10_33: - WORD $0xff48; BYTE $0xc2 // incq %rdx - WORD $0x6348; BYTE $0xd2 // movslq %edx, %rdx - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x3948; BYTE $0xf2 // cmpq %rsi, %rdx - LONG $0x003b8d0f; WORD $0x0000 // jge LBB10_38, $59(%rip) - -LBB10_34: - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB10_35: - LONG $0x0ff98141; WORD $0x0027; BYTE $0x00 // cmpl $9999, %r9d - LONG $0x00248f0f; WORD $0x0000 // jg LBB10_38, $36(%rip) - LONG $0x170cb60f // movzbl (%rdi,%rdx), %ecx - WORD $0x418d; BYTE $0xd0 // leal $-48(%rcx), %eax - WORD $0x093c // cmpb $9, %al - LONG $0x0015870f; WORD $0x0000 // ja LBB10_38, $21(%rip) - LONG $0x89048d43 // leal (%r9,%r9,4), %eax - LONG $0x414c8d44; BYTE $0xd0 // leal $-48(%rcx,%rax,2), %r9d - WORD $0xff48; BYTE $0xc2 // incq %rdx - WORD $0x3948; BYTE $0xd6 // cmpq %rdx, %rsi - LONG $0xffcf850f; WORD $0xffff // jne LBB10_35, $-49(%rip) - -LBB10_38: - LONG $0xc8af0f45 // imull %r8d, %r9d - LONG $0xf44d0144 // addl %r9d, $-12(%rbp) - -LBB10_39: - LONG $0xe07d8d48 // leaq $-32(%rbp), %rdi - LONG $0xd8758d48 // leaq $-40(%rbp), %rsi - LONG $0xfff80ae8; BYTE $0xff // callq _decimal_to_f64, $-2038(%rip) - LONG $0x4510fbc5; BYTE $0xd8 // vmovsd $-40(%rbp), %xmm0 - LONG $0x30c48348 // addq $48, %rsp - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_value: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x28ec8348 // subq $40, %rsp - WORD $0x894d; BYTE $0xc4 // movq %r8, %r12 - WORD $0x8949; BYTE $0xce // movq %rcx, %r14 - WORD $0x8948; BYTE $0xf3 // movq %rsi, %rbx - WORD $0x8949; BYTE $0xff // movq %rdi, %r15 - LONG $0xd0558948 // movq %rdx, $-48(%rbp) - LONG $0xb07d8948 // movq %rdi, $-80(%rbp) - LONG $0xb8758948 // movq %rsi, $-72(%rbp) - LONG $0xd0558d48 // leaq $-48(%rbp), %rdx - LONG $0x0005dee8; BYTE $0x00 // callq _advance_ns, $1502(%rip) - WORD $0xbe0f; BYTE $0xc0 // movsbl %al, %eax - WORD $0xf883; BYTE $0x7d // cmpl $125, %eax - LONG $0x00c3870f; WORD $0x0000 // ja LBB11_11, $195(%rip) - LONG $0xa70d8d48; WORD $0x0003; BYTE $0x00 // leaq $935(%rip), %rcx /* LJTI11_0(%rip) */ - LONG $0x81046348 // movslq (%rcx,%rax,4), %rax - WORD $0x0148; BYTE $0xc8 // addq %rcx, %rax - JMP AX - -LBB11_2: - LONG $0xc875894c // movq %r14, $-56(%rbp) - LONG $0xd0758b4c // movq $-48(%rbp), %r14 - LONG $0xff6e8d4d // leaq $-1(%r14), %r13 - LONG $0xd06d894c // movq %r13, $-48(%rbp) - LONG $0x02c4f641 // testb $2, %r12b - LONG $0x001a850f; WORD $0x0000 // jne LBB11_4, $26(%rip) - LONG $0xb07d8d48 // leaq $-80(%rbp), %rdi - LONG $0xd0758d48 // leaq $-48(%rbp), %rsi - LONG $0xc8558b48 // movq $-56(%rbp), %rdx - LONG $0x000c87e8; BYTE $0x00 // callq _vnumber, $3207(%rip) - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - LONG $0x000355e9; BYTE $0x00 // jmp LBB11_58, $853(%rip) - -LBB11_4: - WORD $0xc031 // xorl %eax, %eax - LONG $0x2f3c8043; BYTE $0x2d // cmpb $45, (%r15,%r13) - LONG $0x2f248d4f // leaq (%r15,%r13), %r12 - WORD $0x940f; BYTE $0xc0 // sete %al - WORD $0x0149; BYTE $0xc4 // addq %rax, %r12 - WORD $0x2948; BYTE $0xc3 // subq %rax, %rbx - LONG $0x030a840f; WORD $0x0000 // je LBB11_53, $778(%rip) - WORD $0x3949; BYTE $0xdd // cmpq %rbx, %r13 - LONG $0x000e830f; WORD $0x0000 // jae LBB11_7, $14(%rip) - LONG $0x24048a41 // movb (%r12), %al - WORD $0xd004 // addb $-48, %al - WORD $0x0a3c // cmpb $10, %al - LONG $0x030c830f; WORD $0x0000 // jae LBB11_55, $780(%rip) - -LBB11_7: - WORD $0x894c; BYTE $0xe7 // movq %r12, %rdi - WORD $0x8948; BYTE $0xde // movq %rbx, %rsi - LONG $0x001fa2e8; BYTE $0x00 // callq _do_skip_number, $8098(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x02f2880f; WORD $0x0000 // js LBB11_54, $754(%rip) - WORD $0x0149; BYTE $0xc4 // addq %rax, %r12 - WORD $0x894c; BYTE $0xe3 // movq %r12, %rbx - WORD $0x294c; BYTE $0xfb // subq %r15, %rbx - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x02f38e0f; WORD $0x0000 // jle LBB11_57, $755(%rip) - LONG $0xc8458b48 // movq $-56(%rbp), %rax - LONG $0x0800c748; WORD $0x0000; BYTE $0x00 // movq $8, (%rax) - LONG $0x1868894c // movq %r13, $24(%rax) - LONG $0x0002e6e9; BYTE $0x00 // jmp LBB11_58, $742(%rip) - -LBB11_10: - LONG $0x0106c749; WORD $0x0000; BYTE $0x00 // movq $1, (%r14) - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - LONG $0x0002d6e9; BYTE $0x00 // jmp LBB11_58, $726(%rip) - -LBB11_11: - LONG $0xfe06c749; WORD $0xffff; BYTE $0xff // movq $-2, (%r14) - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - WORD $0xff48; BYTE $0xcb // decq %rbx - LONG $0x0002c3e9; BYTE $0x00 // jmp LBB11_58, $707(%rip) - -LBB11_12: - QUAD $0xffffffffc045c748 // movq $-1, $-64(%rbp) - LONG $0xd07d8b4c // movq $-48(%rbp), %r15 - LONG $0xb07d8d48 // leaq $-80(%rbp), %rdi - LONG $0xc0558d48 // leaq $-64(%rbp), %rdx - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - WORD $0x894c; BYTE $0xe1 // movq %r12, %rcx - LONG $0x00077de8; BYTE $0x00 // callq _advance_string, $1917(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x025e880f; WORD $0x0000 // js LBB11_47, $606(%rip) - LONG $0xd0458948 // movq %rax, $-48(%rbp) - LONG $0x107e894d // movq %r15, $16(%r14) - LONG $0xc04d8b48 // movq $-64(%rbp), %rcx - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0xffc2c748; WORD $0xffff; BYTE $0xff // movq $-1, %rdx - LONG $0xd14c0f48 // cmovlq %rcx, %rdx - LONG $0x18568949 // movq %rdx, $24(%r14) - LONG $0x000007b9; BYTE $0x00 // movl $7, %ecx - WORD $0x8949; BYTE $0x0e // movq %rcx, (%r14) - WORD $0x8948; BYTE $0xc3 // movq %rax, %rbx - LONG $0x00026de9; BYTE $0x00 // jmp LBB11_58, $621(%rip) - -LBB11_14: - WORD $0x8545; BYTE $0xe4 // testl %r12d, %r12d - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0x00000bb9; BYTE $0x00 // movl $11, %ecx - LONG $0x0000e8e9; BYTE $0x00 // jmp LBB11_28, $232(%rip) - -LBB11_15: - WORD $0x8545; BYTE $0xe4 // testl %r12d, %r12d - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0x00000ab9; BYTE $0x00 // movl $10, %ecx - LONG $0x0000d4e9; BYTE $0x00 // jmp LBB11_28, $212(%rip) - -LBB11_16: - LONG $0x0506c749; WORD $0x0000; BYTE $0x00 // movq $5, (%r14) - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - LONG $0x000235e9; BYTE $0x00 // jmp LBB11_58, $565(%rip) - -LBB11_17: - WORD $0x8545; BYTE $0xe4 // testl %r12d, %r12d - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0x00000cb9; BYTE $0x00 // movl $12, %ecx - LONG $0x0000b0e9; BYTE $0x00 // jmp LBB11_28, $176(%rip) - -LBB11_18: - LONG $0xd04d8b48 // movq $-48(%rbp), %rcx - LONG $0xfc438d48 // leaq $-4(%rbx), %rax - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0x006d870f; WORD $0x0000 // ja LBB11_22, $109(%rip) - LONG $0x0f148b41 // movl (%r15,%rcx), %edx - LONG $0x6c61fa81; WORD $0x6573 // cmpl $1702063201, %edx - LONG $0x00cc850f; WORD $0x0000 // jne LBB11_31, $204(%rip) - LONG $0x04c18348 // addq $4, %rcx - LONG $0xd04d8948 // movq %rcx, $-48(%rbp) - LONG $0x000004b8; BYTE $0x00 // movl $4, %eax - WORD $0x8948; BYTE $0xcb // movq %rcx, %rbx - WORD $0x8949; BYTE $0x06 // movq %rax, (%r14) - LONG $0x0001e8e9; BYTE $0x00 // jmp LBB11_58, $488(%rip) - -LBB11_21: - LONG $0xd04d8b48 // movq $-48(%rbp), %rcx - LONG $0xfd438d48 // leaq $-3(%rbx), %rax - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0x0034870f; WORD $0x0000 // ja LBB11_22, $52(%rip) - LONG $0x0f548b41; BYTE $0xff // movl $-1(%r15,%rcx), %edx - LONG $0x756efa81; WORD $0x6c6c // cmpl $1819047278, %edx - LONG $0x00d1850f; WORD $0x0000 // jne LBB11_35, $209(%rip) - LONG $0x03c18348 // addq $3, %rcx - LONG $0xd04d8948 // movq %rcx, $-48(%rbp) - LONG $0x000002b8; BYTE $0x00 // movl $2, %eax - LONG $0x000165e9; BYTE $0x00 // jmp LBB11_50, $357(%rip) - -LBB11_23: - LONG $0xd04d8b48 // movq $-48(%rbp), %rcx - LONG $0xfd438d48 // leaq $-3(%rbx), %rax - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0x004c860f; WORD $0x0000 // jbe LBB11_24, $76(%rip) - -LBB11_22: - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x8949; BYTE $0x06 // movq %rax, (%r14) - LONG $0x000190e9; BYTE $0x00 // jmp LBB11_58, $400(%rip) - -LBB11_26: - LONG $0x0606c749; WORD $0x0000; BYTE $0x00 // movq $6, (%r14) - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - LONG $0x000180e9; BYTE $0x00 // jmp LBB11_58, $384(%rip) - -LBB11_27: - WORD $0x8545; BYTE $0xe4 // testl %r12d, %r12d - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0x00000db9; BYTE $0x00 // movl $13, %ecx - -LBB11_28: - LONG $0xc8490f48 // cmovnsq %rax, %rcx - WORD $0x8949; BYTE $0x0e // movq %rcx, (%r14) - LONG $0x1ffcc141 // sarl $31, %r12d - WORD $0xf741; BYTE $0xd4 // notl %r12d - WORD $0x6349; BYTE $0xdc // movslq %r12d, %rbx - LONG $0xd05d0348 // addq $-48(%rbp), %rbx - LONG $0x000157e9; BYTE $0x00 // jmp LBB11_58, $343(%rip) - -LBB11_24: - LONG $0x0f548b41; BYTE $0xff // movl $-1(%r15,%rcx), %edx - LONG $0x7274fa81; WORD $0x6575 // cmpl $1702195828, %edx - LONG $0x0097850f; WORD $0x0000 // jne LBB11_39, $151(%rip) - LONG $0x03c18348 // addq $3, %rcx - LONG $0xd04d8948 // movq %rcx, $-48(%rbp) - LONG $0x000003b8; BYTE $0x00 // movl $3, %eax - LONG $0x0000e5e9; BYTE $0x00 // jmp LBB11_50, $229(%rip) - -LBB11_31: - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - WORD $0xfa80; BYTE $0x61 // cmpb $97, %dl - LONG $0x00bb850f; WORD $0x0000 // jne LBB11_43, $187(%rip) - LONG $0x0f7c8041; WORD $0x6c01 // cmpb $108, $1(%r15,%rcx) - LONG $0x00ba850f; WORD $0x0000 // jne LBB11_44, $186(%rip) - LONG $0x0f7c8041; WORD $0x7302 // cmpb $115, $2(%r15,%rcx) - LONG $0x00c8850f; WORD $0x0000 // jne LBB11_45, $200(%rip) - LONG $0x03598d48 // leaq $3(%rcx), %rbx - LONG $0x04518d48 // leaq $4(%rcx), %rdx - LONG $0x0f7c8041; WORD $0x6503 // cmpb $101, $3(%r15,%rcx) - LONG $0xda440f48 // cmoveq %rdx, %rbx - LONG $0x0000b8e9; BYTE $0x00 // jmp LBB11_47, $184(%rip) - -LBB11_35: - LONG $0xff598d48 // leaq $-1(%rcx), %rbx - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - WORD $0xfa80; BYTE $0x6e // cmpb $110, %dl - LONG $0x0091850f; WORD $0x0000 // jne LBB11_51, $145(%rip) - LONG $0x0f3c8041; BYTE $0x75 // cmpb $117, (%r15,%rcx) - LONG $0x007f850f; WORD $0x0000 // jne LBB11_49, $127(%rip) - LONG $0x0f7c8041; WORD $0x6c01 // cmpb $108, $1(%r15,%rcx) - LONG $0x0070850f; WORD $0x0000 // jne LBB11_48, $112(%rip) - LONG $0x0f7c8041; WORD $0x6c02 // cmpb $108, $2(%r15,%rcx) - LONG $0x03518d48 // leaq $3(%rcx), %rdx - LONG $0x02498d48 // leaq $2(%rcx), %rcx - LONG $0xca440f48 // cmoveq %rdx, %rcx - LONG $0x00005ce9; BYTE $0x00 // jmp LBB11_49, $92(%rip) - -LBB11_39: - LONG $0xff598d48 // leaq $-1(%rcx), %rbx - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - WORD $0xfa80; BYTE $0x74 // cmpb $116, %dl - LONG $0x004b850f; WORD $0x0000 // jne LBB11_51, $75(%rip) - LONG $0x0f3c8041; BYTE $0x72 // cmpb $114, (%r15,%rcx) - LONG $0x0039850f; WORD $0x0000 // jne LBB11_49, $57(%rip) - LONG $0x0f7c8041; WORD $0x7501 // cmpb $117, $1(%r15,%rcx) - LONG $0x002a850f; WORD $0x0000 // jne LBB11_48, $42(%rip) - LONG $0x0f7c8041; WORD $0x6502 // cmpb $101, $2(%r15,%rcx) - LONG $0x03518d48 // leaq $3(%rcx), %rdx - LONG $0x02498d48 // leaq $2(%rcx), %rcx - LONG $0xca440f48 // cmoveq %rdx, %rcx - LONG $0x000016e9; BYTE $0x00 // jmp LBB11_49, $22(%rip) - -LBB11_43: - WORD $0x8948; BYTE $0xcb // movq %rcx, %rbx - WORD $0x8949; BYTE $0x06 // movq %rax, (%r14) - LONG $0x00005ee9; BYTE $0x00 // jmp LBB11_58, $94(%rip) - -LBB11_44: - WORD $0xff48; BYTE $0xc1 // incq %rcx - LONG $0x000016e9; BYTE $0x00 // jmp LBB11_46, $22(%rip) - -LBB11_48: - WORD $0xff48; BYTE $0xc1 // incq %rcx - -LBB11_49: - LONG $0xd04d8948 // movq %rcx, $-48(%rbp) - -LBB11_50: - WORD $0x8948; BYTE $0xcb // movq %rcx, %rbx - -LBB11_51: - WORD $0x8949; BYTE $0x06 // movq %rax, (%r14) - LONG $0x000044e9; BYTE $0x00 // jmp LBB11_58, $68(%rip) - -LBB11_45: - LONG $0x02c18348 // addq $2, %rcx - -LBB11_46: - WORD $0x8948; BYTE $0xcb // movq %rcx, %rbx - -LBB11_47: - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - WORD $0x8949; BYTE $0x06 // movq %rax, (%r14) - LONG $0x000031e9; BYTE $0x00 // jmp LBB11_58, $49(%rip) - -LBB11_53: - WORD $0x294d; BYTE $0xfc // subq %r15, %r12 - LONG $0xd065894c // movq %r12, $-48(%rbp) - LONG $0xffc5c749; WORD $0xffff; BYTE $0xff // movq $-1, %r13 - LONG $0x000014e9; BYTE $0x00 // jmp LBB11_56, $20(%rip) - -LBB11_54: - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0149; BYTE $0xc4 // addq %rax, %r12 - -LBB11_55: - WORD $0x294d; BYTE $0xfc // subq %r15, %r12 - LONG $0xd065894c // movq %r12, $-48(%rbp) - LONG $0xfec5c749; WORD $0xffff; BYTE $0xff // movq $-2, %r13 - -LBB11_56: - WORD $0x894c; BYTE $0xe3 // movq %r12, %rbx - -LBB11_57: - LONG $0xc8458b48 // movq $-56(%rbp), %rax - WORD $0x894c; BYTE $0x28 // movq %r13, (%rax) - -LBB11_58: - WORD $0x8948; BYTE $0xd8 // movq %rbx, %rax - LONG $0x28c48348 // addq $40, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - WORD $0x9090; BYTE $0x90 // .p2align 2, 0x90 - - // .set L11_0_set_10, LBB11_10-LJTI11_0 - // .set L11_0_set_11, LBB11_11-LJTI11_0 - // .set L11_0_set_12, LBB11_12-LJTI11_0 - // .set L11_0_set_14, LBB11_14-LJTI11_0 - // .set L11_0_set_2, LBB11_2-LJTI11_0 - // .set L11_0_set_15, LBB11_15-LJTI11_0 - // .set L11_0_set_16, LBB11_16-LJTI11_0 - // .set L11_0_set_17, LBB11_17-LJTI11_0 - // .set L11_0_set_18, LBB11_18-LJTI11_0 - // .set L11_0_set_21, LBB11_21-LJTI11_0 - // .set L11_0_set_23, LBB11_23-LJTI11_0 - // .set L11_0_set_26, LBB11_26-LJTI11_0 - // .set L11_0_set_27, LBB11_27-LJTI11_0 -LJTI11_0: - LONG $0xfffffd05 // .long L11_0_set_10 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd28 // .long L11_0_set_12 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd7e // .long L11_0_set_14 - LONG $0xfffffc62 // .long L11_0_set_2 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffc62 // .long L11_0_set_2 - LONG $0xfffffc62 // .long L11_0_set_2 - LONG $0xfffffc62 // .long L11_0_set_2 - LONG $0xfffffc62 // .long L11_0_set_2 - LONG $0xfffffc62 // .long L11_0_set_2 - LONG $0xfffffc62 // .long L11_0_set_2 - LONG $0xfffffc62 // .long L11_0_set_2 - LONG $0xfffffc62 // .long L11_0_set_2 - LONG $0xfffffc62 // .long L11_0_set_2 - LONG $0xfffffc62 // .long L11_0_set_2 - LONG $0xfffffd92 // .long L11_0_set_15 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffda6 // .long L11_0_set_16 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffdb6 // .long L11_0_set_17 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffdca // .long L11_0_set_18 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffe03 // .long L11_0_set_21 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffe37 // .long L11_0_set_23 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffe5b // .long L11_0_set_26 - LONG $0xfffffd15 // .long L11_0_set_11 - LONG $0xfffffe6b // .long L11_0_set_27 - QUAD $0x0000000000000000; LONG $0x00000000 // .p2align 5, 0x00 - -LCPI12_0: - BYTE $0x20 // .byte 32 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x09 // .byte 9 - BYTE $0x0a // .byte 10 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x0d // .byte 13 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x20 // .byte 32 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x09 // .byte 9 - BYTE $0x0a // .byte 10 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x0d // .byte 13 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - - // .p2align 4, 0x90 -_advance_ns: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x8b4c; BYTE $0x02 // movq (%rdx), %r8 - WORD $0x3949; BYTE $0xf0 // cmpq %rsi, %r8 - LONG $0x0026830f; WORD $0x0000 // jae LBB12_6, $38(%rip) - LONG $0x07048a42 // movb (%rdi,%r8), %al - WORD $0x0d3c // cmpb $13, %al - LONG $0x001a840f; WORD $0x0000 // je LBB12_6, $26(%rip) - WORD $0x203c // cmpb $32, %al - LONG $0x0012840f; WORD $0x0000 // je LBB12_6, $18(%rip) - WORD $0xf704 // addb $-9, %al - WORD $0x013c // cmpb $1, %al - LONG $0x0008860f; WORD $0x0000 // jbe LBB12_6, $8(%rip) - WORD $0x894d; BYTE $0xc2 // movq %r8, %r10 - LONG $0x00015be9; BYTE $0x00 // jmp LBB12_5, $347(%rip) - -LBB12_6: - LONG $0x01508d4d // leaq $1(%r8), %r10 - WORD $0x3949; BYTE $0xf2 // cmpq %rsi, %r10 - LONG $0x0022830f; WORD $0x0000 // jae LBB12_10, $34(%rip) - LONG $0x170c8a42 // movb (%rdi,%r10), %cl - WORD $0xf980; BYTE $0x0d // cmpb $13, %cl - LONG $0x0015840f; WORD $0x0000 // je LBB12_10, $21(%rip) - WORD $0xf980; BYTE $0x20 // cmpb $32, %cl - LONG $0x000c840f; WORD $0x0000 // je LBB12_10, $12(%rip) - WORD $0xc180; BYTE $0xf7 // addb $-9, %cl - WORD $0xf980; BYTE $0x01 // cmpb $1, %cl - LONG $0x012c870f; WORD $0x0000 // ja LBB12_5, $300(%rip) - -LBB12_10: - LONG $0x02508d4d // leaq $2(%r8), %r10 - WORD $0x3949; BYTE $0xf2 // cmpq %rsi, %r10 - LONG $0x0022830f; WORD $0x0000 // jae LBB12_14, $34(%rip) - LONG $0x170c8a42 // movb (%rdi,%r10), %cl - WORD $0xf980; BYTE $0x0d // cmpb $13, %cl - LONG $0x0015840f; WORD $0x0000 // je LBB12_14, $21(%rip) - WORD $0xf980; BYTE $0x20 // cmpb $32, %cl - LONG $0x000c840f; WORD $0x0000 // je LBB12_14, $12(%rip) - WORD $0xc180; BYTE $0xf7 // addb $-9, %cl - WORD $0xf980; BYTE $0x01 // cmpb $1, %cl - LONG $0x00fd870f; WORD $0x0000 // ja LBB12_5, $253(%rip) - -LBB12_14: - LONG $0x03508d4d // leaq $3(%r8), %r10 - WORD $0x3949; BYTE $0xf2 // cmpq %rsi, %r10 - LONG $0x0022830f; WORD $0x0000 // jae LBB12_18, $34(%rip) - LONG $0x170c8a42 // movb (%rdi,%r10), %cl - WORD $0xf980; BYTE $0x0d // cmpb $13, %cl - LONG $0x0015840f; WORD $0x0000 // je LBB12_18, $21(%rip) - WORD $0xf980; BYTE $0x20 // cmpb $32, %cl - LONG $0x000c840f; WORD $0x0000 // je LBB12_18, $12(%rip) - WORD $0xc180; BYTE $0xf7 // addb $-9, %cl - WORD $0xf980; BYTE $0x01 // cmpb $1, %cl - LONG $0x00ce870f; WORD $0x0000 // ja LBB12_5, $206(%rip) - -LBB12_18: - LONG $0x04c08349 // addq $4, %r8 - WORD $0x3949; BYTE $0xf0 // cmpq %rsi, %r8 - LONG $0x00a2830f; WORD $0x0000 // jae LBB12_19, $162(%rip) - LONG $0x07148d4e // leaq (%rdi,%r8), %r10 - WORD $0x8948; BYTE $0xf1 // movq %rsi, %rcx - WORD $0x294c; BYTE $0xc1 // subq %r8, %rcx - LONG $0x20f98348 // cmpq $32, %rcx - LONG $0x0039820f; WORD $0x0000 // jb LBB12_25, $57(%rip) - QUAD $0xfffffef4056ffdc5 // vmovdqa $-268(%rip), %ymm0 /* LCPI12_0(%rip) */ - LONG $0x90909090 // .p2align 4, 0x90 - -LBB12_22: - LONG $0x6f7ec1c4; BYTE $0x0a // vmovdqu (%r10), %ymm1 - LONG $0x007de2c4; BYTE $0xd1 // vpshufb %ymm1, %ymm0, %ymm2 - LONG $0xca74f5c5 // vpcmpeqb %ymm2, %ymm1, %ymm1 - LONG $0xc1d7fdc5 // vpmovmskb %ymm1, %eax - WORD $0xf883; BYTE $0xff // cmpl $-1, %eax - LONG $0x006f850f; WORD $0x0000 // jne LBB12_23, $111(%rip) - LONG $0x20c28349 // addq $32, %r10 - LONG $0xe0c18348 // addq $-32, %rcx - LONG $0x1ff98348 // cmpq $31, %rcx - LONG $0xffd3870f; WORD $0xffff // ja LBB12_22, $-45(%rip) - -LBB12_25: - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x003b840f; WORD $0x0000 // je LBB12_32, $59(%rip) - LONG $0x0a048d4d // leaq (%r10,%rcx), %r8 - WORD $0xff49; BYTE $0xc2 // incq %r10 - QUAD $0x000100002600b949; WORD $0x0000 // movabsq $4294977024, %r9 - -LBB12_27: - LONG $0x42be0f41; BYTE $0xff // movsbl $-1(%r10), %eax - WORD $0xf883; BYTE $0x20 // cmpl $32, %eax - LONG $0x005f870f; WORD $0x0000 // ja LBB12_29, $95(%rip) - LONG $0xc1a30f49 // btq %rax, %r9 - LONG $0x0055830f; WORD $0x0000 // jae LBB12_29, $85(%rip) - WORD $0xff48; BYTE $0xc9 // decq %rcx - WORD $0xff49; BYTE $0xc2 // incq %r10 - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0xffd9850f; WORD $0xffff // jne LBB12_27, $-39(%rip) - WORD $0x894d; BYTE $0xc2 // movq %r8, %r10 - -LBB12_32: - WORD $0x2949; BYTE $0xfa // subq %rdi, %r10 - WORD $0x3949; BYTE $0xf2 // cmpq %rsi, %r10 - LONG $0x0024820f; WORD $0x0000 // jb LBB12_5, $36(%rip) - LONG $0x000044e9; BYTE $0x00 // jmp LBB12_34, $68(%rip) - -LBB12_19: - WORD $0x894c; BYTE $0x02 // movq %r8, (%rdx) - LONG $0x00003ce9; BYTE $0x00 // jmp LBB12_34, $60(%rip) - -LBB12_23: - WORD $0x2949; BYTE $0xfa // subq %rdi, %r10 - WORD $0xd0f7 // notl %eax - WORD $0x9848 // cltq - LONG $0xc0bc0f48 // bsfq %rax, %rax - WORD $0x0149; BYTE $0xc2 // addq %rax, %r10 - WORD $0x3949; BYTE $0xf2 // cmpq %rsi, %r10 - LONG $0x0025830f; WORD $0x0000 // jae LBB12_34, $37(%rip) - -LBB12_5: - LONG $0x01428d49 // leaq $1(%r10), %rax - WORD $0x8948; BYTE $0x02 // movq %rax, (%rdx) - LONG $0x17048a42 // movb (%rdi,%r10), %al - WORD $0xbe0f; BYTE $0xc0 // movsbl %al, %eax - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB12_29: - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0149; BYTE $0xc2 // addq %rax, %r10 - WORD $0x3949; BYTE $0xf2 // cmpq %rsi, %r10 - LONG $0xffdb820f; WORD $0xffff // jb LBB12_5, $-37(%rip) - -LBB12_34: - WORD $0xc031 // xorl %eax, %eax - WORD $0xbe0f; BYTE $0xc0 // movsbl %al, %eax - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - - // .p2align 4, 0x90 -_vstring: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x10ec8348 // subq $16, %rsp - WORD $0x8949; BYTE $0xd6 // movq %rdx, %r14 - WORD $0x8948; BYTE $0xf3 // movq %rsi, %rbx - WORD $0x8949; BYTE $0xff // movq %rdi, %r15 - QUAD $0xffffffffd845c748 // movq $-1, $-40(%rbp) - WORD $0x8b4c; BYTE $0x26 // movq (%rsi), %r12 - LONG $0xd8558d48 // leaq $-40(%rbp), %rdx - WORD $0x894c; BYTE $0xe6 // movq %r12, %rsi - LONG $0x0000b1e8; BYTE $0x00 // callq _advance_string, $177(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0027880f; WORD $0x0000 // js LBB13_1, $39(%rip) - WORD $0x8948; BYTE $0x03 // movq %rax, (%rbx) - LONG $0x1066894d // movq %r12, $16(%r14) - LONG $0xd84d8b48 // movq $-40(%rbp), %rcx - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xc14c0f48 // cmovlq %rcx, %rax - LONG $0x18468949 // movq %rax, $24(%r14) - LONG $0x000007b8; BYTE $0x00 // movl $7, %eax - LONG $0x000007e9; BYTE $0x00 // jmp LBB13_3, $7(%rip) - -LBB13_1: - LONG $0x084f8b49 // movq $8(%r15), %rcx - WORD $0x8948; BYTE $0x0b // movq %rcx, (%rbx) - -LBB13_3: - WORD $0x8949; BYTE $0x06 // movq %rax, (%r14) - LONG $0x10c48348 // addq $16, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x0000000000000000; WORD $0x0000 // .p2align 5, 0x00 - -LCPI14_0: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - -LCPI14_1: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - -LCPI14_2: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - - // .p2align 4, 0x90 -_advance_string: - WORD $0xc1f6; BYTE $0x20 // testb $32, %cl - LONG $0x0005850f; WORD $0x0000 // jne LBB14_2, $5(%rip) - LONG $0x0053f2e9; BYTE $0x00 // jmp _advance_string_default, $21490(%rip) - -LBB14_2: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax - LONG $0x087f8b4c // movq $8(%rdi), %r15 - WORD $0x2949; BYTE $0xf7 // subq %rsi, %r15 - LONG $0x03d6840f; WORD $0x0000 // je LBB14_21, $982(%rip) - WORD $0x8b4c; BYTE $0x1f // movq (%rdi), %r11 - WORD $0x014c; BYTE $0xde // addq %r11, %rsi - LONG $0xff02c748; WORD $0xffff; BYTE $0xff // movq $-1, (%rdx) - LONG $0x40ff8349 // cmpq $64, %r15 - LONG $0x01b4820f; WORD $0x0000 // jb LBB14_22, $436(%rip) - QUAD $0xffffffffd045c748 // movq $-1, $-48(%rbp) - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - QUAD $0xffffff4d056ffdc5 // vmovdqa $-179(%rip), %ymm0 /* LCPI14_0(%rip) */ - QUAD $0xffffff650d6ffdc5 // vmovdqa $-155(%rip), %ymm1 /* LCPI14_1(%rip) */ - QUAD $0xffffff7d156ffdc5 // vmovdqa $-131(%rip), %ymm2 /* LCPI14_2(%rip) */ - LONG $0xdb76e5c5 // vpcmpeqd %ymm3, %ymm3, %ymm3 - QUAD $0xaaaaaaaaaaaab949; WORD $0xaaaa // movabsq $-6148914691236517206, %r9 - QUAD $0x555555555555ba49; WORD $0x5555 // movabsq $6148914691236517205, %r10 - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB14_5: - LONG $0x266ffec5 // vmovdqu (%rsi), %ymm4 - LONG $0x6e6ffec5; BYTE $0x20 // vmovdqu $32(%rsi), %ymm5 - LONG $0xf074ddc5 // vpcmpeqb %ymm0, %ymm4, %ymm6 - LONG $0xeed77dc5 // vpmovmskb %ymm6, %r13d - LONG $0xf074d5c5 // vpcmpeqb %ymm0, %ymm5, %ymm6 - LONG $0xc6d7fdc5 // vpmovmskb %ymm6, %eax - LONG $0xf174ddc5 // vpcmpeqb %ymm1, %ymm4, %ymm6 - LONG $0xced7fdc5 // vpmovmskb %ymm6, %ecx - LONG $0xf174d5c5 // vpcmpeqb %ymm1, %ymm5, %ymm6 - LONG $0xfed7fdc5 // vpmovmskb %ymm6, %edi - LONG $0xf464edc5 // vpcmpgtb %ymm4, %ymm2, %ymm6 - LONG $0xe364ddc5 // vpcmpgtb %ymm3, %ymm4, %ymm4 - LONG $0xe4dbcdc5 // vpand %ymm4, %ymm6, %ymm4 - LONG $0xe4d77dc5 // vpmovmskb %ymm4, %r12d - LONG $0xe564edc5 // vpcmpgtb %ymm5, %ymm2, %ymm4 - LONG $0xeb64d5c5 // vpcmpgtb %ymm3, %ymm5, %ymm5 - LONG $0xe5dbddc5 // vpand %ymm5, %ymm4, %ymm4 - LONG $0xdcd7fdc5 // vpmovmskb %ymm4, %ebx - LONG $0x20e0c148 // shlq $32, %rax - WORD $0x0949; BYTE $0xc5 // orq %rax, %r13 - LONG $0x20e7c148 // shlq $32, %rdi - LONG $0x20e3c148 // shlq $32, %rbx - WORD $0x0948; BYTE $0xf9 // orq %rdi, %rcx - LONG $0x0038850f; WORD $0x0000 // jne LBB14_10, $56(%rip) - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x004e850f; WORD $0x0000 // jne LBB14_12, $78(%rip) - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0x094c; BYTE $0xe3 // orq %r12, %rbx - WORD $0x854d; BYTE $0xed // testq %r13, %r13 - LONG $0x0080850f; WORD $0x0000 // jne LBB14_13, $128(%rip) - -LBB14_8: - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x00ce850f; WORD $0x0000 // jne LBB14_19, $206(%rip) - LONG $0x40c68348 // addq $64, %rsi - LONG $0xc0c78349 // addq $-64, %r15 - LONG $0x3fff8349 // cmpq $63, %r15 - LONG $0xff6c870f; WORD $0xffff // ja LBB14_5, $-148(%rip) - LONG $0x0000e6e9; BYTE $0x00 // jmp LBB14_23, $230(%rip) - -LBB14_10: - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0x0014850f; WORD $0x0000 // jne LBB14_12, $20(%rip) - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0x294c; BYTE $0xd8 // subq %r11, %rax - LONG $0xf9bc0f48 // bsfq %rcx, %rdi - WORD $0x0148; BYTE $0xc7 // addq %rax, %rdi - LONG $0xd07d8948 // movq %rdi, $-48(%rbp) - WORD $0x8948; BYTE $0x3a // movq %rdi, (%rdx) - -LBB14_12: - WORD $0x894c; BYTE $0xf0 // movq %r14, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x2148; BYTE $0xc8 // andq %rcx, %rax - LONG $0x00048d4c // leaq (%rax,%rax), %r8 - WORD $0x094d; BYTE $0xf0 // orq %r14, %r8 - WORD $0x894c; BYTE $0xc7 // movq %r8, %rdi - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x2148; BYTE $0xcf // andq %rcx, %rdi - WORD $0x214c; BYTE $0xcf // andq %r9, %rdi - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0x0148; BYTE $0xc7 // addq %rax, %rdi - LONG $0xc6920f41 // setb %r14b - WORD $0x0148; BYTE $0xff // addq %rdi, %rdi - WORD $0x314c; BYTE $0xd7 // xorq %r10, %rdi - WORD $0x214c; BYTE $0xc7 // andq %r8, %rdi - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x2149; BYTE $0xfd // andq %rdi, %r13 - WORD $0x094c; BYTE $0xe3 // orq %r12, %rbx - WORD $0x854d; BYTE $0xed // testq %r13, %r13 - LONG $0xff80840f; WORD $0xffff // je LBB14_8, $-128(%rip) - -LBB14_13: - LONG $0xc5bc0f49 // bsfq %r13, %rax - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x0027840f; WORD $0x0000 // je LBB14_17, $39(%rip) - LONG $0xcbbc0f48 // bsfq %rbx, %rcx - WORD $0x294c; BYTE $0xde // subq %r11, %rsi - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0x0028820f; WORD $0x0000 // jb LBB14_18, $40(%rip) - -LBB14_15: - LONG $0x06448d48; BYTE $0x01 // leaq $1(%rsi,%rax), %rax - -LBB14_16: - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB14_17: - LONG $0x000040b9; BYTE $0x00 // movl $64, %ecx - WORD $0x294c; BYTE $0xde // subq %r11, %rsi - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0xffd8830f; WORD $0xffff // jae LBB14_15, $-40(%rip) - -LBB14_18: - WORD $0x0148; BYTE $0xf1 // addq %rsi, %rcx - WORD $0x8948; BYTE $0x0a // movq %rcx, (%rdx) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0xffffcbe9; BYTE $0xff // jmp LBB14_16, $-53(%rip) - -LBB14_19: - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0xffb9850f; WORD $0xffff // jne LBB14_16, $-71(%rip) - LONG $0xcbbc0f48 // bsfq %rbx, %rcx - WORD $0x294c; BYTE $0xde // subq %r11, %rsi - WORD $0x0148; BYTE $0xce // addq %rcx, %rsi - WORD $0x8948; BYTE $0x32 // movq %rsi, (%rdx) - LONG $0xffffa7e9; BYTE $0xff // jmp LBB14_16, $-89(%rip) - -LBB14_22: - QUAD $0xffffffffd045c748 // movq $-1, $-48(%rbp) - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - -LBB14_23: - LONG $0x20ff8349 // cmpq $32, %r15 - LONG $0x009e820f; WORD $0x0000 // jb LBB14_33, $158(%rip) - LONG $0x066ffec5 // vmovdqu (%rsi), %ymm0 - QUAD $0xfffffd8b0d74fdc5 // vpcmpeqb $-629(%rip), %ymm0, %ymm1 /* LCPI14_0(%rip) */ - LONG $0xf9d7fdc5 // vpmovmskb %ymm1, %edi - QUAD $0xfffffd9f0d74fdc5 // vpcmpeqb $-609(%rip), %ymm0, %ymm1 /* LCPI14_1(%rip) */ - LONG $0xc1d7fdc5 // vpmovmskb %ymm1, %eax - QUAD $0xfffffdb30d6ffdc5 // vmovdqa $-589(%rip), %ymm1 /* LCPI14_2(%rip) */ - LONG $0xc864f5c5 // vpcmpgtb %ymm0, %ymm1, %ymm1 - LONG $0xd276edc5 // vpcmpeqd %ymm2, %ymm2, %ymm2 - LONG $0xc264fdc5 // vpcmpgtb %ymm2, %ymm0, %ymm0 - LONG $0xc0dbf5c5 // vpand %ymm0, %ymm1, %ymm0 - LONG $0xc8d77dc5 // vpmovmskb %ymm0, %r9d - WORD $0xc085 // testl %eax, %eax - LONG $0x00f3850f; WORD $0x0000 // jne LBB14_44, $243(%rip) - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x0109850f; WORD $0x0000 // jne LBB14_46, $265(%rip) - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - LONG $0x000040b8; BYTE $0x00 // movl $64, %eax - LONG $0x000040b9; BYTE $0x00 // movl $64, %ecx - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0x0004840f; WORD $0x0000 // je LBB14_28, $4(%rip) - -LBB14_27: - LONG $0xcfbc0f48 // bsfq %rdi, %rcx - -LBB14_28: - LONG $0xd9bc0f49 // bsfq %r9, %rbx - WORD $0x8545; BYTE $0xc9 // testl %r9d, %r9d - LONG $0xc3450f48 // cmovneq %rbx, %rax - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0x0016840f; WORD $0x0000 // je LBB14_31, $22(%rip) - WORD $0x294c; BYTE $0xde // subq %r11, %rsi - WORD $0x3948; BYTE $0xc8 // cmpq %rcx, %rax - LONG $0x0117820f; WORD $0x0000 // jb LBB14_47, $279(%rip) - LONG $0x0e448d48; BYTE $0x01 // leaq $1(%rsi,%rcx), %rax - LONG $0xffff05e9; BYTE $0xff // jmp LBB14_16, $-251(%rip) - -LBB14_31: - WORD $0x8545; BYTE $0xc9 // testl %r9d, %r9d - LONG $0x0116850f; WORD $0x0000 // jne LBB14_48, $278(%rip) - LONG $0x20c68348 // addq $32, %rsi - LONG $0xe0c78349 // addq $-32, %r15 - -LBB14_33: - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x0110850f; WORD $0x0000 // jne LBB14_49, $272(%rip) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0xfedb840f; WORD $0xffff // je LBB14_16, $-293(%rip) - -LBB14_35: - WORD $0xb60f; BYTE $0x0e // movzbl (%rsi), %ecx - WORD $0xf980; BYTE $0x22 // cmpb $34, %cl - LONG $0x0062840f; WORD $0x0000 // je LBB14_43, $98(%rip) - WORD $0xf980; BYTE $0x5c // cmpb $92, %cl - LONG $0x0026840f; WORD $0x0000 // je LBB14_40, $38(%rip) - WORD $0xf980; BYTE $0x1f // cmpb $31, %cl - LONG $0x012d860f; WORD $0x0000 // jbe LBB14_53, $301(%rip) - LONG $0xffc1c748; WORD $0xffff; BYTE $0xff // movq $-1, %rcx - LONG $0x000001bf; BYTE $0x00 // movl $1, %edi - -LBB14_39: - WORD $0x0148; BYTE $0xfe // addq %rdi, %rsi - WORD $0x0149; BYTE $0xcf // addq %rcx, %r15 - LONG $0xffca850f; WORD $0xffff // jne LBB14_35, $-54(%rip) - LONG $0xfffea0e9; BYTE $0xff // jmp LBB14_16, $-352(%rip) - -LBB14_40: - LONG $0x01ff8349 // cmpq $1, %r15 - LONG $0xfe96840f; WORD $0xffff // je LBB14_16, $-362(%rip) - LONG $0xfec1c748; WORD $0xffff; BYTE $0xff // movq $-2, %rcx - LONG $0x000002bf; BYTE $0x00 // movl $2, %edi - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0xffce850f; WORD $0xffff // jne LBB14_39, $-50(%rip) - WORD $0x8948; BYTE $0xf3 // movq %rsi, %rbx - WORD $0x294c; BYTE $0xdb // subq %r11, %rbx - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - WORD $0x8948; BYTE $0x1a // movq %rbx, (%rdx) - LONG $0xffffbce9; BYTE $0xff // jmp LBB14_39, $-68(%rip) - -LBB14_43: - WORD $0x294c; BYTE $0xde // subq %r11, %rsi - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - LONG $0xfffe5fe9; BYTE $0xff // jmp LBB14_16, $-417(%rip) - -LBB14_44: - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0x0014850f; WORD $0x0000 // jne LBB14_46, $20(%rip) - WORD $0x8948; BYTE $0xf1 // movq %rsi, %rcx - WORD $0x294c; BYTE $0xd9 // subq %r11, %rcx - LONG $0xd8bc0f48 // bsfq %rax, %rbx - WORD $0x0148; BYTE $0xcb // addq %rcx, %rbx - LONG $0xd05d8948 // movq %rbx, $-48(%rbp) - WORD $0x8948; BYTE $0x1a // movq %rbx, (%rdx) - -LBB14_46: - WORD $0x8944; BYTE $0xf1 // movl %r14d, %ecx - WORD $0xd1f7 // notl %ecx - WORD $0xc121 // andl %eax, %ecx - WORD $0x1c8d; BYTE $0x09 // leal (%rcx,%rcx), %ebx - LONG $0x4e048d45 // leal (%r14,%rcx,2), %r8d - WORD $0xd3f7 // notl %ebx - WORD $0xc321 // andl %eax, %ebx - LONG $0xaaaae381; WORD $0xaaaa // andl $-1431655766, %ebx - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0xcb01 // addl %ecx, %ebx - LONG $0xc6920f41 // setb %r14b - WORD $0xdb01 // addl %ebx, %ebx - LONG $0x5555f381; WORD $0x5555 // xorl $1431655765, %ebx - WORD $0x2144; BYTE $0xc3 // andl %r8d, %ebx - WORD $0xd3f7 // notl %ebx - WORD $0xdf21 // andl %ebx, %edi - LONG $0x000040b8; BYTE $0x00 // movl $64, %eax - LONG $0x000040b9; BYTE $0x00 // movl $64, %ecx - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0xfeca850f; WORD $0xffff // jne LBB14_27, $-310(%rip) - LONG $0xfffec9e9; BYTE $0xff // jmp LBB14_28, $-311(%rip) - -LBB14_47: - WORD $0x0148; BYTE $0xf0 // addq %rsi, %rax - WORD $0x8948; BYTE $0x02 // movq %rax, (%rdx) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0xfffde6e9; BYTE $0xff // jmp LBB14_16, $-538(%rip) - -LBB14_48: - WORD $0x294c; BYTE $0xde // subq %r11, %rsi - WORD $0x0148; BYTE $0xde // addq %rbx, %rsi - LONG $0x00004ee9; BYTE $0x00 // jmp LBB14_54, $78(%rip) - -LBB14_49: - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0x0036840f; WORD $0x0000 // je LBB14_21, $54(%rip) - LONG $0xd07d8348; BYTE $0xff // cmpq $-1, $-48(%rbp) - LONG $0x0010850f; WORD $0x0000 // jne LBB14_52, $16(%rip) - WORD $0x894c; BYTE $0xd8 // movq %r11, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0148; BYTE $0xf0 // addq %rsi, %rax - LONG $0xd0458948 // movq %rax, $-48(%rbp) - WORD $0x8948; BYTE $0x02 // movq %rax, (%rdx) - -LBB14_52: - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0xff49; BYTE $0xcf // decq %r15 - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0xfec6850f; WORD $0xffff // jne LBB14_35, $-314(%rip) - LONG $0xfffd9ce9; BYTE $0xff // jmp LBB14_16, $-612(%rip) - -LBB14_21: - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xfffd90e9; BYTE $0xff // jmp LBB14_16, $-624(%rip) - -LBB14_53: - WORD $0x294c; BYTE $0xde // subq %r11, %rsi - -LBB14_54: - WORD $0x8948; BYTE $0x32 // movq %rsi, (%rdx) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0xfffd7ee9; BYTE $0xff // jmp LBB14_16, $-642(%rip) - WORD $0x0000; BYTE $0x00 // .p2align 4, 0x00 - -LCPI15_0: - LONG $0x43300000 // .long 1127219200 - LONG $0x45300000 // .long 1160773632 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - -LCPI15_1: - QUAD $0x4330000000000000 // .quad 0x4330000000000000 - QUAD $0x4530000000000000 // .quad 0x4530000000000000 - - // .p2align 3, 0x00 -LCPI15_2: - QUAD $0x430c6bf526340000 // .quad 0x430c6bf526340000 - -LCPI15_3: - QUAD $0xc30c6bf526340000 // .quad 0xc30c6bf526340000 - - // .p2align 4, 0x90 -_vnumber: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x38ec8348 // subq $56, %rsp - WORD $0x8949; BYTE $0xd6 // movq %rdx, %r14 - QUAD $0x00000000c845c748 // movq $0, $-56(%rbp) - WORD $0x8b48; BYTE $0x06 // movq (%rsi), %rax - WORD $0x8b4c; BYTE $0x3f // movq (%rdi), %r15 - LONG $0x086f8b4c // movq $8(%rdi), %r13 - LONG $0x205a8b48 // movq $32(%rdx), %rbx - LONG $0x285a8b4c // movq $40(%rdx), %r11 - LONG $0x0902c748; WORD $0x0000; BYTE $0x00 // movq $9, (%rdx) - LONG $0xc057f9c5 // vxorpd %xmm0, %xmm0, %xmm0 - LONG $0x4211f9c5; BYTE $0x08 // vmovupd %xmm0, $8(%rdx) - WORD $0x8b48; BYTE $0x0e // movq (%rsi), %rcx - LONG $0x184a8948 // movq %rcx, $24(%rdx) - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x0045830f; WORD $0x0000 // jae LBB15_6, $69(%rip) - LONG $0x073c8a41 // movb (%r15,%rax), %dil - LONG $0x0001ba41; WORD $0x0000 // movl $1, %r10d - LONG $0x2dff8040 // cmpb $45, %dil - LONG $0x0016850f; WORD $0x0000 // jne LBB15_4, $22(%rip) - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x0025830f; WORD $0x0000 // jae LBB15_6, $37(%rip) - LONG $0x073c8a41 // movb (%r15,%rax), %dil - LONG $0xffffba41; WORD $0xffff // movl $-1, %r10d - -LBB15_4: - WORD $0x4f8d; BYTE $0xd0 // leal $-48(%rdi), %ecx - WORD $0xf980; BYTE $0x0a // cmpb $10, %cl - LONG $0x0028820f; WORD $0x0000 // jb LBB15_9, $40(%rip) - WORD $0x8948; BYTE $0x06 // movq %rax, (%rsi) - LONG $0xfe06c749; WORD $0xffff; BYTE $0xff // movq $-2, (%r14) - LONG $0x00000ae9; BYTE $0x00 // jmp LBB15_8, $10(%rip) - -LBB15_6: - WORD $0x894c; BYTE $0x2e // movq %r13, (%rsi) - -LBB15_7: - LONG $0xff06c749; WORD $0xffff; BYTE $0xff // movq $-1, (%r14) - -LBB15_8: - LONG $0x38c48348 // addq $56, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB15_9: - LONG $0x30ff8040 // cmpb $48, %dil - LONG $0x0035850f; WORD $0x0000 // jne LBB15_13, $53(%rip) - LONG $0x01488d4c // leaq $1(%rax), %r9 - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x00bf830f; WORD $0x0000 // jae LBB15_22, $191(%rip) - LONG $0x0f148a43 // movb (%r15,%r9), %dl - WORD $0xc280; BYTE $0xd2 // addb $-46, %dl - WORD $0xfa80; BYTE $0x37 // cmpb $55, %dl - LONG $0x00af870f; WORD $0x0000 // ja LBB15_22, $175(%rip) - LONG $0xc2b60f44 // movzbl %dl, %r8d - QUAD $0x000000800001ba48; WORD $0x0080 // movabsq $36028797027352577, %rdx - LONG $0xc2a30f4c // btq %r8, %rdx - LONG $0x0097830f; WORD $0x0000 // jae LBB15_22, $151(%rip) - -LBB15_13: - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0xa05d8948 // movq %rbx, $-96(%rbp) - LONG $0xc0558944 // movl %r10d, $-64(%rbp) - LONG $0xd0758948 // movq %rsi, $-48(%rbp) - LONG $0x0075830f; WORD $0x0000 // jae LBB15_21, $117(%rip) - WORD $0xf980; BYTE $0x09 // cmpb $9, %cl - LONG $0x0081870f; WORD $0x0000 // ja LBB15_23, $129(%rip) - LONG $0xffd0b841; WORD $0xffff // movl $4294967248, %r8d - LONG $0xff4d8d4d // leaq $-1(%r13), %r9 - WORD $0xc931 // xorl %ecx, %ecx - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB15_16: - LONG $0x12fa8341 // cmpl $18, %r10d - LONG $0x00268f0f; WORD $0x0000 // jg LBB15_18, $38(%rip) - LONG $0xa4148d4b // leaq (%r12,%r12,4), %rdx - LONG $0xffbe0f40 // movsbl %dil, %edi - WORD $0x0144; BYTE $0xc7 // addl %r8d, %edi - LONG $0x57248d4c // leaq (%rdi,%rdx,2), %r12 - WORD $0xff41; BYTE $0xc2 // incl %r10d - LONG $0x000011e9; BYTE $0x00 // jmp LBB15_19, $17(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB15_18: - WORD $0xc1ff // incl %ecx - -LBB15_19: - WORD $0x3949; BYTE $0xc1 // cmpq %rax, %r9 - LONG $0x0079840f; WORD $0x0000 // je LBB15_28, $121(%rip) - LONG $0x7cb60f41; WORD $0x0107 // movzbl $1(%r15,%rax), %edi - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x578d; BYTE $0xd0 // leal $-48(%rdi), %edx - WORD $0xfa80; BYTE $0x0a // cmpb $10, %dl - LONG $0xffb0820f; WORD $0xffff // jb LBB15_16, $-80(%rip) - LONG $0x00001de9; BYTE $0x00 // jmp LBB15_24, $29(%rip) - -LBB15_21: - WORD $0xc931 // xorl %ecx, %ecx - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - LONG $0x000055e9; BYTE $0x00 // jmp LBB15_29, $85(%rip) - -LBB15_22: - WORD $0x894c; BYTE $0x0e // movq %r9, (%rsi) - LONG $0xffff13e9; BYTE $0xff // jmp LBB15_8, $-237(%rip) - -LBB15_23: - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0xc931 // xorl %ecx, %ecx - -LBB15_24: - WORD $0xd231 // xorl %edx, %edx - WORD $0xc985 // testl %ecx, %ecx - WORD $0x9f0f; BYTE $0xc2 // setg %dl - WORD $0x5589; BYTE $0xc4 // movl %edx, $-60(%rbp) - WORD $0xb041; BYTE $0x01 // movb $1, %r8b - LONG $0x2eff8040 // cmpb $46, %dil - LONG $0x003b850f; WORD $0x0000 // jne LBB15_30, $59(%rip) - WORD $0xff48; BYTE $0xc0 // incq %rax - LONG $0x0806c749; WORD $0x0000; BYTE $0x00 // movq $8, (%r14) - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x0268830f; WORD $0x0000 // jae LBB15_68, $616(%rip) - LONG $0x07148a41 // movb (%r15,%rax), %dl - WORD $0xc280; BYTE $0xd0 // addb $-48, %dl - WORD $0xfa80; BYTE $0x0a // cmpb $10, %dl - LONG $0x0401830f; WORD $0x0000 // jae LBB15_91, $1025(%rip) - WORD $0x3145; BYTE $0xc0 // xorl %r8d, %r8d - LONG $0x000010e9; BYTE $0x00 // jmp LBB15_30, $16(%rip) - -LBB15_28: - WORD $0x894c; BYTE $0xe8 // movq %r13, %rax - -LBB15_29: - WORD $0xd231 // xorl %edx, %edx - WORD $0xc985 // testl %ecx, %ecx - WORD $0x9f0f; BYTE $0xc2 // setg %dl - WORD $0x5589; BYTE $0xc4 // movl %edx, $-60(%rbp) - WORD $0xb041; BYTE $0x01 // movb $1, %r8b - -LBB15_30: - WORD $0xc985 // testl %ecx, %ecx - LONG $0x0056850f; WORD $0x0000 // jne LBB15_39, $86(%rip) - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x004d850f; WORD $0x0000 // jne LBB15_39, $77(%rip) - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x003c830f; WORD $0x0000 // jae LBB15_37, $60(%rip) - WORD $0xc689 // movl %eax, %esi - WORD $0x2944; BYTE $0xee // subl %r13d, %esi - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0xc931 // xorl %ecx, %ecx - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB15_34: - LONG $0x073c8041; BYTE $0x30 // cmpb $48, (%r15,%rax) - LONG $0x0024850f; WORD $0x0000 // jne LBB15_38, $36(%rip) - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0xc9ff // decl %ecx - WORD $0x3949; BYTE $0xc5 // cmpq %rax, %r13 - LONG $0xffe7850f; WORD $0xffff // jne LBB15_34, $-25(%rip) - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - WORD $0x8445; BYTE $0xc0 // testb %r8b, %r8b - LONG $0x0122850f; WORD $0x0000 // jne LBB15_58, $290(%rip) - LONG $0x000152e9; BYTE $0x00 // jmp LBB15_62, $338(%rip) - -LBB15_37: - WORD $0xc931 // xorl %ecx, %ecx - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - -LBB15_38: - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - -LBB15_39: - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x0051830f; WORD $0x0000 // jae LBB15_45, $81(%rip) - LONG $0x12fa8341 // cmpl $18, %r10d - LONG $0x00478f0f; WORD $0x0000 // jg LBB15_45, $71(%rip) - LONG $0xffd0b941; WORD $0xffff // movl $4294967248, %r9d - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB15_42: - LONG $0x14b60f41; BYTE $0x07 // movzbl (%r15,%rax), %edx - WORD $0x7a8d; BYTE $0xd0 // leal $-48(%rdx), %edi - LONG $0x09ff8040 // cmpb $9, %dil - LONG $0x002a870f; WORD $0x0000 // ja LBB15_45, $42(%rip) - LONG $0xa43c8d4b // leaq (%r12,%r12,4), %rdi - WORD $0x0144; BYTE $0xca // addl %r9d, %edx - LONG $0x7a248d4c // leaq (%rdx,%rdi,2), %r12 - WORD $0xc9ff // decl %ecx - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x0011830f; WORD $0x0000 // jae LBB15_45, $17(%rip) - LONG $0x01528d41 // leal $1(%r10), %edx - LONG $0x12fa8341 // cmpl $18, %r10d - WORD $0x8941; BYTE $0xd2 // movl %edx, %r10d - LONG $0xffc48c0f; WORD $0xffff // jl LBB15_42, $-60(%rip) - -LBB15_45: - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x00a4830f; WORD $0x0000 // jae LBB15_57, $164(%rip) - LONG $0x07348a41 // movb (%r15,%rax), %sil - WORD $0x568d; BYTE $0xd0 // leal $-48(%rsi), %edx - WORD $0xfa80; BYTE $0x09 // cmpb $9, %dl - LONG $0x0030870f; WORD $0x0000 // ja LBB15_51, $48(%rip) - LONG $0xff7d8d49 // leaq $-1(%r13), %rdi - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB15_48: - WORD $0x3948; BYTE $0xc7 // cmpq %rax, %rdi - LONG $0x0167840f; WORD $0x0000 // je LBB15_69, $359(%rip) - LONG $0x74b60f41; WORD $0x0107 // movzbl $1(%r15,%rax), %esi - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x568d; BYTE $0xd0 // leal $-48(%rsi), %edx - WORD $0xfa80; BYTE $0x09 // cmpb $9, %dl - LONG $0xffe2860f; WORD $0xffff // jbe LBB15_48, $-30(%rip) - LONG $0x01c445c7; WORD $0x0000; BYTE $0x00 // movl $1, $-60(%rbp) - -LBB15_51: - LONG $0x20ce8040 // orb $32, %sil - LONG $0x65fe8040 // cmpb $101, %sil - LONG $0x0056850f; WORD $0x0000 // jne LBB15_57, $86(%rip) - LONG $0x01788d48 // leaq $1(%rax), %rdi - LONG $0x0806c749; WORD $0x0000; BYTE $0x00 // movq $8, (%r14) - WORD $0x394c; BYTE $0xef // cmpq %r13, %rdi - LONG $0x011d830f; WORD $0x0000 // jae LBB15_68, $285(%rip) - LONG $0x3f348a41 // movb (%r15,%rdi), %sil - LONG $0x2dfe8040 // cmpb $45, %sil - LONG $0x0010840f; WORD $0x0000 // je LBB15_55, $16(%rip) - LONG $0x0001b841; WORD $0x0000 // movl $1, %r8d - LONG $0x2bfe8040 // cmpb $43, %sil - LONG $0x0298850f; WORD $0x0000 // jne LBB15_89, $664(%rip) - -LBB15_55: - LONG $0x02c08348 // addq $2, %rax - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x00f2830f; WORD $0x0000 // jae LBB15_68, $242(%rip) - WORD $0xd231 // xorl %edx, %edx - LONG $0x2bfe8040 // cmpb $43, %sil - WORD $0x940f; BYTE $0xc2 // sete %dl - LONG $0x12448d44; BYTE $0xff // leal $-1(%rdx,%rdx), %r8d - LONG $0x07348a41 // movb (%r15,%rax), %sil - LONG $0x000277e9; BYTE $0x00 // jmp LBB15_90, $631(%rip) - -LBB15_57: - WORD $0xce89 // movl %ecx, %esi - WORD $0x8949; BYTE $0xc5 // movq %rax, %r13 - WORD $0x8445; BYTE $0xc0 // testb %r8b, %r8b - LONG $0x0035840f; WORD $0x0000 // je LBB15_62, $53(%rip) - -LBB15_58: - WORD $0xf685 // testl %esi, %esi - LONG $0x0026850f; WORD $0x0000 // jne LBB15_61, $38(%rip) - QUAD $0x000000000000b848; WORD $0x8000 // movabsq $-9223372036854775808, %rax - LONG $0xc04d6348 // movslq $-64(%rbp), %rcx - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x00f2890f; WORD $0x0000 // jns LBB15_72, $242(%rip) - WORD $0x894c; BYTE $0xe2 // movq %r12, %rdx - WORD $0x2148; BYTE $0xca // andq %rcx, %rdx - WORD $0x3948; BYTE $0xc2 // cmpq %rax, %rdx - LONG $0x00e3840f; WORD $0x0000 // je LBB15_72, $227(%rip) - -LBB15_61: - LONG $0x0806c749; WORD $0x0000; BYTE $0x00 // movq $8, (%r14) - -LBB15_62: - QUAD $0x00000000b845c748 // movq $0, $-72(%rbp) - LONG $0x6ef9c1c4; BYTE $0xc4 // vmovq %r12, %xmm0 - QUAD $0xfffffc2f0562f9c5 // vpunpckldq $-977(%rip), %xmm0, %xmm0 /* LCPI15_0(%rip) */ - QUAD $0xfffffc37055cf9c5 // vsubpd $-969(%rip), %xmm0, %xmm0 /* LCPI15_1(%rip) */ - LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd $1, %xmm0, %xmm1 - LONG $0xc058f3c5 // vaddsd %xmm0, %xmm1, %xmm0 - LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp) - WORD $0x894c; BYTE $0xe0 // movq %r12, %rax - LONG $0x34e8c148 // shrq $52, %rax - LONG $0x011f850f; WORD $0x0000 // jne LBB15_77, $287(%rip) - LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx - WORD $0x458b; BYTE $0xc0 // movl $-64(%rbp), %eax - WORD $0xe8c1; BYTE $0x1f // shrl $31, %eax - LONG $0x3fe0c148 // shlq $63, %rax - WORD $0x0948; BYTE $0xc8 // orq %rcx, %rax - LONG $0xc8458948 // movq %rax, $-56(%rbp) - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x019f840f; WORD $0x0000 // je LBB15_85, $415(%rip) - WORD $0xf685 // testl %esi, %esi - LONG $0x0197840f; WORD $0x0000 // je LBB15_85, $407(%rip) - LONG $0x6ef9e1c4; BYTE $0xc0 // vmovq %rax, %xmm0 - WORD $0x468d; BYTE $0xff // leal $-1(%rsi), %eax - WORD $0xf883; BYTE $0x24 // cmpl $36, %eax - LONG $0x004a870f; WORD $0x0000 // ja LBB15_70, $74(%rip) - WORD $0xfe83; BYTE $0x17 // cmpl $23, %esi - LONG $0x00a48c0f; WORD $0x0000 // jl LBB15_73, $164(%rip) - WORD $0x468d; BYTE $0xea // leal $-22(%rsi), %eax - LONG $0xe00d8d48; WORD $0x00ec; BYTE $0x00 // leaq $60640(%rip), %rcx /* _P10_TAB(%rip) */ - LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0 - LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp) - LONG $0x000016b8; BYTE $0x00 // movl $22, %eax - LONG $0x000088e9; BYTE $0x00 // jmp LBB15_74, $136(%rip) - -LBB15_68: - LONG $0xd0458b48 // movq $-48(%rbp), %rax - WORD $0x894c; BYTE $0x28 // movq %r13, (%rax) - LONG $0xfffc66e9; BYTE $0xff // jmp LBB15_7, $-922(%rip) - -LBB15_69: - LONG $0x01c445c7; WORD $0x0000; BYTE $0x00 // movl $1, $-60(%rbp) - WORD $0xce89 // movl %ecx, %esi - WORD $0x8445; BYTE $0xc0 // testb %r8b, %r8b - LONG $0xff15850f; WORD $0xffff // jne LBB15_58, $-235(%rip) - LONG $0xffff45e9; BYTE $0xff // jmp LBB15_62, $-187(%rip) - -LBB15_70: - WORD $0xfe83; BYTE $0xea // cmpl $-22, %esi - LONG $0x0094820f; WORD $0x0000 // jb LBB15_77, $148(%rip) - WORD $0xdef7 // negl %esi - LONG $0x97058d48; WORD $0x00ec; BYTE $0x00 // leaq $60567(%rip), %rax /* _P10_TAB(%rip) */ - LONG $0x045efbc5; BYTE $0xf0 // vdivsd (%rax,%rsi,8), %xmm0, %xmm0 - LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp) - LONG $0x0000dee9; BYTE $0x00 // jmp LBB15_81, $222(%rip) - -LBB15_72: - LONG $0x6ef9c1c4; BYTE $0xc4 // vmovq %r12, %xmm0 - LONG $0xe1af0f4c // imulq %rcx, %r12 - QUAD $0xfffffb570562f9c5 // vpunpckldq $-1193(%rip), %xmm0, %xmm0 /* LCPI15_0(%rip) */ - QUAD $0xfffffb5f055cf9c5 // vsubpd $-1185(%rip), %xmm0, %xmm0 /* LCPI15_1(%rip) */ - LONG $0x1066894d // movq %r12, $16(%r14) - LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd $1, %xmm0, %xmm1 - LONG $0xc058f3c5 // vaddsd %xmm0, %xmm1, %xmm0 - WORD $0x2148; BYTE $0xc8 // andq %rcx, %rax - LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx - WORD $0x0948; BYTE $0xc1 // orq %rax, %rcx - LONG $0x084e8949 // movq %rcx, $8(%r14) - LONG $0xd0458b48 // movq $-48(%rbp), %rax - WORD $0x894c; BYTE $0x28 // movq %r13, (%rax) - LONG $0xfffbf3e9; BYTE $0xff // jmp LBB15_8, $-1037(%rip) - -LBB15_73: - WORD $0xf089 // movl %esi, %eax - -LBB15_74: - QUAD $0xfffffb3c052ef9c5 // vucomisd $-1220(%rip), %xmm0 /* LCPI15_2(%rip) */ - LONG $0x002a870f; WORD $0x0000 // ja LBB15_77, $42(%rip) - QUAD $0xfffffb360d10fbc5 // vmovsd $-1226(%rip), %xmm1 /* LCPI15_3(%rip) */ - LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 - LONG $0x0018870f; WORD $0x0000 // ja LBB15_77, $24(%rip) - WORD $0xc089 // movl %eax, %eax - LONG $0x1b0d8d48; WORD $0x00ec; BYTE $0x00 // leaq $60443(%rip), %rcx /* _P10_TAB(%rip) */ - LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0 - LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp) - LONG $0x000062e9; BYTE $0x00 // jmp LBB15_81, $98(%rip) - -LBB15_77: - LONG $0xa85d894c // movq %r11, $-88(%rbp) - LONG $0xc84d8d48 // leaq $-56(%rbp), %rcx - WORD $0x894c; BYTE $0xe7 // movq %r12, %rdi - WORD $0x5d8b; BYTE $0xc0 // movl $-64(%rbp), %ebx - WORD $0xda89 // movl %ebx, %edx - LONG $0xb0758948 // movq %rsi, $-80(%rbp) - LONG $0xffe423e8; BYTE $0xff // callq _atof_eisel_lemire64, $-7133(%rip) - WORD $0xc084 // testb %al, %al - LONG $0x004b840f; WORD $0x0000 // je LBB15_83, $75(%rip) - LONG $0xb0758b48 // movq $-80(%rbp), %rsi - LONG $0x00c47d83 // cmpl $0, $-60(%rbp) - LONG $0x006c840f; WORD $0x0000 // je LBB15_84, $108(%rip) - WORD $0xff49; BYTE $0xc4 // incq %r12 - LONG $0xb84d8d48 // leaq $-72(%rbp), %rcx - WORD $0x894c; BYTE $0xe7 // movq %r12, %rdi - WORD $0xda89 // movl %ebx, %edx - LONG $0xffe3fce8; BYTE $0xff // callq _atof_eisel_lemire64, $-7172(%rip) - WORD $0xc084 // testb %al, %al - LONG $0x0024840f; WORD $0x0000 // je LBB15_83, $36(%rip) - LONG $0x4d10fbc5; BYTE $0xb8 // vmovsd $-72(%rbp), %xmm1 - LONG $0x4510fbc5; BYTE $0xc8 // vmovsd $-56(%rbp), %xmm0 - LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 - LONG $0x0010850f; WORD $0x0000 // jne LBB15_83, $16(%rip) - LONG $0x000a8a0f; WORD $0x0000 // jp LBB15_83, $10(%rip) - -LBB15_81: - LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax - LONG $0x000033e9; BYTE $0x00 // jmp LBB15_85, $51(%rip) - -LBB15_83: - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - WORD $0x8b48; BYTE $0x03 // movq (%rbx), %rax - WORD $0x0149; BYTE $0xc7 // addq %rax, %r15 - WORD $0x894c; BYTE $0xee // movq %r13, %rsi - WORD $0x2948; BYTE $0xc6 // subq %rax, %rsi - WORD $0x894c; BYTE $0xff // movq %r15, %rdi - LONG $0xa0558b48 // movq $-96(%rbp), %rdx - LONG $0xa84d8b48 // movq $-88(%rbp), %rcx - LONG $0xffeb30e8; BYTE $0xff // callq _atof_native, $-5328(%rip) - LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp) - LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax - LONG $0x000008e9; BYTE $0x00 // jmp LBB15_86, $8(%rip) - -LBB15_84: - LONG $0xc8458b48 // movq $-56(%rbp), %rax - -LBB15_85: - LONG $0xd05d8b48 // movq $-48(%rbp), %rbx - -LBB15_86: - QUAD $0x000000000000b948; WORD $0x8000 // movabsq $-9223372036854775808, %rcx - WORD $0xff48; BYTE $0xc9 // decq %rcx - WORD $0x2148; BYTE $0xc1 // andq %rax, %rcx - QUAD $0x000000000000ba48; WORD $0x7ff0 // movabsq $9218868437227405312, %rdx - WORD $0x3948; BYTE $0xd1 // cmpq %rdx, %rcx - LONG $0x0007850f; WORD $0x0000 // jne LBB15_88, $7(%rip) - LONG $0xf806c749; WORD $0xffff; BYTE $0xff // movq $-8, (%r14) - -LBB15_88: - LONG $0x08468949 // movq %rax, $8(%r14) - WORD $0x894c; BYTE $0x2b // movq %r13, (%rbx) - LONG $0xfffae0e9; BYTE $0xff // jmp LBB15_8, $-1312(%rip) - -LBB15_89: - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - -LBB15_90: - WORD $0x7e8d; BYTE $0xd0 // leal $-48(%rsi), %edi - LONG $0x09ff8040 // cmpb $9, %dil - LONG $0x0013860f; WORD $0x0000 // jbe LBB15_92, $19(%rip) - -LBB15_91: - LONG $0xd04d8b48 // movq $-48(%rbp), %rcx - WORD $0x8948; BYTE $0x01 // movq %rax, (%rcx) - LONG $0xfe06c749; WORD $0xffff; BYTE $0xff // movq $-2, (%r14) - LONG $0xfffabde9; BYTE $0xff // jmp LBB15_8, $-1347(%rip) - -LBB15_92: - WORD $0x394c; BYTE $0xe8 // cmpq %r13, %rax - LONG $0x0049830f; WORD $0x0000 // jae LBB15_98, $73(%rip) - LONG $0x09ff8040 // cmpb $9, %dil - LONG $0x003f870f; WORD $0x0000 // ja LBB15_98, $63(%rip) - LONG $0xff4d8d4d // leaq $-1(%r13), %r9 - WORD $0xff31 // xorl %edi, %edi - -LBB15_95: - WORD $0xfa89 // movl %edi, %edx - LONG $0x2710ff81; WORD $0x0000 // cmpl $10000, %edi - WORD $0x3c8d; BYTE $0x92 // leal (%rdx,%rdx,4), %edi - LONG $0xf6b60f40 // movzbl %sil, %esi - LONG $0xd07e7c8d // leal $-48(%rsi,%rdi,2), %edi - WORD $0x4d0f; BYTE $0xfa // cmovgel %edx, %edi - WORD $0x3949; BYTE $0xc1 // cmpq %rax, %r9 - LONG $0x0021840f; WORD $0x0000 // je LBB15_99, $33(%rip) - LONG $0x74b60f41; WORD $0x0107 // movzbl $1(%r15,%rax), %esi - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x568d; BYTE $0xd0 // leal $-48(%rsi), %edx - WORD $0xfa80; BYTE $0x0a // cmpb $10, %dl - LONG $0xffcc820f; WORD $0xffff // jb LBB15_95, $-52(%rip) - LONG $0x00000ae9; BYTE $0x00 // jmp LBB15_100, $10(%rip) - -LBB15_98: - WORD $0xff31 // xorl %edi, %edi - LONG $0x000003e9; BYTE $0x00 // jmp LBB15_100, $3(%rip) - -LBB15_99: - WORD $0x894c; BYTE $0xe8 // movq %r13, %rax - -LBB15_100: - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - LONG $0xf0af0f41 // imull %r8d, %esi - WORD $0xce01 // addl %ecx, %esi - WORD $0x8949; BYTE $0xc5 // movq %rax, %r13 - LONG $0xfffd3fe9; BYTE $0xff // jmp LBB15_62, $-705(%rip) - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_vsigned: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - BYTE $0x53 // pushq %rbx - WORD $0x8b48; BYTE $0x06 // movq (%rsi), %rax - WORD $0x8b4c; BYTE $0x0f // movq (%rdi), %r9 - LONG $0x085f8b4c // movq $8(%rdi), %r11 - LONG $0x0902c748; WORD $0x0000; BYTE $0x00 // movq $9, (%rdx) - LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 - LONG $0x4211f8c5; BYTE $0x08 // vmovups %xmm0, $8(%rdx) - WORD $0x8b48; BYTE $0x0e // movq (%rsi), %rcx - LONG $0x184a8948 // movq %rcx, $24(%rdx) - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - LONG $0x0044830f; WORD $0x0000 // jae LBB16_1, $68(%rip) - LONG $0x010c8a41 // movb (%r9,%rax), %cl - LONG $0x0001b841; WORD $0x0000 // movl $1, %r8d - WORD $0xf980; BYTE $0x2d // cmpb $45, %cl - LONG $0x0017850f; WORD $0x0000 // jne LBB16_5, $23(%rip) - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - LONG $0x0025830f; WORD $0x0000 // jae LBB16_1, $37(%rip) - LONG $0x010c8a41 // movb (%r9,%rax), %cl - LONG $0xffc0c749; WORD $0xffff; BYTE $0xff // movq $-1, %r8 - -LBB16_5: - WORD $0x798d; BYTE $0xd0 // leal $-48(%rcx), %edi - LONG $0x0aff8040 // cmpb $10, %dil - LONG $0x001a820f; WORD $0x0000 // jb LBB16_7, $26(%rip) - WORD $0x8948; BYTE $0x06 // movq %rax, (%rsi) - LONG $0xfe02c748; WORD $0xffff; BYTE $0xff // movq $-2, (%rdx) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB16_1: - WORD $0x894c; BYTE $0x1e // movq %r11, (%rsi) - LONG $0xff02c748; WORD $0xffff; BYTE $0xff // movq $-1, (%rdx) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB16_7: - WORD $0xf980; BYTE $0x30 // cmpb $48, %cl - LONG $0x0035850f; WORD $0x0000 // jne LBB16_12, $53(%rip) - LONG $0x01788d48 // leaq $1(%rax), %rdi - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - LONG $0x0081830f; WORD $0x0000 // jae LBB16_11, $129(%rip) - LONG $0x390c8a41 // movb (%r9,%rdi), %cl - WORD $0xc180; BYTE $0xd2 // addb $-46, %cl - WORD $0xf980; BYTE $0x37 // cmpb $55, %cl - LONG $0x0071870f; WORD $0x0000 // ja LBB16_11, $113(%rip) - LONG $0xd1b60f44 // movzbl %cl, %r10d - QUAD $0x000000800001b948; WORD $0x0080 // movabsq $36028797027352577, %rcx - LONG $0xd1a30f4c // btq %r10, %rcx - LONG $0x0059830f; WORD $0x0000 // jae LBB16_11, $89(%rip) - -LBB16_12: - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - WORD $0x894d; BYTE $0xda // movq %r11, %r10 - LONG $0xd0470f4c // cmovaq %rax, %r10 - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB16_13: - WORD $0x3949; BYTE $0xc2 // cmpq %rax, %r10 - LONG $0x007f840f; WORD $0x0000 // je LBB16_23, $127(%rip) - LONG $0x3cbe0f49; BYTE $0x01 // movsbq (%r9,%rax), %rdi - WORD $0x5f8d; BYTE $0xd0 // leal $-48(%rdi), %ebx - WORD $0xfb80; BYTE $0x09 // cmpb $9, %bl - LONG $0x0033870f; WORD $0x0000 // ja LBB16_18, $51(%rip) - LONG $0x0ac96b48 // imulq $10, %rcx, %rcx - LONG $0x0013800f; WORD $0x0000 // jo LBB16_17, $19(%rip) - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0xc783; BYTE $0xd0 // addl $-48, %edi - LONG $0xf8af0f49 // imulq %r8, %rdi - WORD $0x0148; BYTE $0xf9 // addq %rdi, %rcx - LONG $0xffc9810f; WORD $0xffff // jno LBB16_13, $-55(%rip) - -LBB16_17: - WORD $0xff48; BYTE $0xc8 // decq %rax - WORD $0x8948; BYTE $0x06 // movq %rax, (%rsi) - LONG $0xfb02c748; WORD $0xffff; BYTE $0xff // movq $-5, (%rdx) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB16_11: - WORD $0x8948; BYTE $0x3e // movq %rdi, (%rsi) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB16_18: - WORD $0x394c; BYTE $0xd8 // cmpq %r11, %rax - LONG $0x002f830f; WORD $0x0000 // jae LBB16_22, $47(%rip) - LONG $0x013c8a41 // movb (%r9,%rax), %dil - LONG $0x2eff8040 // cmpb $46, %dil - LONG $0x0014840f; WORD $0x0000 // je LBB16_25, $20(%rip) - LONG $0x45ff8040 // cmpb $69, %dil - LONG $0x000a840f; WORD $0x0000 // je LBB16_25, $10(%rip) - LONG $0x65ff8040 // cmpb $101, %dil - LONG $0x000d850f; WORD $0x0000 // jne LBB16_22, $13(%rip) - -LBB16_25: - WORD $0x8948; BYTE $0x06 // movq %rax, (%rsi) - LONG $0xfa02c748; WORD $0xffff; BYTE $0xff // movq $-6, (%rdx) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB16_22: - WORD $0x8949; BYTE $0xc2 // movq %rax, %r10 - -LBB16_23: - WORD $0x894c; BYTE $0x16 // movq %r10, (%rsi) - LONG $0x104a8948 // movq %rcx, $16(%rdx) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -_vunsigned: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - BYTE $0x53 // pushq %rbx - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - WORD $0x8b48; BYTE $0x0e // movq (%rsi), %rcx - WORD $0x8b4c; BYTE $0x0f // movq (%rdi), %r9 - LONG $0x085f8b4c // movq $8(%rdi), %r11 - LONG $0x0902c748; WORD $0x0000; BYTE $0x00 // movq $9, (%rdx) - LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 - LONG $0x4211f8c5; BYTE $0x08 // vmovups %xmm0, $8(%rdx) - WORD $0x8b48; BYTE $0x06 // movq (%rsi), %rax - LONG $0x18428948 // movq %rax, $24(%rdx) - WORD $0x394c; BYTE $0xd9 // cmpq %r11, %rcx - LONG $0x0019830f; WORD $0x0000 // jae LBB17_1, $25(%rip) - LONG $0x09048a41 // movb (%r9,%rcx), %al - WORD $0x2d3c // cmpb $45, %al - LONG $0x001a850f; WORD $0x0000 // jne LBB17_4, $26(%rip) - -LBB17_3: - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - LONG $0xfa00c749; WORD $0xffff; BYTE $0xff // movq $-6, (%r8) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB17_1: - WORD $0x894c; BYTE $0x1e // movq %r11, (%rsi) - LONG $0xff00c749; WORD $0xffff; BYTE $0xff // movq $-1, (%r8) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB17_4: - WORD $0x508d; BYTE $0xd0 // leal $-48(%rax), %edx - WORD $0xfa80; BYTE $0x0a // cmpb $10, %dl - LONG $0x000d820f; WORD $0x0000 // jb LBB17_6, $13(%rip) - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - LONG $0xfe00c749; WORD $0xffff; BYTE $0xff // movq $-2, (%r8) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB17_6: - WORD $0x303c // cmpb $48, %al - LONG $0x0026850f; WORD $0x0000 // jne LBB17_7, $38(%rip) - LONG $0x09448a41; BYTE $0x01 // movb $1(%r9,%rcx), %al - WORD $0xd204 // addb $-46, %al - WORD $0x373c // cmpb $55, %al - LONG $0x00b6870f; WORD $0x0000 // ja LBB17_16, $182(%rip) - WORD $0xb60f; BYTE $0xc0 // movzbl %al, %eax - QUAD $0x000000800001ba48; WORD $0x0080 // movabsq $36028797027352577, %rdx - LONG $0xc2a30f48 // btq %rax, %rdx - LONG $0x009f830f; WORD $0x0000 // jae LBB17_16, $159(%rip) - -LBB17_7: - WORD $0xc031 // xorl %eax, %eax - LONG $0x000aba41; WORD $0x0000 // movl $10, %r10d - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB17_8: - WORD $0x3949; BYTE $0xcb // cmpq %rcx, %r11 - LONG $0x007b840f; WORD $0x0000 // je LBB17_22, $123(%rip) - LONG $0x3cbe0f41; BYTE $0x09 // movsbl (%r9,%rcx), %edi - WORD $0x578d; BYTE $0xd0 // leal $-48(%rdi), %edx - WORD $0xfa80; BYTE $0x09 // cmpb $9, %dl - LONG $0x003f870f; WORD $0x0000 // ja LBB17_17, $63(%rip) - WORD $0xf749; BYTE $0xe2 // mulq %r10 - LONG $0x0026800f; WORD $0x0000 // jo LBB17_13, $38(%rip) - WORD $0xff48; BYTE $0xc1 // incq %rcx - WORD $0xc783; BYTE $0xd0 // addl $-48, %edi - WORD $0xdb31 // xorl %ebx, %ebx - WORD $0x0148; BYTE $0xf8 // addq %rdi, %rax - WORD $0x920f; BYTE $0xc3 // setb %bl - WORD $0x8948; BYTE $0xda // movq %rbx, %rdx - WORD $0xf748; BYTE $0xda // negq %rdx - WORD $0x3148; BYTE $0xd3 // xorq %rdx, %rbx - LONG $0x0009850f; WORD $0x0000 // jne LBB17_13, $9(%rip) - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0xffb7890f; WORD $0xffff // jns LBB17_8, $-73(%rip) - -LBB17_13: - WORD $0xff48; BYTE $0xc9 // decq %rcx - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - LONG $0xfb00c749; WORD $0xffff; BYTE $0xff // movq $-5, (%r8) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB17_17: - WORD $0x394c; BYTE $0xd9 // cmpq %r11, %rcx - LONG $0x001f830f; WORD $0x0000 // jae LBB17_21, $31(%rip) - LONG $0x09148a41 // movb (%r9,%rcx), %dl - WORD $0xfa80; BYTE $0x2e // cmpb $46, %dl - LONG $0xff1f840f; WORD $0xffff // je LBB17_3, $-225(%rip) - WORD $0xfa80; BYTE $0x45 // cmpb $69, %dl - LONG $0xff16840f; WORD $0xffff // je LBB17_3, $-234(%rip) - WORD $0xfa80; BYTE $0x65 // cmpb $101, %dl - LONG $0xff0d840f; WORD $0xffff // je LBB17_3, $-243(%rip) - -LBB17_21: - WORD $0x8949; BYTE $0xcb // movq %rcx, %r11 - -LBB17_22: - WORD $0x894c; BYTE $0x1e // movq %r11, (%rsi) - LONG $0x10408949 // movq %rax, $16(%r8) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB17_16: - WORD $0xff48; BYTE $0xc1 // incq %rcx - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x0000000000000000; BYTE $0x00 // .p2align 4, 0x00 - -LCPI18_0: - QUAD $0x0000000000000001 // .quad 1 - QUAD $0x0000000000000005 // .quad 5 - - // .p2align 4, 0x90 -_skip_array: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - QUAD $0xffffffdb0528f8c5 // vmovaps $-37(%rip), %xmm0 /* LCPI18_0(%rip) */ - LONG $0x0011f8c5 // vmovups %xmm0, (%rax) - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - BYTE $0x5d // popq %rbp - LONG $0x00000ee9; BYTE $0x00 // jmp _fsm_exec, $14(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -_fsm_exec: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x28ec8348 // subq $40, %rsp - LONG $0xb84d8948 // movq %rcx, $-72(%rbp) - LONG $0x003f8348 // cmpq $0, (%rdi) - LONG $0x0407840f; WORD $0x0000 // je LBB19_2, $1031(%rip) - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - WORD $0x8949; BYTE $0xfd // movq %rdi, %r13 - LONG $0xc8758948 // movq %rsi, $-56(%rbp) - LONG $0x08468d48 // leaq $8(%rsi), %rax - LONG $0xc0458948 // movq %rax, $-64(%rbp) - LONG $0xffc4c749; WORD $0xffff; BYTE $0xff // movq $-1, %r12 - LONG $0x000023e9; BYTE $0x00 // jmp LBB19_4, $35(%rip) - -LBB19_3: - LONG $0x03488d48 // leaq $3(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x04498e0f; WORD $0x0000 // jle LBB19_62, $1097(%rip) - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB19_39: - LONG $0x00558b49 // movq (%r13), %rdx - WORD $0x894d; BYTE $0xe6 // movq %r12, %r14 - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x0415840f; WORD $0x0000 // je LBB19_65, $1045(%rip) - -LBB19_4: - LONG $0xc8758b4c // movq $-56(%rbp), %r14 - WORD $0x8b49; BYTE $0x3e // movq (%r14), %rdi - LONG $0x08768b49 // movq $8(%r14), %rsi - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - WORD $0x894c; BYTE $0xc2 // movq %r8, %rdx - LONG $0xffef4ae8; BYTE $0xff // callq _advance_ns, $-4278(%rip) - WORD $0xc084 // testb %al, %al - LONG $0x03a8840f; WORD $0x0000 // je LBB19_2, $936(%rip) - LONG $0x004d8b49 // movq (%r13), %rcx - LONG $0xcd7c8b41; BYTE $0x00 // movl (%r13,%rcx,8), %edi - LONG $0xfffc8349 // cmpq $-1, %r12 - WORD $0x8949; BYTE $0xd8 // movq %rbx, %r8 - LONG $0x0006850f; WORD $0x0000 // jne LBB19_7, $6(%rip) - WORD $0x8b4d; BYTE $0x20 // movq (%r8), %r12 - WORD $0xff49; BYTE $0xcc // decq %r12 - -LBB19_7: - WORD $0xbe0f; BYTE $0xf0 // movsbl %al, %esi - LONG $0xff518d48 // leaq $-1(%rcx), %rdx - WORD $0xcfff // decl %edi - WORD $0xff83; BYTE $0x05 // cmpl $5, %edi - LONG $0x0037870f; WORD $0x0000 // ja LBB19_12, $55(%rip) - LONG $0xf91d8d48; WORD $0x0004; BYTE $0x00 // leaq $1273(%rip), %rbx /* LJTI19_0(%rip) */ - LONG $0xbb3c6348 // movslq (%rbx,%rdi,4), %rdi - WORD $0x0148; BYTE $0xdf // addq %rbx, %rdi - JMP DI - -LBB19_9: - WORD $0xfe83; BYTE $0x2c // cmpl $44, %esi - LONG $0x0173840f; WORD $0x0000 // je LBB19_31, $371(%rip) - WORD $0xfe83; BYTE $0x5d // cmpl $93, %esi - LONG $0x03a0850f; WORD $0x0000 // jne LBB19_64, $928(%rip) - LONG $0x00558949 // movq %rdx, (%r13) - WORD $0x894d; BYTE $0xe6 // movq %r12, %r14 - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0xff82850f; WORD $0xffff // jne LBB19_4, $-126(%rip) - LONG $0x000392e9; BYTE $0x00 // jmp LBB19_65, $914(%rip) - -LBB19_12: - LONG $0x00558949 // movq %rdx, (%r13) - WORD $0xfe83; BYTE $0x7b // cmpl $123, %esi - LONG $0x00ea860f; WORD $0x0000 // jbe LBB19_28, $234(%rip) - LONG $0x000379e9; BYTE $0x00 // jmp LBB19_64, $889(%rip) - -LBB19_13: - WORD $0xfe83; BYTE $0x2c // cmpl $44, %esi - LONG $0x015d840f; WORD $0x0000 // je LBB19_33, $349(%rip) - WORD $0xfe83; BYTE $0x7d // cmpl $125, %esi - LONG $0x0367850f; WORD $0x0000 // jne LBB19_64, $871(%rip) - LONG $0x00558949 // movq %rdx, (%r13) - WORD $0x894d; BYTE $0xe6 // movq %r12, %r14 - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0xff49850f; WORD $0xffff // jne LBB19_4, $-183(%rip) - LONG $0x000359e9; BYTE $0x00 // jmp LBB19_65, $857(%rip) - -LBB19_16: - WORD $0x223c // cmpb $34, %al - LONG $0x034a850f; WORD $0x0000 // jne LBB19_64, $842(%rip) - QUAD $0x00000400cd44c749; BYTE $0x00 // movq $4, (%r13,%rcx,8) - QUAD $0xffffffffd045c748 // movq $-1, $-48(%rbp) - WORD $0x8b4d; BYTE $0x38 // movq (%r8), %r15 - WORD $0x894c; BYTE $0xf7 // movq %r14, %rdi - -LBB19_18: - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - LONG $0xd0558d48 // leaq $-48(%rbp), %rdx - LONG $0xb84d8b48 // movq $-72(%rbp), %rcx - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - LONG $0xfff112e8; BYTE $0xff // callq _advance_string, $-3822(%rip) - WORD $0x8949; BYTE $0xc6 // movq %rax, %r14 - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x02e4880f; WORD $0x0000 // js LBB19_55, $740(%rip) - WORD $0x894c; BYTE $0x33 // movq %r14, (%rbx) - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - WORD $0x8949; BYTE $0xd8 // movq %rbx, %r8 - LONG $0xfee78f0f; WORD $0xffff // jg LBB19_39, $-281(%rip) - LONG $0x0002e8e9; BYTE $0x00 // jmp LBB19_56, $744(%rip) - -LBB19_20: - WORD $0x3a3c // cmpb $58, %al - LONG $0x02f8850f; WORD $0x0000 // jne LBB19_64, $760(%rip) - QUAD $0x00000000cd44c749; BYTE $0x00 // movq $0, (%r13,%rcx,8) - LONG $0xfffecce9; BYTE $0xff // jmp LBB19_39, $-308(%rip) - -LBB19_22: - WORD $0x5d3c // cmpb $93, %al - LONG $0x003c850f; WORD $0x0000 // jne LBB19_27, $60(%rip) - LONG $0x00558949 // movq %rdx, (%r13) - WORD $0x894d; BYTE $0xe6 // movq %r12, %r14 - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0xfec4850f; WORD $0xffff // jne LBB19_4, $-316(%rip) - LONG $0x0002d4e9; BYTE $0x00 // jmp LBB19_65, $724(%rip) - -LBB19_24: - WORD $0xfe83; BYTE $0x22 // cmpl $34, %esi - LONG $0x00d4840f; WORD $0x0000 // je LBB19_35, $212(%rip) - WORD $0xfe83; BYTE $0x7d // cmpl $125, %esi - LONG $0x02bb850f; WORD $0x0000 // jne LBB19_64, $699(%rip) - LONG $0x00558949 // movq %rdx, (%r13) - WORD $0x894d; BYTE $0xe6 // movq %r12, %r14 - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0xfe9d850f; WORD $0xffff // jne LBB19_4, $-355(%rip) - LONG $0x0002ade9; BYTE $0x00 // jmp LBB19_65, $685(%rip) - -LBB19_27: - QUAD $0x00000100cd44c749; BYTE $0x00 // movq $1, (%r13,%rcx,8) - WORD $0xfe83; BYTE $0x7b // cmpl $123, %esi - LONG $0x0294870f; WORD $0x0000 // ja LBB19_64, $660(%rip) - -LBB19_28: - WORD $0xf089 // movl %esi, %eax - LONG $0xe10d8d48; WORD $0x0003; BYTE $0x00 // leaq $993(%rip), %rcx /* LJTI19_1(%rip) */ - LONG $0x81046348 // movslq (%rcx,%rax,4), %rax - WORD $0x0148; BYTE $0xc8 // addq %rcx, %rax - LONG $0xffc6c749; WORD $0xffff; BYTE $0xff // movq $-1, %r14 - JMP AX - -LBB19_29: - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - WORD $0x8b4d; BYTE $0x38 // movq (%r8), %r15 - LONG $0xff778d4d // leaq $-1(%r15), %r14 - LONG $0xc8458b48 // movq $-56(%rbp), %rax - WORD $0x8b48; BYTE $0x38 // movq (%rax), %rdi - WORD $0x014c; BYTE $0xf7 // addq %r14, %rdi - LONG $0x08708b48 // movq $8(%rax), %rsi - WORD $0x294c; BYTE $0xf6 // subq %r14, %rsi - LONG $0x0007fde8; BYTE $0x00 // callq _do_skip_number, $2045(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0245880f; WORD $0x0000 // js LBB19_57, $581(%rip) - WORD $0x8b48; BYTE $0x0b // movq (%rbx), %rcx - LONG $0x08448d48; BYTE $0xff // leaq $-1(%rax,%rcx), %rax - WORD $0x8948; BYTE $0x03 // movq %rax, (%rbx) - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - WORD $0x8949; BYTE $0xd8 // movq %rbx, %r8 - LONG $0xfe1d8f0f; WORD $0xffff // jg LBB19_39, $-483(%rip) - LONG $0x00023de9; BYTE $0x00 // jmp LBB19_65, $573(%rip) - -LBB19_31: - LONG $0xfff98148; WORD $0x000f; BYTE $0x00 // cmpq $4095, %rcx - LONG $0x01ed8f0f; WORD $0x0000 // jg LBB19_58, $493(%rip) - LONG $0x01418d48 // leaq $1(%rcx), %rax - LONG $0x00458949 // movq %rax, (%r13) - QUAD $0x00000008cd44c749; BYTE $0x00 // movq $0, $8(%r13,%rcx,8) - LONG $0xfffdf5e9; BYTE $0xff // jmp LBB19_39, $-523(%rip) - -LBB19_33: - LONG $0xfff98148; WORD $0x000f; BYTE $0x00 // cmpq $4095, %rcx - LONG $0x01ca8f0f; WORD $0x0000 // jg LBB19_58, $458(%rip) - LONG $0x01418d48 // leaq $1(%rcx), %rax - LONG $0x00458949 // movq %rax, (%r13) - QUAD $0x00000308cd44c749; BYTE $0x00 // movq $3, $8(%r13,%rcx,8) - LONG $0xfffdd2e9; BYTE $0xff // jmp LBB19_39, $-558(%rip) - -LBB19_35: - QUAD $0x00000200cd44c749; BYTE $0x00 // movq $2, (%r13,%rcx,8) - QUAD $0xffffffffd045c748 // movq $-1, $-48(%rbp) - WORD $0x8b4d; BYTE $0x38 // movq (%r8), %r15 - WORD $0x894c; BYTE $0xf7 // movq %r14, %rdi - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - LONG $0xd0558d48 // leaq $-48(%rbp), %rdx - LONG $0xb84d8b48 // movq $-72(%rbp), %rcx - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - LONG $0xffefb8e8; BYTE $0xff // callq _advance_string, $-4168(%rip) - WORD $0x8949; BYTE $0xc6 // movq %rax, %r14 - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x018a880f; WORD $0x0000 // js LBB19_55, $394(%rip) - WORD $0x894c; BYTE $0x33 // movq %r14, (%rbx) - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0x01968e0f; WORD $0x0000 // jle LBB19_56, $406(%rip) - LONG $0x00458b49 // movq (%r13), %rax - LONG $0x0fff3d48; WORD $0x0000 // cmpq $4095, %rax - LONG $0x01628f0f; WORD $0x0000 // jg LBB19_58, $354(%rip) - WORD $0x8949; BYTE $0xd8 // movq %rbx, %r8 - LONG $0x01488d48 // leaq $1(%rax), %rcx - LONG $0x004d8949 // movq %rcx, (%r13) - QUAD $0x00000408c544c749; BYTE $0x00 // movq $4, $8(%r13,%rax,8) - LONG $0xfffd67e9; BYTE $0xff // jmp LBB19_39, $-665(%rip) - -LBB19_40: - QUAD $0xffffffffd045c748 // movq $-1, $-48(%rbp) - WORD $0x8b4d; BYTE $0x38 // movq (%r8), %r15 - LONG $0xc87d8b48 // movq $-56(%rbp), %rdi - LONG $0xfffe3ee9; BYTE $0xff // jmp LBB19_18, $-450(%rip) - -LBB19_41: - WORD $0x8b4d; BYTE $0x30 // movq (%r8), %r14 - LONG $0xc8458b48 // movq $-56(%rbp), %rax - WORD $0x8b48; BYTE $0x38 // movq (%rax), %rdi - WORD $0x014c; BYTE $0xf7 // addq %r14, %rdi - LONG $0x08708b48 // movq $8(%rax), %rsi - WORD $0x294c; BYTE $0xf6 // subq %r14, %rsi - WORD $0x894c; BYTE $0xc3 // movq %r8, %rbx - LONG $0x0006f7e8; BYTE $0x00 // callq _do_skip_number, $1783(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x017f880f; WORD $0x0000 // js LBB19_63, $383(%rip) - WORD $0x0148; BYTE $0x03 // addq %rax, (%rbx) - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - WORD $0x8949; BYTE $0xd8 // movq %rbx, %r8 - LONG $0xfd1f8f0f; WORD $0xffff // jg LBB19_39, $-737(%rip) - LONG $0x000176e9; BYTE $0x00 // jmp LBB19_68, $374(%rip) - -LBB19_43: - LONG $0x00458b49 // movq (%r13), %rax - LONG $0x0fff3d48; WORD $0x0000 // cmpq $4095, %rax - LONG $0x00ec8f0f; WORD $0x0000 // jg LBB19_58, $236(%rip) - LONG $0x01488d48 // leaq $1(%rax), %rcx - LONG $0x004d8949 // movq %rcx, (%r13) - QUAD $0x00000508c544c749; BYTE $0x00 // movq $5, $8(%r13,%rax,8) - LONG $0xfffcf4e9; BYTE $0xff // jmp LBB19_39, $-780(%rip) - -LBB19_45: - WORD $0x8b49; BYTE $0x00 // movq (%r8), %rax - LONG $0xc04d8b48 // movq $-64(%rbp), %rcx - WORD $0x8b48; BYTE $0x09 // movq (%rcx), %rcx - LONG $0xfc518d48 // leaq $-4(%rcx), %rdx - WORD $0x3948; BYTE $0xd0 // cmpq %rdx, %rax - LONG $0x0114870f; WORD $0x0000 // ja LBB19_61, $276(%rip) - LONG $0xc84d8b48 // movq $-56(%rbp), %rcx - WORD $0x8b48; BYTE $0x09 // movq (%rcx), %rcx - WORD $0x148b; BYTE $0x01 // movl (%rcx,%rax), %edx - LONG $0x6c61fa81; WORD $0x6573 // cmpl $1702063201, %edx - LONG $0x01d0850f; WORD $0x0000 // jne LBB19_78, $464(%rip) - LONG $0x04488d48 // leaq $4(%rax), %rcx - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xfcb78f0f; WORD $0xffff // jg LBB19_39, $-841(%rip) - LONG $0x0000f8e9; BYTE $0x00 // jmp LBB19_62, $248(%rip) - -LBB19_48: - WORD $0x8b49; BYTE $0x00 // movq (%r8), %rax - LONG $0xc04d8b48 // movq $-64(%rbp), %rcx - WORD $0x8b48; BYTE $0x09 // movq (%rcx), %rcx - LONG $0xfd518d48 // leaq $-3(%rcx), %rdx - WORD $0x3948; BYTE $0xd0 // cmpq %rdx, %rax - LONG $0x00d2870f; WORD $0x0000 // ja LBB19_61, $210(%rip) - LONG $0xc84d8b48 // movq $-56(%rbp), %rcx - WORD $0x8b48; BYTE $0x09 // movq (%rcx), %rcx - QUAD $0x6c6c756eff017c81 // cmpl $1819047278, $-1(%rcx,%rax) - LONG $0xfc73840f; WORD $0xffff // je LBB19_3, $-909(%rip) - LONG $0x0000e5e9; BYTE $0x00 // jmp LBB19_69, $229(%rip) - -LBB19_50: - WORD $0x8b49; BYTE $0x00 // movq (%r8), %rax - LONG $0xc04d8b48 // movq $-64(%rbp), %rcx - WORD $0x8b48; BYTE $0x09 // movq (%rcx), %rcx - LONG $0xfd518d48 // leaq $-3(%rcx), %rdx - WORD $0x3948; BYTE $0xd0 // cmpq %rdx, %rax - LONG $0x00a1870f; WORD $0x0000 // ja LBB19_61, $161(%rip) - LONG $0xc84d8b48 // movq $-56(%rbp), %rcx - WORD $0x8b48; BYTE $0x09 // movq (%rcx), %rcx - QUAD $0x65757274ff017c81 // cmpl $1702195828, $-1(%rcx,%rax) - LONG $0xfc42840f; WORD $0xffff // je LBB19_3, $-958(%rip) - LONG $0x000103e9; BYTE $0x00 // jmp LBB19_73, $259(%rip) - -LBB19_52: - LONG $0x00458b49 // movq (%r13), %rax - LONG $0x0fff3d48; WORD $0x0000 // cmpq $4095, %rax - LONG $0x00228f0f; WORD $0x0000 // jg LBB19_58, $34(%rip) - LONG $0x01488d48 // leaq $1(%rax), %rcx - LONG $0x004d8949 // movq %rcx, (%r13) - QUAD $0x00000608c544c749; BYTE $0x00 // movq $6, $8(%r13,%rax,8) - LONG $0xfffc2ae9; BYTE $0xff // jmp LBB19_39, $-982(%rip) - -LBB19_2: - LONG $0xffc6c749; WORD $0xffff; BYTE $0xff // movq $-1, %r14 - LONG $0x000043e9; BYTE $0x00 // jmp LBB19_65, $67(%rip) - -LBB19_58: - LONG $0xf9c6c749; WORD $0xffff; BYTE $0xff // movq $-7, %r14 - LONG $0x000037e9; BYTE $0x00 // jmp LBB19_65, $55(%rip) - -LBB19_55: - LONG $0xfffe8349 // cmpq $-1, %r14 - LONG $0xd0458d48 // leaq $-48(%rbp), %rax - LONG $0x45440f48; BYTE $0xc0 // cmoveq $-64(%rbp), %rax - WORD $0x8b48; BYTE $0x00 // movq (%rax), %rax - WORD $0x8948; BYTE $0x03 // movq %rax, (%rbx) - LONG $0x00001fe9; BYTE $0x00 // jmp LBB19_65, $31(%rip) - -LBB19_56: - WORD $0xff49; BYTE $0xcf // decq %r15 - WORD $0x894d; BYTE $0xfe // movq %r15, %r14 - LONG $0x000014e9; BYTE $0x00 // jmp LBB19_65, $20(%rip) - -LBB19_57: - WORD $0x8b48; BYTE $0x0b // movq (%rbx), %rcx - WORD $0x2948; BYTE $0xc1 // subq %rax, %rcx - LONG $0xfec18348 // addq $-2, %rcx - WORD $0x8948; BYTE $0x0b // movq %rcx, (%rbx) - -LBB19_64: - LONG $0xfec6c749; WORD $0xffff; BYTE $0xff // movq $-2, %r14 - -LBB19_65: - WORD $0x894c; BYTE $0xf0 // movq %r14, %rax - LONG $0x28c48348 // addq $40, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB19_61: - WORD $0x8949; BYTE $0x08 // movq %rcx, (%r8) - LONG $0xffc6c749; WORD $0xffff; BYTE $0xff // movq $-1, %r14 - LONG $0xffffdfe9; BYTE $0xff // jmp LBB19_65, $-33(%rip) - -LBB19_62: - WORD $0xff48; BYTE $0xc8 // decq %rax - WORD $0x8949; BYTE $0xc6 // movq %rax, %r14 - LONG $0xffffd4e9; BYTE $0xff // jmp LBB19_65, $-44(%rip) - -LBB19_63: - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0148; BYTE $0x03 // addq %rax, (%rbx) - LONG $0xffffc2e9; BYTE $0xff // jmp LBB19_64, $-62(%rip) - -LBB19_68: - WORD $0xff49; BYTE $0xce // decq %r14 - LONG $0xffffc1e9; BYTE $0xff // jmp LBB19_65, $-63(%rip) - -LBB19_69: - LONG $0xff508d48 // leaq $-1(%rax), %rdx - WORD $0x8949; BYTE $0x10 // movq %rdx, (%r8) - LONG $0xfec6c749; WORD $0xffff; BYTE $0xff // movq $-2, %r14 - LONG $0xff017c80; BYTE $0x6e // cmpb $110, $-1(%rcx,%rax) - LONG $0xffa8850f; WORD $0xffff // jne LBB19_65, $-88(%rip) - WORD $0x8949; BYTE $0x00 // movq %rax, (%r8) - LONG $0x75013c80 // cmpb $117, (%rcx,%rax) - LONG $0xff9b850f; WORD $0xffff // jne LBB19_65, $-101(%rip) - LONG $0x01508d48 // leaq $1(%rax), %rdx - WORD $0x8949; BYTE $0x10 // movq %rdx, (%r8) - LONG $0x01017c80; BYTE $0x6c // cmpb $108, $1(%rcx,%rax) - LONG $0xff89850f; WORD $0xffff // jne LBB19_65, $-119(%rip) - LONG $0x02508d48 // leaq $2(%rax), %rdx - WORD $0x8949; BYTE $0x10 // movq %rdx, (%r8) - LONG $0x02017c80; BYTE $0x6c // cmpb $108, $2(%rcx,%rax) - LONG $0xff77850f; WORD $0xffff // jne LBB19_65, $-137(%rip) - LONG $0x00004ae9; BYTE $0x00 // jmp LBB19_77, $74(%rip) - -LBB19_73: - LONG $0xff508d48 // leaq $-1(%rax), %rdx - WORD $0x8949; BYTE $0x10 // movq %rdx, (%r8) - LONG $0xfec6c749; WORD $0xffff; BYTE $0xff // movq $-2, %r14 - LONG $0xff017c80; BYTE $0x74 // cmpb $116, $-1(%rcx,%rax) - LONG $0xff59850f; WORD $0xffff // jne LBB19_65, $-167(%rip) - WORD $0x8949; BYTE $0x00 // movq %rax, (%r8) - LONG $0x72013c80 // cmpb $114, (%rcx,%rax) - LONG $0xff4c850f; WORD $0xffff // jne LBB19_65, $-180(%rip) - LONG $0x01508d48 // leaq $1(%rax), %rdx - WORD $0x8949; BYTE $0x10 // movq %rdx, (%r8) - LONG $0x01017c80; BYTE $0x75 // cmpb $117, $1(%rcx,%rax) - LONG $0xff3a850f; WORD $0xffff // jne LBB19_65, $-198(%rip) - LONG $0x02508d48 // leaq $2(%rax), %rdx - WORD $0x8949; BYTE $0x10 // movq %rdx, (%r8) - LONG $0x02017c80; BYTE $0x65 // cmpb $101, $2(%rcx,%rax) - LONG $0xff28850f; WORD $0xffff // jne LBB19_65, $-216(%rip) - -LBB19_77: - LONG $0x03c08348 // addq $3, %rax - WORD $0x8949; BYTE $0x00 // movq %rax, (%r8) - LONG $0xffff1ce9; BYTE $0xff // jmp LBB19_65, $-228(%rip) - -LBB19_78: - LONG $0xfec6c749; WORD $0xffff; BYTE $0xff // movq $-2, %r14 - WORD $0xfa80; BYTE $0x61 // cmpb $97, %dl - LONG $0xff0c850f; WORD $0xffff // jne LBB19_65, $-244(%rip) - LONG $0x01508d48 // leaq $1(%rax), %rdx - WORD $0x8949; BYTE $0x10 // movq %rdx, (%r8) - LONG $0x01017c80; BYTE $0x6c // cmpb $108, $1(%rcx,%rax) - LONG $0xfefa850f; WORD $0xffff // jne LBB19_65, $-262(%rip) - LONG $0x02508d48 // leaq $2(%rax), %rdx - WORD $0x8949; BYTE $0x10 // movq %rdx, (%r8) - LONG $0x02017c80; BYTE $0x73 // cmpb $115, $2(%rcx,%rax) - LONG $0xfee8850f; WORD $0xffff // jne LBB19_65, $-280(%rip) - LONG $0x03508d48 // leaq $3(%rax), %rdx - WORD $0x8949; BYTE $0x10 // movq %rdx, (%r8) - LONG $0x03017c80; BYTE $0x65 // cmpb $101, $3(%rcx,%rax) - LONG $0xfed6850f; WORD $0xffff // jne LBB19_65, $-298(%rip) - LONG $0x04c08348 // addq $4, %rax - WORD $0x8949; BYTE $0x00 // movq %rax, (%r8) - LONG $0xfffecae9; BYTE $0xff // jmp LBB19_65, $-310(%rip) - BYTE $0x90 // .p2align 2, 0x90 - - // .set L19_0_set_9, LBB19_9-LJTI19_0 - // .set L19_0_set_13, LBB19_13-LJTI19_0 - // .set L19_0_set_16, LBB19_16-LJTI19_0 - // .set L19_0_set_20, LBB19_20-LJTI19_0 - // .set L19_0_set_22, LBB19_22-LJTI19_0 - // .set L19_0_set_24, LBB19_24-LJTI19_0 -LJTI19_0: - LONG $0xfffffb10 // .long L19_0_set_9 - LONG $0xfffffb49 // .long L19_0_set_13 - LONG $0xfffffb70 // .long L19_0_set_16 - LONG $0xfffffbc2 // .long L19_0_set_20 - LONG $0xfffffbd8 // .long L19_0_set_22 - LONG $0xfffffbf5 // .long L19_0_set_24 - - // .set L19_1_set_65, LBB19_65-LJTI19_1 - // .set L19_1_set_64, LBB19_64-LJTI19_1 - // .set L19_1_set_40, LBB19_40-LJTI19_1 - // .set L19_1_set_41, LBB19_41-LJTI19_1 - // .set L19_1_set_29, LBB19_29-LJTI19_1 - // .set L19_1_set_43, LBB19_43-LJTI19_1 - // .set L19_1_set_45, LBB19_45-LJTI19_1 - // .set L19_1_set_48, LBB19_48-LJTI19_1 - // .set L19_1_set_50, LBB19_50-LJTI19_1 - // .set L19_1_set_52, LBB19_52-LJTI19_1 -LJTI19_1: - LONG $0xfffffeb1 // .long L19_1_set_65 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffd25 // .long L19_1_set_40 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffd39 // .long L19_1_set_41 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffc2f // .long L19_1_set_29 - LONG $0xfffffc2f // .long L19_1_set_29 - LONG $0xfffffc2f // .long L19_1_set_29 - LONG $0xfffffc2f // .long L19_1_set_29 - LONG $0xfffffc2f // .long L19_1_set_29 - LONG $0xfffffc2f // .long L19_1_set_29 - LONG $0xfffffc2f // .long L19_1_set_29 - LONG $0xfffffc2f // .long L19_1_set_29 - LONG $0xfffffc2f // .long L19_1_set_29 - LONG $0xfffffc2f // .long L19_1_set_29 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffd72 // .long L19_1_set_43 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffd98 // .long L19_1_set_45 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffdda // .long L19_1_set_48 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffe0b // .long L19_1_set_50 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffeaa // .long L19_1_set_64 - LONG $0xfffffe3c // .long L19_1_set_52 - QUAD $0x0000000000000000; LONG $0x00000000 // .p2align 4, 0x00 - -LCPI20_0: - QUAD $0x0000000000000001 // .quad 1 - QUAD $0x0000000000000006 // .quad 6 - - // .p2align 4, 0x90 -_skip_object: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - QUAD $0xffffffdb0528f8c5 // vmovaps $-37(%rip), %xmm0 /* LCPI20_0(%rip) */ - LONG $0x0011f8c5 // vmovups %xmm0, (%rax) - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - BYTE $0x5d // popq %rbp - LONG $0xfff80ee9; BYTE $0xff // jmp _fsm_exec, $-2034(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -_skip_string: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x10ec8348 // subq $16, %rsp - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - WORD $0x8949; BYTE $0xf6 // movq %rsi, %r14 - WORD $0x8949; BYTE $0xff // movq %rdi, %r15 - QUAD $0xffffffffd845c748 // movq $-1, $-40(%rbp) - WORD $0x8b48; BYTE $0x1e // movq (%rsi), %rbx - LONG $0xd8658d4c // leaq $-40(%rbp), %r12 - WORD $0x8948; BYTE $0xde // movq %rbx, %rsi - WORD $0x894c; BYTE $0xe2 // movq %r12, %rdx - LONG $0xffea2ee8; BYTE $0xff // callq _advance_string, $-5586(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x000e880f; WORD $0x0000 // js LBB21_1, $14(%rip) - WORD $0xff48; BYTE $0xcb // decq %rbx - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x8948; BYTE $0xd8 // movq %rbx, %rax - LONG $0x000010e9; BYTE $0x00 // jmp LBB21_3, $16(%rip) - -LBB21_1: - LONG $0x08c78349 // addq $8, %r15 - LONG $0xfff88348 // cmpq $-1, %rax - LONG $0xe7440f4d // cmoveq %r15, %r12 - LONG $0x240c8b49 // movq (%r12), %rcx - -LBB21_3: - WORD $0x8949; BYTE $0x0e // movq %rcx, (%r14) - LONG $0x10c48348 // addq $16, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_skip_negative: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - WORD $0x8949; BYTE $0xf6 // movq %rsi, %r14 - WORD $0x8b48; BYTE $0x1e // movq (%rsi), %rbx - WORD $0x8b48; BYTE $0x07 // movq (%rdi), %rax - WORD $0x0148; BYTE $0xd8 // addq %rbx, %rax - LONG $0x08778b48 // movq $8(%rdi), %rsi - WORD $0x2948; BYTE $0xde // subq %rbx, %rsi - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - LONG $0x00017ee8; BYTE $0x00 // callq _do_skip_number, $382(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x000b880f; WORD $0x0000 // js LBB22_1, $11(%rip) - WORD $0x0149; BYTE $0x06 // addq %rax, (%r14) - WORD $0xff48; BYTE $0xcb // decq %rbx - LONG $0x00000de9; BYTE $0x00 // jmp LBB22_3, $13(%rip) - -LBB22_1: - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0149; BYTE $0x06 // addq %rax, (%r14) - LONG $0xfec3c748; WORD $0xffff; BYTE $0xff // movq $-2, %rbx - -LBB22_3: - WORD $0x8948; BYTE $0xd8 // movq %rbx, %rax - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - LONG $0x00000000; BYTE $0x00 // .p2align 5, 0x00 - -LCPI23_0: - QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' - QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' - -LCPI23_1: - QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' - QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' - -LCPI23_2: - QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' - QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' - -LCPI23_3: - QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' - QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' - -LCPI23_4: - QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' - QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' - -LCPI23_5: - QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' - QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' - -LCPI23_6: - QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE' - QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE' - - // .p2align 4, 0x00 -LCPI23_7: - QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' - -LCPI23_8: - QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' - -LCPI23_9: - QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' - -LCPI23_10: - QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' - -LCPI23_11: - QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' - -LCPI23_12: - QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' - -LCPI23_13: - QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE' - - // .p2align 4, 0x90 -_do_skip_number: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x03a8840f; WORD $0x0000 // je LBB23_52, $936(%rip) - WORD $0x3f80; BYTE $0x30 // cmpb $48, (%rdi) - LONG $0x0033850f; WORD $0x0000 // jne LBB23_5, $51(%rip) - LONG $0x000001ba; BYTE $0x00 // movl $1, %edx - LONG $0x01fe8348 // cmpq $1, %rsi - LONG $0x047c840f; WORD $0x0000 // je LBB23_71, $1148(%rip) - WORD $0x478a; BYTE $0x01 // movb $1(%rdi), %al - WORD $0xd204 // addb $-46, %al - WORD $0x373c // cmpb $55, %al - LONG $0x046f870f; WORD $0x0000 // ja LBB23_71, $1135(%rip) - WORD $0xb60f; BYTE $0xc0 // movzbl %al, %eax - QUAD $0x000000800001b948; WORD $0x0080 // movabsq $36028797027352577, %rcx - LONG $0xc1a30f48 // btq %rax, %rcx - LONG $0x0458830f; WORD $0x0000 // jae LBB23_71, $1112(%rip) - -LBB23_5: - LONG $0xffc1c749; WORD $0xffff; BYTE $0xff // movq $-1, %r9 - LONG $0x20fe8348 // cmpq $32, %rsi - LONG $0x0474820f; WORD $0x0000 // jb LBB23_74, $1140(%rip) - QUAD $0xfffffe49056ffdc5 // vmovdqa $-439(%rip), %ymm0 /* LCPI23_0(%rip) */ - QUAD $0xfffffe610d6ffdc5 // vmovdqa $-415(%rip), %ymm1 /* LCPI23_1(%rip) */ - QUAD $0xfffffe79156ffdc5 // vmovdqa $-391(%rip), %ymm2 /* LCPI23_2(%rip) */ - QUAD $0xfffffe911d6ffdc5 // vmovdqa $-367(%rip), %ymm3 /* LCPI23_3(%rip) */ - QUAD $0xfffffea9256ffdc5 // vmovdqa $-343(%rip), %ymm4 /* LCPI23_4(%rip) */ - QUAD $0xfffffec12d6ffdc5 // vmovdqa $-319(%rip), %ymm5 /* LCPI23_5(%rip) */ - QUAD $0xfffffed9356ffdc5 // vmovdqa $-295(%rip), %ymm6 /* LCPI23_6(%rip) */ - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xffc0c749; WORD $0xffff; BYTE $0xff // movq $-1, %r8 - WORD $0x8949; BYTE $0xfa // movq %rdi, %r10 - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB23_7: - LONG $0x6f7ec1c4; BYTE $0x3a // vmovdqu (%r10), %ymm7 - LONG $0xc06445c5 // vpcmpgtb %ymm0, %ymm7, %ymm8 - LONG $0xcf6475c5 // vpcmpgtb %ymm7, %ymm1, %ymm9 - LONG $0xdb3541c4; BYTE $0xc0 // vpand %ymm8, %ymm9, %ymm8 - LONG $0xca7445c5 // vpcmpeqb %ymm2, %ymm7, %ymm9 - LONG $0xd37445c5 // vpcmpeqb %ymm3, %ymm7, %ymm10 - LONG $0xeb2d41c4; BYTE $0xc9 // vpor %ymm9, %ymm10, %ymm9 - LONG $0xd4db45c5 // vpand %ymm4, %ymm7, %ymm10 - LONG $0xd6742dc5 // vpcmpeqb %ymm6, %ymm10, %ymm10 - LONG $0xfd74c5c5 // vpcmpeqb %ymm5, %ymm7, %ymm7 - LONG $0xd7d7fdc5 // vpmovmskb %ymm7, %edx - LONG $0xd77d41c4; BYTE $0xf2 // vpmovmskb %ymm10, %r14d - LONG $0xd77d41c4; BYTE $0xd9 // vpmovmskb %ymm9, %r11d - LONG $0xffebbdc5 // vpor %ymm7, %ymm8, %ymm7 - LONG $0xeb2d41c4; BYTE $0xc1 // vpor %ymm9, %ymm10, %ymm8 - LONG $0xffebbdc5 // vpor %ymm7, %ymm8, %ymm7 - LONG $0xcfd7fdc5 // vpmovmskb %ymm7, %ecx - WORD $0xf748; BYTE $0xd1 // notq %rcx - LONG $0xc9bc0f48 // bsfq %rcx, %rcx - WORD $0xf983; BYTE $0x20 // cmpl $32, %ecx - LONG $0x0014840f; WORD $0x0000 // je LBB23_9, $20(%rip) - LONG $0xffffffbb; BYTE $0xff // movl $-1, %ebx - WORD $0xe3d3 // shll %cl, %ebx - WORD $0xd3f7 // notl %ebx - WORD $0xda21 // andl %ebx, %edx - WORD $0x2141; BYTE $0xde // andl %ebx, %r14d - WORD $0x2144; BYTE $0xdb // andl %r11d, %ebx - WORD $0x8941; BYTE $0xdb // movl %ebx, %r11d - -LBB23_9: - WORD $0x5a8d; BYTE $0xff // leal $-1(%rdx), %ebx - WORD $0xd321 // andl %edx, %ebx - LONG $0x0371850f; WORD $0x0000 // jne LBB23_69, $881(%rip) - LONG $0xff5e8d41 // leal $-1(%r14), %ebx - WORD $0x2144; BYTE $0xf3 // andl %r14d, %ebx - LONG $0x0364850f; WORD $0x0000 // jne LBB23_69, $868(%rip) - LONG $0xff5b8d41 // leal $-1(%r11), %ebx - WORD $0x2144; BYTE $0xdb // andl %r11d, %ebx - LONG $0x0357850f; WORD $0x0000 // jne LBB23_69, $855(%rip) - WORD $0xd285 // testl %edx, %edx - LONG $0x0019840f; WORD $0x0000 // je LBB23_15, $25(%rip) - WORD $0x894c; BYTE $0xd3 // movq %r10, %rbx - WORD $0x2948; BYTE $0xfb // subq %rdi, %rbx - WORD $0xbc0f; BYTE $0xd2 // bsfl %edx, %edx - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - LONG $0xfff88349 // cmpq $-1, %r8 - LONG $0x0342850f; WORD $0x0000 // jne LBB23_70, $834(%rip) - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - -LBB23_15: - WORD $0x8545; BYTE $0xf6 // testl %r14d, %r14d - LONG $0x001a840f; WORD $0x0000 // je LBB23_18, $26(%rip) - WORD $0x894c; BYTE $0xd3 // movq %r10, %rbx - WORD $0x2948; BYTE $0xfb // subq %rdi, %rbx - LONG $0xd6bc0f41 // bsfl %r14d, %edx - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - LONG $0xfff88348 // cmpq $-1, %rax - LONG $0x031f850f; WORD $0x0000 // jne LBB23_70, $799(%rip) - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - -LBB23_18: - WORD $0x8545; BYTE $0xdb // testl %r11d, %r11d - LONG $0x001a840f; WORD $0x0000 // je LBB23_21, $26(%rip) - WORD $0x894c; BYTE $0xd3 // movq %r10, %rbx - WORD $0x2948; BYTE $0xfb // subq %rdi, %rbx - LONG $0xd3bc0f41 // bsfl %r11d, %edx - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - LONG $0xfff98349 // cmpq $-1, %r9 - LONG $0x02fc850f; WORD $0x0000 // jne LBB23_70, $764(%rip) - WORD $0x8949; BYTE $0xd1 // movq %rdx, %r9 - -LBB23_21: - WORD $0xf983; BYTE $0x20 // cmpl $32, %ecx - LONG $0x0213850f; WORD $0x0000 // jne LBB23_53, $531(%rip) - LONG $0x20c28349 // addq $32, %r10 - LONG $0xe0c68348 // addq $-32, %rsi - LONG $0x1ffe8348 // cmpq $31, %rsi - LONG $0xfeeb870f; WORD $0xffff // ja LBB23_7, $-277(%rip) - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x10fe8348 // cmpq $16, %rsi - LONG $0x014f820f; WORD $0x0000 // jb LBB23_41, $335(%rip) - -LBB23_24: - QUAD $0xfffffdb6056f79c5 // vmovdqa $-586(%rip), %xmm8 /* LCPI23_7(%rip) */ - QUAD $0xfffffdbe0d6f79c5 // vmovdqa $-578(%rip), %xmm9 /* LCPI23_8(%rip) */ - QUAD $0xfffffdc6156f79c5 // vmovdqa $-570(%rip), %xmm10 /* LCPI23_9(%rip) */ - QUAD $0xfffffdce1d6f79c5 // vmovdqa $-562(%rip), %xmm11 /* LCPI23_10(%rip) */ - QUAD $0xfffffdd6256ff9c5 // vmovdqa $-554(%rip), %xmm4 /* LCPI23_11(%rip) */ - QUAD $0xfffffdde2d6ff9c5 // vmovdqa $-546(%rip), %xmm5 /* LCPI23_12(%rip) */ - QUAD $0xfffffde6356ff9c5 // vmovdqa $-538(%rip), %xmm6 /* LCPI23_13(%rip) */ - LONG $0xffffbb41; WORD $0xffff // movl $4294967295, %r11d - - // .p2align 4, 0x90 -LBB23_25: - LONG $0x6f7ac1c4; BYTE $0x3a // vmovdqu (%r10), %xmm7 - LONG $0x6441c1c4; BYTE $0xc0 // vpcmpgtb %xmm8, %xmm7, %xmm0 - LONG $0xcf64b1c5 // vpcmpgtb %xmm7, %xmm9, %xmm1 - LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 - LONG $0xcf74a9c5 // vpcmpeqb %xmm7, %xmm10, %xmm1 - LONG $0xd774a1c5 // vpcmpeqb %xmm7, %xmm11, %xmm2 - LONG $0xc9ebe9c5 // vpor %xmm1, %xmm2, %xmm1 - LONG $0xd4dbc1c5 // vpand %xmm4, %xmm7, %xmm2 - LONG $0xd674e9c5 // vpcmpeqb %xmm6, %xmm2, %xmm2 - LONG $0xfd74c1c5 // vpcmpeqb %xmm5, %xmm7, %xmm7 - LONG $0xdfebe9c5 // vpor %xmm7, %xmm2, %xmm3 - LONG $0xc0ebf1c5 // vpor %xmm0, %xmm1, %xmm0 - LONG $0xc0ebe1c5 // vpor %xmm0, %xmm3, %xmm0 - LONG $0xd7d7f9c5 // vpmovmskb %xmm7, %edx - LONG $0xfad779c5 // vpmovmskb %xmm2, %r15d - LONG $0xf1d779c5 // vpmovmskb %xmm1, %r14d - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - WORD $0x314c; BYTE $0xd9 // xorq %r11, %rcx - LONG $0xc9bc0f48 // bsfq %rcx, %rcx - WORD $0xf983; BYTE $0x10 // cmpl $16, %ecx - LONG $0x0014840f; WORD $0x0000 // je LBB23_27, $20(%rip) - LONG $0xffffffbb; BYTE $0xff // movl $-1, %ebx - WORD $0xe3d3 // shll %cl, %ebx - WORD $0xd3f7 // notl %ebx - WORD $0xda21 // andl %ebx, %edx - WORD $0x2141; BYTE $0xdf // andl %ebx, %r15d - WORD $0x2144; BYTE $0xf3 // andl %r14d, %ebx - WORD $0x8941; BYTE $0xde // movl %ebx, %r14d - -LBB23_27: - WORD $0x5a8d; BYTE $0xff // leal $-1(%rdx), %ebx - WORD $0xd321 // andl %edx, %ebx - LONG $0x0215850f; WORD $0x0000 // jne LBB23_69, $533(%rip) - LONG $0xff5f8d41 // leal $-1(%r15), %ebx - WORD $0x2144; BYTE $0xfb // andl %r15d, %ebx - LONG $0x0208850f; WORD $0x0000 // jne LBB23_69, $520(%rip) - LONG $0xff5e8d41 // leal $-1(%r14), %ebx - WORD $0x2144; BYTE $0xf3 // andl %r14d, %ebx - LONG $0x01fb850f; WORD $0x0000 // jne LBB23_69, $507(%rip) - WORD $0xd285 // testl %edx, %edx - LONG $0x0019840f; WORD $0x0000 // je LBB23_33, $25(%rip) - WORD $0x894c; BYTE $0xd3 // movq %r10, %rbx - WORD $0x2948; BYTE $0xfb // subq %rdi, %rbx - WORD $0xbc0f; BYTE $0xd2 // bsfl %edx, %edx - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - LONG $0xfff88349 // cmpq $-1, %r8 - LONG $0x01e6850f; WORD $0x0000 // jne LBB23_70, $486(%rip) - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - -LBB23_33: - WORD $0x8545; BYTE $0xff // testl %r15d, %r15d - LONG $0x001a840f; WORD $0x0000 // je LBB23_36, $26(%rip) - WORD $0x894c; BYTE $0xd3 // movq %r10, %rbx - WORD $0x2948; BYTE $0xfb // subq %rdi, %rbx - LONG $0xd7bc0f41 // bsfl %r15d, %edx - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - LONG $0xfff88348 // cmpq $-1, %rax - LONG $0x01c3850f; WORD $0x0000 // jne LBB23_70, $451(%rip) - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - -LBB23_36: - WORD $0x8545; BYTE $0xf6 // testl %r14d, %r14d - LONG $0x001a840f; WORD $0x0000 // je LBB23_39, $26(%rip) - WORD $0x894c; BYTE $0xd3 // movq %r10, %rbx - WORD $0x2948; BYTE $0xfb // subq %rdi, %rbx - LONG $0xd6bc0f41 // bsfl %r14d, %edx - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - LONG $0xfff98349 // cmpq $-1, %r9 - LONG $0x01a0850f; WORD $0x0000 // jne LBB23_70, $416(%rip) - WORD $0x8949; BYTE $0xd1 // movq %rdx, %r9 - -LBB23_39: - WORD $0xf983; BYTE $0x10 // cmpl $16, %ecx - LONG $0x00d2850f; WORD $0x0000 // jne LBB23_54, $210(%rip) - LONG $0x10c28349 // addq $16, %r10 - LONG $0xf0c68348 // addq $-16, %rsi - LONG $0x0ffe8348 // cmpq $15, %rsi - LONG $0xfeef870f; WORD $0xffff // ja LBB23_25, $-273(%rip) - -LBB23_41: - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0x00ba840f; WORD $0x0000 // je LBB23_55, $186(%rip) - LONG $0x321c8d4d // leaq (%r10,%rsi), %r11 - LONG $0xbf1d8d48; WORD $0x0001; BYTE $0x00 // leaq $447(%rip), %rbx /* LJTI23_0(%rip) */ - LONG $0x000012e9; BYTE $0x00 // jmp LBB23_44, $18(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB23_43: - WORD $0x8949; BYTE $0xca // movq %rcx, %r10 - WORD $0xff48; BYTE $0xce // decq %rsi - LONG $0x0167840f; WORD $0x0000 // je LBB23_73, $359(%rip) - -LBB23_44: - LONG $0x12be0f41 // movsbl (%r10), %edx - WORD $0xc283; BYTE $0xd5 // addl $-43, %edx - WORD $0xfa83; BYTE $0x3a // cmpl $58, %edx - LONG $0x0088870f; WORD $0x0000 // ja LBB23_55, $136(%rip) - LONG $0x014a8d49 // leaq $1(%r10), %rcx - LONG $0x93146348 // movslq (%rbx,%rdx,4), %rdx - WORD $0x0148; BYTE $0xda // addq %rbx, %rdx - JMP DX - -LBB23_46: - WORD $0x8948; BYTE $0xca // movq %rcx, %rdx - WORD $0x2948; BYTE $0xfa // subq %rdi, %rdx - LONG $0xfff98349 // cmpq $-1, %r9 - LONG $0x0152850f; WORD $0x0000 // jne LBB23_77, $338(%rip) - WORD $0xff48; BYTE $0xca // decq %rdx - WORD $0x8949; BYTE $0xd1 // movq %rdx, %r9 - LONG $0xffffbce9; BYTE $0xff // jmp LBB23_43, $-68(%rip) - -LBB23_48: - WORD $0x8948; BYTE $0xca // movq %rcx, %rdx - WORD $0x2948; BYTE $0xfa // subq %rdi, %rdx - LONG $0xfff88348 // cmpq $-1, %rax - LONG $0x0137850f; WORD $0x0000 // jne LBB23_77, $311(%rip) - WORD $0xff48; BYTE $0xca // decq %rdx - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - LONG $0xffffa1e9; BYTE $0xff // jmp LBB23_43, $-95(%rip) - -LBB23_50: - WORD $0x8948; BYTE $0xca // movq %rcx, %rdx - WORD $0x2948; BYTE $0xfa // subq %rdi, %rdx - LONG $0xfff88349 // cmpq $-1, %r8 - LONG $0x011c850f; WORD $0x0000 // jne LBB23_77, $284(%rip) - WORD $0xff48; BYTE $0xca // decq %rdx - WORD $0x8949; BYTE $0xd0 // movq %rdx, %r8 - LONG $0xffff86e9; BYTE $0xff // jmp LBB23_43, $-122(%rip) - -LBB23_52: - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0x0000e3e9; BYTE $0x00 // jmp LBB23_72, $227(%rip) - -LBB23_53: - WORD $0x0149; BYTE $0xca // addq %rcx, %r10 - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0xffc2c748; WORD $0xffff; BYTE $0xff // movq $-1, %rdx - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0018850f; WORD $0x0000 // jne LBB23_56, $24(%rip) - LONG $0x0000c5e9; BYTE $0x00 // jmp LBB23_71, $197(%rip) - -LBB23_54: - WORD $0x0149; BYTE $0xca // addq %rcx, %r10 - -LBB23_55: - LONG $0xffc2c748; WORD $0xffff; BYTE $0xff // movq $-1, %rdx - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x00b2840f; WORD $0x0000 // je LBB23_71, $178(%rip) - -LBB23_56: - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x00a9840f; WORD $0x0000 // je LBB23_71, $169(%rip) - WORD $0x854d; BYTE $0xc0 // testq %r8, %r8 - LONG $0x00a0840f; WORD $0x0000 // je LBB23_71, $160(%rip) - WORD $0x2949; BYTE $0xfa // subq %rdi, %r10 - LONG $0xff4a8d49 // leaq $-1(%r10), %rcx - WORD $0x3948; BYTE $0xc8 // cmpq %rcx, %rax - LONG $0x0036840f; WORD $0x0000 // je LBB23_64, $54(%rip) - WORD $0x3949; BYTE $0xc8 // cmpq %rcx, %r8 - LONG $0x002d840f; WORD $0x0000 // je LBB23_64, $45(%rip) - WORD $0x3949; BYTE $0xc9 // cmpq %rcx, %r9 - LONG $0x0024840f; WORD $0x0000 // je LBB23_64, $36(%rip) - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x00298e0f; WORD $0x0000 // jle LBB23_65, $41(%rip) - LONG $0xff498d49 // leaq $-1(%r9), %rcx - WORD $0x3948; BYTE $0xc8 // cmpq %rcx, %rax - LONG $0x001c840f; WORD $0x0000 // je LBB23_65, $28(%rip) - WORD $0xf749; BYTE $0xd1 // notq %r9 - WORD $0x894c; BYTE $0xca // movq %r9, %rdx - WORD $0x894c; BYTE $0xc8 // movq %r9, %rax - LONG $0x00005de9; BYTE $0x00 // jmp LBB23_72, $93(%rip) - -LBB23_64: - WORD $0xf749; BYTE $0xda // negq %r10 - WORD $0x894c; BYTE $0xd2 // movq %r10, %rdx - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - LONG $0x00004fe9; BYTE $0x00 // jmp LBB23_72, $79(%rip) - -LBB23_65: - WORD $0x894c; BYTE $0xc1 // movq %r8, %rcx - WORD $0x0948; BYTE $0xc1 // orq %rax, %rcx - WORD $0x3949; BYTE $0xc0 // cmpq %rax, %r8 - LONG $0x00178c0f; WORD $0x0000 // jl LBB23_68, $23(%rip) - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x000e880f; WORD $0x0000 // js LBB23_68, $14(%rip) - WORD $0xf749; BYTE $0xd0 // notq %r8 - WORD $0x894c; BYTE $0xc2 // movq %r8, %rdx - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - LONG $0x000029e9; BYTE $0x00 // jmp LBB23_72, $41(%rip) - -LBB23_68: - LONG $0xff508d48 // leaq $-1(%rax), %rdx - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - WORD $0xf748; BYTE $0xd0 // notq %rax - LONG $0xc2480f49 // cmovsq %r10, %rax - WORD $0x3949; BYTE $0xd0 // cmpq %rdx, %r8 - LONG $0xc2450f49 // cmovneq %r10, %rax - LONG $0x00000fe9; BYTE $0x00 // jmp LBB23_72, $15(%rip) - -LBB23_69: - WORD $0x2949; BYTE $0xfa // subq %rdi, %r10 - WORD $0xbc0f; BYTE $0xd3 // bsfl %ebx, %edx - WORD $0x014c; BYTE $0xd2 // addq %r10, %rdx - -LBB23_70: - WORD $0xf748; BYTE $0xd2 // notq %rdx - -LBB23_71: - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - -LBB23_72: - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB23_73: - WORD $0x894d; BYTE $0xda // movq %r11, %r10 - LONG $0xffc2c748; WORD $0xffff; BYTE $0xff // movq $-1, %rdx - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xff2e850f; WORD $0xffff // jne LBB23_56, $-210(%rip) - LONG $0xffffdbe9; BYTE $0xff // jmp LBB23_71, $-37(%rip) - -LBB23_77: - WORD $0xf748; BYTE $0xda // negq %rdx - LONG $0xffffd3e9; BYTE $0xff // jmp LBB23_71, $-45(%rip) - -LBB23_74: - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xffc0c749; WORD $0xffff; BYTE $0xff // movq $-1, %r8 - WORD $0x8949; BYTE $0xfa // movq %rdi, %r10 - LONG $0x10fe8348 // cmpq $16, %rsi - LONG $0xfce4830f; WORD $0xffff // jae LBB23_24, $-796(%rip) - LONG $0xfffe2ee9; BYTE $0xff // jmp LBB23_41, $-466(%rip) - BYTE $0x90 // .p2align 2, 0x90 - - // .set L23_0_set_46, LBB23_46-LJTI23_0 - // .set L23_0_set_55, LBB23_55-LJTI23_0 - // .set L23_0_set_50, LBB23_50-LJTI23_0 - // .set L23_0_set_43, LBB23_43-LJTI23_0 - // .set L23_0_set_48, LBB23_48-LJTI23_0 -LJTI23_0: - LONG $0xfffffe75 // .long L23_0_set_46 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffe75 // .long L23_0_set_46 - LONG $0xfffffeab // .long L23_0_set_50 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffe4c // .long L23_0_set_43 - LONG $0xfffffe4c // .long L23_0_set_43 - LONG $0xfffffe4c // .long L23_0_set_43 - LONG $0xfffffe4c // .long L23_0_set_43 - LONG $0xfffffe4c // .long L23_0_set_43 - LONG $0xfffffe4c // .long L23_0_set_43 - LONG $0xfffffe4c // .long L23_0_set_43 - LONG $0xfffffe4c // .long L23_0_set_43 - LONG $0xfffffe4c // .long L23_0_set_43 - LONG $0xfffffe4c // .long L23_0_set_43 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffe90 // .long L23_0_set_48 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffef0 // .long L23_0_set_55 - LONG $0xfffffe90 // .long L23_0_set_48 - - // .p2align 4, 0x90 -_skip_positive: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - WORD $0x8949; BYTE $0xf6 // movq %rsi, %r14 - WORD $0x8b48; BYTE $0x1e // movq (%rsi), %rbx - WORD $0xff48; BYTE $0xcb // decq %rbx - WORD $0x8b48; BYTE $0x07 // movq (%rdi), %rax - WORD $0x0148; BYTE $0xd8 // addq %rbx, %rax - LONG $0x08778b48 // movq $8(%rdi), %rsi - WORD $0x2948; BYTE $0xde // subq %rbx, %rsi - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - LONG $0xfff9fbe8; BYTE $0xff // callq _do_skip_number, $-1541(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x000d880f; WORD $0x0000 // js LBB24_1, $13(%rip) - WORD $0x8b49; BYTE $0x0e // movq (%r14), %rcx - LONG $0x084c8d48; BYTE $0xff // leaq $-1(%rax,%rcx), %rcx - LONG $0x000011e9; BYTE $0x00 // jmp LBB24_3, $17(%rip) - -LBB24_1: - WORD $0x8b49; BYTE $0x0e // movq (%r14), %rcx - WORD $0x2948; BYTE $0xc1 // subq %rax, %rcx - LONG $0xfec18348 // addq $-2, %rcx - LONG $0xfec3c748; WORD $0xffff; BYTE $0xff // movq $-2, %rbx - -LBB24_3: - WORD $0x8949; BYTE $0x0e // movq %rcx, (%r14) - WORD $0x8948; BYTE $0xd8 // movq %rbx, %rax - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x9090909090909090; BYTE $0x90 // .p2align 4, 0x90 - -_skip_number: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - WORD $0x8949; BYTE $0xf6 // movq %rsi, %r14 - WORD $0x8b4c; BYTE $0x27 // movq (%rdi), %r12 - LONG $0x08778b48 // movq $8(%rdi), %rsi - WORD $0x8b4d; BYTE $0x3e // movq (%r14), %r15 - WORD $0xc031 // xorl %eax, %eax - LONG $0x3c3c8043; BYTE $0x2d // cmpb $45, (%r12,%r15) - LONG $0x3c1c8d4b // leaq (%r12,%r15), %rbx - WORD $0x940f; BYTE $0xc0 // sete %al - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - WORD $0x2948; BYTE $0xc6 // subq %rax, %rsi - LONG $0x003b840f; WORD $0x0000 // je LBB25_6, $59(%rip) - WORD $0x3949; BYTE $0xf7 // cmpq %rsi, %r15 - LONG $0x000c830f; WORD $0x0000 // jae LBB25_3, $12(%rip) - WORD $0x038a // movb (%rbx), %al - WORD $0xd004 // addb $-48, %al - WORD $0x093c // cmpb $9, %al - LONG $0x0038870f; WORD $0x0000 // ja LBB25_8, $56(%rip) - -LBB25_3: - WORD $0x8948; BYTE $0xdf // movq %rbx, %rdi - LONG $0xfff971e8; BYTE $0xff // callq _do_skip_number, $-1679(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0021880f; WORD $0x0000 // js LBB25_7, $33(%rip) - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - -LBB25_5: - WORD $0x294c; BYTE $0xe3 // subq %r12, %rbx - WORD $0x8949; BYTE $0x1e // movq %rbx, (%r14) - WORD $0x894c; BYTE $0xf8 // movq %r15, %rax - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB25_6: - LONG $0xffc7c749; WORD $0xffff; BYTE $0xff // movq $-1, %r15 - LONG $0xffffe2e9; BYTE $0xff // jmp LBB25_5, $-30(%rip) - -LBB25_7: - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x0148; BYTE $0xc3 // addq %rax, %rbx - -LBB25_8: - LONG $0xfec7c749; WORD $0xffff; BYTE $0xff // movq $-2, %r15 - LONG $0xffffd0e9; BYTE $0xff // jmp LBB25_5, $-48(%rip) - LONG $0x00000000; BYTE $0x00 // .p2align 4, 0x00 - -LCPI26_0: - LONG $0x00000001 // .long 1 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - - // .p2align 4, 0x90 -_skip_one: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - QUAD $0xffffffdb0528f8c5 // vmovaps $-37(%rip), %xmm0 /* LCPI26_0(%rip) */ - LONG $0x0011f8c5 // vmovups %xmm0, (%rax) - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - BYTE $0x5d // popq %rbp - LONG $0xffeeeee9; BYTE $0xff // jmp _fsm_exec, $-4370(%rip) - QUAD $0x0000000000000000; LONG $0x00000000; WORD $0x0000 // .p2align 4, 0x00 - -LCPI27_0: - LONG $0x00000001 // .long 1 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - - // .p2align 4, 0x90 -_validate_one: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - QUAD $0xffffffdb0528f8c5 // vmovaps $-37(%rip), %xmm0 /* LCPI27_0(%rip) */ - LONG $0x0011f8c5 // vmovups %xmm0, (%rax) - LONG $0x000020b9; BYTE $0x00 // movl $32, %ecx - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - BYTE $0x5d // popq %rbp - LONG $0xffeea9e9; BYTE $0xff // jmp _fsm_exec, $-4439(%rip) - QUAD $0x0000000000000000; BYTE $0x00 // .p2align 5, 0x00 - -LCPI28_0: - QUAD $0x2c2c2c2c2c2c2c2c; QUAD $0x2c2c2c2c2c2c2c2c // .space 16, ',,,,,,,,,,,,,,,,' - QUAD $0x2c2c2c2c2c2c2c2c; QUAD $0x2c2c2c2c2c2c2c2c // .space 16, ',,,,,,,,,,,,,,,,' - -LCPI28_1: - QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' - QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' - -LCPI28_2: - QUAD $0x5d5d5d5d5d5d5d5d; QUAD $0x5d5d5d5d5d5d5d5d // .space 16, ']]]]]]]]]]]]]]]]' - QUAD $0x5d5d5d5d5d5d5d5d; QUAD $0x5d5d5d5d5d5d5d5d // .space 16, ']]]]]]]]]]]]]]]]' - -LCPI28_6: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - -LCPI28_7: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - -LCPI28_8: - QUAD $0x7b7b7b7b7b7b7b7b; QUAD $0x7b7b7b7b7b7b7b7b // .space 16, '{{{{{{{{{{{{{{{{' - QUAD $0x7b7b7b7b7b7b7b7b; QUAD $0x7b7b7b7b7b7b7b7b // .space 16, '{{{{{{{{{{{{{{{{' - -LCPI28_9: - QUAD $0x7d7d7d7d7d7d7d7d; QUAD $0x7d7d7d7d7d7d7d7d // .space 16, '}}}}}}}}}}}}}}}}' - QUAD $0x7d7d7d7d7d7d7d7d; QUAD $0x7d7d7d7d7d7d7d7d // .space 16, '}}}}}}}}}}}}}}}}' - -LCPI28_10: - QUAD $0x5b5b5b5b5b5b5b5b; QUAD $0x5b5b5b5b5b5b5b5b // .space 16, '[[[[[[[[[[[[[[[[' - QUAD $0x5b5b5b5b5b5b5b5b; QUAD $0x5b5b5b5b5b5b5b5b // .space 16, '[[[[[[[[[[[[[[[[' - - // .p2align 4, 0x00 -LCPI28_3: - QUAD $0x2c2c2c2c2c2c2c2c; QUAD $0x2c2c2c2c2c2c2c2c // .space 16, ',,,,,,,,,,,,,,,,' - -LCPI28_4: - QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' - -LCPI28_5: - QUAD $0x5d5d5d5d5d5d5d5d; QUAD $0x5d5d5d5d5d5d5d5d // .space 16, ']]]]]]]]]]]]]]]]' - - // .p2align 4, 0x90 -_skip_one_fast: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0xe0e48348 // andq $-32, %rsp - LONG $0x80ec8148; WORD $0x0000; BYTE $0x00 // subq $128, %rsp - WORD $0x8949; BYTE $0xf6 // movq %rsi, %r14 - WORD $0x8949; BYTE $0xff // movq %rdi, %r15 - WORD $0x8b48; BYTE $0x3f // movq (%rdi), %rdi - LONG $0x08778b49 // movq $8(%r15), %rsi - WORD $0x894c; BYTE $0xf2 // movq %r14, %rdx - LONG $0xffdd03e8; BYTE $0xff // callq _advance_ns, $-8957(%rip) - WORD $0x8b49; BYTE $0x16 // movq (%r14), %rdx - LONG $0xff628d4c // leaq $-1(%rdx), %r12 - WORD $0xbe0f; BYTE $0xc8 // movsbl %al, %ecx - WORD $0xf983; BYTE $0x7b // cmpl $123, %ecx - LONG $0x015d870f; WORD $0x0000 // ja LBB28_23, $349(%rip) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xc6358d48; WORD $0x0008; BYTE $0x00 // leaq $2246(%rip), %rsi /* LJTI28_0(%rip) */ - LONG $0x8e0c6348 // movslq (%rsi,%rcx,4), %rcx - WORD $0x0148; BYTE $0xf1 // addq %rsi, %rcx - JMP CX - -LBB28_2: - WORD $0x8b49; BYTE $0x07 // movq (%r15), %rax - LONG $0x084f8b49 // movq $8(%r15), %rcx - WORD $0x2948; BYTE $0xd1 // subq %rdx, %rcx - WORD $0x0148; BYTE $0xc2 // addq %rax, %rdx - LONG $0x20f98348 // cmpq $32, %rcx - LONG $0x0054820f; WORD $0x0000 // jb LBB28_6, $84(%rip) - QUAD $0xfffffe5a056ffdc5 // vmovdqa $-422(%rip), %ymm0 /* LCPI28_0(%rip) */ - QUAD $0xfffffe720d6ffdc5 // vmovdqa $-398(%rip), %ymm1 /* LCPI28_1(%rip) */ - QUAD $0xfffffe8a156ffdc5 // vmovdqa $-374(%rip), %ymm2 /* LCPI28_2(%rip) */ - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB28_4: - LONG $0x1a6ffec5 // vmovdqu (%rdx), %ymm3 - LONG $0xe074e5c5 // vpcmpeqb %ymm0, %ymm3, %ymm4 - LONG $0xd9dbe5c5 // vpand %ymm1, %ymm3, %ymm3 - LONG $0xda74e5c5 // vpcmpeqb %ymm2, %ymm3, %ymm3 - LONG $0xdcebe5c5 // vpor %ymm4, %ymm3, %ymm3 - LONG $0xf3d7fdc5 // vpmovmskb %ymm3, %esi - WORD $0xf685 // testl %esi, %esi - LONG $0x00b5850f; WORD $0x0000 // jne LBB28_17, $181(%rip) - LONG $0x20c28348 // addq $32, %rdx - LONG $0xe0c18348 // addq $-32, %rcx - LONG $0x1ff98348 // cmpq $31, %rcx - LONG $0xffce870f; WORD $0xffff // ja LBB28_4, $-50(%rip) - -LBB28_6: - LONG $0x10f98348 // cmpq $16, %rcx - LONG $0x0057820f; WORD $0x0000 // jb LBB28_10, $87(%rip) - QUAD $0xfffffefc056ff9c5 // vmovdqa $-260(%rip), %xmm0 /* LCPI28_3(%rip) */ - QUAD $0xffffff040d6ff9c5 // vmovdqa $-252(%rip), %xmm1 /* LCPI28_4(%rip) */ - QUAD $0xffffff0c156ff9c5 // vmovdqa $-244(%rip), %xmm2 /* LCPI28_5(%rip) */ - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB28_8: - LONG $0x1a6ffac5 // vmovdqu (%rdx), %xmm3 - LONG $0xe074e1c5 // vpcmpeqb %xmm0, %xmm3, %xmm4 - LONG $0xd9dbe1c5 // vpand %xmm1, %xmm3, %xmm3 - LONG $0xda74e1c5 // vpcmpeqb %xmm2, %xmm3, %xmm3 - LONG $0xdcebe1c5 // vpor %xmm4, %xmm3, %xmm3 - LONG $0xf3d7f9c5 // vpmovmskb %xmm3, %esi - WORD $0x8566; BYTE $0xf6 // testw %si, %si - LONG $0x0751850f; WORD $0x0000 // jne LBB28_86, $1873(%rip) - LONG $0x10c28348 // addq $16, %rdx - LONG $0xf0c18348 // addq $-16, %rcx - LONG $0x0ff98348 // cmpq $15, %rcx - LONG $0xffcd870f; WORD $0xffff // ja LBB28_8, $-51(%rip) - -LBB28_10: - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x075b840f; WORD $0x0000 // je LBB28_87, $1883(%rip) - LONG $0x0a348d48 // leaq (%rdx,%rcx), %rsi - -LBB28_12: - WORD $0xb60f; BYTE $0x1a // movzbl (%rdx), %ebx - WORD $0xfb80; BYTE $0x2c // cmpb $44, %bl - LONG $0x074b840f; WORD $0x0000 // je LBB28_87, $1867(%rip) - WORD $0xfb80; BYTE $0x7d // cmpb $125, %bl - LONG $0x0742840f; WORD $0x0000 // je LBB28_87, $1858(%rip) - WORD $0xfb80; BYTE $0x5d // cmpb $93, %bl - LONG $0x0739840f; WORD $0x0000 // je LBB28_87, $1849(%rip) - WORD $0xff48; BYTE $0xc2 // incq %rdx - WORD $0xff48; BYTE $0xc9 // decq %rcx - LONG $0xffd6850f; WORD $0xffff // jne LBB28_12, $-42(%rip) - WORD $0x8948; BYTE $0xf2 // movq %rsi, %rdx - WORD $0x2948; BYTE $0xc2 // subq %rax, %rdx - LONG $0x00000de9; BYTE $0x00 // jmp LBB28_19, $13(%rip) - -LBB28_17: - WORD $0x6348; BYTE $0xce // movslq %esi, %rcx - -LBB28_18: - LONG $0xc9bc0f48 // bsfq %rcx, %rcx - WORD $0x2948; BYTE $0xc2 // subq %rax, %rdx - WORD $0x0148; BYTE $0xca // addq %rcx, %rdx - -LBB28_19: - WORD $0x8949; BYTE $0x16 // movq %rdx, (%r14) - -LBB28_20: - WORD $0x894c; BYTE $0xe0 // movq %r12, %rax - -LBB28_21: - LONG $0xd8658d48 // leaq $-40(%rbp), %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB28_22: - LONG $0x03c28348 // addq $3, %rdx - LONG $0x08573b49 // cmpq $8(%r15), %rdx - LONG $0xffda860f; WORD $0xffff // jbe LBB28_19, $-38(%rip) - LONG $0xffffdbe9; BYTE $0xff // jmp LBB28_21, $-37(%rip) - -LBB28_23: - WORD $0x894d; BYTE $0x26 // movq %r12, (%r14) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0xffffcce9; BYTE $0xff // jmp LBB28_21, $-52(%rip) - -LBB28_24: - WORD $0x8b49; BYTE $0x0f // movq (%r15), %rcx - LONG $0x085f8b4d // movq $8(%r15), %r11 - LONG $0x244c8948; BYTE $0x18 // movq %rcx, $24(%rsp) - LONG $0x113c8d4c // leaq (%rcx,%rdx), %r15 - WORD $0x2949; BYTE $0xd3 // subq %rdx, %r11 - LONG $0x20fb8349 // cmpq $32, %r11 - LONG $0x06b08c0f; WORD $0x0000 // jl LBB28_33, $1712(%rip) - LONG $0x000020bb; BYTE $0x00 // movl $32, %ebx - LONG $0xffffb941; WORD $0xffff // movl $4294967295, %r9d - WORD $0xd231 // xorl %edx, %edx - QUAD $0xfffffd52056ffdc5 // vmovdqa $-686(%rip), %ymm0 /* LCPI28_6(%rip) */ - QUAD $0xfffffd6a0d6ffdc5 // vmovdqa $-662(%rip), %ymm1 /* LCPI28_7(%rip) */ - LONG $0xab918d45; WORD $0xaaaa; BYTE $0xaa // leal $-1431655765(%r9), %r10d - WORD $0xff31 // xorl %edi, %edi - LONG $0x000061e9; BYTE $0x00 // jmp LBB28_26, $97(%rip) - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB28_29: - WORD $0xfe89 // movl %edi, %esi - WORD $0x3144; BYTE $0xce // xorl %r9d, %esi - WORD $0xce21 // andl %ecx, %esi - LONG $0x36048d44 // leal (%rsi,%rsi), %r8d - WORD $0x0941; BYTE $0xf8 // orl %edi, %r8d - WORD $0x8944; BYTE $0xc1 // movl %r8d, %ecx - WORD $0x3144; BYTE $0xd1 // xorl %r10d, %ecx - WORD $0xf121 // andl %esi, %ecx - LONG $0xaaaae181; WORD $0xaaaa // andl $-1431655766, %ecx - WORD $0xff31 // xorl %edi, %edi - WORD $0xf101 // addl %esi, %ecx - LONG $0xc7920f40 // setb %dil - WORD $0xc901 // addl %ecx, %ecx - LONG $0x5555f181; WORD $0x5555 // xorl $1431655765, %ecx - WORD $0x2144; BYTE $0xc1 // andl %r8d, %ecx - WORD $0x3144; BYTE $0xc9 // xorl %r9d, %ecx - WORD $0x2141; BYTE $0xcd // andl %ecx, %r13d - WORD $0x8545; BYTE $0xed // testl %r13d, %r13d - LONG $0x0049850f; WORD $0x0000 // jne LBB28_84, $73(%rip) - -LBB28_30: - LONG $0x20c28348 // addq $32, %rdx - LONG $0x1b4c8d49; BYTE $0xe0 // leaq $-32(%r11,%rbx), %rcx - LONG $0xe0c38348 // addq $-32, %rbx - LONG $0x3ff98348 // cmpq $63, %rcx - LONG $0x06158e0f; WORD $0x0000 // jle LBB28_31, $1557(%rip) - -LBB28_26: - LONG $0x6f7ec1c4; WORD $0x1714 // vmovdqu (%r15,%rdx), %ymm2 - LONG $0xd874edc5 // vpcmpeqb %ymm0, %ymm2, %ymm3 - LONG $0xebd77dc5 // vpmovmskb %ymm3, %r13d - LONG $0xd174edc5 // vpcmpeqb %ymm1, %ymm2, %ymm2 - LONG $0xcad7fdc5 // vpmovmskb %ymm2, %ecx - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0xff8c850f; WORD $0xffff // jne LBB28_29, $-116(%rip) - WORD $0xc985 // testl %ecx, %ecx - LONG $0xff84850f; WORD $0xffff // jne LBB28_29, $-124(%rip) - WORD $0xff31 // xorl %edi, %edi - WORD $0x8545; BYTE $0xed // testl %r13d, %r13d - LONG $0xffb7840f; WORD $0xffff // je LBB28_30, $-73(%rip) - -LBB28_84: - LONG $0xc5bc0f49 // bsfq %r13, %rax - WORD $0x0149; BYTE $0xc7 // addq %rax, %r15 - WORD $0x0149; BYTE $0xd7 // addq %rdx, %r15 - -LBB28_85: - LONG $0x247c2b4c; BYTE $0x18 // subq $24(%rsp), %r15 - WORD $0xff49; BYTE $0xc7 // incq %r15 - WORD $0x894d; BYTE $0x3e // movq %r15, (%r14) - LONG $0xfffed4e9; BYTE $0xff // jmp LBB28_20, $-300(%rip) - -LBB28_34: - LONG $0x084f8b49 // movq $8(%r15), %rcx - WORD $0x2948; BYTE $0xd1 // subq %rdx, %rcx - WORD $0x0349; BYTE $0x17 // addq (%r15), %rdx - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - QUAD $0xfffffc9a056ffdc5 // vmovdqa $-870(%rip), %ymm0 /* LCPI28_7(%rip) */ - QUAD $0xfffffc720d6ffdc5 // vmovdqa $-910(%rip), %ymm1 /* LCPI28_6(%rip) */ - LONG $0xd276e9c5 // vpcmpeqd %xmm2, %xmm2, %xmm2 - QUAD $0xfffffce61d6ffdc5 // vmovdqa $-794(%rip), %ymm3 /* LCPI28_10(%rip) */ - QUAD $0xfffffc3e256ffdc5 // vmovdqa $-962(%rip), %ymm4 /* LCPI28_2(%rip) */ - LONG $0x573041c4; BYTE $0xc9 // vxorps %xmm9, %xmm9, %xmm9 - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x3145; BYTE $0xc0 // xorl %r8d, %r8d - WORD $0xf631 // xorl %esi, %esi - LONG $0x00001ce9; BYTE $0x00 // jmp LBB28_36, $28(%rip) - -LBB28_35: - LONG $0x3ffdc149 // sarq $63, %r13 - LONG $0xb80f49f3; BYTE $0xcb // popcntq %r11, %rcx - WORD $0x0149; BYTE $0xc8 // addq %rcx, %r8 - LONG $0x40c28348 // addq $64, %rdx - LONG $0x244c8b48; BYTE $0x18 // movq $24(%rsp), %rcx - LONG $0xc0c18348 // addq $-64, %rcx - WORD $0x894d; BYTE $0xe9 // movq %r13, %r9 - -LBB28_36: - LONG $0x40f98348 // cmpq $64, %rcx - LONG $0x244c8948; BYTE $0x18 // movq %rcx, $24(%rsp) - LONG $0x012d8c0f; WORD $0x0000 // jl LBB28_43, $301(%rip) - -LBB28_37: - LONG $0x3a6ffec5 // vmovdqu (%rdx), %ymm7 - LONG $0x726ffec5; BYTE $0x20 // vmovdqu $32(%rdx), %ymm6 - LONG $0xc07445c5 // vpcmpeqb %ymm0, %ymm7, %ymm8 - LONG $0xd77dc1c4; BYTE $0xc8 // vpmovmskb %ymm8, %ecx - LONG $0xc0744dc5 // vpcmpeqb %ymm0, %ymm6, %ymm8 - LONG $0xd77dc1c4; BYTE $0xf8 // vpmovmskb %ymm8, %edi - LONG $0x20e7c148 // shlq $32, %rdi - WORD $0x0948; BYTE $0xf9 // orq %rdi, %rcx - WORD $0x8948; BYTE $0xcf // movq %rcx, %rdi - WORD $0x094c; BYTE $0xd7 // orq %r10, %rdi - LONG $0x004b840f; WORD $0x0000 // je LBB28_39, $75(%rip) - WORD $0x894c; BYTE $0xd7 // movq %r10, %rdi - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x2148; BYTE $0xcf // andq %rcx, %rdi - LONG $0x3f2c8d4c // leaq (%rdi,%rdi), %r13 - WORD $0x094d; BYTE $0xd5 // orq %r10, %r13 - WORD $0x894d; BYTE $0xea // movq %r13, %r10 - QUAD $0xaaaaaaaaaaaabb48; WORD $0xaaaa // movabsq $-6148914691236517206, %rbx - WORD $0x3149; BYTE $0xda // xorq %rbx, %r10 - WORD $0x2148; BYTE $0xd9 // andq %rbx, %rcx - WORD $0x214c; BYTE $0xd1 // andq %r10, %rcx - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x0148; BYTE $0xf9 // addq %rdi, %rcx - LONG $0xc2920f41 // setb %r10b - WORD $0x0148; BYTE $0xc9 // addq %rcx, %rcx - QUAD $0x555555555555bf48; WORD $0x5555 // movabsq $6148914691236517205, %rdi - WORD $0x3148; BYTE $0xf9 // xorq %rdi, %rcx - WORD $0x214c; BYTE $0xe9 // andq %r13, %rcx - WORD $0xf748; BYTE $0xd1 // notq %rcx - LONG $0x00000ae9; BYTE $0x00 // jmp LBB28_40, $10(%rip) - -LBB28_39: - LONG $0xffc1c748; WORD $0xffff; BYTE $0xff // movq $-1, %rcx - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - -LBB28_40: - LONG $0xc1744dc5 // vpcmpeqb %ymm1, %ymm6, %ymm8 - LONG $0xd77dc1c4; BYTE $0xf8 // vpmovmskb %ymm8, %edi - LONG $0x20e7c148 // shlq $32, %rdi - LONG $0xc17445c5 // vpcmpeqb %ymm1, %ymm7, %ymm8 - LONG $0xd77dc1c4; BYTE $0xd8 // vpmovmskb %ymm8, %ebx - WORD $0x0948; BYTE $0xfb // orq %rdi, %rbx - WORD $0x2148; BYTE $0xcb // andq %rcx, %rbx - LONG $0x6ef9e1c4; BYTE $0xeb // vmovq %rbx, %xmm5 - LONG $0x4451e3c4; WORD $0x00ea // vpclmulqdq $0, %xmm2, %xmm5, %xmm5 - LONG $0x7ef9c1c4; BYTE $0xed // vmovq %xmm5, %r13 - WORD $0x314d; BYTE $0xcd // xorq %r9, %r13 - LONG $0xeb74c5c5 // vpcmpeqb %ymm3, %ymm7, %ymm5 - LONG $0xddd77dc5 // vpmovmskb %ymm5, %r11d - LONG $0xeb74cdc5 // vpcmpeqb %ymm3, %ymm6, %ymm5 - LONG $0xfdd7fdc5 // vpmovmskb %ymm5, %edi - LONG $0x20e7c148 // shlq $32, %rdi - WORD $0x0949; BYTE $0xfb // orq %rdi, %r11 - WORD $0x894d; BYTE $0xe9 // movq %r13, %r9 - WORD $0xf749; BYTE $0xd1 // notq %r9 - WORD $0x214d; BYTE $0xcb // andq %r9, %r11 - LONG $0xec74c5c5 // vpcmpeqb %ymm4, %ymm7, %ymm5 - LONG $0xfdd7fdc5 // vpmovmskb %ymm5, %edi - LONG $0xec74cdc5 // vpcmpeqb %ymm4, %ymm6, %ymm5 - LONG $0xddd7fdc5 // vpmovmskb %ymm5, %ebx - LONG $0x20e3c148 // shlq $32, %rbx - WORD $0x0948; BYTE $0xdf // orq %rbx, %rdi - WORD $0x214c; BYTE $0xcf // andq %r9, %rdi - LONG $0xfee3840f; WORD $0xffff // je LBB28_35, $-285(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB28_41: - LONG $0xff4f8d48 // leaq $-1(%rdi), %rcx - WORD $0x8948; BYTE $0xcb // movq %rcx, %rbx - WORD $0x214c; BYTE $0xdb // andq %r11, %rbx - LONG $0xb80f48f3; BYTE $0xdb // popcntq %rbx, %rbx - WORD $0x014c; BYTE $0xc3 // addq %r8, %rbx - WORD $0x3948; BYTE $0xf3 // cmpq %rsi, %rbx - LONG $0x0404860f; WORD $0x0000 // jbe LBB28_83, $1028(%rip) - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x2148; BYTE $0xcf // andq %rcx, %rdi - LONG $0xffd9850f; WORD $0xffff // jne LBB28_41, $-39(%rip) - LONG $0xfffea8e9; BYTE $0xff // jmp LBB28_35, $-344(%rip) - -LBB28_43: - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x044a8e0f; WORD $0x0000 // jle LBB28_88, $1098(%rip) - LONG $0x4c297cc5; WORD $0x4024 // vmovaps %ymm9, $64(%rsp) - LONG $0x4c297cc5; WORD $0x2024 // vmovaps %ymm9, $32(%rsp) - WORD $0xd189 // movl %edx, %ecx - LONG $0x0fffe181; WORD $0x0000 // andl $4095, %ecx - LONG $0x0fc1f981; WORD $0x0000 // cmpl $4033, %ecx - LONG $0xfeaa820f; WORD $0xffff // jb LBB28_37, $-342(%rip) - LONG $0x247c8348; WORD $0x2018 // cmpq $32, $24(%rsp) - LONG $0x0021820f; WORD $0x0000 // jb LBB28_47, $33(%rip) - LONG $0x2a10fcc5 // vmovups (%rdx), %ymm5 - LONG $0x6c29fcc5; WORD $0x2024 // vmovaps %ymm5, $32(%rsp) - LONG $0x20c28348 // addq $32, %rdx - LONG $0x244c8b48; BYTE $0x18 // movq $24(%rsp), %rcx - LONG $0xe0598d48 // leaq $-32(%rcx), %rbx - LONG $0x247c8d48; BYTE $0x40 // leaq $64(%rsp), %rdi - LONG $0x00000ae9; BYTE $0x00 // jmp LBB28_48, $10(%rip) - -LBB28_47: - LONG $0x247c8d48; BYTE $0x20 // leaq $32(%rsp), %rdi - LONG $0x245c8b48; BYTE $0x18 // movq $24(%rsp), %rbx - -LBB28_48: - LONG $0x10fb8348 // cmpq $16, %rbx - LONG $0x0058820f; WORD $0x0000 // jb LBB28_49, $88(%rip) - LONG $0x2a10f8c5 // vmovups (%rdx), %xmm5 - LONG $0x2f11f8c5 // vmovups %xmm5, (%rdi) - LONG $0x10c28348 // addq $16, %rdx - LONG $0x10c78348 // addq $16, %rdi - LONG $0xf0c38348 // addq $-16, %rbx - LONG $0x08fb8348 // cmpq $8, %rbx - LONG $0x0044830f; WORD $0x0000 // jae LBB28_54, $68(%rip) - -LBB28_50: - LONG $0x04fb8348 // cmpq $4, %rbx - LONG $0x00568c0f; WORD $0x0000 // jl LBB28_51, $86(%rip) - -LBB28_55: - WORD $0x0a8b // movl (%rdx), %ecx - WORD $0x0f89 // movl %ecx, (%rdi) - LONG $0x04c28348 // addq $4, %rdx - LONG $0x04c78348 // addq $4, %rdi - LONG $0xfcc38348 // addq $-4, %rbx - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0x0046830f; WORD $0x0000 // jae LBB28_56, $70(%rip) - -LBB28_52: - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - LONG $0x24548d48; BYTE $0x20 // leaq $32(%rsp), %rdx - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x0058850f; WORD $0x0000 // jne LBB28_57, $88(%rip) - LONG $0xfffe11e9; BYTE $0xff // jmp LBB28_37, $-495(%rip) - -LBB28_49: - LONG $0x08fb8348 // cmpq $8, %rbx - LONG $0xffbc820f; WORD $0xffff // jb LBB28_50, $-68(%rip) - -LBB28_54: - WORD $0x8b48; BYTE $0x0a // movq (%rdx), %rcx - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - LONG $0x08c28348 // addq $8, %rdx - LONG $0x08c78348 // addq $8, %rdi - LONG $0xf8c38348 // addq $-8, %rbx - LONG $0x04fb8348 // cmpq $4, %rbx - LONG $0xffaa8d0f; WORD $0xffff // jge LBB28_55, $-86(%rip) - -LBB28_51: - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0xffba820f; WORD $0xffff // jb LBB28_52, $-70(%rip) - -LBB28_56: - WORD $0xb70f; BYTE $0x0a // movzwl (%rdx), %ecx - WORD $0x8966; BYTE $0x0f // movw %cx, (%rdi) - LONG $0x02c28348 // addq $2, %rdx - LONG $0x02c78348 // addq $2, %rdi - LONG $0xfec38348 // addq $-2, %rbx - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - LONG $0x24548d48; BYTE $0x20 // leaq $32(%rsp), %rdx - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0xfdbe840f; WORD $0xffff // je LBB28_37, $-578(%rip) - -LBB28_57: - WORD $0x098a // movb (%rcx), %cl - WORD $0x0f88 // movb %cl, (%rdi) - LONG $0x24548d48; BYTE $0x20 // leaq $32(%rsp), %rdx - LONG $0xfffdb0e9; BYTE $0xff // jmp LBB28_37, $-592(%rip) - -LBB28_58: - LONG $0x04c28348 // addq $4, %rdx - LONG $0x08573b49 // cmpq $8(%r15), %rdx - LONG $0xfc05860f; WORD $0xffff // jbe LBB28_19, $-1019(%rip) - LONG $0xfffc06e9; BYTE $0xff // jmp LBB28_21, $-1018(%rip) - -LBB28_59: - LONG $0x084f8b49 // movq $8(%r15), %rcx - WORD $0x2948; BYTE $0xd1 // subq %rdx, %rcx - WORD $0x0349; BYTE $0x17 // addq (%r15), %rdx - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - QUAD $0xfffff9c9056ffdc5 // vmovdqa $-1591(%rip), %ymm0 /* LCPI28_7(%rip) */ - QUAD $0xfffff9a10d6ffdc5 // vmovdqa $-1631(%rip), %ymm1 /* LCPI28_6(%rip) */ - LONG $0xd276e9c5 // vpcmpeqd %xmm2, %xmm2, %xmm2 - QUAD $0xfffff9d51d6ffdc5 // vmovdqa $-1579(%rip), %ymm3 /* LCPI28_8(%rip) */ - QUAD $0xfffff9ed256ffdc5 // vmovdqa $-1555(%rip), %ymm4 /* LCPI28_9(%rip) */ - LONG $0x573041c4; BYTE $0xc9 // vxorps %xmm9, %xmm9, %xmm9 - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x3145; BYTE $0xc0 // xorl %r8d, %r8d - WORD $0xf631 // xorl %esi, %esi - LONG $0x00001ce9; BYTE $0x00 // jmp LBB28_61, $28(%rip) - -LBB28_60: - LONG $0x3ffdc149 // sarq $63, %r13 - LONG $0xb80f49f3; BYTE $0xcb // popcntq %r11, %rcx - WORD $0x0149; BYTE $0xc8 // addq %rcx, %r8 - LONG $0x40c28348 // addq $64, %rdx - LONG $0x244c8b48; BYTE $0x18 // movq $24(%rsp), %rcx - LONG $0xc0c18348 // addq $-64, %rcx - WORD $0x894d; BYTE $0xe9 // movq %r13, %r9 - -LBB28_61: - LONG $0x40f98348 // cmpq $64, %rcx - LONG $0x244c8948; BYTE $0x18 // movq %rcx, $24(%rsp) - LONG $0x012c8c0f; WORD $0x0000 // jl LBB28_68, $300(%rip) - -LBB28_62: - LONG $0x3a6ffec5 // vmovdqu (%rdx), %ymm7 - LONG $0x726ffec5; BYTE $0x20 // vmovdqu $32(%rdx), %ymm6 - LONG $0xc07445c5 // vpcmpeqb %ymm0, %ymm7, %ymm8 - LONG $0xd77dc1c4; BYTE $0xc8 // vpmovmskb %ymm8, %ecx - LONG $0xc0744dc5 // vpcmpeqb %ymm0, %ymm6, %ymm8 - LONG $0xd77dc1c4; BYTE $0xf8 // vpmovmskb %ymm8, %edi - LONG $0x20e7c148 // shlq $32, %rdi - WORD $0x0948; BYTE $0xf9 // orq %rdi, %rcx - WORD $0x8948; BYTE $0xcf // movq %rcx, %rdi - WORD $0x094c; BYTE $0xd7 // orq %r10, %rdi - LONG $0x004b840f; WORD $0x0000 // je LBB28_64, $75(%rip) - WORD $0x894c; BYTE $0xd7 // movq %r10, %rdi - WORD $0xf748; BYTE $0xd7 // notq %rdi - WORD $0x2148; BYTE $0xcf // andq %rcx, %rdi - LONG $0x3f2c8d4c // leaq (%rdi,%rdi), %r13 - WORD $0x094d; BYTE $0xd5 // orq %r10, %r13 - WORD $0x894d; BYTE $0xea // movq %r13, %r10 - QUAD $0xaaaaaaaaaaaabb48; WORD $0xaaaa // movabsq $-6148914691236517206, %rbx - WORD $0x3149; BYTE $0xda // xorq %rbx, %r10 - WORD $0x2148; BYTE $0xd9 // andq %rbx, %rcx - WORD $0x214c; BYTE $0xd1 // andq %r10, %rcx - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x0148; BYTE $0xf9 // addq %rdi, %rcx - LONG $0xc2920f41 // setb %r10b - WORD $0x0148; BYTE $0xc9 // addq %rcx, %rcx - QUAD $0x555555555555bf48; WORD $0x5555 // movabsq $6148914691236517205, %rdi - WORD $0x3148; BYTE $0xf9 // xorq %rdi, %rcx - WORD $0x214c; BYTE $0xe9 // andq %r13, %rcx - WORD $0xf748; BYTE $0xd1 // notq %rcx - LONG $0x00000ae9; BYTE $0x00 // jmp LBB28_65, $10(%rip) - -LBB28_64: - LONG $0xffc1c748; WORD $0xffff; BYTE $0xff // movq $-1, %rcx - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - -LBB28_65: - LONG $0xc1744dc5 // vpcmpeqb %ymm1, %ymm6, %ymm8 - LONG $0xd77dc1c4; BYTE $0xf8 // vpmovmskb %ymm8, %edi - LONG $0x20e7c148 // shlq $32, %rdi - LONG $0xc17445c5 // vpcmpeqb %ymm1, %ymm7, %ymm8 - LONG $0xd77dc1c4; BYTE $0xd8 // vpmovmskb %ymm8, %ebx - WORD $0x0948; BYTE $0xfb // orq %rdi, %rbx - WORD $0x2148; BYTE $0xcb // andq %rcx, %rbx - LONG $0x6ef9e1c4; BYTE $0xeb // vmovq %rbx, %xmm5 - LONG $0x4451e3c4; WORD $0x00ea // vpclmulqdq $0, %xmm2, %xmm5, %xmm5 - LONG $0x7ef9c1c4; BYTE $0xed // vmovq %xmm5, %r13 - WORD $0x314d; BYTE $0xcd // xorq %r9, %r13 - LONG $0xeb74c5c5 // vpcmpeqb %ymm3, %ymm7, %ymm5 - LONG $0xddd77dc5 // vpmovmskb %ymm5, %r11d - LONG $0xeb74cdc5 // vpcmpeqb %ymm3, %ymm6, %ymm5 - LONG $0xfdd7fdc5 // vpmovmskb %ymm5, %edi - LONG $0x20e7c148 // shlq $32, %rdi - WORD $0x0949; BYTE $0xfb // orq %rdi, %r11 - WORD $0x894d; BYTE $0xe9 // movq %r13, %r9 - WORD $0xf749; BYTE $0xd1 // notq %r9 - WORD $0x214d; BYTE $0xcb // andq %r9, %r11 - LONG $0xec74c5c5 // vpcmpeqb %ymm4, %ymm7, %ymm5 - LONG $0xfdd7fdc5 // vpmovmskb %ymm5, %edi - LONG $0xec74cdc5 // vpcmpeqb %ymm4, %ymm6, %ymm5 - LONG $0xddd7fdc5 // vpmovmskb %ymm5, %ebx - LONG $0x20e3c148 // shlq $32, %rbx - WORD $0x0948; BYTE $0xdf // orq %rbx, %rdi - WORD $0x214c; BYTE $0xcf // andq %r9, %rdi - LONG $0xfee3840f; WORD $0xffff // je LBB28_60, $-285(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB28_66: - LONG $0xff4f8d48 // leaq $-1(%rdi), %rcx - WORD $0x8948; BYTE $0xcb // movq %rcx, %rbx - WORD $0x214c; BYTE $0xdb // andq %r11, %rbx - LONG $0xb80f48f3; BYTE $0xdb // popcntq %rbx, %rbx - WORD $0x014c; BYTE $0xc3 // addq %r8, %rbx - WORD $0x3948; BYTE $0xf3 // cmpq %rsi, %rbx - LONG $0x0134860f; WORD $0x0000 // jbe LBB28_83, $308(%rip) - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x2148; BYTE $0xcf // andq %rcx, %rdi - LONG $0xffd9850f; WORD $0xffff // jne LBB28_66, $-39(%rip) - LONG $0xfffea9e9; BYTE $0xff // jmp LBB28_60, $-343(%rip) - -LBB28_68: - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x017a8e0f; WORD $0x0000 // jle LBB28_88, $378(%rip) - LONG $0x4c297cc5; WORD $0x4024 // vmovaps %ymm9, $64(%rsp) - LONG $0x4c297cc5; WORD $0x2024 // vmovaps %ymm9, $32(%rsp) - WORD $0xd189 // movl %edx, %ecx - LONG $0x0fffe181; WORD $0x0000 // andl $4095, %ecx - LONG $0x0fc1f981; WORD $0x0000 // cmpl $4033, %ecx - LONG $0xfeab820f; WORD $0xffff // jb LBB28_62, $-341(%rip) - LONG $0x247c8348; WORD $0x2018 // cmpq $32, $24(%rsp) - LONG $0x0021820f; WORD $0x0000 // jb LBB28_72, $33(%rip) - LONG $0x2a10fcc5 // vmovups (%rdx), %ymm5 - LONG $0x6c29fcc5; WORD $0x2024 // vmovaps %ymm5, $32(%rsp) - LONG $0x20c28348 // addq $32, %rdx - LONG $0x244c8b48; BYTE $0x18 // movq $24(%rsp), %rcx - LONG $0xe0598d48 // leaq $-32(%rcx), %rbx - LONG $0x247c8d48; BYTE $0x40 // leaq $64(%rsp), %rdi - LONG $0x00000ae9; BYTE $0x00 // jmp LBB28_73, $10(%rip) - -LBB28_72: - LONG $0x247c8d48; BYTE $0x20 // leaq $32(%rsp), %rdi - LONG $0x245c8b48; BYTE $0x18 // movq $24(%rsp), %rbx - -LBB28_73: - LONG $0x10fb8348 // cmpq $16, %rbx - LONG $0x0058820f; WORD $0x0000 // jb LBB28_74, $88(%rip) - LONG $0x2a10f8c5 // vmovups (%rdx), %xmm5 - LONG $0x2f11f8c5 // vmovups %xmm5, (%rdi) - LONG $0x10c28348 // addq $16, %rdx - LONG $0x10c78348 // addq $16, %rdi - LONG $0xf0c38348 // addq $-16, %rbx - LONG $0x08fb8348 // cmpq $8, %rbx - LONG $0x0044830f; WORD $0x0000 // jae LBB28_79, $68(%rip) - -LBB28_75: - LONG $0x04fb8348 // cmpq $4, %rbx - LONG $0x00568c0f; WORD $0x0000 // jl LBB28_76, $86(%rip) - -LBB28_80: - WORD $0x0a8b // movl (%rdx), %ecx - WORD $0x0f89 // movl %ecx, (%rdi) - LONG $0x04c28348 // addq $4, %rdx - LONG $0x04c78348 // addq $4, %rdi - LONG $0xfcc38348 // addq $-4, %rbx - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0x0046830f; WORD $0x0000 // jae LBB28_81, $70(%rip) - -LBB28_77: - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - LONG $0x24548d48; BYTE $0x20 // leaq $32(%rsp), %rdx - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x0058850f; WORD $0x0000 // jne LBB28_82, $88(%rip) - LONG $0xfffe12e9; BYTE $0xff // jmp LBB28_62, $-494(%rip) - -LBB28_74: - LONG $0x08fb8348 // cmpq $8, %rbx - LONG $0xffbc820f; WORD $0xffff // jb LBB28_75, $-68(%rip) - -LBB28_79: - WORD $0x8b48; BYTE $0x0a // movq (%rdx), %rcx - WORD $0x8948; BYTE $0x0f // movq %rcx, (%rdi) - LONG $0x08c28348 // addq $8, %rdx - LONG $0x08c78348 // addq $8, %rdi - LONG $0xf8c38348 // addq $-8, %rbx - LONG $0x04fb8348 // cmpq $4, %rbx - LONG $0xffaa8d0f; WORD $0xffff // jge LBB28_80, $-86(%rip) - -LBB28_76: - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0xffba820f; WORD $0xffff // jb LBB28_77, $-70(%rip) - -LBB28_81: - WORD $0xb70f; BYTE $0x0a // movzwl (%rdx), %ecx - WORD $0x8966; BYTE $0x0f // movw %cx, (%rdi) - LONG $0x02c28348 // addq $2, %rdx - LONG $0x02c78348 // addq $2, %rdi - LONG $0xfec38348 // addq $-2, %rbx - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - LONG $0x24548d48; BYTE $0x20 // leaq $32(%rsp), %rdx - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0xfdbf840f; WORD $0xffff // je LBB28_62, $-577(%rip) - -LBB28_82: - WORD $0x098a // movb (%rcx), %cl - WORD $0x0f88 // movb %cl, (%rdi) - LONG $0x24548d48; BYTE $0x20 // leaq $32(%rsp), %rdx - LONG $0xfffdb1e9; BYTE $0xff // jmp LBB28_62, $-591(%rip) - -LBB28_83: - LONG $0x08478b49 // movq $8(%r15), %rax - LONG $0xcfbc0f48 // bsfq %rdi, %rcx - LONG $0x244c2b48; BYTE $0x18 // subq $24(%rsp), %rcx - LONG $0x01448d48; BYTE $0x01 // leaq $1(%rcx,%rax), %rax - WORD $0x8949; BYTE $0x06 // movq %rax, (%r14) - LONG $0x084f8b49 // movq $8(%r15), %rcx - WORD $0x3948; BYTE $0xc8 // cmpq %rcx, %rax - LONG $0xc1470f48 // cmovaq %rcx, %rax - WORD $0x8949; BYTE $0x06 // movq %rax, (%r14) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xe0470f4c // cmovaq %rax, %r12 - LONG $0xfff913e9; BYTE $0xff // jmp LBB28_20, $-1773(%rip) - -LBB28_86: - WORD $0xb70f; BYTE $0xce // movzwl %si, %ecx - LONG $0xfff8fee9; BYTE $0xff // jmp LBB28_18, $-1794(%rip) - -LBB28_31: - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0x0028850f; WORD $0x0000 // jne LBB28_89, $40(%rip) - WORD $0x0149; BYTE $0xd7 // addq %rdx, %r15 - WORD $0x2949; BYTE $0xd3 // subq %rdx, %r11 - -LBB28_33: - WORD $0x854d; BYTE $0xdb // testq %r11, %r11 - LONG $0x005a8f0f; WORD $0x0000 // jg LBB28_93, $90(%rip) - LONG $0xfff8f1e9; BYTE $0xff // jmp LBB28_21, $-1807(%rip) - -LBB28_87: - WORD $0x2948; BYTE $0xc2 // subq %rax, %rdx - LONG $0xfff8e3e9; BYTE $0xff // jmp LBB28_19, $-1821(%rip) - -LBB28_88: - LONG $0x084f8b49 // movq $8(%r15), %rcx - WORD $0x8949; BYTE $0x0e // movq %rcx, (%r14) - LONG $0xfff8dde9; BYTE $0xff // jmp LBB28_21, $-1827(%rip) - -LBB28_89: - WORD $0x3949; BYTE $0xd3 // cmpq %rdx, %r11 - LONG $0xf8d4840f; WORD $0xffff // je LBB28_21, $-1836(%rip) - LONG $0x177c8d4d; BYTE $0x01 // leaq $1(%r15,%rdx), %r15 - WORD $0xf748; BYTE $0xd2 // notq %rdx - WORD $0x0149; BYTE $0xd3 // addq %rdx, %r11 - WORD $0x854d; BYTE $0xdb // testq %r11, %r11 - LONG $0x00248f0f; WORD $0x0000 // jg LBB28_93, $36(%rip) - LONG $0xfff8bbe9; BYTE $0xff // jmp LBB28_21, $-1861(%rip) - -LBB28_91: - LONG $0xfec2c748; WORD $0xffff; BYTE $0xff // movq $-2, %rdx - LONG $0x000002b8; BYTE $0x00 // movl $2, %eax - WORD $0x0149; BYTE $0xc7 // addq %rax, %r15 - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x0149; BYTE $0xd3 // addq %rdx, %r11 - LONG $0xf89c8e0f; WORD $0xffff // jle LBB28_21, $-1892(%rip) - -LBB28_93: - LONG $0x07b60f41 // movzbl (%r15), %eax - WORD $0x5c3c // cmpb $92, %al - LONG $0xffd5840f; WORD $0xffff // je LBB28_91, $-43(%rip) - WORD $0x223c // cmpb $34, %al - LONG $0xf9a1840f; WORD $0xffff // je LBB28_85, $-1631(%rip) - LONG $0xffc2c748; WORD $0xffff; BYTE $0xff // movq $-1, %rdx - LONG $0x000001b8; BYTE $0x00 // movl $1, %eax - WORD $0x0149; BYTE $0xc7 // addq %rax, %r15 - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x0149; BYTE $0xd3 // addq %rdx, %r11 - LONG $0xffcd8f0f; WORD $0xffff // jg LBB28_93, $-51(%rip) - LONG $0xfff864e9; BYTE $0xff // jmp LBB28_21, $-1948(%rip) - - // .p2align 2, 0x90 - // .set L28_0_set_21, LBB28_21-LJTI28_0 - // .set L28_0_set_23, LBB28_23-LJTI28_0 - // .set L28_0_set_24, LBB28_24-LJTI28_0 - // .set L28_0_set_2, LBB28_2-LJTI28_0 - // .set L28_0_set_34, LBB28_34-LJTI28_0 - // .set L28_0_set_58, LBB28_58-LJTI28_0 - // .set L28_0_set_22, LBB28_22-LJTI28_0 - // .set L28_0_set_59, LBB28_59-LJTI28_0 -LJTI28_0: - LONG $0xfffff864 // .long L28_0_set_21 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff898 // .long L28_0_set_24 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff743 // .long L28_0_set_2 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff743 // .long L28_0_set_2 - LONG $0xfffff743 // .long L28_0_set_2 - LONG $0xfffff743 // .long L28_0_set_2 - LONG $0xfffff743 // .long L28_0_set_2 - LONG $0xfffff743 // .long L28_0_set_2 - LONG $0xfffff743 // .long L28_0_set_2 - LONG $0xfffff743 // .long L28_0_set_2 - LONG $0xfffff743 // .long L28_0_set_2 - LONG $0xfffff743 // .long L28_0_set_2 - LONG $0xfffff743 // .long L28_0_set_2 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff98d // .long L28_0_set_34 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffffc4b // .long L28_0_set_58 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff876 // .long L28_0_set_22 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff876 // .long L28_0_set_22 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffff889 // .long L28_0_set_23 - LONG $0xfffffc5e // .long L28_0_set_59 - QUAD $0x0000000000000000; LONG $0x00000000 // .p2align 4, 0x00 - -LCPI29_0: - LONG $0x00000001 // .long 1 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - LONG $0x00000000 // .long 0 - - // .p2align 4, 0x90 -_get_by_path: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x28ec8348 // subq $40, %rsp - WORD $0x8949; BYTE $0xf7 // movq %rsi, %r15 - WORD $0x8949; BYTE $0xfd // movq %rdi, %r13 - LONG $0x08428b48 // movq $8(%rdx), %rax - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x06d1840f; WORD $0x0000 // je LBB29_93, $1745(%rip) - WORD $0x8b4c; BYTE $0x32 // movq (%rdx), %r14 - LONG $0x04e0c148 // shlq $4, %rax - WORD $0x014c; BYTE $0xf0 // addq %r14, %rax - LONG $0xb04d8948 // movq %rcx, $-80(%rbp) - LONG $0xb8458948 // movq %rax, $-72(%rbp) - -LBB29_2: - LONG $0x007d8b49 // movq (%r13), %rdi - LONG $0x08758b49 // movq $8(%r13), %rsi - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - LONG $0xffd1cae8; BYTE $0xff // callq _advance_ns, $-11830(%rip) - WORD $0x8b49; BYTE $0x0e // movq (%r14), %rcx - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x06fc840f; WORD $0x0000 // je LBB29_99, $1788(%rip) - WORD $0x498a; BYTE $0x17 // movb $23(%rcx), %cl - WORD $0xe180; BYTE $0x1f // andb $31, %cl - WORD $0xf980; BYTE $0x02 // cmpb $2, %cl - LONG $0x05ff840f; WORD $0x0000 // je LBB29_86, $1535(%rip) - WORD $0xf980; BYTE $0x18 // cmpb $24, %cl - LONG $0x06e4850f; WORD $0x0000 // jne LBB29_99, $1764(%rip) - WORD $0x7b3c // cmpb $123, %al - LONG $0xc875894c // movq %r14, $-56(%rbp) - LONG $0x06bf850f; WORD $0x0000 // jne LBB29_97, $1727(%rip) - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB29_6: - LONG $0x007d8b49 // movq (%r13), %rdi - LONG $0x08758b49 // movq $8(%r13), %rsi - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - LONG $0xffd180e8; BYTE $0xff // callq _advance_ns, $-11904(%rip) - WORD $0x223c // cmpb $34, %al - LONG $0x067e850f; WORD $0x0000 // jne LBB29_94, $1662(%rip) - LONG $0x08468b49 // movq $8(%r14), %rax - WORD $0x8b4c; BYTE $0x30 // movq (%rax), %r14 - LONG $0x08608b4c // movq $8(%rax), %r12 - QUAD $0xffffffffc045c748 // movq $-1, $-64(%rbp) - WORD $0x8b49; BYTE $0x1f // movq (%r15), %rbx - WORD $0x894c; BYTE $0xef // movq %r13, %rdi - WORD $0x8948; BYTE $0xde // movq %rbx, %rsi - LONG $0xc0558d48 // leaq $-64(%rbp), %rdx - LONG $0x0027f3e8; BYTE $0x00 // callq _advance_string_default, $10227(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0697880f; WORD $0x0000 // js LBB29_100, $1687(%rip) - WORD $0x8949; BYTE $0x07 // movq %rax, (%r15) - LONG $0xc04d8b48 // movq $-64(%rbp), %rcx - LONG $0xfff98348 // cmpq $-1, %rcx - LONG $0x0009840f; WORD $0x0000 // je LBB29_10, $9(%rip) - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0x01d48e0f; WORD $0x0000 // jle LBB29_40, $468(%rip) - -LBB29_10: - WORD $0x8948; BYTE $0xd9 // movq %rbx, %rcx - WORD $0xf748; BYTE $0xd1 // notq %rcx - WORD $0x0148; BYTE $0xc8 // addq %rcx, %rax - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x094c; BYTE $0xe1 // orq %r12, %rcx - LONG $0x008b840f; WORD $0x0000 // je LBB29_18, $139(%rip) - WORD $0x394c; BYTE $0xe0 // cmpq %r12, %rax - LONG $0x0092850f; WORD $0x0000 // jne LBB29_19, $146(%rip) - LONG $0x005d0349 // addq (%r13), %rbx - LONG $0x20fc8349 // cmpq $32, %r12 - LONG $0x0030820f; WORD $0x0000 // jb LBB29_15, $48(%rip) - LONG $0x90909090 // .p2align 4, 0x90 - -LBB29_13: - LONG $0x036ffec5 // vmovdqu (%rbx), %ymm0 - LONG $0x747dc1c4; BYTE $0x06 // vpcmpeqb (%r14), %ymm0, %ymm0 - LONG $0xc0d7fdc5 // vpmovmskb %ymm0, %eax - WORD $0xf883; BYTE $0xff // cmpl $-1, %eax - LONG $0x0139850f; WORD $0x0000 // jne LBB29_34, $313(%rip) - LONG $0x20c38348 // addq $32, %rbx - LONG $0x20c68349 // addq $32, %r14 - LONG $0xe0c48349 // addq $-32, %r12 - LONG $0x1ffc8349 // cmpq $31, %r12 - LONG $0xffd4870f; WORD $0xffff // ja LBB29_13, $-44(%rip) - -LBB29_15: - WORD $0xd889 // movl %ebx, %eax - LONG $0x000fff25; BYTE $0x00 // andl $4095, %eax - WORD $0x8944; BYTE $0xf1 // movl %r14d, %ecx - LONG $0x0fffe181; WORD $0x0000 // andl $4095, %ecx - LONG $0xe0f98148; WORD $0x000f; BYTE $0x00 // cmpq $4064, %rcx - LONG $0x003e870f; WORD $0x0000 // ja LBB29_20, $62(%rip) - LONG $0x000fe13d; BYTE $0x00 // cmpl $4065, %eax - LONG $0x0033830f; WORD $0x0000 // jae LBB29_20, $51(%rip) - LONG $0x036ffec5 // vmovdqu (%rbx), %ymm0 - LONG $0x747dc1c4; BYTE $0x06 // vpcmpeqb (%r14), %ymm0, %ymm0 - LONG $0xc0d7fdc5 // vpmovmskb %ymm0, %eax - WORD $0xf883; BYTE $0xff // cmpl $-1, %eax - WORD $0x940f; BYTE $0xc1 // sete %cl - WORD $0xd0f7 // notl %eax - LONG $0x00009fe9; BYTE $0x00 // jmp LBB29_27, $159(%rip) - WORD $0x9090 // .p2align 4, 0x90 - -LBB29_18: - LONG $0x000001bb; BYTE $0x00 // movl $1, %ebx - LONG $0x0000dae9; BYTE $0x00 // jmp LBB29_36, $218(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB29_19: - WORD $0xdb31 // xorl %ebx, %ebx - LONG $0x0000cde9; BYTE $0x00 // jmp LBB29_36, $205(%rip) - -LBB29_20: - LONG $0x10fc8349 // cmpq $16, %r12 - LONG $0x004c820f; WORD $0x0000 // jb LBB29_24, $76(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB29_21: - LONG $0x036ffac5 // vmovdqu (%rbx), %xmm0 - LONG $0x7479c1c4; BYTE $0x06 // vpcmpeqb (%r14), %xmm0, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - LONG $0xfff88366 // cmpw $-1, %ax - LONG $0x0098850f; WORD $0x0000 // jne LBB29_34, $152(%rip) - LONG $0x10c38348 // addq $16, %rbx - LONG $0x10c68349 // addq $16, %r14 - LONG $0xf0c48349 // addq $-16, %r12 - LONG $0x0ffc8349 // cmpq $15, %r12 - LONG $0xffd3870f; WORD $0xffff // ja LBB29_21, $-45(%rip) - WORD $0xd889 // movl %ebx, %eax - LONG $0x000fff25; BYTE $0x00 // andl $4095, %eax - WORD $0x8944; BYTE $0xf1 // movl %r14d, %ecx - LONG $0x0fffe181; WORD $0x0000 // andl $4095, %ecx - -LBB29_24: - LONG $0x0ff0f981; WORD $0x0000 // cmpl $4080, %ecx - LONG $0x0035870f; WORD $0x0000 // ja LBB29_29, $53(%rip) - LONG $0x000ff13d; BYTE $0x00 // cmpl $4081, %eax - LONG $0x002a830f; WORD $0x0000 // jae LBB29_29, $42(%rip) - LONG $0x036ffac5 // vmovdqu (%rbx), %xmm0 - LONG $0x7479c1c4; BYTE $0x06 // vpcmpeqb (%r14), %xmm0, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - LONG $0xfff88366 // cmpw $-1, %ax - WORD $0x940f; BYTE $0xc1 // sete %cl - WORD $0xd0f7 // notl %eax - WORD $0xb70f; BYTE $0xc0 // movzwl %ax, %eax - -LBB29_27: - LONG $0xc0bc0f48 // bsfq %rax, %rax - WORD $0x394c; BYTE $0xe0 // cmpq %r12, %rax - WORD $0x930f; BYTE $0xc0 // setae %al - WORD $0xc808 // orb %cl, %al - LONG $0x000033e9; BYTE $0x00 // jmp LBB29_35, $51(%rip) - -LBB29_29: - WORD $0x01b0 // movb $1, %al - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x0028840f; WORD $0x0000 // je LBB29_35, $40(%rip) - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB29_31: - LONG $0x0b14b60f // movzbl (%rbx,%rcx), %edx - LONG $0x0e143a41 // cmpb (%r14,%rcx), %dl - LONG $0x0011850f; WORD $0x0000 // jne LBB29_34, $17(%rip) - WORD $0xff48; BYTE $0xc1 // incq %rcx - WORD $0x3949; BYTE $0xcc // cmpq %rcx, %r12 - LONG $0xffe6850f; WORD $0xffff // jne LBB29_31, $-26(%rip) - LONG $0x000002e9; BYTE $0x00 // jmp LBB29_35, $2(%rip) - -LBB29_34: - WORD $0xc031 // xorl %eax, %eax - -LBB29_35: - WORD $0xb60f; BYTE $0xd8 // movzbl %al, %ebx - -LBB29_36: - LONG $0xc8758b4c // movq $-56(%rbp), %r14 - LONG $0x007d8b49 // movq (%r13), %rdi - -LBB29_37: - LONG $0x08758b49 // movq $8(%r13), %rsi - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0xffcf95e8; BYTE $0xff // callq _advance_ns, $-12395(%rip) - WORD $0x3a3c // cmpb $58, %al - LONG $0x04b2850f; WORD $0x0000 // jne LBB29_97, $1202(%rip) - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x0454850f; WORD $0x0000 // jne LBB29_92, $1108(%rip) - WORD $0x894c; BYTE $0xef // movq %r13, %rdi - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - LONG $0xfff249e8; BYTE $0xff // callq _skip_one_fast, $-3511(%rip) - LONG $0x007d8b49 // movq (%r13), %rdi - LONG $0x08758b49 // movq $8(%r13), %rsi - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - LONG $0xffcf69e8; BYTE $0xff // callq _advance_ns, $-12439(%rip) - WORD $0x2c3c // cmpb $44, %al - LONG $0xfdd1840f; WORD $0xffff // je LBB29_6, $-559(%rip) - LONG $0x000462e9; BYTE $0x00 // jmp LBB29_94, $1122(%rip) - -LBB29_40: - QUAD $0x00000000d045c748 // movq $0, $-48(%rbp) - LONG $0x007d8b49 // movq (%r13), %rdi - WORD $0x0148; BYTE $0xfb // addq %rdi, %rbx - LONG $0x07448d4c; BYTE $0xff // leaq $-1(%rdi,%rax), %r8 - LONG $0x26148d4f // leaq (%r14,%r12), %r10 - WORD $0x854d; BYTE $0xe4 // testq %r12, %r12 - LONG $0x03638e0f; WORD $0x0000 // jle LBB29_84, $867(%rip) - WORD $0x3949; BYTE $0xd8 // cmpq %rbx, %r8 - LONG $0x035a860f; WORD $0x0000 // jbe LBB29_84, $858(%rip) - -LBB29_42: - WORD $0x038a // movb (%rbx), %al - WORD $0x5c3c // cmpb $92, %al - LONG $0x0058850f; WORD $0x0000 // jne LBB29_47, $88(%rip) - WORD $0x894c; BYTE $0xc1 // movq %r8, %rcx - WORD $0x2948; BYTE $0xd9 // subq %rbx, %rcx - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x04948e0f; WORD $0x0000 // jle LBB29_104, $1172(%rip) - LONG $0x0153b60f // movzbl $1(%rbx), %edx - LONG $0x17358d48; WORD $0x009d; BYTE $0x00 // leaq $40215(%rip), %rsi /* __UnquoteTab(%rip) */ - LONG $0x321c8a44 // movb (%rdx,%rsi), %r11b - LONG $0xfffb8041 // cmpb $-1, %r11b - LONG $0x003d840f; WORD $0x0000 // je LBB29_49, $61(%rip) - WORD $0x8445; BYTE $0xdb // testb %r11b, %r11b - LONG $0x0460840f; WORD $0x0000 // je LBB29_102, $1120(%rip) - LONG $0xd05d8844 // movb %r11b, $-48(%rbp) - LONG $0x02c38348 // addq $2, %rbx - LONG $0x000001b9; BYTE $0x00 // movl $1, %ecx - LONG $0x0d4c8d4c; BYTE $0xd0 // leaq $-48(%rbp,%rcx), %r9 - WORD $0x394d; BYTE $0xd6 // cmpq %r10, %r14 - LONG $0x012c820f; WORD $0x0000 // jb LBB29_60, $300(%rip) - LONG $0x0002d9e9; BYTE $0x00 // jmp LBB29_68, $729(%rip) - -LBB29_47: - WORD $0x3a41; BYTE $0x06 // cmpb (%r14), %al - LONG $0x0306850f; WORD $0x0000 // jne LBB29_85, $774(%rip) - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0xff49; BYTE $0xc6 // incq %r14 - LONG $0x0002d2e9; BYTE $0x00 // jmp LBB29_70, $722(%rip) - -LBB29_49: - LONG $0x03f98348 // cmpq $3, %rcx - LONG $0x04318e0f; WORD $0x0000 // jle LBB29_103, $1073(%rip) - WORD $0x438b; BYTE $0x02 // movl $2(%rbx), %eax - WORD $0xc289 // movl %eax, %edx - WORD $0xd2f7 // notl %edx - LONG $0xcfd0b08d; WORD $0xcfcf // leal $-808464432(%rax), %esi - LONG $0x8080e281; WORD $0x8080 // andl $-2139062144, %edx - WORD $0xf285 // testl %esi, %edx - LONG $0x03f7850f; WORD $0x0000 // jne LBB29_101, $1015(%rip) - LONG $0x1919b08d; WORD $0x1919 // leal $421075225(%rax), %esi - WORD $0xc609 // orl %eax, %esi - LONG $0x8080c6f7; WORD $0x8080 // testl $-2139062144, %esi - LONG $0x03e3850f; WORD $0x0000 // jne LBB29_101, $995(%rip) - WORD $0xc689 // movl %eax, %esi - LONG $0x7f7fe681; WORD $0x7f7f // andl $2139062143, %esi - LONG $0xc0c0b941; WORD $0xc0c0 // movl $-1061109568, %r9d - WORD $0x2941; BYTE $0xf1 // subl %esi, %r9d - LONG $0x469e8d44; WORD $0x4646; BYTE $0x46 // leal $1179010630(%rsi), %r11d - WORD $0x2141; BYTE $0xd1 // andl %edx, %r9d - WORD $0x8545; BYTE $0xd9 // testl %r11d, %r9d - LONG $0x03bf850f; WORD $0x0000 // jne LBB29_101, $959(%rip) - LONG $0xe0e0b941; WORD $0xe0e0 // movl $-522133280, %r9d - WORD $0x2941; BYTE $0xf1 // subl %esi, %r9d - LONG $0x3939c681; WORD $0x3939 // addl $960051513, %esi - WORD $0x2144; BYTE $0xca // andl %r9d, %edx - WORD $0xf285 // testl %esi, %edx - LONG $0x03a5850f; WORD $0x0000 // jne LBB29_101, $933(%rip) - WORD $0xc80f // bswapl %eax - WORD $0xc289 // movl %eax, %edx - WORD $0xeac1; BYTE $0x04 // shrl $4, %edx - WORD $0xd2f7 // notl %edx - LONG $0x0101e281; WORD $0x0101 // andl $16843009, %edx - WORD $0x148d; BYTE $0xd2 // leal (%rdx,%rdx,8), %edx - LONG $0x0f0f0f25; BYTE $0x0f // andl $252645135, %eax - WORD $0xd001 // addl %edx, %eax - WORD $0x8941; BYTE $0xc3 // movl %eax, %r11d - LONG $0x04ebc141 // shrl $4, %r11d - WORD $0x0941; BYTE $0xc3 // orl %eax, %r11d - WORD $0x8944; BYTE $0xde // movl %r11d, %esi - WORD $0xeec1; BYTE $0x08 // shrl $8, %esi - LONG $0xff00e681; WORD $0x0000 // andl $65280, %esi - LONG $0xc3b60f41 // movzbl %r11b, %eax - WORD $0xf009 // orl %esi, %eax - LONG $0x064b8d4c // leaq $6(%rbx), %r9 - WORD $0xf883; BYTE $0x7f // cmpl $127, %eax - LONG $0x00ab860f; WORD $0x0000 // jbe LBB29_72, $171(%rip) - LONG $0x0007ff3d; BYTE $0x00 // cmpl $2047, %eax - LONG $0x00ae860f; WORD $0x0000 // jbe LBB29_73, $174(%rip) - WORD $0x8944; BYTE $0xda // movl %r11d, %edx - LONG $0x0000e281; WORD $0x00f8 // andl $16252928, %edx - LONG $0x0000fa81; WORD $0x00d8 // cmpl $14155776, %edx - LONG $0x00ba840f; WORD $0x0000 // je LBB29_74, $186(%rip) - WORD $0xeec1; BYTE $0x0c // shrl $12, %esi - LONG $0xe0ce8040 // orb $-32, %sil - LONG $0xd0758840 // movb %sil, $-48(%rbp) - WORD $0xe8c1; BYTE $0x06 // shrl $6, %eax - WORD $0x3f24 // andb $63, %al - WORD $0x800c // orb $-128, %al - WORD $0x4588; BYTE $0xd1 // movb %al, $-47(%rbp) - LONG $0x3fe38041 // andb $63, %r11b - LONG $0x80cb8041 // orb $-128, %r11b - LONG $0xd25d8844 // movb %r11b, $-46(%rbp) - LONG $0x000003b9; BYTE $0x00 // movl $3, %ecx - WORD $0x8941; BYTE $0xf3 // movl %esi, %r11d - -LBB29_58: - WORD $0x894c; BYTE $0xcb // movq %r9, %rbx - LONG $0x0d4c8d4c; BYTE $0xd0 // leaq $-48(%rbp,%rcx), %r9 - WORD $0x394d; BYTE $0xd6 // cmpq %r10, %r14 - LONG $0x01b2830f; WORD $0x0000 // jae LBB29_68, $434(%rip) - -LBB29_60: - LONG $0xd0458d48 // leaq $-48(%rbp), %rax - WORD $0x3949; BYTE $0xc1 // cmpq %rax, %r9 - LONG $0x01a5860f; WORD $0x0000 // jbe LBB29_68, $421(%rip) - WORD $0x3845; BYTE $0x1e // cmpb %r11b, (%r14) - LONG $0x019c850f; WORD $0x0000 // jne LBB29_68, $412(%rip) - WORD $0xff49; BYTE $0xc6 // incq %r14 - LONG $0xd1558d48 // leaq $-47(%rbp), %rdx - WORD $0x894c; BYTE $0xf6 // movq %r14, %rsi - -LBB29_63: - WORD $0x8949; BYTE $0xf6 // movq %rsi, %r14 - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - WORD $0x394c; BYTE $0xca // cmpq %r9, %rdx - LONG $0x0187830f; WORD $0x0000 // jae LBB29_69, $391(%rip) - WORD $0x394d; BYTE $0xd6 // cmpq %r10, %r14 - LONG $0x017e830f; WORD $0x0000 // jae LBB29_69, $382(%rip) - LONG $0x06b60f41 // movzbl (%r14), %eax - LONG $0x01768d49 // leaq $1(%r14), %rsi - LONG $0x01518d48 // leaq $1(%rcx), %rdx - WORD $0x013a // cmpb (%rcx), %al - LONG $0xffd4840f; WORD $0xffff // je LBB29_63, $-44(%rip) - LONG $0x000165e9; BYTE $0x00 // jmp LBB29_69, $357(%rip) - -LBB29_72: - LONG $0xd05d8844 // movb %r11b, $-48(%rbp) - LONG $0x000001b9; BYTE $0x00 // movl $1, %ecx - LONG $0xffff90e9; BYTE $0xff // jmp LBB29_58, $-112(%rip) - -LBB29_73: - WORD $0xe8c1; BYTE $0x06 // shrl $6, %eax - WORD $0xc00c // orb $-64, %al - WORD $0x4588; BYTE $0xd0 // movb %al, $-48(%rbp) - LONG $0x3fe38041 // andb $63, %r11b - LONG $0x80cb8041 // orb $-128, %r11b - LONG $0xd15d8844 // movb %r11b, $-47(%rbp) - LONG $0x000002b9; BYTE $0x00 // movl $2, %ecx - WORD $0x8941; BYTE $0xc3 // movl %eax, %r11d - LONG $0xffff6fe9; BYTE $0xff // jmp LBB29_58, $-145(%rip) - -LBB29_74: - LONG $0x06f98348 // cmpq $6, %rcx - LONG $0x02b88c0f; WORD $0x0000 // jl LBB29_106, $696(%rip) - LONG $0x00dbff3d; BYTE $0x00 // cmpl $56319, %eax - LONG $0x02ad870f; WORD $0x0000 // ja LBB29_106, $685(%rip) - LONG $0x5c398041 // cmpb $92, (%r9) - LONG $0x02a3850f; WORD $0x0000 // jne LBB29_106, $675(%rip) - LONG $0x75077b80 // cmpb $117, $7(%rbx) - LONG $0x0299850f; WORD $0x0000 // jne LBB29_106, $665(%rip) - LONG $0x084b8d4c // leaq $8(%rbx), %r9 - WORD $0x4b8b; BYTE $0x08 // movl $8(%rbx), %ecx - WORD $0xca89 // movl %ecx, %edx - WORD $0xd2f7 // notl %edx - LONG $0xcfd0b18d; WORD $0xcfcf // leal $-808464432(%rcx), %esi - LONG $0x8080e281; WORD $0x8080 // andl $-2139062144, %edx - WORD $0xf285 // testl %esi, %edx - LONG $0x026e850f; WORD $0x0000 // jne LBB29_105, $622(%rip) - LONG $0x1919b18d; WORD $0x1919 // leal $421075225(%rcx), %esi - WORD $0xce09 // orl %ecx, %esi - LONG $0x8080c6f7; WORD $0x8080 // testl $-2139062144, %esi - LONG $0x025a850f; WORD $0x0000 // jne LBB29_105, $602(%rip) - WORD $0xce89 // movl %ecx, %esi - LONG $0x7f7fe681; WORD $0x7f7f // andl $2139062143, %esi - LONG $0xc0c0bb41; WORD $0xc0c0 // movl $-1061109568, %r11d - WORD $0x2941; BYTE $0xf3 // subl %esi, %r11d - LONG $0x46a68d44; WORD $0x4646; BYTE $0x46 // leal $1179010630(%rsi), %r12d - WORD $0x2141; BYTE $0xd3 // andl %edx, %r11d - WORD $0x8545; BYTE $0xe3 // testl %r12d, %r11d - LONG $0x0236850f; WORD $0x0000 // jne LBB29_105, $566(%rip) - LONG $0xe0e0bb41; WORD $0xe0e0 // movl $-522133280, %r11d - WORD $0x2941; BYTE $0xf3 // subl %esi, %r11d - LONG $0x3939c681; WORD $0x3939 // addl $960051513, %esi - WORD $0x2144; BYTE $0xda // andl %r11d, %edx - WORD $0xf285 // testl %esi, %edx - LONG $0x021c850f; WORD $0x0000 // jne LBB29_105, $540(%rip) - WORD $0xc90f // bswapl %ecx - WORD $0xca89 // movl %ecx, %edx - WORD $0xeac1; BYTE $0x04 // shrl $4, %edx - WORD $0xd2f7 // notl %edx - LONG $0x0101e281; WORD $0x0101 // andl $16843009, %edx - WORD $0x148d; BYTE $0xd2 // leal (%rdx,%rdx,8), %edx - LONG $0x0f0fe181; WORD $0x0f0f // andl $252645135, %ecx - WORD $0xd101 // addl %edx, %ecx - WORD $0xca89 // movl %ecx, %edx - WORD $0xeac1; BYTE $0x04 // shrl $4, %edx - WORD $0xca09 // orl %ecx, %edx - WORD $0xd189 // movl %edx, %ecx - LONG $0x0000e181; WORD $0x00fc // andl $16515072, %ecx - LONG $0x0000f981; WORD $0x00dc // cmpl $14417920, %ecx - LONG $0x01f3850f; WORD $0x0000 // jne LBB29_106, $499(%rip) - WORD $0xd189 // movl %edx, %ecx - WORD $0xe9c1; BYTE $0x08 // shrl $8, %ecx - LONG $0xff00e181; WORD $0x0000 // andl $65280, %ecx - WORD $0xb60f; BYTE $0xd2 // movzbl %dl, %edx - WORD $0xca09 // orl %ecx, %edx - WORD $0xe0c1; BYTE $0x0a // shll $10, %eax - LONG $0x0010848d; WORD $0xa024; BYTE $0xfc // leal $-56613888(%rax,%rdx), %eax - WORD $0x8941; BYTE $0xc3 // movl %eax, %r11d - LONG $0x12ebc141 // shrl $18, %r11d - LONG $0xf0cb8041 // orb $-16, %r11b - LONG $0xd05d8844 // movb %r11b, $-48(%rbp) - WORD $0xc189 // movl %eax, %ecx - WORD $0xe9c1; BYTE $0x0c // shrl $12, %ecx - WORD $0xe180; BYTE $0x3f // andb $63, %cl - WORD $0xc980; BYTE $0x80 // orb $-128, %cl - WORD $0x4d88; BYTE $0xd1 // movb %cl, $-47(%rbp) - WORD $0xc189 // movl %eax, %ecx - WORD $0xe9c1; BYTE $0x06 // shrl $6, %ecx - WORD $0xe180; BYTE $0x3f // andb $63, %cl - WORD $0xc980; BYTE $0x80 // orb $-128, %cl - WORD $0x4d88; BYTE $0xd2 // movb %cl, $-46(%rbp) - WORD $0x3f24 // andb $63, %al - WORD $0x800c // orb $-128, %al - WORD $0x4588; BYTE $0xd3 // movb %al, $-45(%rbp) - LONG $0x0cc38348 // addq $12, %rbx - LONG $0x000004b9; BYTE $0x00 // movl $4, %ecx - LONG $0x0d4c8d4c; BYTE $0xd0 // leaq $-48(%rbp,%rcx), %r9 - WORD $0x394d; BYTE $0xd6 // cmpq %r10, %r14 - LONG $0xfe4e820f; WORD $0xffff // jb LBB29_60, $-434(%rip) - -LBB29_68: - LONG $0xd04d8d48 // leaq $-48(%rbp), %rcx - -LBB29_69: - WORD $0x394c; BYTE $0xc9 // cmpq %r9, %rcx - LONG $0x0029850f; WORD $0x0000 // jne LBB29_85, $41(%rip) - -LBB29_70: - WORD $0x3949; BYTE $0xd8 // cmpq %rbx, %r8 - LONG $0x0009860f; WORD $0x0000 // jbe LBB29_84, $9(%rip) - WORD $0x394d; BYTE $0xd6 // cmpq %r10, %r14 - LONG $0xfca6820f; WORD $0xffff // jb LBB29_42, $-858(%rip) - -LBB29_84: - WORD $0x3149; BYTE $0xd8 // xorq %rbx, %r8 - WORD $0x314d; BYTE $0xd6 // xorq %r10, %r14 - WORD $0xdb31 // xorl %ebx, %ebx - WORD $0x094d; BYTE $0xc6 // orq %r8, %r14 - WORD $0x940f; BYTE $0xc3 // sete %bl - LONG $0xc8758b4c // movq $-56(%rbp), %r14 - LONG $0xfffc1de9; BYTE $0xff // jmp LBB29_37, $-995(%rip) - -LBB29_85: - WORD $0xdb31 // xorl %ebx, %ebx - LONG $0xc8758b4c // movq $-56(%rbp), %r14 - LONG $0xfffc12e9; BYTE $0xff // jmp LBB29_37, $-1006(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB29_86: - WORD $0x5b3c // cmpb $91, %al - LONG $0x00cd850f; WORD $0x0000 // jne LBB29_97, $205(%rip) - LONG $0x08468b49 // movq $8(%r14), %rax - WORD $0x8b48; BYTE $0x18 // movq (%rax), %rbx - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x00d6880f; WORD $0x0000 // js LBB29_99, $214(%rip) - LONG $0x007d8b49 // movq (%r13), %rdi - LONG $0x08758b49 // movq $8(%r13), %rsi - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - LONG $0xffcb88e8; BYTE $0xff // callq _advance_ns, $-13432(%rip) - WORD $0x5d3c // cmpb $93, %al - LONG $0x008e840f; WORD $0x0000 // je LBB29_95, $142(%rip) - WORD $0xff49; BYTE $0x0f // decq (%r15) - WORD $0xff48; BYTE $0xc3 // incq %rbx - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB29_90: - WORD $0xff48; BYTE $0xcb // decq %rbx - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x00348e0f; WORD $0x0000 // jle LBB29_92, $52(%rip) - WORD $0x894c; BYTE $0xef // movq %r13, %rdi - WORD $0x894c; BYTE $0xfe // movq %r15, %rsi - LONG $0xffee29e8; BYTE $0xff // callq _skip_one_fast, $-4567(%rip) - LONG $0x007d8b49 // movq (%r13), %rdi - LONG $0x08758b49 // movq $8(%r13), %rsi - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - LONG $0xffcb49e8; BYTE $0xff // callq _advance_ns, $-13495(%rip) - WORD $0x2c3c // cmpb $44, %al - LONG $0xffd1840f; WORD $0xffff // je LBB29_90, $-47(%rip) - LONG $0x000059e9; BYTE $0x00 // jmp LBB29_96, $89(%rip) - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB29_92: - LONG $0x10c68349 // addq $16, %r14 - LONG $0xb8458b48 // movq $-72(%rbp), %rax - WORD $0x3949; BYTE $0xc6 // cmpq %rax, %r14 - LONG $0xb04d8b48 // movq $-80(%rbp), %rcx - LONG $0xf941850f; WORD $0xffff // jne LBB29_2, $-1727(%rip) - -LBB29_93: - QUAD $0xfffff8f3056ff9c5 // vmovdqa $-1805(%rip), %xmm0 /* LCPI29_0(%rip) */ - LONG $0x017ffac5 // vmovdqu %xmm0, (%rcx) - WORD $0x8948; BYTE $0xcf // movq %rcx, %rdi - WORD $0x894c; BYTE $0xee // movq %r13, %rsi - WORD $0x894c; BYTE $0xfa // movq %r15, %rdx - WORD $0xc931 // xorl %ecx, %ecx - LONG $0xffdb3fe8; BYTE $0xff // callq _fsm_exec, $-9409(%rip) - LONG $0x000029e9; BYTE $0x00 // jmp LBB29_98, $41(%rip) - -LBB29_94: - WORD $0x7d3c // cmpb $125, %al - LONG $0x0017850f; WORD $0x0000 // jne LBB29_97, $23(%rip) - -LBB29_95: - WORD $0xff49; BYTE $0x0f // decq (%r15) - LONG $0xdfc0c748; WORD $0xffff; BYTE $0xff // movq $-33, %rax - LONG $0x000012e9; BYTE $0x00 // jmp LBB29_98, $18(%rip) - -LBB29_96: - WORD $0x5d3c // cmpb $93, %al - LONG $0xffe9840f; WORD $0xffff // je LBB29_95, $-23(%rip) - -LBB29_97: - WORD $0xff49; BYTE $0x0f // decq (%r15) - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - -LBB29_98: - LONG $0x28c48348 // addq $40, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB29_99: - WORD $0xff49; BYTE $0x0f // decq (%r15) - LONG $0xdec0c748; WORD $0xffff; BYTE $0xff // movq $-34, %rax - LONG $0xffffe2e9; BYTE $0xff // jmp LBB29_98, $-30(%rip) - -LBB29_100: - LONG $0x08458b49 // movq $8(%r13), %rax - WORD $0x8949; BYTE $0x07 // movq %rax, (%r15) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xffffcfe9; BYTE $0xff // jmp LBB29_98, $-49(%rip) - -LBB29_101: - LONG $0x02c38348 // addq $2, %rbx - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0x000012e9; BYTE $0x00 // jmp LBB29_104, $18(%rip) - -LBB29_102: - WORD $0xff48; BYTE $0xc3 // incq %rbx - LONG $0xfdc0c748; WORD $0xffff; BYTE $0xff // movq $-3, %rax - LONG $0x000003e9; BYTE $0x00 // jmp LBB29_104, $3(%rip) - -LBB29_103: - WORD $0xff48; BYTE $0xc3 // incq %rbx - -LBB29_104: - WORD $0x2948; BYTE $0xfb // subq %rdi, %rbx - WORD $0x8949; BYTE $0x1f // movq %rbx, (%r15) - LONG $0xffffa2e9; BYTE $0xff // jmp LBB29_98, $-94(%rip) - -LBB29_105: - LONG $0xfec0c748; WORD $0xffff; BYTE $0xff // movq $-2, %rax - LONG $0x000007e9; BYTE $0x00 // jmp LBB29_107, $7(%rip) - -LBB29_106: - LONG $0xfcc0c748; WORD $0xffff; BYTE $0xff // movq $-4, %rax - -LBB29_107: - WORD $0x894c; BYTE $0xcb // movq %r9, %rbx - LONG $0xffffdae9; BYTE $0xff // jmp LBB29_104, $-38(%rip) - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -_validate_utf8: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax - WORD $0x8b4c; BYTE $0x17 // movq (%rdi), %r10 - LONG $0x085f8b4c // movq $8(%rdi), %r11 - WORD $0x8b48; BYTE $0x0e // movq (%rsi), %rcx - WORD $0x014c; BYTE $0xd1 // addq %r10, %rcx - LONG $0x1a448d4f; BYTE $0xfd // leaq $-3(%r10,%r11), %r8 - LONG $0x000010e9; BYTE $0x00 // jmp LBB30_1, $16(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB30_19: - WORD $0x0148; BYTE $0xd9 // addq %rbx, %rcx - -LBB30_1: - WORD $0x394c; BYTE $0xc1 // cmpq %r8, %rcx - LONG $0x00e1830f; WORD $0x0000 // jae LBB30_2, $225(%rip) - LONG $0x000001bb; BYTE $0x00 // movl $1, %ebx - WORD $0x3980; BYTE $0x00 // cmpb $0, (%rcx) - LONG $0xffe6890f; WORD $0xffff // jns LBB30_19, $-26(%rip) - WORD $0x018b // movl (%rcx), %eax - WORD $0xc789 // movl %eax, %edi - LONG $0xc0f0e781; WORD $0x00c0 // andl $12632304, %edi - LONG $0x80e0ff81; WORD $0x0080 // cmpl $8421600, %edi - LONG $0x0030850f; WORD $0x0000 // jne LBB30_10, $48(%rip) - WORD $0xc789 // movl %eax, %edi - LONG $0x200fe781; WORD $0x0000 // andl $8207, %edi - LONG $0x200dff81; WORD $0x0000 // cmpl $8205, %edi - LONG $0x001c840f; WORD $0x0000 // je LBB30_10, $28(%rip) - LONG $0x000003bb; BYTE $0x00 // movl $3, %ebx - WORD $0xff85 // testl %edi, %edi - LONG $0xffaf850f; WORD $0xffff // jne LBB30_19, $-81(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB30_10: - WORD $0xc789 // movl %eax, %edi - LONG $0xc0e0e781; WORD $0x0000 // andl $49376, %edi - LONG $0x80c0ff81; WORD $0x0000 // cmpl $32960, %edi - LONG $0x0010850f; WORD $0x0000 // jne LBB30_12, $16(%rip) - WORD $0xc789 // movl %eax, %edi - LONG $0x000002bb; BYTE $0x00 // movl $2, %ebx - WORD $0xe783; BYTE $0x1e // andl $30, %edi - LONG $0xff7c850f; WORD $0xffff // jne LBB30_19, $-132(%rip) - -LBB30_12: - WORD $0xc789 // movl %eax, %edi - LONG $0xc0f8e781; WORD $0xc0c0 // andl $-1061109512, %edi - LONG $0x80f0ff81; WORD $0x8080 // cmpl $-2139062032, %edi - LONG $0x0026850f; WORD $0x0000 // jne LBB30_16, $38(%rip) - WORD $0xc789 // movl %eax, %edi - LONG $0x3007e781; WORD $0x0000 // andl $12295, %edi - LONG $0x0018840f; WORD $0x0000 // je LBB30_16, $24(%rip) - LONG $0x000004bb; BYTE $0x00 // movl $4, %ebx - WORD $0x04a8 // testb $4, %al - LONG $0xff4d840f; WORD $0xffff // je LBB30_19, $-179(%rip) - LONG $0x00300325; BYTE $0x00 // andl $12291, %eax - LONG $0xff42840f; WORD $0xffff // je LBB30_19, $-190(%rip) - -LBB30_16: - WORD $0x8948; BYTE $0xcf // movq %rcx, %rdi - WORD $0x294c; BYTE $0xd7 // subq %r10, %rdi - WORD $0x8b48; BYTE $0x1a // movq (%rdx), %rbx - LONG $0x00fb8148; WORD $0x0010; BYTE $0x00 // cmpq $4096, %rbx - LONG $0x0187830f; WORD $0x0000 // jae LBB30_17, $391(%rip) - WORD $0x6348; BYTE $0xc7 // movslq %edi, %rax - LONG $0x017b8d48 // leaq $1(%rbx), %rdi - WORD $0x8948; BYTE $0x3a // movq %rdi, (%rdx) - LONG $0xda448948; BYTE $0x08 // movq %rax, $8(%rdx,%rbx,8) - LONG $0x000001bb; BYTE $0x00 // movl $1, %ebx - LONG $0xffff13e9; BYTE $0xff // jmp LBB30_19, $-237(%rip) - -LBB30_2: - WORD $0x014d; BYTE $0xd3 // addq %r10, %r11 - WORD $0x394c; BYTE $0xd9 // cmpq %r11, %rcx - LONG $0x013e830f; WORD $0x0000 // jae LBB30_36, $318(%rip) - LONG $0xdc458d4c // leaq $-36(%rbp), %r8 - LONG $0xda4d8d4c // leaq $-38(%rbp), %r9 - LONG $0x000016e9; BYTE $0x00 // jmp LBB30_4, $22(%rip) - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB30_5: - WORD $0xff48; BYTE $0xc1 // incq %rcx - WORD $0x394c; BYTE $0xd9 // cmpq %r11, %rcx - LONG $0x011b830f; WORD $0x0000 // jae LBB30_36, $283(%rip) - -LBB30_4: - WORD $0x3980; BYTE $0x00 // cmpb $0, (%rcx) - LONG $0xffeb890f; WORD $0xffff // jns LBB30_5, $-21(%rip) - LONG $0x00dc45c6 // movb $0, $-36(%rbp) - LONG $0x00da45c6 // movb $0, $-38(%rbp) - WORD $0x894c; BYTE $0xdb // movq %r11, %rbx - WORD $0x2948; BYTE $0xcb // subq %rcx, %rbx - LONG $0x02fb8348 // cmpq $2, %rbx - LONG $0x0035820f; WORD $0x0000 // jb LBB30_21, $53(%rip) - LONG $0x21b60f44 // movzbl (%rcx), %r12d - LONG $0x71b60f44; BYTE $0x01 // movzbl $1(%rcx), %r14d - LONG $0xdc658844 // movb %r12b, $-36(%rbp) - LONG $0x02798d4c // leaq $2(%rcx), %r15 - LONG $0xfec38348 // addq $-2, %rbx - WORD $0x894c; BYTE $0xcf // movq %r9, %rdi - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0x0029840f; WORD $0x0000 // je LBB30_24, $41(%rip) - -LBB30_25: - LONG $0x07b60f41 // movzbl (%r15), %eax - WORD $0x0788 // movb %al, (%rdi) - LONG $0x65b60f44; BYTE $0xdc // movzbl $-36(%rbp), %r12d - LONG $0xda7db60f // movzbl $-38(%rbp), %edi - LONG $0x000017e9; BYTE $0x00 // jmp LBB30_26, $23(%rip) - -LBB30_21: - WORD $0x3145; BYTE $0xe4 // xorl %r12d, %r12d - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0x894c; BYTE $0xc7 // movq %r8, %rdi - WORD $0x8949; BYTE $0xcf // movq %rcx, %r15 - WORD $0x8548; BYTE $0xdb // testq %rbx, %rbx - LONG $0xffd7850f; WORD $0xffff // jne LBB30_25, $-41(%rip) - -LBB30_24: - WORD $0xff31 // xorl %edi, %edi - -LBB30_26: - LONG $0xc7b60f40 // movzbl %dil, %eax - WORD $0xe0c1; BYTE $0x10 // shll $16, %eax - LONG $0xdeb60f41 // movzbl %r14b, %ebx - WORD $0xe3c1; BYTE $0x08 // shll $8, %ebx - LONG $0xfcb60f41 // movzbl %r12b, %edi - WORD $0xdf09 // orl %ebx, %edi - WORD $0xf809 // orl %edi, %eax - LONG $0xc0c0f025; BYTE $0x00 // andl $12632304, %eax - LONG $0x8080e03d; BYTE $0x00 // cmpl $8421600, %eax - LONG $0x0021850f; WORD $0x0000 // jne LBB30_29, $33(%rip) - WORD $0xf889 // movl %edi, %eax - LONG $0x00200f25; BYTE $0x00 // andl $8207, %eax - LONG $0x00200d3d; BYTE $0x00 // cmpl $8205, %eax - LONG $0x000f840f; WORD $0x0000 // je LBB30_29, $15(%rip) - LONG $0x000003bb; BYTE $0x00 // movl $3, %ebx - WORD $0xc085 // testl %eax, %eax - LONG $0x0023850f; WORD $0x0000 // jne LBB30_34, $35(%rip) - WORD $0x9090 // .p2align 4, 0x90 - -LBB30_29: - LONG $0x1ec4f641 // testb $30, %r12b - LONG $0x0028840f; WORD $0x0000 // je LBB30_31, $40(%rip) - LONG $0xc0e0e781; WORD $0x0000 // andl $49376, %edi - LONG $0x000002bb; BYTE $0x00 // movl $2, %ebx - LONG $0x80c0ff81; WORD $0x0000 // cmpl $32960, %edi - LONG $0x0011850f; WORD $0x0000 // jne LBB30_31, $17(%rip) - -LBB30_34: - WORD $0x0148; BYTE $0xd9 // addq %rbx, %rcx - WORD $0x394c; BYTE $0xd9 // cmpq %r11, %rcx - LONG $0xff1f820f; WORD $0xffff // jb LBB30_4, $-225(%rip) - LONG $0x000035e9; BYTE $0x00 // jmp LBB30_36, $53(%rip) - -LBB30_31: - WORD $0x8948; BYTE $0xc8 // movq %rcx, %rax - WORD $0x294c; BYTE $0xd0 // subq %r10, %rax - WORD $0x8b48; BYTE $0x3a // movq (%rdx), %rdi - LONG $0x00ff8148; WORD $0x0010; BYTE $0x00 // cmpq $4096, %rdi - LONG $0x0034830f; WORD $0x0000 // jae LBB30_32, $52(%rip) - WORD $0x9848 // cltq - LONG $0x015f8d48 // leaq $1(%rdi), %rbx - WORD $0x8948; BYTE $0x1a // movq %rbx, (%rdx) - LONG $0xfa448948; BYTE $0x08 // movq %rax, $8(%rdx,%rdi,8) - LONG $0x000001bb; BYTE $0x00 // movl $1, %ebx - WORD $0x0148; BYTE $0xd9 // addq %rbx, %rcx - WORD $0x394c; BYTE $0xd9 // cmpq %r11, %rcx - LONG $0xfee5820f; WORD $0xffff // jb LBB30_4, $-283(%rip) - -LBB30_36: - WORD $0x294c; BYTE $0xd1 // subq %r10, %rcx - WORD $0x8948; BYTE $0x0e // movq %rcx, (%rsi) - WORD $0xc031 // xorl %eax, %eax - -LBB30_37: - LONG $0x08c48348 // addq $8, %rsp - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB30_32: - WORD $0x8948; BYTE $0x06 // movq %rax, (%rsi) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xffffe4e9; BYTE $0xff // jmp LBB30_37, $-28(%rip) - -LBB30_17: - WORD $0x8948; BYTE $0x3e // movq %rdi, (%rsi) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xffffd5e9; BYTE $0xff // jmp LBB30_37, $-43(%rip) - QUAD $0x0000000000000000; QUAD $0x0000000000000000; LONG $0x00000000; WORD $0x0000 // .p2align 5, 0x00 - -LCPI31_0: - QUAD $0x0f0f0f0f0f0f0f0f; QUAD $0x0f0f0f0f0f0f0f0f // .space 16, '\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f' - QUAD $0x0f0f0f0f0f0f0f0f; QUAD $0x0f0f0f0f0f0f0f0f // .space 16, '\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f' - -LCPI31_1: - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x80 // .byte 128 - BYTE $0x80 // .byte 128 - BYTE $0x80 // .byte 128 - BYTE $0x80 // .byte 128 - BYTE $0x21 // .byte 33 - BYTE $0x01 // .byte 1 - BYTE $0x15 // .byte 21 - BYTE $0x49 // .byte 73 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x02 // .byte 2 - BYTE $0x80 // .byte 128 - BYTE $0x80 // .byte 128 - BYTE $0x80 // .byte 128 - BYTE $0x80 // .byte 128 - BYTE $0x21 // .byte 33 - BYTE $0x01 // .byte 1 - BYTE $0x15 // .byte 21 - BYTE $0x49 // .byte 73 - -LCPI31_2: - BYTE $0xe7 // .byte 231 - BYTE $0xa3 // .byte 163 - BYTE $0x83 // .byte 131 - BYTE $0x83 // .byte 131 - BYTE $0x8b // .byte 139 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xdb // .byte 219 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xe7 // .byte 231 - BYTE $0xa3 // .byte 163 - BYTE $0x83 // .byte 131 - BYTE $0x83 // .byte 131 - BYTE $0x8b // .byte 139 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - BYTE $0xdb // .byte 219 - BYTE $0xcb // .byte 203 - BYTE $0xcb // .byte 203 - -LCPI31_3: - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0xe6 // .byte 230 - BYTE $0xae // .byte 174 - BYTE $0xba // .byte 186 - BYTE $0xba // .byte 186 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0xe6 // .byte 230 - BYTE $0xae // .byte 174 - BYTE $0xba // .byte 186 - BYTE $0xba // .byte 186 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - BYTE $0x01 // .byte 1 - -LCPI31_4: - QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' - QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' - -LCPI31_5: - QUAD $0xefefefefefefefef; QUAD $0xefefefefefefefef // .space 16, '\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef' - QUAD $0xefefefefefefefef; QUAD $0xefefefefefefefef // .space 16, '\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef' - -LCPI31_7: - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xef // .byte 239 - BYTE $0xdf // .byte 223 - BYTE $0xbf // .byte 191 - -LCPI31_8: - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - - // .p2align 3, 0x00 -LCPI31_6: - QUAD $0x8080808080808080 // .quad -9187201950435737472 - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -_validate_utf8_fast: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - LONG $0xe0e48348 // andq $-32, %rsp - LONG $0x80ec8148; WORD $0x0000; BYTE $0x00 // subq $128, %rsp - LONG $0x08478b48 // movq $8(%rdi), %rax - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x079d840f; WORD $0x0000 // je LBB31_69, $1949(%rip) - WORD $0x8b4c; BYTE $0x07 // movq (%rdi), %r8 - LONG $0x00348d4d // leaq (%r8,%rax), %r14 - LONG $0x807e8d49 // leaq $-128(%r14), %rdi - LONG $0xc9eff1c5 // vpxor %xmm1, %xmm1, %xmm1 - LONG $0xd2efe9c5 // vpxor %xmm2, %xmm2, %xmm2 - LONG $0xc0eff9c5 // vpxor %xmm0, %xmm0, %xmm0 - WORD $0x894c; BYTE $0xc6 // movq %r8, %rsi - WORD $0x394c; BYTE $0xc7 // cmpq %r8, %rdi - LONG $0x0373860f; WORD $0x0000 // jbe LBB31_12, $883(%rip) - QUAD $0xfffffea6256ffdc5 // vmovdqa $-346(%rip), %ymm4 /* LCPI31_0(%rip) */ - QUAD $0xfffffede356ffdc5 // vmovdqa $-290(%rip), %ymm6 /* LCPI31_2(%rip) */ - QUAD $0xfffffef63d6ffdc5 // vmovdqa $-266(%rip), %ymm7 /* LCPI31_3(%rip) */ - QUAD $0xffffff0e056f7dc5 // vmovdqa $-242(%rip), %ymm8 /* LCPI31_4(%rip) */ - QUAD $0xffffff260d6f7dc5 // vmovdqa $-218(%rip), %ymm9 /* LCPI31_5(%rip) */ - QUAD $0xffffff3e156f7dc5 // vmovdqa $-194(%rip), %ymm10 /* LCPI31_7(%rip) */ - WORD $0x894c; BYTE $0xc6 // movq %r8, %rsi - LONG $0xc0eff9c5 // vpxor %xmm0, %xmm0, %xmm0 - LONG $0xd2efe9c5 // vpxor %xmm2, %xmm2, %xmm2 - LONG $0xc9eff1c5 // vpxor %xmm1, %xmm1, %xmm1 - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB31_3: - LONG $0x3e6f7ec5 // vmovdqu (%rsi), %ymm15 - LONG $0x6e6f7ec5; BYTE $0x20 // vmovdqu $32(%rsi), %ymm13 - LONG $0x666f7ec5; BYTE $0x40 // vmovdqu $64(%rsi), %ymm12 - LONG $0x5e6f7ec5; BYTE $0x60 // vmovdqu $96(%rsi), %ymm11 - LONG $0xeb15c1c4; BYTE $0xdf // vpor %ymm15, %ymm13, %ymm3 - LONG $0xeb2541c4; BYTE $0xf4 // vpor %ymm12, %ymm11, %ymm14 - LONG $0xebeb8dc5 // vpor %ymm3, %ymm14, %ymm5 - LONG $0xcdd7fdc5 // vpmovmskb %ymm5, %ecx - WORD $0xc985 // testl %ecx, %ecx - LONG $0x0016850f; WORD $0x0000 // jne LBB31_6, $22(%rip) - LONG $0xc0ebf5c5 // vpor %ymm0, %ymm1, %ymm0 - -LBB31_5: - LONG $0x80ee8348 // subq $-128, %rsi - WORD $0x3948; BYTE $0xfe // cmpq %rdi, %rsi - LONG $0xffc2820f; WORD $0xffff // jb LBB31_3, $-62(%rip) - LONG $0x0002e2e9; BYTE $0x00 // jmp LBB31_12, $738(%rip) - -LBB31_6: - LONG $0xcbd7fdc5 // vpmovmskb %ymm3, %ecx - WORD $0xc985 // testl %ecx, %ecx - LONG $0x00f0850f; WORD $0x0000 // jne LBB31_9, $240(%rip) - LONG $0xc0ebf5c5 // vpor %ymm0, %ymm1, %ymm0 - LONG $0x466dc3c4; WORD $0x21cc // vperm2i128 $33, %ymm12, %ymm2, %ymm1 - LONG $0x0f1de3c4; WORD $0x0fd1 // vpalignr $15, %ymm1, %ymm12, %ymm2 - LONG $0xd271e5c5; BYTE $0x04 // vpsrlw $4, %ymm2, %ymm3 - LONG $0xdcdbe5c5 // vpand %ymm4, %ymm3, %ymm3 - QUAD $0xfffffe10356f7dc5 // vmovdqa $-496(%rip), %ymm14 /* LCPI31_1(%rip) */ - LONG $0x000de2c4; BYTE $0xdb // vpshufb %ymm3, %ymm14, %ymm3 - LONG $0xd4dbedc5 // vpand %ymm4, %ymm2, %ymm2 - LONG $0x004de2c4; BYTE $0xd2 // vpshufb %ymm2, %ymm6, %ymm2 - LONG $0x7155c1c4; WORD $0x04d4 // vpsrlw $4, %ymm12, %ymm5 - LONG $0xecdbd5c5 // vpand %ymm4, %ymm5, %ymm5 - LONG $0x0045e2c4; BYTE $0xed // vpshufb %ymm5, %ymm7, %ymm5 - LONG $0xd5dbedc5 // vpand %ymm5, %ymm2, %ymm2 - LONG $0xd2dbe5c5 // vpand %ymm2, %ymm3, %ymm2 - LONG $0x0f1de3c4; WORD $0x0ed9 // vpalignr $14, %ymm1, %ymm12, %ymm3 - LONG $0x0f1de3c4; WORD $0x0dc9 // vpalignr $13, %ymm1, %ymm12, %ymm1 - LONG $0xd865c1c4; BYTE $0xd8 // vpsubusb %ymm8, %ymm3, %ymm3 - LONG $0xd875c1c4; BYTE $0xc9 // vpsubusb %ymm9, %ymm1, %ymm1 - LONG $0xcbebf5c5 // vpor %ymm3, %ymm1, %ymm1 - LONG $0xef1141c4; BYTE $0xed // vpxor %xmm13, %xmm13, %xmm13 - LONG $0xc97495c5 // vpcmpeqb %ymm1, %ymm13, %ymm1 - QUAD $0xfffe9f1d597de2c4; BYTE $0xff // vpbroadcastq $-353(%rip), %ymm3 /* LCPI31_6(%rip) */ - LONG $0xcbdff5c5 // vpandn %ymm3, %ymm1, %ymm1 - LONG $0xcaeff5c5 // vpxor %ymm2, %ymm1, %ymm1 - LONG $0xc1ebfdc5 // vpor %ymm1, %ymm0, %ymm0 - LONG $0x461dc3c4; WORD $0x21cb // vperm2i128 $33, %ymm11, %ymm12, %ymm1 - LONG $0x0f25e3c4; WORD $0x0fd1 // vpalignr $15, %ymm1, %ymm11, %ymm2 - LONG $0xd271d5c5; BYTE $0x04 // vpsrlw $4, %ymm2, %ymm5 - LONG $0xecdbd5c5 // vpand %ymm4, %ymm5, %ymm5 - LONG $0x000de2c4; BYTE $0xed // vpshufb %ymm5, %ymm14, %ymm5 - LONG $0xd4dbedc5 // vpand %ymm4, %ymm2, %ymm2 - LONG $0x004de2c4; BYTE $0xd2 // vpshufb %ymm2, %ymm6, %ymm2 - LONG $0x711dc1c4; WORD $0x04d3 // vpsrlw $4, %ymm11, %ymm12 - LONG $0xe4db1dc5 // vpand %ymm4, %ymm12, %ymm12 - LONG $0x004542c4; BYTE $0xe4 // vpshufb %ymm12, %ymm7, %ymm12 - LONG $0xd2db9dc5 // vpand %ymm2, %ymm12, %ymm2 - LONG $0xd2dbd5c5 // vpand %ymm2, %ymm5, %ymm2 - LONG $0x0f25e3c4; WORD $0x0ee9 // vpalignr $14, %ymm1, %ymm11, %ymm5 - LONG $0x0f25e3c4; WORD $0x0dc9 // vpalignr $13, %ymm1, %ymm11, %ymm1 - LONG $0xd855c1c4; BYTE $0xe8 // vpsubusb %ymm8, %ymm5, %ymm5 - LONG $0xd875c1c4; BYTE $0xc9 // vpsubusb %ymm9, %ymm1, %ymm1 - LONG $0xcdebf5c5 // vpor %ymm5, %ymm1, %ymm1 - LONG $0xc97495c5 // vpcmpeqb %ymm1, %ymm13, %ymm1 - LONG $0xcbdff5c5 // vpandn %ymm3, %ymm1, %ymm1 - LONG $0xcaeff5c5 // vpxor %ymm2, %ymm1, %ymm1 - -LBB31_8: - LONG $0xc1ebfdc5 // vpor %ymm1, %ymm0, %ymm0 - LONG $0xd825c1c4; BYTE $0xca // vpsubusb %ymm10, %ymm11, %ymm1 - LONG $0xda7f7dc5 // vmovdqa %ymm11, %ymm2 - LONG $0xfffef2e9; BYTE $0xff // jmp LBB31_5, $-270(%rip) - -LBB31_9: - LONG $0x466dc3c4; WORD $0x21cf // vperm2i128 $33, %ymm15, %ymm2, %ymm1 - LONG $0x0f05e3c4; WORD $0x0fd1 // vpalignr $15, %ymm1, %ymm15, %ymm2 - LONG $0xd271e5c5; BYTE $0x04 // vpsrlw $4, %ymm2, %ymm3 - LONG $0xdcdbe5c5 // vpand %ymm4, %ymm3, %ymm3 - QUAD $0xfffffd242d6ffdc5 // vmovdqa $-732(%rip), %ymm5 /* LCPI31_1(%rip) */ - LONG $0x0055e2c4; BYTE $0xdb // vpshufb %ymm3, %ymm5, %ymm3 - LONG $0xd4dbedc5 // vpand %ymm4, %ymm2, %ymm2 - LONG $0x004de2c4; BYTE $0xd2 // vpshufb %ymm2, %ymm6, %ymm2 - LONG $0x7155c1c4; WORD $0x04d7 // vpsrlw $4, %ymm15, %ymm5 - LONG $0xecdbd5c5 // vpand %ymm4, %ymm5, %ymm5 - LONG $0x0045e2c4; BYTE $0xed // vpshufb %ymm5, %ymm7, %ymm5 - LONG $0xd5dbedc5 // vpand %ymm5, %ymm2, %ymm2 - LONG $0xd2dbe5c5 // vpand %ymm2, %ymm3, %ymm2 - LONG $0x0f05e3c4; WORD $0x0ed9 // vpalignr $14, %ymm1, %ymm15, %ymm3 - LONG $0x0f05e3c4; WORD $0x0dc9 // vpalignr $13, %ymm1, %ymm15, %ymm1 - LONG $0xd865c1c4; BYTE $0xd8 // vpsubusb %ymm8, %ymm3, %ymm3 - LONG $0xd875c1c4; BYTE $0xc9 // vpsubusb %ymm9, %ymm1, %ymm1 - LONG $0xcbebf5c5 // vpor %ymm3, %ymm1, %ymm1 - LONG $0xdbefe1c5 // vpxor %xmm3, %xmm3, %xmm3 - LONG $0xdb74f5c5 // vpcmpeqb %ymm3, %ymm1, %ymm3 - QUAD $0xfffdb40d597de2c4; BYTE $0xff // vpbroadcastq $-588(%rip), %ymm1 /* LCPI31_6(%rip) */ - LONG $0xd9dfe5c5 // vpandn %ymm1, %ymm3, %ymm3 - LONG $0xd2efe5c5 // vpxor %ymm2, %ymm3, %ymm2 - LONG $0x547ffdc5; WORD $0x6024 // vmovdqa %ymm2, $96(%rsp) - LONG $0x4605c3c4; WORD $0x21dd // vperm2i128 $33, %ymm13, %ymm15, %ymm3 - LONG $0x0f15e3c4; WORD $0x0feb // vpalignr $15, %ymm3, %ymm13, %ymm5 - LONG $0xd57185c5; BYTE $0x04 // vpsrlw $4, %ymm5, %ymm15 - LONG $0xfcdb05c5 // vpand %ymm4, %ymm15, %ymm15 - QUAD $0xfffffca9156ffdc5 // vmovdqa $-855(%rip), %ymm2 /* LCPI31_1(%rip) */ - LONG $0x006d42c4; BYTE $0xff // vpshufb %ymm15, %ymm2, %ymm15 - LONG $0xecdbd5c5 // vpand %ymm4, %ymm5, %ymm5 - LONG $0x004de2c4; BYTE $0xed // vpshufb %ymm5, %ymm6, %ymm5 - LONG $0x716dc1c4; WORD $0x04d5 // vpsrlw $4, %ymm13, %ymm2 - LONG $0xd4dbedc5 // vpand %ymm4, %ymm2, %ymm2 - LONG $0x0045e2c4; BYTE $0xd2 // vpshufb %ymm2, %ymm7, %ymm2 - LONG $0xd2dbd5c5 // vpand %ymm2, %ymm5, %ymm2 - LONG $0xd2db85c5 // vpand %ymm2, %ymm15, %ymm2 - LONG $0x0f15e3c4; WORD $0x0eeb // vpalignr $14, %ymm3, %ymm13, %ymm5 - LONG $0x0f15e3c4; WORD $0x0ddb // vpalignr $13, %ymm3, %ymm13, %ymm3 - LONG $0xd855c1c4; BYTE $0xe8 // vpsubusb %ymm8, %ymm5, %ymm5 - LONG $0xd865c1c4; BYTE $0xd9 // vpsubusb %ymm9, %ymm3, %ymm3 - LONG $0xddebe5c5 // vpor %ymm5, %ymm3, %ymm3 - QUAD $0xfffffd221d74e5c5 // vpcmpeqb $-734(%rip), %ymm3, %ymm3 /* LCPI31_8(%rip) */ - LONG $0xd9dfe5c5 // vpandn %ymm1, %ymm3, %ymm3 - LONG $0xd2efe5c5 // vpxor %ymm2, %ymm3, %ymm2 - LONG $0x44ebfdc5; WORD $0x6024 // vpor $96(%rsp), %ymm0, %ymm0 - LONG $0xc2ebfdc5 // vpor %ymm2, %ymm0, %ymm0 - LONG $0xd77dc1c4; BYTE $0xce // vpmovmskb %ymm14, %ecx - WORD $0xc985 // testl %ecx, %ecx - LONG $0x00d6840f; WORD $0x0000 // je LBB31_11, $214(%rip) - LONG $0x4615c3c4; WORD $0x21d4 // vperm2i128 $33, %ymm12, %ymm13, %ymm2 - LONG $0x0f1de3c4; WORD $0x0fda // vpalignr $15, %ymm2, %ymm12, %ymm3 - LONG $0xd371d5c5; BYTE $0x04 // vpsrlw $4, %ymm3, %ymm5 - LONG $0xecdbd5c5 // vpand %ymm4, %ymm5, %ymm5 - QUAD $0xfffffc263d6f7dc5 // vmovdqa $-986(%rip), %ymm15 /* LCPI31_1(%rip) */ - LONG $0x0005e2c4; BYTE $0xed // vpshufb %ymm5, %ymm15, %ymm5 - LONG $0xdcdbe5c5 // vpand %ymm4, %ymm3, %ymm3 - LONG $0x004de2c4; BYTE $0xdb // vpshufb %ymm3, %ymm6, %ymm3 - LONG $0x7115c1c4; WORD $0x04d4 // vpsrlw $4, %ymm12, %ymm13 - LONG $0xecdb15c5 // vpand %ymm4, %ymm13, %ymm13 - LONG $0x004542c4; BYTE $0xed // vpshufb %ymm13, %ymm7, %ymm13 - LONG $0xdbdb95c5 // vpand %ymm3, %ymm13, %ymm3 - LONG $0xdbdbd5c5 // vpand %ymm3, %ymm5, %ymm3 - LONG $0x0f1de3c4; WORD $0x0eea // vpalignr $14, %ymm2, %ymm12, %ymm5 - LONG $0x0f1de3c4; WORD $0x0dd2 // vpalignr $13, %ymm2, %ymm12, %ymm2 - LONG $0xd855c1c4; BYTE $0xe8 // vpsubusb %ymm8, %ymm5, %ymm5 - LONG $0xd86dc1c4; BYTE $0xd1 // vpsubusb %ymm9, %ymm2, %ymm2 - LONG $0xd5ebedc5 // vpor %ymm5, %ymm2, %ymm2 - LONG $0xef0941c4; BYTE $0xf6 // vpxor %xmm14, %xmm14, %xmm14 - LONG $0xd2748dc5 // vpcmpeqb %ymm2, %ymm14, %ymm2 - LONG $0xd1dfedc5 // vpandn %ymm1, %ymm2, %ymm2 - LONG $0xd3efedc5 // vpxor %ymm3, %ymm2, %ymm2 - LONG $0x461dc3c4; WORD $0x21db // vperm2i128 $33, %ymm11, %ymm12, %ymm3 - LONG $0x0f25e3c4; WORD $0x0feb // vpalignr $15, %ymm3, %ymm11, %ymm5 - LONG $0xd5719dc5; BYTE $0x04 // vpsrlw $4, %ymm5, %ymm12 - LONG $0xe4db1dc5 // vpand %ymm4, %ymm12, %ymm12 - LONG $0x000542c4; BYTE $0xe4 // vpshufb %ymm12, %ymm15, %ymm12 - LONG $0xecdbd5c5 // vpand %ymm4, %ymm5, %ymm5 - LONG $0x004de2c4; BYTE $0xed // vpshufb %ymm5, %ymm6, %ymm5 - LONG $0x7115c1c4; WORD $0x04d3 // vpsrlw $4, %ymm11, %ymm13 - LONG $0xecdb15c5 // vpand %ymm4, %ymm13, %ymm13 - LONG $0x004542c4; BYTE $0xed // vpshufb %ymm13, %ymm7, %ymm13 - LONG $0xeddb95c5 // vpand %ymm5, %ymm13, %ymm5 - LONG $0xeddb9dc5 // vpand %ymm5, %ymm12, %ymm5 - LONG $0x0f2563c4; WORD $0x0ee3 // vpalignr $14, %ymm3, %ymm11, %ymm12 - LONG $0x0f25e3c4; WORD $0x0ddb // vpalignr $13, %ymm3, %ymm11, %ymm3 - LONG $0xd81d41c4; BYTE $0xe0 // vpsubusb %ymm8, %ymm12, %ymm12 - LONG $0xd865c1c4; BYTE $0xd9 // vpsubusb %ymm9, %ymm3, %ymm3 - LONG $0xdbeb9dc5 // vpor %ymm3, %ymm12, %ymm3 - LONG $0xdb748dc5 // vpcmpeqb %ymm3, %ymm14, %ymm3 - LONG $0xc9dfe5c5 // vpandn %ymm1, %ymm3, %ymm1 - LONG $0xcdeff5c5 // vpxor %ymm5, %ymm1, %ymm1 - LONG $0xc0ebedc5 // vpor %ymm0, %ymm2, %ymm0 - LONG $0xfffe1ae9; BYTE $0xff // jmp LBB31_8, $-486(%rip) - -LBB31_11: - LONG $0xd815c1c4; BYTE $0xca // vpsubusb %ymm10, %ymm13, %ymm1 - LONG $0xc1ebfdc5 // vpor %ymm1, %ymm0, %ymm0 - LONG $0xea7f7dc5 // vmovdqa %ymm13, %ymm2 - LONG $0xfffd0ce9; BYTE $0xff // jmp LBB31_5, $-756(%rip) - -LBB31_12: - LONG $0xc07e8d49 // leaq $-64(%r14), %rdi - WORD $0x3948; BYTE $0xfe // cmpq %rdi, %rsi - LONG $0x0159830f; WORD $0x0000 // jae LBB31_17, $345(%rip) - QUAD $0xfffffb261d6ffdc5 // vmovdqa $-1242(%rip), %ymm3 /* LCPI31_0(%rip) */ - QUAD $0xfffffb3e256ffdc5 // vmovdqa $-1218(%rip), %ymm4 /* LCPI31_1(%rip) */ - QUAD $0xfffffb562d6ffdc5 // vmovdqa $-1194(%rip), %ymm5 /* LCPI31_2(%rip) */ - QUAD $0xfffffb6e356ffdc5 // vmovdqa $-1170(%rip), %ymm6 /* LCPI31_3(%rip) */ - QUAD $0xfffffb863d6ffdc5 // vmovdqa $-1146(%rip), %ymm7 /* LCPI31_4(%rip) */ - QUAD $0xfffffb9e056f7dc5 // vmovdqa $-1122(%rip), %ymm8 /* LCPI31_5(%rip) */ - LONG $0xef3141c4; BYTE $0xc9 // vpxor %xmm9, %xmm9, %xmm9 - QUAD $0xfffffbb1156f7dc5 // vmovdqa $-1103(%rip), %ymm10 /* LCPI31_7(%rip) */ - BYTE $0x90 // .p2align 4, 0x90 - -LBB31_14: - LONG $0x266f7ec5 // vmovdqu (%rsi), %ymm12 - LONG $0x5e6f7ec5; BYTE $0x20 // vmovdqu $32(%rsi), %ymm11 - LONG $0xeb2541c4; BYTE $0xec // vpor %ymm12, %ymm11, %ymm13 - LONG $0xd77dc1c4; BYTE $0xcd // vpmovmskb %ymm13, %ecx - WORD $0xc985 // testl %ecx, %ecx - LONG $0x0016850f; WORD $0x0000 // jne LBB31_16, $22(%rip) - LONG $0xc0ebf5c5 // vpor %ymm0, %ymm1, %ymm0 - LONG $0x40c68348 // addq $64, %rsi - WORD $0x3948; BYTE $0xfe // cmpq %rdi, %rsi - LONG $0xffd4820f; WORD $0xffff // jb LBB31_14, $-44(%rip) - LONG $0x0000eae9; BYTE $0x00 // jmp LBB31_17, $234(%rip) - -LBB31_16: - LONG $0x466dc3c4; WORD $0x21cc // vperm2i128 $33, %ymm12, %ymm2, %ymm1 - LONG $0x0f1de3c4; WORD $0x0fd1 // vpalignr $15, %ymm1, %ymm12, %ymm2 - LONG $0xd27195c5; BYTE $0x04 // vpsrlw $4, %ymm2, %ymm13 - LONG $0xebdb15c5 // vpand %ymm3, %ymm13, %ymm13 - LONG $0x005d42c4; BYTE $0xed // vpshufb %ymm13, %ymm4, %ymm13 - LONG $0xd3dbedc5 // vpand %ymm3, %ymm2, %ymm2 - LONG $0x0055e2c4; BYTE $0xd2 // vpshufb %ymm2, %ymm5, %ymm2 - LONG $0x710dc1c4; WORD $0x04d4 // vpsrlw $4, %ymm12, %ymm14 - LONG $0xf3db0dc5 // vpand %ymm3, %ymm14, %ymm14 - LONG $0x004d42c4; BYTE $0xf6 // vpshufb %ymm14, %ymm6, %ymm14 - LONG $0xd2db8dc5 // vpand %ymm2, %ymm14, %ymm2 - LONG $0xd2db95c5 // vpand %ymm2, %ymm13, %ymm2 - LONG $0x0f1d63c4; WORD $0x0ee9 // vpalignr $14, %ymm1, %ymm12, %ymm13 - LONG $0x0f1de3c4; WORD $0x0dc9 // vpalignr $13, %ymm1, %ymm12, %ymm1 - LONG $0xefd815c5 // vpsubusb %ymm7, %ymm13, %ymm13 - LONG $0xd875c1c4; BYTE $0xc8 // vpsubusb %ymm8, %ymm1, %ymm1 - LONG $0xc9eb95c5 // vpor %ymm1, %ymm13, %ymm1 - LONG $0xc974b5c5 // vpcmpeqb %ymm1, %ymm9, %ymm1 - QUAD $0xfffb5f2d597d62c4; BYTE $0xff // vpbroadcastq $-1185(%rip), %ymm13 /* LCPI31_6(%rip) */ - LONG $0xdf75c1c4; BYTE $0xcd // vpandn %ymm13, %ymm1, %ymm1 - LONG $0xcaeff5c5 // vpxor %ymm2, %ymm1, %ymm1 - LONG $0x461dc3c4; WORD $0x21d3 // vperm2i128 $33, %ymm11, %ymm12, %ymm2 - LONG $0x0f2563c4; WORD $0x0fe2 // vpalignr $15, %ymm2, %ymm11, %ymm12 - LONG $0x710dc1c4; WORD $0x04d4 // vpsrlw $4, %ymm12, %ymm14 - LONG $0xf3db0dc5 // vpand %ymm3, %ymm14, %ymm14 - LONG $0x005d42c4; BYTE $0xf6 // vpshufb %ymm14, %ymm4, %ymm14 - LONG $0xe3db1dc5 // vpand %ymm3, %ymm12, %ymm12 - LONG $0x005542c4; BYTE $0xe4 // vpshufb %ymm12, %ymm5, %ymm12 - LONG $0x7105c1c4; WORD $0x04d3 // vpsrlw $4, %ymm11, %ymm15 - LONG $0xfbdb05c5 // vpand %ymm3, %ymm15, %ymm15 - LONG $0x004d42c4; BYTE $0xff // vpshufb %ymm15, %ymm6, %ymm15 - LONG $0xdb1d41c4; BYTE $0xe7 // vpand %ymm15, %ymm12, %ymm12 - LONG $0xdb0d41c4; BYTE $0xe4 // vpand %ymm12, %ymm14, %ymm12 - LONG $0x0f2563c4; WORD $0x0ef2 // vpalignr $14, %ymm2, %ymm11, %ymm14 - LONG $0x0f25e3c4; WORD $0x0dd2 // vpalignr $13, %ymm2, %ymm11, %ymm2 - LONG $0xf7d80dc5 // vpsubusb %ymm7, %ymm14, %ymm14 - LONG $0xd86dc1c4; BYTE $0xd0 // vpsubusb %ymm8, %ymm2, %ymm2 - LONG $0xd2eb8dc5 // vpor %ymm2, %ymm14, %ymm2 - LONG $0xd274b5c5 // vpcmpeqb %ymm2, %ymm9, %ymm2 - LONG $0xdf6dc1c4; BYTE $0xd5 // vpandn %ymm13, %ymm2, %ymm2 - LONG $0xd2ef9dc5 // vpxor %ymm2, %ymm12, %ymm2 - LONG $0xc0ebf5c5 // vpor %ymm0, %ymm1, %ymm0 - LONG $0xc2ebfdc5 // vpor %ymm2, %ymm0, %ymm0 - LONG $0xd825c1c4; BYTE $0xca // vpsubusb %ymm10, %ymm11, %ymm1 - LONG $0xda7f7dc5 // vmovdqa %ymm11, %ymm2 - LONG $0x40c68348 // addq $64, %rsi - WORD $0x3948; BYTE $0xfe // cmpq %rdi, %rsi - LONG $0xfee5820f; WORD $0xffff // jb LBB31_14, $-283(%rip) - -LBB31_17: - LONG $0xdbefe1c5 // vpxor %xmm3, %xmm3, %xmm3 - LONG $0x5c7ffdc5; WORD $0x4024 // vmovdqa %ymm3, $64(%rsp) - LONG $0x5c7ffdc5; WORD $0x2024 // vmovdqa %ymm3, $32(%rsp) - LONG $0xe4efd9c5 // vpxor %xmm4, %xmm4, %xmm4 - WORD $0x394c; BYTE $0xf6 // cmpq %r14, %rsi - LONG $0x0067830f; WORD $0x0000 // jae LBB31_34, $103(%rip) - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x2948; BYTE $0xf1 // subq %rsi, %rcx - LONG $0x08148d4d // leaq (%r8,%rcx), %r10 - LONG $0x80fa8149; WORD $0x0000; BYTE $0x00 // cmpq $128, %r10 - LONG $0x001f820f; WORD $0x0000 // jb LBB31_19, $31(%rip) - LONG $0x24548d48; BYTE $0x20 // leaq $32(%rsp), %rdx - WORD $0x394c; BYTE $0xf2 // cmpq %r14, %rdx - LONG $0x026d830f; WORD $0x0000 // jae LBB31_24, $621(%rip) - LONG $0x0c4c8d48; BYTE $0x20 // leaq $32(%rsp,%rcx), %rcx - WORD $0x014c; BYTE $0xc1 // addq %r8, %rcx - WORD $0x3948; BYTE $0xce // cmpq %rcx, %rsi - LONG $0x025c830f; WORD $0x0000 // jae LBB31_24, $604(%rip) - -LBB31_19: - WORD $0x3145; BYTE $0xdb // xorl %r11d, %r11d - -LBB31_31: - LONG $0x1c4c8d4a; BYTE $0x20 // leaq $32(%rsp,%r11), %rcx - WORD $0x2948; BYTE $0xf0 // subq %rsi, %rax - WORD $0x014c; BYTE $0xc0 // addq %r8, %rax - WORD $0xd231 // xorl %edx, %edx - WORD $0x9090 // .p2align 4, 0x90 - -LBB31_32: - LONG $0x161cb60f // movzbl (%rsi,%rdx), %ebx - WORD $0x1c88; BYTE $0x11 // movb %bl, (%rcx,%rdx) - WORD $0xff48; BYTE $0xc2 // incq %rdx - WORD $0x3948; BYTE $0xd0 // cmpq %rdx, %rax - LONG $0xffed850f; WORD $0xffff // jne LBB31_32, $-19(%rip) - -LBB31_33: - LONG $0x646ffdc5; WORD $0x2024 // vmovdqa $32(%rsp), %ymm4 - LONG $0x5c6ffdc5; WORD $0x4024 // vmovdqa $64(%rsp), %ymm3 - -LBB31_34: - LONG $0xebebddc5 // vpor %ymm3, %ymm4, %ymm5 - LONG $0xc5d7fdc5 // vpmovmskb %ymm5, %eax - WORD $0xc085 // testl %eax, %eax - LONG $0x033a850f; WORD $0x0000 // jne LBB31_38, $826(%rip) - LONG $0xc1ebfdc5 // vpor %ymm1, %ymm0, %ymm0 - LONG $0xc1ebfdc5 // vpor %ymm1, %ymm0, %ymm0 - LONG $0x177de2c4; BYTE $0xc0 // vptest %ymm0, %ymm0 - LONG $0x01fa840f; WORD $0x0000 // je LBB31_69, $506(%rip) - -LBB31_39: - LONG $0xfd4e8d49 // leaq $-3(%r14), %rcx - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - WORD $0x3949; BYTE $0xc8 // cmpq %rcx, %r8 - LONG $0x00da830f; WORD $0x0000 // jae LBB31_53, $218(%rip) - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - LONG $0x000012e9; BYTE $0x00 // jmp LBB31_42, $18(%rip) - LONG $0x90909090; WORD $0x9090 // .p2align 4, 0x90 - -LBB31_41: - WORD $0x0148; BYTE $0xd0 // addq %rdx, %rax - WORD $0x3948; BYTE $0xc8 // cmpq %rcx, %rax - LONG $0x00c0830f; WORD $0x0000 // jae LBB31_53, $192(%rip) - -LBB31_42: - LONG $0x000001ba; BYTE $0x00 // movl $1, %edx - WORD $0x3880; BYTE $0x00 // cmpb $0, (%rax) - LONG $0xffe6890f; WORD $0xffff // jns LBB31_41, $-26(%rip) - WORD $0x308b // movl (%rax), %esi - WORD $0xf289 // movl %esi, %edx - LONG $0xc0f0e281; WORD $0x00c0 // andl $12632304, %edx - LONG $0x80e0fa81; WORD $0x0080 // cmpl $8421600, %edx - LONG $0x0030850f; WORD $0x0000 // jne LBB31_46, $48(%rip) - WORD $0xf789 // movl %esi, %edi - LONG $0x200fe781; WORD $0x0000 // andl $8207, %edi - LONG $0x200dff81; WORD $0x0000 // cmpl $8205, %edi - LONG $0x001c840f; WORD $0x0000 // je LBB31_46, $28(%rip) - LONG $0x000003ba; BYTE $0x00 // movl $3, %edx - WORD $0xff85 // testl %edi, %edi - LONG $0xffaf850f; WORD $0xffff // jne LBB31_41, $-81(%rip) - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB31_46: - WORD $0xf289 // movl %esi, %edx - LONG $0xc0e0e281; WORD $0x0000 // andl $49376, %edx - LONG $0x80c0fa81; WORD $0x0000 // cmpl $32960, %edx - LONG $0x0010850f; WORD $0x0000 // jne LBB31_48, $16(%rip) - WORD $0xf789 // movl %esi, %edi - LONG $0x000002ba; BYTE $0x00 // movl $2, %edx - WORD $0xe783; BYTE $0x1e // andl $30, %edi - LONG $0xff7c850f; WORD $0xffff // jne LBB31_41, $-132(%rip) - -LBB31_48: - WORD $0xf289 // movl %esi, %edx - LONG $0xc0f8e281; WORD $0xc0c0 // andl $-1061109512, %edx - LONG $0x80f0fa81; WORD $0x8080 // cmpl $-2139062032, %edx - LONG $0x0029850f; WORD $0x0000 // jne LBB31_52, $41(%rip) - WORD $0xf289 // movl %esi, %edx - LONG $0x3007e281; WORD $0x0000 // andl $12295, %edx - LONG $0x001b840f; WORD $0x0000 // je LBB31_52, $27(%rip) - LONG $0x000004ba; BYTE $0x00 // movl $4, %edx - LONG $0x04c6f640 // testb $4, %sil - LONG $0xff4b840f; WORD $0xffff // je LBB31_41, $-181(%rip) - LONG $0x3003e681; WORD $0x0000 // andl $12291, %esi - LONG $0xff3f840f; WORD $0xffff // je LBB31_41, $-193(%rip) - -LBB31_52: - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x014c; BYTE $0xc0 // addq %r8, %rax - LONG $0x000112e9; BYTE $0x00 // jmp LBB31_70, $274(%rip) - -LBB31_53: - WORD $0x394c; BYTE $0xf0 // cmpq %r14, %rax - LONG $0x0107830f; WORD $0x0000 // jae LBB31_69, $263(%rip) - LONG $0x244c8d4c; BYTE $0x20 // leaq $32(%rsp), %r9 - LONG $0x24548d4c; BYTE $0x1e // leaq $30(%rsp), %r10 - LONG $0x000018e9; BYTE $0x00 // jmp LBB31_56, $24(%rip) - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB31_55: - WORD $0xff48; BYTE $0xc0 // incq %rax - WORD $0x394c; BYTE $0xf0 // cmpq %r14, %rax - LONG $0x00e0830f; WORD $0x0000 // jae LBB31_69, $224(%rip) - -LBB31_56: - WORD $0x3880; BYTE $0x00 // cmpb $0, (%rax) - LONG $0xffeb890f; WORD $0xffff // jns LBB31_55, $-21(%rip) - LONG $0x202444c6; BYTE $0x00 // movb $0, $32(%rsp) - LONG $0x1e2444c6; BYTE $0x00 // movb $0, $30(%rsp) - WORD $0x894c; BYTE $0xf2 // movq %r14, %rdx - WORD $0x2948; BYTE $0xc2 // subq %rax, %rdx - LONG $0x02fa8348 // cmpq $2, %rdx - LONG $0x0033820f; WORD $0x0000 // jb LBB31_60, $51(%rip) - WORD $0xb60f; BYTE $0x08 // movzbl (%rax), %ecx - LONG $0x0170b60f // movzbl $1(%rax), %esi - LONG $0x20244c88 // movb %cl, $32(%rsp) - LONG $0x02788d48 // leaq $2(%rax), %rdi - LONG $0xfec28348 // addq $-2, %rdx - WORD $0x894c; BYTE $0xd3 // movq %r10, %rbx - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x0027840f; WORD $0x0000 // je LBB31_61, $39(%rip) - -LBB31_59: - WORD $0xb60f; BYTE $0x0f // movzbl (%rdi), %ecx - WORD $0x0b88 // movb %cl, (%rbx) - LONG $0x244cb60f; BYTE $0x20 // movzbl $32(%rsp), %ecx - LONG $0x2454b60f; BYTE $0x1e // movzbl $30(%rsp), %edx - LONG $0x000015e9; BYTE $0x00 // jmp LBB31_62, $21(%rip) - -LBB31_60: - WORD $0xc931 // xorl %ecx, %ecx - WORD $0xf631 // xorl %esi, %esi - WORD $0x894c; BYTE $0xcb // movq %r9, %rbx - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0xffd9850f; WORD $0xffff // jne LBB31_59, $-39(%rip) - -LBB31_61: - WORD $0xd231 // xorl %edx, %edx - -LBB31_62: - WORD $0xb60f; BYTE $0xfa // movzbl %dl, %edi - WORD $0xe7c1; BYTE $0x10 // shll $16, %edi - LONG $0xf6b60f40 // movzbl %sil, %esi - WORD $0xe6c1; BYTE $0x08 // shll $8, %esi - WORD $0xb60f; BYTE $0xd1 // movzbl %cl, %edx - WORD $0xf209 // orl %esi, %edx - WORD $0xd709 // orl %edx, %edi - LONG $0xc0f0e781; WORD $0x00c0 // andl $12632304, %edi - LONG $0x80e0ff81; WORD $0x0080 // cmpl $8421600, %edi - LONG $0x0023850f; WORD $0x0000 // jne LBB31_65, $35(%rip) - WORD $0xd789 // movl %edx, %edi - LONG $0x200fe781; WORD $0x0000 // andl $8207, %edi - LONG $0x200dff81; WORD $0x0000 // cmpl $8205, %edi - LONG $0x000f840f; WORD $0x0000 // je LBB31_65, $15(%rip) - LONG $0x000003be; BYTE $0x00 // movl $3, %esi - WORD $0xff85 // testl %edi, %edi - LONG $0x0022850f; WORD $0x0000 // jne LBB31_67, $34(%rip) - WORD $0x9090 // .p2align 4, 0x90 - -LBB31_65: - WORD $0xc1f6; BYTE $0x1e // testb $30, %cl - LONG $0xff08840f; WORD $0xffff // je LBB31_52, $-248(%rip) - LONG $0xc0e0e281; WORD $0x0000 // andl $49376, %edx - LONG $0x000002be; BYTE $0x00 // movl $2, %esi - LONG $0x80c0fa81; WORD $0x0000 // cmpl $32960, %edx - LONG $0xfef1850f; WORD $0xffff // jne LBB31_52, $-271(%rip) - -LBB31_67: - WORD $0x0148; BYTE $0xf0 // addq %rsi, %rax - WORD $0x394c; BYTE $0xf0 // cmpq %r14, %rax - LONG $0xff20820f; WORD $0xffff // jb LBB31_56, $-224(%rip) - -LBB31_69: - WORD $0xc031 // xorl %eax, %eax - -LBB31_70: - LONG $0xf0658d48 // leaq $-16(%rbp), %rsp - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB31_24: - WORD $0x894d; BYTE $0xd3 // movq %r10, %r11 - LONG $0x80e38349 // andq $-128, %r11 - LONG $0x804b8d49 // leaq $-128(%r11), %rcx - WORD $0x8949; BYTE $0xc9 // movq %rcx, %r9 - LONG $0x07e9c149 // shrq $7, %r9 - WORD $0xff49; BYTE $0xc1 // incq %r9 - WORD $0x8548; BYTE $0xc9 // testq %rcx, %rcx - LONG $0x00f0840f; WORD $0x0000 // je LBB31_37, $240(%rip) - WORD $0x894c; BYTE $0xcf // movq %r9, %rdi - LONG $0xfee78348 // andq $-2, %rdi - WORD $0xf748; BYTE $0xdf // negq %rdi - WORD $0xc931 // xorl %ecx, %ecx - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB31_26: - LONG $0x1c10fcc5; BYTE $0x0e // vmovups (%rsi,%rcx), %ymm3 - LONG $0x6410fcc5; WORD $0x200e // vmovups $32(%rsi,%rcx), %ymm4 - LONG $0x6c10fcc5; WORD $0x400e // vmovups $64(%rsi,%rcx), %ymm5 - LONG $0x7410fcc5; WORD $0x600e // vmovups $96(%rsi,%rcx), %ymm6 - LONG $0x5c11fcc5; WORD $0x200c // vmovups %ymm3, $32(%rsp,%rcx) - LONG $0x6411fcc5; WORD $0x400c // vmovups %ymm4, $64(%rsp,%rcx) - LONG $0x6c11fcc5; WORD $0x600c // vmovups %ymm5, $96(%rsp,%rcx) - QUAD $0x0000800cb411fcc5; BYTE $0x00 // vmovups %ymm6, $128(%rsp,%rcx) - QUAD $0x0000800e9c6ffec5; BYTE $0x00 // vmovdqu $128(%rsi,%rcx), %ymm3 - QUAD $0x0000a00ea46ffec5; BYTE $0x00 // vmovdqu $160(%rsi,%rcx), %ymm4 - QUAD $0x0000c00eac6ffec5; BYTE $0x00 // vmovdqu $192(%rsi,%rcx), %ymm5 - QUAD $0x0000e00eb46ffec5; BYTE $0x00 // vmovdqu $224(%rsi,%rcx), %ymm6 - QUAD $0x0000a00c9c7ffec5; BYTE $0x00 // vmovdqu %ymm3, $160(%rsp,%rcx) - QUAD $0x0000c00ca47ffec5; BYTE $0x00 // vmovdqu %ymm4, $192(%rsp,%rcx) - QUAD $0x0000e00cac7ffec5; BYTE $0x00 // vmovdqu %ymm5, $224(%rsp,%rcx) - QUAD $0x0001000cb47ffec5; BYTE $0x00 // vmovdqu %ymm6, $256(%rsp,%rcx) - LONG $0x00c18148; WORD $0x0001; BYTE $0x00 // addq $256, %rcx - LONG $0x02c78348 // addq $2, %rdi - LONG $0xff75850f; WORD $0xffff // jne LBB31_26, $-139(%rip) - LONG $0x01c1f641 // testb $1, %r9b - LONG $0x0032840f; WORD $0x0000 // je LBB31_29, $50(%rip) - -LBB31_28: - LONG $0x1c6ffec5; BYTE $0x0e // vmovdqu (%rsi,%rcx), %ymm3 - LONG $0x646ffec5; WORD $0x200e // vmovdqu $32(%rsi,%rcx), %ymm4 - LONG $0x6c6ffec5; WORD $0x400e // vmovdqu $64(%rsi,%rcx), %ymm5 - LONG $0x746ffec5; WORD $0x600e // vmovdqu $96(%rsi,%rcx), %ymm6 - LONG $0x5c7ffec5; WORD $0x200c // vmovdqu %ymm3, $32(%rsp,%rcx) - LONG $0x647ffec5; WORD $0x400c // vmovdqu %ymm4, $64(%rsp,%rcx) - LONG $0x6c7ffec5; WORD $0x600c // vmovdqu %ymm5, $96(%rsp,%rcx) - QUAD $0x0000800cb47ffec5; BYTE $0x00 // vmovdqu %ymm6, $128(%rsp,%rcx) - -LBB31_29: - WORD $0x394d; BYTE $0xd3 // cmpq %r10, %r11 - LONG $0xfcc3840f; WORD $0xffff // je LBB31_33, $-829(%rip) - WORD $0x014c; BYTE $0xde // addq %r11, %rsi - LONG $0xfffc99e9; BYTE $0xff // jmp LBB31_31, $-871(%rip) - -LBB31_37: - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x01c1f641 // testb $1, %r9b - LONG $0xffb1850f; WORD $0xffff // jne LBB31_28, $-79(%rip) - LONG $0xffffdee9; BYTE $0xff // jmp LBB31_29, $-34(%rip) - -LBB31_38: - LONG $0x466de3c4; WORD $0x21d4 // vperm2i128 $33, %ymm4, %ymm2, %ymm2 - LONG $0x0f5de3c4; WORD $0x0fea // vpalignr $15, %ymm2, %ymm4, %ymm5 - LONG $0xd571cdc5; BYTE $0x04 // vpsrlw $4, %ymm5, %ymm6 - QUAD $0xfffff5ee0d6ffdc5 // vmovdqa $-2578(%rip), %ymm1 /* LCPI31_0(%rip) */ - LONG $0xf1dbcdc5 // vpand %ymm1, %ymm6, %ymm6 - QUAD $0xfffff6023d6ffdc5 // vmovdqa $-2558(%rip), %ymm7 /* LCPI31_1(%rip) */ - LONG $0x0045e2c4; BYTE $0xf6 // vpshufb %ymm6, %ymm7, %ymm6 - LONG $0xe9dbd5c5 // vpand %ymm1, %ymm5, %ymm5 - QUAD $0xfffff611056f7dc5 // vmovdqa $-2543(%rip), %ymm8 /* LCPI31_2(%rip) */ - LONG $0x003de2c4; BYTE $0xed // vpshufb %ymm5, %ymm8, %ymm5 - LONG $0xd471b5c5; BYTE $0x04 // vpsrlw $4, %ymm4, %ymm9 - LONG $0xc9db35c5 // vpand %ymm1, %ymm9, %ymm9 - QUAD $0xfffff61b156f7dc5 // vmovdqa $-2533(%rip), %ymm10 /* LCPI31_3(%rip) */ - LONG $0x002d42c4; BYTE $0xc9 // vpshufb %ymm9, %ymm10, %ymm9 - LONG $0xeddbb5c5 // vpand %ymm5, %ymm9, %ymm5 - LONG $0xeddbcdc5 // vpand %ymm5, %ymm6, %ymm5 - LONG $0x0f5de3c4; WORD $0x0ef2 // vpalignr $14, %ymm2, %ymm4, %ymm6 - LONG $0x0f5de3c4; WORD $0x0dd2 // vpalignr $13, %ymm2, %ymm4, %ymm2 - QUAD $0xfffff61a0d6f7dc5 // vmovdqa $-2534(%rip), %ymm9 /* LCPI31_4(%rip) */ - LONG $0xd84dc1c4; BYTE $0xf1 // vpsubusb %ymm9, %ymm6, %ymm6 - QUAD $0xfffff62d1d6f7dc5 // vmovdqa $-2515(%rip), %ymm11 /* LCPI31_5(%rip) */ - LONG $0xd86dc1c4; BYTE $0xd3 // vpsubusb %ymm11, %ymm2, %ymm2 - LONG $0xd6ebedc5 // vpor %ymm6, %ymm2, %ymm2 - LONG $0xf6efc9c5 // vpxor %xmm6, %xmm6, %xmm6 - LONG $0xd674edc5 // vpcmpeqb %ymm6, %ymm2, %ymm2 - QUAD $0xfff67325597d62c4; BYTE $0xff // vpbroadcastq $-2445(%rip), %ymm12 /* LCPI31_6(%rip) */ - LONG $0xdf6dc1c4; BYTE $0xd4 // vpandn %ymm12, %ymm2, %ymm2 - LONG $0xd5efedc5 // vpxor %ymm5, %ymm2, %ymm2 - LONG $0x465de3c4; WORD $0x21e3 // vperm2i128 $33, %ymm3, %ymm4, %ymm4 - LONG $0x0f65e3c4; WORD $0x0fec // vpalignr $15, %ymm4, %ymm3, %ymm5 - LONG $0xd57195c5; BYTE $0x04 // vpsrlw $4, %ymm5, %ymm13 - LONG $0xe9db15c5 // vpand %ymm1, %ymm13, %ymm13 - LONG $0x0045c2c4; BYTE $0xfd // vpshufb %ymm13, %ymm7, %ymm7 - LONG $0xe9dbd5c5 // vpand %ymm1, %ymm5, %ymm5 - LONG $0x003de2c4; BYTE $0xed // vpshufb %ymm5, %ymm8, %ymm5 - LONG $0xd371bdc5; BYTE $0x04 // vpsrlw $4, %ymm3, %ymm8 - LONG $0xc9dbbdc5 // vpand %ymm1, %ymm8, %ymm1 - LONG $0x002de2c4; BYTE $0xc9 // vpshufb %ymm1, %ymm10, %ymm1 - LONG $0xc9dbd5c5 // vpand %ymm1, %ymm5, %ymm1 - LONG $0xc9dbc5c5 // vpand %ymm1, %ymm7, %ymm1 - LONG $0x0f65e3c4; WORD $0x0eec // vpalignr $14, %ymm4, %ymm3, %ymm5 - LONG $0x0f65e3c4; WORD $0x0de4 // vpalignr $13, %ymm4, %ymm3, %ymm4 - LONG $0xd855c1c4; BYTE $0xe9 // vpsubusb %ymm9, %ymm5, %ymm5 - LONG $0xd85dc1c4; BYTE $0xe3 // vpsubusb %ymm11, %ymm4, %ymm4 - LONG $0xe5ebddc5 // vpor %ymm5, %ymm4, %ymm4 - LONG $0xe674ddc5 // vpcmpeqb %ymm6, %ymm4, %ymm4 - LONG $0xdf5dc1c4; BYTE $0xe4 // vpandn %ymm12, %ymm4, %ymm4 - LONG $0xc9efddc5 // vpxor %ymm1, %ymm4, %ymm1 - LONG $0xc0ebedc5 // vpor %ymm0, %ymm2, %ymm0 - LONG $0xc1ebfdc5 // vpor %ymm1, %ymm0, %ymm0 - QUAD $0xfffff5ba0dd8e5c5 // vpsubusb $-2630(%rip), %ymm3, %ymm1 /* LCPI31_7(%rip) */ - LONG $0xc1ebfdc5 // vpor %ymm1, %ymm0, %ymm0 - LONG $0x177de2c4; BYTE $0xc0 // vptest %ymm0, %ymm0 - LONG $0xfdb7840f; WORD $0xffff // je LBB31_69, $-585(%rip) - LONG $0xfffbb8e9; BYTE $0xff // jmp LBB31_39, $-1096(%rip) - LONG $0x00000000; WORD $0x0000 // .p2align 5, 0x00 - -LCPI32_0: - QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' - QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' - - // .p2align 4, 0x90 -_f32toa: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0xc07ef9c5 // vmovd %xmm0, %eax - WORD $0xc189 // movl %eax, %ecx - WORD $0xe9c1; BYTE $0x17 // shrl $23, %ecx - WORD $0xb60f; BYTE $0xd9 // movzbl %cl, %ebx - LONG $0x00fffb81; WORD $0x0000 // cmpl $255, %ebx - LONG $0x0cf1840f; WORD $0x0000 // je LBB32_138, $3313(%rip) - WORD $0x07c6; BYTE $0x2d // movb $45, (%rdi) - WORD $0x8941; BYTE $0xc1 // movl %eax, %r9d - LONG $0x1fe9c141 // shrl $31, %r9d - LONG $0x0f048d4e // leaq (%rdi,%r9), %r8 - LONG $0xffffffa9; BYTE $0x7f // testl $2147483647, %eax - LONG $0x01bf840f; WORD $0x0000 // je LBB32_11, $447(%rip) - LONG $0x7fffff25; BYTE $0x00 // andl $8388607, %eax - WORD $0xdb85 // testl %ebx, %ebx - LONG $0x0cd3840f; WORD $0x0000 // je LBB32_139, $3283(%rip) - LONG $0x0000b08d; WORD $0x0080 // leal $8388608(%rax), %esi - LONG $0x6abb8d44; WORD $0xffff; BYTE $0xff // leal $-150(%rbx), %r15d - WORD $0x4b8d; BYTE $0x81 // leal $-127(%rbx), %ecx - WORD $0xf983; BYTE $0x17 // cmpl $23, %ecx - LONG $0x0019870f; WORD $0x0000 // ja LBB32_5, $25(%rip) - WORD $0x8944; BYTE $0xf9 // movl %r15d, %ecx - WORD $0xd9f7 // negl %ecx - LONG $0xffc2c748; WORD $0xffff; BYTE $0xff // movq $-1, %rdx - WORD $0xd348; BYTE $0xe2 // shlq %cl, %rdx - WORD $0xd2f7 // notl %edx - WORD $0xf285 // testl %esi, %edx - LONG $0x03fc840f; WORD $0x0000 // je LBB32_32, $1020(%rip) - -LBB32_5: - WORD $0x8941; BYTE $0xf6 // movl %esi, %r14d - LONG $0x01e68341 // andl $1, %r14d - WORD $0xc085 // testl %eax, %eax - WORD $0x940f; BYTE $0xc0 // sete %al - WORD $0xfb83; BYTE $0x01 // cmpl $1, %ebx - WORD $0x970f; BYTE $0xc1 // seta %cl - WORD $0xc120 // andb %al, %cl - WORD $0xb60f; BYTE $0xc9 // movzbl %cl, %ecx - WORD $0x8941; BYTE $0xf2 // movl %esi, %r10d - LONG $0x02e2c141 // shll $2, %r10d - LONG $0xfeb1448d // leal $-2(%rcx,%rsi,4), %eax - LONG $0x13d76941; WORD $0x1344; BYTE $0x00 // imull $1262611, %r15d, %edx - WORD $0xdb31 // xorl %ebx, %ebx - WORD $0xc984 // testb %cl, %cl - LONG $0x0101bb41; WORD $0xfff8 // movl $-524031, %r11d - LONG $0xdb440f44 // cmovel %ebx, %r11d - WORD $0x0141; BYTE $0xd3 // addl %edx, %r11d - LONG $0x16fbc141 // sarl $22, %r11d - LONG $0xb1cb6941; WORD $0xe56c; BYTE $0xff // imull $-1741647, %r11d, %ecx - WORD $0xe9c1; BYTE $0x13 // shrl $19, %ecx - WORD $0x0144; BYTE $0xf9 // addl %r15d, %ecx - LONG $0x00001fba; BYTE $0x00 // movl $31, %edx - WORD $0x2944; BYTE $0xda // subl %r11d, %edx - LONG $0x291d8d48; WORD $0x00b4; BYTE $0x00 // leaq $46121(%rip), %rbx /* _pow10_ceil_sig_f32.g(%rip) */ - WORD $0xc1fe // incb %cl - WORD $0xe0d3 // shll %cl, %eax - LONG $0xd3248b4c // movq (%rbx,%rdx,8), %r12 - WORD $0xf749; BYTE $0xe4 // mulq %r12 - LONG $0x20e8c148 // shrq $32, %rax - WORD $0xdb31 // xorl %ebx, %ebx - WORD $0xf883; BYTE $0x01 // cmpl $1, %eax - WORD $0x970f; BYTE $0xc3 // seta %bl - WORD $0xd341; BYTE $0xe2 // shll %cl, %r10d - WORD $0xd309 // orl %edx, %ebx - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - WORD $0xf749; BYTE $0xe4 // mulq %r12 - WORD $0x8949; BYTE $0xd2 // movq %rdx, %r10 - LONG $0x20e8c148 // shrq $32, %rax - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - WORD $0xf883; BYTE $0x01 // cmpl $1, %eax - LONG $0xc7970f41 // seta %r15b - LONG $0x02b5048d; WORD $0x0000; BYTE $0x00 // leal $2(,%rsi,4), %eax - WORD $0xe0d3 // shll %cl, %eax - WORD $0x0945; BYTE $0xd7 // orl %r10d, %r15d - WORD $0xf749; BYTE $0xe4 // mulq %r12 - LONG $0x20e8c148 // shrq $32, %rax - WORD $0xc931 // xorl %ecx, %ecx - WORD $0xf883; BYTE $0x01 // cmpl $1, %eax - WORD $0x970f; BYTE $0xc1 // seta %cl - WORD $0xd109 // orl %edx, %ecx - WORD $0x0144; BYTE $0xf3 // addl %r14d, %ebx - WORD $0x2944; BYTE $0xf1 // subl %r14d, %ecx - LONG $0x28ff8341 // cmpl $40, %r15d - LONG $0x003d820f; WORD $0x0000 // jb LBB32_7, $61(%rip) - WORD $0x8944; BYTE $0xd0 // movl %r10d, %eax - LONG $0xcccdbd41; WORD $0xcccc // movl $3435973837, %r13d - LONG $0xe8af0f4c // imulq %rax, %r13 - LONG $0x25edc149 // shrq $37, %r13 - WORD $0x8941; BYTE $0xde // movl %ebx, %r14d - QUAD $0x00000000ed348d4a // leaq (,%r13,8), %rsi - LONG $0xb6048d48 // leaq (%rsi,%rsi,4), %rax - WORD $0x394c; BYTE $0xf0 // cmpq %r14, %rax - LONG $0xc6920f41 // setb %r14b - LONG $0xb6648d4c; BYTE $0x28 // leaq $40(%rsi,%rsi,4), %r12 - WORD $0xce89 // movl %ecx, %esi - WORD $0x3949; BYTE $0xf4 // cmpq %rsi, %r12 - WORD $0x960f; BYTE $0xc0 // setbe %al - WORD $0x3044; BYTE $0xf0 // xorb %r14b, %al - LONG $0x01e9840f; WORD $0x0000 // je LBB32_16, $489(%rip) - -LBB32_7: - WORD $0x894c; BYTE $0xd0 // movq %r10, %rax - LONG $0x02e8c148 // shrq $2, %rax - WORD $0x8944; BYTE $0xd6 // movl %r10d, %esi - WORD $0xe683; BYTE $0xfc // andl $-4, %esi - WORD $0xf339 // cmpl %esi, %ebx - LONG $0xc6970f41 // seta %r14b - WORD $0x568d; BYTE $0x04 // leal $4(%rsi), %edx - WORD $0xca39 // cmpl %ecx, %edx - WORD $0x960f; BYTE $0xc3 // setbe %bl - WORD $0x3044; BYTE $0xf3 // xorb %r14b, %bl - LONG $0x0074840f; WORD $0x0000 // je LBB32_12, $116(%rip) - WORD $0xce83; BYTE $0x02 // orl $2, %esi - LONG $0x0001bd41; WORD $0x0000 // movl $1, %r13d - WORD $0x3941; BYTE $0xf7 // cmpl %esi, %r15d - LONG $0x000e870f; WORD $0x0000 // ja LBB32_10, $14(%rip) - WORD $0x940f; BYTE $0xc1 // sete %cl - LONG $0x02eac041 // shrb $2, %r10b - WORD $0x2041; BYTE $0xca // andb %cl, %r10b - LONG $0xeab60f45 // movzbl %r10b, %r13d - -LBB32_10: - WORD $0x0141; BYTE $0xc5 // addl %eax, %r13d - LONG $0xa0fd8141; WORD $0x0186; BYTE $0x00 // cmpl $100000, %r13d - LONG $0x0059820f; WORD $0x0000 // jb LBB32_17, $89(%rip) - -LBB32_13: - LONG $0x000006be; BYTE $0x00 // movl $6, %esi - LONG $0x40fd8141; WORD $0x0f42; BYTE $0x00 // cmpl $1000000, %r13d - LONG $0x0086820f; WORD $0x0000 // jb LBB32_22, $134(%rip) - LONG $0x000007be; BYTE $0x00 // movl $7, %esi - LONG $0x80fd8141; WORD $0x9896; BYTE $0x00 // cmpl $10000000, %r13d - LONG $0x0074820f; WORD $0x0000 // jb LBB32_22, $116(%rip) - LONG $0x00fd8141; WORD $0xf5e1; BYTE $0x05 // cmpl $100000000, %r13d - LONG $0x000009be; BYTE $0x00 // movl $9, %esi - LONG $0x000060e9; BYTE $0x00 // jmp LBB32_21, $96(%rip) - -LBB32_11: - LONG $0x3000c641 // movb $48, (%r8) - WORD $0x2941; BYTE $0xf8 // subl %edi, %r8d - WORD $0xff41; BYTE $0xc0 // incl %r8d - LONG $0x000af9e9; BYTE $0x00 // jmp LBB32_137, $2809(%rip) - -LBB32_12: - WORD $0xd139 // cmpl %edx, %ecx - WORD $0xd883; BYTE $0xff // sbbl $-1, %eax - WORD $0x8941; BYTE $0xc5 // movl %eax, %r13d - LONG $0xa0fd8141; WORD $0x0186; BYTE $0x00 // cmpl $100000, %r13d - LONG $0xffa7830f; WORD $0xffff // jae LBB32_13, $-89(%rip) - -LBB32_17: - LONG $0x000001be; BYTE $0x00 // movl $1, %esi - LONG $0x0afd8341 // cmpl $10, %r13d - LONG $0x0030820f; WORD $0x0000 // jb LBB32_22, $48(%rip) - LONG $0x000002be; BYTE $0x00 // movl $2, %esi - LONG $0x64fd8341 // cmpl $100, %r13d - LONG $0x0021820f; WORD $0x0000 // jb LBB32_22, $33(%rip) - LONG $0x000003be; BYTE $0x00 // movl $3, %esi - LONG $0xe8fd8141; WORD $0x0003; BYTE $0x00 // cmpl $1000, %r13d - LONG $0x000f820f; WORD $0x0000 // jb LBB32_22, $15(%rip) - LONG $0x10fd8141; WORD $0x0027; BYTE $0x00 // cmpl $10000, %r13d - LONG $0x000005be; BYTE $0x00 // movl $5, %esi - -LBB32_21: - WORD $0xde83; BYTE $0x00 // sbbl $0, %esi - -LBB32_22: - LONG $0x1e148d46 // leal (%rsi,%r11), %r10d - LONG $0x1e448d42; BYTE $0x05 // leal $5(%rsi,%r11), %eax - WORD $0xf883; BYTE $0x1b // cmpl $27, %eax - LONG $0x0075820f; WORD $0x0000 // jb LBB32_26, $117(%rip) - WORD $0xf089 // movl %esi, %eax - LONG $0x00748d4d; BYTE $0x01 // leaq $1(%r8,%rax), %r14 - LONG $0x10fd8141; WORD $0x0027; BYTE $0x00 // cmpl $10000, %r13d - LONG $0x00f3820f; WORD $0x0000 // jb LBB32_30, $243(%rip) - WORD $0x8944; BYTE $0xe8 // movl %r13d, %eax - LONG $0xb71759bb; BYTE $0xd1 // movl $3518437209, %ebx - LONG $0xd8af0f48 // imulq %rax, %rbx - LONG $0x2debc148 // shrq $45, %rbx - LONG $0xd8f0c369; WORD $0xffff // imull $-10000, %ebx, %eax - WORD $0x0144; BYTE $0xe8 // addl %r13d, %eax - LONG $0x048b840f; WORD $0x0000 // je LBB32_62, $1163(%rip) - WORD $0xc189 // movl %eax, %ecx - LONG $0x1fc96948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rcx, %rcx - LONG $0x25e9c148 // shrq $37, %rcx - WORD $0xd16b; BYTE $0x64 // imull $100, %ecx, %edx - WORD $0xd029 // subl %edx, %eax - LONG $0xc2158d48; WORD $0x003e; BYTE $0x00 // leaq $16066(%rip), %rdx /* _Digits(%rip) */ - LONG $0x4204b70f // movzwl (%rdx,%rax,2), %eax - LONG $0x46894166; BYTE $0xfe // movw %ax, $-2(%r14) - LONG $0x4a04b70f // movzwl (%rdx,%rcx,2), %eax - LONG $0x46894166; BYTE $0xfc // movw %ax, $-4(%r14) - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - LONG $0xfc4e8d49 // leaq $-4(%r14), %rcx - WORD $0xfb83; BYTE $0x64 // cmpl $100, %ebx - LONG $0x00ab830f; WORD $0x0000 // jae LBB32_64, $171(%rip) - -LBB32_31: - WORD $0xda89 // movl %ebx, %edx - LONG $0x0000e8e9; BYTE $0x00 // jmp LBB32_66, $232(%rip) - -LBB32_26: - WORD $0x8941; BYTE $0xf4 // movl %esi, %r12d - WORD $0x8545; BYTE $0xdb // testl %r11d, %r11d - LONG $0x021d880f; WORD $0x0000 // js LBB32_38, $541(%rip) - LONG $0x20348d4b // leaq (%r8,%r12), %rsi - LONG $0x10fd8141; WORD $0x0027; BYTE $0x00 // cmpl $10000, %r13d - LONG $0x028d820f; WORD $0x0000 // jb LBB32_43, $653(%rip) - WORD $0x8944; BYTE $0xe8 // movl %r13d, %eax - LONG $0xb71759b9; BYTE $0xd1 // movl $3518437209, %ecx - LONG $0xc8af0f48 // imulq %rax, %rcx - LONG $0x2de9c148 // shrq $45, %rcx - LONG $0xd8f0c169; WORD $0xffff // imull $-10000, %ecx, %eax - WORD $0x0144; BYTE $0xe8 // addl %r13d, %eax - LONG $0x1fd06948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rax, %rdx - LONG $0x25eac148 // shrq $37, %rdx - WORD $0xda6b; BYTE $0x64 // imull $100, %edx, %ebx - WORD $0xd829 // subl %ebx, %eax - LONG $0x4c1d8d48; WORD $0x003e; BYTE $0x00 // leaq $15948(%rip), %rbx /* _Digits(%rip) */ - LONG $0x4304b70f // movzwl (%rbx,%rax,2), %eax - LONG $0xfe468966 // movw %ax, $-2(%rsi) - LONG $0xfc468d48 // leaq $-4(%rsi), %rax - LONG $0x5314b70f // movzwl (%rbx,%rdx,2), %edx - LONG $0xfc568966 // movw %dx, $-4(%rsi) - WORD $0x8941; BYTE $0xcd // movl %ecx, %r13d - LONG $0x64fd8341 // cmpl $100, %r13d - LONG $0x0249830f; WORD $0x0000 // jae LBB32_44, $585(%rip) - -LBB32_29: - WORD $0x8944; BYTE $0xe9 // movl %r13d, %ecx - LONG $0x000286e9; BYTE $0x00 // jmp LBB32_46, $646(%rip) - -LBB32_16: - WORD $0x394c; BYTE $0xe6 // cmpq %r12, %rsi - LONG $0xffdd8341 // sbbl $-1, %r13d - WORD $0xff41; BYTE $0xc3 // incl %r11d - LONG $0xa0fd8141; WORD $0x0186; BYTE $0x00 // cmpl $100000, %r13d - LONG $0xfe54830f; WORD $0xffff // jae LBB32_13, $-428(%rip) - LONG $0xfffea8e9; BYTE $0xff // jmp LBB32_17, $-344(%rip) - -LBB32_30: - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x894c; BYTE $0xf1 // movq %r14, %rcx - WORD $0x8944; BYTE $0xeb // movl %r13d, %ebx - WORD $0xfb83; BYTE $0x64 // cmpl $100, %ebx - LONG $0xff55820f; WORD $0xffff // jb LBB32_31, $-171(%rip) - -LBB32_64: - WORD $0xff48; BYTE $0xc9 // decq %rcx - LONG $0xeb1d8d4c; WORD $0x003d; BYTE $0x00 // leaq $15851(%rip), %r11 /* _Digits(%rip) */ - QUAD $0x9090909090909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB32_65: - WORD $0xda89 // movl %ebx, %edx - LONG $0x1fd26948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rdx, %rdx - LONG $0x25eac148 // shrq $37, %rdx - WORD $0xc26b; BYTE $0x64 // imull $100, %edx, %eax - WORD $0xde89 // movl %ebx, %esi - WORD $0xc629 // subl %eax, %esi - LONG $0x04b70f41; BYTE $0x73 // movzwl (%r11,%rsi,2), %eax - LONG $0xff418966 // movw %ax, $-1(%rcx) - LONG $0xfec18348 // addq $-2, %rcx - LONG $0x270ffb81; WORD $0x0000 // cmpl $9999, %ebx - WORD $0xd389 // movl %edx, %ebx - LONG $0xffd1870f; WORD $0xffff // ja LBB32_65, $-47(%rip) - -LBB32_66: - LONG $0x01708d49 // leaq $1(%r8), %rsi - WORD $0xfa83; BYTE $0x0a // cmpl $10, %edx - LONG $0x001d820f; WORD $0x0000 // jb LBB32_68, $29(%rip) - WORD $0xd089 // movl %edx, %eax - LONG $0x9b0d8d48; WORD $0x003d; BYTE $0x00 // leaq $15771(%rip), %rcx /* _Digits(%rip) */ - WORD $0x148a; BYTE $0x41 // movb (%rcx,%rax,2), %dl - LONG $0x0141448a // movb $1(%rcx,%rax,2), %al - LONG $0x01508841 // movb %dl, $1(%r8) - LONG $0x02408841 // movb %al, $2(%r8) - LONG $0x000005e9; BYTE $0x00 // jmp LBB32_69, $5(%rip) - -LBB32_68: - WORD $0xc280; BYTE $0x30 // addb $48, %dl - WORD $0x1688 // movb %dl, (%rsi) - -LBB32_69: - WORD $0x294d; BYTE $0xce // subq %r9, %r14 - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB32_70: - LONG $0xff7e8041; BYTE $0x30 // cmpb $48, $-1(%r14) - LONG $0xff768d4d // leaq $-1(%r14), %r14 - LONG $0xfff1840f; WORD $0xffff // je LBB32_70, $-15(%rip) - WORD $0x8841; BYTE $0x10 // movb %dl, (%r8) - LONG $0x01468d49 // leaq $1(%r14), %rax - WORD $0x8948; BYTE $0xc1 // movq %rax, %rcx - WORD $0x2948; BYTE $0xf1 // subq %rsi, %rcx - LONG $0x02f98348 // cmpq $2, %rcx - LONG $0x00068c0f; WORD $0x0000 // jl LBB32_73, $6(%rip) - WORD $0x06c6; BYTE $0x2e // movb $46, (%rsi) - WORD $0x8949; BYTE $0xc6 // movq %rax, %r14 - -LBB32_73: - LONG $0x6506c641 // movb $101, (%r14) - LONG $0xff428d41 // leal $-1(%r10), %eax - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x01228e0f; WORD $0x0000 // jle LBB32_76, $290(%rip) - LONG $0x0146c641; BYTE $0x2b // movb $43, $1(%r14) - WORD $0xf883; BYTE $0x0a // cmpl $10, %eax - LONG $0x01248c0f; WORD $0x0000 // jl LBB32_77, $292(%rip) - -LBB32_75: - WORD $0x9848 // cltq - LONG $0x1c0d8d48; WORD $0x003d; BYTE $0x00 // leaq $15644(%rip), %rcx /* _Digits(%rip) */ - LONG $0x4104b70f // movzwl (%rcx,%rax,2), %eax - LONG $0x46894166; BYTE $0x02 // movw %ax, $2(%r14) - LONG $0x04c68349 // addq $4, %r14 - WORD $0x894d; BYTE $0xf0 // movq %r14, %r8 - LONG $0x000889e9; BYTE $0x00 // jmp LBB32_136, $2185(%rip) - -LBB32_32: - WORD $0xeed3 // shrl %cl, %esi - LONG $0x86a0fe81; WORD $0x0001 // cmpl $100000, %esi - LONG $0x01f1820f; WORD $0x0000 // jb LBB32_52, $497(%rip) - LONG $0x000006b8; BYTE $0x00 // movl $6, %eax - LONG $0x4240fe81; WORD $0x000f // cmpl $1000000, %esi - LONG $0x0020820f; WORD $0x0000 // jb LBB32_36, $32(%rip) - LONG $0x000007b8; BYTE $0x00 // movl $7, %eax - LONG $0x9680fe81; WORD $0x0098 // cmpl $10000000, %esi - LONG $0x000f820f; WORD $0x0000 // jb LBB32_36, $15(%rip) - LONG $0xe100fe81; WORD $0x05f5 // cmpl $100000000, %esi - LONG $0x000009b8; BYTE $0x00 // movl $9, %eax - LONG $0x00d88348 // sbbq $0, %rax - -LBB32_36: - WORD $0x014c; BYTE $0xc0 // addq %r8, %rax - -LBB32_37: - WORD $0xf189 // movl %esi, %ecx - LONG $0xb71759ba; BYTE $0xd1 // movl $3518437209, %edx - LONG $0xd1af0f48 // imulq %rcx, %rdx - LONG $0x2deac148 // shrq $45, %rdx - LONG $0xd8f0ca69; WORD $0xffff // imull $-10000, %edx, %ecx - WORD $0xf101 // addl %esi, %ecx - LONG $0x1ff16948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rcx, %rsi - LONG $0x25eec148 // shrq $37, %rsi - WORD $0xde6b; BYTE $0x64 // imull $100, %esi, %ebx - WORD $0xd929 // subl %ebx, %ecx - LONG $0x971d8d48; WORD $0x003c; BYTE $0x00 // leaq $15511(%rip), %rbx /* _Digits(%rip) */ - LONG $0x4b0cb70f // movzwl (%rbx,%rcx,2), %ecx - LONG $0xfe488966 // movw %cx, $-2(%rax) - LONG $0x730cb70f // movzwl (%rbx,%rsi,2), %ecx - LONG $0xfc488966 // movw %cx, $-4(%rax) - WORD $0x8949; BYTE $0xc1 // movq %rax, %r9 - LONG $0xfcc08348 // addq $-4, %rax - WORD $0xd689 // movl %edx, %esi - WORD $0xfe83; BYTE $0x64 // cmpl $100, %esi - LONG $0x01ac830f; WORD $0x0000 // jae LBB32_56, $428(%rip) - LONG $0x0001efe9; BYTE $0x00 // jmp LBB32_58, $495(%rip) - -LBB32_38: - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x04878f0f; WORD $0x0000 // jg LBB32_96, $1159(%rip) - LONG $0x00c74166; WORD $0x2e30 // movw $11824, (%r8) - LONG $0x02c08349 // addq $2, %r8 - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x0474890f; WORD $0x0000 // jns LBB32_96, $1140(%rip) - WORD $0xd6f7 // notl %esi - WORD $0x2944; BYTE $0xde // subl %r11d, %esi - WORD $0x3145; BYTE $0xff // xorl %r15d, %r15d - WORD $0xfe83; BYTE $0x7f // cmpl $127, %esi - LONG $0x043e820f; WORD $0x0000 // jb LBB32_94, $1086(%rip) - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x8949; BYTE $0xf7 // movq %rsi, %r15 - LONG $0x80e78349 // andq $-128, %r15 - LONG $0x80478d49 // leaq $-128(%r15), %rax - WORD $0x8949; BYTE $0xc6 // movq %rax, %r14 - LONG $0x07eec149 // shrq $7, %r14 - WORD $0xff49; BYTE $0xc6 // incq %r14 - WORD $0x8945; BYTE $0xf3 // movl %r14d, %r11d - LONG $0x03e38341 // andl $3, %r11d - LONG $0x01803d48; WORD $0x0000 // cmpq $384, %rax - LONG $0x0321830f; WORD $0x0000 // jae LBB32_88, $801(%rip) - WORD $0xdb31 // xorl %ebx, %ebx - LONG $0x0003c4e9; BYTE $0x00 // jmp LBB32_90, $964(%rip) - -LBB32_76: - LONG $0x0146c641; BYTE $0x2d // movb $45, $1(%r14) - WORD $0xd8f7 // negl %eax - WORD $0xf883; BYTE $0x0a // cmpl $10, %eax - LONG $0xfedc8d0f; WORD $0xffff // jge LBB32_75, $-292(%rip) - -LBB32_77: - WORD $0x3004 // addb $48, %al - LONG $0x02468841 // movb %al, $2(%r14) - LONG $0x03c68349 // addq $3, %r14 - WORD $0x894d; BYTE $0xf0 // movq %r14, %r8 - LONG $0x000771e9; BYTE $0x00 // jmp LBB32_136, $1905(%rip) - -LBB32_43: - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - LONG $0x64fd8341 // cmpl $100, %r13d - LONG $0xfdb7820f; WORD $0xffff // jb LBB32_29, $-585(%rip) - -LBB32_44: - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0xd81d8d4c; WORD $0x003b; BYTE $0x00 // leaq $15320(%rip), %r11 /* _Digits(%rip) */ - QUAD $0x9090909090909090 // .p2align 4, 0x90 - -LBB32_45: - WORD $0x8944; BYTE $0xe9 // movl %r13d, %ecx - LONG $0x1fc96948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rcx, %rcx - LONG $0x25e9c148 // shrq $37, %rcx - WORD $0xd96b; BYTE $0x64 // imull $100, %ecx, %ebx - WORD $0x8944; BYTE $0xea // movl %r13d, %edx - WORD $0xda29 // subl %ebx, %edx - LONG $0x14b70f41; BYTE $0x53 // movzwl (%r11,%rdx,2), %edx - LONG $0xff508966 // movw %dx, $-1(%rax) - LONG $0xfec08348 // addq $-2, %rax - LONG $0x0ffd8141; WORD $0x0027; BYTE $0x00 // cmpl $9999, %r13d - WORD $0x8941; BYTE $0xcd // movl %ecx, %r13d - LONG $0xffcd870f; WORD $0xffff // ja LBB32_45, $-51(%rip) - -LBB32_46: - WORD $0x6349; BYTE $0xc2 // movslq %r10d, %rax - WORD $0xf983; BYTE $0x0a // cmpl $10, %ecx - LONG $0x0022820f; WORD $0x0000 // jb LBB32_48, $34(%rip) - WORD $0xc989 // movl %ecx, %ecx - LONG $0x88158d48; WORD $0x003b; BYTE $0x00 // leaq $15240(%rip), %rdx /* _Digits(%rip) */ - LONG $0x4a0cb70f // movzwl (%rdx,%rcx,2), %ecx - LONG $0x08894166 // movw %cx, (%r8) - WORD $0x0149; BYTE $0xc0 // addq %rax, %r8 - WORD $0x3949; BYTE $0xc4 // cmpq %rax, %r12 - LONG $0x00178c0f; WORD $0x0000 // jl LBB32_49, $23(%rip) - LONG $0x0006f1e9; BYTE $0x00 // jmp LBB32_136, $1777(%rip) - -LBB32_48: - WORD $0xc180; BYTE $0x30 // addb $48, %cl - WORD $0x8841; BYTE $0x08 // movb %cl, (%r8) - WORD $0x0149; BYTE $0xc0 // addq %rax, %r8 - WORD $0x3949; BYTE $0xc4 // cmpq %rax, %r12 - LONG $0x06df8d0f; WORD $0x0000 // jge LBB32_136, $1759(%rip) - -LBB32_49: - LONG $0x21048d4b // leaq (%r9,%r12), %rax - LONG $0x075c8d4c; BYTE $0x01 // leaq $1(%rdi,%rax), %r11 - WORD $0x394d; BYTE $0xc3 // cmpq %r8, %r11 - LONG $0xd8460f4d // cmovbeq %r8, %r11 - LONG $0x0f0c8d4a // leaq (%rdi,%r9), %rcx - WORD $0x014c; BYTE $0xe1 // addq %r12, %rcx - WORD $0x2949; BYTE $0xcb // subq %rcx, %r11 - LONG $0x80fb8149; WORD $0x0000; BYTE $0x00 // cmpq $128, %r11 - LONG $0x0206820f; WORD $0x0000 // jb LBB32_85, $518(%rip) - WORD $0x894d; BYTE $0xda // movq %r11, %r10 - LONG $0x80e28349 // andq $-128, %r10 - LONG $0x804a8d49 // leaq $-128(%r10), %rcx - WORD $0x8948; BYTE $0xcb // movq %rcx, %rbx - LONG $0x07ebc148 // shrq $7, %rbx - WORD $0xff48; BYTE $0xc3 // incq %rbx - WORD $0xda89 // movl %ebx, %edx - WORD $0xe283; BYTE $0x03 // andl $3, %edx - LONG $0x80f98148; WORD $0x0001; BYTE $0x00 // cmpq $384, %rcx - LONG $0x00d7830f; WORD $0x0000 // jae LBB32_78, $215(%rip) - WORD $0xc031 // xorl %eax, %eax - LONG $0x000188e9; BYTE $0x00 // jmp LBB32_80, $392(%rip) - -LBB32_52: - LONG $0x0001b941; WORD $0x0000 // movl $1, %r9d - WORD $0xfe83; BYTE $0x0a // cmpl $10, %esi - LONG $0x0021820f; WORD $0x0000 // jb LBB32_55, $33(%rip) - LONG $0x0002b941; WORD $0x0000 // movl $2, %r9d - WORD $0xfe83; BYTE $0x64 // cmpl $100, %esi - LONG $0x0012820f; WORD $0x0000 // jb LBB32_55, $18(%rip) - LONG $0x0003b941; WORD $0x0000 // movl $3, %r9d - LONG $0x03e8fe81; WORD $0x0000 // cmpl $1000, %esi - LONG $0x01bc830f; WORD $0x0000 // jae LBB32_86, $444(%rip) - -LBB32_55: - WORD $0x014d; BYTE $0xc1 // addq %r8, %r9 - WORD $0x894c; BYTE $0xc8 // movq %r9, %rax - WORD $0xfe83; BYTE $0x64 // cmpl $100, %esi - LONG $0x0048820f; WORD $0x0000 // jb LBB32_58, $72(%rip) - -LBB32_56: - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0xbf158d4c; WORD $0x003a; BYTE $0x00 // leaq $15039(%rip), %r10 /* _Digits(%rip) */ - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB32_57: - WORD $0xf389 // movl %esi, %ebx - WORD $0xf689 // movl %esi, %esi - LONG $0x1ff66948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rsi, %rsi - LONG $0x25eec148 // shrq $37, %rsi - WORD $0xce6b; BYTE $0x64 // imull $100, %esi, %ecx - WORD $0xda89 // movl %ebx, %edx - WORD $0xca29 // subl %ecx, %edx - LONG $0x0cb70f41; BYTE $0x52 // movzwl (%r10,%rdx,2), %ecx - LONG $0xff488966 // movw %cx, $-1(%rax) - LONG $0xfec08348 // addq $-2, %rax - LONG $0x270ffb81; WORD $0x0000 // cmpl $9999, %ebx - LONG $0xffd1870f; WORD $0xffff // ja LBB32_57, $-47(%rip) - -LBB32_58: - WORD $0xfe83; BYTE $0x0a // cmpl $10, %esi - LONG $0x0016820f; WORD $0x0000 // jb LBB32_60, $22(%rip) - WORD $0xf089 // movl %esi, %eax - LONG $0x6f0d8d48; WORD $0x003a; BYTE $0x00 // leaq $14959(%rip), %rcx /* _Digits(%rip) */ - LONG $0x4104b70f // movzwl (%rcx,%rax,2), %eax - LONG $0x00894166 // movw %ax, (%r8) - LONG $0x000007e9; BYTE $0x00 // jmp LBB32_61, $7(%rip) - -LBB32_60: - LONG $0x30c68040 // addb $48, %sil - WORD $0x8841; BYTE $0x30 // movb %sil, (%r8) - -LBB32_61: - WORD $0x2941; BYTE $0xf9 // subl %edi, %r9d - WORD $0x8945; BYTE $0xc8 // movl %r9d, %r8d - LONG $0x0005d5e9; BYTE $0x00 // jmp LBB32_137, $1493(%rip) - -LBB32_62: - LONG $0x0004b941; WORD $0x0000 // movl $4, %r9d - LONG $0xfc4e8d49 // leaq $-4(%r14), %rcx - WORD $0xfb83; BYTE $0x64 // cmpl $100, %ebx - LONG $0xfb9d820f; WORD $0xffff // jb LBB32_31, $-1123(%rip) - LONG $0xfffc43e9; BYTE $0xff // jmp LBB32_64, $-957(%rip) - -LBB32_78: - QUAD $0x000001e0078c8d48 // leaq $480(%rdi,%rax), %rcx - LONG $0xfce38348 // andq $-4, %rbx - WORD $0xf748; BYTE $0xdb // negq %rbx - WORD $0xc031 // xorl %eax, %eax - QUAD $0xfffff87f056ffdc5 // vmovdqa $-1921(%rip), %ymm0 /* LCPI32_0(%rip) */ - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB32_79: - QUAD $0xfffe2001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-480(%rcx,%rax) - QUAD $0xfffe4001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-448(%rcx,%rax) - QUAD $0xfffe6001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-416(%rcx,%rax) - QUAD $0xfffe8001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-384(%rcx,%rax) - QUAD $0xfffea001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-352(%rcx,%rax) - QUAD $0xfffec001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-320(%rcx,%rax) - QUAD $0xfffee001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-288(%rcx,%rax) - QUAD $0xffff0001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-256(%rcx,%rax) - QUAD $0xffff2001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-224(%rcx,%rax) - QUAD $0xffff4001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-192(%rcx,%rax) - QUAD $0xffff6001847ffec5; BYTE $0xff // vmovdqu %ymm0, $-160(%rcx,%rax) - LONG $0x447ffec5; WORD $0x8001 // vmovdqu %ymm0, $-128(%rcx,%rax) - LONG $0x447ffec5; WORD $0xa001 // vmovdqu %ymm0, $-96(%rcx,%rax) - LONG $0x447ffec5; WORD $0xc001 // vmovdqu %ymm0, $-64(%rcx,%rax) - LONG $0x447ffec5; WORD $0xe001 // vmovdqu %ymm0, $-32(%rcx,%rax) - LONG $0x047ffec5; BYTE $0x01 // vmovdqu %ymm0, (%rcx,%rax) - LONG $0x02000548; WORD $0x0000 // addq $512, %rax - LONG $0x04c38348 // addq $4, %rbx - LONG $0xff70850f; WORD $0xffff // jne LBB32_79, $-144(%rip) - -LBB32_80: - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0x0037840f; WORD $0x0000 // je LBB32_83, $55(%rip) - WORD $0x014c; BYTE $0xc8 // addq %r9, %rax - WORD $0x014c; BYTE $0xe0 // addq %r12, %rax - LONG $0x07448d48; BYTE $0x60 // leaq $96(%rdi,%rax), %rax - WORD $0xf748; BYTE $0xda // negq %rdx - QUAD $0xfffff7c1056ffdc5 // vmovdqa $-2111(%rip), %ymm0 /* LCPI32_0(%rip) */ - BYTE $0x90 // .p2align 4, 0x90 - -LBB32_82: - LONG $0x407ffec5; BYTE $0xa0 // vmovdqu %ymm0, $-96(%rax) - LONG $0x407ffec5; BYTE $0xc0 // vmovdqu %ymm0, $-64(%rax) - LONG $0x407ffec5; BYTE $0xe0 // vmovdqu %ymm0, $-32(%rax) - LONG $0x007ffec5 // vmovdqu %ymm0, (%rax) - LONG $0x80e88348 // subq $-128, %rax - WORD $0xff48; BYTE $0xc2 // incq %rdx - LONG $0xffe0850f; WORD $0xffff // jne LBB32_82, $-32(%rip) - -LBB32_83: - WORD $0x394d; BYTE $0xda // cmpq %r11, %r10 - LONG $0x04b9840f; WORD $0x0000 // je LBB32_136, $1209(%rip) - WORD $0x014c; BYTE $0xd6 // addq %r10, %rsi - LONG $0x90909090 // .p2align 4, 0x90 - -LBB32_85: - WORD $0x06c6; BYTE $0x30 // movb $48, (%rsi) - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x394c; BYTE $0xc6 // cmpq %r8, %rsi - LONG $0xfff1820f; WORD $0xffff // jb LBB32_85, $-15(%rip) - LONG $0x00049ee9; BYTE $0x00 // jmp LBB32_136, $1182(%rip) - -LBB32_86: - LONG $0x2710fe81; WORD $0x0000 // cmpl $10000, %esi - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - LONG $0x00d88348 // sbbq $0, %rax - LONG $0x05c08348 // addq $5, %rax - LONG $0x2710fe81; WORD $0x0000 // cmpl $10000, %esi - LONG $0xfc3a830f; WORD $0xffff // jae LBB32_37, $-966(%rip) - WORD $0x8949; BYTE $0xc1 // movq %rax, %r9 - LONG $0xfffe2ee9; BYTE $0xff // jmp LBB32_56, $-466(%rip) - -LBB32_88: - QUAD $0x000001e239848d49 // leaq $482(%r9,%rdi), %rax - LONG $0xfce68349 // andq $-4, %r14 - WORD $0xf749; BYTE $0xde // negq %r14 - WORD $0xdb31 // xorl %ebx, %ebx - QUAD $0xfffff73e056ffdc5 // vmovdqa $-2242(%rip), %ymm0 /* LCPI32_0(%rip) */ - -LBB32_89: - QUAD $0xfffe2018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-480(%rax,%rbx) - QUAD $0xfffe4018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-448(%rax,%rbx) - QUAD $0xfffe6018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-416(%rax,%rbx) - QUAD $0xfffe8018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-384(%rax,%rbx) - QUAD $0xfffea018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-352(%rax,%rbx) - QUAD $0xfffec018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-320(%rax,%rbx) - QUAD $0xfffee018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-288(%rax,%rbx) - QUAD $0xffff0018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-256(%rax,%rbx) - QUAD $0xffff2018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-224(%rax,%rbx) - QUAD $0xffff4018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-192(%rax,%rbx) - QUAD $0xffff6018847ffec5; BYTE $0xff // vmovdqu %ymm0, $-160(%rax,%rbx) - LONG $0x447ffec5; WORD $0x8018 // vmovdqu %ymm0, $-128(%rax,%rbx) - LONG $0x447ffec5; WORD $0xa018 // vmovdqu %ymm0, $-96(%rax,%rbx) - LONG $0x447ffec5; WORD $0xc018 // vmovdqu %ymm0, $-64(%rax,%rbx) - LONG $0x447ffec5; WORD $0xe018 // vmovdqu %ymm0, $-32(%rax,%rbx) - LONG $0x047ffec5; BYTE $0x18 // vmovdqu %ymm0, (%rax,%rbx) - LONG $0x00c38148; WORD $0x0002; BYTE $0x00 // addq $512, %rbx - LONG $0x04c68349 // addq $4, %r14 - LONG $0xff6f850f; WORD $0xffff // jne LBB32_89, $-145(%rip) - -LBB32_90: - WORD $0x854d; BYTE $0xdb // testq %r11, %r11 - LONG $0x0033840f; WORD $0x0000 // je LBB32_93, $51(%rip) - WORD $0x014c; BYTE $0xcb // addq %r9, %rbx - LONG $0x1f448d48; BYTE $0x62 // leaq $98(%rdi,%rbx), %rax - WORD $0xf749; BYTE $0xdb // negq %r11 - QUAD $0xfffff691056ffdc5 // vmovdqa $-2415(%rip), %ymm0 /* LCPI32_0(%rip) */ - -LBB32_92: - LONG $0x407ffec5; BYTE $0xa0 // vmovdqu %ymm0, $-96(%rax) - LONG $0x407ffec5; BYTE $0xc0 // vmovdqu %ymm0, $-64(%rax) - LONG $0x407ffec5; BYTE $0xe0 // vmovdqu %ymm0, $-32(%rax) - LONG $0x007ffec5 // vmovdqu %ymm0, (%rax) - LONG $0x80e88348 // subq $-128, %rax - WORD $0xff49; BYTE $0xc3 // incq %r11 - LONG $0xffe0850f; WORD $0xffff // jne LBB32_92, $-32(%rip) - -LBB32_93: - WORD $0x014d; BYTE $0xf8 // addq %r15, %r8 - WORD $0x394c; BYTE $0xfe // cmpq %r15, %rsi - LONG $0x0025840f; WORD $0x0000 // je LBB32_96, $37(%rip) - -LBB32_94: - WORD $0x0145; BYTE $0xd7 // addl %r10d, %r15d - WORD $0xf741; BYTE $0xdf // negl %r15d - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB32_95: - LONG $0x3000c641 // movb $48, (%r8) - WORD $0xff49; BYTE $0xc0 // incq %r8 - WORD $0xff41; BYTE $0xcf // decl %r15d - LONG $0xfff0850f; WORD $0xffff // jne LBB32_95, $-16(%rip) - -LBB32_96: - LONG $0x20048d4b // leaq (%r8,%r12), %rax - LONG $0x10fd8141; WORD $0x0027; BYTE $0x00 // cmpl $10000, %r13d - LONG $0x0063820f; WORD $0x0000 // jb LBB32_99, $99(%rip) - WORD $0x8944; BYTE $0xe9 // movl %r13d, %ecx - LONG $0x1759bb41; WORD $0xd1b7 // movl $3518437209, %r11d - LONG $0xd9af0f4c // imulq %rcx, %r11 - LONG $0x2debc149 // shrq $45, %r11 - LONG $0xf0cb6941; WORD $0xffd8; BYTE $0xff // imull $-10000, %r11d, %ecx - WORD $0x0144; BYTE $0xe9 // addl %r13d, %ecx - LONG $0x0190840f; WORD $0x0000 // je LBB32_101, $400(%rip) - WORD $0xca89 // movl %ecx, %edx - LONG $0x1fd26948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rdx, %rdx - LONG $0x25eac148 // shrq $37, %rdx - WORD $0xda6b; BYTE $0x64 // imull $100, %edx, %ebx - WORD $0xd929 // subl %ebx, %ecx - LONG $0x951d8d48; WORD $0x0037; BYTE $0x00 // leaq $14229(%rip), %rbx /* _Digits(%rip) */ - LONG $0x4b0cb70f // movzwl (%rbx,%rcx,2), %ecx - LONG $0xfe488966 // movw %cx, $-2(%rax) - LONG $0x530cb70f // movzwl (%rbx,%rdx,2), %ecx - LONG $0xfc488966 // movw %cx, $-4(%rax) - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - LONG $0xfcc08348 // addq $-4, %rax - LONG $0x64fb8341 // cmpl $100, %r11d - LONG $0x0018830f; WORD $0x0000 // jae LBB32_103, $24(%rip) - -LBB32_100: - WORD $0x8944; BYTE $0xd9 // movl %r11d, %ecx - LONG $0x00004ee9; BYTE $0x00 // jmp LBB32_105, $78(%rip) - -LBB32_99: - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x8945; BYTE $0xeb // movl %r13d, %r11d - LONG $0x64fb8341 // cmpl $100, %r11d - LONG $0xffe8820f; WORD $0xffff // jb LBB32_100, $-24(%rip) - -LBB32_103: - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0x52158d48; WORD $0x0037; BYTE $0x00 // leaq $14162(%rip), %rdx /* _Digits(%rip) */ - WORD $0x9090 // .p2align 4, 0x90 - -LBB32_104: - WORD $0x8944; BYTE $0xd9 // movl %r11d, %ecx - LONG $0x1fc96948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rcx, %rcx - LONG $0x25e9c148 // shrq $37, %rcx - WORD $0xd96b; BYTE $0x64 // imull $100, %ecx, %ebx - WORD $0x8944; BYTE $0xde // movl %r11d, %esi - WORD $0xde29 // subl %ebx, %esi - LONG $0x7234b70f // movzwl (%rdx,%rsi,2), %esi - LONG $0xff708966 // movw %si, $-1(%rax) - LONG $0xfec08348 // addq $-2, %rax - LONG $0x0ffb8141; WORD $0x0027; BYTE $0x00 // cmpl $9999, %r11d - WORD $0x8941; BYTE $0xcb // movl %ecx, %r11d - LONG $0xffce870f; WORD $0xffff // ja LBB32_104, $-50(%rip) - -LBB32_105: - WORD $0xf983; BYTE $0x0a // cmpl $10, %ecx - LONG $0x0016820f; WORD $0x0000 // jb LBB32_107, $22(%rip) - WORD $0xc889 // movl %ecx, %eax - LONG $0x0c0d8d48; WORD $0x0037; BYTE $0x00 // leaq $14092(%rip), %rcx /* _Digits(%rip) */ - LONG $0x4104b70f // movzwl (%rcx,%rax,2), %eax - LONG $0x00894166 // movw %ax, (%r8) - LONG $0x000006e9; BYTE $0x00 // jmp LBB32_108, $6(%rip) - -LBB32_107: - WORD $0xc180; BYTE $0x30 // addb $48, %cl - WORD $0x8841; BYTE $0x08 // movb %cl, (%r8) - -LBB32_108: - WORD $0x294d; BYTE $0xcc // subq %r9, %r12 - LONG $0x24548d49; BYTE $0x01 // leaq $1(%r12), %rdx - LONG $0x24748d49; BYTE $0x61 // leaq $97(%r12), %rsi - LONG $0x24448d49; BYTE $0x02 // leaq $2(%r12), %rax - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB32_109: - WORD $0xff48; BYTE $0xce // decq %rsi - WORD $0xff48; BYTE $0xca // decq %rdx - WORD $0xff48; BYTE $0xc8 // decq %rax - LONG $0x207c8043; WORD $0x30ff // cmpb $48, $-1(%r8,%r12) - LONG $0x24648d4d; BYTE $0xff // leaq $-1(%r12), %r12 - LONG $0xffe6840f; WORD $0xffff // je LBB32_109, $-26(%rip) - LONG $0x100c8d4d // leaq (%r8,%rdx), %r9 - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x00938e0f; WORD $0x0000 // jle LBB32_115, $147(%rip) - WORD $0x8944; BYTE $0xc9 // movl %r9d, %ecx - WORD $0x2944; BYTE $0xc1 // subl %r8d, %ecx - WORD $0xcb89 // movl %ecx, %ebx - WORD $0x2944; BYTE $0xd3 // subl %r10d, %ebx - LONG $0x00278e0f; WORD $0x0000 // jle LBB32_116, $39(%rip) - WORD $0xdb85 // testl %ebx, %ebx - LONG $0x00fa8e0f; WORD $0x0000 // jle LBB32_127, $250(%rip) - WORD $0x8941; BYTE $0xdb // movl %ebx, %r11d - LONG $0xff4b8d49 // leaq $-1(%r11), %rcx - WORD $0x8945; BYTE $0xd9 // movl %r11d, %r9d - LONG $0x03e18341 // andl $3, %r9d - LONG $0x03f98348 // cmpq $3, %rcx - LONG $0x0083830f; WORD $0x0000 // jae LBB32_121, $131(%rip) - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x0000ade9; BYTE $0x00 // jmp LBB32_124, $173(%rip) - -LBB32_116: - WORD $0x8945; BYTE $0xd6 // movl %r10d, %r14d - WORD $0x2941; BYTE $0xce // subl %ecx, %r14d - LONG $0x004f8e0f; WORD $0x0000 // jle LBB32_115, $79(%rip) - WORD $0x0145; BYTE $0xc2 // addl %r8d, %r10d - WORD $0x8945; BYTE $0xcb // movl %r9d, %r11d - WORD $0xf741; BYTE $0xd3 // notl %r11d - WORD $0x0145; BYTE $0xd3 // addl %r10d, %r11d - WORD $0xc031 // xorl %eax, %eax - LONG $0x7efb8341 // cmpl $126, %r11d - LONG $0x01bd860f; WORD $0x0000 // jbe LBB32_134, $445(%rip) - WORD $0xff49; BYTE $0xc3 // incq %r11 - WORD $0x894c; BYTE $0xd8 // movq %r11, %rax - LONG $0x80e08348 // andq $-128, %rax - LONG $0x000c8d4d // leaq (%r8,%rax), %r9 - LONG $0x80488d48 // leaq $-128(%rax), %rcx - WORD $0x8949; BYTE $0xcf // movq %rcx, %r15 - LONG $0x07efc149 // shrq $7, %r15 - WORD $0xff49; BYTE $0xc7 // incq %r15 - WORD $0x8945; BYTE $0xfa // movl %r15d, %r10d - LONG $0x03e28341 // andl $3, %r10d - LONG $0x80f98148; WORD $0x0001; BYTE $0x00 // cmpq $384, %rcx - LONG $0x0097830f; WORD $0x0000 // jae LBB32_128, $151(%rip) - WORD $0xc931 // xorl %ecx, %ecx - LONG $0x000139e9; BYTE $0x00 // jmp LBB32_130, $313(%rip) - -LBB32_115: - WORD $0x894d; BYTE $0xc8 // movq %r9, %r8 - LONG $0x0001a0e9; BYTE $0x00 // jmp LBB32_136, $416(%rip) - -LBB32_101: - LONG $0x0004b941; WORD $0x0000 // movl $4, %r9d - LONG $0xfcc08348 // addq $-4, %rax - LONG $0x64fb8341 // cmpl $100, %r11d - LONG $0xfe96820f; WORD $0xffff // jb LBB32_100, $-362(%rip) - LONG $0xfffea9e9; BYTE $0xff // jmp LBB32_103, $-343(%rip) - -LBB32_121: - LONG $0xfce38341 // andl $-4, %r11d - WORD $0xf749; BYTE $0xdb // negq %r11 - WORD $0xc931 // xorl %ecx, %ecx - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB32_122: - LONG $0x081c8d49 // leaq (%r8,%rcx), %rbx - LONG $0xfc1a748b // movl $-4(%rdx,%rbx), %esi - LONG $0xfd1a7489 // movl %esi, $-3(%rdx,%rbx) - LONG $0xfcc18348 // addq $-4, %rcx - WORD $0x3949; BYTE $0xcb // cmpq %rcx, %r11 - LONG $0xffe7850f; WORD $0xffff // jne LBB32_122, $-25(%rip) - WORD $0xf748; BYTE $0xd9 // negq %rcx - -LBB32_124: - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x0025840f; WORD $0x0000 // je LBB32_127, $37(%rip) - WORD $0xf749; BYTE $0xd9 // negq %r9 - WORD $0x894c; BYTE $0xc2 // movq %r8, %rdx - WORD $0x2948; BYTE $0xca // subq %rcx, %rdx - WORD $0xc931 // xorl %ecx, %ecx - - // .p2align 4, 0x90 -LBB32_126: - LONG $0x0a348d48 // leaq (%rdx,%rcx), %rsi - LONG $0x1cb60f41; BYTE $0x34 // movzbl (%r12,%rsi), %ebx - LONG $0x345c8841; BYTE $0x01 // movb %bl, $1(%r12,%rsi) - WORD $0xff48; BYTE $0xc9 // decq %rcx - WORD $0x3949; BYTE $0xc9 // cmpq %rcx, %r9 - LONG $0xffe6850f; WORD $0xffff // jne LBB32_126, $-26(%rip) - -LBB32_127: - WORD $0x6349; BYTE $0xca // movslq %r10d, %rcx - LONG $0x0804c641; BYTE $0x2e // movb $46, (%r8,%rcx) - WORD $0x0149; BYTE $0xc0 // addq %rax, %r8 - LONG $0x000118e9; BYTE $0x00 // jmp LBB32_136, $280(%rip) - -LBB32_128: - LONG $0xfce78349 // andq $-4, %r15 - WORD $0xf749; BYTE $0xdf // negq %r15 - WORD $0xc931 // xorl %ecx, %ecx - QUAD $0xfffff3e5056ffdc5 // vmovdqa $-3099(%rip), %ymm0 /* LCPI32_0(%rip) */ - -LBB32_129: - LONG $0x081c8d49 // leaq (%r8,%rcx), %rbx - LONG $0x047ffec5; BYTE $0x1a // vmovdqu %ymm0, (%rdx,%rbx) - LONG $0x447ffec5; WORD $0x201a // vmovdqu %ymm0, $32(%rdx,%rbx) - LONG $0x447ffec5; WORD $0x401a // vmovdqu %ymm0, $64(%rdx,%rbx) - LONG $0x447ffec5; WORD $0x601a // vmovdqu %ymm0, $96(%rdx,%rbx) - QUAD $0x0000801a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $128(%rdx,%rbx) - QUAD $0x0000a01a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $160(%rdx,%rbx) - QUAD $0x0000c01a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $192(%rdx,%rbx) - QUAD $0x0000e01a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $224(%rdx,%rbx) - QUAD $0x0001001a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $256(%rdx,%rbx) - QUAD $0x0001201a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $288(%rdx,%rbx) - QUAD $0x0001401a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $320(%rdx,%rbx) - QUAD $0x0001601a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $352(%rdx,%rbx) - QUAD $0x0001801a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $384(%rdx,%rbx) - QUAD $0x0001a01a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $416(%rdx,%rbx) - QUAD $0x0001c01a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $448(%rdx,%rbx) - QUAD $0x0001e01a847ffec5; BYTE $0x00 // vmovdqu %ymm0, $480(%rdx,%rbx) - LONG $0x00c18148; WORD $0x0002; BYTE $0x00 // addq $512, %rcx - LONG $0x04c78349 // addq $4, %r15 - LONG $0xff68850f; WORD $0xffff // jne LBB32_129, $-152(%rip) - -LBB32_130: - WORD $0x0149; BYTE $0xd1 // addq %rdx, %r9 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0x0035840f; WORD $0x0000 // je LBB32_133, $53(%rip) - WORD $0x0149; BYTE $0xc8 // addq %rcx, %r8 - WORD $0x0149; BYTE $0xf0 // addq %rsi, %r8 - WORD $0xf749; BYTE $0xda // negq %r10 - QUAD $0xfffff330056ffdc5 // vmovdqa $-3280(%rip), %ymm0 /* LCPI32_0(%rip) */ - -LBB32_132: - LONG $0x7f7ec1c4; WORD $0xa040 // vmovdqu %ymm0, $-96(%r8) - LONG $0x7f7ec1c4; WORD $0xc040 // vmovdqu %ymm0, $-64(%r8) - LONG $0x7f7ec1c4; WORD $0xe040 // vmovdqu %ymm0, $-32(%r8) - LONG $0x7f7ec1c4; BYTE $0x00 // vmovdqu %ymm0, (%r8) - LONG $0x80e88349 // subq $-128, %r8 - WORD $0xff49; BYTE $0xc2 // incq %r10 - LONG $0xffdc850f; WORD $0xffff // jne LBB32_132, $-36(%rip) - -LBB32_133: - WORD $0x894d; BYTE $0xc8 // movq %r9, %r8 - WORD $0x3949; BYTE $0xc3 // cmpq %rax, %r11 - LONG $0x0022840f; WORD $0x0000 // je LBB32_136, $34(%rip) - -LBB32_134: - WORD $0x894d; BYTE $0xc8 // movq %r9, %r8 - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB32_135: - LONG $0x3000c641 // movb $48, (%r8) - WORD $0xff49; BYTE $0xc0 // incq %r8 - WORD $0xc0ff // incl %eax - WORD $0x3944; BYTE $0xf0 // cmpl %r14d, %eax - LONG $0xffee8c0f; WORD $0xffff // jl LBB32_135, $-18(%rip) - -LBB32_136: - WORD $0x2941; BYTE $0xf8 // subl %edi, %r8d - -LBB32_137: - WORD $0x8944; BYTE $0xc0 // movl %r8d, %eax - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB32_138: - WORD $0x3145; BYTE $0xc0 // xorl %r8d, %r8d - LONG $0xffffe7e9; BYTE $0xff // jmp LBB32_137, $-25(%rip) - -LBB32_139: - LONG $0xff6bbf41; WORD $0xffff // movl $-149, %r15d - WORD $0xc689 // movl %eax, %esi - LONG $0xfff352e9; BYTE $0xff // jmp LBB32_5, $-3246(%rip) - LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -_format_significand: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - WORD $0x634c; BYTE $0xc2 // movslq %edx, %r8 - WORD $0x0149; BYTE $0xf0 // addq %rsi, %r8 - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0x20e8c148 // shrq $32, %rax - LONG $0x001c850f; WORD $0x0000 // jne LBB33_2, $28(%rip) - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - WORD $0x894d; BYTE $0xc6 // movq %r8, %r14 - WORD $0x8948; BYTE $0xfa // movq %rdi, %rdx - LONG $0x2710fa81; WORD $0x0000 // cmpl $10000, %edx - LONG $0x00e3830f; WORD $0x0000 // jae LBB33_8, $227(%rip) - -LBB33_7: - WORD $0xd789 // movl %edx, %edi - LONG $0x000132e9; BYTE $0x00 // jmp LBB33_10, $306(%rip) - -LBB33_2: - QUAD $0x77118461cefdb948; WORD $0xabcc // movabsq $-6067343680855748867, %rcx - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - WORD $0xf748; BYTE $0xe1 // mulq %rcx - LONG $0x1aeac148 // shrq $26, %rdx - LONG $0x1f00ca69; WORD $0xfa0a // imull $-100000000, %edx, %ecx - WORD $0xf901 // addl %edi, %ecx - LONG $0x00a4840f; WORD $0x0000 // je LBB33_3, $164(%rip) - WORD $0xc889 // movl %ecx, %eax - LONG $0x1759b941; WORD $0xd1b7 // movl $3518437209, %r9d - LONG $0xc1af0f49 // imulq %r9, %rax - LONG $0x2de8c148 // shrq $45, %rax - LONG $0x2710f869; WORD $0x0000 // imull $10000, %eax, %edi - WORD $0xf929 // subl %edi, %ecx - WORD $0x8948; BYTE $0xc7 // movq %rax, %rdi - LONG $0xf9af0f49 // imulq %r9, %rdi - LONG $0x2defc148 // shrq $45, %rdi - LONG $0x2710ff69; WORD $0x0000 // imull $10000, %edi, %edi - WORD $0xf829 // subl %edi, %eax - WORD $0xb70f; BYTE $0xf9 // movzwl %cx, %edi - WORD $0xefc1; BYTE $0x02 // shrl $2, %edi - LONG $0x7bcf6944; WORD $0x0014; BYTE $0x00 // imull $5243, %edi, %r9d - LONG $0x11e9c141 // shrl $17, %r9d - LONG $0x64f96b41 // imull $100, %r9d, %edi - WORD $0xf929 // subl %edi, %ecx - LONG $0xd1b70f44 // movzwl %cx, %r10d - WORD $0xb70f; BYTE $0xf8 // movzwl %ax, %edi - WORD $0xefc1; BYTE $0x02 // shrl $2, %edi - LONG $0x147bff69; WORD $0x0000 // imull $5243, %edi, %edi - WORD $0xefc1; BYTE $0x11 // shrl $17, %edi - WORD $0xcf6b; BYTE $0x64 // imull $100, %edi, %ecx - WORD $0xc829 // subl %ecx, %eax - LONG $0xd8b70f44 // movzwl %ax, %r11d - LONG $0x930d8d48; WORD $0x0033; BYTE $0x00 // leaq $13203(%rip), %rcx /* _Digits(%rip) */ - LONG $0x04b70f42; BYTE $0x51 // movzwl (%rcx,%r10,2), %eax - LONG $0x40894166; BYTE $0xfe // movw %ax, $-2(%r8) - LONG $0x04b70f42; BYTE $0x49 // movzwl (%rcx,%r9,2), %eax - LONG $0x40894166; BYTE $0xfc // movw %ax, $-4(%r8) - LONG $0x04b70f42; BYTE $0x59 // movzwl (%rcx,%r11,2), %eax - LONG $0x40894166; BYTE $0xfa // movw %ax, $-6(%r8) - LONG $0x7904b70f // movzwl (%rcx,%rdi,2), %eax - LONG $0x40894166; BYTE $0xf8 // movw %ax, $-8(%r8) - WORD $0x3145; BYTE $0xc9 // xorl %r9d, %r9d - LONG $0xf8708d4d // leaq $-8(%r8), %r14 - LONG $0x2710fa81; WORD $0x0000 // cmpl $10000, %edx - LONG $0xff38820f; WORD $0xffff // jb LBB33_7, $-200(%rip) - LONG $0x000016e9; BYTE $0x00 // jmp LBB33_8, $22(%rip) - -LBB33_3: - LONG $0x0008b941; WORD $0x0000 // movl $8, %r9d - LONG $0xf8708d4d // leaq $-8(%r8), %r14 - LONG $0x2710fa81; WORD $0x0000 // cmpl $10000, %edx - LONG $0xff1d820f; WORD $0xffff // jb LBB33_7, $-227(%rip) - -LBB33_8: - LONG $0x1759ba41; WORD $0xd1b7 // movl $3518437209, %r10d - LONG $0x311d8d4c; WORD $0x0033; BYTE $0x00 // leaq $13105(%rip), %r11 /* _Digits(%rip) */ - BYTE $0x90 // .p2align 4, 0x90 - -LBB33_9: - WORD $0xd789 // movl %edx, %edi - LONG $0xfaaf0f49 // imulq %r10, %rdi - LONG $0x2defc148 // shrq $45, %rdi - LONG $0xd8f0c769; WORD $0xffff // imull $-10000, %edi, %eax - WORD $0xd001 // addl %edx, %eax - LONG $0x1fd86948; WORD $0xeb85; BYTE $0x51 // imulq $1374389535, %rax, %rbx - LONG $0x25ebc148 // shrq $37, %rbx - WORD $0xcb6b; BYTE $0x64 // imull $100, %ebx, %ecx - WORD $0xc829 // subl %ecx, %eax - LONG $0x04b70f41; BYTE $0x43 // movzwl (%r11,%rax,2), %eax - LONG $0x46894166; BYTE $0xfe // movw %ax, $-2(%r14) - LONG $0x04b70f41; BYTE $0x5b // movzwl (%r11,%rbx,2), %eax - LONG $0x46894166; BYTE $0xfc // movw %ax, $-4(%r14) - LONG $0xfcc68349 // addq $-4, %r14 - LONG $0xe0fffa81; WORD $0x05f5 // cmpl $99999999, %edx - WORD $0xfa89 // movl %edi, %edx - LONG $0xffb8870f; WORD $0xffff // ja LBB33_9, $-72(%rip) - -LBB33_10: - WORD $0xff83; BYTE $0x64 // cmpl $100, %edi - LONG $0x0020830f; WORD $0x0000 // jae LBB33_11, $32(%rip) - WORD $0xff83; BYTE $0x0a // cmpl $10, %edi - LONG $0x004d820f; WORD $0x0000 // jb LBB33_14, $77(%rip) - -LBB33_13: - WORD $0xf889 // movl %edi, %eax - LONG $0xcd0d8d48; WORD $0x0032; BYTE $0x00 // leaq $13005(%rip), %rcx /* _Digits(%rip) */ - LONG $0x4104b70f // movzwl (%rcx,%rax,2), %eax - LONG $0x46894166; BYTE $0xfe // movw %ax, $-2(%r14) - LONG $0x00003de9; BYTE $0x00 // jmp LBB33_15, $61(%rip) - -LBB33_11: - WORD $0xb70f; BYTE $0xc7 // movzwl %di, %eax - WORD $0xe8c1; BYTE $0x02 // shrl $2, %eax - LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax - WORD $0xe8c1; BYTE $0x11 // shrl $17, %eax - WORD $0xc86b; BYTE $0x64 // imull $100, %eax, %ecx - WORD $0xcf29 // subl %ecx, %edi - WORD $0xb70f; BYTE $0xcf // movzwl %di, %ecx - LONG $0xa1158d48; WORD $0x0032; BYTE $0x00 // leaq $12961(%rip), %rdx /* _Digits(%rip) */ - LONG $0x4a0cb70f // movzwl (%rdx,%rcx,2), %ecx - LONG $0x4e894166; BYTE $0xfe // movw %cx, $-2(%r14) - LONG $0xfec68349 // addq $-2, %r14 - WORD $0xc789 // movl %eax, %edi - WORD $0xff83; BYTE $0x0a // cmpl $10, %edi - LONG $0xffb3830f; WORD $0xffff // jae LBB33_13, $-77(%rip) - -LBB33_14: - LONG $0x30c78040 // addb $48, %dil - WORD $0x8840; BYTE $0x3e // movb %dil, (%rsi) - -LBB33_15: - WORD $0x294d; BYTE $0xc8 // subq %r9, %r8 - WORD $0x894c; BYTE $0xc0 // movq %r8, %rax - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -_left_shift: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - WORD $0xf189 // movl %esi, %ecx - LONG $0x68d16b48 // imulq $104, %rcx, %rdx - LONG $0x4c358d48; WORD $0x008c; BYTE $0x00 // leaq $35916(%rip), %rsi /* _LSHIFT_TAB(%rip) */ - LONG $0x32048b44 // movl (%rdx,%rsi), %r8d - WORD $0x8b4c; BYTE $0x17 // movq (%rdi), %r10 - LONG $0x104f634c // movslq $16(%rdi), %r9 - LONG $0x0432448a // movb $4(%rdx,%rsi), %al - WORD $0x854d; BYTE $0xc9 // testq %r9, %r9 - LONG $0x0036840f; WORD $0x0000 // je LBB34_6, $54(%rip) - LONG $0x32548d48; BYTE $0x05 // leaq $5(%rdx,%rsi), %rdx - WORD $0xf631 // xorl %esi, %esi - QUAD $0x9090909090909090; LONG $0x90909090; BYTE $0x90 // .p2align 4, 0x90 - -LBB34_3: - WORD $0xc084 // testb %al, %al - LONG $0x0025840f; WORD $0x0000 // je LBB34_8, $37(%rip) - LONG $0x32043841 // cmpb %al, (%r10,%rsi) - LONG $0x0189850f; WORD $0x0000 // jne LBB34_5, $393(%rip) - LONG $0x3204b60f // movzbl (%rdx,%rsi), %eax - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0x3949; BYTE $0xf1 // cmpq %rsi, %r9 - LONG $0xffde850f; WORD $0xffff // jne LBB34_3, $-34(%rip) - -LBB34_6: - WORD $0xc084 // testb %al, %al - LONG $0x0003840f; WORD $0x0000 // je LBB34_8, $3(%rip) - -LBB34_7: - WORD $0xff41; BYTE $0xc8 // decl %r8d - -LBB34_8: - WORD $0x8545; BYTE $0xc9 // testl %r9d, %r9d - LONG $0x008c8e0f; WORD $0x0000 // jle LBB34_23, $140(%rip) - LONG $0x08048d43 // leal (%r8,%r9), %eax - WORD $0x634c; BYTE $0xf0 // movslq %eax, %r14 - WORD $0xff49; BYTE $0xce // decq %r14 - WORD $0xd231 // xorl %edx, %edx - QUAD $0xcccccccccccdbb49; WORD $0xcccc // movabsq $-3689348814741910323, %r11 - LONG $0x90909090 // .p2align 4, 0x90 - -LBB34_10: - LONG $0x74be0f4b; WORD $0xff0a // movsbq $-1(%r10,%r9), %rsi - LONG $0xd0c68348 // addq $-48, %rsi - WORD $0xd348; BYTE $0xe6 // shlq %cl, %rsi - WORD $0x0148; BYTE $0xd6 // addq %rdx, %rsi - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0xf749; BYTE $0xe3 // mulq %r11 - LONG $0x03eac148 // shrq $3, %rdx - LONG $0x12048d48 // leaq (%rdx,%rdx), %rax - LONG $0x801c8d48 // leaq (%rax,%rax,4), %rbx - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0x2948; BYTE $0xd8 // subq %rbx, %rax - LONG $0x0877394c // cmpq %r14, $8(%rdi) - LONG $0x000e860f; WORD $0x0000 // jbe LBB34_16, $14(%rip) - WORD $0x3004 // addb $48, %al - LONG $0x32048843 // movb %al, (%r10,%r14) - LONG $0x000013e9; BYTE $0x00 // jmp LBB34_18, $19(%rip) - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB34_16: - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0007840f; WORD $0x0000 // je LBB34_18, $7(%rip) - LONG $0x011c47c7; WORD $0x0000; BYTE $0x00 // movl $1, $28(%rdi) - -LBB34_18: - LONG $0x02f98349 // cmpq $2, %r9 - LONG $0x000e8c0f; WORD $0x0000 // jl LBB34_12, $14(%rip) - WORD $0xff49; BYTE $0xc9 // decq %r9 - WORD $0x8b4c; BYTE $0x17 // movq (%rdi), %r10 - WORD $0xff49; BYTE $0xce // decq %r14 - LONG $0xffff98e9; BYTE $0xff // jmp LBB34_10, $-104(%rip) - -LBB34_12: - LONG $0x0afe8348 // cmpq $10, %rsi - LONG $0x0067830f; WORD $0x0000 // jae LBB34_13, $103(%rip) - -LBB34_23: - LONG $0x104f6348 // movslq $16(%rdi), %rcx - WORD $0x6349; BYTE $0xc0 // movslq %r8d, %rax - WORD $0x0148; BYTE $0xc8 // addq %rcx, %rax - WORD $0x4789; BYTE $0x10 // movl %eax, $16(%rdi) - LONG $0x084f8b48 // movq $8(%rdi), %rcx - WORD $0x3948; BYTE $0xc1 // cmpq %rax, %rcx - LONG $0x0005870f; WORD $0x0000 // ja LBB34_25, $5(%rip) - WORD $0x4f89; BYTE $0x10 // movl %ecx, $16(%rdi) - WORD $0xc889 // movl %ecx, %eax - -LBB34_25: - LONG $0x14470144 // addl %r8d, $20(%rdi) - WORD $0xc085 // testl %eax, %eax - LONG $0x002f8e0f; WORD $0x0000 // jle LBB34_29, $47(%rip) - WORD $0x8b48; BYTE $0x0f // movq (%rdi), %rcx - WORD $0xc289 // movl %eax, %edx - WORD $0xff48; BYTE $0xc2 // incq %rdx - QUAD $0x9090909090909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB34_27: - WORD $0xc8ff // decl %eax - LONG $0x30013c80 // cmpb $48, (%rcx,%rax) - LONG $0x0018850f; WORD $0x0000 // jne LBB34_31, $24(%rip) - WORD $0x4789; BYTE $0x10 // movl %eax, $16(%rdi) - WORD $0xff48; BYTE $0xca // decq %rdx - LONG $0x01fa8348 // cmpq $1, %rdx - LONG $0xffe48f0f; WORD $0xffff // jg LBB34_27, $-28(%rip) - -LBB34_29: - WORD $0xc085 // testl %eax, %eax - LONG $0x006b840f; WORD $0x0000 // je LBB34_30, $107(%rip) - -LBB34_31: - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB34_13: - WORD $0x6349; BYTE $0xf6 // movslq %r14d, %rsi - WORD $0xff48; BYTE $0xce // decq %rsi - LONG $0x000021e9; BYTE $0x00 // jmp LBB34_14, $33(%rip) - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - -LBB34_15: - WORD $0x3004 // addb $48, %al - WORD $0x8b48; BYTE $0x1f // movq (%rdi), %rbx - WORD $0x0488; BYTE $0x33 // movb %al, (%rbx,%rsi) - -LBB34_22: - WORD $0xff48; BYTE $0xce // decq %rsi - LONG $0x09f98348 // cmpq $9, %rcx - LONG $0xff6d860f; WORD $0xffff // jbe LBB34_23, $-147(%rip) - -LBB34_14: - WORD $0x8948; BYTE $0xd1 // movq %rdx, %rcx - WORD $0x8948; BYTE $0xd0 // movq %rdx, %rax - WORD $0xf749; BYTE $0xe3 // mulq %r11 - LONG $0x03eac148 // shrq $3, %rdx - LONG $0x12048d48 // leaq (%rdx,%rdx), %rax - LONG $0x801c8d48 // leaq (%rax,%rax,4), %rbx - WORD $0x8948; BYTE $0xc8 // movq %rcx, %rax - WORD $0x2948; BYTE $0xd8 // subq %rbx, %rax - LONG $0x08773948 // cmpq %rsi, $8(%rdi) - LONG $0xffc6870f; WORD $0xffff // ja LBB34_15, $-58(%rip) - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0xffc5840f; WORD $0xffff // je LBB34_22, $-59(%rip) - LONG $0x011c47c7; WORD $0x0000; BYTE $0x00 // movl $1, $28(%rdi) - LONG $0xffffb9e9; BYTE $0xff // jmp LBB34_22, $-71(%rip) - -LBB34_30: - LONG $0x001447c7; WORD $0x0000; BYTE $0x00 // movl $0, $20(%rdi) - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB34_5: - LONG $0xfe898c0f; WORD $0xffff // jl LBB34_7, $-375(%rip) - LONG $0xfffe87e9; BYTE $0xff // jmp LBB34_8, $-377(%rip) - QUAD $0x9090909090909090; WORD $0x9090 // .p2align 4, 0x90 - -_right_shift: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - BYTE $0x53 // pushq %rbx - WORD $0xf189 // movl %esi, %ecx - LONG $0x10478b44 // movl $16(%rdi), %r8d - WORD $0xd231 // xorl %edx, %edx - WORD $0x8545; BYTE $0xc0 // testl %r8d, %r8d - LONG $0x0000bb41; WORD $0x0000 // movl $0, %r11d - LONG $0xd8490f45 // cmovnsl %r8d, %r11d - WORD $0xc031 // xorl %eax, %eax - LONG $0x90909090 // .p2align 4, 0x90 - -LBB35_1: - WORD $0x3949; BYTE $0xd3 // cmpq %rdx, %r11 - LONG $0x0132840f; WORD $0x0000 // je LBB35_2, $306(%rip) - LONG $0x80048d48 // leaq (%rax,%rax,4), %rax - WORD $0x8b48; BYTE $0x37 // movq (%rdi), %rsi - LONG $0x34be0f48; BYTE $0x16 // movsbq (%rsi,%rdx), %rsi - LONG $0x46448d48; BYTE $0xd0 // leaq $-48(%rsi,%rax,2), %rax - WORD $0xff48; BYTE $0xc2 // incq %rdx - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - WORD $0xd348; BYTE $0xee // shrq %cl, %rsi - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0xffd4840f; WORD $0xffff // je LBB35_1, $-44(%rip) - WORD $0x8941; BYTE $0xd3 // movl %edx, %r11d - -LBB35_7: - WORD $0x578b; BYTE $0x14 // movl $20(%rdi), %edx - WORD $0x2944; BYTE $0xda // subl %r11d, %edx - WORD $0xc2ff // incl %edx - LONG $0xffc1c749; WORD $0xffff; BYTE $0xff // movq $-1, %r9 - WORD $0xd349; BYTE $0xe1 // shlq %cl, %r9 - WORD $0x5789; BYTE $0x14 // movl %edx, $20(%rdi) - WORD $0xf749; BYTE $0xd1 // notq %r9 - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - WORD $0x3945; BYTE $0xc3 // cmpl %r8d, %r11d - LONG $0x00648d0f; WORD $0x0000 // jge LBB35_10, $100(%rip) - WORD $0x634d; BYTE $0xc3 // movslq %r11d, %r8 - WORD $0x8b48; BYTE $0x37 // movq (%rdi), %rsi - WORD $0x3145; BYTE $0xd2 // xorl %r10d, %r10d - LONG $0x90909090 // .p2align 4, 0x90 - -LBB35_9: - WORD $0x8948; BYTE $0xc2 // movq %rax, %rdx - WORD $0xd348; BYTE $0xea // shrq %cl, %rdx - WORD $0x214c; BYTE $0xc8 // andq %r9, %rax - WORD $0xc280; BYTE $0x30 // addb $48, %dl - LONG $0x16148842 // movb %dl, (%rsi,%r10) - WORD $0x8b48; BYTE $0x37 // movq (%rdi), %rsi - LONG $0x06148d4a // leaq (%rsi,%r8), %rdx - LONG $0x1cbe0f4d; BYTE $0x12 // movsbq (%r10,%rdx), %r11 - LONG $0x105c8d4b; BYTE $0x01 // leaq $1(%r8,%r10), %rbx - LONG $0x01528d4d // leaq $1(%r10), %r10 - LONG $0x80048d48 // leaq (%rax,%rax,4), %rax - LONG $0x43448d49; BYTE $0xd0 // leaq $-48(%r11,%rax,2), %rax - LONG $0x10576348 // movslq $16(%rdi), %rdx - WORD $0x3948; BYTE $0xd3 // cmpq %rdx, %rbx - LONG $0xffc58c0f; WORD $0xffff // jl LBB35_9, $-59(%rip) - LONG $0x000017e9; BYTE $0x00 // jmp LBB35_10, $23(%rip) - - // .p2align 4, 0x90 -LBB35_12: - LONG $0x30c68040 // addb $48, %sil - WORD $0x8b48; BYTE $0x1f // movq (%rdi), %rbx - LONG $0x13348840 // movb %sil, (%rbx,%rdx) - WORD $0xc2ff // incl %edx - WORD $0x8941; BYTE $0xd2 // movl %edx, %r10d - -LBB35_15: - WORD $0x0148; BYTE $0xc0 // addq %rax, %rax - LONG $0x80048d48 // leaq (%rax,%rax,4), %rax - -LBB35_10: - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x002b840f; WORD $0x0000 // je LBB35_16, $43(%rip) - WORD $0x8948; BYTE $0xc6 // movq %rax, %rsi - WORD $0xd348; BYTE $0xee // shrq %cl, %rsi - WORD $0x214c; BYTE $0xc8 // andq %r9, %rax - WORD $0x6349; BYTE $0xd2 // movslq %r10d, %rdx - LONG $0x08573948 // cmpq %rdx, $8(%rdi) - LONG $0xffca870f; WORD $0xffff // ja LBB35_12, $-54(%rip) - WORD $0x8548; BYTE $0xf6 // testq %rsi, %rsi - LONG $0xffd1840f; WORD $0xffff // je LBB35_15, $-47(%rip) - LONG $0x011c47c7; WORD $0x0000; BYTE $0x00 // movl $1, $28(%rdi) - LONG $0xffffc5e9; BYTE $0xff // jmp LBB35_15, $-59(%rip) - -LBB35_16: - LONG $0x10578944 // movl %r10d, $16(%rdi) - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x00378e0f; WORD $0x0000 // jle LBB35_20, $55(%rip) - WORD $0x8b48; BYTE $0x07 // movq (%rdi), %rax - WORD $0x8944; BYTE $0xd1 // movl %r10d, %ecx - WORD $0xff48; BYTE $0xc1 // incq %rcx - QUAD $0x9090909090909090; LONG $0x90909090; WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB35_18: - WORD $0xff41; BYTE $0xca // decl %r10d - LONG $0x103c8042; BYTE $0x30 // cmpb $48, (%rax,%r10) - LONG $0x001a850f; WORD $0x0000 // jne LBB35_22, $26(%rip) - LONG $0x10578944 // movl %r10d, $16(%rdi) - WORD $0xff48; BYTE $0xc9 // decq %rcx - LONG $0x01f98348 // cmpq $1, %rcx - LONG $0xffe18f0f; WORD $0xffff // jg LBB35_18, $-31(%rip) - -LBB35_20: - WORD $0x8545; BYTE $0xd2 // testl %r10d, %r10d - LONG $0x0045840f; WORD $0x0000 // je LBB35_21, $69(%rip) - -LBB35_22: - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB35_2: - WORD $0x8548; BYTE $0xc0 // testq %rax, %rax - LONG $0x0043840f; WORD $0x0000 // je LBB35_23, $67(%rip) - QUAD $0x9090909090909090; LONG $0x90909090 // .p2align 4, 0x90 - WORD $0x8948; BYTE $0xc2 // movq %rax, %rdx - WORD $0xd348; BYTE $0xea // shrq %cl, %rdx - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0xfed0850f; WORD $0xffff // jne LBB35_7, $-304(%rip) - -LBB35_4: - WORD $0x0148; BYTE $0xc0 // addq %rax, %rax - LONG $0x80048d48 // leaq (%rax,%rax,4), %rax - WORD $0xff41; BYTE $0xc3 // incl %r11d - WORD $0x8948; BYTE $0xc2 // movq %rax, %rdx - WORD $0xd348; BYTE $0xea // shrq %cl, %rdx - WORD $0x8548; BYTE $0xd2 // testq %rdx, %rdx - LONG $0xffe7840f; WORD $0xffff // je LBB35_4, $-25(%rip) - LONG $0xfffeb2e9; BYTE $0xff // jmp LBB35_7, $-334(%rip) - -LBB35_21: - LONG $0x001447c7; WORD $0x0000; BYTE $0x00 // movl $0, $20(%rdi) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - -LBB35_23: - LONG $0x001047c7; WORD $0x0000; BYTE $0x00 // movl $0, $16(%rdi) - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - BYTE $0xc3 // retq - QUAD $0x0000000000000000; LONG $0x00000000; WORD $0x0000; BYTE $0x00 // .p2align 5, 0x00 - -LCPI36_0: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - -LCPI36_1: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - - // .p2align 4, 0x90 -_advance_string_default: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - LONG $0x087f8b4c // movq $8(%rdi), %r15 - WORD $0x2949; BYTE $0xf7 // subq %rsi, %r15 - LONG $0x028e840f; WORD $0x0000 // je LBB36_16, $654(%rip) - WORD $0x8b4c; BYTE $0x1f // movq (%rdi), %r11 - WORD $0x014c; BYTE $0xde // addq %r11, %rsi - LONG $0xff02c748; WORD $0xffff; BYTE $0xff // movq $-1, (%rdx) - LONG $0xffc0c749; WORD $0xffff; BYTE $0xff // movq $-1, %r8 - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - LONG $0x40ff8349 // cmpq $64, %r15 - LONG $0x00ed820f; WORD $0x0000 // jb LBB36_10, $237(%rip) - QUAD $0xffffff7f056ffdc5 // vmovdqa $-129(%rip), %ymm0 /* LCPI36_0(%rip) */ - QUAD $0xffffff970d6ffdc5 // vmovdqa $-105(%rip), %ymm1 /* LCPI36_1(%rip) */ - QUAD $0xaaaaaaaaaaaab949; WORD $0xaaaa // movabsq $-6148914691236517206, %r9 - QUAD $0x555555555555ba49; WORD $0x5555 // movabsq $6148914691236517205, %r10 - WORD $0x9090; BYTE $0x90 // .p2align 4, 0x90 - -LBB36_3: - LONG $0x166ffec5 // vmovdqu (%rsi), %ymm2 - LONG $0x5e6ffec5; BYTE $0x20 // vmovdqu $32(%rsi), %ymm3 - LONG $0xe074edc5 // vpcmpeqb %ymm0, %ymm2, %ymm4 - LONG $0xfcd7fdc5 // vpmovmskb %ymm4, %edi - LONG $0xe074e5c5 // vpcmpeqb %ymm0, %ymm3, %ymm4 - LONG $0xc4d7fdc5 // vpmovmskb %ymm4, %eax - LONG $0xd174edc5 // vpcmpeqb %ymm1, %ymm2, %ymm2 - LONG $0xdad7fdc5 // vpmovmskb %ymm2, %ebx - LONG $0xd174e5c5 // vpcmpeqb %ymm1, %ymm3, %ymm2 - LONG $0xcad7fdc5 // vpmovmskb %ymm2, %ecx - LONG $0x20e0c148 // shlq $32, %rax - WORD $0x0948; BYTE $0xc7 // orq %rax, %rdi - LONG $0x20e1c148 // shlq $32, %rcx - WORD $0x0948; BYTE $0xcb // orq %rcx, %rbx - LONG $0x002c850f; WORD $0x0000 // jne LBB36_7, $44(%rip) - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x003d850f; WORD $0x0000 // jne LBB36_9, $61(%rip) - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0x00b7850f; WORD $0x0000 // jne LBB36_14, $183(%rip) - -LBB36_6: - LONG $0x40c68348 // addq $64, %rsi - LONG $0xc0c78349 // addq $-64, %r15 - LONG $0x3fff8349 // cmpq $63, %r15 - LONG $0xff9c870f; WORD $0xffff // ja LBB36_3, $-100(%rip) - LONG $0x00005de9; BYTE $0x00 // jmp LBB36_10, $93(%rip) - -LBB36_7: - LONG $0xfff88349 // cmpq $-1, %r8 - LONG $0x0010850f; WORD $0x0000 // jne LBB36_9, $16(%rip) - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0x294c; BYTE $0xd8 // subq %r11, %rax - LONG $0xc3bc0f4c // bsfq %rbx, %r8 - WORD $0x0149; BYTE $0xc0 // addq %rax, %r8 - WORD $0x894c; BYTE $0x02 // movq %r8, (%rdx) - -LBB36_9: - WORD $0x894c; BYTE $0xf0 // movq %r14, %rax - WORD $0xf748; BYTE $0xd0 // notq %rax - WORD $0x2148; BYTE $0xd8 // andq %rbx, %rax - LONG $0x00248d4c // leaq (%rax,%rax), %r12 - WORD $0x094d; BYTE $0xf4 // orq %r14, %r12 - WORD $0x894c; BYTE $0xe1 // movq %r12, %rcx - WORD $0xf748; BYTE $0xd1 // notq %rcx - WORD $0x2148; BYTE $0xd9 // andq %rbx, %rcx - WORD $0x214c; BYTE $0xc9 // andq %r9, %rcx - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0x0148; BYTE $0xc1 // addq %rax, %rcx - LONG $0xc6920f41 // setb %r14b - WORD $0x0148; BYTE $0xc9 // addq %rcx, %rcx - WORD $0x314c; BYTE $0xd1 // xorq %r10, %rcx - WORD $0x214c; BYTE $0xe1 // andq %r12, %rcx - WORD $0xf748; BYTE $0xd1 // notq %rcx - WORD $0x2148; BYTE $0xcf // andq %rcx, %rdi - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0xff91840f; WORD $0xffff // je LBB36_6, $-111(%rip) - LONG $0x000043e9; BYTE $0x00 // jmp LBB36_14, $67(%rip) - -LBB36_10: - LONG $0x20ff8349 // cmpq $32, %r15 - LONG $0x00ac820f; WORD $0x0000 // jb LBB36_21, $172(%rip) - LONG $0x066ffec5 // vmovdqu (%rsi), %ymm0 - QUAD $0xfffffe840d74fdc5 // vpcmpeqb $-380(%rip), %ymm0, %ymm1 /* LCPI36_0(%rip) */ - LONG $0xf9d7fdc5 // vpmovmskb %ymm1, %edi - QUAD $0xfffffe980574fdc5 // vpcmpeqb $-360(%rip), %ymm0, %ymm0 /* LCPI36_1(%rip) */ - LONG $0xd8d7fdc5 // vpmovmskb %ymm0, %ebx - WORD $0xdb85 // testl %ebx, %ebx - LONG $0x002d850f; WORD $0x0000 // jne LBB36_17, $45(%rip) - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x003e850f; WORD $0x0000 // jne LBB36_19, $62(%rip) - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0x006b840f; WORD $0x0000 // je LBB36_20, $107(%rip) - -LBB36_14: - LONG $0xc7bc0f48 // bsfq %rdi, %rax - WORD $0x294c; BYTE $0xde // subq %r11, %rsi - LONG $0x06448d48; BYTE $0x01 // leaq $1(%rsi,%rax), %rax - -LBB36_15: - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - BYTE $0xc3 // retq - -LBB36_17: - LONG $0xfff88349 // cmpq $-1, %r8 - LONG $0x0010850f; WORD $0x0000 // jne LBB36_19, $16(%rip) - WORD $0x8948; BYTE $0xf0 // movq %rsi, %rax - WORD $0x294c; BYTE $0xd8 // subq %r11, %rax - LONG $0xc3bc0f4c // bsfq %rbx, %r8 - WORD $0x0149; BYTE $0xc0 // addq %rax, %r8 - WORD $0x894c; BYTE $0x02 // movq %r8, (%rdx) - -LBB36_19: - WORD $0x8944; BYTE $0xf0 // movl %r14d, %eax - WORD $0xd0f7 // notl %eax - WORD $0xd821 // andl %ebx, %eax - WORD $0x0c8d; BYTE $0x00 // leal (%rax,%rax), %ecx - LONG $0x460c8d45 // leal (%r14,%rax,2), %r9d - WORD $0xd1f7 // notl %ecx - WORD $0xd921 // andl %ebx, %ecx - LONG $0xaaaae181; WORD $0xaaaa // andl $-1431655766, %ecx - WORD $0x3145; BYTE $0xf6 // xorl %r14d, %r14d - WORD $0xc101 // addl %eax, %ecx - LONG $0xc6920f41 // setb %r14b - WORD $0xc901 // addl %ecx, %ecx - LONG $0x5555f181; WORD $0x5555 // xorl $1431655765, %ecx - WORD $0x2144; BYTE $0xc9 // andl %r9d, %ecx - WORD $0xd1f7 // notl %ecx - WORD $0xcf21 // andl %ecx, %edi - WORD $0x8548; BYTE $0xff // testq %rdi, %rdi - LONG $0xff95850f; WORD $0xffff // jne LBB36_14, $-107(%rip) - -LBB36_20: - LONG $0x20c68348 // addq $32, %rsi - LONG $0xe0c78349 // addq $-32, %r15 - -LBB36_21: - WORD $0x854d; BYTE $0xf6 // testq %r14, %r14 - LONG $0x0087850f; WORD $0x0000 // jne LBB36_32, $135(%rip) - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0xff80840f; WORD $0xffff // je LBB36_15, $-128(%rip) - -LBB36_23: - WORD $0x894d; BYTE $0xd9 // movq %r11, %r9 - WORD $0xf749; BYTE $0xd1 // notq %r9 - -LBB36_24: - LONG $0x017e8d48 // leaq $1(%rsi), %rdi - WORD $0xb60f; BYTE $0x1e // movzbl (%rsi), %ebx - WORD $0xfb80; BYTE $0x22 // cmpb $34, %bl - LONG $0x0056840f; WORD $0x0000 // je LBB36_31, $86(%rip) - LONG $0xff578d4d // leaq $-1(%r15), %r10 - WORD $0xfb80; BYTE $0x5c // cmpb $92, %bl - LONG $0x0014840f; WORD $0x0000 // je LBB36_27, $20(%rip) - WORD $0x894d; BYTE $0xd7 // movq %r10, %r15 - WORD $0x8948; BYTE $0xfe // movq %rdi, %rsi - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0xffd4850f; WORD $0xffff // jne LBB36_24, $-44(%rip) - LONG $0xffff49e9; BYTE $0xff // jmp LBB36_15, $-183(%rip) - -LBB36_27: - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0xff40840f; WORD $0xffff // je LBB36_15, $-192(%rip) - LONG $0xfff88349 // cmpq $-1, %r8 - LONG $0x0009850f; WORD $0x0000 // jne LBB36_30, $9(%rip) - WORD $0x014c; BYTE $0xcf // addq %r9, %rdi - WORD $0x8948; BYTE $0x3a // movq %rdi, (%rdx) - WORD $0x8949; BYTE $0xf8 // movq %rdi, %r8 - -LBB36_30: - LONG $0x02c68348 // addq $2, %rsi - LONG $0xfec78349 // addq $-2, %r15 - WORD $0x894d; BYTE $0xfa // movq %r15, %r10 - WORD $0x854d; BYTE $0xd2 // testq %r10, %r10 - LONG $0xff9f850f; WORD $0xffff // jne LBB36_24, $-97(%rip) - LONG $0xffff14e9; BYTE $0xff // jmp LBB36_15, $-236(%rip) - -LBB36_31: - WORD $0x294c; BYTE $0xdf // subq %r11, %rdi - WORD $0x8948; BYTE $0xf8 // movq %rdi, %rax - LONG $0xffff09e9; BYTE $0xff // jmp LBB36_15, $-247(%rip) - -LBB36_32: - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0x0031840f; WORD $0x0000 // je LBB36_16, $49(%rip) - LONG $0xfff88349 // cmpq $-1, %r8 - LONG $0x000c850f; WORD $0x0000 // jne LBB36_35, $12(%rip) - WORD $0x894d; BYTE $0xd8 // movq %r11, %r8 - WORD $0xf749; BYTE $0xd0 // notq %r8 - WORD $0x0149; BYTE $0xf0 // addq %rsi, %r8 - WORD $0x894c; BYTE $0x02 // movq %r8, (%rdx) - -LBB36_35: - WORD $0xff48; BYTE $0xc6 // incq %rsi - WORD $0xff49; BYTE $0xcf // decq %r15 - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - WORD $0x854d; BYTE $0xff // testq %r15, %r15 - LONG $0xff54850f; WORD $0xffff // jne LBB36_23, $-172(%rip) - LONG $0xfffecfe9; BYTE $0xff // jmp LBB36_15, $-305(%rip) - -LBB36_16: - LONG $0xffc0c748; WORD $0xffff; BYTE $0xff // movq $-1, %rax - LONG $0xfffec3e9; BYTE $0xff // jmp LBB36_15, $-317(%rip) - QUAD $0x0000000000000000; LONG $0x00000000; WORD $0x0000 // .p2align 4, 0x00 - -_POW10_M128_TAB: - QUAD $0x1732c869cd60e453 // .quad 1671618768450675795 - QUAD $0xfa8fd5a0081c0288 // .quad -391859759250406776 - QUAD $0x0e7fbd42205c8eb4 // .quad 1044761730281672372 - QUAD $0x9c99e58405118195 // .quad -7162441377172586091 - QUAD $0x521fac92a873b261 // .quad 5917638181279478369 - QUAD $0xc3c05ee50655e1fa // .quad -4341365703038344710 - QUAD $0xe6a797b752909ef9 // .quad -1826324310255427847 - QUAD $0xf4b0769e47eb5a78 // .quad -815021110370542984 - QUAD $0x9028bed2939a635c // .quad -8058981721550724260 - QUAD $0x98ee4a22ecf3188b // .quad -7426917221622671221 - QUAD $0x7432ee873880fc33 // .quad 8373016921771146291 - QUAD $0xbf29dcaba82fdeae // .quad -4671960508600951122 - QUAD $0x113faa2906a13b3f // .quad 1242899115359157055 - QUAD $0xeef453d6923bd65a // .quad -1228264617323800998 - QUAD $0x4ac7ca59a424c507 // .quad 5388497965526861063 - QUAD $0x9558b4661b6565f8 // .quad -7685194413468457480 - QUAD $0x5d79bcf00d2df649 // .quad 6735622456908576329 - QUAD $0xbaaee17fa23ebf76 // .quad -4994806998408183946 - QUAD $0xf4d82c2c107973dc // .quad -803843965719055396 - QUAD $0xe95a99df8ace6f53 // .quad -1631822729582842029 - QUAD $0x79071b9b8a4be869 // .quad 8720969558280366185 - QUAD $0x91d8a02bb6c10594 // .quad -7937418233630358124 - QUAD $0x9748e2826cdee284 // .quad -7545532125859093884 - QUAD $0xb64ec836a47146f9 // .quad -5310086773610559751 - QUAD $0xfd1b1b2308169b25 // .quad -208543120469091547 - QUAD $0xe3e27a444d8d98b7 // .quad -2025922448585811785 - QUAD $0xfe30f0f5e50e20f7 // .quad -130339450293182217 - QUAD $0x8e6d8c6ab0787f72 // .quad -8183730558007214222 - QUAD $0xbdbd2d335e51a935 // .quad -4774610331293865675 - QUAD $0xb208ef855c969f4f // .quad -5617977179081629873 - QUAD $0xad2c788035e61382 // .quad -5968262914117332094 - QUAD $0xde8b2b66b3bc4723 // .quad -2410785455424649437 - QUAD $0x4c3bcb5021afcc31 // .quad 5493207715531443249 - QUAD $0x8b16fb203055ac76 // .quad -8424269937281487754 - QUAD $0xdf4abe242a1bbf3d // .quad -2356862392440471747 - QUAD $0xaddcb9e83c6b1793 // .quad -5918651403174471789 - QUAD $0xd71d6dad34a2af0d // .quad -2946077990550589683 - QUAD $0xd953e8624b85dd78 // .quad -2786628235540701832 - QUAD $0x8672648c40e5ad68 // .quad -8758827771735200408 - QUAD $0x87d4713d6f33aa6b // .quad -8659171674854020501 - QUAD $0x680efdaf511f18c2 // .quad 7498209359040551106 - QUAD $0xa9c98d8ccb009506 // .quad -6212278575140137722 - QUAD $0x0212bd1b2566def2 // .quad 149389661945913074 - QUAD $0xd43bf0effdc0ba48 // .quad -3153662200497784248 - QUAD $0x014bb630f7604b57 // .quad 93368538716195671 - QUAD $0x84a57695fe98746d // .quad -8888567902952197011 - QUAD $0x419ea3bd35385e2d // .quad 4728396691822632493 - QUAD $0xa5ced43b7e3e9188 // .quad -6499023860262858360 - QUAD $0x52064cac828675b9 // .quad 5910495864778290617 - QUAD $0xcf42894a5dce35ea // .quad -3512093806901185046 - QUAD $0x7343efebd1940993 // .quad 8305745933913819539 - QUAD $0x818995ce7aa0e1b2 // .quad -9112587656954322510 - QUAD $0x1014ebe6c5f90bf8 // .quad 1158810380537498616 - QUAD $0xa1ebfb4219491a1f // .quad -6779048552765515233 - QUAD $0xd41a26e077774ef6 // .quad -3163173042755514634 - QUAD $0xca66fa129f9b60a6 // .quad -3862124672529506138 - QUAD $0x8920b098955522b4 // .quad -8565652321871781196 - QUAD $0xfd00b897478238d0 // .quad -215969822234494768 - QUAD $0x55b46e5f5d5535b0 // .quad 6175682344898606512 - QUAD $0x9e20735e8cb16382 // .quad -7052510166537641086 - QUAD $0xeb2189f734aa831d // .quad -1503769105731517667 - QUAD $0xc5a890362fddbc62 // .quad -4203951689744663454 - QUAD $0xa5e9ec7501d523e4 // .quad -6491397400591784988 - QUAD $0xf712b443bbd52b7b // .quad -643253593753441413 - QUAD $0x47b233c92125366e // .quad 5166248661484910190 - QUAD $0x9a6bb0aa55653b2d // .quad -7319562523736982739 - QUAD $0x999ec0bb696e840a // .quad -7377247228426025974 - QUAD $0xc1069cd4eabe89f8 // .quad -4537767136243840520 - QUAD $0xc00670ea43ca250d // .quad -4609873017105144563 - QUAD $0xf148440a256e2c76 // .quad -1060522901877412746 - QUAD $0x380406926a5e5728 // .quad 4036358391950366504 - QUAD $0x96cd2a865764dbca // .quad -7580355841314464822 - QUAD $0xc605083704f5ecf2 // .quad -4177924046916817678 - QUAD $0xbc807527ed3e12bc // .quad -4863758783215693124 - QUAD $0xf7864a44c633682e // .quad -610719040218634194 - QUAD $0xeba09271e88d976b // .quad -1468012460592228501 - QUAD $0x7ab3ee6afbe0211d // .quad 8841672636718129437 - QUAD $0x93445b8731587ea3 // .quad -7835036815511224669 - QUAD $0x5960ea05bad82964 // .quad 6440404777470273892 - QUAD $0xb8157268fdae9e4c // .quad -5182110000961642932 - QUAD $0x6fb92487298e33bd // .quad 8050505971837842365 - QUAD $0xe61acf033d1a45df // .quad -1865951482774665761 - QUAD $0xa5d3b6d479f8e056 // .quad -6497648813669818282 - QUAD $0x8fd0c16206306bab // .quad -8083748704375247957 - QUAD $0x8f48a4899877186c // .quad -8122061017087272852 - QUAD $0xb3c4f1ba87bc8696 // .quad -5492999862041672042 - QUAD $0x331acdabfe94de87 // .quad 3682481783923072647 - QUAD $0xe0b62e2929aba83c // .quad -2254563809124702148 - QUAD $0x9ff0c08b7f1d0b14 // .quad -6921820921902855404 - QUAD $0x8c71dcd9ba0b4925 // .quad -8326631408344020699 - QUAD $0x07ecf0ae5ee44dd9 // .quad 571095884476206553 - QUAD $0xaf8e5410288e1b6f // .quad -5796603242002637969 - QUAD $0xc9e82cd9f69d6150 // .quad -3897816162832129712 - QUAD $0xdb71e91432b1a24a // .quad -2634068034075909558 - QUAD $0xbe311c083a225cd2 // .quad -4741978110983775022 - QUAD $0x892731ac9faf056e // .quad -8563821548938525330 - QUAD $0x6dbd630a48aaf406 // .quad 7907585416552444934 - QUAD $0xab70fe17c79ac6ca // .quad -6093090917745768758 - QUAD $0x092cbbccdad5b108 // .quad 661109733835780360 - QUAD $0xd64d3d9db981787d // .quad -3004677628754823043 - QUAD $0x25bbf56008c58ea5 // .quad 2719036592861056677 - QUAD $0x85f0468293f0eb4e // .quad -8795452545612846258 - QUAD $0xaf2af2b80af6f24e // .quad -5824576295778454962 - QUAD $0xa76c582338ed2621 // .quad -6382629663588669919 - QUAD $0x1af5af660db4aee1 // .quad 1942651667131707105 - QUAD $0xd1476e2c07286faa // .quad -3366601061058449494 - QUAD $0x50d98d9fc890ed4d // .quad 5825843310384704845 - QUAD $0x82cca4db847945ca // .quad -9021654690802612790 - QUAD $0xe50ff107bab528a0 // .quad -1941067898873894752 - QUAD $0xa37fce126597973c // .quad -6665382345075878084 - QUAD $0x1e53ed49a96272c8 // .quad 2185351144835019464 - QUAD $0xcc5fc196fefd7d0c // .quad -3720041912917459700 - QUAD $0x25e8e89c13bb0f7a // .quad 2731688931043774330 - QUAD $0xff77b1fcbebcdc4f // .quad -38366372719436721 - QUAD $0x77b191618c54e9ac // .quad 8624834609543440812 - QUAD $0x9faacf3df73609b1 // .quad -6941508010590729807 - QUAD $0xd59df5b9ef6a2417 // .quad -3054014793352862697 - QUAD $0xc795830d75038c1d // .quad -4065198994811024355 - QUAD $0x4b0573286b44ad1d // .quad 5405853545163697437 - QUAD $0xf97ae3d0d2446f25 // .quad -469812725086392539 - QUAD $0x4ee367f9430aec32 // .quad 5684501474941004850 - QUAD $0x9becce62836ac577 // .quad -7211161980820077193 - QUAD $0x229c41f793cda73f // .quad 2493940825248868159 - QUAD $0xc2e801fb244576d5 // .quad -4402266457597708587 - QUAD $0x6b43527578c1110f // .quad 7729112049988473103 - QUAD $0xf3a20279ed56d48a // .quad -891147053569747830 - QUAD $0x830a13896b78aaa9 // .quad -9004363024039368023 - QUAD $0x9845418c345644d6 // .quad -7474495936122174250 - QUAD $0x23cc986bc656d553 // .quad 2579604275232953683 - QUAD $0xbe5691ef416bd60c // .quad -4731433901725329908 - QUAD $0x2cbfbe86b7ec8aa8 // .quad 3224505344041192104 - QUAD $0xedec366b11c6cb8f // .quad -1302606358729274481 - QUAD $0x7bf7d71432f3d6a9 // .quad 8932844867666826921 - QUAD $0x94b3a202eb1c3f39 // .quad -7731658001846878407 - QUAD $0xdaf5ccd93fb0cc53 // .quad -2669001970698630061 - QUAD $0xb9e08a83a5e34f07 // .quad -5052886483881210105 - QUAD $0xd1b3400f8f9cff68 // .quad -3336252463373287576 - QUAD $0xe858ad248f5c22c9 // .quad -1704422086424124727 - QUAD $0x23100809b9c21fa1 // .quad 2526528228819083169 - QUAD $0x91376c36d99995be // .quad -7982792831656159810 - QUAD $0xabd40a0c2832a78a // .quad -6065211750830921846 - QUAD $0xb58547448ffffb2d // .quad -5366805021142811859 - QUAD $0x16c90c8f323f516c // .quad 1641857348316123500 - QUAD $0xe2e69915b3fff9f9 // .quad -2096820258001126919 - QUAD $0xae3da7d97f6792e3 // .quad -5891368184943504669 - QUAD $0x8dd01fad907ffc3b // .quad -8228041688891786181 - QUAD $0x99cd11cfdf41779c // .quad -7364210231179380836 - QUAD $0xb1442798f49ffb4a // .quad -5673366092687344822 - QUAD $0x40405643d711d583 // .quad 4629795266307937667 - QUAD $0xdd95317f31c7fa1d // .quad -2480021597431793123 - QUAD $0x482835ea666b2572 // .quad 5199465050656154994 - QUAD $0x8a7d3eef7f1cfc52 // .quad -8467542526035952558 - QUAD $0xda3243650005eecf // .quad -2724040723534582065 - QUAD $0xad1c8eab5ee43b66 // .quad -5972742139117552794 - QUAD $0x90bed43e40076a82 // .quad -8016736922845615486 - QUAD $0xd863b256369d4a40 // .quad -2854241655469553088 - QUAD $0x5a7744a6e804a291 // .quad 6518754469289960081 - QUAD $0x873e4f75e2224e68 // .quad -8701430062309552536 - QUAD $0x711515d0a205cb36 // .quad 8148443086612450102 - QUAD $0xa90de3535aaae202 // .quad -6265101559459552766 - QUAD $0x0d5a5b44ca873e03 // .quad 962181821410786819 - QUAD $0xd3515c2831559a83 // .quad -3219690930897053053 - QUAD $0xe858790afe9486c2 // .quad -1704479370831952190 - QUAD $0x8412d9991ed58091 // .quad -8929835859451740015 - QUAD $0x626e974dbe39a872 // .quad 7092772823314835570 - QUAD $0xa5178fff668ae0b6 // .quad -6550608805887287114 - QUAD $0xfb0a3d212dc8128f // .quad -357406007711231345 - QUAD $0xce5d73ff402d98e3 // .quad -3576574988931720989 - QUAD $0x7ce66634bc9d0b99 // .quad 8999993282035256217 - QUAD $0x80fa687f881c7f8e // .quad -9152888395723407474 - QUAD $0x1c1fffc1ebc44e80 // .quad 2026619565689294464 - QUAD $0xa139029f6a239f72 // .quad -6829424476226871438 - QUAD $0xa327ffb266b56220 // .quad -6690097579743157728 - QUAD $0xc987434744ac874e // .quad -3925094576856201394 - QUAD $0x4bf1ff9f0062baa8 // .quad 5472436080603216552 - QUAD $0xfbe9141915d7a922 // .quad -294682202642863838 - QUAD $0x6f773fc3603db4a9 // .quad 8031958568804398249 - QUAD $0x9d71ac8fada6c9b5 // .quad -7101705404292871755 - QUAD $0xcb550fb4384d21d3 // .quad -3795109844276665901 - QUAD $0xc4ce17b399107c22 // .quad -4265445736938701790 - QUAD $0x7e2a53a146606a48 // .quad 9091170749936331336 - QUAD $0xf6019da07f549b2b // .quad -720121152745989333 - QUAD $0x2eda7444cbfc426d // .quad 3376138709496513133 - QUAD $0x99c102844f94e0fb // .quad -7367604748107325189 - QUAD $0xfa911155fefb5308 // .quad -391512631556746488 - QUAD $0xc0314325637a1939 // .quad -4597819916706768583 - QUAD $0x793555ab7eba27ca // .quad 8733981247408842698 - QUAD $0xf03d93eebc589f88 // .quad -1135588877456072824 - QUAD $0x4bc1558b2f3458de // .quad 5458738279630526686 - QUAD $0x96267c7535b763b5 // .quad -7627272076051127371 - QUAD $0x9eb1aaedfb016f16 // .quad -7011635205744005354 - QUAD $0xbbb01b9283253ca2 // .quad -4922404076636521310 - QUAD $0x465e15a979c1cadc // .quad 5070514048102157020 - QUAD $0xea9c227723ee8bcb // .quad -1541319077368263733 - QUAD $0x0bfacd89ec191ec9 // .quad 863228270850154185 - QUAD $0x92a1958a7675175f // .quad -7880853450996246689 - QUAD $0xcef980ec671f667b // .quad -3532650679864695173 - QUAD $0xb749faed14125d36 // .quad -5239380795317920458 - QUAD $0x82b7e12780e7401a // .quad -9027499368258256870 - QUAD $0xe51c79a85916f484 // .quad -1937539975720012668 - QUAD $0xd1b2ecb8b0908810 // .quad -3336344095947716592 - QUAD $0x8f31cc0937ae58d2 // .quad -8128491512466089774 - QUAD $0x861fa7e6dcb4aa15 // .quad -8782116138362033643 - QUAD $0xb2fe3f0b8599ef07 // .quad -5548928372155224313 - QUAD $0x67a791e093e1d49a // .quad 7469098900757009562 - QUAD $0xdfbdcece67006ac9 // .quad -2324474446766642487 - QUAD $0xe0c8bb2c5c6d24e0 // .quad -2249342214667950880 - QUAD $0x8bd6a141006042bd // .quad -8370325556870233411 - QUAD $0x58fae9f773886e18 // .quad 6411694268519837208 - QUAD $0xaecc49914078536d // .quad -5851220927660403859 - QUAD $0xaf39a475506a899e // .quad -5820440219632367202 - QUAD $0xda7f5bf590966848 // .quad -2702340141148116920 - QUAD $0x6d8406c952429603 // .quad 7891439908798240259 - QUAD $0x888f99797a5e012d // .quad -8606491615858654931 - QUAD $0xc8e5087ba6d33b83 // .quad -3970758169284363389 - QUAD $0xaab37fd7d8f58178 // .quad -6146428501395930760 - QUAD $0xfb1e4a9a90880a64 // .quad -351761693178066332 - QUAD $0xd5605fcdcf32e1d6 // .quad -3071349608317525546 - QUAD $0x5cf2eea09a55067f // .quad 6697677969404790399 - QUAD $0x855c3be0a17fcd26 // .quad -8837122532839535322 - QUAD $0xf42faa48c0ea481e // .quad -851274575098787810 - QUAD $0xa6b34ad8c9dfc06f // .quad -6434717147622031249 - QUAD $0xf13b94daf124da26 // .quad -1064093218873484762 - QUAD $0xd0601d8efc57b08b // .quad -3431710416100151157 - QUAD $0x76c53d08d6b70858 // .quad 8558313775058847832 - QUAD $0x823c12795db6ce57 // .quad -9062348037703676329 - QUAD $0x54768c4b0c64ca6e // .quad 6086206200396171886 - QUAD $0xa2cb1717b52481ed // .quad -6716249028702207507 - QUAD $0xa9942f5dcf7dfd09 // .quad -6227300304786948855 - QUAD $0xcb7ddcdda26da268 // .quad -3783625267450371480 - QUAD $0xd3f93b35435d7c4c // .quad -3172439362556298164 - QUAD $0xfe5d54150b090b02 // .quad -117845565885576446 - QUAD $0xc47bc5014a1a6daf // .quad -4288617610811380305 - QUAD $0x9efa548d26e5a6e1 // .quad -6991182506319567135 - QUAD $0x359ab6419ca1091b // .quad 3862600023340550427 - QUAD $0xc6b8e9b0709f109a // .quad -4127292114472071014 - QUAD $0xc30163d203c94b62 // .quad -4395122007679087774 - QUAD $0xf867241c8cc6d4c0 // .quad -547429124662700864 - QUAD $0x79e0de63425dcf1d // .quad 8782263791269039901 - QUAD $0x9b407691d7fc44f8 // .quad -7259672230555269896 - QUAD $0x985915fc12f542e4 // .quad -7468914334623251740 - QUAD $0xc21094364dfb5636 // .quad -4462904269766699466 - QUAD $0x3e6f5b7b17b2939d // .quad 4498915137003099037 - QUAD $0xf294b943e17a2bc4 // .quad -966944318780986428 - QUAD $0xa705992ceecf9c42 // .quad -6411550076227838910 - QUAD $0x979cf3ca6cec5b5a // .quad -7521869226879198374 - QUAD $0x50c6ff782a838353 // .quad 5820620459997365075 - QUAD $0xbd8430bd08277231 // .quad -4790650515171610063 - QUAD $0xa4f8bf5635246428 // .quad -6559282480285457368 - QUAD $0xece53cec4a314ebd // .quad -1376627125537124675 - QUAD $0x871b7795e136be99 // .quad -8711237568605798759 - QUAD $0x940f4613ae5ed136 // .quad -7777920981101784778 - QUAD $0x28e2557b59846e3f // .quad 2946011094524915263 - QUAD $0xb913179899f68584 // .quad -5110715207949843068 - QUAD $0x331aeada2fe589cf // .quad 3682513868156144079 - QUAD $0xe757dd7ec07426e5 // .quad -1776707991509915931 - QUAD $0x3ff0d2c85def7621 // .quad 4607414176811284001 - QUAD $0x9096ea6f3848984f // .quad -8027971522334779313 - QUAD $0x0fed077a756b53a9 // .quad 1147581702586717097 - QUAD $0xb4bca50b065abe63 // .quad -5423278384491086237 - QUAD $0xd3e8495912c62894 // .quad -3177208890193991532 - QUAD $0xe1ebce4dc7f16dfb // .quad -2167411962186469893 - QUAD $0x64712dd7abbbd95c // .quad 7237616480483531100 - QUAD $0x8d3360f09cf6e4bd // .quad -8272161504007625539 - QUAD $0xbd8d794d96aacfb3 // .quad -4788037454677749837 - QUAD $0xb080392cc4349dec // .quad -5728515861582144020 - QUAD $0xecf0d7a0fc5583a0 // .quad -1373360799919799392 - QUAD $0xdca04777f541c567 // .quad -2548958808550292121 - QUAD $0xf41686c49db57244 // .quad -858350499949874620 - QUAD $0x89e42caaf9491b60 // .quad -8510628282985014432 - QUAD $0x311c2875c522ced5 // .quad 3538747893490044629 - QUAD $0xac5d37d5b79b6239 // .quad -6026599335303880135 - QUAD $0x7d633293366b828b // .quad 9035120885289943691 - QUAD $0xd77485cb25823ac7 // .quad -2921563150702462265 - QUAD $0xae5dff9c02033197 // .quad -5882264492762254953 - QUAD $0x86a8d39ef77164bc // .quad -8743505996830120772 - QUAD $0xd9f57f830283fdfc // .quad -2741144597525430788 - QUAD $0xa8530886b54dbdeb // .quad -6317696477610263061 - QUAD $0xd072df63c324fd7b // .quad -3426430746906788485 - QUAD $0xd267caa862a12d66 // .quad -3285434578585440922 - QUAD $0x4247cb9e59f71e6d // .quad 4776009810824339053 - QUAD $0x8380dea93da4bc60 // .quad -8970925639256982432 - QUAD $0x52d9be85f074e608 // .quad 5970012263530423816 - QUAD $0xa46116538d0deb78 // .quad -6601971030643840136 - QUAD $0x67902e276c921f8b // .quad 7462515329413029771 - QUAD $0xcd795be870516656 // .quad -3640777769877412266 - QUAD $0x00ba1cd8a3db53b6 // .quad 52386062455755702 - QUAD $0x806bd9714632dff6 // .quad -9193015133814464522 - QUAD $0x80e8a40eccd228a4 // .quad -9157889458785081180 - QUAD $0xa086cfcd97bf97f3 // .quad -6879582898840692749 - QUAD $0x6122cd128006b2cd // .quad 6999382250228200141 - QUAD $0xc8a883c0fdaf7df0 // .quad -3987792605123478032 - QUAD $0x796b805720085f81 // .quad 8749227812785250177 - QUAD $0xfad2a4b13d1b5d6c // .quad -373054737976959636 - QUAD $0xcbe3303674053bb0 // .quad -3755104653863994448 - QUAD $0x9cc3a6eec6311a63 // .quad -7150688238876681629 - QUAD $0xbedbfc4411068a9c // .quad -4693880817329993060 - QUAD $0xc3f490aa77bd60fc // .quad -4326674280168464132 - QUAD $0xee92fb5515482d44 // .quad -1255665003235103420 - QUAD $0xf4f1b4d515acb93b // .quad -796656831783192261 - QUAD $0x751bdd152d4d1c4a // .quad 8438581409832836170 - QUAD $0x991711052d8bf3c5 // .quad -7415439547505577019 - QUAD $0xd262d45a78a0635d // .quad -3286831292991118499 - QUAD $0xbf5cd54678eef0b6 // .quad -4657613415954583370 - QUAD $0x86fb897116c87c34 // .quad -8720225134666286028 - QUAD $0xef340a98172aace4 // .quad -1210330751515841308 - QUAD $0xd45d35e6ae3d4da0 // .quad -3144297699952734816 - QUAD $0x9580869f0e7aac0e // .quad -7673985747338482674 - QUAD $0x8974836059cca109 // .quad -8542058143368306423 - QUAD $0xbae0a846d2195712 // .quad -4980796165745715438 - QUAD $0x2bd1a438703fc94b // .quad 3157485376071780683 - QUAD $0xe998d258869facd7 // .quad -1614309188754756393 - QUAD $0x7b6306a34627ddcf // .quad 8890957387685944783 - QUAD $0x91ff83775423cc06 // .quad -7926472270612804602 - QUAD $0x1a3bc84c17b1d542 // .quad 1890324697752655170 - QUAD $0xb67f6455292cbf08 // .quad -5296404319838617848 - QUAD $0x20caba5f1d9e4a93 // .quad 2362905872190818963 - QUAD $0xe41f3d6a7377eeca // .quad -2008819381370884406 - QUAD $0x547eb47b7282ee9c // .quad 6088502188546649756 - QUAD $0x8e938662882af53e // .quad -8173041140997884610 - QUAD $0xe99e619a4f23aa43 // .quad -1612744301171463613 - QUAD $0xb23867fb2a35b28d // .quad -5604615407819967859 - QUAD $0x6405fa00e2ec94d4 // .quad 7207441660390446292 - QUAD $0xdec681f9f4c31f31 // .quad -2394083241347571919 - QUAD $0xde83bc408dd3dd04 // .quad -2412877989897052924 - QUAD $0x8b3c113c38f9f37e // .quad -8413831053483314306 - QUAD $0x9624ab50b148d445 // .quad -7627783505798704059 - QUAD $0xae0b158b4738705e // .quad -5905602798426754978 - QUAD $0x3badd624dd9b0957 // .quad 4300328673033783639 - QUAD $0xd98ddaee19068c76 // .quad -2770317479606055818 - QUAD $0xe54ca5d70a80e5d6 // .quad -1923980597781273130 - QUAD $0x87f8a8d4cfa417c9 // .quad -8648977452394866743 - QUAD $0x5e9fcf4ccd211f4c // .quad 6818396289628184396 - QUAD $0xa9f6d30a038d1dbc // .quad -6199535797066195524 - QUAD $0x7647c3200069671f // .quad 8522995362035230495 - QUAD $0xd47487cc8470652b // .quad -3137733727905356501 - QUAD $0x29ecd9f40041e073 // .quad 3021029092058325107 - QUAD $0x84c8d4dfd2c63f3b // .quad -8878612607581929669 - QUAD $0xf468107100525890 // .quad -835399653354481520 - QUAD $0xa5fb0a17c777cf09 // .quad -6486579741050024183 - QUAD $0x7182148d4066eeb4 // .quad 8179122470161673908 - QUAD $0xcf79cc9db955c2cc // .quad -3496538657885142324 - QUAD $0xc6f14cd848405530 // .quad -4111420493003729616 - QUAD $0x81ac1fe293d599bf // .quad -9102865688819295809 - QUAD $0xb8ada00e5a506a7c // .quad -5139275616254662020 - QUAD $0xa21727db38cb002f // .quad -6766896092596731857 - QUAD $0xa6d90811f0e4851c // .quad -6424094520318327524 - QUAD $0xca9cf1d206fdc03b // .quad -3846934097318526917 - QUAD $0x908f4a166d1da663 // .quad -8030118150397909405 - QUAD $0xfd442e4688bd304a // .quad -196981603220770742 - QUAD $0x9a598e4e043287fe // .quad -7324666853212387330 - QUAD $0x9e4a9cec15763e2e // .quad -7040642529654063570 - QUAD $0x40eff1e1853f29fd // .quad 4679224488766679549 - QUAD $0xc5dd44271ad3cdba // .quad -4189117143640191558 - QUAD $0xd12bee59e68ef47c // .quad -3374341425896426372 - QUAD $0xf7549530e188c128 // .quad -624710411122851544 - QUAD $0x82bb74f8301958ce // .quad -9026492418826348338 - QUAD $0x9a94dd3e8cf578b9 // .quad -7307973034592864071 - QUAD $0xe36a52363c1faf01 // .quad -2059743486678159615 - QUAD $0xc13a148e3032d6e7 // .quad -4523280274813692185 - QUAD $0xdc44e6c3cb279ac1 // .quad -2574679358347699519 - QUAD $0xf18899b1bc3f8ca1 // .quad -1042414325089727327 - QUAD $0x29ab103a5ef8c0b9 // .quad 3002511419460075705 - QUAD $0x96f5600f15a7b7e5 // .quad -7569037980822161435 - QUAD $0x7415d448f6b6f0e7 // .quad 8364825292752482535 - QUAD $0xbcb2b812db11a5de // .quad -4849611457600313890 - QUAD $0x111b495b3464ad21 // .quad 1232659579085827361 - QUAD $0xebdf661791d60f56 // .quad -1450328303573004458 - QUAD $0xcab10dd900beec34 // .quad -3841273781498745804 - QUAD $0x936b9fcebb25c995 // .quad -7823984217374209643 - QUAD $0x3d5d514f40eea742 // .quad 4421779809981343554 - QUAD $0xb84687c269ef3bfb // .quad -5168294253290374149 - QUAD $0x0cb4a5a3112a5112 // .quad 915538744049291538 - QUAD $0xe65829b3046b0afa // .quad -1848681798185579782 - QUAD $0x47f0e785eaba72ab // .quad 5183897733458195115 - QUAD $0x8ff71a0fe2c2e6dc // .quad -8072955151507069220 - QUAD $0x59ed216765690f56 // .quad 6479872166822743894 - QUAD $0xb3f4e093db73a093 // .quad -5479507920956448621 - QUAD $0x306869c13ec3532c // .quad 3488154190101041964 - QUAD $0xe0f218b8d25088b8 // .quad -2237698882768172872 - QUAD $0x1e414218c73a13fb // .quad 2180096368813151227 - QUAD $0x8c974f7383725573 // .quad -8316090829371189901 - QUAD $0xe5d1929ef90898fa // .quad -1886565557410948870 - QUAD $0xafbd2350644eeacf // .quad -5783427518286599473 - QUAD $0xdf45f746b74abf39 // .quad -2358206946763686087 - QUAD $0xdbac6c247d62a583 // .quad -2617598379430861437 - QUAD $0x6b8bba8c328eb783 // .quad 7749492695127472003 - QUAD $0x894bc396ce5da772 // .quad -8553528014785370254 - QUAD $0x066ea92f3f326564 // .quad 463493832054564196 - QUAD $0xab9eb47c81f5114f // .quad -6080224000054324913 - QUAD $0xc80a537b0efefebd // .quad -4032318728359182659 - QUAD $0xd686619ba27255a2 // .quad -2988593981640518238 - QUAD $0xbd06742ce95f5f36 // .quad -4826042214438183114 - QUAD $0x8613fd0145877585 // .quad -8785400266166405755 - QUAD $0x2c48113823b73704 // .quad 3190819268807046916 - QUAD $0xa798fc4196e952e7 // .quad -6370064314280619289 - QUAD $0xf75a15862ca504c5 // .quad -623161932418579259 - QUAD $0xd17f3b51fca3a7a0 // .quad -3350894374423386208 - QUAD $0x9a984d73dbe722fb // .quad -7307005235402693893 - QUAD $0x82ef85133de648c4 // .quad -9011838011655698236 - QUAD $0xc13e60d0d2e0ebba // .quad -4522070525825979462 - QUAD $0xa3ab66580d5fdaf5 // .quad -6653111496142234891 - QUAD $0x318df905079926a8 // .quad 3570783879572301480 - QUAD $0xcc963fee10b7d1b3 // .quad -3704703351750405709 - QUAD $0xfdf17746497f7052 // .quad -148206168962011054 - QUAD $0xffbbcfe994e5c61f // .quad -19193171260619233 - QUAD $0xfeb6ea8bedefa633 // .quad -92628855601256909 - QUAD $0x9fd561f1fd0f9bd3 // .quad -6929524759678968877 - QUAD $0xfe64a52ee96b8fc0 // .quad -115786069501571136 - QUAD $0xc7caba6e7c5382c8 // .quad -4050219931171323192 - QUAD $0x3dfdce7aa3c673b0 // .quad 4466953431550423984 - QUAD $0xf9bd690a1b68637b // .quad -451088895536766085 - QUAD $0x06bea10ca65c084e // .quad 486002885505321038 - QUAD $0x9c1661a651213e2d // .quad -7199459587351560659 - QUAD $0x486e494fcff30a62 // .quad 5219189625309039202 - QUAD $0xc31bfa0fe5698db8 // .quad -4387638465762062920 - QUAD $0x5a89dba3c3efccfa // .quad 6523987031636299002 - QUAD $0xf3e2f893dec3f126 // .quad -872862063775190746 - QUAD $0xf89629465a75e01c // .quad -534194123654701028 - QUAD $0x986ddb5c6b3a76b7 // .quad -7463067817500576073 - QUAD $0xf6bbb397f1135823 // .quad -667742654568376285 - QUAD $0xbe89523386091465 // .quad -4717148753448332187 - QUAD $0x746aa07ded582e2c // .quad 8388693718644305452 - QUAD $0xee2ba6c0678b597f // .quad -1284749923383027329 - QUAD $0xa8c2a44eb4571cdc // .quad -6286281471915778852 - QUAD $0x94db483840b717ef // .quad -7720497729755473937 - QUAD $0x92f34d62616ce413 // .quad -7857851839894723565 - QUAD $0xba121a4650e4ddeb // .quad -5038936143766954517 - QUAD $0x77b020baf9c81d17 // .quad 8624429273841147159 - QUAD $0xe896a0d7e51e1566 // .quad -1686984161281305242 - QUAD $0x0ace1474dc1d122e // .quad 778582277723329070 - QUAD $0x915e2486ef32cd60 // .quad -7971894128441897632 - QUAD $0x0d819992132456ba // .quad 973227847154161338 - QUAD $0xb5b5ada8aaff80b8 // .quad -5353181642124984136 - QUAD $0x10e1fff697ed6c69 // .quad 1216534808942701673 - QUAD $0xe3231912d5bf60e6 // .quad -2079791034228842266 - QUAD $0xca8d3ffa1ef463c1 // .quad -3851351762838199359 - QUAD $0x8df5efabc5979c8f // .quad -8217398424034108273 - QUAD $0xbd308ff8a6b17cb2 // .quad -4814189703547749198 - QUAD $0xb1736b96b6fd83b3 // .quad -5660062011615247437 - QUAD $0xac7cb3f6d05ddbde // .quad -6017737129434686498 - QUAD $0xddd0467c64bce4a0 // .quad -2463391496091671392 - QUAD $0x6bcdf07a423aa96b // .quad 7768129340171790699 - QUAD $0x8aa22c0dbef60ee4 // .quad -8457148712698376476 - QUAD $0x86c16c98d2c953c6 // .quad -8736582398494813242 - QUAD $0xad4ab7112eb3929d // .quad -5959749872445582691 - QUAD $0xe871c7bf077ba8b7 // .quad -1697355961263740745 - QUAD $0xd89d64d57a607744 // .quad -2838001322129590460 - QUAD $0x11471cd764ad4972 // .quad 1244995533423855986 - QUAD $0x87625f056c7c4a8b // .quad -8691279853972075893 - QUAD $0xd598e40d3dd89bcf // .quad -3055441601647567921 - QUAD $0xa93af6c6c79b5d2d // .quad -6252413799037706963 - QUAD $0x4aff1d108d4ec2c3 // .quad 5404070034795315907 - QUAD $0xd389b47879823479 // .quad -3203831230369745799 - QUAD $0xcedf722a585139ba // .quad -3539985255894009414 - QUAD $0x843610cb4bf160cb // .quad -8919923546622172981 - QUAD $0xc2974eb4ee658828 // .quad -4424981569867511768 - QUAD $0xa54394fe1eedb8fe // .quad -6538218414850328322 - QUAD $0x733d226229feea32 // .quad 8303831092947774002 - QUAD $0xce947a3da6a9273e // .quad -3561087000135522498 - QUAD $0x0806357d5a3f525f // .quad 578208414664970847 - QUAD $0x811ccc668829b887 // .quad -9143208402725783417 - QUAD $0xca07c2dcb0cf26f7 // .quad -3888925500096174345 - QUAD $0xa163ff802a3426a8 // .quad -6817324484979841368 - QUAD $0xfc89b393dd02f0b5 // .quad -249470856692830027 - QUAD $0xc9bcff6034c13052 // .quad -3909969587797413806 - QUAD $0xbbac2078d443ace2 // .quad -4923524589293425438 - QUAD $0xfc2c3f3841f17c67 // .quad -275775966319379353 - QUAD $0xd54b944b84aa4c0d // .quad -3077202868308390899 - QUAD $0x9d9ba7832936edc0 // .quad -7089889006590693952 - QUAD $0x0a9e795e65d4df11 // .quad 765182433041899281 - QUAD $0xc5029163f384a931 // .quad -4250675239810979535 - QUAD $0x4d4617b5ff4a16d5 // .quad 5568164059729762005 - QUAD $0xf64335bcf065d37d // .quad -701658031336336515 - QUAD $0x504bced1bf8e4e45 // .quad 5785945546544795205 - QUAD $0x99ea0196163fa42e // .quad -7356065297226292178 - QUAD $0xe45ec2862f71e1d6 // .quad -1990940103673781802 - QUAD $0xc06481fb9bcf8d39 // .quad -4583395603105477319 - QUAD $0x5d767327bb4e5a4c // .quad 6734696907262548556 - QUAD $0xf07da27a82c37088 // .quad -1117558485454458744 - QUAD $0x3a6a07f8d510f86f // .quad 4209185567039092847 - QUAD $0x964e858c91ba2655 // .quad -7616003081050118571 - QUAD $0x890489f70a55368b // .quad -8573576096483297653 - QUAD $0xbbe226efb628afea // .quad -4908317832885260310 - QUAD $0x2b45ac74ccea842e // .quad 3118087934678041646 - QUAD $0xeadab0aba3b2dbe5 // .quad -1523711272679187483 - QUAD $0x3b0b8bc90012929d // .quad 4254647968387469981 - QUAD $0x92c8ae6b464fc96f // .quad -7869848573065574033 - QUAD $0x09ce6ebb40173744 // .quad 706623942056949572 - QUAD $0xb77ada0617e3bbcb // .quad -5225624697904579637 - QUAD $0xcc420a6a101d0515 // .quad -3728406090856200939 - QUAD $0xe55990879ddcaabd // .quad -1920344853953336643 - QUAD $0x9fa946824a12232d // .quad -6941939825212513491 - QUAD $0x8f57fa54c2a9eab6 // .quad -8117744561361917258 - QUAD $0x47939822dc96abf9 // .quad 5157633273766521849 - QUAD $0xb32df8e9f3546564 // .quad -5535494683275008668 - QUAD $0x59787e2b93bc56f7 // .quad 6447041592208152311 - QUAD $0xdff9772470297ebd // .quad -2307682335666372931 - QUAD $0x57eb4edb3c55b65a // .quad 6335244004343789146 - QUAD $0x8bfbea76c619ef36 // .quad -8359830487432564938 - QUAD $0xede622920b6b23f1 // .quad -1304317031425039375 - QUAD $0xaefae51477a06b03 // .quad -5838102090863318269 - QUAD $0xe95fab368e45eced // .quad -1630396289281299219 - QUAD $0xdab99e59958885c4 // .quad -2685941595151759932 - QUAD $0x11dbcb0218ebb414 // .quad 1286845328412881940 - QUAD $0x88b402f7fd75539b // .quad -8596242524610931813 - QUAD $0xd652bdc29f26a119 // .quad -3003129357911285479 - QUAD $0xaae103b5fcd2a881 // .quad -6133617137336276863 - QUAD $0x4be76d3346f0495f // .quad 5469460339465668959 - QUAD $0xd59944a37c0752a2 // .quad -3055335403242958174 - QUAD $0x6f70a4400c562ddb // .quad 8030098730593431003 - QUAD $0x857fcae62d8493a5 // .quad -8827113654667930715 - QUAD $0xcb4ccd500f6bb952 // .quad -3797434642040374958 - QUAD $0xa6dfbd9fb8e5b88e // .quad -6422206049907525490 - QUAD $0x7e2000a41346a7a7 // .quad 9088264752731695015 - QUAD $0xd097ad07a71f26b2 // .quad -3416071543957018958 - QUAD $0x8ed400668c0c28c8 // .quad -8154892584824854328 - QUAD $0x825ecc24c873782f // .quad -9052573742614218705 - QUAD $0x728900802f0f32fa // .quad 8253128342678483706 - QUAD $0xa2f67f2dfa90563b // .quad -6704031159840385477 - QUAD $0x4f2b40a03ad2ffb9 // .quad 5704724409920716729 - QUAD $0xcbb41ef979346bca // .quad -3768352931373093942 - QUAD $0xe2f610c84987bfa8 // .quad -2092466524453879896 - QUAD $0xfea126b7d78186bc // .quad -98755145788979524 - QUAD $0x0dd9ca7d2df4d7c9 // .quad 998051431430019017 - QUAD $0x9f24b832e6b0f436 // .quad -6979250993759194058 - QUAD $0x91503d1c79720dbb // .quad -7975807747567252037 - QUAD $0xc6ede63fa05d3143 // .quad -4112377723771604669 - QUAD $0x75a44c6397ce912a // .quad 8476984389250486570 - QUAD $0xf8a95fcf88747d94 // .quad -528786136287117932 - QUAD $0xc986afbe3ee11aba // .quad -3925256793573221702 - QUAD $0x9b69dbe1b548ce7c // .quad -7248020362820530564 - QUAD $0xfbe85badce996168 // .quad -294884973539139224 - QUAD $0xc24452da229b021b // .quad -4448339435098275301 - QUAD $0xfae27299423fb9c3 // .quad -368606216923924029 - QUAD $0xf2d56790ab41c2a2 // .quad -948738275445456222 - QUAD $0xdccd879fc967d41a // .quad -2536221894791146470 - QUAD $0x97c560ba6b0919a5 // .quad -7510490449794491995 - QUAD $0x5400e987bbc1c920 // .quad 6053094668365842720 - QUAD $0xbdb6b8e905cb600f // .quad -4776427043815727089 - QUAD $0x290123e9aab23b68 // .quad 2954682317029915496 - QUAD $0xed246723473e3813 // .quad -1358847786342270957 - QUAD $0xf9a0b6720aaf6521 // .quad -459166561069996767 - QUAD $0x9436c0760c86e30b // .quad -7766808894105001205 - QUAD $0xf808e40e8d5b3e69 // .quad -573958201337495959 - QUAD $0xb94470938fa89bce // .quad -5096825099203863602 - QUAD $0xb60b1d1230b20e04 // .quad -5329133770099257852 - QUAD $0xe7958cb87392c2c2 // .quad -1759345355577441598 - QUAD $0xb1c6f22b5e6f48c2 // .quad -5636551615525730110 - QUAD $0x90bd77f3483bb9b9 // .quad -8017119874876982855 - QUAD $0x1e38aeb6360b1af3 // .quad 2177682517447613171 - QUAD $0xb4ecd5f01a4aa828 // .quad -5409713825168840664 - QUAD $0x25c6da63c38de1b0 // .quad 2722103146809516464 - QUAD $0xe2280b6c20dd5232 // .quad -2150456263033662926 - QUAD $0x579c487e5a38ad0e // .quad 6313000485183335694 - QUAD $0x8d590723948a535f // .quad -8261564192037121185 - QUAD $0x2d835a9df0c6d851 // .quad 3279564588051781713 - QUAD $0xb0af48ec79ace837 // .quad -5715269221619013577 - QUAD $0xf8e431456cf88e65 // .quad -512230283362660763 - QUAD $0xdcdb1b2798182244 // .quad -2532400508596379068 - QUAD $0x1b8e9ecb641b58ff // .quad 1985699082112030975 - QUAD $0x8a08f0f8bf0f156b // .quad -8500279345513818773 - QUAD $0xe272467e3d222f3f // .quad -2129562165787349185 - QUAD $0xac8b2d36eed2dac5 // .quad -6013663163464885563 - QUAD $0x5b0ed81dcc6abb0f // .quad 6561419329620589327 - QUAD $0xd7adf884aa879177 // .quad -2905392935903719049 - QUAD $0x98e947129fc2b4e9 // .quad -7428327965055601431 - QUAD $0x86ccbb52ea94baea // .quad -8733399612580906262 - QUAD $0x3f2398d747b36224 // .quad 4549648098962661924 - QUAD $0xa87fea27a539e9a5 // .quad -6305063497298744923 - QUAD $0x8eec7f0d19a03aad // .quad -8147997931578836307 - QUAD $0xd29fe4b18e88640e // .quad -3269643353196043250 - QUAD $0x1953cf68300424ac // .quad 1825030320404309164 - QUAD $0x83a3eeeef9153e89 // .quad -8961056123388608887 - QUAD $0x5fa8c3423c052dd7 // .quad 6892973918932774359 - QUAD $0xa48ceaaab75a8e2b // .quad -6589634135808373205 - QUAD $0x3792f412cb06794d // .quad 4004531380238580045 - QUAD $0xcdb02555653131b6 // .quad -3625356651333078602 - QUAD $0xe2bbd88bbee40bd0 // .quad -2108853905778275376 - QUAD $0x808e17555f3ebf11 // .quad -9183376934724255983 - QUAD $0x5b6aceaeae9d0ec4 // .quad 6587304654631931588 - QUAD $0xa0b19d2ab70e6ed6 // .quad -6867535149977932074 - QUAD $0xf245825a5a445275 // .quad -989241218564861323 - QUAD $0xc8de047564d20a8b // .quad -3972732919045027189 - QUAD $0xeed6e2f0f0d56712 // .quad -1236551523206076654 - QUAD $0xfb158592be068d2e // .quad -354230130378896082 - QUAD $0x55464dd69685606b // .quad 6144684325637283947 - QUAD $0x9ced737bb6c4183d // .quad -7138922859127891907 - QUAD $0xaa97e14c3c26b886 // .quad -6154202648235558778 - QUAD $0xc428d05aa4751e4c // .quad -4311967555482476980 - QUAD $0xd53dd99f4b3066a8 // .quad -3081067291867060568 - QUAD $0xf53304714d9265df // .quad -778273425925708321 - QUAD $0xe546a8038efe4029 // .quad -1925667057416912855 - QUAD $0x993fe2c6d07b7fab // .quad -7403949918844649557 - QUAD $0xde98520472bdd033 // .quad -2407083821771141069 - QUAD $0xbf8fdb78849a5f96 // .quad -4643251380128424042 - QUAD $0x963e66858f6d4440 // .quad -7620540795641314240 - QUAD $0xef73d256a5c0f77c // .quad -1192378206733142148 - QUAD $0xdde7001379a44aa8 // .quad -2456994988062127448 - QUAD $0x95a8637627989aad // .quad -7662765406849295699 - QUAD $0x5560c018580d5d52 // .quad 6152128301777116498 - QUAD $0xbb127c53b17ec159 // .quad -4966770740134231719 - QUAD $0xaab8f01e6e10b4a6 // .quad -6144897678060768090 - QUAD $0xe9d71b689dde71af // .quad -1596777406740401745 - QUAD $0xcab3961304ca70e8 // .quad -3840561048787980056 - QUAD $0x9226712162ab070d // .quad -7915514906853832947 - QUAD $0x3d607b97c5fd0d22 // .quad 4422670725869800738 - QUAD $0xb6b00d69bb55c8d1 // .quad -5282707615139903279 - QUAD $0x8cb89a7db77c506a // .quad -8306719647944912790 - QUAD $0xe45c10c42a2b3b05 // .quad -1991698500497491195 - QUAD $0x77f3608e92adb242 // .quad 8643358275316593218 - QUAD $0x8eb98a7a9a5b04e3 // .quad -8162340590452013853 - QUAD $0x55f038b237591ed3 // .quad 6192511825718353619 - QUAD $0xb267ed1940f1c61c // .quad -5591239719637629412 - QUAD $0x6b6c46dec52f6688 // .quad 7740639782147942024 - QUAD $0xdf01e85f912e37a3 // .quad -2377363631119648861 - QUAD $0x2323ac4b3b3da015 // .quad 2532056854628769813 - QUAD $0x8b61313bbabce2c6 // .quad -8403381297090862394 - QUAD $0xabec975e0a0d081a // .quad -6058300968568813542 - QUAD $0xae397d8aa96c1b77 // .quad -5892540602936190089 - QUAD $0x96e7bd358c904a21 // .quad -7572876210711016927 - QUAD $0xd9c7dced53c72255 // .quad -2753989735242849707 - QUAD $0x7e50d64177da2e54 // .quad 9102010423587778132 - QUAD $0x881cea14545c7575 // .quad -8638772612167862923 - QUAD $0xdde50bd1d5d0b9e9 // .quad -2457545025797441047 - QUAD $0xaa242499697392d2 // .quad -6186779746782440750 - QUAD $0x955e4ec64b44e864 // .quad -7683617300674189212 - QUAD $0xd4ad2dbfc3d07787 // .quad -3121788665050663033 - QUAD $0xbd5af13bef0b113e // .quad -4802260812921368258 - QUAD $0x84ec3c97da624ab4 // .quad -8868646943297746252 - QUAD $0xecb1ad8aeacdd58e // .quad -1391139997724322418 - QUAD $0xa6274bbdd0fadd61 // .quad -6474122660694794911 - QUAD $0x67de18eda5814af2 // .quad 7484447039699372786 - QUAD $0xcfb11ead453994ba // .quad -3480967307441105734 - QUAD $0x80eacf948770ced7 // .quad -9157278655470055721 - QUAD $0x81ceb32c4b43fcf4 // .quad -9093133594791772940 - QUAD $0xa1258379a94d028d // .quad -6834912300910181747 - QUAD $0xa2425ff75e14fc31 // .quad -6754730975062328271 - QUAD $0x096ee45813a04330 // .quad 679731660717048624 - QUAD $0xcad2f7f5359a3b3e // .quad -3831727700400522434 - QUAD $0x8bca9d6e188853fc // .quad -8373707460958465028 - QUAD $0xfd87b5f28300ca0d // .quad -177973607073265139 - QUAD $0x775ea264cf55347d // .quad 8601490892183123069 - QUAD $0x9e74d1b791e07e48 // .quad -7028762532061872568 - QUAD $0x95364afe032a819d // .quad -7694880458480647779 - QUAD $0xc612062576589dda // .quad -4174267146649952806 - QUAD $0x3a83ddbd83f52204 // .quad 4216457482181353988 - QUAD $0xf79687aed3eec551 // .quad -606147914885053103 - QUAD $0xc4926a9672793542 // .quad -4282243101277735614 - QUAD $0x9abe14cd44753b52 // .quad -7296371474444240046 - QUAD $0x75b7053c0f178293 // .quad 8482254178684994195 - QUAD $0xc16d9a0095928a27 // .quad -4508778324627912153 - QUAD $0x5324c68b12dd6338 // .quad 5991131704928854840 - QUAD $0xf1c90080baf72cb1 // .quad -1024286887357502287 - QUAD $0xd3f6fc16ebca5e03 // .quad -3173071712060547581 - QUAD $0x971da05074da7bee // .quad -7557708332239520786 - QUAD $0x88f4bb1ca6bcf584 // .quad -8578025658503072380 - QUAD $0xbce5086492111aea // .quad -4835449396872013078 - QUAD $0x2b31e9e3d06c32e5 // .quad 3112525982153323237 - QUAD $0xec1e4a7db69561a5 // .quad -1432625727662628443 - QUAD $0x3aff322e62439fcf // .quad 4251171748059520975 - QUAD $0x9392ee8e921d5d07 // .quad -7812920107430224633 - QUAD $0x09befeb9fad487c2 // .quad 702278666647013314 - QUAD $0xb877aa3236a4b449 // .quad -5154464115860392887 - QUAD $0x4c2ebe687989a9b3 // .quad 5489534351736154547 - QUAD $0xe69594bec44de15b // .quad -1831394126398103205 - QUAD $0x0f9d37014bf60a10 // .quad 1125115960621402640 - QUAD $0x901d7cf73ab0acd9 // .quad -8062150356639896359 - QUAD $0x538484c19ef38c94 // .quad 6018080969204141204 - QUAD $0xb424dc35095cd80f // .quad -5466001927372482545 - QUAD $0x2865a5f206b06fb9 // .quad 2910915193077788601 - QUAD $0xe12e13424bb40e13 // .quad -2220816390788215277 - QUAD $0xf93f87b7442e45d3 // .quad -486521013540076077 - QUAD $0x8cbccc096f5088cb // .quad -8305539271883716405 - QUAD $0xf78f69a51539d748 // .quad -608151266925095096 - QUAD $0xafebff0bcb24aafe // .quad -5770238071427257602 - QUAD $0xb573440e5a884d1b // .quad -5371875102083756773 - QUAD $0xdbe6fecebdedd5be // .quad -2601111570856684098 - QUAD $0x31680a88f8953030 // .quad 3560107088838733872 - QUAD $0x89705f4136b4a597 // .quad -8543223759426509417 - QUAD $0xfdc20d2b36ba7c3d // .quad -161552157378970563 - QUAD $0xabcc77118461cefc // .quad -6067343680855748868 - QUAD $0x3d32907604691b4c // .quad 4409745821703674700 - QUAD $0xd6bf94d5e57a42bc // .quad -2972493582642298180 - QUAD $0xa63f9a49c2c1b10f // .quad -6467280898289979121 - QUAD $0x8637bd05af6c69b5 // .quad -8775337516792518219 - QUAD $0x0fcf80dc33721d53 // .quad 1139270913992301907 - QUAD $0xa7c5ac471b478423 // .quad -6357485877563259869 - QUAD $0xd3c36113404ea4a8 // .quad -3187597375937010520 - QUAD $0xd1b71758e219652b // .quad -3335171328526686933 - QUAD $0x645a1cac083126e9 // .quad 7231123676894144233 - QUAD $0x83126e978d4fdf3b // .quad -9002011107970261189 - QUAD $0x3d70a3d70a3d70a3 // .quad 4427218577690292387 - QUAD $0xa3d70a3d70a3d70a // .quad -6640827866535438582 - QUAD $0xcccccccccccccccc; QUAD $0xcccccccccccccccc // .space 16, '\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc' - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x8000000000000000 // .quad -9223372036854775808 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xa000000000000000 // .quad -6917529027641081856 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xc800000000000000 // .quad -4035225266123964416 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xfa00000000000000 // .quad -432345564227567616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9c40000000000000 // .quad -7187745005283311616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xc350000000000000 // .quad -4372995238176751616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xf424000000000000 // .quad -854558029293551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9896800000000000 // .quad -7451627795949551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xbebc200000000000 // .quad -4702848726509551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xee6b280000000000 // .quad -1266874889709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9502f90000000000 // .quad -7709325833709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xba43b74000000000 // .quad -5024971273709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xe8d4a51000000000 // .quad -1669528073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9184e72a00000000 // .quad -7960984073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xb5e620f480000000 // .quad -5339544073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xe35fa931a0000000 // .quad -2062744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x8e1bc9bf04000000 // .quad -8206744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xb1a2bc2ec5000000 // .quad -5646744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xde0b6b3a76400000 // .quad -2446744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x8ac7230489e80000 // .quad -8446744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xad78ebc5ac620000 // .quad -5946744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xd8d726b7177a8000 // .quad -2821744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x878678326eac9000 // .quad -8681119073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xa968163f0a57b400 // .quad -6239712823709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xd3c21bcecceda100 // .quad -3187955011209551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x84595161401484a0 // .quad -8910000909647051616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xa56fa5b99019a5c8 // .quad -6525815118631426616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xcecb8f27f4200f3a // .quad -3545582879861895366 - QUAD $0x4000000000000000 // .quad 4611686018427387904 - QUAD $0x813f3978f8940984 // .quad -9133518327554766460 - QUAD $0x5000000000000000 // .quad 5764607523034234880 - QUAD $0xa18f07d736b90be5 // .quad -6805211891016070171 - QUAD $0xa400000000000000 // .quad -6629298651489370112 - QUAD $0xc9f2c9cd04674ede // .quad -3894828845342699810 - QUAD $0x4d00000000000000 // .quad 5548434740920451072 - QUAD $0xfc6f7c4045812296 // .quad -256850038250986858 - QUAD $0xf020000000000000 // .quad -1143914305352105984 - QUAD $0x9dc5ada82b70b59d // .quad -7078060301547948643 - QUAD $0x6c28000000000000 // .quad 7793479155164643328 - QUAD $0xc5371912364ce305 // .quad -4235889358507547899 - QUAD $0xc732000000000000 // .quad -4093209111326359552 - QUAD $0xf684df56c3e01bc6 // .quad -683175679707046970 - QUAD $0x3c7f400000000000 // .quad 4359273333062107136 - QUAD $0x9a130b963a6c115c // .quad -7344513827457986212 - QUAD $0x4b9f100000000000 // .quad 5449091666327633920 - QUAD $0xc097ce7bc90715b3 // .quad -4568956265895094861 - QUAD $0x1e86d40000000000 // .quad 2199678564482154496 - QUAD $0xf0bdc21abb48db20 // .quad -1099509313941480672 - QUAD $0x1314448000000000 // .quad 1374799102801346560 - QUAD $0x96769950b50d88f4 // .quad -7604722348854507276 - QUAD $0x17d955a000000000 // .quad 1718498878501683200 - QUAD $0xbc143fa4e250eb31 // .quad -4894216917640746191 - QUAD $0x5dcfab0800000000 // .quad 6759809616554491904 - QUAD $0xeb194f8e1ae525fd // .quad -1506085128623544835 - QUAD $0x5aa1cae500000000 // .quad 6530724019560251392 - QUAD $0x92efd1b8d0cf37be // .quad -7858832233030797378 - QUAD $0xf14a3d9e40000000 // .quad -1059967012404461568 - QUAD $0xb7abc627050305ad // .quad -5211854272861108819 - QUAD $0x6d9ccd05d0000000 // .quad 7898413271349198848 - QUAD $0xe596b7b0c643c719 // .quad -1903131822648998119 - QUAD $0xe4820023a2000000 // .quad -1981020733047832576 - QUAD $0x8f7e32ce7bea5c6f // .quad -8106986416796705681 - QUAD $0xdda2802c8a800000 // .quad -2476275916309790720 - QUAD $0xb35dbf821ae4f38b // .quad -5522047002568494197 - QUAD $0xd50b2037ad200000 // .quad -3095344895387238400 - QUAD $0xe0352f62a19e306e // .quad -2290872734783229842 - QUAD $0x4526f422cc340000 // .quad 4982938468024057856 - QUAD $0x8c213d9da502de45 // .quad -8349324486880600507 - QUAD $0x9670b12b7f410000 // .quad -7606384970252091392 - QUAD $0xaf298d050e4395d6 // .quad -5824969590173362730 - QUAD $0x3c0cdd765f114000 // .quad 4327076842467049472 - QUAD $0xdaf3f04651d47b4c // .quad -2669525969289315508 - QUAD $0xa5880a69fb6ac800 // .quad -6518949010312869888 - QUAD $0x88d8762bf324cd0f // .quad -8585982758446904049 - QUAD $0x8eea0d047a457a00 // .quad -8148686262891087360 - QUAD $0xab0e93b6efee0053 // .quad -6120792429631242157 - QUAD $0x72a4904598d6d880 // .quad 8260886245095692416 - QUAD $0xd5d238a4abe98068 // .quad -3039304518611664792 - QUAD $0x47a6da2b7f864750 // .quad 5163053903184807760 - QUAD $0x85a36366eb71f041 // .quad -8817094351773372351 - QUAD $0x999090b65f67d924 // .quad -7381240676301154012 - QUAD $0xa70c3c40a64e6c51 // .quad -6409681921289327535 - QUAD $0xfff4b4e3f741cf6d // .quad -3178808521666707 - QUAD $0xd0cf4b50cfe20765 // .quad -3400416383184271515 - QUAD $0xbff8f10e7a8921a4 // .quad -4613672773753429596 - QUAD $0x82818f1281ed449f // .quad -9042789267131251553 - QUAD $0xaff72d52192b6a0d // .quad -5767090967191786995 - QUAD $0xa321f2d7226895c7 // .quad -6691800565486676537 - QUAD $0x9bf4f8a69f764490 // .quad -7208863708989733744 - QUAD $0xcbea6f8ceb02bb39 // .quad -3753064688430957767 - QUAD $0x02f236d04753d5b4 // .quad 212292400617608628 - QUAD $0xfee50b7025c36a08 // .quad -79644842111309304 - QUAD $0x01d762422c946590 // .quad 132682750386005392 - QUAD $0x9f4f2726179a2245 // .quad -6967307053960650171 - QUAD $0x424d3ad2b7b97ef5 // .quad 4777539456409894645 - QUAD $0xc722f0ef9d80aad6 // .quad -4097447799023424810 - QUAD $0xd2e0898765a7deb2 // .quad -3251447716342407502 - QUAD $0xf8ebad2b84e0d58b // .quad -510123730351893109 - QUAD $0x63cc55f49f88eb2f // .quad 7191217214140771119 - QUAD $0x9b934c3b330c8577 // .quad -7236356359111015049 - QUAD $0x3cbf6b71c76b25fb // .quad 4377335499248575995 - QUAD $0xc2781f49ffcfa6d5 // .quad -4433759430461380907 - QUAD $0x8bef464e3945ef7a // .quad -8363388681221443718 - QUAD $0xf316271c7fc3908a // .quad -930513269649338230 - QUAD $0x97758bf0e3cbb5ac // .quad -7532960934977096276 - QUAD $0x97edd871cfda3a56 // .quad -7499099821171918250 - QUAD $0x3d52eeed1cbea317 // .quad 4418856886560793367 - QUAD $0xbde94e8e43d0c8ec // .quad -4762188758037509908 - QUAD $0x4ca7aaa863ee4bdd // .quad 5523571108200991709 - QUAD $0xed63a231d4c4fb27 // .quad -1341049929119499481 - QUAD $0x8fe8caa93e74ef6a // .quad -8076983103442849942 - QUAD $0x945e455f24fb1cf8 // .quad -7755685233340769032 - QUAD $0xb3e2fd538e122b44 // .quad -5484542860876174524 - QUAD $0xb975d6b6ee39e436 // .quad -5082920523248573386 - QUAD $0x60dbbca87196b616 // .quad 6979379479186945558 - QUAD $0xe7d34c64a9c85d44 // .quad -1741964635633328828 - QUAD $0xbc8955e946fe31cd // .quad -4861259862362934835 - QUAD $0x90e40fbeea1d3a4a // .quad -8006256924911912374 - QUAD $0x6babab6398bdbe41 // .quad 7758483227328495169 - QUAD $0xb51d13aea4a488dd // .quad -5396135137712502563 - QUAD $0xc696963c7eed2dd1 // .quad -4136954021121544751 - QUAD $0xe264589a4dcdab14 // .quad -2133482903713240300 - QUAD $0xfc1e1de5cf543ca2 // .quad -279753253987271518 - QUAD $0x8d7eb76070a08aec // .quad -8250955842461857044 - QUAD $0x3b25a55f43294bcb // .quad 4261994450943298507 - QUAD $0xb0de65388cc8ada8 // .quad -5702008784649933400 - QUAD $0x49ef0eb713f39ebe // .quad 5327493063679123134 - QUAD $0xdd15fe86affad912 // .quad -2515824962385028846 - QUAD $0x6e3569326c784337 // .quad 7941369183226839863 - QUAD $0x8a2dbf142dfcc7ab // .quad -8489919629131724885 - QUAD $0x49c2c37f07965404 // .quad 5315025460606161924 - QUAD $0xacb92ed9397bf996 // .quad -6000713517987268202 - QUAD $0xdc33745ec97be906 // .quad -2579590211097073402 - QUAD $0xd7e77a8f87daf7fb // .quad -2889205879056697349 - QUAD $0x69a028bb3ded71a3 // .quad 7611128154919104931 - QUAD $0x86f0ac99b4e8dafd // .quad -8723282702051517699 - QUAD $0xc40832ea0d68ce0c // .quad -4321147861633282548 - QUAD $0xa8acd7c0222311bc // .quad -6292417359137009220 - QUAD $0xf50a3fa490c30190 // .quad -789748808614215280 - QUAD $0xd2d80db02aabd62b // .quad -3253835680493873621 - QUAD $0x792667c6da79e0fa // .quad 8729779031470891258 - QUAD $0x83c7088e1aab65db // .quad -8951176327949752869 - QUAD $0x577001b891185938 // .quad 6300537770911226168 - QUAD $0xa4b8cab1a1563f52 // .quad -6577284391509803182 - QUAD $0xed4c0226b55e6f86 // .quad -1347699823215743098 - QUAD $0xcde6fd5e09abcf26 // .quad -3609919470959866074 - QUAD $0x544f8158315b05b4 // .quad 6075216638131242420 - QUAD $0x80b05e5ac60b6178 // .quad -9173728696990998152 - QUAD $0x696361ae3db1c721 // .quad 7594020797664053025 - QUAD $0xa0dc75f1778e39d6 // .quad -6855474852811359786 - QUAD $0x03bc3a19cd1e38e9 // .quad 269153960225290473 - QUAD $0xc913936dd571c84c // .quad -3957657547586811828 - QUAD $0x04ab48a04065c723 // .quad 336442450281613091 - QUAD $0xfb5878494ace3a5f // .quad -335385916056126881 - QUAD $0x62eb0d64283f9c76 // .quad 7127805559067090038 - QUAD $0x9d174b2dcec0e47b // .quad -7127145225176161157 - QUAD $0x3ba5d0bd324f8394 // .quad 4298070930406474644 - QUAD $0xc45d1df942711d9a // .quad -4297245513042813542 - QUAD $0xca8f44ec7ee36479 // .quad -3850783373846682503 - QUAD $0xf5746577930d6500 // .quad -759870872876129024 - QUAD $0x7e998b13cf4e1ecb // .quad 9122475437414293195 - QUAD $0x9968bf6abbe85f20 // .quad -7392448323188662496 - QUAD $0x9e3fedd8c321a67e // .quad -7043649776941685122 - QUAD $0xbfc2ef456ae276e8 // .quad -4628874385558440216 - QUAD $0xc5cfe94ef3ea101e // .quad -4192876202749718498 - QUAD $0xefb3ab16c59b14a2 // .quad -1174406963520662366 - QUAD $0xbba1f1d158724a12 // .quad -4926390635932268014 - QUAD $0x95d04aee3b80ece5 // .quad -7651533379841495835 - QUAD $0x2a8a6e45ae8edc97 // .quad 3065383741939440791 - QUAD $0xbb445da9ca61281f // .quad -4952730706374481889 - QUAD $0xf52d09d71a3293bd // .quad -779956341003086915 - QUAD $0xea1575143cf97226 // .quad -1579227364540714458 - QUAD $0x593c2626705f9c56 // .quad 6430056314514152534 - QUAD $0x924d692ca61be758 // .quad -7904546130479028392 - QUAD $0x6f8b2fb00c77836c // .quad 8037570393142690668 - QUAD $0xb6e0c377cfa2e12e // .quad -5268996644671397586 - QUAD $0x0b6dfb9c0f956447 // .quad 823590954573587527 - QUAD $0xe498f455c38b997a // .quad -1974559787411859078 - QUAD $0x4724bd4189bd5eac // .quad 5126430365035880108 - QUAD $0x8edf98b59a373fec // .quad -8151628894773493780 - QUAD $0x58edec91ec2cb657 // .quad 6408037956294850135 - QUAD $0xb2977ee300c50fe7 // .quad -5577850100039479321 - QUAD $0x2f2967b66737e3ed // .quad 3398361426941174765 - QUAD $0xdf3d5e9bc0f653e1 // .quad -2360626606621961247 - QUAD $0xbd79e0d20082ee74 // .quad -4793553135802847628 - QUAD $0x8b865b215899f46c // .quad -8392920656779807636 - QUAD $0xecd8590680a3aa11 // .quad -1380255401326171631 - QUAD $0xae67f1e9aec07187 // .quad -5879464802547371641 - QUAD $0xe80e6f4820cc9495 // .quad -1725319251657714539 - QUAD $0xda01ee641a708de9 // .quad -2737644984756826647 - QUAD $0x3109058d147fdcdd // .quad 3533361486141316317 - QUAD $0x884134fe908658b2 // .quad -8628557143114098510 - QUAD $0xbd4b46f0599fd415 // .quad -4806670179178130411 - QUAD $0xaa51823e34a7eede // .quad -6174010410465235234 - QUAD $0x6c9e18ac7007c91a // .quad 7826720331309500698 - QUAD $0xd4e5e2cdc1d1ea96 // .quad -3105826994654156138 - QUAD $0x03e2cf6bc604ddb0 // .quad 280014188641050032 - QUAD $0x850fadc09923329e // .quad -8858670899299929442 - QUAD $0x84db8346b786151c // .quad -8873354301053463268 - QUAD $0xa6539930bf6bff45 // .quad -6461652605697523899 - QUAD $0xe612641865679a63 // .quad -1868320839462053277 - QUAD $0xcfe87f7cef46ff16 // .quad -3465379738694516970 - QUAD $0x4fcb7e8f3f60c07e // .quad 5749828502977298558 - QUAD $0x81f14fae158c5f6e // .quad -9083391364325154962 - QUAD $0xe3be5e330f38f09d // .quad -2036086408133152611 - QUAD $0xa26da3999aef7749 // .quad -6742553186979055799 - QUAD $0x5cadf5bfd3072cc5 // .quad 6678264026688335045 - QUAD $0xcb090c8001ab551c // .quad -3816505465296431844 - QUAD $0x73d9732fc7c8f7f6 // .quad 8347830033360418806 - QUAD $0xfdcb4fa002162a63 // .quad -158945813193151901 - QUAD $0x2867e7fddcdd9afa // .quad 2911550761636567802 - QUAD $0x9e9f11c4014dda7e // .quad -7016870160886801794 - QUAD $0xb281e1fd541501b8 // .quad -5583933584809066056 - QUAD $0xc646d63501a1511d // .quad -4159401682681114339 - QUAD $0x1f225a7ca91a4226 // .quad 2243455055843443238 - QUAD $0xf7d88bc24209a565 // .quad -587566084924005019 - QUAD $0x3375788de9b06958 // .quad 3708002419115845976 - QUAD $0x9ae757596946075f // .quad -7284757830718584993 - QUAD $0x0052d6b1641c83ae // .quad 23317005467419566 - QUAD $0xc1a12d2fc3978937 // .quad -4494261269970843337 - QUAD $0xc0678c5dbd23a49a // .quad -4582539761593113446 - QUAD $0xf209787bb47d6b84 // .quad -1006140569036166268 - QUAD $0xf840b7ba963646e0 // .quad -558244341782001952 - QUAD $0x9745eb4d50ce6332 // .quad -7546366883288685774 - QUAD $0xb650e5a93bc3d898 // .quad -5309491445654890344 - QUAD $0xbd176620a501fbff // .quad -4821272585683469313 - QUAD $0xa3e51f138ab4cebe // .quad -6636864307068612930 - QUAD $0xec5d3fa8ce427aff // .quad -1414904713676948737 - QUAD $0xc66f336c36b10137 // .quad -4148040191917883081 - QUAD $0x93ba47c980e98cdf // .quad -7801844473689174817 - QUAD $0xb80b0047445d4184 // .quad -5185050239897353852 - QUAD $0xb8a8d9bbe123f017 // .quad -5140619573684080617 - QUAD $0xa60dc059157491e5 // .quad -6481312799871692315 - QUAD $0xe6d3102ad96cec1d // .quad -1814088448677712867 - QUAD $0x87c89837ad68db2f // .quad -8662506518347195601 - QUAD $0x9043ea1ac7e41392 // .quad -8051334308064652398 - QUAD $0x29babe4598c311fb // .quad 3006924907348169211 - QUAD $0xb454e4a179dd1877 // .quad -5452481866653427593 - QUAD $0xf4296dd6fef3d67a // .quad -853029884242176390 - QUAD $0xe16a1dc9d8545e94 // .quad -2203916314889396588 - QUAD $0x1899e4a65f58660c // .quad 1772699331562333708 - QUAD $0x8ce2529e2734bb1d // .quad -8294976724446954723 - QUAD $0x5ec05dcff72e7f8f // .quad 6827560182880305039 - QUAD $0xb01ae745b101e9e4 // .quad -5757034887131305500 - QUAD $0x76707543f4fa1f73 // .quad 8534450228600381299 - QUAD $0xdc21a1171d42645d // .quad -2584607590486743971 - QUAD $0x6a06494a791c53a8 // .quad 7639874402088932264 - QUAD $0x899504ae72497eba // .quad -8532908771695296838 - QUAD $0x0487db9d17636892 // .quad 326470965756389522 - QUAD $0xabfa45da0edbde69 // .quad -6054449946191733143 - QUAD $0x45a9d2845d3c42b6 // .quad 5019774725622874806 - QUAD $0xd6f8d7509292d603 // .quad -2956376414312278525 - QUAD $0x0b8a2392ba45a9b2 // .quad 831516194300602802 - QUAD $0x865b86925b9bc5c2 // .quad -8765264286586255934 - QUAD $0x8e6cac7768d7141e // .quad -8183976793979022306 - QUAD $0xa7f26836f282b732 // .quad -6344894339805432014 - QUAD $0x3207d795430cd926 // .quad 3605087062808385830 - QUAD $0xd1ef0244af2364ff // .quad -3319431906329402113 - QUAD $0x7f44e6bd49e807b8 // .quad 9170708441896323000 - QUAD $0x8335616aed761f1f // .quad -8992173969096958177 - QUAD $0x5f16206c9c6209a6 // .quad 6851699533943015846 - QUAD $0xa402b9c5a8d3a6e7 // .quad -6628531442943809817 - QUAD $0x36dba887c37a8c0f // .quad 3952938399001381903 - QUAD $0xcd036837130890a1 // .quad -3673978285252374367 - QUAD $0xc2494954da2c9789 // .quad -4446942528265218167 - QUAD $0x802221226be55a64 // .quad -9213765455923815836 - QUAD $0xf2db9baa10b7bd6c // .quad -946992141904134804 - QUAD $0xa02aa96b06deb0fd // .quad -6905520801477381891 - QUAD $0x6f92829494e5acc7 // .quad 8039631859474607303 - QUAD $0xc83553c5c8965d3d // .quad -4020214983419339459 - QUAD $0xcb772339ba1f17f9 // .quad -3785518230938904583 - QUAD $0xfa42a8b73abbf48c // .quad -413582710846786420 - QUAD $0xff2a760414536efb // .quad -60105885123121413 - QUAD $0x9c69a97284b578d7 // .quad -7176018221920323369 - QUAD $0xfef5138519684aba // .quad -75132356403901766 - QUAD $0xc38413cf25e2d70d // .quad -4358336758973016307 - QUAD $0x7eb258665fc25d69 // .quad 9129456591349898601 - QUAD $0xf46518c2ef5b8cd1 // .quad -836234930288882479 - QUAD $0xef2f773ffbd97a61 // .quad -1211618658047395231 - QUAD $0x98bf2f79d5993802 // .quad -7440175859071633406 - QUAD $0xaafb550ffacfd8fa // .quad -6126209340986631942 - QUAD $0xbeeefb584aff8603 // .quad -4688533805412153853 - QUAD $0x95ba2a53f983cf38 // .quad -7657761676233289928 - QUAD $0xeeaaba2e5dbf6784 // .quad -1248981238337804412 - QUAD $0xdd945a747bf26183 // .quad -2480258038432112253 - QUAD $0x952ab45cfa97a0b2 // .quad -7698142301602209614 - QUAD $0x94f971119aeef9e4 // .quad -7712008566467528220 - QUAD $0xba756174393d88df // .quad -5010991858575374113 - QUAD $0x7a37cd5601aab85d // .quad 8806733365625141341 - QUAD $0xe912b9d1478ceb17 // .quad -1652053804791829737 - QUAD $0xac62e055c10ab33a // .quad -6025006692552756422 - QUAD $0x91abb422ccb812ee // .quad -7950062655635975442 - QUAD $0x577b986b314d6009 // .quad 6303799689591218185 - QUAD $0xb616a12b7fe617aa // .quad -5325892301117581398 - QUAD $0xed5a7e85fda0b80b // .quad -1343622424865753077 - QUAD $0xe39c49765fdf9d94 // .quad -2045679357969588844 - QUAD $0x14588f13be847307 // .quad 1466078993672598279 - QUAD $0x8e41ade9fbebc27d // .quad -8196078626372074883 - QUAD $0x596eb2d8ae258fc8 // .quad 6444284760518135752 - QUAD $0xb1d219647ae6b31c // .quad -5633412264537705700 - QUAD $0x6fca5f8ed9aef3bb // .quad 8055355950647669691 - QUAD $0xde469fbd99a05fe3 // .quad -2430079312244744221 - QUAD $0x25de7bb9480d5854 // .quad 2728754459941099604 - QUAD $0x8aec23d680043bee // .quad -8436328597794046994 - QUAD $0xaf561aa79a10ae6a // .quad -5812428961928401302 - QUAD $0xada72ccc20054ae9 // .quad -5933724728815170839 - QUAD $0x1b2ba1518094da04 // .quad 1957835834444274180 - QUAD $0xd910f7ff28069da4 // .quad -2805469892591575644 - QUAD $0x90fb44d2f05d0842 // .quad -7999724640327104446 - QUAD $0x87aa9aff79042286 // .quad -8670947710510816634 - QUAD $0x353a1607ac744a53 // .quad 3835402254873283155 - QUAD $0xa99541bf57452b28 // .quad -6226998619711132888 - QUAD $0x42889b8997915ce8 // .quad 4794252818591603944 - QUAD $0xd3fa922f2d1675f2 // .quad -3172062256211528206 - QUAD $0x69956135febada11 // .quad 7608094030047140369 - QUAD $0x847c9b5d7c2e09b7 // .quad -8900067937773286985 - QUAD $0x43fab9837e699095 // .quad 4898431519131537557 - QUAD $0xa59bc234db398c25 // .quad -6513398903789220827 - QUAD $0x94f967e45e03f4bb // .quad -7712018656367741765 - QUAD $0xcf02b2c21207ef2e // .quad -3530062611309138130 - QUAD $0x1d1be0eebac278f5 // .quad 2097517367411243253 - QUAD $0x8161afb94b44f57d // .quad -9123818159709293187 - QUAD $0x6462d92a69731732 // .quad 7233582727691441970 - QUAD $0xa1ba1ba79e1632dc // .quad -6793086681209228580 - QUAD $0x7d7b8f7503cfdcfe // .quad 9041978409614302462 - QUAD $0xca28a291859bbf93 // .quad -3879672333084147821 - QUAD $0x5cda735244c3d43e // .quad 6690786993590490174 - QUAD $0xfcb2cb35e702af78 // .quad -237904397927796872 - QUAD $0x3a0888136afa64a7 // .quad 4181741870994056359 - QUAD $0x9defbf01b061adab // .quad -7066219276345954901 - QUAD $0x088aaa1845b8fdd0 // .quad 615491320315182544 - QUAD $0xc56baec21c7a1916 // .quad -4221088077005055722 - QUAD $0x8aad549e57273d45 // .quad -8454007886460797627 - QUAD $0xf6c69a72a3989f5b // .quad -664674077828931749 - QUAD $0x36ac54e2f678864b // .quad 3939617107816777291 - QUAD $0x9a3c2087a63f6399 // .quad -7332950326284164199 - QUAD $0x84576a1bb416a7dd // .quad -8910536670511192099 - QUAD $0xc0cb28a98fcf3c7f // .quad -4554501889427817345 - QUAD $0x656d44a2a11c51d5 // .quad 7308573235570561493 - QUAD $0xf0fdf2d3f3c30b9f // .quad -1081441343357383777 - QUAD $0x9f644ae5a4b1b325 // .quad -6961356773836868827 - QUAD $0x969eb7c47859e743 // .quad -7593429867239446717 - QUAD $0x873d5d9f0dde1fee // .quad -8701695967296086034 - QUAD $0xbc4665b596706114 // .quad -4880101315621920492 - QUAD $0xa90cb506d155a7ea // .quad -6265433940692719638 - QUAD $0xeb57ff22fc0c7959 // .quad -1488440626100012711 - QUAD $0x09a7f12442d588f2 // .quad 695789805494438130 - QUAD $0x9316ff75dd87cbd8 // .quad -7847804418953589800 - QUAD $0x0c11ed6d538aeb2f // .quad 869737256868047663 - QUAD $0xb7dcbf5354e9bece // .quad -5198069505264599346 - QUAD $0x8f1668c8a86da5fa // .quad -8136200465769716230 - QUAD $0xe5d3ef282a242e81 // .quad -1885900863153361279 - QUAD $0xf96e017d694487bc // .quad -473439272678684740 - QUAD $0x8fa475791a569d10 // .quad -8096217067111932656 - QUAD $0x37c981dcc395a9ac // .quad 4019886927579031980 - QUAD $0xb38d92d760ec4455 // .quad -5508585315462527915 - QUAD $0x85bbe253f47b1417 // .quad -8810199395808373737 - QUAD $0xe070f78d3927556a // .quad -2274045625900771990 - QUAD $0x93956d7478ccec8e // .quad -7812217631593927538 - QUAD $0x8c469ab843b89562 // .quad -8338807543829064350 - QUAD $0x387ac8d1970027b2 // .quad 4069786015789754290 - QUAD $0xaf58416654a6babb // .quad -5811823411358942533 - QUAD $0x06997b05fcc0319e // .quad 475546501309804958 - QUAD $0xdb2e51bfe9d0696a // .quad -2653093245771290262 - QUAD $0x441fece3bdf81f03 // .quad 4908902581746016003 - QUAD $0x88fcf317f22241e2 // .quad -8575712306248138270 - QUAD $0xd527e81cad7626c3 // .quad -3087243809672255805 - QUAD $0xab3c2fddeeaad25a // .quad -6107954364382784934 - QUAD $0x8a71e223d8d3b074 // .quad -8470740780517707660 - QUAD $0xd60b3bd56a5586f1 // .quad -3023256937051093263 - QUAD $0xf6872d5667844e49 // .quad -682526969396179383 - QUAD $0x85c7056562757456 // .quad -8807064613298015146 - QUAD $0xb428f8ac016561db // .quad -5464844730172612133 - QUAD $0xa738c6bebb12d16c // .quad -6397144748195131028 - QUAD $0xe13336d701beba52 // .quad -2219369894288377262 - QUAD $0xd106f86e69d785c7 // .quad -3384744916816525881 - QUAD $0xecc0024661173473 // .quad -1387106183930235789 - QUAD $0x82a45b450226b39c // .quad -9032994600651410532 - QUAD $0x27f002d7f95d0190 // .quad 2877803288514593168 - QUAD $0xa34d721642b06084 // .quad -6679557232386875260 - QUAD $0x31ec038df7b441f4 // .quad 3597254110643241460 - QUAD $0xcc20ce9bd35c78a5 // .quad -3737760522056206171 - QUAD $0x7e67047175a15271 // .quad 9108253656731439729 - QUAD $0xff290242c83396ce // .quad -60514634142869810 - QUAD $0x0f0062c6e984d386 // .quad 1080972517029761926 - QUAD $0x9f79a169bd203e41 // .quad -6955350673980375487 - QUAD $0x52c07b78a3e60868 // .quad 5962901664714590312 - QUAD $0xc75809c42c684dd1 // .quad -4082502324048081455 - QUAD $0xa7709a56ccdf8a82 // .quad -6381430974388925822 - QUAD $0xf92e0c3537826145 // .quad -491441886632713915 - QUAD $0x88a66076400bb691 // .quad -8600080377420466543 - QUAD $0x9bbcc7a142b17ccb // .quad -7224680206786528053 - QUAD $0x6acff893d00ea435 // .quad 7696643601933968437 - QUAD $0xc2abf989935ddbfe // .quad -4419164240055772162 - QUAD $0x0583f6b8c4124d43 // .quad 397432465562684739 - QUAD $0xf356f7ebf83552fe // .quad -912269281642327298 - QUAD $0xc3727a337a8b704a // .quad -4363290727450709942 - QUAD $0x98165af37b2153de // .quad -7487697328667536418 - QUAD $0x744f18c0592e4c5c // .quad 8380944645968776284 - QUAD $0xbe1bf1b059e9a8d6 // .quad -4747935642407032618 - QUAD $0x1162def06f79df73 // .quad 1252808770606194547 - QUAD $0xeda2ee1c7064130c // .quad -1323233534581402868 - QUAD $0x8addcb5645ac2ba8 // .quad -8440366555225904216 - QUAD $0x9485d4d1c63e8be7 // .quad -7744549986754458649 - QUAD $0x6d953e2bd7173692 // .quad 7896285879677171346 - QUAD $0xb9a74a0637ce2ee1 // .quad -5069001465015685407 - QUAD $0xc8fa8db6ccdd0437 // .quad -3964700705685699529 - QUAD $0xe8111c87c5c1ba99 // .quad -1724565812842218855 - QUAD $0x1d9c9892400a22a2 // .quad 2133748077373825698 - QUAD $0x910ab1d4db9914a0 // .quad -7995382660667468640 - QUAD $0x2503beb6d00cab4b // .quad 2667185096717282123 - QUAD $0xb54d5e4a127f59c8 // .quad -5382542307406947896 - QUAD $0x2e44ae64840fd61d // .quad 3333981370896602653 - QUAD $0xe2a0b5dc971f303a // .quad -2116491865831296966 - QUAD $0x5ceaecfed289e5d2 // .quad 6695424375237764562 - QUAD $0x8da471a9de737e24 // .quad -8240336443785642460 - QUAD $0x7425a83e872c5f47 // .quad 8369280469047205703 - QUAD $0xb10d8e1456105dad // .quad -5688734536304665171 - QUAD $0xd12f124e28f77719 // .quad -3373457468973156583 - QUAD $0xdd50f1996b947518 // .quad -2499232151953443560 - QUAD $0x82bd6b70d99aaa6f // .quad -9025939945749304721 - QUAD $0x8a5296ffe33cc92f // .quad -8479549122611984081 - QUAD $0x636cc64d1001550b // .quad 7164319141522920715 - QUAD $0xace73cbfdc0bfb7b // .quad -5987750384837592197 - QUAD $0x3c47f7e05401aa4e // .quad 4343712908476262990 - QUAD $0xd8210befd30efa5a // .quad -2873001962619602342 - QUAD $0x65acfaec34810a71 // .quad 7326506586225052273 - QUAD $0x8714a775e3e95c78 // .quad -8713155254278333320 - QUAD $0x7f1839a741a14d0d // .quad 9158133232781315341 - QUAD $0xa8d9d1535ce3b396 // .quad -6279758049420528746 - QUAD $0x1ede48111209a050 // .quad 2224294504121868368 - QUAD $0xd31045a8341ca07c // .quad -3238011543348273028 - QUAD $0x934aed0aab460432 // .quad -7833187971778608078 - QUAD $0x83ea2b892091e44d // .quad -8941286242233752499 - QUAD $0xf81da84d5617853f // .quad -568112927868484289 - QUAD $0xa4e4b66b68b65d60 // .quad -6564921784364802720 - QUAD $0x36251260ab9d668e // .quad 3901544858591782542 - QUAD $0xce1de40642e3f4b9 // .quad -3594466212028615495 - QUAD $0xc1d72b7c6b426019 // .quad -4479063491021217767 - QUAD $0x80d2ae83e9ce78f3 // .quad -9164070410158966541 - QUAD $0xb24cf65b8612f81f // .quad -5598829363776522209 - QUAD $0xa1075a24e4421730 // .quad -6843401994271320272 - QUAD $0xdee033f26797b627 // .quad -2386850686293264857 - QUAD $0xc94930ae1d529cfc // .quad -3942566474411762436 - QUAD $0x169840ef017da3b1 // .quad 1628122660560806833 - QUAD $0xfb9b7cd9a4a7443c // .quad -316522074587315140 - QUAD $0x8e1f289560ee864e // .quad -8205795374004271538 - QUAD $0x9d412e0806e88aa5 // .quad -7115355324258153819 - QUAD $0xf1a6f2bab92a27e2 // .quad -1033872180650563614 - QUAD $0xc491798a08a2ad4e // .quad -4282508136895304370 - QUAD $0xae10af696774b1db // .quad -5904026244240592421 - QUAD $0xf5b5d7ec8acb58a2 // .quad -741449152691742558 - QUAD $0xacca6da1e0a8ef29 // .quad -5995859411864064215 - QUAD $0x9991a6f3d6bf1765 // .quad -7380934748073420955 - QUAD $0x17fd090a58d32af3 // .quad 1728547772024695539 - QUAD $0xbff610b0cc6edd3f // .quad -4614482416664388289 - QUAD $0xddfc4b4cef07f5b0 // .quad -2451001303396518480 - QUAD $0xeff394dcff8a948e // .quad -1156417002403097458 - QUAD $0x4abdaf101564f98e // .quad 5385653213018257806 - QUAD $0x95f83d0a1fb69cd9 // .quad -7640289654143017767 - QUAD $0x9d6d1ad41abe37f1 // .quad -7102991539009341455 - QUAD $0xbb764c4ca7a4440f // .quad -4938676049251384305 - QUAD $0x84c86189216dc5ed // .quad -8878739423761676819 - QUAD $0xea53df5fd18d5513 // .quad -1561659043136842477 - QUAD $0x32fd3cf5b4e49bb4 // .quad 3674159897003727796 - QUAD $0x92746b9be2f8552c // .quad -7893565929601608404 - QUAD $0x3fbc8c33221dc2a1 // .quad 4592699871254659745 - QUAD $0xb7118682dbb66a77 // .quad -5255271393574622601 - QUAD $0x0fabaf3feaa5334a // .quad 1129188820640936778 - QUAD $0xe4d5e82392a40515 // .quad -1957403223540890347 - QUAD $0x29cb4d87f2a7400e // .quad 3011586022114279438 - QUAD $0x8f05b1163ba6832d // .quad -8140906042354138323 - QUAD $0x743e20e9ef511012 // .quad 8376168546070237202 - QUAD $0xb2c71d5bca9023f8 // .quad -5564446534515285000 - QUAD $0x914da9246b255416 // .quad -7976533391121755114 - QUAD $0xdf78e4b2bd342cf6 // .quad -2343872149716718346 - QUAD $0x1ad089b6c2f7548e // .quad 1932195658189984910 - QUAD $0x8bab8eefb6409c1a // .quad -8382449121214030822 - QUAD $0xa184ac2473b529b1 // .quad -6808127464117294671 - QUAD $0xae9672aba3d0c320 // .quad -5866375383090150624 - QUAD $0xc9e5d72d90a2741e // .quad -3898473311719230434 - QUAD $0xda3c0f568cc4f3e8 // .quad -2721283210435300376 - QUAD $0x7e2fa67c7a658892 // .quad 9092669226243950738 - QUAD $0x8865899617fb1871 // .quad -8618331034163144591 - QUAD $0xddbb901b98feeab7 // .quad -2469221522477225289 - QUAD $0xaa7eebfb9df9de8d // .quad -6161227774276542835 - QUAD $0x552a74227f3ea565 // .quad 6136845133758244197 - QUAD $0xd51ea6fa85785631 // .quad -3089848699418290639 - QUAD $0xd53a88958f87275f // .quad -3082000819042179233 - QUAD $0x8533285c936b35de // .quad -8848684464777513506 - QUAD $0x8a892abaf368f137 // .quad -8464187042230111945 - QUAD $0xa67ff273b8460356 // .quad -6449169562544503978 - QUAD $0x2d2b7569b0432d85 // .quad 3254824252494523781 - QUAD $0xd01fef10a657842c // .quad -3449775934753242068 - QUAD $0x9c3b29620e29fc73 // .quad -7189106879045698445 - QUAD $0x8213f56a67f6b29b // .quad -9073638986861858149 - QUAD $0x8349f3ba91b47b8f // .quad -8986383598807123057 - QUAD $0xa298f2c501f45f42 // .quad -6730362715149934782 - QUAD $0x241c70a936219a73 // .quad 2602078556773259891 - QUAD $0xcb3f2f7642717713 // .quad -3801267375510030573 - QUAD $0xed238cd383aa0110 // .quad -1359087822460813040 - QUAD $0xfe0efb53d30dd4d7 // .quad -139898200960150313 - QUAD $0xf4363804324a40aa // .quad -849429889038008150 - QUAD $0x9ec95d1463e8a506 // .quad -7004965403241175802 - QUAD $0xb143c6053edcd0d5 // .quad -5673473379724898091 - QUAD $0xc67bb4597ce2ce48 // .quad -4144520735624081848 - QUAD $0xdd94b7868e94050a // .quad -2480155706228734710 - QUAD $0xf81aa16fdc1b81da // .quad -568964901102714406 - QUAD $0xca7cf2b4191c8326 // .quad -3855940325606653146 - QUAD $0x9b10a4e5e9913128 // .quad -7273132090830278360 - QUAD $0xfd1c2f611f63a3f0 // .quad -208239388580928528 - QUAD $0xc1d4ce1f63f57d72 // .quad -4479729095110460046 - QUAD $0xbc633b39673c8cec // .quad -4871985254153548564 - QUAD $0xf24a01a73cf2dccf // .quad -987975350460687153 - QUAD $0xd5be0503e085d813 // .quad -3044990783845967853 - QUAD $0x976e41088617ca01 // .quad -7535013621679011327 - QUAD $0x4b2d8644d8a74e18 // .quad 5417133557047315992 - QUAD $0xbd49d14aa79dbc82 // .quad -4807081008671376254 - QUAD $0xddf8e7d60ed1219e // .quad -2451955090545630818 - QUAD $0xec9c459d51852ba2 // .quad -1397165242411832414 - QUAD $0xcabb90e5c942b503 // .quad -3838314940804713213 - QUAD $0x93e1ab8252f33b45 // .quad -7790757304148477115 - QUAD $0x3d6a751f3b936243 // .quad 4425478360848884291 - QUAD $0xb8da1662e7b00a17 // .quad -5126760611758208489 - QUAD $0x0cc512670a783ad4 // .quad 920161932633717460 - QUAD $0xe7109bfba19c0c9d // .quad -1796764746270372707 - QUAD $0x27fb2b80668b24c5 // .quad 2880944217109767365 - QUAD $0x906a617d450187e2 // .quad -8040506994060064798 - QUAD $0xb1f9f660802dedf6 // .quad -5622191765467566602 - QUAD $0xb484f9dc9641e9da // .quad -5438947724147693094 - QUAD $0x5e7873f8a0396973 // .quad 6807318348447705459 - QUAD $0xe1a63853bbd26451 // .quad -2186998636757228463 - QUAD $0xdb0b487b6423e1e8 // .quad -2662955059861265944 - QUAD $0x8d07e33455637eb2 // .quad -8284403175614349646 - QUAD $0x91ce1a9a3d2cda62 // .quad -7940379843253970334 - QUAD $0xb049dc016abc5e5f // .quad -5743817951090549153 - QUAD $0x7641a140cc7810fb // .quad 8521269269642088699 - QUAD $0xdc5c5301c56b75f7 // .quad -2568086420435798537 - QUAD $0xa9e904c87fcb0a9d // .quad -6203421752542164323 - QUAD $0x89b9b3e11b6329ba // .quad -8522583040413455942 - QUAD $0x546345fa9fbdcd44 // .quad 6080780864604458308 - QUAD $0xac2820d9623bf429 // .quad -6041542782089432023 - QUAD $0xa97c177947ad4095 // .quad -6234081974526590827 - QUAD $0xd732290fbacaf133 // .quad -2940242459184402125 - QUAD $0x49ed8eabcccc485d // .quad 5327070802775656541 - QUAD $0x867f59a9d4bed6c0 // .quad -8755180564631333184 - QUAD $0x5c68f256bfff5a74 // .quad 6658838503469570676 - QUAD $0xa81f301449ee8c70 // .quad -6332289687361778576 - QUAD $0x73832eec6fff3111 // .quad 8323548129336963345 - QUAD $0xd226fc195c6a2f8c // .quad -3303676090774835316 - QUAD $0xc831fd53c5ff7eab // .quad -4021154456019173717 - QUAD $0x83585d8fd9c25db7 // .quad -8982326584375353929 - QUAD $0xba3e7ca8b77f5e55 // .quad -5026443070023967147 - QUAD $0xa42e74f3d032f525 // .quad -6616222212041804507 - QUAD $0x28ce1bd2e55f35eb // .quad 2940318199324816875 - QUAD $0xcd3a1230c43fb26f // .quad -3658591746624867729 - QUAD $0x7980d163cf5b81b3 // .quad 8755227902219092403 - QUAD $0x80444b5e7aa7cf85 // .quad -9204148869281624187 - QUAD $0xd7e105bcc332621f // .quad -2891023177508298209 - QUAD $0xa0555e361951c366 // .quad -6893500068174642330 - QUAD $0x8dd9472bf3fefaa7 // .quad -8225464990312760665 - QUAD $0xc86ab5c39fa63440 // .quad -4005189066790915008 - QUAD $0xb14f98f6f0feb951 // .quad -5670145219463562927 - QUAD $0xfa856334878fc150 // .quad -394800315061255856 - QUAD $0x6ed1bf9a569f33d3 // .quad 7985374283903742931 - QUAD $0x9c935e00d4b9d8d2 // .quad -7164279224554366766 - QUAD $0x0a862f80ec4700c8 // .quad 758345818024902856 - QUAD $0xc3b8358109e84f07 // .quad -4343663012265570553 - QUAD $0xcd27bb612758c0fa // .quad -3663753745896259334 - QUAD $0xf4a642e14c6262c8 // .quad -817892746904575288 - QUAD $0x8038d51cb897789c // .quad -9207375118826243940 - QUAD $0x98e7e9cccfbd7dbd // .quad -7428711994456441411 - QUAD $0xe0470a63e6bd56c3 // .quad -2285846861678029117 - QUAD $0xbf21e44003acdd2c // .quad -4674203974643163860 - QUAD $0x1858ccfce06cac74 // .quad 1754377441329851508 - QUAD $0xeeea5d5004981478 // .quad -1231068949876566920 - QUAD $0x0f37801e0c43ebc8 // .quad 1096485900831157192 - QUAD $0x95527a5202df0ccb // .quad -7686947121313936181 - QUAD $0xd30560258f54e6ba // .quad -3241078642388441414 - QUAD $0xbaa718e68396cffd // .quad -4996997883215032323 - QUAD $0x47c6b82ef32a2069 // .quad 5172023733869224041 - QUAD $0xe950df20247c83fd // .quad -1634561335591402499 - QUAD $0x4cdc331d57fa5441 // .quad 5538357842881958977 - QUAD $0x91d28b7416cdd27e // .quad -7939129862385708418 - QUAD $0xe0133fe4adf8e952 // .quad -2300424733252327086 - QUAD $0xb6472e511c81471d // .quad -5312226309554747619 - QUAD $0x58180fddd97723a6 // .quad 6347841120289366950 - QUAD $0xe3d8f9e563a198e5 // .quad -2028596868516046619 - QUAD $0x570f09eaa7ea7648 // .quad 6273243709394548296 - QUAD $0x8e679c2f5e44ff8f // .quad -8185402070463610993 - QUAD $0x2cd2cc6551e513da // .quad 3229868618315797466 - QUAD $0xb201833b35d63f73 // .quad -5620066569652125837 - QUAD $0xf8077f7ea65e58d1 // .quad -574350245532641071 - QUAD $0xde81e40a034bcf4f // .quad -2413397193637769393 - QUAD $0xfb04afaf27faf782 // .quad -358968903457900670 - QUAD $0x8b112e86420f6191 // .quad -8425902273664687727 - QUAD $0x79c5db9af1f9b563 // .quad 8774660907532399971 - QUAD $0xadd57a27d29339f6 // .quad -5920691823653471754 - QUAD $0x18375281ae7822bc // .quad 1744954097560724156 - QUAD $0xd94ad8b1c7380874 // .quad -2789178761139451788 - QUAD $0x8f2293910d0b15b5 // .quad -8132775725879323211 - QUAD $0x87cec76f1c830548 // .quad -8660765753353239224 - QUAD $0xb2eb3875504ddb22 // .quad -5554283638921766110 - QUAD $0xa9c2794ae3a3c69a // .quad -6214271173264161126 - QUAD $0x5fa60692a46151eb // .quad 6892203506629956075 - QUAD $0xd433179d9c8cb841 // .quad -3156152948152813503 - QUAD $0xdbc7c41ba6bcd333 // .quad -2609901835997359309 - QUAD $0x849feec281d7f328 // .quad -8890124620236590296 - QUAD $0x12b9b522906c0800 // .quad 1349308723430688768 - QUAD $0xa5c7ea73224deff3 // .quad -6500969756868349965 - QUAD $0xd768226b34870a00 // .quad -2925050114139026944 - QUAD $0xcf39e50feae16bef // .quad -3514526177658049553 - QUAD $0xe6a1158300d46640 // .quad -1828156321336891840 - QUAD $0x81842f29f2cce375 // .quad -9114107888677362827 - QUAD $0x60495ae3c1097fd0 // .quad 6938176635183661008 - QUAD $0xa1e53af46f801c53 // .quad -6780948842419315629 - QUAD $0x385bb19cb14bdfc4 // .quad 4061034775552188356 - QUAD $0xca5e89b18b602368 // .quad -3864500034596756632 - QUAD $0x46729e03dd9ed7b5 // .quad 5076293469440235445 - QUAD $0xfcf62c1dee382c42 // .quad -218939024818557886 - QUAD $0x6c07a2c26a8346d1 // .quad 7784369436827535057 - QUAD $0x9e19db92b4e31ba9 // .quad -7054365918152680535 - QUAD $0xc7098b7305241885 // .quad -4104596259247744891 - QUAD $0xc5a05277621be293 // .quad -4206271379263462765 - QUAD $0xb8cbee4fc66d1ea7 // .quad -5130745324059681113 - QUAD $0xf70867153aa2db38 // .quad -646153205651940552 - QUAD $0x737f74f1dc043328 // .quad 8322499218531169064 - QUAD $0x9a65406d44a5c903 // .quad -7321374781173544701 - QUAD $0x505f522e53053ff2 // .quad 5791438004736573426 - QUAD $0xc0fe908895cf3b44 // .quad -4540032458039542972 - QUAD $0x647726b9e7c68fef // .quad 7239297505920716783 - QUAD $0xf13e34aabb430a15 // .quad -1063354554122040811 - QUAD $0x5eca783430dc19f5 // .quad 6830403950414141941 - QUAD $0x96c6e0eab509e64d // .quad -7582125623967357363 - QUAD $0xb67d16413d132072 // .quad -5297053117264486286 - QUAD $0xbc789925624c5fe0 // .quad -4865971011531808800 - QUAD $0xe41c5bd18c57e88f // .quad -2009630378153219953 - QUAD $0xeb96bf6ebadf77d8 // .quad -1470777745987373096 - QUAD $0x8e91b962f7b6f159 // .quad -8173548013986844327 - QUAD $0x933e37a534cbaae7 // .quad -7836765118883190041 - QUAD $0x723627bbb5a4adb0 // .quad 8229809056225996208 - QUAD $0xb80dc58e81fe95a1 // .quad -5184270380176599647 - QUAD $0xcec3b1aaa30dd91c // .quad -3547796734999668452 - QUAD $0xe61136f2227e3b09 // .quad -1868651956793361655 - QUAD $0x213a4f0aa5e8a7b1 // .quad 2394313059052595121 - QUAD $0x8fcac257558ee4e6 // .quad -8085436500636932890 - QUAD $0xa988e2cd4f62d19d // .quad -6230480713039031907 - QUAD $0xb3bd72ed2af29e1f // .quad -5495109607368778209 - QUAD $0x93eb1b80a33b8605 // .quad -7788100891298789883 - QUAD $0xe0accfa875af45a7 // .quad -2257200990783584857 - QUAD $0xbc72f130660533c3 // .quad -4867563057061743677 - QUAD $0x8c6c01c9498d8b88 // .quad -8328279646880822392 - QUAD $0xeb8fad7c7f8680b4 // .quad -1472767802899791692 - QUAD $0xaf87023b9bf0ee6a // .quad -5798663540173640086 - QUAD $0xa67398db9f6820e1 // .quad -6452645772052127519 - QUAD $0xdb68c2ca82ed2a05 // .quad -2636643406789662203 - QUAD $0x88083f8943a1148c // .quad -8644589625959967604 - QUAD $0x892179be91d43a43 // .quad -8565431156884620733 - QUAD $0x6a0a4f6b948959b0 // .quad 7641007041259592112 - QUAD $0xab69d82e364948d4 // .quad -6095102927678388012 - QUAD $0x848ce34679abb01c // .quad -8895485272135061476 - QUAD $0xd6444e39c3db9b09 // .quad -3007192641170597111 - QUAD $0xf2d80e0c0c0b4e11 // .quad -947992276657025519 - QUAD $0x85eab0e41a6940e5 // .quad -8797024428372705051 - QUAD $0x6f8e118f0f0e2195 // .quad 8038381691033493909 - QUAD $0xa7655d1d2103911f // .quad -6384594517038493409 - QUAD $0x4b7195f2d2d1a9fb // .quad 5436291095364479483 - QUAD $0xd13eb46469447567 // .quad -3369057127870728857 - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - - // .p2align 4, 0x00 -_POW_TAB: - LONG $0x00000001 // .long 1 - LONG $0x00000003 // .long 3 - LONG $0x00000006 // .long 6 - LONG $0x00000009 // .long 9 - LONG $0x0000000d // .long 13 - LONG $0x00000010 // .long 16 - LONG $0x00000013 // .long 19 - LONG $0x00000017 // .long 23 - LONG $0x0000001a // .long 26 - - // .p2align 2, 0x00 -_MASK_USE_NUMBER: - LONG $0x00000002 // .long 2 - QUAD $0x0000000000000000 // .p2align 4, 0x00 - -_Digits: - QUAD $0x3330323031303030; QUAD $0x3730363035303430 // .ascii 16, '0001020304050607' - QUAD $0x3131303139303830; QUAD $0x3531343133313231 // .ascii 16, '0809101112131415' - QUAD $0x3931383137313631; QUAD $0x3332323231323032 // .ascii 16, '1617181920212223' - QUAD $0x3732363235323432; QUAD $0x3133303339323832 // .ascii 16, '2425262728293031' - QUAD $0x3533343333333233; QUAD $0x3933383337333633 // .ascii 16, '3233343536373839' - QUAD $0x3334323431343034; QUAD $0x3734363435343434 // .ascii 16, '4041424344454647' - QUAD $0x3135303539343834; QUAD $0x3535343533353235 // .ascii 16, '4849505152535455' - QUAD $0x3935383537353635; QUAD $0x3336323631363036 // .ascii 16, '5657585960616263' - QUAD $0x3736363635363436; QUAD $0x3137303739363836 // .ascii 16, '6465666768697071' - QUAD $0x3537343733373237; QUAD $0x3937383737373637 // .ascii 16, '7273747576777879' - QUAD $0x3338323831383038; QUAD $0x3738363835383438 // .ascii 16, '8081828384858687' - QUAD $0x3139303939383838; QUAD $0x3539343933393239 // .ascii 16, '8889909192939495' - QUAD $0x3939383937393639 // .ascii 8, '96979899' - QUAD $0x0000000000000000 // .p2align 4, 0x00 - -_LB_35efc682: // _pow10_ceil_sig.g - QUAD $0xff77b1fcbebcdc4f // .quad -38366372719436721 - QUAD $0x25e8e89c13bb0f7b // .quad 2731688931043774331 - QUAD $0x9faacf3df73609b1 // .quad -6941508010590729807 - QUAD $0x77b191618c54e9ad // .quad 8624834609543440813 - QUAD $0xc795830d75038c1d // .quad -4065198994811024355 - QUAD $0xd59df5b9ef6a2418 // .quad -3054014793352862696 - QUAD $0xf97ae3d0d2446f25 // .quad -469812725086392539 - QUAD $0x4b0573286b44ad1e // .quad 5405853545163697438 - QUAD $0x9becce62836ac577 // .quad -7211161980820077193 - QUAD $0x4ee367f9430aec33 // .quad 5684501474941004851 - QUAD $0xc2e801fb244576d5 // .quad -4402266457597708587 - QUAD $0x229c41f793cda740 // .quad 2493940825248868160 - QUAD $0xf3a20279ed56d48a // .quad -891147053569747830 - QUAD $0x6b43527578c11110 // .quad 7729112049988473104 - QUAD $0x9845418c345644d6 // .quad -7474495936122174250 - QUAD $0x830a13896b78aaaa // .quad -9004363024039368022 - QUAD $0xbe5691ef416bd60c // .quad -4731433901725329908 - QUAD $0x23cc986bc656d554 // .quad 2579604275232953684 - QUAD $0xedec366b11c6cb8f // .quad -1302606358729274481 - QUAD $0x2cbfbe86b7ec8aa9 // .quad 3224505344041192105 - QUAD $0x94b3a202eb1c3f39 // .quad -7731658001846878407 - QUAD $0x7bf7d71432f3d6aa // .quad 8932844867666826922 - QUAD $0xb9e08a83a5e34f07 // .quad -5052886483881210105 - QUAD $0xdaf5ccd93fb0cc54 // .quad -2669001970698630060 - QUAD $0xe858ad248f5c22c9 // .quad -1704422086424124727 - QUAD $0xd1b3400f8f9cff69 // .quad -3336252463373287575 - QUAD $0x91376c36d99995be // .quad -7982792831656159810 - QUAD $0x23100809b9c21fa2 // .quad 2526528228819083170 - QUAD $0xb58547448ffffb2d // .quad -5366805021142811859 - QUAD $0xabd40a0c2832a78b // .quad -6065211750830921845 - QUAD $0xe2e69915b3fff9f9 // .quad -2096820258001126919 - QUAD $0x16c90c8f323f516d // .quad 1641857348316123501 - QUAD $0x8dd01fad907ffc3b // .quad -8228041688891786181 - QUAD $0xae3da7d97f6792e4 // .quad -5891368184943504668 - QUAD $0xb1442798f49ffb4a // .quad -5673366092687344822 - QUAD $0x99cd11cfdf41779d // .quad -7364210231179380835 - QUAD $0xdd95317f31c7fa1d // .quad -2480021597431793123 - QUAD $0x40405643d711d584 // .quad 4629795266307937668 - QUAD $0x8a7d3eef7f1cfc52 // .quad -8467542526035952558 - QUAD $0x482835ea666b2573 // .quad 5199465050656154995 - QUAD $0xad1c8eab5ee43b66 // .quad -5972742139117552794 - QUAD $0xda3243650005eed0 // .quad -2724040723534582064 - QUAD $0xd863b256369d4a40 // .quad -2854241655469553088 - QUAD $0x90bed43e40076a83 // .quad -8016736922845615485 - QUAD $0x873e4f75e2224e68 // .quad -8701430062309552536 - QUAD $0x5a7744a6e804a292 // .quad 6518754469289960082 - QUAD $0xa90de3535aaae202 // .quad -6265101559459552766 - QUAD $0x711515d0a205cb37 // .quad 8148443086612450103 - QUAD $0xd3515c2831559a83 // .quad -3219690930897053053 - QUAD $0x0d5a5b44ca873e04 // .quad 962181821410786820 - QUAD $0x8412d9991ed58091 // .quad -8929835859451740015 - QUAD $0xe858790afe9486c3 // .quad -1704479370831952189 - QUAD $0xa5178fff668ae0b6 // .quad -6550608805887287114 - QUAD $0x626e974dbe39a873 // .quad 7092772823314835571 - QUAD $0xce5d73ff402d98e3 // .quad -3576574988931720989 - QUAD $0xfb0a3d212dc81290 // .quad -357406007711231344 - QUAD $0x80fa687f881c7f8e // .quad -9152888395723407474 - QUAD $0x7ce66634bc9d0b9a // .quad 8999993282035256218 - QUAD $0xa139029f6a239f72 // .quad -6829424476226871438 - QUAD $0x1c1fffc1ebc44e81 // .quad 2026619565689294465 - QUAD $0xc987434744ac874e // .quad -3925094576856201394 - QUAD $0xa327ffb266b56221 // .quad -6690097579743157727 - QUAD $0xfbe9141915d7a922 // .quad -294682202642863838 - QUAD $0x4bf1ff9f0062baa9 // .quad 5472436080603216553 - QUAD $0x9d71ac8fada6c9b5 // .quad -7101705404292871755 - QUAD $0x6f773fc3603db4aa // .quad 8031958568804398250 - QUAD $0xc4ce17b399107c22 // .quad -4265445736938701790 - QUAD $0xcb550fb4384d21d4 // .quad -3795109844276665900 - QUAD $0xf6019da07f549b2b // .quad -720121152745989333 - QUAD $0x7e2a53a146606a49 // .quad 9091170749936331337 - QUAD $0x99c102844f94e0fb // .quad -7367604748107325189 - QUAD $0x2eda7444cbfc426e // .quad 3376138709496513134 - QUAD $0xc0314325637a1939 // .quad -4597819916706768583 - QUAD $0xfa911155fefb5309 // .quad -391512631556746487 - QUAD $0xf03d93eebc589f88 // .quad -1135588877456072824 - QUAD $0x793555ab7eba27cb // .quad 8733981247408842699 - QUAD $0x96267c7535b763b5 // .quad -7627272076051127371 - QUAD $0x4bc1558b2f3458df // .quad 5458738279630526687 - QUAD $0xbbb01b9283253ca2 // .quad -4922404076636521310 - QUAD $0x9eb1aaedfb016f17 // .quad -7011635205744005353 - QUAD $0xea9c227723ee8bcb // .quad -1541319077368263733 - QUAD $0x465e15a979c1cadd // .quad 5070514048102157021 - QUAD $0x92a1958a7675175f // .quad -7880853450996246689 - QUAD $0x0bfacd89ec191eca // .quad 863228270850154186 - QUAD $0xb749faed14125d36 // .quad -5239380795317920458 - QUAD $0xcef980ec671f667c // .quad -3532650679864695172 - QUAD $0xe51c79a85916f484 // .quad -1937539975720012668 - QUAD $0x82b7e12780e7401b // .quad -9027499368258256869 - QUAD $0x8f31cc0937ae58d2 // .quad -8128491512466089774 - QUAD $0xd1b2ecb8b0908811 // .quad -3336344095947716591 - QUAD $0xb2fe3f0b8599ef07 // .quad -5548928372155224313 - QUAD $0x861fa7e6dcb4aa16 // .quad -8782116138362033642 - QUAD $0xdfbdcece67006ac9 // .quad -2324474446766642487 - QUAD $0x67a791e093e1d49b // .quad 7469098900757009563 - QUAD $0x8bd6a141006042bd // .quad -8370325556870233411 - QUAD $0xe0c8bb2c5c6d24e1 // .quad -2249342214667950879 - QUAD $0xaecc49914078536d // .quad -5851220927660403859 - QUAD $0x58fae9f773886e19 // .quad 6411694268519837209 - QUAD $0xda7f5bf590966848 // .quad -2702340141148116920 - QUAD $0xaf39a475506a899f // .quad -5820440219632367201 - QUAD $0x888f99797a5e012d // .quad -8606491615858654931 - QUAD $0x6d8406c952429604 // .quad 7891439908798240260 - QUAD $0xaab37fd7d8f58178 // .quad -6146428501395930760 - QUAD $0xc8e5087ba6d33b84 // .quad -3970758169284363388 - QUAD $0xd5605fcdcf32e1d6 // .quad -3071349608317525546 - QUAD $0xfb1e4a9a90880a65 // .quad -351761693178066331 - QUAD $0x855c3be0a17fcd26 // .quad -8837122532839535322 - QUAD $0x5cf2eea09a550680 // .quad 6697677969404790400 - QUAD $0xa6b34ad8c9dfc06f // .quad -6434717147622031249 - QUAD $0xf42faa48c0ea481f // .quad -851274575098787809 - QUAD $0xd0601d8efc57b08b // .quad -3431710416100151157 - QUAD $0xf13b94daf124da27 // .quad -1064093218873484761 - QUAD $0x823c12795db6ce57 // .quad -9062348037703676329 - QUAD $0x76c53d08d6b70859 // .quad 8558313775058847833 - QUAD $0xa2cb1717b52481ed // .quad -6716249028702207507 - QUAD $0x54768c4b0c64ca6f // .quad 6086206200396171887 - QUAD $0xcb7ddcdda26da268 // .quad -3783625267450371480 - QUAD $0xa9942f5dcf7dfd0a // .quad -6227300304786948854 - QUAD $0xfe5d54150b090b02 // .quad -117845565885576446 - QUAD $0xd3f93b35435d7c4d // .quad -3172439362556298163 - QUAD $0x9efa548d26e5a6e1 // .quad -6991182506319567135 - QUAD $0xc47bc5014a1a6db0 // .quad -4288617610811380304 - QUAD $0xc6b8e9b0709f109a // .quad -4127292114472071014 - QUAD $0x359ab6419ca1091c // .quad 3862600023340550428 - QUAD $0xf867241c8cc6d4c0 // .quad -547429124662700864 - QUAD $0xc30163d203c94b63 // .quad -4395122007679087773 - QUAD $0x9b407691d7fc44f8 // .quad -7259672230555269896 - QUAD $0x79e0de63425dcf1e // .quad 8782263791269039902 - QUAD $0xc21094364dfb5636 // .quad -4462904269766699466 - QUAD $0x985915fc12f542e5 // .quad -7468914334623251739 - QUAD $0xf294b943e17a2bc4 // .quad -966944318780986428 - QUAD $0x3e6f5b7b17b2939e // .quad 4498915137003099038 - QUAD $0x979cf3ca6cec5b5a // .quad -7521869226879198374 - QUAD $0xa705992ceecf9c43 // .quad -6411550076227838909 - QUAD $0xbd8430bd08277231 // .quad -4790650515171610063 - QUAD $0x50c6ff782a838354 // .quad 5820620459997365076 - QUAD $0xece53cec4a314ebd // .quad -1376627125537124675 - QUAD $0xa4f8bf5635246429 // .quad -6559282480285457367 - QUAD $0x940f4613ae5ed136 // .quad -7777920981101784778 - QUAD $0x871b7795e136be9a // .quad -8711237568605798758 - QUAD $0xb913179899f68584 // .quad -5110715207949843068 - QUAD $0x28e2557b59846e40 // .quad 2946011094524915264 - QUAD $0xe757dd7ec07426e5 // .quad -1776707991509915931 - QUAD $0x331aeada2fe589d0 // .quad 3682513868156144080 - QUAD $0x9096ea6f3848984f // .quad -8027971522334779313 - QUAD $0x3ff0d2c85def7622 // .quad 4607414176811284002 - QUAD $0xb4bca50b065abe63 // .quad -5423278384491086237 - QUAD $0x0fed077a756b53aa // .quad 1147581702586717098 - QUAD $0xe1ebce4dc7f16dfb // .quad -2167411962186469893 - QUAD $0xd3e8495912c62895 // .quad -3177208890193991531 - QUAD $0x8d3360f09cf6e4bd // .quad -8272161504007625539 - QUAD $0x64712dd7abbbd95d // .quad 7237616480483531101 - QUAD $0xb080392cc4349dec // .quad -5728515861582144020 - QUAD $0xbd8d794d96aacfb4 // .quad -4788037454677749836 - QUAD $0xdca04777f541c567 // .quad -2548958808550292121 - QUAD $0xecf0d7a0fc5583a1 // .quad -1373360799919799391 - QUAD $0x89e42caaf9491b60 // .quad -8510628282985014432 - QUAD $0xf41686c49db57245 // .quad -858350499949874619 - QUAD $0xac5d37d5b79b6239 // .quad -6026599335303880135 - QUAD $0x311c2875c522ced6 // .quad 3538747893490044630 - QUAD $0xd77485cb25823ac7 // .quad -2921563150702462265 - QUAD $0x7d633293366b828c // .quad 9035120885289943692 - QUAD $0x86a8d39ef77164bc // .quad -8743505996830120772 - QUAD $0xae5dff9c02033198 // .quad -5882264492762254952 - QUAD $0xa8530886b54dbdeb // .quad -6317696477610263061 - QUAD $0xd9f57f830283fdfd // .quad -2741144597525430787 - QUAD $0xd267caa862a12d66 // .quad -3285434578585440922 - QUAD $0xd072df63c324fd7c // .quad -3426430746906788484 - QUAD $0x8380dea93da4bc60 // .quad -8970925639256982432 - QUAD $0x4247cb9e59f71e6e // .quad 4776009810824339054 - QUAD $0xa46116538d0deb78 // .quad -6601971030643840136 - QUAD $0x52d9be85f074e609 // .quad 5970012263530423817 - QUAD $0xcd795be870516656 // .quad -3640777769877412266 - QUAD $0x67902e276c921f8c // .quad 7462515329413029772 - QUAD $0x806bd9714632dff6 // .quad -9193015133814464522 - QUAD $0x00ba1cd8a3db53b7 // .quad 52386062455755703 - QUAD $0xa086cfcd97bf97f3 // .quad -6879582898840692749 - QUAD $0x80e8a40eccd228a5 // .quad -9157889458785081179 - QUAD $0xc8a883c0fdaf7df0 // .quad -3987792605123478032 - QUAD $0x6122cd128006b2ce // .quad 6999382250228200142 - QUAD $0xfad2a4b13d1b5d6c // .quad -373054737976959636 - QUAD $0x796b805720085f82 // .quad 8749227812785250178 - QUAD $0x9cc3a6eec6311a63 // .quad -7150688238876681629 - QUAD $0xcbe3303674053bb1 // .quad -3755104653863994447 - QUAD $0xc3f490aa77bd60fc // .quad -4326674280168464132 - QUAD $0xbedbfc4411068a9d // .quad -4693880817329993059 - QUAD $0xf4f1b4d515acb93b // .quad -796656831783192261 - QUAD $0xee92fb5515482d45 // .quad -1255665003235103419 - QUAD $0x991711052d8bf3c5 // .quad -7415439547505577019 - QUAD $0x751bdd152d4d1c4b // .quad 8438581409832836171 - QUAD $0xbf5cd54678eef0b6 // .quad -4657613415954583370 - QUAD $0xd262d45a78a0635e // .quad -3286831292991118498 - QUAD $0xef340a98172aace4 // .quad -1210330751515841308 - QUAD $0x86fb897116c87c35 // .quad -8720225134666286027 - QUAD $0x9580869f0e7aac0e // .quad -7673985747338482674 - QUAD $0xd45d35e6ae3d4da1 // .quad -3144297699952734815 - QUAD $0xbae0a846d2195712 // .quad -4980796165745715438 - QUAD $0x8974836059cca10a // .quad -8542058143368306422 - QUAD $0xe998d258869facd7 // .quad -1614309188754756393 - QUAD $0x2bd1a438703fc94c // .quad 3157485376071780684 - QUAD $0x91ff83775423cc06 // .quad -7926472270612804602 - QUAD $0x7b6306a34627ddd0 // .quad 8890957387685944784 - QUAD $0xb67f6455292cbf08 // .quad -5296404319838617848 - QUAD $0x1a3bc84c17b1d543 // .quad 1890324697752655171 - QUAD $0xe41f3d6a7377eeca // .quad -2008819381370884406 - QUAD $0x20caba5f1d9e4a94 // .quad 2362905872190818964 - QUAD $0x8e938662882af53e // .quad -8173041140997884610 - QUAD $0x547eb47b7282ee9d // .quad 6088502188546649757 - QUAD $0xb23867fb2a35b28d // .quad -5604615407819967859 - QUAD $0xe99e619a4f23aa44 // .quad -1612744301171463612 - QUAD $0xdec681f9f4c31f31 // .quad -2394083241347571919 - QUAD $0x6405fa00e2ec94d5 // .quad 7207441660390446293 - QUAD $0x8b3c113c38f9f37e // .quad -8413831053483314306 - QUAD $0xde83bc408dd3dd05 // .quad -2412877989897052923 - QUAD $0xae0b158b4738705e // .quad -5905602798426754978 - QUAD $0x9624ab50b148d446 // .quad -7627783505798704058 - QUAD $0xd98ddaee19068c76 // .quad -2770317479606055818 - QUAD $0x3badd624dd9b0958 // .quad 4300328673033783640 - QUAD $0x87f8a8d4cfa417c9 // .quad -8648977452394866743 - QUAD $0xe54ca5d70a80e5d7 // .quad -1923980597781273129 - QUAD $0xa9f6d30a038d1dbc // .quad -6199535797066195524 - QUAD $0x5e9fcf4ccd211f4d // .quad 6818396289628184397 - QUAD $0xd47487cc8470652b // .quad -3137733727905356501 - QUAD $0x7647c32000696720 // .quad 8522995362035230496 - QUAD $0x84c8d4dfd2c63f3b // .quad -8878612607581929669 - QUAD $0x29ecd9f40041e074 // .quad 3021029092058325108 - QUAD $0xa5fb0a17c777cf09 // .quad -6486579741050024183 - QUAD $0xf468107100525891 // .quad -835399653354481519 - QUAD $0xcf79cc9db955c2cc // .quad -3496538657885142324 - QUAD $0x7182148d4066eeb5 // .quad 8179122470161673909 - QUAD $0x81ac1fe293d599bf // .quad -9102865688819295809 - QUAD $0xc6f14cd848405531 // .quad -4111420493003729615 - QUAD $0xa21727db38cb002f // .quad -6766896092596731857 - QUAD $0xb8ada00e5a506a7d // .quad -5139275616254662019 - QUAD $0xca9cf1d206fdc03b // .quad -3846934097318526917 - QUAD $0xa6d90811f0e4851d // .quad -6424094520318327523 - QUAD $0xfd442e4688bd304a // .quad -196981603220770742 - QUAD $0x908f4a166d1da664 // .quad -8030118150397909404 - QUAD $0x9e4a9cec15763e2e // .quad -7040642529654063570 - QUAD $0x9a598e4e043287ff // .quad -7324666853212387329 - QUAD $0xc5dd44271ad3cdba // .quad -4189117143640191558 - QUAD $0x40eff1e1853f29fe // .quad 4679224488766679550 - QUAD $0xf7549530e188c128 // .quad -624710411122851544 - QUAD $0xd12bee59e68ef47d // .quad -3374341425896426371 - QUAD $0x9a94dd3e8cf578b9 // .quad -7307973034592864071 - QUAD $0x82bb74f8301958cf // .quad -9026492418826348337 - QUAD $0xc13a148e3032d6e7 // .quad -4523280274813692185 - QUAD $0xe36a52363c1faf02 // .quad -2059743486678159614 - QUAD $0xf18899b1bc3f8ca1 // .quad -1042414325089727327 - QUAD $0xdc44e6c3cb279ac2 // .quad -2574679358347699518 - QUAD $0x96f5600f15a7b7e5 // .quad -7569037980822161435 - QUAD $0x29ab103a5ef8c0ba // .quad 3002511419460075706 - QUAD $0xbcb2b812db11a5de // .quad -4849611457600313890 - QUAD $0x7415d448f6b6f0e8 // .quad 8364825292752482536 - QUAD $0xebdf661791d60f56 // .quad -1450328303573004458 - QUAD $0x111b495b3464ad22 // .quad 1232659579085827362 - QUAD $0x936b9fcebb25c995 // .quad -7823984217374209643 - QUAD $0xcab10dd900beec35 // .quad -3841273781498745803 - QUAD $0xb84687c269ef3bfb // .quad -5168294253290374149 - QUAD $0x3d5d514f40eea743 // .quad 4421779809981343555 - QUAD $0xe65829b3046b0afa // .quad -1848681798185579782 - QUAD $0x0cb4a5a3112a5113 // .quad 915538744049291539 - QUAD $0x8ff71a0fe2c2e6dc // .quad -8072955151507069220 - QUAD $0x47f0e785eaba72ac // .quad 5183897733458195116 - QUAD $0xb3f4e093db73a093 // .quad -5479507920956448621 - QUAD $0x59ed216765690f57 // .quad 6479872166822743895 - QUAD $0xe0f218b8d25088b8 // .quad -2237698882768172872 - QUAD $0x306869c13ec3532d // .quad 3488154190101041965 - QUAD $0x8c974f7383725573 // .quad -8316090829371189901 - QUAD $0x1e414218c73a13fc // .quad 2180096368813151228 - QUAD $0xafbd2350644eeacf // .quad -5783427518286599473 - QUAD $0xe5d1929ef90898fb // .quad -1886565557410948869 - QUAD $0xdbac6c247d62a583 // .quad -2617598379430861437 - QUAD $0xdf45f746b74abf3a // .quad -2358206946763686086 - QUAD $0x894bc396ce5da772 // .quad -8553528014785370254 - QUAD $0x6b8bba8c328eb784 // .quad 7749492695127472004 - QUAD $0xab9eb47c81f5114f // .quad -6080224000054324913 - QUAD $0x066ea92f3f326565 // .quad 463493832054564197 - QUAD $0xd686619ba27255a2 // .quad -2988593981640518238 - QUAD $0xc80a537b0efefebe // .quad -4032318728359182658 - QUAD $0x8613fd0145877585 // .quad -8785400266166405755 - QUAD $0xbd06742ce95f5f37 // .quad -4826042214438183113 - QUAD $0xa798fc4196e952e7 // .quad -6370064314280619289 - QUAD $0x2c48113823b73705 // .quad 3190819268807046917 - QUAD $0xd17f3b51fca3a7a0 // .quad -3350894374423386208 - QUAD $0xf75a15862ca504c6 // .quad -623161932418579258 - QUAD $0x82ef85133de648c4 // .quad -9011838011655698236 - QUAD $0x9a984d73dbe722fc // .quad -7307005235402693892 - QUAD $0xa3ab66580d5fdaf5 // .quad -6653111496142234891 - QUAD $0xc13e60d0d2e0ebbb // .quad -4522070525825979461 - QUAD $0xcc963fee10b7d1b3 // .quad -3704703351750405709 - QUAD $0x318df905079926a9 // .quad 3570783879572301481 - QUAD $0xffbbcfe994e5c61f // .quad -19193171260619233 - QUAD $0xfdf17746497f7053 // .quad -148206168962011053 - QUAD $0x9fd561f1fd0f9bd3 // .quad -6929524759678968877 - QUAD $0xfeb6ea8bedefa634 // .quad -92628855601256908 - QUAD $0xc7caba6e7c5382c8 // .quad -4050219931171323192 - QUAD $0xfe64a52ee96b8fc1 // .quad -115786069501571135 - QUAD $0xf9bd690a1b68637b // .quad -451088895536766085 - QUAD $0x3dfdce7aa3c673b1 // .quad 4466953431550423985 - QUAD $0x9c1661a651213e2d // .quad -7199459587351560659 - QUAD $0x06bea10ca65c084f // .quad 486002885505321039 - QUAD $0xc31bfa0fe5698db8 // .quad -4387638465762062920 - QUAD $0x486e494fcff30a63 // .quad 5219189625309039203 - QUAD $0xf3e2f893dec3f126 // .quad -872862063775190746 - QUAD $0x5a89dba3c3efccfb // .quad 6523987031636299003 - QUAD $0x986ddb5c6b3a76b7 // .quad -7463067817500576073 - QUAD $0xf89629465a75e01d // .quad -534194123654701027 - QUAD $0xbe89523386091465 // .quad -4717148753448332187 - QUAD $0xf6bbb397f1135824 // .quad -667742654568376284 - QUAD $0xee2ba6c0678b597f // .quad -1284749923383027329 - QUAD $0x746aa07ded582e2d // .quad 8388693718644305453 - QUAD $0x94db483840b717ef // .quad -7720497729755473937 - QUAD $0xa8c2a44eb4571cdd // .quad -6286281471915778851 - QUAD $0xba121a4650e4ddeb // .quad -5038936143766954517 - QUAD $0x92f34d62616ce414 // .quad -7857851839894723564 - QUAD $0xe896a0d7e51e1566 // .quad -1686984161281305242 - QUAD $0x77b020baf9c81d18 // .quad 8624429273841147160 - QUAD $0x915e2486ef32cd60 // .quad -7971894128441897632 - QUAD $0x0ace1474dc1d122f // .quad 778582277723329071 - QUAD $0xb5b5ada8aaff80b8 // .quad -5353181642124984136 - QUAD $0x0d819992132456bb // .quad 973227847154161339 - QUAD $0xe3231912d5bf60e6 // .quad -2079791034228842266 - QUAD $0x10e1fff697ed6c6a // .quad 1216534808942701674 - QUAD $0x8df5efabc5979c8f // .quad -8217398424034108273 - QUAD $0xca8d3ffa1ef463c2 // .quad -3851351762838199358 - QUAD $0xb1736b96b6fd83b3 // .quad -5660062011615247437 - QUAD $0xbd308ff8a6b17cb3 // .quad -4814189703547749197 - QUAD $0xddd0467c64bce4a0 // .quad -2463391496091671392 - QUAD $0xac7cb3f6d05ddbdf // .quad -6017737129434686497 - QUAD $0x8aa22c0dbef60ee4 // .quad -8457148712698376476 - QUAD $0x6bcdf07a423aa96c // .quad 7768129340171790700 - QUAD $0xad4ab7112eb3929d // .quad -5959749872445582691 - QUAD $0x86c16c98d2c953c7 // .quad -8736582398494813241 - QUAD $0xd89d64d57a607744 // .quad -2838001322129590460 - QUAD $0xe871c7bf077ba8b8 // .quad -1697355961263740744 - QUAD $0x87625f056c7c4a8b // .quad -8691279853972075893 - QUAD $0x11471cd764ad4973 // .quad 1244995533423855987 - QUAD $0xa93af6c6c79b5d2d // .quad -6252413799037706963 - QUAD $0xd598e40d3dd89bd0 // .quad -3055441601647567920 - QUAD $0xd389b47879823479 // .quad -3203831230369745799 - QUAD $0x4aff1d108d4ec2c4 // .quad 5404070034795315908 - QUAD $0x843610cb4bf160cb // .quad -8919923546622172981 - QUAD $0xcedf722a585139bb // .quad -3539985255894009413 - QUAD $0xa54394fe1eedb8fe // .quad -6538218414850328322 - QUAD $0xc2974eb4ee658829 // .quad -4424981569867511767 - QUAD $0xce947a3da6a9273e // .quad -3561087000135522498 - QUAD $0x733d226229feea33 // .quad 8303831092947774003 - QUAD $0x811ccc668829b887 // .quad -9143208402725783417 - QUAD $0x0806357d5a3f5260 // .quad 578208414664970848 - QUAD $0xa163ff802a3426a8 // .quad -6817324484979841368 - QUAD $0xca07c2dcb0cf26f8 // .quad -3888925500096174344 - QUAD $0xc9bcff6034c13052 // .quad -3909969587797413806 - QUAD $0xfc89b393dd02f0b6 // .quad -249470856692830026 - QUAD $0xfc2c3f3841f17c67 // .quad -275775966319379353 - QUAD $0xbbac2078d443ace3 // .quad -4923524589293425437 - QUAD $0x9d9ba7832936edc0 // .quad -7089889006590693952 - QUAD $0xd54b944b84aa4c0e // .quad -3077202868308390898 - QUAD $0xc5029163f384a931 // .quad -4250675239810979535 - QUAD $0x0a9e795e65d4df12 // .quad 765182433041899282 - QUAD $0xf64335bcf065d37d // .quad -701658031336336515 - QUAD $0x4d4617b5ff4a16d6 // .quad 5568164059729762006 - QUAD $0x99ea0196163fa42e // .quad -7356065297226292178 - QUAD $0x504bced1bf8e4e46 // .quad 5785945546544795206 - QUAD $0xc06481fb9bcf8d39 // .quad -4583395603105477319 - QUAD $0xe45ec2862f71e1d7 // .quad -1990940103673781801 - QUAD $0xf07da27a82c37088 // .quad -1117558485454458744 - QUAD $0x5d767327bb4e5a4d // .quad 6734696907262548557 - QUAD $0x964e858c91ba2655 // .quad -7616003081050118571 - QUAD $0x3a6a07f8d510f870 // .quad 4209185567039092848 - QUAD $0xbbe226efb628afea // .quad -4908317832885260310 - QUAD $0x890489f70a55368c // .quad -8573576096483297652 - QUAD $0xeadab0aba3b2dbe5 // .quad -1523711272679187483 - QUAD $0x2b45ac74ccea842f // .quad 3118087934678041647 - QUAD $0x92c8ae6b464fc96f // .quad -7869848573065574033 - QUAD $0x3b0b8bc90012929e // .quad 4254647968387469982 - QUAD $0xb77ada0617e3bbcb // .quad -5225624697904579637 - QUAD $0x09ce6ebb40173745 // .quad 706623942056949573 - QUAD $0xe55990879ddcaabd // .quad -1920344853953336643 - QUAD $0xcc420a6a101d0516 // .quad -3728406090856200938 - QUAD $0x8f57fa54c2a9eab6 // .quad -8117744561361917258 - QUAD $0x9fa946824a12232e // .quad -6941939825212513490 - QUAD $0xb32df8e9f3546564 // .quad -5535494683275008668 - QUAD $0x47939822dc96abfa // .quad 5157633273766521850 - QUAD $0xdff9772470297ebd // .quad -2307682335666372931 - QUAD $0x59787e2b93bc56f8 // .quad 6447041592208152312 - QUAD $0x8bfbea76c619ef36 // .quad -8359830487432564938 - QUAD $0x57eb4edb3c55b65b // .quad 6335244004343789147 - QUAD $0xaefae51477a06b03 // .quad -5838102090863318269 - QUAD $0xede622920b6b23f2 // .quad -1304317031425039374 - QUAD $0xdab99e59958885c4 // .quad -2685941595151759932 - QUAD $0xe95fab368e45ecee // .quad -1630396289281299218 - QUAD $0x88b402f7fd75539b // .quad -8596242524610931813 - QUAD $0x11dbcb0218ebb415 // .quad 1286845328412881941 - QUAD $0xaae103b5fcd2a881 // .quad -6133617137336276863 - QUAD $0xd652bdc29f26a11a // .quad -3003129357911285478 - QUAD $0xd59944a37c0752a2 // .quad -3055335403242958174 - QUAD $0x4be76d3346f04960 // .quad 5469460339465668960 - QUAD $0x857fcae62d8493a5 // .quad -8827113654667930715 - QUAD $0x6f70a4400c562ddc // .quad 8030098730593431004 - QUAD $0xa6dfbd9fb8e5b88e // .quad -6422206049907525490 - QUAD $0xcb4ccd500f6bb953 // .quad -3797434642040374957 - QUAD $0xd097ad07a71f26b2 // .quad -3416071543957018958 - QUAD $0x7e2000a41346a7a8 // .quad 9088264752731695016 - QUAD $0x825ecc24c873782f // .quad -9052573742614218705 - QUAD $0x8ed400668c0c28c9 // .quad -8154892584824854327 - QUAD $0xa2f67f2dfa90563b // .quad -6704031159840385477 - QUAD $0x728900802f0f32fb // .quad 8253128342678483707 - QUAD $0xcbb41ef979346bca // .quad -3768352931373093942 - QUAD $0x4f2b40a03ad2ffba // .quad 5704724409920716730 - QUAD $0xfea126b7d78186bc // .quad -98755145788979524 - QUAD $0xe2f610c84987bfa9 // .quad -2092466524453879895 - QUAD $0x9f24b832e6b0f436 // .quad -6979250993759194058 - QUAD $0x0dd9ca7d2df4d7ca // .quad 998051431430019018 - QUAD $0xc6ede63fa05d3143 // .quad -4112377723771604669 - QUAD $0x91503d1c79720dbc // .quad -7975807747567252036 - QUAD $0xf8a95fcf88747d94 // .quad -528786136287117932 - QUAD $0x75a44c6397ce912b // .quad 8476984389250486571 - QUAD $0x9b69dbe1b548ce7c // .quad -7248020362820530564 - QUAD $0xc986afbe3ee11abb // .quad -3925256793573221701 - QUAD $0xc24452da229b021b // .quad -4448339435098275301 - QUAD $0xfbe85badce996169 // .quad -294884973539139223 - QUAD $0xf2d56790ab41c2a2 // .quad -948738275445456222 - QUAD $0xfae27299423fb9c4 // .quad -368606216923924028 - QUAD $0x97c560ba6b0919a5 // .quad -7510490449794491995 - QUAD $0xdccd879fc967d41b // .quad -2536221894791146469 - QUAD $0xbdb6b8e905cb600f // .quad -4776427043815727089 - QUAD $0x5400e987bbc1c921 // .quad 6053094668365842721 - QUAD $0xed246723473e3813 // .quad -1358847786342270957 - QUAD $0x290123e9aab23b69 // .quad 2954682317029915497 - QUAD $0x9436c0760c86e30b // .quad -7766808894105001205 - QUAD $0xf9a0b6720aaf6522 // .quad -459166561069996766 - QUAD $0xb94470938fa89bce // .quad -5096825099203863602 - QUAD $0xf808e40e8d5b3e6a // .quad -573958201337495958 - QUAD $0xe7958cb87392c2c2 // .quad -1759345355577441598 - QUAD $0xb60b1d1230b20e05 // .quad -5329133770099257851 - QUAD $0x90bd77f3483bb9b9 // .quad -8017119874876982855 - QUAD $0xb1c6f22b5e6f48c3 // .quad -5636551615525730109 - QUAD $0xb4ecd5f01a4aa828 // .quad -5409713825168840664 - QUAD $0x1e38aeb6360b1af4 // .quad 2177682517447613172 - QUAD $0xe2280b6c20dd5232 // .quad -2150456263033662926 - QUAD $0x25c6da63c38de1b1 // .quad 2722103146809516465 - QUAD $0x8d590723948a535f // .quad -8261564192037121185 - QUAD $0x579c487e5a38ad0f // .quad 6313000485183335695 - QUAD $0xb0af48ec79ace837 // .quad -5715269221619013577 - QUAD $0x2d835a9df0c6d852 // .quad 3279564588051781714 - QUAD $0xdcdb1b2798182244 // .quad -2532400508596379068 - QUAD $0xf8e431456cf88e66 // .quad -512230283362660762 - QUAD $0x8a08f0f8bf0f156b // .quad -8500279345513818773 - QUAD $0x1b8e9ecb641b5900 // .quad 1985699082112030976 - QUAD $0xac8b2d36eed2dac5 // .quad -6013663163464885563 - QUAD $0xe272467e3d222f40 // .quad -2129562165787349184 - QUAD $0xd7adf884aa879177 // .quad -2905392935903719049 - QUAD $0x5b0ed81dcc6abb10 // .quad 6561419329620589328 - QUAD $0x86ccbb52ea94baea // .quad -8733399612580906262 - QUAD $0x98e947129fc2b4ea // .quad -7428327965055601430 - QUAD $0xa87fea27a539e9a5 // .quad -6305063497298744923 - QUAD $0x3f2398d747b36225 // .quad 4549648098962661925 - QUAD $0xd29fe4b18e88640e // .quad -3269643353196043250 - QUAD $0x8eec7f0d19a03aae // .quad -8147997931578836306 - QUAD $0x83a3eeeef9153e89 // .quad -8961056123388608887 - QUAD $0x1953cf68300424ad // .quad 1825030320404309165 - QUAD $0xa48ceaaab75a8e2b // .quad -6589634135808373205 - QUAD $0x5fa8c3423c052dd8 // .quad 6892973918932774360 - QUAD $0xcdb02555653131b6 // .quad -3625356651333078602 - QUAD $0x3792f412cb06794e // .quad 4004531380238580046 - QUAD $0x808e17555f3ebf11 // .quad -9183376934724255983 - QUAD $0xe2bbd88bbee40bd1 // .quad -2108853905778275375 - QUAD $0xa0b19d2ab70e6ed6 // .quad -6867535149977932074 - QUAD $0x5b6aceaeae9d0ec5 // .quad 6587304654631931589 - QUAD $0xc8de047564d20a8b // .quad -3972732919045027189 - QUAD $0xf245825a5a445276 // .quad -989241218564861322 - QUAD $0xfb158592be068d2e // .quad -354230130378896082 - QUAD $0xeed6e2f0f0d56713 // .quad -1236551523206076653 - QUAD $0x9ced737bb6c4183d // .quad -7138922859127891907 - QUAD $0x55464dd69685606c // .quad 6144684325637283948 - QUAD $0xc428d05aa4751e4c // .quad -4311967555482476980 - QUAD $0xaa97e14c3c26b887 // .quad -6154202648235558777 - QUAD $0xf53304714d9265df // .quad -778273425925708321 - QUAD $0xd53dd99f4b3066a9 // .quad -3081067291867060567 - QUAD $0x993fe2c6d07b7fab // .quad -7403949918844649557 - QUAD $0xe546a8038efe402a // .quad -1925667057416912854 - QUAD $0xbf8fdb78849a5f96 // .quad -4643251380128424042 - QUAD $0xde98520472bdd034 // .quad -2407083821771141068 - QUAD $0xef73d256a5c0f77c // .quad -1192378206733142148 - QUAD $0x963e66858f6d4441 // .quad -7620540795641314239 - QUAD $0x95a8637627989aad // .quad -7662765406849295699 - QUAD $0xdde7001379a44aa9 // .quad -2456994988062127447 - QUAD $0xbb127c53b17ec159 // .quad -4966770740134231719 - QUAD $0x5560c018580d5d53 // .quad 6152128301777116499 - QUAD $0xe9d71b689dde71af // .quad -1596777406740401745 - QUAD $0xaab8f01e6e10b4a7 // .quad -6144897678060768089 - QUAD $0x9226712162ab070d // .quad -7915514906853832947 - QUAD $0xcab3961304ca70e9 // .quad -3840561048787980055 - QUAD $0xb6b00d69bb55c8d1 // .quad -5282707615139903279 - QUAD $0x3d607b97c5fd0d23 // .quad 4422670725869800739 - QUAD $0xe45c10c42a2b3b05 // .quad -1991698500497491195 - QUAD $0x8cb89a7db77c506b // .quad -8306719647944912789 - QUAD $0x8eb98a7a9a5b04e3 // .quad -8162340590452013853 - QUAD $0x77f3608e92adb243 // .quad 8643358275316593219 - QUAD $0xb267ed1940f1c61c // .quad -5591239719637629412 - QUAD $0x55f038b237591ed4 // .quad 6192511825718353620 - QUAD $0xdf01e85f912e37a3 // .quad -2377363631119648861 - QUAD $0x6b6c46dec52f6689 // .quad 7740639782147942025 - QUAD $0x8b61313bbabce2c6 // .quad -8403381297090862394 - QUAD $0x2323ac4b3b3da016 // .quad 2532056854628769814 - QUAD $0xae397d8aa96c1b77 // .quad -5892540602936190089 - QUAD $0xabec975e0a0d081b // .quad -6058300968568813541 - QUAD $0xd9c7dced53c72255 // .quad -2753989735242849707 - QUAD $0x96e7bd358c904a22 // .quad -7572876210711016926 - QUAD $0x881cea14545c7575 // .quad -8638772612167862923 - QUAD $0x7e50d64177da2e55 // .quad 9102010423587778133 - QUAD $0xaa242499697392d2 // .quad -6186779746782440750 - QUAD $0xdde50bd1d5d0b9ea // .quad -2457545025797441046 - QUAD $0xd4ad2dbfc3d07787 // .quad -3121788665050663033 - QUAD $0x955e4ec64b44e865 // .quad -7683617300674189211 - QUAD $0x84ec3c97da624ab4 // .quad -8868646943297746252 - QUAD $0xbd5af13bef0b113f // .quad -4802260812921368257 - QUAD $0xa6274bbdd0fadd61 // .quad -6474122660694794911 - QUAD $0xecb1ad8aeacdd58f // .quad -1391139997724322417 - QUAD $0xcfb11ead453994ba // .quad -3480967307441105734 - QUAD $0x67de18eda5814af3 // .quad 7484447039699372787 - QUAD $0x81ceb32c4b43fcf4 // .quad -9093133594791772940 - QUAD $0x80eacf948770ced8 // .quad -9157278655470055720 - QUAD $0xa2425ff75e14fc31 // .quad -6754730975062328271 - QUAD $0xa1258379a94d028e // .quad -6834912300910181746 - QUAD $0xcad2f7f5359a3b3e // .quad -3831727700400522434 - QUAD $0x096ee45813a04331 // .quad 679731660717048625 - QUAD $0xfd87b5f28300ca0d // .quad -177973607073265139 - QUAD $0x8bca9d6e188853fd // .quad -8373707460958465027 - QUAD $0x9e74d1b791e07e48 // .quad -7028762532061872568 - QUAD $0x775ea264cf55347e // .quad 8601490892183123070 - QUAD $0xc612062576589dda // .quad -4174267146649952806 - QUAD $0x95364afe032a819e // .quad -7694880458480647778 - QUAD $0xf79687aed3eec551 // .quad -606147914885053103 - QUAD $0x3a83ddbd83f52205 // .quad 4216457482181353989 - QUAD $0x9abe14cd44753b52 // .quad -7296371474444240046 - QUAD $0xc4926a9672793543 // .quad -4282243101277735613 - QUAD $0xc16d9a0095928a27 // .quad -4508778324627912153 - QUAD $0x75b7053c0f178294 // .quad 8482254178684994196 - QUAD $0xf1c90080baf72cb1 // .quad -1024286887357502287 - QUAD $0x5324c68b12dd6339 // .quad 5991131704928854841 - QUAD $0x971da05074da7bee // .quad -7557708332239520786 - QUAD $0xd3f6fc16ebca5e04 // .quad -3173071712060547580 - QUAD $0xbce5086492111aea // .quad -4835449396872013078 - QUAD $0x88f4bb1ca6bcf585 // .quad -8578025658503072379 - QUAD $0xec1e4a7db69561a5 // .quad -1432625727662628443 - QUAD $0x2b31e9e3d06c32e6 // .quad 3112525982153323238 - QUAD $0x9392ee8e921d5d07 // .quad -7812920107430224633 - QUAD $0x3aff322e62439fd0 // .quad 4251171748059520976 - QUAD $0xb877aa3236a4b449 // .quad -5154464115860392887 - QUAD $0x09befeb9fad487c3 // .quad 702278666647013315 - QUAD $0xe69594bec44de15b // .quad -1831394126398103205 - QUAD $0x4c2ebe687989a9b4 // .quad 5489534351736154548 - QUAD $0x901d7cf73ab0acd9 // .quad -8062150356639896359 - QUAD $0x0f9d37014bf60a11 // .quad 1125115960621402641 - QUAD $0xb424dc35095cd80f // .quad -5466001927372482545 - QUAD $0x538484c19ef38c95 // .quad 6018080969204141205 - QUAD $0xe12e13424bb40e13 // .quad -2220816390788215277 - QUAD $0x2865a5f206b06fba // .quad 2910915193077788602 - QUAD $0x8cbccc096f5088cb // .quad -8305539271883716405 - QUAD $0xf93f87b7442e45d4 // .quad -486521013540076076 - QUAD $0xafebff0bcb24aafe // .quad -5770238071427257602 - QUAD $0xf78f69a51539d749 // .quad -608151266925095095 - QUAD $0xdbe6fecebdedd5be // .quad -2601111570856684098 - QUAD $0xb573440e5a884d1c // .quad -5371875102083756772 - QUAD $0x89705f4136b4a597 // .quad -8543223759426509417 - QUAD $0x31680a88f8953031 // .quad 3560107088838733873 - QUAD $0xabcc77118461cefc // .quad -6067343680855748868 - QUAD $0xfdc20d2b36ba7c3e // .quad -161552157378970562 - QUAD $0xd6bf94d5e57a42bc // .quad -2972493582642298180 - QUAD $0x3d32907604691b4d // .quad 4409745821703674701 - QUAD $0x8637bd05af6c69b5 // .quad -8775337516792518219 - QUAD $0xa63f9a49c2c1b110 // .quad -6467280898289979120 - QUAD $0xa7c5ac471b478423 // .quad -6357485877563259869 - QUAD $0x0fcf80dc33721d54 // .quad 1139270913992301908 - QUAD $0xd1b71758e219652b // .quad -3335171328526686933 - QUAD $0xd3c36113404ea4a9 // .quad -3187597375937010519 - QUAD $0x83126e978d4fdf3b // .quad -9002011107970261189 - QUAD $0x645a1cac083126ea // .quad 7231123676894144234 - QUAD $0xa3d70a3d70a3d70a // .quad -6640827866535438582 - QUAD $0x3d70a3d70a3d70a4 // .quad 4427218577690292388 - QUAD $0xcccccccccccccccc // .quad -3689348814741910324 - QUAD $0xcccccccccccccccd // .quad -3689348814741910323 - QUAD $0x8000000000000000 // .quad -9223372036854775808 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xa000000000000000 // .quad -6917529027641081856 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xc800000000000000 // .quad -4035225266123964416 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xfa00000000000000 // .quad -432345564227567616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9c40000000000000 // .quad -7187745005283311616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xc350000000000000 // .quad -4372995238176751616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xf424000000000000 // .quad -854558029293551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9896800000000000 // .quad -7451627795949551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xbebc200000000000 // .quad -4702848726509551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xee6b280000000000 // .quad -1266874889709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9502f90000000000 // .quad -7709325833709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xba43b74000000000 // .quad -5024971273709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xe8d4a51000000000 // .quad -1669528073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x9184e72a00000000 // .quad -7960984073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xb5e620f480000000 // .quad -5339544073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xe35fa931a0000000 // .quad -2062744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x8e1bc9bf04000000 // .quad -8206744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xb1a2bc2ec5000000 // .quad -5646744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xde0b6b3a76400000 // .quad -2446744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x8ac7230489e80000 // .quad -8446744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xad78ebc5ac620000 // .quad -5946744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xd8d726b7177a8000 // .quad -2821744073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x878678326eac9000 // .quad -8681119073709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xa968163f0a57b400 // .quad -6239712823709551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xd3c21bcecceda100 // .quad -3187955011209551616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x84595161401484a0 // .quad -8910000909647051616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xa56fa5b99019a5c8 // .quad -6525815118631426616 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0xcecb8f27f4200f3a // .quad -3545582879861895366 - QUAD $0x0000000000000000 // .quad 0 - QUAD $0x813f3978f8940984 // .quad -9133518327554766460 - QUAD $0x4000000000000000 // .quad 4611686018427387904 - QUAD $0xa18f07d736b90be5 // .quad -6805211891016070171 - QUAD $0x5000000000000000 // .quad 5764607523034234880 - QUAD $0xc9f2c9cd04674ede // .quad -3894828845342699810 - QUAD $0xa400000000000000 // .quad -6629298651489370112 - QUAD $0xfc6f7c4045812296 // .quad -256850038250986858 - QUAD $0x4d00000000000000 // .quad 5548434740920451072 - QUAD $0x9dc5ada82b70b59d // .quad -7078060301547948643 - QUAD $0xf020000000000000 // .quad -1143914305352105984 - QUAD $0xc5371912364ce305 // .quad -4235889358507547899 - QUAD $0x6c28000000000000 // .quad 7793479155164643328 - QUAD $0xf684df56c3e01bc6 // .quad -683175679707046970 - QUAD $0xc732000000000000 // .quad -4093209111326359552 - QUAD $0x9a130b963a6c115c // .quad -7344513827457986212 - QUAD $0x3c7f400000000000 // .quad 4359273333062107136 - QUAD $0xc097ce7bc90715b3 // .quad -4568956265895094861 - QUAD $0x4b9f100000000000 // .quad 5449091666327633920 - QUAD $0xf0bdc21abb48db20 // .quad -1099509313941480672 - QUAD $0x1e86d40000000000 // .quad 2199678564482154496 - QUAD $0x96769950b50d88f4 // .quad -7604722348854507276 - QUAD $0x1314448000000000 // .quad 1374799102801346560 - QUAD $0xbc143fa4e250eb31 // .quad -4894216917640746191 - QUAD $0x17d955a000000000 // .quad 1718498878501683200 - QUAD $0xeb194f8e1ae525fd // .quad -1506085128623544835 - QUAD $0x5dcfab0800000000 // .quad 6759809616554491904 - QUAD $0x92efd1b8d0cf37be // .quad -7858832233030797378 - QUAD $0x5aa1cae500000000 // .quad 6530724019560251392 - QUAD $0xb7abc627050305ad // .quad -5211854272861108819 - QUAD $0xf14a3d9e40000000 // .quad -1059967012404461568 - QUAD $0xe596b7b0c643c719 // .quad -1903131822648998119 - QUAD $0x6d9ccd05d0000000 // .quad 7898413271349198848 - QUAD $0x8f7e32ce7bea5c6f // .quad -8106986416796705681 - QUAD $0xe4820023a2000000 // .quad -1981020733047832576 - QUAD $0xb35dbf821ae4f38b // .quad -5522047002568494197 - QUAD $0xdda2802c8a800000 // .quad -2476275916309790720 - QUAD $0xe0352f62a19e306e // .quad -2290872734783229842 - QUAD $0xd50b2037ad200000 // .quad -3095344895387238400 - QUAD $0x8c213d9da502de45 // .quad -8349324486880600507 - QUAD $0x4526f422cc340000 // .quad 4982938468024057856 - QUAD $0xaf298d050e4395d6 // .quad -5824969590173362730 - QUAD $0x9670b12b7f410000 // .quad -7606384970252091392 - QUAD $0xdaf3f04651d47b4c // .quad -2669525969289315508 - QUAD $0x3c0cdd765f114000 // .quad 4327076842467049472 - QUAD $0x88d8762bf324cd0f // .quad -8585982758446904049 - QUAD $0xa5880a69fb6ac800 // .quad -6518949010312869888 - QUAD $0xab0e93b6efee0053 // .quad -6120792429631242157 - QUAD $0x8eea0d047a457a00 // .quad -8148686262891087360 - QUAD $0xd5d238a4abe98068 // .quad -3039304518611664792 - QUAD $0x72a4904598d6d880 // .quad 8260886245095692416 - QUAD $0x85a36366eb71f041 // .quad -8817094351773372351 - QUAD $0x47a6da2b7f864750 // .quad 5163053903184807760 - QUAD $0xa70c3c40a64e6c51 // .quad -6409681921289327535 - QUAD $0x999090b65f67d924 // .quad -7381240676301154012 - QUAD $0xd0cf4b50cfe20765 // .quad -3400416383184271515 - QUAD $0xfff4b4e3f741cf6d // .quad -3178808521666707 - QUAD $0x82818f1281ed449f // .quad -9042789267131251553 - QUAD $0xbff8f10e7a8921a5 // .quad -4613672773753429595 - QUAD $0xa321f2d7226895c7 // .quad -6691800565486676537 - QUAD $0xaff72d52192b6a0e // .quad -5767090967191786994 - QUAD $0xcbea6f8ceb02bb39 // .quad -3753064688430957767 - QUAD $0x9bf4f8a69f764491 // .quad -7208863708989733743 - QUAD $0xfee50b7025c36a08 // .quad -79644842111309304 - QUAD $0x02f236d04753d5b5 // .quad 212292400617608629 - QUAD $0x9f4f2726179a2245 // .quad -6967307053960650171 - QUAD $0x01d762422c946591 // .quad 132682750386005393 - QUAD $0xc722f0ef9d80aad6 // .quad -4097447799023424810 - QUAD $0x424d3ad2b7b97ef6 // .quad 4777539456409894646 - QUAD $0xf8ebad2b84e0d58b // .quad -510123730351893109 - QUAD $0xd2e0898765a7deb3 // .quad -3251447716342407501 - QUAD $0x9b934c3b330c8577 // .quad -7236356359111015049 - QUAD $0x63cc55f49f88eb30 // .quad 7191217214140771120 - QUAD $0xc2781f49ffcfa6d5 // .quad -4433759430461380907 - QUAD $0x3cbf6b71c76b25fc // .quad 4377335499248575996 - QUAD $0xf316271c7fc3908a // .quad -930513269649338230 - QUAD $0x8bef464e3945ef7b // .quad -8363388681221443717 - QUAD $0x97edd871cfda3a56 // .quad -7499099821171918250 - QUAD $0x97758bf0e3cbb5ad // .quad -7532960934977096275 - QUAD $0xbde94e8e43d0c8ec // .quad -4762188758037509908 - QUAD $0x3d52eeed1cbea318 // .quad 4418856886560793368 - QUAD $0xed63a231d4c4fb27 // .quad -1341049929119499481 - QUAD $0x4ca7aaa863ee4bde // .quad 5523571108200991710 - QUAD $0x945e455f24fb1cf8 // .quad -7755685233340769032 - QUAD $0x8fe8caa93e74ef6b // .quad -8076983103442849941 - QUAD $0xb975d6b6ee39e436 // .quad -5082920523248573386 - QUAD $0xb3e2fd538e122b45 // .quad -5484542860876174523 - QUAD $0xe7d34c64a9c85d44 // .quad -1741964635633328828 - QUAD $0x60dbbca87196b617 // .quad 6979379479186945559 - QUAD $0x90e40fbeea1d3a4a // .quad -8006256924911912374 - QUAD $0xbc8955e946fe31ce // .quad -4861259862362934834 - QUAD $0xb51d13aea4a488dd // .quad -5396135137712502563 - QUAD $0x6babab6398bdbe42 // .quad 7758483227328495170 - QUAD $0xe264589a4dcdab14 // .quad -2133482903713240300 - QUAD $0xc696963c7eed2dd2 // .quad -4136954021121544750 - QUAD $0x8d7eb76070a08aec // .quad -8250955842461857044 - QUAD $0xfc1e1de5cf543ca3 // .quad -279753253987271517 - QUAD $0xb0de65388cc8ada8 // .quad -5702008784649933400 - QUAD $0x3b25a55f43294bcc // .quad 4261994450943298508 - QUAD $0xdd15fe86affad912 // .quad -2515824962385028846 - QUAD $0x49ef0eb713f39ebf // .quad 5327493063679123135 - QUAD $0x8a2dbf142dfcc7ab // .quad -8489919629131724885 - QUAD $0x6e3569326c784338 // .quad 7941369183226839864 - QUAD $0xacb92ed9397bf996 // .quad -6000713517987268202 - QUAD $0x49c2c37f07965405 // .quad 5315025460606161925 - QUAD $0xd7e77a8f87daf7fb // .quad -2889205879056697349 - QUAD $0xdc33745ec97be907 // .quad -2579590211097073401 - QUAD $0x86f0ac99b4e8dafd // .quad -8723282702051517699 - QUAD $0x69a028bb3ded71a4 // .quad 7611128154919104932 - QUAD $0xa8acd7c0222311bc // .quad -6292417359137009220 - QUAD $0xc40832ea0d68ce0d // .quad -4321147861633282547 - QUAD $0xd2d80db02aabd62b // .quad -3253835680493873621 - QUAD $0xf50a3fa490c30191 // .quad -789748808614215279 - QUAD $0x83c7088e1aab65db // .quad -8951176327949752869 - QUAD $0x792667c6da79e0fb // .quad 8729779031470891259 - QUAD $0xa4b8cab1a1563f52 // .quad -6577284391509803182 - QUAD $0x577001b891185939 // .quad 6300537770911226169 - QUAD $0xcde6fd5e09abcf26 // .quad -3609919470959866074 - QUAD $0xed4c0226b55e6f87 // .quad -1347699823215743097 - QUAD $0x80b05e5ac60b6178 // .quad -9173728696990998152 - QUAD $0x544f8158315b05b5 // .quad 6075216638131242421 - QUAD $0xa0dc75f1778e39d6 // .quad -6855474852811359786 - QUAD $0x696361ae3db1c722 // .quad 7594020797664053026 - QUAD $0xc913936dd571c84c // .quad -3957657547586811828 - QUAD $0x03bc3a19cd1e38ea // .quad 269153960225290474 - QUAD $0xfb5878494ace3a5f // .quad -335385916056126881 - QUAD $0x04ab48a04065c724 // .quad 336442450281613092 - QUAD $0x9d174b2dcec0e47b // .quad -7127145225176161157 - QUAD $0x62eb0d64283f9c77 // .quad 7127805559067090039 - QUAD $0xc45d1df942711d9a // .quad -4297245513042813542 - QUAD $0x3ba5d0bd324f8395 // .quad 4298070930406474645 - QUAD $0xf5746577930d6500 // .quad -759870872876129024 - QUAD $0xca8f44ec7ee3647a // .quad -3850783373846682502 - QUAD $0x9968bf6abbe85f20 // .quad -7392448323188662496 - QUAD $0x7e998b13cf4e1ecc // .quad 9122475437414293196 - QUAD $0xbfc2ef456ae276e8 // .quad -4628874385558440216 - QUAD $0x9e3fedd8c321a67f // .quad -7043649776941685121 - QUAD $0xefb3ab16c59b14a2 // .quad -1174406963520662366 - QUAD $0xc5cfe94ef3ea101f // .quad -4192876202749718497 - QUAD $0x95d04aee3b80ece5 // .quad -7651533379841495835 - QUAD $0xbba1f1d158724a13 // .quad -4926390635932268013 - QUAD $0xbb445da9ca61281f // .quad -4952730706374481889 - QUAD $0x2a8a6e45ae8edc98 // .quad 3065383741939440792 - QUAD $0xea1575143cf97226 // .quad -1579227364540714458 - QUAD $0xf52d09d71a3293be // .quad -779956341003086914 - QUAD $0x924d692ca61be758 // .quad -7904546130479028392 - QUAD $0x593c2626705f9c57 // .quad 6430056314514152535 - QUAD $0xb6e0c377cfa2e12e // .quad -5268996644671397586 - QUAD $0x6f8b2fb00c77836d // .quad 8037570393142690669 - QUAD $0xe498f455c38b997a // .quad -1974559787411859078 - QUAD $0x0b6dfb9c0f956448 // .quad 823590954573587528 - QUAD $0x8edf98b59a373fec // .quad -8151628894773493780 - QUAD $0x4724bd4189bd5ead // .quad 5126430365035880109 - QUAD $0xb2977ee300c50fe7 // .quad -5577850100039479321 - QUAD $0x58edec91ec2cb658 // .quad 6408037956294850136 - QUAD $0xdf3d5e9bc0f653e1 // .quad -2360626606621961247 - QUAD $0x2f2967b66737e3ee // .quad 3398361426941174766 - QUAD $0x8b865b215899f46c // .quad -8392920656779807636 - QUAD $0xbd79e0d20082ee75 // .quad -4793553135802847627 - QUAD $0xae67f1e9aec07187 // .quad -5879464802547371641 - QUAD $0xecd8590680a3aa12 // .quad -1380255401326171630 - QUAD $0xda01ee641a708de9 // .quad -2737644984756826647 - QUAD $0xe80e6f4820cc9496 // .quad -1725319251657714538 - QUAD $0x884134fe908658b2 // .quad -8628557143114098510 - QUAD $0x3109058d147fdcde // .quad 3533361486141316318 - QUAD $0xaa51823e34a7eede // .quad -6174010410465235234 - QUAD $0xbd4b46f0599fd416 // .quad -4806670179178130410 - QUAD $0xd4e5e2cdc1d1ea96 // .quad -3105826994654156138 - QUAD $0x6c9e18ac7007c91b // .quad 7826720331309500699 - QUAD $0x850fadc09923329e // .quad -8858670899299929442 - QUAD $0x03e2cf6bc604ddb1 // .quad 280014188641050033 - QUAD $0xa6539930bf6bff45 // .quad -6461652605697523899 - QUAD $0x84db8346b786151d // .quad -8873354301053463267 - QUAD $0xcfe87f7cef46ff16 // .quad -3465379738694516970 - QUAD $0xe612641865679a64 // .quad -1868320839462053276 - QUAD $0x81f14fae158c5f6e // .quad -9083391364325154962 - QUAD $0x4fcb7e8f3f60c07f // .quad 5749828502977298559 - QUAD $0xa26da3999aef7749 // .quad -6742553186979055799 - QUAD $0xe3be5e330f38f09e // .quad -2036086408133152610 - QUAD $0xcb090c8001ab551c // .quad -3816505465296431844 - QUAD $0x5cadf5bfd3072cc6 // .quad 6678264026688335046 - QUAD $0xfdcb4fa002162a63 // .quad -158945813193151901 - QUAD $0x73d9732fc7c8f7f7 // .quad 8347830033360418807 - QUAD $0x9e9f11c4014dda7e // .quad -7016870160886801794 - QUAD $0x2867e7fddcdd9afb // .quad 2911550761636567803 - QUAD $0xc646d63501a1511d // .quad -4159401682681114339 - QUAD $0xb281e1fd541501b9 // .quad -5583933584809066055 - QUAD $0xf7d88bc24209a565 // .quad -587566084924005019 - QUAD $0x1f225a7ca91a4227 // .quad 2243455055843443239 - QUAD $0x9ae757596946075f // .quad -7284757830718584993 - QUAD $0x3375788de9b06959 // .quad 3708002419115845977 - QUAD $0xc1a12d2fc3978937 // .quad -4494261269970843337 - QUAD $0x0052d6b1641c83af // .quad 23317005467419567 - QUAD $0xf209787bb47d6b84 // .quad -1006140569036166268 - QUAD $0xc0678c5dbd23a49b // .quad -4582539761593113445 - QUAD $0x9745eb4d50ce6332 // .quad -7546366883288685774 - QUAD $0xf840b7ba963646e1 // .quad -558244341782001951 - QUAD $0xbd176620a501fbff // .quad -4821272585683469313 - QUAD $0xb650e5a93bc3d899 // .quad -5309491445654890343 - QUAD $0xec5d3fa8ce427aff // .quad -1414904713676948737 - QUAD $0xa3e51f138ab4cebf // .quad -6636864307068612929 - QUAD $0x93ba47c980e98cdf // .quad -7801844473689174817 - QUAD $0xc66f336c36b10138 // .quad -4148040191917883080 - QUAD $0xb8a8d9bbe123f017 // .quad -5140619573684080617 - QUAD $0xb80b0047445d4185 // .quad -5185050239897353851 - QUAD $0xe6d3102ad96cec1d // .quad -1814088448677712867 - QUAD $0xa60dc059157491e6 // .quad -6481312799871692314 - QUAD $0x9043ea1ac7e41392 // .quad -8051334308064652398 - QUAD $0x87c89837ad68db30 // .quad -8662506518347195600 - QUAD $0xb454e4a179dd1877 // .quad -5452481866653427593 - QUAD $0x29babe4598c311fc // .quad 3006924907348169212 - QUAD $0xe16a1dc9d8545e94 // .quad -2203916314889396588 - QUAD $0xf4296dd6fef3d67b // .quad -853029884242176389 - QUAD $0x8ce2529e2734bb1d // .quad -8294976724446954723 - QUAD $0x1899e4a65f58660d // .quad 1772699331562333709 - QUAD $0xb01ae745b101e9e4 // .quad -5757034887131305500 - QUAD $0x5ec05dcff72e7f90 // .quad 6827560182880305040 - QUAD $0xdc21a1171d42645d // .quad -2584607590486743971 - QUAD $0x76707543f4fa1f74 // .quad 8534450228600381300 - QUAD $0x899504ae72497eba // .quad -8532908771695296838 - QUAD $0x6a06494a791c53a9 // .quad 7639874402088932265 - QUAD $0xabfa45da0edbde69 // .quad -6054449946191733143 - QUAD $0x0487db9d17636893 // .quad 326470965756389523 - QUAD $0xd6f8d7509292d603 // .quad -2956376414312278525 - QUAD $0x45a9d2845d3c42b7 // .quad 5019774725622874807 - QUAD $0x865b86925b9bc5c2 // .quad -8765264286586255934 - QUAD $0x0b8a2392ba45a9b3 // .quad 831516194300602803 - QUAD $0xa7f26836f282b732 // .quad -6344894339805432014 - QUAD $0x8e6cac7768d7141f // .quad -8183976793979022305 - QUAD $0xd1ef0244af2364ff // .quad -3319431906329402113 - QUAD $0x3207d795430cd927 // .quad 3605087062808385831 - QUAD $0x8335616aed761f1f // .quad -8992173969096958177 - QUAD $0x7f44e6bd49e807b9 // .quad 9170708441896323001 - QUAD $0xa402b9c5a8d3a6e7 // .quad -6628531442943809817 - QUAD $0x5f16206c9c6209a7 // .quad 6851699533943015847 - QUAD $0xcd036837130890a1 // .quad -3673978285252374367 - QUAD $0x36dba887c37a8c10 // .quad 3952938399001381904 - QUAD $0x802221226be55a64 // .quad -9213765455923815836 - QUAD $0xc2494954da2c978a // .quad -4446942528265218166 - QUAD $0xa02aa96b06deb0fd // .quad -6905520801477381891 - QUAD $0xf2db9baa10b7bd6d // .quad -946992141904134803 - QUAD $0xc83553c5c8965d3d // .quad -4020214983419339459 - QUAD $0x6f92829494e5acc8 // .quad 8039631859474607304 - QUAD $0xfa42a8b73abbf48c // .quad -413582710846786420 - QUAD $0xcb772339ba1f17fa // .quad -3785518230938904582 - QUAD $0x9c69a97284b578d7 // .quad -7176018221920323369 - QUAD $0xff2a760414536efc // .quad -60105885123121412 - QUAD $0xc38413cf25e2d70d // .quad -4358336758973016307 - QUAD $0xfef5138519684abb // .quad -75132356403901765 - QUAD $0xf46518c2ef5b8cd1 // .quad -836234930288882479 - QUAD $0x7eb258665fc25d6a // .quad 9129456591349898602 - QUAD $0x98bf2f79d5993802 // .quad -7440175859071633406 - QUAD $0xef2f773ffbd97a62 // .quad -1211618658047395230 - QUAD $0xbeeefb584aff8603 // .quad -4688533805412153853 - QUAD $0xaafb550ffacfd8fb // .quad -6126209340986631941 - QUAD $0xeeaaba2e5dbf6784 // .quad -1248981238337804412 - QUAD $0x95ba2a53f983cf39 // .quad -7657761676233289927 - QUAD $0x952ab45cfa97a0b2 // .quad -7698142301602209614 - QUAD $0xdd945a747bf26184 // .quad -2480258038432112252 - QUAD $0xba756174393d88df // .quad -5010991858575374113 - QUAD $0x94f971119aeef9e5 // .quad -7712008566467528219 - QUAD $0xe912b9d1478ceb17 // .quad -1652053804791829737 - QUAD $0x7a37cd5601aab85e // .quad 8806733365625141342 - QUAD $0x91abb422ccb812ee // .quad -7950062655635975442 - QUAD $0xac62e055c10ab33b // .quad -6025006692552756421 - QUAD $0xb616a12b7fe617aa // .quad -5325892301117581398 - QUAD $0x577b986b314d600a // .quad 6303799689591218186 - QUAD $0xe39c49765fdf9d94 // .quad -2045679357969588844 - QUAD $0xed5a7e85fda0b80c // .quad -1343622424865753076 - QUAD $0x8e41ade9fbebc27d // .quad -8196078626372074883 - QUAD $0x14588f13be847308 // .quad 1466078993672598280 - QUAD $0xb1d219647ae6b31c // .quad -5633412264537705700 - QUAD $0x596eb2d8ae258fc9 // .quad 6444284760518135753 - QUAD $0xde469fbd99a05fe3 // .quad -2430079312244744221 - QUAD $0x6fca5f8ed9aef3bc // .quad 8055355950647669692 - QUAD $0x8aec23d680043bee // .quad -8436328597794046994 - QUAD $0x25de7bb9480d5855 // .quad 2728754459941099605 - QUAD $0xada72ccc20054ae9 // .quad -5933724728815170839 - QUAD $0xaf561aa79a10ae6b // .quad -5812428961928401301 - QUAD $0xd910f7ff28069da4 // .quad -2805469892591575644 - QUAD $0x1b2ba1518094da05 // .quad 1957835834444274181 - QUAD $0x87aa9aff79042286 // .quad -8670947710510816634 - QUAD $0x90fb44d2f05d0843 // .quad -7999724640327104445 - QUAD $0xa99541bf57452b28 // .quad -6226998619711132888 - QUAD $0x353a1607ac744a54 // .quad 3835402254873283156 - QUAD $0xd3fa922f2d1675f2 // .quad -3172062256211528206 - QUAD $0x42889b8997915ce9 // .quad 4794252818591603945 - QUAD $0x847c9b5d7c2e09b7 // .quad -8900067937773286985 - QUAD $0x69956135febada12 // .quad 7608094030047140370 - QUAD $0xa59bc234db398c25 // .quad -6513398903789220827 - QUAD $0x43fab9837e699096 // .quad 4898431519131537558 - QUAD $0xcf02b2c21207ef2e // .quad -3530062611309138130 - QUAD $0x94f967e45e03f4bc // .quad -7712018656367741764 - QUAD $0x8161afb94b44f57d // .quad -9123818159709293187 - QUAD $0x1d1be0eebac278f6 // .quad 2097517367411243254 - QUAD $0xa1ba1ba79e1632dc // .quad -6793086681209228580 - QUAD $0x6462d92a69731733 // .quad 7233582727691441971 - QUAD $0xca28a291859bbf93 // .quad -3879672333084147821 - QUAD $0x7d7b8f7503cfdcff // .quad 9041978409614302463 - QUAD $0xfcb2cb35e702af78 // .quad -237904397927796872 - QUAD $0x5cda735244c3d43f // .quad 6690786993590490175 - QUAD $0x9defbf01b061adab // .quad -7066219276345954901 - QUAD $0x3a0888136afa64a8 // .quad 4181741870994056360 - QUAD $0xc56baec21c7a1916 // .quad -4221088077005055722 - QUAD $0x088aaa1845b8fdd1 // .quad 615491320315182545 - QUAD $0xf6c69a72a3989f5b // .quad -664674077828931749 - QUAD $0x8aad549e57273d46 // .quad -8454007886460797626 - QUAD $0x9a3c2087a63f6399 // .quad -7332950326284164199 - QUAD $0x36ac54e2f678864c // .quad 3939617107816777292 - QUAD $0xc0cb28a98fcf3c7f // .quad -4554501889427817345 - QUAD $0x84576a1bb416a7de // .quad -8910536670511192098 - QUAD $0xf0fdf2d3f3c30b9f // .quad -1081441343357383777 - QUAD $0x656d44a2a11c51d6 // .quad 7308573235570561494 - QUAD $0x969eb7c47859e743 // .quad -7593429867239446717 - QUAD $0x9f644ae5a4b1b326 // .quad -6961356773836868826 - QUAD $0xbc4665b596706114 // .quad -4880101315621920492 - QUAD $0x873d5d9f0dde1fef // .quad -8701695967296086033 - QUAD $0xeb57ff22fc0c7959 // .quad -1488440626100012711 - QUAD $0xa90cb506d155a7eb // .quad -6265433940692719637 - QUAD $0x9316ff75dd87cbd8 // .quad -7847804418953589800 - QUAD $0x09a7f12442d588f3 // .quad 695789805494438131 - QUAD $0xb7dcbf5354e9bece // .quad -5198069505264599346 - QUAD $0x0c11ed6d538aeb30 // .quad 869737256868047664 - QUAD $0xe5d3ef282a242e81 // .quad -1885900863153361279 - QUAD $0x8f1668c8a86da5fb // .quad -8136200465769716229 - QUAD $0x8fa475791a569d10 // .quad -8096217067111932656 - QUAD $0xf96e017d694487bd // .quad -473439272678684739 - QUAD $0xb38d92d760ec4455 // .quad -5508585315462527915 - QUAD $0x37c981dcc395a9ad // .quad 4019886927579031981 - QUAD $0xe070f78d3927556a // .quad -2274045625900771990 - QUAD $0x85bbe253f47b1418 // .quad -8810199395808373736 - QUAD $0x8c469ab843b89562 // .quad -8338807543829064350 - QUAD $0x93956d7478ccec8f // .quad -7812217631593927537 - QUAD $0xaf58416654a6babb // .quad -5811823411358942533 - QUAD $0x387ac8d1970027b3 // .quad 4069786015789754291 - QUAD $0xdb2e51bfe9d0696a // .quad -2653093245771290262 - QUAD $0x06997b05fcc0319f // .quad 475546501309804959 - QUAD $0x88fcf317f22241e2 // .quad -8575712306248138270 - QUAD $0x441fece3bdf81f04 // .quad 4908902581746016004 - QUAD $0xab3c2fddeeaad25a // .quad -6107954364382784934 - QUAD $0xd527e81cad7626c4 // .quad -3087243809672255804 - QUAD $0xd60b3bd56a5586f1 // .quad -3023256937051093263 - QUAD $0x8a71e223d8d3b075 // .quad -8470740780517707659 - QUAD $0x85c7056562757456 // .quad -8807064613298015146 - QUAD $0xf6872d5667844e4a // .quad -682526969396179382 - QUAD $0xa738c6bebb12d16c // .quad -6397144748195131028 - QUAD $0xb428f8ac016561dc // .quad -5464844730172612132 - QUAD $0xd106f86e69d785c7 // .quad -3384744916816525881 - QUAD $0xe13336d701beba53 // .quad -2219369894288377261 - QUAD $0x82a45b450226b39c // .quad -9032994600651410532 - QUAD $0xecc0024661173474 // .quad -1387106183930235788 - QUAD $0xa34d721642b06084 // .quad -6679557232386875260 - QUAD $0x27f002d7f95d0191 // .quad 2877803288514593169 - QUAD $0xcc20ce9bd35c78a5 // .quad -3737760522056206171 - QUAD $0x31ec038df7b441f5 // .quad 3597254110643241461 - QUAD $0xff290242c83396ce // .quad -60514634142869810 - QUAD $0x7e67047175a15272 // .quad 9108253656731439730 - QUAD $0x9f79a169bd203e41 // .quad -6955350673980375487 - QUAD $0x0f0062c6e984d387 // .quad 1080972517029761927 - QUAD $0xc75809c42c684dd1 // .quad -4082502324048081455 - QUAD $0x52c07b78a3e60869 // .quad 5962901664714590313 - QUAD $0xf92e0c3537826145 // .quad -491441886632713915 - QUAD $0xa7709a56ccdf8a83 // .quad -6381430974388925821 - QUAD $0x9bbcc7a142b17ccb // .quad -7224680206786528053 - QUAD $0x88a66076400bb692 // .quad -8600080377420466542 - QUAD $0xc2abf989935ddbfe // .quad -4419164240055772162 - QUAD $0x6acff893d00ea436 // .quad 7696643601933968438 - QUAD $0xf356f7ebf83552fe // .quad -912269281642327298 - QUAD $0x0583f6b8c4124d44 // .quad 397432465562684740 - QUAD $0x98165af37b2153de // .quad -7487697328667536418 - QUAD $0xc3727a337a8b704b // .quad -4363290727450709941 - QUAD $0xbe1bf1b059e9a8d6 // .quad -4747935642407032618 - QUAD $0x744f18c0592e4c5d // .quad 8380944645968776285 - QUAD $0xeda2ee1c7064130c // .quad -1323233534581402868 - QUAD $0x1162def06f79df74 // .quad 1252808770606194548 - QUAD $0x9485d4d1c63e8be7 // .quad -7744549986754458649 - QUAD $0x8addcb5645ac2ba9 // .quad -8440366555225904215 - QUAD $0xb9a74a0637ce2ee1 // .quad -5069001465015685407 - QUAD $0x6d953e2bd7173693 // .quad 7896285879677171347 - QUAD $0xe8111c87c5c1ba99 // .quad -1724565812842218855 - QUAD $0xc8fa8db6ccdd0438 // .quad -3964700705685699528 - QUAD $0x910ab1d4db9914a0 // .quad -7995382660667468640 - QUAD $0x1d9c9892400a22a3 // .quad 2133748077373825699 - QUAD $0xb54d5e4a127f59c8 // .quad -5382542307406947896 - QUAD $0x2503beb6d00cab4c // .quad 2667185096717282124 - QUAD $0xe2a0b5dc971f303a // .quad -2116491865831296966 - QUAD $0x2e44ae64840fd61e // .quad 3333981370896602654 - QUAD $0x8da471a9de737e24 // .quad -8240336443785642460 - QUAD $0x5ceaecfed289e5d3 // .quad 6695424375237764563 - QUAD $0xb10d8e1456105dad // .quad -5688734536304665171 - QUAD $0x7425a83e872c5f48 // .quad 8369280469047205704 - QUAD $0xdd50f1996b947518 // .quad -2499232151953443560 - QUAD $0xd12f124e28f7771a // .quad -3373457468973156582 - QUAD $0x8a5296ffe33cc92f // .quad -8479549122611984081 - QUAD $0x82bd6b70d99aaa70 // .quad -9025939945749304720 - QUAD $0xace73cbfdc0bfb7b // .quad -5987750384837592197 - QUAD $0x636cc64d1001550c // .quad 7164319141522920716 - QUAD $0xd8210befd30efa5a // .quad -2873001962619602342 - QUAD $0x3c47f7e05401aa4f // .quad 4343712908476262991 - QUAD $0x8714a775e3e95c78 // .quad -8713155254278333320 - QUAD $0x65acfaec34810a72 // .quad 7326506586225052274 - QUAD $0xa8d9d1535ce3b396 // .quad -6279758049420528746 - QUAD $0x7f1839a741a14d0e // .quad 9158133232781315342 - QUAD $0xd31045a8341ca07c // .quad -3238011543348273028 - QUAD $0x1ede48111209a051 // .quad 2224294504121868369 - QUAD $0x83ea2b892091e44d // .quad -8941286242233752499 - QUAD $0x934aed0aab460433 // .quad -7833187971778608077 - QUAD $0xa4e4b66b68b65d60 // .quad -6564921784364802720 - QUAD $0xf81da84d56178540 // .quad -568112927868484288 - QUAD $0xce1de40642e3f4b9 // .quad -3594466212028615495 - QUAD $0x36251260ab9d668f // .quad 3901544858591782543 - QUAD $0x80d2ae83e9ce78f3 // .quad -9164070410158966541 - QUAD $0xc1d72b7c6b42601a // .quad -4479063491021217766 - QUAD $0xa1075a24e4421730 // .quad -6843401994271320272 - QUAD $0xb24cf65b8612f820 // .quad -5598829363776522208 - QUAD $0xc94930ae1d529cfc // .quad -3942566474411762436 - QUAD $0xdee033f26797b628 // .quad -2386850686293264856 - QUAD $0xfb9b7cd9a4a7443c // .quad -316522074587315140 - QUAD $0x169840ef017da3b2 // .quad 1628122660560806834 - QUAD $0x9d412e0806e88aa5 // .quad -7115355324258153819 - QUAD $0x8e1f289560ee864f // .quad -8205795374004271537 - QUAD $0xc491798a08a2ad4e // .quad -4282508136895304370 - QUAD $0xf1a6f2bab92a27e3 // .quad -1033872180650563613 - QUAD $0xf5b5d7ec8acb58a2 // .quad -741449152691742558 - QUAD $0xae10af696774b1dc // .quad -5904026244240592420 - QUAD $0x9991a6f3d6bf1765 // .quad -7380934748073420955 - QUAD $0xacca6da1e0a8ef2a // .quad -5995859411864064214 - QUAD $0xbff610b0cc6edd3f // .quad -4614482416664388289 - QUAD $0x17fd090a58d32af4 // .quad 1728547772024695540 - QUAD $0xeff394dcff8a948e // .quad -1156417002403097458 - QUAD $0xddfc4b4cef07f5b1 // .quad -2451001303396518479 - QUAD $0x95f83d0a1fb69cd9 // .quad -7640289654143017767 - QUAD $0x4abdaf101564f98f // .quad 5385653213018257807 - QUAD $0xbb764c4ca7a4440f // .quad -4938676049251384305 - QUAD $0x9d6d1ad41abe37f2 // .quad -7102991539009341454 - QUAD $0xea53df5fd18d5513 // .quad -1561659043136842477 - QUAD $0x84c86189216dc5ee // .quad -8878739423761676818 - QUAD $0x92746b9be2f8552c // .quad -7893565929601608404 - QUAD $0x32fd3cf5b4e49bb5 // .quad 3674159897003727797 - QUAD $0xb7118682dbb66a77 // .quad -5255271393574622601 - QUAD $0x3fbc8c33221dc2a2 // .quad 4592699871254659746 - QUAD $0xe4d5e82392a40515 // .quad -1957403223540890347 - QUAD $0x0fabaf3feaa5334b // .quad 1129188820640936779 - QUAD $0x8f05b1163ba6832d // .quad -8140906042354138323 - QUAD $0x29cb4d87f2a7400f // .quad 3011586022114279439 - QUAD $0xb2c71d5bca9023f8 // .quad -5564446534515285000 - QUAD $0x743e20e9ef511013 // .quad 8376168546070237203 - QUAD $0xdf78e4b2bd342cf6 // .quad -2343872149716718346 - QUAD $0x914da9246b255417 // .quad -7976533391121755113 - QUAD $0x8bab8eefb6409c1a // .quad -8382449121214030822 - QUAD $0x1ad089b6c2f7548f // .quad 1932195658189984911 - QUAD $0xae9672aba3d0c320 // .quad -5866375383090150624 - QUAD $0xa184ac2473b529b2 // .quad -6808127464117294670 - QUAD $0xda3c0f568cc4f3e8 // .quad -2721283210435300376 - QUAD $0xc9e5d72d90a2741f // .quad -3898473311719230433 - QUAD $0x8865899617fb1871 // .quad -8618331034163144591 - QUAD $0x7e2fa67c7a658893 // .quad 9092669226243950739 - QUAD $0xaa7eebfb9df9de8d // .quad -6161227774276542835 - QUAD $0xddbb901b98feeab8 // .quad -2469221522477225288 - QUAD $0xd51ea6fa85785631 // .quad -3089848699418290639 - QUAD $0x552a74227f3ea566 // .quad 6136845133758244198 - QUAD $0x8533285c936b35de // .quad -8848684464777513506 - QUAD $0xd53a88958f872760 // .quad -3082000819042179232 - QUAD $0xa67ff273b8460356 // .quad -6449169562544503978 - QUAD $0x8a892abaf368f138 // .quad -8464187042230111944 - QUAD $0xd01fef10a657842c // .quad -3449775934753242068 - QUAD $0x2d2b7569b0432d86 // .quad 3254824252494523782 - QUAD $0x8213f56a67f6b29b // .quad -9073638986861858149 - QUAD $0x9c3b29620e29fc74 // .quad -7189106879045698444 - QUAD $0xa298f2c501f45f42 // .quad -6730362715149934782 - QUAD $0x8349f3ba91b47b90 // .quad -8986383598807123056 - QUAD $0xcb3f2f7642717713 // .quad -3801267375510030573 - QUAD $0x241c70a936219a74 // .quad 2602078556773259892 - QUAD $0xfe0efb53d30dd4d7 // .quad -139898200960150313 - QUAD $0xed238cd383aa0111 // .quad -1359087822460813039 - QUAD $0x9ec95d1463e8a506 // .quad -7004965403241175802 - QUAD $0xf4363804324a40ab // .quad -849429889038008149 - QUAD $0xc67bb4597ce2ce48 // .quad -4144520735624081848 - QUAD $0xb143c6053edcd0d6 // .quad -5673473379724898090 - QUAD $0xf81aa16fdc1b81da // .quad -568964901102714406 - QUAD $0xdd94b7868e94050b // .quad -2480155706228734709 - QUAD $0x9b10a4e5e9913128 // .quad -7273132090830278360 - QUAD $0xca7cf2b4191c8327 // .quad -3855940325606653145 - QUAD $0xc1d4ce1f63f57d72 // .quad -4479729095110460046 - QUAD $0xfd1c2f611f63a3f1 // .quad -208239388580928527 - QUAD $0xf24a01a73cf2dccf // .quad -987975350460687153 - QUAD $0xbc633b39673c8ced // .quad -4871985254153548563 - QUAD $0x976e41088617ca01 // .quad -7535013621679011327 - QUAD $0xd5be0503e085d814 // .quad -3044990783845967852 - QUAD $0xbd49d14aa79dbc82 // .quad -4807081008671376254 - QUAD $0x4b2d8644d8a74e19 // .quad 5417133557047315993 - QUAD $0xec9c459d51852ba2 // .quad -1397165242411832414 - QUAD $0xddf8e7d60ed1219f // .quad -2451955090545630817 - QUAD $0x93e1ab8252f33b45 // .quad -7790757304148477115 - QUAD $0xcabb90e5c942b504 // .quad -3838314940804713212 - QUAD $0xb8da1662e7b00a17 // .quad -5126760611758208489 - QUAD $0x3d6a751f3b936244 // .quad 4425478360848884292 - QUAD $0xe7109bfba19c0c9d // .quad -1796764746270372707 - QUAD $0x0cc512670a783ad5 // .quad 920161932633717461 - QUAD $0x906a617d450187e2 // .quad -8040506994060064798 - QUAD $0x27fb2b80668b24c6 // .quad 2880944217109767366 - QUAD $0xb484f9dc9641e9da // .quad -5438947724147693094 - QUAD $0xb1f9f660802dedf7 // .quad -5622191765467566601 - QUAD $0xe1a63853bbd26451 // .quad -2186998636757228463 - QUAD $0x5e7873f8a0396974 // .quad 6807318348447705460 - QUAD $0x8d07e33455637eb2 // .quad -8284403175614349646 - QUAD $0xdb0b487b6423e1e9 // .quad -2662955059861265943 - QUAD $0xb049dc016abc5e5f // .quad -5743817951090549153 - QUAD $0x91ce1a9a3d2cda63 // .quad -7940379843253970333 - QUAD $0xdc5c5301c56b75f7 // .quad -2568086420435798537 - QUAD $0x7641a140cc7810fc // .quad 8521269269642088700 - QUAD $0x89b9b3e11b6329ba // .quad -8522583040413455942 - QUAD $0xa9e904c87fcb0a9e // .quad -6203421752542164322 - QUAD $0xac2820d9623bf429 // .quad -6041542782089432023 - QUAD $0x546345fa9fbdcd45 // .quad 6080780864604458309 - QUAD $0xd732290fbacaf133 // .quad -2940242459184402125 - QUAD $0xa97c177947ad4096 // .quad -6234081974526590826 - QUAD $0x867f59a9d4bed6c0 // .quad -8755180564631333184 - QUAD $0x49ed8eabcccc485e // .quad 5327070802775656542 - QUAD $0xa81f301449ee8c70 // .quad -6332289687361778576 - QUAD $0x5c68f256bfff5a75 // .quad 6658838503469570677 - QUAD $0xd226fc195c6a2f8c // .quad -3303676090774835316 - QUAD $0x73832eec6fff3112 // .quad 8323548129336963346 - QUAD $0x83585d8fd9c25db7 // .quad -8982326584375353929 - QUAD $0xc831fd53c5ff7eac // .quad -4021154456019173716 - QUAD $0xa42e74f3d032f525 // .quad -6616222212041804507 - QUAD $0xba3e7ca8b77f5e56 // .quad -5026443070023967146 - QUAD $0xcd3a1230c43fb26f // .quad -3658591746624867729 - QUAD $0x28ce1bd2e55f35ec // .quad 2940318199324816876 - QUAD $0x80444b5e7aa7cf85 // .quad -9204148869281624187 - QUAD $0x7980d163cf5b81b4 // .quad 8755227902219092404 - QUAD $0xa0555e361951c366 // .quad -6893500068174642330 - QUAD $0xd7e105bcc3326220 // .quad -2891023177508298208 - QUAD $0xc86ab5c39fa63440 // .quad -4005189066790915008 - QUAD $0x8dd9472bf3fefaa8 // .quad -8225464990312760664 - QUAD $0xfa856334878fc150 // .quad -394800315061255856 - QUAD $0xb14f98f6f0feb952 // .quad -5670145219463562926 - QUAD $0x9c935e00d4b9d8d2 // .quad -7164279224554366766 - QUAD $0x6ed1bf9a569f33d4 // .quad 7985374283903742932 - QUAD $0xc3b8358109e84f07 // .quad -4343663012265570553 - QUAD $0x0a862f80ec4700c9 // .quad 758345818024902857 - QUAD $0xf4a642e14c6262c8 // .quad -817892746904575288 - QUAD $0xcd27bb612758c0fb // .quad -3663753745896259333 - QUAD $0x98e7e9cccfbd7dbd // .quad -7428711994456441411 - QUAD $0x8038d51cb897789d // .quad -9207375118826243939 - QUAD $0xbf21e44003acdd2c // .quad -4674203974643163860 - QUAD $0xe0470a63e6bd56c4 // .quad -2285846861678029116 - QUAD $0xeeea5d5004981478 // .quad -1231068949876566920 - QUAD $0x1858ccfce06cac75 // .quad 1754377441329851509 - QUAD $0x95527a5202df0ccb // .quad -7686947121313936181 - QUAD $0x0f37801e0c43ebc9 // .quad 1096485900831157193 - QUAD $0xbaa718e68396cffd // .quad -4996997883215032323 - QUAD $0xd30560258f54e6bb // .quad -3241078642388441413 - QUAD $0xe950df20247c83fd // .quad -1634561335591402499 - QUAD $0x47c6b82ef32a206a // .quad 5172023733869224042 - QUAD $0x91d28b7416cdd27e // .quad -7939129862385708418 - QUAD $0x4cdc331d57fa5442 // .quad 5538357842881958978 - QUAD $0xb6472e511c81471d // .quad -5312226309554747619 - QUAD $0xe0133fe4adf8e953 // .quad -2300424733252327085 - QUAD $0xe3d8f9e563a198e5 // .quad -2028596868516046619 - QUAD $0x58180fddd97723a7 // .quad 6347841120289366951 - QUAD $0x8e679c2f5e44ff8f // .quad -8185402070463610993 - QUAD $0x570f09eaa7ea7649 // .quad 6273243709394548297 - QUAD $0xb201833b35d63f73 // .quad -5620066569652125837 - QUAD $0x2cd2cc6551e513db // .quad 3229868618315797467 - QUAD $0xde81e40a034bcf4f // .quad -2413397193637769393 - QUAD $0xf8077f7ea65e58d2 // .quad -574350245532641070 - QUAD $0x8b112e86420f6191 // .quad -8425902273664687727 - QUAD $0xfb04afaf27faf783 // .quad -358968903457900669 - QUAD $0xadd57a27d29339f6 // .quad -5920691823653471754 - QUAD $0x79c5db9af1f9b564 // .quad 8774660907532399972 - QUAD $0xd94ad8b1c7380874 // .quad -2789178761139451788 - QUAD $0x18375281ae7822bd // .quad 1744954097560724157 - QUAD $0x87cec76f1c830548 // .quad -8660765753353239224 - QUAD $0x8f2293910d0b15b6 // .quad -8132775725879323210 - QUAD $0xa9c2794ae3a3c69a // .quad -6214271173264161126 - QUAD $0xb2eb3875504ddb23 // .quad -5554283638921766109 - QUAD $0xd433179d9c8cb841 // .quad -3156152948152813503 - QUAD $0x5fa60692a46151ec // .quad 6892203506629956076 - QUAD $0x849feec281d7f328 // .quad -8890124620236590296 - QUAD $0xdbc7c41ba6bcd334 // .quad -2609901835997359308 - QUAD $0xa5c7ea73224deff3 // .quad -6500969756868349965 - QUAD $0x12b9b522906c0801 // .quad 1349308723430688769 - QUAD $0xcf39e50feae16bef // .quad -3514526177658049553 - QUAD $0xd768226b34870a01 // .quad -2925050114139026943 - QUAD $0x81842f29f2cce375 // .quad -9114107888677362827 - QUAD $0xe6a1158300d46641 // .quad -1828156321336891839 - QUAD $0xa1e53af46f801c53 // .quad -6780948842419315629 - QUAD $0x60495ae3c1097fd1 // .quad 6938176635183661009 - QUAD $0xca5e89b18b602368 // .quad -3864500034596756632 - QUAD $0x385bb19cb14bdfc5 // .quad 4061034775552188357 - QUAD $0xfcf62c1dee382c42 // .quad -218939024818557886 - QUAD $0x46729e03dd9ed7b6 // .quad 5076293469440235446 - QUAD $0x9e19db92b4e31ba9 // .quad -7054365918152680535 - QUAD $0x6c07a2c26a8346d2 // .quad 7784369436827535058 - - // .p2align 4, 0x00 -_VecShiftShuffles: - QUAD $0x0706050403020100; QUAD $0x0f0e0d0c0b0a0908 // .ascii 16, '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' - QUAD $0x0807060504030201; QUAD $0xff0f0e0d0c0b0a09 // .ascii 16, '\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff' - QUAD $0x0908070605040302; QUAD $0xffff0f0e0d0c0b0a // .ascii 16, '\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff' - QUAD $0x0a09080706050403; QUAD $0xffffff0f0e0d0c0b // .ascii 16, '\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff' - QUAD $0x0b0a090807060504; QUAD $0xffffffff0f0e0d0c // .ascii 16, '\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff' - QUAD $0x0c0b0a0908070605; QUAD $0xffffffffff0f0e0d // .ascii 16, '\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff' - QUAD $0x0d0c0b0a09080706; QUAD $0xffffffffffff0f0e // .ascii 16, '\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff' - QUAD $0x0e0d0c0b0a090807; QUAD $0xffffffffffffff0f // .ascii 16, '\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff' - QUAD $0x0f0e0d0c0b0a0908; QUAD $0xffffffffffffffff // .ascii 16, '\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff' - - // .p2align 4, 0x00 -__SingleQuoteTab: - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000030303030755c // .asciz 8, '\\u0000\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000031303030755c // .asciz 8, '\\u0001\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000032303030755c // .asciz 8, '\\u0002\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000033303030755c // .asciz 8, '\\u0003\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000034303030755c // .asciz 8, '\\u0004\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000035303030755c // .asciz 8, '\\u0005\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000036303030755c // .asciz 8, '\\u0006\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000037303030755c // .asciz 8, '\\u0007\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000038303030755c // .asciz 8, '\\u0008\x00\x00' - QUAD $0x0000000000000002 // .quad 2 - QUAD $0x000000000000745c // .asciz 8, '\\t\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000002 // .quad 2 - QUAD $0x0000000000006e5c // .asciz 8, '\\n\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000062303030755c // .asciz 8, '\\u000b\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000063303030755c // .asciz 8, '\\u000c\x00\x00' - QUAD $0x0000000000000002 // .quad 2 - QUAD $0x000000000000725c // .asciz 8, '\\r\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000065303030755c // .asciz 8, '\\u000e\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000066303030755c // .asciz 8, '\\u000f\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000030313030755c // .asciz 8, '\\u0010\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000031313030755c // .asciz 8, '\\u0011\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000032313030755c // .asciz 8, '\\u0012\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000033313030755c // .asciz 8, '\\u0013\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000034313030755c // .asciz 8, '\\u0014\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000035313030755c // .asciz 8, '\\u0015\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000036313030755c // .asciz 8, '\\u0016\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000037313030755c // .asciz 8, '\\u0017\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000038313030755c // .asciz 8, '\\u0018\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000039313030755c // .asciz 8, '\\u0019\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000061313030755c // .asciz 8, '\\u001a\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000062313030755c // .asciz 8, '\\u001b\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000063313030755c // .asciz 8, '\\u001c\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000064313030755c // .asciz 8, '\\u001d\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000065313030755c // .asciz 8, '\\u001e\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000066313030755c // .asciz 8, '\\u001f\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000002 // .quad 2 - QUAD $0x000000000000225c // .asciz 8, '\\"\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000002 // .quad 2 - QUAD $0x0000000000005c5c // .asciz 8, '\\\\\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - - // .p2align 4, 0x00 -__DoubleQuoteTab: - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0030303030755c5c // .asciz 8, '\\\\u0000\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0031303030755c5c // .asciz 8, '\\\\u0001\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0032303030755c5c // .asciz 8, '\\\\u0002\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0033303030755c5c // .asciz 8, '\\\\u0003\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0034303030755c5c // .asciz 8, '\\\\u0004\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0035303030755c5c // .asciz 8, '\\\\u0005\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0036303030755c5c // .asciz 8, '\\\\u0006\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0037303030755c5c // .asciz 8, '\\\\u0007\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0038303030755c5c // .asciz 8, '\\\\u0008\x00' - QUAD $0x0000000000000003 // .quad 3 - QUAD $0x0000000000745c5c // .asciz 8, '\\\\t\x00\x00\x00\x00\x00' - QUAD $0x0000000000000003 // .quad 3 - QUAD $0x00000000006e5c5c // .asciz 8, '\\\\n\x00\x00\x00\x00\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0062303030755c5c // .asciz 8, '\\\\u000b\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0063303030755c5c // .asciz 8, '\\\\u000c\x00' - QUAD $0x0000000000000003 // .quad 3 - QUAD $0x0000000000725c5c // .asciz 8, '\\\\r\x00\x00\x00\x00\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0065303030755c5c // .asciz 8, '\\\\u000e\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0066303030755c5c // .asciz 8, '\\\\u000f\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0030313030755c5c // .asciz 8, '\\\\u0010\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0031313030755c5c // .asciz 8, '\\\\u0011\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0032313030755c5c // .asciz 8, '\\\\u0012\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0033313030755c5c // .asciz 8, '\\\\u0013\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0034313030755c5c // .asciz 8, '\\\\u0014\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0035313030755c5c // .asciz 8, '\\\\u0015\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0036313030755c5c // .asciz 8, '\\\\u0016\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0037313030755c5c // .asciz 8, '\\\\u0017\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0038313030755c5c // .asciz 8, '\\\\u0018\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0039313030755c5c // .asciz 8, '\\\\u0019\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0061313030755c5c // .asciz 8, '\\\\u001a\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0062313030755c5c // .asciz 8, '\\\\u001b\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0063313030755c5c // .asciz 8, '\\\\u001c\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0064313030755c5c // .asciz 8, '\\\\u001d\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0065313030755c5c // .asciz 8, '\\\\u001e\x00' - QUAD $0x0000000000000007 // .quad 7 - QUAD $0x0066313030755c5c // .asciz 8, '\\\\u001f\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000004 // .quad 4 - QUAD $0x00000000225c5c5c // .asciz 8, '\\\\\\"\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000004 // .quad 4 - QUAD $0x000000005c5c5c5c // .asciz 8, '\\\\\\\\\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - - // .p2align 4, 0x00 -__EscTab: - QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .ascii 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' - QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .ascii 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' - QUAD $0x0000000000010000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; LONG $0x00000000; BYTE $0x01 // .ascii 13, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - WORD $0x0000; BYTE $0x00 // .space 3, '\x00\x00\x00' - - // .p2align 4, 0x00 -__UnquoteTab: - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000220000; QUAD $0x2f00000000000000 // .ascii 16, '\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000005c00000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00' - QUAD $0x000c000000080000; QUAD $0x000a000000000000 // .ascii 16, '\x00\x00\x08\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\n\x00' - LONG $0x000d0000; WORD $0xff09 // .ascii 6, '\x00\x00\r\x00\t\xff' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; WORD $0x0000 // .space 10, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - - // .p2align 4, 0x00 -__HtmlQuoteTab: - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000036323030755c // .asciz 8, '\\u0026\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000063333030755c // .asciz 8, '\\u003c\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000065333030755c // .asciz 8, '\\u003e\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000038323032755c // .asciz 8, '\\u2028\x00\x00' - QUAD $0x0000000000000006 // .quad 6 - QUAD $0x000039323032755c // .asciz 8, '\\u2029\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - - // .p2align 4, 0x00 -_LSHIFT_TAB: - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000 // .space 8, '\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000001 // .long 1 - QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000001 // .long 1 - QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000001 // .long 1 - QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000002 // .long 2 - QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000002 // .long 2 - QUAD $0x0000000035323133; QUAD $0x0000000000000000 // .asciz 16, '3125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000002 // .long 2 - QUAD $0x0000003532363531; QUAD $0x0000000000000000 // .asciz 16, '15625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000003 // .long 3 - QUAD $0x0000003532313837; QUAD $0x0000000000000000 // .asciz 16, '78125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000003 // .long 3 - QUAD $0x0000353236303933; QUAD $0x0000000000000000 // .asciz 16, '390625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000003 // .long 3 - QUAD $0x0035323133353931; QUAD $0x0000000000000000 // .asciz 16, '1953125\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000004 // .long 4 - QUAD $0x0035323635363739; QUAD $0x0000000000000000 // .asciz 16, '9765625\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000004 // .long 4 - QUAD $0x3532313832383834; QUAD $0x0000000000000000 // .asciz 16, '48828125\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000004 // .long 4 - QUAD $0x3236303431343432; QUAD $0x0000000000000035 // .asciz 16, '244140625\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000004 // .long 4 - QUAD $0x3133303730323231; QUAD $0x0000000000003532 // .asciz 16, '1220703125\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000005 // .long 5 - QUAD $0x3635313533303136; QUAD $0x0000000000003532 // .asciz 16, '6103515625\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000005 // .long 5 - QUAD $0x3837353731353033; QUAD $0x0000000000353231 // .asciz 16, '30517578125\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000005 // .long 5 - QUAD $0x3938373835323531; QUAD $0x0000000035323630 // .asciz 16, '152587890625\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000006 // .long 6 - QUAD $0x3534393339323637; QUAD $0x0000000035323133 // .asciz 16, '762939453125\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000006 // .long 6 - QUAD $0x3237393634313833; QUAD $0x0000003532363536 // .asciz 16, '3814697265625\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000006 // .long 6 - QUAD $0x3638343337303931; QUAD $0x0000353231383233 // .asciz 16, '19073486328125\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000007 // .long 7 - QUAD $0x3133343736333539; QUAD $0x0000353236303436 // .asciz 16, '95367431640625\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000007 // .long 7 - QUAD $0x3531373338363734; QUAD $0x0035323133303238 // .asciz 16, '476837158203125\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000007 // .long 7 - QUAD $0x3735383134383332; QUAD $0x3532363531303139 // .asciz 16, '2384185791015625' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000007 // .long 7 - QUAD $0x3832393032393131; QUAD $0x3231383730353539 // .asciz 16, '1192092895507812' - QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000008 // .long 8 - QUAD $0x3434363430363935; QUAD $0x3236303933353737 // .asciz 16, '5960464477539062' - QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000008 // .long 8 - QUAD $0x3232333230383932; QUAD $0x3133353936373833 // .asciz 16, '2980232238769531' - QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000008 // .long 8 - QUAD $0x3136313130393431; QUAD $0x3536373438333931 // .asciz 16, '1490116119384765' - QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000009 // .long 9 - QUAD $0x3530383530353437; QUAD $0x3832383332393639 // .asciz 16, '7450580596923828' - QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000009 // .long 9 - QUAD $0x3230393235323733; QUAD $0x3431393136343839 // .asciz 16, '3725290298461914' - QUAD $0x0000000035323630; QUAD $0x0000000000000000 // .asciz 16, '0625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000009 // .long 9 - QUAD $0x3135343632363831; QUAD $0x3735393033323934 // .asciz 16, '1862645149230957' - QUAD $0x0000003532313330; QUAD $0x0000000000000000 // .asciz 16, '03125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000a // .long 10 - QUAD $0x3735323233313339; QUAD $0x3538373435313634 // .asciz 16, '9313225746154785' - QUAD $0x0000003532363531; QUAD $0x0000000000000000 // .asciz 16, '15625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000a // .long 10 - QUAD $0x3832313636353634; QUAD $0x3239333737303337 // .asciz 16, '4656612873077392' - QUAD $0x0000353231383735; QUAD $0x0000000000000000 // .asciz 16, '578125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000a // .long 10 - QUAD $0x3436303338323332; QUAD $0x3639363833353633 // .asciz 16, '2328306436538696' - QUAD $0x0035323630393832; QUAD $0x0000000000000000 // .asciz 16, '2890625\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000a // .long 10 - QUAD $0x3233353134363131; QUAD $0x3834333936323831 // .asciz 16, '1164153218269348' - QUAD $0x3532313335343431; QUAD $0x0000000000000000 // .asciz 16, '14453125\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000b // .long 11 - QUAD $0x3036363730323835; QUAD $0x3034373634333139 // .asciz 16, '5820766091346740' - QUAD $0x3532363536323237; QUAD $0x0000000000000000 // .asciz 16, '72265625\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000b // .long 11 - QUAD $0x3033383330313932; QUAD $0x3037333337363534 // .asciz 16, '2910383045673370' - QUAD $0x3231383233313633; QUAD $0x0000000000000035 // .asciz 16, '361328125\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000b // .long 11 - QUAD $0x3531393135353431; QUAD $0x3538363633383232 // .asciz 16, '1455191522836685' - QUAD $0x3630343636303831; QUAD $0x0000000000003532 // .asciz 16, '1806640625\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000c // .long 12 - QUAD $0x3637353935373237; QUAD $0x3532343338313431 // .asciz 16, '7275957614183425' - QUAD $0x3133303233333039; QUAD $0x0000000000003532 // .asciz 16, '9033203125\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000c // .long 12 - QUAD $0x3838373937333633; QUAD $0x3231373139303730 // .asciz 16, '3637978807091712' - QUAD $0x3531303636313539; QUAD $0x0000000000353236 // .asciz 16, '95166015625\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000c // .long 12 - QUAD $0x3439383938313831; QUAD $0x3635383534353330 // .asciz 16, '1818989403545856' - QUAD $0x3730303338353734; QUAD $0x0000000035323138 // .asciz 16, '475830078125\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000d // .long 13 - QUAD $0x3037343934393039; QUAD $0x3238323932373731 // .asciz 16, '9094947017729282' - QUAD $0x3933303531393733; QUAD $0x0000000035323630 // .asciz 16, '379150390625\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000d // .long 13 - QUAD $0x3533373437343534; QUAD $0x3134363436383830 // .asciz 16, '4547473508864641' - QUAD $0x3931353735393831; QUAD $0x0000003532313335 // .asciz 16, '1895751953125\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000d // .long 13 - QUAD $0x3736333733373232; QUAD $0x3032333233343435 // .asciz 16, '2273736754432320' - QUAD $0x3935373837343935; QUAD $0x0000353236353637 // .asciz 16, '59478759765625\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000d // .long 13 - QUAD $0x3338363836333131; QUAD $0x3036313631323737 // .asciz 16, '1136868377216160' - QUAD $0x3937333933373932; QUAD $0x0035323138323838 // .asciz 16, '297393798828125\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000e // .long 14 - QUAD $0x3831343334383635; QUAD $0x3130383038303638 // .asciz 16, '5684341886080801' - QUAD $0x3939383639363834; QUAD $0x0035323630343134 // .asciz 16, '486968994140625\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000e // .long 14 - QUAD $0x3930373132343832; QUAD $0x3030343034303334 // .asciz 16, '2842170943040400' - QUAD $0x3934343834333437; QUAD $0x3532313330373037 // .asciz 16, '7434844970703125' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000e // .long 14 - QUAD $0x3435383031323431; QUAD $0x3030323032353137 // .asciz 16, '1421085471520200' - QUAD $0x3432323437313733; QUAD $0x3236353135333538 // .asciz 16, '3717422485351562' - QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000f // .long 15 - QUAD $0x3337323435303137; QUAD $0x3130303130363735 // .asciz 16, '7105427357601001' - QUAD $0x3432313137383538; QUAD $0x3231383735373632 // .asciz 16, '8587112426757812' - QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000f // .long 15 - QUAD $0x3633313732353533; QUAD $0x3030353030383837 // .asciz 16, '3552713678800500' - QUAD $0x3236353533393239; QUAD $0x3630393837333331 // .asciz 16, '9293556213378906' - QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x0000000f // .long 15 - QUAD $0x3836353336373731; QUAD $0x3035323030343933 // .asciz 16, '1776356839400250' - QUAD $0x3138373736343634; QUAD $0x3335343938363630 // .asciz 16, '4646778106689453' - QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000010 // .long 16 - QUAD $0x3134383731383838; QUAD $0x3235323130303739 // .asciz 16, '8881784197001252' - QUAD $0x3530393833333233; QUAD $0x3536323734343333 // .asciz 16, '3233890533447265' - QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000010 // .long 16 - QUAD $0x3032393830343434; QUAD $0x3632363030353839 // .asciz 16, '4440892098500626' - QUAD $0x3235343936313631; QUAD $0x3233363332373636 // .asciz 16, '1616945266723632' - QUAD $0x0000000035323138; QUAD $0x0000000000000000 // .asciz 16, '8125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000010 // .long 16 - QUAD $0x3036343430323232; QUAD $0x3331333035323934 // .asciz 16, '2220446049250313' - QUAD $0x3632373438303830; QUAD $0x3631383136333333 // .asciz 16, '0808472633361816' - QUAD $0x0000003532363034; QUAD $0x0000000000000000 // .asciz 16, '40625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000010 // .long 16 - QUAD $0x3033323230313131; QUAD $0x3635313532363432 // .asciz 16, '1110223024625156' - QUAD $0x3336333234303435; QUAD $0x3830393038363631 // .asciz 16, '5404236316680908' - QUAD $0x0000353231333032; QUAD $0x0000000000000000 // .asciz 16, '203125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000011 // .long 17 - QUAD $0x3135313131353535; QUAD $0x3238373532313332 // .asciz 16, '5551115123125782' - QUAD $0x3531383131323037; QUAD $0x3134353430343338 // .asciz 16, '7021181583404541' - QUAD $0x0000353236353130; QUAD $0x0000000000000000 // .asciz 16, '015625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000011 // .long 17 - QUAD $0x3537353535373732; QUAD $0x3139383236353136 // .asciz 16, '2775557561562891' - QUAD $0x3730393530313533; QUAD $0x3037323230373139 // .asciz 16, '3510590791702270' - QUAD $0x0035323138373035; QUAD $0x0000000000000000 // .asciz 16, '5078125\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000011 // .long 17 - QUAD $0x3738373737383331; QUAD $0x3534343138373038 // .asciz 16, '1387778780781445' - QUAD $0x3335393235353736; QUAD $0x3533313135383539 // .asciz 16, '6755295395851135' - QUAD $0x3532363039333532; QUAD $0x0000000000000000 // .asciz 16, '25390625\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000012 // .long 18 - QUAD $0x3933393838333936; QUAD $0x3832323730393330 // .asciz 16, '6938893903907228' - QUAD $0x3936373436373733; QUAD $0x3637363535323937 // .asciz 16, '3776476979255676' - QUAD $0x3532313335393632; QUAD $0x0000000000000000 // .asciz 16, '26953125\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000012 // .long 18 - QUAD $0x3936343439363433; QUAD $0x3431363335393135 // .asciz 16, '3469446951953614' - QUAD $0x3438333238383831; QUAD $0x3833383732363938 // .asciz 16, '1888238489627838' - QUAD $0x3236353637343331; QUAD $0x0000000000000035 // .asciz 16, '134765625\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000012 // .long 18 - QUAD $0x3433323734333731; QUAD $0x3730383637393537 // .asciz 16, '1734723475976807' - QUAD $0x3239313134343930; QUAD $0x3931393331383434 // .asciz 16, '0944119244813919' - QUAD $0x3138323833373630; QUAD $0x0000000000003532 // .asciz 16, '0673828125\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - LONG $0x00000013 // .long 19 - QUAD $0x3337313633373638; QUAD $0x3533303438383937 // .asciz 16, '8673617379884035' - QUAD $0x3236393530323734; QUAD $0x3539353936303432 // .asciz 16, '4720596224069595' - QUAD $0x3630343139363333; QUAD $0x0000000000003532 // .asciz 16, '3369140625\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' - QUAD $0x0000000000000000 // .p2align 4, 0x00 - -_P10_TAB: - QUAD $0x3ff0000000000000 // .quad 0x3ff0000000000000 - QUAD $0x4024000000000000 // .quad 0x4024000000000000 - QUAD $0x4059000000000000 // .quad 0x4059000000000000 - QUAD $0x408f400000000000 // .quad 0x408f400000000000 - QUAD $0x40c3880000000000 // .quad 0x40c3880000000000 - QUAD $0x40f86a0000000000 // .quad 0x40f86a0000000000 - QUAD $0x412e848000000000 // .quad 0x412e848000000000 - QUAD $0x416312d000000000 // .quad 0x416312d000000000 - QUAD $0x4197d78400000000 // .quad 0x4197d78400000000 - QUAD $0x41cdcd6500000000 // .quad 0x41cdcd6500000000 - QUAD $0x4202a05f20000000 // .quad 0x4202a05f20000000 - QUAD $0x42374876e8000000 // .quad 0x42374876e8000000 - QUAD $0x426d1a94a2000000 // .quad 0x426d1a94a2000000 - QUAD $0x42a2309ce5400000 // .quad 0x42a2309ce5400000 - QUAD $0x42d6bcc41e900000 // .quad 0x42d6bcc41e900000 - QUAD $0x430c6bf526340000 // .quad 0x430c6bf526340000 - QUAD $0x4341c37937e08000 // .quad 0x4341c37937e08000 - QUAD $0x4376345785d8a000 // .quad 0x4376345785d8a000 - QUAD $0x43abc16d674ec800 // .quad 0x43abc16d674ec800 - QUAD $0x43e158e460913d00 // .quad 0x43e158e460913d00 - QUAD $0x4415af1d78b58c40 // .quad 0x4415af1d78b58c40 - QUAD $0x444b1ae4d6e2ef50 // .quad 0x444b1ae4d6e2ef50 - QUAD $0x4480f0cf064dd592 // .quad 0x4480f0cf064dd592 - QUAD $0x0000000000000000 // .p2align 4, 0x00 - -_LB_2202da27: // _pow10_ceil_sig_f32.g - QUAD $0x81ceb32c4b43fcf5 // .quad -9093133594791772939 - QUAD $0xa2425ff75e14fc32 // .quad -6754730975062328270 - QUAD $0xcad2f7f5359a3b3f // .quad -3831727700400522433 - QUAD $0xfd87b5f28300ca0e // .quad -177973607073265138 - QUAD $0x9e74d1b791e07e49 // .quad -7028762532061872567 - QUAD $0xc612062576589ddb // .quad -4174267146649952805 - QUAD $0xf79687aed3eec552 // .quad -606147914885053102 - QUAD $0x9abe14cd44753b53 // .quad -7296371474444240045 - QUAD $0xc16d9a0095928a28 // .quad -4508778324627912152 - QUAD $0xf1c90080baf72cb2 // .quad -1024286887357502286 - QUAD $0x971da05074da7bef // .quad -7557708332239520785 - QUAD $0xbce5086492111aeb // .quad -4835449396872013077 - QUAD $0xec1e4a7db69561a6 // .quad -1432625727662628442 - QUAD $0x9392ee8e921d5d08 // .quad -7812920107430224632 - QUAD $0xb877aa3236a4b44a // .quad -5154464115860392886 - QUAD $0xe69594bec44de15c // .quad -1831394126398103204 - QUAD $0x901d7cf73ab0acda // .quad -8062150356639896358 - QUAD $0xb424dc35095cd810 // .quad -5466001927372482544 - QUAD $0xe12e13424bb40e14 // .quad -2220816390788215276 - QUAD $0x8cbccc096f5088cc // .quad -8305539271883716404 - QUAD $0xafebff0bcb24aaff // .quad -5770238071427257601 - QUAD $0xdbe6fecebdedd5bf // .quad -2601111570856684097 - QUAD $0x89705f4136b4a598 // .quad -8543223759426509416 - QUAD $0xabcc77118461cefd // .quad -6067343680855748867 - QUAD $0xd6bf94d5e57a42bd // .quad -2972493582642298179 - QUAD $0x8637bd05af6c69b6 // .quad -8775337516792518218 - QUAD $0xa7c5ac471b478424 // .quad -6357485877563259868 - QUAD $0xd1b71758e219652c // .quad -3335171328526686932 - QUAD $0x83126e978d4fdf3c // .quad -9002011107970261188 - QUAD $0xa3d70a3d70a3d70b // .quad -6640827866535438581 - QUAD $0xcccccccccccccccd // .quad -3689348814741910323 - QUAD $0x8000000000000000 // .quad -9223372036854775808 - QUAD $0xa000000000000000 // .quad -6917529027641081856 - QUAD $0xc800000000000000 // .quad -4035225266123964416 - QUAD $0xfa00000000000000 // .quad -432345564227567616 - QUAD $0x9c40000000000000 // .quad -7187745005283311616 - QUAD $0xc350000000000000 // .quad -4372995238176751616 - QUAD $0xf424000000000000 // .quad -854558029293551616 - QUAD $0x9896800000000000 // .quad -7451627795949551616 - QUAD $0xbebc200000000000 // .quad -4702848726509551616 - QUAD $0xee6b280000000000 // .quad -1266874889709551616 - QUAD $0x9502f90000000000 // .quad -7709325833709551616 - QUAD $0xba43b74000000000 // .quad -5024971273709551616 - QUAD $0xe8d4a51000000000 // .quad -1669528073709551616 - QUAD $0x9184e72a00000000 // .quad -7960984073709551616 - QUAD $0xb5e620f480000000 // .quad -5339544073709551616 - QUAD $0xe35fa931a0000000 // .quad -2062744073709551616 - QUAD $0x8e1bc9bf04000000 // .quad -8206744073709551616 - QUAD $0xb1a2bc2ec5000000 // .quad -5646744073709551616 - QUAD $0xde0b6b3a76400000 // .quad -2446744073709551616 - QUAD $0x8ac7230489e80000 // .quad -8446744073709551616 - QUAD $0xad78ebc5ac620000 // .quad -5946744073709551616 - QUAD $0xd8d726b7177a8000 // .quad -2821744073709551616 - QUAD $0x878678326eac9000 // .quad -8681119073709551616 - QUAD $0xa968163f0a57b400 // .quad -6239712823709551616 - QUAD $0xd3c21bcecceda100 // .quad -3187955011209551616 - QUAD $0x84595161401484a0 // .quad -8910000909647051616 - QUAD $0xa56fa5b99019a5c8 // .quad -6525815118631426616 - QUAD $0xcecb8f27f4200f3a // .quad -3545582879861895366 - QUAD $0x813f3978f8940985 // .quad -9133518327554766459 - QUAD $0xa18f07d736b90be6 // .quad -6805211891016070170 - QUAD $0xc9f2c9cd04674edf // .quad -3894828845342699809 - QUAD $0xfc6f7c4045812297 // .quad -256850038250986857 - QUAD $0x9dc5ada82b70b59e // .quad -7078060301547948642 - QUAD $0xc5371912364ce306 // .quad -4235889358507547898 - QUAD $0xf684df56c3e01bc7 // .quad -683175679707046969 - QUAD $0x9a130b963a6c115d // .quad -7344513827457986211 - QUAD $0xc097ce7bc90715b4 // .quad -4568956265895094860 - QUAD $0xf0bdc21abb48db21 // .quad -1099509313941480671 - QUAD $0x96769950b50d88f5 // .quad -7604722348854507275 - QUAD $0xbc143fa4e250eb32 // .quad -4894216917640746190 - QUAD $0xeb194f8e1ae525fe // .quad -1506085128623544834 - QUAD $0x92efd1b8d0cf37bf // .quad -7858832233030797377 - QUAD $0xb7abc627050305ae // .quad -5211854272861108818 - QUAD $0xe596b7b0c643c71a // .quad -1903131822648998118 - QUAD $0x8f7e32ce7bea5c70 // .quad -8106986416796705680 - QUAD $0xb35dbf821ae4f38c // .quad -5522047002568494196 - -TEXT ·__f32toa(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -48(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_f32toa: - MOVQ out+0(FP), DI - MOVSD val+8(FP), X0 - CALL ·__native_entry__+33888(SB) // _f32toa - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__f64toa(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -80(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_f64toa: - MOVQ out+0(FP), DI - MOVSD val+8(FP), X0 - CALL ·__native_entry__+288(SB) // _f64toa - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__get_by_path(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -296(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_get_by_path: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ path+16(FP), DX - MOVQ m+24(FP), CX - CALL ·__native_entry__+28336(SB) // _get_by_path - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__html_escape(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -72(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_html_escape: - MOVQ sp+0(FP), DI - MOVQ nb+8(FP), SI - MOVQ dp+16(FP), DX - MOVQ dn+24(FP), CX - CALL ·__native_entry__+10496(SB) // _html_escape - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__i64toa(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -16(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_i64toa: - MOVQ out+0(FP), DI - MOVQ val+8(FP), SI - CALL ·__native_entry__+3584(SB) // _i64toa - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__lspace(SB), NOSPLIT | NOFRAME, $0 - 32 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -8(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_lspace: - MOVQ sp+0(FP), DI - MOVQ nb+8(FP), SI - MOVQ off+16(FP), DX - CALL ·__native_entry__+64(SB) // _lspace - MOVQ AX, ret+24(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__quote(SB), NOSPLIT | NOFRAME, $0 - 48 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -56(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_quote: - MOVQ sp+0(FP), DI - MOVQ nb+8(FP), SI - MOVQ dp+16(FP), DX - MOVQ dn+24(FP), CX - MOVQ flags+32(FP), R8 - CALL ·__native_entry__+5072(SB) // _quote - MOVQ AX, ret+40(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_array(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_array: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - MOVQ flags+24(FP), CX - CALL ·__native_entry__+20688(SB) // _skip_array - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_number(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -72(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_number: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - CALL ·__native_entry__+24912(SB) // _skip_number - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_object(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_object: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - MOVQ flags+24(FP), CX - CALL ·__native_entry__+22736(SB) // _skip_object - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_one(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_one: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - MOVQ flags+24(FP), CX - CALL ·__native_entry__+25072(SB) // _skip_one - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_one_fast(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -208(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_one_fast: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - CALL ·__native_entry__+25488(SB) // _skip_one_fast - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__u64toa(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -8(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_u64toa: - MOVQ out+0(FP), DI - MOVQ val+8(FP), SI - CALL ·__native_entry__+3696(SB) // _u64toa - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__unquote(SB), NOSPLIT | NOFRAME, $0 - 48 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -72(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_unquote: - MOVQ sp+0(FP), DI - MOVQ nb+8(FP), SI - MOVQ dp+16(FP), DX - MOVQ ep+24(FP), CX - MOVQ flags+32(FP), R8 - CALL ·__native_entry__+7888(SB) // _unquote - MOVQ AX, ret+40(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__validate_one(SB), NOSPLIT | NOFRAME, $0 - 32 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_validate_one: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - CALL ·__native_entry__+25136(SB) // _validate_one - MOVQ AX, ret+24(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__validate_utf8(SB), NOSPLIT | NOFRAME, $0 - 32 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -48(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_validate_utf8: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - CALL ·__native_entry__+30320(SB) // _validate_utf8 - MOVQ AX, ret+24(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__validate_utf8_fast(SB), NOSPLIT | NOFRAME, $0 - 16 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -176(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_validate_utf8_fast: - MOVQ s+0(FP), DI - CALL ·__native_entry__+31280(SB) // _validate_utf8_fast - MOVQ AX, ret+8(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__value(SB), NOSPLIT | NOFRAME, $0 - 48 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -328(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_value: - MOVQ s+0(FP), DI - MOVQ n+8(FP), SI - MOVQ p+16(FP), DX - MOVQ v+24(FP), CX - MOVQ flags+32(FP), R8 - CALL ·__native_entry__+15024(SB) // _value - MOVQ AX, ret+40(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__vnumber(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -240(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_vnumber: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ v+16(FP), DX - LEAQ ·__native_entry__+18352(SB), AX // _vnumber - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__vsigned(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -16(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_vsigned: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ v+16(FP), DX - LEAQ ·__native_entry__+19968(SB), AX // _vsigned - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__vstring(SB), NOSPLIT | NOFRAME, $0 - 32 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -112(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_vstring: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ v+16(FP), DX - MOVQ flags+24(FP), CX - LEAQ ·__native_entry__+17024(SB), AX // _vstring - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__vunsigned(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -16(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_vunsigned: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ v+16(FP), DX - LEAQ ·__native_entry__+20336(SB), AX // _vunsigned - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/native_export_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/native_export_amd64.go deleted file mode 100644 index 8adf5e91fa..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/native_export_amd64.go +++ /dev/null @@ -1,49 +0,0 @@ -// Code generated by Makefile, DO NOT EDIT. - -/* - * Copyright 2021 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package avx2 - -var ( - S_f64toa = _subr__f64toa - S_f32toa = _subr__f32toa - S_i64toa = _subr__i64toa - S_u64toa = _subr__u64toa - S_lspace = _subr__lspace -) - -var ( - S_quote = _subr__quote - S_unquote = _subr__unquote -) - -var ( - S_value = _subr__value - S_vstring = _subr__vstring - S_vnumber = _subr__vnumber - S_vsigned = _subr__vsigned - S_vunsigned = _subr__vunsigned -) - -var ( - S_skip_one = _subr__skip_one - S_skip_one_fast = _subr__skip_one_fast - S_skip_array = _subr__skip_array - S_skip_object = _subr__skip_object - S_skip_number = _subr__skip_number - S_get_by_path = _subr__get_by_path -) diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/native_subr_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/native_subr_amd64.go index 10b3d60f56..5f85c5b615 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/native_subr_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/native_subr_amd64.go @@ -3,107 +3,608 @@ package avx2 -//go:nosplit -//go:noescape -//goland:noinspection ALL -func __native_entry__() uintptr +import ( + `github.com/bytedance/sonic/loader` +) -var ( - _subr__f32toa = __native_entry__() + 33888 - _subr__f64toa = __native_entry__() + 288 - _subr__get_by_path = __native_entry__() + 28336 - _subr__html_escape = __native_entry__() + 10496 - _subr__i64toa = __native_entry__() + 3584 - _subr__lspace = __native_entry__() + 64 - _subr__quote = __native_entry__() + 5072 - _subr__skip_array = __native_entry__() + 20688 - _subr__skip_number = __native_entry__() + 24912 - _subr__skip_object = __native_entry__() + 22736 - _subr__skip_one = __native_entry__() + 25072 - _subr__skip_one_fast = __native_entry__() + 25488 - _subr__u64toa = __native_entry__() + 3696 - _subr__unquote = __native_entry__() + 7888 - _subr__validate_one = __native_entry__() + 25136 - _subr__validate_utf8 = __native_entry__() + 30320 - _subr__validate_utf8_fast = __native_entry__() + 31280 - _subr__value = __native_entry__() + 15024 - _subr__vnumber = __native_entry__() + 18352 - _subr__vsigned = __native_entry__() + 19968 - _subr__vstring = __native_entry__() + 17024 - _subr__vunsigned = __native_entry__() + 20336 +const ( + _entry__f32toa = 34624 + _entry__f64toa = 320 + _entry__format_significand = 38736 + _entry__format_integer = 3168 + _entry__fsm_exec = 21072 + _entry__advance_ns = 16928 + _entry__advance_string = 17664 + _entry__advance_string_default = 40160 + _entry__do_skip_number = 23696 + _entry__get_by_path = 28864 + _entry__skip_one_fast = 25936 + _entry__html_escape = 10560 + _entry__i64toa = 3600 + _entry__u64toa = 3712 + _entry__lspace = 64 + _entry__quote = 5104 + _entry__skip_array = 21024 + _entry__skip_number = 25392 + _entry__skip_object = 23088 + _entry__skip_one = 25536 + _entry__unquote = 7888 + _entry__validate_one = 25584 + _entry__validate_utf8 = 31040 + _entry__validate_utf8_fast = 31984 + _entry__value = 15376 + _entry__vnumber = 18800 + _entry__atof_eisel_lemire64 = 12624 + _entry__atof_native = 14768 + _entry__decimal_to_f64 = 13056 + _entry__right_shift = 39696 + _entry__left_shift = 39200 + _entry__vsigned = 20352 + _entry__vstring = 17424 + _entry__vunsigned = 20672 ) const ( _stack__f32toa = 48 _stack__f64toa = 80 - _stack__get_by_path = 296 + _stack__format_significand = 24 + _stack__format_integer = 16 + _stack__fsm_exec = 144 + _stack__advance_ns = 8 + _stack__advance_string = 56 + _stack__advance_string_default = 48 + _stack__do_skip_number = 48 + _stack__get_by_path = 272 + _stack__skip_one_fast = 184 _stack__html_escape = 72 _stack__i64toa = 16 + _stack__u64toa = 8 _stack__lspace = 8 _stack__quote = 56 - _stack__skip_array = 128 - _stack__skip_number = 72 - _stack__skip_object = 128 - _stack__skip_one = 128 - _stack__skip_one_fast = 208 - _stack__u64toa = 8 + _stack__skip_array = 152 + _stack__skip_number = 88 + _stack__skip_object = 152 + _stack__skip_one = 152 _stack__unquote = 72 - _stack__validate_one = 128 + _stack__validate_one = 152 _stack__validate_utf8 = 48 _stack__validate_utf8_fast = 176 _stack__value = 328 _stack__vnumber = 240 + _stack__atof_eisel_lemire64 = 32 + _stack__atof_native = 136 + _stack__decimal_to_f64 = 80 + _stack__right_shift = 8 + _stack__left_shift = 24 _stack__vsigned = 16 _stack__vstring = 112 - _stack__vunsigned = 16 + _stack__vunsigned = 8 ) -var ( - _ = _subr__f32toa - _ = _subr__f64toa - _ = _subr__get_by_path - _ = _subr__html_escape - _ = _subr__i64toa - _ = _subr__lspace - _ = _subr__quote - _ = _subr__skip_array - _ = _subr__skip_number - _ = _subr__skip_object - _ = _subr__skip_one - _ = _subr__skip_one_fast - _ = _subr__u64toa - _ = _subr__unquote - _ = _subr__validate_one - _ = _subr__validate_utf8 - _ = _subr__validate_utf8_fast - _ = _subr__value - _ = _subr__vnumber - _ = _subr__vsigned - _ = _subr__vstring - _ = _subr__vunsigned +const ( + _size__f32toa = 3392 + _size__f64toa = 2848 + _size__format_significand = 464 + _size__format_integer = 432 + _size__fsm_exec = 1468 + _size__advance_ns = 496 + _size__advance_string = 1088 + _size__advance_string_default = 768 + _size__do_skip_number = 1360 + _size__get_by_path = 2176 + _size__skip_one_fast = 2428 + _size__html_escape = 2064 + _size__i64toa = 48 + _size__u64toa = 1248 + _size__lspace = 224 + _size__quote = 2736 + _size__skip_array = 48 + _size__skip_number = 144 + _size__skip_object = 48 + _size__skip_one = 48 + _size__unquote = 2480 + _size__validate_one = 48 + _size__validate_utf8 = 672 + _size__validate_utf8_fast = 2608 + _size__value = 1004 + _size__vnumber = 1552 + _size__atof_eisel_lemire64 = 368 + _size__atof_native = 608 + _size__decimal_to_f64 = 1712 + _size__right_shift = 400 + _size__left_shift = 496 + _size__vsigned = 320 + _size__vstring = 144 + _size__vunsigned = 336 ) -const ( - _ = _stack__f32toa - _ = _stack__f64toa - _ = _stack__get_by_path - _ = _stack__html_escape - _ = _stack__i64toa - _ = _stack__lspace - _ = _stack__quote - _ = _stack__skip_array - _ = _stack__skip_number - _ = _stack__skip_object - _ = _stack__skip_one - _ = _stack__skip_one_fast - _ = _stack__u64toa - _ = _stack__unquote - _ = _stack__validate_one - _ = _stack__validate_utf8 - _ = _stack__validate_utf8_fast - _ = _stack__value - _ = _stack__vnumber - _ = _stack__vsigned - _ = _stack__vstring - _ = _stack__vunsigned +var ( + _pcsp__f32toa = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {3350, 48}, + {3351, 40}, + {3353, 32}, + {3355, 24}, + {3357, 16}, + {3359, 8}, + {3363, 0}, + {3385, 48}, + } + _pcsp__f64toa = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {2788, 56}, + {2792, 48}, + {2793, 40}, + {2795, 32}, + {2797, 24}, + {2799, 16}, + {2801, 8}, + {2805, 0}, + {2843, 56}, + } + _pcsp__format_significand = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {452, 24}, + {453, 16}, + {455, 8}, + {457, 0}, + } + _pcsp__format_integer = [][2]uint32{ + {1, 0}, + {4, 8}, + {412, 16}, + {413, 8}, + {414, 0}, + {423, 16}, + {424, 8}, + {426, 0}, + } + _pcsp__fsm_exec = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {1157, 88}, + {1161, 48}, + {1162, 40}, + {1164, 32}, + {1166, 24}, + {1168, 16}, + {1170, 8}, + {1171, 0}, + {1468, 88}, + } + _pcsp__advance_ns = [][2]uint32{ + {1, 0}, + {453, 8}, + {457, 0}, + {481, 8}, + {486, 0}, + } + _pcsp__advance_string = [][2]uint32{ + {14, 0}, + {18, 8}, + {20, 16}, + {22, 24}, + {24, 32}, + {26, 40}, + {27, 48}, + {433, 56}, + {437, 48}, + {438, 40}, + {440, 32}, + {442, 24}, + {444, 16}, + {446, 8}, + {450, 0}, + {1078, 56}, + } + _pcsp__advance_string_default = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {332, 48}, + {333, 40}, + {335, 32}, + {337, 24}, + {339, 16}, + {341, 8}, + {345, 0}, + {757, 48}, + } + _pcsp__do_skip_number = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {1274, 48}, + {1275, 40}, + {1277, 32}, + {1279, 24}, + {1281, 16}, + {1283, 8}, + {1287, 0}, + {1360, 48}, + } + _pcsp__get_by_path = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {2049, 88}, + {2053, 48}, + {2054, 40}, + {2056, 32}, + {2058, 24}, + {2060, 16}, + {2062, 8}, + {2063, 0}, + {2170, 88}, + } + _pcsp__skip_one_fast = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {418, 176}, + {419, 168}, + {421, 160}, + {423, 152}, + {425, 144}, + {427, 136}, + {431, 128}, + {2428, 176}, + } + _pcsp__html_escape = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {2045, 72}, + {2049, 48}, + {2050, 40}, + {2052, 32}, + {2054, 24}, + {2056, 16}, + {2058, 8}, + {2063, 0}, + } + _pcsp__i64toa = [][2]uint32{ + {14, 0}, + {34, 8}, + {36, 0}, + } + _pcsp__u64toa = [][2]uint32{ + {1, 0}, + {161, 8}, + {162, 0}, + {457, 8}, + {458, 0}, + {758, 8}, + {759, 0}, + {1225, 8}, + {1227, 0}, + } + _pcsp__lspace = [][2]uint32{ + {1, 0}, + {184, 8}, + {188, 0}, + {204, 8}, + {208, 0}, + {215, 8}, + {220, 0}, + } + _pcsp__quote = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {2687, 56}, + {2691, 48}, + {2692, 40}, + {2694, 32}, + {2696, 24}, + {2698, 16}, + {2700, 8}, + {2704, 0}, + {2731, 56}, + } + _pcsp__skip_array = [][2]uint32{ + {1, 0}, + {28, 8}, + {34, 0}, + } + _pcsp__skip_number = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {100, 40}, + {101, 32}, + {103, 24}, + {105, 16}, + {107, 8}, + {108, 0}, + {139, 40}, + } + _pcsp__skip_object = [][2]uint32{ + {1, 0}, + {28, 8}, + {34, 0}, + } + _pcsp__skip_one = [][2]uint32{ + {1, 0}, + {30, 8}, + {36, 0}, + } + _pcsp__unquote = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {79, 72}, + {83, 48}, + {84, 40}, + {86, 32}, + {88, 24}, + {90, 16}, + {92, 8}, + {96, 0}, + {2464, 72}, + } + _pcsp__validate_one = [][2]uint32{ + {1, 0}, + {35, 8}, + {41, 0}, + } + _pcsp__validate_utf8 = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {11, 40}, + {623, 48}, + {627, 40}, + {628, 32}, + {630, 24}, + {632, 16}, + {634, 8}, + {635, 0}, + {666, 48}, + } + _pcsp__validate_utf8_fast = [][2]uint32{ + {1, 0}, + {4, 8}, + {5, 16}, + {1738, 176}, + {1739, 168}, + {1743, 160}, + {2018, 176}, + {2019, 168}, + {2023, 160}, + {2600, 176}, + } + _pcsp__value = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {988, 88}, + {992, 48}, + {993, 40}, + {995, 32}, + {997, 24}, + {999, 16}, + {1001, 8}, + {1004, 0}, + } + _pcsp__vnumber = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {803, 104}, + {807, 48}, + {808, 40}, + {810, 32}, + {812, 24}, + {814, 16}, + {816, 8}, + {817, 0}, + {1547, 104}, + } + _pcsp__atof_eisel_lemire64 = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {292, 32}, + {293, 24}, + {295, 16}, + {297, 8}, + {298, 0}, + {362, 32}, + } + _pcsp__atof_native = [][2]uint32{ + {1, 0}, + {4, 8}, + {587, 56}, + {591, 8}, + {593, 0}, + } + _pcsp__decimal_to_f64 = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {1673, 56}, + {1677, 48}, + {1678, 40}, + {1680, 32}, + {1682, 24}, + {1684, 16}, + {1686, 8}, + {1690, 0}, + {1702, 56}, + } + _pcsp__right_shift = [][2]uint32{ + {1, 0}, + {318, 8}, + {319, 0}, + {387, 8}, + {388, 0}, + {396, 8}, + {398, 0}, + } + _pcsp__left_shift = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {363, 24}, + {364, 16}, + {366, 8}, + {367, 0}, + {470, 24}, + {471, 16}, + {473, 8}, + {474, 0}, + {486, 24}, + } + _pcsp__vsigned = [][2]uint32{ + {1, 0}, + {4, 8}, + {112, 16}, + {113, 8}, + {114, 0}, + {125, 16}, + {126, 8}, + {127, 0}, + {260, 16}, + {261, 8}, + {262, 0}, + {266, 16}, + {267, 8}, + {268, 0}, + {306, 16}, + {307, 8}, + {308, 0}, + {316, 16}, + {317, 8}, + {319, 0}, + } + _pcsp__vstring = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {11, 40}, + {105, 56}, + {109, 40}, + {110, 32}, + {112, 24}, + {114, 16}, + {116, 8}, + {118, 0}, + } + _pcsp__vunsigned = [][2]uint32{ + {1, 0}, + {71, 8}, + {72, 0}, + {83, 8}, + {84, 0}, + {107, 8}, + {108, 0}, + {273, 8}, + {274, 0}, + {312, 8}, + {313, 0}, + {320, 8}, + {322, 0}, + } ) + +var Funcs = []loader.CFunc{ + {"__native_entry__", 0, 67, 0, nil}, + {"_f32toa", _entry__f32toa, _size__f32toa, _stack__f32toa, _pcsp__f32toa}, + {"_f64toa", _entry__f64toa, _size__f64toa, _stack__f64toa, _pcsp__f64toa}, + {"_format_significand", _entry__format_significand, _size__format_significand, _stack__format_significand, _pcsp__format_significand}, + {"_format_integer", _entry__format_integer, _size__format_integer, _stack__format_integer, _pcsp__format_integer}, + {"_fsm_exec", _entry__fsm_exec, _size__fsm_exec, _stack__fsm_exec, _pcsp__fsm_exec}, + {"_advance_ns", _entry__advance_ns, _size__advance_ns, _stack__advance_ns, _pcsp__advance_ns}, + {"_advance_string", _entry__advance_string, _size__advance_string, _stack__advance_string, _pcsp__advance_string}, + {"_advance_string_default", _entry__advance_string_default, _size__advance_string_default, _stack__advance_string_default, _pcsp__advance_string_default}, + {"_do_skip_number", _entry__do_skip_number, _size__do_skip_number, _stack__do_skip_number, _pcsp__do_skip_number}, + {"_get_by_path", _entry__get_by_path, _size__get_by_path, _stack__get_by_path, _pcsp__get_by_path}, + {"_skip_one_fast", _entry__skip_one_fast, _size__skip_one_fast, _stack__skip_one_fast, _pcsp__skip_one_fast}, + {"_html_escape", _entry__html_escape, _size__html_escape, _stack__html_escape, _pcsp__html_escape}, + {"_i64toa", _entry__i64toa, _size__i64toa, _stack__i64toa, _pcsp__i64toa}, + {"_u64toa", _entry__u64toa, _size__u64toa, _stack__u64toa, _pcsp__u64toa}, + {"_lspace", _entry__lspace, _size__lspace, _stack__lspace, _pcsp__lspace}, + {"_quote", _entry__quote, _size__quote, _stack__quote, _pcsp__quote}, + {"_skip_array", _entry__skip_array, _size__skip_array, _stack__skip_array, _pcsp__skip_array}, + {"_skip_number", _entry__skip_number, _size__skip_number, _stack__skip_number, _pcsp__skip_number}, + {"_skip_object", _entry__skip_object, _size__skip_object, _stack__skip_object, _pcsp__skip_object}, + {"_skip_one", _entry__skip_one, _size__skip_one, _stack__skip_one, _pcsp__skip_one}, + {"_unquote", _entry__unquote, _size__unquote, _stack__unquote, _pcsp__unquote}, + {"_validate_one", _entry__validate_one, _size__validate_one, _stack__validate_one, _pcsp__validate_one}, + {"_validate_utf8", _entry__validate_utf8, _size__validate_utf8, _stack__validate_utf8, _pcsp__validate_utf8}, + {"_validate_utf8_fast", _entry__validate_utf8_fast, _size__validate_utf8_fast, _stack__validate_utf8_fast, _pcsp__validate_utf8_fast}, + {"_value", _entry__value, _size__value, _stack__value, _pcsp__value}, + {"_vnumber", _entry__vnumber, _size__vnumber, _stack__vnumber, _pcsp__vnumber}, + {"_atof_eisel_lemire64", _entry__atof_eisel_lemire64, _size__atof_eisel_lemire64, _stack__atof_eisel_lemire64, _pcsp__atof_eisel_lemire64}, + {"_atof_native", _entry__atof_native, _size__atof_native, _stack__atof_native, _pcsp__atof_native}, + {"_decimal_to_f64", _entry__decimal_to_f64, _size__decimal_to_f64, _stack__decimal_to_f64, _pcsp__decimal_to_f64}, + {"_right_shift", _entry__right_shift, _size__right_shift, _stack__right_shift, _pcsp__right_shift}, + {"_left_shift", _entry__left_shift, _size__left_shift, _stack__left_shift, _pcsp__left_shift}, + {"_vsigned", _entry__vsigned, _size__vsigned, _stack__vsigned, _pcsp__vsigned}, + {"_vstring", _entry__vstring, _size__vstring, _stack__vstring, _pcsp__vstring}, + {"_vunsigned", _entry__vunsigned, _size__vunsigned, _stack__vunsigned, _pcsp__vunsigned}, +} diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/native_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/native_text_amd64.go new file mode 100644 index 0000000000..927c0e5218 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/native_text_amd64.go @@ -0,0 +1,14800 @@ +// +build amd64 +// Code generated by asm2asm, DO NOT EDIT. + +package avx2 + +var Text__native_entry__ = []byte{ + 0x48, 0x8d, 0x05, 0xf9, 0xff, 0xff, 0xff, // leaq $-7(%rip), %rax + 0x48, 0x89, 0x44, 0x24, 0x08, //0x00000007 movq %rax, $8(%rsp) + 0xc3, //0x0000000c retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000000d .p2align 5, 0x00 + //0x00000020 LCPI0_0 + 0x20, //0x00000020 .byte 32 + 0x00, //0x00000021 .byte 0 + 0x00, //0x00000022 .byte 0 + 0x00, //0x00000023 .byte 0 + 0x00, //0x00000024 .byte 0 + 0x00, //0x00000025 .byte 0 + 0x00, //0x00000026 .byte 0 + 0x00, //0x00000027 .byte 0 + 0x00, //0x00000028 .byte 0 + 0x09, //0x00000029 .byte 9 + 0x0a, //0x0000002a .byte 10 + 0x00, //0x0000002b .byte 0 + 0x00, //0x0000002c .byte 0 + 0x0d, //0x0000002d .byte 13 + 0x00, //0x0000002e .byte 0 + 0x00, //0x0000002f .byte 0 + 0x20, //0x00000030 .byte 32 + 0x00, //0x00000031 .byte 0 + 0x00, //0x00000032 .byte 0 + 0x00, //0x00000033 .byte 0 + 0x00, //0x00000034 .byte 0 + 0x00, //0x00000035 .byte 0 + 0x00, //0x00000036 .byte 0 + 0x00, //0x00000037 .byte 0 + 0x00, //0x00000038 .byte 0 + 0x09, //0x00000039 .byte 9 + 0x0a, //0x0000003a .byte 10 + 0x00, //0x0000003b .byte 0 + 0x00, //0x0000003c .byte 0 + 0x0d, //0x0000003d .byte 13 + 0x00, //0x0000003e .byte 0 + 0x00, //0x0000003f .byte 0 + //0x00000040 .p2align 4, 0x90 + //0x00000040 _lspace + 0x55, //0x00000040 pushq %rbp + 0x48, 0x89, 0xe5, //0x00000041 movq %rsp, %rbp + 0x48, 0x8d, 0x04, 0x17, //0x00000044 leaq (%rdi,%rdx), %rax + 0x49, 0x89, 0xf1, //0x00000048 movq %rsi, %r9 + 0x49, 0x29, 0xd1, //0x0000004b subq %rdx, %r9 + 0x49, 0x83, 0xf9, 0x20, //0x0000004e cmpq $32, %r9 + 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x00000052 jb LBB0_4 + 0x48, 0x29, 0xd6, //0x00000058 subq %rdx, %rsi + 0x48, 0x83, 0xc6, 0xe0, //0x0000005b addq $-32, %rsi + 0x48, 0x89, 0xf1, //0x0000005f movq %rsi, %rcx + 0x48, 0x83, 0xe1, 0xe0, //0x00000062 andq $-32, %rcx + 0x48, 0x01, 0xd1, //0x00000066 addq %rdx, %rcx + 0x4c, 0x8d, 0x44, 0x0f, 0x20, //0x00000069 leaq $32(%rdi,%rcx), %r8 + 0x83, 0xe6, 0x1f, //0x0000006e andl $31, %esi + 0xc5, 0xfd, 0x6f, 0x05, 0xa7, 0xff, 0xff, 0xff, //0x00000071 vmovdqa $-89(%rip), %ymm0 /* LCPI0_0+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000079 .p2align 4, 0x90 + //0x00000080 LBB0_2 + 0xc5, 0xfe, 0x6f, 0x08, //0x00000080 vmovdqu (%rax), %ymm1 + 0xc4, 0xe2, 0x7d, 0x00, 0xd1, //0x00000084 vpshufb %ymm1, %ymm0, %ymm2 + 0xc5, 0xf5, 0x74, 0xca, //0x00000089 vpcmpeqb %ymm2, %ymm1, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x0000008d vpmovmskb %ymm1, %edx + 0x83, 0xfa, 0xff, //0x00000091 cmpl $-1, %edx + 0x0f, 0x85, 0x63, 0x00, 0x00, 0x00, //0x00000094 jne LBB0_3 + 0x48, 0x83, 0xc0, 0x20, //0x0000009a addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x0000009e addq $-32, %r9 + 0x49, 0x83, 0xf9, 0x1f, //0x000000a2 cmpq $31, %r9 + 0x0f, 0x87, 0xd4, 0xff, 0xff, 0xff, //0x000000a6 ja LBB0_2 + 0x49, 0x89, 0xf1, //0x000000ac movq %rsi, %r9 + 0x4c, 0x89, 0xc0, //0x000000af movq %r8, %rax + //0x000000b2 LBB0_4 + 0x4d, 0x85, 0xc9, //0x000000b2 testq %r9, %r9 + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x000000b5 je LBB0_13 + 0x4e, 0x8d, 0x04, 0x08, //0x000000bb leaq (%rax,%r9), %r8 + 0x48, 0xff, 0xc0, //0x000000bf incq %rax + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000000c2 movabsq $4294977024, %rsi + //0x000000cc LBB0_6 + 0x0f, 0xbe, 0x50, 0xff, //0x000000cc movsbl $-1(%rax), %edx + 0x83, 0xfa, 0x20, //0x000000d0 cmpl $32, %edx + 0x0f, 0x87, 0x38, 0x00, 0x00, 0x00, //0x000000d3 ja LBB0_8 + 0x48, 0x0f, 0xa3, 0xd6, //0x000000d9 btq %rdx, %rsi + 0x0f, 0x83, 0x2e, 0x00, 0x00, 0x00, //0x000000dd jae LBB0_8 + 0x49, 0xff, 0xc9, //0x000000e3 decq %r9 + 0x48, 0xff, 0xc0, //0x000000e6 incq %rax + 0x4d, 0x85, 0xc9, //0x000000e9 testq %r9, %r9 + 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x000000ec jne LBB0_6 + 0x4c, 0x89, 0xc0, //0x000000f2 movq %r8, %rax + //0x000000f5 LBB0_13 + 0x48, 0x29, 0xf8, //0x000000f5 subq %rdi, %rax + 0x5d, //0x000000f8 popq %rbp + 0xc5, 0xf8, 0x77, //0x000000f9 vzeroupper + 0xc3, //0x000000fc retq + //0x000000fd LBB0_3 + 0x48, 0x29, 0xf8, //0x000000fd subq %rdi, %rax + 0xf7, 0xd2, //0x00000100 notl %edx + 0x48, 0x63, 0xca, //0x00000102 movslq %edx, %rcx + 0x48, 0x0f, 0xbc, 0xc9, //0x00000105 bsfq %rcx, %rcx + 0x48, 0x01, 0xc8, //0x00000109 addq %rcx, %rax + 0x5d, //0x0000010c popq %rbp + 0xc5, 0xf8, 0x77, //0x0000010d vzeroupper + 0xc3, //0x00000110 retq + //0x00000111 LBB0_8 + 0x48, 0xf7, 0xd7, //0x00000111 notq %rdi + 0x48, 0x01, 0xf8, //0x00000114 addq %rdi, %rax + 0x5d, //0x00000117 popq %rbp + 0xc5, 0xf8, 0x77, //0x00000118 vzeroupper + 0xc3, //0x0000011b retq + 0x00, 0x00, 0x00, 0x00, //0x0000011c .p2align 5, 0x00 + //0x00000120 LCPI1_0 + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x00000120 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x00000130 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + //0x00000140 .p2align 4, 0x90 + //0x00000140 _f64toa + 0x55, //0x00000140 pushq %rbp + 0x48, 0x89, 0xe5, //0x00000141 movq %rsp, %rbp + 0x41, 0x57, //0x00000144 pushq %r15 + 0x41, 0x56, //0x00000146 pushq %r14 + 0x41, 0x55, //0x00000148 pushq %r13 + 0x41, 0x54, //0x0000014a pushq %r12 + 0x53, //0x0000014c pushq %rbx + 0x50, //0x0000014d pushq %rax + 0xc4, 0xe1, 0xf9, 0x7e, 0xc2, //0x0000014e vmovq %xmm0, %rdx + 0x48, 0x89, 0xd0, //0x00000153 movq %rdx, %rax + 0x48, 0xc1, 0xe8, 0x34, //0x00000156 shrq $52, %rax + 0x25, 0xff, 0x07, 0x00, 0x00, //0x0000015a andl $2047, %eax + 0x3d, 0xff, 0x07, 0x00, 0x00, //0x0000015f cmpl $2047, %eax + 0x0f, 0x84, 0xcc, 0x0a, 0x00, 0x00, //0x00000164 je LBB1_114 + 0x49, 0x89, 0xfe, //0x0000016a movq %rdi, %r14 + 0xc6, 0x07, 0x2d, //0x0000016d movb $45, (%rdi) + 0x49, 0x89, 0xd4, //0x00000170 movq %rdx, %r12 + 0x49, 0xc1, 0xec, 0x3f, //0x00000173 shrq $63, %r12 + 0x4e, 0x8d, 0x3c, 0x27, //0x00000177 leaq (%rdi,%r12), %r15 + 0x48, 0x8d, 0x0c, 0x55, 0x00, 0x00, 0x00, 0x00, //0x0000017b leaq (,%rdx,2), %rcx + 0x48, 0x85, 0xc9, //0x00000183 testq %rcx, %rcx + 0x0f, 0x84, 0x75, 0x02, 0x00, 0x00, //0x00000186 je LBB1_19 + 0x48, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, //0x0000018c movabsq $4503599627370495, %rdi + 0x48, 0x21, 0xfa, //0x00000196 andq %rdi, %rdx + 0x85, 0xc0, //0x00000199 testl %eax, %eax + 0x0f, 0x84, 0x9c, 0x0a, 0x00, 0x00, //0x0000019b je LBB1_115 + 0x48, 0xff, 0xc7, //0x000001a1 incq %rdi + 0x48, 0x09, 0xd7, //0x000001a4 orq %rdx, %rdi + 0x8d, 0x98, 0xcd, 0xfb, 0xff, 0xff, //0x000001a7 leal $-1075(%rax), %ebx + 0x8d, 0x88, 0x01, 0xfc, 0xff, 0xff, //0x000001ad leal $-1023(%rax), %ecx + 0x83, 0xf9, 0x34, //0x000001b3 cmpl $52, %ecx + 0x0f, 0x87, 0x1d, 0x00, 0x00, 0x00, //0x000001b6 ja LBB1_5 + 0xb9, 0x33, 0x04, 0x00, 0x00, //0x000001bc movl $1075, %ecx + 0x29, 0xc1, //0x000001c1 subl %eax, %ecx + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x000001c3 movq $-1, %rsi + 0x48, 0xd3, 0xe6, //0x000001ca shlq %cl, %rsi + 0x48, 0xf7, 0xd6, //0x000001cd notq %rsi + 0x48, 0x85, 0xf7, //0x000001d0 testq %rsi, %rdi + 0x0f, 0x84, 0x10, 0x04, 0x00, 0x00, //0x000001d3 je LBB1_43 + //0x000001d9 LBB1_5 + 0x48, 0x85, 0xd2, //0x000001d9 testq %rdx, %rdx + 0x0f, 0x94, 0xc1, //0x000001dc sete %cl + 0x83, 0xf8, 0x01, //0x000001df cmpl $1, %eax + 0x0f, 0x97, 0xc0, //0x000001e2 seta %al + 0x20, 0xc8, //0x000001e5 andb %cl, %al + 0x0f, 0xb6, 0xc0, //0x000001e7 movzbl %al, %eax + 0x48, 0x8d, 0x74, 0xb8, 0xfe, //0x000001ea leaq $-2(%rax,%rdi,4), %rsi + 0x44, 0x69, 0xcb, 0x13, 0x44, 0x13, 0x00, //0x000001ef imull $1262611, %ebx, %r9d + 0x31, 0xc9, //0x000001f6 xorl %ecx, %ecx + 0x84, 0xc0, //0x000001f8 testb %al, %al + 0xb8, 0xff, 0xfe, 0x07, 0x00, //0x000001fa movl $524031, %eax + 0x0f, 0x44, 0xc1, //0x000001ff cmovel %ecx, %eax + 0x41, 0x29, 0xc1, //0x00000202 subl %eax, %r9d + 0x41, 0xc1, 0xf9, 0x16, //0x00000205 sarl $22, %r9d + 0x41, 0x69, 0xc9, 0xb1, 0x6c, 0xe5, 0xff, //0x00000209 imull $-1741647, %r9d, %ecx + 0xc1, 0xe9, 0x13, //0x00000210 shrl $19, %ecx + 0x01, 0xd9, //0x00000213 addl %ebx, %ecx + 0xb8, 0x24, 0x01, 0x00, 0x00, //0x00000215 movl $292, %eax + 0x44, 0x29, 0xc8, //0x0000021a subl %r9d, %eax + 0x48, 0x98, //0x0000021d cltq + 0x48, 0xc1, 0xe0, 0x04, //0x0000021f shlq $4, %rax + 0x48, 0x8d, 0x15, 0x46, 0xca, 0x00, 0x00, //0x00000223 leaq $51782(%rip), %rdx /* _pow10_ceil_sig.g+0(%rip) */ + 0x4c, 0x8b, 0x1c, 0x10, //0x0000022a movq (%rax,%rdx), %r11 + 0x4c, 0x8b, 0x6c, 0x10, 0x08, //0x0000022e movq $8(%rax,%rdx), %r13 + 0xfe, 0xc1, //0x00000233 incb %cl + 0x48, 0xd3, 0xe6, //0x00000235 shlq %cl, %rsi + 0x48, 0x89, 0xf0, //0x00000238 movq %rsi, %rax + 0x49, 0xf7, 0xe5, //0x0000023b mulq %r13 + 0x48, 0x89, 0xd3, //0x0000023e movq %rdx, %rbx + 0x48, 0x89, 0xf0, //0x00000241 movq %rsi, %rax + 0x49, 0xf7, 0xe3, //0x00000244 mulq %r11 + 0x48, 0x8d, 0x34, 0xbd, 0x00, 0x00, 0x00, 0x00, //0x00000247 leaq (,%rdi,4), %rsi + 0x48, 0x01, 0xd8, //0x0000024f addq %rbx, %rax + 0x48, 0x83, 0xd2, 0x00, //0x00000252 adcq $0, %rdx + 0x31, 0xdb, //0x00000256 xorl %ebx, %ebx + 0x48, 0x83, 0xf8, 0x01, //0x00000258 cmpq $1, %rax + 0x0f, 0x97, 0xc3, //0x0000025c seta %bl + 0x48, 0x09, 0xd3, //0x0000025f orq %rdx, %rbx + 0x48, 0xd3, 0xe6, //0x00000262 shlq %cl, %rsi + 0x48, 0x89, 0xf0, //0x00000265 movq %rsi, %rax + 0x49, 0xf7, 0xe5, //0x00000268 mulq %r13 + 0x49, 0x89, 0xd2, //0x0000026b movq %rdx, %r10 + 0x48, 0x89, 0xf0, //0x0000026e movq %rsi, %rax + 0x49, 0xf7, 0xe3, //0x00000271 mulq %r11 + 0x49, 0x89, 0xd0, //0x00000274 movq %rdx, %r8 + 0x48, 0x8d, 0x34, 0xbd, 0x02, 0x00, 0x00, 0x00, //0x00000277 leaq $2(,%rdi,4), %rsi + 0x4c, 0x01, 0xd0, //0x0000027f addq %r10, %rax + 0x49, 0x83, 0xd0, 0x00, //0x00000282 adcq $0, %r8 + 0x45, 0x31, 0xd2, //0x00000286 xorl %r10d, %r10d + 0x48, 0x83, 0xf8, 0x01, //0x00000289 cmpq $1, %rax + 0x41, 0x0f, 0x97, 0xc2, //0x0000028d seta %r10b + 0x4d, 0x09, 0xc2, //0x00000291 orq %r8, %r10 + 0x48, 0xd3, 0xe6, //0x00000294 shlq %cl, %rsi + 0x48, 0x89, 0xf0, //0x00000297 movq %rsi, %rax + 0x49, 0xf7, 0xe5, //0x0000029a mulq %r13 + 0x48, 0x89, 0xd1, //0x0000029d movq %rdx, %rcx + 0x48, 0x89, 0xf0, //0x000002a0 movq %rsi, %rax + 0x49, 0xf7, 0xe3, //0x000002a3 mulq %r11 + 0x48, 0x01, 0xc8, //0x000002a6 addq %rcx, %rax + 0x48, 0x83, 0xd2, 0x00, //0x000002a9 adcq $0, %rdx + 0x31, 0xc9, //0x000002ad xorl %ecx, %ecx + 0x48, 0x83, 0xf8, 0x01, //0x000002af cmpq $1, %rax + 0x0f, 0x97, 0xc1, //0x000002b3 seta %cl + 0x48, 0x09, 0xd1, //0x000002b6 orq %rdx, %rcx + 0x83, 0xe7, 0x01, //0x000002b9 andl $1, %edi + 0x48, 0x01, 0xfb, //0x000002bc addq %rdi, %rbx + 0x48, 0x29, 0xf9, //0x000002bf subq %rdi, %rcx + 0x49, 0x83, 0xfa, 0x28, //0x000002c2 cmpq $40, %r10 + 0x0f, 0x82, 0x01, 0x01, 0x00, 0x00, //0x000002c6 jb LBB1_17 + 0x48, 0xba, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x000002cc movabsq $-3689348814741910323, %rdx + 0x4c, 0x89, 0xc0, //0x000002d6 movq %r8, %rax + 0x48, 0xf7, 0xe2, //0x000002d9 mulq %rdx + 0x48, 0x89, 0xd7, //0x000002dc movq %rdx, %rdi + 0x48, 0xc1, 0xef, 0x05, //0x000002df shrq $5, %rdi + 0x48, 0x8d, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x00, //0x000002e3 leaq (,%rdi,8), %rax + 0x48, 0x8d, 0x14, 0x80, //0x000002eb leaq (%rax,%rax,4), %rdx + 0x48, 0x39, 0xd3, //0x000002ef cmpq %rdx, %rbx + 0x40, 0x0f, 0x96, 0xc6, //0x000002f2 setbe %sil + 0x48, 0x8d, 0x44, 0x80, 0x28, //0x000002f6 leaq $40(%rax,%rax,4), %rax + 0x48, 0x39, 0xc8, //0x000002fb cmpq %rcx, %rax + 0x0f, 0x96, 0xc2, //0x000002fe setbe %dl + 0x40, 0x38, 0xd6, //0x00000301 cmpb %dl, %sil + 0x0f, 0x84, 0xc3, 0x00, 0x00, 0x00, //0x00000304 je LBB1_17 + 0x31, 0xd2, //0x0000030a xorl %edx, %edx + 0x48, 0x39, 0xc8, //0x0000030c cmpq %rcx, %rax + 0x0f, 0x96, 0xc2, //0x0000030f setbe %dl + 0x48, 0x01, 0xd7, //0x00000312 addq %rdx, %rdi + 0x41, 0xff, 0xc1, //0x00000315 incl %r9d + 0x48, 0xbb, 0x80, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, //0x00000318 movabsq $8589934464, %rbx + 0x48, 0x8d, 0x83, 0x7f, 0xe4, 0x0b, 0x54, //0x00000322 leaq $1410065535(%rbx), %rax + 0x48, 0x39, 0xc7, //0x00000329 cmpq %rax, %rdi + 0x0f, 0x87, 0x1e, 0x01, 0x00, 0x00, //0x0000032c ja LBB1_23 + //0x00000332 LBB1_8 + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00000332 movl $1, %edx + 0x48, 0x83, 0xff, 0x0a, //0x00000337 cmpq $10, %rdi + 0x0f, 0x82, 0x9c, 0x01, 0x00, 0x00, //0x0000033b jb LBB1_30 + 0xba, 0x02, 0x00, 0x00, 0x00, //0x00000341 movl $2, %edx + 0x48, 0x83, 0xff, 0x64, //0x00000346 cmpq $100, %rdi + 0x0f, 0x82, 0x8d, 0x01, 0x00, 0x00, //0x0000034a jb LBB1_30 + 0xba, 0x03, 0x00, 0x00, 0x00, //0x00000350 movl $3, %edx + 0x48, 0x81, 0xff, 0xe8, 0x03, 0x00, 0x00, //0x00000355 cmpq $1000, %rdi + 0x0f, 0x82, 0x7b, 0x01, 0x00, 0x00, //0x0000035c jb LBB1_30 + 0xba, 0x04, 0x00, 0x00, 0x00, //0x00000362 movl $4, %edx + 0x48, 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00000367 cmpq $10000, %rdi + 0x0f, 0x82, 0x69, 0x01, 0x00, 0x00, //0x0000036e jb LBB1_30 + 0xba, 0x05, 0x00, 0x00, 0x00, //0x00000374 movl $5, %edx + 0x48, 0x81, 0xff, 0xa0, 0x86, 0x01, 0x00, //0x00000379 cmpq $100000, %rdi + 0x0f, 0x82, 0x57, 0x01, 0x00, 0x00, //0x00000380 jb LBB1_30 + 0xba, 0x06, 0x00, 0x00, 0x00, //0x00000386 movl $6, %edx + 0x48, 0x81, 0xff, 0x40, 0x42, 0x0f, 0x00, //0x0000038b cmpq $1000000, %rdi + 0x0f, 0x82, 0x45, 0x01, 0x00, 0x00, //0x00000392 jb LBB1_30 + 0xba, 0x07, 0x00, 0x00, 0x00, //0x00000398 movl $7, %edx + 0x48, 0x81, 0xff, 0x80, 0x96, 0x98, 0x00, //0x0000039d cmpq $10000000, %rdi + 0x0f, 0x82, 0x33, 0x01, 0x00, 0x00, //0x000003a4 jb LBB1_30 + 0xba, 0x08, 0x00, 0x00, 0x00, //0x000003aa movl $8, %edx + 0x48, 0x81, 0xff, 0x00, 0xe1, 0xf5, 0x05, //0x000003af cmpq $100000000, %rdi + 0x0f, 0x82, 0x21, 0x01, 0x00, 0x00, //0x000003b6 jb LBB1_30 + 0x48, 0x81, 0xff, 0x00, 0xca, 0x9a, 0x3b, //0x000003bc cmpq $1000000000, %rdi + 0xba, 0x0a, 0x00, 0x00, 0x00, //0x000003c3 movl $10, %edx + 0xe9, 0x0d, 0x01, 0x00, 0x00, //0x000003c8 jmp LBB1_29 + //0x000003cd LBB1_17 + 0x4d, 0x89, 0xc3, //0x000003cd movq %r8, %r11 + 0x49, 0xc1, 0xeb, 0x02, //0x000003d0 shrq $2, %r11 + 0x4c, 0x89, 0xc2, //0x000003d4 movq %r8, %rdx + 0x48, 0x83, 0xe2, 0xfc, //0x000003d7 andq $-4, %rdx + 0x48, 0x39, 0xd3, //0x000003db cmpq %rdx, %rbx + 0x0f, 0x96, 0xc3, //0x000003de setbe %bl + 0x48, 0x8d, 0x72, 0x04, //0x000003e1 leaq $4(%rdx), %rsi + 0x48, 0x39, 0xce, //0x000003e5 cmpq %rcx, %rsi + 0x0f, 0x96, 0xc0, //0x000003e8 setbe %al + 0x38, 0xc3, //0x000003eb cmpb %al, %bl + 0x0f, 0x84, 0x20, 0x00, 0x00, 0x00, //0x000003ed je LBB1_20 + 0x31, 0xff, //0x000003f3 xorl %edi, %edi + 0x48, 0x39, 0xce, //0x000003f5 cmpq %rcx, %rsi + 0x40, 0x0f, 0x96, 0xc7, //0x000003f8 setbe %dil + 0xe9, 0x32, 0x00, 0x00, 0x00, //0x000003fc jmp LBB1_22 + //0x00000401 LBB1_19 + 0x41, 0xc6, 0x07, 0x30, //0x00000401 movb $48, (%r15) + 0x45, 0x29, 0xf7, //0x00000405 subl %r14d, %r15d + 0x41, 0xff, 0xc7, //0x00000408 incl %r15d + 0x44, 0x89, 0xfb, //0x0000040b movl %r15d, %ebx + 0xe9, 0x0f, 0x08, 0x00, 0x00, //0x0000040e jmp LBB1_113 + //0x00000413 LBB1_20 + 0x48, 0x83, 0xca, 0x02, //0x00000413 orq $2, %rdx + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00000417 movl $1, %edi + 0x49, 0x39, 0xd2, //0x0000041c cmpq %rdx, %r10 + 0x0f, 0x87, 0x0e, 0x00, 0x00, 0x00, //0x0000041f ja LBB1_22 + 0x0f, 0x94, 0xc0, //0x00000425 sete %al + 0x41, 0xc0, 0xe8, 0x02, //0x00000428 shrb $2, %r8b + 0x41, 0x20, 0xc0, //0x0000042c andb %al, %r8b + 0x41, 0x0f, 0xb6, 0xf8, //0x0000042f movzbl %r8b, %edi + //0x00000433 LBB1_22 + 0x4c, 0x01, 0xdf, //0x00000433 addq %r11, %rdi + 0x48, 0xbb, 0x80, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, //0x00000436 movabsq $8589934464, %rbx + 0x48, 0x8d, 0x83, 0x7f, 0xe4, 0x0b, 0x54, //0x00000440 leaq $1410065535(%rbx), %rax + 0x48, 0x39, 0xc7, //0x00000447 cmpq %rax, %rdi + 0x0f, 0x86, 0xe2, 0xfe, 0xff, 0xff, //0x0000044a jbe LBB1_8 + //0x00000450 LBB1_23 + 0x48, 0x89, 0xf8, //0x00000450 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0b, //0x00000453 shrq $11, %rax + 0xba, 0x0b, 0x00, 0x00, 0x00, //0x00000457 movl $11, %edx + 0x48, 0x3d, 0xdd, 0x0e, 0xe9, 0x02, //0x0000045c cmpq $48828125, %rax + 0x0f, 0x82, 0x75, 0x00, 0x00, 0x00, //0x00000462 jb LBB1_30 + 0x48, 0x89, 0xf8, //0x00000468 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0c, //0x0000046b shrq $12, %rax + 0xba, 0x0c, 0x00, 0x00, 0x00, //0x0000046f movl $12, %edx + 0x48, 0x3d, 0x51, 0x4a, 0x8d, 0x0e, //0x00000474 cmpq $244140625, %rax + 0x0f, 0x82, 0x5d, 0x00, 0x00, 0x00, //0x0000047a jb LBB1_30 + 0x48, 0x89, 0xf8, //0x00000480 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0d, //0x00000483 shrq $13, %rax + 0xba, 0x0d, 0x00, 0x00, 0x00, //0x00000487 movl $13, %edx + 0x48, 0x3d, 0x95, 0x73, 0xc2, 0x48, //0x0000048c cmpq $1220703125, %rax + 0x0f, 0x82, 0x45, 0x00, 0x00, 0x00, //0x00000492 jb LBB1_30 + 0xba, 0x0e, 0x00, 0x00, 0x00, //0x00000498 movl $14, %edx + 0x48, 0xb8, 0x00, 0x40, 0x7a, 0x10, 0xf3, 0x5a, 0x00, 0x00, //0x0000049d movabsq $100000000000000, %rax + 0x48, 0x39, 0xc7, //0x000004a7 cmpq %rax, %rdi + 0x0f, 0x82, 0x2d, 0x00, 0x00, 0x00, //0x000004aa jb LBB1_30 + 0xba, 0x0f, 0x00, 0x00, 0x00, //0x000004b0 movl $15, %edx + 0x48, 0xb8, 0x00, 0x80, 0xc6, 0xa4, 0x7e, 0x8d, 0x03, 0x00, //0x000004b5 movabsq $1000000000000000, %rax + 0x48, 0x39, 0xc7, //0x000004bf cmpq %rax, %rdi + 0x0f, 0x82, 0x15, 0x00, 0x00, 0x00, //0x000004c2 jb LBB1_30 + 0x48, 0xb8, 0x00, 0x00, 0xc1, 0x6f, 0xf2, 0x86, 0x23, 0x00, //0x000004c8 movabsq $10000000000000000, %rax + 0x48, 0x39, 0xc7, //0x000004d2 cmpq %rax, %rdi + 0xba, 0x11, 0x00, 0x00, 0x00, //0x000004d5 movl $17, %edx + //0x000004da LBB1_29 + 0x83, 0xda, 0x00, //0x000004da sbbl $0, %edx + //0x000004dd LBB1_30 + 0x46, 0x8d, 0x2c, 0x0a, //0x000004dd leal (%rdx,%r9), %r13d + 0x42, 0x8d, 0x44, 0x0a, 0x05, //0x000004e1 leal $5(%rdx,%r9), %eax + 0x83, 0xf8, 0x1b, //0x000004e6 cmpl $27, %eax + 0x0f, 0x82, 0x95, 0x00, 0x00, 0x00, //0x000004e9 jb LBB1_38 + 0x4d, 0x8d, 0x67, 0x01, //0x000004ef leaq $1(%r15), %r12 + 0x4c, 0x89, 0xe6, //0x000004f3 movq %r12, %rsi + 0xe8, 0x55, 0x92, 0x00, 0x00, //0x000004f6 callq _format_significand + 0x48, 0x89, 0xc3, //0x000004fb movq %rax, %rbx + 0x90, 0x90, //0x000004fe .p2align 4, 0x90 + //0x00000500 LBB1_32 + 0x80, 0x7b, 0xff, 0x30, //0x00000500 cmpb $48, $-1(%rbx) + 0x48, 0x8d, 0x5b, 0xff, //0x00000504 leaq $-1(%rbx), %rbx + 0x0f, 0x84, 0xf2, 0xff, 0xff, 0xff, //0x00000508 je LBB1_32 + 0x41, 0x8a, 0x47, 0x01, //0x0000050e movb $1(%r15), %al + 0x41, 0x88, 0x07, //0x00000512 movb %al, (%r15) + 0x48, 0x8d, 0x43, 0x01, //0x00000515 leaq $1(%rbx), %rax + 0x48, 0x89, 0xc1, //0x00000519 movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x0000051c subq %r12, %rcx + 0x48, 0x83, 0xf9, 0x02, //0x0000051f cmpq $2, %rcx + 0x0f, 0x8c, 0x08, 0x00, 0x00, 0x00, //0x00000523 jl LBB1_35 + 0x41, 0xc6, 0x04, 0x24, 0x2e, //0x00000529 movb $46, (%r12) + 0x48, 0x89, 0xc3, //0x0000052e movq %rax, %rbx + //0x00000531 LBB1_35 + 0xc6, 0x03, 0x65, //0x00000531 movb $101, (%rbx) + 0x45, 0x85, 0xed, //0x00000534 testl %r13d, %r13d + 0x0f, 0x8e, 0x5a, 0x01, 0x00, 0x00, //0x00000537 jle LBB1_51 + 0x41, 0xff, 0xcd, //0x0000053d decl %r13d + 0xc6, 0x43, 0x01, 0x2b, //0x00000540 movb $43, $1(%rbx) + 0x44, 0x89, 0xe8, //0x00000544 movl %r13d, %eax + 0x83, 0xf8, 0x64, //0x00000547 cmpl $100, %eax + 0x0f, 0x8c, 0x5c, 0x01, 0x00, 0x00, //0x0000054a jl LBB1_52 + //0x00000550 LBB1_37 + 0x89, 0xc1, //0x00000550 movl %eax, %ecx + 0xba, 0xcd, 0xcc, 0xcc, 0xcc, //0x00000552 movl $3435973837, %edx + 0x48, 0x0f, 0xaf, 0xd1, //0x00000557 imulq %rcx, %rdx + 0x48, 0xc1, 0xea, 0x23, //0x0000055b shrq $35, %rdx + 0x8d, 0x0c, 0x12, //0x0000055f leal (%rdx,%rdx), %ecx + 0x8d, 0x0c, 0x89, //0x00000562 leal (%rcx,%rcx,4), %ecx + 0x29, 0xc8, //0x00000565 subl %ecx, %eax + 0x48, 0x8d, 0x0d, 0x32, 0xc6, 0x00, 0x00, //0x00000567 leaq $50738(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x51, //0x0000056e movzwl (%rcx,%rdx,2), %ecx + 0x66, 0x89, 0x4b, 0x02, //0x00000572 movw %cx, $2(%rbx) + 0x0c, 0x30, //0x00000576 orb $48, %al + 0x88, 0x43, 0x04, //0x00000578 movb %al, $4(%rbx) + 0x48, 0x83, 0xc3, 0x05, //0x0000057b addq $5, %rbx + 0xe9, 0x9b, 0x06, 0x00, 0x00, //0x0000057f jmp LBB1_112 + //0x00000584 LBB1_38 + 0x45, 0x85, 0xc9, //0x00000584 testl %r9d, %r9d + 0x0f, 0x88, 0x42, 0x01, 0x00, 0x00, //0x00000587 js LBB1_54 + 0x4d, 0x63, 0xed, //0x0000058d movslq %r13d, %r13 + 0x4b, 0x8d, 0x1c, 0x2f, //0x00000590 leaq (%r15,%r13), %rbx + 0x4c, 0x89, 0xfe, //0x00000594 movq %r15, %rsi + 0xe8, 0xc4, 0x06, 0x00, 0x00, //0x00000597 callq _format_integer + 0x48, 0x39, 0xd8, //0x0000059c cmpq %rbx, %rax + 0x0f, 0x83, 0x7a, 0x06, 0x00, 0x00, //0x0000059f jae LBB1_112 + 0x4d, 0x01, 0xec, //0x000005a5 addq %r13, %r12 + 0x49, 0x29, 0xc4, //0x000005a8 subq %rax, %r12 + 0x4d, 0x01, 0xf4, //0x000005ab addq %r14, %r12 + 0x49, 0x81, 0xfc, 0x80, 0x00, 0x00, 0x00, //0x000005ae cmpq $128, %r12 + 0x0f, 0x82, 0x15, 0x03, 0x00, 0x00, //0x000005b5 jb LBB1_76 + 0x4c, 0x89, 0xe1, //0x000005bb movq %r12, %rcx + 0x48, 0x83, 0xe1, 0x80, //0x000005be andq $-128, %rcx + 0x48, 0x8d, 0x79, 0x80, //0x000005c2 leaq $-128(%rcx), %rdi + 0x48, 0x89, 0xfe, //0x000005c6 movq %rdi, %rsi + 0x48, 0xc1, 0xee, 0x07, //0x000005c9 shrq $7, %rsi + 0x48, 0xff, 0xc6, //0x000005cd incq %rsi + 0x89, 0xf2, //0x000005d0 movl %esi, %edx + 0x83, 0xe2, 0x03, //0x000005d2 andl $3, %edx + 0x48, 0x81, 0xff, 0x80, 0x01, 0x00, 0x00, //0x000005d5 cmpq $384, %rdi + 0x0f, 0x83, 0xf8, 0x01, 0x00, 0x00, //0x000005dc jae LBB1_69 + 0x31, 0xff, //0x000005e2 xorl %edi, %edi + 0xe9, 0x9b, 0x02, 0x00, 0x00, //0x000005e4 jmp LBB1_71 + //0x000005e9 LBB1_43 + 0x48, 0xd3, 0xef, //0x000005e9 shrq %cl, %rdi + 0x48, 0xb8, 0x80, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, //0x000005ec movabsq $8589934464, %rax + 0x48, 0x05, 0x7f, 0xe4, 0x0b, 0x54, //0x000005f6 addq $1410065535, %rax + 0x48, 0x39, 0xc7, //0x000005fc cmpq %rax, %rdi + 0x0f, 0x86, 0x3b, 0x01, 0x00, 0x00, //0x000005ff jbe LBB1_60 + 0x48, 0x89, 0xf8, //0x00000605 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0b, //0x00000608 shrq $11, %rax + 0xba, 0x0b, 0x00, 0x00, 0x00, //0x0000060c movl $11, %edx + 0x48, 0x3d, 0xdd, 0x0e, 0xe9, 0x02, //0x00000611 cmpq $48828125, %rax + 0x0f, 0x82, 0xad, 0x01, 0x00, 0x00, //0x00000617 jb LBB1_68 + 0x48, 0x89, 0xf8, //0x0000061d movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0c, //0x00000620 shrq $12, %rax + 0xba, 0x0c, 0x00, 0x00, 0x00, //0x00000624 movl $12, %edx + 0x48, 0x3d, 0x51, 0x4a, 0x8d, 0x0e, //0x00000629 cmpq $244140625, %rax + 0x0f, 0x82, 0x95, 0x01, 0x00, 0x00, //0x0000062f jb LBB1_68 + 0x48, 0x89, 0xf8, //0x00000635 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0d, //0x00000638 shrq $13, %rax + 0xba, 0x0d, 0x00, 0x00, 0x00, //0x0000063c movl $13, %edx + 0x48, 0x3d, 0x95, 0x73, 0xc2, 0x48, //0x00000641 cmpq $1220703125, %rax + 0x0f, 0x82, 0x7d, 0x01, 0x00, 0x00, //0x00000647 jb LBB1_68 + 0xba, 0x0e, 0x00, 0x00, 0x00, //0x0000064d movl $14, %edx + 0x48, 0xb8, 0x00, 0x40, 0x7a, 0x10, 0xf3, 0x5a, 0x00, 0x00, //0x00000652 movabsq $100000000000000, %rax + 0x48, 0x39, 0xc7, //0x0000065c cmpq %rax, %rdi + 0x0f, 0x82, 0x65, 0x01, 0x00, 0x00, //0x0000065f jb LBB1_68 + 0xba, 0x0f, 0x00, 0x00, 0x00, //0x00000665 movl $15, %edx + 0x48, 0xb8, 0x00, 0x80, 0xc6, 0xa4, 0x7e, 0x8d, 0x03, 0x00, //0x0000066a movabsq $1000000000000000, %rax + 0x48, 0x39, 0xc7, //0x00000674 cmpq %rax, %rdi + 0x0f, 0x82, 0x4d, 0x01, 0x00, 0x00, //0x00000677 jb LBB1_68 + 0x48, 0xb8, 0x00, 0x00, 0xc1, 0x6f, 0xf2, 0x86, 0x23, 0x00, //0x0000067d movabsq $10000000000000000, %rax + 0x48, 0x39, 0xc7, //0x00000687 cmpq %rax, %rdi + 0xba, 0x11, 0x00, 0x00, 0x00, //0x0000068a movl $17, %edx + //0x0000068f LBB1_50 + 0x83, 0xda, 0x00, //0x0000068f sbbl $0, %edx + 0xe9, 0x33, 0x01, 0x00, 0x00, //0x00000692 jmp LBB1_68 + //0x00000697 LBB1_51 + 0xc6, 0x43, 0x01, 0x2d, //0x00000697 movb $45, $1(%rbx) + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x0000069b movl $1, %eax + 0x44, 0x29, 0xe8, //0x000006a0 subl %r13d, %eax + 0x83, 0xf8, 0x64, //0x000006a3 cmpl $100, %eax + 0x0f, 0x8d, 0xa4, 0xfe, 0xff, 0xff, //0x000006a6 jge LBB1_37 + //0x000006ac LBB1_52 + 0x83, 0xf8, 0x0a, //0x000006ac cmpl $10, %eax + 0x0f, 0x8c, 0x7d, 0x00, 0x00, 0x00, //0x000006af jl LBB1_59 + 0x48, 0x98, //0x000006b5 cltq + 0x48, 0x8d, 0x0d, 0xe2, 0xc4, 0x00, 0x00, //0x000006b7 leaq $50402(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x000006be movzwl (%rcx,%rax,2), %eax + 0x66, 0x89, 0x43, 0x02, //0x000006c2 movw %ax, $2(%rbx) + 0x48, 0x83, 0xc3, 0x04, //0x000006c6 addq $4, %rbx + 0xe9, 0x50, 0x05, 0x00, 0x00, //0x000006ca jmp LBB1_112 + //0x000006cf LBB1_54 + 0x45, 0x85, 0xed, //0x000006cf testl %r13d, %r13d + 0x0f, 0x8f, 0x19, 0x03, 0x00, 0x00, //0x000006d2 jg LBB1_85 + 0x66, 0x41, 0xc7, 0x07, 0x30, 0x2e, //0x000006d8 movw $11824, (%r15) + 0x49, 0x83, 0xc7, 0x02, //0x000006de addq $2, %r15 + 0x45, 0x85, 0xed, //0x000006e2 testl %r13d, %r13d + 0x0f, 0x89, 0x06, 0x03, 0x00, 0x00, //0x000006e5 jns LBB1_85 + 0x31, 0xc0, //0x000006eb xorl %eax, %eax + 0x41, 0x83, 0xfd, 0x80, //0x000006ed cmpl $-128, %r13d + 0x0f, 0x87, 0xe1, 0x02, 0x00, 0x00, //0x000006f1 ja LBB1_83 + 0x45, 0x89, 0xe8, //0x000006f7 movl %r13d, %r8d + 0x41, 0xf7, 0xd0, //0x000006fa notl %r8d + 0x49, 0xff, 0xc0, //0x000006fd incq %r8 + 0x4c, 0x89, 0xc0, //0x00000700 movq %r8, %rax + 0x49, 0x89, 0xda, //0x00000703 movq %rbx, %r10 + 0x48, 0x21, 0xd8, //0x00000706 andq %rbx, %rax + 0x48, 0x8d, 0x48, 0x80, //0x00000709 leaq $-128(%rax), %rcx + 0x48, 0x89, 0xcb, //0x0000070d movq %rcx, %rbx + 0x48, 0xc1, 0xeb, 0x07, //0x00000710 shrq $7, %rbx + 0x48, 0xff, 0xc3, //0x00000714 incq %rbx + 0x41, 0x89, 0xd9, //0x00000717 movl %ebx, %r9d + 0x41, 0x83, 0xe1, 0x03, //0x0000071a andl $3, %r9d + 0x48, 0x81, 0xf9, 0x80, 0x01, 0x00, 0x00, //0x0000071e cmpq $384, %rcx + 0x0f, 0x83, 0xb9, 0x01, 0x00, 0x00, //0x00000725 jae LBB1_77 + 0x31, 0xdb, //0x0000072b xorl %ebx, %ebx + 0xe9, 0x5b, 0x02, 0x00, 0x00, //0x0000072d jmp LBB1_79 + //0x00000732 LBB1_59 + 0x04, 0x30, //0x00000732 addb $48, %al + 0x88, 0x43, 0x02, //0x00000734 movb %al, $2(%rbx) + 0x48, 0x83, 0xc3, 0x03, //0x00000737 addq $3, %rbx + 0xe9, 0xdf, 0x04, 0x00, 0x00, //0x0000073b jmp LBB1_112 + //0x00000740 LBB1_60 + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00000740 movl $1, %edx + 0x48, 0x83, 0xff, 0x0a, //0x00000745 cmpq $10, %rdi + 0x0f, 0x82, 0x7b, 0x00, 0x00, 0x00, //0x00000749 jb LBB1_68 + 0xba, 0x02, 0x00, 0x00, 0x00, //0x0000074f movl $2, %edx + 0x48, 0x83, 0xff, 0x64, //0x00000754 cmpq $100, %rdi + 0x0f, 0x82, 0x6c, 0x00, 0x00, 0x00, //0x00000758 jb LBB1_68 + 0xba, 0x03, 0x00, 0x00, 0x00, //0x0000075e movl $3, %edx + 0x48, 0x81, 0xff, 0xe8, 0x03, 0x00, 0x00, //0x00000763 cmpq $1000, %rdi + 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x0000076a jb LBB1_68 + 0xba, 0x04, 0x00, 0x00, 0x00, //0x00000770 movl $4, %edx + 0x48, 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00000775 cmpq $10000, %rdi + 0x0f, 0x82, 0x48, 0x00, 0x00, 0x00, //0x0000077c jb LBB1_68 + 0xba, 0x05, 0x00, 0x00, 0x00, //0x00000782 movl $5, %edx + 0x48, 0x81, 0xff, 0xa0, 0x86, 0x01, 0x00, //0x00000787 cmpq $100000, %rdi + 0x0f, 0x82, 0x36, 0x00, 0x00, 0x00, //0x0000078e jb LBB1_68 + 0xba, 0x06, 0x00, 0x00, 0x00, //0x00000794 movl $6, %edx + 0x48, 0x81, 0xff, 0x40, 0x42, 0x0f, 0x00, //0x00000799 cmpq $1000000, %rdi + 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x000007a0 jb LBB1_68 + 0xba, 0x07, 0x00, 0x00, 0x00, //0x000007a6 movl $7, %edx + 0x48, 0x81, 0xff, 0x80, 0x96, 0x98, 0x00, //0x000007ab cmpq $10000000, %rdi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x000007b2 jb LBB1_68 + 0xba, 0x08, 0x00, 0x00, 0x00, //0x000007b8 movl $8, %edx + 0x48, 0x81, 0xff, 0x00, 0xe1, 0xf5, 0x05, //0x000007bd cmpq $100000000, %rdi + 0x0f, 0x83, 0x80, 0x04, 0x00, 0x00, //0x000007c4 jae LBB1_116 + //0x000007ca LBB1_68 + 0x4c, 0x89, 0xfe, //0x000007ca movq %r15, %rsi + 0xe8, 0x8e, 0x04, 0x00, 0x00, //0x000007cd callq _format_integer + 0x48, 0x89, 0xc3, //0x000007d2 movq %rax, %rbx + 0xe9, 0x45, 0x04, 0x00, 0x00, //0x000007d5 jmp LBB1_112 + //0x000007da LBB1_69 + 0x48, 0x29, 0xd6, //0x000007da subq %rdx, %rsi + 0x31, 0xff, //0x000007dd xorl %edi, %edi + 0xc5, 0xfd, 0x6f, 0x05, 0x39, 0xf9, 0xff, 0xff, //0x000007df vmovdqa $-1735(%rip), %ymm0 /* LCPI1_0+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000007e7 .p2align 4, 0x90 + //0x000007f0 LBB1_70 + 0xc5, 0xfe, 0x7f, 0x04, 0x38, //0x000007f0 vmovdqu %ymm0, (%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x20, //0x000007f5 vmovdqu %ymm0, $32(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x40, //0x000007fb vmovdqu %ymm0, $64(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x60, //0x00000801 vmovdqu %ymm0, $96(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x80, 0x00, 0x00, 0x00, //0x00000807 vmovdqu %ymm0, $128(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xa0, 0x00, 0x00, 0x00, //0x00000810 vmovdqu %ymm0, $160(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xc0, 0x00, 0x00, 0x00, //0x00000819 vmovdqu %ymm0, $192(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xe0, 0x00, 0x00, 0x00, //0x00000822 vmovdqu %ymm0, $224(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x00, 0x01, 0x00, 0x00, //0x0000082b vmovdqu %ymm0, $256(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x20, 0x01, 0x00, 0x00, //0x00000834 vmovdqu %ymm0, $288(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x40, 0x01, 0x00, 0x00, //0x0000083d vmovdqu %ymm0, $320(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x60, 0x01, 0x00, 0x00, //0x00000846 vmovdqu %ymm0, $352(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x80, 0x01, 0x00, 0x00, //0x0000084f vmovdqu %ymm0, $384(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xa0, 0x01, 0x00, 0x00, //0x00000858 vmovdqu %ymm0, $416(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xc0, 0x01, 0x00, 0x00, //0x00000861 vmovdqu %ymm0, $448(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xe0, 0x01, 0x00, 0x00, //0x0000086a vmovdqu %ymm0, $480(%rax,%rdi) + 0x48, 0x81, 0xc7, 0x00, 0x02, 0x00, 0x00, //0x00000873 addq $512, %rdi + 0x48, 0x83, 0xc6, 0xfc, //0x0000087a addq $-4, %rsi + 0x0f, 0x85, 0x6c, 0xff, 0xff, 0xff, //0x0000087e jne LBB1_70 + //0x00000884 LBB1_71 + 0x48, 0x85, 0xd2, //0x00000884 testq %rdx, %rdx + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00000887 je LBB1_74 + 0x48, 0x8d, 0x74, 0x07, 0x60, //0x0000088d leaq $96(%rdi,%rax), %rsi + 0x48, 0xf7, 0xda, //0x00000892 negq %rdx + 0xc5, 0xfd, 0x6f, 0x05, 0x83, 0xf8, 0xff, 0xff, //0x00000895 vmovdqa $-1917(%rip), %ymm0 /* LCPI1_0+0(%rip) */ + 0x90, 0x90, 0x90, //0x0000089d .p2align 4, 0x90 + //0x000008a0 LBB1_73 + 0xc5, 0xfe, 0x7f, 0x46, 0xa0, //0x000008a0 vmovdqu %ymm0, $-96(%rsi) + 0xc5, 0xfe, 0x7f, 0x46, 0xc0, //0x000008a5 vmovdqu %ymm0, $-64(%rsi) + 0xc5, 0xfe, 0x7f, 0x46, 0xe0, //0x000008aa vmovdqu %ymm0, $-32(%rsi) + 0xc5, 0xfe, 0x7f, 0x06, //0x000008af vmovdqu %ymm0, (%rsi) + 0x48, 0x83, 0xee, 0x80, //0x000008b3 subq $-128, %rsi + 0x48, 0xff, 0xc2, //0x000008b7 incq %rdx + 0x0f, 0x85, 0xe0, 0xff, 0xff, 0xff, //0x000008ba jne LBB1_73 + //0x000008c0 LBB1_74 + 0x4c, 0x39, 0xe1, //0x000008c0 cmpq %r12, %rcx + 0x0f, 0x84, 0x56, 0x03, 0x00, 0x00, //0x000008c3 je LBB1_112 + 0x48, 0x01, 0xc8, //0x000008c9 addq %rcx, %rax + 0x90, 0x90, 0x90, 0x90, //0x000008cc .p2align 4, 0x90 + //0x000008d0 LBB1_76 + 0xc6, 0x00, 0x30, //0x000008d0 movb $48, (%rax) + 0x48, 0xff, 0xc0, //0x000008d3 incq %rax + 0x48, 0x39, 0xc3, //0x000008d6 cmpq %rax, %rbx + 0x0f, 0x85, 0xf1, 0xff, 0xff, 0xff, //0x000008d9 jne LBB1_76 + 0xe9, 0x3b, 0x03, 0x00, 0x00, //0x000008df jmp LBB1_112 + //0x000008e4 LBB1_77 + 0x4b, 0x8d, 0x8c, 0x34, 0xe2, 0x01, 0x00, 0x00, //0x000008e4 leaq $482(%r12,%r14), %rcx + 0x4c, 0x89, 0xce, //0x000008ec movq %r9, %rsi + 0x48, 0x29, 0xde, //0x000008ef subq %rbx, %rsi + 0x31, 0xdb, //0x000008f2 xorl %ebx, %ebx + 0xc5, 0xfd, 0x6f, 0x05, 0x24, 0xf8, 0xff, 0xff, //0x000008f4 vmovdqa $-2012(%rip), %ymm0 /* LCPI1_0+0(%rip) */ + //0x000008fc LBB1_78 + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x20, 0xfe, 0xff, 0xff, //0x000008fc vmovdqu %ymm0, $-480(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x40, 0xfe, 0xff, 0xff, //0x00000905 vmovdqu %ymm0, $-448(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x60, 0xfe, 0xff, 0xff, //0x0000090e vmovdqu %ymm0, $-416(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x80, 0xfe, 0xff, 0xff, //0x00000917 vmovdqu %ymm0, $-384(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0xa0, 0xfe, 0xff, 0xff, //0x00000920 vmovdqu %ymm0, $-352(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0xc0, 0xfe, 0xff, 0xff, //0x00000929 vmovdqu %ymm0, $-320(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0xe0, 0xfe, 0xff, 0xff, //0x00000932 vmovdqu %ymm0, $-288(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x00, 0xff, 0xff, 0xff, //0x0000093b vmovdqu %ymm0, $-256(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x20, 0xff, 0xff, 0xff, //0x00000944 vmovdqu %ymm0, $-224(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x40, 0xff, 0xff, 0xff, //0x0000094d vmovdqu %ymm0, $-192(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x19, 0x60, 0xff, 0xff, 0xff, //0x00000956 vmovdqu %ymm0, $-160(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x19, 0x80, //0x0000095f vmovdqu %ymm0, $-128(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x19, 0xa0, //0x00000965 vmovdqu %ymm0, $-96(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x19, 0xc0, //0x0000096b vmovdqu %ymm0, $-64(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x19, 0xe0, //0x00000971 vmovdqu %ymm0, $-32(%rcx,%rbx) + 0xc5, 0xfe, 0x7f, 0x04, 0x19, //0x00000977 vmovdqu %ymm0, (%rcx,%rbx) + 0x48, 0x81, 0xc3, 0x00, 0x02, 0x00, 0x00, //0x0000097c addq $512, %rbx + 0x48, 0x83, 0xc6, 0x04, //0x00000983 addq $4, %rsi + 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00000987 jne LBB1_78 + //0x0000098d LBB1_79 + 0x4d, 0x85, 0xc9, //0x0000098d testq %r9, %r9 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00000990 je LBB1_82 + 0x4c, 0x01, 0xe3, //0x00000996 addq %r12, %rbx + 0x49, 0x8d, 0x4c, 0x1e, 0x62, //0x00000999 leaq $98(%r14,%rbx), %rcx + 0x49, 0xf7, 0xd9, //0x0000099e negq %r9 + 0xc5, 0xfd, 0x6f, 0x05, 0x77, 0xf7, 0xff, 0xff, //0x000009a1 vmovdqa $-2185(%rip), %ymm0 /* LCPI1_0+0(%rip) */ + //0x000009a9 LBB1_81 + 0xc5, 0xfe, 0x7f, 0x41, 0xa0, //0x000009a9 vmovdqu %ymm0, $-96(%rcx) + 0xc5, 0xfe, 0x7f, 0x41, 0xc0, //0x000009ae vmovdqu %ymm0, $-64(%rcx) + 0xc5, 0xfe, 0x7f, 0x41, 0xe0, //0x000009b3 vmovdqu %ymm0, $-32(%rcx) + 0xc5, 0xfe, 0x7f, 0x01, //0x000009b8 vmovdqu %ymm0, (%rcx) + 0x48, 0x83, 0xe9, 0x80, //0x000009bc subq $-128, %rcx + 0x49, 0xff, 0xc1, //0x000009c0 incq %r9 + 0x0f, 0x85, 0xe0, 0xff, 0xff, 0xff, //0x000009c3 jne LBB1_81 + //0x000009c9 LBB1_82 + 0x49, 0x01, 0xc7, //0x000009c9 addq %rax, %r15 + 0x49, 0x39, 0xc0, //0x000009cc cmpq %rax, %r8 + 0x4c, 0x89, 0xd3, //0x000009cf movq %r10, %rbx + 0x0f, 0x84, 0x19, 0x00, 0x00, 0x00, //0x000009d2 je LBB1_85 + //0x000009d8 LBB1_83 + 0x44, 0x89, 0xe9, //0x000009d8 movl %r13d, %ecx + 0xf7, 0xd9, //0x000009db negl %ecx + 0x90, 0x90, 0x90, //0x000009dd .p2align 4, 0x90 + //0x000009e0 LBB1_84 + 0x41, 0xc6, 0x07, 0x30, //0x000009e0 movb $48, (%r15) + 0x49, 0xff, 0xc7, //0x000009e4 incq %r15 + 0xff, 0xc0, //0x000009e7 incl %eax + 0x39, 0xc8, //0x000009e9 cmpl %ecx, %eax + 0x0f, 0x8c, 0xef, 0xff, 0xff, 0xff, //0x000009eb jl LBB1_84 + //0x000009f1 LBB1_85 + 0x4c, 0x89, 0xfe, //0x000009f1 movq %r15, %rsi + 0xc5, 0xf8, 0x77, //0x000009f4 vzeroupper + 0xe8, 0x54, 0x8d, 0x00, 0x00, //0x000009f7 callq _format_significand + 0x90, 0x90, 0x90, 0x90, //0x000009fc .p2align 4, 0x90 + //0x00000a00 LBB1_86 + 0x80, 0x78, 0xff, 0x30, //0x00000a00 cmpb $48, $-1(%rax) + 0x48, 0x8d, 0x40, 0xff, //0x00000a04 leaq $-1(%rax), %rax + 0x0f, 0x84, 0xf2, 0xff, 0xff, 0xff, //0x00000a08 je LBB1_86 + 0x48, 0x8d, 0x48, 0x01, //0x00000a0e leaq $1(%rax), %rcx + 0x45, 0x85, 0xed, //0x00000a12 testl %r13d, %r13d + 0x0f, 0x8e, 0x83, 0x00, 0x00, 0x00, //0x00000a15 jle LBB1_91 + 0x89, 0xca, //0x00000a1b movl %ecx, %edx + 0x44, 0x29, 0xfa, //0x00000a1d subl %r15d, %edx + 0x41, 0x39, 0xd5, //0x00000a20 cmpl %edx, %r13d + 0x0f, 0x8d, 0x21, 0x00, 0x00, 0x00, //0x00000a23 jge LBB1_92 + 0x43, 0x8d, 0x54, 0x3d, 0x00, //0x00000a29 leal (%r13,%r15), %edx + 0x29, 0xd1, //0x00000a2e subl %edx, %ecx + 0x48, 0x8d, 0x71, 0xff, //0x00000a30 leaq $-1(%rcx), %rsi + 0x89, 0xca, //0x00000a34 movl %ecx, %edx + 0x83, 0xe2, 0x03, //0x00000a36 andl $3, %edx + 0x48, 0x83, 0xfe, 0x03, //0x00000a39 cmpq $3, %rsi + 0x0f, 0x83, 0x63, 0x00, 0x00, 0x00, //0x00000a3d jae LBB1_96 + 0x31, 0xc9, //0x00000a43 xorl %ecx, %ecx + 0xe9, 0x7e, 0x00, 0x00, 0x00, //0x00000a45 jmp LBB1_99 + //0x00000a4a LBB1_92 + 0x0f, 0x8e, 0x4e, 0x00, 0x00, 0x00, //0x00000a4a jle LBB1_91 + 0x48, 0x89, 0xde, //0x00000a50 movq %rbx, %rsi + 0x45, 0x01, 0xfd, //0x00000a53 addl %r15d, %r13d + 0x41, 0x89, 0xc8, //0x00000a56 movl %ecx, %r8d + 0x41, 0xf7, 0xd0, //0x00000a59 notl %r8d + 0x45, 0x01, 0xe8, //0x00000a5c addl %r13d, %r8d + 0x31, 0xd2, //0x00000a5f xorl %edx, %edx + 0x48, 0x89, 0xcb, //0x00000a61 movq %rcx, %rbx + 0x41, 0x83, 0xf8, 0x7e, //0x00000a64 cmpl $126, %r8d + 0x0f, 0x86, 0x8f, 0x01, 0x00, 0x00, //0x00000a68 jbe LBB1_110 + 0x49, 0xff, 0xc0, //0x00000a6e incq %r8 + 0x48, 0x89, 0xf3, //0x00000a71 movq %rsi, %rbx + 0x4c, 0x21, 0xc3, //0x00000a74 andq %r8, %rbx + 0x48, 0x8d, 0x73, 0x80, //0x00000a77 leaq $-128(%rbx), %rsi + 0x48, 0x89, 0xf7, //0x00000a7b movq %rsi, %rdi + 0x48, 0xc1, 0xef, 0x07, //0x00000a7e shrq $7, %rdi + 0x48, 0xff, 0xc7, //0x00000a82 incq %rdi + 0x89, 0xfa, //0x00000a85 movl %edi, %edx + 0x83, 0xe2, 0x03, //0x00000a87 andl $3, %edx + 0x48, 0x81, 0xfe, 0x80, 0x01, 0x00, 0x00, //0x00000a8a cmpq $384, %rsi + 0x0f, 0x83, 0x75, 0x00, 0x00, 0x00, //0x00000a91 jae LBB1_104 + 0x31, 0xff, //0x00000a97 xorl %edi, %edi + 0xe9, 0x13, 0x01, 0x00, 0x00, //0x00000a99 jmp LBB1_106 + //0x00000a9e LBB1_91 + 0x48, 0x89, 0xcb, //0x00000a9e movq %rcx, %rbx + 0xe9, 0x79, 0x01, 0x00, 0x00, //0x00000aa1 jmp LBB1_112 + //0x00000aa6 LBB1_96 + 0x48, 0x89, 0xd6, //0x00000aa6 movq %rdx, %rsi + 0x48, 0x29, 0xce, //0x00000aa9 subq %rcx, %rsi + 0x31, 0xc9, //0x00000aac xorl %ecx, %ecx + 0x90, 0x90, //0x00000aae .p2align 4, 0x90 + //0x00000ab0 LBB1_97 + 0x8b, 0x7c, 0x08, 0xfd, //0x00000ab0 movl $-3(%rax,%rcx), %edi + 0x89, 0x7c, 0x08, 0xfe, //0x00000ab4 movl %edi, $-2(%rax,%rcx) + 0x48, 0x83, 0xc1, 0xfc, //0x00000ab8 addq $-4, %rcx + 0x48, 0x39, 0xce, //0x00000abc cmpq %rcx, %rsi + 0x0f, 0x85, 0xeb, 0xff, 0xff, 0xff, //0x00000abf jne LBB1_97 + 0x48, 0xf7, 0xd9, //0x00000ac5 negq %rcx + //0x00000ac8 LBB1_99 + 0x48, 0x85, 0xd2, //0x00000ac8 testq %rdx, %rdx + 0x0f, 0x84, 0x27, 0x00, 0x00, 0x00, //0x00000acb je LBB1_102 + 0x48, 0xf7, 0xd9, //0x00000ad1 negq %rcx + 0x48, 0xf7, 0xda, //0x00000ad4 negq %rdx + 0x31, 0xf6, //0x00000ad7 xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000ad9 .p2align 4, 0x90 + //0x00000ae0 LBB1_101 + 0x48, 0x8d, 0x3c, 0x31, //0x00000ae0 leaq (%rcx,%rsi), %rdi + 0x0f, 0xb6, 0x1c, 0x38, //0x00000ae4 movzbl (%rax,%rdi), %ebx + 0x88, 0x5c, 0x38, 0x01, //0x00000ae8 movb %bl, $1(%rax,%rdi) + 0x48, 0xff, 0xce, //0x00000aec decq %rsi + 0x48, 0x39, 0xf2, //0x00000aef cmpq %rsi, %rdx + 0x0f, 0x85, 0xe8, 0xff, 0xff, 0xff, //0x00000af2 jne LBB1_101 + //0x00000af8 LBB1_102 + 0x49, 0x63, 0xcd, //0x00000af8 movslq %r13d, %rcx + 0x41, 0xc6, 0x04, 0x0f, 0x2e, //0x00000afb movb $46, (%r15,%rcx) + 0x48, 0x83, 0xc0, 0x02, //0x00000b00 addq $2, %rax + 0x48, 0x89, 0xc3, //0x00000b04 movq %rax, %rbx + 0xe9, 0x13, 0x01, 0x00, 0x00, //0x00000b07 jmp LBB1_112 + //0x00000b0c LBB1_104 + 0x48, 0x89, 0xd6, //0x00000b0c movq %rdx, %rsi + 0x48, 0x29, 0xfe, //0x00000b0f subq %rdi, %rsi + 0x31, 0xff, //0x00000b12 xorl %edi, %edi + 0xc5, 0xfd, 0x6f, 0x05, 0x04, 0xf6, 0xff, 0xff, //0x00000b14 vmovdqa $-2556(%rip), %ymm0 /* LCPI1_0+0(%rip) */ + //0x00000b1c LBB1_105 + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x01, //0x00000b1c vmovdqu %ymm0, $1(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x21, //0x00000b22 vmovdqu %ymm0, $33(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x41, //0x00000b28 vmovdqu %ymm0, $65(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x44, 0x38, 0x61, //0x00000b2e vmovdqu %ymm0, $97(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x81, 0x00, 0x00, 0x00, //0x00000b34 vmovdqu %ymm0, $129(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xa1, 0x00, 0x00, 0x00, //0x00000b3d vmovdqu %ymm0, $161(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xc1, 0x00, 0x00, 0x00, //0x00000b46 vmovdqu %ymm0, $193(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xe1, 0x00, 0x00, 0x00, //0x00000b4f vmovdqu %ymm0, $225(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x01, 0x01, 0x00, 0x00, //0x00000b58 vmovdqu %ymm0, $257(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x21, 0x01, 0x00, 0x00, //0x00000b61 vmovdqu %ymm0, $289(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x41, 0x01, 0x00, 0x00, //0x00000b6a vmovdqu %ymm0, $321(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x61, 0x01, 0x00, 0x00, //0x00000b73 vmovdqu %ymm0, $353(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0x81, 0x01, 0x00, 0x00, //0x00000b7c vmovdqu %ymm0, $385(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xa1, 0x01, 0x00, 0x00, //0x00000b85 vmovdqu %ymm0, $417(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xc1, 0x01, 0x00, 0x00, //0x00000b8e vmovdqu %ymm0, $449(%rax,%rdi) + 0xc5, 0xfe, 0x7f, 0x84, 0x38, 0xe1, 0x01, 0x00, 0x00, //0x00000b97 vmovdqu %ymm0, $481(%rax,%rdi) + 0x48, 0x81, 0xc7, 0x00, 0x02, 0x00, 0x00, //0x00000ba0 addq $512, %rdi + 0x48, 0x83, 0xc6, 0x04, //0x00000ba7 addq $4, %rsi + 0x0f, 0x85, 0x6b, 0xff, 0xff, 0xff, //0x00000bab jne LBB1_105 + //0x00000bb1 LBB1_106 + 0x48, 0x89, 0xde, //0x00000bb1 movq %rbx, %rsi + 0x48, 0x8d, 0x5c, 0x18, 0x01, //0x00000bb4 leaq $1(%rax,%rbx), %rbx + 0x48, 0x85, 0xd2, //0x00000bb9 testq %rdx, %rdx + 0x0f, 0x84, 0x30, 0x00, 0x00, 0x00, //0x00000bbc je LBB1_109 + 0x48, 0x8d, 0x44, 0x38, 0x61, //0x00000bc2 leaq $97(%rax,%rdi), %rax + 0x48, 0xf7, 0xda, //0x00000bc7 negq %rdx + 0xc5, 0xfd, 0x6f, 0x05, 0x4e, 0xf5, 0xff, 0xff, //0x00000bca vmovdqa $-2738(%rip), %ymm0 /* LCPI1_0+0(%rip) */ + //0x00000bd2 LBB1_108 + 0xc5, 0xfe, 0x7f, 0x40, 0xa0, //0x00000bd2 vmovdqu %ymm0, $-96(%rax) + 0xc5, 0xfe, 0x7f, 0x40, 0xc0, //0x00000bd7 vmovdqu %ymm0, $-64(%rax) + 0xc5, 0xfe, 0x7f, 0x40, 0xe0, //0x00000bdc vmovdqu %ymm0, $-32(%rax) + 0xc5, 0xfe, 0x7f, 0x00, //0x00000be1 vmovdqu %ymm0, (%rax) + 0x48, 0x83, 0xe8, 0x80, //0x00000be5 subq $-128, %rax + 0x48, 0xff, 0xc2, //0x00000be9 incq %rdx + 0x0f, 0x85, 0xe0, 0xff, 0xff, 0xff, //0x00000bec jne LBB1_108 + //0x00000bf2 LBB1_109 + 0x89, 0xf2, //0x00000bf2 movl %esi, %edx + 0x49, 0x39, 0xf0, //0x00000bf4 cmpq %rsi, %r8 + 0x0f, 0x84, 0x22, 0x00, 0x00, 0x00, //0x00000bf7 je LBB1_112 + //0x00000bfd LBB1_110 + 0x41, 0x29, 0xd5, //0x00000bfd subl %edx, %r13d + 0x41, 0x29, 0xcd, //0x00000c00 subl %ecx, %r13d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c03 .p2align 4, 0x90 + //0x00000c10 LBB1_111 + 0xc6, 0x03, 0x30, //0x00000c10 movb $48, (%rbx) + 0x48, 0xff, 0xc3, //0x00000c13 incq %rbx + 0x41, 0xff, 0xcd, //0x00000c16 decl %r13d + 0x0f, 0x85, 0xf1, 0xff, 0xff, 0xff, //0x00000c19 jne LBB1_111 + //0x00000c1f LBB1_112 + 0x44, 0x29, 0xf3, //0x00000c1f subl %r14d, %ebx + //0x00000c22 LBB1_113 + 0x89, 0xd8, //0x00000c22 movl %ebx, %eax + 0x48, 0x83, 0xc4, 0x08, //0x00000c24 addq $8, %rsp + 0x5b, //0x00000c28 popq %rbx + 0x41, 0x5c, //0x00000c29 popq %r12 + 0x41, 0x5d, //0x00000c2b popq %r13 + 0x41, 0x5e, //0x00000c2d popq %r14 + 0x41, 0x5f, //0x00000c2f popq %r15 + 0x5d, //0x00000c31 popq %rbp + 0xc5, 0xf8, 0x77, //0x00000c32 vzeroupper + 0xc3, //0x00000c35 retq + //0x00000c36 LBB1_114 + 0x31, 0xdb, //0x00000c36 xorl %ebx, %ebx + 0xe9, 0xe5, 0xff, 0xff, 0xff, //0x00000c38 jmp LBB1_113 + //0x00000c3d LBB1_115 + 0xbb, 0xce, 0xfb, 0xff, 0xff, //0x00000c3d movl $-1074, %ebx + 0x48, 0x89, 0xd7, //0x00000c42 movq %rdx, %rdi + 0xe9, 0x8f, 0xf5, 0xff, 0xff, //0x00000c45 jmp LBB1_5 + //0x00000c4a LBB1_116 + 0x48, 0x81, 0xff, 0x00, 0xca, 0x9a, 0x3b, //0x00000c4a cmpq $1000000000, %rdi + 0xba, 0x0a, 0x00, 0x00, 0x00, //0x00000c51 movl $10, %edx + 0xe9, 0x34, 0xfa, 0xff, 0xff, //0x00000c56 jmp LBB1_50 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c5b .p2align 4, 0x90 + //0x00000c60 _format_integer + 0x55, //0x00000c60 pushq %rbp + 0x48, 0x89, 0xe5, //0x00000c61 movq %rsp, %rbp + 0x53, //0x00000c64 pushq %rbx + 0x41, 0x89, 0xd0, //0x00000c65 movl %edx, %r8d + 0x49, 0x01, 0xf0, //0x00000c68 addq %rsi, %r8 + 0x48, 0x89, 0xf8, //0x00000c6b movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x20, //0x00000c6e shrq $32, %rax + 0x0f, 0x84, 0xc3, 0x00, 0x00, 0x00, //0x00000c72 je LBB2_1 + 0x48, 0xb9, 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x00000c78 movabsq $-6067343680855748867, %rcx + 0x48, 0x89, 0xf8, //0x00000c82 movq %rdi, %rax + 0x48, 0xf7, 0xe1, //0x00000c85 mulq %rcx + 0x48, 0xc1, 0xea, 0x1a, //0x00000c88 shrq $26, %rdx + 0x69, 0xca, 0x00, 0x1f, 0x0a, 0xfa, //0x00000c8c imull $-100000000, %edx, %ecx + 0x01, 0xf9, //0x00000c92 addl %edi, %ecx + 0x41, 0xb9, 0x59, 0x17, 0xb7, 0xd1, //0x00000c94 movl $3518437209, %r9d + 0x48, 0x89, 0xc8, //0x00000c9a movq %rcx, %rax + 0x49, 0x0f, 0xaf, 0xc1, //0x00000c9d imulq %r9, %rax + 0x48, 0xc1, 0xe8, 0x2d, //0x00000ca1 shrq $45, %rax + 0x69, 0xf8, 0x10, 0x27, 0x00, 0x00, //0x00000ca5 imull $10000, %eax, %edi + 0x29, 0xf9, //0x00000cab subl %edi, %ecx + 0x48, 0x89, 0xc7, //0x00000cad movq %rax, %rdi + 0x49, 0x0f, 0xaf, 0xf9, //0x00000cb0 imulq %r9, %rdi + 0x48, 0xc1, 0xef, 0x2d, //0x00000cb4 shrq $45, %rdi + 0x69, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00000cb8 imull $10000, %edi, %edi + 0x29, 0xf8, //0x00000cbe subl %edi, %eax + 0x0f, 0xb7, 0xf9, //0x00000cc0 movzwl %cx, %edi + 0xc1, 0xef, 0x02, //0x00000cc3 shrl $2, %edi + 0x44, 0x69, 0xcf, 0x7b, 0x14, 0x00, 0x00, //0x00000cc6 imull $5243, %edi, %r9d + 0x41, 0xc1, 0xe9, 0x11, //0x00000ccd shrl $17, %r9d + 0x41, 0x6b, 0xf9, 0x64, //0x00000cd1 imull $100, %r9d, %edi + 0x29, 0xf9, //0x00000cd5 subl %edi, %ecx + 0x44, 0x0f, 0xb7, 0xd1, //0x00000cd7 movzwl %cx, %r10d + 0x0f, 0xb7, 0xf8, //0x00000cdb movzwl %ax, %edi + 0xc1, 0xef, 0x02, //0x00000cde shrl $2, %edi + 0x69, 0xff, 0x7b, 0x14, 0x00, 0x00, //0x00000ce1 imull $5243, %edi, %edi + 0xc1, 0xef, 0x11, //0x00000ce7 shrl $17, %edi + 0x6b, 0xcf, 0x64, //0x00000cea imull $100, %edi, %ecx + 0x29, 0xc8, //0x00000ced subl %ecx, %eax + 0x44, 0x0f, 0xb7, 0xd8, //0x00000cef movzwl %ax, %r11d + 0x48, 0x8d, 0x0d, 0xa6, 0xbe, 0x00, 0x00, //0x00000cf3 leaq $48806(%rip), %rcx /* _Digits+0(%rip) */ + 0x42, 0x0f, 0xb7, 0x04, 0x51, //0x00000cfa movzwl (%rcx,%r10,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfe, //0x00000cff movw %ax, $-2(%r8) + 0x42, 0x0f, 0xb7, 0x04, 0x49, //0x00000d04 movzwl (%rcx,%r9,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfc, //0x00000d09 movw %ax, $-4(%r8) + 0x42, 0x0f, 0xb7, 0x04, 0x59, //0x00000d0e movzwl (%rcx,%r11,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfa, //0x00000d13 movw %ax, $-6(%r8) + 0x4d, 0x8d, 0x58, 0xf8, //0x00000d18 leaq $-8(%r8), %r11 + 0x0f, 0xb7, 0x0c, 0x79, //0x00000d1c movzwl (%rcx,%rdi,2), %ecx + 0x66, 0x41, 0x89, 0x48, 0xf8, //0x00000d20 movw %cx, $-8(%r8) + 0x48, 0x89, 0xd7, //0x00000d25 movq %rdx, %rdi + 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00000d28 cmpl $10000, %edi + 0x0f, 0x83, 0x16, 0x00, 0x00, 0x00, //0x00000d2e jae LBB2_5 + //0x00000d34 LBB2_4 + 0x89, 0xfa, //0x00000d34 movl %edi, %edx + 0xe9, 0x6d, 0x00, 0x00, 0x00, //0x00000d36 jmp LBB2_7 + //0x00000d3b LBB2_1 + 0x4d, 0x89, 0xc3, //0x00000d3b movq %r8, %r11 + 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00000d3e cmpl $10000, %edi + 0x0f, 0x82, 0xea, 0xff, 0xff, 0xff, //0x00000d44 jb LBB2_4 + //0x00000d4a LBB2_5 + 0x41, 0xb9, 0x59, 0x17, 0xb7, 0xd1, //0x00000d4a movl $3518437209, %r9d + 0x4c, 0x8d, 0x15, 0x49, 0xbe, 0x00, 0x00, //0x00000d50 leaq $48713(%rip), %r10 /* _Digits+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000d57 .p2align 4, 0x90 + //0x00000d60 LBB2_6 + 0x89, 0xfa, //0x00000d60 movl %edi, %edx + 0x49, 0x0f, 0xaf, 0xd1, //0x00000d62 imulq %r9, %rdx + 0x48, 0xc1, 0xea, 0x2d, //0x00000d66 shrq $45, %rdx + 0x69, 0xca, 0xf0, 0xd8, 0xff, 0xff, //0x00000d6a imull $-10000, %edx, %ecx + 0x01, 0xf9, //0x00000d70 addl %edi, %ecx + 0x48, 0x69, 0xc1, 0x1f, 0x85, 0xeb, 0x51, //0x00000d72 imulq $1374389535, %rcx, %rax + 0x48, 0xc1, 0xe8, 0x25, //0x00000d79 shrq $37, %rax + 0x6b, 0xd8, 0x64, //0x00000d7d imull $100, %eax, %ebx + 0x29, 0xd9, //0x00000d80 subl %ebx, %ecx + 0x41, 0x0f, 0xb7, 0x0c, 0x4a, //0x00000d82 movzwl (%r10,%rcx,2), %ecx + 0x66, 0x41, 0x89, 0x4b, 0xfe, //0x00000d87 movw %cx, $-2(%r11) + 0x41, 0x0f, 0xb7, 0x04, 0x42, //0x00000d8c movzwl (%r10,%rax,2), %eax + 0x66, 0x41, 0x89, 0x43, 0xfc, //0x00000d91 movw %ax, $-4(%r11) + 0x49, 0x83, 0xc3, 0xfc, //0x00000d96 addq $-4, %r11 + 0x81, 0xff, 0xff, 0xe0, 0xf5, 0x05, //0x00000d9a cmpl $99999999, %edi + 0x89, 0xd7, //0x00000da0 movl %edx, %edi + 0x0f, 0x87, 0xb8, 0xff, 0xff, 0xff, //0x00000da2 ja LBB2_6 + //0x00000da8 LBB2_7 + 0x83, 0xfa, 0x64, //0x00000da8 cmpl $100, %edx + 0x0f, 0x82, 0x2d, 0x00, 0x00, 0x00, //0x00000dab jb LBB2_9 + 0x0f, 0xb7, 0xc2, //0x00000db1 movzwl %dx, %eax + 0xc1, 0xe8, 0x02, //0x00000db4 shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00000db7 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00000dbd shrl $17, %eax + 0x6b, 0xc8, 0x64, //0x00000dc0 imull $100, %eax, %ecx + 0x29, 0xca, //0x00000dc3 subl %ecx, %edx + 0x0f, 0xb7, 0xca, //0x00000dc5 movzwl %dx, %ecx + 0x48, 0x8d, 0x15, 0xd1, 0xbd, 0x00, 0x00, //0x00000dc8 leaq $48593(%rip), %rdx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4a, //0x00000dcf movzwl (%rdx,%rcx,2), %ecx + 0x66, 0x41, 0x89, 0x4b, 0xfe, //0x00000dd3 movw %cx, $-2(%r11) + 0x49, 0x83, 0xc3, 0xfe, //0x00000dd8 addq $-2, %r11 + 0x89, 0xc2, //0x00000ddc movl %eax, %edx + //0x00000dde LBB2_9 + 0x83, 0xfa, 0x0a, //0x00000dde cmpl $10, %edx + 0x0f, 0x82, 0x18, 0x00, 0x00, 0x00, //0x00000de1 jb LBB2_11 + 0x89, 0xd0, //0x00000de7 movl %edx, %eax + 0x48, 0x8d, 0x0d, 0xb0, 0xbd, 0x00, 0x00, //0x00000de9 leaq $48560(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x00000df0 movzwl (%rcx,%rax,2), %eax + 0x66, 0x41, 0x89, 0x43, 0xfe, //0x00000df4 movw %ax, $-2(%r11) + 0x4c, 0x89, 0xc0, //0x00000df9 movq %r8, %rax + 0x5b, //0x00000dfc popq %rbx + 0x5d, //0x00000dfd popq %rbp + 0xc3, //0x00000dfe retq + //0x00000dff LBB2_11 + 0x80, 0xc2, 0x30, //0x00000dff addb $48, %dl + 0x88, 0x16, //0x00000e02 movb %dl, (%rsi) + 0x4c, 0x89, 0xc0, //0x00000e04 movq %r8, %rax + 0x5b, //0x00000e07 popq %rbx + 0x5d, //0x00000e08 popq %rbp + 0xc3, //0x00000e09 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000e0a .p2align 4, 0x90 + //0x00000e10 _i64toa + 0x48, 0x85, 0xf6, //0x00000e10 testq %rsi, %rsi + 0x0f, 0x88, 0x05, 0x00, 0x00, 0x00, //0x00000e13 js LBB3_1 + 0xe9, 0x62, 0x00, 0x00, 0x00, //0x00000e19 jmp _u64toa + //0x00000e1e LBB3_1 + 0x55, //0x00000e1e pushq %rbp + 0x48, 0x89, 0xe5, //0x00000e1f movq %rsp, %rbp + 0xc6, 0x07, 0x2d, //0x00000e22 movb $45, (%rdi) + 0x48, 0xff, 0xc7, //0x00000e25 incq %rdi + 0x48, 0xf7, 0xde, //0x00000e28 negq %rsi + 0xe8, 0x50, 0x00, 0x00, 0x00, //0x00000e2b callq _u64toa + 0xff, 0xc0, //0x00000e30 incl %eax + 0x5d, //0x00000e32 popq %rbp + 0xc3, //0x00000e33 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00000e34 .p2align 4, 0x00 + //0x00000e40 LCPI4_0 + 0x59, 0x17, 0xb7, 0xd1, 0x00, 0x00, 0x00, 0x00, //0x00000e40 .quad 3518437209 + 0x59, 0x17, 0xb7, 0xd1, 0x00, 0x00, 0x00, 0x00, //0x00000e48 .quad 3518437209 + //0x00000e50 LCPI4_3 + 0x0a, 0x00, //0x00000e50 .word 10 + 0x0a, 0x00, //0x00000e52 .word 10 + 0x0a, 0x00, //0x00000e54 .word 10 + 0x0a, 0x00, //0x00000e56 .word 10 + 0x0a, 0x00, //0x00000e58 .word 10 + 0x0a, 0x00, //0x00000e5a .word 10 + 0x0a, 0x00, //0x00000e5c .word 10 + 0x0a, 0x00, //0x00000e5e .word 10 + //0x00000e60 LCPI4_4 + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x00000e60 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + //0x00000e70 .p2align 3, 0x00 + //0x00000e70 LCPI4_1 + 0xc5, 0x20, 0x7b, 0x14, 0x34, 0x33, 0x00, 0x80, //0x00000e70 .quad -9223315738079846203 + //0x00000e78 LCPI4_2 + 0x80, 0x00, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, //0x00000e78 .quad -9223336852348469120 + //0x00000e80 .p2align 4, 0x90 + //0x00000e80 _u64toa + 0x55, //0x00000e80 pushq %rbp + 0x48, 0x89, 0xe5, //0x00000e81 movq %rsp, %rbp + 0x48, 0x81, 0xfe, 0x0f, 0x27, 0x00, 0x00, //0x00000e84 cmpq $9999, %rsi + 0x0f, 0x87, 0xa2, 0x00, 0x00, 0x00, //0x00000e8b ja LBB4_8 + 0x0f, 0xb7, 0xc6, //0x00000e91 movzwl %si, %eax + 0xc1, 0xe8, 0x02, //0x00000e94 shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00000e97 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00000e9d shrl $17, %eax + 0x48, 0x8d, 0x14, 0x00, //0x00000ea0 leaq (%rax,%rax), %rdx + 0x6b, 0xc0, 0x64, //0x00000ea4 imull $100, %eax, %eax + 0x89, 0xf1, //0x00000ea7 movl %esi, %ecx + 0x29, 0xc1, //0x00000ea9 subl %eax, %ecx + 0x0f, 0xb7, 0xc1, //0x00000eab movzwl %cx, %eax + 0x48, 0x01, 0xc0, //0x00000eae addq %rax, %rax + 0x81, 0xfe, 0xe8, 0x03, 0x00, 0x00, //0x00000eb1 cmpl $1000, %esi + 0x0f, 0x82, 0x16, 0x00, 0x00, 0x00, //0x00000eb7 jb LBB4_3 + 0x48, 0x8d, 0x0d, 0xdc, 0xbc, 0x00, 0x00, //0x00000ebd leaq $48348(%rip), %rcx /* _Digits+0(%rip) */ + 0x8a, 0x0c, 0x0a, //0x00000ec4 movb (%rdx,%rcx), %cl + 0x88, 0x0f, //0x00000ec7 movb %cl, (%rdi) + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00000ec9 movl $1, %ecx + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00000ece jmp LBB4_4 + //0x00000ed3 LBB4_3 + 0x31, 0xc9, //0x00000ed3 xorl %ecx, %ecx + 0x83, 0xfe, 0x64, //0x00000ed5 cmpl $100, %esi + 0x0f, 0x82, 0x45, 0x00, 0x00, 0x00, //0x00000ed8 jb LBB4_5 + //0x00000ede LBB4_4 + 0x0f, 0xb7, 0xd2, //0x00000ede movzwl %dx, %edx + 0x48, 0x83, 0xca, 0x01, //0x00000ee1 orq $1, %rdx + 0x48, 0x8d, 0x35, 0xb4, 0xbc, 0x00, 0x00, //0x00000ee5 leaq $48308(%rip), %rsi /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x32, //0x00000eec movb (%rdx,%rsi), %dl + 0x89, 0xce, //0x00000eef movl %ecx, %esi + 0xff, 0xc1, //0x00000ef1 incl %ecx + 0x88, 0x14, 0x37, //0x00000ef3 movb %dl, (%rdi,%rsi) + //0x00000ef6 LBB4_6 + 0x48, 0x8d, 0x15, 0xa3, 0xbc, 0x00, 0x00, //0x00000ef6 leaq $48291(%rip), %rdx /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x10, //0x00000efd movb (%rax,%rdx), %dl + 0x89, 0xce, //0x00000f00 movl %ecx, %esi + 0xff, 0xc1, //0x00000f02 incl %ecx + 0x88, 0x14, 0x37, //0x00000f04 movb %dl, (%rdi,%rsi) + //0x00000f07 LBB4_7 + 0x0f, 0xb7, 0xc0, //0x00000f07 movzwl %ax, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00000f0a orq $1, %rax + 0x48, 0x8d, 0x15, 0x8b, 0xbc, 0x00, 0x00, //0x00000f0e leaq $48267(%rip), %rdx /* _Digits+0(%rip) */ + 0x8a, 0x04, 0x10, //0x00000f15 movb (%rax,%rdx), %al + 0x89, 0xca, //0x00000f18 movl %ecx, %edx + 0xff, 0xc1, //0x00000f1a incl %ecx + 0x88, 0x04, 0x17, //0x00000f1c movb %al, (%rdi,%rdx) + 0x89, 0xc8, //0x00000f1f movl %ecx, %eax + 0x5d, //0x00000f21 popq %rbp + 0xc3, //0x00000f22 retq + //0x00000f23 LBB4_5 + 0x31, 0xc9, //0x00000f23 xorl %ecx, %ecx + 0x83, 0xfe, 0x0a, //0x00000f25 cmpl $10, %esi + 0x0f, 0x83, 0xc8, 0xff, 0xff, 0xff, //0x00000f28 jae LBB4_6 + 0xe9, 0xd4, 0xff, 0xff, 0xff, //0x00000f2e jmp LBB4_7 + //0x00000f33 LBB4_8 + 0x48, 0x81, 0xfe, 0xff, 0xe0, 0xf5, 0x05, //0x00000f33 cmpq $99999999, %rsi + 0x0f, 0x87, 0x1e, 0x01, 0x00, 0x00, //0x00000f3a ja LBB4_16 + 0x89, 0xf0, //0x00000f40 movl %esi, %eax + 0xba, 0x59, 0x17, 0xb7, 0xd1, //0x00000f42 movl $3518437209, %edx + 0x48, 0x0f, 0xaf, 0xd0, //0x00000f47 imulq %rax, %rdx + 0x48, 0xc1, 0xea, 0x2d, //0x00000f4b shrq $45, %rdx + 0x44, 0x69, 0xc2, 0x10, 0x27, 0x00, 0x00, //0x00000f4f imull $10000, %edx, %r8d + 0x89, 0xf1, //0x00000f56 movl %esi, %ecx + 0x44, 0x29, 0xc1, //0x00000f58 subl %r8d, %ecx + 0x4c, 0x69, 0xd0, 0x83, 0xde, 0x1b, 0x43, //0x00000f5b imulq $1125899907, %rax, %r10 + 0x49, 0xc1, 0xea, 0x31, //0x00000f62 shrq $49, %r10 + 0x41, 0x83, 0xe2, 0xfe, //0x00000f66 andl $-2, %r10d + 0x0f, 0xb7, 0xc2, //0x00000f6a movzwl %dx, %eax + 0xc1, 0xe8, 0x02, //0x00000f6d shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00000f70 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00000f76 shrl $17, %eax + 0x6b, 0xc0, 0x64, //0x00000f79 imull $100, %eax, %eax + 0x29, 0xc2, //0x00000f7c subl %eax, %edx + 0x44, 0x0f, 0xb7, 0xca, //0x00000f7e movzwl %dx, %r9d + 0x4d, 0x01, 0xc9, //0x00000f82 addq %r9, %r9 + 0x0f, 0xb7, 0xc1, //0x00000f85 movzwl %cx, %eax + 0xc1, 0xe8, 0x02, //0x00000f88 shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00000f8b imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00000f91 shrl $17, %eax + 0x4c, 0x8d, 0x04, 0x00, //0x00000f94 leaq (%rax,%rax), %r8 + 0x6b, 0xc0, 0x64, //0x00000f98 imull $100, %eax, %eax + 0x29, 0xc1, //0x00000f9b subl %eax, %ecx + 0x44, 0x0f, 0xb7, 0xd9, //0x00000f9d movzwl %cx, %r11d + 0x4d, 0x01, 0xdb, //0x00000fa1 addq %r11, %r11 + 0x81, 0xfe, 0x80, 0x96, 0x98, 0x00, //0x00000fa4 cmpl $10000000, %esi + 0x0f, 0x82, 0x17, 0x00, 0x00, 0x00, //0x00000faa jb LBB4_11 + 0x48, 0x8d, 0x05, 0xe9, 0xbb, 0x00, 0x00, //0x00000fb0 leaq $48105(%rip), %rax /* _Digits+0(%rip) */ + 0x41, 0x8a, 0x04, 0x02, //0x00000fb7 movb (%r10,%rax), %al + 0x88, 0x07, //0x00000fbb movb %al, (%rdi) + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00000fbd movl $1, %ecx + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00000fc2 jmp LBB4_12 + //0x00000fc7 LBB4_11 + 0x31, 0xc9, //0x00000fc7 xorl %ecx, %ecx + 0x81, 0xfe, 0x40, 0x42, 0x0f, 0x00, //0x00000fc9 cmpl $1000000, %esi + 0x0f, 0x82, 0x76, 0x00, 0x00, 0x00, //0x00000fcf jb LBB4_13 + //0x00000fd5 LBB4_12 + 0x44, 0x89, 0xd0, //0x00000fd5 movl %r10d, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00000fd8 orq $1, %rax + 0x48, 0x8d, 0x35, 0xbd, 0xbb, 0x00, 0x00, //0x00000fdc leaq $48061(%rip), %rsi /* _Digits+0(%rip) */ + 0x8a, 0x04, 0x30, //0x00000fe3 movb (%rax,%rsi), %al + 0x89, 0xce, //0x00000fe6 movl %ecx, %esi + 0xff, 0xc1, //0x00000fe8 incl %ecx + 0x88, 0x04, 0x37, //0x00000fea movb %al, (%rdi,%rsi) + //0x00000fed LBB4_14 + 0x48, 0x8d, 0x05, 0xac, 0xbb, 0x00, 0x00, //0x00000fed leaq $48044(%rip), %rax /* _Digits+0(%rip) */ + 0x41, 0x8a, 0x04, 0x01, //0x00000ff4 movb (%r9,%rax), %al + 0x89, 0xce, //0x00000ff8 movl %ecx, %esi + 0xff, 0xc1, //0x00000ffa incl %ecx + 0x88, 0x04, 0x37, //0x00000ffc movb %al, (%rdi,%rsi) + //0x00000fff LBB4_15 + 0x41, 0x0f, 0xb7, 0xc1, //0x00000fff movzwl %r9w, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00001003 orq $1, %rax + 0x48, 0x8d, 0x35, 0x92, 0xbb, 0x00, 0x00, //0x00001007 leaq $48018(%rip), %rsi /* _Digits+0(%rip) */ + 0x8a, 0x04, 0x30, //0x0000100e movb (%rax,%rsi), %al + 0x89, 0xca, //0x00001011 movl %ecx, %edx + 0x88, 0x04, 0x3a, //0x00001013 movb %al, (%rdx,%rdi) + 0x41, 0x8a, 0x04, 0x30, //0x00001016 movb (%r8,%rsi), %al + 0x88, 0x44, 0x3a, 0x01, //0x0000101a movb %al, $1(%rdx,%rdi) + 0x41, 0x0f, 0xb7, 0xc0, //0x0000101e movzwl %r8w, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00001022 orq $1, %rax + 0x8a, 0x04, 0x30, //0x00001026 movb (%rax,%rsi), %al + 0x88, 0x44, 0x3a, 0x02, //0x00001029 movb %al, $2(%rdx,%rdi) + 0x41, 0x8a, 0x04, 0x33, //0x0000102d movb (%r11,%rsi), %al + 0x88, 0x44, 0x3a, 0x03, //0x00001031 movb %al, $3(%rdx,%rdi) + 0x41, 0x0f, 0xb7, 0xc3, //0x00001035 movzwl %r11w, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00001039 orq $1, %rax + 0x8a, 0x04, 0x30, //0x0000103d movb (%rax,%rsi), %al + 0x83, 0xc1, 0x05, //0x00001040 addl $5, %ecx + 0x88, 0x44, 0x3a, 0x04, //0x00001043 movb %al, $4(%rdx,%rdi) + 0x89, 0xc8, //0x00001047 movl %ecx, %eax + 0x5d, //0x00001049 popq %rbp + 0xc3, //0x0000104a retq + //0x0000104b LBB4_13 + 0x31, 0xc9, //0x0000104b xorl %ecx, %ecx + 0x81, 0xfe, 0xa0, 0x86, 0x01, 0x00, //0x0000104d cmpl $100000, %esi + 0x0f, 0x83, 0x94, 0xff, 0xff, 0xff, //0x00001053 jae LBB4_14 + 0xe9, 0xa1, 0xff, 0xff, 0xff, //0x00001059 jmp LBB4_15 + //0x0000105e LBB4_16 + 0x48, 0xb8, 0xff, 0xff, 0xc0, 0x6f, 0xf2, 0x86, 0x23, 0x00, //0x0000105e movabsq $9999999999999999, %rax + 0x48, 0x39, 0xc6, //0x00001068 cmpq %rax, %rsi + 0x0f, 0x87, 0x07, 0x01, 0x00, 0x00, //0x0000106b ja LBB4_18 + 0x48, 0xb9, 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x00001071 movabsq $-6067343680855748867, %rcx + 0x48, 0x89, 0xf0, //0x0000107b movq %rsi, %rax + 0x48, 0xf7, 0xe1, //0x0000107e mulq %rcx + 0x48, 0xc1, 0xea, 0x1a, //0x00001081 shrq $26, %rdx + 0x69, 0xc2, 0x00, 0xe1, 0xf5, 0x05, //0x00001085 imull $100000000, %edx, %eax + 0x29, 0xc6, //0x0000108b subl %eax, %esi + 0xc5, 0xf9, 0x6e, 0xc2, //0x0000108d vmovd %edx, %xmm0 + 0xc5, 0xf9, 0x6f, 0x0d, 0xa7, 0xfd, 0xff, 0xff, //0x00001091 vmovdqa $-601(%rip), %xmm1 /* LCPI4_0+0(%rip) */ + 0xc5, 0xf9, 0xf4, 0xd1, //0x00001099 vpmuludq %xmm1, %xmm0, %xmm2 + 0xc5, 0xe9, 0x73, 0xd2, 0x2d, //0x0000109d vpsrlq $45, %xmm2, %xmm2 + 0xb8, 0x10, 0x27, 0x00, 0x00, //0x000010a2 movl $10000, %eax + 0xc4, 0xe1, 0xf9, 0x6e, 0xd8, //0x000010a7 vmovq %rax, %xmm3 + 0xc5, 0xe9, 0xf4, 0xe3, //0x000010ac vpmuludq %xmm3, %xmm2, %xmm4 + 0xc5, 0xf9, 0xfa, 0xc4, //0x000010b0 vpsubd %xmm4, %xmm0, %xmm0 + 0xc5, 0xe9, 0x61, 0xc0, //0x000010b4 vpunpcklwd %xmm0, %xmm2, %xmm0 + 0xc5, 0xf9, 0x73, 0xf0, 0x02, //0x000010b8 vpsllq $2, %xmm0, %xmm0 + 0xc5, 0xfb, 0x70, 0xc0, 0x50, //0x000010bd vpshuflw $80, %xmm0, %xmm0 + 0xc5, 0xf9, 0x70, 0xc0, 0x50, //0x000010c2 vpshufd $80, %xmm0, %xmm0 + 0xc4, 0xe2, 0x79, 0x59, 0x15, 0xa0, 0xfd, 0xff, 0xff, //0x000010c7 vpbroadcastq $-608(%rip), %xmm2 /* LCPI4_1+0(%rip) */ + 0xc4, 0xe2, 0x79, 0x59, 0x25, 0x9f, 0xfd, 0xff, 0xff, //0x000010d0 vpbroadcastq $-609(%rip), %xmm4 /* LCPI4_2+0(%rip) */ + 0xc5, 0xf9, 0xe4, 0xc2, //0x000010d9 vpmulhuw %xmm2, %xmm0, %xmm0 + 0xc5, 0xf9, 0xe4, 0xc4, //0x000010dd vpmulhuw %xmm4, %xmm0, %xmm0 + 0xc5, 0xf9, 0x6f, 0x2d, 0x67, 0xfd, 0xff, 0xff, //0x000010e1 vmovdqa $-665(%rip), %xmm5 /* LCPI4_3+0(%rip) */ + 0xc5, 0xf9, 0xd5, 0xf5, //0x000010e9 vpmullw %xmm5, %xmm0, %xmm6 + 0xc5, 0xc9, 0x73, 0xf6, 0x10, //0x000010ed vpsllq $16, %xmm6, %xmm6 + 0xc5, 0xf9, 0xf9, 0xc6, //0x000010f2 vpsubw %xmm6, %xmm0, %xmm0 + 0xc5, 0xf9, 0x6e, 0xf6, //0x000010f6 vmovd %esi, %xmm6 + 0xc5, 0xc9, 0xf4, 0xc9, //0x000010fa vpmuludq %xmm1, %xmm6, %xmm1 + 0xc5, 0xf1, 0x73, 0xd1, 0x2d, //0x000010fe vpsrlq $45, %xmm1, %xmm1 + 0xc5, 0xf1, 0xf4, 0xdb, //0x00001103 vpmuludq %xmm3, %xmm1, %xmm3 + 0xc5, 0xc9, 0xfa, 0xdb, //0x00001107 vpsubd %xmm3, %xmm6, %xmm3 + 0xc5, 0xf1, 0x61, 0xcb, //0x0000110b vpunpcklwd %xmm3, %xmm1, %xmm1 + 0xc5, 0xf1, 0x73, 0xf1, 0x02, //0x0000110f vpsllq $2, %xmm1, %xmm1 + 0xc5, 0xfb, 0x70, 0xc9, 0x50, //0x00001114 vpshuflw $80, %xmm1, %xmm1 + 0xc5, 0xf9, 0x70, 0xc9, 0x50, //0x00001119 vpshufd $80, %xmm1, %xmm1 + 0xc5, 0xf1, 0xe4, 0xca, //0x0000111e vpmulhuw %xmm2, %xmm1, %xmm1 + 0xc5, 0xf1, 0xe4, 0xcc, //0x00001122 vpmulhuw %xmm4, %xmm1, %xmm1 + 0xc5, 0xf1, 0xd5, 0xd5, //0x00001126 vpmullw %xmm5, %xmm1, %xmm2 + 0xc5, 0xe9, 0x73, 0xf2, 0x10, //0x0000112a vpsllq $16, %xmm2, %xmm2 + 0xc5, 0xf1, 0xf9, 0xca, //0x0000112f vpsubw %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x67, 0xc1, //0x00001133 vpackuswb %xmm1, %xmm0, %xmm0 + 0xc5, 0xf9, 0xfc, 0x0d, 0x21, 0xfd, 0xff, 0xff, //0x00001137 vpaddb $-735(%rip), %xmm0, %xmm1 /* LCPI4_4+0(%rip) */ + 0xc5, 0xe9, 0xef, 0xd2, //0x0000113f vpxor %xmm2, %xmm2, %xmm2 + 0xc5, 0xf9, 0x74, 0xc2, //0x00001143 vpcmpeqb %xmm2, %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc0, //0x00001147 vpmovmskb %xmm0, %eax + 0x0d, 0x00, 0x80, 0x00, 0x00, //0x0000114b orl $32768, %eax + 0x35, 0xff, 0x7f, 0xff, 0xff, //0x00001150 xorl $-32769, %eax + 0x0f, 0xbc, 0xc0, //0x00001155 bsfl %eax, %eax + 0xb9, 0x10, 0x00, 0x00, 0x00, //0x00001158 movl $16, %ecx + 0x29, 0xc1, //0x0000115d subl %eax, %ecx + 0x48, 0xc1, 0xe0, 0x04, //0x0000115f shlq $4, %rax + 0x48, 0x8d, 0x15, 0x96, 0xe1, 0x00, 0x00, //0x00001163 leaq $57750(%rip), %rdx /* _VecShiftShuffles+0(%rip) */ + 0xc4, 0xe2, 0x71, 0x00, 0x04, 0x10, //0x0000116a vpshufb (%rax,%rdx), %xmm1, %xmm0 + 0xc5, 0xfa, 0x7f, 0x07, //0x00001170 vmovdqu %xmm0, (%rdi) + 0x89, 0xc8, //0x00001174 movl %ecx, %eax + 0x5d, //0x00001176 popq %rbp + 0xc3, //0x00001177 retq + //0x00001178 LBB4_18 + 0x48, 0xb9, 0x57, 0x78, 0x13, 0xb1, 0x2f, 0x65, 0xa5, 0x39, //0x00001178 movabsq $4153837486827862103, %rcx + 0x48, 0x89, 0xf0, //0x00001182 movq %rsi, %rax + 0x48, 0xf7, 0xe1, //0x00001185 mulq %rcx + 0x48, 0xc1, 0xea, 0x33, //0x00001188 shrq $51, %rdx + 0x48, 0xb8, 0x00, 0x00, 0xc1, 0x6f, 0xf2, 0x86, 0x23, 0x00, //0x0000118c movabsq $10000000000000000, %rax + 0x48, 0x0f, 0xaf, 0xc2, //0x00001196 imulq %rdx, %rax + 0x48, 0x29, 0xc6, //0x0000119a subq %rax, %rsi + 0x83, 0xfa, 0x09, //0x0000119d cmpl $9, %edx + 0x0f, 0x87, 0x0f, 0x00, 0x00, 0x00, //0x000011a0 ja LBB4_20 + 0x80, 0xc2, 0x30, //0x000011a6 addb $48, %dl + 0x88, 0x17, //0x000011a9 movb %dl, (%rdi) + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x000011ab movl $1, %ecx + 0xe9, 0xba, 0x00, 0x00, 0x00, //0x000011b0 jmp LBB4_25 + //0x000011b5 LBB4_20 + 0x83, 0xfa, 0x63, //0x000011b5 cmpl $99, %edx + 0x0f, 0x87, 0x1f, 0x00, 0x00, 0x00, //0x000011b8 ja LBB4_22 + 0x89, 0xd0, //0x000011be movl %edx, %eax + 0x48, 0x8d, 0x0d, 0xd9, 0xb9, 0x00, 0x00, //0x000011c0 leaq $47577(%rip), %rcx /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x41, //0x000011c7 movb (%rcx,%rax,2), %dl + 0x8a, 0x44, 0x41, 0x01, //0x000011ca movb $1(%rcx,%rax,2), %al + 0x88, 0x17, //0x000011ce movb %dl, (%rdi) + 0x88, 0x47, 0x01, //0x000011d0 movb %al, $1(%rdi) + 0xb9, 0x02, 0x00, 0x00, 0x00, //0x000011d3 movl $2, %ecx + 0xe9, 0x92, 0x00, 0x00, 0x00, //0x000011d8 jmp LBB4_25 + //0x000011dd LBB4_22 + 0x89, 0xd0, //0x000011dd movl %edx, %eax + 0xc1, 0xe8, 0x02, //0x000011df shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x000011e2 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x000011e8 shrl $17, %eax + 0x81, 0xfa, 0xe7, 0x03, 0x00, 0x00, //0x000011eb cmpl $999, %edx + 0x0f, 0x87, 0x3c, 0x00, 0x00, 0x00, //0x000011f1 ja LBB4_24 + 0x83, 0xc0, 0x30, //0x000011f7 addl $48, %eax + 0x88, 0x07, //0x000011fa movb %al, (%rdi) + 0x0f, 0xb7, 0xc2, //0x000011fc movzwl %dx, %eax + 0x89, 0xc1, //0x000011ff movl %eax, %ecx + 0xc1, 0xe9, 0x02, //0x00001201 shrl $2, %ecx + 0x69, 0xc9, 0x7b, 0x14, 0x00, 0x00, //0x00001204 imull $5243, %ecx, %ecx + 0xc1, 0xe9, 0x11, //0x0000120a shrl $17, %ecx + 0x6b, 0xc9, 0x64, //0x0000120d imull $100, %ecx, %ecx + 0x29, 0xc8, //0x00001210 subl %ecx, %eax + 0x0f, 0xb7, 0xc0, //0x00001212 movzwl %ax, %eax + 0x48, 0x8d, 0x0d, 0x84, 0xb9, 0x00, 0x00, //0x00001215 leaq $47492(%rip), %rcx /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x41, //0x0000121c movb (%rcx,%rax,2), %dl + 0x8a, 0x44, 0x41, 0x01, //0x0000121f movb $1(%rcx,%rax,2), %al + 0x88, 0x57, 0x01, //0x00001223 movb %dl, $1(%rdi) + 0x88, 0x47, 0x02, //0x00001226 movb %al, $2(%rdi) + 0xb9, 0x03, 0x00, 0x00, 0x00, //0x00001229 movl $3, %ecx + 0xe9, 0x3c, 0x00, 0x00, 0x00, //0x0000122e jmp LBB4_25 + //0x00001233 LBB4_24 + 0x6b, 0xc8, 0x64, //0x00001233 imull $100, %eax, %ecx + 0x29, 0xca, //0x00001236 subl %ecx, %edx + 0x0f, 0xb7, 0xc0, //0x00001238 movzwl %ax, %eax + 0x4c, 0x8d, 0x05, 0x5e, 0xb9, 0x00, 0x00, //0x0000123b leaq $47454(%rip), %r8 /* _Digits+0(%rip) */ + 0x41, 0x8a, 0x0c, 0x40, //0x00001242 movb (%r8,%rax,2), %cl + 0x41, 0x8a, 0x44, 0x40, 0x01, //0x00001246 movb $1(%r8,%rax,2), %al + 0x88, 0x0f, //0x0000124b movb %cl, (%rdi) + 0x88, 0x47, 0x01, //0x0000124d movb %al, $1(%rdi) + 0x0f, 0xb7, 0xc2, //0x00001250 movzwl %dx, %eax + 0x41, 0x8a, 0x0c, 0x40, //0x00001253 movb (%r8,%rax,2), %cl + 0x48, 0x01, 0xc0, //0x00001257 addq %rax, %rax + 0x88, 0x4f, 0x02, //0x0000125a movb %cl, $2(%rdi) + 0x83, 0xc8, 0x01, //0x0000125d orl $1, %eax + 0x0f, 0xb7, 0xc0, //0x00001260 movzwl %ax, %eax + 0x42, 0x8a, 0x04, 0x00, //0x00001263 movb (%rax,%r8), %al + 0x88, 0x47, 0x03, //0x00001267 movb %al, $3(%rdi) + 0xb9, 0x04, 0x00, 0x00, 0x00, //0x0000126a movl $4, %ecx + //0x0000126f LBB4_25 + 0x48, 0xba, 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x0000126f movabsq $-6067343680855748867, %rdx + 0x48, 0x89, 0xf0, //0x00001279 movq %rsi, %rax + 0x48, 0xf7, 0xe2, //0x0000127c mulq %rdx + 0x48, 0xc1, 0xea, 0x1a, //0x0000127f shrq $26, %rdx + 0xc5, 0xf9, 0x6e, 0xc2, //0x00001283 vmovd %edx, %xmm0 + 0xc5, 0xf9, 0x6f, 0x0d, 0xb1, 0xfb, 0xff, 0xff, //0x00001287 vmovdqa $-1103(%rip), %xmm1 /* LCPI4_0+0(%rip) */ + 0xc5, 0xf9, 0xf4, 0xd1, //0x0000128f vpmuludq %xmm1, %xmm0, %xmm2 + 0xc5, 0xe9, 0x73, 0xd2, 0x2d, //0x00001293 vpsrlq $45, %xmm2, %xmm2 + 0xb8, 0x10, 0x27, 0x00, 0x00, //0x00001298 movl $10000, %eax + 0xc4, 0xe1, 0xf9, 0x6e, 0xd8, //0x0000129d vmovq %rax, %xmm3 + 0xc5, 0xe9, 0xf4, 0xe3, //0x000012a2 vpmuludq %xmm3, %xmm2, %xmm4 + 0xc5, 0xf9, 0xfa, 0xc4, //0x000012a6 vpsubd %xmm4, %xmm0, %xmm0 + 0xc5, 0xe9, 0x61, 0xc0, //0x000012aa vpunpcklwd %xmm0, %xmm2, %xmm0 + 0xc5, 0xf9, 0x73, 0xf0, 0x02, //0x000012ae vpsllq $2, %xmm0, %xmm0 + 0xc5, 0xfb, 0x70, 0xc0, 0x50, //0x000012b3 vpshuflw $80, %xmm0, %xmm0 + 0xc4, 0xe2, 0x79, 0x59, 0x15, 0xaf, 0xfb, 0xff, 0xff, //0x000012b8 vpbroadcastq $-1105(%rip), %xmm2 /* LCPI4_1+0(%rip) */ + 0xc5, 0xf9, 0x70, 0xc0, 0x50, //0x000012c1 vpshufd $80, %xmm0, %xmm0 + 0xc5, 0xf9, 0xe4, 0xc2, //0x000012c6 vpmulhuw %xmm2, %xmm0, %xmm0 + 0xc4, 0xe2, 0x79, 0x59, 0x25, 0xa5, 0xfb, 0xff, 0xff, //0x000012ca vpbroadcastq $-1115(%rip), %xmm4 /* LCPI4_2+0(%rip) */ + 0xc5, 0xf9, 0xe4, 0xc4, //0x000012d3 vpmulhuw %xmm4, %xmm0, %xmm0 + 0xc5, 0xf9, 0x6f, 0x2d, 0x71, 0xfb, 0xff, 0xff, //0x000012d7 vmovdqa $-1167(%rip), %xmm5 /* LCPI4_3+0(%rip) */ + 0xc5, 0xf9, 0xd5, 0xf5, //0x000012df vpmullw %xmm5, %xmm0, %xmm6 + 0xc5, 0xc9, 0x73, 0xf6, 0x10, //0x000012e3 vpsllq $16, %xmm6, %xmm6 + 0xc5, 0xf9, 0xf9, 0xc6, //0x000012e8 vpsubw %xmm6, %xmm0, %xmm0 + 0x69, 0xc2, 0x00, 0xe1, 0xf5, 0x05, //0x000012ec imull $100000000, %edx, %eax + 0x29, 0xc6, //0x000012f2 subl %eax, %esi + 0xc5, 0xf9, 0x6e, 0xf6, //0x000012f4 vmovd %esi, %xmm6 + 0xc5, 0xc9, 0xf4, 0xc9, //0x000012f8 vpmuludq %xmm1, %xmm6, %xmm1 + 0xc5, 0xf1, 0x73, 0xd1, 0x2d, //0x000012fc vpsrlq $45, %xmm1, %xmm1 + 0xc5, 0xf1, 0xf4, 0xdb, //0x00001301 vpmuludq %xmm3, %xmm1, %xmm3 + 0xc5, 0xc9, 0xfa, 0xdb, //0x00001305 vpsubd %xmm3, %xmm6, %xmm3 + 0xc5, 0xf1, 0x61, 0xcb, //0x00001309 vpunpcklwd %xmm3, %xmm1, %xmm1 + 0xc5, 0xf1, 0x73, 0xf1, 0x02, //0x0000130d vpsllq $2, %xmm1, %xmm1 + 0xc5, 0xfb, 0x70, 0xc9, 0x50, //0x00001312 vpshuflw $80, %xmm1, %xmm1 + 0xc5, 0xf9, 0x70, 0xc9, 0x50, //0x00001317 vpshufd $80, %xmm1, %xmm1 + 0xc5, 0xf1, 0xe4, 0xca, //0x0000131c vpmulhuw %xmm2, %xmm1, %xmm1 + 0xc5, 0xf1, 0xe4, 0xcc, //0x00001320 vpmulhuw %xmm4, %xmm1, %xmm1 + 0xc5, 0xf1, 0xd5, 0xd5, //0x00001324 vpmullw %xmm5, %xmm1, %xmm2 + 0xc5, 0xe9, 0x73, 0xf2, 0x10, //0x00001328 vpsllq $16, %xmm2, %xmm2 + 0xc5, 0xf1, 0xf9, 0xca, //0x0000132d vpsubw %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x67, 0xc1, //0x00001331 vpackuswb %xmm1, %xmm0, %xmm0 + 0xc5, 0xf9, 0xfc, 0x05, 0x23, 0xfb, 0xff, 0xff, //0x00001335 vpaddb $-1245(%rip), %xmm0, %xmm0 /* LCPI4_4+0(%rip) */ + 0x89, 0xc8, //0x0000133d movl %ecx, %eax + 0xc5, 0xfa, 0x7f, 0x04, 0x07, //0x0000133f vmovdqu %xmm0, (%rdi,%rax) + 0x83, 0xc9, 0x10, //0x00001344 orl $16, %ecx + 0x89, 0xc8, //0x00001347 movl %ecx, %eax + 0x5d, //0x00001349 popq %rbp + 0xc3, //0x0000134a retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000134b .p2align 5, 0x00 + //0x00001360 LCPI5_0 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00001360 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00001370 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x00001380 LCPI5_1 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x00001380 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x00001390 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x000013a0 LCPI5_2 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000013a0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000013b0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x000013c0 .p2align 4, 0x00 + //0x000013c0 LCPI5_3 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x000013c0 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x000013d0 LCPI5_4 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x000013d0 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x000013e0 LCPI5_5 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000013e0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x000013f0 .p2align 4, 0x90 + //0x000013f0 _quote + 0x55, //0x000013f0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000013f1 movq %rsp, %rbp + 0x41, 0x57, //0x000013f4 pushq %r15 + 0x41, 0x56, //0x000013f6 pushq %r14 + 0x41, 0x55, //0x000013f8 pushq %r13 + 0x41, 0x54, //0x000013fa pushq %r12 + 0x53, //0x000013fc pushq %rbx + 0x50, //0x000013fd pushq %rax + 0x49, 0x89, 0xcf, //0x000013fe movq %rcx, %r15 + 0x49, 0x89, 0xf6, //0x00001401 movq %rsi, %r14 + 0x4c, 0x8b, 0x09, //0x00001404 movq (%rcx), %r9 + 0x41, 0xf6, 0xc0, 0x01, //0x00001407 testb $1, %r8b + 0x48, 0x8d, 0x05, 0x7e, 0xdf, 0x00, 0x00, //0x0000140b leaq $57214(%rip), %rax /* __SingleQuoteTab+0(%rip) */ + 0x4c, 0x8d, 0x05, 0x77, 0xef, 0x00, 0x00, //0x00001412 leaq $61303(%rip), %r8 /* __DoubleQuoteTab+0(%rip) */ + 0x4c, 0x0f, 0x44, 0xc0, //0x00001419 cmoveq %rax, %r8 + 0x48, 0x8d, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x00, //0x0000141d leaq (,%rsi,8), %rax + 0x49, 0x39, 0xc1, //0x00001425 cmpq %rax, %r9 + 0x0f, 0x8d, 0xd8, 0x06, 0x00, 0x00, //0x00001428 jge LBB5_86 + 0x49, 0x89, 0xd4, //0x0000142e movq %rdx, %r12 + 0x49, 0x89, 0xfb, //0x00001431 movq %rdi, %r11 + 0x4d, 0x85, 0xf6, //0x00001434 testq %r14, %r14 + 0x0f, 0x84, 0x12, 0x0a, 0x00, 0x00, //0x00001437 je LBB5_118 + 0xc5, 0xfd, 0x6f, 0x25, 0x1b, 0xff, 0xff, 0xff, //0x0000143d vmovdqa $-229(%rip), %ymm4 /* LCPI5_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x2d, 0x33, 0xff, 0xff, 0xff, //0x00001445 vmovdqa $-205(%rip), %ymm5 /* LCPI5_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0x4b, 0xff, 0xff, 0xff, //0x0000144d vmovdqa $-181(%rip), %ymm6 /* LCPI5_2+0(%rip) */ + 0xc4, 0x41, 0x3d, 0x76, 0xc0, //0x00001455 vpcmpeqd %ymm8, %ymm8, %ymm8 + 0x49, 0x89, 0xfb, //0x0000145a movq %rdi, %r11 + 0x49, 0x89, 0xd4, //0x0000145d movq %rdx, %r12 + 0x48, 0x89, 0x55, 0xd0, //0x00001460 movq %rdx, $-48(%rbp) + //0x00001464 LBB5_3 + 0x49, 0x83, 0xfe, 0x1f, //0x00001464 cmpq $31, %r14 + 0x0f, 0x9f, 0xc1, //0x00001468 setg %cl + 0x4d, 0x89, 0xca, //0x0000146b movq %r9, %r10 + 0x4c, 0x89, 0xe6, //0x0000146e movq %r12, %rsi + 0x4c, 0x89, 0xf0, //0x00001471 movq %r14, %rax + 0x4d, 0x89, 0xdd, //0x00001474 movq %r11, %r13 + 0x49, 0x83, 0xf9, 0x20, //0x00001477 cmpq $32, %r9 + 0x0f, 0x8c, 0x8f, 0x00, 0x00, 0x00, //0x0000147b jl LBB5_9 + 0x49, 0x83, 0xfe, 0x20, //0x00001481 cmpq $32, %r14 + 0x0f, 0x8c, 0x85, 0x00, 0x00, 0x00, //0x00001485 jl LBB5_9 + 0x4d, 0x89, 0xdd, //0x0000148b movq %r11, %r13 + 0x4c, 0x89, 0xf0, //0x0000148e movq %r14, %rax + 0x4c, 0x89, 0xe6, //0x00001491 movq %r12, %rsi + 0x4c, 0x89, 0xcb, //0x00001494 movq %r9, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001497 .p2align 4, 0x90 + //0x000014a0 LBB5_6 + 0xc4, 0xc1, 0x7e, 0x6f, 0x45, 0x00, //0x000014a0 vmovdqu (%r13), %ymm0 + 0xc5, 0xdd, 0x64, 0xc8, //0x000014a6 vpcmpgtb %ymm0, %ymm4, %ymm1 + 0xc5, 0xfd, 0x74, 0xd5, //0x000014aa vpcmpeqb %ymm5, %ymm0, %ymm2 + 0xc5, 0xfd, 0x74, 0xde, //0x000014ae vpcmpeqb %ymm6, %ymm0, %ymm3 + 0xc5, 0xe5, 0xeb, 0xd2, //0x000014b2 vpor %ymm2, %ymm3, %ymm2 + 0xc5, 0xfe, 0x7f, 0x06, //0x000014b6 vmovdqu %ymm0, (%rsi) + 0xc4, 0xc1, 0x7d, 0x64, 0xc0, //0x000014ba vpcmpgtb %ymm8, %ymm0, %ymm0 + 0xc5, 0xfd, 0xdb, 0xc1, //0x000014bf vpand %ymm1, %ymm0, %ymm0 + 0xc5, 0xed, 0xeb, 0xc0, //0x000014c3 vpor %ymm0, %ymm2, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000014c7 vpmovmskb %ymm0, %ecx + 0x85, 0xc9, //0x000014cb testl %ecx, %ecx + 0x0f, 0x85, 0xf7, 0x01, 0x00, 0x00, //0x000014cd jne LBB5_19 + 0x49, 0x83, 0xc5, 0x20, //0x000014d3 addq $32, %r13 + 0x48, 0x83, 0xc6, 0x20, //0x000014d7 addq $32, %rsi + 0x4c, 0x8d, 0x53, 0xe0, //0x000014db leaq $-32(%rbx), %r10 + 0x48, 0x83, 0xf8, 0x3f, //0x000014df cmpq $63, %rax + 0x0f, 0x9f, 0xc1, //0x000014e3 setg %cl + 0x48, 0x83, 0xf8, 0x40, //0x000014e6 cmpq $64, %rax + 0x48, 0x8d, 0x40, 0xe0, //0x000014ea leaq $-32(%rax), %rax + 0x0f, 0x8c, 0x1c, 0x00, 0x00, 0x00, //0x000014ee jl LBB5_9 + 0x48, 0x83, 0xfb, 0x3f, //0x000014f4 cmpq $63, %rbx + 0x4c, 0x89, 0xd3, //0x000014f8 movq %r10, %rbx + 0x0f, 0x8f, 0x9f, 0xff, 0xff, 0xff, //0x000014fb jg LBB5_6 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001501 .p2align 4, 0x90 + //0x00001510 LBB5_9 + 0x84, 0xc9, //0x00001510 testb %cl, %cl + 0x0f, 0x84, 0x7e, 0x00, 0x00, 0x00, //0x00001512 je LBB5_13 + 0xc4, 0xc1, 0x7e, 0x6f, 0x45, 0x00, //0x00001518 vmovdqu (%r13), %ymm0 + 0xc5, 0xdd, 0x64, 0xc8, //0x0000151e vpcmpgtb %ymm0, %ymm4, %ymm1 + 0xc5, 0xfd, 0x74, 0xd5, //0x00001522 vpcmpeqb %ymm5, %ymm0, %ymm2 + 0xc5, 0xfd, 0x74, 0xde, //0x00001526 vpcmpeqb %ymm6, %ymm0, %ymm3 + 0xc5, 0xe5, 0xeb, 0xd2, //0x0000152a vpor %ymm2, %ymm3, %ymm2 + 0xc4, 0xc1, 0x7d, 0x64, 0xc0, //0x0000152e vpcmpgtb %ymm8, %ymm0, %ymm0 + 0xc5, 0xfd, 0xdb, 0xc1, //0x00001533 vpand %ymm1, %ymm0, %ymm0 + 0xc5, 0xed, 0xeb, 0xc0, //0x00001537 vpor %ymm0, %ymm2, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc0, //0x0000153b vpmovmskb %ymm0, %eax + 0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000153f movabsq $4294967296, %rcx + 0x48, 0x09, 0xc8, //0x00001549 orq %rcx, %rax + 0x48, 0x0f, 0xbc, 0xc8, //0x0000154c bsfq %rax, %rcx + 0xc4, 0xc1, 0x7a, 0x6f, 0x45, 0x00, //0x00001550 vmovdqu (%r13), %xmm0 + 0xc4, 0xe3, 0xf9, 0x16, 0xc0, 0x01, //0x00001556 vpextrq $1, %xmm0, %rax + 0xc4, 0xe1, 0xf9, 0x7e, 0xc3, //0x0000155c vmovq %xmm0, %rbx + 0x4c, 0x39, 0xd1, //0x00001561 cmpq %r10, %rcx + 0x0f, 0x8e, 0x6f, 0x01, 0x00, 0x00, //0x00001564 jle LBB5_20 + 0x49, 0x83, 0xfa, 0x10, //0x0000156a cmpq $16, %r10 + 0x0f, 0x82, 0xa5, 0x01, 0x00, 0x00, //0x0000156e jb LBB5_23 + 0x48, 0x89, 0x1e, //0x00001574 movq %rbx, (%rsi) + 0x48, 0x89, 0x46, 0x08, //0x00001577 movq %rax, $8(%rsi) + 0x49, 0x8d, 0x4d, 0x10, //0x0000157b leaq $16(%r13), %rcx + 0x48, 0x83, 0xc6, 0x10, //0x0000157f addq $16, %rsi + 0x49, 0x8d, 0x42, 0xf0, //0x00001583 leaq $-16(%r10), %rax + 0x48, 0x83, 0xf8, 0x08, //0x00001587 cmpq $8, %rax + 0x0f, 0x83, 0x98, 0x01, 0x00, 0x00, //0x0000158b jae LBB5_24 + 0xe9, 0xa5, 0x01, 0x00, 0x00, //0x00001591 jmp LBB5_25 + //0x00001596 LBB5_13 + 0x4c, 0x89, 0xfa, //0x00001596 movq %r15, %rdx + 0xc5, 0xf8, 0x77, //0x00001599 vzeroupper + 0x48, 0x83, 0xf8, 0x0f, //0x0000159c cmpq $15, %rax + 0x41, 0x0f, 0x9f, 0xc7, //0x000015a0 setg %r15b + 0x49, 0x83, 0xfa, 0x10, //0x000015a4 cmpq $16, %r10 + 0x0f, 0x8c, 0xf6, 0x01, 0x00, 0x00, //0x000015a8 jl LBB5_30 + 0x48, 0x83, 0xf8, 0x10, //0x000015ae cmpq $16, %rax + 0xc5, 0xf9, 0x6f, 0x3d, 0x06, 0xfe, 0xff, 0xff, //0x000015b2 vmovdqa $-506(%rip), %xmm7 /* LCPI5_3+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x0d, 0x0e, 0xfe, 0xff, 0xff, //0x000015ba vmovdqa $-498(%rip), %xmm9 /* LCPI5_4+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x15, 0x16, 0xfe, 0xff, 0xff, //0x000015c2 vmovdqa $-490(%rip), %xmm10 /* LCPI5_5+0(%rip) */ + 0xc4, 0x41, 0x21, 0x76, 0xdb, //0x000015ca vpcmpeqd %xmm11, %xmm11, %xmm11 + 0x0f, 0x8c, 0x1a, 0x02, 0x00, 0x00, //0x000015cf jl LBB5_35 + 0xc5, 0xfd, 0x6f, 0x25, 0x83, 0xfd, 0xff, 0xff, //0x000015d5 vmovdqa $-637(%rip), %ymm4 /* LCPI5_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x2d, 0x9b, 0xfd, 0xff, 0xff, //0x000015dd vmovdqa $-613(%rip), %ymm5 /* LCPI5_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0xb3, 0xfd, 0xff, 0xff, //0x000015e5 vmovdqa $-589(%rip), %ymm6 /* LCPI5_2+0(%rip) */ + 0xc4, 0x41, 0x3d, 0x76, 0xc0, //0x000015ed vpcmpeqd %ymm8, %ymm8, %ymm8 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000015f2 .p2align 4, 0x90 + //0x00001600 LBB5_16 + 0xc4, 0xc1, 0x7a, 0x6f, 0x45, 0x00, //0x00001600 vmovdqu (%r13), %xmm0 + 0xc5, 0xc1, 0x64, 0xc8, //0x00001606 vpcmpgtb %xmm0, %xmm7, %xmm1 + 0xc5, 0xb1, 0x74, 0xd0, //0x0000160a vpcmpeqb %xmm0, %xmm9, %xmm2 + 0xc5, 0xa9, 0x74, 0xd8, //0x0000160e vpcmpeqb %xmm0, %xmm10, %xmm3 + 0xc5, 0xe1, 0xeb, 0xd2, //0x00001612 vpor %xmm2, %xmm3, %xmm2 + 0xc5, 0xfa, 0x7f, 0x06, //0x00001616 vmovdqu %xmm0, (%rsi) + 0xc4, 0xc1, 0x79, 0x64, 0xc3, //0x0000161a vpcmpgtb %xmm11, %xmm0, %xmm0 + 0xc5, 0xf9, 0xdb, 0xc1, //0x0000161f vpand %xmm1, %xmm0, %xmm0 + 0xc5, 0xe9, 0xeb, 0xc0, //0x00001623 vpor %xmm0, %xmm2, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00001627 vpmovmskb %xmm0, %ecx + 0x66, 0x85, 0xc9, //0x0000162b testw %cx, %cx + 0x0f, 0x85, 0xd0, 0x00, 0x00, 0x00, //0x0000162e jne LBB5_22 + 0x49, 0x83, 0xc5, 0x10, //0x00001634 addq $16, %r13 + 0x48, 0x83, 0xc6, 0x10, //0x00001638 addq $16, %rsi + 0x49, 0x8d, 0x4a, 0xf0, //0x0000163c leaq $-16(%r10), %rcx + 0x48, 0x83, 0xf8, 0x1f, //0x00001640 cmpq $31, %rax + 0x41, 0x0f, 0x9f, 0xc7, //0x00001644 setg %r15b + 0x48, 0x83, 0xf8, 0x20, //0x00001648 cmpq $32, %rax + 0x48, 0x8d, 0x40, 0xf0, //0x0000164c leaq $-16(%rax), %rax + 0x0f, 0x8c, 0x0d, 0x00, 0x00, 0x00, //0x00001650 jl LBB5_31 + 0x49, 0x83, 0xfa, 0x1f, //0x00001656 cmpq $31, %r10 + 0x49, 0x89, 0xca, //0x0000165a movq %rcx, %r10 + 0x0f, 0x8f, 0x9d, 0xff, 0xff, 0xff, //0x0000165d jg LBB5_16 + //0x00001663 LBB5_31 + 0x45, 0x84, 0xff, //0x00001663 testb %r15b, %r15b + 0x0f, 0x84, 0xac, 0x01, 0x00, 0x00, //0x00001666 je LBB5_36 + //0x0000166c LBB5_32 + 0xc4, 0xc1, 0x7a, 0x6f, 0x45, 0x00, //0x0000166c vmovdqu (%r13), %xmm0 + 0xc5, 0xc1, 0x64, 0xc8, //0x00001672 vpcmpgtb %xmm0, %xmm7, %xmm1 + 0xc5, 0xb1, 0x74, 0xd0, //0x00001676 vpcmpeqb %xmm0, %xmm9, %xmm2 + 0xc5, 0xa9, 0x74, 0xd8, //0x0000167a vpcmpeqb %xmm0, %xmm10, %xmm3 + 0xc5, 0xe1, 0xeb, 0xd2, //0x0000167e vpor %xmm2, %xmm3, %xmm2 + 0xc4, 0xc1, 0x79, 0x64, 0xdb, //0x00001682 vpcmpgtb %xmm11, %xmm0, %xmm3 + 0xc5, 0xe1, 0xdb, 0xc9, //0x00001687 vpand %xmm1, %xmm3, %xmm1 + 0xc5, 0xe9, 0xeb, 0xc9, //0x0000168b vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xf9, 0xd7, 0xc1, //0x0000168f vpmovmskb %xmm1, %eax + 0x0d, 0x00, 0x00, 0x01, 0x00, //0x00001693 orl $65536, %eax + 0x0f, 0xbc, 0xd8, //0x00001698 bsfl %eax, %ebx + 0xc4, 0xe1, 0xf9, 0x7e, 0xc0, //0x0000169b vmovq %xmm0, %rax + 0x48, 0x39, 0xd9, //0x000016a0 cmpq %rbx, %rcx + 0x49, 0x89, 0xd7, //0x000016a3 movq %rdx, %r15 + 0x0f, 0x8d, 0x68, 0x02, 0x00, 0x00, //0x000016a6 jge LBB5_53 + 0x48, 0x83, 0xf9, 0x08, //0x000016ac cmpq $8, %rcx + 0x0f, 0x82, 0x83, 0x02, 0x00, 0x00, //0x000016b0 jb LBB5_56 + 0x48, 0x89, 0x06, //0x000016b6 movq %rax, (%rsi) + 0x49, 0x8d, 0x45, 0x08, //0x000016b9 leaq $8(%r13), %rax + 0x48, 0x83, 0xc6, 0x08, //0x000016bd addq $8, %rsi + 0x48, 0x8d, 0x59, 0xf8, //0x000016c1 leaq $-8(%rcx), %rbx + 0xe9, 0x75, 0x02, 0x00, 0x00, //0x000016c5 jmp LBB5_57 + //0x000016ca LBB5_19 + 0x4d, 0x29, 0xdd, //0x000016ca subq %r11, %r13 + 0x44, 0x0f, 0xbc, 0xd1, //0x000016cd bsfl %ecx, %r10d + 0x4d, 0x01, 0xea, //0x000016d1 addq %r13, %r10 + 0xe9, 0x14, 0x03, 0x00, 0x00, //0x000016d4 jmp LBB5_69 + //0x000016d9 LBB5_20 + 0x83, 0xf9, 0x10, //0x000016d9 cmpl $16, %ecx + 0x0f, 0x82, 0xaa, 0x01, 0x00, 0x00, //0x000016dc jb LBB5_42 + 0x48, 0x89, 0x1e, //0x000016e2 movq %rbx, (%rsi) + 0x48, 0x89, 0x46, 0x08, //0x000016e5 movq %rax, $8(%rsi) + 0x49, 0x8d, 0x5d, 0x10, //0x000016e9 leaq $16(%r13), %rbx + 0x48, 0x83, 0xc6, 0x10, //0x000016ed addq $16, %rsi + 0x48, 0x8d, 0x41, 0xf0, //0x000016f1 leaq $-16(%rcx), %rax + 0x48, 0x83, 0xf8, 0x08, //0x000016f5 cmpq $8, %rax + 0x0f, 0x83, 0x9d, 0x01, 0x00, 0x00, //0x000016f9 jae LBB5_43 + 0xe9, 0xaa, 0x01, 0x00, 0x00, //0x000016ff jmp LBB5_44 + //0x00001704 LBB5_22 + 0x0f, 0xb7, 0xc1, //0x00001704 movzwl %cx, %eax + 0x4d, 0x29, 0xdd, //0x00001707 subq %r11, %r13 + 0x44, 0x0f, 0xbc, 0xd0, //0x0000170a bsfl %eax, %r10d + 0x4d, 0x01, 0xea, //0x0000170e addq %r13, %r10 + 0x49, 0x89, 0xd7, //0x00001711 movq %rdx, %r15 + 0xe9, 0xd4, 0x02, 0x00, 0x00, //0x00001714 jmp LBB5_69 + //0x00001719 LBB5_23 + 0x4c, 0x89, 0xe9, //0x00001719 movq %r13, %rcx + 0x4c, 0x89, 0xd0, //0x0000171c movq %r10, %rax + 0x48, 0x83, 0xf8, 0x08, //0x0000171f cmpq $8, %rax + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001723 jb LBB5_25 + //0x00001729 LBB5_24 + 0x48, 0x8b, 0x11, //0x00001729 movq (%rcx), %rdx + 0x48, 0x89, 0x16, //0x0000172c movq %rdx, (%rsi) + 0x48, 0x83, 0xc1, 0x08, //0x0000172f addq $8, %rcx + 0x48, 0x83, 0xc6, 0x08, //0x00001733 addq $8, %rsi + 0x48, 0x83, 0xc0, 0xf8, //0x00001737 addq $-8, %rax + //0x0000173b LBB5_25 + 0x48, 0x83, 0xf8, 0x04, //0x0000173b cmpq $4, %rax + 0x0f, 0x8c, 0x35, 0x00, 0x00, 0x00, //0x0000173f jl LBB5_26 + 0x8b, 0x11, //0x00001745 movl (%rcx), %edx + 0x89, 0x16, //0x00001747 movl %edx, (%rsi) + 0x48, 0x83, 0xc1, 0x04, //0x00001749 addq $4, %rcx + 0x48, 0x83, 0xc6, 0x04, //0x0000174d addq $4, %rsi + 0x48, 0x83, 0xc0, 0xfc, //0x00001751 addq $-4, %rax + 0x48, 0x83, 0xf8, 0x02, //0x00001755 cmpq $2, %rax + 0x0f, 0x83, 0x25, 0x00, 0x00, 0x00, //0x00001759 jae LBB5_50 + //0x0000175f LBB5_27 + 0x48, 0x85, 0xc0, //0x0000175f testq %rax, %rax + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001762 je LBB5_29 + //0x00001768 LBB5_28 + 0x8a, 0x01, //0x00001768 movb (%rcx), %al + 0x88, 0x06, //0x0000176a movb %al, (%rsi) + //0x0000176c LBB5_29 + 0x4d, 0x29, 0xda, //0x0000176c subq %r11, %r10 + 0x4d, 0x01, 0xea, //0x0000176f addq %r13, %r10 + 0x49, 0xf7, 0xd2, //0x00001772 notq %r10 + 0xe9, 0x73, 0x02, 0x00, 0x00, //0x00001775 jmp LBB5_69 + //0x0000177a LBB5_26 + 0x48, 0x83, 0xf8, 0x02, //0x0000177a cmpq $2, %rax + 0x0f, 0x82, 0xdb, 0xff, 0xff, 0xff, //0x0000177e jb LBB5_27 + //0x00001784 LBB5_50 + 0x0f, 0xb7, 0x11, //0x00001784 movzwl (%rcx), %edx + 0x66, 0x89, 0x16, //0x00001787 movw %dx, (%rsi) + 0x48, 0x83, 0xc1, 0x02, //0x0000178a addq $2, %rcx + 0x48, 0x83, 0xc6, 0x02, //0x0000178e addq $2, %rsi + 0x48, 0x83, 0xc0, 0xfe, //0x00001792 addq $-2, %rax + 0x48, 0x85, 0xc0, //0x00001796 testq %rax, %rax + 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x00001799 jne LBB5_28 + 0xe9, 0xc8, 0xff, 0xff, 0xff, //0x0000179f jmp LBB5_29 + //0x000017a4 LBB5_30 + 0x4c, 0x89, 0xd1, //0x000017a4 movq %r10, %rcx + 0xc5, 0xfd, 0x6f, 0x25, 0xb1, 0xfb, 0xff, 0xff, //0x000017a7 vmovdqa $-1103(%rip), %ymm4 /* LCPI5_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x2d, 0xc9, 0xfb, 0xff, 0xff, //0x000017af vmovdqa $-1079(%rip), %ymm5 /* LCPI5_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0xe1, 0xfb, 0xff, 0xff, //0x000017b7 vmovdqa $-1055(%rip), %ymm6 /* LCPI5_2+0(%rip) */ + 0xc4, 0x41, 0x3d, 0x76, 0xc0, //0x000017bf vpcmpeqd %ymm8, %ymm8, %ymm8 + 0xc5, 0xf9, 0x6f, 0x3d, 0xf4, 0xfb, 0xff, 0xff, //0x000017c4 vmovdqa $-1036(%rip), %xmm7 /* LCPI5_3+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x0d, 0xfc, 0xfb, 0xff, 0xff, //0x000017cc vmovdqa $-1028(%rip), %xmm9 /* LCPI5_4+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x15, 0x04, 0xfc, 0xff, 0xff, //0x000017d4 vmovdqa $-1020(%rip), %xmm10 /* LCPI5_5+0(%rip) */ + 0xc4, 0x41, 0x21, 0x76, 0xdb, //0x000017dc vpcmpeqd %xmm11, %xmm11, %xmm11 + 0x45, 0x84, 0xff, //0x000017e1 testb %r15b, %r15b + 0x0f, 0x84, 0x2e, 0x00, 0x00, 0x00, //0x000017e4 je LBB5_36 + 0xe9, 0x7d, 0xfe, 0xff, 0xff, //0x000017ea jmp LBB5_32 + //0x000017ef LBB5_35 + 0x4c, 0x89, 0xd1, //0x000017ef movq %r10, %rcx + 0xc5, 0xfd, 0x6f, 0x25, 0x66, 0xfb, 0xff, 0xff, //0x000017f2 vmovdqa $-1178(%rip), %ymm4 /* LCPI5_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x2d, 0x7e, 0xfb, 0xff, 0xff, //0x000017fa vmovdqa $-1154(%rip), %ymm5 /* LCPI5_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0x96, 0xfb, 0xff, 0xff, //0x00001802 vmovdqa $-1130(%rip), %ymm6 /* LCPI5_2+0(%rip) */ + 0xc4, 0x41, 0x3d, 0x76, 0xc0, //0x0000180a vpcmpeqd %ymm8, %ymm8, %ymm8 + 0x45, 0x84, 0xff, //0x0000180f testb %r15b, %r15b + 0x0f, 0x85, 0x54, 0xfe, 0xff, 0xff, //0x00001812 jne LBB5_32 + //0x00001818 LBB5_36 + 0x48, 0x85, 0xc9, //0x00001818 testq %rcx, %rcx + 0x49, 0x89, 0xd7, //0x0000181b movq %rdx, %r15 + 0x4c, 0x8d, 0x15, 0x6b, 0xdb, 0x00, 0x00, //0x0000181e leaq $56171(%rip), %r10 /* __SingleQuoteTab+0(%rip) */ + 0x0f, 0x8e, 0x50, 0x00, 0x00, 0x00, //0x00001825 jle LBB5_41 + 0x48, 0x85, 0xc0, //0x0000182b testq %rax, %rax + 0x0f, 0x8e, 0x47, 0x00, 0x00, 0x00, //0x0000182e jle LBB5_41 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001834 .p2align 4, 0x90 + //0x00001840 LBB5_38 + 0x41, 0x0f, 0xb6, 0x5d, 0x00, //0x00001840 movzbl (%r13), %ebx + 0x48, 0x89, 0xda, //0x00001845 movq %rbx, %rdx + 0x48, 0xc1, 0xe2, 0x04, //0x00001848 shlq $4, %rdx + 0x4a, 0x83, 0x3c, 0x12, 0x00, //0x0000184c cmpq $0, (%rdx,%r10) + 0x0f, 0x85, 0xda, 0x00, 0x00, 0x00, //0x00001851 jne LBB5_55 + 0x49, 0xff, 0xc5, //0x00001857 incq %r13 + 0x88, 0x1e, //0x0000185a movb %bl, (%rsi) + 0x48, 0x83, 0xf8, 0x02, //0x0000185c cmpq $2, %rax + 0x48, 0x8d, 0x40, 0xff, //0x00001860 leaq $-1(%rax), %rax + 0x0f, 0x8c, 0x11, 0x00, 0x00, 0x00, //0x00001864 jl LBB5_41 + 0x48, 0xff, 0xc6, //0x0000186a incq %rsi + 0x48, 0x83, 0xf9, 0x01, //0x0000186d cmpq $1, %rcx + 0x48, 0x8d, 0x49, 0xff, //0x00001871 leaq $-1(%rcx), %rcx + 0x0f, 0x8f, 0xc5, 0xff, 0xff, 0xff, //0x00001875 jg LBB5_38 + //0x0000187b LBB5_41 + 0x4d, 0x29, 0xdd, //0x0000187b subq %r11, %r13 + 0x48, 0xf7, 0xd8, //0x0000187e negq %rax + 0x4d, 0x19, 0xd2, //0x00001881 sbbq %r10, %r10 + 0x4d, 0x31, 0xea, //0x00001884 xorq %r13, %r10 + 0xe9, 0x61, 0x01, 0x00, 0x00, //0x00001887 jmp LBB5_69 + //0x0000188c LBB5_42 + 0x4c, 0x89, 0xeb, //0x0000188c movq %r13, %rbx + 0x48, 0x89, 0xc8, //0x0000188f movq %rcx, %rax + 0x48, 0x83, 0xf8, 0x08, //0x00001892 cmpq $8, %rax + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001896 jb LBB5_44 + //0x0000189c LBB5_43 + 0x48, 0x8b, 0x13, //0x0000189c movq (%rbx), %rdx + 0x48, 0x89, 0x16, //0x0000189f movq %rdx, (%rsi) + 0x48, 0x83, 0xc3, 0x08, //0x000018a2 addq $8, %rbx + 0x48, 0x83, 0xc6, 0x08, //0x000018a6 addq $8, %rsi + 0x48, 0x83, 0xc0, 0xf8, //0x000018aa addq $-8, %rax + //0x000018ae LBB5_44 + 0x48, 0x83, 0xf8, 0x04, //0x000018ae cmpq $4, %rax + 0x0f, 0x8c, 0x32, 0x00, 0x00, 0x00, //0x000018b2 jl LBB5_45 + 0x8b, 0x13, //0x000018b8 movl (%rbx), %edx + 0x89, 0x16, //0x000018ba movl %edx, (%rsi) + 0x48, 0x83, 0xc3, 0x04, //0x000018bc addq $4, %rbx + 0x48, 0x83, 0xc6, 0x04, //0x000018c0 addq $4, %rsi + 0x48, 0x83, 0xc0, 0xfc, //0x000018c4 addq $-4, %rax + 0x48, 0x83, 0xf8, 0x02, //0x000018c8 cmpq $2, %rax + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x000018cc jae LBB5_52 + //0x000018d2 LBB5_46 + 0x48, 0x85, 0xc0, //0x000018d2 testq %rax, %rax + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x000018d5 je LBB5_48 + //0x000018db LBB5_47 + 0x8a, 0x03, //0x000018db movb (%rbx), %al + 0x88, 0x06, //0x000018dd movb %al, (%rsi) + //0x000018df LBB5_48 + 0x4d, 0x29, 0xdd, //0x000018df subq %r11, %r13 + 0x49, 0x01, 0xcd, //0x000018e2 addq %rcx, %r13 + 0xe9, 0x00, 0x01, 0x00, 0x00, //0x000018e5 jmp LBB5_68 + //0x000018ea LBB5_45 + 0x48, 0x83, 0xf8, 0x02, //0x000018ea cmpq $2, %rax + 0x0f, 0x82, 0xde, 0xff, 0xff, 0xff, //0x000018ee jb LBB5_46 + //0x000018f4 LBB5_52 + 0x0f, 0xb7, 0x13, //0x000018f4 movzwl (%rbx), %edx + 0x66, 0x89, 0x16, //0x000018f7 movw %dx, (%rsi) + 0x48, 0x83, 0xc3, 0x02, //0x000018fa addq $2, %rbx + 0x48, 0x83, 0xc6, 0x02, //0x000018fe addq $2, %rsi + 0x48, 0x83, 0xc0, 0xfe, //0x00001902 addq $-2, %rax + 0x48, 0x85, 0xc0, //0x00001906 testq %rax, %rax + 0x0f, 0x85, 0xcc, 0xff, 0xff, 0xff, //0x00001909 jne LBB5_47 + 0xe9, 0xcb, 0xff, 0xff, 0xff, //0x0000190f jmp LBB5_48 + //0x00001914 LBB5_53 + 0x83, 0xfb, 0x08, //0x00001914 cmpl $8, %ebx + 0x0f, 0x82, 0x8e, 0x00, 0x00, 0x00, //0x00001917 jb LBB5_62 + 0x48, 0x89, 0x06, //0x0000191d movq %rax, (%rsi) + 0x4d, 0x8d, 0x55, 0x08, //0x00001920 leaq $8(%r13), %r10 + 0x48, 0x83, 0xc6, 0x08, //0x00001924 addq $8, %rsi + 0x48, 0x8d, 0x43, 0xf8, //0x00001928 leaq $-8(%rbx), %rax + 0xe9, 0x80, 0x00, 0x00, 0x00, //0x0000192c jmp LBB5_63 + //0x00001931 LBB5_55 + 0x4d, 0x29, 0xdd, //0x00001931 subq %r11, %r13 + 0xe9, 0xb1, 0x00, 0x00, 0x00, //0x00001934 jmp LBB5_68 + //0x00001939 LBB5_56 + 0x4c, 0x89, 0xe8, //0x00001939 movq %r13, %rax + 0x48, 0x89, 0xcb, //0x0000193c movq %rcx, %rbx + //0x0000193f LBB5_57 + 0x48, 0x83, 0xfb, 0x04, //0x0000193f cmpq $4, %rbx + 0x0f, 0x8c, 0x38, 0x00, 0x00, 0x00, //0x00001943 jl LBB5_58 + 0x8b, 0x10, //0x00001949 movl (%rax), %edx + 0x89, 0x16, //0x0000194b movl %edx, (%rsi) + 0x48, 0x83, 0xc0, 0x04, //0x0000194d addq $4, %rax + 0x48, 0x83, 0xc6, 0x04, //0x00001951 addq $4, %rsi + 0x48, 0x83, 0xc3, 0xfc, //0x00001955 addq $-4, %rbx + 0x48, 0x83, 0xfb, 0x02, //0x00001959 cmpq $2, %rbx + 0x0f, 0x83, 0x28, 0x00, 0x00, 0x00, //0x0000195d jae LBB5_83 + //0x00001963 LBB5_59 + 0x48, 0x85, 0xdb, //0x00001963 testq %rbx, %rbx + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001966 je LBB5_61 + //0x0000196c LBB5_60 + 0x8a, 0x00, //0x0000196c movb (%rax), %al + 0x88, 0x06, //0x0000196e movb %al, (%rsi) + //0x00001970 LBB5_61 + 0x4c, 0x29, 0xd9, //0x00001970 subq %r11, %rcx + 0x4c, 0x01, 0xe9, //0x00001973 addq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x00001976 notq %rcx + 0x49, 0x89, 0xca, //0x00001979 movq %rcx, %r10 + 0xe9, 0x6c, 0x00, 0x00, 0x00, //0x0000197c jmp LBB5_69 + //0x00001981 LBB5_58 + 0x48, 0x83, 0xfb, 0x02, //0x00001981 cmpq $2, %rbx + 0x0f, 0x82, 0xd8, 0xff, 0xff, 0xff, //0x00001985 jb LBB5_59 + //0x0000198b LBB5_83 + 0x0f, 0xb7, 0x10, //0x0000198b movzwl (%rax), %edx + 0x66, 0x89, 0x16, //0x0000198e movw %dx, (%rsi) + 0x48, 0x83, 0xc0, 0x02, //0x00001991 addq $2, %rax + 0x48, 0x83, 0xc6, 0x02, //0x00001995 addq $2, %rsi + 0x48, 0x83, 0xc3, 0xfe, //0x00001999 addq $-2, %rbx + 0x48, 0x85, 0xdb, //0x0000199d testq %rbx, %rbx + 0x0f, 0x85, 0xc6, 0xff, 0xff, 0xff, //0x000019a0 jne LBB5_60 + 0xe9, 0xc5, 0xff, 0xff, 0xff, //0x000019a6 jmp LBB5_61 + //0x000019ab LBB5_62 + 0x4d, 0x89, 0xea, //0x000019ab movq %r13, %r10 + 0x48, 0x89, 0xd8, //0x000019ae movq %rbx, %rax + //0x000019b1 LBB5_63 + 0x48, 0x83, 0xf8, 0x04, //0x000019b1 cmpq $4, %rax + 0x0f, 0x8c, 0x20, 0x01, 0x00, 0x00, //0x000019b5 jl LBB5_64 + 0x41, 0x8b, 0x0a, //0x000019bb movl (%r10), %ecx + 0x89, 0x0e, //0x000019be movl %ecx, (%rsi) + 0x49, 0x83, 0xc2, 0x04, //0x000019c0 addq $4, %r10 + 0x48, 0x83, 0xc6, 0x04, //0x000019c4 addq $4, %rsi + 0x48, 0x83, 0xc0, 0xfc, //0x000019c8 addq $-4, %rax + 0x48, 0x83, 0xf8, 0x02, //0x000019cc cmpq $2, %rax + 0x0f, 0x83, 0x0f, 0x01, 0x00, 0x00, //0x000019d0 jae LBB5_85 + //0x000019d6 LBB5_65 + 0x48, 0x85, 0xc0, //0x000019d6 testq %rax, %rax + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x000019d9 je LBB5_67 + //0x000019df LBB5_66 + 0x41, 0x8a, 0x02, //0x000019df movb (%r10), %al + 0x88, 0x06, //0x000019e2 movb %al, (%rsi) + //0x000019e4 LBB5_67 + 0x4d, 0x29, 0xdd, //0x000019e4 subq %r11, %r13 + 0x49, 0x01, 0xdd, //0x000019e7 addq %rbx, %r13 + //0x000019ea LBB5_68 + 0x4d, 0x89, 0xea, //0x000019ea movq %r13, %r10 + //0x000019ed LBB5_69 + 0x4d, 0x85, 0xd2, //0x000019ed testq %r10, %r10 + 0x48, 0x8b, 0x55, 0xd0, //0x000019f0 movq $-48(%rbp), %rdx + 0x49, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, //0x000019f4 movabsq $12884901889, %r13 + 0x0f, 0x88, 0x7d, 0x04, 0x00, 0x00, //0x000019fe js LBB5_122 + 0x4d, 0x01, 0xd3, //0x00001a04 addq %r10, %r11 + 0x4d, 0x01, 0xd4, //0x00001a07 addq %r10, %r12 + 0x4d, 0x39, 0xd6, //0x00001a0a cmpq %r10, %r14 + 0x0f, 0x84, 0x3c, 0x04, 0x00, 0x00, //0x00001a0d je LBB5_118 + 0x4d, 0x29, 0xd1, //0x00001a13 subq %r10, %r9 + 0x4d, 0x29, 0xf2, //0x00001a16 subq %r14, %r10 + 0xe9, 0x11, 0x00, 0x00, 0x00, //0x00001a19 jmp LBB5_73 + 0x90, 0x90, //0x00001a1e .p2align 4, 0x90 + //0x00001a20 LBB5_72 + 0x49, 0xff, 0xc3, //0x00001a20 incq %r11 + 0x49, 0x01, 0xc4, //0x00001a23 addq %rax, %r12 + 0x49, 0xff, 0xc2, //0x00001a26 incq %r10 + 0x0f, 0x84, 0x20, 0x04, 0x00, 0x00, //0x00001a29 je LBB5_118 + //0x00001a2f LBB5_73 + 0x41, 0x0f, 0xb6, 0x33, //0x00001a2f movzbl (%r11), %esi + 0x48, 0xc1, 0xe6, 0x04, //0x00001a33 shlq $4, %rsi + 0x49, 0x8b, 0x1c, 0x30, //0x00001a37 movq (%r8,%rsi), %rbx + 0x85, 0xdb, //0x00001a3b testl %ebx, %ebx + 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x00001a3d je LBB5_81 + 0x48, 0x63, 0xc3, //0x00001a43 movslq %ebx, %rax + 0x49, 0x29, 0xc1, //0x00001a46 subq %rax, %r9 + 0x0f, 0x8c, 0x0e, 0x04, 0x00, 0x00, //0x00001a49 jl LBB5_119 + 0x48, 0xc1, 0xe3, 0x20, //0x00001a4f shlq $32, %rbx + 0x49, 0x8d, 0x4c, 0x30, 0x08, //0x00001a53 leaq $8(%r8,%rsi), %rcx + 0x4c, 0x39, 0xeb, //0x00001a58 cmpq %r13, %rbx + 0x0f, 0x8c, 0x2f, 0x00, 0x00, 0x00, //0x00001a5b jl LBB5_77 + 0x8b, 0x09, //0x00001a61 movl (%rcx), %ecx + 0x41, 0x89, 0x0c, 0x24, //0x00001a63 movl %ecx, (%r12) + 0x49, 0x8d, 0x4c, 0x30, 0x0c, //0x00001a67 leaq $12(%r8,%rsi), %rcx + 0x4d, 0x8d, 0x74, 0x24, 0x04, //0x00001a6c leaq $4(%r12), %r14 + 0x48, 0x8d, 0x58, 0xfc, //0x00001a71 leaq $-4(%rax), %rbx + 0x48, 0x83, 0xfb, 0x02, //0x00001a75 cmpq $2, %rbx + 0x0f, 0x83, 0x21, 0x00, 0x00, 0x00, //0x00001a79 jae LBB5_78 + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00001a7f jmp LBB5_79 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001a84 .p2align 4, 0x90 + //0x00001a90 LBB5_77 + 0x4d, 0x89, 0xe6, //0x00001a90 movq %r12, %r14 + 0x48, 0x89, 0xc3, //0x00001a93 movq %rax, %rbx + 0x48, 0x83, 0xfb, 0x02, //0x00001a96 cmpq $2, %rbx + 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00001a9a jb LBB5_79 + //0x00001aa0 LBB5_78 + 0x0f, 0xb7, 0x31, //0x00001aa0 movzwl (%rcx), %esi + 0x66, 0x41, 0x89, 0x36, //0x00001aa3 movw %si, (%r14) + 0x48, 0x83, 0xc1, 0x02, //0x00001aa7 addq $2, %rcx + 0x49, 0x83, 0xc6, 0x02, //0x00001aab addq $2, %r14 + 0x48, 0x83, 0xc3, 0xfe, //0x00001aaf addq $-2, %rbx + //0x00001ab3 LBB5_79 + 0x48, 0x85, 0xdb, //0x00001ab3 testq %rbx, %rbx + 0x0f, 0x84, 0x64, 0xff, 0xff, 0xff, //0x00001ab6 je LBB5_72 + 0x0f, 0xb6, 0x09, //0x00001abc movzbl (%rcx), %ecx + 0x41, 0x88, 0x0e, //0x00001abf movb %cl, (%r14) + 0xe9, 0x59, 0xff, 0xff, 0xff, //0x00001ac2 jmp LBB5_72 + //0x00001ac7 LBB5_81 + 0x4d, 0x89, 0xd6, //0x00001ac7 movq %r10, %r14 + 0x49, 0xf7, 0xde, //0x00001aca negq %r14 + 0x4d, 0x85, 0xd2, //0x00001acd testq %r10, %r10 + 0x0f, 0x85, 0x8e, 0xf9, 0xff, 0xff, //0x00001ad0 jne LBB5_3 + 0xe9, 0x74, 0x03, 0x00, 0x00, //0x00001ad6 jmp LBB5_118 + //0x00001adb LBB5_64 + 0x48, 0x83, 0xf8, 0x02, //0x00001adb cmpq $2, %rax + 0x0f, 0x82, 0xf1, 0xfe, 0xff, 0xff, //0x00001adf jb LBB5_65 + //0x00001ae5 LBB5_85 + 0x41, 0x0f, 0xb7, 0x0a, //0x00001ae5 movzwl (%r10), %ecx + 0x66, 0x89, 0x0e, //0x00001ae9 movw %cx, (%rsi) + 0x49, 0x83, 0xc2, 0x02, //0x00001aec addq $2, %r10 + 0x48, 0x83, 0xc6, 0x02, //0x00001af0 addq $2, %rsi + 0x48, 0x83, 0xc0, 0xfe, //0x00001af4 addq $-2, %rax + 0x48, 0x85, 0xc0, //0x00001af8 testq %rax, %rax + 0x0f, 0x85, 0xde, 0xfe, 0xff, 0xff, //0x00001afb jne LBB5_66 + 0xe9, 0xde, 0xfe, 0xff, 0xff, //0x00001b01 jmp LBB5_67 + //0x00001b06 LBB5_86 + 0x4c, 0x8d, 0x0d, 0x83, 0xf8, 0x00, 0x00, //0x00001b06 leaq $63619(%rip), %r9 /* __EscTab+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0x15, 0x4b, 0xf8, 0xff, 0xff, //0x00001b0d vmovdqa $-1973(%rip), %ymm10 /* LCPI5_0+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0x0d, 0x63, 0xf8, 0xff, 0xff, //0x00001b15 vmovdqa $-1949(%rip), %ymm9 /* LCPI5_1+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0x1d, 0x7b, 0xf8, 0xff, 0xff, //0x00001b1d vmovdqa $-1925(%rip), %ymm11 /* LCPI5_2+0(%rip) */ + 0xc4, 0x41, 0x3d, 0x76, 0xc0, //0x00001b25 vpcmpeqd %ymm8, %ymm8, %ymm8 + 0x48, 0x89, 0xd3, //0x00001b2a movq %rdx, %rbx + 0x4d, 0x89, 0xf2, //0x00001b2d movq %r14, %r10 + //0x00001b30 LBB5_87 + 0x49, 0x83, 0xfa, 0x10, //0x00001b30 cmpq $16, %r10 + 0x0f, 0x8d, 0x26, 0x01, 0x00, 0x00, //0x00001b34 jge LBB5_88 + //0x00001b3a LBB5_93 + 0x49, 0x83, 0xfa, 0x08, //0x00001b3a cmpq $8, %r10 + 0x0f, 0x8c, 0x85, 0x00, 0x00, 0x00, //0x00001b3e jl LBB5_97 + //0x00001b44 LBB5_94 + 0x0f, 0xb6, 0x07, //0x00001b44 movzbl (%rdi), %eax + 0x42, 0x0f, 0xb6, 0x04, 0x08, //0x00001b47 movzbl (%rax,%r9), %eax + 0x0f, 0xb6, 0x4f, 0x01, //0x00001b4c movzbl $1(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x00001b50 movzbl (%rcx,%r9), %ecx + 0x01, 0xc9, //0x00001b55 addl %ecx, %ecx + 0x09, 0xc1, //0x00001b57 orl %eax, %ecx + 0x0f, 0xb6, 0x47, 0x02, //0x00001b59 movzbl $2(%rdi), %eax + 0x42, 0x0f, 0xb6, 0x34, 0x08, //0x00001b5d movzbl (%rax,%r9), %esi + 0xc1, 0xe6, 0x02, //0x00001b62 shll $2, %esi + 0x0f, 0xb6, 0x47, 0x03, //0x00001b65 movzbl $3(%rdi), %eax + 0x42, 0x0f, 0xb6, 0x04, 0x08, //0x00001b69 movzbl (%rax,%r9), %eax + 0xc1, 0xe0, 0x03, //0x00001b6e shll $3, %eax + 0x09, 0xf0, //0x00001b71 orl %esi, %eax + 0x09, 0xc8, //0x00001b73 orl %ecx, %eax + 0x48, 0x8b, 0x0f, //0x00001b75 movq (%rdi), %rcx + 0x48, 0x89, 0x0b, //0x00001b78 movq %rcx, (%rbx) + 0x84, 0xc0, //0x00001b7b testb %al, %al + 0x0f, 0x85, 0x9a, 0x02, 0x00, 0x00, //0x00001b7d jne LBB5_115 + 0x0f, 0xb6, 0x47, 0x04, //0x00001b83 movzbl $4(%rdi), %eax + 0x42, 0x0f, 0xb6, 0x04, 0x08, //0x00001b87 movzbl (%rax,%r9), %eax + 0x0f, 0xb6, 0x4f, 0x05, //0x00001b8c movzbl $5(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x00001b90 movzbl (%rcx,%r9), %ecx + 0x01, 0xc9, //0x00001b95 addl %ecx, %ecx + 0x09, 0xc1, //0x00001b97 orl %eax, %ecx + 0x0f, 0xb6, 0x47, 0x06, //0x00001b99 movzbl $6(%rdi), %eax + 0x42, 0x0f, 0xb6, 0x34, 0x08, //0x00001b9d movzbl (%rax,%r9), %esi + 0xc1, 0xe6, 0x02, //0x00001ba2 shll $2, %esi + 0x0f, 0xb6, 0x47, 0x07, //0x00001ba5 movzbl $7(%rdi), %eax + 0x42, 0x0f, 0xb6, 0x04, 0x08, //0x00001ba9 movzbl (%rax,%r9), %eax + 0xc1, 0xe0, 0x03, //0x00001bae shll $3, %eax + 0x09, 0xf0, //0x00001bb1 orl %esi, %eax + 0x09, 0xc8, //0x00001bb3 orl %ecx, %eax + 0x84, 0xc0, //0x00001bb5 testb %al, %al + 0x0f, 0x85, 0x6e, 0x02, 0x00, 0x00, //0x00001bb7 jne LBB5_116 + 0x48, 0x83, 0xc3, 0x08, //0x00001bbd addq $8, %rbx + 0x48, 0x83, 0xc7, 0x08, //0x00001bc1 addq $8, %rdi + 0x49, 0x83, 0xc2, 0xf8, //0x00001bc5 addq $-8, %r10 + //0x00001bc9 LBB5_97 + 0x49, 0x83, 0xfa, 0x04, //0x00001bc9 cmpq $4, %r10 + 0x0f, 0x8c, 0x49, 0x00, 0x00, 0x00, //0x00001bcd jl LBB5_100 + 0x0f, 0xb6, 0x07, //0x00001bd3 movzbl (%rdi), %eax + 0x42, 0x0f, 0xb6, 0x04, 0x08, //0x00001bd6 movzbl (%rax,%r9), %eax + 0x0f, 0xb6, 0x4f, 0x01, //0x00001bdb movzbl $1(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x00001bdf movzbl (%rcx,%r9), %ecx + 0x01, 0xc9, //0x00001be4 addl %ecx, %ecx + 0x09, 0xc1, //0x00001be6 orl %eax, %ecx + 0x0f, 0xb6, 0x47, 0x02, //0x00001be8 movzbl $2(%rdi), %eax + 0x42, 0x0f, 0xb6, 0x34, 0x08, //0x00001bec movzbl (%rax,%r9), %esi + 0xc1, 0xe6, 0x02, //0x00001bf1 shll $2, %esi + 0x0f, 0xb6, 0x47, 0x03, //0x00001bf4 movzbl $3(%rdi), %eax + 0x42, 0x0f, 0xb6, 0x04, 0x08, //0x00001bf8 movzbl (%rax,%r9), %eax + 0xc1, 0xe0, 0x03, //0x00001bfd shll $3, %eax + 0x09, 0xf0, //0x00001c00 orl %esi, %eax + 0x09, 0xc8, //0x00001c02 orl %ecx, %eax + 0x8b, 0x0f, //0x00001c04 movl (%rdi), %ecx + 0x89, 0x0b, //0x00001c06 movl %ecx, (%rbx) + 0x84, 0xc0, //0x00001c08 testb %al, %al + 0x0f, 0x85, 0x0d, 0x02, 0x00, 0x00, //0x00001c0a jne LBB5_115 + 0x48, 0x83, 0xc3, 0x04, //0x00001c10 addq $4, %rbx + 0x48, 0x83, 0xc7, 0x04, //0x00001c14 addq $4, %rdi + 0x49, 0x83, 0xc2, 0xfc, //0x00001c18 addq $-4, %r10 + //0x00001c1c LBB5_100 + 0x4d, 0x85, 0xd2, //0x00001c1c testq %r10, %r10 + 0x0f, 0x8e, 0x1f, 0x02, 0x00, 0x00, //0x00001c1f jle LBB5_117 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001c25 .p2align 4, 0x90 + //0x00001c30 LBB5_101 + 0x0f, 0xb6, 0x07, //0x00001c30 movzbl (%rdi), %eax + 0x42, 0x80, 0x3c, 0x08, 0x00, //0x00001c33 cmpb $0, (%rax,%r9) + 0x0f, 0x85, 0x94, 0x01, 0x00, 0x00, //0x00001c38 jne LBB5_112 + 0x48, 0xff, 0xc7, //0x00001c3e incq %rdi + 0x88, 0x03, //0x00001c41 movb %al, (%rbx) + 0x48, 0xff, 0xc3, //0x00001c43 incq %rbx + 0x49, 0x83, 0xfa, 0x01, //0x00001c46 cmpq $1, %r10 + 0x4d, 0x8d, 0x52, 0xff, //0x00001c4a leaq $-1(%r10), %r10 + 0x0f, 0x8f, 0xdc, 0xff, 0xff, 0xff, //0x00001c4e jg LBB5_101 + 0xe9, 0xeb, 0x01, 0x00, 0x00, //0x00001c54 jmp LBB5_117 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001c59 .p2align 4, 0x90 + //0x00001c60 LBB5_88 + 0x49, 0x83, 0xfa, 0x20, //0x00001c60 cmpq $32, %r10 + 0x0f, 0x8c, 0x9f, 0x00, 0x00, 0x00, //0x00001c64 jl LBB5_103 + 0x49, 0x8d, 0x4a, 0x20, //0x00001c6a leaq $32(%r10), %rcx + 0x31, 0xc0, //0x00001c6e xorl %eax, %eax + //0x00001c70 .p2align 4, 0x90 + //0x00001c70 LBB5_90 + 0xc5, 0xfe, 0x6f, 0x04, 0x07, //0x00001c70 vmovdqu (%rdi,%rax), %ymm0 + 0xc5, 0xad, 0x64, 0xc8, //0x00001c75 vpcmpgtb %ymm0, %ymm10, %ymm1 + 0xc5, 0xb5, 0x74, 0xd0, //0x00001c79 vpcmpeqb %ymm0, %ymm9, %ymm2 + 0xc5, 0xa5, 0x74, 0xd8, //0x00001c7d vpcmpeqb %ymm0, %ymm11, %ymm3 + 0xc5, 0xe5, 0xeb, 0xd2, //0x00001c81 vpor %ymm2, %ymm3, %ymm2 + 0xc5, 0xfe, 0x7f, 0x04, 0x03, //0x00001c85 vmovdqu %ymm0, (%rbx,%rax) + 0xc4, 0xc1, 0x7d, 0x64, 0xc0, //0x00001c8a vpcmpgtb %ymm8, %ymm0, %ymm0 + 0xc5, 0xfd, 0xdb, 0xc1, //0x00001c8f vpand %ymm1, %ymm0, %ymm0 + 0xc5, 0xed, 0xeb, 0xc0, //0x00001c93 vpor %ymm0, %ymm2, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00001c97 vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x00001c9b testl %esi, %esi + 0x0f, 0x85, 0x1a, 0x01, 0x00, 0x00, //0x00001c9d jne LBB5_109 + 0x48, 0x83, 0xc0, 0x20, //0x00001ca3 addq $32, %rax + 0x48, 0x83, 0xc1, 0xe0, //0x00001ca7 addq $-32, %rcx + 0x48, 0x83, 0xf9, 0x3f, //0x00001cab cmpq $63, %rcx + 0x0f, 0x8f, 0xbb, 0xff, 0xff, 0xff, //0x00001caf jg LBB5_90 + 0xc5, 0xf8, 0x77, //0x00001cb5 vzeroupper + 0xc4, 0x41, 0x3d, 0x76, 0xc0, //0x00001cb8 vpcmpeqd %ymm8, %ymm8, %ymm8 + 0xc5, 0x7d, 0x6f, 0x1d, 0xdb, 0xf6, 0xff, 0xff, //0x00001cbd vmovdqa $-2341(%rip), %ymm11 /* LCPI5_2+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0x0d, 0xb3, 0xf6, 0xff, 0xff, //0x00001cc5 vmovdqa $-2381(%rip), %ymm9 /* LCPI5_1+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0x15, 0x8b, 0xf6, 0xff, 0xff, //0x00001ccd vmovdqa $-2421(%rip), %ymm10 /* LCPI5_0+0(%rip) */ + 0x48, 0x01, 0xc7, //0x00001cd5 addq %rax, %rdi + 0x49, 0x29, 0xc2, //0x00001cd8 subq %rax, %r10 + 0x48, 0x01, 0xc3, //0x00001cdb addq %rax, %rbx + 0x48, 0x83, 0xf9, 0x30, //0x00001cde cmpq $48, %rcx + 0xc5, 0xf9, 0x6f, 0x3d, 0xd6, 0xf6, 0xff, 0xff, //0x00001ce2 vmovdqa $-2346(%rip), %xmm7 /* LCPI5_3+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x2d, 0xde, 0xf6, 0xff, 0xff, //0x00001cea vmovdqa $-2338(%rip), %xmm5 /* LCPI5_4+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x25, 0xe6, 0xf6, 0xff, 0xff, //0x00001cf2 vmovdqa $-2330(%rip), %xmm4 /* LCPI5_5+0(%rip) */ + 0xc5, 0xc9, 0x76, 0xf6, //0x00001cfa vpcmpeqd %xmm6, %xmm6, %xmm6 + 0x0f, 0x8d, 0x41, 0x00, 0x00, 0x00, //0x00001cfe jge LBB5_104 + 0xe9, 0x31, 0xfe, 0xff, 0xff, //0x00001d04 jmp LBB5_93 + //0x00001d09 LBB5_103 + 0xc5, 0xf8, 0x77, //0x00001d09 vzeroupper + 0xc4, 0x41, 0x3d, 0x76, 0xc0, //0x00001d0c vpcmpeqd %ymm8, %ymm8, %ymm8 + 0xc5, 0x7d, 0x6f, 0x1d, 0x87, 0xf6, 0xff, 0xff, //0x00001d11 vmovdqa $-2425(%rip), %ymm11 /* LCPI5_2+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0x0d, 0x5f, 0xf6, 0xff, 0xff, //0x00001d19 vmovdqa $-2465(%rip), %ymm9 /* LCPI5_1+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0x15, 0x37, 0xf6, 0xff, 0xff, //0x00001d21 vmovdqa $-2505(%rip), %ymm10 /* LCPI5_0+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x3d, 0x8f, 0xf6, 0xff, 0xff, //0x00001d29 vmovdqa $-2417(%rip), %xmm7 /* LCPI5_3+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x2d, 0x97, 0xf6, 0xff, 0xff, //0x00001d31 vmovdqa $-2409(%rip), %xmm5 /* LCPI5_4+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x25, 0x9f, 0xf6, 0xff, 0xff, //0x00001d39 vmovdqa $-2401(%rip), %xmm4 /* LCPI5_5+0(%rip) */ + 0xc5, 0xc9, 0x76, 0xf6, //0x00001d41 vpcmpeqd %xmm6, %xmm6, %xmm6 + //0x00001d45 LBB5_104 + 0xb9, 0x10, 0x00, 0x00, 0x00, //0x00001d45 movl $16, %ecx + 0x31, 0xc0, //0x00001d4a xorl %eax, %eax + 0x90, 0x90, 0x90, 0x90, //0x00001d4c .p2align 4, 0x90 + //0x00001d50 LBB5_105 + 0xc5, 0xfa, 0x6f, 0x04, 0x07, //0x00001d50 vmovdqu (%rdi,%rax), %xmm0 + 0xc5, 0xc1, 0x64, 0xc8, //0x00001d55 vpcmpgtb %xmm0, %xmm7, %xmm1 + 0xc5, 0xf9, 0x74, 0xd5, //0x00001d59 vpcmpeqb %xmm5, %xmm0, %xmm2 + 0xc5, 0xf9, 0x74, 0xdc, //0x00001d5d vpcmpeqb %xmm4, %xmm0, %xmm3 + 0xc5, 0xe1, 0xeb, 0xd2, //0x00001d61 vpor %xmm2, %xmm3, %xmm2 + 0xc5, 0xfa, 0x7f, 0x04, 0x03, //0x00001d65 vmovdqu %xmm0, (%rbx,%rax) + 0xc5, 0xf9, 0x64, 0xc6, //0x00001d6a vpcmpgtb %xmm6, %xmm0, %xmm0 + 0xc5, 0xf9, 0xdb, 0xc1, //0x00001d6e vpand %xmm1, %xmm0, %xmm0 + 0xc5, 0xe9, 0xeb, 0xc0, //0x00001d72 vpor %xmm0, %xmm2, %xmm0 + 0xc5, 0xf9, 0xd7, 0xf0, //0x00001d76 vpmovmskb %xmm0, %esi + 0x66, 0x85, 0xf6, //0x00001d7a testw %si, %si + 0x0f, 0x85, 0x2f, 0x00, 0x00, 0x00, //0x00001d7d jne LBB5_108 + 0x48, 0x83, 0xc0, 0x10, //0x00001d83 addq $16, %rax + 0x49, 0x8d, 0x74, 0x0a, 0xf0, //0x00001d87 leaq $-16(%r10,%rcx), %rsi + 0x48, 0x83, 0xc1, 0xf0, //0x00001d8c addq $-16, %rcx + 0x48, 0x83, 0xfe, 0x1f, //0x00001d90 cmpq $31, %rsi + 0x0f, 0x8f, 0xb6, 0xff, 0xff, 0xff, //0x00001d94 jg LBB5_105 + 0x48, 0x01, 0xc7, //0x00001d9a addq %rax, %rdi + 0x49, 0x29, 0xc2, //0x00001d9d subq %rax, %r10 + 0x48, 0x01, 0xc3, //0x00001da0 addq %rax, %rbx + 0x49, 0x83, 0xfa, 0x08, //0x00001da3 cmpq $8, %r10 + 0x0f, 0x8d, 0x97, 0xfd, 0xff, 0xff, //0x00001da7 jge LBB5_94 + 0xe9, 0x17, 0xfe, 0xff, 0xff, //0x00001dad jmp LBB5_97 + //0x00001db2 LBB5_108 + 0x0f, 0xb7, 0xce, //0x00001db2 movzwl %si, %ecx + 0x0f, 0xbc, 0xc9, //0x00001db5 bsfl %ecx, %ecx + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00001db8 jmp LBB5_110 + //0x00001dbd LBB5_109 + 0x0f, 0xbc, 0xce, //0x00001dbd bsfl %esi, %ecx + //0x00001dc0 LBB5_110 + 0x48, 0x01, 0xcf, //0x00001dc0 addq %rcx, %rdi + 0x48, 0x01, 0xc7, //0x00001dc3 addq %rax, %rdi + 0x49, 0x29, 0xca, //0x00001dc6 subq %rcx, %r10 + 0x49, 0x29, 0xc2, //0x00001dc9 subq %rax, %r10 + 0x48, 0x01, 0xcb, //0x00001dcc addq %rcx, %rbx + //0x00001dcf LBB5_111 + 0x48, 0x01, 0xc3, //0x00001dcf addq %rax, %rbx + //0x00001dd2 LBB5_112 + 0x8a, 0x07, //0x00001dd2 movb (%rdi), %al + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001dd4 .p2align 4, 0x90 + //0x00001de0 LBB5_113 + 0x48, 0x89, 0xd9, //0x00001de0 movq %rbx, %rcx + 0x0f, 0xb6, 0xc0, //0x00001de3 movzbl %al, %eax + 0x48, 0xc1, 0xe0, 0x04, //0x00001de6 shlq $4, %rax + 0x49, 0x63, 0x1c, 0x00, //0x00001dea movslq (%r8,%rax), %rbx + 0x49, 0x8b, 0x44, 0x00, 0x08, //0x00001dee movq $8(%r8,%rax), %rax + 0x48, 0x89, 0x01, //0x00001df3 movq %rax, (%rcx) + 0x48, 0x01, 0xcb, //0x00001df6 addq %rcx, %rbx + 0x49, 0x83, 0xfa, 0x02, //0x00001df9 cmpq $2, %r10 + 0x0f, 0x8c, 0x41, 0x00, 0x00, 0x00, //0x00001dfd jl LBB5_117 + 0x49, 0xff, 0xca, //0x00001e03 decq %r10 + 0x0f, 0xb6, 0x47, 0x01, //0x00001e06 movzbl $1(%rdi), %eax + 0x48, 0xff, 0xc7, //0x00001e0a incq %rdi + 0x42, 0x80, 0x3c, 0x08, 0x00, //0x00001e0d cmpb $0, (%rax,%r9) + 0x0f, 0x85, 0xc8, 0xff, 0xff, 0xff, //0x00001e12 jne LBB5_113 + 0xe9, 0x13, 0xfd, 0xff, 0xff, //0x00001e18 jmp LBB5_87 + //0x00001e1d LBB5_115 + 0x0f, 0xbc, 0xc0, //0x00001e1d bsfl %eax, %eax + 0x48, 0x01, 0xc7, //0x00001e20 addq %rax, %rdi + 0x49, 0x29, 0xc2, //0x00001e23 subq %rax, %r10 + 0xe9, 0xa4, 0xff, 0xff, 0xff, //0x00001e26 jmp LBB5_111 + //0x00001e2b LBB5_116 + 0x0f, 0xbc, 0xc0, //0x00001e2b bsfl %eax, %eax + 0x48, 0x8d, 0x48, 0x04, //0x00001e2e leaq $4(%rax), %rcx + 0x48, 0x8d, 0x7c, 0x07, 0x04, //0x00001e32 leaq $4(%rdi,%rax), %rdi + 0x49, 0x29, 0xca, //0x00001e37 subq %rcx, %r10 + 0x48, 0x8d, 0x5c, 0x03, 0x04, //0x00001e3a leaq $4(%rbx,%rax), %rbx + 0xe9, 0x8e, 0xff, 0xff, 0xff, //0x00001e3f jmp LBB5_112 + //0x00001e44 LBB5_117 + 0x48, 0x29, 0xd3, //0x00001e44 subq %rdx, %rbx + 0x49, 0x89, 0x1f, //0x00001e47 movq %rbx, (%r15) + 0xe9, 0x1d, 0x00, 0x00, 0x00, //0x00001e4a jmp LBB5_121 + //0x00001e4f LBB5_118 + 0x49, 0x29, 0xd4, //0x00001e4f subq %rdx, %r12 + 0x4d, 0x89, 0x27, //0x00001e52 movq %r12, (%r15) + 0x49, 0x29, 0xfb, //0x00001e55 subq %rdi, %r11 + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x00001e58 jmp LBB5_120 + //0x00001e5d LBB5_119 + 0x49, 0x29, 0xd4, //0x00001e5d subq %rdx, %r12 + 0x4d, 0x89, 0x27, //0x00001e60 movq %r12, (%r15) + 0x49, 0xf7, 0xd3, //0x00001e63 notq %r11 + 0x49, 0x01, 0xfb, //0x00001e66 addq %rdi, %r11 + //0x00001e69 LBB5_120 + 0x4d, 0x89, 0xde, //0x00001e69 movq %r11, %r14 + //0x00001e6c LBB5_121 + 0x4c, 0x89, 0xf0, //0x00001e6c movq %r14, %rax + 0x48, 0x83, 0xc4, 0x08, //0x00001e6f addq $8, %rsp + 0x5b, //0x00001e73 popq %rbx + 0x41, 0x5c, //0x00001e74 popq %r12 + 0x41, 0x5d, //0x00001e76 popq %r13 + 0x41, 0x5e, //0x00001e78 popq %r14 + 0x41, 0x5f, //0x00001e7a popq %r15 + 0x5d, //0x00001e7c popq %rbp + 0xc5, 0xf8, 0x77, //0x00001e7d vzeroupper + 0xc3, //0x00001e80 retq + //0x00001e81 LBB5_122 + 0x49, 0x29, 0xd4, //0x00001e81 subq %rdx, %r12 + 0x49, 0xf7, 0xd2, //0x00001e84 notq %r10 + 0x4d, 0x01, 0xd4, //0x00001e87 addq %r10, %r12 + 0x4d, 0x89, 0x27, //0x00001e8a movq %r12, (%r15) + 0x49, 0x29, 0xfb, //0x00001e8d subq %rdi, %r11 + 0x4d, 0x01, 0xd3, //0x00001e90 addq %r10, %r11 + 0x49, 0xf7, 0xd3, //0x00001e93 notq %r11 + 0xe9, 0xce, 0xff, 0xff, 0xff, //0x00001e96 jmp LBB5_120 + 0x00, 0x00, 0x00, 0x00, 0x00, //0x00001e9b .p2align 5, 0x00 + //0x00001ea0 LCPI6_0 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x00001ea0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x00001eb0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x00001ec0 .p2align 4, 0x00 + //0x00001ec0 LCPI6_1 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x00001ec0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x00001ed0 .p2align 4, 0x90 + //0x00001ed0 _unquote + 0x55, //0x00001ed0 pushq %rbp + 0x48, 0x89, 0xe5, //0x00001ed1 movq %rsp, %rbp + 0x41, 0x57, //0x00001ed4 pushq %r15 + 0x41, 0x56, //0x00001ed6 pushq %r14 + 0x41, 0x55, //0x00001ed8 pushq %r13 + 0x41, 0x54, //0x00001eda pushq %r12 + 0x53, //0x00001edc pushq %rbx + 0x48, 0x83, 0xec, 0x18, //0x00001edd subq $24, %rsp + 0x48, 0x85, 0xf6, //0x00001ee1 testq %rsi, %rsi + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x00001ee4 je LBB6_2 + 0x48, 0x89, 0x4d, 0xd0, //0x00001eea movq %rcx, $-48(%rbp) + 0x45, 0x89, 0xc2, //0x00001eee movl %r8d, %r10d + 0x41, 0x83, 0xe2, 0x01, //0x00001ef1 andl $1, %r10d + 0xc5, 0xfd, 0x6f, 0x0d, 0xa3, 0xff, 0xff, 0xff, //0x00001ef5 vmovdqa $-93(%rip), %ymm1 /* LCPI6_0+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x15, 0xbb, 0xff, 0xff, 0xff, //0x00001efd vmovdqa $-69(%rip), %xmm2 /* LCPI6_1+0(%rip) */ + 0x49, 0x89, 0xf9, //0x00001f05 movq %rdi, %r9 + 0x49, 0x89, 0xf5, //0x00001f08 movq %rsi, %r13 + 0x48, 0x89, 0xd0, //0x00001f0b movq %rdx, %rax + 0xe9, 0x59, 0x00, 0x00, 0x00, //0x00001f0e jmp LBB6_8 + //0x00001f13 LBB6_2 + 0x45, 0x31, 0xed, //0x00001f13 xorl %r13d, %r13d + 0x48, 0x89, 0xd0, //0x00001f16 movq %rdx, %rax + //0x00001f19 LBB6_3 + 0x4c, 0x01, 0xe8, //0x00001f19 addq %r13, %rax + 0x48, 0x29, 0xd0, //0x00001f1c subq %rdx, %rax + //0x00001f1f LBB6_4 + 0x48, 0x83, 0xc4, 0x18, //0x00001f1f addq $24, %rsp + 0x5b, //0x00001f23 popq %rbx + 0x41, 0x5c, //0x00001f24 popq %r12 + 0x41, 0x5d, //0x00001f26 popq %r13 + 0x41, 0x5e, //0x00001f28 popq %r14 + 0x41, 0x5f, //0x00001f2a popq %r15 + 0x5d, //0x00001f2c popq %rbp + 0xc5, 0xf8, 0x77, //0x00001f2d vzeroupper + 0xc3, //0x00001f30 retq + //0x00001f31 LBB6_5 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00001f31 leaq $4(%r9,%r12), %r9 + 0x44, 0x89, 0xf9, //0x00001f36 movl %r15d, %ecx + 0xc1, 0xe9, 0x06, //0x00001f39 shrl $6, %ecx + 0x80, 0xc9, 0xc0, //0x00001f3c orb $-64, %cl + 0x88, 0x08, //0x00001f3f movb %cl, (%rax) + 0x41, 0x80, 0xe7, 0x3f, //0x00001f41 andb $63, %r15b + 0x41, 0x80, 0xcf, 0x80, //0x00001f45 orb $-128, %r15b + 0x44, 0x88, 0x78, 0x01, //0x00001f49 movb %r15b, $1(%rax) + 0x48, 0x83, 0xc0, 0x02, //0x00001f4d addq $2, %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001f51 .p2align 4, 0x90 + //0x00001f60 LBB6_6 + 0x4d, 0x89, 0xf5, //0x00001f60 movq %r14, %r13 + //0x00001f63 LBB6_7 + 0x4d, 0x85, 0xed, //0x00001f63 testq %r13, %r13 + 0x0f, 0x84, 0x9d, 0x07, 0x00, 0x00, //0x00001f66 je LBB6_101 + //0x00001f6c LBB6_8 + 0x41, 0x80, 0x39, 0x5c, //0x00001f6c cmpb $92, (%r9) + 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00001f70 jne LBB6_10 + 0x31, 0xdb, //0x00001f76 xorl %ebx, %ebx + 0xe9, 0x43, 0x01, 0x00, 0x00, //0x00001f78 jmp LBB6_24 + 0x90, 0x90, 0x90, //0x00001f7d .p2align 4, 0x90 + //0x00001f80 LBB6_10 + 0x4d, 0x89, 0xec, //0x00001f80 movq %r13, %r12 + 0x49, 0x89, 0xc7, //0x00001f83 movq %rax, %r15 + 0x4d, 0x89, 0xce, //0x00001f86 movq %r9, %r14 + 0x49, 0x83, 0xfd, 0x20, //0x00001f89 cmpq $32, %r13 + 0x0f, 0x8c, 0x3e, 0x00, 0x00, 0x00, //0x00001f8d jl LBB6_14 + 0x4d, 0x89, 0xce, //0x00001f93 movq %r9, %r14 + 0x49, 0x89, 0xc7, //0x00001f96 movq %rax, %r15 + 0x4d, 0x89, 0xec, //0x00001f99 movq %r13, %r12 + 0x90, 0x90, 0x90, 0x90, //0x00001f9c .p2align 4, 0x90 + //0x00001fa0 LBB6_12 + 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00001fa0 vmovdqu (%r14), %ymm0 + 0xc4, 0xc1, 0x7e, 0x7f, 0x07, //0x00001fa5 vmovdqu %ymm0, (%r15) + 0xc5, 0xfd, 0x74, 0xc1, //0x00001faa vpcmpeqb %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x00001fae vpmovmskb %ymm0, %ebx + 0x85, 0xdb, //0x00001fb2 testl %ebx, %ebx + 0x0f, 0x85, 0xc2, 0x00, 0x00, 0x00, //0x00001fb4 jne LBB6_22 + 0x49, 0x83, 0xc6, 0x20, //0x00001fba addq $32, %r14 + 0x49, 0x83, 0xc7, 0x20, //0x00001fbe addq $32, %r15 + 0x49, 0x83, 0xfc, 0x3f, //0x00001fc2 cmpq $63, %r12 + 0x4d, 0x8d, 0x64, 0x24, 0xe0, //0x00001fc6 leaq $-32(%r12), %r12 + 0x0f, 0x8f, 0xcf, 0xff, 0xff, 0xff, //0x00001fcb jg LBB6_12 + //0x00001fd1 LBB6_14 + 0xc5, 0xf8, 0x77, //0x00001fd1 vzeroupper + 0xc5, 0xf9, 0x6f, 0x15, 0xe4, 0xfe, 0xff, 0xff, //0x00001fd4 vmovdqa $-284(%rip), %xmm2 /* LCPI6_1+0(%rip) */ + 0x49, 0x83, 0xfc, 0x10, //0x00001fdc cmpq $16, %r12 + 0x0f, 0x8c, 0x3c, 0x00, 0x00, 0x00, //0x00001fe0 jl LBB6_17 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001fe6 .p2align 4, 0x90 + //0x00001ff0 LBB6_15 + 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00001ff0 vmovdqu (%r14), %xmm0 + 0xc4, 0xc1, 0x7a, 0x7f, 0x07, //0x00001ff5 vmovdqu %xmm0, (%r15) + 0xc5, 0xf9, 0x74, 0xc2, //0x00001ffa vpcmpeqb %xmm2, %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd8, //0x00001ffe vpmovmskb %xmm0, %ebx + 0x66, 0x85, 0xdb, //0x00002002 testw %bx, %bx + 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x00002005 jne LBB6_23 + 0x49, 0x83, 0xc6, 0x10, //0x0000200b addq $16, %r14 + 0x49, 0x83, 0xc7, 0x10, //0x0000200f addq $16, %r15 + 0x49, 0x83, 0xfc, 0x1f, //0x00002013 cmpq $31, %r12 + 0x4d, 0x8d, 0x64, 0x24, 0xf0, //0x00002017 leaq $-16(%r12), %r12 + 0x0f, 0x8f, 0xce, 0xff, 0xff, 0xff, //0x0000201c jg LBB6_15 + //0x00002022 LBB6_17 + 0x4d, 0x85, 0xe4, //0x00002022 testq %r12, %r12 + 0x0f, 0x84, 0xee, 0xfe, 0xff, 0xff, //0x00002025 je LBB6_3 + 0x31, 0xdb, //0x0000202b xorl %ebx, %ebx + 0xc5, 0xfd, 0x6f, 0x0d, 0x6b, 0xfe, 0xff, 0xff, //0x0000202d vmovdqa $-405(%rip), %ymm1 /* LCPI6_0+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002035 .p2align 4, 0x90 + //0x00002040 LBB6_19 + 0x45, 0x0f, 0xb6, 0x1c, 0x1e, //0x00002040 movzbl (%r14,%rbx), %r11d + 0x41, 0x80, 0xfb, 0x5c, //0x00002045 cmpb $92, %r11b + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00002049 je LBB6_21 + 0x45, 0x88, 0x1c, 0x1f, //0x0000204f movb %r11b, (%r15,%rbx) + 0x48, 0xff, 0xc3, //0x00002053 incq %rbx + 0x49, 0x39, 0xdc, //0x00002056 cmpq %rbx, %r12 + 0x0f, 0x85, 0xe1, 0xff, 0xff, 0xff, //0x00002059 jne LBB6_19 + 0xe9, 0xb5, 0xfe, 0xff, 0xff, //0x0000205f jmp LBB6_3 + //0x00002064 LBB6_21 + 0x49, 0x01, 0xde, //0x00002064 addq %rbx, %r14 + 0x4d, 0x29, 0xce, //0x00002067 subq %r9, %r14 + 0x4c, 0x89, 0xf3, //0x0000206a movq %r14, %rbx + 0x48, 0x83, 0xfb, 0xff, //0x0000206d cmpq $-1, %rbx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00002071 jne LBB6_24 + 0xe9, 0x9d, 0xfe, 0xff, 0xff, //0x00002077 jmp LBB6_3 + //0x0000207c LBB6_22 + 0x48, 0x63, 0xdb, //0x0000207c movslq %ebx, %rbx + 0x4d, 0x29, 0xce, //0x0000207f subq %r9, %r14 + 0x48, 0x0f, 0xbc, 0xdb, //0x00002082 bsfq %rbx, %rbx + 0x4c, 0x01, 0xf3, //0x00002086 addq %r14, %rbx + 0x48, 0x83, 0xfb, 0xff, //0x00002089 cmpq $-1, %rbx + 0x0f, 0x85, 0x2d, 0x00, 0x00, 0x00, //0x0000208d jne LBB6_24 + 0xe9, 0x81, 0xfe, 0xff, 0xff, //0x00002093 jmp LBB6_3 + //0x00002098 LBB6_23 + 0x0f, 0xb7, 0xdb, //0x00002098 movzwl %bx, %ebx + 0x4d, 0x29, 0xce, //0x0000209b subq %r9, %r14 + 0x48, 0x0f, 0xbc, 0xdb, //0x0000209e bsfq %rbx, %rbx + 0x4c, 0x01, 0xf3, //0x000020a2 addq %r14, %rbx + 0xc5, 0xfd, 0x6f, 0x0d, 0xf3, 0xfd, 0xff, 0xff, //0x000020a5 vmovdqa $-525(%rip), %ymm1 /* LCPI6_0+0(%rip) */ + 0x48, 0x83, 0xfb, 0xff, //0x000020ad cmpq $-1, %rbx + 0x0f, 0x84, 0x62, 0xfe, 0xff, 0xff, //0x000020b1 je LBB6_3 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000020b7 .p2align 4, 0x90 + //0x000020c0 LBB6_24 + 0x48, 0x8d, 0x4b, 0x02, //0x000020c0 leaq $2(%rbx), %rcx + 0x49, 0x29, 0xcd, //0x000020c4 subq %rcx, %r13 + 0x0f, 0x88, 0x10, 0x06, 0x00, 0x00, //0x000020c7 js LBB6_99 + 0x4d, 0x8d, 0x4c, 0x19, 0x02, //0x000020cd leaq $2(%r9,%rbx), %r9 + 0x4d, 0x85, 0xd2, //0x000020d2 testq %r10, %r10 + 0x0f, 0x85, 0x09, 0x04, 0x00, 0x00, //0x000020d5 jne LBB6_67 + //0x000020db LBB6_26 + 0x48, 0x01, 0xd8, //0x000020db addq %rbx, %rax + 0x41, 0x0f, 0xb6, 0x49, 0xff, //0x000020de movzbl $-1(%r9), %ecx + 0x48, 0x8d, 0x1d, 0xa6, 0xf3, 0x00, 0x00, //0x000020e3 leaq $62374(%rip), %rbx /* __UnquoteTab+0(%rip) */ + 0x8a, 0x1c, 0x19, //0x000020ea movb (%rcx,%rbx), %bl + 0x80, 0xfb, 0xff, //0x000020ed cmpb $-1, %bl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x000020f0 je LBB6_29 + 0x84, 0xdb, //0x000020f6 testb %bl, %bl + 0x0f, 0x84, 0xf2, 0x05, 0x00, 0x00, //0x000020f8 je LBB6_100 + 0x88, 0x18, //0x000020fe movb %bl, (%rax) + 0x48, 0xff, 0xc0, //0x00002100 incq %rax + 0xe9, 0x5b, 0xfe, 0xff, 0xff, //0x00002103 jmp LBB6_7 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002108 .p2align 4, 0x90 + //0x00002110 LBB6_29 + 0x49, 0x83, 0xfd, 0x03, //0x00002110 cmpq $3, %r13 + 0x0f, 0x8e, 0xc3, 0x05, 0x00, 0x00, //0x00002114 jle LBB6_99 + 0x45, 0x8b, 0x31, //0x0000211a movl (%r9), %r14d + 0x45, 0x89, 0xf7, //0x0000211d movl %r14d, %r15d + 0x41, 0xf7, 0xd7, //0x00002120 notl %r15d + 0x41, 0x8d, 0x8e, 0xd0, 0xcf, 0xcf, 0xcf, //0x00002123 leal $-808464432(%r14), %ecx + 0x41, 0x81, 0xe7, 0x80, 0x80, 0x80, 0x80, //0x0000212a andl $-2139062144, %r15d + 0x41, 0x85, 0xcf, //0x00002131 testl %ecx, %r15d + 0x0f, 0x85, 0xe7, 0x04, 0x00, 0x00, //0x00002134 jne LBB6_90 + 0x41, 0x8d, 0x8e, 0x19, 0x19, 0x19, 0x19, //0x0000213a leal $421075225(%r14), %ecx + 0x44, 0x09, 0xf1, //0x00002141 orl %r14d, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x00002144 testl $-2139062144, %ecx + 0x0f, 0x85, 0xd1, 0x04, 0x00, 0x00, //0x0000214a jne LBB6_90 + 0x44, 0x89, 0xf3, //0x00002150 movl %r14d, %ebx + 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x00002153 andl $2139062143, %ebx + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x00002159 movl $-1061109568, %ecx + 0x29, 0xd9, //0x0000215e subl %ebx, %ecx + 0x44, 0x8d, 0x9b, 0x46, 0x46, 0x46, 0x46, //0x00002160 leal $1179010630(%rbx), %r11d + 0x44, 0x21, 0xf9, //0x00002167 andl %r15d, %ecx + 0x44, 0x85, 0xd9, //0x0000216a testl %r11d, %ecx + 0x0f, 0x85, 0xae, 0x04, 0x00, 0x00, //0x0000216d jne LBB6_90 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x00002173 movl $-522133280, %ecx + 0x29, 0xd9, //0x00002178 subl %ebx, %ecx + 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x0000217a addl $960051513, %ebx + 0x41, 0x21, 0xcf, //0x00002180 andl %ecx, %r15d + 0x41, 0x85, 0xdf, //0x00002183 testl %ebx, %r15d + 0x0f, 0x85, 0x95, 0x04, 0x00, 0x00, //0x00002186 jne LBB6_90 + 0x41, 0x0f, 0xce, //0x0000218c bswapl %r14d + 0x44, 0x89, 0xf1, //0x0000218f movl %r14d, %ecx + 0xc1, 0xe9, 0x04, //0x00002192 shrl $4, %ecx + 0xf7, 0xd1, //0x00002195 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00002197 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x0000219d leal (%rcx,%rcx,8), %ecx + 0x41, 0x81, 0xe6, 0x0f, 0x0f, 0x0f, 0x0f, //0x000021a0 andl $252645135, %r14d + 0x41, 0x01, 0xce, //0x000021a7 addl %ecx, %r14d + 0x44, 0x89, 0xf1, //0x000021aa movl %r14d, %ecx + 0xc1, 0xe9, 0x04, //0x000021ad shrl $4, %ecx + 0x44, 0x09, 0xf1, //0x000021b0 orl %r14d, %ecx + 0x44, 0x0f, 0xb6, 0xf9, //0x000021b3 movzbl %cl, %r15d + 0xc1, 0xe9, 0x08, //0x000021b7 shrl $8, %ecx + 0x81, 0xe1, 0x00, 0xff, 0x00, 0x00, //0x000021ba andl $65280, %ecx + 0x41, 0x09, 0xcf, //0x000021c0 orl %ecx, %r15d + 0x4d, 0x8d, 0x75, 0xfc, //0x000021c3 leaq $-4(%r13), %r14 + 0x41, 0x81, 0xff, 0x80, 0x00, 0x00, 0x00, //0x000021c7 cmpl $128, %r15d + 0x0f, 0x82, 0x61, 0x03, 0x00, 0x00, //0x000021ce jb LBB6_75 + 0x45, 0x31, 0xe4, //0x000021d4 xorl %r12d, %r12d + 0x4d, 0x85, 0xd2, //0x000021d7 testq %r10, %r10 + 0x0f, 0x84, 0x70, 0x01, 0x00, 0x00, //0x000021da je LBB6_51 + //0x000021e0 LBB6_36 + 0x41, 0x81, 0xff, 0x00, 0x08, 0x00, 0x00, //0x000021e0 cmpl $2048, %r15d + 0x0f, 0x82, 0x44, 0xfd, 0xff, 0xff, //0x000021e7 jb LBB6_5 + 0x44, 0x89, 0xf9, //0x000021ed movl %r15d, %ecx + 0x81, 0xe1, 0x00, 0xf8, 0xff, 0xff, //0x000021f0 andl $-2048, %ecx + 0x81, 0xf9, 0x00, 0xd8, 0x00, 0x00, //0x000021f6 cmpl $55296, %ecx + 0x0f, 0x85, 0xae, 0x02, 0x00, 0x00, //0x000021fc jne LBB6_65 + 0x4d, 0x85, 0xf6, //0x00002202 testq %r14, %r14 + 0x0f, 0x8e, 0x61, 0x03, 0x00, 0x00, //0x00002205 jle LBB6_80 + 0x43, 0x80, 0x7c, 0x21, 0x04, 0x5c, //0x0000220b cmpb $92, $4(%r9,%r12) + 0x0f, 0x85, 0x64, 0x03, 0x00, 0x00, //0x00002211 jne LBB6_81 + 0x41, 0x81, 0xff, 0xff, 0xdb, 0x00, 0x00, //0x00002217 cmpl $56319, %r15d + 0x0f, 0x87, 0x2a, 0x03, 0x00, 0x00, //0x0000221e ja LBB6_78 + 0x49, 0x83, 0xfe, 0x07, //0x00002224 cmpq $7, %r14 + 0x0f, 0x8c, 0x20, 0x03, 0x00, 0x00, //0x00002228 jl LBB6_78 + 0x43, 0x80, 0x7c, 0x21, 0x05, 0x5c, //0x0000222e cmpb $92, $5(%r9,%r12) + 0x0f, 0x85, 0x14, 0x03, 0x00, 0x00, //0x00002234 jne LBB6_78 + 0x43, 0x80, 0x7c, 0x21, 0x06, 0x75, //0x0000223a cmpb $117, $6(%r9,%r12) + 0x0f, 0x85, 0x08, 0x03, 0x00, 0x00, //0x00002240 jne LBB6_78 + 0x47, 0x8b, 0x5c, 0x21, 0x07, //0x00002246 movl $7(%r9,%r12), %r11d + 0x44, 0x89, 0xdb, //0x0000224b movl %r11d, %ebx + 0xf7, 0xd3, //0x0000224e notl %ebx + 0x41, 0x8d, 0x8b, 0xd0, 0xcf, 0xcf, 0xcf, //0x00002250 leal $-808464432(%r11), %ecx + 0x81, 0xe3, 0x80, 0x80, 0x80, 0x80, //0x00002257 andl $-2139062144, %ebx + 0x89, 0x5d, 0xcc, //0x0000225d movl %ebx, $-52(%rbp) + 0x85, 0xcb, //0x00002260 testl %ecx, %ebx + 0x0f, 0x85, 0xbe, 0x04, 0x00, 0x00, //0x00002262 jne LBB6_104 + 0x41, 0x8d, 0x8b, 0x19, 0x19, 0x19, 0x19, //0x00002268 leal $421075225(%r11), %ecx + 0x44, 0x09, 0xd9, //0x0000226f orl %r11d, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x00002272 testl $-2139062144, %ecx + 0x0f, 0x85, 0xa8, 0x04, 0x00, 0x00, //0x00002278 jne LBB6_104 + 0x44, 0x89, 0xdb, //0x0000227e movl %r11d, %ebx + 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x00002281 andl $2139062143, %ebx + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x00002287 movl $-1061109568, %ecx + 0x29, 0xd9, //0x0000228c subl %ebx, %ecx + 0x4c, 0x89, 0x5d, 0xc0, //0x0000228e movq %r11, $-64(%rbp) + 0x44, 0x8d, 0x9b, 0x46, 0x46, 0x46, 0x46, //0x00002292 leal $1179010630(%rbx), %r11d + 0x23, 0x4d, 0xcc, //0x00002299 andl $-52(%rbp), %ecx + 0x44, 0x85, 0xd9, //0x0000229c testl %r11d, %ecx + 0x4c, 0x8b, 0x5d, 0xc0, //0x0000229f movq $-64(%rbp), %r11 + 0x0f, 0x85, 0x7d, 0x04, 0x00, 0x00, //0x000022a3 jne LBB6_104 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x000022a9 movl $-522133280, %ecx + 0x29, 0xd9, //0x000022ae subl %ebx, %ecx + 0x89, 0x4d, 0xc8, //0x000022b0 movl %ecx, $-56(%rbp) + 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x000022b3 addl $960051513, %ebx + 0x8b, 0x4d, 0xcc, //0x000022b9 movl $-52(%rbp), %ecx + 0x23, 0x4d, 0xc8, //0x000022bc andl $-56(%rbp), %ecx + 0x85, 0xd9, //0x000022bf testl %ebx, %ecx + 0x0f, 0x85, 0x5f, 0x04, 0x00, 0x00, //0x000022c1 jne LBB6_104 + 0x41, 0x0f, 0xcb, //0x000022c7 bswapl %r11d + 0x44, 0x89, 0xd9, //0x000022ca movl %r11d, %ecx + 0xc1, 0xe9, 0x04, //0x000022cd shrl $4, %ecx + 0xf7, 0xd1, //0x000022d0 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x000022d2 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x000022d8 leal (%rcx,%rcx,8), %ecx + 0x41, 0x81, 0xe3, 0x0f, 0x0f, 0x0f, 0x0f, //0x000022db andl $252645135, %r11d + 0x41, 0x01, 0xcb, //0x000022e2 addl %ecx, %r11d + 0x44, 0x89, 0xd9, //0x000022e5 movl %r11d, %ecx + 0xc1, 0xe9, 0x04, //0x000022e8 shrl $4, %ecx + 0x44, 0x09, 0xd9, //0x000022eb orl %r11d, %ecx + 0x89, 0xcb, //0x000022ee movl %ecx, %ebx + 0xc1, 0xeb, 0x08, //0x000022f0 shrl $8, %ebx + 0x81, 0xe3, 0x00, 0xff, 0x00, 0x00, //0x000022f3 andl $65280, %ebx + 0x44, 0x0f, 0xb6, 0xd9, //0x000022f9 movzbl %cl, %r11d + 0x41, 0x09, 0xdb, //0x000022fd orl %ebx, %r11d + 0x81, 0xe1, 0x00, 0x00, 0xfc, 0x00, //0x00002300 andl $16515072, %ecx + 0x81, 0xf9, 0x00, 0x00, 0xdc, 0x00, //0x00002306 cmpl $14417920, %ecx + 0x0f, 0x84, 0x97, 0x02, 0x00, 0x00, //0x0000230c je LBB6_85 + 0x41, 0xf6, 0xc0, 0x02, //0x00002312 testb $2, %r8b + 0x0f, 0x84, 0x1d, 0x05, 0x00, 0x00, //0x00002316 je LBB6_119 + 0x49, 0x83, 0xc6, 0xf9, //0x0000231c addq $-7, %r14 + 0x66, 0xc7, 0x00, 0xef, 0xbf, //0x00002320 movw $-16401, (%rax) + 0xc6, 0x40, 0x02, 0xbd, //0x00002325 movb $-67, $2(%rax) + 0x48, 0x83, 0xc0, 0x03, //0x00002329 addq $3, %rax + 0x49, 0x83, 0xc4, 0x07, //0x0000232d addq $7, %r12 + 0x45, 0x89, 0xdf, //0x00002331 movl %r11d, %r15d + 0x41, 0x83, 0xfb, 0x7f, //0x00002334 cmpl $127, %r11d + 0x0f, 0x87, 0xa2, 0xfe, 0xff, 0xff, //0x00002338 ja LBB6_36 + 0xe9, 0x59, 0x01, 0x00, 0x00, //0x0000233e jmp LBB6_64 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002343 .p2align 4, 0x90 + //0x00002350 LBB6_51 + 0x41, 0x81, 0xff, 0x00, 0x08, 0x00, 0x00, //0x00002350 cmpl $2048, %r15d + 0x0f, 0x82, 0xd4, 0xfb, 0xff, 0xff, //0x00002357 jb LBB6_5 + 0x44, 0x89, 0xf9, //0x0000235d movl %r15d, %ecx + 0x81, 0xe1, 0x00, 0xf8, 0xff, 0xff, //0x00002360 andl $-2048, %ecx + 0x81, 0xf9, 0x00, 0xd8, 0x00, 0x00, //0x00002366 cmpl $55296, %ecx + 0x0f, 0x85, 0x3e, 0x01, 0x00, 0x00, //0x0000236c jne LBB6_65 + 0x41, 0x81, 0xff, 0xff, 0xdb, 0x00, 0x00, //0x00002372 cmpl $56319, %r15d + 0x0f, 0x87, 0xc5, 0x01, 0x00, 0x00, //0x00002379 ja LBB6_77 + 0x49, 0x83, 0xfe, 0x06, //0x0000237f cmpq $6, %r14 + 0x0f, 0x8c, 0xbb, 0x01, 0x00, 0x00, //0x00002383 jl LBB6_77 + 0x43, 0x80, 0x7c, 0x21, 0x04, 0x5c, //0x00002389 cmpb $92, $4(%r9,%r12) + 0x0f, 0x85, 0xaf, 0x01, 0x00, 0x00, //0x0000238f jne LBB6_77 + 0x43, 0x80, 0x7c, 0x21, 0x05, 0x75, //0x00002395 cmpb $117, $5(%r9,%r12) + 0x0f, 0x85, 0xa3, 0x01, 0x00, 0x00, //0x0000239b jne LBB6_77 + 0x47, 0x8b, 0x5c, 0x21, 0x06, //0x000023a1 movl $6(%r9,%r12), %r11d + 0x44, 0x89, 0xdb, //0x000023a6 movl %r11d, %ebx + 0xf7, 0xd3, //0x000023a9 notl %ebx + 0x41, 0x8d, 0x8b, 0xd0, 0xcf, 0xcf, 0xcf, //0x000023ab leal $-808464432(%r11), %ecx + 0x81, 0xe3, 0x80, 0x80, 0x80, 0x80, //0x000023b2 andl $-2139062144, %ebx + 0x89, 0x5d, 0xcc, //0x000023b8 movl %ebx, $-52(%rbp) + 0x85, 0xcb, //0x000023bb testl %ecx, %ebx + 0x0f, 0x85, 0x59, 0x03, 0x00, 0x00, //0x000023bd jne LBB6_103 + 0x41, 0x8d, 0x8b, 0x19, 0x19, 0x19, 0x19, //0x000023c3 leal $421075225(%r11), %ecx + 0x44, 0x09, 0xd9, //0x000023ca orl %r11d, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x000023cd testl $-2139062144, %ecx + 0x0f, 0x85, 0x43, 0x03, 0x00, 0x00, //0x000023d3 jne LBB6_103 + 0x44, 0x89, 0xdb, //0x000023d9 movl %r11d, %ebx + 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x000023dc andl $2139062143, %ebx + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x000023e2 movl $-1061109568, %ecx + 0x29, 0xd9, //0x000023e7 subl %ebx, %ecx + 0x4c, 0x89, 0x5d, 0xc0, //0x000023e9 movq %r11, $-64(%rbp) + 0x44, 0x8d, 0x9b, 0x46, 0x46, 0x46, 0x46, //0x000023ed leal $1179010630(%rbx), %r11d + 0x23, 0x4d, 0xcc, //0x000023f4 andl $-52(%rbp), %ecx + 0x44, 0x85, 0xd9, //0x000023f7 testl %r11d, %ecx + 0x4c, 0x8b, 0x5d, 0xc0, //0x000023fa movq $-64(%rbp), %r11 + 0x0f, 0x85, 0x18, 0x03, 0x00, 0x00, //0x000023fe jne LBB6_103 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x00002404 movl $-522133280, %ecx + 0x29, 0xd9, //0x00002409 subl %ebx, %ecx + 0x89, 0x4d, 0xc8, //0x0000240b movl %ecx, $-56(%rbp) + 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x0000240e addl $960051513, %ebx + 0x8b, 0x4d, 0xcc, //0x00002414 movl $-52(%rbp), %ecx + 0x23, 0x4d, 0xc8, //0x00002417 andl $-56(%rbp), %ecx + 0x85, 0xd9, //0x0000241a testl %ebx, %ecx + 0x0f, 0x85, 0xfa, 0x02, 0x00, 0x00, //0x0000241c jne LBB6_103 + 0x41, 0x0f, 0xcb, //0x00002422 bswapl %r11d + 0x44, 0x89, 0xd9, //0x00002425 movl %r11d, %ecx + 0xc1, 0xe9, 0x04, //0x00002428 shrl $4, %ecx + 0xf7, 0xd1, //0x0000242b notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x0000242d andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00002433 leal (%rcx,%rcx,8), %ecx + 0x41, 0x81, 0xe3, 0x0f, 0x0f, 0x0f, 0x0f, //0x00002436 andl $252645135, %r11d + 0x41, 0x01, 0xcb, //0x0000243d addl %ecx, %r11d + 0x44, 0x89, 0xd9, //0x00002440 movl %r11d, %ecx + 0xc1, 0xe9, 0x04, //0x00002443 shrl $4, %ecx + 0x44, 0x09, 0xd9, //0x00002446 orl %r11d, %ecx + 0x89, 0xcb, //0x00002449 movl %ecx, %ebx + 0xc1, 0xeb, 0x08, //0x0000244b shrl $8, %ebx + 0x81, 0xe3, 0x00, 0xff, 0x00, 0x00, //0x0000244e andl $65280, %ebx + 0x44, 0x0f, 0xb6, 0xd9, //0x00002454 movzbl %cl, %r11d + 0x41, 0x09, 0xdb, //0x00002458 orl %ebx, %r11d + 0x81, 0xe1, 0x00, 0x00, 0xfc, 0x00, //0x0000245b andl $16515072, %ecx + 0x81, 0xf9, 0x00, 0x00, 0xdc, 0x00, //0x00002461 cmpl $14417920, %ecx + 0x0f, 0x84, 0x2b, 0x01, 0x00, 0x00, //0x00002467 je LBB6_84 + 0x41, 0xf6, 0xc0, 0x02, //0x0000246d testb $2, %r8b + 0x0f, 0x84, 0xb8, 0x03, 0x00, 0x00, //0x00002471 je LBB6_118 + 0x49, 0x83, 0xc6, 0xfa, //0x00002477 addq $-6, %r14 + 0x66, 0xc7, 0x00, 0xef, 0xbf, //0x0000247b movw $-16401, (%rax) + 0xc6, 0x40, 0x02, 0xbd, //0x00002480 movb $-67, $2(%rax) + 0x48, 0x83, 0xc0, 0x03, //0x00002484 addq $3, %rax + 0x49, 0x83, 0xc4, 0x06, //0x00002488 addq $6, %r12 + 0x45, 0x89, 0xdf, //0x0000248c movl %r11d, %r15d + 0x41, 0x81, 0xfb, 0x80, 0x00, 0x00, 0x00, //0x0000248f cmpl $128, %r11d + 0x0f, 0x83, 0xb4, 0xfe, 0xff, 0xff, //0x00002496 jae LBB6_51 + //0x0000249c LBB6_64 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x0000249c leaq $4(%r9,%r12), %r9 + 0x45, 0x89, 0xdf, //0x000024a1 movl %r11d, %r15d + 0xe9, 0x90, 0x00, 0x00, 0x00, //0x000024a4 jmp LBB6_76 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000024a9 .p2align 4, 0x90 + //0x000024b0 LBB6_65 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x000024b0 leaq $4(%r9,%r12), %r9 + 0x44, 0x89, 0xf9, //0x000024b5 movl %r15d, %ecx + 0xc1, 0xe9, 0x0c, //0x000024b8 shrl $12, %ecx + 0x80, 0xc9, 0xe0, //0x000024bb orb $-32, %cl + 0x88, 0x08, //0x000024be movb %cl, (%rax) + 0x44, 0x89, 0xf9, //0x000024c0 movl %r15d, %ecx + 0xc1, 0xe9, 0x06, //0x000024c3 shrl $6, %ecx + 0x80, 0xe1, 0x3f, //0x000024c6 andb $63, %cl + 0x80, 0xc9, 0x80, //0x000024c9 orb $-128, %cl + 0x88, 0x48, 0x01, //0x000024cc movb %cl, $1(%rax) + 0x41, 0x80, 0xe7, 0x3f, //0x000024cf andb $63, %r15b + 0x41, 0x80, 0xcf, 0x80, //0x000024d3 orb $-128, %r15b + 0x44, 0x88, 0x78, 0x02, //0x000024d7 movb %r15b, $2(%rax) + //0x000024db LBB6_66 + 0x48, 0x83, 0xc0, 0x03, //0x000024db addq $3, %rax + 0xe9, 0x7c, 0xfa, 0xff, 0xff, //0x000024df jmp LBB6_6 + //0x000024e4 LBB6_67 + 0x45, 0x85, 0xed, //0x000024e4 testl %r13d, %r13d + 0x0f, 0x84, 0xf0, 0x01, 0x00, 0x00, //0x000024e7 je LBB6_99 + 0x41, 0x80, 0x79, 0xff, 0x5c, //0x000024ed cmpb $92, $-1(%r9) + 0x0f, 0x85, 0x19, 0x02, 0x00, 0x00, //0x000024f2 jne LBB6_102 + 0x41, 0x80, 0x39, 0x5c, //0x000024f8 cmpb $92, (%r9) + 0x0f, 0x85, 0x28, 0x00, 0x00, 0x00, //0x000024fc jne LBB6_74 + 0x41, 0x83, 0xfd, 0x01, //0x00002502 cmpl $1, %r13d + 0x0f, 0x8e, 0xd1, 0x01, 0x00, 0x00, //0x00002506 jle LBB6_99 + 0x45, 0x8a, 0x59, 0x01, //0x0000250c movb $1(%r9), %r11b + 0x41, 0x80, 0xfb, 0x22, //0x00002510 cmpb $34, %r11b + 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00002514 je LBB6_73 + 0x41, 0x80, 0xfb, 0x5c, //0x0000251a cmpb $92, %r11b + 0x0f, 0x85, 0xd8, 0x02, 0x00, 0x00, //0x0000251e jne LBB6_114 + //0x00002524 LBB6_73 + 0x49, 0xff, 0xc1, //0x00002524 incq %r9 + 0x49, 0xff, 0xcd, //0x00002527 decq %r13 + //0x0000252a LBB6_74 + 0x49, 0xff, 0xc1, //0x0000252a incq %r9 + 0x49, 0xff, 0xcd, //0x0000252d decq %r13 + 0xe9, 0xa6, 0xfb, 0xff, 0xff, //0x00002530 jmp LBB6_26 + //0x00002535 LBB6_75 + 0x49, 0x83, 0xc1, 0x04, //0x00002535 addq $4, %r9 + //0x00002539 LBB6_76 + 0x44, 0x88, 0x38, //0x00002539 movb %r15b, (%rax) + 0x48, 0xff, 0xc0, //0x0000253c incq %rax + 0xe9, 0x1c, 0xfa, 0xff, 0xff, //0x0000253f jmp LBB6_6 + //0x00002544 LBB6_77 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00002544 leaq $4(%r9,%r12), %r9 + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00002549 jmp LBB6_79 + //0x0000254e LBB6_78 + 0x4f, 0x8d, 0x4c, 0x21, 0x05, //0x0000254e leaq $5(%r9,%r12), %r9 + 0x4d, 0x29, 0xe5, //0x00002553 subq %r12, %r13 + 0x49, 0x83, 0xc5, 0xfb, //0x00002556 addq $-5, %r13 + 0x4d, 0x89, 0xee, //0x0000255a movq %r13, %r14 + //0x0000255d LBB6_79 + 0x41, 0xf6, 0xc0, 0x02, //0x0000255d testb $2, %r8b + 0x0f, 0x85, 0x23, 0x00, 0x00, 0x00, //0x00002561 jne LBB6_83 + 0xe9, 0xec, 0x02, 0x00, 0x00, //0x00002567 jmp LBB6_121 + //0x0000256c LBB6_80 + 0x41, 0xf6, 0xc0, 0x02, //0x0000256c testb $2, %r8b + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00002570 jne LBB6_82 + 0xe9, 0x62, 0x01, 0x00, 0x00, //0x00002576 jmp LBB6_99 + //0x0000257b LBB6_81 + 0x41, 0xf6, 0xc0, 0x02, //0x0000257b testb $2, %r8b + 0x0f, 0x84, 0xe0, 0x02, 0x00, 0x00, //0x0000257f je LBB6_122 + //0x00002585 LBB6_82 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00002585 leaq $4(%r9,%r12), %r9 + //0x0000258a LBB6_83 + 0x66, 0xc7, 0x00, 0xef, 0xbf, //0x0000258a movw $-16401, (%rax) + 0xc6, 0x40, 0x02, 0xbd, //0x0000258f movb $-67, $2(%rax) + 0xe9, 0x43, 0xff, 0xff, 0xff, //0x00002593 jmp LBB6_66 + //0x00002598 LBB6_84 + 0x4f, 0x8d, 0x4c, 0x21, 0x0a, //0x00002598 leaq $10(%r9,%r12), %r9 + 0x4d, 0x29, 0xe5, //0x0000259d subq %r12, %r13 + 0x49, 0x83, 0xc5, 0xf6, //0x000025a0 addq $-10, %r13 + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x000025a4 jmp LBB6_86 + //0x000025a9 LBB6_85 + 0x4f, 0x8d, 0x4c, 0x21, 0x0b, //0x000025a9 leaq $11(%r9,%r12), %r9 + 0x4d, 0x29, 0xe5, //0x000025ae subq %r12, %r13 + 0x49, 0x83, 0xc5, 0xf5, //0x000025b1 addq $-11, %r13 + //0x000025b5 LBB6_86 + 0x41, 0xc1, 0xe7, 0x0a, //0x000025b5 shll $10, %r15d + 0x43, 0x8d, 0x9c, 0x1f, 0x00, 0x24, 0xa0, 0xfc, //0x000025b9 leal $-56613888(%r15,%r11), %ebx + 0x81, 0xfb, 0x00, 0x00, 0x11, 0x00, //0x000025c1 cmpl $1114112, %ebx + 0x0f, 0x82, 0x1c, 0x00, 0x00, 0x00, //0x000025c7 jb LBB6_89 + 0x41, 0xf6, 0xc0, 0x02, //0x000025cd testb $2, %r8b + 0x0f, 0x84, 0x3e, 0x02, 0x00, 0x00, //0x000025d1 je LBB6_116 + 0x66, 0xc7, 0x00, 0xef, 0xbf, //0x000025d7 movw $-16401, (%rax) + 0xc6, 0x40, 0x02, 0xbd, //0x000025dc movb $-67, $2(%rax) + 0x48, 0x83, 0xc0, 0x03, //0x000025e0 addq $3, %rax + 0xe9, 0x7a, 0xf9, 0xff, 0xff, //0x000025e4 jmp LBB6_7 + //0x000025e9 LBB6_89 + 0x89, 0xd9, //0x000025e9 movl %ebx, %ecx + 0xc1, 0xe9, 0x12, //0x000025eb shrl $18, %ecx + 0x80, 0xc9, 0xf0, //0x000025ee orb $-16, %cl + 0x88, 0x08, //0x000025f1 movb %cl, (%rax) + 0x89, 0xd9, //0x000025f3 movl %ebx, %ecx + 0xc1, 0xe9, 0x0c, //0x000025f5 shrl $12, %ecx + 0x80, 0xe1, 0x3f, //0x000025f8 andb $63, %cl + 0x80, 0xc9, 0x80, //0x000025fb orb $-128, %cl + 0x88, 0x48, 0x01, //0x000025fe movb %cl, $1(%rax) + 0x89, 0xd9, //0x00002601 movl %ebx, %ecx + 0xc1, 0xe9, 0x06, //0x00002603 shrl $6, %ecx + 0x80, 0xe1, 0x3f, //0x00002606 andb $63, %cl + 0x80, 0xc9, 0x80, //0x00002609 orb $-128, %cl + 0x88, 0x48, 0x02, //0x0000260c movb %cl, $2(%rax) + 0x80, 0xe3, 0x3f, //0x0000260f andb $63, %bl + 0x80, 0xcb, 0x80, //0x00002612 orb $-128, %bl + 0x88, 0x58, 0x03, //0x00002615 movb %bl, $3(%rax) + 0x48, 0x83, 0xc0, 0x04, //0x00002618 addq $4, %rax + 0xe9, 0x42, 0xf9, 0xff, 0xff, //0x0000261c jmp LBB6_7 + //0x00002621 LBB6_90 + 0x4c, 0x89, 0xca, //0x00002621 movq %r9, %rdx + 0x48, 0x29, 0xfa, //0x00002624 subq %rdi, %rdx + 0x48, 0x8b, 0x7d, 0xd0, //0x00002627 movq $-48(%rbp), %rdi + 0x48, 0x89, 0x17, //0x0000262b movq %rdx, (%rdi) + 0x41, 0x8a, 0x31, //0x0000262e movb (%r9), %sil + 0x8d, 0x4e, 0xd0, //0x00002631 leal $-48(%rsi), %ecx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00002634 movq $-2, %rax + 0x80, 0xf9, 0x0a, //0x0000263b cmpb $10, %cl + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x0000263e jb LBB6_92 + 0x40, 0x80, 0xe6, 0xdf, //0x00002644 andb $-33, %sil + 0x40, 0x80, 0xc6, 0xbf, //0x00002648 addb $-65, %sil + 0x40, 0x80, 0xfe, 0x05, //0x0000264c cmpb $5, %sil + 0x0f, 0x87, 0xc9, 0xf8, 0xff, 0xff, //0x00002650 ja LBB6_4 + //0x00002656 LBB6_92 + 0x48, 0x8d, 0x4a, 0x01, //0x00002656 leaq $1(%rdx), %rcx + 0x48, 0x89, 0x0f, //0x0000265a movq %rcx, (%rdi) + 0x41, 0x8a, 0x71, 0x01, //0x0000265d movb $1(%r9), %sil + 0x8d, 0x4e, 0xd0, //0x00002661 leal $-48(%rsi), %ecx + 0x80, 0xf9, 0x0a, //0x00002664 cmpb $10, %cl + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00002667 jb LBB6_94 + 0x40, 0x80, 0xe6, 0xdf, //0x0000266d andb $-33, %sil + 0x40, 0x80, 0xc6, 0xbf, //0x00002671 addb $-65, %sil + 0x40, 0x80, 0xfe, 0x05, //0x00002675 cmpb $5, %sil + 0x0f, 0x87, 0xa0, 0xf8, 0xff, 0xff, //0x00002679 ja LBB6_4 + //0x0000267f LBB6_94 + 0x48, 0x8d, 0x4a, 0x02, //0x0000267f leaq $2(%rdx), %rcx + 0x48, 0x89, 0x0f, //0x00002683 movq %rcx, (%rdi) + 0x41, 0x8a, 0x71, 0x02, //0x00002686 movb $2(%r9), %sil + 0x8d, 0x4e, 0xd0, //0x0000268a leal $-48(%rsi), %ecx + 0x80, 0xf9, 0x0a, //0x0000268d cmpb $10, %cl + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00002690 jb LBB6_96 + 0x40, 0x80, 0xe6, 0xdf, //0x00002696 andb $-33, %sil + 0x40, 0x80, 0xc6, 0xbf, //0x0000269a addb $-65, %sil + 0x40, 0x80, 0xfe, 0x05, //0x0000269e cmpb $5, %sil + 0x0f, 0x87, 0x77, 0xf8, 0xff, 0xff, //0x000026a2 ja LBB6_4 + //0x000026a8 LBB6_96 + 0x48, 0x8d, 0x4a, 0x03, //0x000026a8 leaq $3(%rdx), %rcx + 0x48, 0x89, 0x0f, //0x000026ac movq %rcx, (%rdi) + 0x41, 0x8a, 0x71, 0x03, //0x000026af movb $3(%r9), %sil + 0x8d, 0x4e, 0xd0, //0x000026b3 leal $-48(%rsi), %ecx + 0x80, 0xf9, 0x0a, //0x000026b6 cmpb $10, %cl + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x000026b9 jb LBB6_98 + 0x40, 0x80, 0xe6, 0xdf, //0x000026bf andb $-33, %sil + 0x40, 0x80, 0xc6, 0xbf, //0x000026c3 addb $-65, %sil + 0x40, 0x80, 0xfe, 0x05, //0x000026c7 cmpb $5, %sil + 0x0f, 0x87, 0x4e, 0xf8, 0xff, 0xff, //0x000026cb ja LBB6_4 + //0x000026d1 LBB6_98 + 0x48, 0x83, 0xc2, 0x04, //0x000026d1 addq $4, %rdx + 0x48, 0x89, 0x17, //0x000026d5 movq %rdx, (%rdi) + 0xe9, 0x42, 0xf8, 0xff, 0xff, //0x000026d8 jmp LBB6_4 + //0x000026dd LBB6_99 + 0x48, 0x8b, 0x45, 0xd0, //0x000026dd movq $-48(%rbp), %rax + 0x48, 0x89, 0x30, //0x000026e1 movq %rsi, (%rax) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000026e4 movq $-1, %rax + 0xe9, 0x2f, 0xf8, 0xff, 0xff, //0x000026eb jmp LBB6_4 + //0x000026f0 LBB6_100 + 0x48, 0xf7, 0xd7, //0x000026f0 notq %rdi + 0x49, 0x01, 0xf9, //0x000026f3 addq %rdi, %r9 + 0x48, 0x8b, 0x45, 0xd0, //0x000026f6 movq $-48(%rbp), %rax + 0x4c, 0x89, 0x08, //0x000026fa movq %r9, (%rax) + 0x48, 0xc7, 0xc0, 0xfd, 0xff, 0xff, 0xff, //0x000026fd movq $-3, %rax + 0xe9, 0x16, 0xf8, 0xff, 0xff, //0x00002704 jmp LBB6_4 + //0x00002709 LBB6_101 + 0x45, 0x31, 0xed, //0x00002709 xorl %r13d, %r13d + 0xe9, 0x08, 0xf8, 0xff, 0xff, //0x0000270c jmp LBB6_3 + //0x00002711 LBB6_102 + 0x48, 0xf7, 0xd7, //0x00002711 notq %rdi + 0x49, 0x01, 0xf9, //0x00002714 addq %rdi, %r9 + 0xe9, 0xe6, 0x00, 0x00, 0x00, //0x00002717 jmp LBB6_115 + //0x0000271c LBB6_103 + 0x4b, 0x8d, 0x74, 0x21, 0x04, //0x0000271c leaq $4(%r9,%r12), %rsi + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00002721 jmp LBB6_105 + //0x00002726 LBB6_104 + 0x4b, 0x8d, 0x74, 0x21, 0x05, //0x00002726 leaq $5(%r9,%r12), %rsi + //0x0000272b LBB6_105 + 0x48, 0x89, 0xf2, //0x0000272b movq %rsi, %rdx + 0x48, 0x29, 0xfa, //0x0000272e subq %rdi, %rdx + 0x48, 0x83, 0xc2, 0x02, //0x00002731 addq $2, %rdx + 0x48, 0x8b, 0x45, 0xd0, //0x00002735 movq $-48(%rbp), %rax + 0x48, 0x89, 0x10, //0x00002739 movq %rdx, (%rax) + 0x40, 0x8a, 0x7e, 0x02, //0x0000273c movb $2(%rsi), %dil + 0x8d, 0x4f, 0xd0, //0x00002740 leal $-48(%rdi), %ecx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00002743 movq $-2, %rax + 0x80, 0xf9, 0x0a, //0x0000274a cmpb $10, %cl + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x0000274d jb LBB6_107 + 0x40, 0x80, 0xe7, 0xdf, //0x00002753 andb $-33, %dil + 0x40, 0x80, 0xc7, 0xbf, //0x00002757 addb $-65, %dil + 0x40, 0x80, 0xff, 0x05, //0x0000275b cmpb $5, %dil + 0x0f, 0x87, 0xba, 0xf7, 0xff, 0xff, //0x0000275f ja LBB6_4 + //0x00002765 LBB6_107 + 0x48, 0x8d, 0x4a, 0x01, //0x00002765 leaq $1(%rdx), %rcx + 0x48, 0x8b, 0x7d, 0xd0, //0x00002769 movq $-48(%rbp), %rdi + 0x48, 0x89, 0x0f, //0x0000276d movq %rcx, (%rdi) + 0x40, 0x8a, 0x7e, 0x03, //0x00002770 movb $3(%rsi), %dil + 0x8d, 0x4f, 0xd0, //0x00002774 leal $-48(%rdi), %ecx + 0x80, 0xf9, 0x0a, //0x00002777 cmpb $10, %cl + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x0000277a jb LBB6_109 + 0x40, 0x80, 0xe7, 0xdf, //0x00002780 andb $-33, %dil + 0x40, 0x80, 0xc7, 0xbf, //0x00002784 addb $-65, %dil + 0x40, 0x80, 0xff, 0x05, //0x00002788 cmpb $5, %dil + 0x0f, 0x87, 0x8d, 0xf7, 0xff, 0xff, //0x0000278c ja LBB6_4 + //0x00002792 LBB6_109 + 0x48, 0x8d, 0x4a, 0x02, //0x00002792 leaq $2(%rdx), %rcx + 0x48, 0x8b, 0x7d, 0xd0, //0x00002796 movq $-48(%rbp), %rdi + 0x48, 0x89, 0x0f, //0x0000279a movq %rcx, (%rdi) + 0x40, 0x8a, 0x7e, 0x04, //0x0000279d movb $4(%rsi), %dil + 0x8d, 0x4f, 0xd0, //0x000027a1 leal $-48(%rdi), %ecx + 0x80, 0xf9, 0x0a, //0x000027a4 cmpb $10, %cl + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x000027a7 jb LBB6_111 + 0x40, 0x80, 0xe7, 0xdf, //0x000027ad andb $-33, %dil + 0x40, 0x80, 0xc7, 0xbf, //0x000027b1 addb $-65, %dil + 0x40, 0x80, 0xff, 0x05, //0x000027b5 cmpb $5, %dil + 0x0f, 0x87, 0x60, 0xf7, 0xff, 0xff, //0x000027b9 ja LBB6_4 + //0x000027bf LBB6_111 + 0x48, 0x8d, 0x4a, 0x03, //0x000027bf leaq $3(%rdx), %rcx + 0x48, 0x8b, 0x7d, 0xd0, //0x000027c3 movq $-48(%rbp), %rdi + 0x48, 0x89, 0x0f, //0x000027c7 movq %rcx, (%rdi) + 0x40, 0x8a, 0x76, 0x05, //0x000027ca movb $5(%rsi), %sil + 0x8d, 0x4e, 0xd0, //0x000027ce leal $-48(%rsi), %ecx + 0x80, 0xf9, 0x0a, //0x000027d1 cmpb $10, %cl + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x000027d4 jb LBB6_113 + 0x40, 0x80, 0xe6, 0xdf, //0x000027da andb $-33, %sil + 0x40, 0x80, 0xc6, 0xbf, //0x000027de addb $-65, %sil + 0x40, 0x80, 0xfe, 0x05, //0x000027e2 cmpb $5, %sil + 0x0f, 0x87, 0x33, 0xf7, 0xff, 0xff, //0x000027e6 ja LBB6_4 + //0x000027ec LBB6_113 + 0x48, 0x83, 0xc2, 0x04, //0x000027ec addq $4, %rdx + 0x48, 0x8b, 0x4d, 0xd0, //0x000027f0 movq $-48(%rbp), %rcx + 0x48, 0x89, 0x11, //0x000027f4 movq %rdx, (%rcx) + 0xe9, 0x23, 0xf7, 0xff, 0xff, //0x000027f7 jmp LBB6_4 + //0x000027fc LBB6_114 + 0x49, 0x29, 0xf9, //0x000027fc subq %rdi, %r9 + 0x49, 0xff, 0xc1, //0x000027ff incq %r9 + //0x00002802 LBB6_115 + 0x48, 0x8b, 0x45, 0xd0, //0x00002802 movq $-48(%rbp), %rax + 0x4c, 0x89, 0x08, //0x00002806 movq %r9, (%rax) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00002809 movq $-2, %rax + 0xe9, 0x0a, 0xf7, 0xff, 0xff, //0x00002810 jmp LBB6_4 + //0x00002815 LBB6_116 + 0x49, 0x29, 0xf9, //0x00002815 subq %rdi, %r9 + 0x49, 0x83, 0xc1, 0xfc, //0x00002818 addq $-4, %r9 + //0x0000281c LBB6_117 + 0x48, 0x8b, 0x45, 0xd0, //0x0000281c movq $-48(%rbp), %rax + 0x4c, 0x89, 0x08, //0x00002820 movq %r9, (%rax) + 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x00002823 movq $-4, %rax + 0xe9, 0xf0, 0xf6, 0xff, 0xff, //0x0000282a jmp LBB6_4 + //0x0000282f LBB6_118 + 0x4b, 0x8d, 0x44, 0x21, 0x0a, //0x0000282f leaq $10(%r9,%r12), %rax + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00002834 jmp LBB6_120 + //0x00002839 LBB6_119 + 0x4b, 0x8d, 0x44, 0x21, 0x0b, //0x00002839 leaq $11(%r9,%r12), %rax + //0x0000283e LBB6_120 + 0x48, 0x29, 0xf8, //0x0000283e subq %rdi, %rax + 0x48, 0x83, 0xc0, 0xfc, //0x00002841 addq $-4, %rax + 0x48, 0x8b, 0x4d, 0xd0, //0x00002845 movq $-48(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00002849 movq %rax, (%rcx) + 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x0000284c movq $-4, %rax + 0xe9, 0xc7, 0xf6, 0xff, 0xff, //0x00002853 jmp LBB6_4 + //0x00002858 LBB6_121 + 0x49, 0x8d, 0x44, 0x3a, 0x04, //0x00002858 leaq $4(%r10,%rdi), %rax + 0x49, 0x29, 0xc1, //0x0000285d subq %rax, %r9 + 0xe9, 0xb7, 0xff, 0xff, 0xff, //0x00002860 jmp LBB6_117 + //0x00002865 LBB6_122 + 0x4d, 0x01, 0xe1, //0x00002865 addq %r12, %r9 + 0x49, 0x29, 0xf9, //0x00002868 subq %rdi, %r9 + 0xe9, 0xac, 0xff, 0xff, 0xff, //0x0000286b jmp LBB6_117 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00002870 .p2align 5, 0x00 + //0x00002880 LCPI7_0 + 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, //0x00002880 QUAD $0x2626262626262626; QUAD $0x2626262626262626 // .space 16, '&&&&&&&&&&&&&&&&' + 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, //0x00002890 QUAD $0x2626262626262626; QUAD $0x2626262626262626 // .space 16, '&&&&&&&&&&&&&&&&' + //0x000028a0 LCPI7_1 + 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, //0x000028a0 QUAD $0xe2e2e2e2e2e2e2e2; QUAD $0xe2e2e2e2e2e2e2e2 // .space 16, '\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2' + 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, //0x000028b0 QUAD $0xe2e2e2e2e2e2e2e2; QUAD $0xe2e2e2e2e2e2e2e2 // .space 16, '\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2' + //0x000028c0 LCPI7_2 + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, //0x000028c0 QUAD $0x0202020202020202; QUAD $0x0202020202020202 // .space 16, '\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, //0x000028d0 QUAD $0x0202020202020202; QUAD $0x0202020202020202 // .space 16, '\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' + //0x000028e0 LCPI7_3 + 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, //0x000028e0 QUAD $0x3e3e3e3e3e3e3e3e; QUAD $0x3e3e3e3e3e3e3e3e // .space 16, '>>>>>>>>>>>>>>>>' + 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, //0x000028f0 QUAD $0x3e3e3e3e3e3e3e3e; QUAD $0x3e3e3e3e3e3e3e3e // .space 16, '>>>>>>>>>>>>>>>>' + //0x00002900 .p2align 4, 0x00 + //0x00002900 LCPI7_4 + 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, //0x00002900 QUAD $0x2626262626262626; QUAD $0x2626262626262626 // .space 16, '&&&&&&&&&&&&&&&&' + //0x00002910 LCPI7_5 + 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, //0x00002910 QUAD $0xe2e2e2e2e2e2e2e2; QUAD $0xe2e2e2e2e2e2e2e2 // .space 16, '\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2' + //0x00002920 LCPI7_6 + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, //0x00002920 QUAD $0x0202020202020202; QUAD $0x0202020202020202 // .space 16, '\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' + //0x00002930 LCPI7_7 + 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, //0x00002930 QUAD $0x3e3e3e3e3e3e3e3e; QUAD $0x3e3e3e3e3e3e3e3e // .space 16, '>>>>>>>>>>>>>>>>' + //0x00002940 .p2align 4, 0x90 + //0x00002940 _html_escape + 0x55, //0x00002940 pushq %rbp + 0x48, 0x89, 0xe5, //0x00002941 movq %rsp, %rbp + 0x41, 0x57, //0x00002944 pushq %r15 + 0x41, 0x56, //0x00002946 pushq %r14 + 0x41, 0x55, //0x00002948 pushq %r13 + 0x41, 0x54, //0x0000294a pushq %r12 + 0x53, //0x0000294c pushq %rbx + 0x48, 0x83, 0xec, 0x18, //0x0000294d subq $24, %rsp + 0x48, 0x89, 0x4d, 0xc0, //0x00002951 movq %rcx, $-64(%rbp) + 0x49, 0x89, 0xd7, //0x00002955 movq %rdx, %r15 + 0x48, 0x89, 0x55, 0xc8, //0x00002958 movq %rdx, $-56(%rbp) + 0x48, 0x89, 0x7d, 0xd0, //0x0000295c movq %rdi, $-48(%rbp) + 0x48, 0x89, 0xf8, //0x00002960 movq %rdi, %rax + 0x48, 0x85, 0xf6, //0x00002963 testq %rsi, %rsi + 0x0f, 0x8e, 0xa8, 0x07, 0x00, 0x00, //0x00002966 jle LBB7_94 + 0x49, 0x89, 0xf2, //0x0000296c movq %rsi, %r10 + 0x48, 0x8b, 0x45, 0xc0, //0x0000296f movq $-64(%rbp), %rax + 0x4c, 0x8b, 0x08, //0x00002973 movq (%rax), %r9 + 0xc5, 0xfd, 0x6f, 0x1d, 0x02, 0xff, 0xff, 0xff, //0x00002976 vmovdqa $-254(%rip), %ymm3 /* LCPI7_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x25, 0x1a, 0xff, 0xff, 0xff, //0x0000297e vmovdqa $-230(%rip), %ymm4 /* LCPI7_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x2d, 0x32, 0xff, 0xff, 0xff, //0x00002986 vmovdqa $-206(%rip), %ymm5 /* LCPI7_2+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0x4a, 0xff, 0xff, 0xff, //0x0000298e vmovdqa $-182(%rip), %ymm6 /* LCPI7_3+0(%rip) */ + 0x4c, 0x8d, 0x35, 0xf3, 0xeb, 0x00, 0x00, //0x00002996 leaq $60403(%rip), %r14 /* __HtmlQuoteTab+0(%rip) */ + 0x48, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, //0x0000299d movabsq $12884901889, %rdi + 0x4c, 0x8b, 0x65, 0xd0, //0x000029a7 movq $-48(%rbp), %r12 + 0x4c, 0x8b, 0x7d, 0xc8, //0x000029ab movq $-56(%rbp), %r15 + 0x90, //0x000029af .p2align 4, 0x90 + //0x000029b0 LBB7_2 + 0x4d, 0x85, 0xc9, //0x000029b0 testq %r9, %r9 + 0x0f, 0x8e, 0x7a, 0x07, 0x00, 0x00, //0x000029b3 jle LBB7_96 + 0x49, 0x83, 0xfa, 0x1f, //0x000029b9 cmpq $31, %r10 + 0x0f, 0x9f, 0xc3, //0x000029bd setg %bl + 0x4c, 0x89, 0xc8, //0x000029c0 movq %r9, %rax + 0x4d, 0x89, 0xf8, //0x000029c3 movq %r15, %r8 + 0x4c, 0x89, 0xd6, //0x000029c6 movq %r10, %rsi + 0x4d, 0x89, 0xe5, //0x000029c9 movq %r12, %r13 + 0x49, 0x83, 0xf9, 0x20, //0x000029cc cmpq $32, %r9 + 0x0f, 0x8c, 0x7a, 0x00, 0x00, 0x00, //0x000029d0 jl LBB7_9 + 0x49, 0x83, 0xfa, 0x20, //0x000029d6 cmpq $32, %r10 + 0x0f, 0x8c, 0x70, 0x00, 0x00, 0x00, //0x000029da jl LBB7_9 + 0x4d, 0x89, 0xe5, //0x000029e0 movq %r12, %r13 + 0x4c, 0x89, 0xd6, //0x000029e3 movq %r10, %rsi + 0x4d, 0x89, 0xf8, //0x000029e6 movq %r15, %r8 + 0x4c, 0x89, 0xca, //0x000029e9 movq %r9, %rdx + 0x90, 0x90, 0x90, 0x90, //0x000029ec .p2align 4, 0x90 + //0x000029f0 LBB7_6 + 0xc4, 0xc1, 0x7e, 0x6f, 0x45, 0x00, //0x000029f0 vmovdqu (%r13), %ymm0 + 0xc5, 0xfd, 0x74, 0xcb, //0x000029f6 vpcmpeqb %ymm3, %ymm0, %ymm1 + 0xc5, 0xfd, 0x74, 0xd4, //0x000029fa vpcmpeqb %ymm4, %ymm0, %ymm2 + 0xc5, 0xed, 0xeb, 0xc9, //0x000029fe vpor %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xeb, 0xd5, //0x00002a02 vpor %ymm5, %ymm0, %ymm2 + 0xc5, 0xed, 0x74, 0xd6, //0x00002a06 vpcmpeqb %ymm6, %ymm2, %ymm2 + 0xc5, 0xf5, 0xeb, 0xca, //0x00002a0a vpor %ymm2, %ymm1, %ymm1 + 0xc4, 0xc1, 0x7e, 0x7f, 0x00, //0x00002a0e vmovdqu %ymm0, (%r8) + 0xc5, 0xfd, 0xd7, 0xc1, //0x00002a13 vpmovmskb %ymm1, %eax + 0x85, 0xc0, //0x00002a17 testl %eax, %eax + 0x0f, 0x85, 0x01, 0x02, 0x00, 0x00, //0x00002a19 jne LBB7_19 + 0x49, 0x83, 0xc5, 0x20, //0x00002a1f addq $32, %r13 + 0x49, 0x83, 0xc0, 0x20, //0x00002a23 addq $32, %r8 + 0x48, 0x8d, 0x42, 0xe0, //0x00002a27 leaq $-32(%rdx), %rax + 0x48, 0x83, 0xfe, 0x3f, //0x00002a2b cmpq $63, %rsi + 0x0f, 0x9f, 0xc3, //0x00002a2f setg %bl + 0x48, 0x83, 0xfe, 0x40, //0x00002a32 cmpq $64, %rsi + 0x48, 0x8d, 0x76, 0xe0, //0x00002a36 leaq $-32(%rsi), %rsi + 0x0f, 0x8c, 0x10, 0x00, 0x00, 0x00, //0x00002a3a jl LBB7_9 + 0x48, 0x83, 0xfa, 0x3f, //0x00002a40 cmpq $63, %rdx + 0x48, 0x89, 0xc2, //0x00002a44 movq %rax, %rdx + 0x0f, 0x8f, 0xa3, 0xff, 0xff, 0xff, //0x00002a47 jg LBB7_6 + 0x90, 0x90, 0x90, //0x00002a4d .p2align 4, 0x90 + //0x00002a50 LBB7_9 + 0x84, 0xdb, //0x00002a50 testb %bl, %bl + 0x0f, 0x84, 0x88, 0x00, 0x00, 0x00, //0x00002a52 je LBB7_13 + 0xc4, 0xc1, 0x7e, 0x6f, 0x45, 0x00, //0x00002a58 vmovdqu (%r13), %ymm0 + 0xc5, 0xfd, 0x74, 0xcb, //0x00002a5e vpcmpeqb %ymm3, %ymm0, %ymm1 + 0xc5, 0xfd, 0x74, 0xd4, //0x00002a62 vpcmpeqb %ymm4, %ymm0, %ymm2 + 0xc5, 0xed, 0xeb, 0xc9, //0x00002a66 vpor %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc5, //0x00002a6a vpor %ymm5, %ymm0, %ymm0 + 0xc5, 0xfd, 0x74, 0xc6, //0x00002a6e vpcmpeqb %ymm6, %ymm0, %ymm0 + 0xc5, 0xf5, 0xeb, 0xc0, //0x00002a72 vpor %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x00002a76 vpmovmskb %ymm0, %ecx + 0x48, 0xba, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002a7a movabsq $4294967296, %rdx + 0x48, 0x09, 0xd1, //0x00002a84 orq %rdx, %rcx + 0x4c, 0x0f, 0xbc, 0xd9, //0x00002a87 bsfq %rcx, %r11 + 0xc4, 0xc1, 0x7a, 0x6f, 0x45, 0x00, //0x00002a8b vmovdqu (%r13), %xmm0 + 0xc4, 0xe3, 0xf9, 0x16, 0xc1, 0x01, //0x00002a91 vpextrq $1, %xmm0, %rcx + 0xc4, 0xe1, 0xf9, 0x7e, 0xc2, //0x00002a97 vmovq %xmm0, %rdx + 0x49, 0x39, 0xc3, //0x00002a9c cmpq %rax, %r11 + 0x0f, 0x8e, 0x92, 0x01, 0x00, 0x00, //0x00002a9f jle LBB7_20 + 0x48, 0x83, 0xf8, 0x10, //0x00002aa5 cmpq $16, %rax + 0x0f, 0x82, 0xd1, 0x01, 0x00, 0x00, //0x00002aa9 jb LBB7_23 + 0x49, 0x89, 0x10, //0x00002aaf movq %rdx, (%r8) + 0x49, 0x89, 0x48, 0x08, //0x00002ab2 movq %rcx, $8(%r8) + 0x4d, 0x8d, 0x5d, 0x10, //0x00002ab6 leaq $16(%r13), %r11 + 0x49, 0x83, 0xc0, 0x10, //0x00002aba addq $16, %r8 + 0x48, 0x8d, 0x70, 0xf0, //0x00002abe leaq $-16(%rax), %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00002ac2 cmpq $8, %rsi + 0x0f, 0x83, 0xc4, 0x01, 0x00, 0x00, //0x00002ac6 jae LBB7_24 + 0xe9, 0xd1, 0x01, 0x00, 0x00, //0x00002acc jmp LBB7_25 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002ad1 .p2align 4, 0x90 + //0x00002ae0 LBB7_13 + 0x4c, 0x89, 0xf2, //0x00002ae0 movq %r14, %rdx + 0xc5, 0xf8, 0x77, //0x00002ae3 vzeroupper + 0x48, 0x83, 0xfe, 0x0f, //0x00002ae6 cmpq $15, %rsi + 0x41, 0x0f, 0x9f, 0xc6, //0x00002aea setg %r14b + 0x48, 0x83, 0xf8, 0x10, //0x00002aee cmpq $16, %rax + 0x0f, 0x8c, 0x22, 0x02, 0x00, 0x00, //0x00002af2 jl LBB7_30 + 0x48, 0x83, 0xfe, 0x10, //0x00002af8 cmpq $16, %rsi + 0xc5, 0xf9, 0x6f, 0x3d, 0xfc, 0xfd, 0xff, 0xff, //0x00002afc vmovdqa $-516(%rip), %xmm7 /* LCPI7_4+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x05, 0x04, 0xfe, 0xff, 0xff, //0x00002b04 vmovdqa $-508(%rip), %xmm8 /* LCPI7_5+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x0d, 0x0c, 0xfe, 0xff, 0xff, //0x00002b0c vmovdqa $-500(%rip), %xmm9 /* LCPI7_6+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x15, 0x14, 0xfe, 0xff, 0xff, //0x00002b14 vmovdqa $-492(%rip), %xmm10 /* LCPI7_7+0(%rip) */ + 0x0f, 0x8c, 0x49, 0x02, 0x00, 0x00, //0x00002b1c jl LBB7_35 + 0xc5, 0xfd, 0x6f, 0x1d, 0x56, 0xfd, 0xff, 0xff, //0x00002b22 vmovdqa $-682(%rip), %ymm3 /* LCPI7_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x25, 0x6e, 0xfd, 0xff, 0xff, //0x00002b2a vmovdqa $-658(%rip), %ymm4 /* LCPI7_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x2d, 0x86, 0xfd, 0xff, 0xff, //0x00002b32 vmovdqa $-634(%rip), %ymm5 /* LCPI7_2+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0x9e, 0xfd, 0xff, 0xff, //0x00002b3a vmovdqa $-610(%rip), %ymm6 /* LCPI7_3+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002b42 .p2align 4, 0x90 + //0x00002b50 LBB7_16 + 0xc4, 0xc1, 0x7a, 0x6f, 0x45, 0x00, //0x00002b50 vmovdqu (%r13), %xmm0 + 0xc5, 0xf9, 0x74, 0xcf, //0x00002b56 vpcmpeqb %xmm7, %xmm0, %xmm1 + 0xc5, 0xb9, 0x74, 0xd0, //0x00002b5a vpcmpeqb %xmm0, %xmm8, %xmm2 + 0xc5, 0xe9, 0xeb, 0xc9, //0x00002b5e vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xb1, 0xeb, 0xd0, //0x00002b62 vpor %xmm0, %xmm9, %xmm2 + 0xc5, 0xa9, 0x74, 0xd2, //0x00002b66 vpcmpeqb %xmm2, %xmm10, %xmm2 + 0xc5, 0xf1, 0xeb, 0xca, //0x00002b6a vpor %xmm2, %xmm1, %xmm1 + 0xc4, 0xc1, 0x7a, 0x7f, 0x00, //0x00002b6e vmovdqu %xmm0, (%r8) + 0xc5, 0xf9, 0xd7, 0xc9, //0x00002b73 vpmovmskb %xmm1, %ecx + 0x66, 0x85, 0xc9, //0x00002b77 testw %cx, %cx + 0x0f, 0x85, 0xe3, 0x00, 0x00, 0x00, //0x00002b7a jne LBB7_22 + 0x49, 0x83, 0xc5, 0x10, //0x00002b80 addq $16, %r13 + 0x49, 0x83, 0xc0, 0x10, //0x00002b84 addq $16, %r8 + 0x4c, 0x8d, 0x58, 0xf0, //0x00002b88 leaq $-16(%rax), %r11 + 0x48, 0x83, 0xfe, 0x1f, //0x00002b8c cmpq $31, %rsi + 0x41, 0x0f, 0x9f, 0xc6, //0x00002b90 setg %r14b + 0x48, 0x83, 0xfe, 0x20, //0x00002b94 cmpq $32, %rsi + 0x48, 0x8d, 0x76, 0xf0, //0x00002b98 leaq $-16(%rsi), %rsi + 0x0f, 0x8c, 0x0e, 0x00, 0x00, 0x00, //0x00002b9c jl LBB7_31 + 0x48, 0x83, 0xf8, 0x1f, //0x00002ba2 cmpq $31, %rax + 0x4c, 0x89, 0xd8, //0x00002ba6 movq %r11, %rax + 0x0f, 0x8f, 0xa1, 0xff, 0xff, 0xff, //0x00002ba9 jg LBB7_16 + 0x90, //0x00002baf .p2align 4, 0x90 + //0x00002bb0 LBB7_31 + 0x45, 0x84, 0xf6, //0x00002bb0 testb %r14b, %r14b + 0x0f, 0x84, 0xde, 0x01, 0x00, 0x00, //0x00002bb3 je LBB7_36 + //0x00002bb9 LBB7_32 + 0xc4, 0xc1, 0x7a, 0x6f, 0x45, 0x00, //0x00002bb9 vmovdqu (%r13), %xmm0 + 0xc5, 0xf9, 0x74, 0xcf, //0x00002bbf vpcmpeqb %xmm7, %xmm0, %xmm1 + 0xc5, 0xb9, 0x74, 0xd0, //0x00002bc3 vpcmpeqb %xmm0, %xmm8, %xmm2 + 0xc5, 0xe9, 0xeb, 0xc9, //0x00002bc7 vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xb1, 0xeb, 0xd0, //0x00002bcb vpor %xmm0, %xmm9, %xmm2 + 0xc5, 0xa9, 0x74, 0xd2, //0x00002bcf vpcmpeqb %xmm2, %xmm10, %xmm2 + 0xc5, 0xf1, 0xeb, 0xca, //0x00002bd3 vpor %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0xd7, 0xc1, //0x00002bd7 vpmovmskb %xmm1, %eax + 0x0d, 0x00, 0x00, 0x01, 0x00, //0x00002bdb orl $65536, %eax + 0x44, 0x0f, 0xbc, 0xf0, //0x00002be0 bsfl %eax, %r14d + 0xc4, 0xe1, 0xf9, 0x7e, 0xc0, //0x00002be4 vmovq %xmm0, %rax + 0x4d, 0x39, 0xf3, //0x00002be9 cmpq %r14, %r11 + 0x0f, 0x8d, 0xaa, 0x02, 0x00, 0x00, //0x00002bec jge LBB7_55 + 0x49, 0x83, 0xfb, 0x08, //0x00002bf2 cmpq $8, %r11 + 0x0f, 0x82, 0xdc, 0x02, 0x00, 0x00, //0x00002bf6 jb LBB7_58 + 0x49, 0x89, 0x00, //0x00002bfc movq %rax, (%r8) + 0x49, 0x8d, 0x45, 0x08, //0x00002bff leaq $8(%r13), %rax + 0x49, 0x83, 0xc0, 0x08, //0x00002c03 addq $8, %r8 + 0x49, 0x8d, 0x73, 0xf8, //0x00002c07 leaq $-8(%r11), %rsi + 0x49, 0x89, 0xd6, //0x00002c0b movq %rdx, %r14 + 0x48, 0x83, 0xfe, 0x04, //0x00002c0e cmpq $4, %rsi + 0x0f, 0x8d, 0xd3, 0x02, 0x00, 0x00, //0x00002c12 jge LBB7_59 + 0xe9, 0xdf, 0x02, 0x00, 0x00, //0x00002c18 jmp LBB7_60 + 0x90, 0x90, 0x90, //0x00002c1d .p2align 4, 0x90 + //0x00002c20 LBB7_19 + 0x4d, 0x29, 0xe5, //0x00002c20 subq %r12, %r13 + 0x0f, 0xbc, 0xc0, //0x00002c23 bsfl %eax, %eax + 0x4c, 0x01, 0xe8, //0x00002c26 addq %r13, %rax + 0x48, 0x85, 0xc0, //0x00002c29 testq %rax, %rax + 0x0f, 0x89, 0xae, 0x03, 0x00, 0x00, //0x00002c2c jns LBB7_72 + 0xe9, 0xba, 0x04, 0x00, 0x00, //0x00002c32 jmp LBB7_92 + //0x00002c37 LBB7_20 + 0x41, 0x83, 0xfb, 0x10, //0x00002c37 cmpl $16, %r11d + 0x0f, 0x82, 0xc4, 0x01, 0x00, 0x00, //0x00002c3b jb LBB7_43 + 0x49, 0x89, 0x10, //0x00002c41 movq %rdx, (%r8) + 0x49, 0x89, 0x48, 0x08, //0x00002c44 movq %rcx, $8(%r8) + 0x49, 0x8d, 0x45, 0x10, //0x00002c48 leaq $16(%r13), %rax + 0x49, 0x83, 0xc0, 0x10, //0x00002c4c addq $16, %r8 + 0x49, 0x8d, 0x73, 0xf0, //0x00002c50 leaq $-16(%r11), %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00002c54 cmpq $8, %rsi + 0x0f, 0x83, 0xb7, 0x01, 0x00, 0x00, //0x00002c58 jae LBB7_44 + 0xe9, 0xc4, 0x01, 0x00, 0x00, //0x00002c5e jmp LBB7_45 + //0x00002c63 LBB7_22 + 0x0f, 0xb7, 0xc1, //0x00002c63 movzwl %cx, %eax + 0x4d, 0x29, 0xe5, //0x00002c66 subq %r12, %r13 + 0x0f, 0xbc, 0xc0, //0x00002c69 bsfl %eax, %eax + 0x4c, 0x01, 0xe8, //0x00002c6c addq %r13, %rax + 0x49, 0x89, 0xd6, //0x00002c6f movq %rdx, %r14 + 0x48, 0x85, 0xc0, //0x00002c72 testq %rax, %rax + 0x0f, 0x89, 0x65, 0x03, 0x00, 0x00, //0x00002c75 jns LBB7_72 + 0xe9, 0x71, 0x04, 0x00, 0x00, //0x00002c7b jmp LBB7_92 + //0x00002c80 LBB7_23 + 0x4d, 0x89, 0xeb, //0x00002c80 movq %r13, %r11 + 0x48, 0x89, 0xc6, //0x00002c83 movq %rax, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00002c86 cmpq $8, %rsi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00002c8a jb LBB7_25 + //0x00002c90 LBB7_24 + 0x49, 0x8b, 0x0b, //0x00002c90 movq (%r11), %rcx + 0x49, 0x89, 0x08, //0x00002c93 movq %rcx, (%r8) + 0x49, 0x83, 0xc3, 0x08, //0x00002c96 addq $8, %r11 + 0x49, 0x83, 0xc0, 0x08, //0x00002c9a addq $8, %r8 + 0x48, 0x83, 0xc6, 0xf8, //0x00002c9e addq $-8, %rsi + //0x00002ca2 LBB7_25 + 0x48, 0x83, 0xfe, 0x04, //0x00002ca2 cmpq $4, %rsi + 0x0f, 0x8c, 0x42, 0x00, 0x00, 0x00, //0x00002ca6 jl LBB7_26 + 0x41, 0x8b, 0x0b, //0x00002cac movl (%r11), %ecx + 0x41, 0x89, 0x08, //0x00002caf movl %ecx, (%r8) + 0x49, 0x83, 0xc3, 0x04, //0x00002cb2 addq $4, %r11 + 0x49, 0x83, 0xc0, 0x04, //0x00002cb6 addq $4, %r8 + 0x48, 0x83, 0xc6, 0xfc, //0x00002cba addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x00002cbe cmpq $2, %rsi + 0x0f, 0x83, 0x30, 0x00, 0x00, 0x00, //0x00002cc2 jae LBB7_52 + //0x00002cc8 LBB7_27 + 0x48, 0x85, 0xf6, //0x00002cc8 testq %rsi, %rsi + 0x0f, 0x84, 0x06, 0x00, 0x00, 0x00, //0x00002ccb je LBB7_29 + //0x00002cd1 LBB7_28 + 0x41, 0x8a, 0x0b, //0x00002cd1 movb (%r11), %cl + 0x41, 0x88, 0x08, //0x00002cd4 movb %cl, (%r8) + //0x00002cd7 LBB7_29 + 0x4c, 0x29, 0xe0, //0x00002cd7 subq %r12, %rax + 0x4c, 0x01, 0xe8, //0x00002cda addq %r13, %rax + 0x48, 0xf7, 0xd0, //0x00002cdd notq %rax + 0x48, 0x85, 0xc0, //0x00002ce0 testq %rax, %rax + 0x0f, 0x89, 0xf7, 0x02, 0x00, 0x00, //0x00002ce3 jns LBB7_72 + 0xe9, 0x03, 0x04, 0x00, 0x00, //0x00002ce9 jmp LBB7_92 + //0x00002cee LBB7_26 + 0x48, 0x83, 0xfe, 0x02, //0x00002cee cmpq $2, %rsi + 0x0f, 0x82, 0xd0, 0xff, 0xff, 0xff, //0x00002cf2 jb LBB7_27 + //0x00002cf8 LBB7_52 + 0x41, 0x0f, 0xb7, 0x0b, //0x00002cf8 movzwl (%r11), %ecx + 0x66, 0x41, 0x89, 0x08, //0x00002cfc movw %cx, (%r8) + 0x49, 0x83, 0xc3, 0x02, //0x00002d00 addq $2, %r11 + 0x49, 0x83, 0xc0, 0x02, //0x00002d04 addq $2, %r8 + 0x48, 0x83, 0xc6, 0xfe, //0x00002d08 addq $-2, %rsi + 0x48, 0x85, 0xf6, //0x00002d0c testq %rsi, %rsi + 0x0f, 0x85, 0xbc, 0xff, 0xff, 0xff, //0x00002d0f jne LBB7_28 + 0xe9, 0xbd, 0xff, 0xff, 0xff, //0x00002d15 jmp LBB7_29 + //0x00002d1a LBB7_30 + 0x49, 0x89, 0xc3, //0x00002d1a movq %rax, %r11 + 0xc5, 0xfd, 0x6f, 0x1d, 0x5b, 0xfb, 0xff, 0xff, //0x00002d1d vmovdqa $-1189(%rip), %ymm3 /* LCPI7_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x25, 0x73, 0xfb, 0xff, 0xff, //0x00002d25 vmovdqa $-1165(%rip), %ymm4 /* LCPI7_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x2d, 0x8b, 0xfb, 0xff, 0xff, //0x00002d2d vmovdqa $-1141(%rip), %ymm5 /* LCPI7_2+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0xa3, 0xfb, 0xff, 0xff, //0x00002d35 vmovdqa $-1117(%rip), %ymm6 /* LCPI7_3+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x3d, 0xbb, 0xfb, 0xff, 0xff, //0x00002d3d vmovdqa $-1093(%rip), %xmm7 /* LCPI7_4+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x05, 0xc3, 0xfb, 0xff, 0xff, //0x00002d45 vmovdqa $-1085(%rip), %xmm8 /* LCPI7_5+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x0d, 0xcb, 0xfb, 0xff, 0xff, //0x00002d4d vmovdqa $-1077(%rip), %xmm9 /* LCPI7_6+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x15, 0xd3, 0xfb, 0xff, 0xff, //0x00002d55 vmovdqa $-1069(%rip), %xmm10 /* LCPI7_7+0(%rip) */ + 0x45, 0x84, 0xf6, //0x00002d5d testb %r14b, %r14b + 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x00002d60 je LBB7_36 + 0xe9, 0x4e, 0xfe, 0xff, 0xff, //0x00002d66 jmp LBB7_32 + //0x00002d6b LBB7_35 + 0x49, 0x89, 0xc3, //0x00002d6b movq %rax, %r11 + 0xc5, 0xfd, 0x6f, 0x1d, 0x0a, 0xfb, 0xff, 0xff, //0x00002d6e vmovdqa $-1270(%rip), %ymm3 /* LCPI7_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x25, 0x22, 0xfb, 0xff, 0xff, //0x00002d76 vmovdqa $-1246(%rip), %ymm4 /* LCPI7_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x2d, 0x3a, 0xfb, 0xff, 0xff, //0x00002d7e vmovdqa $-1222(%rip), %ymm5 /* LCPI7_2+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0x52, 0xfb, 0xff, 0xff, //0x00002d86 vmovdqa $-1198(%rip), %ymm6 /* LCPI7_3+0(%rip) */ + 0x45, 0x84, 0xf6, //0x00002d8e testb %r14b, %r14b + 0x0f, 0x85, 0x22, 0xfe, 0xff, 0xff, //0x00002d91 jne LBB7_32 + //0x00002d97 LBB7_36 + 0x4d, 0x85, 0xdb, //0x00002d97 testq %r11, %r11 + 0x0f, 0x8e, 0xaf, 0x01, 0x00, 0x00, //0x00002d9a jle LBB7_64 + 0x48, 0x85, 0xf6, //0x00002da0 testq %rsi, %rsi + 0x49, 0x89, 0xd6, //0x00002da3 movq %rdx, %r14 + 0x0f, 0x8e, 0xa6, 0x01, 0x00, 0x00, //0x00002da6 jle LBB7_65 + 0x90, 0x90, 0x90, 0x90, //0x00002dac .p2align 4, 0x90 + //0x00002db0 LBB7_38 + 0x41, 0x0f, 0xb6, 0x45, 0x00, //0x00002db0 movzbl (%r13), %eax + 0x48, 0x83, 0xf8, 0x3e, //0x00002db5 cmpq $62, %rax + 0x0f, 0x87, 0x14, 0x00, 0x00, 0x00, //0x00002db9 ja LBB7_40 + 0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x50, //0x00002dbf movabsq $5764607797912141824, %rcx + 0x48, 0x0f, 0xa3, 0xc1, //0x00002dc9 btq %rax, %rcx + 0x0f, 0x82, 0xf1, 0x00, 0x00, 0x00, //0x00002dcd jb LBB7_57 + //0x00002dd3 LBB7_40 + 0x3c, 0xe2, //0x00002dd3 cmpb $-30, %al + 0x0f, 0x84, 0xe9, 0x00, 0x00, 0x00, //0x00002dd5 je LBB7_57 + 0x49, 0xff, 0xc5, //0x00002ddb incq %r13 + 0x41, 0x88, 0x00, //0x00002dde movb %al, (%r8) + 0x48, 0x83, 0xfe, 0x02, //0x00002de1 cmpq $2, %rsi + 0x48, 0x8d, 0x76, 0xff, //0x00002de5 leaq $-1(%rsi), %rsi + 0x0f, 0x8c, 0x63, 0x01, 0x00, 0x00, //0x00002de9 jl LBB7_65 + 0x49, 0xff, 0xc0, //0x00002def incq %r8 + 0x49, 0x83, 0xfb, 0x01, //0x00002df2 cmpq $1, %r11 + 0x4d, 0x8d, 0x5b, 0xff, //0x00002df6 leaq $-1(%r11), %r11 + 0x0f, 0x8f, 0xb0, 0xff, 0xff, 0xff, //0x00002dfa jg LBB7_38 + 0xe9, 0x4d, 0x01, 0x00, 0x00, //0x00002e00 jmp LBB7_65 + //0x00002e05 LBB7_43 + 0x4c, 0x89, 0xe8, //0x00002e05 movq %r13, %rax + 0x4c, 0x89, 0xde, //0x00002e08 movq %r11, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00002e0b cmpq $8, %rsi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00002e0f jb LBB7_45 + //0x00002e15 LBB7_44 + 0x48, 0x8b, 0x08, //0x00002e15 movq (%rax), %rcx + 0x49, 0x89, 0x08, //0x00002e18 movq %rcx, (%r8) + 0x48, 0x83, 0xc0, 0x08, //0x00002e1b addq $8, %rax + 0x49, 0x83, 0xc0, 0x08, //0x00002e1f addq $8, %r8 + 0x48, 0x83, 0xc6, 0xf8, //0x00002e23 addq $-8, %rsi + //0x00002e27 LBB7_45 + 0x48, 0x83, 0xfe, 0x04, //0x00002e27 cmpq $4, %rsi + 0x0f, 0x8c, 0x40, 0x00, 0x00, 0x00, //0x00002e2b jl LBB7_46 + 0x8b, 0x08, //0x00002e31 movl (%rax), %ecx + 0x41, 0x89, 0x08, //0x00002e33 movl %ecx, (%r8) + 0x48, 0x83, 0xc0, 0x04, //0x00002e36 addq $4, %rax + 0x49, 0x83, 0xc0, 0x04, //0x00002e3a addq $4, %r8 + 0x48, 0x83, 0xc6, 0xfc, //0x00002e3e addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x00002e42 cmpq $2, %rsi + 0x0f, 0x83, 0x2f, 0x00, 0x00, 0x00, //0x00002e46 jae LBB7_54 + //0x00002e4c LBB7_47 + 0x48, 0x85, 0xf6, //0x00002e4c testq %rsi, %rsi + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00002e4f je LBB7_49 + //0x00002e55 LBB7_48 + 0x8a, 0x00, //0x00002e55 movb (%rax), %al + 0x41, 0x88, 0x00, //0x00002e57 movb %al, (%r8) + //0x00002e5a LBB7_49 + 0x4d, 0x29, 0xe5, //0x00002e5a subq %r12, %r13 + 0x4d, 0x01, 0xdd, //0x00002e5d addq %r11, %r13 + 0x4c, 0x89, 0xe8, //0x00002e60 movq %r13, %rax + 0x48, 0x85, 0xc0, //0x00002e63 testq %rax, %rax + 0x0f, 0x89, 0x74, 0x01, 0x00, 0x00, //0x00002e66 jns LBB7_72 + 0xe9, 0x80, 0x02, 0x00, 0x00, //0x00002e6c jmp LBB7_92 + //0x00002e71 LBB7_46 + 0x48, 0x83, 0xfe, 0x02, //0x00002e71 cmpq $2, %rsi + 0x0f, 0x82, 0xd1, 0xff, 0xff, 0xff, //0x00002e75 jb LBB7_47 + //0x00002e7b LBB7_54 + 0x0f, 0xb7, 0x08, //0x00002e7b movzwl (%rax), %ecx + 0x66, 0x41, 0x89, 0x08, //0x00002e7e movw %cx, (%r8) + 0x48, 0x83, 0xc0, 0x02, //0x00002e82 addq $2, %rax + 0x49, 0x83, 0xc0, 0x02, //0x00002e86 addq $2, %r8 + 0x48, 0x83, 0xc6, 0xfe, //0x00002e8a addq $-2, %rsi + 0x48, 0x85, 0xf6, //0x00002e8e testq %rsi, %rsi + 0x0f, 0x85, 0xbe, 0xff, 0xff, 0xff, //0x00002e91 jne LBB7_48 + 0xe9, 0xbe, 0xff, 0xff, 0xff, //0x00002e97 jmp LBB7_49 + //0x00002e9c LBB7_55 + 0x41, 0x83, 0xfe, 0x08, //0x00002e9c cmpl $8, %r14d + 0x0f, 0x82, 0xc6, 0x00, 0x00, 0x00, //0x00002ea0 jb LBB7_66 + 0x49, 0x89, 0x00, //0x00002ea6 movq %rax, (%r8) + 0x49, 0x8d, 0x75, 0x08, //0x00002ea9 leaq $8(%r13), %rsi + 0x49, 0x83, 0xc0, 0x08, //0x00002ead addq $8, %r8 + 0x49, 0x8d, 0x46, 0xf8, //0x00002eb1 leaq $-8(%r14), %rax + 0x48, 0x83, 0xf8, 0x04, //0x00002eb5 cmpq $4, %rax + 0x0f, 0x8d, 0xbd, 0x00, 0x00, 0x00, //0x00002eb9 jge LBB7_67 + 0xe9, 0xc9, 0x00, 0x00, 0x00, //0x00002ebf jmp LBB7_68 + //0x00002ec4 LBB7_57 + 0x4d, 0x29, 0xe5, //0x00002ec4 subq %r12, %r13 + 0x4c, 0x89, 0xe8, //0x00002ec7 movq %r13, %rax + 0x48, 0x85, 0xc0, //0x00002eca testq %rax, %rax + 0x0f, 0x89, 0x0d, 0x01, 0x00, 0x00, //0x00002ecd jns LBB7_72 + 0xe9, 0x19, 0x02, 0x00, 0x00, //0x00002ed3 jmp LBB7_92 + //0x00002ed8 LBB7_58 + 0x4c, 0x89, 0xe8, //0x00002ed8 movq %r13, %rax + 0x4c, 0x89, 0xde, //0x00002edb movq %r11, %rsi + 0x49, 0x89, 0xd6, //0x00002ede movq %rdx, %r14 + 0x48, 0x83, 0xfe, 0x04, //0x00002ee1 cmpq $4, %rsi + 0x0f, 0x8c, 0x11, 0x00, 0x00, 0x00, //0x00002ee5 jl LBB7_60 + //0x00002eeb LBB7_59 + 0x8b, 0x08, //0x00002eeb movl (%rax), %ecx + 0x41, 0x89, 0x08, //0x00002eed movl %ecx, (%r8) + 0x48, 0x83, 0xc0, 0x04, //0x00002ef0 addq $4, %rax + 0x49, 0x83, 0xc0, 0x04, //0x00002ef4 addq $4, %r8 + 0x48, 0x83, 0xc6, 0xfc, //0x00002ef8 addq $-4, %rsi + //0x00002efc LBB7_60 + 0x48, 0x83, 0xfe, 0x02, //0x00002efc cmpq $2, %rsi + 0x0f, 0x82, 0x21, 0x00, 0x00, 0x00, //0x00002f00 jb LBB7_61 + 0x0f, 0xb7, 0x08, //0x00002f06 movzwl (%rax), %ecx + 0x66, 0x41, 0x89, 0x08, //0x00002f09 movw %cx, (%r8) + 0x48, 0x83, 0xc0, 0x02, //0x00002f0d addq $2, %rax + 0x49, 0x83, 0xc0, 0x02, //0x00002f11 addq $2, %r8 + 0x48, 0x83, 0xc6, 0xfe, //0x00002f15 addq $-2, %rsi + 0x48, 0x85, 0xf6, //0x00002f19 testq %rsi, %rsi + 0x0f, 0x85, 0x0e, 0x00, 0x00, 0x00, //0x00002f1c jne LBB7_62 + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00002f22 jmp LBB7_63 + //0x00002f27 LBB7_61 + 0x48, 0x85, 0xf6, //0x00002f27 testq %rsi, %rsi + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00002f2a je LBB7_63 + //0x00002f30 LBB7_62 + 0x8a, 0x00, //0x00002f30 movb (%rax), %al + 0x41, 0x88, 0x00, //0x00002f32 movb %al, (%r8) + //0x00002f35 LBB7_63 + 0x4d, 0x29, 0xe3, //0x00002f35 subq %r12, %r11 + 0x4d, 0x01, 0xeb, //0x00002f38 addq %r13, %r11 + 0x49, 0xf7, 0xd3, //0x00002f3b notq %r11 + 0x4c, 0x89, 0xd8, //0x00002f3e movq %r11, %rax + 0x48, 0x85, 0xc0, //0x00002f41 testq %rax, %rax + 0x0f, 0x89, 0x96, 0x00, 0x00, 0x00, //0x00002f44 jns LBB7_72 + 0xe9, 0xa2, 0x01, 0x00, 0x00, //0x00002f4a jmp LBB7_92 + //0x00002f4f LBB7_64 + 0x49, 0x89, 0xd6, //0x00002f4f movq %rdx, %r14 + //0x00002f52 LBB7_65 + 0x4d, 0x29, 0xe5, //0x00002f52 subq %r12, %r13 + 0x48, 0xf7, 0xde, //0x00002f55 negq %rsi + 0x48, 0x19, 0xc0, //0x00002f58 sbbq %rax, %rax + 0x4c, 0x31, 0xe8, //0x00002f5b xorq %r13, %rax + 0x48, 0x85, 0xc0, //0x00002f5e testq %rax, %rax + 0x0f, 0x89, 0x79, 0x00, 0x00, 0x00, //0x00002f61 jns LBB7_72 + 0xe9, 0x85, 0x01, 0x00, 0x00, //0x00002f67 jmp LBB7_92 + //0x00002f6c LBB7_66 + 0x4c, 0x89, 0xee, //0x00002f6c movq %r13, %rsi + 0x4c, 0x89, 0xf0, //0x00002f6f movq %r14, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00002f72 cmpq $4, %rax + 0x0f, 0x8c, 0x11, 0x00, 0x00, 0x00, //0x00002f76 jl LBB7_68 + //0x00002f7c LBB7_67 + 0x8b, 0x0e, //0x00002f7c movl (%rsi), %ecx + 0x41, 0x89, 0x08, //0x00002f7e movl %ecx, (%r8) + 0x48, 0x83, 0xc6, 0x04, //0x00002f81 addq $4, %rsi + 0x49, 0x83, 0xc0, 0x04, //0x00002f85 addq $4, %r8 + 0x48, 0x83, 0xc0, 0xfc, //0x00002f89 addq $-4, %rax + //0x00002f8d LBB7_68 + 0x48, 0x83, 0xf8, 0x02, //0x00002f8d cmpq $2, %rax + 0x0f, 0x82, 0x21, 0x00, 0x00, 0x00, //0x00002f91 jb LBB7_69 + 0x0f, 0xb7, 0x0e, //0x00002f97 movzwl (%rsi), %ecx + 0x66, 0x41, 0x89, 0x08, //0x00002f9a movw %cx, (%r8) + 0x48, 0x83, 0xc6, 0x02, //0x00002f9e addq $2, %rsi + 0x49, 0x83, 0xc0, 0x02, //0x00002fa2 addq $2, %r8 + 0x48, 0x83, 0xc0, 0xfe, //0x00002fa6 addq $-2, %rax + 0x48, 0x85, 0xc0, //0x00002faa testq %rax, %rax + 0x0f, 0x85, 0x0e, 0x00, 0x00, 0x00, //0x00002fad jne LBB7_70 + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00002fb3 jmp LBB7_71 + //0x00002fb8 LBB7_69 + 0x48, 0x85, 0xc0, //0x00002fb8 testq %rax, %rax + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00002fbb je LBB7_71 + //0x00002fc1 LBB7_70 + 0x8a, 0x06, //0x00002fc1 movb (%rsi), %al + 0x41, 0x88, 0x00, //0x00002fc3 movb %al, (%r8) + //0x00002fc6 LBB7_71 + 0x4d, 0x29, 0xe5, //0x00002fc6 subq %r12, %r13 + 0x4d, 0x01, 0xf5, //0x00002fc9 addq %r14, %r13 + 0x4c, 0x89, 0xe8, //0x00002fcc movq %r13, %rax + 0x49, 0x89, 0xd6, //0x00002fcf movq %rdx, %r14 + 0x48, 0x85, 0xc0, //0x00002fd2 testq %rax, %rax + 0x0f, 0x88, 0x16, 0x01, 0x00, 0x00, //0x00002fd5 js LBB7_92 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002fdb .p2align 4, 0x90 + //0x00002fe0 LBB7_72 + 0x49, 0x01, 0xc4, //0x00002fe0 addq %rax, %r12 + 0x49, 0x01, 0xc7, //0x00002fe3 addq %rax, %r15 + 0x49, 0x29, 0xc2, //0x00002fe6 subq %rax, %r10 + 0x0f, 0x8e, 0x22, 0x01, 0x00, 0x00, //0x00002fe9 jle LBB7_93 + 0x49, 0x29, 0xc1, //0x00002fef subq %rax, %r9 + 0x41, 0x8a, 0x0c, 0x24, //0x00002ff2 movb (%r12), %cl + 0x80, 0xf9, 0xe2, //0x00002ff6 cmpb $-30, %cl + 0x0f, 0x84, 0xa2, 0x00, 0x00, 0x00, //0x00002ff9 je LBB7_86 + 0x4c, 0x89, 0xe0, //0x00002fff movq %r12, %rax + //0x00003002 LBB7_75 + 0x0f, 0xb6, 0xc9, //0x00003002 movzbl %cl, %ecx + 0x48, 0xc1, 0xe1, 0x04, //0x00003005 shlq $4, %rcx + 0x4a, 0x8b, 0x14, 0x31, //0x00003009 movq (%rcx,%r14), %rdx + 0x48, 0x63, 0xf2, //0x0000300d movslq %edx, %rsi + 0x49, 0x29, 0xf1, //0x00003010 subq %rsi, %r9 + 0x0f, 0x8c, 0x0f, 0x01, 0x00, 0x00, //0x00003013 jl LBB7_95 + 0x48, 0xc1, 0xe2, 0x20, //0x00003019 shlq $32, %rdx + 0x4a, 0x8d, 0x5c, 0x31, 0x08, //0x0000301d leaq $8(%rcx,%r14), %rbx + 0x48, 0x39, 0xfa, //0x00003022 cmpq %rdi, %rdx + 0x0f, 0x8c, 0x25, 0x00, 0x00, 0x00, //0x00003025 jl LBB7_78 + 0x8b, 0x13, //0x0000302b movl (%rbx), %edx + 0x41, 0x89, 0x17, //0x0000302d movl %edx, (%r15) + 0x4a, 0x8d, 0x5c, 0x31, 0x0c, //0x00003030 leaq $12(%rcx,%r14), %rbx + 0x49, 0x8d, 0x57, 0x04, //0x00003035 leaq $4(%r15), %rdx + 0x48, 0x8d, 0x4e, 0xfc, //0x00003039 leaq $-4(%rsi), %rcx + 0x48, 0x83, 0xf9, 0x02, //0x0000303d cmpq $2, %rcx + 0x0f, 0x83, 0x19, 0x00, 0x00, 0x00, //0x00003041 jae LBB7_79 + 0xe9, 0x2c, 0x00, 0x00, 0x00, //0x00003047 jmp LBB7_80 + 0x90, 0x90, 0x90, 0x90, //0x0000304c .p2align 4, 0x90 + //0x00003050 LBB7_78 + 0x4c, 0x89, 0xfa, //0x00003050 movq %r15, %rdx + 0x48, 0x89, 0xf1, //0x00003053 movq %rsi, %rcx + 0x48, 0x83, 0xf9, 0x02, //0x00003056 cmpq $2, %rcx + 0x0f, 0x82, 0x18, 0x00, 0x00, 0x00, //0x0000305a jb LBB7_80 + //0x00003060 LBB7_79 + 0x49, 0x89, 0xf8, //0x00003060 movq %rdi, %r8 + 0x0f, 0xb7, 0x3b, //0x00003063 movzwl (%rbx), %edi + 0x66, 0x89, 0x3a, //0x00003066 movw %di, (%rdx) + 0x4c, 0x89, 0xc7, //0x00003069 movq %r8, %rdi + 0x48, 0x83, 0xc3, 0x02, //0x0000306c addq $2, %rbx + 0x48, 0x83, 0xc2, 0x02, //0x00003070 addq $2, %rdx + 0x48, 0x83, 0xc1, 0xfe, //0x00003074 addq $-2, %rcx + //0x00003078 LBB7_80 + 0x48, 0x85, 0xc9, //0x00003078 testq %rcx, %rcx + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x0000307b je LBB7_82 + 0x8a, 0x0b, //0x00003081 movb (%rbx), %cl + 0x88, 0x0a, //0x00003083 movb %cl, (%rdx) + //0x00003085 LBB7_82 + 0x49, 0x01, 0xf7, //0x00003085 addq %rsi, %r15 + //0x00003088 LBB7_83 + 0x48, 0xff, 0xc0, //0x00003088 incq %rax + 0x49, 0x89, 0xc4, //0x0000308b movq %rax, %r12 + 0x49, 0x83, 0xfa, 0x01, //0x0000308e cmpq $1, %r10 + 0x4d, 0x8d, 0x52, 0xff, //0x00003092 leaq $-1(%r10), %r10 + 0x0f, 0x8f, 0x14, 0xf9, 0xff, 0xff, //0x00003096 jg LBB7_2 + 0xe9, 0x73, 0x00, 0x00, 0x00, //0x0000309c jmp LBB7_94 + //0x000030a1 LBB7_86 + 0x49, 0x83, 0xfa, 0x03, //0x000030a1 cmpq $3, %r10 + 0x0f, 0x8c, 0x2b, 0x00, 0x00, 0x00, //0x000030a5 jl LBB7_90 + 0x41, 0x80, 0x7c, 0x24, 0x01, 0x80, //0x000030ab cmpb $-128, $1(%r12) + 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x000030b1 jne LBB7_90 + 0x41, 0x8a, 0x4c, 0x24, 0x02, //0x000030b7 movb $2(%r12), %cl + 0x89, 0xc8, //0x000030bc movl %ecx, %eax + 0x24, 0xfe, //0x000030be andb $-2, %al + 0x3c, 0xa8, //0x000030c0 cmpb $-88, %al + 0x0f, 0x85, 0x0e, 0x00, 0x00, 0x00, //0x000030c2 jne LBB7_90 + 0x49, 0x8d, 0x44, 0x24, 0x02, //0x000030c8 leaq $2(%r12), %rax + 0x49, 0x83, 0xc2, 0xfe, //0x000030cd addq $-2, %r10 + 0xe9, 0x2c, 0xff, 0xff, 0xff, //0x000030d1 jmp LBB7_75 + //0x000030d6 LBB7_90 + 0x4d, 0x85, 0xc9, //0x000030d6 testq %r9, %r9 + 0x0f, 0x8e, 0x54, 0x00, 0x00, 0x00, //0x000030d9 jle LBB7_96 + 0x41, 0xc6, 0x07, 0xe2, //0x000030df movb $-30, (%r15) + 0x49, 0xff, 0xc7, //0x000030e3 incq %r15 + 0x49, 0xff, 0xc9, //0x000030e6 decq %r9 + 0x4c, 0x89, 0xe0, //0x000030e9 movq %r12, %rax + 0xe9, 0x97, 0xff, 0xff, 0xff, //0x000030ec jmp LBB7_83 + //0x000030f1 LBB7_92 + 0x4c, 0x2b, 0x7d, 0xc8, //0x000030f1 subq $-56(%rbp), %r15 + 0x48, 0xf7, 0xd0, //0x000030f5 notq %rax + 0x49, 0x01, 0xc7, //0x000030f8 addq %rax, %r15 + 0x48, 0x8b, 0x4d, 0xc0, //0x000030fb movq $-64(%rbp), %rcx + 0x4c, 0x89, 0x39, //0x000030ff movq %r15, (%rcx) + 0x4c, 0x2b, 0x65, 0xd0, //0x00003102 subq $-48(%rbp), %r12 + 0x49, 0x01, 0xc4, //0x00003106 addq %rax, %r12 + 0x49, 0xf7, 0xd4, //0x00003109 notq %r12 + 0xe9, 0x29, 0x00, 0x00, 0x00, //0x0000310c jmp LBB7_97 + //0x00003111 LBB7_93 + 0x4c, 0x89, 0xe0, //0x00003111 movq %r12, %rax + //0x00003114 LBB7_94 + 0x4c, 0x2b, 0x7d, 0xc8, //0x00003114 subq $-56(%rbp), %r15 + 0x48, 0x8b, 0x4d, 0xc0, //0x00003118 movq $-64(%rbp), %rcx + 0x4c, 0x89, 0x39, //0x0000311c movq %r15, (%rcx) + 0x48, 0x2b, 0x45, 0xd0, //0x0000311f subq $-48(%rbp), %rax + 0xe9, 0x15, 0x00, 0x00, 0x00, //0x00003123 jmp LBB7_98 + //0x00003128 LBB7_95 + 0x4c, 0x2b, 0x7d, 0xc8, //0x00003128 subq $-56(%rbp), %r15 + 0x48, 0x8b, 0x45, 0xc0, //0x0000312c movq $-64(%rbp), %rax + 0x4c, 0x89, 0x38, //0x00003130 movq %r15, (%rax) + //0x00003133 LBB7_96 + 0x49, 0xf7, 0xd4, //0x00003133 notq %r12 + 0x4c, 0x03, 0x65, 0xd0, //0x00003136 addq $-48(%rbp), %r12 + //0x0000313a LBB7_97 + 0x4c, 0x89, 0xe0, //0x0000313a movq %r12, %rax + //0x0000313d LBB7_98 + 0x48, 0x83, 0xc4, 0x18, //0x0000313d addq $24, %rsp + 0x5b, //0x00003141 popq %rbx + 0x41, 0x5c, //0x00003142 popq %r12 + 0x41, 0x5d, //0x00003144 popq %r13 + 0x41, 0x5e, //0x00003146 popq %r14 + 0x41, 0x5f, //0x00003148 popq %r15 + 0x5d, //0x0000314a popq %rbp + 0xc5, 0xf8, 0x77, //0x0000314b vzeroupper + 0xc3, //0x0000314e retq + 0x90, //0x0000314f .p2align 4, 0x90 + //0x00003150 _atof_eisel_lemire64 + 0x55, //0x00003150 pushq %rbp + 0x48, 0x89, 0xe5, //0x00003151 movq %rsp, %rbp + 0x41, 0x57, //0x00003154 pushq %r15 + 0x41, 0x56, //0x00003156 pushq %r14 + 0x53, //0x00003158 pushq %rbx + 0x8d, 0x86, 0x5c, 0x01, 0x00, 0x00, //0x00003159 leal $348(%rsi), %eax + 0x3d, 0xb7, 0x02, 0x00, 0x00, //0x0000315f cmpl $695, %eax + 0x0f, 0x87, 0x08, 0x01, 0x00, 0x00, //0x00003164 ja LBB8_1 + 0x49, 0x89, 0xc8, //0x0000316a movq %rcx, %r8 + 0x41, 0x89, 0xd1, //0x0000316d movl %edx, %r9d + 0x48, 0x85, 0xff, //0x00003170 testq %rdi, %rdi + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00003173 je LBB8_4 + 0x4c, 0x0f, 0xbd, 0xd7, //0x00003179 bsrq %rdi, %r10 + 0x49, 0x83, 0xf2, 0x3f, //0x0000317d xorq $63, %r10 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00003181 jmp LBB8_5 + //0x00003186 LBB8_4 + 0x41, 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003186 movl $64, %r10d + //0x0000318c LBB8_5 + 0x44, 0x89, 0xd1, //0x0000318c movl %r10d, %ecx + 0x48, 0xd3, 0xe7, //0x0000318f shlq %cl, %rdi + 0x89, 0xc1, //0x00003192 movl %eax, %ecx + 0x48, 0xc1, 0xe1, 0x04, //0x00003194 shlq $4, %rcx + 0x4c, 0x8d, 0x3d, 0x41, 0x6e, 0x00, 0x00, //0x00003198 leaq $28225(%rip), %r15 /* _POW10_M128_TAB+0(%rip) */ + 0x48, 0x89, 0xf8, //0x0000319f movq %rdi, %rax + 0x4a, 0xf7, 0x64, 0x39, 0x08, //0x000031a2 mulq $8(%rcx,%r15) + 0x49, 0x89, 0xc3, //0x000031a7 movq %rax, %r11 + 0x49, 0x89, 0xd6, //0x000031aa movq %rdx, %r14 + 0x81, 0xe2, 0xff, 0x01, 0x00, 0x00, //0x000031ad andl $511, %edx + 0x48, 0x89, 0xfb, //0x000031b3 movq %rdi, %rbx + 0x48, 0xf7, 0xd3, //0x000031b6 notq %rbx + 0x48, 0x39, 0xd8, //0x000031b9 cmpq %rbx, %rax + 0x0f, 0x86, 0x42, 0x00, 0x00, 0x00, //0x000031bc jbe LBB8_11 + 0x81, 0xfa, 0xff, 0x01, 0x00, 0x00, //0x000031c2 cmpl $511, %edx + 0x0f, 0x85, 0x36, 0x00, 0x00, 0x00, //0x000031c8 jne LBB8_11 + 0x48, 0x89, 0xf8, //0x000031ce movq %rdi, %rax + 0x4a, 0xf7, 0x24, 0x39, //0x000031d1 mulq (%rcx,%r15) + 0x49, 0x01, 0xd3, //0x000031d5 addq %rdx, %r11 + 0x49, 0x83, 0xd6, 0x00, //0x000031d8 adcq $0, %r14 + 0x44, 0x89, 0xf2, //0x000031dc movl %r14d, %edx + 0x81, 0xe2, 0xff, 0x01, 0x00, 0x00, //0x000031df andl $511, %edx + 0x48, 0x39, 0xd8, //0x000031e5 cmpq %rbx, %rax + 0x0f, 0x86, 0x16, 0x00, 0x00, 0x00, //0x000031e8 jbe LBB8_11 + 0x49, 0x83, 0xfb, 0xff, //0x000031ee cmpq $-1, %r11 + 0x0f, 0x85, 0x0c, 0x00, 0x00, 0x00, //0x000031f2 jne LBB8_11 + 0x81, 0xfa, 0xff, 0x01, 0x00, 0x00, //0x000031f8 cmpl $511, %edx + 0x0f, 0x84, 0x6e, 0x00, 0x00, 0x00, //0x000031fe je LBB8_1 + //0x00003204 LBB8_11 + 0x4c, 0x89, 0xf7, //0x00003204 movq %r14, %rdi + 0x48, 0xc1, 0xef, 0x3f, //0x00003207 shrq $63, %rdi + 0x8d, 0x4f, 0x09, //0x0000320b leal $9(%rdi), %ecx + 0x49, 0xd3, 0xee, //0x0000320e shrq %cl, %r14 + 0x4c, 0x09, 0xda, //0x00003211 orq %r11, %rdx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00003214 jne LBB8_14 + 0x44, 0x89, 0xf0, //0x0000321a movl %r14d, %eax + 0x83, 0xe0, 0x03, //0x0000321d andl $3, %eax + 0x83, 0xf8, 0x01, //0x00003220 cmpl $1, %eax + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x00003223 je LBB8_1 + //0x00003229 LBB8_14 + 0x69, 0xc6, 0x6a, 0x52, 0x03, 0x00, //0x00003229 imull $217706, %esi, %eax + 0xc1, 0xf8, 0x10, //0x0000322f sarl $16, %eax + 0x05, 0x3f, 0x04, 0x00, 0x00, //0x00003232 addl $1087, %eax + 0x48, 0x98, //0x00003237 cltq + 0x4c, 0x29, 0xd0, //0x00003239 subq %r10, %rax + 0x48, 0x83, 0xf7, 0x01, //0x0000323c xorq $1, %rdi + 0x48, 0x29, 0xf8, //0x00003240 subq %rdi, %rax + 0x44, 0x89, 0xf2, //0x00003243 movl %r14d, %edx + 0x83, 0xe2, 0x01, //0x00003246 andl $1, %edx + 0x4c, 0x01, 0xf2, //0x00003249 addq %r14, %rdx + 0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, //0x0000324c movabsq $126100789566373888, %rcx + 0x48, 0x21, 0xd1, //0x00003256 andq %rdx, %rcx + 0x48, 0x83, 0xf9, 0x01, //0x00003259 cmpq $1, %rcx + 0x48, 0x83, 0xd8, 0xff, //0x0000325d sbbq $-1, %rax + 0x48, 0x8d, 0x70, 0xff, //0x00003261 leaq $-1(%rax), %rsi + 0x48, 0x81, 0xfe, 0xfd, 0x07, 0x00, 0x00, //0x00003265 cmpq $2045, %rsi + 0x0f, 0x86, 0x09, 0x00, 0x00, 0x00, //0x0000326c jbe LBB8_16 + //0x00003272 LBB8_1 + 0x31, 0xc0, //0x00003272 xorl %eax, %eax + //0x00003274 LBB8_17 + 0x5b, //0x00003274 popq %rbx + 0x41, 0x5e, //0x00003275 popq %r14 + 0x41, 0x5f, //0x00003277 popq %r15 + 0x5d, //0x00003279 popq %rbp + 0xc3, //0x0000327a retq + //0x0000327b LBB8_16 + 0x48, 0x83, 0xf9, 0x01, //0x0000327b cmpq $1, %rcx + 0xb1, 0x02, //0x0000327f movb $2, %cl + 0x80, 0xd9, 0x00, //0x00003281 sbbb $0, %cl + 0x48, 0xd3, 0xea, //0x00003284 shrq %cl, %rdx + 0x48, 0xc1, 0xe0, 0x34, //0x00003287 shlq $52, %rax + 0x48, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, //0x0000328b movabsq $4503599627370495, %rcx + 0x48, 0x21, 0xd1, //0x00003295 andq %rdx, %rcx + 0x48, 0x09, 0xc1, //0x00003298 orq %rax, %rcx + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x0000329b movabsq $-9223372036854775808, %rax + 0x48, 0x09, 0xc8, //0x000032a5 orq %rcx, %rax + 0x41, 0x83, 0xf9, 0xff, //0x000032a8 cmpl $-1, %r9d + 0x48, 0x0f, 0x45, 0xc1, //0x000032ac cmovneq %rcx, %rax + 0x49, 0x89, 0x00, //0x000032b0 movq %rax, (%r8) + 0xb0, 0x01, //0x000032b3 movb $1, %al + 0xe9, 0xba, 0xff, 0xff, 0xff, //0x000032b5 jmp LBB8_17 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000032ba .p2align 5, 0x00 + //0x000032c0 LCPI9_0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000032c0 QUAD $0x0000000000000000 // .space 8, '\x00\x00\x00\x00\x00\x00\x00\x00' + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000032c8 .quad 1 + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000032d0 .quad 1 + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000032d8 .quad 1 + //0x000032e0 .p2align 3, 0x00 + //0x000032e0 LCPI9_1 + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000032e0 .quad 1 + //0x000032e8 LCPI9_2 + 0x10, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000032e8 .quad 10000 + //0x000032f0 LCPI9_3 + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000032f0 .quad 10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000032f8 .p2align 4, 0x90 + //0x00003300 _decimal_to_f64 + 0x55, //0x00003300 pushq %rbp + 0x48, 0x89, 0xe5, //0x00003301 movq %rsp, %rbp + 0x41, 0x57, //0x00003304 pushq %r15 + 0x41, 0x56, //0x00003306 pushq %r14 + 0x41, 0x55, //0x00003308 pushq %r13 + 0x41, 0x54, //0x0000330a pushq %r12 + 0x53, //0x0000330c pushq %rbx + 0x50, //0x0000330d pushq %rax + 0x49, 0x89, 0xf5, //0x0000330e movq %rsi, %r13 + 0x49, 0x89, 0xfc, //0x00003311 movq %rdi, %r12 + 0x48, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, //0x00003314 movabsq $4503599627370496, %rbx + 0x83, 0x7f, 0x10, 0x00, //0x0000331e cmpl $0, $16(%rdi) + 0x0f, 0x84, 0x30, 0x00, 0x00, 0x00, //0x00003322 je LBB9_4 + 0x49, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, //0x00003328 movabsq $9218868437227405312, %r14 + 0x41, 0x8b, 0x44, 0x24, 0x14, //0x00003332 movl $20(%r12), %eax + 0x45, 0x31, 0xff, //0x00003337 xorl %r15d, %r15d + 0x3d, 0x36, 0x01, 0x00, 0x00, //0x0000333a cmpl $310, %eax + 0x0f, 0x8f, 0x1e, 0x06, 0x00, 0x00, //0x0000333f jg LBB9_84 + 0x3d, 0xb6, 0xfe, 0xff, 0xff, //0x00003345 cmpl $-330, %eax + 0x0f, 0x8d, 0x13, 0x00, 0x00, 0x00, //0x0000334a jge LBB9_5 + 0x45, 0x31, 0xf6, //0x00003350 xorl %r14d, %r14d + 0xe9, 0x0b, 0x06, 0x00, 0x00, //0x00003353 jmp LBB9_84 + //0x00003358 LBB9_4 + 0x45, 0x31, 0xf6, //0x00003358 xorl %r14d, %r14d + 0x45, 0x31, 0xff, //0x0000335b xorl %r15d, %r15d + 0xe9, 0x00, 0x06, 0x00, 0x00, //0x0000335e jmp LBB9_84 + //0x00003363 LBB9_5 + 0x85, 0xc0, //0x00003363 testl %eax, %eax + 0x4c, 0x89, 0x6d, 0xd0, //0x00003365 movq %r13, $-48(%rbp) + 0x0f, 0x8e, 0xd0, 0x00, 0x00, 0x00, //0x00003369 jle LBB9_20 + 0x45, 0x31, 0xff, //0x0000336f xorl %r15d, %r15d + 0x4c, 0x8d, 0x2d, 0xf7, 0x97, 0x00, 0x00, //0x00003372 leaq $38903(%rip), %r13 /* _POW_TAB+0(%rip) */ + 0xe9, 0x1e, 0x00, 0x00, 0x00, //0x00003379 jmp LBB9_9 + 0x90, 0x90, //0x0000337e .p2align 4, 0x90 + //0x00003380 LBB9_7 + 0xf7, 0xdb, //0x00003380 negl %ebx + 0x4c, 0x89, 0xe7, //0x00003382 movq %r12, %rdi + 0x89, 0xde, //0x00003385 movl %ebx, %esi + 0xe8, 0x84, 0x67, 0x00, 0x00, //0x00003387 callq _right_shift + //0x0000338c LBB9_8 + 0x45, 0x01, 0xf7, //0x0000338c addl %r14d, %r15d + 0x41, 0x8b, 0x44, 0x24, 0x14, //0x0000338f movl $20(%r12), %eax + 0x85, 0xc0, //0x00003394 testl %eax, %eax + 0x0f, 0x8e, 0xa3, 0x00, 0x00, 0x00, //0x00003396 jle LBB9_20 + //0x0000339c LBB9_9 + 0x41, 0xbe, 0x1b, 0x00, 0x00, 0x00, //0x0000339c movl $27, %r14d + 0x83, 0xf8, 0x08, //0x000033a2 cmpl $8, %eax + 0x0f, 0x8f, 0x07, 0x00, 0x00, 0x00, //0x000033a5 jg LBB9_11 + 0x89, 0xc0, //0x000033ab movl %eax, %eax + 0x45, 0x8b, 0x74, 0x85, 0x00, //0x000033ad movl (%r13,%rax,4), %r14d + //0x000033b2 LBB9_11 + 0x45, 0x85, 0xf6, //0x000033b2 testl %r14d, %r14d + 0x0f, 0x84, 0xd1, 0xff, 0xff, 0xff, //0x000033b5 je LBB9_8 + 0x41, 0x83, 0x7c, 0x24, 0x10, 0x00, //0x000033bb cmpl $0, $16(%r12) + 0x0f, 0x84, 0xc5, 0xff, 0xff, 0xff, //0x000033c1 je LBB9_8 + 0x44, 0x89, 0xf3, //0x000033c7 movl %r14d, %ebx + 0xf7, 0xdb, //0x000033ca negl %ebx + 0x45, 0x85, 0xf6, //0x000033cc testl %r14d, %r14d + 0x0f, 0x88, 0x2b, 0x00, 0x00, 0x00, //0x000033cf js LBB9_16 + 0x41, 0x83, 0xfe, 0x3d, //0x000033d5 cmpl $61, %r14d + 0x0f, 0x8c, 0xa1, 0xff, 0xff, 0xff, //0x000033d9 jl LBB9_7 + 0x90, //0x000033df .p2align 4, 0x90 + //0x000033e0 LBB9_15 + 0x4c, 0x89, 0xe7, //0x000033e0 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x000033e3 movl $60, %esi + 0xe8, 0x23, 0x67, 0x00, 0x00, //0x000033e8 callq _right_shift + 0x8d, 0x43, 0x3c, //0x000033ed leal $60(%rbx), %eax + 0x83, 0xfb, 0x88, //0x000033f0 cmpl $-120, %ebx + 0x89, 0xc3, //0x000033f3 movl %eax, %ebx + 0x0f, 0x8c, 0xe5, 0xff, 0xff, 0xff, //0x000033f5 jl LBB9_15 + 0xe9, 0x80, 0xff, 0xff, 0xff, //0x000033fb jmp LBB9_7 + //0x00003400 LBB9_16 + 0x41, 0x83, 0xfe, 0xc3, //0x00003400 cmpl $-61, %r14d + 0x0f, 0x8f, 0x26, 0x00, 0x00, 0x00, //0x00003404 jg LBB9_18 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000340a .p2align 4, 0x90 + //0x00003410 LBB9_17 + 0x4c, 0x89, 0xe7, //0x00003410 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00003413 movl $60, %esi + 0xe8, 0x03, 0x65, 0x00, 0x00, //0x00003418 callq _left_shift + 0x8d, 0x73, 0xc4, //0x0000341d leal $-60(%rbx), %esi + 0x83, 0xfb, 0x78, //0x00003420 cmpl $120, %ebx + 0x89, 0xf3, //0x00003423 movl %esi, %ebx + 0x0f, 0x8f, 0xe5, 0xff, 0xff, 0xff, //0x00003425 jg LBB9_17 + 0xe9, 0x02, 0x00, 0x00, 0x00, //0x0000342b jmp LBB9_19 + //0x00003430 LBB9_18 + 0x89, 0xde, //0x00003430 movl %ebx, %esi + //0x00003432 LBB9_19 + 0x4c, 0x89, 0xe7, //0x00003432 movq %r12, %rdi + 0xe8, 0xe6, 0x64, 0x00, 0x00, //0x00003435 callq _left_shift + 0xe9, 0x4d, 0xff, 0xff, 0xff, //0x0000343a jmp LBB9_8 + //0x0000343f LBB9_20 + 0x4c, 0x8d, 0x35, 0x2a, 0x97, 0x00, 0x00, //0x0000343f leaq $38698(%rip), %r14 /* _POW_TAB+0(%rip) */ + 0xe9, 0x15, 0x00, 0x00, 0x00, //0x00003446 jmp LBB9_23 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000344b .p2align 4, 0x90 + //0x00003450 LBB9_21 + 0x4c, 0x89, 0xe7, //0x00003450 movq %r12, %rdi + 0xe8, 0xc8, 0x64, 0x00, 0x00, //0x00003453 callq _left_shift + //0x00003458 LBB9_22 + 0x45, 0x29, 0xef, //0x00003458 subl %r13d, %r15d + 0x41, 0x8b, 0x44, 0x24, 0x14, //0x0000345b movl $20(%r12), %eax + //0x00003460 LBB9_23 + 0x85, 0xc0, //0x00003460 testl %eax, %eax + 0x0f, 0x88, 0x18, 0x00, 0x00, 0x00, //0x00003462 js LBB9_26 + 0x0f, 0x85, 0xbe, 0x00, 0x00, 0x00, //0x00003468 jne LBB9_37 + 0x49, 0x8b, 0x0c, 0x24, //0x0000346e movq (%r12), %rcx + 0x80, 0x39, 0x35, //0x00003472 cmpb $53, (%rcx) + 0x0f, 0x8c, 0x14, 0x00, 0x00, 0x00, //0x00003475 jl LBB9_27 + 0xe9, 0xac, 0x00, 0x00, 0x00, //0x0000347b jmp LBB9_37 + //0x00003480 .p2align 4, 0x90 + //0x00003480 LBB9_26 + 0x41, 0xbd, 0x1b, 0x00, 0x00, 0x00, //0x00003480 movl $27, %r13d + 0x83, 0xf8, 0xf8, //0x00003486 cmpl $-8, %eax + 0x0f, 0x8c, 0x08, 0x00, 0x00, 0x00, //0x00003489 jl LBB9_28 + //0x0000348f LBB9_27 + 0xf7, 0xd8, //0x0000348f negl %eax + 0x48, 0x98, //0x00003491 cltq + 0x45, 0x8b, 0x2c, 0x86, //0x00003493 movl (%r14,%rax,4), %r13d + //0x00003497 LBB9_28 + 0x45, 0x85, 0xed, //0x00003497 testl %r13d, %r13d + 0x0f, 0x84, 0xb8, 0xff, 0xff, 0xff, //0x0000349a je LBB9_22 + 0x41, 0x83, 0x7c, 0x24, 0x10, 0x00, //0x000034a0 cmpl $0, $16(%r12) + 0x0f, 0x84, 0xac, 0xff, 0xff, 0xff, //0x000034a6 je LBB9_22 + 0x45, 0x85, 0xed, //0x000034ac testl %r13d, %r13d + 0x0f, 0x8e, 0x3b, 0x00, 0x00, 0x00, //0x000034af jle LBB9_34 + 0x44, 0x89, 0xee, //0x000034b5 movl %r13d, %esi + 0x41, 0x83, 0xfd, 0x3d, //0x000034b8 cmpl $61, %r13d + 0x0f, 0x8c, 0x8e, 0xff, 0xff, 0xff, //0x000034bc jl LBB9_21 + 0x44, 0x89, 0xeb, //0x000034c2 movl %r13d, %ebx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000034c5 .p2align 4, 0x90 + //0x000034d0 LBB9_33 + 0x4c, 0x89, 0xe7, //0x000034d0 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x000034d3 movl $60, %esi + 0xe8, 0x43, 0x64, 0x00, 0x00, //0x000034d8 callq _left_shift + 0x8d, 0x73, 0xc4, //0x000034dd leal $-60(%rbx), %esi + 0x83, 0xfb, 0x78, //0x000034e0 cmpl $120, %ebx + 0x89, 0xf3, //0x000034e3 movl %esi, %ebx + 0x0f, 0x8f, 0xe5, 0xff, 0xff, 0xff, //0x000034e5 jg LBB9_33 + 0xe9, 0x60, 0xff, 0xff, 0xff, //0x000034eb jmp LBB9_21 + //0x000034f0 LBB9_34 + 0x44, 0x89, 0xeb, //0x000034f0 movl %r13d, %ebx + 0x41, 0x83, 0xfd, 0xc3, //0x000034f3 cmpl $-61, %r13d + 0x0f, 0x8f, 0x1e, 0x00, 0x00, 0x00, //0x000034f7 jg LBB9_36 + 0x90, 0x90, 0x90, //0x000034fd .p2align 4, 0x90 + //0x00003500 LBB9_35 + 0x4c, 0x89, 0xe7, //0x00003500 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00003503 movl $60, %esi + 0xe8, 0x03, 0x66, 0x00, 0x00, //0x00003508 callq _right_shift + 0x8d, 0x43, 0x3c, //0x0000350d leal $60(%rbx), %eax + 0x83, 0xfb, 0x88, //0x00003510 cmpl $-120, %ebx + 0x89, 0xc3, //0x00003513 movl %eax, %ebx + 0x0f, 0x8c, 0xe5, 0xff, 0xff, 0xff, //0x00003515 jl LBB9_35 + //0x0000351b LBB9_36 + 0xf7, 0xdb, //0x0000351b negl %ebx + 0x4c, 0x89, 0xe7, //0x0000351d movq %r12, %rdi + 0x89, 0xde, //0x00003520 movl %ebx, %esi + 0xe8, 0xe9, 0x65, 0x00, 0x00, //0x00003522 callq _right_shift + 0xe9, 0x2c, 0xff, 0xff, 0xff, //0x00003527 jmp LBB9_22 + //0x0000352c LBB9_37 + 0x41, 0x81, 0xff, 0x02, 0xfc, 0xff, 0xff, //0x0000352c cmpl $-1022, %r15d + 0x0f, 0x8f, 0x5b, 0x00, 0x00, 0x00, //0x00003533 jg LBB9_43 + 0x41, 0x83, 0x7c, 0x24, 0x10, 0x00, //0x00003539 cmpl $0, $16(%r12) + 0x4c, 0x8b, 0x6d, 0xd0, //0x0000353f movq $-48(%rbp), %r13 + 0x48, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, //0x00003543 movabsq $4503599627370496, %rbx + 0x0f, 0x84, 0x67, 0x00, 0x00, 0x00, //0x0000354d je LBB9_45 + 0x41, 0x81, 0xff, 0xc6, 0xfb, 0xff, 0xff, //0x00003553 cmpl $-1082, %r15d + 0x0f, 0x8f, 0x65, 0x00, 0x00, 0x00, //0x0000355a jg LBB9_46 + 0x41, 0x81, 0xc7, 0xc1, 0x03, 0x00, 0x00, //0x00003560 addl $961, %r15d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003567 .p2align 4, 0x90 + //0x00003570 LBB9_41 + 0x4c, 0x89, 0xe7, //0x00003570 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00003573 movl $60, %esi + 0xe8, 0x93, 0x65, 0x00, 0x00, //0x00003578 callq _right_shift + 0x41, 0x83, 0xc7, 0x3c, //0x0000357d addl $60, %r15d + 0x41, 0x83, 0xff, 0x88, //0x00003581 cmpl $-120, %r15d + 0x0f, 0x8c, 0xe5, 0xff, 0xff, 0xff, //0x00003585 jl LBB9_41 + 0x41, 0x83, 0xc7, 0x3c, //0x0000358b addl $60, %r15d + 0xe9, 0x38, 0x00, 0x00, 0x00, //0x0000358f jmp LBB9_47 + //0x00003594 LBB9_43 + 0x41, 0x81, 0xff, 0x00, 0x04, 0x00, 0x00, //0x00003594 cmpl $1024, %r15d + 0x4c, 0x8b, 0x6d, 0xd0, //0x0000359b movq $-48(%rbp), %r13 + 0x48, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, //0x0000359f movabsq $4503599627370496, %rbx + 0x0f, 0x8f, 0x7d, 0x03, 0x00, 0x00, //0x000035a9 jg LBB9_81 + 0x41, 0xff, 0xcf, //0x000035af decl %r15d + 0x45, 0x89, 0xfe, //0x000035b2 movl %r15d, %r14d + 0xe9, 0x26, 0x00, 0x00, 0x00, //0x000035b5 jmp LBB9_48 + //0x000035ba LBB9_45 + 0x41, 0xbe, 0x02, 0xfc, 0xff, 0xff, //0x000035ba movl $-1022, %r14d + 0xe9, 0x34, 0x00, 0x00, 0x00, //0x000035c0 jmp LBB9_50 + //0x000035c5 LBB9_46 + 0x41, 0x81, 0xc7, 0xfd, 0x03, 0x00, 0x00, //0x000035c5 addl $1021, %r15d + //0x000035cc LBB9_47 + 0x41, 0xf7, 0xdf, //0x000035cc negl %r15d + 0x4c, 0x89, 0xe7, //0x000035cf movq %r12, %rdi + 0x44, 0x89, 0xfe, //0x000035d2 movl %r15d, %esi + 0xe8, 0x36, 0x65, 0x00, 0x00, //0x000035d5 callq _right_shift + 0x41, 0xbe, 0x02, 0xfc, 0xff, 0xff, //0x000035da movl $-1022, %r14d + //0x000035e0 LBB9_48 + 0x41, 0x83, 0x7c, 0x24, 0x10, 0x00, //0x000035e0 cmpl $0, $16(%r12) + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000035e6 je LBB9_50 + 0x4c, 0x89, 0xe7, //0x000035ec movq %r12, %rdi + 0xbe, 0x35, 0x00, 0x00, 0x00, //0x000035ef movl $53, %esi + 0xe8, 0x27, 0x63, 0x00, 0x00, //0x000035f4 callq _left_shift + //0x000035f9 LBB9_50 + 0x4d, 0x63, 0x54, 0x24, 0x14, //0x000035f9 movslq $20(%r12), %r10 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000035fe movq $-1, %r15 + 0x49, 0x83, 0xfa, 0x14, //0x00003605 cmpq $20, %r10 + 0x0f, 0x8f, 0x35, 0x03, 0x00, 0x00, //0x00003609 jg LBB9_83 + 0x44, 0x89, 0xd1, //0x0000360f movl %r10d, %ecx + 0x45, 0x85, 0xd2, //0x00003612 testl %r10d, %r10d + 0x0f, 0x8e, 0x41, 0x00, 0x00, 0x00, //0x00003615 jle LBB9_55 + 0x49, 0x63, 0x74, 0x24, 0x10, //0x0000361b movslq $16(%r12), %rsi + 0x31, 0xd2, //0x00003620 xorl %edx, %edx + 0x45, 0x31, 0xff, //0x00003622 xorl %r15d, %r15d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003625 .p2align 4, 0x90 + //0x00003630 LBB9_53 + 0x48, 0x39, 0xf2, //0x00003630 cmpq %rsi, %rdx + 0x0f, 0x8d, 0x28, 0x00, 0x00, 0x00, //0x00003633 jge LBB9_56 + 0x4b, 0x8d, 0x04, 0xbf, //0x00003639 leaq (%r15,%r15,4), %rax + 0x49, 0x8b, 0x3c, 0x24, //0x0000363d movq (%r12), %rdi + 0x48, 0x0f, 0xbe, 0x3c, 0x17, //0x00003641 movsbq (%rdi,%rdx), %rdi + 0x4c, 0x8d, 0x7c, 0x47, 0xd0, //0x00003646 leaq $-48(%rdi,%rax,2), %r15 + 0x48, 0xff, 0xc2, //0x0000364b incq %rdx + 0x48, 0x39, 0xd1, //0x0000364e cmpq %rdx, %rcx + 0x0f, 0x85, 0xd9, 0xff, 0xff, 0xff, //0x00003651 jne LBB9_53 + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00003657 jmp LBB9_56 + //0x0000365c LBB9_55 + 0x31, 0xd2, //0x0000365c xorl %edx, %edx + 0x45, 0x31, 0xff, //0x0000365e xorl %r15d, %r15d + //0x00003661 LBB9_56 + 0x39, 0xd1, //0x00003661 cmpl %edx, %ecx + 0x0f, 0x8e, 0x46, 0x02, 0x00, 0x00, //0x00003663 jle LBB9_69 + 0x45, 0x89, 0xd1, //0x00003669 movl %r10d, %r9d + 0x41, 0x29, 0xd1, //0x0000366c subl %edx, %r9d + 0x41, 0x83, 0xf9, 0x10, //0x0000366f cmpl $16, %r9d + 0x0f, 0x82, 0x22, 0x02, 0x00, 0x00, //0x00003673 jb LBB9_67 + 0x45, 0x89, 0xc8, //0x00003679 movl %r9d, %r8d + 0xc5, 0xf9, 0x6f, 0x05, 0x3c, 0xfc, 0xff, 0xff, //0x0000367c vmovdqa $-964(%rip), %xmm0 /* LCPI9_0+0(%rip) */ + 0xc4, 0xc3, 0xf9, 0x22, 0xc7, 0x00, //0x00003684 vpinsrq $0, %r15, %xmm0, %xmm0 + 0x41, 0x83, 0xe0, 0xf0, //0x0000368a andl $-16, %r8d + 0xc4, 0xe3, 0x7d, 0x02, 0x05, 0x28, 0xfc, 0xff, 0xff, 0xf0, //0x0000368e vpblendd $240, $-984(%rip), %ymm0, %ymm0 /* LCPI9_0+0(%rip) */ + 0x41, 0x8d, 0x78, 0xf0, //0x00003698 leal $-16(%r8), %edi + 0x89, 0xf8, //0x0000369c movl %edi, %eax + 0xc1, 0xe8, 0x04, //0x0000369e shrl $4, %eax + 0xff, 0xc0, //0x000036a1 incl %eax + 0x89, 0xc6, //0x000036a3 movl %eax, %esi + 0x83, 0xe6, 0x03, //0x000036a5 andl $3, %esi + 0x83, 0xff, 0x30, //0x000036a8 cmpl $48, %edi + 0x0f, 0x83, 0x16, 0x00, 0x00, 0x00, //0x000036ab jae LBB9_60 + 0xc4, 0xe2, 0x7d, 0x59, 0x15, 0x26, 0xfc, 0xff, 0xff, //0x000036b1 vpbroadcastq $-986(%rip), %ymm2 /* LCPI9_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0xda, //0x000036ba vmovdqa %ymm2, %ymm3 + 0xc5, 0xfd, 0x6f, 0xca, //0x000036be vmovdqa %ymm2, %ymm1 + 0xe9, 0x8a, 0x00, 0x00, 0x00, //0x000036c2 jmp LBB9_62 + //0x000036c7 LBB9_60 + 0x89, 0xf7, //0x000036c7 movl %esi, %edi + 0x29, 0xc7, //0x000036c9 subl %eax, %edi + 0xc4, 0xe2, 0x7d, 0x59, 0x15, 0x0c, 0xfc, 0xff, 0xff, //0x000036cb vpbroadcastq $-1012(%rip), %ymm2 /* LCPI9_1+0(%rip) */ + 0xc4, 0xe2, 0x7d, 0x59, 0x25, 0x0b, 0xfc, 0xff, 0xff, //0x000036d4 vpbroadcastq $-1013(%rip), %ymm4 /* LCPI9_2+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0xda, //0x000036dd vmovdqa %ymm2, %ymm3 + 0xc5, 0xfd, 0x6f, 0xca, //0x000036e1 vmovdqa %ymm2, %ymm1 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000036e5 .p2align 4, 0x90 + //0x000036f0 LBB9_61 + 0xc5, 0xfd, 0xf4, 0xec, //0x000036f0 vpmuludq %ymm4, %ymm0, %ymm5 + 0xc5, 0xfd, 0x73, 0xd0, 0x20, //0x000036f4 vpsrlq $32, %ymm0, %ymm0 + 0xc5, 0xfd, 0xf4, 0xc4, //0x000036f9 vpmuludq %ymm4, %ymm0, %ymm0 + 0xc5, 0xfd, 0x73, 0xf0, 0x20, //0x000036fd vpsllq $32, %ymm0, %ymm0 + 0xc5, 0xd5, 0xd4, 0xc0, //0x00003702 vpaddq %ymm0, %ymm5, %ymm0 + 0xc5, 0xed, 0xf4, 0xec, //0x00003706 vpmuludq %ymm4, %ymm2, %ymm5 + 0xc5, 0xed, 0x73, 0xd2, 0x20, //0x0000370a vpsrlq $32, %ymm2, %ymm2 + 0xc5, 0xed, 0xf4, 0xd4, //0x0000370f vpmuludq %ymm4, %ymm2, %ymm2 + 0xc5, 0xed, 0x73, 0xf2, 0x20, //0x00003713 vpsllq $32, %ymm2, %ymm2 + 0xc5, 0xd5, 0xd4, 0xd2, //0x00003718 vpaddq %ymm2, %ymm5, %ymm2 + 0xc5, 0xe5, 0xf4, 0xec, //0x0000371c vpmuludq %ymm4, %ymm3, %ymm5 + 0xc5, 0xe5, 0x73, 0xd3, 0x20, //0x00003720 vpsrlq $32, %ymm3, %ymm3 + 0xc5, 0xe5, 0xf4, 0xdc, //0x00003725 vpmuludq %ymm4, %ymm3, %ymm3 + 0xc5, 0xe5, 0x73, 0xf3, 0x20, //0x00003729 vpsllq $32, %ymm3, %ymm3 + 0xc5, 0xd5, 0xd4, 0xdb, //0x0000372e vpaddq %ymm3, %ymm5, %ymm3 + 0xc5, 0xf5, 0xf4, 0xec, //0x00003732 vpmuludq %ymm4, %ymm1, %ymm5 + 0xc5, 0xf5, 0x73, 0xd1, 0x20, //0x00003736 vpsrlq $32, %ymm1, %ymm1 + 0xc5, 0xf5, 0xf4, 0xcc, //0x0000373b vpmuludq %ymm4, %ymm1, %ymm1 + 0xc5, 0xf5, 0x73, 0xf1, 0x20, //0x0000373f vpsllq $32, %ymm1, %ymm1 + 0xc5, 0xd5, 0xd4, 0xc9, //0x00003744 vpaddq %ymm1, %ymm5, %ymm1 + 0x83, 0xc7, 0x04, //0x00003748 addl $4, %edi + 0x0f, 0x85, 0x9f, 0xff, 0xff, 0xff, //0x0000374b jne LBB9_61 + //0x00003751 LBB9_62 + 0x85, 0xf6, //0x00003751 testl %esi, %esi + 0x0f, 0x84, 0x77, 0x00, 0x00, 0x00, //0x00003753 je LBB9_65 + 0xf7, 0xde, //0x00003759 negl %esi + 0xc4, 0xe2, 0x7d, 0x59, 0x25, 0x8c, 0xfb, 0xff, 0xff, //0x0000375b vpbroadcastq $-1140(%rip), %ymm4 /* LCPI9_3+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003764 .p2align 4, 0x90 + //0x00003770 LBB9_64 + 0xc5, 0xfd, 0xf4, 0xec, //0x00003770 vpmuludq %ymm4, %ymm0, %ymm5 + 0xc5, 0xfd, 0x73, 0xd0, 0x20, //0x00003774 vpsrlq $32, %ymm0, %ymm0 + 0xc5, 0xfd, 0xf4, 0xc4, //0x00003779 vpmuludq %ymm4, %ymm0, %ymm0 + 0xc5, 0xfd, 0x73, 0xf0, 0x20, //0x0000377d vpsllq $32, %ymm0, %ymm0 + 0xc5, 0xd5, 0xd4, 0xc0, //0x00003782 vpaddq %ymm0, %ymm5, %ymm0 + 0xc5, 0xed, 0xf4, 0xec, //0x00003786 vpmuludq %ymm4, %ymm2, %ymm5 + 0xc5, 0xed, 0x73, 0xd2, 0x20, //0x0000378a vpsrlq $32, %ymm2, %ymm2 + 0xc5, 0xed, 0xf4, 0xd4, //0x0000378f vpmuludq %ymm4, %ymm2, %ymm2 + 0xc5, 0xed, 0x73, 0xf2, 0x20, //0x00003793 vpsllq $32, %ymm2, %ymm2 + 0xc5, 0xd5, 0xd4, 0xd2, //0x00003798 vpaddq %ymm2, %ymm5, %ymm2 + 0xc5, 0xe5, 0xf4, 0xec, //0x0000379c vpmuludq %ymm4, %ymm3, %ymm5 + 0xc5, 0xe5, 0x73, 0xd3, 0x20, //0x000037a0 vpsrlq $32, %ymm3, %ymm3 + 0xc5, 0xe5, 0xf4, 0xdc, //0x000037a5 vpmuludq %ymm4, %ymm3, %ymm3 + 0xc5, 0xe5, 0x73, 0xf3, 0x20, //0x000037a9 vpsllq $32, %ymm3, %ymm3 + 0xc5, 0xd5, 0xd4, 0xdb, //0x000037ae vpaddq %ymm3, %ymm5, %ymm3 + 0xc5, 0xf5, 0xf4, 0xec, //0x000037b2 vpmuludq %ymm4, %ymm1, %ymm5 + 0xc5, 0xf5, 0x73, 0xd1, 0x20, //0x000037b6 vpsrlq $32, %ymm1, %ymm1 + 0xc5, 0xf5, 0xf4, 0xcc, //0x000037bb vpmuludq %ymm4, %ymm1, %ymm1 + 0xc5, 0xf5, 0x73, 0xf1, 0x20, //0x000037bf vpsllq $32, %ymm1, %ymm1 + 0xc5, 0xd5, 0xd4, 0xc9, //0x000037c4 vpaddq %ymm1, %ymm5, %ymm1 + 0xff, 0xc6, //0x000037c8 incl %esi + 0x0f, 0x85, 0xa0, 0xff, 0xff, 0xff, //0x000037ca jne LBB9_64 + //0x000037d0 LBB9_65 + 0xc5, 0xdd, 0x73, 0xd2, 0x20, //0x000037d0 vpsrlq $32, %ymm2, %ymm4 + 0xc5, 0xdd, 0xf4, 0xe0, //0x000037d5 vpmuludq %ymm0, %ymm4, %ymm4 + 0xc5, 0xd5, 0x73, 0xd0, 0x20, //0x000037d9 vpsrlq $32, %ymm0, %ymm5 + 0xc5, 0xed, 0xf4, 0xed, //0x000037de vpmuludq %ymm5, %ymm2, %ymm5 + 0xc5, 0xd5, 0xd4, 0xe4, //0x000037e2 vpaddq %ymm4, %ymm5, %ymm4 + 0xc5, 0xdd, 0x73, 0xf4, 0x20, //0x000037e6 vpsllq $32, %ymm4, %ymm4 + 0xc5, 0xed, 0xf4, 0xc0, //0x000037eb vpmuludq %ymm0, %ymm2, %ymm0 + 0xc5, 0xfd, 0xd4, 0xc4, //0x000037ef vpaddq %ymm4, %ymm0, %ymm0 + 0xc5, 0xed, 0x73, 0xd3, 0x20, //0x000037f3 vpsrlq $32, %ymm3, %ymm2 + 0xc5, 0xed, 0xf4, 0xd0, //0x000037f8 vpmuludq %ymm0, %ymm2, %ymm2 + 0xc5, 0xdd, 0x73, 0xd0, 0x20, //0x000037fc vpsrlq $32, %ymm0, %ymm4 + 0xc5, 0xe5, 0xf4, 0xe4, //0x00003801 vpmuludq %ymm4, %ymm3, %ymm4 + 0xc5, 0xdd, 0xd4, 0xd2, //0x00003805 vpaddq %ymm2, %ymm4, %ymm2 + 0xc5, 0xed, 0x73, 0xf2, 0x20, //0x00003809 vpsllq $32, %ymm2, %ymm2 + 0xc5, 0xe5, 0xf4, 0xc0, //0x0000380e vpmuludq %ymm0, %ymm3, %ymm0 + 0xc5, 0xfd, 0xd4, 0xc2, //0x00003812 vpaddq %ymm2, %ymm0, %ymm0 + 0xc5, 0xed, 0x73, 0xd1, 0x20, //0x00003816 vpsrlq $32, %ymm1, %ymm2 + 0xc5, 0xed, 0xf4, 0xd0, //0x0000381b vpmuludq %ymm0, %ymm2, %ymm2 + 0xc5, 0xe5, 0x73, 0xd0, 0x20, //0x0000381f vpsrlq $32, %ymm0, %ymm3 + 0xc5, 0xf5, 0xf4, 0xdb, //0x00003824 vpmuludq %ymm3, %ymm1, %ymm3 + 0xc5, 0xe5, 0xd4, 0xd2, //0x00003828 vpaddq %ymm2, %ymm3, %ymm2 + 0xc5, 0xed, 0x73, 0xf2, 0x20, //0x0000382c vpsllq $32, %ymm2, %ymm2 + 0xc5, 0xf5, 0xf4, 0xc0, //0x00003831 vpmuludq %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd4, 0xc2, //0x00003835 vpaddq %ymm2, %ymm0, %ymm0 + 0xc4, 0xe3, 0x7d, 0x39, 0xc1, 0x01, //0x00003839 vextracti128 $1, %ymm0, %xmm1 + 0xc5, 0xe9, 0x73, 0xd0, 0x20, //0x0000383f vpsrlq $32, %xmm0, %xmm2 + 0xc5, 0xe9, 0xf4, 0xd1, //0x00003844 vpmuludq %xmm1, %xmm2, %xmm2 + 0xc5, 0xe1, 0x73, 0xd1, 0x20, //0x00003848 vpsrlq $32, %xmm1, %xmm3 + 0xc5, 0xf9, 0xf4, 0xdb, //0x0000384d vpmuludq %xmm3, %xmm0, %xmm3 + 0xc5, 0xe1, 0xd4, 0xd2, //0x00003851 vpaddq %xmm2, %xmm3, %xmm2 + 0xc5, 0xe9, 0x73, 0xf2, 0x20, //0x00003855 vpsllq $32, %xmm2, %xmm2 + 0xc5, 0xf9, 0xf4, 0xc1, //0x0000385a vpmuludq %xmm1, %xmm0, %xmm0 + 0xc5, 0xf9, 0xd4, 0xc2, //0x0000385e vpaddq %xmm2, %xmm0, %xmm0 + 0xc5, 0xf9, 0x70, 0xc8, 0x4e, //0x00003862 vpshufd $78, %xmm0, %xmm1 + 0xc5, 0xe9, 0x73, 0xd0, 0x20, //0x00003867 vpsrlq $32, %xmm0, %xmm2 + 0xc5, 0xe9, 0xf4, 0xd1, //0x0000386c vpmuludq %xmm1, %xmm2, %xmm2 + 0xc5, 0xe1, 0x73, 0xd8, 0x0c, //0x00003870 vpsrldq $12, %xmm0, %xmm3 + 0xc5, 0xf9, 0xf4, 0xdb, //0x00003875 vpmuludq %xmm3, %xmm0, %xmm3 + 0xc5, 0xe1, 0xd4, 0xd2, //0x00003879 vpaddq %xmm2, %xmm3, %xmm2 + 0xc5, 0xe9, 0x73, 0xf2, 0x20, //0x0000387d vpsllq $32, %xmm2, %xmm2 + 0xc5, 0xf9, 0xf4, 0xc1, //0x00003882 vpmuludq %xmm1, %xmm0, %xmm0 + 0xc5, 0xf9, 0xd4, 0xc2, //0x00003886 vpaddq %xmm2, %xmm0, %xmm0 + 0xc4, 0xc1, 0xf9, 0x7e, 0xc7, //0x0000388a vmovq %xmm0, %r15 + 0x45, 0x39, 0xc1, //0x0000388f cmpl %r8d, %r9d + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00003892 je LBB9_69 + 0x44, 0x01, 0xc2, //0x00003898 addl %r8d, %edx + //0x0000389b LBB9_67 + 0x89, 0xce, //0x0000389b movl %ecx, %esi + 0x29, 0xd6, //0x0000389d subl %edx, %esi + 0x90, //0x0000389f .p2align 4, 0x90 + //0x000038a0 LBB9_68 + 0x4d, 0x01, 0xff, //0x000038a0 addq %r15, %r15 + 0x4f, 0x8d, 0x3c, 0xbf, //0x000038a3 leaq (%r15,%r15,4), %r15 + 0xff, 0xce, //0x000038a7 decl %esi + 0x0f, 0x85, 0xf1, 0xff, 0xff, 0xff, //0x000038a9 jne LBB9_68 + //0x000038af LBB9_69 + 0x85, 0xc9, //0x000038af testl %ecx, %ecx + 0x0f, 0x88, 0x4d, 0x00, 0x00, 0x00, //0x000038b1 js LBB9_77 + 0x41, 0x8b, 0x44, 0x24, 0x10, //0x000038b7 movl $16(%r12), %eax + 0x39, 0xc8, //0x000038bc cmpl %ecx, %eax + 0x0f, 0x8e, 0x40, 0x00, 0x00, 0x00, //0x000038be jle LBB9_77 + 0x49, 0x8b, 0x34, 0x24, //0x000038c4 movq (%r12), %rsi + 0x8a, 0x14, 0x0e, //0x000038c8 movb (%rsi,%rcx), %dl + 0x41, 0x8d, 0x7a, 0x01, //0x000038cb leal $1(%r10), %edi + 0x39, 0xc7, //0x000038cf cmpl %eax, %edi + 0x0f, 0x85, 0xc4, 0x00, 0x00, 0x00, //0x000038d1 jne LBB9_78 + 0x80, 0xfa, 0x35, //0x000038d7 cmpb $53, %dl + 0x0f, 0x85, 0xbb, 0x00, 0x00, 0x00, //0x000038da jne LBB9_78 + 0x41, 0x83, 0x7c, 0x24, 0x1c, 0x00, //0x000038e0 cmpl $0, $28(%r12) + 0x0f, 0x95, 0xc2, //0x000038e6 setne %dl + 0x0f, 0x85, 0x17, 0x00, 0x00, 0x00, //0x000038e9 jne LBB9_79 + 0x85, 0xc9, //0x000038ef testl %ecx, %ecx + 0x0f, 0x8e, 0x0f, 0x00, 0x00, 0x00, //0x000038f1 jle LBB9_79 + 0x41, 0x8a, 0x54, 0x32, 0xff, //0x000038f7 movb $-1(%r10,%rsi), %dl + 0x80, 0xe2, 0x01, //0x000038fc andb $1, %dl + 0xe9, 0x02, 0x00, 0x00, 0x00, //0x000038ff jmp LBB9_79 + //0x00003904 LBB9_77 + 0x31, 0xd2, //0x00003904 xorl %edx, %edx + //0x00003906 LBB9_79 + 0x0f, 0xb6, 0xc2, //0x00003906 movzbl %dl, %eax + 0x49, 0x01, 0xc7, //0x00003909 addq %rax, %r15 + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, //0x0000390c movabsq $9007199254740992, %rax + 0x49, 0x39, 0xc7, //0x00003916 cmpq %rax, %r15 + 0x0f, 0x85, 0x25, 0x00, 0x00, 0x00, //0x00003919 jne LBB9_83 + 0x41, 0x81, 0xfe, 0xfe, 0x03, 0x00, 0x00, //0x0000391f cmpl $1022, %r14d + 0x0f, 0x8e, 0x12, 0x00, 0x00, 0x00, //0x00003926 jle LBB9_82 + //0x0000392c LBB9_81 + 0x45, 0x31, 0xff, //0x0000392c xorl %r15d, %r15d + 0x49, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, //0x0000392f movabsq $9218868437227405312, %r14 + 0xe9, 0x25, 0x00, 0x00, 0x00, //0x00003939 jmp LBB9_84 + //0x0000393e LBB9_82 + 0x41, 0xff, 0xc6, //0x0000393e incl %r14d + 0x49, 0x89, 0xdf, //0x00003941 movq %rbx, %r15 + //0x00003944 LBB9_83 + 0x4c, 0x89, 0xf8, //0x00003944 movq %r15, %rax + 0x48, 0x21, 0xd8, //0x00003947 andq %rbx, %rax + 0x41, 0x81, 0xc6, 0xff, 0x03, 0x00, 0x00, //0x0000394a addl $1023, %r14d + 0x41, 0x81, 0xe6, 0xff, 0x07, 0x00, 0x00, //0x00003951 andl $2047, %r14d + 0x49, 0xc1, 0xe6, 0x34, //0x00003958 shlq $52, %r14 + 0x48, 0x85, 0xc0, //0x0000395c testq %rax, %rax + 0x4c, 0x0f, 0x44, 0xf0, //0x0000395f cmoveq %rax, %r14 + //0x00003963 LBB9_84 + 0x48, 0xff, 0xcb, //0x00003963 decq %rbx + 0x4c, 0x21, 0xfb, //0x00003966 andq %r15, %rbx + 0x4c, 0x09, 0xf3, //0x00003969 orq %r14, %rbx + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x0000396c movabsq $-9223372036854775808, %rax + 0x48, 0x09, 0xd8, //0x00003976 orq %rbx, %rax + 0x41, 0x83, 0x7c, 0x24, 0x18, 0x00, //0x00003979 cmpl $0, $24(%r12) + 0x48, 0x0f, 0x44, 0xc3, //0x0000397f cmoveq %rbx, %rax + 0x49, 0x89, 0x45, 0x00, //0x00003983 movq %rax, (%r13) + 0x31, 0xc0, //0x00003987 xorl %eax, %eax + 0x48, 0x83, 0xc4, 0x08, //0x00003989 addq $8, %rsp + 0x5b, //0x0000398d popq %rbx + 0x41, 0x5c, //0x0000398e popq %r12 + 0x41, 0x5d, //0x00003990 popq %r13 + 0x41, 0x5e, //0x00003992 popq %r14 + 0x41, 0x5f, //0x00003994 popq %r15 + 0x5d, //0x00003996 popq %rbp + 0xc5, 0xf8, 0x77, //0x00003997 vzeroupper + 0xc3, //0x0000399a retq + //0x0000399b LBB9_78 + 0x80, 0xfa, 0x34, //0x0000399b cmpb $52, %dl + 0x0f, 0x9f, 0xc2, //0x0000399e setg %dl + 0xe9, 0x60, 0xff, 0xff, 0xff, //0x000039a1 jmp LBB9_79 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000039a6 .p2align 4, 0x90 + //0x000039b0 _atof_native + 0x55, //0x000039b0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000039b1 movq %rsp, %rbp + 0x48, 0x83, 0xec, 0x30, //0x000039b4 subq $48, %rsp + 0x48, 0xc7, 0x45, 0xd8, 0x00, 0x00, 0x00, 0x00, //0x000039b8 movq $0, $-40(%rbp) + 0x48, 0x89, 0x55, 0xe0, //0x000039c0 movq %rdx, $-32(%rbp) + 0x48, 0x89, 0x4d, 0xe8, //0x000039c4 movq %rcx, $-24(%rbp) + 0x48, 0x85, 0xc9, //0x000039c8 testq %rcx, %rcx + 0x0f, 0x84, 0x44, 0x00, 0x00, 0x00, //0x000039cb je LBB10_5 + 0xc6, 0x02, 0x00, //0x000039d1 movb $0, (%rdx) + 0x48, 0x83, 0xf9, 0x01, //0x000039d4 cmpq $1, %rcx + 0x0f, 0x84, 0x37, 0x00, 0x00, 0x00, //0x000039d8 je LBB10_5 + 0xc6, 0x42, 0x01, 0x00, //0x000039de movb $0, $1(%rdx) + 0x48, 0x83, 0x7d, 0xe8, 0x03, //0x000039e2 cmpq $3, $-24(%rbp) + 0x0f, 0x82, 0x28, 0x00, 0x00, 0x00, //0x000039e7 jb LBB10_5 + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000039ed movl $2, %eax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000039f2 .p2align 4, 0x90 + //0x00003a00 LBB10_4 + 0x48, 0x8b, 0x4d, 0xe0, //0x00003a00 movq $-32(%rbp), %rcx + 0xc6, 0x04, 0x01, 0x00, //0x00003a04 movb $0, (%rcx,%rax) + 0x48, 0xff, 0xc0, //0x00003a08 incq %rax + 0x48, 0x39, 0x45, 0xe8, //0x00003a0b cmpq %rax, $-24(%rbp) + 0x0f, 0x87, 0xeb, 0xff, 0xff, 0xff, //0x00003a0f ja LBB10_4 + //0x00003a15 LBB10_5 + 0xc5, 0xf8, 0x57, 0xc0, //0x00003a15 vxorps %xmm0, %xmm0, %xmm0 + 0xc5, 0xf8, 0x11, 0x45, 0xf0, //0x00003a19 vmovups %xmm0, $-16(%rbp) + 0x80, 0x3f, 0x2d, //0x00003a1e cmpb $45, (%rdi) + 0x0f, 0x85, 0x21, 0x00, 0x00, 0x00, //0x00003a21 jne LBB10_6 + 0xc7, 0x45, 0xf8, 0x01, 0x00, 0x00, 0x00, //0x00003a27 movl $1, $-8(%rbp) + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00003a2e movl $1, %eax + 0x48, 0x39, 0xf0, //0x00003a33 cmpq %rsi, %rax + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x00003a36 jl LBB10_9 + //0x00003a3c LBB10_41 + 0xc7, 0x45, 0xf4, 0x00, 0x00, 0x00, 0x00, //0x00003a3c movl $0, $-12(%rbp) + 0xe9, 0xa1, 0x01, 0x00, 0x00, //0x00003a43 jmp LBB10_40 + //0x00003a48 LBB10_6 + 0x31, 0xc0, //0x00003a48 xorl %eax, %eax + 0x48, 0x39, 0xf0, //0x00003a4a cmpq %rsi, %rax + 0x0f, 0x8d, 0xe9, 0xff, 0xff, 0xff, //0x00003a4d jge LBB10_41 + //0x00003a53 LBB10_9 + 0x41, 0xb3, 0x01, //0x00003a53 movb $1, %r11b + 0x45, 0x31, 0xc9, //0x00003a56 xorl %r9d, %r9d + 0x45, 0x31, 0xd2, //0x00003a59 xorl %r10d, %r10d + 0x45, 0x31, 0xc0, //0x00003a5c xorl %r8d, %r8d + 0xe9, 0x25, 0x00, 0x00, 0x00, //0x00003a5f jmp LBB10_10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003a64 .p2align 4, 0x90 + //0x00003a70 LBB10_13 + 0xff, 0x4d, 0xf4, //0x00003a70 decl $-12(%rbp) + 0x45, 0x31, 0xd2, //0x00003a73 xorl %r10d, %r10d + //0x00003a76 LBB10_22 + 0x48, 0xff, 0xc0, //0x00003a76 incq %rax + 0x48, 0x39, 0xf0, //0x00003a79 cmpq %rsi, %rax + 0x41, 0x0f, 0x9c, 0xc3, //0x00003a7c setl %r11b + 0x48, 0x39, 0xc6, //0x00003a80 cmpq %rax, %rsi + 0x0f, 0x84, 0x8f, 0x00, 0x00, 0x00, //0x00003a83 je LBB10_23 + //0x00003a89 LBB10_10 + 0x0f, 0xb6, 0x0c, 0x07, //0x00003a89 movzbl (%rdi,%rax), %ecx + 0x8d, 0x51, 0xd0, //0x00003a8d leal $-48(%rcx), %edx + 0x80, 0xfa, 0x09, //0x00003a90 cmpb $9, %dl + 0x0f, 0x87, 0x47, 0x00, 0x00, 0x00, //0x00003a93 ja LBB10_19 + 0x45, 0x85, 0xd2, //0x00003a99 testl %r10d, %r10d + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00003a9c jne LBB10_14 + 0x80, 0xf9, 0x30, //0x00003aa2 cmpb $48, %cl + 0x0f, 0x84, 0xc5, 0xff, 0xff, 0xff, //0x00003aa5 je LBB10_13 + //0x00003aab LBB10_14 + 0x4d, 0x63, 0xd1, //0x00003aab movslq %r9d, %r10 + 0x4c, 0x39, 0x55, 0xe8, //0x00003aae cmpq %r10, $-24(%rbp) + 0x0f, 0x86, 0x40, 0x00, 0x00, 0x00, //0x00003ab2 jbe LBB10_16 + 0x48, 0x8b, 0x55, 0xe0, //0x00003ab8 movq $-32(%rbp), %rdx + 0x42, 0x88, 0x0c, 0x12, //0x00003abc movb %cl, (%rdx,%r10) + 0x44, 0x8b, 0x4d, 0xf0, //0x00003ac0 movl $-16(%rbp), %r9d + 0x41, 0xff, 0xc1, //0x00003ac4 incl %r9d + 0x44, 0x89, 0x4d, 0xf0, //0x00003ac7 movl %r9d, $-16(%rbp) + 0x45, 0x89, 0xca, //0x00003acb movl %r9d, %r10d + 0xe9, 0xa3, 0xff, 0xff, 0xff, //0x00003ace jmp LBB10_22 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003ad3 .p2align 4, 0x90 + //0x00003ae0 LBB10_19 + 0x80, 0xf9, 0x2e, //0x00003ae0 cmpb $46, %cl + 0x0f, 0x85, 0x80, 0x00, 0x00, 0x00, //0x00003ae3 jne LBB10_20 + 0x44, 0x89, 0x55, 0xf4, //0x00003ae9 movl %r10d, $-12(%rbp) + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00003aed movl $1, %r8d + 0xe9, 0x7e, 0xff, 0xff, 0xff, //0x00003af3 jmp LBB10_22 + //0x00003af8 LBB10_16 + 0x80, 0xf9, 0x30, //0x00003af8 cmpb $48, %cl + 0x0f, 0x85, 0x08, 0x00, 0x00, 0x00, //0x00003afb jne LBB10_18 + 0x45, 0x89, 0xca, //0x00003b01 movl %r9d, %r10d + 0xe9, 0x6d, 0xff, 0xff, 0xff, //0x00003b04 jmp LBB10_22 + //0x00003b09 LBB10_18 + 0xc7, 0x45, 0xfc, 0x01, 0x00, 0x00, 0x00, //0x00003b09 movl $1, $-4(%rbp) + 0x45, 0x89, 0xca, //0x00003b10 movl %r9d, %r10d + 0xe9, 0x5e, 0xff, 0xff, 0xff, //0x00003b13 jmp LBB10_22 + //0x00003b18 LBB10_23 + 0x89, 0xf1, //0x00003b18 movl %esi, %ecx + 0x48, 0x89, 0xf0, //0x00003b1a movq %rsi, %rax + 0x45, 0x85, 0xc0, //0x00003b1d testl %r8d, %r8d + 0x0f, 0x85, 0x04, 0x00, 0x00, 0x00, //0x00003b20 jne LBB10_26 + //0x00003b26 LBB10_25 + 0x44, 0x89, 0x4d, 0xf4, //0x00003b26 movl %r9d, $-12(%rbp) + //0x00003b2a LBB10_26 + 0x41, 0xf6, 0xc3, 0x01, //0x00003b2a testb $1, %r11b + 0x0f, 0x84, 0xb5, 0x00, 0x00, 0x00, //0x00003b2e je LBB10_40 + 0x8a, 0x0c, 0x0f, //0x00003b34 movb (%rdi,%rcx), %cl + 0x80, 0xc9, 0x20, //0x00003b37 orb $32, %cl + 0x80, 0xf9, 0x65, //0x00003b3a cmpb $101, %cl + 0x0f, 0x85, 0xa6, 0x00, 0x00, 0x00, //0x00003b3d jne LBB10_40 + 0x89, 0xc2, //0x00003b43 movl %eax, %edx + 0x8a, 0x4c, 0x17, 0x01, //0x00003b45 movb $1(%rdi,%rdx), %cl + 0x80, 0xf9, 0x2d, //0x00003b49 cmpb $45, %cl + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00003b4c je LBB10_32 + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00003b52 movl $1, %r8d + 0x80, 0xf9, 0x2b, //0x00003b58 cmpb $43, %cl + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00003b5b jne LBB10_30 + 0x83, 0xc0, 0x02, //0x00003b61 addl $2, %eax + 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x00003b64 jmp LBB10_33 + //0x00003b69 LBB10_20 + 0x48, 0x89, 0xc1, //0x00003b69 movq %rax, %rcx + 0x45, 0x85, 0xc0, //0x00003b6c testl %r8d, %r8d + 0x0f, 0x85, 0xb5, 0xff, 0xff, 0xff, //0x00003b6f jne LBB10_26 + 0xe9, 0xac, 0xff, 0xff, 0xff, //0x00003b75 jmp LBB10_25 + //0x00003b7a LBB10_32 + 0x83, 0xc0, 0x02, //0x00003b7a addl $2, %eax + 0x41, 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00003b7d movl $-1, %r8d + //0x00003b83 LBB10_33 + 0x89, 0xc2, //0x00003b83 movl %eax, %edx + 0x48, 0x63, 0xd2, //0x00003b85 movslq %edx, %rdx + 0x45, 0x31, 0xc9, //0x00003b88 xorl %r9d, %r9d + 0x48, 0x39, 0xf2, //0x00003b8b cmpq %rsi, %rdx + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x00003b8e jl LBB10_35 + 0xe9, 0x48, 0x00, 0x00, 0x00, //0x00003b94 jmp LBB10_39 + //0x00003b99 LBB10_30 + 0x48, 0xff, 0xc2, //0x00003b99 incq %rdx + 0x48, 0x63, 0xd2, //0x00003b9c movslq %edx, %rdx + 0x45, 0x31, 0xc9, //0x00003b9f xorl %r9d, %r9d + 0x48, 0x39, 0xf2, //0x00003ba2 cmpq %rsi, %rdx + 0x0f, 0x8d, 0x36, 0x00, 0x00, 0x00, //0x00003ba5 jge LBB10_39 + //0x00003bab LBB10_35 + 0x45, 0x31, 0xc9, //0x00003bab xorl %r9d, %r9d + 0x90, 0x90, //0x00003bae .p2align 4, 0x90 + //0x00003bb0 LBB10_36 + 0x41, 0x81, 0xf9, 0x0f, 0x27, 0x00, 0x00, //0x00003bb0 cmpl $9999, %r9d + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003bb7 jg LBB10_39 + 0x0f, 0xb6, 0x0c, 0x17, //0x00003bbd movzbl (%rdi,%rdx), %ecx + 0x8d, 0x41, 0xd0, //0x00003bc1 leal $-48(%rcx), %eax + 0x3c, 0x09, //0x00003bc4 cmpb $9, %al + 0x0f, 0x87, 0x15, 0x00, 0x00, 0x00, //0x00003bc6 ja LBB10_39 + 0x43, 0x8d, 0x04, 0x89, //0x00003bcc leal (%r9,%r9,4), %eax + 0x44, 0x8d, 0x4c, 0x41, 0xd0, //0x00003bd0 leal $-48(%rcx,%rax,2), %r9d + 0x48, 0xff, 0xc2, //0x00003bd5 incq %rdx + 0x48, 0x39, 0xd6, //0x00003bd8 cmpq %rdx, %rsi + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00003bdb jne LBB10_36 + //0x00003be1 LBB10_39 + 0x45, 0x0f, 0xaf, 0xc8, //0x00003be1 imull %r8d, %r9d + 0x44, 0x01, 0x4d, 0xf4, //0x00003be5 addl %r9d, $-12(%rbp) + //0x00003be9 LBB10_40 + 0x48, 0x8d, 0x7d, 0xe0, //0x00003be9 leaq $-32(%rbp), %rdi + 0x48, 0x8d, 0x75, 0xd8, //0x00003bed leaq $-40(%rbp), %rsi + 0xe8, 0x0a, 0xf7, 0xff, 0xff, //0x00003bf1 callq _decimal_to_f64 + 0xc5, 0xfb, 0x10, 0x45, 0xd8, //0x00003bf6 vmovsd $-40(%rbp), %xmm0 + 0x48, 0x83, 0xc4, 0x30, //0x00003bfb addq $48, %rsp + 0x5d, //0x00003bff popq %rbp + 0xc3, //0x00003c00 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003c01 .p2align 4, 0x90 + //0x00003c10 _value + 0x55, //0x00003c10 pushq %rbp + 0x48, 0x89, 0xe5, //0x00003c11 movq %rsp, %rbp + 0x41, 0x57, //0x00003c14 pushq %r15 + 0x41, 0x56, //0x00003c16 pushq %r14 + 0x41, 0x55, //0x00003c18 pushq %r13 + 0x41, 0x54, //0x00003c1a pushq %r12 + 0x53, //0x00003c1c pushq %rbx + 0x48, 0x83, 0xec, 0x28, //0x00003c1d subq $40, %rsp + 0x4d, 0x89, 0xc4, //0x00003c21 movq %r8, %r12 + 0x49, 0x89, 0xce, //0x00003c24 movq %rcx, %r14 + 0x48, 0x89, 0xf3, //0x00003c27 movq %rsi, %rbx + 0x49, 0x89, 0xff, //0x00003c2a movq %rdi, %r15 + 0x48, 0x89, 0x55, 0xd0, //0x00003c2d movq %rdx, $-48(%rbp) + 0x48, 0x89, 0x7d, 0xb0, //0x00003c31 movq %rdi, $-80(%rbp) + 0x48, 0x89, 0x75, 0xb8, //0x00003c35 movq %rsi, $-72(%rbp) + 0x48, 0x8d, 0x55, 0xd0, //0x00003c39 leaq $-48(%rbp), %rdx + 0xe8, 0xde, 0x05, 0x00, 0x00, //0x00003c3d callq _advance_ns + 0x0f, 0xbe, 0xc0, //0x00003c42 movsbl %al, %eax + 0x83, 0xf8, 0x7d, //0x00003c45 cmpl $125, %eax + 0x0f, 0x87, 0xc3, 0x00, 0x00, 0x00, //0x00003c48 ja LBB11_11 + 0x48, 0x8d, 0x0d, 0xa7, 0x03, 0x00, 0x00, //0x00003c4e leaq $935(%rip), %rcx /* LJTI11_0+0(%rip) */ + 0x48, 0x63, 0x04, 0x81, //0x00003c55 movslq (%rcx,%rax,4), %rax + 0x48, 0x01, 0xc8, //0x00003c59 addq %rcx, %rax + 0xff, 0xe0, //0x00003c5c jmpq *%rax + //0x00003c5e LBB11_2 + 0x4c, 0x89, 0x75, 0xc8, //0x00003c5e movq %r14, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00003c62 movq $-48(%rbp), %r14 + 0x4d, 0x8d, 0x6e, 0xff, //0x00003c66 leaq $-1(%r14), %r13 + 0x4c, 0x89, 0x6d, 0xd0, //0x00003c6a movq %r13, $-48(%rbp) + 0x41, 0xf6, 0xc4, 0x02, //0x00003c6e testb $2, %r12b + 0x0f, 0x85, 0x1a, 0x00, 0x00, 0x00, //0x00003c72 jne LBB11_4 + 0x48, 0x8d, 0x7d, 0xb0, //0x00003c78 leaq $-80(%rbp), %rdi + 0x48, 0x8d, 0x75, 0xd0, //0x00003c7c leaq $-48(%rbp), %rsi + 0x48, 0x8b, 0x55, 0xc8, //0x00003c80 movq $-56(%rbp), %rdx + 0xe8, 0xe7, 0x0c, 0x00, 0x00, //0x00003c84 callq _vnumber + 0x48, 0x8b, 0x5d, 0xd0, //0x00003c89 movq $-48(%rbp), %rbx + 0xe9, 0x57, 0x03, 0x00, 0x00, //0x00003c8d jmp LBB11_59 + //0x00003c92 LBB11_4 + 0x31, 0xc0, //0x00003c92 xorl %eax, %eax + 0x43, 0x80, 0x3c, 0x2f, 0x2d, //0x00003c94 cmpb $45, (%r15,%r13) + 0x4f, 0x8d, 0x24, 0x2f, //0x00003c99 leaq (%r15,%r13), %r12 + 0x0f, 0x94, 0xc0, //0x00003c9d sete %al + 0x49, 0x01, 0xc4, //0x00003ca0 addq %rax, %r12 + 0x48, 0x29, 0xc3, //0x00003ca3 subq %rax, %rbx + 0x0f, 0x84, 0x0c, 0x03, 0x00, 0x00, //0x00003ca6 je LBB11_54 + 0x49, 0x39, 0xdd, //0x00003cac cmpq %rbx, %r13 + 0x0f, 0x83, 0x0e, 0x00, 0x00, 0x00, //0x00003caf jae LBB11_7 + 0x41, 0x8a, 0x04, 0x24, //0x00003cb5 movb (%r12), %al + 0x04, 0xd0, //0x00003cb9 addb $-48, %al + 0x3c, 0x0a, //0x00003cbb cmpb $10, %al + 0x0f, 0x83, 0x0e, 0x03, 0x00, 0x00, //0x00003cbd jae LBB11_56 + //0x00003cc3 LBB11_7 + 0x4c, 0x89, 0xe7, //0x00003cc3 movq %r12, %rdi + 0x48, 0x89, 0xde, //0x00003cc6 movq %rbx, %rsi + 0xe8, 0xc2, 0x1f, 0x00, 0x00, //0x00003cc9 callq _do_skip_number + 0x48, 0x85, 0xc0, //0x00003cce testq %rax, %rax + 0x0f, 0x88, 0xf4, 0x02, 0x00, 0x00, //0x00003cd1 js LBB11_55 + 0x49, 0x01, 0xc4, //0x00003cd7 addq %rax, %r12 + 0x4c, 0x89, 0xe3, //0x00003cda movq %r12, %rbx + 0x4c, 0x29, 0xfb, //0x00003cdd subq %r15, %rbx + 0x48, 0x89, 0x5d, 0xd0, //0x00003ce0 movq %rbx, $-48(%rbp) + 0x4d, 0x85, 0xf6, //0x00003ce4 testq %r14, %r14 + 0x0f, 0x8e, 0xf5, 0x02, 0x00, 0x00, //0x00003ce7 jle LBB11_58 + 0x48, 0x8b, 0x45, 0xc8, //0x00003ced movq $-56(%rbp), %rax + 0x48, 0xc7, 0x00, 0x08, 0x00, 0x00, 0x00, //0x00003cf1 movq $8, (%rax) + 0x4c, 0x89, 0x68, 0x18, //0x00003cf8 movq %r13, $24(%rax) + 0xe9, 0xe8, 0x02, 0x00, 0x00, //0x00003cfc jmp LBB11_59 + //0x00003d01 LBB11_10 + 0x49, 0xc7, 0x06, 0x01, 0x00, 0x00, 0x00, //0x00003d01 movq $1, (%r14) + 0x48, 0x8b, 0x5d, 0xd0, //0x00003d08 movq $-48(%rbp), %rbx + 0xe9, 0xd8, 0x02, 0x00, 0x00, //0x00003d0c jmp LBB11_59 + //0x00003d11 LBB11_11 + 0x49, 0xc7, 0x06, 0xfe, 0xff, 0xff, 0xff, //0x00003d11 movq $-2, (%r14) + 0x48, 0x8b, 0x5d, 0xd0, //0x00003d18 movq $-48(%rbp), %rbx + 0x48, 0xff, 0xcb, //0x00003d1c decq %rbx + 0xe9, 0xc5, 0x02, 0x00, 0x00, //0x00003d1f jmp LBB11_59 + //0x00003d24 LBB11_12 + 0x48, 0xc7, 0x45, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003d24 movq $-1, $-64(%rbp) + 0x4c, 0x8b, 0x7d, 0xd0, //0x00003d2c movq $-48(%rbp), %r15 + 0x48, 0x8d, 0x7d, 0xb0, //0x00003d30 leaq $-80(%rbp), %rdi + 0x48, 0x8d, 0x55, 0xc0, //0x00003d34 leaq $-64(%rbp), %rdx + 0x4c, 0x89, 0xfe, //0x00003d38 movq %r15, %rsi + 0x4c, 0x89, 0xe1, //0x00003d3b movq %r12, %rcx + 0xe8, 0xbd, 0x07, 0x00, 0x00, //0x00003d3e callq _advance_string + 0x48, 0x85, 0xc0, //0x00003d43 testq %rax, %rax + 0x0f, 0x88, 0x60, 0x02, 0x00, 0x00, //0x00003d46 js LBB11_48 + 0x48, 0x89, 0x45, 0xd0, //0x00003d4c movq %rax, $-48(%rbp) + 0x4d, 0x89, 0x7e, 0x10, //0x00003d50 movq %r15, $16(%r14) + 0x48, 0x8b, 0x4d, 0xc0, //0x00003d54 movq $-64(%rbp), %rcx + 0x48, 0x39, 0xc1, //0x00003d58 cmpq %rax, %rcx + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00003d5b movq $-1, %rdx + 0x48, 0x0f, 0x4c, 0xd1, //0x00003d62 cmovlq %rcx, %rdx + 0x49, 0x89, 0x56, 0x18, //0x00003d66 movq %rdx, $24(%r14) + 0xb9, 0x07, 0x00, 0x00, 0x00, //0x00003d6a movl $7, %ecx + 0x49, 0x89, 0x0e, //0x00003d6f movq %rcx, (%r14) + 0x48, 0x89, 0xc3, //0x00003d72 movq %rax, %rbx + 0xe9, 0x6f, 0x02, 0x00, 0x00, //0x00003d75 jmp LBB11_59 + //0x00003d7a LBB11_14 + 0x31, 0xc0, //0x00003d7a xorl %eax, %eax + 0x45, 0x85, 0xe4, //0x00003d7c testl %r12d, %r12d + 0xb9, 0x0b, 0x00, 0x00, 0x00, //0x00003d7f movl $11, %ecx + 0xe9, 0xc4, 0x00, 0x00, 0x00, //0x00003d84 jmp LBB11_27 + //0x00003d89 LBB11_15 + 0x31, 0xc0, //0x00003d89 xorl %eax, %eax + 0x45, 0x85, 0xe4, //0x00003d8b testl %r12d, %r12d + 0xb9, 0x0a, 0x00, 0x00, 0x00, //0x00003d8e movl $10, %ecx + 0xe9, 0xb5, 0x00, 0x00, 0x00, //0x00003d93 jmp LBB11_27 + //0x00003d98 LBB11_16 + 0x49, 0xc7, 0x06, 0x05, 0x00, 0x00, 0x00, //0x00003d98 movq $5, (%r14) + 0x48, 0x8b, 0x5d, 0xd0, //0x00003d9f movq $-48(%rbp), %rbx + 0xe9, 0x41, 0x02, 0x00, 0x00, //0x00003da3 jmp LBB11_59 + //0x00003da8 LBB11_17 + 0x31, 0xc0, //0x00003da8 xorl %eax, %eax + 0x45, 0x85, 0xe4, //0x00003daa testl %r12d, %r12d + 0xb9, 0x0c, 0x00, 0x00, 0x00, //0x00003dad movl $12, %ecx + 0xe9, 0x96, 0x00, 0x00, 0x00, //0x00003db2 jmp LBB11_27 + //0x00003db7 LBB11_18 + 0x48, 0x8b, 0x4d, 0xd0, //0x00003db7 movq $-48(%rbp), %rcx + 0x48, 0x8d, 0x43, 0xfc, //0x00003dbb leaq $-4(%rbx), %rax + 0x48, 0x39, 0xc1, //0x00003dbf cmpq %rax, %rcx + 0x0f, 0x86, 0xa2, 0x00, 0x00, 0x00, //0x00003dc2 jbe LBB11_28 + 0x48, 0x89, 0x5d, 0xd0, //0x00003dc8 movq %rbx, $-48(%rbp) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003dcc movq $-1, %rax + 0x49, 0x89, 0x06, //0x00003dd3 movq %rax, (%r14) + 0xe9, 0x0e, 0x02, 0x00, 0x00, //0x00003dd6 jmp LBB11_59 + //0x00003ddb LBB11_20 + 0x48, 0x8b, 0x45, 0xd0, //0x00003ddb movq $-48(%rbp), %rax + 0x48, 0x8d, 0x4b, 0xfd, //0x00003ddf leaq $-3(%rbx), %rcx + 0x48, 0x39, 0xc8, //0x00003de3 cmpq %rcx, %rax + 0x0f, 0x87, 0x34, 0x00, 0x00, 0x00, //0x00003de6 ja LBB11_21 + 0x41, 0x8b, 0x54, 0x07, 0xff, //0x00003dec movl $-1(%r15,%rax), %edx + 0x81, 0xfa, 0x6e, 0x75, 0x6c, 0x6c, //0x00003df1 cmpl $1819047278, %edx + 0x0f, 0x85, 0xb8, 0x00, 0x00, 0x00, //0x00003df7 jne LBB11_36 + 0x48, 0x83, 0xc0, 0x03, //0x00003dfd addq $3, %rax + 0x48, 0x89, 0x45, 0xd0, //0x00003e01 movq %rax, $-48(%rbp) + 0xb9, 0x02, 0x00, 0x00, 0x00, //0x00003e05 movl $2, %ecx + 0xe9, 0x8b, 0x01, 0x00, 0x00, //0x00003e0a jmp LBB11_51 + //0x00003e0f LBB11_22 + 0x48, 0x8b, 0x45, 0xd0, //0x00003e0f movq $-48(%rbp), %rax + 0x48, 0x8d, 0x4b, 0xfd, //0x00003e13 leaq $-3(%rbx), %rcx + 0x48, 0x39, 0xc8, //0x00003e17 cmpq %rcx, %rax + 0x0f, 0x86, 0x72, 0x00, 0x00, 0x00, //0x00003e1a jbe LBB11_23 + //0x00003e20 LBB11_21 + 0x48, 0x89, 0x5d, 0xd0, //0x00003e20 movq %rbx, $-48(%rbp) + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003e24 movq $-1, %rcx + 0x49, 0x89, 0x0e, //0x00003e2b movq %rcx, (%r14) + 0xe9, 0xb6, 0x01, 0x00, 0x00, //0x00003e2e jmp LBB11_59 + //0x00003e33 LBB11_25 + 0x49, 0xc7, 0x06, 0x06, 0x00, 0x00, 0x00, //0x00003e33 movq $6, (%r14) + 0x48, 0x8b, 0x5d, 0xd0, //0x00003e3a movq $-48(%rbp), %rbx + 0xe9, 0xa6, 0x01, 0x00, 0x00, //0x00003e3e jmp LBB11_59 + //0x00003e43 LBB11_26 + 0x31, 0xc0, //0x00003e43 xorl %eax, %eax + 0x45, 0x85, 0xe4, //0x00003e45 testl %r12d, %r12d + 0xb9, 0x0d, 0x00, 0x00, 0x00, //0x00003e48 movl $13, %ecx + //0x00003e4d LBB11_27 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003e4d movq $-2, %rdx + 0x48, 0x0f, 0x48, 0xd1, //0x00003e54 cmovsq %rcx, %rdx + 0x0f, 0x99, 0xc0, //0x00003e58 setns %al + 0x49, 0x89, 0x16, //0x00003e5b movq %rdx, (%r14) + 0x48, 0x8b, 0x5d, 0xd0, //0x00003e5e movq $-48(%rbp), %rbx + 0x48, 0x29, 0xc3, //0x00003e62 subq %rax, %rbx + 0xe9, 0x7f, 0x01, 0x00, 0x00, //0x00003e65 jmp LBB11_59 + //0x00003e6a LBB11_28 + 0x41, 0x8b, 0x14, 0x0f, //0x00003e6a movl (%r15,%rcx), %edx + 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x00003e6e cmpl $1702063201, %edx + 0x0f, 0x85, 0x81, 0x00, 0x00, 0x00, //0x00003e74 jne LBB11_32 + 0x48, 0x83, 0xc1, 0x04, //0x00003e7a addq $4, %rcx + 0x48, 0x89, 0x4d, 0xd0, //0x00003e7e movq %rcx, $-48(%rbp) + 0xb8, 0x04, 0x00, 0x00, 0x00, //0x00003e82 movl $4, %eax + 0x48, 0x89, 0xcb, //0x00003e87 movq %rcx, %rbx + 0x49, 0x89, 0x06, //0x00003e8a movq %rax, (%r14) + 0xe9, 0x57, 0x01, 0x00, 0x00, //0x00003e8d jmp LBB11_59 + //0x00003e92 LBB11_23 + 0x41, 0x8b, 0x54, 0x07, 0xff, //0x00003e92 movl $-1(%r15,%rax), %edx + 0x81, 0xfa, 0x74, 0x72, 0x75, 0x65, //0x00003e97 cmpl $1702195828, %edx + 0x0f, 0x85, 0x97, 0x00, 0x00, 0x00, //0x00003e9d jne LBB11_40 + 0x48, 0x83, 0xc0, 0x03, //0x00003ea3 addq $3, %rax + 0x48, 0x89, 0x45, 0xd0, //0x00003ea7 movq %rax, $-48(%rbp) + 0xb9, 0x03, 0x00, 0x00, 0x00, //0x00003eab movl $3, %ecx + 0xe9, 0xe5, 0x00, 0x00, 0x00, //0x00003eb0 jmp LBB11_51 + //0x00003eb5 LBB11_36 + 0x48, 0x8d, 0x58, 0xff, //0x00003eb5 leaq $-1(%rax), %rbx + 0x48, 0x89, 0x5d, 0xd0, //0x00003eb9 movq %rbx, $-48(%rbp) + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003ebd movq $-2, %rcx + 0x80, 0xfa, 0x6e, //0x00003ec4 cmpb $110, %dl + 0x0f, 0x85, 0xd0, 0x00, 0x00, 0x00, //0x00003ec7 jne LBB11_52 + 0x41, 0x80, 0x3c, 0x07, 0x75, //0x00003ecd cmpb $117, (%r15,%rax) + 0x0f, 0x85, 0xbe, 0x00, 0x00, 0x00, //0x00003ed2 jne LBB11_50 + 0x41, 0x80, 0x7c, 0x07, 0x01, 0x6c, //0x00003ed8 cmpb $108, $1(%r15,%rax) + 0x0f, 0x85, 0xaf, 0x00, 0x00, 0x00, //0x00003ede jne LBB11_49 + 0x41, 0x80, 0x7c, 0x07, 0x02, 0x6c, //0x00003ee4 cmpb $108, $2(%r15,%rax) + 0x48, 0x8d, 0x50, 0x03, //0x00003eea leaq $3(%rax), %rdx + 0x48, 0x8d, 0x40, 0x02, //0x00003eee leaq $2(%rax), %rax + 0x48, 0x0f, 0x44, 0xc2, //0x00003ef2 cmoveq %rdx, %rax + 0xe9, 0x9b, 0x00, 0x00, 0x00, //0x00003ef6 jmp LBB11_50 + //0x00003efb LBB11_32 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003efb movq $-2, %rax + 0x80, 0xfa, 0x61, //0x00003f02 cmpb $97, %dl + 0x0f, 0x85, 0x75, 0x00, 0x00, 0x00, //0x00003f05 jne LBB11_44 + 0x41, 0x80, 0x7c, 0x0f, 0x01, 0x6c, //0x00003f0b cmpb $108, $1(%r15,%rcx) + 0x0f, 0x85, 0x74, 0x00, 0x00, 0x00, //0x00003f11 jne LBB11_45 + 0x41, 0x80, 0x7c, 0x0f, 0x02, 0x73, //0x00003f17 cmpb $115, $2(%r15,%rcx) + 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, //0x00003f1d jne LBB11_46 + 0x41, 0x80, 0x7c, 0x0f, 0x03, 0x65, //0x00003f23 cmpb $101, $3(%r15,%rcx) + 0x48, 0x8d, 0x51, 0x04, //0x00003f29 leaq $4(%rcx), %rdx + 0x48, 0x8d, 0x59, 0x03, //0x00003f2d leaq $3(%rcx), %rbx + 0x48, 0x0f, 0x44, 0xda, //0x00003f31 cmoveq %rdx, %rbx + 0xe9, 0x72, 0x00, 0x00, 0x00, //0x00003f35 jmp LBB11_48 + //0x00003f3a LBB11_40 + 0x48, 0x8d, 0x58, 0xff, //0x00003f3a leaq $-1(%rax), %rbx + 0x48, 0x89, 0x5d, 0xd0, //0x00003f3e movq %rbx, $-48(%rbp) + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003f42 movq $-2, %rcx + 0x80, 0xfa, 0x74, //0x00003f49 cmpb $116, %dl + 0x0f, 0x85, 0x4b, 0x00, 0x00, 0x00, //0x00003f4c jne LBB11_52 + 0x41, 0x80, 0x3c, 0x07, 0x72, //0x00003f52 cmpb $114, (%r15,%rax) + 0x0f, 0x85, 0x39, 0x00, 0x00, 0x00, //0x00003f57 jne LBB11_50 + 0x41, 0x80, 0x7c, 0x07, 0x01, 0x75, //0x00003f5d cmpb $117, $1(%r15,%rax) + 0x0f, 0x85, 0x2a, 0x00, 0x00, 0x00, //0x00003f63 jne LBB11_49 + 0x41, 0x80, 0x7c, 0x07, 0x02, 0x65, //0x00003f69 cmpb $101, $2(%r15,%rax) + 0x48, 0x8d, 0x50, 0x03, //0x00003f6f leaq $3(%rax), %rdx + 0x48, 0x8d, 0x40, 0x02, //0x00003f73 leaq $2(%rax), %rax + 0x48, 0x0f, 0x44, 0xc2, //0x00003f77 cmoveq %rdx, %rax + 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00003f7b jmp LBB11_50 + //0x00003f80 LBB11_44 + 0x48, 0x89, 0xcb, //0x00003f80 movq %rcx, %rbx + 0x49, 0x89, 0x06, //0x00003f83 movq %rax, (%r14) + 0xe9, 0x5e, 0x00, 0x00, 0x00, //0x00003f86 jmp LBB11_59 + //0x00003f8b LBB11_45 + 0x48, 0xff, 0xc1, //0x00003f8b incq %rcx + 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00003f8e jmp LBB11_47 + //0x00003f93 LBB11_49 + 0x48, 0xff, 0xc0, //0x00003f93 incq %rax + //0x00003f96 LBB11_50 + 0x48, 0x89, 0x45, 0xd0, //0x00003f96 movq %rax, $-48(%rbp) + //0x00003f9a LBB11_51 + 0x48, 0x89, 0xc3, //0x00003f9a movq %rax, %rbx + //0x00003f9d LBB11_52 + 0x49, 0x89, 0x0e, //0x00003f9d movq %rcx, (%r14) + 0xe9, 0x44, 0x00, 0x00, 0x00, //0x00003fa0 jmp LBB11_59 + //0x00003fa5 LBB11_46 + 0x48, 0x83, 0xc1, 0x02, //0x00003fa5 addq $2, %rcx + //0x00003fa9 LBB11_47 + 0x48, 0x89, 0xcb, //0x00003fa9 movq %rcx, %rbx + //0x00003fac LBB11_48 + 0x48, 0x89, 0x5d, 0xd0, //0x00003fac movq %rbx, $-48(%rbp) + 0x49, 0x89, 0x06, //0x00003fb0 movq %rax, (%r14) + 0xe9, 0x31, 0x00, 0x00, 0x00, //0x00003fb3 jmp LBB11_59 + //0x00003fb8 LBB11_54 + 0x4d, 0x29, 0xfc, //0x00003fb8 subq %r15, %r12 + 0x4c, 0x89, 0x65, 0xd0, //0x00003fbb movq %r12, $-48(%rbp) + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00003fbf movq $-1, %r13 + 0xe9, 0x14, 0x00, 0x00, 0x00, //0x00003fc6 jmp LBB11_57 + //0x00003fcb LBB11_55 + 0x48, 0xf7, 0xd0, //0x00003fcb notq %rax + 0x49, 0x01, 0xc4, //0x00003fce addq %rax, %r12 + //0x00003fd1 LBB11_56 + 0x4d, 0x29, 0xfc, //0x00003fd1 subq %r15, %r12 + 0x4c, 0x89, 0x65, 0xd0, //0x00003fd4 movq %r12, $-48(%rbp) + 0x49, 0xc7, 0xc5, 0xfe, 0xff, 0xff, 0xff, //0x00003fd8 movq $-2, %r13 + //0x00003fdf LBB11_57 + 0x4c, 0x89, 0xe3, //0x00003fdf movq %r12, %rbx + //0x00003fe2 LBB11_58 + 0x48, 0x8b, 0x45, 0xc8, //0x00003fe2 movq $-56(%rbp), %rax + 0x4c, 0x89, 0x28, //0x00003fe6 movq %r13, (%rax) + //0x00003fe9 LBB11_59 + 0x48, 0x89, 0xd8, //0x00003fe9 movq %rbx, %rax + 0x48, 0x83, 0xc4, 0x28, //0x00003fec addq $40, %rsp + 0x5b, //0x00003ff0 popq %rbx + 0x41, 0x5c, //0x00003ff1 popq %r12 + 0x41, 0x5d, //0x00003ff3 popq %r13 + 0x41, 0x5e, //0x00003ff5 popq %r14 + 0x41, 0x5f, //0x00003ff7 popq %r15 + 0x5d, //0x00003ff9 popq %rbp + 0xc3, //0x00003ffa retq + 0x90, //0x00003ffb .p2align 2, 0x90 + // // .set L11_0_set_10, LBB11_10-LJTI11_0 + // // .set L11_0_set_11, LBB11_11-LJTI11_0 + // // .set L11_0_set_12, LBB11_12-LJTI11_0 + // // .set L11_0_set_14, LBB11_14-LJTI11_0 + // // .set L11_0_set_2, LBB11_2-LJTI11_0 + // // .set L11_0_set_15, LBB11_15-LJTI11_0 + // // .set L11_0_set_16, LBB11_16-LJTI11_0 + // // .set L11_0_set_17, LBB11_17-LJTI11_0 + // // .set L11_0_set_18, LBB11_18-LJTI11_0 + // // .set L11_0_set_20, LBB11_20-LJTI11_0 + // // .set L11_0_set_22, LBB11_22-LJTI11_0 + // // .set L11_0_set_25, LBB11_25-LJTI11_0 + // // .set L11_0_set_26, LBB11_26-LJTI11_0 + //0x00003ffc LJTI11_0 + 0x05, 0xfd, 0xff, 0xff, //0x00003ffc .long L11_0_set_10 + 0x15, 0xfd, 0xff, 0xff, //0x00004000 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004004 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004008 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000400c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004010 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004014 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004018 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000401c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004020 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004024 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004028 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000402c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004030 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004034 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004038 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000403c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004040 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004044 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004048 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000404c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004050 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004054 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004058 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000405c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004060 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004064 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004068 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000406c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004070 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004074 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004078 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000407c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004080 .long L11_0_set_11 + 0x28, 0xfd, 0xff, 0xff, //0x00004084 .long L11_0_set_12 + 0x15, 0xfd, 0xff, 0xff, //0x00004088 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000408c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004090 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004094 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004098 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000409c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000040a0 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000040a4 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000040a8 .long L11_0_set_11 + 0x7e, 0xfd, 0xff, 0xff, //0x000040ac .long L11_0_set_14 + 0x62, 0xfc, 0xff, 0xff, //0x000040b0 .long L11_0_set_2 + 0x15, 0xfd, 0xff, 0xff, //0x000040b4 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000040b8 .long L11_0_set_11 + 0x62, 0xfc, 0xff, 0xff, //0x000040bc .long L11_0_set_2 + 0x62, 0xfc, 0xff, 0xff, //0x000040c0 .long L11_0_set_2 + 0x62, 0xfc, 0xff, 0xff, //0x000040c4 .long L11_0_set_2 + 0x62, 0xfc, 0xff, 0xff, //0x000040c8 .long L11_0_set_2 + 0x62, 0xfc, 0xff, 0xff, //0x000040cc .long L11_0_set_2 + 0x62, 0xfc, 0xff, 0xff, //0x000040d0 .long L11_0_set_2 + 0x62, 0xfc, 0xff, 0xff, //0x000040d4 .long L11_0_set_2 + 0x62, 0xfc, 0xff, 0xff, //0x000040d8 .long L11_0_set_2 + 0x62, 0xfc, 0xff, 0xff, //0x000040dc .long L11_0_set_2 + 0x62, 0xfc, 0xff, 0xff, //0x000040e0 .long L11_0_set_2 + 0x8d, 0xfd, 0xff, 0xff, //0x000040e4 .long L11_0_set_15 + 0x15, 0xfd, 0xff, 0xff, //0x000040e8 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000040ec .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000040f0 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000040f4 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000040f8 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000040fc .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004100 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004104 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004108 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000410c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004110 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004114 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004118 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000411c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004120 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004124 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004128 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000412c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004130 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004134 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004138 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000413c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004140 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004144 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004148 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000414c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004150 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004154 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004158 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000415c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004160 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004164 .long L11_0_set_11 + 0x9c, 0xfd, 0xff, 0xff, //0x00004168 .long L11_0_set_16 + 0x15, 0xfd, 0xff, 0xff, //0x0000416c .long L11_0_set_11 + 0xac, 0xfd, 0xff, 0xff, //0x00004170 .long L11_0_set_17 + 0x15, 0xfd, 0xff, 0xff, //0x00004174 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004178 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000417c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004180 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004184 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004188 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000418c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x00004190 .long L11_0_set_11 + 0xbb, 0xfd, 0xff, 0xff, //0x00004194 .long L11_0_set_18 + 0x15, 0xfd, 0xff, 0xff, //0x00004198 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x0000419c .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041a0 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041a4 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041a8 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041ac .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041b0 .long L11_0_set_11 + 0xdf, 0xfd, 0xff, 0xff, //0x000041b4 .long L11_0_set_20 + 0x15, 0xfd, 0xff, 0xff, //0x000041b8 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041bc .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041c0 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041c4 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041c8 .long L11_0_set_11 + 0x13, 0xfe, 0xff, 0xff, //0x000041cc .long L11_0_set_22 + 0x15, 0xfd, 0xff, 0xff, //0x000041d0 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041d4 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041d8 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041dc .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041e0 .long L11_0_set_11 + 0x15, 0xfd, 0xff, 0xff, //0x000041e4 .long L11_0_set_11 + 0x37, 0xfe, 0xff, 0xff, //0x000041e8 .long L11_0_set_25 + 0x15, 0xfd, 0xff, 0xff, //0x000041ec .long L11_0_set_11 + 0x47, 0xfe, 0xff, 0xff, //0x000041f0 .long L11_0_set_26 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000041f4 .p2align 5, 0x00 + //0x00004200 LCPI12_0 + 0x20, //0x00004200 .byte 32 + 0x00, //0x00004201 .byte 0 + 0x00, //0x00004202 .byte 0 + 0x00, //0x00004203 .byte 0 + 0x00, //0x00004204 .byte 0 + 0x00, //0x00004205 .byte 0 + 0x00, //0x00004206 .byte 0 + 0x00, //0x00004207 .byte 0 + 0x00, //0x00004208 .byte 0 + 0x09, //0x00004209 .byte 9 + 0x0a, //0x0000420a .byte 10 + 0x00, //0x0000420b .byte 0 + 0x00, //0x0000420c .byte 0 + 0x0d, //0x0000420d .byte 13 + 0x00, //0x0000420e .byte 0 + 0x00, //0x0000420f .byte 0 + 0x20, //0x00004210 .byte 32 + 0x00, //0x00004211 .byte 0 + 0x00, //0x00004212 .byte 0 + 0x00, //0x00004213 .byte 0 + 0x00, //0x00004214 .byte 0 + 0x00, //0x00004215 .byte 0 + 0x00, //0x00004216 .byte 0 + 0x00, //0x00004217 .byte 0 + 0x00, //0x00004218 .byte 0 + 0x09, //0x00004219 .byte 9 + 0x0a, //0x0000421a .byte 10 + 0x00, //0x0000421b .byte 0 + 0x00, //0x0000421c .byte 0 + 0x0d, //0x0000421d .byte 13 + 0x00, //0x0000421e .byte 0 + 0x00, //0x0000421f .byte 0 + //0x00004220 .p2align 4, 0x90 + //0x00004220 _advance_ns + 0x55, //0x00004220 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004221 movq %rsp, %rbp + 0x4c, 0x8b, 0x02, //0x00004224 movq (%rdx), %r8 + 0x49, 0x39, 0xf0, //0x00004227 cmpq %rsi, %r8 + 0x0f, 0x83, 0x26, 0x00, 0x00, 0x00, //0x0000422a jae LBB12_6 + 0x42, 0x8a, 0x04, 0x07, //0x00004230 movb (%rdi,%r8), %al + 0x3c, 0x0d, //0x00004234 cmpb $13, %al + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00004236 je LBB12_6 + 0x3c, 0x20, //0x0000423c cmpb $32, %al + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000423e je LBB12_6 + 0x04, 0xf7, //0x00004244 addb $-9, %al + 0x3c, 0x01, //0x00004246 cmpb $1, %al + 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x00004248 jbe LBB12_6 + 0x4d, 0x89, 0xc2, //0x0000424e movq %r8, %r10 + 0xe9, 0x81, 0x01, 0x00, 0x00, //0x00004251 jmp LBB12_5 + //0x00004256 LBB12_6 + 0x4d, 0x8d, 0x50, 0x01, //0x00004256 leaq $1(%r8), %r10 + 0x49, 0x39, 0xf2, //0x0000425a cmpq %rsi, %r10 + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x0000425d jae LBB12_10 + 0x42, 0x8a, 0x0c, 0x17, //0x00004263 movb (%rdi,%r10), %cl + 0x80, 0xf9, 0x0d, //0x00004267 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x0000426a je LBB12_10 + 0x80, 0xf9, 0x20, //0x00004270 cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00004273 je LBB12_10 + 0x80, 0xc1, 0xf7, //0x00004279 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x0000427c cmpb $1, %cl + 0x0f, 0x87, 0x52, 0x01, 0x00, 0x00, //0x0000427f ja LBB12_5 + //0x00004285 LBB12_10 + 0x4d, 0x8d, 0x50, 0x02, //0x00004285 leaq $2(%r8), %r10 + 0x49, 0x39, 0xf2, //0x00004289 cmpq %rsi, %r10 + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x0000428c jae LBB12_14 + 0x42, 0x8a, 0x0c, 0x17, //0x00004292 movb (%rdi,%r10), %cl + 0x80, 0xf9, 0x0d, //0x00004296 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00004299 je LBB12_14 + 0x80, 0xf9, 0x20, //0x0000429f cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000042a2 je LBB12_14 + 0x80, 0xc1, 0xf7, //0x000042a8 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x000042ab cmpb $1, %cl + 0x0f, 0x87, 0x23, 0x01, 0x00, 0x00, //0x000042ae ja LBB12_5 + //0x000042b4 LBB12_14 + 0x4d, 0x8d, 0x50, 0x03, //0x000042b4 leaq $3(%r8), %r10 + 0x49, 0x39, 0xf2, //0x000042b8 cmpq %rsi, %r10 + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x000042bb jae LBB12_18 + 0x42, 0x8a, 0x0c, 0x17, //0x000042c1 movb (%rdi,%r10), %cl + 0x80, 0xf9, 0x0d, //0x000042c5 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000042c8 je LBB12_18 + 0x80, 0xf9, 0x20, //0x000042ce cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000042d1 je LBB12_18 + 0x80, 0xc1, 0xf7, //0x000042d7 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x000042da cmpb $1, %cl + 0x0f, 0x87, 0xf4, 0x00, 0x00, 0x00, //0x000042dd ja LBB12_5 + //0x000042e3 LBB12_18 + 0x49, 0x8d, 0x40, 0x04, //0x000042e3 leaq $4(%r8), %rax + 0x48, 0x39, 0xf0, //0x000042e7 cmpq %rsi, %rax + 0x0f, 0x83, 0xc8, 0x00, 0x00, 0x00, //0x000042ea jae LBB12_19 + 0x4c, 0x8d, 0x14, 0x07, //0x000042f0 leaq (%rdi,%rax), %r10 + 0x48, 0x89, 0xf1, //0x000042f4 movq %rsi, %rcx + 0x48, 0x29, 0xc1, //0x000042f7 subq %rax, %rcx + 0x48, 0x83, 0xf9, 0x20, //0x000042fa cmpq $32, %rcx + 0x0f, 0x82, 0x5f, 0x00, 0x00, 0x00, //0x000042fe jb LBB12_24 + 0x49, 0x89, 0xf1, //0x00004304 movq %rsi, %r9 + 0x4d, 0x29, 0xc1, //0x00004307 subq %r8, %r9 + 0x49, 0x83, 0xc1, 0xdc, //0x0000430a addq $-36, %r9 + 0x4c, 0x89, 0xc8, //0x0000430e movq %r9, %rax + 0x48, 0x83, 0xe0, 0xe0, //0x00004311 andq $-32, %rax + 0x4c, 0x01, 0xc0, //0x00004315 addq %r8, %rax + 0x4c, 0x8d, 0x44, 0x07, 0x24, //0x00004318 leaq $36(%rdi,%rax), %r8 + 0x41, 0x83, 0xe1, 0x1f, //0x0000431d andl $31, %r9d + 0xc5, 0xfd, 0x6f, 0x05, 0xd7, 0xfe, 0xff, 0xff, //0x00004321 vmovdqa $-297(%rip), %ymm0 /* LCPI12_0+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004329 .p2align 4, 0x90 + //0x00004330 LBB12_22 + 0xc4, 0xc1, 0x7e, 0x6f, 0x0a, //0x00004330 vmovdqu (%r10), %ymm1 + 0xc4, 0xe2, 0x7d, 0x00, 0xd1, //0x00004335 vpshufb %ymm1, %ymm0, %ymm2 + 0xc5, 0xf5, 0x74, 0xca, //0x0000433a vpcmpeqb %ymm2, %ymm1, %ymm1 + 0xc5, 0xfd, 0xd7, 0xc1, //0x0000433e vpmovmskb %ymm1, %eax + 0x83, 0xf8, 0xff, //0x00004342 cmpl $-1, %eax + 0x0f, 0x85, 0x75, 0x00, 0x00, 0x00, //0x00004345 jne LBB12_23 + 0x49, 0x83, 0xc2, 0x20, //0x0000434b addq $32, %r10 + 0x48, 0x83, 0xc1, 0xe0, //0x0000434f addq $-32, %rcx + 0x48, 0x83, 0xf9, 0x1f, //0x00004353 cmpq $31, %rcx + 0x0f, 0x87, 0xd3, 0xff, 0xff, 0xff, //0x00004357 ja LBB12_22 + 0x4c, 0x89, 0xc9, //0x0000435d movq %r9, %rcx + 0x4d, 0x89, 0xc2, //0x00004360 movq %r8, %r10 + //0x00004363 LBB12_24 + 0x48, 0x85, 0xc9, //0x00004363 testq %rcx, %rcx + 0x0f, 0x84, 0x3b, 0x00, 0x00, 0x00, //0x00004366 je LBB12_33 + 0x4d, 0x8d, 0x04, 0x0a, //0x0000436c leaq (%r10,%rcx), %r8 + 0x49, 0xff, 0xc2, //0x00004370 incq %r10 + 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00004373 movabsq $4294977024, %r9 + //0x0000437d LBB12_26 + 0x41, 0x0f, 0xbe, 0x42, 0xff, //0x0000437d movsbl $-1(%r10), %eax + 0x83, 0xf8, 0x20, //0x00004382 cmpl $32, %eax + 0x0f, 0x87, 0x5f, 0x00, 0x00, 0x00, //0x00004385 ja LBB12_28 + 0x49, 0x0f, 0xa3, 0xc1, //0x0000438b btq %rax, %r9 + 0x0f, 0x83, 0x55, 0x00, 0x00, 0x00, //0x0000438f jae LBB12_28 + 0x48, 0xff, 0xc9, //0x00004395 decq %rcx + 0x49, 0xff, 0xc2, //0x00004398 incq %r10 + 0x48, 0x85, 0xc9, //0x0000439b testq %rcx, %rcx + 0x0f, 0x85, 0xd9, 0xff, 0xff, 0xff, //0x0000439e jne LBB12_26 + 0x4d, 0x89, 0xc2, //0x000043a4 movq %r8, %r10 + //0x000043a7 LBB12_33 + 0x49, 0x29, 0xfa, //0x000043a7 subq %rdi, %r10 + 0x49, 0x39, 0xf2, //0x000043aa cmpq %rsi, %r10 + 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x000043ad jb LBB12_5 + 0xe9, 0x44, 0x00, 0x00, 0x00, //0x000043b3 jmp LBB12_35 + //0x000043b8 LBB12_19 + 0x48, 0x89, 0x02, //0x000043b8 movq %rax, (%rdx) + 0xe9, 0x3c, 0x00, 0x00, 0x00, //0x000043bb jmp LBB12_35 + //0x000043c0 LBB12_23 + 0x49, 0x29, 0xfa, //0x000043c0 subq %rdi, %r10 + 0xf7, 0xd0, //0x000043c3 notl %eax + 0x48, 0x98, //0x000043c5 cltq + 0x48, 0x0f, 0xbc, 0xc0, //0x000043c7 bsfq %rax, %rax + 0x49, 0x01, 0xc2, //0x000043cb addq %rax, %r10 + 0x49, 0x39, 0xf2, //0x000043ce cmpq %rsi, %r10 + 0x0f, 0x83, 0x25, 0x00, 0x00, 0x00, //0x000043d1 jae LBB12_35 + //0x000043d7 LBB12_5 + 0x49, 0x8d, 0x42, 0x01, //0x000043d7 leaq $1(%r10), %rax + 0x48, 0x89, 0x02, //0x000043db movq %rax, (%rdx) + 0x42, 0x8a, 0x04, 0x17, //0x000043de movb (%rdi,%r10), %al + 0x0f, 0xbe, 0xc0, //0x000043e2 movsbl %al, %eax + 0x5d, //0x000043e5 popq %rbp + 0xc5, 0xf8, 0x77, //0x000043e6 vzeroupper + 0xc3, //0x000043e9 retq + //0x000043ea LBB12_28 + 0x48, 0x89, 0xf8, //0x000043ea movq %rdi, %rax + 0x48, 0xf7, 0xd0, //0x000043ed notq %rax + 0x49, 0x01, 0xc2, //0x000043f0 addq %rax, %r10 + 0x49, 0x39, 0xf2, //0x000043f3 cmpq %rsi, %r10 + 0x0f, 0x82, 0xdb, 0xff, 0xff, 0xff, //0x000043f6 jb LBB12_5 + //0x000043fc LBB12_35 + 0x31, 0xc0, //0x000043fc xorl %eax, %eax + 0x0f, 0xbe, 0xc0, //0x000043fe movsbl %al, %eax + 0x5d, //0x00004401 popq %rbp + 0xc5, 0xf8, 0x77, //0x00004402 vzeroupper + 0xc3, //0x00004405 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004406 .p2align 4, 0x90 + //0x00004410 _vstring + 0x55, //0x00004410 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004411 movq %rsp, %rbp + 0x41, 0x57, //0x00004414 pushq %r15 + 0x41, 0x56, //0x00004416 pushq %r14 + 0x41, 0x54, //0x00004418 pushq %r12 + 0x53, //0x0000441a pushq %rbx + 0x48, 0x83, 0xec, 0x10, //0x0000441b subq $16, %rsp + 0x49, 0x89, 0xd6, //0x0000441f movq %rdx, %r14 + 0x48, 0x89, 0xf3, //0x00004422 movq %rsi, %rbx + 0x49, 0x89, 0xff, //0x00004425 movq %rdi, %r15 + 0x48, 0xc7, 0x45, 0xd8, 0xff, 0xff, 0xff, 0xff, //0x00004428 movq $-1, $-40(%rbp) + 0x4c, 0x8b, 0x26, //0x00004430 movq (%rsi), %r12 + 0x48, 0x8d, 0x55, 0xd8, //0x00004433 leaq $-40(%rbp), %rdx + 0x4c, 0x89, 0xe6, //0x00004437 movq %r12, %rsi + 0xe8, 0xc1, 0x00, 0x00, 0x00, //0x0000443a callq _advance_string + 0x48, 0x85, 0xc0, //0x0000443f testq %rax, %rax + 0x0f, 0x88, 0x27, 0x00, 0x00, 0x00, //0x00004442 js LBB13_1 + 0x48, 0x89, 0x03, //0x00004448 movq %rax, (%rbx) + 0x4d, 0x89, 0x66, 0x10, //0x0000444b movq %r12, $16(%r14) + 0x48, 0x8b, 0x4d, 0xd8, //0x0000444f movq $-40(%rbp), %rcx + 0x48, 0x39, 0xc1, //0x00004453 cmpq %rax, %rcx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004456 movq $-1, %rax + 0x48, 0x0f, 0x4c, 0xc1, //0x0000445d cmovlq %rcx, %rax + 0x49, 0x89, 0x46, 0x18, //0x00004461 movq %rax, $24(%r14) + 0xb8, 0x07, 0x00, 0x00, 0x00, //0x00004465 movl $7, %eax + 0xe9, 0x07, 0x00, 0x00, 0x00, //0x0000446a jmp LBB13_3 + //0x0000446f LBB13_1 + 0x49, 0x8b, 0x4f, 0x08, //0x0000446f movq $8(%r15), %rcx + 0x48, 0x89, 0x0b, //0x00004473 movq %rcx, (%rbx) + //0x00004476 LBB13_3 + 0x49, 0x89, 0x06, //0x00004476 movq %rax, (%r14) + 0x48, 0x83, 0xc4, 0x10, //0x00004479 addq $16, %rsp + 0x5b, //0x0000447d popq %rbx + 0x41, 0x5c, //0x0000447e popq %r12 + 0x41, 0x5e, //0x00004480 popq %r14 + 0x41, 0x5f, //0x00004482 popq %r15 + 0x5d, //0x00004484 popq %rbp + 0xc3, //0x00004485 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004486 .p2align 5, 0x00 + //0x000044a0 LCPI14_0 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x000044a0 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x000044b0 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x000044c0 LCPI14_1 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000044c0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000044d0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x000044e0 LCPI14_2 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x000044e0 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x000044f0 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x00004500 .p2align 4, 0x90 + //0x00004500 _advance_string + 0xf6, 0xc1, 0x20, //0x00004500 testb $32, %cl + 0x0f, 0x85, 0x05, 0x00, 0x00, 0x00, //0x00004503 jne LBB14_2 + 0xe9, 0xd2, 0x57, 0x00, 0x00, //0x00004509 jmp _advance_string_default + //0x0000450e LBB14_2 + 0x55, //0x0000450e pushq %rbp + 0x48, 0x89, 0xe5, //0x0000450f movq %rsp, %rbp + 0x41, 0x57, //0x00004512 pushq %r15 + 0x41, 0x56, //0x00004514 pushq %r14 + 0x41, 0x55, //0x00004516 pushq %r13 + 0x41, 0x54, //0x00004518 pushq %r12 + 0x53, //0x0000451a pushq %rbx + 0x50, //0x0000451b pushq %rax + 0x4c, 0x8b, 0x67, 0x08, //0x0000451c movq $8(%rdi), %r12 + 0x49, 0x29, 0xf4, //0x00004520 subq %rsi, %r12 + 0x0f, 0x84, 0xef, 0x03, 0x00, 0x00, //0x00004523 je LBB14_42 + 0x4c, 0x8b, 0x07, //0x00004529 movq (%rdi), %r8 + 0x4c, 0x01, 0xc6, //0x0000452c addq %r8, %rsi + 0x48, 0xc7, 0x02, 0xff, 0xff, 0xff, 0xff, //0x0000452f movq $-1, (%rdx) + 0x49, 0x83, 0xfc, 0x40, //0x00004536 cmpq $64, %r12 + 0x0f, 0x82, 0x02, 0x03, 0x00, 0x00, //0x0000453a jb LBB14_43 + 0x45, 0x89, 0xe1, //0x00004540 movl %r12d, %r9d + 0x41, 0x83, 0xe1, 0x3f, //0x00004543 andl $63, %r9d + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00004547 movq $-1, %r14 + 0x45, 0x31, 0xff, //0x0000454e xorl %r15d, %r15d + 0xc5, 0xfd, 0x6f, 0x05, 0x47, 0xff, 0xff, 0xff, //0x00004551 vmovdqa $-185(%rip), %ymm0 /* LCPI14_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x0d, 0x5f, 0xff, 0xff, 0xff, //0x00004559 vmovdqa $-161(%rip), %ymm1 /* LCPI14_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x15, 0x77, 0xff, 0xff, 0xff, //0x00004561 vmovdqa $-137(%rip), %ymm2 /* LCPI14_2+0(%rip) */ + 0xc5, 0xe5, 0x76, 0xdb, //0x00004569 vpcmpeqd %ymm3, %ymm3, %ymm3 + 0x49, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000456d movabsq $6148914691236517205, %r11 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004577 .p2align 4, 0x90 + //0x00004580 LBB14_5 + 0xc5, 0xfe, 0x6f, 0x26, //0x00004580 vmovdqu (%rsi), %ymm4 + 0xc5, 0xfe, 0x6f, 0x6e, 0x20, //0x00004584 vmovdqu $32(%rsi), %ymm5 + 0xc5, 0xdd, 0x74, 0xf0, //0x00004589 vpcmpeqb %ymm0, %ymm4, %ymm6 + 0xc5, 0xfd, 0xd7, 0xc6, //0x0000458d vpmovmskb %ymm6, %eax + 0xc5, 0xd5, 0x74, 0xf0, //0x00004591 vpcmpeqb %ymm0, %ymm5, %ymm6 + 0xc5, 0xfd, 0xd7, 0xfe, //0x00004595 vpmovmskb %ymm6, %edi + 0xc5, 0xdd, 0x74, 0xf1, //0x00004599 vpcmpeqb %ymm1, %ymm4, %ymm6 + 0xc5, 0xfd, 0xd7, 0xce, //0x0000459d vpmovmskb %ymm6, %ecx + 0xc5, 0xd5, 0x74, 0xf1, //0x000045a1 vpcmpeqb %ymm1, %ymm5, %ymm6 + 0xc5, 0x7d, 0xd7, 0xd6, //0x000045a5 vpmovmskb %ymm6, %r10d + 0xc5, 0xed, 0x64, 0xf4, //0x000045a9 vpcmpgtb %ymm4, %ymm2, %ymm6 + 0xc5, 0xdd, 0x64, 0xe3, //0x000045ad vpcmpgtb %ymm3, %ymm4, %ymm4 + 0xc5, 0xdd, 0xdb, 0xe6, //0x000045b1 vpand %ymm6, %ymm4, %ymm4 + 0xc5, 0x7d, 0xd7, 0xec, //0x000045b5 vpmovmskb %ymm4, %r13d + 0xc5, 0xed, 0x64, 0xe5, //0x000045b9 vpcmpgtb %ymm5, %ymm2, %ymm4 + 0xc5, 0xd5, 0x64, 0xeb, //0x000045bd vpcmpgtb %ymm3, %ymm5, %ymm5 + 0xc5, 0xd5, 0xdb, 0xe4, //0x000045c1 vpand %ymm4, %ymm5, %ymm4 + 0xc5, 0xfd, 0xd7, 0xdc, //0x000045c5 vpmovmskb %ymm4, %ebx + 0x48, 0xc1, 0xe7, 0x20, //0x000045c9 shlq $32, %rdi + 0x49, 0xc1, 0xe2, 0x20, //0x000045cd shlq $32, %r10 + 0x4c, 0x09, 0xd1, //0x000045d1 orq %r10, %rcx + 0x49, 0x83, 0xfe, 0xff, //0x000045d4 cmpq $-1, %r14 + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x000045d8 jne LBB14_7 + 0x48, 0x85, 0xc9, //0x000045de testq %rcx, %rcx + 0x0f, 0x85, 0x93, 0x00, 0x00, 0x00, //0x000045e1 jne LBB14_12 + //0x000045e7 LBB14_7 + 0x48, 0xc1, 0xe3, 0x20, //0x000045e7 shlq $32, %rbx + 0x48, 0x09, 0xc7, //0x000045eb orq %rax, %rdi + 0x48, 0x89, 0xc8, //0x000045ee movq %rcx, %rax + 0x4c, 0x09, 0xf8, //0x000045f1 orq %r15, %rax + 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x000045f4 jne LBB14_11 + 0x4c, 0x09, 0xeb, //0x000045fa orq %r13, %rbx + 0x48, 0x85, 0xff, //0x000045fd testq %rdi, %rdi + 0x0f, 0x85, 0x89, 0x00, 0x00, 0x00, //0x00004600 jne LBB14_13 + //0x00004606 LBB14_9 + 0x48, 0x85, 0xdb, //0x00004606 testq %rbx, %rbx + 0x0f, 0x85, 0xd7, 0x00, 0x00, 0x00, //0x00004609 jne LBB14_19 + 0x48, 0x83, 0xc6, 0x40, //0x0000460f addq $64, %rsi + 0x49, 0x83, 0xc4, 0xc0, //0x00004613 addq $-64, %r12 + 0x49, 0x83, 0xfc, 0x3f, //0x00004617 cmpq $63, %r12 + 0x0f, 0x87, 0x5f, 0xff, 0xff, 0xff, //0x0000461b ja LBB14_5 + 0xe9, 0xe3, 0x00, 0x00, 0x00, //0x00004621 jmp LBB14_21 + //0x00004626 LBB14_11 + 0x4c, 0x89, 0xf8, //0x00004626 movq %r15, %rax + 0x48, 0xf7, 0xd0, //0x00004629 notq %rax + 0x48, 0x21, 0xc8, //0x0000462c andq %rcx, %rax + 0x48, 0x89, 0x45, 0xd0, //0x0000462f movq %rax, $-48(%rbp) + 0x48, 0x01, 0xc0, //0x00004633 addq %rax, %rax + 0x4c, 0x09, 0xf8, //0x00004636 orq %r15, %rax + 0x49, 0x89, 0xc2, //0x00004639 movq %rax, %r10 + 0x49, 0xf7, 0xd2, //0x0000463c notq %r10 + 0x49, 0x21, 0xca, //0x0000463f andq %rcx, %r10 + 0x48, 0xb9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00004642 movabsq $-6148914691236517206, %rcx + 0x49, 0x21, 0xca, //0x0000464c andq %rcx, %r10 + 0x45, 0x31, 0xff, //0x0000464f xorl %r15d, %r15d + 0x4c, 0x03, 0x55, 0xd0, //0x00004652 addq $-48(%rbp), %r10 + 0x41, 0x0f, 0x92, 0xc7, //0x00004656 setb %r15b + 0x4d, 0x01, 0xd2, //0x0000465a addq %r10, %r10 + 0x4d, 0x31, 0xda, //0x0000465d xorq %r11, %r10 + 0x49, 0x21, 0xc2, //0x00004660 andq %rax, %r10 + 0x49, 0xf7, 0xd2, //0x00004663 notq %r10 + 0x4c, 0x21, 0xd7, //0x00004666 andq %r10, %rdi + 0x4c, 0x09, 0xeb, //0x00004669 orq %r13, %rbx + 0x48, 0x85, 0xff, //0x0000466c testq %rdi, %rdi + 0x0f, 0x84, 0x91, 0xff, 0xff, 0xff, //0x0000466f je LBB14_9 + 0xe9, 0x15, 0x00, 0x00, 0x00, //0x00004675 jmp LBB14_13 + //0x0000467a LBB14_12 + 0x49, 0x89, 0xf2, //0x0000467a movq %rsi, %r10 + 0x4d, 0x29, 0xc2, //0x0000467d subq %r8, %r10 + 0x4c, 0x0f, 0xbc, 0xf1, //0x00004680 bsfq %rcx, %r14 + 0x4d, 0x01, 0xd6, //0x00004684 addq %r10, %r14 + 0x4c, 0x89, 0x32, //0x00004687 movq %r14, (%rdx) + 0xe9, 0x58, 0xff, 0xff, 0xff, //0x0000468a jmp LBB14_7 + //0x0000468f LBB14_13 + 0x48, 0x0f, 0xbc, 0xc7, //0x0000468f bsfq %rdi, %rax + 0x48, 0x85, 0xdb, //0x00004693 testq %rbx, %rbx + 0x0f, 0x84, 0x27, 0x00, 0x00, 0x00, //0x00004696 je LBB14_17 + 0x48, 0x0f, 0xbc, 0xcb, //0x0000469c bsfq %rbx, %rcx + 0x4c, 0x29, 0xc6, //0x000046a0 subq %r8, %rsi + 0x48, 0x39, 0xc1, //0x000046a3 cmpq %rax, %rcx + 0x0f, 0x82, 0x28, 0x00, 0x00, 0x00, //0x000046a6 jb LBB14_18 + //0x000046ac LBB14_15 + 0x48, 0x8d, 0x44, 0x06, 0x01, //0x000046ac leaq $1(%rsi,%rax), %rax + //0x000046b1 LBB14_16 + 0x48, 0x83, 0xc4, 0x08, //0x000046b1 addq $8, %rsp + 0x5b, //0x000046b5 popq %rbx + 0x41, 0x5c, //0x000046b6 popq %r12 + 0x41, 0x5d, //0x000046b8 popq %r13 + 0x41, 0x5e, //0x000046ba popq %r14 + 0x41, 0x5f, //0x000046bc popq %r15 + 0x5d, //0x000046be popq %rbp + 0xc5, 0xf8, 0x77, //0x000046bf vzeroupper + 0xc3, //0x000046c2 retq + //0x000046c3 LBB14_17 + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x000046c3 movl $64, %ecx + 0x4c, 0x29, 0xc6, //0x000046c8 subq %r8, %rsi + 0x48, 0x39, 0xc1, //0x000046cb cmpq %rax, %rcx + 0x0f, 0x83, 0xd8, 0xff, 0xff, 0xff, //0x000046ce jae LBB14_15 + //0x000046d4 LBB14_18 + 0x48, 0x01, 0xf1, //0x000046d4 addq %rsi, %rcx + 0x48, 0x89, 0x0a, //0x000046d7 movq %rcx, (%rdx) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000046da movq $-2, %rax + 0xe9, 0xcb, 0xff, 0xff, 0xff, //0x000046e1 jmp LBB14_16 + //0x000046e6 LBB14_19 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000046e6 movq $-2, %rax + 0x49, 0x83, 0xfe, 0xff, //0x000046ed cmpq $-1, %r14 + 0x0f, 0x85, 0xba, 0xff, 0xff, 0xff, //0x000046f1 jne LBB14_16 + 0x48, 0x0f, 0xbc, 0xcb, //0x000046f7 bsfq %rbx, %rcx + 0x4c, 0x29, 0xc6, //0x000046fb subq %r8, %rsi + 0x48, 0x01, 0xce, //0x000046fe addq %rcx, %rsi + 0x48, 0x89, 0x32, //0x00004701 movq %rsi, (%rdx) + 0xe9, 0xa8, 0xff, 0xff, 0xff, //0x00004704 jmp LBB14_16 + //0x00004709 LBB14_21 + 0x4d, 0x89, 0xcc, //0x00004709 movq %r9, %r12 + 0x49, 0x83, 0xfc, 0x20, //0x0000470c cmpq $32, %r12 + 0x0f, 0x82, 0x9c, 0x00, 0x00, 0x00, //0x00004710 jb LBB14_31 + //0x00004716 LBB14_22 + 0xc5, 0xfe, 0x6f, 0x06, //0x00004716 vmovdqu (%rsi), %ymm0 + 0xc5, 0xfd, 0x74, 0x0d, 0x7e, 0xfd, 0xff, 0xff, //0x0000471a vpcmpeqb $-642(%rip), %ymm0, %ymm1 /* LCPI14_0+0(%rip) */ + 0xc5, 0x7d, 0xd7, 0xc9, //0x00004722 vpmovmskb %ymm1, %r9d + 0xc5, 0xfd, 0x74, 0x0d, 0x92, 0xfd, 0xff, 0xff, //0x00004726 vpcmpeqb $-622(%rip), %ymm0, %ymm1 /* LCPI14_1+0(%rip) */ + 0xc5, 0xfd, 0xd7, 0xc1, //0x0000472e vpmovmskb %ymm1, %eax + 0xc5, 0xfd, 0x6f, 0x0d, 0xa6, 0xfd, 0xff, 0xff, //0x00004732 vmovdqa $-602(%rip), %ymm1 /* LCPI14_2+0(%rip) */ + 0xc5, 0xf5, 0x64, 0xc8, //0x0000473a vpcmpgtb %ymm0, %ymm1, %ymm1 + 0xc5, 0xed, 0x76, 0xd2, //0x0000473e vpcmpeqd %ymm2, %ymm2, %ymm2 + 0xc5, 0xfd, 0x64, 0xc2, //0x00004742 vpcmpgtb %ymm2, %ymm0, %ymm0 + 0xc5, 0xfd, 0xdb, 0xc1, //0x00004746 vpand %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf8, //0x0000474a vpmovmskb %ymm0, %edi + 0x85, 0xc0, //0x0000474e testl %eax, %eax + 0x0f, 0x85, 0x05, 0x01, 0x00, 0x00, //0x00004750 jne LBB14_44 + 0x4d, 0x85, 0xff, //0x00004756 testq %r15, %r15 + 0x0f, 0x85, 0x16, 0x01, 0x00, 0x00, //0x00004759 jne LBB14_46 + 0x45, 0x31, 0xff, //0x0000475f xorl %r15d, %r15d + 0xb8, 0x40, 0x00, 0x00, 0x00, //0x00004762 movl $64, %eax + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00004767 movl $64, %ecx + 0x4d, 0x85, 0xc9, //0x0000476c testq %r9, %r9 + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x0000476f je LBB14_26 + //0x00004775 LBB14_25 + 0x49, 0x0f, 0xbc, 0xc9, //0x00004775 bsfq %r9, %rcx + //0x00004779 LBB14_26 + 0x48, 0x0f, 0xbc, 0xdf, //0x00004779 bsfq %rdi, %rbx + 0x85, 0xff, //0x0000477d testl %edi, %edi + 0x48, 0x0f, 0x45, 0xc3, //0x0000477f cmovneq %rbx, %rax + 0x4d, 0x85, 0xc9, //0x00004783 testq %r9, %r9 + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00004786 je LBB14_29 + 0x4c, 0x29, 0xc6, //0x0000478c subq %r8, %rsi + 0x48, 0x39, 0xc8, //0x0000478f cmpq %rcx, %rax + 0x0f, 0x82, 0x29, 0x01, 0x00, 0x00, //0x00004792 jb LBB14_47 + 0x48, 0x8d, 0x44, 0x0e, 0x01, //0x00004798 leaq $1(%rsi,%rcx), %rax + 0xe9, 0x0f, 0xff, 0xff, 0xff, //0x0000479d jmp LBB14_16 + //0x000047a2 LBB14_29 + 0x85, 0xff, //0x000047a2 testl %edi, %edi + 0x0f, 0x85, 0x29, 0x01, 0x00, 0x00, //0x000047a4 jne LBB14_48 + 0x48, 0x83, 0xc6, 0x20, //0x000047aa addq $32, %rsi + 0x49, 0x83, 0xc4, 0xe0, //0x000047ae addq $-32, %r12 + //0x000047b2 LBB14_31 + 0x4d, 0x85, 0xff, //0x000047b2 testq %r15, %r15 + 0x0f, 0x85, 0x23, 0x01, 0x00, 0x00, //0x000047b5 jne LBB14_49 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000047bb movq $-1, %rax + 0x4d, 0x85, 0xe4, //0x000047c2 testq %r12, %r12 + 0x0f, 0x84, 0xe6, 0xfe, 0xff, 0xff, //0x000047c5 je LBB14_16 + //0x000047cb LBB14_33 + 0x0f, 0xb6, 0x0e, //0x000047cb movzbl (%rsi), %ecx + 0x80, 0xf9, 0x22, //0x000047ce cmpb $34, %cl + 0x0f, 0x84, 0x5d, 0x00, 0x00, 0x00, //0x000047d1 je LBB14_41 + 0x80, 0xf9, 0x5c, //0x000047d7 cmpb $92, %cl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x000047da je LBB14_38 + 0x80, 0xf9, 0x1f, //0x000047e0 cmpb $31, %cl + 0x0f, 0x86, 0x3b, 0x01, 0x00, 0x00, //0x000047e3 jbe LBB14_53 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000047e9 movq $-1, %rcx + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x000047f0 movl $1, %edi + //0x000047f5 LBB14_37 + 0x48, 0x01, 0xfe, //0x000047f5 addq %rdi, %rsi + 0x49, 0x01, 0xcc, //0x000047f8 addq %rcx, %r12 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x000047fb jne LBB14_33 + 0xe9, 0xab, 0xfe, 0xff, 0xff, //0x00004801 jmp LBB14_16 + //0x00004806 LBB14_38 + 0x49, 0x83, 0xfc, 0x01, //0x00004806 cmpq $1, %r12 + 0x0f, 0x84, 0xa1, 0xfe, 0xff, 0xff, //0x0000480a je LBB14_16 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00004810 movq $-2, %rcx + 0xbf, 0x02, 0x00, 0x00, 0x00, //0x00004817 movl $2, %edi + 0x49, 0x83, 0xfe, 0xff, //0x0000481c cmpq $-1, %r14 + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00004820 jne LBB14_37 + 0x49, 0x89, 0xf6, //0x00004826 movq %rsi, %r14 + 0x4d, 0x29, 0xc6, //0x00004829 subq %r8, %r14 + 0x4c, 0x89, 0x32, //0x0000482c movq %r14, (%rdx) + 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x0000482f jmp LBB14_37 + //0x00004834 LBB14_41 + 0x4c, 0x29, 0xc6, //0x00004834 subq %r8, %rsi + 0x48, 0xff, 0xc6, //0x00004837 incq %rsi + 0x48, 0x89, 0xf0, //0x0000483a movq %rsi, %rax + 0xe9, 0x6f, 0xfe, 0xff, 0xff, //0x0000483d jmp LBB14_16 + //0x00004842 LBB14_43 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00004842 movq $-1, %r14 + 0x45, 0x31, 0xff, //0x00004849 xorl %r15d, %r15d + 0x49, 0x83, 0xfc, 0x20, //0x0000484c cmpq $32, %r12 + 0x0f, 0x83, 0xc0, 0xfe, 0xff, 0xff, //0x00004850 jae LBB14_22 + 0xe9, 0x57, 0xff, 0xff, 0xff, //0x00004856 jmp LBB14_31 + //0x0000485b LBB14_44 + 0x49, 0x83, 0xfe, 0xff, //0x0000485b cmpq $-1, %r14 + 0x0f, 0x85, 0x10, 0x00, 0x00, 0x00, //0x0000485f jne LBB14_46 + 0x48, 0x89, 0xf1, //0x00004865 movq %rsi, %rcx + 0x4c, 0x29, 0xc1, //0x00004868 subq %r8, %rcx + 0x4c, 0x0f, 0xbc, 0xf0, //0x0000486b bsfq %rax, %r14 + 0x49, 0x01, 0xce, //0x0000486f addq %rcx, %r14 + 0x4c, 0x89, 0x32, //0x00004872 movq %r14, (%rdx) + //0x00004875 LBB14_46 + 0x44, 0x89, 0xf9, //0x00004875 movl %r15d, %ecx + 0xf7, 0xd1, //0x00004878 notl %ecx + 0x21, 0xc1, //0x0000487a andl %eax, %ecx + 0x44, 0x8d, 0x14, 0x09, //0x0000487c leal (%rcx,%rcx), %r10d + 0x45, 0x09, 0xfa, //0x00004880 orl %r15d, %r10d + 0x44, 0x89, 0xd3, //0x00004883 movl %r10d, %ebx + 0xf7, 0xd3, //0x00004886 notl %ebx + 0x21, 0xc3, //0x00004888 andl %eax, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000488a andl $-1431655766, %ebx + 0x45, 0x31, 0xff, //0x00004890 xorl %r15d, %r15d + 0x01, 0xcb, //0x00004893 addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc7, //0x00004895 setb %r15b + 0x01, 0xdb, //0x00004899 addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x0000489b xorl $1431655765, %ebx + 0x44, 0x21, 0xd3, //0x000048a1 andl %r10d, %ebx + 0xf7, 0xd3, //0x000048a4 notl %ebx + 0x41, 0x21, 0xd9, //0x000048a6 andl %ebx, %r9d + 0xb8, 0x40, 0x00, 0x00, 0x00, //0x000048a9 movl $64, %eax + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x000048ae movl $64, %ecx + 0x4d, 0x85, 0xc9, //0x000048b3 testq %r9, %r9 + 0x0f, 0x85, 0xb9, 0xfe, 0xff, 0xff, //0x000048b6 jne LBB14_25 + 0xe9, 0xb8, 0xfe, 0xff, 0xff, //0x000048bc jmp LBB14_26 + //0x000048c1 LBB14_47 + 0x48, 0x01, 0xf0, //0x000048c1 addq %rsi, %rax + 0x48, 0x89, 0x02, //0x000048c4 movq %rax, (%rdx) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000048c7 movq $-2, %rax + 0xe9, 0xde, 0xfd, 0xff, 0xff, //0x000048ce jmp LBB14_16 + //0x000048d3 LBB14_48 + 0x4c, 0x29, 0xc6, //0x000048d3 subq %r8, %rsi + 0x48, 0x01, 0xde, //0x000048d6 addq %rbx, %rsi + 0xe9, 0x49, 0x00, 0x00, 0x00, //0x000048d9 jmp LBB14_54 + //0x000048de LBB14_49 + 0x4d, 0x85, 0xe4, //0x000048de testq %r12, %r12 + 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x000048e1 je LBB14_42 + 0x49, 0x83, 0xfe, 0xff, //0x000048e7 cmpq $-1, %r14 + 0x0f, 0x85, 0x0c, 0x00, 0x00, 0x00, //0x000048eb jne LBB14_52 + 0x4d, 0x89, 0xc6, //0x000048f1 movq %r8, %r14 + 0x49, 0xf7, 0xd6, //0x000048f4 notq %r14 + 0x49, 0x01, 0xf6, //0x000048f7 addq %rsi, %r14 + 0x4c, 0x89, 0x32, //0x000048fa movq %r14, (%rdx) + //0x000048fd LBB14_52 + 0x48, 0xff, 0xc6, //0x000048fd incq %rsi + 0x49, 0xff, 0xcc, //0x00004900 decq %r12 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004903 movq $-1, %rax + 0x4d, 0x85, 0xe4, //0x0000490a testq %r12, %r12 + 0x0f, 0x85, 0xb8, 0xfe, 0xff, 0xff, //0x0000490d jne LBB14_33 + 0xe9, 0x99, 0xfd, 0xff, 0xff, //0x00004913 jmp LBB14_16 + //0x00004918 LBB14_42 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004918 movq $-1, %rax + 0xe9, 0x8d, 0xfd, 0xff, 0xff, //0x0000491f jmp LBB14_16 + //0x00004924 LBB14_53 + 0x4c, 0x29, 0xc6, //0x00004924 subq %r8, %rsi + //0x00004927 LBB14_54 + 0x48, 0x89, 0x32, //0x00004927 movq %rsi, (%rdx) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x0000492a movq $-2, %rax + 0xe9, 0x7b, 0xfd, 0xff, 0xff, //0x00004931 jmp LBB14_16 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004936 .p2align 4, 0x00 + //0x00004940 LCPI15_0 + 0x00, 0x00, 0x30, 0x43, //0x00004940 .long 1127219200 + 0x00, 0x00, 0x30, 0x45, //0x00004944 .long 1160773632 + 0x00, 0x00, 0x00, 0x00, //0x00004948 .long 0 + 0x00, 0x00, 0x00, 0x00, //0x0000494c .long 0 + //0x00004950 LCPI15_1 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x43, //0x00004950 .quad 4841369599423283200 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x45, //0x00004958 .quad 4985484787499139072 + //0x00004960 .p2align 3, 0x00 + //0x00004960 LCPI15_2 + 0x00, 0x00, 0x34, 0x26, 0xf5, 0x6b, 0x0c, 0x43, //0x00004960 .quad 4831355200913801216 + //0x00004968 LCPI15_3 + 0x00, 0x00, 0x34, 0x26, 0xf5, 0x6b, 0x0c, 0xc3, //0x00004968 .quad -4392016835940974592 + //0x00004970 .p2align 4, 0x90 + //0x00004970 _vnumber + 0x55, //0x00004970 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004971 movq %rsp, %rbp + 0x41, 0x57, //0x00004974 pushq %r15 + 0x41, 0x56, //0x00004976 pushq %r14 + 0x41, 0x55, //0x00004978 pushq %r13 + 0x41, 0x54, //0x0000497a pushq %r12 + 0x53, //0x0000497c pushq %rbx + 0x48, 0x83, 0xec, 0x38, //0x0000497d subq $56, %rsp + 0x48, 0x89, 0xd3, //0x00004981 movq %rdx, %rbx + 0x49, 0x89, 0xf6, //0x00004984 movq %rsi, %r14 + 0x48, 0xc7, 0x45, 0xd0, 0x00, 0x00, 0x00, 0x00, //0x00004987 movq $0, $-48(%rbp) + 0x48, 0x8b, 0x06, //0x0000498f movq (%rsi), %rax + 0x4c, 0x8b, 0x3f, //0x00004992 movq (%rdi), %r15 + 0x4c, 0x8b, 0x6f, 0x08, //0x00004995 movq $8(%rdi), %r13 + 0x4c, 0x8b, 0x52, 0x20, //0x00004999 movq $32(%rdx), %r10 + 0x4c, 0x8b, 0x5a, 0x28, //0x0000499d movq $40(%rdx), %r11 + 0x48, 0xc7, 0x02, 0x09, 0x00, 0x00, 0x00, //0x000049a1 movq $9, (%rdx) + 0xc5, 0xf9, 0x57, 0xc0, //0x000049a8 vxorpd %xmm0, %xmm0, %xmm0 + 0xc5, 0xf9, 0x11, 0x42, 0x08, //0x000049ac vmovupd %xmm0, $8(%rdx) + 0x48, 0x8b, 0x0e, //0x000049b1 movq (%rsi), %rcx + 0x48, 0x89, 0x4a, 0x18, //0x000049b4 movq %rcx, $24(%rdx) + 0x4c, 0x39, 0xe8, //0x000049b8 cmpq %r13, %rax + 0x0f, 0x83, 0xc8, 0x02, 0x00, 0x00, //0x000049bb jae LBB15_52 + 0x41, 0x8a, 0x3c, 0x07, //0x000049c1 movb (%r15,%rax), %dil + 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x000049c5 movl $1, %r9d + 0x40, 0x80, 0xff, 0x2d, //0x000049cb cmpb $45, %dil + 0x0f, 0x85, 0x16, 0x00, 0x00, 0x00, //0x000049cf jne LBB15_4 + 0x48, 0xff, 0xc0, //0x000049d5 incq %rax + 0x4c, 0x39, 0xe8, //0x000049d8 cmpq %r13, %rax + 0x0f, 0x83, 0xa8, 0x02, 0x00, 0x00, //0x000049db jae LBB15_52 + 0x41, 0x8a, 0x3c, 0x07, //0x000049e1 movb (%r15,%rax), %dil + 0x41, 0xb9, 0xff, 0xff, 0xff, 0xff, //0x000049e5 movl $-1, %r9d + //0x000049eb LBB15_4 + 0x8d, 0x4f, 0xd0, //0x000049eb leal $-48(%rdi), %ecx + 0x80, 0xf9, 0x0a, //0x000049ee cmpb $10, %cl + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x000049f1 jb LBB15_6 + //0x000049f7 LBB15_5 + 0x49, 0x89, 0x06, //0x000049f7 movq %rax, (%r14) + 0x48, 0xc7, 0x03, 0xfe, 0xff, 0xff, 0xff, //0x000049fa movq $-2, (%rbx) + 0xe9, 0x8d, 0x02, 0x00, 0x00, //0x00004a01 jmp LBB15_53 + //0x00004a06 LBB15_6 + 0x40, 0x80, 0xff, 0x30, //0x00004a06 cmpb $48, %dil + 0x0f, 0x85, 0x35, 0x00, 0x00, 0x00, //0x00004a0a jne LBB15_10 + 0x48, 0x8d, 0x70, 0x01, //0x00004a10 leaq $1(%rax), %rsi + 0x4c, 0x39, 0xe8, //0x00004a14 cmpq %r13, %rax + 0x0f, 0x83, 0xa4, 0x00, 0x00, 0x00, //0x00004a17 jae LBB15_19 + 0x41, 0x8a, 0x14, 0x37, //0x00004a1d movb (%r15,%rsi), %dl + 0x80, 0xc2, 0xd2, //0x00004a21 addb $-46, %dl + 0x80, 0xfa, 0x37, //0x00004a24 cmpb $55, %dl + 0x0f, 0x87, 0x94, 0x00, 0x00, 0x00, //0x00004a27 ja LBB15_19 + 0x44, 0x0f, 0xb6, 0xc2, //0x00004a2d movzbl %dl, %r8d + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00004a31 movabsq $36028797027352577, %rdx + 0x4c, 0x0f, 0xa3, 0xc2, //0x00004a3b btq %r8, %rdx + 0x0f, 0x83, 0x7c, 0x00, 0x00, 0x00, //0x00004a3f jae LBB15_19 + //0x00004a45 LBB15_10 + 0x4c, 0x39, 0xe8, //0x00004a45 cmpq %r13, %rax + 0x0f, 0x83, 0x67, 0x00, 0x00, 0x00, //0x00004a48 jae LBB15_18 + 0x80, 0xf9, 0x09, //0x00004a4e cmpb $9, %cl + 0x0f, 0x87, 0x72, 0x00, 0x00, 0x00, //0x00004a51 ja LBB15_20 + 0x4d, 0x8d, 0x45, 0xff, //0x00004a57 leaq $-1(%r13), %r8 + 0x31, 0xc9, //0x00004a5b xorl %ecx, %ecx + 0x31, 0xf6, //0x00004a5d xorl %esi, %esi + 0x45, 0x31, 0xe4, //0x00004a5f xorl %r12d, %r12d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004a62 .p2align 4, 0x90 + //0x00004a70 LBB15_13 + 0x83, 0xfe, 0x12, //0x00004a70 cmpl $18, %esi + 0x0f, 0x8f, 0x17, 0x00, 0x00, 0x00, //0x00004a73 jg LBB15_15 + 0x48, 0x0f, 0xbe, 0xff, //0x00004a79 movsbq %dil, %rdi + 0x4b, 0x8d, 0x14, 0xa4, //0x00004a7d leaq (%r12,%r12,4), %rdx + 0x4c, 0x8d, 0x64, 0x57, 0xd0, //0x00004a81 leaq $-48(%rdi,%rdx,2), %r12 + 0xff, 0xc6, //0x00004a86 incl %esi + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00004a88 jmp LBB15_16 + 0x90, 0x90, 0x90, //0x00004a8d .p2align 4, 0x90 + //0x00004a90 LBB15_15 + 0xff, 0xc1, //0x00004a90 incl %ecx + //0x00004a92 LBB15_16 + 0x49, 0x39, 0xc0, //0x00004a92 cmpq %rax, %r8 + 0x0f, 0x84, 0x7d, 0x00, 0x00, 0x00, //0x00004a95 je LBB15_24 + 0x41, 0x0f, 0xb6, 0x7c, 0x07, 0x01, //0x00004a9b movzbl $1(%r15,%rax), %edi + 0x48, 0xff, 0xc0, //0x00004aa1 incq %rax + 0x8d, 0x57, 0xd0, //0x00004aa4 leal $-48(%rdi), %edx + 0x80, 0xfa, 0x0a, //0x00004aa7 cmpb $10, %dl + 0x0f, 0x82, 0xc0, 0xff, 0xff, 0xff, //0x00004aaa jb LBB15_13 + 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x00004ab0 jmp LBB15_21 + //0x00004ab5 LBB15_18 + 0x31, 0xc9, //0x00004ab5 xorl %ecx, %ecx + 0x31, 0xf6, //0x00004ab7 xorl %esi, %esi + 0x45, 0x31, 0xe4, //0x00004ab9 xorl %r12d, %r12d + 0xe9, 0x5a, 0x00, 0x00, 0x00, //0x00004abc jmp LBB15_25 + //0x00004ac1 LBB15_19 + 0x49, 0x89, 0x36, //0x00004ac1 movq %rsi, (%r14) + 0xe9, 0xca, 0x01, 0x00, 0x00, //0x00004ac4 jmp LBB15_53 + //0x00004ac9 LBB15_20 + 0x45, 0x31, 0xe4, //0x00004ac9 xorl %r12d, %r12d + 0x31, 0xf6, //0x00004acc xorl %esi, %esi + 0x31, 0xc9, //0x00004ace xorl %ecx, %ecx + //0x00004ad0 LBB15_21 + 0x31, 0xd2, //0x00004ad0 xorl %edx, %edx + 0x85, 0xc9, //0x00004ad2 testl %ecx, %ecx + 0x0f, 0x9f, 0xc2, //0x00004ad4 setg %dl + 0x89, 0x55, 0xcc, //0x00004ad7 movl %edx, $-52(%rbp) + 0x41, 0xb8, 0x09, 0x00, 0x00, 0x00, //0x00004ada movl $9, %r8d + 0x40, 0x80, 0xff, 0x2e, //0x00004ae0 cmpb $46, %dil + 0x0f, 0x85, 0x41, 0x00, 0x00, 0x00, //0x00004ae4 jne LBB15_26 + 0x48, 0xff, 0xc0, //0x00004aea incq %rax + 0x48, 0xc7, 0x03, 0x08, 0x00, 0x00, 0x00, //0x00004aed movq $8, (%rbx) + 0x4c, 0x39, 0xe8, //0x00004af4 cmpq %r13, %rax + 0x0f, 0x83, 0x8c, 0x01, 0x00, 0x00, //0x00004af7 jae LBB15_52 + 0x41, 0x8a, 0x14, 0x07, //0x00004afd movb (%r15,%rax), %dl + 0x80, 0xc2, 0xd0, //0x00004b01 addb $-48, %dl + 0x41, 0xb8, 0x08, 0x00, 0x00, 0x00, //0x00004b04 movl $8, %r8d + 0x80, 0xfa, 0x0a, //0x00004b0a cmpb $10, %dl + 0x0f, 0x83, 0xe4, 0xfe, 0xff, 0xff, //0x00004b0d jae LBB15_5 + 0xe9, 0x13, 0x00, 0x00, 0x00, //0x00004b13 jmp LBB15_26 + //0x00004b18 LBB15_24 + 0x4c, 0x89, 0xe8, //0x00004b18 movq %r13, %rax + //0x00004b1b LBB15_25 + 0x31, 0xd2, //0x00004b1b xorl %edx, %edx + 0x85, 0xc9, //0x00004b1d testl %ecx, %ecx + 0x0f, 0x9f, 0xc2, //0x00004b1f setg %dl + 0x89, 0x55, 0xcc, //0x00004b22 movl %edx, $-52(%rbp) + 0x41, 0xb8, 0x09, 0x00, 0x00, 0x00, //0x00004b25 movl $9, %r8d + //0x00004b2b LBB15_26 + 0x85, 0xc9, //0x00004b2b testl %ecx, %ecx + 0x0f, 0x85, 0x4f, 0x00, 0x00, 0x00, //0x00004b2d jne LBB15_35 + 0x4d, 0x85, 0xe4, //0x00004b33 testq %r12, %r12 + 0x0f, 0x85, 0x46, 0x00, 0x00, 0x00, //0x00004b36 jne LBB15_35 + 0x4c, 0x39, 0xe8, //0x00004b3c cmpq %r13, %rax + 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00004b3f jae LBB15_33 + 0x89, 0xc7, //0x00004b45 movl %eax, %edi + 0x44, 0x29, 0xef, //0x00004b47 subl %r13d, %edi + 0x31, 0xf6, //0x00004b4a xorl %esi, %esi + 0x31, 0xc9, //0x00004b4c xorl %ecx, %ecx + 0x90, 0x90, //0x00004b4e .p2align 4, 0x90 + //0x00004b50 LBB15_30 + 0x41, 0x80, 0x3c, 0x07, 0x30, //0x00004b50 cmpb $48, (%r15,%rax) + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00004b55 jne LBB15_34 + 0x48, 0xff, 0xc0, //0x00004b5b incq %rax + 0xff, 0xc9, //0x00004b5e decl %ecx + 0x49, 0x39, 0xc5, //0x00004b60 cmpq %rax, %r13 + 0x0f, 0x85, 0xe7, 0xff, 0xff, 0xff, //0x00004b63 jne LBB15_30 + 0x45, 0x31, 0xe4, //0x00004b69 xorl %r12d, %r12d + 0x41, 0x83, 0xf8, 0x09, //0x00004b6c cmpl $9, %r8d + 0x0f, 0x84, 0x3b, 0x01, 0x00, 0x00, //0x00004b70 je LBB15_55 + 0xe9, 0x6a, 0x01, 0x00, 0x00, //0x00004b76 jmp LBB15_59 + //0x00004b7b LBB15_33 + 0x31, 0xc9, //0x00004b7b xorl %ecx, %ecx + 0x31, 0xf6, //0x00004b7d xorl %esi, %esi + //0x00004b7f LBB15_34 + 0x45, 0x31, 0xe4, //0x00004b7f xorl %r12d, %r12d + //0x00004b82 LBB15_35 + 0x4c, 0x39, 0xe8, //0x00004b82 cmpq %r13, %rax + 0x0f, 0x83, 0x4b, 0x00, 0x00, 0x00, //0x00004b85 jae LBB15_40 + 0x83, 0xfe, 0x12, //0x00004b8b cmpl $18, %esi + 0x0f, 0x8f, 0x42, 0x00, 0x00, 0x00, //0x00004b8e jg LBB15_40 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004b94 .p2align 4, 0x90 + //0x00004ba0 LBB15_37 + 0x41, 0x0f, 0xb6, 0x3c, 0x07, //0x00004ba0 movzbl (%r15,%rax), %edi + 0x8d, 0x57, 0xd0, //0x00004ba5 leal $-48(%rdi), %edx + 0x80, 0xfa, 0x09, //0x00004ba8 cmpb $9, %dl + 0x0f, 0x87, 0x25, 0x00, 0x00, 0x00, //0x00004bab ja LBB15_40 + 0x4b, 0x8d, 0x14, 0xa4, //0x00004bb1 leaq (%r12,%r12,4), %rdx + 0x4c, 0x8d, 0x64, 0x57, 0xd0, //0x00004bb5 leaq $-48(%rdi,%rdx,2), %r12 + 0xff, 0xc9, //0x00004bba decl %ecx + 0x48, 0xff, 0xc0, //0x00004bbc incq %rax + 0x4c, 0x39, 0xe8, //0x00004bbf cmpq %r13, %rax + 0x0f, 0x83, 0x0e, 0x00, 0x00, 0x00, //0x00004bc2 jae LBB15_40 + 0x8d, 0x56, 0x01, //0x00004bc8 leal $1(%rsi), %edx + 0x83, 0xfe, 0x12, //0x00004bcb cmpl $18, %esi + 0x89, 0xd6, //0x00004bce movl %edx, %esi + 0x0f, 0x8c, 0xca, 0xff, 0xff, 0xff, //0x00004bd0 jl LBB15_37 + //0x00004bd6 LBB15_40 + 0x4c, 0x39, 0xe8, //0x00004bd6 cmpq %r13, %rax + 0x0f, 0x83, 0xc3, 0x00, 0x00, 0x00, //0x00004bd9 jae LBB15_54 + 0x41, 0x8a, 0x34, 0x07, //0x00004bdf movb (%r15,%rax), %sil + 0x8d, 0x56, 0xd0, //0x00004be3 leal $-48(%rsi), %edx + 0x80, 0xfa, 0x09, //0x00004be6 cmpb $9, %dl + 0x0f, 0x87, 0x36, 0x00, 0x00, 0x00, //0x00004be9 ja LBB15_46 + 0x49, 0x8d, 0x7d, 0xff, //0x00004bef leaq $-1(%r13), %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004bf3 .p2align 4, 0x90 + //0x00004c00 LBB15_43 + 0x48, 0x39, 0xc7, //0x00004c00 cmpq %rax, %rdi + 0x0f, 0x84, 0x40, 0x02, 0x00, 0x00, //0x00004c03 je LBB15_76 + 0x41, 0x0f, 0xb6, 0x74, 0x07, 0x01, //0x00004c09 movzbl $1(%r15,%rax), %esi + 0x48, 0xff, 0xc0, //0x00004c0f incq %rax + 0x8d, 0x56, 0xd0, //0x00004c12 leal $-48(%rsi), %edx + 0x80, 0xfa, 0x09, //0x00004c15 cmpb $9, %dl + 0x0f, 0x86, 0xe2, 0xff, 0xff, 0xff, //0x00004c18 jbe LBB15_43 + 0xc7, 0x45, 0xcc, 0x01, 0x00, 0x00, 0x00, //0x00004c1e movl $1, $-52(%rbp) + //0x00004c25 LBB15_46 + 0x40, 0x80, 0xce, 0x20, //0x00004c25 orb $32, %sil + 0x40, 0x80, 0xfe, 0x65, //0x00004c29 cmpb $101, %sil + 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x00004c2d jne LBB15_54 + 0x48, 0x8d, 0x78, 0x01, //0x00004c33 leaq $1(%rax), %rdi + 0x48, 0xc7, 0x03, 0x08, 0x00, 0x00, 0x00, //0x00004c37 movq $8, (%rbx) + 0x4c, 0x39, 0xef, //0x00004c3e cmpq %r13, %rdi + 0x0f, 0x83, 0x42, 0x00, 0x00, 0x00, //0x00004c41 jae LBB15_52 + 0x41, 0x8a, 0x34, 0x3f, //0x00004c47 movb (%r15,%rdi), %sil + 0x40, 0x80, 0xfe, 0x2d, //0x00004c4b cmpb $45, %sil + 0x0f, 0x84, 0x10, 0x00, 0x00, 0x00, //0x00004c4f je LBB15_50 + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00004c55 movl $1, %r8d + 0x40, 0x80, 0xfe, 0x2b, //0x00004c5b cmpb $43, %sil + 0x0f, 0x85, 0x94, 0x02, 0x00, 0x00, //0x00004c5f jne LBB15_85 + //0x00004c65 LBB15_50 + 0x48, 0x83, 0xc0, 0x02, //0x00004c65 addq $2, %rax + 0x4c, 0x39, 0xe8, //0x00004c69 cmpq %r13, %rax + 0x0f, 0x83, 0x17, 0x00, 0x00, 0x00, //0x00004c6c jae LBB15_52 + 0x31, 0xd2, //0x00004c72 xorl %edx, %edx + 0x40, 0x80, 0xfe, 0x2b, //0x00004c74 cmpb $43, %sil + 0x0f, 0x94, 0xc2, //0x00004c78 sete %dl + 0x44, 0x8d, 0x44, 0x12, 0xff, //0x00004c7b leal $-1(%rdx,%rdx), %r8d + 0x41, 0x8a, 0x34, 0x07, //0x00004c80 movb (%r15,%rax), %sil + 0xe9, 0x73, 0x02, 0x00, 0x00, //0x00004c84 jmp LBB15_86 + //0x00004c89 LBB15_52 + 0x4d, 0x89, 0x2e, //0x00004c89 movq %r13, (%r14) + 0x48, 0xc7, 0x03, 0xff, 0xff, 0xff, 0xff, //0x00004c8c movq $-1, (%rbx) + //0x00004c93 LBB15_53 + 0x48, 0x83, 0xc4, 0x38, //0x00004c93 addq $56, %rsp + 0x5b, //0x00004c97 popq %rbx + 0x41, 0x5c, //0x00004c98 popq %r12 + 0x41, 0x5d, //0x00004c9a popq %r13 + 0x41, 0x5e, //0x00004c9c popq %r14 + 0x41, 0x5f, //0x00004c9e popq %r15 + 0x5d, //0x00004ca0 popq %rbp + 0xc3, //0x00004ca1 retq + //0x00004ca2 LBB15_54 + 0x89, 0xcf, //0x00004ca2 movl %ecx, %edi + 0x49, 0x89, 0xc5, //0x00004ca4 movq %rax, %r13 + 0x41, 0x83, 0xf8, 0x09, //0x00004ca7 cmpl $9, %r8d + 0x0f, 0x85, 0x34, 0x00, 0x00, 0x00, //0x00004cab jne LBB15_59 + //0x00004cb1 LBB15_55 + 0x85, 0xff, //0x00004cb1 testl %edi, %edi + 0x0f, 0x85, 0x25, 0x00, 0x00, 0x00, //0x00004cb3 jne LBB15_58 + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x00004cb9 movabsq $-9223372036854775808, %rax + 0x49, 0x63, 0xc9, //0x00004cc3 movslq %r9d, %rcx + 0x4d, 0x85, 0xe4, //0x00004cc6 testq %r12, %r12 + 0x0f, 0x89, 0xba, 0x01, 0x00, 0x00, //0x00004cc9 jns LBB15_80 + 0x4c, 0x89, 0xe2, //0x00004ccf movq %r12, %rdx + 0x48, 0x21, 0xca, //0x00004cd2 andq %rcx, %rdx + 0x48, 0x39, 0xc2, //0x00004cd5 cmpq %rax, %rdx + 0x0f, 0x84, 0xab, 0x01, 0x00, 0x00, //0x00004cd8 je LBB15_80 + //0x00004cde LBB15_58 + 0x48, 0xc7, 0x03, 0x08, 0x00, 0x00, 0x00, //0x00004cde movq $8, (%rbx) + //0x00004ce5 LBB15_59 + 0x48, 0xc7, 0x45, 0xc0, 0x00, 0x00, 0x00, 0x00, //0x00004ce5 movq $0, $-64(%rbp) + 0xc4, 0xc1, 0xf9, 0x6e, 0xc4, //0x00004ced vmovq %r12, %xmm0 + 0xc5, 0xf9, 0x62, 0x05, 0x46, 0xfc, 0xff, 0xff, //0x00004cf2 vpunpckldq $-954(%rip), %xmm0, %xmm0 /* LCPI15_0+0(%rip) */ + 0xc5, 0xf9, 0x5c, 0x05, 0x4e, 0xfc, 0xff, 0xff, //0x00004cfa vsubpd $-946(%rip), %xmm0, %xmm0 /* LCPI15_1+0(%rip) */ + 0xc4, 0xe3, 0x79, 0x05, 0xc8, 0x01, //0x00004d02 vpermilpd $1, %xmm0, %xmm1 + 0xc5, 0xf3, 0x58, 0xc0, //0x00004d08 vaddsd %xmm0, %xmm1, %xmm0 + 0xc5, 0xfb, 0x11, 0x45, 0xd0, //0x00004d0c vmovsd %xmm0, $-48(%rbp) + 0x4c, 0x89, 0xe0, //0x00004d11 movq %r12, %rax + 0x48, 0xc1, 0xe8, 0x34, //0x00004d14 shrq $52, %rax + 0x0f, 0x84, 0xc8, 0x00, 0x00, 0x00, //0x00004d18 je LBB15_71 + //0x00004d1e LBB15_60 + 0x4c, 0x89, 0x5d, 0xb0, //0x00004d1e movq %r11, $-80(%rbp) + 0x4c, 0x89, 0x55, 0xa8, //0x00004d22 movq %r10, $-88(%rbp) + 0x48, 0x8d, 0x4d, 0xd0, //0x00004d26 leaq $-48(%rbp), %rcx + 0x48, 0x89, 0xfe, //0x00004d2a movq %rdi, %rsi + 0x4c, 0x89, 0xe7, //0x00004d2d movq %r12, %rdi + 0x48, 0x89, 0x75, 0xb8, //0x00004d30 movq %rsi, $-72(%rbp) + 0x44, 0x89, 0xca, //0x00004d34 movl %r9d, %edx + 0x44, 0x89, 0x4d, 0xc8, //0x00004d37 movl %r9d, $-56(%rbp) + 0xe8, 0x10, 0xe4, 0xff, 0xff, //0x00004d3b callq _atof_eisel_lemire64 + 0x84, 0xc0, //0x00004d40 testb %al, %al + 0x0f, 0x84, 0x42, 0x00, 0x00, 0x00, //0x00004d42 je LBB15_64 + 0x48, 0x8b, 0x75, 0xb8, //0x00004d48 movq $-72(%rbp), %rsi + 0x8b, 0x55, 0xc8, //0x00004d4c movl $-56(%rbp), %edx + 0x83, 0x7d, 0xcc, 0x00, //0x00004d4f cmpl $0, $-52(%rbp) + 0x0f, 0x84, 0x27, 0x01, 0x00, 0x00, //0x00004d53 je LBB15_79 + 0x49, 0xff, 0xc4, //0x00004d59 incq %r12 + 0x48, 0x8d, 0x4d, 0xc0, //0x00004d5c leaq $-64(%rbp), %rcx + 0x4c, 0x89, 0xe7, //0x00004d60 movq %r12, %rdi + 0xe8, 0xe8, 0xe3, 0xff, 0xff, //0x00004d63 callq _atof_eisel_lemire64 + 0x84, 0xc0, //0x00004d68 testb %al, %al + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00004d6a je LBB15_64 + 0xc5, 0xfb, 0x10, 0x4d, 0xc0, //0x00004d70 vmovsd $-64(%rbp), %xmm1 + 0xc5, 0xfb, 0x10, 0x45, 0xd0, //0x00004d75 vmovsd $-48(%rbp), %xmm0 + 0xc5, 0xf9, 0x2e, 0xc8, //0x00004d7a vucomisd %xmm0, %xmm1 + 0x0f, 0x85, 0x06, 0x00, 0x00, 0x00, //0x00004d7e jne LBB15_64 + 0x0f, 0x8b, 0x21, 0x00, 0x00, 0x00, //0x00004d84 jnp LBB15_66 + //0x00004d8a LBB15_64 + 0x49, 0x8b, 0x06, //0x00004d8a movq (%r14), %rax + 0x49, 0x01, 0xc7, //0x00004d8d addq %rax, %r15 + 0x4c, 0x89, 0xee, //0x00004d90 movq %r13, %rsi + 0x48, 0x29, 0xc6, //0x00004d93 subq %rax, %rsi + 0x4c, 0x89, 0xff, //0x00004d96 movq %r15, %rdi + 0x48, 0x8b, 0x55, 0xa8, //0x00004d99 movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x4d, 0xb0, //0x00004d9d movq $-80(%rbp), %rcx + 0xe8, 0x0a, 0xec, 0xff, 0xff, //0x00004da1 callq _atof_native + //0x00004da6 LBB15_65 + 0xc5, 0xfb, 0x11, 0x45, 0xd0, //0x00004da6 vmovsd %xmm0, $-48(%rbp) + //0x00004dab LBB15_66 + 0xc4, 0xe1, 0xf9, 0x7e, 0xc0, //0x00004dab vmovq %xmm0, %rax + //0x00004db0 LBB15_67 + 0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x00004db0 movabsq $-9223372036854775808, %rcx + 0x48, 0xff, 0xc9, //0x00004dba decq %rcx + 0x48, 0x21, 0xc1, //0x00004dbd andq %rax, %rcx + 0x48, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, //0x00004dc0 movabsq $9218868437227405312, %rdx + 0x48, 0x39, 0xd1, //0x00004dca cmpq %rdx, %rcx + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00004dcd jne LBB15_69 + 0x48, 0xc7, 0x03, 0xf8, 0xff, 0xff, 0xff, //0x00004dd3 movq $-8, (%rbx) + //0x00004dda LBB15_69 + 0x48, 0x89, 0x43, 0x08, //0x00004dda movq %rax, $8(%rbx) + //0x00004dde LBB15_70 + 0x4d, 0x89, 0x2e, //0x00004dde movq %r13, (%r14) + 0xe9, 0xad, 0xfe, 0xff, 0xff, //0x00004de1 jmp LBB15_53 + //0x00004de6 LBB15_71 + 0xc4, 0xe1, 0xf9, 0x7e, 0xc1, //0x00004de6 vmovq %xmm0, %rcx + 0x44, 0x89, 0xc8, //0x00004deb movl %r9d, %eax + 0xc1, 0xe8, 0x1f, //0x00004dee shrl $31, %eax + 0x48, 0xc1, 0xe0, 0x3f, //0x00004df1 shlq $63, %rax + 0x48, 0x09, 0xc8, //0x00004df5 orq %rcx, %rax + 0x48, 0x89, 0x45, 0xd0, //0x00004df8 movq %rax, $-48(%rbp) + 0x4d, 0x85, 0xe4, //0x00004dfc testq %r12, %r12 + 0x0f, 0x84, 0xab, 0xff, 0xff, 0xff, //0x00004dff je LBB15_67 + 0x85, 0xff, //0x00004e05 testl %edi, %edi + 0x0f, 0x84, 0xa3, 0xff, 0xff, 0xff, //0x00004e07 je LBB15_67 + 0xc4, 0xe1, 0xf9, 0x6e, 0xc0, //0x00004e0d vmovq %rax, %xmm0 + 0x8d, 0x47, 0xff, //0x00004e12 leal $-1(%rdi), %eax + 0x83, 0xf8, 0x24, //0x00004e15 cmpl $36, %eax + 0x0f, 0x87, 0x43, 0x00, 0x00, 0x00, //0x00004e18 ja LBB15_77 + 0x83, 0xff, 0x17, //0x00004e1e cmpl $23, %edi + 0x0f, 0x8c, 0x9d, 0x00, 0x00, 0x00, //0x00004e21 jl LBB15_81 + 0x48, 0x63, 0xc7, //0x00004e27 movslq %edi, %rax + 0x48, 0x8d, 0x0d, 0x2f, 0xf0, 0x00, 0x00, //0x00004e2a leaq $61487(%rip), %rcx /* _P10_TAB+0(%rip) */ + 0xc5, 0xfb, 0x59, 0x84, 0xc1, 0x50, 0xff, 0xff, 0xff, //0x00004e31 vmulsd $-176(%rcx,%rax,8), %xmm0, %xmm0 + 0xc5, 0xfb, 0x11, 0x45, 0xd0, //0x00004e3a vmovsd %xmm0, $-48(%rbp) + 0xb8, 0x16, 0x00, 0x00, 0x00, //0x00004e3f movl $22, %eax + 0xe9, 0x7d, 0x00, 0x00, 0x00, //0x00004e44 jmp LBB15_82 + //0x00004e49 LBB15_76 + 0xc7, 0x45, 0xcc, 0x01, 0x00, 0x00, 0x00, //0x00004e49 movl $1, $-52(%rbp) + 0x89, 0xcf, //0x00004e50 movl %ecx, %edi + 0x41, 0x83, 0xf8, 0x09, //0x00004e52 cmpl $9, %r8d + 0x0f, 0x84, 0x55, 0xfe, 0xff, 0xff, //0x00004e56 je LBB15_55 + 0xe9, 0x84, 0xfe, 0xff, 0xff, //0x00004e5c jmp LBB15_59 + //0x00004e61 LBB15_77 + 0x83, 0xff, 0xea, //0x00004e61 cmpl $-22, %edi + 0x0f, 0x82, 0xb4, 0xfe, 0xff, 0xff, //0x00004e64 jb LBB15_60 + 0xf7, 0xdf, //0x00004e6a negl %edi + 0x48, 0x63, 0xc7, //0x00004e6c movslq %edi, %rax + 0x48, 0x8d, 0x0d, 0xea, 0xef, 0x00, 0x00, //0x00004e6f leaq $61418(%rip), %rcx /* _P10_TAB+0(%rip) */ + 0xc5, 0xfb, 0x5e, 0x04, 0xc1, //0x00004e76 vdivsd (%rcx,%rax,8), %xmm0, %xmm0 + 0xe9, 0x26, 0xff, 0xff, 0xff, //0x00004e7b jmp LBB15_65 + //0x00004e80 LBB15_79 + 0x48, 0x8b, 0x45, 0xd0, //0x00004e80 movq $-48(%rbp), %rax + 0xe9, 0x27, 0xff, 0xff, 0xff, //0x00004e84 jmp LBB15_67 + //0x00004e89 LBB15_80 + 0xc4, 0xc1, 0xf9, 0x6e, 0xc4, //0x00004e89 vmovq %r12, %xmm0 + 0x4c, 0x0f, 0xaf, 0xe1, //0x00004e8e imulq %rcx, %r12 + 0xc5, 0xf9, 0x62, 0x05, 0xa6, 0xfa, 0xff, 0xff, //0x00004e92 vpunpckldq $-1370(%rip), %xmm0, %xmm0 /* LCPI15_0+0(%rip) */ + 0xc5, 0xf9, 0x5c, 0x05, 0xae, 0xfa, 0xff, 0xff, //0x00004e9a vsubpd $-1362(%rip), %xmm0, %xmm0 /* LCPI15_1+0(%rip) */ + 0x4c, 0x89, 0x63, 0x10, //0x00004ea2 movq %r12, $16(%rbx) + 0xc4, 0xe3, 0x79, 0x05, 0xc8, 0x01, //0x00004ea6 vpermilpd $1, %xmm0, %xmm1 + 0xc5, 0xf3, 0x58, 0xc0, //0x00004eac vaddsd %xmm0, %xmm1, %xmm0 + 0x48, 0x21, 0xc8, //0x00004eb0 andq %rcx, %rax + 0xc4, 0xe1, 0xf9, 0x7e, 0xc1, //0x00004eb3 vmovq %xmm0, %rcx + 0x48, 0x09, 0xc1, //0x00004eb8 orq %rax, %rcx + 0x48, 0x89, 0x4b, 0x08, //0x00004ebb movq %rcx, $8(%rbx) + 0xe9, 0x1a, 0xff, 0xff, 0xff, //0x00004ebf jmp LBB15_70 + //0x00004ec4 LBB15_81 + 0x89, 0xf8, //0x00004ec4 movl %edi, %eax + //0x00004ec6 LBB15_82 + 0xc5, 0xf9, 0x2e, 0x05, 0x92, 0xfa, 0xff, 0xff, //0x00004ec6 vucomisd $-1390(%rip), %xmm0 /* LCPI15_2+0(%rip) */ + 0x0f, 0x87, 0x4a, 0xfe, 0xff, 0xff, //0x00004ece ja LBB15_60 + 0xc5, 0xfb, 0x10, 0x0d, 0x8c, 0xfa, 0xff, 0xff, //0x00004ed4 vmovsd $-1396(%rip), %xmm1 /* LCPI15_3+0(%rip) */ + 0xc5, 0xf9, 0x2e, 0xc8, //0x00004edc vucomisd %xmm0, %xmm1 + 0x0f, 0x87, 0x38, 0xfe, 0xff, 0xff, //0x00004ee0 ja LBB15_60 + 0x89, 0xc0, //0x00004ee6 movl %eax, %eax + 0x48, 0x8d, 0x0d, 0x71, 0xef, 0x00, 0x00, //0x00004ee8 leaq $61297(%rip), %rcx /* _P10_TAB+0(%rip) */ + 0xc5, 0xfb, 0x59, 0x04, 0xc1, //0x00004eef vmulsd (%rcx,%rax,8), %xmm0, %xmm0 + 0xe9, 0xad, 0xfe, 0xff, 0xff, //0x00004ef4 jmp LBB15_65 + //0x00004ef9 LBB15_85 + 0x48, 0x89, 0xf8, //0x00004ef9 movq %rdi, %rax + //0x00004efc LBB15_86 + 0x8d, 0x7e, 0xd0, //0x00004efc leal $-48(%rsi), %edi + 0x40, 0x80, 0xff, 0x09, //0x00004eff cmpb $9, %dil + 0x0f, 0x87, 0xee, 0xfa, 0xff, 0xff, //0x00004f03 ja LBB15_5 + 0x44, 0x89, 0x4d, 0xc8, //0x00004f09 movl %r9d, $-56(%rbp) + 0x4c, 0x39, 0xe8, //0x00004f0d cmpq %r13, %rax + 0x0f, 0x83, 0x49, 0x00, 0x00, 0x00, //0x00004f10 jae LBB15_93 + 0x40, 0x80, 0xff, 0x09, //0x00004f16 cmpb $9, %dil + 0x0f, 0x87, 0x3f, 0x00, 0x00, 0x00, //0x00004f1a ja LBB15_93 + 0x4d, 0x8d, 0x4d, 0xff, //0x00004f20 leaq $-1(%r13), %r9 + 0x31, 0xff, //0x00004f24 xorl %edi, %edi + //0x00004f26 LBB15_90 + 0x89, 0xfa, //0x00004f26 movl %edi, %edx + 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00004f28 cmpl $10000, %edi + 0x8d, 0x3c, 0x92, //0x00004f2e leal (%rdx,%rdx,4), %edi + 0x40, 0x0f, 0xb6, 0xf6, //0x00004f31 movzbl %sil, %esi + 0x8d, 0x7c, 0x7e, 0xd0, //0x00004f35 leal $-48(%rsi,%rdi,2), %edi + 0x0f, 0x4d, 0xfa, //0x00004f39 cmovgel %edx, %edi + 0x49, 0x39, 0xc1, //0x00004f3c cmpq %rax, %r9 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00004f3f je LBB15_94 + 0x41, 0x0f, 0xb6, 0x74, 0x07, 0x01, //0x00004f45 movzbl $1(%r15,%rax), %esi + 0x48, 0xff, 0xc0, //0x00004f4b incq %rax + 0x8d, 0x56, 0xd0, //0x00004f4e leal $-48(%rsi), %edx + 0x80, 0xfa, 0x0a, //0x00004f51 cmpb $10, %dl + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00004f54 jb LBB15_90 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00004f5a jmp LBB15_95 + //0x00004f5f LBB15_93 + 0x31, 0xff, //0x00004f5f xorl %edi, %edi + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00004f61 jmp LBB15_95 + //0x00004f66 LBB15_94 + 0x4c, 0x89, 0xe8, //0x00004f66 movq %r13, %rax + //0x00004f69 LBB15_95 + 0x41, 0x0f, 0xaf, 0xf8, //0x00004f69 imull %r8d, %edi + 0x01, 0xcf, //0x00004f6d addl %ecx, %edi + 0x49, 0x89, 0xc5, //0x00004f6f movq %rax, %r13 + 0x44, 0x8b, 0x4d, 0xc8, //0x00004f72 movl $-56(%rbp), %r9d + 0xe9, 0x6a, 0xfd, 0xff, 0xff, //0x00004f76 jmp LBB15_59 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004f7b .p2align 4, 0x90 + //0x00004f80 _vsigned + 0x55, //0x00004f80 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004f81 movq %rsp, %rbp + 0x53, //0x00004f84 pushq %rbx + 0x48, 0x8b, 0x1e, //0x00004f85 movq (%rsi), %rbx + 0x4c, 0x8b, 0x07, //0x00004f88 movq (%rdi), %r8 + 0x4c, 0x8b, 0x57, 0x08, //0x00004f8b movq $8(%rdi), %r10 + 0x48, 0xc7, 0x02, 0x09, 0x00, 0x00, 0x00, //0x00004f8f movq $9, (%rdx) + 0xc5, 0xf8, 0x57, 0xc0, //0x00004f96 vxorps %xmm0, %xmm0, %xmm0 + 0xc5, 0xf8, 0x11, 0x42, 0x08, //0x00004f9a vmovups %xmm0, $8(%rdx) + 0x48, 0x8b, 0x0e, //0x00004f9f movq (%rsi), %rcx + 0x48, 0x89, 0x4a, 0x18, //0x00004fa2 movq %rcx, $24(%rdx) + 0x4c, 0x39, 0xd3, //0x00004fa6 cmpq %r10, %rbx + 0x0f, 0x83, 0x44, 0x00, 0x00, 0x00, //0x00004fa9 jae LBB16_1 + 0x41, 0x8a, 0x0c, 0x18, //0x00004faf movb (%r8,%rbx), %cl + 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00004fb3 movl $1, %r9d + 0x80, 0xf9, 0x2d, //0x00004fb9 cmpb $45, %cl + 0x0f, 0x85, 0x17, 0x00, 0x00, 0x00, //0x00004fbc jne LBB16_5 + 0x48, 0xff, 0xc3, //0x00004fc2 incq %rbx + 0x4c, 0x39, 0xd3, //0x00004fc5 cmpq %r10, %rbx + 0x0f, 0x83, 0x25, 0x00, 0x00, 0x00, //0x00004fc8 jae LBB16_1 + 0x41, 0x8a, 0x0c, 0x18, //0x00004fce movb (%r8,%rbx), %cl + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00004fd2 movq $-1, %r9 + //0x00004fd9 LBB16_5 + 0x8d, 0x79, 0xd0, //0x00004fd9 leal $-48(%rcx), %edi + 0x40, 0x80, 0xff, 0x0a, //0x00004fdc cmpb $10, %dil + 0x0f, 0x82, 0x1a, 0x00, 0x00, 0x00, //0x00004fe0 jb LBB16_7 + 0x48, 0x89, 0x1e, //0x00004fe6 movq %rbx, (%rsi) + 0x48, 0xc7, 0x02, 0xfe, 0xff, 0xff, 0xff, //0x00004fe9 movq $-2, (%rdx) + 0x5b, //0x00004ff0 popq %rbx + 0x5d, //0x00004ff1 popq %rbp + 0xc3, //0x00004ff2 retq + //0x00004ff3 LBB16_1 + 0x4c, 0x89, 0x16, //0x00004ff3 movq %r10, (%rsi) + 0x48, 0xc7, 0x02, 0xff, 0xff, 0xff, 0xff, //0x00004ff6 movq $-1, (%rdx) + 0x5b, //0x00004ffd popq %rbx + 0x5d, //0x00004ffe popq %rbp + 0xc3, //0x00004fff retq + //0x00005000 LBB16_7 + 0x80, 0xf9, 0x30, //0x00005000 cmpb $48, %cl + 0x0f, 0x85, 0x35, 0x00, 0x00, 0x00, //0x00005003 jne LBB16_8 + 0x48, 0x8d, 0x7b, 0x01, //0x00005009 leaq $1(%rbx), %rdi + 0x4c, 0x39, 0xd3, //0x0000500d cmpq %r10, %rbx + 0x0f, 0x83, 0x71, 0x00, 0x00, 0x00, //0x00005010 jae LBB16_17 + 0x41, 0x8a, 0x0c, 0x38, //0x00005016 movb (%r8,%rdi), %cl + 0x80, 0xc1, 0xd2, //0x0000501a addb $-46, %cl + 0x80, 0xf9, 0x37, //0x0000501d cmpb $55, %cl + 0x0f, 0x87, 0x61, 0x00, 0x00, 0x00, //0x00005020 ja LBB16_17 + 0x44, 0x0f, 0xb6, 0xd9, //0x00005026 movzbl %cl, %r11d + 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x0000502a movabsq $36028797027352577, %rcx + 0x4c, 0x0f, 0xa3, 0xd9, //0x00005034 btq %r11, %rcx + 0x0f, 0x83, 0x49, 0x00, 0x00, 0x00, //0x00005038 jae LBB16_17 + //0x0000503e LBB16_8 + 0x31, 0xff, //0x0000503e xorl %edi, %edi + //0x00005040 .p2align 4, 0x90 + //0x00005040 LBB16_9 + 0x4c, 0x39, 0xd3, //0x00005040 cmpq %r10, %rbx + 0x0f, 0x83, 0x6c, 0x00, 0x00, 0x00, //0x00005043 jae LBB16_22 + 0x49, 0x0f, 0xbe, 0x0c, 0x18, //0x00005049 movsbq (%r8,%rbx), %rcx + 0x8d, 0x41, 0xd0, //0x0000504e leal $-48(%rcx), %eax + 0x3c, 0x09, //0x00005051 cmpb $9, %al + 0x0f, 0x87, 0x34, 0x00, 0x00, 0x00, //0x00005053 ja LBB16_18 + 0x48, 0x6b, 0xff, 0x0a, //0x00005059 imulq $10, %rdi, %rdi + 0x0f, 0x80, 0x14, 0x00, 0x00, 0x00, //0x0000505d jo LBB16_13 + 0x48, 0xff, 0xc3, //0x00005063 incq %rbx + 0x48, 0x83, 0xc1, 0xd0, //0x00005066 addq $-48, %rcx + 0x49, 0x0f, 0xaf, 0xc9, //0x0000506a imulq %r9, %rcx + 0x48, 0x01, 0xcf, //0x0000506e addq %rcx, %rdi + 0x0f, 0x81, 0xc9, 0xff, 0xff, 0xff, //0x00005071 jno LBB16_9 + //0x00005077 LBB16_13 + 0x48, 0xff, 0xcb, //0x00005077 decq %rbx + 0x48, 0x89, 0x1e, //0x0000507a movq %rbx, (%rsi) + 0x48, 0xc7, 0x02, 0xfb, 0xff, 0xff, 0xff, //0x0000507d movq $-5, (%rdx) + 0x5b, //0x00005084 popq %rbx + 0x5d, //0x00005085 popq %rbp + 0xc3, //0x00005086 retq + //0x00005087 LBB16_17 + 0x48, 0x89, 0x3e, //0x00005087 movq %rdi, (%rsi) + 0x5b, //0x0000508a popq %rbx + 0x5d, //0x0000508b popq %rbp + 0xc3, //0x0000508c retq + //0x0000508d LBB16_18 + 0x80, 0xf9, 0x65, //0x0000508d cmpb $101, %cl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00005090 je LBB16_21 + 0x80, 0xf9, 0x45, //0x00005096 cmpb $69, %cl + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x00005099 je LBB16_21 + 0x80, 0xf9, 0x2e, //0x0000509f cmpb $46, %cl + 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x000050a2 jne LBB16_22 + //0x000050a8 LBB16_21 + 0x48, 0x89, 0x1e, //0x000050a8 movq %rbx, (%rsi) + 0x48, 0xc7, 0x02, 0xfa, 0xff, 0xff, 0xff, //0x000050ab movq $-6, (%rdx) + 0x5b, //0x000050b2 popq %rbx + 0x5d, //0x000050b3 popq %rbp + 0xc3, //0x000050b4 retq + //0x000050b5 LBB16_22 + 0x48, 0x89, 0x1e, //0x000050b5 movq %rbx, (%rsi) + 0x48, 0x89, 0x7a, 0x10, //0x000050b8 movq %rdi, $16(%rdx) + 0x5b, //0x000050bc popq %rbx + 0x5d, //0x000050bd popq %rbp + 0xc3, //0x000050be retq + 0x90, //0x000050bf .p2align 4, 0x90 + //0x000050c0 _vunsigned + 0x55, //0x000050c0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000050c1 movq %rsp, %rbp + 0x49, 0x89, 0xd0, //0x000050c4 movq %rdx, %r8 + 0x48, 0x8b, 0x0e, //0x000050c7 movq (%rsi), %rcx + 0x4c, 0x8b, 0x0f, //0x000050ca movq (%rdi), %r9 + 0x4c, 0x8b, 0x5f, 0x08, //0x000050cd movq $8(%rdi), %r11 + 0x48, 0xc7, 0x02, 0x09, 0x00, 0x00, 0x00, //0x000050d1 movq $9, (%rdx) + 0xc5, 0xf8, 0x57, 0xc0, //0x000050d8 vxorps %xmm0, %xmm0, %xmm0 + 0xc5, 0xf8, 0x11, 0x42, 0x08, //0x000050dc vmovups %xmm0, $8(%rdx) + 0x48, 0x8b, 0x06, //0x000050e1 movq (%rsi), %rax + 0x48, 0x89, 0x42, 0x18, //0x000050e4 movq %rax, $24(%rdx) + 0x4c, 0x39, 0xd9, //0x000050e8 cmpq %r11, %rcx + 0x0f, 0x83, 0x18, 0x00, 0x00, 0x00, //0x000050eb jae LBB17_1 + 0x41, 0x8a, 0x04, 0x09, //0x000050f1 movb (%r9,%rcx), %al + 0x3c, 0x2d, //0x000050f5 cmpb $45, %al + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x000050f7 jne LBB17_4 + //0x000050fd LBB17_3 + 0x48, 0x89, 0x0e, //0x000050fd movq %rcx, (%rsi) + 0x49, 0xc7, 0x00, 0xfa, 0xff, 0xff, 0xff, //0x00005100 movq $-6, (%r8) + 0x5d, //0x00005107 popq %rbp + 0xc3, //0x00005108 retq + //0x00005109 LBB17_1 + 0x4c, 0x89, 0x1e, //0x00005109 movq %r11, (%rsi) + 0x49, 0xc7, 0x00, 0xff, 0xff, 0xff, 0xff, //0x0000510c movq $-1, (%r8) + 0x5d, //0x00005113 popq %rbp + 0xc3, //0x00005114 retq + //0x00005115 LBB17_4 + 0x8d, 0x50, 0xd0, //0x00005115 leal $-48(%rax), %edx + 0x80, 0xfa, 0x0a, //0x00005118 cmpb $10, %dl + 0x0f, 0x82, 0x0c, 0x00, 0x00, 0x00, //0x0000511b jb LBB17_6 + 0x48, 0x89, 0x0e, //0x00005121 movq %rcx, (%rsi) + 0x49, 0xc7, 0x00, 0xfe, 0xff, 0xff, 0xff, //0x00005124 movq $-2, (%r8) + 0x5d, //0x0000512b popq %rbp + 0xc3, //0x0000512c retq + //0x0000512d LBB17_6 + 0x3c, 0x30, //0x0000512d cmpb $48, %al + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x0000512f jne LBB17_7 + 0x41, 0x8a, 0x44, 0x09, 0x01, //0x00005135 movb $1(%r9,%rcx), %al + 0x04, 0xd2, //0x0000513a addb $-46, %al + 0x3c, 0x37, //0x0000513c cmpb $55, %al + 0x0f, 0x87, 0xb6, 0x00, 0x00, 0x00, //0x0000513e ja LBB17_16 + 0x0f, 0xb6, 0xc0, //0x00005144 movzbl %al, %eax + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00005147 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xc2, //0x00005151 btq %rax, %rdx + 0x0f, 0x83, 0x9f, 0x00, 0x00, 0x00, //0x00005155 jae LBB17_16 + //0x0000515b LBB17_7 + 0x31, 0xc0, //0x0000515b xorl %eax, %eax + 0x41, 0xba, 0x0a, 0x00, 0x00, 0x00, //0x0000515d movl $10, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005163 .p2align 4, 0x90 + //0x00005170 LBB17_8 + 0x4c, 0x39, 0xd9, //0x00005170 cmpq %r11, %rcx + 0x0f, 0x83, 0x78, 0x00, 0x00, 0x00, //0x00005173 jae LBB17_20 + 0x41, 0x0f, 0xbe, 0x3c, 0x09, //0x00005179 movsbl (%r9,%rcx), %edi + 0x8d, 0x57, 0xd0, //0x0000517e leal $-48(%rdi), %edx + 0x80, 0xfa, 0x09, //0x00005181 cmpb $9, %dl + 0x0f, 0x87, 0x49, 0x00, 0x00, 0x00, //0x00005184 ja LBB17_17 + 0x49, 0xf7, 0xe2, //0x0000518a mulq %r10 + 0x0f, 0x80, 0x31, 0x00, 0x00, 0x00, //0x0000518d jo LBB17_13 + 0x48, 0xff, 0xc1, //0x00005193 incq %rcx + 0x83, 0xc7, 0xd0, //0x00005196 addl $-48, %edi + 0x48, 0x63, 0xd7, //0x00005199 movslq %edi, %rdx + 0x48, 0x89, 0xd7, //0x0000519c movq %rdx, %rdi + 0x48, 0xc1, 0xff, 0x3f, //0x0000519f sarq $63, %rdi + 0x48, 0x01, 0xd0, //0x000051a3 addq %rdx, %rax + 0x48, 0x83, 0xd7, 0x00, //0x000051a6 adcq $0, %rdi + 0x89, 0xfa, //0x000051aa movl %edi, %edx + 0x83, 0xe2, 0x01, //0x000051ac andl $1, %edx + 0x48, 0xf7, 0xda, //0x000051af negq %rdx + 0x48, 0x31, 0xd7, //0x000051b2 xorq %rdx, %rdi + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x000051b5 jne LBB17_13 + 0x48, 0x85, 0xd2, //0x000051bb testq %rdx, %rdx + 0x0f, 0x89, 0xac, 0xff, 0xff, 0xff, //0x000051be jns LBB17_8 + //0x000051c4 LBB17_13 + 0x48, 0xff, 0xc9, //0x000051c4 decq %rcx + 0x48, 0x89, 0x0e, //0x000051c7 movq %rcx, (%rsi) + 0x49, 0xc7, 0x00, 0xfb, 0xff, 0xff, 0xff, //0x000051ca movq $-5, (%r8) + 0x5d, //0x000051d1 popq %rbp + 0xc3, //0x000051d2 retq + //0x000051d3 LBB17_17 + 0x40, 0x80, 0xff, 0x65, //0x000051d3 cmpb $101, %dil + 0x0f, 0x84, 0x20, 0xff, 0xff, 0xff, //0x000051d7 je LBB17_3 + 0x40, 0x80, 0xff, 0x45, //0x000051dd cmpb $69, %dil + 0x0f, 0x84, 0x16, 0xff, 0xff, 0xff, //0x000051e1 je LBB17_3 + 0x40, 0x80, 0xff, 0x2e, //0x000051e7 cmpb $46, %dil + 0x0f, 0x84, 0x0c, 0xff, 0xff, 0xff, //0x000051eb je LBB17_3 + //0x000051f1 LBB17_20 + 0x48, 0x89, 0x0e, //0x000051f1 movq %rcx, (%rsi) + 0x49, 0x89, 0x40, 0x10, //0x000051f4 movq %rax, $16(%r8) + 0x5d, //0x000051f8 popq %rbp + 0xc3, //0x000051f9 retq + //0x000051fa LBB17_16 + 0x48, 0xff, 0xc1, //0x000051fa incq %rcx + 0x48, 0x89, 0x0e, //0x000051fd movq %rcx, (%rsi) + 0x5d, //0x00005200 popq %rbp + 0xc3, //0x00005201 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005202 .p2align 4, 0x00 + //0x00005210 LCPI18_0 + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005210 .quad 1 + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005218 .quad 5 + //0x00005220 .p2align 4, 0x90 + //0x00005220 _skip_array + 0x55, //0x00005220 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005221 movq %rsp, %rbp + 0x48, 0x89, 0xd0, //0x00005224 movq %rdx, %rax + 0x48, 0x89, 0xf2, //0x00005227 movq %rsi, %rdx + 0x48, 0x89, 0xfe, //0x0000522a movq %rdi, %rsi + 0xc5, 0xf8, 0x28, 0x05, 0xdb, 0xff, 0xff, 0xff, //0x0000522d vmovaps $-37(%rip), %xmm0 /* LCPI18_0+0(%rip) */ + 0xc5, 0xf8, 0x11, 0x00, //0x00005235 vmovups %xmm0, (%rax) + 0x48, 0x89, 0xc7, //0x00005239 movq %rax, %rdi + 0x5d, //0x0000523c popq %rbp + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x0000523d jmp _fsm_exec + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005242 .p2align 4, 0x90 + //0x00005250 _fsm_exec + 0x55, //0x00005250 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005251 movq %rsp, %rbp + 0x41, 0x57, //0x00005254 pushq %r15 + 0x41, 0x56, //0x00005256 pushq %r14 + 0x41, 0x55, //0x00005258 pushq %r13 + 0x41, 0x54, //0x0000525a pushq %r12 + 0x53, //0x0000525c pushq %rbx + 0x48, 0x83, 0xec, 0x28, //0x0000525d subq $40, %rsp + 0x48, 0x89, 0x4d, 0xb8, //0x00005261 movq %rcx, $-72(%rbp) + 0x48, 0x83, 0x3f, 0x00, //0x00005265 cmpq $0, (%rdi) + 0x0f, 0x84, 0x14, 0x04, 0x00, 0x00, //0x00005269 je LBB19_2 + 0x49, 0x89, 0xd0, //0x0000526f movq %rdx, %r8 + 0x49, 0x89, 0xfd, //0x00005272 movq %rdi, %r13 + 0x48, 0x89, 0x75, 0xc8, //0x00005275 movq %rsi, $-56(%rbp) + 0x48, 0x8d, 0x46, 0x08, //0x00005279 leaq $8(%rsi), %rax + 0x48, 0x89, 0x45, 0xc0, //0x0000527d movq %rax, $-64(%rbp) + 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x00005281 movq $-1, %r12 + 0xe9, 0x23, 0x00, 0x00, 0x00, //0x00005288 jmp LBB19_4 + //0x0000528d LBB19_3 + 0x48, 0x8d, 0x48, 0x03, //0x0000528d leaq $3(%rax), %rcx + 0x49, 0x89, 0x08, //0x00005291 movq %rcx, (%r8) + 0x48, 0x85, 0xc0, //0x00005294 testq %rax, %rax + 0x0f, 0x8e, 0x56, 0x04, 0x00, 0x00, //0x00005297 jle LBB19_62 + 0x90, 0x90, 0x90, //0x0000529d .p2align 4, 0x90 + //0x000052a0 LBB19_39 + 0x49, 0x8b, 0x55, 0x00, //0x000052a0 movq (%r13), %rdx + 0x4d, 0x89, 0xe6, //0x000052a4 movq %r12, %r14 + 0x48, 0x85, 0xd2, //0x000052a7 testq %rdx, %rdx + 0x0f, 0x84, 0x22, 0x04, 0x00, 0x00, //0x000052aa je LBB19_65 + //0x000052b0 LBB19_4 + 0x48, 0x8b, 0x5d, 0xc8, //0x000052b0 movq $-56(%rbp), %rbx + 0x48, 0x8b, 0x3b, //0x000052b4 movq (%rbx), %rdi + 0x48, 0x8b, 0x73, 0x08, //0x000052b7 movq $8(%rbx), %rsi + 0x4d, 0x89, 0xc7, //0x000052bb movq %r8, %r15 + 0x4c, 0x89, 0xc2, //0x000052be movq %r8, %rdx + 0xe8, 0x5a, 0xef, 0xff, 0xff, //0x000052c1 callq _advance_ns + 0x84, 0xc0, //0x000052c6 testb %al, %al + 0x0f, 0x84, 0xb5, 0x03, 0x00, 0x00, //0x000052c8 je LBB19_2 + 0x49, 0x8b, 0x4d, 0x00, //0x000052ce movq (%r13), %rcx + 0x41, 0x8b, 0x7c, 0xcd, 0x00, //0x000052d2 movl (%r13,%rcx,8), %edi + 0x49, 0x83, 0xfc, 0xff, //0x000052d7 cmpq $-1, %r12 + 0x4d, 0x89, 0xf8, //0x000052db movq %r15, %r8 + 0x0f, 0x85, 0x06, 0x00, 0x00, 0x00, //0x000052de jne LBB19_7 + 0x4d, 0x8b, 0x20, //0x000052e4 movq (%r8), %r12 + 0x49, 0xff, 0xcc, //0x000052e7 decq %r12 + //0x000052ea LBB19_7 + 0x44, 0x0f, 0xbe, 0xc8, //0x000052ea movsbl %al, %r9d + 0x48, 0x8d, 0x51, 0xff, //0x000052ee leaq $-1(%rcx), %rdx + 0xff, 0xcf, //0x000052f2 decl %edi + 0x83, 0xff, 0x05, //0x000052f4 cmpl $5, %edi + 0x0f, 0x87, 0x39, 0x00, 0x00, 0x00, //0x000052f7 ja LBB19_12 + 0x48, 0x8d, 0x35, 0x08, 0x05, 0x00, 0x00, //0x000052fd leaq $1288(%rip), %rsi /* LJTI19_0+0(%rip) */ + 0x48, 0x63, 0x3c, 0xbe, //0x00005304 movslq (%rsi,%rdi,4), %rdi + 0x48, 0x01, 0xf7, //0x00005308 addq %rsi, %rdi + 0xff, 0xe7, //0x0000530b jmpq *%rdi + //0x0000530d LBB19_9 + 0x41, 0x83, 0xf9, 0x2c, //0x0000530d cmpl $44, %r9d + 0x0f, 0x84, 0x7b, 0x01, 0x00, 0x00, //0x00005311 je LBB19_31 + 0x41, 0x83, 0xf9, 0x5d, //0x00005317 cmpl $93, %r9d + 0x0f, 0x85, 0xaa, 0x03, 0x00, 0x00, //0x0000531b jne LBB19_64 + 0x49, 0x89, 0x55, 0x00, //0x00005321 movq %rdx, (%r13) + 0x4d, 0x89, 0xe6, //0x00005325 movq %r12, %r14 + 0x48, 0x85, 0xd2, //0x00005328 testq %rdx, %rdx + 0x0f, 0x85, 0x7f, 0xff, 0xff, 0xff, //0x0000532b jne LBB19_4 + 0xe9, 0x9c, 0x03, 0x00, 0x00, //0x00005331 jmp LBB19_65 + //0x00005336 LBB19_12 + 0x49, 0x89, 0x55, 0x00, //0x00005336 movq %rdx, (%r13) + 0x41, 0x83, 0xf9, 0x7b, //0x0000533a cmpl $123, %r9d + 0x0f, 0x86, 0xef, 0x00, 0x00, 0x00, //0x0000533e jbe LBB19_28 + 0xe9, 0x82, 0x03, 0x00, 0x00, //0x00005344 jmp LBB19_64 + //0x00005349 LBB19_13 + 0x41, 0x83, 0xf9, 0x2c, //0x00005349 cmpl $44, %r9d + 0x0f, 0x84, 0x62, 0x01, 0x00, 0x00, //0x0000534d je LBB19_33 + 0x41, 0x83, 0xf9, 0x7d, //0x00005353 cmpl $125, %r9d + 0x0f, 0x85, 0x6e, 0x03, 0x00, 0x00, //0x00005357 jne LBB19_64 + 0x49, 0x89, 0x55, 0x00, //0x0000535d movq %rdx, (%r13) + 0x4d, 0x89, 0xe6, //0x00005361 movq %r12, %r14 + 0x48, 0x85, 0xd2, //0x00005364 testq %rdx, %rdx + 0x0f, 0x85, 0x43, 0xff, 0xff, 0xff, //0x00005367 jne LBB19_4 + 0xe9, 0x60, 0x03, 0x00, 0x00, //0x0000536d jmp LBB19_65 + //0x00005372 LBB19_16 + 0x3c, 0x22, //0x00005372 cmpb $34, %al + 0x0f, 0x85, 0x51, 0x03, 0x00, 0x00, //0x00005374 jne LBB19_64 + 0x49, 0xc7, 0x44, 0xcd, 0x00, 0x04, 0x00, 0x00, 0x00, //0x0000537a movq $4, (%r13,%rcx,8) + 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x00005383 movq $-1, $-48(%rbp) + 0x4d, 0x8b, 0x38, //0x0000538b movq (%r8), %r15 + 0x48, 0x89, 0xdf, //0x0000538e movq %rbx, %rdi + //0x00005391 LBB19_18 + 0x4c, 0x89, 0xfe, //0x00005391 movq %r15, %rsi + 0x48, 0x8d, 0x55, 0xd0, //0x00005394 leaq $-48(%rbp), %rdx + 0x48, 0x8b, 0x4d, 0xb8, //0x00005398 movq $-72(%rbp), %rcx + 0x4c, 0x89, 0xc3, //0x0000539c movq %r8, %rbx + 0xe8, 0x5c, 0xf1, 0xff, 0xff, //0x0000539f callq _advance_string + 0x49, 0x89, 0xc6, //0x000053a4 movq %rax, %r14 + 0x48, 0x85, 0xc0, //0x000053a7 testq %rax, %rax + 0x0f, 0x88, 0xeb, 0x02, 0x00, 0x00, //0x000053aa js LBB19_55 + 0x4c, 0x89, 0x33, //0x000053b0 movq %r14, (%rbx) + 0x4d, 0x85, 0xff, //0x000053b3 testq %r15, %r15 + 0x49, 0x89, 0xd8, //0x000053b6 movq %rbx, %r8 + 0x0f, 0x8f, 0xe1, 0xfe, 0xff, 0xff, //0x000053b9 jg LBB19_39 + 0xe9, 0xef, 0x02, 0x00, 0x00, //0x000053bf jmp LBB19_56 + //0x000053c4 LBB19_20 + 0x3c, 0x3a, //0x000053c4 cmpb $58, %al + 0x0f, 0x85, 0xff, 0x02, 0x00, 0x00, //0x000053c6 jne LBB19_64 + 0x49, 0xc7, 0x44, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000053cc movq $0, (%r13,%rcx,8) + 0xe9, 0xc6, 0xfe, 0xff, 0xff, //0x000053d5 jmp LBB19_39 + //0x000053da LBB19_22 + 0x3c, 0x5d, //0x000053da cmpb $93, %al + 0x0f, 0x85, 0x3e, 0x00, 0x00, 0x00, //0x000053dc jne LBB19_27 + 0x49, 0x89, 0x55, 0x00, //0x000053e2 movq %rdx, (%r13) + 0x4d, 0x89, 0xe6, //0x000053e6 movq %r12, %r14 + 0x48, 0x85, 0xd2, //0x000053e9 testq %rdx, %rdx + 0x0f, 0x85, 0xbe, 0xfe, 0xff, 0xff, //0x000053ec jne LBB19_4 + 0xe9, 0xdb, 0x02, 0x00, 0x00, //0x000053f2 jmp LBB19_65 + //0x000053f7 LBB19_24 + 0x41, 0x83, 0xf9, 0x22, //0x000053f7 cmpl $34, %r9d + 0x0f, 0x84, 0xd7, 0x00, 0x00, 0x00, //0x000053fb je LBB19_35 + 0x41, 0x83, 0xf9, 0x7d, //0x00005401 cmpl $125, %r9d + 0x0f, 0x85, 0xc0, 0x02, 0x00, 0x00, //0x00005405 jne LBB19_64 + 0x49, 0x89, 0x55, 0x00, //0x0000540b movq %rdx, (%r13) + 0x4d, 0x89, 0xe6, //0x0000540f movq %r12, %r14 + 0x48, 0x85, 0xd2, //0x00005412 testq %rdx, %rdx + 0x0f, 0x85, 0x95, 0xfe, 0xff, 0xff, //0x00005415 jne LBB19_4 + 0xe9, 0xb2, 0x02, 0x00, 0x00, //0x0000541b jmp LBB19_65 + //0x00005420 LBB19_27 + 0x49, 0xc7, 0x44, 0xcd, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00005420 movq $1, (%r13,%rcx,8) + 0x41, 0x83, 0xf9, 0x7b, //0x00005429 cmpl $123, %r9d + 0x0f, 0x87, 0x98, 0x02, 0x00, 0x00, //0x0000542d ja LBB19_64 + //0x00005433 LBB19_28 + 0x44, 0x89, 0xc8, //0x00005433 movl %r9d, %eax + 0x48, 0x8d, 0x0d, 0xe7, 0x03, 0x00, 0x00, //0x00005436 leaq $999(%rip), %rcx /* LJTI19_1+0(%rip) */ + 0x48, 0x63, 0x04, 0x81, //0x0000543d movslq (%rcx,%rax,4), %rax + 0x48, 0x01, 0xc8, //0x00005441 addq %rcx, %rax + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00005444 movq $-1, %r14 + 0xff, 0xe0, //0x0000544b jmpq *%rax + //0x0000544d LBB19_29 + 0x4c, 0x89, 0xc3, //0x0000544d movq %r8, %rbx + 0x4d, 0x8b, 0x38, //0x00005450 movq (%r8), %r15 + 0x4d, 0x8d, 0x77, 0xff, //0x00005453 leaq $-1(%r15), %r14 + 0x48, 0x8b, 0x45, 0xc8, //0x00005457 movq $-56(%rbp), %rax + 0x48, 0x8b, 0x38, //0x0000545b movq (%rax), %rdi + 0x4c, 0x01, 0xf7, //0x0000545e addq %r14, %rdi + 0x48, 0x8b, 0x70, 0x08, //0x00005461 movq $8(%rax), %rsi + 0x4c, 0x29, 0xf6, //0x00005465 subq %r14, %rsi + 0xe8, 0x23, 0x08, 0x00, 0x00, //0x00005468 callq _do_skip_number + 0x48, 0x85, 0xc0, //0x0000546d testq %rax, %rax + 0x0f, 0x88, 0x48, 0x02, 0x00, 0x00, //0x00005470 js LBB19_57 + 0x48, 0x8b, 0x0b, //0x00005476 movq (%rbx), %rcx + 0x48, 0x8d, 0x44, 0x08, 0xff, //0x00005479 leaq $-1(%rax,%rcx), %rax + 0x48, 0x89, 0x03, //0x0000547e movq %rax, (%rbx) + 0x4d, 0x85, 0xff, //0x00005481 testq %r15, %r15 + 0x49, 0x89, 0xd8, //0x00005484 movq %rbx, %r8 + 0x0f, 0x8f, 0x13, 0xfe, 0xff, 0xff, //0x00005487 jg LBB19_39 + 0xe9, 0x40, 0x02, 0x00, 0x00, //0x0000548d jmp LBB19_65 + //0x00005492 LBB19_31 + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00005492 cmpq $4095, %rcx + 0x0f, 0x8f, 0xf0, 0x01, 0x00, 0x00, //0x00005499 jg LBB19_58 + 0x48, 0x8d, 0x41, 0x01, //0x0000549f leaq $1(%rcx), %rax + 0x49, 0x89, 0x45, 0x00, //0x000054a3 movq %rax, (%r13) + 0x49, 0xc7, 0x44, 0xcd, 0x08, 0x00, 0x00, 0x00, 0x00, //0x000054a7 movq $0, $8(%r13,%rcx,8) + 0xe9, 0xeb, 0xfd, 0xff, 0xff, //0x000054b0 jmp LBB19_39 + //0x000054b5 LBB19_33 + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000054b5 cmpq $4095, %rcx + 0x0f, 0x8f, 0xcd, 0x01, 0x00, 0x00, //0x000054bc jg LBB19_58 + 0x48, 0x8d, 0x41, 0x01, //0x000054c2 leaq $1(%rcx), %rax + 0x49, 0x89, 0x45, 0x00, //0x000054c6 movq %rax, (%r13) + 0x49, 0xc7, 0x44, 0xcd, 0x08, 0x03, 0x00, 0x00, 0x00, //0x000054ca movq $3, $8(%r13,%rcx,8) + 0xe9, 0xc8, 0xfd, 0xff, 0xff, //0x000054d3 jmp LBB19_39 + //0x000054d8 LBB19_35 + 0x49, 0xc7, 0x44, 0xcd, 0x00, 0x02, 0x00, 0x00, 0x00, //0x000054d8 movq $2, (%r13,%rcx,8) + 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x000054e1 movq $-1, $-48(%rbp) + 0x4d, 0x8b, 0x38, //0x000054e9 movq (%r8), %r15 + 0x48, 0x89, 0xdf, //0x000054ec movq %rbx, %rdi + 0x4c, 0x89, 0xfe, //0x000054ef movq %r15, %rsi + 0x48, 0x8d, 0x55, 0xd0, //0x000054f2 leaq $-48(%rbp), %rdx + 0x48, 0x8b, 0x4d, 0xb8, //0x000054f6 movq $-72(%rbp), %rcx + 0x4c, 0x89, 0xc3, //0x000054fa movq %r8, %rbx + 0xe8, 0xfe, 0xef, 0xff, 0xff, //0x000054fd callq _advance_string + 0x49, 0x89, 0xc6, //0x00005502 movq %rax, %r14 + 0x48, 0x85, 0xc0, //0x00005505 testq %rax, %rax + 0x0f, 0x88, 0x8d, 0x01, 0x00, 0x00, //0x00005508 js LBB19_55 + 0x4c, 0x89, 0x33, //0x0000550e movq %r14, (%rbx) + 0x4d, 0x85, 0xff, //0x00005511 testq %r15, %r15 + 0x0f, 0x8e, 0x99, 0x01, 0x00, 0x00, //0x00005514 jle LBB19_56 + 0x49, 0x8b, 0x45, 0x00, //0x0000551a movq (%r13), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x0000551e cmpq $4095, %rax + 0x0f, 0x8f, 0x65, 0x01, 0x00, 0x00, //0x00005524 jg LBB19_58 + 0x49, 0x89, 0xd8, //0x0000552a movq %rbx, %r8 + 0x48, 0x8d, 0x48, 0x01, //0x0000552d leaq $1(%rax), %rcx + 0x49, 0x89, 0x4d, 0x00, //0x00005531 movq %rcx, (%r13) + 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x04, 0x00, 0x00, 0x00, //0x00005535 movq $4, $8(%r13,%rax,8) + 0xe9, 0x5d, 0xfd, 0xff, 0xff, //0x0000553e jmp LBB19_39 + //0x00005543 LBB19_40 + 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x00005543 movq $-1, $-48(%rbp) + 0x4d, 0x8b, 0x38, //0x0000554b movq (%r8), %r15 + 0x48, 0x8b, 0x7d, 0xc8, //0x0000554e movq $-56(%rbp), %rdi + 0xe9, 0x3a, 0xfe, 0xff, 0xff, //0x00005552 jmp LBB19_18 + //0x00005557 LBB19_41 + 0x4d, 0x8b, 0x30, //0x00005557 movq (%r8), %r14 + 0x48, 0x8b, 0x45, 0xc8, //0x0000555a movq $-56(%rbp), %rax + 0x48, 0x8b, 0x38, //0x0000555e movq (%rax), %rdi + 0x4c, 0x01, 0xf7, //0x00005561 addq %r14, %rdi + 0x48, 0x8b, 0x70, 0x08, //0x00005564 movq $8(%rax), %rsi + 0x4c, 0x29, 0xf6, //0x00005568 subq %r14, %rsi + 0xe8, 0x20, 0x07, 0x00, 0x00, //0x0000556b callq _do_skip_number + 0x4d, 0x89, 0xf8, //0x00005570 movq %r15, %r8 + 0x49, 0x8b, 0x0f, //0x00005573 movq (%r15), %rcx + 0x48, 0x85, 0xc0, //0x00005576 testq %rax, %rax + 0x0f, 0x88, 0x7f, 0x01, 0x00, 0x00, //0x00005579 js LBB19_63 + 0x48, 0x01, 0xc1, //0x0000557f addq %rax, %rcx + 0x49, 0x89, 0x08, //0x00005582 movq %rcx, (%r8) + 0x4d, 0x85, 0xf6, //0x00005585 testq %r14, %r14 + 0x0f, 0x8f, 0x12, 0xfd, 0xff, 0xff, //0x00005588 jg LBB19_39 + 0xe9, 0x79, 0x01, 0x00, 0x00, //0x0000558e jmp LBB19_68 + //0x00005593 LBB19_43 + 0x49, 0x8b, 0x45, 0x00, //0x00005593 movq (%r13), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00005597 cmpq $4095, %rax + 0x0f, 0x8f, 0xec, 0x00, 0x00, 0x00, //0x0000559d jg LBB19_58 + 0x48, 0x8d, 0x48, 0x01, //0x000055a3 leaq $1(%rax), %rcx + 0x49, 0x89, 0x4d, 0x00, //0x000055a7 movq %rcx, (%r13) + 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x05, 0x00, 0x00, 0x00, //0x000055ab movq $5, $8(%r13,%rax,8) + 0xe9, 0xe7, 0xfc, 0xff, 0xff, //0x000055b4 jmp LBB19_39 + //0x000055b9 LBB19_45 + 0x49, 0x8b, 0x00, //0x000055b9 movq (%r8), %rax + 0x48, 0x8b, 0x4d, 0xc0, //0x000055bc movq $-64(%rbp), %rcx + 0x48, 0x8b, 0x09, //0x000055c0 movq (%rcx), %rcx + 0x48, 0x8d, 0x51, 0xfc, //0x000055c3 leaq $-4(%rcx), %rdx + 0x48, 0x39, 0xd0, //0x000055c7 cmpq %rdx, %rax + 0x0f, 0x87, 0x14, 0x01, 0x00, 0x00, //0x000055ca ja LBB19_61 + 0x48, 0x8b, 0x4d, 0xc8, //0x000055d0 movq $-56(%rbp), %rcx + 0x48, 0x8b, 0x09, //0x000055d4 movq (%rcx), %rcx + 0x8b, 0x14, 0x01, //0x000055d7 movl (%rcx,%rax), %edx + 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x000055da cmpl $1702063201, %edx + 0x0f, 0x85, 0xd3, 0x01, 0x00, 0x00, //0x000055e0 jne LBB19_78 + 0x48, 0x8d, 0x48, 0x04, //0x000055e6 leaq $4(%rax), %rcx + 0x49, 0x89, 0x08, //0x000055ea movq %rcx, (%r8) + 0x48, 0x85, 0xc0, //0x000055ed testq %rax, %rax + 0x0f, 0x8f, 0xaa, 0xfc, 0xff, 0xff, //0x000055f0 jg LBB19_39 + 0xe9, 0xf8, 0x00, 0x00, 0x00, //0x000055f6 jmp LBB19_62 + //0x000055fb LBB19_48 + 0x49, 0x8b, 0x00, //0x000055fb movq (%r8), %rax + 0x48, 0x8b, 0x4d, 0xc0, //0x000055fe movq $-64(%rbp), %rcx + 0x48, 0x8b, 0x09, //0x00005602 movq (%rcx), %rcx + 0x48, 0x8d, 0x51, 0xfd, //0x00005605 leaq $-3(%rcx), %rdx + 0x48, 0x39, 0xd0, //0x00005609 cmpq %rdx, %rax + 0x0f, 0x87, 0xd2, 0x00, 0x00, 0x00, //0x0000560c ja LBB19_61 + 0x48, 0x8b, 0x4d, 0xc8, //0x00005612 movq $-56(%rbp), %rcx + 0x48, 0x8b, 0x09, //0x00005616 movq (%rcx), %rcx + 0x81, 0x7c, 0x01, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00005619 cmpl $1819047278, $-1(%rcx,%rax) + 0x0f, 0x84, 0x66, 0xfc, 0xff, 0xff, //0x00005621 je LBB19_3 + 0xe9, 0xe8, 0x00, 0x00, 0x00, //0x00005627 jmp LBB19_69 + //0x0000562c LBB19_50 + 0x49, 0x8b, 0x00, //0x0000562c movq (%r8), %rax + 0x48, 0x8b, 0x4d, 0xc0, //0x0000562f movq $-64(%rbp), %rcx + 0x48, 0x8b, 0x09, //0x00005633 movq (%rcx), %rcx + 0x48, 0x8d, 0x51, 0xfd, //0x00005636 leaq $-3(%rcx), %rdx + 0x48, 0x39, 0xd0, //0x0000563a cmpq %rdx, %rax + 0x0f, 0x87, 0xa1, 0x00, 0x00, 0x00, //0x0000563d ja LBB19_61 + 0x48, 0x8b, 0x4d, 0xc8, //0x00005643 movq $-56(%rbp), %rcx + 0x48, 0x8b, 0x09, //0x00005647 movq (%rcx), %rcx + 0x81, 0x7c, 0x01, 0xff, 0x74, 0x72, 0x75, 0x65, //0x0000564a cmpl $1702195828, $-1(%rcx,%rax) + 0x0f, 0x84, 0x35, 0xfc, 0xff, 0xff, //0x00005652 je LBB19_3 + 0xe9, 0x06, 0x01, 0x00, 0x00, //0x00005658 jmp LBB19_73 + //0x0000565d LBB19_52 + 0x49, 0x8b, 0x45, 0x00, //0x0000565d movq (%r13), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00005661 cmpq $4095, %rax + 0x0f, 0x8f, 0x22, 0x00, 0x00, 0x00, //0x00005667 jg LBB19_58 + 0x48, 0x8d, 0x48, 0x01, //0x0000566d leaq $1(%rax), %rcx + 0x49, 0x89, 0x4d, 0x00, //0x00005671 movq %rcx, (%r13) + 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x06, 0x00, 0x00, 0x00, //0x00005675 movq $6, $8(%r13,%rax,8) + 0xe9, 0x1d, 0xfc, 0xff, 0xff, //0x0000567e jmp LBB19_39 + //0x00005683 LBB19_2 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00005683 movq $-1, %r14 + 0xe9, 0x43, 0x00, 0x00, 0x00, //0x0000568a jmp LBB19_65 + //0x0000568f LBB19_58 + 0x49, 0xc7, 0xc6, 0xf9, 0xff, 0xff, 0xff, //0x0000568f movq $-7, %r14 + 0xe9, 0x37, 0x00, 0x00, 0x00, //0x00005696 jmp LBB19_65 + //0x0000569b LBB19_55 + 0x49, 0x83, 0xfe, 0xff, //0x0000569b cmpq $-1, %r14 + 0x48, 0x8d, 0x45, 0xd0, //0x0000569f leaq $-48(%rbp), %rax + 0x48, 0x0f, 0x44, 0x45, 0xc0, //0x000056a3 cmoveq $-64(%rbp), %rax + 0x48, 0x8b, 0x00, //0x000056a8 movq (%rax), %rax + 0x48, 0x89, 0x03, //0x000056ab movq %rax, (%rbx) + 0xe9, 0x1f, 0x00, 0x00, 0x00, //0x000056ae jmp LBB19_65 + //0x000056b3 LBB19_56 + 0x49, 0xff, 0xcf, //0x000056b3 decq %r15 + 0x4d, 0x89, 0xfe, //0x000056b6 movq %r15, %r14 + 0xe9, 0x14, 0x00, 0x00, 0x00, //0x000056b9 jmp LBB19_65 + //0x000056be LBB19_57 + 0x48, 0x8b, 0x0b, //0x000056be movq (%rbx), %rcx + 0x48, 0x29, 0xc1, //0x000056c1 subq %rax, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x000056c4 addq $-2, %rcx + 0x48, 0x89, 0x0b, //0x000056c8 movq %rcx, (%rbx) + //0x000056cb LBB19_64 + 0x49, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, //0x000056cb movq $-2, %r14 + //0x000056d2 LBB19_65 + 0x4c, 0x89, 0xf0, //0x000056d2 movq %r14, %rax + 0x48, 0x83, 0xc4, 0x28, //0x000056d5 addq $40, %rsp + 0x5b, //0x000056d9 popq %rbx + 0x41, 0x5c, //0x000056da popq %r12 + 0x41, 0x5d, //0x000056dc popq %r13 + 0x41, 0x5e, //0x000056de popq %r14 + 0x41, 0x5f, //0x000056e0 popq %r15 + 0x5d, //0x000056e2 popq %rbp + 0xc3, //0x000056e3 retq + //0x000056e4 LBB19_61 + 0x49, 0x89, 0x08, //0x000056e4 movq %rcx, (%r8) + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x000056e7 movq $-1, %r14 + 0xe9, 0xdf, 0xff, 0xff, 0xff, //0x000056ee jmp LBB19_65 + //0x000056f3 LBB19_62 + 0x48, 0xff, 0xc8, //0x000056f3 decq %rax + 0x49, 0x89, 0xc6, //0x000056f6 movq %rax, %r14 + 0xe9, 0xd4, 0xff, 0xff, 0xff, //0x000056f9 jmp LBB19_65 + //0x000056fe LBB19_63 + 0x48, 0xf7, 0xd0, //0x000056fe notq %rax + 0x48, 0x01, 0xc1, //0x00005701 addq %rax, %rcx + 0x49, 0x89, 0x08, //0x00005704 movq %rcx, (%r8) + 0xe9, 0xbf, 0xff, 0xff, 0xff, //0x00005707 jmp LBB19_64 + //0x0000570c LBB19_68 + 0x49, 0xff, 0xce, //0x0000570c decq %r14 + 0xe9, 0xbe, 0xff, 0xff, 0xff, //0x0000570f jmp LBB19_65 + //0x00005714 LBB19_69 + 0x48, 0x8d, 0x50, 0xff, //0x00005714 leaq $-1(%rax), %rdx + 0x49, 0x89, 0x10, //0x00005718 movq %rdx, (%r8) + 0x49, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, //0x0000571b movq $-2, %r14 + 0x80, 0x7c, 0x01, 0xff, 0x6e, //0x00005722 cmpb $110, $-1(%rcx,%rax) + 0x0f, 0x85, 0xa5, 0xff, 0xff, 0xff, //0x00005727 jne LBB19_65 + 0x49, 0x89, 0x00, //0x0000572d movq %rax, (%r8) + 0x80, 0x3c, 0x01, 0x75, //0x00005730 cmpb $117, (%rcx,%rax) + 0x0f, 0x85, 0x98, 0xff, 0xff, 0xff, //0x00005734 jne LBB19_65 + 0x48, 0x8d, 0x50, 0x01, //0x0000573a leaq $1(%rax), %rdx + 0x49, 0x89, 0x10, //0x0000573e movq %rdx, (%r8) + 0x80, 0x7c, 0x01, 0x01, 0x6c, //0x00005741 cmpb $108, $1(%rcx,%rax) + 0x0f, 0x85, 0x86, 0xff, 0xff, 0xff, //0x00005746 jne LBB19_65 + 0x48, 0x8d, 0x50, 0x02, //0x0000574c leaq $2(%rax), %rdx + 0x49, 0x89, 0x10, //0x00005750 movq %rdx, (%r8) + 0x80, 0x7c, 0x01, 0x02, 0x6c, //0x00005753 cmpb $108, $2(%rcx,%rax) + 0x0f, 0x85, 0x74, 0xff, 0xff, 0xff, //0x00005758 jne LBB19_65 + 0xe9, 0x4a, 0x00, 0x00, 0x00, //0x0000575e jmp LBB19_77 + //0x00005763 LBB19_73 + 0x48, 0x8d, 0x50, 0xff, //0x00005763 leaq $-1(%rax), %rdx + 0x49, 0x89, 0x10, //0x00005767 movq %rdx, (%r8) + 0x49, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, //0x0000576a movq $-2, %r14 + 0x80, 0x7c, 0x01, 0xff, 0x74, //0x00005771 cmpb $116, $-1(%rcx,%rax) + 0x0f, 0x85, 0x56, 0xff, 0xff, 0xff, //0x00005776 jne LBB19_65 + 0x49, 0x89, 0x00, //0x0000577c movq %rax, (%r8) + 0x80, 0x3c, 0x01, 0x72, //0x0000577f cmpb $114, (%rcx,%rax) + 0x0f, 0x85, 0x49, 0xff, 0xff, 0xff, //0x00005783 jne LBB19_65 + 0x48, 0x8d, 0x50, 0x01, //0x00005789 leaq $1(%rax), %rdx + 0x49, 0x89, 0x10, //0x0000578d movq %rdx, (%r8) + 0x80, 0x7c, 0x01, 0x01, 0x75, //0x00005790 cmpb $117, $1(%rcx,%rax) + 0x0f, 0x85, 0x37, 0xff, 0xff, 0xff, //0x00005795 jne LBB19_65 + 0x48, 0x8d, 0x50, 0x02, //0x0000579b leaq $2(%rax), %rdx + 0x49, 0x89, 0x10, //0x0000579f movq %rdx, (%r8) + 0x80, 0x7c, 0x01, 0x02, 0x65, //0x000057a2 cmpb $101, $2(%rcx,%rax) + 0x0f, 0x85, 0x25, 0xff, 0xff, 0xff, //0x000057a7 jne LBB19_65 + //0x000057ad LBB19_77 + 0x48, 0x83, 0xc0, 0x03, //0x000057ad addq $3, %rax + 0x49, 0x89, 0x00, //0x000057b1 movq %rax, (%r8) + 0xe9, 0x19, 0xff, 0xff, 0xff, //0x000057b4 jmp LBB19_65 + //0x000057b9 LBB19_78 + 0x49, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, //0x000057b9 movq $-2, %r14 + 0x80, 0xfa, 0x61, //0x000057c0 cmpb $97, %dl + 0x0f, 0x85, 0x09, 0xff, 0xff, 0xff, //0x000057c3 jne LBB19_65 + 0x48, 0x8d, 0x50, 0x01, //0x000057c9 leaq $1(%rax), %rdx + 0x49, 0x89, 0x10, //0x000057cd movq %rdx, (%r8) + 0x80, 0x7c, 0x01, 0x01, 0x6c, //0x000057d0 cmpb $108, $1(%rcx,%rax) + 0x0f, 0x85, 0xf7, 0xfe, 0xff, 0xff, //0x000057d5 jne LBB19_65 + 0x48, 0x8d, 0x50, 0x02, //0x000057db leaq $2(%rax), %rdx + 0x49, 0x89, 0x10, //0x000057df movq %rdx, (%r8) + 0x80, 0x7c, 0x01, 0x02, 0x73, //0x000057e2 cmpb $115, $2(%rcx,%rax) + 0x0f, 0x85, 0xe5, 0xfe, 0xff, 0xff, //0x000057e7 jne LBB19_65 + 0x48, 0x8d, 0x50, 0x03, //0x000057ed leaq $3(%rax), %rdx + 0x49, 0x89, 0x10, //0x000057f1 movq %rdx, (%r8) + 0x80, 0x7c, 0x01, 0x03, 0x65, //0x000057f4 cmpb $101, $3(%rcx,%rax) + 0x0f, 0x85, 0xd3, 0xfe, 0xff, 0xff, //0x000057f9 jne LBB19_65 + 0x48, 0x83, 0xc0, 0x04, //0x000057ff addq $4, %rax + 0x49, 0x89, 0x00, //0x00005803 movq %rax, (%r8) + 0xe9, 0xc7, 0xfe, 0xff, 0xff, //0x00005806 jmp LBB19_65 + 0x90, //0x0000580b .p2align 2, 0x90 + // // .set L19_0_set_9, LBB19_9-LJTI19_0 + // // .set L19_0_set_13, LBB19_13-LJTI19_0 + // // .set L19_0_set_16, LBB19_16-LJTI19_0 + // // .set L19_0_set_20, LBB19_20-LJTI19_0 + // // .set L19_0_set_22, LBB19_22-LJTI19_0 + // // .set L19_0_set_24, LBB19_24-LJTI19_0 + //0x0000580c LJTI19_0 + 0x01, 0xfb, 0xff, 0xff, //0x0000580c .long L19_0_set_9 + 0x3d, 0xfb, 0xff, 0xff, //0x00005810 .long L19_0_set_13 + 0x66, 0xfb, 0xff, 0xff, //0x00005814 .long L19_0_set_16 + 0xb8, 0xfb, 0xff, 0xff, //0x00005818 .long L19_0_set_20 + 0xce, 0xfb, 0xff, 0xff, //0x0000581c .long L19_0_set_22 + 0xeb, 0xfb, 0xff, 0xff, //0x00005820 .long L19_0_set_24 + // // .set L19_1_set_65, LBB19_65-LJTI19_1 + // // .set L19_1_set_64, LBB19_64-LJTI19_1 + // // .set L19_1_set_40, LBB19_40-LJTI19_1 + // // .set L19_1_set_41, LBB19_41-LJTI19_1 + // // .set L19_1_set_29, LBB19_29-LJTI19_1 + // // .set L19_1_set_43, LBB19_43-LJTI19_1 + // // .set L19_1_set_45, LBB19_45-LJTI19_1 + // // .set L19_1_set_48, LBB19_48-LJTI19_1 + // // .set L19_1_set_50, LBB19_50-LJTI19_1 + // // .set L19_1_set_52, LBB19_52-LJTI19_1 + //0x00005824 LJTI19_1 + 0xae, 0xfe, 0xff, 0xff, //0x00005824 .long L19_1_set_65 + 0xa7, 0xfe, 0xff, 0xff, //0x00005828 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000582c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005830 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005834 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005838 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000583c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005840 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005844 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005848 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000584c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005850 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005854 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005858 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000585c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005860 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005864 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005868 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000586c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005870 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005874 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005878 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000587c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005880 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005884 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005888 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000588c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005890 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005894 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005898 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000589c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058a0 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058a4 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058a8 .long L19_1_set_64 + 0x1f, 0xfd, 0xff, 0xff, //0x000058ac .long L19_1_set_40 + 0xa7, 0xfe, 0xff, 0xff, //0x000058b0 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058b4 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058b8 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058bc .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058c0 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058c4 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058c8 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058cc .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058d0 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058d4 .long L19_1_set_64 + 0x33, 0xfd, 0xff, 0xff, //0x000058d8 .long L19_1_set_41 + 0xa7, 0xfe, 0xff, 0xff, //0x000058dc .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000058e0 .long L19_1_set_64 + 0x29, 0xfc, 0xff, 0xff, //0x000058e4 .long L19_1_set_29 + 0x29, 0xfc, 0xff, 0xff, //0x000058e8 .long L19_1_set_29 + 0x29, 0xfc, 0xff, 0xff, //0x000058ec .long L19_1_set_29 + 0x29, 0xfc, 0xff, 0xff, //0x000058f0 .long L19_1_set_29 + 0x29, 0xfc, 0xff, 0xff, //0x000058f4 .long L19_1_set_29 + 0x29, 0xfc, 0xff, 0xff, //0x000058f8 .long L19_1_set_29 + 0x29, 0xfc, 0xff, 0xff, //0x000058fc .long L19_1_set_29 + 0x29, 0xfc, 0xff, 0xff, //0x00005900 .long L19_1_set_29 + 0x29, 0xfc, 0xff, 0xff, //0x00005904 .long L19_1_set_29 + 0x29, 0xfc, 0xff, 0xff, //0x00005908 .long L19_1_set_29 + 0xa7, 0xfe, 0xff, 0xff, //0x0000590c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005910 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005914 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005918 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000591c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005920 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005924 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005928 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000592c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005930 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005934 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005938 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000593c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005940 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005944 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005948 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000594c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005950 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005954 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005958 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000595c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005960 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005964 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005968 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000596c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005970 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005974 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005978 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000597c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005980 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005984 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005988 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000598c .long L19_1_set_64 + 0x6f, 0xfd, 0xff, 0xff, //0x00005990 .long L19_1_set_43 + 0xa7, 0xfe, 0xff, 0xff, //0x00005994 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005998 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x0000599c .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059a0 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059a4 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059a8 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059ac .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059b0 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059b4 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059b8 .long L19_1_set_64 + 0x95, 0xfd, 0xff, 0xff, //0x000059bc .long L19_1_set_45 + 0xa7, 0xfe, 0xff, 0xff, //0x000059c0 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059c4 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059c8 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059cc .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059d0 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059d4 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059d8 .long L19_1_set_64 + 0xd7, 0xfd, 0xff, 0xff, //0x000059dc .long L19_1_set_48 + 0xa7, 0xfe, 0xff, 0xff, //0x000059e0 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059e4 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059e8 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059ec .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059f0 .long L19_1_set_64 + 0x08, 0xfe, 0xff, 0xff, //0x000059f4 .long L19_1_set_50 + 0xa7, 0xfe, 0xff, 0xff, //0x000059f8 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x000059fc .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005a00 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005a04 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005a08 .long L19_1_set_64 + 0xa7, 0xfe, 0xff, 0xff, //0x00005a0c .long L19_1_set_64 + 0x39, 0xfe, 0xff, 0xff, //0x00005a10 .long L19_1_set_52 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005a14 .p2align 4, 0x00 + //0x00005a20 LCPI20_0 + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005a20 .quad 1 + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005a28 .quad 6 + //0x00005a30 .p2align 4, 0x90 + //0x00005a30 _skip_object + 0x55, //0x00005a30 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005a31 movq %rsp, %rbp + 0x48, 0x89, 0xd0, //0x00005a34 movq %rdx, %rax + 0x48, 0x89, 0xf2, //0x00005a37 movq %rsi, %rdx + 0x48, 0x89, 0xfe, //0x00005a3a movq %rdi, %rsi + 0xc5, 0xf8, 0x28, 0x05, 0xdb, 0xff, 0xff, 0xff, //0x00005a3d vmovaps $-37(%rip), %xmm0 /* LCPI20_0+0(%rip) */ + 0xc5, 0xf8, 0x11, 0x00, //0x00005a45 vmovups %xmm0, (%rax) + 0x48, 0x89, 0xc7, //0x00005a49 movq %rax, %rdi + 0x5d, //0x00005a4c popq %rbp + 0xe9, 0xfe, 0xf7, 0xff, 0xff, //0x00005a4d jmp _fsm_exec + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005a52 .p2align 4, 0x90 + //0x00005a60 _skip_string + 0x55, //0x00005a60 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005a61 movq %rsp, %rbp + 0x41, 0x57, //0x00005a64 pushq %r15 + 0x41, 0x56, //0x00005a66 pushq %r14 + 0x41, 0x54, //0x00005a68 pushq %r12 + 0x53, //0x00005a6a pushq %rbx + 0x48, 0x83, 0xec, 0x10, //0x00005a6b subq $16, %rsp + 0x48, 0x89, 0xd1, //0x00005a6f movq %rdx, %rcx + 0x49, 0x89, 0xf6, //0x00005a72 movq %rsi, %r14 + 0x49, 0x89, 0xff, //0x00005a75 movq %rdi, %r15 + 0x48, 0xc7, 0x45, 0xd8, 0xff, 0xff, 0xff, 0xff, //0x00005a78 movq $-1, $-40(%rbp) + 0x48, 0x8b, 0x1e, //0x00005a80 movq (%rsi), %rbx + 0x4c, 0x8d, 0x65, 0xd8, //0x00005a83 leaq $-40(%rbp), %r12 + 0x48, 0x89, 0xde, //0x00005a87 movq %rbx, %rsi + 0x4c, 0x89, 0xe2, //0x00005a8a movq %r12, %rdx + 0xe8, 0x6e, 0xea, 0xff, 0xff, //0x00005a8d callq _advance_string + 0x48, 0x85, 0xc0, //0x00005a92 testq %rax, %rax + 0x0f, 0x88, 0x0e, 0x00, 0x00, 0x00, //0x00005a95 js LBB21_1 + 0x48, 0xff, 0xcb, //0x00005a9b decq %rbx + 0x48, 0x89, 0xc1, //0x00005a9e movq %rax, %rcx + 0x48, 0x89, 0xd8, //0x00005aa1 movq %rbx, %rax + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00005aa4 jmp LBB21_3 + //0x00005aa9 LBB21_1 + 0x49, 0x83, 0xc7, 0x08, //0x00005aa9 addq $8, %r15 + 0x48, 0x83, 0xf8, 0xff, //0x00005aad cmpq $-1, %rax + 0x4d, 0x0f, 0x44, 0xe7, //0x00005ab1 cmoveq %r15, %r12 + 0x49, 0x8b, 0x0c, 0x24, //0x00005ab5 movq (%r12), %rcx + //0x00005ab9 LBB21_3 + 0x49, 0x89, 0x0e, //0x00005ab9 movq %rcx, (%r14) + 0x48, 0x83, 0xc4, 0x10, //0x00005abc addq $16, %rsp + 0x5b, //0x00005ac0 popq %rbx + 0x41, 0x5c, //0x00005ac1 popq %r12 + 0x41, 0x5e, //0x00005ac3 popq %r14 + 0x41, 0x5f, //0x00005ac5 popq %r15 + 0x5d, //0x00005ac7 popq %rbp + 0xc3, //0x00005ac8 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005ac9 .p2align 4, 0x90 + //0x00005ad0 _skip_negative + 0x55, //0x00005ad0 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005ad1 movq %rsp, %rbp + 0x41, 0x56, //0x00005ad4 pushq %r14 + 0x53, //0x00005ad6 pushq %rbx + 0x49, 0x89, 0xf6, //0x00005ad7 movq %rsi, %r14 + 0x48, 0x8b, 0x1e, //0x00005ada movq (%rsi), %rbx + 0x48, 0x8b, 0x07, //0x00005add movq (%rdi), %rax + 0x48, 0x01, 0xd8, //0x00005ae0 addq %rbx, %rax + 0x48, 0x8b, 0x77, 0x08, //0x00005ae3 movq $8(%rdi), %rsi + 0x48, 0x29, 0xde, //0x00005ae7 subq %rbx, %rsi + 0x48, 0x89, 0xc7, //0x00005aea movq %rax, %rdi + 0xe8, 0x9e, 0x01, 0x00, 0x00, //0x00005aed callq _do_skip_number + 0x49, 0x8b, 0x0e, //0x00005af2 movq (%r14), %rcx + 0x48, 0x85, 0xc0, //0x00005af5 testq %rax, %rax + 0x0f, 0x88, 0x0e, 0x00, 0x00, 0x00, //0x00005af8 js LBB22_1 + 0x48, 0x01, 0xc1, //0x00005afe addq %rax, %rcx + 0x49, 0x89, 0x0e, //0x00005b01 movq %rcx, (%r14) + 0x48, 0xff, 0xcb, //0x00005b04 decq %rbx + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00005b07 jmp LBB22_3 + //0x00005b0c LBB22_1 + 0x48, 0xf7, 0xd0, //0x00005b0c notq %rax + 0x48, 0x01, 0xc1, //0x00005b0f addq %rax, %rcx + 0x49, 0x89, 0x0e, //0x00005b12 movq %rcx, (%r14) + 0x48, 0xc7, 0xc3, 0xfe, 0xff, 0xff, 0xff, //0x00005b15 movq $-2, %rbx + //0x00005b1c LBB22_3 + 0x48, 0x89, 0xd8, //0x00005b1c movq %rbx, %rax + 0x5b, //0x00005b1f popq %rbx + 0x41, 0x5e, //0x00005b20 popq %r14 + 0x5d, //0x00005b22 popq %rbp + 0xc3, //0x00005b23 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005b24 .p2align 5, 0x00 + //0x00005b40 LCPI23_0 + 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, //0x00005b40 QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' + 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, //0x00005b50 QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' + //0x00005b60 LCPI23_1 + 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, //0x00005b60 QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' + 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, //0x00005b70 QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' + //0x00005b80 LCPI23_2 + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, //0x00005b80 QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, //0x00005b90 QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' + //0x00005ba0 LCPI23_3 + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, //0x00005ba0 QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, //0x00005bb0 QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' + //0x00005bc0 LCPI23_4 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00005bc0 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00005bd0 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x00005be0 LCPI23_5 + 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, //0x00005be0 QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' + 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, //0x00005bf0 QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' + //0x00005c00 LCPI23_6 + 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, //0x00005c00 QUAD $0x6565656565656565; QUAD $0x6565656565656565 // .space 16, 'eeeeeeeeeeeeeeee' + 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, //0x00005c10 QUAD $0x6565656565656565; QUAD $0x6565656565656565 // .space 16, 'eeeeeeeeeeeeeeee' + //0x00005c20 .p2align 4, 0x00 + //0x00005c20 LCPI23_7 + 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, //0x00005c20 QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' + //0x00005c30 LCPI23_8 + 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, //0x00005c30 QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' + //0x00005c40 LCPI23_9 + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, //0x00005c40 QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' + //0x00005c50 LCPI23_10 + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, //0x00005c50 QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' + //0x00005c60 LCPI23_11 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00005c60 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x00005c70 LCPI23_12 + 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, //0x00005c70 QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' + //0x00005c80 LCPI23_13 + 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, //0x00005c80 QUAD $0x6565656565656565; QUAD $0x6565656565656565 // .space 16, 'eeeeeeeeeeeeeeee' + //0x00005c90 .p2align 4, 0x90 + //0x00005c90 _do_skip_number + 0x55, //0x00005c90 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005c91 movq %rsp, %rbp + 0x41, 0x57, //0x00005c94 pushq %r15 + 0x41, 0x56, //0x00005c96 pushq %r14 + 0x41, 0x55, //0x00005c98 pushq %r13 + 0x41, 0x54, //0x00005c9a pushq %r12 + 0x53, //0x00005c9c pushq %rbx + 0x48, 0x85, 0xf6, //0x00005c9d testq %rsi, %rsi + 0x0f, 0x84, 0xe4, 0x03, 0x00, 0x00, //0x00005ca0 je LBB23_53 + 0x80, 0x3f, 0x30, //0x00005ca6 cmpb $48, (%rdi) + 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x00005ca9 jne LBB23_5 + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00005caf movl $1, %edx + 0x48, 0x83, 0xfe, 0x01, //0x00005cb4 cmpq $1, %rsi + 0x0f, 0x84, 0xc9, 0x04, 0x00, 0x00, //0x00005cb8 je LBB23_73 + 0x8a, 0x47, 0x01, //0x00005cbe movb $1(%rdi), %al + 0x04, 0xd2, //0x00005cc1 addb $-46, %al + 0x3c, 0x37, //0x00005cc3 cmpb $55, %al + 0x0f, 0x87, 0xbc, 0x04, 0x00, 0x00, //0x00005cc5 ja LBB23_73 + 0x0f, 0xb6, 0xc0, //0x00005ccb movzbl %al, %eax + 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00005cce movabsq $36028797027352577, %rcx + 0x48, 0x0f, 0xa3, 0xc1, //0x00005cd8 btq %rax, %rcx + 0x0f, 0x83, 0xa5, 0x04, 0x00, 0x00, //0x00005cdc jae LBB23_73 + //0x00005ce2 LBB23_5 + 0x48, 0x83, 0xfe, 0x20, //0x00005ce2 cmpq $32, %rsi + 0x0f, 0x82, 0xcc, 0x04, 0x00, 0x00, //0x00005ce6 jb LBB23_76 + 0x4c, 0x8d, 0x5e, 0xe0, //0x00005cec leaq $-32(%rsi), %r11 + 0x4c, 0x89, 0xd8, //0x00005cf0 movq %r11, %rax + 0x48, 0x83, 0xe0, 0xe0, //0x00005cf3 andq $-32, %rax + 0x4c, 0x8d, 0x54, 0x38, 0x20, //0x00005cf7 leaq $32(%rax,%rdi), %r10 + 0x41, 0x83, 0xe3, 0x1f, //0x00005cfc andl $31, %r11d + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00005d00 movq $-1, %r9 + 0xc5, 0xfd, 0x6f, 0x05, 0x31, 0xfe, 0xff, 0xff, //0x00005d07 vmovdqa $-463(%rip), %ymm0 /* LCPI23_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x0d, 0x49, 0xfe, 0xff, 0xff, //0x00005d0f vmovdqa $-439(%rip), %ymm1 /* LCPI23_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x15, 0x61, 0xfe, 0xff, 0xff, //0x00005d17 vmovdqa $-415(%rip), %ymm2 /* LCPI23_2+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x1d, 0x79, 0xfe, 0xff, 0xff, //0x00005d1f vmovdqa $-391(%rip), %ymm3 /* LCPI23_3+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x25, 0x91, 0xfe, 0xff, 0xff, //0x00005d27 vmovdqa $-367(%rip), %ymm4 /* LCPI23_4+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x2d, 0xa9, 0xfe, 0xff, 0xff, //0x00005d2f vmovdqa $-343(%rip), %ymm5 /* LCPI23_5+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0xc1, 0xfe, 0xff, 0xff, //0x00005d37 vmovdqa $-319(%rip), %ymm6 /* LCPI23_6+0(%rip) */ + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00005d3f movq $-1, %rax + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00005d46 movq $-1, %r8 + 0x49, 0x89, 0xfe, //0x00005d4d movq %rdi, %r14 + //0x00005d50 .p2align 4, 0x90 + //0x00005d50 LBB23_7 + 0xc4, 0xc1, 0x7e, 0x6f, 0x3e, //0x00005d50 vmovdqu (%r14), %ymm7 + 0xc5, 0x45, 0x64, 0xc0, //0x00005d55 vpcmpgtb %ymm0, %ymm7, %ymm8 + 0xc5, 0x75, 0x64, 0xcf, //0x00005d59 vpcmpgtb %ymm7, %ymm1, %ymm9 + 0xc4, 0x41, 0x3d, 0xdb, 0xc1, //0x00005d5d vpand %ymm9, %ymm8, %ymm8 + 0xc5, 0x45, 0x74, 0xca, //0x00005d62 vpcmpeqb %ymm2, %ymm7, %ymm9 + 0xc5, 0x45, 0x74, 0xd3, //0x00005d66 vpcmpeqb %ymm3, %ymm7, %ymm10 + 0xc4, 0x41, 0x2d, 0xeb, 0xc9, //0x00005d6a vpor %ymm9, %ymm10, %ymm9 + 0xc5, 0x45, 0xeb, 0xd4, //0x00005d6f vpor %ymm4, %ymm7, %ymm10 + 0xc5, 0x2d, 0x74, 0xd6, //0x00005d73 vpcmpeqb %ymm6, %ymm10, %ymm10 + 0xc5, 0xc5, 0x74, 0xfd, //0x00005d77 vpcmpeqb %ymm5, %ymm7, %ymm7 + 0xc5, 0xfd, 0xd7, 0xd7, //0x00005d7b vpmovmskb %ymm7, %edx + 0xc4, 0x41, 0x7d, 0xd7, 0xe2, //0x00005d7f vpmovmskb %ymm10, %r12d + 0xc4, 0x41, 0x7d, 0xd7, 0xf9, //0x00005d84 vpmovmskb %ymm9, %r15d + 0xc5, 0xad, 0xeb, 0xff, //0x00005d89 vpor %ymm7, %ymm10, %ymm7 + 0xc4, 0x41, 0x35, 0xeb, 0xc0, //0x00005d8d vpor %ymm8, %ymm9, %ymm8 + 0xc5, 0xbd, 0xeb, 0xff, //0x00005d92 vpor %ymm7, %ymm8, %ymm7 + 0xc5, 0xfd, 0xd7, 0xcf, //0x00005d96 vpmovmskb %ymm7, %ecx + 0x48, 0xf7, 0xd1, //0x00005d9a notq %rcx + 0x48, 0x0f, 0xbc, 0xc9, //0x00005d9d bsfq %rcx, %rcx + 0x83, 0xf9, 0x20, //0x00005da1 cmpl $32, %ecx + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00005da4 je LBB23_9 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x00005daa movl $-1, %ebx + 0xd3, 0xe3, //0x00005daf shll %cl, %ebx + 0xf7, 0xd3, //0x00005db1 notl %ebx + 0x21, 0xda, //0x00005db3 andl %ebx, %edx + 0x41, 0x21, 0xdc, //0x00005db5 andl %ebx, %r12d + 0x44, 0x21, 0xfb, //0x00005db8 andl %r15d, %ebx + 0x41, 0x89, 0xdf, //0x00005dbb movl %ebx, %r15d + //0x00005dbe LBB23_9 + 0x8d, 0x5a, 0xff, //0x00005dbe leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x00005dc1 andl %edx, %ebx + 0x0f, 0x85, 0xa4, 0x03, 0x00, 0x00, //0x00005dc3 jne LBB23_70 + 0x41, 0x8d, 0x5c, 0x24, 0xff, //0x00005dc9 leal $-1(%r12), %ebx + 0x44, 0x21, 0xe3, //0x00005dce andl %r12d, %ebx + 0x0f, 0x85, 0x96, 0x03, 0x00, 0x00, //0x00005dd1 jne LBB23_70 + 0x41, 0x8d, 0x5f, 0xff, //0x00005dd7 leal $-1(%r15), %ebx + 0x44, 0x21, 0xfb, //0x00005ddb andl %r15d, %ebx + 0x0f, 0x85, 0x89, 0x03, 0x00, 0x00, //0x00005dde jne LBB23_70 + 0x85, 0xd2, //0x00005de4 testl %edx, %edx + 0x0f, 0x84, 0x19, 0x00, 0x00, 0x00, //0x00005de6 je LBB23_15 + 0x4c, 0x89, 0xf3, //0x00005dec movq %r14, %rbx + 0x48, 0x29, 0xfb, //0x00005def subq %rdi, %rbx + 0x0f, 0xbc, 0xd2, //0x00005df2 bsfl %edx, %edx + 0x48, 0x01, 0xda, //0x00005df5 addq %rbx, %rdx + 0x49, 0x83, 0xf8, 0xff, //0x00005df8 cmpq $-1, %r8 + 0x0f, 0x85, 0x82, 0x03, 0x00, 0x00, //0x00005dfc jne LBB23_72 + 0x49, 0x89, 0xd0, //0x00005e02 movq %rdx, %r8 + //0x00005e05 LBB23_15 + 0x45, 0x85, 0xe4, //0x00005e05 testl %r12d, %r12d + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00005e08 je LBB23_18 + 0x4c, 0x89, 0xf3, //0x00005e0e movq %r14, %rbx + 0x48, 0x29, 0xfb, //0x00005e11 subq %rdi, %rbx + 0x41, 0x0f, 0xbc, 0xd4, //0x00005e14 bsfl %r12d, %edx + 0x48, 0x01, 0xda, //0x00005e18 addq %rbx, %rdx + 0x48, 0x83, 0xf8, 0xff, //0x00005e1b cmpq $-1, %rax + 0x0f, 0x85, 0x5f, 0x03, 0x00, 0x00, //0x00005e1f jne LBB23_72 + 0x48, 0x89, 0xd0, //0x00005e25 movq %rdx, %rax + //0x00005e28 LBB23_18 + 0x45, 0x85, 0xff, //0x00005e28 testl %r15d, %r15d + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00005e2b je LBB23_21 + 0x4c, 0x89, 0xf3, //0x00005e31 movq %r14, %rbx + 0x48, 0x29, 0xfb, //0x00005e34 subq %rdi, %rbx + 0x41, 0x0f, 0xbc, 0xd7, //0x00005e37 bsfl %r15d, %edx + 0x48, 0x01, 0xda, //0x00005e3b addq %rbx, %rdx + 0x49, 0x83, 0xf9, 0xff, //0x00005e3e cmpq $-1, %r9 + 0x0f, 0x85, 0x3c, 0x03, 0x00, 0x00, //0x00005e42 jne LBB23_72 + 0x49, 0x89, 0xd1, //0x00005e48 movq %rdx, %r9 + //0x00005e4b LBB23_21 + 0x83, 0xf9, 0x20, //0x00005e4b cmpl $32, %ecx + 0x0f, 0x85, 0x42, 0x02, 0x00, 0x00, //0x00005e4e jne LBB23_54 + 0x49, 0x83, 0xc6, 0x20, //0x00005e54 addq $32, %r14 + 0x48, 0x83, 0xc6, 0xe0, //0x00005e58 addq $-32, %rsi + 0x48, 0x83, 0xfe, 0x1f, //0x00005e5c cmpq $31, %rsi + 0x0f, 0x87, 0xea, 0xfe, 0xff, 0xff, //0x00005e60 ja LBB23_7 + 0xc5, 0xf8, 0x77, //0x00005e66 vzeroupper + 0x4c, 0x89, 0xde, //0x00005e69 movq %r11, %rsi + 0x48, 0x83, 0xfe, 0x10, //0x00005e6c cmpq $16, %rsi + 0x0f, 0x82, 0x72, 0x01, 0x00, 0x00, //0x00005e70 jb LBB23_42 + //0x00005e76 LBB23_24 + 0x4c, 0x8d, 0x76, 0xf0, //0x00005e76 leaq $-16(%rsi), %r14 + 0x4c, 0x89, 0xf1, //0x00005e7a movq %r14, %rcx + 0x48, 0x83, 0xe1, 0xf0, //0x00005e7d andq $-16, %rcx + 0x4e, 0x8d, 0x5c, 0x11, 0x10, //0x00005e81 leaq $16(%rcx,%r10), %r11 + 0x41, 0x83, 0xe6, 0x0f, //0x00005e86 andl $15, %r14d + 0xc5, 0x79, 0x6f, 0x05, 0x8e, 0xfd, 0xff, 0xff, //0x00005e8a vmovdqa $-626(%rip), %xmm8 /* LCPI23_7+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x0d, 0x96, 0xfd, 0xff, 0xff, //0x00005e92 vmovdqa $-618(%rip), %xmm9 /* LCPI23_8+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x15, 0x9e, 0xfd, 0xff, 0xff, //0x00005e9a vmovdqa $-610(%rip), %xmm10 /* LCPI23_9+0(%rip) */ + 0xc5, 0x79, 0x6f, 0x1d, 0xa6, 0xfd, 0xff, 0xff, //0x00005ea2 vmovdqa $-602(%rip), %xmm11 /* LCPI23_10+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x25, 0xae, 0xfd, 0xff, 0xff, //0x00005eaa vmovdqa $-594(%rip), %xmm4 /* LCPI23_11+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x2d, 0xb6, 0xfd, 0xff, 0xff, //0x00005eb2 vmovdqa $-586(%rip), %xmm5 /* LCPI23_12+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x35, 0xbe, 0xfd, 0xff, 0xff, //0x00005eba vmovdqa $-578(%rip), %xmm6 /* LCPI23_13+0(%rip) */ + 0x41, 0xbf, 0xff, 0xff, 0xff, 0xff, //0x00005ec2 movl $4294967295, %r15d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005ec8 .p2align 4, 0x90 + //0x00005ed0 LBB23_25 + 0xc4, 0xc1, 0x7a, 0x6f, 0x3a, //0x00005ed0 vmovdqu (%r10), %xmm7 + 0xc4, 0xc1, 0x41, 0x64, 0xc0, //0x00005ed5 vpcmpgtb %xmm8, %xmm7, %xmm0 + 0xc5, 0xb1, 0x64, 0xcf, //0x00005eda vpcmpgtb %xmm7, %xmm9, %xmm1 + 0xc5, 0xf9, 0xdb, 0xc1, //0x00005ede vpand %xmm1, %xmm0, %xmm0 + 0xc5, 0xa9, 0x74, 0xcf, //0x00005ee2 vpcmpeqb %xmm7, %xmm10, %xmm1 + 0xc5, 0xa1, 0x74, 0xd7, //0x00005ee6 vpcmpeqb %xmm7, %xmm11, %xmm2 + 0xc5, 0xe9, 0xeb, 0xc9, //0x00005eea vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xc1, 0xeb, 0xd4, //0x00005eee vpor %xmm4, %xmm7, %xmm2 + 0xc5, 0xe9, 0x74, 0xd6, //0x00005ef2 vpcmpeqb %xmm6, %xmm2, %xmm2 + 0xc5, 0xc1, 0x74, 0xfd, //0x00005ef6 vpcmpeqb %xmm5, %xmm7, %xmm7 + 0xc5, 0xe9, 0xeb, 0xdf, //0x00005efa vpor %xmm7, %xmm2, %xmm3 + 0xc5, 0xf1, 0xeb, 0xc0, //0x00005efe vpor %xmm0, %xmm1, %xmm0 + 0xc5, 0xe1, 0xeb, 0xc0, //0x00005f02 vpor %xmm0, %xmm3, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd7, //0x00005f06 vpmovmskb %xmm7, %edx + 0xc5, 0x79, 0xd7, 0xea, //0x00005f0a vpmovmskb %xmm2, %r13d + 0xc5, 0x79, 0xd7, 0xe1, //0x00005f0e vpmovmskb %xmm1, %r12d + 0xc5, 0xf9, 0xd7, 0xc8, //0x00005f12 vpmovmskb %xmm0, %ecx + 0x4c, 0x31, 0xf9, //0x00005f16 xorq %r15, %rcx + 0x48, 0x0f, 0xbc, 0xc9, //0x00005f19 bsfq %rcx, %rcx + 0x83, 0xf9, 0x10, //0x00005f1d cmpl $16, %ecx + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00005f20 je LBB23_27 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x00005f26 movl $-1, %ebx + 0xd3, 0xe3, //0x00005f2b shll %cl, %ebx + 0xf7, 0xd3, //0x00005f2d notl %ebx + 0x21, 0xda, //0x00005f2f andl %ebx, %edx + 0x41, 0x21, 0xdd, //0x00005f31 andl %ebx, %r13d + 0x44, 0x21, 0xe3, //0x00005f34 andl %r12d, %ebx + 0x41, 0x89, 0xdc, //0x00005f37 movl %ebx, %r12d + //0x00005f3a LBB23_27 + 0x8d, 0x5a, 0xff, //0x00005f3a leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x00005f3d andl %edx, %ebx + 0x0f, 0x85, 0x36, 0x02, 0x00, 0x00, //0x00005f3f jne LBB23_71 + 0x41, 0x8d, 0x5d, 0xff, //0x00005f45 leal $-1(%r13), %ebx + 0x44, 0x21, 0xeb, //0x00005f49 andl %r13d, %ebx + 0x0f, 0x85, 0x29, 0x02, 0x00, 0x00, //0x00005f4c jne LBB23_71 + 0x41, 0x8d, 0x5c, 0x24, 0xff, //0x00005f52 leal $-1(%r12), %ebx + 0x44, 0x21, 0xe3, //0x00005f57 andl %r12d, %ebx + 0x0f, 0x85, 0x1b, 0x02, 0x00, 0x00, //0x00005f5a jne LBB23_71 + 0x85, 0xd2, //0x00005f60 testl %edx, %edx + 0x0f, 0x84, 0x19, 0x00, 0x00, 0x00, //0x00005f62 je LBB23_33 + 0x4c, 0x89, 0xd3, //0x00005f68 movq %r10, %rbx + 0x48, 0x29, 0xfb, //0x00005f6b subq %rdi, %rbx + 0x0f, 0xbc, 0xd2, //0x00005f6e bsfl %edx, %edx + 0x48, 0x01, 0xda, //0x00005f71 addq %rbx, %rdx + 0x49, 0x83, 0xf8, 0xff, //0x00005f74 cmpq $-1, %r8 + 0x0f, 0x85, 0x06, 0x02, 0x00, 0x00, //0x00005f78 jne LBB23_72 + 0x49, 0x89, 0xd0, //0x00005f7e movq %rdx, %r8 + //0x00005f81 LBB23_33 + 0x45, 0x85, 0xed, //0x00005f81 testl %r13d, %r13d + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00005f84 je LBB23_36 + 0x4c, 0x89, 0xd3, //0x00005f8a movq %r10, %rbx + 0x48, 0x29, 0xfb, //0x00005f8d subq %rdi, %rbx + 0x41, 0x0f, 0xbc, 0xd5, //0x00005f90 bsfl %r13d, %edx + 0x48, 0x01, 0xda, //0x00005f94 addq %rbx, %rdx + 0x48, 0x83, 0xf8, 0xff, //0x00005f97 cmpq $-1, %rax + 0x0f, 0x85, 0xe3, 0x01, 0x00, 0x00, //0x00005f9b jne LBB23_72 + 0x48, 0x89, 0xd0, //0x00005fa1 movq %rdx, %rax + //0x00005fa4 LBB23_36 + 0x45, 0x85, 0xe4, //0x00005fa4 testl %r12d, %r12d + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00005fa7 je LBB23_39 + 0x4c, 0x89, 0xd3, //0x00005fad movq %r10, %rbx + 0x48, 0x29, 0xfb, //0x00005fb0 subq %rdi, %rbx + 0x41, 0x0f, 0xbc, 0xd4, //0x00005fb3 bsfl %r12d, %edx + 0x48, 0x01, 0xda, //0x00005fb7 addq %rbx, %rdx + 0x49, 0x83, 0xf9, 0xff, //0x00005fba cmpq $-1, %r9 + 0x0f, 0x85, 0xc0, 0x01, 0x00, 0x00, //0x00005fbe jne LBB23_72 + 0x49, 0x89, 0xd1, //0x00005fc4 movq %rdx, %r9 + //0x00005fc7 LBB23_39 + 0x83, 0xf9, 0x10, //0x00005fc7 cmpl $16, %ecx + 0x0f, 0x85, 0xe4, 0x00, 0x00, 0x00, //0x00005fca jne LBB23_55 + 0x49, 0x83, 0xc2, 0x10, //0x00005fd0 addq $16, %r10 + 0x48, 0x83, 0xc6, 0xf0, //0x00005fd4 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x0f, //0x00005fd8 cmpq $15, %rsi + 0x0f, 0x87, 0xee, 0xfe, 0xff, 0xff, //0x00005fdc ja LBB23_25 + 0x4c, 0x89, 0xf6, //0x00005fe2 movq %r14, %rsi + 0x4d, 0x89, 0xda, //0x00005fe5 movq %r11, %r10 + //0x00005fe8 LBB23_42 + 0x48, 0x85, 0xf6, //0x00005fe8 testq %rsi, %rsi + 0x0f, 0x84, 0xc6, 0x00, 0x00, 0x00, //0x00005feb je LBB23_56 + 0x4d, 0x8d, 0x1c, 0x32, //0x00005ff1 leaq (%r10,%rsi), %r11 + 0x48, 0x8d, 0x1d, 0xe4, 0x01, 0x00, 0x00, //0x00005ff5 leaq $484(%rip), %rbx /* LJTI23_0+0(%rip) */ + 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x00005ffc jmp LBB23_45 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006001 .p2align 4, 0x90 + //0x00006010 LBB23_44 + 0x49, 0x89, 0xca, //0x00006010 movq %rcx, %r10 + 0x48, 0xff, 0xce, //0x00006013 decq %rsi + 0x0f, 0x84, 0x7c, 0x01, 0x00, 0x00, //0x00006016 je LBB23_75 + //0x0000601c LBB23_45 + 0x41, 0x0f, 0xbe, 0x12, //0x0000601c movsbl (%r10), %edx + 0x83, 0xc2, 0xd5, //0x00006020 addl $-43, %edx + 0x83, 0xfa, 0x3a, //0x00006023 cmpl $58, %edx + 0x0f, 0x87, 0x8b, 0x00, 0x00, 0x00, //0x00006026 ja LBB23_56 + 0x49, 0x8d, 0x4a, 0x01, //0x0000602c leaq $1(%r10), %rcx + 0x48, 0x63, 0x14, 0x93, //0x00006030 movslq (%rbx,%rdx,4), %rdx + 0x48, 0x01, 0xda, //0x00006034 addq %rbx, %rdx + 0xff, 0xe2, //0x00006037 jmpq *%rdx + //0x00006039 LBB23_47 + 0x48, 0x89, 0xca, //0x00006039 movq %rcx, %rdx + 0x48, 0x29, 0xfa, //0x0000603c subq %rdi, %rdx + 0x49, 0x83, 0xf9, 0xff, //0x0000603f cmpq $-1, %r9 + 0x0f, 0x85, 0x67, 0x01, 0x00, 0x00, //0x00006043 jne LBB23_79 + 0x48, 0xff, 0xca, //0x00006049 decq %rdx + 0x49, 0x89, 0xd1, //0x0000604c movq %rdx, %r9 + 0xe9, 0xbc, 0xff, 0xff, 0xff, //0x0000604f jmp LBB23_44 + //0x00006054 LBB23_49 + 0x48, 0x89, 0xca, //0x00006054 movq %rcx, %rdx + 0x48, 0x29, 0xfa, //0x00006057 subq %rdi, %rdx + 0x48, 0x83, 0xf8, 0xff, //0x0000605a cmpq $-1, %rax + 0x0f, 0x85, 0x4c, 0x01, 0x00, 0x00, //0x0000605e jne LBB23_79 + 0x48, 0xff, 0xca, //0x00006064 decq %rdx + 0x48, 0x89, 0xd0, //0x00006067 movq %rdx, %rax + 0xe9, 0xa1, 0xff, 0xff, 0xff, //0x0000606a jmp LBB23_44 + //0x0000606f LBB23_51 + 0x48, 0x89, 0xca, //0x0000606f movq %rcx, %rdx + 0x48, 0x29, 0xfa, //0x00006072 subq %rdi, %rdx + 0x49, 0x83, 0xf8, 0xff, //0x00006075 cmpq $-1, %r8 + 0x0f, 0x85, 0x31, 0x01, 0x00, 0x00, //0x00006079 jne LBB23_79 + 0x48, 0xff, 0xca, //0x0000607f decq %rdx + 0x49, 0x89, 0xd0, //0x00006082 movq %rdx, %r8 + 0xe9, 0x86, 0xff, 0xff, 0xff, //0x00006085 jmp LBB23_44 + //0x0000608a LBB23_53 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000608a movq $-1, %rax + 0xe9, 0xf4, 0x00, 0x00, 0x00, //0x00006091 jmp LBB23_74 + //0x00006096 LBB23_54 + 0x49, 0x01, 0xce, //0x00006096 addq %rcx, %r14 + 0xc5, 0xf8, 0x77, //0x00006099 vzeroupper + 0x4d, 0x89, 0xf2, //0x0000609c movq %r14, %r10 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000609f movq $-1, %rdx + 0x48, 0x85, 0xc0, //0x000060a6 testq %rax, %rax + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x000060a9 jne LBB23_57 + 0xe9, 0xd3, 0x00, 0x00, 0x00, //0x000060af jmp LBB23_73 + //0x000060b4 LBB23_55 + 0x49, 0x01, 0xca, //0x000060b4 addq %rcx, %r10 + //0x000060b7 LBB23_56 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000060b7 movq $-1, %rdx + 0x48, 0x85, 0xc0, //0x000060be testq %rax, %rax + 0x0f, 0x84, 0xc0, 0x00, 0x00, 0x00, //0x000060c1 je LBB23_73 + //0x000060c7 LBB23_57 + 0x4d, 0x85, 0xc9, //0x000060c7 testq %r9, %r9 + 0x0f, 0x84, 0xb7, 0x00, 0x00, 0x00, //0x000060ca je LBB23_73 + 0x4d, 0x85, 0xc0, //0x000060d0 testq %r8, %r8 + 0x0f, 0x84, 0xae, 0x00, 0x00, 0x00, //0x000060d3 je LBB23_73 + 0x49, 0x29, 0xfa, //0x000060d9 subq %rdi, %r10 + 0x49, 0x8d, 0x4a, 0xff, //0x000060dc leaq $-1(%r10), %rcx + 0x48, 0x39, 0xc8, //0x000060e0 cmpq %rcx, %rax + 0x0f, 0x84, 0x36, 0x00, 0x00, 0x00, //0x000060e3 je LBB23_65 + 0x49, 0x39, 0xc8, //0x000060e9 cmpq %rcx, %r8 + 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x000060ec je LBB23_65 + 0x49, 0x39, 0xc9, //0x000060f2 cmpq %rcx, %r9 + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000060f5 je LBB23_65 + 0x4d, 0x85, 0xc9, //0x000060fb testq %r9, %r9 + 0x0f, 0x8e, 0x29, 0x00, 0x00, 0x00, //0x000060fe jle LBB23_66 + 0x49, 0x8d, 0x49, 0xff, //0x00006104 leaq $-1(%r9), %rcx + 0x48, 0x39, 0xc8, //0x00006108 cmpq %rcx, %rax + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x0000610b je LBB23_66 + 0x49, 0xf7, 0xd1, //0x00006111 notq %r9 + 0x4c, 0x89, 0xca, //0x00006114 movq %r9, %rdx + 0x4c, 0x89, 0xc8, //0x00006117 movq %r9, %rax + 0xe9, 0x6b, 0x00, 0x00, 0x00, //0x0000611a jmp LBB23_74 + //0x0000611f LBB23_65 + 0x49, 0xf7, 0xda, //0x0000611f negq %r10 + 0x4c, 0x89, 0xd2, //0x00006122 movq %r10, %rdx + 0x4c, 0x89, 0xd0, //0x00006125 movq %r10, %rax + 0xe9, 0x5d, 0x00, 0x00, 0x00, //0x00006128 jmp LBB23_74 + //0x0000612d LBB23_66 + 0x4c, 0x89, 0xc1, //0x0000612d movq %r8, %rcx + 0x48, 0x09, 0xc1, //0x00006130 orq %rax, %rcx + 0x49, 0x39, 0xc0, //0x00006133 cmpq %rax, %r8 + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x00006136 jl LBB23_69 + 0x48, 0x85, 0xc9, //0x0000613c testq %rcx, %rcx + 0x0f, 0x88, 0x0e, 0x00, 0x00, 0x00, //0x0000613f js LBB23_69 + 0x49, 0xf7, 0xd0, //0x00006145 notq %r8 + 0x4c, 0x89, 0xc2, //0x00006148 movq %r8, %rdx + 0x4c, 0x89, 0xc0, //0x0000614b movq %r8, %rax + 0xe9, 0x37, 0x00, 0x00, 0x00, //0x0000614e jmp LBB23_74 + //0x00006153 LBB23_69 + 0x48, 0x85, 0xc9, //0x00006153 testq %rcx, %rcx + 0x48, 0x8d, 0x48, 0xff, //0x00006156 leaq $-1(%rax), %rcx + 0x48, 0xf7, 0xd0, //0x0000615a notq %rax + 0x49, 0x0f, 0x48, 0xc2, //0x0000615d cmovsq %r10, %rax + 0x49, 0x39, 0xc8, //0x00006161 cmpq %rcx, %r8 + 0x49, 0x0f, 0x45, 0xc2, //0x00006164 cmovneq %r10, %rax + 0xe9, 0x1d, 0x00, 0x00, 0x00, //0x00006168 jmp LBB23_74 + //0x0000616d LBB23_70 + 0x49, 0x29, 0xfe, //0x0000616d subq %rdi, %r14 + 0x0f, 0xbc, 0xd3, //0x00006170 bsfl %ebx, %edx + 0x4c, 0x01, 0xf2, //0x00006173 addq %r14, %rdx + 0xe9, 0x09, 0x00, 0x00, 0x00, //0x00006176 jmp LBB23_72 + //0x0000617b LBB23_71 + 0x49, 0x29, 0xfa, //0x0000617b subq %rdi, %r10 + 0x0f, 0xbc, 0xd3, //0x0000617e bsfl %ebx, %edx + 0x4c, 0x01, 0xd2, //0x00006181 addq %r10, %rdx + //0x00006184 LBB23_72 + 0x48, 0xf7, 0xd2, //0x00006184 notq %rdx + //0x00006187 LBB23_73 + 0x48, 0x89, 0xd0, //0x00006187 movq %rdx, %rax + //0x0000618a LBB23_74 + 0x5b, //0x0000618a popq %rbx + 0x41, 0x5c, //0x0000618b popq %r12 + 0x41, 0x5d, //0x0000618d popq %r13 + 0x41, 0x5e, //0x0000618f popq %r14 + 0x41, 0x5f, //0x00006191 popq %r15 + 0x5d, //0x00006193 popq %rbp + 0xc5, 0xf8, 0x77, //0x00006194 vzeroupper + 0xc3, //0x00006197 retq + //0x00006198 LBB23_75 + 0x4d, 0x89, 0xda, //0x00006198 movq %r11, %r10 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000619b movq $-1, %rdx + 0x48, 0x85, 0xc0, //0x000061a2 testq %rax, %rax + 0x0f, 0x85, 0x1c, 0xff, 0xff, 0xff, //0x000061a5 jne LBB23_57 + 0xe9, 0xd7, 0xff, 0xff, 0xff, //0x000061ab jmp LBB23_73 + //0x000061b0 LBB23_79 + 0x48, 0xf7, 0xda, //0x000061b0 negq %rdx + 0xe9, 0xcf, 0xff, 0xff, 0xff, //0x000061b3 jmp LBB23_73 + //0x000061b8 LBB23_76 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000061b8 movq $-1, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000061bf movq $-1, %rax + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000061c6 movq $-1, %r8 + 0x49, 0x89, 0xfa, //0x000061cd movq %rdi, %r10 + 0x48, 0x83, 0xfe, 0x10, //0x000061d0 cmpq $16, %rsi + 0x0f, 0x83, 0x9c, 0xfc, 0xff, 0xff, //0x000061d4 jae LBB23_24 + 0xe9, 0x09, 0xfe, 0xff, 0xff, //0x000061da jmp LBB23_42 + 0x90, //0x000061df .p2align 2, 0x90 + // // .set L23_0_set_47, LBB23_47-LJTI23_0 + // // .set L23_0_set_56, LBB23_56-LJTI23_0 + // // .set L23_0_set_51, LBB23_51-LJTI23_0 + // // .set L23_0_set_44, LBB23_44-LJTI23_0 + // // .set L23_0_set_49, LBB23_49-LJTI23_0 + //0x000061e0 LJTI23_0 + 0x59, 0xfe, 0xff, 0xff, //0x000061e0 .long L23_0_set_47 + 0xd7, 0xfe, 0xff, 0xff, //0x000061e4 .long L23_0_set_56 + 0x59, 0xfe, 0xff, 0xff, //0x000061e8 .long L23_0_set_47 + 0x8f, 0xfe, 0xff, 0xff, //0x000061ec .long L23_0_set_51 + 0xd7, 0xfe, 0xff, 0xff, //0x000061f0 .long L23_0_set_56 + 0x30, 0xfe, 0xff, 0xff, //0x000061f4 .long L23_0_set_44 + 0x30, 0xfe, 0xff, 0xff, //0x000061f8 .long L23_0_set_44 + 0x30, 0xfe, 0xff, 0xff, //0x000061fc .long L23_0_set_44 + 0x30, 0xfe, 0xff, 0xff, //0x00006200 .long L23_0_set_44 + 0x30, 0xfe, 0xff, 0xff, //0x00006204 .long L23_0_set_44 + 0x30, 0xfe, 0xff, 0xff, //0x00006208 .long L23_0_set_44 + 0x30, 0xfe, 0xff, 0xff, //0x0000620c .long L23_0_set_44 + 0x30, 0xfe, 0xff, 0xff, //0x00006210 .long L23_0_set_44 + 0x30, 0xfe, 0xff, 0xff, //0x00006214 .long L23_0_set_44 + 0x30, 0xfe, 0xff, 0xff, //0x00006218 .long L23_0_set_44 + 0xd7, 0xfe, 0xff, 0xff, //0x0000621c .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006220 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006224 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006228 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x0000622c .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006230 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006234 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006238 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x0000623c .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006240 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006244 .long L23_0_set_56 + 0x74, 0xfe, 0xff, 0xff, //0x00006248 .long L23_0_set_49 + 0xd7, 0xfe, 0xff, 0xff, //0x0000624c .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006250 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006254 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006258 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x0000625c .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006260 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006264 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006268 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x0000626c .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006270 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006274 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006278 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x0000627c .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006280 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006284 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006288 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x0000628c .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006290 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006294 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x00006298 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x0000629c .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x000062a0 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x000062a4 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x000062a8 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x000062ac .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x000062b0 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x000062b4 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x000062b8 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x000062bc .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x000062c0 .long L23_0_set_56 + 0xd7, 0xfe, 0xff, 0xff, //0x000062c4 .long L23_0_set_56 + 0x74, 0xfe, 0xff, 0xff, //0x000062c8 .long L23_0_set_49 + 0x90, 0x90, 0x90, 0x90, //0x000062cc .p2align 4, 0x90 + //0x000062d0 _skip_positive + 0x55, //0x000062d0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000062d1 movq %rsp, %rbp + 0x41, 0x56, //0x000062d4 pushq %r14 + 0x53, //0x000062d6 pushq %rbx + 0x49, 0x89, 0xf6, //0x000062d7 movq %rsi, %r14 + 0x48, 0x8b, 0x1e, //0x000062da movq (%rsi), %rbx + 0x48, 0xff, 0xcb, //0x000062dd decq %rbx + 0x48, 0x8b, 0x07, //0x000062e0 movq (%rdi), %rax + 0x48, 0x01, 0xd8, //0x000062e3 addq %rbx, %rax + 0x48, 0x8b, 0x77, 0x08, //0x000062e6 movq $8(%rdi), %rsi + 0x48, 0x29, 0xde, //0x000062ea subq %rbx, %rsi + 0x48, 0x89, 0xc7, //0x000062ed movq %rax, %rdi + 0xe8, 0x9b, 0xf9, 0xff, 0xff, //0x000062f0 callq _do_skip_number + 0x48, 0x85, 0xc0, //0x000062f5 testq %rax, %rax + 0x0f, 0x88, 0x0d, 0x00, 0x00, 0x00, //0x000062f8 js LBB24_1 + 0x49, 0x8b, 0x0e, //0x000062fe movq (%r14), %rcx + 0x48, 0x8d, 0x4c, 0x08, 0xff, //0x00006301 leaq $-1(%rax,%rcx), %rcx + 0xe9, 0x11, 0x00, 0x00, 0x00, //0x00006306 jmp LBB24_3 + //0x0000630b LBB24_1 + 0x49, 0x8b, 0x0e, //0x0000630b movq (%r14), %rcx + 0x48, 0x29, 0xc1, //0x0000630e subq %rax, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00006311 addq $-2, %rcx + 0x48, 0xc7, 0xc3, 0xfe, 0xff, 0xff, 0xff, //0x00006315 movq $-2, %rbx + //0x0000631c LBB24_3 + 0x49, 0x89, 0x0e, //0x0000631c movq %rcx, (%r14) + 0x48, 0x89, 0xd8, //0x0000631f movq %rbx, %rax + 0x5b, //0x00006322 popq %rbx + 0x41, 0x5e, //0x00006323 popq %r14 + 0x5d, //0x00006325 popq %rbp + 0xc3, //0x00006326 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006327 .p2align 4, 0x90 + //0x00006330 _skip_number + 0x55, //0x00006330 pushq %rbp + 0x48, 0x89, 0xe5, //0x00006331 movq %rsp, %rbp + 0x41, 0x57, //0x00006334 pushq %r15 + 0x41, 0x56, //0x00006336 pushq %r14 + 0x41, 0x54, //0x00006338 pushq %r12 + 0x53, //0x0000633a pushq %rbx + 0x49, 0x89, 0xf6, //0x0000633b movq %rsi, %r14 + 0x4c, 0x8b, 0x27, //0x0000633e movq (%rdi), %r12 + 0x48, 0x8b, 0x77, 0x08, //0x00006341 movq $8(%rdi), %rsi + 0x4d, 0x8b, 0x3e, //0x00006345 movq (%r14), %r15 + 0x31, 0xc0, //0x00006348 xorl %eax, %eax + 0x43, 0x80, 0x3c, 0x3c, 0x2d, //0x0000634a cmpb $45, (%r12,%r15) + 0x4b, 0x8d, 0x1c, 0x3c, //0x0000634f leaq (%r12,%r15), %rbx + 0x0f, 0x94, 0xc0, //0x00006353 sete %al + 0x48, 0x01, 0xc3, //0x00006356 addq %rax, %rbx + 0x48, 0x29, 0xc6, //0x00006359 subq %rax, %rsi + 0x0f, 0x84, 0x3b, 0x00, 0x00, 0x00, //0x0000635c je LBB25_6 + 0x49, 0x39, 0xf7, //0x00006362 cmpq %rsi, %r15 + 0x0f, 0x83, 0x0c, 0x00, 0x00, 0x00, //0x00006365 jae LBB25_3 + 0x8a, 0x03, //0x0000636b movb (%rbx), %al + 0x04, 0xd0, //0x0000636d addb $-48, %al + 0x3c, 0x09, //0x0000636f cmpb $9, %al + 0x0f, 0x87, 0x38, 0x00, 0x00, 0x00, //0x00006371 ja LBB25_8 + //0x00006377 LBB25_3 + 0x48, 0x89, 0xdf, //0x00006377 movq %rbx, %rdi + 0xe8, 0x11, 0xf9, 0xff, 0xff, //0x0000637a callq _do_skip_number + 0x48, 0x85, 0xc0, //0x0000637f testq %rax, %rax + 0x0f, 0x88, 0x21, 0x00, 0x00, 0x00, //0x00006382 js LBB25_7 + 0x48, 0x01, 0xc3, //0x00006388 addq %rax, %rbx + //0x0000638b LBB25_5 + 0x4c, 0x29, 0xe3, //0x0000638b subq %r12, %rbx + 0x49, 0x89, 0x1e, //0x0000638e movq %rbx, (%r14) + 0x4c, 0x89, 0xf8, //0x00006391 movq %r15, %rax + 0x5b, //0x00006394 popq %rbx + 0x41, 0x5c, //0x00006395 popq %r12 + 0x41, 0x5e, //0x00006397 popq %r14 + 0x41, 0x5f, //0x00006399 popq %r15 + 0x5d, //0x0000639b popq %rbp + 0xc3, //0x0000639c retq + //0x0000639d LBB25_6 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000639d movq $-1, %r15 + 0xe9, 0xe2, 0xff, 0xff, 0xff, //0x000063a4 jmp LBB25_5 + //0x000063a9 LBB25_7 + 0x48, 0xf7, 0xd0, //0x000063a9 notq %rax + 0x48, 0x01, 0xc3, //0x000063ac addq %rax, %rbx + //0x000063af LBB25_8 + 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x000063af movq $-2, %r15 + 0xe9, 0xd0, 0xff, 0xff, 0xff, //0x000063b6 jmp LBB25_5 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000063bb .p2align 4, 0x90 + //0x000063c0 _skip_one + 0x55, //0x000063c0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000063c1 movq %rsp, %rbp + 0x48, 0x89, 0xd0, //0x000063c4 movq %rdx, %rax + 0x48, 0x89, 0xf2, //0x000063c7 movq %rsi, %rdx + 0x48, 0x89, 0xfe, //0x000063ca movq %rdi, %rsi + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x000063cd movl $1, %edi + 0xc4, 0xe1, 0xf9, 0x6e, 0xc7, //0x000063d2 vmovq %rdi, %xmm0 + 0xc5, 0xfa, 0x7f, 0x00, //0x000063d7 vmovdqu %xmm0, (%rax) + 0x48, 0x89, 0xc7, //0x000063db movq %rax, %rdi + 0x5d, //0x000063de popq %rbp + 0xe9, 0x6c, 0xee, 0xff, 0xff, //0x000063df jmp _fsm_exec + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000063e4 .p2align 4, 0x90 + //0x000063f0 _validate_one + 0x55, //0x000063f0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000063f1 movq %rsp, %rbp + 0x48, 0x89, 0xd0, //0x000063f4 movq %rdx, %rax + 0x48, 0x89, 0xf2, //0x000063f7 movq %rsi, %rdx + 0x48, 0x89, 0xfe, //0x000063fa movq %rdi, %rsi + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x000063fd movl $1, %ecx + 0xc4, 0xe1, 0xf9, 0x6e, 0xc1, //0x00006402 vmovq %rcx, %xmm0 + 0xc5, 0xfa, 0x7f, 0x00, //0x00006407 vmovdqu %xmm0, (%rax) + 0xb9, 0x20, 0x00, 0x00, 0x00, //0x0000640b movl $32, %ecx + 0x48, 0x89, 0xc7, //0x00006410 movq %rax, %rdi + 0x5d, //0x00006413 popq %rbp + 0xe9, 0x37, 0xee, 0xff, 0xff, //0x00006414 jmp _fsm_exec + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00006419 .p2align 5, 0x00 + //0x00006420 LCPI28_0 + 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, //0x00006420 QUAD $0x2c2c2c2c2c2c2c2c; QUAD $0x2c2c2c2c2c2c2c2c // .space 16, ',,,,,,,,,,,,,,,,' + 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, //0x00006430 QUAD $0x2c2c2c2c2c2c2c2c; QUAD $0x2c2c2c2c2c2c2c2c // .space 16, ',,,,,,,,,,,,,,,,' + //0x00006440 LCPI28_1 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00006440 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00006450 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x00006460 LCPI28_2 + 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, //0x00006460 QUAD $0x7d7d7d7d7d7d7d7d; QUAD $0x7d7d7d7d7d7d7d7d // .space 16, '}}}}}}}}}}}}}}}}' + 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, //0x00006470 QUAD $0x7d7d7d7d7d7d7d7d; QUAD $0x7d7d7d7d7d7d7d7d // .space 16, '}}}}}}}}}}}}}}}}' + //0x00006480 LCPI28_6 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x00006480 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x00006490 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x000064a0 LCPI28_7 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000064a0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000064b0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x000064c0 LCPI28_8 + 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, //0x000064c0 QUAD $0x7b7b7b7b7b7b7b7b; QUAD $0x7b7b7b7b7b7b7b7b // .space 16, '{{{{{{{{{{{{{{{{' + 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, //0x000064d0 QUAD $0x7b7b7b7b7b7b7b7b; QUAD $0x7b7b7b7b7b7b7b7b // .space 16, '{{{{{{{{{{{{{{{{' + //0x000064e0 LCPI28_9 + 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, //0x000064e0 QUAD $0x5b5b5b5b5b5b5b5b; QUAD $0x5b5b5b5b5b5b5b5b // .space 16, '[[[[[[[[[[[[[[[[' + 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, //0x000064f0 QUAD $0x5b5b5b5b5b5b5b5b; QUAD $0x5b5b5b5b5b5b5b5b // .space 16, '[[[[[[[[[[[[[[[[' + //0x00006500 LCPI28_10 + 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, //0x00006500 QUAD $0x5d5d5d5d5d5d5d5d; QUAD $0x5d5d5d5d5d5d5d5d // .space 16, ']]]]]]]]]]]]]]]]' + 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, //0x00006510 QUAD $0x5d5d5d5d5d5d5d5d; QUAD $0x5d5d5d5d5d5d5d5d // .space 16, ']]]]]]]]]]]]]]]]' + //0x00006520 .p2align 4, 0x00 + //0x00006520 LCPI28_3 + 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, //0x00006520 QUAD $0x2c2c2c2c2c2c2c2c; QUAD $0x2c2c2c2c2c2c2c2c // .space 16, ',,,,,,,,,,,,,,,,' + //0x00006530 LCPI28_4 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00006530 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x00006540 LCPI28_5 + 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, //0x00006540 QUAD $0x7d7d7d7d7d7d7d7d; QUAD $0x7d7d7d7d7d7d7d7d // .space 16, '}}}}}}}}}}}}}}}}' + //0x00006550 .p2align 4, 0x90 + //0x00006550 _skip_one_fast + 0x55, //0x00006550 pushq %rbp + 0x48, 0x89, 0xe5, //0x00006551 movq %rsp, %rbp + 0x41, 0x57, //0x00006554 pushq %r15 + 0x41, 0x56, //0x00006556 pushq %r14 + 0x41, 0x55, //0x00006558 pushq %r13 + 0x41, 0x54, //0x0000655a pushq %r12 + 0x53, //0x0000655c pushq %rbx + 0x48, 0x81, 0xec, 0x80, 0x00, 0x00, 0x00, //0x0000655d subq $128, %rsp + 0x49, 0x89, 0xf6, //0x00006564 movq %rsi, %r14 + 0x49, 0x89, 0xff, //0x00006567 movq %rdi, %r15 + 0x48, 0x8b, 0x3f, //0x0000656a movq (%rdi), %rdi + 0x49, 0x8b, 0x77, 0x08, //0x0000656d movq $8(%r15), %rsi + 0x4c, 0x89, 0xf2, //0x00006571 movq %r14, %rdx + 0xe8, 0xa7, 0xdc, 0xff, 0xff, //0x00006574 callq _advance_ns + 0x4d, 0x8b, 0x0e, //0x00006579 movq (%r14), %r9 + 0x4d, 0x8d, 0x41, 0xff, //0x0000657c leaq $-1(%r9), %r8 + 0x0f, 0xbe, 0xc8, //0x00006580 movsbl %al, %ecx + 0x83, 0xf9, 0x7b, //0x00006583 cmpl $123, %ecx + 0x0f, 0x87, 0x87, 0x01, 0x00, 0x00, //0x00006586 ja LBB28_26 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000658c movq $-1, %rax + 0x48, 0x8d, 0x35, 0x32, 0x09, 0x00, 0x00, //0x00006593 leaq $2354(%rip), %rsi /* LJTI28_0+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8e, //0x0000659a movslq (%rsi,%rcx,4), %rcx + 0x48, 0x01, 0xf1, //0x0000659e addq %rsi, %rcx + 0xff, 0xe1, //0x000065a1 jmpq *%rcx + //0x000065a3 LBB28_2 + 0x49, 0x8b, 0x07, //0x000065a3 movq (%r15), %rax + 0x49, 0x8b, 0x7f, 0x08, //0x000065a6 movq $8(%r15), %rdi + 0x48, 0x89, 0xfe, //0x000065aa movq %rdi, %rsi + 0x4c, 0x29, 0xce, //0x000065ad subq %r9, %rsi + 0x4a, 0x8d, 0x0c, 0x08, //0x000065b0 leaq (%rax,%r9), %rcx + 0x48, 0x83, 0xfe, 0x20, //0x000065b4 cmpq $32, %rsi + 0x0f, 0x82, 0x6a, 0x00, 0x00, 0x00, //0x000065b8 jb LBB28_7 + 0x4c, 0x29, 0xcf, //0x000065be subq %r9, %rdi + 0x48, 0x83, 0xc7, 0xe0, //0x000065c1 addq $-32, %rdi + 0x48, 0x89, 0xfa, //0x000065c5 movq %rdi, %rdx + 0x48, 0x83, 0xe2, 0xe0, //0x000065c8 andq $-32, %rdx + 0x4c, 0x01, 0xca, //0x000065cc addq %r9, %rdx + 0x48, 0x8d, 0x54, 0x10, 0x20, //0x000065cf leaq $32(%rax,%rdx), %rdx + 0x83, 0xe7, 0x1f, //0x000065d4 andl $31, %edi + 0xc5, 0xfd, 0x6f, 0x05, 0x41, 0xfe, 0xff, 0xff, //0x000065d7 vmovdqa $-447(%rip), %ymm0 /* LCPI28_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x0d, 0x59, 0xfe, 0xff, 0xff, //0x000065df vmovdqa $-423(%rip), %ymm1 /* LCPI28_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x15, 0x71, 0xfe, 0xff, 0xff, //0x000065e7 vmovdqa $-399(%rip), %ymm2 /* LCPI28_2+0(%rip) */ + 0x90, //0x000065ef .p2align 4, 0x90 + //0x000065f0 LBB28_4 + 0xc5, 0xfe, 0x6f, 0x19, //0x000065f0 vmovdqu (%rcx), %ymm3 + 0xc5, 0xe5, 0x74, 0xe0, //0x000065f4 vpcmpeqb %ymm0, %ymm3, %ymm4 + 0xc5, 0xe5, 0xeb, 0xd9, //0x000065f8 vpor %ymm1, %ymm3, %ymm3 + 0xc5, 0xe5, 0x74, 0xda, //0x000065fc vpcmpeqb %ymm2, %ymm3, %ymm3 + 0xc5, 0xe5, 0xeb, 0xdc, //0x00006600 vpor %ymm4, %ymm3, %ymm3 + 0xc5, 0xfd, 0xd7, 0xdb, //0x00006604 vpmovmskb %ymm3, %ebx + 0x85, 0xdb, //0x00006608 testl %ebx, %ebx + 0x0f, 0x85, 0xcb, 0x00, 0x00, 0x00, //0x0000660a jne LBB28_20 + 0x48, 0x83, 0xc1, 0x20, //0x00006610 addq $32, %rcx + 0x48, 0x83, 0xc6, 0xe0, //0x00006614 addq $-32, %rsi + 0x48, 0x83, 0xfe, 0x1f, //0x00006618 cmpq $31, %rsi + 0x0f, 0x87, 0xce, 0xff, 0xff, 0xff, //0x0000661c ja LBB28_4 + 0x48, 0x89, 0xfe, //0x00006622 movq %rdi, %rsi + 0x48, 0x89, 0xd1, //0x00006625 movq %rdx, %rcx + //0x00006628 LBB28_7 + 0x48, 0x83, 0xfe, 0x10, //0x00006628 cmpq $16, %rsi + 0x0f, 0x82, 0x67, 0x00, 0x00, 0x00, //0x0000662c jb LBB28_12 + 0x48, 0x8d, 0x56, 0xf0, //0x00006632 leaq $-16(%rsi), %rdx + 0x48, 0x89, 0xd7, //0x00006636 movq %rdx, %rdi + 0x48, 0x83, 0xe7, 0xf0, //0x00006639 andq $-16, %rdi + 0x48, 0x8d, 0x7c, 0x0f, 0x10, //0x0000663d leaq $16(%rdi,%rcx), %rdi + 0x83, 0xe2, 0x0f, //0x00006642 andl $15, %edx + 0xc5, 0xf9, 0x6f, 0x05, 0xd3, 0xfe, 0xff, 0xff, //0x00006645 vmovdqa $-301(%rip), %xmm0 /* LCPI28_3+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0xdb, 0xfe, 0xff, 0xff, //0x0000664d vmovdqa $-293(%rip), %xmm1 /* LCPI28_4+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x15, 0xe3, 0xfe, 0xff, 0xff, //0x00006655 vmovdqa $-285(%rip), %xmm2 /* LCPI28_5+0(%rip) */ + 0x90, 0x90, 0x90, //0x0000665d .p2align 4, 0x90 + //0x00006660 LBB28_9 + 0xc5, 0xfa, 0x6f, 0x19, //0x00006660 vmovdqu (%rcx), %xmm3 + 0xc5, 0xe1, 0x74, 0xe0, //0x00006664 vpcmpeqb %xmm0, %xmm3, %xmm4 + 0xc5, 0xe1, 0xeb, 0xd9, //0x00006668 vpor %xmm1, %xmm3, %xmm3 + 0xc5, 0xe1, 0x74, 0xda, //0x0000666c vpcmpeqb %xmm2, %xmm3, %xmm3 + 0xc5, 0xe1, 0xeb, 0xdc, //0x00006670 vpor %xmm4, %xmm3, %xmm3 + 0xc5, 0xf9, 0xd7, 0xdb, //0x00006674 vpmovmskb %xmm3, %ebx + 0x66, 0x85, 0xdb, //0x00006678 testw %bx, %bx + 0x0f, 0x85, 0xa0, 0x07, 0x00, 0x00, //0x0000667b jne LBB28_92 + 0x48, 0x83, 0xc1, 0x10, //0x00006681 addq $16, %rcx + 0x48, 0x83, 0xc6, 0xf0, //0x00006685 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x0f, //0x00006689 cmpq $15, %rsi + 0x0f, 0x87, 0xcd, 0xff, 0xff, 0xff, //0x0000668d ja LBB28_9 + 0x48, 0x89, 0xd6, //0x00006693 movq %rdx, %rsi + 0x48, 0x89, 0xf9, //0x00006696 movq %rdi, %rcx + //0x00006699 LBB28_12 + 0x48, 0x85, 0xf6, //0x00006699 testq %rsi, %rsi + 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x0000669c je LBB28_19 + 0x48, 0x8d, 0x14, 0x31, //0x000066a2 leaq (%rcx,%rsi), %rdx + //0x000066a6 LBB28_14 + 0x0f, 0xb6, 0x19, //0x000066a6 movzbl (%rcx), %ebx + 0x80, 0xfb, 0x2c, //0x000066a9 cmpb $44, %bl + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x000066ac je LBB28_19 + 0x80, 0xfb, 0x7d, //0x000066b2 cmpb $125, %bl + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x000066b5 je LBB28_19 + 0x80, 0xfb, 0x5d, //0x000066bb cmpb $93, %bl + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x000066be je LBB28_19 + 0x48, 0xff, 0xc1, //0x000066c4 incq %rcx + 0x48, 0xff, 0xce, //0x000066c7 decq %rsi + 0x0f, 0x85, 0xd6, 0xff, 0xff, 0xff, //0x000066ca jne LBB28_14 + 0x48, 0x89, 0xd1, //0x000066d0 movq %rdx, %rcx + //0x000066d3 LBB28_19 + 0x48, 0x29, 0xc1, //0x000066d3 subq %rax, %rcx + 0xe9, 0x0d, 0x00, 0x00, 0x00, //0x000066d6 jmp LBB28_22 + //0x000066db LBB28_20 + 0x48, 0x63, 0xd3, //0x000066db movslq %ebx, %rdx + //0x000066de LBB28_21 + 0x48, 0x0f, 0xbc, 0xd2, //0x000066de bsfq %rdx, %rdx + 0x48, 0x29, 0xc1, //0x000066e2 subq %rax, %rcx + 0x48, 0x01, 0xd1, //0x000066e5 addq %rdx, %rcx + //0x000066e8 LBB28_22 + 0x49, 0x89, 0x0e, //0x000066e8 movq %rcx, (%r14) + //0x000066eb LBB28_23 + 0x4c, 0x89, 0xc0, //0x000066eb movq %r8, %rax + //0x000066ee LBB28_24 + 0x48, 0x8d, 0x65, 0xd8, //0x000066ee leaq $-40(%rbp), %rsp + 0x5b, //0x000066f2 popq %rbx + 0x41, 0x5c, //0x000066f3 popq %r12 + 0x41, 0x5d, //0x000066f5 popq %r13 + 0x41, 0x5e, //0x000066f7 popq %r14 + 0x41, 0x5f, //0x000066f9 popq %r15 + 0x5d, //0x000066fb popq %rbp + 0xc5, 0xf8, 0x77, //0x000066fc vzeroupper + 0xc3, //0x000066ff retq + //0x00006700 LBB28_25 + 0x49, 0x83, 0xc1, 0x03, //0x00006700 addq $3, %r9 + 0x4d, 0x3b, 0x4f, 0x08, //0x00006704 cmpq $8(%r15), %r9 + 0x0f, 0x87, 0xe0, 0xff, 0xff, 0xff, //0x00006708 ja LBB28_24 + 0xe9, 0xcf, 0x03, 0x00, 0x00, //0x0000670e jmp LBB28_62 + //0x00006713 LBB28_26 + 0x4d, 0x89, 0x06, //0x00006713 movq %r8, (%r14) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00006716 movq $-2, %rax + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000671d jmp LBB28_24 + //0x00006722 LBB28_27 + 0x4d, 0x89, 0xc4, //0x00006722 movq %r8, %r12 + 0x49, 0x8b, 0x0f, //0x00006725 movq (%r15), %rcx + 0x4d, 0x8b, 0x5f, 0x08, //0x00006728 movq $8(%r15), %r11 + 0x48, 0x89, 0x4c, 0x24, 0x10, //0x0000672c movq %rcx, $16(%rsp) + 0x4e, 0x8d, 0x3c, 0x09, //0x00006731 leaq (%rcx,%r9), %r15 + 0x4d, 0x29, 0xcb, //0x00006735 subq %r9, %r11 + 0x49, 0x83, 0xfb, 0x20, //0x00006738 cmpq $32, %r11 + 0x0f, 0x8c, 0xf6, 0x06, 0x00, 0x00, //0x0000673c jl LBB28_36 + 0xbb, 0x20, 0x00, 0x00, 0x00, //0x00006742 movl $32, %ebx + 0x41, 0xb9, 0xff, 0xff, 0xff, 0xff, //0x00006747 movl $4294967295, %r9d + 0x31, 0xd2, //0x0000674d xorl %edx, %edx + 0xc5, 0xfd, 0x6f, 0x05, 0x29, 0xfd, 0xff, 0xff, //0x0000674f vmovdqa $-727(%rip), %ymm0 /* LCPI28_6+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x0d, 0x41, 0xfd, 0xff, 0xff, //0x00006757 vmovdqa $-703(%rip), %ymm1 /* LCPI28_7+0(%rip) */ + 0x45, 0x8d, 0x91, 0xab, 0xaa, 0xaa, 0xaa, //0x0000675f leal $-1431655765(%r9), %r10d + 0x31, 0xff, //0x00006766 xorl %edi, %edi + 0xe9, 0x58, 0x00, 0x00, 0x00, //0x00006768 jmp LBB28_29 + 0x90, 0x90, 0x90, //0x0000676d .p2align 4, 0x90 + //0x00006770 LBB28_32 + 0x89, 0xfe, //0x00006770 movl %edi, %esi + 0x44, 0x31, 0xce, //0x00006772 xorl %r9d, %esi + 0x21, 0xce, //0x00006775 andl %ecx, %esi + 0x44, 0x8d, 0x04, 0x36, //0x00006777 leal (%rsi,%rsi), %r8d + 0x41, 0x09, 0xf8, //0x0000677b orl %edi, %r8d + 0x44, 0x89, 0xc1, //0x0000677e movl %r8d, %ecx + 0x44, 0x31, 0xd1, //0x00006781 xorl %r10d, %ecx + 0x21, 0xf1, //0x00006784 andl %esi, %ecx + 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00006786 andl $-1431655766, %ecx + 0x31, 0xff, //0x0000678c xorl %edi, %edi + 0x01, 0xf1, //0x0000678e addl %esi, %ecx + 0x40, 0x0f, 0x92, 0xc7, //0x00006790 setb %dil + 0x01, 0xc9, //0x00006794 addl %ecx, %ecx + 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00006796 xorl $1431655765, %ecx + 0x44, 0x21, 0xc1, //0x0000679c andl %r8d, %ecx + 0x44, 0x31, 0xc9, //0x0000679f xorl %r9d, %ecx + 0x41, 0x21, 0xcd, //0x000067a2 andl %ecx, %r13d + 0x45, 0x85, 0xed, //0x000067a5 testl %r13d, %r13d + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x000067a8 jne LBB28_90 + //0x000067ae LBB28_33 + 0x48, 0x83, 0xc2, 0x20, //0x000067ae addq $32, %rdx + 0x49, 0x8d, 0x4c, 0x1b, 0xe0, //0x000067b2 leaq $-32(%r11,%rbx), %rcx + 0x48, 0x83, 0xc3, 0xe0, //0x000067b7 addq $-32, %rbx + 0x48, 0x83, 0xf9, 0x3f, //0x000067bb cmpq $63, %rcx + 0x0f, 0x8e, 0x64, 0x06, 0x00, 0x00, //0x000067bf jle LBB28_34 + //0x000067c5 LBB28_29 + 0xc4, 0xc1, 0x7e, 0x6f, 0x14, 0x17, //0x000067c5 vmovdqu (%r15,%rdx), %ymm2 + 0xc5, 0xed, 0x74, 0xd8, //0x000067cb vpcmpeqb %ymm0, %ymm2, %ymm3 + 0xc5, 0x7d, 0xd7, 0xeb, //0x000067cf vpmovmskb %ymm3, %r13d + 0xc5, 0xed, 0x74, 0xd1, //0x000067d3 vpcmpeqb %ymm1, %ymm2, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x000067d7 vpmovmskb %ymm2, %ecx + 0x48, 0x85, 0xff, //0x000067db testq %rdi, %rdi + 0x0f, 0x85, 0x8c, 0xff, 0xff, 0xff, //0x000067de jne LBB28_32 + 0x85, 0xc9, //0x000067e4 testl %ecx, %ecx + 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x000067e6 jne LBB28_32 + 0x31, 0xff, //0x000067ec xorl %edi, %edi + 0x45, 0x85, 0xed, //0x000067ee testl %r13d, %r13d + 0x0f, 0x84, 0xb7, 0xff, 0xff, 0xff, //0x000067f1 je LBB28_33 + //0x000067f7 LBB28_90 + 0x49, 0x0f, 0xbc, 0xc5, //0x000067f7 bsfq %r13, %rax + 0x49, 0x01, 0xc7, //0x000067fb addq %rax, %r15 + 0x49, 0x01, 0xd7, //0x000067fe addq %rdx, %r15 + //0x00006801 LBB28_91 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00006801 subq $16(%rsp), %r15 + 0x49, 0xff, 0xc7, //0x00006806 incq %r15 + 0x4d, 0x89, 0x3e, //0x00006809 movq %r15, (%r14) + 0x4c, 0x89, 0xe0, //0x0000680c movq %r12, %rax + 0xe9, 0xda, 0xfe, 0xff, 0xff, //0x0000680f jmp LBB28_24 + //0x00006814 LBB28_37 + 0x4d, 0x89, 0xc4, //0x00006814 movq %r8, %r12 + 0x49, 0x8b, 0x4f, 0x08, //0x00006817 movq $8(%r15), %rcx + 0x4c, 0x29, 0xc9, //0x0000681b subq %r9, %rcx + 0x4d, 0x03, 0x0f, //0x0000681e addq (%r15), %r9 + 0x31, 0xd2, //0x00006821 xorl %edx, %edx + 0xc5, 0xfd, 0x6f, 0x05, 0x55, 0xfc, 0xff, 0xff, //0x00006823 vmovdqa $-939(%rip), %ymm0 /* LCPI28_6+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x0d, 0x6d, 0xfc, 0xff, 0xff, //0x0000682b vmovdqa $-915(%rip), %ymm1 /* LCPI28_7+0(%rip) */ + 0xc5, 0xe9, 0x76, 0xd2, //0x00006833 vpcmpeqd %xmm2, %xmm2, %xmm2 + 0xc5, 0xfd, 0x6f, 0x1d, 0xa1, 0xfc, 0xff, 0xff, //0x00006837 vmovdqa $-863(%rip), %ymm3 /* LCPI28_9+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x25, 0xb9, 0xfc, 0xff, 0xff, //0x0000683f vmovdqa $-839(%rip), %ymm4 /* LCPI28_10+0(%rip) */ + 0xc4, 0x41, 0x30, 0x57, 0xc9, //0x00006847 vxorps %xmm9, %xmm9, %xmm9 + 0x45, 0x31, 0xd2, //0x0000684c xorl %r10d, %r10d + 0x45, 0x31, 0xc0, //0x0000684f xorl %r8d, %r8d + 0x31, 0xf6, //0x00006852 xorl %esi, %esi + 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x00006854 jmp LBB28_39 + //0x00006859 LBB28_38 + 0x49, 0xc1, 0xfd, 0x3f, //0x00006859 sarq $63, %r13 + 0xf3, 0x48, 0x0f, 0xb8, 0xc9, //0x0000685d popcntq %rcx, %rcx + 0x49, 0x01, 0xc8, //0x00006862 addq %rcx, %r8 + 0x49, 0x83, 0xc1, 0x40, //0x00006865 addq $64, %r9 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00006869 movq $16(%rsp), %rcx + 0x48, 0x83, 0xc1, 0xc0, //0x0000686e addq $-64, %rcx + 0x4c, 0x89, 0xea, //0x00006872 movq %r13, %rdx + //0x00006875 LBB28_39 + 0x48, 0x83, 0xf9, 0x40, //0x00006875 cmpq $64, %rcx + 0x48, 0x89, 0x4c, 0x24, 0x10, //0x00006879 movq %rcx, $16(%rsp) + 0x0f, 0x8c, 0x28, 0x01, 0x00, 0x00, //0x0000687e jl LBB28_46 + //0x00006884 LBB28_40 + 0xc4, 0xc1, 0x7e, 0x6f, 0x39, //0x00006884 vmovdqu (%r9), %ymm7 + 0xc4, 0xc1, 0x7e, 0x6f, 0x71, 0x20, //0x00006889 vmovdqu $32(%r9), %ymm6 + 0xc5, 0x45, 0x74, 0xc0, //0x0000688f vpcmpeqb %ymm0, %ymm7, %ymm8 + 0xc4, 0x41, 0x7d, 0xd7, 0xe8, //0x00006893 vpmovmskb %ymm8, %r13d + 0xc5, 0x4d, 0x74, 0xc0, //0x00006898 vpcmpeqb %ymm0, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf8, //0x0000689c vpmovmskb %ymm8, %edi + 0x48, 0xc1, 0xe7, 0x20, //0x000068a1 shlq $32, %rdi + 0x49, 0x09, 0xfd, //0x000068a5 orq %rdi, %r13 + 0xc5, 0x45, 0x74, 0xc1, //0x000068a8 vpcmpeqb %ymm1, %ymm7, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf8, //0x000068ac vpmovmskb %ymm8, %edi + 0xc5, 0x4d, 0x74, 0xc1, //0x000068b1 vpcmpeqb %ymm1, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xd8, //0x000068b5 vpmovmskb %ymm8, %ebx + 0x48, 0xc1, 0xe3, 0x20, //0x000068ba shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x000068be orq %rbx, %rdi + 0x48, 0x89, 0xfb, //0x000068c1 movq %rdi, %rbx + 0x4c, 0x09, 0xd3, //0x000068c4 orq %r10, %rbx + 0x0f, 0x84, 0x51, 0x00, 0x00, 0x00, //0x000068c7 je LBB28_42 + 0x4c, 0x89, 0xd3, //0x000068cd movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x000068d0 notq %rbx + 0x48, 0x21, 0xfb, //0x000068d3 andq %rdi, %rbx + 0x4c, 0x8d, 0x1c, 0x1b, //0x000068d6 leaq (%rbx,%rbx), %r11 + 0x4d, 0x09, 0xd3, //0x000068da orq %r10, %r11 + 0x49, 0x89, 0xd2, //0x000068dd movq %rdx, %r10 + 0x4c, 0x89, 0xda, //0x000068e0 movq %r11, %rdx + 0x48, 0xb9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000068e3 movabsq $-6148914691236517206, %rcx + 0x48, 0x31, 0xca, //0x000068ed xorq %rcx, %rdx + 0x48, 0x21, 0xcf, //0x000068f0 andq %rcx, %rdi + 0x48, 0x21, 0xd7, //0x000068f3 andq %rdx, %rdi + 0x4c, 0x89, 0xd2, //0x000068f6 movq %r10, %rdx + 0x45, 0x31, 0xd2, //0x000068f9 xorl %r10d, %r10d + 0x48, 0x01, 0xdf, //0x000068fc addq %rbx, %rdi + 0x41, 0x0f, 0x92, 0xc2, //0x000068ff setb %r10b + 0x48, 0x01, 0xff, //0x00006903 addq %rdi, %rdi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00006906 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcf, //0x00006910 xorq %rcx, %rdi + 0x4c, 0x21, 0xdf, //0x00006913 andq %r11, %rdi + 0x48, 0xf7, 0xd7, //0x00006916 notq %rdi + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00006919 jmp LBB28_43 + //0x0000691e LBB28_42 + 0x48, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000691e movq $-1, %rdi + 0x45, 0x31, 0xd2, //0x00006925 xorl %r10d, %r10d + //0x00006928 LBB28_43 + 0x4c, 0x21, 0xef, //0x00006928 andq %r13, %rdi + 0xc4, 0xe1, 0xf9, 0x6e, 0xef, //0x0000692b vmovq %rdi, %xmm5 + 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x00006930 vpclmulqdq $0, %xmm2, %xmm5, %xmm5 + 0xc4, 0xc1, 0xf9, 0x7e, 0xed, //0x00006936 vmovq %xmm5, %r13 + 0x49, 0x31, 0xd5, //0x0000693b xorq %rdx, %r13 + 0xc5, 0xc5, 0x74, 0xeb, //0x0000693e vpcmpeqb %ymm3, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xcd, //0x00006942 vpmovmskb %ymm5, %ecx + 0xc5, 0xcd, 0x74, 0xeb, //0x00006946 vpcmpeqb %ymm3, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xd5, //0x0000694a vpmovmskb %ymm5, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x0000694e shlq $32, %rdx + 0x48, 0x09, 0xd1, //0x00006952 orq %rdx, %rcx + 0x4c, 0x89, 0xea, //0x00006955 movq %r13, %rdx + 0x48, 0xf7, 0xd2, //0x00006958 notq %rdx + 0x48, 0x21, 0xd1, //0x0000695b andq %rdx, %rcx + 0xc5, 0xc5, 0x74, 0xec, //0x0000695e vpcmpeqb %ymm4, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xfd, //0x00006962 vpmovmskb %ymm5, %edi + 0xc5, 0xcd, 0x74, 0xec, //0x00006966 vpcmpeqb %ymm4, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xdd, //0x0000696a vpmovmskb %ymm5, %ebx + 0x48, 0xc1, 0xe3, 0x20, //0x0000696e shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x00006972 orq %rbx, %rdi + 0x48, 0x21, 0xd7, //0x00006975 andq %rdx, %rdi + 0x0f, 0x84, 0xdb, 0xfe, 0xff, 0xff, //0x00006978 je LBB28_38 + 0x90, 0x90, //0x0000697e .p2align 4, 0x90 + //0x00006980 LBB28_44 + 0x48, 0x8d, 0x5f, 0xff, //0x00006980 leaq $-1(%rdi), %rbx + 0x48, 0x89, 0xda, //0x00006984 movq %rbx, %rdx + 0x48, 0x21, 0xca, //0x00006987 andq %rcx, %rdx + 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x0000698a popcntq %rdx, %rdx + 0x4c, 0x01, 0xc2, //0x0000698f addq %r8, %rdx + 0x48, 0x39, 0xf2, //0x00006992 cmpq %rsi, %rdx + 0x0f, 0x86, 0x19, 0x04, 0x00, 0x00, //0x00006995 jbe LBB28_87 + 0x48, 0xff, 0xc6, //0x0000699b incq %rsi + 0x48, 0x21, 0xdf, //0x0000699e andq %rbx, %rdi + 0x0f, 0x85, 0xd9, 0xff, 0xff, 0xff, //0x000069a1 jne LBB28_44 + 0xe9, 0xad, 0xfe, 0xff, 0xff, //0x000069a7 jmp LBB28_38 + //0x000069ac LBB28_46 + 0x48, 0x85, 0xc9, //0x000069ac testq %rcx, %rcx + 0x0f, 0x8e, 0x91, 0x04, 0x00, 0x00, //0x000069af jle LBB28_93 + 0xc5, 0x7c, 0x11, 0x4c, 0x24, 0x40, //0x000069b5 vmovups %ymm9, $64(%rsp) + 0xc5, 0x7c, 0x11, 0x4c, 0x24, 0x20, //0x000069bb vmovups %ymm9, $32(%rsp) + 0x44, 0x89, 0xc9, //0x000069c1 movl %r9d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x000069c4 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x000069ca cmpl $4033, %ecx + 0x0f, 0x82, 0xae, 0xfe, 0xff, 0xff, //0x000069d0 jb LBB28_40 + 0x48, 0x83, 0x7c, 0x24, 0x10, 0x20, //0x000069d6 cmpq $32, $16(%rsp) + 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x000069dc jb LBB28_50 + 0xc4, 0xc1, 0x7c, 0x10, 0x29, //0x000069e2 vmovups (%r9), %ymm5 + 0xc5, 0xfc, 0x11, 0x6c, 0x24, 0x20, //0x000069e7 vmovups %ymm5, $32(%rsp) + 0x49, 0x83, 0xc1, 0x20, //0x000069ed addq $32, %r9 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x000069f1 movq $16(%rsp), %rcx + 0x48, 0x8d, 0x59, 0xe0, //0x000069f6 leaq $-32(%rcx), %rbx + 0x48, 0x8d, 0x7c, 0x24, 0x40, //0x000069fa leaq $64(%rsp), %rdi + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x000069ff jmp LBB28_51 + //0x00006a04 LBB28_50 + 0x48, 0x8d, 0x7c, 0x24, 0x20, //0x00006a04 leaq $32(%rsp), %rdi + 0x48, 0x8b, 0x5c, 0x24, 0x10, //0x00006a09 movq $16(%rsp), %rbx + //0x00006a0e LBB28_51 + 0x48, 0x83, 0xfb, 0x10, //0x00006a0e cmpq $16, %rbx + 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x00006a12 jb LBB28_52 + 0xc4, 0xc1, 0x78, 0x10, 0x29, //0x00006a18 vmovups (%r9), %xmm5 + 0xc5, 0xf8, 0x11, 0x2f, //0x00006a1d vmovups %xmm5, (%rdi) + 0x49, 0x83, 0xc1, 0x10, //0x00006a21 addq $16, %r9 + 0x48, 0x83, 0xc7, 0x10, //0x00006a25 addq $16, %rdi + 0x48, 0x83, 0xc3, 0xf0, //0x00006a29 addq $-16, %rbx + 0x48, 0x83, 0xfb, 0x08, //0x00006a2d cmpq $8, %rbx + 0x0f, 0x83, 0x45, 0x00, 0x00, 0x00, //0x00006a31 jae LBB28_57 + //0x00006a37 LBB28_53 + 0x48, 0x83, 0xfb, 0x04, //0x00006a37 cmpq $4, %rbx + 0x0f, 0x8c, 0x57, 0x00, 0x00, 0x00, //0x00006a3b jl LBB28_54 + //0x00006a41 LBB28_58 + 0x41, 0x8b, 0x09, //0x00006a41 movl (%r9), %ecx + 0x89, 0x0f, //0x00006a44 movl %ecx, (%rdi) + 0x49, 0x83, 0xc1, 0x04, //0x00006a46 addq $4, %r9 + 0x48, 0x83, 0xc7, 0x04, //0x00006a4a addq $4, %rdi + 0x48, 0x83, 0xc3, 0xfc, //0x00006a4e addq $-4, %rbx + 0x48, 0x83, 0xfb, 0x02, //0x00006a52 cmpq $2, %rbx + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x00006a56 jae LBB28_59 + //0x00006a5c LBB28_55 + 0x4c, 0x89, 0xc9, //0x00006a5c movq %r9, %rcx + 0x4c, 0x8d, 0x4c, 0x24, 0x20, //0x00006a5f leaq $32(%rsp), %r9 + 0x48, 0x85, 0xdb, //0x00006a64 testq %rbx, %rbx + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x00006a67 jne LBB28_60 + 0xe9, 0x12, 0xfe, 0xff, 0xff, //0x00006a6d jmp LBB28_40 + //0x00006a72 LBB28_52 + 0x48, 0x83, 0xfb, 0x08, //0x00006a72 cmpq $8, %rbx + 0x0f, 0x82, 0xbb, 0xff, 0xff, 0xff, //0x00006a76 jb LBB28_53 + //0x00006a7c LBB28_57 + 0x49, 0x8b, 0x09, //0x00006a7c movq (%r9), %rcx + 0x48, 0x89, 0x0f, //0x00006a7f movq %rcx, (%rdi) + 0x49, 0x83, 0xc1, 0x08, //0x00006a82 addq $8, %r9 + 0x48, 0x83, 0xc7, 0x08, //0x00006a86 addq $8, %rdi + 0x48, 0x83, 0xc3, 0xf8, //0x00006a8a addq $-8, %rbx + 0x48, 0x83, 0xfb, 0x04, //0x00006a8e cmpq $4, %rbx + 0x0f, 0x8d, 0xa9, 0xff, 0xff, 0xff, //0x00006a92 jge LBB28_58 + //0x00006a98 LBB28_54 + 0x48, 0x83, 0xfb, 0x02, //0x00006a98 cmpq $2, %rbx + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00006a9c jb LBB28_55 + //0x00006aa2 LBB28_59 + 0x41, 0x0f, 0xb7, 0x09, //0x00006aa2 movzwl (%r9), %ecx + 0x66, 0x89, 0x0f, //0x00006aa6 movw %cx, (%rdi) + 0x49, 0x83, 0xc1, 0x02, //0x00006aa9 addq $2, %r9 + 0x48, 0x83, 0xc7, 0x02, //0x00006aad addq $2, %rdi + 0x48, 0x83, 0xc3, 0xfe, //0x00006ab1 addq $-2, %rbx + 0x4c, 0x89, 0xc9, //0x00006ab5 movq %r9, %rcx + 0x4c, 0x8d, 0x4c, 0x24, 0x20, //0x00006ab8 leaq $32(%rsp), %r9 + 0x48, 0x85, 0xdb, //0x00006abd testq %rbx, %rbx + 0x0f, 0x84, 0xbe, 0xfd, 0xff, 0xff, //0x00006ac0 je LBB28_40 + //0x00006ac6 LBB28_60 + 0x8a, 0x09, //0x00006ac6 movb (%rcx), %cl + 0x88, 0x0f, //0x00006ac8 movb %cl, (%rdi) + 0x4c, 0x8d, 0x4c, 0x24, 0x20, //0x00006aca leaq $32(%rsp), %r9 + 0xe9, 0xb0, 0xfd, 0xff, 0xff, //0x00006acf jmp LBB28_40 + //0x00006ad4 LBB28_61 + 0x49, 0x83, 0xc1, 0x04, //0x00006ad4 addq $4, %r9 + 0x4d, 0x3b, 0x4f, 0x08, //0x00006ad8 cmpq $8(%r15), %r9 + 0x0f, 0x87, 0x0c, 0xfc, 0xff, 0xff, //0x00006adc ja LBB28_24 + //0x00006ae2 LBB28_62 + 0x4d, 0x89, 0x0e, //0x00006ae2 movq %r9, (%r14) + 0xe9, 0x01, 0xfc, 0xff, 0xff, //0x00006ae5 jmp LBB28_23 + //0x00006aea LBB28_63 + 0x4c, 0x89, 0x44, 0x24, 0x18, //0x00006aea movq %r8, $24(%rsp) + 0x49, 0x8b, 0x4f, 0x08, //0x00006aef movq $8(%r15), %rcx + 0x4c, 0x29, 0xc9, //0x00006af3 subq %r9, %rcx + 0x4d, 0x03, 0x0f, //0x00006af6 addq (%r15), %r9 + 0x45, 0x31, 0xe4, //0x00006af9 xorl %r12d, %r12d + 0xc5, 0xfd, 0x6f, 0x05, 0x7c, 0xf9, 0xff, 0xff, //0x00006afc vmovdqa $-1668(%rip), %ymm0 /* LCPI28_6+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x0d, 0x94, 0xf9, 0xff, 0xff, //0x00006b04 vmovdqa $-1644(%rip), %ymm1 /* LCPI28_7+0(%rip) */ + 0xc5, 0xe9, 0x76, 0xd2, //0x00006b0c vpcmpeqd %xmm2, %xmm2, %xmm2 + 0xc5, 0xfd, 0x6f, 0x1d, 0xa8, 0xf9, 0xff, 0xff, //0x00006b10 vmovdqa $-1624(%rip), %ymm3 /* LCPI28_8+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x25, 0x40, 0xf9, 0xff, 0xff, //0x00006b18 vmovdqa $-1728(%rip), %ymm4 /* LCPI28_2+0(%rip) */ + 0xc4, 0x41, 0x30, 0x57, 0xc9, //0x00006b20 vxorps %xmm9, %xmm9, %xmm9 + 0x45, 0x31, 0xd2, //0x00006b25 xorl %r10d, %r10d + 0x45, 0x31, 0xc0, //0x00006b28 xorl %r8d, %r8d + 0x31, 0xf6, //0x00006b2b xorl %esi, %esi + 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x00006b2d jmp LBB28_65 + //0x00006b32 LBB28_64 + 0x49, 0xc1, 0xfd, 0x3f, //0x00006b32 sarq $63, %r13 + 0xf3, 0x48, 0x0f, 0xb8, 0xc9, //0x00006b36 popcntq %rcx, %rcx + 0x49, 0x01, 0xc8, //0x00006b3b addq %rcx, %r8 + 0x49, 0x83, 0xc1, 0x40, //0x00006b3e addq $64, %r9 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00006b42 movq $16(%rsp), %rcx + 0x48, 0x83, 0xc1, 0xc0, //0x00006b47 addq $-64, %rcx + 0x4d, 0x89, 0xec, //0x00006b4b movq %r13, %r12 + //0x00006b4e LBB28_65 + 0x48, 0x83, 0xf9, 0x40, //0x00006b4e cmpq $64, %rcx + 0x48, 0x89, 0x4c, 0x24, 0x10, //0x00006b52 movq %rcx, $16(%rsp) + 0x0f, 0x8c, 0x2f, 0x01, 0x00, 0x00, //0x00006b57 jl LBB28_72 + //0x00006b5d LBB28_66 + 0xc4, 0xc1, 0x7e, 0x6f, 0x39, //0x00006b5d vmovdqu (%r9), %ymm7 + 0xc4, 0xc1, 0x7e, 0x6f, 0x71, 0x20, //0x00006b62 vmovdqu $32(%r9), %ymm6 + 0xc5, 0x45, 0x74, 0xc0, //0x00006b68 vpcmpeqb %ymm0, %ymm7, %ymm8 + 0xc4, 0x41, 0x7d, 0xd7, 0xe8, //0x00006b6c vpmovmskb %ymm8, %r13d + 0xc5, 0x4d, 0x74, 0xc0, //0x00006b71 vpcmpeqb %ymm0, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf8, //0x00006b75 vpmovmskb %ymm8, %edi + 0x48, 0xc1, 0xe7, 0x20, //0x00006b7a shlq $32, %rdi + 0x49, 0x09, 0xfd, //0x00006b7e orq %rdi, %r13 + 0xc5, 0x45, 0x74, 0xc1, //0x00006b81 vpcmpeqb %ymm1, %ymm7, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf8, //0x00006b85 vpmovmskb %ymm8, %edi + 0xc5, 0x4d, 0x74, 0xc1, //0x00006b8a vpcmpeqb %ymm1, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xd8, //0x00006b8e vpmovmskb %ymm8, %ebx + 0x48, 0xc1, 0xe3, 0x20, //0x00006b93 shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x00006b97 orq %rbx, %rdi + 0x48, 0x89, 0xfb, //0x00006b9a movq %rdi, %rbx + 0x4c, 0x09, 0xd3, //0x00006b9d orq %r10, %rbx + 0x0f, 0x84, 0x4b, 0x00, 0x00, 0x00, //0x00006ba0 je LBB28_68 + 0x4c, 0x89, 0xd3, //0x00006ba6 movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00006ba9 notq %rbx + 0x48, 0x21, 0xfb, //0x00006bac andq %rdi, %rbx + 0x4c, 0x8d, 0x1c, 0x1b, //0x00006baf leaq (%rbx,%rbx), %r11 + 0x4d, 0x09, 0xd3, //0x00006bb3 orq %r10, %r11 + 0x4c, 0x89, 0xda, //0x00006bb6 movq %r11, %rdx + 0x48, 0xb9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00006bb9 movabsq $-6148914691236517206, %rcx + 0x48, 0x31, 0xca, //0x00006bc3 xorq %rcx, %rdx + 0x48, 0x21, 0xcf, //0x00006bc6 andq %rcx, %rdi + 0x48, 0x21, 0xd7, //0x00006bc9 andq %rdx, %rdi + 0x45, 0x31, 0xd2, //0x00006bcc xorl %r10d, %r10d + 0x48, 0x01, 0xdf, //0x00006bcf addq %rbx, %rdi + 0x41, 0x0f, 0x92, 0xc2, //0x00006bd2 setb %r10b + 0x48, 0x01, 0xff, //0x00006bd6 addq %rdi, %rdi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00006bd9 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcf, //0x00006be3 xorq %rcx, %rdi + 0x4c, 0x21, 0xdf, //0x00006be6 andq %r11, %rdi + 0x48, 0xf7, 0xd7, //0x00006be9 notq %rdi + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00006bec jmp LBB28_69 + //0x00006bf1 LBB28_68 + 0x48, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00006bf1 movq $-1, %rdi + 0x45, 0x31, 0xd2, //0x00006bf8 xorl %r10d, %r10d + //0x00006bfb LBB28_69 + 0x4c, 0x21, 0xef, //0x00006bfb andq %r13, %rdi + 0xc4, 0xe1, 0xf9, 0x6e, 0xef, //0x00006bfe vmovq %rdi, %xmm5 + 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x00006c03 vpclmulqdq $0, %xmm2, %xmm5, %xmm5 + 0xc4, 0xc1, 0xf9, 0x7e, 0xed, //0x00006c09 vmovq %xmm5, %r13 + 0x4d, 0x31, 0xe5, //0x00006c0e xorq %r12, %r13 + 0xc5, 0xc5, 0x74, 0xeb, //0x00006c11 vpcmpeqb %ymm3, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xcd, //0x00006c15 vpmovmskb %ymm5, %ecx + 0xc5, 0xcd, 0x74, 0xeb, //0x00006c19 vpcmpeqb %ymm3, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xd5, //0x00006c1d vpmovmskb %ymm5, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x00006c21 shlq $32, %rdx + 0x48, 0x09, 0xd1, //0x00006c25 orq %rdx, %rcx + 0x4c, 0x89, 0xea, //0x00006c28 movq %r13, %rdx + 0x48, 0xf7, 0xd2, //0x00006c2b notq %rdx + 0x48, 0x21, 0xd1, //0x00006c2e andq %rdx, %rcx + 0xc5, 0xc5, 0x74, 0xec, //0x00006c31 vpcmpeqb %ymm4, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xfd, //0x00006c35 vpmovmskb %ymm5, %edi + 0xc5, 0xcd, 0x74, 0xec, //0x00006c39 vpcmpeqb %ymm4, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xdd, //0x00006c3d vpmovmskb %ymm5, %ebx + 0x48, 0xc1, 0xe3, 0x20, //0x00006c41 shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x00006c45 orq %rbx, %rdi + 0x48, 0x21, 0xd7, //0x00006c48 andq %rdx, %rdi + 0x0f, 0x84, 0xe1, 0xfe, 0xff, 0xff, //0x00006c4b je LBB28_64 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006c51 .p2align 4, 0x90 + //0x00006c60 LBB28_70 + 0x48, 0x8d, 0x5f, 0xff, //0x00006c60 leaq $-1(%rdi), %rbx + 0x48, 0x89, 0xda, //0x00006c64 movq %rbx, %rdx + 0x48, 0x21, 0xca, //0x00006c67 andq %rcx, %rdx + 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x00006c6a popcntq %rdx, %rdx + 0x4c, 0x01, 0xc2, //0x00006c6f addq %r8, %rdx + 0x48, 0x39, 0xf2, //0x00006c72 cmpq %rsi, %rdx + 0x0f, 0x86, 0x6b, 0x01, 0x00, 0x00, //0x00006c75 jbe LBB28_88 + 0x48, 0xff, 0xc6, //0x00006c7b incq %rsi + 0x48, 0x21, 0xdf, //0x00006c7e andq %rbx, %rdi + 0x0f, 0x85, 0xd9, 0xff, 0xff, 0xff, //0x00006c81 jne LBB28_70 + 0xe9, 0xa6, 0xfe, 0xff, 0xff, //0x00006c87 jmp LBB28_64 + //0x00006c8c LBB28_72 + 0x48, 0x85, 0xc9, //0x00006c8c testq %rcx, %rcx + 0x0f, 0x8e, 0xb1, 0x01, 0x00, 0x00, //0x00006c8f jle LBB28_93 + 0xc5, 0x7c, 0x11, 0x4c, 0x24, 0x40, //0x00006c95 vmovups %ymm9, $64(%rsp) + 0xc5, 0x7c, 0x11, 0x4c, 0x24, 0x20, //0x00006c9b vmovups %ymm9, $32(%rsp) + 0x44, 0x89, 0xc9, //0x00006ca1 movl %r9d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00006ca4 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00006caa cmpl $4033, %ecx + 0x0f, 0x82, 0xa7, 0xfe, 0xff, 0xff, //0x00006cb0 jb LBB28_66 + 0x48, 0x83, 0x7c, 0x24, 0x10, 0x20, //0x00006cb6 cmpq $32, $16(%rsp) + 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x00006cbc jb LBB28_76 + 0xc4, 0xc1, 0x7c, 0x10, 0x29, //0x00006cc2 vmovups (%r9), %ymm5 + 0xc5, 0xfc, 0x11, 0x6c, 0x24, 0x20, //0x00006cc7 vmovups %ymm5, $32(%rsp) + 0x49, 0x83, 0xc1, 0x20, //0x00006ccd addq $32, %r9 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00006cd1 movq $16(%rsp), %rcx + 0x48, 0x8d, 0x59, 0xe0, //0x00006cd6 leaq $-32(%rcx), %rbx + 0x48, 0x8d, 0x7c, 0x24, 0x40, //0x00006cda leaq $64(%rsp), %rdi + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00006cdf jmp LBB28_77 + //0x00006ce4 LBB28_76 + 0x48, 0x8d, 0x7c, 0x24, 0x20, //0x00006ce4 leaq $32(%rsp), %rdi + 0x48, 0x8b, 0x5c, 0x24, 0x10, //0x00006ce9 movq $16(%rsp), %rbx + //0x00006cee LBB28_77 + 0x48, 0x83, 0xfb, 0x10, //0x00006cee cmpq $16, %rbx + 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x00006cf2 jb LBB28_78 + 0xc4, 0xc1, 0x78, 0x10, 0x29, //0x00006cf8 vmovups (%r9), %xmm5 + 0xc5, 0xf8, 0x11, 0x2f, //0x00006cfd vmovups %xmm5, (%rdi) + 0x49, 0x83, 0xc1, 0x10, //0x00006d01 addq $16, %r9 + 0x48, 0x83, 0xc7, 0x10, //0x00006d05 addq $16, %rdi + 0x48, 0x83, 0xc3, 0xf0, //0x00006d09 addq $-16, %rbx + 0x48, 0x83, 0xfb, 0x08, //0x00006d0d cmpq $8, %rbx + 0x0f, 0x83, 0x45, 0x00, 0x00, 0x00, //0x00006d11 jae LBB28_83 + //0x00006d17 LBB28_79 + 0x48, 0x83, 0xfb, 0x04, //0x00006d17 cmpq $4, %rbx + 0x0f, 0x8c, 0x57, 0x00, 0x00, 0x00, //0x00006d1b jl LBB28_80 + //0x00006d21 LBB28_84 + 0x41, 0x8b, 0x09, //0x00006d21 movl (%r9), %ecx + 0x89, 0x0f, //0x00006d24 movl %ecx, (%rdi) + 0x49, 0x83, 0xc1, 0x04, //0x00006d26 addq $4, %r9 + 0x48, 0x83, 0xc7, 0x04, //0x00006d2a addq $4, %rdi + 0x48, 0x83, 0xc3, 0xfc, //0x00006d2e addq $-4, %rbx + 0x48, 0x83, 0xfb, 0x02, //0x00006d32 cmpq $2, %rbx + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x00006d36 jae LBB28_85 + //0x00006d3c LBB28_81 + 0x4c, 0x89, 0xc9, //0x00006d3c movq %r9, %rcx + 0x4c, 0x8d, 0x4c, 0x24, 0x20, //0x00006d3f leaq $32(%rsp), %r9 + 0x48, 0x85, 0xdb, //0x00006d44 testq %rbx, %rbx + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x00006d47 jne LBB28_86 + 0xe9, 0x0b, 0xfe, 0xff, 0xff, //0x00006d4d jmp LBB28_66 + //0x00006d52 LBB28_78 + 0x48, 0x83, 0xfb, 0x08, //0x00006d52 cmpq $8, %rbx + 0x0f, 0x82, 0xbb, 0xff, 0xff, 0xff, //0x00006d56 jb LBB28_79 + //0x00006d5c LBB28_83 + 0x49, 0x8b, 0x09, //0x00006d5c movq (%r9), %rcx + 0x48, 0x89, 0x0f, //0x00006d5f movq %rcx, (%rdi) + 0x49, 0x83, 0xc1, 0x08, //0x00006d62 addq $8, %r9 + 0x48, 0x83, 0xc7, 0x08, //0x00006d66 addq $8, %rdi + 0x48, 0x83, 0xc3, 0xf8, //0x00006d6a addq $-8, %rbx + 0x48, 0x83, 0xfb, 0x04, //0x00006d6e cmpq $4, %rbx + 0x0f, 0x8d, 0xa9, 0xff, 0xff, 0xff, //0x00006d72 jge LBB28_84 + //0x00006d78 LBB28_80 + 0x48, 0x83, 0xfb, 0x02, //0x00006d78 cmpq $2, %rbx + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00006d7c jb LBB28_81 + //0x00006d82 LBB28_85 + 0x41, 0x0f, 0xb7, 0x09, //0x00006d82 movzwl (%r9), %ecx + 0x66, 0x89, 0x0f, //0x00006d86 movw %cx, (%rdi) + 0x49, 0x83, 0xc1, 0x02, //0x00006d89 addq $2, %r9 + 0x48, 0x83, 0xc7, 0x02, //0x00006d8d addq $2, %rdi + 0x48, 0x83, 0xc3, 0xfe, //0x00006d91 addq $-2, %rbx + 0x4c, 0x89, 0xc9, //0x00006d95 movq %r9, %rcx + 0x4c, 0x8d, 0x4c, 0x24, 0x20, //0x00006d98 leaq $32(%rsp), %r9 + 0x48, 0x85, 0xdb, //0x00006d9d testq %rbx, %rbx + 0x0f, 0x84, 0xb7, 0xfd, 0xff, 0xff, //0x00006da0 je LBB28_66 + //0x00006da6 LBB28_86 + 0x8a, 0x09, //0x00006da6 movb (%rcx), %cl + 0x88, 0x0f, //0x00006da8 movb %cl, (%rdi) + 0x4c, 0x8d, 0x4c, 0x24, 0x20, //0x00006daa leaq $32(%rsp), %r9 + 0xe9, 0xa9, 0xfd, 0xff, 0xff, //0x00006daf jmp LBB28_66 + //0x00006db4 LBB28_87 + 0x49, 0x8b, 0x47, 0x08, //0x00006db4 movq $8(%r15), %rax + 0x48, 0x0f, 0xbc, 0xcf, //0x00006db8 bsfq %rdi, %rcx + 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x00006dbc subq $16(%rsp), %rcx + 0x48, 0x8d, 0x44, 0x01, 0x01, //0x00006dc1 leaq $1(%rcx,%rax), %rax + 0x49, 0x89, 0x06, //0x00006dc6 movq %rax, (%r14) + 0x49, 0x8b, 0x4f, 0x08, //0x00006dc9 movq $8(%r15), %rcx + 0x48, 0x39, 0xc8, //0x00006dcd cmpq %rcx, %rax + 0x48, 0x0f, 0x47, 0xc1, //0x00006dd0 cmovaq %rcx, %rax + 0x49, 0x89, 0x06, //0x00006dd4 movq %rax, (%r14) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00006dd7 movq $-1, %rax + 0x4c, 0x89, 0xe1, //0x00006dde movq %r12, %rcx + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00006de1 jmp LBB28_89 + //0x00006de6 LBB28_88 + 0x49, 0x8b, 0x47, 0x08, //0x00006de6 movq $8(%r15), %rax + 0x48, 0x0f, 0xbc, 0xcf, //0x00006dea bsfq %rdi, %rcx + 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x00006dee subq $16(%rsp), %rcx + 0x48, 0x8d, 0x44, 0x01, 0x01, //0x00006df3 leaq $1(%rcx,%rax), %rax + 0x49, 0x89, 0x06, //0x00006df8 movq %rax, (%r14) + 0x49, 0x8b, 0x4f, 0x08, //0x00006dfb movq $8(%r15), %rcx + 0x48, 0x39, 0xc8, //0x00006dff cmpq %rcx, %rax + 0x48, 0x0f, 0x47, 0xc1, //0x00006e02 cmovaq %rcx, %rax + 0x49, 0x89, 0x06, //0x00006e06 movq %rax, (%r14) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00006e09 movq $-1, %rax + 0x48, 0x8b, 0x4c, 0x24, 0x18, //0x00006e10 movq $24(%rsp), %rcx + //0x00006e15 LBB28_89 + 0x48, 0x0f, 0x47, 0xc8, //0x00006e15 cmovaq %rax, %rcx + 0x48, 0x89, 0xc8, //0x00006e19 movq %rcx, %rax + 0xe9, 0xcd, 0xf8, 0xff, 0xff, //0x00006e1c jmp LBB28_24 + //0x00006e21 LBB28_92 + 0x0f, 0xb7, 0xd3, //0x00006e21 movzwl %bx, %edx + 0xe9, 0xb5, 0xf8, 0xff, 0xff, //0x00006e24 jmp LBB28_21 + //0x00006e29 LBB28_34 + 0x48, 0x85, 0xff, //0x00006e29 testq %rdi, %rdi + 0x0f, 0x85, 0x20, 0x00, 0x00, 0x00, //0x00006e2c jne LBB28_94 + 0x49, 0x01, 0xd7, //0x00006e32 addq %rdx, %r15 + 0x49, 0x29, 0xd3, //0x00006e35 subq %rdx, %r11 + //0x00006e38 LBB28_36 + 0x4d, 0x85, 0xdb, //0x00006e38 testq %r11, %r11 + 0x0f, 0x8f, 0x52, 0x00, 0x00, 0x00, //0x00006e3b jg LBB28_98 + 0xe9, 0xa8, 0xf8, 0xff, 0xff, //0x00006e41 jmp LBB28_24 + //0x00006e46 LBB28_93 + 0x49, 0x8b, 0x4f, 0x08, //0x00006e46 movq $8(%r15), %rcx + 0x49, 0x89, 0x0e, //0x00006e4a movq %rcx, (%r14) + 0xe9, 0x9c, 0xf8, 0xff, 0xff, //0x00006e4d jmp LBB28_24 + //0x00006e52 LBB28_94 + 0x49, 0x39, 0xd3, //0x00006e52 cmpq %rdx, %r11 + 0x0f, 0x84, 0x93, 0xf8, 0xff, 0xff, //0x00006e55 je LBB28_24 + 0x4d, 0x8d, 0x7c, 0x17, 0x01, //0x00006e5b leaq $1(%r15,%rdx), %r15 + 0x48, 0xf7, 0xd2, //0x00006e60 notq %rdx + 0x49, 0x01, 0xd3, //0x00006e63 addq %rdx, %r11 + 0x4d, 0x85, 0xdb, //0x00006e66 testq %r11, %r11 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00006e69 jg LBB28_98 + 0xe9, 0x7a, 0xf8, 0xff, 0xff, //0x00006e6f jmp LBB28_24 + //0x00006e74 LBB28_96 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00006e74 movq $-2, %rdx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00006e7b movl $2, %eax + 0x49, 0x01, 0xc7, //0x00006e80 addq %rax, %r15 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00006e83 movq $-1, %rax + 0x49, 0x01, 0xd3, //0x00006e8a addq %rdx, %r11 + 0x0f, 0x8e, 0x5b, 0xf8, 0xff, 0xff, //0x00006e8d jle LBB28_24 + //0x00006e93 LBB28_98 + 0x41, 0x0f, 0xb6, 0x07, //0x00006e93 movzbl (%r15), %eax + 0x3c, 0x5c, //0x00006e97 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00006e99 je LBB28_96 + 0x3c, 0x22, //0x00006e9f cmpb $34, %al + 0x0f, 0x84, 0x5a, 0xf9, 0xff, 0xff, //0x00006ea1 je LBB28_91 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00006ea7 movq $-1, %rdx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00006eae movl $1, %eax + 0x49, 0x01, 0xc7, //0x00006eb3 addq %rax, %r15 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00006eb6 movq $-1, %rax + 0x49, 0x01, 0xd3, //0x00006ebd addq %rdx, %r11 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x00006ec0 jg LBB28_98 + 0xe9, 0x23, 0xf8, 0xff, 0xff, //0x00006ec6 jmp LBB28_24 + 0x90, //0x00006ecb .p2align 2, 0x90 + // // .set L28_0_set_24, LBB28_24-LJTI28_0 + // // .set L28_0_set_26, LBB28_26-LJTI28_0 + // // .set L28_0_set_27, LBB28_27-LJTI28_0 + // // .set L28_0_set_2, LBB28_2-LJTI28_0 + // // .set L28_0_set_37, LBB28_37-LJTI28_0 + // // .set L28_0_set_61, LBB28_61-LJTI28_0 + // // .set L28_0_set_25, LBB28_25-LJTI28_0 + // // .set L28_0_set_63, LBB28_63-LJTI28_0 + //0x00006ecc LJTI28_0 + 0x22, 0xf8, 0xff, 0xff, //0x00006ecc .long L28_0_set_24 + 0x47, 0xf8, 0xff, 0xff, //0x00006ed0 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006ed4 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006ed8 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006edc .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006ee0 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006ee4 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006ee8 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006eec .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006ef0 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006ef4 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006ef8 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006efc .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f00 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f04 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f08 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f0c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f10 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f14 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f18 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f1c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f20 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f24 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f28 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f2c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f30 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f34 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f38 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f3c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f40 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f44 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f48 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f4c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f50 .long L28_0_set_26 + 0x56, 0xf8, 0xff, 0xff, //0x00006f54 .long L28_0_set_27 + 0x47, 0xf8, 0xff, 0xff, //0x00006f58 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f5c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f60 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f64 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f68 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f6c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f70 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f74 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f78 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f7c .long L28_0_set_26 + 0xd7, 0xf6, 0xff, 0xff, //0x00006f80 .long L28_0_set_2 + 0x47, 0xf8, 0xff, 0xff, //0x00006f84 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006f88 .long L28_0_set_26 + 0xd7, 0xf6, 0xff, 0xff, //0x00006f8c .long L28_0_set_2 + 0xd7, 0xf6, 0xff, 0xff, //0x00006f90 .long L28_0_set_2 + 0xd7, 0xf6, 0xff, 0xff, //0x00006f94 .long L28_0_set_2 + 0xd7, 0xf6, 0xff, 0xff, //0x00006f98 .long L28_0_set_2 + 0xd7, 0xf6, 0xff, 0xff, //0x00006f9c .long L28_0_set_2 + 0xd7, 0xf6, 0xff, 0xff, //0x00006fa0 .long L28_0_set_2 + 0xd7, 0xf6, 0xff, 0xff, //0x00006fa4 .long L28_0_set_2 + 0xd7, 0xf6, 0xff, 0xff, //0x00006fa8 .long L28_0_set_2 + 0xd7, 0xf6, 0xff, 0xff, //0x00006fac .long L28_0_set_2 + 0xd7, 0xf6, 0xff, 0xff, //0x00006fb0 .long L28_0_set_2 + 0x47, 0xf8, 0xff, 0xff, //0x00006fb4 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fb8 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fbc .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fc0 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fc4 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fc8 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fcc .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fd0 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fd4 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fd8 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fdc .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fe0 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fe4 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fe8 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006fec .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006ff0 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006ff4 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006ff8 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00006ffc .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007000 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007004 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007008 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x0000700c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007010 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007014 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007018 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x0000701c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007020 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007024 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007028 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x0000702c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007030 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007034 .long L28_0_set_26 + 0x48, 0xf9, 0xff, 0xff, //0x00007038 .long L28_0_set_37 + 0x47, 0xf8, 0xff, 0xff, //0x0000703c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007040 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007044 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007048 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x0000704c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007050 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007054 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007058 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x0000705c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007060 .long L28_0_set_26 + 0x08, 0xfc, 0xff, 0xff, //0x00007064 .long L28_0_set_61 + 0x47, 0xf8, 0xff, 0xff, //0x00007068 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x0000706c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007070 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007074 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007078 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x0000707c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007080 .long L28_0_set_26 + 0x34, 0xf8, 0xff, 0xff, //0x00007084 .long L28_0_set_25 + 0x47, 0xf8, 0xff, 0xff, //0x00007088 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x0000708c .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007090 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007094 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x00007098 .long L28_0_set_26 + 0x34, 0xf8, 0xff, 0xff, //0x0000709c .long L28_0_set_25 + 0x47, 0xf8, 0xff, 0xff, //0x000070a0 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x000070a4 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x000070a8 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x000070ac .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x000070b0 .long L28_0_set_26 + 0x47, 0xf8, 0xff, 0xff, //0x000070b4 .long L28_0_set_26 + 0x1e, 0xfc, 0xff, 0xff, //0x000070b8 .long L28_0_set_63 + 0x90, 0x90, 0x90, 0x90, //0x000070bc .p2align 4, 0x90 + //0x000070c0 _get_by_path + 0x55, //0x000070c0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000070c1 movq %rsp, %rbp + 0x41, 0x57, //0x000070c4 pushq %r15 + 0x41, 0x56, //0x000070c6 pushq %r14 + 0x41, 0x55, //0x000070c8 pushq %r13 + 0x41, 0x54, //0x000070ca pushq %r12 + 0x53, //0x000070cc pushq %rbx + 0x48, 0x83, 0xec, 0x28, //0x000070cd subq $40, %rsp + 0x49, 0x89, 0xf7, //0x000070d1 movq %rsi, %r15 + 0x49, 0x89, 0xfd, //0x000070d4 movq %rdi, %r13 + 0x48, 0x8b, 0x42, 0x08, //0x000070d7 movq $8(%rdx), %rax + 0x48, 0x85, 0xc0, //0x000070db testq %rax, %rax + 0x0f, 0x84, 0x91, 0x07, 0x00, 0x00, //0x000070de je LBB29_98 + 0x4c, 0x8b, 0x32, //0x000070e4 movq (%rdx), %r14 + 0x48, 0xc1, 0xe0, 0x04, //0x000070e7 shlq $4, %rax + 0x4c, 0x01, 0xf0, //0x000070eb addq %r14, %rax + 0x48, 0x89, 0x4d, 0xb0, //0x000070ee movq %rcx, $-80(%rbp) + 0x48, 0x89, 0x45, 0xb8, //0x000070f2 movq %rax, $-72(%rbp) + //0x000070f6 LBB29_2 + 0x49, 0x8b, 0x7d, 0x00, //0x000070f6 movq (%r13), %rdi + 0x49, 0x8b, 0x75, 0x08, //0x000070fa movq $8(%r13), %rsi + 0x4c, 0x89, 0xfa, //0x000070fe movq %r15, %rdx + 0xe8, 0x1a, 0xd1, 0xff, 0xff, //0x00007101 callq _advance_ns + 0x49, 0x8b, 0x0e, //0x00007106 movq (%r14), %rcx + 0x48, 0x85, 0xc9, //0x00007109 testq %rcx, %rcx + 0x0f, 0x84, 0xbe, 0x07, 0x00, 0x00, //0x0000710c je LBB29_104 + 0x8a, 0x49, 0x17, //0x00007112 movb $23(%rcx), %cl + 0x80, 0xe1, 0x1f, //0x00007115 andb $31, %cl + 0x80, 0xf9, 0x02, //0x00007118 cmpb $2, %cl + 0x0f, 0x84, 0xbf, 0x06, 0x00, 0x00, //0x0000711b je LBB29_91 + 0x80, 0xf9, 0x18, //0x00007121 cmpb $24, %cl + 0x0f, 0x85, 0xa6, 0x07, 0x00, 0x00, //0x00007124 jne LBB29_104 + 0x3c, 0x7b, //0x0000712a cmpb $123, %al + 0x4c, 0x89, 0x75, 0xc8, //0x0000712c movq %r14, $-56(%rbp) + 0x0f, 0x85, 0x81, 0x07, 0x00, 0x00, //0x00007130 jne LBB29_102 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007136 .p2align 4, 0x90 + //0x00007140 LBB29_6 + 0x49, 0x8b, 0x7d, 0x00, //0x00007140 movq (%r13), %rdi + 0x49, 0x8b, 0x75, 0x08, //0x00007144 movq $8(%r13), %rsi + 0x4c, 0x89, 0xfa, //0x00007148 movq %r15, %rdx + 0xe8, 0xd0, 0xd0, 0xff, 0xff, //0x0000714b callq _advance_ns + 0x3c, 0x22, //0x00007150 cmpb $34, %al + 0x0f, 0x85, 0x40, 0x07, 0x00, 0x00, //0x00007152 jne LBB29_99 + 0x49, 0x8b, 0x46, 0x08, //0x00007158 movq $8(%r14), %rax + 0x4c, 0x8b, 0x30, //0x0000715c movq (%rax), %r14 + 0x4c, 0x8b, 0x60, 0x08, //0x0000715f movq $8(%rax), %r12 + 0x48, 0xc7, 0x45, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00007163 movq $-1, $-64(%rbp) + 0x49, 0x8b, 0x1f, //0x0000716b movq (%r15), %rbx + 0x4c, 0x89, 0xef, //0x0000716e movq %r13, %rdi + 0x48, 0x89, 0xde, //0x00007171 movq %rbx, %rsi + 0x48, 0x8d, 0x55, 0xc0, //0x00007174 leaq $-64(%rbp), %rdx + 0xe8, 0x63, 0x2b, 0x00, 0x00, //0x00007178 callq _advance_string_default + 0x48, 0x85, 0xc0, //0x0000717d testq %rax, %rax + 0x0f, 0x88, 0x59, 0x07, 0x00, 0x00, //0x00007180 js LBB29_105 + 0x49, 0x89, 0x07, //0x00007186 movq %rax, (%r15) + 0x48, 0x8b, 0x4d, 0xc0, //0x00007189 movq $-64(%rbp), %rcx + 0x48, 0x83, 0xf9, 0xff, //0x0000718d cmpq $-1, %rcx + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x00007191 je LBB29_10 + 0x48, 0x39, 0xc1, //0x00007197 cmpq %rax, %rcx + 0x0f, 0x8e, 0x70, 0x02, 0x00, 0x00, //0x0000719a jle LBB29_45 + //0x000071a0 LBB29_10 + 0x48, 0x89, 0xd9, //0x000071a0 movq %rbx, %rcx + 0x48, 0xf7, 0xd1, //0x000071a3 notq %rcx + 0x48, 0x01, 0xc8, //0x000071a6 addq %rcx, %rax + 0x48, 0x89, 0xc1, //0x000071a9 movq %rax, %rcx + 0x4c, 0x09, 0xe1, //0x000071ac orq %r12, %rcx + 0x0f, 0x84, 0xcb, 0x00, 0x00, 0x00, //0x000071af je LBB29_21 + 0x4c, 0x39, 0xe0, //0x000071b5 cmpq %r12, %rax + 0x0f, 0x85, 0xd2, 0x00, 0x00, 0x00, //0x000071b8 jne LBB29_22 + 0x49, 0x03, 0x5d, 0x00, //0x000071be addq (%r13), %rbx + 0x49, 0x83, 0xfc, 0x20, //0x000071c2 cmpq $32, %r12 + 0x0f, 0x82, 0x57, 0x00, 0x00, 0x00, //0x000071c6 jb LBB29_17 + 0x49, 0x8d, 0x44, 0x24, 0xe0, //0x000071cc leaq $-32(%r12), %rax + 0x48, 0x89, 0xc2, //0x000071d1 movq %rax, %rdx + 0x48, 0x83, 0xe2, 0xe0, //0x000071d4 andq $-32, %rdx + 0x48, 0x8d, 0x4c, 0x13, 0x20, //0x000071d8 leaq $32(%rbx,%rdx), %rcx + 0x49, 0x8d, 0x54, 0x16, 0x20, //0x000071dd leaq $32(%r14,%rdx), %rdx + 0x83, 0xe0, 0x1f, //0x000071e2 andl $31, %eax + 0x31, 0xf6, //0x000071e5 xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000071e7 .p2align 4, 0x90 + //0x000071f0 LBB29_14 + 0xc5, 0xfe, 0x6f, 0x04, 0x33, //0x000071f0 vmovdqu (%rbx,%rsi), %ymm0 + 0xc4, 0xc1, 0x7d, 0x74, 0x04, 0x36, //0x000071f5 vpcmpeqb (%r14,%rsi), %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf8, //0x000071fb vpmovmskb %ymm0, %edi + 0x83, 0xff, 0xff, //0x000071ff cmpl $-1, %edi + 0x0f, 0x85, 0x08, 0x01, 0x00, 0x00, //0x00007202 jne LBB29_28 + 0x49, 0x83, 0xc4, 0xe0, //0x00007208 addq $-32, %r12 + 0x48, 0x83, 0xc6, 0x20, //0x0000720c addq $32, %rsi + 0x49, 0x83, 0xfc, 0x1f, //0x00007210 cmpq $31, %r12 + 0x0f, 0x87, 0xd6, 0xff, 0xff, 0xff, //0x00007214 ja LBB29_14 + 0x49, 0x89, 0xc4, //0x0000721a movq %rax, %r12 + 0x49, 0x89, 0xd6, //0x0000721d movq %rdx, %r14 + 0x48, 0x89, 0xcb, //0x00007220 movq %rcx, %rbx + //0x00007223 LBB29_17 + 0x89, 0xde, //0x00007223 movl %ebx, %esi + 0x81, 0xe6, 0xff, 0x0f, 0x00, 0x00, //0x00007225 andl $4095, %esi + 0x44, 0x89, 0xf7, //0x0000722b movl %r14d, %edi + 0x81, 0xe7, 0xff, 0x0f, 0x00, 0x00, //0x0000722e andl $4095, %edi + 0x48, 0x81, 0xff, 0xe0, 0x0f, 0x00, 0x00, //0x00007234 cmpq $4064, %rdi + 0x0f, 0x87, 0x5a, 0x00, 0x00, 0x00, //0x0000723b ja LBB29_23 + 0x81, 0xfe, 0xe1, 0x0f, 0x00, 0x00, //0x00007241 cmpl $4065, %esi + 0x0f, 0x83, 0x4e, 0x00, 0x00, 0x00, //0x00007247 jae LBB29_23 + 0xc5, 0xfe, 0x6f, 0x03, //0x0000724d vmovdqu (%rbx), %ymm0 + 0xc4, 0xc1, 0x7d, 0x74, 0x06, //0x00007251 vpcmpeqb (%r14), %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc0, //0x00007256 vpmovmskb %ymm0, %eax + 0x83, 0xf8, 0xff, //0x0000725a cmpl $-1, %eax + 0x0f, 0x84, 0x08, 0x01, 0x00, 0x00, //0x0000725d je LBB29_33 + 0xf7, 0xd0, //0x00007263 notl %eax + 0x48, 0x0f, 0xbc, 0xc0, //0x00007265 bsfq %rax, %rax + 0x4c, 0x39, 0xe0, //0x00007269 cmpq %r12, %rax + 0x40, 0x0f, 0x93, 0xc6, //0x0000726c setae %sil + 0x4c, 0x8b, 0x75, 0xc8, //0x00007270 movq $-56(%rbp), %r14 + 0xe9, 0x47, 0x01, 0x00, 0x00, //0x00007274 jmp LBB29_40 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007279 .p2align 4, 0x90 + //0x00007280 LBB29_21 + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00007280 movl $1, %ebx + 0x4c, 0x8b, 0x75, 0xc8, //0x00007285 movq $-56(%rbp), %r14 + 0xe9, 0x36, 0x01, 0x00, 0x00, //0x00007289 jmp LBB29_41 + 0x90, 0x90, //0x0000728e .p2align 4, 0x90 + //0x00007290 LBB29_22 + 0x31, 0xdb, //0x00007290 xorl %ebx, %ebx + 0x4c, 0x8b, 0x75, 0xc8, //0x00007292 movq $-56(%rbp), %r14 + 0xe9, 0x29, 0x01, 0x00, 0x00, //0x00007296 jmp LBB29_41 + //0x0000729b LBB29_23 + 0x49, 0x83, 0xfc, 0x10, //0x0000729b cmpq $16, %r12 + 0x0f, 0x82, 0x76, 0x00, 0x00, 0x00, //0x0000729f jb LBB29_29 + 0x49, 0x8d, 0x44, 0x24, 0xf0, //0x000072a5 leaq $-16(%r12), %rax + 0x48, 0x89, 0xc1, //0x000072aa movq %rax, %rcx + 0x48, 0x83, 0xe1, 0xf0, //0x000072ad andq $-16, %rcx + 0x48, 0x8d, 0x54, 0x0b, 0x10, //0x000072b1 leaq $16(%rbx,%rcx), %rdx + 0x49, 0x8d, 0x4c, 0x0e, 0x10, //0x000072b6 leaq $16(%r14,%rcx), %rcx + 0x83, 0xe0, 0x0f, //0x000072bb andl $15, %eax + 0x31, 0xf6, //0x000072be xorl %esi, %esi + //0x000072c0 .p2align 4, 0x90 + //0x000072c0 LBB29_25 + 0xc5, 0xfa, 0x6f, 0x04, 0x33, //0x000072c0 vmovdqu (%rbx,%rsi), %xmm0 + 0xc4, 0xc1, 0x79, 0x74, 0x04, 0x36, //0x000072c5 vpcmpeqb (%r14,%rsi), %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xf8, //0x000072cb vpmovmskb %xmm0, %edi + 0x66, 0x83, 0xff, 0xff, //0x000072cf cmpw $-1, %di + 0x0f, 0x85, 0x37, 0x00, 0x00, 0x00, //0x000072d3 jne LBB29_28 + 0x49, 0x83, 0xc4, 0xf0, //0x000072d9 addq $-16, %r12 + 0x48, 0x83, 0xc6, 0x10, //0x000072dd addq $16, %rsi + 0x49, 0x83, 0xfc, 0x0f, //0x000072e1 cmpq $15, %r12 + 0x0f, 0x87, 0xd5, 0xff, 0xff, 0xff, //0x000072e5 ja LBB29_25 + 0x89, 0xd6, //0x000072eb movl %edx, %esi + 0x81, 0xe6, 0xff, 0x0f, 0x00, 0x00, //0x000072ed andl $4095, %esi + 0x89, 0xcf, //0x000072f3 movl %ecx, %edi + 0x81, 0xe7, 0xff, 0x0f, 0x00, 0x00, //0x000072f5 andl $4095, %edi + 0x81, 0xff, 0xf0, 0x0f, 0x00, 0x00, //0x000072fb cmpl $4080, %edi + 0x4c, 0x8b, 0x75, 0xc8, //0x00007301 movq $-56(%rbp), %r14 + 0x0f, 0x86, 0x29, 0x00, 0x00, 0x00, //0x00007305 jbe LBB29_30 + 0xe9, 0x67, 0x00, 0x00, 0x00, //0x0000730b jmp LBB29_34 + //0x00007310 LBB29_28 + 0x31, 0xf6, //0x00007310 xorl %esi, %esi + 0x4c, 0x8b, 0x75, 0xc8, //0x00007312 movq $-56(%rbp), %r14 + 0xe9, 0xa5, 0x00, 0x00, 0x00, //0x00007316 jmp LBB29_40 + //0x0000731b LBB29_29 + 0x4c, 0x89, 0xe0, //0x0000731b movq %r12, %rax + 0x4c, 0x89, 0xf1, //0x0000731e movq %r14, %rcx + 0x48, 0x89, 0xda, //0x00007321 movq %rbx, %rdx + 0x81, 0xff, 0xf0, 0x0f, 0x00, 0x00, //0x00007324 cmpl $4080, %edi + 0x4c, 0x8b, 0x75, 0xc8, //0x0000732a movq $-56(%rbp), %r14 + 0x0f, 0x87, 0x43, 0x00, 0x00, 0x00, //0x0000732e ja LBB29_34 + //0x00007334 LBB29_30 + 0x81, 0xfe, 0xf1, 0x0f, 0x00, 0x00, //0x00007334 cmpl $4081, %esi + 0x0f, 0x83, 0x37, 0x00, 0x00, 0x00, //0x0000733a jae LBB29_34 + 0xc5, 0xfa, 0x6f, 0x02, //0x00007340 vmovdqu (%rdx), %xmm0 + 0xc5, 0xf9, 0x74, 0x01, //0x00007344 vpcmpeqb (%rcx), %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00007348 vpmovmskb %xmm0, %ecx + 0x66, 0x83, 0xf9, 0xff, //0x0000734c cmpw $-1, %cx + 0x0f, 0x84, 0x58, 0x00, 0x00, 0x00, //0x00007350 je LBB29_38 + 0xf7, 0xd1, //0x00007356 notl %ecx + 0x0f, 0xb7, 0xc9, //0x00007358 movzwl %cx, %ecx + 0x48, 0x0f, 0xbc, 0xc9, //0x0000735b bsfq %rcx, %rcx + 0x48, 0x39, 0xc1, //0x0000735f cmpq %rax, %rcx + 0x40, 0x0f, 0x93, 0xc6, //0x00007362 setae %sil + 0xe9, 0x55, 0x00, 0x00, 0x00, //0x00007366 jmp LBB29_40 + //0x0000736b LBB29_33 + 0x40, 0xb6, 0x01, //0x0000736b movb $1, %sil + 0x4c, 0x8b, 0x75, 0xc8, //0x0000736e movq $-56(%rbp), %r14 + 0xe9, 0x49, 0x00, 0x00, 0x00, //0x00007372 jmp LBB29_40 + //0x00007377 LBB29_34 + 0x40, 0xb6, 0x01, //0x00007377 movb $1, %sil + 0x48, 0x85, 0xc0, //0x0000737a testq %rax, %rax + 0x0f, 0x84, 0x3d, 0x00, 0x00, 0x00, //0x0000737d je LBB29_40 + 0x31, 0xff, //0x00007383 xorl %edi, %edi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007385 .p2align 4, 0x90 + //0x00007390 LBB29_36 + 0x0f, 0xb6, 0x1c, 0x3a, //0x00007390 movzbl (%rdx,%rdi), %ebx + 0x3a, 0x1c, 0x39, //0x00007394 cmpb (%rcx,%rdi), %bl + 0x0f, 0x85, 0x19, 0x00, 0x00, 0x00, //0x00007397 jne LBB29_39 + 0x48, 0xff, 0xc7, //0x0000739d incq %rdi + 0x48, 0x39, 0xf8, //0x000073a0 cmpq %rdi, %rax + 0x0f, 0x85, 0xe7, 0xff, 0xff, 0xff, //0x000073a3 jne LBB29_36 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x000073a9 jmp LBB29_40 + //0x000073ae LBB29_38 + 0x40, 0xb6, 0x01, //0x000073ae movb $1, %sil + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x000073b1 jmp LBB29_40 + //0x000073b6 LBB29_39 + 0x31, 0xf6, //0x000073b6 xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000073b8 .p2align 4, 0x90 + //0x000073c0 LBB29_40 + 0x40, 0x0f, 0xb6, 0xde, //0x000073c0 movzbl %sil, %ebx + //0x000073c4 LBB29_41 + 0x49, 0x8b, 0x7d, 0x00, //0x000073c4 movq (%r13), %rdi + //0x000073c8 LBB29_42 + 0x49, 0x8b, 0x75, 0x08, //0x000073c8 movq $8(%r13), %rsi + 0x4c, 0x89, 0xfa, //0x000073cc movq %r15, %rdx + 0xc5, 0xf8, 0x77, //0x000073cf vzeroupper + 0xe8, 0x49, 0xce, 0xff, 0xff, //0x000073d2 callq _advance_ns + 0x3c, 0x3a, //0x000073d7 cmpb $58, %al + 0x0f, 0x85, 0xd8, 0x04, 0x00, 0x00, //0x000073d9 jne LBB29_102 + 0x48, 0x85, 0xdb, //0x000073df testq %rbx, %rbx + 0x0f, 0x85, 0x78, 0x04, 0x00, 0x00, //0x000073e2 jne LBB29_97 + 0x4c, 0x89, 0xef, //0x000073e8 movq %r13, %rdi + 0x4c, 0x89, 0xfe, //0x000073eb movq %r15, %rsi + 0xe8, 0x5d, 0xf1, 0xff, 0xff, //0x000073ee callq _skip_one_fast + 0x49, 0x8b, 0x7d, 0x00, //0x000073f3 movq (%r13), %rdi + 0x49, 0x8b, 0x75, 0x08, //0x000073f7 movq $8(%r13), %rsi + 0x4c, 0x89, 0xfa, //0x000073fb movq %r15, %rdx + 0xe8, 0x1d, 0xce, 0xff, 0xff, //0x000073fe callq _advance_ns + 0x3c, 0x2c, //0x00007403 cmpb $44, %al + 0x0f, 0x84, 0x35, 0xfd, 0xff, 0xff, //0x00007405 je LBB29_6 + 0xe9, 0x88, 0x04, 0x00, 0x00, //0x0000740b jmp LBB29_99 + //0x00007410 LBB29_45 + 0x48, 0xc7, 0x45, 0xd0, 0x00, 0x00, 0x00, 0x00, //0x00007410 movq $0, $-48(%rbp) + 0x49, 0x8b, 0x7d, 0x00, //0x00007418 movq (%r13), %rdi + 0x48, 0x01, 0xfb, //0x0000741c addq %rdi, %rbx + 0x4c, 0x8d, 0x44, 0x07, 0xff, //0x0000741f leaq $-1(%rdi,%rax), %r8 + 0x4f, 0x8d, 0x14, 0x26, //0x00007424 leaq (%r14,%r12), %r10 + 0x4d, 0x85, 0xe4, //0x00007428 testq %r12, %r12 + 0x0f, 0x8e, 0x85, 0x03, 0x00, 0x00, //0x0000742b jle LBB29_89 + 0x49, 0x39, 0xd8, //0x00007431 cmpq %rbx, %r8 + 0x0f, 0x86, 0x7c, 0x03, 0x00, 0x00, //0x00007434 jbe LBB29_89 + //0x0000743a LBB29_47 + 0x8a, 0x03, //0x0000743a movb (%rbx), %al + 0x3c, 0x5c, //0x0000743c cmpb $92, %al + 0x0f, 0x85, 0x58, 0x00, 0x00, 0x00, //0x0000743e jne LBB29_52 + 0x4c, 0x89, 0xc1, //0x00007444 movq %r8, %rcx + 0x48, 0x29, 0xd9, //0x00007447 subq %rbx, %rcx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000744a movq $-1, %rax + 0x48, 0x85, 0xc9, //0x00007451 testq %rcx, %rcx + 0x0f, 0x8e, 0xba, 0x04, 0x00, 0x00, //0x00007454 jle LBB29_109 + 0x0f, 0xb6, 0x53, 0x01, //0x0000745a movzbl $1(%rbx), %edx + 0x48, 0x8d, 0x35, 0x2b, 0xa0, 0x00, 0x00, //0x0000745e leaq $41003(%rip), %rsi /* __UnquoteTab+0(%rip) */ + 0x44, 0x8a, 0x1c, 0x32, //0x00007465 movb (%rdx,%rsi), %r11b + 0x41, 0x80, 0xfb, 0xff, //0x00007469 cmpb $-1, %r11b + 0x0f, 0x84, 0x3d, 0x00, 0x00, 0x00, //0x0000746d je LBB29_54 + 0x45, 0x84, 0xdb, //0x00007473 testb %r11b, %r11b + 0x0f, 0x84, 0x86, 0x04, 0x00, 0x00, //0x00007476 je LBB29_107 + 0x44, 0x88, 0x5d, 0xd0, //0x0000747c movb %r11b, $-48(%rbp) + 0x48, 0x83, 0xc3, 0x02, //0x00007480 addq $2, %rbx + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00007484 movl $1, %ecx + 0x4c, 0x8d, 0x4c, 0x0d, 0xd0, //0x00007489 leaq $-48(%rbp,%rcx), %r9 + 0x4d, 0x39, 0xd6, //0x0000748e cmpq %r10, %r14 + 0x0f, 0x82, 0x2c, 0x01, 0x00, 0x00, //0x00007491 jb LBB29_65 + 0xe9, 0xfb, 0x02, 0x00, 0x00, //0x00007497 jmp LBB29_73 + //0x0000749c LBB29_52 + 0x41, 0x3a, 0x06, //0x0000749c cmpb (%r14), %al + 0x0f, 0x85, 0x28, 0x03, 0x00, 0x00, //0x0000749f jne LBB29_90 + 0x48, 0xff, 0xc3, //0x000074a5 incq %rbx + 0x49, 0xff, 0xc6, //0x000074a8 incq %r14 + 0xe9, 0xf4, 0x02, 0x00, 0x00, //0x000074ab jmp LBB29_75 + //0x000074b0 LBB29_54 + 0x48, 0x83, 0xf9, 0x03, //0x000074b0 cmpq $3, %rcx + 0x0f, 0x8e, 0x57, 0x04, 0x00, 0x00, //0x000074b4 jle LBB29_108 + 0x8b, 0x43, 0x02, //0x000074ba movl $2(%rbx), %eax + 0x89, 0xc2, //0x000074bd movl %eax, %edx + 0xf7, 0xd2, //0x000074bf notl %edx + 0x8d, 0xb0, 0xd0, 0xcf, 0xcf, 0xcf, //0x000074c1 leal $-808464432(%rax), %esi + 0x81, 0xe2, 0x80, 0x80, 0x80, 0x80, //0x000074c7 andl $-2139062144, %edx + 0x85, 0xf2, //0x000074cd testl %esi, %edx + 0x0f, 0x85, 0x1d, 0x04, 0x00, 0x00, //0x000074cf jne LBB29_106 + 0x8d, 0xb0, 0x19, 0x19, 0x19, 0x19, //0x000074d5 leal $421075225(%rax), %esi + 0x09, 0xc6, //0x000074db orl %eax, %esi + 0xf7, 0xc6, 0x80, 0x80, 0x80, 0x80, //0x000074dd testl $-2139062144, %esi + 0x0f, 0x85, 0x09, 0x04, 0x00, 0x00, //0x000074e3 jne LBB29_106 + 0x89, 0xc6, //0x000074e9 movl %eax, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x000074eb andl $2139062143, %esi + 0x41, 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x000074f1 movl $-1061109568, %r9d + 0x41, 0x29, 0xf1, //0x000074f7 subl %esi, %r9d + 0x44, 0x8d, 0x9e, 0x46, 0x46, 0x46, 0x46, //0x000074fa leal $1179010630(%rsi), %r11d + 0x41, 0x21, 0xd1, //0x00007501 andl %edx, %r9d + 0x45, 0x85, 0xd9, //0x00007504 testl %r11d, %r9d + 0x0f, 0x85, 0xe5, 0x03, 0x00, 0x00, //0x00007507 jne LBB29_106 + 0x41, 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x0000750d movl $-522133280, %r9d + 0x41, 0x29, 0xf1, //0x00007513 subl %esi, %r9d + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x00007516 addl $960051513, %esi + 0x44, 0x21, 0xca, //0x0000751c andl %r9d, %edx + 0x85, 0xf2, //0x0000751f testl %esi, %edx + 0x0f, 0x85, 0xcb, 0x03, 0x00, 0x00, //0x00007521 jne LBB29_106 + 0x0f, 0xc8, //0x00007527 bswapl %eax + 0x89, 0xc2, //0x00007529 movl %eax, %edx + 0xc1, 0xea, 0x04, //0x0000752b shrl $4, %edx + 0xf7, 0xd2, //0x0000752e notl %edx + 0x81, 0xe2, 0x01, 0x01, 0x01, 0x01, //0x00007530 andl $16843009, %edx + 0x8d, 0x14, 0xd2, //0x00007536 leal (%rdx,%rdx,8), %edx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x00007539 andl $252645135, %eax + 0x01, 0xd0, //0x0000753e addl %edx, %eax + 0x41, 0x89, 0xc3, //0x00007540 movl %eax, %r11d + 0x41, 0xc1, 0xeb, 0x04, //0x00007543 shrl $4, %r11d + 0x41, 0x09, 0xc3, //0x00007547 orl %eax, %r11d + 0x44, 0x89, 0xde, //0x0000754a movl %r11d, %esi + 0xc1, 0xee, 0x08, //0x0000754d shrl $8, %esi + 0x81, 0xe6, 0x00, 0xff, 0x00, 0x00, //0x00007550 andl $65280, %esi + 0x41, 0x0f, 0xb6, 0xc3, //0x00007556 movzbl %r11b, %eax + 0x09, 0xf0, //0x0000755a orl %esi, %eax + 0x4c, 0x8d, 0x4b, 0x06, //0x0000755c leaq $6(%rbx), %r9 + 0x83, 0xf8, 0x7f, //0x00007560 cmpl $127, %eax + 0x0f, 0x86, 0xab, 0x00, 0x00, 0x00, //0x00007563 jbe LBB29_77 + 0x3d, 0xff, 0x07, 0x00, 0x00, //0x00007569 cmpl $2047, %eax + 0x0f, 0x86, 0xbf, 0x00, 0x00, 0x00, //0x0000756e jbe LBB29_78 + 0x44, 0x89, 0xda, //0x00007574 movl %r11d, %edx + 0x81, 0xe2, 0x00, 0x00, 0xf8, 0x00, //0x00007577 andl $16252928, %edx + 0x81, 0xfa, 0x00, 0x00, 0xd8, 0x00, //0x0000757d cmpl $14155776, %edx + 0x0f, 0x84, 0xdc, 0x00, 0x00, 0x00, //0x00007583 je LBB29_79 + 0xc1, 0xee, 0x0c, //0x00007589 shrl $12, %esi + 0x40, 0x80, 0xce, 0xe0, //0x0000758c orb $-32, %sil + 0x40, 0x88, 0x75, 0xd0, //0x00007590 movb %sil, $-48(%rbp) + 0xc1, 0xe8, 0x06, //0x00007594 shrl $6, %eax + 0x24, 0x3f, //0x00007597 andb $63, %al + 0x0c, 0x80, //0x00007599 orb $-128, %al + 0x88, 0x45, 0xd1, //0x0000759b movb %al, $-47(%rbp) + 0x41, 0x80, 0xe3, 0x3f, //0x0000759e andb $63, %r11b + 0x41, 0x80, 0xcb, 0x80, //0x000075a2 orb $-128, %r11b + 0x44, 0x88, 0x5d, 0xd2, //0x000075a6 movb %r11b, $-46(%rbp) + 0xb9, 0x03, 0x00, 0x00, 0x00, //0x000075aa movl $3, %ecx + 0x41, 0x89, 0xf3, //0x000075af movl %esi, %r11d + 0x4c, 0x89, 0xcb, //0x000075b2 movq %r9, %rbx + 0x4c, 0x8d, 0x4c, 0x0d, 0xd0, //0x000075b5 leaq $-48(%rbp,%rcx), %r9 + 0x4d, 0x39, 0xd6, //0x000075ba cmpq %r10, %r14 + 0x0f, 0x83, 0xd4, 0x01, 0x00, 0x00, //0x000075bd jae LBB29_73 + //0x000075c3 LBB29_65 + 0x48, 0x8d, 0x45, 0xd0, //0x000075c3 leaq $-48(%rbp), %rax + 0x49, 0x39, 0xc1, //0x000075c7 cmpq %rax, %r9 + 0x0f, 0x86, 0xc7, 0x01, 0x00, 0x00, //0x000075ca jbe LBB29_73 + 0x45, 0x38, 0x1e, //0x000075d0 cmpb %r11b, (%r14) + 0x0f, 0x85, 0xbe, 0x01, 0x00, 0x00, //0x000075d3 jne LBB29_73 + 0x49, 0xff, 0xc6, //0x000075d9 incq %r14 + 0x48, 0x8d, 0x55, 0xd1, //0x000075dc leaq $-47(%rbp), %rdx + 0x4c, 0x89, 0xf6, //0x000075e0 movq %r14, %rsi + //0x000075e3 LBB29_68 + 0x49, 0x89, 0xf6, //0x000075e3 movq %rsi, %r14 + 0x48, 0x89, 0xd1, //0x000075e6 movq %rdx, %rcx + 0x4c, 0x39, 0xca, //0x000075e9 cmpq %r9, %rdx + 0x0f, 0x83, 0xa9, 0x01, 0x00, 0x00, //0x000075ec jae LBB29_74 + 0x4d, 0x39, 0xd6, //0x000075f2 cmpq %r10, %r14 + 0x0f, 0x83, 0xa0, 0x01, 0x00, 0x00, //0x000075f5 jae LBB29_74 + 0x41, 0x0f, 0xb6, 0x06, //0x000075fb movzbl (%r14), %eax + 0x49, 0x8d, 0x76, 0x01, //0x000075ff leaq $1(%r14), %rsi + 0x48, 0x8d, 0x51, 0x01, //0x00007603 leaq $1(%rcx), %rdx + 0x3a, 0x01, //0x00007607 cmpb (%rcx), %al + 0x0f, 0x84, 0xd4, 0xff, 0xff, 0xff, //0x00007609 je LBB29_68 + 0xe9, 0x87, 0x01, 0x00, 0x00, //0x0000760f jmp LBB29_74 + //0x00007614 LBB29_77 + 0x44, 0x88, 0x5d, 0xd0, //0x00007614 movb %r11b, $-48(%rbp) + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00007618 movl $1, %ecx + 0x4c, 0x89, 0xcb, //0x0000761d movq %r9, %rbx + 0x4c, 0x8d, 0x4c, 0x0d, 0xd0, //0x00007620 leaq $-48(%rbp,%rcx), %r9 + 0x4d, 0x39, 0xd6, //0x00007625 cmpq %r10, %r14 + 0x0f, 0x82, 0x95, 0xff, 0xff, 0xff, //0x00007628 jb LBB29_65 + 0xe9, 0x64, 0x01, 0x00, 0x00, //0x0000762e jmp LBB29_73 + //0x00007633 LBB29_78 + 0xc1, 0xe8, 0x06, //0x00007633 shrl $6, %eax + 0x0c, 0xc0, //0x00007636 orb $-64, %al + 0x88, 0x45, 0xd0, //0x00007638 movb %al, $-48(%rbp) + 0x41, 0x80, 0xe3, 0x3f, //0x0000763b andb $63, %r11b + 0x41, 0x80, 0xcb, 0x80, //0x0000763f orb $-128, %r11b + 0x44, 0x88, 0x5d, 0xd1, //0x00007643 movb %r11b, $-47(%rbp) + 0xb9, 0x02, 0x00, 0x00, 0x00, //0x00007647 movl $2, %ecx + 0x41, 0x89, 0xc3, //0x0000764c movl %eax, %r11d + 0x4c, 0x89, 0xcb, //0x0000764f movq %r9, %rbx + 0x4c, 0x8d, 0x4c, 0x0d, 0xd0, //0x00007652 leaq $-48(%rbp,%rcx), %r9 + 0x4d, 0x39, 0xd6, //0x00007657 cmpq %r10, %r14 + 0x0f, 0x82, 0x63, 0xff, 0xff, 0xff, //0x0000765a jb LBB29_65 + 0xe9, 0x32, 0x01, 0x00, 0x00, //0x00007660 jmp LBB29_73 + //0x00007665 LBB29_79 + 0x48, 0x83, 0xf9, 0x06, //0x00007665 cmpq $6, %rcx + 0x0f, 0x8c, 0xbc, 0x02, 0x00, 0x00, //0x00007669 jl LBB29_111 + 0x3d, 0xff, 0xdb, 0x00, 0x00, //0x0000766f cmpl $56319, %eax + 0x0f, 0x87, 0xb1, 0x02, 0x00, 0x00, //0x00007674 ja LBB29_111 + 0x41, 0x80, 0x39, 0x5c, //0x0000767a cmpb $92, (%r9) + 0x0f, 0x85, 0xa7, 0x02, 0x00, 0x00, //0x0000767e jne LBB29_111 + 0x80, 0x7b, 0x07, 0x75, //0x00007684 cmpb $117, $7(%rbx) + 0x0f, 0x85, 0x9d, 0x02, 0x00, 0x00, //0x00007688 jne LBB29_111 + 0x4c, 0x8d, 0x4b, 0x08, //0x0000768e leaq $8(%rbx), %r9 + 0x8b, 0x4b, 0x08, //0x00007692 movl $8(%rbx), %ecx + 0x89, 0xca, //0x00007695 movl %ecx, %edx + 0xf7, 0xd2, //0x00007697 notl %edx + 0x8d, 0xb1, 0xd0, 0xcf, 0xcf, 0xcf, //0x00007699 leal $-808464432(%rcx), %esi + 0x81, 0xe2, 0x80, 0x80, 0x80, 0x80, //0x0000769f andl $-2139062144, %edx + 0x85, 0xf2, //0x000076a5 testl %esi, %edx + 0x0f, 0x85, 0x72, 0x02, 0x00, 0x00, //0x000076a7 jne LBB29_110 + 0x8d, 0xb1, 0x19, 0x19, 0x19, 0x19, //0x000076ad leal $421075225(%rcx), %esi + 0x09, 0xce, //0x000076b3 orl %ecx, %esi + 0xf7, 0xc6, 0x80, 0x80, 0x80, 0x80, //0x000076b5 testl $-2139062144, %esi + 0x0f, 0x85, 0x5e, 0x02, 0x00, 0x00, //0x000076bb jne LBB29_110 + 0x89, 0xce, //0x000076c1 movl %ecx, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x000076c3 andl $2139062143, %esi + 0x41, 0xbb, 0xc0, 0xc0, 0xc0, 0xc0, //0x000076c9 movl $-1061109568, %r11d + 0x41, 0x29, 0xf3, //0x000076cf subl %esi, %r11d + 0x44, 0x8d, 0xa6, 0x46, 0x46, 0x46, 0x46, //0x000076d2 leal $1179010630(%rsi), %r12d + 0x41, 0x21, 0xd3, //0x000076d9 andl %edx, %r11d + 0x45, 0x85, 0xe3, //0x000076dc testl %r12d, %r11d + 0x0f, 0x85, 0x3a, 0x02, 0x00, 0x00, //0x000076df jne LBB29_110 + 0x41, 0xbb, 0xe0, 0xe0, 0xe0, 0xe0, //0x000076e5 movl $-522133280, %r11d + 0x41, 0x29, 0xf3, //0x000076eb subl %esi, %r11d + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x000076ee addl $960051513, %esi + 0x44, 0x21, 0xda, //0x000076f4 andl %r11d, %edx + 0x85, 0xf2, //0x000076f7 testl %esi, %edx + 0x0f, 0x85, 0x20, 0x02, 0x00, 0x00, //0x000076f9 jne LBB29_110 + 0x0f, 0xc9, //0x000076ff bswapl %ecx + 0x89, 0xca, //0x00007701 movl %ecx, %edx + 0xc1, 0xea, 0x04, //0x00007703 shrl $4, %edx + 0xf7, 0xd2, //0x00007706 notl %edx + 0x81, 0xe2, 0x01, 0x01, 0x01, 0x01, //0x00007708 andl $16843009, %edx + 0x8d, 0x14, 0xd2, //0x0000770e leal (%rdx,%rdx,8), %edx + 0x81, 0xe1, 0x0f, 0x0f, 0x0f, 0x0f, //0x00007711 andl $252645135, %ecx + 0x01, 0xd1, //0x00007717 addl %edx, %ecx + 0x89, 0xca, //0x00007719 movl %ecx, %edx + 0xc1, 0xea, 0x04, //0x0000771b shrl $4, %edx + 0x09, 0xca, //0x0000771e orl %ecx, %edx + 0x89, 0xd1, //0x00007720 movl %edx, %ecx + 0x81, 0xe1, 0x00, 0x00, 0xfc, 0x00, //0x00007722 andl $16515072, %ecx + 0x81, 0xf9, 0x00, 0x00, 0xdc, 0x00, //0x00007728 cmpl $14417920, %ecx + 0x0f, 0x85, 0xf7, 0x01, 0x00, 0x00, //0x0000772e jne LBB29_111 + 0x89, 0xd1, //0x00007734 movl %edx, %ecx + 0xc1, 0xe9, 0x08, //0x00007736 shrl $8, %ecx + 0x81, 0xe1, 0x00, 0xff, 0x00, 0x00, //0x00007739 andl $65280, %ecx + 0x0f, 0xb6, 0xd2, //0x0000773f movzbl %dl, %edx + 0x09, 0xca, //0x00007742 orl %ecx, %edx + 0xc1, 0xe0, 0x0a, //0x00007744 shll $10, %eax + 0x8d, 0x84, 0x10, 0x00, 0x24, 0xa0, 0xfc, //0x00007747 leal $-56613888(%rax,%rdx), %eax + 0x41, 0x89, 0xc3, //0x0000774e movl %eax, %r11d + 0x41, 0xc1, 0xeb, 0x12, //0x00007751 shrl $18, %r11d + 0x41, 0x80, 0xcb, 0xf0, //0x00007755 orb $-16, %r11b + 0x44, 0x88, 0x5d, 0xd0, //0x00007759 movb %r11b, $-48(%rbp) + 0x89, 0xc1, //0x0000775d movl %eax, %ecx + 0xc1, 0xe9, 0x0c, //0x0000775f shrl $12, %ecx + 0x80, 0xe1, 0x3f, //0x00007762 andb $63, %cl + 0x80, 0xc9, 0x80, //0x00007765 orb $-128, %cl + 0x88, 0x4d, 0xd1, //0x00007768 movb %cl, $-47(%rbp) + 0x89, 0xc1, //0x0000776b movl %eax, %ecx + 0xc1, 0xe9, 0x06, //0x0000776d shrl $6, %ecx + 0x80, 0xe1, 0x3f, //0x00007770 andb $63, %cl + 0x80, 0xc9, 0x80, //0x00007773 orb $-128, %cl + 0x88, 0x4d, 0xd2, //0x00007776 movb %cl, $-46(%rbp) + 0x24, 0x3f, //0x00007779 andb $63, %al + 0x0c, 0x80, //0x0000777b orb $-128, %al + 0x88, 0x45, 0xd3, //0x0000777d movb %al, $-45(%rbp) + 0x48, 0x83, 0xc3, 0x0c, //0x00007780 addq $12, %rbx + 0xb9, 0x04, 0x00, 0x00, 0x00, //0x00007784 movl $4, %ecx + 0x4c, 0x8d, 0x4c, 0x0d, 0xd0, //0x00007789 leaq $-48(%rbp,%rcx), %r9 + 0x4d, 0x39, 0xd6, //0x0000778e cmpq %r10, %r14 + 0x0f, 0x82, 0x2c, 0xfe, 0xff, 0xff, //0x00007791 jb LBB29_65 + //0x00007797 LBB29_73 + 0x48, 0x8d, 0x4d, 0xd0, //0x00007797 leaq $-48(%rbp), %rcx + //0x0000779b LBB29_74 + 0x4c, 0x39, 0xc9, //0x0000779b cmpq %r9, %rcx + 0x0f, 0x85, 0x29, 0x00, 0x00, 0x00, //0x0000779e jne LBB29_90 + //0x000077a4 LBB29_75 + 0x49, 0x39, 0xd8, //0x000077a4 cmpq %rbx, %r8 + 0x0f, 0x86, 0x09, 0x00, 0x00, 0x00, //0x000077a7 jbe LBB29_89 + 0x4d, 0x39, 0xd6, //0x000077ad cmpq %r10, %r14 + 0x0f, 0x82, 0x84, 0xfc, 0xff, 0xff, //0x000077b0 jb LBB29_47 + //0x000077b6 LBB29_89 + 0x49, 0x31, 0xd8, //0x000077b6 xorq %rbx, %r8 + 0x4d, 0x31, 0xd6, //0x000077b9 xorq %r10, %r14 + 0x31, 0xdb, //0x000077bc xorl %ebx, %ebx + 0x4d, 0x09, 0xc6, //0x000077be orq %r8, %r14 + 0x0f, 0x94, 0xc3, //0x000077c1 sete %bl + 0x4c, 0x8b, 0x75, 0xc8, //0x000077c4 movq $-56(%rbp), %r14 + 0xe9, 0xfb, 0xfb, 0xff, 0xff, //0x000077c8 jmp LBB29_42 + //0x000077cd LBB29_90 + 0x31, 0xdb, //0x000077cd xorl %ebx, %ebx + 0x4c, 0x8b, 0x75, 0xc8, //0x000077cf movq $-56(%rbp), %r14 + 0xe9, 0xf0, 0xfb, 0xff, 0xff, //0x000077d3 jmp LBB29_42 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000077d8 .p2align 4, 0x90 + //0x000077e0 LBB29_91 + 0x3c, 0x5b, //0x000077e0 cmpb $91, %al + 0x0f, 0x85, 0xcf, 0x00, 0x00, 0x00, //0x000077e2 jne LBB29_102 + 0x49, 0x8b, 0x46, 0x08, //0x000077e8 movq $8(%r14), %rax + 0x48, 0x8b, 0x18, //0x000077ec movq (%rax), %rbx + 0x48, 0x85, 0xdb, //0x000077ef testq %rbx, %rbx + 0x0f, 0x88, 0xd8, 0x00, 0x00, 0x00, //0x000077f2 js LBB29_104 + 0x49, 0x8b, 0x7d, 0x00, //0x000077f8 movq (%r13), %rdi + 0x49, 0x8b, 0x75, 0x08, //0x000077fc movq $8(%r13), %rsi + 0x4c, 0x89, 0xfa, //0x00007800 movq %r15, %rdx + 0xe8, 0x18, 0xca, 0xff, 0xff, //0x00007803 callq _advance_ns + 0x3c, 0x5d, //0x00007808 cmpb $93, %al + 0x0f, 0x84, 0x90, 0x00, 0x00, 0x00, //0x0000780a je LBB29_100 + 0x49, 0xff, 0x0f, //0x00007810 decq (%r15) + 0x48, 0xff, 0xc3, //0x00007813 incq %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007816 .p2align 4, 0x90 + //0x00007820 LBB29_95 + 0x48, 0xff, 0xcb, //0x00007820 decq %rbx + 0x48, 0x85, 0xdb, //0x00007823 testq %rbx, %rbx + 0x0f, 0x8e, 0x34, 0x00, 0x00, 0x00, //0x00007826 jle LBB29_97 + 0x4c, 0x89, 0xef, //0x0000782c movq %r13, %rdi + 0x4c, 0x89, 0xfe, //0x0000782f movq %r15, %rsi + 0xe8, 0x19, 0xed, 0xff, 0xff, //0x00007832 callq _skip_one_fast + 0x49, 0x8b, 0x7d, 0x00, //0x00007837 movq (%r13), %rdi + 0x49, 0x8b, 0x75, 0x08, //0x0000783b movq $8(%r13), %rsi + 0x4c, 0x89, 0xfa, //0x0000783f movq %r15, %rdx + 0xe8, 0xd9, 0xc9, 0xff, 0xff, //0x00007842 callq _advance_ns + 0x3c, 0x2c, //0x00007847 cmpb $44, %al + 0x0f, 0x84, 0xd1, 0xff, 0xff, 0xff, //0x00007849 je LBB29_95 + 0xe9, 0x5b, 0x00, 0x00, 0x00, //0x0000784f jmp LBB29_101 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007854 .p2align 4, 0x90 + //0x00007860 LBB29_97 + 0x49, 0x83, 0xc6, 0x10, //0x00007860 addq $16, %r14 + 0x48, 0x8b, 0x45, 0xb8, //0x00007864 movq $-72(%rbp), %rax + 0x49, 0x39, 0xc6, //0x00007868 cmpq %rax, %r14 + 0x48, 0x8b, 0x4d, 0xb0, //0x0000786b movq $-80(%rbp), %rcx + 0x0f, 0x85, 0x81, 0xf8, 0xff, 0xff, //0x0000786f jne LBB29_2 + //0x00007875 LBB29_98 + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00007875 movl $1, %eax + 0xc4, 0xe1, 0xf9, 0x6e, 0xc0, //0x0000787a vmovq %rax, %xmm0 + 0xc5, 0xfa, 0x7f, 0x01, //0x0000787f vmovdqu %xmm0, (%rcx) + 0x48, 0x89, 0xcf, //0x00007883 movq %rcx, %rdi + 0x4c, 0x89, 0xee, //0x00007886 movq %r13, %rsi + 0x4c, 0x89, 0xfa, //0x00007889 movq %r15, %rdx + 0x31, 0xc9, //0x0000788c xorl %ecx, %ecx + 0xe8, 0xbd, 0xd9, 0xff, 0xff, //0x0000788e callq _fsm_exec + 0xe9, 0x29, 0x00, 0x00, 0x00, //0x00007893 jmp LBB29_103 + //0x00007898 LBB29_99 + 0x3c, 0x7d, //0x00007898 cmpb $125, %al + 0x0f, 0x85, 0x17, 0x00, 0x00, 0x00, //0x0000789a jne LBB29_102 + //0x000078a0 LBB29_100 + 0x49, 0xff, 0x0f, //0x000078a0 decq (%r15) + 0x48, 0xc7, 0xc0, 0xdf, 0xff, 0xff, 0xff, //0x000078a3 movq $-33, %rax + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x000078aa jmp LBB29_103 + //0x000078af LBB29_101 + 0x3c, 0x5d, //0x000078af cmpb $93, %al + 0x0f, 0x84, 0xe9, 0xff, 0xff, 0xff, //0x000078b1 je LBB29_100 + //0x000078b7 LBB29_102 + 0x49, 0xff, 0x0f, //0x000078b7 decq (%r15) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000078ba movq $-2, %rax + //0x000078c1 LBB29_103 + 0x48, 0x83, 0xc4, 0x28, //0x000078c1 addq $40, %rsp + 0x5b, //0x000078c5 popq %rbx + 0x41, 0x5c, //0x000078c6 popq %r12 + 0x41, 0x5d, //0x000078c8 popq %r13 + 0x41, 0x5e, //0x000078ca popq %r14 + 0x41, 0x5f, //0x000078cc popq %r15 + 0x5d, //0x000078ce popq %rbp + 0xc3, //0x000078cf retq + //0x000078d0 LBB29_104 + 0x49, 0xff, 0x0f, //0x000078d0 decq (%r15) + 0x48, 0xc7, 0xc0, 0xde, 0xff, 0xff, 0xff, //0x000078d3 movq $-34, %rax + 0xe9, 0xe2, 0xff, 0xff, 0xff, //0x000078da jmp LBB29_103 + //0x000078df LBB29_105 + 0x49, 0x8b, 0x45, 0x08, //0x000078df movq $8(%r13), %rax + 0x49, 0x89, 0x07, //0x000078e3 movq %rax, (%r15) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000078e6 movq $-1, %rax + 0xe9, 0xcf, 0xff, 0xff, 0xff, //0x000078ed jmp LBB29_103 + //0x000078f2 LBB29_106 + 0x48, 0x83, 0xc3, 0x02, //0x000078f2 addq $2, %rbx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000078f6 movq $-2, %rax + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x000078fd jmp LBB29_109 + //0x00007902 LBB29_107 + 0x48, 0xff, 0xc3, //0x00007902 incq %rbx + 0x48, 0xc7, 0xc0, 0xfd, 0xff, 0xff, 0xff, //0x00007905 movq $-3, %rax + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x0000790c jmp LBB29_109 + //0x00007911 LBB29_108 + 0x48, 0xff, 0xc3, //0x00007911 incq %rbx + //0x00007914 LBB29_109 + 0x48, 0x29, 0xfb, //0x00007914 subq %rdi, %rbx + 0x49, 0x89, 0x1f, //0x00007917 movq %rbx, (%r15) + 0xe9, 0xa2, 0xff, 0xff, 0xff, //0x0000791a jmp LBB29_103 + //0x0000791f LBB29_110 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x0000791f movq $-2, %rax + 0xe9, 0x07, 0x00, 0x00, 0x00, //0x00007926 jmp LBB29_112 + //0x0000792b LBB29_111 + 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x0000792b movq $-4, %rax + //0x00007932 LBB29_112 + 0x4c, 0x89, 0xcb, //0x00007932 movq %r9, %rbx + 0xe9, 0xda, 0xff, 0xff, 0xff, //0x00007935 jmp LBB29_109 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000793a .p2align 4, 0x90 + //0x00007940 _validate_utf8 + 0x55, //0x00007940 pushq %rbp + 0x48, 0x89, 0xe5, //0x00007941 movq %rsp, %rbp + 0x41, 0x57, //0x00007944 pushq %r15 + 0x41, 0x56, //0x00007946 pushq %r14 + 0x41, 0x54, //0x00007948 pushq %r12 + 0x53, //0x0000794a pushq %rbx + 0x50, //0x0000794b pushq %rax + 0x4c, 0x8b, 0x17, //0x0000794c movq (%rdi), %r10 + 0x4c, 0x8b, 0x5f, 0x08, //0x0000794f movq $8(%rdi), %r11 + 0x48, 0x8b, 0x0e, //0x00007953 movq (%rsi), %rcx + 0x4c, 0x01, 0xd1, //0x00007956 addq %r10, %rcx + 0x4f, 0x8d, 0x44, 0x1a, 0xfd, //0x00007959 leaq $-3(%r10,%r11), %r8 + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x0000795e jmp LBB30_1 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007963 .p2align 4, 0x90 + //0x00007970 LBB30_19 + 0x48, 0x01, 0xd9, //0x00007970 addq %rbx, %rcx + //0x00007973 LBB30_1 + 0x4c, 0x39, 0xc1, //0x00007973 cmpq %r8, %rcx + 0x0f, 0x83, 0xe1, 0x00, 0x00, 0x00, //0x00007976 jae LBB30_2 + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x0000797c movl $1, %ebx + 0x80, 0x39, 0x00, //0x00007981 cmpb $0, (%rcx) + 0x0f, 0x89, 0xe6, 0xff, 0xff, 0xff, //0x00007984 jns LBB30_19 + 0x8b, 0x01, //0x0000798a movl (%rcx), %eax + 0x89, 0xc7, //0x0000798c movl %eax, %edi + 0x81, 0xe7, 0xf0, 0xc0, 0xc0, 0x00, //0x0000798e andl $12632304, %edi + 0x81, 0xff, 0xe0, 0x80, 0x80, 0x00, //0x00007994 cmpl $8421600, %edi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000799a jne LBB30_10 + 0x89, 0xc7, //0x000079a0 movl %eax, %edi + 0x81, 0xe7, 0x0f, 0x20, 0x00, 0x00, //0x000079a2 andl $8207, %edi + 0x81, 0xff, 0x0d, 0x20, 0x00, 0x00, //0x000079a8 cmpl $8205, %edi + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x000079ae je LBB30_10 + 0xbb, 0x03, 0x00, 0x00, 0x00, //0x000079b4 movl $3, %ebx + 0x85, 0xff, //0x000079b9 testl %edi, %edi + 0x0f, 0x85, 0xaf, 0xff, 0xff, 0xff, //0x000079bb jne LBB30_19 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000079c1 .p2align 4, 0x90 + //0x000079d0 LBB30_10 + 0x89, 0xc7, //0x000079d0 movl %eax, %edi + 0x81, 0xe7, 0xe0, 0xc0, 0x00, 0x00, //0x000079d2 andl $49376, %edi + 0x81, 0xff, 0xc0, 0x80, 0x00, 0x00, //0x000079d8 cmpl $32960, %edi + 0x0f, 0x85, 0x10, 0x00, 0x00, 0x00, //0x000079de jne LBB30_12 + 0x89, 0xc7, //0x000079e4 movl %eax, %edi + 0xbb, 0x02, 0x00, 0x00, 0x00, //0x000079e6 movl $2, %ebx + 0x83, 0xe7, 0x1e, //0x000079eb andl $30, %edi + 0x0f, 0x85, 0x7c, 0xff, 0xff, 0xff, //0x000079ee jne LBB30_19 + //0x000079f4 LBB30_12 + 0x89, 0xc7, //0x000079f4 movl %eax, %edi + 0x81, 0xe7, 0xf8, 0xc0, 0xc0, 0xc0, //0x000079f6 andl $-1061109512, %edi + 0x81, 0xff, 0xf0, 0x80, 0x80, 0x80, //0x000079fc cmpl $-2139062032, %edi + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x00007a02 jne LBB30_16 + 0x89, 0xc7, //0x00007a08 movl %eax, %edi + 0x81, 0xe7, 0x07, 0x30, 0x00, 0x00, //0x00007a0a andl $12295, %edi + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x00007a10 je LBB30_16 + 0xbb, 0x04, 0x00, 0x00, 0x00, //0x00007a16 movl $4, %ebx + 0xa8, 0x04, //0x00007a1b testb $4, %al + 0x0f, 0x84, 0x4d, 0xff, 0xff, 0xff, //0x00007a1d je LBB30_19 + 0x25, 0x03, 0x30, 0x00, 0x00, //0x00007a23 andl $12291, %eax + 0x0f, 0x84, 0x42, 0xff, 0xff, 0xff, //0x00007a28 je LBB30_19 + //0x00007a2e LBB30_16 + 0x48, 0x89, 0xcf, //0x00007a2e movq %rcx, %rdi + 0x4c, 0x29, 0xd7, //0x00007a31 subq %r10, %rdi + 0x48, 0x8b, 0x1a, //0x00007a34 movq (%rdx), %rbx + 0x48, 0x81, 0xfb, 0x00, 0x10, 0x00, 0x00, //0x00007a37 cmpq $4096, %rbx + 0x0f, 0x83, 0x87, 0x01, 0x00, 0x00, //0x00007a3e jae LBB30_17 + 0x48, 0x63, 0xc7, //0x00007a44 movslq %edi, %rax + 0x48, 0x8d, 0x7b, 0x01, //0x00007a47 leaq $1(%rbx), %rdi + 0x48, 0x89, 0x3a, //0x00007a4b movq %rdi, (%rdx) + 0x48, 0x89, 0x44, 0xda, 0x08, //0x00007a4e movq %rax, $8(%rdx,%rbx,8) + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00007a53 movl $1, %ebx + 0xe9, 0x13, 0xff, 0xff, 0xff, //0x00007a58 jmp LBB30_19 + //0x00007a5d LBB30_2 + 0x4d, 0x01, 0xd3, //0x00007a5d addq %r10, %r11 + 0x4c, 0x39, 0xd9, //0x00007a60 cmpq %r11, %rcx + 0x0f, 0x83, 0x3e, 0x01, 0x00, 0x00, //0x00007a63 jae LBB30_36 + 0x4c, 0x8d, 0x45, 0xdc, //0x00007a69 leaq $-36(%rbp), %r8 + 0x4c, 0x8d, 0x4d, 0xda, //0x00007a6d leaq $-38(%rbp), %r9 + 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00007a71 jmp LBB30_4 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007a76 .p2align 4, 0x90 + //0x00007a80 LBB30_5 + 0x48, 0xff, 0xc1, //0x00007a80 incq %rcx + 0x4c, 0x39, 0xd9, //0x00007a83 cmpq %r11, %rcx + 0x0f, 0x83, 0x1b, 0x01, 0x00, 0x00, //0x00007a86 jae LBB30_36 + //0x00007a8c LBB30_4 + 0x80, 0x39, 0x00, //0x00007a8c cmpb $0, (%rcx) + 0x0f, 0x89, 0xeb, 0xff, 0xff, 0xff, //0x00007a8f jns LBB30_5 + 0xc6, 0x45, 0xdc, 0x00, //0x00007a95 movb $0, $-36(%rbp) + 0xc6, 0x45, 0xda, 0x00, //0x00007a99 movb $0, $-38(%rbp) + 0x4c, 0x89, 0xdb, //0x00007a9d movq %r11, %rbx + 0x48, 0x29, 0xcb, //0x00007aa0 subq %rcx, %rbx + 0x48, 0x83, 0xfb, 0x02, //0x00007aa3 cmpq $2, %rbx + 0x0f, 0x82, 0x35, 0x00, 0x00, 0x00, //0x00007aa7 jb LBB30_21 + 0x44, 0x0f, 0xb6, 0x21, //0x00007aad movzbl (%rcx), %r12d + 0x44, 0x0f, 0xb6, 0x71, 0x01, //0x00007ab1 movzbl $1(%rcx), %r14d + 0x44, 0x88, 0x65, 0xdc, //0x00007ab6 movb %r12b, $-36(%rbp) + 0x4c, 0x8d, 0x79, 0x02, //0x00007aba leaq $2(%rcx), %r15 + 0x48, 0x83, 0xc3, 0xfe, //0x00007abe addq $-2, %rbx + 0x4c, 0x89, 0xcf, //0x00007ac2 movq %r9, %rdi + 0x48, 0x85, 0xdb, //0x00007ac5 testq %rbx, %rbx + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x00007ac8 je LBB30_24 + //0x00007ace LBB30_25 + 0x41, 0x0f, 0xb6, 0x07, //0x00007ace movzbl (%r15), %eax + 0x88, 0x07, //0x00007ad2 movb %al, (%rdi) + 0x44, 0x0f, 0xb6, 0x65, 0xdc, //0x00007ad4 movzbl $-36(%rbp), %r12d + 0x0f, 0xb6, 0x7d, 0xda, //0x00007ad9 movzbl $-38(%rbp), %edi + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00007add jmp LBB30_26 + //0x00007ae2 LBB30_21 + 0x45, 0x31, 0xe4, //0x00007ae2 xorl %r12d, %r12d + 0x45, 0x31, 0xf6, //0x00007ae5 xorl %r14d, %r14d + 0x4c, 0x89, 0xc7, //0x00007ae8 movq %r8, %rdi + 0x49, 0x89, 0xcf, //0x00007aeb movq %rcx, %r15 + 0x48, 0x85, 0xdb, //0x00007aee testq %rbx, %rbx + 0x0f, 0x85, 0xd7, 0xff, 0xff, 0xff, //0x00007af1 jne LBB30_25 + //0x00007af7 LBB30_24 + 0x31, 0xff, //0x00007af7 xorl %edi, %edi + //0x00007af9 LBB30_26 + 0x40, 0x0f, 0xb6, 0xc7, //0x00007af9 movzbl %dil, %eax + 0xc1, 0xe0, 0x10, //0x00007afd shll $16, %eax + 0x41, 0x0f, 0xb6, 0xde, //0x00007b00 movzbl %r14b, %ebx + 0xc1, 0xe3, 0x08, //0x00007b04 shll $8, %ebx + 0x41, 0x0f, 0xb6, 0xfc, //0x00007b07 movzbl %r12b, %edi + 0x09, 0xdf, //0x00007b0b orl %ebx, %edi + 0x09, 0xf8, //0x00007b0d orl %edi, %eax + 0x25, 0xf0, 0xc0, 0xc0, 0x00, //0x00007b0f andl $12632304, %eax + 0x3d, 0xe0, 0x80, 0x80, 0x00, //0x00007b14 cmpl $8421600, %eax + 0x0f, 0x85, 0x21, 0x00, 0x00, 0x00, //0x00007b19 jne LBB30_29 + 0x89, 0xf8, //0x00007b1f movl %edi, %eax + 0x25, 0x0f, 0x20, 0x00, 0x00, //0x00007b21 andl $8207, %eax + 0x3d, 0x0d, 0x20, 0x00, 0x00, //0x00007b26 cmpl $8205, %eax + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x00007b2b je LBB30_29 + 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00007b31 movl $3, %ebx + 0x85, 0xc0, //0x00007b36 testl %eax, %eax + 0x0f, 0x85, 0x23, 0x00, 0x00, 0x00, //0x00007b38 jne LBB30_34 + 0x90, 0x90, //0x00007b3e .p2align 4, 0x90 + //0x00007b40 LBB30_29 + 0x41, 0xf6, 0xc4, 0x1e, //0x00007b40 testb $30, %r12b + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00007b44 je LBB30_31 + 0x81, 0xe7, 0xe0, 0xc0, 0x00, 0x00, //0x00007b4a andl $49376, %edi + 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00007b50 movl $2, %ebx + 0x81, 0xff, 0xc0, 0x80, 0x00, 0x00, //0x00007b55 cmpl $32960, %edi + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x00007b5b jne LBB30_31 + //0x00007b61 LBB30_34 + 0x48, 0x01, 0xd9, //0x00007b61 addq %rbx, %rcx + 0x4c, 0x39, 0xd9, //0x00007b64 cmpq %r11, %rcx + 0x0f, 0x82, 0x1f, 0xff, 0xff, 0xff, //0x00007b67 jb LBB30_4 + 0xe9, 0x35, 0x00, 0x00, 0x00, //0x00007b6d jmp LBB30_36 + //0x00007b72 LBB30_31 + 0x48, 0x89, 0xc8, //0x00007b72 movq %rcx, %rax + 0x4c, 0x29, 0xd0, //0x00007b75 subq %r10, %rax + 0x48, 0x8b, 0x3a, //0x00007b78 movq (%rdx), %rdi + 0x48, 0x81, 0xff, 0x00, 0x10, 0x00, 0x00, //0x00007b7b cmpq $4096, %rdi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00007b82 jae LBB30_32 + 0x48, 0x98, //0x00007b88 cltq + 0x48, 0x8d, 0x5f, 0x01, //0x00007b8a leaq $1(%rdi), %rbx + 0x48, 0x89, 0x1a, //0x00007b8e movq %rbx, (%rdx) + 0x48, 0x89, 0x44, 0xfa, 0x08, //0x00007b91 movq %rax, $8(%rdx,%rdi,8) + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00007b96 movl $1, %ebx + 0x48, 0x01, 0xd9, //0x00007b9b addq %rbx, %rcx + 0x4c, 0x39, 0xd9, //0x00007b9e cmpq %r11, %rcx + 0x0f, 0x82, 0xe5, 0xfe, 0xff, 0xff, //0x00007ba1 jb LBB30_4 + //0x00007ba7 LBB30_36 + 0x4c, 0x29, 0xd1, //0x00007ba7 subq %r10, %rcx + 0x48, 0x89, 0x0e, //0x00007baa movq %rcx, (%rsi) + 0x31, 0xc0, //0x00007bad xorl %eax, %eax + //0x00007baf LBB30_37 + 0x48, 0x83, 0xc4, 0x08, //0x00007baf addq $8, %rsp + 0x5b, //0x00007bb3 popq %rbx + 0x41, 0x5c, //0x00007bb4 popq %r12 + 0x41, 0x5e, //0x00007bb6 popq %r14 + 0x41, 0x5f, //0x00007bb8 popq %r15 + 0x5d, //0x00007bba popq %rbp + 0xc3, //0x00007bbb retq + //0x00007bbc LBB30_32 + 0x48, 0x89, 0x06, //0x00007bbc movq %rax, (%rsi) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00007bbf movq $-1, %rax + 0xe9, 0xe4, 0xff, 0xff, 0xff, //0x00007bc6 jmp LBB30_37 + //0x00007bcb LBB30_17 + 0x48, 0x89, 0x3e, //0x00007bcb movq %rdi, (%rsi) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00007bce movq $-1, %rax + 0xe9, 0xd5, 0xff, 0xff, 0xff, //0x00007bd5 jmp LBB30_37 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00007bda .p2align 5, 0x00 + //0x00007be0 LCPI31_0 + 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00007be0 QUAD $0x0f0f0f0f0f0f0f0f; QUAD $0x0f0f0f0f0f0f0f0f // .space 16, '\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f' + 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00007bf0 QUAD $0x0f0f0f0f0f0f0f0f; QUAD $0x0f0f0f0f0f0f0f0f // .space 16, '\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f' + //0x00007c00 LCPI31_1 + 0x02, //0x00007c00 .byte 2 + 0x02, //0x00007c01 .byte 2 + 0x02, //0x00007c02 .byte 2 + 0x02, //0x00007c03 .byte 2 + 0x02, //0x00007c04 .byte 2 + 0x02, //0x00007c05 .byte 2 + 0x02, //0x00007c06 .byte 2 + 0x02, //0x00007c07 .byte 2 + 0x80, //0x00007c08 .byte 128 + 0x80, //0x00007c09 .byte 128 + 0x80, //0x00007c0a .byte 128 + 0x80, //0x00007c0b .byte 128 + 0x21, //0x00007c0c .byte 33 + 0x01, //0x00007c0d .byte 1 + 0x15, //0x00007c0e .byte 21 + 0x49, //0x00007c0f .byte 73 + 0x02, //0x00007c10 .byte 2 + 0x02, //0x00007c11 .byte 2 + 0x02, //0x00007c12 .byte 2 + 0x02, //0x00007c13 .byte 2 + 0x02, //0x00007c14 .byte 2 + 0x02, //0x00007c15 .byte 2 + 0x02, //0x00007c16 .byte 2 + 0x02, //0x00007c17 .byte 2 + 0x80, //0x00007c18 .byte 128 + 0x80, //0x00007c19 .byte 128 + 0x80, //0x00007c1a .byte 128 + 0x80, //0x00007c1b .byte 128 + 0x21, //0x00007c1c .byte 33 + 0x01, //0x00007c1d .byte 1 + 0x15, //0x00007c1e .byte 21 + 0x49, //0x00007c1f .byte 73 + //0x00007c20 LCPI31_2 + 0xe7, //0x00007c20 .byte 231 + 0xa3, //0x00007c21 .byte 163 + 0x83, //0x00007c22 .byte 131 + 0x83, //0x00007c23 .byte 131 + 0x8b, //0x00007c24 .byte 139 + 0xcb, //0x00007c25 .byte 203 + 0xcb, //0x00007c26 .byte 203 + 0xcb, //0x00007c27 .byte 203 + 0xcb, //0x00007c28 .byte 203 + 0xcb, //0x00007c29 .byte 203 + 0xcb, //0x00007c2a .byte 203 + 0xcb, //0x00007c2b .byte 203 + 0xcb, //0x00007c2c .byte 203 + 0xdb, //0x00007c2d .byte 219 + 0xcb, //0x00007c2e .byte 203 + 0xcb, //0x00007c2f .byte 203 + 0xe7, //0x00007c30 .byte 231 + 0xa3, //0x00007c31 .byte 163 + 0x83, //0x00007c32 .byte 131 + 0x83, //0x00007c33 .byte 131 + 0x8b, //0x00007c34 .byte 139 + 0xcb, //0x00007c35 .byte 203 + 0xcb, //0x00007c36 .byte 203 + 0xcb, //0x00007c37 .byte 203 + 0xcb, //0x00007c38 .byte 203 + 0xcb, //0x00007c39 .byte 203 + 0xcb, //0x00007c3a .byte 203 + 0xcb, //0x00007c3b .byte 203 + 0xcb, //0x00007c3c .byte 203 + 0xdb, //0x00007c3d .byte 219 + 0xcb, //0x00007c3e .byte 203 + 0xcb, //0x00007c3f .byte 203 + //0x00007c40 LCPI31_3 + 0x01, //0x00007c40 .byte 1 + 0x01, //0x00007c41 .byte 1 + 0x01, //0x00007c42 .byte 1 + 0x01, //0x00007c43 .byte 1 + 0x01, //0x00007c44 .byte 1 + 0x01, //0x00007c45 .byte 1 + 0x01, //0x00007c46 .byte 1 + 0x01, //0x00007c47 .byte 1 + 0xe6, //0x00007c48 .byte 230 + 0xae, //0x00007c49 .byte 174 + 0xba, //0x00007c4a .byte 186 + 0xba, //0x00007c4b .byte 186 + 0x01, //0x00007c4c .byte 1 + 0x01, //0x00007c4d .byte 1 + 0x01, //0x00007c4e .byte 1 + 0x01, //0x00007c4f .byte 1 + 0x01, //0x00007c50 .byte 1 + 0x01, //0x00007c51 .byte 1 + 0x01, //0x00007c52 .byte 1 + 0x01, //0x00007c53 .byte 1 + 0x01, //0x00007c54 .byte 1 + 0x01, //0x00007c55 .byte 1 + 0x01, //0x00007c56 .byte 1 + 0x01, //0x00007c57 .byte 1 + 0xe6, //0x00007c58 .byte 230 + 0xae, //0x00007c59 .byte 174 + 0xba, //0x00007c5a .byte 186 + 0xba, //0x00007c5b .byte 186 + 0x01, //0x00007c5c .byte 1 + 0x01, //0x00007c5d .byte 1 + 0x01, //0x00007c5e .byte 1 + 0x01, //0x00007c5f .byte 1 + //0x00007c60 LCPI31_4 + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, //0x00007c60 QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, //0x00007c70 QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' + //0x00007c80 LCPI31_5 + 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, //0x00007c80 QUAD $0xefefefefefefefef; QUAD $0xefefefefefefefef // .space 16, '\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef' + 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, //0x00007c90 QUAD $0xefefefefefefefef; QUAD $0xefefefefefefefef // .space 16, '\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef\xef' + //0x00007ca0 LCPI31_7 + 0xff, //0x00007ca0 .byte 255 + 0xff, //0x00007ca1 .byte 255 + 0xff, //0x00007ca2 .byte 255 + 0xff, //0x00007ca3 .byte 255 + 0xff, //0x00007ca4 .byte 255 + 0xff, //0x00007ca5 .byte 255 + 0xff, //0x00007ca6 .byte 255 + 0xff, //0x00007ca7 .byte 255 + 0xff, //0x00007ca8 .byte 255 + 0xff, //0x00007ca9 .byte 255 + 0xff, //0x00007caa .byte 255 + 0xff, //0x00007cab .byte 255 + 0xff, //0x00007cac .byte 255 + 0xff, //0x00007cad .byte 255 + 0xff, //0x00007cae .byte 255 + 0xff, //0x00007caf .byte 255 + 0xff, //0x00007cb0 .byte 255 + 0xff, //0x00007cb1 .byte 255 + 0xff, //0x00007cb2 .byte 255 + 0xff, //0x00007cb3 .byte 255 + 0xff, //0x00007cb4 .byte 255 + 0xff, //0x00007cb5 .byte 255 + 0xff, //0x00007cb6 .byte 255 + 0xff, //0x00007cb7 .byte 255 + 0xff, //0x00007cb8 .byte 255 + 0xff, //0x00007cb9 .byte 255 + 0xff, //0x00007cba .byte 255 + 0xff, //0x00007cbb .byte 255 + 0xff, //0x00007cbc .byte 255 + 0xef, //0x00007cbd .byte 239 + 0xdf, //0x00007cbe .byte 223 + 0xbf, //0x00007cbf .byte 191 + //0x00007cc0 LCPI31_8 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00007cc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00007cd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x00007ce0 .p2align 3, 0x00 + //0x00007ce0 LCPI31_6 + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //0x00007ce0 .quad -9187201950435737472 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007ce8 .p2align 4, 0x90 + //0x00007cf0 _validate_utf8_fast + 0x55, //0x00007cf0 pushq %rbp + 0x48, 0x89, 0xe5, //0x00007cf1 movq %rsp, %rbp + 0x53, //0x00007cf4 pushq %rbx + 0x48, 0x81, 0xec, 0xa0, 0x00, 0x00, 0x00, //0x00007cf5 subq $160, %rsp + 0x48, 0x8b, 0x47, 0x08, //0x00007cfc movq $8(%rdi), %rax + 0x48, 0x85, 0xc0, //0x00007d00 testq %rax, %rax + 0x0f, 0x84, 0xc3, 0x07, 0x00, 0x00, //0x00007d03 je LBB31_12 + 0x4c, 0x8b, 0x07, //0x00007d09 movq (%rdi), %r8 + 0x4d, 0x8d, 0x0c, 0x00, //0x00007d0c leaq (%r8,%rax), %r9 + 0x49, 0x8d, 0x79, 0x80, //0x00007d10 leaq $-128(%r9), %rdi + 0xc5, 0xf1, 0xef, 0xc9, //0x00007d14 vpxor %xmm1, %xmm1, %xmm1 + 0xc5, 0xe9, 0xef, 0xd2, //0x00007d18 vpxor %xmm2, %xmm2, %xmm2 + 0xc5, 0xf9, 0xef, 0xc0, //0x00007d1c vpxor %xmm0, %xmm0, %xmm0 + 0x4c, 0x89, 0xc2, //0x00007d20 movq %r8, %rdx + 0x4c, 0x39, 0xc7, //0x00007d23 cmpq %r8, %rdi + 0x0f, 0x86, 0x70, 0x03, 0x00, 0x00, //0x00007d26 jbe LBB31_14 + 0x48, 0x8d, 0x50, 0xff, //0x00007d2c leaq $-1(%rax), %rdx + 0xc5, 0xfd, 0x6f, 0x25, 0xa8, 0xfe, 0xff, 0xff, //0x00007d30 vmovdqa $-344(%rip), %ymm4 /* LCPI31_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0xe0, 0xfe, 0xff, 0xff, //0x00007d38 vmovdqa $-288(%rip), %ymm6 /* LCPI31_2+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x3d, 0xf8, 0xfe, 0xff, 0xff, //0x00007d40 vmovdqa $-264(%rip), %ymm7 /* LCPI31_3+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0x05, 0x10, 0xff, 0xff, 0xff, //0x00007d48 vmovdqa $-240(%rip), %ymm8 /* LCPI31_4+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0x0d, 0x28, 0xff, 0xff, 0xff, //0x00007d50 vmovdqa $-216(%rip), %ymm9 /* LCPI31_5+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0x15, 0x40, 0xff, 0xff, 0xff, //0x00007d58 vmovdqa $-192(%rip), %ymm10 /* LCPI31_7+0(%rip) */ + 0x4c, 0x89, 0xc1, //0x00007d60 movq %r8, %rcx + 0xc5, 0xf9, 0xef, 0xc0, //0x00007d63 vpxor %xmm0, %xmm0, %xmm0 + 0xc5, 0xe9, 0xef, 0xd2, //0x00007d67 vpxor %xmm2, %xmm2, %xmm2 + 0xc5, 0xf1, 0xef, 0xc9, //0x00007d6b vpxor %xmm1, %xmm1, %xmm1 + 0x90, //0x00007d6f .p2align 4, 0x90 + //0x00007d70 LBB31_3 + 0xc5, 0x7e, 0x6f, 0x39, //0x00007d70 vmovdqu (%rcx), %ymm15 + 0xc5, 0x7e, 0x6f, 0x69, 0x20, //0x00007d74 vmovdqu $32(%rcx), %ymm13 + 0xc5, 0x7e, 0x6f, 0x61, 0x40, //0x00007d79 vmovdqu $64(%rcx), %ymm12 + 0xc5, 0x7e, 0x6f, 0x59, 0x60, //0x00007d7e vmovdqu $96(%rcx), %ymm11 + 0xc4, 0xc1, 0x15, 0xeb, 0xdf, //0x00007d83 vpor %ymm15, %ymm13, %ymm3 + 0xc4, 0x41, 0x25, 0xeb, 0xf4, //0x00007d88 vpor %ymm12, %ymm11, %ymm14 + 0xc5, 0x8d, 0xeb, 0xeb, //0x00007d8d vpor %ymm3, %ymm14, %ymm5 + 0xc5, 0xfd, 0xd7, 0xf5, //0x00007d91 vpmovmskb %ymm5, %esi + 0x85, 0xf6, //0x00007d95 testl %esi, %esi + 0x0f, 0x85, 0x16, 0x00, 0x00, 0x00, //0x00007d97 jne LBB31_6 + 0xc5, 0xf5, 0xeb, 0xc0, //0x00007d9d vpor %ymm0, %ymm1, %ymm0 + //0x00007da1 LBB31_5 + 0x48, 0x83, 0xe9, 0x80, //0x00007da1 subq $-128, %rcx + 0x48, 0x39, 0xf9, //0x00007da5 cmpq %rdi, %rcx + 0x0f, 0x82, 0xc2, 0xff, 0xff, 0xff, //0x00007da8 jb LBB31_3 + 0xe9, 0xe2, 0x02, 0x00, 0x00, //0x00007dae jmp LBB31_13 + //0x00007db3 LBB31_6 + 0xc5, 0xfd, 0xd7, 0xf3, //0x00007db3 vpmovmskb %ymm3, %esi + 0x85, 0xf6, //0x00007db7 testl %esi, %esi + 0x0f, 0x85, 0xf0, 0x00, 0x00, 0x00, //0x00007db9 jne LBB31_9 + 0xc5, 0xf5, 0xeb, 0xc0, //0x00007dbf vpor %ymm0, %ymm1, %ymm0 + 0xc4, 0xc3, 0x6d, 0x46, 0xcc, 0x21, //0x00007dc3 vperm2i128 $33, %ymm12, %ymm2, %ymm1 + 0xc4, 0xe3, 0x1d, 0x0f, 0xd1, 0x0f, //0x00007dc9 vpalignr $15, %ymm1, %ymm12, %ymm2 + 0xc5, 0xe5, 0x71, 0xd2, 0x04, //0x00007dcf vpsrlw $4, %ymm2, %ymm3 + 0xc5, 0xe5, 0xdb, 0xdc, //0x00007dd4 vpand %ymm4, %ymm3, %ymm3 + 0xc5, 0x7d, 0x6f, 0x35, 0x20, 0xfe, 0xff, 0xff, //0x00007dd8 vmovdqa $-480(%rip), %ymm14 /* LCPI31_1+0(%rip) */ + 0xc4, 0xe2, 0x0d, 0x00, 0xdb, //0x00007de0 vpshufb %ymm3, %ymm14, %ymm3 + 0xc5, 0xed, 0xdb, 0xd4, //0x00007de5 vpand %ymm4, %ymm2, %ymm2 + 0xc4, 0xe2, 0x4d, 0x00, 0xd2, //0x00007de9 vpshufb %ymm2, %ymm6, %ymm2 + 0xc4, 0xc1, 0x55, 0x71, 0xd4, 0x04, //0x00007dee vpsrlw $4, %ymm12, %ymm5 + 0xc5, 0xd5, 0xdb, 0xec, //0x00007df4 vpand %ymm4, %ymm5, %ymm5 + 0xc4, 0xe2, 0x45, 0x00, 0xed, //0x00007df8 vpshufb %ymm5, %ymm7, %ymm5 + 0xc5, 0xed, 0xdb, 0xd5, //0x00007dfd vpand %ymm5, %ymm2, %ymm2 + 0xc5, 0xe5, 0xdb, 0xd2, //0x00007e01 vpand %ymm2, %ymm3, %ymm2 + 0xc4, 0xe3, 0x1d, 0x0f, 0xd9, 0x0e, //0x00007e05 vpalignr $14, %ymm1, %ymm12, %ymm3 + 0xc4, 0xe3, 0x1d, 0x0f, 0xc9, 0x0d, //0x00007e0b vpalignr $13, %ymm1, %ymm12, %ymm1 + 0xc4, 0xc1, 0x65, 0xd8, 0xd8, //0x00007e11 vpsubusb %ymm8, %ymm3, %ymm3 + 0xc4, 0xc1, 0x75, 0xd8, 0xc9, //0x00007e16 vpsubusb %ymm9, %ymm1, %ymm1 + 0xc5, 0xf5, 0xeb, 0xcb, //0x00007e1b vpor %ymm3, %ymm1, %ymm1 + 0xc4, 0x41, 0x11, 0xef, 0xed, //0x00007e1f vpxor %xmm13, %xmm13, %xmm13 + 0xc5, 0x95, 0x74, 0xc9, //0x00007e24 vpcmpeqb %ymm1, %ymm13, %ymm1 + 0xc4, 0xe2, 0x7d, 0x59, 0x1d, 0xaf, 0xfe, 0xff, 0xff, //0x00007e28 vpbroadcastq $-337(%rip), %ymm3 /* LCPI31_6+0(%rip) */ + 0xc5, 0xf5, 0xdf, 0xcb, //0x00007e31 vpandn %ymm3, %ymm1, %ymm1 + 0xc5, 0xf5, 0xef, 0xca, //0x00007e35 vpxor %ymm2, %ymm1, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc1, //0x00007e39 vpor %ymm1, %ymm0, %ymm0 + 0xc4, 0xc3, 0x1d, 0x46, 0xcb, 0x21, //0x00007e3d vperm2i128 $33, %ymm11, %ymm12, %ymm1 + 0xc4, 0xe3, 0x25, 0x0f, 0xd1, 0x0f, //0x00007e43 vpalignr $15, %ymm1, %ymm11, %ymm2 + 0xc5, 0xd5, 0x71, 0xd2, 0x04, //0x00007e49 vpsrlw $4, %ymm2, %ymm5 + 0xc5, 0xd5, 0xdb, 0xec, //0x00007e4e vpand %ymm4, %ymm5, %ymm5 + 0xc4, 0xe2, 0x0d, 0x00, 0xed, //0x00007e52 vpshufb %ymm5, %ymm14, %ymm5 + 0xc5, 0xed, 0xdb, 0xd4, //0x00007e57 vpand %ymm4, %ymm2, %ymm2 + 0xc4, 0xe2, 0x4d, 0x00, 0xd2, //0x00007e5b vpshufb %ymm2, %ymm6, %ymm2 + 0xc4, 0xc1, 0x1d, 0x71, 0xd3, 0x04, //0x00007e60 vpsrlw $4, %ymm11, %ymm12 + 0xc5, 0x1d, 0xdb, 0xe4, //0x00007e66 vpand %ymm4, %ymm12, %ymm12 + 0xc4, 0x42, 0x45, 0x00, 0xe4, //0x00007e6a vpshufb %ymm12, %ymm7, %ymm12 + 0xc5, 0x9d, 0xdb, 0xd2, //0x00007e6f vpand %ymm2, %ymm12, %ymm2 + 0xc5, 0xd5, 0xdb, 0xd2, //0x00007e73 vpand %ymm2, %ymm5, %ymm2 + 0xc4, 0xe3, 0x25, 0x0f, 0xe9, 0x0e, //0x00007e77 vpalignr $14, %ymm1, %ymm11, %ymm5 + 0xc4, 0xe3, 0x25, 0x0f, 0xc9, 0x0d, //0x00007e7d vpalignr $13, %ymm1, %ymm11, %ymm1 + 0xc4, 0xc1, 0x55, 0xd8, 0xe8, //0x00007e83 vpsubusb %ymm8, %ymm5, %ymm5 + 0xc4, 0xc1, 0x75, 0xd8, 0xc9, //0x00007e88 vpsubusb %ymm9, %ymm1, %ymm1 + 0xc5, 0xf5, 0xeb, 0xcd, //0x00007e8d vpor %ymm5, %ymm1, %ymm1 + 0xc5, 0x95, 0x74, 0xc9, //0x00007e91 vpcmpeqb %ymm1, %ymm13, %ymm1 + 0xc5, 0xf5, 0xdf, 0xcb, //0x00007e95 vpandn %ymm3, %ymm1, %ymm1 + 0xc5, 0xf5, 0xef, 0xca, //0x00007e99 vpxor %ymm2, %ymm1, %ymm1 + //0x00007e9d LBB31_8 + 0xc5, 0xfd, 0xeb, 0xc1, //0x00007e9d vpor %ymm1, %ymm0, %ymm0 + 0xc4, 0xc1, 0x25, 0xd8, 0xca, //0x00007ea1 vpsubusb %ymm10, %ymm11, %ymm1 + 0xc5, 0x7d, 0x7f, 0xda, //0x00007ea6 vmovdqa %ymm11, %ymm2 + 0xe9, 0xf2, 0xfe, 0xff, 0xff, //0x00007eaa jmp LBB31_5 + //0x00007eaf LBB31_9 + 0xc4, 0xc3, 0x6d, 0x46, 0xcf, 0x21, //0x00007eaf vperm2i128 $33, %ymm15, %ymm2, %ymm1 + 0xc4, 0xe3, 0x05, 0x0f, 0xd1, 0x0f, //0x00007eb5 vpalignr $15, %ymm1, %ymm15, %ymm2 + 0xc5, 0xe5, 0x71, 0xd2, 0x04, //0x00007ebb vpsrlw $4, %ymm2, %ymm3 + 0xc5, 0xe5, 0xdb, 0xdc, //0x00007ec0 vpand %ymm4, %ymm3, %ymm3 + 0xc5, 0xfd, 0x6f, 0x2d, 0x34, 0xfd, 0xff, 0xff, //0x00007ec4 vmovdqa $-716(%rip), %ymm5 /* LCPI31_1+0(%rip) */ + 0xc4, 0xe2, 0x55, 0x00, 0xdb, //0x00007ecc vpshufb %ymm3, %ymm5, %ymm3 + 0xc5, 0xed, 0xdb, 0xd4, //0x00007ed1 vpand %ymm4, %ymm2, %ymm2 + 0xc4, 0xe2, 0x4d, 0x00, 0xd2, //0x00007ed5 vpshufb %ymm2, %ymm6, %ymm2 + 0xc4, 0xc1, 0x55, 0x71, 0xd7, 0x04, //0x00007eda vpsrlw $4, %ymm15, %ymm5 + 0xc5, 0xd5, 0xdb, 0xec, //0x00007ee0 vpand %ymm4, %ymm5, %ymm5 + 0xc4, 0xe2, 0x45, 0x00, 0xed, //0x00007ee4 vpshufb %ymm5, %ymm7, %ymm5 + 0xc5, 0xed, 0xdb, 0xd5, //0x00007ee9 vpand %ymm5, %ymm2, %ymm2 + 0xc5, 0xe5, 0xdb, 0xd2, //0x00007eed vpand %ymm2, %ymm3, %ymm2 + 0xc4, 0xe3, 0x05, 0x0f, 0xd9, 0x0e, //0x00007ef1 vpalignr $14, %ymm1, %ymm15, %ymm3 + 0xc4, 0xe3, 0x05, 0x0f, 0xc9, 0x0d, //0x00007ef7 vpalignr $13, %ymm1, %ymm15, %ymm1 + 0xc4, 0xc1, 0x65, 0xd8, 0xd8, //0x00007efd vpsubusb %ymm8, %ymm3, %ymm3 + 0xc4, 0xc1, 0x75, 0xd8, 0xc9, //0x00007f02 vpsubusb %ymm9, %ymm1, %ymm1 + 0xc5, 0xf5, 0xeb, 0xcb, //0x00007f07 vpor %ymm3, %ymm1, %ymm1 + 0xc5, 0xe1, 0xef, 0xdb, //0x00007f0b vpxor %xmm3, %xmm3, %xmm3 + 0xc5, 0xf5, 0x74, 0xdb, //0x00007f0f vpcmpeqb %ymm3, %ymm1, %ymm3 + 0xc4, 0xe2, 0x7d, 0x59, 0x0d, 0xc4, 0xfd, 0xff, 0xff, //0x00007f13 vpbroadcastq $-572(%rip), %ymm1 /* LCPI31_6+0(%rip) */ + 0xc5, 0xe5, 0xdf, 0xd9, //0x00007f1c vpandn %ymm1, %ymm3, %ymm3 + 0xc5, 0xe5, 0xef, 0xd2, //0x00007f20 vpxor %ymm2, %ymm3, %ymm2 + 0xc5, 0xfe, 0x7f, 0x54, 0x24, 0x60, //0x00007f24 vmovdqu %ymm2, $96(%rsp) + 0xc4, 0xc3, 0x05, 0x46, 0xdd, 0x21, //0x00007f2a vperm2i128 $33, %ymm13, %ymm15, %ymm3 + 0xc4, 0xe3, 0x15, 0x0f, 0xeb, 0x0f, //0x00007f30 vpalignr $15, %ymm3, %ymm13, %ymm5 + 0xc5, 0x85, 0x71, 0xd5, 0x04, //0x00007f36 vpsrlw $4, %ymm5, %ymm15 + 0xc5, 0x05, 0xdb, 0xfc, //0x00007f3b vpand %ymm4, %ymm15, %ymm15 + 0xc5, 0xfd, 0x6f, 0x15, 0xb9, 0xfc, 0xff, 0xff, //0x00007f3f vmovdqa $-839(%rip), %ymm2 /* LCPI31_1+0(%rip) */ + 0xc4, 0x42, 0x6d, 0x00, 0xff, //0x00007f47 vpshufb %ymm15, %ymm2, %ymm15 + 0xc5, 0xd5, 0xdb, 0xec, //0x00007f4c vpand %ymm4, %ymm5, %ymm5 + 0xc4, 0xe2, 0x4d, 0x00, 0xed, //0x00007f50 vpshufb %ymm5, %ymm6, %ymm5 + 0xc4, 0xc1, 0x6d, 0x71, 0xd5, 0x04, //0x00007f55 vpsrlw $4, %ymm13, %ymm2 + 0xc5, 0xed, 0xdb, 0xd4, //0x00007f5b vpand %ymm4, %ymm2, %ymm2 + 0xc4, 0xe2, 0x45, 0x00, 0xd2, //0x00007f5f vpshufb %ymm2, %ymm7, %ymm2 + 0xc5, 0xd5, 0xdb, 0xd2, //0x00007f64 vpand %ymm2, %ymm5, %ymm2 + 0xc5, 0x85, 0xdb, 0xd2, //0x00007f68 vpand %ymm2, %ymm15, %ymm2 + 0xc4, 0xe3, 0x15, 0x0f, 0xeb, 0x0e, //0x00007f6c vpalignr $14, %ymm3, %ymm13, %ymm5 + 0xc4, 0xe3, 0x15, 0x0f, 0xdb, 0x0d, //0x00007f72 vpalignr $13, %ymm3, %ymm13, %ymm3 + 0xc4, 0xc1, 0x55, 0xd8, 0xe8, //0x00007f78 vpsubusb %ymm8, %ymm5, %ymm5 + 0xc4, 0xc1, 0x65, 0xd8, 0xd9, //0x00007f7d vpsubusb %ymm9, %ymm3, %ymm3 + 0xc5, 0xe5, 0xeb, 0xdd, //0x00007f82 vpor %ymm5, %ymm3, %ymm3 + 0xc5, 0xe5, 0x74, 0x1d, 0x32, 0xfd, 0xff, 0xff, //0x00007f86 vpcmpeqb $-718(%rip), %ymm3, %ymm3 /* LCPI31_8+0(%rip) */ + 0xc5, 0xe5, 0xdf, 0xd9, //0x00007f8e vpandn %ymm1, %ymm3, %ymm3 + 0xc5, 0xe5, 0xef, 0xd2, //0x00007f92 vpxor %ymm2, %ymm3, %ymm2 + 0xc5, 0xfd, 0xeb, 0x44, 0x24, 0x60, //0x00007f96 vpor $96(%rsp), %ymm0, %ymm0 + 0xc5, 0xfd, 0xeb, 0xc2, //0x00007f9c vpor %ymm2, %ymm0, %ymm0 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf6, //0x00007fa0 vpmovmskb %ymm14, %esi + 0x85, 0xf6, //0x00007fa5 testl %esi, %esi + 0x0f, 0x84, 0xd6, 0x00, 0x00, 0x00, //0x00007fa7 je LBB31_11 + 0xc4, 0xc3, 0x15, 0x46, 0xd4, 0x21, //0x00007fad vperm2i128 $33, %ymm12, %ymm13, %ymm2 + 0xc4, 0xe3, 0x1d, 0x0f, 0xda, 0x0f, //0x00007fb3 vpalignr $15, %ymm2, %ymm12, %ymm3 + 0xc5, 0xd5, 0x71, 0xd3, 0x04, //0x00007fb9 vpsrlw $4, %ymm3, %ymm5 + 0xc5, 0xd5, 0xdb, 0xec, //0x00007fbe vpand %ymm4, %ymm5, %ymm5 + 0xc5, 0x7d, 0x6f, 0x3d, 0x36, 0xfc, 0xff, 0xff, //0x00007fc2 vmovdqa $-970(%rip), %ymm15 /* LCPI31_1+0(%rip) */ + 0xc4, 0xe2, 0x05, 0x00, 0xed, //0x00007fca vpshufb %ymm5, %ymm15, %ymm5 + 0xc5, 0xe5, 0xdb, 0xdc, //0x00007fcf vpand %ymm4, %ymm3, %ymm3 + 0xc4, 0xe2, 0x4d, 0x00, 0xdb, //0x00007fd3 vpshufb %ymm3, %ymm6, %ymm3 + 0xc4, 0xc1, 0x15, 0x71, 0xd4, 0x04, //0x00007fd8 vpsrlw $4, %ymm12, %ymm13 + 0xc5, 0x15, 0xdb, 0xec, //0x00007fde vpand %ymm4, %ymm13, %ymm13 + 0xc4, 0x42, 0x45, 0x00, 0xed, //0x00007fe2 vpshufb %ymm13, %ymm7, %ymm13 + 0xc5, 0x95, 0xdb, 0xdb, //0x00007fe7 vpand %ymm3, %ymm13, %ymm3 + 0xc5, 0xd5, 0xdb, 0xdb, //0x00007feb vpand %ymm3, %ymm5, %ymm3 + 0xc4, 0xe3, 0x1d, 0x0f, 0xea, 0x0e, //0x00007fef vpalignr $14, %ymm2, %ymm12, %ymm5 + 0xc4, 0xe3, 0x1d, 0x0f, 0xd2, 0x0d, //0x00007ff5 vpalignr $13, %ymm2, %ymm12, %ymm2 + 0xc4, 0xc1, 0x55, 0xd8, 0xe8, //0x00007ffb vpsubusb %ymm8, %ymm5, %ymm5 + 0xc4, 0xc1, 0x6d, 0xd8, 0xd1, //0x00008000 vpsubusb %ymm9, %ymm2, %ymm2 + 0xc5, 0xed, 0xeb, 0xd5, //0x00008005 vpor %ymm5, %ymm2, %ymm2 + 0xc4, 0x41, 0x09, 0xef, 0xf6, //0x00008009 vpxor %xmm14, %xmm14, %xmm14 + 0xc5, 0x8d, 0x74, 0xd2, //0x0000800e vpcmpeqb %ymm2, %ymm14, %ymm2 + 0xc5, 0xed, 0xdf, 0xd1, //0x00008012 vpandn %ymm1, %ymm2, %ymm2 + 0xc5, 0xed, 0xef, 0xd3, //0x00008016 vpxor %ymm3, %ymm2, %ymm2 + 0xc4, 0xc3, 0x1d, 0x46, 0xdb, 0x21, //0x0000801a vperm2i128 $33, %ymm11, %ymm12, %ymm3 + 0xc4, 0xe3, 0x25, 0x0f, 0xeb, 0x0f, //0x00008020 vpalignr $15, %ymm3, %ymm11, %ymm5 + 0xc5, 0x9d, 0x71, 0xd5, 0x04, //0x00008026 vpsrlw $4, %ymm5, %ymm12 + 0xc5, 0x1d, 0xdb, 0xe4, //0x0000802b vpand %ymm4, %ymm12, %ymm12 + 0xc4, 0x42, 0x05, 0x00, 0xe4, //0x0000802f vpshufb %ymm12, %ymm15, %ymm12 + 0xc5, 0xd5, 0xdb, 0xec, //0x00008034 vpand %ymm4, %ymm5, %ymm5 + 0xc4, 0xe2, 0x4d, 0x00, 0xed, //0x00008038 vpshufb %ymm5, %ymm6, %ymm5 + 0xc4, 0xc1, 0x15, 0x71, 0xd3, 0x04, //0x0000803d vpsrlw $4, %ymm11, %ymm13 + 0xc5, 0x15, 0xdb, 0xec, //0x00008043 vpand %ymm4, %ymm13, %ymm13 + 0xc4, 0x42, 0x45, 0x00, 0xed, //0x00008047 vpshufb %ymm13, %ymm7, %ymm13 + 0xc5, 0x95, 0xdb, 0xed, //0x0000804c vpand %ymm5, %ymm13, %ymm5 + 0xc5, 0x9d, 0xdb, 0xed, //0x00008050 vpand %ymm5, %ymm12, %ymm5 + 0xc4, 0x63, 0x25, 0x0f, 0xe3, 0x0e, //0x00008054 vpalignr $14, %ymm3, %ymm11, %ymm12 + 0xc4, 0xe3, 0x25, 0x0f, 0xdb, 0x0d, //0x0000805a vpalignr $13, %ymm3, %ymm11, %ymm3 + 0xc4, 0x41, 0x1d, 0xd8, 0xe0, //0x00008060 vpsubusb %ymm8, %ymm12, %ymm12 + 0xc4, 0xc1, 0x65, 0xd8, 0xd9, //0x00008065 vpsubusb %ymm9, %ymm3, %ymm3 + 0xc5, 0x9d, 0xeb, 0xdb, //0x0000806a vpor %ymm3, %ymm12, %ymm3 + 0xc5, 0x8d, 0x74, 0xdb, //0x0000806e vpcmpeqb %ymm3, %ymm14, %ymm3 + 0xc5, 0xe5, 0xdf, 0xc9, //0x00008072 vpandn %ymm1, %ymm3, %ymm1 + 0xc5, 0xf5, 0xef, 0xcd, //0x00008076 vpxor %ymm5, %ymm1, %ymm1 + 0xc5, 0xed, 0xeb, 0xc0, //0x0000807a vpor %ymm0, %ymm2, %ymm0 + 0xe9, 0x1a, 0xfe, 0xff, 0xff, //0x0000807e jmp LBB31_8 + //0x00008083 LBB31_11 + 0xc4, 0xc1, 0x15, 0xd8, 0xca, //0x00008083 vpsubusb %ymm10, %ymm13, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc1, //0x00008088 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0x7d, 0x7f, 0xea, //0x0000808c vmovdqa %ymm13, %ymm2 + 0xe9, 0x0c, 0xfd, 0xff, 0xff, //0x00008090 jmp LBB31_5 + //0x00008095 LBB31_13 + 0x48, 0x83, 0xe2, 0x80, //0x00008095 andq $-128, %rdx + 0x4c, 0x01, 0xc2, //0x00008099 addq %r8, %rdx + //0x0000809c LBB31_14 + 0x49, 0x8d, 0x49, 0xc0, //0x0000809c leaq $-64(%r9), %rcx + 0x48, 0x39, 0xca, //0x000080a0 cmpq %rcx, %rdx + 0x0f, 0x83, 0x79, 0x01, 0x00, 0x00, //0x000080a3 jae LBB31_20 + 0x48, 0x89, 0xc6, //0x000080a9 movq %rax, %rsi + 0x48, 0x29, 0xd6, //0x000080ac subq %rdx, %rsi + 0x4a, 0x8d, 0x7c, 0x06, 0xff, //0x000080af leaq $-1(%rsi,%r8), %rdi + 0xc5, 0xfd, 0x6f, 0x1d, 0x24, 0xfb, 0xff, 0xff, //0x000080b4 vmovdqa $-1244(%rip), %ymm3 /* LCPI31_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x25, 0x3c, 0xfb, 0xff, 0xff, //0x000080bc vmovdqa $-1220(%rip), %ymm4 /* LCPI31_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x2d, 0x54, 0xfb, 0xff, 0xff, //0x000080c4 vmovdqa $-1196(%rip), %ymm5 /* LCPI31_2+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0x6c, 0xfb, 0xff, 0xff, //0x000080cc vmovdqa $-1172(%rip), %ymm6 /* LCPI31_3+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x3d, 0x84, 0xfb, 0xff, 0xff, //0x000080d4 vmovdqa $-1148(%rip), %ymm7 /* LCPI31_4+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0x05, 0x9c, 0xfb, 0xff, 0xff, //0x000080dc vmovdqa $-1124(%rip), %ymm8 /* LCPI31_5+0(%rip) */ + 0xc4, 0x41, 0x31, 0xef, 0xc9, //0x000080e4 vpxor %xmm9, %xmm9, %xmm9 + 0xc5, 0x7d, 0x6f, 0x15, 0xaf, 0xfb, 0xff, 0xff, //0x000080e9 vmovdqa $-1105(%rip), %ymm10 /* LCPI31_7+0(%rip) */ + 0x48, 0x89, 0xd6, //0x000080f1 movq %rdx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000080f4 .p2align 4, 0x90 + //0x00008100 LBB31_16 + 0xc5, 0x7e, 0x6f, 0x26, //0x00008100 vmovdqu (%rsi), %ymm12 + 0xc5, 0x7e, 0x6f, 0x5e, 0x20, //0x00008104 vmovdqu $32(%rsi), %ymm11 + 0xc4, 0x41, 0x25, 0xeb, 0xec, //0x00008109 vpor %ymm12, %ymm11, %ymm13 + 0xc4, 0xc1, 0x7d, 0xd7, 0xdd, //0x0000810e vpmovmskb %ymm13, %ebx + 0x85, 0xdb, //0x00008113 testl %ebx, %ebx + 0x0f, 0x85, 0x16, 0x00, 0x00, 0x00, //0x00008115 jne LBB31_18 + 0xc5, 0xf5, 0xeb, 0xc0, //0x0000811b vpor %ymm0, %ymm1, %ymm0 + 0x48, 0x83, 0xc6, 0x40, //0x0000811f addq $64, %rsi + 0x48, 0x39, 0xce, //0x00008123 cmpq %rcx, %rsi + 0x0f, 0x82, 0xd4, 0xff, 0xff, 0xff, //0x00008126 jb LBB31_16 + 0xe9, 0xea, 0x00, 0x00, 0x00, //0x0000812c jmp LBB31_19 + //0x00008131 LBB31_18 + 0xc4, 0xc3, 0x6d, 0x46, 0xcc, 0x21, //0x00008131 vperm2i128 $33, %ymm12, %ymm2, %ymm1 + 0xc4, 0xe3, 0x1d, 0x0f, 0xd1, 0x0f, //0x00008137 vpalignr $15, %ymm1, %ymm12, %ymm2 + 0xc5, 0x95, 0x71, 0xd2, 0x04, //0x0000813d vpsrlw $4, %ymm2, %ymm13 + 0xc5, 0x15, 0xdb, 0xeb, //0x00008142 vpand %ymm3, %ymm13, %ymm13 + 0xc4, 0x42, 0x5d, 0x00, 0xed, //0x00008146 vpshufb %ymm13, %ymm4, %ymm13 + 0xc5, 0xed, 0xdb, 0xd3, //0x0000814b vpand %ymm3, %ymm2, %ymm2 + 0xc4, 0xe2, 0x55, 0x00, 0xd2, //0x0000814f vpshufb %ymm2, %ymm5, %ymm2 + 0xc4, 0xc1, 0x0d, 0x71, 0xd4, 0x04, //0x00008154 vpsrlw $4, %ymm12, %ymm14 + 0xc5, 0x0d, 0xdb, 0xf3, //0x0000815a vpand %ymm3, %ymm14, %ymm14 + 0xc4, 0x42, 0x4d, 0x00, 0xf6, //0x0000815e vpshufb %ymm14, %ymm6, %ymm14 + 0xc5, 0x8d, 0xdb, 0xd2, //0x00008163 vpand %ymm2, %ymm14, %ymm2 + 0xc5, 0x95, 0xdb, 0xd2, //0x00008167 vpand %ymm2, %ymm13, %ymm2 + 0xc4, 0x63, 0x1d, 0x0f, 0xe9, 0x0e, //0x0000816b vpalignr $14, %ymm1, %ymm12, %ymm13 + 0xc4, 0xe3, 0x1d, 0x0f, 0xc9, 0x0d, //0x00008171 vpalignr $13, %ymm1, %ymm12, %ymm1 + 0xc5, 0x15, 0xd8, 0xef, //0x00008177 vpsubusb %ymm7, %ymm13, %ymm13 + 0xc4, 0xc1, 0x75, 0xd8, 0xc8, //0x0000817b vpsubusb %ymm8, %ymm1, %ymm1 + 0xc5, 0x95, 0xeb, 0xc9, //0x00008180 vpor %ymm1, %ymm13, %ymm1 + 0xc5, 0xb5, 0x74, 0xc9, //0x00008184 vpcmpeqb %ymm1, %ymm9, %ymm1 + 0xc4, 0x62, 0x7d, 0x59, 0x2d, 0x4f, 0xfb, 0xff, 0xff, //0x00008188 vpbroadcastq $-1201(%rip), %ymm13 /* LCPI31_6+0(%rip) */ + 0xc4, 0xc1, 0x75, 0xdf, 0xcd, //0x00008191 vpandn %ymm13, %ymm1, %ymm1 + 0xc5, 0xf5, 0xef, 0xca, //0x00008196 vpxor %ymm2, %ymm1, %ymm1 + 0xc4, 0xc3, 0x1d, 0x46, 0xd3, 0x21, //0x0000819a vperm2i128 $33, %ymm11, %ymm12, %ymm2 + 0xc4, 0x63, 0x25, 0x0f, 0xe2, 0x0f, //0x000081a0 vpalignr $15, %ymm2, %ymm11, %ymm12 + 0xc4, 0xc1, 0x0d, 0x71, 0xd4, 0x04, //0x000081a6 vpsrlw $4, %ymm12, %ymm14 + 0xc5, 0x0d, 0xdb, 0xf3, //0x000081ac vpand %ymm3, %ymm14, %ymm14 + 0xc4, 0x42, 0x5d, 0x00, 0xf6, //0x000081b0 vpshufb %ymm14, %ymm4, %ymm14 + 0xc5, 0x1d, 0xdb, 0xe3, //0x000081b5 vpand %ymm3, %ymm12, %ymm12 + 0xc4, 0x42, 0x55, 0x00, 0xe4, //0x000081b9 vpshufb %ymm12, %ymm5, %ymm12 + 0xc4, 0xc1, 0x05, 0x71, 0xd3, 0x04, //0x000081be vpsrlw $4, %ymm11, %ymm15 + 0xc5, 0x05, 0xdb, 0xfb, //0x000081c4 vpand %ymm3, %ymm15, %ymm15 + 0xc4, 0x42, 0x4d, 0x00, 0xff, //0x000081c8 vpshufb %ymm15, %ymm6, %ymm15 + 0xc4, 0x41, 0x1d, 0xdb, 0xe7, //0x000081cd vpand %ymm15, %ymm12, %ymm12 + 0xc4, 0x41, 0x0d, 0xdb, 0xe4, //0x000081d2 vpand %ymm12, %ymm14, %ymm12 + 0xc4, 0x63, 0x25, 0x0f, 0xf2, 0x0e, //0x000081d7 vpalignr $14, %ymm2, %ymm11, %ymm14 + 0xc4, 0xe3, 0x25, 0x0f, 0xd2, 0x0d, //0x000081dd vpalignr $13, %ymm2, %ymm11, %ymm2 + 0xc5, 0x0d, 0xd8, 0xf7, //0x000081e3 vpsubusb %ymm7, %ymm14, %ymm14 + 0xc4, 0xc1, 0x6d, 0xd8, 0xd0, //0x000081e7 vpsubusb %ymm8, %ymm2, %ymm2 + 0xc5, 0x8d, 0xeb, 0xd2, //0x000081ec vpor %ymm2, %ymm14, %ymm2 + 0xc5, 0xb5, 0x74, 0xd2, //0x000081f0 vpcmpeqb %ymm2, %ymm9, %ymm2 + 0xc4, 0xc1, 0x6d, 0xdf, 0xd5, //0x000081f4 vpandn %ymm13, %ymm2, %ymm2 + 0xc5, 0x9d, 0xef, 0xd2, //0x000081f9 vpxor %ymm2, %ymm12, %ymm2 + 0xc5, 0xf5, 0xeb, 0xc0, //0x000081fd vpor %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xeb, 0xc2, //0x00008201 vpor %ymm2, %ymm0, %ymm0 + 0xc4, 0xc1, 0x25, 0xd8, 0xca, //0x00008205 vpsubusb %ymm10, %ymm11, %ymm1 + 0xc5, 0x7d, 0x7f, 0xda, //0x0000820a vmovdqa %ymm11, %ymm2 + 0x48, 0x83, 0xc6, 0x40, //0x0000820e addq $64, %rsi + 0x48, 0x39, 0xce, //0x00008212 cmpq %rcx, %rsi + 0x0f, 0x82, 0xe5, 0xfe, 0xff, 0xff, //0x00008215 jb LBB31_16 + //0x0000821b LBB31_19 + 0x48, 0x83, 0xe7, 0xc0, //0x0000821b andq $-64, %rdi + 0x48, 0x01, 0xfa, //0x0000821f addq %rdi, %rdx + //0x00008222 LBB31_20 + 0xc5, 0xe1, 0xef, 0xdb, //0x00008222 vpxor %xmm3, %xmm3, %xmm3 + 0xc5, 0xfe, 0x7f, 0x5c, 0x24, 0x40, //0x00008226 vmovdqu %ymm3, $64(%rsp) + 0xc5, 0xfe, 0x7f, 0x5c, 0x24, 0x20, //0x0000822c vmovdqu %ymm3, $32(%rsp) + 0xc5, 0xd9, 0xef, 0xe4, //0x00008232 vpxor %xmm4, %xmm4, %xmm4 + 0x4c, 0x39, 0xca, //0x00008236 cmpq %r9, %rdx + 0x0f, 0x83, 0x70, 0x00, 0x00, 0x00, //0x00008239 jae LBB31_36 + 0x48, 0x89, 0xc1, //0x0000823f movq %rax, %rcx + 0x48, 0x29, 0xd1, //0x00008242 subq %rdx, %rcx + 0x4d, 0x8d, 0x1c, 0x08, //0x00008245 leaq (%r8,%rcx), %r11 + 0x49, 0x81, 0xfb, 0x80, 0x00, 0x00, 0x00, //0x00008249 cmpq $128, %r11 + 0x0f, 0x82, 0x1f, 0x00, 0x00, 0x00, //0x00008250 jb LBB31_22 + 0x48, 0x8d, 0x74, 0x24, 0x20, //0x00008256 leaq $32(%rsp), %rsi + 0x4c, 0x39, 0xce, //0x0000825b cmpq %r9, %rsi + 0x0f, 0x83, 0x74, 0x02, 0x00, 0x00, //0x0000825e jae LBB31_26 + 0x48, 0x8d, 0x4c, 0x0c, 0x20, //0x00008264 leaq $32(%rsp,%rcx), %rcx + 0x4c, 0x01, 0xc1, //0x00008269 addq %r8, %rcx + 0x48, 0x39, 0xca, //0x0000826c cmpq %rcx, %rdx + 0x0f, 0x83, 0x63, 0x02, 0x00, 0x00, //0x0000826f jae LBB31_26 + //0x00008275 LBB31_22 + 0x31, 0xc9, //0x00008275 xorl %ecx, %ecx + //0x00008277 LBB31_33 + 0x48, 0x8d, 0x4c, 0x0c, 0x20, //0x00008277 leaq $32(%rsp,%rcx), %rcx + 0x48, 0x29, 0xd0, //0x0000827c subq %rdx, %rax + 0x4c, 0x01, 0xc0, //0x0000827f addq %r8, %rax + 0x31, 0xf6, //0x00008282 xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008284 .p2align 4, 0x90 + //0x00008290 LBB31_34 + 0x0f, 0xb6, 0x1c, 0x32, //0x00008290 movzbl (%rdx,%rsi), %ebx + 0x88, 0x1c, 0x31, //0x00008294 movb %bl, (%rcx,%rsi) + 0x48, 0xff, 0xc6, //0x00008297 incq %rsi + 0x48, 0x39, 0xf0, //0x0000829a cmpq %rsi, %rax + 0x0f, 0x85, 0xed, 0xff, 0xff, 0xff, //0x0000829d jne LBB31_34 + //0x000082a3 LBB31_35 + 0xc5, 0xfe, 0x6f, 0x64, 0x24, 0x20, //0x000082a3 vmovdqu $32(%rsp), %ymm4 + 0xc5, 0xfe, 0x6f, 0x5c, 0x24, 0x40, //0x000082a9 vmovdqu $64(%rsp), %ymm3 + //0x000082af LBB31_36 + 0xc5, 0xdd, 0xeb, 0xeb, //0x000082af vpor %ymm3, %ymm4, %ymm5 + 0xc5, 0xfd, 0xd7, 0xc5, //0x000082b3 vpmovmskb %ymm5, %eax + 0x85, 0xc0, //0x000082b7 testl %eax, %eax + 0x0f, 0x85, 0x38, 0x03, 0x00, 0x00, //0x000082b9 jne LBB31_40 + 0xc5, 0xfd, 0xeb, 0xc1, //0x000082bf vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xeb, 0xc1, //0x000082c3 vpor %ymm1, %ymm0, %ymm0 + 0xc4, 0xe2, 0x7d, 0x17, 0xc0, //0x000082c7 vptest %ymm0, %ymm0 + 0x0f, 0x84, 0xfa, 0x01, 0x00, 0x00, //0x000082cc je LBB31_12 + //0x000082d2 LBB31_41 + 0x49, 0x8d, 0x49, 0xfd, //0x000082d2 leaq $-3(%r9), %rcx + 0x4c, 0x89, 0xc0, //0x000082d6 movq %r8, %rax + 0x49, 0x39, 0xc8, //0x000082d9 cmpq %rcx, %r8 + 0x0f, 0x83, 0xde, 0x00, 0x00, 0x00, //0x000082dc jae LBB31_55 + 0x4c, 0x89, 0xc0, //0x000082e2 movq %r8, %rax + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x000082e5 jmp LBB31_44 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000082ea .p2align 4, 0x90 + //0x000082f0 LBB31_43 + 0x48, 0x01, 0xf0, //0x000082f0 addq %rsi, %rax + 0x48, 0x39, 0xc8, //0x000082f3 cmpq %rcx, %rax + 0x0f, 0x83, 0xc4, 0x00, 0x00, 0x00, //0x000082f6 jae LBB31_55 + //0x000082fc LBB31_44 + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x000082fc movl $1, %esi + 0x80, 0x38, 0x00, //0x00008301 cmpb $0, (%rax) + 0x0f, 0x89, 0xe6, 0xff, 0xff, 0xff, //0x00008304 jns LBB31_43 + 0x8b, 0x10, //0x0000830a movl (%rax), %edx + 0x89, 0xd6, //0x0000830c movl %edx, %esi + 0x81, 0xe6, 0xf0, 0xc0, 0xc0, 0x00, //0x0000830e andl $12632304, %esi + 0x81, 0xfe, 0xe0, 0x80, 0x80, 0x00, //0x00008314 cmpl $8421600, %esi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000831a jne LBB31_48 + 0x89, 0xd7, //0x00008320 movl %edx, %edi + 0x81, 0xe7, 0x0f, 0x20, 0x00, 0x00, //0x00008322 andl $8207, %edi + 0x81, 0xff, 0x0d, 0x20, 0x00, 0x00, //0x00008328 cmpl $8205, %edi + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x0000832e je LBB31_48 + 0xbe, 0x03, 0x00, 0x00, 0x00, //0x00008334 movl $3, %esi + 0x85, 0xff, //0x00008339 testl %edi, %edi + 0x0f, 0x85, 0xaf, 0xff, 0xff, 0xff, //0x0000833b jne LBB31_43 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008341 .p2align 4, 0x90 + //0x00008350 LBB31_48 + 0x89, 0xd6, //0x00008350 movl %edx, %esi + 0x81, 0xe6, 0xe0, 0xc0, 0x00, 0x00, //0x00008352 andl $49376, %esi + 0x81, 0xfe, 0xc0, 0x80, 0x00, 0x00, //0x00008358 cmpl $32960, %esi + 0x0f, 0x85, 0x10, 0x00, 0x00, 0x00, //0x0000835e jne LBB31_50 + 0x89, 0xd7, //0x00008364 movl %edx, %edi + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00008366 movl $2, %esi + 0x83, 0xe7, 0x1e, //0x0000836b andl $30, %edi + 0x0f, 0x85, 0x7c, 0xff, 0xff, 0xff, //0x0000836e jne LBB31_43 + //0x00008374 LBB31_50 + 0x89, 0xd6, //0x00008374 movl %edx, %esi + 0x81, 0xe6, 0xf8, 0xc0, 0xc0, 0xc0, //0x00008376 andl $-1061109512, %esi + 0x81, 0xfe, 0xf0, 0x80, 0x80, 0x80, //0x0000837c cmpl $-2139062032, %esi + 0x0f, 0x85, 0x28, 0x00, 0x00, 0x00, //0x00008382 jne LBB31_54 + 0x89, 0xd6, //0x00008388 movl %edx, %esi + 0x81, 0xe6, 0x07, 0x30, 0x00, 0x00, //0x0000838a andl $12295, %esi + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00008390 je LBB31_54 + 0xbe, 0x04, 0x00, 0x00, 0x00, //0x00008396 movl $4, %esi + 0xf6, 0xc2, 0x04, //0x0000839b testb $4, %dl + 0x0f, 0x84, 0x4c, 0xff, 0xff, 0xff, //0x0000839e je LBB31_43 + 0x81, 0xe2, 0x03, 0x30, 0x00, 0x00, //0x000083a4 andl $12291, %edx + 0x0f, 0x84, 0x40, 0xff, 0xff, 0xff, //0x000083aa je LBB31_43 + //0x000083b0 LBB31_54 + 0x48, 0xf7, 0xd0, //0x000083b0 notq %rax + 0x4c, 0x01, 0xc0, //0x000083b3 addq %r8, %rax + 0x48, 0x8d, 0x65, 0xf8, //0x000083b6 leaq $-8(%rbp), %rsp + 0x5b, //0x000083ba popq %rbx + 0x5d, //0x000083bb popq %rbp + 0xc5, 0xf8, 0x77, //0x000083bc vzeroupper + 0xc3, //0x000083bf retq + //0x000083c0 LBB31_55 + 0x4c, 0x39, 0xc8, //0x000083c0 cmpq %r9, %rax + 0x0f, 0x83, 0x03, 0x01, 0x00, 0x00, //0x000083c3 jae LBB31_12 + 0x4c, 0x8d, 0x54, 0x24, 0x20, //0x000083c9 leaq $32(%rsp), %r10 + 0x4c, 0x8d, 0x5c, 0x24, 0x1e, //0x000083ce leaq $30(%rsp), %r11 + 0xe9, 0x14, 0x00, 0x00, 0x00, //0x000083d3 jmp LBB31_58 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000083d8 .p2align 4, 0x90 + //0x000083e0 LBB31_57 + 0x48, 0xff, 0xc0, //0x000083e0 incq %rax + 0x4c, 0x39, 0xc8, //0x000083e3 cmpq %r9, %rax + 0x0f, 0x83, 0xe0, 0x00, 0x00, 0x00, //0x000083e6 jae LBB31_12 + //0x000083ec LBB31_58 + 0x80, 0x38, 0x00, //0x000083ec cmpb $0, (%rax) + 0x0f, 0x89, 0xeb, 0xff, 0xff, 0xff, //0x000083ef jns LBB31_57 + 0xc6, 0x44, 0x24, 0x20, 0x00, //0x000083f5 movb $0, $32(%rsp) + 0xc6, 0x44, 0x24, 0x1e, 0x00, //0x000083fa movb $0, $30(%rsp) + 0x4c, 0x89, 0xc9, //0x000083ff movq %r9, %rcx + 0x48, 0x29, 0xc1, //0x00008402 subq %rax, %rcx + 0x48, 0x83, 0xf9, 0x02, //0x00008405 cmpq $2, %rcx + 0x0f, 0x82, 0x33, 0x00, 0x00, 0x00, //0x00008409 jb LBB31_62 + 0x0f, 0xb6, 0x10, //0x0000840f movzbl (%rax), %edx + 0x0f, 0xb6, 0x78, 0x01, //0x00008412 movzbl $1(%rax), %edi + 0x88, 0x54, 0x24, 0x20, //0x00008416 movb %dl, $32(%rsp) + 0x48, 0x8d, 0x70, 0x02, //0x0000841a leaq $2(%rax), %rsi + 0x48, 0x83, 0xc1, 0xfe, //0x0000841e addq $-2, %rcx + 0x4c, 0x89, 0xdb, //0x00008422 movq %r11, %rbx + 0x48, 0x85, 0xc9, //0x00008425 testq %rcx, %rcx + 0x0f, 0x84, 0x27, 0x00, 0x00, 0x00, //0x00008428 je LBB31_63 + //0x0000842e LBB31_61 + 0x0f, 0xb6, 0x0e, //0x0000842e movzbl (%rsi), %ecx + 0x88, 0x0b, //0x00008431 movb %cl, (%rbx) + 0x0f, 0xb6, 0x54, 0x24, 0x20, //0x00008433 movzbl $32(%rsp), %edx + 0x0f, 0xb6, 0x4c, 0x24, 0x1e, //0x00008438 movzbl $30(%rsp), %ecx + 0xe9, 0x15, 0x00, 0x00, 0x00, //0x0000843d jmp LBB31_64 + //0x00008442 LBB31_62 + 0x31, 0xd2, //0x00008442 xorl %edx, %edx + 0x31, 0xff, //0x00008444 xorl %edi, %edi + 0x4c, 0x89, 0xd3, //0x00008446 movq %r10, %rbx + 0x48, 0x89, 0xc6, //0x00008449 movq %rax, %rsi + 0x48, 0x85, 0xc9, //0x0000844c testq %rcx, %rcx + 0x0f, 0x85, 0xd9, 0xff, 0xff, 0xff, //0x0000844f jne LBB31_61 + //0x00008455 LBB31_63 + 0x31, 0xc9, //0x00008455 xorl %ecx, %ecx + //0x00008457 LBB31_64 + 0x0f, 0xb6, 0xf1, //0x00008457 movzbl %cl, %esi + 0xc1, 0xe6, 0x10, //0x0000845a shll $16, %esi + 0x40, 0x0f, 0xb6, 0xff, //0x0000845d movzbl %dil, %edi + 0xc1, 0xe7, 0x08, //0x00008461 shll $8, %edi + 0x0f, 0xb6, 0xca, //0x00008464 movzbl %dl, %ecx + 0x09, 0xf9, //0x00008467 orl %edi, %ecx + 0x09, 0xce, //0x00008469 orl %ecx, %esi + 0x81, 0xe6, 0xf0, 0xc0, 0xc0, 0x00, //0x0000846b andl $12632304, %esi + 0x81, 0xfe, 0xe0, 0x80, 0x80, 0x00, //0x00008471 cmpl $8421600, %esi + 0x0f, 0x85, 0x23, 0x00, 0x00, 0x00, //0x00008477 jne LBB31_67 + 0x89, 0xcf, //0x0000847d movl %ecx, %edi + 0x81, 0xe7, 0x0f, 0x20, 0x00, 0x00, //0x0000847f andl $8207, %edi + 0x81, 0xff, 0x0d, 0x20, 0x00, 0x00, //0x00008485 cmpl $8205, %edi + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000848b je LBB31_67 + 0xbe, 0x03, 0x00, 0x00, 0x00, //0x00008491 movl $3, %esi + 0x85, 0xff, //0x00008496 testl %edi, %edi + 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00008498 jne LBB31_69 + 0x90, 0x90, //0x0000849e .p2align 4, 0x90 + //0x000084a0 LBB31_67 + 0xf6, 0xc2, 0x1e, //0x000084a0 testb $30, %dl + 0x0f, 0x84, 0x07, 0xff, 0xff, 0xff, //0x000084a3 je LBB31_54 + 0x81, 0xe1, 0xe0, 0xc0, 0x00, 0x00, //0x000084a9 andl $49376, %ecx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x000084af movl $2, %esi + 0x81, 0xf9, 0xc0, 0x80, 0x00, 0x00, //0x000084b4 cmpl $32960, %ecx + 0x0f, 0x85, 0xf0, 0xfe, 0xff, 0xff, //0x000084ba jne LBB31_54 + //0x000084c0 LBB31_69 + 0x48, 0x01, 0xf0, //0x000084c0 addq %rsi, %rax + 0x4c, 0x39, 0xc8, //0x000084c3 cmpq %r9, %rax + 0x0f, 0x82, 0x20, 0xff, 0xff, 0xff, //0x000084c6 jb LBB31_58 + //0x000084cc LBB31_12 + 0x31, 0xc0, //0x000084cc xorl %eax, %eax + 0x48, 0x8d, 0x65, 0xf8, //0x000084ce leaq $-8(%rbp), %rsp + 0x5b, //0x000084d2 popq %rbx + 0x5d, //0x000084d3 popq %rbp + 0xc5, 0xf8, 0x77, //0x000084d4 vzeroupper + 0xc3, //0x000084d7 retq + //0x000084d8 LBB31_26 + 0x4c, 0x89, 0xd9, //0x000084d8 movq %r11, %rcx + 0x48, 0x83, 0xe1, 0x80, //0x000084db andq $-128, %rcx + 0x48, 0x8d, 0x79, 0x80, //0x000084df leaq $-128(%rcx), %rdi + 0x48, 0x89, 0xfe, //0x000084e3 movq %rdi, %rsi + 0x48, 0xc1, 0xee, 0x07, //0x000084e6 shrq $7, %rsi + 0x48, 0xff, 0xc6, //0x000084ea incq %rsi + 0x41, 0x89, 0xf2, //0x000084ed movl %esi, %r10d + 0x41, 0x83, 0xe2, 0x01, //0x000084f0 andl $1, %r10d + 0x48, 0x85, 0xff, //0x000084f4 testq %rdi, %rdi + 0x0f, 0x84, 0xea, 0x00, 0x00, 0x00, //0x000084f7 je LBB31_39 + 0x4c, 0x29, 0xd6, //0x000084fd subq %r10, %rsi + 0x31, 0xff, //0x00008500 xorl %edi, %edi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008502 .p2align 4, 0x90 + //0x00008510 LBB31_28 + 0xc5, 0xfc, 0x10, 0x1c, 0x3a, //0x00008510 vmovups (%rdx,%rdi), %ymm3 + 0xc5, 0xfc, 0x10, 0x64, 0x3a, 0x20, //0x00008515 vmovups $32(%rdx,%rdi), %ymm4 + 0xc5, 0xfc, 0x10, 0x6c, 0x3a, 0x40, //0x0000851b vmovups $64(%rdx,%rdi), %ymm5 + 0xc5, 0xfc, 0x10, 0x74, 0x3a, 0x60, //0x00008521 vmovups $96(%rdx,%rdi), %ymm6 + 0xc5, 0xfc, 0x11, 0x5c, 0x3c, 0x20, //0x00008527 vmovups %ymm3, $32(%rsp,%rdi) + 0xc5, 0xfc, 0x11, 0x64, 0x3c, 0x40, //0x0000852d vmovups %ymm4, $64(%rsp,%rdi) + 0xc5, 0xfc, 0x11, 0x6c, 0x3c, 0x60, //0x00008533 vmovups %ymm5, $96(%rsp,%rdi) + 0xc5, 0xfc, 0x11, 0xb4, 0x3c, 0x80, 0x00, 0x00, 0x00, //0x00008539 vmovups %ymm6, $128(%rsp,%rdi) + 0xc5, 0xfe, 0x6f, 0x9c, 0x3a, 0x80, 0x00, 0x00, 0x00, //0x00008542 vmovdqu $128(%rdx,%rdi), %ymm3 + 0xc5, 0xfe, 0x6f, 0xa4, 0x3a, 0xa0, 0x00, 0x00, 0x00, //0x0000854b vmovdqu $160(%rdx,%rdi), %ymm4 + 0xc5, 0xfe, 0x6f, 0xac, 0x3a, 0xc0, 0x00, 0x00, 0x00, //0x00008554 vmovdqu $192(%rdx,%rdi), %ymm5 + 0xc5, 0xfe, 0x6f, 0xb4, 0x3a, 0xe0, 0x00, 0x00, 0x00, //0x0000855d vmovdqu $224(%rdx,%rdi), %ymm6 + 0xc5, 0xfe, 0x7f, 0x9c, 0x3c, 0xa0, 0x00, 0x00, 0x00, //0x00008566 vmovdqu %ymm3, $160(%rsp,%rdi) + 0xc5, 0xfe, 0x7f, 0xa4, 0x3c, 0xc0, 0x00, 0x00, 0x00, //0x0000856f vmovdqu %ymm4, $192(%rsp,%rdi) + 0xc5, 0xfe, 0x7f, 0xac, 0x3c, 0xe0, 0x00, 0x00, 0x00, //0x00008578 vmovdqu %ymm5, $224(%rsp,%rdi) + 0xc5, 0xfe, 0x7f, 0xb4, 0x3c, 0x00, 0x01, 0x00, 0x00, //0x00008581 vmovdqu %ymm6, $256(%rsp,%rdi) + 0x48, 0x81, 0xc7, 0x00, 0x01, 0x00, 0x00, //0x0000858a addq $256, %rdi + 0x48, 0x83, 0xc6, 0xfe, //0x00008591 addq $-2, %rsi + 0x0f, 0x85, 0x75, 0xff, 0xff, 0xff, //0x00008595 jne LBB31_28 + 0x4d, 0x85, 0xd2, //0x0000859b testq %r10, %r10 + 0x0f, 0x84, 0x32, 0x00, 0x00, 0x00, //0x0000859e je LBB31_31 + //0x000085a4 LBB31_30 + 0xc5, 0xfe, 0x6f, 0x1c, 0x3a, //0x000085a4 vmovdqu (%rdx,%rdi), %ymm3 + 0xc5, 0xfe, 0x6f, 0x64, 0x3a, 0x20, //0x000085a9 vmovdqu $32(%rdx,%rdi), %ymm4 + 0xc5, 0xfe, 0x6f, 0x6c, 0x3a, 0x40, //0x000085af vmovdqu $64(%rdx,%rdi), %ymm5 + 0xc5, 0xfe, 0x6f, 0x74, 0x3a, 0x60, //0x000085b5 vmovdqu $96(%rdx,%rdi), %ymm6 + 0xc5, 0xfe, 0x7f, 0x5c, 0x3c, 0x20, //0x000085bb vmovdqu %ymm3, $32(%rsp,%rdi) + 0xc5, 0xfe, 0x7f, 0x64, 0x3c, 0x40, //0x000085c1 vmovdqu %ymm4, $64(%rsp,%rdi) + 0xc5, 0xfe, 0x7f, 0x6c, 0x3c, 0x60, //0x000085c7 vmovdqu %ymm5, $96(%rsp,%rdi) + 0xc5, 0xfe, 0x7f, 0xb4, 0x3c, 0x80, 0x00, 0x00, 0x00, //0x000085cd vmovdqu %ymm6, $128(%rsp,%rdi) + //0x000085d6 LBB31_31 + 0x4c, 0x39, 0xd9, //0x000085d6 cmpq %r11, %rcx + 0x0f, 0x84, 0xc4, 0xfc, 0xff, 0xff, //0x000085d9 je LBB31_35 + 0x48, 0x01, 0xca, //0x000085df addq %rcx, %rdx + 0xe9, 0x90, 0xfc, 0xff, 0xff, //0x000085e2 jmp LBB31_33 + //0x000085e7 LBB31_39 + 0x31, 0xff, //0x000085e7 xorl %edi, %edi + 0x4d, 0x85, 0xd2, //0x000085e9 testq %r10, %r10 + 0x0f, 0x85, 0xb2, 0xff, 0xff, 0xff, //0x000085ec jne LBB31_30 + 0xe9, 0xdf, 0xff, 0xff, 0xff, //0x000085f2 jmp LBB31_31 + //0x000085f7 LBB31_40 + 0xc4, 0xe3, 0x6d, 0x46, 0xd4, 0x21, //0x000085f7 vperm2i128 $33, %ymm4, %ymm2, %ymm2 + 0xc4, 0xe3, 0x5d, 0x0f, 0xea, 0x0f, //0x000085fd vpalignr $15, %ymm2, %ymm4, %ymm5 + 0xc5, 0xcd, 0x71, 0xd5, 0x04, //0x00008603 vpsrlw $4, %ymm5, %ymm6 + 0xc5, 0xfd, 0x6f, 0x0d, 0xd0, 0xf5, 0xff, 0xff, //0x00008608 vmovdqa $-2608(%rip), %ymm1 /* LCPI31_0+0(%rip) */ + 0xc5, 0xcd, 0xdb, 0xf1, //0x00008610 vpand %ymm1, %ymm6, %ymm6 + 0xc5, 0xfd, 0x6f, 0x3d, 0xe4, 0xf5, 0xff, 0xff, //0x00008614 vmovdqa $-2588(%rip), %ymm7 /* LCPI31_1+0(%rip) */ + 0xc4, 0xe2, 0x45, 0x00, 0xf6, //0x0000861c vpshufb %ymm6, %ymm7, %ymm6 + 0xc5, 0xd5, 0xdb, 0xe9, //0x00008621 vpand %ymm1, %ymm5, %ymm5 + 0xc5, 0x7d, 0x6f, 0x05, 0xf3, 0xf5, 0xff, 0xff, //0x00008625 vmovdqa $-2573(%rip), %ymm8 /* LCPI31_2+0(%rip) */ + 0xc4, 0xe2, 0x3d, 0x00, 0xed, //0x0000862d vpshufb %ymm5, %ymm8, %ymm5 + 0xc5, 0xb5, 0x71, 0xd4, 0x04, //0x00008632 vpsrlw $4, %ymm4, %ymm9 + 0xc5, 0x35, 0xdb, 0xc9, //0x00008637 vpand %ymm1, %ymm9, %ymm9 + 0xc5, 0x7d, 0x6f, 0x15, 0xfd, 0xf5, 0xff, 0xff, //0x0000863b vmovdqa $-2563(%rip), %ymm10 /* LCPI31_3+0(%rip) */ + 0xc4, 0x42, 0x2d, 0x00, 0xc9, //0x00008643 vpshufb %ymm9, %ymm10, %ymm9 + 0xc5, 0xb5, 0xdb, 0xed, //0x00008648 vpand %ymm5, %ymm9, %ymm5 + 0xc5, 0xcd, 0xdb, 0xed, //0x0000864c vpand %ymm5, %ymm6, %ymm5 + 0xc4, 0xe3, 0x5d, 0x0f, 0xf2, 0x0e, //0x00008650 vpalignr $14, %ymm2, %ymm4, %ymm6 + 0xc4, 0xe3, 0x5d, 0x0f, 0xd2, 0x0d, //0x00008656 vpalignr $13, %ymm2, %ymm4, %ymm2 + 0xc5, 0x7d, 0x6f, 0x0d, 0xfc, 0xf5, 0xff, 0xff, //0x0000865c vmovdqa $-2564(%rip), %ymm9 /* LCPI31_4+0(%rip) */ + 0xc4, 0xc1, 0x4d, 0xd8, 0xf1, //0x00008664 vpsubusb %ymm9, %ymm6, %ymm6 + 0xc5, 0x7d, 0x6f, 0x1d, 0x0f, 0xf6, 0xff, 0xff, //0x00008669 vmovdqa $-2545(%rip), %ymm11 /* LCPI31_5+0(%rip) */ + 0xc4, 0xc1, 0x6d, 0xd8, 0xd3, //0x00008671 vpsubusb %ymm11, %ymm2, %ymm2 + 0xc5, 0xed, 0xeb, 0xd6, //0x00008676 vpor %ymm6, %ymm2, %ymm2 + 0xc5, 0xc9, 0xef, 0xf6, //0x0000867a vpxor %xmm6, %xmm6, %xmm6 + 0xc5, 0xed, 0x74, 0xd6, //0x0000867e vpcmpeqb %ymm6, %ymm2, %ymm2 + 0xc4, 0x62, 0x7d, 0x59, 0x25, 0x55, 0xf6, 0xff, 0xff, //0x00008682 vpbroadcastq $-2475(%rip), %ymm12 /* LCPI31_6+0(%rip) */ + 0xc4, 0xc1, 0x6d, 0xdf, 0xd4, //0x0000868b vpandn %ymm12, %ymm2, %ymm2 + 0xc5, 0xed, 0xef, 0xd5, //0x00008690 vpxor %ymm5, %ymm2, %ymm2 + 0xc4, 0xe3, 0x5d, 0x46, 0xe3, 0x21, //0x00008694 vperm2i128 $33, %ymm3, %ymm4, %ymm4 + 0xc4, 0xe3, 0x65, 0x0f, 0xec, 0x0f, //0x0000869a vpalignr $15, %ymm4, %ymm3, %ymm5 + 0xc5, 0x95, 0x71, 0xd5, 0x04, //0x000086a0 vpsrlw $4, %ymm5, %ymm13 + 0xc5, 0x15, 0xdb, 0xe9, //0x000086a5 vpand %ymm1, %ymm13, %ymm13 + 0xc4, 0xc2, 0x45, 0x00, 0xfd, //0x000086a9 vpshufb %ymm13, %ymm7, %ymm7 + 0xc5, 0xd5, 0xdb, 0xe9, //0x000086ae vpand %ymm1, %ymm5, %ymm5 + 0xc4, 0xe2, 0x3d, 0x00, 0xed, //0x000086b2 vpshufb %ymm5, %ymm8, %ymm5 + 0xc5, 0xbd, 0x71, 0xd3, 0x04, //0x000086b7 vpsrlw $4, %ymm3, %ymm8 + 0xc5, 0xbd, 0xdb, 0xc9, //0x000086bc vpand %ymm1, %ymm8, %ymm1 + 0xc4, 0xe2, 0x2d, 0x00, 0xc9, //0x000086c0 vpshufb %ymm1, %ymm10, %ymm1 + 0xc5, 0xd5, 0xdb, 0xc9, //0x000086c5 vpand %ymm1, %ymm5, %ymm1 + 0xc5, 0xc5, 0xdb, 0xc9, //0x000086c9 vpand %ymm1, %ymm7, %ymm1 + 0xc4, 0xe3, 0x65, 0x0f, 0xec, 0x0e, //0x000086cd vpalignr $14, %ymm4, %ymm3, %ymm5 + 0xc4, 0xe3, 0x65, 0x0f, 0xe4, 0x0d, //0x000086d3 vpalignr $13, %ymm4, %ymm3, %ymm4 + 0xc4, 0xc1, 0x55, 0xd8, 0xe9, //0x000086d9 vpsubusb %ymm9, %ymm5, %ymm5 + 0xc4, 0xc1, 0x5d, 0xd8, 0xe3, //0x000086de vpsubusb %ymm11, %ymm4, %ymm4 + 0xc5, 0xdd, 0xeb, 0xe5, //0x000086e3 vpor %ymm5, %ymm4, %ymm4 + 0xc5, 0xdd, 0x74, 0xe6, //0x000086e7 vpcmpeqb %ymm6, %ymm4, %ymm4 + 0xc4, 0xc1, 0x5d, 0xdf, 0xe4, //0x000086eb vpandn %ymm12, %ymm4, %ymm4 + 0xc5, 0xdd, 0xef, 0xc9, //0x000086f0 vpxor %ymm1, %ymm4, %ymm1 + 0xc5, 0xed, 0xeb, 0xc0, //0x000086f4 vpor %ymm0, %ymm2, %ymm0 + 0xc5, 0xfd, 0xeb, 0xc1, //0x000086f8 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xe5, 0xd8, 0x0d, 0x9c, 0xf5, 0xff, 0xff, //0x000086fc vpsubusb $-2660(%rip), %ymm3, %ymm1 /* LCPI31_7+0(%rip) */ + 0xc5, 0xfd, 0xeb, 0xc1, //0x00008704 vpor %ymm1, %ymm0, %ymm0 + 0xc4, 0xe2, 0x7d, 0x17, 0xc0, //0x00008708 vptest %ymm0, %ymm0 + 0x0f, 0x84, 0xb9, 0xfd, 0xff, 0xff, //0x0000870d je LBB31_12 + 0xe9, 0xba, 0xfb, 0xff, 0xff, //0x00008713 jmp LBB31_41 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00008718 .p2align 5, 0x00 + //0x00008720 LCPI32_0 + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x00008720 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x00008730 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + //0x00008740 .p2align 4, 0x90 + //0x00008740 _f32toa + 0x55, //0x00008740 pushq %rbp + 0x48, 0x89, 0xe5, //0x00008741 movq %rsp, %rbp + 0x41, 0x57, //0x00008744 pushq %r15 + 0x41, 0x56, //0x00008746 pushq %r14 + 0x41, 0x55, //0x00008748 pushq %r13 + 0x41, 0x54, //0x0000874a pushq %r12 + 0x53, //0x0000874c pushq %rbx + 0xc5, 0xf9, 0x7e, 0xc0, //0x0000874d vmovd %xmm0, %eax + 0x89, 0xc1, //0x00008751 movl %eax, %ecx + 0xc1, 0xe9, 0x17, //0x00008753 shrl $23, %ecx + 0x0f, 0xb6, 0xd9, //0x00008756 movzbl %cl, %ebx + 0x81, 0xfb, 0xff, 0x00, 0x00, 0x00, //0x00008759 cmpl $255, %ebx + 0x0f, 0x84, 0xff, 0x0c, 0x00, 0x00, //0x0000875f je LBB32_139 + 0xc6, 0x07, 0x2d, //0x00008765 movb $45, (%rdi) + 0x41, 0x89, 0xc1, //0x00008768 movl %eax, %r9d + 0x41, 0xc1, 0xe9, 0x1f, //0x0000876b shrl $31, %r9d + 0x4e, 0x8d, 0x04, 0x0f, //0x0000876f leaq (%rdi,%r9), %r8 + 0xa9, 0xff, 0xff, 0xff, 0x7f, //0x00008773 testl $2147483647, %eax + 0x0f, 0x84, 0xc6, 0x01, 0x00, 0x00, //0x00008778 je LBB32_14 + 0x25, 0xff, 0xff, 0x7f, 0x00, //0x0000877e andl $8388607, %eax + 0x85, 0xdb, //0x00008783 testl %ebx, %ebx + 0x0f, 0x84, 0xe1, 0x0c, 0x00, 0x00, //0x00008785 je LBB32_140 + 0x8d, 0xb0, 0x00, 0x00, 0x80, 0x00, //0x0000878b leal $8388608(%rax), %esi + 0x44, 0x8d, 0xbb, 0x6a, 0xff, 0xff, 0xff, //0x00008791 leal $-150(%rbx), %r15d + 0x8d, 0x4b, 0x81, //0x00008798 leal $-127(%rbx), %ecx + 0x83, 0xf9, 0x17, //0x0000879b cmpl $23, %ecx + 0x0f, 0x87, 0x1b, 0x00, 0x00, 0x00, //0x0000879e ja LBB32_5 + 0xb9, 0x96, 0x00, 0x00, 0x00, //0x000087a4 movl $150, %ecx + 0x29, 0xd9, //0x000087a9 subl %ebx, %ecx + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000087ab movq $-1, %rdx + 0x48, 0xd3, 0xe2, //0x000087b2 shlq %cl, %rdx + 0xf7, 0xd2, //0x000087b5 notl %edx + 0x85, 0xf2, //0x000087b7 testl %esi, %edx + 0x0f, 0x84, 0x12, 0x04, 0x00, 0x00, //0x000087b9 je LBB32_32 + //0x000087bf LBB32_5 + 0x41, 0x89, 0xf6, //0x000087bf movl %esi, %r14d + 0x41, 0x83, 0xe6, 0x01, //0x000087c2 andl $1, %r14d + 0x85, 0xc0, //0x000087c6 testl %eax, %eax + 0x0f, 0x94, 0xc0, //0x000087c8 sete %al + 0x83, 0xfb, 0x01, //0x000087cb cmpl $1, %ebx + 0x0f, 0x97, 0xc1, //0x000087ce seta %cl + 0x20, 0xc1, //0x000087d1 andb %al, %cl + 0x0f, 0xb6, 0xc9, //0x000087d3 movzbl %cl, %ecx + 0x41, 0x89, 0xf2, //0x000087d6 movl %esi, %r10d + 0x41, 0xc1, 0xe2, 0x02, //0x000087d9 shll $2, %r10d + 0x8d, 0x44, 0xb1, 0xfe, //0x000087dd leal $-2(%rcx,%rsi,4), %eax + 0x45, 0x69, 0xdf, 0x13, 0x44, 0x13, 0x00, //0x000087e1 imull $1262611, %r15d, %r11d + 0x31, 0xd2, //0x000087e8 xorl %edx, %edx + 0x84, 0xc9, //0x000087ea testb %cl, %cl + 0xb9, 0xff, 0xfe, 0x07, 0x00, //0x000087ec movl $524031, %ecx + 0x0f, 0x44, 0xca, //0x000087f1 cmovel %edx, %ecx + 0x41, 0x29, 0xcb, //0x000087f4 subl %ecx, %r11d + 0x41, 0xc1, 0xfb, 0x16, //0x000087f7 sarl $22, %r11d + 0x41, 0x69, 0xcb, 0xb1, 0x6c, 0xe5, 0xff, //0x000087fb imull $-1741647, %r11d, %ecx + 0xc1, 0xe9, 0x13, //0x00008802 shrl $19, %ecx + 0x44, 0x01, 0xf9, //0x00008805 addl %r15d, %ecx + 0xba, 0x1f, 0x00, 0x00, 0x00, //0x00008808 movl $31, %edx + 0x44, 0x29, 0xda, //0x0000880d subl %r11d, %edx + 0x48, 0x63, 0xd2, //0x00008810 movslq %edx, %rdx + 0x48, 0x8d, 0x1d, 0x06, 0xb7, 0x00, 0x00, //0x00008813 leaq $46854(%rip), %rbx /* _pow10_ceil_sig_f32.g+0(%rip) */ + 0xfe, 0xc1, //0x0000881a incb %cl + 0xd3, 0xe0, //0x0000881c shll %cl, %eax + 0x4c, 0x8b, 0x24, 0xd3, //0x0000881e movq (%rbx,%rdx,8), %r12 + 0x49, 0xf7, 0xe4, //0x00008822 mulq %r12 + 0x48, 0xc1, 0xe8, 0x20, //0x00008825 shrq $32, %rax + 0x31, 0xdb, //0x00008829 xorl %ebx, %ebx + 0x83, 0xf8, 0x01, //0x0000882b cmpl $1, %eax + 0x0f, 0x97, 0xc3, //0x0000882e seta %bl + 0x41, 0xd3, 0xe2, //0x00008831 shll %cl, %r10d + 0x09, 0xd3, //0x00008834 orl %edx, %ebx + 0x4c, 0x89, 0xd0, //0x00008836 movq %r10, %rax + 0x49, 0xf7, 0xe4, //0x00008839 mulq %r12 + 0x49, 0x89, 0xd2, //0x0000883c movq %rdx, %r10 + 0x48, 0xc1, 0xe8, 0x20, //0x0000883f shrq $32, %rax + 0x45, 0x31, 0xff, //0x00008843 xorl %r15d, %r15d + 0x83, 0xf8, 0x01, //0x00008846 cmpl $1, %eax + 0x41, 0x0f, 0x97, 0xc7, //0x00008849 seta %r15b + 0x8d, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x00, //0x0000884d leal $2(,%rsi,4), %eax + 0xd3, 0xe0, //0x00008854 shll %cl, %eax + 0x45, 0x09, 0xd7, //0x00008856 orl %r10d, %r15d + 0x49, 0xf7, 0xe4, //0x00008859 mulq %r12 + 0x48, 0xc1, 0xe8, 0x20, //0x0000885c shrq $32, %rax + 0x31, 0xc9, //0x00008860 xorl %ecx, %ecx + 0x83, 0xf8, 0x01, //0x00008862 cmpl $1, %eax + 0x0f, 0x97, 0xc1, //0x00008865 seta %cl + 0x09, 0xd1, //0x00008868 orl %edx, %ecx + 0x44, 0x01, 0xf3, //0x0000886a addl %r14d, %ebx + 0x44, 0x29, 0xf1, //0x0000886d subl %r14d, %ecx + 0x41, 0x83, 0xff, 0x28, //0x00008870 cmpl $40, %r15d + 0x0f, 0x82, 0x9a, 0x00, 0x00, 0x00, //0x00008874 jb LBB32_12 + 0x44, 0x89, 0xd2, //0x0000887a movl %r10d, %edx + 0xb8, 0xcd, 0xcc, 0xcc, 0xcc, //0x0000887d movl $3435973837, %eax + 0x48, 0x0f, 0xaf, 0xc2, //0x00008882 imulq %rdx, %rax + 0x48, 0xc1, 0xe8, 0x25, //0x00008886 shrq $37, %rax + 0x41, 0x89, 0xde, //0x0000888a movl %ebx, %r14d + 0x48, 0x8d, 0x34, 0xc5, 0x00, 0x00, 0x00, 0x00, //0x0000888d leaq (,%rax,8), %rsi + 0x48, 0x8d, 0x14, 0xb6, //0x00008895 leaq (%rsi,%rsi,4), %rdx + 0x4c, 0x39, 0xf2, //0x00008899 cmpq %r14, %rdx + 0x41, 0x0f, 0x93, 0xc4, //0x0000889c setae %r12b + 0x4c, 0x8d, 0x74, 0xb6, 0x28, //0x000088a0 leaq $40(%rsi,%rsi,4), %r14 + 0x89, 0xce, //0x000088a5 movl %ecx, %esi + 0x49, 0x39, 0xf6, //0x000088a7 cmpq %rsi, %r14 + 0x0f, 0x96, 0xc2, //0x000088aa setbe %dl + 0x41, 0x38, 0xd4, //0x000088ad cmpb %dl, %r12b + 0x0f, 0x84, 0x5e, 0x00, 0x00, 0x00, //0x000088b0 je LBB32_12 + 0x45, 0x31, 0xed, //0x000088b6 xorl %r13d, %r13d + 0x49, 0x39, 0xf6, //0x000088b9 cmpq %rsi, %r14 + 0x41, 0x0f, 0x96, 0xc5, //0x000088bc setbe %r13b + 0x41, 0x01, 0xc5, //0x000088c0 addl %eax, %r13d + 0x41, 0xff, 0xc3, //0x000088c3 incl %r11d + 0x41, 0x81, 0xfd, 0xa0, 0x86, 0x01, 0x00, //0x000088c6 cmpl $100000, %r13d + 0x0f, 0x83, 0xb0, 0x00, 0x00, 0x00, //0x000088cd jae LBB32_18 + //0x000088d3 LBB32_8 + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000088d3 movl $1, %eax + 0x41, 0x83, 0xfd, 0x0a, //0x000088d8 cmpl $10, %r13d + 0x0f, 0x82, 0xd4, 0x00, 0x00, 0x00, //0x000088dc jb LBB32_22 + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000088e2 movl $2, %eax + 0x41, 0x83, 0xfd, 0x64, //0x000088e7 cmpl $100, %r13d + 0x0f, 0x82, 0xc5, 0x00, 0x00, 0x00, //0x000088eb jb LBB32_22 + 0xb8, 0x03, 0x00, 0x00, 0x00, //0x000088f1 movl $3, %eax + 0x41, 0x81, 0xfd, 0xe8, 0x03, 0x00, 0x00, //0x000088f6 cmpl $1000, %r13d + 0x0f, 0x82, 0xb3, 0x00, 0x00, 0x00, //0x000088fd jb LBB32_22 + 0x41, 0x81, 0xfd, 0x10, 0x27, 0x00, 0x00, //0x00008903 cmpl $10000, %r13d + 0xb8, 0x05, 0x00, 0x00, 0x00, //0x0000890a movl $5, %eax + 0xe9, 0x9f, 0x00, 0x00, 0x00, //0x0000890f jmp LBB32_21 + //0x00008914 LBB32_12 + 0x4d, 0x89, 0xd6, //0x00008914 movq %r10, %r14 + 0x49, 0xc1, 0xee, 0x02, //0x00008917 shrq $2, %r14 + 0x44, 0x89, 0xd6, //0x0000891b movl %r10d, %esi + 0x83, 0xe6, 0xfc, //0x0000891e andl $-4, %esi + 0x39, 0xf3, //0x00008921 cmpl %esi, %ebx + 0x0f, 0x96, 0xc2, //0x00008923 setbe %dl + 0x8d, 0x5e, 0x04, //0x00008926 leal $4(%rsi), %ebx + 0x39, 0xcb, //0x00008929 cmpl %ecx, %ebx + 0x0f, 0x96, 0xc0, //0x0000892b setbe %al + 0x38, 0xc2, //0x0000892e cmpb %al, %dl + 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x00008930 je LBB32_15 + 0x45, 0x31, 0xed, //0x00008936 xorl %r13d, %r13d + 0x39, 0xcb, //0x00008939 cmpl %ecx, %ebx + 0x41, 0x0f, 0x96, 0xc5, //0x0000893b setbe %r13b + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x0000893f jmp LBB32_17 + //0x00008944 LBB32_14 + 0x41, 0xc6, 0x00, 0x30, //0x00008944 movb $48, (%r8) + 0x41, 0x29, 0xf8, //0x00008948 subl %edi, %r8d + 0x41, 0xff, 0xc0, //0x0000894b incl %r8d + 0xe9, 0x00, 0x0b, 0x00, 0x00, //0x0000894e jmp LBB32_138 + //0x00008953 LBB32_15 + 0x83, 0xce, 0x02, //0x00008953 orl $2, %esi + 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x00008956 movl $1, %r13d + 0x41, 0x39, 0xf7, //0x0000895c cmpl %esi, %r15d + 0x0f, 0x87, 0x0e, 0x00, 0x00, 0x00, //0x0000895f ja LBB32_17 + 0x0f, 0x94, 0xc0, //0x00008965 sete %al + 0x41, 0xc0, 0xea, 0x02, //0x00008968 shrb $2, %r10b + 0x41, 0x20, 0xc2, //0x0000896c andb %al, %r10b + 0x45, 0x0f, 0xb6, 0xea, //0x0000896f movzbl %r10b, %r13d + //0x00008973 LBB32_17 + 0x45, 0x01, 0xf5, //0x00008973 addl %r14d, %r13d + 0x41, 0x81, 0xfd, 0xa0, 0x86, 0x01, 0x00, //0x00008976 cmpl $100000, %r13d + 0x0f, 0x82, 0x50, 0xff, 0xff, 0xff, //0x0000897d jb LBB32_8 + //0x00008983 LBB32_18 + 0xb8, 0x06, 0x00, 0x00, 0x00, //0x00008983 movl $6, %eax + 0x41, 0x81, 0xfd, 0x40, 0x42, 0x0f, 0x00, //0x00008988 cmpl $1000000, %r13d + 0x0f, 0x82, 0x21, 0x00, 0x00, 0x00, //0x0000898f jb LBB32_22 + 0xb8, 0x07, 0x00, 0x00, 0x00, //0x00008995 movl $7, %eax + 0x41, 0x81, 0xfd, 0x80, 0x96, 0x98, 0x00, //0x0000899a cmpl $10000000, %r13d + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x000089a1 jb LBB32_22 + 0x41, 0x81, 0xfd, 0x00, 0xe1, 0xf5, 0x05, //0x000089a7 cmpl $100000000, %r13d + 0xb8, 0x09, 0x00, 0x00, 0x00, //0x000089ae movl $9, %eax + //0x000089b3 LBB32_21 + 0x83, 0xd8, 0x00, //0x000089b3 sbbl $0, %eax + //0x000089b6 LBB32_22 + 0x46, 0x8d, 0x3c, 0x18, //0x000089b6 leal (%rax,%r11), %r15d + 0x42, 0x8d, 0x4c, 0x18, 0x05, //0x000089ba leal $5(%rax,%r11), %ecx + 0x83, 0xf9, 0x1b, //0x000089bf cmpl $27, %ecx + 0x0f, 0x82, 0x77, 0x00, 0x00, 0x00, //0x000089c2 jb LBB32_26 + 0x89, 0xc0, //0x000089c8 movl %eax, %eax + 0x49, 0x8d, 0x5c, 0x00, 0x01, //0x000089ca leaq $1(%r8,%rax), %rbx + 0x41, 0x81, 0xfd, 0x10, 0x27, 0x00, 0x00, //0x000089cf cmpl $10000, %r13d + 0x0f, 0x82, 0xd9, 0x00, 0x00, 0x00, //0x000089d6 jb LBB32_30 + 0x44, 0x89, 0xe8, //0x000089dc movl %r13d, %eax + 0x41, 0xbb, 0x59, 0x17, 0xb7, 0xd1, //0x000089df movl $3518437209, %r11d + 0x4c, 0x0f, 0xaf, 0xd8, //0x000089e5 imulq %rax, %r11 + 0x49, 0xc1, 0xeb, 0x2d, //0x000089e9 shrq $45, %r11 + 0x41, 0x69, 0xc3, 0xf0, 0xd8, 0xff, 0xff, //0x000089ed imull $-10000, %r11d, %eax + 0x44, 0x01, 0xe8, //0x000089f4 addl %r13d, %eax + 0x0f, 0x84, 0xb3, 0x04, 0x00, 0x00, //0x000089f7 je LBB32_62 + 0x89, 0xc1, //0x000089fd movl %eax, %ecx + 0x48, 0x69, 0xc9, 0x1f, 0x85, 0xeb, 0x51, //0x000089ff imulq $1374389535, %rcx, %rcx + 0x48, 0xc1, 0xe9, 0x25, //0x00008a06 shrq $37, %rcx + 0x6b, 0xd1, 0x64, //0x00008a0a imull $100, %ecx, %edx + 0x29, 0xd0, //0x00008a0d subl %edx, %eax + 0x48, 0x8d, 0x15, 0x8a, 0x41, 0x00, 0x00, //0x00008a0f leaq $16778(%rip), %rdx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x42, //0x00008a16 movzwl (%rdx,%rax,2), %eax + 0x66, 0x89, 0x43, 0xfe, //0x00008a1a movw %ax, $-2(%rbx) + 0x0f, 0xb7, 0x04, 0x4a, //0x00008a1e movzwl (%rdx,%rcx,2), %eax + 0x66, 0x89, 0x43, 0xfc, //0x00008a22 movw %ax, $-4(%rbx) + 0x45, 0x31, 0xc9, //0x00008a26 xorl %r9d, %r9d + 0x48, 0x8d, 0x4b, 0xfc, //0x00008a29 leaq $-4(%rbx), %rcx + 0x41, 0x83, 0xfb, 0x64, //0x00008a2d cmpl $100, %r11d + 0x0f, 0x83, 0x91, 0x00, 0x00, 0x00, //0x00008a31 jae LBB32_64 + //0x00008a37 LBB32_31 + 0x44, 0x89, 0xda, //0x00008a37 movl %r11d, %edx + 0xe9, 0xd4, 0x00, 0x00, 0x00, //0x00008a3a jmp LBB32_66 + //0x00008a3f LBB32_26 + 0x41, 0x89, 0xc4, //0x00008a3f movl %eax, %r12d + 0x45, 0x85, 0xdb, //0x00008a42 testl %r11d, %r11d + 0x0f, 0x88, 0x1d, 0x02, 0x00, 0x00, //0x00008a45 js LBB32_38 + 0x4b, 0x8d, 0x34, 0x20, //0x00008a4b leaq (%r8,%r12), %rsi + 0x41, 0x81, 0xfd, 0x10, 0x27, 0x00, 0x00, //0x00008a4f cmpl $10000, %r13d + 0x0f, 0x82, 0xa7, 0x02, 0x00, 0x00, //0x00008a56 jb LBB32_43 + 0x44, 0x89, 0xe8, //0x00008a5c movl %r13d, %eax + 0xb9, 0x59, 0x17, 0xb7, 0xd1, //0x00008a5f movl $3518437209, %ecx + 0x48, 0x0f, 0xaf, 0xc8, //0x00008a64 imulq %rax, %rcx + 0x48, 0xc1, 0xe9, 0x2d, //0x00008a68 shrq $45, %rcx + 0x69, 0xc1, 0xf0, 0xd8, 0xff, 0xff, //0x00008a6c imull $-10000, %ecx, %eax + 0x44, 0x01, 0xe8, //0x00008a72 addl %r13d, %eax + 0x48, 0x69, 0xd0, 0x1f, 0x85, 0xeb, 0x51, //0x00008a75 imulq $1374389535, %rax, %rdx + 0x48, 0xc1, 0xea, 0x25, //0x00008a7c shrq $37, %rdx + 0x6b, 0xda, 0x64, //0x00008a80 imull $100, %edx, %ebx + 0x29, 0xd8, //0x00008a83 subl %ebx, %eax + 0x48, 0x8d, 0x1d, 0x14, 0x41, 0x00, 0x00, //0x00008a85 leaq $16660(%rip), %rbx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x43, //0x00008a8c movzwl (%rbx,%rax,2), %eax + 0x66, 0x89, 0x46, 0xfe, //0x00008a90 movw %ax, $-2(%rsi) + 0x48, 0x8d, 0x46, 0xfc, //0x00008a94 leaq $-4(%rsi), %rax + 0x0f, 0xb7, 0x14, 0x53, //0x00008a98 movzwl (%rbx,%rdx,2), %edx + 0x66, 0x89, 0x56, 0xfc, //0x00008a9c movw %dx, $-4(%rsi) + 0x41, 0x89, 0xcd, //0x00008aa0 movl %ecx, %r13d + 0x41, 0x83, 0xfd, 0x64, //0x00008aa3 cmpl $100, %r13d + 0x0f, 0x83, 0x63, 0x02, 0x00, 0x00, //0x00008aa7 jae LBB32_44 + //0x00008aad LBB32_29 + 0x44, 0x89, 0xe9, //0x00008aad movl %r13d, %ecx + 0xe9, 0x9e, 0x02, 0x00, 0x00, //0x00008ab0 jmp LBB32_46 + //0x00008ab5 LBB32_30 + 0x45, 0x31, 0xc9, //0x00008ab5 xorl %r9d, %r9d + 0x48, 0x89, 0xd9, //0x00008ab8 movq %rbx, %rcx + 0x45, 0x89, 0xeb, //0x00008abb movl %r13d, %r11d + 0x41, 0x83, 0xfb, 0x64, //0x00008abe cmpl $100, %r11d + 0x0f, 0x82, 0x6f, 0xff, 0xff, 0xff, //0x00008ac2 jb LBB32_31 + //0x00008ac8 LBB32_64 + 0x48, 0xff, 0xc9, //0x00008ac8 decq %rcx + 0x4c, 0x8d, 0x15, 0xce, 0x40, 0x00, 0x00, //0x00008acb leaq $16590(%rip), %r10 /* _Digits+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008ad2 .p2align 4, 0x90 + //0x00008ae0 LBB32_65 + 0x44, 0x89, 0xda, //0x00008ae0 movl %r11d, %edx + 0x48, 0x69, 0xd2, 0x1f, 0x85, 0xeb, 0x51, //0x00008ae3 imulq $1374389535, %rdx, %rdx + 0x48, 0xc1, 0xea, 0x25, //0x00008aea shrq $37, %rdx + 0x6b, 0xc2, 0x64, //0x00008aee imull $100, %edx, %eax + 0x44, 0x89, 0xde, //0x00008af1 movl %r11d, %esi + 0x29, 0xc6, //0x00008af4 subl %eax, %esi + 0x41, 0x0f, 0xb7, 0x04, 0x72, //0x00008af6 movzwl (%r10,%rsi,2), %eax + 0x66, 0x89, 0x41, 0xff, //0x00008afb movw %ax, $-1(%rcx) + 0x48, 0x83, 0xc1, 0xfe, //0x00008aff addq $-2, %rcx + 0x41, 0x81, 0xfb, 0x0f, 0x27, 0x00, 0x00, //0x00008b03 cmpl $9999, %r11d + 0x41, 0x89, 0xd3, //0x00008b0a movl %edx, %r11d + 0x0f, 0x87, 0xcd, 0xff, 0xff, 0xff, //0x00008b0d ja LBB32_65 + //0x00008b13 LBB32_66 + 0x49, 0x8d, 0x70, 0x01, //0x00008b13 leaq $1(%r8), %rsi + 0x83, 0xfa, 0x0a, //0x00008b17 cmpl $10, %edx + 0x0f, 0x82, 0x1d, 0x00, 0x00, 0x00, //0x00008b1a jb LBB32_68 + 0x89, 0xd0, //0x00008b20 movl %edx, %eax + 0x48, 0x8d, 0x0d, 0x77, 0x40, 0x00, 0x00, //0x00008b22 leaq $16503(%rip), %rcx /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x41, //0x00008b29 movb (%rcx,%rax,2), %dl + 0x8a, 0x44, 0x41, 0x01, //0x00008b2c movb $1(%rcx,%rax,2), %al + 0x41, 0x88, 0x50, 0x01, //0x00008b30 movb %dl, $1(%r8) + 0x41, 0x88, 0x40, 0x02, //0x00008b34 movb %al, $2(%r8) + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00008b38 jmp LBB32_69 + //0x00008b3d LBB32_68 + 0x80, 0xc2, 0x30, //0x00008b3d addb $48, %dl + 0x88, 0x16, //0x00008b40 movb %dl, (%rsi) + //0x00008b42 LBB32_69 + 0x4c, 0x29, 0xcb, //0x00008b42 subq %r9, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008b45 .p2align 4, 0x90 + //0x00008b50 LBB32_70 + 0x80, 0x7b, 0xff, 0x30, //0x00008b50 cmpb $48, $-1(%rbx) + 0x48, 0x8d, 0x5b, 0xff, //0x00008b54 leaq $-1(%rbx), %rbx + 0x0f, 0x84, 0xf2, 0xff, 0xff, 0xff, //0x00008b58 je LBB32_70 + 0x41, 0x88, 0x10, //0x00008b5e movb %dl, (%r8) + 0x48, 0x8d, 0x43, 0x01, //0x00008b61 leaq $1(%rbx), %rax + 0x48, 0x89, 0xc1, //0x00008b65 movq %rax, %rcx + 0x48, 0x29, 0xf1, //0x00008b68 subq %rsi, %rcx + 0x48, 0x83, 0xf9, 0x02, //0x00008b6b cmpq $2, %rcx + 0x0f, 0x8c, 0x06, 0x00, 0x00, 0x00, //0x00008b6f jl LBB32_73 + 0xc6, 0x06, 0x2e, //0x00008b75 movb $46, (%rsi) + 0x48, 0x89, 0xc3, //0x00008b78 movq %rax, %rbx + //0x00008b7b LBB32_73 + 0xc6, 0x03, 0x65, //0x00008b7b movb $101, (%rbx) + 0x45, 0x85, 0xff, //0x00008b7e testl %r15d, %r15d + 0x0f, 0x8e, 0x41, 0x01, 0x00, 0x00, //0x00008b81 jle LBB32_76 + 0x41, 0xff, 0xcf, //0x00008b87 decl %r15d + 0xc6, 0x43, 0x01, 0x2b, //0x00008b8a movb $43, $1(%rbx) + 0x44, 0x89, 0xf8, //0x00008b8e movl %r15d, %eax + 0x83, 0xf8, 0x64, //0x00008b91 cmpl $100, %eax + 0x0f, 0x8c, 0x43, 0x01, 0x00, 0x00, //0x00008b94 jl LBB32_77 + //0x00008b9a LBB32_75 + 0x89, 0xc1, //0x00008b9a movl %eax, %ecx + 0xba, 0xcd, 0xcc, 0xcc, 0xcc, //0x00008b9c movl $3435973837, %edx + 0x48, 0x0f, 0xaf, 0xd1, //0x00008ba1 imulq %rcx, %rdx + 0x48, 0xc1, 0xea, 0x23, //0x00008ba5 shrq $35, %rdx + 0x8d, 0x0c, 0x12, //0x00008ba9 leal (%rdx,%rdx), %ecx + 0x8d, 0x0c, 0x89, //0x00008bac leal (%rcx,%rcx,4), %ecx + 0x29, 0xc8, //0x00008baf subl %ecx, %eax + 0x48, 0x8d, 0x0d, 0xe8, 0x3f, 0x00, 0x00, //0x00008bb1 leaq $16360(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x51, //0x00008bb8 movzwl (%rcx,%rdx,2), %ecx + 0x66, 0x89, 0x4b, 0x02, //0x00008bbc movw %cx, $2(%rbx) + 0x0c, 0x30, //0x00008bc0 orb $48, %al + 0x88, 0x43, 0x04, //0x00008bc2 movb %al, $4(%rbx) + 0x48, 0x83, 0xc3, 0x05, //0x00008bc5 addq $5, %rbx + 0x49, 0x89, 0xd8, //0x00008bc9 movq %rbx, %r8 + 0xe9, 0x7f, 0x08, 0x00, 0x00, //0x00008bcc jmp LBB32_137 + //0x00008bd1 LBB32_32 + 0xd3, 0xee, //0x00008bd1 shrl %cl, %esi + 0x81, 0xfe, 0xa0, 0x86, 0x01, 0x00, //0x00008bd3 cmpl $100000, %esi + 0x0f, 0x82, 0x1a, 0x02, 0x00, 0x00, //0x00008bd9 jb LBB32_52 + 0xb8, 0x06, 0x00, 0x00, 0x00, //0x00008bdf movl $6, %eax + 0x81, 0xfe, 0x40, 0x42, 0x0f, 0x00, //0x00008be4 cmpl $1000000, %esi + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x00008bea jb LBB32_36 + 0xb8, 0x07, 0x00, 0x00, 0x00, //0x00008bf0 movl $7, %eax + 0x81, 0xfe, 0x80, 0x96, 0x98, 0x00, //0x00008bf5 cmpl $10000000, %esi + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x00008bfb jb LBB32_36 + 0x81, 0xfe, 0x00, 0xe1, 0xf5, 0x05, //0x00008c01 cmpl $100000000, %esi + 0xb8, 0x09, 0x00, 0x00, 0x00, //0x00008c07 movl $9, %eax + 0x48, 0x83, 0xd8, 0x00, //0x00008c0c sbbq $0, %rax + //0x00008c10 LBB32_36 + 0x4c, 0x01, 0xc0, //0x00008c10 addq %r8, %rax + //0x00008c13 LBB32_37 + 0x89, 0xf1, //0x00008c13 movl %esi, %ecx + 0xba, 0x59, 0x17, 0xb7, 0xd1, //0x00008c15 movl $3518437209, %edx + 0x48, 0x0f, 0xaf, 0xd1, //0x00008c1a imulq %rcx, %rdx + 0x48, 0xc1, 0xea, 0x2d, //0x00008c1e shrq $45, %rdx + 0x69, 0xca, 0xf0, 0xd8, 0xff, 0xff, //0x00008c22 imull $-10000, %edx, %ecx + 0x01, 0xf1, //0x00008c28 addl %esi, %ecx + 0x48, 0x69, 0xf1, 0x1f, 0x85, 0xeb, 0x51, //0x00008c2a imulq $1374389535, %rcx, %rsi + 0x48, 0xc1, 0xee, 0x25, //0x00008c31 shrq $37, %rsi + 0x6b, 0xde, 0x64, //0x00008c35 imull $100, %esi, %ebx + 0x29, 0xd9, //0x00008c38 subl %ebx, %ecx + 0x48, 0x8d, 0x1d, 0x5f, 0x3f, 0x00, 0x00, //0x00008c3a leaq $16223(%rip), %rbx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4b, //0x00008c41 movzwl (%rbx,%rcx,2), %ecx + 0x66, 0x89, 0x48, 0xfe, //0x00008c45 movw %cx, $-2(%rax) + 0x0f, 0xb7, 0x0c, 0x73, //0x00008c49 movzwl (%rbx,%rsi,2), %ecx + 0x66, 0x89, 0x48, 0xfc, //0x00008c4d movw %cx, $-4(%rax) + 0x49, 0x89, 0xc1, //0x00008c51 movq %rax, %r9 + 0x48, 0x83, 0xc0, 0xfc, //0x00008c54 addq $-4, %rax + 0x89, 0xd6, //0x00008c58 movl %edx, %esi + 0x83, 0xfe, 0x64, //0x00008c5a cmpl $100, %esi + 0x0f, 0x83, 0xd5, 0x01, 0x00, 0x00, //0x00008c5d jae LBB32_56 + 0xe9, 0x17, 0x02, 0x00, 0x00, //0x00008c63 jmp LBB32_58 + //0x00008c68 LBB32_38 + 0x45, 0x85, 0xff, //0x00008c68 testl %r15d, %r15d + 0x0f, 0x8f, 0x90, 0x04, 0x00, 0x00, //0x00008c6b jg LBB32_98 + 0x66, 0x41, 0xc7, 0x00, 0x30, 0x2e, //0x00008c71 movw $11824, (%r8) + 0x49, 0x83, 0xc0, 0x02, //0x00008c77 addq $2, %r8 + 0x45, 0x85, 0xff, //0x00008c7b testl %r15d, %r15d + 0x0f, 0x89, 0x7d, 0x04, 0x00, 0x00, //0x00008c7e jns LBB32_98 + 0x31, 0xf6, //0x00008c84 xorl %esi, %esi + 0x41, 0x83, 0xff, 0x80, //0x00008c86 cmpl $-128, %r15d + 0x0f, 0x87, 0x5a, 0x04, 0x00, 0x00, //0x00008c8a ja LBB32_96 + 0x45, 0x89, 0xfa, //0x00008c90 movl %r15d, %r10d + 0x41, 0xf7, 0xd2, //0x00008c93 notl %r10d + 0x49, 0xff, 0xc2, //0x00008c96 incq %r10 + 0x4c, 0x89, 0xd6, //0x00008c99 movq %r10, %rsi + 0x48, 0x83, 0xe6, 0x80, //0x00008c9c andq $-128, %rsi + 0x48, 0x8d, 0x46, 0x80, //0x00008ca0 leaq $-128(%rsi), %rax + 0x48, 0x89, 0xc1, //0x00008ca4 movq %rax, %rcx + 0x48, 0xc1, 0xe9, 0x07, //0x00008ca7 shrq $7, %rcx + 0x48, 0xff, 0xc1, //0x00008cab incq %rcx + 0x41, 0x89, 0xcb, //0x00008cae movl %ecx, %r11d + 0x41, 0x83, 0xe3, 0x03, //0x00008cb1 andl $3, %r11d + 0x48, 0x3d, 0x80, 0x01, 0x00, 0x00, //0x00008cb5 cmpq $384, %rax + 0x0f, 0x83, 0x38, 0x03, 0x00, 0x00, //0x00008cbb jae LBB32_90 + 0x31, 0xdb, //0x00008cc1 xorl %ebx, %ebx + 0xe9, 0xda, 0x03, 0x00, 0x00, //0x00008cc3 jmp LBB32_92 + //0x00008cc8 LBB32_76 + 0xc6, 0x43, 0x01, 0x2d, //0x00008cc8 movb $45, $1(%rbx) + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00008ccc movl $1, %eax + 0x44, 0x29, 0xf8, //0x00008cd1 subl %r15d, %eax + 0x83, 0xf8, 0x64, //0x00008cd4 cmpl $100, %eax + 0x0f, 0x8d, 0xbd, 0xfe, 0xff, 0xff, //0x00008cd7 jge LBB32_75 + //0x00008cdd LBB32_77 + 0x83, 0xf8, 0x0a, //0x00008cdd cmpl $10, %eax + 0x0f, 0x8c, 0x02, 0x01, 0x00, 0x00, //0x00008ce0 jl LBB32_79 + 0x48, 0x98, //0x00008ce6 cltq + 0x48, 0x8d, 0x0d, 0xb1, 0x3e, 0x00, 0x00, //0x00008ce8 leaq $16049(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x00008cef movzwl (%rcx,%rax,2), %eax + 0x66, 0x89, 0x43, 0x02, //0x00008cf3 movw %ax, $2(%rbx) + 0x48, 0x83, 0xc3, 0x04, //0x00008cf7 addq $4, %rbx + 0x49, 0x89, 0xd8, //0x00008cfb movq %rbx, %r8 + 0xe9, 0x4d, 0x07, 0x00, 0x00, //0x00008cfe jmp LBB32_137 + //0x00008d03 LBB32_43 + 0x48, 0x89, 0xf0, //0x00008d03 movq %rsi, %rax + 0x41, 0x83, 0xfd, 0x64, //0x00008d06 cmpl $100, %r13d + 0x0f, 0x82, 0x9d, 0xfd, 0xff, 0xff, //0x00008d0a jb LBB32_29 + //0x00008d10 LBB32_44 + 0x48, 0xff, 0xc8, //0x00008d10 decq %rax + 0x4c, 0x8d, 0x15, 0x86, 0x3e, 0x00, 0x00, //0x00008d13 leaq $16006(%rip), %r10 /* _Digits+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008d1a .p2align 4, 0x90 + //0x00008d20 LBB32_45 + 0x44, 0x89, 0xe9, //0x00008d20 movl %r13d, %ecx + 0x48, 0x69, 0xc9, 0x1f, 0x85, 0xeb, 0x51, //0x00008d23 imulq $1374389535, %rcx, %rcx + 0x48, 0xc1, 0xe9, 0x25, //0x00008d2a shrq $37, %rcx + 0x6b, 0xd9, 0x64, //0x00008d2e imull $100, %ecx, %ebx + 0x44, 0x89, 0xea, //0x00008d31 movl %r13d, %edx + 0x29, 0xda, //0x00008d34 subl %ebx, %edx + 0x41, 0x0f, 0xb7, 0x14, 0x52, //0x00008d36 movzwl (%r10,%rdx,2), %edx + 0x66, 0x89, 0x50, 0xff, //0x00008d3b movw %dx, $-1(%rax) + 0x48, 0x83, 0xc0, 0xfe, //0x00008d3f addq $-2, %rax + 0x41, 0x81, 0xfd, 0x0f, 0x27, 0x00, 0x00, //0x00008d43 cmpl $9999, %r13d + 0x41, 0x89, 0xcd, //0x00008d4a movl %ecx, %r13d + 0x0f, 0x87, 0xcd, 0xff, 0xff, 0xff, //0x00008d4d ja LBB32_45 + //0x00008d53 LBB32_46 + 0x49, 0x63, 0xc7, //0x00008d53 movslq %r15d, %rax + 0x83, 0xf9, 0x0a, //0x00008d56 cmpl $10, %ecx + 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x00008d59 jb LBB32_48 + 0x89, 0xc9, //0x00008d5f movl %ecx, %ecx + 0x48, 0x8d, 0x15, 0x38, 0x3e, 0x00, 0x00, //0x00008d61 leaq $15928(%rip), %rdx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4a, //0x00008d68 movzwl (%rdx,%rcx,2), %ecx + 0x66, 0x41, 0x89, 0x08, //0x00008d6c movw %cx, (%r8) + 0x49, 0x01, 0xc0, //0x00008d70 addq %rax, %r8 + 0x49, 0x39, 0xc4, //0x00008d73 cmpq %rax, %r12 + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x00008d76 jl LBB32_49 + 0xe9, 0xcf, 0x06, 0x00, 0x00, //0x00008d7c jmp LBB32_137 + //0x00008d81 LBB32_48 + 0x80, 0xc1, 0x30, //0x00008d81 addb $48, %cl + 0x41, 0x88, 0x08, //0x00008d84 movb %cl, (%r8) + 0x49, 0x01, 0xc0, //0x00008d87 addq %rax, %r8 + 0x49, 0x39, 0xc4, //0x00008d8a cmpq %rax, %r12 + 0x0f, 0x8d, 0xbd, 0x06, 0x00, 0x00, //0x00008d8d jge LBB32_137 + //0x00008d93 LBB32_49 + 0x4b, 0x8d, 0x04, 0x21, //0x00008d93 leaq (%r9,%r12), %rax + 0x4c, 0x8d, 0x5c, 0x07, 0x01, //0x00008d97 leaq $1(%rdi,%rax), %r11 + 0x4d, 0x39, 0xc3, //0x00008d9c cmpq %r8, %r11 + 0x4d, 0x0f, 0x46, 0xd8, //0x00008d9f cmovbeq %r8, %r11 + 0x4a, 0x8d, 0x0c, 0x0f, //0x00008da3 leaq (%rdi,%r9), %rcx + 0x4c, 0x01, 0xe1, //0x00008da7 addq %r12, %rcx + 0x49, 0x29, 0xcb, //0x00008daa subq %rcx, %r11 + 0x49, 0x81, 0xfb, 0x80, 0x00, 0x00, 0x00, //0x00008dad cmpq $128, %r11 + 0x0f, 0x82, 0x06, 0x02, 0x00, 0x00, //0x00008db4 jb LBB32_87 + 0x4d, 0x89, 0xda, //0x00008dba movq %r11, %r10 + 0x49, 0x83, 0xe2, 0x80, //0x00008dbd andq $-128, %r10 + 0x49, 0x8d, 0x4a, 0x80, //0x00008dc1 leaq $-128(%r10), %rcx + 0x48, 0x89, 0xcb, //0x00008dc5 movq %rcx, %rbx + 0x48, 0xc1, 0xeb, 0x07, //0x00008dc8 shrq $7, %rbx + 0x48, 0xff, 0xc3, //0x00008dcc incq %rbx + 0x89, 0xda, //0x00008dcf movl %ebx, %edx + 0x83, 0xe2, 0x03, //0x00008dd1 andl $3, %edx + 0x48, 0x81, 0xf9, 0x80, 0x01, 0x00, 0x00, //0x00008dd4 cmpq $384, %rcx + 0x0f, 0x83, 0xe8, 0x00, 0x00, 0x00, //0x00008ddb jae LBB32_80 + 0x31, 0xc0, //0x00008de1 xorl %eax, %eax + 0xe9, 0x88, 0x01, 0x00, 0x00, //0x00008de3 jmp LBB32_82 + //0x00008de8 LBB32_79 + 0x04, 0x30, //0x00008de8 addb $48, %al + 0x88, 0x43, 0x02, //0x00008dea movb %al, $2(%rbx) + 0x48, 0x83, 0xc3, 0x03, //0x00008ded addq $3, %rbx + 0x49, 0x89, 0xd8, //0x00008df1 movq %rbx, %r8 + 0xe9, 0x57, 0x06, 0x00, 0x00, //0x00008df4 jmp LBB32_137 + //0x00008df9 LBB32_52 + 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00008df9 movl $1, %r9d + 0x83, 0xfe, 0x0a, //0x00008dff cmpl $10, %esi + 0x0f, 0x82, 0x21, 0x00, 0x00, 0x00, //0x00008e02 jb LBB32_55 + 0x41, 0xb9, 0x02, 0x00, 0x00, 0x00, //0x00008e08 movl $2, %r9d + 0x83, 0xfe, 0x64, //0x00008e0e cmpl $100, %esi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00008e11 jb LBB32_55 + 0x41, 0xb9, 0x03, 0x00, 0x00, 0x00, //0x00008e17 movl $3, %r9d + 0x81, 0xfe, 0xe8, 0x03, 0x00, 0x00, //0x00008e1d cmpl $1000, %esi + 0x0f, 0x83, 0xab, 0x01, 0x00, 0x00, //0x00008e23 jae LBB32_88 + //0x00008e29 LBB32_55 + 0x4d, 0x01, 0xc1, //0x00008e29 addq %r8, %r9 + 0x4c, 0x89, 0xc8, //0x00008e2c movq %r9, %rax + 0x83, 0xfe, 0x64, //0x00008e2f cmpl $100, %esi + 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00008e32 jb LBB32_58 + //0x00008e38 LBB32_56 + 0x48, 0xff, 0xc8, //0x00008e38 decq %rax + 0x4c, 0x8d, 0x15, 0x5e, 0x3d, 0x00, 0x00, //0x00008e3b leaq $15710(%rip), %r10 /* _Digits+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008e42 .p2align 4, 0x90 + //0x00008e50 LBB32_57 + 0x89, 0xf3, //0x00008e50 movl %esi, %ebx + 0x89, 0xf6, //0x00008e52 movl %esi, %esi + 0x48, 0x69, 0xf6, 0x1f, 0x85, 0xeb, 0x51, //0x00008e54 imulq $1374389535, %rsi, %rsi + 0x48, 0xc1, 0xee, 0x25, //0x00008e5b shrq $37, %rsi + 0x6b, 0xce, 0x64, //0x00008e5f imull $100, %esi, %ecx + 0x89, 0xda, //0x00008e62 movl %ebx, %edx + 0x29, 0xca, //0x00008e64 subl %ecx, %edx + 0x41, 0x0f, 0xb7, 0x0c, 0x52, //0x00008e66 movzwl (%r10,%rdx,2), %ecx + 0x66, 0x89, 0x48, 0xff, //0x00008e6b movw %cx, $-1(%rax) + 0x48, 0x83, 0xc0, 0xfe, //0x00008e6f addq $-2, %rax + 0x81, 0xfb, 0x0f, 0x27, 0x00, 0x00, //0x00008e73 cmpl $9999, %ebx + 0x0f, 0x87, 0xd1, 0xff, 0xff, 0xff, //0x00008e79 ja LBB32_57 + //0x00008e7f LBB32_58 + 0x83, 0xfe, 0x0a, //0x00008e7f cmpl $10, %esi + 0x0f, 0x82, 0x16, 0x00, 0x00, 0x00, //0x00008e82 jb LBB32_60 + 0x89, 0xf0, //0x00008e88 movl %esi, %eax + 0x48, 0x8d, 0x0d, 0x0f, 0x3d, 0x00, 0x00, //0x00008e8a leaq $15631(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x00008e91 movzwl (%rcx,%rax,2), %eax + 0x66, 0x41, 0x89, 0x00, //0x00008e95 movw %ax, (%r8) + 0xe9, 0x07, 0x00, 0x00, 0x00, //0x00008e99 jmp LBB32_61 + //0x00008e9e LBB32_60 + 0x40, 0x80, 0xc6, 0x30, //0x00008e9e addb $48, %sil + 0x41, 0x88, 0x30, //0x00008ea2 movb %sil, (%r8) + //0x00008ea5 LBB32_61 + 0x41, 0x29, 0xf9, //0x00008ea5 subl %edi, %r9d + 0x45, 0x89, 0xc8, //0x00008ea8 movl %r9d, %r8d + 0xe9, 0xa3, 0x05, 0x00, 0x00, //0x00008eab jmp LBB32_138 + //0x00008eb0 LBB32_62 + 0x41, 0xb9, 0x04, 0x00, 0x00, 0x00, //0x00008eb0 movl $4, %r9d + 0x48, 0x8d, 0x4b, 0xfc, //0x00008eb6 leaq $-4(%rbx), %rcx + 0x41, 0x83, 0xfb, 0x64, //0x00008eba cmpl $100, %r11d + 0x0f, 0x82, 0x73, 0xfb, 0xff, 0xff, //0x00008ebe jb LBB32_31 + 0xe9, 0xff, 0xfb, 0xff, 0xff, //0x00008ec4 jmp LBB32_64 + //0x00008ec9 LBB32_80 + 0x48, 0x29, 0xd3, //0x00008ec9 subq %rdx, %rbx + 0x48, 0x8d, 0x8c, 0x07, 0xe0, 0x01, 0x00, 0x00, //0x00008ecc leaq $480(%rdi,%rax), %rcx + 0x31, 0xc0, //0x00008ed4 xorl %eax, %eax + 0xc5, 0xfd, 0x6f, 0x05, 0x42, 0xf8, 0xff, 0xff, //0x00008ed6 vmovdqa $-1982(%rip), %ymm0 /* LCPI32_0+0(%rip) */ + 0x90, 0x90, //0x00008ede .p2align 4, 0x90 + //0x00008ee0 LBB32_81 + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x20, 0xfe, 0xff, 0xff, //0x00008ee0 vmovdqu %ymm0, $-480(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x40, 0xfe, 0xff, 0xff, //0x00008ee9 vmovdqu %ymm0, $-448(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x60, 0xfe, 0xff, 0xff, //0x00008ef2 vmovdqu %ymm0, $-416(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x80, 0xfe, 0xff, 0xff, //0x00008efb vmovdqu %ymm0, $-384(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0xa0, 0xfe, 0xff, 0xff, //0x00008f04 vmovdqu %ymm0, $-352(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0xc0, 0xfe, 0xff, 0xff, //0x00008f0d vmovdqu %ymm0, $-320(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0xe0, 0xfe, 0xff, 0xff, //0x00008f16 vmovdqu %ymm0, $-288(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x00, 0xff, 0xff, 0xff, //0x00008f1f vmovdqu %ymm0, $-256(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x20, 0xff, 0xff, 0xff, //0x00008f28 vmovdqu %ymm0, $-224(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x40, 0xff, 0xff, 0xff, //0x00008f31 vmovdqu %ymm0, $-192(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x01, 0x60, 0xff, 0xff, 0xff, //0x00008f3a vmovdqu %ymm0, $-160(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x01, 0x80, //0x00008f43 vmovdqu %ymm0, $-128(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x01, 0xa0, //0x00008f49 vmovdqu %ymm0, $-96(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x01, 0xc0, //0x00008f4f vmovdqu %ymm0, $-64(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x01, 0xe0, //0x00008f55 vmovdqu %ymm0, $-32(%rcx,%rax) + 0xc5, 0xfe, 0x7f, 0x04, 0x01, //0x00008f5b vmovdqu %ymm0, (%rcx,%rax) + 0x48, 0x05, 0x00, 0x02, 0x00, 0x00, //0x00008f60 addq $512, %rax + 0x48, 0x83, 0xc3, 0xfc, //0x00008f66 addq $-4, %rbx + 0x0f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00008f6a jne LBB32_81 + //0x00008f70 LBB32_82 + 0x48, 0x85, 0xd2, //0x00008f70 testq %rdx, %rdx + 0x0f, 0x84, 0x37, 0x00, 0x00, 0x00, //0x00008f73 je LBB32_85 + 0x4c, 0x01, 0xc8, //0x00008f79 addq %r9, %rax + 0x4c, 0x01, 0xe0, //0x00008f7c addq %r12, %rax + 0x48, 0x8d, 0x44, 0x07, 0x60, //0x00008f7f leaq $96(%rdi,%rax), %rax + 0x48, 0xf7, 0xda, //0x00008f84 negq %rdx + 0xc5, 0xfd, 0x6f, 0x05, 0x91, 0xf7, 0xff, 0xff, //0x00008f87 vmovdqa $-2159(%rip), %ymm0 /* LCPI32_0+0(%rip) */ + 0x90, //0x00008f8f .p2align 4, 0x90 + //0x00008f90 LBB32_84 + 0xc5, 0xfe, 0x7f, 0x40, 0xa0, //0x00008f90 vmovdqu %ymm0, $-96(%rax) + 0xc5, 0xfe, 0x7f, 0x40, 0xc0, //0x00008f95 vmovdqu %ymm0, $-64(%rax) + 0xc5, 0xfe, 0x7f, 0x40, 0xe0, //0x00008f9a vmovdqu %ymm0, $-32(%rax) + 0xc5, 0xfe, 0x7f, 0x00, //0x00008f9f vmovdqu %ymm0, (%rax) + 0x48, 0x83, 0xe8, 0x80, //0x00008fa3 subq $-128, %rax + 0x48, 0xff, 0xc2, //0x00008fa7 incq %rdx + 0x0f, 0x85, 0xe0, 0xff, 0xff, 0xff, //0x00008faa jne LBB32_84 + //0x00008fb0 LBB32_85 + 0x4d, 0x39, 0xda, //0x00008fb0 cmpq %r11, %r10 + 0x0f, 0x84, 0x97, 0x04, 0x00, 0x00, //0x00008fb3 je LBB32_137 + 0x4c, 0x01, 0xd6, //0x00008fb9 addq %r10, %rsi + 0x90, 0x90, 0x90, 0x90, //0x00008fbc .p2align 4, 0x90 + //0x00008fc0 LBB32_87 + 0xc6, 0x06, 0x30, //0x00008fc0 movb $48, (%rsi) + 0x48, 0xff, 0xc6, //0x00008fc3 incq %rsi + 0x4c, 0x39, 0xc6, //0x00008fc6 cmpq %r8, %rsi + 0x0f, 0x82, 0xf1, 0xff, 0xff, 0xff, //0x00008fc9 jb LBB32_87 + 0xe9, 0x7c, 0x04, 0x00, 0x00, //0x00008fcf jmp LBB32_137 + //0x00008fd4 LBB32_88 + 0x81, 0xfe, 0x10, 0x27, 0x00, 0x00, //0x00008fd4 cmpl $10000, %esi + 0x4c, 0x89, 0xc0, //0x00008fda movq %r8, %rax + 0x48, 0x83, 0xd8, 0x00, //0x00008fdd sbbq $0, %rax + 0x48, 0x83, 0xc0, 0x05, //0x00008fe1 addq $5, %rax + 0x81, 0xfe, 0x10, 0x27, 0x00, 0x00, //0x00008fe5 cmpl $10000, %esi + 0x0f, 0x83, 0x22, 0xfc, 0xff, 0xff, //0x00008feb jae LBB32_37 + 0x49, 0x89, 0xc1, //0x00008ff1 movq %rax, %r9 + 0xe9, 0x3f, 0xfe, 0xff, 0xff, //0x00008ff4 jmp LBB32_56 + //0x00008ff9 LBB32_90 + 0x49, 0x8d, 0x84, 0x39, 0xe2, 0x01, 0x00, 0x00, //0x00008ff9 leaq $482(%r9,%rdi), %rax + 0x4d, 0x89, 0xde, //0x00009001 movq %r11, %r14 + 0x49, 0x29, 0xce, //0x00009004 subq %rcx, %r14 + 0x31, 0xdb, //0x00009007 xorl %ebx, %ebx + 0xc5, 0xfd, 0x6f, 0x05, 0x0f, 0xf7, 0xff, 0xff, //0x00009009 vmovdqa $-2289(%rip), %ymm0 /* LCPI32_0+0(%rip) */ + //0x00009011 LBB32_91 + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x20, 0xfe, 0xff, 0xff, //0x00009011 vmovdqu %ymm0, $-480(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x40, 0xfe, 0xff, 0xff, //0x0000901a vmovdqu %ymm0, $-448(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x60, 0xfe, 0xff, 0xff, //0x00009023 vmovdqu %ymm0, $-416(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x80, 0xfe, 0xff, 0xff, //0x0000902c vmovdqu %ymm0, $-384(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0xa0, 0xfe, 0xff, 0xff, //0x00009035 vmovdqu %ymm0, $-352(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0xc0, 0xfe, 0xff, 0xff, //0x0000903e vmovdqu %ymm0, $-320(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0xe0, 0xfe, 0xff, 0xff, //0x00009047 vmovdqu %ymm0, $-288(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x00, 0xff, 0xff, 0xff, //0x00009050 vmovdqu %ymm0, $-256(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x20, 0xff, 0xff, 0xff, //0x00009059 vmovdqu %ymm0, $-224(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x40, 0xff, 0xff, 0xff, //0x00009062 vmovdqu %ymm0, $-192(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x84, 0x18, 0x60, 0xff, 0xff, 0xff, //0x0000906b vmovdqu %ymm0, $-160(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x18, 0x80, //0x00009074 vmovdqu %ymm0, $-128(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x18, 0xa0, //0x0000907a vmovdqu %ymm0, $-96(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x18, 0xc0, //0x00009080 vmovdqu %ymm0, $-64(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x44, 0x18, 0xe0, //0x00009086 vmovdqu %ymm0, $-32(%rax,%rbx) + 0xc5, 0xfe, 0x7f, 0x04, 0x18, //0x0000908c vmovdqu %ymm0, (%rax,%rbx) + 0x48, 0x81, 0xc3, 0x00, 0x02, 0x00, 0x00, //0x00009091 addq $512, %rbx + 0x49, 0x83, 0xc6, 0x04, //0x00009098 addq $4, %r14 + 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x0000909c jne LBB32_91 + //0x000090a2 LBB32_92 + 0x4d, 0x85, 0xdb, //0x000090a2 testq %r11, %r11 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x000090a5 je LBB32_95 + 0x4c, 0x01, 0xcb, //0x000090ab addq %r9, %rbx + 0x48, 0x8d, 0x44, 0x1f, 0x62, //0x000090ae leaq $98(%rdi,%rbx), %rax + 0x49, 0xf7, 0xdb, //0x000090b3 negq %r11 + 0xc5, 0xfd, 0x6f, 0x05, 0x62, 0xf6, 0xff, 0xff, //0x000090b6 vmovdqa $-2462(%rip), %ymm0 /* LCPI32_0+0(%rip) */ + //0x000090be LBB32_94 + 0xc5, 0xfe, 0x7f, 0x40, 0xa0, //0x000090be vmovdqu %ymm0, $-96(%rax) + 0xc5, 0xfe, 0x7f, 0x40, 0xc0, //0x000090c3 vmovdqu %ymm0, $-64(%rax) + 0xc5, 0xfe, 0x7f, 0x40, 0xe0, //0x000090c8 vmovdqu %ymm0, $-32(%rax) + 0xc5, 0xfe, 0x7f, 0x00, //0x000090cd vmovdqu %ymm0, (%rax) + 0x48, 0x83, 0xe8, 0x80, //0x000090d1 subq $-128, %rax + 0x49, 0xff, 0xc3, //0x000090d5 incq %r11 + 0x0f, 0x85, 0xe0, 0xff, 0xff, 0xff, //0x000090d8 jne LBB32_94 + //0x000090de LBB32_95 + 0x49, 0x01, 0xf0, //0x000090de addq %rsi, %r8 + 0x49, 0x39, 0xf2, //0x000090e1 cmpq %rsi, %r10 + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x000090e4 je LBB32_98 + //0x000090ea LBB32_96 + 0x44, 0x89, 0xf8, //0x000090ea movl %r15d, %eax + 0xf7, 0xd8, //0x000090ed negl %eax + 0x90, //0x000090ef .p2align 4, 0x90 + //0x000090f0 LBB32_97 + 0x41, 0xc6, 0x00, 0x30, //0x000090f0 movb $48, (%r8) + 0x49, 0xff, 0xc0, //0x000090f4 incq %r8 + 0xff, 0xc6, //0x000090f7 incl %esi + 0x39, 0xc6, //0x000090f9 cmpl %eax, %esi + 0x0f, 0x8c, 0xef, 0xff, 0xff, 0xff, //0x000090fb jl LBB32_97 + //0x00009101 LBB32_98 + 0x4b, 0x8d, 0x04, 0x20, //0x00009101 leaq (%r8,%r12), %rax + 0x41, 0x81, 0xfd, 0x10, 0x27, 0x00, 0x00, //0x00009105 cmpl $10000, %r13d + 0x0f, 0x82, 0x63, 0x00, 0x00, 0x00, //0x0000910c jb LBB32_101 + 0x44, 0x89, 0xe9, //0x00009112 movl %r13d, %ecx + 0x41, 0xba, 0x59, 0x17, 0xb7, 0xd1, //0x00009115 movl $3518437209, %r10d + 0x4c, 0x0f, 0xaf, 0xd1, //0x0000911b imulq %rcx, %r10 + 0x49, 0xc1, 0xea, 0x2d, //0x0000911f shrq $45, %r10 + 0x41, 0x69, 0xca, 0xf0, 0xd8, 0xff, 0xff, //0x00009123 imull $-10000, %r10d, %ecx + 0x44, 0x01, 0xe9, //0x0000912a addl %r13d, %ecx + 0x0f, 0x84, 0x87, 0x01, 0x00, 0x00, //0x0000912d je LBB32_103 + 0x89, 0xca, //0x00009133 movl %ecx, %edx + 0x48, 0x69, 0xd2, 0x1f, 0x85, 0xeb, 0x51, //0x00009135 imulq $1374389535, %rdx, %rdx + 0x48, 0xc1, 0xea, 0x25, //0x0000913c shrq $37, %rdx + 0x6b, 0xda, 0x64, //0x00009140 imull $100, %edx, %ebx + 0x29, 0xd9, //0x00009143 subl %ebx, %ecx + 0x48, 0x8d, 0x1d, 0x54, 0x3a, 0x00, 0x00, //0x00009145 leaq $14932(%rip), %rbx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4b, //0x0000914c movzwl (%rbx,%rcx,2), %ecx + 0x66, 0x89, 0x48, 0xfe, //0x00009150 movw %cx, $-2(%rax) + 0x0f, 0xb7, 0x0c, 0x53, //0x00009154 movzwl (%rbx,%rdx,2), %ecx + 0x66, 0x89, 0x48, 0xfc, //0x00009158 movw %cx, $-4(%rax) + 0x45, 0x31, 0xc9, //0x0000915c xorl %r9d, %r9d + 0x48, 0x83, 0xc0, 0xfc, //0x0000915f addq $-4, %rax + 0x41, 0x83, 0xfa, 0x64, //0x00009163 cmpl $100, %r10d + 0x0f, 0x83, 0x18, 0x00, 0x00, 0x00, //0x00009167 jae LBB32_105 + //0x0000916d LBB32_102 + 0x44, 0x89, 0xd1, //0x0000916d movl %r10d, %ecx + 0xe9, 0x4d, 0x00, 0x00, 0x00, //0x00009170 jmp LBB32_107 + //0x00009175 LBB32_101 + 0x45, 0x31, 0xc9, //0x00009175 xorl %r9d, %r9d + 0x45, 0x89, 0xea, //0x00009178 movl %r13d, %r10d + 0x41, 0x83, 0xfa, 0x64, //0x0000917b cmpl $100, %r10d + 0x0f, 0x82, 0xe8, 0xff, 0xff, 0xff, //0x0000917f jb LBB32_102 + //0x00009185 LBB32_105 + 0x48, 0xff, 0xc8, //0x00009185 decq %rax + 0x48, 0x8d, 0x15, 0x11, 0x3a, 0x00, 0x00, //0x00009188 leaq $14865(%rip), %rdx /* _Digits+0(%rip) */ + 0x90, //0x0000918f .p2align 4, 0x90 + //0x00009190 LBB32_106 + 0x44, 0x89, 0xd1, //0x00009190 movl %r10d, %ecx + 0x48, 0x69, 0xc9, 0x1f, 0x85, 0xeb, 0x51, //0x00009193 imulq $1374389535, %rcx, %rcx + 0x48, 0xc1, 0xe9, 0x25, //0x0000919a shrq $37, %rcx + 0x6b, 0xd9, 0x64, //0x0000919e imull $100, %ecx, %ebx + 0x44, 0x89, 0xd6, //0x000091a1 movl %r10d, %esi + 0x29, 0xde, //0x000091a4 subl %ebx, %esi + 0x0f, 0xb7, 0x34, 0x72, //0x000091a6 movzwl (%rdx,%rsi,2), %esi + 0x66, 0x89, 0x70, 0xff, //0x000091aa movw %si, $-1(%rax) + 0x48, 0x83, 0xc0, 0xfe, //0x000091ae addq $-2, %rax + 0x41, 0x81, 0xfa, 0x0f, 0x27, 0x00, 0x00, //0x000091b2 cmpl $9999, %r10d + 0x41, 0x89, 0xca, //0x000091b9 movl %ecx, %r10d + 0x0f, 0x87, 0xce, 0xff, 0xff, 0xff, //0x000091bc ja LBB32_106 + //0x000091c2 LBB32_107 + 0x83, 0xf9, 0x0a, //0x000091c2 cmpl $10, %ecx + 0x0f, 0x82, 0x16, 0x00, 0x00, 0x00, //0x000091c5 jb LBB32_109 + 0x89, 0xc8, //0x000091cb movl %ecx, %eax + 0x48, 0x8d, 0x0d, 0xcc, 0x39, 0x00, 0x00, //0x000091cd leaq $14796(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x000091d4 movzwl (%rcx,%rax,2), %eax + 0x66, 0x41, 0x89, 0x00, //0x000091d8 movw %ax, (%r8) + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x000091dc jmp LBB32_110 + //0x000091e1 LBB32_109 + 0x80, 0xc1, 0x30, //0x000091e1 addb $48, %cl + 0x41, 0x88, 0x08, //0x000091e4 movb %cl, (%r8) + //0x000091e7 LBB32_110 + 0x4d, 0x29, 0xcc, //0x000091e7 subq %r9, %r12 + 0x49, 0x8d, 0x74, 0x24, 0x01, //0x000091ea leaq $1(%r12), %rsi + 0x49, 0x8d, 0x54, 0x24, 0x61, //0x000091ef leaq $97(%r12), %rdx + 0x49, 0x8d, 0x44, 0x24, 0x02, //0x000091f4 leaq $2(%r12), %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000091f9 .p2align 4, 0x90 + //0x00009200 LBB32_111 + 0x48, 0xff, 0xca, //0x00009200 decq %rdx + 0x48, 0xff, 0xce, //0x00009203 decq %rsi + 0x48, 0xff, 0xc8, //0x00009206 decq %rax + 0x43, 0x80, 0x7c, 0x20, 0xff, 0x30, //0x00009209 cmpb $48, $-1(%r8,%r12) + 0x4d, 0x8d, 0x64, 0x24, 0xff, //0x0000920f leaq $-1(%r12), %r12 + 0x0f, 0x84, 0xe6, 0xff, 0xff, 0xff, //0x00009214 je LBB32_111 + 0x4d, 0x8d, 0x0c, 0x30, //0x0000921a leaq (%r8,%rsi), %r9 + 0x45, 0x85, 0xff, //0x0000921e testl %r15d, %r15d + 0x0f, 0x8e, 0x8b, 0x00, 0x00, 0x00, //0x00009221 jle LBB32_116 + 0x44, 0x89, 0xc9, //0x00009227 movl %r9d, %ecx + 0x44, 0x29, 0xc1, //0x0000922a subl %r8d, %ecx + 0x41, 0x39, 0xcf, //0x0000922d cmpl %ecx, %r15d + 0x0f, 0x8d, 0x23, 0x00, 0x00, 0x00, //0x00009230 jge LBB32_117 + 0x43, 0x8d, 0x0c, 0x07, //0x00009236 leal (%r15,%r8), %ecx + 0x41, 0x29, 0xc9, //0x0000923a subl %ecx, %r9d + 0x49, 0x8d, 0x49, 0xff, //0x0000923d leaq $-1(%r9), %rcx + 0x45, 0x89, 0xca, //0x00009241 movl %r9d, %r10d + 0x41, 0x83, 0xe2, 0x03, //0x00009244 andl $3, %r10d + 0x48, 0x83, 0xf9, 0x03, //0x00009248 cmpq $3, %rcx + 0x0f, 0x83, 0x81, 0x00, 0x00, 0x00, //0x0000924c jae LBB32_121 + 0x31, 0xc9, //0x00009252 xorl %ecx, %ecx + 0xe9, 0xa3, 0x00, 0x00, 0x00, //0x00009254 jmp LBB32_124 + //0x00009259 LBB32_117 + 0x0f, 0x8e, 0x53, 0x00, 0x00, 0x00, //0x00009259 jle LBB32_116 + 0x45, 0x01, 0xc7, //0x0000925f addl %r8d, %r15d + 0x45, 0x89, 0xce, //0x00009262 movl %r9d, %r14d + 0x41, 0xf7, 0xd6, //0x00009265 notl %r14d + 0x45, 0x01, 0xfe, //0x00009268 addl %r15d, %r14d + 0x45, 0x31, 0xd2, //0x0000926b xorl %r10d, %r10d + 0x4d, 0x89, 0xcb, //0x0000926e movq %r9, %r11 + 0x41, 0x83, 0xfe, 0x7e, //0x00009271 cmpl $126, %r14d + 0x0f, 0x86, 0xb4, 0x01, 0x00, 0x00, //0x00009275 jbe LBB32_135 + 0x49, 0xff, 0xc6, //0x0000927b incq %r14 + 0x4d, 0x89, 0xf2, //0x0000927e movq %r14, %r10 + 0x49, 0x83, 0xe2, 0x80, //0x00009281 andq $-128, %r10 + 0x4f, 0x8d, 0x1c, 0x10, //0x00009285 leaq (%r8,%r10), %r11 + 0x49, 0x8d, 0x5a, 0x80, //0x00009289 leaq $-128(%r10), %rbx + 0x48, 0x89, 0xd9, //0x0000928d movq %rbx, %rcx + 0x48, 0xc1, 0xe9, 0x07, //0x00009290 shrq $7, %rcx + 0x48, 0xff, 0xc1, //0x00009294 incq %rcx + 0x41, 0x89, 0xcc, //0x00009297 movl %ecx, %r12d + 0x41, 0x83, 0xe4, 0x03, //0x0000929a andl $3, %r12d + 0x48, 0x81, 0xfb, 0x80, 0x01, 0x00, 0x00, //0x0000929e cmpq $384, %rbx + 0x0f, 0x83, 0x8f, 0x00, 0x00, 0x00, //0x000092a5 jae LBB32_129 + 0x31, 0xc9, //0x000092ab xorl %ecx, %ecx + 0xe9, 0x30, 0x01, 0x00, 0x00, //0x000092ad jmp LBB32_131 + //0x000092b2 LBB32_116 + 0x4d, 0x89, 0xc8, //0x000092b2 movq %r9, %r8 + 0xe9, 0x96, 0x01, 0x00, 0x00, //0x000092b5 jmp LBB32_137 + //0x000092ba LBB32_103 + 0x41, 0xb9, 0x04, 0x00, 0x00, 0x00, //0x000092ba movl $4, %r9d + 0x48, 0x83, 0xc0, 0xfc, //0x000092c0 addq $-4, %rax + 0x41, 0x83, 0xfa, 0x64, //0x000092c4 cmpl $100, %r10d + 0x0f, 0x82, 0x9f, 0xfe, 0xff, 0xff, //0x000092c8 jb LBB32_102 + 0xe9, 0xb2, 0xfe, 0xff, 0xff, //0x000092ce jmp LBB32_105 + //0x000092d3 LBB32_121 + 0x4d, 0x89, 0xd3, //0x000092d3 movq %r10, %r11 + 0x4d, 0x29, 0xcb, //0x000092d6 subq %r9, %r11 + 0x31, 0xc9, //0x000092d9 xorl %ecx, %ecx + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000092db .p2align 4, 0x90 + //0x000092e0 LBB32_122 + 0x49, 0x8d, 0x1c, 0x08, //0x000092e0 leaq (%r8,%rcx), %rbx + 0x8b, 0x54, 0x1e, 0xfc, //0x000092e4 movl $-4(%rsi,%rbx), %edx + 0x89, 0x54, 0x1e, 0xfd, //0x000092e8 movl %edx, $-3(%rsi,%rbx) + 0x48, 0x83, 0xc1, 0xfc, //0x000092ec addq $-4, %rcx + 0x49, 0x39, 0xcb, //0x000092f0 cmpq %rcx, %r11 + 0x0f, 0x85, 0xe7, 0xff, 0xff, 0xff, //0x000092f3 jne LBB32_122 + 0x48, 0xf7, 0xd9, //0x000092f9 negq %rcx + //0x000092fc LBB32_124 + 0x4d, 0x85, 0xd2, //0x000092fc testq %r10, %r10 + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x000092ff je LBB32_127 + 0x49, 0xf7, 0xda, //0x00009305 negq %r10 + 0x4c, 0x89, 0xc2, //0x00009308 movq %r8, %rdx + 0x48, 0x29, 0xca, //0x0000930b subq %rcx, %rdx + 0x31, 0xc9, //0x0000930e xorl %ecx, %ecx + //0x00009310 .p2align 4, 0x90 + //0x00009310 LBB32_126 + 0x48, 0x8d, 0x34, 0x0a, //0x00009310 leaq (%rdx,%rcx), %rsi + 0x41, 0x0f, 0xb6, 0x1c, 0x34, //0x00009314 movzbl (%r12,%rsi), %ebx + 0x41, 0x88, 0x5c, 0x34, 0x01, //0x00009319 movb %bl, $1(%r12,%rsi) + 0x48, 0xff, 0xc9, //0x0000931e decq %rcx + 0x49, 0x39, 0xca, //0x00009321 cmpq %rcx, %r10 + 0x0f, 0x85, 0xe6, 0xff, 0xff, 0xff, //0x00009324 jne LBB32_126 + //0x0000932a LBB32_127 + 0x49, 0x63, 0xcf, //0x0000932a movslq %r15d, %rcx + 0x41, 0xc6, 0x04, 0x08, 0x2e, //0x0000932d movb $46, (%r8,%rcx) + 0x49, 0x01, 0xc0, //0x00009332 addq %rax, %r8 + 0xe9, 0x16, 0x01, 0x00, 0x00, //0x00009335 jmp LBB32_137 + //0x0000933a LBB32_129 + 0x4c, 0x89, 0xe3, //0x0000933a movq %r12, %rbx + 0x48, 0x29, 0xcb, //0x0000933d subq %rcx, %rbx + 0x31, 0xc9, //0x00009340 xorl %ecx, %ecx + 0xc5, 0xfd, 0x6f, 0x05, 0xd6, 0xf3, 0xff, 0xff, //0x00009342 vmovdqa $-3114(%rip), %ymm0 /* LCPI32_0+0(%rip) */ + //0x0000934a LBB32_130 + 0x49, 0x8d, 0x04, 0x08, //0x0000934a leaq (%r8,%rcx), %rax + 0xc5, 0xfe, 0x7f, 0x04, 0x06, //0x0000934e vmovdqu %ymm0, (%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x06, 0x20, //0x00009353 vmovdqu %ymm0, $32(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x06, 0x40, //0x00009359 vmovdqu %ymm0, $64(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x44, 0x06, 0x60, //0x0000935f vmovdqu %ymm0, $96(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0x80, 0x00, 0x00, 0x00, //0x00009365 vmovdqu %ymm0, $128(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0xa0, 0x00, 0x00, 0x00, //0x0000936e vmovdqu %ymm0, $160(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0xc0, 0x00, 0x00, 0x00, //0x00009377 vmovdqu %ymm0, $192(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0xe0, 0x00, 0x00, 0x00, //0x00009380 vmovdqu %ymm0, $224(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0x00, 0x01, 0x00, 0x00, //0x00009389 vmovdqu %ymm0, $256(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0x20, 0x01, 0x00, 0x00, //0x00009392 vmovdqu %ymm0, $288(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0x40, 0x01, 0x00, 0x00, //0x0000939b vmovdqu %ymm0, $320(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0x60, 0x01, 0x00, 0x00, //0x000093a4 vmovdqu %ymm0, $352(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0x80, 0x01, 0x00, 0x00, //0x000093ad vmovdqu %ymm0, $384(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0xa0, 0x01, 0x00, 0x00, //0x000093b6 vmovdqu %ymm0, $416(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0xc0, 0x01, 0x00, 0x00, //0x000093bf vmovdqu %ymm0, $448(%rsi,%rax) + 0xc5, 0xfe, 0x7f, 0x84, 0x06, 0xe0, 0x01, 0x00, 0x00, //0x000093c8 vmovdqu %ymm0, $480(%rsi,%rax) + 0x48, 0x81, 0xc1, 0x00, 0x02, 0x00, 0x00, //0x000093d1 addq $512, %rcx + 0x48, 0x83, 0xc3, 0x04, //0x000093d8 addq $4, %rbx + 0x0f, 0x85, 0x68, 0xff, 0xff, 0xff, //0x000093dc jne LBB32_130 + //0x000093e2 LBB32_131 + 0x49, 0x01, 0xf3, //0x000093e2 addq %rsi, %r11 + 0x4d, 0x85, 0xe4, //0x000093e5 testq %r12, %r12 + 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x000093e8 je LBB32_134 + 0x49, 0x01, 0xc8, //0x000093ee addq %rcx, %r8 + 0x49, 0x01, 0xd0, //0x000093f1 addq %rdx, %r8 + 0x49, 0xf7, 0xdc, //0x000093f4 negq %r12 + 0xc5, 0xfd, 0x6f, 0x05, 0x21, 0xf3, 0xff, 0xff, //0x000093f7 vmovdqa $-3295(%rip), %ymm0 /* LCPI32_0+0(%rip) */ + //0x000093ff LBB32_133 + 0xc4, 0xc1, 0x7e, 0x7f, 0x40, 0xa0, //0x000093ff vmovdqu %ymm0, $-96(%r8) + 0xc4, 0xc1, 0x7e, 0x7f, 0x40, 0xc0, //0x00009405 vmovdqu %ymm0, $-64(%r8) + 0xc4, 0xc1, 0x7e, 0x7f, 0x40, 0xe0, //0x0000940b vmovdqu %ymm0, $-32(%r8) + 0xc4, 0xc1, 0x7e, 0x7f, 0x00, //0x00009411 vmovdqu %ymm0, (%r8) + 0x49, 0x83, 0xe8, 0x80, //0x00009416 subq $-128, %r8 + 0x49, 0xff, 0xc4, //0x0000941a incq %r12 + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000941d jne LBB32_133 + //0x00009423 LBB32_134 + 0x4d, 0x89, 0xd8, //0x00009423 movq %r11, %r8 + 0x4d, 0x39, 0xd6, //0x00009426 cmpq %r10, %r14 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00009429 je LBB32_137 + //0x0000942f LBB32_135 + 0x45, 0x29, 0xd7, //0x0000942f subl %r10d, %r15d + 0x45, 0x29, 0xcf, //0x00009432 subl %r9d, %r15d + 0x4d, 0x89, 0xd8, //0x00009435 movq %r11, %r8 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009438 .p2align 4, 0x90 + //0x00009440 LBB32_136 + 0x41, 0xc6, 0x00, 0x30, //0x00009440 movb $48, (%r8) + 0x49, 0xff, 0xc0, //0x00009444 incq %r8 + 0x41, 0xff, 0xcf, //0x00009447 decl %r15d + 0x0f, 0x85, 0xf0, 0xff, 0xff, 0xff, //0x0000944a jne LBB32_136 + //0x00009450 LBB32_137 + 0x41, 0x29, 0xf8, //0x00009450 subl %edi, %r8d + //0x00009453 LBB32_138 + 0x44, 0x89, 0xc0, //0x00009453 movl %r8d, %eax + 0x5b, //0x00009456 popq %rbx + 0x41, 0x5c, //0x00009457 popq %r12 + 0x41, 0x5d, //0x00009459 popq %r13 + 0x41, 0x5e, //0x0000945b popq %r14 + 0x41, 0x5f, //0x0000945d popq %r15 + 0x5d, //0x0000945f popq %rbp + 0xc5, 0xf8, 0x77, //0x00009460 vzeroupper + 0xc3, //0x00009463 retq + //0x00009464 LBB32_139 + 0x45, 0x31, 0xc0, //0x00009464 xorl %r8d, %r8d + 0xe9, 0xe7, 0xff, 0xff, 0xff, //0x00009467 jmp LBB32_138 + //0x0000946c LBB32_140 + 0x41, 0xbf, 0x6b, 0xff, 0xff, 0xff, //0x0000946c movl $-149, %r15d + 0x89, 0xc6, //0x00009472 movl %eax, %esi + 0xe9, 0x46, 0xf3, 0xff, 0xff, //0x00009474 jmp LBB32_5 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00009479 .p2align 4, 0x00 + //0x00009480 LCPI33_0 + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, //0x00009480 QUAD $0x4040404040404040; QUAD $0x4040404040404040 // .space 16, '@@@@@@@@@@@@@@@@' + //0x00009490 LCPI33_1 + 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, //0x00009490 QUAD $0x5b5b5b5b5b5b5b5b; QUAD $0x5b5b5b5b5b5b5b5b // .space 16, '[[[[[[[[[[[[[[[[' + //0x000094a0 LCPI33_2 + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000094a0 QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .space 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000094b0 .p2align 5, 0x00 + //0x000094c0 LCPI33_3 + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, //0x000094c0 QUAD $0xbfbfbfbfbfbfbfbf; QUAD $0xbfbfbfbfbfbfbfbf // .space 16, '\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf' + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, //0x000094d0 QUAD $0xbfbfbfbfbfbfbfbf; QUAD $0xbfbfbfbfbfbfbfbf // .space 16, '\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf' + //0x000094e0 LCPI33_4 + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, //0x000094e0 QUAD $0x1919191919191919; QUAD $0x1919191919191919 // .space 16, '\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19' + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, //0x000094f0 QUAD $0x1919191919191919; QUAD $0x1919191919191919 // .space 16, '\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19' + //0x00009500 LCPI33_5 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00009500 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00009510 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x00009520 .p2align 4, 0x90 + //0x00009520 _to_lower + 0x55, //0x00009520 pushq %rbp + 0x48, 0x89, 0xe5, //0x00009521 movq %rsp, %rbp + 0x53, //0x00009524 pushq %rbx + 0x31, 0xc0, //0x00009525 xorl %eax, %eax + 0xc5, 0xf9, 0x6f, 0x05, 0x51, 0xff, 0xff, 0xff, //0x00009527 vmovdqa $-175(%rip), %xmm0 /* LCPI33_0+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x0d, 0x59, 0xff, 0xff, 0xff, //0x0000952f vmovdqa $-167(%rip), %xmm1 /* LCPI33_1+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x15, 0x61, 0xff, 0xff, 0xff, //0x00009537 vmovdqa $-159(%rip), %xmm2 /* LCPI33_2+0(%rip) */ + 0x48, 0x89, 0xd3, //0x0000953f movq %rdx, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009542 .p2align 4, 0x90 + //0x00009550 LBB33_1 + 0xc5, 0xfa, 0x6f, 0x1c, 0x06, //0x00009550 vmovdqu (%rsi,%rax), %xmm3 + 0xc5, 0xe1, 0x64, 0xe0, //0x00009555 vpcmpgtb %xmm0, %xmm3, %xmm4 + 0xc5, 0xf1, 0x64, 0xeb, //0x00009559 vpcmpgtb %xmm3, %xmm1, %xmm5 + 0xc5, 0xd1, 0xdb, 0xe4, //0x0000955d vpand %xmm4, %xmm5, %xmm4 + 0xc5, 0xd9, 0xdb, 0xe2, //0x00009561 vpand %xmm2, %xmm4, %xmm4 + 0xc5, 0xd9, 0x71, 0xf4, 0x05, //0x00009565 vpsllw $5, %xmm4, %xmm4 + 0xc5, 0xd9, 0xfc, 0xdb, //0x0000956a vpaddb %xmm3, %xmm4, %xmm3 + 0xc5, 0xfa, 0x7f, 0x1c, 0x07, //0x0000956e vmovdqu %xmm3, (%rdi,%rax) + 0x48, 0x83, 0xc3, 0xf0, //0x00009573 addq $-16, %rbx + 0x48, 0x83, 0xc0, 0x10, //0x00009577 addq $16, %rax + 0x48, 0x83, 0xfb, 0x0f, //0x0000957b cmpq $15, %rbx + 0x0f, 0x87, 0xcb, 0xff, 0xff, 0xff, //0x0000957f ja LBB33_1 + 0x49, 0x89, 0xd2, //0x00009585 movq %rdx, %r10 + 0x49, 0x29, 0xc2, //0x00009588 subq %rax, %r10 + 0x0f, 0x84, 0xb6, 0x01, 0x00, 0x00, //0x0000958b je LBB33_16 + 0x4c, 0x8d, 0x0c, 0x07, //0x00009591 leaq (%rdi,%rax), %r9 + 0x4c, 0x8d, 0x04, 0x06, //0x00009595 leaq (%rsi,%rax), %r8 + 0x48, 0x81, 0xfb, 0x80, 0x00, 0x00, 0x00, //0x00009599 cmpq $128, %rbx + 0x0f, 0x82, 0x26, 0x00, 0x00, 0x00, //0x000095a0 jb LBB33_4 + 0x49, 0x83, 0xc2, 0x10, //0x000095a6 addq $16, %r10 + 0x48, 0x8d, 0x4c, 0x06, 0xf0, //0x000095aa leaq $-16(%rsi,%rax), %rcx + 0x4c, 0x01, 0xd1, //0x000095af addq %r10, %rcx + 0x49, 0x39, 0xc9, //0x000095b2 cmpq %rcx, %r9 + 0x0f, 0x83, 0xad, 0x00, 0x00, 0x00, //0x000095b5 jae LBB33_8 + 0x48, 0x8d, 0x4c, 0x07, 0xf0, //0x000095bb leaq $-16(%rdi,%rax), %rcx + 0x4c, 0x01, 0xd1, //0x000095c0 addq %r10, %rcx + 0x49, 0x39, 0xc8, //0x000095c3 cmpq %rcx, %r8 + 0x0f, 0x83, 0x9c, 0x00, 0x00, 0x00, //0x000095c6 jae LBB33_8 + //0x000095cc LBB33_4 + 0x48, 0x89, 0xda, //0x000095cc movq %rbx, %rdx + //0x000095cf LBB33_11 + 0xf6, 0xc2, 0x01, //0x000095cf testb $1, %dl + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x000095d2 jne LBB33_13 + 0x48, 0x89, 0xd0, //0x000095d8 movq %rdx, %rax + 0x48, 0x83, 0xfa, 0x01, //0x000095db cmpq $1, %rdx + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000095df jne LBB33_14 + 0xe9, 0x5d, 0x01, 0x00, 0x00, //0x000095e5 jmp LBB33_16 + //0x000095ea LBB33_13 + 0x41, 0x0f, 0xb6, 0x00, //0x000095ea movzbl (%r8), %eax + 0x8d, 0x48, 0xbf, //0x000095ee leal $-65(%rax), %ecx + 0x8d, 0x70, 0x20, //0x000095f1 leal $32(%rax), %esi + 0x80, 0xf9, 0x1a, //0x000095f4 cmpb $26, %cl + 0x40, 0x0f, 0xb6, 0xce, //0x000095f7 movzbl %sil, %ecx + 0x0f, 0x43, 0xc8, //0x000095fb cmovael %eax, %ecx + 0x48, 0x8d, 0x42, 0xff, //0x000095fe leaq $-1(%rdx), %rax + 0x41, 0x88, 0x09, //0x00009602 movb %cl, (%r9) + 0x49, 0xff, 0xc0, //0x00009605 incq %r8 + 0x49, 0xff, 0xc1, //0x00009608 incq %r9 + 0x48, 0x83, 0xfa, 0x01, //0x0000960b cmpq $1, %rdx + 0x0f, 0x84, 0x32, 0x01, 0x00, 0x00, //0x0000960f je LBB33_16 + //0x00009615 LBB33_14 + 0x31, 0xc9, //0x00009615 xorl %ecx, %ecx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009617 .p2align 4, 0x90 + //0x00009620 LBB33_15 + 0x41, 0x0f, 0xb6, 0x14, 0x08, //0x00009620 movzbl (%r8,%rcx), %edx + 0x8d, 0x72, 0xbf, //0x00009625 leal $-65(%rdx), %esi + 0x8d, 0x7a, 0x20, //0x00009628 leal $32(%rdx), %edi + 0x40, 0x80, 0xfe, 0x1a, //0x0000962b cmpb $26, %sil + 0x40, 0x0f, 0xb6, 0xf7, //0x0000962f movzbl %dil, %esi + 0x0f, 0x43, 0xf2, //0x00009633 cmovael %edx, %esi + 0x41, 0x88, 0x34, 0x09, //0x00009636 movb %sil, (%r9,%rcx) + 0x41, 0x0f, 0xb6, 0x54, 0x08, 0x01, //0x0000963a movzbl $1(%r8,%rcx), %edx + 0x8d, 0x72, 0xbf, //0x00009640 leal $-65(%rdx), %esi + 0x8d, 0x7a, 0x20, //0x00009643 leal $32(%rdx), %edi + 0x40, 0x80, 0xfe, 0x1a, //0x00009646 cmpb $26, %sil + 0x40, 0x0f, 0xb6, 0xf7, //0x0000964a movzbl %dil, %esi + 0x0f, 0x43, 0xf2, //0x0000964e cmovael %edx, %esi + 0x41, 0x88, 0x74, 0x09, 0x01, //0x00009651 movb %sil, $1(%r9,%rcx) + 0x48, 0x83, 0xc1, 0x02, //0x00009656 addq $2, %rcx + 0x48, 0x39, 0xc8, //0x0000965a cmpq %rcx, %rax + 0x0f, 0x85, 0xbd, 0xff, 0xff, 0xff, //0x0000965d jne LBB33_15 + 0xe9, 0xdf, 0x00, 0x00, 0x00, //0x00009663 jmp LBB33_16 + //0x00009668 LBB33_8 + 0x49, 0x89, 0xda, //0x00009668 movq %rbx, %r10 + 0x49, 0x83, 0xe2, 0x80, //0x0000966b andq $-128, %r10 + 0x4e, 0x8d, 0x04, 0x16, //0x0000966f leaq (%rsi,%r10), %r8 + 0x49, 0x01, 0xc0, //0x00009673 addq %rax, %r8 + 0x4c, 0x29, 0xd2, //0x00009676 subq %r10, %rdx + 0x48, 0x29, 0xc2, //0x00009679 subq %rax, %rdx + 0x4e, 0x8d, 0x0c, 0x17, //0x0000967c leaq (%rdi,%r10), %r9 + 0x49, 0x01, 0xc1, //0x00009680 addq %rax, %r9 + 0x45, 0x31, 0xdb, //0x00009683 xorl %r11d, %r11d + 0xc5, 0xfd, 0x6f, 0x05, 0x32, 0xfe, 0xff, 0xff, //0x00009686 vmovdqa $-462(%rip), %ymm0 /* LCPI33_3+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x0d, 0x4a, 0xfe, 0xff, 0xff, //0x0000968e vmovdqa $-438(%rip), %ymm1 /* LCPI33_4+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x15, 0x62, 0xfe, 0xff, 0xff, //0x00009696 vmovdqa $-414(%rip), %ymm2 /* LCPI33_5+0(%rip) */ + 0x90, 0x90, //0x0000969e .p2align 4, 0x90 + //0x000096a0 LBB33_9 + 0x4a, 0x8d, 0x0c, 0x1e, //0x000096a0 leaq (%rsi,%r11), %rcx + 0xc5, 0xfe, 0x6f, 0x1c, 0x08, //0x000096a4 vmovdqu (%rax,%rcx), %ymm3 + 0xc5, 0xfe, 0x6f, 0x64, 0x08, 0x20, //0x000096a9 vmovdqu $32(%rax,%rcx), %ymm4 + 0xc5, 0xfe, 0x6f, 0x6c, 0x08, 0x40, //0x000096af vmovdqu $64(%rax,%rcx), %ymm5 + 0xc5, 0xfe, 0x6f, 0x74, 0x08, 0x60, //0x000096b5 vmovdqu $96(%rax,%rcx), %ymm6 + 0xc5, 0xe5, 0xfc, 0xf8, //0x000096bb vpaddb %ymm0, %ymm3, %ymm7 + 0xc5, 0x5d, 0xfc, 0xc0, //0x000096bf vpaddb %ymm0, %ymm4, %ymm8 + 0xc5, 0x55, 0xfc, 0xc8, //0x000096c3 vpaddb %ymm0, %ymm5, %ymm9 + 0xc5, 0x4d, 0xfc, 0xd0, //0x000096c7 vpaddb %ymm0, %ymm6, %ymm10 + 0xc5, 0x45, 0xda, 0xd9, //0x000096cb vpminub %ymm1, %ymm7, %ymm11 + 0xc5, 0xa5, 0x74, 0xff, //0x000096cf vpcmpeqb %ymm7, %ymm11, %ymm7 + 0xc5, 0x3d, 0xda, 0xd9, //0x000096d3 vpminub %ymm1, %ymm8, %ymm11 + 0xc4, 0x41, 0x3d, 0x74, 0xc3, //0x000096d7 vpcmpeqb %ymm11, %ymm8, %ymm8 + 0xc5, 0x35, 0xda, 0xd9, //0x000096dc vpminub %ymm1, %ymm9, %ymm11 + 0xc4, 0x41, 0x35, 0x74, 0xcb, //0x000096e0 vpcmpeqb %ymm11, %ymm9, %ymm9 + 0xc5, 0x2d, 0xda, 0xd9, //0x000096e5 vpminub %ymm1, %ymm10, %ymm11 + 0xc4, 0x41, 0x2d, 0x74, 0xd3, //0x000096e9 vpcmpeqb %ymm11, %ymm10, %ymm10 + 0xc5, 0x65, 0xfc, 0xda, //0x000096ee vpaddb %ymm2, %ymm3, %ymm11 + 0xc5, 0x5d, 0xfc, 0xe2, //0x000096f2 vpaddb %ymm2, %ymm4, %ymm12 + 0xc5, 0x55, 0xfc, 0xea, //0x000096f6 vpaddb %ymm2, %ymm5, %ymm13 + 0xc5, 0x4d, 0xfc, 0xf2, //0x000096fa vpaddb %ymm2, %ymm6, %ymm14 + 0xc4, 0xc3, 0x65, 0x4c, 0xdb, 0x70, //0x000096fe vpblendvb %ymm7, %ymm11, %ymm3, %ymm3 + 0xc4, 0xc3, 0x5d, 0x4c, 0xe4, 0x80, //0x00009704 vpblendvb %ymm8, %ymm12, %ymm4, %ymm4 + 0xc4, 0xc3, 0x55, 0x4c, 0xed, 0x90, //0x0000970a vpblendvb %ymm9, %ymm13, %ymm5, %ymm5 + 0xc4, 0xc3, 0x4d, 0x4c, 0xf6, 0xa0, //0x00009710 vpblendvb %ymm10, %ymm14, %ymm6, %ymm6 + 0x4a, 0x8d, 0x0c, 0x1f, //0x00009716 leaq (%rdi,%r11), %rcx + 0xc5, 0xfe, 0x7f, 0x1c, 0x08, //0x0000971a vmovdqu %ymm3, (%rax,%rcx) + 0xc5, 0xfe, 0x7f, 0x64, 0x08, 0x20, //0x0000971f vmovdqu %ymm4, $32(%rax,%rcx) + 0xc5, 0xfe, 0x7f, 0x6c, 0x08, 0x40, //0x00009725 vmovdqu %ymm5, $64(%rax,%rcx) + 0xc5, 0xfe, 0x7f, 0x74, 0x08, 0x60, //0x0000972b vmovdqu %ymm6, $96(%rax,%rcx) + 0x49, 0x83, 0xeb, 0x80, //0x00009731 subq $-128, %r11 + 0x4d, 0x39, 0xda, //0x00009735 cmpq %r11, %r10 + 0x0f, 0x85, 0x62, 0xff, 0xff, 0xff, //0x00009738 jne LBB33_9 + 0x4c, 0x39, 0xd3, //0x0000973e cmpq %r10, %rbx + 0x0f, 0x85, 0x88, 0xfe, 0xff, 0xff, //0x00009741 jne LBB33_11 + //0x00009747 LBB33_16 + 0x5b, //0x00009747 popq %rbx + 0x5d, //0x00009748 popq %rbp + 0xc5, 0xf8, 0x77, //0x00009749 vzeroupper + 0xc3, //0x0000974c retq + 0x90, 0x90, 0x90, //0x0000974d .p2align 4, 0x90 + //0x00009750 _format_significand + 0x55, //0x00009750 pushq %rbp + 0x48, 0x89, 0xe5, //0x00009751 movq %rsp, %rbp + 0x41, 0x56, //0x00009754 pushq %r14 + 0x53, //0x00009756 pushq %rbx + 0x4c, 0x63, 0xc2, //0x00009757 movslq %edx, %r8 + 0x49, 0x01, 0xf0, //0x0000975a addq %rsi, %r8 + 0x48, 0x89, 0xf8, //0x0000975d movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x20, //0x00009760 shrq $32, %rax + 0x0f, 0x84, 0xb6, 0x00, 0x00, 0x00, //0x00009764 je LBB34_1 + 0x48, 0xb9, 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x0000976a movabsq $-6067343680855748867, %rcx + 0x48, 0x89, 0xf8, //0x00009774 movq %rdi, %rax + 0x48, 0xf7, 0xe1, //0x00009777 mulq %rcx + 0x48, 0xc1, 0xea, 0x1a, //0x0000977a shrq $26, %rdx + 0x69, 0xca, 0x00, 0x1f, 0x0a, 0xfa, //0x0000977e imull $-100000000, %edx, %ecx + 0x01, 0xf9, //0x00009784 addl %edi, %ecx + 0x0f, 0x84, 0xb0, 0x00, 0x00, 0x00, //0x00009786 je LBB34_3 + 0x89, 0xc8, //0x0000978c movl %ecx, %eax + 0x41, 0xb9, 0x59, 0x17, 0xb7, 0xd1, //0x0000978e movl $3518437209, %r9d + 0x49, 0x0f, 0xaf, 0xc1, //0x00009794 imulq %r9, %rax + 0x48, 0xc1, 0xe8, 0x2d, //0x00009798 shrq $45, %rax + 0x69, 0xf8, 0x10, 0x27, 0x00, 0x00, //0x0000979c imull $10000, %eax, %edi + 0x29, 0xf9, //0x000097a2 subl %edi, %ecx + 0x48, 0x89, 0xc7, //0x000097a4 movq %rax, %rdi + 0x49, 0x0f, 0xaf, 0xf9, //0x000097a7 imulq %r9, %rdi + 0x48, 0xc1, 0xef, 0x2d, //0x000097ab shrq $45, %rdi + 0x69, 0xff, 0x10, 0x27, 0x00, 0x00, //0x000097af imull $10000, %edi, %edi + 0x29, 0xf8, //0x000097b5 subl %edi, %eax + 0x0f, 0xb7, 0xf9, //0x000097b7 movzwl %cx, %edi + 0xc1, 0xef, 0x02, //0x000097ba shrl $2, %edi + 0x44, 0x69, 0xcf, 0x7b, 0x14, 0x00, 0x00, //0x000097bd imull $5243, %edi, %r9d + 0x41, 0xc1, 0xe9, 0x11, //0x000097c4 shrl $17, %r9d + 0x41, 0x6b, 0xf9, 0x64, //0x000097c8 imull $100, %r9d, %edi + 0x29, 0xf9, //0x000097cc subl %edi, %ecx + 0x44, 0x0f, 0xb7, 0xd1, //0x000097ce movzwl %cx, %r10d + 0x0f, 0xb7, 0xf8, //0x000097d2 movzwl %ax, %edi + 0xc1, 0xef, 0x02, //0x000097d5 shrl $2, %edi + 0x69, 0xff, 0x7b, 0x14, 0x00, 0x00, //0x000097d8 imull $5243, %edi, %edi + 0xc1, 0xef, 0x11, //0x000097de shrl $17, %edi + 0x6b, 0xcf, 0x64, //0x000097e1 imull $100, %edi, %ecx + 0x29, 0xc8, //0x000097e4 subl %ecx, %eax + 0x44, 0x0f, 0xb7, 0xd8, //0x000097e6 movzwl %ax, %r11d + 0x48, 0x8d, 0x0d, 0xaf, 0x33, 0x00, 0x00, //0x000097ea leaq $13231(%rip), %rcx /* _Digits+0(%rip) */ + 0x42, 0x0f, 0xb7, 0x04, 0x51, //0x000097f1 movzwl (%rcx,%r10,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfe, //0x000097f6 movw %ax, $-2(%r8) + 0x42, 0x0f, 0xb7, 0x04, 0x49, //0x000097fb movzwl (%rcx,%r9,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfc, //0x00009800 movw %ax, $-4(%r8) + 0x42, 0x0f, 0xb7, 0x04, 0x59, //0x00009805 movzwl (%rcx,%r11,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfa, //0x0000980a movw %ax, $-6(%r8) + 0x0f, 0xb7, 0x04, 0x79, //0x0000980f movzwl (%rcx,%rdi,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xf8, //0x00009813 movw %ax, $-8(%r8) + 0x45, 0x31, 0xc9, //0x00009818 xorl %r9d, %r9d + 0xe9, 0x22, 0x00, 0x00, 0x00, //0x0000981b jmp LBB34_5 + //0x00009820 LBB34_1 + 0x45, 0x31, 0xc9, //0x00009820 xorl %r9d, %r9d + 0x4d, 0x89, 0xc6, //0x00009823 movq %r8, %r14 + 0x48, 0x89, 0xfa, //0x00009826 movq %rdi, %rdx + 0x81, 0xfa, 0x10, 0x27, 0x00, 0x00, //0x00009829 cmpl $10000, %edx + 0x0f, 0x83, 0x1d, 0x00, 0x00, 0x00, //0x0000982f jae LBB34_8 + //0x00009835 LBB34_7 + 0x89, 0xd7, //0x00009835 movl %edx, %edi + 0xe9, 0x6c, 0x00, 0x00, 0x00, //0x00009837 jmp LBB34_10 + //0x0000983c LBB34_3 + 0x41, 0xb9, 0x08, 0x00, 0x00, 0x00, //0x0000983c movl $8, %r9d + //0x00009842 LBB34_5 + 0x4d, 0x8d, 0x70, 0xf8, //0x00009842 leaq $-8(%r8), %r14 + 0x81, 0xfa, 0x10, 0x27, 0x00, 0x00, //0x00009846 cmpl $10000, %edx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x0000984c jb LBB34_7 + //0x00009852 LBB34_8 + 0x41, 0xba, 0x59, 0x17, 0xb7, 0xd1, //0x00009852 movl $3518437209, %r10d + 0x4c, 0x8d, 0x1d, 0x41, 0x33, 0x00, 0x00, //0x00009858 leaq $13121(%rip), %r11 /* _Digits+0(%rip) */ + 0x90, //0x0000985f .p2align 4, 0x90 + //0x00009860 LBB34_9 + 0x89, 0xd7, //0x00009860 movl %edx, %edi + 0x49, 0x0f, 0xaf, 0xfa, //0x00009862 imulq %r10, %rdi + 0x48, 0xc1, 0xef, 0x2d, //0x00009866 shrq $45, %rdi + 0x69, 0xc7, 0xf0, 0xd8, 0xff, 0xff, //0x0000986a imull $-10000, %edi, %eax + 0x01, 0xd0, //0x00009870 addl %edx, %eax + 0x48, 0x69, 0xd8, 0x1f, 0x85, 0xeb, 0x51, //0x00009872 imulq $1374389535, %rax, %rbx + 0x48, 0xc1, 0xeb, 0x25, //0x00009879 shrq $37, %rbx + 0x6b, 0xcb, 0x64, //0x0000987d imull $100, %ebx, %ecx + 0x29, 0xc8, //0x00009880 subl %ecx, %eax + 0x41, 0x0f, 0xb7, 0x04, 0x43, //0x00009882 movzwl (%r11,%rax,2), %eax + 0x66, 0x41, 0x89, 0x46, 0xfe, //0x00009887 movw %ax, $-2(%r14) + 0x41, 0x0f, 0xb7, 0x04, 0x5b, //0x0000988c movzwl (%r11,%rbx,2), %eax + 0x66, 0x41, 0x89, 0x46, 0xfc, //0x00009891 movw %ax, $-4(%r14) + 0x49, 0x83, 0xc6, 0xfc, //0x00009896 addq $-4, %r14 + 0x81, 0xfa, 0xff, 0xe0, 0xf5, 0x05, //0x0000989a cmpl $99999999, %edx + 0x89, 0xfa, //0x000098a0 movl %edi, %edx + 0x0f, 0x87, 0xb8, 0xff, 0xff, 0xff, //0x000098a2 ja LBB34_9 + //0x000098a8 LBB34_10 + 0x83, 0xff, 0x64, //0x000098a8 cmpl $100, %edi + 0x0f, 0x83, 0x20, 0x00, 0x00, 0x00, //0x000098ab jae LBB34_11 + 0x83, 0xff, 0x0a, //0x000098b1 cmpl $10, %edi + 0x0f, 0x82, 0x4d, 0x00, 0x00, 0x00, //0x000098b4 jb LBB34_14 + //0x000098ba LBB34_13 + 0x89, 0xf8, //0x000098ba movl %edi, %eax + 0x48, 0x8d, 0x0d, 0xdd, 0x32, 0x00, 0x00, //0x000098bc leaq $13021(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x000098c3 movzwl (%rcx,%rax,2), %eax + 0x66, 0x41, 0x89, 0x46, 0xfe, //0x000098c7 movw %ax, $-2(%r14) + 0xe9, 0x3d, 0x00, 0x00, 0x00, //0x000098cc jmp LBB34_15 + //0x000098d1 LBB34_11 + 0x0f, 0xb7, 0xc7, //0x000098d1 movzwl %di, %eax + 0xc1, 0xe8, 0x02, //0x000098d4 shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x000098d7 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x000098dd shrl $17, %eax + 0x6b, 0xc8, 0x64, //0x000098e0 imull $100, %eax, %ecx + 0x29, 0xcf, //0x000098e3 subl %ecx, %edi + 0x0f, 0xb7, 0xcf, //0x000098e5 movzwl %di, %ecx + 0x48, 0x8d, 0x15, 0xb1, 0x32, 0x00, 0x00, //0x000098e8 leaq $12977(%rip), %rdx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4a, //0x000098ef movzwl (%rdx,%rcx,2), %ecx + 0x66, 0x41, 0x89, 0x4e, 0xfe, //0x000098f3 movw %cx, $-2(%r14) + 0x49, 0x83, 0xc6, 0xfe, //0x000098f8 addq $-2, %r14 + 0x89, 0xc7, //0x000098fc movl %eax, %edi + 0x83, 0xff, 0x0a, //0x000098fe cmpl $10, %edi + 0x0f, 0x83, 0xb3, 0xff, 0xff, 0xff, //0x00009901 jae LBB34_13 + //0x00009907 LBB34_14 + 0x40, 0x80, 0xc7, 0x30, //0x00009907 addb $48, %dil + 0x40, 0x88, 0x3e, //0x0000990b movb %dil, (%rsi) + //0x0000990e LBB34_15 + 0x4d, 0x29, 0xc8, //0x0000990e subq %r9, %r8 + 0x4c, 0x89, 0xc0, //0x00009911 movq %r8, %rax + 0x5b, //0x00009914 popq %rbx + 0x41, 0x5e, //0x00009915 popq %r14 + 0x5d, //0x00009917 popq %rbp + 0xc3, //0x00009918 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009919 .p2align 4, 0x90 + //0x00009920 _left_shift + 0x55, //0x00009920 pushq %rbp + 0x48, 0x89, 0xe5, //0x00009921 movq %rsp, %rbp + 0x41, 0x56, //0x00009924 pushq %r14 + 0x53, //0x00009926 pushq %rbx + 0x89, 0xf1, //0x00009927 movl %esi, %ecx + 0x48, 0x6b, 0xd1, 0x68, //0x00009929 imulq $104, %rcx, %rdx + 0x48, 0x8d, 0x35, 0x5c, 0x8c, 0x00, 0x00, //0x0000992d leaq $35932(%rip), %rsi /* _LSHIFT_TAB+0(%rip) */ + 0x44, 0x8b, 0x04, 0x32, //0x00009934 movl (%rdx,%rsi), %r8d + 0x4c, 0x8b, 0x17, //0x00009938 movq (%rdi), %r10 + 0x4c, 0x63, 0x4f, 0x10, //0x0000993b movslq $16(%rdi), %r9 + 0x8a, 0x44, 0x32, 0x04, //0x0000993f movb $4(%rdx,%rsi), %al + 0x4d, 0x85, 0xc9, //0x00009943 testq %r9, %r9 + 0x0f, 0x84, 0x36, 0x00, 0x00, 0x00, //0x00009946 je LBB35_6 + 0x48, 0x8d, 0x54, 0x32, 0x05, //0x0000994c leaq $5(%rdx,%rsi), %rdx + 0x31, 0xf6, //0x00009951 xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009953 .p2align 4, 0x90 + //0x00009960 LBB35_3 + 0x84, 0xc0, //0x00009960 testb %al, %al + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00009962 je LBB35_8 + 0x41, 0x38, 0x04, 0x32, //0x00009968 cmpb %al, (%r10,%rsi) + 0x0f, 0x85, 0x89, 0x01, 0x00, 0x00, //0x0000996c jne LBB35_5 + 0x0f, 0xb6, 0x04, 0x32, //0x00009972 movzbl (%rdx,%rsi), %eax + 0x48, 0xff, 0xc6, //0x00009976 incq %rsi + 0x49, 0x39, 0xf1, //0x00009979 cmpq %rsi, %r9 + 0x0f, 0x85, 0xde, 0xff, 0xff, 0xff, //0x0000997c jne LBB35_3 + //0x00009982 LBB35_6 + 0x84, 0xc0, //0x00009982 testb %al, %al + 0x0f, 0x84, 0x03, 0x00, 0x00, 0x00, //0x00009984 je LBB35_8 + //0x0000998a LBB35_7 + 0x41, 0xff, 0xc8, //0x0000998a decl %r8d + //0x0000998d LBB35_8 + 0x45, 0x85, 0xc9, //0x0000998d testl %r9d, %r9d + 0x0f, 0x8e, 0x8c, 0x00, 0x00, 0x00, //0x00009990 jle LBB35_23 + 0x43, 0x8d, 0x04, 0x08, //0x00009996 leal (%r8,%r9), %eax + 0x4c, 0x63, 0xf0, //0x0000999a movslq %eax, %r14 + 0x49, 0xff, 0xce, //0x0000999d decq %r14 + 0x31, 0xd2, //0x000099a0 xorl %edx, %edx + 0x49, 0xbb, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x000099a2 movabsq $-3689348814741910323, %r11 + 0x90, 0x90, 0x90, 0x90, //0x000099ac .p2align 4, 0x90 + //0x000099b0 LBB35_10 + 0x4b, 0x0f, 0xbe, 0x74, 0x0a, 0xff, //0x000099b0 movsbq $-1(%r10,%r9), %rsi + 0x48, 0x83, 0xc6, 0xd0, //0x000099b6 addq $-48, %rsi + 0x48, 0xd3, 0xe6, //0x000099ba shlq %cl, %rsi + 0x48, 0x01, 0xd6, //0x000099bd addq %rdx, %rsi + 0x48, 0x89, 0xf0, //0x000099c0 movq %rsi, %rax + 0x49, 0xf7, 0xe3, //0x000099c3 mulq %r11 + 0x48, 0xc1, 0xea, 0x03, //0x000099c6 shrq $3, %rdx + 0x48, 0x8d, 0x04, 0x12, //0x000099ca leaq (%rdx,%rdx), %rax + 0x48, 0x8d, 0x1c, 0x80, //0x000099ce leaq (%rax,%rax,4), %rbx + 0x48, 0x89, 0xf0, //0x000099d2 movq %rsi, %rax + 0x48, 0x29, 0xd8, //0x000099d5 subq %rbx, %rax + 0x4c, 0x39, 0x77, 0x08, //0x000099d8 cmpq %r14, $8(%rdi) + 0x0f, 0x86, 0x0e, 0x00, 0x00, 0x00, //0x000099dc jbe LBB35_16 + 0x04, 0x30, //0x000099e2 addb $48, %al + 0x43, 0x88, 0x04, 0x32, //0x000099e4 movb %al, (%r10,%r14) + 0xe9, 0x13, 0x00, 0x00, 0x00, //0x000099e8 jmp LBB35_18 + 0x90, 0x90, 0x90, //0x000099ed .p2align 4, 0x90 + //0x000099f0 LBB35_16 + 0x48, 0x85, 0xc0, //0x000099f0 testq %rax, %rax + 0x0f, 0x84, 0x07, 0x00, 0x00, 0x00, //0x000099f3 je LBB35_18 + 0xc7, 0x47, 0x1c, 0x01, 0x00, 0x00, 0x00, //0x000099f9 movl $1, $28(%rdi) + //0x00009a00 LBB35_18 + 0x49, 0x83, 0xf9, 0x02, //0x00009a00 cmpq $2, %r9 + 0x0f, 0x8c, 0x0e, 0x00, 0x00, 0x00, //0x00009a04 jl LBB35_12 + 0x49, 0xff, 0xc9, //0x00009a0a decq %r9 + 0x4c, 0x8b, 0x17, //0x00009a0d movq (%rdi), %r10 + 0x49, 0xff, 0xce, //0x00009a10 decq %r14 + 0xe9, 0x98, 0xff, 0xff, 0xff, //0x00009a13 jmp LBB35_10 + //0x00009a18 LBB35_12 + 0x48, 0x83, 0xfe, 0x0a, //0x00009a18 cmpq $10, %rsi + 0x0f, 0x83, 0x6e, 0x00, 0x00, 0x00, //0x00009a1c jae LBB35_13 + //0x00009a22 LBB35_23 + 0x48, 0x63, 0x4f, 0x10, //0x00009a22 movslq $16(%rdi), %rcx + 0x49, 0x63, 0xc0, //0x00009a26 movslq %r8d, %rax + 0x48, 0x01, 0xc8, //0x00009a29 addq %rcx, %rax + 0x89, 0x47, 0x10, //0x00009a2c movl %eax, $16(%rdi) + 0x48, 0x8b, 0x4f, 0x08, //0x00009a2f movq $8(%rdi), %rcx + 0x48, 0x39, 0xc1, //0x00009a33 cmpq %rax, %rcx + 0x0f, 0x87, 0x05, 0x00, 0x00, 0x00, //0x00009a36 ja LBB35_25 + 0x89, 0x4f, 0x10, //0x00009a3c movl %ecx, $16(%rdi) + 0x89, 0xc8, //0x00009a3f movl %ecx, %eax + //0x00009a41 LBB35_25 + 0x44, 0x01, 0x47, 0x14, //0x00009a41 addl %r8d, $20(%rdi) + 0x85, 0xc0, //0x00009a45 testl %eax, %eax + 0x0f, 0x8e, 0x36, 0x00, 0x00, 0x00, //0x00009a47 jle LBB35_29 + 0x48, 0x8b, 0x0f, //0x00009a4d movq (%rdi), %rcx + 0x89, 0xc0, //0x00009a50 movl %eax, %eax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009a52 .p2align 4, 0x90 + //0x00009a60 LBB35_27 + 0x80, 0x7c, 0x01, 0xff, 0x30, //0x00009a60 cmpb $48, $-1(%rcx,%rax) + 0x0f, 0x85, 0x20, 0x00, 0x00, 0x00, //0x00009a65 jne LBB35_31 + 0x89, 0xc2, //0x00009a6b movl %eax, %edx + 0x48, 0xff, 0xc8, //0x00009a6d decq %rax + 0xff, 0xca, //0x00009a70 decl %edx + 0x89, 0x57, 0x10, //0x00009a72 movl %edx, $16(%rdi) + 0x48, 0x8d, 0x50, 0x01, //0x00009a75 leaq $1(%rax), %rdx + 0x48, 0x83, 0xfa, 0x01, //0x00009a79 cmpq $1, %rdx + 0x0f, 0x8f, 0xdd, 0xff, 0xff, 0xff, //0x00009a7d jg LBB35_27 + //0x00009a83 LBB35_29 + 0x85, 0xc0, //0x00009a83 testl %eax, %eax + 0x0f, 0x84, 0x64, 0x00, 0x00, 0x00, //0x00009a85 je LBB35_30 + //0x00009a8b LBB35_31 + 0x5b, //0x00009a8b popq %rbx + 0x41, 0x5e, //0x00009a8c popq %r14 + 0x5d, //0x00009a8e popq %rbp + 0xc3, //0x00009a8f retq + //0x00009a90 LBB35_13 + 0x49, 0x63, 0xf6, //0x00009a90 movslq %r14d, %rsi + 0x48, 0xff, 0xce, //0x00009a93 decq %rsi + 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x00009a96 jmp LBB35_14 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009a9b .p2align 4, 0x90 + //0x00009aa0 LBB35_15 + 0x04, 0x30, //0x00009aa0 addb $48, %al + 0x48, 0x8b, 0x1f, //0x00009aa2 movq (%rdi), %rbx + 0x88, 0x04, 0x33, //0x00009aa5 movb %al, (%rbx,%rsi) + //0x00009aa8 LBB35_22 + 0x48, 0xff, 0xce, //0x00009aa8 decq %rsi + 0x48, 0x83, 0xf9, 0x09, //0x00009aab cmpq $9, %rcx + 0x0f, 0x86, 0x6d, 0xff, 0xff, 0xff, //0x00009aaf jbe LBB35_23 + //0x00009ab5 LBB35_14 + 0x48, 0x89, 0xd1, //0x00009ab5 movq %rdx, %rcx + 0x48, 0x89, 0xd0, //0x00009ab8 movq %rdx, %rax + 0x49, 0xf7, 0xe3, //0x00009abb mulq %r11 + 0x48, 0xc1, 0xea, 0x03, //0x00009abe shrq $3, %rdx + 0x48, 0x8d, 0x04, 0x12, //0x00009ac2 leaq (%rdx,%rdx), %rax + 0x48, 0x8d, 0x1c, 0x80, //0x00009ac6 leaq (%rax,%rax,4), %rbx + 0x48, 0x89, 0xc8, //0x00009aca movq %rcx, %rax + 0x48, 0x29, 0xd8, //0x00009acd subq %rbx, %rax + 0x48, 0x39, 0x77, 0x08, //0x00009ad0 cmpq %rsi, $8(%rdi) + 0x0f, 0x87, 0xc6, 0xff, 0xff, 0xff, //0x00009ad4 ja LBB35_15 + 0x48, 0x85, 0xc0, //0x00009ada testq %rax, %rax + 0x0f, 0x84, 0xc5, 0xff, 0xff, 0xff, //0x00009add je LBB35_22 + 0xc7, 0x47, 0x1c, 0x01, 0x00, 0x00, 0x00, //0x00009ae3 movl $1, $28(%rdi) + 0xe9, 0xb9, 0xff, 0xff, 0xff, //0x00009aea jmp LBB35_22 + //0x00009aef LBB35_30 + 0xc7, 0x47, 0x14, 0x00, 0x00, 0x00, 0x00, //0x00009aef movl $0, $20(%rdi) + 0x5b, //0x00009af6 popq %rbx + 0x41, 0x5e, //0x00009af7 popq %r14 + 0x5d, //0x00009af9 popq %rbp + 0xc3, //0x00009afa retq + //0x00009afb LBB35_5 + 0x0f, 0x8c, 0x89, 0xfe, 0xff, 0xff, //0x00009afb jl LBB35_7 + 0xe9, 0x87, 0xfe, 0xff, 0xff, //0x00009b01 jmp LBB35_8 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009b06 .p2align 4, 0x90 + //0x00009b10 _right_shift + 0x55, //0x00009b10 pushq %rbp + 0x48, 0x89, 0xe5, //0x00009b11 movq %rsp, %rbp + 0x89, 0xf1, //0x00009b14 movl %esi, %ecx + 0x4c, 0x63, 0x4f, 0x10, //0x00009b16 movslq $16(%rdi), %r9 + 0x31, 0xf6, //0x00009b1a xorl %esi, %esi + 0x31, 0xc0, //0x00009b1c xorl %eax, %eax + 0x90, 0x90, //0x00009b1e .p2align 4, 0x90 + //0x00009b20 LBB36_1 + 0x4c, 0x39, 0xce, //0x00009b20 cmpq %r9, %rsi + 0x0f, 0x8d, 0x27, 0x01, 0x00, 0x00, //0x00009b23 jge LBB36_2 + 0x48, 0x8d, 0x04, 0x80, //0x00009b29 leaq (%rax,%rax,4), %rax + 0x48, 0x8b, 0x17, //0x00009b2d movq (%rdi), %rdx + 0x48, 0x0f, 0xbe, 0x14, 0x32, //0x00009b30 movsbq (%rdx,%rsi), %rdx + 0x48, 0x8d, 0x44, 0x42, 0xd0, //0x00009b35 leaq $-48(%rdx,%rax,2), %rax + 0x48, 0xff, 0xc6, //0x00009b3a incq %rsi + 0x48, 0x89, 0xc2, //0x00009b3d movq %rax, %rdx + 0x48, 0xd3, 0xea, //0x00009b40 shrq %cl, %rdx + 0x48, 0x85, 0xd2, //0x00009b43 testq %rdx, %rdx + 0x0f, 0x84, 0xd4, 0xff, 0xff, 0xff, //0x00009b46 je LBB36_1 + //0x00009b4c LBB36_6 + 0x8b, 0x57, 0x14, //0x00009b4c movl $20(%rdi), %edx + 0x29, 0xf2, //0x00009b4f subl %esi, %edx + 0xff, 0xc2, //0x00009b51 incl %edx + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00009b53 movq $-1, %r8 + 0x49, 0xd3, 0xe0, //0x00009b5a shlq %cl, %r8 + 0x89, 0x57, 0x14, //0x00009b5d movl %edx, $20(%rdi) + 0x49, 0xf7, 0xd0, //0x00009b60 notq %r8 + 0x45, 0x31, 0xd2, //0x00009b63 xorl %r10d, %r10d + 0x44, 0x39, 0xce, //0x00009b66 cmpl %r9d, %esi + 0x0f, 0x8d, 0x69, 0x00, 0x00, 0x00, //0x00009b69 jge LBB36_9 + 0x4c, 0x63, 0xce, //0x00009b6f movslq %esi, %r9 + 0x48, 0x8b, 0x37, //0x00009b72 movq (%rdi), %rsi + 0x45, 0x31, 0xd2, //0x00009b75 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009b78 .p2align 4, 0x90 + //0x00009b80 LBB36_8 + 0x48, 0x89, 0xc2, //0x00009b80 movq %rax, %rdx + 0x48, 0xd3, 0xea, //0x00009b83 shrq %cl, %rdx + 0x4c, 0x21, 0xc0, //0x00009b86 andq %r8, %rax + 0x80, 0xc2, 0x30, //0x00009b89 addb $48, %dl + 0x42, 0x88, 0x14, 0x16, //0x00009b8c movb %dl, (%rsi,%r10) + 0x48, 0x8d, 0x04, 0x80, //0x00009b90 leaq (%rax,%rax,4), %rax + 0x48, 0x8b, 0x37, //0x00009b94 movq (%rdi), %rsi + 0x4a, 0x8d, 0x14, 0x0e, //0x00009b97 leaq (%rsi,%r9), %rdx + 0x49, 0x0f, 0xbe, 0x14, 0x12, //0x00009b9b movsbq (%r10,%rdx), %rdx + 0x48, 0x8d, 0x44, 0x42, 0xd0, //0x00009ba0 leaq $-48(%rdx,%rax,2), %rax + 0x4c, 0x63, 0x5f, 0x10, //0x00009ba5 movslq $16(%rdi), %r11 + 0x4b, 0x8d, 0x54, 0x11, 0x01, //0x00009ba9 leaq $1(%r9,%r10), %rdx + 0x49, 0xff, 0xc2, //0x00009bae incq %r10 + 0x4c, 0x39, 0xda, //0x00009bb1 cmpq %r11, %rdx + 0x0f, 0x8c, 0xc6, 0xff, 0xff, 0xff, //0x00009bb4 jl LBB36_8 + 0xe9, 0x19, 0x00, 0x00, 0x00, //0x00009bba jmp LBB36_9 + 0x90, //0x00009bbf .p2align 4, 0x90 + //0x00009bc0 LBB36_11 + 0x40, 0x80, 0xc6, 0x30, //0x00009bc0 addb $48, %sil + 0x48, 0x8b, 0x17, //0x00009bc4 movq (%rdi), %rdx + 0x42, 0x88, 0x34, 0x0a, //0x00009bc7 movb %sil, (%rdx,%r9) + 0x41, 0xff, 0xc1, //0x00009bcb incl %r9d + 0x45, 0x89, 0xca, //0x00009bce movl %r9d, %r10d + //0x00009bd1 LBB36_14 + 0x48, 0x01, 0xc0, //0x00009bd1 addq %rax, %rax + 0x48, 0x8d, 0x04, 0x80, //0x00009bd4 leaq (%rax,%rax,4), %rax + //0x00009bd8 LBB36_9 + 0x48, 0x85, 0xc0, //0x00009bd8 testq %rax, %rax + 0x0f, 0x84, 0x2b, 0x00, 0x00, 0x00, //0x00009bdb je LBB36_15 + 0x48, 0x89, 0xc6, //0x00009be1 movq %rax, %rsi + 0x48, 0xd3, 0xee, //0x00009be4 shrq %cl, %rsi + 0x4c, 0x21, 0xc0, //0x00009be7 andq %r8, %rax + 0x4d, 0x63, 0xca, //0x00009bea movslq %r10d, %r9 + 0x4c, 0x39, 0x4f, 0x08, //0x00009bed cmpq %r9, $8(%rdi) + 0x0f, 0x87, 0xc9, 0xff, 0xff, 0xff, //0x00009bf1 ja LBB36_11 + 0x48, 0x85, 0xf6, //0x00009bf7 testq %rsi, %rsi + 0x0f, 0x84, 0xd1, 0xff, 0xff, 0xff, //0x00009bfa je LBB36_14 + 0xc7, 0x47, 0x1c, 0x01, 0x00, 0x00, 0x00, //0x00009c00 movl $1, $28(%rdi) + 0xe9, 0xc5, 0xff, 0xff, 0xff, //0x00009c07 jmp LBB36_14 + //0x00009c0c LBB36_15 + 0x44, 0x89, 0x57, 0x10, //0x00009c0c movl %r10d, $16(%rdi) + 0x45, 0x85, 0xd2, //0x00009c10 testl %r10d, %r10d + 0x0f, 0x8e, 0x2c, 0x00, 0x00, 0x00, //0x00009c13 jle LBB36_19 + 0x48, 0x8b, 0x07, //0x00009c19 movq (%rdi), %rax + 0x45, 0x89, 0xd2, //0x00009c1c movl %r10d, %r10d + 0x90, //0x00009c1f .p2align 4, 0x90 + //0x00009c20 LBB36_17 + 0x42, 0x80, 0x7c, 0x10, 0xff, 0x30, //0x00009c20 cmpb $48, $-1(%rax,%r10) + 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00009c26 jne LBB36_21 + 0x44, 0x89, 0xd1, //0x00009c2c movl %r10d, %ecx + 0x49, 0xff, 0xca, //0x00009c2f decq %r10 + 0xff, 0xc9, //0x00009c32 decl %ecx + 0x89, 0x4f, 0x10, //0x00009c34 movl %ecx, $16(%rdi) + 0x49, 0x8d, 0x4a, 0x01, //0x00009c37 leaq $1(%r10), %rcx + 0x48, 0x83, 0xf9, 0x01, //0x00009c3b cmpq $1, %rcx + 0x0f, 0x8f, 0xdb, 0xff, 0xff, 0xff, //0x00009c3f jg LBB36_17 + //0x00009c45 LBB36_19 + 0x45, 0x85, 0xd2, //0x00009c45 testl %r10d, %r10d + 0x0f, 0x84, 0x3e, 0x00, 0x00, 0x00, //0x00009c48 je LBB36_20 + //0x00009c4e LBB36_21 + 0x5d, //0x00009c4e popq %rbp + 0xc3, //0x00009c4f retq + //0x00009c50 LBB36_2 + 0x48, 0x85, 0xc0, //0x00009c50 testq %rax, %rax + 0x0f, 0x84, 0x3c, 0x00, 0x00, 0x00, //0x00009c53 je LBB36_22 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009c59 .p2align 4, 0x90 + 0x48, 0x89, 0xc2, //0x00009c60 movq %rax, %rdx + 0x48, 0xd3, 0xea, //0x00009c63 shrq %cl, %rdx + 0x48, 0x85, 0xd2, //0x00009c66 testq %rdx, %rdx + 0x0f, 0x85, 0xdd, 0xfe, 0xff, 0xff, //0x00009c69 jne LBB36_6 + //0x00009c6f LBB36_4 + 0x48, 0x01, 0xc0, //0x00009c6f addq %rax, %rax + 0x48, 0x8d, 0x04, 0x80, //0x00009c72 leaq (%rax,%rax,4), %rax + 0xff, 0xc6, //0x00009c76 incl %esi + 0x48, 0x89, 0xc2, //0x00009c78 movq %rax, %rdx + 0x48, 0xd3, 0xea, //0x00009c7b shrq %cl, %rdx + 0x48, 0x85, 0xd2, //0x00009c7e testq %rdx, %rdx + 0x0f, 0x84, 0xe8, 0xff, 0xff, 0xff, //0x00009c81 je LBB36_4 + 0xe9, 0xc0, 0xfe, 0xff, 0xff, //0x00009c87 jmp LBB36_6 + //0x00009c8c LBB36_20 + 0xc7, 0x47, 0x14, 0x00, 0x00, 0x00, 0x00, //0x00009c8c movl $0, $20(%rdi) + 0x5d, //0x00009c93 popq %rbp + 0xc3, //0x00009c94 retq + //0x00009c95 LBB36_22 + 0xc7, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, //0x00009c95 movl $0, $16(%rdi) + 0x5d, //0x00009c9c popq %rbp + 0xc3, //0x00009c9d retq + 0x00, 0x00, //0x00009c9e .p2align 5, 0x00 + //0x00009ca0 LCPI37_0 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x00009ca0 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x00009cb0 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x00009cc0 LCPI37_1 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x00009cc0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x00009cd0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x00009ce0 .p2align 4, 0x90 + //0x00009ce0 _advance_string_default + 0x55, //0x00009ce0 pushq %rbp + 0x48, 0x89, 0xe5, //0x00009ce1 movq %rsp, %rbp + 0x41, 0x57, //0x00009ce4 pushq %r15 + 0x41, 0x56, //0x00009ce6 pushq %r14 + 0x41, 0x55, //0x00009ce8 pushq %r13 + 0x41, 0x54, //0x00009cea pushq %r12 + 0x53, //0x00009cec pushq %rbx + 0x4c, 0x8b, 0x67, 0x08, //0x00009ced movq $8(%rdi), %r12 + 0x49, 0x29, 0xf4, //0x00009cf1 subq %rsi, %r12 + 0x0f, 0x84, 0xcf, 0x02, 0x00, 0x00, //0x00009cf4 je LBB37_18 + 0x4c, 0x8b, 0x07, //0x00009cfa movq (%rdi), %r8 + 0x4c, 0x01, 0xc6, //0x00009cfd addq %r8, %rsi + 0x48, 0xc7, 0x02, 0xff, 0xff, 0xff, 0xff, //0x00009d00 movq $-1, (%rdx) + 0x49, 0x83, 0xfc, 0x40, //0x00009d07 cmpq $64, %r12 + 0x0f, 0x82, 0x78, 0x01, 0x00, 0x00, //0x00009d0b jb LBB37_19 + 0x45, 0x89, 0xe1, //0x00009d11 movl %r12d, %r9d + 0x41, 0x83, 0xe1, 0x3f, //0x00009d14 andl $63, %r9d + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00009d18 movq $-1, %r14 + 0x45, 0x31, 0xff, //0x00009d1f xorl %r15d, %r15d + 0xc5, 0xfd, 0x6f, 0x05, 0x76, 0xff, 0xff, 0xff, //0x00009d22 vmovdqa $-138(%rip), %ymm0 /* LCPI37_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x0d, 0x8e, 0xff, 0xff, 0xff, //0x00009d2a vmovdqa $-114(%rip), %ymm1 /* LCPI37_1+0(%rip) */ + 0x49, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00009d32 movabsq $-6148914691236517206, %r10 + 0x49, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00009d3c movabsq $6148914691236517205, %r11 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009d46 .p2align 4, 0x90 + //0x00009d50 LBB37_3 + 0xc5, 0xfe, 0x6f, 0x16, //0x00009d50 vmovdqu (%rsi), %ymm2 + 0xc5, 0xfe, 0x6f, 0x5e, 0x20, //0x00009d54 vmovdqu $32(%rsi), %ymm3 + 0xc5, 0xed, 0x74, 0xe0, //0x00009d59 vpcmpeqb %ymm0, %ymm2, %ymm4 + 0xc5, 0xfd, 0xd7, 0xc4, //0x00009d5d vpmovmskb %ymm4, %eax + 0xc5, 0xe5, 0x74, 0xe0, //0x00009d61 vpcmpeqb %ymm0, %ymm3, %ymm4 + 0xc5, 0xfd, 0xd7, 0xdc, //0x00009d65 vpmovmskb %ymm4, %ebx + 0xc5, 0xed, 0x74, 0xd1, //0x00009d69 vpcmpeqb %ymm1, %ymm2, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00009d6d vpmovmskb %ymm2, %edi + 0xc5, 0xe5, 0x74, 0xd1, //0x00009d71 vpcmpeqb %ymm1, %ymm3, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00009d75 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe3, 0x20, //0x00009d79 shlq $32, %rbx + 0x48, 0xc1, 0xe1, 0x20, //0x00009d7d shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x00009d81 orq %rcx, %rdi + 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00009d84 je LBB37_5 + 0x49, 0x83, 0xfe, 0xff, //0x00009d8a cmpq $-1, %r14 + 0x0f, 0x84, 0x2f, 0x00, 0x00, 0x00, //0x00009d8e je LBB37_8 + //0x00009d94 LBB37_5 + 0x48, 0x09, 0xc3, //0x00009d94 orq %rax, %rbx + 0x48, 0x89, 0xf8, //0x00009d97 movq %rdi, %rax + 0x4c, 0x09, 0xf8, //0x00009d9a orq %r15, %rax + 0x0f, 0x85, 0x3f, 0x00, 0x00, 0x00, //0x00009d9d jne LBB37_9 + //0x00009da3 LBB37_6 + 0x48, 0x85, 0xdb, //0x00009da3 testq %rbx, %rbx + 0x0f, 0x85, 0x74, 0x00, 0x00, 0x00, //0x00009da6 jne LBB37_10 + //0x00009dac LBB37_7 + 0x48, 0x83, 0xc6, 0x40, //0x00009dac addq $64, %rsi + 0x49, 0x83, 0xc4, 0xc0, //0x00009db0 addq $-64, %r12 + 0x49, 0x83, 0xfc, 0x3f, //0x00009db4 cmpq $63, %r12 + 0x0f, 0x87, 0x92, 0xff, 0xff, 0xff, //0x00009db8 ja LBB37_3 + 0xe9, 0x77, 0x00, 0x00, 0x00, //0x00009dbe jmp LBB37_13 + //0x00009dc3 LBB37_8 + 0x48, 0x89, 0xf1, //0x00009dc3 movq %rsi, %rcx + 0x4c, 0x29, 0xc1, //0x00009dc6 subq %r8, %rcx + 0x4c, 0x0f, 0xbc, 0xf7, //0x00009dc9 bsfq %rdi, %r14 + 0x49, 0x01, 0xce, //0x00009dcd addq %rcx, %r14 + 0x4c, 0x89, 0x32, //0x00009dd0 movq %r14, (%rdx) + 0x48, 0x09, 0xc3, //0x00009dd3 orq %rax, %rbx + 0x48, 0x89, 0xf8, //0x00009dd6 movq %rdi, %rax + 0x4c, 0x09, 0xf8, //0x00009dd9 orq %r15, %rax + 0x0f, 0x84, 0xc1, 0xff, 0xff, 0xff, //0x00009ddc je LBB37_6 + //0x00009de2 LBB37_9 + 0x4c, 0x89, 0xf8, //0x00009de2 movq %r15, %rax + 0x48, 0xf7, 0xd0, //0x00009de5 notq %rax + 0x48, 0x21, 0xf8, //0x00009de8 andq %rdi, %rax + 0x4c, 0x8d, 0x2c, 0x00, //0x00009deb leaq (%rax,%rax), %r13 + 0x4d, 0x09, 0xfd, //0x00009def orq %r15, %r13 + 0x4c, 0x89, 0xe9, //0x00009df2 movq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x00009df5 notq %rcx + 0x48, 0x21, 0xf9, //0x00009df8 andq %rdi, %rcx + 0x4c, 0x21, 0xd1, //0x00009dfb andq %r10, %rcx + 0x45, 0x31, 0xff, //0x00009dfe xorl %r15d, %r15d + 0x48, 0x01, 0xc1, //0x00009e01 addq %rax, %rcx + 0x41, 0x0f, 0x92, 0xc7, //0x00009e04 setb %r15b + 0x48, 0x01, 0xc9, //0x00009e08 addq %rcx, %rcx + 0x4c, 0x31, 0xd9, //0x00009e0b xorq %r11, %rcx + 0x4c, 0x21, 0xe9, //0x00009e0e andq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x00009e11 notq %rcx + 0x48, 0x21, 0xcb, //0x00009e14 andq %rcx, %rbx + 0x48, 0x85, 0xdb, //0x00009e17 testq %rbx, %rbx + 0x0f, 0x84, 0x8c, 0xff, 0xff, 0xff, //0x00009e1a je LBB37_7 + //0x00009e20 LBB37_10 + 0x48, 0x0f, 0xbc, 0xc3, //0x00009e20 bsfq %rbx, %rax + //0x00009e24 LBB37_11 + 0x4c, 0x29, 0xc6, //0x00009e24 subq %r8, %rsi + 0x48, 0x8d, 0x44, 0x06, 0x01, //0x00009e27 leaq $1(%rsi,%rax), %rax + //0x00009e2c LBB37_12 + 0x5b, //0x00009e2c popq %rbx + 0x41, 0x5c, //0x00009e2d popq %r12 + 0x41, 0x5d, //0x00009e2f popq %r13 + 0x41, 0x5e, //0x00009e31 popq %r14 + 0x41, 0x5f, //0x00009e33 popq %r15 + 0x5d, //0x00009e35 popq %rbp + 0xc5, 0xf8, 0x77, //0x00009e36 vzeroupper + 0xc3, //0x00009e39 retq + //0x00009e3a LBB37_13 + 0x4d, 0x89, 0xcc, //0x00009e3a movq %r9, %r12 + 0x49, 0x83, 0xfc, 0x20, //0x00009e3d cmpq $32, %r12 + 0x0f, 0x82, 0xb7, 0x00, 0x00, 0x00, //0x00009e41 jb LBB37_24 + //0x00009e47 LBB37_14 + 0xc5, 0xfe, 0x6f, 0x06, //0x00009e47 vmovdqu (%rsi), %ymm0 + 0xc5, 0xfd, 0x74, 0x0d, 0x4d, 0xfe, 0xff, 0xff, //0x00009e4b vpcmpeqb $-435(%rip), %ymm0, %ymm1 /* LCPI37_0+0(%rip) */ + 0xc5, 0x7d, 0xd7, 0xc9, //0x00009e53 vpmovmskb %ymm1, %r9d + 0xc5, 0xfd, 0x74, 0x05, 0x61, 0xfe, 0xff, 0xff, //0x00009e57 vpcmpeqb $-415(%rip), %ymm0, %ymm0 /* LCPI37_1+0(%rip) */ + 0xc5, 0xfd, 0xd7, 0xf8, //0x00009e5f vpmovmskb %ymm0, %edi + 0x85, 0xff, //0x00009e63 testl %edi, %edi + 0x0f, 0x85, 0x37, 0x00, 0x00, 0x00, //0x00009e65 jne LBB37_20 + 0x4d, 0x85, 0xff, //0x00009e6b testq %r15, %r15 + 0x0f, 0x85, 0x48, 0x00, 0x00, 0x00, //0x00009e6e jne LBB37_22 + 0x45, 0x31, 0xff, //0x00009e74 xorl %r15d, %r15d + 0x4d, 0x85, 0xc9, //0x00009e77 testq %r9, %r9 + 0x0f, 0x84, 0x76, 0x00, 0x00, 0x00, //0x00009e7a je LBB37_23 + //0x00009e80 LBB37_17 + 0x49, 0x0f, 0xbc, 0xc1, //0x00009e80 bsfq %r9, %rax + 0xe9, 0x9b, 0xff, 0xff, 0xff, //0x00009e84 jmp LBB37_11 + //0x00009e89 LBB37_19 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00009e89 movq $-1, %r14 + 0x45, 0x31, 0xff, //0x00009e90 xorl %r15d, %r15d + 0x49, 0x83, 0xfc, 0x20, //0x00009e93 cmpq $32, %r12 + 0x0f, 0x83, 0xaa, 0xff, 0xff, 0xff, //0x00009e97 jae LBB37_14 + 0xe9, 0x5c, 0x00, 0x00, 0x00, //0x00009e9d jmp LBB37_24 + //0x00009ea2 LBB37_20 + 0x49, 0x83, 0xfe, 0xff, //0x00009ea2 cmpq $-1, %r14 + 0x0f, 0x85, 0x10, 0x00, 0x00, 0x00, //0x00009ea6 jne LBB37_22 + 0x48, 0x89, 0xf0, //0x00009eac movq %rsi, %rax + 0x4c, 0x29, 0xc0, //0x00009eaf subq %r8, %rax + 0x4c, 0x0f, 0xbc, 0xf7, //0x00009eb2 bsfq %rdi, %r14 + 0x49, 0x01, 0xc6, //0x00009eb6 addq %rax, %r14 + 0x4c, 0x89, 0x32, //0x00009eb9 movq %r14, (%rdx) + //0x00009ebc LBB37_22 + 0x44, 0x89, 0xf8, //0x00009ebc movl %r15d, %eax + 0xf7, 0xd0, //0x00009ebf notl %eax + 0x21, 0xf8, //0x00009ec1 andl %edi, %eax + 0x8d, 0x1c, 0x00, //0x00009ec3 leal (%rax,%rax), %ebx + 0x44, 0x09, 0xfb, //0x00009ec6 orl %r15d, %ebx + 0x89, 0xd9, //0x00009ec9 movl %ebx, %ecx + 0xf7, 0xd1, //0x00009ecb notl %ecx + 0x21, 0xf9, //0x00009ecd andl %edi, %ecx + 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00009ecf andl $-1431655766, %ecx + 0x45, 0x31, 0xff, //0x00009ed5 xorl %r15d, %r15d + 0x01, 0xc1, //0x00009ed8 addl %eax, %ecx + 0x41, 0x0f, 0x92, 0xc7, //0x00009eda setb %r15b + 0x01, 0xc9, //0x00009ede addl %ecx, %ecx + 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00009ee0 xorl $1431655765, %ecx + 0x21, 0xd9, //0x00009ee6 andl %ebx, %ecx + 0xf7, 0xd1, //0x00009ee8 notl %ecx + 0x41, 0x21, 0xc9, //0x00009eea andl %ecx, %r9d + 0x4d, 0x85, 0xc9, //0x00009eed testq %r9, %r9 + 0x0f, 0x85, 0x8a, 0xff, 0xff, 0xff, //0x00009ef0 jne LBB37_17 + //0x00009ef6 LBB37_23 + 0x48, 0x83, 0xc6, 0x20, //0x00009ef6 addq $32, %rsi + 0x49, 0x83, 0xc4, 0xe0, //0x00009efa addq $-32, %r12 + //0x00009efe LBB37_24 + 0x4d, 0x85, 0xff, //0x00009efe testq %r15, %r15 + 0x0f, 0x85, 0x88, 0x00, 0x00, 0x00, //0x00009f01 jne LBB37_35 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00009f07 movq $-1, %rax + 0x4d, 0x85, 0xe4, //0x00009f0e testq %r12, %r12 + 0x0f, 0x84, 0x15, 0xff, 0xff, 0xff, //0x00009f11 je LBB37_12 + //0x00009f17 LBB37_26 + 0x4d, 0x89, 0xc1, //0x00009f17 movq %r8, %r9 + 0x49, 0xf7, 0xd1, //0x00009f1a notq %r9 + //0x00009f1d LBB37_27 + 0x48, 0x8d, 0x7e, 0x01, //0x00009f1d leaq $1(%rsi), %rdi + 0x0f, 0xb6, 0x1e, //0x00009f21 movzbl (%rsi), %ebx + 0x80, 0xfb, 0x22, //0x00009f24 cmpb $34, %bl + 0x0f, 0x84, 0x57, 0x00, 0x00, 0x00, //0x00009f27 je LBB37_34 + 0x4d, 0x8d, 0x54, 0x24, 0xff, //0x00009f2d leaq $-1(%r12), %r10 + 0x80, 0xfb, 0x5c, //0x00009f32 cmpb $92, %bl + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00009f35 je LBB37_30 + 0x4d, 0x89, 0xd4, //0x00009f3b movq %r10, %r12 + 0x48, 0x89, 0xfe, //0x00009f3e movq %rdi, %rsi + 0x4d, 0x85, 0xd2, //0x00009f41 testq %r10, %r10 + 0x0f, 0x85, 0xd3, 0xff, 0xff, 0xff, //0x00009f44 jne LBB37_27 + 0xe9, 0xdd, 0xfe, 0xff, 0xff, //0x00009f4a jmp LBB37_12 + //0x00009f4f LBB37_30 + 0x4d, 0x85, 0xd2, //0x00009f4f testq %r10, %r10 + 0x0f, 0x84, 0xd4, 0xfe, 0xff, 0xff, //0x00009f52 je LBB37_12 + 0x49, 0x83, 0xfe, 0xff, //0x00009f58 cmpq $-1, %r14 + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00009f5c jne LBB37_33 + 0x4c, 0x01, 0xcf, //0x00009f62 addq %r9, %rdi + 0x48, 0x89, 0x3a, //0x00009f65 movq %rdi, (%rdx) + 0x49, 0x89, 0xfe, //0x00009f68 movq %rdi, %r14 + //0x00009f6b LBB37_33 + 0x48, 0x83, 0xc6, 0x02, //0x00009f6b addq $2, %rsi + 0x49, 0x83, 0xc4, 0xfe, //0x00009f6f addq $-2, %r12 + 0x4d, 0x89, 0xe2, //0x00009f73 movq %r12, %r10 + 0x4d, 0x85, 0xd2, //0x00009f76 testq %r10, %r10 + 0x0f, 0x85, 0x9e, 0xff, 0xff, 0xff, //0x00009f79 jne LBB37_27 + 0xe9, 0xa8, 0xfe, 0xff, 0xff, //0x00009f7f jmp LBB37_12 + //0x00009f84 LBB37_34 + 0x4c, 0x29, 0xc7, //0x00009f84 subq %r8, %rdi + 0x48, 0x89, 0xf8, //0x00009f87 movq %rdi, %rax + 0xe9, 0x9d, 0xfe, 0xff, 0xff, //0x00009f8a jmp LBB37_12 + //0x00009f8f LBB37_35 + 0x4d, 0x85, 0xe4, //0x00009f8f testq %r12, %r12 + 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x00009f92 je LBB37_18 + 0x49, 0x83, 0xfe, 0xff, //0x00009f98 cmpq $-1, %r14 + 0x0f, 0x85, 0x0c, 0x00, 0x00, 0x00, //0x00009f9c jne LBB37_38 + 0x4d, 0x89, 0xc6, //0x00009fa2 movq %r8, %r14 + 0x49, 0xf7, 0xd6, //0x00009fa5 notq %r14 + 0x49, 0x01, 0xf6, //0x00009fa8 addq %rsi, %r14 + 0x4c, 0x89, 0x32, //0x00009fab movq %r14, (%rdx) + //0x00009fae LBB37_38 + 0x48, 0xff, 0xc6, //0x00009fae incq %rsi + 0x49, 0xff, 0xcc, //0x00009fb1 decq %r12 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00009fb4 movq $-1, %rax + 0x4d, 0x85, 0xe4, //0x00009fbb testq %r12, %r12 + 0x0f, 0x85, 0x53, 0xff, 0xff, 0xff, //0x00009fbe jne LBB37_26 + 0xe9, 0x63, 0xfe, 0xff, 0xff, //0x00009fc4 jmp LBB37_12 + //0x00009fc9 LBB37_18 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00009fc9 movq $-1, %rax + 0xe9, 0x57, 0xfe, 0xff, 0xff, //0x00009fd0 jmp LBB37_12 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00009fd5 .p2align 4, 0x00 + //0x00009fe0 _POW10_M128_TAB + 0x53, 0xe4, 0x60, 0xcd, 0x69, 0xc8, 0x32, 0x17, //0x00009fe0 .quad 1671618768450675795 + 0x88, 0x02, 0x1c, 0x08, 0xa0, 0xd5, 0x8f, 0xfa, //0x00009fe8 .quad -391859759250406776 + 0xb4, 0x8e, 0x5c, 0x20, 0x42, 0xbd, 0x7f, 0x0e, //0x00009ff0 .quad 1044761730281672372 + 0x95, 0x81, 0x11, 0x05, 0x84, 0xe5, 0x99, 0x9c, //0x00009ff8 .quad -7162441377172586091 + 0x61, 0xb2, 0x73, 0xa8, 0x92, 0xac, 0x1f, 0x52, //0x0000a000 .quad 5917638181279478369 + 0xfa, 0xe1, 0x55, 0x06, 0xe5, 0x5e, 0xc0, 0xc3, //0x0000a008 .quad -4341365703038344710 + 0xf9, 0x9e, 0x90, 0x52, 0xb7, 0x97, 0xa7, 0xe6, //0x0000a010 .quad -1826324310255427847 + 0x78, 0x5a, 0xeb, 0x47, 0x9e, 0x76, 0xb0, 0xf4, //0x0000a018 .quad -815021110370542984 + 0x5c, 0x63, 0x9a, 0x93, 0xd2, 0xbe, 0x28, 0x90, //0x0000a020 .quad -8058981721550724260 + 0x8b, 0x18, 0xf3, 0xec, 0x22, 0x4a, 0xee, 0x98, //0x0000a028 .quad -7426917221622671221 + 0x33, 0xfc, 0x80, 0x38, 0x87, 0xee, 0x32, 0x74, //0x0000a030 .quad 8373016921771146291 + 0xae, 0xde, 0x2f, 0xa8, 0xab, 0xdc, 0x29, 0xbf, //0x0000a038 .quad -4671960508600951122 + 0x3f, 0x3b, 0xa1, 0x06, 0x29, 0xaa, 0x3f, 0x11, //0x0000a040 .quad 1242899115359157055 + 0x5a, 0xd6, 0x3b, 0x92, 0xd6, 0x53, 0xf4, 0xee, //0x0000a048 .quad -1228264617323800998 + 0x07, 0xc5, 0x24, 0xa4, 0x59, 0xca, 0xc7, 0x4a, //0x0000a050 .quad 5388497965526861063 + 0xf8, 0x65, 0x65, 0x1b, 0x66, 0xb4, 0x58, 0x95, //0x0000a058 .quad -7685194413468457480 + 0x49, 0xf6, 0x2d, 0x0d, 0xf0, 0xbc, 0x79, 0x5d, //0x0000a060 .quad 6735622456908576329 + 0x76, 0xbf, 0x3e, 0xa2, 0x7f, 0xe1, 0xae, 0xba, //0x0000a068 .quad -4994806998408183946 + 0xdc, 0x73, 0x79, 0x10, 0x2c, 0x2c, 0xd8, 0xf4, //0x0000a070 .quad -803843965719055396 + 0x53, 0x6f, 0xce, 0x8a, 0xdf, 0x99, 0x5a, 0xe9, //0x0000a078 .quad -1631822729582842029 + 0x69, 0xe8, 0x4b, 0x8a, 0x9b, 0x1b, 0x07, 0x79, //0x0000a080 .quad 8720969558280366185 + 0x94, 0x05, 0xc1, 0xb6, 0x2b, 0xa0, 0xd8, 0x91, //0x0000a088 .quad -7937418233630358124 + 0x84, 0xe2, 0xde, 0x6c, 0x82, 0xe2, 0x48, 0x97, //0x0000a090 .quad -7545532125859093884 + 0xf9, 0x46, 0x71, 0xa4, 0x36, 0xc8, 0x4e, 0xb6, //0x0000a098 .quad -5310086773610559751 + 0x25, 0x9b, 0x16, 0x08, 0x23, 0x1b, 0x1b, 0xfd, //0x0000a0a0 .quad -208543120469091547 + 0xb7, 0x98, 0x8d, 0x4d, 0x44, 0x7a, 0xe2, 0xe3, //0x0000a0a8 .quad -2025922448585811785 + 0xf7, 0x20, 0x0e, 0xe5, 0xf5, 0xf0, 0x30, 0xfe, //0x0000a0b0 .quad -130339450293182217 + 0x72, 0x7f, 0x78, 0xb0, 0x6a, 0x8c, 0x6d, 0x8e, //0x0000a0b8 .quad -8183730558007214222 + 0x35, 0xa9, 0x51, 0x5e, 0x33, 0x2d, 0xbd, 0xbd, //0x0000a0c0 .quad -4774610331293865675 + 0x4f, 0x9f, 0x96, 0x5c, 0x85, 0xef, 0x08, 0xb2, //0x0000a0c8 .quad -5617977179081629873 + 0x82, 0x13, 0xe6, 0x35, 0x80, 0x78, 0x2c, 0xad, //0x0000a0d0 .quad -5968262914117332094 + 0x23, 0x47, 0xbc, 0xb3, 0x66, 0x2b, 0x8b, 0xde, //0x0000a0d8 .quad -2410785455424649437 + 0x31, 0xcc, 0xaf, 0x21, 0x50, 0xcb, 0x3b, 0x4c, //0x0000a0e0 .quad 5493207715531443249 + 0x76, 0xac, 0x55, 0x30, 0x20, 0xfb, 0x16, 0x8b, //0x0000a0e8 .quad -8424269937281487754 + 0x3d, 0xbf, 0x1b, 0x2a, 0x24, 0xbe, 0x4a, 0xdf, //0x0000a0f0 .quad -2356862392440471747 + 0x93, 0x17, 0x6b, 0x3c, 0xe8, 0xb9, 0xdc, 0xad, //0x0000a0f8 .quad -5918651403174471789 + 0x0d, 0xaf, 0xa2, 0x34, 0xad, 0x6d, 0x1d, 0xd7, //0x0000a100 .quad -2946077990550589683 + 0x78, 0xdd, 0x85, 0x4b, 0x62, 0xe8, 0x53, 0xd9, //0x0000a108 .quad -2786628235540701832 + 0x68, 0xad, 0xe5, 0x40, 0x8c, 0x64, 0x72, 0x86, //0x0000a110 .quad -8758827771735200408 + 0x6b, 0xaa, 0x33, 0x6f, 0x3d, 0x71, 0xd4, 0x87, //0x0000a118 .quad -8659171674854020501 + 0xc2, 0x18, 0x1f, 0x51, 0xaf, 0xfd, 0x0e, 0x68, //0x0000a120 .quad 7498209359040551106 + 0x06, 0x95, 0x00, 0xcb, 0x8c, 0x8d, 0xc9, 0xa9, //0x0000a128 .quad -6212278575140137722 + 0xf2, 0xde, 0x66, 0x25, 0x1b, 0xbd, 0x12, 0x02, //0x0000a130 .quad 149389661945913074 + 0x48, 0xba, 0xc0, 0xfd, 0xef, 0xf0, 0x3b, 0xd4, //0x0000a138 .quad -3153662200497784248 + 0x57, 0x4b, 0x60, 0xf7, 0x30, 0xb6, 0x4b, 0x01, //0x0000a140 .quad 93368538716195671 + 0x6d, 0x74, 0x98, 0xfe, 0x95, 0x76, 0xa5, 0x84, //0x0000a148 .quad -8888567902952197011 + 0x2d, 0x5e, 0x38, 0x35, 0xbd, 0xa3, 0x9e, 0x41, //0x0000a150 .quad 4728396691822632493 + 0x88, 0x91, 0x3e, 0x7e, 0x3b, 0xd4, 0xce, 0xa5, //0x0000a158 .quad -6499023860262858360 + 0xb9, 0x75, 0x86, 0x82, 0xac, 0x4c, 0x06, 0x52, //0x0000a160 .quad 5910495864778290617 + 0xea, 0x35, 0xce, 0x5d, 0x4a, 0x89, 0x42, 0xcf, //0x0000a168 .quad -3512093806901185046 + 0x93, 0x09, 0x94, 0xd1, 0xeb, 0xef, 0x43, 0x73, //0x0000a170 .quad 8305745933913819539 + 0xb2, 0xe1, 0xa0, 0x7a, 0xce, 0x95, 0x89, 0x81, //0x0000a178 .quad -9112587656954322510 + 0xf8, 0x0b, 0xf9, 0xc5, 0xe6, 0xeb, 0x14, 0x10, //0x0000a180 .quad 1158810380537498616 + 0x1f, 0x1a, 0x49, 0x19, 0x42, 0xfb, 0xeb, 0xa1, //0x0000a188 .quad -6779048552765515233 + 0xf6, 0x4e, 0x77, 0x77, 0xe0, 0x26, 0x1a, 0xd4, //0x0000a190 .quad -3163173042755514634 + 0xa6, 0x60, 0x9b, 0x9f, 0x12, 0xfa, 0x66, 0xca, //0x0000a198 .quad -3862124672529506138 + 0xb4, 0x22, 0x55, 0x95, 0x98, 0xb0, 0x20, 0x89, //0x0000a1a0 .quad -8565652321871781196 + 0xd0, 0x38, 0x82, 0x47, 0x97, 0xb8, 0x00, 0xfd, //0x0000a1a8 .quad -215969822234494768 + 0xb0, 0x35, 0x55, 0x5d, 0x5f, 0x6e, 0xb4, 0x55, //0x0000a1b0 .quad 6175682344898606512 + 0x82, 0x63, 0xb1, 0x8c, 0x5e, 0x73, 0x20, 0x9e, //0x0000a1b8 .quad -7052510166537641086 + 0x1d, 0x83, 0xaa, 0x34, 0xf7, 0x89, 0x21, 0xeb, //0x0000a1c0 .quad -1503769105731517667 + 0x62, 0xbc, 0xdd, 0x2f, 0x36, 0x90, 0xa8, 0xc5, //0x0000a1c8 .quad -4203951689744663454 + 0xe4, 0x23, 0xd5, 0x01, 0x75, 0xec, 0xe9, 0xa5, //0x0000a1d0 .quad -6491397400591784988 + 0x7b, 0x2b, 0xd5, 0xbb, 0x43, 0xb4, 0x12, 0xf7, //0x0000a1d8 .quad -643253593753441413 + 0x6e, 0x36, 0x25, 0x21, 0xc9, 0x33, 0xb2, 0x47, //0x0000a1e0 .quad 5166248661484910190 + 0x2d, 0x3b, 0x65, 0x55, 0xaa, 0xb0, 0x6b, 0x9a, //0x0000a1e8 .quad -7319562523736982739 + 0x0a, 0x84, 0x6e, 0x69, 0xbb, 0xc0, 0x9e, 0x99, //0x0000a1f0 .quad -7377247228426025974 + 0xf8, 0x89, 0xbe, 0xea, 0xd4, 0x9c, 0x06, 0xc1, //0x0000a1f8 .quad -4537767136243840520 + 0x0d, 0x25, 0xca, 0x43, 0xea, 0x70, 0x06, 0xc0, //0x0000a200 .quad -4609873017105144563 + 0x76, 0x2c, 0x6e, 0x25, 0x0a, 0x44, 0x48, 0xf1, //0x0000a208 .quad -1060522901877412746 + 0x28, 0x57, 0x5e, 0x6a, 0x92, 0x06, 0x04, 0x38, //0x0000a210 .quad 4036358391950366504 + 0xca, 0xdb, 0x64, 0x57, 0x86, 0x2a, 0xcd, 0x96, //0x0000a218 .quad -7580355841314464822 + 0xf2, 0xec, 0xf5, 0x04, 0x37, 0x08, 0x05, 0xc6, //0x0000a220 .quad -4177924046916817678 + 0xbc, 0x12, 0x3e, 0xed, 0x27, 0x75, 0x80, 0xbc, //0x0000a228 .quad -4863758783215693124 + 0x2e, 0x68, 0x33, 0xc6, 0x44, 0x4a, 0x86, 0xf7, //0x0000a230 .quad -610719040218634194 + 0x6b, 0x97, 0x8d, 0xe8, 0x71, 0x92, 0xa0, 0xeb, //0x0000a238 .quad -1468012460592228501 + 0x1d, 0x21, 0xe0, 0xfb, 0x6a, 0xee, 0xb3, 0x7a, //0x0000a240 .quad 8841672636718129437 + 0xa3, 0x7e, 0x58, 0x31, 0x87, 0x5b, 0x44, 0x93, //0x0000a248 .quad -7835036815511224669 + 0x64, 0x29, 0xd8, 0xba, 0x05, 0xea, 0x60, 0x59, //0x0000a250 .quad 6440404777470273892 + 0x4c, 0x9e, 0xae, 0xfd, 0x68, 0x72, 0x15, 0xb8, //0x0000a258 .quad -5182110000961642932 + 0xbd, 0x33, 0x8e, 0x29, 0x87, 0x24, 0xb9, 0x6f, //0x0000a260 .quad 8050505971837842365 + 0xdf, 0x45, 0x1a, 0x3d, 0x03, 0xcf, 0x1a, 0xe6, //0x0000a268 .quad -1865951482774665761 + 0x56, 0xe0, 0xf8, 0x79, 0xd4, 0xb6, 0xd3, 0xa5, //0x0000a270 .quad -6497648813669818282 + 0xab, 0x6b, 0x30, 0x06, 0x62, 0xc1, 0xd0, 0x8f, //0x0000a278 .quad -8083748704375247957 + 0x6c, 0x18, 0x77, 0x98, 0x89, 0xa4, 0x48, 0x8f, //0x0000a280 .quad -8122061017087272852 + 0x96, 0x86, 0xbc, 0x87, 0xba, 0xf1, 0xc4, 0xb3, //0x0000a288 .quad -5492999862041672042 + 0x87, 0xde, 0x94, 0xfe, 0xab, 0xcd, 0x1a, 0x33, //0x0000a290 .quad 3682481783923072647 + 0x3c, 0xa8, 0xab, 0x29, 0x29, 0x2e, 0xb6, 0xe0, //0x0000a298 .quad -2254563809124702148 + 0x14, 0x0b, 0x1d, 0x7f, 0x8b, 0xc0, 0xf0, 0x9f, //0x0000a2a0 .quad -6921820921902855404 + 0x25, 0x49, 0x0b, 0xba, 0xd9, 0xdc, 0x71, 0x8c, //0x0000a2a8 .quad -8326631408344020699 + 0xd9, 0x4d, 0xe4, 0x5e, 0xae, 0xf0, 0xec, 0x07, //0x0000a2b0 .quad 571095884476206553 + 0x6f, 0x1b, 0x8e, 0x28, 0x10, 0x54, 0x8e, 0xaf, //0x0000a2b8 .quad -5796603242002637969 + 0x50, 0x61, 0x9d, 0xf6, 0xd9, 0x2c, 0xe8, 0xc9, //0x0000a2c0 .quad -3897816162832129712 + 0x4a, 0xa2, 0xb1, 0x32, 0x14, 0xe9, 0x71, 0xdb, //0x0000a2c8 .quad -2634068034075909558 + 0xd2, 0x5c, 0x22, 0x3a, 0x08, 0x1c, 0x31, 0xbe, //0x0000a2d0 .quad -4741978110983775022 + 0x6e, 0x05, 0xaf, 0x9f, 0xac, 0x31, 0x27, 0x89, //0x0000a2d8 .quad -8563821548938525330 + 0x06, 0xf4, 0xaa, 0x48, 0x0a, 0x63, 0xbd, 0x6d, //0x0000a2e0 .quad 7907585416552444934 + 0xca, 0xc6, 0x9a, 0xc7, 0x17, 0xfe, 0x70, 0xab, //0x0000a2e8 .quad -6093090917745768758 + 0x08, 0xb1, 0xd5, 0xda, 0xcc, 0xbb, 0x2c, 0x09, //0x0000a2f0 .quad 661109733835780360 + 0x7d, 0x78, 0x81, 0xb9, 0x9d, 0x3d, 0x4d, 0xd6, //0x0000a2f8 .quad -3004677628754823043 + 0xa5, 0x8e, 0xc5, 0x08, 0x60, 0xf5, 0xbb, 0x25, //0x0000a300 .quad 2719036592861056677 + 0x4e, 0xeb, 0xf0, 0x93, 0x82, 0x46, 0xf0, 0x85, //0x0000a308 .quad -8795452545612846258 + 0x4e, 0xf2, 0xf6, 0x0a, 0xb8, 0xf2, 0x2a, 0xaf, //0x0000a310 .quad -5824576295778454962 + 0x21, 0x26, 0xed, 0x38, 0x23, 0x58, 0x6c, 0xa7, //0x0000a318 .quad -6382629663588669919 + 0xe1, 0xae, 0xb4, 0x0d, 0x66, 0xaf, 0xf5, 0x1a, //0x0000a320 .quad 1942651667131707105 + 0xaa, 0x6f, 0x28, 0x07, 0x2c, 0x6e, 0x47, 0xd1, //0x0000a328 .quad -3366601061058449494 + 0x4d, 0xed, 0x90, 0xc8, 0x9f, 0x8d, 0xd9, 0x50, //0x0000a330 .quad 5825843310384704845 + 0xca, 0x45, 0x79, 0x84, 0xdb, 0xa4, 0xcc, 0x82, //0x0000a338 .quad -9021654690802612790 + 0xa0, 0x28, 0xb5, 0xba, 0x07, 0xf1, 0x0f, 0xe5, //0x0000a340 .quad -1941067898873894752 + 0x3c, 0x97, 0x97, 0x65, 0x12, 0xce, 0x7f, 0xa3, //0x0000a348 .quad -6665382345075878084 + 0xc8, 0x72, 0x62, 0xa9, 0x49, 0xed, 0x53, 0x1e, //0x0000a350 .quad 2185351144835019464 + 0x0c, 0x7d, 0xfd, 0xfe, 0x96, 0xc1, 0x5f, 0xcc, //0x0000a358 .quad -3720041912917459700 + 0x7a, 0x0f, 0xbb, 0x13, 0x9c, 0xe8, 0xe8, 0x25, //0x0000a360 .quad 2731688931043774330 + 0x4f, 0xdc, 0xbc, 0xbe, 0xfc, 0xb1, 0x77, 0xff, //0x0000a368 .quad -38366372719436721 + 0xac, 0xe9, 0x54, 0x8c, 0x61, 0x91, 0xb1, 0x77, //0x0000a370 .quad 8624834609543440812 + 0xb1, 0x09, 0x36, 0xf7, 0x3d, 0xcf, 0xaa, 0x9f, //0x0000a378 .quad -6941508010590729807 + 0x17, 0x24, 0x6a, 0xef, 0xb9, 0xf5, 0x9d, 0xd5, //0x0000a380 .quad -3054014793352862697 + 0x1d, 0x8c, 0x03, 0x75, 0x0d, 0x83, 0x95, 0xc7, //0x0000a388 .quad -4065198994811024355 + 0x1d, 0xad, 0x44, 0x6b, 0x28, 0x73, 0x05, 0x4b, //0x0000a390 .quad 5405853545163697437 + 0x25, 0x6f, 0x44, 0xd2, 0xd0, 0xe3, 0x7a, 0xf9, //0x0000a398 .quad -469812725086392539 + 0x32, 0xec, 0x0a, 0x43, 0xf9, 0x67, 0xe3, 0x4e, //0x0000a3a0 .quad 5684501474941004850 + 0x77, 0xc5, 0x6a, 0x83, 0x62, 0xce, 0xec, 0x9b, //0x0000a3a8 .quad -7211161980820077193 + 0x3f, 0xa7, 0xcd, 0x93, 0xf7, 0x41, 0x9c, 0x22, //0x0000a3b0 .quad 2493940825248868159 + 0xd5, 0x76, 0x45, 0x24, 0xfb, 0x01, 0xe8, 0xc2, //0x0000a3b8 .quad -4402266457597708587 + 0x0f, 0x11, 0xc1, 0x78, 0x75, 0x52, 0x43, 0x6b, //0x0000a3c0 .quad 7729112049988473103 + 0x8a, 0xd4, 0x56, 0xed, 0x79, 0x02, 0xa2, 0xf3, //0x0000a3c8 .quad -891147053569747830 + 0xa9, 0xaa, 0x78, 0x6b, 0x89, 0x13, 0x0a, 0x83, //0x0000a3d0 .quad -9004363024039368023 + 0xd6, 0x44, 0x56, 0x34, 0x8c, 0x41, 0x45, 0x98, //0x0000a3d8 .quad -7474495936122174250 + 0x53, 0xd5, 0x56, 0xc6, 0x6b, 0x98, 0xcc, 0x23, //0x0000a3e0 .quad 2579604275232953683 + 0x0c, 0xd6, 0x6b, 0x41, 0xef, 0x91, 0x56, 0xbe, //0x0000a3e8 .quad -4731433901725329908 + 0xa8, 0x8a, 0xec, 0xb7, 0x86, 0xbe, 0xbf, 0x2c, //0x0000a3f0 .quad 3224505344041192104 + 0x8f, 0xcb, 0xc6, 0x11, 0x6b, 0x36, 0xec, 0xed, //0x0000a3f8 .quad -1302606358729274481 + 0xa9, 0xd6, 0xf3, 0x32, 0x14, 0xd7, 0xf7, 0x7b, //0x0000a400 .quad 8932844867666826921 + 0x39, 0x3f, 0x1c, 0xeb, 0x02, 0xa2, 0xb3, 0x94, //0x0000a408 .quad -7731658001846878407 + 0x53, 0xcc, 0xb0, 0x3f, 0xd9, 0xcc, 0xf5, 0xda, //0x0000a410 .quad -2669001970698630061 + 0x07, 0x4f, 0xe3, 0xa5, 0x83, 0x8a, 0xe0, 0xb9, //0x0000a418 .quad -5052886483881210105 + 0x68, 0xff, 0x9c, 0x8f, 0x0f, 0x40, 0xb3, 0xd1, //0x0000a420 .quad -3336252463373287576 + 0xc9, 0x22, 0x5c, 0x8f, 0x24, 0xad, 0x58, 0xe8, //0x0000a428 .quad -1704422086424124727 + 0xa1, 0x1f, 0xc2, 0xb9, 0x09, 0x08, 0x10, 0x23, //0x0000a430 .quad 2526528228819083169 + 0xbe, 0x95, 0x99, 0xd9, 0x36, 0x6c, 0x37, 0x91, //0x0000a438 .quad -7982792831656159810 + 0x8a, 0xa7, 0x32, 0x28, 0x0c, 0x0a, 0xd4, 0xab, //0x0000a440 .quad -6065211750830921846 + 0x2d, 0xfb, 0xff, 0x8f, 0x44, 0x47, 0x85, 0xb5, //0x0000a448 .quad -5366805021142811859 + 0x6c, 0x51, 0x3f, 0x32, 0x8f, 0x0c, 0xc9, 0x16, //0x0000a450 .quad 1641857348316123500 + 0xf9, 0xf9, 0xff, 0xb3, 0x15, 0x99, 0xe6, 0xe2, //0x0000a458 .quad -2096820258001126919 + 0xe3, 0x92, 0x67, 0x7f, 0xd9, 0xa7, 0x3d, 0xae, //0x0000a460 .quad -5891368184943504669 + 0x3b, 0xfc, 0x7f, 0x90, 0xad, 0x1f, 0xd0, 0x8d, //0x0000a468 .quad -8228041688891786181 + 0x9c, 0x77, 0x41, 0xdf, 0xcf, 0x11, 0xcd, 0x99, //0x0000a470 .quad -7364210231179380836 + 0x4a, 0xfb, 0x9f, 0xf4, 0x98, 0x27, 0x44, 0xb1, //0x0000a478 .quad -5673366092687344822 + 0x83, 0xd5, 0x11, 0xd7, 0x43, 0x56, 0x40, 0x40, //0x0000a480 .quad 4629795266307937667 + 0x1d, 0xfa, 0xc7, 0x31, 0x7f, 0x31, 0x95, 0xdd, //0x0000a488 .quad -2480021597431793123 + 0x72, 0x25, 0x6b, 0x66, 0xea, 0x35, 0x28, 0x48, //0x0000a490 .quad 5199465050656154994 + 0x52, 0xfc, 0x1c, 0x7f, 0xef, 0x3e, 0x7d, 0x8a, //0x0000a498 .quad -8467542526035952558 + 0xcf, 0xee, 0x05, 0x00, 0x65, 0x43, 0x32, 0xda, //0x0000a4a0 .quad -2724040723534582065 + 0x66, 0x3b, 0xe4, 0x5e, 0xab, 0x8e, 0x1c, 0xad, //0x0000a4a8 .quad -5972742139117552794 + 0x82, 0x6a, 0x07, 0x40, 0x3e, 0xd4, 0xbe, 0x90, //0x0000a4b0 .quad -8016736922845615486 + 0x40, 0x4a, 0x9d, 0x36, 0x56, 0xb2, 0x63, 0xd8, //0x0000a4b8 .quad -2854241655469553088 + 0x91, 0xa2, 0x04, 0xe8, 0xa6, 0x44, 0x77, 0x5a, //0x0000a4c0 .quad 6518754469289960081 + 0x68, 0x4e, 0x22, 0xe2, 0x75, 0x4f, 0x3e, 0x87, //0x0000a4c8 .quad -8701430062309552536 + 0x36, 0xcb, 0x05, 0xa2, 0xd0, 0x15, 0x15, 0x71, //0x0000a4d0 .quad 8148443086612450102 + 0x02, 0xe2, 0xaa, 0x5a, 0x53, 0xe3, 0x0d, 0xa9, //0x0000a4d8 .quad -6265101559459552766 + 0x03, 0x3e, 0x87, 0xca, 0x44, 0x5b, 0x5a, 0x0d, //0x0000a4e0 .quad 962181821410786819 + 0x83, 0x9a, 0x55, 0x31, 0x28, 0x5c, 0x51, 0xd3, //0x0000a4e8 .quad -3219690930897053053 + 0xc2, 0x86, 0x94, 0xfe, 0x0a, 0x79, 0x58, 0xe8, //0x0000a4f0 .quad -1704479370831952190 + 0x91, 0x80, 0xd5, 0x1e, 0x99, 0xd9, 0x12, 0x84, //0x0000a4f8 .quad -8929835859451740015 + 0x72, 0xa8, 0x39, 0xbe, 0x4d, 0x97, 0x6e, 0x62, //0x0000a500 .quad 7092772823314835570 + 0xb6, 0xe0, 0x8a, 0x66, 0xff, 0x8f, 0x17, 0xa5, //0x0000a508 .quad -6550608805887287114 + 0x8f, 0x12, 0xc8, 0x2d, 0x21, 0x3d, 0x0a, 0xfb, //0x0000a510 .quad -357406007711231345 + 0xe3, 0x98, 0x2d, 0x40, 0xff, 0x73, 0x5d, 0xce, //0x0000a518 .quad -3576574988931720989 + 0x99, 0x0b, 0x9d, 0xbc, 0x34, 0x66, 0xe6, 0x7c, //0x0000a520 .quad 8999993282035256217 + 0x8e, 0x7f, 0x1c, 0x88, 0x7f, 0x68, 0xfa, 0x80, //0x0000a528 .quad -9152888395723407474 + 0x80, 0x4e, 0xc4, 0xeb, 0xc1, 0xff, 0x1f, 0x1c, //0x0000a530 .quad 2026619565689294464 + 0x72, 0x9f, 0x23, 0x6a, 0x9f, 0x02, 0x39, 0xa1, //0x0000a538 .quad -6829424476226871438 + 0x20, 0x62, 0xb5, 0x66, 0xb2, 0xff, 0x27, 0xa3, //0x0000a540 .quad -6690097579743157728 + 0x4e, 0x87, 0xac, 0x44, 0x47, 0x43, 0x87, 0xc9, //0x0000a548 .quad -3925094576856201394 + 0xa8, 0xba, 0x62, 0x00, 0x9f, 0xff, 0xf1, 0x4b, //0x0000a550 .quad 5472436080603216552 + 0x22, 0xa9, 0xd7, 0x15, 0x19, 0x14, 0xe9, 0xfb, //0x0000a558 .quad -294682202642863838 + 0xa9, 0xb4, 0x3d, 0x60, 0xc3, 0x3f, 0x77, 0x6f, //0x0000a560 .quad 8031958568804398249 + 0xb5, 0xc9, 0xa6, 0xad, 0x8f, 0xac, 0x71, 0x9d, //0x0000a568 .quad -7101705404292871755 + 0xd3, 0x21, 0x4d, 0x38, 0xb4, 0x0f, 0x55, 0xcb, //0x0000a570 .quad -3795109844276665901 + 0x22, 0x7c, 0x10, 0x99, 0xb3, 0x17, 0xce, 0xc4, //0x0000a578 .quad -4265445736938701790 + 0x48, 0x6a, 0x60, 0x46, 0xa1, 0x53, 0x2a, 0x7e, //0x0000a580 .quad 9091170749936331336 + 0x2b, 0x9b, 0x54, 0x7f, 0xa0, 0x9d, 0x01, 0xf6, //0x0000a588 .quad -720121152745989333 + 0x6d, 0x42, 0xfc, 0xcb, 0x44, 0x74, 0xda, 0x2e, //0x0000a590 .quad 3376138709496513133 + 0xfb, 0xe0, 0x94, 0x4f, 0x84, 0x02, 0xc1, 0x99, //0x0000a598 .quad -7367604748107325189 + 0x08, 0x53, 0xfb, 0xfe, 0x55, 0x11, 0x91, 0xfa, //0x0000a5a0 .quad -391512631556746488 + 0x39, 0x19, 0x7a, 0x63, 0x25, 0x43, 0x31, 0xc0, //0x0000a5a8 .quad -4597819916706768583 + 0xca, 0x27, 0xba, 0x7e, 0xab, 0x55, 0x35, 0x79, //0x0000a5b0 .quad 8733981247408842698 + 0x88, 0x9f, 0x58, 0xbc, 0xee, 0x93, 0x3d, 0xf0, //0x0000a5b8 .quad -1135588877456072824 + 0xde, 0x58, 0x34, 0x2f, 0x8b, 0x55, 0xc1, 0x4b, //0x0000a5c0 .quad 5458738279630526686 + 0xb5, 0x63, 0xb7, 0x35, 0x75, 0x7c, 0x26, 0x96, //0x0000a5c8 .quad -7627272076051127371 + 0x16, 0x6f, 0x01, 0xfb, 0xed, 0xaa, 0xb1, 0x9e, //0x0000a5d0 .quad -7011635205744005354 + 0xa2, 0x3c, 0x25, 0x83, 0x92, 0x1b, 0xb0, 0xbb, //0x0000a5d8 .quad -4922404076636521310 + 0xdc, 0xca, 0xc1, 0x79, 0xa9, 0x15, 0x5e, 0x46, //0x0000a5e0 .quad 5070514048102157020 + 0xcb, 0x8b, 0xee, 0x23, 0x77, 0x22, 0x9c, 0xea, //0x0000a5e8 .quad -1541319077368263733 + 0xc9, 0x1e, 0x19, 0xec, 0x89, 0xcd, 0xfa, 0x0b, //0x0000a5f0 .quad 863228270850154185 + 0x5f, 0x17, 0x75, 0x76, 0x8a, 0x95, 0xa1, 0x92, //0x0000a5f8 .quad -7880853450996246689 + 0x7b, 0x66, 0x1f, 0x67, 0xec, 0x80, 0xf9, 0xce, //0x0000a600 .quad -3532650679864695173 + 0x36, 0x5d, 0x12, 0x14, 0xed, 0xfa, 0x49, 0xb7, //0x0000a608 .quad -5239380795317920458 + 0x1a, 0x40, 0xe7, 0x80, 0x27, 0xe1, 0xb7, 0x82, //0x0000a610 .quad -9027499368258256870 + 0x84, 0xf4, 0x16, 0x59, 0xa8, 0x79, 0x1c, 0xe5, //0x0000a618 .quad -1937539975720012668 + 0x10, 0x88, 0x90, 0xb0, 0xb8, 0xec, 0xb2, 0xd1, //0x0000a620 .quad -3336344095947716592 + 0xd2, 0x58, 0xae, 0x37, 0x09, 0xcc, 0x31, 0x8f, //0x0000a628 .quad -8128491512466089774 + 0x15, 0xaa, 0xb4, 0xdc, 0xe6, 0xa7, 0x1f, 0x86, //0x0000a630 .quad -8782116138362033643 + 0x07, 0xef, 0x99, 0x85, 0x0b, 0x3f, 0xfe, 0xb2, //0x0000a638 .quad -5548928372155224313 + 0x9a, 0xd4, 0xe1, 0x93, 0xe0, 0x91, 0xa7, 0x67, //0x0000a640 .quad 7469098900757009562 + 0xc9, 0x6a, 0x00, 0x67, 0xce, 0xce, 0xbd, 0xdf, //0x0000a648 .quad -2324474446766642487 + 0xe0, 0x24, 0x6d, 0x5c, 0x2c, 0xbb, 0xc8, 0xe0, //0x0000a650 .quad -2249342214667950880 + 0xbd, 0x42, 0x60, 0x00, 0x41, 0xa1, 0xd6, 0x8b, //0x0000a658 .quad -8370325556870233411 + 0x18, 0x6e, 0x88, 0x73, 0xf7, 0xe9, 0xfa, 0x58, //0x0000a660 .quad 6411694268519837208 + 0x6d, 0x53, 0x78, 0x40, 0x91, 0x49, 0xcc, 0xae, //0x0000a668 .quad -5851220927660403859 + 0x9e, 0x89, 0x6a, 0x50, 0x75, 0xa4, 0x39, 0xaf, //0x0000a670 .quad -5820440219632367202 + 0x48, 0x68, 0x96, 0x90, 0xf5, 0x5b, 0x7f, 0xda, //0x0000a678 .quad -2702340141148116920 + 0x03, 0x96, 0x42, 0x52, 0xc9, 0x06, 0x84, 0x6d, //0x0000a680 .quad 7891439908798240259 + 0x2d, 0x01, 0x5e, 0x7a, 0x79, 0x99, 0x8f, 0x88, //0x0000a688 .quad -8606491615858654931 + 0x83, 0x3b, 0xd3, 0xa6, 0x7b, 0x08, 0xe5, 0xc8, //0x0000a690 .quad -3970758169284363389 + 0x78, 0x81, 0xf5, 0xd8, 0xd7, 0x7f, 0xb3, 0xaa, //0x0000a698 .quad -6146428501395930760 + 0x64, 0x0a, 0x88, 0x90, 0x9a, 0x4a, 0x1e, 0xfb, //0x0000a6a0 .quad -351761693178066332 + 0xd6, 0xe1, 0x32, 0xcf, 0xcd, 0x5f, 0x60, 0xd5, //0x0000a6a8 .quad -3071349608317525546 + 0x7f, 0x06, 0x55, 0x9a, 0xa0, 0xee, 0xf2, 0x5c, //0x0000a6b0 .quad 6697677969404790399 + 0x26, 0xcd, 0x7f, 0xa1, 0xe0, 0x3b, 0x5c, 0x85, //0x0000a6b8 .quad -8837122532839535322 + 0x1e, 0x48, 0xea, 0xc0, 0x48, 0xaa, 0x2f, 0xf4, //0x0000a6c0 .quad -851274575098787810 + 0x6f, 0xc0, 0xdf, 0xc9, 0xd8, 0x4a, 0xb3, 0xa6, //0x0000a6c8 .quad -6434717147622031249 + 0x26, 0xda, 0x24, 0xf1, 0xda, 0x94, 0x3b, 0xf1, //0x0000a6d0 .quad -1064093218873484762 + 0x8b, 0xb0, 0x57, 0xfc, 0x8e, 0x1d, 0x60, 0xd0, //0x0000a6d8 .quad -3431710416100151157 + 0x58, 0x08, 0xb7, 0xd6, 0x08, 0x3d, 0xc5, 0x76, //0x0000a6e0 .quad 8558313775058847832 + 0x57, 0xce, 0xb6, 0x5d, 0x79, 0x12, 0x3c, 0x82, //0x0000a6e8 .quad -9062348037703676329 + 0x6e, 0xca, 0x64, 0x0c, 0x4b, 0x8c, 0x76, 0x54, //0x0000a6f0 .quad 6086206200396171886 + 0xed, 0x81, 0x24, 0xb5, 0x17, 0x17, 0xcb, 0xa2, //0x0000a6f8 .quad -6716249028702207507 + 0x09, 0xfd, 0x7d, 0xcf, 0x5d, 0x2f, 0x94, 0xa9, //0x0000a700 .quad -6227300304786948855 + 0x68, 0xa2, 0x6d, 0xa2, 0xdd, 0xdc, 0x7d, 0xcb, //0x0000a708 .quad -3783625267450371480 + 0x4c, 0x7c, 0x5d, 0x43, 0x35, 0x3b, 0xf9, 0xd3, //0x0000a710 .quad -3172439362556298164 + 0x02, 0x0b, 0x09, 0x0b, 0x15, 0x54, 0x5d, 0xfe, //0x0000a718 .quad -117845565885576446 + 0xaf, 0x6d, 0x1a, 0x4a, 0x01, 0xc5, 0x7b, 0xc4, //0x0000a720 .quad -4288617610811380305 + 0xe1, 0xa6, 0xe5, 0x26, 0x8d, 0x54, 0xfa, 0x9e, //0x0000a728 .quad -6991182506319567135 + 0x1b, 0x09, 0xa1, 0x9c, 0x41, 0xb6, 0x9a, 0x35, //0x0000a730 .quad 3862600023340550427 + 0x9a, 0x10, 0x9f, 0x70, 0xb0, 0xe9, 0xb8, 0xc6, //0x0000a738 .quad -4127292114472071014 + 0x62, 0x4b, 0xc9, 0x03, 0xd2, 0x63, 0x01, 0xc3, //0x0000a740 .quad -4395122007679087774 + 0xc0, 0xd4, 0xc6, 0x8c, 0x1c, 0x24, 0x67, 0xf8, //0x0000a748 .quad -547429124662700864 + 0x1d, 0xcf, 0x5d, 0x42, 0x63, 0xde, 0xe0, 0x79, //0x0000a750 .quad 8782263791269039901 + 0xf8, 0x44, 0xfc, 0xd7, 0x91, 0x76, 0x40, 0x9b, //0x0000a758 .quad -7259672230555269896 + 0xe4, 0x42, 0xf5, 0x12, 0xfc, 0x15, 0x59, 0x98, //0x0000a760 .quad -7468914334623251740 + 0x36, 0x56, 0xfb, 0x4d, 0x36, 0x94, 0x10, 0xc2, //0x0000a768 .quad -4462904269766699466 + 0x9d, 0x93, 0xb2, 0x17, 0x7b, 0x5b, 0x6f, 0x3e, //0x0000a770 .quad 4498915137003099037 + 0xc4, 0x2b, 0x7a, 0xe1, 0x43, 0xb9, 0x94, 0xf2, //0x0000a778 .quad -966944318780986428 + 0x42, 0x9c, 0xcf, 0xee, 0x2c, 0x99, 0x05, 0xa7, //0x0000a780 .quad -6411550076227838910 + 0x5a, 0x5b, 0xec, 0x6c, 0xca, 0xf3, 0x9c, 0x97, //0x0000a788 .quad -7521869226879198374 + 0x53, 0x83, 0x83, 0x2a, 0x78, 0xff, 0xc6, 0x50, //0x0000a790 .quad 5820620459997365075 + 0x31, 0x72, 0x27, 0x08, 0xbd, 0x30, 0x84, 0xbd, //0x0000a798 .quad -4790650515171610063 + 0x28, 0x64, 0x24, 0x35, 0x56, 0xbf, 0xf8, 0xa4, //0x0000a7a0 .quad -6559282480285457368 + 0xbd, 0x4e, 0x31, 0x4a, 0xec, 0x3c, 0xe5, 0xec, //0x0000a7a8 .quad -1376627125537124675 + 0x99, 0xbe, 0x36, 0xe1, 0x95, 0x77, 0x1b, 0x87, //0x0000a7b0 .quad -8711237568605798759 + 0x36, 0xd1, 0x5e, 0xae, 0x13, 0x46, 0x0f, 0x94, //0x0000a7b8 .quad -7777920981101784778 + 0x3f, 0x6e, 0x84, 0x59, 0x7b, 0x55, 0xe2, 0x28, //0x0000a7c0 .quad 2946011094524915263 + 0x84, 0x85, 0xf6, 0x99, 0x98, 0x17, 0x13, 0xb9, //0x0000a7c8 .quad -5110715207949843068 + 0xcf, 0x89, 0xe5, 0x2f, 0xda, 0xea, 0x1a, 0x33, //0x0000a7d0 .quad 3682513868156144079 + 0xe5, 0x26, 0x74, 0xc0, 0x7e, 0xdd, 0x57, 0xe7, //0x0000a7d8 .quad -1776707991509915931 + 0x21, 0x76, 0xef, 0x5d, 0xc8, 0xd2, 0xf0, 0x3f, //0x0000a7e0 .quad 4607414176811284001 + 0x4f, 0x98, 0x48, 0x38, 0x6f, 0xea, 0x96, 0x90, //0x0000a7e8 .quad -8027971522334779313 + 0xa9, 0x53, 0x6b, 0x75, 0x7a, 0x07, 0xed, 0x0f, //0x0000a7f0 .quad 1147581702586717097 + 0x63, 0xbe, 0x5a, 0x06, 0x0b, 0xa5, 0xbc, 0xb4, //0x0000a7f8 .quad -5423278384491086237 + 0x94, 0x28, 0xc6, 0x12, 0x59, 0x49, 0xe8, 0xd3, //0x0000a800 .quad -3177208890193991532 + 0xfb, 0x6d, 0xf1, 0xc7, 0x4d, 0xce, 0xeb, 0xe1, //0x0000a808 .quad -2167411962186469893 + 0x5c, 0xd9, 0xbb, 0xab, 0xd7, 0x2d, 0x71, 0x64, //0x0000a810 .quad 7237616480483531100 + 0xbd, 0xe4, 0xf6, 0x9c, 0xf0, 0x60, 0x33, 0x8d, //0x0000a818 .quad -8272161504007625539 + 0xb3, 0xcf, 0xaa, 0x96, 0x4d, 0x79, 0x8d, 0xbd, //0x0000a820 .quad -4788037454677749837 + 0xec, 0x9d, 0x34, 0xc4, 0x2c, 0x39, 0x80, 0xb0, //0x0000a828 .quad -5728515861582144020 + 0xa0, 0x83, 0x55, 0xfc, 0xa0, 0xd7, 0xf0, 0xec, //0x0000a830 .quad -1373360799919799392 + 0x67, 0xc5, 0x41, 0xf5, 0x77, 0x47, 0xa0, 0xdc, //0x0000a838 .quad -2548958808550292121 + 0x44, 0x72, 0xb5, 0x9d, 0xc4, 0x86, 0x16, 0xf4, //0x0000a840 .quad -858350499949874620 + 0x60, 0x1b, 0x49, 0xf9, 0xaa, 0x2c, 0xe4, 0x89, //0x0000a848 .quad -8510628282985014432 + 0xd5, 0xce, 0x22, 0xc5, 0x75, 0x28, 0x1c, 0x31, //0x0000a850 .quad 3538747893490044629 + 0x39, 0x62, 0x9b, 0xb7, 0xd5, 0x37, 0x5d, 0xac, //0x0000a858 .quad -6026599335303880135 + 0x8b, 0x82, 0x6b, 0x36, 0x93, 0x32, 0x63, 0x7d, //0x0000a860 .quad 9035120885289943691 + 0xc7, 0x3a, 0x82, 0x25, 0xcb, 0x85, 0x74, 0xd7, //0x0000a868 .quad -2921563150702462265 + 0x97, 0x31, 0x03, 0x02, 0x9c, 0xff, 0x5d, 0xae, //0x0000a870 .quad -5882264492762254953 + 0xbc, 0x64, 0x71, 0xf7, 0x9e, 0xd3, 0xa8, 0x86, //0x0000a878 .quad -8743505996830120772 + 0xfc, 0xfd, 0x83, 0x02, 0x83, 0x7f, 0xf5, 0xd9, //0x0000a880 .quad -2741144597525430788 + 0xeb, 0xbd, 0x4d, 0xb5, 0x86, 0x08, 0x53, 0xa8, //0x0000a888 .quad -6317696477610263061 + 0x7b, 0xfd, 0x24, 0xc3, 0x63, 0xdf, 0x72, 0xd0, //0x0000a890 .quad -3426430746906788485 + 0x66, 0x2d, 0xa1, 0x62, 0xa8, 0xca, 0x67, 0xd2, //0x0000a898 .quad -3285434578585440922 + 0x6d, 0x1e, 0xf7, 0x59, 0x9e, 0xcb, 0x47, 0x42, //0x0000a8a0 .quad 4776009810824339053 + 0x60, 0xbc, 0xa4, 0x3d, 0xa9, 0xde, 0x80, 0x83, //0x0000a8a8 .quad -8970925639256982432 + 0x08, 0xe6, 0x74, 0xf0, 0x85, 0xbe, 0xd9, 0x52, //0x0000a8b0 .quad 5970012263530423816 + 0x78, 0xeb, 0x0d, 0x8d, 0x53, 0x16, 0x61, 0xa4, //0x0000a8b8 .quad -6601971030643840136 + 0x8b, 0x1f, 0x92, 0x6c, 0x27, 0x2e, 0x90, 0x67, //0x0000a8c0 .quad 7462515329413029771 + 0x56, 0x66, 0x51, 0x70, 0xe8, 0x5b, 0x79, 0xcd, //0x0000a8c8 .quad -3640777769877412266 + 0xb6, 0x53, 0xdb, 0xa3, 0xd8, 0x1c, 0xba, 0x00, //0x0000a8d0 .quad 52386062455755702 + 0xf6, 0xdf, 0x32, 0x46, 0x71, 0xd9, 0x6b, 0x80, //0x0000a8d8 .quad -9193015133814464522 + 0xa4, 0x28, 0xd2, 0xcc, 0x0e, 0xa4, 0xe8, 0x80, //0x0000a8e0 .quad -9157889458785081180 + 0xf3, 0x97, 0xbf, 0x97, 0xcd, 0xcf, 0x86, 0xa0, //0x0000a8e8 .quad -6879582898840692749 + 0xcd, 0xb2, 0x06, 0x80, 0x12, 0xcd, 0x22, 0x61, //0x0000a8f0 .quad 6999382250228200141 + 0xf0, 0x7d, 0xaf, 0xfd, 0xc0, 0x83, 0xa8, 0xc8, //0x0000a8f8 .quad -3987792605123478032 + 0x81, 0x5f, 0x08, 0x20, 0x57, 0x80, 0x6b, 0x79, //0x0000a900 .quad 8749227812785250177 + 0x6c, 0x5d, 0x1b, 0x3d, 0xb1, 0xa4, 0xd2, 0xfa, //0x0000a908 .quad -373054737976959636 + 0xb0, 0x3b, 0x05, 0x74, 0x36, 0x30, 0xe3, 0xcb, //0x0000a910 .quad -3755104653863994448 + 0x63, 0x1a, 0x31, 0xc6, 0xee, 0xa6, 0xc3, 0x9c, //0x0000a918 .quad -7150688238876681629 + 0x9c, 0x8a, 0x06, 0x11, 0x44, 0xfc, 0xdb, 0xbe, //0x0000a920 .quad -4693880817329993060 + 0xfc, 0x60, 0xbd, 0x77, 0xaa, 0x90, 0xf4, 0xc3, //0x0000a928 .quad -4326674280168464132 + 0x44, 0x2d, 0x48, 0x15, 0x55, 0xfb, 0x92, 0xee, //0x0000a930 .quad -1255665003235103420 + 0x3b, 0xb9, 0xac, 0x15, 0xd5, 0xb4, 0xf1, 0xf4, //0x0000a938 .quad -796656831783192261 + 0x4a, 0x1c, 0x4d, 0x2d, 0x15, 0xdd, 0x1b, 0x75, //0x0000a940 .quad 8438581409832836170 + 0xc5, 0xf3, 0x8b, 0x2d, 0x05, 0x11, 0x17, 0x99, //0x0000a948 .quad -7415439547505577019 + 0x5d, 0x63, 0xa0, 0x78, 0x5a, 0xd4, 0x62, 0xd2, //0x0000a950 .quad -3286831292991118499 + 0xb6, 0xf0, 0xee, 0x78, 0x46, 0xd5, 0x5c, 0xbf, //0x0000a958 .quad -4657613415954583370 + 0x34, 0x7c, 0xc8, 0x16, 0x71, 0x89, 0xfb, 0x86, //0x0000a960 .quad -8720225134666286028 + 0xe4, 0xac, 0x2a, 0x17, 0x98, 0x0a, 0x34, 0xef, //0x0000a968 .quad -1210330751515841308 + 0xa0, 0x4d, 0x3d, 0xae, 0xe6, 0x35, 0x5d, 0xd4, //0x0000a970 .quad -3144297699952734816 + 0x0e, 0xac, 0x7a, 0x0e, 0x9f, 0x86, 0x80, 0x95, //0x0000a978 .quad -7673985747338482674 + 0x09, 0xa1, 0xcc, 0x59, 0x60, 0x83, 0x74, 0x89, //0x0000a980 .quad -8542058143368306423 + 0x12, 0x57, 0x19, 0xd2, 0x46, 0xa8, 0xe0, 0xba, //0x0000a988 .quad -4980796165745715438 + 0x4b, 0xc9, 0x3f, 0x70, 0x38, 0xa4, 0xd1, 0x2b, //0x0000a990 .quad 3157485376071780683 + 0xd7, 0xac, 0x9f, 0x86, 0x58, 0xd2, 0x98, 0xe9, //0x0000a998 .quad -1614309188754756393 + 0xcf, 0xdd, 0x27, 0x46, 0xa3, 0x06, 0x63, 0x7b, //0x0000a9a0 .quad 8890957387685944783 + 0x06, 0xcc, 0x23, 0x54, 0x77, 0x83, 0xff, 0x91, //0x0000a9a8 .quad -7926472270612804602 + 0x42, 0xd5, 0xb1, 0x17, 0x4c, 0xc8, 0x3b, 0x1a, //0x0000a9b0 .quad 1890324697752655170 + 0x08, 0xbf, 0x2c, 0x29, 0x55, 0x64, 0x7f, 0xb6, //0x0000a9b8 .quad -5296404319838617848 + 0x93, 0x4a, 0x9e, 0x1d, 0x5f, 0xba, 0xca, 0x20, //0x0000a9c0 .quad 2362905872190818963 + 0xca, 0xee, 0x77, 0x73, 0x6a, 0x3d, 0x1f, 0xe4, //0x0000a9c8 .quad -2008819381370884406 + 0x9c, 0xee, 0x82, 0x72, 0x7b, 0xb4, 0x7e, 0x54, //0x0000a9d0 .quad 6088502188546649756 + 0x3e, 0xf5, 0x2a, 0x88, 0x62, 0x86, 0x93, 0x8e, //0x0000a9d8 .quad -8173041140997884610 + 0x43, 0xaa, 0x23, 0x4f, 0x9a, 0x61, 0x9e, 0xe9, //0x0000a9e0 .quad -1612744301171463613 + 0x8d, 0xb2, 0x35, 0x2a, 0xfb, 0x67, 0x38, 0xb2, //0x0000a9e8 .quad -5604615407819967859 + 0xd4, 0x94, 0xec, 0xe2, 0x00, 0xfa, 0x05, 0x64, //0x0000a9f0 .quad 7207441660390446292 + 0x31, 0x1f, 0xc3, 0xf4, 0xf9, 0x81, 0xc6, 0xde, //0x0000a9f8 .quad -2394083241347571919 + 0x04, 0xdd, 0xd3, 0x8d, 0x40, 0xbc, 0x83, 0xde, //0x0000aa00 .quad -2412877989897052924 + 0x7e, 0xf3, 0xf9, 0x38, 0x3c, 0x11, 0x3c, 0x8b, //0x0000aa08 .quad -8413831053483314306 + 0x45, 0xd4, 0x48, 0xb1, 0x50, 0xab, 0x24, 0x96, //0x0000aa10 .quad -7627783505798704059 + 0x5e, 0x70, 0x38, 0x47, 0x8b, 0x15, 0x0b, 0xae, //0x0000aa18 .quad -5905602798426754978 + 0x57, 0x09, 0x9b, 0xdd, 0x24, 0xd6, 0xad, 0x3b, //0x0000aa20 .quad 4300328673033783639 + 0x76, 0x8c, 0x06, 0x19, 0xee, 0xda, 0x8d, 0xd9, //0x0000aa28 .quad -2770317479606055818 + 0xd6, 0xe5, 0x80, 0x0a, 0xd7, 0xa5, 0x4c, 0xe5, //0x0000aa30 .quad -1923980597781273130 + 0xc9, 0x17, 0xa4, 0xcf, 0xd4, 0xa8, 0xf8, 0x87, //0x0000aa38 .quad -8648977452394866743 + 0x4c, 0x1f, 0x21, 0xcd, 0x4c, 0xcf, 0x9f, 0x5e, //0x0000aa40 .quad 6818396289628184396 + 0xbc, 0x1d, 0x8d, 0x03, 0x0a, 0xd3, 0xf6, 0xa9, //0x0000aa48 .quad -6199535797066195524 + 0x1f, 0x67, 0x69, 0x00, 0x20, 0xc3, 0x47, 0x76, //0x0000aa50 .quad 8522995362035230495 + 0x2b, 0x65, 0x70, 0x84, 0xcc, 0x87, 0x74, 0xd4, //0x0000aa58 .quad -3137733727905356501 + 0x73, 0xe0, 0x41, 0x00, 0xf4, 0xd9, 0xec, 0x29, //0x0000aa60 .quad 3021029092058325107 + 0x3b, 0x3f, 0xc6, 0xd2, 0xdf, 0xd4, 0xc8, 0x84, //0x0000aa68 .quad -8878612607581929669 + 0x90, 0x58, 0x52, 0x00, 0x71, 0x10, 0x68, 0xf4, //0x0000aa70 .quad -835399653354481520 + 0x09, 0xcf, 0x77, 0xc7, 0x17, 0x0a, 0xfb, 0xa5, //0x0000aa78 .quad -6486579741050024183 + 0xb4, 0xee, 0x66, 0x40, 0x8d, 0x14, 0x82, 0x71, //0x0000aa80 .quad 8179122470161673908 + 0xcc, 0xc2, 0x55, 0xb9, 0x9d, 0xcc, 0x79, 0xcf, //0x0000aa88 .quad -3496538657885142324 + 0x30, 0x55, 0x40, 0x48, 0xd8, 0x4c, 0xf1, 0xc6, //0x0000aa90 .quad -4111420493003729616 + 0xbf, 0x99, 0xd5, 0x93, 0xe2, 0x1f, 0xac, 0x81, //0x0000aa98 .quad -9102865688819295809 + 0x7c, 0x6a, 0x50, 0x5a, 0x0e, 0xa0, 0xad, 0xb8, //0x0000aaa0 .quad -5139275616254662020 + 0x2f, 0x00, 0xcb, 0x38, 0xdb, 0x27, 0x17, 0xa2, //0x0000aaa8 .quad -6766896092596731857 + 0x1c, 0x85, 0xe4, 0xf0, 0x11, 0x08, 0xd9, 0xa6, //0x0000aab0 .quad -6424094520318327524 + 0x3b, 0xc0, 0xfd, 0x06, 0xd2, 0xf1, 0x9c, 0xca, //0x0000aab8 .quad -3846934097318526917 + 0x63, 0xa6, 0x1d, 0x6d, 0x16, 0x4a, 0x8f, 0x90, //0x0000aac0 .quad -8030118150397909405 + 0x4a, 0x30, 0xbd, 0x88, 0x46, 0x2e, 0x44, 0xfd, //0x0000aac8 .quad -196981603220770742 + 0xfe, 0x87, 0x32, 0x04, 0x4e, 0x8e, 0x59, 0x9a, //0x0000aad0 .quad -7324666853212387330 + 0x2e, 0x3e, 0x76, 0x15, 0xec, 0x9c, 0x4a, 0x9e, //0x0000aad8 .quad -7040642529654063570 + 0xfd, 0x29, 0x3f, 0x85, 0xe1, 0xf1, 0xef, 0x40, //0x0000aae0 .quad 4679224488766679549 + 0xba, 0xcd, 0xd3, 0x1a, 0x27, 0x44, 0xdd, 0xc5, //0x0000aae8 .quad -4189117143640191558 + 0x7c, 0xf4, 0x8e, 0xe6, 0x59, 0xee, 0x2b, 0xd1, //0x0000aaf0 .quad -3374341425896426372 + 0x28, 0xc1, 0x88, 0xe1, 0x30, 0x95, 0x54, 0xf7, //0x0000aaf8 .quad -624710411122851544 + 0xce, 0x58, 0x19, 0x30, 0xf8, 0x74, 0xbb, 0x82, //0x0000ab00 .quad -9026492418826348338 + 0xb9, 0x78, 0xf5, 0x8c, 0x3e, 0xdd, 0x94, 0x9a, //0x0000ab08 .quad -7307973034592864071 + 0x01, 0xaf, 0x1f, 0x3c, 0x36, 0x52, 0x6a, 0xe3, //0x0000ab10 .quad -2059743486678159615 + 0xe7, 0xd6, 0x32, 0x30, 0x8e, 0x14, 0x3a, 0xc1, //0x0000ab18 .quad -4523280274813692185 + 0xc1, 0x9a, 0x27, 0xcb, 0xc3, 0xe6, 0x44, 0xdc, //0x0000ab20 .quad -2574679358347699519 + 0xa1, 0x8c, 0x3f, 0xbc, 0xb1, 0x99, 0x88, 0xf1, //0x0000ab28 .quad -1042414325089727327 + 0xb9, 0xc0, 0xf8, 0x5e, 0x3a, 0x10, 0xab, 0x29, //0x0000ab30 .quad 3002511419460075705 + 0xe5, 0xb7, 0xa7, 0x15, 0x0f, 0x60, 0xf5, 0x96, //0x0000ab38 .quad -7569037980822161435 + 0xe7, 0xf0, 0xb6, 0xf6, 0x48, 0xd4, 0x15, 0x74, //0x0000ab40 .quad 8364825292752482535 + 0xde, 0xa5, 0x11, 0xdb, 0x12, 0xb8, 0xb2, 0xbc, //0x0000ab48 .quad -4849611457600313890 + 0x21, 0xad, 0x64, 0x34, 0x5b, 0x49, 0x1b, 0x11, //0x0000ab50 .quad 1232659579085827361 + 0x56, 0x0f, 0xd6, 0x91, 0x17, 0x66, 0xdf, 0xeb, //0x0000ab58 .quad -1450328303573004458 + 0x34, 0xec, 0xbe, 0x00, 0xd9, 0x0d, 0xb1, 0xca, //0x0000ab60 .quad -3841273781498745804 + 0x95, 0xc9, 0x25, 0xbb, 0xce, 0x9f, 0x6b, 0x93, //0x0000ab68 .quad -7823984217374209643 + 0x42, 0xa7, 0xee, 0x40, 0x4f, 0x51, 0x5d, 0x3d, //0x0000ab70 .quad 4421779809981343554 + 0xfb, 0x3b, 0xef, 0x69, 0xc2, 0x87, 0x46, 0xb8, //0x0000ab78 .quad -5168294253290374149 + 0x12, 0x51, 0x2a, 0x11, 0xa3, 0xa5, 0xb4, 0x0c, //0x0000ab80 .quad 915538744049291538 + 0xfa, 0x0a, 0x6b, 0x04, 0xb3, 0x29, 0x58, 0xe6, //0x0000ab88 .quad -1848681798185579782 + 0xab, 0x72, 0xba, 0xea, 0x85, 0xe7, 0xf0, 0x47, //0x0000ab90 .quad 5183897733458195115 + 0xdc, 0xe6, 0xc2, 0xe2, 0x0f, 0x1a, 0xf7, 0x8f, //0x0000ab98 .quad -8072955151507069220 + 0x56, 0x0f, 0x69, 0x65, 0x67, 0x21, 0xed, 0x59, //0x0000aba0 .quad 6479872166822743894 + 0x93, 0xa0, 0x73, 0xdb, 0x93, 0xe0, 0xf4, 0xb3, //0x0000aba8 .quad -5479507920956448621 + 0x2c, 0x53, 0xc3, 0x3e, 0xc1, 0x69, 0x68, 0x30, //0x0000abb0 .quad 3488154190101041964 + 0xb8, 0x88, 0x50, 0xd2, 0xb8, 0x18, 0xf2, 0xe0, //0x0000abb8 .quad -2237698882768172872 + 0xfb, 0x13, 0x3a, 0xc7, 0x18, 0x42, 0x41, 0x1e, //0x0000abc0 .quad 2180096368813151227 + 0x73, 0x55, 0x72, 0x83, 0x73, 0x4f, 0x97, 0x8c, //0x0000abc8 .quad -8316090829371189901 + 0xfa, 0x98, 0x08, 0xf9, 0x9e, 0x92, 0xd1, 0xe5, //0x0000abd0 .quad -1886565557410948870 + 0xcf, 0xea, 0x4e, 0x64, 0x50, 0x23, 0xbd, 0xaf, //0x0000abd8 .quad -5783427518286599473 + 0x39, 0xbf, 0x4a, 0xb7, 0x46, 0xf7, 0x45, 0xdf, //0x0000abe0 .quad -2358206946763686087 + 0x83, 0xa5, 0x62, 0x7d, 0x24, 0x6c, 0xac, 0xdb, //0x0000abe8 .quad -2617598379430861437 + 0x83, 0xb7, 0x8e, 0x32, 0x8c, 0xba, 0x8b, 0x6b, //0x0000abf0 .quad 7749492695127472003 + 0x72, 0xa7, 0x5d, 0xce, 0x96, 0xc3, 0x4b, 0x89, //0x0000abf8 .quad -8553528014785370254 + 0x64, 0x65, 0x32, 0x3f, 0x2f, 0xa9, 0x6e, 0x06, //0x0000ac00 .quad 463493832054564196 + 0x4f, 0x11, 0xf5, 0x81, 0x7c, 0xb4, 0x9e, 0xab, //0x0000ac08 .quad -6080224000054324913 + 0xbd, 0xfe, 0xfe, 0x0e, 0x7b, 0x53, 0x0a, 0xc8, //0x0000ac10 .quad -4032318728359182659 + 0xa2, 0x55, 0x72, 0xa2, 0x9b, 0x61, 0x86, 0xd6, //0x0000ac18 .quad -2988593981640518238 + 0x36, 0x5f, 0x5f, 0xe9, 0x2c, 0x74, 0x06, 0xbd, //0x0000ac20 .quad -4826042214438183114 + 0x85, 0x75, 0x87, 0x45, 0x01, 0xfd, 0x13, 0x86, //0x0000ac28 .quad -8785400266166405755 + 0x04, 0x37, 0xb7, 0x23, 0x38, 0x11, 0x48, 0x2c, //0x0000ac30 .quad 3190819268807046916 + 0xe7, 0x52, 0xe9, 0x96, 0x41, 0xfc, 0x98, 0xa7, //0x0000ac38 .quad -6370064314280619289 + 0xc5, 0x04, 0xa5, 0x2c, 0x86, 0x15, 0x5a, 0xf7, //0x0000ac40 .quad -623161932418579259 + 0xa0, 0xa7, 0xa3, 0xfc, 0x51, 0x3b, 0x7f, 0xd1, //0x0000ac48 .quad -3350894374423386208 + 0xfb, 0x22, 0xe7, 0xdb, 0x73, 0x4d, 0x98, 0x9a, //0x0000ac50 .quad -7307005235402693893 + 0xc4, 0x48, 0xe6, 0x3d, 0x13, 0x85, 0xef, 0x82, //0x0000ac58 .quad -9011838011655698236 + 0xba, 0xeb, 0xe0, 0xd2, 0xd0, 0x60, 0x3e, 0xc1, //0x0000ac60 .quad -4522070525825979462 + 0xf5, 0xda, 0x5f, 0x0d, 0x58, 0x66, 0xab, 0xa3, //0x0000ac68 .quad -6653111496142234891 + 0xa8, 0x26, 0x99, 0x07, 0x05, 0xf9, 0x8d, 0x31, //0x0000ac70 .quad 3570783879572301480 + 0xb3, 0xd1, 0xb7, 0x10, 0xee, 0x3f, 0x96, 0xcc, //0x0000ac78 .quad -3704703351750405709 + 0x52, 0x70, 0x7f, 0x49, 0x46, 0x77, 0xf1, 0xfd, //0x0000ac80 .quad -148206168962011054 + 0x1f, 0xc6, 0xe5, 0x94, 0xe9, 0xcf, 0xbb, 0xff, //0x0000ac88 .quad -19193171260619233 + 0x33, 0xa6, 0xef, 0xed, 0x8b, 0xea, 0xb6, 0xfe, //0x0000ac90 .quad -92628855601256909 + 0xd3, 0x9b, 0x0f, 0xfd, 0xf1, 0x61, 0xd5, 0x9f, //0x0000ac98 .quad -6929524759678968877 + 0xc0, 0x8f, 0x6b, 0xe9, 0x2e, 0xa5, 0x64, 0xfe, //0x0000aca0 .quad -115786069501571136 + 0xc8, 0x82, 0x53, 0x7c, 0x6e, 0xba, 0xca, 0xc7, //0x0000aca8 .quad -4050219931171323192 + 0xb0, 0x73, 0xc6, 0xa3, 0x7a, 0xce, 0xfd, 0x3d, //0x0000acb0 .quad 4466953431550423984 + 0x7b, 0x63, 0x68, 0x1b, 0x0a, 0x69, 0xbd, 0xf9, //0x0000acb8 .quad -451088895536766085 + 0x4e, 0x08, 0x5c, 0xa6, 0x0c, 0xa1, 0xbe, 0x06, //0x0000acc0 .quad 486002885505321038 + 0x2d, 0x3e, 0x21, 0x51, 0xa6, 0x61, 0x16, 0x9c, //0x0000acc8 .quad -7199459587351560659 + 0x62, 0x0a, 0xf3, 0xcf, 0x4f, 0x49, 0x6e, 0x48, //0x0000acd0 .quad 5219189625309039202 + 0xb8, 0x8d, 0x69, 0xe5, 0x0f, 0xfa, 0x1b, 0xc3, //0x0000acd8 .quad -4387638465762062920 + 0xfa, 0xcc, 0xef, 0xc3, 0xa3, 0xdb, 0x89, 0x5a, //0x0000ace0 .quad 6523987031636299002 + 0x26, 0xf1, 0xc3, 0xde, 0x93, 0xf8, 0xe2, 0xf3, //0x0000ace8 .quad -872862063775190746 + 0x1c, 0xe0, 0x75, 0x5a, 0x46, 0x29, 0x96, 0xf8, //0x0000acf0 .quad -534194123654701028 + 0xb7, 0x76, 0x3a, 0x6b, 0x5c, 0xdb, 0x6d, 0x98, //0x0000acf8 .quad -7463067817500576073 + 0x23, 0x58, 0x13, 0xf1, 0x97, 0xb3, 0xbb, 0xf6, //0x0000ad00 .quad -667742654568376285 + 0x65, 0x14, 0x09, 0x86, 0x33, 0x52, 0x89, 0xbe, //0x0000ad08 .quad -4717148753448332187 + 0x2c, 0x2e, 0x58, 0xed, 0x7d, 0xa0, 0x6a, 0x74, //0x0000ad10 .quad 8388693718644305452 + 0x7f, 0x59, 0x8b, 0x67, 0xc0, 0xa6, 0x2b, 0xee, //0x0000ad18 .quad -1284749923383027329 + 0xdc, 0x1c, 0x57, 0xb4, 0x4e, 0xa4, 0xc2, 0xa8, //0x0000ad20 .quad -6286281471915778852 + 0xef, 0x17, 0xb7, 0x40, 0x38, 0x48, 0xdb, 0x94, //0x0000ad28 .quad -7720497729755473937 + 0x13, 0xe4, 0x6c, 0x61, 0x62, 0x4d, 0xf3, 0x92, //0x0000ad30 .quad -7857851839894723565 + 0xeb, 0xdd, 0xe4, 0x50, 0x46, 0x1a, 0x12, 0xba, //0x0000ad38 .quad -5038936143766954517 + 0x17, 0x1d, 0xc8, 0xf9, 0xba, 0x20, 0xb0, 0x77, //0x0000ad40 .quad 8624429273841147159 + 0x66, 0x15, 0x1e, 0xe5, 0xd7, 0xa0, 0x96, 0xe8, //0x0000ad48 .quad -1686984161281305242 + 0x2e, 0x12, 0x1d, 0xdc, 0x74, 0x14, 0xce, 0x0a, //0x0000ad50 .quad 778582277723329070 + 0x60, 0xcd, 0x32, 0xef, 0x86, 0x24, 0x5e, 0x91, //0x0000ad58 .quad -7971894128441897632 + 0xba, 0x56, 0x24, 0x13, 0x92, 0x99, 0x81, 0x0d, //0x0000ad60 .quad 973227847154161338 + 0xb8, 0x80, 0xff, 0xaa, 0xa8, 0xad, 0xb5, 0xb5, //0x0000ad68 .quad -5353181642124984136 + 0x69, 0x6c, 0xed, 0x97, 0xf6, 0xff, 0xe1, 0x10, //0x0000ad70 .quad 1216534808942701673 + 0xe6, 0x60, 0xbf, 0xd5, 0x12, 0x19, 0x23, 0xe3, //0x0000ad78 .quad -2079791034228842266 + 0xc1, 0x63, 0xf4, 0x1e, 0xfa, 0x3f, 0x8d, 0xca, //0x0000ad80 .quad -3851351762838199359 + 0x8f, 0x9c, 0x97, 0xc5, 0xab, 0xef, 0xf5, 0x8d, //0x0000ad88 .quad -8217398424034108273 + 0xb2, 0x7c, 0xb1, 0xa6, 0xf8, 0x8f, 0x30, 0xbd, //0x0000ad90 .quad -4814189703547749198 + 0xb3, 0x83, 0xfd, 0xb6, 0x96, 0x6b, 0x73, 0xb1, //0x0000ad98 .quad -5660062011615247437 + 0xde, 0xdb, 0x5d, 0xd0, 0xf6, 0xb3, 0x7c, 0xac, //0x0000ada0 .quad -6017737129434686498 + 0xa0, 0xe4, 0xbc, 0x64, 0x7c, 0x46, 0xd0, 0xdd, //0x0000ada8 .quad -2463391496091671392 + 0x6b, 0xa9, 0x3a, 0x42, 0x7a, 0xf0, 0xcd, 0x6b, //0x0000adb0 .quad 7768129340171790699 + 0xe4, 0x0e, 0xf6, 0xbe, 0x0d, 0x2c, 0xa2, 0x8a, //0x0000adb8 .quad -8457148712698376476 + 0xc6, 0x53, 0xc9, 0xd2, 0x98, 0x6c, 0xc1, 0x86, //0x0000adc0 .quad -8736582398494813242 + 0x9d, 0x92, 0xb3, 0x2e, 0x11, 0xb7, 0x4a, 0xad, //0x0000adc8 .quad -5959749872445582691 + 0xb7, 0xa8, 0x7b, 0x07, 0xbf, 0xc7, 0x71, 0xe8, //0x0000add0 .quad -1697355961263740745 + 0x44, 0x77, 0x60, 0x7a, 0xd5, 0x64, 0x9d, 0xd8, //0x0000add8 .quad -2838001322129590460 + 0x72, 0x49, 0xad, 0x64, 0xd7, 0x1c, 0x47, 0x11, //0x0000ade0 .quad 1244995533423855986 + 0x8b, 0x4a, 0x7c, 0x6c, 0x05, 0x5f, 0x62, 0x87, //0x0000ade8 .quad -8691279853972075893 + 0xcf, 0x9b, 0xd8, 0x3d, 0x0d, 0xe4, 0x98, 0xd5, //0x0000adf0 .quad -3055441601647567921 + 0x2d, 0x5d, 0x9b, 0xc7, 0xc6, 0xf6, 0x3a, 0xa9, //0x0000adf8 .quad -6252413799037706963 + 0xc3, 0xc2, 0x4e, 0x8d, 0x10, 0x1d, 0xff, 0x4a, //0x0000ae00 .quad 5404070034795315907 + 0x79, 0x34, 0x82, 0x79, 0x78, 0xb4, 0x89, 0xd3, //0x0000ae08 .quad -3203831230369745799 + 0xba, 0x39, 0x51, 0x58, 0x2a, 0x72, 0xdf, 0xce, //0x0000ae10 .quad -3539985255894009414 + 0xcb, 0x60, 0xf1, 0x4b, 0xcb, 0x10, 0x36, 0x84, //0x0000ae18 .quad -8919923546622172981 + 0x28, 0x88, 0x65, 0xee, 0xb4, 0x4e, 0x97, 0xc2, //0x0000ae20 .quad -4424981569867511768 + 0xfe, 0xb8, 0xed, 0x1e, 0xfe, 0x94, 0x43, 0xa5, //0x0000ae28 .quad -6538218414850328322 + 0x32, 0xea, 0xfe, 0x29, 0x62, 0x22, 0x3d, 0x73, //0x0000ae30 .quad 8303831092947774002 + 0x3e, 0x27, 0xa9, 0xa6, 0x3d, 0x7a, 0x94, 0xce, //0x0000ae38 .quad -3561087000135522498 + 0x5f, 0x52, 0x3f, 0x5a, 0x7d, 0x35, 0x06, 0x08, //0x0000ae40 .quad 578208414664970847 + 0x87, 0xb8, 0x29, 0x88, 0x66, 0xcc, 0x1c, 0x81, //0x0000ae48 .quad -9143208402725783417 + 0xf7, 0x26, 0xcf, 0xb0, 0xdc, 0xc2, 0x07, 0xca, //0x0000ae50 .quad -3888925500096174345 + 0xa8, 0x26, 0x34, 0x2a, 0x80, 0xff, 0x63, 0xa1, //0x0000ae58 .quad -6817324484979841368 + 0xb5, 0xf0, 0x02, 0xdd, 0x93, 0xb3, 0x89, 0xfc, //0x0000ae60 .quad -249470856692830027 + 0x52, 0x30, 0xc1, 0x34, 0x60, 0xff, 0xbc, 0xc9, //0x0000ae68 .quad -3909969587797413806 + 0xe2, 0xac, 0x43, 0xd4, 0x78, 0x20, 0xac, 0xbb, //0x0000ae70 .quad -4923524589293425438 + 0x67, 0x7c, 0xf1, 0x41, 0x38, 0x3f, 0x2c, 0xfc, //0x0000ae78 .quad -275775966319379353 + 0x0d, 0x4c, 0xaa, 0x84, 0x4b, 0x94, 0x4b, 0xd5, //0x0000ae80 .quad -3077202868308390899 + 0xc0, 0xed, 0x36, 0x29, 0x83, 0xa7, 0x9b, 0x9d, //0x0000ae88 .quad -7089889006590693952 + 0x11, 0xdf, 0xd4, 0x65, 0x5e, 0x79, 0x9e, 0x0a, //0x0000ae90 .quad 765182433041899281 + 0x31, 0xa9, 0x84, 0xf3, 0x63, 0x91, 0x02, 0xc5, //0x0000ae98 .quad -4250675239810979535 + 0xd5, 0x16, 0x4a, 0xff, 0xb5, 0x17, 0x46, 0x4d, //0x0000aea0 .quad 5568164059729762005 + 0x7d, 0xd3, 0x65, 0xf0, 0xbc, 0x35, 0x43, 0xf6, //0x0000aea8 .quad -701658031336336515 + 0x45, 0x4e, 0x8e, 0xbf, 0xd1, 0xce, 0x4b, 0x50, //0x0000aeb0 .quad 5785945546544795205 + 0x2e, 0xa4, 0x3f, 0x16, 0x96, 0x01, 0xea, 0x99, //0x0000aeb8 .quad -7356065297226292178 + 0xd6, 0xe1, 0x71, 0x2f, 0x86, 0xc2, 0x5e, 0xe4, //0x0000aec0 .quad -1990940103673781802 + 0x39, 0x8d, 0xcf, 0x9b, 0xfb, 0x81, 0x64, 0xc0, //0x0000aec8 .quad -4583395603105477319 + 0x4c, 0x5a, 0x4e, 0xbb, 0x27, 0x73, 0x76, 0x5d, //0x0000aed0 .quad 6734696907262548556 + 0x88, 0x70, 0xc3, 0x82, 0x7a, 0xa2, 0x7d, 0xf0, //0x0000aed8 .quad -1117558485454458744 + 0x6f, 0xf8, 0x10, 0xd5, 0xf8, 0x07, 0x6a, 0x3a, //0x0000aee0 .quad 4209185567039092847 + 0x55, 0x26, 0xba, 0x91, 0x8c, 0x85, 0x4e, 0x96, //0x0000aee8 .quad -7616003081050118571 + 0x8b, 0x36, 0x55, 0x0a, 0xf7, 0x89, 0x04, 0x89, //0x0000aef0 .quad -8573576096483297653 + 0xea, 0xaf, 0x28, 0xb6, 0xef, 0x26, 0xe2, 0xbb, //0x0000aef8 .quad -4908317832885260310 + 0x2e, 0x84, 0xea, 0xcc, 0x74, 0xac, 0x45, 0x2b, //0x0000af00 .quad 3118087934678041646 + 0xe5, 0xdb, 0xb2, 0xa3, 0xab, 0xb0, 0xda, 0xea, //0x0000af08 .quad -1523711272679187483 + 0x9d, 0x92, 0x12, 0x00, 0xc9, 0x8b, 0x0b, 0x3b, //0x0000af10 .quad 4254647968387469981 + 0x6f, 0xc9, 0x4f, 0x46, 0x6b, 0xae, 0xc8, 0x92, //0x0000af18 .quad -7869848573065574033 + 0x44, 0x37, 0x17, 0x40, 0xbb, 0x6e, 0xce, 0x09, //0x0000af20 .quad 706623942056949572 + 0xcb, 0xbb, 0xe3, 0x17, 0x06, 0xda, 0x7a, 0xb7, //0x0000af28 .quad -5225624697904579637 + 0x15, 0x05, 0x1d, 0x10, 0x6a, 0x0a, 0x42, 0xcc, //0x0000af30 .quad -3728406090856200939 + 0xbd, 0xaa, 0xdc, 0x9d, 0x87, 0x90, 0x59, 0xe5, //0x0000af38 .quad -1920344853953336643 + 0x2d, 0x23, 0x12, 0x4a, 0x82, 0x46, 0xa9, 0x9f, //0x0000af40 .quad -6941939825212513491 + 0xb6, 0xea, 0xa9, 0xc2, 0x54, 0xfa, 0x57, 0x8f, //0x0000af48 .quad -8117744561361917258 + 0xf9, 0xab, 0x96, 0xdc, 0x22, 0x98, 0x93, 0x47, //0x0000af50 .quad 5157633273766521849 + 0x64, 0x65, 0x54, 0xf3, 0xe9, 0xf8, 0x2d, 0xb3, //0x0000af58 .quad -5535494683275008668 + 0xf7, 0x56, 0xbc, 0x93, 0x2b, 0x7e, 0x78, 0x59, //0x0000af60 .quad 6447041592208152311 + 0xbd, 0x7e, 0x29, 0x70, 0x24, 0x77, 0xf9, 0xdf, //0x0000af68 .quad -2307682335666372931 + 0x5a, 0xb6, 0x55, 0x3c, 0xdb, 0x4e, 0xeb, 0x57, //0x0000af70 .quad 6335244004343789146 + 0x36, 0xef, 0x19, 0xc6, 0x76, 0xea, 0xfb, 0x8b, //0x0000af78 .quad -8359830487432564938 + 0xf1, 0x23, 0x6b, 0x0b, 0x92, 0x22, 0xe6, 0xed, //0x0000af80 .quad -1304317031425039375 + 0x03, 0x6b, 0xa0, 0x77, 0x14, 0xe5, 0xfa, 0xae, //0x0000af88 .quad -5838102090863318269 + 0xed, 0xec, 0x45, 0x8e, 0x36, 0xab, 0x5f, 0xe9, //0x0000af90 .quad -1630396289281299219 + 0xc4, 0x85, 0x88, 0x95, 0x59, 0x9e, 0xb9, 0xda, //0x0000af98 .quad -2685941595151759932 + 0x14, 0xb4, 0xeb, 0x18, 0x02, 0xcb, 0xdb, 0x11, //0x0000afa0 .quad 1286845328412881940 + 0x9b, 0x53, 0x75, 0xfd, 0xf7, 0x02, 0xb4, 0x88, //0x0000afa8 .quad -8596242524610931813 + 0x19, 0xa1, 0x26, 0x9f, 0xc2, 0xbd, 0x52, 0xd6, //0x0000afb0 .quad -3003129357911285479 + 0x81, 0xa8, 0xd2, 0xfc, 0xb5, 0x03, 0xe1, 0xaa, //0x0000afb8 .quad -6133617137336276863 + 0x5f, 0x49, 0xf0, 0x46, 0x33, 0x6d, 0xe7, 0x4b, //0x0000afc0 .quad 5469460339465668959 + 0xa2, 0x52, 0x07, 0x7c, 0xa3, 0x44, 0x99, 0xd5, //0x0000afc8 .quad -3055335403242958174 + 0xdb, 0x2d, 0x56, 0x0c, 0x40, 0xa4, 0x70, 0x6f, //0x0000afd0 .quad 8030098730593431003 + 0xa5, 0x93, 0x84, 0x2d, 0xe6, 0xca, 0x7f, 0x85, //0x0000afd8 .quad -8827113654667930715 + 0x52, 0xb9, 0x6b, 0x0f, 0x50, 0xcd, 0x4c, 0xcb, //0x0000afe0 .quad -3797434642040374958 + 0x8e, 0xb8, 0xe5, 0xb8, 0x9f, 0xbd, 0xdf, 0xa6, //0x0000afe8 .quad -6422206049907525490 + 0xa7, 0xa7, 0x46, 0x13, 0xa4, 0x00, 0x20, 0x7e, //0x0000aff0 .quad 9088264752731695015 + 0xb2, 0x26, 0x1f, 0xa7, 0x07, 0xad, 0x97, 0xd0, //0x0000aff8 .quad -3416071543957018958 + 0xc8, 0x28, 0x0c, 0x8c, 0x66, 0x00, 0xd4, 0x8e, //0x0000b000 .quad -8154892584824854328 + 0x2f, 0x78, 0x73, 0xc8, 0x24, 0xcc, 0x5e, 0x82, //0x0000b008 .quad -9052573742614218705 + 0xfa, 0x32, 0x0f, 0x2f, 0x80, 0x00, 0x89, 0x72, //0x0000b010 .quad 8253128342678483706 + 0x3b, 0x56, 0x90, 0xfa, 0x2d, 0x7f, 0xf6, 0xa2, //0x0000b018 .quad -6704031159840385477 + 0xb9, 0xff, 0xd2, 0x3a, 0xa0, 0x40, 0x2b, 0x4f, //0x0000b020 .quad 5704724409920716729 + 0xca, 0x6b, 0x34, 0x79, 0xf9, 0x1e, 0xb4, 0xcb, //0x0000b028 .quad -3768352931373093942 + 0xa8, 0xbf, 0x87, 0x49, 0xc8, 0x10, 0xf6, 0xe2, //0x0000b030 .quad -2092466524453879896 + 0xbc, 0x86, 0x81, 0xd7, 0xb7, 0x26, 0xa1, 0xfe, //0x0000b038 .quad -98755145788979524 + 0xc9, 0xd7, 0xf4, 0x2d, 0x7d, 0xca, 0xd9, 0x0d, //0x0000b040 .quad 998051431430019017 + 0x36, 0xf4, 0xb0, 0xe6, 0x32, 0xb8, 0x24, 0x9f, //0x0000b048 .quad -6979250993759194058 + 0xbb, 0x0d, 0x72, 0x79, 0x1c, 0x3d, 0x50, 0x91, //0x0000b050 .quad -7975807747567252037 + 0x43, 0x31, 0x5d, 0xa0, 0x3f, 0xe6, 0xed, 0xc6, //0x0000b058 .quad -4112377723771604669 + 0x2a, 0x91, 0xce, 0x97, 0x63, 0x4c, 0xa4, 0x75, //0x0000b060 .quad 8476984389250486570 + 0x94, 0x7d, 0x74, 0x88, 0xcf, 0x5f, 0xa9, 0xf8, //0x0000b068 .quad -528786136287117932 + 0xba, 0x1a, 0xe1, 0x3e, 0xbe, 0xaf, 0x86, 0xc9, //0x0000b070 .quad -3925256793573221702 + 0x7c, 0xce, 0x48, 0xb5, 0xe1, 0xdb, 0x69, 0x9b, //0x0000b078 .quad -7248020362820530564 + 0x68, 0x61, 0x99, 0xce, 0xad, 0x5b, 0xe8, 0xfb, //0x0000b080 .quad -294884973539139224 + 0x1b, 0x02, 0x9b, 0x22, 0xda, 0x52, 0x44, 0xc2, //0x0000b088 .quad -4448339435098275301 + 0xc3, 0xb9, 0x3f, 0x42, 0x99, 0x72, 0xe2, 0xfa, //0x0000b090 .quad -368606216923924029 + 0xa2, 0xc2, 0x41, 0xab, 0x90, 0x67, 0xd5, 0xf2, //0x0000b098 .quad -948738275445456222 + 0x1a, 0xd4, 0x67, 0xc9, 0x9f, 0x87, 0xcd, 0xdc, //0x0000b0a0 .quad -2536221894791146470 + 0xa5, 0x19, 0x09, 0x6b, 0xba, 0x60, 0xc5, 0x97, //0x0000b0a8 .quad -7510490449794491995 + 0x20, 0xc9, 0xc1, 0xbb, 0x87, 0xe9, 0x00, 0x54, //0x0000b0b0 .quad 6053094668365842720 + 0x0f, 0x60, 0xcb, 0x05, 0xe9, 0xb8, 0xb6, 0xbd, //0x0000b0b8 .quad -4776427043815727089 + 0x68, 0x3b, 0xb2, 0xaa, 0xe9, 0x23, 0x01, 0x29, //0x0000b0c0 .quad 2954682317029915496 + 0x13, 0x38, 0x3e, 0x47, 0x23, 0x67, 0x24, 0xed, //0x0000b0c8 .quad -1358847786342270957 + 0x21, 0x65, 0xaf, 0x0a, 0x72, 0xb6, 0xa0, 0xf9, //0x0000b0d0 .quad -459166561069996767 + 0x0b, 0xe3, 0x86, 0x0c, 0x76, 0xc0, 0x36, 0x94, //0x0000b0d8 .quad -7766808894105001205 + 0x69, 0x3e, 0x5b, 0x8d, 0x0e, 0xe4, 0x08, 0xf8, //0x0000b0e0 .quad -573958201337495959 + 0xce, 0x9b, 0xa8, 0x8f, 0x93, 0x70, 0x44, 0xb9, //0x0000b0e8 .quad -5096825099203863602 + 0x04, 0x0e, 0xb2, 0x30, 0x12, 0x1d, 0x0b, 0xb6, //0x0000b0f0 .quad -5329133770099257852 + 0xc2, 0xc2, 0x92, 0x73, 0xb8, 0x8c, 0x95, 0xe7, //0x0000b0f8 .quad -1759345355577441598 + 0xc2, 0x48, 0x6f, 0x5e, 0x2b, 0xf2, 0xc6, 0xb1, //0x0000b100 .quad -5636551615525730110 + 0xb9, 0xb9, 0x3b, 0x48, 0xf3, 0x77, 0xbd, 0x90, //0x0000b108 .quad -8017119874876982855 + 0xf3, 0x1a, 0x0b, 0x36, 0xb6, 0xae, 0x38, 0x1e, //0x0000b110 .quad 2177682517447613171 + 0x28, 0xa8, 0x4a, 0x1a, 0xf0, 0xd5, 0xec, 0xb4, //0x0000b118 .quad -5409713825168840664 + 0xb0, 0xe1, 0x8d, 0xc3, 0x63, 0xda, 0xc6, 0x25, //0x0000b120 .quad 2722103146809516464 + 0x32, 0x52, 0xdd, 0x20, 0x6c, 0x0b, 0x28, 0xe2, //0x0000b128 .quad -2150456263033662926 + 0x0e, 0xad, 0x38, 0x5a, 0x7e, 0x48, 0x9c, 0x57, //0x0000b130 .quad 6313000485183335694 + 0x5f, 0x53, 0x8a, 0x94, 0x23, 0x07, 0x59, 0x8d, //0x0000b138 .quad -8261564192037121185 + 0x51, 0xd8, 0xc6, 0xf0, 0x9d, 0x5a, 0x83, 0x2d, //0x0000b140 .quad 3279564588051781713 + 0x37, 0xe8, 0xac, 0x79, 0xec, 0x48, 0xaf, 0xb0, //0x0000b148 .quad -5715269221619013577 + 0x65, 0x8e, 0xf8, 0x6c, 0x45, 0x31, 0xe4, 0xf8, //0x0000b150 .quad -512230283362660763 + 0x44, 0x22, 0x18, 0x98, 0x27, 0x1b, 0xdb, 0xdc, //0x0000b158 .quad -2532400508596379068 + 0xff, 0x58, 0x1b, 0x64, 0xcb, 0x9e, 0x8e, 0x1b, //0x0000b160 .quad 1985699082112030975 + 0x6b, 0x15, 0x0f, 0xbf, 0xf8, 0xf0, 0x08, 0x8a, //0x0000b168 .quad -8500279345513818773 + 0x3f, 0x2f, 0x22, 0x3d, 0x7e, 0x46, 0x72, 0xe2, //0x0000b170 .quad -2129562165787349185 + 0xc5, 0xda, 0xd2, 0xee, 0x36, 0x2d, 0x8b, 0xac, //0x0000b178 .quad -6013663163464885563 + 0x0f, 0xbb, 0x6a, 0xcc, 0x1d, 0xd8, 0x0e, 0x5b, //0x0000b180 .quad 6561419329620589327 + 0x77, 0x91, 0x87, 0xaa, 0x84, 0xf8, 0xad, 0xd7, //0x0000b188 .quad -2905392935903719049 + 0xe9, 0xb4, 0xc2, 0x9f, 0x12, 0x47, 0xe9, 0x98, //0x0000b190 .quad -7428327965055601431 + 0xea, 0xba, 0x94, 0xea, 0x52, 0xbb, 0xcc, 0x86, //0x0000b198 .quad -8733399612580906262 + 0x24, 0x62, 0xb3, 0x47, 0xd7, 0x98, 0x23, 0x3f, //0x0000b1a0 .quad 4549648098962661924 + 0xa5, 0xe9, 0x39, 0xa5, 0x27, 0xea, 0x7f, 0xa8, //0x0000b1a8 .quad -6305063497298744923 + 0xad, 0x3a, 0xa0, 0x19, 0x0d, 0x7f, 0xec, 0x8e, //0x0000b1b0 .quad -8147997931578836307 + 0x0e, 0x64, 0x88, 0x8e, 0xb1, 0xe4, 0x9f, 0xd2, //0x0000b1b8 .quad -3269643353196043250 + 0xac, 0x24, 0x04, 0x30, 0x68, 0xcf, 0x53, 0x19, //0x0000b1c0 .quad 1825030320404309164 + 0x89, 0x3e, 0x15, 0xf9, 0xee, 0xee, 0xa3, 0x83, //0x0000b1c8 .quad -8961056123388608887 + 0xd7, 0x2d, 0x05, 0x3c, 0x42, 0xc3, 0xa8, 0x5f, //0x0000b1d0 .quad 6892973918932774359 + 0x2b, 0x8e, 0x5a, 0xb7, 0xaa, 0xea, 0x8c, 0xa4, //0x0000b1d8 .quad -6589634135808373205 + 0x4d, 0x79, 0x06, 0xcb, 0x12, 0xf4, 0x92, 0x37, //0x0000b1e0 .quad 4004531380238580045 + 0xb6, 0x31, 0x31, 0x65, 0x55, 0x25, 0xb0, 0xcd, //0x0000b1e8 .quad -3625356651333078602 + 0xd0, 0x0b, 0xe4, 0xbe, 0x8b, 0xd8, 0xbb, 0xe2, //0x0000b1f0 .quad -2108853905778275376 + 0x11, 0xbf, 0x3e, 0x5f, 0x55, 0x17, 0x8e, 0x80, //0x0000b1f8 .quad -9183376934724255983 + 0xc4, 0x0e, 0x9d, 0xae, 0xae, 0xce, 0x6a, 0x5b, //0x0000b200 .quad 6587304654631931588 + 0xd6, 0x6e, 0x0e, 0xb7, 0x2a, 0x9d, 0xb1, 0xa0, //0x0000b208 .quad -6867535149977932074 + 0x75, 0x52, 0x44, 0x5a, 0x5a, 0x82, 0x45, 0xf2, //0x0000b210 .quad -989241218564861323 + 0x8b, 0x0a, 0xd2, 0x64, 0x75, 0x04, 0xde, 0xc8, //0x0000b218 .quad -3972732919045027189 + 0x12, 0x67, 0xd5, 0xf0, 0xf0, 0xe2, 0xd6, 0xee, //0x0000b220 .quad -1236551523206076654 + 0x2e, 0x8d, 0x06, 0xbe, 0x92, 0x85, 0x15, 0xfb, //0x0000b228 .quad -354230130378896082 + 0x6b, 0x60, 0x85, 0x96, 0xd6, 0x4d, 0x46, 0x55, //0x0000b230 .quad 6144684325637283947 + 0x3d, 0x18, 0xc4, 0xb6, 0x7b, 0x73, 0xed, 0x9c, //0x0000b238 .quad -7138922859127891907 + 0x86, 0xb8, 0x26, 0x3c, 0x4c, 0xe1, 0x97, 0xaa, //0x0000b240 .quad -6154202648235558778 + 0x4c, 0x1e, 0x75, 0xa4, 0x5a, 0xd0, 0x28, 0xc4, //0x0000b248 .quad -4311967555482476980 + 0xa8, 0x66, 0x30, 0x4b, 0x9f, 0xd9, 0x3d, 0xd5, //0x0000b250 .quad -3081067291867060568 + 0xdf, 0x65, 0x92, 0x4d, 0x71, 0x04, 0x33, 0xf5, //0x0000b258 .quad -778273425925708321 + 0x29, 0x40, 0xfe, 0x8e, 0x03, 0xa8, 0x46, 0xe5, //0x0000b260 .quad -1925667057416912855 + 0xab, 0x7f, 0x7b, 0xd0, 0xc6, 0xe2, 0x3f, 0x99, //0x0000b268 .quad -7403949918844649557 + 0x33, 0xd0, 0xbd, 0x72, 0x04, 0x52, 0x98, 0xde, //0x0000b270 .quad -2407083821771141069 + 0x96, 0x5f, 0x9a, 0x84, 0x78, 0xdb, 0x8f, 0xbf, //0x0000b278 .quad -4643251380128424042 + 0x40, 0x44, 0x6d, 0x8f, 0x85, 0x66, 0x3e, 0x96, //0x0000b280 .quad -7620540795641314240 + 0x7c, 0xf7, 0xc0, 0xa5, 0x56, 0xd2, 0x73, 0xef, //0x0000b288 .quad -1192378206733142148 + 0xa8, 0x4a, 0xa4, 0x79, 0x13, 0x00, 0xe7, 0xdd, //0x0000b290 .quad -2456994988062127448 + 0xad, 0x9a, 0x98, 0x27, 0x76, 0x63, 0xa8, 0x95, //0x0000b298 .quad -7662765406849295699 + 0x52, 0x5d, 0x0d, 0x58, 0x18, 0xc0, 0x60, 0x55, //0x0000b2a0 .quad 6152128301777116498 + 0x59, 0xc1, 0x7e, 0xb1, 0x53, 0x7c, 0x12, 0xbb, //0x0000b2a8 .quad -4966770740134231719 + 0xa6, 0xb4, 0x10, 0x6e, 0x1e, 0xf0, 0xb8, 0xaa, //0x0000b2b0 .quad -6144897678060768090 + 0xaf, 0x71, 0xde, 0x9d, 0x68, 0x1b, 0xd7, 0xe9, //0x0000b2b8 .quad -1596777406740401745 + 0xe8, 0x70, 0xca, 0x04, 0x13, 0x96, 0xb3, 0xca, //0x0000b2c0 .quad -3840561048787980056 + 0x0d, 0x07, 0xab, 0x62, 0x21, 0x71, 0x26, 0x92, //0x0000b2c8 .quad -7915514906853832947 + 0x22, 0x0d, 0xfd, 0xc5, 0x97, 0x7b, 0x60, 0x3d, //0x0000b2d0 .quad 4422670725869800738 + 0xd1, 0xc8, 0x55, 0xbb, 0x69, 0x0d, 0xb0, 0xb6, //0x0000b2d8 .quad -5282707615139903279 + 0x6a, 0x50, 0x7c, 0xb7, 0x7d, 0x9a, 0xb8, 0x8c, //0x0000b2e0 .quad -8306719647944912790 + 0x05, 0x3b, 0x2b, 0x2a, 0xc4, 0x10, 0x5c, 0xe4, //0x0000b2e8 .quad -1991698500497491195 + 0x42, 0xb2, 0xad, 0x92, 0x8e, 0x60, 0xf3, 0x77, //0x0000b2f0 .quad 8643358275316593218 + 0xe3, 0x04, 0x5b, 0x9a, 0x7a, 0x8a, 0xb9, 0x8e, //0x0000b2f8 .quad -8162340590452013853 + 0xd3, 0x1e, 0x59, 0x37, 0xb2, 0x38, 0xf0, 0x55, //0x0000b300 .quad 6192511825718353619 + 0x1c, 0xc6, 0xf1, 0x40, 0x19, 0xed, 0x67, 0xb2, //0x0000b308 .quad -5591239719637629412 + 0x88, 0x66, 0x2f, 0xc5, 0xde, 0x46, 0x6c, 0x6b, //0x0000b310 .quad 7740639782147942024 + 0xa3, 0x37, 0x2e, 0x91, 0x5f, 0xe8, 0x01, 0xdf, //0x0000b318 .quad -2377363631119648861 + 0x15, 0xa0, 0x3d, 0x3b, 0x4b, 0xac, 0x23, 0x23, //0x0000b320 .quad 2532056854628769813 + 0xc6, 0xe2, 0xbc, 0xba, 0x3b, 0x31, 0x61, 0x8b, //0x0000b328 .quad -8403381297090862394 + 0x1a, 0x08, 0x0d, 0x0a, 0x5e, 0x97, 0xec, 0xab, //0x0000b330 .quad -6058300968568813542 + 0x77, 0x1b, 0x6c, 0xa9, 0x8a, 0x7d, 0x39, 0xae, //0x0000b338 .quad -5892540602936190089 + 0x21, 0x4a, 0x90, 0x8c, 0x35, 0xbd, 0xe7, 0x96, //0x0000b340 .quad -7572876210711016927 + 0x55, 0x22, 0xc7, 0x53, 0xed, 0xdc, 0xc7, 0xd9, //0x0000b348 .quad -2753989735242849707 + 0x54, 0x2e, 0xda, 0x77, 0x41, 0xd6, 0x50, 0x7e, //0x0000b350 .quad 9102010423587778132 + 0x75, 0x75, 0x5c, 0x54, 0x14, 0xea, 0x1c, 0x88, //0x0000b358 .quad -8638772612167862923 + 0xe9, 0xb9, 0xd0, 0xd5, 0xd1, 0x0b, 0xe5, 0xdd, //0x0000b360 .quad -2457545025797441047 + 0xd2, 0x92, 0x73, 0x69, 0x99, 0x24, 0x24, 0xaa, //0x0000b368 .quad -6186779746782440750 + 0x64, 0xe8, 0x44, 0x4b, 0xc6, 0x4e, 0x5e, 0x95, //0x0000b370 .quad -7683617300674189212 + 0x87, 0x77, 0xd0, 0xc3, 0xbf, 0x2d, 0xad, 0xd4, //0x0000b378 .quad -3121788665050663033 + 0x3e, 0x11, 0x0b, 0xef, 0x3b, 0xf1, 0x5a, 0xbd, //0x0000b380 .quad -4802260812921368258 + 0xb4, 0x4a, 0x62, 0xda, 0x97, 0x3c, 0xec, 0x84, //0x0000b388 .quad -8868646943297746252 + 0x8e, 0xd5, 0xcd, 0xea, 0x8a, 0xad, 0xb1, 0xec, //0x0000b390 .quad -1391139997724322418 + 0x61, 0xdd, 0xfa, 0xd0, 0xbd, 0x4b, 0x27, 0xa6, //0x0000b398 .quad -6474122660694794911 + 0xf2, 0x4a, 0x81, 0xa5, 0xed, 0x18, 0xde, 0x67, //0x0000b3a0 .quad 7484447039699372786 + 0xba, 0x94, 0x39, 0x45, 0xad, 0x1e, 0xb1, 0xcf, //0x0000b3a8 .quad -3480967307441105734 + 0xd7, 0xce, 0x70, 0x87, 0x94, 0xcf, 0xea, 0x80, //0x0000b3b0 .quad -9157278655470055721 + 0xf4, 0xfc, 0x43, 0x4b, 0x2c, 0xb3, 0xce, 0x81, //0x0000b3b8 .quad -9093133594791772940 + 0x8d, 0x02, 0x4d, 0xa9, 0x79, 0x83, 0x25, 0xa1, //0x0000b3c0 .quad -6834912300910181747 + 0x31, 0xfc, 0x14, 0x5e, 0xf7, 0x5f, 0x42, 0xa2, //0x0000b3c8 .quad -6754730975062328271 + 0x30, 0x43, 0xa0, 0x13, 0x58, 0xe4, 0x6e, 0x09, //0x0000b3d0 .quad 679731660717048624 + 0x3e, 0x3b, 0x9a, 0x35, 0xf5, 0xf7, 0xd2, 0xca, //0x0000b3d8 .quad -3831727700400522434 + 0xfc, 0x53, 0x88, 0x18, 0x6e, 0x9d, 0xca, 0x8b, //0x0000b3e0 .quad -8373707460958465028 + 0x0d, 0xca, 0x00, 0x83, 0xf2, 0xb5, 0x87, 0xfd, //0x0000b3e8 .quad -177973607073265139 + 0x7d, 0x34, 0x55, 0xcf, 0x64, 0xa2, 0x5e, 0x77, //0x0000b3f0 .quad 8601490892183123069 + 0x48, 0x7e, 0xe0, 0x91, 0xb7, 0xd1, 0x74, 0x9e, //0x0000b3f8 .quad -7028762532061872568 + 0x9d, 0x81, 0x2a, 0x03, 0xfe, 0x4a, 0x36, 0x95, //0x0000b400 .quad -7694880458480647779 + 0xda, 0x9d, 0x58, 0x76, 0x25, 0x06, 0x12, 0xc6, //0x0000b408 .quad -4174267146649952806 + 0x04, 0x22, 0xf5, 0x83, 0xbd, 0xdd, 0x83, 0x3a, //0x0000b410 .quad 4216457482181353988 + 0x51, 0xc5, 0xee, 0xd3, 0xae, 0x87, 0x96, 0xf7, //0x0000b418 .quad -606147914885053103 + 0x42, 0x35, 0x79, 0x72, 0x96, 0x6a, 0x92, 0xc4, //0x0000b420 .quad -4282243101277735614 + 0x52, 0x3b, 0x75, 0x44, 0xcd, 0x14, 0xbe, 0x9a, //0x0000b428 .quad -7296371474444240046 + 0x93, 0x82, 0x17, 0x0f, 0x3c, 0x05, 0xb7, 0x75, //0x0000b430 .quad 8482254178684994195 + 0x27, 0x8a, 0x92, 0x95, 0x00, 0x9a, 0x6d, 0xc1, //0x0000b438 .quad -4508778324627912153 + 0x38, 0x63, 0xdd, 0x12, 0x8b, 0xc6, 0x24, 0x53, //0x0000b440 .quad 5991131704928854840 + 0xb1, 0x2c, 0xf7, 0xba, 0x80, 0x00, 0xc9, 0xf1, //0x0000b448 .quad -1024286887357502287 + 0x03, 0x5e, 0xca, 0xeb, 0x16, 0xfc, 0xf6, 0xd3, //0x0000b450 .quad -3173071712060547581 + 0xee, 0x7b, 0xda, 0x74, 0x50, 0xa0, 0x1d, 0x97, //0x0000b458 .quad -7557708332239520786 + 0x84, 0xf5, 0xbc, 0xa6, 0x1c, 0xbb, 0xf4, 0x88, //0x0000b460 .quad -8578025658503072380 + 0xea, 0x1a, 0x11, 0x92, 0x64, 0x08, 0xe5, 0xbc, //0x0000b468 .quad -4835449396872013078 + 0xe5, 0x32, 0x6c, 0xd0, 0xe3, 0xe9, 0x31, 0x2b, //0x0000b470 .quad 3112525982153323237 + 0xa5, 0x61, 0x95, 0xb6, 0x7d, 0x4a, 0x1e, 0xec, //0x0000b478 .quad -1432625727662628443 + 0xcf, 0x9f, 0x43, 0x62, 0x2e, 0x32, 0xff, 0x3a, //0x0000b480 .quad 4251171748059520975 + 0x07, 0x5d, 0x1d, 0x92, 0x8e, 0xee, 0x92, 0x93, //0x0000b488 .quad -7812920107430224633 + 0xc2, 0x87, 0xd4, 0xfa, 0xb9, 0xfe, 0xbe, 0x09, //0x0000b490 .quad 702278666647013314 + 0x49, 0xb4, 0xa4, 0x36, 0x32, 0xaa, 0x77, 0xb8, //0x0000b498 .quad -5154464115860392887 + 0xb3, 0xa9, 0x89, 0x79, 0x68, 0xbe, 0x2e, 0x4c, //0x0000b4a0 .quad 5489534351736154547 + 0x5b, 0xe1, 0x4d, 0xc4, 0xbe, 0x94, 0x95, 0xe6, //0x0000b4a8 .quad -1831394126398103205 + 0x10, 0x0a, 0xf6, 0x4b, 0x01, 0x37, 0x9d, 0x0f, //0x0000b4b0 .quad 1125115960621402640 + 0xd9, 0xac, 0xb0, 0x3a, 0xf7, 0x7c, 0x1d, 0x90, //0x0000b4b8 .quad -8062150356639896359 + 0x94, 0x8c, 0xf3, 0x9e, 0xc1, 0x84, 0x84, 0x53, //0x0000b4c0 .quad 6018080969204141204 + 0x0f, 0xd8, 0x5c, 0x09, 0x35, 0xdc, 0x24, 0xb4, //0x0000b4c8 .quad -5466001927372482545 + 0xb9, 0x6f, 0xb0, 0x06, 0xf2, 0xa5, 0x65, 0x28, //0x0000b4d0 .quad 2910915193077788601 + 0x13, 0x0e, 0xb4, 0x4b, 0x42, 0x13, 0x2e, 0xe1, //0x0000b4d8 .quad -2220816390788215277 + 0xd3, 0x45, 0x2e, 0x44, 0xb7, 0x87, 0x3f, 0xf9, //0x0000b4e0 .quad -486521013540076077 + 0xcb, 0x88, 0x50, 0x6f, 0x09, 0xcc, 0xbc, 0x8c, //0x0000b4e8 .quad -8305539271883716405 + 0x48, 0xd7, 0x39, 0x15, 0xa5, 0x69, 0x8f, 0xf7, //0x0000b4f0 .quad -608151266925095096 + 0xfe, 0xaa, 0x24, 0xcb, 0x0b, 0xff, 0xeb, 0xaf, //0x0000b4f8 .quad -5770238071427257602 + 0x1b, 0x4d, 0x88, 0x5a, 0x0e, 0x44, 0x73, 0xb5, //0x0000b500 .quad -5371875102083756773 + 0xbe, 0xd5, 0xed, 0xbd, 0xce, 0xfe, 0xe6, 0xdb, //0x0000b508 .quad -2601111570856684098 + 0x30, 0x30, 0x95, 0xf8, 0x88, 0x0a, 0x68, 0x31, //0x0000b510 .quad 3560107088838733872 + 0x97, 0xa5, 0xb4, 0x36, 0x41, 0x5f, 0x70, 0x89, //0x0000b518 .quad -8543223759426509417 + 0x3d, 0x7c, 0xba, 0x36, 0x2b, 0x0d, 0xc2, 0xfd, //0x0000b520 .quad -161552157378970563 + 0xfc, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x0000b528 .quad -6067343680855748868 + 0x4c, 0x1b, 0x69, 0x04, 0x76, 0x90, 0x32, 0x3d, //0x0000b530 .quad 4409745821703674700 + 0xbc, 0x42, 0x7a, 0xe5, 0xd5, 0x94, 0xbf, 0xd6, //0x0000b538 .quad -2972493582642298180 + 0x0f, 0xb1, 0xc1, 0xc2, 0x49, 0x9a, 0x3f, 0xa6, //0x0000b540 .quad -6467280898289979121 + 0xb5, 0x69, 0x6c, 0xaf, 0x05, 0xbd, 0x37, 0x86, //0x0000b548 .quad -8775337516792518219 + 0x53, 0x1d, 0x72, 0x33, 0xdc, 0x80, 0xcf, 0x0f, //0x0000b550 .quad 1139270913992301907 + 0x23, 0x84, 0x47, 0x1b, 0x47, 0xac, 0xc5, 0xa7, //0x0000b558 .quad -6357485877563259869 + 0xa8, 0xa4, 0x4e, 0x40, 0x13, 0x61, 0xc3, 0xd3, //0x0000b560 .quad -3187597375937010520 + 0x2b, 0x65, 0x19, 0xe2, 0x58, 0x17, 0xb7, 0xd1, //0x0000b568 .quad -3335171328526686933 + 0xe9, 0x26, 0x31, 0x08, 0xac, 0x1c, 0x5a, 0x64, //0x0000b570 .quad 7231123676894144233 + 0x3b, 0xdf, 0x4f, 0x8d, 0x97, 0x6e, 0x12, 0x83, //0x0000b578 .quad -9002011107970261189 + 0xa3, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, 0x70, 0x3d, //0x0000b580 .quad 4427218577690292387 + 0x0a, 0xd7, 0xa3, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, //0x0000b588 .quad -6640827866535438582 + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x0000b590 QUAD $0xcccccccccccccccc; QUAD $0xcccccccccccccccc // .space 16, '\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b5a0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x0000b5a8 .quad -9223372036854775808 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b5b0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, //0x0000b5b8 .quad -6917529027641081856 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b5c0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, //0x0000b5c8 .quad -4035225266123964416 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b5d0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, //0x0000b5d8 .quad -432345564227567616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b5e0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x9c, //0x0000b5e8 .quad -7187745005283311616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b5f0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xc3, //0x0000b5f8 .quad -4372995238176751616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b600 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xf4, //0x0000b608 .quad -854558029293551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b610 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x98, //0x0000b618 .quad -7451627795949551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b620 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xbc, 0xbe, //0x0000b628 .quad -4702848726509551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b630 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6b, 0xee, //0x0000b638 .quad -1266874889709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b640 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x02, 0x95, //0x0000b648 .quad -7709325833709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b650 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x40, 0xb7, 0x43, 0xba, //0x0000b658 .quad -5024971273709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b660 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0xd4, 0xe8, //0x0000b668 .quad -1669528073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b670 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xe7, 0x84, 0x91, //0x0000b678 .quad -7960984073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b680 .quad 0 + 0x00, 0x00, 0x00, 0x80, 0xf4, 0x20, 0xe6, 0xb5, //0x0000b688 .quad -5339544073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b690 .quad 0 + 0x00, 0x00, 0x00, 0xa0, 0x31, 0xa9, 0x5f, 0xe3, //0x0000b698 .quad -2062744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b6a0 .quad 0 + 0x00, 0x00, 0x00, 0x04, 0xbf, 0xc9, 0x1b, 0x8e, //0x0000b6a8 .quad -8206744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b6b0 .quad 0 + 0x00, 0x00, 0x00, 0xc5, 0x2e, 0xbc, 0xa2, 0xb1, //0x0000b6b8 .quad -5646744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b6c0 .quad 0 + 0x00, 0x00, 0x40, 0x76, 0x3a, 0x6b, 0x0b, 0xde, //0x0000b6c8 .quad -2446744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b6d0 .quad 0 + 0x00, 0x00, 0xe8, 0x89, 0x04, 0x23, 0xc7, 0x8a, //0x0000b6d8 .quad -8446744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b6e0 .quad 0 + 0x00, 0x00, 0x62, 0xac, 0xc5, 0xeb, 0x78, 0xad, //0x0000b6e8 .quad -5946744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b6f0 .quad 0 + 0x00, 0x80, 0x7a, 0x17, 0xb7, 0x26, 0xd7, 0xd8, //0x0000b6f8 .quad -2821744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b700 .quad 0 + 0x00, 0x90, 0xac, 0x6e, 0x32, 0x78, 0x86, 0x87, //0x0000b708 .quad -8681119073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b710 .quad 0 + 0x00, 0xb4, 0x57, 0x0a, 0x3f, 0x16, 0x68, 0xa9, //0x0000b718 .quad -6239712823709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b720 .quad 0 + 0x00, 0xa1, 0xed, 0xcc, 0xce, 0x1b, 0xc2, 0xd3, //0x0000b728 .quad -3187955011209551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b730 .quad 0 + 0xa0, 0x84, 0x14, 0x40, 0x61, 0x51, 0x59, 0x84, //0x0000b738 .quad -8910000909647051616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b740 .quad 0 + 0xc8, 0xa5, 0x19, 0x90, 0xb9, 0xa5, 0x6f, 0xa5, //0x0000b748 .quad -6525815118631426616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000b750 .quad 0 + 0x3a, 0x0f, 0x20, 0xf4, 0x27, 0x8f, 0xcb, 0xce, //0x0000b758 .quad -3545582879861895366 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, //0x0000b760 .quad 4611686018427387904 + 0x84, 0x09, 0x94, 0xf8, 0x78, 0x39, 0x3f, 0x81, //0x0000b768 .quad -9133518327554766460 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, //0x0000b770 .quad 5764607523034234880 + 0xe5, 0x0b, 0xb9, 0x36, 0xd7, 0x07, 0x8f, 0xa1, //0x0000b778 .quad -6805211891016070171 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, //0x0000b780 .quad -6629298651489370112 + 0xde, 0x4e, 0x67, 0x04, 0xcd, 0xc9, 0xf2, 0xc9, //0x0000b788 .quad -3894828845342699810 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, //0x0000b790 .quad 5548434740920451072 + 0x96, 0x22, 0x81, 0x45, 0x40, 0x7c, 0x6f, 0xfc, //0x0000b798 .quad -256850038250986858 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf0, //0x0000b7a0 .quad -1143914305352105984 + 0x9d, 0xb5, 0x70, 0x2b, 0xa8, 0xad, 0xc5, 0x9d, //0x0000b7a8 .quad -7078060301547948643 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, //0x0000b7b0 .quad 7793479155164643328 + 0x05, 0xe3, 0x4c, 0x36, 0x12, 0x19, 0x37, 0xc5, //0x0000b7b8 .quad -4235889358507547899 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0xc7, //0x0000b7c0 .quad -4093209111326359552 + 0xc6, 0x1b, 0xe0, 0xc3, 0x56, 0xdf, 0x84, 0xf6, //0x0000b7c8 .quad -683175679707046970 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7f, 0x3c, //0x0000b7d0 .quad 4359273333062107136 + 0x5c, 0x11, 0x6c, 0x3a, 0x96, 0x0b, 0x13, 0x9a, //0x0000b7d8 .quad -7344513827457986212 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9f, 0x4b, //0x0000b7e0 .quad 5449091666327633920 + 0xb3, 0x15, 0x07, 0xc9, 0x7b, 0xce, 0x97, 0xc0, //0x0000b7e8 .quad -4568956265895094861 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x86, 0x1e, //0x0000b7f0 .quad 2199678564482154496 + 0x20, 0xdb, 0x48, 0xbb, 0x1a, 0xc2, 0xbd, 0xf0, //0x0000b7f8 .quad -1099509313941480672 + 0x00, 0x00, 0x00, 0x00, 0x80, 0x44, 0x14, 0x13, //0x0000b800 .quad 1374799102801346560 + 0xf4, 0x88, 0x0d, 0xb5, 0x50, 0x99, 0x76, 0x96, //0x0000b808 .quad -7604722348854507276 + 0x00, 0x00, 0x00, 0x00, 0xa0, 0x55, 0xd9, 0x17, //0x0000b810 .quad 1718498878501683200 + 0x31, 0xeb, 0x50, 0xe2, 0xa4, 0x3f, 0x14, 0xbc, //0x0000b818 .quad -4894216917640746191 + 0x00, 0x00, 0x00, 0x00, 0x08, 0xab, 0xcf, 0x5d, //0x0000b820 .quad 6759809616554491904 + 0xfd, 0x25, 0xe5, 0x1a, 0x8e, 0x4f, 0x19, 0xeb, //0x0000b828 .quad -1506085128623544835 + 0x00, 0x00, 0x00, 0x00, 0xe5, 0xca, 0xa1, 0x5a, //0x0000b830 .quad 6530724019560251392 + 0xbe, 0x37, 0xcf, 0xd0, 0xb8, 0xd1, 0xef, 0x92, //0x0000b838 .quad -7858832233030797378 + 0x00, 0x00, 0x00, 0x40, 0x9e, 0x3d, 0x4a, 0xf1, //0x0000b840 .quad -1059967012404461568 + 0xad, 0x05, 0x03, 0x05, 0x27, 0xc6, 0xab, 0xb7, //0x0000b848 .quad -5211854272861108819 + 0x00, 0x00, 0x00, 0xd0, 0x05, 0xcd, 0x9c, 0x6d, //0x0000b850 .quad 7898413271349198848 + 0x19, 0xc7, 0x43, 0xc6, 0xb0, 0xb7, 0x96, 0xe5, //0x0000b858 .quad -1903131822648998119 + 0x00, 0x00, 0x00, 0xa2, 0x23, 0x00, 0x82, 0xe4, //0x0000b860 .quad -1981020733047832576 + 0x6f, 0x5c, 0xea, 0x7b, 0xce, 0x32, 0x7e, 0x8f, //0x0000b868 .quad -8106986416796705681 + 0x00, 0x00, 0x80, 0x8a, 0x2c, 0x80, 0xa2, 0xdd, //0x0000b870 .quad -2476275916309790720 + 0x8b, 0xf3, 0xe4, 0x1a, 0x82, 0xbf, 0x5d, 0xb3, //0x0000b878 .quad -5522047002568494197 + 0x00, 0x00, 0x20, 0xad, 0x37, 0x20, 0x0b, 0xd5, //0x0000b880 .quad -3095344895387238400 + 0x6e, 0x30, 0x9e, 0xa1, 0x62, 0x2f, 0x35, 0xe0, //0x0000b888 .quad -2290872734783229842 + 0x00, 0x00, 0x34, 0xcc, 0x22, 0xf4, 0x26, 0x45, //0x0000b890 .quad 4982938468024057856 + 0x45, 0xde, 0x02, 0xa5, 0x9d, 0x3d, 0x21, 0x8c, //0x0000b898 .quad -8349324486880600507 + 0x00, 0x00, 0x41, 0x7f, 0x2b, 0xb1, 0x70, 0x96, //0x0000b8a0 .quad -7606384970252091392 + 0xd6, 0x95, 0x43, 0x0e, 0x05, 0x8d, 0x29, 0xaf, //0x0000b8a8 .quad -5824969590173362730 + 0x00, 0x40, 0x11, 0x5f, 0x76, 0xdd, 0x0c, 0x3c, //0x0000b8b0 .quad 4327076842467049472 + 0x4c, 0x7b, 0xd4, 0x51, 0x46, 0xf0, 0xf3, 0xda, //0x0000b8b8 .quad -2669525969289315508 + 0x00, 0xc8, 0x6a, 0xfb, 0x69, 0x0a, 0x88, 0xa5, //0x0000b8c0 .quad -6518949010312869888 + 0x0f, 0xcd, 0x24, 0xf3, 0x2b, 0x76, 0xd8, 0x88, //0x0000b8c8 .quad -8585982758446904049 + 0x00, 0x7a, 0x45, 0x7a, 0x04, 0x0d, 0xea, 0x8e, //0x0000b8d0 .quad -8148686262891087360 + 0x53, 0x00, 0xee, 0xef, 0xb6, 0x93, 0x0e, 0xab, //0x0000b8d8 .quad -6120792429631242157 + 0x80, 0xd8, 0xd6, 0x98, 0x45, 0x90, 0xa4, 0x72, //0x0000b8e0 .quad 8260886245095692416 + 0x68, 0x80, 0xe9, 0xab, 0xa4, 0x38, 0xd2, 0xd5, //0x0000b8e8 .quad -3039304518611664792 + 0x50, 0x47, 0x86, 0x7f, 0x2b, 0xda, 0xa6, 0x47, //0x0000b8f0 .quad 5163053903184807760 + 0x41, 0xf0, 0x71, 0xeb, 0x66, 0x63, 0xa3, 0x85, //0x0000b8f8 .quad -8817094351773372351 + 0x24, 0xd9, 0x67, 0x5f, 0xb6, 0x90, 0x90, 0x99, //0x0000b900 .quad -7381240676301154012 + 0x51, 0x6c, 0x4e, 0xa6, 0x40, 0x3c, 0x0c, 0xa7, //0x0000b908 .quad -6409681921289327535 + 0x6d, 0xcf, 0x41, 0xf7, 0xe3, 0xb4, 0xf4, 0xff, //0x0000b910 .quad -3178808521666707 + 0x65, 0x07, 0xe2, 0xcf, 0x50, 0x4b, 0xcf, 0xd0, //0x0000b918 .quad -3400416383184271515 + 0xa4, 0x21, 0x89, 0x7a, 0x0e, 0xf1, 0xf8, 0xbf, //0x0000b920 .quad -4613672773753429596 + 0x9f, 0x44, 0xed, 0x81, 0x12, 0x8f, 0x81, 0x82, //0x0000b928 .quad -9042789267131251553 + 0x0d, 0x6a, 0x2b, 0x19, 0x52, 0x2d, 0xf7, 0xaf, //0x0000b930 .quad -5767090967191786995 + 0xc7, 0x95, 0x68, 0x22, 0xd7, 0xf2, 0x21, 0xa3, //0x0000b938 .quad -6691800565486676537 + 0x90, 0x44, 0x76, 0x9f, 0xa6, 0xf8, 0xf4, 0x9b, //0x0000b940 .quad -7208863708989733744 + 0x39, 0xbb, 0x02, 0xeb, 0x8c, 0x6f, 0xea, 0xcb, //0x0000b948 .quad -3753064688430957767 + 0xb4, 0xd5, 0x53, 0x47, 0xd0, 0x36, 0xf2, 0x02, //0x0000b950 .quad 212292400617608628 + 0x08, 0x6a, 0xc3, 0x25, 0x70, 0x0b, 0xe5, 0xfe, //0x0000b958 .quad -79644842111309304 + 0x90, 0x65, 0x94, 0x2c, 0x42, 0x62, 0xd7, 0x01, //0x0000b960 .quad 132682750386005392 + 0x45, 0x22, 0x9a, 0x17, 0x26, 0x27, 0x4f, 0x9f, //0x0000b968 .quad -6967307053960650171 + 0xf5, 0x7e, 0xb9, 0xb7, 0xd2, 0x3a, 0x4d, 0x42, //0x0000b970 .quad 4777539456409894645 + 0xd6, 0xaa, 0x80, 0x9d, 0xef, 0xf0, 0x22, 0xc7, //0x0000b978 .quad -4097447799023424810 + 0xb2, 0xde, 0xa7, 0x65, 0x87, 0x89, 0xe0, 0xd2, //0x0000b980 .quad -3251447716342407502 + 0x8b, 0xd5, 0xe0, 0x84, 0x2b, 0xad, 0xeb, 0xf8, //0x0000b988 .quad -510123730351893109 + 0x2f, 0xeb, 0x88, 0x9f, 0xf4, 0x55, 0xcc, 0x63, //0x0000b990 .quad 7191217214140771119 + 0x77, 0x85, 0x0c, 0x33, 0x3b, 0x4c, 0x93, 0x9b, //0x0000b998 .quad -7236356359111015049 + 0xfb, 0x25, 0x6b, 0xc7, 0x71, 0x6b, 0xbf, 0x3c, //0x0000b9a0 .quad 4377335499248575995 + 0xd5, 0xa6, 0xcf, 0xff, 0x49, 0x1f, 0x78, 0xc2, //0x0000b9a8 .quad -4433759430461380907 + 0x7a, 0xef, 0x45, 0x39, 0x4e, 0x46, 0xef, 0x8b, //0x0000b9b0 .quad -8363388681221443718 + 0x8a, 0x90, 0xc3, 0x7f, 0x1c, 0x27, 0x16, 0xf3, //0x0000b9b8 .quad -930513269649338230 + 0xac, 0xb5, 0xcb, 0xe3, 0xf0, 0x8b, 0x75, 0x97, //0x0000b9c0 .quad -7532960934977096276 + 0x56, 0x3a, 0xda, 0xcf, 0x71, 0xd8, 0xed, 0x97, //0x0000b9c8 .quad -7499099821171918250 + 0x17, 0xa3, 0xbe, 0x1c, 0xed, 0xee, 0x52, 0x3d, //0x0000b9d0 .quad 4418856886560793367 + 0xec, 0xc8, 0xd0, 0x43, 0x8e, 0x4e, 0xe9, 0xbd, //0x0000b9d8 .quad -4762188758037509908 + 0xdd, 0x4b, 0xee, 0x63, 0xa8, 0xaa, 0xa7, 0x4c, //0x0000b9e0 .quad 5523571108200991709 + 0x27, 0xfb, 0xc4, 0xd4, 0x31, 0xa2, 0x63, 0xed, //0x0000b9e8 .quad -1341049929119499481 + 0x6a, 0xef, 0x74, 0x3e, 0xa9, 0xca, 0xe8, 0x8f, //0x0000b9f0 .quad -8076983103442849942 + 0xf8, 0x1c, 0xfb, 0x24, 0x5f, 0x45, 0x5e, 0x94, //0x0000b9f8 .quad -7755685233340769032 + 0x44, 0x2b, 0x12, 0x8e, 0x53, 0xfd, 0xe2, 0xb3, //0x0000ba00 .quad -5484542860876174524 + 0x36, 0xe4, 0x39, 0xee, 0xb6, 0xd6, 0x75, 0xb9, //0x0000ba08 .quad -5082920523248573386 + 0x16, 0xb6, 0x96, 0x71, 0xa8, 0xbc, 0xdb, 0x60, //0x0000ba10 .quad 6979379479186945558 + 0x44, 0x5d, 0xc8, 0xa9, 0x64, 0x4c, 0xd3, 0xe7, //0x0000ba18 .quad -1741964635633328828 + 0xcd, 0x31, 0xfe, 0x46, 0xe9, 0x55, 0x89, 0xbc, //0x0000ba20 .quad -4861259862362934835 + 0x4a, 0x3a, 0x1d, 0xea, 0xbe, 0x0f, 0xe4, 0x90, //0x0000ba28 .quad -8006256924911912374 + 0x41, 0xbe, 0xbd, 0x98, 0x63, 0xab, 0xab, 0x6b, //0x0000ba30 .quad 7758483227328495169 + 0xdd, 0x88, 0xa4, 0xa4, 0xae, 0x13, 0x1d, 0xb5, //0x0000ba38 .quad -5396135137712502563 + 0xd1, 0x2d, 0xed, 0x7e, 0x3c, 0x96, 0x96, 0xc6, //0x0000ba40 .quad -4136954021121544751 + 0x14, 0xab, 0xcd, 0x4d, 0x9a, 0x58, 0x64, 0xe2, //0x0000ba48 .quad -2133482903713240300 + 0xa2, 0x3c, 0x54, 0xcf, 0xe5, 0x1d, 0x1e, 0xfc, //0x0000ba50 .quad -279753253987271518 + 0xec, 0x8a, 0xa0, 0x70, 0x60, 0xb7, 0x7e, 0x8d, //0x0000ba58 .quad -8250955842461857044 + 0xcb, 0x4b, 0x29, 0x43, 0x5f, 0xa5, 0x25, 0x3b, //0x0000ba60 .quad 4261994450943298507 + 0xa8, 0xad, 0xc8, 0x8c, 0x38, 0x65, 0xde, 0xb0, //0x0000ba68 .quad -5702008784649933400 + 0xbe, 0x9e, 0xf3, 0x13, 0xb7, 0x0e, 0xef, 0x49, //0x0000ba70 .quad 5327493063679123134 + 0x12, 0xd9, 0xfa, 0xaf, 0x86, 0xfe, 0x15, 0xdd, //0x0000ba78 .quad -2515824962385028846 + 0x37, 0x43, 0x78, 0x6c, 0x32, 0x69, 0x35, 0x6e, //0x0000ba80 .quad 7941369183226839863 + 0xab, 0xc7, 0xfc, 0x2d, 0x14, 0xbf, 0x2d, 0x8a, //0x0000ba88 .quad -8489919629131724885 + 0x04, 0x54, 0x96, 0x07, 0x7f, 0xc3, 0xc2, 0x49, //0x0000ba90 .quad 5315025460606161924 + 0x96, 0xf9, 0x7b, 0x39, 0xd9, 0x2e, 0xb9, 0xac, //0x0000ba98 .quad -6000713517987268202 + 0x06, 0xe9, 0x7b, 0xc9, 0x5e, 0x74, 0x33, 0xdc, //0x0000baa0 .quad -2579590211097073402 + 0xfb, 0xf7, 0xda, 0x87, 0x8f, 0x7a, 0xe7, 0xd7, //0x0000baa8 .quad -2889205879056697349 + 0xa3, 0x71, 0xed, 0x3d, 0xbb, 0x28, 0xa0, 0x69, //0x0000bab0 .quad 7611128154919104931 + 0xfd, 0xda, 0xe8, 0xb4, 0x99, 0xac, 0xf0, 0x86, //0x0000bab8 .quad -8723282702051517699 + 0x0c, 0xce, 0x68, 0x0d, 0xea, 0x32, 0x08, 0xc4, //0x0000bac0 .quad -4321147861633282548 + 0xbc, 0x11, 0x23, 0x22, 0xc0, 0xd7, 0xac, 0xa8, //0x0000bac8 .quad -6292417359137009220 + 0x90, 0x01, 0xc3, 0x90, 0xa4, 0x3f, 0x0a, 0xf5, //0x0000bad0 .quad -789748808614215280 + 0x2b, 0xd6, 0xab, 0x2a, 0xb0, 0x0d, 0xd8, 0xd2, //0x0000bad8 .quad -3253835680493873621 + 0xfa, 0xe0, 0x79, 0xda, 0xc6, 0x67, 0x26, 0x79, //0x0000bae0 .quad 8729779031470891258 + 0xdb, 0x65, 0xab, 0x1a, 0x8e, 0x08, 0xc7, 0x83, //0x0000bae8 .quad -8951176327949752869 + 0x38, 0x59, 0x18, 0x91, 0xb8, 0x01, 0x70, 0x57, //0x0000baf0 .quad 6300537770911226168 + 0x52, 0x3f, 0x56, 0xa1, 0xb1, 0xca, 0xb8, 0xa4, //0x0000baf8 .quad -6577284391509803182 + 0x86, 0x6f, 0x5e, 0xb5, 0x26, 0x02, 0x4c, 0xed, //0x0000bb00 .quad -1347699823215743098 + 0x26, 0xcf, 0xab, 0x09, 0x5e, 0xfd, 0xe6, 0xcd, //0x0000bb08 .quad -3609919470959866074 + 0xb4, 0x05, 0x5b, 0x31, 0x58, 0x81, 0x4f, 0x54, //0x0000bb10 .quad 6075216638131242420 + 0x78, 0x61, 0x0b, 0xc6, 0x5a, 0x5e, 0xb0, 0x80, //0x0000bb18 .quad -9173728696990998152 + 0x21, 0xc7, 0xb1, 0x3d, 0xae, 0x61, 0x63, 0x69, //0x0000bb20 .quad 7594020797664053025 + 0xd6, 0x39, 0x8e, 0x77, 0xf1, 0x75, 0xdc, 0xa0, //0x0000bb28 .quad -6855474852811359786 + 0xe9, 0x38, 0x1e, 0xcd, 0x19, 0x3a, 0xbc, 0x03, //0x0000bb30 .quad 269153960225290473 + 0x4c, 0xc8, 0x71, 0xd5, 0x6d, 0x93, 0x13, 0xc9, //0x0000bb38 .quad -3957657547586811828 + 0x23, 0xc7, 0x65, 0x40, 0xa0, 0x48, 0xab, 0x04, //0x0000bb40 .quad 336442450281613091 + 0x5f, 0x3a, 0xce, 0x4a, 0x49, 0x78, 0x58, 0xfb, //0x0000bb48 .quad -335385916056126881 + 0x76, 0x9c, 0x3f, 0x28, 0x64, 0x0d, 0xeb, 0x62, //0x0000bb50 .quad 7127805559067090038 + 0x7b, 0xe4, 0xc0, 0xce, 0x2d, 0x4b, 0x17, 0x9d, //0x0000bb58 .quad -7127145225176161157 + 0x94, 0x83, 0x4f, 0x32, 0xbd, 0xd0, 0xa5, 0x3b, //0x0000bb60 .quad 4298070930406474644 + 0x9a, 0x1d, 0x71, 0x42, 0xf9, 0x1d, 0x5d, 0xc4, //0x0000bb68 .quad -4297245513042813542 + 0x79, 0x64, 0xe3, 0x7e, 0xec, 0x44, 0x8f, 0xca, //0x0000bb70 .quad -3850783373846682503 + 0x00, 0x65, 0x0d, 0x93, 0x77, 0x65, 0x74, 0xf5, //0x0000bb78 .quad -759870872876129024 + 0xcb, 0x1e, 0x4e, 0xcf, 0x13, 0x8b, 0x99, 0x7e, //0x0000bb80 .quad 9122475437414293195 + 0x20, 0x5f, 0xe8, 0xbb, 0x6a, 0xbf, 0x68, 0x99, //0x0000bb88 .quad -7392448323188662496 + 0x7e, 0xa6, 0x21, 0xc3, 0xd8, 0xed, 0x3f, 0x9e, //0x0000bb90 .quad -7043649776941685122 + 0xe8, 0x76, 0xe2, 0x6a, 0x45, 0xef, 0xc2, 0xbf, //0x0000bb98 .quad -4628874385558440216 + 0x1e, 0x10, 0xea, 0xf3, 0x4e, 0xe9, 0xcf, 0xc5, //0x0000bba0 .quad -4192876202749718498 + 0xa2, 0x14, 0x9b, 0xc5, 0x16, 0xab, 0xb3, 0xef, //0x0000bba8 .quad -1174406963520662366 + 0x12, 0x4a, 0x72, 0x58, 0xd1, 0xf1, 0xa1, 0xbb, //0x0000bbb0 .quad -4926390635932268014 + 0xe5, 0xec, 0x80, 0x3b, 0xee, 0x4a, 0xd0, 0x95, //0x0000bbb8 .quad -7651533379841495835 + 0x97, 0xdc, 0x8e, 0xae, 0x45, 0x6e, 0x8a, 0x2a, //0x0000bbc0 .quad 3065383741939440791 + 0x1f, 0x28, 0x61, 0xca, 0xa9, 0x5d, 0x44, 0xbb, //0x0000bbc8 .quad -4952730706374481889 + 0xbd, 0x93, 0x32, 0x1a, 0xd7, 0x09, 0x2d, 0xf5, //0x0000bbd0 .quad -779956341003086915 + 0x26, 0x72, 0xf9, 0x3c, 0x14, 0x75, 0x15, 0xea, //0x0000bbd8 .quad -1579227364540714458 + 0x56, 0x9c, 0x5f, 0x70, 0x26, 0x26, 0x3c, 0x59, //0x0000bbe0 .quad 6430056314514152534 + 0x58, 0xe7, 0x1b, 0xa6, 0x2c, 0x69, 0x4d, 0x92, //0x0000bbe8 .quad -7904546130479028392 + 0x6c, 0x83, 0x77, 0x0c, 0xb0, 0x2f, 0x8b, 0x6f, //0x0000bbf0 .quad 8037570393142690668 + 0x2e, 0xe1, 0xa2, 0xcf, 0x77, 0xc3, 0xe0, 0xb6, //0x0000bbf8 .quad -5268996644671397586 + 0x47, 0x64, 0x95, 0x0f, 0x9c, 0xfb, 0x6d, 0x0b, //0x0000bc00 .quad 823590954573587527 + 0x7a, 0x99, 0x8b, 0xc3, 0x55, 0xf4, 0x98, 0xe4, //0x0000bc08 .quad -1974559787411859078 + 0xac, 0x5e, 0xbd, 0x89, 0x41, 0xbd, 0x24, 0x47, //0x0000bc10 .quad 5126430365035880108 + 0xec, 0x3f, 0x37, 0x9a, 0xb5, 0x98, 0xdf, 0x8e, //0x0000bc18 .quad -8151628894773493780 + 0x57, 0xb6, 0x2c, 0xec, 0x91, 0xec, 0xed, 0x58, //0x0000bc20 .quad 6408037956294850135 + 0xe7, 0x0f, 0xc5, 0x00, 0xe3, 0x7e, 0x97, 0xb2, //0x0000bc28 .quad -5577850100039479321 + 0xed, 0xe3, 0x37, 0x67, 0xb6, 0x67, 0x29, 0x2f, //0x0000bc30 .quad 3398361426941174765 + 0xe1, 0x53, 0xf6, 0xc0, 0x9b, 0x5e, 0x3d, 0xdf, //0x0000bc38 .quad -2360626606621961247 + 0x74, 0xee, 0x82, 0x00, 0xd2, 0xe0, 0x79, 0xbd, //0x0000bc40 .quad -4793553135802847628 + 0x6c, 0xf4, 0x99, 0x58, 0x21, 0x5b, 0x86, 0x8b, //0x0000bc48 .quad -8392920656779807636 + 0x11, 0xaa, 0xa3, 0x80, 0x06, 0x59, 0xd8, 0xec, //0x0000bc50 .quad -1380255401326171631 + 0x87, 0x71, 0xc0, 0xae, 0xe9, 0xf1, 0x67, 0xae, //0x0000bc58 .quad -5879464802547371641 + 0x95, 0x94, 0xcc, 0x20, 0x48, 0x6f, 0x0e, 0xe8, //0x0000bc60 .quad -1725319251657714539 + 0xe9, 0x8d, 0x70, 0x1a, 0x64, 0xee, 0x01, 0xda, //0x0000bc68 .quad -2737644984756826647 + 0xdd, 0xdc, 0x7f, 0x14, 0x8d, 0x05, 0x09, 0x31, //0x0000bc70 .quad 3533361486141316317 + 0xb2, 0x58, 0x86, 0x90, 0xfe, 0x34, 0x41, 0x88, //0x0000bc78 .quad -8628557143114098510 + 0x15, 0xd4, 0x9f, 0x59, 0xf0, 0x46, 0x4b, 0xbd, //0x0000bc80 .quad -4806670179178130411 + 0xde, 0xee, 0xa7, 0x34, 0x3e, 0x82, 0x51, 0xaa, //0x0000bc88 .quad -6174010410465235234 + 0x1a, 0xc9, 0x07, 0x70, 0xac, 0x18, 0x9e, 0x6c, //0x0000bc90 .quad 7826720331309500698 + 0x96, 0xea, 0xd1, 0xc1, 0xcd, 0xe2, 0xe5, 0xd4, //0x0000bc98 .quad -3105826994654156138 + 0xb0, 0xdd, 0x04, 0xc6, 0x6b, 0xcf, 0xe2, 0x03, //0x0000bca0 .quad 280014188641050032 + 0x9e, 0x32, 0x23, 0x99, 0xc0, 0xad, 0x0f, 0x85, //0x0000bca8 .quad -8858670899299929442 + 0x1c, 0x15, 0x86, 0xb7, 0x46, 0x83, 0xdb, 0x84, //0x0000bcb0 .quad -8873354301053463268 + 0x45, 0xff, 0x6b, 0xbf, 0x30, 0x99, 0x53, 0xa6, //0x0000bcb8 .quad -6461652605697523899 + 0x63, 0x9a, 0x67, 0x65, 0x18, 0x64, 0x12, 0xe6, //0x0000bcc0 .quad -1868320839462053277 + 0x16, 0xff, 0x46, 0xef, 0x7c, 0x7f, 0xe8, 0xcf, //0x0000bcc8 .quad -3465379738694516970 + 0x7e, 0xc0, 0x60, 0x3f, 0x8f, 0x7e, 0xcb, 0x4f, //0x0000bcd0 .quad 5749828502977298558 + 0x6e, 0x5f, 0x8c, 0x15, 0xae, 0x4f, 0xf1, 0x81, //0x0000bcd8 .quad -9083391364325154962 + 0x9d, 0xf0, 0x38, 0x0f, 0x33, 0x5e, 0xbe, 0xe3, //0x0000bce0 .quad -2036086408133152611 + 0x49, 0x77, 0xef, 0x9a, 0x99, 0xa3, 0x6d, 0xa2, //0x0000bce8 .quad -6742553186979055799 + 0xc5, 0x2c, 0x07, 0xd3, 0xbf, 0xf5, 0xad, 0x5c, //0x0000bcf0 .quad 6678264026688335045 + 0x1c, 0x55, 0xab, 0x01, 0x80, 0x0c, 0x09, 0xcb, //0x0000bcf8 .quad -3816505465296431844 + 0xf6, 0xf7, 0xc8, 0xc7, 0x2f, 0x73, 0xd9, 0x73, //0x0000bd00 .quad 8347830033360418806 + 0x63, 0x2a, 0x16, 0x02, 0xa0, 0x4f, 0xcb, 0xfd, //0x0000bd08 .quad -158945813193151901 + 0xfa, 0x9a, 0xdd, 0xdc, 0xfd, 0xe7, 0x67, 0x28, //0x0000bd10 .quad 2911550761636567802 + 0x7e, 0xda, 0x4d, 0x01, 0xc4, 0x11, 0x9f, 0x9e, //0x0000bd18 .quad -7016870160886801794 + 0xb8, 0x01, 0x15, 0x54, 0xfd, 0xe1, 0x81, 0xb2, //0x0000bd20 .quad -5583933584809066056 + 0x1d, 0x51, 0xa1, 0x01, 0x35, 0xd6, 0x46, 0xc6, //0x0000bd28 .quad -4159401682681114339 + 0x26, 0x42, 0x1a, 0xa9, 0x7c, 0x5a, 0x22, 0x1f, //0x0000bd30 .quad 2243455055843443238 + 0x65, 0xa5, 0x09, 0x42, 0xc2, 0x8b, 0xd8, 0xf7, //0x0000bd38 .quad -587566084924005019 + 0x58, 0x69, 0xb0, 0xe9, 0x8d, 0x78, 0x75, 0x33, //0x0000bd40 .quad 3708002419115845976 + 0x5f, 0x07, 0x46, 0x69, 0x59, 0x57, 0xe7, 0x9a, //0x0000bd48 .quad -7284757830718584993 + 0xae, 0x83, 0x1c, 0x64, 0xb1, 0xd6, 0x52, 0x00, //0x0000bd50 .quad 23317005467419566 + 0x37, 0x89, 0x97, 0xc3, 0x2f, 0x2d, 0xa1, 0xc1, //0x0000bd58 .quad -4494261269970843337 + 0x9a, 0xa4, 0x23, 0xbd, 0x5d, 0x8c, 0x67, 0xc0, //0x0000bd60 .quad -4582539761593113446 + 0x84, 0x6b, 0x7d, 0xb4, 0x7b, 0x78, 0x09, 0xf2, //0x0000bd68 .quad -1006140569036166268 + 0xe0, 0x46, 0x36, 0x96, 0xba, 0xb7, 0x40, 0xf8, //0x0000bd70 .quad -558244341782001952 + 0x32, 0x63, 0xce, 0x50, 0x4d, 0xeb, 0x45, 0x97, //0x0000bd78 .quad -7546366883288685774 + 0x98, 0xd8, 0xc3, 0x3b, 0xa9, 0xe5, 0x50, 0xb6, //0x0000bd80 .quad -5309491445654890344 + 0xff, 0xfb, 0x01, 0xa5, 0x20, 0x66, 0x17, 0xbd, //0x0000bd88 .quad -4821272585683469313 + 0xbe, 0xce, 0xb4, 0x8a, 0x13, 0x1f, 0xe5, 0xa3, //0x0000bd90 .quad -6636864307068612930 + 0xff, 0x7a, 0x42, 0xce, 0xa8, 0x3f, 0x5d, 0xec, //0x0000bd98 .quad -1414904713676948737 + 0x37, 0x01, 0xb1, 0x36, 0x6c, 0x33, 0x6f, 0xc6, //0x0000bda0 .quad -4148040191917883081 + 0xdf, 0x8c, 0xe9, 0x80, 0xc9, 0x47, 0xba, 0x93, //0x0000bda8 .quad -7801844473689174817 + 0x84, 0x41, 0x5d, 0x44, 0x47, 0x00, 0x0b, 0xb8, //0x0000bdb0 .quad -5185050239897353852 + 0x17, 0xf0, 0x23, 0xe1, 0xbb, 0xd9, 0xa8, 0xb8, //0x0000bdb8 .quad -5140619573684080617 + 0xe5, 0x91, 0x74, 0x15, 0x59, 0xc0, 0x0d, 0xa6, //0x0000bdc0 .quad -6481312799871692315 + 0x1d, 0xec, 0x6c, 0xd9, 0x2a, 0x10, 0xd3, 0xe6, //0x0000bdc8 .quad -1814088448677712867 + 0x2f, 0xdb, 0x68, 0xad, 0x37, 0x98, 0xc8, 0x87, //0x0000bdd0 .quad -8662506518347195601 + 0x92, 0x13, 0xe4, 0xc7, 0x1a, 0xea, 0x43, 0x90, //0x0000bdd8 .quad -8051334308064652398 + 0xfb, 0x11, 0xc3, 0x98, 0x45, 0xbe, 0xba, 0x29, //0x0000bde0 .quad 3006924907348169211 + 0x77, 0x18, 0xdd, 0x79, 0xa1, 0xe4, 0x54, 0xb4, //0x0000bde8 .quad -5452481866653427593 + 0x7a, 0xd6, 0xf3, 0xfe, 0xd6, 0x6d, 0x29, 0xf4, //0x0000bdf0 .quad -853029884242176390 + 0x94, 0x5e, 0x54, 0xd8, 0xc9, 0x1d, 0x6a, 0xe1, //0x0000bdf8 .quad -2203916314889396588 + 0x0c, 0x66, 0x58, 0x5f, 0xa6, 0xe4, 0x99, 0x18, //0x0000be00 .quad 1772699331562333708 + 0x1d, 0xbb, 0x34, 0x27, 0x9e, 0x52, 0xe2, 0x8c, //0x0000be08 .quad -8294976724446954723 + 0x8f, 0x7f, 0x2e, 0xf7, 0xcf, 0x5d, 0xc0, 0x5e, //0x0000be10 .quad 6827560182880305039 + 0xe4, 0xe9, 0x01, 0xb1, 0x45, 0xe7, 0x1a, 0xb0, //0x0000be18 .quad -5757034887131305500 + 0x73, 0x1f, 0xfa, 0xf4, 0x43, 0x75, 0x70, 0x76, //0x0000be20 .quad 8534450228600381299 + 0x5d, 0x64, 0x42, 0x1d, 0x17, 0xa1, 0x21, 0xdc, //0x0000be28 .quad -2584607590486743971 + 0xa8, 0x53, 0x1c, 0x79, 0x4a, 0x49, 0x06, 0x6a, //0x0000be30 .quad 7639874402088932264 + 0xba, 0x7e, 0x49, 0x72, 0xae, 0x04, 0x95, 0x89, //0x0000be38 .quad -8532908771695296838 + 0x92, 0x68, 0x63, 0x17, 0x9d, 0xdb, 0x87, 0x04, //0x0000be40 .quad 326470965756389522 + 0x69, 0xde, 0xdb, 0x0e, 0xda, 0x45, 0xfa, 0xab, //0x0000be48 .quad -6054449946191733143 + 0xb6, 0x42, 0x3c, 0x5d, 0x84, 0xd2, 0xa9, 0x45, //0x0000be50 .quad 5019774725622874806 + 0x03, 0xd6, 0x92, 0x92, 0x50, 0xd7, 0xf8, 0xd6, //0x0000be58 .quad -2956376414312278525 + 0xb2, 0xa9, 0x45, 0xba, 0x92, 0x23, 0x8a, 0x0b, //0x0000be60 .quad 831516194300602802 + 0xc2, 0xc5, 0x9b, 0x5b, 0x92, 0x86, 0x5b, 0x86, //0x0000be68 .quad -8765264286586255934 + 0x1e, 0x14, 0xd7, 0x68, 0x77, 0xac, 0x6c, 0x8e, //0x0000be70 .quad -8183976793979022306 + 0x32, 0xb7, 0x82, 0xf2, 0x36, 0x68, 0xf2, 0xa7, //0x0000be78 .quad -6344894339805432014 + 0x26, 0xd9, 0x0c, 0x43, 0x95, 0xd7, 0x07, 0x32, //0x0000be80 .quad 3605087062808385830 + 0xff, 0x64, 0x23, 0xaf, 0x44, 0x02, 0xef, 0xd1, //0x0000be88 .quad -3319431906329402113 + 0xb8, 0x07, 0xe8, 0x49, 0xbd, 0xe6, 0x44, 0x7f, //0x0000be90 .quad 9170708441896323000 + 0x1f, 0x1f, 0x76, 0xed, 0x6a, 0x61, 0x35, 0x83, //0x0000be98 .quad -8992173969096958177 + 0xa6, 0x09, 0x62, 0x9c, 0x6c, 0x20, 0x16, 0x5f, //0x0000bea0 .quad 6851699533943015846 + 0xe7, 0xa6, 0xd3, 0xa8, 0xc5, 0xb9, 0x02, 0xa4, //0x0000bea8 .quad -6628531442943809817 + 0x0f, 0x8c, 0x7a, 0xc3, 0x87, 0xa8, 0xdb, 0x36, //0x0000beb0 .quad 3952938399001381903 + 0xa1, 0x90, 0x08, 0x13, 0x37, 0x68, 0x03, 0xcd, //0x0000beb8 .quad -3673978285252374367 + 0x89, 0x97, 0x2c, 0xda, 0x54, 0x49, 0x49, 0xc2, //0x0000bec0 .quad -4446942528265218167 + 0x64, 0x5a, 0xe5, 0x6b, 0x22, 0x21, 0x22, 0x80, //0x0000bec8 .quad -9213765455923815836 + 0x6c, 0xbd, 0xb7, 0x10, 0xaa, 0x9b, 0xdb, 0xf2, //0x0000bed0 .quad -946992141904134804 + 0xfd, 0xb0, 0xde, 0x06, 0x6b, 0xa9, 0x2a, 0xa0, //0x0000bed8 .quad -6905520801477381891 + 0xc7, 0xac, 0xe5, 0x94, 0x94, 0x82, 0x92, 0x6f, //0x0000bee0 .quad 8039631859474607303 + 0x3d, 0x5d, 0x96, 0xc8, 0xc5, 0x53, 0x35, 0xc8, //0x0000bee8 .quad -4020214983419339459 + 0xf9, 0x17, 0x1f, 0xba, 0x39, 0x23, 0x77, 0xcb, //0x0000bef0 .quad -3785518230938904583 + 0x8c, 0xf4, 0xbb, 0x3a, 0xb7, 0xa8, 0x42, 0xfa, //0x0000bef8 .quad -413582710846786420 + 0xfb, 0x6e, 0x53, 0x14, 0x04, 0x76, 0x2a, 0xff, //0x0000bf00 .quad -60105885123121413 + 0xd7, 0x78, 0xb5, 0x84, 0x72, 0xa9, 0x69, 0x9c, //0x0000bf08 .quad -7176018221920323369 + 0xba, 0x4a, 0x68, 0x19, 0x85, 0x13, 0xf5, 0xfe, //0x0000bf10 .quad -75132356403901766 + 0x0d, 0xd7, 0xe2, 0x25, 0xcf, 0x13, 0x84, 0xc3, //0x0000bf18 .quad -4358336758973016307 + 0x69, 0x5d, 0xc2, 0x5f, 0x66, 0x58, 0xb2, 0x7e, //0x0000bf20 .quad 9129456591349898601 + 0xd1, 0x8c, 0x5b, 0xef, 0xc2, 0x18, 0x65, 0xf4, //0x0000bf28 .quad -836234930288882479 + 0x61, 0x7a, 0xd9, 0xfb, 0x3f, 0x77, 0x2f, 0xef, //0x0000bf30 .quad -1211618658047395231 + 0x02, 0x38, 0x99, 0xd5, 0x79, 0x2f, 0xbf, 0x98, //0x0000bf38 .quad -7440175859071633406 + 0xfa, 0xd8, 0xcf, 0xfa, 0x0f, 0x55, 0xfb, 0xaa, //0x0000bf40 .quad -6126209340986631942 + 0x03, 0x86, 0xff, 0x4a, 0x58, 0xfb, 0xee, 0xbe, //0x0000bf48 .quad -4688533805412153853 + 0x38, 0xcf, 0x83, 0xf9, 0x53, 0x2a, 0xba, 0x95, //0x0000bf50 .quad -7657761676233289928 + 0x84, 0x67, 0xbf, 0x5d, 0x2e, 0xba, 0xaa, 0xee, //0x0000bf58 .quad -1248981238337804412 + 0x83, 0x61, 0xf2, 0x7b, 0x74, 0x5a, 0x94, 0xdd, //0x0000bf60 .quad -2480258038432112253 + 0xb2, 0xa0, 0x97, 0xfa, 0x5c, 0xb4, 0x2a, 0x95, //0x0000bf68 .quad -7698142301602209614 + 0xe4, 0xf9, 0xee, 0x9a, 0x11, 0x71, 0xf9, 0x94, //0x0000bf70 .quad -7712008566467528220 + 0xdf, 0x88, 0x3d, 0x39, 0x74, 0x61, 0x75, 0xba, //0x0000bf78 .quad -5010991858575374113 + 0x5d, 0xb8, 0xaa, 0x01, 0x56, 0xcd, 0x37, 0x7a, //0x0000bf80 .quad 8806733365625141341 + 0x17, 0xeb, 0x8c, 0x47, 0xd1, 0xb9, 0x12, 0xe9, //0x0000bf88 .quad -1652053804791829737 + 0x3a, 0xb3, 0x0a, 0xc1, 0x55, 0xe0, 0x62, 0xac, //0x0000bf90 .quad -6025006692552756422 + 0xee, 0x12, 0xb8, 0xcc, 0x22, 0xb4, 0xab, 0x91, //0x0000bf98 .quad -7950062655635975442 + 0x09, 0x60, 0x4d, 0x31, 0x6b, 0x98, 0x7b, 0x57, //0x0000bfa0 .quad 6303799689591218185 + 0xaa, 0x17, 0xe6, 0x7f, 0x2b, 0xa1, 0x16, 0xb6, //0x0000bfa8 .quad -5325892301117581398 + 0x0b, 0xb8, 0xa0, 0xfd, 0x85, 0x7e, 0x5a, 0xed, //0x0000bfb0 .quad -1343622424865753077 + 0x94, 0x9d, 0xdf, 0x5f, 0x76, 0x49, 0x9c, 0xe3, //0x0000bfb8 .quad -2045679357969588844 + 0x07, 0x73, 0x84, 0xbe, 0x13, 0x8f, 0x58, 0x14, //0x0000bfc0 .quad 1466078993672598279 + 0x7d, 0xc2, 0xeb, 0xfb, 0xe9, 0xad, 0x41, 0x8e, //0x0000bfc8 .quad -8196078626372074883 + 0xc8, 0x8f, 0x25, 0xae, 0xd8, 0xb2, 0x6e, 0x59, //0x0000bfd0 .quad 6444284760518135752 + 0x1c, 0xb3, 0xe6, 0x7a, 0x64, 0x19, 0xd2, 0xb1, //0x0000bfd8 .quad -5633412264537705700 + 0xbb, 0xf3, 0xae, 0xd9, 0x8e, 0x5f, 0xca, 0x6f, //0x0000bfe0 .quad 8055355950647669691 + 0xe3, 0x5f, 0xa0, 0x99, 0xbd, 0x9f, 0x46, 0xde, //0x0000bfe8 .quad -2430079312244744221 + 0x54, 0x58, 0x0d, 0x48, 0xb9, 0x7b, 0xde, 0x25, //0x0000bff0 .quad 2728754459941099604 + 0xee, 0x3b, 0x04, 0x80, 0xd6, 0x23, 0xec, 0x8a, //0x0000bff8 .quad -8436328597794046994 + 0x6a, 0xae, 0x10, 0x9a, 0xa7, 0x1a, 0x56, 0xaf, //0x0000c000 .quad -5812428961928401302 + 0xe9, 0x4a, 0x05, 0x20, 0xcc, 0x2c, 0xa7, 0xad, //0x0000c008 .quad -5933724728815170839 + 0x04, 0xda, 0x94, 0x80, 0x51, 0xa1, 0x2b, 0x1b, //0x0000c010 .quad 1957835834444274180 + 0xa4, 0x9d, 0x06, 0x28, 0xff, 0xf7, 0x10, 0xd9, //0x0000c018 .quad -2805469892591575644 + 0x42, 0x08, 0x5d, 0xf0, 0xd2, 0x44, 0xfb, 0x90, //0x0000c020 .quad -7999724640327104446 + 0x86, 0x22, 0x04, 0x79, 0xff, 0x9a, 0xaa, 0x87, //0x0000c028 .quad -8670947710510816634 + 0x53, 0x4a, 0x74, 0xac, 0x07, 0x16, 0x3a, 0x35, //0x0000c030 .quad 3835402254873283155 + 0x28, 0x2b, 0x45, 0x57, 0xbf, 0x41, 0x95, 0xa9, //0x0000c038 .quad -6226998619711132888 + 0xe8, 0x5c, 0x91, 0x97, 0x89, 0x9b, 0x88, 0x42, //0x0000c040 .quad 4794252818591603944 + 0xf2, 0x75, 0x16, 0x2d, 0x2f, 0x92, 0xfa, 0xd3, //0x0000c048 .quad -3172062256211528206 + 0x11, 0xda, 0xba, 0xfe, 0x35, 0x61, 0x95, 0x69, //0x0000c050 .quad 7608094030047140369 + 0xb7, 0x09, 0x2e, 0x7c, 0x5d, 0x9b, 0x7c, 0x84, //0x0000c058 .quad -8900067937773286985 + 0x95, 0x90, 0x69, 0x7e, 0x83, 0xb9, 0xfa, 0x43, //0x0000c060 .quad 4898431519131537557 + 0x25, 0x8c, 0x39, 0xdb, 0x34, 0xc2, 0x9b, 0xa5, //0x0000c068 .quad -6513398903789220827 + 0xbb, 0xf4, 0x03, 0x5e, 0xe4, 0x67, 0xf9, 0x94, //0x0000c070 .quad -7712018656367741765 + 0x2e, 0xef, 0x07, 0x12, 0xc2, 0xb2, 0x02, 0xcf, //0x0000c078 .quad -3530062611309138130 + 0xf5, 0x78, 0xc2, 0xba, 0xee, 0xe0, 0x1b, 0x1d, //0x0000c080 .quad 2097517367411243253 + 0x7d, 0xf5, 0x44, 0x4b, 0xb9, 0xaf, 0x61, 0x81, //0x0000c088 .quad -9123818159709293187 + 0x32, 0x17, 0x73, 0x69, 0x2a, 0xd9, 0x62, 0x64, //0x0000c090 .quad 7233582727691441970 + 0xdc, 0x32, 0x16, 0x9e, 0xa7, 0x1b, 0xba, 0xa1, //0x0000c098 .quad -6793086681209228580 + 0xfe, 0xdc, 0xcf, 0x03, 0x75, 0x8f, 0x7b, 0x7d, //0x0000c0a0 .quad 9041978409614302462 + 0x93, 0xbf, 0x9b, 0x85, 0x91, 0xa2, 0x28, 0xca, //0x0000c0a8 .quad -3879672333084147821 + 0x3e, 0xd4, 0xc3, 0x44, 0x52, 0x73, 0xda, 0x5c, //0x0000c0b0 .quad 6690786993590490174 + 0x78, 0xaf, 0x02, 0xe7, 0x35, 0xcb, 0xb2, 0xfc, //0x0000c0b8 .quad -237904397927796872 + 0xa7, 0x64, 0xfa, 0x6a, 0x13, 0x88, 0x08, 0x3a, //0x0000c0c0 .quad 4181741870994056359 + 0xab, 0xad, 0x61, 0xb0, 0x01, 0xbf, 0xef, 0x9d, //0x0000c0c8 .quad -7066219276345954901 + 0xd0, 0xfd, 0xb8, 0x45, 0x18, 0xaa, 0x8a, 0x08, //0x0000c0d0 .quad 615491320315182544 + 0x16, 0x19, 0x7a, 0x1c, 0xc2, 0xae, 0x6b, 0xc5, //0x0000c0d8 .quad -4221088077005055722 + 0x45, 0x3d, 0x27, 0x57, 0x9e, 0x54, 0xad, 0x8a, //0x0000c0e0 .quad -8454007886460797627 + 0x5b, 0x9f, 0x98, 0xa3, 0x72, 0x9a, 0xc6, 0xf6, //0x0000c0e8 .quad -664674077828931749 + 0x4b, 0x86, 0x78, 0xf6, 0xe2, 0x54, 0xac, 0x36, //0x0000c0f0 .quad 3939617107816777291 + 0x99, 0x63, 0x3f, 0xa6, 0x87, 0x20, 0x3c, 0x9a, //0x0000c0f8 .quad -7332950326284164199 + 0xdd, 0xa7, 0x16, 0xb4, 0x1b, 0x6a, 0x57, 0x84, //0x0000c100 .quad -8910536670511192099 + 0x7f, 0x3c, 0xcf, 0x8f, 0xa9, 0x28, 0xcb, 0xc0, //0x0000c108 .quad -4554501889427817345 + 0xd5, 0x51, 0x1c, 0xa1, 0xa2, 0x44, 0x6d, 0x65, //0x0000c110 .quad 7308573235570561493 + 0x9f, 0x0b, 0xc3, 0xf3, 0xd3, 0xf2, 0xfd, 0xf0, //0x0000c118 .quad -1081441343357383777 + 0x25, 0xb3, 0xb1, 0xa4, 0xe5, 0x4a, 0x64, 0x9f, //0x0000c120 .quad -6961356773836868827 + 0x43, 0xe7, 0x59, 0x78, 0xc4, 0xb7, 0x9e, 0x96, //0x0000c128 .quad -7593429867239446717 + 0xee, 0x1f, 0xde, 0x0d, 0x9f, 0x5d, 0x3d, 0x87, //0x0000c130 .quad -8701695967296086034 + 0x14, 0x61, 0x70, 0x96, 0xb5, 0x65, 0x46, 0xbc, //0x0000c138 .quad -4880101315621920492 + 0xea, 0xa7, 0x55, 0xd1, 0x06, 0xb5, 0x0c, 0xa9, //0x0000c140 .quad -6265433940692719638 + 0x59, 0x79, 0x0c, 0xfc, 0x22, 0xff, 0x57, 0xeb, //0x0000c148 .quad -1488440626100012711 + 0xf2, 0x88, 0xd5, 0x42, 0x24, 0xf1, 0xa7, 0x09, //0x0000c150 .quad 695789805494438130 + 0xd8, 0xcb, 0x87, 0xdd, 0x75, 0xff, 0x16, 0x93, //0x0000c158 .quad -7847804418953589800 + 0x2f, 0xeb, 0x8a, 0x53, 0x6d, 0xed, 0x11, 0x0c, //0x0000c160 .quad 869737256868047663 + 0xce, 0xbe, 0xe9, 0x54, 0x53, 0xbf, 0xdc, 0xb7, //0x0000c168 .quad -5198069505264599346 + 0xfa, 0xa5, 0x6d, 0xa8, 0xc8, 0x68, 0x16, 0x8f, //0x0000c170 .quad -8136200465769716230 + 0x81, 0x2e, 0x24, 0x2a, 0x28, 0xef, 0xd3, 0xe5, //0x0000c178 .quad -1885900863153361279 + 0xbc, 0x87, 0x44, 0x69, 0x7d, 0x01, 0x6e, 0xf9, //0x0000c180 .quad -473439272678684740 + 0x10, 0x9d, 0x56, 0x1a, 0x79, 0x75, 0xa4, 0x8f, //0x0000c188 .quad -8096217067111932656 + 0xac, 0xa9, 0x95, 0xc3, 0xdc, 0x81, 0xc9, 0x37, //0x0000c190 .quad 4019886927579031980 + 0x55, 0x44, 0xec, 0x60, 0xd7, 0x92, 0x8d, 0xb3, //0x0000c198 .quad -5508585315462527915 + 0x17, 0x14, 0x7b, 0xf4, 0x53, 0xe2, 0xbb, 0x85, //0x0000c1a0 .quad -8810199395808373737 + 0x6a, 0x55, 0x27, 0x39, 0x8d, 0xf7, 0x70, 0xe0, //0x0000c1a8 .quad -2274045625900771990 + 0x8e, 0xec, 0xcc, 0x78, 0x74, 0x6d, 0x95, 0x93, //0x0000c1b0 .quad -7812217631593927538 + 0x62, 0x95, 0xb8, 0x43, 0xb8, 0x9a, 0x46, 0x8c, //0x0000c1b8 .quad -8338807543829064350 + 0xb2, 0x27, 0x00, 0x97, 0xd1, 0xc8, 0x7a, 0x38, //0x0000c1c0 .quad 4069786015789754290 + 0xbb, 0xba, 0xa6, 0x54, 0x66, 0x41, 0x58, 0xaf, //0x0000c1c8 .quad -5811823411358942533 + 0x9e, 0x31, 0xc0, 0xfc, 0x05, 0x7b, 0x99, 0x06, //0x0000c1d0 .quad 475546501309804958 + 0x6a, 0x69, 0xd0, 0xe9, 0xbf, 0x51, 0x2e, 0xdb, //0x0000c1d8 .quad -2653093245771290262 + 0x03, 0x1f, 0xf8, 0xbd, 0xe3, 0xec, 0x1f, 0x44, //0x0000c1e0 .quad 4908902581746016003 + 0xe2, 0x41, 0x22, 0xf2, 0x17, 0xf3, 0xfc, 0x88, //0x0000c1e8 .quad -8575712306248138270 + 0xc3, 0x26, 0x76, 0xad, 0x1c, 0xe8, 0x27, 0xd5, //0x0000c1f0 .quad -3087243809672255805 + 0x5a, 0xd2, 0xaa, 0xee, 0xdd, 0x2f, 0x3c, 0xab, //0x0000c1f8 .quad -6107954364382784934 + 0x74, 0xb0, 0xd3, 0xd8, 0x23, 0xe2, 0x71, 0x8a, //0x0000c200 .quad -8470740780517707660 + 0xf1, 0x86, 0x55, 0x6a, 0xd5, 0x3b, 0x0b, 0xd6, //0x0000c208 .quad -3023256937051093263 + 0x49, 0x4e, 0x84, 0x67, 0x56, 0x2d, 0x87, 0xf6, //0x0000c210 .quad -682526969396179383 + 0x56, 0x74, 0x75, 0x62, 0x65, 0x05, 0xc7, 0x85, //0x0000c218 .quad -8807064613298015146 + 0xdb, 0x61, 0x65, 0x01, 0xac, 0xf8, 0x28, 0xb4, //0x0000c220 .quad -5464844730172612133 + 0x6c, 0xd1, 0x12, 0xbb, 0xbe, 0xc6, 0x38, 0xa7, //0x0000c228 .quad -6397144748195131028 + 0x52, 0xba, 0xbe, 0x01, 0xd7, 0x36, 0x33, 0xe1, //0x0000c230 .quad -2219369894288377262 + 0xc7, 0x85, 0xd7, 0x69, 0x6e, 0xf8, 0x06, 0xd1, //0x0000c238 .quad -3384744916816525881 + 0x73, 0x34, 0x17, 0x61, 0x46, 0x02, 0xc0, 0xec, //0x0000c240 .quad -1387106183930235789 + 0x9c, 0xb3, 0x26, 0x02, 0x45, 0x5b, 0xa4, 0x82, //0x0000c248 .quad -9032994600651410532 + 0x90, 0x01, 0x5d, 0xf9, 0xd7, 0x02, 0xf0, 0x27, //0x0000c250 .quad 2877803288514593168 + 0x84, 0x60, 0xb0, 0x42, 0x16, 0x72, 0x4d, 0xa3, //0x0000c258 .quad -6679557232386875260 + 0xf4, 0x41, 0xb4, 0xf7, 0x8d, 0x03, 0xec, 0x31, //0x0000c260 .quad 3597254110643241460 + 0xa5, 0x78, 0x5c, 0xd3, 0x9b, 0xce, 0x20, 0xcc, //0x0000c268 .quad -3737760522056206171 + 0x71, 0x52, 0xa1, 0x75, 0x71, 0x04, 0x67, 0x7e, //0x0000c270 .quad 9108253656731439729 + 0xce, 0x96, 0x33, 0xc8, 0x42, 0x02, 0x29, 0xff, //0x0000c278 .quad -60514634142869810 + 0x86, 0xd3, 0x84, 0xe9, 0xc6, 0x62, 0x00, 0x0f, //0x0000c280 .quad 1080972517029761926 + 0x41, 0x3e, 0x20, 0xbd, 0x69, 0xa1, 0x79, 0x9f, //0x0000c288 .quad -6955350673980375487 + 0x68, 0x08, 0xe6, 0xa3, 0x78, 0x7b, 0xc0, 0x52, //0x0000c290 .quad 5962901664714590312 + 0xd1, 0x4d, 0x68, 0x2c, 0xc4, 0x09, 0x58, 0xc7, //0x0000c298 .quad -4082502324048081455 + 0x82, 0x8a, 0xdf, 0xcc, 0x56, 0x9a, 0x70, 0xa7, //0x0000c2a0 .quad -6381430974388925822 + 0x45, 0x61, 0x82, 0x37, 0x35, 0x0c, 0x2e, 0xf9, //0x0000c2a8 .quad -491441886632713915 + 0x91, 0xb6, 0x0b, 0x40, 0x76, 0x60, 0xa6, 0x88, //0x0000c2b0 .quad -8600080377420466543 + 0xcb, 0x7c, 0xb1, 0x42, 0xa1, 0xc7, 0xbc, 0x9b, //0x0000c2b8 .quad -7224680206786528053 + 0x35, 0xa4, 0x0e, 0xd0, 0x93, 0xf8, 0xcf, 0x6a, //0x0000c2c0 .quad 7696643601933968437 + 0xfe, 0xdb, 0x5d, 0x93, 0x89, 0xf9, 0xab, 0xc2, //0x0000c2c8 .quad -4419164240055772162 + 0x43, 0x4d, 0x12, 0xc4, 0xb8, 0xf6, 0x83, 0x05, //0x0000c2d0 .quad 397432465562684739 + 0xfe, 0x52, 0x35, 0xf8, 0xeb, 0xf7, 0x56, 0xf3, //0x0000c2d8 .quad -912269281642327298 + 0x4a, 0x70, 0x8b, 0x7a, 0x33, 0x7a, 0x72, 0xc3, //0x0000c2e0 .quad -4363290727450709942 + 0xde, 0x53, 0x21, 0x7b, 0xf3, 0x5a, 0x16, 0x98, //0x0000c2e8 .quad -7487697328667536418 + 0x5c, 0x4c, 0x2e, 0x59, 0xc0, 0x18, 0x4f, 0x74, //0x0000c2f0 .quad 8380944645968776284 + 0xd6, 0xa8, 0xe9, 0x59, 0xb0, 0xf1, 0x1b, 0xbe, //0x0000c2f8 .quad -4747935642407032618 + 0x73, 0xdf, 0x79, 0x6f, 0xf0, 0xde, 0x62, 0x11, //0x0000c300 .quad 1252808770606194547 + 0x0c, 0x13, 0x64, 0x70, 0x1c, 0xee, 0xa2, 0xed, //0x0000c308 .quad -1323233534581402868 + 0xa8, 0x2b, 0xac, 0x45, 0x56, 0xcb, 0xdd, 0x8a, //0x0000c310 .quad -8440366555225904216 + 0xe7, 0x8b, 0x3e, 0xc6, 0xd1, 0xd4, 0x85, 0x94, //0x0000c318 .quad -7744549986754458649 + 0x92, 0x36, 0x17, 0xd7, 0x2b, 0x3e, 0x95, 0x6d, //0x0000c320 .quad 7896285879677171346 + 0xe1, 0x2e, 0xce, 0x37, 0x06, 0x4a, 0xa7, 0xb9, //0x0000c328 .quad -5069001465015685407 + 0x37, 0x04, 0xdd, 0xcc, 0xb6, 0x8d, 0xfa, 0xc8, //0x0000c330 .quad -3964700705685699529 + 0x99, 0xba, 0xc1, 0xc5, 0x87, 0x1c, 0x11, 0xe8, //0x0000c338 .quad -1724565812842218855 + 0xa2, 0x22, 0x0a, 0x40, 0x92, 0x98, 0x9c, 0x1d, //0x0000c340 .quad 2133748077373825698 + 0xa0, 0x14, 0x99, 0xdb, 0xd4, 0xb1, 0x0a, 0x91, //0x0000c348 .quad -7995382660667468640 + 0x4b, 0xab, 0x0c, 0xd0, 0xb6, 0xbe, 0x03, 0x25, //0x0000c350 .quad 2667185096717282123 + 0xc8, 0x59, 0x7f, 0x12, 0x4a, 0x5e, 0x4d, 0xb5, //0x0000c358 .quad -5382542307406947896 + 0x1d, 0xd6, 0x0f, 0x84, 0x64, 0xae, 0x44, 0x2e, //0x0000c360 .quad 3333981370896602653 + 0x3a, 0x30, 0x1f, 0x97, 0xdc, 0xb5, 0xa0, 0xe2, //0x0000c368 .quad -2116491865831296966 + 0xd2, 0xe5, 0x89, 0xd2, 0xfe, 0xec, 0xea, 0x5c, //0x0000c370 .quad 6695424375237764562 + 0x24, 0x7e, 0x73, 0xde, 0xa9, 0x71, 0xa4, 0x8d, //0x0000c378 .quad -8240336443785642460 + 0x47, 0x5f, 0x2c, 0x87, 0x3e, 0xa8, 0x25, 0x74, //0x0000c380 .quad 8369280469047205703 + 0xad, 0x5d, 0x10, 0x56, 0x14, 0x8e, 0x0d, 0xb1, //0x0000c388 .quad -5688734536304665171 + 0x19, 0x77, 0xf7, 0x28, 0x4e, 0x12, 0x2f, 0xd1, //0x0000c390 .quad -3373457468973156583 + 0x18, 0x75, 0x94, 0x6b, 0x99, 0xf1, 0x50, 0xdd, //0x0000c398 .quad -2499232151953443560 + 0x6f, 0xaa, 0x9a, 0xd9, 0x70, 0x6b, 0xbd, 0x82, //0x0000c3a0 .quad -9025939945749304721 + 0x2f, 0xc9, 0x3c, 0xe3, 0xff, 0x96, 0x52, 0x8a, //0x0000c3a8 .quad -8479549122611984081 + 0x0b, 0x55, 0x01, 0x10, 0x4d, 0xc6, 0x6c, 0x63, //0x0000c3b0 .quad 7164319141522920715 + 0x7b, 0xfb, 0x0b, 0xdc, 0xbf, 0x3c, 0xe7, 0xac, //0x0000c3b8 .quad -5987750384837592197 + 0x4e, 0xaa, 0x01, 0x54, 0xe0, 0xf7, 0x47, 0x3c, //0x0000c3c0 .quad 4343712908476262990 + 0x5a, 0xfa, 0x0e, 0xd3, 0xef, 0x0b, 0x21, 0xd8, //0x0000c3c8 .quad -2873001962619602342 + 0x71, 0x0a, 0x81, 0x34, 0xec, 0xfa, 0xac, 0x65, //0x0000c3d0 .quad 7326506586225052273 + 0x78, 0x5c, 0xe9, 0xe3, 0x75, 0xa7, 0x14, 0x87, //0x0000c3d8 .quad -8713155254278333320 + 0x0d, 0x4d, 0xa1, 0x41, 0xa7, 0x39, 0x18, 0x7f, //0x0000c3e0 .quad 9158133232781315341 + 0x96, 0xb3, 0xe3, 0x5c, 0x53, 0xd1, 0xd9, 0xa8, //0x0000c3e8 .quad -6279758049420528746 + 0x50, 0xa0, 0x09, 0x12, 0x11, 0x48, 0xde, 0x1e, //0x0000c3f0 .quad 2224294504121868368 + 0x7c, 0xa0, 0x1c, 0x34, 0xa8, 0x45, 0x10, 0xd3, //0x0000c3f8 .quad -3238011543348273028 + 0x32, 0x04, 0x46, 0xab, 0x0a, 0xed, 0x4a, 0x93, //0x0000c400 .quad -7833187971778608078 + 0x4d, 0xe4, 0x91, 0x20, 0x89, 0x2b, 0xea, 0x83, //0x0000c408 .quad -8941286242233752499 + 0x3f, 0x85, 0x17, 0x56, 0x4d, 0xa8, 0x1d, 0xf8, //0x0000c410 .quad -568112927868484289 + 0x60, 0x5d, 0xb6, 0x68, 0x6b, 0xb6, 0xe4, 0xa4, //0x0000c418 .quad -6564921784364802720 + 0x8e, 0x66, 0x9d, 0xab, 0x60, 0x12, 0x25, 0x36, //0x0000c420 .quad 3901544858591782542 + 0xb9, 0xf4, 0xe3, 0x42, 0x06, 0xe4, 0x1d, 0xce, //0x0000c428 .quad -3594466212028615495 + 0x19, 0x60, 0x42, 0x6b, 0x7c, 0x2b, 0xd7, 0xc1, //0x0000c430 .quad -4479063491021217767 + 0xf3, 0x78, 0xce, 0xe9, 0x83, 0xae, 0xd2, 0x80, //0x0000c438 .quad -9164070410158966541 + 0x1f, 0xf8, 0x12, 0x86, 0x5b, 0xf6, 0x4c, 0xb2, //0x0000c440 .quad -5598829363776522209 + 0x30, 0x17, 0x42, 0xe4, 0x24, 0x5a, 0x07, 0xa1, //0x0000c448 .quad -6843401994271320272 + 0x27, 0xb6, 0x97, 0x67, 0xf2, 0x33, 0xe0, 0xde, //0x0000c450 .quad -2386850686293264857 + 0xfc, 0x9c, 0x52, 0x1d, 0xae, 0x30, 0x49, 0xc9, //0x0000c458 .quad -3942566474411762436 + 0xb1, 0xa3, 0x7d, 0x01, 0xef, 0x40, 0x98, 0x16, //0x0000c460 .quad 1628122660560806833 + 0x3c, 0x44, 0xa7, 0xa4, 0xd9, 0x7c, 0x9b, 0xfb, //0x0000c468 .quad -316522074587315140 + 0x4e, 0x86, 0xee, 0x60, 0x95, 0x28, 0x1f, 0x8e, //0x0000c470 .quad -8205795374004271538 + 0xa5, 0x8a, 0xe8, 0x06, 0x08, 0x2e, 0x41, 0x9d, //0x0000c478 .quad -7115355324258153819 + 0xe2, 0x27, 0x2a, 0xb9, 0xba, 0xf2, 0xa6, 0xf1, //0x0000c480 .quad -1033872180650563614 + 0x4e, 0xad, 0xa2, 0x08, 0x8a, 0x79, 0x91, 0xc4, //0x0000c488 .quad -4282508136895304370 + 0xdb, 0xb1, 0x74, 0x67, 0x69, 0xaf, 0x10, 0xae, //0x0000c490 .quad -5904026244240592421 + 0xa2, 0x58, 0xcb, 0x8a, 0xec, 0xd7, 0xb5, 0xf5, //0x0000c498 .quad -741449152691742558 + 0x29, 0xef, 0xa8, 0xe0, 0xa1, 0x6d, 0xca, 0xac, //0x0000c4a0 .quad -5995859411864064215 + 0x65, 0x17, 0xbf, 0xd6, 0xf3, 0xa6, 0x91, 0x99, //0x0000c4a8 .quad -7380934748073420955 + 0xf3, 0x2a, 0xd3, 0x58, 0x0a, 0x09, 0xfd, 0x17, //0x0000c4b0 .quad 1728547772024695539 + 0x3f, 0xdd, 0x6e, 0xcc, 0xb0, 0x10, 0xf6, 0xbf, //0x0000c4b8 .quad -4614482416664388289 + 0xb0, 0xf5, 0x07, 0xef, 0x4c, 0x4b, 0xfc, 0xdd, //0x0000c4c0 .quad -2451001303396518480 + 0x8e, 0x94, 0x8a, 0xff, 0xdc, 0x94, 0xf3, 0xef, //0x0000c4c8 .quad -1156417002403097458 + 0x8e, 0xf9, 0x64, 0x15, 0x10, 0xaf, 0xbd, 0x4a, //0x0000c4d0 .quad 5385653213018257806 + 0xd9, 0x9c, 0xb6, 0x1f, 0x0a, 0x3d, 0xf8, 0x95, //0x0000c4d8 .quad -7640289654143017767 + 0xf1, 0x37, 0xbe, 0x1a, 0xd4, 0x1a, 0x6d, 0x9d, //0x0000c4e0 .quad -7102991539009341455 + 0x0f, 0x44, 0xa4, 0xa7, 0x4c, 0x4c, 0x76, 0xbb, //0x0000c4e8 .quad -4938676049251384305 + 0xed, 0xc5, 0x6d, 0x21, 0x89, 0x61, 0xc8, 0x84, //0x0000c4f0 .quad -8878739423761676819 + 0x13, 0x55, 0x8d, 0xd1, 0x5f, 0xdf, 0x53, 0xea, //0x0000c4f8 .quad -1561659043136842477 + 0xb4, 0x9b, 0xe4, 0xb4, 0xf5, 0x3c, 0xfd, 0x32, //0x0000c500 .quad 3674159897003727796 + 0x2c, 0x55, 0xf8, 0xe2, 0x9b, 0x6b, 0x74, 0x92, //0x0000c508 .quad -7893565929601608404 + 0xa1, 0xc2, 0x1d, 0x22, 0x33, 0x8c, 0xbc, 0x3f, //0x0000c510 .quad 4592699871254659745 + 0x77, 0x6a, 0xb6, 0xdb, 0x82, 0x86, 0x11, 0xb7, //0x0000c518 .quad -5255271393574622601 + 0x4a, 0x33, 0xa5, 0xea, 0x3f, 0xaf, 0xab, 0x0f, //0x0000c520 .quad 1129188820640936778 + 0x15, 0x05, 0xa4, 0x92, 0x23, 0xe8, 0xd5, 0xe4, //0x0000c528 .quad -1957403223540890347 + 0x0e, 0x40, 0xa7, 0xf2, 0x87, 0x4d, 0xcb, 0x29, //0x0000c530 .quad 3011586022114279438 + 0x2d, 0x83, 0xa6, 0x3b, 0x16, 0xb1, 0x05, 0x8f, //0x0000c538 .quad -8140906042354138323 + 0x12, 0x10, 0x51, 0xef, 0xe9, 0x20, 0x3e, 0x74, //0x0000c540 .quad 8376168546070237202 + 0xf8, 0x23, 0x90, 0xca, 0x5b, 0x1d, 0xc7, 0xb2, //0x0000c548 .quad -5564446534515285000 + 0x16, 0x54, 0x25, 0x6b, 0x24, 0xa9, 0x4d, 0x91, //0x0000c550 .quad -7976533391121755114 + 0xf6, 0x2c, 0x34, 0xbd, 0xb2, 0xe4, 0x78, 0xdf, //0x0000c558 .quad -2343872149716718346 + 0x8e, 0x54, 0xf7, 0xc2, 0xb6, 0x89, 0xd0, 0x1a, //0x0000c560 .quad 1932195658189984910 + 0x1a, 0x9c, 0x40, 0xb6, 0xef, 0x8e, 0xab, 0x8b, //0x0000c568 .quad -8382449121214030822 + 0xb1, 0x29, 0xb5, 0x73, 0x24, 0xac, 0x84, 0xa1, //0x0000c570 .quad -6808127464117294671 + 0x20, 0xc3, 0xd0, 0xa3, 0xab, 0x72, 0x96, 0xae, //0x0000c578 .quad -5866375383090150624 + 0x1e, 0x74, 0xa2, 0x90, 0x2d, 0xd7, 0xe5, 0xc9, //0x0000c580 .quad -3898473311719230434 + 0xe8, 0xf3, 0xc4, 0x8c, 0x56, 0x0f, 0x3c, 0xda, //0x0000c588 .quad -2721283210435300376 + 0x92, 0x88, 0x65, 0x7a, 0x7c, 0xa6, 0x2f, 0x7e, //0x0000c590 .quad 9092669226243950738 + 0x71, 0x18, 0xfb, 0x17, 0x96, 0x89, 0x65, 0x88, //0x0000c598 .quad -8618331034163144591 + 0xb7, 0xea, 0xfe, 0x98, 0x1b, 0x90, 0xbb, 0xdd, //0x0000c5a0 .quad -2469221522477225289 + 0x8d, 0xde, 0xf9, 0x9d, 0xfb, 0xeb, 0x7e, 0xaa, //0x0000c5a8 .quad -6161227774276542835 + 0x65, 0xa5, 0x3e, 0x7f, 0x22, 0x74, 0x2a, 0x55, //0x0000c5b0 .quad 6136845133758244197 + 0x31, 0x56, 0x78, 0x85, 0xfa, 0xa6, 0x1e, 0xd5, //0x0000c5b8 .quad -3089848699418290639 + 0x5f, 0x27, 0x87, 0x8f, 0x95, 0x88, 0x3a, 0xd5, //0x0000c5c0 .quad -3082000819042179233 + 0xde, 0x35, 0x6b, 0x93, 0x5c, 0x28, 0x33, 0x85, //0x0000c5c8 .quad -8848684464777513506 + 0x37, 0xf1, 0x68, 0xf3, 0xba, 0x2a, 0x89, 0x8a, //0x0000c5d0 .quad -8464187042230111945 + 0x56, 0x03, 0x46, 0xb8, 0x73, 0xf2, 0x7f, 0xa6, //0x0000c5d8 .quad -6449169562544503978 + 0x85, 0x2d, 0x43, 0xb0, 0x69, 0x75, 0x2b, 0x2d, //0x0000c5e0 .quad 3254824252494523781 + 0x2c, 0x84, 0x57, 0xa6, 0x10, 0xef, 0x1f, 0xd0, //0x0000c5e8 .quad -3449775934753242068 + 0x73, 0xfc, 0x29, 0x0e, 0x62, 0x29, 0x3b, 0x9c, //0x0000c5f0 .quad -7189106879045698445 + 0x9b, 0xb2, 0xf6, 0x67, 0x6a, 0xf5, 0x13, 0x82, //0x0000c5f8 .quad -9073638986861858149 + 0x8f, 0x7b, 0xb4, 0x91, 0xba, 0xf3, 0x49, 0x83, //0x0000c600 .quad -8986383598807123057 + 0x42, 0x5f, 0xf4, 0x01, 0xc5, 0xf2, 0x98, 0xa2, //0x0000c608 .quad -6730362715149934782 + 0x73, 0x9a, 0x21, 0x36, 0xa9, 0x70, 0x1c, 0x24, //0x0000c610 .quad 2602078556773259891 + 0x13, 0x77, 0x71, 0x42, 0x76, 0x2f, 0x3f, 0xcb, //0x0000c618 .quad -3801267375510030573 + 0x10, 0x01, 0xaa, 0x83, 0xd3, 0x8c, 0x23, 0xed, //0x0000c620 .quad -1359087822460813040 + 0xd7, 0xd4, 0x0d, 0xd3, 0x53, 0xfb, 0x0e, 0xfe, //0x0000c628 .quad -139898200960150313 + 0xaa, 0x40, 0x4a, 0x32, 0x04, 0x38, 0x36, 0xf4, //0x0000c630 .quad -849429889038008150 + 0x06, 0xa5, 0xe8, 0x63, 0x14, 0x5d, 0xc9, 0x9e, //0x0000c638 .quad -7004965403241175802 + 0xd5, 0xd0, 0xdc, 0x3e, 0x05, 0xc6, 0x43, 0xb1, //0x0000c640 .quad -5673473379724898091 + 0x48, 0xce, 0xe2, 0x7c, 0x59, 0xb4, 0x7b, 0xc6, //0x0000c648 .quad -4144520735624081848 + 0x0a, 0x05, 0x94, 0x8e, 0x86, 0xb7, 0x94, 0xdd, //0x0000c650 .quad -2480155706228734710 + 0xda, 0x81, 0x1b, 0xdc, 0x6f, 0xa1, 0x1a, 0xf8, //0x0000c658 .quad -568964901102714406 + 0x26, 0x83, 0x1c, 0x19, 0xb4, 0xf2, 0x7c, 0xca, //0x0000c660 .quad -3855940325606653146 + 0x28, 0x31, 0x91, 0xe9, 0xe5, 0xa4, 0x10, 0x9b, //0x0000c668 .quad -7273132090830278360 + 0xf0, 0xa3, 0x63, 0x1f, 0x61, 0x2f, 0x1c, 0xfd, //0x0000c670 .quad -208239388580928528 + 0x72, 0x7d, 0xf5, 0x63, 0x1f, 0xce, 0xd4, 0xc1, //0x0000c678 .quad -4479729095110460046 + 0xec, 0x8c, 0x3c, 0x67, 0x39, 0x3b, 0x63, 0xbc, //0x0000c680 .quad -4871985254153548564 + 0xcf, 0xdc, 0xf2, 0x3c, 0xa7, 0x01, 0x4a, 0xf2, //0x0000c688 .quad -987975350460687153 + 0x13, 0xd8, 0x85, 0xe0, 0x03, 0x05, 0xbe, 0xd5, //0x0000c690 .quad -3044990783845967853 + 0x01, 0xca, 0x17, 0x86, 0x08, 0x41, 0x6e, 0x97, //0x0000c698 .quad -7535013621679011327 + 0x18, 0x4e, 0xa7, 0xd8, 0x44, 0x86, 0x2d, 0x4b, //0x0000c6a0 .quad 5417133557047315992 + 0x82, 0xbc, 0x9d, 0xa7, 0x4a, 0xd1, 0x49, 0xbd, //0x0000c6a8 .quad -4807081008671376254 + 0x9e, 0x21, 0xd1, 0x0e, 0xd6, 0xe7, 0xf8, 0xdd, //0x0000c6b0 .quad -2451955090545630818 + 0xa2, 0x2b, 0x85, 0x51, 0x9d, 0x45, 0x9c, 0xec, //0x0000c6b8 .quad -1397165242411832414 + 0x03, 0xb5, 0x42, 0xc9, 0xe5, 0x90, 0xbb, 0xca, //0x0000c6c0 .quad -3838314940804713213 + 0x45, 0x3b, 0xf3, 0x52, 0x82, 0xab, 0xe1, 0x93, //0x0000c6c8 .quad -7790757304148477115 + 0x43, 0x62, 0x93, 0x3b, 0x1f, 0x75, 0x6a, 0x3d, //0x0000c6d0 .quad 4425478360848884291 + 0x17, 0x0a, 0xb0, 0xe7, 0x62, 0x16, 0xda, 0xb8, //0x0000c6d8 .quad -5126760611758208489 + 0xd4, 0x3a, 0x78, 0x0a, 0x67, 0x12, 0xc5, 0x0c, //0x0000c6e0 .quad 920161932633717460 + 0x9d, 0x0c, 0x9c, 0xa1, 0xfb, 0x9b, 0x10, 0xe7, //0x0000c6e8 .quad -1796764746270372707 + 0xc5, 0x24, 0x8b, 0x66, 0x80, 0x2b, 0xfb, 0x27, //0x0000c6f0 .quad 2880944217109767365 + 0xe2, 0x87, 0x01, 0x45, 0x7d, 0x61, 0x6a, 0x90, //0x0000c6f8 .quad -8040506994060064798 + 0xf6, 0xed, 0x2d, 0x80, 0x60, 0xf6, 0xf9, 0xb1, //0x0000c700 .quad -5622191765467566602 + 0xda, 0xe9, 0x41, 0x96, 0xdc, 0xf9, 0x84, 0xb4, //0x0000c708 .quad -5438947724147693094 + 0x73, 0x69, 0x39, 0xa0, 0xf8, 0x73, 0x78, 0x5e, //0x0000c710 .quad 6807318348447705459 + 0x51, 0x64, 0xd2, 0xbb, 0x53, 0x38, 0xa6, 0xe1, //0x0000c718 .quad -2186998636757228463 + 0xe8, 0xe1, 0x23, 0x64, 0x7b, 0x48, 0x0b, 0xdb, //0x0000c720 .quad -2662955059861265944 + 0xb2, 0x7e, 0x63, 0x55, 0x34, 0xe3, 0x07, 0x8d, //0x0000c728 .quad -8284403175614349646 + 0x62, 0xda, 0x2c, 0x3d, 0x9a, 0x1a, 0xce, 0x91, //0x0000c730 .quad -7940379843253970334 + 0x5f, 0x5e, 0xbc, 0x6a, 0x01, 0xdc, 0x49, 0xb0, //0x0000c738 .quad -5743817951090549153 + 0xfb, 0x10, 0x78, 0xcc, 0x40, 0xa1, 0x41, 0x76, //0x0000c740 .quad 8521269269642088699 + 0xf7, 0x75, 0x6b, 0xc5, 0x01, 0x53, 0x5c, 0xdc, //0x0000c748 .quad -2568086420435798537 + 0x9d, 0x0a, 0xcb, 0x7f, 0xc8, 0x04, 0xe9, 0xa9, //0x0000c750 .quad -6203421752542164323 + 0xba, 0x29, 0x63, 0x1b, 0xe1, 0xb3, 0xb9, 0x89, //0x0000c758 .quad -8522583040413455942 + 0x44, 0xcd, 0xbd, 0x9f, 0xfa, 0x45, 0x63, 0x54, //0x0000c760 .quad 6080780864604458308 + 0x29, 0xf4, 0x3b, 0x62, 0xd9, 0x20, 0x28, 0xac, //0x0000c768 .quad -6041542782089432023 + 0x95, 0x40, 0xad, 0x47, 0x79, 0x17, 0x7c, 0xa9, //0x0000c770 .quad -6234081974526590827 + 0x33, 0xf1, 0xca, 0xba, 0x0f, 0x29, 0x32, 0xd7, //0x0000c778 .quad -2940242459184402125 + 0x5d, 0x48, 0xcc, 0xcc, 0xab, 0x8e, 0xed, 0x49, //0x0000c780 .quad 5327070802775656541 + 0xc0, 0xd6, 0xbe, 0xd4, 0xa9, 0x59, 0x7f, 0x86, //0x0000c788 .quad -8755180564631333184 + 0x74, 0x5a, 0xff, 0xbf, 0x56, 0xf2, 0x68, 0x5c, //0x0000c790 .quad 6658838503469570676 + 0x70, 0x8c, 0xee, 0x49, 0x14, 0x30, 0x1f, 0xa8, //0x0000c798 .quad -6332289687361778576 + 0x11, 0x31, 0xff, 0x6f, 0xec, 0x2e, 0x83, 0x73, //0x0000c7a0 .quad 8323548129336963345 + 0x8c, 0x2f, 0x6a, 0x5c, 0x19, 0xfc, 0x26, 0xd2, //0x0000c7a8 .quad -3303676090774835316 + 0xab, 0x7e, 0xff, 0xc5, 0x53, 0xfd, 0x31, 0xc8, //0x0000c7b0 .quad -4021154456019173717 + 0xb7, 0x5d, 0xc2, 0xd9, 0x8f, 0x5d, 0x58, 0x83, //0x0000c7b8 .quad -8982326584375353929 + 0x55, 0x5e, 0x7f, 0xb7, 0xa8, 0x7c, 0x3e, 0xba, //0x0000c7c0 .quad -5026443070023967147 + 0x25, 0xf5, 0x32, 0xd0, 0xf3, 0x74, 0x2e, 0xa4, //0x0000c7c8 .quad -6616222212041804507 + 0xeb, 0x35, 0x5f, 0xe5, 0xd2, 0x1b, 0xce, 0x28, //0x0000c7d0 .quad 2940318199324816875 + 0x6f, 0xb2, 0x3f, 0xc4, 0x30, 0x12, 0x3a, 0xcd, //0x0000c7d8 .quad -3658591746624867729 + 0xb3, 0x81, 0x5b, 0xcf, 0x63, 0xd1, 0x80, 0x79, //0x0000c7e0 .quad 8755227902219092403 + 0x85, 0xcf, 0xa7, 0x7a, 0x5e, 0x4b, 0x44, 0x80, //0x0000c7e8 .quad -9204148869281624187 + 0x1f, 0x62, 0x32, 0xc3, 0xbc, 0x05, 0xe1, 0xd7, //0x0000c7f0 .quad -2891023177508298209 + 0x66, 0xc3, 0x51, 0x19, 0x36, 0x5e, 0x55, 0xa0, //0x0000c7f8 .quad -6893500068174642330 + 0xa7, 0xfa, 0xfe, 0xf3, 0x2b, 0x47, 0xd9, 0x8d, //0x0000c800 .quad -8225464990312760665 + 0x40, 0x34, 0xa6, 0x9f, 0xc3, 0xb5, 0x6a, 0xc8, //0x0000c808 .quad -4005189066790915008 + 0x51, 0xb9, 0xfe, 0xf0, 0xf6, 0x98, 0x4f, 0xb1, //0x0000c810 .quad -5670145219463562927 + 0x50, 0xc1, 0x8f, 0x87, 0x34, 0x63, 0x85, 0xfa, //0x0000c818 .quad -394800315061255856 + 0xd3, 0x33, 0x9f, 0x56, 0x9a, 0xbf, 0xd1, 0x6e, //0x0000c820 .quad 7985374283903742931 + 0xd2, 0xd8, 0xb9, 0xd4, 0x00, 0x5e, 0x93, 0x9c, //0x0000c828 .quad -7164279224554366766 + 0xc8, 0x00, 0x47, 0xec, 0x80, 0x2f, 0x86, 0x0a, //0x0000c830 .quad 758345818024902856 + 0x07, 0x4f, 0xe8, 0x09, 0x81, 0x35, 0xb8, 0xc3, //0x0000c838 .quad -4343663012265570553 + 0xfa, 0xc0, 0x58, 0x27, 0x61, 0xbb, 0x27, 0xcd, //0x0000c840 .quad -3663753745896259334 + 0xc8, 0x62, 0x62, 0x4c, 0xe1, 0x42, 0xa6, 0xf4, //0x0000c848 .quad -817892746904575288 + 0x9c, 0x78, 0x97, 0xb8, 0x1c, 0xd5, 0x38, 0x80, //0x0000c850 .quad -9207375118826243940 + 0xbd, 0x7d, 0xbd, 0xcf, 0xcc, 0xe9, 0xe7, 0x98, //0x0000c858 .quad -7428711994456441411 + 0xc3, 0x56, 0xbd, 0xe6, 0x63, 0x0a, 0x47, 0xe0, //0x0000c860 .quad -2285846861678029117 + 0x2c, 0xdd, 0xac, 0x03, 0x40, 0xe4, 0x21, 0xbf, //0x0000c868 .quad -4674203974643163860 + 0x74, 0xac, 0x6c, 0xe0, 0xfc, 0xcc, 0x58, 0x18, //0x0000c870 .quad 1754377441329851508 + 0x78, 0x14, 0x98, 0x04, 0x50, 0x5d, 0xea, 0xee, //0x0000c878 .quad -1231068949876566920 + 0xc8, 0xeb, 0x43, 0x0c, 0x1e, 0x80, 0x37, 0x0f, //0x0000c880 .quad 1096485900831157192 + 0xcb, 0x0c, 0xdf, 0x02, 0x52, 0x7a, 0x52, 0x95, //0x0000c888 .quad -7686947121313936181 + 0xba, 0xe6, 0x54, 0x8f, 0x25, 0x60, 0x05, 0xd3, //0x0000c890 .quad -3241078642388441414 + 0xfd, 0xcf, 0x96, 0x83, 0xe6, 0x18, 0xa7, 0xba, //0x0000c898 .quad -4996997883215032323 + 0x69, 0x20, 0x2a, 0xf3, 0x2e, 0xb8, 0xc6, 0x47, //0x0000c8a0 .quad 5172023733869224041 + 0xfd, 0x83, 0x7c, 0x24, 0x20, 0xdf, 0x50, 0xe9, //0x0000c8a8 .quad -1634561335591402499 + 0x41, 0x54, 0xfa, 0x57, 0x1d, 0x33, 0xdc, 0x4c, //0x0000c8b0 .quad 5538357842881958977 + 0x7e, 0xd2, 0xcd, 0x16, 0x74, 0x8b, 0xd2, 0x91, //0x0000c8b8 .quad -7939129862385708418 + 0x52, 0xe9, 0xf8, 0xad, 0xe4, 0x3f, 0x13, 0xe0, //0x0000c8c0 .quad -2300424733252327086 + 0x1d, 0x47, 0x81, 0x1c, 0x51, 0x2e, 0x47, 0xb6, //0x0000c8c8 .quad -5312226309554747619 + 0xa6, 0x23, 0x77, 0xd9, 0xdd, 0x0f, 0x18, 0x58, //0x0000c8d0 .quad 6347841120289366950 + 0xe5, 0x98, 0xa1, 0x63, 0xe5, 0xf9, 0xd8, 0xe3, //0x0000c8d8 .quad -2028596868516046619 + 0x48, 0x76, 0xea, 0xa7, 0xea, 0x09, 0x0f, 0x57, //0x0000c8e0 .quad 6273243709394548296 + 0x8f, 0xff, 0x44, 0x5e, 0x2f, 0x9c, 0x67, 0x8e, //0x0000c8e8 .quad -8185402070463610993 + 0xda, 0x13, 0xe5, 0x51, 0x65, 0xcc, 0xd2, 0x2c, //0x0000c8f0 .quad 3229868618315797466 + 0x73, 0x3f, 0xd6, 0x35, 0x3b, 0x83, 0x01, 0xb2, //0x0000c8f8 .quad -5620066569652125837 + 0xd1, 0x58, 0x5e, 0xa6, 0x7e, 0x7f, 0x07, 0xf8, //0x0000c900 .quad -574350245532641071 + 0x4f, 0xcf, 0x4b, 0x03, 0x0a, 0xe4, 0x81, 0xde, //0x0000c908 .quad -2413397193637769393 + 0x82, 0xf7, 0xfa, 0x27, 0xaf, 0xaf, 0x04, 0xfb, //0x0000c910 .quad -358968903457900670 + 0x91, 0x61, 0x0f, 0x42, 0x86, 0x2e, 0x11, 0x8b, //0x0000c918 .quad -8425902273664687727 + 0x63, 0xb5, 0xf9, 0xf1, 0x9a, 0xdb, 0xc5, 0x79, //0x0000c920 .quad 8774660907532399971 + 0xf6, 0x39, 0x93, 0xd2, 0x27, 0x7a, 0xd5, 0xad, //0x0000c928 .quad -5920691823653471754 + 0xbc, 0x22, 0x78, 0xae, 0x81, 0x52, 0x37, 0x18, //0x0000c930 .quad 1744954097560724156 + 0x74, 0x08, 0x38, 0xc7, 0xb1, 0xd8, 0x4a, 0xd9, //0x0000c938 .quad -2789178761139451788 + 0xb5, 0x15, 0x0b, 0x0d, 0x91, 0x93, 0x22, 0x8f, //0x0000c940 .quad -8132775725879323211 + 0x48, 0x05, 0x83, 0x1c, 0x6f, 0xc7, 0xce, 0x87, //0x0000c948 .quad -8660765753353239224 + 0x22, 0xdb, 0x4d, 0x50, 0x75, 0x38, 0xeb, 0xb2, //0x0000c950 .quad -5554283638921766110 + 0x9a, 0xc6, 0xa3, 0xe3, 0x4a, 0x79, 0xc2, 0xa9, //0x0000c958 .quad -6214271173264161126 + 0xeb, 0x51, 0x61, 0xa4, 0x92, 0x06, 0xa6, 0x5f, //0x0000c960 .quad 6892203506629956075 + 0x41, 0xb8, 0x8c, 0x9c, 0x9d, 0x17, 0x33, 0xd4, //0x0000c968 .quad -3156152948152813503 + 0x33, 0xd3, 0xbc, 0xa6, 0x1b, 0xc4, 0xc7, 0xdb, //0x0000c970 .quad -2609901835997359309 + 0x28, 0xf3, 0xd7, 0x81, 0xc2, 0xee, 0x9f, 0x84, //0x0000c978 .quad -8890124620236590296 + 0x00, 0x08, 0x6c, 0x90, 0x22, 0xb5, 0xb9, 0x12, //0x0000c980 .quad 1349308723430688768 + 0xf3, 0xef, 0x4d, 0x22, 0x73, 0xea, 0xc7, 0xa5, //0x0000c988 .quad -6500969756868349965 + 0x00, 0x0a, 0x87, 0x34, 0x6b, 0x22, 0x68, 0xd7, //0x0000c990 .quad -2925050114139026944 + 0xef, 0x6b, 0xe1, 0xea, 0x0f, 0xe5, 0x39, 0xcf, //0x0000c998 .quad -3514526177658049553 + 0x40, 0x66, 0xd4, 0x00, 0x83, 0x15, 0xa1, 0xe6, //0x0000c9a0 .quad -1828156321336891840 + 0x75, 0xe3, 0xcc, 0xf2, 0x29, 0x2f, 0x84, 0x81, //0x0000c9a8 .quad -9114107888677362827 + 0xd0, 0x7f, 0x09, 0xc1, 0xe3, 0x5a, 0x49, 0x60, //0x0000c9b0 .quad 6938176635183661008 + 0x53, 0x1c, 0x80, 0x6f, 0xf4, 0x3a, 0xe5, 0xa1, //0x0000c9b8 .quad -6780948842419315629 + 0xc4, 0xdf, 0x4b, 0xb1, 0x9c, 0xb1, 0x5b, 0x38, //0x0000c9c0 .quad 4061034775552188356 + 0x68, 0x23, 0x60, 0x8b, 0xb1, 0x89, 0x5e, 0xca, //0x0000c9c8 .quad -3864500034596756632 + 0xb5, 0xd7, 0x9e, 0xdd, 0x03, 0x9e, 0x72, 0x46, //0x0000c9d0 .quad 5076293469440235445 + 0x42, 0x2c, 0x38, 0xee, 0x1d, 0x2c, 0xf6, 0xfc, //0x0000c9d8 .quad -218939024818557886 + 0xd1, 0x46, 0x83, 0x6a, 0xc2, 0xa2, 0x07, 0x6c, //0x0000c9e0 .quad 7784369436827535057 + 0xa9, 0x1b, 0xe3, 0xb4, 0x92, 0xdb, 0x19, 0x9e, //0x0000c9e8 .quad -7054365918152680535 + 0x85, 0x18, 0x24, 0x05, 0x73, 0x8b, 0x09, 0xc7, //0x0000c9f0 .quad -4104596259247744891 + 0x93, 0xe2, 0x1b, 0x62, 0x77, 0x52, 0xa0, 0xc5, //0x0000c9f8 .quad -4206271379263462765 + 0xa7, 0x1e, 0x6d, 0xc6, 0x4f, 0xee, 0xcb, 0xb8, //0x0000ca00 .quad -5130745324059681113 + 0x38, 0xdb, 0xa2, 0x3a, 0x15, 0x67, 0x08, 0xf7, //0x0000ca08 .quad -646153205651940552 + 0x28, 0x33, 0x04, 0xdc, 0xf1, 0x74, 0x7f, 0x73, //0x0000ca10 .quad 8322499218531169064 + 0x03, 0xc9, 0xa5, 0x44, 0x6d, 0x40, 0x65, 0x9a, //0x0000ca18 .quad -7321374781173544701 + 0xf2, 0x3f, 0x05, 0x53, 0x2e, 0x52, 0x5f, 0x50, //0x0000ca20 .quad 5791438004736573426 + 0x44, 0x3b, 0xcf, 0x95, 0x88, 0x90, 0xfe, 0xc0, //0x0000ca28 .quad -4540032458039542972 + 0xef, 0x8f, 0xc6, 0xe7, 0xb9, 0x26, 0x77, 0x64, //0x0000ca30 .quad 7239297505920716783 + 0x15, 0x0a, 0x43, 0xbb, 0xaa, 0x34, 0x3e, 0xf1, //0x0000ca38 .quad -1063354554122040811 + 0xf5, 0x19, 0xdc, 0x30, 0x34, 0x78, 0xca, 0x5e, //0x0000ca40 .quad 6830403950414141941 + 0x4d, 0xe6, 0x09, 0xb5, 0xea, 0xe0, 0xc6, 0x96, //0x0000ca48 .quad -7582125623967357363 + 0x72, 0x20, 0x13, 0x3d, 0x41, 0x16, 0x7d, 0xb6, //0x0000ca50 .quad -5297053117264486286 + 0xe0, 0x5f, 0x4c, 0x62, 0x25, 0x99, 0x78, 0xbc, //0x0000ca58 .quad -4865971011531808800 + 0x8f, 0xe8, 0x57, 0x8c, 0xd1, 0x5b, 0x1c, 0xe4, //0x0000ca60 .quad -2009630378153219953 + 0xd8, 0x77, 0xdf, 0xba, 0x6e, 0xbf, 0x96, 0xeb, //0x0000ca68 .quad -1470777745987373096 + 0x59, 0xf1, 0xb6, 0xf7, 0x62, 0xb9, 0x91, 0x8e, //0x0000ca70 .quad -8173548013986844327 + 0xe7, 0xaa, 0xcb, 0x34, 0xa5, 0x37, 0x3e, 0x93, //0x0000ca78 .quad -7836765118883190041 + 0xb0, 0xad, 0xa4, 0xb5, 0xbb, 0x27, 0x36, 0x72, //0x0000ca80 .quad 8229809056225996208 + 0xa1, 0x95, 0xfe, 0x81, 0x8e, 0xc5, 0x0d, 0xb8, //0x0000ca88 .quad -5184270380176599647 + 0x1c, 0xd9, 0x0d, 0xa3, 0xaa, 0xb1, 0xc3, 0xce, //0x0000ca90 .quad -3547796734999668452 + 0x09, 0x3b, 0x7e, 0x22, 0xf2, 0x36, 0x11, 0xe6, //0x0000ca98 .quad -1868651956793361655 + 0xb1, 0xa7, 0xe8, 0xa5, 0x0a, 0x4f, 0x3a, 0x21, //0x0000caa0 .quad 2394313059052595121 + 0xe6, 0xe4, 0x8e, 0x55, 0x57, 0xc2, 0xca, 0x8f, //0x0000caa8 .quad -8085436500636932890 + 0x9d, 0xd1, 0x62, 0x4f, 0xcd, 0xe2, 0x88, 0xa9, //0x0000cab0 .quad -6230480713039031907 + 0x1f, 0x9e, 0xf2, 0x2a, 0xed, 0x72, 0xbd, 0xb3, //0x0000cab8 .quad -5495109607368778209 + 0x05, 0x86, 0x3b, 0xa3, 0x80, 0x1b, 0xeb, 0x93, //0x0000cac0 .quad -7788100891298789883 + 0xa7, 0x45, 0xaf, 0x75, 0xa8, 0xcf, 0xac, 0xe0, //0x0000cac8 .quad -2257200990783584857 + 0xc3, 0x33, 0x05, 0x66, 0x30, 0xf1, 0x72, 0xbc, //0x0000cad0 .quad -4867563057061743677 + 0x88, 0x8b, 0x8d, 0x49, 0xc9, 0x01, 0x6c, 0x8c, //0x0000cad8 .quad -8328279646880822392 + 0xb4, 0x80, 0x86, 0x7f, 0x7c, 0xad, 0x8f, 0xeb, //0x0000cae0 .quad -1472767802899791692 + 0x6a, 0xee, 0xf0, 0x9b, 0x3b, 0x02, 0x87, 0xaf, //0x0000cae8 .quad -5798663540173640086 + 0xe1, 0x20, 0x68, 0x9f, 0xdb, 0x98, 0x73, 0xa6, //0x0000caf0 .quad -6452645772052127519 + 0x05, 0x2a, 0xed, 0x82, 0xca, 0xc2, 0x68, 0xdb, //0x0000caf8 .quad -2636643406789662203 + 0x8c, 0x14, 0xa1, 0x43, 0x89, 0x3f, 0x08, 0x88, //0x0000cb00 .quad -8644589625959967604 + 0x43, 0x3a, 0xd4, 0x91, 0xbe, 0x79, 0x21, 0x89, //0x0000cb08 .quad -8565431156884620733 + 0xb0, 0x59, 0x89, 0x94, 0x6b, 0x4f, 0x0a, 0x6a, //0x0000cb10 .quad 7641007041259592112 + 0xd4, 0x48, 0x49, 0x36, 0x2e, 0xd8, 0x69, 0xab, //0x0000cb18 .quad -6095102927678388012 + 0x1c, 0xb0, 0xab, 0x79, 0x46, 0xe3, 0x8c, 0x84, //0x0000cb20 .quad -8895485272135061476 + 0x09, 0x9b, 0xdb, 0xc3, 0x39, 0x4e, 0x44, 0xd6, //0x0000cb28 .quad -3007192641170597111 + 0x11, 0x4e, 0x0b, 0x0c, 0x0c, 0x0e, 0xd8, 0xf2, //0x0000cb30 .quad -947992276657025519 + 0xe5, 0x40, 0x69, 0x1a, 0xe4, 0xb0, 0xea, 0x85, //0x0000cb38 .quad -8797024428372705051 + 0x95, 0x21, 0x0e, 0x0f, 0x8f, 0x11, 0x8e, 0x6f, //0x0000cb40 .quad 8038381691033493909 + 0x1f, 0x91, 0x03, 0x21, 0x1d, 0x5d, 0x65, 0xa7, //0x0000cb48 .quad -6384594517038493409 + 0xfb, 0xa9, 0xd1, 0xd2, 0xf2, 0x95, 0x71, 0x4b, //0x0000cb50 .quad 5436291095364479483 + 0x67, 0x75, 0x44, 0x69, 0x64, 0xb4, 0x3e, 0xd1, //0x0000cb58 .quad -3369057127870728857 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000cb60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x0000cb70 .p2align 4, 0x00 + //0x0000cb70 _POW_TAB + 0x01, 0x00, 0x00, 0x00, //0x0000cb70 .long 1 + 0x03, 0x00, 0x00, 0x00, //0x0000cb74 .long 3 + 0x06, 0x00, 0x00, 0x00, //0x0000cb78 .long 6 + 0x09, 0x00, 0x00, 0x00, //0x0000cb7c .long 9 + 0x0d, 0x00, 0x00, 0x00, //0x0000cb80 .long 13 + 0x10, 0x00, 0x00, 0x00, //0x0000cb84 .long 16 + 0x13, 0x00, 0x00, 0x00, //0x0000cb88 .long 19 + 0x17, 0x00, 0x00, 0x00, //0x0000cb8c .long 23 + 0x1a, 0x00, 0x00, 0x00, //0x0000cb90 .long 26 + //0x0000cb94 .p2align 2, 0x00 + //0x0000cb94 _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x0000cb94 .long 2 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000cb98 .p2align 4, 0x00 + //0x0000cba0 _Digits + 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30, 0x33, 0x30, 0x34, 0x30, 0x35, 0x30, 0x36, 0x30, 0x37, //0x0000cba0 QUAD $0x3330323031303030; QUAD $0x3730363035303430 // .ascii 16, '0001020304050607' + 0x30, 0x38, 0x30, 0x39, 0x31, 0x30, 0x31, 0x31, 0x31, 0x32, 0x31, 0x33, 0x31, 0x34, 0x31, 0x35, //0x0000cbb0 QUAD $0x3131303139303830; QUAD $0x3531343133313231 // .ascii 16, '0809101112131415' + 0x31, 0x36, 0x31, 0x37, 0x31, 0x38, 0x31, 0x39, 0x32, 0x30, 0x32, 0x31, 0x32, 0x32, 0x32, 0x33, //0x0000cbc0 QUAD $0x3931383137313631; QUAD $0x3332323231323032 // .ascii 16, '1617181920212223' + 0x32, 0x34, 0x32, 0x35, 0x32, 0x36, 0x32, 0x37, 0x32, 0x38, 0x32, 0x39, 0x33, 0x30, 0x33, 0x31, //0x0000cbd0 QUAD $0x3732363235323432; QUAD $0x3133303339323832 // .ascii 16, '2425262728293031' + 0x33, 0x32, 0x33, 0x33, 0x33, 0x34, 0x33, 0x35, 0x33, 0x36, 0x33, 0x37, 0x33, 0x38, 0x33, 0x39, //0x0000cbe0 QUAD $0x3533343333333233; QUAD $0x3933383337333633 // .ascii 16, '3233343536373839' + 0x34, 0x30, 0x34, 0x31, 0x34, 0x32, 0x34, 0x33, 0x34, 0x34, 0x34, 0x35, 0x34, 0x36, 0x34, 0x37, //0x0000cbf0 QUAD $0x3334323431343034; QUAD $0x3734363435343434 // .ascii 16, '4041424344454647' + 0x34, 0x38, 0x34, 0x39, 0x35, 0x30, 0x35, 0x31, 0x35, 0x32, 0x35, 0x33, 0x35, 0x34, 0x35, 0x35, //0x0000cc00 QUAD $0x3135303539343834; QUAD $0x3535343533353235 // .ascii 16, '4849505152535455' + 0x35, 0x36, 0x35, 0x37, 0x35, 0x38, 0x35, 0x39, 0x36, 0x30, 0x36, 0x31, 0x36, 0x32, 0x36, 0x33, //0x0000cc10 QUAD $0x3935383537353635; QUAD $0x3336323631363036 // .ascii 16, '5657585960616263' + 0x36, 0x34, 0x36, 0x35, 0x36, 0x36, 0x36, 0x37, 0x36, 0x38, 0x36, 0x39, 0x37, 0x30, 0x37, 0x31, //0x0000cc20 QUAD $0x3736363635363436; QUAD $0x3137303739363836 // .ascii 16, '6465666768697071' + 0x37, 0x32, 0x37, 0x33, 0x37, 0x34, 0x37, 0x35, 0x37, 0x36, 0x37, 0x37, 0x37, 0x38, 0x37, 0x39, //0x0000cc30 QUAD $0x3537343733373237; QUAD $0x3937383737373637 // .ascii 16, '7273747576777879' + 0x38, 0x30, 0x38, 0x31, 0x38, 0x32, 0x38, 0x33, 0x38, 0x34, 0x38, 0x35, 0x38, 0x36, 0x38, 0x37, //0x0000cc40 QUAD $0x3338323831383038; QUAD $0x3738363835383438 // .ascii 16, '8081828384858687' + 0x38, 0x38, 0x38, 0x39, 0x39, 0x30, 0x39, 0x31, 0x39, 0x32, 0x39, 0x33, 0x39, 0x34, 0x39, 0x35, //0x0000cc50 QUAD $0x3139303939383838; QUAD $0x3539343933393239 // .ascii 16, '8889909192939495' + 0x39, 0x36, 0x39, 0x37, 0x39, 0x38, 0x39, 0x39, //0x0000cc60 QUAD $0x3939383937393639 // .ascii 8, '96979899' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000cc68 .p2align 4, 0x00 + //0x0000cc70 _pow10_ceil_sig.g + 0x4f, 0xdc, 0xbc, 0xbe, 0xfc, 0xb1, 0x77, 0xff, //0x0000cc70 .quad -38366372719436721 + 0x7b, 0x0f, 0xbb, 0x13, 0x9c, 0xe8, 0xe8, 0x25, //0x0000cc78 .quad 2731688931043774331 + 0xb1, 0x09, 0x36, 0xf7, 0x3d, 0xcf, 0xaa, 0x9f, //0x0000cc80 .quad -6941508010590729807 + 0xad, 0xe9, 0x54, 0x8c, 0x61, 0x91, 0xb1, 0x77, //0x0000cc88 .quad 8624834609543440813 + 0x1d, 0x8c, 0x03, 0x75, 0x0d, 0x83, 0x95, 0xc7, //0x0000cc90 .quad -4065198994811024355 + 0x18, 0x24, 0x6a, 0xef, 0xb9, 0xf5, 0x9d, 0xd5, //0x0000cc98 .quad -3054014793352862696 + 0x25, 0x6f, 0x44, 0xd2, 0xd0, 0xe3, 0x7a, 0xf9, //0x0000cca0 .quad -469812725086392539 + 0x1e, 0xad, 0x44, 0x6b, 0x28, 0x73, 0x05, 0x4b, //0x0000cca8 .quad 5405853545163697438 + 0x77, 0xc5, 0x6a, 0x83, 0x62, 0xce, 0xec, 0x9b, //0x0000ccb0 .quad -7211161980820077193 + 0x33, 0xec, 0x0a, 0x43, 0xf9, 0x67, 0xe3, 0x4e, //0x0000ccb8 .quad 5684501474941004851 + 0xd5, 0x76, 0x45, 0x24, 0xfb, 0x01, 0xe8, 0xc2, //0x0000ccc0 .quad -4402266457597708587 + 0x40, 0xa7, 0xcd, 0x93, 0xf7, 0x41, 0x9c, 0x22, //0x0000ccc8 .quad 2493940825248868160 + 0x8a, 0xd4, 0x56, 0xed, 0x79, 0x02, 0xa2, 0xf3, //0x0000ccd0 .quad -891147053569747830 + 0x10, 0x11, 0xc1, 0x78, 0x75, 0x52, 0x43, 0x6b, //0x0000ccd8 .quad 7729112049988473104 + 0xd6, 0x44, 0x56, 0x34, 0x8c, 0x41, 0x45, 0x98, //0x0000cce0 .quad -7474495936122174250 + 0xaa, 0xaa, 0x78, 0x6b, 0x89, 0x13, 0x0a, 0x83, //0x0000cce8 .quad -9004363024039368022 + 0x0c, 0xd6, 0x6b, 0x41, 0xef, 0x91, 0x56, 0xbe, //0x0000ccf0 .quad -4731433901725329908 + 0x54, 0xd5, 0x56, 0xc6, 0x6b, 0x98, 0xcc, 0x23, //0x0000ccf8 .quad 2579604275232953684 + 0x8f, 0xcb, 0xc6, 0x11, 0x6b, 0x36, 0xec, 0xed, //0x0000cd00 .quad -1302606358729274481 + 0xa9, 0x8a, 0xec, 0xb7, 0x86, 0xbe, 0xbf, 0x2c, //0x0000cd08 .quad 3224505344041192105 + 0x39, 0x3f, 0x1c, 0xeb, 0x02, 0xa2, 0xb3, 0x94, //0x0000cd10 .quad -7731658001846878407 + 0xaa, 0xd6, 0xf3, 0x32, 0x14, 0xd7, 0xf7, 0x7b, //0x0000cd18 .quad 8932844867666826922 + 0x07, 0x4f, 0xe3, 0xa5, 0x83, 0x8a, 0xe0, 0xb9, //0x0000cd20 .quad -5052886483881210105 + 0x54, 0xcc, 0xb0, 0x3f, 0xd9, 0xcc, 0xf5, 0xda, //0x0000cd28 .quad -2669001970698630060 + 0xc9, 0x22, 0x5c, 0x8f, 0x24, 0xad, 0x58, 0xe8, //0x0000cd30 .quad -1704422086424124727 + 0x69, 0xff, 0x9c, 0x8f, 0x0f, 0x40, 0xb3, 0xd1, //0x0000cd38 .quad -3336252463373287575 + 0xbe, 0x95, 0x99, 0xd9, 0x36, 0x6c, 0x37, 0x91, //0x0000cd40 .quad -7982792831656159810 + 0xa2, 0x1f, 0xc2, 0xb9, 0x09, 0x08, 0x10, 0x23, //0x0000cd48 .quad 2526528228819083170 + 0x2d, 0xfb, 0xff, 0x8f, 0x44, 0x47, 0x85, 0xb5, //0x0000cd50 .quad -5366805021142811859 + 0x8b, 0xa7, 0x32, 0x28, 0x0c, 0x0a, 0xd4, 0xab, //0x0000cd58 .quad -6065211750830921845 + 0xf9, 0xf9, 0xff, 0xb3, 0x15, 0x99, 0xe6, 0xe2, //0x0000cd60 .quad -2096820258001126919 + 0x6d, 0x51, 0x3f, 0x32, 0x8f, 0x0c, 0xc9, 0x16, //0x0000cd68 .quad 1641857348316123501 + 0x3b, 0xfc, 0x7f, 0x90, 0xad, 0x1f, 0xd0, 0x8d, //0x0000cd70 .quad -8228041688891786181 + 0xe4, 0x92, 0x67, 0x7f, 0xd9, 0xa7, 0x3d, 0xae, //0x0000cd78 .quad -5891368184943504668 + 0x4a, 0xfb, 0x9f, 0xf4, 0x98, 0x27, 0x44, 0xb1, //0x0000cd80 .quad -5673366092687344822 + 0x9d, 0x77, 0x41, 0xdf, 0xcf, 0x11, 0xcd, 0x99, //0x0000cd88 .quad -7364210231179380835 + 0x1d, 0xfa, 0xc7, 0x31, 0x7f, 0x31, 0x95, 0xdd, //0x0000cd90 .quad -2480021597431793123 + 0x84, 0xd5, 0x11, 0xd7, 0x43, 0x56, 0x40, 0x40, //0x0000cd98 .quad 4629795266307937668 + 0x52, 0xfc, 0x1c, 0x7f, 0xef, 0x3e, 0x7d, 0x8a, //0x0000cda0 .quad -8467542526035952558 + 0x73, 0x25, 0x6b, 0x66, 0xea, 0x35, 0x28, 0x48, //0x0000cda8 .quad 5199465050656154995 + 0x66, 0x3b, 0xe4, 0x5e, 0xab, 0x8e, 0x1c, 0xad, //0x0000cdb0 .quad -5972742139117552794 + 0xd0, 0xee, 0x05, 0x00, 0x65, 0x43, 0x32, 0xda, //0x0000cdb8 .quad -2724040723534582064 + 0x40, 0x4a, 0x9d, 0x36, 0x56, 0xb2, 0x63, 0xd8, //0x0000cdc0 .quad -2854241655469553088 + 0x83, 0x6a, 0x07, 0x40, 0x3e, 0xd4, 0xbe, 0x90, //0x0000cdc8 .quad -8016736922845615485 + 0x68, 0x4e, 0x22, 0xe2, 0x75, 0x4f, 0x3e, 0x87, //0x0000cdd0 .quad -8701430062309552536 + 0x92, 0xa2, 0x04, 0xe8, 0xa6, 0x44, 0x77, 0x5a, //0x0000cdd8 .quad 6518754469289960082 + 0x02, 0xe2, 0xaa, 0x5a, 0x53, 0xe3, 0x0d, 0xa9, //0x0000cde0 .quad -6265101559459552766 + 0x37, 0xcb, 0x05, 0xa2, 0xd0, 0x15, 0x15, 0x71, //0x0000cde8 .quad 8148443086612450103 + 0x83, 0x9a, 0x55, 0x31, 0x28, 0x5c, 0x51, 0xd3, //0x0000cdf0 .quad -3219690930897053053 + 0x04, 0x3e, 0x87, 0xca, 0x44, 0x5b, 0x5a, 0x0d, //0x0000cdf8 .quad 962181821410786820 + 0x91, 0x80, 0xd5, 0x1e, 0x99, 0xd9, 0x12, 0x84, //0x0000ce00 .quad -8929835859451740015 + 0xc3, 0x86, 0x94, 0xfe, 0x0a, 0x79, 0x58, 0xe8, //0x0000ce08 .quad -1704479370831952189 + 0xb6, 0xe0, 0x8a, 0x66, 0xff, 0x8f, 0x17, 0xa5, //0x0000ce10 .quad -6550608805887287114 + 0x73, 0xa8, 0x39, 0xbe, 0x4d, 0x97, 0x6e, 0x62, //0x0000ce18 .quad 7092772823314835571 + 0xe3, 0x98, 0x2d, 0x40, 0xff, 0x73, 0x5d, 0xce, //0x0000ce20 .quad -3576574988931720989 + 0x90, 0x12, 0xc8, 0x2d, 0x21, 0x3d, 0x0a, 0xfb, //0x0000ce28 .quad -357406007711231344 + 0x8e, 0x7f, 0x1c, 0x88, 0x7f, 0x68, 0xfa, 0x80, //0x0000ce30 .quad -9152888395723407474 + 0x9a, 0x0b, 0x9d, 0xbc, 0x34, 0x66, 0xe6, 0x7c, //0x0000ce38 .quad 8999993282035256218 + 0x72, 0x9f, 0x23, 0x6a, 0x9f, 0x02, 0x39, 0xa1, //0x0000ce40 .quad -6829424476226871438 + 0x81, 0x4e, 0xc4, 0xeb, 0xc1, 0xff, 0x1f, 0x1c, //0x0000ce48 .quad 2026619565689294465 + 0x4e, 0x87, 0xac, 0x44, 0x47, 0x43, 0x87, 0xc9, //0x0000ce50 .quad -3925094576856201394 + 0x21, 0x62, 0xb5, 0x66, 0xb2, 0xff, 0x27, 0xa3, //0x0000ce58 .quad -6690097579743157727 + 0x22, 0xa9, 0xd7, 0x15, 0x19, 0x14, 0xe9, 0xfb, //0x0000ce60 .quad -294682202642863838 + 0xa9, 0xba, 0x62, 0x00, 0x9f, 0xff, 0xf1, 0x4b, //0x0000ce68 .quad 5472436080603216553 + 0xb5, 0xc9, 0xa6, 0xad, 0x8f, 0xac, 0x71, 0x9d, //0x0000ce70 .quad -7101705404292871755 + 0xaa, 0xb4, 0x3d, 0x60, 0xc3, 0x3f, 0x77, 0x6f, //0x0000ce78 .quad 8031958568804398250 + 0x22, 0x7c, 0x10, 0x99, 0xb3, 0x17, 0xce, 0xc4, //0x0000ce80 .quad -4265445736938701790 + 0xd4, 0x21, 0x4d, 0x38, 0xb4, 0x0f, 0x55, 0xcb, //0x0000ce88 .quad -3795109844276665900 + 0x2b, 0x9b, 0x54, 0x7f, 0xa0, 0x9d, 0x01, 0xf6, //0x0000ce90 .quad -720121152745989333 + 0x49, 0x6a, 0x60, 0x46, 0xa1, 0x53, 0x2a, 0x7e, //0x0000ce98 .quad 9091170749936331337 + 0xfb, 0xe0, 0x94, 0x4f, 0x84, 0x02, 0xc1, 0x99, //0x0000cea0 .quad -7367604748107325189 + 0x6e, 0x42, 0xfc, 0xcb, 0x44, 0x74, 0xda, 0x2e, //0x0000cea8 .quad 3376138709496513134 + 0x39, 0x19, 0x7a, 0x63, 0x25, 0x43, 0x31, 0xc0, //0x0000ceb0 .quad -4597819916706768583 + 0x09, 0x53, 0xfb, 0xfe, 0x55, 0x11, 0x91, 0xfa, //0x0000ceb8 .quad -391512631556746487 + 0x88, 0x9f, 0x58, 0xbc, 0xee, 0x93, 0x3d, 0xf0, //0x0000cec0 .quad -1135588877456072824 + 0xcb, 0x27, 0xba, 0x7e, 0xab, 0x55, 0x35, 0x79, //0x0000cec8 .quad 8733981247408842699 + 0xb5, 0x63, 0xb7, 0x35, 0x75, 0x7c, 0x26, 0x96, //0x0000ced0 .quad -7627272076051127371 + 0xdf, 0x58, 0x34, 0x2f, 0x8b, 0x55, 0xc1, 0x4b, //0x0000ced8 .quad 5458738279630526687 + 0xa2, 0x3c, 0x25, 0x83, 0x92, 0x1b, 0xb0, 0xbb, //0x0000cee0 .quad -4922404076636521310 + 0x17, 0x6f, 0x01, 0xfb, 0xed, 0xaa, 0xb1, 0x9e, //0x0000cee8 .quad -7011635205744005353 + 0xcb, 0x8b, 0xee, 0x23, 0x77, 0x22, 0x9c, 0xea, //0x0000cef0 .quad -1541319077368263733 + 0xdd, 0xca, 0xc1, 0x79, 0xa9, 0x15, 0x5e, 0x46, //0x0000cef8 .quad 5070514048102157021 + 0x5f, 0x17, 0x75, 0x76, 0x8a, 0x95, 0xa1, 0x92, //0x0000cf00 .quad -7880853450996246689 + 0xca, 0x1e, 0x19, 0xec, 0x89, 0xcd, 0xfa, 0x0b, //0x0000cf08 .quad 863228270850154186 + 0x36, 0x5d, 0x12, 0x14, 0xed, 0xfa, 0x49, 0xb7, //0x0000cf10 .quad -5239380795317920458 + 0x7c, 0x66, 0x1f, 0x67, 0xec, 0x80, 0xf9, 0xce, //0x0000cf18 .quad -3532650679864695172 + 0x84, 0xf4, 0x16, 0x59, 0xa8, 0x79, 0x1c, 0xe5, //0x0000cf20 .quad -1937539975720012668 + 0x1b, 0x40, 0xe7, 0x80, 0x27, 0xe1, 0xb7, 0x82, //0x0000cf28 .quad -9027499368258256869 + 0xd2, 0x58, 0xae, 0x37, 0x09, 0xcc, 0x31, 0x8f, //0x0000cf30 .quad -8128491512466089774 + 0x11, 0x88, 0x90, 0xb0, 0xb8, 0xec, 0xb2, 0xd1, //0x0000cf38 .quad -3336344095947716591 + 0x07, 0xef, 0x99, 0x85, 0x0b, 0x3f, 0xfe, 0xb2, //0x0000cf40 .quad -5548928372155224313 + 0x16, 0xaa, 0xb4, 0xdc, 0xe6, 0xa7, 0x1f, 0x86, //0x0000cf48 .quad -8782116138362033642 + 0xc9, 0x6a, 0x00, 0x67, 0xce, 0xce, 0xbd, 0xdf, //0x0000cf50 .quad -2324474446766642487 + 0x9b, 0xd4, 0xe1, 0x93, 0xe0, 0x91, 0xa7, 0x67, //0x0000cf58 .quad 7469098900757009563 + 0xbd, 0x42, 0x60, 0x00, 0x41, 0xa1, 0xd6, 0x8b, //0x0000cf60 .quad -8370325556870233411 + 0xe1, 0x24, 0x6d, 0x5c, 0x2c, 0xbb, 0xc8, 0xe0, //0x0000cf68 .quad -2249342214667950879 + 0x6d, 0x53, 0x78, 0x40, 0x91, 0x49, 0xcc, 0xae, //0x0000cf70 .quad -5851220927660403859 + 0x19, 0x6e, 0x88, 0x73, 0xf7, 0xe9, 0xfa, 0x58, //0x0000cf78 .quad 6411694268519837209 + 0x48, 0x68, 0x96, 0x90, 0xf5, 0x5b, 0x7f, 0xda, //0x0000cf80 .quad -2702340141148116920 + 0x9f, 0x89, 0x6a, 0x50, 0x75, 0xa4, 0x39, 0xaf, //0x0000cf88 .quad -5820440219632367201 + 0x2d, 0x01, 0x5e, 0x7a, 0x79, 0x99, 0x8f, 0x88, //0x0000cf90 .quad -8606491615858654931 + 0x04, 0x96, 0x42, 0x52, 0xc9, 0x06, 0x84, 0x6d, //0x0000cf98 .quad 7891439908798240260 + 0x78, 0x81, 0xf5, 0xd8, 0xd7, 0x7f, 0xb3, 0xaa, //0x0000cfa0 .quad -6146428501395930760 + 0x84, 0x3b, 0xd3, 0xa6, 0x7b, 0x08, 0xe5, 0xc8, //0x0000cfa8 .quad -3970758169284363388 + 0xd6, 0xe1, 0x32, 0xcf, 0xcd, 0x5f, 0x60, 0xd5, //0x0000cfb0 .quad -3071349608317525546 + 0x65, 0x0a, 0x88, 0x90, 0x9a, 0x4a, 0x1e, 0xfb, //0x0000cfb8 .quad -351761693178066331 + 0x26, 0xcd, 0x7f, 0xa1, 0xe0, 0x3b, 0x5c, 0x85, //0x0000cfc0 .quad -8837122532839535322 + 0x80, 0x06, 0x55, 0x9a, 0xa0, 0xee, 0xf2, 0x5c, //0x0000cfc8 .quad 6697677969404790400 + 0x6f, 0xc0, 0xdf, 0xc9, 0xd8, 0x4a, 0xb3, 0xa6, //0x0000cfd0 .quad -6434717147622031249 + 0x1f, 0x48, 0xea, 0xc0, 0x48, 0xaa, 0x2f, 0xf4, //0x0000cfd8 .quad -851274575098787809 + 0x8b, 0xb0, 0x57, 0xfc, 0x8e, 0x1d, 0x60, 0xd0, //0x0000cfe0 .quad -3431710416100151157 + 0x27, 0xda, 0x24, 0xf1, 0xda, 0x94, 0x3b, 0xf1, //0x0000cfe8 .quad -1064093218873484761 + 0x57, 0xce, 0xb6, 0x5d, 0x79, 0x12, 0x3c, 0x82, //0x0000cff0 .quad -9062348037703676329 + 0x59, 0x08, 0xb7, 0xd6, 0x08, 0x3d, 0xc5, 0x76, //0x0000cff8 .quad 8558313775058847833 + 0xed, 0x81, 0x24, 0xb5, 0x17, 0x17, 0xcb, 0xa2, //0x0000d000 .quad -6716249028702207507 + 0x6f, 0xca, 0x64, 0x0c, 0x4b, 0x8c, 0x76, 0x54, //0x0000d008 .quad 6086206200396171887 + 0x68, 0xa2, 0x6d, 0xa2, 0xdd, 0xdc, 0x7d, 0xcb, //0x0000d010 .quad -3783625267450371480 + 0x0a, 0xfd, 0x7d, 0xcf, 0x5d, 0x2f, 0x94, 0xa9, //0x0000d018 .quad -6227300304786948854 + 0x02, 0x0b, 0x09, 0x0b, 0x15, 0x54, 0x5d, 0xfe, //0x0000d020 .quad -117845565885576446 + 0x4d, 0x7c, 0x5d, 0x43, 0x35, 0x3b, 0xf9, 0xd3, //0x0000d028 .quad -3172439362556298163 + 0xe1, 0xa6, 0xe5, 0x26, 0x8d, 0x54, 0xfa, 0x9e, //0x0000d030 .quad -6991182506319567135 + 0xb0, 0x6d, 0x1a, 0x4a, 0x01, 0xc5, 0x7b, 0xc4, //0x0000d038 .quad -4288617610811380304 + 0x9a, 0x10, 0x9f, 0x70, 0xb0, 0xe9, 0xb8, 0xc6, //0x0000d040 .quad -4127292114472071014 + 0x1c, 0x09, 0xa1, 0x9c, 0x41, 0xb6, 0x9a, 0x35, //0x0000d048 .quad 3862600023340550428 + 0xc0, 0xd4, 0xc6, 0x8c, 0x1c, 0x24, 0x67, 0xf8, //0x0000d050 .quad -547429124662700864 + 0x63, 0x4b, 0xc9, 0x03, 0xd2, 0x63, 0x01, 0xc3, //0x0000d058 .quad -4395122007679087773 + 0xf8, 0x44, 0xfc, 0xd7, 0x91, 0x76, 0x40, 0x9b, //0x0000d060 .quad -7259672230555269896 + 0x1e, 0xcf, 0x5d, 0x42, 0x63, 0xde, 0xe0, 0x79, //0x0000d068 .quad 8782263791269039902 + 0x36, 0x56, 0xfb, 0x4d, 0x36, 0x94, 0x10, 0xc2, //0x0000d070 .quad -4462904269766699466 + 0xe5, 0x42, 0xf5, 0x12, 0xfc, 0x15, 0x59, 0x98, //0x0000d078 .quad -7468914334623251739 + 0xc4, 0x2b, 0x7a, 0xe1, 0x43, 0xb9, 0x94, 0xf2, //0x0000d080 .quad -966944318780986428 + 0x9e, 0x93, 0xb2, 0x17, 0x7b, 0x5b, 0x6f, 0x3e, //0x0000d088 .quad 4498915137003099038 + 0x5a, 0x5b, 0xec, 0x6c, 0xca, 0xf3, 0x9c, 0x97, //0x0000d090 .quad -7521869226879198374 + 0x43, 0x9c, 0xcf, 0xee, 0x2c, 0x99, 0x05, 0xa7, //0x0000d098 .quad -6411550076227838909 + 0x31, 0x72, 0x27, 0x08, 0xbd, 0x30, 0x84, 0xbd, //0x0000d0a0 .quad -4790650515171610063 + 0x54, 0x83, 0x83, 0x2a, 0x78, 0xff, 0xc6, 0x50, //0x0000d0a8 .quad 5820620459997365076 + 0xbd, 0x4e, 0x31, 0x4a, 0xec, 0x3c, 0xe5, 0xec, //0x0000d0b0 .quad -1376627125537124675 + 0x29, 0x64, 0x24, 0x35, 0x56, 0xbf, 0xf8, 0xa4, //0x0000d0b8 .quad -6559282480285457367 + 0x36, 0xd1, 0x5e, 0xae, 0x13, 0x46, 0x0f, 0x94, //0x0000d0c0 .quad -7777920981101784778 + 0x9a, 0xbe, 0x36, 0xe1, 0x95, 0x77, 0x1b, 0x87, //0x0000d0c8 .quad -8711237568605798758 + 0x84, 0x85, 0xf6, 0x99, 0x98, 0x17, 0x13, 0xb9, //0x0000d0d0 .quad -5110715207949843068 + 0x40, 0x6e, 0x84, 0x59, 0x7b, 0x55, 0xe2, 0x28, //0x0000d0d8 .quad 2946011094524915264 + 0xe5, 0x26, 0x74, 0xc0, 0x7e, 0xdd, 0x57, 0xe7, //0x0000d0e0 .quad -1776707991509915931 + 0xd0, 0x89, 0xe5, 0x2f, 0xda, 0xea, 0x1a, 0x33, //0x0000d0e8 .quad 3682513868156144080 + 0x4f, 0x98, 0x48, 0x38, 0x6f, 0xea, 0x96, 0x90, //0x0000d0f0 .quad -8027971522334779313 + 0x22, 0x76, 0xef, 0x5d, 0xc8, 0xd2, 0xf0, 0x3f, //0x0000d0f8 .quad 4607414176811284002 + 0x63, 0xbe, 0x5a, 0x06, 0x0b, 0xa5, 0xbc, 0xb4, //0x0000d100 .quad -5423278384491086237 + 0xaa, 0x53, 0x6b, 0x75, 0x7a, 0x07, 0xed, 0x0f, //0x0000d108 .quad 1147581702586717098 + 0xfb, 0x6d, 0xf1, 0xc7, 0x4d, 0xce, 0xeb, 0xe1, //0x0000d110 .quad -2167411962186469893 + 0x95, 0x28, 0xc6, 0x12, 0x59, 0x49, 0xe8, 0xd3, //0x0000d118 .quad -3177208890193991531 + 0xbd, 0xe4, 0xf6, 0x9c, 0xf0, 0x60, 0x33, 0x8d, //0x0000d120 .quad -8272161504007625539 + 0x5d, 0xd9, 0xbb, 0xab, 0xd7, 0x2d, 0x71, 0x64, //0x0000d128 .quad 7237616480483531101 + 0xec, 0x9d, 0x34, 0xc4, 0x2c, 0x39, 0x80, 0xb0, //0x0000d130 .quad -5728515861582144020 + 0xb4, 0xcf, 0xaa, 0x96, 0x4d, 0x79, 0x8d, 0xbd, //0x0000d138 .quad -4788037454677749836 + 0x67, 0xc5, 0x41, 0xf5, 0x77, 0x47, 0xa0, 0xdc, //0x0000d140 .quad -2548958808550292121 + 0xa1, 0x83, 0x55, 0xfc, 0xa0, 0xd7, 0xf0, 0xec, //0x0000d148 .quad -1373360799919799391 + 0x60, 0x1b, 0x49, 0xf9, 0xaa, 0x2c, 0xe4, 0x89, //0x0000d150 .quad -8510628282985014432 + 0x45, 0x72, 0xb5, 0x9d, 0xc4, 0x86, 0x16, 0xf4, //0x0000d158 .quad -858350499949874619 + 0x39, 0x62, 0x9b, 0xb7, 0xd5, 0x37, 0x5d, 0xac, //0x0000d160 .quad -6026599335303880135 + 0xd6, 0xce, 0x22, 0xc5, 0x75, 0x28, 0x1c, 0x31, //0x0000d168 .quad 3538747893490044630 + 0xc7, 0x3a, 0x82, 0x25, 0xcb, 0x85, 0x74, 0xd7, //0x0000d170 .quad -2921563150702462265 + 0x8c, 0x82, 0x6b, 0x36, 0x93, 0x32, 0x63, 0x7d, //0x0000d178 .quad 9035120885289943692 + 0xbc, 0x64, 0x71, 0xf7, 0x9e, 0xd3, 0xa8, 0x86, //0x0000d180 .quad -8743505996830120772 + 0x98, 0x31, 0x03, 0x02, 0x9c, 0xff, 0x5d, 0xae, //0x0000d188 .quad -5882264492762254952 + 0xeb, 0xbd, 0x4d, 0xb5, 0x86, 0x08, 0x53, 0xa8, //0x0000d190 .quad -6317696477610263061 + 0xfd, 0xfd, 0x83, 0x02, 0x83, 0x7f, 0xf5, 0xd9, //0x0000d198 .quad -2741144597525430787 + 0x66, 0x2d, 0xa1, 0x62, 0xa8, 0xca, 0x67, 0xd2, //0x0000d1a0 .quad -3285434578585440922 + 0x7c, 0xfd, 0x24, 0xc3, 0x63, 0xdf, 0x72, 0xd0, //0x0000d1a8 .quad -3426430746906788484 + 0x60, 0xbc, 0xa4, 0x3d, 0xa9, 0xde, 0x80, 0x83, //0x0000d1b0 .quad -8970925639256982432 + 0x6e, 0x1e, 0xf7, 0x59, 0x9e, 0xcb, 0x47, 0x42, //0x0000d1b8 .quad 4776009810824339054 + 0x78, 0xeb, 0x0d, 0x8d, 0x53, 0x16, 0x61, 0xa4, //0x0000d1c0 .quad -6601971030643840136 + 0x09, 0xe6, 0x74, 0xf0, 0x85, 0xbe, 0xd9, 0x52, //0x0000d1c8 .quad 5970012263530423817 + 0x56, 0x66, 0x51, 0x70, 0xe8, 0x5b, 0x79, 0xcd, //0x0000d1d0 .quad -3640777769877412266 + 0x8c, 0x1f, 0x92, 0x6c, 0x27, 0x2e, 0x90, 0x67, //0x0000d1d8 .quad 7462515329413029772 + 0xf6, 0xdf, 0x32, 0x46, 0x71, 0xd9, 0x6b, 0x80, //0x0000d1e0 .quad -9193015133814464522 + 0xb7, 0x53, 0xdb, 0xa3, 0xd8, 0x1c, 0xba, 0x00, //0x0000d1e8 .quad 52386062455755703 + 0xf3, 0x97, 0xbf, 0x97, 0xcd, 0xcf, 0x86, 0xa0, //0x0000d1f0 .quad -6879582898840692749 + 0xa5, 0x28, 0xd2, 0xcc, 0x0e, 0xa4, 0xe8, 0x80, //0x0000d1f8 .quad -9157889458785081179 + 0xf0, 0x7d, 0xaf, 0xfd, 0xc0, 0x83, 0xa8, 0xc8, //0x0000d200 .quad -3987792605123478032 + 0xce, 0xb2, 0x06, 0x80, 0x12, 0xcd, 0x22, 0x61, //0x0000d208 .quad 6999382250228200142 + 0x6c, 0x5d, 0x1b, 0x3d, 0xb1, 0xa4, 0xd2, 0xfa, //0x0000d210 .quad -373054737976959636 + 0x82, 0x5f, 0x08, 0x20, 0x57, 0x80, 0x6b, 0x79, //0x0000d218 .quad 8749227812785250178 + 0x63, 0x1a, 0x31, 0xc6, 0xee, 0xa6, 0xc3, 0x9c, //0x0000d220 .quad -7150688238876681629 + 0xb1, 0x3b, 0x05, 0x74, 0x36, 0x30, 0xe3, 0xcb, //0x0000d228 .quad -3755104653863994447 + 0xfc, 0x60, 0xbd, 0x77, 0xaa, 0x90, 0xf4, 0xc3, //0x0000d230 .quad -4326674280168464132 + 0x9d, 0x8a, 0x06, 0x11, 0x44, 0xfc, 0xdb, 0xbe, //0x0000d238 .quad -4693880817329993059 + 0x3b, 0xb9, 0xac, 0x15, 0xd5, 0xb4, 0xf1, 0xf4, //0x0000d240 .quad -796656831783192261 + 0x45, 0x2d, 0x48, 0x15, 0x55, 0xfb, 0x92, 0xee, //0x0000d248 .quad -1255665003235103419 + 0xc5, 0xf3, 0x8b, 0x2d, 0x05, 0x11, 0x17, 0x99, //0x0000d250 .quad -7415439547505577019 + 0x4b, 0x1c, 0x4d, 0x2d, 0x15, 0xdd, 0x1b, 0x75, //0x0000d258 .quad 8438581409832836171 + 0xb6, 0xf0, 0xee, 0x78, 0x46, 0xd5, 0x5c, 0xbf, //0x0000d260 .quad -4657613415954583370 + 0x5e, 0x63, 0xa0, 0x78, 0x5a, 0xd4, 0x62, 0xd2, //0x0000d268 .quad -3286831292991118498 + 0xe4, 0xac, 0x2a, 0x17, 0x98, 0x0a, 0x34, 0xef, //0x0000d270 .quad -1210330751515841308 + 0x35, 0x7c, 0xc8, 0x16, 0x71, 0x89, 0xfb, 0x86, //0x0000d278 .quad -8720225134666286027 + 0x0e, 0xac, 0x7a, 0x0e, 0x9f, 0x86, 0x80, 0x95, //0x0000d280 .quad -7673985747338482674 + 0xa1, 0x4d, 0x3d, 0xae, 0xe6, 0x35, 0x5d, 0xd4, //0x0000d288 .quad -3144297699952734815 + 0x12, 0x57, 0x19, 0xd2, 0x46, 0xa8, 0xe0, 0xba, //0x0000d290 .quad -4980796165745715438 + 0x0a, 0xa1, 0xcc, 0x59, 0x60, 0x83, 0x74, 0x89, //0x0000d298 .quad -8542058143368306422 + 0xd7, 0xac, 0x9f, 0x86, 0x58, 0xd2, 0x98, 0xe9, //0x0000d2a0 .quad -1614309188754756393 + 0x4c, 0xc9, 0x3f, 0x70, 0x38, 0xa4, 0xd1, 0x2b, //0x0000d2a8 .quad 3157485376071780684 + 0x06, 0xcc, 0x23, 0x54, 0x77, 0x83, 0xff, 0x91, //0x0000d2b0 .quad -7926472270612804602 + 0xd0, 0xdd, 0x27, 0x46, 0xa3, 0x06, 0x63, 0x7b, //0x0000d2b8 .quad 8890957387685944784 + 0x08, 0xbf, 0x2c, 0x29, 0x55, 0x64, 0x7f, 0xb6, //0x0000d2c0 .quad -5296404319838617848 + 0x43, 0xd5, 0xb1, 0x17, 0x4c, 0xc8, 0x3b, 0x1a, //0x0000d2c8 .quad 1890324697752655171 + 0xca, 0xee, 0x77, 0x73, 0x6a, 0x3d, 0x1f, 0xe4, //0x0000d2d0 .quad -2008819381370884406 + 0x94, 0x4a, 0x9e, 0x1d, 0x5f, 0xba, 0xca, 0x20, //0x0000d2d8 .quad 2362905872190818964 + 0x3e, 0xf5, 0x2a, 0x88, 0x62, 0x86, 0x93, 0x8e, //0x0000d2e0 .quad -8173041140997884610 + 0x9d, 0xee, 0x82, 0x72, 0x7b, 0xb4, 0x7e, 0x54, //0x0000d2e8 .quad 6088502188546649757 + 0x8d, 0xb2, 0x35, 0x2a, 0xfb, 0x67, 0x38, 0xb2, //0x0000d2f0 .quad -5604615407819967859 + 0x44, 0xaa, 0x23, 0x4f, 0x9a, 0x61, 0x9e, 0xe9, //0x0000d2f8 .quad -1612744301171463612 + 0x31, 0x1f, 0xc3, 0xf4, 0xf9, 0x81, 0xc6, 0xde, //0x0000d300 .quad -2394083241347571919 + 0xd5, 0x94, 0xec, 0xe2, 0x00, 0xfa, 0x05, 0x64, //0x0000d308 .quad 7207441660390446293 + 0x7e, 0xf3, 0xf9, 0x38, 0x3c, 0x11, 0x3c, 0x8b, //0x0000d310 .quad -8413831053483314306 + 0x05, 0xdd, 0xd3, 0x8d, 0x40, 0xbc, 0x83, 0xde, //0x0000d318 .quad -2412877989897052923 + 0x5e, 0x70, 0x38, 0x47, 0x8b, 0x15, 0x0b, 0xae, //0x0000d320 .quad -5905602798426754978 + 0x46, 0xd4, 0x48, 0xb1, 0x50, 0xab, 0x24, 0x96, //0x0000d328 .quad -7627783505798704058 + 0x76, 0x8c, 0x06, 0x19, 0xee, 0xda, 0x8d, 0xd9, //0x0000d330 .quad -2770317479606055818 + 0x58, 0x09, 0x9b, 0xdd, 0x24, 0xd6, 0xad, 0x3b, //0x0000d338 .quad 4300328673033783640 + 0xc9, 0x17, 0xa4, 0xcf, 0xd4, 0xa8, 0xf8, 0x87, //0x0000d340 .quad -8648977452394866743 + 0xd7, 0xe5, 0x80, 0x0a, 0xd7, 0xa5, 0x4c, 0xe5, //0x0000d348 .quad -1923980597781273129 + 0xbc, 0x1d, 0x8d, 0x03, 0x0a, 0xd3, 0xf6, 0xa9, //0x0000d350 .quad -6199535797066195524 + 0x4d, 0x1f, 0x21, 0xcd, 0x4c, 0xcf, 0x9f, 0x5e, //0x0000d358 .quad 6818396289628184397 + 0x2b, 0x65, 0x70, 0x84, 0xcc, 0x87, 0x74, 0xd4, //0x0000d360 .quad -3137733727905356501 + 0x20, 0x67, 0x69, 0x00, 0x20, 0xc3, 0x47, 0x76, //0x0000d368 .quad 8522995362035230496 + 0x3b, 0x3f, 0xc6, 0xd2, 0xdf, 0xd4, 0xc8, 0x84, //0x0000d370 .quad -8878612607581929669 + 0x74, 0xe0, 0x41, 0x00, 0xf4, 0xd9, 0xec, 0x29, //0x0000d378 .quad 3021029092058325108 + 0x09, 0xcf, 0x77, 0xc7, 0x17, 0x0a, 0xfb, 0xa5, //0x0000d380 .quad -6486579741050024183 + 0x91, 0x58, 0x52, 0x00, 0x71, 0x10, 0x68, 0xf4, //0x0000d388 .quad -835399653354481519 + 0xcc, 0xc2, 0x55, 0xb9, 0x9d, 0xcc, 0x79, 0xcf, //0x0000d390 .quad -3496538657885142324 + 0xb5, 0xee, 0x66, 0x40, 0x8d, 0x14, 0x82, 0x71, //0x0000d398 .quad 8179122470161673909 + 0xbf, 0x99, 0xd5, 0x93, 0xe2, 0x1f, 0xac, 0x81, //0x0000d3a0 .quad -9102865688819295809 + 0x31, 0x55, 0x40, 0x48, 0xd8, 0x4c, 0xf1, 0xc6, //0x0000d3a8 .quad -4111420493003729615 + 0x2f, 0x00, 0xcb, 0x38, 0xdb, 0x27, 0x17, 0xa2, //0x0000d3b0 .quad -6766896092596731857 + 0x7d, 0x6a, 0x50, 0x5a, 0x0e, 0xa0, 0xad, 0xb8, //0x0000d3b8 .quad -5139275616254662019 + 0x3b, 0xc0, 0xfd, 0x06, 0xd2, 0xf1, 0x9c, 0xca, //0x0000d3c0 .quad -3846934097318526917 + 0x1d, 0x85, 0xe4, 0xf0, 0x11, 0x08, 0xd9, 0xa6, //0x0000d3c8 .quad -6424094520318327523 + 0x4a, 0x30, 0xbd, 0x88, 0x46, 0x2e, 0x44, 0xfd, //0x0000d3d0 .quad -196981603220770742 + 0x64, 0xa6, 0x1d, 0x6d, 0x16, 0x4a, 0x8f, 0x90, //0x0000d3d8 .quad -8030118150397909404 + 0x2e, 0x3e, 0x76, 0x15, 0xec, 0x9c, 0x4a, 0x9e, //0x0000d3e0 .quad -7040642529654063570 + 0xff, 0x87, 0x32, 0x04, 0x4e, 0x8e, 0x59, 0x9a, //0x0000d3e8 .quad -7324666853212387329 + 0xba, 0xcd, 0xd3, 0x1a, 0x27, 0x44, 0xdd, 0xc5, //0x0000d3f0 .quad -4189117143640191558 + 0xfe, 0x29, 0x3f, 0x85, 0xe1, 0xf1, 0xef, 0x40, //0x0000d3f8 .quad 4679224488766679550 + 0x28, 0xc1, 0x88, 0xe1, 0x30, 0x95, 0x54, 0xf7, //0x0000d400 .quad -624710411122851544 + 0x7d, 0xf4, 0x8e, 0xe6, 0x59, 0xee, 0x2b, 0xd1, //0x0000d408 .quad -3374341425896426371 + 0xb9, 0x78, 0xf5, 0x8c, 0x3e, 0xdd, 0x94, 0x9a, //0x0000d410 .quad -7307973034592864071 + 0xcf, 0x58, 0x19, 0x30, 0xf8, 0x74, 0xbb, 0x82, //0x0000d418 .quad -9026492418826348337 + 0xe7, 0xd6, 0x32, 0x30, 0x8e, 0x14, 0x3a, 0xc1, //0x0000d420 .quad -4523280274813692185 + 0x02, 0xaf, 0x1f, 0x3c, 0x36, 0x52, 0x6a, 0xe3, //0x0000d428 .quad -2059743486678159614 + 0xa1, 0x8c, 0x3f, 0xbc, 0xb1, 0x99, 0x88, 0xf1, //0x0000d430 .quad -1042414325089727327 + 0xc2, 0x9a, 0x27, 0xcb, 0xc3, 0xe6, 0x44, 0xdc, //0x0000d438 .quad -2574679358347699518 + 0xe5, 0xb7, 0xa7, 0x15, 0x0f, 0x60, 0xf5, 0x96, //0x0000d440 .quad -7569037980822161435 + 0xba, 0xc0, 0xf8, 0x5e, 0x3a, 0x10, 0xab, 0x29, //0x0000d448 .quad 3002511419460075706 + 0xde, 0xa5, 0x11, 0xdb, 0x12, 0xb8, 0xb2, 0xbc, //0x0000d450 .quad -4849611457600313890 + 0xe8, 0xf0, 0xb6, 0xf6, 0x48, 0xd4, 0x15, 0x74, //0x0000d458 .quad 8364825292752482536 + 0x56, 0x0f, 0xd6, 0x91, 0x17, 0x66, 0xdf, 0xeb, //0x0000d460 .quad -1450328303573004458 + 0x22, 0xad, 0x64, 0x34, 0x5b, 0x49, 0x1b, 0x11, //0x0000d468 .quad 1232659579085827362 + 0x95, 0xc9, 0x25, 0xbb, 0xce, 0x9f, 0x6b, 0x93, //0x0000d470 .quad -7823984217374209643 + 0x35, 0xec, 0xbe, 0x00, 0xd9, 0x0d, 0xb1, 0xca, //0x0000d478 .quad -3841273781498745803 + 0xfb, 0x3b, 0xef, 0x69, 0xc2, 0x87, 0x46, 0xb8, //0x0000d480 .quad -5168294253290374149 + 0x43, 0xa7, 0xee, 0x40, 0x4f, 0x51, 0x5d, 0x3d, //0x0000d488 .quad 4421779809981343555 + 0xfa, 0x0a, 0x6b, 0x04, 0xb3, 0x29, 0x58, 0xe6, //0x0000d490 .quad -1848681798185579782 + 0x13, 0x51, 0x2a, 0x11, 0xa3, 0xa5, 0xb4, 0x0c, //0x0000d498 .quad 915538744049291539 + 0xdc, 0xe6, 0xc2, 0xe2, 0x0f, 0x1a, 0xf7, 0x8f, //0x0000d4a0 .quad -8072955151507069220 + 0xac, 0x72, 0xba, 0xea, 0x85, 0xe7, 0xf0, 0x47, //0x0000d4a8 .quad 5183897733458195116 + 0x93, 0xa0, 0x73, 0xdb, 0x93, 0xe0, 0xf4, 0xb3, //0x0000d4b0 .quad -5479507920956448621 + 0x57, 0x0f, 0x69, 0x65, 0x67, 0x21, 0xed, 0x59, //0x0000d4b8 .quad 6479872166822743895 + 0xb8, 0x88, 0x50, 0xd2, 0xb8, 0x18, 0xf2, 0xe0, //0x0000d4c0 .quad -2237698882768172872 + 0x2d, 0x53, 0xc3, 0x3e, 0xc1, 0x69, 0x68, 0x30, //0x0000d4c8 .quad 3488154190101041965 + 0x73, 0x55, 0x72, 0x83, 0x73, 0x4f, 0x97, 0x8c, //0x0000d4d0 .quad -8316090829371189901 + 0xfc, 0x13, 0x3a, 0xc7, 0x18, 0x42, 0x41, 0x1e, //0x0000d4d8 .quad 2180096368813151228 + 0xcf, 0xea, 0x4e, 0x64, 0x50, 0x23, 0xbd, 0xaf, //0x0000d4e0 .quad -5783427518286599473 + 0xfb, 0x98, 0x08, 0xf9, 0x9e, 0x92, 0xd1, 0xe5, //0x0000d4e8 .quad -1886565557410948869 + 0x83, 0xa5, 0x62, 0x7d, 0x24, 0x6c, 0xac, 0xdb, //0x0000d4f0 .quad -2617598379430861437 + 0x3a, 0xbf, 0x4a, 0xb7, 0x46, 0xf7, 0x45, 0xdf, //0x0000d4f8 .quad -2358206946763686086 + 0x72, 0xa7, 0x5d, 0xce, 0x96, 0xc3, 0x4b, 0x89, //0x0000d500 .quad -8553528014785370254 + 0x84, 0xb7, 0x8e, 0x32, 0x8c, 0xba, 0x8b, 0x6b, //0x0000d508 .quad 7749492695127472004 + 0x4f, 0x11, 0xf5, 0x81, 0x7c, 0xb4, 0x9e, 0xab, //0x0000d510 .quad -6080224000054324913 + 0x65, 0x65, 0x32, 0x3f, 0x2f, 0xa9, 0x6e, 0x06, //0x0000d518 .quad 463493832054564197 + 0xa2, 0x55, 0x72, 0xa2, 0x9b, 0x61, 0x86, 0xd6, //0x0000d520 .quad -2988593981640518238 + 0xbe, 0xfe, 0xfe, 0x0e, 0x7b, 0x53, 0x0a, 0xc8, //0x0000d528 .quad -4032318728359182658 + 0x85, 0x75, 0x87, 0x45, 0x01, 0xfd, 0x13, 0x86, //0x0000d530 .quad -8785400266166405755 + 0x37, 0x5f, 0x5f, 0xe9, 0x2c, 0x74, 0x06, 0xbd, //0x0000d538 .quad -4826042214438183113 + 0xe7, 0x52, 0xe9, 0x96, 0x41, 0xfc, 0x98, 0xa7, //0x0000d540 .quad -6370064314280619289 + 0x05, 0x37, 0xb7, 0x23, 0x38, 0x11, 0x48, 0x2c, //0x0000d548 .quad 3190819268807046917 + 0xa0, 0xa7, 0xa3, 0xfc, 0x51, 0x3b, 0x7f, 0xd1, //0x0000d550 .quad -3350894374423386208 + 0xc6, 0x04, 0xa5, 0x2c, 0x86, 0x15, 0x5a, 0xf7, //0x0000d558 .quad -623161932418579258 + 0xc4, 0x48, 0xe6, 0x3d, 0x13, 0x85, 0xef, 0x82, //0x0000d560 .quad -9011838011655698236 + 0xfc, 0x22, 0xe7, 0xdb, 0x73, 0x4d, 0x98, 0x9a, //0x0000d568 .quad -7307005235402693892 + 0xf5, 0xda, 0x5f, 0x0d, 0x58, 0x66, 0xab, 0xa3, //0x0000d570 .quad -6653111496142234891 + 0xbb, 0xeb, 0xe0, 0xd2, 0xd0, 0x60, 0x3e, 0xc1, //0x0000d578 .quad -4522070525825979461 + 0xb3, 0xd1, 0xb7, 0x10, 0xee, 0x3f, 0x96, 0xcc, //0x0000d580 .quad -3704703351750405709 + 0xa9, 0x26, 0x99, 0x07, 0x05, 0xf9, 0x8d, 0x31, //0x0000d588 .quad 3570783879572301481 + 0x1f, 0xc6, 0xe5, 0x94, 0xe9, 0xcf, 0xbb, 0xff, //0x0000d590 .quad -19193171260619233 + 0x53, 0x70, 0x7f, 0x49, 0x46, 0x77, 0xf1, 0xfd, //0x0000d598 .quad -148206168962011053 + 0xd3, 0x9b, 0x0f, 0xfd, 0xf1, 0x61, 0xd5, 0x9f, //0x0000d5a0 .quad -6929524759678968877 + 0x34, 0xa6, 0xef, 0xed, 0x8b, 0xea, 0xb6, 0xfe, //0x0000d5a8 .quad -92628855601256908 + 0xc8, 0x82, 0x53, 0x7c, 0x6e, 0xba, 0xca, 0xc7, //0x0000d5b0 .quad -4050219931171323192 + 0xc1, 0x8f, 0x6b, 0xe9, 0x2e, 0xa5, 0x64, 0xfe, //0x0000d5b8 .quad -115786069501571135 + 0x7b, 0x63, 0x68, 0x1b, 0x0a, 0x69, 0xbd, 0xf9, //0x0000d5c0 .quad -451088895536766085 + 0xb1, 0x73, 0xc6, 0xa3, 0x7a, 0xce, 0xfd, 0x3d, //0x0000d5c8 .quad 4466953431550423985 + 0x2d, 0x3e, 0x21, 0x51, 0xa6, 0x61, 0x16, 0x9c, //0x0000d5d0 .quad -7199459587351560659 + 0x4f, 0x08, 0x5c, 0xa6, 0x0c, 0xa1, 0xbe, 0x06, //0x0000d5d8 .quad 486002885505321039 + 0xb8, 0x8d, 0x69, 0xe5, 0x0f, 0xfa, 0x1b, 0xc3, //0x0000d5e0 .quad -4387638465762062920 + 0x63, 0x0a, 0xf3, 0xcf, 0x4f, 0x49, 0x6e, 0x48, //0x0000d5e8 .quad 5219189625309039203 + 0x26, 0xf1, 0xc3, 0xde, 0x93, 0xf8, 0xe2, 0xf3, //0x0000d5f0 .quad -872862063775190746 + 0xfb, 0xcc, 0xef, 0xc3, 0xa3, 0xdb, 0x89, 0x5a, //0x0000d5f8 .quad 6523987031636299003 + 0xb7, 0x76, 0x3a, 0x6b, 0x5c, 0xdb, 0x6d, 0x98, //0x0000d600 .quad -7463067817500576073 + 0x1d, 0xe0, 0x75, 0x5a, 0x46, 0x29, 0x96, 0xf8, //0x0000d608 .quad -534194123654701027 + 0x65, 0x14, 0x09, 0x86, 0x33, 0x52, 0x89, 0xbe, //0x0000d610 .quad -4717148753448332187 + 0x24, 0x58, 0x13, 0xf1, 0x97, 0xb3, 0xbb, 0xf6, //0x0000d618 .quad -667742654568376284 + 0x7f, 0x59, 0x8b, 0x67, 0xc0, 0xa6, 0x2b, 0xee, //0x0000d620 .quad -1284749923383027329 + 0x2d, 0x2e, 0x58, 0xed, 0x7d, 0xa0, 0x6a, 0x74, //0x0000d628 .quad 8388693718644305453 + 0xef, 0x17, 0xb7, 0x40, 0x38, 0x48, 0xdb, 0x94, //0x0000d630 .quad -7720497729755473937 + 0xdd, 0x1c, 0x57, 0xb4, 0x4e, 0xa4, 0xc2, 0xa8, //0x0000d638 .quad -6286281471915778851 + 0xeb, 0xdd, 0xe4, 0x50, 0x46, 0x1a, 0x12, 0xba, //0x0000d640 .quad -5038936143766954517 + 0x14, 0xe4, 0x6c, 0x61, 0x62, 0x4d, 0xf3, 0x92, //0x0000d648 .quad -7857851839894723564 + 0x66, 0x15, 0x1e, 0xe5, 0xd7, 0xa0, 0x96, 0xe8, //0x0000d650 .quad -1686984161281305242 + 0x18, 0x1d, 0xc8, 0xf9, 0xba, 0x20, 0xb0, 0x77, //0x0000d658 .quad 8624429273841147160 + 0x60, 0xcd, 0x32, 0xef, 0x86, 0x24, 0x5e, 0x91, //0x0000d660 .quad -7971894128441897632 + 0x2f, 0x12, 0x1d, 0xdc, 0x74, 0x14, 0xce, 0x0a, //0x0000d668 .quad 778582277723329071 + 0xb8, 0x80, 0xff, 0xaa, 0xa8, 0xad, 0xb5, 0xb5, //0x0000d670 .quad -5353181642124984136 + 0xbb, 0x56, 0x24, 0x13, 0x92, 0x99, 0x81, 0x0d, //0x0000d678 .quad 973227847154161339 + 0xe6, 0x60, 0xbf, 0xd5, 0x12, 0x19, 0x23, 0xe3, //0x0000d680 .quad -2079791034228842266 + 0x6a, 0x6c, 0xed, 0x97, 0xf6, 0xff, 0xe1, 0x10, //0x0000d688 .quad 1216534808942701674 + 0x8f, 0x9c, 0x97, 0xc5, 0xab, 0xef, 0xf5, 0x8d, //0x0000d690 .quad -8217398424034108273 + 0xc2, 0x63, 0xf4, 0x1e, 0xfa, 0x3f, 0x8d, 0xca, //0x0000d698 .quad -3851351762838199358 + 0xb3, 0x83, 0xfd, 0xb6, 0x96, 0x6b, 0x73, 0xb1, //0x0000d6a0 .quad -5660062011615247437 + 0xb3, 0x7c, 0xb1, 0xa6, 0xf8, 0x8f, 0x30, 0xbd, //0x0000d6a8 .quad -4814189703547749197 + 0xa0, 0xe4, 0xbc, 0x64, 0x7c, 0x46, 0xd0, 0xdd, //0x0000d6b0 .quad -2463391496091671392 + 0xdf, 0xdb, 0x5d, 0xd0, 0xf6, 0xb3, 0x7c, 0xac, //0x0000d6b8 .quad -6017737129434686497 + 0xe4, 0x0e, 0xf6, 0xbe, 0x0d, 0x2c, 0xa2, 0x8a, //0x0000d6c0 .quad -8457148712698376476 + 0x6c, 0xa9, 0x3a, 0x42, 0x7a, 0xf0, 0xcd, 0x6b, //0x0000d6c8 .quad 7768129340171790700 + 0x9d, 0x92, 0xb3, 0x2e, 0x11, 0xb7, 0x4a, 0xad, //0x0000d6d0 .quad -5959749872445582691 + 0xc7, 0x53, 0xc9, 0xd2, 0x98, 0x6c, 0xc1, 0x86, //0x0000d6d8 .quad -8736582398494813241 + 0x44, 0x77, 0x60, 0x7a, 0xd5, 0x64, 0x9d, 0xd8, //0x0000d6e0 .quad -2838001322129590460 + 0xb8, 0xa8, 0x7b, 0x07, 0xbf, 0xc7, 0x71, 0xe8, //0x0000d6e8 .quad -1697355961263740744 + 0x8b, 0x4a, 0x7c, 0x6c, 0x05, 0x5f, 0x62, 0x87, //0x0000d6f0 .quad -8691279853972075893 + 0x73, 0x49, 0xad, 0x64, 0xd7, 0x1c, 0x47, 0x11, //0x0000d6f8 .quad 1244995533423855987 + 0x2d, 0x5d, 0x9b, 0xc7, 0xc6, 0xf6, 0x3a, 0xa9, //0x0000d700 .quad -6252413799037706963 + 0xd0, 0x9b, 0xd8, 0x3d, 0x0d, 0xe4, 0x98, 0xd5, //0x0000d708 .quad -3055441601647567920 + 0x79, 0x34, 0x82, 0x79, 0x78, 0xb4, 0x89, 0xd3, //0x0000d710 .quad -3203831230369745799 + 0xc4, 0xc2, 0x4e, 0x8d, 0x10, 0x1d, 0xff, 0x4a, //0x0000d718 .quad 5404070034795315908 + 0xcb, 0x60, 0xf1, 0x4b, 0xcb, 0x10, 0x36, 0x84, //0x0000d720 .quad -8919923546622172981 + 0xbb, 0x39, 0x51, 0x58, 0x2a, 0x72, 0xdf, 0xce, //0x0000d728 .quad -3539985255894009413 + 0xfe, 0xb8, 0xed, 0x1e, 0xfe, 0x94, 0x43, 0xa5, //0x0000d730 .quad -6538218414850328322 + 0x29, 0x88, 0x65, 0xee, 0xb4, 0x4e, 0x97, 0xc2, //0x0000d738 .quad -4424981569867511767 + 0x3e, 0x27, 0xa9, 0xa6, 0x3d, 0x7a, 0x94, 0xce, //0x0000d740 .quad -3561087000135522498 + 0x33, 0xea, 0xfe, 0x29, 0x62, 0x22, 0x3d, 0x73, //0x0000d748 .quad 8303831092947774003 + 0x87, 0xb8, 0x29, 0x88, 0x66, 0xcc, 0x1c, 0x81, //0x0000d750 .quad -9143208402725783417 + 0x60, 0x52, 0x3f, 0x5a, 0x7d, 0x35, 0x06, 0x08, //0x0000d758 .quad 578208414664970848 + 0xa8, 0x26, 0x34, 0x2a, 0x80, 0xff, 0x63, 0xa1, //0x0000d760 .quad -6817324484979841368 + 0xf8, 0x26, 0xcf, 0xb0, 0xdc, 0xc2, 0x07, 0xca, //0x0000d768 .quad -3888925500096174344 + 0x52, 0x30, 0xc1, 0x34, 0x60, 0xff, 0xbc, 0xc9, //0x0000d770 .quad -3909969587797413806 + 0xb6, 0xf0, 0x02, 0xdd, 0x93, 0xb3, 0x89, 0xfc, //0x0000d778 .quad -249470856692830026 + 0x67, 0x7c, 0xf1, 0x41, 0x38, 0x3f, 0x2c, 0xfc, //0x0000d780 .quad -275775966319379353 + 0xe3, 0xac, 0x43, 0xd4, 0x78, 0x20, 0xac, 0xbb, //0x0000d788 .quad -4923524589293425437 + 0xc0, 0xed, 0x36, 0x29, 0x83, 0xa7, 0x9b, 0x9d, //0x0000d790 .quad -7089889006590693952 + 0x0e, 0x4c, 0xaa, 0x84, 0x4b, 0x94, 0x4b, 0xd5, //0x0000d798 .quad -3077202868308390898 + 0x31, 0xa9, 0x84, 0xf3, 0x63, 0x91, 0x02, 0xc5, //0x0000d7a0 .quad -4250675239810979535 + 0x12, 0xdf, 0xd4, 0x65, 0x5e, 0x79, 0x9e, 0x0a, //0x0000d7a8 .quad 765182433041899282 + 0x7d, 0xd3, 0x65, 0xf0, 0xbc, 0x35, 0x43, 0xf6, //0x0000d7b0 .quad -701658031336336515 + 0xd6, 0x16, 0x4a, 0xff, 0xb5, 0x17, 0x46, 0x4d, //0x0000d7b8 .quad 5568164059729762006 + 0x2e, 0xa4, 0x3f, 0x16, 0x96, 0x01, 0xea, 0x99, //0x0000d7c0 .quad -7356065297226292178 + 0x46, 0x4e, 0x8e, 0xbf, 0xd1, 0xce, 0x4b, 0x50, //0x0000d7c8 .quad 5785945546544795206 + 0x39, 0x8d, 0xcf, 0x9b, 0xfb, 0x81, 0x64, 0xc0, //0x0000d7d0 .quad -4583395603105477319 + 0xd7, 0xe1, 0x71, 0x2f, 0x86, 0xc2, 0x5e, 0xe4, //0x0000d7d8 .quad -1990940103673781801 + 0x88, 0x70, 0xc3, 0x82, 0x7a, 0xa2, 0x7d, 0xf0, //0x0000d7e0 .quad -1117558485454458744 + 0x4d, 0x5a, 0x4e, 0xbb, 0x27, 0x73, 0x76, 0x5d, //0x0000d7e8 .quad 6734696907262548557 + 0x55, 0x26, 0xba, 0x91, 0x8c, 0x85, 0x4e, 0x96, //0x0000d7f0 .quad -7616003081050118571 + 0x70, 0xf8, 0x10, 0xd5, 0xf8, 0x07, 0x6a, 0x3a, //0x0000d7f8 .quad 4209185567039092848 + 0xea, 0xaf, 0x28, 0xb6, 0xef, 0x26, 0xe2, 0xbb, //0x0000d800 .quad -4908317832885260310 + 0x8c, 0x36, 0x55, 0x0a, 0xf7, 0x89, 0x04, 0x89, //0x0000d808 .quad -8573576096483297652 + 0xe5, 0xdb, 0xb2, 0xa3, 0xab, 0xb0, 0xda, 0xea, //0x0000d810 .quad -1523711272679187483 + 0x2f, 0x84, 0xea, 0xcc, 0x74, 0xac, 0x45, 0x2b, //0x0000d818 .quad 3118087934678041647 + 0x6f, 0xc9, 0x4f, 0x46, 0x6b, 0xae, 0xc8, 0x92, //0x0000d820 .quad -7869848573065574033 + 0x9e, 0x92, 0x12, 0x00, 0xc9, 0x8b, 0x0b, 0x3b, //0x0000d828 .quad 4254647968387469982 + 0xcb, 0xbb, 0xe3, 0x17, 0x06, 0xda, 0x7a, 0xb7, //0x0000d830 .quad -5225624697904579637 + 0x45, 0x37, 0x17, 0x40, 0xbb, 0x6e, 0xce, 0x09, //0x0000d838 .quad 706623942056949573 + 0xbd, 0xaa, 0xdc, 0x9d, 0x87, 0x90, 0x59, 0xe5, //0x0000d840 .quad -1920344853953336643 + 0x16, 0x05, 0x1d, 0x10, 0x6a, 0x0a, 0x42, 0xcc, //0x0000d848 .quad -3728406090856200938 + 0xb6, 0xea, 0xa9, 0xc2, 0x54, 0xfa, 0x57, 0x8f, //0x0000d850 .quad -8117744561361917258 + 0x2e, 0x23, 0x12, 0x4a, 0x82, 0x46, 0xa9, 0x9f, //0x0000d858 .quad -6941939825212513490 + 0x64, 0x65, 0x54, 0xf3, 0xe9, 0xf8, 0x2d, 0xb3, //0x0000d860 .quad -5535494683275008668 + 0xfa, 0xab, 0x96, 0xdc, 0x22, 0x98, 0x93, 0x47, //0x0000d868 .quad 5157633273766521850 + 0xbd, 0x7e, 0x29, 0x70, 0x24, 0x77, 0xf9, 0xdf, //0x0000d870 .quad -2307682335666372931 + 0xf8, 0x56, 0xbc, 0x93, 0x2b, 0x7e, 0x78, 0x59, //0x0000d878 .quad 6447041592208152312 + 0x36, 0xef, 0x19, 0xc6, 0x76, 0xea, 0xfb, 0x8b, //0x0000d880 .quad -8359830487432564938 + 0x5b, 0xb6, 0x55, 0x3c, 0xdb, 0x4e, 0xeb, 0x57, //0x0000d888 .quad 6335244004343789147 + 0x03, 0x6b, 0xa0, 0x77, 0x14, 0xe5, 0xfa, 0xae, //0x0000d890 .quad -5838102090863318269 + 0xf2, 0x23, 0x6b, 0x0b, 0x92, 0x22, 0xe6, 0xed, //0x0000d898 .quad -1304317031425039374 + 0xc4, 0x85, 0x88, 0x95, 0x59, 0x9e, 0xb9, 0xda, //0x0000d8a0 .quad -2685941595151759932 + 0xee, 0xec, 0x45, 0x8e, 0x36, 0xab, 0x5f, 0xe9, //0x0000d8a8 .quad -1630396289281299218 + 0x9b, 0x53, 0x75, 0xfd, 0xf7, 0x02, 0xb4, 0x88, //0x0000d8b0 .quad -8596242524610931813 + 0x15, 0xb4, 0xeb, 0x18, 0x02, 0xcb, 0xdb, 0x11, //0x0000d8b8 .quad 1286845328412881941 + 0x81, 0xa8, 0xd2, 0xfc, 0xb5, 0x03, 0xe1, 0xaa, //0x0000d8c0 .quad -6133617137336276863 + 0x1a, 0xa1, 0x26, 0x9f, 0xc2, 0xbd, 0x52, 0xd6, //0x0000d8c8 .quad -3003129357911285478 + 0xa2, 0x52, 0x07, 0x7c, 0xa3, 0x44, 0x99, 0xd5, //0x0000d8d0 .quad -3055335403242958174 + 0x60, 0x49, 0xf0, 0x46, 0x33, 0x6d, 0xe7, 0x4b, //0x0000d8d8 .quad 5469460339465668960 + 0xa5, 0x93, 0x84, 0x2d, 0xe6, 0xca, 0x7f, 0x85, //0x0000d8e0 .quad -8827113654667930715 + 0xdc, 0x2d, 0x56, 0x0c, 0x40, 0xa4, 0x70, 0x6f, //0x0000d8e8 .quad 8030098730593431004 + 0x8e, 0xb8, 0xe5, 0xb8, 0x9f, 0xbd, 0xdf, 0xa6, //0x0000d8f0 .quad -6422206049907525490 + 0x53, 0xb9, 0x6b, 0x0f, 0x50, 0xcd, 0x4c, 0xcb, //0x0000d8f8 .quad -3797434642040374957 + 0xb2, 0x26, 0x1f, 0xa7, 0x07, 0xad, 0x97, 0xd0, //0x0000d900 .quad -3416071543957018958 + 0xa8, 0xa7, 0x46, 0x13, 0xa4, 0x00, 0x20, 0x7e, //0x0000d908 .quad 9088264752731695016 + 0x2f, 0x78, 0x73, 0xc8, 0x24, 0xcc, 0x5e, 0x82, //0x0000d910 .quad -9052573742614218705 + 0xc9, 0x28, 0x0c, 0x8c, 0x66, 0x00, 0xd4, 0x8e, //0x0000d918 .quad -8154892584824854327 + 0x3b, 0x56, 0x90, 0xfa, 0x2d, 0x7f, 0xf6, 0xa2, //0x0000d920 .quad -6704031159840385477 + 0xfb, 0x32, 0x0f, 0x2f, 0x80, 0x00, 0x89, 0x72, //0x0000d928 .quad 8253128342678483707 + 0xca, 0x6b, 0x34, 0x79, 0xf9, 0x1e, 0xb4, 0xcb, //0x0000d930 .quad -3768352931373093942 + 0xba, 0xff, 0xd2, 0x3a, 0xa0, 0x40, 0x2b, 0x4f, //0x0000d938 .quad 5704724409920716730 + 0xbc, 0x86, 0x81, 0xd7, 0xb7, 0x26, 0xa1, 0xfe, //0x0000d940 .quad -98755145788979524 + 0xa9, 0xbf, 0x87, 0x49, 0xc8, 0x10, 0xf6, 0xe2, //0x0000d948 .quad -2092466524453879895 + 0x36, 0xf4, 0xb0, 0xe6, 0x32, 0xb8, 0x24, 0x9f, //0x0000d950 .quad -6979250993759194058 + 0xca, 0xd7, 0xf4, 0x2d, 0x7d, 0xca, 0xd9, 0x0d, //0x0000d958 .quad 998051431430019018 + 0x43, 0x31, 0x5d, 0xa0, 0x3f, 0xe6, 0xed, 0xc6, //0x0000d960 .quad -4112377723771604669 + 0xbc, 0x0d, 0x72, 0x79, 0x1c, 0x3d, 0x50, 0x91, //0x0000d968 .quad -7975807747567252036 + 0x94, 0x7d, 0x74, 0x88, 0xcf, 0x5f, 0xa9, 0xf8, //0x0000d970 .quad -528786136287117932 + 0x2b, 0x91, 0xce, 0x97, 0x63, 0x4c, 0xa4, 0x75, //0x0000d978 .quad 8476984389250486571 + 0x7c, 0xce, 0x48, 0xb5, 0xe1, 0xdb, 0x69, 0x9b, //0x0000d980 .quad -7248020362820530564 + 0xbb, 0x1a, 0xe1, 0x3e, 0xbe, 0xaf, 0x86, 0xc9, //0x0000d988 .quad -3925256793573221701 + 0x1b, 0x02, 0x9b, 0x22, 0xda, 0x52, 0x44, 0xc2, //0x0000d990 .quad -4448339435098275301 + 0x69, 0x61, 0x99, 0xce, 0xad, 0x5b, 0xe8, 0xfb, //0x0000d998 .quad -294884973539139223 + 0xa2, 0xc2, 0x41, 0xab, 0x90, 0x67, 0xd5, 0xf2, //0x0000d9a0 .quad -948738275445456222 + 0xc4, 0xb9, 0x3f, 0x42, 0x99, 0x72, 0xe2, 0xfa, //0x0000d9a8 .quad -368606216923924028 + 0xa5, 0x19, 0x09, 0x6b, 0xba, 0x60, 0xc5, 0x97, //0x0000d9b0 .quad -7510490449794491995 + 0x1b, 0xd4, 0x67, 0xc9, 0x9f, 0x87, 0xcd, 0xdc, //0x0000d9b8 .quad -2536221894791146469 + 0x0f, 0x60, 0xcb, 0x05, 0xe9, 0xb8, 0xb6, 0xbd, //0x0000d9c0 .quad -4776427043815727089 + 0x21, 0xc9, 0xc1, 0xbb, 0x87, 0xe9, 0x00, 0x54, //0x0000d9c8 .quad 6053094668365842721 + 0x13, 0x38, 0x3e, 0x47, 0x23, 0x67, 0x24, 0xed, //0x0000d9d0 .quad -1358847786342270957 + 0x69, 0x3b, 0xb2, 0xaa, 0xe9, 0x23, 0x01, 0x29, //0x0000d9d8 .quad 2954682317029915497 + 0x0b, 0xe3, 0x86, 0x0c, 0x76, 0xc0, 0x36, 0x94, //0x0000d9e0 .quad -7766808894105001205 + 0x22, 0x65, 0xaf, 0x0a, 0x72, 0xb6, 0xa0, 0xf9, //0x0000d9e8 .quad -459166561069996766 + 0xce, 0x9b, 0xa8, 0x8f, 0x93, 0x70, 0x44, 0xb9, //0x0000d9f0 .quad -5096825099203863602 + 0x6a, 0x3e, 0x5b, 0x8d, 0x0e, 0xe4, 0x08, 0xf8, //0x0000d9f8 .quad -573958201337495958 + 0xc2, 0xc2, 0x92, 0x73, 0xb8, 0x8c, 0x95, 0xe7, //0x0000da00 .quad -1759345355577441598 + 0x05, 0x0e, 0xb2, 0x30, 0x12, 0x1d, 0x0b, 0xb6, //0x0000da08 .quad -5329133770099257851 + 0xb9, 0xb9, 0x3b, 0x48, 0xf3, 0x77, 0xbd, 0x90, //0x0000da10 .quad -8017119874876982855 + 0xc3, 0x48, 0x6f, 0x5e, 0x2b, 0xf2, 0xc6, 0xb1, //0x0000da18 .quad -5636551615525730109 + 0x28, 0xa8, 0x4a, 0x1a, 0xf0, 0xd5, 0xec, 0xb4, //0x0000da20 .quad -5409713825168840664 + 0xf4, 0x1a, 0x0b, 0x36, 0xb6, 0xae, 0x38, 0x1e, //0x0000da28 .quad 2177682517447613172 + 0x32, 0x52, 0xdd, 0x20, 0x6c, 0x0b, 0x28, 0xe2, //0x0000da30 .quad -2150456263033662926 + 0xb1, 0xe1, 0x8d, 0xc3, 0x63, 0xda, 0xc6, 0x25, //0x0000da38 .quad 2722103146809516465 + 0x5f, 0x53, 0x8a, 0x94, 0x23, 0x07, 0x59, 0x8d, //0x0000da40 .quad -8261564192037121185 + 0x0f, 0xad, 0x38, 0x5a, 0x7e, 0x48, 0x9c, 0x57, //0x0000da48 .quad 6313000485183335695 + 0x37, 0xe8, 0xac, 0x79, 0xec, 0x48, 0xaf, 0xb0, //0x0000da50 .quad -5715269221619013577 + 0x52, 0xd8, 0xc6, 0xf0, 0x9d, 0x5a, 0x83, 0x2d, //0x0000da58 .quad 3279564588051781714 + 0x44, 0x22, 0x18, 0x98, 0x27, 0x1b, 0xdb, 0xdc, //0x0000da60 .quad -2532400508596379068 + 0x66, 0x8e, 0xf8, 0x6c, 0x45, 0x31, 0xe4, 0xf8, //0x0000da68 .quad -512230283362660762 + 0x6b, 0x15, 0x0f, 0xbf, 0xf8, 0xf0, 0x08, 0x8a, //0x0000da70 .quad -8500279345513818773 + 0x00, 0x59, 0x1b, 0x64, 0xcb, 0x9e, 0x8e, 0x1b, //0x0000da78 .quad 1985699082112030976 + 0xc5, 0xda, 0xd2, 0xee, 0x36, 0x2d, 0x8b, 0xac, //0x0000da80 .quad -6013663163464885563 + 0x40, 0x2f, 0x22, 0x3d, 0x7e, 0x46, 0x72, 0xe2, //0x0000da88 .quad -2129562165787349184 + 0x77, 0x91, 0x87, 0xaa, 0x84, 0xf8, 0xad, 0xd7, //0x0000da90 .quad -2905392935903719049 + 0x10, 0xbb, 0x6a, 0xcc, 0x1d, 0xd8, 0x0e, 0x5b, //0x0000da98 .quad 6561419329620589328 + 0xea, 0xba, 0x94, 0xea, 0x52, 0xbb, 0xcc, 0x86, //0x0000daa0 .quad -8733399612580906262 + 0xea, 0xb4, 0xc2, 0x9f, 0x12, 0x47, 0xe9, 0x98, //0x0000daa8 .quad -7428327965055601430 + 0xa5, 0xe9, 0x39, 0xa5, 0x27, 0xea, 0x7f, 0xa8, //0x0000dab0 .quad -6305063497298744923 + 0x25, 0x62, 0xb3, 0x47, 0xd7, 0x98, 0x23, 0x3f, //0x0000dab8 .quad 4549648098962661925 + 0x0e, 0x64, 0x88, 0x8e, 0xb1, 0xe4, 0x9f, 0xd2, //0x0000dac0 .quad -3269643353196043250 + 0xae, 0x3a, 0xa0, 0x19, 0x0d, 0x7f, 0xec, 0x8e, //0x0000dac8 .quad -8147997931578836306 + 0x89, 0x3e, 0x15, 0xf9, 0xee, 0xee, 0xa3, 0x83, //0x0000dad0 .quad -8961056123388608887 + 0xad, 0x24, 0x04, 0x30, 0x68, 0xcf, 0x53, 0x19, //0x0000dad8 .quad 1825030320404309165 + 0x2b, 0x8e, 0x5a, 0xb7, 0xaa, 0xea, 0x8c, 0xa4, //0x0000dae0 .quad -6589634135808373205 + 0xd8, 0x2d, 0x05, 0x3c, 0x42, 0xc3, 0xa8, 0x5f, //0x0000dae8 .quad 6892973918932774360 + 0xb6, 0x31, 0x31, 0x65, 0x55, 0x25, 0xb0, 0xcd, //0x0000daf0 .quad -3625356651333078602 + 0x4e, 0x79, 0x06, 0xcb, 0x12, 0xf4, 0x92, 0x37, //0x0000daf8 .quad 4004531380238580046 + 0x11, 0xbf, 0x3e, 0x5f, 0x55, 0x17, 0x8e, 0x80, //0x0000db00 .quad -9183376934724255983 + 0xd1, 0x0b, 0xe4, 0xbe, 0x8b, 0xd8, 0xbb, 0xe2, //0x0000db08 .quad -2108853905778275375 + 0xd6, 0x6e, 0x0e, 0xb7, 0x2a, 0x9d, 0xb1, 0xa0, //0x0000db10 .quad -6867535149977932074 + 0xc5, 0x0e, 0x9d, 0xae, 0xae, 0xce, 0x6a, 0x5b, //0x0000db18 .quad 6587304654631931589 + 0x8b, 0x0a, 0xd2, 0x64, 0x75, 0x04, 0xde, 0xc8, //0x0000db20 .quad -3972732919045027189 + 0x76, 0x52, 0x44, 0x5a, 0x5a, 0x82, 0x45, 0xf2, //0x0000db28 .quad -989241218564861322 + 0x2e, 0x8d, 0x06, 0xbe, 0x92, 0x85, 0x15, 0xfb, //0x0000db30 .quad -354230130378896082 + 0x13, 0x67, 0xd5, 0xf0, 0xf0, 0xe2, 0xd6, 0xee, //0x0000db38 .quad -1236551523206076653 + 0x3d, 0x18, 0xc4, 0xb6, 0x7b, 0x73, 0xed, 0x9c, //0x0000db40 .quad -7138922859127891907 + 0x6c, 0x60, 0x85, 0x96, 0xd6, 0x4d, 0x46, 0x55, //0x0000db48 .quad 6144684325637283948 + 0x4c, 0x1e, 0x75, 0xa4, 0x5a, 0xd0, 0x28, 0xc4, //0x0000db50 .quad -4311967555482476980 + 0x87, 0xb8, 0x26, 0x3c, 0x4c, 0xe1, 0x97, 0xaa, //0x0000db58 .quad -6154202648235558777 + 0xdf, 0x65, 0x92, 0x4d, 0x71, 0x04, 0x33, 0xf5, //0x0000db60 .quad -778273425925708321 + 0xa9, 0x66, 0x30, 0x4b, 0x9f, 0xd9, 0x3d, 0xd5, //0x0000db68 .quad -3081067291867060567 + 0xab, 0x7f, 0x7b, 0xd0, 0xc6, 0xe2, 0x3f, 0x99, //0x0000db70 .quad -7403949918844649557 + 0x2a, 0x40, 0xfe, 0x8e, 0x03, 0xa8, 0x46, 0xe5, //0x0000db78 .quad -1925667057416912854 + 0x96, 0x5f, 0x9a, 0x84, 0x78, 0xdb, 0x8f, 0xbf, //0x0000db80 .quad -4643251380128424042 + 0x34, 0xd0, 0xbd, 0x72, 0x04, 0x52, 0x98, 0xde, //0x0000db88 .quad -2407083821771141068 + 0x7c, 0xf7, 0xc0, 0xa5, 0x56, 0xd2, 0x73, 0xef, //0x0000db90 .quad -1192378206733142148 + 0x41, 0x44, 0x6d, 0x8f, 0x85, 0x66, 0x3e, 0x96, //0x0000db98 .quad -7620540795641314239 + 0xad, 0x9a, 0x98, 0x27, 0x76, 0x63, 0xa8, 0x95, //0x0000dba0 .quad -7662765406849295699 + 0xa9, 0x4a, 0xa4, 0x79, 0x13, 0x00, 0xe7, 0xdd, //0x0000dba8 .quad -2456994988062127447 + 0x59, 0xc1, 0x7e, 0xb1, 0x53, 0x7c, 0x12, 0xbb, //0x0000dbb0 .quad -4966770740134231719 + 0x53, 0x5d, 0x0d, 0x58, 0x18, 0xc0, 0x60, 0x55, //0x0000dbb8 .quad 6152128301777116499 + 0xaf, 0x71, 0xde, 0x9d, 0x68, 0x1b, 0xd7, 0xe9, //0x0000dbc0 .quad -1596777406740401745 + 0xa7, 0xb4, 0x10, 0x6e, 0x1e, 0xf0, 0xb8, 0xaa, //0x0000dbc8 .quad -6144897678060768089 + 0x0d, 0x07, 0xab, 0x62, 0x21, 0x71, 0x26, 0x92, //0x0000dbd0 .quad -7915514906853832947 + 0xe9, 0x70, 0xca, 0x04, 0x13, 0x96, 0xb3, 0xca, //0x0000dbd8 .quad -3840561048787980055 + 0xd1, 0xc8, 0x55, 0xbb, 0x69, 0x0d, 0xb0, 0xb6, //0x0000dbe0 .quad -5282707615139903279 + 0x23, 0x0d, 0xfd, 0xc5, 0x97, 0x7b, 0x60, 0x3d, //0x0000dbe8 .quad 4422670725869800739 + 0x05, 0x3b, 0x2b, 0x2a, 0xc4, 0x10, 0x5c, 0xe4, //0x0000dbf0 .quad -1991698500497491195 + 0x6b, 0x50, 0x7c, 0xb7, 0x7d, 0x9a, 0xb8, 0x8c, //0x0000dbf8 .quad -8306719647944912789 + 0xe3, 0x04, 0x5b, 0x9a, 0x7a, 0x8a, 0xb9, 0x8e, //0x0000dc00 .quad -8162340590452013853 + 0x43, 0xb2, 0xad, 0x92, 0x8e, 0x60, 0xf3, 0x77, //0x0000dc08 .quad 8643358275316593219 + 0x1c, 0xc6, 0xf1, 0x40, 0x19, 0xed, 0x67, 0xb2, //0x0000dc10 .quad -5591239719637629412 + 0xd4, 0x1e, 0x59, 0x37, 0xb2, 0x38, 0xf0, 0x55, //0x0000dc18 .quad 6192511825718353620 + 0xa3, 0x37, 0x2e, 0x91, 0x5f, 0xe8, 0x01, 0xdf, //0x0000dc20 .quad -2377363631119648861 + 0x89, 0x66, 0x2f, 0xc5, 0xde, 0x46, 0x6c, 0x6b, //0x0000dc28 .quad 7740639782147942025 + 0xc6, 0xe2, 0xbc, 0xba, 0x3b, 0x31, 0x61, 0x8b, //0x0000dc30 .quad -8403381297090862394 + 0x16, 0xa0, 0x3d, 0x3b, 0x4b, 0xac, 0x23, 0x23, //0x0000dc38 .quad 2532056854628769814 + 0x77, 0x1b, 0x6c, 0xa9, 0x8a, 0x7d, 0x39, 0xae, //0x0000dc40 .quad -5892540602936190089 + 0x1b, 0x08, 0x0d, 0x0a, 0x5e, 0x97, 0xec, 0xab, //0x0000dc48 .quad -6058300968568813541 + 0x55, 0x22, 0xc7, 0x53, 0xed, 0xdc, 0xc7, 0xd9, //0x0000dc50 .quad -2753989735242849707 + 0x22, 0x4a, 0x90, 0x8c, 0x35, 0xbd, 0xe7, 0x96, //0x0000dc58 .quad -7572876210711016926 + 0x75, 0x75, 0x5c, 0x54, 0x14, 0xea, 0x1c, 0x88, //0x0000dc60 .quad -8638772612167862923 + 0x55, 0x2e, 0xda, 0x77, 0x41, 0xd6, 0x50, 0x7e, //0x0000dc68 .quad 9102010423587778133 + 0xd2, 0x92, 0x73, 0x69, 0x99, 0x24, 0x24, 0xaa, //0x0000dc70 .quad -6186779746782440750 + 0xea, 0xb9, 0xd0, 0xd5, 0xd1, 0x0b, 0xe5, 0xdd, //0x0000dc78 .quad -2457545025797441046 + 0x87, 0x77, 0xd0, 0xc3, 0xbf, 0x2d, 0xad, 0xd4, //0x0000dc80 .quad -3121788665050663033 + 0x65, 0xe8, 0x44, 0x4b, 0xc6, 0x4e, 0x5e, 0x95, //0x0000dc88 .quad -7683617300674189211 + 0xb4, 0x4a, 0x62, 0xda, 0x97, 0x3c, 0xec, 0x84, //0x0000dc90 .quad -8868646943297746252 + 0x3f, 0x11, 0x0b, 0xef, 0x3b, 0xf1, 0x5a, 0xbd, //0x0000dc98 .quad -4802260812921368257 + 0x61, 0xdd, 0xfa, 0xd0, 0xbd, 0x4b, 0x27, 0xa6, //0x0000dca0 .quad -6474122660694794911 + 0x8f, 0xd5, 0xcd, 0xea, 0x8a, 0xad, 0xb1, 0xec, //0x0000dca8 .quad -1391139997724322417 + 0xba, 0x94, 0x39, 0x45, 0xad, 0x1e, 0xb1, 0xcf, //0x0000dcb0 .quad -3480967307441105734 + 0xf3, 0x4a, 0x81, 0xa5, 0xed, 0x18, 0xde, 0x67, //0x0000dcb8 .quad 7484447039699372787 + 0xf4, 0xfc, 0x43, 0x4b, 0x2c, 0xb3, 0xce, 0x81, //0x0000dcc0 .quad -9093133594791772940 + 0xd8, 0xce, 0x70, 0x87, 0x94, 0xcf, 0xea, 0x80, //0x0000dcc8 .quad -9157278655470055720 + 0x31, 0xfc, 0x14, 0x5e, 0xf7, 0x5f, 0x42, 0xa2, //0x0000dcd0 .quad -6754730975062328271 + 0x8e, 0x02, 0x4d, 0xa9, 0x79, 0x83, 0x25, 0xa1, //0x0000dcd8 .quad -6834912300910181746 + 0x3e, 0x3b, 0x9a, 0x35, 0xf5, 0xf7, 0xd2, 0xca, //0x0000dce0 .quad -3831727700400522434 + 0x31, 0x43, 0xa0, 0x13, 0x58, 0xe4, 0x6e, 0x09, //0x0000dce8 .quad 679731660717048625 + 0x0d, 0xca, 0x00, 0x83, 0xf2, 0xb5, 0x87, 0xfd, //0x0000dcf0 .quad -177973607073265139 + 0xfd, 0x53, 0x88, 0x18, 0x6e, 0x9d, 0xca, 0x8b, //0x0000dcf8 .quad -8373707460958465027 + 0x48, 0x7e, 0xe0, 0x91, 0xb7, 0xd1, 0x74, 0x9e, //0x0000dd00 .quad -7028762532061872568 + 0x7e, 0x34, 0x55, 0xcf, 0x64, 0xa2, 0x5e, 0x77, //0x0000dd08 .quad 8601490892183123070 + 0xda, 0x9d, 0x58, 0x76, 0x25, 0x06, 0x12, 0xc6, //0x0000dd10 .quad -4174267146649952806 + 0x9e, 0x81, 0x2a, 0x03, 0xfe, 0x4a, 0x36, 0x95, //0x0000dd18 .quad -7694880458480647778 + 0x51, 0xc5, 0xee, 0xd3, 0xae, 0x87, 0x96, 0xf7, //0x0000dd20 .quad -606147914885053103 + 0x05, 0x22, 0xf5, 0x83, 0xbd, 0xdd, 0x83, 0x3a, //0x0000dd28 .quad 4216457482181353989 + 0x52, 0x3b, 0x75, 0x44, 0xcd, 0x14, 0xbe, 0x9a, //0x0000dd30 .quad -7296371474444240046 + 0x43, 0x35, 0x79, 0x72, 0x96, 0x6a, 0x92, 0xc4, //0x0000dd38 .quad -4282243101277735613 + 0x27, 0x8a, 0x92, 0x95, 0x00, 0x9a, 0x6d, 0xc1, //0x0000dd40 .quad -4508778324627912153 + 0x94, 0x82, 0x17, 0x0f, 0x3c, 0x05, 0xb7, 0x75, //0x0000dd48 .quad 8482254178684994196 + 0xb1, 0x2c, 0xf7, 0xba, 0x80, 0x00, 0xc9, 0xf1, //0x0000dd50 .quad -1024286887357502287 + 0x39, 0x63, 0xdd, 0x12, 0x8b, 0xc6, 0x24, 0x53, //0x0000dd58 .quad 5991131704928854841 + 0xee, 0x7b, 0xda, 0x74, 0x50, 0xa0, 0x1d, 0x97, //0x0000dd60 .quad -7557708332239520786 + 0x04, 0x5e, 0xca, 0xeb, 0x16, 0xfc, 0xf6, 0xd3, //0x0000dd68 .quad -3173071712060547580 + 0xea, 0x1a, 0x11, 0x92, 0x64, 0x08, 0xe5, 0xbc, //0x0000dd70 .quad -4835449396872013078 + 0x85, 0xf5, 0xbc, 0xa6, 0x1c, 0xbb, 0xf4, 0x88, //0x0000dd78 .quad -8578025658503072379 + 0xa5, 0x61, 0x95, 0xb6, 0x7d, 0x4a, 0x1e, 0xec, //0x0000dd80 .quad -1432625727662628443 + 0xe6, 0x32, 0x6c, 0xd0, 0xe3, 0xe9, 0x31, 0x2b, //0x0000dd88 .quad 3112525982153323238 + 0x07, 0x5d, 0x1d, 0x92, 0x8e, 0xee, 0x92, 0x93, //0x0000dd90 .quad -7812920107430224633 + 0xd0, 0x9f, 0x43, 0x62, 0x2e, 0x32, 0xff, 0x3a, //0x0000dd98 .quad 4251171748059520976 + 0x49, 0xb4, 0xa4, 0x36, 0x32, 0xaa, 0x77, 0xb8, //0x0000dda0 .quad -5154464115860392887 + 0xc3, 0x87, 0xd4, 0xfa, 0xb9, 0xfe, 0xbe, 0x09, //0x0000dda8 .quad 702278666647013315 + 0x5b, 0xe1, 0x4d, 0xc4, 0xbe, 0x94, 0x95, 0xe6, //0x0000ddb0 .quad -1831394126398103205 + 0xb4, 0xa9, 0x89, 0x79, 0x68, 0xbe, 0x2e, 0x4c, //0x0000ddb8 .quad 5489534351736154548 + 0xd9, 0xac, 0xb0, 0x3a, 0xf7, 0x7c, 0x1d, 0x90, //0x0000ddc0 .quad -8062150356639896359 + 0x11, 0x0a, 0xf6, 0x4b, 0x01, 0x37, 0x9d, 0x0f, //0x0000ddc8 .quad 1125115960621402641 + 0x0f, 0xd8, 0x5c, 0x09, 0x35, 0xdc, 0x24, 0xb4, //0x0000ddd0 .quad -5466001927372482545 + 0x95, 0x8c, 0xf3, 0x9e, 0xc1, 0x84, 0x84, 0x53, //0x0000ddd8 .quad 6018080969204141205 + 0x13, 0x0e, 0xb4, 0x4b, 0x42, 0x13, 0x2e, 0xe1, //0x0000dde0 .quad -2220816390788215277 + 0xba, 0x6f, 0xb0, 0x06, 0xf2, 0xa5, 0x65, 0x28, //0x0000dde8 .quad 2910915193077788602 + 0xcb, 0x88, 0x50, 0x6f, 0x09, 0xcc, 0xbc, 0x8c, //0x0000ddf0 .quad -8305539271883716405 + 0xd4, 0x45, 0x2e, 0x44, 0xb7, 0x87, 0x3f, 0xf9, //0x0000ddf8 .quad -486521013540076076 + 0xfe, 0xaa, 0x24, 0xcb, 0x0b, 0xff, 0xeb, 0xaf, //0x0000de00 .quad -5770238071427257602 + 0x49, 0xd7, 0x39, 0x15, 0xa5, 0x69, 0x8f, 0xf7, //0x0000de08 .quad -608151266925095095 + 0xbe, 0xd5, 0xed, 0xbd, 0xce, 0xfe, 0xe6, 0xdb, //0x0000de10 .quad -2601111570856684098 + 0x1c, 0x4d, 0x88, 0x5a, 0x0e, 0x44, 0x73, 0xb5, //0x0000de18 .quad -5371875102083756772 + 0x97, 0xa5, 0xb4, 0x36, 0x41, 0x5f, 0x70, 0x89, //0x0000de20 .quad -8543223759426509417 + 0x31, 0x30, 0x95, 0xf8, 0x88, 0x0a, 0x68, 0x31, //0x0000de28 .quad 3560107088838733873 + 0xfc, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x0000de30 .quad -6067343680855748868 + 0x3e, 0x7c, 0xba, 0x36, 0x2b, 0x0d, 0xc2, 0xfd, //0x0000de38 .quad -161552157378970562 + 0xbc, 0x42, 0x7a, 0xe5, 0xd5, 0x94, 0xbf, 0xd6, //0x0000de40 .quad -2972493582642298180 + 0x4d, 0x1b, 0x69, 0x04, 0x76, 0x90, 0x32, 0x3d, //0x0000de48 .quad 4409745821703674701 + 0xb5, 0x69, 0x6c, 0xaf, 0x05, 0xbd, 0x37, 0x86, //0x0000de50 .quad -8775337516792518219 + 0x10, 0xb1, 0xc1, 0xc2, 0x49, 0x9a, 0x3f, 0xa6, //0x0000de58 .quad -6467280898289979120 + 0x23, 0x84, 0x47, 0x1b, 0x47, 0xac, 0xc5, 0xa7, //0x0000de60 .quad -6357485877563259869 + 0x54, 0x1d, 0x72, 0x33, 0xdc, 0x80, 0xcf, 0x0f, //0x0000de68 .quad 1139270913992301908 + 0x2b, 0x65, 0x19, 0xe2, 0x58, 0x17, 0xb7, 0xd1, //0x0000de70 .quad -3335171328526686933 + 0xa9, 0xa4, 0x4e, 0x40, 0x13, 0x61, 0xc3, 0xd3, //0x0000de78 .quad -3187597375937010519 + 0x3b, 0xdf, 0x4f, 0x8d, 0x97, 0x6e, 0x12, 0x83, //0x0000de80 .quad -9002011107970261189 + 0xea, 0x26, 0x31, 0x08, 0xac, 0x1c, 0x5a, 0x64, //0x0000de88 .quad 7231123676894144234 + 0x0a, 0xd7, 0xa3, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, //0x0000de90 .quad -6640827866535438582 + 0xa4, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, 0x70, 0x3d, //0x0000de98 .quad 4427218577690292388 + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x0000dea0 .quad -3689348814741910324 + 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x0000dea8 .quad -3689348814741910323 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x0000deb0 .quad -9223372036854775808 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000deb8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, //0x0000dec0 .quad -6917529027641081856 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000dec8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, //0x0000ded0 .quad -4035225266123964416 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ded8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, //0x0000dee0 .quad -432345564227567616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000dee8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x9c, //0x0000def0 .quad -7187745005283311616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000def8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xc3, //0x0000df00 .quad -4372995238176751616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000df08 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xf4, //0x0000df10 .quad -854558029293551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000df18 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x98, //0x0000df20 .quad -7451627795949551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000df28 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xbc, 0xbe, //0x0000df30 .quad -4702848726509551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000df38 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6b, 0xee, //0x0000df40 .quad -1266874889709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000df48 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x02, 0x95, //0x0000df50 .quad -7709325833709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000df58 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x40, 0xb7, 0x43, 0xba, //0x0000df60 .quad -5024971273709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000df68 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0xd4, 0xe8, //0x0000df70 .quad -1669528073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000df78 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xe7, 0x84, 0x91, //0x0000df80 .quad -7960984073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000df88 .quad 0 + 0x00, 0x00, 0x00, 0x80, 0xf4, 0x20, 0xe6, 0xb5, //0x0000df90 .quad -5339544073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000df98 .quad 0 + 0x00, 0x00, 0x00, 0xa0, 0x31, 0xa9, 0x5f, 0xe3, //0x0000dfa0 .quad -2062744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000dfa8 .quad 0 + 0x00, 0x00, 0x00, 0x04, 0xbf, 0xc9, 0x1b, 0x8e, //0x0000dfb0 .quad -8206744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000dfb8 .quad 0 + 0x00, 0x00, 0x00, 0xc5, 0x2e, 0xbc, 0xa2, 0xb1, //0x0000dfc0 .quad -5646744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000dfc8 .quad 0 + 0x00, 0x00, 0x40, 0x76, 0x3a, 0x6b, 0x0b, 0xde, //0x0000dfd0 .quad -2446744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000dfd8 .quad 0 + 0x00, 0x00, 0xe8, 0x89, 0x04, 0x23, 0xc7, 0x8a, //0x0000dfe0 .quad -8446744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000dfe8 .quad 0 + 0x00, 0x00, 0x62, 0xac, 0xc5, 0xeb, 0x78, 0xad, //0x0000dff0 .quad -5946744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000dff8 .quad 0 + 0x00, 0x80, 0x7a, 0x17, 0xb7, 0x26, 0xd7, 0xd8, //0x0000e000 .quad -2821744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e008 .quad 0 + 0x00, 0x90, 0xac, 0x6e, 0x32, 0x78, 0x86, 0x87, //0x0000e010 .quad -8681119073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e018 .quad 0 + 0x00, 0xb4, 0x57, 0x0a, 0x3f, 0x16, 0x68, 0xa9, //0x0000e020 .quad -6239712823709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e028 .quad 0 + 0x00, 0xa1, 0xed, 0xcc, 0xce, 0x1b, 0xc2, 0xd3, //0x0000e030 .quad -3187955011209551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e038 .quad 0 + 0xa0, 0x84, 0x14, 0x40, 0x61, 0x51, 0x59, 0x84, //0x0000e040 .quad -8910000909647051616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e048 .quad 0 + 0xc8, 0xa5, 0x19, 0x90, 0xb9, 0xa5, 0x6f, 0xa5, //0x0000e050 .quad -6525815118631426616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e058 .quad 0 + 0x3a, 0x0f, 0x20, 0xf4, 0x27, 0x8f, 0xcb, 0xce, //0x0000e060 .quad -3545582879861895366 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e068 .quad 0 + 0x84, 0x09, 0x94, 0xf8, 0x78, 0x39, 0x3f, 0x81, //0x0000e070 .quad -9133518327554766460 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, //0x0000e078 .quad 4611686018427387904 + 0xe5, 0x0b, 0xb9, 0x36, 0xd7, 0x07, 0x8f, 0xa1, //0x0000e080 .quad -6805211891016070171 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, //0x0000e088 .quad 5764607523034234880 + 0xde, 0x4e, 0x67, 0x04, 0xcd, 0xc9, 0xf2, 0xc9, //0x0000e090 .quad -3894828845342699810 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, //0x0000e098 .quad -6629298651489370112 + 0x96, 0x22, 0x81, 0x45, 0x40, 0x7c, 0x6f, 0xfc, //0x0000e0a0 .quad -256850038250986858 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, //0x0000e0a8 .quad 5548434740920451072 + 0x9d, 0xb5, 0x70, 0x2b, 0xa8, 0xad, 0xc5, 0x9d, //0x0000e0b0 .quad -7078060301547948643 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf0, //0x0000e0b8 .quad -1143914305352105984 + 0x05, 0xe3, 0x4c, 0x36, 0x12, 0x19, 0x37, 0xc5, //0x0000e0c0 .quad -4235889358507547899 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, //0x0000e0c8 .quad 7793479155164643328 + 0xc6, 0x1b, 0xe0, 0xc3, 0x56, 0xdf, 0x84, 0xf6, //0x0000e0d0 .quad -683175679707046970 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0xc7, //0x0000e0d8 .quad -4093209111326359552 + 0x5c, 0x11, 0x6c, 0x3a, 0x96, 0x0b, 0x13, 0x9a, //0x0000e0e0 .quad -7344513827457986212 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7f, 0x3c, //0x0000e0e8 .quad 4359273333062107136 + 0xb3, 0x15, 0x07, 0xc9, 0x7b, 0xce, 0x97, 0xc0, //0x0000e0f0 .quad -4568956265895094861 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9f, 0x4b, //0x0000e0f8 .quad 5449091666327633920 + 0x20, 0xdb, 0x48, 0xbb, 0x1a, 0xc2, 0xbd, 0xf0, //0x0000e100 .quad -1099509313941480672 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x86, 0x1e, //0x0000e108 .quad 2199678564482154496 + 0xf4, 0x88, 0x0d, 0xb5, 0x50, 0x99, 0x76, 0x96, //0x0000e110 .quad -7604722348854507276 + 0x00, 0x00, 0x00, 0x00, 0x80, 0x44, 0x14, 0x13, //0x0000e118 .quad 1374799102801346560 + 0x31, 0xeb, 0x50, 0xe2, 0xa4, 0x3f, 0x14, 0xbc, //0x0000e120 .quad -4894216917640746191 + 0x00, 0x00, 0x00, 0x00, 0xa0, 0x55, 0xd9, 0x17, //0x0000e128 .quad 1718498878501683200 + 0xfd, 0x25, 0xe5, 0x1a, 0x8e, 0x4f, 0x19, 0xeb, //0x0000e130 .quad -1506085128623544835 + 0x00, 0x00, 0x00, 0x00, 0x08, 0xab, 0xcf, 0x5d, //0x0000e138 .quad 6759809616554491904 + 0xbe, 0x37, 0xcf, 0xd0, 0xb8, 0xd1, 0xef, 0x92, //0x0000e140 .quad -7858832233030797378 + 0x00, 0x00, 0x00, 0x00, 0xe5, 0xca, 0xa1, 0x5a, //0x0000e148 .quad 6530724019560251392 + 0xad, 0x05, 0x03, 0x05, 0x27, 0xc6, 0xab, 0xb7, //0x0000e150 .quad -5211854272861108819 + 0x00, 0x00, 0x00, 0x40, 0x9e, 0x3d, 0x4a, 0xf1, //0x0000e158 .quad -1059967012404461568 + 0x19, 0xc7, 0x43, 0xc6, 0xb0, 0xb7, 0x96, 0xe5, //0x0000e160 .quad -1903131822648998119 + 0x00, 0x00, 0x00, 0xd0, 0x05, 0xcd, 0x9c, 0x6d, //0x0000e168 .quad 7898413271349198848 + 0x6f, 0x5c, 0xea, 0x7b, 0xce, 0x32, 0x7e, 0x8f, //0x0000e170 .quad -8106986416796705681 + 0x00, 0x00, 0x00, 0xa2, 0x23, 0x00, 0x82, 0xe4, //0x0000e178 .quad -1981020733047832576 + 0x8b, 0xf3, 0xe4, 0x1a, 0x82, 0xbf, 0x5d, 0xb3, //0x0000e180 .quad -5522047002568494197 + 0x00, 0x00, 0x80, 0x8a, 0x2c, 0x80, 0xa2, 0xdd, //0x0000e188 .quad -2476275916309790720 + 0x6e, 0x30, 0x9e, 0xa1, 0x62, 0x2f, 0x35, 0xe0, //0x0000e190 .quad -2290872734783229842 + 0x00, 0x00, 0x20, 0xad, 0x37, 0x20, 0x0b, 0xd5, //0x0000e198 .quad -3095344895387238400 + 0x45, 0xde, 0x02, 0xa5, 0x9d, 0x3d, 0x21, 0x8c, //0x0000e1a0 .quad -8349324486880600507 + 0x00, 0x00, 0x34, 0xcc, 0x22, 0xf4, 0x26, 0x45, //0x0000e1a8 .quad 4982938468024057856 + 0xd6, 0x95, 0x43, 0x0e, 0x05, 0x8d, 0x29, 0xaf, //0x0000e1b0 .quad -5824969590173362730 + 0x00, 0x00, 0x41, 0x7f, 0x2b, 0xb1, 0x70, 0x96, //0x0000e1b8 .quad -7606384970252091392 + 0x4c, 0x7b, 0xd4, 0x51, 0x46, 0xf0, 0xf3, 0xda, //0x0000e1c0 .quad -2669525969289315508 + 0x00, 0x40, 0x11, 0x5f, 0x76, 0xdd, 0x0c, 0x3c, //0x0000e1c8 .quad 4327076842467049472 + 0x0f, 0xcd, 0x24, 0xf3, 0x2b, 0x76, 0xd8, 0x88, //0x0000e1d0 .quad -8585982758446904049 + 0x00, 0xc8, 0x6a, 0xfb, 0x69, 0x0a, 0x88, 0xa5, //0x0000e1d8 .quad -6518949010312869888 + 0x53, 0x00, 0xee, 0xef, 0xb6, 0x93, 0x0e, 0xab, //0x0000e1e0 .quad -6120792429631242157 + 0x00, 0x7a, 0x45, 0x7a, 0x04, 0x0d, 0xea, 0x8e, //0x0000e1e8 .quad -8148686262891087360 + 0x68, 0x80, 0xe9, 0xab, 0xa4, 0x38, 0xd2, 0xd5, //0x0000e1f0 .quad -3039304518611664792 + 0x80, 0xd8, 0xd6, 0x98, 0x45, 0x90, 0xa4, 0x72, //0x0000e1f8 .quad 8260886245095692416 + 0x41, 0xf0, 0x71, 0xeb, 0x66, 0x63, 0xa3, 0x85, //0x0000e200 .quad -8817094351773372351 + 0x50, 0x47, 0x86, 0x7f, 0x2b, 0xda, 0xa6, 0x47, //0x0000e208 .quad 5163053903184807760 + 0x51, 0x6c, 0x4e, 0xa6, 0x40, 0x3c, 0x0c, 0xa7, //0x0000e210 .quad -6409681921289327535 + 0x24, 0xd9, 0x67, 0x5f, 0xb6, 0x90, 0x90, 0x99, //0x0000e218 .quad -7381240676301154012 + 0x65, 0x07, 0xe2, 0xcf, 0x50, 0x4b, 0xcf, 0xd0, //0x0000e220 .quad -3400416383184271515 + 0x6d, 0xcf, 0x41, 0xf7, 0xe3, 0xb4, 0xf4, 0xff, //0x0000e228 .quad -3178808521666707 + 0x9f, 0x44, 0xed, 0x81, 0x12, 0x8f, 0x81, 0x82, //0x0000e230 .quad -9042789267131251553 + 0xa5, 0x21, 0x89, 0x7a, 0x0e, 0xf1, 0xf8, 0xbf, //0x0000e238 .quad -4613672773753429595 + 0xc7, 0x95, 0x68, 0x22, 0xd7, 0xf2, 0x21, 0xa3, //0x0000e240 .quad -6691800565486676537 + 0x0e, 0x6a, 0x2b, 0x19, 0x52, 0x2d, 0xf7, 0xaf, //0x0000e248 .quad -5767090967191786994 + 0x39, 0xbb, 0x02, 0xeb, 0x8c, 0x6f, 0xea, 0xcb, //0x0000e250 .quad -3753064688430957767 + 0x91, 0x44, 0x76, 0x9f, 0xa6, 0xf8, 0xf4, 0x9b, //0x0000e258 .quad -7208863708989733743 + 0x08, 0x6a, 0xc3, 0x25, 0x70, 0x0b, 0xe5, 0xfe, //0x0000e260 .quad -79644842111309304 + 0xb5, 0xd5, 0x53, 0x47, 0xd0, 0x36, 0xf2, 0x02, //0x0000e268 .quad 212292400617608629 + 0x45, 0x22, 0x9a, 0x17, 0x26, 0x27, 0x4f, 0x9f, //0x0000e270 .quad -6967307053960650171 + 0x91, 0x65, 0x94, 0x2c, 0x42, 0x62, 0xd7, 0x01, //0x0000e278 .quad 132682750386005393 + 0xd6, 0xaa, 0x80, 0x9d, 0xef, 0xf0, 0x22, 0xc7, //0x0000e280 .quad -4097447799023424810 + 0xf6, 0x7e, 0xb9, 0xb7, 0xd2, 0x3a, 0x4d, 0x42, //0x0000e288 .quad 4777539456409894646 + 0x8b, 0xd5, 0xe0, 0x84, 0x2b, 0xad, 0xeb, 0xf8, //0x0000e290 .quad -510123730351893109 + 0xb3, 0xde, 0xa7, 0x65, 0x87, 0x89, 0xe0, 0xd2, //0x0000e298 .quad -3251447716342407501 + 0x77, 0x85, 0x0c, 0x33, 0x3b, 0x4c, 0x93, 0x9b, //0x0000e2a0 .quad -7236356359111015049 + 0x30, 0xeb, 0x88, 0x9f, 0xf4, 0x55, 0xcc, 0x63, //0x0000e2a8 .quad 7191217214140771120 + 0xd5, 0xa6, 0xcf, 0xff, 0x49, 0x1f, 0x78, 0xc2, //0x0000e2b0 .quad -4433759430461380907 + 0xfc, 0x25, 0x6b, 0xc7, 0x71, 0x6b, 0xbf, 0x3c, //0x0000e2b8 .quad 4377335499248575996 + 0x8a, 0x90, 0xc3, 0x7f, 0x1c, 0x27, 0x16, 0xf3, //0x0000e2c0 .quad -930513269649338230 + 0x7b, 0xef, 0x45, 0x39, 0x4e, 0x46, 0xef, 0x8b, //0x0000e2c8 .quad -8363388681221443717 + 0x56, 0x3a, 0xda, 0xcf, 0x71, 0xd8, 0xed, 0x97, //0x0000e2d0 .quad -7499099821171918250 + 0xad, 0xb5, 0xcb, 0xe3, 0xf0, 0x8b, 0x75, 0x97, //0x0000e2d8 .quad -7532960934977096275 + 0xec, 0xc8, 0xd0, 0x43, 0x8e, 0x4e, 0xe9, 0xbd, //0x0000e2e0 .quad -4762188758037509908 + 0x18, 0xa3, 0xbe, 0x1c, 0xed, 0xee, 0x52, 0x3d, //0x0000e2e8 .quad 4418856886560793368 + 0x27, 0xfb, 0xc4, 0xd4, 0x31, 0xa2, 0x63, 0xed, //0x0000e2f0 .quad -1341049929119499481 + 0xde, 0x4b, 0xee, 0x63, 0xa8, 0xaa, 0xa7, 0x4c, //0x0000e2f8 .quad 5523571108200991710 + 0xf8, 0x1c, 0xfb, 0x24, 0x5f, 0x45, 0x5e, 0x94, //0x0000e300 .quad -7755685233340769032 + 0x6b, 0xef, 0x74, 0x3e, 0xa9, 0xca, 0xe8, 0x8f, //0x0000e308 .quad -8076983103442849941 + 0x36, 0xe4, 0x39, 0xee, 0xb6, 0xd6, 0x75, 0xb9, //0x0000e310 .quad -5082920523248573386 + 0x45, 0x2b, 0x12, 0x8e, 0x53, 0xfd, 0xe2, 0xb3, //0x0000e318 .quad -5484542860876174523 + 0x44, 0x5d, 0xc8, 0xa9, 0x64, 0x4c, 0xd3, 0xe7, //0x0000e320 .quad -1741964635633328828 + 0x17, 0xb6, 0x96, 0x71, 0xa8, 0xbc, 0xdb, 0x60, //0x0000e328 .quad 6979379479186945559 + 0x4a, 0x3a, 0x1d, 0xea, 0xbe, 0x0f, 0xe4, 0x90, //0x0000e330 .quad -8006256924911912374 + 0xce, 0x31, 0xfe, 0x46, 0xe9, 0x55, 0x89, 0xbc, //0x0000e338 .quad -4861259862362934834 + 0xdd, 0x88, 0xa4, 0xa4, 0xae, 0x13, 0x1d, 0xb5, //0x0000e340 .quad -5396135137712502563 + 0x42, 0xbe, 0xbd, 0x98, 0x63, 0xab, 0xab, 0x6b, //0x0000e348 .quad 7758483227328495170 + 0x14, 0xab, 0xcd, 0x4d, 0x9a, 0x58, 0x64, 0xe2, //0x0000e350 .quad -2133482903713240300 + 0xd2, 0x2d, 0xed, 0x7e, 0x3c, 0x96, 0x96, 0xc6, //0x0000e358 .quad -4136954021121544750 + 0xec, 0x8a, 0xa0, 0x70, 0x60, 0xb7, 0x7e, 0x8d, //0x0000e360 .quad -8250955842461857044 + 0xa3, 0x3c, 0x54, 0xcf, 0xe5, 0x1d, 0x1e, 0xfc, //0x0000e368 .quad -279753253987271517 + 0xa8, 0xad, 0xc8, 0x8c, 0x38, 0x65, 0xde, 0xb0, //0x0000e370 .quad -5702008784649933400 + 0xcc, 0x4b, 0x29, 0x43, 0x5f, 0xa5, 0x25, 0x3b, //0x0000e378 .quad 4261994450943298508 + 0x12, 0xd9, 0xfa, 0xaf, 0x86, 0xfe, 0x15, 0xdd, //0x0000e380 .quad -2515824962385028846 + 0xbf, 0x9e, 0xf3, 0x13, 0xb7, 0x0e, 0xef, 0x49, //0x0000e388 .quad 5327493063679123135 + 0xab, 0xc7, 0xfc, 0x2d, 0x14, 0xbf, 0x2d, 0x8a, //0x0000e390 .quad -8489919629131724885 + 0x38, 0x43, 0x78, 0x6c, 0x32, 0x69, 0x35, 0x6e, //0x0000e398 .quad 7941369183226839864 + 0x96, 0xf9, 0x7b, 0x39, 0xd9, 0x2e, 0xb9, 0xac, //0x0000e3a0 .quad -6000713517987268202 + 0x05, 0x54, 0x96, 0x07, 0x7f, 0xc3, 0xc2, 0x49, //0x0000e3a8 .quad 5315025460606161925 + 0xfb, 0xf7, 0xda, 0x87, 0x8f, 0x7a, 0xe7, 0xd7, //0x0000e3b0 .quad -2889205879056697349 + 0x07, 0xe9, 0x7b, 0xc9, 0x5e, 0x74, 0x33, 0xdc, //0x0000e3b8 .quad -2579590211097073401 + 0xfd, 0xda, 0xe8, 0xb4, 0x99, 0xac, 0xf0, 0x86, //0x0000e3c0 .quad -8723282702051517699 + 0xa4, 0x71, 0xed, 0x3d, 0xbb, 0x28, 0xa0, 0x69, //0x0000e3c8 .quad 7611128154919104932 + 0xbc, 0x11, 0x23, 0x22, 0xc0, 0xd7, 0xac, 0xa8, //0x0000e3d0 .quad -6292417359137009220 + 0x0d, 0xce, 0x68, 0x0d, 0xea, 0x32, 0x08, 0xc4, //0x0000e3d8 .quad -4321147861633282547 + 0x2b, 0xd6, 0xab, 0x2a, 0xb0, 0x0d, 0xd8, 0xd2, //0x0000e3e0 .quad -3253835680493873621 + 0x91, 0x01, 0xc3, 0x90, 0xa4, 0x3f, 0x0a, 0xf5, //0x0000e3e8 .quad -789748808614215279 + 0xdb, 0x65, 0xab, 0x1a, 0x8e, 0x08, 0xc7, 0x83, //0x0000e3f0 .quad -8951176327949752869 + 0xfb, 0xe0, 0x79, 0xda, 0xc6, 0x67, 0x26, 0x79, //0x0000e3f8 .quad 8729779031470891259 + 0x52, 0x3f, 0x56, 0xa1, 0xb1, 0xca, 0xb8, 0xa4, //0x0000e400 .quad -6577284391509803182 + 0x39, 0x59, 0x18, 0x91, 0xb8, 0x01, 0x70, 0x57, //0x0000e408 .quad 6300537770911226169 + 0x26, 0xcf, 0xab, 0x09, 0x5e, 0xfd, 0xe6, 0xcd, //0x0000e410 .quad -3609919470959866074 + 0x87, 0x6f, 0x5e, 0xb5, 0x26, 0x02, 0x4c, 0xed, //0x0000e418 .quad -1347699823215743097 + 0x78, 0x61, 0x0b, 0xc6, 0x5a, 0x5e, 0xb0, 0x80, //0x0000e420 .quad -9173728696990998152 + 0xb5, 0x05, 0x5b, 0x31, 0x58, 0x81, 0x4f, 0x54, //0x0000e428 .quad 6075216638131242421 + 0xd6, 0x39, 0x8e, 0x77, 0xf1, 0x75, 0xdc, 0xa0, //0x0000e430 .quad -6855474852811359786 + 0x22, 0xc7, 0xb1, 0x3d, 0xae, 0x61, 0x63, 0x69, //0x0000e438 .quad 7594020797664053026 + 0x4c, 0xc8, 0x71, 0xd5, 0x6d, 0x93, 0x13, 0xc9, //0x0000e440 .quad -3957657547586811828 + 0xea, 0x38, 0x1e, 0xcd, 0x19, 0x3a, 0xbc, 0x03, //0x0000e448 .quad 269153960225290474 + 0x5f, 0x3a, 0xce, 0x4a, 0x49, 0x78, 0x58, 0xfb, //0x0000e450 .quad -335385916056126881 + 0x24, 0xc7, 0x65, 0x40, 0xa0, 0x48, 0xab, 0x04, //0x0000e458 .quad 336442450281613092 + 0x7b, 0xe4, 0xc0, 0xce, 0x2d, 0x4b, 0x17, 0x9d, //0x0000e460 .quad -7127145225176161157 + 0x77, 0x9c, 0x3f, 0x28, 0x64, 0x0d, 0xeb, 0x62, //0x0000e468 .quad 7127805559067090039 + 0x9a, 0x1d, 0x71, 0x42, 0xf9, 0x1d, 0x5d, 0xc4, //0x0000e470 .quad -4297245513042813542 + 0x95, 0x83, 0x4f, 0x32, 0xbd, 0xd0, 0xa5, 0x3b, //0x0000e478 .quad 4298070930406474645 + 0x00, 0x65, 0x0d, 0x93, 0x77, 0x65, 0x74, 0xf5, //0x0000e480 .quad -759870872876129024 + 0x7a, 0x64, 0xe3, 0x7e, 0xec, 0x44, 0x8f, 0xca, //0x0000e488 .quad -3850783373846682502 + 0x20, 0x5f, 0xe8, 0xbb, 0x6a, 0xbf, 0x68, 0x99, //0x0000e490 .quad -7392448323188662496 + 0xcc, 0x1e, 0x4e, 0xcf, 0x13, 0x8b, 0x99, 0x7e, //0x0000e498 .quad 9122475437414293196 + 0xe8, 0x76, 0xe2, 0x6a, 0x45, 0xef, 0xc2, 0xbf, //0x0000e4a0 .quad -4628874385558440216 + 0x7f, 0xa6, 0x21, 0xc3, 0xd8, 0xed, 0x3f, 0x9e, //0x0000e4a8 .quad -7043649776941685121 + 0xa2, 0x14, 0x9b, 0xc5, 0x16, 0xab, 0xb3, 0xef, //0x0000e4b0 .quad -1174406963520662366 + 0x1f, 0x10, 0xea, 0xf3, 0x4e, 0xe9, 0xcf, 0xc5, //0x0000e4b8 .quad -4192876202749718497 + 0xe5, 0xec, 0x80, 0x3b, 0xee, 0x4a, 0xd0, 0x95, //0x0000e4c0 .quad -7651533379841495835 + 0x13, 0x4a, 0x72, 0x58, 0xd1, 0xf1, 0xa1, 0xbb, //0x0000e4c8 .quad -4926390635932268013 + 0x1f, 0x28, 0x61, 0xca, 0xa9, 0x5d, 0x44, 0xbb, //0x0000e4d0 .quad -4952730706374481889 + 0x98, 0xdc, 0x8e, 0xae, 0x45, 0x6e, 0x8a, 0x2a, //0x0000e4d8 .quad 3065383741939440792 + 0x26, 0x72, 0xf9, 0x3c, 0x14, 0x75, 0x15, 0xea, //0x0000e4e0 .quad -1579227364540714458 + 0xbe, 0x93, 0x32, 0x1a, 0xd7, 0x09, 0x2d, 0xf5, //0x0000e4e8 .quad -779956341003086914 + 0x58, 0xe7, 0x1b, 0xa6, 0x2c, 0x69, 0x4d, 0x92, //0x0000e4f0 .quad -7904546130479028392 + 0x57, 0x9c, 0x5f, 0x70, 0x26, 0x26, 0x3c, 0x59, //0x0000e4f8 .quad 6430056314514152535 + 0x2e, 0xe1, 0xa2, 0xcf, 0x77, 0xc3, 0xe0, 0xb6, //0x0000e500 .quad -5268996644671397586 + 0x6d, 0x83, 0x77, 0x0c, 0xb0, 0x2f, 0x8b, 0x6f, //0x0000e508 .quad 8037570393142690669 + 0x7a, 0x99, 0x8b, 0xc3, 0x55, 0xf4, 0x98, 0xe4, //0x0000e510 .quad -1974559787411859078 + 0x48, 0x64, 0x95, 0x0f, 0x9c, 0xfb, 0x6d, 0x0b, //0x0000e518 .quad 823590954573587528 + 0xec, 0x3f, 0x37, 0x9a, 0xb5, 0x98, 0xdf, 0x8e, //0x0000e520 .quad -8151628894773493780 + 0xad, 0x5e, 0xbd, 0x89, 0x41, 0xbd, 0x24, 0x47, //0x0000e528 .quad 5126430365035880109 + 0xe7, 0x0f, 0xc5, 0x00, 0xe3, 0x7e, 0x97, 0xb2, //0x0000e530 .quad -5577850100039479321 + 0x58, 0xb6, 0x2c, 0xec, 0x91, 0xec, 0xed, 0x58, //0x0000e538 .quad 6408037956294850136 + 0xe1, 0x53, 0xf6, 0xc0, 0x9b, 0x5e, 0x3d, 0xdf, //0x0000e540 .quad -2360626606621961247 + 0xee, 0xe3, 0x37, 0x67, 0xb6, 0x67, 0x29, 0x2f, //0x0000e548 .quad 3398361426941174766 + 0x6c, 0xf4, 0x99, 0x58, 0x21, 0x5b, 0x86, 0x8b, //0x0000e550 .quad -8392920656779807636 + 0x75, 0xee, 0x82, 0x00, 0xd2, 0xe0, 0x79, 0xbd, //0x0000e558 .quad -4793553135802847627 + 0x87, 0x71, 0xc0, 0xae, 0xe9, 0xf1, 0x67, 0xae, //0x0000e560 .quad -5879464802547371641 + 0x12, 0xaa, 0xa3, 0x80, 0x06, 0x59, 0xd8, 0xec, //0x0000e568 .quad -1380255401326171630 + 0xe9, 0x8d, 0x70, 0x1a, 0x64, 0xee, 0x01, 0xda, //0x0000e570 .quad -2737644984756826647 + 0x96, 0x94, 0xcc, 0x20, 0x48, 0x6f, 0x0e, 0xe8, //0x0000e578 .quad -1725319251657714538 + 0xb2, 0x58, 0x86, 0x90, 0xfe, 0x34, 0x41, 0x88, //0x0000e580 .quad -8628557143114098510 + 0xde, 0xdc, 0x7f, 0x14, 0x8d, 0x05, 0x09, 0x31, //0x0000e588 .quad 3533361486141316318 + 0xde, 0xee, 0xa7, 0x34, 0x3e, 0x82, 0x51, 0xaa, //0x0000e590 .quad -6174010410465235234 + 0x16, 0xd4, 0x9f, 0x59, 0xf0, 0x46, 0x4b, 0xbd, //0x0000e598 .quad -4806670179178130410 + 0x96, 0xea, 0xd1, 0xc1, 0xcd, 0xe2, 0xe5, 0xd4, //0x0000e5a0 .quad -3105826994654156138 + 0x1b, 0xc9, 0x07, 0x70, 0xac, 0x18, 0x9e, 0x6c, //0x0000e5a8 .quad 7826720331309500699 + 0x9e, 0x32, 0x23, 0x99, 0xc0, 0xad, 0x0f, 0x85, //0x0000e5b0 .quad -8858670899299929442 + 0xb1, 0xdd, 0x04, 0xc6, 0x6b, 0xcf, 0xe2, 0x03, //0x0000e5b8 .quad 280014188641050033 + 0x45, 0xff, 0x6b, 0xbf, 0x30, 0x99, 0x53, 0xa6, //0x0000e5c0 .quad -6461652605697523899 + 0x1d, 0x15, 0x86, 0xb7, 0x46, 0x83, 0xdb, 0x84, //0x0000e5c8 .quad -8873354301053463267 + 0x16, 0xff, 0x46, 0xef, 0x7c, 0x7f, 0xe8, 0xcf, //0x0000e5d0 .quad -3465379738694516970 + 0x64, 0x9a, 0x67, 0x65, 0x18, 0x64, 0x12, 0xe6, //0x0000e5d8 .quad -1868320839462053276 + 0x6e, 0x5f, 0x8c, 0x15, 0xae, 0x4f, 0xf1, 0x81, //0x0000e5e0 .quad -9083391364325154962 + 0x7f, 0xc0, 0x60, 0x3f, 0x8f, 0x7e, 0xcb, 0x4f, //0x0000e5e8 .quad 5749828502977298559 + 0x49, 0x77, 0xef, 0x9a, 0x99, 0xa3, 0x6d, 0xa2, //0x0000e5f0 .quad -6742553186979055799 + 0x9e, 0xf0, 0x38, 0x0f, 0x33, 0x5e, 0xbe, 0xe3, //0x0000e5f8 .quad -2036086408133152610 + 0x1c, 0x55, 0xab, 0x01, 0x80, 0x0c, 0x09, 0xcb, //0x0000e600 .quad -3816505465296431844 + 0xc6, 0x2c, 0x07, 0xd3, 0xbf, 0xf5, 0xad, 0x5c, //0x0000e608 .quad 6678264026688335046 + 0x63, 0x2a, 0x16, 0x02, 0xa0, 0x4f, 0xcb, 0xfd, //0x0000e610 .quad -158945813193151901 + 0xf7, 0xf7, 0xc8, 0xc7, 0x2f, 0x73, 0xd9, 0x73, //0x0000e618 .quad 8347830033360418807 + 0x7e, 0xda, 0x4d, 0x01, 0xc4, 0x11, 0x9f, 0x9e, //0x0000e620 .quad -7016870160886801794 + 0xfb, 0x9a, 0xdd, 0xdc, 0xfd, 0xe7, 0x67, 0x28, //0x0000e628 .quad 2911550761636567803 + 0x1d, 0x51, 0xa1, 0x01, 0x35, 0xd6, 0x46, 0xc6, //0x0000e630 .quad -4159401682681114339 + 0xb9, 0x01, 0x15, 0x54, 0xfd, 0xe1, 0x81, 0xb2, //0x0000e638 .quad -5583933584809066055 + 0x65, 0xa5, 0x09, 0x42, 0xc2, 0x8b, 0xd8, 0xf7, //0x0000e640 .quad -587566084924005019 + 0x27, 0x42, 0x1a, 0xa9, 0x7c, 0x5a, 0x22, 0x1f, //0x0000e648 .quad 2243455055843443239 + 0x5f, 0x07, 0x46, 0x69, 0x59, 0x57, 0xe7, 0x9a, //0x0000e650 .quad -7284757830718584993 + 0x59, 0x69, 0xb0, 0xe9, 0x8d, 0x78, 0x75, 0x33, //0x0000e658 .quad 3708002419115845977 + 0x37, 0x89, 0x97, 0xc3, 0x2f, 0x2d, 0xa1, 0xc1, //0x0000e660 .quad -4494261269970843337 + 0xaf, 0x83, 0x1c, 0x64, 0xb1, 0xd6, 0x52, 0x00, //0x0000e668 .quad 23317005467419567 + 0x84, 0x6b, 0x7d, 0xb4, 0x7b, 0x78, 0x09, 0xf2, //0x0000e670 .quad -1006140569036166268 + 0x9b, 0xa4, 0x23, 0xbd, 0x5d, 0x8c, 0x67, 0xc0, //0x0000e678 .quad -4582539761593113445 + 0x32, 0x63, 0xce, 0x50, 0x4d, 0xeb, 0x45, 0x97, //0x0000e680 .quad -7546366883288685774 + 0xe1, 0x46, 0x36, 0x96, 0xba, 0xb7, 0x40, 0xf8, //0x0000e688 .quad -558244341782001951 + 0xff, 0xfb, 0x01, 0xa5, 0x20, 0x66, 0x17, 0xbd, //0x0000e690 .quad -4821272585683469313 + 0x99, 0xd8, 0xc3, 0x3b, 0xa9, 0xe5, 0x50, 0xb6, //0x0000e698 .quad -5309491445654890343 + 0xff, 0x7a, 0x42, 0xce, 0xa8, 0x3f, 0x5d, 0xec, //0x0000e6a0 .quad -1414904713676948737 + 0xbf, 0xce, 0xb4, 0x8a, 0x13, 0x1f, 0xe5, 0xa3, //0x0000e6a8 .quad -6636864307068612929 + 0xdf, 0x8c, 0xe9, 0x80, 0xc9, 0x47, 0xba, 0x93, //0x0000e6b0 .quad -7801844473689174817 + 0x38, 0x01, 0xb1, 0x36, 0x6c, 0x33, 0x6f, 0xc6, //0x0000e6b8 .quad -4148040191917883080 + 0x17, 0xf0, 0x23, 0xe1, 0xbb, 0xd9, 0xa8, 0xb8, //0x0000e6c0 .quad -5140619573684080617 + 0x85, 0x41, 0x5d, 0x44, 0x47, 0x00, 0x0b, 0xb8, //0x0000e6c8 .quad -5185050239897353851 + 0x1d, 0xec, 0x6c, 0xd9, 0x2a, 0x10, 0xd3, 0xe6, //0x0000e6d0 .quad -1814088448677712867 + 0xe6, 0x91, 0x74, 0x15, 0x59, 0xc0, 0x0d, 0xa6, //0x0000e6d8 .quad -6481312799871692314 + 0x92, 0x13, 0xe4, 0xc7, 0x1a, 0xea, 0x43, 0x90, //0x0000e6e0 .quad -8051334308064652398 + 0x30, 0xdb, 0x68, 0xad, 0x37, 0x98, 0xc8, 0x87, //0x0000e6e8 .quad -8662506518347195600 + 0x77, 0x18, 0xdd, 0x79, 0xa1, 0xe4, 0x54, 0xb4, //0x0000e6f0 .quad -5452481866653427593 + 0xfc, 0x11, 0xc3, 0x98, 0x45, 0xbe, 0xba, 0x29, //0x0000e6f8 .quad 3006924907348169212 + 0x94, 0x5e, 0x54, 0xd8, 0xc9, 0x1d, 0x6a, 0xe1, //0x0000e700 .quad -2203916314889396588 + 0x7b, 0xd6, 0xf3, 0xfe, 0xd6, 0x6d, 0x29, 0xf4, //0x0000e708 .quad -853029884242176389 + 0x1d, 0xbb, 0x34, 0x27, 0x9e, 0x52, 0xe2, 0x8c, //0x0000e710 .quad -8294976724446954723 + 0x0d, 0x66, 0x58, 0x5f, 0xa6, 0xe4, 0x99, 0x18, //0x0000e718 .quad 1772699331562333709 + 0xe4, 0xe9, 0x01, 0xb1, 0x45, 0xe7, 0x1a, 0xb0, //0x0000e720 .quad -5757034887131305500 + 0x90, 0x7f, 0x2e, 0xf7, 0xcf, 0x5d, 0xc0, 0x5e, //0x0000e728 .quad 6827560182880305040 + 0x5d, 0x64, 0x42, 0x1d, 0x17, 0xa1, 0x21, 0xdc, //0x0000e730 .quad -2584607590486743971 + 0x74, 0x1f, 0xfa, 0xf4, 0x43, 0x75, 0x70, 0x76, //0x0000e738 .quad 8534450228600381300 + 0xba, 0x7e, 0x49, 0x72, 0xae, 0x04, 0x95, 0x89, //0x0000e740 .quad -8532908771695296838 + 0xa9, 0x53, 0x1c, 0x79, 0x4a, 0x49, 0x06, 0x6a, //0x0000e748 .quad 7639874402088932265 + 0x69, 0xde, 0xdb, 0x0e, 0xda, 0x45, 0xfa, 0xab, //0x0000e750 .quad -6054449946191733143 + 0x93, 0x68, 0x63, 0x17, 0x9d, 0xdb, 0x87, 0x04, //0x0000e758 .quad 326470965756389523 + 0x03, 0xd6, 0x92, 0x92, 0x50, 0xd7, 0xf8, 0xd6, //0x0000e760 .quad -2956376414312278525 + 0xb7, 0x42, 0x3c, 0x5d, 0x84, 0xd2, 0xa9, 0x45, //0x0000e768 .quad 5019774725622874807 + 0xc2, 0xc5, 0x9b, 0x5b, 0x92, 0x86, 0x5b, 0x86, //0x0000e770 .quad -8765264286586255934 + 0xb3, 0xa9, 0x45, 0xba, 0x92, 0x23, 0x8a, 0x0b, //0x0000e778 .quad 831516194300602803 + 0x32, 0xb7, 0x82, 0xf2, 0x36, 0x68, 0xf2, 0xa7, //0x0000e780 .quad -6344894339805432014 + 0x1f, 0x14, 0xd7, 0x68, 0x77, 0xac, 0x6c, 0x8e, //0x0000e788 .quad -8183976793979022305 + 0xff, 0x64, 0x23, 0xaf, 0x44, 0x02, 0xef, 0xd1, //0x0000e790 .quad -3319431906329402113 + 0x27, 0xd9, 0x0c, 0x43, 0x95, 0xd7, 0x07, 0x32, //0x0000e798 .quad 3605087062808385831 + 0x1f, 0x1f, 0x76, 0xed, 0x6a, 0x61, 0x35, 0x83, //0x0000e7a0 .quad -8992173969096958177 + 0xb9, 0x07, 0xe8, 0x49, 0xbd, 0xe6, 0x44, 0x7f, //0x0000e7a8 .quad 9170708441896323001 + 0xe7, 0xa6, 0xd3, 0xa8, 0xc5, 0xb9, 0x02, 0xa4, //0x0000e7b0 .quad -6628531442943809817 + 0xa7, 0x09, 0x62, 0x9c, 0x6c, 0x20, 0x16, 0x5f, //0x0000e7b8 .quad 6851699533943015847 + 0xa1, 0x90, 0x08, 0x13, 0x37, 0x68, 0x03, 0xcd, //0x0000e7c0 .quad -3673978285252374367 + 0x10, 0x8c, 0x7a, 0xc3, 0x87, 0xa8, 0xdb, 0x36, //0x0000e7c8 .quad 3952938399001381904 + 0x64, 0x5a, 0xe5, 0x6b, 0x22, 0x21, 0x22, 0x80, //0x0000e7d0 .quad -9213765455923815836 + 0x8a, 0x97, 0x2c, 0xda, 0x54, 0x49, 0x49, 0xc2, //0x0000e7d8 .quad -4446942528265218166 + 0xfd, 0xb0, 0xde, 0x06, 0x6b, 0xa9, 0x2a, 0xa0, //0x0000e7e0 .quad -6905520801477381891 + 0x6d, 0xbd, 0xb7, 0x10, 0xaa, 0x9b, 0xdb, 0xf2, //0x0000e7e8 .quad -946992141904134803 + 0x3d, 0x5d, 0x96, 0xc8, 0xc5, 0x53, 0x35, 0xc8, //0x0000e7f0 .quad -4020214983419339459 + 0xc8, 0xac, 0xe5, 0x94, 0x94, 0x82, 0x92, 0x6f, //0x0000e7f8 .quad 8039631859474607304 + 0x8c, 0xf4, 0xbb, 0x3a, 0xb7, 0xa8, 0x42, 0xfa, //0x0000e800 .quad -413582710846786420 + 0xfa, 0x17, 0x1f, 0xba, 0x39, 0x23, 0x77, 0xcb, //0x0000e808 .quad -3785518230938904582 + 0xd7, 0x78, 0xb5, 0x84, 0x72, 0xa9, 0x69, 0x9c, //0x0000e810 .quad -7176018221920323369 + 0xfc, 0x6e, 0x53, 0x14, 0x04, 0x76, 0x2a, 0xff, //0x0000e818 .quad -60105885123121412 + 0x0d, 0xd7, 0xe2, 0x25, 0xcf, 0x13, 0x84, 0xc3, //0x0000e820 .quad -4358336758973016307 + 0xbb, 0x4a, 0x68, 0x19, 0x85, 0x13, 0xf5, 0xfe, //0x0000e828 .quad -75132356403901765 + 0xd1, 0x8c, 0x5b, 0xef, 0xc2, 0x18, 0x65, 0xf4, //0x0000e830 .quad -836234930288882479 + 0x6a, 0x5d, 0xc2, 0x5f, 0x66, 0x58, 0xb2, 0x7e, //0x0000e838 .quad 9129456591349898602 + 0x02, 0x38, 0x99, 0xd5, 0x79, 0x2f, 0xbf, 0x98, //0x0000e840 .quad -7440175859071633406 + 0x62, 0x7a, 0xd9, 0xfb, 0x3f, 0x77, 0x2f, 0xef, //0x0000e848 .quad -1211618658047395230 + 0x03, 0x86, 0xff, 0x4a, 0x58, 0xfb, 0xee, 0xbe, //0x0000e850 .quad -4688533805412153853 + 0xfb, 0xd8, 0xcf, 0xfa, 0x0f, 0x55, 0xfb, 0xaa, //0x0000e858 .quad -6126209340986631941 + 0x84, 0x67, 0xbf, 0x5d, 0x2e, 0xba, 0xaa, 0xee, //0x0000e860 .quad -1248981238337804412 + 0x39, 0xcf, 0x83, 0xf9, 0x53, 0x2a, 0xba, 0x95, //0x0000e868 .quad -7657761676233289927 + 0xb2, 0xa0, 0x97, 0xfa, 0x5c, 0xb4, 0x2a, 0x95, //0x0000e870 .quad -7698142301602209614 + 0x84, 0x61, 0xf2, 0x7b, 0x74, 0x5a, 0x94, 0xdd, //0x0000e878 .quad -2480258038432112252 + 0xdf, 0x88, 0x3d, 0x39, 0x74, 0x61, 0x75, 0xba, //0x0000e880 .quad -5010991858575374113 + 0xe5, 0xf9, 0xee, 0x9a, 0x11, 0x71, 0xf9, 0x94, //0x0000e888 .quad -7712008566467528219 + 0x17, 0xeb, 0x8c, 0x47, 0xd1, 0xb9, 0x12, 0xe9, //0x0000e890 .quad -1652053804791829737 + 0x5e, 0xb8, 0xaa, 0x01, 0x56, 0xcd, 0x37, 0x7a, //0x0000e898 .quad 8806733365625141342 + 0xee, 0x12, 0xb8, 0xcc, 0x22, 0xb4, 0xab, 0x91, //0x0000e8a0 .quad -7950062655635975442 + 0x3b, 0xb3, 0x0a, 0xc1, 0x55, 0xe0, 0x62, 0xac, //0x0000e8a8 .quad -6025006692552756421 + 0xaa, 0x17, 0xe6, 0x7f, 0x2b, 0xa1, 0x16, 0xb6, //0x0000e8b0 .quad -5325892301117581398 + 0x0a, 0x60, 0x4d, 0x31, 0x6b, 0x98, 0x7b, 0x57, //0x0000e8b8 .quad 6303799689591218186 + 0x94, 0x9d, 0xdf, 0x5f, 0x76, 0x49, 0x9c, 0xe3, //0x0000e8c0 .quad -2045679357969588844 + 0x0c, 0xb8, 0xa0, 0xfd, 0x85, 0x7e, 0x5a, 0xed, //0x0000e8c8 .quad -1343622424865753076 + 0x7d, 0xc2, 0xeb, 0xfb, 0xe9, 0xad, 0x41, 0x8e, //0x0000e8d0 .quad -8196078626372074883 + 0x08, 0x73, 0x84, 0xbe, 0x13, 0x8f, 0x58, 0x14, //0x0000e8d8 .quad 1466078993672598280 + 0x1c, 0xb3, 0xe6, 0x7a, 0x64, 0x19, 0xd2, 0xb1, //0x0000e8e0 .quad -5633412264537705700 + 0xc9, 0x8f, 0x25, 0xae, 0xd8, 0xb2, 0x6e, 0x59, //0x0000e8e8 .quad 6444284760518135753 + 0xe3, 0x5f, 0xa0, 0x99, 0xbd, 0x9f, 0x46, 0xde, //0x0000e8f0 .quad -2430079312244744221 + 0xbc, 0xf3, 0xae, 0xd9, 0x8e, 0x5f, 0xca, 0x6f, //0x0000e8f8 .quad 8055355950647669692 + 0xee, 0x3b, 0x04, 0x80, 0xd6, 0x23, 0xec, 0x8a, //0x0000e900 .quad -8436328597794046994 + 0x55, 0x58, 0x0d, 0x48, 0xb9, 0x7b, 0xde, 0x25, //0x0000e908 .quad 2728754459941099605 + 0xe9, 0x4a, 0x05, 0x20, 0xcc, 0x2c, 0xa7, 0xad, //0x0000e910 .quad -5933724728815170839 + 0x6b, 0xae, 0x10, 0x9a, 0xa7, 0x1a, 0x56, 0xaf, //0x0000e918 .quad -5812428961928401301 + 0xa4, 0x9d, 0x06, 0x28, 0xff, 0xf7, 0x10, 0xd9, //0x0000e920 .quad -2805469892591575644 + 0x05, 0xda, 0x94, 0x80, 0x51, 0xa1, 0x2b, 0x1b, //0x0000e928 .quad 1957835834444274181 + 0x86, 0x22, 0x04, 0x79, 0xff, 0x9a, 0xaa, 0x87, //0x0000e930 .quad -8670947710510816634 + 0x43, 0x08, 0x5d, 0xf0, 0xd2, 0x44, 0xfb, 0x90, //0x0000e938 .quad -7999724640327104445 + 0x28, 0x2b, 0x45, 0x57, 0xbf, 0x41, 0x95, 0xa9, //0x0000e940 .quad -6226998619711132888 + 0x54, 0x4a, 0x74, 0xac, 0x07, 0x16, 0x3a, 0x35, //0x0000e948 .quad 3835402254873283156 + 0xf2, 0x75, 0x16, 0x2d, 0x2f, 0x92, 0xfa, 0xd3, //0x0000e950 .quad -3172062256211528206 + 0xe9, 0x5c, 0x91, 0x97, 0x89, 0x9b, 0x88, 0x42, //0x0000e958 .quad 4794252818591603945 + 0xb7, 0x09, 0x2e, 0x7c, 0x5d, 0x9b, 0x7c, 0x84, //0x0000e960 .quad -8900067937773286985 + 0x12, 0xda, 0xba, 0xfe, 0x35, 0x61, 0x95, 0x69, //0x0000e968 .quad 7608094030047140370 + 0x25, 0x8c, 0x39, 0xdb, 0x34, 0xc2, 0x9b, 0xa5, //0x0000e970 .quad -6513398903789220827 + 0x96, 0x90, 0x69, 0x7e, 0x83, 0xb9, 0xfa, 0x43, //0x0000e978 .quad 4898431519131537558 + 0x2e, 0xef, 0x07, 0x12, 0xc2, 0xb2, 0x02, 0xcf, //0x0000e980 .quad -3530062611309138130 + 0xbc, 0xf4, 0x03, 0x5e, 0xe4, 0x67, 0xf9, 0x94, //0x0000e988 .quad -7712018656367741764 + 0x7d, 0xf5, 0x44, 0x4b, 0xb9, 0xaf, 0x61, 0x81, //0x0000e990 .quad -9123818159709293187 + 0xf6, 0x78, 0xc2, 0xba, 0xee, 0xe0, 0x1b, 0x1d, //0x0000e998 .quad 2097517367411243254 + 0xdc, 0x32, 0x16, 0x9e, 0xa7, 0x1b, 0xba, 0xa1, //0x0000e9a0 .quad -6793086681209228580 + 0x33, 0x17, 0x73, 0x69, 0x2a, 0xd9, 0x62, 0x64, //0x0000e9a8 .quad 7233582727691441971 + 0x93, 0xbf, 0x9b, 0x85, 0x91, 0xa2, 0x28, 0xca, //0x0000e9b0 .quad -3879672333084147821 + 0xff, 0xdc, 0xcf, 0x03, 0x75, 0x8f, 0x7b, 0x7d, //0x0000e9b8 .quad 9041978409614302463 + 0x78, 0xaf, 0x02, 0xe7, 0x35, 0xcb, 0xb2, 0xfc, //0x0000e9c0 .quad -237904397927796872 + 0x3f, 0xd4, 0xc3, 0x44, 0x52, 0x73, 0xda, 0x5c, //0x0000e9c8 .quad 6690786993590490175 + 0xab, 0xad, 0x61, 0xb0, 0x01, 0xbf, 0xef, 0x9d, //0x0000e9d0 .quad -7066219276345954901 + 0xa8, 0x64, 0xfa, 0x6a, 0x13, 0x88, 0x08, 0x3a, //0x0000e9d8 .quad 4181741870994056360 + 0x16, 0x19, 0x7a, 0x1c, 0xc2, 0xae, 0x6b, 0xc5, //0x0000e9e0 .quad -4221088077005055722 + 0xd1, 0xfd, 0xb8, 0x45, 0x18, 0xaa, 0x8a, 0x08, //0x0000e9e8 .quad 615491320315182545 + 0x5b, 0x9f, 0x98, 0xa3, 0x72, 0x9a, 0xc6, 0xf6, //0x0000e9f0 .quad -664674077828931749 + 0x46, 0x3d, 0x27, 0x57, 0x9e, 0x54, 0xad, 0x8a, //0x0000e9f8 .quad -8454007886460797626 + 0x99, 0x63, 0x3f, 0xa6, 0x87, 0x20, 0x3c, 0x9a, //0x0000ea00 .quad -7332950326284164199 + 0x4c, 0x86, 0x78, 0xf6, 0xe2, 0x54, 0xac, 0x36, //0x0000ea08 .quad 3939617107816777292 + 0x7f, 0x3c, 0xcf, 0x8f, 0xa9, 0x28, 0xcb, 0xc0, //0x0000ea10 .quad -4554501889427817345 + 0xde, 0xa7, 0x16, 0xb4, 0x1b, 0x6a, 0x57, 0x84, //0x0000ea18 .quad -8910536670511192098 + 0x9f, 0x0b, 0xc3, 0xf3, 0xd3, 0xf2, 0xfd, 0xf0, //0x0000ea20 .quad -1081441343357383777 + 0xd6, 0x51, 0x1c, 0xa1, 0xa2, 0x44, 0x6d, 0x65, //0x0000ea28 .quad 7308573235570561494 + 0x43, 0xe7, 0x59, 0x78, 0xc4, 0xb7, 0x9e, 0x96, //0x0000ea30 .quad -7593429867239446717 + 0x26, 0xb3, 0xb1, 0xa4, 0xe5, 0x4a, 0x64, 0x9f, //0x0000ea38 .quad -6961356773836868826 + 0x14, 0x61, 0x70, 0x96, 0xb5, 0x65, 0x46, 0xbc, //0x0000ea40 .quad -4880101315621920492 + 0xef, 0x1f, 0xde, 0x0d, 0x9f, 0x5d, 0x3d, 0x87, //0x0000ea48 .quad -8701695967296086033 + 0x59, 0x79, 0x0c, 0xfc, 0x22, 0xff, 0x57, 0xeb, //0x0000ea50 .quad -1488440626100012711 + 0xeb, 0xa7, 0x55, 0xd1, 0x06, 0xb5, 0x0c, 0xa9, //0x0000ea58 .quad -6265433940692719637 + 0xd8, 0xcb, 0x87, 0xdd, 0x75, 0xff, 0x16, 0x93, //0x0000ea60 .quad -7847804418953589800 + 0xf3, 0x88, 0xd5, 0x42, 0x24, 0xf1, 0xa7, 0x09, //0x0000ea68 .quad 695789805494438131 + 0xce, 0xbe, 0xe9, 0x54, 0x53, 0xbf, 0xdc, 0xb7, //0x0000ea70 .quad -5198069505264599346 + 0x30, 0xeb, 0x8a, 0x53, 0x6d, 0xed, 0x11, 0x0c, //0x0000ea78 .quad 869737256868047664 + 0x81, 0x2e, 0x24, 0x2a, 0x28, 0xef, 0xd3, 0xe5, //0x0000ea80 .quad -1885900863153361279 + 0xfb, 0xa5, 0x6d, 0xa8, 0xc8, 0x68, 0x16, 0x8f, //0x0000ea88 .quad -8136200465769716229 + 0x10, 0x9d, 0x56, 0x1a, 0x79, 0x75, 0xa4, 0x8f, //0x0000ea90 .quad -8096217067111932656 + 0xbd, 0x87, 0x44, 0x69, 0x7d, 0x01, 0x6e, 0xf9, //0x0000ea98 .quad -473439272678684739 + 0x55, 0x44, 0xec, 0x60, 0xd7, 0x92, 0x8d, 0xb3, //0x0000eaa0 .quad -5508585315462527915 + 0xad, 0xa9, 0x95, 0xc3, 0xdc, 0x81, 0xc9, 0x37, //0x0000eaa8 .quad 4019886927579031981 + 0x6a, 0x55, 0x27, 0x39, 0x8d, 0xf7, 0x70, 0xe0, //0x0000eab0 .quad -2274045625900771990 + 0x18, 0x14, 0x7b, 0xf4, 0x53, 0xe2, 0xbb, 0x85, //0x0000eab8 .quad -8810199395808373736 + 0x62, 0x95, 0xb8, 0x43, 0xb8, 0x9a, 0x46, 0x8c, //0x0000eac0 .quad -8338807543829064350 + 0x8f, 0xec, 0xcc, 0x78, 0x74, 0x6d, 0x95, 0x93, //0x0000eac8 .quad -7812217631593927537 + 0xbb, 0xba, 0xa6, 0x54, 0x66, 0x41, 0x58, 0xaf, //0x0000ead0 .quad -5811823411358942533 + 0xb3, 0x27, 0x00, 0x97, 0xd1, 0xc8, 0x7a, 0x38, //0x0000ead8 .quad 4069786015789754291 + 0x6a, 0x69, 0xd0, 0xe9, 0xbf, 0x51, 0x2e, 0xdb, //0x0000eae0 .quad -2653093245771290262 + 0x9f, 0x31, 0xc0, 0xfc, 0x05, 0x7b, 0x99, 0x06, //0x0000eae8 .quad 475546501309804959 + 0xe2, 0x41, 0x22, 0xf2, 0x17, 0xf3, 0xfc, 0x88, //0x0000eaf0 .quad -8575712306248138270 + 0x04, 0x1f, 0xf8, 0xbd, 0xe3, 0xec, 0x1f, 0x44, //0x0000eaf8 .quad 4908902581746016004 + 0x5a, 0xd2, 0xaa, 0xee, 0xdd, 0x2f, 0x3c, 0xab, //0x0000eb00 .quad -6107954364382784934 + 0xc4, 0x26, 0x76, 0xad, 0x1c, 0xe8, 0x27, 0xd5, //0x0000eb08 .quad -3087243809672255804 + 0xf1, 0x86, 0x55, 0x6a, 0xd5, 0x3b, 0x0b, 0xd6, //0x0000eb10 .quad -3023256937051093263 + 0x75, 0xb0, 0xd3, 0xd8, 0x23, 0xe2, 0x71, 0x8a, //0x0000eb18 .quad -8470740780517707659 + 0x56, 0x74, 0x75, 0x62, 0x65, 0x05, 0xc7, 0x85, //0x0000eb20 .quad -8807064613298015146 + 0x4a, 0x4e, 0x84, 0x67, 0x56, 0x2d, 0x87, 0xf6, //0x0000eb28 .quad -682526969396179382 + 0x6c, 0xd1, 0x12, 0xbb, 0xbe, 0xc6, 0x38, 0xa7, //0x0000eb30 .quad -6397144748195131028 + 0xdc, 0x61, 0x65, 0x01, 0xac, 0xf8, 0x28, 0xb4, //0x0000eb38 .quad -5464844730172612132 + 0xc7, 0x85, 0xd7, 0x69, 0x6e, 0xf8, 0x06, 0xd1, //0x0000eb40 .quad -3384744916816525881 + 0x53, 0xba, 0xbe, 0x01, 0xd7, 0x36, 0x33, 0xe1, //0x0000eb48 .quad -2219369894288377261 + 0x9c, 0xb3, 0x26, 0x02, 0x45, 0x5b, 0xa4, 0x82, //0x0000eb50 .quad -9032994600651410532 + 0x74, 0x34, 0x17, 0x61, 0x46, 0x02, 0xc0, 0xec, //0x0000eb58 .quad -1387106183930235788 + 0x84, 0x60, 0xb0, 0x42, 0x16, 0x72, 0x4d, 0xa3, //0x0000eb60 .quad -6679557232386875260 + 0x91, 0x01, 0x5d, 0xf9, 0xd7, 0x02, 0xf0, 0x27, //0x0000eb68 .quad 2877803288514593169 + 0xa5, 0x78, 0x5c, 0xd3, 0x9b, 0xce, 0x20, 0xcc, //0x0000eb70 .quad -3737760522056206171 + 0xf5, 0x41, 0xb4, 0xf7, 0x8d, 0x03, 0xec, 0x31, //0x0000eb78 .quad 3597254110643241461 + 0xce, 0x96, 0x33, 0xc8, 0x42, 0x02, 0x29, 0xff, //0x0000eb80 .quad -60514634142869810 + 0x72, 0x52, 0xa1, 0x75, 0x71, 0x04, 0x67, 0x7e, //0x0000eb88 .quad 9108253656731439730 + 0x41, 0x3e, 0x20, 0xbd, 0x69, 0xa1, 0x79, 0x9f, //0x0000eb90 .quad -6955350673980375487 + 0x87, 0xd3, 0x84, 0xe9, 0xc6, 0x62, 0x00, 0x0f, //0x0000eb98 .quad 1080972517029761927 + 0xd1, 0x4d, 0x68, 0x2c, 0xc4, 0x09, 0x58, 0xc7, //0x0000eba0 .quad -4082502324048081455 + 0x69, 0x08, 0xe6, 0xa3, 0x78, 0x7b, 0xc0, 0x52, //0x0000eba8 .quad 5962901664714590313 + 0x45, 0x61, 0x82, 0x37, 0x35, 0x0c, 0x2e, 0xf9, //0x0000ebb0 .quad -491441886632713915 + 0x83, 0x8a, 0xdf, 0xcc, 0x56, 0x9a, 0x70, 0xa7, //0x0000ebb8 .quad -6381430974388925821 + 0xcb, 0x7c, 0xb1, 0x42, 0xa1, 0xc7, 0xbc, 0x9b, //0x0000ebc0 .quad -7224680206786528053 + 0x92, 0xb6, 0x0b, 0x40, 0x76, 0x60, 0xa6, 0x88, //0x0000ebc8 .quad -8600080377420466542 + 0xfe, 0xdb, 0x5d, 0x93, 0x89, 0xf9, 0xab, 0xc2, //0x0000ebd0 .quad -4419164240055772162 + 0x36, 0xa4, 0x0e, 0xd0, 0x93, 0xf8, 0xcf, 0x6a, //0x0000ebd8 .quad 7696643601933968438 + 0xfe, 0x52, 0x35, 0xf8, 0xeb, 0xf7, 0x56, 0xf3, //0x0000ebe0 .quad -912269281642327298 + 0x44, 0x4d, 0x12, 0xc4, 0xb8, 0xf6, 0x83, 0x05, //0x0000ebe8 .quad 397432465562684740 + 0xde, 0x53, 0x21, 0x7b, 0xf3, 0x5a, 0x16, 0x98, //0x0000ebf0 .quad -7487697328667536418 + 0x4b, 0x70, 0x8b, 0x7a, 0x33, 0x7a, 0x72, 0xc3, //0x0000ebf8 .quad -4363290727450709941 + 0xd6, 0xa8, 0xe9, 0x59, 0xb0, 0xf1, 0x1b, 0xbe, //0x0000ec00 .quad -4747935642407032618 + 0x5d, 0x4c, 0x2e, 0x59, 0xc0, 0x18, 0x4f, 0x74, //0x0000ec08 .quad 8380944645968776285 + 0x0c, 0x13, 0x64, 0x70, 0x1c, 0xee, 0xa2, 0xed, //0x0000ec10 .quad -1323233534581402868 + 0x74, 0xdf, 0x79, 0x6f, 0xf0, 0xde, 0x62, 0x11, //0x0000ec18 .quad 1252808770606194548 + 0xe7, 0x8b, 0x3e, 0xc6, 0xd1, 0xd4, 0x85, 0x94, //0x0000ec20 .quad -7744549986754458649 + 0xa9, 0x2b, 0xac, 0x45, 0x56, 0xcb, 0xdd, 0x8a, //0x0000ec28 .quad -8440366555225904215 + 0xe1, 0x2e, 0xce, 0x37, 0x06, 0x4a, 0xa7, 0xb9, //0x0000ec30 .quad -5069001465015685407 + 0x93, 0x36, 0x17, 0xd7, 0x2b, 0x3e, 0x95, 0x6d, //0x0000ec38 .quad 7896285879677171347 + 0x99, 0xba, 0xc1, 0xc5, 0x87, 0x1c, 0x11, 0xe8, //0x0000ec40 .quad -1724565812842218855 + 0x38, 0x04, 0xdd, 0xcc, 0xb6, 0x8d, 0xfa, 0xc8, //0x0000ec48 .quad -3964700705685699528 + 0xa0, 0x14, 0x99, 0xdb, 0xd4, 0xb1, 0x0a, 0x91, //0x0000ec50 .quad -7995382660667468640 + 0xa3, 0x22, 0x0a, 0x40, 0x92, 0x98, 0x9c, 0x1d, //0x0000ec58 .quad 2133748077373825699 + 0xc8, 0x59, 0x7f, 0x12, 0x4a, 0x5e, 0x4d, 0xb5, //0x0000ec60 .quad -5382542307406947896 + 0x4c, 0xab, 0x0c, 0xd0, 0xb6, 0xbe, 0x03, 0x25, //0x0000ec68 .quad 2667185096717282124 + 0x3a, 0x30, 0x1f, 0x97, 0xdc, 0xb5, 0xa0, 0xe2, //0x0000ec70 .quad -2116491865831296966 + 0x1e, 0xd6, 0x0f, 0x84, 0x64, 0xae, 0x44, 0x2e, //0x0000ec78 .quad 3333981370896602654 + 0x24, 0x7e, 0x73, 0xde, 0xa9, 0x71, 0xa4, 0x8d, //0x0000ec80 .quad -8240336443785642460 + 0xd3, 0xe5, 0x89, 0xd2, 0xfe, 0xec, 0xea, 0x5c, //0x0000ec88 .quad 6695424375237764563 + 0xad, 0x5d, 0x10, 0x56, 0x14, 0x8e, 0x0d, 0xb1, //0x0000ec90 .quad -5688734536304665171 + 0x48, 0x5f, 0x2c, 0x87, 0x3e, 0xa8, 0x25, 0x74, //0x0000ec98 .quad 8369280469047205704 + 0x18, 0x75, 0x94, 0x6b, 0x99, 0xf1, 0x50, 0xdd, //0x0000eca0 .quad -2499232151953443560 + 0x1a, 0x77, 0xf7, 0x28, 0x4e, 0x12, 0x2f, 0xd1, //0x0000eca8 .quad -3373457468973156582 + 0x2f, 0xc9, 0x3c, 0xe3, 0xff, 0x96, 0x52, 0x8a, //0x0000ecb0 .quad -8479549122611984081 + 0x70, 0xaa, 0x9a, 0xd9, 0x70, 0x6b, 0xbd, 0x82, //0x0000ecb8 .quad -9025939945749304720 + 0x7b, 0xfb, 0x0b, 0xdc, 0xbf, 0x3c, 0xe7, 0xac, //0x0000ecc0 .quad -5987750384837592197 + 0x0c, 0x55, 0x01, 0x10, 0x4d, 0xc6, 0x6c, 0x63, //0x0000ecc8 .quad 7164319141522920716 + 0x5a, 0xfa, 0x0e, 0xd3, 0xef, 0x0b, 0x21, 0xd8, //0x0000ecd0 .quad -2873001962619602342 + 0x4f, 0xaa, 0x01, 0x54, 0xe0, 0xf7, 0x47, 0x3c, //0x0000ecd8 .quad 4343712908476262991 + 0x78, 0x5c, 0xe9, 0xe3, 0x75, 0xa7, 0x14, 0x87, //0x0000ece0 .quad -8713155254278333320 + 0x72, 0x0a, 0x81, 0x34, 0xec, 0xfa, 0xac, 0x65, //0x0000ece8 .quad 7326506586225052274 + 0x96, 0xb3, 0xe3, 0x5c, 0x53, 0xd1, 0xd9, 0xa8, //0x0000ecf0 .quad -6279758049420528746 + 0x0e, 0x4d, 0xa1, 0x41, 0xa7, 0x39, 0x18, 0x7f, //0x0000ecf8 .quad 9158133232781315342 + 0x7c, 0xa0, 0x1c, 0x34, 0xa8, 0x45, 0x10, 0xd3, //0x0000ed00 .quad -3238011543348273028 + 0x51, 0xa0, 0x09, 0x12, 0x11, 0x48, 0xde, 0x1e, //0x0000ed08 .quad 2224294504121868369 + 0x4d, 0xe4, 0x91, 0x20, 0x89, 0x2b, 0xea, 0x83, //0x0000ed10 .quad -8941286242233752499 + 0x33, 0x04, 0x46, 0xab, 0x0a, 0xed, 0x4a, 0x93, //0x0000ed18 .quad -7833187971778608077 + 0x60, 0x5d, 0xb6, 0x68, 0x6b, 0xb6, 0xe4, 0xa4, //0x0000ed20 .quad -6564921784364802720 + 0x40, 0x85, 0x17, 0x56, 0x4d, 0xa8, 0x1d, 0xf8, //0x0000ed28 .quad -568112927868484288 + 0xb9, 0xf4, 0xe3, 0x42, 0x06, 0xe4, 0x1d, 0xce, //0x0000ed30 .quad -3594466212028615495 + 0x8f, 0x66, 0x9d, 0xab, 0x60, 0x12, 0x25, 0x36, //0x0000ed38 .quad 3901544858591782543 + 0xf3, 0x78, 0xce, 0xe9, 0x83, 0xae, 0xd2, 0x80, //0x0000ed40 .quad -9164070410158966541 + 0x1a, 0x60, 0x42, 0x6b, 0x7c, 0x2b, 0xd7, 0xc1, //0x0000ed48 .quad -4479063491021217766 + 0x30, 0x17, 0x42, 0xe4, 0x24, 0x5a, 0x07, 0xa1, //0x0000ed50 .quad -6843401994271320272 + 0x20, 0xf8, 0x12, 0x86, 0x5b, 0xf6, 0x4c, 0xb2, //0x0000ed58 .quad -5598829363776522208 + 0xfc, 0x9c, 0x52, 0x1d, 0xae, 0x30, 0x49, 0xc9, //0x0000ed60 .quad -3942566474411762436 + 0x28, 0xb6, 0x97, 0x67, 0xf2, 0x33, 0xe0, 0xde, //0x0000ed68 .quad -2386850686293264856 + 0x3c, 0x44, 0xa7, 0xa4, 0xd9, 0x7c, 0x9b, 0xfb, //0x0000ed70 .quad -316522074587315140 + 0xb2, 0xa3, 0x7d, 0x01, 0xef, 0x40, 0x98, 0x16, //0x0000ed78 .quad 1628122660560806834 + 0xa5, 0x8a, 0xe8, 0x06, 0x08, 0x2e, 0x41, 0x9d, //0x0000ed80 .quad -7115355324258153819 + 0x4f, 0x86, 0xee, 0x60, 0x95, 0x28, 0x1f, 0x8e, //0x0000ed88 .quad -8205795374004271537 + 0x4e, 0xad, 0xa2, 0x08, 0x8a, 0x79, 0x91, 0xc4, //0x0000ed90 .quad -4282508136895304370 + 0xe3, 0x27, 0x2a, 0xb9, 0xba, 0xf2, 0xa6, 0xf1, //0x0000ed98 .quad -1033872180650563613 + 0xa2, 0x58, 0xcb, 0x8a, 0xec, 0xd7, 0xb5, 0xf5, //0x0000eda0 .quad -741449152691742558 + 0xdc, 0xb1, 0x74, 0x67, 0x69, 0xaf, 0x10, 0xae, //0x0000eda8 .quad -5904026244240592420 + 0x65, 0x17, 0xbf, 0xd6, 0xf3, 0xa6, 0x91, 0x99, //0x0000edb0 .quad -7380934748073420955 + 0x2a, 0xef, 0xa8, 0xe0, 0xa1, 0x6d, 0xca, 0xac, //0x0000edb8 .quad -5995859411864064214 + 0x3f, 0xdd, 0x6e, 0xcc, 0xb0, 0x10, 0xf6, 0xbf, //0x0000edc0 .quad -4614482416664388289 + 0xf4, 0x2a, 0xd3, 0x58, 0x0a, 0x09, 0xfd, 0x17, //0x0000edc8 .quad 1728547772024695540 + 0x8e, 0x94, 0x8a, 0xff, 0xdc, 0x94, 0xf3, 0xef, //0x0000edd0 .quad -1156417002403097458 + 0xb1, 0xf5, 0x07, 0xef, 0x4c, 0x4b, 0xfc, 0xdd, //0x0000edd8 .quad -2451001303396518479 + 0xd9, 0x9c, 0xb6, 0x1f, 0x0a, 0x3d, 0xf8, 0x95, //0x0000ede0 .quad -7640289654143017767 + 0x8f, 0xf9, 0x64, 0x15, 0x10, 0xaf, 0xbd, 0x4a, //0x0000ede8 .quad 5385653213018257807 + 0x0f, 0x44, 0xa4, 0xa7, 0x4c, 0x4c, 0x76, 0xbb, //0x0000edf0 .quad -4938676049251384305 + 0xf2, 0x37, 0xbe, 0x1a, 0xd4, 0x1a, 0x6d, 0x9d, //0x0000edf8 .quad -7102991539009341454 + 0x13, 0x55, 0x8d, 0xd1, 0x5f, 0xdf, 0x53, 0xea, //0x0000ee00 .quad -1561659043136842477 + 0xee, 0xc5, 0x6d, 0x21, 0x89, 0x61, 0xc8, 0x84, //0x0000ee08 .quad -8878739423761676818 + 0x2c, 0x55, 0xf8, 0xe2, 0x9b, 0x6b, 0x74, 0x92, //0x0000ee10 .quad -7893565929601608404 + 0xb5, 0x9b, 0xe4, 0xb4, 0xf5, 0x3c, 0xfd, 0x32, //0x0000ee18 .quad 3674159897003727797 + 0x77, 0x6a, 0xb6, 0xdb, 0x82, 0x86, 0x11, 0xb7, //0x0000ee20 .quad -5255271393574622601 + 0xa2, 0xc2, 0x1d, 0x22, 0x33, 0x8c, 0xbc, 0x3f, //0x0000ee28 .quad 4592699871254659746 + 0x15, 0x05, 0xa4, 0x92, 0x23, 0xe8, 0xd5, 0xe4, //0x0000ee30 .quad -1957403223540890347 + 0x4b, 0x33, 0xa5, 0xea, 0x3f, 0xaf, 0xab, 0x0f, //0x0000ee38 .quad 1129188820640936779 + 0x2d, 0x83, 0xa6, 0x3b, 0x16, 0xb1, 0x05, 0x8f, //0x0000ee40 .quad -8140906042354138323 + 0x0f, 0x40, 0xa7, 0xf2, 0x87, 0x4d, 0xcb, 0x29, //0x0000ee48 .quad 3011586022114279439 + 0xf8, 0x23, 0x90, 0xca, 0x5b, 0x1d, 0xc7, 0xb2, //0x0000ee50 .quad -5564446534515285000 + 0x13, 0x10, 0x51, 0xef, 0xe9, 0x20, 0x3e, 0x74, //0x0000ee58 .quad 8376168546070237203 + 0xf6, 0x2c, 0x34, 0xbd, 0xb2, 0xe4, 0x78, 0xdf, //0x0000ee60 .quad -2343872149716718346 + 0x17, 0x54, 0x25, 0x6b, 0x24, 0xa9, 0x4d, 0x91, //0x0000ee68 .quad -7976533391121755113 + 0x1a, 0x9c, 0x40, 0xb6, 0xef, 0x8e, 0xab, 0x8b, //0x0000ee70 .quad -8382449121214030822 + 0x8f, 0x54, 0xf7, 0xc2, 0xb6, 0x89, 0xd0, 0x1a, //0x0000ee78 .quad 1932195658189984911 + 0x20, 0xc3, 0xd0, 0xa3, 0xab, 0x72, 0x96, 0xae, //0x0000ee80 .quad -5866375383090150624 + 0xb2, 0x29, 0xb5, 0x73, 0x24, 0xac, 0x84, 0xa1, //0x0000ee88 .quad -6808127464117294670 + 0xe8, 0xf3, 0xc4, 0x8c, 0x56, 0x0f, 0x3c, 0xda, //0x0000ee90 .quad -2721283210435300376 + 0x1f, 0x74, 0xa2, 0x90, 0x2d, 0xd7, 0xe5, 0xc9, //0x0000ee98 .quad -3898473311719230433 + 0x71, 0x18, 0xfb, 0x17, 0x96, 0x89, 0x65, 0x88, //0x0000eea0 .quad -8618331034163144591 + 0x93, 0x88, 0x65, 0x7a, 0x7c, 0xa6, 0x2f, 0x7e, //0x0000eea8 .quad 9092669226243950739 + 0x8d, 0xde, 0xf9, 0x9d, 0xfb, 0xeb, 0x7e, 0xaa, //0x0000eeb0 .quad -6161227774276542835 + 0xb8, 0xea, 0xfe, 0x98, 0x1b, 0x90, 0xbb, 0xdd, //0x0000eeb8 .quad -2469221522477225288 + 0x31, 0x56, 0x78, 0x85, 0xfa, 0xa6, 0x1e, 0xd5, //0x0000eec0 .quad -3089848699418290639 + 0x66, 0xa5, 0x3e, 0x7f, 0x22, 0x74, 0x2a, 0x55, //0x0000eec8 .quad 6136845133758244198 + 0xde, 0x35, 0x6b, 0x93, 0x5c, 0x28, 0x33, 0x85, //0x0000eed0 .quad -8848684464777513506 + 0x60, 0x27, 0x87, 0x8f, 0x95, 0x88, 0x3a, 0xd5, //0x0000eed8 .quad -3082000819042179232 + 0x56, 0x03, 0x46, 0xb8, 0x73, 0xf2, 0x7f, 0xa6, //0x0000eee0 .quad -6449169562544503978 + 0x38, 0xf1, 0x68, 0xf3, 0xba, 0x2a, 0x89, 0x8a, //0x0000eee8 .quad -8464187042230111944 + 0x2c, 0x84, 0x57, 0xa6, 0x10, 0xef, 0x1f, 0xd0, //0x0000eef0 .quad -3449775934753242068 + 0x86, 0x2d, 0x43, 0xb0, 0x69, 0x75, 0x2b, 0x2d, //0x0000eef8 .quad 3254824252494523782 + 0x9b, 0xb2, 0xf6, 0x67, 0x6a, 0xf5, 0x13, 0x82, //0x0000ef00 .quad -9073638986861858149 + 0x74, 0xfc, 0x29, 0x0e, 0x62, 0x29, 0x3b, 0x9c, //0x0000ef08 .quad -7189106879045698444 + 0x42, 0x5f, 0xf4, 0x01, 0xc5, 0xf2, 0x98, 0xa2, //0x0000ef10 .quad -6730362715149934782 + 0x90, 0x7b, 0xb4, 0x91, 0xba, 0xf3, 0x49, 0x83, //0x0000ef18 .quad -8986383598807123056 + 0x13, 0x77, 0x71, 0x42, 0x76, 0x2f, 0x3f, 0xcb, //0x0000ef20 .quad -3801267375510030573 + 0x74, 0x9a, 0x21, 0x36, 0xa9, 0x70, 0x1c, 0x24, //0x0000ef28 .quad 2602078556773259892 + 0xd7, 0xd4, 0x0d, 0xd3, 0x53, 0xfb, 0x0e, 0xfe, //0x0000ef30 .quad -139898200960150313 + 0x11, 0x01, 0xaa, 0x83, 0xd3, 0x8c, 0x23, 0xed, //0x0000ef38 .quad -1359087822460813039 + 0x06, 0xa5, 0xe8, 0x63, 0x14, 0x5d, 0xc9, 0x9e, //0x0000ef40 .quad -7004965403241175802 + 0xab, 0x40, 0x4a, 0x32, 0x04, 0x38, 0x36, 0xf4, //0x0000ef48 .quad -849429889038008149 + 0x48, 0xce, 0xe2, 0x7c, 0x59, 0xb4, 0x7b, 0xc6, //0x0000ef50 .quad -4144520735624081848 + 0xd6, 0xd0, 0xdc, 0x3e, 0x05, 0xc6, 0x43, 0xb1, //0x0000ef58 .quad -5673473379724898090 + 0xda, 0x81, 0x1b, 0xdc, 0x6f, 0xa1, 0x1a, 0xf8, //0x0000ef60 .quad -568964901102714406 + 0x0b, 0x05, 0x94, 0x8e, 0x86, 0xb7, 0x94, 0xdd, //0x0000ef68 .quad -2480155706228734709 + 0x28, 0x31, 0x91, 0xe9, 0xe5, 0xa4, 0x10, 0x9b, //0x0000ef70 .quad -7273132090830278360 + 0x27, 0x83, 0x1c, 0x19, 0xb4, 0xf2, 0x7c, 0xca, //0x0000ef78 .quad -3855940325606653145 + 0x72, 0x7d, 0xf5, 0x63, 0x1f, 0xce, 0xd4, 0xc1, //0x0000ef80 .quad -4479729095110460046 + 0xf1, 0xa3, 0x63, 0x1f, 0x61, 0x2f, 0x1c, 0xfd, //0x0000ef88 .quad -208239388580928527 + 0xcf, 0xdc, 0xf2, 0x3c, 0xa7, 0x01, 0x4a, 0xf2, //0x0000ef90 .quad -987975350460687153 + 0xed, 0x8c, 0x3c, 0x67, 0x39, 0x3b, 0x63, 0xbc, //0x0000ef98 .quad -4871985254153548563 + 0x01, 0xca, 0x17, 0x86, 0x08, 0x41, 0x6e, 0x97, //0x0000efa0 .quad -7535013621679011327 + 0x14, 0xd8, 0x85, 0xe0, 0x03, 0x05, 0xbe, 0xd5, //0x0000efa8 .quad -3044990783845967852 + 0x82, 0xbc, 0x9d, 0xa7, 0x4a, 0xd1, 0x49, 0xbd, //0x0000efb0 .quad -4807081008671376254 + 0x19, 0x4e, 0xa7, 0xd8, 0x44, 0x86, 0x2d, 0x4b, //0x0000efb8 .quad 5417133557047315993 + 0xa2, 0x2b, 0x85, 0x51, 0x9d, 0x45, 0x9c, 0xec, //0x0000efc0 .quad -1397165242411832414 + 0x9f, 0x21, 0xd1, 0x0e, 0xd6, 0xe7, 0xf8, 0xdd, //0x0000efc8 .quad -2451955090545630817 + 0x45, 0x3b, 0xf3, 0x52, 0x82, 0xab, 0xe1, 0x93, //0x0000efd0 .quad -7790757304148477115 + 0x04, 0xb5, 0x42, 0xc9, 0xe5, 0x90, 0xbb, 0xca, //0x0000efd8 .quad -3838314940804713212 + 0x17, 0x0a, 0xb0, 0xe7, 0x62, 0x16, 0xda, 0xb8, //0x0000efe0 .quad -5126760611758208489 + 0x44, 0x62, 0x93, 0x3b, 0x1f, 0x75, 0x6a, 0x3d, //0x0000efe8 .quad 4425478360848884292 + 0x9d, 0x0c, 0x9c, 0xa1, 0xfb, 0x9b, 0x10, 0xe7, //0x0000eff0 .quad -1796764746270372707 + 0xd5, 0x3a, 0x78, 0x0a, 0x67, 0x12, 0xc5, 0x0c, //0x0000eff8 .quad 920161932633717461 + 0xe2, 0x87, 0x01, 0x45, 0x7d, 0x61, 0x6a, 0x90, //0x0000f000 .quad -8040506994060064798 + 0xc6, 0x24, 0x8b, 0x66, 0x80, 0x2b, 0xfb, 0x27, //0x0000f008 .quad 2880944217109767366 + 0xda, 0xe9, 0x41, 0x96, 0xdc, 0xf9, 0x84, 0xb4, //0x0000f010 .quad -5438947724147693094 + 0xf7, 0xed, 0x2d, 0x80, 0x60, 0xf6, 0xf9, 0xb1, //0x0000f018 .quad -5622191765467566601 + 0x51, 0x64, 0xd2, 0xbb, 0x53, 0x38, 0xa6, 0xe1, //0x0000f020 .quad -2186998636757228463 + 0x74, 0x69, 0x39, 0xa0, 0xf8, 0x73, 0x78, 0x5e, //0x0000f028 .quad 6807318348447705460 + 0xb2, 0x7e, 0x63, 0x55, 0x34, 0xe3, 0x07, 0x8d, //0x0000f030 .quad -8284403175614349646 + 0xe9, 0xe1, 0x23, 0x64, 0x7b, 0x48, 0x0b, 0xdb, //0x0000f038 .quad -2662955059861265943 + 0x5f, 0x5e, 0xbc, 0x6a, 0x01, 0xdc, 0x49, 0xb0, //0x0000f040 .quad -5743817951090549153 + 0x63, 0xda, 0x2c, 0x3d, 0x9a, 0x1a, 0xce, 0x91, //0x0000f048 .quad -7940379843253970333 + 0xf7, 0x75, 0x6b, 0xc5, 0x01, 0x53, 0x5c, 0xdc, //0x0000f050 .quad -2568086420435798537 + 0xfc, 0x10, 0x78, 0xcc, 0x40, 0xa1, 0x41, 0x76, //0x0000f058 .quad 8521269269642088700 + 0xba, 0x29, 0x63, 0x1b, 0xe1, 0xb3, 0xb9, 0x89, //0x0000f060 .quad -8522583040413455942 + 0x9e, 0x0a, 0xcb, 0x7f, 0xc8, 0x04, 0xe9, 0xa9, //0x0000f068 .quad -6203421752542164322 + 0x29, 0xf4, 0x3b, 0x62, 0xd9, 0x20, 0x28, 0xac, //0x0000f070 .quad -6041542782089432023 + 0x45, 0xcd, 0xbd, 0x9f, 0xfa, 0x45, 0x63, 0x54, //0x0000f078 .quad 6080780864604458309 + 0x33, 0xf1, 0xca, 0xba, 0x0f, 0x29, 0x32, 0xd7, //0x0000f080 .quad -2940242459184402125 + 0x96, 0x40, 0xad, 0x47, 0x79, 0x17, 0x7c, 0xa9, //0x0000f088 .quad -6234081974526590826 + 0xc0, 0xd6, 0xbe, 0xd4, 0xa9, 0x59, 0x7f, 0x86, //0x0000f090 .quad -8755180564631333184 + 0x5e, 0x48, 0xcc, 0xcc, 0xab, 0x8e, 0xed, 0x49, //0x0000f098 .quad 5327070802775656542 + 0x70, 0x8c, 0xee, 0x49, 0x14, 0x30, 0x1f, 0xa8, //0x0000f0a0 .quad -6332289687361778576 + 0x75, 0x5a, 0xff, 0xbf, 0x56, 0xf2, 0x68, 0x5c, //0x0000f0a8 .quad 6658838503469570677 + 0x8c, 0x2f, 0x6a, 0x5c, 0x19, 0xfc, 0x26, 0xd2, //0x0000f0b0 .quad -3303676090774835316 + 0x12, 0x31, 0xff, 0x6f, 0xec, 0x2e, 0x83, 0x73, //0x0000f0b8 .quad 8323548129336963346 + 0xb7, 0x5d, 0xc2, 0xd9, 0x8f, 0x5d, 0x58, 0x83, //0x0000f0c0 .quad -8982326584375353929 + 0xac, 0x7e, 0xff, 0xc5, 0x53, 0xfd, 0x31, 0xc8, //0x0000f0c8 .quad -4021154456019173716 + 0x25, 0xf5, 0x32, 0xd0, 0xf3, 0x74, 0x2e, 0xa4, //0x0000f0d0 .quad -6616222212041804507 + 0x56, 0x5e, 0x7f, 0xb7, 0xa8, 0x7c, 0x3e, 0xba, //0x0000f0d8 .quad -5026443070023967146 + 0x6f, 0xb2, 0x3f, 0xc4, 0x30, 0x12, 0x3a, 0xcd, //0x0000f0e0 .quad -3658591746624867729 + 0xec, 0x35, 0x5f, 0xe5, 0xd2, 0x1b, 0xce, 0x28, //0x0000f0e8 .quad 2940318199324816876 + 0x85, 0xcf, 0xa7, 0x7a, 0x5e, 0x4b, 0x44, 0x80, //0x0000f0f0 .quad -9204148869281624187 + 0xb4, 0x81, 0x5b, 0xcf, 0x63, 0xd1, 0x80, 0x79, //0x0000f0f8 .quad 8755227902219092404 + 0x66, 0xc3, 0x51, 0x19, 0x36, 0x5e, 0x55, 0xa0, //0x0000f100 .quad -6893500068174642330 + 0x20, 0x62, 0x32, 0xc3, 0xbc, 0x05, 0xe1, 0xd7, //0x0000f108 .quad -2891023177508298208 + 0x40, 0x34, 0xa6, 0x9f, 0xc3, 0xb5, 0x6a, 0xc8, //0x0000f110 .quad -4005189066790915008 + 0xa8, 0xfa, 0xfe, 0xf3, 0x2b, 0x47, 0xd9, 0x8d, //0x0000f118 .quad -8225464990312760664 + 0x50, 0xc1, 0x8f, 0x87, 0x34, 0x63, 0x85, 0xfa, //0x0000f120 .quad -394800315061255856 + 0x52, 0xb9, 0xfe, 0xf0, 0xf6, 0x98, 0x4f, 0xb1, //0x0000f128 .quad -5670145219463562926 + 0xd2, 0xd8, 0xb9, 0xd4, 0x00, 0x5e, 0x93, 0x9c, //0x0000f130 .quad -7164279224554366766 + 0xd4, 0x33, 0x9f, 0x56, 0x9a, 0xbf, 0xd1, 0x6e, //0x0000f138 .quad 7985374283903742932 + 0x07, 0x4f, 0xe8, 0x09, 0x81, 0x35, 0xb8, 0xc3, //0x0000f140 .quad -4343663012265570553 + 0xc9, 0x00, 0x47, 0xec, 0x80, 0x2f, 0x86, 0x0a, //0x0000f148 .quad 758345818024902857 + 0xc8, 0x62, 0x62, 0x4c, 0xe1, 0x42, 0xa6, 0xf4, //0x0000f150 .quad -817892746904575288 + 0xfb, 0xc0, 0x58, 0x27, 0x61, 0xbb, 0x27, 0xcd, //0x0000f158 .quad -3663753745896259333 + 0xbd, 0x7d, 0xbd, 0xcf, 0xcc, 0xe9, 0xe7, 0x98, //0x0000f160 .quad -7428711994456441411 + 0x9d, 0x78, 0x97, 0xb8, 0x1c, 0xd5, 0x38, 0x80, //0x0000f168 .quad -9207375118826243939 + 0x2c, 0xdd, 0xac, 0x03, 0x40, 0xe4, 0x21, 0xbf, //0x0000f170 .quad -4674203974643163860 + 0xc4, 0x56, 0xbd, 0xe6, 0x63, 0x0a, 0x47, 0xe0, //0x0000f178 .quad -2285846861678029116 + 0x78, 0x14, 0x98, 0x04, 0x50, 0x5d, 0xea, 0xee, //0x0000f180 .quad -1231068949876566920 + 0x75, 0xac, 0x6c, 0xe0, 0xfc, 0xcc, 0x58, 0x18, //0x0000f188 .quad 1754377441329851509 + 0xcb, 0x0c, 0xdf, 0x02, 0x52, 0x7a, 0x52, 0x95, //0x0000f190 .quad -7686947121313936181 + 0xc9, 0xeb, 0x43, 0x0c, 0x1e, 0x80, 0x37, 0x0f, //0x0000f198 .quad 1096485900831157193 + 0xfd, 0xcf, 0x96, 0x83, 0xe6, 0x18, 0xa7, 0xba, //0x0000f1a0 .quad -4996997883215032323 + 0xbb, 0xe6, 0x54, 0x8f, 0x25, 0x60, 0x05, 0xd3, //0x0000f1a8 .quad -3241078642388441413 + 0xfd, 0x83, 0x7c, 0x24, 0x20, 0xdf, 0x50, 0xe9, //0x0000f1b0 .quad -1634561335591402499 + 0x6a, 0x20, 0x2a, 0xf3, 0x2e, 0xb8, 0xc6, 0x47, //0x0000f1b8 .quad 5172023733869224042 + 0x7e, 0xd2, 0xcd, 0x16, 0x74, 0x8b, 0xd2, 0x91, //0x0000f1c0 .quad -7939129862385708418 + 0x42, 0x54, 0xfa, 0x57, 0x1d, 0x33, 0xdc, 0x4c, //0x0000f1c8 .quad 5538357842881958978 + 0x1d, 0x47, 0x81, 0x1c, 0x51, 0x2e, 0x47, 0xb6, //0x0000f1d0 .quad -5312226309554747619 + 0x53, 0xe9, 0xf8, 0xad, 0xe4, 0x3f, 0x13, 0xe0, //0x0000f1d8 .quad -2300424733252327085 + 0xe5, 0x98, 0xa1, 0x63, 0xe5, 0xf9, 0xd8, 0xe3, //0x0000f1e0 .quad -2028596868516046619 + 0xa7, 0x23, 0x77, 0xd9, 0xdd, 0x0f, 0x18, 0x58, //0x0000f1e8 .quad 6347841120289366951 + 0x8f, 0xff, 0x44, 0x5e, 0x2f, 0x9c, 0x67, 0x8e, //0x0000f1f0 .quad -8185402070463610993 + 0x49, 0x76, 0xea, 0xa7, 0xea, 0x09, 0x0f, 0x57, //0x0000f1f8 .quad 6273243709394548297 + 0x73, 0x3f, 0xd6, 0x35, 0x3b, 0x83, 0x01, 0xb2, //0x0000f200 .quad -5620066569652125837 + 0xdb, 0x13, 0xe5, 0x51, 0x65, 0xcc, 0xd2, 0x2c, //0x0000f208 .quad 3229868618315797467 + 0x4f, 0xcf, 0x4b, 0x03, 0x0a, 0xe4, 0x81, 0xde, //0x0000f210 .quad -2413397193637769393 + 0xd2, 0x58, 0x5e, 0xa6, 0x7e, 0x7f, 0x07, 0xf8, //0x0000f218 .quad -574350245532641070 + 0x91, 0x61, 0x0f, 0x42, 0x86, 0x2e, 0x11, 0x8b, //0x0000f220 .quad -8425902273664687727 + 0x83, 0xf7, 0xfa, 0x27, 0xaf, 0xaf, 0x04, 0xfb, //0x0000f228 .quad -358968903457900669 + 0xf6, 0x39, 0x93, 0xd2, 0x27, 0x7a, 0xd5, 0xad, //0x0000f230 .quad -5920691823653471754 + 0x64, 0xb5, 0xf9, 0xf1, 0x9a, 0xdb, 0xc5, 0x79, //0x0000f238 .quad 8774660907532399972 + 0x74, 0x08, 0x38, 0xc7, 0xb1, 0xd8, 0x4a, 0xd9, //0x0000f240 .quad -2789178761139451788 + 0xbd, 0x22, 0x78, 0xae, 0x81, 0x52, 0x37, 0x18, //0x0000f248 .quad 1744954097560724157 + 0x48, 0x05, 0x83, 0x1c, 0x6f, 0xc7, 0xce, 0x87, //0x0000f250 .quad -8660765753353239224 + 0xb6, 0x15, 0x0b, 0x0d, 0x91, 0x93, 0x22, 0x8f, //0x0000f258 .quad -8132775725879323210 + 0x9a, 0xc6, 0xa3, 0xe3, 0x4a, 0x79, 0xc2, 0xa9, //0x0000f260 .quad -6214271173264161126 + 0x23, 0xdb, 0x4d, 0x50, 0x75, 0x38, 0xeb, 0xb2, //0x0000f268 .quad -5554283638921766109 + 0x41, 0xb8, 0x8c, 0x9c, 0x9d, 0x17, 0x33, 0xd4, //0x0000f270 .quad -3156152948152813503 + 0xec, 0x51, 0x61, 0xa4, 0x92, 0x06, 0xa6, 0x5f, //0x0000f278 .quad 6892203506629956076 + 0x28, 0xf3, 0xd7, 0x81, 0xc2, 0xee, 0x9f, 0x84, //0x0000f280 .quad -8890124620236590296 + 0x34, 0xd3, 0xbc, 0xa6, 0x1b, 0xc4, 0xc7, 0xdb, //0x0000f288 .quad -2609901835997359308 + 0xf3, 0xef, 0x4d, 0x22, 0x73, 0xea, 0xc7, 0xa5, //0x0000f290 .quad -6500969756868349965 + 0x01, 0x08, 0x6c, 0x90, 0x22, 0xb5, 0xb9, 0x12, //0x0000f298 .quad 1349308723430688769 + 0xef, 0x6b, 0xe1, 0xea, 0x0f, 0xe5, 0x39, 0xcf, //0x0000f2a0 .quad -3514526177658049553 + 0x01, 0x0a, 0x87, 0x34, 0x6b, 0x22, 0x68, 0xd7, //0x0000f2a8 .quad -2925050114139026943 + 0x75, 0xe3, 0xcc, 0xf2, 0x29, 0x2f, 0x84, 0x81, //0x0000f2b0 .quad -9114107888677362827 + 0x41, 0x66, 0xd4, 0x00, 0x83, 0x15, 0xa1, 0xe6, //0x0000f2b8 .quad -1828156321336891839 + 0x53, 0x1c, 0x80, 0x6f, 0xf4, 0x3a, 0xe5, 0xa1, //0x0000f2c0 .quad -6780948842419315629 + 0xd1, 0x7f, 0x09, 0xc1, 0xe3, 0x5a, 0x49, 0x60, //0x0000f2c8 .quad 6938176635183661009 + 0x68, 0x23, 0x60, 0x8b, 0xb1, 0x89, 0x5e, 0xca, //0x0000f2d0 .quad -3864500034596756632 + 0xc5, 0xdf, 0x4b, 0xb1, 0x9c, 0xb1, 0x5b, 0x38, //0x0000f2d8 .quad 4061034775552188357 + 0x42, 0x2c, 0x38, 0xee, 0x1d, 0x2c, 0xf6, 0xfc, //0x0000f2e0 .quad -218939024818557886 + 0xb6, 0xd7, 0x9e, 0xdd, 0x03, 0x9e, 0x72, 0x46, //0x0000f2e8 .quad 5076293469440235446 + 0xa9, 0x1b, 0xe3, 0xb4, 0x92, 0xdb, 0x19, 0x9e, //0x0000f2f0 .quad -7054365918152680535 + 0xd2, 0x46, 0x83, 0x6a, 0xc2, 0xa2, 0x07, 0x6c, //0x0000f2f8 .quad 7784369436827535058 + //0x0000f300 .p2align 4, 0x00 + //0x0000f300 _VecShiftShuffles + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, //0x0000f300 QUAD $0x0706050403020100; QUAD $0x0f0e0d0c0b0a0908 // .ascii 16, '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, //0x0000f310 QUAD $0x0807060504030201; QUAD $0xff0f0e0d0c0b0a09 // .ascii 16, '\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff' + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, //0x0000f320 QUAD $0x0908070605040302; QUAD $0xffff0f0e0d0c0b0a // .ascii 16, '\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff' + 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, //0x0000f330 QUAD $0x0a09080706050403; QUAD $0xffffff0f0e0d0c0b // .ascii 16, '\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff' + 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, //0x0000f340 QUAD $0x0b0a090807060504; QUAD $0xffffffff0f0e0d0c // .ascii 16, '\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff' + 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0000f350 QUAD $0x0c0b0a0908070605; QUAD $0xffffffffff0f0e0d // .ascii 16, '\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff' + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0000f360 QUAD $0x0d0c0b0a09080706; QUAD $0xffffffffffff0f0e // .ascii 16, '\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff' + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0000f370 QUAD $0x0e0d0c0b0a090807; QUAD $0xffffffffffffff0f // .ascii 16, '\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff' + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0000f380 QUAD $0x0f0e0d0c0b0a0908; QUAD $0xffffffffffffffff // .ascii 16, '\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff' + //0x0000f390 .p2align 4, 0x00 + //0x0000f390 __SingleQuoteTab + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f390 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, //0x0000f398 QUAD $0x000030303030755c // .asciz 8, '\\u0000\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3a0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x31, 0x00, 0x00, //0x0000f3a8 QUAD $0x000031303030755c // .asciz 8, '\\u0001\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3b0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x32, 0x00, 0x00, //0x0000f3b8 QUAD $0x000032303030755c // .asciz 8, '\\u0002\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3c0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x33, 0x00, 0x00, //0x0000f3c8 QUAD $0x000033303030755c // .asciz 8, '\\u0003\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3d0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x34, 0x00, 0x00, //0x0000f3d8 QUAD $0x000034303030755c // .asciz 8, '\\u0004\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3e0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x35, 0x00, 0x00, //0x0000f3e8 QUAD $0x000035303030755c // .asciz 8, '\\u0005\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3f0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x36, 0x00, 0x00, //0x0000f3f8 QUAD $0x000036303030755c // .asciz 8, '\\u0006\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f400 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x37, 0x00, 0x00, //0x0000f408 QUAD $0x000037303030755c // .asciz 8, '\\u0007\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f410 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x38, 0x00, 0x00, //0x0000f418 QUAD $0x000038303030755c // .asciz 8, '\\u0008\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f420 .quad 2 + 0x5c, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f428 QUAD $0x000000000000745c // .asciz 8, '\\t\x00\x00\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f430 .quad 2 + 0x5c, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f438 QUAD $0x0000000000006e5c // .asciz 8, '\\n\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f440 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x62, 0x00, 0x00, //0x0000f448 QUAD $0x000062303030755c // .asciz 8, '\\u000b\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f450 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x63, 0x00, 0x00, //0x0000f458 QUAD $0x000063303030755c // .asciz 8, '\\u000c\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f460 .quad 2 + 0x5c, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f468 QUAD $0x000000000000725c // .asciz 8, '\\r\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f470 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x65, 0x00, 0x00, //0x0000f478 QUAD $0x000065303030755c // .asciz 8, '\\u000e\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f480 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x66, 0x00, 0x00, //0x0000f488 QUAD $0x000066303030755c // .asciz 8, '\\u000f\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f490 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x30, 0x00, 0x00, //0x0000f498 QUAD $0x000030313030755c // .asciz 8, '\\u0010\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4a0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x31, 0x00, 0x00, //0x0000f4a8 QUAD $0x000031313030755c // .asciz 8, '\\u0011\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4b0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x32, 0x00, 0x00, //0x0000f4b8 QUAD $0x000032313030755c // .asciz 8, '\\u0012\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4c0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x33, 0x00, 0x00, //0x0000f4c8 QUAD $0x000033313030755c // .asciz 8, '\\u0013\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4d0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x34, 0x00, 0x00, //0x0000f4d8 QUAD $0x000034313030755c // .asciz 8, '\\u0014\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4e0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x35, 0x00, 0x00, //0x0000f4e8 QUAD $0x000035313030755c // .asciz 8, '\\u0015\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4f0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x36, 0x00, 0x00, //0x0000f4f8 QUAD $0x000036313030755c // .asciz 8, '\\u0016\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f500 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x37, 0x00, 0x00, //0x0000f508 QUAD $0x000037313030755c // .asciz 8, '\\u0017\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f510 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x38, 0x00, 0x00, //0x0000f518 QUAD $0x000038313030755c // .asciz 8, '\\u0018\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f520 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x39, 0x00, 0x00, //0x0000f528 QUAD $0x000039313030755c // .asciz 8, '\\u0019\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f530 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x61, 0x00, 0x00, //0x0000f538 QUAD $0x000061313030755c // .asciz 8, '\\u001a\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f540 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x00, 0x00, //0x0000f548 QUAD $0x000062313030755c // .asciz 8, '\\u001b\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f550 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x63, 0x00, 0x00, //0x0000f558 QUAD $0x000063313030755c // .asciz 8, '\\u001c\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f560 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x64, 0x00, 0x00, //0x0000f568 QUAD $0x000064313030755c // .asciz 8, '\\u001d\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f570 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x65, 0x00, 0x00, //0x0000f578 QUAD $0x000065313030755c // .asciz 8, '\\u001e\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f580 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x66, 0x00, 0x00, //0x0000f588 QUAD $0x000066313030755c // .asciz 8, '\\u001f\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f590 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5b0 .quad 2 + 0x5c, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5b8 QUAD $0x000000000000225c // .asciz 8, '\\"\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f600 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f610 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f620 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f630 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f640 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f650 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f660 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f670 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f680 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f690 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f700 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f710 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f720 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f730 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f740 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f750 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f760 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f770 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f780 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f790 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f800 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f810 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f820 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f830 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f840 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f850 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f860 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f870 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f880 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f890 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f900 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f910 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f920 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f930 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f940 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f950 .quad 2 + 0x5c, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f958 QUAD $0x0000000000005c5c // .asciz 8, '\\\\\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f960 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f970 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f980 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f990 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000faa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fab0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fac0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fad0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fae0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000faf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fba0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fca0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fcb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fcc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fcd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fce0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fcf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fda0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fdb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fdc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fdd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fde0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fdf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fea0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000feb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fec0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fed0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fee0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fef0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fff0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010000 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010010 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010020 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010030 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010040 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010050 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010060 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010070 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010080 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010090 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010100 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010110 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010120 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010130 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010140 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010150 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010160 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010170 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010180 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010190 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010200 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010210 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010220 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010230 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010240 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010250 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010260 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010270 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010280 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010290 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010300 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010310 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010320 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010330 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010340 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010350 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010360 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010370 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010380 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x00010390 .p2align 4, 0x00 + //0x00010390 __DoubleQuoteTab + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010390 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x30, 0x00, //0x00010398 QUAD $0x0030303030755c5c // .asciz 8, '\\\\u0000\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103a0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x31, 0x00, //0x000103a8 QUAD $0x0031303030755c5c // .asciz 8, '\\\\u0001\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103b0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x32, 0x00, //0x000103b8 QUAD $0x0032303030755c5c // .asciz 8, '\\\\u0002\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103c0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x33, 0x00, //0x000103c8 QUAD $0x0033303030755c5c // .asciz 8, '\\\\u0003\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103d0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x34, 0x00, //0x000103d8 QUAD $0x0034303030755c5c // .asciz 8, '\\\\u0004\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103e0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x35, 0x00, //0x000103e8 QUAD $0x0035303030755c5c // .asciz 8, '\\\\u0005\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103f0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x36, 0x00, //0x000103f8 QUAD $0x0036303030755c5c // .asciz 8, '\\\\u0006\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010400 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x37, 0x00, //0x00010408 QUAD $0x0037303030755c5c // .asciz 8, '\\\\u0007\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010410 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x38, 0x00, //0x00010418 QUAD $0x0038303030755c5c // .asciz 8, '\\\\u0008\x00' + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010420 .quad 3 + 0x5c, 0x5c, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010428 QUAD $0x0000000000745c5c // .asciz 8, '\\\\t\x00\x00\x00\x00\x00' + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010430 .quad 3 + 0x5c, 0x5c, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010438 QUAD $0x00000000006e5c5c // .asciz 8, '\\\\n\x00\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010440 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x62, 0x00, //0x00010448 QUAD $0x0062303030755c5c // .asciz 8, '\\\\u000b\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010450 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x63, 0x00, //0x00010458 QUAD $0x0063303030755c5c // .asciz 8, '\\\\u000c\x00' + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010460 .quad 3 + 0x5c, 0x5c, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010468 QUAD $0x0000000000725c5c // .asciz 8, '\\\\r\x00\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010470 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x65, 0x00, //0x00010478 QUAD $0x0065303030755c5c // .asciz 8, '\\\\u000e\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010480 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x66, 0x00, //0x00010488 QUAD $0x0066303030755c5c // .asciz 8, '\\\\u000f\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010490 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x30, 0x00, //0x00010498 QUAD $0x0030313030755c5c // .asciz 8, '\\\\u0010\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104a0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x31, 0x00, //0x000104a8 QUAD $0x0031313030755c5c // .asciz 8, '\\\\u0011\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104b0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x32, 0x00, //0x000104b8 QUAD $0x0032313030755c5c // .asciz 8, '\\\\u0012\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104c0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x33, 0x00, //0x000104c8 QUAD $0x0033313030755c5c // .asciz 8, '\\\\u0013\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104d0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x34, 0x00, //0x000104d8 QUAD $0x0034313030755c5c // .asciz 8, '\\\\u0014\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104e0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x35, 0x00, //0x000104e8 QUAD $0x0035313030755c5c // .asciz 8, '\\\\u0015\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104f0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x36, 0x00, //0x000104f8 QUAD $0x0036313030755c5c // .asciz 8, '\\\\u0016\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010500 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x37, 0x00, //0x00010508 QUAD $0x0037313030755c5c // .asciz 8, '\\\\u0017\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010510 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x38, 0x00, //0x00010518 QUAD $0x0038313030755c5c // .asciz 8, '\\\\u0018\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010520 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x39, 0x00, //0x00010528 QUAD $0x0039313030755c5c // .asciz 8, '\\\\u0019\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010530 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x61, 0x00, //0x00010538 QUAD $0x0061313030755c5c // .asciz 8, '\\\\u001a\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010540 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x00, //0x00010548 QUAD $0x0062313030755c5c // .asciz 8, '\\\\u001b\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010550 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x63, 0x00, //0x00010558 QUAD $0x0063313030755c5c // .asciz 8, '\\\\u001c\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010560 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x64, 0x00, //0x00010568 QUAD $0x0064313030755c5c // .asciz 8, '\\\\u001d\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010570 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x65, 0x00, //0x00010578 QUAD $0x0065313030755c5c // .asciz 8, '\\\\u001e\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010580 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x66, 0x00, //0x00010588 QUAD $0x0066313030755c5c // .asciz 8, '\\\\u001f\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010590 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105b0 .quad 4 + 0x5c, 0x5c, 0x5c, 0x22, 0x00, 0x00, 0x00, 0x00, //0x000105b8 QUAD $0x00000000225c5c5c // .asciz 8, '\\\\\\"\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010600 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010610 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010620 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010630 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010640 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010650 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010660 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010670 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010680 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010690 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010700 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010710 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010720 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010730 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010740 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010750 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010760 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010770 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010780 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010790 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010800 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010810 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010820 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010830 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010840 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010850 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010860 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010870 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010880 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010890 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010900 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010910 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010920 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010930 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010940 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010950 .quad 4 + 0x5c, 0x5c, 0x5c, 0x5c, 0x00, 0x00, 0x00, 0x00, //0x00010958 QUAD $0x000000005c5c5c5c // .asciz 8, '\\\\\\\\\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010960 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010970 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010980 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010990 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010aa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ab0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ac0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ad0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ae0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010af0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ba0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010bb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010bc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010bd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010be0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010bf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ca0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010cb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010cc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010cd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ce0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010cf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010da0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010db0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010dc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010dd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010de0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010df0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ea0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010eb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ec0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ed0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ee0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ef0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ff0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011000 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011010 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011020 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011030 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011040 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011050 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011060 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011070 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011080 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011090 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011100 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011110 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011120 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011130 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011140 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011150 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011160 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011170 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011180 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011190 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011200 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011210 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011220 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011230 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011240 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011250 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011260 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011270 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011280 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011290 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011300 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011310 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011320 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011330 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011340 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011350 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011360 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011370 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011380 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x00011390 .p2align 4, 0x00 + //0x00011390 __EscTab + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00011390 QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .ascii 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000113a0 QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .ascii 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113b0 QUAD $0x0000000000010000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, //0x000113e0 QUAD $0x0000000000000000; LONG $0x00000000; BYTE $0x01 // .ascii 13, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113ed QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113fd QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001140d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001141d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001142d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001143d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001144d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001145d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001146d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001147d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, //0x0001148d WORD $0x0000; BYTE $0x00 // .space 3, '\x00\x00\x00' + //0x00011490 .p2align 4, 0x00 + //0x00011490 __UnquoteTab + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011490 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, //0x000114b0 QUAD $0x0000000000220000; QUAD $0x2f00000000000000 // .ascii 16, '\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, //0x000114e0 QUAD $0x0000000000000000; QUAD $0x0000005c00000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00' + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, //0x000114f0 QUAD $0x000c000000080000; QUAD $0x000a000000000000 // .ascii 16, '\x00\x00\x08\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\n\x00' + 0x00, 0x00, 0x0d, 0x00, 0x09, 0xff, //0x00011500 LONG $0x000d0000; WORD $0xff09 // .ascii 6, '\x00\x00\r\x00\t\xff' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011506 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011516 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011526 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011536 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011546 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011556 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011566 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011576 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011586 QUAD $0x0000000000000000; WORD $0x0000 // .space 10, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x00011590 .p2align 4, 0x00 + //0x00011590 __HtmlQuoteTab + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011590 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011600 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011610 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011620 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011630 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011640 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011650 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011660 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011670 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011680 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011690 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011700 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011710 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011720 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011730 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011740 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011750 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011760 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011770 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011780 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011790 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117f0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x32, 0x36, 0x00, 0x00, //0x000117f8 QUAD $0x000036323030755c // .asciz 8, '\\u0026\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011800 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011810 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011820 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011830 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011840 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011850 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011860 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011870 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011880 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011890 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011900 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011910 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011920 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011930 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011940 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011950 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x33, 0x63, 0x00, 0x00, //0x00011958 QUAD $0x000063333030755c // .asciz 8, '\\u003c\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011960 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011970 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x33, 0x65, 0x00, 0x00, //0x00011978 QUAD $0x000065333030755c // .asciz 8, '\\u003e\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011980 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011990 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011aa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ab0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ac0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ad0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ae0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011af0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ba0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011bb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011bc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011bd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011be0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011bf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ca0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011cb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011cc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011cd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ce0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011cf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011da0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011db0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011dc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011dd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011de0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011df0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ea0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011eb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ec0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ed0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ee0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ef0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011fa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011fb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011fc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011fd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011fe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ff0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012000 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012010 .quad 6 + 0x5c, 0x75, 0x32, 0x30, 0x32, 0x38, 0x00, 0x00, //0x00012018 QUAD $0x000038323032755c // .asciz 8, '\\u2028\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012020 .quad 6 + 0x5c, 0x75, 0x32, 0x30, 0x32, 0x39, 0x00, 0x00, //0x00012028 QUAD $0x000039323032755c // .asciz 8, '\\u2029\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012030 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012040 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012050 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012060 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012070 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012080 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012090 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012100 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012110 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012120 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012130 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012140 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012150 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012160 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012170 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012180 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012190 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012200 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012210 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012220 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012230 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012240 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012250 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012260 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012270 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012280 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012290 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012300 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012310 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012320 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012330 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012340 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012350 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012360 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012370 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012380 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012390 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012400 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012410 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012420 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012430 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012440 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012450 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012460 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012470 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012480 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012490 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012500 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012510 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012520 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012530 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012540 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012550 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012560 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012570 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012580 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x00012590 .p2align 4, 0x00 + //0x00012590 _LSHIFT_TAB + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012590 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125f0 QUAD $0x0000000000000000 // .space 8, '\x00\x00\x00\x00\x00\x00\x00\x00' + 0x01, 0x00, 0x00, 0x00, //0x000125f8 .long 1 + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125fc QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001260c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001261c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001262c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001263c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001264c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001265c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x01, 0x00, 0x00, 0x00, //0x00012660 .long 1 + 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012664 QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012674 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012684 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012694 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126a4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000126c4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x01, 0x00, 0x00, 0x00, //0x000126c8 .long 1 + 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126cc QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126ec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126fc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001270c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001271c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001272c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, //0x00012730 .long 2 + 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012734 QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012744 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012754 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012764 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012774 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012784 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012794 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, //0x00012798 .long 2 + 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001279c QUAD $0x0000000035323133; QUAD $0x0000000000000000 // .asciz 16, '3125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127ec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000127fc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, //0x00012800 .long 2 + 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012804 QUAD $0x0000003532363531; QUAD $0x0000000000000000 // .asciz 16, '15625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012814 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012824 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012834 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012844 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012854 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012864 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x03, 0x00, 0x00, 0x00, //0x00012868 .long 3 + 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001286c QUAD $0x0000003532313837; QUAD $0x0000000000000000 // .asciz 16, '78125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001287c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001288c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001289c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000128ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000128bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000128cc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x03, 0x00, 0x00, 0x00, //0x000128d0 .long 3 + 0x33, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000128d4 QUAD $0x0000353236303933; QUAD $0x0000000000000000 // .asciz 16, '390625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000128e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000128f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012904 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012914 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012924 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012934 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x03, 0x00, 0x00, 0x00, //0x00012938 .long 3 + 0x31, 0x39, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001293c QUAD $0x0035323133353931; QUAD $0x0000000000000000 // .asciz 16, '1953125\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001294c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001295c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001296c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001297c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001298c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001299c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, //0x000129a0 .long 4 + 0x39, 0x37, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129a4 QUAD $0x0035323635363739; QUAD $0x0000000000000000 // .asciz 16, '9765625\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129c4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129d4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012a04 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, //0x00012a08 .long 4 + 0x34, 0x38, 0x38, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a0c QUAD $0x3532313832383834; QUAD $0x0000000000000000 // .asciz 16, '48828125\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a1c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a2c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a4c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a5c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012a6c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, //0x00012a70 .long 4 + 0x32, 0x34, 0x34, 0x31, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a74 QUAD $0x3236303431343432; QUAD $0x0000000000000035 // .asciz 16, '244140625\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a84 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a94 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012aa4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ab4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ac4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012ad4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, //0x00012ad8 .long 4 + 0x31, 0x32, 0x32, 0x30, 0x37, 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012adc QUAD $0x3133303730323231; QUAD $0x0000000000003532 // .asciz 16, '1220703125\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012aec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012afc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b0c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b1c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b2c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012b3c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x05, 0x00, 0x00, 0x00, //0x00012b40 .long 5 + 0x36, 0x31, 0x30, 0x33, 0x35, 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b44 QUAD $0x3635313533303136; QUAD $0x0000000000003532 // .asciz 16, '6103515625\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b54 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b64 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b74 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b84 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b94 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012ba4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x05, 0x00, 0x00, 0x00, //0x00012ba8 .long 5 + 0x33, 0x30, 0x35, 0x31, 0x37, 0x35, 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bac QUAD $0x3837353731353033; QUAD $0x0000000000353231 // .asciz 16, '30517578125\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bbc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bcc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bdc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bfc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012c0c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x05, 0x00, 0x00, 0x00, //0x00012c10 .long 5 + 0x31, 0x35, 0x32, 0x35, 0x38, 0x37, 0x38, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, //0x00012c14 QUAD $0x3938373835323531; QUAD $0x0000000035323630 // .asciz 16, '152587890625\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c24 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c34 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c44 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c54 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c64 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012c74 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, //0x00012c78 .long 6 + 0x37, 0x36, 0x32, 0x39, 0x33, 0x39, 0x34, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, //0x00012c7c QUAD $0x3534393339323637; QUAD $0x0000000035323133 // .asciz 16, '762939453125\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c8c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c9c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012cac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012cbc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ccc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012cdc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, //0x00012ce0 .long 6 + 0x33, 0x38, 0x31, 0x34, 0x36, 0x39, 0x37, 0x32, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, //0x00012ce4 QUAD $0x3237393634313833; QUAD $0x0000003532363536 // .asciz 16, '3814697265625\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012cf4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d04 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d14 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d24 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d34 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012d44 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, //0x00012d48 .long 6 + 0x31, 0x39, 0x30, 0x37, 0x33, 0x34, 0x38, 0x36, 0x33, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, //0x00012d4c QUAD $0x3638343337303931; QUAD $0x0000353231383233 // .asciz 16, '19073486328125\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d5c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d6c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d7c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d8c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d9c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012dac LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, //0x00012db0 .long 7 + 0x39, 0x35, 0x33, 0x36, 0x37, 0x34, 0x33, 0x31, 0x36, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, //0x00012db4 QUAD $0x3133343736333539; QUAD $0x0000353236303436 // .asciz 16, '95367431640625\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012dc4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012dd4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012de4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012df4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e04 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012e14 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, //0x00012e18 .long 7 + 0x34, 0x37, 0x36, 0x38, 0x33, 0x37, 0x31, 0x35, 0x38, 0x32, 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, //0x00012e1c QUAD $0x3531373338363734; QUAD $0x0035323133303238 // .asciz 16, '476837158203125\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e2c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e4c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e5c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e6c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012e7c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, //0x00012e80 .long 7 + 0x32, 0x33, 0x38, 0x34, 0x31, 0x38, 0x35, 0x37, 0x39, 0x31, 0x30, 0x31, 0x35, 0x36, 0x32, 0x35, //0x00012e84 QUAD $0x3735383134383332; QUAD $0x3532363531303139 // .asciz 16, '2384185791015625' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e94 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ea4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012eb4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ec4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ed4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012ee4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, //0x00012ee8 .long 7 + 0x31, 0x31, 0x39, 0x32, 0x30, 0x39, 0x32, 0x38, 0x39, 0x35, 0x35, 0x30, 0x37, 0x38, 0x31, 0x32, //0x00012eec QUAD $0x3832393032393131; QUAD $0x3231383730353539 // .asciz 16, '1192092895507812' + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012efc QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f0c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f1c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f2c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012f4c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x08, 0x00, 0x00, 0x00, //0x00012f50 .long 8 + 0x35, 0x39, 0x36, 0x30, 0x34, 0x36, 0x34, 0x34, 0x37, 0x37, 0x35, 0x33, 0x39, 0x30, 0x36, 0x32, //0x00012f54 QUAD $0x3434363430363935; QUAD $0x3236303933353737 // .asciz 16, '5960464477539062' + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f64 QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f74 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f84 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f94 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012fa4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012fb4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x08, 0x00, 0x00, 0x00, //0x00012fb8 .long 8 + 0x32, 0x39, 0x38, 0x30, 0x32, 0x33, 0x32, 0x32, 0x33, 0x38, 0x37, 0x36, 0x39, 0x35, 0x33, 0x31, //0x00012fbc QUAD $0x3232333230383932; QUAD $0x3133353936373833 // .asciz 16, '2980232238769531' + 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012fcc QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012fdc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012fec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ffc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001300c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001301c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x08, 0x00, 0x00, 0x00, //0x00013020 .long 8 + 0x31, 0x34, 0x39, 0x30, 0x31, 0x31, 0x36, 0x31, 0x31, 0x39, 0x33, 0x38, 0x34, 0x37, 0x36, 0x35, //0x00013024 QUAD $0x3136313130393431; QUAD $0x3536373438333931 // .asciz 16, '1490116119384765' + 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013034 QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013044 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013054 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013064 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013074 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013084 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x09, 0x00, 0x00, 0x00, //0x00013088 .long 9 + 0x37, 0x34, 0x35, 0x30, 0x35, 0x38, 0x30, 0x35, 0x39, 0x36, 0x39, 0x32, 0x33, 0x38, 0x32, 0x38, //0x0001308c QUAD $0x3530383530353437; QUAD $0x3832383332393639 // .asciz 16, '7450580596923828' + 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001309c QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000130ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000130bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000130cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000130dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000130ec LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x09, 0x00, 0x00, 0x00, //0x000130f0 .long 9 + 0x33, 0x37, 0x32, 0x35, 0x32, 0x39, 0x30, 0x32, 0x39, 0x38, 0x34, 0x36, 0x31, 0x39, 0x31, 0x34, //0x000130f4 QUAD $0x3230393235323733; QUAD $0x3431393136343839 // .asciz 16, '3725290298461914' + 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013104 QUAD $0x0000000035323630; QUAD $0x0000000000000000 // .asciz 16, '0625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013114 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013124 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013134 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013144 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013154 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x09, 0x00, 0x00, 0x00, //0x00013158 .long 9 + 0x31, 0x38, 0x36, 0x32, 0x36, 0x34, 0x35, 0x31, 0x34, 0x39, 0x32, 0x33, 0x30, 0x39, 0x35, 0x37, //0x0001315c QUAD $0x3135343632363831; QUAD $0x3735393033323934 // .asciz 16, '1862645149230957' + 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001316c QUAD $0x0000003532313330; QUAD $0x0000000000000000 // .asciz 16, '03125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001317c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001318c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001319c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000131ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000131bc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0a, 0x00, 0x00, 0x00, //0x000131c0 .long 10 + 0x39, 0x33, 0x31, 0x33, 0x32, 0x32, 0x35, 0x37, 0x34, 0x36, 0x31, 0x35, 0x34, 0x37, 0x38, 0x35, //0x000131c4 QUAD $0x3735323233313339; QUAD $0x3538373435313634 // .asciz 16, '9313225746154785' + 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000131d4 QUAD $0x0000003532363531; QUAD $0x0000000000000000 // .asciz 16, '15625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000131e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000131f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013204 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013214 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013224 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0a, 0x00, 0x00, 0x00, //0x00013228 .long 10 + 0x34, 0x36, 0x35, 0x36, 0x36, 0x31, 0x32, 0x38, 0x37, 0x33, 0x30, 0x37, 0x37, 0x33, 0x39, 0x32, //0x0001322c QUAD $0x3832313636353634; QUAD $0x3239333737303337 // .asciz 16, '4656612873077392' + 0x35, 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001323c QUAD $0x0000353231383735; QUAD $0x0000000000000000 // .asciz 16, '578125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001324c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001325c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001326c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001327c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001328c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0a, 0x00, 0x00, 0x00, //0x00013290 .long 10 + 0x32, 0x33, 0x32, 0x38, 0x33, 0x30, 0x36, 0x34, 0x33, 0x36, 0x35, 0x33, 0x38, 0x36, 0x39, 0x36, //0x00013294 QUAD $0x3436303338323332; QUAD $0x3639363833353633 // .asciz 16, '2328306436538696' + 0x32, 0x38, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000132a4 QUAD $0x0035323630393832; QUAD $0x0000000000000000 // .asciz 16, '2890625\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000132b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000132c4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000132d4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000132e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000132f4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0a, 0x00, 0x00, 0x00, //0x000132f8 .long 10 + 0x31, 0x31, 0x36, 0x34, 0x31, 0x35, 0x33, 0x32, 0x31, 0x38, 0x32, 0x36, 0x39, 0x33, 0x34, 0x38, //0x000132fc QUAD $0x3233353134363131; QUAD $0x3834333936323831 // .asciz 16, '1164153218269348' + 0x31, 0x34, 0x34, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001330c QUAD $0x3532313335343431; QUAD $0x0000000000000000 // .asciz 16, '14453125\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001331c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001332c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001333c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001334c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001335c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0b, 0x00, 0x00, 0x00, //0x00013360 .long 11 + 0x35, 0x38, 0x32, 0x30, 0x37, 0x36, 0x36, 0x30, 0x39, 0x31, 0x33, 0x34, 0x36, 0x37, 0x34, 0x30, //0x00013364 QUAD $0x3036363730323835; QUAD $0x3034373634333139 // .asciz 16, '5820766091346740' + 0x37, 0x32, 0x32, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013374 QUAD $0x3532363536323237; QUAD $0x0000000000000000 // .asciz 16, '72265625\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013384 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013394 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000133a4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000133b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000133c4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0b, 0x00, 0x00, 0x00, //0x000133c8 .long 11 + 0x32, 0x39, 0x31, 0x30, 0x33, 0x38, 0x33, 0x30, 0x34, 0x35, 0x36, 0x37, 0x33, 0x33, 0x37, 0x30, //0x000133cc QUAD $0x3033383330313932; QUAD $0x3037333337363534 // .asciz 16, '2910383045673370' + 0x33, 0x36, 0x31, 0x33, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000133dc QUAD $0x3231383233313633; QUAD $0x0000000000000035 // .asciz 16, '361328125\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000133ec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000133fc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001340c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001341c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001342c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0b, 0x00, 0x00, 0x00, //0x00013430 .long 11 + 0x31, 0x34, 0x35, 0x35, 0x31, 0x39, 0x31, 0x35, 0x32, 0x32, 0x38, 0x33, 0x36, 0x36, 0x38, 0x35, //0x00013434 QUAD $0x3531393135353431; QUAD $0x3538363633383232 // .asciz 16, '1455191522836685' + 0x31, 0x38, 0x30, 0x36, 0x36, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013444 QUAD $0x3630343636303831; QUAD $0x0000000000003532 // .asciz 16, '1806640625\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013454 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013464 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013474 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013484 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013494 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0c, 0x00, 0x00, 0x00, //0x00013498 .long 12 + 0x37, 0x32, 0x37, 0x35, 0x39, 0x35, 0x37, 0x36, 0x31, 0x34, 0x31, 0x38, 0x33, 0x34, 0x32, 0x35, //0x0001349c QUAD $0x3637353935373237; QUAD $0x3532343338313431 // .asciz 16, '7275957614183425' + 0x39, 0x30, 0x33, 0x33, 0x32, 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000134ac QUAD $0x3133303233333039; QUAD $0x0000000000003532 // .asciz 16, '9033203125\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000134bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000134cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000134dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000134ec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000134fc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0c, 0x00, 0x00, 0x00, //0x00013500 .long 12 + 0x33, 0x36, 0x33, 0x37, 0x39, 0x37, 0x38, 0x38, 0x30, 0x37, 0x30, 0x39, 0x31, 0x37, 0x31, 0x32, //0x00013504 QUAD $0x3838373937333633; QUAD $0x3231373139303730 // .asciz 16, '3637978807091712' + 0x39, 0x35, 0x31, 0x36, 0x36, 0x30, 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013514 QUAD $0x3531303636313539; QUAD $0x0000000000353236 // .asciz 16, '95166015625\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013524 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013534 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013544 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013554 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013564 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0c, 0x00, 0x00, 0x00, //0x00013568 .long 12 + 0x31, 0x38, 0x31, 0x38, 0x39, 0x38, 0x39, 0x34, 0x30, 0x33, 0x35, 0x34, 0x35, 0x38, 0x35, 0x36, //0x0001356c QUAD $0x3439383938313831; QUAD $0x3635383534353330 // .asciz 16, '1818989403545856' + 0x34, 0x37, 0x35, 0x38, 0x33, 0x30, 0x30, 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, //0x0001357c QUAD $0x3730303338353734; QUAD $0x0000000035323138 // .asciz 16, '475830078125\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001358c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001359c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000135ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000135bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000135cc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0d, 0x00, 0x00, 0x00, //0x000135d0 .long 13 + 0x39, 0x30, 0x39, 0x34, 0x39, 0x34, 0x37, 0x30, 0x31, 0x37, 0x37, 0x32, 0x39, 0x32, 0x38, 0x32, //0x000135d4 QUAD $0x3037343934393039; QUAD $0x3238323932373731 // .asciz 16, '9094947017729282' + 0x33, 0x37, 0x39, 0x31, 0x35, 0x30, 0x33, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, //0x000135e4 QUAD $0x3933303531393733; QUAD $0x0000000035323630 // .asciz 16, '379150390625\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000135f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013604 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013614 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013624 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013634 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0d, 0x00, 0x00, 0x00, //0x00013638 .long 13 + 0x34, 0x35, 0x34, 0x37, 0x34, 0x37, 0x33, 0x35, 0x30, 0x38, 0x38, 0x36, 0x34, 0x36, 0x34, 0x31, //0x0001363c QUAD $0x3533373437343534; QUAD $0x3134363436383830 // .asciz 16, '4547473508864641' + 0x31, 0x38, 0x39, 0x35, 0x37, 0x35, 0x31, 0x39, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, //0x0001364c QUAD $0x3931353735393831; QUAD $0x0000003532313335 // .asciz 16, '1895751953125\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001365c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001366c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001367c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001368c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001369c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0d, 0x00, 0x00, 0x00, //0x000136a0 .long 13 + 0x32, 0x32, 0x37, 0x33, 0x37, 0x33, 0x36, 0x37, 0x35, 0x34, 0x34, 0x33, 0x32, 0x33, 0x32, 0x30, //0x000136a4 QUAD $0x3736333733373232; QUAD $0x3032333233343435 // .asciz 16, '2273736754432320' + 0x35, 0x39, 0x34, 0x37, 0x38, 0x37, 0x35, 0x39, 0x37, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, //0x000136b4 QUAD $0x3935373837343935; QUAD $0x0000353236353637 // .asciz 16, '59478759765625\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000136c4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000136d4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000136e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000136f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013704 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0d, 0x00, 0x00, 0x00, //0x00013708 .long 13 + 0x31, 0x31, 0x33, 0x36, 0x38, 0x36, 0x38, 0x33, 0x37, 0x37, 0x32, 0x31, 0x36, 0x31, 0x36, 0x30, //0x0001370c QUAD $0x3338363836333131; QUAD $0x3036313631323737 // .asciz 16, '1136868377216160' + 0x32, 0x39, 0x37, 0x33, 0x39, 0x33, 0x37, 0x39, 0x38, 0x38, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, //0x0001371c QUAD $0x3937333933373932; QUAD $0x0035323138323838 // .asciz 16, '297393798828125\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001372c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001373c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001374c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001375c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001376c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0e, 0x00, 0x00, 0x00, //0x00013770 .long 14 + 0x35, 0x36, 0x38, 0x34, 0x33, 0x34, 0x31, 0x38, 0x38, 0x36, 0x30, 0x38, 0x30, 0x38, 0x30, 0x31, //0x00013774 QUAD $0x3831343334383635; QUAD $0x3130383038303638 // .asciz 16, '5684341886080801' + 0x34, 0x38, 0x36, 0x39, 0x36, 0x38, 0x39, 0x39, 0x34, 0x31, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, //0x00013784 QUAD $0x3939383639363834; QUAD $0x0035323630343134 // .asciz 16, '486968994140625\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013794 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000137a4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000137b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000137c4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000137d4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0e, 0x00, 0x00, 0x00, //0x000137d8 .long 14 + 0x32, 0x38, 0x34, 0x32, 0x31, 0x37, 0x30, 0x39, 0x34, 0x33, 0x30, 0x34, 0x30, 0x34, 0x30, 0x30, //0x000137dc QUAD $0x3930373132343832; QUAD $0x3030343034303334 // .asciz 16, '2842170943040400' + 0x37, 0x34, 0x33, 0x34, 0x38, 0x34, 0x34, 0x39, 0x37, 0x30, 0x37, 0x30, 0x33, 0x31, 0x32, 0x35, //0x000137ec QUAD $0x3934343834333437; QUAD $0x3532313330373037 // .asciz 16, '7434844970703125' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000137fc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001380c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001381c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001382c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001383c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0e, 0x00, 0x00, 0x00, //0x00013840 .long 14 + 0x31, 0x34, 0x32, 0x31, 0x30, 0x38, 0x35, 0x34, 0x37, 0x31, 0x35, 0x32, 0x30, 0x32, 0x30, 0x30, //0x00013844 QUAD $0x3435383031323431; QUAD $0x3030323032353137 // .asciz 16, '1421085471520200' + 0x33, 0x37, 0x31, 0x37, 0x34, 0x32, 0x32, 0x34, 0x38, 0x35, 0x33, 0x35, 0x31, 0x35, 0x36, 0x32, //0x00013854 QUAD $0x3432323437313733; QUAD $0x3236353135333538 // .asciz 16, '3717422485351562' + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013864 QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013874 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013884 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013894 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000138a4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0f, 0x00, 0x00, 0x00, //0x000138a8 .long 15 + 0x37, 0x31, 0x30, 0x35, 0x34, 0x32, 0x37, 0x33, 0x35, 0x37, 0x36, 0x30, 0x31, 0x30, 0x30, 0x31, //0x000138ac QUAD $0x3337323435303137; QUAD $0x3130303130363735 // .asciz 16, '7105427357601001' + 0x38, 0x35, 0x38, 0x37, 0x31, 0x31, 0x32, 0x34, 0x32, 0x36, 0x37, 0x35, 0x37, 0x38, 0x31, 0x32, //0x000138bc QUAD $0x3432313137383538; QUAD $0x3231383735373632 // .asciz 16, '8587112426757812' + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000138cc QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000138dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000138ec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000138fc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001390c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0f, 0x00, 0x00, 0x00, //0x00013910 .long 15 + 0x33, 0x35, 0x35, 0x32, 0x37, 0x31, 0x33, 0x36, 0x37, 0x38, 0x38, 0x30, 0x30, 0x35, 0x30, 0x30, //0x00013914 QUAD $0x3633313732353533; QUAD $0x3030353030383837 // .asciz 16, '3552713678800500' + 0x39, 0x32, 0x39, 0x33, 0x35, 0x35, 0x36, 0x32, 0x31, 0x33, 0x33, 0x37, 0x38, 0x39, 0x30, 0x36, //0x00013924 QUAD $0x3236353533393239; QUAD $0x3630393837333331 // .asciz 16, '9293556213378906' + 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013934 QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013944 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013954 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013964 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013974 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0f, 0x00, 0x00, 0x00, //0x00013978 .long 15 + 0x31, 0x37, 0x37, 0x36, 0x33, 0x35, 0x36, 0x38, 0x33, 0x39, 0x34, 0x30, 0x30, 0x32, 0x35, 0x30, //0x0001397c QUAD $0x3836353336373731; QUAD $0x3035323030343933 // .asciz 16, '1776356839400250' + 0x34, 0x36, 0x34, 0x36, 0x37, 0x37, 0x38, 0x31, 0x30, 0x36, 0x36, 0x38, 0x39, 0x34, 0x35, 0x33, //0x0001398c QUAD $0x3138373736343634; QUAD $0x3335343938363630 // .asciz 16, '4646778106689453' + 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001399c QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000139ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000139bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000139cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000139dc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x10, 0x00, 0x00, 0x00, //0x000139e0 .long 16 + 0x38, 0x38, 0x38, 0x31, 0x37, 0x38, 0x34, 0x31, 0x39, 0x37, 0x30, 0x30, 0x31, 0x32, 0x35, 0x32, //0x000139e4 QUAD $0x3134383731383838; QUAD $0x3235323130303739 // .asciz 16, '8881784197001252' + 0x33, 0x32, 0x33, 0x33, 0x38, 0x39, 0x30, 0x35, 0x33, 0x33, 0x34, 0x34, 0x37, 0x32, 0x36, 0x35, //0x000139f4 QUAD $0x3530393833333233; QUAD $0x3536323734343333 // .asciz 16, '3233890533447265' + 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013a04 QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013a14 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013a24 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013a34 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013a44 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x10, 0x00, 0x00, 0x00, //0x00013a48 .long 16 + 0x34, 0x34, 0x34, 0x30, 0x38, 0x39, 0x32, 0x30, 0x39, 0x38, 0x35, 0x30, 0x30, 0x36, 0x32, 0x36, //0x00013a4c QUAD $0x3032393830343434; QUAD $0x3632363030353839 // .asciz 16, '4440892098500626' + 0x31, 0x36, 0x31, 0x36, 0x39, 0x34, 0x35, 0x32, 0x36, 0x36, 0x37, 0x32, 0x33, 0x36, 0x33, 0x32, //0x00013a5c QUAD $0x3235343936313631; QUAD $0x3233363332373636 // .asciz 16, '1616945266723632' + 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013a6c QUAD $0x0000000035323138; QUAD $0x0000000000000000 // .asciz 16, '8125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013a7c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013a8c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013a9c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013aac LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x10, 0x00, 0x00, 0x00, //0x00013ab0 .long 16 + 0x32, 0x32, 0x32, 0x30, 0x34, 0x34, 0x36, 0x30, 0x34, 0x39, 0x32, 0x35, 0x30, 0x33, 0x31, 0x33, //0x00013ab4 QUAD $0x3036343430323232; QUAD $0x3331333035323934 // .asciz 16, '2220446049250313' + 0x30, 0x38, 0x30, 0x38, 0x34, 0x37, 0x32, 0x36, 0x33, 0x33, 0x33, 0x36, 0x31, 0x38, 0x31, 0x36, //0x00013ac4 QUAD $0x3632373438303830; QUAD $0x3631383136333333 // .asciz 16, '0808472633361816' + 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013ad4 QUAD $0x0000003532363034; QUAD $0x0000000000000000 // .asciz 16, '40625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013ae4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013af4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013b04 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013b14 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x10, 0x00, 0x00, 0x00, //0x00013b18 .long 16 + 0x31, 0x31, 0x31, 0x30, 0x32, 0x32, 0x33, 0x30, 0x32, 0x34, 0x36, 0x32, 0x35, 0x31, 0x35, 0x36, //0x00013b1c QUAD $0x3033323230313131; QUAD $0x3635313532363432 // .asciz 16, '1110223024625156' + 0x35, 0x34, 0x30, 0x34, 0x32, 0x33, 0x36, 0x33, 0x31, 0x36, 0x36, 0x38, 0x30, 0x39, 0x30, 0x38, //0x00013b2c QUAD $0x3336333234303435; QUAD $0x3830393038363631 // .asciz 16, '5404236316680908' + 0x32, 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013b3c QUAD $0x0000353231333032; QUAD $0x0000000000000000 // .asciz 16, '203125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013b4c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013b5c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013b6c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013b7c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x11, 0x00, 0x00, 0x00, //0x00013b80 .long 17 + 0x35, 0x35, 0x35, 0x31, 0x31, 0x31, 0x35, 0x31, 0x32, 0x33, 0x31, 0x32, 0x35, 0x37, 0x38, 0x32, //0x00013b84 QUAD $0x3135313131353535; QUAD $0x3238373532313332 // .asciz 16, '5551115123125782' + 0x37, 0x30, 0x32, 0x31, 0x31, 0x38, 0x31, 0x35, 0x38, 0x33, 0x34, 0x30, 0x34, 0x35, 0x34, 0x31, //0x00013b94 QUAD $0x3531383131323037; QUAD $0x3134353430343338 // .asciz 16, '7021181583404541' + 0x30, 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013ba4 QUAD $0x0000353236353130; QUAD $0x0000000000000000 // .asciz 16, '015625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013bb4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013bc4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013bd4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013be4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x11, 0x00, 0x00, 0x00, //0x00013be8 .long 17 + 0x32, 0x37, 0x37, 0x35, 0x35, 0x35, 0x37, 0x35, 0x36, 0x31, 0x35, 0x36, 0x32, 0x38, 0x39, 0x31, //0x00013bec QUAD $0x3537353535373732; QUAD $0x3139383236353136 // .asciz 16, '2775557561562891' + 0x33, 0x35, 0x31, 0x30, 0x35, 0x39, 0x30, 0x37, 0x39, 0x31, 0x37, 0x30, 0x32, 0x32, 0x37, 0x30, //0x00013bfc QUAD $0x3730393530313533; QUAD $0x3037323230373139 // .asciz 16, '3510590791702270' + 0x35, 0x30, 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013c0c QUAD $0x0035323138373035; QUAD $0x0000000000000000 // .asciz 16, '5078125\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013c1c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013c2c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013c3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013c4c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x11, 0x00, 0x00, 0x00, //0x00013c50 .long 17 + 0x31, 0x33, 0x38, 0x37, 0x37, 0x37, 0x38, 0x37, 0x38, 0x30, 0x37, 0x38, 0x31, 0x34, 0x34, 0x35, //0x00013c54 QUAD $0x3738373737383331; QUAD $0x3534343138373038 // .asciz 16, '1387778780781445' + 0x36, 0x37, 0x35, 0x35, 0x32, 0x39, 0x35, 0x33, 0x39, 0x35, 0x38, 0x35, 0x31, 0x31, 0x33, 0x35, //0x00013c64 QUAD $0x3335393235353736; QUAD $0x3533313135383539 // .asciz 16, '6755295395851135' + 0x32, 0x35, 0x33, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013c74 QUAD $0x3532363039333532; QUAD $0x0000000000000000 // .asciz 16, '25390625\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013c84 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013c94 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013ca4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013cb4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x12, 0x00, 0x00, 0x00, //0x00013cb8 .long 18 + 0x36, 0x39, 0x33, 0x38, 0x38, 0x39, 0x33, 0x39, 0x30, 0x33, 0x39, 0x30, 0x37, 0x32, 0x32, 0x38, //0x00013cbc QUAD $0x3933393838333936; QUAD $0x3832323730393330 // .asciz 16, '6938893903907228' + 0x33, 0x37, 0x37, 0x36, 0x34, 0x37, 0x36, 0x39, 0x37, 0x39, 0x32, 0x35, 0x35, 0x36, 0x37, 0x36, //0x00013ccc QUAD $0x3936373436373733; QUAD $0x3637363535323937 // .asciz 16, '3776476979255676' + 0x32, 0x36, 0x39, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013cdc QUAD $0x3532313335393632; QUAD $0x0000000000000000 // .asciz 16, '26953125\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013cec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013cfc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013d0c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013d1c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x12, 0x00, 0x00, 0x00, //0x00013d20 .long 18 + 0x33, 0x34, 0x36, 0x39, 0x34, 0x34, 0x36, 0x39, 0x35, 0x31, 0x39, 0x35, 0x33, 0x36, 0x31, 0x34, //0x00013d24 QUAD $0x3936343439363433; QUAD $0x3431363335393135 // .asciz 16, '3469446951953614' + 0x31, 0x38, 0x38, 0x38, 0x32, 0x33, 0x38, 0x34, 0x38, 0x39, 0x36, 0x32, 0x37, 0x38, 0x33, 0x38, //0x00013d34 QUAD $0x3438333238383831; QUAD $0x3833383732363938 // .asciz 16, '1888238489627838' + 0x31, 0x33, 0x34, 0x37, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013d44 QUAD $0x3236353637343331; QUAD $0x0000000000000035 // .asciz 16, '134765625\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013d54 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013d64 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013d74 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013d84 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x12, 0x00, 0x00, 0x00, //0x00013d88 .long 18 + 0x31, 0x37, 0x33, 0x34, 0x37, 0x32, 0x33, 0x34, 0x37, 0x35, 0x39, 0x37, 0x36, 0x38, 0x30, 0x37, //0x00013d8c QUAD $0x3433323734333731; QUAD $0x3730383637393537 // .asciz 16, '1734723475976807' + 0x30, 0x39, 0x34, 0x34, 0x31, 0x31, 0x39, 0x32, 0x34, 0x34, 0x38, 0x31, 0x33, 0x39, 0x31, 0x39, //0x00013d9c QUAD $0x3239313134343930; QUAD $0x3931393331383434 // .asciz 16, '0944119244813919' + 0x30, 0x36, 0x37, 0x33, 0x38, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013dac QUAD $0x3138323833373630; QUAD $0x0000000000003532 // .asciz 16, '0673828125\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013dbc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013dcc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013ddc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013dec LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x13, 0x00, 0x00, 0x00, //0x00013df0 .long 19 + 0x38, 0x36, 0x37, 0x33, 0x36, 0x31, 0x37, 0x33, 0x37, 0x39, 0x38, 0x38, 0x34, 0x30, 0x33, 0x35, //0x00013df4 QUAD $0x3337313633373638; QUAD $0x3533303438383937 // .asciz 16, '8673617379884035' + 0x34, 0x37, 0x32, 0x30, 0x35, 0x39, 0x36, 0x32, 0x32, 0x34, 0x30, 0x36, 0x39, 0x35, 0x39, 0x35, //0x00013e04 QUAD $0x3236393530323734; QUAD $0x3539353936303432 // .asciz 16, '4720596224069595' + 0x33, 0x33, 0x36, 0x39, 0x31, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013e14 QUAD $0x3630343139363333; QUAD $0x0000000000003532 // .asciz 16, '3369140625\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013e24 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013e34 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013e44 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013e54 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013e58 .p2align 4, 0x00 + //0x00013e60 _P10_TAB + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, //0x00013e60 .quad 4607182418800017408 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, //0x00013e68 .quad 4621819117588971520 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, //0x00013e70 .quad 4636737291354636288 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x8f, 0x40, //0x00013e78 .quad 4652007308841189376 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc3, 0x40, //0x00013e80 .quad 4666723172467343360 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xf8, 0x40, //0x00013e88 .quad 4681608360884174848 + 0x00, 0x00, 0x00, 0x00, 0x80, 0x84, 0x2e, 0x41, //0x00013e90 .quad 4696837146684686336 + 0x00, 0x00, 0x00, 0x00, 0xd0, 0x12, 0x63, 0x41, //0x00013e98 .quad 4711630319722168320 + 0x00, 0x00, 0x00, 0x00, 0x84, 0xd7, 0x97, 0x41, //0x00013ea0 .quad 4726483295884279808 + 0x00, 0x00, 0x00, 0x00, 0x65, 0xcd, 0xcd, 0x41, //0x00013ea8 .quad 4741671816366391296 + 0x00, 0x00, 0x00, 0x20, 0x5f, 0xa0, 0x02, 0x42, //0x00013eb0 .quad 4756540486875873280 + 0x00, 0x00, 0x00, 0xe8, 0x76, 0x48, 0x37, 0x42, //0x00013eb8 .quad 4771362005757984768 + 0x00, 0x00, 0x00, 0xa2, 0x94, 0x1a, 0x6d, 0x42, //0x00013ec0 .quad 4786511204640096256 + 0x00, 0x00, 0x40, 0xe5, 0x9c, 0x30, 0xa2, 0x42, //0x00013ec8 .quad 4801453603149578240 + 0x00, 0x00, 0x90, 0x1e, 0xc4, 0xbc, 0xd6, 0x42, //0x00013ed0 .quad 4816244402031689728 + 0x00, 0x00, 0x34, 0x26, 0xf5, 0x6b, 0x0c, 0x43, //0x00013ed8 .quad 4831355200913801216 + 0x00, 0x80, 0xe0, 0x37, 0x79, 0xc3, 0x41, 0x43, //0x00013ee0 .quad 4846369599423283200 + 0x00, 0xa0, 0xd8, 0x85, 0x57, 0x34, 0x76, 0x43, //0x00013ee8 .quad 4861130398305394688 + 0x00, 0xc8, 0x4e, 0x67, 0x6d, 0xc1, 0xab, 0x43, //0x00013ef0 .quad 4876203697187506176 + 0x00, 0x3d, 0x91, 0x60, 0xe4, 0x58, 0xe1, 0x43, //0x00013ef8 .quad 4891288408196988160 + 0x40, 0x8c, 0xb5, 0x78, 0x1d, 0xaf, 0x15, 0x44, //0x00013f00 .quad 4906019910204099648 + 0x50, 0xef, 0xe2, 0xd6, 0xe4, 0x1a, 0x4b, 0x44, //0x00013f08 .quad 4921056587992461136 + 0x92, 0xd5, 0x4d, 0x06, 0xcf, 0xf0, 0x80, 0x44, //0x00013f10 .quad 4936209963552724370 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013f18 .p2align 4, 0x00 + //0x00013f20 _pow10_ceil_sig_f32.g + 0xf5, 0xfc, 0x43, 0x4b, 0x2c, 0xb3, 0xce, 0x81, //0x00013f20 .quad -9093133594791772939 + 0x32, 0xfc, 0x14, 0x5e, 0xf7, 0x5f, 0x42, 0xa2, //0x00013f28 .quad -6754730975062328270 + 0x3f, 0x3b, 0x9a, 0x35, 0xf5, 0xf7, 0xd2, 0xca, //0x00013f30 .quad -3831727700400522433 + 0x0e, 0xca, 0x00, 0x83, 0xf2, 0xb5, 0x87, 0xfd, //0x00013f38 .quad -177973607073265138 + 0x49, 0x7e, 0xe0, 0x91, 0xb7, 0xd1, 0x74, 0x9e, //0x00013f40 .quad -7028762532061872567 + 0xdb, 0x9d, 0x58, 0x76, 0x25, 0x06, 0x12, 0xc6, //0x00013f48 .quad -4174267146649952805 + 0x52, 0xc5, 0xee, 0xd3, 0xae, 0x87, 0x96, 0xf7, //0x00013f50 .quad -606147914885053102 + 0x53, 0x3b, 0x75, 0x44, 0xcd, 0x14, 0xbe, 0x9a, //0x00013f58 .quad -7296371474444240045 + 0x28, 0x8a, 0x92, 0x95, 0x00, 0x9a, 0x6d, 0xc1, //0x00013f60 .quad -4508778324627912152 + 0xb2, 0x2c, 0xf7, 0xba, 0x80, 0x00, 0xc9, 0xf1, //0x00013f68 .quad -1024286887357502286 + 0xef, 0x7b, 0xda, 0x74, 0x50, 0xa0, 0x1d, 0x97, //0x00013f70 .quad -7557708332239520785 + 0xeb, 0x1a, 0x11, 0x92, 0x64, 0x08, 0xe5, 0xbc, //0x00013f78 .quad -4835449396872013077 + 0xa6, 0x61, 0x95, 0xb6, 0x7d, 0x4a, 0x1e, 0xec, //0x00013f80 .quad -1432625727662628442 + 0x08, 0x5d, 0x1d, 0x92, 0x8e, 0xee, 0x92, 0x93, //0x00013f88 .quad -7812920107430224632 + 0x4a, 0xb4, 0xa4, 0x36, 0x32, 0xaa, 0x77, 0xb8, //0x00013f90 .quad -5154464115860392886 + 0x5c, 0xe1, 0x4d, 0xc4, 0xbe, 0x94, 0x95, 0xe6, //0x00013f98 .quad -1831394126398103204 + 0xda, 0xac, 0xb0, 0x3a, 0xf7, 0x7c, 0x1d, 0x90, //0x00013fa0 .quad -8062150356639896358 + 0x10, 0xd8, 0x5c, 0x09, 0x35, 0xdc, 0x24, 0xb4, //0x00013fa8 .quad -5466001927372482544 + 0x14, 0x0e, 0xb4, 0x4b, 0x42, 0x13, 0x2e, 0xe1, //0x00013fb0 .quad -2220816390788215276 + 0xcc, 0x88, 0x50, 0x6f, 0x09, 0xcc, 0xbc, 0x8c, //0x00013fb8 .quad -8305539271883716404 + 0xff, 0xaa, 0x24, 0xcb, 0x0b, 0xff, 0xeb, 0xaf, //0x00013fc0 .quad -5770238071427257601 + 0xbf, 0xd5, 0xed, 0xbd, 0xce, 0xfe, 0xe6, 0xdb, //0x00013fc8 .quad -2601111570856684097 + 0x98, 0xa5, 0xb4, 0x36, 0x41, 0x5f, 0x70, 0x89, //0x00013fd0 .quad -8543223759426509416 + 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x00013fd8 .quad -6067343680855748867 + 0xbd, 0x42, 0x7a, 0xe5, 0xd5, 0x94, 0xbf, 0xd6, //0x00013fe0 .quad -2972493582642298179 + 0xb6, 0x69, 0x6c, 0xaf, 0x05, 0xbd, 0x37, 0x86, //0x00013fe8 .quad -8775337516792518218 + 0x24, 0x84, 0x47, 0x1b, 0x47, 0xac, 0xc5, 0xa7, //0x00013ff0 .quad -6357485877563259868 + 0x2c, 0x65, 0x19, 0xe2, 0x58, 0x17, 0xb7, 0xd1, //0x00013ff8 .quad -3335171328526686932 + 0x3c, 0xdf, 0x4f, 0x8d, 0x97, 0x6e, 0x12, 0x83, //0x00014000 .quad -9002011107970261188 + 0x0b, 0xd7, 0xa3, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, //0x00014008 .quad -6640827866535438581 + 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x00014010 .quad -3689348814741910323 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x00014018 .quad -9223372036854775808 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, //0x00014020 .quad -6917529027641081856 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, //0x00014028 .quad -4035225266123964416 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, //0x00014030 .quad -432345564227567616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x9c, //0x00014038 .quad -7187745005283311616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xc3, //0x00014040 .quad -4372995238176751616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xf4, //0x00014048 .quad -854558029293551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x98, //0x00014050 .quad -7451627795949551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xbc, 0xbe, //0x00014058 .quad -4702848726509551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6b, 0xee, //0x00014060 .quad -1266874889709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x02, 0x95, //0x00014068 .quad -7709325833709551616 + 0x00, 0x00, 0x00, 0x00, 0x40, 0xb7, 0x43, 0xba, //0x00014070 .quad -5024971273709551616 + 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0xd4, 0xe8, //0x00014078 .quad -1669528073709551616 + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xe7, 0x84, 0x91, //0x00014080 .quad -7960984073709551616 + 0x00, 0x00, 0x00, 0x80, 0xf4, 0x20, 0xe6, 0xb5, //0x00014088 .quad -5339544073709551616 + 0x00, 0x00, 0x00, 0xa0, 0x31, 0xa9, 0x5f, 0xe3, //0x00014090 .quad -2062744073709551616 + 0x00, 0x00, 0x00, 0x04, 0xbf, 0xc9, 0x1b, 0x8e, //0x00014098 .quad -8206744073709551616 + 0x00, 0x00, 0x00, 0xc5, 0x2e, 0xbc, 0xa2, 0xb1, //0x000140a0 .quad -5646744073709551616 + 0x00, 0x00, 0x40, 0x76, 0x3a, 0x6b, 0x0b, 0xde, //0x000140a8 .quad -2446744073709551616 + 0x00, 0x00, 0xe8, 0x89, 0x04, 0x23, 0xc7, 0x8a, //0x000140b0 .quad -8446744073709551616 + 0x00, 0x00, 0x62, 0xac, 0xc5, 0xeb, 0x78, 0xad, //0x000140b8 .quad -5946744073709551616 + 0x00, 0x80, 0x7a, 0x17, 0xb7, 0x26, 0xd7, 0xd8, //0x000140c0 .quad -2821744073709551616 + 0x00, 0x90, 0xac, 0x6e, 0x32, 0x78, 0x86, 0x87, //0x000140c8 .quad -8681119073709551616 + 0x00, 0xb4, 0x57, 0x0a, 0x3f, 0x16, 0x68, 0xa9, //0x000140d0 .quad -6239712823709551616 + 0x00, 0xa1, 0xed, 0xcc, 0xce, 0x1b, 0xc2, 0xd3, //0x000140d8 .quad -3187955011209551616 + 0xa0, 0x84, 0x14, 0x40, 0x61, 0x51, 0x59, 0x84, //0x000140e0 .quad -8910000909647051616 + 0xc8, 0xa5, 0x19, 0x90, 0xb9, 0xa5, 0x6f, 0xa5, //0x000140e8 .quad -6525815118631426616 + 0x3a, 0x0f, 0x20, 0xf4, 0x27, 0x8f, 0xcb, 0xce, //0x000140f0 .quad -3545582879861895366 + 0x85, 0x09, 0x94, 0xf8, 0x78, 0x39, 0x3f, 0x81, //0x000140f8 .quad -9133518327554766459 + 0xe6, 0x0b, 0xb9, 0x36, 0xd7, 0x07, 0x8f, 0xa1, //0x00014100 .quad -6805211891016070170 + 0xdf, 0x4e, 0x67, 0x04, 0xcd, 0xc9, 0xf2, 0xc9, //0x00014108 .quad -3894828845342699809 + 0x97, 0x22, 0x81, 0x45, 0x40, 0x7c, 0x6f, 0xfc, //0x00014110 .quad -256850038250986857 + 0x9e, 0xb5, 0x70, 0x2b, 0xa8, 0xad, 0xc5, 0x9d, //0x00014118 .quad -7078060301547948642 + 0x06, 0xe3, 0x4c, 0x36, 0x12, 0x19, 0x37, 0xc5, //0x00014120 .quad -4235889358507547898 + 0xc7, 0x1b, 0xe0, 0xc3, 0x56, 0xdf, 0x84, 0xf6, //0x00014128 .quad -683175679707046969 + 0x5d, 0x11, 0x6c, 0x3a, 0x96, 0x0b, 0x13, 0x9a, //0x00014130 .quad -7344513827457986211 + 0xb4, 0x15, 0x07, 0xc9, 0x7b, 0xce, 0x97, 0xc0, //0x00014138 .quad -4568956265895094860 + 0x21, 0xdb, 0x48, 0xbb, 0x1a, 0xc2, 0xbd, 0xf0, //0x00014140 .quad -1099509313941480671 + 0xf5, 0x88, 0x0d, 0xb5, 0x50, 0x99, 0x76, 0x96, //0x00014148 .quad -7604722348854507275 + 0x32, 0xeb, 0x50, 0xe2, 0xa4, 0x3f, 0x14, 0xbc, //0x00014150 .quad -4894216917640746190 + 0xfe, 0x25, 0xe5, 0x1a, 0x8e, 0x4f, 0x19, 0xeb, //0x00014158 .quad -1506085128623544834 + 0xbf, 0x37, 0xcf, 0xd0, 0xb8, 0xd1, 0xef, 0x92, //0x00014160 .quad -7858832233030797377 + 0xae, 0x05, 0x03, 0x05, 0x27, 0xc6, 0xab, 0xb7, //0x00014168 .quad -5211854272861108818 + 0x1a, 0xc7, 0x43, 0xc6, 0xb0, 0xb7, 0x96, 0xe5, //0x00014170 .quad -1903131822648998118 + 0x70, 0x5c, 0xea, 0x7b, 0xce, 0x32, 0x7e, 0x8f, //0x00014178 .quad -8106986416796705680 + 0x8c, 0xf3, 0xe4, 0x1a, 0x82, 0xbf, 0x5d, 0xb3, //0x00014180 .quad -5522047002568494196 +} diff --git a/vendor/github.com/bytedance/sonic/internal/native/dispatch_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/dispatch_amd64.go index 11e517231f..41441f5139 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/dispatch_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/dispatch_amd64.go @@ -24,6 +24,8 @@ import ( `github.com/bytedance/sonic/internal/native/avx2` `github.com/bytedance/sonic/internal/native/sse` `github.com/bytedance/sonic/internal/native/types` + `github.com/bytedance/sonic/internal/rt` + `github.com/bytedance/sonic/loader` ) const ( @@ -40,8 +42,9 @@ var ( ) var ( - S_quote uintptr - S_unquote uintptr + S_quote uintptr + S_unquote uintptr + S_html_escape uintptr ) var ( @@ -53,140 +56,148 @@ var ( ) var ( - S_skip_one uintptr - S_skip_one_fast uintptr - S_get_by_path uintptr - S_skip_array uintptr - S_skip_object uintptr - S_skip_number uintptr + S_skip_one uintptr + S_skip_one_fast uintptr + S_get_by_path uintptr + S_skip_array uintptr + S_skip_object uintptr + S_skip_number uintptr +) + +var ( + S_validate_one uintptr + S_validate_utf8 uintptr + S_validate_utf8_fast uintptr +) + +var ( + __Quote func(s unsafe.Pointer, nb int, dp unsafe.Pointer, dn unsafe.Pointer, flags uint64) int + + __Unquote func(s unsafe.Pointer, nb int, dp unsafe.Pointer, ep unsafe.Pointer, flags uint64) int + + __HTMLEscape func(s unsafe.Pointer, nb int, dp unsafe.Pointer, dn unsafe.Pointer) int + + __Value func(s unsafe.Pointer, n int, p int, v unsafe.Pointer, flags uint64) int + + __SkipOne func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer, flags uint64) int + + __SkipOneFast func(s unsafe.Pointer, p unsafe.Pointer) int + + __GetByPath func(s unsafe.Pointer, p unsafe.Pointer, path unsafe.Pointer, m unsafe.Pointer) int + + __ValidateOne func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer) int + + __I64toa func(out unsafe.Pointer, val int64) (ret int) + + __U64toa func(out unsafe.Pointer, val uint64) (ret int) + + __F64toa func(out unsafe.Pointer, val float64) (ret int) + + __ValidateUTF8 func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer) (ret int) + + __ValidateUTF8Fast func(s unsafe.Pointer) (ret int) ) //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func Quote(s unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int, flags uint64) int +func Quote(s unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int, flags uint64) int { + return __Quote(rt.NoEscape(unsafe.Pointer(s)), nb, rt.NoEscape(unsafe.Pointer(dp)), rt.NoEscape(unsafe.Pointer(dn)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func Unquote(s unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) int +func Unquote(s unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) int { + return __Unquote(rt.NoEscape(unsafe.Pointer(s)), nb, rt.NoEscape(unsafe.Pointer(dp)), rt.NoEscape(unsafe.Pointer(ep)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func HTMLEscape(s unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int) int +func HTMLEscape(s unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int) int { + return __HTMLEscape(rt.NoEscape(unsafe.Pointer(s)), nb, rt.NoEscape(unsafe.Pointer(dp)), rt.NoEscape(unsafe.Pointer(dn))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func Value(s unsafe.Pointer, n int, p int, v *types.JsonState, flags uint64) int +func Value(s unsafe.Pointer, n int, p int, v *types.JsonState, flags uint64) int { + return __Value(rt.NoEscape(unsafe.Pointer(s)), n, p, rt.NoEscape(unsafe.Pointer(v)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func SkipOne(s *string, p *int, m *types.StateMachine, flags uint64) int +func SkipOne(s *string, p *int, m *types.StateMachine, flags uint64) int { + return __SkipOne(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func SkipOneFast(s *string, p *int) int +func SkipOneFast(s *string, p *int) int { + return __SkipOneFast(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func GetByPath(s *string, p *int, path *[]interface{}, m *types.StateMachine) int +func GetByPath(s *string, p *int, path *[]interface{}, m *types.StateMachine) int { + return __GetByPath(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(path)), rt.NoEscape(unsafe.Pointer(m))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func ValidateOne(s *string, p *int, m *types.StateMachine) int +func ValidateOne(s *string, p *int, m *types.StateMachine) int { + return __ValidateOne(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func I64toa(out *byte, val int64) (ret int) +func I64toa(out *byte, val int64) (ret int) { + return __I64toa(rt.NoEscape(unsafe.Pointer(out)), val) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func U64toa(out *byte, val uint64) (ret int) +func U64toa(out *byte, val uint64) (ret int) { + return __U64toa(rt.NoEscape(unsafe.Pointer(out)), val) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func F64toa(out *byte, val float64) (ret int) +func F64toa(out *byte, val float64) (ret int) { + return __F64toa(rt.NoEscape(unsafe.Pointer(out)), val) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func ValidateUTF8(s *string, p *int, m *types.StateMachine) (ret int) +func ValidateUTF8(s *string, p *int, m *types.StateMachine) (ret int) { + return __ValidateUTF8(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func ValidateUTF8Fast(s *string) (ret int) +func ValidateUTF8Fast(s *string) (ret int) { + return __ValidateUTF8Fast(rt.NoEscape(unsafe.Pointer(s))) +} + +var stubs = []loader.GoC{ + {"_f64toa", &S_f64toa, &__F64toa}, + {"_f32toa", &S_f32toa, nil}, + {"_i64toa", &S_i64toa, &__I64toa}, + {"_u64toa", &S_u64toa, &__U64toa}, + {"_lspace", &S_lspace, nil}, + {"_quote", &S_quote, &__Quote}, + {"_unquote", &S_unquote, &__Unquote}, + {"_html_escape", &S_html_escape, &__HTMLEscape}, + {"_value", &S_value, &__Value}, + {"_vstring", &S_vstring, nil}, + {"_vnumber", &S_vnumber, nil}, + {"_vsigned", &S_vsigned, nil}, + {"_vunsigned", &S_vunsigned, nil}, + {"_skip_one", &S_skip_one, &__SkipOne}, + {"_skip_one_fast", &S_skip_one_fast, &__SkipOneFast}, + {"_get_by_path", &S_get_by_path, &__GetByPath}, + {"_skip_array", &S_skip_array, nil}, + {"_skip_object", &S_skip_object, nil}, + {"_skip_number", &S_skip_number, nil}, + {"_validate_one", &S_validate_one, &__ValidateOne}, + {"_validate_utf8", &S_validate_utf8, &__ValidateUTF8}, + {"_validate_utf8_fast", &S_validate_utf8_fast, &__ValidateUTF8Fast}, +} func useAVX() { - S_f64toa = avx.S_f64toa - S_f32toa = avx.S_f32toa - S_i64toa = avx.S_i64toa - S_u64toa = avx.S_u64toa - S_lspace = avx.S_lspace - S_quote = avx.S_quote - S_unquote = avx.S_unquote - S_value = avx.S_value - S_vstring = avx.S_vstring - S_vnumber = avx.S_vnumber - S_vsigned = avx.S_vsigned - S_vunsigned = avx.S_vunsigned - S_skip_one = avx.S_skip_one - S_skip_one_fast = avx.S_skip_one_fast - S_skip_array = avx.S_skip_array - S_skip_object = avx.S_skip_object - S_skip_number = avx.S_skip_number - S_get_by_path = avx.S_get_by_path + loader.WrapGoC(avx.Text__native_entry__, avx.Funcs, stubs, "avx", "avx/native.c") } func useAVX2() { - S_f64toa = avx2.S_f64toa - S_f32toa = avx2.S_f32toa - S_i64toa = avx2.S_i64toa - S_u64toa = avx2.S_u64toa - S_lspace = avx2.S_lspace - S_quote = avx2.S_quote - S_unquote = avx2.S_unquote - S_value = avx2.S_value - S_vstring = avx2.S_vstring - S_vnumber = avx2.S_vnumber - S_vsigned = avx2.S_vsigned - S_vunsigned = avx2.S_vunsigned - S_skip_one = avx2.S_skip_one - S_skip_one_fast = avx2.S_skip_one_fast - S_skip_array = avx2.S_skip_array - S_skip_object = avx2.S_skip_object - S_skip_number = avx2.S_skip_number - S_get_by_path = avx2.S_get_by_path + loader.WrapGoC(avx2.Text__native_entry__, avx2.Funcs, stubs, "avx2", "avx2/native.c") } func useSSE() { - S_f64toa = sse.S_f64toa - S_f32toa = sse.S_f32toa - S_i64toa = sse.S_i64toa - S_u64toa = sse.S_u64toa - S_lspace = sse.S_lspace - S_quote = sse.S_quote - S_unquote = sse.S_unquote - S_value = sse.S_value - S_vstring = sse.S_vstring - S_vnumber = sse.S_vnumber - S_vsigned = sse.S_vsigned - S_vunsigned = sse.S_vunsigned - S_skip_one = sse.S_skip_one - S_skip_one_fast = sse.S_skip_one_fast - S_skip_array = sse.S_skip_array - S_skip_object = sse.S_skip_object - S_skip_number = sse.S_skip_number - S_get_by_path = sse.S_get_by_path + loader.WrapGoC(sse.Text__native_entry__, sse.Funcs, stubs, "sse", "sse/native.c") } func init() { diff --git a/vendor/github.com/bytedance/sonic/internal/native/dispatch_amd64.s b/vendor/github.com/bytedance/sonic/internal/native/dispatch_amd64.s deleted file mode 100644 index bfd2f52dbc..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/native/dispatch_amd64.s +++ /dev/null @@ -1,137 +0,0 @@ -// -// Copyright 2021 ByteDance Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#include "go_asm.h" -#include "funcdata.h" -#include "textflag.h" - -TEXT ·Quote(SB), NOSPLIT, $0 - 48 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__quote(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__quote(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__quote(SB) - -TEXT ·Unquote(SB), NOSPLIT, $0 - 48 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__unquote(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__unquote(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__unquote(SB) - -TEXT ·HTMLEscape(SB), NOSPLIT, $0 - 40 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__html_escape(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__html_escape(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__html_escape(SB) - -TEXT ·Value(SB), NOSPLIT, $0 - 48 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__value(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__value(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__value(SB) - -TEXT ·SkipOne(SB), NOSPLIT, $0 - 40 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__skip_one(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__skip_one(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__skip_one(SB) - -TEXT ·SkipOneFast(SB), NOSPLIT, $0 - 24 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__skip_one_fast(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__skip_one_fast(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__skip_one_fast(SB) - -TEXT ·GetByPath(SB), NOSPLIT, $0 - 40 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__get_by_path(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__get_by_path(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__get_by_path(SB) - -TEXT ·ValidateOne(SB), NOSPLIT, $0 - 32 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__validate_one(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__validate_one(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__validate_one(SB) - -TEXT ·ValidateUTF8(SB), NOSPLIT, $0 - 40 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__validate_utf8(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__validate_utf8(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__validate_utf8(SB) - -TEXT ·ValidateUTF8Fast(SB), NOSPLIT, $0 - 16 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__validate_utf8_fast(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__validate_utf8_fast(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__validate_utf8_fast(SB) - -TEXT ·I64toa(SB), NOSPLIT, $0 - 32 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__i64toa(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__i64toa(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__i64toa(SB) - -TEXT ·U64toa(SB), NOSPLIT, $0 - 32 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__u64toa(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__u64toa(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__u64toa(SB) - -TEXT ·F64toa(SB), NOSPLIT, $0 - 32 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__f64toa(SB) - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__f64toa(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕sse·__f64toa(SB) - diff --git a/vendor/github.com/bytedance/sonic/internal/native/fastfloat_amd64_test.tmpl b/vendor/github.com/bytedance/sonic/internal/native/fastfloat_amd64_test.tmpl index 7ed9e4704e..c619d8afa1 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/fastfloat_amd64_test.tmpl +++ b/vendor/github.com/bytedance/sonic/internal/native/fastfloat_amd64_test.tmpl @@ -1,3 +1,5 @@ +// Code generated by Makefile, DO NOT EDIT. + /* * Copyright 2021 ByteDance Inc. * @@ -17,35 +19,35 @@ package {{PACKAGE}} import ( + `encoding/json` `math` + `math/rand` `strconv` `testing` - `math/rand` - `encoding/json` `github.com/stretchr/testify/assert` ) func TestFastFloat_Encode(t *testing.T) { var buf [64]byte - assert.Equal(t, "0" , string(buf[:__f64toa(&buf[0], 0)])) - assert.Equal(t, "-0" , string(buf[:__f64toa(&buf[0], math.Float64frombits(0x8000000000000000))])) - assert.Equal(t, "12340000000" , string(buf[:__f64toa(&buf[0], 1234e7)])) - assert.Equal(t, "12.34" , string(buf[:__f64toa(&buf[0], 1234e-2)])) - assert.Equal(t, "0.001234" , string(buf[:__f64toa(&buf[0], 1234e-6)])) - assert.Equal(t, "1e+30" , string(buf[:__f64toa(&buf[0], 1e30)])) - assert.Equal(t, "1.234e+33" , string(buf[:__f64toa(&buf[0], 1234e30)])) - assert.Equal(t, "1.234e+308" , string(buf[:__f64toa(&buf[0], 1234e305)])) - assert.Equal(t, "1.234e-317" , string(buf[:__f64toa(&buf[0], 1234e-320)])) - assert.Equal(t, "1.7976931348623157e+308" , string(buf[:__f64toa(&buf[0], 1.7976931348623157e308)])) - assert.Equal(t, "-12340000000" , string(buf[:__f64toa(&buf[0], -1234e7)])) - assert.Equal(t, "-12.34" , string(buf[:__f64toa(&buf[0], -1234e-2)])) - assert.Equal(t, "-0.001234" , string(buf[:__f64toa(&buf[0], -1234e-6)])) - assert.Equal(t, "-1e+30" , string(buf[:__f64toa(&buf[0], -1e30)])) - assert.Equal(t, "-1.234e+33" , string(buf[:__f64toa(&buf[0], -1234e30)])) - assert.Equal(t, "-1.234e+308" , string(buf[:__f64toa(&buf[0], -1234e305)])) - assert.Equal(t, "-1.234e-317" , string(buf[:__f64toa(&buf[0], -1234e-320)])) - assert.Equal(t, "-2.2250738585072014e-308" , string(buf[:__f64toa(&buf[0], -2.2250738585072014e-308)])) + assert.Equal(t, "0" , string(buf[:f64toa(&buf[0], 0)])) + assert.Equal(t, "-0" , string(buf[:f64toa(&buf[0], math.Float64frombits(0x8000000000000000))])) + assert.Equal(t, "12340000000" , string(buf[:f64toa(&buf[0], 1234e7)])) + assert.Equal(t, "12.34" , string(buf[:f64toa(&buf[0], 1234e-2)])) + assert.Equal(t, "0.001234" , string(buf[:f64toa(&buf[0], 1234e-6)])) + assert.Equal(t, "1e+30" , string(buf[:f64toa(&buf[0], 1e30)])) + assert.Equal(t, "1.234e+33" , string(buf[:f64toa(&buf[0], 1234e30)])) + assert.Equal(t, "1.234e+308" , string(buf[:f64toa(&buf[0], 1234e305)])) + assert.Equal(t, "1.234e-317" , string(buf[:f64toa(&buf[0], 1234e-320)])) + assert.Equal(t, "1.7976931348623157e+308" , string(buf[:f64toa(&buf[0], 1.7976931348623157e308)])) + assert.Equal(t, "-12340000000" , string(buf[:f64toa(&buf[0], -1234e7)])) + assert.Equal(t, "-12.34" , string(buf[:f64toa(&buf[0], -1234e-2)])) + assert.Equal(t, "-0.001234" , string(buf[:f64toa(&buf[0], -1234e-6)])) + assert.Equal(t, "-1e+30" , string(buf[:f64toa(&buf[0], -1e30)])) + assert.Equal(t, "-1.234e+33" , string(buf[:f64toa(&buf[0], -1234e30)])) + assert.Equal(t, "-1.234e+308" , string(buf[:f64toa(&buf[0], -1234e305)])) + assert.Equal(t, "-1.234e-317" , string(buf[:f64toa(&buf[0], -1234e-320)])) + assert.Equal(t, "-2.2250738585072014e-308" , string(buf[:f64toa(&buf[0], -2.2250738585072014e-308)])) } func TestFastFloat_Random(t *testing.T) { @@ -56,7 +58,7 @@ func TestFastFloat_Random(t *testing.T) { f64 := math.Float64frombits(b64) jout, jerr := json.Marshal(f64) - n := __f64toa(&buf[0], f64) + n := f64toa(&buf[0], f64) if jerr == nil { assert.Equal(t, jout, buf[:n]) } else { @@ -65,7 +67,7 @@ func TestFastFloat_Random(t *testing.T) { f32 := math.Float32frombits(rand.Uint32()) jout, jerr = json.Marshal(f32) - n = __f32toa(&buf[0], f32) + n = f32toa(&buf[0], f32) if jerr == nil { assert.Equal(t, jout, buf[:n]) } else { @@ -97,7 +99,7 @@ func BenchmarkParseFloat64(b *testing.B) { test: func(b *testing.B) { var buf [64]byte; for i := 0; i < b.N; i++ { strconv.AppendFloat(buf[:0], c.float, 'g', -1, 64) }}, }, { name: "FastFloat", - test: func(b *testing.B) { var buf [64]byte; for i := 0; i < b.N; i++ { __f64toa(&buf[0], c.float) }}, + test: func(b *testing.B) { var buf [64]byte; for i := 0; i < b.N; i++ { f64toa(&buf[0], c.float) }}, }} for _, bm := range f64bench { name := bm.name + "_" + c.name @@ -128,11 +130,11 @@ func BenchmarkParseFloat32(b *testing.B) { test: func(b *testing.B) { var buf [64]byte; for i := 0; i < b.N; i++ { strconv.AppendFloat(buf[:0], float64(c.float), 'g', -1, 32) }}, }, { name: "FastFloat32", - test: func(b *testing.B) { var buf [64]byte; for i := 0; i < b.N; i++ { __f32toa(&buf[0], c.float) }}, + test: func(b *testing.B) { var buf [64]byte; for i := 0; i < b.N; i++ { f32toa(&buf[0], c.float) }}, }} for _, bm := range bench { name := bm.name + "_" + c.name b.Run(name, bm.test) } } -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/internal/native/fastint_amd64_test.tmpl b/vendor/github.com/bytedance/sonic/internal/native/fastint_amd64_test.tmpl index cb060909df..c4acc75248 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/fastint_amd64_test.tmpl +++ b/vendor/github.com/bytedance/sonic/internal/native/fastint_amd64_test.tmpl @@ -1,3 +1,5 @@ +// Code generated by Makefile, DO NOT EDIT. + /* * Copyright 2021 ByteDance Inc. * @@ -26,126 +28,126 @@ import ( func TestFastInt_IntToString(t *testing.T) { var buf [32]byte - assert.Equal(t, "0" , string(buf[:__i64toa(&buf[0], 0)])) - assert.Equal(t, "1" , string(buf[:__i64toa(&buf[0], 1)])) - assert.Equal(t, "12" , string(buf[:__i64toa(&buf[0], 12)])) - assert.Equal(t, "123" , string(buf[:__i64toa(&buf[0], 123)])) - assert.Equal(t, "1234" , string(buf[:__i64toa(&buf[0], 1234)])) - assert.Equal(t, "12345" , string(buf[:__i64toa(&buf[0], 12345)])) - assert.Equal(t, "123456" , string(buf[:__i64toa(&buf[0], 123456)])) - assert.Equal(t, "1234567" , string(buf[:__i64toa(&buf[0], 1234567)])) - assert.Equal(t, "12345678" , string(buf[:__i64toa(&buf[0], 12345678)])) - assert.Equal(t, "123456789" , string(buf[:__i64toa(&buf[0], 123456789)])) - assert.Equal(t, "1234567890" , string(buf[:__i64toa(&buf[0], 1234567890)])) - assert.Equal(t, "12345678901" , string(buf[:__i64toa(&buf[0], 12345678901)])) - assert.Equal(t, "123456789012" , string(buf[:__i64toa(&buf[0], 123456789012)])) - assert.Equal(t, "1234567890123" , string(buf[:__i64toa(&buf[0], 1234567890123)])) - assert.Equal(t, "12345678901234" , string(buf[:__i64toa(&buf[0], 12345678901234)])) - assert.Equal(t, "123456789012345" , string(buf[:__i64toa(&buf[0], 123456789012345)])) - assert.Equal(t, "1234567890123456" , string(buf[:__i64toa(&buf[0], 1234567890123456)])) - assert.Equal(t, "12345678901234567" , string(buf[:__i64toa(&buf[0], 12345678901234567)])) - assert.Equal(t, "123456789012345678" , string(buf[:__i64toa(&buf[0], 123456789012345678)])) - assert.Equal(t, "1234567890123456789" , string(buf[:__i64toa(&buf[0], 1234567890123456789)])) - assert.Equal(t, "9223372036854775807" , string(buf[:__i64toa(&buf[0], 9223372036854775807)])) - assert.Equal(t, "-1" , string(buf[:__i64toa(&buf[0], -1)])) - assert.Equal(t, "-12" , string(buf[:__i64toa(&buf[0], -12)])) - assert.Equal(t, "-123" , string(buf[:__i64toa(&buf[0], -123)])) - assert.Equal(t, "-1234" , string(buf[:__i64toa(&buf[0], -1234)])) - assert.Equal(t, "-12345" , string(buf[:__i64toa(&buf[0], -12345)])) - assert.Equal(t, "-123456" , string(buf[:__i64toa(&buf[0], -123456)])) - assert.Equal(t, "-1234567" , string(buf[:__i64toa(&buf[0], -1234567)])) - assert.Equal(t, "-12345678" , string(buf[:__i64toa(&buf[0], -12345678)])) - assert.Equal(t, "-123456789" , string(buf[:__i64toa(&buf[0], -123456789)])) - assert.Equal(t, "-1234567890" , string(buf[:__i64toa(&buf[0], -1234567890)])) - assert.Equal(t, "-12345678901" , string(buf[:__i64toa(&buf[0], -12345678901)])) - assert.Equal(t, "-123456789012" , string(buf[:__i64toa(&buf[0], -123456789012)])) - assert.Equal(t, "-1234567890123" , string(buf[:__i64toa(&buf[0], -1234567890123)])) - assert.Equal(t, "-12345678901234" , string(buf[:__i64toa(&buf[0], -12345678901234)])) - assert.Equal(t, "-123456789012345" , string(buf[:__i64toa(&buf[0], -123456789012345)])) - assert.Equal(t, "-1234567890123456" , string(buf[:__i64toa(&buf[0], -1234567890123456)])) - assert.Equal(t, "-12345678901234567" , string(buf[:__i64toa(&buf[0], -12345678901234567)])) - assert.Equal(t, "-123456789012345678" , string(buf[:__i64toa(&buf[0], -123456789012345678)])) - assert.Equal(t, "-1234567890123456789" , string(buf[:__i64toa(&buf[0], -1234567890123456789)])) - assert.Equal(t, "-9223372036854775808" , string(buf[:__i64toa(&buf[0], -9223372036854775808)])) + assert.Equal(t, "0" , string(buf[:i64toa(&buf[0], 0)])) + assert.Equal(t, "1" , string(buf[:i64toa(&buf[0], 1)])) + assert.Equal(t, "12" , string(buf[:i64toa(&buf[0], 12)])) + assert.Equal(t, "123" , string(buf[:i64toa(&buf[0], 123)])) + assert.Equal(t, "1234" , string(buf[:i64toa(&buf[0], 1234)])) + assert.Equal(t, "12345" , string(buf[:i64toa(&buf[0], 12345)])) + assert.Equal(t, "123456" , string(buf[:i64toa(&buf[0], 123456)])) + assert.Equal(t, "1234567" , string(buf[:i64toa(&buf[0], 1234567)])) + assert.Equal(t, "12345678" , string(buf[:i64toa(&buf[0], 12345678)])) + assert.Equal(t, "123456789" , string(buf[:i64toa(&buf[0], 123456789)])) + assert.Equal(t, "1234567890" , string(buf[:i64toa(&buf[0], 1234567890)])) + assert.Equal(t, "12345678901" , string(buf[:i64toa(&buf[0], 12345678901)])) + assert.Equal(t, "123456789012" , string(buf[:i64toa(&buf[0], 123456789012)])) + assert.Equal(t, "1234567890123" , string(buf[:i64toa(&buf[0], 1234567890123)])) + assert.Equal(t, "12345678901234" , string(buf[:i64toa(&buf[0], 12345678901234)])) + assert.Equal(t, "123456789012345" , string(buf[:i64toa(&buf[0], 123456789012345)])) + assert.Equal(t, "1234567890123456" , string(buf[:i64toa(&buf[0], 1234567890123456)])) + assert.Equal(t, "12345678901234567" , string(buf[:i64toa(&buf[0], 12345678901234567)])) + assert.Equal(t, "123456789012345678" , string(buf[:i64toa(&buf[0], 123456789012345678)])) + assert.Equal(t, "1234567890123456789" , string(buf[:i64toa(&buf[0], 1234567890123456789)])) + assert.Equal(t, "9223372036854775807" , string(buf[:i64toa(&buf[0], 9223372036854775807)])) + assert.Equal(t, "-1" , string(buf[:i64toa(&buf[0], -1)])) + assert.Equal(t, "-12" , string(buf[:i64toa(&buf[0], -12)])) + assert.Equal(t, "-123" , string(buf[:i64toa(&buf[0], -123)])) + assert.Equal(t, "-1234" , string(buf[:i64toa(&buf[0], -1234)])) + assert.Equal(t, "-12345" , string(buf[:i64toa(&buf[0], -12345)])) + assert.Equal(t, "-123456" , string(buf[:i64toa(&buf[0], -123456)])) + assert.Equal(t, "-1234567" , string(buf[:i64toa(&buf[0], -1234567)])) + assert.Equal(t, "-12345678" , string(buf[:i64toa(&buf[0], -12345678)])) + assert.Equal(t, "-123456789" , string(buf[:i64toa(&buf[0], -123456789)])) + assert.Equal(t, "-1234567890" , string(buf[:i64toa(&buf[0], -1234567890)])) + assert.Equal(t, "-12345678901" , string(buf[:i64toa(&buf[0], -12345678901)])) + assert.Equal(t, "-123456789012" , string(buf[:i64toa(&buf[0], -123456789012)])) + assert.Equal(t, "-1234567890123" , string(buf[:i64toa(&buf[0], -1234567890123)])) + assert.Equal(t, "-12345678901234" , string(buf[:i64toa(&buf[0], -12345678901234)])) + assert.Equal(t, "-123456789012345" , string(buf[:i64toa(&buf[0], -123456789012345)])) + assert.Equal(t, "-1234567890123456" , string(buf[:i64toa(&buf[0], -1234567890123456)])) + assert.Equal(t, "-12345678901234567" , string(buf[:i64toa(&buf[0], -12345678901234567)])) + assert.Equal(t, "-123456789012345678" , string(buf[:i64toa(&buf[0], -123456789012345678)])) + assert.Equal(t, "-1234567890123456789" , string(buf[:i64toa(&buf[0], -1234567890123456789)])) + assert.Equal(t, "-9223372036854775808" , string(buf[:i64toa(&buf[0], -9223372036854775808)])) } func TestFastInt_UintToString(t *testing.T) { var buf [32]byte - assert.Equal(t, "0" , string(buf[:__u64toa(&buf[0], 0)])) - assert.Equal(t, "1" , string(buf[:__u64toa(&buf[0], 1)])) - assert.Equal(t, "12" , string(buf[:__u64toa(&buf[0], 12)])) - assert.Equal(t, "123" , string(buf[:__u64toa(&buf[0], 123)])) - assert.Equal(t, "1234" , string(buf[:__u64toa(&buf[0], 1234)])) - assert.Equal(t, "12345" , string(buf[:__u64toa(&buf[0], 12345)])) - assert.Equal(t, "123456" , string(buf[:__u64toa(&buf[0], 123456)])) - assert.Equal(t, "1234567" , string(buf[:__u64toa(&buf[0], 1234567)])) - assert.Equal(t, "12345678" , string(buf[:__u64toa(&buf[0], 12345678)])) - assert.Equal(t, "123456789" , string(buf[:__u64toa(&buf[0], 123456789)])) - assert.Equal(t, "1234567890" , string(buf[:__u64toa(&buf[0], 1234567890)])) - assert.Equal(t, "12345678901" , string(buf[:__u64toa(&buf[0], 12345678901)])) - assert.Equal(t, "123456789012" , string(buf[:__u64toa(&buf[0], 123456789012)])) - assert.Equal(t, "1234567890123" , string(buf[:__u64toa(&buf[0], 1234567890123)])) - assert.Equal(t, "12345678901234" , string(buf[:__u64toa(&buf[0], 12345678901234)])) - assert.Equal(t, "123456789012345" , string(buf[:__u64toa(&buf[0], 123456789012345)])) - assert.Equal(t, "1234567890123456" , string(buf[:__u64toa(&buf[0], 1234567890123456)])) - assert.Equal(t, "12345678901234567" , string(buf[:__u64toa(&buf[0], 12345678901234567)])) - assert.Equal(t, "123456789012345678" , string(buf[:__u64toa(&buf[0], 123456789012345678)])) - assert.Equal(t, "1234567890123456789" , string(buf[:__u64toa(&buf[0], 1234567890123456789)])) - assert.Equal(t, "12345678901234567890" , string(buf[:__u64toa(&buf[0], 12345678901234567890)])) - assert.Equal(t, "18446744073709551615" , string(buf[:__u64toa(&buf[0], 18446744073709551615)])) + assert.Equal(t, "0" , string(buf[:u64toa(&buf[0], 0)])) + assert.Equal(t, "1" , string(buf[:u64toa(&buf[0], 1)])) + assert.Equal(t, "12" , string(buf[:u64toa(&buf[0], 12)])) + assert.Equal(t, "123" , string(buf[:u64toa(&buf[0], 123)])) + assert.Equal(t, "1234" , string(buf[:u64toa(&buf[0], 1234)])) + assert.Equal(t, "12345" , string(buf[:u64toa(&buf[0], 12345)])) + assert.Equal(t, "123456" , string(buf[:u64toa(&buf[0], 123456)])) + assert.Equal(t, "1234567" , string(buf[:u64toa(&buf[0], 1234567)])) + assert.Equal(t, "12345678" , string(buf[:u64toa(&buf[0], 12345678)])) + assert.Equal(t, "123456789" , string(buf[:u64toa(&buf[0], 123456789)])) + assert.Equal(t, "1234567890" , string(buf[:u64toa(&buf[0], 1234567890)])) + assert.Equal(t, "12345678901" , string(buf[:u64toa(&buf[0], 12345678901)])) + assert.Equal(t, "123456789012" , string(buf[:u64toa(&buf[0], 123456789012)])) + assert.Equal(t, "1234567890123" , string(buf[:u64toa(&buf[0], 1234567890123)])) + assert.Equal(t, "12345678901234" , string(buf[:u64toa(&buf[0], 12345678901234)])) + assert.Equal(t, "123456789012345" , string(buf[:u64toa(&buf[0], 123456789012345)])) + assert.Equal(t, "1234567890123456" , string(buf[:u64toa(&buf[0], 1234567890123456)])) + assert.Equal(t, "12345678901234567" , string(buf[:u64toa(&buf[0], 12345678901234567)])) + assert.Equal(t, "123456789012345678" , string(buf[:u64toa(&buf[0], 123456789012345678)])) + assert.Equal(t, "1234567890123456789" , string(buf[:u64toa(&buf[0], 1234567890123456789)])) + assert.Equal(t, "12345678901234567890" , string(buf[:u64toa(&buf[0], 12345678901234567890)])) + assert.Equal(t, "18446744073709551615" , string(buf[:u64toa(&buf[0], 18446744073709551615)])) +} + +func BenchmarkFastInt_IntToString(b *testing.B) { + benchmarks := []struct { + name string + test func(*testing.B) + }{{ + name: "StdLib-Positive", + test: func(b *testing.B) { var buf [32]byte; for i := 0; i < b.N; i++ { strconv.AppendInt(buf[:0], int64(i), 10) }}, + }, { + name: "StdLib-Negative", + test: func(b *testing.B) { var buf [32]byte; for i := 0; i < b.N; i++ { strconv.AppendInt(buf[:0], -int64(i), 10) }}, + }, { + name: "FastInt-Positive", + test: func(b *testing.B) { var buf [32]byte; for i := 0; i < b.N; i++ { i64toa(&buf[0], int64(i)) }}, + }, { + name: "FastInt-Negative", + test: func(b *testing.B) { var buf [32]byte; for i := 0; i < b.N; i++ { i64toa(&buf[0], -int64(i)) }}, + }} + for _, bm := range benchmarks { + b.Run(bm.name, bm.test) + } } - func BenchmarkFastInt_IntToString(b *testing.B) { - benchmarks := []struct { - name string - test func(*testing.B) - }{{ - name: "StdLib-Positive", - test: func(b *testing.B) { var buf [32]byte; for i := 0; i < b.N; i++ { strconv.AppendInt(buf[:0], int64(i), 10) }}, - }, { - name: "StdLib-Negative", - test: func(b *testing.B) { var buf [32]byte; for i := 0; i < b.N; i++ { strconv.AppendInt(buf[:0], -int64(i), 10) }}, - }, { - name: "FastInt-Positive", - test: func(b *testing.B) { var buf [32]byte; for i := 0; i < b.N; i++ { __i64toa(&buf[0], int64(i)) }}, - }, { - name: "FastInt-Negative", - test: func(b *testing.B) { var buf [32]byte; for i := 0; i < b.N; i++ { __i64toa(&buf[0], -int64(i)) }}, - }} - for _, bm := range benchmarks { - b.Run(bm.name, bm.test) - } - } - - type utoaBench struct { - name string - num uint64 - } - - func BenchmarkFastInt_UintToString(b *testing.B) { - maxUint := "18446744073709551615" - benchs := make([]utoaBench, len(maxUint) + 1) - benchs[0].name = "Zero" - benchs[0].num = 0 - for i := 1; i <= len(maxUint); i++ { - benchs[i].name = strconv.FormatInt(int64(i), 10) + "-Digs" - benchs[i].num, _ = strconv.ParseUint(string(maxUint[:i]), 10, 64) - } - - for _, t := range(benchs) { - benchmarks := []struct { - name string - test func(*testing.B) - }{{ - name: "StdLib", - test: func(b *testing.B) { var buf [32]byte; for i := 0; i < b.N; i++ { strconv.AppendUint(buf[:0], t.num, 10) }}, - }, { - name: "FastInt", - test: func(b *testing.B) { var buf [32]byte; for i := 0; i < b.N; i++ { __u64toa(&buf[0], t.num) }}, - }} - for _, bm := range benchmarks { - name := fmt.Sprintf("%s_%s", bm.name, t.name) - b.Run(name, bm.test) - } - } - } \ No newline at end of file +type utoaBench struct { + name string + num uint64 +} + +func BenchmarkFastInt_UintToString(b *testing.B) { + maxUint := "18446744073709551615" + benchs := make([]utoaBench, len(maxUint) + 1) + benchs[0].name = "Zero" + benchs[0].num = 0 + for i := 1; i <= len(maxUint); i++ { + benchs[i].name = strconv.FormatInt(int64(i), 10) + "-Digs" + benchs[i].num, _ = strconv.ParseUint(string(maxUint[:i]), 10, 64) + } + + for _, t := range(benchs) { + benchmarks := []struct { + name string + test func(*testing.B) + }{{ + name: "StdLib", + test: func(b *testing.B) { var buf [32]byte; for i := 0; i < b.N; i++ { strconv.AppendUint(buf[:0], t.num, 10) }}, + }, { + name: "FastInt", + test: func(b *testing.B) { var buf [32]byte; for i := 0; i < b.N; i++ { u64toa(&buf[0], t.num) }}, + }} + for _, bm := range benchmarks { + name := fmt.Sprintf("%s_%s", bm.name, t.name) + b.Run(name, bm.test) + } + } +} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/native/native_amd64.tmpl b/vendor/github.com/bytedance/sonic/internal/native/native_amd64.tmpl index 40cbf16137..1a556409e9 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/native_amd64.tmpl +++ b/vendor/github.com/bytedance/sonic/internal/native/native_amd64.tmpl @@ -1,3 +1,5 @@ +// Code generated by Makefile, DO NOT EDIT. + /* * Copyright 2021 ByteDance Inc. * @@ -20,114 +22,168 @@ import ( `unsafe` `github.com/bytedance/sonic/internal/native/types` + `github.com/bytedance/sonic/internal/rt` ) +var ( + __i64toa func(out unsafe.Pointer, val int64) (ret int) + + __u64toa func(out unsafe.Pointer, val uint64) (ret int) + + __f64toa func(out unsafe.Pointer, val float64) (ret int) + + __f32toa func(out unsafe.Pointer, val float32) (ret int) + + __lspace func(sp unsafe.Pointer, nb int, off int) (ret int) + + __quote func(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn unsafe.Pointer, flags uint64) (ret int) + + __html_escape func(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn unsafe.Pointer) (ret int) + + __unquote func(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep unsafe.Pointer, flags uint64) (ret int) + + __value func(s unsafe.Pointer, n int, p int, v unsafe.Pointer, flags uint64) (ret int) + + __vstring func(s unsafe.Pointer, p unsafe.Pointer, v unsafe.Pointer, flags uint64) + + __vnumber func(s unsafe.Pointer, p unsafe.Pointer, v unsafe.Pointer) + + __vsigned func(s unsafe.Pointer, p unsafe.Pointer, v unsafe.Pointer) + + __vunsigned func(s unsafe.Pointer, p unsafe.Pointer, v unsafe.Pointer) + + __skip_one func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer, flags uint64) (ret int) + + __skip_one_fast func(s unsafe.Pointer, p unsafe.Pointer) (ret int) + + __skip_array func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer, flags uint64) (ret int) + + __skip_object func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer, flags uint64) (ret int) + + __skip_number func(s unsafe.Pointer, p unsafe.Pointer) (ret int) + + __validate_one func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer) (ret int) + + __get_by_path func(s unsafe.Pointer, p unsafe.Pointer, path unsafe.Pointer, m unsafe.Pointer) (ret int) + + __validate_utf8 func(s unsafe.Pointer, p unsafe.Pointer, m unsafe.Pointer) (ret int) + + __validate_utf8_fast func(s unsafe.Pointer) (ret int) + + __fsm_exec func(m unsafe.Pointer, s unsafe.Pointer, p unsafe.Pointer, flags uint64) (ret int) +) + +//go:nosplit +func i64toa(out *byte, val int64) (ret int) { + return __i64toa(rt.NoEscape(unsafe.Pointer(out)), val) +} + //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __i64toa(out *byte, val int64) (ret int) +func u64toa(out *byte, val uint64) (ret int) { + return __u64toa(rt.NoEscape(unsafe.Pointer(out)), val) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __u64toa(out *byte, val uint64) (ret int) +func f64toa(out *byte, val float64) (ret int) { + return __f64toa(rt.NoEscape(unsafe.Pointer(out)), val) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __f64toa(out *byte, val float64) (ret int) +func f32toa(out *byte, val float32) (ret int) { + return __f32toa(rt.NoEscape(unsafe.Pointer(out)), val) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __f32toa(out *byte, val float32) (ret int) +func lspace(sp unsafe.Pointer, nb int, off int) (ret int) { + return __lspace(rt.NoEscape(sp), nb, off) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __lspace(sp unsafe.Pointer, nb int, off int) (ret int) +func quote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int, flags uint64) (ret int) { + return __quote(rt.NoEscape(unsafe.Pointer(sp)), nb, rt.NoEscape(unsafe.Pointer(dp)), rt.NoEscape(unsafe.Pointer(dn)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __quote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int, flags uint64) (ret int) +func html_escape(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int) (ret int) { + return __html_escape(rt.NoEscape(unsafe.Pointer(sp)), nb, rt.NoEscape(unsafe.Pointer(dp)), rt.NoEscape(unsafe.Pointer(dn))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __html_escape(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int) (ret int) +func unquote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) (ret int) { + return __unquote(rt.NoEscape(unsafe.Pointer(sp)), nb, rt.NoEscape(unsafe.Pointer(dp)), rt.NoEscape(unsafe.Pointer(ep)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __unquote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) (ret int) +func value(s unsafe.Pointer, n int, p int, v *types.JsonState, flags uint64) (ret int) { + return __value(rt.NoEscape(unsafe.Pointer(s)), n, p, rt.NoEscape(unsafe.Pointer(v)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __value(s unsafe.Pointer, n int, p int, v *types.JsonState, flags uint64) (ret int) +func vstring(s *string, p *int, v *types.JsonState, flags uint64) { + __vstring(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(v)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __vstring(s *string, p *int, v *types.JsonState, flags uint64) +func vnumber(s *string, p *int, v *types.JsonState) { + __vnumber(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(v))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __vnumber(s *string, p *int, v *types.JsonState) +func vsigned(s *string, p *int, v *types.JsonState) { + __vsigned(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(v))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __vsigned(s *string, p *int, v *types.JsonState) +func vunsigned(s *string, p *int, v *types.JsonState) { + __vunsigned(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(v))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __vunsigned(s *string, p *int, v *types.JsonState) +func skip_one(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) { + return __skip_one(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_one(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) +func skip_one_fast(s *string, p *int) (ret int) { + return __skip_one_fast(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_one_fast(s *string, p *int) (ret int) +func skip_array(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) { + return __skip_array(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_array(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) +func skip_object(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) { + return __skip_object(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m)), flags) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_object(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) +func skip_number(s *string, p *int) (ret int) { + return __skip_number(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __skip_number(s *string, p *int) (ret int) +func validate_one(s *string, p *int, m *types.StateMachine) (ret int) { + return __validate_one(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __validate_one(s *string, p *int, m *types.StateMachine) (ret int) +func get_by_path(s *string, p *int, path *[]interface{}, m *types.StateMachine) (ret int) { + return __get_by_path(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(path)), rt.NoEscape(unsafe.Pointer(m))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __get_by_path(s *string, p *int, path *[]interface{}, m *types.StateMachine) (ret int) +func validate_utf8(s *string, p *int, m *types.StateMachine) (ret int) { + return __validate_utf8(rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), rt.NoEscape(unsafe.Pointer(m))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __validate_utf8(s *string, p *int, m *types.StateMachine) (ret int) +func validate_utf8_fast(s *string) (ret int) { + return __validate_utf8_fast(rt.NoEscape(unsafe.Pointer(s))) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __validate_utf8_fast(s *string) (ret int) \ No newline at end of file +func fsm_exec(m *types.StateMachine, s *string, p *int, flags uint64) (ret int) { + return __fsm_exec(rt.NoEscape(unsafe.Pointer(m)), rt.NoEscape(unsafe.Pointer(s)), rt.NoEscape(unsafe.Pointer(p)), flags) +} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/native/native_amd64_test.tmpl b/vendor/github.com/bytedance/sonic/internal/native/native_amd64_test.tmpl index bd9ce0c733..7c35f20bb0 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/native_amd64_test.tmpl +++ b/vendor/github.com/bytedance/sonic/internal/native/native_amd64_test.tmpl @@ -1,3 +1,5 @@ +// Code generated by Makefile, DO NOT EDIT. + /* * Copyright 2021 ByteDance Inc. * @@ -20,6 +22,7 @@ import ( `encoding/hex` `fmt` `math` + `strings` `testing` `unsafe` @@ -34,7 +37,7 @@ func TestNative_Value(t *testing.T) { var v types.JsonState s := ` -12345` p := (*rt.GoString)(unsafe.Pointer(&s)) - x := __value(p.Ptr, p.Len, 0, &v, 0) + x := value(p.Ptr, p.Len, 0, &v, 0) assert.Equal(t, 9, x) assert.Equal(t, types.V_INTEGER, v.Vt) assert.Equal(t, int64(-12345), v.Iv) @@ -46,7 +49,7 @@ func TestNative_Value_OutOfBound(t *testing.T) { mem := []byte{'"', '"'} s := rt.Mem2Str(mem[:1]) p := (*rt.GoString)(unsafe.Pointer(&s)) - x := __value(p.Ptr, p.Len, 0, &v, 0) + x := value(p.Ptr, p.Len, 0, &v, 0) assert.Equal(t, 1, x) assert.Equal(t, -int(types.ERR_EOF), int(v.Vt)) } @@ -56,7 +59,7 @@ func TestNative_Quote(t *testing.T) { d := make([]byte, 256) dp := (*rt.GoSlice)(unsafe.Pointer(&d)) sp := (*rt.GoString)(unsafe.Pointer(&s)) - rv := __quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, 0) + rv := quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, 0) if rv < 0 { require.NoError(t, types.ParsingError(-rv)) } @@ -70,7 +73,7 @@ func TestNative_QuoteNoMem(t *testing.T) { d := make([]byte, 10) dp := (*rt.GoSlice)(unsafe.Pointer(&d)) sp := (*rt.GoString)(unsafe.Pointer(&s)) - rv := __quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, 0) + rv := quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, 0) assert.Equal(t, -6, rv) assert.Equal(t, 5, len(d)) assert.Equal(t, `hello`, string(d)) @@ -81,7 +84,7 @@ func TestNative_DoubleQuote(t *testing.T) { d := make([]byte, 256) dp := (*rt.GoSlice)(unsafe.Pointer(&d)) sp := (*rt.GoString)(unsafe.Pointer(&s)) - rv := __quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, types.F_DOUBLE_UNQUOTE) + rv := quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, types.F_DOUBLE_UNQUOTE) if rv < 0 { require.NoError(t, types.ParsingError(-rv)) } @@ -96,7 +99,7 @@ func TestNative_Unquote(t *testing.T) { ep := -1 dp := (*rt.GoSlice)(unsafe.Pointer(&d)) sp := (*rt.GoString)(unsafe.Pointer(&s)) - rv := __unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, 0) + rv := unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, 0) if rv < 0 { require.NoError(t, types.ParsingError(-rv)) } @@ -111,7 +114,7 @@ func TestNative_UnquoteError(t *testing.T) { ep := -1 dp := (*rt.GoSlice)(unsafe.Pointer(&d)) sp := (*rt.GoString)(unsafe.Pointer(&s)) - rv := __unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, 0) + rv := unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, 0) assert.Equal(t, -int(types.ERR_EOF), rv) assert.Equal(t, 5, ep) s = `asdf\gqwer` @@ -119,7 +122,7 @@ func TestNative_UnquoteError(t *testing.T) { ep = -1 dp = (*rt.GoSlice)(unsafe.Pointer(&d)) sp = (*rt.GoString)(unsafe.Pointer(&s)) - rv = __unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, 0) + rv = unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, 0) assert.Equal(t, -int(types.ERR_INVALID_ESCAPE), rv) assert.Equal(t, 5, ep) s = `asdf\u1gggqwer` @@ -127,7 +130,7 @@ func TestNative_UnquoteError(t *testing.T) { ep = -1 dp = (*rt.GoSlice)(unsafe.Pointer(&d)) sp = (*rt.GoString)(unsafe.Pointer(&s)) - rv = __unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, 0) + rv = unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, 0) assert.Equal(t, -int(types.ERR_INVALID_CHAR), rv) assert.Equal(t, 7, ep) s = `asdf\ud800qwer` @@ -135,7 +138,7 @@ func TestNative_UnquoteError(t *testing.T) { ep = -1 dp = (*rt.GoSlice)(unsafe.Pointer(&d)) sp = (*rt.GoString)(unsafe.Pointer(&s)) - rv = __unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, 0) + rv = unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, 0) assert.Equal(t, -int(types.ERR_INVALID_UNICODE), rv) assert.Equal(t, 6, ep) s = `asdf\\ud800qwer` @@ -143,7 +146,7 @@ func TestNative_UnquoteError(t *testing.T) { ep = -1 dp = (*rt.GoSlice)(unsafe.Pointer(&d)) sp = (*rt.GoString)(unsafe.Pointer(&s)) - rv = __unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, types.F_DOUBLE_UNQUOTE) + rv = unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, types.F_DOUBLE_UNQUOTE) assert.Equal(t, -int(types.ERR_INVALID_UNICODE), rv) assert.Equal(t, 7, ep) s = `asdf\ud800\ud800qwer` @@ -151,7 +154,7 @@ func TestNative_UnquoteError(t *testing.T) { ep = -1 dp = (*rt.GoSlice)(unsafe.Pointer(&d)) sp = (*rt.GoString)(unsafe.Pointer(&s)) - rv = __unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, 0) + rv = unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, 0) assert.Equal(t, -int(types.ERR_INVALID_UNICODE), rv) assert.Equal(t, 12, ep) s = `asdf\\ud800\\ud800qwer` @@ -159,7 +162,7 @@ func TestNative_UnquoteError(t *testing.T) { ep = -1 dp = (*rt.GoSlice)(unsafe.Pointer(&d)) sp = (*rt.GoString)(unsafe.Pointer(&s)) - rv = __unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, types.F_DOUBLE_UNQUOTE) + rv = unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, types.F_DOUBLE_UNQUOTE) assert.Equal(t, -int(types.ERR_INVALID_UNICODE), rv) assert.Equal(t, 14, ep) } @@ -170,7 +173,7 @@ func TestNative_DoubleUnquote(t *testing.T) { ep := -1 dp := (*rt.GoSlice)(unsafe.Pointer(&d)) sp := (*rt.GoString)(unsafe.Pointer(&s)) - rv := __unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, types.F_DOUBLE_UNQUOTE) + rv := unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, types.F_DOUBLE_UNQUOTE) if rv < 0 { require.NoError(t, types.ParsingError(-rv)) } @@ -185,7 +188,7 @@ func TestNative_UnquoteUnicodeReplacement(t *testing.T) { ep := -1 dp := (*rt.GoSlice)(unsafe.Pointer(&d)) sp := (*rt.GoString)(unsafe.Pointer(&s)) - rv := __unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, types.F_UNICODE_REPLACE) + rv := unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, types.F_UNICODE_REPLACE) if rv < 0 { require.NoError(t, types.ParsingError(-rv)) } @@ -197,7 +200,7 @@ func TestNative_UnquoteUnicodeReplacement(t *testing.T) { ep = -1 dp = (*rt.GoSlice)(unsafe.Pointer(&d)) sp = (*rt.GoString)(unsafe.Pointer(&s)) - rv = __unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, types.F_UNICODE_REPLACE) + rv = unquote(sp.Ptr, sp.Len, dp.Ptr, &ep, types.F_UNICODE_REPLACE) if rv < 0 { require.NoError(t, types.ParsingError(-rv)) } @@ -211,7 +214,7 @@ func TestNative_HTMLEscape(t *testing.T) { d := make([]byte, 256) dp := (*rt.GoSlice)(unsafe.Pointer(&d)) sp := (*rt.GoString)(unsafe.Pointer(&s)) - rv := __html_escape(sp.Ptr, sp.Len, dp.Ptr, &dp.Len) + rv := html_escape(sp.Ptr, sp.Len, dp.Ptr, &dp.Len) if rv < 0 { require.NoError(t, types.ParsingError(-rv)) } @@ -225,7 +228,7 @@ func TestNative_HTMLEscapeNoMem(t *testing.T) { d := make([]byte, 10) dp := (*rt.GoSlice)(unsafe.Pointer(&d)) sp := (*rt.GoString)(unsafe.Pointer(&s)) - rv := __html_escape(sp.Ptr, sp.Len, dp.Ptr, &dp.Len) + rv := html_escape(sp.Ptr, sp.Len, dp.Ptr, &dp.Len) assert.Equal(t, -6, rv) assert.Equal(t, 5, len(d)) assert.Equal(t, `hello`, string(d)) @@ -235,11 +238,11 @@ func TestNative_Vstring(t *testing.T) { var v types.JsonState i := 0 s := `test"test\n2"` - __vstring(&s, &i, &v, 0) + vstring(&s, &i, &v, 0) assert.Equal(t, 5, i) assert.Equal(t, -1, v.Ep) assert.Equal(t, int64(0), v.Iv) - __vstring(&s, &i, &v, 0) + vstring(&s, &i, &v, 0) assert.Equal(t, 13, i) assert.Equal(t, 9, v.Ep) assert.Equal(t, int64(5), v.Iv) @@ -250,7 +253,7 @@ func TestNative_Vstring_ValidUnescapedChars(t *testing.T) { valid := uint64(types.F_VALIDATE_STRING) i := 0 s := "test\x1f\"" - __vstring(&s, &i, &v, valid) + vstring(&s, &i, &v, valid) assert.Equal(t, -int(types.ERR_INVALID_CHAR), int(v.Vt)) } @@ -258,7 +261,7 @@ func TestNative_VstringEscapeEOF(t *testing.T) { var v types.JsonState i := 0 s := `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"x` - __vstring(&s, &i, &v, 0) + vstring(&s, &i, &v, 0) assert.Equal(t, 95, i) assert.Equal(t, 63, v.Ep) assert.Equal(t, int64(0), v.Iv) @@ -274,7 +277,7 @@ func TestNative_VstringHangUpOnRandomData(t *testing.T) { p := 1 s := rt.Mem2Str(v) var js types.JsonState - __vstring(&s, &p, &js, 0) + vstring(&s, &p, &js, 0) fmt.Printf("js: %s\n", spew.Sdump(js)) } @@ -282,49 +285,49 @@ func TestNative_Vnumber(t *testing.T) { var v types.JsonState i := 0 s := "1234" - __vnumber(&s, &i, &v) + vnumber(&s, &i, &v) assert.Equal(t, 4, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, int64(1234), v.Iv) assert.Equal(t, types.V_INTEGER, v.Vt) i = 0 s = "1.234" - __vnumber(&s, &i, &v) + vnumber(&s, &i, &v) assert.Equal(t, 5, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, 1.234, v.Dv) assert.Equal(t, types.V_DOUBLE, v.Vt) i = 0 s = "1.234e5" - __vnumber(&s, &i, &v) + vnumber(&s, &i, &v) assert.Equal(t, 7, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, 1.234e5, v.Dv) assert.Equal(t, types.V_DOUBLE, v.Vt) i = 0 s = "0.0125" - __vnumber(&s, &i, &v) + vnumber(&s, &i, &v) assert.Equal(t, 6, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, 0.0125, v.Dv) assert.Equal(t, types.V_DOUBLE, v.Vt) i = 0 s = "100000000000000000000" - __vnumber(&s, &i, &v) + vnumber(&s, &i, &v) assert.Equal(t, 21, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, 100000000000000000000.0, v.Dv) assert.Equal(t, types.V_DOUBLE, v.Vt) i = 0 s = "999999999999999900000" - __vnumber(&s, &i, &v) + vnumber(&s, &i, &v) assert.Equal(t, 21, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, 999999999999999900000.0, v.Dv) assert.Equal(t, types.V_DOUBLE, v.Vt) i = 0 s = "-1.234" - __vnumber(&s, &i, &v) + vnumber(&s, &i, &v) assert.Equal(t, 6, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, -1.234, v.Dv) @@ -335,65 +338,65 @@ func TestNative_Vsigned(t *testing.T) { var v types.JsonState i := 0 s := "1234" - __vsigned(&s, &i, &v) + vsigned(&s, &i, &v) assert.Equal(t, 4, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, int64(1234), v.Iv) assert.Equal(t, types.V_INTEGER, v.Vt) i = 0 s = "-1234" - __vsigned(&s, &i, &v) + vsigned(&s, &i, &v) assert.Equal(t, 5, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, int64(-1234), v.Iv) assert.Equal(t, types.V_INTEGER, v.Vt) i = 0 s = "9223372036854775807" - __vsigned(&s, &i, &v) + vsigned(&s, &i, &v) assert.Equal(t, 19, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, int64(math.MaxInt64), v.Iv) assert.Equal(t, types.V_INTEGER, v.Vt) i = 0 s = "-9223372036854775808" - __vsigned(&s, &i, &v) + vsigned(&s, &i, &v) assert.Equal(t, 20, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, int64(math.MinInt64), v.Iv) assert.Equal(t, types.V_INTEGER, v.Vt) i = 0 s = "9223372036854775808" - __vsigned(&s, &i, &v) + vsigned(&s, &i, &v) assert.Equal(t, 18, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INTEGER_OVERFLOW)), v.Vt) i = 0 s = "-9223372036854775809" - __vsigned(&s, &i, &v) + vsigned(&s, &i, &v) assert.Equal(t, 19, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INTEGER_OVERFLOW)), v.Vt) i = 0 s = "1.234" - __vsigned(&s, &i, &v) + vsigned(&s, &i, &v) assert.Equal(t, 1, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INVALID_NUMBER_FMT)), v.Vt) i = 0 s = "0.0125" - __vsigned(&s, &i, &v) + vsigned(&s, &i, &v) assert.Equal(t, 1, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INVALID_NUMBER_FMT)), v.Vt) i = 0 s = "-1234e5" - __vsigned(&s, &i, &v) + vsigned(&s, &i, &v) assert.Equal(t, 5, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INVALID_NUMBER_FMT)), v.Vt) i = 0 s = "-1234e-5" - __vsigned(&s, &i, &v) + vsigned(&s, &i, &v) assert.Equal(t, 5, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INVALID_NUMBER_FMT)), v.Vt) @@ -403,63 +406,63 @@ func TestNative_Vunsigned(t *testing.T) { var v types.JsonState i := 0 s := "1234" - __vunsigned(&s, &i, &v) + vunsigned(&s, &i, &v) assert.Equal(t, 4, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, int64(1234), v.Iv) assert.Equal(t, types.V_INTEGER, v.Vt) i = 0 s = "18446744073709551615" - __vunsigned(&s, &i, &v) + vunsigned(&s, &i, &v) assert.Equal(t, 20, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, ^int64(0), v.Iv) assert.Equal(t, types.V_INTEGER, v.Vt) i = 0 s = "18446744073709551616" - __vunsigned(&s, &i, &v) + vunsigned(&s, &i, &v) assert.Equal(t, 19, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INTEGER_OVERFLOW)), v.Vt) i = 0 s = "-1234" - __vunsigned(&s, &i, &v) + vunsigned(&s, &i, &v) assert.Equal(t, 0, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INVALID_NUMBER_FMT)), v.Vt) i = 0 s = "1.234" - __vunsigned(&s, &i, &v) + vunsigned(&s, &i, &v) assert.Equal(t, 1, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INVALID_NUMBER_FMT)), v.Vt) i = 0 s = "0.0125" - __vunsigned(&s, &i, &v) + vunsigned(&s, &i, &v) assert.Equal(t, 1, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INVALID_NUMBER_FMT)), v.Vt) i = 0 s = "1234e5" - __vunsigned(&s, &i, &v) + vunsigned(&s, &i, &v) assert.Equal(t, 4, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INVALID_NUMBER_FMT)), v.Vt) i = 0 s = "-1234e5" - __vunsigned(&s, &i, &v) + vunsigned(&s, &i, &v) assert.Equal(t, 0, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INVALID_NUMBER_FMT)), v.Vt) i = 0 s = "-1.234e5" - __vunsigned(&s, &i, &v) + vunsigned(&s, &i, &v) assert.Equal(t, 0, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INVALID_NUMBER_FMT)), v.Vt) i = 0 s = "-1.234e-5" - __vunsigned(&s, &i, &v) + vunsigned(&s, &i, &v) assert.Equal(t, 0, i) assert.Equal(t, 0, v.Ep) assert.Equal(t, types.ValueType(-int(types.ERR_INVALID_NUMBER_FMT)), v.Vt) @@ -468,36 +471,36 @@ func TestNative_Vunsigned(t *testing.T) { func TestNative_SkipOne(t *testing.T) { p := 0 s := ` {"asdf": [null, true, false, 1, 2.0, -3]}, 1234.5` - q := __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) + q := skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 42, p) assert.Equal(t, 1, q) p = 0 s = `1 2.5 -3 "asdf\nqwer" true false null {} []` - q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) + q = skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 1, p) assert.Equal(t, 0, q) - q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) + q = skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 5, p) assert.Equal(t, 2, q) - q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) + q = skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 8, p) assert.Equal(t, 6, q) - q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) + q = skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 21, p) assert.Equal(t, 9, q) - q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) + q = skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 26, p) assert.Equal(t, 22, q) - q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) + q = skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 32, p) assert.Equal(t, 27, q) - q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) + q = skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 37, p) assert.Equal(t, 33, q) - q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) + q = skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 40, p) assert.Equal(t, 38, q) - q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) + q = skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 43, p) assert.Equal(t, 41, q) } @@ -509,7 +512,7 @@ func TestNative_SkipOne_Error(t *testing.T) { `"asdf`, `"\\\"`, }) { p := 0 - q := __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) + q := skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.True(t, q < 0) } } @@ -517,21 +520,21 @@ func TestNative_SkipOne_Error(t *testing.T) { func TestNative_SkipArray(t *testing.T) { p := 0 s := `null, true, false, 1, 2.0, -3, {"asdf": "wqer"}],` - __skip_array(&s, &p, &types.StateMachine{}, uint64(0)) + skip_array(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, p, 48) } func TestNative_SkipObject(t *testing.T) { p := 0 s := `"asdf": "wqer"},` - __skip_object(&s, &p, &types.StateMachine{}, uint64(0)) + skip_object(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, p, 15) } func TestNative_SkipNumber(t *testing.T) { p := 0 s := `-1.23e+12` - q := __skip_number(&s, &p) + q := skip_number(&s, &p) assert.Equal(t, 9, p) assert.Equal(t, 0, q) } @@ -539,44 +542,44 @@ func TestNative_SkipNumber(t *testing.T) { func TestNative_SkipOneFast(t *testing.T) { p := 0 s := ` {"asdf": [null, true, false, 1, 2.0, -3]}, 1234.5` - q := __skip_one_fast(&s, &p) + q := skip_one_fast(&s, &p) assert.Equal(t, 42, p) assert.Equal(t, 1, q) p = 0 s = `1, 2.5, -3, "asdf\nqwer", true, false, null, {}, [],` - q = __skip_one_fast(&s, &p) + q = skip_one_fast(&s, &p) assert.Equal(t, 1, p) assert.Equal(t, 0, q) p += 1 - q = __skip_one_fast(&s, &p) + q = skip_one_fast(&s, &p) assert.Equal(t, 6, p) assert.Equal(t, 3, q) p += 1 - q = __skip_one_fast(&s, &p) + q = skip_one_fast(&s, &p) assert.Equal(t, 10, p) assert.Equal(t, 8, q) p += 1 - q = __skip_one_fast(&s, &p) + q = skip_one_fast(&s, &p) assert.Equal(t, 24, p) assert.Equal(t, 12, q) p += 1 - q = __skip_one_fast(&s, &p) + q = skip_one_fast(&s, &p) assert.Equal(t, 30, p) assert.Equal(t, 26, q) p += 1 - q = __skip_one_fast(&s, &p) + q = skip_one_fast(&s, &p) assert.Equal(t, 37, p) assert.Equal(t, 32, q) p += 1 - q = __skip_one_fast(&s, &p) + q = skip_one_fast(&s, &p) assert.Equal(t, 43, p) assert.Equal(t, 39, q) p += 1 - q = __skip_one_fast(&s, &p) + q = skip_one_fast(&s, &p) assert.Equal(t, 47, p) assert.Equal(t, 45, q) p += 1 - q = __skip_one_fast(&s, &p) + q = skip_one_fast(&s, &p) assert.Equal(t, 51, p) assert.Equal(t, 49, q) } @@ -587,7 +590,36 @@ func TestNative_SkipOneFast_Error(t *testing.T) { `"asdf`, `"\\\"`, }) { p := 0 - q := __skip_one_fast(&s, &p) + q := skip_one_fast(&s, &p) assert.True(t, q < 0) } +} + +func TestNative_GetByPath(t *testing.T) { + s := `{"asdf": [null, true, false, 1, 2.0, -3]}, 1234.5` + p := 0 + path := []interface{}{"asdf", 4} + ret := get_by_path(&s, &p, &path, types.NewStateMachine()) + assert.Equal(t, strings.Index(s, "2.0"), ret) +} + +func BenchmarkNative_SkipOneFast(b *testing.B) { + b.ResetTimer() + for i:=0; i(SB) - JMP _entry - -TEXT ·__f64toa(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -80(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_f64toa: - MOVQ out+0(FP), DI - MOVSD val+8(FP), X0 - CALL ·__native_entry__+160(SB) // _f64toa - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__get_by_path(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -240(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_get_by_path: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ path+16(FP), DX - MOVQ m+24(FP), CX - CALL ·__native_entry__+26384(SB) // _get_by_path - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__html_escape(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -64(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_html_escape: - MOVQ sp+0(FP), DI - MOVQ nb+8(FP), SI - MOVQ dp+16(FP), DX - MOVQ dn+24(FP), CX - CALL ·__native_entry__+9072(SB) // _html_escape - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__i64toa(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -16(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_i64toa: - MOVQ out+0(FP), DI - MOVQ val+8(FP), SI - CALL ·__native_entry__+3424(SB) // _i64toa - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__lspace(SB), NOSPLIT | NOFRAME, $0 - 32 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -8(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_lspace: - MOVQ sp+0(FP), DI - MOVQ nb+8(FP), SI - MOVQ off+16(FP), DX - CALL ·__native_entry__+16(SB) // _lspace - MOVQ AX, ret+24(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__quote(SB), NOSPLIT | NOFRAME, $0 - 48 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -64(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_quote: - MOVQ sp+0(FP), DI - MOVQ nb+8(FP), SI - MOVQ dp+16(FP), DX - MOVQ dn+24(FP), CX - MOVQ flags+32(FP), R8 - CALL ·__native_entry__+4864(SB) // _quote - MOVQ AX, ret+40(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_array(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_array: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - MOVQ flags+24(FP), CX - CALL ·__native_entry__+18112(SB) // _skip_array - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_number(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -72(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_number: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - CALL ·__native_entry__+22128(SB) // _skip_number - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_object(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_object: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - MOVQ flags+24(FP), CX - CALL ·__native_entry__+20512(SB) // _skip_object - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_one(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_one: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - MOVQ flags+24(FP), CX - CALL ·__native_entry__+22288(SB) // _skip_one - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__skip_one_fast(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -136(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_skip_one_fast: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - CALL ·__native_entry__+22512(SB) // _skip_one_fast - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__u64toa(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -8(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_u64toa: - MOVQ out+0(FP), DI - MOVQ val+8(FP), SI - CALL ·__native_entry__+3552(SB) // _u64toa - MOVQ AX, ret+16(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__unquote(SB), NOSPLIT | NOFRAME, $0 - 48 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -88(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_unquote: - MOVQ sp+0(FP), DI - MOVQ nb+8(FP), SI - MOVQ dp+16(FP), DX - MOVQ ep+24(FP), CX - MOVQ flags+32(FP), R8 - CALL ·__native_entry__+6704(SB) // _unquote - MOVQ AX, ret+40(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__validate_one(SB), NOSPLIT | NOFRAME, $0 - 32 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_validate_one: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - CALL ·__native_entry__+22336(SB) // _validate_one - MOVQ AX, ret+24(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__validate_utf8(SB), NOSPLIT | NOFRAME, $0 - 32 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -48(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_validate_utf8: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ m+16(FP), DX - CALL ·__native_entry__+30528(SB) // _validate_utf8 - MOVQ AX, ret+24(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__validate_utf8_fast(SB), NOSPLIT | NOFRAME, $0 - 16 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -24(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_validate_utf8_fast: - MOVQ s+0(FP), DI - CALL ·__native_entry__+31200(SB) // _validate_utf8_fast - MOVQ AX, ret+8(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__value(SB), NOSPLIT | NOFRAME, $0 - 48 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -328(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_value: - MOVQ s+0(FP), DI - MOVQ n+8(FP), SI - MOVQ p+16(FP), DX - MOVQ v+24(FP), CX - MOVQ flags+32(FP), R8 - CALL ·__native_entry__+12272(SB) // _value - MOVQ AX, ret+40(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__vnumber(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -240(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_vnumber: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ v+16(FP), DX - LEAQ ·__native_entry__+15728(SB), AX // _vnumber - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__vsigned(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -16(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_vsigned: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ v+16(FP), DX - LEAQ ·__native_entry__+17376(SB), AX // _vsigned - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__vstring(SB), NOSPLIT | NOFRAME, $0 - 32 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -136(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_vstring: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ v+16(FP), DX - MOVQ flags+24(FP), CX - LEAQ ·__native_entry__+14112(SB), AX // _vstring - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__vunsigned(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -16(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_vunsigned: - MOVQ s+0(FP), DI - MOVQ p+8(FP), SI - MOVQ v+16(FP), DX - LEAQ ·__native_entry__+17760(SB), AX // _vunsigned - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/native_export_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/sse/native_export_amd64.go deleted file mode 100644 index 898bad4317..0000000000 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/native_export_amd64.go +++ /dev/null @@ -1,49 +0,0 @@ -// Code generated by Makefile, DO NOT EDIT. - -/* - * Copyright 2021 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package sse - -var ( - S_f64toa = _subr__f64toa - S_f32toa = _subr__f32toa - S_i64toa = _subr__i64toa - S_u64toa = _subr__u64toa - S_lspace = _subr__lspace -) - -var ( - S_quote = _subr__quote - S_unquote = _subr__unquote -) - -var ( - S_value = _subr__value - S_vstring = _subr__vstring - S_vnumber = _subr__vnumber - S_vsigned = _subr__vsigned - S_vunsigned = _subr__vunsigned -) - -var ( - S_skip_one = _subr__skip_one - S_skip_one_fast = _subr__skip_one_fast - S_skip_array = _subr__skip_array - S_skip_object = _subr__skip_object - S_skip_number = _subr__skip_number - S_get_by_path = _subr__get_by_path -) diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/native_subr_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/sse/native_subr_amd64.go index 2682825ed6..7d71e2050f 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/native_subr_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/native_subr_amd64.go @@ -3,107 +3,602 @@ package sse -//go:nosplit -//go:noescape -//goland:noinspection ALL -func __native_entry__() uintptr +import ( + `github.com/bytedance/sonic/loader` +) -var ( - _subr__f32toa = __native_entry__() + 31760 - _subr__f64toa = __native_entry__() + 160 - _subr__get_by_path = __native_entry__() + 26384 - _subr__html_escape = __native_entry__() + 9072 - _subr__i64toa = __native_entry__() + 3424 - _subr__lspace = __native_entry__() + 16 - _subr__quote = __native_entry__() + 4864 - _subr__skip_array = __native_entry__() + 18112 - _subr__skip_number = __native_entry__() + 22128 - _subr__skip_object = __native_entry__() + 20512 - _subr__skip_one = __native_entry__() + 22288 - _subr__skip_one_fast = __native_entry__() + 22512 - _subr__u64toa = __native_entry__() + 3552 - _subr__unquote = __native_entry__() + 6704 - _subr__validate_one = __native_entry__() + 22336 - _subr__validate_utf8 = __native_entry__() + 30528 - _subr__validate_utf8_fast = __native_entry__() + 31200 - _subr__value = __native_entry__() + 12272 - _subr__vnumber = __native_entry__() + 15728 - _subr__vsigned = __native_entry__() + 17376 - _subr__vstring = __native_entry__() + 14112 - _subr__vunsigned = __native_entry__() + 17760 +const ( + _entry__f32toa = 31616 + _entry__f64toa = 160 + _entry__format_significand = 35888 + _entry__format_integer = 2960 + _entry__fsm_exec = 18016 + _entry__advance_string = 14352 + _entry__advance_string_default = 37280 + _entry__do_skip_number = 20608 + _entry__get_by_path = 26176 + _entry__skip_one_fast = 22272 + _entry__html_escape = 8912 + _entry__i64toa = 3392 + _entry__u64toa = 3520 + _entry__lspace = 16 + _entry__quote = 4832 + _entry__skip_array = 17984 + _entry__skip_number = 21904 + _entry__skip_object = 20256 + _entry__skip_one = 22048 + _entry__unquote = 6576 + _entry__validate_one = 22096 + _entry__validate_utf8 = 30384 + _entry__validate_utf8_fast = 31056 + _entry__value = 12352 + _entry__vnumber = 15744 + _entry__atof_eisel_lemire64 = 10192 + _entry__atof_native = 11744 + _entry__decimal_to_f64 = 10560 + _entry__right_shift = 36848 + _entry__left_shift = 36352 + _entry__vsigned = 17296 + _entry__vstring = 14176 + _entry__vunsigned = 17632 ) const ( _stack__f32toa = 48 _stack__f64toa = 80 - _stack__get_by_path = 240 - _stack__html_escape = 64 + _stack__format_significand = 24 + _stack__format_integer = 16 + _stack__fsm_exec = 168 + _stack__advance_string = 64 + _stack__advance_string_default = 64 + _stack__do_skip_number = 48 + _stack__get_by_path = 272 + _stack__skip_one_fast = 136 + _stack__html_escape = 72 _stack__i64toa = 16 + _stack__u64toa = 8 _stack__lspace = 8 _stack__quote = 64 - _stack__skip_array = 128 - _stack__skip_number = 72 - _stack__skip_object = 128 - _stack__skip_one = 128 - _stack__skip_one_fast = 136 - _stack__u64toa = 8 + _stack__skip_array = 176 + _stack__skip_number = 88 + _stack__skip_object = 176 + _stack__skip_one = 176 _stack__unquote = 88 - _stack__validate_one = 128 + _stack__validate_one = 176 _stack__validate_utf8 = 48 _stack__validate_utf8_fast = 24 _stack__value = 328 _stack__vnumber = 240 + _stack__atof_eisel_lemire64 = 32 + _stack__atof_native = 136 + _stack__decimal_to_f64 = 80 + _stack__right_shift = 8 + _stack__left_shift = 24 _stack__vsigned = 16 - _stack__vstring = 136 - _stack__vunsigned = 16 + _stack__vstring = 120 + _stack__vunsigned = 8 ) -var ( - _ = _subr__f32toa - _ = _subr__f64toa - _ = _subr__get_by_path - _ = _subr__html_escape - _ = _subr__i64toa - _ = _subr__lspace - _ = _subr__quote - _ = _subr__skip_array - _ = _subr__skip_number - _ = _subr__skip_object - _ = _subr__skip_one - _ = _subr__skip_one_fast - _ = _subr__u64toa - _ = _subr__unquote - _ = _subr__validate_one - _ = _subr__validate_utf8 - _ = _subr__validate_utf8_fast - _ = _subr__value - _ = _subr__vnumber - _ = _subr__vsigned - _ = _subr__vstring - _ = _subr__vunsigned +const ( + _size__f32toa = 3328 + _size__f64toa = 2800 + _size__format_significand = 464 + _size__format_integer = 432 + _size__fsm_exec = 1692 + _size__advance_string = 1344 + _size__advance_string_default = 960 + _size__do_skip_number = 956 + _size__get_by_path = 4208 + _size__skip_one_fast = 3404 + _size__html_escape = 1280 + _size__i64toa = 48 + _size__u64toa = 1264 + _size__lspace = 128 + _size__quote = 1728 + _size__skip_array = 32 + _size__skip_number = 144 + _size__skip_object = 32 + _size__skip_one = 48 + _size__unquote = 2272 + _size__validate_one = 48 + _size__validate_utf8 = 672 + _size__validate_utf8_fast = 544 + _size__value = 1316 + _size__vnumber = 1552 + _size__atof_eisel_lemire64 = 368 + _size__atof_native = 608 + _size__decimal_to_f64 = 1184 + _size__right_shift = 400 + _size__left_shift = 496 + _size__vsigned = 336 + _size__vstring = 128 + _size__vunsigned = 336 ) -const ( - _ = _stack__f32toa - _ = _stack__f64toa - _ = _stack__get_by_path - _ = _stack__html_escape - _ = _stack__i64toa - _ = _stack__lspace - _ = _stack__quote - _ = _stack__skip_array - _ = _stack__skip_number - _ = _stack__skip_object - _ = _stack__skip_one - _ = _stack__skip_one_fast - _ = _stack__u64toa - _ = _stack__unquote - _ = _stack__validate_one - _ = _stack__validate_utf8 - _ = _stack__validate_utf8_fast - _ = _stack__value - _ = _stack__vnumber - _ = _stack__vsigned - _ = _stack__vstring - _ = _stack__vunsigned +var ( + _pcsp__f32toa = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {3286, 48}, + {3287, 40}, + {3289, 32}, + {3291, 24}, + {3293, 16}, + {3295, 8}, + {3296, 0}, + {3318, 48}, + } + _pcsp__f64toa = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {2740, 56}, + {2744, 48}, + {2745, 40}, + {2747, 32}, + {2749, 24}, + {2751, 16}, + {2753, 8}, + {2754, 0}, + {2792, 56}, + } + _pcsp__format_significand = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {452, 24}, + {453, 16}, + {455, 8}, + {457, 0}, + } + _pcsp__format_integer = [][2]uint32{ + {1, 0}, + {4, 8}, + {412, 16}, + {413, 8}, + {414, 0}, + {423, 16}, + {424, 8}, + {426, 0}, + } + _pcsp__fsm_exec = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {1342, 104}, + {1346, 48}, + {1347, 40}, + {1349, 32}, + {1351, 24}, + {1353, 16}, + {1355, 8}, + {1356, 0}, + {1692, 104}, + } + _pcsp__advance_string = [][2]uint32{ + {14, 0}, + {18, 8}, + {20, 16}, + {22, 24}, + {24, 32}, + {26, 40}, + {27, 48}, + {614, 56}, + {618, 48}, + {619, 40}, + {621, 32}, + {623, 24}, + {625, 16}, + {627, 8}, + {628, 0}, + {1339, 56}, + } + _pcsp__advance_string_default = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {576, 64}, + {580, 48}, + {581, 40}, + {583, 32}, + {585, 24}, + {587, 16}, + {589, 8}, + {590, 0}, + {955, 64}, + } + _pcsp__do_skip_number = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {881, 48}, + {882, 40}, + {884, 32}, + {886, 24}, + {888, 16}, + {890, 8}, + {891, 0}, + {956, 48}, + } + _pcsp__get_by_path = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {4012, 104}, + {4016, 48}, + {4017, 40}, + {4019, 32}, + {4021, 24}, + {4023, 16}, + {4025, 8}, + {4026, 0}, + {4194, 104}, + } + _pcsp__skip_one_fast = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {658, 136}, + {662, 48}, + {663, 40}, + {665, 32}, + {667, 24}, + {669, 16}, + {671, 8}, + {672, 0}, + {3404, 136}, + } + _pcsp__html_escape = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {1256, 72}, + {1260, 48}, + {1261, 40}, + {1263, 32}, + {1265, 24}, + {1267, 16}, + {1269, 8}, + {1271, 0}, + } + _pcsp__i64toa = [][2]uint32{ + {14, 0}, + {34, 8}, + {36, 0}, + } + _pcsp__u64toa = [][2]uint32{ + {1, 0}, + {161, 8}, + {162, 0}, + {457, 8}, + {458, 0}, + {772, 8}, + {773, 0}, + {1249, 8}, + {1251, 0}, + } + _pcsp__lspace = [][2]uint32{ + {1, 0}, + {89, 8}, + {90, 0}, + {103, 8}, + {104, 0}, + {111, 8}, + {113, 0}, + } + _pcsp__quote = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {1681, 64}, + {1685, 48}, + {1686, 40}, + {1688, 32}, + {1690, 24}, + {1692, 16}, + {1694, 8}, + {1695, 0}, + {1722, 64}, + } + _pcsp__skip_array = [][2]uint32{ + {1, 0}, + {26, 8}, + {32, 0}, + } + _pcsp__skip_number = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {100, 40}, + {101, 32}, + {103, 24}, + {105, 16}, + {107, 8}, + {108, 0}, + {139, 40}, + } + _pcsp__skip_object = [][2]uint32{ + {1, 0}, + {26, 8}, + {32, 0}, + } + _pcsp__skip_one = [][2]uint32{ + {1, 0}, + {30, 8}, + {36, 0}, + } + _pcsp__unquote = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {1684, 88}, + {1688, 48}, + {1689, 40}, + {1691, 32}, + {1693, 24}, + {1695, 16}, + {1697, 8}, + {1698, 0}, + {2270, 88}, + } + _pcsp__validate_one = [][2]uint32{ + {1, 0}, + {35, 8}, + {41, 0}, + } + _pcsp__validate_utf8 = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {11, 40}, + {623, 48}, + {627, 40}, + {628, 32}, + {630, 24}, + {632, 16}, + {634, 8}, + {635, 0}, + {666, 48}, + } + _pcsp__validate_utf8_fast = [][2]uint32{ + {1, 0}, + {4, 8}, + {5, 16}, + {247, 24}, + {251, 16}, + {252, 8}, + {253, 0}, + {527, 24}, + {531, 16}, + {532, 8}, + {534, 0}, + } + _pcsp__value = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {495, 88}, + {499, 48}, + {500, 40}, + {502, 32}, + {504, 24}, + {506, 16}, + {508, 8}, + {509, 0}, + {1316, 88}, + } + _pcsp__vnumber = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {803, 104}, + {807, 48}, + {808, 40}, + {810, 32}, + {812, 24}, + {814, 16}, + {816, 8}, + {817, 0}, + {1551, 104}, + } + _pcsp__atof_eisel_lemire64 = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {292, 32}, + {293, 24}, + {295, 16}, + {297, 8}, + {298, 0}, + {362, 32}, + } + _pcsp__atof_native = [][2]uint32{ + {1, 0}, + {4, 8}, + {587, 56}, + {591, 8}, + {593, 0}, + } + _pcsp__decimal_to_f64 = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {1144, 56}, + {1148, 48}, + {1149, 40}, + {1151, 32}, + {1153, 24}, + {1155, 16}, + {1157, 8}, + {1158, 0}, + {1169, 56}, + } + _pcsp__right_shift = [][2]uint32{ + {1, 0}, + {318, 8}, + {319, 0}, + {387, 8}, + {388, 0}, + {396, 8}, + {398, 0}, + } + _pcsp__left_shift = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {363, 24}, + {364, 16}, + {366, 8}, + {367, 0}, + {470, 24}, + {471, 16}, + {473, 8}, + {474, 0}, + {486, 24}, + } + _pcsp__vsigned = [][2]uint32{ + {1, 0}, + {4, 8}, + {119, 16}, + {120, 8}, + {121, 0}, + {132, 16}, + {133, 8}, + {134, 0}, + {276, 16}, + {277, 8}, + {278, 0}, + {282, 16}, + {283, 8}, + {284, 0}, + {322, 16}, + {323, 8}, + {324, 0}, + {332, 16}, + {333, 8}, + {335, 0}, + } + _pcsp__vstring = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {11, 40}, + {105, 56}, + {109, 40}, + {110, 32}, + {112, 24}, + {114, 16}, + {116, 8}, + {118, 0}, + } + _pcsp__vunsigned = [][2]uint32{ + {1, 0}, + {78, 8}, + {79, 0}, + {90, 8}, + {91, 0}, + {114, 8}, + {115, 0}, + {273, 8}, + {274, 0}, + {312, 8}, + {313, 0}, + {320, 8}, + {322, 0}, + } ) + +var Funcs = []loader.CFunc{ + {"__native_entry__", 0, 67, 0, nil}, + {"_f32toa", _entry__f32toa, _size__f32toa, _stack__f32toa, _pcsp__f32toa}, + {"_f64toa", _entry__f64toa, _size__f64toa, _stack__f64toa, _pcsp__f64toa}, + {"_format_significand", _entry__format_significand, _size__format_significand, _stack__format_significand, _pcsp__format_significand}, + {"_format_integer", _entry__format_integer, _size__format_integer, _stack__format_integer, _pcsp__format_integer}, + {"_fsm_exec", _entry__fsm_exec, _size__fsm_exec, _stack__fsm_exec, _pcsp__fsm_exec}, + {"_advance_string", _entry__advance_string, _size__advance_string, _stack__advance_string, _pcsp__advance_string}, + {"_advance_string_default", _entry__advance_string_default, _size__advance_string_default, _stack__advance_string_default, _pcsp__advance_string_default}, + {"_do_skip_number", _entry__do_skip_number, _size__do_skip_number, _stack__do_skip_number, _pcsp__do_skip_number}, + {"_get_by_path", _entry__get_by_path, _size__get_by_path, _stack__get_by_path, _pcsp__get_by_path}, + {"_skip_one_fast", _entry__skip_one_fast, _size__skip_one_fast, _stack__skip_one_fast, _pcsp__skip_one_fast}, + {"_html_escape", _entry__html_escape, _size__html_escape, _stack__html_escape, _pcsp__html_escape}, + {"_i64toa", _entry__i64toa, _size__i64toa, _stack__i64toa, _pcsp__i64toa}, + {"_u64toa", _entry__u64toa, _size__u64toa, _stack__u64toa, _pcsp__u64toa}, + {"_lspace", _entry__lspace, _size__lspace, _stack__lspace, _pcsp__lspace}, + {"_quote", _entry__quote, _size__quote, _stack__quote, _pcsp__quote}, + {"_skip_array", _entry__skip_array, _size__skip_array, _stack__skip_array, _pcsp__skip_array}, + {"_skip_number", _entry__skip_number, _size__skip_number, _stack__skip_number, _pcsp__skip_number}, + {"_skip_object", _entry__skip_object, _size__skip_object, _stack__skip_object, _pcsp__skip_object}, + {"_skip_one", _entry__skip_one, _size__skip_one, _stack__skip_one, _pcsp__skip_one}, + {"_unquote", _entry__unquote, _size__unquote, _stack__unquote, _pcsp__unquote}, + {"_validate_one", _entry__validate_one, _size__validate_one, _stack__validate_one, _pcsp__validate_one}, + {"_validate_utf8", _entry__validate_utf8, _size__validate_utf8, _stack__validate_utf8, _pcsp__validate_utf8}, + {"_validate_utf8_fast", _entry__validate_utf8_fast, _size__validate_utf8_fast, _stack__validate_utf8_fast, _pcsp__validate_utf8_fast}, + {"_value", _entry__value, _size__value, _stack__value, _pcsp__value}, + {"_vnumber", _entry__vnumber, _size__vnumber, _stack__vnumber, _pcsp__vnumber}, + {"_atof_eisel_lemire64", _entry__atof_eisel_lemire64, _size__atof_eisel_lemire64, _stack__atof_eisel_lemire64, _pcsp__atof_eisel_lemire64}, + {"_atof_native", _entry__atof_native, _size__atof_native, _stack__atof_native, _pcsp__atof_native}, + {"_decimal_to_f64", _entry__decimal_to_f64, _size__decimal_to_f64, _stack__decimal_to_f64, _pcsp__decimal_to_f64}, + {"_right_shift", _entry__right_shift, _size__right_shift, _stack__right_shift, _pcsp__right_shift}, + {"_left_shift", _entry__left_shift, _size__left_shift, _stack__left_shift, _pcsp__left_shift}, + {"_vsigned", _entry__vsigned, _size__vsigned, _stack__vsigned, _pcsp__vsigned}, + {"_vstring", _entry__vstring, _size__vstring, _stack__vstring, _pcsp__vstring}, + {"_vunsigned", _entry__vunsigned, _size__vunsigned, _stack__vunsigned, _pcsp__vunsigned}, +} diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/native_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/sse/native_text_amd64.go new file mode 100644 index 0000000000..f264063f78 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/native_text_amd64.go @@ -0,0 +1,14266 @@ +// +build amd64 +// Code generated by asm2asm, DO NOT EDIT. + +package sse + +var Text__native_entry__ = []byte{ + 0x48, 0x8d, 0x05, 0xf9, 0xff, 0xff, 0xff, // leaq $-7(%rip), %rax + 0x48, 0x89, 0x44, 0x24, 0x08, //0x00000007 movq %rax, $8(%rsp) + 0xc3, //0x0000000c retq + 0x90, 0x90, 0x90, //0x0000000d .p2align 4, 0x90 + //0x00000010 _lspace + 0x55, //0x00000010 pushq %rbp + 0x48, 0x89, 0xe5, //0x00000011 movq %rsp, %rbp + 0x48, 0x39, 0xd6, //0x00000014 cmpq %rdx, %rsi + 0x0f, 0x84, 0x4e, 0x00, 0x00, 0x00, //0x00000017 je LBB0_1 + 0x4c, 0x8d, 0x04, 0x37, //0x0000001d leaq (%rdi,%rsi), %r8 + 0x48, 0x8d, 0x44, 0x3a, 0x01, //0x00000021 leaq $1(%rdx,%rdi), %rax + 0x48, 0x29, 0xf2, //0x00000026 subq %rsi, %rdx + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000029 movabsq $4294977024, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000033 .p2align 4, 0x90 + //0x00000040 LBB0_3 + 0x0f, 0xbe, 0x48, 0xff, //0x00000040 movsbl $-1(%rax), %ecx + 0x83, 0xf9, 0x20, //0x00000044 cmpl $32, %ecx + 0x0f, 0x87, 0x2c, 0x00, 0x00, 0x00, //0x00000047 ja LBB0_5 + 0x48, 0x0f, 0xa3, 0xce, //0x0000004d btq %rcx, %rsi + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x00000051 jae LBB0_5 + 0x48, 0xff, 0xc0, //0x00000057 incq %rax + 0x48, 0xff, 0xc2, //0x0000005a incq %rdx + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x0000005d jne LBB0_3 + 0x49, 0x29, 0xf8, //0x00000063 subq %rdi, %r8 + 0x4c, 0x89, 0xc0, //0x00000066 movq %r8, %rax + 0x5d, //0x00000069 popq %rbp + 0xc3, //0x0000006a retq + //0x0000006b LBB0_1 + 0x48, 0x01, 0xfa, //0x0000006b addq %rdi, %rdx + 0x49, 0x89, 0xd0, //0x0000006e movq %rdx, %r8 + 0x49, 0x29, 0xf8, //0x00000071 subq %rdi, %r8 + 0x4c, 0x89, 0xc0, //0x00000074 movq %r8, %rax + 0x5d, //0x00000077 popq %rbp + 0xc3, //0x00000078 retq + //0x00000079 LBB0_5 + 0x48, 0xf7, 0xd7, //0x00000079 notq %rdi + 0x48, 0x01, 0xf8, //0x0000007c addq %rdi, %rax + 0x5d, //0x0000007f popq %rbp + 0xc3, //0x00000080 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00000081 .p2align 4, 0x00 + //0x00000090 LCPI1_0 + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x00000090 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + //0x000000a0 .p2align 4, 0x90 + //0x000000a0 _f64toa + 0x55, //0x000000a0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000000a1 movq %rsp, %rbp + 0x41, 0x57, //0x000000a4 pushq %r15 + 0x41, 0x56, //0x000000a6 pushq %r14 + 0x41, 0x55, //0x000000a8 pushq %r13 + 0x41, 0x54, //0x000000aa pushq %r12 + 0x53, //0x000000ac pushq %rbx + 0x50, //0x000000ad pushq %rax + 0x66, 0x48, 0x0f, 0x7e, 0xc2, //0x000000ae movq %xmm0, %rdx + 0x48, 0x89, 0xd0, //0x000000b3 movq %rdx, %rax + 0x48, 0xc1, 0xe8, 0x34, //0x000000b6 shrq $52, %rax + 0x25, 0xff, 0x07, 0x00, 0x00, //0x000000ba andl $2047, %eax + 0x3d, 0xff, 0x07, 0x00, 0x00, //0x000000bf cmpl $2047, %eax + 0x0f, 0x84, 0x99, 0x0a, 0x00, 0x00, //0x000000c4 je LBB1_114 + 0x49, 0x89, 0xfe, //0x000000ca movq %rdi, %r14 + 0xc6, 0x07, 0x2d, //0x000000cd movb $45, (%rdi) + 0x49, 0x89, 0xd4, //0x000000d0 movq %rdx, %r12 + 0x49, 0xc1, 0xec, 0x3f, //0x000000d3 shrq $63, %r12 + 0x4e, 0x8d, 0x3c, 0x27, //0x000000d7 leaq (%rdi,%r12), %r15 + 0x48, 0x8d, 0x0c, 0x55, 0x00, 0x00, 0x00, 0x00, //0x000000db leaq (,%rdx,2), %rcx + 0x48, 0x85, 0xc9, //0x000000e3 testq %rcx, %rcx + 0x0f, 0x84, 0x75, 0x02, 0x00, 0x00, //0x000000e6 je LBB1_19 + 0x48, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, //0x000000ec movabsq $4503599627370495, %rdi + 0x48, 0x21, 0xfa, //0x000000f6 andq %rdi, %rdx + 0x85, 0xc0, //0x000000f9 testl %eax, %eax + 0x0f, 0x84, 0x69, 0x0a, 0x00, 0x00, //0x000000fb je LBB1_115 + 0x48, 0xff, 0xc7, //0x00000101 incq %rdi + 0x48, 0x09, 0xd7, //0x00000104 orq %rdx, %rdi + 0x8d, 0x98, 0xcd, 0xfb, 0xff, 0xff, //0x00000107 leal $-1075(%rax), %ebx + 0x8d, 0x88, 0x01, 0xfc, 0xff, 0xff, //0x0000010d leal $-1023(%rax), %ecx + 0x83, 0xf9, 0x34, //0x00000113 cmpl $52, %ecx + 0x0f, 0x87, 0x1d, 0x00, 0x00, 0x00, //0x00000116 ja LBB1_5 + 0xb9, 0x33, 0x04, 0x00, 0x00, //0x0000011c movl $1075, %ecx + 0x29, 0xc1, //0x00000121 subl %eax, %ecx + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00000123 movq $-1, %rsi + 0x48, 0xd3, 0xe6, //0x0000012a shlq %cl, %rsi + 0x48, 0xf7, 0xd6, //0x0000012d notq %rsi + 0x48, 0x85, 0xf7, //0x00000130 testq %rsi, %rdi + 0x0f, 0x84, 0x0d, 0x04, 0x00, 0x00, //0x00000133 je LBB1_43 + //0x00000139 LBB1_5 + 0x48, 0x85, 0xd2, //0x00000139 testq %rdx, %rdx + 0x0f, 0x94, 0xc1, //0x0000013c sete %cl + 0x83, 0xf8, 0x01, //0x0000013f cmpl $1, %eax + 0x0f, 0x97, 0xc0, //0x00000142 seta %al + 0x20, 0xc8, //0x00000145 andb %cl, %al + 0x0f, 0xb6, 0xc0, //0x00000147 movzbl %al, %eax + 0x48, 0x8d, 0x74, 0xb8, 0xfe, //0x0000014a leaq $-2(%rax,%rdi,4), %rsi + 0x44, 0x69, 0xcb, 0x13, 0x44, 0x13, 0x00, //0x0000014f imull $1262611, %ebx, %r9d + 0x31, 0xc9, //0x00000156 xorl %ecx, %ecx + 0x84, 0xc0, //0x00000158 testb %al, %al + 0xb8, 0xff, 0xfe, 0x07, 0x00, //0x0000015a movl $524031, %eax + 0x0f, 0x44, 0xc1, //0x0000015f cmovel %ecx, %eax + 0x41, 0x29, 0xc1, //0x00000162 subl %eax, %r9d + 0x41, 0xc1, 0xf9, 0x16, //0x00000165 sarl $22, %r9d + 0x41, 0x69, 0xc9, 0xb1, 0x6c, 0xe5, 0xff, //0x00000169 imull $-1741647, %r9d, %ecx + 0xc1, 0xe9, 0x13, //0x00000170 shrl $19, %ecx + 0x01, 0xd9, //0x00000173 addl %ebx, %ecx + 0xb8, 0x24, 0x01, 0x00, 0x00, //0x00000175 movl $292, %eax + 0x44, 0x29, 0xc8, //0x0000017a subl %r9d, %eax + 0x48, 0x98, //0x0000017d cltq + 0x48, 0xc1, 0xe0, 0x04, //0x0000017f shlq $4, %rax + 0x48, 0x8d, 0x15, 0x66, 0xc0, 0x00, 0x00, //0x00000183 leaq $49254(%rip), %rdx /* _pow10_ceil_sig.g+0(%rip) */ + 0x4c, 0x8b, 0x1c, 0x10, //0x0000018a movq (%rax,%rdx), %r11 + 0x4c, 0x8b, 0x6c, 0x10, 0x08, //0x0000018e movq $8(%rax,%rdx), %r13 + 0xfe, 0xc1, //0x00000193 incb %cl + 0x48, 0xd3, 0xe6, //0x00000195 shlq %cl, %rsi + 0x48, 0x89, 0xf0, //0x00000198 movq %rsi, %rax + 0x49, 0xf7, 0xe5, //0x0000019b mulq %r13 + 0x48, 0x89, 0xd3, //0x0000019e movq %rdx, %rbx + 0x48, 0x89, 0xf0, //0x000001a1 movq %rsi, %rax + 0x49, 0xf7, 0xe3, //0x000001a4 mulq %r11 + 0x48, 0x8d, 0x34, 0xbd, 0x00, 0x00, 0x00, 0x00, //0x000001a7 leaq (,%rdi,4), %rsi + 0x48, 0x01, 0xd8, //0x000001af addq %rbx, %rax + 0x48, 0x83, 0xd2, 0x00, //0x000001b2 adcq $0, %rdx + 0x31, 0xdb, //0x000001b6 xorl %ebx, %ebx + 0x48, 0x83, 0xf8, 0x01, //0x000001b8 cmpq $1, %rax + 0x0f, 0x97, 0xc3, //0x000001bc seta %bl + 0x48, 0x09, 0xd3, //0x000001bf orq %rdx, %rbx + 0x48, 0xd3, 0xe6, //0x000001c2 shlq %cl, %rsi + 0x48, 0x89, 0xf0, //0x000001c5 movq %rsi, %rax + 0x49, 0xf7, 0xe5, //0x000001c8 mulq %r13 + 0x49, 0x89, 0xd2, //0x000001cb movq %rdx, %r10 + 0x48, 0x89, 0xf0, //0x000001ce movq %rsi, %rax + 0x49, 0xf7, 0xe3, //0x000001d1 mulq %r11 + 0x49, 0x89, 0xd0, //0x000001d4 movq %rdx, %r8 + 0x48, 0x8d, 0x34, 0xbd, 0x02, 0x00, 0x00, 0x00, //0x000001d7 leaq $2(,%rdi,4), %rsi + 0x4c, 0x01, 0xd0, //0x000001df addq %r10, %rax + 0x49, 0x83, 0xd0, 0x00, //0x000001e2 adcq $0, %r8 + 0x45, 0x31, 0xd2, //0x000001e6 xorl %r10d, %r10d + 0x48, 0x83, 0xf8, 0x01, //0x000001e9 cmpq $1, %rax + 0x41, 0x0f, 0x97, 0xc2, //0x000001ed seta %r10b + 0x4d, 0x09, 0xc2, //0x000001f1 orq %r8, %r10 + 0x48, 0xd3, 0xe6, //0x000001f4 shlq %cl, %rsi + 0x48, 0x89, 0xf0, //0x000001f7 movq %rsi, %rax + 0x49, 0xf7, 0xe5, //0x000001fa mulq %r13 + 0x48, 0x89, 0xd1, //0x000001fd movq %rdx, %rcx + 0x48, 0x89, 0xf0, //0x00000200 movq %rsi, %rax + 0x49, 0xf7, 0xe3, //0x00000203 mulq %r11 + 0x48, 0x01, 0xc8, //0x00000206 addq %rcx, %rax + 0x48, 0x83, 0xd2, 0x00, //0x00000209 adcq $0, %rdx + 0x31, 0xc9, //0x0000020d xorl %ecx, %ecx + 0x48, 0x83, 0xf8, 0x01, //0x0000020f cmpq $1, %rax + 0x0f, 0x97, 0xc1, //0x00000213 seta %cl + 0x48, 0x09, 0xd1, //0x00000216 orq %rdx, %rcx + 0x83, 0xe7, 0x01, //0x00000219 andl $1, %edi + 0x48, 0x01, 0xfb, //0x0000021c addq %rdi, %rbx + 0x48, 0x29, 0xf9, //0x0000021f subq %rdi, %rcx + 0x49, 0x83, 0xfa, 0x28, //0x00000222 cmpq $40, %r10 + 0x0f, 0x82, 0x01, 0x01, 0x00, 0x00, //0x00000226 jb LBB1_17 + 0x48, 0xba, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x0000022c movabsq $-3689348814741910323, %rdx + 0x4c, 0x89, 0xc0, //0x00000236 movq %r8, %rax + 0x48, 0xf7, 0xe2, //0x00000239 mulq %rdx + 0x48, 0x89, 0xd7, //0x0000023c movq %rdx, %rdi + 0x48, 0xc1, 0xef, 0x05, //0x0000023f shrq $5, %rdi + 0x48, 0x8d, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x00, //0x00000243 leaq (,%rdi,8), %rax + 0x48, 0x8d, 0x14, 0x80, //0x0000024b leaq (%rax,%rax,4), %rdx + 0x48, 0x39, 0xd3, //0x0000024f cmpq %rdx, %rbx + 0x40, 0x0f, 0x96, 0xc6, //0x00000252 setbe %sil + 0x48, 0x8d, 0x44, 0x80, 0x28, //0x00000256 leaq $40(%rax,%rax,4), %rax + 0x48, 0x39, 0xc8, //0x0000025b cmpq %rcx, %rax + 0x0f, 0x96, 0xc2, //0x0000025e setbe %dl + 0x40, 0x38, 0xd6, //0x00000261 cmpb %dl, %sil + 0x0f, 0x84, 0xc3, 0x00, 0x00, 0x00, //0x00000264 je LBB1_17 + 0x31, 0xd2, //0x0000026a xorl %edx, %edx + 0x48, 0x39, 0xc8, //0x0000026c cmpq %rcx, %rax + 0x0f, 0x96, 0xc2, //0x0000026f setbe %dl + 0x48, 0x01, 0xd7, //0x00000272 addq %rdx, %rdi + 0x41, 0xff, 0xc1, //0x00000275 incl %r9d + 0x48, 0xbb, 0xe0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, //0x00000278 movabsq $8589934560, %rbx + 0x48, 0x8d, 0x83, 0x1f, 0xe4, 0x0b, 0x54, //0x00000282 leaq $1410065439(%rbx), %rax + 0x48, 0x39, 0xc7, //0x00000289 cmpq %rax, %rdi + 0x0f, 0x87, 0x1e, 0x01, 0x00, 0x00, //0x0000028c ja LBB1_23 + //0x00000292 LBB1_8 + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00000292 movl $1, %edx + 0x48, 0x83, 0xff, 0x0a, //0x00000297 cmpq $10, %rdi + 0x0f, 0x82, 0x9c, 0x01, 0x00, 0x00, //0x0000029b jb LBB1_30 + 0xba, 0x02, 0x00, 0x00, 0x00, //0x000002a1 movl $2, %edx + 0x48, 0x83, 0xff, 0x64, //0x000002a6 cmpq $100, %rdi + 0x0f, 0x82, 0x8d, 0x01, 0x00, 0x00, //0x000002aa jb LBB1_30 + 0xba, 0x03, 0x00, 0x00, 0x00, //0x000002b0 movl $3, %edx + 0x48, 0x81, 0xff, 0xe8, 0x03, 0x00, 0x00, //0x000002b5 cmpq $1000, %rdi + 0x0f, 0x82, 0x7b, 0x01, 0x00, 0x00, //0x000002bc jb LBB1_30 + 0xba, 0x04, 0x00, 0x00, 0x00, //0x000002c2 movl $4, %edx + 0x48, 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x000002c7 cmpq $10000, %rdi + 0x0f, 0x82, 0x69, 0x01, 0x00, 0x00, //0x000002ce jb LBB1_30 + 0xba, 0x05, 0x00, 0x00, 0x00, //0x000002d4 movl $5, %edx + 0x48, 0x81, 0xff, 0xa0, 0x86, 0x01, 0x00, //0x000002d9 cmpq $100000, %rdi + 0x0f, 0x82, 0x57, 0x01, 0x00, 0x00, //0x000002e0 jb LBB1_30 + 0xba, 0x06, 0x00, 0x00, 0x00, //0x000002e6 movl $6, %edx + 0x48, 0x81, 0xff, 0x40, 0x42, 0x0f, 0x00, //0x000002eb cmpq $1000000, %rdi + 0x0f, 0x82, 0x45, 0x01, 0x00, 0x00, //0x000002f2 jb LBB1_30 + 0xba, 0x07, 0x00, 0x00, 0x00, //0x000002f8 movl $7, %edx + 0x48, 0x81, 0xff, 0x80, 0x96, 0x98, 0x00, //0x000002fd cmpq $10000000, %rdi + 0x0f, 0x82, 0x33, 0x01, 0x00, 0x00, //0x00000304 jb LBB1_30 + 0xba, 0x08, 0x00, 0x00, 0x00, //0x0000030a movl $8, %edx + 0x48, 0x81, 0xff, 0x00, 0xe1, 0xf5, 0x05, //0x0000030f cmpq $100000000, %rdi + 0x0f, 0x82, 0x21, 0x01, 0x00, 0x00, //0x00000316 jb LBB1_30 + 0x48, 0x81, 0xff, 0x00, 0xca, 0x9a, 0x3b, //0x0000031c cmpq $1000000000, %rdi + 0xba, 0x0a, 0x00, 0x00, 0x00, //0x00000323 movl $10, %edx + 0xe9, 0x0d, 0x01, 0x00, 0x00, //0x00000328 jmp LBB1_29 + //0x0000032d LBB1_17 + 0x4d, 0x89, 0xc3, //0x0000032d movq %r8, %r11 + 0x49, 0xc1, 0xeb, 0x02, //0x00000330 shrq $2, %r11 + 0x4c, 0x89, 0xc2, //0x00000334 movq %r8, %rdx + 0x48, 0x83, 0xe2, 0xfc, //0x00000337 andq $-4, %rdx + 0x48, 0x39, 0xd3, //0x0000033b cmpq %rdx, %rbx + 0x0f, 0x96, 0xc3, //0x0000033e setbe %bl + 0x48, 0x8d, 0x72, 0x04, //0x00000341 leaq $4(%rdx), %rsi + 0x48, 0x39, 0xce, //0x00000345 cmpq %rcx, %rsi + 0x0f, 0x96, 0xc0, //0x00000348 setbe %al + 0x38, 0xc3, //0x0000034b cmpb %al, %bl + 0x0f, 0x84, 0x20, 0x00, 0x00, 0x00, //0x0000034d je LBB1_20 + 0x31, 0xff, //0x00000353 xorl %edi, %edi + 0x48, 0x39, 0xce, //0x00000355 cmpq %rcx, %rsi + 0x40, 0x0f, 0x96, 0xc7, //0x00000358 setbe %dil + 0xe9, 0x32, 0x00, 0x00, 0x00, //0x0000035c jmp LBB1_22 + //0x00000361 LBB1_19 + 0x41, 0xc6, 0x07, 0x30, //0x00000361 movb $48, (%r15) + 0x45, 0x29, 0xf7, //0x00000365 subl %r14d, %r15d + 0x41, 0xff, 0xc7, //0x00000368 incl %r15d + 0x44, 0x89, 0xfb, //0x0000036b movl %r15d, %ebx + 0xe9, 0xdf, 0x07, 0x00, 0x00, //0x0000036e jmp LBB1_113 + //0x00000373 LBB1_20 + 0x48, 0x83, 0xca, 0x02, //0x00000373 orq $2, %rdx + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00000377 movl $1, %edi + 0x49, 0x39, 0xd2, //0x0000037c cmpq %rdx, %r10 + 0x0f, 0x87, 0x0e, 0x00, 0x00, 0x00, //0x0000037f ja LBB1_22 + 0x0f, 0x94, 0xc0, //0x00000385 sete %al + 0x41, 0xc0, 0xe8, 0x02, //0x00000388 shrb $2, %r8b + 0x41, 0x20, 0xc0, //0x0000038c andb %al, %r8b + 0x41, 0x0f, 0xb6, 0xf8, //0x0000038f movzbl %r8b, %edi + //0x00000393 LBB1_22 + 0x4c, 0x01, 0xdf, //0x00000393 addq %r11, %rdi + 0x48, 0xbb, 0xe0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, //0x00000396 movabsq $8589934560, %rbx + 0x48, 0x8d, 0x83, 0x1f, 0xe4, 0x0b, 0x54, //0x000003a0 leaq $1410065439(%rbx), %rax + 0x48, 0x39, 0xc7, //0x000003a7 cmpq %rax, %rdi + 0x0f, 0x86, 0xe2, 0xfe, 0xff, 0xff, //0x000003aa jbe LBB1_8 + //0x000003b0 LBB1_23 + 0x48, 0x89, 0xf8, //0x000003b0 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0b, //0x000003b3 shrq $11, %rax + 0xba, 0x0b, 0x00, 0x00, 0x00, //0x000003b7 movl $11, %edx + 0x48, 0x3d, 0xdd, 0x0e, 0xe9, 0x02, //0x000003bc cmpq $48828125, %rax + 0x0f, 0x82, 0x75, 0x00, 0x00, 0x00, //0x000003c2 jb LBB1_30 + 0x48, 0x89, 0xf8, //0x000003c8 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0c, //0x000003cb shrq $12, %rax + 0xba, 0x0c, 0x00, 0x00, 0x00, //0x000003cf movl $12, %edx + 0x48, 0x3d, 0x51, 0x4a, 0x8d, 0x0e, //0x000003d4 cmpq $244140625, %rax + 0x0f, 0x82, 0x5d, 0x00, 0x00, 0x00, //0x000003da jb LBB1_30 + 0x48, 0x89, 0xf8, //0x000003e0 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0d, //0x000003e3 shrq $13, %rax + 0xba, 0x0d, 0x00, 0x00, 0x00, //0x000003e7 movl $13, %edx + 0x48, 0x3d, 0x95, 0x73, 0xc2, 0x48, //0x000003ec cmpq $1220703125, %rax + 0x0f, 0x82, 0x45, 0x00, 0x00, 0x00, //0x000003f2 jb LBB1_30 + 0xba, 0x0e, 0x00, 0x00, 0x00, //0x000003f8 movl $14, %edx + 0x48, 0xb8, 0x00, 0x40, 0x7a, 0x10, 0xf3, 0x5a, 0x00, 0x00, //0x000003fd movabsq $100000000000000, %rax + 0x48, 0x39, 0xc7, //0x00000407 cmpq %rax, %rdi + 0x0f, 0x82, 0x2d, 0x00, 0x00, 0x00, //0x0000040a jb LBB1_30 + 0xba, 0x0f, 0x00, 0x00, 0x00, //0x00000410 movl $15, %edx + 0x48, 0xb8, 0x00, 0x80, 0xc6, 0xa4, 0x7e, 0x8d, 0x03, 0x00, //0x00000415 movabsq $1000000000000000, %rax + 0x48, 0x39, 0xc7, //0x0000041f cmpq %rax, %rdi + 0x0f, 0x82, 0x15, 0x00, 0x00, 0x00, //0x00000422 jb LBB1_30 + 0x48, 0xb8, 0x00, 0x00, 0xc1, 0x6f, 0xf2, 0x86, 0x23, 0x00, //0x00000428 movabsq $10000000000000000, %rax + 0x48, 0x39, 0xc7, //0x00000432 cmpq %rax, %rdi + 0xba, 0x11, 0x00, 0x00, 0x00, //0x00000435 movl $17, %edx + //0x0000043a LBB1_29 + 0x83, 0xda, 0x00, //0x0000043a sbbl $0, %edx + //0x0000043d LBB1_30 + 0x46, 0x8d, 0x2c, 0x0a, //0x0000043d leal (%rdx,%r9), %r13d + 0x42, 0x8d, 0x44, 0x0a, 0x05, //0x00000441 leal $5(%rdx,%r9), %eax + 0x83, 0xf8, 0x1b, //0x00000446 cmpl $27, %eax + 0x0f, 0x82, 0x95, 0x00, 0x00, 0x00, //0x00000449 jb LBB1_38 + 0x4d, 0x8d, 0x67, 0x01, //0x0000044f leaq $1(%r15), %r12 + 0x4c, 0x89, 0xe6, //0x00000453 movq %r12, %rsi + 0xe8, 0xd5, 0x87, 0x00, 0x00, //0x00000456 callq _format_significand + 0x48, 0x89, 0xc3, //0x0000045b movq %rax, %rbx + 0x90, 0x90, //0x0000045e .p2align 4, 0x90 + //0x00000460 LBB1_32 + 0x80, 0x7b, 0xff, 0x30, //0x00000460 cmpb $48, $-1(%rbx) + 0x48, 0x8d, 0x5b, 0xff, //0x00000464 leaq $-1(%rbx), %rbx + 0x0f, 0x84, 0xf2, 0xff, 0xff, 0xff, //0x00000468 je LBB1_32 + 0x41, 0x8a, 0x47, 0x01, //0x0000046e movb $1(%r15), %al + 0x41, 0x88, 0x07, //0x00000472 movb %al, (%r15) + 0x48, 0x8d, 0x43, 0x01, //0x00000475 leaq $1(%rbx), %rax + 0x48, 0x89, 0xc1, //0x00000479 movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x0000047c subq %r12, %rcx + 0x48, 0x83, 0xf9, 0x02, //0x0000047f cmpq $2, %rcx + 0x0f, 0x8c, 0x08, 0x00, 0x00, 0x00, //0x00000483 jl LBB1_35 + 0x41, 0xc6, 0x04, 0x24, 0x2e, //0x00000489 movb $46, (%r12) + 0x48, 0x89, 0xc3, //0x0000048e movq %rax, %rbx + //0x00000491 LBB1_35 + 0xc6, 0x03, 0x65, //0x00000491 movb $101, (%rbx) + 0x45, 0x85, 0xed, //0x00000494 testl %r13d, %r13d + 0x0f, 0x8e, 0x57, 0x01, 0x00, 0x00, //0x00000497 jle LBB1_51 + 0x41, 0xff, 0xcd, //0x0000049d decl %r13d + 0xc6, 0x43, 0x01, 0x2b, //0x000004a0 movb $43, $1(%rbx) + 0x44, 0x89, 0xe8, //0x000004a4 movl %r13d, %eax + 0x83, 0xf8, 0x64, //0x000004a7 cmpl $100, %eax + 0x0f, 0x8c, 0x59, 0x01, 0x00, 0x00, //0x000004aa jl LBB1_52 + //0x000004b0 LBB1_37 + 0x89, 0xc1, //0x000004b0 movl %eax, %ecx + 0xba, 0xcd, 0xcc, 0xcc, 0xcc, //0x000004b2 movl $3435973837, %edx + 0x48, 0x0f, 0xaf, 0xd1, //0x000004b7 imulq %rcx, %rdx + 0x48, 0xc1, 0xea, 0x23, //0x000004bb shrq $35, %rdx + 0x8d, 0x0c, 0x12, //0x000004bf leal (%rdx,%rdx), %ecx + 0x8d, 0x0c, 0x89, //0x000004c2 leal (%rcx,%rcx,4), %ecx + 0x29, 0xc8, //0x000004c5 subl %ecx, %eax + 0x48, 0x8d, 0x0d, 0x52, 0xbc, 0x00, 0x00, //0x000004c7 leaq $48210(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x51, //0x000004ce movzwl (%rcx,%rdx,2), %ecx + 0x66, 0x89, 0x4b, 0x02, //0x000004d2 movw %cx, $2(%rbx) + 0x0c, 0x30, //0x000004d6 orb $48, %al + 0x88, 0x43, 0x04, //0x000004d8 movb %al, $4(%rbx) + 0x48, 0x83, 0xc3, 0x05, //0x000004db addq $5, %rbx + 0xe9, 0x6b, 0x06, 0x00, 0x00, //0x000004df jmp LBB1_112 + //0x000004e4 LBB1_38 + 0x45, 0x85, 0xc9, //0x000004e4 testl %r9d, %r9d + 0x0f, 0x88, 0x3f, 0x01, 0x00, 0x00, //0x000004e7 js LBB1_54 + 0x4d, 0x63, 0xed, //0x000004ed movslq %r13d, %r13 + 0x4b, 0x8d, 0x1c, 0x2f, //0x000004f0 leaq (%r15,%r13), %rbx + 0x4c, 0x89, 0xfe, //0x000004f4 movq %r15, %rsi + 0xe8, 0x94, 0x06, 0x00, 0x00, //0x000004f7 callq _format_integer + 0x48, 0x39, 0xd8, //0x000004fc cmpq %rbx, %rax + 0x0f, 0x83, 0x4a, 0x06, 0x00, 0x00, //0x000004ff jae LBB1_112 + 0x4d, 0x01, 0xec, //0x00000505 addq %r13, %r12 + 0x49, 0x29, 0xc4, //0x00000508 subq %rax, %r12 + 0x4d, 0x01, 0xf4, //0x0000050b addq %r14, %r12 + 0x49, 0x83, 0xfc, 0x20, //0x0000050e cmpq $32, %r12 + 0x0f, 0x82, 0x18, 0x03, 0x00, 0x00, //0x00000512 jb LBB1_76 + 0x4c, 0x89, 0xe1, //0x00000518 movq %r12, %rcx + 0x48, 0x83, 0xe1, 0xe0, //0x0000051b andq $-32, %rcx + 0x48, 0x8d, 0x79, 0xe0, //0x0000051f leaq $-32(%rcx), %rdi + 0x48, 0x89, 0xfe, //0x00000523 movq %rdi, %rsi + 0x48, 0xc1, 0xee, 0x05, //0x00000526 shrq $5, %rsi + 0x48, 0xff, 0xc6, //0x0000052a incq %rsi + 0x89, 0xf2, //0x0000052d movl %esi, %edx + 0x83, 0xe2, 0x07, //0x0000052f andl $7, %edx + 0x48, 0x81, 0xff, 0xe0, 0x00, 0x00, 0x00, //0x00000532 cmpq $224, %rdi + 0x0f, 0x83, 0xf8, 0x01, 0x00, 0x00, //0x00000539 jae LBB1_69 + 0x31, 0xff, //0x0000053f xorl %edi, %edi + 0xe9, 0x92, 0x02, 0x00, 0x00, //0x00000541 jmp LBB1_71 + //0x00000546 LBB1_43 + 0x48, 0xd3, 0xef, //0x00000546 shrq %cl, %rdi + 0x48, 0xb8, 0xe0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, //0x00000549 movabsq $8589934560, %rax + 0x48, 0x05, 0x1f, 0xe4, 0x0b, 0x54, //0x00000553 addq $1410065439, %rax + 0x48, 0x39, 0xc7, //0x00000559 cmpq %rax, %rdi + 0x0f, 0x86, 0x3b, 0x01, 0x00, 0x00, //0x0000055c jbe LBB1_60 + 0x48, 0x89, 0xf8, //0x00000562 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0b, //0x00000565 shrq $11, %rax + 0xba, 0x0b, 0x00, 0x00, 0x00, //0x00000569 movl $11, %edx + 0x48, 0x3d, 0xdd, 0x0e, 0xe9, 0x02, //0x0000056e cmpq $48828125, %rax + 0x0f, 0x82, 0xad, 0x01, 0x00, 0x00, //0x00000574 jb LBB1_68 + 0x48, 0x89, 0xf8, //0x0000057a movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0c, //0x0000057d shrq $12, %rax + 0xba, 0x0c, 0x00, 0x00, 0x00, //0x00000581 movl $12, %edx + 0x48, 0x3d, 0x51, 0x4a, 0x8d, 0x0e, //0x00000586 cmpq $244140625, %rax + 0x0f, 0x82, 0x95, 0x01, 0x00, 0x00, //0x0000058c jb LBB1_68 + 0x48, 0x89, 0xf8, //0x00000592 movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x0d, //0x00000595 shrq $13, %rax + 0xba, 0x0d, 0x00, 0x00, 0x00, //0x00000599 movl $13, %edx + 0x48, 0x3d, 0x95, 0x73, 0xc2, 0x48, //0x0000059e cmpq $1220703125, %rax + 0x0f, 0x82, 0x7d, 0x01, 0x00, 0x00, //0x000005a4 jb LBB1_68 + 0xba, 0x0e, 0x00, 0x00, 0x00, //0x000005aa movl $14, %edx + 0x48, 0xb8, 0x00, 0x40, 0x7a, 0x10, 0xf3, 0x5a, 0x00, 0x00, //0x000005af movabsq $100000000000000, %rax + 0x48, 0x39, 0xc7, //0x000005b9 cmpq %rax, %rdi + 0x0f, 0x82, 0x65, 0x01, 0x00, 0x00, //0x000005bc jb LBB1_68 + 0xba, 0x0f, 0x00, 0x00, 0x00, //0x000005c2 movl $15, %edx + 0x48, 0xb8, 0x00, 0x80, 0xc6, 0xa4, 0x7e, 0x8d, 0x03, 0x00, //0x000005c7 movabsq $1000000000000000, %rax + 0x48, 0x39, 0xc7, //0x000005d1 cmpq %rax, %rdi + 0x0f, 0x82, 0x4d, 0x01, 0x00, 0x00, //0x000005d4 jb LBB1_68 + 0x48, 0xb8, 0x00, 0x00, 0xc1, 0x6f, 0xf2, 0x86, 0x23, 0x00, //0x000005da movabsq $10000000000000000, %rax + 0x48, 0x39, 0xc7, //0x000005e4 cmpq %rax, %rdi + 0xba, 0x11, 0x00, 0x00, 0x00, //0x000005e7 movl $17, %edx + //0x000005ec LBB1_50 + 0x83, 0xda, 0x00, //0x000005ec sbbl $0, %edx + 0xe9, 0x33, 0x01, 0x00, 0x00, //0x000005ef jmp LBB1_68 + //0x000005f4 LBB1_51 + 0xc6, 0x43, 0x01, 0x2d, //0x000005f4 movb $45, $1(%rbx) + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000005f8 movl $1, %eax + 0x44, 0x29, 0xe8, //0x000005fd subl %r13d, %eax + 0x83, 0xf8, 0x64, //0x00000600 cmpl $100, %eax + 0x0f, 0x8d, 0xa7, 0xfe, 0xff, 0xff, //0x00000603 jge LBB1_37 + //0x00000609 LBB1_52 + 0x83, 0xf8, 0x0a, //0x00000609 cmpl $10, %eax + 0x0f, 0x8c, 0x7d, 0x00, 0x00, 0x00, //0x0000060c jl LBB1_59 + 0x48, 0x98, //0x00000612 cltq + 0x48, 0x8d, 0x0d, 0x05, 0xbb, 0x00, 0x00, //0x00000614 leaq $47877(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x0000061b movzwl (%rcx,%rax,2), %eax + 0x66, 0x89, 0x43, 0x02, //0x0000061f movw %ax, $2(%rbx) + 0x48, 0x83, 0xc3, 0x04, //0x00000623 addq $4, %rbx + 0xe9, 0x23, 0x05, 0x00, 0x00, //0x00000627 jmp LBB1_112 + //0x0000062c LBB1_54 + 0x45, 0x85, 0xed, //0x0000062c testl %r13d, %r13d + 0x0f, 0x8f, 0x0c, 0x03, 0x00, 0x00, //0x0000062f jg LBB1_85 + 0x66, 0x41, 0xc7, 0x07, 0x30, 0x2e, //0x00000635 movw $11824, (%r15) + 0x49, 0x83, 0xc7, 0x02, //0x0000063b addq $2, %r15 + 0x45, 0x85, 0xed, //0x0000063f testl %r13d, %r13d + 0x0f, 0x89, 0xf9, 0x02, 0x00, 0x00, //0x00000642 jns LBB1_85 + 0x31, 0xc0, //0x00000648 xorl %eax, %eax + 0x41, 0x83, 0xfd, 0xe0, //0x0000064a cmpl $-32, %r13d + 0x0f, 0x87, 0xce, 0x02, 0x00, 0x00, //0x0000064e ja LBB1_83 + 0x45, 0x89, 0xe8, //0x00000654 movl %r13d, %r8d + 0x41, 0xf7, 0xd0, //0x00000657 notl %r8d + 0x49, 0xff, 0xc0, //0x0000065a incq %r8 + 0x4c, 0x89, 0xc0, //0x0000065d movq %r8, %rax + 0x49, 0x89, 0xda, //0x00000660 movq %rbx, %r10 + 0x48, 0x21, 0xd8, //0x00000663 andq %rbx, %rax + 0x48, 0x8d, 0x48, 0xe0, //0x00000666 leaq $-32(%rax), %rcx + 0x48, 0x89, 0xcb, //0x0000066a movq %rcx, %rbx + 0x48, 0xc1, 0xeb, 0x05, //0x0000066d shrq $5, %rbx + 0x48, 0xff, 0xc3, //0x00000671 incq %rbx + 0x41, 0x89, 0xd9, //0x00000674 movl %ebx, %r9d + 0x41, 0x83, 0xe1, 0x07, //0x00000677 andl $7, %r9d + 0x48, 0x81, 0xf9, 0xe0, 0x00, 0x00, 0x00, //0x0000067b cmpq $224, %rcx + 0x0f, 0x83, 0xbc, 0x01, 0x00, 0x00, //0x00000682 jae LBB1_77 + 0x31, 0xdb, //0x00000688 xorl %ebx, %ebx + 0xe9, 0x52, 0x02, 0x00, 0x00, //0x0000068a jmp LBB1_79 + //0x0000068f LBB1_59 + 0x04, 0x30, //0x0000068f addb $48, %al + 0x88, 0x43, 0x02, //0x00000691 movb %al, $2(%rbx) + 0x48, 0x83, 0xc3, 0x03, //0x00000694 addq $3, %rbx + 0xe9, 0xb2, 0x04, 0x00, 0x00, //0x00000698 jmp LBB1_112 + //0x0000069d LBB1_60 + 0xba, 0x01, 0x00, 0x00, 0x00, //0x0000069d movl $1, %edx + 0x48, 0x83, 0xff, 0x0a, //0x000006a2 cmpq $10, %rdi + 0x0f, 0x82, 0x7b, 0x00, 0x00, 0x00, //0x000006a6 jb LBB1_68 + 0xba, 0x02, 0x00, 0x00, 0x00, //0x000006ac movl $2, %edx + 0x48, 0x83, 0xff, 0x64, //0x000006b1 cmpq $100, %rdi + 0x0f, 0x82, 0x6c, 0x00, 0x00, 0x00, //0x000006b5 jb LBB1_68 + 0xba, 0x03, 0x00, 0x00, 0x00, //0x000006bb movl $3, %edx + 0x48, 0x81, 0xff, 0xe8, 0x03, 0x00, 0x00, //0x000006c0 cmpq $1000, %rdi + 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x000006c7 jb LBB1_68 + 0xba, 0x04, 0x00, 0x00, 0x00, //0x000006cd movl $4, %edx + 0x48, 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x000006d2 cmpq $10000, %rdi + 0x0f, 0x82, 0x48, 0x00, 0x00, 0x00, //0x000006d9 jb LBB1_68 + 0xba, 0x05, 0x00, 0x00, 0x00, //0x000006df movl $5, %edx + 0x48, 0x81, 0xff, 0xa0, 0x86, 0x01, 0x00, //0x000006e4 cmpq $100000, %rdi + 0x0f, 0x82, 0x36, 0x00, 0x00, 0x00, //0x000006eb jb LBB1_68 + 0xba, 0x06, 0x00, 0x00, 0x00, //0x000006f1 movl $6, %edx + 0x48, 0x81, 0xff, 0x40, 0x42, 0x0f, 0x00, //0x000006f6 cmpq $1000000, %rdi + 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x000006fd jb LBB1_68 + 0xba, 0x07, 0x00, 0x00, 0x00, //0x00000703 movl $7, %edx + 0x48, 0x81, 0xff, 0x80, 0x96, 0x98, 0x00, //0x00000708 cmpq $10000000, %rdi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x0000070f jb LBB1_68 + 0xba, 0x08, 0x00, 0x00, 0x00, //0x00000715 movl $8, %edx + 0x48, 0x81, 0xff, 0x00, 0xe1, 0xf5, 0x05, //0x0000071a cmpq $100000000, %rdi + 0x0f, 0x83, 0x50, 0x04, 0x00, 0x00, //0x00000721 jae LBB1_116 + //0x00000727 LBB1_68 + 0x4c, 0x89, 0xfe, //0x00000727 movq %r15, %rsi + 0xe8, 0x61, 0x04, 0x00, 0x00, //0x0000072a callq _format_integer + 0x48, 0x89, 0xc3, //0x0000072f movq %rax, %rbx + 0xe9, 0x18, 0x04, 0x00, 0x00, //0x00000732 jmp LBB1_112 + //0x00000737 LBB1_69 + 0x48, 0x29, 0xd6, //0x00000737 subq %rdx, %rsi + 0x31, 0xff, //0x0000073a xorl %edi, %edi + 0x66, 0x0f, 0x6f, 0x05, 0x4c, 0xf9, 0xff, 0xff, //0x0000073c movdqa $-1716(%rip), %xmm0 /* LCPI1_0+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000744 .p2align 4, 0x90 + //0x00000750 LBB1_70 + 0xf3, 0x0f, 0x7f, 0x04, 0x38, //0x00000750 movdqu %xmm0, (%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x10, //0x00000755 movdqu %xmm0, $16(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x20, //0x0000075b movdqu %xmm0, $32(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x30, //0x00000761 movdqu %xmm0, $48(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x40, //0x00000767 movdqu %xmm0, $64(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x50, //0x0000076d movdqu %xmm0, $80(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x60, //0x00000773 movdqu %xmm0, $96(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x70, //0x00000779 movdqu %xmm0, $112(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0x80, 0x00, 0x00, 0x00, //0x0000077f movdqu %xmm0, $128(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0x90, 0x00, 0x00, 0x00, //0x00000788 movdqu %xmm0, $144(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0xa0, 0x00, 0x00, 0x00, //0x00000791 movdqu %xmm0, $160(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0xb0, 0x00, 0x00, 0x00, //0x0000079a movdqu %xmm0, $176(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0xc0, 0x00, 0x00, 0x00, //0x000007a3 movdqu %xmm0, $192(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0xd0, 0x00, 0x00, 0x00, //0x000007ac movdqu %xmm0, $208(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0xe0, 0x00, 0x00, 0x00, //0x000007b5 movdqu %xmm0, $224(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0xf0, 0x00, 0x00, 0x00, //0x000007be movdqu %xmm0, $240(%rax,%rdi) + 0x48, 0x81, 0xc7, 0x00, 0x01, 0x00, 0x00, //0x000007c7 addq $256, %rdi + 0x48, 0x83, 0xc6, 0xf8, //0x000007ce addq $-8, %rsi + 0x0f, 0x85, 0x78, 0xff, 0xff, 0xff, //0x000007d2 jne LBB1_70 + //0x000007d8 LBB1_71 + 0x48, 0x85, 0xd2, //0x000007d8 testq %rdx, %rdx + 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x000007db je LBB1_74 + 0x48, 0x8d, 0x74, 0x07, 0x10, //0x000007e1 leaq $16(%rdi,%rax), %rsi + 0x48, 0xf7, 0xda, //0x000007e6 negq %rdx + 0x66, 0x0f, 0x6f, 0x05, 0x9f, 0xf8, 0xff, 0xff, //0x000007e9 movdqa $-1889(%rip), %xmm0 /* LCPI1_0+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000007f1 .p2align 4, 0x90 + //0x00000800 LBB1_73 + 0xf3, 0x0f, 0x7f, 0x46, 0xf0, //0x00000800 movdqu %xmm0, $-16(%rsi) + 0xf3, 0x0f, 0x7f, 0x06, //0x00000805 movdqu %xmm0, (%rsi) + 0x48, 0x83, 0xc6, 0x20, //0x00000809 addq $32, %rsi + 0x48, 0xff, 0xc2, //0x0000080d incq %rdx + 0x0f, 0x85, 0xea, 0xff, 0xff, 0xff, //0x00000810 jne LBB1_73 + //0x00000816 LBB1_74 + 0x4c, 0x39, 0xe1, //0x00000816 cmpq %r12, %rcx + 0x0f, 0x84, 0x30, 0x03, 0x00, 0x00, //0x00000819 je LBB1_112 + 0x48, 0x01, 0xc8, //0x0000081f addq %rcx, %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000822 .p2align 4, 0x90 + //0x00000830 LBB1_76 + 0xc6, 0x00, 0x30, //0x00000830 movb $48, (%rax) + 0x48, 0xff, 0xc0, //0x00000833 incq %rax + 0x48, 0x39, 0xc3, //0x00000836 cmpq %rax, %rbx + 0x0f, 0x85, 0xf1, 0xff, 0xff, 0xff, //0x00000839 jne LBB1_76 + 0xe9, 0x0b, 0x03, 0x00, 0x00, //0x0000083f jmp LBB1_112 + //0x00000844 LBB1_77 + 0x4b, 0x8d, 0x8c, 0x34, 0xf2, 0x00, 0x00, 0x00, //0x00000844 leaq $242(%r12,%r14), %rcx + 0x4c, 0x89, 0xce, //0x0000084c movq %r9, %rsi + 0x48, 0x29, 0xde, //0x0000084f subq %rbx, %rsi + 0x31, 0xdb, //0x00000852 xorl %ebx, %ebx + 0x66, 0x0f, 0x6f, 0x05, 0x34, 0xf8, 0xff, 0xff, //0x00000854 movdqa $-1996(%rip), %xmm0 /* LCPI1_0+0(%rip) */ + //0x0000085c LBB1_78 + 0xf3, 0x0f, 0x7f, 0x84, 0x19, 0x10, 0xff, 0xff, 0xff, //0x0000085c movdqu %xmm0, $-240(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x84, 0x19, 0x20, 0xff, 0xff, 0xff, //0x00000865 movdqu %xmm0, $-224(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x84, 0x19, 0x30, 0xff, 0xff, 0xff, //0x0000086e movdqu %xmm0, $-208(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x84, 0x19, 0x40, 0xff, 0xff, 0xff, //0x00000877 movdqu %xmm0, $-192(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x84, 0x19, 0x50, 0xff, 0xff, 0xff, //0x00000880 movdqu %xmm0, $-176(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x84, 0x19, 0x60, 0xff, 0xff, 0xff, //0x00000889 movdqu %xmm0, $-160(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x84, 0x19, 0x70, 0xff, 0xff, 0xff, //0x00000892 movdqu %xmm0, $-144(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x44, 0x19, 0x80, //0x0000089b movdqu %xmm0, $-128(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x44, 0x19, 0x90, //0x000008a1 movdqu %xmm0, $-112(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x44, 0x19, 0xa0, //0x000008a7 movdqu %xmm0, $-96(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x44, 0x19, 0xb0, //0x000008ad movdqu %xmm0, $-80(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x44, 0x19, 0xc0, //0x000008b3 movdqu %xmm0, $-64(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x44, 0x19, 0xd0, //0x000008b9 movdqu %xmm0, $-48(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x44, 0x19, 0xe0, //0x000008bf movdqu %xmm0, $-32(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x44, 0x19, 0xf0, //0x000008c5 movdqu %xmm0, $-16(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x04, 0x19, //0x000008cb movdqu %xmm0, (%rcx,%rbx) + 0x48, 0x81, 0xc3, 0x00, 0x01, 0x00, 0x00, //0x000008d0 addq $256, %rbx + 0x48, 0x83, 0xc6, 0x08, //0x000008d7 addq $8, %rsi + 0x0f, 0x85, 0x7b, 0xff, 0xff, 0xff, //0x000008db jne LBB1_78 + //0x000008e1 LBB1_79 + 0x4d, 0x85, 0xc9, //0x000008e1 testq %r9, %r9 + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x000008e4 je LBB1_82 + 0x4c, 0x01, 0xe3, //0x000008ea addq %r12, %rbx + 0x49, 0x8d, 0x4c, 0x1e, 0x12, //0x000008ed leaq $18(%r14,%rbx), %rcx + 0x49, 0xf7, 0xd9, //0x000008f2 negq %r9 + 0x66, 0x0f, 0x6f, 0x05, 0x93, 0xf7, 0xff, 0xff, //0x000008f5 movdqa $-2157(%rip), %xmm0 /* LCPI1_0+0(%rip) */ + //0x000008fd LBB1_81 + 0xf3, 0x0f, 0x7f, 0x41, 0xf0, //0x000008fd movdqu %xmm0, $-16(%rcx) + 0xf3, 0x0f, 0x7f, 0x01, //0x00000902 movdqu %xmm0, (%rcx) + 0x48, 0x83, 0xc1, 0x20, //0x00000906 addq $32, %rcx + 0x49, 0xff, 0xc1, //0x0000090a incq %r9 + 0x0f, 0x85, 0xea, 0xff, 0xff, 0xff, //0x0000090d jne LBB1_81 + //0x00000913 LBB1_82 + 0x49, 0x01, 0xc7, //0x00000913 addq %rax, %r15 + 0x49, 0x39, 0xc0, //0x00000916 cmpq %rax, %r8 + 0x4c, 0x89, 0xd3, //0x00000919 movq %r10, %rbx + 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x0000091c je LBB1_85 + //0x00000922 LBB1_83 + 0x44, 0x89, 0xe9, //0x00000922 movl %r13d, %ecx + 0xf7, 0xd9, //0x00000925 negl %ecx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000927 .p2align 4, 0x90 + //0x00000930 LBB1_84 + 0x41, 0xc6, 0x07, 0x30, //0x00000930 movb $48, (%r15) + 0x49, 0xff, 0xc7, //0x00000934 incq %r15 + 0xff, 0xc0, //0x00000937 incl %eax + 0x39, 0xc8, //0x00000939 cmpl %ecx, %eax + 0x0f, 0x8c, 0xef, 0xff, 0xff, 0xff, //0x0000093b jl LBB1_84 + //0x00000941 LBB1_85 + 0x4c, 0x89, 0xfe, //0x00000941 movq %r15, %rsi + 0xe8, 0xe7, 0x82, 0x00, 0x00, //0x00000944 callq _format_significand + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000949 .p2align 4, 0x90 + //0x00000950 LBB1_86 + 0x80, 0x78, 0xff, 0x30, //0x00000950 cmpb $48, $-1(%rax) + 0x48, 0x8d, 0x40, 0xff, //0x00000954 leaq $-1(%rax), %rax + 0x0f, 0x84, 0xf2, 0xff, 0xff, 0xff, //0x00000958 je LBB1_86 + 0x48, 0x8d, 0x48, 0x01, //0x0000095e leaq $1(%rax), %rcx + 0x45, 0x85, 0xed, //0x00000962 testl %r13d, %r13d + 0x0f, 0x8e, 0x83, 0x00, 0x00, 0x00, //0x00000965 jle LBB1_91 + 0x89, 0xca, //0x0000096b movl %ecx, %edx + 0x44, 0x29, 0xfa, //0x0000096d subl %r15d, %edx + 0x41, 0x39, 0xd5, //0x00000970 cmpl %edx, %r13d + 0x0f, 0x8d, 0x21, 0x00, 0x00, 0x00, //0x00000973 jge LBB1_92 + 0x43, 0x8d, 0x54, 0x3d, 0x00, //0x00000979 leal (%r13,%r15), %edx + 0x29, 0xd1, //0x0000097e subl %edx, %ecx + 0x48, 0x8d, 0x71, 0xff, //0x00000980 leaq $-1(%rcx), %rsi + 0x89, 0xca, //0x00000984 movl %ecx, %edx + 0x83, 0xe2, 0x03, //0x00000986 andl $3, %edx + 0x48, 0x83, 0xfe, 0x03, //0x00000989 cmpq $3, %rsi + 0x0f, 0x83, 0x63, 0x00, 0x00, 0x00, //0x0000098d jae LBB1_96 + 0x31, 0xc9, //0x00000993 xorl %ecx, %ecx + 0xe9, 0x7e, 0x00, 0x00, 0x00, //0x00000995 jmp LBB1_99 + //0x0000099a LBB1_92 + 0x0f, 0x8e, 0x4e, 0x00, 0x00, 0x00, //0x0000099a jle LBB1_91 + 0x48, 0x89, 0xde, //0x000009a0 movq %rbx, %rsi + 0x45, 0x01, 0xfd, //0x000009a3 addl %r15d, %r13d + 0x41, 0x89, 0xc8, //0x000009a6 movl %ecx, %r8d + 0x41, 0xf7, 0xd0, //0x000009a9 notl %r8d + 0x45, 0x01, 0xe8, //0x000009ac addl %r13d, %r8d + 0x31, 0xd2, //0x000009af xorl %edx, %edx + 0x48, 0x89, 0xcb, //0x000009b1 movq %rcx, %rbx + 0x41, 0x83, 0xf8, 0x1e, //0x000009b4 cmpl $30, %r8d + 0x0f, 0x86, 0x79, 0x01, 0x00, 0x00, //0x000009b8 jbe LBB1_110 + 0x49, 0xff, 0xc0, //0x000009be incq %r8 + 0x48, 0x89, 0xf3, //0x000009c1 movq %rsi, %rbx + 0x4c, 0x21, 0xc3, //0x000009c4 andq %r8, %rbx + 0x48, 0x8d, 0x73, 0xe0, //0x000009c7 leaq $-32(%rbx), %rsi + 0x48, 0x89, 0xf7, //0x000009cb movq %rsi, %rdi + 0x48, 0xc1, 0xef, 0x05, //0x000009ce shrq $5, %rdi + 0x48, 0xff, 0xc7, //0x000009d2 incq %rdi + 0x89, 0xfa, //0x000009d5 movl %edi, %edx + 0x83, 0xe2, 0x07, //0x000009d7 andl $7, %edx + 0x48, 0x81, 0xfe, 0xe0, 0x00, 0x00, 0x00, //0x000009da cmpq $224, %rsi + 0x0f, 0x83, 0x75, 0x00, 0x00, 0x00, //0x000009e1 jae LBB1_104 + 0x31, 0xff, //0x000009e7 xorl %edi, %edi + 0xe9, 0x07, 0x01, 0x00, 0x00, //0x000009e9 jmp LBB1_106 + //0x000009ee LBB1_91 + 0x48, 0x89, 0xcb, //0x000009ee movq %rcx, %rbx + 0xe9, 0x59, 0x01, 0x00, 0x00, //0x000009f1 jmp LBB1_112 + //0x000009f6 LBB1_96 + 0x48, 0x89, 0xd6, //0x000009f6 movq %rdx, %rsi + 0x48, 0x29, 0xce, //0x000009f9 subq %rcx, %rsi + 0x31, 0xc9, //0x000009fc xorl %ecx, %ecx + 0x90, 0x90, //0x000009fe .p2align 4, 0x90 + //0x00000a00 LBB1_97 + 0x8b, 0x7c, 0x08, 0xfd, //0x00000a00 movl $-3(%rax,%rcx), %edi + 0x89, 0x7c, 0x08, 0xfe, //0x00000a04 movl %edi, $-2(%rax,%rcx) + 0x48, 0x83, 0xc1, 0xfc, //0x00000a08 addq $-4, %rcx + 0x48, 0x39, 0xce, //0x00000a0c cmpq %rcx, %rsi + 0x0f, 0x85, 0xeb, 0xff, 0xff, 0xff, //0x00000a0f jne LBB1_97 + 0x48, 0xf7, 0xd9, //0x00000a15 negq %rcx + //0x00000a18 LBB1_99 + 0x48, 0x85, 0xd2, //0x00000a18 testq %rdx, %rdx + 0x0f, 0x84, 0x27, 0x00, 0x00, 0x00, //0x00000a1b je LBB1_102 + 0x48, 0xf7, 0xd9, //0x00000a21 negq %rcx + 0x48, 0xf7, 0xda, //0x00000a24 negq %rdx + 0x31, 0xf6, //0x00000a27 xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000a29 .p2align 4, 0x90 + //0x00000a30 LBB1_101 + 0x48, 0x8d, 0x3c, 0x31, //0x00000a30 leaq (%rcx,%rsi), %rdi + 0x0f, 0xb6, 0x1c, 0x38, //0x00000a34 movzbl (%rax,%rdi), %ebx + 0x88, 0x5c, 0x38, 0x01, //0x00000a38 movb %bl, $1(%rax,%rdi) + 0x48, 0xff, 0xce, //0x00000a3c decq %rsi + 0x48, 0x39, 0xf2, //0x00000a3f cmpq %rsi, %rdx + 0x0f, 0x85, 0xe8, 0xff, 0xff, 0xff, //0x00000a42 jne LBB1_101 + //0x00000a48 LBB1_102 + 0x49, 0x63, 0xcd, //0x00000a48 movslq %r13d, %rcx + 0x41, 0xc6, 0x04, 0x0f, 0x2e, //0x00000a4b movb $46, (%r15,%rcx) + 0x48, 0x83, 0xc0, 0x02, //0x00000a50 addq $2, %rax + 0x48, 0x89, 0xc3, //0x00000a54 movq %rax, %rbx + 0xe9, 0xf3, 0x00, 0x00, 0x00, //0x00000a57 jmp LBB1_112 + //0x00000a5c LBB1_104 + 0x48, 0x89, 0xd6, //0x00000a5c movq %rdx, %rsi + 0x48, 0x29, 0xfe, //0x00000a5f subq %rdi, %rsi + 0x31, 0xff, //0x00000a62 xorl %edi, %edi + 0x66, 0x0f, 0x6f, 0x05, 0x24, 0xf6, 0xff, 0xff, //0x00000a64 movdqa $-2524(%rip), %xmm0 /* LCPI1_0+0(%rip) */ + //0x00000a6c LBB1_105 + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x01, //0x00000a6c movdqu %xmm0, $1(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x11, //0x00000a72 movdqu %xmm0, $17(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x21, //0x00000a78 movdqu %xmm0, $33(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x31, //0x00000a7e movdqu %xmm0, $49(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x41, //0x00000a84 movdqu %xmm0, $65(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x51, //0x00000a8a movdqu %xmm0, $81(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x61, //0x00000a90 movdqu %xmm0, $97(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x44, 0x38, 0x71, //0x00000a96 movdqu %xmm0, $113(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0x81, 0x00, 0x00, 0x00, //0x00000a9c movdqu %xmm0, $129(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0x91, 0x00, 0x00, 0x00, //0x00000aa5 movdqu %xmm0, $145(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0xa1, 0x00, 0x00, 0x00, //0x00000aae movdqu %xmm0, $161(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0xb1, 0x00, 0x00, 0x00, //0x00000ab7 movdqu %xmm0, $177(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0xc1, 0x00, 0x00, 0x00, //0x00000ac0 movdqu %xmm0, $193(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0xd1, 0x00, 0x00, 0x00, //0x00000ac9 movdqu %xmm0, $209(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0xe1, 0x00, 0x00, 0x00, //0x00000ad2 movdqu %xmm0, $225(%rax,%rdi) + 0xf3, 0x0f, 0x7f, 0x84, 0x38, 0xf1, 0x00, 0x00, 0x00, //0x00000adb movdqu %xmm0, $241(%rax,%rdi) + 0x48, 0x81, 0xc7, 0x00, 0x01, 0x00, 0x00, //0x00000ae4 addq $256, %rdi + 0x48, 0x83, 0xc6, 0x08, //0x00000aeb addq $8, %rsi + 0x0f, 0x85, 0x77, 0xff, 0xff, 0xff, //0x00000aef jne LBB1_105 + //0x00000af5 LBB1_106 + 0x48, 0x89, 0xde, //0x00000af5 movq %rbx, %rsi + 0x48, 0x8d, 0x5c, 0x18, 0x01, //0x00000af8 leaq $1(%rax,%rbx), %rbx + 0x48, 0x85, 0xd2, //0x00000afd testq %rdx, %rdx + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00000b00 je LBB1_109 + 0x48, 0x8d, 0x44, 0x38, 0x11, //0x00000b06 leaq $17(%rax,%rdi), %rax + 0x48, 0xf7, 0xda, //0x00000b0b negq %rdx + 0x66, 0x0f, 0x6f, 0x05, 0x7a, 0xf5, 0xff, 0xff, //0x00000b0e movdqa $-2694(%rip), %xmm0 /* LCPI1_0+0(%rip) */ + //0x00000b16 LBB1_108 + 0xf3, 0x0f, 0x7f, 0x40, 0xf0, //0x00000b16 movdqu %xmm0, $-16(%rax) + 0xf3, 0x0f, 0x7f, 0x00, //0x00000b1b movdqu %xmm0, (%rax) + 0x48, 0x83, 0xc0, 0x20, //0x00000b1f addq $32, %rax + 0x48, 0xff, 0xc2, //0x00000b23 incq %rdx + 0x0f, 0x85, 0xea, 0xff, 0xff, 0xff, //0x00000b26 jne LBB1_108 + //0x00000b2c LBB1_109 + 0x89, 0xf2, //0x00000b2c movl %esi, %edx + 0x49, 0x39, 0xf0, //0x00000b2e cmpq %rsi, %r8 + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x00000b31 je LBB1_112 + //0x00000b37 LBB1_110 + 0x41, 0x29, 0xd5, //0x00000b37 subl %edx, %r13d + 0x41, 0x29, 0xcd, //0x00000b3a subl %ecx, %r13d + 0x90, 0x90, 0x90, //0x00000b3d .p2align 4, 0x90 + //0x00000b40 LBB1_111 + 0xc6, 0x03, 0x30, //0x00000b40 movb $48, (%rbx) + 0x48, 0xff, 0xc3, //0x00000b43 incq %rbx + 0x41, 0xff, 0xcd, //0x00000b46 decl %r13d + 0x0f, 0x85, 0xf1, 0xff, 0xff, 0xff, //0x00000b49 jne LBB1_111 + //0x00000b4f LBB1_112 + 0x44, 0x29, 0xf3, //0x00000b4f subl %r14d, %ebx + //0x00000b52 LBB1_113 + 0x89, 0xd8, //0x00000b52 movl %ebx, %eax + 0x48, 0x83, 0xc4, 0x08, //0x00000b54 addq $8, %rsp + 0x5b, //0x00000b58 popq %rbx + 0x41, 0x5c, //0x00000b59 popq %r12 + 0x41, 0x5d, //0x00000b5b popq %r13 + 0x41, 0x5e, //0x00000b5d popq %r14 + 0x41, 0x5f, //0x00000b5f popq %r15 + 0x5d, //0x00000b61 popq %rbp + 0xc3, //0x00000b62 retq + //0x00000b63 LBB1_114 + 0x31, 0xdb, //0x00000b63 xorl %ebx, %ebx + 0xe9, 0xe8, 0xff, 0xff, 0xff, //0x00000b65 jmp LBB1_113 + //0x00000b6a LBB1_115 + 0xbb, 0xce, 0xfb, 0xff, 0xff, //0x00000b6a movl $-1074, %ebx + 0x48, 0x89, 0xd7, //0x00000b6f movq %rdx, %rdi + 0xe9, 0xc2, 0xf5, 0xff, 0xff, //0x00000b72 jmp LBB1_5 + //0x00000b77 LBB1_116 + 0x48, 0x81, 0xff, 0x00, 0xca, 0x9a, 0x3b, //0x00000b77 cmpq $1000000000, %rdi + 0xba, 0x0a, 0x00, 0x00, 0x00, //0x00000b7e movl $10, %edx + 0xe9, 0x64, 0xfa, 0xff, 0xff, //0x00000b83 jmp LBB1_50 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000b88 .p2align 4, 0x90 + //0x00000b90 _format_integer + 0x55, //0x00000b90 pushq %rbp + 0x48, 0x89, 0xe5, //0x00000b91 movq %rsp, %rbp + 0x53, //0x00000b94 pushq %rbx + 0x41, 0x89, 0xd0, //0x00000b95 movl %edx, %r8d + 0x49, 0x01, 0xf0, //0x00000b98 addq %rsi, %r8 + 0x48, 0x89, 0xf8, //0x00000b9b movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x20, //0x00000b9e shrq $32, %rax + 0x0f, 0x84, 0xc3, 0x00, 0x00, 0x00, //0x00000ba2 je LBB2_1 + 0x48, 0xb9, 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x00000ba8 movabsq $-6067343680855748867, %rcx + 0x48, 0x89, 0xf8, //0x00000bb2 movq %rdi, %rax + 0x48, 0xf7, 0xe1, //0x00000bb5 mulq %rcx + 0x48, 0xc1, 0xea, 0x1a, //0x00000bb8 shrq $26, %rdx + 0x69, 0xca, 0x00, 0x1f, 0x0a, 0xfa, //0x00000bbc imull $-100000000, %edx, %ecx + 0x01, 0xf9, //0x00000bc2 addl %edi, %ecx + 0x41, 0xb9, 0x59, 0x17, 0xb7, 0xd1, //0x00000bc4 movl $3518437209, %r9d + 0x48, 0x89, 0xc8, //0x00000bca movq %rcx, %rax + 0x49, 0x0f, 0xaf, 0xc1, //0x00000bcd imulq %r9, %rax + 0x48, 0xc1, 0xe8, 0x2d, //0x00000bd1 shrq $45, %rax + 0x69, 0xf8, 0x10, 0x27, 0x00, 0x00, //0x00000bd5 imull $10000, %eax, %edi + 0x29, 0xf9, //0x00000bdb subl %edi, %ecx + 0x48, 0x89, 0xc7, //0x00000bdd movq %rax, %rdi + 0x49, 0x0f, 0xaf, 0xf9, //0x00000be0 imulq %r9, %rdi + 0x48, 0xc1, 0xef, 0x2d, //0x00000be4 shrq $45, %rdi + 0x69, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00000be8 imull $10000, %edi, %edi + 0x29, 0xf8, //0x00000bee subl %edi, %eax + 0x0f, 0xb7, 0xf9, //0x00000bf0 movzwl %cx, %edi + 0xc1, 0xef, 0x02, //0x00000bf3 shrl $2, %edi + 0x44, 0x69, 0xcf, 0x7b, 0x14, 0x00, 0x00, //0x00000bf6 imull $5243, %edi, %r9d + 0x41, 0xc1, 0xe9, 0x11, //0x00000bfd shrl $17, %r9d + 0x41, 0x6b, 0xf9, 0x64, //0x00000c01 imull $100, %r9d, %edi + 0x29, 0xf9, //0x00000c05 subl %edi, %ecx + 0x44, 0x0f, 0xb7, 0xd1, //0x00000c07 movzwl %cx, %r10d + 0x0f, 0xb7, 0xf8, //0x00000c0b movzwl %ax, %edi + 0xc1, 0xef, 0x02, //0x00000c0e shrl $2, %edi + 0x69, 0xff, 0x7b, 0x14, 0x00, 0x00, //0x00000c11 imull $5243, %edi, %edi + 0xc1, 0xef, 0x11, //0x00000c17 shrl $17, %edi + 0x6b, 0xcf, 0x64, //0x00000c1a imull $100, %edi, %ecx + 0x29, 0xc8, //0x00000c1d subl %ecx, %eax + 0x44, 0x0f, 0xb7, 0xd8, //0x00000c1f movzwl %ax, %r11d + 0x48, 0x8d, 0x0d, 0xf6, 0xb4, 0x00, 0x00, //0x00000c23 leaq $46326(%rip), %rcx /* _Digits+0(%rip) */ + 0x42, 0x0f, 0xb7, 0x04, 0x51, //0x00000c2a movzwl (%rcx,%r10,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfe, //0x00000c2f movw %ax, $-2(%r8) + 0x42, 0x0f, 0xb7, 0x04, 0x49, //0x00000c34 movzwl (%rcx,%r9,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfc, //0x00000c39 movw %ax, $-4(%r8) + 0x42, 0x0f, 0xb7, 0x04, 0x59, //0x00000c3e movzwl (%rcx,%r11,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfa, //0x00000c43 movw %ax, $-6(%r8) + 0x4d, 0x8d, 0x58, 0xf8, //0x00000c48 leaq $-8(%r8), %r11 + 0x0f, 0xb7, 0x0c, 0x79, //0x00000c4c movzwl (%rcx,%rdi,2), %ecx + 0x66, 0x41, 0x89, 0x48, 0xf8, //0x00000c50 movw %cx, $-8(%r8) + 0x48, 0x89, 0xd7, //0x00000c55 movq %rdx, %rdi + 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00000c58 cmpl $10000, %edi + 0x0f, 0x83, 0x16, 0x00, 0x00, 0x00, //0x00000c5e jae LBB2_5 + //0x00000c64 LBB2_4 + 0x89, 0xfa, //0x00000c64 movl %edi, %edx + 0xe9, 0x6d, 0x00, 0x00, 0x00, //0x00000c66 jmp LBB2_7 + //0x00000c6b LBB2_1 + 0x4d, 0x89, 0xc3, //0x00000c6b movq %r8, %r11 + 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00000c6e cmpl $10000, %edi + 0x0f, 0x82, 0xea, 0xff, 0xff, 0xff, //0x00000c74 jb LBB2_4 + //0x00000c7a LBB2_5 + 0x41, 0xb9, 0x59, 0x17, 0xb7, 0xd1, //0x00000c7a movl $3518437209, %r9d + 0x4c, 0x8d, 0x15, 0x99, 0xb4, 0x00, 0x00, //0x00000c80 leaq $46233(%rip), %r10 /* _Digits+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c87 .p2align 4, 0x90 + //0x00000c90 LBB2_6 + 0x89, 0xfa, //0x00000c90 movl %edi, %edx + 0x49, 0x0f, 0xaf, 0xd1, //0x00000c92 imulq %r9, %rdx + 0x48, 0xc1, 0xea, 0x2d, //0x00000c96 shrq $45, %rdx + 0x69, 0xca, 0xf0, 0xd8, 0xff, 0xff, //0x00000c9a imull $-10000, %edx, %ecx + 0x01, 0xf9, //0x00000ca0 addl %edi, %ecx + 0x48, 0x69, 0xc1, 0x1f, 0x85, 0xeb, 0x51, //0x00000ca2 imulq $1374389535, %rcx, %rax + 0x48, 0xc1, 0xe8, 0x25, //0x00000ca9 shrq $37, %rax + 0x6b, 0xd8, 0x64, //0x00000cad imull $100, %eax, %ebx + 0x29, 0xd9, //0x00000cb0 subl %ebx, %ecx + 0x41, 0x0f, 0xb7, 0x0c, 0x4a, //0x00000cb2 movzwl (%r10,%rcx,2), %ecx + 0x66, 0x41, 0x89, 0x4b, 0xfe, //0x00000cb7 movw %cx, $-2(%r11) + 0x41, 0x0f, 0xb7, 0x04, 0x42, //0x00000cbc movzwl (%r10,%rax,2), %eax + 0x66, 0x41, 0x89, 0x43, 0xfc, //0x00000cc1 movw %ax, $-4(%r11) + 0x49, 0x83, 0xc3, 0xfc, //0x00000cc6 addq $-4, %r11 + 0x81, 0xff, 0xff, 0xe0, 0xf5, 0x05, //0x00000cca cmpl $99999999, %edi + 0x89, 0xd7, //0x00000cd0 movl %edx, %edi + 0x0f, 0x87, 0xb8, 0xff, 0xff, 0xff, //0x00000cd2 ja LBB2_6 + //0x00000cd8 LBB2_7 + 0x83, 0xfa, 0x64, //0x00000cd8 cmpl $100, %edx + 0x0f, 0x82, 0x2d, 0x00, 0x00, 0x00, //0x00000cdb jb LBB2_9 + 0x0f, 0xb7, 0xc2, //0x00000ce1 movzwl %dx, %eax + 0xc1, 0xe8, 0x02, //0x00000ce4 shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00000ce7 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00000ced shrl $17, %eax + 0x6b, 0xc8, 0x64, //0x00000cf0 imull $100, %eax, %ecx + 0x29, 0xca, //0x00000cf3 subl %ecx, %edx + 0x0f, 0xb7, 0xca, //0x00000cf5 movzwl %dx, %ecx + 0x48, 0x8d, 0x15, 0x21, 0xb4, 0x00, 0x00, //0x00000cf8 leaq $46113(%rip), %rdx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4a, //0x00000cff movzwl (%rdx,%rcx,2), %ecx + 0x66, 0x41, 0x89, 0x4b, 0xfe, //0x00000d03 movw %cx, $-2(%r11) + 0x49, 0x83, 0xc3, 0xfe, //0x00000d08 addq $-2, %r11 + 0x89, 0xc2, //0x00000d0c movl %eax, %edx + //0x00000d0e LBB2_9 + 0x83, 0xfa, 0x0a, //0x00000d0e cmpl $10, %edx + 0x0f, 0x82, 0x18, 0x00, 0x00, 0x00, //0x00000d11 jb LBB2_11 + 0x89, 0xd0, //0x00000d17 movl %edx, %eax + 0x48, 0x8d, 0x0d, 0x00, 0xb4, 0x00, 0x00, //0x00000d19 leaq $46080(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x00000d20 movzwl (%rcx,%rax,2), %eax + 0x66, 0x41, 0x89, 0x43, 0xfe, //0x00000d24 movw %ax, $-2(%r11) + 0x4c, 0x89, 0xc0, //0x00000d29 movq %r8, %rax + 0x5b, //0x00000d2c popq %rbx + 0x5d, //0x00000d2d popq %rbp + 0xc3, //0x00000d2e retq + //0x00000d2f LBB2_11 + 0x80, 0xc2, 0x30, //0x00000d2f addb $48, %dl + 0x88, 0x16, //0x00000d32 movb %dl, (%rsi) + 0x4c, 0x89, 0xc0, //0x00000d34 movq %r8, %rax + 0x5b, //0x00000d37 popq %rbx + 0x5d, //0x00000d38 popq %rbp + 0xc3, //0x00000d39 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000d3a .p2align 4, 0x90 + //0x00000d40 _i64toa + 0x48, 0x85, 0xf6, //0x00000d40 testq %rsi, %rsi + 0x0f, 0x88, 0x05, 0x00, 0x00, 0x00, //0x00000d43 js LBB3_1 + 0xe9, 0x72, 0x00, 0x00, 0x00, //0x00000d49 jmp _u64toa + //0x00000d4e LBB3_1 + 0x55, //0x00000d4e pushq %rbp + 0x48, 0x89, 0xe5, //0x00000d4f movq %rsp, %rbp + 0xc6, 0x07, 0x2d, //0x00000d52 movb $45, (%rdi) + 0x48, 0xff, 0xc7, //0x00000d55 incq %rdi + 0x48, 0xf7, 0xde, //0x00000d58 negq %rsi + 0xe8, 0x60, 0x00, 0x00, 0x00, //0x00000d5b callq _u64toa + 0xff, 0xc0, //0x00000d60 incl %eax + 0x5d, //0x00000d62 popq %rbp + 0xc3, //0x00000d63 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00000d64 .p2align 4, 0x00 + //0x00000d70 LCPI4_0 + 0x59, 0x17, 0xb7, 0xd1, 0x00, 0x00, 0x00, 0x00, //0x00000d70 .quad 3518437209 + 0x59, 0x17, 0xb7, 0xd1, 0x00, 0x00, 0x00, 0x00, //0x00000d78 .quad 3518437209 + //0x00000d80 LCPI4_1 + 0xc5, 0x20, //0x00000d80 .word 8389 + 0x7b, 0x14, //0x00000d82 .word 5243 + 0x34, 0x33, //0x00000d84 .word 13108 + 0x00, 0x80, //0x00000d86 .word 32768 + 0xc5, 0x20, //0x00000d88 .word 8389 + 0x7b, 0x14, //0x00000d8a .word 5243 + 0x34, 0x33, //0x00000d8c .word 13108 + 0x00, 0x80, //0x00000d8e .word 32768 + //0x00000d90 LCPI4_2 + 0x80, 0x00, //0x00000d90 .word 128 + 0x00, 0x08, //0x00000d92 .word 2048 + 0x00, 0x20, //0x00000d94 .word 8192 + 0x00, 0x80, //0x00000d96 .word 32768 + 0x80, 0x00, //0x00000d98 .word 128 + 0x00, 0x08, //0x00000d9a .word 2048 + 0x00, 0x20, //0x00000d9c .word 8192 + 0x00, 0x80, //0x00000d9e .word 32768 + //0x00000da0 LCPI4_3 + 0x0a, 0x00, //0x00000da0 .word 10 + 0x0a, 0x00, //0x00000da2 .word 10 + 0x0a, 0x00, //0x00000da4 .word 10 + 0x0a, 0x00, //0x00000da6 .word 10 + 0x0a, 0x00, //0x00000da8 .word 10 + 0x0a, 0x00, //0x00000daa .word 10 + 0x0a, 0x00, //0x00000dac .word 10 + 0x0a, 0x00, //0x00000dae .word 10 + //0x00000db0 LCPI4_4 + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x00000db0 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + //0x00000dc0 .p2align 4, 0x90 + //0x00000dc0 _u64toa + 0x55, //0x00000dc0 pushq %rbp + 0x48, 0x89, 0xe5, //0x00000dc1 movq %rsp, %rbp + 0x48, 0x81, 0xfe, 0x0f, 0x27, 0x00, 0x00, //0x00000dc4 cmpq $9999, %rsi + 0x0f, 0x87, 0xa2, 0x00, 0x00, 0x00, //0x00000dcb ja LBB4_8 + 0x0f, 0xb7, 0xc6, //0x00000dd1 movzwl %si, %eax + 0xc1, 0xe8, 0x02, //0x00000dd4 shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00000dd7 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00000ddd shrl $17, %eax + 0x48, 0x8d, 0x14, 0x00, //0x00000de0 leaq (%rax,%rax), %rdx + 0x6b, 0xc0, 0x64, //0x00000de4 imull $100, %eax, %eax + 0x89, 0xf1, //0x00000de7 movl %esi, %ecx + 0x29, 0xc1, //0x00000de9 subl %eax, %ecx + 0x0f, 0xb7, 0xc1, //0x00000deb movzwl %cx, %eax + 0x48, 0x01, 0xc0, //0x00000dee addq %rax, %rax + 0x81, 0xfe, 0xe8, 0x03, 0x00, 0x00, //0x00000df1 cmpl $1000, %esi + 0x0f, 0x82, 0x16, 0x00, 0x00, 0x00, //0x00000df7 jb LBB4_3 + 0x48, 0x8d, 0x0d, 0x1c, 0xb3, 0x00, 0x00, //0x00000dfd leaq $45852(%rip), %rcx /* _Digits+0(%rip) */ + 0x8a, 0x0c, 0x0a, //0x00000e04 movb (%rdx,%rcx), %cl + 0x88, 0x0f, //0x00000e07 movb %cl, (%rdi) + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00000e09 movl $1, %ecx + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00000e0e jmp LBB4_4 + //0x00000e13 LBB4_3 + 0x31, 0xc9, //0x00000e13 xorl %ecx, %ecx + 0x83, 0xfe, 0x64, //0x00000e15 cmpl $100, %esi + 0x0f, 0x82, 0x45, 0x00, 0x00, 0x00, //0x00000e18 jb LBB4_5 + //0x00000e1e LBB4_4 + 0x0f, 0xb7, 0xd2, //0x00000e1e movzwl %dx, %edx + 0x48, 0x83, 0xca, 0x01, //0x00000e21 orq $1, %rdx + 0x48, 0x8d, 0x35, 0xf4, 0xb2, 0x00, 0x00, //0x00000e25 leaq $45812(%rip), %rsi /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x32, //0x00000e2c movb (%rdx,%rsi), %dl + 0x89, 0xce, //0x00000e2f movl %ecx, %esi + 0xff, 0xc1, //0x00000e31 incl %ecx + 0x88, 0x14, 0x37, //0x00000e33 movb %dl, (%rdi,%rsi) + //0x00000e36 LBB4_6 + 0x48, 0x8d, 0x15, 0xe3, 0xb2, 0x00, 0x00, //0x00000e36 leaq $45795(%rip), %rdx /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x10, //0x00000e3d movb (%rax,%rdx), %dl + 0x89, 0xce, //0x00000e40 movl %ecx, %esi + 0xff, 0xc1, //0x00000e42 incl %ecx + 0x88, 0x14, 0x37, //0x00000e44 movb %dl, (%rdi,%rsi) + //0x00000e47 LBB4_7 + 0x0f, 0xb7, 0xc0, //0x00000e47 movzwl %ax, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00000e4a orq $1, %rax + 0x48, 0x8d, 0x15, 0xcb, 0xb2, 0x00, 0x00, //0x00000e4e leaq $45771(%rip), %rdx /* _Digits+0(%rip) */ + 0x8a, 0x04, 0x10, //0x00000e55 movb (%rax,%rdx), %al + 0x89, 0xca, //0x00000e58 movl %ecx, %edx + 0xff, 0xc1, //0x00000e5a incl %ecx + 0x88, 0x04, 0x17, //0x00000e5c movb %al, (%rdi,%rdx) + 0x89, 0xc8, //0x00000e5f movl %ecx, %eax + 0x5d, //0x00000e61 popq %rbp + 0xc3, //0x00000e62 retq + //0x00000e63 LBB4_5 + 0x31, 0xc9, //0x00000e63 xorl %ecx, %ecx + 0x83, 0xfe, 0x0a, //0x00000e65 cmpl $10, %esi + 0x0f, 0x83, 0xc8, 0xff, 0xff, 0xff, //0x00000e68 jae LBB4_6 + 0xe9, 0xd4, 0xff, 0xff, 0xff, //0x00000e6e jmp LBB4_7 + //0x00000e73 LBB4_8 + 0x48, 0x81, 0xfe, 0xff, 0xe0, 0xf5, 0x05, //0x00000e73 cmpq $99999999, %rsi + 0x0f, 0x87, 0x1e, 0x01, 0x00, 0x00, //0x00000e7a ja LBB4_16 + 0x89, 0xf0, //0x00000e80 movl %esi, %eax + 0xba, 0x59, 0x17, 0xb7, 0xd1, //0x00000e82 movl $3518437209, %edx + 0x48, 0x0f, 0xaf, 0xd0, //0x00000e87 imulq %rax, %rdx + 0x48, 0xc1, 0xea, 0x2d, //0x00000e8b shrq $45, %rdx + 0x44, 0x69, 0xc2, 0x10, 0x27, 0x00, 0x00, //0x00000e8f imull $10000, %edx, %r8d + 0x89, 0xf1, //0x00000e96 movl %esi, %ecx + 0x44, 0x29, 0xc1, //0x00000e98 subl %r8d, %ecx + 0x4c, 0x69, 0xd0, 0x83, 0xde, 0x1b, 0x43, //0x00000e9b imulq $1125899907, %rax, %r10 + 0x49, 0xc1, 0xea, 0x31, //0x00000ea2 shrq $49, %r10 + 0x41, 0x83, 0xe2, 0xfe, //0x00000ea6 andl $-2, %r10d + 0x0f, 0xb7, 0xc2, //0x00000eaa movzwl %dx, %eax + 0xc1, 0xe8, 0x02, //0x00000ead shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00000eb0 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00000eb6 shrl $17, %eax + 0x6b, 0xc0, 0x64, //0x00000eb9 imull $100, %eax, %eax + 0x29, 0xc2, //0x00000ebc subl %eax, %edx + 0x44, 0x0f, 0xb7, 0xca, //0x00000ebe movzwl %dx, %r9d + 0x4d, 0x01, 0xc9, //0x00000ec2 addq %r9, %r9 + 0x0f, 0xb7, 0xc1, //0x00000ec5 movzwl %cx, %eax + 0xc1, 0xe8, 0x02, //0x00000ec8 shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00000ecb imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00000ed1 shrl $17, %eax + 0x4c, 0x8d, 0x04, 0x00, //0x00000ed4 leaq (%rax,%rax), %r8 + 0x6b, 0xc0, 0x64, //0x00000ed8 imull $100, %eax, %eax + 0x29, 0xc1, //0x00000edb subl %eax, %ecx + 0x44, 0x0f, 0xb7, 0xd9, //0x00000edd movzwl %cx, %r11d + 0x4d, 0x01, 0xdb, //0x00000ee1 addq %r11, %r11 + 0x81, 0xfe, 0x80, 0x96, 0x98, 0x00, //0x00000ee4 cmpl $10000000, %esi + 0x0f, 0x82, 0x17, 0x00, 0x00, 0x00, //0x00000eea jb LBB4_11 + 0x48, 0x8d, 0x05, 0x29, 0xb2, 0x00, 0x00, //0x00000ef0 leaq $45609(%rip), %rax /* _Digits+0(%rip) */ + 0x41, 0x8a, 0x04, 0x02, //0x00000ef7 movb (%r10,%rax), %al + 0x88, 0x07, //0x00000efb movb %al, (%rdi) + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00000efd movl $1, %ecx + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00000f02 jmp LBB4_12 + //0x00000f07 LBB4_11 + 0x31, 0xc9, //0x00000f07 xorl %ecx, %ecx + 0x81, 0xfe, 0x40, 0x42, 0x0f, 0x00, //0x00000f09 cmpl $1000000, %esi + 0x0f, 0x82, 0x76, 0x00, 0x00, 0x00, //0x00000f0f jb LBB4_13 + //0x00000f15 LBB4_12 + 0x44, 0x89, 0xd0, //0x00000f15 movl %r10d, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00000f18 orq $1, %rax + 0x48, 0x8d, 0x35, 0xfd, 0xb1, 0x00, 0x00, //0x00000f1c leaq $45565(%rip), %rsi /* _Digits+0(%rip) */ + 0x8a, 0x04, 0x30, //0x00000f23 movb (%rax,%rsi), %al + 0x89, 0xce, //0x00000f26 movl %ecx, %esi + 0xff, 0xc1, //0x00000f28 incl %ecx + 0x88, 0x04, 0x37, //0x00000f2a movb %al, (%rdi,%rsi) + //0x00000f2d LBB4_14 + 0x48, 0x8d, 0x05, 0xec, 0xb1, 0x00, 0x00, //0x00000f2d leaq $45548(%rip), %rax /* _Digits+0(%rip) */ + 0x41, 0x8a, 0x04, 0x01, //0x00000f34 movb (%r9,%rax), %al + 0x89, 0xce, //0x00000f38 movl %ecx, %esi + 0xff, 0xc1, //0x00000f3a incl %ecx + 0x88, 0x04, 0x37, //0x00000f3c movb %al, (%rdi,%rsi) + //0x00000f3f LBB4_15 + 0x41, 0x0f, 0xb7, 0xc1, //0x00000f3f movzwl %r9w, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00000f43 orq $1, %rax + 0x48, 0x8d, 0x35, 0xd2, 0xb1, 0x00, 0x00, //0x00000f47 leaq $45522(%rip), %rsi /* _Digits+0(%rip) */ + 0x8a, 0x04, 0x30, //0x00000f4e movb (%rax,%rsi), %al + 0x89, 0xca, //0x00000f51 movl %ecx, %edx + 0x88, 0x04, 0x3a, //0x00000f53 movb %al, (%rdx,%rdi) + 0x41, 0x8a, 0x04, 0x30, //0x00000f56 movb (%r8,%rsi), %al + 0x88, 0x44, 0x3a, 0x01, //0x00000f5a movb %al, $1(%rdx,%rdi) + 0x41, 0x0f, 0xb7, 0xc0, //0x00000f5e movzwl %r8w, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00000f62 orq $1, %rax + 0x8a, 0x04, 0x30, //0x00000f66 movb (%rax,%rsi), %al + 0x88, 0x44, 0x3a, 0x02, //0x00000f69 movb %al, $2(%rdx,%rdi) + 0x41, 0x8a, 0x04, 0x33, //0x00000f6d movb (%r11,%rsi), %al + 0x88, 0x44, 0x3a, 0x03, //0x00000f71 movb %al, $3(%rdx,%rdi) + 0x41, 0x0f, 0xb7, 0xc3, //0x00000f75 movzwl %r11w, %eax + 0x48, 0x83, 0xc8, 0x01, //0x00000f79 orq $1, %rax + 0x8a, 0x04, 0x30, //0x00000f7d movb (%rax,%rsi), %al + 0x83, 0xc1, 0x05, //0x00000f80 addl $5, %ecx + 0x88, 0x44, 0x3a, 0x04, //0x00000f83 movb %al, $4(%rdx,%rdi) + 0x89, 0xc8, //0x00000f87 movl %ecx, %eax + 0x5d, //0x00000f89 popq %rbp + 0xc3, //0x00000f8a retq + //0x00000f8b LBB4_13 + 0x31, 0xc9, //0x00000f8b xorl %ecx, %ecx + 0x81, 0xfe, 0xa0, 0x86, 0x01, 0x00, //0x00000f8d cmpl $100000, %esi + 0x0f, 0x83, 0x94, 0xff, 0xff, 0xff, //0x00000f93 jae LBB4_14 + 0xe9, 0xa1, 0xff, 0xff, 0xff, //0x00000f99 jmp LBB4_15 + //0x00000f9e LBB4_16 + 0x48, 0xb8, 0xff, 0xff, 0xc0, 0x6f, 0xf2, 0x86, 0x23, 0x00, //0x00000f9e movabsq $9999999999999999, %rax + 0x48, 0x39, 0xc6, //0x00000fa8 cmpq %rax, %rsi + 0x0f, 0x87, 0x15, 0x01, 0x00, 0x00, //0x00000fab ja LBB4_18 + 0x48, 0xb9, 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x00000fb1 movabsq $-6067343680855748867, %rcx + 0x48, 0x89, 0xf0, //0x00000fbb movq %rsi, %rax + 0x48, 0xf7, 0xe1, //0x00000fbe mulq %rcx + 0x48, 0xc1, 0xea, 0x1a, //0x00000fc1 shrq $26, %rdx + 0x69, 0xc2, 0x00, 0xe1, 0xf5, 0x05, //0x00000fc5 imull $100000000, %edx, %eax + 0x29, 0xc6, //0x00000fcb subl %eax, %esi + 0x66, 0x0f, 0x6e, 0xc2, //0x00000fcd movd %edx, %xmm0 + 0x66, 0x0f, 0x6f, 0x0d, 0x97, 0xfd, 0xff, 0xff, //0x00000fd1 movdqa $-617(%rip), %xmm1 /* LCPI4_0+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xd0, //0x00000fd9 movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0xf4, 0xd1, //0x00000fdd pmuludq %xmm1, %xmm2 + 0x66, 0x0f, 0x73, 0xd2, 0x2d, //0x00000fe1 psrlq $45, %xmm2 + 0xb8, 0x10, 0x27, 0x00, 0x00, //0x00000fe6 movl $10000, %eax + 0x66, 0x48, 0x0f, 0x6e, 0xd8, //0x00000feb movq %rax, %xmm3 + 0x66, 0x0f, 0x6f, 0xe2, //0x00000ff0 movdqa %xmm2, %xmm4 + 0x66, 0x0f, 0xf4, 0xe3, //0x00000ff4 pmuludq %xmm3, %xmm4 + 0x66, 0x0f, 0xfa, 0xc4, //0x00000ff8 psubd %xmm4, %xmm0 + 0x66, 0x0f, 0x61, 0xd0, //0x00000ffc punpcklwd %xmm0, %xmm2 + 0x66, 0x0f, 0x73, 0xf2, 0x02, //0x00001000 psllq $2, %xmm2 + 0xf2, 0x0f, 0x70, 0xc2, 0x50, //0x00001005 pshuflw $80, %xmm2, %xmm0 + 0x66, 0x0f, 0x70, 0xc0, 0x50, //0x0000100a pshufd $80, %xmm0, %xmm0 + 0x66, 0x0f, 0x6f, 0x15, 0x69, 0xfd, 0xff, 0xff, //0x0000100f movdqa $-663(%rip), %xmm2 /* LCPI4_1+0(%rip) */ + 0x66, 0x0f, 0xe4, 0xc2, //0x00001017 pmulhuw %xmm2, %xmm0 + 0x66, 0x0f, 0x6f, 0x25, 0x6d, 0xfd, 0xff, 0xff, //0x0000101b movdqa $-659(%rip), %xmm4 /* LCPI4_2+0(%rip) */ + 0x66, 0x0f, 0xe4, 0xc4, //0x00001023 pmulhuw %xmm4, %xmm0 + 0x66, 0x0f, 0x6f, 0x2d, 0x71, 0xfd, 0xff, 0xff, //0x00001027 movdqa $-655(%rip), %xmm5 /* LCPI4_3+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xf0, //0x0000102f movdqa %xmm0, %xmm6 + 0x66, 0x0f, 0xd5, 0xf5, //0x00001033 pmullw %xmm5, %xmm6 + 0x66, 0x0f, 0x73, 0xf6, 0x10, //0x00001037 psllq $16, %xmm6 + 0x66, 0x0f, 0xf9, 0xc6, //0x0000103c psubw %xmm6, %xmm0 + 0x66, 0x0f, 0x6e, 0xf6, //0x00001040 movd %esi, %xmm6 + 0x66, 0x0f, 0xf4, 0xce, //0x00001044 pmuludq %xmm6, %xmm1 + 0x66, 0x0f, 0x73, 0xd1, 0x2d, //0x00001048 psrlq $45, %xmm1 + 0x66, 0x0f, 0xf4, 0xd9, //0x0000104d pmuludq %xmm1, %xmm3 + 0x66, 0x0f, 0xfa, 0xf3, //0x00001051 psubd %xmm3, %xmm6 + 0x66, 0x0f, 0x61, 0xce, //0x00001055 punpcklwd %xmm6, %xmm1 + 0x66, 0x0f, 0x73, 0xf1, 0x02, //0x00001059 psllq $2, %xmm1 + 0xf2, 0x0f, 0x70, 0xc9, 0x50, //0x0000105e pshuflw $80, %xmm1, %xmm1 + 0x66, 0x0f, 0x70, 0xc9, 0x50, //0x00001063 pshufd $80, %xmm1, %xmm1 + 0x66, 0x0f, 0xe4, 0xca, //0x00001068 pmulhuw %xmm2, %xmm1 + 0x66, 0x0f, 0xe4, 0xcc, //0x0000106c pmulhuw %xmm4, %xmm1 + 0x66, 0x0f, 0xd5, 0xe9, //0x00001070 pmullw %xmm1, %xmm5 + 0x66, 0x0f, 0x73, 0xf5, 0x10, //0x00001074 psllq $16, %xmm5 + 0x66, 0x0f, 0xf9, 0xcd, //0x00001079 psubw %xmm5, %xmm1 + 0x66, 0x0f, 0x67, 0xc1, //0x0000107d packuswb %xmm1, %xmm0 + 0x66, 0x0f, 0x6f, 0x0d, 0x27, 0xfd, 0xff, 0xff, //0x00001081 movdqa $-729(%rip), %xmm1 /* LCPI4_4+0(%rip) */ + 0x66, 0x0f, 0xfc, 0xc8, //0x00001089 paddb %xmm0, %xmm1 + 0x66, 0x0f, 0xef, 0xd2, //0x0000108d pxor %xmm2, %xmm2 + 0x66, 0x0f, 0x74, 0xd0, //0x00001091 pcmpeqb %xmm0, %xmm2 + 0x66, 0x0f, 0xd7, 0xc2, //0x00001095 pmovmskb %xmm2, %eax + 0x0d, 0x00, 0x80, 0x00, 0x00, //0x00001099 orl $32768, %eax + 0x35, 0xff, 0x7f, 0xff, 0xff, //0x0000109e xorl $-32769, %eax + 0x0f, 0xbc, 0xc0, //0x000010a3 bsfl %eax, %eax + 0xb9, 0x10, 0x00, 0x00, 0x00, //0x000010a6 movl $16, %ecx + 0x29, 0xc1, //0x000010ab subl %eax, %ecx + 0x48, 0xc1, 0xe0, 0x04, //0x000010ad shlq $4, %rax + 0x48, 0x8d, 0x15, 0xc8, 0xd7, 0x00, 0x00, //0x000010b1 leaq $55240(%rip), %rdx /* _VecShiftShuffles+0(%rip) */ + 0x66, 0x0f, 0x38, 0x00, 0x0c, 0x10, //0x000010b8 pshufb (%rax,%rdx), %xmm1 + 0xf3, 0x0f, 0x7f, 0x0f, //0x000010be movdqu %xmm1, (%rdi) + 0x89, 0xc8, //0x000010c2 movl %ecx, %eax + 0x5d, //0x000010c4 popq %rbp + 0xc3, //0x000010c5 retq + //0x000010c6 LBB4_18 + 0x48, 0xb9, 0x57, 0x78, 0x13, 0xb1, 0x2f, 0x65, 0xa5, 0x39, //0x000010c6 movabsq $4153837486827862103, %rcx + 0x48, 0x89, 0xf0, //0x000010d0 movq %rsi, %rax + 0x48, 0xf7, 0xe1, //0x000010d3 mulq %rcx + 0x48, 0xc1, 0xea, 0x33, //0x000010d6 shrq $51, %rdx + 0x48, 0xb8, 0x00, 0x00, 0xc1, 0x6f, 0xf2, 0x86, 0x23, 0x00, //0x000010da movabsq $10000000000000000, %rax + 0x48, 0x0f, 0xaf, 0xc2, //0x000010e4 imulq %rdx, %rax + 0x48, 0x29, 0xc6, //0x000010e8 subq %rax, %rsi + 0x83, 0xfa, 0x09, //0x000010eb cmpl $9, %edx + 0x0f, 0x87, 0x0f, 0x00, 0x00, 0x00, //0x000010ee ja LBB4_20 + 0x80, 0xc2, 0x30, //0x000010f4 addb $48, %dl + 0x88, 0x17, //0x000010f7 movb %dl, (%rdi) + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x000010f9 movl $1, %ecx + 0xe9, 0xba, 0x00, 0x00, 0x00, //0x000010fe jmp LBB4_25 + //0x00001103 LBB4_20 + 0x83, 0xfa, 0x63, //0x00001103 cmpl $99, %edx + 0x0f, 0x87, 0x1f, 0x00, 0x00, 0x00, //0x00001106 ja LBB4_22 + 0x89, 0xd0, //0x0000110c movl %edx, %eax + 0x48, 0x8d, 0x0d, 0x0b, 0xb0, 0x00, 0x00, //0x0000110e leaq $45067(%rip), %rcx /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x41, //0x00001115 movb (%rcx,%rax,2), %dl + 0x8a, 0x44, 0x41, 0x01, //0x00001118 movb $1(%rcx,%rax,2), %al + 0x88, 0x17, //0x0000111c movb %dl, (%rdi) + 0x88, 0x47, 0x01, //0x0000111e movb %al, $1(%rdi) + 0xb9, 0x02, 0x00, 0x00, 0x00, //0x00001121 movl $2, %ecx + 0xe9, 0x92, 0x00, 0x00, 0x00, //0x00001126 jmp LBB4_25 + //0x0000112b LBB4_22 + 0x89, 0xd0, //0x0000112b movl %edx, %eax + 0xc1, 0xe8, 0x02, //0x0000112d shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00001130 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00001136 shrl $17, %eax + 0x81, 0xfa, 0xe7, 0x03, 0x00, 0x00, //0x00001139 cmpl $999, %edx + 0x0f, 0x87, 0x3c, 0x00, 0x00, 0x00, //0x0000113f ja LBB4_24 + 0x83, 0xc0, 0x30, //0x00001145 addl $48, %eax + 0x88, 0x07, //0x00001148 movb %al, (%rdi) + 0x0f, 0xb7, 0xc2, //0x0000114a movzwl %dx, %eax + 0x89, 0xc1, //0x0000114d movl %eax, %ecx + 0xc1, 0xe9, 0x02, //0x0000114f shrl $2, %ecx + 0x69, 0xc9, 0x7b, 0x14, 0x00, 0x00, //0x00001152 imull $5243, %ecx, %ecx + 0xc1, 0xe9, 0x11, //0x00001158 shrl $17, %ecx + 0x6b, 0xc9, 0x64, //0x0000115b imull $100, %ecx, %ecx + 0x29, 0xc8, //0x0000115e subl %ecx, %eax + 0x0f, 0xb7, 0xc0, //0x00001160 movzwl %ax, %eax + 0x48, 0x8d, 0x0d, 0xb6, 0xaf, 0x00, 0x00, //0x00001163 leaq $44982(%rip), %rcx /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x41, //0x0000116a movb (%rcx,%rax,2), %dl + 0x8a, 0x44, 0x41, 0x01, //0x0000116d movb $1(%rcx,%rax,2), %al + 0x88, 0x57, 0x01, //0x00001171 movb %dl, $1(%rdi) + 0x88, 0x47, 0x02, //0x00001174 movb %al, $2(%rdi) + 0xb9, 0x03, 0x00, 0x00, 0x00, //0x00001177 movl $3, %ecx + 0xe9, 0x3c, 0x00, 0x00, 0x00, //0x0000117c jmp LBB4_25 + //0x00001181 LBB4_24 + 0x6b, 0xc8, 0x64, //0x00001181 imull $100, %eax, %ecx + 0x29, 0xca, //0x00001184 subl %ecx, %edx + 0x0f, 0xb7, 0xc0, //0x00001186 movzwl %ax, %eax + 0x4c, 0x8d, 0x05, 0x90, 0xaf, 0x00, 0x00, //0x00001189 leaq $44944(%rip), %r8 /* _Digits+0(%rip) */ + 0x41, 0x8a, 0x0c, 0x40, //0x00001190 movb (%r8,%rax,2), %cl + 0x41, 0x8a, 0x44, 0x40, 0x01, //0x00001194 movb $1(%r8,%rax,2), %al + 0x88, 0x0f, //0x00001199 movb %cl, (%rdi) + 0x88, 0x47, 0x01, //0x0000119b movb %al, $1(%rdi) + 0x0f, 0xb7, 0xc2, //0x0000119e movzwl %dx, %eax + 0x41, 0x8a, 0x0c, 0x40, //0x000011a1 movb (%r8,%rax,2), %cl + 0x48, 0x01, 0xc0, //0x000011a5 addq %rax, %rax + 0x88, 0x4f, 0x02, //0x000011a8 movb %cl, $2(%rdi) + 0x83, 0xc8, 0x01, //0x000011ab orl $1, %eax + 0x0f, 0xb7, 0xc0, //0x000011ae movzwl %ax, %eax + 0x42, 0x8a, 0x04, 0x00, //0x000011b1 movb (%rax,%r8), %al + 0x88, 0x47, 0x03, //0x000011b5 movb %al, $3(%rdi) + 0xb9, 0x04, 0x00, 0x00, 0x00, //0x000011b8 movl $4, %ecx + //0x000011bd LBB4_25 + 0x48, 0xba, 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x000011bd movabsq $-6067343680855748867, %rdx + 0x48, 0x89, 0xf0, //0x000011c7 movq %rsi, %rax + 0x48, 0xf7, 0xe2, //0x000011ca mulq %rdx + 0x48, 0xc1, 0xea, 0x1a, //0x000011cd shrq $26, %rdx + 0x66, 0x0f, 0x6e, 0xc2, //0x000011d1 movd %edx, %xmm0 + 0x66, 0x0f, 0x6f, 0x0d, 0x93, 0xfb, 0xff, 0xff, //0x000011d5 movdqa $-1133(%rip), %xmm1 /* LCPI4_0+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xd8, //0x000011dd movdqa %xmm0, %xmm3 + 0x66, 0x0f, 0xf4, 0xd9, //0x000011e1 pmuludq %xmm1, %xmm3 + 0x66, 0x0f, 0x73, 0xd3, 0x2d, //0x000011e5 psrlq $45, %xmm3 + 0xb8, 0x10, 0x27, 0x00, 0x00, //0x000011ea movl $10000, %eax + 0x66, 0x48, 0x0f, 0x6e, 0xd0, //0x000011ef movq %rax, %xmm2 + 0x66, 0x0f, 0x6f, 0xe3, //0x000011f4 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0xf4, 0xe2, //0x000011f8 pmuludq %xmm2, %xmm4 + 0x66, 0x0f, 0xfa, 0xc4, //0x000011fc psubd %xmm4, %xmm0 + 0x66, 0x0f, 0x61, 0xd8, //0x00001200 punpcklwd %xmm0, %xmm3 + 0x66, 0x0f, 0x73, 0xf3, 0x02, //0x00001204 psllq $2, %xmm3 + 0xf2, 0x0f, 0x70, 0xc3, 0x50, //0x00001209 pshuflw $80, %xmm3, %xmm0 + 0x66, 0x0f, 0x70, 0xc0, 0x50, //0x0000120e pshufd $80, %xmm0, %xmm0 + 0x66, 0x0f, 0x6f, 0x25, 0x65, 0xfb, 0xff, 0xff, //0x00001213 movdqa $-1179(%rip), %xmm4 /* LCPI4_1+0(%rip) */ + 0x66, 0x0f, 0xe4, 0xc4, //0x0000121b pmulhuw %xmm4, %xmm0 + 0x66, 0x0f, 0x6f, 0x2d, 0x69, 0xfb, 0xff, 0xff, //0x0000121f movdqa $-1175(%rip), %xmm5 /* LCPI4_2+0(%rip) */ + 0x66, 0x0f, 0xe4, 0xc5, //0x00001227 pmulhuw %xmm5, %xmm0 + 0x66, 0x0f, 0x6f, 0x1d, 0x6d, 0xfb, 0xff, 0xff, //0x0000122b movdqa $-1171(%rip), %xmm3 /* LCPI4_3+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xf0, //0x00001233 movdqa %xmm0, %xmm6 + 0x66, 0x0f, 0xd5, 0xf3, //0x00001237 pmullw %xmm3, %xmm6 + 0x66, 0x0f, 0x73, 0xf6, 0x10, //0x0000123b psllq $16, %xmm6 + 0x66, 0x0f, 0xf9, 0xc6, //0x00001240 psubw %xmm6, %xmm0 + 0x69, 0xc2, 0x00, 0xe1, 0xf5, 0x05, //0x00001244 imull $100000000, %edx, %eax + 0x29, 0xc6, //0x0000124a subl %eax, %esi + 0x66, 0x0f, 0x6e, 0xf6, //0x0000124c movd %esi, %xmm6 + 0x66, 0x0f, 0xf4, 0xce, //0x00001250 pmuludq %xmm6, %xmm1 + 0x66, 0x0f, 0x73, 0xd1, 0x2d, //0x00001254 psrlq $45, %xmm1 + 0x66, 0x0f, 0xf4, 0xd1, //0x00001259 pmuludq %xmm1, %xmm2 + 0x66, 0x0f, 0xfa, 0xf2, //0x0000125d psubd %xmm2, %xmm6 + 0x66, 0x0f, 0x61, 0xce, //0x00001261 punpcklwd %xmm6, %xmm1 + 0x66, 0x0f, 0x73, 0xf1, 0x02, //0x00001265 psllq $2, %xmm1 + 0xf2, 0x0f, 0x70, 0xc9, 0x50, //0x0000126a pshuflw $80, %xmm1, %xmm1 + 0x66, 0x0f, 0x70, 0xc9, 0x50, //0x0000126f pshufd $80, %xmm1, %xmm1 + 0x66, 0x0f, 0xe4, 0xcc, //0x00001274 pmulhuw %xmm4, %xmm1 + 0x66, 0x0f, 0xe4, 0xcd, //0x00001278 pmulhuw %xmm5, %xmm1 + 0x66, 0x0f, 0xd5, 0xd9, //0x0000127c pmullw %xmm1, %xmm3 + 0x66, 0x0f, 0x73, 0xf3, 0x10, //0x00001280 psllq $16, %xmm3 + 0x66, 0x0f, 0xf9, 0xcb, //0x00001285 psubw %xmm3, %xmm1 + 0x66, 0x0f, 0x67, 0xc1, //0x00001289 packuswb %xmm1, %xmm0 + 0x66, 0x0f, 0xfc, 0x05, 0x1b, 0xfb, 0xff, 0xff, //0x0000128d paddb $-1253(%rip), %xmm0 /* LCPI4_4+0(%rip) */ + 0x89, 0xc8, //0x00001295 movl %ecx, %eax + 0xf3, 0x0f, 0x7f, 0x04, 0x07, //0x00001297 movdqu %xmm0, (%rdi,%rax) + 0x83, 0xc9, 0x10, //0x0000129c orl $16, %ecx + 0x89, 0xc8, //0x0000129f movl %ecx, %eax + 0x5d, //0x000012a1 popq %rbp + 0xc3, //0x000012a2 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000012a3 .p2align 4, 0x00 + //0x000012b0 LCPI5_0 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x000012b0 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x000012c0 LCPI5_1 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x000012c0 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x000012d0 LCPI5_2 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000012d0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x000012e0 .p2align 4, 0x90 + //0x000012e0 _quote + 0x55, //0x000012e0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000012e1 movq %rsp, %rbp + 0x41, 0x57, //0x000012e4 pushq %r15 + 0x41, 0x56, //0x000012e6 pushq %r14 + 0x41, 0x55, //0x000012e8 pushq %r13 + 0x41, 0x54, //0x000012ea pushq %r12 + 0x53, //0x000012ec pushq %rbx + 0x48, 0x83, 0xec, 0x10, //0x000012ed subq $16, %rsp + 0x49, 0x89, 0xcb, //0x000012f1 movq %rcx, %r11 + 0x49, 0x89, 0xd4, //0x000012f4 movq %rdx, %r12 + 0x48, 0x89, 0xf0, //0x000012f7 movq %rsi, %rax + 0x4c, 0x8b, 0x31, //0x000012fa movq (%rcx), %r14 + 0x41, 0xf6, 0xc0, 0x01, //0x000012fd testb $1, %r8b + 0x48, 0x8d, 0x0d, 0x08, 0xd6, 0x00, 0x00, //0x00001301 leaq $54792(%rip), %rcx /* __SingleQuoteTab+0(%rip) */ + 0x4c, 0x8d, 0x05, 0x01, 0xe6, 0x00, 0x00, //0x00001308 leaq $58881(%rip), %r8 /* __DoubleQuoteTab+0(%rip) */ + 0x4c, 0x0f, 0x44, 0xc1, //0x0000130f cmoveq %rcx, %r8 + 0x48, 0x8d, 0x0c, 0xf5, 0x00, 0x00, 0x00, 0x00, //0x00001313 leaq (,%rsi,8), %rcx + 0x49, 0x39, 0xce, //0x0000131b cmpq %rcx, %r14 + 0x0f, 0x8d, 0xee, 0x03, 0x00, 0x00, //0x0000131e jge LBB5_51 + 0x4d, 0x89, 0xe7, //0x00001324 movq %r12, %r15 + 0x49, 0x89, 0xfa, //0x00001327 movq %rdi, %r10 + 0x48, 0x85, 0xc0, //0x0000132a testq %rax, %rax + 0x0f, 0x84, 0xd1, 0x03, 0x00, 0x00, //0x0000132d je LBB5_74 + 0x66, 0x0f, 0x6f, 0x05, 0x75, 0xff, 0xff, 0xff, //0x00001333 movdqa $-139(%rip), %xmm0 /* LCPI5_0+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x0d, 0x7d, 0xff, 0xff, 0xff, //0x0000133b movdqa $-131(%rip), %xmm1 /* LCPI5_1+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x15, 0x85, 0xff, 0xff, 0xff, //0x00001343 movdqa $-123(%rip), %xmm2 /* LCPI5_2+0(%rip) */ + 0x66, 0x0f, 0x76, 0xdb, //0x0000134b pcmpeqd %xmm3, %xmm3 + 0x49, 0x89, 0xfa, //0x0000134f movq %rdi, %r10 + 0x4d, 0x89, 0xe7, //0x00001352 movq %r12, %r15 + 0x4c, 0x89, 0x65, 0xc8, //0x00001355 movq %r12, $-56(%rbp) + //0x00001359 LBB5_3 + 0x48, 0x83, 0xf8, 0x0f, //0x00001359 cmpq $15, %rax + 0x0f, 0x9f, 0xc3, //0x0000135d setg %bl + 0x4d, 0x89, 0xf1, //0x00001360 movq %r14, %r9 + 0x4d, 0x89, 0xfd, //0x00001363 movq %r15, %r13 + 0x48, 0x89, 0xc6, //0x00001366 movq %rax, %rsi + 0x4d, 0x89, 0xd4, //0x00001369 movq %r10, %r12 + 0x49, 0x83, 0xfe, 0x10, //0x0000136c cmpq $16, %r14 + 0x0f, 0x8c, 0x8a, 0x00, 0x00, 0x00, //0x00001370 jl LBB5_9 + 0x48, 0x83, 0xf8, 0x10, //0x00001376 cmpq $16, %rax + 0x0f, 0x8c, 0x80, 0x00, 0x00, 0x00, //0x0000137a jl LBB5_9 + 0x4d, 0x89, 0xd4, //0x00001380 movq %r10, %r12 + 0x48, 0x89, 0xc6, //0x00001383 movq %rax, %rsi + 0x4d, 0x89, 0xfd, //0x00001386 movq %r15, %r13 + 0x4c, 0x89, 0xf1, //0x00001389 movq %r14, %rcx + 0x90, 0x90, 0x90, 0x90, //0x0000138c .p2align 4, 0x90 + //0x00001390 LBB5_6 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x00001390 movdqu (%r12), %xmm4 + 0x66, 0x0f, 0x6f, 0xe8, //0x00001396 movdqa %xmm0, %xmm5 + 0x66, 0x0f, 0x64, 0xec, //0x0000139a pcmpgtb %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xf4, //0x0000139e movdqa %xmm4, %xmm6 + 0x66, 0x0f, 0x74, 0xf1, //0x000013a2 pcmpeqb %xmm1, %xmm6 + 0x66, 0x0f, 0x6f, 0xfc, //0x000013a6 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xfa, //0x000013aa pcmpeqb %xmm2, %xmm7 + 0x66, 0x0f, 0xeb, 0xfe, //0x000013ae por %xmm6, %xmm7 + 0xf3, 0x41, 0x0f, 0x7f, 0x65, 0x00, //0x000013b2 movdqu %xmm4, (%r13) + 0x66, 0x0f, 0x64, 0xe3, //0x000013b8 pcmpgtb %xmm3, %xmm4 + 0x66, 0x0f, 0xdb, 0xe5, //0x000013bc pand %xmm5, %xmm4 + 0x66, 0x0f, 0xeb, 0xe7, //0x000013c0 por %xmm7, %xmm4 + 0x66, 0x0f, 0xd7, 0xdc, //0x000013c4 pmovmskb %xmm4, %ebx + 0x66, 0x85, 0xdb, //0x000013c8 testw %bx, %bx + 0x0f, 0x85, 0x24, 0x01, 0x00, 0x00, //0x000013cb jne LBB5_19 + 0x49, 0x83, 0xc4, 0x10, //0x000013d1 addq $16, %r12 + 0x49, 0x83, 0xc5, 0x10, //0x000013d5 addq $16, %r13 + 0x4c, 0x8d, 0x49, 0xf0, //0x000013d9 leaq $-16(%rcx), %r9 + 0x48, 0x83, 0xfe, 0x1f, //0x000013dd cmpq $31, %rsi + 0x0f, 0x9f, 0xc3, //0x000013e1 setg %bl + 0x48, 0x83, 0xfe, 0x20, //0x000013e4 cmpq $32, %rsi + 0x48, 0x8d, 0x76, 0xf0, //0x000013e8 leaq $-16(%rsi), %rsi + 0x0f, 0x8c, 0x0e, 0x00, 0x00, 0x00, //0x000013ec jl LBB5_9 + 0x48, 0x83, 0xf9, 0x1f, //0x000013f2 cmpq $31, %rcx + 0x4c, 0x89, 0xc9, //0x000013f6 movq %r9, %rcx + 0x0f, 0x8f, 0x91, 0xff, 0xff, 0xff, //0x000013f9 jg LBB5_6 + 0x90, //0x000013ff .p2align 4, 0x90 + //0x00001400 LBB5_9 + 0x84, 0xdb, //0x00001400 testb %bl, %bl + 0x0f, 0x84, 0x78, 0x00, 0x00, 0x00, //0x00001402 je LBB5_13 + 0x4c, 0x89, 0x5d, 0xd0, //0x00001408 movq %r11, $-48(%rbp) + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x0000140c movdqu (%r12), %xmm4 + 0x66, 0x0f, 0x6f, 0xe8, //0x00001412 movdqa %xmm0, %xmm5 + 0x66, 0x0f, 0x64, 0xec, //0x00001416 pcmpgtb %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xf4, //0x0000141a movdqa %xmm4, %xmm6 + 0x66, 0x0f, 0x74, 0xf1, //0x0000141e pcmpeqb %xmm1, %xmm6 + 0x66, 0x0f, 0x6f, 0xfc, //0x00001422 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xfa, //0x00001426 pcmpeqb %xmm2, %xmm7 + 0x66, 0x0f, 0xeb, 0xfe, //0x0000142a por %xmm6, %xmm7 + 0x66, 0x48, 0x0f, 0x7e, 0xe1, //0x0000142e movq %xmm4, %rcx + 0x66, 0x0f, 0x64, 0xe3, //0x00001433 pcmpgtb %xmm3, %xmm4 + 0x66, 0x0f, 0xdb, 0xe5, //0x00001437 pand %xmm5, %xmm4 + 0x66, 0x0f, 0xeb, 0xe7, //0x0000143b por %xmm7, %xmm4 + 0x66, 0x0f, 0xd7, 0xf4, //0x0000143f pmovmskb %xmm4, %esi + 0x81, 0xce, 0x00, 0x00, 0x01, 0x00, //0x00001443 orl $65536, %esi + 0x44, 0x0f, 0xbc, 0xde, //0x00001449 bsfl %esi, %r11d + 0x4d, 0x39, 0xd9, //0x0000144d cmpq %r11, %r9 + 0x0f, 0x8d, 0xb1, 0x00, 0x00, 0x00, //0x00001450 jge LBB5_20 + 0x49, 0x83, 0xf9, 0x08, //0x00001456 cmpq $8, %r9 + 0x0f, 0x82, 0xdc, 0x00, 0x00, 0x00, //0x0000145a jb LBB5_23 + 0x49, 0x89, 0x4d, 0x00, //0x00001460 movq %rcx, (%r13) + 0x4d, 0x8d, 0x5c, 0x24, 0x08, //0x00001464 leaq $8(%r12), %r11 + 0x49, 0x83, 0xc5, 0x08, //0x00001469 addq $8, %r13 + 0x49, 0x8d, 0x71, 0xf8, //0x0000146d leaq $-8(%r9), %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00001471 cmpq $4, %rsi + 0x0f, 0x8d, 0xd1, 0x00, 0x00, 0x00, //0x00001475 jge LBB5_24 + 0xe9, 0xdf, 0x00, 0x00, 0x00, //0x0000147b jmp LBB5_25 + //0x00001480 LBB5_13 + 0x4d, 0x85, 0xc9, //0x00001480 testq %r9, %r9 + 0x0f, 0x8e, 0x5b, 0x00, 0x00, 0x00, //0x00001483 jle LBB5_18 + 0x48, 0x85, 0xf6, //0x00001489 testq %rsi, %rsi + 0x0f, 0x8e, 0x52, 0x00, 0x00, 0x00, //0x0000148c jle LBB5_18 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001492 .p2align 4, 0x90 + //0x000014a0 LBB5_15 + 0x41, 0x0f, 0xb6, 0x1c, 0x24, //0x000014a0 movzbl (%r12), %ebx + 0x48, 0x89, 0xd9, //0x000014a5 movq %rbx, %rcx + 0x48, 0xc1, 0xe1, 0x04, //0x000014a8 shlq $4, %rcx + 0x48, 0x8d, 0x15, 0x5d, 0xd4, 0x00, 0x00, //0x000014ac leaq $54365(%rip), %rdx /* __SingleQuoteTab+0(%rip) */ + 0x48, 0x83, 0x3c, 0x11, 0x00, //0x000014b3 cmpq $0, (%rcx,%rdx) + 0x0f, 0x85, 0x73, 0x00, 0x00, 0x00, //0x000014b8 jne LBB5_22 + 0x49, 0xff, 0xc4, //0x000014be incq %r12 + 0x41, 0x88, 0x5d, 0x00, //0x000014c1 movb %bl, (%r13) + 0x48, 0x83, 0xfe, 0x02, //0x000014c5 cmpq $2, %rsi + 0x48, 0x8d, 0x76, 0xff, //0x000014c9 leaq $-1(%rsi), %rsi + 0x0f, 0x8c, 0x11, 0x00, 0x00, 0x00, //0x000014cd jl LBB5_18 + 0x49, 0xff, 0xc5, //0x000014d3 incq %r13 + 0x49, 0x83, 0xf9, 0x01, //0x000014d6 cmpq $1, %r9 + 0x4d, 0x8d, 0x49, 0xff, //0x000014da leaq $-1(%r9), %r9 + 0x0f, 0x8f, 0xbc, 0xff, 0xff, 0xff, //0x000014de jg LBB5_15 + //0x000014e4 LBB5_18 + 0x4d, 0x29, 0xd4, //0x000014e4 subq %r10, %r12 + 0x48, 0xf7, 0xde, //0x000014e7 negq %rsi + 0x4d, 0x19, 0xc9, //0x000014ea sbbq %r9, %r9 + 0x4d, 0x31, 0xe1, //0x000014ed xorq %r12, %r9 + 0xe9, 0x1f, 0x01, 0x00, 0x00, //0x000014f0 jmp LBB5_36 + //0x000014f5 LBB5_19 + 0x0f, 0xb7, 0xcb, //0x000014f5 movzwl %bx, %ecx + 0x4d, 0x29, 0xd4, //0x000014f8 subq %r10, %r12 + 0x44, 0x0f, 0xbc, 0xc9, //0x000014fb bsfl %ecx, %r9d + 0x4d, 0x01, 0xe1, //0x000014ff addq %r12, %r9 + 0xe9, 0x0d, 0x01, 0x00, 0x00, //0x00001502 jmp LBB5_36 + //0x00001507 LBB5_20 + 0x41, 0x83, 0xfb, 0x08, //0x00001507 cmpl $8, %r11d + 0x0f, 0x82, 0x99, 0x00, 0x00, 0x00, //0x0000150b jb LBB5_29 + 0x49, 0x89, 0x4d, 0x00, //0x00001511 movq %rcx, (%r13) + 0x49, 0x8d, 0x5c, 0x24, 0x08, //0x00001515 leaq $8(%r12), %rbx + 0x49, 0x83, 0xc5, 0x08, //0x0000151a addq $8, %r13 + 0x49, 0x8d, 0x73, 0xf8, //0x0000151e leaq $-8(%r11), %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00001522 cmpq $4, %rsi + 0x0f, 0x8d, 0x8e, 0x00, 0x00, 0x00, //0x00001526 jge LBB5_30 + 0xe9, 0x9b, 0x00, 0x00, 0x00, //0x0000152c jmp LBB5_31 + //0x00001531 LBB5_22 + 0x4d, 0x29, 0xd4, //0x00001531 subq %r10, %r12 + 0x4d, 0x89, 0xe1, //0x00001534 movq %r12, %r9 + 0xe9, 0xd8, 0x00, 0x00, 0x00, //0x00001537 jmp LBB5_36 + //0x0000153c LBB5_23 + 0x4d, 0x89, 0xe3, //0x0000153c movq %r12, %r11 + 0x4c, 0x89, 0xce, //0x0000153f movq %r9, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00001542 cmpq $4, %rsi + 0x0f, 0x8c, 0x13, 0x00, 0x00, 0x00, //0x00001546 jl LBB5_25 + //0x0000154c LBB5_24 + 0x41, 0x8b, 0x0b, //0x0000154c movl (%r11), %ecx + 0x41, 0x89, 0x4d, 0x00, //0x0000154f movl %ecx, (%r13) + 0x49, 0x83, 0xc3, 0x04, //0x00001553 addq $4, %r11 + 0x49, 0x83, 0xc5, 0x04, //0x00001557 addq $4, %r13 + 0x48, 0x83, 0xc6, 0xfc, //0x0000155b addq $-4, %rsi + //0x0000155f LBB5_25 + 0x48, 0x83, 0xfe, 0x02, //0x0000155f cmpq $2, %rsi + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x00001563 jb LBB5_26 + 0x41, 0x0f, 0xb7, 0x0b, //0x00001569 movzwl (%r11), %ecx + 0x66, 0x41, 0x89, 0x4d, 0x00, //0x0000156d movw %cx, (%r13) + 0x49, 0x83, 0xc3, 0x02, //0x00001572 addq $2, %r11 + 0x49, 0x83, 0xc5, 0x02, //0x00001576 addq $2, %r13 + 0x48, 0x83, 0xc6, 0xfe, //0x0000157a addq $-2, %rsi + 0x48, 0x85, 0xf6, //0x0000157e testq %rsi, %rsi + 0x0f, 0x85, 0x0e, 0x00, 0x00, 0x00, //0x00001581 jne LBB5_27 + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00001587 jmp LBB5_28 + //0x0000158c LBB5_26 + 0x48, 0x85, 0xf6, //0x0000158c testq %rsi, %rsi + 0x0f, 0x84, 0x07, 0x00, 0x00, 0x00, //0x0000158f je LBB5_28 + //0x00001595 LBB5_27 + 0x41, 0x8a, 0x0b, //0x00001595 movb (%r11), %cl + 0x41, 0x88, 0x4d, 0x00, //0x00001598 movb %cl, (%r13) + //0x0000159c LBB5_28 + 0x4d, 0x29, 0xd1, //0x0000159c subq %r10, %r9 + 0x4d, 0x01, 0xe1, //0x0000159f addq %r12, %r9 + 0x49, 0xf7, 0xd1, //0x000015a2 notq %r9 + 0xe9, 0x66, 0x00, 0x00, 0x00, //0x000015a5 jmp LBB5_35 + //0x000015aa LBB5_29 + 0x4c, 0x89, 0xe3, //0x000015aa movq %r12, %rbx + 0x4c, 0x89, 0xde, //0x000015ad movq %r11, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x000015b0 cmpq $4, %rsi + 0x0f, 0x8c, 0x12, 0x00, 0x00, 0x00, //0x000015b4 jl LBB5_31 + //0x000015ba LBB5_30 + 0x8b, 0x0b, //0x000015ba movl (%rbx), %ecx + 0x41, 0x89, 0x4d, 0x00, //0x000015bc movl %ecx, (%r13) + 0x48, 0x83, 0xc3, 0x04, //0x000015c0 addq $4, %rbx + 0x49, 0x83, 0xc5, 0x04, //0x000015c4 addq $4, %r13 + 0x48, 0x83, 0xc6, 0xfc, //0x000015c8 addq $-4, %rsi + //0x000015cc LBB5_31 + 0x48, 0x83, 0xfe, 0x02, //0x000015cc cmpq $2, %rsi + 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x000015d0 jb LBB5_32 + 0x0f, 0xb7, 0x0b, //0x000015d6 movzwl (%rbx), %ecx + 0x66, 0x41, 0x89, 0x4d, 0x00, //0x000015d9 movw %cx, (%r13) + 0x48, 0x83, 0xc3, 0x02, //0x000015de addq $2, %rbx + 0x49, 0x83, 0xc5, 0x02, //0x000015e2 addq $2, %r13 + 0x48, 0x83, 0xc6, 0xfe, //0x000015e6 addq $-2, %rsi + 0x48, 0x85, 0xf6, //0x000015ea testq %rsi, %rsi + 0x0f, 0x85, 0x0e, 0x00, 0x00, 0x00, //0x000015ed jne LBB5_33 + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x000015f3 jmp LBB5_34 + //0x000015f8 LBB5_32 + 0x48, 0x85, 0xf6, //0x000015f8 testq %rsi, %rsi + 0x0f, 0x84, 0x06, 0x00, 0x00, 0x00, //0x000015fb je LBB5_34 + //0x00001601 LBB5_33 + 0x8a, 0x0b, //0x00001601 movb (%rbx), %cl + 0x41, 0x88, 0x4d, 0x00, //0x00001603 movb %cl, (%r13) + //0x00001607 LBB5_34 + 0x4d, 0x29, 0xd4, //0x00001607 subq %r10, %r12 + 0x4d, 0x01, 0xdc, //0x0000160a addq %r11, %r12 + 0x4d, 0x89, 0xe1, //0x0000160d movq %r12, %r9 + //0x00001610 LBB5_35 + 0x4c, 0x8b, 0x5d, 0xd0, //0x00001610 movq $-48(%rbp), %r11 + //0x00001614 LBB5_36 + 0x4d, 0x85, 0xc9, //0x00001614 testq %r9, %r9 + 0x4c, 0x8b, 0x65, 0xc8, //0x00001617 movq $-56(%rbp), %r12 + 0x49, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, //0x0000161b movabsq $12884901889, %r13 + 0x0f, 0x88, 0x55, 0x03, 0x00, 0x00, //0x00001625 js LBB5_78 + 0x4d, 0x01, 0xca, //0x0000162b addq %r9, %r10 + 0x4d, 0x01, 0xcf, //0x0000162e addq %r9, %r15 + 0x4c, 0x39, 0xc8, //0x00001631 cmpq %r9, %rax + 0x0f, 0x84, 0xca, 0x00, 0x00, 0x00, //0x00001634 je LBB5_74 + 0x4d, 0x29, 0xce, //0x0000163a subq %r9, %r14 + 0x49, 0x29, 0xc1, //0x0000163d subq %rax, %r9 + 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x00001640 jmp LBB5_40 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001645 .p2align 4, 0x90 + //0x00001650 LBB5_39 + 0x49, 0xff, 0xc2, //0x00001650 incq %r10 + 0x49, 0x01, 0xc7, //0x00001653 addq %rax, %r15 + 0x49, 0xff, 0xc1, //0x00001656 incq %r9 + 0x0f, 0x84, 0xa5, 0x00, 0x00, 0x00, //0x00001659 je LBB5_74 + //0x0000165f LBB5_40 + 0x41, 0x0f, 0xb6, 0x32, //0x0000165f movzbl (%r10), %esi + 0x48, 0xc1, 0xe6, 0x04, //0x00001663 shlq $4, %rsi + 0x49, 0x8b, 0x1c, 0x30, //0x00001667 movq (%r8,%rsi), %rbx + 0x85, 0xdb, //0x0000166b testl %ebx, %ebx + 0x0f, 0x84, 0x82, 0x00, 0x00, 0x00, //0x0000166d je LBB5_48 + 0x48, 0x63, 0xc3, //0x00001673 movslq %ebx, %rax + 0x49, 0x29, 0xc6, //0x00001676 subq %rax, %r14 + 0x0f, 0x8c, 0xe3, 0x02, 0x00, 0x00, //0x00001679 jl LBB5_75 + 0x48, 0xc1, 0xe3, 0x20, //0x0000167f shlq $32, %rbx + 0x49, 0x8d, 0x4c, 0x30, 0x08, //0x00001683 leaq $8(%r8,%rsi), %rcx + 0x4c, 0x39, 0xeb, //0x00001688 cmpq %r13, %rbx + 0x0f, 0x8c, 0x2f, 0x00, 0x00, 0x00, //0x0000168b jl LBB5_44 + 0x8b, 0x09, //0x00001691 movl (%rcx), %ecx + 0x41, 0x89, 0x0f, //0x00001693 movl %ecx, (%r15) + 0x49, 0x8d, 0x4c, 0x30, 0x0c, //0x00001696 leaq $12(%r8,%rsi), %rcx + 0x49, 0x8d, 0x77, 0x04, //0x0000169b leaq $4(%r15), %rsi + 0x48, 0x8d, 0x58, 0xfc, //0x0000169f leaq $-4(%rax), %rbx + 0x48, 0x83, 0xfb, 0x02, //0x000016a3 cmpq $2, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000016a7 jae LBB5_45 + 0xe9, 0x30, 0x00, 0x00, 0x00, //0x000016ad jmp LBB5_46 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000016b2 .p2align 4, 0x90 + //0x000016c0 LBB5_44 + 0x4c, 0x89, 0xfe, //0x000016c0 movq %r15, %rsi + 0x48, 0x89, 0xc3, //0x000016c3 movq %rax, %rbx + 0x48, 0x83, 0xfb, 0x02, //0x000016c6 cmpq $2, %rbx + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x000016ca jb LBB5_46 + //0x000016d0 LBB5_45 + 0x0f, 0xb7, 0x11, //0x000016d0 movzwl (%rcx), %edx + 0x66, 0x89, 0x16, //0x000016d3 movw %dx, (%rsi) + 0x48, 0x83, 0xc1, 0x02, //0x000016d6 addq $2, %rcx + 0x48, 0x83, 0xc6, 0x02, //0x000016da addq $2, %rsi + 0x48, 0x83, 0xc3, 0xfe, //0x000016de addq $-2, %rbx + //0x000016e2 LBB5_46 + 0x48, 0x85, 0xdb, //0x000016e2 testq %rbx, %rbx + 0x0f, 0x84, 0x65, 0xff, 0xff, 0xff, //0x000016e5 je LBB5_39 + 0x0f, 0xb6, 0x09, //0x000016eb movzbl (%rcx), %ecx + 0x88, 0x0e, //0x000016ee movb %cl, (%rsi) + 0xe9, 0x5b, 0xff, 0xff, 0xff, //0x000016f0 jmp LBB5_39 + //0x000016f5 LBB5_48 + 0x4c, 0x89, 0xc8, //0x000016f5 movq %r9, %rax + 0x48, 0xf7, 0xd8, //0x000016f8 negq %rax + 0x4d, 0x85, 0xc9, //0x000016fb testq %r9, %r9 + 0x0f, 0x85, 0x55, 0xfc, 0xff, 0xff, //0x000016fe jne LBB5_3 + //0x00001704 LBB5_74 + 0x4d, 0x29, 0xe7, //0x00001704 subq %r12, %r15 + 0x4d, 0x89, 0x3b, //0x00001707 movq %r15, (%r11) + 0x49, 0x29, 0xfa, //0x0000170a subq %rdi, %r10 + 0xe9, 0x5c, 0x02, 0x00, 0x00, //0x0000170d jmp LBB5_76 + //0x00001712 LBB5_51 + 0x4c, 0x8d, 0x0d, 0xf7, 0xf1, 0x00, 0x00, //0x00001712 leaq $61943(%rip), %r9 /* __EscTab+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x05, 0x8f, 0xfb, 0xff, 0xff, //0x00001719 movdqa $-1137(%rip), %xmm0 /* LCPI5_0+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x0d, 0x97, 0xfb, 0xff, 0xff, //0x00001721 movdqa $-1129(%rip), %xmm1 /* LCPI5_1+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x15, 0x9f, 0xfb, 0xff, 0xff, //0x00001729 movdqa $-1121(%rip), %xmm2 /* LCPI5_2+0(%rip) */ + 0x66, 0x0f, 0x76, 0xdb, //0x00001731 pcmpeqd %xmm3, %xmm3 + 0x4c, 0x89, 0xe3, //0x00001735 movq %r12, %rbx + 0x49, 0x89, 0xc2, //0x00001738 movq %rax, %r10 + //0x0000173b LBB5_52 + 0x49, 0x83, 0xfa, 0x10, //0x0000173b cmpq $16, %r10 + 0x0f, 0x8c, 0x6a, 0x00, 0x00, 0x00, //0x0000173f jl LBB5_57 + 0xb9, 0x10, 0x00, 0x00, 0x00, //0x00001745 movl $16, %ecx + 0x31, 0xf6, //0x0000174a xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, //0x0000174c .p2align 4, 0x90 + //0x00001750 LBB5_54 + 0xf3, 0x0f, 0x6f, 0x24, 0x37, //0x00001750 movdqu (%rdi,%rsi), %xmm4 + 0x66, 0x0f, 0x6f, 0xe8, //0x00001755 movdqa %xmm0, %xmm5 + 0x66, 0x0f, 0x64, 0xec, //0x00001759 pcmpgtb %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xf4, //0x0000175d movdqa %xmm4, %xmm6 + 0x66, 0x0f, 0x74, 0xf1, //0x00001761 pcmpeqb %xmm1, %xmm6 + 0x66, 0x0f, 0x6f, 0xfc, //0x00001765 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xfa, //0x00001769 pcmpeqb %xmm2, %xmm7 + 0x66, 0x0f, 0xeb, 0xfe, //0x0000176d por %xmm6, %xmm7 + 0xf3, 0x0f, 0x7f, 0x24, 0x33, //0x00001771 movdqu %xmm4, (%rbx,%rsi) + 0x66, 0x0f, 0x64, 0xe3, //0x00001776 pcmpgtb %xmm3, %xmm4 + 0x66, 0x0f, 0xdb, 0xe5, //0x0000177a pand %xmm5, %xmm4 + 0x66, 0x0f, 0xeb, 0xe7, //0x0000177e por %xmm7, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x00001782 pmovmskb %xmm4, %edx + 0x66, 0x85, 0xd2, //0x00001786 testw %dx, %dx + 0x0f, 0x85, 0x3a, 0x01, 0x00, 0x00, //0x00001789 jne LBB5_67 + 0x48, 0x83, 0xc6, 0x10, //0x0000178f addq $16, %rsi + 0x49, 0x8d, 0x54, 0x0a, 0xf0, //0x00001793 leaq $-16(%r10,%rcx), %rdx + 0x48, 0x83, 0xc1, 0xf0, //0x00001798 addq $-16, %rcx + 0x48, 0x83, 0xfa, 0x1f, //0x0000179c cmpq $31, %rdx + 0x0f, 0x8f, 0xaa, 0xff, 0xff, 0xff, //0x000017a0 jg LBB5_54 + 0x48, 0x01, 0xf7, //0x000017a6 addq %rsi, %rdi + 0x49, 0x29, 0xf2, //0x000017a9 subq %rsi, %r10 + 0x48, 0x01, 0xf3, //0x000017ac addq %rsi, %rbx + //0x000017af LBB5_57 + 0x49, 0x83, 0xfa, 0x08, //0x000017af cmpq $8, %r10 + 0x0f, 0x8c, 0x85, 0x00, 0x00, 0x00, //0x000017b3 jl LBB5_61 + 0x0f, 0xb6, 0x0f, //0x000017b9 movzbl (%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x000017bc movzbl (%rcx,%r9), %ecx + 0x0f, 0xb6, 0x57, 0x01, //0x000017c1 movzbl $1(%rdi), %edx + 0x42, 0x0f, 0xb6, 0x14, 0x0a, //0x000017c5 movzbl (%rdx,%r9), %edx + 0x01, 0xd2, //0x000017ca addl %edx, %edx + 0x09, 0xca, //0x000017cc orl %ecx, %edx + 0x0f, 0xb6, 0x4f, 0x02, //0x000017ce movzbl $2(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x34, 0x09, //0x000017d2 movzbl (%rcx,%r9), %esi + 0xc1, 0xe6, 0x02, //0x000017d7 shll $2, %esi + 0x0f, 0xb6, 0x4f, 0x03, //0x000017da movzbl $3(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x000017de movzbl (%rcx,%r9), %ecx + 0xc1, 0xe1, 0x03, //0x000017e3 shll $3, %ecx + 0x09, 0xf1, //0x000017e6 orl %esi, %ecx + 0x09, 0xd1, //0x000017e8 orl %edx, %ecx + 0x48, 0x8b, 0x17, //0x000017ea movq (%rdi), %rdx + 0x48, 0x89, 0x13, //0x000017ed movq %rdx, (%rbx) + 0x84, 0xc9, //0x000017f0 testb %cl, %cl + 0x0f, 0x85, 0x35, 0x01, 0x00, 0x00, //0x000017f2 jne LBB5_71 + 0x0f, 0xb6, 0x4f, 0x04, //0x000017f8 movzbl $4(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x000017fc movzbl (%rcx,%r9), %ecx + 0x0f, 0xb6, 0x57, 0x05, //0x00001801 movzbl $5(%rdi), %edx + 0x42, 0x0f, 0xb6, 0x14, 0x0a, //0x00001805 movzbl (%rdx,%r9), %edx + 0x01, 0xd2, //0x0000180a addl %edx, %edx + 0x09, 0xca, //0x0000180c orl %ecx, %edx + 0x0f, 0xb6, 0x4f, 0x06, //0x0000180e movzbl $6(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x34, 0x09, //0x00001812 movzbl (%rcx,%r9), %esi + 0xc1, 0xe6, 0x02, //0x00001817 shll $2, %esi + 0x0f, 0xb6, 0x4f, 0x07, //0x0000181a movzbl $7(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x0000181e movzbl (%rcx,%r9), %ecx + 0xc1, 0xe1, 0x03, //0x00001823 shll $3, %ecx + 0x09, 0xf1, //0x00001826 orl %esi, %ecx + 0x09, 0xd1, //0x00001828 orl %edx, %ecx + 0x84, 0xc9, //0x0000182a testb %cl, %cl + 0x0f, 0x85, 0x0c, 0x01, 0x00, 0x00, //0x0000182c jne LBB5_72 + 0x48, 0x83, 0xc3, 0x08, //0x00001832 addq $8, %rbx + 0x48, 0x83, 0xc7, 0x08, //0x00001836 addq $8, %rdi + 0x49, 0x83, 0xc2, 0xf8, //0x0000183a addq $-8, %r10 + //0x0000183e LBB5_61 + 0x49, 0x83, 0xfa, 0x04, //0x0000183e cmpq $4, %r10 + 0x0f, 0x8c, 0x49, 0x00, 0x00, 0x00, //0x00001842 jl LBB5_64 + 0x0f, 0xb6, 0x0f, //0x00001848 movzbl (%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x0000184b movzbl (%rcx,%r9), %ecx + 0x0f, 0xb6, 0x57, 0x01, //0x00001850 movzbl $1(%rdi), %edx + 0x42, 0x0f, 0xb6, 0x14, 0x0a, //0x00001854 movzbl (%rdx,%r9), %edx + 0x01, 0xd2, //0x00001859 addl %edx, %edx + 0x09, 0xca, //0x0000185b orl %ecx, %edx + 0x0f, 0xb6, 0x4f, 0x02, //0x0000185d movzbl $2(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x34, 0x09, //0x00001861 movzbl (%rcx,%r9), %esi + 0xc1, 0xe6, 0x02, //0x00001866 shll $2, %esi + 0x0f, 0xb6, 0x4f, 0x03, //0x00001869 movzbl $3(%rdi), %ecx + 0x42, 0x0f, 0xb6, 0x0c, 0x09, //0x0000186d movzbl (%rcx,%r9), %ecx + 0xc1, 0xe1, 0x03, //0x00001872 shll $3, %ecx + 0x09, 0xf1, //0x00001875 orl %esi, %ecx + 0x09, 0xd1, //0x00001877 orl %edx, %ecx + 0x8b, 0x17, //0x00001879 movl (%rdi), %edx + 0x89, 0x13, //0x0000187b movl %edx, (%rbx) + 0x84, 0xc9, //0x0000187d testb %cl, %cl + 0x0f, 0x85, 0xa8, 0x00, 0x00, 0x00, //0x0000187f jne LBB5_71 + 0x48, 0x83, 0xc3, 0x04, //0x00001885 addq $4, %rbx + 0x48, 0x83, 0xc7, 0x04, //0x00001889 addq $4, %rdi + 0x49, 0x83, 0xc2, 0xfc, //0x0000188d addq $-4, %r10 + //0x00001891 LBB5_64 + 0x4d, 0x85, 0xd2, //0x00001891 testq %r10, %r10 + 0x0f, 0x8e, 0xbd, 0x00, 0x00, 0x00, //0x00001894 jle LBB5_73 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000189a .p2align 4, 0x90 + //0x000018a0 LBB5_65 + 0x0f, 0xb6, 0x0f, //0x000018a0 movzbl (%rdi), %ecx + 0x42, 0x80, 0x3c, 0x09, 0x00, //0x000018a3 cmpb $0, (%rcx,%r9) + 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x000018a8 jne LBB5_68 + 0x48, 0xff, 0xc7, //0x000018ae incq %rdi + 0x88, 0x0b, //0x000018b1 movb %cl, (%rbx) + 0x48, 0xff, 0xc3, //0x000018b3 incq %rbx + 0x49, 0x83, 0xfa, 0x01, //0x000018b6 cmpq $1, %r10 + 0x4d, 0x8d, 0x52, 0xff, //0x000018ba leaq $-1(%r10), %r10 + 0x0f, 0x8f, 0xdc, 0xff, 0xff, 0xff, //0x000018be jg LBB5_65 + 0xe9, 0x8e, 0x00, 0x00, 0x00, //0x000018c4 jmp LBB5_73 + //0x000018c9 LBB5_67 + 0x0f, 0xb7, 0xca, //0x000018c9 movzwl %dx, %ecx + 0x0f, 0xbc, 0xc9, //0x000018cc bsfl %ecx, %ecx + 0x48, 0x01, 0xcf, //0x000018cf addq %rcx, %rdi + 0x48, 0x01, 0xf7, //0x000018d2 addq %rsi, %rdi + 0x49, 0x29, 0xca, //0x000018d5 subq %rcx, %r10 + 0x49, 0x29, 0xf2, //0x000018d8 subq %rsi, %r10 + 0x48, 0x01, 0xcb, //0x000018db addq %rcx, %rbx + 0x48, 0x01, 0xf3, //0x000018de addq %rsi, %rbx + //0x000018e1 LBB5_68 + 0x8a, 0x0f, //0x000018e1 movb (%rdi), %cl + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000018e3 .p2align 4, 0x90 + //0x000018f0 LBB5_69 + 0x48, 0x89, 0xda, //0x000018f0 movq %rbx, %rdx + 0x0f, 0xb6, 0xc9, //0x000018f3 movzbl %cl, %ecx + 0x48, 0xc1, 0xe1, 0x04, //0x000018f6 shlq $4, %rcx + 0x49, 0x63, 0x1c, 0x08, //0x000018fa movslq (%r8,%rcx), %rbx + 0x49, 0x8b, 0x4c, 0x08, 0x08, //0x000018fe movq $8(%r8,%rcx), %rcx + 0x48, 0x89, 0x0a, //0x00001903 movq %rcx, (%rdx) + 0x48, 0x01, 0xd3, //0x00001906 addq %rdx, %rbx + 0x49, 0x83, 0xfa, 0x02, //0x00001909 cmpq $2, %r10 + 0x0f, 0x8c, 0x44, 0x00, 0x00, 0x00, //0x0000190d jl LBB5_73 + 0x49, 0xff, 0xca, //0x00001913 decq %r10 + 0x0f, 0xb6, 0x4f, 0x01, //0x00001916 movzbl $1(%rdi), %ecx + 0x48, 0xff, 0xc7, //0x0000191a incq %rdi + 0x42, 0x80, 0x3c, 0x09, 0x00, //0x0000191d cmpb $0, (%rcx,%r9) + 0x0f, 0x85, 0xc8, 0xff, 0xff, 0xff, //0x00001922 jne LBB5_69 + 0xe9, 0x0e, 0xfe, 0xff, 0xff, //0x00001928 jmp LBB5_52 + //0x0000192d LBB5_71 + 0x0f, 0xbc, 0xc9, //0x0000192d bsfl %ecx, %ecx + 0x48, 0x01, 0xcf, //0x00001930 addq %rcx, %rdi + 0x49, 0x29, 0xca, //0x00001933 subq %rcx, %r10 + 0x48, 0x01, 0xcb, //0x00001936 addq %rcx, %rbx + 0xe9, 0xa3, 0xff, 0xff, 0xff, //0x00001939 jmp LBB5_68 + //0x0000193e LBB5_72 + 0x0f, 0xbc, 0xc9, //0x0000193e bsfl %ecx, %ecx + 0x48, 0x8d, 0x51, 0x04, //0x00001941 leaq $4(%rcx), %rdx + 0x48, 0x8d, 0x7c, 0x0f, 0x04, //0x00001945 leaq $4(%rdi,%rcx), %rdi + 0x49, 0x29, 0xd2, //0x0000194a subq %rdx, %r10 + 0x48, 0x8d, 0x5c, 0x0b, 0x04, //0x0000194d leaq $4(%rbx,%rcx), %rbx + 0xe9, 0x8a, 0xff, 0xff, 0xff, //0x00001952 jmp LBB5_68 + //0x00001957 LBB5_73 + 0x4c, 0x29, 0xe3, //0x00001957 subq %r12, %rbx + 0x49, 0x89, 0x1b, //0x0000195a movq %rbx, (%r11) + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x0000195d jmp LBB5_77 + //0x00001962 LBB5_75 + 0x4d, 0x29, 0xe7, //0x00001962 subq %r12, %r15 + 0x4d, 0x89, 0x3b, //0x00001965 movq %r15, (%r11) + 0x49, 0xf7, 0xd2, //0x00001968 notq %r10 + 0x49, 0x01, 0xfa, //0x0000196b addq %rdi, %r10 + //0x0000196e LBB5_76 + 0x4c, 0x89, 0xd0, //0x0000196e movq %r10, %rax + //0x00001971 LBB5_77 + 0x48, 0x83, 0xc4, 0x10, //0x00001971 addq $16, %rsp + 0x5b, //0x00001975 popq %rbx + 0x41, 0x5c, //0x00001976 popq %r12 + 0x41, 0x5d, //0x00001978 popq %r13 + 0x41, 0x5e, //0x0000197a popq %r14 + 0x41, 0x5f, //0x0000197c popq %r15 + 0x5d, //0x0000197e popq %rbp + 0xc3, //0x0000197f retq + //0x00001980 LBB5_78 + 0x4d, 0x29, 0xe7, //0x00001980 subq %r12, %r15 + 0x49, 0xf7, 0xd1, //0x00001983 notq %r9 + 0x4d, 0x01, 0xcf, //0x00001986 addq %r9, %r15 + 0x4d, 0x89, 0x3b, //0x00001989 movq %r15, (%r11) + 0x49, 0x29, 0xfa, //0x0000198c subq %rdi, %r10 + 0x4d, 0x01, 0xca, //0x0000198f addq %r9, %r10 + 0x49, 0xf7, 0xd2, //0x00001992 notq %r10 + 0xe9, 0xd4, 0xff, 0xff, 0xff, //0x00001995 jmp LBB5_76 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000199a .p2align 4, 0x00 + //0x000019a0 LCPI6_0 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000019a0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x000019b0 .p2align 4, 0x90 + //0x000019b0 _unquote + 0x55, //0x000019b0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000019b1 movq %rsp, %rbp + 0x41, 0x57, //0x000019b4 pushq %r15 + 0x41, 0x56, //0x000019b6 pushq %r14 + 0x41, 0x55, //0x000019b8 pushq %r13 + 0x41, 0x54, //0x000019ba pushq %r12 + 0x53, //0x000019bc pushq %rbx + 0x48, 0x83, 0xec, 0x28, //0x000019bd subq $40, %rsp + 0x48, 0x85, 0xf6, //0x000019c1 testq %rsi, %rsi + 0x0f, 0x84, 0x6e, 0x06, 0x00, 0x00, //0x000019c4 je LBB6_82 + 0x49, 0x89, 0xf3, //0x000019ca movq %rsi, %r11 + 0x48, 0x89, 0x4d, 0xc8, //0x000019cd movq %rcx, $-56(%rbp) + 0x4c, 0x89, 0xc0, //0x000019d1 movq %r8, %rax + 0x4c, 0x89, 0x45, 0xb8, //0x000019d4 movq %r8, $-72(%rbp) + 0x45, 0x89, 0xc2, //0x000019d8 movl %r8d, %r10d + 0x41, 0x83, 0xe2, 0x01, //0x000019db andl $1, %r10d + 0x4c, 0x8d, 0x05, 0x2a, 0xf0, 0x00, 0x00, //0x000019df leaq $61482(%rip), %r8 /* __UnquoteTab+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x05, 0xb2, 0xff, 0xff, 0xff, //0x000019e6 movdqa $-78(%rip), %xmm0 /* LCPI6_0+0(%rip) */ + 0x49, 0x89, 0xf9, //0x000019ee movq %rdi, %r9 + 0x49, 0x89, 0xf5, //0x000019f1 movq %rsi, %r13 + 0x48, 0x89, 0xd0, //0x000019f4 movq %rdx, %rax + //0x000019f7 LBB6_2 + 0x41, 0x80, 0x39, 0x5c, //0x000019f7 cmpb $92, (%r9) + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x000019fb jne LBB6_4 + 0x31, 0xf6, //0x00001a01 xorl %esi, %esi + 0xe9, 0xc8, 0x00, 0x00, 0x00, //0x00001a03 jmp LBB6_13 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001a08 .p2align 4, 0x90 + //0x00001a10 LBB6_4 + 0x4d, 0x89, 0xef, //0x00001a10 movq %r13, %r15 + 0x48, 0x89, 0xc6, //0x00001a13 movq %rax, %rsi + 0x4d, 0x89, 0xce, //0x00001a16 movq %r9, %r14 + 0x49, 0x83, 0xfd, 0x10, //0x00001a19 cmpq $16, %r13 + 0x0f, 0x8c, 0x3d, 0x00, 0x00, 0x00, //0x00001a1d jl LBB6_7 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001a23 .p2align 4, 0x90 + //0x00001a30 LBB6_5 + 0xf3, 0x41, 0x0f, 0x6f, 0x0e, //0x00001a30 movdqu (%r14), %xmm1 + 0xf3, 0x0f, 0x7f, 0x0e, //0x00001a35 movdqu %xmm1, (%rsi) + 0x66, 0x0f, 0x74, 0xc8, //0x00001a39 pcmpeqb %xmm0, %xmm1 + 0x66, 0x0f, 0xd7, 0xd9, //0x00001a3d pmovmskb %xmm1, %ebx + 0x66, 0x85, 0xdb, //0x00001a41 testw %bx, %bx + 0x0f, 0x85, 0x60, 0x00, 0x00, 0x00, //0x00001a44 jne LBB6_12 + 0x49, 0x83, 0xc6, 0x10, //0x00001a4a addq $16, %r14 + 0x48, 0x83, 0xc6, 0x10, //0x00001a4e addq $16, %rsi + 0x49, 0x83, 0xff, 0x1f, //0x00001a52 cmpq $31, %r15 + 0x4d, 0x8d, 0x7f, 0xf0, //0x00001a56 leaq $-16(%r15), %r15 + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00001a5a jg LBB6_5 + //0x00001a60 LBB6_7 + 0x4d, 0x85, 0xff, //0x00001a60 testq %r15, %r15 + 0x0f, 0x84, 0xd5, 0x05, 0x00, 0x00, //0x00001a63 je LBB6_83 + 0x31, 0xdb, //0x00001a69 xorl %ebx, %ebx + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001a6b .p2align 4, 0x90 + //0x00001a70 LBB6_9 + 0x41, 0x0f, 0xb6, 0x0c, 0x1e, //0x00001a70 movzbl (%r14,%rbx), %ecx + 0x80, 0xf9, 0x5c, //0x00001a75 cmpb $92, %cl + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00001a78 je LBB6_11 + 0x88, 0x0c, 0x1e, //0x00001a7e movb %cl, (%rsi,%rbx) + 0x48, 0xff, 0xc3, //0x00001a81 incq %rbx + 0x49, 0x39, 0xdf, //0x00001a84 cmpq %rbx, %r15 + 0x0f, 0x85, 0xe3, 0xff, 0xff, 0xff, //0x00001a87 jne LBB6_9 + 0xe9, 0xac, 0x05, 0x00, 0x00, //0x00001a8d jmp LBB6_83 + //0x00001a92 LBB6_11 + 0x49, 0x01, 0xde, //0x00001a92 addq %rbx, %r14 + 0x4d, 0x29, 0xce, //0x00001a95 subq %r9, %r14 + 0x4c, 0x89, 0xf6, //0x00001a98 movq %r14, %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00001a9b cmpq $-1, %rsi + 0x0f, 0x85, 0x2b, 0x00, 0x00, 0x00, //0x00001a9f jne LBB6_13 + 0xe9, 0x94, 0x05, 0x00, 0x00, //0x00001aa5 jmp LBB6_83 + //0x00001aaa LBB6_12 + 0x0f, 0xb7, 0xcb, //0x00001aaa movzwl %bx, %ecx + 0x4d, 0x29, 0xce, //0x00001aad subq %r9, %r14 + 0x48, 0x0f, 0xbc, 0xf1, //0x00001ab0 bsfq %rcx, %rsi + 0x4c, 0x01, 0xf6, //0x00001ab4 addq %r14, %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00001ab7 cmpq $-1, %rsi + 0x0f, 0x84, 0x7d, 0x05, 0x00, 0x00, //0x00001abb je LBB6_83 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001ac1 .p2align 4, 0x90 + //0x00001ad0 LBB6_13 + 0x48, 0x8d, 0x4e, 0x02, //0x00001ad0 leaq $2(%rsi), %rcx + 0x49, 0x29, 0xcd, //0x00001ad4 subq %rcx, %r13 + 0x0f, 0x88, 0x2a, 0x06, 0x00, 0x00, //0x00001ad7 js LBB6_94 + 0x4d, 0x8d, 0x4c, 0x31, 0x02, //0x00001add leaq $2(%r9,%rsi), %r9 + 0x4d, 0x85, 0xd2, //0x00001ae2 testq %r10, %r10 + 0x0f, 0x85, 0xe5, 0x03, 0x00, 0x00, //0x00001ae5 jne LBB6_58 + //0x00001aeb LBB6_15 + 0x48, 0x01, 0xf0, //0x00001aeb addq %rsi, %rax + 0x41, 0x0f, 0xb6, 0x49, 0xff, //0x00001aee movzbl $-1(%r9), %ecx + 0x42, 0x8a, 0x0c, 0x01, //0x00001af3 movb (%rcx,%r8), %cl + 0x80, 0xf9, 0xff, //0x00001af7 cmpb $-1, %cl + 0x0f, 0x84, 0x20, 0x00, 0x00, 0x00, //0x00001afa je LBB6_18 + 0x84, 0xc9, //0x00001b00 testb %cl, %cl + 0x0f, 0x84, 0x12, 0x06, 0x00, 0x00, //0x00001b02 je LBB6_95 + 0x88, 0x08, //0x00001b08 movb %cl, (%rax) + 0x48, 0xff, 0xc0, //0x00001b0a incq %rax + 0xe9, 0xb0, 0x03, 0x00, 0x00, //0x00001b0d jmp LBB6_57 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001b12 .p2align 4, 0x90 + //0x00001b20 LBB6_18 + 0x49, 0x83, 0xfd, 0x03, //0x00001b20 cmpq $3, %r13 + 0x0f, 0x8e, 0xdd, 0x05, 0x00, 0x00, //0x00001b24 jle LBB6_94 + 0x41, 0x8b, 0x31, //0x00001b2a movl (%r9), %esi + 0x89, 0xf1, //0x00001b2d movl %esi, %ecx + 0xf7, 0xd1, //0x00001b2f notl %ecx + 0x8d, 0x9e, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001b31 leal $-808464432(%rsi), %ebx + 0x81, 0xe1, 0x80, 0x80, 0x80, 0x80, //0x00001b37 andl $-2139062144, %ecx + 0x85, 0xd9, //0x00001b3d testl %ebx, %ecx + 0x0f, 0x85, 0x0e, 0x05, 0x00, 0x00, //0x00001b3f jne LBB6_85 + 0x8d, 0x9e, 0x19, 0x19, 0x19, 0x19, //0x00001b45 leal $421075225(%rsi), %ebx + 0x09, 0xf3, //0x00001b4b orl %esi, %ebx + 0xf7, 0xc3, 0x80, 0x80, 0x80, 0x80, //0x00001b4d testl $-2139062144, %ebx + 0x0f, 0x85, 0xfa, 0x04, 0x00, 0x00, //0x00001b53 jne LBB6_85 + 0x89, 0xf3, //0x00001b59 movl %esi, %ebx + 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001b5b andl $2139062143, %ebx + 0x41, 0xbe, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001b61 movl $-1061109568, %r14d + 0x41, 0x29, 0xde, //0x00001b67 subl %ebx, %r14d + 0x44, 0x8d, 0xbb, 0x46, 0x46, 0x46, 0x46, //0x00001b6a leal $1179010630(%rbx), %r15d + 0x41, 0x21, 0xce, //0x00001b71 andl %ecx, %r14d + 0x45, 0x85, 0xfe, //0x00001b74 testl %r15d, %r14d + 0x0f, 0x85, 0xd6, 0x04, 0x00, 0x00, //0x00001b77 jne LBB6_85 + 0x41, 0xbe, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001b7d movl $-522133280, %r14d + 0x41, 0x29, 0xde, //0x00001b83 subl %ebx, %r14d + 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x00001b86 addl $960051513, %ebx + 0x44, 0x21, 0xf1, //0x00001b8c andl %r14d, %ecx + 0x85, 0xd9, //0x00001b8f testl %ebx, %ecx + 0x0f, 0x85, 0xbc, 0x04, 0x00, 0x00, //0x00001b91 jne LBB6_85 + 0x0f, 0xce, //0x00001b97 bswapl %esi + 0x89, 0xf1, //0x00001b99 movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001b9b shrl $4, %ecx + 0xf7, 0xd1, //0x00001b9e notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00001ba0 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00001ba6 leal (%rcx,%rcx,8), %ecx + 0x81, 0xe6, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001ba9 andl $252645135, %esi + 0x01, 0xce, //0x00001baf addl %ecx, %esi + 0x89, 0xf1, //0x00001bb1 movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001bb3 shrl $4, %ecx + 0x09, 0xf1, //0x00001bb6 orl %esi, %ecx + 0x44, 0x0f, 0xb6, 0xf9, //0x00001bb8 movzbl %cl, %r15d + 0xc1, 0xe9, 0x08, //0x00001bbc shrl $8, %ecx + 0x81, 0xe1, 0x00, 0xff, 0x00, 0x00, //0x00001bbf andl $65280, %ecx + 0x41, 0x09, 0xcf, //0x00001bc5 orl %ecx, %r15d + 0x4d, 0x8d, 0x75, 0xfc, //0x00001bc8 leaq $-4(%r13), %r14 + 0x41, 0x81, 0xff, 0x80, 0x00, 0x00, 0x00, //0x00001bcc cmpl $128, %r15d + 0x0f, 0x82, 0x46, 0x03, 0x00, 0x00, //0x00001bd3 jb LBB6_66 + 0x45, 0x31, 0xe4, //0x00001bd9 xorl %r12d, %r12d + 0x4d, 0x85, 0xd2, //0x00001bdc testq %r10, %r10 + 0x0f, 0x84, 0x5b, 0x01, 0x00, 0x00, //0x00001bdf je LBB6_40 + //0x00001be5 LBB6_25 + 0x41, 0x81, 0xff, 0x00, 0x08, 0x00, 0x00, //0x00001be5 cmpl $2048, %r15d + 0x0f, 0x82, 0x3c, 0x03, 0x00, 0x00, //0x00001bec jb LBB6_68 + 0x44, 0x89, 0xf9, //0x00001bf2 movl %r15d, %ecx + 0x81, 0xe1, 0x00, 0xf8, 0xff, 0xff, //0x00001bf5 andl $-2048, %ecx + 0x81, 0xf9, 0x00, 0xd8, 0x00, 0x00, //0x00001bfb cmpl $55296, %ecx + 0x0f, 0x85, 0x89, 0x02, 0x00, 0x00, //0x00001c01 jne LBB6_54 + 0x4d, 0x85, 0xf6, //0x00001c07 testq %r14, %r14 + 0x0f, 0x8e, 0x6b, 0x03, 0x00, 0x00, //0x00001c0a jle LBB6_72 + 0x43, 0x80, 0x7c, 0x21, 0x04, 0x5c, //0x00001c10 cmpb $92, $4(%r9,%r12) + 0x0f, 0x85, 0x6e, 0x03, 0x00, 0x00, //0x00001c16 jne LBB6_73 + 0x41, 0x81, 0xff, 0xff, 0xdb, 0x00, 0x00, //0x00001c1c cmpl $56319, %r15d + 0x0f, 0x87, 0x34, 0x03, 0x00, 0x00, //0x00001c23 ja LBB6_70 + 0x49, 0x83, 0xfe, 0x07, //0x00001c29 cmpq $7, %r14 + 0x0f, 0x8c, 0x2a, 0x03, 0x00, 0x00, //0x00001c2d jl LBB6_70 + 0x43, 0x80, 0x7c, 0x21, 0x05, 0x5c, //0x00001c33 cmpb $92, $5(%r9,%r12) + 0x0f, 0x85, 0x1e, 0x03, 0x00, 0x00, //0x00001c39 jne LBB6_70 + 0x43, 0x80, 0x7c, 0x21, 0x06, 0x75, //0x00001c3f cmpb $117, $6(%r9,%r12) + 0x0f, 0x85, 0x12, 0x03, 0x00, 0x00, //0x00001c45 jne LBB6_70 + 0x43, 0x8b, 0x74, 0x21, 0x07, //0x00001c4b movl $7(%r9,%r12), %esi + 0x89, 0xf1, //0x00001c50 movl %esi, %ecx + 0xf7, 0xd1, //0x00001c52 notl %ecx + 0x8d, 0x9e, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001c54 leal $-808464432(%rsi), %ebx + 0x81, 0xe1, 0x80, 0x80, 0x80, 0x80, //0x00001c5a andl $-2139062144, %ecx + 0x85, 0xd9, //0x00001c60 testl %ebx, %ecx + 0x0f, 0x85, 0xe8, 0x04, 0x00, 0x00, //0x00001c62 jne LBB6_99 + 0x8d, 0x9e, 0x19, 0x19, 0x19, 0x19, //0x00001c68 leal $421075225(%rsi), %ebx + 0x09, 0xf3, //0x00001c6e orl %esi, %ebx + 0xf7, 0xc3, 0x80, 0x80, 0x80, 0x80, //0x00001c70 testl $-2139062144, %ebx + 0x0f, 0x85, 0xd4, 0x04, 0x00, 0x00, //0x00001c76 jne LBB6_99 + 0x89, 0xf3, //0x00001c7c movl %esi, %ebx + 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001c7e andl $2139062143, %ebx + 0xc7, 0x45, 0xd4, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001c84 movl $-1061109568, $-44(%rbp) + 0x29, 0x5d, 0xd4, //0x00001c8b subl %ebx, $-44(%rbp) + 0x48, 0x89, 0x75, 0xb0, //0x00001c8e movq %rsi, $-80(%rbp) + 0x8d, 0xb3, 0x46, 0x46, 0x46, 0x46, //0x00001c92 leal $1179010630(%rbx), %esi + 0x89, 0x75, 0xc4, //0x00001c98 movl %esi, $-60(%rbp) + 0x21, 0x4d, 0xd4, //0x00001c9b andl %ecx, $-44(%rbp) + 0x8b, 0x75, 0xc4, //0x00001c9e movl $-60(%rbp), %esi + 0x85, 0x75, 0xd4, //0x00001ca1 testl %esi, $-44(%rbp) + 0x48, 0x8b, 0x75, 0xb0, //0x00001ca4 movq $-80(%rbp), %rsi + 0x0f, 0x85, 0xa2, 0x04, 0x00, 0x00, //0x00001ca8 jne LBB6_99 + 0xc7, 0x45, 0xd4, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001cae movl $-522133280, $-44(%rbp) + 0x29, 0x5d, 0xd4, //0x00001cb5 subl %ebx, $-44(%rbp) + 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x00001cb8 addl $960051513, %ebx + 0x23, 0x4d, 0xd4, //0x00001cbe andl $-44(%rbp), %ecx + 0x85, 0xd9, //0x00001cc1 testl %ebx, %ecx + 0x0f, 0x85, 0x87, 0x04, 0x00, 0x00, //0x00001cc3 jne LBB6_99 + 0x0f, 0xce, //0x00001cc9 bswapl %esi + 0x89, 0xf1, //0x00001ccb movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001ccd shrl $4, %ecx + 0xf7, 0xd1, //0x00001cd0 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00001cd2 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00001cd8 leal (%rcx,%rcx,8), %ecx + 0x81, 0xe6, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001cdb andl $252645135, %esi + 0x01, 0xce, //0x00001ce1 addl %ecx, %esi + 0x89, 0xf1, //0x00001ce3 movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001ce5 shrl $4, %ecx + 0x09, 0xf1, //0x00001ce8 orl %esi, %ecx + 0x89, 0xce, //0x00001cea movl %ecx, %esi + 0xc1, 0xee, 0x08, //0x00001cec shrl $8, %esi + 0x81, 0xe6, 0x00, 0xff, 0x00, 0x00, //0x00001cef andl $65280, %esi + 0x0f, 0xb6, 0xd9, //0x00001cf5 movzbl %cl, %ebx + 0x09, 0xf3, //0x00001cf8 orl %esi, %ebx + 0x81, 0xe1, 0x00, 0x00, 0xfc, 0x00, //0x00001cfa andl $16515072, %ecx + 0x81, 0xf9, 0x00, 0x00, 0xdc, 0x00, //0x00001d00 cmpl $14417920, %ecx + 0x0f, 0x84, 0xac, 0x02, 0x00, 0x00, //0x00001d06 je LBB6_77 + 0xf6, 0x45, 0xb8, 0x02, //0x00001d0c testb $2, $-72(%rbp) + 0x0f, 0x84, 0x41, 0x05, 0x00, 0x00, //0x00001d10 je LBB6_114 + 0x49, 0x83, 0xc6, 0xf9, //0x00001d16 addq $-7, %r14 + 0x66, 0xc7, 0x00, 0xef, 0xbf, //0x00001d1a movw $-16401, (%rax) + 0xc6, 0x40, 0x02, 0xbd, //0x00001d1f movb $-67, $2(%rax) + 0x48, 0x83, 0xc0, 0x03, //0x00001d23 addq $3, %rax + 0x49, 0x83, 0xc4, 0x07, //0x00001d27 addq $7, %r12 + 0x41, 0x89, 0xdf, //0x00001d2b movl %ebx, %r15d + 0x83, 0xfb, 0x7f, //0x00001d2e cmpl $127, %ebx + 0x0f, 0x87, 0xae, 0xfe, 0xff, 0xff, //0x00001d31 ja LBB6_25 + 0xe9, 0x44, 0x01, 0x00, 0x00, //0x00001d37 jmp LBB6_53 + 0x90, 0x90, 0x90, 0x90, //0x00001d3c .p2align 4, 0x90 + //0x00001d40 LBB6_40 + 0x41, 0x81, 0xff, 0x00, 0x08, 0x00, 0x00, //0x00001d40 cmpl $2048, %r15d + 0x0f, 0x82, 0xe1, 0x01, 0x00, 0x00, //0x00001d47 jb LBB6_68 + 0x44, 0x89, 0xf9, //0x00001d4d movl %r15d, %ecx + 0x81, 0xe1, 0x00, 0xf8, 0xff, 0xff, //0x00001d50 andl $-2048, %ecx + 0x81, 0xf9, 0x00, 0xd8, 0x00, 0x00, //0x00001d56 cmpl $55296, %ecx + 0x0f, 0x85, 0x2e, 0x01, 0x00, 0x00, //0x00001d5c jne LBB6_54 + 0x41, 0x81, 0xff, 0xff, 0xdb, 0x00, 0x00, //0x00001d62 cmpl $56319, %r15d + 0x0f, 0x87, 0xe4, 0x01, 0x00, 0x00, //0x00001d69 ja LBB6_69 + 0x49, 0x83, 0xfe, 0x06, //0x00001d6f cmpq $6, %r14 + 0x0f, 0x8c, 0xda, 0x01, 0x00, 0x00, //0x00001d73 jl LBB6_69 + 0x43, 0x80, 0x7c, 0x21, 0x04, 0x5c, //0x00001d79 cmpb $92, $4(%r9,%r12) + 0x0f, 0x85, 0xce, 0x01, 0x00, 0x00, //0x00001d7f jne LBB6_69 + 0x43, 0x80, 0x7c, 0x21, 0x05, 0x75, //0x00001d85 cmpb $117, $5(%r9,%r12) + 0x0f, 0x85, 0xc2, 0x01, 0x00, 0x00, //0x00001d8b jne LBB6_69 + 0x43, 0x8b, 0x74, 0x21, 0x06, //0x00001d91 movl $6(%r9,%r12), %esi + 0x89, 0xf1, //0x00001d96 movl %esi, %ecx + 0xf7, 0xd1, //0x00001d98 notl %ecx + 0x8d, 0x9e, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001d9a leal $-808464432(%rsi), %ebx + 0x81, 0xe1, 0x80, 0x80, 0x80, 0x80, //0x00001da0 andl $-2139062144, %ecx + 0x85, 0xd9, //0x00001da6 testl %ebx, %ecx + 0x0f, 0x85, 0x98, 0x03, 0x00, 0x00, //0x00001da8 jne LBB6_98 + 0x8d, 0x9e, 0x19, 0x19, 0x19, 0x19, //0x00001dae leal $421075225(%rsi), %ebx + 0x09, 0xf3, //0x00001db4 orl %esi, %ebx + 0xf7, 0xc3, 0x80, 0x80, 0x80, 0x80, //0x00001db6 testl $-2139062144, %ebx + 0x0f, 0x85, 0x84, 0x03, 0x00, 0x00, //0x00001dbc jne LBB6_98 + 0x89, 0xf3, //0x00001dc2 movl %esi, %ebx + 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001dc4 andl $2139062143, %ebx + 0xc7, 0x45, 0xd4, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001dca movl $-1061109568, $-44(%rbp) + 0x29, 0x5d, 0xd4, //0x00001dd1 subl %ebx, $-44(%rbp) + 0x48, 0x89, 0x75, 0xb0, //0x00001dd4 movq %rsi, $-80(%rbp) + 0x8d, 0xb3, 0x46, 0x46, 0x46, 0x46, //0x00001dd8 leal $1179010630(%rbx), %esi + 0x89, 0x75, 0xc4, //0x00001dde movl %esi, $-60(%rbp) + 0x21, 0x4d, 0xd4, //0x00001de1 andl %ecx, $-44(%rbp) + 0x8b, 0x75, 0xc4, //0x00001de4 movl $-60(%rbp), %esi + 0x85, 0x75, 0xd4, //0x00001de7 testl %esi, $-44(%rbp) + 0x48, 0x8b, 0x75, 0xb0, //0x00001dea movq $-80(%rbp), %rsi + 0x0f, 0x85, 0x52, 0x03, 0x00, 0x00, //0x00001dee jne LBB6_98 + 0xc7, 0x45, 0xd4, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001df4 movl $-522133280, $-44(%rbp) + 0x29, 0x5d, 0xd4, //0x00001dfb subl %ebx, $-44(%rbp) + 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x00001dfe addl $960051513, %ebx + 0x23, 0x4d, 0xd4, //0x00001e04 andl $-44(%rbp), %ecx + 0x85, 0xd9, //0x00001e07 testl %ebx, %ecx + 0x0f, 0x85, 0x37, 0x03, 0x00, 0x00, //0x00001e09 jne LBB6_98 + 0x0f, 0xce, //0x00001e0f bswapl %esi + 0x89, 0xf1, //0x00001e11 movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001e13 shrl $4, %ecx + 0xf7, 0xd1, //0x00001e16 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00001e18 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00001e1e leal (%rcx,%rcx,8), %ecx + 0x81, 0xe6, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001e21 andl $252645135, %esi + 0x01, 0xce, //0x00001e27 addl %ecx, %esi + 0x89, 0xf1, //0x00001e29 movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001e2b shrl $4, %ecx + 0x09, 0xf1, //0x00001e2e orl %esi, %ecx + 0x89, 0xce, //0x00001e30 movl %ecx, %esi + 0xc1, 0xee, 0x08, //0x00001e32 shrl $8, %esi + 0x81, 0xe6, 0x00, 0xff, 0x00, 0x00, //0x00001e35 andl $65280, %esi + 0x0f, 0xb6, 0xd9, //0x00001e3b movzbl %cl, %ebx + 0x09, 0xf3, //0x00001e3e orl %esi, %ebx + 0x81, 0xe1, 0x00, 0x00, 0xfc, 0x00, //0x00001e40 andl $16515072, %ecx + 0x81, 0xf9, 0x00, 0x00, 0xdc, 0x00, //0x00001e46 cmpl $14417920, %ecx + 0x0f, 0x84, 0x55, 0x01, 0x00, 0x00, //0x00001e4c je LBB6_76 + 0xf6, 0x45, 0xb8, 0x02, //0x00001e52 testb $2, $-72(%rbp) + 0x0f, 0x84, 0xf1, 0x03, 0x00, 0x00, //0x00001e56 je LBB6_113 + 0x49, 0x83, 0xc6, 0xfa, //0x00001e5c addq $-6, %r14 + 0x66, 0xc7, 0x00, 0xef, 0xbf, //0x00001e60 movw $-16401, (%rax) + 0xc6, 0x40, 0x02, 0xbd, //0x00001e65 movb $-67, $2(%rax) + 0x48, 0x83, 0xc0, 0x03, //0x00001e69 addq $3, %rax + 0x49, 0x83, 0xc4, 0x06, //0x00001e6d addq $6, %r12 + 0x41, 0x89, 0xdf, //0x00001e71 movl %ebx, %r15d + 0x81, 0xfb, 0x80, 0x00, 0x00, 0x00, //0x00001e74 cmpl $128, %ebx + 0x0f, 0x83, 0xc0, 0xfe, 0xff, 0xff, //0x00001e7a jae LBB6_40 + //0x00001e80 LBB6_53 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00001e80 leaq $4(%r9,%r12), %r9 + 0x41, 0x89, 0xdf, //0x00001e85 movl %ebx, %r15d + 0xe9, 0x96, 0x00, 0x00, 0x00, //0x00001e88 jmp LBB6_67 + 0x90, 0x90, 0x90, //0x00001e8d .p2align 4, 0x90 + //0x00001e90 LBB6_54 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00001e90 leaq $4(%r9,%r12), %r9 + 0x44, 0x89, 0xf9, //0x00001e95 movl %r15d, %ecx + 0xc1, 0xe9, 0x0c, //0x00001e98 shrl $12, %ecx + 0x80, 0xc9, 0xe0, //0x00001e9b orb $-32, %cl + 0x88, 0x08, //0x00001e9e movb %cl, (%rax) + 0x44, 0x89, 0xf9, //0x00001ea0 movl %r15d, %ecx + 0xc1, 0xe9, 0x06, //0x00001ea3 shrl $6, %ecx + 0x80, 0xe1, 0x3f, //0x00001ea6 andb $63, %cl + 0x80, 0xc9, 0x80, //0x00001ea9 orb $-128, %cl + 0x88, 0x48, 0x01, //0x00001eac movb %cl, $1(%rax) + 0x41, 0x80, 0xe7, 0x3f, //0x00001eaf andb $63, %r15b + 0x41, 0x80, 0xcf, 0x80, //0x00001eb3 orb $-128, %r15b + 0x44, 0x88, 0x78, 0x02, //0x00001eb7 movb %r15b, $2(%rax) + //0x00001ebb LBB6_55 + 0x48, 0x83, 0xc0, 0x03, //0x00001ebb addq $3, %rax + //0x00001ebf LBB6_56 + 0x4d, 0x89, 0xf5, //0x00001ebf movq %r14, %r13 + //0x00001ec2 LBB6_57 + 0x4d, 0x85, 0xed, //0x00001ec2 testq %r13, %r13 + 0x0f, 0x85, 0x2c, 0xfb, 0xff, 0xff, //0x00001ec5 jne LBB6_2 + 0xe9, 0x63, 0x02, 0x00, 0x00, //0x00001ecb jmp LBB6_96 + //0x00001ed0 LBB6_58 + 0x45, 0x85, 0xed, //0x00001ed0 testl %r13d, %r13d + 0x0f, 0x84, 0x2e, 0x02, 0x00, 0x00, //0x00001ed3 je LBB6_94 + 0x41, 0x80, 0x79, 0xff, 0x5c, //0x00001ed9 cmpb $92, $-1(%r9) + 0x0f, 0x85, 0x57, 0x02, 0x00, 0x00, //0x00001ede jne LBB6_97 + 0x41, 0x80, 0x39, 0x5c, //0x00001ee4 cmpb $92, (%r9) + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x00001ee8 jne LBB6_65 + 0x41, 0x83, 0xfd, 0x01, //0x00001eee cmpl $1, %r13d + 0x0f, 0x8e, 0x0f, 0x02, 0x00, 0x00, //0x00001ef2 jle LBB6_94 + 0x41, 0x8a, 0x49, 0x01, //0x00001ef8 movb $1(%r9), %cl + 0x80, 0xf9, 0x22, //0x00001efc cmpb $34, %cl + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x00001eff je LBB6_64 + 0x80, 0xf9, 0x5c, //0x00001f05 cmpb $92, %cl + 0x0f, 0x85, 0x0c, 0x03, 0x00, 0x00, //0x00001f08 jne LBB6_109 + //0x00001f0e LBB6_64 + 0x49, 0xff, 0xc1, //0x00001f0e incq %r9 + 0x49, 0xff, 0xcd, //0x00001f11 decq %r13 + //0x00001f14 LBB6_65 + 0x49, 0xff, 0xc1, //0x00001f14 incq %r9 + 0x49, 0xff, 0xcd, //0x00001f17 decq %r13 + 0xe9, 0xcc, 0xfb, 0xff, 0xff, //0x00001f1a jmp LBB6_15 + //0x00001f1f LBB6_66 + 0x49, 0x83, 0xc1, 0x04, //0x00001f1f addq $4, %r9 + //0x00001f23 LBB6_67 + 0x44, 0x88, 0x38, //0x00001f23 movb %r15b, (%rax) + 0x48, 0xff, 0xc0, //0x00001f26 incq %rax + 0xe9, 0x91, 0xff, 0xff, 0xff, //0x00001f29 jmp LBB6_56 + //0x00001f2e LBB6_68 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00001f2e leaq $4(%r9,%r12), %r9 + 0x44, 0x89, 0xf9, //0x00001f33 movl %r15d, %ecx + 0xc1, 0xe9, 0x06, //0x00001f36 shrl $6, %ecx + 0x80, 0xc9, 0xc0, //0x00001f39 orb $-64, %cl + 0x88, 0x08, //0x00001f3c movb %cl, (%rax) + 0x41, 0x80, 0xe7, 0x3f, //0x00001f3e andb $63, %r15b + 0x41, 0x80, 0xcf, 0x80, //0x00001f42 orb $-128, %r15b + 0x44, 0x88, 0x78, 0x01, //0x00001f46 movb %r15b, $1(%rax) + 0x48, 0x83, 0xc0, 0x02, //0x00001f4a addq $2, %rax + 0xe9, 0x6c, 0xff, 0xff, 0xff, //0x00001f4e jmp LBB6_56 + //0x00001f53 LBB6_69 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00001f53 leaq $4(%r9,%r12), %r9 + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00001f58 jmp LBB6_71 + //0x00001f5d LBB6_70 + 0x4f, 0x8d, 0x4c, 0x21, 0x05, //0x00001f5d leaq $5(%r9,%r12), %r9 + 0x4d, 0x29, 0xe5, //0x00001f62 subq %r12, %r13 + 0x49, 0x83, 0xc5, 0xfb, //0x00001f65 addq $-5, %r13 + 0x4d, 0x89, 0xee, //0x00001f69 movq %r13, %r14 + //0x00001f6c LBB6_71 + 0xf6, 0x45, 0xb8, 0x02, //0x00001f6c testb $2, $-72(%rbp) + 0x0f, 0x85, 0x23, 0x00, 0x00, 0x00, //0x00001f70 jne LBB6_75 + 0xe9, 0xfb, 0x02, 0x00, 0x00, //0x00001f76 jmp LBB6_116 + //0x00001f7b LBB6_72 + 0xf6, 0x45, 0xb8, 0x02, //0x00001f7b testb $2, $-72(%rbp) + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001f7f jne LBB6_74 + 0xe9, 0x7d, 0x01, 0x00, 0x00, //0x00001f85 jmp LBB6_94 + //0x00001f8a LBB6_73 + 0xf6, 0x45, 0xb8, 0x02, //0x00001f8a testb $2, $-72(%rbp) + 0x0f, 0x84, 0xef, 0x02, 0x00, 0x00, //0x00001f8e je LBB6_117 + //0x00001f94 LBB6_74 + 0x4f, 0x8d, 0x4c, 0x21, 0x04, //0x00001f94 leaq $4(%r9,%r12), %r9 + //0x00001f99 LBB6_75 + 0x66, 0xc7, 0x00, 0xef, 0xbf, //0x00001f99 movw $-16401, (%rax) + 0xc6, 0x40, 0x02, 0xbd, //0x00001f9e movb $-67, $2(%rax) + 0xe9, 0x14, 0xff, 0xff, 0xff, //0x00001fa2 jmp LBB6_55 + //0x00001fa7 LBB6_76 + 0x4f, 0x8d, 0x4c, 0x21, 0x0a, //0x00001fa7 leaq $10(%r9,%r12), %r9 + 0x4d, 0x29, 0xe5, //0x00001fac subq %r12, %r13 + 0x49, 0x83, 0xc5, 0xf6, //0x00001faf addq $-10, %r13 + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x00001fb3 jmp LBB6_78 + //0x00001fb8 LBB6_77 + 0x4f, 0x8d, 0x4c, 0x21, 0x0b, //0x00001fb8 leaq $11(%r9,%r12), %r9 + 0x4d, 0x29, 0xe5, //0x00001fbd subq %r12, %r13 + 0x49, 0x83, 0xc5, 0xf5, //0x00001fc0 addq $-11, %r13 + //0x00001fc4 LBB6_78 + 0x41, 0xc1, 0xe7, 0x0a, //0x00001fc4 shll $10, %r15d + 0x41, 0x8d, 0x8c, 0x1f, 0x00, 0x24, 0xa0, 0xfc, //0x00001fc8 leal $-56613888(%r15,%rbx), %ecx + 0x81, 0xf9, 0x00, 0x00, 0x11, 0x00, //0x00001fd0 cmpl $1114112, %ecx + 0x0f, 0x82, 0x1c, 0x00, 0x00, 0x00, //0x00001fd6 jb LBB6_81 + 0xf6, 0x45, 0xb8, 0x02, //0x00001fdc testb $2, $-72(%rbp) + 0x0f, 0x84, 0x4d, 0x02, 0x00, 0x00, //0x00001fe0 je LBB6_111 + 0x66, 0xc7, 0x00, 0xef, 0xbf, //0x00001fe6 movw $-16401, (%rax) + 0xc6, 0x40, 0x02, 0xbd, //0x00001feb movb $-67, $2(%rax) + 0x48, 0x83, 0xc0, 0x03, //0x00001fef addq $3, %rax + 0xe9, 0xca, 0xfe, 0xff, 0xff, //0x00001ff3 jmp LBB6_57 + //0x00001ff8 LBB6_81 + 0x89, 0xce, //0x00001ff8 movl %ecx, %esi + 0xc1, 0xee, 0x12, //0x00001ffa shrl $18, %esi + 0x40, 0x80, 0xce, 0xf0, //0x00001ffd orb $-16, %sil + 0x40, 0x88, 0x30, //0x00002001 movb %sil, (%rax) + 0x89, 0xce, //0x00002004 movl %ecx, %esi + 0xc1, 0xee, 0x0c, //0x00002006 shrl $12, %esi + 0x40, 0x80, 0xe6, 0x3f, //0x00002009 andb $63, %sil + 0x40, 0x80, 0xce, 0x80, //0x0000200d orb $-128, %sil + 0x40, 0x88, 0x70, 0x01, //0x00002011 movb %sil, $1(%rax) + 0x89, 0xce, //0x00002015 movl %ecx, %esi + 0xc1, 0xee, 0x06, //0x00002017 shrl $6, %esi + 0x40, 0x80, 0xe6, 0x3f, //0x0000201a andb $63, %sil + 0x40, 0x80, 0xce, 0x80, //0x0000201e orb $-128, %sil + 0x40, 0x88, 0x70, 0x02, //0x00002022 movb %sil, $2(%rax) + 0x80, 0xe1, 0x3f, //0x00002026 andb $63, %cl + 0x80, 0xc9, 0x80, //0x00002029 orb $-128, %cl + 0x88, 0x48, 0x03, //0x0000202c movb %cl, $3(%rax) + 0x48, 0x83, 0xc0, 0x04, //0x0000202f addq $4, %rax + 0xe9, 0x8a, 0xfe, 0xff, 0xff, //0x00002033 jmp LBB6_57 + //0x00002038 LBB6_82 + 0x45, 0x31, 0xed, //0x00002038 xorl %r13d, %r13d + 0x48, 0x89, 0xd0, //0x0000203b movq %rdx, %rax + //0x0000203e LBB6_83 + 0x4c, 0x01, 0xe8, //0x0000203e addq %r13, %rax + 0x48, 0x29, 0xd0, //0x00002041 subq %rdx, %rax + //0x00002044 LBB6_84 + 0x48, 0x83, 0xc4, 0x28, //0x00002044 addq $40, %rsp + 0x5b, //0x00002048 popq %rbx + 0x41, 0x5c, //0x00002049 popq %r12 + 0x41, 0x5d, //0x0000204b popq %r13 + 0x41, 0x5e, //0x0000204d popq %r14 + 0x41, 0x5f, //0x0000204f popq %r15 + 0x5d, //0x00002051 popq %rbp + 0xc3, //0x00002052 retq + //0x00002053 LBB6_85 + 0x4c, 0x89, 0xca, //0x00002053 movq %r9, %rdx + 0x48, 0x29, 0xfa, //0x00002056 subq %rdi, %rdx + 0x48, 0x8b, 0x7d, 0xc8, //0x00002059 movq $-56(%rbp), %rdi + 0x48, 0x89, 0x17, //0x0000205d movq %rdx, (%rdi) + 0x41, 0x8a, 0x09, //0x00002060 movb (%r9), %cl + 0x8d, 0x71, 0xd0, //0x00002063 leal $-48(%rcx), %esi + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00002066 movq $-2, %rax + 0x40, 0x80, 0xfe, 0x0a, //0x0000206d cmpb $10, %sil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x00002071 jb LBB6_87 + 0x80, 0xe1, 0xdf, //0x00002077 andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x0000207a addb $-65, %cl + 0x80, 0xf9, 0x05, //0x0000207d cmpb $5, %cl + 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x00002080 ja LBB6_84 + //0x00002086 LBB6_87 + 0x48, 0x8d, 0x4a, 0x01, //0x00002086 leaq $1(%rdx), %rcx + 0x48, 0x89, 0x0f, //0x0000208a movq %rcx, (%rdi) + 0x41, 0x8a, 0x49, 0x01, //0x0000208d movb $1(%r9), %cl + 0x8d, 0x71, 0xd0, //0x00002091 leal $-48(%rcx), %esi + 0x40, 0x80, 0xfe, 0x0a, //0x00002094 cmpb $10, %sil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x00002098 jb LBB6_89 + 0x80, 0xe1, 0xdf, //0x0000209e andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x000020a1 addb $-65, %cl + 0x80, 0xf9, 0x05, //0x000020a4 cmpb $5, %cl + 0x0f, 0x87, 0x97, 0xff, 0xff, 0xff, //0x000020a7 ja LBB6_84 + //0x000020ad LBB6_89 + 0x48, 0x8d, 0x4a, 0x02, //0x000020ad leaq $2(%rdx), %rcx + 0x48, 0x89, 0x0f, //0x000020b1 movq %rcx, (%rdi) + 0x41, 0x8a, 0x49, 0x02, //0x000020b4 movb $2(%r9), %cl + 0x8d, 0x71, 0xd0, //0x000020b8 leal $-48(%rcx), %esi + 0x40, 0x80, 0xfe, 0x0a, //0x000020bb cmpb $10, %sil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x000020bf jb LBB6_91 + 0x80, 0xe1, 0xdf, //0x000020c5 andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x000020c8 addb $-65, %cl + 0x80, 0xf9, 0x05, //0x000020cb cmpb $5, %cl + 0x0f, 0x87, 0x70, 0xff, 0xff, 0xff, //0x000020ce ja LBB6_84 + //0x000020d4 LBB6_91 + 0x48, 0x8d, 0x4a, 0x03, //0x000020d4 leaq $3(%rdx), %rcx + 0x48, 0x89, 0x0f, //0x000020d8 movq %rcx, (%rdi) + 0x41, 0x8a, 0x49, 0x03, //0x000020db movb $3(%r9), %cl + 0x8d, 0x71, 0xd0, //0x000020df leal $-48(%rcx), %esi + 0x40, 0x80, 0xfe, 0x0a, //0x000020e2 cmpb $10, %sil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x000020e6 jb LBB6_93 + 0x80, 0xe1, 0xdf, //0x000020ec andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x000020ef addb $-65, %cl + 0x80, 0xf9, 0x05, //0x000020f2 cmpb $5, %cl + 0x0f, 0x87, 0x49, 0xff, 0xff, 0xff, //0x000020f5 ja LBB6_84 + //0x000020fb LBB6_93 + 0x48, 0x83, 0xc2, 0x04, //0x000020fb addq $4, %rdx + 0x48, 0x89, 0x17, //0x000020ff movq %rdx, (%rdi) + 0xe9, 0x3d, 0xff, 0xff, 0xff, //0x00002102 jmp LBB6_84 + //0x00002107 LBB6_94 + 0x48, 0x8b, 0x45, 0xc8, //0x00002107 movq $-56(%rbp), %rax + 0x4c, 0x89, 0x18, //0x0000210b movq %r11, (%rax) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000210e movq $-1, %rax + 0xe9, 0x2a, 0xff, 0xff, 0xff, //0x00002115 jmp LBB6_84 + //0x0000211a LBB6_95 + 0x48, 0xf7, 0xd7, //0x0000211a notq %rdi + 0x49, 0x01, 0xf9, //0x0000211d addq %rdi, %r9 + 0x48, 0x8b, 0x45, 0xc8, //0x00002120 movq $-56(%rbp), %rax + 0x4c, 0x89, 0x08, //0x00002124 movq %r9, (%rax) + 0x48, 0xc7, 0xc0, 0xfd, 0xff, 0xff, 0xff, //0x00002127 movq $-3, %rax + 0xe9, 0x11, 0xff, 0xff, 0xff, //0x0000212e jmp LBB6_84 + //0x00002133 LBB6_96 + 0x45, 0x31, 0xed, //0x00002133 xorl %r13d, %r13d + 0xe9, 0x03, 0xff, 0xff, 0xff, //0x00002136 jmp LBB6_83 + //0x0000213b LBB6_97 + 0x48, 0xf7, 0xd7, //0x0000213b notq %rdi + 0x49, 0x01, 0xf9, //0x0000213e addq %rdi, %r9 + 0xe9, 0xda, 0x00, 0x00, 0x00, //0x00002141 jmp LBB6_110 + //0x00002146 LBB6_98 + 0x4b, 0x8d, 0x74, 0x21, 0x04, //0x00002146 leaq $4(%r9,%r12), %rsi + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x0000214b jmp LBB6_100 + //0x00002150 LBB6_99 + 0x4b, 0x8d, 0x74, 0x21, 0x05, //0x00002150 leaq $5(%r9,%r12), %rsi + //0x00002155 LBB6_100 + 0x48, 0x89, 0xf2, //0x00002155 movq %rsi, %rdx + 0x48, 0x29, 0xfa, //0x00002158 subq %rdi, %rdx + 0x48, 0x83, 0xc2, 0x02, //0x0000215b addq $2, %rdx + 0x48, 0x8b, 0x45, 0xc8, //0x0000215f movq $-56(%rbp), %rax + 0x48, 0x89, 0x10, //0x00002163 movq %rdx, (%rax) + 0x8a, 0x4e, 0x02, //0x00002166 movb $2(%rsi), %cl + 0x8d, 0x79, 0xd0, //0x00002169 leal $-48(%rcx), %edi + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x0000216c movq $-2, %rax + 0x40, 0x80, 0xff, 0x0a, //0x00002173 cmpb $10, %dil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x00002177 jb LBB6_102 + 0x80, 0xe1, 0xdf, //0x0000217d andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x00002180 addb $-65, %cl + 0x80, 0xf9, 0x05, //0x00002183 cmpb $5, %cl + 0x0f, 0x87, 0xb8, 0xfe, 0xff, 0xff, //0x00002186 ja LBB6_84 + //0x0000218c LBB6_102 + 0x48, 0x8d, 0x4a, 0x01, //0x0000218c leaq $1(%rdx), %rcx + 0x48, 0x8b, 0x7d, 0xc8, //0x00002190 movq $-56(%rbp), %rdi + 0x48, 0x89, 0x0f, //0x00002194 movq %rcx, (%rdi) + 0x8a, 0x4e, 0x03, //0x00002197 movb $3(%rsi), %cl + 0x8d, 0x79, 0xd0, //0x0000219a leal $-48(%rcx), %edi + 0x40, 0x80, 0xff, 0x0a, //0x0000219d cmpb $10, %dil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x000021a1 jb LBB6_104 + 0x80, 0xe1, 0xdf, //0x000021a7 andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x000021aa addb $-65, %cl + 0x80, 0xf9, 0x05, //0x000021ad cmpb $5, %cl + 0x0f, 0x87, 0x8e, 0xfe, 0xff, 0xff, //0x000021b0 ja LBB6_84 + //0x000021b6 LBB6_104 + 0x48, 0x8d, 0x4a, 0x02, //0x000021b6 leaq $2(%rdx), %rcx + 0x48, 0x8b, 0x7d, 0xc8, //0x000021ba movq $-56(%rbp), %rdi + 0x48, 0x89, 0x0f, //0x000021be movq %rcx, (%rdi) + 0x8a, 0x4e, 0x04, //0x000021c1 movb $4(%rsi), %cl + 0x8d, 0x79, 0xd0, //0x000021c4 leal $-48(%rcx), %edi + 0x40, 0x80, 0xff, 0x0a, //0x000021c7 cmpb $10, %dil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x000021cb jb LBB6_106 + 0x80, 0xe1, 0xdf, //0x000021d1 andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x000021d4 addb $-65, %cl + 0x80, 0xf9, 0x05, //0x000021d7 cmpb $5, %cl + 0x0f, 0x87, 0x64, 0xfe, 0xff, 0xff, //0x000021da ja LBB6_84 + //0x000021e0 LBB6_106 + 0x48, 0x8d, 0x4a, 0x03, //0x000021e0 leaq $3(%rdx), %rcx + 0x48, 0x8b, 0x7d, 0xc8, //0x000021e4 movq $-56(%rbp), %rdi + 0x48, 0x89, 0x0f, //0x000021e8 movq %rcx, (%rdi) + 0x8a, 0x4e, 0x05, //0x000021eb movb $5(%rsi), %cl + 0x8d, 0x71, 0xd0, //0x000021ee leal $-48(%rcx), %esi + 0x40, 0x80, 0xfe, 0x0a, //0x000021f1 cmpb $10, %sil + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x000021f5 jb LBB6_108 + 0x80, 0xe1, 0xdf, //0x000021fb andb $-33, %cl + 0x80, 0xc1, 0xbf, //0x000021fe addb $-65, %cl + 0x80, 0xf9, 0x05, //0x00002201 cmpb $5, %cl + 0x0f, 0x87, 0x3a, 0xfe, 0xff, 0xff, //0x00002204 ja LBB6_84 + //0x0000220a LBB6_108 + 0x48, 0x83, 0xc2, 0x04, //0x0000220a addq $4, %rdx + 0x48, 0x8b, 0x4d, 0xc8, //0x0000220e movq $-56(%rbp), %rcx + 0x48, 0x89, 0x11, //0x00002212 movq %rdx, (%rcx) + 0xe9, 0x2a, 0xfe, 0xff, 0xff, //0x00002215 jmp LBB6_84 + //0x0000221a LBB6_109 + 0x49, 0x29, 0xf9, //0x0000221a subq %rdi, %r9 + 0x49, 0xff, 0xc1, //0x0000221d incq %r9 + //0x00002220 LBB6_110 + 0x48, 0x8b, 0x45, 0xc8, //0x00002220 movq $-56(%rbp), %rax + 0x4c, 0x89, 0x08, //0x00002224 movq %r9, (%rax) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00002227 movq $-2, %rax + 0xe9, 0x11, 0xfe, 0xff, 0xff, //0x0000222e jmp LBB6_84 + //0x00002233 LBB6_111 + 0x49, 0x29, 0xf9, //0x00002233 subq %rdi, %r9 + 0x49, 0x83, 0xc1, 0xfc, //0x00002236 addq $-4, %r9 + //0x0000223a LBB6_112 + 0x48, 0x8b, 0x45, 0xc8, //0x0000223a movq $-56(%rbp), %rax + 0x4c, 0x89, 0x08, //0x0000223e movq %r9, (%rax) + 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x00002241 movq $-4, %rax + 0xe9, 0xf7, 0xfd, 0xff, 0xff, //0x00002248 jmp LBB6_84 + //0x0000224d LBB6_113 + 0x4b, 0x8d, 0x44, 0x21, 0x0a, //0x0000224d leaq $10(%r9,%r12), %rax + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00002252 jmp LBB6_115 + //0x00002257 LBB6_114 + 0x4b, 0x8d, 0x44, 0x21, 0x0b, //0x00002257 leaq $11(%r9,%r12), %rax + //0x0000225c LBB6_115 + 0x48, 0x29, 0xf8, //0x0000225c subq %rdi, %rax + 0x48, 0x83, 0xc0, 0xfc, //0x0000225f addq $-4, %rax + 0x48, 0x8b, 0x4d, 0xc8, //0x00002263 movq $-56(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00002267 movq %rax, (%rcx) + 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x0000226a movq $-4, %rax + 0xe9, 0xce, 0xfd, 0xff, 0xff, //0x00002271 jmp LBB6_84 + //0x00002276 LBB6_116 + 0x49, 0x8d, 0x44, 0x3a, 0x04, //0x00002276 leaq $4(%r10,%rdi), %rax + 0x49, 0x29, 0xc1, //0x0000227b subq %rax, %r9 + 0xe9, 0xb7, 0xff, 0xff, 0xff, //0x0000227e jmp LBB6_112 + //0x00002283 LBB6_117 + 0x4d, 0x01, 0xe1, //0x00002283 addq %r12, %r9 + 0x49, 0x29, 0xf9, //0x00002286 subq %rdi, %r9 + 0xe9, 0xac, 0xff, 0xff, 0xff, //0x00002289 jmp LBB6_112 + 0x00, 0x00, //0x0000228e .p2align 4, 0x00 + //0x00002290 LCPI7_0 + 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, //0x00002290 QUAD $0x2626262626262626; QUAD $0x2626262626262626 // .space 16, '&&&&&&&&&&&&&&&&' + //0x000022a0 LCPI7_1 + 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, //0x000022a0 QUAD $0xe2e2e2e2e2e2e2e2; QUAD $0xe2e2e2e2e2e2e2e2 // .space 16, '\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2' + //0x000022b0 LCPI7_2 + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, //0x000022b0 QUAD $0x0202020202020202; QUAD $0x0202020202020202 // .space 16, '\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' + //0x000022c0 LCPI7_3 + 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, //0x000022c0 QUAD $0x3e3e3e3e3e3e3e3e; QUAD $0x3e3e3e3e3e3e3e3e // .space 16, '>>>>>>>>>>>>>>>>' + //0x000022d0 .p2align 4, 0x90 + //0x000022d0 _html_escape + 0x55, //0x000022d0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000022d1 movq %rsp, %rbp + 0x41, 0x57, //0x000022d4 pushq %r15 + 0x41, 0x56, //0x000022d6 pushq %r14 + 0x41, 0x55, //0x000022d8 pushq %r13 + 0x41, 0x54, //0x000022da pushq %r12 + 0x53, //0x000022dc pushq %rbx + 0x48, 0x83, 0xec, 0x18, //0x000022dd subq $24, %rsp + 0x48, 0x89, 0x4d, 0xc0, //0x000022e1 movq %rcx, $-64(%rbp) + 0x49, 0x89, 0xd2, //0x000022e5 movq %rdx, %r10 + 0x48, 0x89, 0x55, 0xc8, //0x000022e8 movq %rdx, $-56(%rbp) + 0x48, 0x89, 0x7d, 0xd0, //0x000022ec movq %rdi, $-48(%rbp) + 0x48, 0x89, 0xf8, //0x000022f0 movq %rdi, %rax + 0x48, 0x85, 0xf6, //0x000022f3 testq %rsi, %rsi + 0x0f, 0x8e, 0x93, 0x04, 0x00, 0x00, //0x000022f6 jle LBB7_59 + 0x48, 0x8b, 0x45, 0xc0, //0x000022fc movq $-64(%rbp), %rax + 0x4c, 0x8b, 0x08, //0x00002300 movq (%rax), %r9 + 0x66, 0x0f, 0x6f, 0x05, 0x85, 0xff, 0xff, 0xff, //0x00002303 movdqa $-123(%rip), %xmm0 /* LCPI7_0+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x0d, 0x8d, 0xff, 0xff, 0xff, //0x0000230b movdqa $-115(%rip), %xmm1 /* LCPI7_1+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x15, 0x95, 0xff, 0xff, 0xff, //0x00002313 movdqa $-107(%rip), %xmm2 /* LCPI7_2+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x1d, 0x9d, 0xff, 0xff, 0xff, //0x0000231b movdqa $-99(%rip), %xmm3 /* LCPI7_3+0(%rip) */ + 0x49, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x50, //0x00002323 movabsq $5764607797912141824, %r14 + 0x4c, 0x8d, 0x1d, 0xdc, 0xe7, 0x00, 0x00, //0x0000232d leaq $59356(%rip), %r11 /* __HtmlQuoteTab+0(%rip) */ + 0x4c, 0x8b, 0x7d, 0xd0, //0x00002334 movq $-48(%rbp), %r15 + 0x4c, 0x8b, 0x55, 0xc8, //0x00002338 movq $-56(%rbp), %r10 + 0x90, 0x90, 0x90, 0x90, //0x0000233c .p2align 4, 0x90 + //0x00002340 LBB7_2 + 0x4d, 0x85, 0xc9, //0x00002340 testq %r9, %r9 + 0x0f, 0x8e, 0x65, 0x04, 0x00, 0x00, //0x00002343 jle LBB7_61 + 0x48, 0x83, 0xfe, 0x0f, //0x00002349 cmpq $15, %rsi + 0x0f, 0x9f, 0xc3, //0x0000234d setg %bl + 0x4d, 0x89, 0xcd, //0x00002350 movq %r9, %r13 + 0x4d, 0x89, 0xd0, //0x00002353 movq %r10, %r8 + 0x48, 0x89, 0xf0, //0x00002356 movq %rsi, %rax + 0x4d, 0x89, 0xfc, //0x00002359 movq %r15, %r12 + 0x49, 0x83, 0xf9, 0x10, //0x0000235c cmpq $16, %r9 + 0x0f, 0x8c, 0x8a, 0x00, 0x00, 0x00, //0x00002360 jl LBB7_9 + 0x48, 0x83, 0xfe, 0x10, //0x00002366 cmpq $16, %rsi + 0x0f, 0x8c, 0x80, 0x00, 0x00, 0x00, //0x0000236a jl LBB7_9 + 0x4d, 0x89, 0xfc, //0x00002370 movq %r15, %r12 + 0x48, 0x89, 0xf0, //0x00002373 movq %rsi, %rax + 0x4d, 0x89, 0xd0, //0x00002376 movq %r10, %r8 + 0x4c, 0x89, 0xc9, //0x00002379 movq %r9, %rcx + 0x90, 0x90, 0x90, 0x90, //0x0000237c .p2align 4, 0x90 + //0x00002380 LBB7_6 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x00002380 movdqu (%r12), %xmm4 + 0x66, 0x0f, 0x6f, 0xec, //0x00002386 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xf4, //0x0000238a movdqa %xmm4, %xmm6 + 0xf3, 0x41, 0x0f, 0x7f, 0x20, //0x0000238e movdqu %xmm4, (%r8) + 0x66, 0x0f, 0x74, 0xe0, //0x00002393 pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0x74, 0xe9, //0x00002397 pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xeb, 0xec, //0x0000239b por %xmm4, %xmm5 + 0x66, 0x0f, 0xeb, 0xf2, //0x0000239f por %xmm2, %xmm6 + 0x66, 0x0f, 0x74, 0xf3, //0x000023a3 pcmpeqb %xmm3, %xmm6 + 0x66, 0x0f, 0xeb, 0xf5, //0x000023a7 por %xmm5, %xmm6 + 0x66, 0x0f, 0xd7, 0xd6, //0x000023ab pmovmskb %xmm6, %edx + 0x66, 0x85, 0xd2, //0x000023af testw %dx, %dx + 0x0f, 0x85, 0x48, 0x01, 0x00, 0x00, //0x000023b2 jne LBB7_21 + 0x49, 0x83, 0xc4, 0x10, //0x000023b8 addq $16, %r12 + 0x49, 0x83, 0xc0, 0x10, //0x000023bc addq $16, %r8 + 0x4c, 0x8d, 0x69, 0xf0, //0x000023c0 leaq $-16(%rcx), %r13 + 0x48, 0x83, 0xf8, 0x1f, //0x000023c4 cmpq $31, %rax + 0x0f, 0x9f, 0xc3, //0x000023c8 setg %bl + 0x48, 0x83, 0xf8, 0x20, //0x000023cb cmpq $32, %rax + 0x48, 0x8d, 0x40, 0xf0, //0x000023cf leaq $-16(%rax), %rax + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x000023d3 jl LBB7_9 + 0x48, 0x83, 0xf9, 0x1f, //0x000023d9 cmpq $31, %rcx + 0x4c, 0x89, 0xe9, //0x000023dd movq %r13, %rcx + 0x0f, 0x8f, 0x9a, 0xff, 0xff, 0xff, //0x000023e0 jg LBB7_6 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000023e6 .p2align 4, 0x90 + //0x000023f0 LBB7_9 + 0x84, 0xdb, //0x000023f0 testb %bl, %bl + 0x0f, 0x84, 0x78, 0x00, 0x00, 0x00, //0x000023f2 je LBB7_13 + 0x4c, 0x89, 0xf2, //0x000023f8 movq %r14, %rdx + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x000023fb movdqu (%r12), %xmm4 + 0x66, 0x0f, 0x6f, 0xec, //0x00002401 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002405 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0x6f, 0xf4, //0x00002409 movdqa %xmm4, %xmm6 + 0x66, 0x0f, 0x74, 0xf1, //0x0000240d pcmpeqb %xmm1, %xmm6 + 0x66, 0x0f, 0xeb, 0xf5, //0x00002411 por %xmm5, %xmm6 + 0x66, 0x48, 0x0f, 0x7e, 0xe0, //0x00002415 movq %xmm4, %rax + 0x66, 0x0f, 0xeb, 0xe2, //0x0000241a por %xmm2, %xmm4 + 0x66, 0x0f, 0x74, 0xe3, //0x0000241e pcmpeqb %xmm3, %xmm4 + 0x66, 0x0f, 0xeb, 0xe6, //0x00002422 por %xmm6, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00002426 pmovmskb %xmm4, %ecx + 0x81, 0xc9, 0x00, 0x00, 0x01, 0x00, //0x0000242a orl $65536, %ecx + 0x44, 0x0f, 0xbc, 0xf1, //0x00002430 bsfl %ecx, %r14d + 0x4d, 0x39, 0xf5, //0x00002434 cmpq %r14, %r13 + 0x0f, 0x8d, 0xde, 0x00, 0x00, 0x00, //0x00002437 jge LBB7_22 + 0x49, 0x83, 0xfd, 0x08, //0x0000243d cmpq $8, %r13 + 0x0f, 0x82, 0x11, 0x01, 0x00, 0x00, //0x00002441 jb LBB7_25 + 0x49, 0x89, 0x00, //0x00002447 movq %rax, (%r8) + 0x4d, 0x8d, 0x74, 0x24, 0x08, //0x0000244a leaq $8(%r12), %r14 + 0x49, 0x83, 0xc0, 0x08, //0x0000244f addq $8, %r8 + 0x49, 0x8d, 0x45, 0xf8, //0x00002453 leaq $-8(%r13), %rax + 0x48, 0x83, 0xf8, 0x04, //0x00002457 cmpq $4, %rax + 0x0f, 0x8d, 0x07, 0x01, 0x00, 0x00, //0x0000245b jge LBB7_26 + 0xe9, 0x14, 0x01, 0x00, 0x00, //0x00002461 jmp LBB7_27 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002466 .p2align 4, 0x90 + //0x00002470 LBB7_13 + 0x4d, 0x85, 0xed, //0x00002470 testq %r13, %r13 + 0x0f, 0x8e, 0x67, 0x00, 0x00, 0x00, //0x00002473 jle LBB7_20 + 0x48, 0x85, 0xc0, //0x00002479 testq %rax, %rax + 0x0f, 0x8e, 0x5e, 0x00, 0x00, 0x00, //0x0000247c jle LBB7_20 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002482 .p2align 4, 0x90 + //0x00002490 LBB7_15 + 0x41, 0x0f, 0xb6, 0x0c, 0x24, //0x00002490 movzbl (%r12), %ecx + 0x48, 0x83, 0xf9, 0x3e, //0x00002495 cmpq $62, %rcx + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x00002499 ja LBB7_17 + 0x49, 0x0f, 0xa3, 0xce, //0x0000249f btq %rcx, %r14 + 0x0f, 0x82, 0x9b, 0x00, 0x00, 0x00, //0x000024a3 jb LBB7_24 + //0x000024a9 LBB7_17 + 0x80, 0xf9, 0xe2, //0x000024a9 cmpb $-30, %cl + 0x0f, 0x84, 0x92, 0x00, 0x00, 0x00, //0x000024ac je LBB7_24 + 0x49, 0xff, 0xc4, //0x000024b2 incq %r12 + 0x41, 0x88, 0x08, //0x000024b5 movb %cl, (%r8) + 0x48, 0x83, 0xf8, 0x02, //0x000024b8 cmpq $2, %rax + 0x48, 0x8d, 0x40, 0xff, //0x000024bc leaq $-1(%rax), %rax + 0x0f, 0x8c, 0x1a, 0x00, 0x00, 0x00, //0x000024c0 jl LBB7_20 + 0x49, 0xff, 0xc0, //0x000024c6 incq %r8 + 0x49, 0x83, 0xfd, 0x01, //0x000024c9 cmpq $1, %r13 + 0x4d, 0x8d, 0x6d, 0xff, //0x000024cd leaq $-1(%r13), %r13 + 0x0f, 0x8f, 0xb9, 0xff, 0xff, 0xff, //0x000024d1 jg LBB7_15 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000024d7 .p2align 4, 0x90 + //0x000024e0 LBB7_20 + 0x4d, 0x29, 0xfc, //0x000024e0 subq %r15, %r12 + 0x48, 0xf7, 0xd8, //0x000024e3 negq %rax + 0x4d, 0x19, 0xed, //0x000024e6 sbbq %r13, %r13 + 0x4d, 0x31, 0xe5, //0x000024e9 xorq %r12, %r13 + 0x4d, 0x85, 0xed, //0x000024ec testq %r13, %r13 + 0x0f, 0x89, 0x5b, 0x01, 0x00, 0x00, //0x000024ef jns LBB7_37 + 0xe9, 0x72, 0x02, 0x00, 0x00, //0x000024f5 jmp LBB7_57 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000024fa .p2align 4, 0x90 + //0x00002500 LBB7_21 + 0x0f, 0xb7, 0xc2, //0x00002500 movzwl %dx, %eax + 0x4d, 0x29, 0xfc, //0x00002503 subq %r15, %r12 + 0x44, 0x0f, 0xbc, 0xe8, //0x00002506 bsfl %eax, %r13d + 0x4d, 0x01, 0xe5, //0x0000250a addq %r12, %r13 + 0x4d, 0x85, 0xed, //0x0000250d testq %r13, %r13 + 0x0f, 0x89, 0x3a, 0x01, 0x00, 0x00, //0x00002510 jns LBB7_37 + 0xe9, 0x51, 0x02, 0x00, 0x00, //0x00002516 jmp LBB7_57 + //0x0000251b LBB7_22 + 0x41, 0x83, 0xfe, 0x08, //0x0000251b cmpl $8, %r14d + 0x0f, 0x82, 0xaa, 0x00, 0x00, 0x00, //0x0000251f jb LBB7_31 + 0x49, 0x89, 0x00, //0x00002525 movq %rax, (%r8) + 0x4d, 0x8d, 0x6c, 0x24, 0x08, //0x00002528 leaq $8(%r12), %r13 + 0x49, 0x83, 0xc0, 0x08, //0x0000252d addq $8, %r8 + 0x49, 0x8d, 0x46, 0xf8, //0x00002531 leaq $-8(%r14), %rax + 0x48, 0x83, 0xf8, 0x04, //0x00002535 cmpq $4, %rax + 0x0f, 0x8d, 0xa0, 0x00, 0x00, 0x00, //0x00002539 jge LBB7_32 + 0xe9, 0xae, 0x00, 0x00, 0x00, //0x0000253f jmp LBB7_33 + //0x00002544 LBB7_24 + 0x4d, 0x29, 0xfc, //0x00002544 subq %r15, %r12 + 0x4d, 0x89, 0xe5, //0x00002547 movq %r12, %r13 + 0x4d, 0x85, 0xed, //0x0000254a testq %r13, %r13 + 0x0f, 0x89, 0xfd, 0x00, 0x00, 0x00, //0x0000254d jns LBB7_37 + 0xe9, 0x14, 0x02, 0x00, 0x00, //0x00002553 jmp LBB7_57 + //0x00002558 LBB7_25 + 0x4d, 0x89, 0xe6, //0x00002558 movq %r12, %r14 + 0x4c, 0x89, 0xe8, //0x0000255b movq %r13, %rax + 0x48, 0x83, 0xf8, 0x04, //0x0000255e cmpq $4, %rax + 0x0f, 0x8c, 0x12, 0x00, 0x00, 0x00, //0x00002562 jl LBB7_27 + //0x00002568 LBB7_26 + 0x41, 0x8b, 0x0e, //0x00002568 movl (%r14), %ecx + 0x41, 0x89, 0x08, //0x0000256b movl %ecx, (%r8) + 0x49, 0x83, 0xc6, 0x04, //0x0000256e addq $4, %r14 + 0x49, 0x83, 0xc0, 0x04, //0x00002572 addq $4, %r8 + 0x48, 0x83, 0xc0, 0xfc, //0x00002576 addq $-4, %rax + //0x0000257a LBB7_27 + 0x48, 0x83, 0xf8, 0x02, //0x0000257a cmpq $2, %rax + 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x0000257e jb LBB7_28 + 0x41, 0x0f, 0xb7, 0x0e, //0x00002584 movzwl (%r14), %ecx + 0x66, 0x41, 0x89, 0x08, //0x00002588 movw %cx, (%r8) + 0x49, 0x83, 0xc6, 0x02, //0x0000258c addq $2, %r14 + 0x49, 0x83, 0xc0, 0x02, //0x00002590 addq $2, %r8 + 0x48, 0x83, 0xc0, 0xfe, //0x00002594 addq $-2, %rax + 0x48, 0x85, 0xc0, //0x00002598 testq %rax, %rax + 0x0f, 0x85, 0x0e, 0x00, 0x00, 0x00, //0x0000259b jne LBB7_29 + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x000025a1 jmp LBB7_30 + //0x000025a6 LBB7_28 + 0x48, 0x85, 0xc0, //0x000025a6 testq %rax, %rax + 0x0f, 0x84, 0x06, 0x00, 0x00, 0x00, //0x000025a9 je LBB7_30 + //0x000025af LBB7_29 + 0x41, 0x8a, 0x06, //0x000025af movb (%r14), %al + 0x41, 0x88, 0x00, //0x000025b2 movb %al, (%r8) + //0x000025b5 LBB7_30 + 0x4d, 0x29, 0xfd, //0x000025b5 subq %r15, %r13 + 0x4d, 0x01, 0xe5, //0x000025b8 addq %r12, %r13 + 0x49, 0xf7, 0xd5, //0x000025bb notq %r13 + 0x49, 0x89, 0xd6, //0x000025be movq %rdx, %r14 + 0x4d, 0x85, 0xed, //0x000025c1 testq %r13, %r13 + 0x0f, 0x89, 0x86, 0x00, 0x00, 0x00, //0x000025c4 jns LBB7_37 + 0xe9, 0x9d, 0x01, 0x00, 0x00, //0x000025ca jmp LBB7_57 + //0x000025cf LBB7_31 + 0x4d, 0x89, 0xe5, //0x000025cf movq %r12, %r13 + 0x4c, 0x89, 0xf0, //0x000025d2 movq %r14, %rax + 0x48, 0x83, 0xf8, 0x04, //0x000025d5 cmpq $4, %rax + 0x0f, 0x8c, 0x13, 0x00, 0x00, 0x00, //0x000025d9 jl LBB7_33 + //0x000025df LBB7_32 + 0x41, 0x8b, 0x4d, 0x00, //0x000025df movl (%r13), %ecx + 0x41, 0x89, 0x08, //0x000025e3 movl %ecx, (%r8) + 0x49, 0x83, 0xc5, 0x04, //0x000025e6 addq $4, %r13 + 0x49, 0x83, 0xc0, 0x04, //0x000025ea addq $4, %r8 + 0x48, 0x83, 0xc0, 0xfc, //0x000025ee addq $-4, %rax + //0x000025f2 LBB7_33 + 0x48, 0x83, 0xf8, 0x02, //0x000025f2 cmpq $2, %rax + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x000025f6 jb LBB7_34 + 0x41, 0x0f, 0xb7, 0x4d, 0x00, //0x000025fc movzwl (%r13), %ecx + 0x66, 0x41, 0x89, 0x08, //0x00002601 movw %cx, (%r8) + 0x49, 0x83, 0xc5, 0x02, //0x00002605 addq $2, %r13 + 0x49, 0x83, 0xc0, 0x02, //0x00002609 addq $2, %r8 + 0x48, 0x83, 0xc0, 0xfe, //0x0000260d addq $-2, %rax + 0x48, 0x85, 0xc0, //0x00002611 testq %rax, %rax + 0x0f, 0x85, 0x0e, 0x00, 0x00, 0x00, //0x00002614 jne LBB7_35 + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x0000261a jmp LBB7_36 + //0x0000261f LBB7_34 + 0x48, 0x85, 0xc0, //0x0000261f testq %rax, %rax + 0x0f, 0x84, 0x07, 0x00, 0x00, 0x00, //0x00002622 je LBB7_36 + //0x00002628 LBB7_35 + 0x41, 0x8a, 0x45, 0x00, //0x00002628 movb (%r13), %al + 0x41, 0x88, 0x00, //0x0000262c movb %al, (%r8) + //0x0000262f LBB7_36 + 0x4d, 0x29, 0xfc, //0x0000262f subq %r15, %r12 + 0x4d, 0x01, 0xf4, //0x00002632 addq %r14, %r12 + 0x4d, 0x89, 0xe5, //0x00002635 movq %r12, %r13 + 0x49, 0x89, 0xd6, //0x00002638 movq %rdx, %r14 + 0x4d, 0x85, 0xed, //0x0000263b testq %r13, %r13 + 0x0f, 0x88, 0x28, 0x01, 0x00, 0x00, //0x0000263e js LBB7_57 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002644 .p2align 4, 0x90 + //0x00002650 LBB7_37 + 0x4d, 0x01, 0xef, //0x00002650 addq %r13, %r15 + 0x4d, 0x01, 0xea, //0x00002653 addq %r13, %r10 + 0x4c, 0x29, 0xee, //0x00002656 subq %r13, %rsi + 0x0f, 0x8e, 0x2d, 0x01, 0x00, 0x00, //0x00002659 jle LBB7_58 + 0x4d, 0x29, 0xe9, //0x0000265f subq %r13, %r9 + 0x41, 0x8a, 0x0f, //0x00002662 movb (%r15), %cl + 0x80, 0xf9, 0xe2, //0x00002665 cmpb $-30, %cl + 0x0f, 0x84, 0xb1, 0x00, 0x00, 0x00, //0x00002668 je LBB7_51 + 0x4c, 0x89, 0xf8, //0x0000266e movq %r15, %rax + //0x00002671 LBB7_40 + 0x0f, 0xb6, 0xd1, //0x00002671 movzbl %cl, %edx + 0x48, 0xc1, 0xe2, 0x04, //0x00002674 shlq $4, %rdx + 0x4a, 0x8b, 0x3c, 0x1a, //0x00002678 movq (%rdx,%r11), %rdi + 0x48, 0x63, 0xdf, //0x0000267c movslq %edi, %rbx + 0x49, 0x29, 0xd9, //0x0000267f subq %rbx, %r9 + 0x0f, 0x8c, 0x1b, 0x01, 0x00, 0x00, //0x00002682 jl LBB7_60 + 0x48, 0xc1, 0xe7, 0x20, //0x00002688 shlq $32, %rdi + 0x4e, 0x8d, 0x7c, 0x1a, 0x08, //0x0000268c leaq $8(%rdx,%r11), %r15 + 0x48, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, //0x00002691 movabsq $12884901889, %rcx + 0x48, 0x39, 0xcf, //0x0000269b cmpq %rcx, %rdi + 0x0f, 0x8c, 0x2c, 0x00, 0x00, 0x00, //0x0000269e jl LBB7_43 + 0x41, 0x8b, 0x0f, //0x000026a4 movl (%r15), %ecx + 0x41, 0x89, 0x0a, //0x000026a7 movl %ecx, (%r10) + 0x4e, 0x8d, 0x7c, 0x1a, 0x0c, //0x000026aa leaq $12(%rdx,%r11), %r15 + 0x4d, 0x8d, 0x42, 0x04, //0x000026af leaq $4(%r10), %r8 + 0x48, 0x8d, 0x7b, 0xfc, //0x000026b3 leaq $-4(%rbx), %rdi + 0x48, 0x83, 0xff, 0x02, //0x000026b7 cmpq $2, %rdi + 0x0f, 0x83, 0x1f, 0x00, 0x00, 0x00, //0x000026bb jae LBB7_44 + 0xe9, 0x2e, 0x00, 0x00, 0x00, //0x000026c1 jmp LBB7_45 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000026c6 .p2align 4, 0x90 + //0x000026d0 LBB7_43 + 0x4d, 0x89, 0xd0, //0x000026d0 movq %r10, %r8 + 0x48, 0x89, 0xdf, //0x000026d3 movq %rbx, %rdi + 0x48, 0x83, 0xff, 0x02, //0x000026d6 cmpq $2, %rdi + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x000026da jb LBB7_45 + //0x000026e0 LBB7_44 + 0x41, 0x0f, 0xb7, 0x17, //0x000026e0 movzwl (%r15), %edx + 0x66, 0x41, 0x89, 0x10, //0x000026e4 movw %dx, (%r8) + 0x49, 0x83, 0xc7, 0x02, //0x000026e8 addq $2, %r15 + 0x49, 0x83, 0xc0, 0x02, //0x000026ec addq $2, %r8 + 0x48, 0x83, 0xc7, 0xfe, //0x000026f0 addq $-2, %rdi + //0x000026f4 LBB7_45 + 0x48, 0x85, 0xff, //0x000026f4 testq %rdi, %rdi + 0x0f, 0x84, 0x06, 0x00, 0x00, 0x00, //0x000026f7 je LBB7_47 + 0x41, 0x8a, 0x0f, //0x000026fd movb (%r15), %cl + 0x41, 0x88, 0x08, //0x00002700 movb %cl, (%r8) + //0x00002703 LBB7_47 + 0x49, 0x01, 0xda, //0x00002703 addq %rbx, %r10 + //0x00002706 LBB7_48 + 0x48, 0xff, 0xc0, //0x00002706 incq %rax + 0x49, 0x89, 0xc7, //0x00002709 movq %rax, %r15 + 0x48, 0x83, 0xfe, 0x01, //0x0000270c cmpq $1, %rsi + 0x48, 0x8d, 0x76, 0xff, //0x00002710 leaq $-1(%rsi), %rsi + 0x0f, 0x8f, 0x26, 0xfc, 0xff, 0xff, //0x00002714 jg LBB7_2 + 0xe9, 0x70, 0x00, 0x00, 0x00, //0x0000271a jmp LBB7_59 + //0x0000271f LBB7_51 + 0x48, 0x83, 0xfe, 0x03, //0x0000271f cmpq $3, %rsi + 0x0f, 0x8c, 0x28, 0x00, 0x00, 0x00, //0x00002723 jl LBB7_55 + 0x41, 0x80, 0x7f, 0x01, 0x80, //0x00002729 cmpb $-128, $1(%r15) + 0x0f, 0x85, 0x1d, 0x00, 0x00, 0x00, //0x0000272e jne LBB7_55 + 0x41, 0x8a, 0x4f, 0x02, //0x00002734 movb $2(%r15), %cl + 0x89, 0xc8, //0x00002738 movl %ecx, %eax + 0x24, 0xfe, //0x0000273a andb $-2, %al + 0x3c, 0xa8, //0x0000273c cmpb $-88, %al + 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x0000273e jne LBB7_55 + 0x49, 0x8d, 0x47, 0x02, //0x00002744 leaq $2(%r15), %rax + 0x48, 0x83, 0xc6, 0xfe, //0x00002748 addq $-2, %rsi + 0xe9, 0x20, 0xff, 0xff, 0xff, //0x0000274c jmp LBB7_40 + //0x00002751 LBB7_55 + 0x4d, 0x85, 0xc9, //0x00002751 testq %r9, %r9 + 0x0f, 0x8e, 0x54, 0x00, 0x00, 0x00, //0x00002754 jle LBB7_61 + 0x41, 0xc6, 0x02, 0xe2, //0x0000275a movb $-30, (%r10) + 0x49, 0xff, 0xc2, //0x0000275e incq %r10 + 0x49, 0xff, 0xc9, //0x00002761 decq %r9 + 0x4c, 0x89, 0xf8, //0x00002764 movq %r15, %rax + 0xe9, 0x9a, 0xff, 0xff, 0xff, //0x00002767 jmp LBB7_48 + //0x0000276c LBB7_57 + 0x4c, 0x2b, 0x55, 0xc8, //0x0000276c subq $-56(%rbp), %r10 + 0x49, 0xf7, 0xd5, //0x00002770 notq %r13 + 0x4d, 0x01, 0xea, //0x00002773 addq %r13, %r10 + 0x48, 0x8b, 0x45, 0xc0, //0x00002776 movq $-64(%rbp), %rax + 0x4c, 0x89, 0x10, //0x0000277a movq %r10, (%rax) + 0x4c, 0x2b, 0x7d, 0xd0, //0x0000277d subq $-48(%rbp), %r15 + 0x4d, 0x01, 0xef, //0x00002781 addq %r13, %r15 + 0x49, 0xf7, 0xd7, //0x00002784 notq %r15 + 0xe9, 0x29, 0x00, 0x00, 0x00, //0x00002787 jmp LBB7_62 + //0x0000278c LBB7_58 + 0x4c, 0x89, 0xf8, //0x0000278c movq %r15, %rax + //0x0000278f LBB7_59 + 0x4c, 0x2b, 0x55, 0xc8, //0x0000278f subq $-56(%rbp), %r10 + 0x48, 0x8b, 0x4d, 0xc0, //0x00002793 movq $-64(%rbp), %rcx + 0x4c, 0x89, 0x11, //0x00002797 movq %r10, (%rcx) + 0x48, 0x2b, 0x45, 0xd0, //0x0000279a subq $-48(%rbp), %rax + 0xe9, 0x15, 0x00, 0x00, 0x00, //0x0000279e jmp LBB7_63 + //0x000027a3 LBB7_60 + 0x4c, 0x2b, 0x55, 0xc8, //0x000027a3 subq $-56(%rbp), %r10 + 0x48, 0x8b, 0x45, 0xc0, //0x000027a7 movq $-64(%rbp), %rax + 0x4c, 0x89, 0x10, //0x000027ab movq %r10, (%rax) + //0x000027ae LBB7_61 + 0x49, 0xf7, 0xd7, //0x000027ae notq %r15 + 0x4c, 0x03, 0x7d, 0xd0, //0x000027b1 addq $-48(%rbp), %r15 + //0x000027b5 LBB7_62 + 0x4c, 0x89, 0xf8, //0x000027b5 movq %r15, %rax + //0x000027b8 LBB7_63 + 0x48, 0x83, 0xc4, 0x18, //0x000027b8 addq $24, %rsp + 0x5b, //0x000027bc popq %rbx + 0x41, 0x5c, //0x000027bd popq %r12 + 0x41, 0x5d, //0x000027bf popq %r13 + 0x41, 0x5e, //0x000027c1 popq %r14 + 0x41, 0x5f, //0x000027c3 popq %r15 + 0x5d, //0x000027c5 popq %rbp + 0xc3, //0x000027c6 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000027c7 .p2align 4, 0x90 + //0x000027d0 _atof_eisel_lemire64 + 0x55, //0x000027d0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000027d1 movq %rsp, %rbp + 0x41, 0x57, //0x000027d4 pushq %r15 + 0x41, 0x56, //0x000027d6 pushq %r14 + 0x53, //0x000027d8 pushq %rbx + 0x8d, 0x86, 0x5c, 0x01, 0x00, 0x00, //0x000027d9 leal $348(%rsi), %eax + 0x3d, 0xb7, 0x02, 0x00, 0x00, //0x000027df cmpl $695, %eax + 0x0f, 0x87, 0x08, 0x01, 0x00, 0x00, //0x000027e4 ja LBB8_1 + 0x49, 0x89, 0xc8, //0x000027ea movq %rcx, %r8 + 0x41, 0x89, 0xd1, //0x000027ed movl %edx, %r9d + 0x48, 0x85, 0xff, //0x000027f0 testq %rdi, %rdi + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000027f3 je LBB8_4 + 0x4c, 0x0f, 0xbd, 0xd7, //0x000027f9 bsrq %rdi, %r10 + 0x49, 0x83, 0xf2, 0x3f, //0x000027fd xorq $63, %r10 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00002801 jmp LBB8_5 + //0x00002806 LBB8_4 + 0x41, 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002806 movl $64, %r10d + //0x0000280c LBB8_5 + 0x44, 0x89, 0xd1, //0x0000280c movl %r10d, %ecx + 0x48, 0xd3, 0xe7, //0x0000280f shlq %cl, %rdi + 0x89, 0xc1, //0x00002812 movl %eax, %ecx + 0x48, 0xc1, 0xe1, 0x04, //0x00002814 shlq $4, %rcx + 0x4c, 0x8d, 0x3d, 0x41, 0x6d, 0x00, 0x00, //0x00002818 leaq $27969(%rip), %r15 /* _POW10_M128_TAB+0(%rip) */ + 0x48, 0x89, 0xf8, //0x0000281f movq %rdi, %rax + 0x4a, 0xf7, 0x64, 0x39, 0x08, //0x00002822 mulq $8(%rcx,%r15) + 0x49, 0x89, 0xc3, //0x00002827 movq %rax, %r11 + 0x49, 0x89, 0xd6, //0x0000282a movq %rdx, %r14 + 0x81, 0xe2, 0xff, 0x01, 0x00, 0x00, //0x0000282d andl $511, %edx + 0x48, 0x89, 0xfb, //0x00002833 movq %rdi, %rbx + 0x48, 0xf7, 0xd3, //0x00002836 notq %rbx + 0x48, 0x39, 0xd8, //0x00002839 cmpq %rbx, %rax + 0x0f, 0x86, 0x42, 0x00, 0x00, 0x00, //0x0000283c jbe LBB8_11 + 0x81, 0xfa, 0xff, 0x01, 0x00, 0x00, //0x00002842 cmpl $511, %edx + 0x0f, 0x85, 0x36, 0x00, 0x00, 0x00, //0x00002848 jne LBB8_11 + 0x48, 0x89, 0xf8, //0x0000284e movq %rdi, %rax + 0x4a, 0xf7, 0x24, 0x39, //0x00002851 mulq (%rcx,%r15) + 0x49, 0x01, 0xd3, //0x00002855 addq %rdx, %r11 + 0x49, 0x83, 0xd6, 0x00, //0x00002858 adcq $0, %r14 + 0x44, 0x89, 0xf2, //0x0000285c movl %r14d, %edx + 0x81, 0xe2, 0xff, 0x01, 0x00, 0x00, //0x0000285f andl $511, %edx + 0x48, 0x39, 0xd8, //0x00002865 cmpq %rbx, %rax + 0x0f, 0x86, 0x16, 0x00, 0x00, 0x00, //0x00002868 jbe LBB8_11 + 0x49, 0x83, 0xfb, 0xff, //0x0000286e cmpq $-1, %r11 + 0x0f, 0x85, 0x0c, 0x00, 0x00, 0x00, //0x00002872 jne LBB8_11 + 0x81, 0xfa, 0xff, 0x01, 0x00, 0x00, //0x00002878 cmpl $511, %edx + 0x0f, 0x84, 0x6e, 0x00, 0x00, 0x00, //0x0000287e je LBB8_1 + //0x00002884 LBB8_11 + 0x4c, 0x89, 0xf7, //0x00002884 movq %r14, %rdi + 0x48, 0xc1, 0xef, 0x3f, //0x00002887 shrq $63, %rdi + 0x8d, 0x4f, 0x09, //0x0000288b leal $9(%rdi), %ecx + 0x49, 0xd3, 0xee, //0x0000288e shrq %cl, %r14 + 0x4c, 0x09, 0xda, //0x00002891 orq %r11, %rdx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00002894 jne LBB8_14 + 0x44, 0x89, 0xf0, //0x0000289a movl %r14d, %eax + 0x83, 0xe0, 0x03, //0x0000289d andl $3, %eax + 0x83, 0xf8, 0x01, //0x000028a0 cmpl $1, %eax + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x000028a3 je LBB8_1 + //0x000028a9 LBB8_14 + 0x69, 0xc6, 0x6a, 0x52, 0x03, 0x00, //0x000028a9 imull $217706, %esi, %eax + 0xc1, 0xf8, 0x10, //0x000028af sarl $16, %eax + 0x05, 0x3f, 0x04, 0x00, 0x00, //0x000028b2 addl $1087, %eax + 0x48, 0x98, //0x000028b7 cltq + 0x4c, 0x29, 0xd0, //0x000028b9 subq %r10, %rax + 0x48, 0x83, 0xf7, 0x01, //0x000028bc xorq $1, %rdi + 0x48, 0x29, 0xf8, //0x000028c0 subq %rdi, %rax + 0x44, 0x89, 0xf2, //0x000028c3 movl %r14d, %edx + 0x83, 0xe2, 0x01, //0x000028c6 andl $1, %edx + 0x4c, 0x01, 0xf2, //0x000028c9 addq %r14, %rdx + 0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, //0x000028cc movabsq $126100789566373888, %rcx + 0x48, 0x21, 0xd1, //0x000028d6 andq %rdx, %rcx + 0x48, 0x83, 0xf9, 0x01, //0x000028d9 cmpq $1, %rcx + 0x48, 0x83, 0xd8, 0xff, //0x000028dd sbbq $-1, %rax + 0x48, 0x8d, 0x70, 0xff, //0x000028e1 leaq $-1(%rax), %rsi + 0x48, 0x81, 0xfe, 0xfd, 0x07, 0x00, 0x00, //0x000028e5 cmpq $2045, %rsi + 0x0f, 0x86, 0x09, 0x00, 0x00, 0x00, //0x000028ec jbe LBB8_16 + //0x000028f2 LBB8_1 + 0x31, 0xc0, //0x000028f2 xorl %eax, %eax + //0x000028f4 LBB8_17 + 0x5b, //0x000028f4 popq %rbx + 0x41, 0x5e, //0x000028f5 popq %r14 + 0x41, 0x5f, //0x000028f7 popq %r15 + 0x5d, //0x000028f9 popq %rbp + 0xc3, //0x000028fa retq + //0x000028fb LBB8_16 + 0x48, 0x83, 0xf9, 0x01, //0x000028fb cmpq $1, %rcx + 0xb1, 0x02, //0x000028ff movb $2, %cl + 0x80, 0xd9, 0x00, //0x00002901 sbbb $0, %cl + 0x48, 0xd3, 0xea, //0x00002904 shrq %cl, %rdx + 0x48, 0xc1, 0xe0, 0x34, //0x00002907 shlq $52, %rax + 0x48, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, //0x0000290b movabsq $4503599627370495, %rcx + 0x48, 0x21, 0xd1, //0x00002915 andq %rdx, %rcx + 0x48, 0x09, 0xc1, //0x00002918 orq %rax, %rcx + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x0000291b movabsq $-9223372036854775808, %rax + 0x48, 0x09, 0xc8, //0x00002925 orq %rcx, %rax + 0x41, 0x83, 0xf9, 0xff, //0x00002928 cmpl $-1, %r9d + 0x48, 0x0f, 0x45, 0xc1, //0x0000292c cmovneq %rcx, %rax + 0x49, 0x89, 0x00, //0x00002930 movq %rax, (%r8) + 0xb0, 0x01, //0x00002933 movb $1, %al + 0xe9, 0xba, 0xff, 0xff, 0xff, //0x00002935 jmp LBB8_17 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000293a .p2align 4, 0x90 + //0x00002940 _decimal_to_f64 + 0x55, //0x00002940 pushq %rbp + 0x48, 0x89, 0xe5, //0x00002941 movq %rsp, %rbp + 0x41, 0x57, //0x00002944 pushq %r15 + 0x41, 0x56, //0x00002946 pushq %r14 + 0x41, 0x55, //0x00002948 pushq %r13 + 0x41, 0x54, //0x0000294a pushq %r12 + 0x53, //0x0000294c pushq %rbx + 0x50, //0x0000294d pushq %rax + 0x48, 0x89, 0xf3, //0x0000294e movq %rsi, %rbx + 0x49, 0x89, 0xfc, //0x00002951 movq %rdi, %r12 + 0x49, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, //0x00002954 movabsq $4503599627370496, %r13 + 0x83, 0x7f, 0x10, 0x00, //0x0000295e cmpl $0, $16(%rdi) + 0x0f, 0x84, 0x30, 0x00, 0x00, 0x00, //0x00002962 je LBB9_4 + 0x49, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, //0x00002968 movabsq $9218868437227405312, %r14 + 0x41, 0x8b, 0x44, 0x24, 0x14, //0x00002972 movl $20(%r12), %eax + 0x45, 0x31, 0xff, //0x00002977 xorl %r15d, %r15d + 0x3d, 0x36, 0x01, 0x00, 0x00, //0x0000297a cmpl $310, %eax + 0x0f, 0x8f, 0x0e, 0x04, 0x00, 0x00, //0x0000297f jg LBB9_78 + 0x3d, 0xb6, 0xfe, 0xff, 0xff, //0x00002985 cmpl $-330, %eax + 0x0f, 0x8d, 0x13, 0x00, 0x00, 0x00, //0x0000298a jge LBB9_5 + 0x45, 0x31, 0xf6, //0x00002990 xorl %r14d, %r14d + 0xe9, 0xfb, 0x03, 0x00, 0x00, //0x00002993 jmp LBB9_78 + //0x00002998 LBB9_4 + 0x45, 0x31, 0xf6, //0x00002998 xorl %r14d, %r14d + 0x45, 0x31, 0xff, //0x0000299b xorl %r15d, %r15d + 0xe9, 0xf0, 0x03, 0x00, 0x00, //0x0000299e jmp LBB9_78 + //0x000029a3 LBB9_5 + 0x85, 0xc0, //0x000029a3 testl %eax, %eax + 0x48, 0x89, 0x5d, 0xd0, //0x000029a5 movq %rbx, $-48(%rbp) + 0x0f, 0x8e, 0xf1, 0x00, 0x00, 0x00, //0x000029a9 jle LBB9_22 + 0x45, 0x31, 0xff, //0x000029af xorl %r15d, %r15d + 0xe9, 0x25, 0x00, 0x00, 0x00, //0x000029b2 jmp LBB9_9 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000029b7 .p2align 4, 0x90 + //0x000029c0 LBB9_7 + 0xf7, 0xdb, //0x000029c0 negl %ebx + 0x4c, 0x89, 0xe7, //0x000029c2 movq %r12, %rdi + 0x89, 0xde, //0x000029c5 movl %ebx, %esi + 0xe8, 0x24, 0x66, 0x00, 0x00, //0x000029c7 callq _right_shift + //0x000029cc LBB9_8 + 0x45, 0x01, 0xf7, //0x000029cc addl %r14d, %r15d + 0x41, 0x8b, 0x44, 0x24, 0x14, //0x000029cf movl $20(%r12), %eax + 0x85, 0xc0, //0x000029d4 testl %eax, %eax + 0x0f, 0x8e, 0xc4, 0x00, 0x00, 0x00, //0x000029d6 jle LBB9_22 + //0x000029dc LBB9_9 + 0x41, 0xbe, 0x1b, 0x00, 0x00, 0x00, //0x000029dc movl $27, %r14d + 0x83, 0xf8, 0x08, //0x000029e2 cmpl $8, %eax + 0x0f, 0x8f, 0x0d, 0x00, 0x00, 0x00, //0x000029e5 jg LBB9_11 + 0x89, 0xc0, //0x000029eb movl %eax, %eax + 0x48, 0x8d, 0x0d, 0xfc, 0x96, 0x00, 0x00, //0x000029ed leaq $38652(%rip), %rcx /* _POW_TAB+0(%rip) */ + 0x44, 0x8b, 0x34, 0x81, //0x000029f4 movl (%rcx,%rax,4), %r14d + //0x000029f8 LBB9_11 + 0x45, 0x85, 0xf6, //0x000029f8 testl %r14d, %r14d + 0x0f, 0x84, 0xcb, 0xff, 0xff, 0xff, //0x000029fb je LBB9_8 + 0x41, 0x83, 0x7c, 0x24, 0x10, 0x00, //0x00002a01 cmpl $0, $16(%r12) + 0x0f, 0x84, 0xbf, 0xff, 0xff, 0xff, //0x00002a07 je LBB9_8 + 0x44, 0x89, 0xf3, //0x00002a0d movl %r14d, %ebx + 0xf7, 0xdb, //0x00002a10 negl %ebx + 0x45, 0x85, 0xf6, //0x00002a12 testl %r14d, %r14d + 0x0f, 0x88, 0x35, 0x00, 0x00, 0x00, //0x00002a15 js LBB9_16 + 0x41, 0x83, 0xfe, 0x3d, //0x00002a1b cmpl $61, %r14d + 0x0f, 0x8c, 0x9b, 0xff, 0xff, 0xff, //0x00002a1f jl LBB9_7 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002a25 .p2align 4, 0x90 + //0x00002a30 LBB9_15 + 0x4c, 0x89, 0xe7, //0x00002a30 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00002a33 movl $60, %esi + 0xe8, 0xb3, 0x65, 0x00, 0x00, //0x00002a38 callq _right_shift + 0x8d, 0x43, 0x3c, //0x00002a3d leal $60(%rbx), %eax + 0x83, 0xfb, 0x88, //0x00002a40 cmpl $-120, %ebx + 0x89, 0xc3, //0x00002a43 movl %eax, %ebx + 0x0f, 0x8c, 0xe5, 0xff, 0xff, 0xff, //0x00002a45 jl LBB9_15 + 0xe9, 0x70, 0xff, 0xff, 0xff, //0x00002a4b jmp LBB9_7 + //0x00002a50 LBB9_16 + 0x41, 0x83, 0xfe, 0xc3, //0x00002a50 cmpl $-61, %r14d + 0x0f, 0x8f, 0x26, 0x00, 0x00, 0x00, //0x00002a54 jg LBB9_18 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002a5a .p2align 4, 0x90 + //0x00002a60 LBB9_17 + 0x4c, 0x89, 0xe7, //0x00002a60 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00002a63 movl $60, %esi + 0xe8, 0x93, 0x63, 0x00, 0x00, //0x00002a68 callq _left_shift + 0x8d, 0x73, 0xc4, //0x00002a6d leal $-60(%rbx), %esi + 0x83, 0xfb, 0x78, //0x00002a70 cmpl $120, %ebx + 0x89, 0xf3, //0x00002a73 movl %esi, %ebx + 0x0f, 0x8f, 0xe5, 0xff, 0xff, 0xff, //0x00002a75 jg LBB9_17 + 0xe9, 0x02, 0x00, 0x00, 0x00, //0x00002a7b jmp LBB9_19 + //0x00002a80 LBB9_18 + 0x89, 0xde, //0x00002a80 movl %ebx, %esi + //0x00002a82 LBB9_19 + 0x4c, 0x89, 0xe7, //0x00002a82 movq %r12, %rdi + 0xe8, 0x76, 0x63, 0x00, 0x00, //0x00002a85 callq _left_shift + 0xe9, 0x3d, 0xff, 0xff, 0xff, //0x00002a8a jmp LBB9_8 + 0x90, //0x00002a8f .p2align 4, 0x90 + //0x00002a90 LBB9_20 + 0x4c, 0x89, 0xe7, //0x00002a90 movq %r12, %rdi + 0xe8, 0x68, 0x63, 0x00, 0x00, //0x00002a93 callq _left_shift + //0x00002a98 LBB9_21 + 0x45, 0x29, 0xf7, //0x00002a98 subl %r14d, %r15d + 0x41, 0x8b, 0x44, 0x24, 0x14, //0x00002a9b movl $20(%r12), %eax + //0x00002aa0 LBB9_22 + 0x85, 0xc0, //0x00002aa0 testl %eax, %eax + 0x0f, 0x88, 0x18, 0x00, 0x00, 0x00, //0x00002aa2 js LBB9_25 + 0x0f, 0x85, 0xbe, 0x00, 0x00, 0x00, //0x00002aa8 jne LBB9_36 + 0x49, 0x8b, 0x0c, 0x24, //0x00002aae movq (%r12), %rcx + 0x80, 0x39, 0x35, //0x00002ab2 cmpb $53, (%rcx) + 0x0f, 0x8c, 0x14, 0x00, 0x00, 0x00, //0x00002ab5 jl LBB9_26 + 0xe9, 0xac, 0x00, 0x00, 0x00, //0x00002abb jmp LBB9_36 + //0x00002ac0 .p2align 4, 0x90 + //0x00002ac0 LBB9_25 + 0x41, 0xbe, 0x1b, 0x00, 0x00, 0x00, //0x00002ac0 movl $27, %r14d + 0x83, 0xf8, 0xf8, //0x00002ac6 cmpl $-8, %eax + 0x0f, 0x8c, 0x0f, 0x00, 0x00, 0x00, //0x00002ac9 jl LBB9_27 + //0x00002acf LBB9_26 + 0xf7, 0xd8, //0x00002acf negl %eax + 0x48, 0x98, //0x00002ad1 cltq + 0x48, 0x8d, 0x0d, 0x16, 0x96, 0x00, 0x00, //0x00002ad3 leaq $38422(%rip), %rcx /* _POW_TAB+0(%rip) */ + 0x44, 0x8b, 0x34, 0x81, //0x00002ada movl (%rcx,%rax,4), %r14d + //0x00002ade LBB9_27 + 0x45, 0x85, 0xf6, //0x00002ade testl %r14d, %r14d + 0x0f, 0x84, 0xb1, 0xff, 0xff, 0xff, //0x00002ae1 je LBB9_21 + 0x41, 0x83, 0x7c, 0x24, 0x10, 0x00, //0x00002ae7 cmpl $0, $16(%r12) + 0x0f, 0x84, 0xa5, 0xff, 0xff, 0xff, //0x00002aed je LBB9_21 + 0x45, 0x85, 0xf6, //0x00002af3 testl %r14d, %r14d + 0x0f, 0x8e, 0x34, 0x00, 0x00, 0x00, //0x00002af6 jle LBB9_33 + 0x44, 0x89, 0xf6, //0x00002afc movl %r14d, %esi + 0x41, 0x83, 0xfe, 0x3d, //0x00002aff cmpl $61, %r14d + 0x0f, 0x8c, 0x87, 0xff, 0xff, 0xff, //0x00002b03 jl LBB9_20 + 0x44, 0x89, 0xf3, //0x00002b09 movl %r14d, %ebx + 0x90, 0x90, 0x90, 0x90, //0x00002b0c .p2align 4, 0x90 + //0x00002b10 LBB9_32 + 0x4c, 0x89, 0xe7, //0x00002b10 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00002b13 movl $60, %esi + 0xe8, 0xe3, 0x62, 0x00, 0x00, //0x00002b18 callq _left_shift + 0x8d, 0x73, 0xc4, //0x00002b1d leal $-60(%rbx), %esi + 0x83, 0xfb, 0x78, //0x00002b20 cmpl $120, %ebx + 0x89, 0xf3, //0x00002b23 movl %esi, %ebx + 0x0f, 0x8f, 0xe5, 0xff, 0xff, 0xff, //0x00002b25 jg LBB9_32 + 0xe9, 0x60, 0xff, 0xff, 0xff, //0x00002b2b jmp LBB9_20 + //0x00002b30 LBB9_33 + 0x44, 0x89, 0xf3, //0x00002b30 movl %r14d, %ebx + 0x41, 0x83, 0xfe, 0xc3, //0x00002b33 cmpl $-61, %r14d + 0x0f, 0x8f, 0x1e, 0x00, 0x00, 0x00, //0x00002b37 jg LBB9_35 + 0x90, 0x90, 0x90, //0x00002b3d .p2align 4, 0x90 + //0x00002b40 LBB9_34 + 0x4c, 0x89, 0xe7, //0x00002b40 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00002b43 movl $60, %esi + 0xe8, 0xa3, 0x64, 0x00, 0x00, //0x00002b48 callq _right_shift + 0x8d, 0x43, 0x3c, //0x00002b4d leal $60(%rbx), %eax + 0x83, 0xfb, 0x88, //0x00002b50 cmpl $-120, %ebx + 0x89, 0xc3, //0x00002b53 movl %eax, %ebx + 0x0f, 0x8c, 0xe5, 0xff, 0xff, 0xff, //0x00002b55 jl LBB9_34 + //0x00002b5b LBB9_35 + 0xf7, 0xdb, //0x00002b5b negl %ebx + 0x4c, 0x89, 0xe7, //0x00002b5d movq %r12, %rdi + 0x89, 0xde, //0x00002b60 movl %ebx, %esi + 0xe8, 0x89, 0x64, 0x00, 0x00, //0x00002b62 callq _right_shift + 0xe9, 0x2c, 0xff, 0xff, 0xff, //0x00002b67 jmp LBB9_21 + //0x00002b6c LBB9_36 + 0x41, 0x81, 0xff, 0x02, 0xfc, 0xff, 0xff, //0x00002b6c cmpl $-1022, %r15d + 0x0f, 0x8f, 0x4b, 0x00, 0x00, 0x00, //0x00002b73 jg LBB9_42 + 0x41, 0x83, 0x7c, 0x24, 0x10, 0x00, //0x00002b79 cmpl $0, $16(%r12) + 0x48, 0x8b, 0x5d, 0xd0, //0x00002b7f movq $-48(%rbp), %rbx + 0x0f, 0x84, 0x57, 0x00, 0x00, 0x00, //0x00002b83 je LBB9_44 + 0x41, 0x81, 0xff, 0xc6, 0xfb, 0xff, 0xff, //0x00002b89 cmpl $-1082, %r15d + 0x0f, 0x8f, 0x55, 0x00, 0x00, 0x00, //0x00002b90 jg LBB9_45 + 0x41, 0x81, 0xc7, 0xc1, 0x03, 0x00, 0x00, //0x00002b96 addl $961, %r15d + 0x90, 0x90, 0x90, //0x00002b9d .p2align 4, 0x90 + //0x00002ba0 LBB9_40 + 0x4c, 0x89, 0xe7, //0x00002ba0 movq %r12, %rdi + 0xbe, 0x3c, 0x00, 0x00, 0x00, //0x00002ba3 movl $60, %esi + 0xe8, 0x43, 0x64, 0x00, 0x00, //0x00002ba8 callq _right_shift + 0x41, 0x83, 0xc7, 0x3c, //0x00002bad addl $60, %r15d + 0x41, 0x83, 0xff, 0x88, //0x00002bb1 cmpl $-120, %r15d + 0x0f, 0x8c, 0xe5, 0xff, 0xff, 0xff, //0x00002bb5 jl LBB9_40 + 0x41, 0x83, 0xc7, 0x3c, //0x00002bbb addl $60, %r15d + 0xe9, 0x2e, 0x00, 0x00, 0x00, //0x00002bbf jmp LBB9_46 + //0x00002bc4 LBB9_42 + 0x41, 0x81, 0xff, 0x00, 0x04, 0x00, 0x00, //0x00002bc4 cmpl $1024, %r15d + 0x48, 0x8b, 0x5d, 0xd0, //0x00002bcb movq $-48(%rbp), %rbx + 0x0f, 0x8f, 0x87, 0x01, 0x00, 0x00, //0x00002bcf jg LBB9_75 + 0x41, 0xff, 0xcf, //0x00002bd5 decl %r15d + 0x45, 0x89, 0xfe, //0x00002bd8 movl %r15d, %r14d + 0xe9, 0x26, 0x00, 0x00, 0x00, //0x00002bdb jmp LBB9_47 + //0x00002be0 LBB9_44 + 0x41, 0xbe, 0x02, 0xfc, 0xff, 0xff, //0x00002be0 movl $-1022, %r14d + 0xe9, 0x34, 0x00, 0x00, 0x00, //0x00002be6 jmp LBB9_49 + //0x00002beb LBB9_45 + 0x41, 0x81, 0xc7, 0xfd, 0x03, 0x00, 0x00, //0x00002beb addl $1021, %r15d + //0x00002bf2 LBB9_46 + 0x41, 0xf7, 0xdf, //0x00002bf2 negl %r15d + 0x4c, 0x89, 0xe7, //0x00002bf5 movq %r12, %rdi + 0x44, 0x89, 0xfe, //0x00002bf8 movl %r15d, %esi + 0xe8, 0xf0, 0x63, 0x00, 0x00, //0x00002bfb callq _right_shift + 0x41, 0xbe, 0x02, 0xfc, 0xff, 0xff, //0x00002c00 movl $-1022, %r14d + //0x00002c06 LBB9_47 + 0x41, 0x83, 0x7c, 0x24, 0x10, 0x00, //0x00002c06 cmpl $0, $16(%r12) + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00002c0c je LBB9_49 + 0x4c, 0x89, 0xe7, //0x00002c12 movq %r12, %rdi + 0xbe, 0x35, 0x00, 0x00, 0x00, //0x00002c15 movl $53, %esi + 0xe8, 0xe1, 0x61, 0x00, 0x00, //0x00002c1a callq _left_shift + //0x00002c1f LBB9_49 + 0x4d, 0x63, 0x44, 0x24, 0x14, //0x00002c1f movslq $20(%r12), %r8 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002c24 movq $-1, %r15 + 0x49, 0x83, 0xf8, 0x14, //0x00002c2b cmpq $20, %r8 + 0x0f, 0x8f, 0x3f, 0x01, 0x00, 0x00, //0x00002c2f jg LBB9_77 + 0x44, 0x89, 0xc1, //0x00002c35 movl %r8d, %ecx + 0x85, 0xc9, //0x00002c38 testl %ecx, %ecx + 0x0f, 0x8e, 0x3c, 0x00, 0x00, 0x00, //0x00002c3a jle LBB9_54 + 0x49, 0x63, 0x74, 0x24, 0x10, //0x00002c40 movslq $16(%r12), %rsi + 0x31, 0xd2, //0x00002c45 xorl %edx, %edx + 0x45, 0x31, 0xff, //0x00002c47 xorl %r15d, %r15d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002c4a .p2align 4, 0x90 + //0x00002c50 LBB9_52 + 0x48, 0x39, 0xf2, //0x00002c50 cmpq %rsi, %rdx + 0x0f, 0x8d, 0x28, 0x00, 0x00, 0x00, //0x00002c53 jge LBB9_55 + 0x4b, 0x8d, 0x04, 0xbf, //0x00002c59 leaq (%r15,%r15,4), %rax + 0x49, 0x8b, 0x3c, 0x24, //0x00002c5d movq (%r12), %rdi + 0x48, 0x0f, 0xbe, 0x3c, 0x17, //0x00002c61 movsbq (%rdi,%rdx), %rdi + 0x4c, 0x8d, 0x7c, 0x47, 0xd0, //0x00002c66 leaq $-48(%rdi,%rax,2), %r15 + 0x48, 0xff, 0xc2, //0x00002c6b incq %rdx + 0x48, 0x39, 0xd1, //0x00002c6e cmpq %rdx, %rcx + 0x0f, 0x85, 0xd9, 0xff, 0xff, 0xff, //0x00002c71 jne LBB9_52 + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00002c77 jmp LBB9_55 + //0x00002c7c LBB9_54 + 0x31, 0xd2, //0x00002c7c xorl %edx, %edx + 0x45, 0x31, 0xff, //0x00002c7e xorl %r15d, %r15d + //0x00002c81 LBB9_55 + 0x41, 0x39, 0xd0, //0x00002c81 cmpl %edx, %r8d + 0x0f, 0x8e, 0x56, 0x00, 0x00, 0x00, //0x00002c84 jle LBB9_63 + 0x89, 0xcf, //0x00002c8a movl %ecx, %edi + 0x29, 0xd7, //0x00002c8c subl %edx, %edi + 0x89, 0xd6, //0x00002c8e movl %edx, %esi + 0xf7, 0xd6, //0x00002c90 notl %esi + 0x44, 0x01, 0xc6, //0x00002c92 addl %r8d, %esi + 0x83, 0xe7, 0x07, //0x00002c95 andl $7, %edi + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00002c98 je LBB9_60 + 0xf7, 0xdf, //0x00002c9e negl %edi + 0x31, 0xc0, //0x00002ca0 xorl %eax, %eax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002ca2 .p2align 4, 0x90 + //0x00002cb0 LBB9_58 + 0x4d, 0x01, 0xff, //0x00002cb0 addq %r15, %r15 + 0x4f, 0x8d, 0x3c, 0xbf, //0x00002cb3 leaq (%r15,%r15,4), %r15 + 0xff, 0xc8, //0x00002cb7 decl %eax + 0x39, 0xc7, //0x00002cb9 cmpl %eax, %edi + 0x0f, 0x85, 0xef, 0xff, 0xff, 0xff, //0x00002cbb jne LBB9_58 + 0x29, 0xc2, //0x00002cc1 subl %eax, %edx + //0x00002cc3 LBB9_60 + 0x83, 0xfe, 0x07, //0x00002cc3 cmpl $7, %esi + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00002cc6 jb LBB9_63 + 0x89, 0xc8, //0x00002ccc movl %ecx, %eax + 0x29, 0xd0, //0x00002cce subl %edx, %eax + //0x00002cd0 .p2align 4, 0x90 + //0x00002cd0 LBB9_62 + 0x4d, 0x69, 0xff, 0x00, 0xe1, 0xf5, 0x05, //0x00002cd0 imulq $100000000, %r15, %r15 + 0x83, 0xc0, 0xf8, //0x00002cd7 addl $-8, %eax + 0x0f, 0x85, 0xf0, 0xff, 0xff, 0xff, //0x00002cda jne LBB9_62 + //0x00002ce0 LBB9_63 + 0x85, 0xc9, //0x00002ce0 testl %ecx, %ecx + 0x0f, 0x88, 0x4c, 0x00, 0x00, 0x00, //0x00002ce2 js LBB9_71 + 0x41, 0x8b, 0x54, 0x24, 0x10, //0x00002ce8 movl $16(%r12), %edx + 0x44, 0x39, 0xc2, //0x00002ced cmpl %r8d, %edx + 0x0f, 0x8e, 0x3e, 0x00, 0x00, 0x00, //0x00002cf0 jle LBB9_71 + 0x49, 0x8b, 0x34, 0x24, //0x00002cf6 movq (%r12), %rsi + 0x8a, 0x04, 0x0e, //0x00002cfa movb (%rsi,%rcx), %al + 0x8d, 0x79, 0x01, //0x00002cfd leal $1(%rcx), %edi + 0x39, 0xd7, //0x00002d00 cmpl %edx, %edi + 0x0f, 0x85, 0xbf, 0x00, 0x00, 0x00, //0x00002d02 jne LBB9_72 + 0x3c, 0x35, //0x00002d08 cmpb $53, %al + 0x0f, 0x85, 0xb7, 0x00, 0x00, 0x00, //0x00002d0a jne LBB9_72 + 0x41, 0x83, 0x7c, 0x24, 0x1c, 0x00, //0x00002d10 cmpl $0, $28(%r12) + 0x0f, 0x95, 0xc2, //0x00002d16 setne %dl + 0x0f, 0x85, 0x17, 0x00, 0x00, 0x00, //0x00002d19 jne LBB9_73 + 0x85, 0xc9, //0x00002d1f testl %ecx, %ecx + 0x0f, 0x8e, 0x0f, 0x00, 0x00, 0x00, //0x00002d21 jle LBB9_73 + 0x41, 0x8a, 0x54, 0x30, 0xff, //0x00002d27 movb $-1(%r8,%rsi), %dl + 0x80, 0xe2, 0x01, //0x00002d2c andb $1, %dl + 0xe9, 0x02, 0x00, 0x00, 0x00, //0x00002d2f jmp LBB9_73 + //0x00002d34 LBB9_71 + 0x31, 0xd2, //0x00002d34 xorl %edx, %edx + //0x00002d36 LBB9_73 + 0x0f, 0xb6, 0xc2, //0x00002d36 movzbl %dl, %eax + 0x49, 0x01, 0xc7, //0x00002d39 addq %rax, %r15 + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, //0x00002d3c movabsq $9007199254740992, %rax + 0x49, 0x39, 0xc7, //0x00002d46 cmpq %rax, %r15 + 0x0f, 0x85, 0x25, 0x00, 0x00, 0x00, //0x00002d49 jne LBB9_77 + 0x41, 0x81, 0xfe, 0xfe, 0x03, 0x00, 0x00, //0x00002d4f cmpl $1022, %r14d + 0x0f, 0x8e, 0x12, 0x00, 0x00, 0x00, //0x00002d56 jle LBB9_76 + //0x00002d5c LBB9_75 + 0x45, 0x31, 0xff, //0x00002d5c xorl %r15d, %r15d + 0x49, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, //0x00002d5f movabsq $9218868437227405312, %r14 + 0xe9, 0x25, 0x00, 0x00, 0x00, //0x00002d69 jmp LBB9_78 + //0x00002d6e LBB9_76 + 0x41, 0xff, 0xc6, //0x00002d6e incl %r14d + 0x4d, 0x89, 0xef, //0x00002d71 movq %r13, %r15 + //0x00002d74 LBB9_77 + 0x4c, 0x89, 0xf8, //0x00002d74 movq %r15, %rax + 0x4c, 0x21, 0xe8, //0x00002d77 andq %r13, %rax + 0x41, 0x81, 0xc6, 0xff, 0x03, 0x00, 0x00, //0x00002d7a addl $1023, %r14d + 0x41, 0x81, 0xe6, 0xff, 0x07, 0x00, 0x00, //0x00002d81 andl $2047, %r14d + 0x49, 0xc1, 0xe6, 0x34, //0x00002d88 shlq $52, %r14 + 0x48, 0x85, 0xc0, //0x00002d8c testq %rax, %rax + 0x4c, 0x0f, 0x44, 0xf0, //0x00002d8f cmoveq %rax, %r14 + //0x00002d93 LBB9_78 + 0x49, 0xff, 0xcd, //0x00002d93 decq %r13 + 0x4d, 0x21, 0xfd, //0x00002d96 andq %r15, %r13 + 0x4d, 0x09, 0xf5, //0x00002d99 orq %r14, %r13 + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x00002d9c movabsq $-9223372036854775808, %rax + 0x4c, 0x09, 0xe8, //0x00002da6 orq %r13, %rax + 0x41, 0x83, 0x7c, 0x24, 0x18, 0x00, //0x00002da9 cmpl $0, $24(%r12) + 0x49, 0x0f, 0x44, 0xc5, //0x00002daf cmoveq %r13, %rax + 0x48, 0x89, 0x03, //0x00002db3 movq %rax, (%rbx) + 0x31, 0xc0, //0x00002db6 xorl %eax, %eax + 0x48, 0x83, 0xc4, 0x08, //0x00002db8 addq $8, %rsp + 0x5b, //0x00002dbc popq %rbx + 0x41, 0x5c, //0x00002dbd popq %r12 + 0x41, 0x5d, //0x00002dbf popq %r13 + 0x41, 0x5e, //0x00002dc1 popq %r14 + 0x41, 0x5f, //0x00002dc3 popq %r15 + 0x5d, //0x00002dc5 popq %rbp + 0xc3, //0x00002dc6 retq + //0x00002dc7 LBB9_72 + 0x3c, 0x34, //0x00002dc7 cmpb $52, %al + 0x0f, 0x9f, 0xc2, //0x00002dc9 setg %dl + 0xe9, 0x65, 0xff, 0xff, 0xff, //0x00002dcc jmp LBB9_73 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002dd1 .p2align 4, 0x90 + //0x00002de0 _atof_native + 0x55, //0x00002de0 pushq %rbp + 0x48, 0x89, 0xe5, //0x00002de1 movq %rsp, %rbp + 0x48, 0x83, 0xec, 0x30, //0x00002de4 subq $48, %rsp + 0x48, 0xc7, 0x45, 0xd8, 0x00, 0x00, 0x00, 0x00, //0x00002de8 movq $0, $-40(%rbp) + 0x48, 0x89, 0x55, 0xe0, //0x00002df0 movq %rdx, $-32(%rbp) + 0x48, 0x89, 0x4d, 0xe8, //0x00002df4 movq %rcx, $-24(%rbp) + 0x48, 0x85, 0xc9, //0x00002df8 testq %rcx, %rcx + 0x0f, 0x84, 0x44, 0x00, 0x00, 0x00, //0x00002dfb je LBB10_5 + 0xc6, 0x02, 0x00, //0x00002e01 movb $0, (%rdx) + 0x48, 0x83, 0xf9, 0x01, //0x00002e04 cmpq $1, %rcx + 0x0f, 0x84, 0x37, 0x00, 0x00, 0x00, //0x00002e08 je LBB10_5 + 0xc6, 0x42, 0x01, 0x00, //0x00002e0e movb $0, $1(%rdx) + 0x48, 0x83, 0x7d, 0xe8, 0x03, //0x00002e12 cmpq $3, $-24(%rbp) + 0x0f, 0x82, 0x28, 0x00, 0x00, 0x00, //0x00002e17 jb LBB10_5 + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00002e1d movl $2, %eax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002e22 .p2align 4, 0x90 + //0x00002e30 LBB10_4 + 0x48, 0x8b, 0x4d, 0xe0, //0x00002e30 movq $-32(%rbp), %rcx + 0xc6, 0x04, 0x01, 0x00, //0x00002e34 movb $0, (%rcx,%rax) + 0x48, 0xff, 0xc0, //0x00002e38 incq %rax + 0x48, 0x39, 0x45, 0xe8, //0x00002e3b cmpq %rax, $-24(%rbp) + 0x0f, 0x87, 0xeb, 0xff, 0xff, 0xff, //0x00002e3f ja LBB10_4 + //0x00002e45 LBB10_5 + 0x0f, 0x57, 0xc0, //0x00002e45 xorps %xmm0, %xmm0 + 0x0f, 0x11, 0x45, 0xf0, //0x00002e48 movups %xmm0, $-16(%rbp) + 0x80, 0x3f, 0x2d, //0x00002e4c cmpb $45, (%rdi) + 0x0f, 0x85, 0x21, 0x00, 0x00, 0x00, //0x00002e4f jne LBB10_6 + 0xc7, 0x45, 0xf8, 0x01, 0x00, 0x00, 0x00, //0x00002e55 movl $1, $-8(%rbp) + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00002e5c movl $1, %eax + 0x48, 0x39, 0xf0, //0x00002e61 cmpq %rsi, %rax + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x00002e64 jl LBB10_9 + //0x00002e6a LBB10_41 + 0xc7, 0x45, 0xf4, 0x00, 0x00, 0x00, 0x00, //0x00002e6a movl $0, $-12(%rbp) + 0xe9, 0xa3, 0x01, 0x00, 0x00, //0x00002e71 jmp LBB10_40 + //0x00002e76 LBB10_6 + 0x31, 0xc0, //0x00002e76 xorl %eax, %eax + 0x48, 0x39, 0xf0, //0x00002e78 cmpq %rsi, %rax + 0x0f, 0x8d, 0xe9, 0xff, 0xff, 0xff, //0x00002e7b jge LBB10_41 + //0x00002e81 LBB10_9 + 0x41, 0xb3, 0x01, //0x00002e81 movb $1, %r11b + 0x45, 0x31, 0xc9, //0x00002e84 xorl %r9d, %r9d + 0x45, 0x31, 0xd2, //0x00002e87 xorl %r10d, %r10d + 0x45, 0x31, 0xc0, //0x00002e8a xorl %r8d, %r8d + 0xe9, 0x27, 0x00, 0x00, 0x00, //0x00002e8d jmp LBB10_10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002e92 .p2align 4, 0x90 + //0x00002ea0 LBB10_13 + 0xff, 0x4d, 0xf4, //0x00002ea0 decl $-12(%rbp) + 0x45, 0x31, 0xd2, //0x00002ea3 xorl %r10d, %r10d + //0x00002ea6 LBB10_22 + 0x48, 0xff, 0xc0, //0x00002ea6 incq %rax + 0x48, 0x39, 0xf0, //0x00002ea9 cmpq %rsi, %rax + 0x41, 0x0f, 0x9c, 0xc3, //0x00002eac setl %r11b + 0x48, 0x39, 0xc6, //0x00002eb0 cmpq %rax, %rsi + 0x0f, 0x84, 0x8f, 0x00, 0x00, 0x00, //0x00002eb3 je LBB10_23 + //0x00002eb9 LBB10_10 + 0x0f, 0xb6, 0x0c, 0x07, //0x00002eb9 movzbl (%rdi,%rax), %ecx + 0x8d, 0x51, 0xd0, //0x00002ebd leal $-48(%rcx), %edx + 0x80, 0xfa, 0x09, //0x00002ec0 cmpb $9, %dl + 0x0f, 0x87, 0x47, 0x00, 0x00, 0x00, //0x00002ec3 ja LBB10_19 + 0x45, 0x85, 0xd2, //0x00002ec9 testl %r10d, %r10d + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00002ecc jne LBB10_14 + 0x80, 0xf9, 0x30, //0x00002ed2 cmpb $48, %cl + 0x0f, 0x84, 0xc5, 0xff, 0xff, 0xff, //0x00002ed5 je LBB10_13 + //0x00002edb LBB10_14 + 0x4d, 0x63, 0xd1, //0x00002edb movslq %r9d, %r10 + 0x4c, 0x39, 0x55, 0xe8, //0x00002ede cmpq %r10, $-24(%rbp) + 0x0f, 0x86, 0x40, 0x00, 0x00, 0x00, //0x00002ee2 jbe LBB10_16 + 0x48, 0x8b, 0x55, 0xe0, //0x00002ee8 movq $-32(%rbp), %rdx + 0x42, 0x88, 0x0c, 0x12, //0x00002eec movb %cl, (%rdx,%r10) + 0x44, 0x8b, 0x4d, 0xf0, //0x00002ef0 movl $-16(%rbp), %r9d + 0x41, 0xff, 0xc1, //0x00002ef4 incl %r9d + 0x44, 0x89, 0x4d, 0xf0, //0x00002ef7 movl %r9d, $-16(%rbp) + 0x45, 0x89, 0xca, //0x00002efb movl %r9d, %r10d + 0xe9, 0xa3, 0xff, 0xff, 0xff, //0x00002efe jmp LBB10_22 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002f03 .p2align 4, 0x90 + //0x00002f10 LBB10_19 + 0x80, 0xf9, 0x2e, //0x00002f10 cmpb $46, %cl + 0x0f, 0x85, 0x80, 0x00, 0x00, 0x00, //0x00002f13 jne LBB10_20 + 0x44, 0x89, 0x55, 0xf4, //0x00002f19 movl %r10d, $-12(%rbp) + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00002f1d movl $1, %r8d + 0xe9, 0x7e, 0xff, 0xff, 0xff, //0x00002f23 jmp LBB10_22 + //0x00002f28 LBB10_16 + 0x80, 0xf9, 0x30, //0x00002f28 cmpb $48, %cl + 0x0f, 0x85, 0x08, 0x00, 0x00, 0x00, //0x00002f2b jne LBB10_18 + 0x45, 0x89, 0xca, //0x00002f31 movl %r9d, %r10d + 0xe9, 0x6d, 0xff, 0xff, 0xff, //0x00002f34 jmp LBB10_22 + //0x00002f39 LBB10_18 + 0xc7, 0x45, 0xfc, 0x01, 0x00, 0x00, 0x00, //0x00002f39 movl $1, $-4(%rbp) + 0x45, 0x89, 0xca, //0x00002f40 movl %r9d, %r10d + 0xe9, 0x5e, 0xff, 0xff, 0xff, //0x00002f43 jmp LBB10_22 + //0x00002f48 LBB10_23 + 0x89, 0xf1, //0x00002f48 movl %esi, %ecx + 0x48, 0x89, 0xf0, //0x00002f4a movq %rsi, %rax + 0x45, 0x85, 0xc0, //0x00002f4d testl %r8d, %r8d + 0x0f, 0x85, 0x04, 0x00, 0x00, 0x00, //0x00002f50 jne LBB10_26 + //0x00002f56 LBB10_25 + 0x44, 0x89, 0x4d, 0xf4, //0x00002f56 movl %r9d, $-12(%rbp) + //0x00002f5a LBB10_26 + 0x41, 0xf6, 0xc3, 0x01, //0x00002f5a testb $1, %r11b + 0x0f, 0x84, 0xb5, 0x00, 0x00, 0x00, //0x00002f5e je LBB10_40 + 0x8a, 0x0c, 0x0f, //0x00002f64 movb (%rdi,%rcx), %cl + 0x80, 0xc9, 0x20, //0x00002f67 orb $32, %cl + 0x80, 0xf9, 0x65, //0x00002f6a cmpb $101, %cl + 0x0f, 0x85, 0xa6, 0x00, 0x00, 0x00, //0x00002f6d jne LBB10_40 + 0x89, 0xc2, //0x00002f73 movl %eax, %edx + 0x8a, 0x4c, 0x17, 0x01, //0x00002f75 movb $1(%rdi,%rdx), %cl + 0x80, 0xf9, 0x2d, //0x00002f79 cmpb $45, %cl + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00002f7c je LBB10_32 + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00002f82 movl $1, %r8d + 0x80, 0xf9, 0x2b, //0x00002f88 cmpb $43, %cl + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00002f8b jne LBB10_30 + 0x83, 0xc0, 0x02, //0x00002f91 addl $2, %eax + 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x00002f94 jmp LBB10_33 + //0x00002f99 LBB10_20 + 0x48, 0x89, 0xc1, //0x00002f99 movq %rax, %rcx + 0x45, 0x85, 0xc0, //0x00002f9c testl %r8d, %r8d + 0x0f, 0x85, 0xb5, 0xff, 0xff, 0xff, //0x00002f9f jne LBB10_26 + 0xe9, 0xac, 0xff, 0xff, 0xff, //0x00002fa5 jmp LBB10_25 + //0x00002faa LBB10_32 + 0x83, 0xc0, 0x02, //0x00002faa addl $2, %eax + 0x41, 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00002fad movl $-1, %r8d + //0x00002fb3 LBB10_33 + 0x89, 0xc2, //0x00002fb3 movl %eax, %edx + 0x48, 0x63, 0xd2, //0x00002fb5 movslq %edx, %rdx + 0x45, 0x31, 0xc9, //0x00002fb8 xorl %r9d, %r9d + 0x48, 0x39, 0xf2, //0x00002fbb cmpq %rsi, %rdx + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x00002fbe jl LBB10_35 + 0xe9, 0x48, 0x00, 0x00, 0x00, //0x00002fc4 jmp LBB10_39 + //0x00002fc9 LBB10_30 + 0x48, 0xff, 0xc2, //0x00002fc9 incq %rdx + 0x48, 0x63, 0xd2, //0x00002fcc movslq %edx, %rdx + 0x45, 0x31, 0xc9, //0x00002fcf xorl %r9d, %r9d + 0x48, 0x39, 0xf2, //0x00002fd2 cmpq %rsi, %rdx + 0x0f, 0x8d, 0x36, 0x00, 0x00, 0x00, //0x00002fd5 jge LBB10_39 + //0x00002fdb LBB10_35 + 0x45, 0x31, 0xc9, //0x00002fdb xorl %r9d, %r9d + 0x90, 0x90, //0x00002fde .p2align 4, 0x90 + //0x00002fe0 LBB10_36 + 0x41, 0x81, 0xf9, 0x0f, 0x27, 0x00, 0x00, //0x00002fe0 cmpl $9999, %r9d + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00002fe7 jg LBB10_39 + 0x0f, 0xb6, 0x0c, 0x17, //0x00002fed movzbl (%rdi,%rdx), %ecx + 0x8d, 0x41, 0xd0, //0x00002ff1 leal $-48(%rcx), %eax + 0x3c, 0x09, //0x00002ff4 cmpb $9, %al + 0x0f, 0x87, 0x15, 0x00, 0x00, 0x00, //0x00002ff6 ja LBB10_39 + 0x43, 0x8d, 0x04, 0x89, //0x00002ffc leal (%r9,%r9,4), %eax + 0x44, 0x8d, 0x4c, 0x41, 0xd0, //0x00003000 leal $-48(%rcx,%rax,2), %r9d + 0x48, 0xff, 0xc2, //0x00003005 incq %rdx + 0x48, 0x39, 0xd6, //0x00003008 cmpq %rdx, %rsi + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x0000300b jne LBB10_36 + //0x00003011 LBB10_39 + 0x45, 0x0f, 0xaf, 0xc8, //0x00003011 imull %r8d, %r9d + 0x44, 0x01, 0x4d, 0xf4, //0x00003015 addl %r9d, $-12(%rbp) + //0x00003019 LBB10_40 + 0x48, 0x8d, 0x7d, 0xe0, //0x00003019 leaq $-32(%rbp), %rdi + 0x48, 0x8d, 0x75, 0xd8, //0x0000301d leaq $-40(%rbp), %rsi + 0xe8, 0x1a, 0xf9, 0xff, 0xff, //0x00003021 callq _decimal_to_f64 + 0xf2, 0x0f, 0x10, 0x45, 0xd8, //0x00003026 movsd $-40(%rbp), %xmm0 + 0x48, 0x83, 0xc4, 0x30, //0x0000302b addq $48, %rsp + 0x5d, //0x0000302f popq %rbp + 0xc3, //0x00003030 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003031 .p2align 4, 0x90 + //0x00003040 _value + 0x55, //0x00003040 pushq %rbp + 0x48, 0x89, 0xe5, //0x00003041 movq %rsp, %rbp + 0x41, 0x57, //0x00003044 pushq %r15 + 0x41, 0x56, //0x00003046 pushq %r14 + 0x41, 0x55, //0x00003048 pushq %r13 + 0x41, 0x54, //0x0000304a pushq %r12 + 0x53, //0x0000304c pushq %rbx + 0x48, 0x83, 0xec, 0x28, //0x0000304d subq $40, %rsp + 0x49, 0x89, 0xc9, //0x00003051 movq %rcx, %r9 + 0x49, 0x89, 0xd4, //0x00003054 movq %rdx, %r12 + 0x49, 0x89, 0xf7, //0x00003057 movq %rsi, %r15 + 0x49, 0x89, 0xfd, //0x0000305a movq %rdi, %r13 + 0x48, 0x89, 0x55, 0xd0, //0x0000305d movq %rdx, $-48(%rbp) + 0x48, 0x89, 0x7d, 0xb0, //0x00003061 movq %rdi, $-80(%rbp) + 0x48, 0x89, 0x75, 0xb8, //0x00003065 movq %rsi, $-72(%rbp) + 0x48, 0x89, 0xd0, //0x00003069 movq %rdx, %rax + 0x48, 0x29, 0xf0, //0x0000306c subq %rsi, %rax + 0x0f, 0x83, 0x2b, 0x00, 0x00, 0x00, //0x0000306f jae LBB11_5 + 0x43, 0x8a, 0x4c, 0x25, 0x00, //0x00003075 movb (%r13,%r12), %cl + 0x80, 0xf9, 0x0d, //0x0000307a cmpb $13, %cl + 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x0000307d je LBB11_5 + 0x80, 0xf9, 0x20, //0x00003083 cmpb $32, %cl + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00003086 je LBB11_5 + 0x8d, 0x51, 0xf7, //0x0000308c leal $-9(%rcx), %edx + 0x80, 0xfa, 0x01, //0x0000308f cmpb $1, %dl + 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x00003092 jbe LBB11_5 + 0x4c, 0x89, 0xe3, //0x00003098 movq %r12, %rbx + 0xe9, 0x32, 0x01, 0x00, 0x00, //0x0000309b jmp LBB11_28 + //0x000030a0 LBB11_5 + 0x49, 0x8d, 0x5c, 0x24, 0x01, //0x000030a0 leaq $1(%r12), %rbx + 0x4c, 0x39, 0xfb, //0x000030a5 cmpq %r15, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000030a8 jae LBB11_9 + 0x41, 0x8a, 0x4c, 0x1d, 0x00, //0x000030ae movb (%r13,%rbx), %cl + 0x80, 0xf9, 0x0d, //0x000030b3 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000030b6 je LBB11_9 + 0x80, 0xf9, 0x20, //0x000030bc cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000030bf je LBB11_9 + 0x8d, 0x51, 0xf7, //0x000030c5 leal $-9(%rcx), %edx + 0x80, 0xfa, 0x01, //0x000030c8 cmpb $1, %dl + 0x0f, 0x87, 0x01, 0x01, 0x00, 0x00, //0x000030cb ja LBB11_28 + //0x000030d1 LBB11_9 + 0x49, 0x8d, 0x5c, 0x24, 0x02, //0x000030d1 leaq $2(%r12), %rbx + 0x4c, 0x39, 0xfb, //0x000030d6 cmpq %r15, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000030d9 jae LBB11_13 + 0x41, 0x8a, 0x4c, 0x1d, 0x00, //0x000030df movb (%r13,%rbx), %cl + 0x80, 0xf9, 0x0d, //0x000030e4 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000030e7 je LBB11_13 + 0x80, 0xf9, 0x20, //0x000030ed cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000030f0 je LBB11_13 + 0x8d, 0x51, 0xf7, //0x000030f6 leal $-9(%rcx), %edx + 0x80, 0xfa, 0x01, //0x000030f9 cmpb $1, %dl + 0x0f, 0x87, 0xd0, 0x00, 0x00, 0x00, //0x000030fc ja LBB11_28 + //0x00003102 LBB11_13 + 0x49, 0x8d, 0x5c, 0x24, 0x03, //0x00003102 leaq $3(%r12), %rbx + 0x4c, 0x39, 0xfb, //0x00003107 cmpq %r15, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x0000310a jae LBB11_17 + 0x41, 0x8a, 0x4c, 0x1d, 0x00, //0x00003110 movb (%r13,%rbx), %cl + 0x80, 0xf9, 0x0d, //0x00003115 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00003118 je LBB11_17 + 0x80, 0xf9, 0x20, //0x0000311e cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00003121 je LBB11_17 + 0x8d, 0x51, 0xf7, //0x00003127 leal $-9(%rcx), %edx + 0x80, 0xfa, 0x01, //0x0000312a cmpb $1, %dl + 0x0f, 0x87, 0x9f, 0x00, 0x00, 0x00, //0x0000312d ja LBB11_28 + //0x00003133 LBB11_17 + 0x49, 0x8d, 0x4c, 0x24, 0x04, //0x00003133 leaq $4(%r12), %rcx + 0x4c, 0x39, 0xf9, //0x00003138 cmpq %r15, %rcx + 0x0f, 0x83, 0x57, 0x00, 0x00, 0x00, //0x0000313b jae LBB11_23 + 0x49, 0x39, 0xcf, //0x00003141 cmpq %rcx, %r15 + 0x0f, 0x84, 0x5a, 0x00, 0x00, 0x00, //0x00003144 je LBB11_24 + 0x4b, 0x8d, 0x4c, 0x3d, 0x00, //0x0000314a leaq (%r13,%r15), %rcx + 0x48, 0x83, 0xc0, 0x04, //0x0000314f addq $4, %rax + 0x4b, 0x8d, 0x5c, 0x2c, 0x05, //0x00003153 leaq $5(%r12,%r13), %rbx + 0x48, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003158 movabsq $4294977024, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003162 .p2align 4, 0x90 + //0x00003170 LBB11_20 + 0x0f, 0xbe, 0x73, 0xff, //0x00003170 movsbl $-1(%rbx), %esi + 0x83, 0xfe, 0x20, //0x00003174 cmpl $32, %esi + 0x0f, 0x87, 0x3e, 0x00, 0x00, 0x00, //0x00003177 ja LBB11_26 + 0x48, 0x0f, 0xa3, 0xf2, //0x0000317d btq %rsi, %rdx + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00003181 jae LBB11_26 + 0x48, 0xff, 0xc3, //0x00003187 incq %rbx + 0x48, 0xff, 0xc0, //0x0000318a incq %rax + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x0000318d jne LBB11_20 + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00003193 jmp LBB11_25 + //0x00003198 LBB11_23 + 0x48, 0x89, 0x4d, 0xd0, //0x00003198 movq %rcx, $-48(%rbp) + 0x49, 0x89, 0xcc, //0x0000319c movq %rcx, %r12 + 0xe9, 0x7e, 0x00, 0x00, 0x00, //0x0000319f jmp LBB11_32 + //0x000031a4 LBB11_24 + 0x4c, 0x01, 0xe9, //0x000031a4 addq %r13, %rcx + //0x000031a7 LBB11_25 + 0x4c, 0x29, 0xe9, //0x000031a7 subq %r13, %rcx + 0x48, 0x89, 0xcb, //0x000031aa movq %rcx, %rbx + 0x4c, 0x39, 0xfb, //0x000031ad cmpq %r15, %rbx + 0x0f, 0x82, 0x17, 0x00, 0x00, 0x00, //0x000031b0 jb LBB11_27 + 0xe9, 0x67, 0x00, 0x00, 0x00, //0x000031b6 jmp LBB11_32 + //0x000031bb LBB11_26 + 0x4c, 0x89, 0xe8, //0x000031bb movq %r13, %rax + 0x48, 0xf7, 0xd0, //0x000031be notq %rax + 0x48, 0x01, 0xc3, //0x000031c1 addq %rax, %rbx + 0x4c, 0x39, 0xfb, //0x000031c4 cmpq %r15, %rbx + 0x0f, 0x83, 0x55, 0x00, 0x00, 0x00, //0x000031c7 jae LBB11_32 + //0x000031cd LBB11_27 + 0x41, 0x8a, 0x4c, 0x1d, 0x00, //0x000031cd movb (%r13,%rbx), %cl + //0x000031d2 LBB11_28 + 0x4c, 0x8d, 0x63, 0x01, //0x000031d2 leaq $1(%rbx), %r12 + 0x4c, 0x89, 0x65, 0xd0, //0x000031d6 movq %r12, $-48(%rbp) + 0x0f, 0xbe, 0xc1, //0x000031da movsbl %cl, %eax + 0x83, 0xf8, 0x7d, //0x000031dd cmpl $125, %eax + 0x0f, 0x87, 0xc4, 0x00, 0x00, 0x00, //0x000031e0 ja LBB11_41 + 0x4d, 0x8d, 0x74, 0x1d, 0x00, //0x000031e6 leaq (%r13,%rbx), %r14 + 0x48, 0x8d, 0x15, 0x72, 0x03, 0x00, 0x00, //0x000031eb leaq $882(%rip), %rdx /* LJTI11_0+0(%rip) */ + 0x48, 0x63, 0x04, 0x82, //0x000031f2 movslq (%rdx,%rax,4), %rax + 0x48, 0x01, 0xd0, //0x000031f6 addq %rdx, %rax + 0xff, 0xe0, //0x000031f9 jmpq *%rax + //0x000031fb LBB11_30 + 0x48, 0x89, 0x5d, 0xd0, //0x000031fb movq %rbx, $-48(%rbp) + 0x41, 0xf6, 0xc0, 0x02, //0x000031ff testb $2, %r8b + 0x0f, 0x85, 0x35, 0x00, 0x00, 0x00, //0x00003203 jne LBB11_35 + 0x48, 0x8d, 0x7d, 0xb0, //0x00003209 leaq $-80(%rbp), %rdi + 0x48, 0x8d, 0x75, 0xd0, //0x0000320d leaq $-48(%rbp), %rsi + 0x4c, 0x89, 0xca, //0x00003211 movq %r9, %rdx + 0xe8, 0x67, 0x0b, 0x00, 0x00, //0x00003214 callq _vnumber + 0x48, 0x8b, 0x5d, 0xd0, //0x00003219 movq $-48(%rbp), %rbx + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x0000321d jmp LBB11_34 + //0x00003222 LBB11_32 + 0x49, 0xc7, 0x01, 0x01, 0x00, 0x00, 0x00, //0x00003222 movq $1, (%r9) + //0x00003229 LBB11_33 + 0x4c, 0x89, 0xe3, //0x00003229 movq %r12, %rbx + //0x0000322c LBB11_34 + 0x48, 0x89, 0xd8, //0x0000322c movq %rbx, %rax + 0x48, 0x83, 0xc4, 0x28, //0x0000322f addq $40, %rsp + 0x5b, //0x00003233 popq %rbx + 0x41, 0x5c, //0x00003234 popq %r12 + 0x41, 0x5d, //0x00003236 popq %r13 + 0x41, 0x5e, //0x00003238 popq %r14 + 0x41, 0x5f, //0x0000323a popq %r15 + 0x5d, //0x0000323c popq %rbp + 0xc3, //0x0000323d retq + //0x0000323e LBB11_35 + 0x31, 0xc0, //0x0000323e xorl %eax, %eax + 0x80, 0xf9, 0x2d, //0x00003240 cmpb $45, %cl + 0x0f, 0x94, 0xc0, //0x00003243 sete %al + 0x49, 0x01, 0xc6, //0x00003246 addq %rax, %r14 + 0x49, 0x29, 0xc7, //0x00003249 subq %rax, %r15 + 0x0f, 0x84, 0xda, 0x02, 0x00, 0x00, //0x0000324c je LBB11_85 + 0x4c, 0x89, 0x4d, 0xc8, //0x00003252 movq %r9, $-56(%rbp) + 0x4c, 0x39, 0xfb, //0x00003256 cmpq %r15, %rbx + 0x0f, 0x83, 0x0d, 0x00, 0x00, 0x00, //0x00003259 jae LBB11_38 + 0x41, 0x8a, 0x06, //0x0000325f movb (%r14), %al + 0x04, 0xd0, //0x00003262 addb $-48, %al + 0x3c, 0x0a, //0x00003264 cmpb $10, %al + 0x0f, 0x83, 0xd9, 0x02, 0x00, 0x00, //0x00003266 jae LBB11_87 + //0x0000326c LBB11_38 + 0x4c, 0x89, 0xf7, //0x0000326c movq %r14, %rdi + 0x4c, 0x89, 0xfe, //0x0000326f movq %r15, %rsi + 0xe8, 0x09, 0x1e, 0x00, 0x00, //0x00003272 callq _do_skip_number + 0x48, 0x85, 0xc0, //0x00003277 testq %rax, %rax + 0x0f, 0x88, 0xbf, 0x02, 0x00, 0x00, //0x0000327a js LBB11_86 + 0x49, 0x01, 0xc6, //0x00003280 addq %rax, %r14 + 0x4d, 0x29, 0xee, //0x00003283 subq %r13, %r14 + 0x4c, 0x89, 0x75, 0xd0, //0x00003286 movq %r14, $-48(%rbp) + 0x4d, 0x85, 0xe4, //0x0000328a testq %r12, %r12 + 0x4c, 0x8b, 0x4d, 0xc8, //0x0000328d movq $-56(%rbp), %r9 + 0x0f, 0x8e, 0xc0, 0x02, 0x00, 0x00, //0x00003291 jle LBB11_88 + 0x49, 0xc7, 0x01, 0x08, 0x00, 0x00, 0x00, //0x00003297 movq $8, (%r9) + 0x49, 0x89, 0x59, 0x18, //0x0000329e movq %rbx, $24(%r9) + 0x4c, 0x89, 0xf3, //0x000032a2 movq %r14, %rbx + 0xe9, 0x82, 0xff, 0xff, 0xff, //0x000032a5 jmp LBB11_34 + //0x000032aa LBB11_41 + 0x49, 0xc7, 0x01, 0xfe, 0xff, 0xff, 0xff, //0x000032aa movq $-2, (%r9) + 0xe9, 0x76, 0xff, 0xff, 0xff, //0x000032b1 jmp LBB11_34 + //0x000032b6 LBB11_42 + 0x4d, 0x89, 0xce, //0x000032b6 movq %r9, %r14 + 0x48, 0xc7, 0x45, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000032b9 movq $-1, $-64(%rbp) + 0x48, 0x8d, 0x7d, 0xb0, //0x000032c1 leaq $-80(%rbp), %rdi + 0x48, 0x8d, 0x55, 0xc0, //0x000032c5 leaq $-64(%rbp), %rdx + 0x4c, 0x89, 0xe6, //0x000032c9 movq %r12, %rsi + 0x4c, 0x89, 0xc1, //0x000032cc movq %r8, %rcx + 0xe8, 0x3c, 0x05, 0x00, 0x00, //0x000032cf callq _advance_string + 0x48, 0x89, 0xc3, //0x000032d4 movq %rax, %rbx + 0x48, 0x85, 0xc0, //0x000032d7 testq %rax, %rax + 0x0f, 0x88, 0x41, 0x01, 0x00, 0x00, //0x000032da js LBB11_61 + 0x48, 0x89, 0x5d, 0xd0, //0x000032e0 movq %rbx, $-48(%rbp) + 0x4d, 0x89, 0x66, 0x10, //0x000032e4 movq %r12, $16(%r14) + 0x48, 0x8b, 0x45, 0xc0, //0x000032e8 movq $-64(%rbp), %rax + 0x48, 0x39, 0xd8, //0x000032ec cmpq %rbx, %rax + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000032ef movq $-1, %rcx + 0x48, 0x0f, 0x4c, 0xc8, //0x000032f6 cmovlq %rax, %rcx + 0x49, 0x89, 0x4e, 0x18, //0x000032fa movq %rcx, $24(%r14) + 0xb8, 0x07, 0x00, 0x00, 0x00, //0x000032fe movl $7, %eax + 0x49, 0x89, 0x06, //0x00003303 movq %rax, (%r14) + 0xe9, 0x21, 0xff, 0xff, 0xff, //0x00003306 jmp LBB11_34 + //0x0000330b LBB11_44 + 0x31, 0xc0, //0x0000330b xorl %eax, %eax + 0x45, 0x85, 0xc0, //0x0000330d testl %r8d, %r8d + 0x0f, 0x99, 0xc0, //0x00003310 setns %al + 0xb9, 0x0b, 0x00, 0x00, 0x00, //0x00003313 movl $11, %ecx + 0xe9, 0xee, 0x00, 0x00, 0x00, //0x00003318 jmp LBB11_60 + //0x0000331d LBB11_45 + 0x31, 0xc0, //0x0000331d xorl %eax, %eax + 0x45, 0x85, 0xc0, //0x0000331f testl %r8d, %r8d + 0x0f, 0x99, 0xc0, //0x00003322 setns %al + 0xb9, 0x0a, 0x00, 0x00, 0x00, //0x00003325 movl $10, %ecx + 0xe9, 0xdc, 0x00, 0x00, 0x00, //0x0000332a jmp LBB11_60 + //0x0000332f LBB11_46 + 0x49, 0xc7, 0x01, 0x05, 0x00, 0x00, 0x00, //0x0000332f movq $5, (%r9) + 0xe9, 0xee, 0xfe, 0xff, 0xff, //0x00003336 jmp LBB11_33 + //0x0000333b LBB11_47 + 0x31, 0xc0, //0x0000333b xorl %eax, %eax + 0x45, 0x85, 0xc0, //0x0000333d testl %r8d, %r8d + 0x0f, 0x99, 0xc0, //0x00003340 setns %al + 0xb9, 0x0c, 0x00, 0x00, 0x00, //0x00003343 movl $12, %ecx + 0xe9, 0xbe, 0x00, 0x00, 0x00, //0x00003348 jmp LBB11_60 + //0x0000334d LBB11_48 + 0x49, 0x8d, 0x47, 0xfc, //0x0000334d leaq $-4(%r15), %rax + 0x48, 0x39, 0xc3, //0x00003351 cmpq %rax, %rbx + 0x0f, 0x83, 0x88, 0x00, 0x00, 0x00, //0x00003354 jae LBB11_57 + 0x43, 0x8b, 0x4c, 0x25, 0x00, //0x0000335a movl (%r13,%r12), %ecx + 0x81, 0xf9, 0x61, 0x6c, 0x73, 0x65, //0x0000335f cmpl $1702063201, %ecx + 0x0f, 0x85, 0xc5, 0x00, 0x00, 0x00, //0x00003365 jne LBB11_62 + 0x48, 0x83, 0xc3, 0x05, //0x0000336b addq $5, %rbx + 0x48, 0x89, 0x5d, 0xd0, //0x0000336f movq %rbx, $-48(%rbp) + 0xb8, 0x04, 0x00, 0x00, 0x00, //0x00003373 movl $4, %eax + 0x49, 0x89, 0xdf, //0x00003378 movq %rbx, %r15 + 0xe9, 0xa1, 0x01, 0x00, 0x00, //0x0000337b jmp LBB11_84 + //0x00003380 LBB11_51 + 0x49, 0x8d, 0x47, 0xfd, //0x00003380 leaq $-3(%r15), %rax + 0x48, 0x39, 0xc3, //0x00003384 cmpq %rax, %rbx + 0x0f, 0x83, 0x55, 0x00, 0x00, 0x00, //0x00003387 jae LBB11_57 + 0x41, 0x8b, 0x0e, //0x0000338d movl (%r14), %ecx + 0x81, 0xf9, 0x6e, 0x75, 0x6c, 0x6c, //0x00003390 cmpl $1819047278, %ecx + 0x0f, 0x85, 0xd3, 0x00, 0x00, 0x00, //0x00003396 jne LBB11_66 + 0x48, 0x83, 0xc3, 0x04, //0x0000339c addq $4, %rbx + 0x48, 0x89, 0x5d, 0xd0, //0x000033a0 movq %rbx, $-48(%rbp) + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000033a4 movl $2, %eax + 0x49, 0x89, 0xdf, //0x000033a9 movq %rbx, %r15 + 0xe9, 0x70, 0x01, 0x00, 0x00, //0x000033ac jmp LBB11_84 + //0x000033b1 LBB11_54 + 0x49, 0x8d, 0x47, 0xfd, //0x000033b1 leaq $-3(%r15), %rax + 0x48, 0x39, 0xc3, //0x000033b5 cmpq %rax, %rbx + 0x0f, 0x83, 0x24, 0x00, 0x00, 0x00, //0x000033b8 jae LBB11_57 + 0x41, 0x8b, 0x0e, //0x000033be movl (%r14), %ecx + 0x81, 0xf9, 0x74, 0x72, 0x75, 0x65, //0x000033c1 cmpl $1702195828, %ecx + 0x0f, 0x85, 0xe5, 0x00, 0x00, 0x00, //0x000033c7 jne LBB11_70 + 0x48, 0x83, 0xc3, 0x04, //0x000033cd addq $4, %rbx + 0x48, 0x89, 0x5d, 0xd0, //0x000033d1 movq %rbx, $-48(%rbp) + 0xb8, 0x03, 0x00, 0x00, 0x00, //0x000033d5 movl $3, %eax + 0x49, 0x89, 0xdf, //0x000033da movq %rbx, %r15 + 0xe9, 0x3f, 0x01, 0x00, 0x00, //0x000033dd jmp LBB11_84 + //0x000033e2 LBB11_57 + 0x4c, 0x89, 0x7d, 0xd0, //0x000033e2 movq %r15, $-48(%rbp) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000033e6 movq $-1, %rax + 0xe9, 0x2f, 0x01, 0x00, 0x00, //0x000033ed jmp LBB11_84 + //0x000033f2 LBB11_58 + 0x49, 0xc7, 0x01, 0x06, 0x00, 0x00, 0x00, //0x000033f2 movq $6, (%r9) + 0xe9, 0x2b, 0xfe, 0xff, 0xff, //0x000033f9 jmp LBB11_33 + //0x000033fe LBB11_59 + 0x31, 0xc0, //0x000033fe xorl %eax, %eax + 0x45, 0x85, 0xc0, //0x00003400 testl %r8d, %r8d + 0x0f, 0x99, 0xc0, //0x00003403 setns %al + 0xb9, 0x0d, 0x00, 0x00, 0x00, //0x00003406 movl $13, %ecx + //0x0000340b LBB11_60 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x0000340b movq $-2, %rdx + 0x48, 0x0f, 0x48, 0xd1, //0x00003412 cmovsq %rcx, %rdx + 0x49, 0x89, 0x11, //0x00003416 movq %rdx, (%r9) + 0x49, 0x29, 0xc4, //0x00003419 subq %rax, %r12 + 0xe9, 0x08, 0xfe, 0xff, 0xff, //0x0000341c jmp LBB11_33 + //0x00003421 LBB11_61 + 0x4c, 0x89, 0x7d, 0xd0, //0x00003421 movq %r15, $-48(%rbp) + 0x49, 0x89, 0x1e, //0x00003425 movq %rbx, (%r14) + 0x4c, 0x89, 0xfb, //0x00003428 movq %r15, %rbx + 0xe9, 0xfc, 0xfd, 0xff, 0xff, //0x0000342b jmp LBB11_34 + //0x00003430 LBB11_62 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003430 movq $-2, %rax + 0x80, 0xf9, 0x61, //0x00003437 cmpb $97, %cl + 0x0f, 0x85, 0xbd, 0x00, 0x00, 0x00, //0x0000343a jne LBB11_74 + 0x41, 0x80, 0x7c, 0x1d, 0x02, 0x6c, //0x00003440 cmpb $108, $2(%r13,%rbx) + 0x0f, 0x85, 0xc1, 0x00, 0x00, 0x00, //0x00003446 jne LBB11_81 + 0x41, 0x80, 0x7c, 0x1d, 0x03, 0x73, //0x0000344c cmpb $115, $3(%r13,%rbx) + 0x0f, 0x85, 0xbe, 0x00, 0x00, 0x00, //0x00003452 jne LBB11_79 + 0x4c, 0x8d, 0x7b, 0x04, //0x00003458 leaq $4(%rbx), %r15 + 0x48, 0x8d, 0x4b, 0x05, //0x0000345c leaq $5(%rbx), %rcx + 0x41, 0x80, 0x7c, 0x1d, 0x04, 0x65, //0x00003460 cmpb $101, $4(%r13,%rbx) + 0x4c, 0x0f, 0x44, 0xf9, //0x00003466 cmoveq %rcx, %r15 + 0xe9, 0xae, 0x00, 0x00, 0x00, //0x0000346a jmp LBB11_83 + //0x0000346f LBB11_66 + 0x48, 0x89, 0x5d, 0xd0, //0x0000346f movq %rbx, $-48(%rbp) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003473 movq $-2, %rax + 0x80, 0xf9, 0x6e, //0x0000347a cmpb $110, %cl + 0x0f, 0x85, 0x72, 0x00, 0x00, 0x00, //0x0000347d jne LBB11_76 + 0x41, 0x80, 0x7c, 0x1d, 0x01, 0x75, //0x00003483 cmpb $117, $1(%r13,%rbx) + 0x0f, 0x85, 0x76, 0x00, 0x00, 0x00, //0x00003489 jne LBB11_77 + 0x41, 0x80, 0x7c, 0x1d, 0x02, 0x6c, //0x0000348f cmpb $108, $2(%r13,%rbx) + 0x0f, 0x85, 0x72, 0x00, 0x00, 0x00, //0x00003495 jne LBB11_81 + 0x4c, 0x8d, 0x7b, 0x03, //0x0000349b leaq $3(%rbx), %r15 + 0x48, 0x8d, 0x4b, 0x04, //0x0000349f leaq $4(%rbx), %rcx + 0x41, 0x80, 0x7c, 0x1d, 0x03, 0x6c, //0x000034a3 cmpb $108, $3(%r13,%rbx) + 0x4c, 0x0f, 0x44, 0xf9, //0x000034a9 cmoveq %rcx, %r15 + 0xe9, 0x6b, 0x00, 0x00, 0x00, //0x000034ad jmp LBB11_83 + //0x000034b2 LBB11_70 + 0x48, 0x89, 0x5d, 0xd0, //0x000034b2 movq %rbx, $-48(%rbp) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000034b6 movq $-2, %rax + 0x80, 0xf9, 0x74, //0x000034bd cmpb $116, %cl + 0x0f, 0x85, 0x2f, 0x00, 0x00, 0x00, //0x000034c0 jne LBB11_76 + 0x41, 0x80, 0x7c, 0x1d, 0x01, 0x72, //0x000034c6 cmpb $114, $1(%r13,%rbx) + 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x000034cc jne LBB11_77 + 0x41, 0x80, 0x7c, 0x1d, 0x02, 0x75, //0x000034d2 cmpb $117, $2(%r13,%rbx) + 0x0f, 0x85, 0x2f, 0x00, 0x00, 0x00, //0x000034d8 jne LBB11_81 + 0x4c, 0x8d, 0x7b, 0x03, //0x000034de leaq $3(%rbx), %r15 + 0x48, 0x8d, 0x4b, 0x04, //0x000034e2 leaq $4(%rbx), %rcx + 0x41, 0x80, 0x7c, 0x1d, 0x03, 0x65, //0x000034e6 cmpb $101, $3(%r13,%rbx) + 0x4c, 0x0f, 0x44, 0xf9, //0x000034ec cmoveq %rcx, %r15 + 0xe9, 0x28, 0x00, 0x00, 0x00, //0x000034f0 jmp LBB11_83 + //0x000034f5 LBB11_76 + 0x49, 0x89, 0xdf, //0x000034f5 movq %rbx, %r15 + 0xe9, 0x24, 0x00, 0x00, 0x00, //0x000034f8 jmp LBB11_84 + //0x000034fd LBB11_74 + 0x4d, 0x89, 0xe7, //0x000034fd movq %r12, %r15 + 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x00003500 jmp LBB11_84 + //0x00003505 LBB11_77 + 0x48, 0xff, 0xc3, //0x00003505 incq %rbx + 0xe9, 0x0d, 0x00, 0x00, 0x00, //0x00003508 jmp LBB11_82 + //0x0000350d LBB11_81 + 0x48, 0x83, 0xc3, 0x02, //0x0000350d addq $2, %rbx + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00003511 jmp LBB11_82 + //0x00003516 LBB11_79 + 0x48, 0x83, 0xc3, 0x03, //0x00003516 addq $3, %rbx + //0x0000351a LBB11_82 + 0x49, 0x89, 0xdf, //0x0000351a movq %rbx, %r15 + //0x0000351d LBB11_83 + 0x4c, 0x89, 0x7d, 0xd0, //0x0000351d movq %r15, $-48(%rbp) + //0x00003521 LBB11_84 + 0x49, 0x89, 0x01, //0x00003521 movq %rax, (%r9) + 0x4c, 0x89, 0xfb, //0x00003524 movq %r15, %rbx + 0xe9, 0x00, 0xfd, 0xff, 0xff, //0x00003527 jmp LBB11_34 + //0x0000352c LBB11_85 + 0x4d, 0x29, 0xee, //0x0000352c subq %r13, %r14 + 0x4c, 0x89, 0x75, 0xd0, //0x0000352f movq %r14, $-48(%rbp) + 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00003533 movq $-1, %rbx + 0xe9, 0x18, 0x00, 0x00, 0x00, //0x0000353a jmp LBB11_88 + //0x0000353f LBB11_86 + 0x48, 0xf7, 0xd0, //0x0000353f notq %rax + 0x49, 0x01, 0xc6, //0x00003542 addq %rax, %r14 + //0x00003545 LBB11_87 + 0x4d, 0x29, 0xee, //0x00003545 subq %r13, %r14 + 0x4c, 0x89, 0x75, 0xd0, //0x00003548 movq %r14, $-48(%rbp) + 0x48, 0xc7, 0xc3, 0xfe, 0xff, 0xff, 0xff, //0x0000354c movq $-2, %rbx + 0x4c, 0x8b, 0x4d, 0xc8, //0x00003553 movq $-56(%rbp), %r9 + //0x00003557 LBB11_88 + 0x49, 0x89, 0x19, //0x00003557 movq %rbx, (%r9) + 0x4c, 0x89, 0xf3, //0x0000355a movq %r14, %rbx + 0xe9, 0xca, 0xfc, 0xff, 0xff, //0x0000355d jmp LBB11_34 + 0x90, 0x90, //0x00003562 .p2align 2, 0x90 + // // .set L11_0_set_32, LBB11_32-LJTI11_0 + // // .set L11_0_set_41, LBB11_41-LJTI11_0 + // // .set L11_0_set_42, LBB11_42-LJTI11_0 + // // .set L11_0_set_44, LBB11_44-LJTI11_0 + // // .set L11_0_set_30, LBB11_30-LJTI11_0 + // // .set L11_0_set_45, LBB11_45-LJTI11_0 + // // .set L11_0_set_46, LBB11_46-LJTI11_0 + // // .set L11_0_set_47, LBB11_47-LJTI11_0 + // // .set L11_0_set_48, LBB11_48-LJTI11_0 + // // .set L11_0_set_51, LBB11_51-LJTI11_0 + // // .set L11_0_set_54, LBB11_54-LJTI11_0 + // // .set L11_0_set_58, LBB11_58-LJTI11_0 + // // .set L11_0_set_59, LBB11_59-LJTI11_0 + //0x00003564 LJTI11_0 + 0xbe, 0xfc, 0xff, 0xff, //0x00003564 .long L11_0_set_32 + 0x46, 0xfd, 0xff, 0xff, //0x00003568 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000356c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003570 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003574 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003578 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000357c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003580 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003584 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003588 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000358c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003590 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003594 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003598 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000359c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035a0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035a4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035a8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035ac .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035b0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035b4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035b8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035bc .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035c0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035c4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035c8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035cc .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035d0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035d4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035d8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035dc .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035e0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035e4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035e8 .long L11_0_set_41 + 0x52, 0xfd, 0xff, 0xff, //0x000035ec .long L11_0_set_42 + 0x46, 0xfd, 0xff, 0xff, //0x000035f0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035f4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035f8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000035fc .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003600 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003604 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003608 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000360c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003610 .long L11_0_set_41 + 0xa7, 0xfd, 0xff, 0xff, //0x00003614 .long L11_0_set_44 + 0x97, 0xfc, 0xff, 0xff, //0x00003618 .long L11_0_set_30 + 0x46, 0xfd, 0xff, 0xff, //0x0000361c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003620 .long L11_0_set_41 + 0x97, 0xfc, 0xff, 0xff, //0x00003624 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003628 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x0000362c .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003630 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003634 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003638 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x0000363c .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003640 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003644 .long L11_0_set_30 + 0x97, 0xfc, 0xff, 0xff, //0x00003648 .long L11_0_set_30 + 0xb9, 0xfd, 0xff, 0xff, //0x0000364c .long L11_0_set_45 + 0x46, 0xfd, 0xff, 0xff, //0x00003650 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003654 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003658 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000365c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003660 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003664 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003668 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000366c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003670 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003674 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003678 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000367c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003680 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003684 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003688 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000368c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003690 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003694 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003698 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000369c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036a0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036a4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036a8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036ac .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036b0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036b4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036b8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036bc .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036c0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036c4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036c8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036cc .long L11_0_set_41 + 0xcb, 0xfd, 0xff, 0xff, //0x000036d0 .long L11_0_set_46 + 0x46, 0xfd, 0xff, 0xff, //0x000036d4 .long L11_0_set_41 + 0xd7, 0xfd, 0xff, 0xff, //0x000036d8 .long L11_0_set_47 + 0x46, 0xfd, 0xff, 0xff, //0x000036dc .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036e0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036e4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036e8 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036ec .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036f0 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036f4 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x000036f8 .long L11_0_set_41 + 0xe9, 0xfd, 0xff, 0xff, //0x000036fc .long L11_0_set_48 + 0x46, 0xfd, 0xff, 0xff, //0x00003700 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003704 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003708 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000370c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003710 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003714 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003718 .long L11_0_set_41 + 0x1c, 0xfe, 0xff, 0xff, //0x0000371c .long L11_0_set_51 + 0x46, 0xfd, 0xff, 0xff, //0x00003720 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003724 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003728 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000372c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003730 .long L11_0_set_41 + 0x4d, 0xfe, 0xff, 0xff, //0x00003734 .long L11_0_set_54 + 0x46, 0xfd, 0xff, 0xff, //0x00003738 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000373c .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003740 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003744 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x00003748 .long L11_0_set_41 + 0x46, 0xfd, 0xff, 0xff, //0x0000374c .long L11_0_set_41 + 0x8e, 0xfe, 0xff, 0xff, //0x00003750 .long L11_0_set_58 + 0x46, 0xfd, 0xff, 0xff, //0x00003754 .long L11_0_set_41 + 0x9a, 0xfe, 0xff, 0xff, //0x00003758 .long L11_0_set_59 + 0x90, 0x90, 0x90, 0x90, //0x0000375c .p2align 4, 0x90 + //0x00003760 _vstring + 0x55, //0x00003760 pushq %rbp + 0x48, 0x89, 0xe5, //0x00003761 movq %rsp, %rbp + 0x41, 0x57, //0x00003764 pushq %r15 + 0x41, 0x56, //0x00003766 pushq %r14 + 0x41, 0x54, //0x00003768 pushq %r12 + 0x53, //0x0000376a pushq %rbx + 0x48, 0x83, 0xec, 0x10, //0x0000376b subq $16, %rsp + 0x49, 0x89, 0xd6, //0x0000376f movq %rdx, %r14 + 0x48, 0x89, 0xf3, //0x00003772 movq %rsi, %rbx + 0x49, 0x89, 0xff, //0x00003775 movq %rdi, %r15 + 0x48, 0xc7, 0x45, 0xd8, 0xff, 0xff, 0xff, 0xff, //0x00003778 movq $-1, $-40(%rbp) + 0x4c, 0x8b, 0x26, //0x00003780 movq (%rsi), %r12 + 0x48, 0x8d, 0x55, 0xd8, //0x00003783 leaq $-40(%rbp), %rdx + 0x4c, 0x89, 0xe6, //0x00003787 movq %r12, %rsi + 0xe8, 0x81, 0x00, 0x00, 0x00, //0x0000378a callq _advance_string + 0x48, 0x85, 0xc0, //0x0000378f testq %rax, %rax + 0x0f, 0x88, 0x27, 0x00, 0x00, 0x00, //0x00003792 js LBB12_1 + 0x48, 0x89, 0x03, //0x00003798 movq %rax, (%rbx) + 0x4d, 0x89, 0x66, 0x10, //0x0000379b movq %r12, $16(%r14) + 0x48, 0x8b, 0x4d, 0xd8, //0x0000379f movq $-40(%rbp), %rcx + 0x48, 0x39, 0xc1, //0x000037a3 cmpq %rax, %rcx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000037a6 movq $-1, %rax + 0x48, 0x0f, 0x4c, 0xc1, //0x000037ad cmovlq %rcx, %rax + 0x49, 0x89, 0x46, 0x18, //0x000037b1 movq %rax, $24(%r14) + 0xb8, 0x07, 0x00, 0x00, 0x00, //0x000037b5 movl $7, %eax + 0xe9, 0x07, 0x00, 0x00, 0x00, //0x000037ba jmp LBB12_3 + //0x000037bf LBB12_1 + 0x49, 0x8b, 0x4f, 0x08, //0x000037bf movq $8(%r15), %rcx + 0x48, 0x89, 0x0b, //0x000037c3 movq %rcx, (%rbx) + //0x000037c6 LBB12_3 + 0x49, 0x89, 0x06, //0x000037c6 movq %rax, (%r14) + 0x48, 0x83, 0xc4, 0x10, //0x000037c9 addq $16, %rsp + 0x5b, //0x000037cd popq %rbx + 0x41, 0x5c, //0x000037ce popq %r12 + 0x41, 0x5e, //0x000037d0 popq %r14 + 0x41, 0x5f, //0x000037d2 popq %r15 + 0x5d, //0x000037d4 popq %rbp + 0xc3, //0x000037d5 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000037d6 .p2align 4, 0x00 + //0x000037e0 LCPI13_0 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x000037e0 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x000037f0 LCPI13_1 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000037f0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x00003800 LCPI13_2 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00003800 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x00003810 .p2align 4, 0x90 + //0x00003810 _advance_string + 0xf6, 0xc1, 0x20, //0x00003810 testb $32, %cl + 0x0f, 0x85, 0x05, 0x00, 0x00, 0x00, //0x00003813 jne LBB13_2 + 0xe9, 0x82, 0x59, 0x00, 0x00, //0x00003819 jmp _advance_string_default + //0x0000381e LBB13_2 + 0x55, //0x0000381e pushq %rbp + 0x48, 0x89, 0xe5, //0x0000381f movq %rsp, %rbp + 0x41, 0x57, //0x00003822 pushq %r15 + 0x41, 0x56, //0x00003824 pushq %r14 + 0x41, 0x55, //0x00003826 pushq %r13 + 0x41, 0x54, //0x00003828 pushq %r12 + 0x53, //0x0000382a pushq %rbx + 0x50, //0x0000382b pushq %rax + 0x4c, 0x8b, 0x67, 0x08, //0x0000382c movq $8(%rdi), %r12 + 0x49, 0x29, 0xf4, //0x00003830 subq %rsi, %r12 + 0x0f, 0x84, 0xf3, 0x04, 0x00, 0x00, //0x00003833 je LBB13_45 + 0x48, 0x8b, 0x07, //0x00003839 movq (%rdi), %rax + 0x48, 0x89, 0x45, 0xd0, //0x0000383c movq %rax, $-48(%rbp) + 0x48, 0x01, 0xc6, //0x00003840 addq %rax, %rsi + 0x48, 0xc7, 0x02, 0xff, 0xff, 0xff, 0xff, //0x00003843 movq $-1, (%rdx) + 0x49, 0x83, 0xfc, 0x40, //0x0000384a cmpq $64, %r12 + 0x0f, 0x82, 0x17, 0x04, 0x00, 0x00, //0x0000384e jb LBB13_46 + 0x45, 0x89, 0xe1, //0x00003854 movl %r12d, %r9d + 0x41, 0x83, 0xe1, 0x3f, //0x00003857 andl $63, %r9d + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x0000385b movq $-1, %r14 + 0x45, 0x31, 0xff, //0x00003862 xorl %r15d, %r15d + 0x66, 0x44, 0x0f, 0x6f, 0x05, 0x72, 0xff, 0xff, 0xff, //0x00003865 movdqa $-142(%rip), %xmm8 /* LCPI13_0+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x0d, 0x7a, 0xff, 0xff, 0xff, //0x0000386e movdqa $-134(%rip), %xmm1 /* LCPI13_1+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x15, 0x82, 0xff, 0xff, 0xff, //0x00003876 movdqa $-126(%rip), %xmm2 /* LCPI13_2+0(%rip) */ + 0x66, 0x0f, 0x76, 0xdb, //0x0000387e pcmpeqd %xmm3, %xmm3 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003882 .p2align 4, 0x90 + //0x00003890 LBB13_5 + 0xf3, 0x0f, 0x6f, 0x3e, //0x00003890 movdqu (%rsi), %xmm7 + 0xf3, 0x0f, 0x6f, 0x76, 0x10, //0x00003894 movdqu $16(%rsi), %xmm6 + 0xf3, 0x0f, 0x6f, 0x6e, 0x20, //0x00003899 movdqu $32(%rsi), %xmm5 + 0xf3, 0x0f, 0x6f, 0x66, 0x30, //0x0000389e movdqu $48(%rsi), %xmm4 + 0x66, 0x0f, 0x6f, 0xc7, //0x000038a3 movdqa %xmm7, %xmm0 + 0x66, 0x41, 0x0f, 0x74, 0xc0, //0x000038a7 pcmpeqb %xmm8, %xmm0 + 0x66, 0x44, 0x0f, 0xd7, 0xd8, //0x000038ac pmovmskb %xmm0, %r11d + 0x66, 0x0f, 0x6f, 0xc6, //0x000038b1 movdqa %xmm6, %xmm0 + 0x66, 0x41, 0x0f, 0x74, 0xc0, //0x000038b5 pcmpeqb %xmm8, %xmm0 + 0x66, 0x0f, 0xd7, 0xc8, //0x000038ba pmovmskb %xmm0, %ecx + 0x66, 0x0f, 0x6f, 0xc5, //0x000038be movdqa %xmm5, %xmm0 + 0x66, 0x41, 0x0f, 0x74, 0xc0, //0x000038c2 pcmpeqb %xmm8, %xmm0 + 0x66, 0x44, 0x0f, 0xd7, 0xd0, //0x000038c7 pmovmskb %xmm0, %r10d + 0x66, 0x0f, 0x6f, 0xc4, //0x000038cc movdqa %xmm4, %xmm0 + 0x66, 0x41, 0x0f, 0x74, 0xc0, //0x000038d0 pcmpeqb %xmm8, %xmm0 + 0x66, 0x44, 0x0f, 0xd7, 0xe8, //0x000038d5 pmovmskb %xmm0, %r13d + 0x66, 0x0f, 0x6f, 0xc7, //0x000038da movdqa %xmm7, %xmm0 + 0x66, 0x0f, 0x74, 0xc1, //0x000038de pcmpeqb %xmm1, %xmm0 + 0x66, 0x44, 0x0f, 0xd7, 0xc0, //0x000038e2 pmovmskb %xmm0, %r8d + 0x66, 0x0f, 0x6f, 0xc6, //0x000038e7 movdqa %xmm6, %xmm0 + 0x66, 0x0f, 0x74, 0xc1, //0x000038eb pcmpeqb %xmm1, %xmm0 + 0x66, 0x0f, 0xd7, 0xc0, //0x000038ef pmovmskb %xmm0, %eax + 0x66, 0x0f, 0x6f, 0xc5, //0x000038f3 movdqa %xmm5, %xmm0 + 0x66, 0x0f, 0x74, 0xc1, //0x000038f7 pcmpeqb %xmm1, %xmm0 + 0x48, 0xc1, 0xe1, 0x10, //0x000038fb shlq $16, %rcx + 0x49, 0x09, 0xcb, //0x000038ff orq %rcx, %r11 + 0x66, 0x0f, 0xd7, 0xd8, //0x00003902 pmovmskb %xmm0, %ebx + 0x66, 0x0f, 0x6f, 0xc4, //0x00003906 movdqa %xmm4, %xmm0 + 0x66, 0x0f, 0x74, 0xc1, //0x0000390a pcmpeqb %xmm1, %xmm0 + 0x49, 0xc1, 0xe2, 0x20, //0x0000390e shlq $32, %r10 + 0x4d, 0x09, 0xd3, //0x00003912 orq %r10, %r11 + 0x66, 0x0f, 0xd7, 0xf8, //0x00003915 pmovmskb %xmm0, %edi + 0x66, 0x0f, 0x6f, 0xc2, //0x00003919 movdqa %xmm2, %xmm0 + 0x66, 0x0f, 0x64, 0xc7, //0x0000391d pcmpgtb %xmm7, %xmm0 + 0x66, 0x0f, 0x64, 0xfb, //0x00003921 pcmpgtb %xmm3, %xmm7 + 0x66, 0x0f, 0xdb, 0xf8, //0x00003925 pand %xmm0, %xmm7 + 0x48, 0xc1, 0xe0, 0x10, //0x00003929 shlq $16, %rax + 0x49, 0x09, 0xc0, //0x0000392d orq %rax, %r8 + 0x66, 0x0f, 0xd7, 0xcf, //0x00003930 pmovmskb %xmm7, %ecx + 0x66, 0x0f, 0x6f, 0xc2, //0x00003934 movdqa %xmm2, %xmm0 + 0x66, 0x0f, 0x64, 0xc6, //0x00003938 pcmpgtb %xmm6, %xmm0 + 0x66, 0x0f, 0x64, 0xf3, //0x0000393c pcmpgtb %xmm3, %xmm6 + 0x66, 0x0f, 0xdb, 0xf0, //0x00003940 pand %xmm0, %xmm6 + 0x48, 0xc1, 0xe3, 0x20, //0x00003944 shlq $32, %rbx + 0x49, 0x09, 0xd8, //0x00003948 orq %rbx, %r8 + 0x66, 0x0f, 0xd7, 0xc6, //0x0000394b pmovmskb %xmm6, %eax + 0x66, 0x0f, 0x6f, 0xc2, //0x0000394f movdqa %xmm2, %xmm0 + 0x66, 0x0f, 0x64, 0xc5, //0x00003953 pcmpgtb %xmm5, %xmm0 + 0x66, 0x0f, 0x64, 0xeb, //0x00003957 pcmpgtb %xmm3, %xmm5 + 0x66, 0x0f, 0xdb, 0xe8, //0x0000395b pand %xmm0, %xmm5 + 0x48, 0xc1, 0xe7, 0x30, //0x0000395f shlq $48, %rdi + 0x49, 0x09, 0xf8, //0x00003963 orq %rdi, %r8 + 0x66, 0x0f, 0xd7, 0xdd, //0x00003966 pmovmskb %xmm5, %ebx + 0x66, 0x0f, 0x6f, 0xc2, //0x0000396a movdqa %xmm2, %xmm0 + 0x66, 0x0f, 0x64, 0xc4, //0x0000396e pcmpgtb %xmm4, %xmm0 + 0x66, 0x0f, 0x64, 0xe3, //0x00003972 pcmpgtb %xmm3, %xmm4 + 0x66, 0x0f, 0xdb, 0xe0, //0x00003976 pand %xmm0, %xmm4 + 0x48, 0xc1, 0xe0, 0x10, //0x0000397a shlq $16, %rax + 0x48, 0x09, 0xc1, //0x0000397e orq %rax, %rcx + 0x66, 0x0f, 0xd7, 0xc4, //0x00003981 pmovmskb %xmm4, %eax + 0x49, 0xc1, 0xe5, 0x30, //0x00003985 shlq $48, %r13 + 0x48, 0xc1, 0xe3, 0x20, //0x00003989 shlq $32, %rbx + 0x49, 0x83, 0xfe, 0xff, //0x0000398d cmpq $-1, %r14 + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00003991 jne LBB13_7 + 0x4d, 0x85, 0xc0, //0x00003997 testq %r8, %r8 + 0x0f, 0x85, 0x9d, 0x00, 0x00, 0x00, //0x0000399a jne LBB13_12 + //0x000039a0 LBB13_7 + 0x48, 0xc1, 0xe0, 0x30, //0x000039a0 shlq $48, %rax + 0x48, 0x09, 0xd9, //0x000039a4 orq %rbx, %rcx + 0x4d, 0x09, 0xeb, //0x000039a7 orq %r13, %r11 + 0x4c, 0x89, 0xc7, //0x000039aa movq %r8, %rdi + 0x4c, 0x09, 0xff, //0x000039ad orq %r15, %rdi + 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x000039b0 jne LBB13_11 + 0x48, 0x09, 0xc1, //0x000039b6 orq %rax, %rcx + 0x4d, 0x85, 0xdb, //0x000039b9 testq %r11, %r11 + 0x0f, 0x85, 0x91, 0x00, 0x00, 0x00, //0x000039bc jne LBB13_13 + //0x000039c2 LBB13_9 + 0x48, 0x85, 0xc9, //0x000039c2 testq %rcx, %rcx + 0x0f, 0x85, 0xde, 0x00, 0x00, 0x00, //0x000039c5 jne LBB13_19 + 0x48, 0x83, 0xc6, 0x40, //0x000039cb addq $64, %rsi + 0x49, 0x83, 0xc4, 0xc0, //0x000039cf addq $-64, %r12 + 0x49, 0x83, 0xfc, 0x3f, //0x000039d3 cmpq $63, %r12 + 0x0f, 0x87, 0xb3, 0xfe, 0xff, 0xff, //0x000039d7 ja LBB13_5 + 0xe9, 0xeb, 0x00, 0x00, 0x00, //0x000039dd jmp LBB13_21 + //0x000039e2 LBB13_11 + 0x4d, 0x89, 0xfd, //0x000039e2 movq %r15, %r13 + 0x49, 0xf7, 0xd5, //0x000039e5 notq %r13 + 0x4d, 0x21, 0xc5, //0x000039e8 andq %r8, %r13 + 0x4f, 0x8d, 0x54, 0x2d, 0x00, //0x000039eb leaq (%r13,%r13), %r10 + 0x4d, 0x09, 0xfa, //0x000039f0 orq %r15, %r10 + 0x4c, 0x89, 0xd3, //0x000039f3 movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x000039f6 notq %rbx + 0x4c, 0x21, 0xc3, //0x000039f9 andq %r8, %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000039fc movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfb, //0x00003a06 andq %rdi, %rbx + 0x45, 0x31, 0xff, //0x00003a09 xorl %r15d, %r15d + 0x4c, 0x01, 0xeb, //0x00003a0c addq %r13, %rbx + 0x41, 0x0f, 0x92, 0xc7, //0x00003a0f setb %r15b + 0x48, 0x01, 0xdb, //0x00003a13 addq %rbx, %rbx + 0x48, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003a16 movabsq $6148914691236517205, %rdi + 0x48, 0x31, 0xfb, //0x00003a20 xorq %rdi, %rbx + 0x4c, 0x21, 0xd3, //0x00003a23 andq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00003a26 notq %rbx + 0x49, 0x21, 0xdb, //0x00003a29 andq %rbx, %r11 + 0x48, 0x09, 0xc1, //0x00003a2c orq %rax, %rcx + 0x4d, 0x85, 0xdb, //0x00003a2f testq %r11, %r11 + 0x0f, 0x84, 0x8a, 0xff, 0xff, 0xff, //0x00003a32 je LBB13_9 + 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00003a38 jmp LBB13_13 + //0x00003a3d LBB13_12 + 0x48, 0x89, 0xf7, //0x00003a3d movq %rsi, %rdi + 0x48, 0x2b, 0x7d, 0xd0, //0x00003a40 subq $-48(%rbp), %rdi + 0x4d, 0x0f, 0xbc, 0xf0, //0x00003a44 bsfq %r8, %r14 + 0x49, 0x01, 0xfe, //0x00003a48 addq %rdi, %r14 + 0x4c, 0x89, 0x32, //0x00003a4b movq %r14, (%rdx) + 0xe9, 0x4d, 0xff, 0xff, 0xff, //0x00003a4e jmp LBB13_7 + //0x00003a53 LBB13_13 + 0x49, 0x0f, 0xbc, 0xc3, //0x00003a53 bsfq %r11, %rax + 0x48, 0x85, 0xc9, //0x00003a57 testq %rcx, %rcx + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00003a5a je LBB13_17 + 0x48, 0x0f, 0xbc, 0xc9, //0x00003a60 bsfq %rcx, %rcx + 0x48, 0x2b, 0x75, 0xd0, //0x00003a64 subq $-48(%rbp), %rsi + 0x48, 0x39, 0xc1, //0x00003a68 cmpq %rax, %rcx + 0x0f, 0x82, 0x26, 0x00, 0x00, 0x00, //0x00003a6b jb LBB13_18 + //0x00003a71 LBB13_15 + 0x48, 0x8d, 0x44, 0x06, 0x01, //0x00003a71 leaq $1(%rsi,%rax), %rax + //0x00003a76 LBB13_16 + 0x48, 0x83, 0xc4, 0x08, //0x00003a76 addq $8, %rsp + 0x5b, //0x00003a7a popq %rbx + 0x41, 0x5c, //0x00003a7b popq %r12 + 0x41, 0x5d, //0x00003a7d popq %r13 + 0x41, 0x5e, //0x00003a7f popq %r14 + 0x41, 0x5f, //0x00003a81 popq %r15 + 0x5d, //0x00003a83 popq %rbp + 0xc3, //0x00003a84 retq + //0x00003a85 LBB13_17 + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00003a85 movl $64, %ecx + 0x48, 0x2b, 0x75, 0xd0, //0x00003a8a subq $-48(%rbp), %rsi + 0x48, 0x39, 0xc1, //0x00003a8e cmpq %rax, %rcx + 0x0f, 0x83, 0xda, 0xff, 0xff, 0xff, //0x00003a91 jae LBB13_15 + //0x00003a97 LBB13_18 + 0x48, 0x01, 0xf1, //0x00003a97 addq %rsi, %rcx + 0x48, 0x89, 0x0a, //0x00003a9a movq %rcx, (%rdx) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003a9d movq $-2, %rax + 0xe9, 0xcd, 0xff, 0xff, 0xff, //0x00003aa4 jmp LBB13_16 + //0x00003aa9 LBB13_19 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003aa9 movq $-2, %rax + 0x49, 0x83, 0xfe, 0xff, //0x00003ab0 cmpq $-1, %r14 + 0x0f, 0x85, 0xbc, 0xff, 0xff, 0xff, //0x00003ab4 jne LBB13_16 + 0x48, 0x0f, 0xbc, 0xc9, //0x00003aba bsfq %rcx, %rcx + 0x48, 0x2b, 0x75, 0xd0, //0x00003abe subq $-48(%rbp), %rsi + 0x48, 0x01, 0xce, //0x00003ac2 addq %rcx, %rsi + 0x48, 0x89, 0x32, //0x00003ac5 movq %rsi, (%rdx) + 0xe9, 0xa9, 0xff, 0xff, 0xff, //0x00003ac8 jmp LBB13_16 + //0x00003acd LBB13_21 + 0x4d, 0x89, 0xcc, //0x00003acd movq %r9, %r12 + 0x49, 0x83, 0xfc, 0x20, //0x00003ad0 cmpq $32, %r12 + 0x0f, 0x82, 0xff, 0x00, 0x00, 0x00, //0x00003ad4 jb LBB13_34 + //0x00003ada LBB13_22 + 0xf3, 0x0f, 0x6f, 0x06, //0x00003ada movdqu (%rsi), %xmm0 + 0xf3, 0x0f, 0x6f, 0x4e, 0x10, //0x00003ade movdqu $16(%rsi), %xmm1 + 0x66, 0x0f, 0x6f, 0x15, 0xf5, 0xfc, 0xff, 0xff, //0x00003ae3 movdqa $-779(%rip), %xmm2 /* LCPI13_0+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xd8, //0x00003aeb movdqa %xmm0, %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x00003aef pcmpeqb %xmm2, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xc3, //0x00003af3 pmovmskb %xmm3, %r8d + 0x66, 0x0f, 0x74, 0xd1, //0x00003af8 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00003afc pmovmskb %xmm2, %ebx + 0x66, 0x0f, 0x6f, 0x15, 0xe8, 0xfc, 0xff, 0xff, //0x00003b00 movdqa $-792(%rip), %xmm2 /* LCPI13_1+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xd8, //0x00003b08 movdqa %xmm0, %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x00003b0c pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00003b10 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x74, 0xd1, //0x00003b14 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xc2, //0x00003b18 pmovmskb %xmm2, %eax + 0x66, 0x0f, 0x6f, 0x15, 0xdc, 0xfc, 0xff, 0xff, //0x00003b1c movdqa $-804(%rip), %xmm2 /* LCPI13_2+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xda, //0x00003b24 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x64, 0xd8, //0x00003b28 pcmpgtb %xmm0, %xmm3 + 0x66, 0x0f, 0x76, 0xe4, //0x00003b2c pcmpeqd %xmm4, %xmm4 + 0x66, 0x0f, 0x64, 0xc4, //0x00003b30 pcmpgtb %xmm4, %xmm0 + 0x66, 0x0f, 0xdb, 0xc3, //0x00003b34 pand %xmm3, %xmm0 + 0x66, 0x44, 0x0f, 0xd7, 0xc8, //0x00003b38 pmovmskb %xmm0, %r9d + 0x66, 0x0f, 0x64, 0xd1, //0x00003b3d pcmpgtb %xmm1, %xmm2 + 0x66, 0x0f, 0x64, 0xcc, //0x00003b41 pcmpgtb %xmm4, %xmm1 + 0x66, 0x0f, 0xdb, 0xca, //0x00003b45 pand %xmm2, %xmm1 + 0x66, 0x0f, 0xd7, 0xf9, //0x00003b49 pmovmskb %xmm1, %edi + 0x48, 0xc1, 0xe3, 0x10, //0x00003b4d shlq $16, %rbx + 0x48, 0xc1, 0xe0, 0x10, //0x00003b51 shlq $16, %rax + 0x48, 0x09, 0xc1, //0x00003b55 orq %rax, %rcx + 0x49, 0x83, 0xfe, 0xff, //0x00003b58 cmpq $-1, %r14 + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00003b5c jne LBB13_24 + 0x48, 0x85, 0xc9, //0x00003b62 testq %rcx, %rcx + 0x0f, 0x85, 0x64, 0x01, 0x00, 0x00, //0x00003b65 jne LBB13_49 + //0x00003b6b LBB13_24 + 0x48, 0xc1, 0xe7, 0x10, //0x00003b6b shlq $16, %rdi + 0x4c, 0x09, 0xc3, //0x00003b6f orq %r8, %rbx + 0x48, 0x89, 0xc8, //0x00003b72 movq %rcx, %rax + 0x4c, 0x09, 0xf8, //0x00003b75 orq %r15, %rax + 0x0f, 0x85, 0x06, 0x01, 0x00, 0x00, //0x00003b78 jne LBB13_47 + //0x00003b7e LBB13_25 + 0x4c, 0x09, 0xcf, //0x00003b7e orq %r9, %rdi + 0xb8, 0x40, 0x00, 0x00, 0x00, //0x00003b81 movl $64, %eax + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00003b86 movl $64, %ecx + 0x48, 0x85, 0xdb, //0x00003b8b testq %rbx, %rbx + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00003b8e je LBB13_27 + 0x48, 0x0f, 0xbc, 0xcb, //0x00003b94 bsfq %rbx, %rcx + //0x00003b98 LBB13_27 + 0x4c, 0x0f, 0xbc, 0xcf, //0x00003b98 bsfq %rdi, %r9 + 0x48, 0x85, 0xff, //0x00003b9c testq %rdi, %rdi + 0x0f, 0x84, 0x03, 0x00, 0x00, 0x00, //0x00003b9f je LBB13_29 + 0x4c, 0x89, 0xc8, //0x00003ba5 movq %r9, %rax + //0x00003ba8 LBB13_29 + 0x48, 0x85, 0xdb, //0x00003ba8 testq %rbx, %rbx + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00003bab je LBB13_32 + 0x48, 0x2b, 0x75, 0xd0, //0x00003bb1 subq $-48(%rbp), %rsi + 0x48, 0x39, 0xc8, //0x00003bb5 cmpq %rcx, %rax + 0x0f, 0x82, 0xff, 0x00, 0x00, 0x00, //0x00003bb8 jb LBB13_48 + 0x48, 0x8d, 0x44, 0x0e, 0x01, //0x00003bbe leaq $1(%rsi,%rcx), %rax + 0xe9, 0xae, 0xfe, 0xff, 0xff, //0x00003bc3 jmp LBB13_16 + //0x00003bc8 LBB13_32 + 0x48, 0x85, 0xff, //0x00003bc8 testq %rdi, %rdi + 0x0f, 0x85, 0x14, 0x01, 0x00, 0x00, //0x00003bcb jne LBB13_50 + 0x48, 0x83, 0xc6, 0x20, //0x00003bd1 addq $32, %rsi + 0x49, 0x83, 0xc4, 0xe0, //0x00003bd5 addq $-32, %r12 + //0x00003bd9 LBB13_34 + 0x4d, 0x85, 0xff, //0x00003bd9 testq %r15, %r15 + 0x0f, 0x85, 0x0f, 0x01, 0x00, 0x00, //0x00003bdc jne LBB13_51 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003be2 movq $-1, %rax + 0x4d, 0x85, 0xe4, //0x00003be9 testq %r12, %r12 + 0x0f, 0x84, 0x84, 0xfe, 0xff, 0xff, //0x00003bec je LBB13_16 + //0x00003bf2 LBB13_36 + 0x0f, 0xb6, 0x0e, //0x00003bf2 movzbl (%rsi), %ecx + 0x80, 0xf9, 0x22, //0x00003bf5 cmpb $34, %cl + 0x0f, 0x84, 0x5e, 0x00, 0x00, 0x00, //0x00003bf8 je LBB13_44 + 0x80, 0xf9, 0x5c, //0x00003bfe cmpb $92, %cl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00003c01 je LBB13_41 + 0x80, 0xf9, 0x1f, //0x00003c07 cmpb $31, %cl + 0x0f, 0x86, 0x28, 0x01, 0x00, 0x00, //0x00003c0a jbe LBB13_55 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003c10 movq $-1, %rcx + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00003c17 movl $1, %edi + //0x00003c1c LBB13_40 + 0x48, 0x01, 0xfe, //0x00003c1c addq %rdi, %rsi + 0x49, 0x01, 0xcc, //0x00003c1f addq %rcx, %r12 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00003c22 jne LBB13_36 + 0xe9, 0x49, 0xfe, 0xff, 0xff, //0x00003c28 jmp LBB13_16 + //0x00003c2d LBB13_41 + 0x49, 0x83, 0xfc, 0x01, //0x00003c2d cmpq $1, %r12 + 0x0f, 0x84, 0x3f, 0xfe, 0xff, 0xff, //0x00003c31 je LBB13_16 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003c37 movq $-2, %rcx + 0xbf, 0x02, 0x00, 0x00, 0x00, //0x00003c3e movl $2, %edi + 0x49, 0x83, 0xfe, 0xff, //0x00003c43 cmpq $-1, %r14 + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00003c47 jne LBB13_40 + 0x49, 0x89, 0xf6, //0x00003c4d movq %rsi, %r14 + 0x4c, 0x2b, 0x75, 0xd0, //0x00003c50 subq $-48(%rbp), %r14 + 0x4c, 0x89, 0x32, //0x00003c54 movq %r14, (%rdx) + 0xe9, 0xc0, 0xff, 0xff, 0xff, //0x00003c57 jmp LBB13_40 + //0x00003c5c LBB13_44 + 0x48, 0x2b, 0x75, 0xd0, //0x00003c5c subq $-48(%rbp), %rsi + 0x48, 0xff, 0xc6, //0x00003c60 incq %rsi + 0x48, 0x89, 0xf0, //0x00003c63 movq %rsi, %rax + 0xe9, 0x0b, 0xfe, 0xff, 0xff, //0x00003c66 jmp LBB13_16 + //0x00003c6b LBB13_46 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003c6b movq $-1, %r14 + 0x45, 0x31, 0xff, //0x00003c72 xorl %r15d, %r15d + 0x49, 0x83, 0xfc, 0x20, //0x00003c75 cmpq $32, %r12 + 0x0f, 0x83, 0x5b, 0xfe, 0xff, 0xff, //0x00003c79 jae LBB13_22 + 0xe9, 0x55, 0xff, 0xff, 0xff, //0x00003c7f jmp LBB13_34 + //0x00003c84 LBB13_47 + 0x45, 0x89, 0xfa, //0x00003c84 movl %r15d, %r10d + 0x41, 0xf7, 0xd2, //0x00003c87 notl %r10d + 0x41, 0x21, 0xca, //0x00003c8a andl %ecx, %r10d + 0x47, 0x8d, 0x04, 0x12, //0x00003c8d leal (%r10,%r10), %r8d + 0x45, 0x09, 0xf8, //0x00003c91 orl %r15d, %r8d + 0x44, 0x89, 0xc0, //0x00003c94 movl %r8d, %eax + 0xf7, 0xd0, //0x00003c97 notl %eax + 0x21, 0xc8, //0x00003c99 andl %ecx, %eax + 0x25, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003c9b andl $-1431655766, %eax + 0x45, 0x31, 0xff, //0x00003ca0 xorl %r15d, %r15d + 0x44, 0x01, 0xd0, //0x00003ca3 addl %r10d, %eax + 0x41, 0x0f, 0x92, 0xc7, //0x00003ca6 setb %r15b + 0x01, 0xc0, //0x00003caa addl %eax, %eax + 0x35, 0x55, 0x55, 0x55, 0x55, //0x00003cac xorl $1431655765, %eax + 0x44, 0x21, 0xc0, //0x00003cb1 andl %r8d, %eax + 0xf7, 0xd0, //0x00003cb4 notl %eax + 0x21, 0xc3, //0x00003cb6 andl %eax, %ebx + 0xe9, 0xc1, 0xfe, 0xff, 0xff, //0x00003cb8 jmp LBB13_25 + //0x00003cbd LBB13_48 + 0x48, 0x01, 0xf0, //0x00003cbd addq %rsi, %rax + 0x48, 0x89, 0x02, //0x00003cc0 movq %rax, (%rdx) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003cc3 movq $-2, %rax + 0xe9, 0xa7, 0xfd, 0xff, 0xff, //0x00003cca jmp LBB13_16 + //0x00003ccf LBB13_49 + 0x48, 0x89, 0xf0, //0x00003ccf movq %rsi, %rax + 0x48, 0x2b, 0x45, 0xd0, //0x00003cd2 subq $-48(%rbp), %rax + 0x4c, 0x0f, 0xbc, 0xf1, //0x00003cd6 bsfq %rcx, %r14 + 0x49, 0x01, 0xc6, //0x00003cda addq %rax, %r14 + 0x4c, 0x89, 0x32, //0x00003cdd movq %r14, (%rdx) + 0xe9, 0x86, 0xfe, 0xff, 0xff, //0x00003ce0 jmp LBB13_24 + //0x00003ce5 LBB13_50 + 0x48, 0x2b, 0x75, 0xd0, //0x00003ce5 subq $-48(%rbp), %rsi + 0x4c, 0x01, 0xce, //0x00003ce9 addq %r9, %rsi + 0xe9, 0x4b, 0x00, 0x00, 0x00, //0x00003cec jmp LBB13_56 + //0x00003cf1 LBB13_51 + 0x4d, 0x85, 0xe4, //0x00003cf1 testq %r12, %r12 + 0x0f, 0x84, 0x32, 0x00, 0x00, 0x00, //0x00003cf4 je LBB13_45 + 0x49, 0x83, 0xfe, 0xff, //0x00003cfa cmpq $-1, %r14 + 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x00003cfe jne LBB13_54 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003d04 movq $-48(%rbp), %r14 + 0x49, 0xf7, 0xd6, //0x00003d08 notq %r14 + 0x49, 0x01, 0xf6, //0x00003d0b addq %rsi, %r14 + 0x4c, 0x89, 0x32, //0x00003d0e movq %r14, (%rdx) + //0x00003d11 LBB13_54 + 0x48, 0xff, 0xc6, //0x00003d11 incq %rsi + 0x49, 0xff, 0xcc, //0x00003d14 decq %r12 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003d17 movq $-1, %rax + 0x4d, 0x85, 0xe4, //0x00003d1e testq %r12, %r12 + 0x0f, 0x85, 0xcb, 0xfe, 0xff, 0xff, //0x00003d21 jne LBB13_36 + 0xe9, 0x4a, 0xfd, 0xff, 0xff, //0x00003d27 jmp LBB13_16 + //0x00003d2c LBB13_45 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003d2c movq $-1, %rax + 0xe9, 0x3e, 0xfd, 0xff, 0xff, //0x00003d33 jmp LBB13_16 + //0x00003d38 LBB13_55 + 0x48, 0x2b, 0x75, 0xd0, //0x00003d38 subq $-48(%rbp), %rsi + //0x00003d3c LBB13_56 + 0x48, 0x89, 0x32, //0x00003d3c movq %rsi, (%rdx) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d3f movq $-2, %rax + 0xe9, 0x2b, 0xfd, 0xff, 0xff, //0x00003d46 jmp LBB13_16 + 0x00, 0x00, 0x00, 0x00, 0x00, //0x00003d4b .p2align 4, 0x00 + //0x00003d50 LCPI14_0 + 0x00, 0x00, 0x30, 0x43, //0x00003d50 .long 1127219200 + 0x00, 0x00, 0x30, 0x45, //0x00003d54 .long 1160773632 + 0x00, 0x00, 0x00, 0x00, //0x00003d58 .long 0 + 0x00, 0x00, 0x00, 0x00, //0x00003d5c .long 0 + //0x00003d60 LCPI14_1 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x43, //0x00003d60 .quad 4841369599423283200 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x45, //0x00003d68 .quad 4985484787499139072 + //0x00003d70 .p2align 3, 0x00 + //0x00003d70 LCPI14_2 + 0x00, 0x00, 0x34, 0x26, 0xf5, 0x6b, 0x0c, 0x43, //0x00003d70 .quad 4831355200913801216 + //0x00003d78 LCPI14_3 + 0x00, 0x00, 0x34, 0x26, 0xf5, 0x6b, 0x0c, 0xc3, //0x00003d78 .quad -4392016835940974592 + //0x00003d80 .p2align 4, 0x90 + //0x00003d80 _vnumber + 0x55, //0x00003d80 pushq %rbp + 0x48, 0x89, 0xe5, //0x00003d81 movq %rsp, %rbp + 0x41, 0x57, //0x00003d84 pushq %r15 + 0x41, 0x56, //0x00003d86 pushq %r14 + 0x41, 0x55, //0x00003d88 pushq %r13 + 0x41, 0x54, //0x00003d8a pushq %r12 + 0x53, //0x00003d8c pushq %rbx + 0x48, 0x83, 0xec, 0x38, //0x00003d8d subq $56, %rsp + 0x48, 0x89, 0xd3, //0x00003d91 movq %rdx, %rbx + 0x49, 0x89, 0xf6, //0x00003d94 movq %rsi, %r14 + 0x48, 0xc7, 0x45, 0xd0, 0x00, 0x00, 0x00, 0x00, //0x00003d97 movq $0, $-48(%rbp) + 0x48, 0x8b, 0x06, //0x00003d9f movq (%rsi), %rax + 0x4c, 0x8b, 0x3f, //0x00003da2 movq (%rdi), %r15 + 0x4c, 0x8b, 0x6f, 0x08, //0x00003da5 movq $8(%rdi), %r13 + 0x4c, 0x8b, 0x52, 0x20, //0x00003da9 movq $32(%rdx), %r10 + 0x4c, 0x8b, 0x5a, 0x28, //0x00003dad movq $40(%rdx), %r11 + 0x48, 0xc7, 0x02, 0x09, 0x00, 0x00, 0x00, //0x00003db1 movq $9, (%rdx) + 0x48, 0xc7, 0x42, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00003db8 movq $0, $8(%rdx) + 0x48, 0xc7, 0x42, 0x10, 0x00, 0x00, 0x00, 0x00, //0x00003dc0 movq $0, $16(%rdx) + 0x48, 0x8b, 0x0e, //0x00003dc8 movq (%rsi), %rcx + 0x48, 0x89, 0x4a, 0x18, //0x00003dcb movq %rcx, $24(%rdx) + 0x4c, 0x39, 0xe8, //0x00003dcf cmpq %r13, %rax + 0x0f, 0x83, 0xc1, 0x02, 0x00, 0x00, //0x00003dd2 jae LBB14_52 + 0x41, 0x8a, 0x3c, 0x07, //0x00003dd8 movb (%r15,%rax), %dil + 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00003ddc movl $1, %r9d + 0x40, 0x80, 0xff, 0x2d, //0x00003de2 cmpb $45, %dil + 0x0f, 0x85, 0x16, 0x00, 0x00, 0x00, //0x00003de6 jne LBB14_4 + 0x48, 0xff, 0xc0, //0x00003dec incq %rax + 0x4c, 0x39, 0xe8, //0x00003def cmpq %r13, %rax + 0x0f, 0x83, 0xa1, 0x02, 0x00, 0x00, //0x00003df2 jae LBB14_52 + 0x41, 0x8a, 0x3c, 0x07, //0x00003df8 movb (%r15,%rax), %dil + 0x41, 0xb9, 0xff, 0xff, 0xff, 0xff, //0x00003dfc movl $-1, %r9d + //0x00003e02 LBB14_4 + 0x8d, 0x4f, 0xd0, //0x00003e02 leal $-48(%rdi), %ecx + 0x80, 0xf9, 0x0a, //0x00003e05 cmpb $10, %cl + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x00003e08 jb LBB14_6 + //0x00003e0e LBB14_5 + 0x49, 0x89, 0x06, //0x00003e0e movq %rax, (%r14) + 0x48, 0xc7, 0x03, 0xfe, 0xff, 0xff, 0xff, //0x00003e11 movq $-2, (%rbx) + 0xe9, 0x86, 0x02, 0x00, 0x00, //0x00003e18 jmp LBB14_53 + //0x00003e1d LBB14_6 + 0x40, 0x80, 0xff, 0x30, //0x00003e1d cmpb $48, %dil + 0x0f, 0x85, 0x35, 0x00, 0x00, 0x00, //0x00003e21 jne LBB14_10 + 0x48, 0x8d, 0x70, 0x01, //0x00003e27 leaq $1(%rax), %rsi + 0x4c, 0x39, 0xe8, //0x00003e2b cmpq %r13, %rax + 0x0f, 0x83, 0x9d, 0x00, 0x00, 0x00, //0x00003e2e jae LBB14_19 + 0x41, 0x8a, 0x14, 0x37, //0x00003e34 movb (%r15,%rsi), %dl + 0x80, 0xc2, 0xd2, //0x00003e38 addb $-46, %dl + 0x80, 0xfa, 0x37, //0x00003e3b cmpb $55, %dl + 0x0f, 0x87, 0x8d, 0x00, 0x00, 0x00, //0x00003e3e ja LBB14_19 + 0x44, 0x0f, 0xb6, 0xc2, //0x00003e44 movzbl %dl, %r8d + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00003e48 movabsq $36028797027352577, %rdx + 0x4c, 0x0f, 0xa3, 0xc2, //0x00003e52 btq %r8, %rdx + 0x0f, 0x83, 0x75, 0x00, 0x00, 0x00, //0x00003e56 jae LBB14_19 + //0x00003e5c LBB14_10 + 0x4c, 0x39, 0xe8, //0x00003e5c cmpq %r13, %rax + 0x0f, 0x83, 0x60, 0x00, 0x00, 0x00, //0x00003e5f jae LBB14_18 + 0x80, 0xf9, 0x09, //0x00003e65 cmpb $9, %cl + 0x0f, 0x87, 0x6b, 0x00, 0x00, 0x00, //0x00003e68 ja LBB14_20 + 0x4d, 0x8d, 0x45, 0xff, //0x00003e6e leaq $-1(%r13), %r8 + 0x31, 0xc9, //0x00003e72 xorl %ecx, %ecx + 0x31, 0xf6, //0x00003e74 xorl %esi, %esi + 0x45, 0x31, 0xe4, //0x00003e76 xorl %r12d, %r12d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003e79 .p2align 4, 0x90 + //0x00003e80 LBB14_13 + 0x83, 0xfe, 0x12, //0x00003e80 cmpl $18, %esi + 0x0f, 0x8f, 0x17, 0x00, 0x00, 0x00, //0x00003e83 jg LBB14_15 + 0x48, 0x0f, 0xbe, 0xff, //0x00003e89 movsbq %dil, %rdi + 0x4b, 0x8d, 0x14, 0xa4, //0x00003e8d leaq (%r12,%r12,4), %rdx + 0x4c, 0x8d, 0x64, 0x57, 0xd0, //0x00003e91 leaq $-48(%rdi,%rdx,2), %r12 + 0xff, 0xc6, //0x00003e96 incl %esi + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00003e98 jmp LBB14_16 + 0x90, 0x90, 0x90, //0x00003e9d .p2align 4, 0x90 + //0x00003ea0 LBB14_15 + 0xff, 0xc1, //0x00003ea0 incl %ecx + //0x00003ea2 LBB14_16 + 0x49, 0x39, 0xc0, //0x00003ea2 cmpq %rax, %r8 + 0x0f, 0x84, 0x7d, 0x00, 0x00, 0x00, //0x00003ea5 je LBB14_24 + 0x41, 0x0f, 0xb6, 0x7c, 0x07, 0x01, //0x00003eab movzbl $1(%r15,%rax), %edi + 0x48, 0xff, 0xc0, //0x00003eb1 incq %rax + 0x8d, 0x57, 0xd0, //0x00003eb4 leal $-48(%rdi), %edx + 0x80, 0xfa, 0x0a, //0x00003eb7 cmpb $10, %dl + 0x0f, 0x82, 0xc0, 0xff, 0xff, 0xff, //0x00003eba jb LBB14_13 + 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x00003ec0 jmp LBB14_21 + //0x00003ec5 LBB14_18 + 0x31, 0xc9, //0x00003ec5 xorl %ecx, %ecx + 0x31, 0xf6, //0x00003ec7 xorl %esi, %esi + 0x45, 0x31, 0xe4, //0x00003ec9 xorl %r12d, %r12d + 0xe9, 0x5a, 0x00, 0x00, 0x00, //0x00003ecc jmp LBB14_25 + //0x00003ed1 LBB14_19 + 0x49, 0x89, 0x36, //0x00003ed1 movq %rsi, (%r14) + 0xe9, 0xca, 0x01, 0x00, 0x00, //0x00003ed4 jmp LBB14_53 + //0x00003ed9 LBB14_20 + 0x45, 0x31, 0xe4, //0x00003ed9 xorl %r12d, %r12d + 0x31, 0xf6, //0x00003edc xorl %esi, %esi + 0x31, 0xc9, //0x00003ede xorl %ecx, %ecx + //0x00003ee0 LBB14_21 + 0x31, 0xd2, //0x00003ee0 xorl %edx, %edx + 0x85, 0xc9, //0x00003ee2 testl %ecx, %ecx + 0x0f, 0x9f, 0xc2, //0x00003ee4 setg %dl + 0x89, 0x55, 0xcc, //0x00003ee7 movl %edx, $-52(%rbp) + 0x41, 0xb8, 0x09, 0x00, 0x00, 0x00, //0x00003eea movl $9, %r8d + 0x40, 0x80, 0xff, 0x2e, //0x00003ef0 cmpb $46, %dil + 0x0f, 0x85, 0x41, 0x00, 0x00, 0x00, //0x00003ef4 jne LBB14_26 + 0x48, 0xff, 0xc0, //0x00003efa incq %rax + 0x48, 0xc7, 0x03, 0x08, 0x00, 0x00, 0x00, //0x00003efd movq $8, (%rbx) + 0x4c, 0x39, 0xe8, //0x00003f04 cmpq %r13, %rax + 0x0f, 0x83, 0x8c, 0x01, 0x00, 0x00, //0x00003f07 jae LBB14_52 + 0x41, 0x8a, 0x14, 0x07, //0x00003f0d movb (%r15,%rax), %dl + 0x80, 0xc2, 0xd0, //0x00003f11 addb $-48, %dl + 0x41, 0xb8, 0x08, 0x00, 0x00, 0x00, //0x00003f14 movl $8, %r8d + 0x80, 0xfa, 0x0a, //0x00003f1a cmpb $10, %dl + 0x0f, 0x83, 0xeb, 0xfe, 0xff, 0xff, //0x00003f1d jae LBB14_5 + 0xe9, 0x13, 0x00, 0x00, 0x00, //0x00003f23 jmp LBB14_26 + //0x00003f28 LBB14_24 + 0x4c, 0x89, 0xe8, //0x00003f28 movq %r13, %rax + //0x00003f2b LBB14_25 + 0x31, 0xd2, //0x00003f2b xorl %edx, %edx + 0x85, 0xc9, //0x00003f2d testl %ecx, %ecx + 0x0f, 0x9f, 0xc2, //0x00003f2f setg %dl + 0x89, 0x55, 0xcc, //0x00003f32 movl %edx, $-52(%rbp) + 0x41, 0xb8, 0x09, 0x00, 0x00, 0x00, //0x00003f35 movl $9, %r8d + //0x00003f3b LBB14_26 + 0x85, 0xc9, //0x00003f3b testl %ecx, %ecx + 0x0f, 0x85, 0x4f, 0x00, 0x00, 0x00, //0x00003f3d jne LBB14_35 + 0x4d, 0x85, 0xe4, //0x00003f43 testq %r12, %r12 + 0x0f, 0x85, 0x46, 0x00, 0x00, 0x00, //0x00003f46 jne LBB14_35 + 0x4c, 0x39, 0xe8, //0x00003f4c cmpq %r13, %rax + 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00003f4f jae LBB14_33 + 0x89, 0xc7, //0x00003f55 movl %eax, %edi + 0x44, 0x29, 0xef, //0x00003f57 subl %r13d, %edi + 0x31, 0xf6, //0x00003f5a xorl %esi, %esi + 0x31, 0xc9, //0x00003f5c xorl %ecx, %ecx + 0x90, 0x90, //0x00003f5e .p2align 4, 0x90 + //0x00003f60 LBB14_30 + 0x41, 0x80, 0x3c, 0x07, 0x30, //0x00003f60 cmpb $48, (%r15,%rax) + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003f65 jne LBB14_34 + 0x48, 0xff, 0xc0, //0x00003f6b incq %rax + 0xff, 0xc9, //0x00003f6e decl %ecx + 0x49, 0x39, 0xc5, //0x00003f70 cmpq %rax, %r13 + 0x0f, 0x85, 0xe7, 0xff, 0xff, 0xff, //0x00003f73 jne LBB14_30 + 0x45, 0x31, 0xe4, //0x00003f79 xorl %r12d, %r12d + 0x41, 0x83, 0xf8, 0x09, //0x00003f7c cmpl $9, %r8d + 0x0f, 0x84, 0x3b, 0x01, 0x00, 0x00, //0x00003f80 je LBB14_55 + 0xe9, 0x6a, 0x01, 0x00, 0x00, //0x00003f86 jmp LBB14_59 + //0x00003f8b LBB14_33 + 0x31, 0xc9, //0x00003f8b xorl %ecx, %ecx + 0x31, 0xf6, //0x00003f8d xorl %esi, %esi + //0x00003f8f LBB14_34 + 0x45, 0x31, 0xe4, //0x00003f8f xorl %r12d, %r12d + //0x00003f92 LBB14_35 + 0x4c, 0x39, 0xe8, //0x00003f92 cmpq %r13, %rax + 0x0f, 0x83, 0x4b, 0x00, 0x00, 0x00, //0x00003f95 jae LBB14_40 + 0x83, 0xfe, 0x12, //0x00003f9b cmpl $18, %esi + 0x0f, 0x8f, 0x42, 0x00, 0x00, 0x00, //0x00003f9e jg LBB14_40 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003fa4 .p2align 4, 0x90 + //0x00003fb0 LBB14_37 + 0x41, 0x0f, 0xb6, 0x3c, 0x07, //0x00003fb0 movzbl (%r15,%rax), %edi + 0x8d, 0x57, 0xd0, //0x00003fb5 leal $-48(%rdi), %edx + 0x80, 0xfa, 0x09, //0x00003fb8 cmpb $9, %dl + 0x0f, 0x87, 0x25, 0x00, 0x00, 0x00, //0x00003fbb ja LBB14_40 + 0x4b, 0x8d, 0x14, 0xa4, //0x00003fc1 leaq (%r12,%r12,4), %rdx + 0x4c, 0x8d, 0x64, 0x57, 0xd0, //0x00003fc5 leaq $-48(%rdi,%rdx,2), %r12 + 0xff, 0xc9, //0x00003fca decl %ecx + 0x48, 0xff, 0xc0, //0x00003fcc incq %rax + 0x4c, 0x39, 0xe8, //0x00003fcf cmpq %r13, %rax + 0x0f, 0x83, 0x0e, 0x00, 0x00, 0x00, //0x00003fd2 jae LBB14_40 + 0x8d, 0x56, 0x01, //0x00003fd8 leal $1(%rsi), %edx + 0x83, 0xfe, 0x12, //0x00003fdb cmpl $18, %esi + 0x89, 0xd6, //0x00003fde movl %edx, %esi + 0x0f, 0x8c, 0xca, 0xff, 0xff, 0xff, //0x00003fe0 jl LBB14_37 + //0x00003fe6 LBB14_40 + 0x4c, 0x39, 0xe8, //0x00003fe6 cmpq %r13, %rax + 0x0f, 0x83, 0xc3, 0x00, 0x00, 0x00, //0x00003fe9 jae LBB14_54 + 0x41, 0x8a, 0x34, 0x07, //0x00003fef movb (%r15,%rax), %sil + 0x8d, 0x56, 0xd0, //0x00003ff3 leal $-48(%rsi), %edx + 0x80, 0xfa, 0x09, //0x00003ff6 cmpb $9, %dl + 0x0f, 0x87, 0x36, 0x00, 0x00, 0x00, //0x00003ff9 ja LBB14_46 + 0x49, 0x8d, 0x7d, 0xff, //0x00003fff leaq $-1(%r13), %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004003 .p2align 4, 0x90 + //0x00004010 LBB14_43 + 0x48, 0x39, 0xc7, //0x00004010 cmpq %rax, %rdi + 0x0f, 0x84, 0x42, 0x02, 0x00, 0x00, //0x00004013 je LBB14_76 + 0x41, 0x0f, 0xb6, 0x74, 0x07, 0x01, //0x00004019 movzbl $1(%r15,%rax), %esi + 0x48, 0xff, 0xc0, //0x0000401f incq %rax + 0x8d, 0x56, 0xd0, //0x00004022 leal $-48(%rsi), %edx + 0x80, 0xfa, 0x09, //0x00004025 cmpb $9, %dl + 0x0f, 0x86, 0xe2, 0xff, 0xff, 0xff, //0x00004028 jbe LBB14_43 + 0xc7, 0x45, 0xcc, 0x01, 0x00, 0x00, 0x00, //0x0000402e movl $1, $-52(%rbp) + //0x00004035 LBB14_46 + 0x40, 0x80, 0xce, 0x20, //0x00004035 orb $32, %sil + 0x40, 0x80, 0xfe, 0x65, //0x00004039 cmpb $101, %sil + 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x0000403d jne LBB14_54 + 0x48, 0x8d, 0x78, 0x01, //0x00004043 leaq $1(%rax), %rdi + 0x48, 0xc7, 0x03, 0x08, 0x00, 0x00, 0x00, //0x00004047 movq $8, (%rbx) + 0x4c, 0x39, 0xef, //0x0000404e cmpq %r13, %rdi + 0x0f, 0x83, 0x42, 0x00, 0x00, 0x00, //0x00004051 jae LBB14_52 + 0x41, 0x8a, 0x34, 0x3f, //0x00004057 movb (%r15,%rdi), %sil + 0x40, 0x80, 0xfe, 0x2d, //0x0000405b cmpb $45, %sil + 0x0f, 0x84, 0x10, 0x00, 0x00, 0x00, //0x0000405f je LBB14_50 + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00004065 movl $1, %r8d + 0x40, 0x80, 0xfe, 0x2b, //0x0000406b cmpb $43, %sil + 0x0f, 0x85, 0x98, 0x02, 0x00, 0x00, //0x0000406f jne LBB14_85 + //0x00004075 LBB14_50 + 0x48, 0x83, 0xc0, 0x02, //0x00004075 addq $2, %rax + 0x4c, 0x39, 0xe8, //0x00004079 cmpq %r13, %rax + 0x0f, 0x83, 0x17, 0x00, 0x00, 0x00, //0x0000407c jae LBB14_52 + 0x31, 0xd2, //0x00004082 xorl %edx, %edx + 0x40, 0x80, 0xfe, 0x2b, //0x00004084 cmpb $43, %sil + 0x0f, 0x94, 0xc2, //0x00004088 sete %dl + 0x44, 0x8d, 0x44, 0x12, 0xff, //0x0000408b leal $-1(%rdx,%rdx), %r8d + 0x41, 0x8a, 0x34, 0x07, //0x00004090 movb (%r15,%rax), %sil + 0xe9, 0x77, 0x02, 0x00, 0x00, //0x00004094 jmp LBB14_86 + //0x00004099 LBB14_52 + 0x4d, 0x89, 0x2e, //0x00004099 movq %r13, (%r14) + 0x48, 0xc7, 0x03, 0xff, 0xff, 0xff, 0xff, //0x0000409c movq $-1, (%rbx) + //0x000040a3 LBB14_53 + 0x48, 0x83, 0xc4, 0x38, //0x000040a3 addq $56, %rsp + 0x5b, //0x000040a7 popq %rbx + 0x41, 0x5c, //0x000040a8 popq %r12 + 0x41, 0x5d, //0x000040aa popq %r13 + 0x41, 0x5e, //0x000040ac popq %r14 + 0x41, 0x5f, //0x000040ae popq %r15 + 0x5d, //0x000040b0 popq %rbp + 0xc3, //0x000040b1 retq + //0x000040b2 LBB14_54 + 0x89, 0xcf, //0x000040b2 movl %ecx, %edi + 0x49, 0x89, 0xc5, //0x000040b4 movq %rax, %r13 + 0x41, 0x83, 0xf8, 0x09, //0x000040b7 cmpl $9, %r8d + 0x0f, 0x85, 0x34, 0x00, 0x00, 0x00, //0x000040bb jne LBB14_59 + //0x000040c1 LBB14_55 + 0x85, 0xff, //0x000040c1 testl %edi, %edi + 0x0f, 0x85, 0x25, 0x00, 0x00, 0x00, //0x000040c3 jne LBB14_58 + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x000040c9 movabsq $-9223372036854775808, %rax + 0x49, 0x63, 0xc9, //0x000040d3 movslq %r9d, %rcx + 0x4d, 0x85, 0xe4, //0x000040d6 testq %r12, %r12 + 0x0f, 0x89, 0xbc, 0x01, 0x00, 0x00, //0x000040d9 jns LBB14_80 + 0x4c, 0x89, 0xe2, //0x000040df movq %r12, %rdx + 0x48, 0x21, 0xca, //0x000040e2 andq %rcx, %rdx + 0x48, 0x39, 0xc2, //0x000040e5 cmpq %rax, %rdx + 0x0f, 0x84, 0xad, 0x01, 0x00, 0x00, //0x000040e8 je LBB14_80 + //0x000040ee LBB14_58 + 0x48, 0xc7, 0x03, 0x08, 0x00, 0x00, 0x00, //0x000040ee movq $8, (%rbx) + //0x000040f5 LBB14_59 + 0x48, 0xc7, 0x45, 0xc0, 0x00, 0x00, 0x00, 0x00, //0x000040f5 movq $0, $-64(%rbp) + 0x66, 0x49, 0x0f, 0x6e, 0xcc, //0x000040fd movq %r12, %xmm1 + 0x66, 0x0f, 0x62, 0x0d, 0x46, 0xfc, 0xff, 0xff, //0x00004102 punpckldq $-954(%rip), %xmm1 /* LCPI14_0+0(%rip) */ + 0x66, 0x0f, 0x5c, 0x0d, 0x4e, 0xfc, 0xff, 0xff, //0x0000410a subpd $-946(%rip), %xmm1 /* LCPI14_1+0(%rip) */ + 0x66, 0x0f, 0x28, 0xc1, //0x00004112 movapd %xmm1, %xmm0 + 0x66, 0x0f, 0x15, 0xc1, //0x00004116 unpckhpd %xmm1, %xmm0 + 0xf2, 0x0f, 0x58, 0xc1, //0x0000411a addsd %xmm1, %xmm0 + 0xf2, 0x0f, 0x11, 0x45, 0xd0, //0x0000411e movsd %xmm0, $-48(%rbp) + 0x4c, 0x89, 0xe0, //0x00004123 movq %r12, %rax + 0x48, 0xc1, 0xe8, 0x34, //0x00004126 shrq $52, %rax + 0x0f, 0x84, 0xc8, 0x00, 0x00, 0x00, //0x0000412a je LBB14_71 + //0x00004130 LBB14_60 + 0x4c, 0x89, 0x5d, 0xb0, //0x00004130 movq %r11, $-80(%rbp) + 0x4c, 0x89, 0x55, 0xa8, //0x00004134 movq %r10, $-88(%rbp) + 0x48, 0x8d, 0x4d, 0xd0, //0x00004138 leaq $-48(%rbp), %rcx + 0x48, 0x89, 0xfe, //0x0000413c movq %rdi, %rsi + 0x4c, 0x89, 0xe7, //0x0000413f movq %r12, %rdi + 0x48, 0x89, 0x75, 0xb8, //0x00004142 movq %rsi, $-72(%rbp) + 0x44, 0x89, 0xca, //0x00004146 movl %r9d, %edx + 0x44, 0x89, 0x4d, 0xc8, //0x00004149 movl %r9d, $-56(%rbp) + 0xe8, 0x7e, 0xe6, 0xff, 0xff, //0x0000414d callq _atof_eisel_lemire64 + 0x84, 0xc0, //0x00004152 testb %al, %al + 0x0f, 0x84, 0x42, 0x00, 0x00, 0x00, //0x00004154 je LBB14_64 + 0x48, 0x8b, 0x75, 0xb8, //0x0000415a movq $-72(%rbp), %rsi + 0x8b, 0x55, 0xc8, //0x0000415e movl $-56(%rbp), %edx + 0x83, 0x7d, 0xcc, 0x00, //0x00004161 cmpl $0, $-52(%rbp) + 0x0f, 0x84, 0x27, 0x01, 0x00, 0x00, //0x00004165 je LBB14_79 + 0x49, 0xff, 0xc4, //0x0000416b incq %r12 + 0x48, 0x8d, 0x4d, 0xc0, //0x0000416e leaq $-64(%rbp), %rcx + 0x4c, 0x89, 0xe7, //0x00004172 movq %r12, %rdi + 0xe8, 0x56, 0xe6, 0xff, 0xff, //0x00004175 callq _atof_eisel_lemire64 + 0x84, 0xc0, //0x0000417a testb %al, %al + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x0000417c je LBB14_64 + 0xf2, 0x0f, 0x10, 0x4d, 0xc0, //0x00004182 movsd $-64(%rbp), %xmm1 + 0xf2, 0x0f, 0x10, 0x45, 0xd0, //0x00004187 movsd $-48(%rbp), %xmm0 + 0x66, 0x0f, 0x2e, 0xc8, //0x0000418c ucomisd %xmm0, %xmm1 + 0x0f, 0x85, 0x06, 0x00, 0x00, 0x00, //0x00004190 jne LBB14_64 + 0x0f, 0x8b, 0x21, 0x00, 0x00, 0x00, //0x00004196 jnp LBB14_66 + //0x0000419c LBB14_64 + 0x49, 0x8b, 0x06, //0x0000419c movq (%r14), %rax + 0x49, 0x01, 0xc7, //0x0000419f addq %rax, %r15 + 0x4c, 0x89, 0xee, //0x000041a2 movq %r13, %rsi + 0x48, 0x29, 0xc6, //0x000041a5 subq %rax, %rsi + 0x4c, 0x89, 0xff, //0x000041a8 movq %r15, %rdi + 0x48, 0x8b, 0x55, 0xa8, //0x000041ab movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x4d, 0xb0, //0x000041af movq $-80(%rbp), %rcx + 0xe8, 0x28, 0xec, 0xff, 0xff, //0x000041b3 callq _atof_native + //0x000041b8 LBB14_65 + 0xf2, 0x0f, 0x11, 0x45, 0xd0, //0x000041b8 movsd %xmm0, $-48(%rbp) + //0x000041bd LBB14_66 + 0x66, 0x48, 0x0f, 0x7e, 0xc0, //0x000041bd movq %xmm0, %rax + //0x000041c2 LBB14_67 + 0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x000041c2 movabsq $-9223372036854775808, %rcx + 0x48, 0xff, 0xc9, //0x000041cc decq %rcx + 0x48, 0x21, 0xc1, //0x000041cf andq %rax, %rcx + 0x48, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, //0x000041d2 movabsq $9218868437227405312, %rdx + 0x48, 0x39, 0xd1, //0x000041dc cmpq %rdx, %rcx + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x000041df jne LBB14_69 + 0x48, 0xc7, 0x03, 0xf8, 0xff, 0xff, 0xff, //0x000041e5 movq $-8, (%rbx) + //0x000041ec LBB14_69 + 0x48, 0x89, 0x43, 0x08, //0x000041ec movq %rax, $8(%rbx) + //0x000041f0 LBB14_70 + 0x4d, 0x89, 0x2e, //0x000041f0 movq %r13, (%r14) + 0xe9, 0xab, 0xfe, 0xff, 0xff, //0x000041f3 jmp LBB14_53 + //0x000041f8 LBB14_71 + 0x66, 0x48, 0x0f, 0x7e, 0xc1, //0x000041f8 movq %xmm0, %rcx + 0x44, 0x89, 0xc8, //0x000041fd movl %r9d, %eax + 0xc1, 0xe8, 0x1f, //0x00004200 shrl $31, %eax + 0x48, 0xc1, 0xe0, 0x3f, //0x00004203 shlq $63, %rax + 0x48, 0x09, 0xc8, //0x00004207 orq %rcx, %rax + 0x48, 0x89, 0x45, 0xd0, //0x0000420a movq %rax, $-48(%rbp) + 0x4d, 0x85, 0xe4, //0x0000420e testq %r12, %r12 + 0x0f, 0x84, 0xab, 0xff, 0xff, 0xff, //0x00004211 je LBB14_67 + 0x85, 0xff, //0x00004217 testl %edi, %edi + 0x0f, 0x84, 0xa3, 0xff, 0xff, 0xff, //0x00004219 je LBB14_67 + 0x66, 0x48, 0x0f, 0x6e, 0xc0, //0x0000421f movq %rax, %xmm0 + 0x8d, 0x47, 0xff, //0x00004224 leal $-1(%rdi), %eax + 0x83, 0xf8, 0x24, //0x00004227 cmpl $36, %eax + 0x0f, 0x87, 0x43, 0x00, 0x00, 0x00, //0x0000422a ja LBB14_77 + 0x83, 0xff, 0x17, //0x00004230 cmpl $23, %edi + 0x0f, 0x8c, 0x9f, 0x00, 0x00, 0x00, //0x00004233 jl LBB14_81 + 0x48, 0x63, 0xc7, //0x00004239 movslq %edi, %rax + 0x48, 0x8d, 0x0d, 0x9d, 0xf1, 0x00, 0x00, //0x0000423c leaq $61853(%rip), %rcx /* _P10_TAB+0(%rip) */ + 0xf2, 0x0f, 0x59, 0x84, 0xc1, 0x50, 0xff, 0xff, 0xff, //0x00004243 mulsd $-176(%rcx,%rax,8), %xmm0 + 0xf2, 0x0f, 0x11, 0x45, 0xd0, //0x0000424c movsd %xmm0, $-48(%rbp) + 0xb8, 0x16, 0x00, 0x00, 0x00, //0x00004251 movl $22, %eax + 0xe9, 0x7f, 0x00, 0x00, 0x00, //0x00004256 jmp LBB14_82 + //0x0000425b LBB14_76 + 0xc7, 0x45, 0xcc, 0x01, 0x00, 0x00, 0x00, //0x0000425b movl $1, $-52(%rbp) + 0x89, 0xcf, //0x00004262 movl %ecx, %edi + 0x41, 0x83, 0xf8, 0x09, //0x00004264 cmpl $9, %r8d + 0x0f, 0x84, 0x53, 0xfe, 0xff, 0xff, //0x00004268 je LBB14_55 + 0xe9, 0x82, 0xfe, 0xff, 0xff, //0x0000426e jmp LBB14_59 + //0x00004273 LBB14_77 + 0x83, 0xff, 0xea, //0x00004273 cmpl $-22, %edi + 0x0f, 0x82, 0xb4, 0xfe, 0xff, 0xff, //0x00004276 jb LBB14_60 + 0xf7, 0xdf, //0x0000427c negl %edi + 0x48, 0x63, 0xc7, //0x0000427e movslq %edi, %rax + 0x48, 0x8d, 0x0d, 0x58, 0xf1, 0x00, 0x00, //0x00004281 leaq $61784(%rip), %rcx /* _P10_TAB+0(%rip) */ + 0xf2, 0x0f, 0x5e, 0x04, 0xc1, //0x00004288 divsd (%rcx,%rax,8), %xmm0 + 0xe9, 0x26, 0xff, 0xff, 0xff, //0x0000428d jmp LBB14_65 + //0x00004292 LBB14_79 + 0x48, 0x8b, 0x45, 0xd0, //0x00004292 movq $-48(%rbp), %rax + 0xe9, 0x27, 0xff, 0xff, 0xff, //0x00004296 jmp LBB14_67 + //0x0000429b LBB14_80 + 0x66, 0x49, 0x0f, 0x6e, 0xc4, //0x0000429b movq %r12, %xmm0 + 0x4c, 0x0f, 0xaf, 0xe1, //0x000042a0 imulq %rcx, %r12 + 0x66, 0x0f, 0x62, 0x05, 0xa4, 0xfa, 0xff, 0xff, //0x000042a4 punpckldq $-1372(%rip), %xmm0 /* LCPI14_0+0(%rip) */ + 0x66, 0x0f, 0x5c, 0x05, 0xac, 0xfa, 0xff, 0xff, //0x000042ac subpd $-1364(%rip), %xmm0 /* LCPI14_1+0(%rip) */ + 0x4c, 0x89, 0x63, 0x10, //0x000042b4 movq %r12, $16(%rbx) + 0x66, 0x0f, 0x28, 0xc8, //0x000042b8 movapd %xmm0, %xmm1 + 0x66, 0x0f, 0x15, 0xc8, //0x000042bc unpckhpd %xmm0, %xmm1 + 0xf2, 0x0f, 0x58, 0xc8, //0x000042c0 addsd %xmm0, %xmm1 + 0x48, 0x21, 0xc8, //0x000042c4 andq %rcx, %rax + 0x66, 0x48, 0x0f, 0x7e, 0xc9, //0x000042c7 movq %xmm1, %rcx + 0x48, 0x09, 0xc1, //0x000042cc orq %rax, %rcx + 0x48, 0x89, 0x4b, 0x08, //0x000042cf movq %rcx, $8(%rbx) + 0xe9, 0x18, 0xff, 0xff, 0xff, //0x000042d3 jmp LBB14_70 + //0x000042d8 LBB14_81 + 0x89, 0xf8, //0x000042d8 movl %edi, %eax + //0x000042da LBB14_82 + 0x66, 0x0f, 0x2e, 0x05, 0x8e, 0xfa, 0xff, 0xff, //0x000042da ucomisd $-1394(%rip), %xmm0 /* LCPI14_2+0(%rip) */ + 0x0f, 0x87, 0x48, 0xfe, 0xff, 0xff, //0x000042e2 ja LBB14_60 + 0xf2, 0x0f, 0x10, 0x0d, 0x88, 0xfa, 0xff, 0xff, //0x000042e8 movsd $-1400(%rip), %xmm1 /* LCPI14_3+0(%rip) */ + 0x66, 0x0f, 0x2e, 0xc8, //0x000042f0 ucomisd %xmm0, %xmm1 + 0x0f, 0x87, 0x36, 0xfe, 0xff, 0xff, //0x000042f4 ja LBB14_60 + 0x89, 0xc0, //0x000042fa movl %eax, %eax + 0x48, 0x8d, 0x0d, 0xdd, 0xf0, 0x00, 0x00, //0x000042fc leaq $61661(%rip), %rcx /* _P10_TAB+0(%rip) */ + 0xf2, 0x0f, 0x59, 0x04, 0xc1, //0x00004303 mulsd (%rcx,%rax,8), %xmm0 + 0xe9, 0xab, 0xfe, 0xff, 0xff, //0x00004308 jmp LBB14_65 + //0x0000430d LBB14_85 + 0x48, 0x89, 0xf8, //0x0000430d movq %rdi, %rax + //0x00004310 LBB14_86 + 0x8d, 0x7e, 0xd0, //0x00004310 leal $-48(%rsi), %edi + 0x40, 0x80, 0xff, 0x09, //0x00004313 cmpb $9, %dil + 0x0f, 0x87, 0xf1, 0xfa, 0xff, 0xff, //0x00004317 ja LBB14_5 + 0x44, 0x89, 0x4d, 0xc8, //0x0000431d movl %r9d, $-56(%rbp) + 0x4c, 0x39, 0xe8, //0x00004321 cmpq %r13, %rax + 0x0f, 0x83, 0x49, 0x00, 0x00, 0x00, //0x00004324 jae LBB14_93 + 0x40, 0x80, 0xff, 0x09, //0x0000432a cmpb $9, %dil + 0x0f, 0x87, 0x3f, 0x00, 0x00, 0x00, //0x0000432e ja LBB14_93 + 0x4d, 0x8d, 0x4d, 0xff, //0x00004334 leaq $-1(%r13), %r9 + 0x31, 0xff, //0x00004338 xorl %edi, %edi + //0x0000433a LBB14_90 + 0x89, 0xfa, //0x0000433a movl %edi, %edx + 0x81, 0xff, 0x10, 0x27, 0x00, 0x00, //0x0000433c cmpl $10000, %edi + 0x8d, 0x3c, 0x92, //0x00004342 leal (%rdx,%rdx,4), %edi + 0x40, 0x0f, 0xb6, 0xf6, //0x00004345 movzbl %sil, %esi + 0x8d, 0x7c, 0x7e, 0xd0, //0x00004349 leal $-48(%rsi,%rdi,2), %edi + 0x0f, 0x4d, 0xfa, //0x0000434d cmovgel %edx, %edi + 0x49, 0x39, 0xc1, //0x00004350 cmpq %rax, %r9 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00004353 je LBB14_94 + 0x41, 0x0f, 0xb6, 0x74, 0x07, 0x01, //0x00004359 movzbl $1(%r15,%rax), %esi + 0x48, 0xff, 0xc0, //0x0000435f incq %rax + 0x8d, 0x56, 0xd0, //0x00004362 leal $-48(%rsi), %edx + 0x80, 0xfa, 0x0a, //0x00004365 cmpb $10, %dl + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00004368 jb LBB14_90 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x0000436e jmp LBB14_95 + //0x00004373 LBB14_93 + 0x31, 0xff, //0x00004373 xorl %edi, %edi + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00004375 jmp LBB14_95 + //0x0000437a LBB14_94 + 0x4c, 0x89, 0xe8, //0x0000437a movq %r13, %rax + //0x0000437d LBB14_95 + 0x41, 0x0f, 0xaf, 0xf8, //0x0000437d imull %r8d, %edi + 0x01, 0xcf, //0x00004381 addl %ecx, %edi + 0x49, 0x89, 0xc5, //0x00004383 movq %rax, %r13 + 0x44, 0x8b, 0x4d, 0xc8, //0x00004386 movl $-56(%rbp), %r9d + 0xe9, 0x66, 0xfd, 0xff, 0xff, //0x0000438a jmp LBB14_59 + 0x90, //0x0000438f .p2align 4, 0x90 + //0x00004390 _vsigned + 0x55, //0x00004390 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004391 movq %rsp, %rbp + 0x53, //0x00004394 pushq %rbx + 0x48, 0x8b, 0x1e, //0x00004395 movq (%rsi), %rbx + 0x4c, 0x8b, 0x07, //0x00004398 movq (%rdi), %r8 + 0x4c, 0x8b, 0x57, 0x08, //0x0000439b movq $8(%rdi), %r10 + 0x48, 0xc7, 0x02, 0x09, 0x00, 0x00, 0x00, //0x0000439f movq $9, (%rdx) + 0x48, 0xc7, 0x42, 0x08, 0x00, 0x00, 0x00, 0x00, //0x000043a6 movq $0, $8(%rdx) + 0x48, 0xc7, 0x42, 0x10, 0x00, 0x00, 0x00, 0x00, //0x000043ae movq $0, $16(%rdx) + 0x48, 0x8b, 0x0e, //0x000043b6 movq (%rsi), %rcx + 0x48, 0x89, 0x4a, 0x18, //0x000043b9 movq %rcx, $24(%rdx) + 0x4c, 0x39, 0xd3, //0x000043bd cmpq %r10, %rbx + 0x0f, 0x83, 0x44, 0x00, 0x00, 0x00, //0x000043c0 jae LBB15_1 + 0x41, 0x8a, 0x0c, 0x18, //0x000043c6 movb (%r8,%rbx), %cl + 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x000043ca movl $1, %r9d + 0x80, 0xf9, 0x2d, //0x000043d0 cmpb $45, %cl + 0x0f, 0x85, 0x17, 0x00, 0x00, 0x00, //0x000043d3 jne LBB15_5 + 0x48, 0xff, 0xc3, //0x000043d9 incq %rbx + 0x4c, 0x39, 0xd3, //0x000043dc cmpq %r10, %rbx + 0x0f, 0x83, 0x25, 0x00, 0x00, 0x00, //0x000043df jae LBB15_1 + 0x41, 0x8a, 0x0c, 0x18, //0x000043e5 movb (%r8,%rbx), %cl + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000043e9 movq $-1, %r9 + //0x000043f0 LBB15_5 + 0x8d, 0x79, 0xd0, //0x000043f0 leal $-48(%rcx), %edi + 0x40, 0x80, 0xff, 0x0a, //0x000043f3 cmpb $10, %dil + 0x0f, 0x82, 0x1a, 0x00, 0x00, 0x00, //0x000043f7 jb LBB15_7 + 0x48, 0x89, 0x1e, //0x000043fd movq %rbx, (%rsi) + 0x48, 0xc7, 0x02, 0xfe, 0xff, 0xff, 0xff, //0x00004400 movq $-2, (%rdx) + 0x5b, //0x00004407 popq %rbx + 0x5d, //0x00004408 popq %rbp + 0xc3, //0x00004409 retq + //0x0000440a LBB15_1 + 0x4c, 0x89, 0x16, //0x0000440a movq %r10, (%rsi) + 0x48, 0xc7, 0x02, 0xff, 0xff, 0xff, 0xff, //0x0000440d movq $-1, (%rdx) + 0x5b, //0x00004414 popq %rbx + 0x5d, //0x00004415 popq %rbp + 0xc3, //0x00004416 retq + //0x00004417 LBB15_7 + 0x80, 0xf9, 0x30, //0x00004417 cmpb $48, %cl + 0x0f, 0x85, 0x35, 0x00, 0x00, 0x00, //0x0000441a jne LBB15_8 + 0x48, 0x8d, 0x7b, 0x01, //0x00004420 leaq $1(%rbx), %rdi + 0x4c, 0x39, 0xd3, //0x00004424 cmpq %r10, %rbx + 0x0f, 0x83, 0x7a, 0x00, 0x00, 0x00, //0x00004427 jae LBB15_17 + 0x41, 0x8a, 0x0c, 0x38, //0x0000442d movb (%r8,%rdi), %cl + 0x80, 0xc1, 0xd2, //0x00004431 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x00004434 cmpb $55, %cl + 0x0f, 0x87, 0x6a, 0x00, 0x00, 0x00, //0x00004437 ja LBB15_17 + 0x44, 0x0f, 0xb6, 0xd9, //0x0000443d movzbl %cl, %r11d + 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00004441 movabsq $36028797027352577, %rcx + 0x4c, 0x0f, 0xa3, 0xd9, //0x0000444b btq %r11, %rcx + 0x0f, 0x83, 0x52, 0x00, 0x00, 0x00, //0x0000444f jae LBB15_17 + //0x00004455 LBB15_8 + 0x31, 0xff, //0x00004455 xorl %edi, %edi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004457 .p2align 4, 0x90 + //0x00004460 LBB15_9 + 0x4c, 0x39, 0xd3, //0x00004460 cmpq %r10, %rbx + 0x0f, 0x83, 0x6c, 0x00, 0x00, 0x00, //0x00004463 jae LBB15_22 + 0x49, 0x0f, 0xbe, 0x0c, 0x18, //0x00004469 movsbq (%r8,%rbx), %rcx + 0x8d, 0x41, 0xd0, //0x0000446e leal $-48(%rcx), %eax + 0x3c, 0x09, //0x00004471 cmpb $9, %al + 0x0f, 0x87, 0x34, 0x00, 0x00, 0x00, //0x00004473 ja LBB15_18 + 0x48, 0x6b, 0xff, 0x0a, //0x00004479 imulq $10, %rdi, %rdi + 0x0f, 0x80, 0x14, 0x00, 0x00, 0x00, //0x0000447d jo LBB15_13 + 0x48, 0xff, 0xc3, //0x00004483 incq %rbx + 0x48, 0x83, 0xc1, 0xd0, //0x00004486 addq $-48, %rcx + 0x49, 0x0f, 0xaf, 0xc9, //0x0000448a imulq %r9, %rcx + 0x48, 0x01, 0xcf, //0x0000448e addq %rcx, %rdi + 0x0f, 0x81, 0xc9, 0xff, 0xff, 0xff, //0x00004491 jno LBB15_9 + //0x00004497 LBB15_13 + 0x48, 0xff, 0xcb, //0x00004497 decq %rbx + 0x48, 0x89, 0x1e, //0x0000449a movq %rbx, (%rsi) + 0x48, 0xc7, 0x02, 0xfb, 0xff, 0xff, 0xff, //0x0000449d movq $-5, (%rdx) + 0x5b, //0x000044a4 popq %rbx + 0x5d, //0x000044a5 popq %rbp + 0xc3, //0x000044a6 retq + //0x000044a7 LBB15_17 + 0x48, 0x89, 0x3e, //0x000044a7 movq %rdi, (%rsi) + 0x5b, //0x000044aa popq %rbx + 0x5d, //0x000044ab popq %rbp + 0xc3, //0x000044ac retq + //0x000044ad LBB15_18 + 0x80, 0xf9, 0x65, //0x000044ad cmpb $101, %cl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000044b0 je LBB15_21 + 0x80, 0xf9, 0x45, //0x000044b6 cmpb $69, %cl + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x000044b9 je LBB15_21 + 0x80, 0xf9, 0x2e, //0x000044bf cmpb $46, %cl + 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x000044c2 jne LBB15_22 + //0x000044c8 LBB15_21 + 0x48, 0x89, 0x1e, //0x000044c8 movq %rbx, (%rsi) + 0x48, 0xc7, 0x02, 0xfa, 0xff, 0xff, 0xff, //0x000044cb movq $-6, (%rdx) + 0x5b, //0x000044d2 popq %rbx + 0x5d, //0x000044d3 popq %rbp + 0xc3, //0x000044d4 retq + //0x000044d5 LBB15_22 + 0x48, 0x89, 0x1e, //0x000044d5 movq %rbx, (%rsi) + 0x48, 0x89, 0x7a, 0x10, //0x000044d8 movq %rdi, $16(%rdx) + 0x5b, //0x000044dc popq %rbx + 0x5d, //0x000044dd popq %rbp + 0xc3, //0x000044de retq + 0x90, //0x000044df .p2align 4, 0x90 + //0x000044e0 _vunsigned + 0x55, //0x000044e0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000044e1 movq %rsp, %rbp + 0x49, 0x89, 0xd0, //0x000044e4 movq %rdx, %r8 + 0x48, 0x8b, 0x0e, //0x000044e7 movq (%rsi), %rcx + 0x4c, 0x8b, 0x0f, //0x000044ea movq (%rdi), %r9 + 0x4c, 0x8b, 0x5f, 0x08, //0x000044ed movq $8(%rdi), %r11 + 0x48, 0xc7, 0x02, 0x09, 0x00, 0x00, 0x00, //0x000044f1 movq $9, (%rdx) + 0x48, 0xc7, 0x42, 0x08, 0x00, 0x00, 0x00, 0x00, //0x000044f8 movq $0, $8(%rdx) + 0x48, 0xc7, 0x42, 0x10, 0x00, 0x00, 0x00, 0x00, //0x00004500 movq $0, $16(%rdx) + 0x48, 0x8b, 0x06, //0x00004508 movq (%rsi), %rax + 0x48, 0x89, 0x42, 0x18, //0x0000450b movq %rax, $24(%rdx) + 0x4c, 0x39, 0xd9, //0x0000450f cmpq %r11, %rcx + 0x0f, 0x83, 0x18, 0x00, 0x00, 0x00, //0x00004512 jae LBB16_1 + 0x41, 0x8a, 0x04, 0x09, //0x00004518 movb (%r9,%rcx), %al + 0x3c, 0x2d, //0x0000451c cmpb $45, %al + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x0000451e jne LBB16_4 + //0x00004524 LBB16_3 + 0x48, 0x89, 0x0e, //0x00004524 movq %rcx, (%rsi) + 0x49, 0xc7, 0x00, 0xfa, 0xff, 0xff, 0xff, //0x00004527 movq $-6, (%r8) + 0x5d, //0x0000452e popq %rbp + 0xc3, //0x0000452f retq + //0x00004530 LBB16_1 + 0x4c, 0x89, 0x1e, //0x00004530 movq %r11, (%rsi) + 0x49, 0xc7, 0x00, 0xff, 0xff, 0xff, 0xff, //0x00004533 movq $-1, (%r8) + 0x5d, //0x0000453a popq %rbp + 0xc3, //0x0000453b retq + //0x0000453c LBB16_4 + 0x8d, 0x50, 0xd0, //0x0000453c leal $-48(%rax), %edx + 0x80, 0xfa, 0x0a, //0x0000453f cmpb $10, %dl + 0x0f, 0x82, 0x0c, 0x00, 0x00, 0x00, //0x00004542 jb LBB16_6 + 0x48, 0x89, 0x0e, //0x00004548 movq %rcx, (%rsi) + 0x49, 0xc7, 0x00, 0xfe, 0xff, 0xff, 0xff, //0x0000454b movq $-2, (%r8) + 0x5d, //0x00004552 popq %rbp + 0xc3, //0x00004553 retq + //0x00004554 LBB16_6 + 0x3c, 0x30, //0x00004554 cmpb $48, %al + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x00004556 jne LBB16_7 + 0x41, 0x8a, 0x44, 0x09, 0x01, //0x0000455c movb $1(%r9,%rcx), %al + 0x04, 0xd2, //0x00004561 addb $-46, %al + 0x3c, 0x37, //0x00004563 cmpb $55, %al + 0x0f, 0x87, 0xaf, 0x00, 0x00, 0x00, //0x00004565 ja LBB16_16 + 0x0f, 0xb6, 0xc0, //0x0000456b movzbl %al, %eax + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x0000456e movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xc2, //0x00004578 btq %rax, %rdx + 0x0f, 0x83, 0x98, 0x00, 0x00, 0x00, //0x0000457c jae LBB16_16 + //0x00004582 LBB16_7 + 0x31, 0xc0, //0x00004582 xorl %eax, %eax + 0x41, 0xba, 0x0a, 0x00, 0x00, 0x00, //0x00004584 movl $10, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000458a .p2align 4, 0x90 + //0x00004590 LBB16_8 + 0x4c, 0x39, 0xd9, //0x00004590 cmpq %r11, %rcx + 0x0f, 0x83, 0x78, 0x00, 0x00, 0x00, //0x00004593 jae LBB16_20 + 0x41, 0x0f, 0xbe, 0x3c, 0x09, //0x00004599 movsbl (%r9,%rcx), %edi + 0x8d, 0x57, 0xd0, //0x0000459e leal $-48(%rdi), %edx + 0x80, 0xfa, 0x09, //0x000045a1 cmpb $9, %dl + 0x0f, 0x87, 0x49, 0x00, 0x00, 0x00, //0x000045a4 ja LBB16_17 + 0x49, 0xf7, 0xe2, //0x000045aa mulq %r10 + 0x0f, 0x80, 0x31, 0x00, 0x00, 0x00, //0x000045ad jo LBB16_13 + 0x48, 0xff, 0xc1, //0x000045b3 incq %rcx + 0x83, 0xc7, 0xd0, //0x000045b6 addl $-48, %edi + 0x48, 0x63, 0xd7, //0x000045b9 movslq %edi, %rdx + 0x48, 0x89, 0xd7, //0x000045bc movq %rdx, %rdi + 0x48, 0xc1, 0xff, 0x3f, //0x000045bf sarq $63, %rdi + 0x48, 0x01, 0xd0, //0x000045c3 addq %rdx, %rax + 0x48, 0x83, 0xd7, 0x00, //0x000045c6 adcq $0, %rdi + 0x89, 0xfa, //0x000045ca movl %edi, %edx + 0x83, 0xe2, 0x01, //0x000045cc andl $1, %edx + 0x48, 0xf7, 0xda, //0x000045cf negq %rdx + 0x48, 0x31, 0xd7, //0x000045d2 xorq %rdx, %rdi + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x000045d5 jne LBB16_13 + 0x48, 0x85, 0xd2, //0x000045db testq %rdx, %rdx + 0x0f, 0x89, 0xac, 0xff, 0xff, 0xff, //0x000045de jns LBB16_8 + //0x000045e4 LBB16_13 + 0x48, 0xff, 0xc9, //0x000045e4 decq %rcx + 0x48, 0x89, 0x0e, //0x000045e7 movq %rcx, (%rsi) + 0x49, 0xc7, 0x00, 0xfb, 0xff, 0xff, 0xff, //0x000045ea movq $-5, (%r8) + 0x5d, //0x000045f1 popq %rbp + 0xc3, //0x000045f2 retq + //0x000045f3 LBB16_17 + 0x40, 0x80, 0xff, 0x65, //0x000045f3 cmpb $101, %dil + 0x0f, 0x84, 0x27, 0xff, 0xff, 0xff, //0x000045f7 je LBB16_3 + 0x40, 0x80, 0xff, 0x45, //0x000045fd cmpb $69, %dil + 0x0f, 0x84, 0x1d, 0xff, 0xff, 0xff, //0x00004601 je LBB16_3 + 0x40, 0x80, 0xff, 0x2e, //0x00004607 cmpb $46, %dil + 0x0f, 0x84, 0x13, 0xff, 0xff, 0xff, //0x0000460b je LBB16_3 + //0x00004611 LBB16_20 + 0x48, 0x89, 0x0e, //0x00004611 movq %rcx, (%rsi) + 0x49, 0x89, 0x40, 0x10, //0x00004614 movq %rax, $16(%r8) + 0x5d, //0x00004618 popq %rbp + 0xc3, //0x00004619 retq + //0x0000461a LBB16_16 + 0x48, 0xff, 0xc1, //0x0000461a incq %rcx + 0x48, 0x89, 0x0e, //0x0000461d movq %rcx, (%rsi) + 0x5d, //0x00004620 popq %rbp + 0xc3, //0x00004621 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004622 .p2align 4, 0x00 + //0x00004630 LCPI17_0 + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004630 .quad 1 + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004638 .quad 5 + //0x00004640 .p2align 4, 0x90 + //0x00004640 _skip_array + 0x55, //0x00004640 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004641 movq %rsp, %rbp + 0x48, 0x89, 0xd0, //0x00004644 movq %rdx, %rax + 0x48, 0x89, 0xf2, //0x00004647 movq %rsi, %rdx + 0x48, 0x89, 0xfe, //0x0000464a movq %rdi, %rsi + 0x0f, 0x28, 0x05, 0xdc, 0xff, 0xff, 0xff, //0x0000464d movaps $-36(%rip), %xmm0 /* LCPI17_0+0(%rip) */ + 0x0f, 0x11, 0x00, //0x00004654 movups %xmm0, (%rax) + 0x48, 0x89, 0xc7, //0x00004657 movq %rax, %rdi + 0x5d, //0x0000465a popq %rbp + 0xe9, 0x00, 0x00, 0x00, 0x00, //0x0000465b jmp _fsm_exec + //0x00004660 .p2align 4, 0x90 + //0x00004660 _fsm_exec + 0x55, //0x00004660 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004661 movq %rsp, %rbp + 0x41, 0x57, //0x00004664 pushq %r15 + 0x41, 0x56, //0x00004666 pushq %r14 + 0x41, 0x55, //0x00004668 pushq %r13 + 0x41, 0x54, //0x0000466a pushq %r12 + 0x53, //0x0000466c pushq %rbx + 0x48, 0x83, 0xec, 0x38, //0x0000466d subq $56, %rsp + 0x48, 0x89, 0x4d, 0xa8, //0x00004671 movq %rcx, $-88(%rbp) + 0x4c, 0x8b, 0x0f, //0x00004675 movq (%rdi), %r9 + 0x4d, 0x85, 0xc9, //0x00004678 testq %r9, %r9 + 0x0f, 0x84, 0x16, 0x05, 0x00, 0x00, //0x0000467b je LBB18_2 + 0x49, 0x89, 0xd0, //0x00004681 movq %rdx, %r8 + 0x49, 0x89, 0xfa, //0x00004684 movq %rdi, %r10 + 0x48, 0x8d, 0x46, 0x08, //0x00004687 leaq $8(%rsi), %rax + 0x48, 0x89, 0x45, 0xc8, //0x0000468b movq %rax, $-56(%rbp) + 0x4c, 0x8b, 0x2a, //0x0000468f movq (%rdx), %r13 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00004692 movq $-1, %r14 + 0x49, 0xbc, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00004699 movabsq $4294977024, %r12 + 0x4c, 0x8d, 0x1d, 0x52, 0x06, 0x00, 0x00, //0x000046a3 leaq $1618(%rip), %r11 /* LJTI18_0+0(%rip) */ + 0x48, 0x89, 0x55, 0xd0, //0x000046aa movq %rdx, $-48(%rbp) + 0x48, 0x89, 0x75, 0xb0, //0x000046ae movq %rsi, $-80(%rbp) + 0x48, 0x89, 0x7d, 0xb8, //0x000046b2 movq %rdi, $-72(%rbp) + 0xe9, 0x3d, 0x00, 0x00, 0x00, //0x000046b6 jmp LBB18_8 + //0x000046bb LBB18_3 + 0x49, 0x8b, 0x02, //0x000046bb movq (%r10), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x000046be cmpq $4095, %rax + 0x0f, 0x8f, 0xe3, 0x04, 0x00, 0x00, //0x000046c4 jg LBB18_82 + 0x48, 0x8d, 0x48, 0x01, //0x000046ca leaq $1(%rax), %rcx + 0x49, 0x89, 0x0a, //0x000046ce movq %rcx, (%r10) + 0x49, 0xc7, 0x44, 0xc2, 0x08, 0x06, 0x00, 0x00, 0x00, //0x000046d1 movq $6, $8(%r10,%rax,8) + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000046da .p2align 4, 0x90 + //0x000046e0 LBB18_5 + 0x4c, 0x89, 0xe9, //0x000046e0 movq %r13, %rcx + //0x000046e3 LBB18_6 + 0x49, 0x8b, 0x12, //0x000046e3 movq (%r10), %rdx + 0x49, 0x89, 0xcd, //0x000046e6 movq %rcx, %r13 + //0x000046e9 LBB18_7 + 0x49, 0x89, 0xd1, //0x000046e9 movq %rdx, %r9 + 0x4c, 0x89, 0xf0, //0x000046ec movq %r14, %rax + 0x48, 0x85, 0xd2, //0x000046ef testq %rdx, %rdx + 0x0f, 0x84, 0xa6, 0x04, 0x00, 0x00, //0x000046f2 je LBB18_88 + //0x000046f8 LBB18_8 + 0x48, 0x8b, 0x3e, //0x000046f8 movq (%rsi), %rdi + 0x48, 0x8b, 0x46, 0x08, //0x000046fb movq $8(%rsi), %rax + 0x4c, 0x89, 0xea, //0x000046ff movq %r13, %rdx + 0x48, 0x29, 0xc2, //0x00004702 subq %rax, %rdx + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00004705 jae LBB18_13 + 0x42, 0x8a, 0x1c, 0x2f, //0x0000470b movb (%rdi,%r13), %bl + 0x80, 0xfb, 0x0d, //0x0000470f cmpb $13, %bl + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00004712 je LBB18_13 + 0x80, 0xfb, 0x20, //0x00004718 cmpb $32, %bl + 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x0000471b je LBB18_13 + 0x80, 0xc3, 0xf7, //0x00004721 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00004724 cmpb $1, %bl + 0x0f, 0x86, 0x13, 0x00, 0x00, 0x00, //0x00004727 jbe LBB18_13 + 0x4d, 0x89, 0xef, //0x0000472d movq %r13, %r15 + 0xe9, 0x2d, 0x01, 0x00, 0x00, //0x00004730 jmp LBB18_34 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004735 .p2align 4, 0x90 + //0x00004740 LBB18_13 + 0x4d, 0x8d, 0x7d, 0x01, //0x00004740 leaq $1(%r13), %r15 + 0x49, 0x39, 0xc7, //0x00004744 cmpq %rax, %r15 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00004747 jae LBB18_17 + 0x42, 0x8a, 0x1c, 0x3f, //0x0000474d movb (%rdi,%r15), %bl + 0x80, 0xfb, 0x0d, //0x00004751 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00004754 je LBB18_17 + 0x80, 0xfb, 0x20, //0x0000475a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000475d je LBB18_17 + 0x80, 0xc3, 0xf7, //0x00004763 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00004766 cmpb $1, %bl + 0x0f, 0x87, 0xf3, 0x00, 0x00, 0x00, //0x00004769 ja LBB18_34 + 0x90, //0x0000476f .p2align 4, 0x90 + //0x00004770 LBB18_17 + 0x4d, 0x8d, 0x7d, 0x02, //0x00004770 leaq $2(%r13), %r15 + 0x49, 0x39, 0xc7, //0x00004774 cmpq %rax, %r15 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00004777 jae LBB18_21 + 0x42, 0x8a, 0x1c, 0x3f, //0x0000477d movb (%rdi,%r15), %bl + 0x80, 0xfb, 0x0d, //0x00004781 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00004784 je LBB18_21 + 0x80, 0xfb, 0x20, //0x0000478a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000478d je LBB18_21 + 0x80, 0xc3, 0xf7, //0x00004793 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00004796 cmpb $1, %bl + 0x0f, 0x87, 0xc3, 0x00, 0x00, 0x00, //0x00004799 ja LBB18_34 + 0x90, //0x0000479f .p2align 4, 0x90 + //0x000047a0 LBB18_21 + 0x4d, 0x8d, 0x7d, 0x03, //0x000047a0 leaq $3(%r13), %r15 + 0x49, 0x39, 0xc7, //0x000047a4 cmpq %rax, %r15 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000047a7 jae LBB18_25 + 0x42, 0x8a, 0x1c, 0x3f, //0x000047ad movb (%rdi,%r15), %bl + 0x80, 0xfb, 0x0d, //0x000047b1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000047b4 je LBB18_25 + 0x80, 0xfb, 0x20, //0x000047ba cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000047bd je LBB18_25 + 0x80, 0xc3, 0xf7, //0x000047c3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000047c6 cmpb $1, %bl + 0x0f, 0x87, 0x93, 0x00, 0x00, 0x00, //0x000047c9 ja LBB18_34 + 0x90, //0x000047cf .p2align 4, 0x90 + //0x000047d0 LBB18_25 + 0x49, 0x8d, 0x4d, 0x04, //0x000047d0 leaq $4(%r13), %rcx + 0x48, 0x39, 0xc8, //0x000047d4 cmpq %rcx, %rax + 0x0f, 0x86, 0xb7, 0x03, 0x00, 0x00, //0x000047d7 jbe LBB18_79 + 0x48, 0x39, 0xc8, //0x000047dd cmpq %rcx, %rax + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x000047e0 je LBB18_31 + 0x48, 0x8d, 0x0c, 0x07, //0x000047e6 leaq (%rdi,%rax), %rcx + 0x48, 0x83, 0xc2, 0x04, //0x000047ea addq $4, %rdx + 0x4e, 0x8d, 0x7c, 0x2f, 0x05, //0x000047ee leaq $5(%rdi,%r13), %r15 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000047f3 .p2align 4, 0x90 + //0x00004800 LBB18_28 + 0x41, 0x0f, 0xbe, 0x5f, 0xff, //0x00004800 movsbl $-1(%r15), %ebx + 0x83, 0xfb, 0x20, //0x00004805 cmpl $32, %ebx + 0x0f, 0x87, 0x42, 0x00, 0x00, 0x00, //0x00004808 ja LBB18_33 + 0x49, 0x0f, 0xa3, 0xdc, //0x0000480e btq %rbx, %r12 + 0x0f, 0x83, 0x38, 0x00, 0x00, 0x00, //0x00004812 jae LBB18_33 + 0x49, 0xff, 0xc7, //0x00004818 incq %r15 + 0x48, 0xff, 0xc2, //0x0000481b incq %rdx + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000481e jne LBB18_28 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00004824 jmp LBB18_32 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004829 .p2align 4, 0x90 + //0x00004830 LBB18_31 + 0x48, 0x01, 0xf9, //0x00004830 addq %rdi, %rcx + //0x00004833 LBB18_32 + 0x48, 0x29, 0xf9, //0x00004833 subq %rdi, %rcx + 0x49, 0x89, 0xcf, //0x00004836 movq %rcx, %r15 + 0x49, 0x39, 0xc7, //0x00004839 cmpq %rax, %r15 + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x0000483c jb LBB18_34 + 0xe9, 0x50, 0x03, 0x00, 0x00, //0x00004842 jmp LBB18_2 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004847 .p2align 4, 0x90 + //0x00004850 LBB18_33 + 0x48, 0x89, 0xfa, //0x00004850 movq %rdi, %rdx + 0x48, 0xf7, 0xd2, //0x00004853 notq %rdx + 0x49, 0x01, 0xd7, //0x00004856 addq %rdx, %r15 + 0x49, 0x39, 0xc7, //0x00004859 cmpq %rax, %r15 + 0x0f, 0x83, 0x35, 0x03, 0x00, 0x00, //0x0000485c jae LBB18_2 + //0x00004862 LBB18_34 + 0x4d, 0x8d, 0x6f, 0x01, //0x00004862 leaq $1(%r15), %r13 + 0x4d, 0x89, 0x28, //0x00004866 movq %r13, (%r8) + 0x42, 0x0f, 0xbe, 0x0c, 0x3f, //0x00004869 movsbl (%rdi,%r15), %ecx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000486e movq $-1, %rax + 0x85, 0xc9, //0x00004875 testl %ecx, %ecx + 0x0f, 0x84, 0x21, 0x03, 0x00, 0x00, //0x00004877 je LBB18_88 + 0x49, 0x8d, 0x51, 0xff, //0x0000487d leaq $-1(%r9), %rdx + 0x43, 0x8b, 0x1c, 0xca, //0x00004881 movl (%r10,%r9,8), %ebx + 0x49, 0x83, 0xfe, 0xff, //0x00004885 cmpq $-1, %r14 + 0x4d, 0x0f, 0x44, 0xf7, //0x00004889 cmoveq %r15, %r14 + 0xff, 0xcb, //0x0000488d decl %ebx + 0x83, 0xfb, 0x05, //0x0000488f cmpl $5, %ebx + 0x0f, 0x87, 0x20, 0x00, 0x00, 0x00, //0x00004892 ja LBB18_40 + 0x49, 0x63, 0x1c, 0x9b, //0x00004898 movslq (%r11,%rbx,4), %rbx + 0x4c, 0x01, 0xdb, //0x0000489c addq %r11, %rbx + 0xff, 0xe3, //0x0000489f jmpq *%rbx + //0x000048a1 LBB18_37 + 0x83, 0xf9, 0x2c, //0x000048a1 cmpl $44, %ecx + 0x0f, 0x84, 0x5d, 0x01, 0x00, 0x00, //0x000048a4 je LBB18_58 + 0x83, 0xf9, 0x5d, //0x000048aa cmpl $93, %ecx + 0x0f, 0x84, 0xab, 0x00, 0x00, 0x00, //0x000048ad je LBB18_39 + 0xe9, 0x32, 0x03, 0x00, 0x00, //0x000048b3 jmp LBB18_87 + //0x000048b8 LBB18_40 + 0x49, 0x89, 0x12, //0x000048b8 movq %rdx, (%r10) + 0x83, 0xf9, 0x7b, //0x000048bb cmpl $123, %ecx + 0x0f, 0x86, 0xd1, 0x00, 0x00, 0x00, //0x000048be jbe LBB18_56 + 0xe9, 0x21, 0x03, 0x00, 0x00, //0x000048c4 jmp LBB18_87 + //0x000048c9 LBB18_41 + 0x83, 0xf9, 0x2c, //0x000048c9 cmpl $44, %ecx + 0x0f, 0x84, 0x57, 0x01, 0x00, 0x00, //0x000048cc je LBB18_60 + 0x83, 0xf9, 0x7d, //0x000048d2 cmpl $125, %ecx + 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, //0x000048d5 je LBB18_39 + 0xe9, 0x0a, 0x03, 0x00, 0x00, //0x000048db jmp LBB18_87 + //0x000048e0 LBB18_44 + 0x80, 0xf9, 0x22, //0x000048e0 cmpb $34, %cl + 0x0f, 0x85, 0x01, 0x03, 0x00, 0x00, //0x000048e3 jne LBB18_87 + 0x4b, 0xc7, 0x04, 0xca, 0x04, 0x00, 0x00, 0x00, //0x000048e9 movq $4, (%r10,%r9,8) + //0x000048f1 LBB18_46 + 0x48, 0xc7, 0x45, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000048f1 movq $-1, $-64(%rbp) + 0x48, 0x89, 0xf7, //0x000048f9 movq %rsi, %rdi + 0x4c, 0x89, 0xee, //0x000048fc movq %r13, %rsi + 0x48, 0x8d, 0x55, 0xc0, //0x000048ff leaq $-64(%rbp), %rdx + 0x48, 0x8b, 0x4d, 0xa8, //0x00004903 movq $-88(%rbp), %rcx + 0xe8, 0x04, 0xef, 0xff, 0xff, //0x00004907 callq _advance_string + 0x48, 0x89, 0xc1, //0x0000490c movq %rax, %rcx + 0x48, 0x85, 0xc0, //0x0000490f testq %rax, %rax + 0x0f, 0x88, 0xa1, 0x02, 0x00, 0x00, //0x00004912 js LBB18_81 + //0x00004918 LBB18_47 + 0x4c, 0x8b, 0x45, 0xd0, //0x00004918 movq $-48(%rbp), %r8 + 0x49, 0x89, 0x08, //0x0000491c movq %rcx, (%r8) + 0x4c, 0x89, 0xf8, //0x0000491f movq %r15, %rax + 0x4d, 0x85, 0xed, //0x00004922 testq %r13, %r13 + 0x48, 0x8b, 0x75, 0xb0, //0x00004925 movq $-80(%rbp), %rsi + 0x4c, 0x8b, 0x55, 0xb8, //0x00004929 movq $-72(%rbp), %r10 + 0x4c, 0x8d, 0x1d, 0xc8, 0x03, 0x00, 0x00, //0x0000492d leaq $968(%rip), %r11 /* LJTI18_0+0(%rip) */ + 0x0f, 0x8f, 0xa9, 0xfd, 0xff, 0xff, //0x00004934 jg LBB18_6 + 0xe9, 0x5f, 0x02, 0x00, 0x00, //0x0000493a jmp LBB18_88 + //0x0000493f LBB18_48 + 0x80, 0xf9, 0x3a, //0x0000493f cmpb $58, %cl + 0x0f, 0x85, 0xa2, 0x02, 0x00, 0x00, //0x00004942 jne LBB18_87 + 0x4b, 0xc7, 0x04, 0xca, 0x00, 0x00, 0x00, 0x00, //0x00004948 movq $0, (%r10,%r9,8) + 0xe9, 0x8b, 0xfd, 0xff, 0xff, //0x00004950 jmp LBB18_5 + //0x00004955 LBB18_50 + 0x80, 0xf9, 0x5d, //0x00004955 cmpb $93, %cl + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x00004958 jne LBB18_55 + //0x0000495e LBB18_39 + 0x49, 0x89, 0x12, //0x0000495e movq %rdx, (%r10) + 0xe9, 0x83, 0xfd, 0xff, 0xff, //0x00004961 jmp LBB18_7 + //0x00004966 LBB18_52 + 0x83, 0xf9, 0x22, //0x00004966 cmpl $34, %ecx + 0x0f, 0x84, 0xdc, 0x00, 0x00, 0x00, //0x00004969 je LBB18_62 + 0x83, 0xf9, 0x7d, //0x0000496f cmpl $125, %ecx + 0x0f, 0x85, 0x72, 0x02, 0x00, 0x00, //0x00004972 jne LBB18_87 + 0x49, 0x89, 0x12, //0x00004978 movq %rdx, (%r10) + 0x4c, 0x8b, 0x45, 0xd0, //0x0000497b movq $-48(%rbp), %r8 + 0xe9, 0x65, 0xfd, 0xff, 0xff, //0x0000497f jmp LBB18_7 + //0x00004984 LBB18_55 + 0x4b, 0xc7, 0x04, 0xca, 0x01, 0x00, 0x00, 0x00, //0x00004984 movq $1, (%r10,%r9,8) + 0x83, 0xf9, 0x7b, //0x0000498c cmpl $123, %ecx + 0x0f, 0x87, 0x55, 0x02, 0x00, 0x00, //0x0000498f ja LBB18_87 + //0x00004995 LBB18_56 + 0x4a, 0x8d, 0x1c, 0x3f, //0x00004995 leaq (%rdi,%r15), %rbx + 0x89, 0xca, //0x00004999 movl %ecx, %edx + 0x48, 0x8d, 0x0d, 0x72, 0x03, 0x00, 0x00, //0x0000499b leaq $882(%rip), %rcx /* LJTI18_1+0(%rip) */ + 0x48, 0x63, 0x14, 0x91, //0x000049a2 movslq (%rcx,%rdx,4), %rdx + 0x48, 0x01, 0xca, //0x000049a6 addq %rcx, %rdx + 0xff, 0xe2, //0x000049a9 jmpq *%rdx + //0x000049ab LBB18_57 + 0x48, 0x8b, 0x45, 0xc8, //0x000049ab movq $-56(%rbp), %rax + 0x48, 0x8b, 0x30, //0x000049af movq (%rax), %rsi + 0x4c, 0x29, 0xfe, //0x000049b2 subq %r15, %rsi + 0x48, 0x89, 0xdf, //0x000049b5 movq %rbx, %rdi + 0xe8, 0xc3, 0x06, 0x00, 0x00, //0x000049b8 callq _do_skip_number + 0x4c, 0x8d, 0x1d, 0x38, 0x03, 0x00, 0x00, //0x000049bd leaq $824(%rip), %r11 /* LJTI18_0+0(%rip) */ + 0x4c, 0x8b, 0x55, 0xb8, //0x000049c4 movq $-72(%rbp), %r10 + 0x48, 0x8b, 0x75, 0xb0, //0x000049c8 movq $-80(%rbp), %rsi + 0x4c, 0x8b, 0x45, 0xd0, //0x000049cc movq $-48(%rbp), %r8 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x000049d0 movq $-2, %rdx + 0x48, 0x29, 0xc2, //0x000049d7 subq %rax, %rdx + 0x48, 0x85, 0xc0, //0x000049da testq %rax, %rax + 0x48, 0x8d, 0x48, 0xff, //0x000049dd leaq $-1(%rax), %rcx + 0x48, 0x0f, 0x48, 0xca, //0x000049e1 cmovsq %rdx, %rcx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000049e5 movq $-2, %rax + 0x4c, 0x0f, 0x48, 0xf8, //0x000049ec cmovsq %rax, %r15 + 0x4c, 0x01, 0xe9, //0x000049f0 addq %r13, %rcx + 0x49, 0x89, 0x08, //0x000049f3 movq %rcx, (%r8) + 0x4c, 0x89, 0xf8, //0x000049f6 movq %r15, %rax + 0x4d, 0x85, 0xff, //0x000049f9 testq %r15, %r15 + 0x0f, 0x89, 0xe1, 0xfc, 0xff, 0xff, //0x000049fc jns LBB18_6 + 0xe9, 0x97, 0x01, 0x00, 0x00, //0x00004a02 jmp LBB18_88 + //0x00004a07 LBB18_58 + 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00004a07 cmpq $4095, %r9 + 0x0f, 0x8f, 0x99, 0x01, 0x00, 0x00, //0x00004a0e jg LBB18_82 + 0x49, 0x8d, 0x41, 0x01, //0x00004a14 leaq $1(%r9), %rax + 0x49, 0x89, 0x02, //0x00004a18 movq %rax, (%r10) + 0x4b, 0xc7, 0x44, 0xca, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00004a1b movq $0, $8(%r10,%r9,8) + 0xe9, 0xb7, 0xfc, 0xff, 0xff, //0x00004a24 jmp LBB18_5 + //0x00004a29 LBB18_60 + 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00004a29 cmpq $4095, %r9 + 0x0f, 0x8f, 0x77, 0x01, 0x00, 0x00, //0x00004a30 jg LBB18_82 + 0x49, 0x8d, 0x41, 0x01, //0x00004a36 leaq $1(%r9), %rax + 0x49, 0x89, 0x02, //0x00004a3a movq %rax, (%r10) + 0x4b, 0xc7, 0x44, 0xca, 0x08, 0x03, 0x00, 0x00, 0x00, //0x00004a3d movq $3, $8(%r10,%r9,8) + 0xe9, 0x95, 0xfc, 0xff, 0xff, //0x00004a46 jmp LBB18_5 + //0x00004a4b LBB18_62 + 0x4b, 0xc7, 0x04, 0xca, 0x02, 0x00, 0x00, 0x00, //0x00004a4b movq $2, (%r10,%r9,8) + 0x48, 0xc7, 0x45, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004a53 movq $-1, $-64(%rbp) + 0x48, 0x89, 0xf7, //0x00004a5b movq %rsi, %rdi + 0x4c, 0x89, 0xee, //0x00004a5e movq %r13, %rsi + 0x48, 0x8d, 0x55, 0xc0, //0x00004a61 leaq $-64(%rbp), %rdx + 0x48, 0x8b, 0x4d, 0xa8, //0x00004a65 movq $-88(%rbp), %rcx + 0xe8, 0xa2, 0xed, 0xff, 0xff, //0x00004a69 callq _advance_string + 0x48, 0x89, 0xc1, //0x00004a6e movq %rax, %rcx + 0x48, 0x85, 0xc0, //0x00004a71 testq %rax, %rax + 0x0f, 0x88, 0x3f, 0x01, 0x00, 0x00, //0x00004a74 js LBB18_81 + 0x4c, 0x8b, 0x45, 0xd0, //0x00004a7a movq $-48(%rbp), %r8 + 0x49, 0x89, 0x08, //0x00004a7e movq %rcx, (%r8) + 0x4c, 0x89, 0xf8, //0x00004a81 movq %r15, %rax + 0x4d, 0x85, 0xed, //0x00004a84 testq %r13, %r13 + 0x48, 0x8b, 0x75, 0xb0, //0x00004a87 movq $-80(%rbp), %rsi + 0x4c, 0x8b, 0x55, 0xb8, //0x00004a8b movq $-72(%rbp), %r10 + 0x4c, 0x8d, 0x1d, 0x66, 0x02, 0x00, 0x00, //0x00004a8f leaq $614(%rip), %r11 /* LJTI18_0+0(%rip) */ + 0x0f, 0x8e, 0x02, 0x01, 0x00, 0x00, //0x00004a96 jle LBB18_88 + 0x49, 0x8b, 0x02, //0x00004a9c movq (%r10), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00004a9f cmpq $4095, %rax + 0x0f, 0x8f, 0x02, 0x01, 0x00, 0x00, //0x00004aa5 jg LBB18_82 + 0x48, 0x8d, 0x50, 0x01, //0x00004aab leaq $1(%rax), %rdx + 0x49, 0x89, 0x12, //0x00004aaf movq %rdx, (%r10) + 0x49, 0xc7, 0x44, 0xc2, 0x08, 0x04, 0x00, 0x00, 0x00, //0x00004ab2 movq $4, $8(%r10,%rax,8) + 0xe9, 0x23, 0xfc, 0xff, 0xff, //0x00004abb jmp LBB18_6 + //0x00004ac0 LBB18_66 + 0x4c, 0x01, 0xef, //0x00004ac0 addq %r13, %rdi + 0x48, 0x8b, 0x45, 0xc8, //0x00004ac3 movq $-56(%rbp), %rax + 0x48, 0x8b, 0x30, //0x00004ac7 movq (%rax), %rsi + 0x4c, 0x29, 0xee, //0x00004aca subq %r13, %rsi + 0xe8, 0xae, 0x05, 0x00, 0x00, //0x00004acd callq _do_skip_number + 0x48, 0x89, 0xc1, //0x00004ad2 movq %rax, %rcx + 0x48, 0x85, 0xc0, //0x00004ad5 testq %rax, %rax + 0x0f, 0x88, 0x02, 0x01, 0x00, 0x00, //0x00004ad8 js LBB18_86 + 0x4c, 0x01, 0xe9, //0x00004ade addq %r13, %rcx + 0xe9, 0x32, 0xfe, 0xff, 0xff, //0x00004ae1 jmp LBB18_47 + //0x00004ae6 LBB18_68 + 0x49, 0x8b, 0x02, //0x00004ae6 movq (%r10), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00004ae9 cmpq $4095, %rax + 0x0f, 0x8f, 0xb8, 0x00, 0x00, 0x00, //0x00004aef jg LBB18_82 + 0x48, 0x8d, 0x48, 0x01, //0x00004af5 leaq $1(%rax), %rcx + 0x49, 0x89, 0x0a, //0x00004af9 movq %rcx, (%r10) + 0x49, 0xc7, 0x44, 0xc2, 0x08, 0x05, 0x00, 0x00, 0x00, //0x00004afc movq $5, $8(%r10,%rax,8) + 0xe9, 0xd6, 0xfb, 0xff, 0xff, //0x00004b05 jmp LBB18_5 + //0x00004b0a LBB18_70 + 0x48, 0x8b, 0x4d, 0xc8, //0x00004b0a movq $-56(%rbp), %rcx + 0x48, 0x8b, 0x09, //0x00004b0e movq (%rcx), %rcx + 0x48, 0x8d, 0x51, 0xfc, //0x00004b11 leaq $-4(%rcx), %rdx + 0x49, 0x39, 0xd7, //0x00004b15 cmpq %rdx, %r15 + 0x0f, 0x83, 0xd8, 0x00, 0x00, 0x00, //0x00004b18 jae LBB18_90 + 0x42, 0x8b, 0x0c, 0x2f, //0x00004b1e movl (%rdi,%r13), %ecx + 0x81, 0xf9, 0x61, 0x6c, 0x73, 0x65, //0x00004b22 cmpl $1702063201, %ecx + 0x0f, 0x85, 0x21, 0x01, 0x00, 0x00, //0x00004b28 jne LBB18_97 + 0x49, 0x8d, 0x4f, 0x05, //0x00004b2e leaq $5(%r15), %rcx + 0xe9, 0x49, 0x00, 0x00, 0x00, //0x00004b32 jmp LBB18_78 + //0x00004b37 LBB18_73 + 0x48, 0x8b, 0x55, 0xc8, //0x00004b37 movq $-56(%rbp), %rdx + 0x48, 0x8b, 0x12, //0x00004b3b movq (%rdx), %rdx + 0x48, 0x8d, 0x4a, 0xfd, //0x00004b3e leaq $-3(%rdx), %rcx + 0x49, 0x39, 0xcf, //0x00004b42 cmpq %rcx, %r15 + 0x0f, 0x83, 0x8d, 0x00, 0x00, 0x00, //0x00004b45 jae LBB18_92 + 0x81, 0x3b, 0x6e, 0x75, 0x6c, 0x6c, //0x00004b4b cmpl $1819047278, (%rbx) + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00004b51 je LBB18_77 + 0xe9, 0x48, 0x01, 0x00, 0x00, //0x00004b57 jmp LBB18_102 + //0x00004b5c LBB18_75 + 0x48, 0x8b, 0x55, 0xc8, //0x00004b5c movq $-56(%rbp), %rdx + 0x48, 0x8b, 0x12, //0x00004b60 movq (%rdx), %rdx + 0x48, 0x8d, 0x4a, 0xfd, //0x00004b63 leaq $-3(%rdx), %rcx + 0x49, 0x39, 0xcf, //0x00004b67 cmpq %rcx, %r15 + 0x0f, 0x83, 0x68, 0x00, 0x00, 0x00, //0x00004b6a jae LBB18_92 + 0x81, 0x3b, 0x74, 0x72, 0x75, 0x65, //0x00004b70 cmpl $1702195828, (%rbx) + 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, //0x00004b76 jne LBB18_93 + //0x00004b7c LBB18_77 + 0x49, 0x8d, 0x4f, 0x04, //0x00004b7c leaq $4(%r15), %rcx + //0x00004b80 LBB18_78 + 0x49, 0x89, 0x08, //0x00004b80 movq %rcx, (%r8) + 0x4c, 0x89, 0xf8, //0x00004b83 movq %r15, %rax + 0x4d, 0x85, 0xed, //0x00004b86 testq %r13, %r13 + 0x0f, 0x8f, 0x54, 0xfb, 0xff, 0xff, //0x00004b89 jg LBB18_6 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00004b8f jmp LBB18_88 + //0x00004b94 LBB18_79 + 0x49, 0x89, 0x08, //0x00004b94 movq %rcx, (%r8) + //0x00004b97 LBB18_2 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004b97 movq $-1, %rax + //0x00004b9e LBB18_88 + 0x48, 0x83, 0xc4, 0x38, //0x00004b9e addq $56, %rsp + 0x5b, //0x00004ba2 popq %rbx + 0x41, 0x5c, //0x00004ba3 popq %r12 + 0x41, 0x5d, //0x00004ba5 popq %r13 + 0x41, 0x5e, //0x00004ba7 popq %r14 + 0x41, 0x5f, //0x00004ba9 popq %r15 + 0x5d, //0x00004bab popq %rbp + 0xc3, //0x00004bac retq + //0x00004bad LBB18_82 + 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x00004bad movq $-7, %rax + 0xe9, 0xe5, 0xff, 0xff, 0xff, //0x00004bb4 jmp LBB18_88 + //0x00004bb9 LBB18_81 + 0x48, 0x83, 0xf9, 0xff, //0x00004bb9 cmpq $-1, %rcx + 0x48, 0x8d, 0x45, 0xc0, //0x00004bbd leaq $-64(%rbp), %rax + 0x48, 0x0f, 0x44, 0x45, 0xc8, //0x00004bc1 cmoveq $-56(%rbp), %rax + 0x48, 0x8b, 0x00, //0x00004bc6 movq (%rax), %rax + 0x48, 0x8b, 0x55, 0xd0, //0x00004bc9 movq $-48(%rbp), %rdx + 0x48, 0x89, 0x02, //0x00004bcd movq %rax, (%rdx) + 0x48, 0x89, 0xc8, //0x00004bd0 movq %rcx, %rax + 0xe9, 0xc6, 0xff, 0xff, 0xff, //0x00004bd3 jmp LBB18_88 + //0x00004bd8 LBB18_92 + 0x49, 0x89, 0x10, //0x00004bd8 movq %rdx, (%r8) + 0xe9, 0xbe, 0xff, 0xff, 0xff, //0x00004bdb jmp LBB18_88 + //0x00004be0 LBB18_86 + 0x49, 0x29, 0xcf, //0x00004be0 subq %rcx, %r15 + 0x48, 0x8b, 0x45, 0xd0, //0x00004be3 movq $-48(%rbp), %rax + 0x4c, 0x89, 0x38, //0x00004be7 movq %r15, (%rax) + //0x00004bea LBB18_87 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00004bea movq $-2, %rax + 0xe9, 0xa8, 0xff, 0xff, 0xff, //0x00004bf1 jmp LBB18_88 + //0x00004bf6 LBB18_90 + 0x49, 0x89, 0x08, //0x00004bf6 movq %rcx, (%r8) + 0xe9, 0xa0, 0xff, 0xff, 0xff, //0x00004bf9 jmp LBB18_88 + //0x00004bfe LBB18_93 + 0x4d, 0x89, 0x38, //0x00004bfe movq %r15, (%r8) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00004c01 movq $-2, %rax + 0x80, 0x3b, 0x74, //0x00004c08 cmpb $116, (%rbx) + 0x0f, 0x85, 0x8d, 0xff, 0xff, 0xff, //0x00004c0b jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x01, //0x00004c11 leaq $1(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004c15 movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x01, 0x72, //0x00004c18 cmpb $114, $1(%rdi,%r15) + 0x0f, 0x85, 0x7a, 0xff, 0xff, 0xff, //0x00004c1e jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x02, //0x00004c24 leaq $2(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004c28 movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x02, 0x75, //0x00004c2b cmpb $117, $2(%rdi,%r15) + 0x0f, 0x85, 0x67, 0xff, 0xff, 0xff, //0x00004c31 jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x03, //0x00004c37 leaq $3(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004c3b movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x03, 0x65, //0x00004c3e cmpb $101, $3(%rdi,%r15) + 0x0f, 0x84, 0xa6, 0x00, 0x00, 0x00, //0x00004c44 je LBB18_106 + 0xe9, 0x4f, 0xff, 0xff, 0xff, //0x00004c4a jmp LBB18_88 + //0x00004c4f LBB18_97 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00004c4f movq $-2, %rax + 0x80, 0xf9, 0x61, //0x00004c56 cmpb $97, %cl + 0x0f, 0x85, 0x3f, 0xff, 0xff, 0xff, //0x00004c59 jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x02, //0x00004c5f leaq $2(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004c63 movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x02, 0x6c, //0x00004c66 cmpb $108, $2(%rdi,%r15) + 0x0f, 0x85, 0x2c, 0xff, 0xff, 0xff, //0x00004c6c jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x03, //0x00004c72 leaq $3(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004c76 movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x03, 0x73, //0x00004c79 cmpb $115, $3(%rdi,%r15) + 0x0f, 0x85, 0x19, 0xff, 0xff, 0xff, //0x00004c7f jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x04, //0x00004c85 leaq $4(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004c89 movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x04, 0x65, //0x00004c8c cmpb $101, $4(%rdi,%r15) + 0x0f, 0x85, 0x06, 0xff, 0xff, 0xff, //0x00004c92 jne LBB18_88 + 0x49, 0x83, 0xc7, 0x05, //0x00004c98 addq $5, %r15 + 0x4d, 0x89, 0x38, //0x00004c9c movq %r15, (%r8) + 0xe9, 0xfa, 0xfe, 0xff, 0xff, //0x00004c9f jmp LBB18_88 + //0x00004ca4 LBB18_102 + 0x4d, 0x89, 0x38, //0x00004ca4 movq %r15, (%r8) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00004ca7 movq $-2, %rax + 0x80, 0x3b, 0x6e, //0x00004cae cmpb $110, (%rbx) + 0x0f, 0x85, 0xe7, 0xfe, 0xff, 0xff, //0x00004cb1 jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x01, //0x00004cb7 leaq $1(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004cbb movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x01, 0x75, //0x00004cbe cmpb $117, $1(%rdi,%r15) + 0x0f, 0x85, 0xd4, 0xfe, 0xff, 0xff, //0x00004cc4 jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x02, //0x00004cca leaq $2(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004cce movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x02, 0x6c, //0x00004cd1 cmpb $108, $2(%rdi,%r15) + 0x0f, 0x85, 0xc1, 0xfe, 0xff, 0xff, //0x00004cd7 jne LBB18_88 + 0x49, 0x8d, 0x4f, 0x03, //0x00004cdd leaq $3(%r15), %rcx + 0x49, 0x89, 0x08, //0x00004ce1 movq %rcx, (%r8) + 0x42, 0x80, 0x7c, 0x3f, 0x03, 0x6c, //0x00004ce4 cmpb $108, $3(%rdi,%r15) + 0x0f, 0x85, 0xae, 0xfe, 0xff, 0xff, //0x00004cea jne LBB18_88 + //0x00004cf0 LBB18_106 + 0x49, 0x83, 0xc7, 0x04, //0x00004cf0 addq $4, %r15 + 0x4d, 0x89, 0x38, //0x00004cf4 movq %r15, (%r8) + 0xe9, 0xa2, 0xfe, 0xff, 0xff, //0x00004cf7 jmp LBB18_88 + //0x00004cfc .p2align 2, 0x90 + // // .set L18_0_set_37, LBB18_37-LJTI18_0 + // // .set L18_0_set_41, LBB18_41-LJTI18_0 + // // .set L18_0_set_44, LBB18_44-LJTI18_0 + // // .set L18_0_set_48, LBB18_48-LJTI18_0 + // // .set L18_0_set_50, LBB18_50-LJTI18_0 + // // .set L18_0_set_52, LBB18_52-LJTI18_0 + //0x00004cfc LJTI18_0 + 0xa5, 0xfb, 0xff, 0xff, //0x00004cfc .long L18_0_set_37 + 0xcd, 0xfb, 0xff, 0xff, //0x00004d00 .long L18_0_set_41 + 0xe4, 0xfb, 0xff, 0xff, //0x00004d04 .long L18_0_set_44 + 0x43, 0xfc, 0xff, 0xff, //0x00004d08 .long L18_0_set_48 + 0x59, 0xfc, 0xff, 0xff, //0x00004d0c .long L18_0_set_50 + 0x6a, 0xfc, 0xff, 0xff, //0x00004d10 .long L18_0_set_52 + // // .set L18_1_set_88, LBB18_88-LJTI18_1 + // // .set L18_1_set_87, LBB18_87-LJTI18_1 + // // .set L18_1_set_46, LBB18_46-LJTI18_1 + // // .set L18_1_set_66, LBB18_66-LJTI18_1 + // // .set L18_1_set_57, LBB18_57-LJTI18_1 + // // .set L18_1_set_68, LBB18_68-LJTI18_1 + // // .set L18_1_set_70, LBB18_70-LJTI18_1 + // // .set L18_1_set_73, LBB18_73-LJTI18_1 + // // .set L18_1_set_75, LBB18_75-LJTI18_1 + // // .set L18_1_set_3, LBB18_3-LJTI18_1 + //0x00004d14 LJTI18_1 + 0x8a, 0xfe, 0xff, 0xff, //0x00004d14 .long L18_1_set_88 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d18 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d1c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d20 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d24 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d28 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d2c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d30 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d34 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d38 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d3c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d40 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d44 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d48 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d4c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d50 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d54 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d58 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d5c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d60 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d64 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d68 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d6c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d70 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d74 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d78 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d7c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d80 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d84 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d88 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d8c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d90 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d94 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004d98 .long L18_1_set_87 + 0xdd, 0xfb, 0xff, 0xff, //0x00004d9c .long L18_1_set_46 + 0xd6, 0xfe, 0xff, 0xff, //0x00004da0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004da4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004da8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dac .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004db0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004db4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004db8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dbc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dc0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dc4 .long L18_1_set_87 + 0xac, 0xfd, 0xff, 0xff, //0x00004dc8 .long L18_1_set_66 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dcc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dd0 .long L18_1_set_87 + 0x97, 0xfc, 0xff, 0xff, //0x00004dd4 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004dd8 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004ddc .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004de0 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004de4 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004de8 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004dec .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004df0 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004df4 .long L18_1_set_57 + 0x97, 0xfc, 0xff, 0xff, //0x00004df8 .long L18_1_set_57 + 0xd6, 0xfe, 0xff, 0xff, //0x00004dfc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e00 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e04 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e08 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e0c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e10 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e14 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e18 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e1c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e20 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e24 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e28 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e2c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e30 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e34 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e38 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e3c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e40 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e44 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e48 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e4c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e50 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e54 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e58 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e5c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e60 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e64 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e68 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e6c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e70 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e74 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e78 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e7c .long L18_1_set_87 + 0xd2, 0xfd, 0xff, 0xff, //0x00004e80 .long L18_1_set_68 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e84 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e88 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e8c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e90 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e94 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e98 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004e9c .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ea0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ea4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ea8 .long L18_1_set_87 + 0xf6, 0xfd, 0xff, 0xff, //0x00004eac .long L18_1_set_70 + 0xd6, 0xfe, 0xff, 0xff, //0x00004eb0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004eb4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004eb8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ebc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ec0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ec4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ec8 .long L18_1_set_87 + 0x23, 0xfe, 0xff, 0xff, //0x00004ecc .long L18_1_set_73 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ed0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ed4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ed8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004edc .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ee0 .long L18_1_set_87 + 0x48, 0xfe, 0xff, 0xff, //0x00004ee4 .long L18_1_set_75 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ee8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004eec .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ef0 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ef4 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004ef8 .long L18_1_set_87 + 0xd6, 0xfe, 0xff, 0xff, //0x00004efc .long L18_1_set_87 + 0xa7, 0xf9, 0xff, 0xff, //0x00004f00 .long L18_1_set_3 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004f04 .p2align 4, 0x00 + //0x00004f10 LCPI19_0 + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004f10 .quad 1 + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004f18 .quad 6 + //0x00004f20 .p2align 4, 0x90 + //0x00004f20 _skip_object + 0x55, //0x00004f20 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004f21 movq %rsp, %rbp + 0x48, 0x89, 0xd0, //0x00004f24 movq %rdx, %rax + 0x48, 0x89, 0xf2, //0x00004f27 movq %rsi, %rdx + 0x48, 0x89, 0xfe, //0x00004f2a movq %rdi, %rsi + 0x0f, 0x28, 0x05, 0xdc, 0xff, 0xff, 0xff, //0x00004f2d movaps $-36(%rip), %xmm0 /* LCPI19_0+0(%rip) */ + 0x0f, 0x11, 0x00, //0x00004f34 movups %xmm0, (%rax) + 0x48, 0x89, 0xc7, //0x00004f37 movq %rax, %rdi + 0x5d, //0x00004f3a popq %rbp + 0xe9, 0x20, 0xf7, 0xff, 0xff, //0x00004f3b jmp _fsm_exec + //0x00004f40 .p2align 4, 0x90 + //0x00004f40 _skip_string + 0x55, //0x00004f40 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004f41 movq %rsp, %rbp + 0x41, 0x57, //0x00004f44 pushq %r15 + 0x41, 0x56, //0x00004f46 pushq %r14 + 0x41, 0x54, //0x00004f48 pushq %r12 + 0x53, //0x00004f4a pushq %rbx + 0x48, 0x83, 0xec, 0x10, //0x00004f4b subq $16, %rsp + 0x48, 0x89, 0xd1, //0x00004f4f movq %rdx, %rcx + 0x49, 0x89, 0xf6, //0x00004f52 movq %rsi, %r14 + 0x49, 0x89, 0xff, //0x00004f55 movq %rdi, %r15 + 0x48, 0xc7, 0x45, 0xd8, 0xff, 0xff, 0xff, 0xff, //0x00004f58 movq $-1, $-40(%rbp) + 0x48, 0x8b, 0x1e, //0x00004f60 movq (%rsi), %rbx + 0x4c, 0x8d, 0x65, 0xd8, //0x00004f63 leaq $-40(%rbp), %r12 + 0x48, 0x89, 0xde, //0x00004f67 movq %rbx, %rsi + 0x4c, 0x89, 0xe2, //0x00004f6a movq %r12, %rdx + 0xe8, 0x9e, 0xe8, 0xff, 0xff, //0x00004f6d callq _advance_string + 0x48, 0x85, 0xc0, //0x00004f72 testq %rax, %rax + 0x0f, 0x88, 0x0e, 0x00, 0x00, 0x00, //0x00004f75 js LBB20_1 + 0x48, 0xff, 0xcb, //0x00004f7b decq %rbx + 0x48, 0x89, 0xc1, //0x00004f7e movq %rax, %rcx + 0x48, 0x89, 0xd8, //0x00004f81 movq %rbx, %rax + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00004f84 jmp LBB20_3 + //0x00004f89 LBB20_1 + 0x49, 0x83, 0xc7, 0x08, //0x00004f89 addq $8, %r15 + 0x48, 0x83, 0xf8, 0xff, //0x00004f8d cmpq $-1, %rax + 0x4d, 0x0f, 0x44, 0xe7, //0x00004f91 cmoveq %r15, %r12 + 0x49, 0x8b, 0x0c, 0x24, //0x00004f95 movq (%r12), %rcx + //0x00004f99 LBB20_3 + 0x49, 0x89, 0x0e, //0x00004f99 movq %rcx, (%r14) + 0x48, 0x83, 0xc4, 0x10, //0x00004f9c addq $16, %rsp + 0x5b, //0x00004fa0 popq %rbx + 0x41, 0x5c, //0x00004fa1 popq %r12 + 0x41, 0x5e, //0x00004fa3 popq %r14 + 0x41, 0x5f, //0x00004fa5 popq %r15 + 0x5d, //0x00004fa7 popq %rbp + 0xc3, //0x00004fa8 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004fa9 .p2align 4, 0x90 + //0x00004fb0 _skip_negative + 0x55, //0x00004fb0 pushq %rbp + 0x48, 0x89, 0xe5, //0x00004fb1 movq %rsp, %rbp + 0x41, 0x56, //0x00004fb4 pushq %r14 + 0x53, //0x00004fb6 pushq %rbx + 0x49, 0x89, 0xf6, //0x00004fb7 movq %rsi, %r14 + 0x48, 0x8b, 0x1e, //0x00004fba movq (%rsi), %rbx + 0x48, 0x8b, 0x07, //0x00004fbd movq (%rdi), %rax + 0x48, 0x01, 0xd8, //0x00004fc0 addq %rbx, %rax + 0x48, 0x8b, 0x77, 0x08, //0x00004fc3 movq $8(%rdi), %rsi + 0x48, 0x29, 0xde, //0x00004fc7 subq %rbx, %rsi + 0x48, 0x89, 0xc7, //0x00004fca movq %rax, %rdi + 0xe8, 0xae, 0x00, 0x00, 0x00, //0x00004fcd callq _do_skip_number + 0x48, 0x85, 0xc0, //0x00004fd2 testq %rax, %rax + 0x0f, 0x88, 0x0e, 0x00, 0x00, 0x00, //0x00004fd5 js LBB21_1 + 0x48, 0x01, 0xd8, //0x00004fdb addq %rbx, %rax + 0x49, 0x89, 0x06, //0x00004fde movq %rax, (%r14) + 0x48, 0xff, 0xcb, //0x00004fe1 decq %rbx + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00004fe4 jmp LBB21_3 + //0x00004fe9 LBB21_1 + 0x48, 0xf7, 0xd0, //0x00004fe9 notq %rax + 0x48, 0x01, 0xc3, //0x00004fec addq %rax, %rbx + 0x49, 0x89, 0x1e, //0x00004fef movq %rbx, (%r14) + 0x48, 0xc7, 0xc3, 0xfe, 0xff, 0xff, 0xff, //0x00004ff2 movq $-2, %rbx + //0x00004ff9 LBB21_3 + 0x48, 0x89, 0xd8, //0x00004ff9 movq %rbx, %rax + 0x5b, //0x00004ffc popq %rbx + 0x41, 0x5e, //0x00004ffd popq %r14 + 0x5d, //0x00004fff popq %rbp + 0xc3, //0x00005000 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005001 .p2align 4, 0x00 + //0x00005010 LCPI22_0 + 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, //0x00005010 QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' + //0x00005020 LCPI22_1 + 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, //0x00005020 QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' + //0x00005030 LCPI22_2 + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, //0x00005030 QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' + //0x00005040 LCPI22_3 + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, //0x00005040 QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' + //0x00005050 LCPI22_4 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00005050 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x00005060 LCPI22_5 + 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, //0x00005060 QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' + //0x00005070 LCPI22_6 + 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, //0x00005070 QUAD $0x6565656565656565; QUAD $0x6565656565656565 // .space 16, 'eeeeeeeeeeeeeeee' + //0x00005080 .p2align 4, 0x90 + //0x00005080 _do_skip_number + 0x55, //0x00005080 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005081 movq %rsp, %rbp + 0x41, 0x57, //0x00005084 pushq %r15 + 0x41, 0x56, //0x00005086 pushq %r14 + 0x41, 0x55, //0x00005088 pushq %r13 + 0x41, 0x54, //0x0000508a pushq %r12 + 0x53, //0x0000508c pushq %rbx + 0x48, 0x85, 0xf6, //0x0000508d testq %rsi, %rsi + 0x0f, 0x84, 0x84, 0x02, 0x00, 0x00, //0x00005090 je LBB22_34 + 0x80, 0x3f, 0x30, //0x00005096 cmpb $48, (%rdi) + 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x00005099 jne LBB22_5 + 0xba, 0x01, 0x00, 0x00, 0x00, //0x0000509f movl $1, %edx + 0x48, 0x83, 0xfe, 0x01, //0x000050a4 cmpq $1, %rsi + 0x0f, 0x84, 0x40, 0x03, 0x00, 0x00, //0x000050a8 je LBB22_52 + 0x8a, 0x47, 0x01, //0x000050ae movb $1(%rdi), %al + 0x04, 0xd2, //0x000050b1 addb $-46, %al + 0x3c, 0x37, //0x000050b3 cmpb $55, %al + 0x0f, 0x87, 0x33, 0x03, 0x00, 0x00, //0x000050b5 ja LBB22_52 + 0x0f, 0xb6, 0xc0, //0x000050bb movzbl %al, %eax + 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000050be movabsq $36028797027352577, %rcx + 0x48, 0x0f, 0xa3, 0xc1, //0x000050c8 btq %rax, %rcx + 0x0f, 0x83, 0x1c, 0x03, 0x00, 0x00, //0x000050cc jae LBB22_52 + //0x000050d2 LBB22_5 + 0x48, 0x83, 0xfe, 0x10, //0x000050d2 cmpq $16, %rsi + 0x0f, 0x82, 0x40, 0x03, 0x00, 0x00, //0x000050d6 jb LBB22_57 + 0x4c, 0x8d, 0x5e, 0xf0, //0x000050dc leaq $-16(%rsi), %r11 + 0x4c, 0x89, 0xd8, //0x000050e0 movq %r11, %rax + 0x48, 0x83, 0xe0, 0xf0, //0x000050e3 andq $-16, %rax + 0x4c, 0x8d, 0x54, 0x38, 0x10, //0x000050e7 leaq $16(%rax,%rdi), %r10 + 0x41, 0x83, 0xe3, 0x0f, //0x000050ec andl $15, %r11d + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000050f0 movq $-1, %r9 + 0x66, 0x44, 0x0f, 0x6f, 0x05, 0x10, 0xff, 0xff, 0xff, //0x000050f7 movdqa $-240(%rip), %xmm8 /* LCPI22_0+0(%rip) */ + 0x66, 0x44, 0x0f, 0x6f, 0x15, 0x17, 0xff, 0xff, 0xff, //0x00005100 movdqa $-233(%rip), %xmm10 /* LCPI22_1+0(%rip) */ + 0x66, 0x44, 0x0f, 0x6f, 0x0d, 0x1e, 0xff, 0xff, 0xff, //0x00005109 movdqa $-226(%rip), %xmm9 /* LCPI22_2+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x1d, 0x26, 0xff, 0xff, 0xff, //0x00005112 movdqa $-218(%rip), %xmm3 /* LCPI22_3+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x25, 0x2e, 0xff, 0xff, 0xff, //0x0000511a movdqa $-210(%rip), %xmm4 /* LCPI22_4+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x2d, 0x36, 0xff, 0xff, 0xff, //0x00005122 movdqa $-202(%rip), %xmm5 /* LCPI22_5+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x35, 0x3e, 0xff, 0xff, 0xff, //0x0000512a movdqa $-194(%rip), %xmm6 /* LCPI22_6+0(%rip) */ + 0x41, 0xbe, 0xff, 0xff, 0xff, 0xff, //0x00005132 movl $4294967295, %r14d + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00005138 movq $-1, %rax + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000513f movq $-1, %r8 + 0x49, 0x89, 0xff, //0x00005146 movq %rdi, %r15 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005149 .p2align 4, 0x90 + //0x00005150 LBB22_7 + 0xf3, 0x41, 0x0f, 0x6f, 0x3f, //0x00005150 movdqu (%r15), %xmm7 + 0x66, 0x0f, 0x6f, 0xc7, //0x00005155 movdqa %xmm7, %xmm0 + 0x66, 0x41, 0x0f, 0x64, 0xc0, //0x00005159 pcmpgtb %xmm8, %xmm0 + 0x66, 0x41, 0x0f, 0x6f, 0xca, //0x0000515e movdqa %xmm10, %xmm1 + 0x66, 0x0f, 0x64, 0xcf, //0x00005163 pcmpgtb %xmm7, %xmm1 + 0x66, 0x0f, 0xdb, 0xc8, //0x00005167 pand %xmm0, %xmm1 + 0x66, 0x0f, 0x6f, 0xc7, //0x0000516b movdqa %xmm7, %xmm0 + 0x66, 0x41, 0x0f, 0x74, 0xc1, //0x0000516f pcmpeqb %xmm9, %xmm0 + 0x66, 0x0f, 0x6f, 0xd7, //0x00005174 movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00005178 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xeb, 0xd0, //0x0000517c por %xmm0, %xmm2 + 0x66, 0x0f, 0x6f, 0xc7, //0x00005180 movdqa %xmm7, %xmm0 + 0x66, 0x0f, 0xeb, 0xc4, //0x00005184 por %xmm4, %xmm0 + 0x66, 0x0f, 0x74, 0xc6, //0x00005188 pcmpeqb %xmm6, %xmm0 + 0x66, 0x0f, 0x74, 0xfd, //0x0000518c pcmpeqb %xmm5, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xe8, //0x00005190 pmovmskb %xmm0, %r13d + 0x66, 0x0f, 0xeb, 0xc7, //0x00005195 por %xmm7, %xmm0 + 0x66, 0x0f, 0xeb, 0xca, //0x00005199 por %xmm2, %xmm1 + 0x66, 0x0f, 0xeb, 0xc8, //0x0000519d por %xmm0, %xmm1 + 0x66, 0x0f, 0xd7, 0xd7, //0x000051a1 pmovmskb %xmm7, %edx + 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x000051a5 pmovmskb %xmm2, %r12d + 0x66, 0x0f, 0xd7, 0xc9, //0x000051aa pmovmskb %xmm1, %ecx + 0x4c, 0x31, 0xf1, //0x000051ae xorq %r14, %rcx + 0x48, 0x0f, 0xbc, 0xc9, //0x000051b1 bsfq %rcx, %rcx + 0x83, 0xf9, 0x10, //0x000051b5 cmpl $16, %ecx + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000051b8 je LBB22_9 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x000051be movl $-1, %ebx + 0xd3, 0xe3, //0x000051c3 shll %cl, %ebx + 0xf7, 0xd3, //0x000051c5 notl %ebx + 0x21, 0xda, //0x000051c7 andl %ebx, %edx + 0x41, 0x21, 0xdd, //0x000051c9 andl %ebx, %r13d + 0x44, 0x21, 0xe3, //0x000051cc andl %r12d, %ebx + 0x41, 0x89, 0xdc, //0x000051cf movl %ebx, %r12d + //0x000051d2 LBB22_9 + 0x8d, 0x5a, 0xff, //0x000051d2 leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x000051d5 andl %edx, %ebx + 0x0f, 0x85, 0x05, 0x02, 0x00, 0x00, //0x000051d7 jne LBB22_50 + 0x41, 0x8d, 0x5d, 0xff, //0x000051dd leal $-1(%r13), %ebx + 0x44, 0x21, 0xeb, //0x000051e1 andl %r13d, %ebx + 0x0f, 0x85, 0xf8, 0x01, 0x00, 0x00, //0x000051e4 jne LBB22_50 + 0x41, 0x8d, 0x5c, 0x24, 0xff, //0x000051ea leal $-1(%r12), %ebx + 0x44, 0x21, 0xe3, //0x000051ef andl %r12d, %ebx + 0x0f, 0x85, 0xea, 0x01, 0x00, 0x00, //0x000051f2 jne LBB22_50 + 0x85, 0xd2, //0x000051f8 testl %edx, %edx + 0x0f, 0x84, 0x19, 0x00, 0x00, 0x00, //0x000051fa je LBB22_15 + 0x4c, 0x89, 0xfb, //0x00005200 movq %r15, %rbx + 0x48, 0x29, 0xfb, //0x00005203 subq %rdi, %rbx + 0x0f, 0xbc, 0xd2, //0x00005206 bsfl %edx, %edx + 0x48, 0x01, 0xda, //0x00005209 addq %rbx, %rdx + 0x49, 0x83, 0xf8, 0xff, //0x0000520c cmpq $-1, %r8 + 0x0f, 0x85, 0xd5, 0x01, 0x00, 0x00, //0x00005210 jne LBB22_51 + 0x49, 0x89, 0xd0, //0x00005216 movq %rdx, %r8 + //0x00005219 LBB22_15 + 0x45, 0x85, 0xed, //0x00005219 testl %r13d, %r13d + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x0000521c je LBB22_18 + 0x4c, 0x89, 0xfb, //0x00005222 movq %r15, %rbx + 0x48, 0x29, 0xfb, //0x00005225 subq %rdi, %rbx + 0x41, 0x0f, 0xbc, 0xd5, //0x00005228 bsfl %r13d, %edx + 0x48, 0x01, 0xda, //0x0000522c addq %rbx, %rdx + 0x48, 0x83, 0xf8, 0xff, //0x0000522f cmpq $-1, %rax + 0x0f, 0x85, 0xb2, 0x01, 0x00, 0x00, //0x00005233 jne LBB22_51 + 0x48, 0x89, 0xd0, //0x00005239 movq %rdx, %rax + //0x0000523c LBB22_18 + 0x45, 0x85, 0xe4, //0x0000523c testl %r12d, %r12d + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x0000523f je LBB22_21 + 0x4c, 0x89, 0xfb, //0x00005245 movq %r15, %rbx + 0x48, 0x29, 0xfb, //0x00005248 subq %rdi, %rbx + 0x41, 0x0f, 0xbc, 0xd4, //0x0000524b bsfl %r12d, %edx + 0x48, 0x01, 0xda, //0x0000524f addq %rbx, %rdx + 0x49, 0x83, 0xf9, 0xff, //0x00005252 cmpq $-1, %r9 + 0x0f, 0x85, 0x8f, 0x01, 0x00, 0x00, //0x00005256 jne LBB22_51 + 0x49, 0x89, 0xd1, //0x0000525c movq %rdx, %r9 + //0x0000525f LBB22_21 + 0x83, 0xf9, 0x10, //0x0000525f cmpl $16, %ecx + 0x0f, 0x85, 0xbe, 0x00, 0x00, 0x00, //0x00005262 jne LBB22_35 + 0x49, 0x83, 0xc7, 0x10, //0x00005268 addq $16, %r15 + 0x48, 0x83, 0xc6, 0xf0, //0x0000526c addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x0f, //0x00005270 cmpq $15, %rsi + 0x0f, 0x87, 0xd6, 0xfe, 0xff, 0xff, //0x00005274 ja LBB22_7 + 0x4d, 0x85, 0xdb, //0x0000527a testq %r11, %r11 + 0x0f, 0x84, 0xa9, 0x00, 0x00, 0x00, //0x0000527d je LBB22_36 + //0x00005283 LBB22_24 + 0x4b, 0x8d, 0x0c, 0x1a, //0x00005283 leaq (%r10,%r11), %rcx + 0x48, 0x8d, 0x35, 0xae, 0x01, 0x00, 0x00, //0x00005287 leaq $430(%rip), %rsi /* LJTI22_0+0(%rip) */ + 0xe9, 0x19, 0x00, 0x00, 0x00, //0x0000528e jmp LBB22_26 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005293 .p2align 4, 0x90 + //0x000052a0 LBB22_25 + 0x49, 0x89, 0xda, //0x000052a0 movq %rbx, %r10 + 0x49, 0xff, 0xcb, //0x000052a3 decq %r11 + 0x0f, 0x84, 0x50, 0x01, 0x00, 0x00, //0x000052a6 je LBB22_54 + //0x000052ac LBB22_26 + 0x41, 0x0f, 0xbe, 0x12, //0x000052ac movsbl (%r10), %edx + 0x83, 0xc2, 0xd5, //0x000052b0 addl $-43, %edx + 0x83, 0xfa, 0x3a, //0x000052b3 cmpl $58, %edx + 0x0f, 0x87, 0x70, 0x00, 0x00, 0x00, //0x000052b6 ja LBB22_36 + 0x49, 0x8d, 0x5a, 0x01, //0x000052bc leaq $1(%r10), %rbx + 0x48, 0x63, 0x14, 0x96, //0x000052c0 movslq (%rsi,%rdx,4), %rdx + 0x48, 0x01, 0xf2, //0x000052c4 addq %rsi, %rdx + 0xff, 0xe2, //0x000052c7 jmpq *%rdx + //0x000052c9 LBB22_28 + 0x48, 0x89, 0xda, //0x000052c9 movq %rbx, %rdx + 0x48, 0x29, 0xfa, //0x000052cc subq %rdi, %rdx + 0x49, 0x83, 0xf9, 0xff, //0x000052cf cmpq $-1, %r9 + 0x0f, 0x85, 0x3b, 0x01, 0x00, 0x00, //0x000052d3 jne LBB22_58 + 0x48, 0xff, 0xca, //0x000052d9 decq %rdx + 0x49, 0x89, 0xd1, //0x000052dc movq %rdx, %r9 + 0xe9, 0xbc, 0xff, 0xff, 0xff, //0x000052df jmp LBB22_25 + //0x000052e4 LBB22_30 + 0x48, 0x89, 0xda, //0x000052e4 movq %rbx, %rdx + 0x48, 0x29, 0xfa, //0x000052e7 subq %rdi, %rdx + 0x48, 0x83, 0xf8, 0xff, //0x000052ea cmpq $-1, %rax + 0x0f, 0x85, 0x20, 0x01, 0x00, 0x00, //0x000052ee jne LBB22_58 + 0x48, 0xff, 0xca, //0x000052f4 decq %rdx + 0x48, 0x89, 0xd0, //0x000052f7 movq %rdx, %rax + 0xe9, 0xa1, 0xff, 0xff, 0xff, //0x000052fa jmp LBB22_25 + //0x000052ff LBB22_32 + 0x48, 0x89, 0xda, //0x000052ff movq %rbx, %rdx + 0x48, 0x29, 0xfa, //0x00005302 subq %rdi, %rdx + 0x49, 0x83, 0xf8, 0xff, //0x00005305 cmpq $-1, %r8 + 0x0f, 0x85, 0x05, 0x01, 0x00, 0x00, //0x00005309 jne LBB22_58 + 0x48, 0xff, 0xca, //0x0000530f decq %rdx + 0x49, 0x89, 0xd0, //0x00005312 movq %rdx, %r8 + 0xe9, 0x86, 0xff, 0xff, 0xff, //0x00005315 jmp LBB22_25 + //0x0000531a LBB22_34 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000531a movq $-1, %rax + 0xe9, 0xcb, 0x00, 0x00, 0x00, //0x00005321 jmp LBB22_53 + //0x00005326 LBB22_35 + 0x49, 0x01, 0xcf, //0x00005326 addq %rcx, %r15 + 0x4d, 0x89, 0xfa, //0x00005329 movq %r15, %r10 + //0x0000532c LBB22_36 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000532c movq $-1, %rdx + 0x48, 0x85, 0xc0, //0x00005333 testq %rax, %rax + 0x0f, 0x84, 0xb2, 0x00, 0x00, 0x00, //0x00005336 je LBB22_52 + //0x0000533c LBB22_37 + 0x4d, 0x85, 0xc9, //0x0000533c testq %r9, %r9 + 0x0f, 0x84, 0xa9, 0x00, 0x00, 0x00, //0x0000533f je LBB22_52 + 0x4d, 0x85, 0xc0, //0x00005345 testq %r8, %r8 + 0x0f, 0x84, 0xa0, 0x00, 0x00, 0x00, //0x00005348 je LBB22_52 + 0x49, 0x29, 0xfa, //0x0000534e subq %rdi, %r10 + 0x49, 0x8d, 0x4a, 0xff, //0x00005351 leaq $-1(%r10), %rcx + 0x48, 0x39, 0xc8, //0x00005355 cmpq %rcx, %rax + 0x0f, 0x84, 0x36, 0x00, 0x00, 0x00, //0x00005358 je LBB22_45 + 0x49, 0x39, 0xc8, //0x0000535e cmpq %rcx, %r8 + 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x00005361 je LBB22_45 + 0x49, 0x39, 0xc9, //0x00005367 cmpq %rcx, %r9 + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x0000536a je LBB22_45 + 0x4d, 0x85, 0xc9, //0x00005370 testq %r9, %r9 + 0x0f, 0x8e, 0x29, 0x00, 0x00, 0x00, //0x00005373 jle LBB22_46 + 0x49, 0x8d, 0x49, 0xff, //0x00005379 leaq $-1(%r9), %rcx + 0x48, 0x39, 0xc8, //0x0000537d cmpq %rcx, %rax + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x00005380 je LBB22_46 + 0x49, 0xf7, 0xd1, //0x00005386 notq %r9 + 0x4c, 0x89, 0xca, //0x00005389 movq %r9, %rdx + 0x4c, 0x89, 0xc8, //0x0000538c movq %r9, %rax + 0xe9, 0x5d, 0x00, 0x00, 0x00, //0x0000538f jmp LBB22_53 + //0x00005394 LBB22_45 + 0x49, 0xf7, 0xda, //0x00005394 negq %r10 + 0x4c, 0x89, 0xd2, //0x00005397 movq %r10, %rdx + 0x4c, 0x89, 0xd0, //0x0000539a movq %r10, %rax + 0xe9, 0x4f, 0x00, 0x00, 0x00, //0x0000539d jmp LBB22_53 + //0x000053a2 LBB22_46 + 0x4c, 0x89, 0xc1, //0x000053a2 movq %r8, %rcx + 0x48, 0x09, 0xc1, //0x000053a5 orq %rax, %rcx + 0x49, 0x39, 0xc0, //0x000053a8 cmpq %rax, %r8 + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x000053ab jl LBB22_49 + 0x48, 0x85, 0xc9, //0x000053b1 testq %rcx, %rcx + 0x0f, 0x88, 0x0e, 0x00, 0x00, 0x00, //0x000053b4 js LBB22_49 + 0x49, 0xf7, 0xd0, //0x000053ba notq %r8 + 0x4c, 0x89, 0xc2, //0x000053bd movq %r8, %rdx + 0x4c, 0x89, 0xc0, //0x000053c0 movq %r8, %rax + 0xe9, 0x29, 0x00, 0x00, 0x00, //0x000053c3 jmp LBB22_53 + //0x000053c8 LBB22_49 + 0x48, 0x85, 0xc9, //0x000053c8 testq %rcx, %rcx + 0x48, 0x8d, 0x48, 0xff, //0x000053cb leaq $-1(%rax), %rcx + 0x48, 0xf7, 0xd0, //0x000053cf notq %rax + 0x49, 0x0f, 0x48, 0xc2, //0x000053d2 cmovsq %r10, %rax + 0x49, 0x39, 0xc8, //0x000053d6 cmpq %rcx, %r8 + 0x49, 0x0f, 0x45, 0xc2, //0x000053d9 cmovneq %r10, %rax + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x000053dd jmp LBB22_53 + //0x000053e2 LBB22_50 + 0x49, 0x29, 0xff, //0x000053e2 subq %rdi, %r15 + 0x0f, 0xbc, 0xd3, //0x000053e5 bsfl %ebx, %edx + 0x4c, 0x01, 0xfa, //0x000053e8 addq %r15, %rdx + //0x000053eb LBB22_51 + 0x48, 0xf7, 0xd2, //0x000053eb notq %rdx + //0x000053ee LBB22_52 + 0x48, 0x89, 0xd0, //0x000053ee movq %rdx, %rax + //0x000053f1 LBB22_53 + 0x5b, //0x000053f1 popq %rbx + 0x41, 0x5c, //0x000053f2 popq %r12 + 0x41, 0x5d, //0x000053f4 popq %r13 + 0x41, 0x5e, //0x000053f6 popq %r14 + 0x41, 0x5f, //0x000053f8 popq %r15 + 0x5d, //0x000053fa popq %rbp + 0xc3, //0x000053fb retq + //0x000053fc LBB22_54 + 0x49, 0x89, 0xca, //0x000053fc movq %rcx, %r10 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000053ff movq $-1, %rdx + 0x48, 0x85, 0xc0, //0x00005406 testq %rax, %rax + 0x0f, 0x85, 0x2d, 0xff, 0xff, 0xff, //0x00005409 jne LBB22_37 + 0xe9, 0xda, 0xff, 0xff, 0xff, //0x0000540f jmp LBB22_52 + //0x00005414 LBB22_58 + 0x48, 0xf7, 0xda, //0x00005414 negq %rdx + 0xe9, 0xd2, 0xff, 0xff, 0xff, //0x00005417 jmp LBB22_52 + //0x0000541c LBB22_57 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000541c movq $-1, %r8 + 0x49, 0x89, 0xfa, //0x00005423 movq %rdi, %r10 + 0x49, 0x89, 0xf3, //0x00005426 movq %rsi, %r11 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00005429 movq $-1, %rax + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00005430 movq $-1, %r9 + 0xe9, 0x47, 0xfe, 0xff, 0xff, //0x00005437 jmp LBB22_24 + //0x0000543c .p2align 2, 0x90 + // // .set L22_0_set_28, LBB22_28-LJTI22_0 + // // .set L22_0_set_36, LBB22_36-LJTI22_0 + // // .set L22_0_set_32, LBB22_32-LJTI22_0 + // // .set L22_0_set_25, LBB22_25-LJTI22_0 + // // .set L22_0_set_30, LBB22_30-LJTI22_0 + //0x0000543c LJTI22_0 + 0x8d, 0xfe, 0xff, 0xff, //0x0000543c .long L22_0_set_28 + 0xf0, 0xfe, 0xff, 0xff, //0x00005440 .long L22_0_set_36 + 0x8d, 0xfe, 0xff, 0xff, //0x00005444 .long L22_0_set_28 + 0xc3, 0xfe, 0xff, 0xff, //0x00005448 .long L22_0_set_32 + 0xf0, 0xfe, 0xff, 0xff, //0x0000544c .long L22_0_set_36 + 0x64, 0xfe, 0xff, 0xff, //0x00005450 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x00005454 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x00005458 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x0000545c .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x00005460 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x00005464 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x00005468 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x0000546c .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x00005470 .long L22_0_set_25 + 0x64, 0xfe, 0xff, 0xff, //0x00005474 .long L22_0_set_25 + 0xf0, 0xfe, 0xff, 0xff, //0x00005478 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000547c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005480 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005484 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005488 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000548c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005490 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005494 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005498 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000549c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054a0 .long L22_0_set_36 + 0xa8, 0xfe, 0xff, 0xff, //0x000054a4 .long L22_0_set_30 + 0xf0, 0xfe, 0xff, 0xff, //0x000054a8 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054ac .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054b0 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054b4 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054b8 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054bc .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054c0 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054c4 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054c8 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054cc .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054d0 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054d4 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054d8 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054dc .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054e0 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054e4 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054e8 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054ec .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054f0 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054f4 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054f8 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x000054fc .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005500 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005504 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005508 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000550c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005510 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005514 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005518 .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x0000551c .long L22_0_set_36 + 0xf0, 0xfe, 0xff, 0xff, //0x00005520 .long L22_0_set_36 + 0xa8, 0xfe, 0xff, 0xff, //0x00005524 .long L22_0_set_30 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005528 .p2align 4, 0x90 + //0x00005530 _skip_positive + 0x55, //0x00005530 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005531 movq %rsp, %rbp + 0x41, 0x57, //0x00005534 pushq %r15 + 0x41, 0x56, //0x00005536 pushq %r14 + 0x53, //0x00005538 pushq %rbx + 0x50, //0x00005539 pushq %rax + 0x49, 0x89, 0xf6, //0x0000553a movq %rsi, %r14 + 0x4c, 0x8b, 0x3e, //0x0000553d movq (%rsi), %r15 + 0x49, 0x8d, 0x5f, 0xff, //0x00005540 leaq $-1(%r15), %rbx + 0x48, 0x8b, 0x07, //0x00005544 movq (%rdi), %rax + 0x48, 0x01, 0xd8, //0x00005547 addq %rbx, %rax + 0x48, 0x8b, 0x77, 0x08, //0x0000554a movq $8(%rdi), %rsi + 0x48, 0x29, 0xde, //0x0000554e subq %rbx, %rsi + 0x48, 0x89, 0xc7, //0x00005551 movq %rax, %rdi + 0xe8, 0x27, 0xfb, 0xff, 0xff, //0x00005554 callq _do_skip_number + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00005559 movq $-2, %rcx + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00005560 movq $-2, %rdx + 0x48, 0x29, 0xc2, //0x00005567 subq %rax, %rdx + 0x48, 0x85, 0xc0, //0x0000556a testq %rax, %rax + 0x48, 0x8d, 0x40, 0xff, //0x0000556d leaq $-1(%rax), %rax + 0x48, 0x0f, 0x48, 0xc2, //0x00005571 cmovsq %rdx, %rax + 0x48, 0x0f, 0x49, 0xcb, //0x00005575 cmovnsq %rbx, %rcx + 0x4c, 0x01, 0xf8, //0x00005579 addq %r15, %rax + 0x49, 0x89, 0x06, //0x0000557c movq %rax, (%r14) + 0x48, 0x89, 0xc8, //0x0000557f movq %rcx, %rax + 0x48, 0x83, 0xc4, 0x08, //0x00005582 addq $8, %rsp + 0x5b, //0x00005586 popq %rbx + 0x41, 0x5e, //0x00005587 popq %r14 + 0x41, 0x5f, //0x00005589 popq %r15 + 0x5d, //0x0000558b popq %rbp + 0xc3, //0x0000558c retq + 0x90, 0x90, 0x90, //0x0000558d .p2align 4, 0x90 + //0x00005590 _skip_number + 0x55, //0x00005590 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005591 movq %rsp, %rbp + 0x41, 0x57, //0x00005594 pushq %r15 + 0x41, 0x56, //0x00005596 pushq %r14 + 0x41, 0x54, //0x00005598 pushq %r12 + 0x53, //0x0000559a pushq %rbx + 0x49, 0x89, 0xf6, //0x0000559b movq %rsi, %r14 + 0x4c, 0x8b, 0x27, //0x0000559e movq (%rdi), %r12 + 0x48, 0x8b, 0x77, 0x08, //0x000055a1 movq $8(%rdi), %rsi + 0x4d, 0x8b, 0x3e, //0x000055a5 movq (%r14), %r15 + 0x31, 0xc0, //0x000055a8 xorl %eax, %eax + 0x43, 0x80, 0x3c, 0x3c, 0x2d, //0x000055aa cmpb $45, (%r12,%r15) + 0x4b, 0x8d, 0x1c, 0x3c, //0x000055af leaq (%r12,%r15), %rbx + 0x0f, 0x94, 0xc0, //0x000055b3 sete %al + 0x48, 0x01, 0xc3, //0x000055b6 addq %rax, %rbx + 0x48, 0x29, 0xc6, //0x000055b9 subq %rax, %rsi + 0x0f, 0x84, 0x3b, 0x00, 0x00, 0x00, //0x000055bc je LBB24_6 + 0x49, 0x39, 0xf7, //0x000055c2 cmpq %rsi, %r15 + 0x0f, 0x83, 0x0c, 0x00, 0x00, 0x00, //0x000055c5 jae LBB24_3 + 0x8a, 0x03, //0x000055cb movb (%rbx), %al + 0x04, 0xd0, //0x000055cd addb $-48, %al + 0x3c, 0x09, //0x000055cf cmpb $9, %al + 0x0f, 0x87, 0x38, 0x00, 0x00, 0x00, //0x000055d1 ja LBB24_8 + //0x000055d7 LBB24_3 + 0x48, 0x89, 0xdf, //0x000055d7 movq %rbx, %rdi + 0xe8, 0xa1, 0xfa, 0xff, 0xff, //0x000055da callq _do_skip_number + 0x48, 0x85, 0xc0, //0x000055df testq %rax, %rax + 0x0f, 0x88, 0x21, 0x00, 0x00, 0x00, //0x000055e2 js LBB24_7 + 0x48, 0x01, 0xc3, //0x000055e8 addq %rax, %rbx + //0x000055eb LBB24_5 + 0x4c, 0x29, 0xe3, //0x000055eb subq %r12, %rbx + 0x49, 0x89, 0x1e, //0x000055ee movq %rbx, (%r14) + 0x4c, 0x89, 0xf8, //0x000055f1 movq %r15, %rax + 0x5b, //0x000055f4 popq %rbx + 0x41, 0x5c, //0x000055f5 popq %r12 + 0x41, 0x5e, //0x000055f7 popq %r14 + 0x41, 0x5f, //0x000055f9 popq %r15 + 0x5d, //0x000055fb popq %rbp + 0xc3, //0x000055fc retq + //0x000055fd LBB24_6 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000055fd movq $-1, %r15 + 0xe9, 0xe2, 0xff, 0xff, 0xff, //0x00005604 jmp LBB24_5 + //0x00005609 LBB24_7 + 0x48, 0xf7, 0xd0, //0x00005609 notq %rax + 0x48, 0x01, 0xc3, //0x0000560c addq %rax, %rbx + //0x0000560f LBB24_8 + 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x0000560f movq $-2, %r15 + 0xe9, 0xd0, 0xff, 0xff, 0xff, //0x00005616 jmp LBB24_5 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000561b .p2align 4, 0x90 + //0x00005620 _skip_one + 0x55, //0x00005620 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005621 movq %rsp, %rbp + 0x48, 0x89, 0xd0, //0x00005624 movq %rdx, %rax + 0x48, 0x89, 0xf2, //0x00005627 movq %rsi, %rdx + 0x48, 0x89, 0xfe, //0x0000562a movq %rdi, %rsi + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x0000562d movl $1, %edi + 0x66, 0x48, 0x0f, 0x6e, 0xc7, //0x00005632 movq %rdi, %xmm0 + 0xf3, 0x0f, 0x7f, 0x00, //0x00005637 movdqu %xmm0, (%rax) + 0x48, 0x89, 0xc7, //0x0000563b movq %rax, %rdi + 0x5d, //0x0000563e popq %rbp + 0xe9, 0x1c, 0xf0, 0xff, 0xff, //0x0000563f jmp _fsm_exec + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005644 .p2align 4, 0x90 + //0x00005650 _validate_one + 0x55, //0x00005650 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005651 movq %rsp, %rbp + 0x48, 0x89, 0xd0, //0x00005654 movq %rdx, %rax + 0x48, 0x89, 0xf2, //0x00005657 movq %rsi, %rdx + 0x48, 0x89, 0xfe, //0x0000565a movq %rdi, %rsi + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x0000565d movl $1, %ecx + 0x66, 0x48, 0x0f, 0x6e, 0xc1, //0x00005662 movq %rcx, %xmm0 + 0xf3, 0x0f, 0x7f, 0x00, //0x00005667 movdqu %xmm0, (%rax) + 0xb9, 0x20, 0x00, 0x00, 0x00, //0x0000566b movl $32, %ecx + 0x48, 0x89, 0xc7, //0x00005670 movq %rax, %rdi + 0x5d, //0x00005673 popq %rbp + 0xe9, 0xe7, 0xef, 0xff, 0xff, //0x00005674 jmp _fsm_exec + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005679 .p2align 4, 0x00 + //0x00005680 LCPI27_0 + 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, //0x00005680 QUAD $0x2c2c2c2c2c2c2c2c; QUAD $0x2c2c2c2c2c2c2c2c // .space 16, ',,,,,,,,,,,,,,,,' + //0x00005690 LCPI27_1 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x00005690 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x000056a0 LCPI27_2 + 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, //0x000056a0 QUAD $0x7d7d7d7d7d7d7d7d; QUAD $0x7d7d7d7d7d7d7d7d // .space 16, '}}}}}}}}}}}}}}}}' + //0x000056b0 LCPI27_3 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x000056b0 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x000056c0 LCPI27_4 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x000056c0 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x000056d0 LCPI27_5 + 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, //0x000056d0 QUAD $0x7b7b7b7b7b7b7b7b; QUAD $0x7b7b7b7b7b7b7b7b // .space 16, '{{{{{{{{{{{{{{{{' + //0x000056e0 LCPI27_6 + 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, //0x000056e0 QUAD $0x5b5b5b5b5b5b5b5b; QUAD $0x5b5b5b5b5b5b5b5b // .space 16, '[[[[[[[[[[[[[[[[' + //0x000056f0 LCPI27_7 + 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, //0x000056f0 QUAD $0x5d5d5d5d5d5d5d5d; QUAD $0x5d5d5d5d5d5d5d5d // .space 16, ']]]]]]]]]]]]]]]]' + //0x00005700 .p2align 4, 0x90 + //0x00005700 _skip_one_fast + 0x55, //0x00005700 pushq %rbp + 0x48, 0x89, 0xe5, //0x00005701 movq %rsp, %rbp + 0x41, 0x57, //0x00005704 pushq %r15 + 0x41, 0x56, //0x00005706 pushq %r14 + 0x41, 0x55, //0x00005708 pushq %r13 + 0x41, 0x54, //0x0000570a pushq %r12 + 0x53, //0x0000570c pushq %rbx + 0x48, 0x83, 0xec, 0x58, //0x0000570d subq $88, %rsp + 0x4c, 0x8b, 0x07, //0x00005711 movq (%rdi), %r8 + 0x4c, 0x8b, 0x4f, 0x08, //0x00005714 movq $8(%rdi), %r9 + 0x48, 0x8b, 0x16, //0x00005718 movq (%rsi), %rdx + 0x48, 0x89, 0xd0, //0x0000571b movq %rdx, %rax + 0x4c, 0x29, 0xc8, //0x0000571e subq %r9, %rax + 0x0f, 0x83, 0x2a, 0x00, 0x00, 0x00, //0x00005721 jae LBB27_5 + 0x41, 0x8a, 0x0c, 0x10, //0x00005727 movb (%r8,%rdx), %cl + 0x80, 0xf9, 0x0d, //0x0000572b cmpb $13, %cl + 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x0000572e je LBB27_5 + 0x80, 0xf9, 0x20, //0x00005734 cmpb $32, %cl + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00005737 je LBB27_5 + 0x80, 0xc1, 0xf7, //0x0000573d addb $-9, %cl + 0x80, 0xf9, 0x01, //0x00005740 cmpb $1, %cl + 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x00005743 jbe LBB27_5 + 0x49, 0x89, 0xd6, //0x00005749 movq %rdx, %r14 + 0xe9, 0x2e, 0x01, 0x00, 0x00, //0x0000574c jmp LBB27_27 + //0x00005751 LBB27_5 + 0x4c, 0x8d, 0x72, 0x01, //0x00005751 leaq $1(%rdx), %r14 + 0x4d, 0x39, 0xce, //0x00005755 cmpq %r9, %r14 + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x00005758 jae LBB27_9 + 0x43, 0x8a, 0x0c, 0x30, //0x0000575e movb (%r8,%r14), %cl + 0x80, 0xf9, 0x0d, //0x00005762 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00005765 je LBB27_9 + 0x80, 0xf9, 0x20, //0x0000576b cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000576e je LBB27_9 + 0x80, 0xc1, 0xf7, //0x00005774 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x00005777 cmpb $1, %cl + 0x0f, 0x87, 0xff, 0x00, 0x00, 0x00, //0x0000577a ja LBB27_27 + //0x00005780 LBB27_9 + 0x4c, 0x8d, 0x72, 0x02, //0x00005780 leaq $2(%rdx), %r14 + 0x4d, 0x39, 0xce, //0x00005784 cmpq %r9, %r14 + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x00005787 jae LBB27_13 + 0x43, 0x8a, 0x0c, 0x30, //0x0000578d movb (%r8,%r14), %cl + 0x80, 0xf9, 0x0d, //0x00005791 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00005794 je LBB27_13 + 0x80, 0xf9, 0x20, //0x0000579a cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000579d je LBB27_13 + 0x80, 0xc1, 0xf7, //0x000057a3 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x000057a6 cmpb $1, %cl + 0x0f, 0x87, 0xd0, 0x00, 0x00, 0x00, //0x000057a9 ja LBB27_27 + //0x000057af LBB27_13 + 0x4c, 0x8d, 0x72, 0x03, //0x000057af leaq $3(%rdx), %r14 + 0x4d, 0x39, 0xce, //0x000057b3 cmpq %r9, %r14 + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x000057b6 jae LBB27_17 + 0x43, 0x8a, 0x0c, 0x30, //0x000057bc movb (%r8,%r14), %cl + 0x80, 0xf9, 0x0d, //0x000057c0 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000057c3 je LBB27_17 + 0x80, 0xf9, 0x20, //0x000057c9 cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000057cc je LBB27_17 + 0x80, 0xc1, 0xf7, //0x000057d2 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x000057d5 cmpb $1, %cl + 0x0f, 0x87, 0xa1, 0x00, 0x00, 0x00, //0x000057d8 ja LBB27_27 + //0x000057de LBB27_17 + 0x48, 0x8d, 0x4a, 0x04, //0x000057de leaq $4(%rdx), %rcx + 0x49, 0x39, 0xc9, //0x000057e2 cmpq %rcx, %r9 + 0x0f, 0x86, 0x4e, 0x00, 0x00, 0x00, //0x000057e5 jbe LBB27_23 + 0x49, 0x39, 0xc9, //0x000057eb cmpq %rcx, %r9 + 0x0f, 0x84, 0x54, 0x00, 0x00, 0x00, //0x000057ee je LBB27_24 + 0x4b, 0x8d, 0x0c, 0x08, //0x000057f4 leaq (%r8,%r9), %rcx + 0x48, 0x83, 0xc0, 0x04, //0x000057f8 addq $4, %rax + 0x4e, 0x8d, 0x74, 0x02, 0x05, //0x000057fc leaq $5(%rdx,%r8), %r14 + 0x48, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00005801 movabsq $4294977024, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000580b .p2align 4, 0x90 + //0x00005810 LBB27_20 + 0x41, 0x0f, 0xbe, 0x5e, 0xff, //0x00005810 movsbl $-1(%r14), %ebx + 0x83, 0xfb, 0x20, //0x00005815 cmpl $32, %ebx + 0x0f, 0x87, 0x48, 0x00, 0x00, 0x00, //0x00005818 ja LBB27_26 + 0x48, 0x0f, 0xa3, 0xda, //0x0000581e btq %rbx, %rdx + 0x0f, 0x83, 0x3e, 0x00, 0x00, 0x00, //0x00005822 jae LBB27_26 + 0x49, 0xff, 0xc6, //0x00005828 incq %r14 + 0x48, 0xff, 0xc0, //0x0000582b incq %rax + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000582e jne LBB27_20 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00005834 jmp LBB27_25 + //0x00005839 LBB27_23 + 0x48, 0x89, 0x0e, //0x00005839 movq %rcx, (%rsi) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000583c movq $-1, %rax + 0xe9, 0x4a, 0x01, 0x00, 0x00, //0x00005843 jmp LBB27_45 + //0x00005848 LBB27_24 + 0x4c, 0x01, 0xc1, //0x00005848 addq %r8, %rcx + //0x0000584b LBB27_25 + 0x4c, 0x29, 0xc1, //0x0000584b subq %r8, %rcx + 0x49, 0x89, 0xce, //0x0000584e movq %rcx, %r14 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00005851 movq $-1, %rax + 0x4d, 0x39, 0xce, //0x00005858 cmpq %r9, %r14 + 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x0000585b jb LBB27_27 + 0xe9, 0x2c, 0x01, 0x00, 0x00, //0x00005861 jmp LBB27_45 + //0x00005866 LBB27_26 + 0x4c, 0x89, 0xc0, //0x00005866 movq %r8, %rax + 0x48, 0xf7, 0xd0, //0x00005869 notq %rax + 0x49, 0x01, 0xc6, //0x0000586c addq %rax, %r14 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000586f movq $-1, %rax + 0x4d, 0x39, 0xce, //0x00005876 cmpq %r9, %r14 + 0x0f, 0x83, 0x13, 0x01, 0x00, 0x00, //0x00005879 jae LBB27_45 + //0x0000587f LBB27_27 + 0x49, 0x8d, 0x5e, 0x01, //0x0000587f leaq $1(%r14), %rbx + 0x48, 0x89, 0x1e, //0x00005883 movq %rbx, (%rsi) + 0x43, 0x0f, 0xbe, 0x0c, 0x30, //0x00005886 movsbl (%r8,%r14), %ecx + 0x83, 0xf9, 0x7b, //0x0000588b cmpl $123, %ecx + 0x0f, 0x87, 0x20, 0x01, 0x00, 0x00, //0x0000588e ja LBB27_47 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00005894 movq $-1, %rax + 0x48, 0x8d, 0x15, 0xaa, 0x0b, 0x00, 0x00, //0x0000589b leaq $2986(%rip), %rdx /* LJTI27_0+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x000058a2 movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x000058a6 addq %rdx, %rcx + 0xff, 0xe1, //0x000058a9 jmpq *%rcx + //0x000058ab LBB27_29 + 0x48, 0x8b, 0x4f, 0x08, //0x000058ab movq $8(%rdi), %rcx + 0x48, 0x89, 0xc8, //0x000058af movq %rcx, %rax + 0x48, 0x29, 0xd8, //0x000058b2 subq %rbx, %rax + 0x4c, 0x01, 0xc3, //0x000058b5 addq %r8, %rbx + 0x48, 0x83, 0xf8, 0x10, //0x000058b8 cmpq $16, %rax + 0x0f, 0x82, 0x7b, 0x00, 0x00, 0x00, //0x000058bc jb LBB27_34 + 0x4c, 0x29, 0xf1, //0x000058c2 subq %r14, %rcx + 0x48, 0x83, 0xc1, 0xef, //0x000058c5 addq $-17, %rcx + 0x48, 0x89, 0xca, //0x000058c9 movq %rcx, %rdx + 0x48, 0x83, 0xe2, 0xf0, //0x000058cc andq $-16, %rdx + 0x4c, 0x01, 0xf2, //0x000058d0 addq %r14, %rdx + 0x49, 0x8d, 0x54, 0x10, 0x11, //0x000058d3 leaq $17(%r8,%rdx), %rdx + 0x83, 0xe1, 0x0f, //0x000058d8 andl $15, %ecx + 0x66, 0x0f, 0x6f, 0x05, 0x9d, 0xfd, 0xff, 0xff, //0x000058db movdqa $-611(%rip), %xmm0 /* LCPI27_0+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x0d, 0xa5, 0xfd, 0xff, 0xff, //0x000058e3 movdqa $-603(%rip), %xmm1 /* LCPI27_1+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x15, 0xad, 0xfd, 0xff, 0xff, //0x000058eb movdqa $-595(%rip), %xmm2 /* LCPI27_2+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000058f3 .p2align 4, 0x90 + //0x00005900 LBB27_31 + 0xf3, 0x0f, 0x6f, 0x1b, //0x00005900 movdqu (%rbx), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00005904 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x00005908 pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xeb, 0xd9, //0x0000590c por %xmm1, %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x00005910 pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xeb, 0xdc, //0x00005914 por %xmm4, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00005918 pmovmskb %xmm3, %edi + 0x66, 0x85, 0xff, //0x0000591c testw %di, %di + 0x0f, 0x85, 0x5a, 0x00, 0x00, 0x00, //0x0000591f jne LBB27_42 + 0x48, 0x83, 0xc3, 0x10, //0x00005925 addq $16, %rbx + 0x48, 0x83, 0xc0, 0xf0, //0x00005929 addq $-16, %rax + 0x48, 0x83, 0xf8, 0x0f, //0x0000592d cmpq $15, %rax + 0x0f, 0x87, 0xc9, 0xff, 0xff, 0xff, //0x00005931 ja LBB27_31 + 0x48, 0x89, 0xc8, //0x00005937 movq %rcx, %rax + 0x48, 0x89, 0xd3, //0x0000593a movq %rdx, %rbx + //0x0000593d LBB27_34 + 0x48, 0x85, 0xc0, //0x0000593d testq %rax, %rax + 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x00005940 je LBB27_41 + 0x48, 0x8d, 0x0c, 0x03, //0x00005946 leaq (%rbx,%rax), %rcx + //0x0000594a LBB27_36 + 0x0f, 0xb6, 0x13, //0x0000594a movzbl (%rbx), %edx + 0x80, 0xfa, 0x2c, //0x0000594d cmpb $44, %dl + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00005950 je LBB27_41 + 0x80, 0xfa, 0x7d, //0x00005956 cmpb $125, %dl + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x00005959 je LBB27_41 + 0x80, 0xfa, 0x5d, //0x0000595f cmpb $93, %dl + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x00005962 je LBB27_41 + 0x48, 0xff, 0xc3, //0x00005968 incq %rbx + 0x48, 0xff, 0xc8, //0x0000596b decq %rax + 0x0f, 0x85, 0xd6, 0xff, 0xff, 0xff, //0x0000596e jne LBB27_36 + 0x48, 0x89, 0xcb, //0x00005974 movq %rcx, %rbx + //0x00005977 LBB27_41 + 0x4c, 0x29, 0xc3, //0x00005977 subq %r8, %rbx + 0xe9, 0x0d, 0x00, 0x00, 0x00, //0x0000597a jmp LBB27_43 + //0x0000597f LBB27_42 + 0x0f, 0xb7, 0xc7, //0x0000597f movzwl %di, %eax + 0x48, 0x0f, 0xbc, 0xc0, //0x00005982 bsfq %rax, %rax + 0x4c, 0x29, 0xc3, //0x00005986 subq %r8, %rbx + 0x48, 0x01, 0xc3, //0x00005989 addq %rax, %rbx + //0x0000598c LBB27_43 + 0x48, 0x89, 0x1e, //0x0000598c movq %rbx, (%rsi) + //0x0000598f LBB27_44 + 0x4c, 0x89, 0xf0, //0x0000598f movq %r14, %rax + //0x00005992 LBB27_45 + 0x48, 0x83, 0xc4, 0x58, //0x00005992 addq $88, %rsp + 0x5b, //0x00005996 popq %rbx + 0x41, 0x5c, //0x00005997 popq %r12 + 0x41, 0x5d, //0x00005999 popq %r13 + 0x41, 0x5e, //0x0000599b popq %r14 + 0x41, 0x5f, //0x0000599d popq %r15 + 0x5d, //0x0000599f popq %rbp + 0xc3, //0x000059a0 retq + //0x000059a1 LBB27_46 + 0x49, 0x8d, 0x4e, 0x04, //0x000059a1 leaq $4(%r14), %rcx + 0x48, 0x3b, 0x4f, 0x08, //0x000059a5 cmpq $8(%rdi), %rcx + 0x0f, 0x87, 0xe3, 0xff, 0xff, 0xff, //0x000059a9 ja LBB27_45 + 0xe9, 0x6a, 0x05, 0x00, 0x00, //0x000059af jmp LBB27_83 + //0x000059b4 LBB27_47 + 0x4c, 0x89, 0x36, //0x000059b4 movq %r14, (%rsi) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000059b7 movq $-2, %rax + 0xe9, 0xcf, 0xff, 0xff, 0xff, //0x000059be jmp LBB27_45 + //0x000059c3 LBB27_48 + 0x4c, 0x8b, 0x4f, 0x08, //0x000059c3 movq $8(%rdi), %r9 + 0x4d, 0x89, 0xcf, //0x000059c7 movq %r9, %r15 + 0x49, 0x29, 0xdf, //0x000059ca subq %rbx, %r15 + 0x49, 0x83, 0xff, 0x20, //0x000059cd cmpq $32, %r15 + 0x0f, 0x8c, 0x3e, 0x0a, 0x00, 0x00, //0x000059d1 jl LBB27_117 + 0x41, 0xba, 0xff, 0xff, 0xff, 0xff, //0x000059d7 movl $4294967295, %r10d + 0x4f, 0x8d, 0x1c, 0x30, //0x000059dd leaq (%r8,%r14), %r11 + 0x4d, 0x29, 0xf1, //0x000059e1 subq %r14, %r9 + 0x41, 0xbd, 0x1f, 0x00, 0x00, 0x00, //0x000059e4 movl $31, %r13d + 0x45, 0x31, 0xff, //0x000059ea xorl %r15d, %r15d + 0x66, 0x0f, 0x6f, 0x05, 0xbb, 0xfc, 0xff, 0xff, //0x000059ed movdqa $-837(%rip), %xmm0 /* LCPI27_3+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x0d, 0xc3, 0xfc, 0xff, 0xff, //0x000059f5 movdqa $-829(%rip), %xmm1 /* LCPI27_4+0(%rip) */ + 0x45, 0x31, 0xe4, //0x000059fd xorl %r12d, %r12d + 0xe9, 0x2d, 0x00, 0x00, 0x00, //0x00005a00 jmp LBB27_50 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005a05 .p2align 4, 0x90 + //0x00005a10 LBB27_52 + 0x45, 0x31, 0xe4, //0x00005a10 xorl %r12d, %r12d + 0x85, 0xc9, //0x00005a13 testl %ecx, %ecx + 0x0f, 0x85, 0xa6, 0x00, 0x00, 0x00, //0x00005a15 jne LBB27_110 + //0x00005a1b LBB27_53 + 0x49, 0x83, 0xc7, 0x20, //0x00005a1b addq $32, %r15 + 0x4b, 0x8d, 0x4c, 0x29, 0xe0, //0x00005a1f leaq $-32(%r9,%r13), %rcx + 0x49, 0x83, 0xc5, 0xe0, //0x00005a24 addq $-32, %r13 + 0x48, 0x83, 0xf9, 0x3f, //0x00005a28 cmpq $63, %rcx + 0x0f, 0x8e, 0x60, 0x09, 0x00, 0x00, //0x00005a2c jle LBB27_54 + //0x00005a32 LBB27_50 + 0xf3, 0x43, 0x0f, 0x6f, 0x54, 0x3b, 0x01, //0x00005a32 movdqu $1(%r11,%r15), %xmm2 + 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x3b, 0x11, //0x00005a39 movdqu $17(%r11,%r15), %xmm3 + 0x66, 0x0f, 0x6f, 0xe2, //0x00005a40 movdqa %xmm2, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x00005a44 pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00005a48 pmovmskb %xmm4, %edi + 0x66, 0x0f, 0x6f, 0xe3, //0x00005a4c movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x00005a50 pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00005a54 pmovmskb %xmm4, %ecx + 0x48, 0xc1, 0xe1, 0x10, //0x00005a58 shlq $16, %rcx + 0x48, 0x09, 0xf9, //0x00005a5c orq %rdi, %rcx + 0x66, 0x0f, 0x74, 0xd1, //0x00005a5f pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00005a63 pmovmskb %xmm2, %ebx + 0x66, 0x0f, 0x74, 0xd9, //0x00005a67 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00005a6b pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x00005a6f shlq $16, %rdi + 0x48, 0x09, 0xdf, //0x00005a73 orq %rbx, %rdi + 0x48, 0x89, 0xfb, //0x00005a76 movq %rdi, %rbx + 0x4c, 0x09, 0xe3, //0x00005a79 orq %r12, %rbx + 0x0f, 0x84, 0x8e, 0xff, 0xff, 0xff, //0x00005a7c je LBB27_52 + 0x44, 0x89, 0xe3, //0x00005a82 movl %r12d, %ebx + 0x44, 0x31, 0xd3, //0x00005a85 xorl %r10d, %ebx + 0x21, 0xdf, //0x00005a88 andl %ebx, %edi + 0x8d, 0x1c, 0x3f, //0x00005a8a leal (%rdi,%rdi), %ebx + 0x44, 0x09, 0xe3, //0x00005a8d orl %r12d, %ebx + 0x41, 0x8d, 0x92, 0xab, 0xaa, 0xaa, 0xaa, //0x00005a90 leal $-1431655765(%r10), %edx + 0x31, 0xda, //0x00005a97 xorl %ebx, %edx + 0x21, 0xfa, //0x00005a99 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00005a9b andl $-1431655766, %edx + 0x45, 0x31, 0xe4, //0x00005aa1 xorl %r12d, %r12d + 0x01, 0xfa, //0x00005aa4 addl %edi, %edx + 0x41, 0x0f, 0x92, 0xc4, //0x00005aa6 setb %r12b + 0x01, 0xd2, //0x00005aaa addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00005aac xorl $1431655765, %edx + 0x21, 0xda, //0x00005ab2 andl %ebx, %edx + 0x44, 0x31, 0xd2, //0x00005ab4 xorl %r10d, %edx + 0x21, 0xd1, //0x00005ab7 andl %edx, %ecx + 0x85, 0xc9, //0x00005ab9 testl %ecx, %ecx + 0x0f, 0x84, 0x5a, 0xff, 0xff, 0xff, //0x00005abb je LBB27_53 + //0x00005ac1 LBB27_110 + 0x48, 0x0f, 0xbc, 0xc1, //0x00005ac1 bsfq %rcx, %rax + 0x49, 0x01, 0xc3, //0x00005ac5 addq %rax, %r11 + 0x4d, 0x01, 0xfb, //0x00005ac8 addq %r15, %r11 + 0x4d, 0x29, 0xc3, //0x00005acb subq %r8, %r11 + 0x49, 0x83, 0xc3, 0x02, //0x00005ace addq $2, %r11 + 0x4c, 0x89, 0x1e, //0x00005ad2 movq %r11, (%rsi) + 0xe9, 0xb5, 0xfe, 0xff, 0xff, //0x00005ad5 jmp LBB27_44 + //0x00005ada LBB27_57 + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00005ada movabsq $6148914691236517205, %r13 + 0x48, 0x8b, 0x4f, 0x08, //0x00005ae4 movq $8(%rdi), %rcx + 0x48, 0x29, 0xd9, //0x00005ae8 subq %rbx, %rcx + 0x49, 0x01, 0xd8, //0x00005aeb addq %rbx, %r8 + 0x45, 0x31, 0xff, //0x00005aee xorl %r15d, %r15d + 0x66, 0x44, 0x0f, 0x6f, 0x15, 0xb6, 0xfb, 0xff, 0xff, //0x00005af1 movdqa $-1098(%rip), %xmm10 /* LCPI27_3+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x0d, 0xbe, 0xfb, 0xff, 0xff, //0x00005afa movdqa $-1090(%rip), %xmm1 /* LCPI27_4+0(%rip) */ + 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x00005b02 pcmpeqd %xmm9, %xmm9 + 0x66, 0x0f, 0x6f, 0x1d, 0xd1, 0xfb, 0xff, 0xff, //0x00005b07 movdqa $-1071(%rip), %xmm3 /* LCPI27_6+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x25, 0xd9, 0xfb, 0xff, 0xff, //0x00005b0f movdqa $-1063(%rip), %xmm4 /* LCPI27_7+0(%rip) */ + 0x45, 0x0f, 0x57, 0xc0, //0x00005b17 xorps %xmm8, %xmm8 + 0x45, 0x31, 0xd2, //0x00005b1b xorl %r10d, %r10d + 0x31, 0xd2, //0x00005b1e xorl %edx, %edx + 0x48, 0x89, 0x55, 0xc0, //0x00005b20 movq %rdx, $-64(%rbp) + 0x45, 0x31, 0xdb, //0x00005b24 xorl %r11d, %r11d + 0xe9, 0x60, 0x00, 0x00, 0x00, //0x00005b27 jmp LBB27_59 + //0x00005b2c LBB27_58 + 0x49, 0xc1, 0xf9, 0x3f, //0x00005b2c sarq $63, %r9 + 0x4c, 0x89, 0xf9, //0x00005b30 movq %r15, %rcx + 0x48, 0xd1, 0xe9, //0x00005b33 shrq %rcx + 0x4c, 0x21, 0xe9, //0x00005b36 andq %r13, %rcx + 0x49, 0x29, 0xcf, //0x00005b39 subq %rcx, %r15 + 0x4c, 0x89, 0xf9, //0x00005b3c movq %r15, %rcx + 0x4c, 0x21, 0xd1, //0x00005b3f andq %r10, %rcx + 0x49, 0xc1, 0xef, 0x02, //0x00005b42 shrq $2, %r15 + 0x4d, 0x21, 0xd7, //0x00005b46 andq %r10, %r15 + 0x49, 0x01, 0xcf, //0x00005b49 addq %rcx, %r15 + 0x4c, 0x89, 0xf9, //0x00005b4c movq %r15, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x00005b4f shrq $4, %rcx + 0x4c, 0x01, 0xf9, //0x00005b53 addq %r15, %rcx + 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00005b56 movabsq $1085102592571150095, %rdx + 0x48, 0x21, 0xd1, //0x00005b60 andq %rdx, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00005b63 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x00005b6d imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x00005b71 shrq $56, %rcx + 0x48, 0x01, 0x4d, 0xc0, //0x00005b75 addq %rcx, $-64(%rbp) + 0x49, 0x83, 0xc0, 0x40, //0x00005b79 addq $64, %r8 + 0x48, 0x8b, 0x4d, 0xd0, //0x00005b7d movq $-48(%rbp), %rcx + 0x48, 0x83, 0xc1, 0xc0, //0x00005b81 addq $-64, %rcx + 0x4d, 0x89, 0xcf, //0x00005b85 movq %r9, %r15 + 0x4c, 0x8b, 0x55, 0xc8, //0x00005b88 movq $-56(%rbp), %r10 + //0x00005b8c LBB27_59 + 0x48, 0x83, 0xf9, 0x40, //0x00005b8c cmpq $64, %rcx + 0x48, 0x89, 0x4d, 0xd0, //0x00005b90 movq %rcx, $-48(%rbp) + 0x0f, 0x8c, 0x34, 0x02, 0x00, 0x00, //0x00005b94 jl LBB27_66 + //0x00005b9a LBB27_60 + 0xf3, 0x41, 0x0f, 0x6f, 0x00, //0x00005b9a movdqu (%r8), %xmm0 + 0xf3, 0x41, 0x0f, 0x6f, 0x68, 0x10, //0x00005b9f movdqu $16(%r8), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x78, 0x20, //0x00005ba5 movdqu $32(%r8), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x70, 0x30, //0x00005bab movdqu $48(%r8), %xmm6 + 0x66, 0x0f, 0x6f, 0xd0, //0x00005bb1 movdqa %xmm0, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00005bb5 pcmpeqb %xmm10, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xca, //0x00005bba pmovmskb %xmm2, %r9d + 0x66, 0x0f, 0x6f, 0xd5, //0x00005bbf movdqa %xmm5, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00005bc3 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x00005bc8 pmovmskb %xmm2, %ecx + 0x66, 0x0f, 0x6f, 0xd7, //0x00005bcc movdqa %xmm7, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00005bd0 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00005bd5 pmovmskb %xmm2, %ebx + 0x66, 0x0f, 0x6f, 0xd6, //0x00005bd9 movdqa %xmm6, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00005bdd pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00005be2 pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x30, //0x00005be6 shlq $48, %rdx + 0x48, 0xc1, 0xe3, 0x20, //0x00005bea shlq $32, %rbx + 0x48, 0xc1, 0xe1, 0x10, //0x00005bee shlq $16, %rcx + 0x49, 0x09, 0xc9, //0x00005bf2 orq %rcx, %r9 + 0x49, 0x09, 0xd9, //0x00005bf5 orq %rbx, %r9 + 0x49, 0x09, 0xd1, //0x00005bf8 orq %rdx, %r9 + 0x66, 0x0f, 0x6f, 0xd0, //0x00005bfb movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00005bff pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x00005c03 pmovmskb %xmm2, %ecx + 0x66, 0x0f, 0x6f, 0xd5, //0x00005c07 movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00005c0b pcmpeqb %xmm1, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x00005c0f pmovmskb %xmm2, %r12d + 0x66, 0x0f, 0x6f, 0xd7, //0x00005c14 movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00005c18 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00005c1c pmovmskb %xmm2, %ebx + 0x66, 0x0f, 0x6f, 0xd6, //0x00005c20 movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00005c24 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00005c28 pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x30, //0x00005c2c shlq $48, %rdx + 0x48, 0xc1, 0xe3, 0x20, //0x00005c30 shlq $32, %rbx + 0x49, 0xc1, 0xe4, 0x10, //0x00005c34 shlq $16, %r12 + 0x4c, 0x09, 0xe1, //0x00005c38 orq %r12, %rcx + 0x48, 0x09, 0xd9, //0x00005c3b orq %rbx, %rcx + 0x48, 0x09, 0xd1, //0x00005c3e orq %rdx, %rcx + 0x48, 0x89, 0xca, //0x00005c41 movq %rcx, %rdx + 0x4c, 0x09, 0xd2, //0x00005c44 orq %r10, %rdx + 0x0f, 0x84, 0x43, 0x00, 0x00, 0x00, //0x00005c47 je LBB27_62 + 0x4c, 0x89, 0xd2, //0x00005c4d movq %r10, %rdx + 0x48, 0xf7, 0xd2, //0x00005c50 notq %rdx + 0x48, 0x21, 0xca, //0x00005c53 andq %rcx, %rdx + 0x4c, 0x8d, 0x24, 0x12, //0x00005c56 leaq (%rdx,%rdx), %r12 + 0x4d, 0x09, 0xd4, //0x00005c5a orq %r10, %r12 + 0x4d, 0x89, 0xe2, //0x00005c5d movq %r12, %r10 + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00005c60 movabsq $-6148914691236517206, %rbx + 0x49, 0x31, 0xda, //0x00005c6a xorq %rbx, %r10 + 0x48, 0x21, 0xd9, //0x00005c6d andq %rbx, %rcx + 0x4c, 0x21, 0xd1, //0x00005c70 andq %r10, %rcx + 0x31, 0xdb, //0x00005c73 xorl %ebx, %ebx + 0x48, 0x01, 0xd1, //0x00005c75 addq %rdx, %rcx + 0x0f, 0x92, 0xc3, //0x00005c78 setb %bl + 0x48, 0x89, 0x5d, 0xc8, //0x00005c7b movq %rbx, $-56(%rbp) + 0x48, 0x01, 0xc9, //0x00005c7f addq %rcx, %rcx + 0x4c, 0x31, 0xe9, //0x00005c82 xorq %r13, %rcx + 0x4c, 0x21, 0xe1, //0x00005c85 andq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00005c88 notq %rcx + 0xe9, 0x0d, 0x00, 0x00, 0x00, //0x00005c8b jmp LBB27_63 + //0x00005c90 LBB27_62 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00005c90 movq $-1, %rcx + 0x31, 0xd2, //0x00005c97 xorl %edx, %edx + 0x48, 0x89, 0x55, 0xc8, //0x00005c99 movq %rdx, $-56(%rbp) + //0x00005c9d LBB27_63 + 0x4c, 0x21, 0xc9, //0x00005c9d andq %r9, %rcx + 0x66, 0x48, 0x0f, 0x6e, 0xd1, //0x00005ca0 movq %rcx, %xmm2 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x00005ca5 pclmulqdq $0, %xmm9, %xmm2 + 0x66, 0x49, 0x0f, 0x7e, 0xd1, //0x00005cac movq %xmm2, %r9 + 0x4d, 0x31, 0xf9, //0x00005cb1 xorq %r15, %r9 + 0x66, 0x0f, 0x6f, 0xd0, //0x00005cb4 movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00005cb8 pcmpeqb %xmm3, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xfa, //0x00005cbc pmovmskb %xmm2, %r15d + 0x66, 0x0f, 0x6f, 0xd5, //0x00005cc1 movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00005cc5 pcmpeqb %xmm3, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x00005cc9 pmovmskb %xmm2, %r12d + 0x66, 0x0f, 0x6f, 0xd7, //0x00005cce movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00005cd2 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00005cd6 pmovmskb %xmm2, %ebx + 0x66, 0x0f, 0x6f, 0xd6, //0x00005cda movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00005cde pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x00005ce2 pmovmskb %xmm2, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x00005ce6 shlq $48, %rcx + 0x48, 0xc1, 0xe3, 0x20, //0x00005cea shlq $32, %rbx + 0x49, 0xc1, 0xe4, 0x10, //0x00005cee shlq $16, %r12 + 0x4d, 0x09, 0xe7, //0x00005cf2 orq %r12, %r15 + 0x49, 0x09, 0xdf, //0x00005cf5 orq %rbx, %r15 + 0x49, 0x09, 0xcf, //0x00005cf8 orq %rcx, %r15 + 0x4c, 0x89, 0xc9, //0x00005cfb movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x00005cfe notq %rcx + 0x49, 0x21, 0xcf, //0x00005d01 andq %rcx, %r15 + 0x66, 0x0f, 0x74, 0xc4, //0x00005d04 pcmpeqb %xmm4, %xmm0 + 0x66, 0x44, 0x0f, 0xd7, 0xe0, //0x00005d08 pmovmskb %xmm0, %r12d + 0x66, 0x0f, 0x74, 0xec, //0x00005d0d pcmpeqb %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x00005d11 pmovmskb %xmm5, %ebx + 0x66, 0x0f, 0x74, 0xfc, //0x00005d15 pcmpeqb %xmm4, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00005d19 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x74, 0xf4, //0x00005d1e pcmpeqb %xmm4, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xee, //0x00005d22 pmovmskb %xmm6, %r13d + 0x49, 0xc1, 0xe5, 0x30, //0x00005d27 shlq $48, %r13 + 0x49, 0xc1, 0xe2, 0x20, //0x00005d2b shlq $32, %r10 + 0x48, 0xc1, 0xe3, 0x10, //0x00005d2f shlq $16, %rbx + 0x49, 0x09, 0xdc, //0x00005d33 orq %rbx, %r12 + 0x4d, 0x09, 0xd4, //0x00005d36 orq %r10, %r12 + 0x4d, 0x09, 0xec, //0x00005d39 orq %r13, %r12 + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00005d3c movabsq $6148914691236517205, %r13 + 0x49, 0xba, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00005d46 movabsq $3689348814741910323, %r10 + 0x49, 0x21, 0xcc, //0x00005d50 andq %rcx, %r12 + 0x0f, 0x84, 0xd3, 0xfd, 0xff, 0xff, //0x00005d53 je LBB27_58 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00005d59 .p2align 4, 0x90 + //0x00005d60 LBB27_64 + 0x49, 0x8d, 0x54, 0x24, 0xff, //0x00005d60 leaq $-1(%r12), %rdx + 0x48, 0x89, 0xd3, //0x00005d65 movq %rdx, %rbx + 0x4c, 0x21, 0xfb, //0x00005d68 andq %r15, %rbx + 0x48, 0x89, 0xd9, //0x00005d6b movq %rbx, %rcx + 0x48, 0xd1, 0xe9, //0x00005d6e shrq %rcx + 0x4c, 0x21, 0xe9, //0x00005d71 andq %r13, %rcx + 0x48, 0x29, 0xcb, //0x00005d74 subq %rcx, %rbx + 0x48, 0x89, 0xd9, //0x00005d77 movq %rbx, %rcx + 0x4c, 0x21, 0xd1, //0x00005d7a andq %r10, %rcx + 0x48, 0xc1, 0xeb, 0x02, //0x00005d7d shrq $2, %rbx + 0x4c, 0x21, 0xd3, //0x00005d81 andq %r10, %rbx + 0x48, 0x01, 0xcb, //0x00005d84 addq %rcx, %rbx + 0x48, 0x89, 0xd9, //0x00005d87 movq %rbx, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x00005d8a shrq $4, %rcx + 0x48, 0x01, 0xd9, //0x00005d8e addq %rbx, %rcx + 0x48, 0xbb, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00005d91 movabsq $1085102592571150095, %rbx + 0x48, 0x21, 0xd9, //0x00005d9b andq %rbx, %rcx + 0x48, 0xbb, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00005d9e movabsq $72340172838076673, %rbx + 0x48, 0x0f, 0xaf, 0xcb, //0x00005da8 imulq %rbx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x00005dac shrq $56, %rcx + 0x48, 0x03, 0x4d, 0xc0, //0x00005db0 addq $-64(%rbp), %rcx + 0x4c, 0x39, 0xd9, //0x00005db4 cmpq %r11, %rcx + 0x0f, 0x86, 0xa3, 0x05, 0x00, 0x00, //0x00005db7 jbe LBB27_109 + 0x49, 0xff, 0xc3, //0x00005dbd incq %r11 + 0x49, 0x21, 0xd4, //0x00005dc0 andq %rdx, %r12 + 0x0f, 0x85, 0x97, 0xff, 0xff, 0xff, //0x00005dc3 jne LBB27_64 + 0xe9, 0x5e, 0xfd, 0xff, 0xff, //0x00005dc9 jmp LBB27_58 + //0x00005dce LBB27_66 + 0x48, 0x85, 0xc9, //0x00005dce testq %rcx, %rcx + 0x0f, 0x8e, 0x46, 0x06, 0x00, 0x00, //0x00005dd1 jle LBB27_118 + 0x4c, 0x89, 0xd3, //0x00005dd7 movq %r10, %rbx + 0x44, 0x0f, 0x11, 0x45, 0xb0, //0x00005dda movups %xmm8, $-80(%rbp) + 0x44, 0x0f, 0x11, 0x45, 0xa0, //0x00005ddf movups %xmm8, $-96(%rbp) + 0x44, 0x0f, 0x11, 0x45, 0x90, //0x00005de4 movups %xmm8, $-112(%rbp) + 0x44, 0x0f, 0x11, 0x45, 0x80, //0x00005de9 movups %xmm8, $-128(%rbp) + 0x44, 0x89, 0xc1, //0x00005dee movl %r8d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00005df1 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00005df7 cmpl $4033, %ecx + 0x0f, 0x82, 0x31, 0x00, 0x00, 0x00, //0x00005dfd jb LBB27_70 + 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x00005e03 cmpq $32, $-48(%rbp) + 0x0f, 0x82, 0x38, 0x00, 0x00, 0x00, //0x00005e08 jb LBB27_71 + 0x41, 0x0f, 0x10, 0x00, //0x00005e0e movups (%r8), %xmm0 + 0x0f, 0x11, 0x45, 0x80, //0x00005e12 movups %xmm0, $-128(%rbp) + 0x41, 0x0f, 0x10, 0x40, 0x10, //0x00005e16 movups $16(%r8), %xmm0 + 0x0f, 0x11, 0x45, 0x90, //0x00005e1b movups %xmm0, $-112(%rbp) + 0x49, 0x83, 0xc0, 0x20, //0x00005e1f addq $32, %r8 + 0x48, 0x8b, 0x4d, 0xd0, //0x00005e23 movq $-48(%rbp), %rcx + 0x48, 0x8d, 0x51, 0xe0, //0x00005e27 leaq $-32(%rcx), %rdx + 0x4c, 0x8d, 0x4d, 0xa0, //0x00005e2b leaq $-96(%rbp), %r9 + 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x00005e2f jmp LBB27_72 + //0x00005e34 LBB27_70 + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00005e34 movabsq $6148914691236517205, %r13 + 0x49, 0x89, 0xda, //0x00005e3e movq %rbx, %r10 + 0xe9, 0x54, 0xfd, 0xff, 0xff, //0x00005e41 jmp LBB27_60 + //0x00005e46 LBB27_71 + 0x4c, 0x8d, 0x4d, 0x80, //0x00005e46 leaq $-128(%rbp), %r9 + 0x48, 0x8b, 0x55, 0xd0, //0x00005e4a movq $-48(%rbp), %rdx + //0x00005e4e LBB27_72 + 0x48, 0x83, 0xfa, 0x10, //0x00005e4e cmpq $16, %rdx + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00005e52 jb LBB27_73 + 0x41, 0x0f, 0x10, 0x00, //0x00005e58 movups (%r8), %xmm0 + 0x41, 0x0f, 0x11, 0x01, //0x00005e5c movups %xmm0, (%r9) + 0x49, 0x83, 0xc0, 0x10, //0x00005e60 addq $16, %r8 + 0x49, 0x83, 0xc1, 0x10, //0x00005e64 addq $16, %r9 + 0x48, 0x83, 0xc2, 0xf0, //0x00005e68 addq $-16, %rdx + 0x48, 0x83, 0xfa, 0x08, //0x00005e6c cmpq $8, %rdx + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00005e70 jae LBB27_80 + //0x00005e76 LBB27_74 + 0x48, 0x83, 0xfa, 0x04, //0x00005e76 cmpq $4, %rdx + 0x0f, 0x8c, 0x47, 0x00, 0x00, 0x00, //0x00005e7a jl LBB27_75 + //0x00005e80 LBB27_81 + 0x41, 0x8b, 0x08, //0x00005e80 movl (%r8), %ecx + 0x41, 0x89, 0x09, //0x00005e83 movl %ecx, (%r9) + 0x49, 0x83, 0xc0, 0x04, //0x00005e86 addq $4, %r8 + 0x49, 0x83, 0xc1, 0x04, //0x00005e8a addq $4, %r9 + 0x48, 0x83, 0xc2, 0xfc, //0x00005e8e addq $-4, %rdx + 0x48, 0x83, 0xfa, 0x02, //0x00005e92 cmpq $2, %rdx + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00005e96 jae LBB27_76 + 0xe9, 0x44, 0x00, 0x00, 0x00, //0x00005e9c jmp LBB27_77 + //0x00005ea1 LBB27_73 + 0x48, 0x83, 0xfa, 0x08, //0x00005ea1 cmpq $8, %rdx + 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x00005ea5 jb LBB27_74 + //0x00005eab LBB27_80 + 0x49, 0x8b, 0x08, //0x00005eab movq (%r8), %rcx + 0x49, 0x89, 0x09, //0x00005eae movq %rcx, (%r9) + 0x49, 0x83, 0xc0, 0x08, //0x00005eb1 addq $8, %r8 + 0x49, 0x83, 0xc1, 0x08, //0x00005eb5 addq $8, %r9 + 0x48, 0x83, 0xc2, 0xf8, //0x00005eb9 addq $-8, %rdx + 0x48, 0x83, 0xfa, 0x04, //0x00005ebd cmpq $4, %rdx + 0x0f, 0x8d, 0xb9, 0xff, 0xff, 0xff, //0x00005ec1 jge LBB27_81 + //0x00005ec7 LBB27_75 + 0x48, 0x83, 0xfa, 0x02, //0x00005ec7 cmpq $2, %rdx + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00005ecb jb LBB27_77 + //0x00005ed1 LBB27_76 + 0x41, 0x0f, 0xb7, 0x08, //0x00005ed1 movzwl (%r8), %ecx + 0x66, 0x41, 0x89, 0x09, //0x00005ed5 movw %cx, (%r9) + 0x49, 0x83, 0xc0, 0x02, //0x00005ed9 addq $2, %r8 + 0x49, 0x83, 0xc1, 0x02, //0x00005edd addq $2, %r9 + 0x48, 0x83, 0xc2, 0xfe, //0x00005ee1 addq $-2, %rdx + //0x00005ee5 LBB27_77 + 0x4c, 0x89, 0xc1, //0x00005ee5 movq %r8, %rcx + 0x4c, 0x8d, 0x45, 0x80, //0x00005ee8 leaq $-128(%rbp), %r8 + 0x48, 0x85, 0xd2, //0x00005eec testq %rdx, %rdx + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00005eef movabsq $6148914691236517205, %r13 + 0x49, 0x89, 0xda, //0x00005ef9 movq %rbx, %r10 + 0x0f, 0x84, 0x98, 0xfc, 0xff, 0xff, //0x00005efc je LBB27_60 + 0x8a, 0x09, //0x00005f02 movb (%rcx), %cl + 0x41, 0x88, 0x09, //0x00005f04 movb %cl, (%r9) + 0x4c, 0x8d, 0x45, 0x80, //0x00005f07 leaq $-128(%rbp), %r8 + 0xe9, 0x8a, 0xfc, 0xff, 0xff, //0x00005f0b jmp LBB27_60 + //0x00005f10 LBB27_82 + 0x49, 0x8d, 0x4e, 0x05, //0x00005f10 leaq $5(%r14), %rcx + 0x48, 0x3b, 0x4f, 0x08, //0x00005f14 cmpq $8(%rdi), %rcx + 0x0f, 0x87, 0x74, 0xfa, 0xff, 0xff, //0x00005f18 ja LBB27_45 + //0x00005f1e LBB27_83 + 0x48, 0x89, 0x0e, //0x00005f1e movq %rcx, (%rsi) + 0xe9, 0x69, 0xfa, 0xff, 0xff, //0x00005f21 jmp LBB27_44 + //0x00005f26 LBB27_84 + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00005f26 movabsq $6148914691236517205, %r13 + 0x48, 0x8b, 0x4f, 0x08, //0x00005f30 movq $8(%rdi), %rcx + 0x48, 0x29, 0xd9, //0x00005f34 subq %rbx, %rcx + 0x49, 0x01, 0xd8, //0x00005f37 addq %rbx, %r8 + 0x45, 0x31, 0xff, //0x00005f3a xorl %r15d, %r15d + 0x66, 0x44, 0x0f, 0x6f, 0x15, 0x6a, 0xf7, 0xff, 0xff, //0x00005f3d movdqa $-2198(%rip), %xmm10 /* LCPI27_3+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x0d, 0x72, 0xf7, 0xff, 0xff, //0x00005f46 movdqa $-2190(%rip), %xmm1 /* LCPI27_4+0(%rip) */ + 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x00005f4e pcmpeqd %xmm9, %xmm9 + 0x66, 0x0f, 0x6f, 0x1d, 0x75, 0xf7, 0xff, 0xff, //0x00005f53 movdqa $-2187(%rip), %xmm3 /* LCPI27_5+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x25, 0x3d, 0xf7, 0xff, 0xff, //0x00005f5b movdqa $-2243(%rip), %xmm4 /* LCPI27_2+0(%rip) */ + 0x45, 0x0f, 0x57, 0xc0, //0x00005f63 xorps %xmm8, %xmm8 + 0x45, 0x31, 0xd2, //0x00005f67 xorl %r10d, %r10d + 0x31, 0xd2, //0x00005f6a xorl %edx, %edx + 0x48, 0x89, 0x55, 0xc0, //0x00005f6c movq %rdx, $-64(%rbp) + 0x45, 0x31, 0xdb, //0x00005f70 xorl %r11d, %r11d + 0xe9, 0x60, 0x00, 0x00, 0x00, //0x00005f73 jmp LBB27_86 + //0x00005f78 LBB27_85 + 0x49, 0xc1, 0xf9, 0x3f, //0x00005f78 sarq $63, %r9 + 0x4c, 0x89, 0xf9, //0x00005f7c movq %r15, %rcx + 0x48, 0xd1, 0xe9, //0x00005f7f shrq %rcx + 0x4c, 0x21, 0xe9, //0x00005f82 andq %r13, %rcx + 0x49, 0x29, 0xcf, //0x00005f85 subq %rcx, %r15 + 0x4c, 0x89, 0xf9, //0x00005f88 movq %r15, %rcx + 0x4c, 0x21, 0xd1, //0x00005f8b andq %r10, %rcx + 0x49, 0xc1, 0xef, 0x02, //0x00005f8e shrq $2, %r15 + 0x4d, 0x21, 0xd7, //0x00005f92 andq %r10, %r15 + 0x49, 0x01, 0xcf, //0x00005f95 addq %rcx, %r15 + 0x4c, 0x89, 0xf9, //0x00005f98 movq %r15, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x00005f9b shrq $4, %rcx + 0x4c, 0x01, 0xf9, //0x00005f9f addq %r15, %rcx + 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00005fa2 movabsq $1085102592571150095, %rdx + 0x48, 0x21, 0xd1, //0x00005fac andq %rdx, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00005faf movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x00005fb9 imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x00005fbd shrq $56, %rcx + 0x48, 0x01, 0x4d, 0xc0, //0x00005fc1 addq %rcx, $-64(%rbp) + 0x49, 0x83, 0xc0, 0x40, //0x00005fc5 addq $64, %r8 + 0x48, 0x8b, 0x4d, 0xd0, //0x00005fc9 movq $-48(%rbp), %rcx + 0x48, 0x83, 0xc1, 0xc0, //0x00005fcd addq $-64, %rcx + 0x4d, 0x89, 0xcf, //0x00005fd1 movq %r9, %r15 + 0x4c, 0x8b, 0x55, 0xc8, //0x00005fd4 movq $-56(%rbp), %r10 + //0x00005fd8 LBB27_86 + 0x48, 0x83, 0xf9, 0x40, //0x00005fd8 cmpq $64, %rcx + 0x48, 0x89, 0x4d, 0xd0, //0x00005fdc movq %rcx, $-48(%rbp) + 0x0f, 0x8c, 0x38, 0x02, 0x00, 0x00, //0x00005fe0 jl LBB27_93 + //0x00005fe6 LBB27_87 + 0xf3, 0x41, 0x0f, 0x6f, 0x00, //0x00005fe6 movdqu (%r8), %xmm0 + 0xf3, 0x41, 0x0f, 0x6f, 0x68, 0x10, //0x00005feb movdqu $16(%r8), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x78, 0x20, //0x00005ff1 movdqu $32(%r8), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x70, 0x30, //0x00005ff7 movdqu $48(%r8), %xmm6 + 0x66, 0x0f, 0x6f, 0xd0, //0x00005ffd movdqa %xmm0, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00006001 pcmpeqb %xmm10, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xca, //0x00006006 pmovmskb %xmm2, %r9d + 0x66, 0x0f, 0x6f, 0xd5, //0x0000600b movdqa %xmm5, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x0000600f pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x00006014 pmovmskb %xmm2, %ecx + 0x66, 0x0f, 0x6f, 0xd7, //0x00006018 movdqa %xmm7, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x0000601c pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00006021 pmovmskb %xmm2, %ebx + 0x66, 0x0f, 0x6f, 0xd6, //0x00006025 movdqa %xmm6, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00006029 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x0000602e pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x30, //0x00006032 shlq $48, %rdx + 0x48, 0xc1, 0xe3, 0x20, //0x00006036 shlq $32, %rbx + 0x48, 0xc1, 0xe1, 0x10, //0x0000603a shlq $16, %rcx + 0x49, 0x09, 0xc9, //0x0000603e orq %rcx, %r9 + 0x49, 0x09, 0xd9, //0x00006041 orq %rbx, %r9 + 0x49, 0x09, 0xd1, //0x00006044 orq %rdx, %r9 + 0x66, 0x0f, 0x6f, 0xd0, //0x00006047 movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x0000604b pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x0000604f pmovmskb %xmm2, %ecx + 0x66, 0x0f, 0x6f, 0xd5, //0x00006053 movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00006057 pcmpeqb %xmm1, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x0000605b pmovmskb %xmm2, %r12d + 0x66, 0x0f, 0x6f, 0xd7, //0x00006060 movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00006064 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00006068 pmovmskb %xmm2, %ebx + 0x66, 0x0f, 0x6f, 0xd6, //0x0000606c movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00006070 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00006074 pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x30, //0x00006078 shlq $48, %rdx + 0x48, 0xc1, 0xe3, 0x20, //0x0000607c shlq $32, %rbx + 0x49, 0xc1, 0xe4, 0x10, //0x00006080 shlq $16, %r12 + 0x4c, 0x09, 0xe1, //0x00006084 orq %r12, %rcx + 0x48, 0x09, 0xd9, //0x00006087 orq %rbx, %rcx + 0x48, 0x09, 0xd1, //0x0000608a orq %rdx, %rcx + 0x48, 0x89, 0xca, //0x0000608d movq %rcx, %rdx + 0x4c, 0x09, 0xd2, //0x00006090 orq %r10, %rdx + 0x0f, 0x84, 0x43, 0x00, 0x00, 0x00, //0x00006093 je LBB27_89 + 0x4c, 0x89, 0xd2, //0x00006099 movq %r10, %rdx + 0x48, 0xf7, 0xd2, //0x0000609c notq %rdx + 0x48, 0x21, 0xca, //0x0000609f andq %rcx, %rdx + 0x4c, 0x8d, 0x24, 0x12, //0x000060a2 leaq (%rdx,%rdx), %r12 + 0x4d, 0x09, 0xd4, //0x000060a6 orq %r10, %r12 + 0x4d, 0x89, 0xe2, //0x000060a9 movq %r12, %r10 + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000060ac movabsq $-6148914691236517206, %rbx + 0x49, 0x31, 0xda, //0x000060b6 xorq %rbx, %r10 + 0x48, 0x21, 0xd9, //0x000060b9 andq %rbx, %rcx + 0x4c, 0x21, 0xd1, //0x000060bc andq %r10, %rcx + 0x31, 0xdb, //0x000060bf xorl %ebx, %ebx + 0x48, 0x01, 0xd1, //0x000060c1 addq %rdx, %rcx + 0x0f, 0x92, 0xc3, //0x000060c4 setb %bl + 0x48, 0x89, 0x5d, 0xc8, //0x000060c7 movq %rbx, $-56(%rbp) + 0x48, 0x01, 0xc9, //0x000060cb addq %rcx, %rcx + 0x4c, 0x31, 0xe9, //0x000060ce xorq %r13, %rcx + 0x4c, 0x21, 0xe1, //0x000060d1 andq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x000060d4 notq %rcx + 0xe9, 0x0d, 0x00, 0x00, 0x00, //0x000060d7 jmp LBB27_90 + //0x000060dc LBB27_89 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000060dc movq $-1, %rcx + 0x31, 0xd2, //0x000060e3 xorl %edx, %edx + 0x48, 0x89, 0x55, 0xc8, //0x000060e5 movq %rdx, $-56(%rbp) + //0x000060e9 LBB27_90 + 0x4c, 0x21, 0xc9, //0x000060e9 andq %r9, %rcx + 0x66, 0x48, 0x0f, 0x6e, 0xd1, //0x000060ec movq %rcx, %xmm2 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x000060f1 pclmulqdq $0, %xmm9, %xmm2 + 0x66, 0x49, 0x0f, 0x7e, 0xd1, //0x000060f8 movq %xmm2, %r9 + 0x4d, 0x31, 0xf9, //0x000060fd xorq %r15, %r9 + 0x66, 0x0f, 0x6f, 0xd0, //0x00006100 movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00006104 pcmpeqb %xmm3, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xfa, //0x00006108 pmovmskb %xmm2, %r15d + 0x66, 0x0f, 0x6f, 0xd5, //0x0000610d movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00006111 pcmpeqb %xmm3, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x00006115 pmovmskb %xmm2, %r12d + 0x66, 0x0f, 0x6f, 0xd7, //0x0000611a movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x0000611e pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00006122 pmovmskb %xmm2, %ebx + 0x66, 0x0f, 0x6f, 0xd6, //0x00006126 movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x0000612a pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x0000612e pmovmskb %xmm2, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x00006132 shlq $48, %rcx + 0x48, 0xc1, 0xe3, 0x20, //0x00006136 shlq $32, %rbx + 0x49, 0xc1, 0xe4, 0x10, //0x0000613a shlq $16, %r12 + 0x4d, 0x09, 0xe7, //0x0000613e orq %r12, %r15 + 0x49, 0x09, 0xdf, //0x00006141 orq %rbx, %r15 + 0x49, 0x09, 0xcf, //0x00006144 orq %rcx, %r15 + 0x4c, 0x89, 0xc9, //0x00006147 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x0000614a notq %rcx + 0x49, 0x21, 0xcf, //0x0000614d andq %rcx, %r15 + 0x66, 0x0f, 0x74, 0xc4, //0x00006150 pcmpeqb %xmm4, %xmm0 + 0x66, 0x44, 0x0f, 0xd7, 0xe0, //0x00006154 pmovmskb %xmm0, %r12d + 0x66, 0x0f, 0x74, 0xec, //0x00006159 pcmpeqb %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x0000615d pmovmskb %xmm5, %ebx + 0x66, 0x0f, 0x74, 0xfc, //0x00006161 pcmpeqb %xmm4, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00006165 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x74, 0xf4, //0x0000616a pcmpeqb %xmm4, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xee, //0x0000616e pmovmskb %xmm6, %r13d + 0x49, 0xc1, 0xe5, 0x30, //0x00006173 shlq $48, %r13 + 0x49, 0xc1, 0xe2, 0x20, //0x00006177 shlq $32, %r10 + 0x48, 0xc1, 0xe3, 0x10, //0x0000617b shlq $16, %rbx + 0x49, 0x09, 0xdc, //0x0000617f orq %rbx, %r12 + 0x4d, 0x09, 0xd4, //0x00006182 orq %r10, %r12 + 0x4d, 0x09, 0xec, //0x00006185 orq %r13, %r12 + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00006188 movabsq $6148914691236517205, %r13 + 0x49, 0xba, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00006192 movabsq $3689348814741910323, %r10 + 0x49, 0x21, 0xcc, //0x0000619c andq %rcx, %r12 + 0x0f, 0x84, 0xd3, 0xfd, 0xff, 0xff, //0x0000619f je LBB27_85 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000061a5 .p2align 4, 0x90 + //0x000061b0 LBB27_91 + 0x49, 0x8d, 0x54, 0x24, 0xff, //0x000061b0 leaq $-1(%r12), %rdx + 0x48, 0x89, 0xd3, //0x000061b5 movq %rdx, %rbx + 0x4c, 0x21, 0xfb, //0x000061b8 andq %r15, %rbx + 0x48, 0x89, 0xd9, //0x000061bb movq %rbx, %rcx + 0x48, 0xd1, 0xe9, //0x000061be shrq %rcx + 0x4c, 0x21, 0xe9, //0x000061c1 andq %r13, %rcx + 0x48, 0x29, 0xcb, //0x000061c4 subq %rcx, %rbx + 0x48, 0x89, 0xd9, //0x000061c7 movq %rbx, %rcx + 0x4c, 0x21, 0xd1, //0x000061ca andq %r10, %rcx + 0x48, 0xc1, 0xeb, 0x02, //0x000061cd shrq $2, %rbx + 0x4c, 0x21, 0xd3, //0x000061d1 andq %r10, %rbx + 0x48, 0x01, 0xcb, //0x000061d4 addq %rcx, %rbx + 0x48, 0x89, 0xd9, //0x000061d7 movq %rbx, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x000061da shrq $4, %rcx + 0x48, 0x01, 0xd9, //0x000061de addq %rbx, %rcx + 0x48, 0xbb, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000061e1 movabsq $1085102592571150095, %rbx + 0x48, 0x21, 0xd9, //0x000061eb andq %rbx, %rcx + 0x48, 0xbb, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000061ee movabsq $72340172838076673, %rbx + 0x48, 0x0f, 0xaf, 0xcb, //0x000061f8 imulq %rbx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x000061fc shrq $56, %rcx + 0x48, 0x03, 0x4d, 0xc0, //0x00006200 addq $-64(%rbp), %rcx + 0x4c, 0x39, 0xd9, //0x00006204 cmpq %r11, %rcx + 0x0f, 0x86, 0x53, 0x01, 0x00, 0x00, //0x00006207 jbe LBB27_109 + 0x49, 0xff, 0xc3, //0x0000620d incq %r11 + 0x49, 0x21, 0xd4, //0x00006210 andq %rdx, %r12 + 0x0f, 0x85, 0x97, 0xff, 0xff, 0xff, //0x00006213 jne LBB27_91 + 0xe9, 0x5a, 0xfd, 0xff, 0xff, //0x00006219 jmp LBB27_85 + //0x0000621e LBB27_93 + 0x48, 0x85, 0xc9, //0x0000621e testq %rcx, %rcx + 0x0f, 0x8e, 0xf6, 0x01, 0x00, 0x00, //0x00006221 jle LBB27_118 + 0x4c, 0x89, 0xd3, //0x00006227 movq %r10, %rbx + 0x44, 0x0f, 0x11, 0x45, 0xb0, //0x0000622a movups %xmm8, $-80(%rbp) + 0x44, 0x0f, 0x11, 0x45, 0xa0, //0x0000622f movups %xmm8, $-96(%rbp) + 0x44, 0x0f, 0x11, 0x45, 0x90, //0x00006234 movups %xmm8, $-112(%rbp) + 0x44, 0x0f, 0x11, 0x45, 0x80, //0x00006239 movups %xmm8, $-128(%rbp) + 0x44, 0x89, 0xc1, //0x0000623e movl %r8d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00006241 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00006247 cmpl $4033, %ecx + 0x0f, 0x82, 0x31, 0x00, 0x00, 0x00, //0x0000624d jb LBB27_97 + 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x00006253 cmpq $32, $-48(%rbp) + 0x0f, 0x82, 0x38, 0x00, 0x00, 0x00, //0x00006258 jb LBB27_98 + 0x41, 0x0f, 0x10, 0x00, //0x0000625e movups (%r8), %xmm0 + 0x0f, 0x11, 0x45, 0x80, //0x00006262 movups %xmm0, $-128(%rbp) + 0x41, 0x0f, 0x10, 0x40, 0x10, //0x00006266 movups $16(%r8), %xmm0 + 0x0f, 0x11, 0x45, 0x90, //0x0000626b movups %xmm0, $-112(%rbp) + 0x49, 0x83, 0xc0, 0x20, //0x0000626f addq $32, %r8 + 0x48, 0x8b, 0x4d, 0xd0, //0x00006273 movq $-48(%rbp), %rcx + 0x48, 0x8d, 0x51, 0xe0, //0x00006277 leaq $-32(%rcx), %rdx + 0x4c, 0x8d, 0x4d, 0xa0, //0x0000627b leaq $-96(%rbp), %r9 + 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x0000627f jmp LBB27_99 + //0x00006284 LBB27_97 + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00006284 movabsq $6148914691236517205, %r13 + 0x49, 0x89, 0xda, //0x0000628e movq %rbx, %r10 + 0xe9, 0x50, 0xfd, 0xff, 0xff, //0x00006291 jmp LBB27_87 + //0x00006296 LBB27_98 + 0x4c, 0x8d, 0x4d, 0x80, //0x00006296 leaq $-128(%rbp), %r9 + 0x48, 0x8b, 0x55, 0xd0, //0x0000629a movq $-48(%rbp), %rdx + //0x0000629e LBB27_99 + 0x48, 0x83, 0xfa, 0x10, //0x0000629e cmpq $16, %rdx + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x000062a2 jb LBB27_100 + 0x41, 0x0f, 0x10, 0x00, //0x000062a8 movups (%r8), %xmm0 + 0x41, 0x0f, 0x11, 0x01, //0x000062ac movups %xmm0, (%r9) + 0x49, 0x83, 0xc0, 0x10, //0x000062b0 addq $16, %r8 + 0x49, 0x83, 0xc1, 0x10, //0x000062b4 addq $16, %r9 + 0x48, 0x83, 0xc2, 0xf0, //0x000062b8 addq $-16, %rdx + 0x48, 0x83, 0xfa, 0x08, //0x000062bc cmpq $8, %rdx + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x000062c0 jae LBB27_107 + //0x000062c6 LBB27_101 + 0x48, 0x83, 0xfa, 0x04, //0x000062c6 cmpq $4, %rdx + 0x0f, 0x8c, 0x47, 0x00, 0x00, 0x00, //0x000062ca jl LBB27_102 + //0x000062d0 LBB27_108 + 0x41, 0x8b, 0x08, //0x000062d0 movl (%r8), %ecx + 0x41, 0x89, 0x09, //0x000062d3 movl %ecx, (%r9) + 0x49, 0x83, 0xc0, 0x04, //0x000062d6 addq $4, %r8 + 0x49, 0x83, 0xc1, 0x04, //0x000062da addq $4, %r9 + 0x48, 0x83, 0xc2, 0xfc, //0x000062de addq $-4, %rdx + 0x48, 0x83, 0xfa, 0x02, //0x000062e2 cmpq $2, %rdx + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x000062e6 jae LBB27_103 + 0xe9, 0x44, 0x00, 0x00, 0x00, //0x000062ec jmp LBB27_104 + //0x000062f1 LBB27_100 + 0x48, 0x83, 0xfa, 0x08, //0x000062f1 cmpq $8, %rdx + 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x000062f5 jb LBB27_101 + //0x000062fb LBB27_107 + 0x49, 0x8b, 0x08, //0x000062fb movq (%r8), %rcx + 0x49, 0x89, 0x09, //0x000062fe movq %rcx, (%r9) + 0x49, 0x83, 0xc0, 0x08, //0x00006301 addq $8, %r8 + 0x49, 0x83, 0xc1, 0x08, //0x00006305 addq $8, %r9 + 0x48, 0x83, 0xc2, 0xf8, //0x00006309 addq $-8, %rdx + 0x48, 0x83, 0xfa, 0x04, //0x0000630d cmpq $4, %rdx + 0x0f, 0x8d, 0xb9, 0xff, 0xff, 0xff, //0x00006311 jge LBB27_108 + //0x00006317 LBB27_102 + 0x48, 0x83, 0xfa, 0x02, //0x00006317 cmpq $2, %rdx + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x0000631b jb LBB27_104 + //0x00006321 LBB27_103 + 0x41, 0x0f, 0xb7, 0x08, //0x00006321 movzwl (%r8), %ecx + 0x66, 0x41, 0x89, 0x09, //0x00006325 movw %cx, (%r9) + 0x49, 0x83, 0xc0, 0x02, //0x00006329 addq $2, %r8 + 0x49, 0x83, 0xc1, 0x02, //0x0000632d addq $2, %r9 + 0x48, 0x83, 0xc2, 0xfe, //0x00006331 addq $-2, %rdx + //0x00006335 LBB27_104 + 0x4c, 0x89, 0xc1, //0x00006335 movq %r8, %rcx + 0x4c, 0x8d, 0x45, 0x80, //0x00006338 leaq $-128(%rbp), %r8 + 0x48, 0x85, 0xd2, //0x0000633c testq %rdx, %rdx + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000633f movabsq $6148914691236517205, %r13 + 0x49, 0x89, 0xda, //0x00006349 movq %rbx, %r10 + 0x0f, 0x84, 0x94, 0xfc, 0xff, 0xff, //0x0000634c je LBB27_87 + 0x8a, 0x09, //0x00006352 movb (%rcx), %cl + 0x41, 0x88, 0x09, //0x00006354 movb %cl, (%r9) + 0x4c, 0x8d, 0x45, 0x80, //0x00006357 leaq $-128(%rbp), %r8 + 0xe9, 0x86, 0xfc, 0xff, 0xff, //0x0000635b jmp LBB27_87 + //0x00006360 LBB27_109 + 0x48, 0x8b, 0x47, 0x08, //0x00006360 movq $8(%rdi), %rax + 0x49, 0x0f, 0xbc, 0xcc, //0x00006364 bsfq %r12, %rcx + 0x48, 0x2b, 0x4d, 0xd0, //0x00006368 subq $-48(%rbp), %rcx + 0x48, 0x8d, 0x44, 0x01, 0x01, //0x0000636c leaq $1(%rcx,%rax), %rax + 0x48, 0x89, 0x06, //0x00006371 movq %rax, (%rsi) + 0x48, 0x8b, 0x4f, 0x08, //0x00006374 movq $8(%rdi), %rcx + 0x48, 0x39, 0xc8, //0x00006378 cmpq %rcx, %rax + 0x48, 0x0f, 0x47, 0xc1, //0x0000637b cmovaq %rcx, %rax + 0x48, 0x89, 0x06, //0x0000637f movq %rax, (%rsi) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00006382 movq $-1, %rax + 0x4c, 0x0f, 0x47, 0xf0, //0x00006389 cmovaq %rax, %r14 + 0xe9, 0xfd, 0xf5, 0xff, 0xff, //0x0000638d jmp LBB27_44 + //0x00006392 LBB27_54 + 0x4d, 0x85, 0xe4, //0x00006392 testq %r12, %r12 + 0x0f, 0x85, 0x8e, 0x00, 0x00, 0x00, //0x00006395 jne LBB27_119 + 0x4b, 0x8d, 0x5c, 0x1f, 0x01, //0x0000639b leaq $1(%r15,%r11), %rbx + 0x49, 0xf7, 0xd7, //0x000063a0 notq %r15 + 0x4d, 0x01, 0xcf, //0x000063a3 addq %r9, %r15 + //0x000063a6 LBB27_56 + 0x4d, 0x85, 0xff, //0x000063a6 testq %r15, %r15 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x000063a9 jg LBB27_113 + 0xe9, 0xde, 0xf5, 0xff, 0xff, //0x000063af jmp LBB27_45 + //0x000063b4 LBB27_111 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000063b4 movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000063bb movl $2, %eax + 0x48, 0x01, 0xc3, //0x000063c0 addq %rax, %rbx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000063c3 movq $-1, %rax + 0x49, 0x01, 0xcf, //0x000063ca addq %rcx, %r15 + 0x0f, 0x8e, 0xbf, 0xf5, 0xff, 0xff, //0x000063cd jle LBB27_45 + //0x000063d3 LBB27_113 + 0x0f, 0xb6, 0x03, //0x000063d3 movzbl (%rbx), %eax + 0x3c, 0x5c, //0x000063d6 cmpb $92, %al + 0x0f, 0x84, 0xd6, 0xff, 0xff, 0xff, //0x000063d8 je LBB27_111 + 0x3c, 0x22, //0x000063de cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000063e0 je LBB27_116 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000063e6 movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000063ed movl $1, %eax + 0x48, 0x01, 0xc3, //0x000063f2 addq %rax, %rbx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000063f5 movq $-1, %rax + 0x49, 0x01, 0xcf, //0x000063fc addq %rcx, %r15 + 0x0f, 0x8f, 0xce, 0xff, 0xff, 0xff, //0x000063ff jg LBB27_113 + 0xe9, 0x88, 0xf5, 0xff, 0xff, //0x00006405 jmp LBB27_45 + //0x0000640a LBB27_116 + 0x4c, 0x29, 0xc3, //0x0000640a subq %r8, %rbx + 0x48, 0xff, 0xc3, //0x0000640d incq %rbx + 0xe9, 0x77, 0xf5, 0xff, 0xff, //0x00006410 jmp LBB27_43 + //0x00006415 LBB27_117 + 0x4c, 0x01, 0xc3, //0x00006415 addq %r8, %rbx + 0xe9, 0x89, 0xff, 0xff, 0xff, //0x00006418 jmp LBB27_56 + //0x0000641d LBB27_118 + 0x48, 0x8b, 0x4f, 0x08, //0x0000641d movq $8(%rdi), %rcx + 0x48, 0x89, 0x0e, //0x00006421 movq %rcx, (%rsi) + 0xe9, 0x69, 0xf5, 0xff, 0xff, //0x00006424 jmp LBB27_45 + //0x00006429 LBB27_119 + 0x49, 0x8d, 0x49, 0xff, //0x00006429 leaq $-1(%r9), %rcx + 0x4c, 0x39, 0xf9, //0x0000642d cmpq %r15, %rcx + 0x0f, 0x84, 0x5c, 0xf5, 0xff, 0xff, //0x00006430 je LBB27_45 + 0x4b, 0x8d, 0x5c, 0x1f, 0x02, //0x00006436 leaq $2(%r15,%r11), %rbx + 0x4d, 0x29, 0xf9, //0x0000643b subq %r15, %r9 + 0x49, 0x83, 0xc1, 0xfe, //0x0000643e addq $-2, %r9 + 0x4d, 0x89, 0xcf, //0x00006442 movq %r9, %r15 + 0xe9, 0x5c, 0xff, 0xff, 0xff, //0x00006445 jmp LBB27_56 + 0x90, 0x90, //0x0000644a .p2align 2, 0x90 + // // .set L27_0_set_45, LBB27_45-LJTI27_0 + // // .set L27_0_set_47, LBB27_47-LJTI27_0 + // // .set L27_0_set_48, LBB27_48-LJTI27_0 + // // .set L27_0_set_29, LBB27_29-LJTI27_0 + // // .set L27_0_set_57, LBB27_57-LJTI27_0 + // // .set L27_0_set_82, LBB27_82-LJTI27_0 + // // .set L27_0_set_46, LBB27_46-LJTI27_0 + // // .set L27_0_set_84, LBB27_84-LJTI27_0 + //0x0000644c LJTI27_0 + 0x46, 0xf5, 0xff, 0xff, //0x0000644c .long L27_0_set_45 + 0x68, 0xf5, 0xff, 0xff, //0x00006450 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006454 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006458 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000645c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006460 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006464 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006468 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000646c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006470 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006474 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006478 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000647c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006480 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006484 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006488 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000648c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006490 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006494 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006498 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000649c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064a0 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064a4 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064a8 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064ac .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064b0 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064b4 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064b8 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064bc .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064c0 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064c4 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064c8 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064cc .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064d0 .long L27_0_set_47 + 0x77, 0xf5, 0xff, 0xff, //0x000064d4 .long L27_0_set_48 + 0x68, 0xf5, 0xff, 0xff, //0x000064d8 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064dc .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064e0 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064e4 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064e8 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064ec .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064f0 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064f4 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064f8 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000064fc .long L27_0_set_47 + 0x5f, 0xf4, 0xff, 0xff, //0x00006500 .long L27_0_set_29 + 0x68, 0xf5, 0xff, 0xff, //0x00006504 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006508 .long L27_0_set_47 + 0x5f, 0xf4, 0xff, 0xff, //0x0000650c .long L27_0_set_29 + 0x5f, 0xf4, 0xff, 0xff, //0x00006510 .long L27_0_set_29 + 0x5f, 0xf4, 0xff, 0xff, //0x00006514 .long L27_0_set_29 + 0x5f, 0xf4, 0xff, 0xff, //0x00006518 .long L27_0_set_29 + 0x5f, 0xf4, 0xff, 0xff, //0x0000651c .long L27_0_set_29 + 0x5f, 0xf4, 0xff, 0xff, //0x00006520 .long L27_0_set_29 + 0x5f, 0xf4, 0xff, 0xff, //0x00006524 .long L27_0_set_29 + 0x5f, 0xf4, 0xff, 0xff, //0x00006528 .long L27_0_set_29 + 0x5f, 0xf4, 0xff, 0xff, //0x0000652c .long L27_0_set_29 + 0x5f, 0xf4, 0xff, 0xff, //0x00006530 .long L27_0_set_29 + 0x68, 0xf5, 0xff, 0xff, //0x00006534 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006538 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000653c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006540 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006544 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006548 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000654c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006550 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006554 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006558 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000655c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006560 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006564 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006568 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000656c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006570 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006574 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006578 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000657c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006580 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006584 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006588 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000658c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006590 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006594 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006598 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000659c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065a0 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065a4 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065a8 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065ac .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065b0 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065b4 .long L27_0_set_47 + 0x8e, 0xf6, 0xff, 0xff, //0x000065b8 .long L27_0_set_57 + 0x68, 0xf5, 0xff, 0xff, //0x000065bc .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065c0 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065c4 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065c8 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065cc .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065d0 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065d4 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065d8 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065dc .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065e0 .long L27_0_set_47 + 0xc4, 0xfa, 0xff, 0xff, //0x000065e4 .long L27_0_set_82 + 0x68, 0xf5, 0xff, 0xff, //0x000065e8 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065ec .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065f0 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065f4 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065f8 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x000065fc .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006600 .long L27_0_set_47 + 0x55, 0xf5, 0xff, 0xff, //0x00006604 .long L27_0_set_46 + 0x68, 0xf5, 0xff, 0xff, //0x00006608 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000660c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006610 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006614 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006618 .long L27_0_set_47 + 0x55, 0xf5, 0xff, 0xff, //0x0000661c .long L27_0_set_46 + 0x68, 0xf5, 0xff, 0xff, //0x00006620 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006624 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006628 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x0000662c .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006630 .long L27_0_set_47 + 0x68, 0xf5, 0xff, 0xff, //0x00006634 .long L27_0_set_47 + 0xda, 0xfa, 0xff, 0xff, //0x00006638 .long L27_0_set_84 + 0x90, 0x90, 0x90, 0x90, //0x0000663c .p2align 4, 0x90 + //0x00006640 _get_by_path + 0x55, //0x00006640 pushq %rbp + 0x48, 0x89, 0xe5, //0x00006641 movq %rsp, %rbp + 0x41, 0x57, //0x00006644 pushq %r15 + 0x41, 0x56, //0x00006646 pushq %r14 + 0x41, 0x55, //0x00006648 pushq %r13 + 0x41, 0x54, //0x0000664a pushq %r12 + 0x53, //0x0000664c pushq %rbx + 0x48, 0x83, 0xec, 0x38, //0x0000664d subq $56, %rsp + 0x49, 0x89, 0xf7, //0x00006651 movq %rsi, %r15 + 0x49, 0x89, 0xfb, //0x00006654 movq %rdi, %r11 + 0x4c, 0x8b, 0x52, 0x08, //0x00006657 movq $8(%rdx), %r10 + 0x4d, 0x85, 0xd2, //0x0000665b testq %r10, %r10 + 0x0f, 0x84, 0x4c, 0x0f, 0x00, 0x00, //0x0000665e je LBB28_244 + 0x48, 0x8b, 0x02, //0x00006664 movq (%rdx), %rax + 0x49, 0xc1, 0xe2, 0x04, //0x00006667 shlq $4, %r10 + 0x48, 0x89, 0x45, 0xb8, //0x0000666b movq %rax, $-72(%rbp) + 0x49, 0x01, 0xc2, //0x0000666f addq %rax, %r10 + 0x4d, 0x8b, 0x0b, //0x00006672 movq (%r11), %r9 + 0x49, 0x8b, 0x17, //0x00006675 movq (%r15), %rdx + 0x49, 0xbc, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00006678 movabsq $4294977024, %r12 + 0x4c, 0x89, 0x5d, 0xc0, //0x00006682 movq %r11, $-64(%rbp) + 0x48, 0x89, 0x4d, 0xa0, //0x00006686 movq %rcx, $-96(%rbp) + 0x4c, 0x89, 0x55, 0xa8, //0x0000668a movq %r10, $-88(%rbp) + //0x0000668e LBB28_2 + 0x4d, 0x8b, 0x43, 0x08, //0x0000668e movq $8(%r11), %r8 + 0x48, 0x89, 0xd7, //0x00006692 movq %rdx, %rdi + 0x4c, 0x29, 0xc7, //0x00006695 subq %r8, %rdi + 0x0f, 0x83, 0x32, 0x00, 0x00, 0x00, //0x00006698 jae LBB28_7 + 0x41, 0x8a, 0x04, 0x11, //0x0000669e movb (%r9,%rdx), %al + 0x3c, 0x0d, //0x000066a2 cmpb $13, %al + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x000066a4 je LBB28_7 + 0x3c, 0x20, //0x000066aa cmpb $32, %al + 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x000066ac je LBB28_7 + 0x04, 0xf7, //0x000066b2 addb $-9, %al + 0x3c, 0x01, //0x000066b4 cmpb $1, %al + 0x0f, 0x86, 0x14, 0x00, 0x00, 0x00, //0x000066b6 jbe LBB28_7 + 0x48, 0x89, 0xd6, //0x000066bc movq %rdx, %rsi + 0xe9, 0xfe, 0x00, 0x00, 0x00, //0x000066bf jmp LBB28_28 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000066c4 .p2align 4, 0x90 + //0x000066d0 LBB28_7 + 0x48, 0x8d, 0x72, 0x01, //0x000066d0 leaq $1(%rdx), %rsi + 0x4c, 0x39, 0xc6, //0x000066d4 cmpq %r8, %rsi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000066d7 jae LBB28_11 + 0x41, 0x8a, 0x04, 0x31, //0x000066dd movb (%r9,%rsi), %al + 0x3c, 0x0d, //0x000066e1 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x000066e3 je LBB28_11 + 0x3c, 0x20, //0x000066e9 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x000066eb je LBB28_11 + 0x04, 0xf7, //0x000066f1 addb $-9, %al + 0x3c, 0x01, //0x000066f3 cmpb $1, %al + 0x0f, 0x87, 0xc7, 0x00, 0x00, 0x00, //0x000066f5 ja LBB28_28 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000066fb .p2align 4, 0x90 + //0x00006700 LBB28_11 + 0x48, 0x8d, 0x72, 0x02, //0x00006700 leaq $2(%rdx), %rsi + 0x4c, 0x39, 0xc6, //0x00006704 cmpq %r8, %rsi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006707 jae LBB28_15 + 0x41, 0x8a, 0x04, 0x31, //0x0000670d movb (%r9,%rsi), %al + 0x3c, 0x0d, //0x00006711 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00006713 je LBB28_15 + 0x3c, 0x20, //0x00006719 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000671b je LBB28_15 + 0x04, 0xf7, //0x00006721 addb $-9, %al + 0x3c, 0x01, //0x00006723 cmpb $1, %al + 0x0f, 0x87, 0x97, 0x00, 0x00, 0x00, //0x00006725 ja LBB28_28 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000672b .p2align 4, 0x90 + //0x00006730 LBB28_15 + 0x48, 0x8d, 0x72, 0x03, //0x00006730 leaq $3(%rdx), %rsi + 0x4c, 0x39, 0xc6, //0x00006734 cmpq %r8, %rsi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006737 jae LBB28_19 + 0x41, 0x8a, 0x04, 0x31, //0x0000673d movb (%r9,%rsi), %al + 0x3c, 0x0d, //0x00006741 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00006743 je LBB28_19 + 0x3c, 0x20, //0x00006749 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000674b je LBB28_19 + 0x04, 0xf7, //0x00006751 addb $-9, %al + 0x3c, 0x01, //0x00006753 cmpb $1, %al + 0x0f, 0x87, 0x67, 0x00, 0x00, 0x00, //0x00006755 ja LBB28_28 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000675b .p2align 4, 0x90 + //0x00006760 LBB28_19 + 0x48, 0x8d, 0x42, 0x04, //0x00006760 leaq $4(%rdx), %rax + 0x49, 0x39, 0xc0, //0x00006764 cmpq %rax, %r8 + 0x0f, 0x86, 0x83, 0x00, 0x00, 0x00, //0x00006767 jbe LBB28_25 + 0x49, 0x39, 0xc0, //0x0000676d cmpq %rax, %r8 + 0x0f, 0x84, 0x94, 0x00, 0x00, 0x00, //0x00006770 je LBB28_26 + 0x4b, 0x8d, 0x04, 0x01, //0x00006776 leaq (%r9,%r8), %rax + 0x48, 0x83, 0xc7, 0x04, //0x0000677a addq $4, %rdi + 0x49, 0x8d, 0x74, 0x11, 0x05, //0x0000677e leaq $5(%r9,%rdx), %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006783 .p2align 4, 0x90 + //0x00006790 LBB28_22 + 0x0f, 0xbe, 0x5e, 0xff, //0x00006790 movsbl $-1(%rsi), %ebx + 0x83, 0xfb, 0x20, //0x00006794 cmpl $32, %ebx + 0x0f, 0x87, 0xfd, 0x0b, 0x00, 0x00, //0x00006797 ja LBB28_29 + 0x49, 0x0f, 0xa3, 0xdc, //0x0000679d btq %rbx, %r12 + 0x0f, 0x83, 0xf3, 0x0b, 0x00, 0x00, //0x000067a1 jae LBB28_29 + 0x48, 0xff, 0xc6, //0x000067a7 incq %rsi + 0x48, 0xff, 0xc7, //0x000067aa incq %rdi + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000067ad jne LBB28_22 + 0x4c, 0x29, 0xc8, //0x000067b3 subq %r9, %rax + 0x48, 0x89, 0xc6, //0x000067b6 movq %rax, %rsi + 0x4c, 0x39, 0xc6, //0x000067b9 cmpq %r8, %rsi + 0x0f, 0x83, 0x5a, 0x00, 0x00, 0x00, //0x000067bc jae LBB28_30 + //0x000067c2 LBB28_28 + 0x48, 0x8d, 0x46, 0x01, //0x000067c2 leaq $1(%rsi), %rax + 0x49, 0x89, 0x07, //0x000067c6 movq %rax, (%r15) + 0x41, 0x8a, 0x34, 0x31, //0x000067c9 movb (%r9,%rsi), %sil + 0x48, 0x8b, 0x55, 0xb8, //0x000067cd movq $-72(%rbp), %rdx + 0x48, 0x8b, 0x12, //0x000067d1 movq (%rdx), %rdx + 0x48, 0x85, 0xd2, //0x000067d4 testq %rdx, %rdx + 0x0f, 0x85, 0x63, 0x00, 0x00, 0x00, //0x000067d7 jne LBB28_31 + 0xe9, 0x29, 0x0e, 0x00, 0x00, //0x000067dd jmp LBB28_251 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000067e2 .p2align 4, 0x90 + //0x000067f0 LBB28_25 + 0x49, 0x89, 0x07, //0x000067f0 movq %rax, (%r15) + 0x31, 0xf6, //0x000067f3 xorl %esi, %esi + 0x48, 0x8b, 0x55, 0xb8, //0x000067f5 movq $-72(%rbp), %rdx + 0x48, 0x8b, 0x12, //0x000067f9 movq (%rdx), %rdx + 0x48, 0x85, 0xd2, //0x000067fc testq %rdx, %rdx + 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x000067ff jne LBB28_31 + 0xe9, 0x01, 0x0e, 0x00, 0x00, //0x00006805 jmp LBB28_251 + //0x0000680a LBB28_26 + 0x4c, 0x01, 0xc8, //0x0000680a addq %r9, %rax + 0x4c, 0x29, 0xc8, //0x0000680d subq %r9, %rax + 0x48, 0x89, 0xc6, //0x00006810 movq %rax, %rsi + 0x4c, 0x39, 0xc6, //0x00006813 cmpq %r8, %rsi + 0x0f, 0x82, 0xa6, 0xff, 0xff, 0xff, //0x00006816 jb LBB28_28 + //0x0000681c LBB28_30 + 0x31, 0xf6, //0x0000681c xorl %esi, %esi + 0x48, 0x89, 0xd0, //0x0000681e movq %rdx, %rax + 0x48, 0x8b, 0x55, 0xb8, //0x00006821 movq $-72(%rbp), %rdx + 0x48, 0x8b, 0x12, //0x00006825 movq (%rdx), %rdx + 0x48, 0x85, 0xd2, //0x00006828 testq %rdx, %rdx + 0x0f, 0x84, 0xda, 0x0d, 0x00, 0x00, //0x0000682b je LBB28_251 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006831 .p2align 4, 0x90 + //0x00006840 LBB28_31 + 0x8a, 0x52, 0x17, //0x00006840 movb $23(%rdx), %dl + 0x80, 0xe2, 0x1f, //0x00006843 andb $31, %dl + 0x80, 0xfa, 0x02, //0x00006846 cmpb $2, %dl + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00006849 je LBB28_184 + 0x80, 0xfa, 0x18, //0x0000684f cmpb $24, %dl + 0x0f, 0x85, 0xb3, 0x0d, 0x00, 0x00, //0x00006852 jne LBB28_251 + 0x40, 0x80, 0xfe, 0x7b, //0x00006858 cmpb $123, %sil + 0x4c, 0x89, 0x7d, 0xd0, //0x0000685c movq %r15, $-48(%rbp) + 0x0f, 0x84, 0x78, 0x01, 0x00, 0x00, //0x00006860 je LBB28_34 + 0xe9, 0x71, 0x0d, 0x00, 0x00, //0x00006866 jmp LBB28_247 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000686b .p2align 4, 0x90 + //0x00006870 LBB28_184 + 0x40, 0x80, 0xfe, 0x5b, //0x00006870 cmpb $91, %sil + 0x0f, 0x85, 0x62, 0x0d, 0x00, 0x00, //0x00006874 jne LBB28_247 + 0x48, 0x8b, 0x55, 0xb8, //0x0000687a movq $-72(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000687e movq $8(%rdx), %rdx + 0x4c, 0x8b, 0x32, //0x00006882 movq (%rdx), %r14 + 0x4d, 0x85, 0xf6, //0x00006885 testq %r14, %r14 + 0x0f, 0x88, 0x7d, 0x0d, 0x00, 0x00, //0x00006888 js LBB28_251 + 0x4d, 0x8b, 0x43, 0x08, //0x0000688e movq $8(%r11), %r8 + 0x48, 0x89, 0xc6, //0x00006892 movq %rax, %rsi + 0x4c, 0x29, 0xc6, //0x00006895 subq %r8, %rsi + 0x0f, 0x83, 0x32, 0x00, 0x00, 0x00, //0x00006898 jae LBB28_191 + 0x41, 0x8a, 0x14, 0x01, //0x0000689e movb (%r9,%rax), %dl + 0x80, 0xfa, 0x0d, //0x000068a2 cmpb $13, %dl + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x000068a5 je LBB28_191 + 0x80, 0xfa, 0x20, //0x000068ab cmpb $32, %dl + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x000068ae je LBB28_191 + 0x80, 0xc2, 0xf7, //0x000068b4 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000068b7 cmpb $1, %dl + 0x0f, 0x86, 0x10, 0x00, 0x00, 0x00, //0x000068ba jbe LBB28_191 + 0x48, 0x89, 0xc7, //0x000068c0 movq %rax, %rdi + 0xe9, 0x12, 0x0b, 0x00, 0x00, //0x000068c3 jmp LBB28_213 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000068c8 .p2align 4, 0x90 + //0x000068d0 LBB28_191 + 0x48, 0x8d, 0x78, 0x01, //0x000068d0 leaq $1(%rax), %rdi + 0x4c, 0x39, 0xc7, //0x000068d4 cmpq %r8, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000068d7 jae LBB28_195 + 0x41, 0x8a, 0x14, 0x39, //0x000068dd movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x000068e1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000068e4 je LBB28_195 + 0x80, 0xfa, 0x20, //0x000068ea cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000068ed je LBB28_195 + 0x80, 0xc2, 0xf7, //0x000068f3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000068f6 cmpb $1, %dl + 0x0f, 0x87, 0xdb, 0x0a, 0x00, 0x00, //0x000068f9 ja LBB28_213 + 0x90, //0x000068ff .p2align 4, 0x90 + //0x00006900 LBB28_195 + 0x48, 0x8d, 0x78, 0x02, //0x00006900 leaq $2(%rax), %rdi + 0x4c, 0x39, 0xc7, //0x00006904 cmpq %r8, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006907 jae LBB28_199 + 0x41, 0x8a, 0x14, 0x39, //0x0000690d movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x00006911 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00006914 je LBB28_199 + 0x80, 0xfa, 0x20, //0x0000691a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000691d je LBB28_199 + 0x80, 0xc2, 0xf7, //0x00006923 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006926 cmpb $1, %dl + 0x0f, 0x87, 0xab, 0x0a, 0x00, 0x00, //0x00006929 ja LBB28_213 + 0x90, //0x0000692f .p2align 4, 0x90 + //0x00006930 LBB28_199 + 0x48, 0x8d, 0x78, 0x03, //0x00006930 leaq $3(%rax), %rdi + 0x4c, 0x39, 0xc7, //0x00006934 cmpq %r8, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006937 jae LBB28_203 + 0x41, 0x8a, 0x14, 0x39, //0x0000693d movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x00006941 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00006944 je LBB28_203 + 0x80, 0xfa, 0x20, //0x0000694a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000694d je LBB28_203 + 0x80, 0xc2, 0xf7, //0x00006953 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006956 cmpb $1, %dl + 0x0f, 0x87, 0x7b, 0x0a, 0x00, 0x00, //0x00006959 ja LBB28_213 + 0x90, //0x0000695f .p2align 4, 0x90 + //0x00006960 LBB28_203 + 0x48, 0x8d, 0x50, 0x04, //0x00006960 leaq $4(%rax), %rdx + 0x49, 0x39, 0xd0, //0x00006964 cmpq %rdx, %r8 + 0x0f, 0x86, 0x22, 0x0a, 0x00, 0x00, //0x00006967 jbe LBB28_209 + 0x49, 0x39, 0xd0, //0x0000696d cmpq %rdx, %r8 + 0x0f, 0x84, 0x3b, 0x0a, 0x00, 0x00, //0x00006970 je LBB28_210 + 0x4b, 0x8d, 0x14, 0x01, //0x00006976 leaq (%r9,%r8), %rdx + 0x48, 0x83, 0xc6, 0x04, //0x0000697a addq $4, %rsi + 0x49, 0x8d, 0x7c, 0x01, 0x05, //0x0000697e leaq $5(%r9,%rax), %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006983 .p2align 4, 0x90 + //0x00006990 LBB28_206 + 0x0f, 0xbe, 0x4f, 0xff, //0x00006990 movsbl $-1(%rdi), %ecx + 0x83, 0xf9, 0x20, //0x00006994 cmpl $32, %ecx + 0x0f, 0x87, 0x2b, 0x0a, 0x00, 0x00, //0x00006997 ja LBB28_212 + 0x49, 0x0f, 0xa3, 0xcc, //0x0000699d btq %rcx, %r12 + 0x0f, 0x83, 0x21, 0x0a, 0x00, 0x00, //0x000069a1 jae LBB28_212 + 0x48, 0xff, 0xc7, //0x000069a7 incq %rdi + 0x48, 0xff, 0xc6, //0x000069aa incq %rsi + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000069ad jne LBB28_206 + 0xe9, 0xfc, 0x09, 0x00, 0x00, //0x000069b3 jmp LBB28_211 + //0x000069b8 LBB28_180 + 0x4c, 0x89, 0xca, //0x000069b8 movq %r9, %rdx + 0x48, 0xf7, 0xd2, //0x000069bb notq %rdx + 0x48, 0x01, 0xd7, //0x000069be addq %rdx, %rdi + 0x48, 0x39, 0xcf, //0x000069c1 cmpq %rcx, %rdi + 0x0f, 0x83, 0x12, 0x0c, 0x00, 0x00, //0x000069c4 jae LBB28_247 + //0x000069ca LBB28_181 + 0x48, 0x8d, 0x47, 0x01, //0x000069ca leaq $1(%rdi), %rax + 0x49, 0x89, 0x07, //0x000069ce movq %rax, (%r15) + 0x41, 0x8a, 0x0c, 0x39, //0x000069d1 movb (%r9,%rdi), %cl + 0x80, 0xf9, 0x2c, //0x000069d5 cmpb $44, %cl + 0x0f, 0x85, 0x42, 0x0c, 0x00, 0x00, //0x000069d8 jne LBB28_253 + //0x000069de LBB28_34 + 0x49, 0x8b, 0x4b, 0x08, //0x000069de movq $8(%r11), %rcx + 0x48, 0x89, 0xc6, //0x000069e2 movq %rax, %rsi + 0x48, 0x29, 0xce, //0x000069e5 subq %rcx, %rsi + 0x0f, 0x83, 0x32, 0x00, 0x00, 0x00, //0x000069e8 jae LBB28_39 + 0x41, 0x8a, 0x14, 0x01, //0x000069ee movb (%r9,%rax), %dl + 0x80, 0xfa, 0x0d, //0x000069f2 cmpb $13, %dl + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x000069f5 je LBB28_39 + 0x80, 0xfa, 0x20, //0x000069fb cmpb $32, %dl + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x000069fe je LBB28_39 + 0x80, 0xc2, 0xf7, //0x00006a04 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006a07 cmpb $1, %dl + 0x0f, 0x86, 0x10, 0x00, 0x00, 0x00, //0x00006a0a jbe LBB28_39 + 0x49, 0x89, 0xc5, //0x00006a10 movq %rax, %r13 + 0xe9, 0x2a, 0x01, 0x00, 0x00, //0x00006a13 jmp LBB28_60 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006a18 .p2align 4, 0x90 + //0x00006a20 LBB28_39 + 0x4c, 0x8d, 0x68, 0x01, //0x00006a20 leaq $1(%rax), %r13 + 0x49, 0x39, 0xcd, //0x00006a24 cmpq %rcx, %r13 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006a27 jae LBB28_43 + 0x43, 0x8a, 0x14, 0x29, //0x00006a2d movb (%r9,%r13), %dl + 0x80, 0xfa, 0x0d, //0x00006a31 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00006a34 je LBB28_43 + 0x80, 0xfa, 0x20, //0x00006a3a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00006a3d je LBB28_43 + 0x80, 0xc2, 0xf7, //0x00006a43 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006a46 cmpb $1, %dl + 0x0f, 0x87, 0xf3, 0x00, 0x00, 0x00, //0x00006a49 ja LBB28_60 + 0x90, //0x00006a4f .p2align 4, 0x90 + //0x00006a50 LBB28_43 + 0x4c, 0x8d, 0x68, 0x02, //0x00006a50 leaq $2(%rax), %r13 + 0x49, 0x39, 0xcd, //0x00006a54 cmpq %rcx, %r13 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006a57 jae LBB28_47 + 0x43, 0x8a, 0x14, 0x29, //0x00006a5d movb (%r9,%r13), %dl + 0x80, 0xfa, 0x0d, //0x00006a61 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00006a64 je LBB28_47 + 0x80, 0xfa, 0x20, //0x00006a6a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00006a6d je LBB28_47 + 0x80, 0xc2, 0xf7, //0x00006a73 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006a76 cmpb $1, %dl + 0x0f, 0x87, 0xc3, 0x00, 0x00, 0x00, //0x00006a79 ja LBB28_60 + 0x90, //0x00006a7f .p2align 4, 0x90 + //0x00006a80 LBB28_47 + 0x4c, 0x8d, 0x68, 0x03, //0x00006a80 leaq $3(%rax), %r13 + 0x49, 0x39, 0xcd, //0x00006a84 cmpq %rcx, %r13 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00006a87 jae LBB28_51 + 0x43, 0x8a, 0x14, 0x29, //0x00006a8d movb (%r9,%r13), %dl + 0x80, 0xfa, 0x0d, //0x00006a91 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00006a94 je LBB28_51 + 0x80, 0xfa, 0x20, //0x00006a9a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00006a9d je LBB28_51 + 0x80, 0xc2, 0xf7, //0x00006aa3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006aa6 cmpb $1, %dl + 0x0f, 0x87, 0x93, 0x00, 0x00, 0x00, //0x00006aa9 ja LBB28_60 + 0x90, //0x00006aaf .p2align 4, 0x90 + //0x00006ab0 LBB28_51 + 0x48, 0x8d, 0x50, 0x04, //0x00006ab0 leaq $4(%rax), %rdx + 0x48, 0x39, 0xd1, //0x00006ab4 cmpq %rdx, %rcx + 0x0f, 0x86, 0x19, 0x0b, 0x00, 0x00, //0x00006ab7 jbe LBB28_245 + 0x48, 0x39, 0xd1, //0x00006abd cmpq %rdx, %rcx + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x00006ac0 je LBB28_57 + 0x49, 0x8d, 0x14, 0x09, //0x00006ac6 leaq (%r9,%rcx), %rdx + 0x48, 0x83, 0xc6, 0x04, //0x00006aca addq $4, %rsi + 0x4d, 0x8d, 0x6c, 0x01, 0x05, //0x00006ace leaq $5(%r9,%rax), %r13 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006ad3 .p2align 4, 0x90 + //0x00006ae0 LBB28_54 + 0x41, 0x0f, 0xbe, 0x7d, 0xff, //0x00006ae0 movsbl $-1(%r13), %edi + 0x83, 0xff, 0x20, //0x00006ae5 cmpl $32, %edi + 0x0f, 0x87, 0x42, 0x00, 0x00, 0x00, //0x00006ae8 ja LBB28_59 + 0x49, 0x0f, 0xa3, 0xfc, //0x00006aee btq %rdi, %r12 + 0x0f, 0x83, 0x38, 0x00, 0x00, 0x00, //0x00006af2 jae LBB28_59 + 0x49, 0xff, 0xc5, //0x00006af8 incq %r13 + 0x48, 0xff, 0xc6, //0x00006afb incq %rsi + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00006afe jne LBB28_54 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00006b04 jmp LBB28_58 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006b09 .p2align 4, 0x90 + //0x00006b10 LBB28_57 + 0x4c, 0x01, 0xca, //0x00006b10 addq %r9, %rdx + //0x00006b13 LBB28_58 + 0x4c, 0x29, 0xca, //0x00006b13 subq %r9, %rdx + 0x49, 0x89, 0xd5, //0x00006b16 movq %rdx, %r13 + 0x49, 0x39, 0xcd, //0x00006b19 cmpq %rcx, %r13 + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x00006b1c jb LBB28_60 + 0xe9, 0xb5, 0x0a, 0x00, 0x00, //0x00006b22 jmp LBB28_247 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006b27 .p2align 4, 0x90 + //0x00006b30 LBB28_59 + 0x4c, 0x89, 0xca, //0x00006b30 movq %r9, %rdx + 0x48, 0xf7, 0xd2, //0x00006b33 notq %rdx + 0x49, 0x01, 0xd5, //0x00006b36 addq %rdx, %r13 + 0x49, 0x39, 0xcd, //0x00006b39 cmpq %rcx, %r13 + 0x0f, 0x83, 0x9a, 0x0a, 0x00, 0x00, //0x00006b3c jae LBB28_247 + //0x00006b42 LBB28_60 + 0x49, 0x8d, 0x5d, 0x01, //0x00006b42 leaq $1(%r13), %rbx + 0x49, 0x89, 0x1f, //0x00006b46 movq %rbx, (%r15) + 0x43, 0x8a, 0x0c, 0x29, //0x00006b49 movb (%r9,%r13), %cl + 0x80, 0xf9, 0x22, //0x00006b4d cmpb $34, %cl + 0x0f, 0x85, 0xc7, 0x0a, 0x00, 0x00, //0x00006b50 jne LBB28_252 + 0x48, 0x8b, 0x45, 0xb8, //0x00006b56 movq $-72(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x00006b5a movq $8(%rax), %rax + 0x4c, 0x8b, 0x30, //0x00006b5e movq (%rax), %r14 + 0x4c, 0x8b, 0x78, 0x08, //0x00006b61 movq $8(%rax), %r15 + 0x48, 0xc7, 0x45, 0xb0, 0xff, 0xff, 0xff, 0xff, //0x00006b65 movq $-1, $-80(%rbp) + 0x4c, 0x89, 0xdf, //0x00006b6d movq %r11, %rdi + 0x48, 0x89, 0xde, //0x00006b70 movq %rbx, %rsi + 0x48, 0x8d, 0x55, 0xb0, //0x00006b73 leaq $-80(%rbp), %rdx + 0xe8, 0x24, 0x26, 0x00, 0x00, //0x00006b77 callq _advance_string_default + 0x48, 0x85, 0xc0, //0x00006b7c testq %rax, %rax + 0x0f, 0x88, 0xb6, 0x0a, 0x00, 0x00, //0x00006b7f js LBB28_255 + 0x48, 0x8b, 0x4d, 0xd0, //0x00006b85 movq $-48(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00006b89 movq %rax, (%rcx) + 0x48, 0x8b, 0x4d, 0xb0, //0x00006b8c movq $-80(%rbp), %rcx + 0x48, 0x83, 0xf9, 0xff, //0x00006b90 cmpq $-1, %rcx + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x00006b94 je LBB28_64 + 0x48, 0x39, 0xc1, //0x00006b9a cmpq %rax, %rcx + 0x0f, 0x8e, 0x61, 0x01, 0x00, 0x00, //0x00006b9d jle LBB28_87 + //0x00006ba3 LBB28_64 + 0x48, 0x89, 0xc2, //0x00006ba3 movq %rax, %rdx + 0x4c, 0x29, 0xea, //0x00006ba6 subq %r13, %rdx + 0x48, 0x83, 0xc2, 0xfe, //0x00006ba9 addq $-2, %rdx + 0x41, 0xba, 0x01, 0x00, 0x00, 0x00, //0x00006bad movl $1, %r10d + 0x48, 0x89, 0xd1, //0x00006bb3 movq %rdx, %rcx + 0x4c, 0x09, 0xf9, //0x00006bb6 orq %r15, %rcx + 0x4c, 0x8b, 0x5d, 0xc0, //0x00006bb9 movq $-64(%rbp), %r11 + 0x0f, 0x84, 0x00, 0x01, 0x00, 0x00, //0x00006bbd je LBB28_82 + 0x4c, 0x39, 0xfa, //0x00006bc3 cmpq %r15, %rdx + 0x0f, 0x85, 0xf4, 0x00, 0x00, 0x00, //0x00006bc6 jne LBB28_81 + 0x49, 0x03, 0x1b, //0x00006bcc addq (%r11), %rbx + 0x49, 0x83, 0xff, 0x10, //0x00006bcf cmpq $16, %r15 + 0x0f, 0x82, 0x5f, 0x00, 0x00, 0x00, //0x00006bd3 jb LBB28_71 + 0x49, 0x8d, 0x57, 0xf0, //0x00006bd9 leaq $-16(%r15), %rdx + 0x48, 0x89, 0xd1, //0x00006bdd movq %rdx, %rcx + 0x48, 0x83, 0xe1, 0xf0, //0x00006be0 andq $-16, %rcx + 0x4c, 0x8d, 0x44, 0x0b, 0x10, //0x00006be4 leaq $16(%rbx,%rcx), %r8 + 0x49, 0x8d, 0x7c, 0x0e, 0x10, //0x00006be9 leaq $16(%r14,%rcx), %rdi + 0x83, 0xe2, 0x0f, //0x00006bee andl $15, %edx + 0x31, 0xf6, //0x00006bf1 xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00006bf3 .p2align 4, 0x90 + //0x00006c00 LBB28_68 + 0xf3, 0x0f, 0x6f, 0x04, 0x33, //0x00006c00 movdqu (%rbx,%rsi), %xmm0 + 0xf3, 0x41, 0x0f, 0x6f, 0x0c, 0x36, //0x00006c05 movdqu (%r14,%rsi), %xmm1 + 0x66, 0x0f, 0x74, 0xc8, //0x00006c0b pcmpeqb %xmm0, %xmm1 + 0x66, 0x0f, 0xd7, 0xc9, //0x00006c0f pmovmskb %xmm1, %ecx + 0x66, 0x83, 0xf9, 0xff, //0x00006c13 cmpw $-1, %cx + 0x0f, 0x85, 0xa3, 0x00, 0x00, 0x00, //0x00006c17 jne LBB28_81 + 0x49, 0x83, 0xc7, 0xf0, //0x00006c1d addq $-16, %r15 + 0x48, 0x83, 0xc6, 0x10, //0x00006c21 addq $16, %rsi + 0x49, 0x83, 0xff, 0x0f, //0x00006c25 cmpq $15, %r15 + 0x0f, 0x87, 0xd1, 0xff, 0xff, 0xff, //0x00006c29 ja LBB28_68 + 0x49, 0x89, 0xd7, //0x00006c2f movq %rdx, %r15 + 0x49, 0x89, 0xfe, //0x00006c32 movq %rdi, %r14 + 0x4c, 0x89, 0xc3, //0x00006c35 movq %r8, %rbx + //0x00006c38 LBB28_71 + 0x44, 0x89, 0xf1, //0x00006c38 movl %r14d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00006c3b andl $4095, %ecx + 0x81, 0xf9, 0xf0, 0x0f, 0x00, 0x00, //0x00006c41 cmpl $4080, %ecx + 0x0f, 0x87, 0x47, 0x00, 0x00, 0x00, //0x00006c47 ja LBB28_76 + 0x89, 0xd9, //0x00006c4d movl %ebx, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00006c4f andl $4095, %ecx + 0x81, 0xf9, 0xf1, 0x0f, 0x00, 0x00, //0x00006c55 cmpl $4081, %ecx + 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00006c5b jae LBB28_76 + 0xf3, 0x0f, 0x6f, 0x03, //0x00006c61 movdqu (%rbx), %xmm0 + 0xf3, 0x41, 0x0f, 0x6f, 0x0e, //0x00006c65 movdqu (%r14), %xmm1 + 0x66, 0x0f, 0x74, 0xc8, //0x00006c6a pcmpeqb %xmm0, %xmm1 + 0x66, 0x0f, 0xd7, 0xd1, //0x00006c6e pmovmskb %xmm1, %edx + 0x66, 0x83, 0xfa, 0xff, //0x00006c72 cmpw $-1, %dx + 0x0f, 0x84, 0x47, 0x00, 0x00, 0x00, //0x00006c76 je LBB28_82 + 0xf7, 0xd2, //0x00006c7c notl %edx + 0x0f, 0xb7, 0xca, //0x00006c7e movzwl %dx, %ecx + 0x48, 0x0f, 0xbc, 0xc9, //0x00006c81 bsfq %rcx, %rcx + 0x45, 0x31, 0xd2, //0x00006c85 xorl %r10d, %r10d + 0x4c, 0x39, 0xf9, //0x00006c88 cmpq %r15, %rcx + 0x41, 0x0f, 0x93, 0xc2, //0x00006c8b setae %r10b + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00006c8f jmp LBB28_82 + //0x00006c94 LBB28_76 + 0x4d, 0x85, 0xff, //0x00006c94 testq %r15, %r15 + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00006c97 je LBB28_82 + 0x31, 0xd2, //0x00006c9d xorl %edx, %edx + 0x90, //0x00006c9f .p2align 4, 0x90 + //0x00006ca0 LBB28_78 + 0x0f, 0xb6, 0x0c, 0x13, //0x00006ca0 movzbl (%rbx,%rdx), %ecx + 0x41, 0x3a, 0x0c, 0x16, //0x00006ca4 cmpb (%r14,%rdx), %cl + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00006ca8 jne LBB28_81 + 0x48, 0xff, 0xc2, //0x00006cae incq %rdx + 0x49, 0x39, 0xd7, //0x00006cb1 cmpq %rdx, %r15 + 0x0f, 0x85, 0xe6, 0xff, 0xff, 0xff, //0x00006cb4 jne LBB28_78 + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00006cba jmp LBB28_82 + 0x90, //0x00006cbf .p2align 4, 0x90 + //0x00006cc0 LBB28_81 + 0x45, 0x31, 0xd2, //0x00006cc0 xorl %r10d, %r10d + //0x00006cc3 LBB28_82 + 0x4d, 0x8b, 0x0b, //0x00006cc3 movq (%r11), %r9 + 0x4c, 0x8b, 0x7d, 0xd0, //0x00006cc6 movq $-48(%rbp), %r15 + 0x49, 0x8b, 0x73, 0x08, //0x00006cca movq $8(%r11), %rsi + 0x48, 0x89, 0xc7, //0x00006cce movq %rax, %rdi + 0x48, 0x29, 0xf7, //0x00006cd1 subq %rsi, %rdi + 0x0f, 0x83, 0x16, 0x04, 0x00, 0x00, //0x00006cd4 jae LBB28_132 + //0x00006cda LBB28_83 + 0x41, 0x8a, 0x14, 0x01, //0x00006cda movb (%r9,%rax), %dl + 0x80, 0xfa, 0x0d, //0x00006cde cmpb $13, %dl + 0x0f, 0x84, 0x09, 0x04, 0x00, 0x00, //0x00006ce1 je LBB28_132 + 0x80, 0xfa, 0x20, //0x00006ce7 cmpb $32, %dl + 0x0f, 0x84, 0x00, 0x04, 0x00, 0x00, //0x00006cea je LBB28_132 + 0x80, 0xc2, 0xf7, //0x00006cf0 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00006cf3 cmpb $1, %dl + 0x0f, 0x86, 0xf4, 0x03, 0x00, 0x00, //0x00006cf6 jbe LBB28_132 + 0x48, 0x89, 0xc3, //0x00006cfc movq %rax, %rbx + 0xe9, 0x0e, 0x05, 0x00, 0x00, //0x00006cff jmp LBB28_153 + //0x00006d04 LBB28_87 + 0x48, 0xc7, 0x45, 0xc8, 0x00, 0x00, 0x00, 0x00, //0x00006d04 movq $0, $-56(%rbp) + 0x48, 0x8b, 0x4d, 0xc0, //0x00006d0c movq $-64(%rbp), %rcx + 0x4c, 0x8b, 0x09, //0x00006d10 movq (%rcx), %r9 + 0x4c, 0x01, 0xcb, //0x00006d13 addq %r9, %rbx + 0x4d, 0x8d, 0x44, 0x01, 0xff, //0x00006d16 leaq $-1(%r9,%rax), %r8 + 0x4f, 0x8d, 0x1c, 0x3e, //0x00006d1b leaq (%r14,%r15), %r11 + 0x4d, 0x85, 0xff, //0x00006d1f testq %r15, %r15 + 0x0f, 0x8e, 0xa0, 0x03, 0x00, 0x00, //0x00006d22 jle LBB28_129 + 0x49, 0x39, 0xd8, //0x00006d28 cmpq %rbx, %r8 + 0x4c, 0x8b, 0x7d, 0xd0, //0x00006d2b movq $-48(%rbp), %r15 + 0x0f, 0x86, 0x97, 0x03, 0x00, 0x00, //0x00006d2f jbe LBB28_130 + //0x00006d35 LBB28_89 + 0x8a, 0x0b, //0x00006d35 movb (%rbx), %cl + 0x80, 0xf9, 0x5c, //0x00006d37 cmpb $92, %cl + 0x0f, 0x85, 0x58, 0x00, 0x00, 0x00, //0x00006d3a jne LBB28_94 + 0x4c, 0x89, 0xc2, //0x00006d40 movq %r8, %rdx + 0x48, 0x29, 0xda, //0x00006d43 subq %rbx, %rdx + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00006d46 movq $-1, %rcx + 0x48, 0x85, 0xd2, //0x00006d4d testq %rdx, %rdx + 0x0f, 0x8e, 0x22, 0x09, 0x00, 0x00, //0x00006d50 jle LBB28_259 + 0x0f, 0xb6, 0x73, 0x01, //0x00006d56 movzbl $1(%rbx), %esi + 0x48, 0x8d, 0x3d, 0xaf, 0x9c, 0x00, 0x00, //0x00006d5a leaq $40111(%rip), %rdi /* __UnquoteTab+0(%rip) */ + 0x44, 0x8a, 0x3c, 0x3e, //0x00006d61 movb (%rsi,%rdi), %r15b + 0x41, 0x80, 0xff, 0xff, //0x00006d65 cmpb $-1, %r15b + 0x0f, 0x84, 0x3d, 0x00, 0x00, 0x00, //0x00006d69 je LBB28_96 + 0x45, 0x84, 0xff, //0x00006d6f testb %r15b, %r15b + 0x0f, 0x84, 0xee, 0x08, 0x00, 0x00, //0x00006d72 je LBB28_257 + 0x44, 0x88, 0x7d, 0xc8, //0x00006d78 movb %r15b, $-56(%rbp) + 0x48, 0x83, 0xc3, 0x02, //0x00006d7c addq $2, %rbx + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00006d80 movl $1, %edx + 0x4c, 0x8d, 0x54, 0x15, 0xc8, //0x00006d85 leaq $-56(%rbp,%rdx), %r10 + 0x4d, 0x39, 0xde, //0x00006d8a cmpq %r11, %r14 + 0x0f, 0x82, 0x30, 0x01, 0x00, 0x00, //0x00006d8d jb LBB28_107 + 0xe9, 0x08, 0x03, 0x00, 0x00, //0x00006d93 jmp LBB28_113 + //0x00006d98 LBB28_94 + 0x41, 0x3a, 0x0e, //0x00006d98 cmpb (%r14), %cl + 0x0f, 0x85, 0xe6, 0x05, 0x00, 0x00, //0x00006d9b jne LBB28_183 + 0x48, 0xff, 0xc3, //0x00006da1 incq %rbx + 0x49, 0xff, 0xc6, //0x00006da4 incq %r14 + 0xe9, 0x05, 0x03, 0x00, 0x00, //0x00006da7 jmp LBB28_115 + //0x00006dac LBB28_96 + 0x48, 0x83, 0xfa, 0x03, //0x00006dac cmpq $3, %rdx + 0x0f, 0x8e, 0xbf, 0x08, 0x00, 0x00, //0x00006db0 jle LBB28_258 + 0x8b, 0x4b, 0x02, //0x00006db6 movl $2(%rbx), %ecx + 0x89, 0xce, //0x00006db9 movl %ecx, %esi + 0xf7, 0xd6, //0x00006dbb notl %esi + 0x8d, 0xb9, 0xd0, 0xcf, 0xcf, 0xcf, //0x00006dbd leal $-808464432(%rcx), %edi + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00006dc3 andl $-2139062144, %esi + 0x85, 0xfe, //0x00006dc9 testl %edi, %esi + 0x0f, 0x85, 0x85, 0x08, 0x00, 0x00, //0x00006dcb jne LBB28_256 + 0x8d, 0xb9, 0x19, 0x19, 0x19, 0x19, //0x00006dd1 leal $421075225(%rcx), %edi + 0x09, 0xcf, //0x00006dd7 orl %ecx, %edi + 0xf7, 0xc7, 0x80, 0x80, 0x80, 0x80, //0x00006dd9 testl $-2139062144, %edi + 0x0f, 0x85, 0x71, 0x08, 0x00, 0x00, //0x00006ddf jne LBB28_256 + 0x89, 0xcf, //0x00006de5 movl %ecx, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x00006de7 andl $2139062143, %edi + 0x41, 0xba, 0xc0, 0xc0, 0xc0, 0xc0, //0x00006ded movl $-1061109568, %r10d + 0x41, 0x29, 0xfa, //0x00006df3 subl %edi, %r10d + 0x44, 0x8d, 0xbf, 0x46, 0x46, 0x46, 0x46, //0x00006df6 leal $1179010630(%rdi), %r15d + 0x41, 0x21, 0xf2, //0x00006dfd andl %esi, %r10d + 0x45, 0x85, 0xfa, //0x00006e00 testl %r15d, %r10d + 0x0f, 0x85, 0x4d, 0x08, 0x00, 0x00, //0x00006e03 jne LBB28_256 + 0x41, 0xba, 0xe0, 0xe0, 0xe0, 0xe0, //0x00006e09 movl $-522133280, %r10d + 0x41, 0x29, 0xfa, //0x00006e0f subl %edi, %r10d + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x00006e12 addl $960051513, %edi + 0x44, 0x21, 0xd6, //0x00006e18 andl %r10d, %esi + 0x85, 0xfe, //0x00006e1b testl %edi, %esi + 0x0f, 0x85, 0x33, 0x08, 0x00, 0x00, //0x00006e1d jne LBB28_256 + 0x0f, 0xc9, //0x00006e23 bswapl %ecx + 0x89, 0xce, //0x00006e25 movl %ecx, %esi + 0xc1, 0xee, 0x04, //0x00006e27 shrl $4, %esi + 0xf7, 0xd6, //0x00006e2a notl %esi + 0x81, 0xe6, 0x01, 0x01, 0x01, 0x01, //0x00006e2c andl $16843009, %esi + 0x8d, 0x34, 0xf6, //0x00006e32 leal (%rsi,%rsi,8), %esi + 0x81, 0xe1, 0x0f, 0x0f, 0x0f, 0x0f, //0x00006e35 andl $252645135, %ecx + 0x01, 0xf1, //0x00006e3b addl %esi, %ecx + 0x41, 0x89, 0xcf, //0x00006e3d movl %ecx, %r15d + 0x41, 0xc1, 0xef, 0x04, //0x00006e40 shrl $4, %r15d + 0x41, 0x09, 0xcf, //0x00006e44 orl %ecx, %r15d + 0x44, 0x89, 0xfe, //0x00006e47 movl %r15d, %esi + 0xc1, 0xee, 0x08, //0x00006e4a shrl $8, %esi + 0x81, 0xe6, 0x00, 0xff, 0x00, 0x00, //0x00006e4d andl $65280, %esi + 0x41, 0x0f, 0xb6, 0xcf, //0x00006e53 movzbl %r15b, %ecx + 0x09, 0xf1, //0x00006e57 orl %esi, %ecx + 0x4c, 0x8d, 0x53, 0x06, //0x00006e59 leaq $6(%rbx), %r10 + 0x83, 0xf9, 0x7f, //0x00006e5d cmpl $127, %ecx + 0x0f, 0x86, 0xb2, 0x00, 0x00, 0x00, //0x00006e60 jbe LBB28_117 + 0x81, 0xf9, 0xff, 0x07, 0x00, 0x00, //0x00006e66 cmpl $2047, %ecx + 0x0f, 0x86, 0xc5, 0x00, 0x00, 0x00, //0x00006e6c jbe LBB28_118 + 0x44, 0x89, 0xff, //0x00006e72 movl %r15d, %edi + 0x81, 0xe7, 0x00, 0x00, 0xf8, 0x00, //0x00006e75 andl $16252928, %edi + 0x81, 0xff, 0x00, 0x00, 0xd8, 0x00, //0x00006e7b cmpl $14155776, %edi + 0x0f, 0x84, 0xe3, 0x00, 0x00, 0x00, //0x00006e81 je LBB28_119 + 0xc1, 0xee, 0x0c, //0x00006e87 shrl $12, %esi + 0x40, 0x80, 0xce, 0xe0, //0x00006e8a orb $-32, %sil + 0x40, 0x88, 0x75, 0xc8, //0x00006e8e movb %sil, $-56(%rbp) + 0xc1, 0xe9, 0x06, //0x00006e92 shrl $6, %ecx + 0x80, 0xe1, 0x3f, //0x00006e95 andb $63, %cl + 0x80, 0xc9, 0x80, //0x00006e98 orb $-128, %cl + 0x88, 0x4d, 0xc9, //0x00006e9b movb %cl, $-55(%rbp) + 0x41, 0x80, 0xe7, 0x3f, //0x00006e9e andb $63, %r15b + 0x41, 0x80, 0xcf, 0x80, //0x00006ea2 orb $-128, %r15b + 0x44, 0x88, 0x7d, 0xca, //0x00006ea6 movb %r15b, $-54(%rbp) + 0xba, 0x03, 0x00, 0x00, 0x00, //0x00006eaa movl $3, %edx + 0x41, 0x89, 0xf7, //0x00006eaf movl %esi, %r15d + 0x4c, 0x89, 0xd3, //0x00006eb2 movq %r10, %rbx + 0x4c, 0x8d, 0x54, 0x15, 0xc8, //0x00006eb5 leaq $-56(%rbp,%rdx), %r10 + 0x4d, 0x39, 0xde, //0x00006eba cmpq %r11, %r14 + 0x0f, 0x83, 0xdd, 0x01, 0x00, 0x00, //0x00006ebd jae LBB28_113 + //0x00006ec3 LBB28_107 + 0x48, 0x8d, 0x4d, 0xc8, //0x00006ec3 leaq $-56(%rbp), %rcx + 0x49, 0x39, 0xca, //0x00006ec7 cmpq %rcx, %r10 + 0x0f, 0x86, 0xd0, 0x01, 0x00, 0x00, //0x00006eca jbe LBB28_113 + 0x45, 0x38, 0x3e, //0x00006ed0 cmpb %r15b, (%r14) + 0x0f, 0x85, 0xc7, 0x01, 0x00, 0x00, //0x00006ed3 jne LBB28_113 + 0x49, 0xff, 0xc6, //0x00006ed9 incq %r14 + 0x48, 0x8d, 0x75, 0xc9, //0x00006edc leaq $-55(%rbp), %rsi + 0x4c, 0x89, 0xf7, //0x00006ee0 movq %r14, %rdi + 0x4c, 0x8b, 0x7d, 0xd0, //0x00006ee3 movq $-48(%rbp), %r15 + //0x00006ee7 LBB28_110 + 0x49, 0x89, 0xfe, //0x00006ee7 movq %rdi, %r14 + 0x48, 0x89, 0xf2, //0x00006eea movq %rsi, %rdx + 0x4c, 0x39, 0xd6, //0x00006eed cmpq %r10, %rsi + 0x0f, 0x83, 0xb2, 0x01, 0x00, 0x00, //0x00006ef0 jae LBB28_114 + 0x4d, 0x39, 0xde, //0x00006ef6 cmpq %r11, %r14 + 0x0f, 0x83, 0xa9, 0x01, 0x00, 0x00, //0x00006ef9 jae LBB28_114 + 0x41, 0x0f, 0xb6, 0x0e, //0x00006eff movzbl (%r14), %ecx + 0x49, 0x8d, 0x7e, 0x01, //0x00006f03 leaq $1(%r14), %rdi + 0x48, 0x8d, 0x72, 0x01, //0x00006f07 leaq $1(%rdx), %rsi + 0x3a, 0x0a, //0x00006f0b cmpb (%rdx), %cl + 0x0f, 0x84, 0xd4, 0xff, 0xff, 0xff, //0x00006f0d je LBB28_110 + 0xe9, 0x90, 0x01, 0x00, 0x00, //0x00006f13 jmp LBB28_114 + //0x00006f18 LBB28_117 + 0x44, 0x88, 0x7d, 0xc8, //0x00006f18 movb %r15b, $-56(%rbp) + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00006f1c movl $1, %edx + 0x4c, 0x89, 0xd3, //0x00006f21 movq %r10, %rbx + 0x4c, 0x8d, 0x54, 0x15, 0xc8, //0x00006f24 leaq $-56(%rbp,%rdx), %r10 + 0x4d, 0x39, 0xde, //0x00006f29 cmpq %r11, %r14 + 0x0f, 0x82, 0x91, 0xff, 0xff, 0xff, //0x00006f2c jb LBB28_107 + 0xe9, 0x69, 0x01, 0x00, 0x00, //0x00006f32 jmp LBB28_113 + //0x00006f37 LBB28_118 + 0xc1, 0xe9, 0x06, //0x00006f37 shrl $6, %ecx + 0x80, 0xc9, 0xc0, //0x00006f3a orb $-64, %cl + 0x88, 0x4d, 0xc8, //0x00006f3d movb %cl, $-56(%rbp) + 0x41, 0x80, 0xe7, 0x3f, //0x00006f40 andb $63, %r15b + 0x41, 0x80, 0xcf, 0x80, //0x00006f44 orb $-128, %r15b + 0x44, 0x88, 0x7d, 0xc9, //0x00006f48 movb %r15b, $-55(%rbp) + 0xba, 0x02, 0x00, 0x00, 0x00, //0x00006f4c movl $2, %edx + 0x41, 0x89, 0xcf, //0x00006f51 movl %ecx, %r15d + 0x4c, 0x89, 0xd3, //0x00006f54 movq %r10, %rbx + 0x4c, 0x8d, 0x54, 0x15, 0xc8, //0x00006f57 leaq $-56(%rbp,%rdx), %r10 + 0x4d, 0x39, 0xde, //0x00006f5c cmpq %r11, %r14 + 0x0f, 0x82, 0x5e, 0xff, 0xff, 0xff, //0x00006f5f jb LBB28_107 + 0xe9, 0x36, 0x01, 0x00, 0x00, //0x00006f65 jmp LBB28_113 + //0x00006f6a LBB28_119 + 0x48, 0x83, 0xfa, 0x06, //0x00006f6a cmpq $6, %rdx + 0x0f, 0x8c, 0x1f, 0x07, 0x00, 0x00, //0x00006f6e jl LBB28_261 + 0x81, 0xf9, 0xff, 0xdb, 0x00, 0x00, //0x00006f74 cmpl $56319, %ecx + 0x0f, 0x87, 0x13, 0x07, 0x00, 0x00, //0x00006f7a ja LBB28_261 + 0x41, 0x80, 0x3a, 0x5c, //0x00006f80 cmpb $92, (%r10) + 0x0f, 0x85, 0x09, 0x07, 0x00, 0x00, //0x00006f84 jne LBB28_261 + 0x80, 0x7b, 0x07, 0x75, //0x00006f8a cmpb $117, $7(%rbx) + 0x0f, 0x85, 0xff, 0x06, 0x00, 0x00, //0x00006f8e jne LBB28_261 + 0x4c, 0x8d, 0x53, 0x08, //0x00006f94 leaq $8(%rbx), %r10 + 0x8b, 0x53, 0x08, //0x00006f98 movl $8(%rbx), %edx + 0x89, 0xd7, //0x00006f9b movl %edx, %edi + 0xf7, 0xd7, //0x00006f9d notl %edi + 0x8d, 0xb2, 0xd0, 0xcf, 0xcf, 0xcf, //0x00006f9f leal $-808464432(%rdx), %esi + 0x81, 0xe7, 0x80, 0x80, 0x80, 0x80, //0x00006fa5 andl $-2139062144, %edi + 0x85, 0xf7, //0x00006fab testl %esi, %edi + 0x0f, 0x85, 0xd4, 0x06, 0x00, 0x00, //0x00006fad jne LBB28_260 + 0x8d, 0xb2, 0x19, 0x19, 0x19, 0x19, //0x00006fb3 leal $421075225(%rdx), %esi + 0x09, 0xd6, //0x00006fb9 orl %edx, %esi + 0xf7, 0xc6, 0x80, 0x80, 0x80, 0x80, //0x00006fbb testl $-2139062144, %esi + 0x0f, 0x85, 0xc0, 0x06, 0x00, 0x00, //0x00006fc1 jne LBB28_260 + 0x89, 0xd6, //0x00006fc7 movl %edx, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x00006fc9 andl $2139062143, %esi + 0x41, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, //0x00006fcf movl $-1061109568, %r15d + 0x41, 0x29, 0xf7, //0x00006fd5 subl %esi, %r15d + 0x44, 0x8d, 0xae, 0x46, 0x46, 0x46, 0x46, //0x00006fd8 leal $1179010630(%rsi), %r13d + 0x41, 0x21, 0xff, //0x00006fdf andl %edi, %r15d + 0x45, 0x85, 0xef, //0x00006fe2 testl %r13d, %r15d + 0x0f, 0x85, 0x9c, 0x06, 0x00, 0x00, //0x00006fe5 jne LBB28_260 + 0x41, 0xbf, 0xe0, 0xe0, 0xe0, 0xe0, //0x00006feb movl $-522133280, %r15d + 0x41, 0x29, 0xf7, //0x00006ff1 subl %esi, %r15d + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x00006ff4 addl $960051513, %esi + 0x44, 0x21, 0xff, //0x00006ffa andl %r15d, %edi + 0x85, 0xf7, //0x00006ffd testl %esi, %edi + 0x0f, 0x85, 0x82, 0x06, 0x00, 0x00, //0x00006fff jne LBB28_260 + 0x0f, 0xca, //0x00007005 bswapl %edx + 0x89, 0xd6, //0x00007007 movl %edx, %esi + 0xc1, 0xee, 0x04, //0x00007009 shrl $4, %esi + 0xf7, 0xd6, //0x0000700c notl %esi + 0x81, 0xe6, 0x01, 0x01, 0x01, 0x01, //0x0000700e andl $16843009, %esi + 0x8d, 0x34, 0xf6, //0x00007014 leal (%rsi,%rsi,8), %esi + 0x81, 0xe2, 0x0f, 0x0f, 0x0f, 0x0f, //0x00007017 andl $252645135, %edx + 0x01, 0xf2, //0x0000701d addl %esi, %edx + 0x89, 0xd6, //0x0000701f movl %edx, %esi + 0xc1, 0xee, 0x04, //0x00007021 shrl $4, %esi + 0x09, 0xd6, //0x00007024 orl %edx, %esi + 0x89, 0xf2, //0x00007026 movl %esi, %edx + 0x81, 0xe2, 0x00, 0x00, 0xfc, 0x00, //0x00007028 andl $16515072, %edx + 0x81, 0xfa, 0x00, 0x00, 0xdc, 0x00, //0x0000702e cmpl $14417920, %edx + 0x0f, 0x85, 0x59, 0x06, 0x00, 0x00, //0x00007034 jne LBB28_261 + 0x89, 0xf2, //0x0000703a movl %esi, %edx + 0xc1, 0xea, 0x08, //0x0000703c shrl $8, %edx + 0x81, 0xe2, 0x00, 0xff, 0x00, 0x00, //0x0000703f andl $65280, %edx + 0x40, 0x0f, 0xb6, 0xf6, //0x00007045 movzbl %sil, %esi + 0x09, 0xd6, //0x00007049 orl %edx, %esi + 0xc1, 0xe1, 0x0a, //0x0000704b shll $10, %ecx + 0x8d, 0x8c, 0x31, 0x00, 0x24, 0xa0, 0xfc, //0x0000704e leal $-56613888(%rcx,%rsi), %ecx + 0x41, 0x89, 0xcf, //0x00007055 movl %ecx, %r15d + 0x41, 0xc1, 0xef, 0x12, //0x00007058 shrl $18, %r15d + 0x41, 0x80, 0xcf, 0xf0, //0x0000705c orb $-16, %r15b + 0x44, 0x88, 0x7d, 0xc8, //0x00007060 movb %r15b, $-56(%rbp) + 0x89, 0xca, //0x00007064 movl %ecx, %edx + 0xc1, 0xea, 0x0c, //0x00007066 shrl $12, %edx + 0x80, 0xe2, 0x3f, //0x00007069 andb $63, %dl + 0x80, 0xca, 0x80, //0x0000706c orb $-128, %dl + 0x88, 0x55, 0xc9, //0x0000706f movb %dl, $-55(%rbp) + 0x89, 0xca, //0x00007072 movl %ecx, %edx + 0xc1, 0xea, 0x06, //0x00007074 shrl $6, %edx + 0x80, 0xe2, 0x3f, //0x00007077 andb $63, %dl + 0x80, 0xca, 0x80, //0x0000707a orb $-128, %dl + 0x88, 0x55, 0xca, //0x0000707d movb %dl, $-54(%rbp) + 0x80, 0xe1, 0x3f, //0x00007080 andb $63, %cl + 0x80, 0xc9, 0x80, //0x00007083 orb $-128, %cl + 0x88, 0x4d, 0xcb, //0x00007086 movb %cl, $-53(%rbp) + 0x48, 0x83, 0xc3, 0x0c, //0x00007089 addq $12, %rbx + 0xba, 0x04, 0x00, 0x00, 0x00, //0x0000708d movl $4, %edx + 0x4c, 0x8d, 0x54, 0x15, 0xc8, //0x00007092 leaq $-56(%rbp,%rdx), %r10 + 0x4d, 0x39, 0xde, //0x00007097 cmpq %r11, %r14 + 0x0f, 0x82, 0x23, 0xfe, 0xff, 0xff, //0x0000709a jb LBB28_107 + //0x000070a0 LBB28_113 + 0x48, 0x8d, 0x55, 0xc8, //0x000070a0 leaq $-56(%rbp), %rdx + 0x4c, 0x8b, 0x7d, 0xd0, //0x000070a4 movq $-48(%rbp), %r15 + //0x000070a8 LBB28_114 + 0x4c, 0x39, 0xd2, //0x000070a8 cmpq %r10, %rdx + 0x0f, 0x85, 0xd6, 0x02, 0x00, 0x00, //0x000070ab jne LBB28_183 + //0x000070b1 LBB28_115 + 0x49, 0x39, 0xd8, //0x000070b1 cmpq %rbx, %r8 + 0x0f, 0x86, 0x12, 0x00, 0x00, 0x00, //0x000070b4 jbe LBB28_130 + 0x4d, 0x39, 0xde, //0x000070ba cmpq %r11, %r14 + 0x0f, 0x82, 0x72, 0xfc, 0xff, 0xff, //0x000070bd jb LBB28_89 + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x000070c3 jmp LBB28_130 + //0x000070c8 LBB28_129 + 0x4c, 0x8b, 0x7d, 0xd0, //0x000070c8 movq $-48(%rbp), %r15 + //0x000070cc LBB28_130 + 0x49, 0x31, 0xd8, //0x000070cc xorq %rbx, %r8 + 0x4d, 0x31, 0xde, //0x000070cf xorq %r11, %r14 + 0x45, 0x31, 0xd2, //0x000070d2 xorl %r10d, %r10d + 0x4d, 0x09, 0xc6, //0x000070d5 orq %r8, %r14 + 0x41, 0x0f, 0x94, 0xc2, //0x000070d8 sete %r10b + //0x000070dc LBB28_131 + 0x4c, 0x8b, 0x5d, 0xc0, //0x000070dc movq $-64(%rbp), %r11 + 0x49, 0x8b, 0x73, 0x08, //0x000070e0 movq $8(%r11), %rsi + 0x48, 0x89, 0xc7, //0x000070e4 movq %rax, %rdi + 0x48, 0x29, 0xf7, //0x000070e7 subq %rsi, %rdi + 0x0f, 0x82, 0xea, 0xfb, 0xff, 0xff, //0x000070ea jb LBB28_83 + //0x000070f0 .p2align 4, 0x90 + //0x000070f0 LBB28_132 + 0x48, 0x8d, 0x58, 0x01, //0x000070f0 leaq $1(%rax), %rbx + 0x48, 0x39, 0xf3, //0x000070f4 cmpq %rsi, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000070f7 jae LBB28_136 + 0x41, 0x8a, 0x14, 0x19, //0x000070fd movb (%r9,%rbx), %dl + 0x80, 0xfa, 0x0d, //0x00007101 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00007104 je LBB28_136 + 0x80, 0xfa, 0x20, //0x0000710a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000710d je LBB28_136 + 0x80, 0xc2, 0xf7, //0x00007113 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00007116 cmpb $1, %dl + 0x0f, 0x87, 0xf3, 0x00, 0x00, 0x00, //0x00007119 ja LBB28_153 + 0x90, //0x0000711f .p2align 4, 0x90 + //0x00007120 LBB28_136 + 0x48, 0x8d, 0x58, 0x02, //0x00007120 leaq $2(%rax), %rbx + 0x48, 0x39, 0xf3, //0x00007124 cmpq %rsi, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00007127 jae LBB28_140 + 0x41, 0x8a, 0x14, 0x19, //0x0000712d movb (%r9,%rbx), %dl + 0x80, 0xfa, 0x0d, //0x00007131 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00007134 je LBB28_140 + 0x80, 0xfa, 0x20, //0x0000713a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000713d je LBB28_140 + 0x80, 0xc2, 0xf7, //0x00007143 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00007146 cmpb $1, %dl + 0x0f, 0x87, 0xc3, 0x00, 0x00, 0x00, //0x00007149 ja LBB28_153 + 0x90, //0x0000714f .p2align 4, 0x90 + //0x00007150 LBB28_140 + 0x48, 0x8d, 0x58, 0x03, //0x00007150 leaq $3(%rax), %rbx + 0x48, 0x39, 0xf3, //0x00007154 cmpq %rsi, %rbx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00007157 jae LBB28_144 + 0x41, 0x8a, 0x14, 0x19, //0x0000715d movb (%r9,%rbx), %dl + 0x80, 0xfa, 0x0d, //0x00007161 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00007164 je LBB28_144 + 0x80, 0xfa, 0x20, //0x0000716a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000716d je LBB28_144 + 0x80, 0xc2, 0xf7, //0x00007173 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00007176 cmpb $1, %dl + 0x0f, 0x87, 0x93, 0x00, 0x00, 0x00, //0x00007179 ja LBB28_153 + 0x90, //0x0000717f .p2align 4, 0x90 + //0x00007180 LBB28_144 + 0x48, 0x8d, 0x50, 0x04, //0x00007180 leaq $4(%rax), %rdx + 0x48, 0x39, 0xd6, //0x00007184 cmpq %rdx, %rsi + 0x0f, 0x86, 0x49, 0x04, 0x00, 0x00, //0x00007187 jbe LBB28_245 + 0x48, 0x39, 0xd6, //0x0000718d cmpq %rdx, %rsi + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x00007190 je LBB28_150 + 0x49, 0x8d, 0x14, 0x31, //0x00007196 leaq (%r9,%rsi), %rdx + 0x48, 0x83, 0xc7, 0x04, //0x0000719a addq $4, %rdi + 0x49, 0x8d, 0x5c, 0x01, 0x05, //0x0000719e leaq $5(%r9,%rax), %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000071a3 .p2align 4, 0x90 + //0x000071b0 LBB28_147 + 0x0f, 0xbe, 0x4b, 0xff, //0x000071b0 movsbl $-1(%rbx), %ecx + 0x83, 0xf9, 0x20, //0x000071b4 cmpl $32, %ecx + 0x0f, 0x87, 0x43, 0x00, 0x00, 0x00, //0x000071b7 ja LBB28_152 + 0x49, 0x0f, 0xa3, 0xcc, //0x000071bd btq %rcx, %r12 + 0x0f, 0x83, 0x39, 0x00, 0x00, 0x00, //0x000071c1 jae LBB28_152 + 0x48, 0xff, 0xc3, //0x000071c7 incq %rbx + 0x48, 0xff, 0xc7, //0x000071ca incq %rdi + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000071cd jne LBB28_147 + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x000071d3 jmp LBB28_151 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000071d8 .p2align 4, 0x90 + //0x000071e0 LBB28_150 + 0x4c, 0x01, 0xca, //0x000071e0 addq %r9, %rdx + //0x000071e3 LBB28_151 + 0x4c, 0x29, 0xca, //0x000071e3 subq %r9, %rdx + 0x48, 0x89, 0xd3, //0x000071e6 movq %rdx, %rbx + 0x48, 0x39, 0xf3, //0x000071e9 cmpq %rsi, %rbx + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x000071ec jb LBB28_153 + 0xe9, 0xe5, 0x03, 0x00, 0x00, //0x000071f2 jmp LBB28_247 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000071f7 .p2align 4, 0x90 + //0x00007200 LBB28_152 + 0x4c, 0x89, 0xc9, //0x00007200 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x00007203 notq %rcx + 0x48, 0x01, 0xcb, //0x00007206 addq %rcx, %rbx + 0x48, 0x39, 0xf3, //0x00007209 cmpq %rsi, %rbx + 0x0f, 0x83, 0xca, 0x03, 0x00, 0x00, //0x0000720c jae LBB28_247 + //0x00007212 LBB28_153 + 0x48, 0x8d, 0x53, 0x01, //0x00007212 leaq $1(%rbx), %rdx + 0x49, 0x89, 0x17, //0x00007216 movq %rdx, (%r15) + 0x41, 0x80, 0x3c, 0x19, 0x3a, //0x00007219 cmpb $58, (%r9,%rbx) + 0x0f, 0x85, 0xb5, 0x03, 0x00, 0x00, //0x0000721e jne LBB28_246 + 0x4d, 0x85, 0xd2, //0x00007224 testq %r10, %r10 + 0x0f, 0x85, 0x66, 0x03, 0x00, 0x00, //0x00007227 jne LBB28_243 + 0x4c, 0x89, 0xdf, //0x0000722d movq %r11, %rdi + 0x4c, 0x89, 0xfe, //0x00007230 movq %r15, %rsi + 0xe8, 0xc8, 0xe4, 0xff, 0xff, //0x00007233 callq _skip_one_fast + 0x4c, 0x8b, 0x5d, 0xc0, //0x00007238 movq $-64(%rbp), %r11 + 0x4d, 0x8b, 0x0b, //0x0000723c movq (%r11), %r9 + 0x49, 0x8b, 0x4b, 0x08, //0x0000723f movq $8(%r11), %rcx + 0x49, 0x8b, 0x07, //0x00007243 movq (%r15), %rax + 0x48, 0x89, 0xc6, //0x00007246 movq %rax, %rsi + 0x48, 0x29, 0xce, //0x00007249 subq %rcx, %rsi + 0x0f, 0x83, 0x2e, 0x00, 0x00, 0x00, //0x0000724c jae LBB28_160 + 0x41, 0x8a, 0x14, 0x01, //0x00007252 movb (%r9,%rax), %dl + 0x80, 0xfa, 0x0d, //0x00007256 cmpb $13, %dl + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00007259 je LBB28_160 + 0x80, 0xfa, 0x20, //0x0000725f cmpb $32, %dl + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x00007262 je LBB28_160 + 0x80, 0xc2, 0xf7, //0x00007268 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x0000726b cmpb $1, %dl + 0x0f, 0x86, 0x0c, 0x00, 0x00, 0x00, //0x0000726e jbe LBB28_160 + 0x48, 0x89, 0xc7, //0x00007274 movq %rax, %rdi + 0xe9, 0x4e, 0xf7, 0xff, 0xff, //0x00007277 jmp LBB28_181 + 0x90, 0x90, 0x90, 0x90, //0x0000727c .p2align 4, 0x90 + //0x00007280 LBB28_160 + 0x48, 0x8d, 0x78, 0x01, //0x00007280 leaq $1(%rax), %rdi + 0x48, 0x39, 0xcf, //0x00007284 cmpq %rcx, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00007287 jae LBB28_164 + 0x41, 0x8a, 0x14, 0x39, //0x0000728d movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x00007291 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00007294 je LBB28_164 + 0x80, 0xfa, 0x20, //0x0000729a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000729d je LBB28_164 + 0x80, 0xc2, 0xf7, //0x000072a3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000072a6 cmpb $1, %dl + 0x0f, 0x87, 0x1b, 0xf7, 0xff, 0xff, //0x000072a9 ja LBB28_181 + 0x90, //0x000072af .p2align 4, 0x90 + //0x000072b0 LBB28_164 + 0x48, 0x8d, 0x78, 0x02, //0x000072b0 leaq $2(%rax), %rdi + 0x48, 0x39, 0xcf, //0x000072b4 cmpq %rcx, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000072b7 jae LBB28_168 + 0x41, 0x8a, 0x14, 0x39, //0x000072bd movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x000072c1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000072c4 je LBB28_168 + 0x80, 0xfa, 0x20, //0x000072ca cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000072cd je LBB28_168 + 0x80, 0xc2, 0xf7, //0x000072d3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000072d6 cmpb $1, %dl + 0x0f, 0x87, 0xeb, 0xf6, 0xff, 0xff, //0x000072d9 ja LBB28_181 + 0x90, //0x000072df .p2align 4, 0x90 + //0x000072e0 LBB28_168 + 0x48, 0x8d, 0x78, 0x03, //0x000072e0 leaq $3(%rax), %rdi + 0x48, 0x39, 0xcf, //0x000072e4 cmpq %rcx, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000072e7 jae LBB28_172 + 0x41, 0x8a, 0x14, 0x39, //0x000072ed movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x000072f1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000072f4 je LBB28_172 + 0x80, 0xfa, 0x20, //0x000072fa cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000072fd je LBB28_172 + 0x80, 0xc2, 0xf7, //0x00007303 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00007306 cmpb $1, %dl + 0x0f, 0x87, 0xbb, 0xf6, 0xff, 0xff, //0x00007309 ja LBB28_181 + 0x90, //0x0000730f .p2align 4, 0x90 + //0x00007310 LBB28_172 + 0x48, 0x8d, 0x50, 0x04, //0x00007310 leaq $4(%rax), %rdx + 0x48, 0x39, 0xd1, //0x00007314 cmpq %rdx, %rcx + 0x0f, 0x86, 0xb9, 0x02, 0x00, 0x00, //0x00007317 jbe LBB28_245 + 0x48, 0x39, 0xd1, //0x0000731d cmpq %rdx, %rcx + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x00007320 je LBB28_178 + 0x49, 0x8d, 0x14, 0x09, //0x00007326 leaq (%r9,%rcx), %rdx + 0x48, 0x83, 0xc6, 0x04, //0x0000732a addq $4, %rsi + 0x49, 0x8d, 0x7c, 0x01, 0x05, //0x0000732e leaq $5(%r9,%rax), %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007333 .p2align 4, 0x90 + //0x00007340 LBB28_175 + 0x0f, 0xbe, 0x5f, 0xff, //0x00007340 movsbl $-1(%rdi), %ebx + 0x83, 0xfb, 0x20, //0x00007344 cmpl $32, %ebx + 0x0f, 0x87, 0x6b, 0xf6, 0xff, 0xff, //0x00007347 ja LBB28_180 + 0x49, 0x0f, 0xa3, 0xdc, //0x0000734d btq %rbx, %r12 + 0x0f, 0x83, 0x61, 0xf6, 0xff, 0xff, //0x00007351 jae LBB28_180 + 0x48, 0xff, 0xc7, //0x00007357 incq %rdi + 0x48, 0xff, 0xc6, //0x0000735a incq %rsi + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x0000735d jne LBB28_175 + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00007363 jmp LBB28_179 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007368 .p2align 4, 0x90 + //0x00007370 LBB28_178 + 0x4c, 0x01, 0xca, //0x00007370 addq %r9, %rdx + //0x00007373 LBB28_179 + 0x4c, 0x29, 0xca, //0x00007373 subq %r9, %rdx + 0x48, 0x89, 0xd7, //0x00007376 movq %rdx, %rdi + 0x48, 0x39, 0xcf, //0x00007379 cmpq %rcx, %rdi + 0x0f, 0x82, 0x48, 0xf6, 0xff, 0xff, //0x0000737c jb LBB28_181 + 0xe9, 0x55, 0x02, 0x00, 0x00, //0x00007382 jmp LBB28_247 + //0x00007387 LBB28_183 + 0x45, 0x31, 0xd2, //0x00007387 xorl %r10d, %r10d + 0xe9, 0x4d, 0xfd, 0xff, 0xff, //0x0000738a jmp LBB28_131 + //0x0000738f LBB28_209 + 0x49, 0x89, 0x17, //0x0000738f movq %rdx, (%r15) + 0x48, 0x89, 0xd0, //0x00007392 movq %rdx, %rax + 0xe9, 0x52, 0x00, 0x00, 0x00, //0x00007395 jmp LBB28_214 + //0x0000739a LBB28_29 + 0x4c, 0x89, 0xc8, //0x0000739a movq %r9, %rax + 0x48, 0xf7, 0xd0, //0x0000739d notq %rax + 0x48, 0x01, 0xc6, //0x000073a0 addq %rax, %rsi + 0x4c, 0x39, 0xc6, //0x000073a3 cmpq %r8, %rsi + 0x0f, 0x82, 0x16, 0xf4, 0xff, 0xff, //0x000073a6 jb LBB28_28 + 0xe9, 0x6b, 0xf4, 0xff, 0xff, //0x000073ac jmp LBB28_30 + //0x000073b1 LBB28_210 + 0x4c, 0x01, 0xca, //0x000073b1 addq %r9, %rdx + //0x000073b4 LBB28_211 + 0x4c, 0x29, 0xca, //0x000073b4 subq %r9, %rdx + 0x48, 0x89, 0xd7, //0x000073b7 movq %rdx, %rdi + 0x4c, 0x39, 0xc7, //0x000073ba cmpq %r8, %rdi + 0x0f, 0x82, 0x17, 0x00, 0x00, 0x00, //0x000073bd jb LBB28_213 + 0xe9, 0x24, 0x00, 0x00, 0x00, //0x000073c3 jmp LBB28_214 + //0x000073c8 LBB28_212 + 0x4c, 0x89, 0xc9, //0x000073c8 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x000073cb notq %rcx + 0x48, 0x01, 0xcf, //0x000073ce addq %rcx, %rdi + 0x4c, 0x39, 0xc7, //0x000073d1 cmpq %r8, %rdi + 0x0f, 0x83, 0x12, 0x00, 0x00, 0x00, //0x000073d4 jae LBB28_214 + //0x000073da LBB28_213 + 0x48, 0x8d, 0x47, 0x01, //0x000073da leaq $1(%rdi), %rax + 0x49, 0x89, 0x07, //0x000073de movq %rax, (%r15) + 0x41, 0x80, 0x3c, 0x39, 0x5d, //0x000073e1 cmpb $93, (%r9,%rdi) + 0x0f, 0x84, 0x3d, 0x02, 0x00, 0x00, //0x000073e6 je LBB28_254 + //0x000073ec LBB28_214 + 0x48, 0xff, 0xc8, //0x000073ec decq %rax + 0x49, 0x89, 0x07, //0x000073ef movq %rax, (%r15) + 0x48, 0x89, 0xc2, //0x000073f2 movq %rax, %rdx + 0x4d, 0x85, 0xf6, //0x000073f5 testq %r14, %r14 + 0x0f, 0x8e, 0x95, 0x01, 0x00, 0x00, //0x000073f8 jle LBB28_243 + 0x90, 0x90, //0x000073fe .p2align 4, 0x90 + //0x00007400 LBB28_215 + 0x4c, 0x89, 0xdf, //0x00007400 movq %r11, %rdi + 0x4c, 0x89, 0xfe, //0x00007403 movq %r15, %rsi + 0xe8, 0xf5, 0xe2, 0xff, 0xff, //0x00007406 callq _skip_one_fast + 0x4c, 0x8b, 0x5d, 0xc0, //0x0000740b movq $-64(%rbp), %r11 + 0x4d, 0x8b, 0x0b, //0x0000740f movq (%r11), %r9 + 0x49, 0x8b, 0x4b, 0x08, //0x00007412 movq $8(%r11), %rcx + 0x49, 0x8b, 0x07, //0x00007416 movq (%r15), %rax + 0x48, 0x89, 0xc6, //0x00007419 movq %rax, %rsi + 0x48, 0x29, 0xce, //0x0000741c subq %rcx, %rsi + 0x0f, 0x83, 0x2b, 0x00, 0x00, 0x00, //0x0000741f jae LBB28_220 + 0x41, 0x8a, 0x14, 0x01, //0x00007425 movb (%r9,%rax), %dl + 0x80, 0xfa, 0x0d, //0x00007429 cmpb $13, %dl + 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x0000742c je LBB28_220 + 0x80, 0xfa, 0x20, //0x00007432 cmpb $32, %dl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00007435 je LBB28_220 + 0x80, 0xc2, 0xf7, //0x0000743b addb $-9, %dl + 0x80, 0xfa, 0x01, //0x0000743e cmpb $1, %dl + 0x0f, 0x86, 0x09, 0x00, 0x00, 0x00, //0x00007441 jbe LBB28_220 + 0x48, 0x89, 0xc7, //0x00007447 movq %rax, %rdi + 0xe9, 0x23, 0x01, 0x00, 0x00, //0x0000744a jmp LBB28_241 + 0x90, //0x0000744f .p2align 4, 0x90 + //0x00007450 LBB28_220 + 0x48, 0x8d, 0x78, 0x01, //0x00007450 leaq $1(%rax), %rdi + 0x48, 0x39, 0xcf, //0x00007454 cmpq %rcx, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00007457 jae LBB28_224 + 0x41, 0x8a, 0x14, 0x39, //0x0000745d movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x00007461 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00007464 je LBB28_224 + 0x80, 0xfa, 0x20, //0x0000746a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000746d je LBB28_224 + 0x80, 0xc2, 0xf7, //0x00007473 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00007476 cmpb $1, %dl + 0x0f, 0x87, 0xf3, 0x00, 0x00, 0x00, //0x00007479 ja LBB28_241 + 0x90, //0x0000747f .p2align 4, 0x90 + //0x00007480 LBB28_224 + 0x48, 0x8d, 0x78, 0x02, //0x00007480 leaq $2(%rax), %rdi + 0x48, 0x39, 0xcf, //0x00007484 cmpq %rcx, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00007487 jae LBB28_228 + 0x41, 0x8a, 0x14, 0x39, //0x0000748d movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x00007491 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00007494 je LBB28_228 + 0x80, 0xfa, 0x20, //0x0000749a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000749d je LBB28_228 + 0x80, 0xc2, 0xf7, //0x000074a3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000074a6 cmpb $1, %dl + 0x0f, 0x87, 0xc3, 0x00, 0x00, 0x00, //0x000074a9 ja LBB28_241 + 0x90, //0x000074af .p2align 4, 0x90 + //0x000074b0 LBB28_228 + 0x48, 0x8d, 0x78, 0x03, //0x000074b0 leaq $3(%rax), %rdi + 0x48, 0x39, 0xcf, //0x000074b4 cmpq %rcx, %rdi + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000074b7 jae LBB28_232 + 0x41, 0x8a, 0x14, 0x39, //0x000074bd movb (%r9,%rdi), %dl + 0x80, 0xfa, 0x0d, //0x000074c1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000074c4 je LBB28_232 + 0x80, 0xfa, 0x20, //0x000074ca cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000074cd je LBB28_232 + 0x80, 0xc2, 0xf7, //0x000074d3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000074d6 cmpb $1, %dl + 0x0f, 0x87, 0x93, 0x00, 0x00, 0x00, //0x000074d9 ja LBB28_241 + 0x90, //0x000074df .p2align 4, 0x90 + //0x000074e0 LBB28_232 + 0x48, 0x8d, 0x50, 0x04, //0x000074e0 leaq $4(%rax), %rdx + 0x48, 0x39, 0xd1, //0x000074e4 cmpq %rdx, %rcx + 0x0f, 0x86, 0xe9, 0x00, 0x00, 0x00, //0x000074e7 jbe LBB28_245 + 0x48, 0x39, 0xd1, //0x000074ed cmpq %rdx, %rcx + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x000074f0 je LBB28_238 + 0x49, 0x8d, 0x14, 0x09, //0x000074f6 leaq (%r9,%rcx), %rdx + 0x48, 0x83, 0xc6, 0x04, //0x000074fa addq $4, %rsi + 0x49, 0x8d, 0x7c, 0x01, 0x05, //0x000074fe leaq $5(%r9,%rax), %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007503 .p2align 4, 0x90 + //0x00007510 LBB28_235 + 0x0f, 0xbe, 0x5f, 0xff, //0x00007510 movsbl $-1(%rdi), %ebx + 0x83, 0xfb, 0x20, //0x00007514 cmpl $32, %ebx + 0x0f, 0x87, 0x43, 0x00, 0x00, 0x00, //0x00007517 ja LBB28_240 + 0x49, 0x0f, 0xa3, 0xdc, //0x0000751d btq %rbx, %r12 + 0x0f, 0x83, 0x39, 0x00, 0x00, 0x00, //0x00007521 jae LBB28_240 + 0x48, 0xff, 0xc7, //0x00007527 incq %rdi + 0x48, 0xff, 0xc6, //0x0000752a incq %rsi + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x0000752d jne LBB28_235 + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00007533 jmp LBB28_239 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007538 .p2align 4, 0x90 + //0x00007540 LBB28_238 + 0x4c, 0x01, 0xca, //0x00007540 addq %r9, %rdx + //0x00007543 LBB28_239 + 0x4c, 0x29, 0xca, //0x00007543 subq %r9, %rdx + 0x48, 0x89, 0xd7, //0x00007546 movq %rdx, %rdi + 0x48, 0x39, 0xcf, //0x00007549 cmpq %rcx, %rdi + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x0000754c jb LBB28_241 + 0xe9, 0x85, 0x00, 0x00, 0x00, //0x00007552 jmp LBB28_247 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007557 .p2align 4, 0x90 + //0x00007560 LBB28_240 + 0x4c, 0x89, 0xca, //0x00007560 movq %r9, %rdx + 0x48, 0xf7, 0xd2, //0x00007563 notq %rdx + 0x48, 0x01, 0xd7, //0x00007566 addq %rdx, %rdi + 0x48, 0x39, 0xcf, //0x00007569 cmpq %rcx, %rdi + 0x0f, 0x83, 0x6a, 0x00, 0x00, 0x00, //0x0000756c jae LBB28_247 + //0x00007572 LBB28_241 + 0x48, 0x8d, 0x57, 0x01, //0x00007572 leaq $1(%rdi), %rdx + 0x49, 0x89, 0x17, //0x00007576 movq %rdx, (%r15) + 0x41, 0x8a, 0x04, 0x39, //0x00007579 movb (%r9,%rdi), %al + 0x3c, 0x2c, //0x0000757d cmpb $44, %al + 0x0f, 0x85, 0x76, 0x00, 0x00, 0x00, //0x0000757f jne LBB28_249 + 0x49, 0x83, 0xfe, 0x02, //0x00007585 cmpq $2, %r14 + 0x4d, 0x8d, 0x76, 0xff, //0x00007589 leaq $-1(%r14), %r14 + 0x0f, 0x8d, 0x6d, 0xfe, 0xff, 0xff, //0x0000758d jge LBB28_215 + //0x00007593 LBB28_243 + 0x48, 0x8b, 0x45, 0xb8, //0x00007593 movq $-72(%rbp), %rax + 0x48, 0x83, 0xc0, 0x10, //0x00007597 addq $16, %rax + 0x4c, 0x8b, 0x55, 0xa8, //0x0000759b movq $-88(%rbp), %r10 + 0x48, 0x89, 0x45, 0xb8, //0x0000759f movq %rax, $-72(%rbp) + 0x4c, 0x39, 0xd0, //0x000075a3 cmpq %r10, %rax + 0x48, 0x8b, 0x4d, 0xa0, //0x000075a6 movq $-96(%rbp), %rcx + 0x0f, 0x85, 0xde, 0xf0, 0xff, 0xff, //0x000075aa jne LBB28_2 + //0x000075b0 LBB28_244 + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000075b0 movl $1, %eax + 0x66, 0x48, 0x0f, 0x6e, 0xc0, //0x000075b5 movq %rax, %xmm0 + 0xf3, 0x0f, 0x7f, 0x01, //0x000075ba movdqu %xmm0, (%rcx) + 0x48, 0x89, 0xcf, //0x000075be movq %rcx, %rdi + 0x4c, 0x89, 0xde, //0x000075c1 movq %r11, %rsi + 0x4c, 0x89, 0xfa, //0x000075c4 movq %r15, %rdx + 0x31, 0xc9, //0x000075c7 xorl %ecx, %ecx + 0xe8, 0x92, 0xd0, 0xff, 0xff, //0x000075c9 callq _fsm_exec + 0x48, 0x89, 0xc1, //0x000075ce movq %rax, %rcx + 0xe9, 0x13, 0x00, 0x00, 0x00, //0x000075d1 jmp LBB28_248 + //0x000075d6 LBB28_245 + 0x49, 0x89, 0x17, //0x000075d6 movq %rdx, (%r15) + //0x000075d9 LBB28_246 + 0x48, 0x89, 0xd0, //0x000075d9 movq %rdx, %rax + //0x000075dc LBB28_247 + 0x48, 0xff, 0xc8, //0x000075dc decq %rax + 0x49, 0x89, 0x07, //0x000075df movq %rax, (%r15) + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000075e2 movq $-2, %rcx + //0x000075e9 LBB28_248 + 0x48, 0x89, 0xc8, //0x000075e9 movq %rcx, %rax + 0x48, 0x83, 0xc4, 0x38, //0x000075ec addq $56, %rsp + 0x5b, //0x000075f0 popq %rbx + 0x41, 0x5c, //0x000075f1 popq %r12 + 0x41, 0x5d, //0x000075f3 popq %r13 + 0x41, 0x5e, //0x000075f5 popq %r14 + 0x41, 0x5f, //0x000075f7 popq %r15 + 0x5d, //0x000075f9 popq %rbp + 0xc3, //0x000075fa retq + //0x000075fb LBB28_249 + 0x3c, 0x5d, //0x000075fb cmpb $93, %al + 0x0f, 0x85, 0xd6, 0xff, 0xff, 0xff, //0x000075fd jne LBB28_246 + 0x48, 0x89, 0xd0, //0x00007603 movq %rdx, %rax + 0xe9, 0x1e, 0x00, 0x00, 0x00, //0x00007606 jmp LBB28_254 + //0x0000760b LBB28_251 + 0x48, 0xff, 0xc8, //0x0000760b decq %rax + 0x49, 0x89, 0x07, //0x0000760e movq %rax, (%r15) + 0x48, 0xc7, 0xc1, 0xde, 0xff, 0xff, 0xff, //0x00007611 movq $-34, %rcx + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x00007618 jmp LBB28_248 + //0x0000761d LBB28_252 + 0x48, 0x89, 0xd8, //0x0000761d movq %rbx, %rax + //0x00007620 LBB28_253 + 0x80, 0xf9, 0x7d, //0x00007620 cmpb $125, %cl + 0x0f, 0x85, 0xb3, 0xff, 0xff, 0xff, //0x00007623 jne LBB28_247 + //0x00007629 LBB28_254 + 0x48, 0xff, 0xc8, //0x00007629 decq %rax + 0x49, 0x89, 0x07, //0x0000762c movq %rax, (%r15) + 0x48, 0xc7, 0xc1, 0xdf, 0xff, 0xff, 0xff, //0x0000762f movq $-33, %rcx + 0xe9, 0xae, 0xff, 0xff, 0xff, //0x00007636 jmp LBB28_248 + //0x0000763b LBB28_255 + 0x48, 0x8b, 0x45, 0xc0, //0x0000763b movq $-64(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x0000763f movq $8(%rax), %rax + 0x48, 0x8b, 0x4d, 0xd0, //0x00007643 movq $-48(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00007647 movq %rax, (%rcx) + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000764a movq $-1, %rcx + 0xe9, 0x93, 0xff, 0xff, 0xff, //0x00007651 jmp LBB28_248 + //0x00007656 LBB28_256 + 0x48, 0x83, 0xc3, 0x02, //0x00007656 addq $2, %rbx + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x0000765a movq $-2, %rcx + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00007661 jmp LBB28_259 + //0x00007666 LBB28_257 + 0x48, 0xff, 0xc3, //0x00007666 incq %rbx + 0x48, 0xc7, 0xc1, 0xfd, 0xff, 0xff, 0xff, //0x00007669 movq $-3, %rcx + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00007670 jmp LBB28_259 + //0x00007675 LBB28_258 + 0x48, 0xff, 0xc3, //0x00007675 incq %rbx + //0x00007678 LBB28_259 + 0x48, 0x8b, 0x45, 0xd0, //0x00007678 movq $-48(%rbp), %rax + 0x4c, 0x29, 0xcb, //0x0000767c subq %r9, %rbx + 0x48, 0x89, 0x18, //0x0000767f movq %rbx, (%rax) + 0xe9, 0x62, 0xff, 0xff, 0xff, //0x00007682 jmp LBB28_248 + //0x00007687 LBB28_260 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00007687 movq $-2, %rcx + 0xe9, 0x07, 0x00, 0x00, 0x00, //0x0000768e jmp LBB28_262 + //0x00007693 LBB28_261 + 0x48, 0xc7, 0xc1, 0xfc, 0xff, 0xff, 0xff, //0x00007693 movq $-4, %rcx + //0x0000769a LBB28_262 + 0x4c, 0x89, 0xd3, //0x0000769a movq %r10, %rbx + 0xe9, 0xd6, 0xff, 0xff, 0xff, //0x0000769d jmp LBB28_259 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000076a2 .p2align 4, 0x90 + //0x000076b0 _validate_utf8 + 0x55, //0x000076b0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000076b1 movq %rsp, %rbp + 0x41, 0x57, //0x000076b4 pushq %r15 + 0x41, 0x56, //0x000076b6 pushq %r14 + 0x41, 0x54, //0x000076b8 pushq %r12 + 0x53, //0x000076ba pushq %rbx + 0x50, //0x000076bb pushq %rax + 0x4c, 0x8b, 0x17, //0x000076bc movq (%rdi), %r10 + 0x4c, 0x8b, 0x5f, 0x08, //0x000076bf movq $8(%rdi), %r11 + 0x48, 0x8b, 0x0e, //0x000076c3 movq (%rsi), %rcx + 0x4c, 0x01, 0xd1, //0x000076c6 addq %r10, %rcx + 0x4f, 0x8d, 0x44, 0x1a, 0xfd, //0x000076c9 leaq $-3(%r10,%r11), %r8 + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x000076ce jmp LBB29_1 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000076d3 .p2align 4, 0x90 + //0x000076e0 LBB29_19 + 0x48, 0x01, 0xd9, //0x000076e0 addq %rbx, %rcx + //0x000076e3 LBB29_1 + 0x4c, 0x39, 0xc1, //0x000076e3 cmpq %r8, %rcx + 0x0f, 0x83, 0xe1, 0x00, 0x00, 0x00, //0x000076e6 jae LBB29_2 + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x000076ec movl $1, %ebx + 0x80, 0x39, 0x00, //0x000076f1 cmpb $0, (%rcx) + 0x0f, 0x89, 0xe6, 0xff, 0xff, 0xff, //0x000076f4 jns LBB29_19 + 0x8b, 0x01, //0x000076fa movl (%rcx), %eax + 0x89, 0xc7, //0x000076fc movl %eax, %edi + 0x81, 0xe7, 0xf0, 0xc0, 0xc0, 0x00, //0x000076fe andl $12632304, %edi + 0x81, 0xff, 0xe0, 0x80, 0x80, 0x00, //0x00007704 cmpl $8421600, %edi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000770a jne LBB29_10 + 0x89, 0xc7, //0x00007710 movl %eax, %edi + 0x81, 0xe7, 0x0f, 0x20, 0x00, 0x00, //0x00007712 andl $8207, %edi + 0x81, 0xff, 0x0d, 0x20, 0x00, 0x00, //0x00007718 cmpl $8205, %edi + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x0000771e je LBB29_10 + 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00007724 movl $3, %ebx + 0x85, 0xff, //0x00007729 testl %edi, %edi + 0x0f, 0x85, 0xaf, 0xff, 0xff, 0xff, //0x0000772b jne LBB29_19 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007731 .p2align 4, 0x90 + //0x00007740 LBB29_10 + 0x89, 0xc7, //0x00007740 movl %eax, %edi + 0x81, 0xe7, 0xe0, 0xc0, 0x00, 0x00, //0x00007742 andl $49376, %edi + 0x81, 0xff, 0xc0, 0x80, 0x00, 0x00, //0x00007748 cmpl $32960, %edi + 0x0f, 0x85, 0x10, 0x00, 0x00, 0x00, //0x0000774e jne LBB29_12 + 0x89, 0xc7, //0x00007754 movl %eax, %edi + 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00007756 movl $2, %ebx + 0x83, 0xe7, 0x1e, //0x0000775b andl $30, %edi + 0x0f, 0x85, 0x7c, 0xff, 0xff, 0xff, //0x0000775e jne LBB29_19 + //0x00007764 LBB29_12 + 0x89, 0xc7, //0x00007764 movl %eax, %edi + 0x81, 0xe7, 0xf8, 0xc0, 0xc0, 0xc0, //0x00007766 andl $-1061109512, %edi + 0x81, 0xff, 0xf0, 0x80, 0x80, 0x80, //0x0000776c cmpl $-2139062032, %edi + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x00007772 jne LBB29_16 + 0x89, 0xc7, //0x00007778 movl %eax, %edi + 0x81, 0xe7, 0x07, 0x30, 0x00, 0x00, //0x0000777a andl $12295, %edi + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x00007780 je LBB29_16 + 0xbb, 0x04, 0x00, 0x00, 0x00, //0x00007786 movl $4, %ebx + 0xa8, 0x04, //0x0000778b testb $4, %al + 0x0f, 0x84, 0x4d, 0xff, 0xff, 0xff, //0x0000778d je LBB29_19 + 0x25, 0x03, 0x30, 0x00, 0x00, //0x00007793 andl $12291, %eax + 0x0f, 0x84, 0x42, 0xff, 0xff, 0xff, //0x00007798 je LBB29_19 + //0x0000779e LBB29_16 + 0x48, 0x89, 0xcf, //0x0000779e movq %rcx, %rdi + 0x4c, 0x29, 0xd7, //0x000077a1 subq %r10, %rdi + 0x48, 0x8b, 0x1a, //0x000077a4 movq (%rdx), %rbx + 0x48, 0x81, 0xfb, 0x00, 0x10, 0x00, 0x00, //0x000077a7 cmpq $4096, %rbx + 0x0f, 0x83, 0x87, 0x01, 0x00, 0x00, //0x000077ae jae LBB29_17 + 0x48, 0x63, 0xc7, //0x000077b4 movslq %edi, %rax + 0x48, 0x8d, 0x7b, 0x01, //0x000077b7 leaq $1(%rbx), %rdi + 0x48, 0x89, 0x3a, //0x000077bb movq %rdi, (%rdx) + 0x48, 0x89, 0x44, 0xda, 0x08, //0x000077be movq %rax, $8(%rdx,%rbx,8) + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x000077c3 movl $1, %ebx + 0xe9, 0x13, 0xff, 0xff, 0xff, //0x000077c8 jmp LBB29_19 + //0x000077cd LBB29_2 + 0x4d, 0x01, 0xd3, //0x000077cd addq %r10, %r11 + 0x4c, 0x39, 0xd9, //0x000077d0 cmpq %r11, %rcx + 0x0f, 0x83, 0x3e, 0x01, 0x00, 0x00, //0x000077d3 jae LBB29_36 + 0x4c, 0x8d, 0x45, 0xdc, //0x000077d9 leaq $-36(%rbp), %r8 + 0x4c, 0x8d, 0x4d, 0xda, //0x000077dd leaq $-38(%rbp), %r9 + 0xe9, 0x16, 0x00, 0x00, 0x00, //0x000077e1 jmp LBB29_4 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000077e6 .p2align 4, 0x90 + //0x000077f0 LBB29_5 + 0x48, 0xff, 0xc1, //0x000077f0 incq %rcx + 0x4c, 0x39, 0xd9, //0x000077f3 cmpq %r11, %rcx + 0x0f, 0x83, 0x1b, 0x01, 0x00, 0x00, //0x000077f6 jae LBB29_36 + //0x000077fc LBB29_4 + 0x80, 0x39, 0x00, //0x000077fc cmpb $0, (%rcx) + 0x0f, 0x89, 0xeb, 0xff, 0xff, 0xff, //0x000077ff jns LBB29_5 + 0xc6, 0x45, 0xdc, 0x00, //0x00007805 movb $0, $-36(%rbp) + 0xc6, 0x45, 0xda, 0x00, //0x00007809 movb $0, $-38(%rbp) + 0x4c, 0x89, 0xdb, //0x0000780d movq %r11, %rbx + 0x48, 0x29, 0xcb, //0x00007810 subq %rcx, %rbx + 0x48, 0x83, 0xfb, 0x02, //0x00007813 cmpq $2, %rbx + 0x0f, 0x82, 0x35, 0x00, 0x00, 0x00, //0x00007817 jb LBB29_21 + 0x44, 0x0f, 0xb6, 0x21, //0x0000781d movzbl (%rcx), %r12d + 0x44, 0x0f, 0xb6, 0x71, 0x01, //0x00007821 movzbl $1(%rcx), %r14d + 0x44, 0x88, 0x65, 0xdc, //0x00007826 movb %r12b, $-36(%rbp) + 0x4c, 0x8d, 0x79, 0x02, //0x0000782a leaq $2(%rcx), %r15 + 0x48, 0x83, 0xc3, 0xfe, //0x0000782e addq $-2, %rbx + 0x4c, 0x89, 0xcf, //0x00007832 movq %r9, %rdi + 0x48, 0x85, 0xdb, //0x00007835 testq %rbx, %rbx + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x00007838 je LBB29_24 + //0x0000783e LBB29_25 + 0x41, 0x0f, 0xb6, 0x07, //0x0000783e movzbl (%r15), %eax + 0x88, 0x07, //0x00007842 movb %al, (%rdi) + 0x44, 0x0f, 0xb6, 0x65, 0xdc, //0x00007844 movzbl $-36(%rbp), %r12d + 0x0f, 0xb6, 0x7d, 0xda, //0x00007849 movzbl $-38(%rbp), %edi + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x0000784d jmp LBB29_26 + //0x00007852 LBB29_21 + 0x45, 0x31, 0xe4, //0x00007852 xorl %r12d, %r12d + 0x45, 0x31, 0xf6, //0x00007855 xorl %r14d, %r14d + 0x4c, 0x89, 0xc7, //0x00007858 movq %r8, %rdi + 0x49, 0x89, 0xcf, //0x0000785b movq %rcx, %r15 + 0x48, 0x85, 0xdb, //0x0000785e testq %rbx, %rbx + 0x0f, 0x85, 0xd7, 0xff, 0xff, 0xff, //0x00007861 jne LBB29_25 + //0x00007867 LBB29_24 + 0x31, 0xff, //0x00007867 xorl %edi, %edi + //0x00007869 LBB29_26 + 0x40, 0x0f, 0xb6, 0xc7, //0x00007869 movzbl %dil, %eax + 0xc1, 0xe0, 0x10, //0x0000786d shll $16, %eax + 0x41, 0x0f, 0xb6, 0xde, //0x00007870 movzbl %r14b, %ebx + 0xc1, 0xe3, 0x08, //0x00007874 shll $8, %ebx + 0x41, 0x0f, 0xb6, 0xfc, //0x00007877 movzbl %r12b, %edi + 0x09, 0xdf, //0x0000787b orl %ebx, %edi + 0x09, 0xf8, //0x0000787d orl %edi, %eax + 0x25, 0xf0, 0xc0, 0xc0, 0x00, //0x0000787f andl $12632304, %eax + 0x3d, 0xe0, 0x80, 0x80, 0x00, //0x00007884 cmpl $8421600, %eax + 0x0f, 0x85, 0x21, 0x00, 0x00, 0x00, //0x00007889 jne LBB29_29 + 0x89, 0xf8, //0x0000788f movl %edi, %eax + 0x25, 0x0f, 0x20, 0x00, 0x00, //0x00007891 andl $8207, %eax + 0x3d, 0x0d, 0x20, 0x00, 0x00, //0x00007896 cmpl $8205, %eax + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000789b je LBB29_29 + 0xbb, 0x03, 0x00, 0x00, 0x00, //0x000078a1 movl $3, %ebx + 0x85, 0xc0, //0x000078a6 testl %eax, %eax + 0x0f, 0x85, 0x23, 0x00, 0x00, 0x00, //0x000078a8 jne LBB29_34 + 0x90, 0x90, //0x000078ae .p2align 4, 0x90 + //0x000078b0 LBB29_29 + 0x41, 0xf6, 0xc4, 0x1e, //0x000078b0 testb $30, %r12b + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x000078b4 je LBB29_31 + 0x81, 0xe7, 0xe0, 0xc0, 0x00, 0x00, //0x000078ba andl $49376, %edi + 0xbb, 0x02, 0x00, 0x00, 0x00, //0x000078c0 movl $2, %ebx + 0x81, 0xff, 0xc0, 0x80, 0x00, 0x00, //0x000078c5 cmpl $32960, %edi + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x000078cb jne LBB29_31 + //0x000078d1 LBB29_34 + 0x48, 0x01, 0xd9, //0x000078d1 addq %rbx, %rcx + 0x4c, 0x39, 0xd9, //0x000078d4 cmpq %r11, %rcx + 0x0f, 0x82, 0x1f, 0xff, 0xff, 0xff, //0x000078d7 jb LBB29_4 + 0xe9, 0x35, 0x00, 0x00, 0x00, //0x000078dd jmp LBB29_36 + //0x000078e2 LBB29_31 + 0x48, 0x89, 0xc8, //0x000078e2 movq %rcx, %rax + 0x4c, 0x29, 0xd0, //0x000078e5 subq %r10, %rax + 0x48, 0x8b, 0x3a, //0x000078e8 movq (%rdx), %rdi + 0x48, 0x81, 0xff, 0x00, 0x10, 0x00, 0x00, //0x000078eb cmpq $4096, %rdi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x000078f2 jae LBB29_32 + 0x48, 0x98, //0x000078f8 cltq + 0x48, 0x8d, 0x5f, 0x01, //0x000078fa leaq $1(%rdi), %rbx + 0x48, 0x89, 0x1a, //0x000078fe movq %rbx, (%rdx) + 0x48, 0x89, 0x44, 0xfa, 0x08, //0x00007901 movq %rax, $8(%rdx,%rdi,8) + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00007906 movl $1, %ebx + 0x48, 0x01, 0xd9, //0x0000790b addq %rbx, %rcx + 0x4c, 0x39, 0xd9, //0x0000790e cmpq %r11, %rcx + 0x0f, 0x82, 0xe5, 0xfe, 0xff, 0xff, //0x00007911 jb LBB29_4 + //0x00007917 LBB29_36 + 0x4c, 0x29, 0xd1, //0x00007917 subq %r10, %rcx + 0x48, 0x89, 0x0e, //0x0000791a movq %rcx, (%rsi) + 0x31, 0xc0, //0x0000791d xorl %eax, %eax + //0x0000791f LBB29_37 + 0x48, 0x83, 0xc4, 0x08, //0x0000791f addq $8, %rsp + 0x5b, //0x00007923 popq %rbx + 0x41, 0x5c, //0x00007924 popq %r12 + 0x41, 0x5e, //0x00007926 popq %r14 + 0x41, 0x5f, //0x00007928 popq %r15 + 0x5d, //0x0000792a popq %rbp + 0xc3, //0x0000792b retq + //0x0000792c LBB29_32 + 0x48, 0x89, 0x06, //0x0000792c movq %rax, (%rsi) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000792f movq $-1, %rax + 0xe9, 0xe4, 0xff, 0xff, 0xff, //0x00007936 jmp LBB29_37 + //0x0000793b LBB29_17 + 0x48, 0x89, 0x3e, //0x0000793b movq %rdi, (%rsi) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000793e movq $-1, %rax + 0xe9, 0xd5, 0xff, 0xff, 0xff, //0x00007945 jmp LBB29_37 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000794a .p2align 4, 0x90 + //0x00007950 _validate_utf8_fast + 0x55, //0x00007950 pushq %rbp + 0x48, 0x89, 0xe5, //0x00007951 movq %rsp, %rbp + 0x53, //0x00007954 pushq %rbx + 0x50, //0x00007955 pushq %rax + 0x4c, 0x8b, 0x17, //0x00007956 movq (%rdi), %r10 + 0x4c, 0x8b, 0x5f, 0x08, //0x00007959 movq $8(%rdi), %r11 + 0x4b, 0x8d, 0x74, 0x1a, 0xfd, //0x0000795d leaq $-3(%r10,%r11), %rsi + 0x4c, 0x89, 0xd0, //0x00007962 movq %r10, %rax + 0x49, 0x39, 0xf2, //0x00007965 cmpq %rsi, %r10 + 0x0f, 0x83, 0xe0, 0x00, 0x00, 0x00, //0x00007968 jae LBB30_14 + 0x4c, 0x89, 0xd0, //0x0000796e movq %r10, %rax + 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00007971 jmp LBB30_3 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007976 .p2align 4, 0x90 + //0x00007980 LBB30_2 + 0x48, 0x01, 0xd0, //0x00007980 addq %rdx, %rax + 0x48, 0x39, 0xf0, //0x00007983 cmpq %rsi, %rax + 0x0f, 0x83, 0xc2, 0x00, 0x00, 0x00, //0x00007986 jae LBB30_14 + //0x0000798c LBB30_3 + 0xba, 0x01, 0x00, 0x00, 0x00, //0x0000798c movl $1, %edx + 0x80, 0x38, 0x00, //0x00007991 cmpb $0, (%rax) + 0x0f, 0x89, 0xe6, 0xff, 0xff, 0xff, //0x00007994 jns LBB30_2 + 0x8b, 0x38, //0x0000799a movl (%rax), %edi + 0x89, 0xf9, //0x0000799c movl %edi, %ecx + 0x81, 0xe1, 0xf0, 0xc0, 0xc0, 0x00, //0x0000799e andl $12632304, %ecx + 0x81, 0xf9, 0xe0, 0x80, 0x80, 0x00, //0x000079a4 cmpl $8421600, %ecx + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000079aa jne LBB30_7 + 0x89, 0xf9, //0x000079b0 movl %edi, %ecx + 0x81, 0xe1, 0x0f, 0x20, 0x00, 0x00, //0x000079b2 andl $8207, %ecx + 0x81, 0xf9, 0x0d, 0x20, 0x00, 0x00, //0x000079b8 cmpl $8205, %ecx + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x000079be je LBB30_7 + 0xba, 0x03, 0x00, 0x00, 0x00, //0x000079c4 movl $3, %edx + 0x85, 0xc9, //0x000079c9 testl %ecx, %ecx + 0x0f, 0x85, 0xaf, 0xff, 0xff, 0xff, //0x000079cb jne LBB30_2 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000079d1 .p2align 4, 0x90 + //0x000079e0 LBB30_7 + 0x89, 0xf9, //0x000079e0 movl %edi, %ecx + 0x81, 0xe1, 0xe0, 0xc0, 0x00, 0x00, //0x000079e2 andl $49376, %ecx + 0x81, 0xf9, 0xc0, 0x80, 0x00, 0x00, //0x000079e8 cmpl $32960, %ecx + 0x0f, 0x85, 0x10, 0x00, 0x00, 0x00, //0x000079ee jne LBB30_9 + 0x89, 0xf9, //0x000079f4 movl %edi, %ecx + 0xba, 0x02, 0x00, 0x00, 0x00, //0x000079f6 movl $2, %edx + 0x83, 0xe1, 0x1e, //0x000079fb andl $30, %ecx + 0x0f, 0x85, 0x7c, 0xff, 0xff, 0xff, //0x000079fe jne LBB30_2 + //0x00007a04 LBB30_9 + 0x89, 0xf9, //0x00007a04 movl %edi, %ecx + 0x81, 0xe1, 0xf8, 0xc0, 0xc0, 0xc0, //0x00007a06 andl $-1061109512, %ecx + 0x81, 0xf9, 0xf0, 0x80, 0x80, 0x80, //0x00007a0c cmpl $-2139062032, %ecx + 0x0f, 0x85, 0x29, 0x00, 0x00, 0x00, //0x00007a12 jne LBB30_13 + 0x89, 0xf9, //0x00007a18 movl %edi, %ecx + 0x81, 0xe1, 0x07, 0x30, 0x00, 0x00, //0x00007a1a andl $12295, %ecx + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00007a20 je LBB30_13 + 0xba, 0x04, 0x00, 0x00, 0x00, //0x00007a26 movl $4, %edx + 0x40, 0xf6, 0xc7, 0x04, //0x00007a2b testb $4, %dil + 0x0f, 0x84, 0x4b, 0xff, 0xff, 0xff, //0x00007a2f je LBB30_2 + 0x81, 0xe7, 0x03, 0x30, 0x00, 0x00, //0x00007a35 andl $12291, %edi + 0x0f, 0x84, 0x3f, 0xff, 0xff, 0xff, //0x00007a3b je LBB30_2 + //0x00007a41 LBB30_13 + 0x48, 0xf7, 0xd0, //0x00007a41 notq %rax + 0x4c, 0x01, 0xd0, //0x00007a44 addq %r10, %rax + 0x48, 0x83, 0xc4, 0x08, //0x00007a47 addq $8, %rsp + 0x5b, //0x00007a4b popq %rbx + 0x5d, //0x00007a4c popq %rbp + 0xc3, //0x00007a4d retq + //0x00007a4e LBB30_14 + 0x4d, 0x01, 0xd3, //0x00007a4e addq %r10, %r11 + 0x4c, 0x39, 0xd8, //0x00007a51 cmpq %r11, %rax + 0x0f, 0x83, 0x03, 0x01, 0x00, 0x00, //0x00007a54 jae LBB30_30 + 0x4c, 0x8d, 0x45, 0xf4, //0x00007a5a leaq $-12(%rbp), %r8 + 0x4c, 0x8d, 0x4d, 0xf2, //0x00007a5e leaq $-14(%rbp), %r9 + 0xe9, 0x15, 0x00, 0x00, 0x00, //0x00007a62 jmp LBB30_17 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007a67 .p2align 4, 0x90 + //0x00007a70 LBB30_16 + 0x48, 0xff, 0xc0, //0x00007a70 incq %rax + 0x4c, 0x39, 0xd8, //0x00007a73 cmpq %r11, %rax + 0x0f, 0x83, 0xe1, 0x00, 0x00, 0x00, //0x00007a76 jae LBB30_30 + //0x00007a7c LBB30_17 + 0x80, 0x38, 0x00, //0x00007a7c cmpb $0, (%rax) + 0x0f, 0x89, 0xeb, 0xff, 0xff, 0xff, //0x00007a7f jns LBB30_16 + 0xc6, 0x45, 0xf4, 0x00, //0x00007a85 movb $0, $-12(%rbp) + 0xc6, 0x45, 0xf2, 0x00, //0x00007a89 movb $0, $-14(%rbp) + 0x4c, 0x89, 0xda, //0x00007a8d movq %r11, %rdx + 0x48, 0x29, 0xc2, //0x00007a90 subq %rax, %rdx + 0x48, 0x83, 0xfa, 0x02, //0x00007a93 cmpq $2, %rdx + 0x0f, 0x82, 0x31, 0x00, 0x00, 0x00, //0x00007a97 jb LBB30_21 + 0x0f, 0xb6, 0x30, //0x00007a9d movzbl (%rax), %esi + 0x0f, 0xb6, 0x78, 0x01, //0x00007aa0 movzbl $1(%rax), %edi + 0x40, 0x88, 0x75, 0xf4, //0x00007aa4 movb %sil, $-12(%rbp) + 0x48, 0x8d, 0x48, 0x02, //0x00007aa8 leaq $2(%rax), %rcx + 0x48, 0x83, 0xc2, 0xfe, //0x00007aac addq $-2, %rdx + 0x4c, 0x89, 0xcb, //0x00007ab0 movq %r9, %rbx + 0x48, 0x85, 0xd2, //0x00007ab3 testq %rdx, %rdx + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00007ab6 je LBB30_22 + //0x00007abc LBB30_20 + 0x0f, 0xb6, 0x09, //0x00007abc movzbl (%rcx), %ecx + 0x88, 0x0b, //0x00007abf movb %cl, (%rbx) + 0x0f, 0xb6, 0x75, 0xf4, //0x00007ac1 movzbl $-12(%rbp), %esi + 0x0f, 0xb6, 0x4d, 0xf2, //0x00007ac5 movzbl $-14(%rbp), %ecx + 0xe9, 0x15, 0x00, 0x00, 0x00, //0x00007ac9 jmp LBB30_23 + //0x00007ace LBB30_21 + 0x31, 0xf6, //0x00007ace xorl %esi, %esi + 0x31, 0xff, //0x00007ad0 xorl %edi, %edi + 0x4c, 0x89, 0xc3, //0x00007ad2 movq %r8, %rbx + 0x48, 0x89, 0xc1, //0x00007ad5 movq %rax, %rcx + 0x48, 0x85, 0xd2, //0x00007ad8 testq %rdx, %rdx + 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x00007adb jne LBB30_20 + //0x00007ae1 LBB30_22 + 0x31, 0xc9, //0x00007ae1 xorl %ecx, %ecx + //0x00007ae3 LBB30_23 + 0x0f, 0xb6, 0xc9, //0x00007ae3 movzbl %cl, %ecx + 0xc1, 0xe1, 0x10, //0x00007ae6 shll $16, %ecx + 0x40, 0x0f, 0xb6, 0xff, //0x00007ae9 movzbl %dil, %edi + 0xc1, 0xe7, 0x08, //0x00007aed shll $8, %edi + 0x40, 0x0f, 0xb6, 0xd6, //0x00007af0 movzbl %sil, %edx + 0x09, 0xfa, //0x00007af4 orl %edi, %edx + 0x09, 0xd1, //0x00007af6 orl %edx, %ecx + 0x81, 0xe1, 0xf0, 0xc0, 0xc0, 0x00, //0x00007af8 andl $12632304, %ecx + 0x81, 0xf9, 0xe0, 0x80, 0x80, 0x00, //0x00007afe cmpl $8421600, %ecx + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x00007b04 jne LBB30_26 + 0x89, 0xd7, //0x00007b0a movl %edx, %edi + 0x81, 0xe7, 0x0f, 0x20, 0x00, 0x00, //0x00007b0c andl $8207, %edi + 0x81, 0xff, 0x0d, 0x20, 0x00, 0x00, //0x00007b12 cmpl $8205, %edi + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00007b18 je LBB30_26 + 0xb9, 0x03, 0x00, 0x00, 0x00, //0x00007b1e movl $3, %ecx + 0x85, 0xff, //0x00007b23 testl %edi, %edi + 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x00007b25 jne LBB30_28 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007b2b .p2align 4, 0x90 + //0x00007b30 LBB30_26 + 0x40, 0xf6, 0xc6, 0x1e, //0x00007b30 testb $30, %sil + 0x0f, 0x84, 0x07, 0xff, 0xff, 0xff, //0x00007b34 je LBB30_13 + 0x81, 0xe2, 0xe0, 0xc0, 0x00, 0x00, //0x00007b3a andl $49376, %edx + 0xb9, 0x02, 0x00, 0x00, 0x00, //0x00007b40 movl $2, %ecx + 0x81, 0xfa, 0xc0, 0x80, 0x00, 0x00, //0x00007b45 cmpl $32960, %edx + 0x0f, 0x85, 0xf0, 0xfe, 0xff, 0xff, //0x00007b4b jne LBB30_13 + //0x00007b51 LBB30_28 + 0x48, 0x01, 0xc8, //0x00007b51 addq %rcx, %rax + 0x4c, 0x39, 0xd8, //0x00007b54 cmpq %r11, %rax + 0x0f, 0x82, 0x1f, 0xff, 0xff, 0xff, //0x00007b57 jb LBB30_17 + //0x00007b5d LBB30_30 + 0x31, 0xc0, //0x00007b5d xorl %eax, %eax + 0x48, 0x83, 0xc4, 0x08, //0x00007b5f addq $8, %rsp + 0x5b, //0x00007b63 popq %rbx + 0x5d, //0x00007b64 popq %rbp + 0xc3, //0x00007b65 retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00007b66 .p2align 4, 0x00 + //0x00007b70 LCPI31_0 + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, //0x00007b70 QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' + //0x00007b80 .p2align 4, 0x90 + //0x00007b80 _f32toa + 0x55, //0x00007b80 pushq %rbp + 0x48, 0x89, 0xe5, //0x00007b81 movq %rsp, %rbp + 0x41, 0x57, //0x00007b84 pushq %r15 + 0x41, 0x56, //0x00007b86 pushq %r14 + 0x41, 0x55, //0x00007b88 pushq %r13 + 0x41, 0x54, //0x00007b8a pushq %r12 + 0x53, //0x00007b8c pushq %rbx + 0x66, 0x0f, 0x7e, 0xc0, //0x00007b8d movd %xmm0, %eax + 0x89, 0xc1, //0x00007b91 movl %eax, %ecx + 0xc1, 0xe9, 0x17, //0x00007b93 shrl $23, %ecx + 0x0f, 0xb6, 0xd9, //0x00007b96 movzbl %cl, %ebx + 0x81, 0xfb, 0xff, 0x00, 0x00, 0x00, //0x00007b99 cmpl $255, %ebx + 0x0f, 0x84, 0xbc, 0x0c, 0x00, 0x00, //0x00007b9f je LBB31_139 + 0xc6, 0x07, 0x2d, //0x00007ba5 movb $45, (%rdi) + 0x41, 0x89, 0xc1, //0x00007ba8 movl %eax, %r9d + 0x41, 0xc1, 0xe9, 0x1f, //0x00007bab shrl $31, %r9d + 0x4e, 0x8d, 0x04, 0x0f, //0x00007baf leaq (%rdi,%r9), %r8 + 0xa9, 0xff, 0xff, 0xff, 0x7f, //0x00007bb3 testl $2147483647, %eax + 0x0f, 0x84, 0xc6, 0x01, 0x00, 0x00, //0x00007bb8 je LBB31_14 + 0x25, 0xff, 0xff, 0x7f, 0x00, //0x00007bbe andl $8388607, %eax + 0x85, 0xdb, //0x00007bc3 testl %ebx, %ebx + 0x0f, 0x84, 0x9e, 0x0c, 0x00, 0x00, //0x00007bc5 je LBB31_140 + 0x8d, 0xb0, 0x00, 0x00, 0x80, 0x00, //0x00007bcb leal $8388608(%rax), %esi + 0x44, 0x8d, 0xbb, 0x6a, 0xff, 0xff, 0xff, //0x00007bd1 leal $-150(%rbx), %r15d + 0x8d, 0x4b, 0x81, //0x00007bd8 leal $-127(%rbx), %ecx + 0x83, 0xf9, 0x17, //0x00007bdb cmpl $23, %ecx + 0x0f, 0x87, 0x1b, 0x00, 0x00, 0x00, //0x00007bde ja LBB31_5 + 0xb9, 0x96, 0x00, 0x00, 0x00, //0x00007be4 movl $150, %ecx + 0x29, 0xd9, //0x00007be9 subl %ebx, %ecx + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00007beb movq $-1, %rdx + 0x48, 0xd3, 0xe2, //0x00007bf2 shlq %cl, %rdx + 0xf7, 0xd2, //0x00007bf5 notl %edx + 0x85, 0xf2, //0x00007bf7 testl %esi, %edx + 0x0f, 0x84, 0x12, 0x04, 0x00, 0x00, //0x00007bf9 je LBB31_32 + //0x00007bff LBB31_5 + 0x41, 0x89, 0xf6, //0x00007bff movl %esi, %r14d + 0x41, 0x83, 0xe6, 0x01, //0x00007c02 andl $1, %r14d + 0x85, 0xc0, //0x00007c06 testl %eax, %eax + 0x0f, 0x94, 0xc0, //0x00007c08 sete %al + 0x83, 0xfb, 0x01, //0x00007c0b cmpl $1, %ebx + 0x0f, 0x97, 0xc1, //0x00007c0e seta %cl + 0x20, 0xc1, //0x00007c11 andb %al, %cl + 0x0f, 0xb6, 0xc9, //0x00007c13 movzbl %cl, %ecx + 0x41, 0x89, 0xf2, //0x00007c16 movl %esi, %r10d + 0x41, 0xc1, 0xe2, 0x02, //0x00007c19 shll $2, %r10d + 0x8d, 0x44, 0xb1, 0xfe, //0x00007c1d leal $-2(%rcx,%rsi,4), %eax + 0x45, 0x69, 0xdf, 0x13, 0x44, 0x13, 0x00, //0x00007c21 imull $1262611, %r15d, %r11d + 0x31, 0xd2, //0x00007c28 xorl %edx, %edx + 0x84, 0xc9, //0x00007c2a testb %cl, %cl + 0xb9, 0xff, 0xfe, 0x07, 0x00, //0x00007c2c movl $524031, %ecx + 0x0f, 0x44, 0xca, //0x00007c31 cmovel %edx, %ecx + 0x41, 0x29, 0xcb, //0x00007c34 subl %ecx, %r11d + 0x41, 0xc1, 0xfb, 0x16, //0x00007c37 sarl $22, %r11d + 0x41, 0x69, 0xcb, 0xb1, 0x6c, 0xe5, 0xff, //0x00007c3b imull $-1741647, %r11d, %ecx + 0xc1, 0xe9, 0x13, //0x00007c42 shrl $19, %ecx + 0x44, 0x01, 0xf9, //0x00007c45 addl %r15d, %ecx + 0xba, 0x1f, 0x00, 0x00, 0x00, //0x00007c48 movl $31, %edx + 0x44, 0x29, 0xda, //0x00007c4d subl %r11d, %edx + 0x48, 0x63, 0xd2, //0x00007c50 movslq %edx, %rdx + 0x48, 0x8d, 0x1d, 0x46, 0xb8, 0x00, 0x00, //0x00007c53 leaq $47174(%rip), %rbx /* _pow10_ceil_sig_f32.g+0(%rip) */ + 0xfe, 0xc1, //0x00007c5a incb %cl + 0xd3, 0xe0, //0x00007c5c shll %cl, %eax + 0x4c, 0x8b, 0x24, 0xd3, //0x00007c5e movq (%rbx,%rdx,8), %r12 + 0x49, 0xf7, 0xe4, //0x00007c62 mulq %r12 + 0x48, 0xc1, 0xe8, 0x20, //0x00007c65 shrq $32, %rax + 0x31, 0xdb, //0x00007c69 xorl %ebx, %ebx + 0x83, 0xf8, 0x01, //0x00007c6b cmpl $1, %eax + 0x0f, 0x97, 0xc3, //0x00007c6e seta %bl + 0x41, 0xd3, 0xe2, //0x00007c71 shll %cl, %r10d + 0x09, 0xd3, //0x00007c74 orl %edx, %ebx + 0x4c, 0x89, 0xd0, //0x00007c76 movq %r10, %rax + 0x49, 0xf7, 0xe4, //0x00007c79 mulq %r12 + 0x49, 0x89, 0xd2, //0x00007c7c movq %rdx, %r10 + 0x48, 0xc1, 0xe8, 0x20, //0x00007c7f shrq $32, %rax + 0x45, 0x31, 0xff, //0x00007c83 xorl %r15d, %r15d + 0x83, 0xf8, 0x01, //0x00007c86 cmpl $1, %eax + 0x41, 0x0f, 0x97, 0xc7, //0x00007c89 seta %r15b + 0x8d, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x00, //0x00007c8d leal $2(,%rsi,4), %eax + 0xd3, 0xe0, //0x00007c94 shll %cl, %eax + 0x45, 0x09, 0xd7, //0x00007c96 orl %r10d, %r15d + 0x49, 0xf7, 0xe4, //0x00007c99 mulq %r12 + 0x48, 0xc1, 0xe8, 0x20, //0x00007c9c shrq $32, %rax + 0x31, 0xc9, //0x00007ca0 xorl %ecx, %ecx + 0x83, 0xf8, 0x01, //0x00007ca2 cmpl $1, %eax + 0x0f, 0x97, 0xc1, //0x00007ca5 seta %cl + 0x09, 0xd1, //0x00007ca8 orl %edx, %ecx + 0x44, 0x01, 0xf3, //0x00007caa addl %r14d, %ebx + 0x44, 0x29, 0xf1, //0x00007cad subl %r14d, %ecx + 0x41, 0x83, 0xff, 0x28, //0x00007cb0 cmpl $40, %r15d + 0x0f, 0x82, 0x9a, 0x00, 0x00, 0x00, //0x00007cb4 jb LBB31_12 + 0x44, 0x89, 0xd2, //0x00007cba movl %r10d, %edx + 0xb8, 0xcd, 0xcc, 0xcc, 0xcc, //0x00007cbd movl $3435973837, %eax + 0x48, 0x0f, 0xaf, 0xc2, //0x00007cc2 imulq %rdx, %rax + 0x48, 0xc1, 0xe8, 0x25, //0x00007cc6 shrq $37, %rax + 0x41, 0x89, 0xde, //0x00007cca movl %ebx, %r14d + 0x48, 0x8d, 0x34, 0xc5, 0x00, 0x00, 0x00, 0x00, //0x00007ccd leaq (,%rax,8), %rsi + 0x48, 0x8d, 0x14, 0xb6, //0x00007cd5 leaq (%rsi,%rsi,4), %rdx + 0x4c, 0x39, 0xf2, //0x00007cd9 cmpq %r14, %rdx + 0x41, 0x0f, 0x93, 0xc4, //0x00007cdc setae %r12b + 0x4c, 0x8d, 0x74, 0xb6, 0x28, //0x00007ce0 leaq $40(%rsi,%rsi,4), %r14 + 0x89, 0xce, //0x00007ce5 movl %ecx, %esi + 0x49, 0x39, 0xf6, //0x00007ce7 cmpq %rsi, %r14 + 0x0f, 0x96, 0xc2, //0x00007cea setbe %dl + 0x41, 0x38, 0xd4, //0x00007ced cmpb %dl, %r12b + 0x0f, 0x84, 0x5e, 0x00, 0x00, 0x00, //0x00007cf0 je LBB31_12 + 0x45, 0x31, 0xed, //0x00007cf6 xorl %r13d, %r13d + 0x49, 0x39, 0xf6, //0x00007cf9 cmpq %rsi, %r14 + 0x41, 0x0f, 0x96, 0xc5, //0x00007cfc setbe %r13b + 0x41, 0x01, 0xc5, //0x00007d00 addl %eax, %r13d + 0x41, 0xff, 0xc3, //0x00007d03 incl %r11d + 0x41, 0x81, 0xfd, 0xa0, 0x86, 0x01, 0x00, //0x00007d06 cmpl $100000, %r13d + 0x0f, 0x83, 0xb0, 0x00, 0x00, 0x00, //0x00007d0d jae LBB31_18 + //0x00007d13 LBB31_8 + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00007d13 movl $1, %eax + 0x41, 0x83, 0xfd, 0x0a, //0x00007d18 cmpl $10, %r13d + 0x0f, 0x82, 0xd4, 0x00, 0x00, 0x00, //0x00007d1c jb LBB31_22 + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00007d22 movl $2, %eax + 0x41, 0x83, 0xfd, 0x64, //0x00007d27 cmpl $100, %r13d + 0x0f, 0x82, 0xc5, 0x00, 0x00, 0x00, //0x00007d2b jb LBB31_22 + 0xb8, 0x03, 0x00, 0x00, 0x00, //0x00007d31 movl $3, %eax + 0x41, 0x81, 0xfd, 0xe8, 0x03, 0x00, 0x00, //0x00007d36 cmpl $1000, %r13d + 0x0f, 0x82, 0xb3, 0x00, 0x00, 0x00, //0x00007d3d jb LBB31_22 + 0x41, 0x81, 0xfd, 0x10, 0x27, 0x00, 0x00, //0x00007d43 cmpl $10000, %r13d + 0xb8, 0x05, 0x00, 0x00, 0x00, //0x00007d4a movl $5, %eax + 0xe9, 0x9f, 0x00, 0x00, 0x00, //0x00007d4f jmp LBB31_21 + //0x00007d54 LBB31_12 + 0x4d, 0x89, 0xd6, //0x00007d54 movq %r10, %r14 + 0x49, 0xc1, 0xee, 0x02, //0x00007d57 shrq $2, %r14 + 0x44, 0x89, 0xd6, //0x00007d5b movl %r10d, %esi + 0x83, 0xe6, 0xfc, //0x00007d5e andl $-4, %esi + 0x39, 0xf3, //0x00007d61 cmpl %esi, %ebx + 0x0f, 0x96, 0xc2, //0x00007d63 setbe %dl + 0x8d, 0x5e, 0x04, //0x00007d66 leal $4(%rsi), %ebx + 0x39, 0xcb, //0x00007d69 cmpl %ecx, %ebx + 0x0f, 0x96, 0xc0, //0x00007d6b setbe %al + 0x38, 0xc2, //0x00007d6e cmpb %al, %dl + 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x00007d70 je LBB31_15 + 0x45, 0x31, 0xed, //0x00007d76 xorl %r13d, %r13d + 0x39, 0xcb, //0x00007d79 cmpl %ecx, %ebx + 0x41, 0x0f, 0x96, 0xc5, //0x00007d7b setbe %r13b + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00007d7f jmp LBB31_17 + //0x00007d84 LBB31_14 + 0x41, 0xc6, 0x00, 0x30, //0x00007d84 movb $48, (%r8) + 0x41, 0x29, 0xf8, //0x00007d88 subl %edi, %r8d + 0x41, 0xff, 0xc0, //0x00007d8b incl %r8d + 0xe9, 0xc0, 0x0a, 0x00, 0x00, //0x00007d8e jmp LBB31_138 + //0x00007d93 LBB31_15 + 0x83, 0xce, 0x02, //0x00007d93 orl $2, %esi + 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x00007d96 movl $1, %r13d + 0x41, 0x39, 0xf7, //0x00007d9c cmpl %esi, %r15d + 0x0f, 0x87, 0x0e, 0x00, 0x00, 0x00, //0x00007d9f ja LBB31_17 + 0x0f, 0x94, 0xc0, //0x00007da5 sete %al + 0x41, 0xc0, 0xea, 0x02, //0x00007da8 shrb $2, %r10b + 0x41, 0x20, 0xc2, //0x00007dac andb %al, %r10b + 0x45, 0x0f, 0xb6, 0xea, //0x00007daf movzbl %r10b, %r13d + //0x00007db3 LBB31_17 + 0x45, 0x01, 0xf5, //0x00007db3 addl %r14d, %r13d + 0x41, 0x81, 0xfd, 0xa0, 0x86, 0x01, 0x00, //0x00007db6 cmpl $100000, %r13d + 0x0f, 0x82, 0x50, 0xff, 0xff, 0xff, //0x00007dbd jb LBB31_8 + //0x00007dc3 LBB31_18 + 0xb8, 0x06, 0x00, 0x00, 0x00, //0x00007dc3 movl $6, %eax + 0x41, 0x81, 0xfd, 0x40, 0x42, 0x0f, 0x00, //0x00007dc8 cmpl $1000000, %r13d + 0x0f, 0x82, 0x21, 0x00, 0x00, 0x00, //0x00007dcf jb LBB31_22 + 0xb8, 0x07, 0x00, 0x00, 0x00, //0x00007dd5 movl $7, %eax + 0x41, 0x81, 0xfd, 0x80, 0x96, 0x98, 0x00, //0x00007dda cmpl $10000000, %r13d + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x00007de1 jb LBB31_22 + 0x41, 0x81, 0xfd, 0x00, 0xe1, 0xf5, 0x05, //0x00007de7 cmpl $100000000, %r13d + 0xb8, 0x09, 0x00, 0x00, 0x00, //0x00007dee movl $9, %eax + //0x00007df3 LBB31_21 + 0x83, 0xd8, 0x00, //0x00007df3 sbbl $0, %eax + //0x00007df6 LBB31_22 + 0x46, 0x8d, 0x14, 0x18, //0x00007df6 leal (%rax,%r11), %r10d + 0x42, 0x8d, 0x4c, 0x18, 0x05, //0x00007dfa leal $5(%rax,%r11), %ecx + 0x83, 0xf9, 0x1b, //0x00007dff cmpl $27, %ecx + 0x0f, 0x82, 0x77, 0x00, 0x00, 0x00, //0x00007e02 jb LBB31_26 + 0x89, 0xc0, //0x00007e08 movl %eax, %eax + 0x49, 0x8d, 0x5c, 0x00, 0x01, //0x00007e0a leaq $1(%r8,%rax), %rbx + 0x41, 0x81, 0xfd, 0x10, 0x27, 0x00, 0x00, //0x00007e0f cmpl $10000, %r13d + 0x0f, 0x82, 0xd9, 0x00, 0x00, 0x00, //0x00007e16 jb LBB31_30 + 0x44, 0x89, 0xe8, //0x00007e1c movl %r13d, %eax + 0x41, 0xbe, 0x59, 0x17, 0xb7, 0xd1, //0x00007e1f movl $3518437209, %r14d + 0x4c, 0x0f, 0xaf, 0xf0, //0x00007e25 imulq %rax, %r14 + 0x49, 0xc1, 0xee, 0x2d, //0x00007e29 shrq $45, %r14 + 0x41, 0x69, 0xc6, 0xf0, 0xd8, 0xff, 0xff, //0x00007e2d imull $-10000, %r14d, %eax + 0x44, 0x01, 0xe8, //0x00007e34 addl %r13d, %eax + 0x0f, 0x84, 0xa3, 0x04, 0x00, 0x00, //0x00007e37 je LBB31_62 + 0x89, 0xc1, //0x00007e3d movl %eax, %ecx + 0x48, 0x69, 0xc9, 0x1f, 0x85, 0xeb, 0x51, //0x00007e3f imulq $1374389535, %rcx, %rcx + 0x48, 0xc1, 0xe9, 0x25, //0x00007e46 shrq $37, %rcx + 0x6b, 0xd1, 0x64, //0x00007e4a imull $100, %ecx, %edx + 0x29, 0xd0, //0x00007e4d subl %edx, %eax + 0x48, 0x8d, 0x15, 0xca, 0x42, 0x00, 0x00, //0x00007e4f leaq $17098(%rip), %rdx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x42, //0x00007e56 movzwl (%rdx,%rax,2), %eax + 0x66, 0x89, 0x43, 0xfe, //0x00007e5a movw %ax, $-2(%rbx) + 0x0f, 0xb7, 0x04, 0x4a, //0x00007e5e movzwl (%rdx,%rcx,2), %eax + 0x66, 0x89, 0x43, 0xfc, //0x00007e62 movw %ax, $-4(%rbx) + 0x45, 0x31, 0xc9, //0x00007e66 xorl %r9d, %r9d + 0x48, 0x8d, 0x4b, 0xfc, //0x00007e69 leaq $-4(%rbx), %rcx + 0x41, 0x83, 0xfe, 0x64, //0x00007e6d cmpl $100, %r14d + 0x0f, 0x83, 0x91, 0x00, 0x00, 0x00, //0x00007e71 jae LBB31_64 + //0x00007e77 LBB31_31 + 0x44, 0x89, 0xf2, //0x00007e77 movl %r14d, %edx + 0xe9, 0xd4, 0x00, 0x00, 0x00, //0x00007e7a jmp LBB31_66 + //0x00007e7f LBB31_26 + 0x41, 0x89, 0xc4, //0x00007e7f movl %eax, %r12d + 0x45, 0x85, 0xdb, //0x00007e82 testl %r11d, %r11d + 0x0f, 0x88, 0x1d, 0x02, 0x00, 0x00, //0x00007e85 js LBB31_38 + 0x4b, 0x8d, 0x34, 0x20, //0x00007e8b leaq (%r8,%r12), %rsi + 0x41, 0x81, 0xfd, 0x10, 0x27, 0x00, 0x00, //0x00007e8f cmpl $10000, %r13d + 0x0f, 0x82, 0xa8, 0x02, 0x00, 0x00, //0x00007e96 jb LBB31_43 + 0x44, 0x89, 0xe8, //0x00007e9c movl %r13d, %eax + 0xb9, 0x59, 0x17, 0xb7, 0xd1, //0x00007e9f movl $3518437209, %ecx + 0x48, 0x0f, 0xaf, 0xc8, //0x00007ea4 imulq %rax, %rcx + 0x48, 0xc1, 0xe9, 0x2d, //0x00007ea8 shrq $45, %rcx + 0x69, 0xc1, 0xf0, 0xd8, 0xff, 0xff, //0x00007eac imull $-10000, %ecx, %eax + 0x44, 0x01, 0xe8, //0x00007eb2 addl %r13d, %eax + 0x48, 0x69, 0xd0, 0x1f, 0x85, 0xeb, 0x51, //0x00007eb5 imulq $1374389535, %rax, %rdx + 0x48, 0xc1, 0xea, 0x25, //0x00007ebc shrq $37, %rdx + 0x6b, 0xda, 0x64, //0x00007ec0 imull $100, %edx, %ebx + 0x29, 0xd8, //0x00007ec3 subl %ebx, %eax + 0x48, 0x8d, 0x1d, 0x54, 0x42, 0x00, 0x00, //0x00007ec5 leaq $16980(%rip), %rbx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x43, //0x00007ecc movzwl (%rbx,%rax,2), %eax + 0x66, 0x89, 0x46, 0xfe, //0x00007ed0 movw %ax, $-2(%rsi) + 0x48, 0x8d, 0x46, 0xfc, //0x00007ed4 leaq $-4(%rsi), %rax + 0x0f, 0xb7, 0x14, 0x53, //0x00007ed8 movzwl (%rbx,%rdx,2), %edx + 0x66, 0x89, 0x56, 0xfc, //0x00007edc movw %dx, $-4(%rsi) + 0x41, 0x89, 0xcd, //0x00007ee0 movl %ecx, %r13d + 0x41, 0x83, 0xfd, 0x64, //0x00007ee3 cmpl $100, %r13d + 0x0f, 0x83, 0x64, 0x02, 0x00, 0x00, //0x00007ee7 jae LBB31_44 + //0x00007eed LBB31_29 + 0x44, 0x89, 0xe9, //0x00007eed movl %r13d, %ecx + 0xe9, 0x9e, 0x02, 0x00, 0x00, //0x00007ef0 jmp LBB31_46 + //0x00007ef5 LBB31_30 + 0x45, 0x31, 0xc9, //0x00007ef5 xorl %r9d, %r9d + 0x48, 0x89, 0xd9, //0x00007ef8 movq %rbx, %rcx + 0x45, 0x89, 0xee, //0x00007efb movl %r13d, %r14d + 0x41, 0x83, 0xfe, 0x64, //0x00007efe cmpl $100, %r14d + 0x0f, 0x82, 0x6f, 0xff, 0xff, 0xff, //0x00007f02 jb LBB31_31 + //0x00007f08 LBB31_64 + 0x48, 0xff, 0xc9, //0x00007f08 decq %rcx + 0x4c, 0x8d, 0x1d, 0x0e, 0x42, 0x00, 0x00, //0x00007f0b leaq $16910(%rip), %r11 /* _Digits+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007f12 .p2align 4, 0x90 + //0x00007f20 LBB31_65 + 0x44, 0x89, 0xf2, //0x00007f20 movl %r14d, %edx + 0x48, 0x69, 0xd2, 0x1f, 0x85, 0xeb, 0x51, //0x00007f23 imulq $1374389535, %rdx, %rdx + 0x48, 0xc1, 0xea, 0x25, //0x00007f2a shrq $37, %rdx + 0x6b, 0xc2, 0x64, //0x00007f2e imull $100, %edx, %eax + 0x44, 0x89, 0xf6, //0x00007f31 movl %r14d, %esi + 0x29, 0xc6, //0x00007f34 subl %eax, %esi + 0x41, 0x0f, 0xb7, 0x04, 0x73, //0x00007f36 movzwl (%r11,%rsi,2), %eax + 0x66, 0x89, 0x41, 0xff, //0x00007f3b movw %ax, $-1(%rcx) + 0x48, 0x83, 0xc1, 0xfe, //0x00007f3f addq $-2, %rcx + 0x41, 0x81, 0xfe, 0x0f, 0x27, 0x00, 0x00, //0x00007f43 cmpl $9999, %r14d + 0x41, 0x89, 0xd6, //0x00007f4a movl %edx, %r14d + 0x0f, 0x87, 0xcd, 0xff, 0xff, 0xff, //0x00007f4d ja LBB31_65 + //0x00007f53 LBB31_66 + 0x49, 0x8d, 0x70, 0x01, //0x00007f53 leaq $1(%r8), %rsi + 0x83, 0xfa, 0x0a, //0x00007f57 cmpl $10, %edx + 0x0f, 0x82, 0x1d, 0x00, 0x00, 0x00, //0x00007f5a jb LBB31_68 + 0x89, 0xd0, //0x00007f60 movl %edx, %eax + 0x48, 0x8d, 0x0d, 0xb7, 0x41, 0x00, 0x00, //0x00007f62 leaq $16823(%rip), %rcx /* _Digits+0(%rip) */ + 0x8a, 0x14, 0x41, //0x00007f69 movb (%rcx,%rax,2), %dl + 0x8a, 0x44, 0x41, 0x01, //0x00007f6c movb $1(%rcx,%rax,2), %al + 0x41, 0x88, 0x50, 0x01, //0x00007f70 movb %dl, $1(%r8) + 0x41, 0x88, 0x40, 0x02, //0x00007f74 movb %al, $2(%r8) + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00007f78 jmp LBB31_69 + //0x00007f7d LBB31_68 + 0x80, 0xc2, 0x30, //0x00007f7d addb $48, %dl + 0x88, 0x16, //0x00007f80 movb %dl, (%rsi) + //0x00007f82 LBB31_69 + 0x4c, 0x29, 0xcb, //0x00007f82 subq %r9, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00007f85 .p2align 4, 0x90 + //0x00007f90 LBB31_70 + 0x80, 0x7b, 0xff, 0x30, //0x00007f90 cmpb $48, $-1(%rbx) + 0x48, 0x8d, 0x5b, 0xff, //0x00007f94 leaq $-1(%rbx), %rbx + 0x0f, 0x84, 0xf2, 0xff, 0xff, 0xff, //0x00007f98 je LBB31_70 + 0x41, 0x88, 0x10, //0x00007f9e movb %dl, (%r8) + 0x48, 0x8d, 0x43, 0x01, //0x00007fa1 leaq $1(%rbx), %rax + 0x48, 0x89, 0xc1, //0x00007fa5 movq %rax, %rcx + 0x48, 0x29, 0xf1, //0x00007fa8 subq %rsi, %rcx + 0x48, 0x83, 0xf9, 0x02, //0x00007fab cmpq $2, %rcx + 0x0f, 0x8c, 0x06, 0x00, 0x00, 0x00, //0x00007faf jl LBB31_73 + 0xc6, 0x06, 0x2e, //0x00007fb5 movb $46, (%rsi) + 0x48, 0x89, 0xc3, //0x00007fb8 movq %rax, %rbx + //0x00007fbb LBB31_73 + 0xc6, 0x03, 0x65, //0x00007fbb movb $101, (%rbx) + 0x45, 0x85, 0xd2, //0x00007fbe testl %r10d, %r10d + 0x0f, 0x8e, 0x42, 0x01, 0x00, 0x00, //0x00007fc1 jle LBB31_76 + 0x41, 0xff, 0xca, //0x00007fc7 decl %r10d + 0xc6, 0x43, 0x01, 0x2b, //0x00007fca movb $43, $1(%rbx) + 0x44, 0x89, 0xd0, //0x00007fce movl %r10d, %eax + 0x83, 0xf8, 0x64, //0x00007fd1 cmpl $100, %eax + 0x0f, 0x8c, 0x44, 0x01, 0x00, 0x00, //0x00007fd4 jl LBB31_77 + //0x00007fda LBB31_75 + 0x89, 0xc1, //0x00007fda movl %eax, %ecx + 0xba, 0xcd, 0xcc, 0xcc, 0xcc, //0x00007fdc movl $3435973837, %edx + 0x48, 0x0f, 0xaf, 0xd1, //0x00007fe1 imulq %rcx, %rdx + 0x48, 0xc1, 0xea, 0x23, //0x00007fe5 shrq $35, %rdx + 0x8d, 0x0c, 0x12, //0x00007fe9 leal (%rdx,%rdx), %ecx + 0x8d, 0x0c, 0x89, //0x00007fec leal (%rcx,%rcx,4), %ecx + 0x29, 0xc8, //0x00007fef subl %ecx, %eax + 0x48, 0x8d, 0x0d, 0x28, 0x41, 0x00, 0x00, //0x00007ff1 leaq $16680(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x51, //0x00007ff8 movzwl (%rcx,%rdx,2), %ecx + 0x66, 0x89, 0x4b, 0x02, //0x00007ffc movw %cx, $2(%rbx) + 0x0c, 0x30, //0x00008000 orb $48, %al + 0x88, 0x43, 0x04, //0x00008002 movb %al, $4(%rbx) + 0x48, 0x83, 0xc3, 0x05, //0x00008005 addq $5, %rbx + 0x49, 0x89, 0xd8, //0x00008009 movq %rbx, %r8 + 0xe9, 0x3f, 0x08, 0x00, 0x00, //0x0000800c jmp LBB31_137 + //0x00008011 LBB31_32 + 0xd3, 0xee, //0x00008011 shrl %cl, %esi + 0x81, 0xfe, 0xa0, 0x86, 0x01, 0x00, //0x00008013 cmpl $100000, %esi + 0x0f, 0x82, 0x17, 0x02, 0x00, 0x00, //0x00008019 jb LBB31_52 + 0xb8, 0x06, 0x00, 0x00, 0x00, //0x0000801f movl $6, %eax + 0x81, 0xfe, 0x40, 0x42, 0x0f, 0x00, //0x00008024 cmpl $1000000, %esi + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x0000802a jb LBB31_36 + 0xb8, 0x07, 0x00, 0x00, 0x00, //0x00008030 movl $7, %eax + 0x81, 0xfe, 0x80, 0x96, 0x98, 0x00, //0x00008035 cmpl $10000000, %esi + 0x0f, 0x82, 0x0f, 0x00, 0x00, 0x00, //0x0000803b jb LBB31_36 + 0x81, 0xfe, 0x00, 0xe1, 0xf5, 0x05, //0x00008041 cmpl $100000000, %esi + 0xb8, 0x09, 0x00, 0x00, 0x00, //0x00008047 movl $9, %eax + 0x48, 0x83, 0xd8, 0x00, //0x0000804c sbbq $0, %rax + //0x00008050 LBB31_36 + 0x4c, 0x01, 0xc0, //0x00008050 addq %r8, %rax + //0x00008053 LBB31_37 + 0x89, 0xf1, //0x00008053 movl %esi, %ecx + 0xba, 0x59, 0x17, 0xb7, 0xd1, //0x00008055 movl $3518437209, %edx + 0x48, 0x0f, 0xaf, 0xd1, //0x0000805a imulq %rcx, %rdx + 0x48, 0xc1, 0xea, 0x2d, //0x0000805e shrq $45, %rdx + 0x69, 0xca, 0xf0, 0xd8, 0xff, 0xff, //0x00008062 imull $-10000, %edx, %ecx + 0x01, 0xf1, //0x00008068 addl %esi, %ecx + 0x48, 0x69, 0xf1, 0x1f, 0x85, 0xeb, 0x51, //0x0000806a imulq $1374389535, %rcx, %rsi + 0x48, 0xc1, 0xee, 0x25, //0x00008071 shrq $37, %rsi + 0x6b, 0xde, 0x64, //0x00008075 imull $100, %esi, %ebx + 0x29, 0xd9, //0x00008078 subl %ebx, %ecx + 0x48, 0x8d, 0x1d, 0x9f, 0x40, 0x00, 0x00, //0x0000807a leaq $16543(%rip), %rbx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4b, //0x00008081 movzwl (%rbx,%rcx,2), %ecx + 0x66, 0x89, 0x48, 0xfe, //0x00008085 movw %cx, $-2(%rax) + 0x0f, 0xb7, 0x0c, 0x73, //0x00008089 movzwl (%rbx,%rsi,2), %ecx + 0x66, 0x89, 0x48, 0xfc, //0x0000808d movw %cx, $-4(%rax) + 0x49, 0x89, 0xc1, //0x00008091 movq %rax, %r9 + 0x48, 0x83, 0xc0, 0xfc, //0x00008094 addq $-4, %rax + 0x89, 0xd6, //0x00008098 movl %edx, %esi + 0x83, 0xfe, 0x64, //0x0000809a cmpl $100, %esi + 0x0f, 0x83, 0xd2, 0x01, 0x00, 0x00, //0x0000809d jae LBB31_56 + 0xe9, 0x07, 0x02, 0x00, 0x00, //0x000080a3 jmp LBB31_58 + //0x000080a8 LBB31_38 + 0x45, 0x85, 0xd2, //0x000080a8 testl %r10d, %r10d + 0x0f, 0x8f, 0x70, 0x04, 0x00, 0x00, //0x000080ab jg LBB31_98 + 0x66, 0x41, 0xc7, 0x00, 0x30, 0x2e, //0x000080b1 movw $11824, (%r8) + 0x49, 0x83, 0xc0, 0x02, //0x000080b7 addq $2, %r8 + 0x45, 0x85, 0xd2, //0x000080bb testl %r10d, %r10d + 0x0f, 0x89, 0x5d, 0x04, 0x00, 0x00, //0x000080be jns LBB31_98 + 0x31, 0xf6, //0x000080c4 xorl %esi, %esi + 0x41, 0x83, 0xfa, 0xe0, //0x000080c6 cmpl $-32, %r10d + 0x0f, 0x87, 0x33, 0x04, 0x00, 0x00, //0x000080ca ja LBB31_96 + 0x45, 0x89, 0xd3, //0x000080d0 movl %r10d, %r11d + 0x41, 0xf7, 0xd3, //0x000080d3 notl %r11d + 0x49, 0xff, 0xc3, //0x000080d6 incq %r11 + 0x4c, 0x89, 0xde, //0x000080d9 movq %r11, %rsi + 0x48, 0x83, 0xe6, 0xe0, //0x000080dc andq $-32, %rsi + 0x48, 0x8d, 0x4e, 0xe0, //0x000080e0 leaq $-32(%rsi), %rcx + 0x48, 0x89, 0xc8, //0x000080e4 movq %rcx, %rax + 0x48, 0xc1, 0xe8, 0x05, //0x000080e7 shrq $5, %rax + 0x48, 0xff, 0xc0, //0x000080eb incq %rax + 0x41, 0x89, 0xc6, //0x000080ee movl %eax, %r14d + 0x41, 0x83, 0xe6, 0x07, //0x000080f1 andl $7, %r14d + 0x48, 0x81, 0xf9, 0xe0, 0x00, 0x00, 0x00, //0x000080f5 cmpq $224, %rcx + 0x0f, 0x83, 0x27, 0x03, 0x00, 0x00, //0x000080fc jae LBB31_90 + 0x31, 0xc0, //0x00008102 xorl %eax, %eax + 0xe9, 0xbc, 0x03, 0x00, 0x00, //0x00008104 jmp LBB31_92 + //0x00008109 LBB31_76 + 0xc6, 0x43, 0x01, 0x2d, //0x00008109 movb $45, $1(%rbx) + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x0000810d movl $1, %eax + 0x44, 0x29, 0xd0, //0x00008112 subl %r10d, %eax + 0x83, 0xf8, 0x64, //0x00008115 cmpl $100, %eax + 0x0f, 0x8d, 0xbc, 0xfe, 0xff, 0xff, //0x00008118 jge LBB31_75 + //0x0000811e LBB31_77 + 0x83, 0xf8, 0x0a, //0x0000811e cmpl $10, %eax + 0x0f, 0x8c, 0xfe, 0x00, 0x00, 0x00, //0x00008121 jl LBB31_79 + 0x48, 0x98, //0x00008127 cltq + 0x48, 0x8d, 0x0d, 0xf0, 0x3f, 0x00, 0x00, //0x00008129 leaq $16368(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x00008130 movzwl (%rcx,%rax,2), %eax + 0x66, 0x89, 0x43, 0x02, //0x00008134 movw %ax, $2(%rbx) + 0x48, 0x83, 0xc3, 0x04, //0x00008138 addq $4, %rbx + 0x49, 0x89, 0xd8, //0x0000813c movq %rbx, %r8 + 0xe9, 0x0c, 0x07, 0x00, 0x00, //0x0000813f jmp LBB31_137 + //0x00008144 LBB31_43 + 0x48, 0x89, 0xf0, //0x00008144 movq %rsi, %rax + 0x41, 0x83, 0xfd, 0x64, //0x00008147 cmpl $100, %r13d + 0x0f, 0x82, 0x9c, 0xfd, 0xff, 0xff, //0x0000814b jb LBB31_29 + //0x00008151 LBB31_44 + 0x48, 0xff, 0xc8, //0x00008151 decq %rax + 0x4c, 0x8d, 0x1d, 0xc5, 0x3f, 0x00, 0x00, //0x00008154 leaq $16325(%rip), %r11 /* _Digits+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000815b .p2align 4, 0x90 + //0x00008160 LBB31_45 + 0x44, 0x89, 0xe9, //0x00008160 movl %r13d, %ecx + 0x48, 0x69, 0xc9, 0x1f, 0x85, 0xeb, 0x51, //0x00008163 imulq $1374389535, %rcx, %rcx + 0x48, 0xc1, 0xe9, 0x25, //0x0000816a shrq $37, %rcx + 0x6b, 0xd9, 0x64, //0x0000816e imull $100, %ecx, %ebx + 0x44, 0x89, 0xea, //0x00008171 movl %r13d, %edx + 0x29, 0xda, //0x00008174 subl %ebx, %edx + 0x41, 0x0f, 0xb7, 0x14, 0x53, //0x00008176 movzwl (%r11,%rdx,2), %edx + 0x66, 0x89, 0x50, 0xff, //0x0000817b movw %dx, $-1(%rax) + 0x48, 0x83, 0xc0, 0xfe, //0x0000817f addq $-2, %rax + 0x41, 0x81, 0xfd, 0x0f, 0x27, 0x00, 0x00, //0x00008183 cmpl $9999, %r13d + 0x41, 0x89, 0xcd, //0x0000818a movl %ecx, %r13d + 0x0f, 0x87, 0xcd, 0xff, 0xff, 0xff, //0x0000818d ja LBB31_45 + //0x00008193 LBB31_46 + 0x49, 0x63, 0xc2, //0x00008193 movslq %r10d, %rax + 0x83, 0xf9, 0x0a, //0x00008196 cmpl $10, %ecx + 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x00008199 jb LBB31_48 + 0x89, 0xc9, //0x0000819f movl %ecx, %ecx + 0x48, 0x8d, 0x15, 0x78, 0x3f, 0x00, 0x00, //0x000081a1 leaq $16248(%rip), %rdx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4a, //0x000081a8 movzwl (%rdx,%rcx,2), %ecx + 0x66, 0x41, 0x89, 0x08, //0x000081ac movw %cx, (%r8) + 0x49, 0x01, 0xc0, //0x000081b0 addq %rax, %r8 + 0x49, 0x39, 0xc4, //0x000081b3 cmpq %rax, %r12 + 0x0f, 0x8c, 0x17, 0x00, 0x00, 0x00, //0x000081b6 jl LBB31_49 + 0xe9, 0x8f, 0x06, 0x00, 0x00, //0x000081bc jmp LBB31_137 + //0x000081c1 LBB31_48 + 0x80, 0xc1, 0x30, //0x000081c1 addb $48, %cl + 0x41, 0x88, 0x08, //0x000081c4 movb %cl, (%r8) + 0x49, 0x01, 0xc0, //0x000081c7 addq %rax, %r8 + 0x49, 0x39, 0xc4, //0x000081ca cmpq %rax, %r12 + 0x0f, 0x8d, 0x7d, 0x06, 0x00, 0x00, //0x000081cd jge LBB31_137 + //0x000081d3 LBB31_49 + 0x4b, 0x8d, 0x04, 0x21, //0x000081d3 leaq (%r9,%r12), %rax + 0x4c, 0x8d, 0x5c, 0x07, 0x01, //0x000081d7 leaq $1(%rdi,%rax), %r11 + 0x4d, 0x39, 0xc3, //0x000081dc cmpq %r8, %r11 + 0x4d, 0x0f, 0x46, 0xd8, //0x000081df cmovbeq %r8, %r11 + 0x4a, 0x8d, 0x0c, 0x0f, //0x000081e3 leaq (%rdi,%r9), %rcx + 0x4c, 0x01, 0xe1, //0x000081e7 addq %r12, %rcx + 0x49, 0x29, 0xcb, //0x000081ea subq %rcx, %r11 + 0x49, 0x83, 0xfb, 0x20, //0x000081ed cmpq $32, %r11 + 0x0f, 0x82, 0xf9, 0x01, 0x00, 0x00, //0x000081f1 jb LBB31_87 + 0x4d, 0x89, 0xda, //0x000081f7 movq %r11, %r10 + 0x49, 0x83, 0xe2, 0xe0, //0x000081fa andq $-32, %r10 + 0x49, 0x8d, 0x4a, 0xe0, //0x000081fe leaq $-32(%r10), %rcx + 0x48, 0x89, 0xcb, //0x00008202 movq %rcx, %rbx + 0x48, 0xc1, 0xeb, 0x05, //0x00008205 shrq $5, %rbx + 0x48, 0xff, 0xc3, //0x00008209 incq %rbx + 0x89, 0xda, //0x0000820c movl %ebx, %edx + 0x83, 0xe2, 0x07, //0x0000820e andl $7, %edx + 0x48, 0x81, 0xf9, 0xe0, 0x00, 0x00, 0x00, //0x00008211 cmpq $224, %rcx + 0x0f, 0x83, 0xdb, 0x00, 0x00, 0x00, //0x00008218 jae LBB31_80 + 0x31, 0xc0, //0x0000821e xorl %eax, %eax + 0xe9, 0x6f, 0x01, 0x00, 0x00, //0x00008220 jmp LBB31_82 + //0x00008225 LBB31_79 + 0x04, 0x30, //0x00008225 addb $48, %al + 0x88, 0x43, 0x02, //0x00008227 movb %al, $2(%rbx) + 0x48, 0x83, 0xc3, 0x03, //0x0000822a addq $3, %rbx + 0x49, 0x89, 0xd8, //0x0000822e movq %rbx, %r8 + 0xe9, 0x1a, 0x06, 0x00, 0x00, //0x00008231 jmp LBB31_137 + //0x00008236 LBB31_52 + 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00008236 movl $1, %r9d + 0x83, 0xfe, 0x0a, //0x0000823c cmpl $10, %esi + 0x0f, 0x82, 0x21, 0x00, 0x00, 0x00, //0x0000823f jb LBB31_55 + 0x41, 0xb9, 0x02, 0x00, 0x00, 0x00, //0x00008245 movl $2, %r9d + 0x83, 0xfe, 0x64, //0x0000824b cmpl $100, %esi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x0000824e jb LBB31_55 + 0x41, 0xb9, 0x03, 0x00, 0x00, 0x00, //0x00008254 movl $3, %r9d + 0x81, 0xfe, 0xe8, 0x03, 0x00, 0x00, //0x0000825a cmpl $1000, %esi + 0x0f, 0x83, 0x9e, 0x01, 0x00, 0x00, //0x00008260 jae LBB31_88 + //0x00008266 LBB31_55 + 0x4d, 0x01, 0xc1, //0x00008266 addq %r8, %r9 + 0x4c, 0x89, 0xc8, //0x00008269 movq %r9, %rax + 0x83, 0xfe, 0x64, //0x0000826c cmpl $100, %esi + 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x0000826f jb LBB31_58 + //0x00008275 LBB31_56 + 0x48, 0xff, 0xc8, //0x00008275 decq %rax + 0x4c, 0x8d, 0x15, 0xa1, 0x3e, 0x00, 0x00, //0x00008278 leaq $16033(%rip), %r10 /* _Digits+0(%rip) */ + 0x90, //0x0000827f .p2align 4, 0x90 + //0x00008280 LBB31_57 + 0x89, 0xf3, //0x00008280 movl %esi, %ebx + 0x89, 0xf6, //0x00008282 movl %esi, %esi + 0x48, 0x69, 0xf6, 0x1f, 0x85, 0xeb, 0x51, //0x00008284 imulq $1374389535, %rsi, %rsi + 0x48, 0xc1, 0xee, 0x25, //0x0000828b shrq $37, %rsi + 0x6b, 0xce, 0x64, //0x0000828f imull $100, %esi, %ecx + 0x89, 0xda, //0x00008292 movl %ebx, %edx + 0x29, 0xca, //0x00008294 subl %ecx, %edx + 0x41, 0x0f, 0xb7, 0x0c, 0x52, //0x00008296 movzwl (%r10,%rdx,2), %ecx + 0x66, 0x89, 0x48, 0xff, //0x0000829b movw %cx, $-1(%rax) + 0x48, 0x83, 0xc0, 0xfe, //0x0000829f addq $-2, %rax + 0x81, 0xfb, 0x0f, 0x27, 0x00, 0x00, //0x000082a3 cmpl $9999, %ebx + 0x0f, 0x87, 0xd1, 0xff, 0xff, 0xff, //0x000082a9 ja LBB31_57 + //0x000082af LBB31_58 + 0x83, 0xfe, 0x0a, //0x000082af cmpl $10, %esi + 0x0f, 0x82, 0x16, 0x00, 0x00, 0x00, //0x000082b2 jb LBB31_60 + 0x89, 0xf0, //0x000082b8 movl %esi, %eax + 0x48, 0x8d, 0x0d, 0x5f, 0x3e, 0x00, 0x00, //0x000082ba leaq $15967(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x000082c1 movzwl (%rcx,%rax,2), %eax + 0x66, 0x41, 0x89, 0x00, //0x000082c5 movw %ax, (%r8) + 0xe9, 0x07, 0x00, 0x00, 0x00, //0x000082c9 jmp LBB31_61 + //0x000082ce LBB31_60 + 0x40, 0x80, 0xc6, 0x30, //0x000082ce addb $48, %sil + 0x41, 0x88, 0x30, //0x000082d2 movb %sil, (%r8) + //0x000082d5 LBB31_61 + 0x41, 0x29, 0xf9, //0x000082d5 subl %edi, %r9d + 0x45, 0x89, 0xc8, //0x000082d8 movl %r9d, %r8d + 0xe9, 0x73, 0x05, 0x00, 0x00, //0x000082db jmp LBB31_138 + //0x000082e0 LBB31_62 + 0x41, 0xb9, 0x04, 0x00, 0x00, 0x00, //0x000082e0 movl $4, %r9d + 0x48, 0x8d, 0x4b, 0xfc, //0x000082e6 leaq $-4(%rbx), %rcx + 0x41, 0x83, 0xfe, 0x64, //0x000082ea cmpl $100, %r14d + 0x0f, 0x82, 0x83, 0xfb, 0xff, 0xff, //0x000082ee jb LBB31_31 + 0xe9, 0x0f, 0xfc, 0xff, 0xff, //0x000082f4 jmp LBB31_64 + //0x000082f9 LBB31_80 + 0x48, 0x29, 0xd3, //0x000082f9 subq %rdx, %rbx + 0x48, 0x8d, 0x8c, 0x07, 0xf0, 0x00, 0x00, 0x00, //0x000082fc leaq $240(%rdi,%rax), %rcx + 0x31, 0xc0, //0x00008304 xorl %eax, %eax + 0x66, 0x0f, 0x6f, 0x05, 0x62, 0xf8, 0xff, 0xff, //0x00008306 movdqa $-1950(%rip), %xmm0 /* LCPI31_0+0(%rip) */ + 0x90, 0x90, //0x0000830e .p2align 4, 0x90 + //0x00008310 LBB31_81 + 0xf3, 0x0f, 0x7f, 0x84, 0x01, 0x10, 0xff, 0xff, 0xff, //0x00008310 movdqu %xmm0, $-240(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x84, 0x01, 0x20, 0xff, 0xff, 0xff, //0x00008319 movdqu %xmm0, $-224(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x84, 0x01, 0x30, 0xff, 0xff, 0xff, //0x00008322 movdqu %xmm0, $-208(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x84, 0x01, 0x40, 0xff, 0xff, 0xff, //0x0000832b movdqu %xmm0, $-192(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x84, 0x01, 0x50, 0xff, 0xff, 0xff, //0x00008334 movdqu %xmm0, $-176(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x84, 0x01, 0x60, 0xff, 0xff, 0xff, //0x0000833d movdqu %xmm0, $-160(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x84, 0x01, 0x70, 0xff, 0xff, 0xff, //0x00008346 movdqu %xmm0, $-144(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x01, 0x80, //0x0000834f movdqu %xmm0, $-128(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x01, 0x90, //0x00008355 movdqu %xmm0, $-112(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x01, 0xa0, //0x0000835b movdqu %xmm0, $-96(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x01, 0xb0, //0x00008361 movdqu %xmm0, $-80(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x01, 0xc0, //0x00008367 movdqu %xmm0, $-64(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x01, 0xd0, //0x0000836d movdqu %xmm0, $-48(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x01, 0xe0, //0x00008373 movdqu %xmm0, $-32(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x01, 0xf0, //0x00008379 movdqu %xmm0, $-16(%rcx,%rax) + 0xf3, 0x0f, 0x7f, 0x04, 0x01, //0x0000837f movdqu %xmm0, (%rcx,%rax) + 0x48, 0x05, 0x00, 0x01, 0x00, 0x00, //0x00008384 addq $256, %rax + 0x48, 0x83, 0xc3, 0xf8, //0x0000838a addq $-8, %rbx + 0x0f, 0x85, 0x7c, 0xff, 0xff, 0xff, //0x0000838e jne LBB31_81 + //0x00008394 LBB31_82 + 0x48, 0x85, 0xd2, //0x00008394 testq %rdx, %rdx + 0x0f, 0x84, 0x39, 0x00, 0x00, 0x00, //0x00008397 je LBB31_85 + 0x4c, 0x01, 0xc8, //0x0000839d addq %r9, %rax + 0x4c, 0x01, 0xe0, //0x000083a0 addq %r12, %rax + 0x48, 0x8d, 0x44, 0x07, 0x10, //0x000083a3 leaq $16(%rdi,%rax), %rax + 0x48, 0xf7, 0xda, //0x000083a8 negq %rdx + 0x66, 0x0f, 0x6f, 0x05, 0xbd, 0xf7, 0xff, 0xff, //0x000083ab movdqa $-2115(%rip), %xmm0 /* LCPI31_0+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000083b3 .p2align 4, 0x90 + //0x000083c0 LBB31_84 + 0xf3, 0x0f, 0x7f, 0x40, 0xf0, //0x000083c0 movdqu %xmm0, $-16(%rax) + 0xf3, 0x0f, 0x7f, 0x00, //0x000083c5 movdqu %xmm0, (%rax) + 0x48, 0x83, 0xc0, 0x20, //0x000083c9 addq $32, %rax + 0x48, 0xff, 0xc2, //0x000083cd incq %rdx + 0x0f, 0x85, 0xea, 0xff, 0xff, 0xff, //0x000083d0 jne LBB31_84 + //0x000083d6 LBB31_85 + 0x4d, 0x39, 0xda, //0x000083d6 cmpq %r11, %r10 + 0x0f, 0x84, 0x71, 0x04, 0x00, 0x00, //0x000083d9 je LBB31_137 + 0x4c, 0x01, 0xd6, //0x000083df addq %r10, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000083e2 .p2align 4, 0x90 + //0x000083f0 LBB31_87 + 0xc6, 0x06, 0x30, //0x000083f0 movb $48, (%rsi) + 0x48, 0xff, 0xc6, //0x000083f3 incq %rsi + 0x4c, 0x39, 0xc6, //0x000083f6 cmpq %r8, %rsi + 0x0f, 0x82, 0xf1, 0xff, 0xff, 0xff, //0x000083f9 jb LBB31_87 + 0xe9, 0x4c, 0x04, 0x00, 0x00, //0x000083ff jmp LBB31_137 + //0x00008404 LBB31_88 + 0x81, 0xfe, 0x10, 0x27, 0x00, 0x00, //0x00008404 cmpl $10000, %esi + 0x4c, 0x89, 0xc0, //0x0000840a movq %r8, %rax + 0x48, 0x83, 0xd8, 0x00, //0x0000840d sbbq $0, %rax + 0x48, 0x83, 0xc0, 0x05, //0x00008411 addq $5, %rax + 0x81, 0xfe, 0x10, 0x27, 0x00, 0x00, //0x00008415 cmpl $10000, %esi + 0x0f, 0x83, 0x32, 0xfc, 0xff, 0xff, //0x0000841b jae LBB31_37 + 0x49, 0x89, 0xc1, //0x00008421 movq %rax, %r9 + 0xe9, 0x4c, 0xfe, 0xff, 0xff, //0x00008424 jmp LBB31_56 + //0x00008429 LBB31_90 + 0x49, 0x8d, 0x9c, 0x39, 0xf2, 0x00, 0x00, 0x00, //0x00008429 leaq $242(%r9,%rdi), %rbx + 0x4d, 0x89, 0xf7, //0x00008431 movq %r14, %r15 + 0x49, 0x29, 0xc7, //0x00008434 subq %rax, %r15 + 0x31, 0xc0, //0x00008437 xorl %eax, %eax + 0x66, 0x0f, 0x6f, 0x05, 0x2f, 0xf7, 0xff, 0xff, //0x00008439 movdqa $-2257(%rip), %xmm0 /* LCPI31_0+0(%rip) */ + //0x00008441 LBB31_91 + 0xf3, 0x0f, 0x7f, 0x84, 0x03, 0x10, 0xff, 0xff, 0xff, //0x00008441 movdqu %xmm0, $-240(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x84, 0x03, 0x20, 0xff, 0xff, 0xff, //0x0000844a movdqu %xmm0, $-224(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x84, 0x03, 0x30, 0xff, 0xff, 0xff, //0x00008453 movdqu %xmm0, $-208(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x84, 0x03, 0x40, 0xff, 0xff, 0xff, //0x0000845c movdqu %xmm0, $-192(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x84, 0x03, 0x50, 0xff, 0xff, 0xff, //0x00008465 movdqu %xmm0, $-176(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x84, 0x03, 0x60, 0xff, 0xff, 0xff, //0x0000846e movdqu %xmm0, $-160(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x84, 0x03, 0x70, 0xff, 0xff, 0xff, //0x00008477 movdqu %xmm0, $-144(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x03, 0x80, //0x00008480 movdqu %xmm0, $-128(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x03, 0x90, //0x00008486 movdqu %xmm0, $-112(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x03, 0xa0, //0x0000848c movdqu %xmm0, $-96(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x03, 0xb0, //0x00008492 movdqu %xmm0, $-80(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x03, 0xc0, //0x00008498 movdqu %xmm0, $-64(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x03, 0xd0, //0x0000849e movdqu %xmm0, $-48(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x03, 0xe0, //0x000084a4 movdqu %xmm0, $-32(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x44, 0x03, 0xf0, //0x000084aa movdqu %xmm0, $-16(%rbx,%rax) + 0xf3, 0x0f, 0x7f, 0x04, 0x03, //0x000084b0 movdqu %xmm0, (%rbx,%rax) + 0x48, 0x05, 0x00, 0x01, 0x00, 0x00, //0x000084b5 addq $256, %rax + 0x49, 0x83, 0xc7, 0x08, //0x000084bb addq $8, %r15 + 0x0f, 0x85, 0x7c, 0xff, 0xff, 0xff, //0x000084bf jne LBB31_91 + //0x000084c5 LBB31_92 + 0x4d, 0x85, 0xf6, //0x000084c5 testq %r14, %r14 + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x000084c8 je LBB31_95 + 0x4c, 0x01, 0xc8, //0x000084ce addq %r9, %rax + 0x48, 0x8d, 0x44, 0x07, 0x12, //0x000084d1 leaq $18(%rdi,%rax), %rax + 0x49, 0xf7, 0xde, //0x000084d6 negq %r14 + 0x66, 0x0f, 0x6f, 0x05, 0x8f, 0xf6, 0xff, 0xff, //0x000084d9 movdqa $-2417(%rip), %xmm0 /* LCPI31_0+0(%rip) */ + //0x000084e1 LBB31_94 + 0xf3, 0x0f, 0x7f, 0x40, 0xf0, //0x000084e1 movdqu %xmm0, $-16(%rax) + 0xf3, 0x0f, 0x7f, 0x00, //0x000084e6 movdqu %xmm0, (%rax) + 0x48, 0x83, 0xc0, 0x20, //0x000084ea addq $32, %rax + 0x49, 0xff, 0xc6, //0x000084ee incq %r14 + 0x0f, 0x85, 0xea, 0xff, 0xff, 0xff, //0x000084f1 jne LBB31_94 + //0x000084f7 LBB31_95 + 0x49, 0x01, 0xf0, //0x000084f7 addq %rsi, %r8 + 0x49, 0x39, 0xf3, //0x000084fa cmpq %rsi, %r11 + 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x000084fd je LBB31_98 + //0x00008503 LBB31_96 + 0x44, 0x89, 0xd0, //0x00008503 movl %r10d, %eax + 0xf7, 0xd8, //0x00008506 negl %eax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008508 .p2align 4, 0x90 + //0x00008510 LBB31_97 + 0x41, 0xc6, 0x00, 0x30, //0x00008510 movb $48, (%r8) + 0x49, 0xff, 0xc0, //0x00008514 incq %r8 + 0xff, 0xc6, //0x00008517 incl %esi + 0x39, 0xc6, //0x00008519 cmpl %eax, %esi + 0x0f, 0x8c, 0xef, 0xff, 0xff, 0xff, //0x0000851b jl LBB31_97 + //0x00008521 LBB31_98 + 0x4b, 0x8d, 0x04, 0x20, //0x00008521 leaq (%r8,%r12), %rax + 0x41, 0x81, 0xfd, 0x10, 0x27, 0x00, 0x00, //0x00008525 cmpl $10000, %r13d + 0x0f, 0x82, 0x63, 0x00, 0x00, 0x00, //0x0000852c jb LBB31_101 + 0x44, 0x89, 0xe9, //0x00008532 movl %r13d, %ecx + 0x41, 0xbb, 0x59, 0x17, 0xb7, 0xd1, //0x00008535 movl $3518437209, %r11d + 0x4c, 0x0f, 0xaf, 0xd9, //0x0000853b imulq %rcx, %r11 + 0x49, 0xc1, 0xeb, 0x2d, //0x0000853f shrq $45, %r11 + 0x41, 0x69, 0xcb, 0xf0, 0xd8, 0xff, 0xff, //0x00008543 imull $-10000, %r11d, %ecx + 0x44, 0x01, 0xe9, //0x0000854a addl %r13d, %ecx + 0x0f, 0x84, 0x87, 0x01, 0x00, 0x00, //0x0000854d je LBB31_103 + 0x89, 0xca, //0x00008553 movl %ecx, %edx + 0x48, 0x69, 0xd2, 0x1f, 0x85, 0xeb, 0x51, //0x00008555 imulq $1374389535, %rdx, %rdx + 0x48, 0xc1, 0xea, 0x25, //0x0000855c shrq $37, %rdx + 0x6b, 0xda, 0x64, //0x00008560 imull $100, %edx, %ebx + 0x29, 0xd9, //0x00008563 subl %ebx, %ecx + 0x48, 0x8d, 0x1d, 0xb4, 0x3b, 0x00, 0x00, //0x00008565 leaq $15284(%rip), %rbx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4b, //0x0000856c movzwl (%rbx,%rcx,2), %ecx + 0x66, 0x89, 0x48, 0xfe, //0x00008570 movw %cx, $-2(%rax) + 0x0f, 0xb7, 0x0c, 0x53, //0x00008574 movzwl (%rbx,%rdx,2), %ecx + 0x66, 0x89, 0x48, 0xfc, //0x00008578 movw %cx, $-4(%rax) + 0x45, 0x31, 0xc9, //0x0000857c xorl %r9d, %r9d + 0x48, 0x83, 0xc0, 0xfc, //0x0000857f addq $-4, %rax + 0x41, 0x83, 0xfb, 0x64, //0x00008583 cmpl $100, %r11d + 0x0f, 0x83, 0x18, 0x00, 0x00, 0x00, //0x00008587 jae LBB31_105 + //0x0000858d LBB31_102 + 0x44, 0x89, 0xd9, //0x0000858d movl %r11d, %ecx + 0xe9, 0x4d, 0x00, 0x00, 0x00, //0x00008590 jmp LBB31_107 + //0x00008595 LBB31_101 + 0x45, 0x31, 0xc9, //0x00008595 xorl %r9d, %r9d + 0x45, 0x89, 0xeb, //0x00008598 movl %r13d, %r11d + 0x41, 0x83, 0xfb, 0x64, //0x0000859b cmpl $100, %r11d + 0x0f, 0x82, 0xe8, 0xff, 0xff, 0xff, //0x0000859f jb LBB31_102 + //0x000085a5 LBB31_105 + 0x48, 0xff, 0xc8, //0x000085a5 decq %rax + 0x48, 0x8d, 0x15, 0x71, 0x3b, 0x00, 0x00, //0x000085a8 leaq $15217(%rip), %rdx /* _Digits+0(%rip) */ + 0x90, //0x000085af .p2align 4, 0x90 + //0x000085b0 LBB31_106 + 0x44, 0x89, 0xd9, //0x000085b0 movl %r11d, %ecx + 0x48, 0x69, 0xc9, 0x1f, 0x85, 0xeb, 0x51, //0x000085b3 imulq $1374389535, %rcx, %rcx + 0x48, 0xc1, 0xe9, 0x25, //0x000085ba shrq $37, %rcx + 0x6b, 0xd9, 0x64, //0x000085be imull $100, %ecx, %ebx + 0x44, 0x89, 0xde, //0x000085c1 movl %r11d, %esi + 0x29, 0xde, //0x000085c4 subl %ebx, %esi + 0x0f, 0xb7, 0x34, 0x72, //0x000085c6 movzwl (%rdx,%rsi,2), %esi + 0x66, 0x89, 0x70, 0xff, //0x000085ca movw %si, $-1(%rax) + 0x48, 0x83, 0xc0, 0xfe, //0x000085ce addq $-2, %rax + 0x41, 0x81, 0xfb, 0x0f, 0x27, 0x00, 0x00, //0x000085d2 cmpl $9999, %r11d + 0x41, 0x89, 0xcb, //0x000085d9 movl %ecx, %r11d + 0x0f, 0x87, 0xce, 0xff, 0xff, 0xff, //0x000085dc ja LBB31_106 + //0x000085e2 LBB31_107 + 0x83, 0xf9, 0x0a, //0x000085e2 cmpl $10, %ecx + 0x0f, 0x82, 0x16, 0x00, 0x00, 0x00, //0x000085e5 jb LBB31_109 + 0x89, 0xc8, //0x000085eb movl %ecx, %eax + 0x48, 0x8d, 0x0d, 0x2c, 0x3b, 0x00, 0x00, //0x000085ed leaq $15148(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x000085f4 movzwl (%rcx,%rax,2), %eax + 0x66, 0x41, 0x89, 0x00, //0x000085f8 movw %ax, (%r8) + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x000085fc jmp LBB31_110 + //0x00008601 LBB31_109 + 0x80, 0xc1, 0x30, //0x00008601 addb $48, %cl + 0x41, 0x88, 0x08, //0x00008604 movb %cl, (%r8) + //0x00008607 LBB31_110 + 0x4d, 0x29, 0xcc, //0x00008607 subq %r9, %r12 + 0x49, 0x8d, 0x74, 0x24, 0x01, //0x0000860a leaq $1(%r12), %rsi + 0x49, 0x8d, 0x54, 0x24, 0x11, //0x0000860f leaq $17(%r12), %rdx + 0x49, 0x8d, 0x44, 0x24, 0x02, //0x00008614 leaq $2(%r12), %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008619 .p2align 4, 0x90 + //0x00008620 LBB31_111 + 0x48, 0xff, 0xca, //0x00008620 decq %rdx + 0x48, 0xff, 0xce, //0x00008623 decq %rsi + 0x48, 0xff, 0xc8, //0x00008626 decq %rax + 0x43, 0x80, 0x7c, 0x20, 0xff, 0x30, //0x00008629 cmpb $48, $-1(%r8,%r12) + 0x4d, 0x8d, 0x64, 0x24, 0xff, //0x0000862f leaq $-1(%r12), %r12 + 0x0f, 0x84, 0xe6, 0xff, 0xff, 0xff, //0x00008634 je LBB31_111 + 0x4d, 0x8d, 0x0c, 0x30, //0x0000863a leaq (%r8,%rsi), %r9 + 0x45, 0x85, 0xd2, //0x0000863e testl %r10d, %r10d + 0x0f, 0x8e, 0x8b, 0x00, 0x00, 0x00, //0x00008641 jle LBB31_116 + 0x44, 0x89, 0xc9, //0x00008647 movl %r9d, %ecx + 0x44, 0x29, 0xc1, //0x0000864a subl %r8d, %ecx + 0x41, 0x39, 0xca, //0x0000864d cmpl %ecx, %r10d + 0x0f, 0x8d, 0x23, 0x00, 0x00, 0x00, //0x00008650 jge LBB31_117 + 0x43, 0x8d, 0x0c, 0x02, //0x00008656 leal (%r10,%r8), %ecx + 0x41, 0x29, 0xc9, //0x0000865a subl %ecx, %r9d + 0x49, 0x8d, 0x49, 0xff, //0x0000865d leaq $-1(%r9), %rcx + 0x45, 0x89, 0xcb, //0x00008661 movl %r9d, %r11d + 0x41, 0x83, 0xe3, 0x03, //0x00008664 andl $3, %r11d + 0x48, 0x83, 0xf9, 0x03, //0x00008668 cmpq $3, %rcx + 0x0f, 0x83, 0x81, 0x00, 0x00, 0x00, //0x0000866c jae LBB31_121 + 0x31, 0xc9, //0x00008672 xorl %ecx, %ecx + 0xe9, 0xa3, 0x00, 0x00, 0x00, //0x00008674 jmp LBB31_124 + //0x00008679 LBB31_117 + 0x0f, 0x8e, 0x53, 0x00, 0x00, 0x00, //0x00008679 jle LBB31_116 + 0x45, 0x01, 0xc2, //0x0000867f addl %r8d, %r10d + 0x45, 0x89, 0xcf, //0x00008682 movl %r9d, %r15d + 0x41, 0xf7, 0xd7, //0x00008685 notl %r15d + 0x45, 0x01, 0xd7, //0x00008688 addl %r10d, %r15d + 0x45, 0x31, 0xf6, //0x0000868b xorl %r14d, %r14d + 0x4d, 0x89, 0xcb, //0x0000868e movq %r9, %r11 + 0x41, 0x83, 0xff, 0x1e, //0x00008691 cmpl $30, %r15d + 0x0f, 0x86, 0x9b, 0x01, 0x00, 0x00, //0x00008695 jbe LBB31_135 + 0x49, 0xff, 0xc7, //0x0000869b incq %r15 + 0x4d, 0x89, 0xfe, //0x0000869e movq %r15, %r14 + 0x49, 0x83, 0xe6, 0xe0, //0x000086a1 andq $-32, %r14 + 0x4f, 0x8d, 0x1c, 0x30, //0x000086a5 leaq (%r8,%r14), %r11 + 0x49, 0x8d, 0x5e, 0xe0, //0x000086a9 leaq $-32(%r14), %rbx + 0x48, 0x89, 0xd8, //0x000086ad movq %rbx, %rax + 0x48, 0xc1, 0xe8, 0x05, //0x000086b0 shrq $5, %rax + 0x48, 0xff, 0xc0, //0x000086b4 incq %rax + 0x41, 0x89, 0xc4, //0x000086b7 movl %eax, %r12d + 0x41, 0x83, 0xe4, 0x07, //0x000086ba andl $7, %r12d + 0x48, 0x81, 0xfb, 0xe0, 0x00, 0x00, 0x00, //0x000086be cmpq $224, %rbx + 0x0f, 0x83, 0x8f, 0x00, 0x00, 0x00, //0x000086c5 jae LBB31_129 + 0x31, 0xc0, //0x000086cb xorl %eax, %eax + 0xe9, 0x23, 0x01, 0x00, 0x00, //0x000086cd jmp LBB31_131 + //0x000086d2 LBB31_116 + 0x4d, 0x89, 0xc8, //0x000086d2 movq %r9, %r8 + 0xe9, 0x76, 0x01, 0x00, 0x00, //0x000086d5 jmp LBB31_137 + //0x000086da LBB31_103 + 0x41, 0xb9, 0x04, 0x00, 0x00, 0x00, //0x000086da movl $4, %r9d + 0x48, 0x83, 0xc0, 0xfc, //0x000086e0 addq $-4, %rax + 0x41, 0x83, 0xfb, 0x64, //0x000086e4 cmpl $100, %r11d + 0x0f, 0x82, 0x9f, 0xfe, 0xff, 0xff, //0x000086e8 jb LBB31_102 + 0xe9, 0xb2, 0xfe, 0xff, 0xff, //0x000086ee jmp LBB31_105 + //0x000086f3 LBB31_121 + 0x4d, 0x89, 0xde, //0x000086f3 movq %r11, %r14 + 0x4d, 0x29, 0xce, //0x000086f6 subq %r9, %r14 + 0x31, 0xc9, //0x000086f9 xorl %ecx, %ecx + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000086fb .p2align 4, 0x90 + //0x00008700 LBB31_122 + 0x49, 0x8d, 0x1c, 0x08, //0x00008700 leaq (%r8,%rcx), %rbx + 0x8b, 0x54, 0x1e, 0xfc, //0x00008704 movl $-4(%rsi,%rbx), %edx + 0x89, 0x54, 0x1e, 0xfd, //0x00008708 movl %edx, $-3(%rsi,%rbx) + 0x48, 0x83, 0xc1, 0xfc, //0x0000870c addq $-4, %rcx + 0x49, 0x39, 0xce, //0x00008710 cmpq %rcx, %r14 + 0x0f, 0x85, 0xe7, 0xff, 0xff, 0xff, //0x00008713 jne LBB31_122 + 0x48, 0xf7, 0xd9, //0x00008719 negq %rcx + //0x0000871c LBB31_124 + 0x4d, 0x85, 0xdb, //0x0000871c testq %r11, %r11 + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x0000871f je LBB31_127 + 0x49, 0xf7, 0xdb, //0x00008725 negq %r11 + 0x4c, 0x89, 0xc2, //0x00008728 movq %r8, %rdx + 0x48, 0x29, 0xca, //0x0000872b subq %rcx, %rdx + 0x31, 0xc9, //0x0000872e xorl %ecx, %ecx + //0x00008730 .p2align 4, 0x90 + //0x00008730 LBB31_126 + 0x48, 0x8d, 0x34, 0x0a, //0x00008730 leaq (%rdx,%rcx), %rsi + 0x41, 0x0f, 0xb6, 0x1c, 0x34, //0x00008734 movzbl (%r12,%rsi), %ebx + 0x41, 0x88, 0x5c, 0x34, 0x01, //0x00008739 movb %bl, $1(%r12,%rsi) + 0x48, 0xff, 0xc9, //0x0000873e decq %rcx + 0x49, 0x39, 0xcb, //0x00008741 cmpq %rcx, %r11 + 0x0f, 0x85, 0xe6, 0xff, 0xff, 0xff, //0x00008744 jne LBB31_126 + //0x0000874a LBB31_127 + 0x49, 0x63, 0xca, //0x0000874a movslq %r10d, %rcx + 0x41, 0xc6, 0x04, 0x08, 0x2e, //0x0000874d movb $46, (%r8,%rcx) + 0x49, 0x01, 0xc0, //0x00008752 addq %rax, %r8 + 0xe9, 0xf6, 0x00, 0x00, 0x00, //0x00008755 jmp LBB31_137 + //0x0000875a LBB31_129 + 0x4c, 0x89, 0xe3, //0x0000875a movq %r12, %rbx + 0x48, 0x29, 0xc3, //0x0000875d subq %rax, %rbx + 0x31, 0xc0, //0x00008760 xorl %eax, %eax + 0x66, 0x0f, 0x6f, 0x05, 0x06, 0xf4, 0xff, 0xff, //0x00008762 movdqa $-3066(%rip), %xmm0 /* LCPI31_0+0(%rip) */ + //0x0000876a LBB31_130 + 0x49, 0x8d, 0x0c, 0x00, //0x0000876a leaq (%r8,%rax), %rcx + 0xf3, 0x0f, 0x7f, 0x04, 0x0e, //0x0000876e movdqu %xmm0, (%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x44, 0x0e, 0x10, //0x00008773 movdqu %xmm0, $16(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x44, 0x0e, 0x20, //0x00008779 movdqu %xmm0, $32(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x44, 0x0e, 0x30, //0x0000877f movdqu %xmm0, $48(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x44, 0x0e, 0x40, //0x00008785 movdqu %xmm0, $64(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x44, 0x0e, 0x50, //0x0000878b movdqu %xmm0, $80(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x44, 0x0e, 0x60, //0x00008791 movdqu %xmm0, $96(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x44, 0x0e, 0x70, //0x00008797 movdqu %xmm0, $112(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x84, 0x0e, 0x80, 0x00, 0x00, 0x00, //0x0000879d movdqu %xmm0, $128(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x84, 0x0e, 0x90, 0x00, 0x00, 0x00, //0x000087a6 movdqu %xmm0, $144(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x84, 0x0e, 0xa0, 0x00, 0x00, 0x00, //0x000087af movdqu %xmm0, $160(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x84, 0x0e, 0xb0, 0x00, 0x00, 0x00, //0x000087b8 movdqu %xmm0, $176(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x84, 0x0e, 0xc0, 0x00, 0x00, 0x00, //0x000087c1 movdqu %xmm0, $192(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x84, 0x0e, 0xd0, 0x00, 0x00, 0x00, //0x000087ca movdqu %xmm0, $208(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x84, 0x0e, 0xe0, 0x00, 0x00, 0x00, //0x000087d3 movdqu %xmm0, $224(%rsi,%rcx) + 0xf3, 0x0f, 0x7f, 0x84, 0x0e, 0xf0, 0x00, 0x00, 0x00, //0x000087dc movdqu %xmm0, $240(%rsi,%rcx) + 0x48, 0x05, 0x00, 0x01, 0x00, 0x00, //0x000087e5 addq $256, %rax + 0x48, 0x83, 0xc3, 0x08, //0x000087eb addq $8, %rbx + 0x0f, 0x85, 0x75, 0xff, 0xff, 0xff, //0x000087ef jne LBB31_130 + //0x000087f5 LBB31_131 + 0x49, 0x01, 0xf3, //0x000087f5 addq %rsi, %r11 + 0x4d, 0x85, 0xe4, //0x000087f8 testq %r12, %r12 + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x000087fb je LBB31_134 + 0x49, 0x01, 0xc0, //0x00008801 addq %rax, %r8 + 0x49, 0x01, 0xd0, //0x00008804 addq %rdx, %r8 + 0x49, 0xf7, 0xdc, //0x00008807 negq %r12 + 0x66, 0x0f, 0x6f, 0x05, 0x5e, 0xf3, 0xff, 0xff, //0x0000880a movdqa $-3234(%rip), %xmm0 /* LCPI31_0+0(%rip) */ + //0x00008812 LBB31_133 + 0xf3, 0x41, 0x0f, 0x7f, 0x40, 0xf0, //0x00008812 movdqu %xmm0, $-16(%r8) + 0xf3, 0x41, 0x0f, 0x7f, 0x00, //0x00008818 movdqu %xmm0, (%r8) + 0x49, 0x83, 0xc0, 0x20, //0x0000881d addq $32, %r8 + 0x49, 0xff, 0xc4, //0x00008821 incq %r12 + 0x0f, 0x85, 0xe8, 0xff, 0xff, 0xff, //0x00008824 jne LBB31_133 + //0x0000882a LBB31_134 + 0x4d, 0x89, 0xd8, //0x0000882a movq %r11, %r8 + 0x4d, 0x39, 0xf7, //0x0000882d cmpq %r14, %r15 + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00008830 je LBB31_137 + //0x00008836 LBB31_135 + 0x45, 0x29, 0xf2, //0x00008836 subl %r14d, %r10d + 0x45, 0x29, 0xca, //0x00008839 subl %r9d, %r10d + 0x4d, 0x89, 0xd8, //0x0000883c movq %r11, %r8 + 0x90, //0x0000883f .p2align 4, 0x90 + //0x00008840 LBB31_136 + 0x41, 0xc6, 0x00, 0x30, //0x00008840 movb $48, (%r8) + 0x49, 0xff, 0xc0, //0x00008844 incq %r8 + 0x41, 0xff, 0xca, //0x00008847 decl %r10d + 0x0f, 0x85, 0xf0, 0xff, 0xff, 0xff, //0x0000884a jne LBB31_136 + //0x00008850 LBB31_137 + 0x41, 0x29, 0xf8, //0x00008850 subl %edi, %r8d + //0x00008853 LBB31_138 + 0x44, 0x89, 0xc0, //0x00008853 movl %r8d, %eax + 0x5b, //0x00008856 popq %rbx + 0x41, 0x5c, //0x00008857 popq %r12 + 0x41, 0x5d, //0x00008859 popq %r13 + 0x41, 0x5e, //0x0000885b popq %r14 + 0x41, 0x5f, //0x0000885d popq %r15 + 0x5d, //0x0000885f popq %rbp + 0xc3, //0x00008860 retq + //0x00008861 LBB31_139 + 0x45, 0x31, 0xc0, //0x00008861 xorl %r8d, %r8d + 0xe9, 0xea, 0xff, 0xff, 0xff, //0x00008864 jmp LBB31_138 + //0x00008869 LBB31_140 + 0x41, 0xbf, 0x6b, 0xff, 0xff, 0xff, //0x00008869 movl $-149, %r15d + 0x89, 0xc6, //0x0000886f movl %eax, %esi + 0xe9, 0x89, 0xf3, 0xff, 0xff, //0x00008871 jmp LBB31_5 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00008876 .p2align 4, 0x00 + //0x00008880 LCPI32_0 + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, //0x00008880 QUAD $0x4040404040404040; QUAD $0x4040404040404040 // .space 16, '@@@@@@@@@@@@@@@@' + //0x00008890 LCPI32_1 + 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, //0x00008890 QUAD $0x5b5b5b5b5b5b5b5b; QUAD $0x5b5b5b5b5b5b5b5b // .space 16, '[[[[[[[[[[[[[[[[' + //0x000088a0 LCPI32_2 + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000088a0 QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .space 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + //0x000088b0 LCPI32_3 + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, //0x000088b0 QUAD $0xbfbfbfbfbfbfbfbf; QUAD $0xbfbfbfbfbfbfbfbf // .space 16, '\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf' + //0x000088c0 LCPI32_4 + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, //0x000088c0 QUAD $0x1919191919191919; QUAD $0x1919191919191919 // .space 16, '\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19\x19' + //0x000088d0 LCPI32_5 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, //0x000088d0 QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + //0x000088e0 .p2align 4, 0x90 + //0x000088e0 _to_lower + 0x55, //0x000088e0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000088e1 movq %rsp, %rbp + 0x41, 0x56, //0x000088e4 pushq %r14 + 0x53, //0x000088e6 pushq %rbx + 0x31, 0xc9, //0x000088e7 xorl %ecx, %ecx + 0x66, 0x0f, 0x6f, 0x05, 0x8f, 0xff, 0xff, 0xff, //0x000088e9 movdqa $-113(%rip), %xmm0 /* LCPI32_0+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x0d, 0x97, 0xff, 0xff, 0xff, //0x000088f1 movdqa $-105(%rip), %xmm1 /* LCPI32_1+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x15, 0x9f, 0xff, 0xff, 0xff, //0x000088f9 movdqa $-97(%rip), %xmm2 /* LCPI32_2+0(%rip) */ + 0x48, 0x89, 0xd0, //0x00008901 movq %rdx, %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008904 .p2align 4, 0x90 + //0x00008910 LBB32_1 + 0xf3, 0x0f, 0x6f, 0x1c, 0x0e, //0x00008910 movdqu (%rsi,%rcx), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00008915 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x64, 0xe0, //0x00008919 pcmpgtb %xmm0, %xmm4 + 0x66, 0x0f, 0x6f, 0xe9, //0x0000891d movdqa %xmm1, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x00008921 pcmpgtb %xmm3, %xmm5 + 0x66, 0x0f, 0xdb, 0xec, //0x00008925 pand %xmm4, %xmm5 + 0x66, 0x0f, 0xdb, 0xea, //0x00008929 pand %xmm2, %xmm5 + 0x66, 0x0f, 0x71, 0xf5, 0x05, //0x0000892d psllw $5, %xmm5 + 0x66, 0x0f, 0xfc, 0xeb, //0x00008932 paddb %xmm3, %xmm5 + 0xf3, 0x0f, 0x7f, 0x2c, 0x0f, //0x00008936 movdqu %xmm5, (%rdi,%rcx) + 0x48, 0x83, 0xc0, 0xf0, //0x0000893b addq $-16, %rax + 0x48, 0x83, 0xc1, 0x10, //0x0000893f addq $16, %rcx + 0x48, 0x83, 0xf8, 0x0f, //0x00008943 cmpq $15, %rax + 0x0f, 0x87, 0xc3, 0xff, 0xff, 0xff, //0x00008947 ja LBB32_1 + 0x49, 0x89, 0xd2, //0x0000894d movq %rdx, %r10 + 0x49, 0x29, 0xca, //0x00008950 subq %rcx, %r10 + 0x0f, 0x84, 0xba, 0x02, 0x00, 0x00, //0x00008953 je LBB32_20 + 0x4c, 0x8d, 0x0c, 0x0f, //0x00008959 leaq (%rdi,%rcx), %r9 + 0x4c, 0x8d, 0x04, 0x0e, //0x0000895d leaq (%rsi,%rcx), %r8 + 0x48, 0x83, 0xf8, 0x20, //0x00008961 cmpq $32, %rax + 0x0f, 0x82, 0x26, 0x00, 0x00, 0x00, //0x00008965 jb LBB32_14 + 0x49, 0x83, 0xc2, 0x10, //0x0000896b addq $16, %r10 + 0x48, 0x8d, 0x5c, 0x0e, 0xf0, //0x0000896f leaq $-16(%rsi,%rcx), %rbx + 0x4c, 0x01, 0xd3, //0x00008974 addq %r10, %rbx + 0x49, 0x39, 0xd9, //0x00008977 cmpq %rbx, %r9 + 0x0f, 0x83, 0x2b, 0x00, 0x00, 0x00, //0x0000897a jae LBB32_6 + 0x48, 0x8d, 0x5c, 0x0f, 0xf0, //0x00008980 leaq $-16(%rdi,%rcx), %rbx + 0x4c, 0x01, 0xd3, //0x00008985 addq %r10, %rbx + 0x49, 0x39, 0xd8, //0x00008988 cmpq %rbx, %r8 + 0x0f, 0x83, 0x1a, 0x00, 0x00, 0x00, //0x0000898b jae LBB32_6 + //0x00008991 LBB32_14 + 0xa8, 0x01, //0x00008991 testb $1, %al + 0x0f, 0x85, 0x01, 0x02, 0x00, 0x00, //0x00008993 jne LBB32_16 + //0x00008999 LBB32_15 + 0x48, 0x89, 0xc1, //0x00008999 movq %rax, %rcx + 0x48, 0x83, 0xf8, 0x01, //0x0000899c cmpq $1, %rax + 0x0f, 0x85, 0x1f, 0x02, 0x00, 0x00, //0x000089a0 jne LBB32_18 + 0xe9, 0x68, 0x02, 0x00, 0x00, //0x000089a6 jmp LBB32_20 + //0x000089ab LBB32_6 + 0x49, 0x89, 0xc0, //0x000089ab movq %rax, %r8 + 0x49, 0x83, 0xe0, 0xe0, //0x000089ae andq $-32, %r8 + 0x49, 0x8d, 0x58, 0xe0, //0x000089b2 leaq $-32(%r8), %rbx + 0x49, 0x89, 0xdb, //0x000089b6 movq %rbx, %r11 + 0x49, 0xc1, 0xeb, 0x05, //0x000089b9 shrq $5, %r11 + 0x4d, 0x8d, 0x53, 0x01, //0x000089bd leaq $1(%r11), %r10 + 0x48, 0x85, 0xdb, //0x000089c1 testq %rbx, %rbx + 0x0f, 0x84, 0x4e, 0x02, 0x00, 0x00, //0x000089c4 je LBB32_7 + 0x41, 0x8d, 0x5b, 0x01, //0x000089ca leal $1(%r11), %ebx + 0x0f, 0xb6, 0xdb, //0x000089ce movzbl %bl, %ebx + 0x83, 0xe3, 0x01, //0x000089d1 andl $1, %ebx + 0x49, 0xf7, 0xd3, //0x000089d4 notq %r11 + 0x49, 0x01, 0xdb, //0x000089d7 addq %rbx, %r11 + 0x45, 0x31, 0xc9, //0x000089da xorl %r9d, %r9d + 0x66, 0x0f, 0x6f, 0x05, 0xcb, 0xfe, 0xff, 0xff, //0x000089dd movdqa $-309(%rip), %xmm0 /* LCPI32_3+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x0d, 0xd3, 0xfe, 0xff, 0xff, //0x000089e5 movdqa $-301(%rip), %xmm1 /* LCPI32_4+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x15, 0xdb, 0xfe, 0xff, 0xff, //0x000089ed movdqa $-293(%rip), %xmm2 /* LCPI32_5+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000089f5 .p2align 4, 0x90 + //0x00008a00 LBB32_9 + 0x4e, 0x8d, 0x34, 0x0e, //0x00008a00 leaq (%rsi,%r9), %r14 + 0xf3, 0x42, 0x0f, 0x6f, 0x1c, 0x31, //0x00008a04 movdqu (%rcx,%r14), %xmm3 + 0xf3, 0x42, 0x0f, 0x6f, 0x64, 0x31, 0x10, //0x00008a0a movdqu $16(%rcx,%r14), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x00008a11 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0xfc, 0xe8, //0x00008a15 paddb %xmm0, %xmm5 + 0x66, 0x0f, 0x6f, 0xf4, //0x00008a19 movdqa %xmm4, %xmm6 + 0x66, 0x0f, 0xfc, 0xf0, //0x00008a1d paddb %xmm0, %xmm6 + 0x66, 0x0f, 0x6f, 0xfd, //0x00008a21 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0xda, 0xf9, //0x00008a25 pminub %xmm1, %xmm7 + 0x66, 0x0f, 0x74, 0xfd, //0x00008a29 pcmpeqb %xmm5, %xmm7 + 0x66, 0x0f, 0x6f, 0xee, //0x00008a2d movdqa %xmm6, %xmm5 + 0x66, 0x0f, 0xda, 0xe9, //0x00008a31 pminub %xmm1, %xmm5 + 0x66, 0x0f, 0x74, 0xee, //0x00008a35 pcmpeqb %xmm6, %xmm5 + 0x66, 0x0f, 0x6f, 0xf7, //0x00008a39 movdqa %xmm7, %xmm6 + 0x66, 0x0f, 0xdf, 0xf3, //0x00008a3d pandn %xmm3, %xmm6 + 0x66, 0x0f, 0xfc, 0xda, //0x00008a41 paddb %xmm2, %xmm3 + 0x66, 0x0f, 0xdb, 0xdf, //0x00008a45 pand %xmm7, %xmm3 + 0x66, 0x0f, 0xeb, 0xde, //0x00008a49 por %xmm6, %xmm3 + 0x66, 0x0f, 0x6f, 0xf5, //0x00008a4d movdqa %xmm5, %xmm6 + 0x66, 0x0f, 0xdf, 0xf4, //0x00008a51 pandn %xmm4, %xmm6 + 0x66, 0x0f, 0xfc, 0xe2, //0x00008a55 paddb %xmm2, %xmm4 + 0x66, 0x0f, 0xdb, 0xe5, //0x00008a59 pand %xmm5, %xmm4 + 0x66, 0x0f, 0xeb, 0xe6, //0x00008a5d por %xmm6, %xmm4 + 0x4a, 0x8d, 0x1c, 0x0f, //0x00008a61 leaq (%rdi,%r9), %rbx + 0xf3, 0x0f, 0x7f, 0x1c, 0x19, //0x00008a65 movdqu %xmm3, (%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x64, 0x19, 0x10, //0x00008a6a movdqu %xmm4, $16(%rcx,%rbx) + 0xf3, 0x42, 0x0f, 0x6f, 0x5c, 0x31, 0x20, //0x00008a70 movdqu $32(%rcx,%r14), %xmm3 + 0xf3, 0x42, 0x0f, 0x6f, 0x64, 0x31, 0x30, //0x00008a77 movdqu $48(%rcx,%r14), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x00008a7e movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0xfc, 0xe8, //0x00008a82 paddb %xmm0, %xmm5 + 0x66, 0x0f, 0x6f, 0xf4, //0x00008a86 movdqa %xmm4, %xmm6 + 0x66, 0x0f, 0xfc, 0xf0, //0x00008a8a paddb %xmm0, %xmm6 + 0x66, 0x0f, 0x6f, 0xfd, //0x00008a8e movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0xda, 0xf9, //0x00008a92 pminub %xmm1, %xmm7 + 0x66, 0x0f, 0x74, 0xfd, //0x00008a96 pcmpeqb %xmm5, %xmm7 + 0x66, 0x0f, 0x6f, 0xee, //0x00008a9a movdqa %xmm6, %xmm5 + 0x66, 0x0f, 0xda, 0xe9, //0x00008a9e pminub %xmm1, %xmm5 + 0x66, 0x0f, 0x74, 0xee, //0x00008aa2 pcmpeqb %xmm6, %xmm5 + 0x66, 0x0f, 0x6f, 0xf7, //0x00008aa6 movdqa %xmm7, %xmm6 + 0x66, 0x0f, 0xdf, 0xf3, //0x00008aaa pandn %xmm3, %xmm6 + 0x66, 0x0f, 0xfc, 0xda, //0x00008aae paddb %xmm2, %xmm3 + 0x66, 0x0f, 0xdb, 0xdf, //0x00008ab2 pand %xmm7, %xmm3 + 0x66, 0x0f, 0xeb, 0xde, //0x00008ab6 por %xmm6, %xmm3 + 0x66, 0x0f, 0x6f, 0xf5, //0x00008aba movdqa %xmm5, %xmm6 + 0x66, 0x0f, 0xdf, 0xf4, //0x00008abe pandn %xmm4, %xmm6 + 0x66, 0x0f, 0xfc, 0xe2, //0x00008ac2 paddb %xmm2, %xmm4 + 0x66, 0x0f, 0xdb, 0xe5, //0x00008ac6 pand %xmm5, %xmm4 + 0x66, 0x0f, 0xeb, 0xe6, //0x00008aca por %xmm6, %xmm4 + 0xf3, 0x0f, 0x7f, 0x5c, 0x19, 0x20, //0x00008ace movdqu %xmm3, $32(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x64, 0x19, 0x30, //0x00008ad4 movdqu %xmm4, $48(%rcx,%rbx) + 0x49, 0x83, 0xc1, 0x40, //0x00008ada addq $64, %r9 + 0x49, 0x83, 0xc3, 0x02, //0x00008ade addq $2, %r11 + 0x0f, 0x85, 0x18, 0xff, 0xff, 0xff, //0x00008ae2 jne LBB32_9 + 0x41, 0xf6, 0xc2, 0x01, //0x00008ae8 testb $1, %r10b + 0x0f, 0x84, 0x7c, 0x00, 0x00, 0x00, //0x00008aec je LBB32_12 + //0x00008af2 LBB32_11 + 0x4a, 0x8d, 0x5c, 0x0e, 0x10, //0x00008af2 leaq $16(%rsi,%r9), %rbx + 0xf3, 0x0f, 0x6f, 0x44, 0x19, 0xf0, //0x00008af7 movdqu $-16(%rcx,%rbx), %xmm0 + 0xf3, 0x0f, 0x6f, 0x0c, 0x19, //0x00008afd movdqu (%rcx,%rbx), %xmm1 + 0x66, 0x0f, 0x6f, 0x15, 0xa6, 0xfd, 0xff, 0xff, //0x00008b02 movdqa $-602(%rip), %xmm2 /* LCPI32_3+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xd8, //0x00008b0a movdqa %xmm0, %xmm3 + 0x66, 0x0f, 0xfc, 0xda, //0x00008b0e paddb %xmm2, %xmm3 + 0x66, 0x0f, 0xfc, 0xd1, //0x00008b12 paddb %xmm1, %xmm2 + 0x66, 0x0f, 0x6f, 0x25, 0xa2, 0xfd, 0xff, 0xff, //0x00008b16 movdqa $-606(%rip), %xmm4 /* LCPI32_4+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xeb, //0x00008b1e movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0xda, 0xec, //0x00008b22 pminub %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xeb, //0x00008b26 pcmpeqb %xmm3, %xmm5 + 0x66, 0x0f, 0xda, 0xe2, //0x00008b2a pminub %xmm2, %xmm4 + 0x66, 0x0f, 0x74, 0xe2, //0x00008b2e pcmpeqb %xmm2, %xmm4 + 0x66, 0x0f, 0x6f, 0x15, 0x96, 0xfd, 0xff, 0xff, //0x00008b32 movdqa $-618(%rip), %xmm2 /* LCPI32_5+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xdd, //0x00008b3a movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0xdf, 0xd8, //0x00008b3e pandn %xmm0, %xmm3 + 0x66, 0x0f, 0xfc, 0xc2, //0x00008b42 paddb %xmm2, %xmm0 + 0x66, 0x0f, 0xfc, 0xd1, //0x00008b46 paddb %xmm1, %xmm2 + 0x66, 0x0f, 0xdb, 0xc5, //0x00008b4a pand %xmm5, %xmm0 + 0x66, 0x0f, 0xeb, 0xc3, //0x00008b4e por %xmm3, %xmm0 + 0x66, 0x0f, 0xdb, 0xd4, //0x00008b52 pand %xmm4, %xmm2 + 0x66, 0x0f, 0xdf, 0xe1, //0x00008b56 pandn %xmm1, %xmm4 + 0x66, 0x0f, 0xeb, 0xe2, //0x00008b5a por %xmm2, %xmm4 + 0x4a, 0x8d, 0x5c, 0x0f, 0x10, //0x00008b5e leaq $16(%rdi,%r9), %rbx + 0xf3, 0x0f, 0x7f, 0x44, 0x19, 0xf0, //0x00008b63 movdqu %xmm0, $-16(%rcx,%rbx) + 0xf3, 0x0f, 0x7f, 0x24, 0x19, //0x00008b69 movdqu %xmm4, (%rcx,%rbx) + //0x00008b6e LBB32_12 + 0x4c, 0x39, 0xc0, //0x00008b6e cmpq %r8, %rax + 0x0f, 0x84, 0x9c, 0x00, 0x00, 0x00, //0x00008b71 je LBB32_20 + 0x4c, 0x01, 0xc6, //0x00008b77 addq %r8, %rsi + 0x4c, 0x29, 0xc2, //0x00008b7a subq %r8, %rdx + 0x4c, 0x01, 0xc7, //0x00008b7d addq %r8, %rdi + 0x48, 0x01, 0xce, //0x00008b80 addq %rcx, %rsi + 0x48, 0x29, 0xca, //0x00008b83 subq %rcx, %rdx + 0x48, 0x01, 0xcf, //0x00008b86 addq %rcx, %rdi + 0x49, 0x89, 0xf0, //0x00008b89 movq %rsi, %r8 + 0x48, 0x89, 0xd0, //0x00008b8c movq %rdx, %rax + 0x49, 0x89, 0xf9, //0x00008b8f movq %rdi, %r9 + 0xa8, 0x01, //0x00008b92 testb $1, %al + 0x0f, 0x84, 0xff, 0xfd, 0xff, 0xff, //0x00008b94 je LBB32_15 + //0x00008b9a LBB32_16 + 0x41, 0x0f, 0xb6, 0x08, //0x00008b9a movzbl (%r8), %ecx + 0x8d, 0x51, 0xbf, //0x00008b9e leal $-65(%rcx), %edx + 0x8d, 0x71, 0x20, //0x00008ba1 leal $32(%rcx), %esi + 0x80, 0xfa, 0x1a, //0x00008ba4 cmpb $26, %dl + 0x40, 0x0f, 0xb6, 0xd6, //0x00008ba7 movzbl %sil, %edx + 0x0f, 0x43, 0xd1, //0x00008bab cmovael %ecx, %edx + 0x48, 0x8d, 0x48, 0xff, //0x00008bae leaq $-1(%rax), %rcx + 0x41, 0x88, 0x11, //0x00008bb2 movb %dl, (%r9) + 0x49, 0xff, 0xc0, //0x00008bb5 incq %r8 + 0x49, 0xff, 0xc1, //0x00008bb8 incq %r9 + 0x48, 0x83, 0xf8, 0x01, //0x00008bbb cmpq $1, %rax + 0x0f, 0x84, 0x4e, 0x00, 0x00, 0x00, //0x00008bbf je LBB32_20 + //0x00008bc5 LBB32_18 + 0x31, 0xc0, //0x00008bc5 xorl %eax, %eax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008bc7 .p2align 4, 0x90 + //0x00008bd0 LBB32_19 + 0x41, 0x0f, 0xb6, 0x14, 0x00, //0x00008bd0 movzbl (%r8,%rax), %edx + 0x8d, 0x72, 0xbf, //0x00008bd5 leal $-65(%rdx), %esi + 0x8d, 0x7a, 0x20, //0x00008bd8 leal $32(%rdx), %edi + 0x40, 0x80, 0xfe, 0x1a, //0x00008bdb cmpb $26, %sil + 0x40, 0x0f, 0xb6, 0xf7, //0x00008bdf movzbl %dil, %esi + 0x0f, 0x43, 0xf2, //0x00008be3 cmovael %edx, %esi + 0x41, 0x88, 0x34, 0x01, //0x00008be6 movb %sil, (%r9,%rax) + 0x41, 0x0f, 0xb6, 0x54, 0x00, 0x01, //0x00008bea movzbl $1(%r8,%rax), %edx + 0x8d, 0x72, 0xbf, //0x00008bf0 leal $-65(%rdx), %esi + 0x8d, 0x7a, 0x20, //0x00008bf3 leal $32(%rdx), %edi + 0x40, 0x80, 0xfe, 0x1a, //0x00008bf6 cmpb $26, %sil + 0x40, 0x0f, 0xb6, 0xf7, //0x00008bfa movzbl %dil, %esi + 0x0f, 0x43, 0xf2, //0x00008bfe cmovael %edx, %esi + 0x41, 0x88, 0x74, 0x01, 0x01, //0x00008c01 movb %sil, $1(%r9,%rax) + 0x48, 0x83, 0xc0, 0x02, //0x00008c06 addq $2, %rax + 0x48, 0x39, 0xc1, //0x00008c0a cmpq %rax, %rcx + 0x0f, 0x85, 0xbd, 0xff, 0xff, 0xff, //0x00008c0d jne LBB32_19 + //0x00008c13 LBB32_20 + 0x5b, //0x00008c13 popq %rbx + 0x41, 0x5e, //0x00008c14 popq %r14 + 0x5d, //0x00008c16 popq %rbp + 0xc3, //0x00008c17 retq + //0x00008c18 LBB32_7 + 0x45, 0x31, 0xc9, //0x00008c18 xorl %r9d, %r9d + 0x41, 0xf6, 0xc2, 0x01, //0x00008c1b testb $1, %r10b + 0x0f, 0x85, 0xcd, 0xfe, 0xff, 0xff, //0x00008c1f jne LBB32_11 + 0xe9, 0x44, 0xff, 0xff, 0xff, //0x00008c25 jmp LBB32_12 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008c2a .p2align 4, 0x90 + //0x00008c30 _format_significand + 0x55, //0x00008c30 pushq %rbp + 0x48, 0x89, 0xe5, //0x00008c31 movq %rsp, %rbp + 0x41, 0x56, //0x00008c34 pushq %r14 + 0x53, //0x00008c36 pushq %rbx + 0x4c, 0x63, 0xc2, //0x00008c37 movslq %edx, %r8 + 0x49, 0x01, 0xf0, //0x00008c3a addq %rsi, %r8 + 0x48, 0x89, 0xf8, //0x00008c3d movq %rdi, %rax + 0x48, 0xc1, 0xe8, 0x20, //0x00008c40 shrq $32, %rax + 0x0f, 0x84, 0xb6, 0x00, 0x00, 0x00, //0x00008c44 je LBB33_1 + 0x48, 0xb9, 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x00008c4a movabsq $-6067343680855748867, %rcx + 0x48, 0x89, 0xf8, //0x00008c54 movq %rdi, %rax + 0x48, 0xf7, 0xe1, //0x00008c57 mulq %rcx + 0x48, 0xc1, 0xea, 0x1a, //0x00008c5a shrq $26, %rdx + 0x69, 0xca, 0x00, 0x1f, 0x0a, 0xfa, //0x00008c5e imull $-100000000, %edx, %ecx + 0x01, 0xf9, //0x00008c64 addl %edi, %ecx + 0x0f, 0x84, 0xb0, 0x00, 0x00, 0x00, //0x00008c66 je LBB33_3 + 0x89, 0xc8, //0x00008c6c movl %ecx, %eax + 0x41, 0xb9, 0x59, 0x17, 0xb7, 0xd1, //0x00008c6e movl $3518437209, %r9d + 0x49, 0x0f, 0xaf, 0xc1, //0x00008c74 imulq %r9, %rax + 0x48, 0xc1, 0xe8, 0x2d, //0x00008c78 shrq $45, %rax + 0x69, 0xf8, 0x10, 0x27, 0x00, 0x00, //0x00008c7c imull $10000, %eax, %edi + 0x29, 0xf9, //0x00008c82 subl %edi, %ecx + 0x48, 0x89, 0xc7, //0x00008c84 movq %rax, %rdi + 0x49, 0x0f, 0xaf, 0xf9, //0x00008c87 imulq %r9, %rdi + 0x48, 0xc1, 0xef, 0x2d, //0x00008c8b shrq $45, %rdi + 0x69, 0xff, 0x10, 0x27, 0x00, 0x00, //0x00008c8f imull $10000, %edi, %edi + 0x29, 0xf8, //0x00008c95 subl %edi, %eax + 0x0f, 0xb7, 0xf9, //0x00008c97 movzwl %cx, %edi + 0xc1, 0xef, 0x02, //0x00008c9a shrl $2, %edi + 0x44, 0x69, 0xcf, 0x7b, 0x14, 0x00, 0x00, //0x00008c9d imull $5243, %edi, %r9d + 0x41, 0xc1, 0xe9, 0x11, //0x00008ca4 shrl $17, %r9d + 0x41, 0x6b, 0xf9, 0x64, //0x00008ca8 imull $100, %r9d, %edi + 0x29, 0xf9, //0x00008cac subl %edi, %ecx + 0x44, 0x0f, 0xb7, 0xd1, //0x00008cae movzwl %cx, %r10d + 0x0f, 0xb7, 0xf8, //0x00008cb2 movzwl %ax, %edi + 0xc1, 0xef, 0x02, //0x00008cb5 shrl $2, %edi + 0x69, 0xff, 0x7b, 0x14, 0x00, 0x00, //0x00008cb8 imull $5243, %edi, %edi + 0xc1, 0xef, 0x11, //0x00008cbe shrl $17, %edi + 0x6b, 0xcf, 0x64, //0x00008cc1 imull $100, %edi, %ecx + 0x29, 0xc8, //0x00008cc4 subl %ecx, %eax + 0x44, 0x0f, 0xb7, 0xd8, //0x00008cc6 movzwl %ax, %r11d + 0x48, 0x8d, 0x0d, 0x4f, 0x34, 0x00, 0x00, //0x00008cca leaq $13391(%rip), %rcx /* _Digits+0(%rip) */ + 0x42, 0x0f, 0xb7, 0x04, 0x51, //0x00008cd1 movzwl (%rcx,%r10,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfe, //0x00008cd6 movw %ax, $-2(%r8) + 0x42, 0x0f, 0xb7, 0x04, 0x49, //0x00008cdb movzwl (%rcx,%r9,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfc, //0x00008ce0 movw %ax, $-4(%r8) + 0x42, 0x0f, 0xb7, 0x04, 0x59, //0x00008ce5 movzwl (%rcx,%r11,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xfa, //0x00008cea movw %ax, $-6(%r8) + 0x0f, 0xb7, 0x04, 0x79, //0x00008cef movzwl (%rcx,%rdi,2), %eax + 0x66, 0x41, 0x89, 0x40, 0xf8, //0x00008cf3 movw %ax, $-8(%r8) + 0x45, 0x31, 0xc9, //0x00008cf8 xorl %r9d, %r9d + 0xe9, 0x22, 0x00, 0x00, 0x00, //0x00008cfb jmp LBB33_5 + //0x00008d00 LBB33_1 + 0x45, 0x31, 0xc9, //0x00008d00 xorl %r9d, %r9d + 0x4d, 0x89, 0xc6, //0x00008d03 movq %r8, %r14 + 0x48, 0x89, 0xfa, //0x00008d06 movq %rdi, %rdx + 0x81, 0xfa, 0x10, 0x27, 0x00, 0x00, //0x00008d09 cmpl $10000, %edx + 0x0f, 0x83, 0x1d, 0x00, 0x00, 0x00, //0x00008d0f jae LBB33_8 + //0x00008d15 LBB33_7 + 0x89, 0xd7, //0x00008d15 movl %edx, %edi + 0xe9, 0x6c, 0x00, 0x00, 0x00, //0x00008d17 jmp LBB33_10 + //0x00008d1c LBB33_3 + 0x41, 0xb9, 0x08, 0x00, 0x00, 0x00, //0x00008d1c movl $8, %r9d + //0x00008d22 LBB33_5 + 0x4d, 0x8d, 0x70, 0xf8, //0x00008d22 leaq $-8(%r8), %r14 + 0x81, 0xfa, 0x10, 0x27, 0x00, 0x00, //0x00008d26 cmpl $10000, %edx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00008d2c jb LBB33_7 + //0x00008d32 LBB33_8 + 0x41, 0xba, 0x59, 0x17, 0xb7, 0xd1, //0x00008d32 movl $3518437209, %r10d + 0x4c, 0x8d, 0x1d, 0xe1, 0x33, 0x00, 0x00, //0x00008d38 leaq $13281(%rip), %r11 /* _Digits+0(%rip) */ + 0x90, //0x00008d3f .p2align 4, 0x90 + //0x00008d40 LBB33_9 + 0x89, 0xd7, //0x00008d40 movl %edx, %edi + 0x49, 0x0f, 0xaf, 0xfa, //0x00008d42 imulq %r10, %rdi + 0x48, 0xc1, 0xef, 0x2d, //0x00008d46 shrq $45, %rdi + 0x69, 0xc7, 0xf0, 0xd8, 0xff, 0xff, //0x00008d4a imull $-10000, %edi, %eax + 0x01, 0xd0, //0x00008d50 addl %edx, %eax + 0x48, 0x69, 0xd8, 0x1f, 0x85, 0xeb, 0x51, //0x00008d52 imulq $1374389535, %rax, %rbx + 0x48, 0xc1, 0xeb, 0x25, //0x00008d59 shrq $37, %rbx + 0x6b, 0xcb, 0x64, //0x00008d5d imull $100, %ebx, %ecx + 0x29, 0xc8, //0x00008d60 subl %ecx, %eax + 0x41, 0x0f, 0xb7, 0x04, 0x43, //0x00008d62 movzwl (%r11,%rax,2), %eax + 0x66, 0x41, 0x89, 0x46, 0xfe, //0x00008d67 movw %ax, $-2(%r14) + 0x41, 0x0f, 0xb7, 0x04, 0x5b, //0x00008d6c movzwl (%r11,%rbx,2), %eax + 0x66, 0x41, 0x89, 0x46, 0xfc, //0x00008d71 movw %ax, $-4(%r14) + 0x49, 0x83, 0xc6, 0xfc, //0x00008d76 addq $-4, %r14 + 0x81, 0xfa, 0xff, 0xe0, 0xf5, 0x05, //0x00008d7a cmpl $99999999, %edx + 0x89, 0xfa, //0x00008d80 movl %edi, %edx + 0x0f, 0x87, 0xb8, 0xff, 0xff, 0xff, //0x00008d82 ja LBB33_9 + //0x00008d88 LBB33_10 + 0x83, 0xff, 0x64, //0x00008d88 cmpl $100, %edi + 0x0f, 0x83, 0x20, 0x00, 0x00, 0x00, //0x00008d8b jae LBB33_11 + 0x83, 0xff, 0x0a, //0x00008d91 cmpl $10, %edi + 0x0f, 0x82, 0x4d, 0x00, 0x00, 0x00, //0x00008d94 jb LBB33_14 + //0x00008d9a LBB33_13 + 0x89, 0xf8, //0x00008d9a movl %edi, %eax + 0x48, 0x8d, 0x0d, 0x7d, 0x33, 0x00, 0x00, //0x00008d9c leaq $13181(%rip), %rcx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x04, 0x41, //0x00008da3 movzwl (%rcx,%rax,2), %eax + 0x66, 0x41, 0x89, 0x46, 0xfe, //0x00008da7 movw %ax, $-2(%r14) + 0xe9, 0x3d, 0x00, 0x00, 0x00, //0x00008dac jmp LBB33_15 + //0x00008db1 LBB33_11 + 0x0f, 0xb7, 0xc7, //0x00008db1 movzwl %di, %eax + 0xc1, 0xe8, 0x02, //0x00008db4 shrl $2, %eax + 0x69, 0xc0, 0x7b, 0x14, 0x00, 0x00, //0x00008db7 imull $5243, %eax, %eax + 0xc1, 0xe8, 0x11, //0x00008dbd shrl $17, %eax + 0x6b, 0xc8, 0x64, //0x00008dc0 imull $100, %eax, %ecx + 0x29, 0xcf, //0x00008dc3 subl %ecx, %edi + 0x0f, 0xb7, 0xcf, //0x00008dc5 movzwl %di, %ecx + 0x48, 0x8d, 0x15, 0x51, 0x33, 0x00, 0x00, //0x00008dc8 leaq $13137(%rip), %rdx /* _Digits+0(%rip) */ + 0x0f, 0xb7, 0x0c, 0x4a, //0x00008dcf movzwl (%rdx,%rcx,2), %ecx + 0x66, 0x41, 0x89, 0x4e, 0xfe, //0x00008dd3 movw %cx, $-2(%r14) + 0x49, 0x83, 0xc6, 0xfe, //0x00008dd8 addq $-2, %r14 + 0x89, 0xc7, //0x00008ddc movl %eax, %edi + 0x83, 0xff, 0x0a, //0x00008dde cmpl $10, %edi + 0x0f, 0x83, 0xb3, 0xff, 0xff, 0xff, //0x00008de1 jae LBB33_13 + //0x00008de7 LBB33_14 + 0x40, 0x80, 0xc7, 0x30, //0x00008de7 addb $48, %dil + 0x40, 0x88, 0x3e, //0x00008deb movb %dil, (%rsi) + //0x00008dee LBB33_15 + 0x4d, 0x29, 0xc8, //0x00008dee subq %r9, %r8 + 0x4c, 0x89, 0xc0, //0x00008df1 movq %r8, %rax + 0x5b, //0x00008df4 popq %rbx + 0x41, 0x5e, //0x00008df5 popq %r14 + 0x5d, //0x00008df7 popq %rbp + 0xc3, //0x00008df8 retq + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008df9 .p2align 4, 0x90 + //0x00008e00 _left_shift + 0x55, //0x00008e00 pushq %rbp + 0x48, 0x89, 0xe5, //0x00008e01 movq %rsp, %rbp + 0x41, 0x56, //0x00008e04 pushq %r14 + 0x53, //0x00008e06 pushq %rbx + 0x89, 0xf1, //0x00008e07 movl %esi, %ecx + 0x48, 0x6b, 0xd1, 0x68, //0x00008e09 imulq $104, %rcx, %rdx + 0x48, 0x8d, 0x35, 0xfc, 0x8c, 0x00, 0x00, //0x00008e0d leaq $36092(%rip), %rsi /* _LSHIFT_TAB+0(%rip) */ + 0x44, 0x8b, 0x04, 0x32, //0x00008e14 movl (%rdx,%rsi), %r8d + 0x4c, 0x8b, 0x17, //0x00008e18 movq (%rdi), %r10 + 0x4c, 0x63, 0x4f, 0x10, //0x00008e1b movslq $16(%rdi), %r9 + 0x8a, 0x44, 0x32, 0x04, //0x00008e1f movb $4(%rdx,%rsi), %al + 0x4d, 0x85, 0xc9, //0x00008e23 testq %r9, %r9 + 0x0f, 0x84, 0x36, 0x00, 0x00, 0x00, //0x00008e26 je LBB34_6 + 0x48, 0x8d, 0x54, 0x32, 0x05, //0x00008e2c leaq $5(%rdx,%rsi), %rdx + 0x31, 0xf6, //0x00008e31 xorl %esi, %esi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008e33 .p2align 4, 0x90 + //0x00008e40 LBB34_3 + 0x84, 0xc0, //0x00008e40 testb %al, %al + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00008e42 je LBB34_8 + 0x41, 0x38, 0x04, 0x32, //0x00008e48 cmpb %al, (%r10,%rsi) + 0x0f, 0x85, 0x89, 0x01, 0x00, 0x00, //0x00008e4c jne LBB34_5 + 0x0f, 0xb6, 0x04, 0x32, //0x00008e52 movzbl (%rdx,%rsi), %eax + 0x48, 0xff, 0xc6, //0x00008e56 incq %rsi + 0x49, 0x39, 0xf1, //0x00008e59 cmpq %rsi, %r9 + 0x0f, 0x85, 0xde, 0xff, 0xff, 0xff, //0x00008e5c jne LBB34_3 + //0x00008e62 LBB34_6 + 0x84, 0xc0, //0x00008e62 testb %al, %al + 0x0f, 0x84, 0x03, 0x00, 0x00, 0x00, //0x00008e64 je LBB34_8 + //0x00008e6a LBB34_7 + 0x41, 0xff, 0xc8, //0x00008e6a decl %r8d + //0x00008e6d LBB34_8 + 0x45, 0x85, 0xc9, //0x00008e6d testl %r9d, %r9d + 0x0f, 0x8e, 0x8c, 0x00, 0x00, 0x00, //0x00008e70 jle LBB34_23 + 0x43, 0x8d, 0x04, 0x08, //0x00008e76 leal (%r8,%r9), %eax + 0x4c, 0x63, 0xf0, //0x00008e7a movslq %eax, %r14 + 0x49, 0xff, 0xce, //0x00008e7d decq %r14 + 0x31, 0xd2, //0x00008e80 xorl %edx, %edx + 0x49, 0xbb, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x00008e82 movabsq $-3689348814741910323, %r11 + 0x90, 0x90, 0x90, 0x90, //0x00008e8c .p2align 4, 0x90 + //0x00008e90 LBB34_10 + 0x4b, 0x0f, 0xbe, 0x74, 0x0a, 0xff, //0x00008e90 movsbq $-1(%r10,%r9), %rsi + 0x48, 0x83, 0xc6, 0xd0, //0x00008e96 addq $-48, %rsi + 0x48, 0xd3, 0xe6, //0x00008e9a shlq %cl, %rsi + 0x48, 0x01, 0xd6, //0x00008e9d addq %rdx, %rsi + 0x48, 0x89, 0xf0, //0x00008ea0 movq %rsi, %rax + 0x49, 0xf7, 0xe3, //0x00008ea3 mulq %r11 + 0x48, 0xc1, 0xea, 0x03, //0x00008ea6 shrq $3, %rdx + 0x48, 0x8d, 0x04, 0x12, //0x00008eaa leaq (%rdx,%rdx), %rax + 0x48, 0x8d, 0x1c, 0x80, //0x00008eae leaq (%rax,%rax,4), %rbx + 0x48, 0x89, 0xf0, //0x00008eb2 movq %rsi, %rax + 0x48, 0x29, 0xd8, //0x00008eb5 subq %rbx, %rax + 0x4c, 0x39, 0x77, 0x08, //0x00008eb8 cmpq %r14, $8(%rdi) + 0x0f, 0x86, 0x0e, 0x00, 0x00, 0x00, //0x00008ebc jbe LBB34_16 + 0x04, 0x30, //0x00008ec2 addb $48, %al + 0x43, 0x88, 0x04, 0x32, //0x00008ec4 movb %al, (%r10,%r14) + 0xe9, 0x13, 0x00, 0x00, 0x00, //0x00008ec8 jmp LBB34_18 + 0x90, 0x90, 0x90, //0x00008ecd .p2align 4, 0x90 + //0x00008ed0 LBB34_16 + 0x48, 0x85, 0xc0, //0x00008ed0 testq %rax, %rax + 0x0f, 0x84, 0x07, 0x00, 0x00, 0x00, //0x00008ed3 je LBB34_18 + 0xc7, 0x47, 0x1c, 0x01, 0x00, 0x00, 0x00, //0x00008ed9 movl $1, $28(%rdi) + //0x00008ee0 LBB34_18 + 0x49, 0x83, 0xf9, 0x02, //0x00008ee0 cmpq $2, %r9 + 0x0f, 0x8c, 0x0e, 0x00, 0x00, 0x00, //0x00008ee4 jl LBB34_12 + 0x49, 0xff, 0xc9, //0x00008eea decq %r9 + 0x4c, 0x8b, 0x17, //0x00008eed movq (%rdi), %r10 + 0x49, 0xff, 0xce, //0x00008ef0 decq %r14 + 0xe9, 0x98, 0xff, 0xff, 0xff, //0x00008ef3 jmp LBB34_10 + //0x00008ef8 LBB34_12 + 0x48, 0x83, 0xfe, 0x0a, //0x00008ef8 cmpq $10, %rsi + 0x0f, 0x83, 0x6e, 0x00, 0x00, 0x00, //0x00008efc jae LBB34_13 + //0x00008f02 LBB34_23 + 0x48, 0x63, 0x4f, 0x10, //0x00008f02 movslq $16(%rdi), %rcx + 0x49, 0x63, 0xc0, //0x00008f06 movslq %r8d, %rax + 0x48, 0x01, 0xc8, //0x00008f09 addq %rcx, %rax + 0x89, 0x47, 0x10, //0x00008f0c movl %eax, $16(%rdi) + 0x48, 0x8b, 0x4f, 0x08, //0x00008f0f movq $8(%rdi), %rcx + 0x48, 0x39, 0xc1, //0x00008f13 cmpq %rax, %rcx + 0x0f, 0x87, 0x05, 0x00, 0x00, 0x00, //0x00008f16 ja LBB34_25 + 0x89, 0x4f, 0x10, //0x00008f1c movl %ecx, $16(%rdi) + 0x89, 0xc8, //0x00008f1f movl %ecx, %eax + //0x00008f21 LBB34_25 + 0x44, 0x01, 0x47, 0x14, //0x00008f21 addl %r8d, $20(%rdi) + 0x85, 0xc0, //0x00008f25 testl %eax, %eax + 0x0f, 0x8e, 0x36, 0x00, 0x00, 0x00, //0x00008f27 jle LBB34_29 + 0x48, 0x8b, 0x0f, //0x00008f2d movq (%rdi), %rcx + 0x89, 0xc0, //0x00008f30 movl %eax, %eax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008f32 .p2align 4, 0x90 + //0x00008f40 LBB34_27 + 0x80, 0x7c, 0x01, 0xff, 0x30, //0x00008f40 cmpb $48, $-1(%rcx,%rax) + 0x0f, 0x85, 0x20, 0x00, 0x00, 0x00, //0x00008f45 jne LBB34_31 + 0x89, 0xc2, //0x00008f4b movl %eax, %edx + 0x48, 0xff, 0xc8, //0x00008f4d decq %rax + 0xff, 0xca, //0x00008f50 decl %edx + 0x89, 0x57, 0x10, //0x00008f52 movl %edx, $16(%rdi) + 0x48, 0x8d, 0x50, 0x01, //0x00008f55 leaq $1(%rax), %rdx + 0x48, 0x83, 0xfa, 0x01, //0x00008f59 cmpq $1, %rdx + 0x0f, 0x8f, 0xdd, 0xff, 0xff, 0xff, //0x00008f5d jg LBB34_27 + //0x00008f63 LBB34_29 + 0x85, 0xc0, //0x00008f63 testl %eax, %eax + 0x0f, 0x84, 0x64, 0x00, 0x00, 0x00, //0x00008f65 je LBB34_30 + //0x00008f6b LBB34_31 + 0x5b, //0x00008f6b popq %rbx + 0x41, 0x5e, //0x00008f6c popq %r14 + 0x5d, //0x00008f6e popq %rbp + 0xc3, //0x00008f6f retq + //0x00008f70 LBB34_13 + 0x49, 0x63, 0xf6, //0x00008f70 movslq %r14d, %rsi + 0x48, 0xff, 0xce, //0x00008f73 decq %rsi + 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x00008f76 jmp LBB34_14 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008f7b .p2align 4, 0x90 + //0x00008f80 LBB34_15 + 0x04, 0x30, //0x00008f80 addb $48, %al + 0x48, 0x8b, 0x1f, //0x00008f82 movq (%rdi), %rbx + 0x88, 0x04, 0x33, //0x00008f85 movb %al, (%rbx,%rsi) + //0x00008f88 LBB34_22 + 0x48, 0xff, 0xce, //0x00008f88 decq %rsi + 0x48, 0x83, 0xf9, 0x09, //0x00008f8b cmpq $9, %rcx + 0x0f, 0x86, 0x6d, 0xff, 0xff, 0xff, //0x00008f8f jbe LBB34_23 + //0x00008f95 LBB34_14 + 0x48, 0x89, 0xd1, //0x00008f95 movq %rdx, %rcx + 0x48, 0x89, 0xd0, //0x00008f98 movq %rdx, %rax + 0x49, 0xf7, 0xe3, //0x00008f9b mulq %r11 + 0x48, 0xc1, 0xea, 0x03, //0x00008f9e shrq $3, %rdx + 0x48, 0x8d, 0x04, 0x12, //0x00008fa2 leaq (%rdx,%rdx), %rax + 0x48, 0x8d, 0x1c, 0x80, //0x00008fa6 leaq (%rax,%rax,4), %rbx + 0x48, 0x89, 0xc8, //0x00008faa movq %rcx, %rax + 0x48, 0x29, 0xd8, //0x00008fad subq %rbx, %rax + 0x48, 0x39, 0x77, 0x08, //0x00008fb0 cmpq %rsi, $8(%rdi) + 0x0f, 0x87, 0xc6, 0xff, 0xff, 0xff, //0x00008fb4 ja LBB34_15 + 0x48, 0x85, 0xc0, //0x00008fba testq %rax, %rax + 0x0f, 0x84, 0xc5, 0xff, 0xff, 0xff, //0x00008fbd je LBB34_22 + 0xc7, 0x47, 0x1c, 0x01, 0x00, 0x00, 0x00, //0x00008fc3 movl $1, $28(%rdi) + 0xe9, 0xb9, 0xff, 0xff, 0xff, //0x00008fca jmp LBB34_22 + //0x00008fcf LBB34_30 + 0xc7, 0x47, 0x14, 0x00, 0x00, 0x00, 0x00, //0x00008fcf movl $0, $20(%rdi) + 0x5b, //0x00008fd6 popq %rbx + 0x41, 0x5e, //0x00008fd7 popq %r14 + 0x5d, //0x00008fd9 popq %rbp + 0xc3, //0x00008fda retq + //0x00008fdb LBB34_5 + 0x0f, 0x8c, 0x89, 0xfe, 0xff, 0xff, //0x00008fdb jl LBB34_7 + 0xe9, 0x87, 0xfe, 0xff, 0xff, //0x00008fe1 jmp LBB34_8 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00008fe6 .p2align 4, 0x90 + //0x00008ff0 _right_shift + 0x55, //0x00008ff0 pushq %rbp + 0x48, 0x89, 0xe5, //0x00008ff1 movq %rsp, %rbp + 0x89, 0xf1, //0x00008ff4 movl %esi, %ecx + 0x4c, 0x63, 0x4f, 0x10, //0x00008ff6 movslq $16(%rdi), %r9 + 0x31, 0xf6, //0x00008ffa xorl %esi, %esi + 0x31, 0xc0, //0x00008ffc xorl %eax, %eax + 0x90, 0x90, //0x00008ffe .p2align 4, 0x90 + //0x00009000 LBB35_1 + 0x4c, 0x39, 0xce, //0x00009000 cmpq %r9, %rsi + 0x0f, 0x8d, 0x27, 0x01, 0x00, 0x00, //0x00009003 jge LBB35_2 + 0x48, 0x8d, 0x04, 0x80, //0x00009009 leaq (%rax,%rax,4), %rax + 0x48, 0x8b, 0x17, //0x0000900d movq (%rdi), %rdx + 0x48, 0x0f, 0xbe, 0x14, 0x32, //0x00009010 movsbq (%rdx,%rsi), %rdx + 0x48, 0x8d, 0x44, 0x42, 0xd0, //0x00009015 leaq $-48(%rdx,%rax,2), %rax + 0x48, 0xff, 0xc6, //0x0000901a incq %rsi + 0x48, 0x89, 0xc2, //0x0000901d movq %rax, %rdx + 0x48, 0xd3, 0xea, //0x00009020 shrq %cl, %rdx + 0x48, 0x85, 0xd2, //0x00009023 testq %rdx, %rdx + 0x0f, 0x84, 0xd4, 0xff, 0xff, 0xff, //0x00009026 je LBB35_1 + //0x0000902c LBB35_6 + 0x8b, 0x57, 0x14, //0x0000902c movl $20(%rdi), %edx + 0x29, 0xf2, //0x0000902f subl %esi, %edx + 0xff, 0xc2, //0x00009031 incl %edx + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00009033 movq $-1, %r8 + 0x49, 0xd3, 0xe0, //0x0000903a shlq %cl, %r8 + 0x89, 0x57, 0x14, //0x0000903d movl %edx, $20(%rdi) + 0x49, 0xf7, 0xd0, //0x00009040 notq %r8 + 0x45, 0x31, 0xd2, //0x00009043 xorl %r10d, %r10d + 0x44, 0x39, 0xce, //0x00009046 cmpl %r9d, %esi + 0x0f, 0x8d, 0x69, 0x00, 0x00, 0x00, //0x00009049 jge LBB35_9 + 0x4c, 0x63, 0xce, //0x0000904f movslq %esi, %r9 + 0x48, 0x8b, 0x37, //0x00009052 movq (%rdi), %rsi + 0x45, 0x31, 0xd2, //0x00009055 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009058 .p2align 4, 0x90 + //0x00009060 LBB35_8 + 0x48, 0x89, 0xc2, //0x00009060 movq %rax, %rdx + 0x48, 0xd3, 0xea, //0x00009063 shrq %cl, %rdx + 0x4c, 0x21, 0xc0, //0x00009066 andq %r8, %rax + 0x80, 0xc2, 0x30, //0x00009069 addb $48, %dl + 0x42, 0x88, 0x14, 0x16, //0x0000906c movb %dl, (%rsi,%r10) + 0x48, 0x8d, 0x04, 0x80, //0x00009070 leaq (%rax,%rax,4), %rax + 0x48, 0x8b, 0x37, //0x00009074 movq (%rdi), %rsi + 0x4a, 0x8d, 0x14, 0x0e, //0x00009077 leaq (%rsi,%r9), %rdx + 0x49, 0x0f, 0xbe, 0x14, 0x12, //0x0000907b movsbq (%r10,%rdx), %rdx + 0x48, 0x8d, 0x44, 0x42, 0xd0, //0x00009080 leaq $-48(%rdx,%rax,2), %rax + 0x4c, 0x63, 0x5f, 0x10, //0x00009085 movslq $16(%rdi), %r11 + 0x4b, 0x8d, 0x54, 0x11, 0x01, //0x00009089 leaq $1(%r9,%r10), %rdx + 0x49, 0xff, 0xc2, //0x0000908e incq %r10 + 0x4c, 0x39, 0xda, //0x00009091 cmpq %r11, %rdx + 0x0f, 0x8c, 0xc6, 0xff, 0xff, 0xff, //0x00009094 jl LBB35_8 + 0xe9, 0x19, 0x00, 0x00, 0x00, //0x0000909a jmp LBB35_9 + 0x90, //0x0000909f .p2align 4, 0x90 + //0x000090a0 LBB35_11 + 0x40, 0x80, 0xc6, 0x30, //0x000090a0 addb $48, %sil + 0x48, 0x8b, 0x17, //0x000090a4 movq (%rdi), %rdx + 0x42, 0x88, 0x34, 0x0a, //0x000090a7 movb %sil, (%rdx,%r9) + 0x41, 0xff, 0xc1, //0x000090ab incl %r9d + 0x45, 0x89, 0xca, //0x000090ae movl %r9d, %r10d + //0x000090b1 LBB35_14 + 0x48, 0x01, 0xc0, //0x000090b1 addq %rax, %rax + 0x48, 0x8d, 0x04, 0x80, //0x000090b4 leaq (%rax,%rax,4), %rax + //0x000090b8 LBB35_9 + 0x48, 0x85, 0xc0, //0x000090b8 testq %rax, %rax + 0x0f, 0x84, 0x2b, 0x00, 0x00, 0x00, //0x000090bb je LBB35_15 + 0x48, 0x89, 0xc6, //0x000090c1 movq %rax, %rsi + 0x48, 0xd3, 0xee, //0x000090c4 shrq %cl, %rsi + 0x4c, 0x21, 0xc0, //0x000090c7 andq %r8, %rax + 0x4d, 0x63, 0xca, //0x000090ca movslq %r10d, %r9 + 0x4c, 0x39, 0x4f, 0x08, //0x000090cd cmpq %r9, $8(%rdi) + 0x0f, 0x87, 0xc9, 0xff, 0xff, 0xff, //0x000090d1 ja LBB35_11 + 0x48, 0x85, 0xf6, //0x000090d7 testq %rsi, %rsi + 0x0f, 0x84, 0xd1, 0xff, 0xff, 0xff, //0x000090da je LBB35_14 + 0xc7, 0x47, 0x1c, 0x01, 0x00, 0x00, 0x00, //0x000090e0 movl $1, $28(%rdi) + 0xe9, 0xc5, 0xff, 0xff, 0xff, //0x000090e7 jmp LBB35_14 + //0x000090ec LBB35_15 + 0x44, 0x89, 0x57, 0x10, //0x000090ec movl %r10d, $16(%rdi) + 0x45, 0x85, 0xd2, //0x000090f0 testl %r10d, %r10d + 0x0f, 0x8e, 0x2c, 0x00, 0x00, 0x00, //0x000090f3 jle LBB35_19 + 0x48, 0x8b, 0x07, //0x000090f9 movq (%rdi), %rax + 0x45, 0x89, 0xd2, //0x000090fc movl %r10d, %r10d + 0x90, //0x000090ff .p2align 4, 0x90 + //0x00009100 LBB35_17 + 0x42, 0x80, 0x7c, 0x10, 0xff, 0x30, //0x00009100 cmpb $48, $-1(%rax,%r10) + 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00009106 jne LBB35_21 + 0x44, 0x89, 0xd1, //0x0000910c movl %r10d, %ecx + 0x49, 0xff, 0xca, //0x0000910f decq %r10 + 0xff, 0xc9, //0x00009112 decl %ecx + 0x89, 0x4f, 0x10, //0x00009114 movl %ecx, $16(%rdi) + 0x49, 0x8d, 0x4a, 0x01, //0x00009117 leaq $1(%r10), %rcx + 0x48, 0x83, 0xf9, 0x01, //0x0000911b cmpq $1, %rcx + 0x0f, 0x8f, 0xdb, 0xff, 0xff, 0xff, //0x0000911f jg LBB35_17 + //0x00009125 LBB35_19 + 0x45, 0x85, 0xd2, //0x00009125 testl %r10d, %r10d + 0x0f, 0x84, 0x3e, 0x00, 0x00, 0x00, //0x00009128 je LBB35_20 + //0x0000912e LBB35_21 + 0x5d, //0x0000912e popq %rbp + 0xc3, //0x0000912f retq + //0x00009130 LBB35_2 + 0x48, 0x85, 0xc0, //0x00009130 testq %rax, %rax + 0x0f, 0x84, 0x3c, 0x00, 0x00, 0x00, //0x00009133 je LBB35_22 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009139 .p2align 4, 0x90 + 0x48, 0x89, 0xc2, //0x00009140 movq %rax, %rdx + 0x48, 0xd3, 0xea, //0x00009143 shrq %cl, %rdx + 0x48, 0x85, 0xd2, //0x00009146 testq %rdx, %rdx + 0x0f, 0x85, 0xdd, 0xfe, 0xff, 0xff, //0x00009149 jne LBB35_6 + //0x0000914f LBB35_4 + 0x48, 0x01, 0xc0, //0x0000914f addq %rax, %rax + 0x48, 0x8d, 0x04, 0x80, //0x00009152 leaq (%rax,%rax,4), %rax + 0xff, 0xc6, //0x00009156 incl %esi + 0x48, 0x89, 0xc2, //0x00009158 movq %rax, %rdx + 0x48, 0xd3, 0xea, //0x0000915b shrq %cl, %rdx + 0x48, 0x85, 0xd2, //0x0000915e testq %rdx, %rdx + 0x0f, 0x84, 0xe8, 0xff, 0xff, 0xff, //0x00009161 je LBB35_4 + 0xe9, 0xc0, 0xfe, 0xff, 0xff, //0x00009167 jmp LBB35_6 + //0x0000916c LBB35_20 + 0xc7, 0x47, 0x14, 0x00, 0x00, 0x00, 0x00, //0x0000916c movl $0, $20(%rdi) + 0x5d, //0x00009173 popq %rbp + 0xc3, //0x00009174 retq + //0x00009175 LBB35_22 + 0xc7, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, //0x00009175 movl $0, $16(%rdi) + 0x5d, //0x0000917c popq %rbp + 0xc3, //0x0000917d retq + 0x00, 0x00, //0x0000917e .p2align 4, 0x00 + //0x00009180 LCPI36_0 + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, //0x00009180 QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + //0x00009190 LCPI36_1 + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, //0x00009190 QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + //0x000091a0 .p2align 4, 0x90 + //0x000091a0 _advance_string_default + 0x55, //0x000091a0 pushq %rbp + 0x48, 0x89, 0xe5, //0x000091a1 movq %rsp, %rbp + 0x41, 0x57, //0x000091a4 pushq %r15 + 0x41, 0x56, //0x000091a6 pushq %r14 + 0x41, 0x55, //0x000091a8 pushq %r13 + 0x41, 0x54, //0x000091aa pushq %r12 + 0x53, //0x000091ac pushq %rbx + 0x48, 0x83, 0xec, 0x10, //0x000091ad subq $16, %rsp + 0x4c, 0x8b, 0x67, 0x08, //0x000091b1 movq $8(%rdi), %r12 + 0x49, 0x29, 0xf4, //0x000091b5 subq %rsi, %r12 + 0x0f, 0x84, 0x91, 0x03, 0x00, 0x00, //0x000091b8 je LBB36_17 + 0x48, 0x8b, 0x07, //0x000091be movq (%rdi), %rax + 0x48, 0x89, 0x45, 0xd0, //0x000091c1 movq %rax, $-48(%rbp) + 0x48, 0x01, 0xc6, //0x000091c5 addq %rax, %rsi + 0x48, 0x89, 0x55, 0xc8, //0x000091c8 movq %rdx, $-56(%rbp) + 0x48, 0xc7, 0x02, 0xff, 0xff, 0xff, 0xff, //0x000091cc movq $-1, (%rdx) + 0x49, 0x83, 0xfc, 0x40, //0x000091d3 cmpq $64, %r12 + 0x0f, 0x82, 0x12, 0x02, 0x00, 0x00, //0x000091d7 jb LBB36_18 + 0x45, 0x89, 0xe1, //0x000091dd movl %r12d, %r9d + 0x41, 0x83, 0xe1, 0x3f, //0x000091e0 andl $63, %r9d + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x000091e4 movq $-1, %r14 + 0x45, 0x31, 0xff, //0x000091eb xorl %r15d, %r15d + 0x66, 0x0f, 0x6f, 0x05, 0x8a, 0xff, 0xff, 0xff, //0x000091ee movdqa $-118(%rip), %xmm0 /* LCPI36_0+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x0d, 0x92, 0xff, 0xff, 0xff, //0x000091f6 movdqa $-110(%rip), %xmm1 /* LCPI36_1+0(%rip) */ + 0x48, 0x8b, 0x55, 0xd0, //0x000091fe movq $-48(%rbp), %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00009202 .p2align 4, 0x90 + //0x00009210 LBB36_3 + 0xf3, 0x0f, 0x6f, 0x16, //0x00009210 movdqu (%rsi), %xmm2 + 0xf3, 0x0f, 0x6f, 0x5e, 0x10, //0x00009214 movdqu $16(%rsi), %xmm3 + 0xf3, 0x0f, 0x6f, 0x66, 0x20, //0x00009219 movdqu $32(%rsi), %xmm4 + 0xf3, 0x0f, 0x6f, 0x6e, 0x30, //0x0000921e movdqu $48(%rsi), %xmm5 + 0x66, 0x0f, 0x6f, 0xf2, //0x00009223 movdqa %xmm2, %xmm6 + 0x66, 0x0f, 0x74, 0xf0, //0x00009227 pcmpeqb %xmm0, %xmm6 + 0x66, 0x0f, 0xd7, 0xde, //0x0000922b pmovmskb %xmm6, %ebx + 0x66, 0x0f, 0x6f, 0xf3, //0x0000922f movdqa %xmm3, %xmm6 + 0x66, 0x0f, 0x74, 0xf0, //0x00009233 pcmpeqb %xmm0, %xmm6 + 0x66, 0x0f, 0xd7, 0xce, //0x00009237 pmovmskb %xmm6, %ecx + 0x66, 0x0f, 0x6f, 0xf4, //0x0000923b movdqa %xmm4, %xmm6 + 0x66, 0x0f, 0x74, 0xf0, //0x0000923f pcmpeqb %xmm0, %xmm6 + 0x66, 0x0f, 0xd7, 0xc6, //0x00009243 pmovmskb %xmm6, %eax + 0x66, 0x0f, 0x6f, 0xf5, //0x00009247 movdqa %xmm5, %xmm6 + 0x66, 0x0f, 0x74, 0xf0, //0x0000924b pcmpeqb %xmm0, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xee, //0x0000924f pmovmskb %xmm6, %r13d + 0x66, 0x0f, 0x74, 0xd1, //0x00009254 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x00009258 pmovmskb %xmm2, %edi + 0x66, 0x0f, 0x74, 0xd9, //0x0000925c pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x00009260 pmovmskb %xmm3, %r10d + 0x66, 0x0f, 0x74, 0xe1, //0x00009265 pcmpeqb %xmm1, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xdc, //0x00009269 pmovmskb %xmm4, %r11d + 0x66, 0x0f, 0x74, 0xe9, //0x0000926e pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xc5, //0x00009272 pmovmskb %xmm5, %r8d + 0x49, 0xc1, 0xe5, 0x30, //0x00009277 shlq $48, %r13 + 0x48, 0xc1, 0xe0, 0x20, //0x0000927b shlq $32, %rax + 0x48, 0xc1, 0xe1, 0x10, //0x0000927f shlq $16, %rcx + 0x48, 0x09, 0xcb, //0x00009283 orq %rcx, %rbx + 0x48, 0x09, 0xc3, //0x00009286 orq %rax, %rbx + 0x49, 0xc1, 0xe0, 0x30, //0x00009289 shlq $48, %r8 + 0x49, 0xc1, 0xe3, 0x20, //0x0000928d shlq $32, %r11 + 0x49, 0xc1, 0xe2, 0x10, //0x00009291 shlq $16, %r10 + 0x4c, 0x09, 0xd7, //0x00009295 orq %r10, %rdi + 0x4c, 0x09, 0xdf, //0x00009298 orq %r11, %rdi + 0x4c, 0x09, 0xc7, //0x0000929b orq %r8, %rdi + 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x0000929e je LBB36_5 + 0x49, 0x83, 0xfe, 0xff, //0x000092a4 cmpq $-1, %r14 + 0x0f, 0x84, 0x2f, 0x00, 0x00, 0x00, //0x000092a8 je LBB36_8 + //0x000092ae LBB36_5 + 0x4c, 0x09, 0xeb, //0x000092ae orq %r13, %rbx + 0x48, 0x89, 0xf8, //0x000092b1 movq %rdi, %rax + 0x4c, 0x09, 0xf8, //0x000092b4 orq %r15, %rax + 0x0f, 0x85, 0x43, 0x00, 0x00, 0x00, //0x000092b7 jne LBB36_9 + //0x000092bd LBB36_6 + 0x48, 0x85, 0xdb, //0x000092bd testq %rbx, %rbx + 0x0f, 0x85, 0x0e, 0x01, 0x00, 0x00, //0x000092c0 jne LBB36_15 + //0x000092c6 LBB36_7 + 0x48, 0x83, 0xc6, 0x40, //0x000092c6 addq $64, %rsi + 0x49, 0x83, 0xc4, 0xc0, //0x000092ca addq $-64, %r12 + 0x49, 0x83, 0xfc, 0x3f, //0x000092ce cmpq $63, %r12 + 0x0f, 0x87, 0x38, 0xff, 0xff, 0xff, //0x000092d2 ja LBB36_3 + 0xe9, 0x7a, 0x00, 0x00, 0x00, //0x000092d8 jmp LBB36_10 + //0x000092dd LBB36_8 + 0x48, 0x89, 0xf0, //0x000092dd movq %rsi, %rax + 0x48, 0x29, 0xd0, //0x000092e0 subq %rdx, %rax + 0x4c, 0x0f, 0xbc, 0xf7, //0x000092e3 bsfq %rdi, %r14 + 0x49, 0x01, 0xc6, //0x000092e7 addq %rax, %r14 + 0x48, 0x8b, 0x45, 0xc8, //0x000092ea movq $-56(%rbp), %rax + 0x4c, 0x89, 0x30, //0x000092ee movq %r14, (%rax) + 0x4c, 0x09, 0xeb, //0x000092f1 orq %r13, %rbx + 0x48, 0x89, 0xf8, //0x000092f4 movq %rdi, %rax + 0x4c, 0x09, 0xf8, //0x000092f7 orq %r15, %rax + 0x0f, 0x84, 0xbd, 0xff, 0xff, 0xff, //0x000092fa je LBB36_6 + //0x00009300 LBB36_9 + 0x4c, 0x89, 0xf8, //0x00009300 movq %r15, %rax + 0x48, 0xf7, 0xd0, //0x00009303 notq %rax + 0x48, 0x21, 0xf8, //0x00009306 andq %rdi, %rax + 0x4c, 0x8d, 0x04, 0x00, //0x00009309 leaq (%rax,%rax), %r8 + 0x4d, 0x09, 0xf8, //0x0000930d orq %r15, %r8 + 0x4c, 0x89, 0xc1, //0x00009310 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00009313 notq %rcx + 0x48, 0x21, 0xf9, //0x00009316 andq %rdi, %rcx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00009319 movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xf9, //0x00009323 andq %rdi, %rcx + 0x45, 0x31, 0xff, //0x00009326 xorl %r15d, %r15d + 0x48, 0x01, 0xc1, //0x00009329 addq %rax, %rcx + 0x41, 0x0f, 0x92, 0xc7, //0x0000932c setb %r15b + 0x48, 0x01, 0xc9, //0x00009330 addq %rcx, %rcx + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00009333 movabsq $6148914691236517205, %rax + 0x48, 0x31, 0xc1, //0x0000933d xorq %rax, %rcx + 0x4c, 0x21, 0xc1, //0x00009340 andq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00009343 notq %rcx + 0x48, 0x21, 0xcb, //0x00009346 andq %rcx, %rbx + 0x48, 0x85, 0xdb, //0x00009349 testq %rbx, %rbx + 0x0f, 0x84, 0x74, 0xff, 0xff, 0xff, //0x0000934c je LBB36_7 + 0xe9, 0x7d, 0x00, 0x00, 0x00, //0x00009352 jmp LBB36_15 + //0x00009357 LBB36_10 + 0x4d, 0x89, 0xcc, //0x00009357 movq %r9, %r12 + 0x49, 0x83, 0xfc, 0x20, //0x0000935a cmpq $32, %r12 + 0x0f, 0x82, 0x0f, 0x01, 0x00, 0x00, //0x0000935e jb LBB36_22 + //0x00009364 LBB36_11 + 0xf3, 0x0f, 0x6f, 0x06, //0x00009364 movdqu (%rsi), %xmm0 + 0xf3, 0x0f, 0x6f, 0x4e, 0x10, //0x00009368 movdqu $16(%rsi), %xmm1 + 0x66, 0x0f, 0x6f, 0x15, 0x0b, 0xfe, 0xff, 0xff, //0x0000936d movdqa $-501(%rip), %xmm2 /* LCPI36_0+0(%rip) */ + 0x66, 0x0f, 0x6f, 0x1d, 0x13, 0xfe, 0xff, 0xff, //0x00009375 movdqa $-493(%rip), %xmm3 /* LCPI36_1+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xe0, //0x0000937d movdqa %xmm0, %xmm4 + 0x66, 0x0f, 0x74, 0xe2, //0x00009381 pcmpeqb %xmm2, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00009385 pmovmskb %xmm4, %edi + 0x66, 0x0f, 0x74, 0xd1, //0x00009389 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x0000938d pmovmskb %xmm2, %ebx + 0x66, 0x0f, 0x74, 0xc3, //0x00009391 pcmpeqb %xmm3, %xmm0 + 0x66, 0x0f, 0xd7, 0xc0, //0x00009395 pmovmskb %xmm0, %eax + 0x66, 0x0f, 0x74, 0xcb, //0x00009399 pcmpeqb %xmm3, %xmm1 + 0x66, 0x0f, 0xd7, 0xc9, //0x0000939d pmovmskb %xmm1, %ecx + 0x48, 0xc1, 0xe3, 0x10, //0x000093a1 shlq $16, %rbx + 0x48, 0xc1, 0xe1, 0x10, //0x000093a5 shlq $16, %rcx + 0x48, 0x09, 0xc8, //0x000093a9 orq %rcx, %rax + 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x000093ac je LBB36_13 + 0x49, 0x83, 0xfe, 0xff, //0x000093b2 cmpq $-1, %r14 + 0x0f, 0x84, 0x50, 0x00, 0x00, 0x00, //0x000093b6 je LBB36_19 + //0x000093bc LBB36_13 + 0x48, 0x09, 0xfb, //0x000093bc orq %rdi, %rbx + 0x48, 0x89, 0xc1, //0x000093bf movq %rax, %rcx + 0x4c, 0x09, 0xf9, //0x000093c2 orq %r15, %rcx + 0x0f, 0x85, 0x64, 0x00, 0x00, 0x00, //0x000093c5 jne LBB36_20 + //0x000093cb LBB36_14 + 0x48, 0x85, 0xdb, //0x000093cb testq %rbx, %rbx + 0x0f, 0x84, 0x97, 0x00, 0x00, 0x00, //0x000093ce je LBB36_21 + //0x000093d4 LBB36_15 + 0x48, 0x0f, 0xbc, 0xc3, //0x000093d4 bsfq %rbx, %rax + 0x48, 0x29, 0xd6, //0x000093d8 subq %rdx, %rsi + 0x48, 0x8d, 0x44, 0x06, 0x01, //0x000093db leaq $1(%rsi,%rax), %rax + //0x000093e0 LBB36_16 + 0x48, 0x83, 0xc4, 0x10, //0x000093e0 addq $16, %rsp + 0x5b, //0x000093e4 popq %rbx + 0x41, 0x5c, //0x000093e5 popq %r12 + 0x41, 0x5d, //0x000093e7 popq %r13 + 0x41, 0x5e, //0x000093e9 popq %r14 + 0x41, 0x5f, //0x000093eb popq %r15 + 0x5d, //0x000093ed popq %rbp + 0xc3, //0x000093ee retq + //0x000093ef LBB36_18 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x000093ef movq $-1, %r14 + 0x45, 0x31, 0xff, //0x000093f6 xorl %r15d, %r15d + 0x48, 0x8b, 0x55, 0xd0, //0x000093f9 movq $-48(%rbp), %rdx + 0x49, 0x83, 0xfc, 0x20, //0x000093fd cmpq $32, %r12 + 0x0f, 0x83, 0x5d, 0xff, 0xff, 0xff, //0x00009401 jae LBB36_11 + 0xe9, 0x67, 0x00, 0x00, 0x00, //0x00009407 jmp LBB36_22 + //0x0000940c LBB36_19 + 0x48, 0x89, 0xf1, //0x0000940c movq %rsi, %rcx + 0x48, 0x29, 0xd1, //0x0000940f subq %rdx, %rcx + 0x4c, 0x0f, 0xbc, 0xf0, //0x00009412 bsfq %rax, %r14 + 0x49, 0x01, 0xce, //0x00009416 addq %rcx, %r14 + 0x48, 0x8b, 0x4d, 0xc8, //0x00009419 movq $-56(%rbp), %rcx + 0x4c, 0x89, 0x31, //0x0000941d movq %r14, (%rcx) + 0x48, 0x09, 0xfb, //0x00009420 orq %rdi, %rbx + 0x48, 0x89, 0xc1, //0x00009423 movq %rax, %rcx + 0x4c, 0x09, 0xf9, //0x00009426 orq %r15, %rcx + 0x0f, 0x84, 0x9c, 0xff, 0xff, 0xff, //0x00009429 je LBB36_14 + //0x0000942f LBB36_20 + 0x44, 0x89, 0xf9, //0x0000942f movl %r15d, %ecx + 0xf7, 0xd1, //0x00009432 notl %ecx + 0x21, 0xc1, //0x00009434 andl %eax, %ecx + 0x44, 0x8d, 0x04, 0x09, //0x00009436 leal (%rcx,%rcx), %r8d + 0x45, 0x09, 0xf8, //0x0000943a orl %r15d, %r8d + 0x44, 0x89, 0xc7, //0x0000943d movl %r8d, %edi + 0xf7, 0xd7, //0x00009440 notl %edi + 0x21, 0xc7, //0x00009442 andl %eax, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00009444 andl $-1431655766, %edi + 0x45, 0x31, 0xff, //0x0000944a xorl %r15d, %r15d + 0x01, 0xcf, //0x0000944d addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc7, //0x0000944f setb %r15b + 0x01, 0xff, //0x00009453 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00009455 xorl $1431655765, %edi + 0x44, 0x21, 0xc7, //0x0000945b andl %r8d, %edi + 0xf7, 0xd7, //0x0000945e notl %edi + 0x21, 0xfb, //0x00009460 andl %edi, %ebx + 0x48, 0x85, 0xdb, //0x00009462 testq %rbx, %rbx + 0x0f, 0x85, 0x69, 0xff, 0xff, 0xff, //0x00009465 jne LBB36_15 + //0x0000946b LBB36_21 + 0x48, 0x83, 0xc6, 0x20, //0x0000946b addq $32, %rsi + 0x49, 0x83, 0xc4, 0xe0, //0x0000946f addq $-32, %r12 + //0x00009473 LBB36_22 + 0x4d, 0x85, 0xff, //0x00009473 testq %r15, %r15 + 0x0f, 0x85, 0x90, 0x00, 0x00, 0x00, //0x00009476 jne LBB36_33 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000947c movq $-1, %rax + 0x4d, 0x85, 0xe4, //0x00009483 testq %r12, %r12 + 0x0f, 0x84, 0x54, 0xff, 0xff, 0xff, //0x00009486 je LBB36_16 + //0x0000948c LBB36_24 + 0x49, 0x89, 0xd1, //0x0000948c movq %rdx, %r9 + 0x49, 0xf7, 0xd1, //0x0000948f notq %r9 + 0x48, 0x8b, 0x4d, 0xc8, //0x00009492 movq $-56(%rbp), %rcx + //0x00009496 LBB36_25 + 0x48, 0x8d, 0x7e, 0x01, //0x00009496 leaq $1(%rsi), %rdi + 0x0f, 0xb6, 0x1e, //0x0000949a movzbl (%rsi), %ebx + 0x80, 0xfb, 0x22, //0x0000949d cmpb $34, %bl + 0x0f, 0x84, 0x5b, 0x00, 0x00, 0x00, //0x000094a0 je LBB36_32 + 0x4d, 0x8d, 0x54, 0x24, 0xff, //0x000094a6 leaq $-1(%r12), %r10 + 0x80, 0xfb, 0x5c, //0x000094ab cmpb $92, %bl + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000094ae je LBB36_28 + 0x4d, 0x89, 0xd4, //0x000094b4 movq %r10, %r12 + 0x48, 0x89, 0xfe, //0x000094b7 movq %rdi, %rsi + 0x4d, 0x85, 0xd2, //0x000094ba testq %r10, %r10 + 0x0f, 0x85, 0xd3, 0xff, 0xff, 0xff, //0x000094bd jne LBB36_25 + 0xe9, 0x18, 0xff, 0xff, 0xff, //0x000094c3 jmp LBB36_16 + //0x000094c8 LBB36_28 + 0x4d, 0x85, 0xd2, //0x000094c8 testq %r10, %r10 + 0x0f, 0x84, 0x0f, 0xff, 0xff, 0xff, //0x000094cb je LBB36_16 + 0x49, 0x83, 0xfe, 0xff, //0x000094d1 cmpq $-1, %r14 + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x000094d5 jne LBB36_31 + 0x4c, 0x01, 0xcf, //0x000094db addq %r9, %rdi + 0x48, 0x89, 0x39, //0x000094de movq %rdi, (%rcx) + 0x49, 0x89, 0xfe, //0x000094e1 movq %rdi, %r14 + //0x000094e4 LBB36_31 + 0x48, 0x83, 0xc6, 0x02, //0x000094e4 addq $2, %rsi + 0x49, 0x83, 0xc4, 0xfe, //0x000094e8 addq $-2, %r12 + 0x4d, 0x89, 0xe2, //0x000094ec movq %r12, %r10 + 0x48, 0x8b, 0x55, 0xd0, //0x000094ef movq $-48(%rbp), %rdx + 0x4d, 0x85, 0xd2, //0x000094f3 testq %r10, %r10 + 0x0f, 0x85, 0x9a, 0xff, 0xff, 0xff, //0x000094f6 jne LBB36_25 + 0xe9, 0xdf, 0xfe, 0xff, 0xff, //0x000094fc jmp LBB36_16 + //0x00009501 LBB36_32 + 0x48, 0x29, 0xd7, //0x00009501 subq %rdx, %rdi + 0x48, 0x89, 0xf8, //0x00009504 movq %rdi, %rax + 0xe9, 0xd4, 0xfe, 0xff, 0xff, //0x00009507 jmp LBB36_16 + //0x0000950c LBB36_33 + 0x4d, 0x85, 0xe4, //0x0000950c testq %r12, %r12 + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x0000950f je LBB36_17 + 0x49, 0x83, 0xfe, 0xff, //0x00009515 cmpq $-1, %r14 + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x00009519 jne LBB36_36 + 0x4c, 0x8b, 0x75, 0xd0, //0x0000951f movq $-48(%rbp), %r14 + 0x49, 0xf7, 0xd6, //0x00009523 notq %r14 + 0x49, 0x01, 0xf6, //0x00009526 addq %rsi, %r14 + 0x48, 0x8b, 0x45, 0xc8, //0x00009529 movq $-56(%rbp), %rax + 0x4c, 0x89, 0x30, //0x0000952d movq %r14, (%rax) + //0x00009530 LBB36_36 + 0x48, 0xff, 0xc6, //0x00009530 incq %rsi + 0x49, 0xff, 0xcc, //0x00009533 decq %r12 + 0x48, 0x8b, 0x55, 0xd0, //0x00009536 movq $-48(%rbp), %rdx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000953a movq $-1, %rax + 0x4d, 0x85, 0xe4, //0x00009541 testq %r12, %r12 + 0x0f, 0x85, 0x42, 0xff, 0xff, 0xff, //0x00009544 jne LBB36_24 + 0xe9, 0x91, 0xfe, 0xff, 0xff, //0x0000954a jmp LBB36_16 + //0x0000954f LBB36_17 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000954f movq $-1, %rax + 0xe9, 0x85, 0xfe, 0xff, 0xff, //0x00009556 jmp LBB36_16 + 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000955b .p2align 4, 0x00 + //0x00009560 _POW10_M128_TAB + 0x53, 0xe4, 0x60, 0xcd, 0x69, 0xc8, 0x32, 0x17, //0x00009560 .quad 1671618768450675795 + 0x88, 0x02, 0x1c, 0x08, 0xa0, 0xd5, 0x8f, 0xfa, //0x00009568 .quad -391859759250406776 + 0xb4, 0x8e, 0x5c, 0x20, 0x42, 0xbd, 0x7f, 0x0e, //0x00009570 .quad 1044761730281672372 + 0x95, 0x81, 0x11, 0x05, 0x84, 0xe5, 0x99, 0x9c, //0x00009578 .quad -7162441377172586091 + 0x61, 0xb2, 0x73, 0xa8, 0x92, 0xac, 0x1f, 0x52, //0x00009580 .quad 5917638181279478369 + 0xfa, 0xe1, 0x55, 0x06, 0xe5, 0x5e, 0xc0, 0xc3, //0x00009588 .quad -4341365703038344710 + 0xf9, 0x9e, 0x90, 0x52, 0xb7, 0x97, 0xa7, 0xe6, //0x00009590 .quad -1826324310255427847 + 0x78, 0x5a, 0xeb, 0x47, 0x9e, 0x76, 0xb0, 0xf4, //0x00009598 .quad -815021110370542984 + 0x5c, 0x63, 0x9a, 0x93, 0xd2, 0xbe, 0x28, 0x90, //0x000095a0 .quad -8058981721550724260 + 0x8b, 0x18, 0xf3, 0xec, 0x22, 0x4a, 0xee, 0x98, //0x000095a8 .quad -7426917221622671221 + 0x33, 0xfc, 0x80, 0x38, 0x87, 0xee, 0x32, 0x74, //0x000095b0 .quad 8373016921771146291 + 0xae, 0xde, 0x2f, 0xa8, 0xab, 0xdc, 0x29, 0xbf, //0x000095b8 .quad -4671960508600951122 + 0x3f, 0x3b, 0xa1, 0x06, 0x29, 0xaa, 0x3f, 0x11, //0x000095c0 .quad 1242899115359157055 + 0x5a, 0xd6, 0x3b, 0x92, 0xd6, 0x53, 0xf4, 0xee, //0x000095c8 .quad -1228264617323800998 + 0x07, 0xc5, 0x24, 0xa4, 0x59, 0xca, 0xc7, 0x4a, //0x000095d0 .quad 5388497965526861063 + 0xf8, 0x65, 0x65, 0x1b, 0x66, 0xb4, 0x58, 0x95, //0x000095d8 .quad -7685194413468457480 + 0x49, 0xf6, 0x2d, 0x0d, 0xf0, 0xbc, 0x79, 0x5d, //0x000095e0 .quad 6735622456908576329 + 0x76, 0xbf, 0x3e, 0xa2, 0x7f, 0xe1, 0xae, 0xba, //0x000095e8 .quad -4994806998408183946 + 0xdc, 0x73, 0x79, 0x10, 0x2c, 0x2c, 0xd8, 0xf4, //0x000095f0 .quad -803843965719055396 + 0x53, 0x6f, 0xce, 0x8a, 0xdf, 0x99, 0x5a, 0xe9, //0x000095f8 .quad -1631822729582842029 + 0x69, 0xe8, 0x4b, 0x8a, 0x9b, 0x1b, 0x07, 0x79, //0x00009600 .quad 8720969558280366185 + 0x94, 0x05, 0xc1, 0xb6, 0x2b, 0xa0, 0xd8, 0x91, //0x00009608 .quad -7937418233630358124 + 0x84, 0xe2, 0xde, 0x6c, 0x82, 0xe2, 0x48, 0x97, //0x00009610 .quad -7545532125859093884 + 0xf9, 0x46, 0x71, 0xa4, 0x36, 0xc8, 0x4e, 0xb6, //0x00009618 .quad -5310086773610559751 + 0x25, 0x9b, 0x16, 0x08, 0x23, 0x1b, 0x1b, 0xfd, //0x00009620 .quad -208543120469091547 + 0xb7, 0x98, 0x8d, 0x4d, 0x44, 0x7a, 0xe2, 0xe3, //0x00009628 .quad -2025922448585811785 + 0xf7, 0x20, 0x0e, 0xe5, 0xf5, 0xf0, 0x30, 0xfe, //0x00009630 .quad -130339450293182217 + 0x72, 0x7f, 0x78, 0xb0, 0x6a, 0x8c, 0x6d, 0x8e, //0x00009638 .quad -8183730558007214222 + 0x35, 0xa9, 0x51, 0x5e, 0x33, 0x2d, 0xbd, 0xbd, //0x00009640 .quad -4774610331293865675 + 0x4f, 0x9f, 0x96, 0x5c, 0x85, 0xef, 0x08, 0xb2, //0x00009648 .quad -5617977179081629873 + 0x82, 0x13, 0xe6, 0x35, 0x80, 0x78, 0x2c, 0xad, //0x00009650 .quad -5968262914117332094 + 0x23, 0x47, 0xbc, 0xb3, 0x66, 0x2b, 0x8b, 0xde, //0x00009658 .quad -2410785455424649437 + 0x31, 0xcc, 0xaf, 0x21, 0x50, 0xcb, 0x3b, 0x4c, //0x00009660 .quad 5493207715531443249 + 0x76, 0xac, 0x55, 0x30, 0x20, 0xfb, 0x16, 0x8b, //0x00009668 .quad -8424269937281487754 + 0x3d, 0xbf, 0x1b, 0x2a, 0x24, 0xbe, 0x4a, 0xdf, //0x00009670 .quad -2356862392440471747 + 0x93, 0x17, 0x6b, 0x3c, 0xe8, 0xb9, 0xdc, 0xad, //0x00009678 .quad -5918651403174471789 + 0x0d, 0xaf, 0xa2, 0x34, 0xad, 0x6d, 0x1d, 0xd7, //0x00009680 .quad -2946077990550589683 + 0x78, 0xdd, 0x85, 0x4b, 0x62, 0xe8, 0x53, 0xd9, //0x00009688 .quad -2786628235540701832 + 0x68, 0xad, 0xe5, 0x40, 0x8c, 0x64, 0x72, 0x86, //0x00009690 .quad -8758827771735200408 + 0x6b, 0xaa, 0x33, 0x6f, 0x3d, 0x71, 0xd4, 0x87, //0x00009698 .quad -8659171674854020501 + 0xc2, 0x18, 0x1f, 0x51, 0xaf, 0xfd, 0x0e, 0x68, //0x000096a0 .quad 7498209359040551106 + 0x06, 0x95, 0x00, 0xcb, 0x8c, 0x8d, 0xc9, 0xa9, //0x000096a8 .quad -6212278575140137722 + 0xf2, 0xde, 0x66, 0x25, 0x1b, 0xbd, 0x12, 0x02, //0x000096b0 .quad 149389661945913074 + 0x48, 0xba, 0xc0, 0xfd, 0xef, 0xf0, 0x3b, 0xd4, //0x000096b8 .quad -3153662200497784248 + 0x57, 0x4b, 0x60, 0xf7, 0x30, 0xb6, 0x4b, 0x01, //0x000096c0 .quad 93368538716195671 + 0x6d, 0x74, 0x98, 0xfe, 0x95, 0x76, 0xa5, 0x84, //0x000096c8 .quad -8888567902952197011 + 0x2d, 0x5e, 0x38, 0x35, 0xbd, 0xa3, 0x9e, 0x41, //0x000096d0 .quad 4728396691822632493 + 0x88, 0x91, 0x3e, 0x7e, 0x3b, 0xd4, 0xce, 0xa5, //0x000096d8 .quad -6499023860262858360 + 0xb9, 0x75, 0x86, 0x82, 0xac, 0x4c, 0x06, 0x52, //0x000096e0 .quad 5910495864778290617 + 0xea, 0x35, 0xce, 0x5d, 0x4a, 0x89, 0x42, 0xcf, //0x000096e8 .quad -3512093806901185046 + 0x93, 0x09, 0x94, 0xd1, 0xeb, 0xef, 0x43, 0x73, //0x000096f0 .quad 8305745933913819539 + 0xb2, 0xe1, 0xa0, 0x7a, 0xce, 0x95, 0x89, 0x81, //0x000096f8 .quad -9112587656954322510 + 0xf8, 0x0b, 0xf9, 0xc5, 0xe6, 0xeb, 0x14, 0x10, //0x00009700 .quad 1158810380537498616 + 0x1f, 0x1a, 0x49, 0x19, 0x42, 0xfb, 0xeb, 0xa1, //0x00009708 .quad -6779048552765515233 + 0xf6, 0x4e, 0x77, 0x77, 0xe0, 0x26, 0x1a, 0xd4, //0x00009710 .quad -3163173042755514634 + 0xa6, 0x60, 0x9b, 0x9f, 0x12, 0xfa, 0x66, 0xca, //0x00009718 .quad -3862124672529506138 + 0xb4, 0x22, 0x55, 0x95, 0x98, 0xb0, 0x20, 0x89, //0x00009720 .quad -8565652321871781196 + 0xd0, 0x38, 0x82, 0x47, 0x97, 0xb8, 0x00, 0xfd, //0x00009728 .quad -215969822234494768 + 0xb0, 0x35, 0x55, 0x5d, 0x5f, 0x6e, 0xb4, 0x55, //0x00009730 .quad 6175682344898606512 + 0x82, 0x63, 0xb1, 0x8c, 0x5e, 0x73, 0x20, 0x9e, //0x00009738 .quad -7052510166537641086 + 0x1d, 0x83, 0xaa, 0x34, 0xf7, 0x89, 0x21, 0xeb, //0x00009740 .quad -1503769105731517667 + 0x62, 0xbc, 0xdd, 0x2f, 0x36, 0x90, 0xa8, 0xc5, //0x00009748 .quad -4203951689744663454 + 0xe4, 0x23, 0xd5, 0x01, 0x75, 0xec, 0xe9, 0xa5, //0x00009750 .quad -6491397400591784988 + 0x7b, 0x2b, 0xd5, 0xbb, 0x43, 0xb4, 0x12, 0xf7, //0x00009758 .quad -643253593753441413 + 0x6e, 0x36, 0x25, 0x21, 0xc9, 0x33, 0xb2, 0x47, //0x00009760 .quad 5166248661484910190 + 0x2d, 0x3b, 0x65, 0x55, 0xaa, 0xb0, 0x6b, 0x9a, //0x00009768 .quad -7319562523736982739 + 0x0a, 0x84, 0x6e, 0x69, 0xbb, 0xc0, 0x9e, 0x99, //0x00009770 .quad -7377247228426025974 + 0xf8, 0x89, 0xbe, 0xea, 0xd4, 0x9c, 0x06, 0xc1, //0x00009778 .quad -4537767136243840520 + 0x0d, 0x25, 0xca, 0x43, 0xea, 0x70, 0x06, 0xc0, //0x00009780 .quad -4609873017105144563 + 0x76, 0x2c, 0x6e, 0x25, 0x0a, 0x44, 0x48, 0xf1, //0x00009788 .quad -1060522901877412746 + 0x28, 0x57, 0x5e, 0x6a, 0x92, 0x06, 0x04, 0x38, //0x00009790 .quad 4036358391950366504 + 0xca, 0xdb, 0x64, 0x57, 0x86, 0x2a, 0xcd, 0x96, //0x00009798 .quad -7580355841314464822 + 0xf2, 0xec, 0xf5, 0x04, 0x37, 0x08, 0x05, 0xc6, //0x000097a0 .quad -4177924046916817678 + 0xbc, 0x12, 0x3e, 0xed, 0x27, 0x75, 0x80, 0xbc, //0x000097a8 .quad -4863758783215693124 + 0x2e, 0x68, 0x33, 0xc6, 0x44, 0x4a, 0x86, 0xf7, //0x000097b0 .quad -610719040218634194 + 0x6b, 0x97, 0x8d, 0xe8, 0x71, 0x92, 0xa0, 0xeb, //0x000097b8 .quad -1468012460592228501 + 0x1d, 0x21, 0xe0, 0xfb, 0x6a, 0xee, 0xb3, 0x7a, //0x000097c0 .quad 8841672636718129437 + 0xa3, 0x7e, 0x58, 0x31, 0x87, 0x5b, 0x44, 0x93, //0x000097c8 .quad -7835036815511224669 + 0x64, 0x29, 0xd8, 0xba, 0x05, 0xea, 0x60, 0x59, //0x000097d0 .quad 6440404777470273892 + 0x4c, 0x9e, 0xae, 0xfd, 0x68, 0x72, 0x15, 0xb8, //0x000097d8 .quad -5182110000961642932 + 0xbd, 0x33, 0x8e, 0x29, 0x87, 0x24, 0xb9, 0x6f, //0x000097e0 .quad 8050505971837842365 + 0xdf, 0x45, 0x1a, 0x3d, 0x03, 0xcf, 0x1a, 0xe6, //0x000097e8 .quad -1865951482774665761 + 0x56, 0xe0, 0xf8, 0x79, 0xd4, 0xb6, 0xd3, 0xa5, //0x000097f0 .quad -6497648813669818282 + 0xab, 0x6b, 0x30, 0x06, 0x62, 0xc1, 0xd0, 0x8f, //0x000097f8 .quad -8083748704375247957 + 0x6c, 0x18, 0x77, 0x98, 0x89, 0xa4, 0x48, 0x8f, //0x00009800 .quad -8122061017087272852 + 0x96, 0x86, 0xbc, 0x87, 0xba, 0xf1, 0xc4, 0xb3, //0x00009808 .quad -5492999862041672042 + 0x87, 0xde, 0x94, 0xfe, 0xab, 0xcd, 0x1a, 0x33, //0x00009810 .quad 3682481783923072647 + 0x3c, 0xa8, 0xab, 0x29, 0x29, 0x2e, 0xb6, 0xe0, //0x00009818 .quad -2254563809124702148 + 0x14, 0x0b, 0x1d, 0x7f, 0x8b, 0xc0, 0xf0, 0x9f, //0x00009820 .quad -6921820921902855404 + 0x25, 0x49, 0x0b, 0xba, 0xd9, 0xdc, 0x71, 0x8c, //0x00009828 .quad -8326631408344020699 + 0xd9, 0x4d, 0xe4, 0x5e, 0xae, 0xf0, 0xec, 0x07, //0x00009830 .quad 571095884476206553 + 0x6f, 0x1b, 0x8e, 0x28, 0x10, 0x54, 0x8e, 0xaf, //0x00009838 .quad -5796603242002637969 + 0x50, 0x61, 0x9d, 0xf6, 0xd9, 0x2c, 0xe8, 0xc9, //0x00009840 .quad -3897816162832129712 + 0x4a, 0xa2, 0xb1, 0x32, 0x14, 0xe9, 0x71, 0xdb, //0x00009848 .quad -2634068034075909558 + 0xd2, 0x5c, 0x22, 0x3a, 0x08, 0x1c, 0x31, 0xbe, //0x00009850 .quad -4741978110983775022 + 0x6e, 0x05, 0xaf, 0x9f, 0xac, 0x31, 0x27, 0x89, //0x00009858 .quad -8563821548938525330 + 0x06, 0xf4, 0xaa, 0x48, 0x0a, 0x63, 0xbd, 0x6d, //0x00009860 .quad 7907585416552444934 + 0xca, 0xc6, 0x9a, 0xc7, 0x17, 0xfe, 0x70, 0xab, //0x00009868 .quad -6093090917745768758 + 0x08, 0xb1, 0xd5, 0xda, 0xcc, 0xbb, 0x2c, 0x09, //0x00009870 .quad 661109733835780360 + 0x7d, 0x78, 0x81, 0xb9, 0x9d, 0x3d, 0x4d, 0xd6, //0x00009878 .quad -3004677628754823043 + 0xa5, 0x8e, 0xc5, 0x08, 0x60, 0xf5, 0xbb, 0x25, //0x00009880 .quad 2719036592861056677 + 0x4e, 0xeb, 0xf0, 0x93, 0x82, 0x46, 0xf0, 0x85, //0x00009888 .quad -8795452545612846258 + 0x4e, 0xf2, 0xf6, 0x0a, 0xb8, 0xf2, 0x2a, 0xaf, //0x00009890 .quad -5824576295778454962 + 0x21, 0x26, 0xed, 0x38, 0x23, 0x58, 0x6c, 0xa7, //0x00009898 .quad -6382629663588669919 + 0xe1, 0xae, 0xb4, 0x0d, 0x66, 0xaf, 0xf5, 0x1a, //0x000098a0 .quad 1942651667131707105 + 0xaa, 0x6f, 0x28, 0x07, 0x2c, 0x6e, 0x47, 0xd1, //0x000098a8 .quad -3366601061058449494 + 0x4d, 0xed, 0x90, 0xc8, 0x9f, 0x8d, 0xd9, 0x50, //0x000098b0 .quad 5825843310384704845 + 0xca, 0x45, 0x79, 0x84, 0xdb, 0xa4, 0xcc, 0x82, //0x000098b8 .quad -9021654690802612790 + 0xa0, 0x28, 0xb5, 0xba, 0x07, 0xf1, 0x0f, 0xe5, //0x000098c0 .quad -1941067898873894752 + 0x3c, 0x97, 0x97, 0x65, 0x12, 0xce, 0x7f, 0xa3, //0x000098c8 .quad -6665382345075878084 + 0xc8, 0x72, 0x62, 0xa9, 0x49, 0xed, 0x53, 0x1e, //0x000098d0 .quad 2185351144835019464 + 0x0c, 0x7d, 0xfd, 0xfe, 0x96, 0xc1, 0x5f, 0xcc, //0x000098d8 .quad -3720041912917459700 + 0x7a, 0x0f, 0xbb, 0x13, 0x9c, 0xe8, 0xe8, 0x25, //0x000098e0 .quad 2731688931043774330 + 0x4f, 0xdc, 0xbc, 0xbe, 0xfc, 0xb1, 0x77, 0xff, //0x000098e8 .quad -38366372719436721 + 0xac, 0xe9, 0x54, 0x8c, 0x61, 0x91, 0xb1, 0x77, //0x000098f0 .quad 8624834609543440812 + 0xb1, 0x09, 0x36, 0xf7, 0x3d, 0xcf, 0xaa, 0x9f, //0x000098f8 .quad -6941508010590729807 + 0x17, 0x24, 0x6a, 0xef, 0xb9, 0xf5, 0x9d, 0xd5, //0x00009900 .quad -3054014793352862697 + 0x1d, 0x8c, 0x03, 0x75, 0x0d, 0x83, 0x95, 0xc7, //0x00009908 .quad -4065198994811024355 + 0x1d, 0xad, 0x44, 0x6b, 0x28, 0x73, 0x05, 0x4b, //0x00009910 .quad 5405853545163697437 + 0x25, 0x6f, 0x44, 0xd2, 0xd0, 0xe3, 0x7a, 0xf9, //0x00009918 .quad -469812725086392539 + 0x32, 0xec, 0x0a, 0x43, 0xf9, 0x67, 0xe3, 0x4e, //0x00009920 .quad 5684501474941004850 + 0x77, 0xc5, 0x6a, 0x83, 0x62, 0xce, 0xec, 0x9b, //0x00009928 .quad -7211161980820077193 + 0x3f, 0xa7, 0xcd, 0x93, 0xf7, 0x41, 0x9c, 0x22, //0x00009930 .quad 2493940825248868159 + 0xd5, 0x76, 0x45, 0x24, 0xfb, 0x01, 0xe8, 0xc2, //0x00009938 .quad -4402266457597708587 + 0x0f, 0x11, 0xc1, 0x78, 0x75, 0x52, 0x43, 0x6b, //0x00009940 .quad 7729112049988473103 + 0x8a, 0xd4, 0x56, 0xed, 0x79, 0x02, 0xa2, 0xf3, //0x00009948 .quad -891147053569747830 + 0xa9, 0xaa, 0x78, 0x6b, 0x89, 0x13, 0x0a, 0x83, //0x00009950 .quad -9004363024039368023 + 0xd6, 0x44, 0x56, 0x34, 0x8c, 0x41, 0x45, 0x98, //0x00009958 .quad -7474495936122174250 + 0x53, 0xd5, 0x56, 0xc6, 0x6b, 0x98, 0xcc, 0x23, //0x00009960 .quad 2579604275232953683 + 0x0c, 0xd6, 0x6b, 0x41, 0xef, 0x91, 0x56, 0xbe, //0x00009968 .quad -4731433901725329908 + 0xa8, 0x8a, 0xec, 0xb7, 0x86, 0xbe, 0xbf, 0x2c, //0x00009970 .quad 3224505344041192104 + 0x8f, 0xcb, 0xc6, 0x11, 0x6b, 0x36, 0xec, 0xed, //0x00009978 .quad -1302606358729274481 + 0xa9, 0xd6, 0xf3, 0x32, 0x14, 0xd7, 0xf7, 0x7b, //0x00009980 .quad 8932844867666826921 + 0x39, 0x3f, 0x1c, 0xeb, 0x02, 0xa2, 0xb3, 0x94, //0x00009988 .quad -7731658001846878407 + 0x53, 0xcc, 0xb0, 0x3f, 0xd9, 0xcc, 0xf5, 0xda, //0x00009990 .quad -2669001970698630061 + 0x07, 0x4f, 0xe3, 0xa5, 0x83, 0x8a, 0xe0, 0xb9, //0x00009998 .quad -5052886483881210105 + 0x68, 0xff, 0x9c, 0x8f, 0x0f, 0x40, 0xb3, 0xd1, //0x000099a0 .quad -3336252463373287576 + 0xc9, 0x22, 0x5c, 0x8f, 0x24, 0xad, 0x58, 0xe8, //0x000099a8 .quad -1704422086424124727 + 0xa1, 0x1f, 0xc2, 0xb9, 0x09, 0x08, 0x10, 0x23, //0x000099b0 .quad 2526528228819083169 + 0xbe, 0x95, 0x99, 0xd9, 0x36, 0x6c, 0x37, 0x91, //0x000099b8 .quad -7982792831656159810 + 0x8a, 0xa7, 0x32, 0x28, 0x0c, 0x0a, 0xd4, 0xab, //0x000099c0 .quad -6065211750830921846 + 0x2d, 0xfb, 0xff, 0x8f, 0x44, 0x47, 0x85, 0xb5, //0x000099c8 .quad -5366805021142811859 + 0x6c, 0x51, 0x3f, 0x32, 0x8f, 0x0c, 0xc9, 0x16, //0x000099d0 .quad 1641857348316123500 + 0xf9, 0xf9, 0xff, 0xb3, 0x15, 0x99, 0xe6, 0xe2, //0x000099d8 .quad -2096820258001126919 + 0xe3, 0x92, 0x67, 0x7f, 0xd9, 0xa7, 0x3d, 0xae, //0x000099e0 .quad -5891368184943504669 + 0x3b, 0xfc, 0x7f, 0x90, 0xad, 0x1f, 0xd0, 0x8d, //0x000099e8 .quad -8228041688891786181 + 0x9c, 0x77, 0x41, 0xdf, 0xcf, 0x11, 0xcd, 0x99, //0x000099f0 .quad -7364210231179380836 + 0x4a, 0xfb, 0x9f, 0xf4, 0x98, 0x27, 0x44, 0xb1, //0x000099f8 .quad -5673366092687344822 + 0x83, 0xd5, 0x11, 0xd7, 0x43, 0x56, 0x40, 0x40, //0x00009a00 .quad 4629795266307937667 + 0x1d, 0xfa, 0xc7, 0x31, 0x7f, 0x31, 0x95, 0xdd, //0x00009a08 .quad -2480021597431793123 + 0x72, 0x25, 0x6b, 0x66, 0xea, 0x35, 0x28, 0x48, //0x00009a10 .quad 5199465050656154994 + 0x52, 0xfc, 0x1c, 0x7f, 0xef, 0x3e, 0x7d, 0x8a, //0x00009a18 .quad -8467542526035952558 + 0xcf, 0xee, 0x05, 0x00, 0x65, 0x43, 0x32, 0xda, //0x00009a20 .quad -2724040723534582065 + 0x66, 0x3b, 0xe4, 0x5e, 0xab, 0x8e, 0x1c, 0xad, //0x00009a28 .quad -5972742139117552794 + 0x82, 0x6a, 0x07, 0x40, 0x3e, 0xd4, 0xbe, 0x90, //0x00009a30 .quad -8016736922845615486 + 0x40, 0x4a, 0x9d, 0x36, 0x56, 0xb2, 0x63, 0xd8, //0x00009a38 .quad -2854241655469553088 + 0x91, 0xa2, 0x04, 0xe8, 0xa6, 0x44, 0x77, 0x5a, //0x00009a40 .quad 6518754469289960081 + 0x68, 0x4e, 0x22, 0xe2, 0x75, 0x4f, 0x3e, 0x87, //0x00009a48 .quad -8701430062309552536 + 0x36, 0xcb, 0x05, 0xa2, 0xd0, 0x15, 0x15, 0x71, //0x00009a50 .quad 8148443086612450102 + 0x02, 0xe2, 0xaa, 0x5a, 0x53, 0xe3, 0x0d, 0xa9, //0x00009a58 .quad -6265101559459552766 + 0x03, 0x3e, 0x87, 0xca, 0x44, 0x5b, 0x5a, 0x0d, //0x00009a60 .quad 962181821410786819 + 0x83, 0x9a, 0x55, 0x31, 0x28, 0x5c, 0x51, 0xd3, //0x00009a68 .quad -3219690930897053053 + 0xc2, 0x86, 0x94, 0xfe, 0x0a, 0x79, 0x58, 0xe8, //0x00009a70 .quad -1704479370831952190 + 0x91, 0x80, 0xd5, 0x1e, 0x99, 0xd9, 0x12, 0x84, //0x00009a78 .quad -8929835859451740015 + 0x72, 0xa8, 0x39, 0xbe, 0x4d, 0x97, 0x6e, 0x62, //0x00009a80 .quad 7092772823314835570 + 0xb6, 0xe0, 0x8a, 0x66, 0xff, 0x8f, 0x17, 0xa5, //0x00009a88 .quad -6550608805887287114 + 0x8f, 0x12, 0xc8, 0x2d, 0x21, 0x3d, 0x0a, 0xfb, //0x00009a90 .quad -357406007711231345 + 0xe3, 0x98, 0x2d, 0x40, 0xff, 0x73, 0x5d, 0xce, //0x00009a98 .quad -3576574988931720989 + 0x99, 0x0b, 0x9d, 0xbc, 0x34, 0x66, 0xe6, 0x7c, //0x00009aa0 .quad 8999993282035256217 + 0x8e, 0x7f, 0x1c, 0x88, 0x7f, 0x68, 0xfa, 0x80, //0x00009aa8 .quad -9152888395723407474 + 0x80, 0x4e, 0xc4, 0xeb, 0xc1, 0xff, 0x1f, 0x1c, //0x00009ab0 .quad 2026619565689294464 + 0x72, 0x9f, 0x23, 0x6a, 0x9f, 0x02, 0x39, 0xa1, //0x00009ab8 .quad -6829424476226871438 + 0x20, 0x62, 0xb5, 0x66, 0xb2, 0xff, 0x27, 0xa3, //0x00009ac0 .quad -6690097579743157728 + 0x4e, 0x87, 0xac, 0x44, 0x47, 0x43, 0x87, 0xc9, //0x00009ac8 .quad -3925094576856201394 + 0xa8, 0xba, 0x62, 0x00, 0x9f, 0xff, 0xf1, 0x4b, //0x00009ad0 .quad 5472436080603216552 + 0x22, 0xa9, 0xd7, 0x15, 0x19, 0x14, 0xe9, 0xfb, //0x00009ad8 .quad -294682202642863838 + 0xa9, 0xb4, 0x3d, 0x60, 0xc3, 0x3f, 0x77, 0x6f, //0x00009ae0 .quad 8031958568804398249 + 0xb5, 0xc9, 0xa6, 0xad, 0x8f, 0xac, 0x71, 0x9d, //0x00009ae8 .quad -7101705404292871755 + 0xd3, 0x21, 0x4d, 0x38, 0xb4, 0x0f, 0x55, 0xcb, //0x00009af0 .quad -3795109844276665901 + 0x22, 0x7c, 0x10, 0x99, 0xb3, 0x17, 0xce, 0xc4, //0x00009af8 .quad -4265445736938701790 + 0x48, 0x6a, 0x60, 0x46, 0xa1, 0x53, 0x2a, 0x7e, //0x00009b00 .quad 9091170749936331336 + 0x2b, 0x9b, 0x54, 0x7f, 0xa0, 0x9d, 0x01, 0xf6, //0x00009b08 .quad -720121152745989333 + 0x6d, 0x42, 0xfc, 0xcb, 0x44, 0x74, 0xda, 0x2e, //0x00009b10 .quad 3376138709496513133 + 0xfb, 0xe0, 0x94, 0x4f, 0x84, 0x02, 0xc1, 0x99, //0x00009b18 .quad -7367604748107325189 + 0x08, 0x53, 0xfb, 0xfe, 0x55, 0x11, 0x91, 0xfa, //0x00009b20 .quad -391512631556746488 + 0x39, 0x19, 0x7a, 0x63, 0x25, 0x43, 0x31, 0xc0, //0x00009b28 .quad -4597819916706768583 + 0xca, 0x27, 0xba, 0x7e, 0xab, 0x55, 0x35, 0x79, //0x00009b30 .quad 8733981247408842698 + 0x88, 0x9f, 0x58, 0xbc, 0xee, 0x93, 0x3d, 0xf0, //0x00009b38 .quad -1135588877456072824 + 0xde, 0x58, 0x34, 0x2f, 0x8b, 0x55, 0xc1, 0x4b, //0x00009b40 .quad 5458738279630526686 + 0xb5, 0x63, 0xb7, 0x35, 0x75, 0x7c, 0x26, 0x96, //0x00009b48 .quad -7627272076051127371 + 0x16, 0x6f, 0x01, 0xfb, 0xed, 0xaa, 0xb1, 0x9e, //0x00009b50 .quad -7011635205744005354 + 0xa2, 0x3c, 0x25, 0x83, 0x92, 0x1b, 0xb0, 0xbb, //0x00009b58 .quad -4922404076636521310 + 0xdc, 0xca, 0xc1, 0x79, 0xa9, 0x15, 0x5e, 0x46, //0x00009b60 .quad 5070514048102157020 + 0xcb, 0x8b, 0xee, 0x23, 0x77, 0x22, 0x9c, 0xea, //0x00009b68 .quad -1541319077368263733 + 0xc9, 0x1e, 0x19, 0xec, 0x89, 0xcd, 0xfa, 0x0b, //0x00009b70 .quad 863228270850154185 + 0x5f, 0x17, 0x75, 0x76, 0x8a, 0x95, 0xa1, 0x92, //0x00009b78 .quad -7880853450996246689 + 0x7b, 0x66, 0x1f, 0x67, 0xec, 0x80, 0xf9, 0xce, //0x00009b80 .quad -3532650679864695173 + 0x36, 0x5d, 0x12, 0x14, 0xed, 0xfa, 0x49, 0xb7, //0x00009b88 .quad -5239380795317920458 + 0x1a, 0x40, 0xe7, 0x80, 0x27, 0xe1, 0xb7, 0x82, //0x00009b90 .quad -9027499368258256870 + 0x84, 0xf4, 0x16, 0x59, 0xa8, 0x79, 0x1c, 0xe5, //0x00009b98 .quad -1937539975720012668 + 0x10, 0x88, 0x90, 0xb0, 0xb8, 0xec, 0xb2, 0xd1, //0x00009ba0 .quad -3336344095947716592 + 0xd2, 0x58, 0xae, 0x37, 0x09, 0xcc, 0x31, 0x8f, //0x00009ba8 .quad -8128491512466089774 + 0x15, 0xaa, 0xb4, 0xdc, 0xe6, 0xa7, 0x1f, 0x86, //0x00009bb0 .quad -8782116138362033643 + 0x07, 0xef, 0x99, 0x85, 0x0b, 0x3f, 0xfe, 0xb2, //0x00009bb8 .quad -5548928372155224313 + 0x9a, 0xd4, 0xe1, 0x93, 0xe0, 0x91, 0xa7, 0x67, //0x00009bc0 .quad 7469098900757009562 + 0xc9, 0x6a, 0x00, 0x67, 0xce, 0xce, 0xbd, 0xdf, //0x00009bc8 .quad -2324474446766642487 + 0xe0, 0x24, 0x6d, 0x5c, 0x2c, 0xbb, 0xc8, 0xe0, //0x00009bd0 .quad -2249342214667950880 + 0xbd, 0x42, 0x60, 0x00, 0x41, 0xa1, 0xd6, 0x8b, //0x00009bd8 .quad -8370325556870233411 + 0x18, 0x6e, 0x88, 0x73, 0xf7, 0xe9, 0xfa, 0x58, //0x00009be0 .quad 6411694268519837208 + 0x6d, 0x53, 0x78, 0x40, 0x91, 0x49, 0xcc, 0xae, //0x00009be8 .quad -5851220927660403859 + 0x9e, 0x89, 0x6a, 0x50, 0x75, 0xa4, 0x39, 0xaf, //0x00009bf0 .quad -5820440219632367202 + 0x48, 0x68, 0x96, 0x90, 0xf5, 0x5b, 0x7f, 0xda, //0x00009bf8 .quad -2702340141148116920 + 0x03, 0x96, 0x42, 0x52, 0xc9, 0x06, 0x84, 0x6d, //0x00009c00 .quad 7891439908798240259 + 0x2d, 0x01, 0x5e, 0x7a, 0x79, 0x99, 0x8f, 0x88, //0x00009c08 .quad -8606491615858654931 + 0x83, 0x3b, 0xd3, 0xa6, 0x7b, 0x08, 0xe5, 0xc8, //0x00009c10 .quad -3970758169284363389 + 0x78, 0x81, 0xf5, 0xd8, 0xd7, 0x7f, 0xb3, 0xaa, //0x00009c18 .quad -6146428501395930760 + 0x64, 0x0a, 0x88, 0x90, 0x9a, 0x4a, 0x1e, 0xfb, //0x00009c20 .quad -351761693178066332 + 0xd6, 0xe1, 0x32, 0xcf, 0xcd, 0x5f, 0x60, 0xd5, //0x00009c28 .quad -3071349608317525546 + 0x7f, 0x06, 0x55, 0x9a, 0xa0, 0xee, 0xf2, 0x5c, //0x00009c30 .quad 6697677969404790399 + 0x26, 0xcd, 0x7f, 0xa1, 0xe0, 0x3b, 0x5c, 0x85, //0x00009c38 .quad -8837122532839535322 + 0x1e, 0x48, 0xea, 0xc0, 0x48, 0xaa, 0x2f, 0xf4, //0x00009c40 .quad -851274575098787810 + 0x6f, 0xc0, 0xdf, 0xc9, 0xd8, 0x4a, 0xb3, 0xa6, //0x00009c48 .quad -6434717147622031249 + 0x26, 0xda, 0x24, 0xf1, 0xda, 0x94, 0x3b, 0xf1, //0x00009c50 .quad -1064093218873484762 + 0x8b, 0xb0, 0x57, 0xfc, 0x8e, 0x1d, 0x60, 0xd0, //0x00009c58 .quad -3431710416100151157 + 0x58, 0x08, 0xb7, 0xd6, 0x08, 0x3d, 0xc5, 0x76, //0x00009c60 .quad 8558313775058847832 + 0x57, 0xce, 0xb6, 0x5d, 0x79, 0x12, 0x3c, 0x82, //0x00009c68 .quad -9062348037703676329 + 0x6e, 0xca, 0x64, 0x0c, 0x4b, 0x8c, 0x76, 0x54, //0x00009c70 .quad 6086206200396171886 + 0xed, 0x81, 0x24, 0xb5, 0x17, 0x17, 0xcb, 0xa2, //0x00009c78 .quad -6716249028702207507 + 0x09, 0xfd, 0x7d, 0xcf, 0x5d, 0x2f, 0x94, 0xa9, //0x00009c80 .quad -6227300304786948855 + 0x68, 0xa2, 0x6d, 0xa2, 0xdd, 0xdc, 0x7d, 0xcb, //0x00009c88 .quad -3783625267450371480 + 0x4c, 0x7c, 0x5d, 0x43, 0x35, 0x3b, 0xf9, 0xd3, //0x00009c90 .quad -3172439362556298164 + 0x02, 0x0b, 0x09, 0x0b, 0x15, 0x54, 0x5d, 0xfe, //0x00009c98 .quad -117845565885576446 + 0xaf, 0x6d, 0x1a, 0x4a, 0x01, 0xc5, 0x7b, 0xc4, //0x00009ca0 .quad -4288617610811380305 + 0xe1, 0xa6, 0xe5, 0x26, 0x8d, 0x54, 0xfa, 0x9e, //0x00009ca8 .quad -6991182506319567135 + 0x1b, 0x09, 0xa1, 0x9c, 0x41, 0xb6, 0x9a, 0x35, //0x00009cb0 .quad 3862600023340550427 + 0x9a, 0x10, 0x9f, 0x70, 0xb0, 0xe9, 0xb8, 0xc6, //0x00009cb8 .quad -4127292114472071014 + 0x62, 0x4b, 0xc9, 0x03, 0xd2, 0x63, 0x01, 0xc3, //0x00009cc0 .quad -4395122007679087774 + 0xc0, 0xd4, 0xc6, 0x8c, 0x1c, 0x24, 0x67, 0xf8, //0x00009cc8 .quad -547429124662700864 + 0x1d, 0xcf, 0x5d, 0x42, 0x63, 0xde, 0xe0, 0x79, //0x00009cd0 .quad 8782263791269039901 + 0xf8, 0x44, 0xfc, 0xd7, 0x91, 0x76, 0x40, 0x9b, //0x00009cd8 .quad -7259672230555269896 + 0xe4, 0x42, 0xf5, 0x12, 0xfc, 0x15, 0x59, 0x98, //0x00009ce0 .quad -7468914334623251740 + 0x36, 0x56, 0xfb, 0x4d, 0x36, 0x94, 0x10, 0xc2, //0x00009ce8 .quad -4462904269766699466 + 0x9d, 0x93, 0xb2, 0x17, 0x7b, 0x5b, 0x6f, 0x3e, //0x00009cf0 .quad 4498915137003099037 + 0xc4, 0x2b, 0x7a, 0xe1, 0x43, 0xb9, 0x94, 0xf2, //0x00009cf8 .quad -966944318780986428 + 0x42, 0x9c, 0xcf, 0xee, 0x2c, 0x99, 0x05, 0xa7, //0x00009d00 .quad -6411550076227838910 + 0x5a, 0x5b, 0xec, 0x6c, 0xca, 0xf3, 0x9c, 0x97, //0x00009d08 .quad -7521869226879198374 + 0x53, 0x83, 0x83, 0x2a, 0x78, 0xff, 0xc6, 0x50, //0x00009d10 .quad 5820620459997365075 + 0x31, 0x72, 0x27, 0x08, 0xbd, 0x30, 0x84, 0xbd, //0x00009d18 .quad -4790650515171610063 + 0x28, 0x64, 0x24, 0x35, 0x56, 0xbf, 0xf8, 0xa4, //0x00009d20 .quad -6559282480285457368 + 0xbd, 0x4e, 0x31, 0x4a, 0xec, 0x3c, 0xe5, 0xec, //0x00009d28 .quad -1376627125537124675 + 0x99, 0xbe, 0x36, 0xe1, 0x95, 0x77, 0x1b, 0x87, //0x00009d30 .quad -8711237568605798759 + 0x36, 0xd1, 0x5e, 0xae, 0x13, 0x46, 0x0f, 0x94, //0x00009d38 .quad -7777920981101784778 + 0x3f, 0x6e, 0x84, 0x59, 0x7b, 0x55, 0xe2, 0x28, //0x00009d40 .quad 2946011094524915263 + 0x84, 0x85, 0xf6, 0x99, 0x98, 0x17, 0x13, 0xb9, //0x00009d48 .quad -5110715207949843068 + 0xcf, 0x89, 0xe5, 0x2f, 0xda, 0xea, 0x1a, 0x33, //0x00009d50 .quad 3682513868156144079 + 0xe5, 0x26, 0x74, 0xc0, 0x7e, 0xdd, 0x57, 0xe7, //0x00009d58 .quad -1776707991509915931 + 0x21, 0x76, 0xef, 0x5d, 0xc8, 0xd2, 0xf0, 0x3f, //0x00009d60 .quad 4607414176811284001 + 0x4f, 0x98, 0x48, 0x38, 0x6f, 0xea, 0x96, 0x90, //0x00009d68 .quad -8027971522334779313 + 0xa9, 0x53, 0x6b, 0x75, 0x7a, 0x07, 0xed, 0x0f, //0x00009d70 .quad 1147581702586717097 + 0x63, 0xbe, 0x5a, 0x06, 0x0b, 0xa5, 0xbc, 0xb4, //0x00009d78 .quad -5423278384491086237 + 0x94, 0x28, 0xc6, 0x12, 0x59, 0x49, 0xe8, 0xd3, //0x00009d80 .quad -3177208890193991532 + 0xfb, 0x6d, 0xf1, 0xc7, 0x4d, 0xce, 0xeb, 0xe1, //0x00009d88 .quad -2167411962186469893 + 0x5c, 0xd9, 0xbb, 0xab, 0xd7, 0x2d, 0x71, 0x64, //0x00009d90 .quad 7237616480483531100 + 0xbd, 0xe4, 0xf6, 0x9c, 0xf0, 0x60, 0x33, 0x8d, //0x00009d98 .quad -8272161504007625539 + 0xb3, 0xcf, 0xaa, 0x96, 0x4d, 0x79, 0x8d, 0xbd, //0x00009da0 .quad -4788037454677749837 + 0xec, 0x9d, 0x34, 0xc4, 0x2c, 0x39, 0x80, 0xb0, //0x00009da8 .quad -5728515861582144020 + 0xa0, 0x83, 0x55, 0xfc, 0xa0, 0xd7, 0xf0, 0xec, //0x00009db0 .quad -1373360799919799392 + 0x67, 0xc5, 0x41, 0xf5, 0x77, 0x47, 0xa0, 0xdc, //0x00009db8 .quad -2548958808550292121 + 0x44, 0x72, 0xb5, 0x9d, 0xc4, 0x86, 0x16, 0xf4, //0x00009dc0 .quad -858350499949874620 + 0x60, 0x1b, 0x49, 0xf9, 0xaa, 0x2c, 0xe4, 0x89, //0x00009dc8 .quad -8510628282985014432 + 0xd5, 0xce, 0x22, 0xc5, 0x75, 0x28, 0x1c, 0x31, //0x00009dd0 .quad 3538747893490044629 + 0x39, 0x62, 0x9b, 0xb7, 0xd5, 0x37, 0x5d, 0xac, //0x00009dd8 .quad -6026599335303880135 + 0x8b, 0x82, 0x6b, 0x36, 0x93, 0x32, 0x63, 0x7d, //0x00009de0 .quad 9035120885289943691 + 0xc7, 0x3a, 0x82, 0x25, 0xcb, 0x85, 0x74, 0xd7, //0x00009de8 .quad -2921563150702462265 + 0x97, 0x31, 0x03, 0x02, 0x9c, 0xff, 0x5d, 0xae, //0x00009df0 .quad -5882264492762254953 + 0xbc, 0x64, 0x71, 0xf7, 0x9e, 0xd3, 0xa8, 0x86, //0x00009df8 .quad -8743505996830120772 + 0xfc, 0xfd, 0x83, 0x02, 0x83, 0x7f, 0xf5, 0xd9, //0x00009e00 .quad -2741144597525430788 + 0xeb, 0xbd, 0x4d, 0xb5, 0x86, 0x08, 0x53, 0xa8, //0x00009e08 .quad -6317696477610263061 + 0x7b, 0xfd, 0x24, 0xc3, 0x63, 0xdf, 0x72, 0xd0, //0x00009e10 .quad -3426430746906788485 + 0x66, 0x2d, 0xa1, 0x62, 0xa8, 0xca, 0x67, 0xd2, //0x00009e18 .quad -3285434578585440922 + 0x6d, 0x1e, 0xf7, 0x59, 0x9e, 0xcb, 0x47, 0x42, //0x00009e20 .quad 4776009810824339053 + 0x60, 0xbc, 0xa4, 0x3d, 0xa9, 0xde, 0x80, 0x83, //0x00009e28 .quad -8970925639256982432 + 0x08, 0xe6, 0x74, 0xf0, 0x85, 0xbe, 0xd9, 0x52, //0x00009e30 .quad 5970012263530423816 + 0x78, 0xeb, 0x0d, 0x8d, 0x53, 0x16, 0x61, 0xa4, //0x00009e38 .quad -6601971030643840136 + 0x8b, 0x1f, 0x92, 0x6c, 0x27, 0x2e, 0x90, 0x67, //0x00009e40 .quad 7462515329413029771 + 0x56, 0x66, 0x51, 0x70, 0xe8, 0x5b, 0x79, 0xcd, //0x00009e48 .quad -3640777769877412266 + 0xb6, 0x53, 0xdb, 0xa3, 0xd8, 0x1c, 0xba, 0x00, //0x00009e50 .quad 52386062455755702 + 0xf6, 0xdf, 0x32, 0x46, 0x71, 0xd9, 0x6b, 0x80, //0x00009e58 .quad -9193015133814464522 + 0xa4, 0x28, 0xd2, 0xcc, 0x0e, 0xa4, 0xe8, 0x80, //0x00009e60 .quad -9157889458785081180 + 0xf3, 0x97, 0xbf, 0x97, 0xcd, 0xcf, 0x86, 0xa0, //0x00009e68 .quad -6879582898840692749 + 0xcd, 0xb2, 0x06, 0x80, 0x12, 0xcd, 0x22, 0x61, //0x00009e70 .quad 6999382250228200141 + 0xf0, 0x7d, 0xaf, 0xfd, 0xc0, 0x83, 0xa8, 0xc8, //0x00009e78 .quad -3987792605123478032 + 0x81, 0x5f, 0x08, 0x20, 0x57, 0x80, 0x6b, 0x79, //0x00009e80 .quad 8749227812785250177 + 0x6c, 0x5d, 0x1b, 0x3d, 0xb1, 0xa4, 0xd2, 0xfa, //0x00009e88 .quad -373054737976959636 + 0xb0, 0x3b, 0x05, 0x74, 0x36, 0x30, 0xe3, 0xcb, //0x00009e90 .quad -3755104653863994448 + 0x63, 0x1a, 0x31, 0xc6, 0xee, 0xa6, 0xc3, 0x9c, //0x00009e98 .quad -7150688238876681629 + 0x9c, 0x8a, 0x06, 0x11, 0x44, 0xfc, 0xdb, 0xbe, //0x00009ea0 .quad -4693880817329993060 + 0xfc, 0x60, 0xbd, 0x77, 0xaa, 0x90, 0xf4, 0xc3, //0x00009ea8 .quad -4326674280168464132 + 0x44, 0x2d, 0x48, 0x15, 0x55, 0xfb, 0x92, 0xee, //0x00009eb0 .quad -1255665003235103420 + 0x3b, 0xb9, 0xac, 0x15, 0xd5, 0xb4, 0xf1, 0xf4, //0x00009eb8 .quad -796656831783192261 + 0x4a, 0x1c, 0x4d, 0x2d, 0x15, 0xdd, 0x1b, 0x75, //0x00009ec0 .quad 8438581409832836170 + 0xc5, 0xf3, 0x8b, 0x2d, 0x05, 0x11, 0x17, 0x99, //0x00009ec8 .quad -7415439547505577019 + 0x5d, 0x63, 0xa0, 0x78, 0x5a, 0xd4, 0x62, 0xd2, //0x00009ed0 .quad -3286831292991118499 + 0xb6, 0xf0, 0xee, 0x78, 0x46, 0xd5, 0x5c, 0xbf, //0x00009ed8 .quad -4657613415954583370 + 0x34, 0x7c, 0xc8, 0x16, 0x71, 0x89, 0xfb, 0x86, //0x00009ee0 .quad -8720225134666286028 + 0xe4, 0xac, 0x2a, 0x17, 0x98, 0x0a, 0x34, 0xef, //0x00009ee8 .quad -1210330751515841308 + 0xa0, 0x4d, 0x3d, 0xae, 0xe6, 0x35, 0x5d, 0xd4, //0x00009ef0 .quad -3144297699952734816 + 0x0e, 0xac, 0x7a, 0x0e, 0x9f, 0x86, 0x80, 0x95, //0x00009ef8 .quad -7673985747338482674 + 0x09, 0xa1, 0xcc, 0x59, 0x60, 0x83, 0x74, 0x89, //0x00009f00 .quad -8542058143368306423 + 0x12, 0x57, 0x19, 0xd2, 0x46, 0xa8, 0xe0, 0xba, //0x00009f08 .quad -4980796165745715438 + 0x4b, 0xc9, 0x3f, 0x70, 0x38, 0xa4, 0xd1, 0x2b, //0x00009f10 .quad 3157485376071780683 + 0xd7, 0xac, 0x9f, 0x86, 0x58, 0xd2, 0x98, 0xe9, //0x00009f18 .quad -1614309188754756393 + 0xcf, 0xdd, 0x27, 0x46, 0xa3, 0x06, 0x63, 0x7b, //0x00009f20 .quad 8890957387685944783 + 0x06, 0xcc, 0x23, 0x54, 0x77, 0x83, 0xff, 0x91, //0x00009f28 .quad -7926472270612804602 + 0x42, 0xd5, 0xb1, 0x17, 0x4c, 0xc8, 0x3b, 0x1a, //0x00009f30 .quad 1890324697752655170 + 0x08, 0xbf, 0x2c, 0x29, 0x55, 0x64, 0x7f, 0xb6, //0x00009f38 .quad -5296404319838617848 + 0x93, 0x4a, 0x9e, 0x1d, 0x5f, 0xba, 0xca, 0x20, //0x00009f40 .quad 2362905872190818963 + 0xca, 0xee, 0x77, 0x73, 0x6a, 0x3d, 0x1f, 0xe4, //0x00009f48 .quad -2008819381370884406 + 0x9c, 0xee, 0x82, 0x72, 0x7b, 0xb4, 0x7e, 0x54, //0x00009f50 .quad 6088502188546649756 + 0x3e, 0xf5, 0x2a, 0x88, 0x62, 0x86, 0x93, 0x8e, //0x00009f58 .quad -8173041140997884610 + 0x43, 0xaa, 0x23, 0x4f, 0x9a, 0x61, 0x9e, 0xe9, //0x00009f60 .quad -1612744301171463613 + 0x8d, 0xb2, 0x35, 0x2a, 0xfb, 0x67, 0x38, 0xb2, //0x00009f68 .quad -5604615407819967859 + 0xd4, 0x94, 0xec, 0xe2, 0x00, 0xfa, 0x05, 0x64, //0x00009f70 .quad 7207441660390446292 + 0x31, 0x1f, 0xc3, 0xf4, 0xf9, 0x81, 0xc6, 0xde, //0x00009f78 .quad -2394083241347571919 + 0x04, 0xdd, 0xd3, 0x8d, 0x40, 0xbc, 0x83, 0xde, //0x00009f80 .quad -2412877989897052924 + 0x7e, 0xf3, 0xf9, 0x38, 0x3c, 0x11, 0x3c, 0x8b, //0x00009f88 .quad -8413831053483314306 + 0x45, 0xd4, 0x48, 0xb1, 0x50, 0xab, 0x24, 0x96, //0x00009f90 .quad -7627783505798704059 + 0x5e, 0x70, 0x38, 0x47, 0x8b, 0x15, 0x0b, 0xae, //0x00009f98 .quad -5905602798426754978 + 0x57, 0x09, 0x9b, 0xdd, 0x24, 0xd6, 0xad, 0x3b, //0x00009fa0 .quad 4300328673033783639 + 0x76, 0x8c, 0x06, 0x19, 0xee, 0xda, 0x8d, 0xd9, //0x00009fa8 .quad -2770317479606055818 + 0xd6, 0xe5, 0x80, 0x0a, 0xd7, 0xa5, 0x4c, 0xe5, //0x00009fb0 .quad -1923980597781273130 + 0xc9, 0x17, 0xa4, 0xcf, 0xd4, 0xa8, 0xf8, 0x87, //0x00009fb8 .quad -8648977452394866743 + 0x4c, 0x1f, 0x21, 0xcd, 0x4c, 0xcf, 0x9f, 0x5e, //0x00009fc0 .quad 6818396289628184396 + 0xbc, 0x1d, 0x8d, 0x03, 0x0a, 0xd3, 0xf6, 0xa9, //0x00009fc8 .quad -6199535797066195524 + 0x1f, 0x67, 0x69, 0x00, 0x20, 0xc3, 0x47, 0x76, //0x00009fd0 .quad 8522995362035230495 + 0x2b, 0x65, 0x70, 0x84, 0xcc, 0x87, 0x74, 0xd4, //0x00009fd8 .quad -3137733727905356501 + 0x73, 0xe0, 0x41, 0x00, 0xf4, 0xd9, 0xec, 0x29, //0x00009fe0 .quad 3021029092058325107 + 0x3b, 0x3f, 0xc6, 0xd2, 0xdf, 0xd4, 0xc8, 0x84, //0x00009fe8 .quad -8878612607581929669 + 0x90, 0x58, 0x52, 0x00, 0x71, 0x10, 0x68, 0xf4, //0x00009ff0 .quad -835399653354481520 + 0x09, 0xcf, 0x77, 0xc7, 0x17, 0x0a, 0xfb, 0xa5, //0x00009ff8 .quad -6486579741050024183 + 0xb4, 0xee, 0x66, 0x40, 0x8d, 0x14, 0x82, 0x71, //0x0000a000 .quad 8179122470161673908 + 0xcc, 0xc2, 0x55, 0xb9, 0x9d, 0xcc, 0x79, 0xcf, //0x0000a008 .quad -3496538657885142324 + 0x30, 0x55, 0x40, 0x48, 0xd8, 0x4c, 0xf1, 0xc6, //0x0000a010 .quad -4111420493003729616 + 0xbf, 0x99, 0xd5, 0x93, 0xe2, 0x1f, 0xac, 0x81, //0x0000a018 .quad -9102865688819295809 + 0x7c, 0x6a, 0x50, 0x5a, 0x0e, 0xa0, 0xad, 0xb8, //0x0000a020 .quad -5139275616254662020 + 0x2f, 0x00, 0xcb, 0x38, 0xdb, 0x27, 0x17, 0xa2, //0x0000a028 .quad -6766896092596731857 + 0x1c, 0x85, 0xe4, 0xf0, 0x11, 0x08, 0xd9, 0xa6, //0x0000a030 .quad -6424094520318327524 + 0x3b, 0xc0, 0xfd, 0x06, 0xd2, 0xf1, 0x9c, 0xca, //0x0000a038 .quad -3846934097318526917 + 0x63, 0xa6, 0x1d, 0x6d, 0x16, 0x4a, 0x8f, 0x90, //0x0000a040 .quad -8030118150397909405 + 0x4a, 0x30, 0xbd, 0x88, 0x46, 0x2e, 0x44, 0xfd, //0x0000a048 .quad -196981603220770742 + 0xfe, 0x87, 0x32, 0x04, 0x4e, 0x8e, 0x59, 0x9a, //0x0000a050 .quad -7324666853212387330 + 0x2e, 0x3e, 0x76, 0x15, 0xec, 0x9c, 0x4a, 0x9e, //0x0000a058 .quad -7040642529654063570 + 0xfd, 0x29, 0x3f, 0x85, 0xe1, 0xf1, 0xef, 0x40, //0x0000a060 .quad 4679224488766679549 + 0xba, 0xcd, 0xd3, 0x1a, 0x27, 0x44, 0xdd, 0xc5, //0x0000a068 .quad -4189117143640191558 + 0x7c, 0xf4, 0x8e, 0xe6, 0x59, 0xee, 0x2b, 0xd1, //0x0000a070 .quad -3374341425896426372 + 0x28, 0xc1, 0x88, 0xe1, 0x30, 0x95, 0x54, 0xf7, //0x0000a078 .quad -624710411122851544 + 0xce, 0x58, 0x19, 0x30, 0xf8, 0x74, 0xbb, 0x82, //0x0000a080 .quad -9026492418826348338 + 0xb9, 0x78, 0xf5, 0x8c, 0x3e, 0xdd, 0x94, 0x9a, //0x0000a088 .quad -7307973034592864071 + 0x01, 0xaf, 0x1f, 0x3c, 0x36, 0x52, 0x6a, 0xe3, //0x0000a090 .quad -2059743486678159615 + 0xe7, 0xd6, 0x32, 0x30, 0x8e, 0x14, 0x3a, 0xc1, //0x0000a098 .quad -4523280274813692185 + 0xc1, 0x9a, 0x27, 0xcb, 0xc3, 0xe6, 0x44, 0xdc, //0x0000a0a0 .quad -2574679358347699519 + 0xa1, 0x8c, 0x3f, 0xbc, 0xb1, 0x99, 0x88, 0xf1, //0x0000a0a8 .quad -1042414325089727327 + 0xb9, 0xc0, 0xf8, 0x5e, 0x3a, 0x10, 0xab, 0x29, //0x0000a0b0 .quad 3002511419460075705 + 0xe5, 0xb7, 0xa7, 0x15, 0x0f, 0x60, 0xf5, 0x96, //0x0000a0b8 .quad -7569037980822161435 + 0xe7, 0xf0, 0xb6, 0xf6, 0x48, 0xd4, 0x15, 0x74, //0x0000a0c0 .quad 8364825292752482535 + 0xde, 0xa5, 0x11, 0xdb, 0x12, 0xb8, 0xb2, 0xbc, //0x0000a0c8 .quad -4849611457600313890 + 0x21, 0xad, 0x64, 0x34, 0x5b, 0x49, 0x1b, 0x11, //0x0000a0d0 .quad 1232659579085827361 + 0x56, 0x0f, 0xd6, 0x91, 0x17, 0x66, 0xdf, 0xeb, //0x0000a0d8 .quad -1450328303573004458 + 0x34, 0xec, 0xbe, 0x00, 0xd9, 0x0d, 0xb1, 0xca, //0x0000a0e0 .quad -3841273781498745804 + 0x95, 0xc9, 0x25, 0xbb, 0xce, 0x9f, 0x6b, 0x93, //0x0000a0e8 .quad -7823984217374209643 + 0x42, 0xa7, 0xee, 0x40, 0x4f, 0x51, 0x5d, 0x3d, //0x0000a0f0 .quad 4421779809981343554 + 0xfb, 0x3b, 0xef, 0x69, 0xc2, 0x87, 0x46, 0xb8, //0x0000a0f8 .quad -5168294253290374149 + 0x12, 0x51, 0x2a, 0x11, 0xa3, 0xa5, 0xb4, 0x0c, //0x0000a100 .quad 915538744049291538 + 0xfa, 0x0a, 0x6b, 0x04, 0xb3, 0x29, 0x58, 0xe6, //0x0000a108 .quad -1848681798185579782 + 0xab, 0x72, 0xba, 0xea, 0x85, 0xe7, 0xf0, 0x47, //0x0000a110 .quad 5183897733458195115 + 0xdc, 0xe6, 0xc2, 0xe2, 0x0f, 0x1a, 0xf7, 0x8f, //0x0000a118 .quad -8072955151507069220 + 0x56, 0x0f, 0x69, 0x65, 0x67, 0x21, 0xed, 0x59, //0x0000a120 .quad 6479872166822743894 + 0x93, 0xa0, 0x73, 0xdb, 0x93, 0xe0, 0xf4, 0xb3, //0x0000a128 .quad -5479507920956448621 + 0x2c, 0x53, 0xc3, 0x3e, 0xc1, 0x69, 0x68, 0x30, //0x0000a130 .quad 3488154190101041964 + 0xb8, 0x88, 0x50, 0xd2, 0xb8, 0x18, 0xf2, 0xe0, //0x0000a138 .quad -2237698882768172872 + 0xfb, 0x13, 0x3a, 0xc7, 0x18, 0x42, 0x41, 0x1e, //0x0000a140 .quad 2180096368813151227 + 0x73, 0x55, 0x72, 0x83, 0x73, 0x4f, 0x97, 0x8c, //0x0000a148 .quad -8316090829371189901 + 0xfa, 0x98, 0x08, 0xf9, 0x9e, 0x92, 0xd1, 0xe5, //0x0000a150 .quad -1886565557410948870 + 0xcf, 0xea, 0x4e, 0x64, 0x50, 0x23, 0xbd, 0xaf, //0x0000a158 .quad -5783427518286599473 + 0x39, 0xbf, 0x4a, 0xb7, 0x46, 0xf7, 0x45, 0xdf, //0x0000a160 .quad -2358206946763686087 + 0x83, 0xa5, 0x62, 0x7d, 0x24, 0x6c, 0xac, 0xdb, //0x0000a168 .quad -2617598379430861437 + 0x83, 0xb7, 0x8e, 0x32, 0x8c, 0xba, 0x8b, 0x6b, //0x0000a170 .quad 7749492695127472003 + 0x72, 0xa7, 0x5d, 0xce, 0x96, 0xc3, 0x4b, 0x89, //0x0000a178 .quad -8553528014785370254 + 0x64, 0x65, 0x32, 0x3f, 0x2f, 0xa9, 0x6e, 0x06, //0x0000a180 .quad 463493832054564196 + 0x4f, 0x11, 0xf5, 0x81, 0x7c, 0xb4, 0x9e, 0xab, //0x0000a188 .quad -6080224000054324913 + 0xbd, 0xfe, 0xfe, 0x0e, 0x7b, 0x53, 0x0a, 0xc8, //0x0000a190 .quad -4032318728359182659 + 0xa2, 0x55, 0x72, 0xa2, 0x9b, 0x61, 0x86, 0xd6, //0x0000a198 .quad -2988593981640518238 + 0x36, 0x5f, 0x5f, 0xe9, 0x2c, 0x74, 0x06, 0xbd, //0x0000a1a0 .quad -4826042214438183114 + 0x85, 0x75, 0x87, 0x45, 0x01, 0xfd, 0x13, 0x86, //0x0000a1a8 .quad -8785400266166405755 + 0x04, 0x37, 0xb7, 0x23, 0x38, 0x11, 0x48, 0x2c, //0x0000a1b0 .quad 3190819268807046916 + 0xe7, 0x52, 0xe9, 0x96, 0x41, 0xfc, 0x98, 0xa7, //0x0000a1b8 .quad -6370064314280619289 + 0xc5, 0x04, 0xa5, 0x2c, 0x86, 0x15, 0x5a, 0xf7, //0x0000a1c0 .quad -623161932418579259 + 0xa0, 0xa7, 0xa3, 0xfc, 0x51, 0x3b, 0x7f, 0xd1, //0x0000a1c8 .quad -3350894374423386208 + 0xfb, 0x22, 0xe7, 0xdb, 0x73, 0x4d, 0x98, 0x9a, //0x0000a1d0 .quad -7307005235402693893 + 0xc4, 0x48, 0xe6, 0x3d, 0x13, 0x85, 0xef, 0x82, //0x0000a1d8 .quad -9011838011655698236 + 0xba, 0xeb, 0xe0, 0xd2, 0xd0, 0x60, 0x3e, 0xc1, //0x0000a1e0 .quad -4522070525825979462 + 0xf5, 0xda, 0x5f, 0x0d, 0x58, 0x66, 0xab, 0xa3, //0x0000a1e8 .quad -6653111496142234891 + 0xa8, 0x26, 0x99, 0x07, 0x05, 0xf9, 0x8d, 0x31, //0x0000a1f0 .quad 3570783879572301480 + 0xb3, 0xd1, 0xb7, 0x10, 0xee, 0x3f, 0x96, 0xcc, //0x0000a1f8 .quad -3704703351750405709 + 0x52, 0x70, 0x7f, 0x49, 0x46, 0x77, 0xf1, 0xfd, //0x0000a200 .quad -148206168962011054 + 0x1f, 0xc6, 0xe5, 0x94, 0xe9, 0xcf, 0xbb, 0xff, //0x0000a208 .quad -19193171260619233 + 0x33, 0xa6, 0xef, 0xed, 0x8b, 0xea, 0xb6, 0xfe, //0x0000a210 .quad -92628855601256909 + 0xd3, 0x9b, 0x0f, 0xfd, 0xf1, 0x61, 0xd5, 0x9f, //0x0000a218 .quad -6929524759678968877 + 0xc0, 0x8f, 0x6b, 0xe9, 0x2e, 0xa5, 0x64, 0xfe, //0x0000a220 .quad -115786069501571136 + 0xc8, 0x82, 0x53, 0x7c, 0x6e, 0xba, 0xca, 0xc7, //0x0000a228 .quad -4050219931171323192 + 0xb0, 0x73, 0xc6, 0xa3, 0x7a, 0xce, 0xfd, 0x3d, //0x0000a230 .quad 4466953431550423984 + 0x7b, 0x63, 0x68, 0x1b, 0x0a, 0x69, 0xbd, 0xf9, //0x0000a238 .quad -451088895536766085 + 0x4e, 0x08, 0x5c, 0xa6, 0x0c, 0xa1, 0xbe, 0x06, //0x0000a240 .quad 486002885505321038 + 0x2d, 0x3e, 0x21, 0x51, 0xa6, 0x61, 0x16, 0x9c, //0x0000a248 .quad -7199459587351560659 + 0x62, 0x0a, 0xf3, 0xcf, 0x4f, 0x49, 0x6e, 0x48, //0x0000a250 .quad 5219189625309039202 + 0xb8, 0x8d, 0x69, 0xe5, 0x0f, 0xfa, 0x1b, 0xc3, //0x0000a258 .quad -4387638465762062920 + 0xfa, 0xcc, 0xef, 0xc3, 0xa3, 0xdb, 0x89, 0x5a, //0x0000a260 .quad 6523987031636299002 + 0x26, 0xf1, 0xc3, 0xde, 0x93, 0xf8, 0xe2, 0xf3, //0x0000a268 .quad -872862063775190746 + 0x1c, 0xe0, 0x75, 0x5a, 0x46, 0x29, 0x96, 0xf8, //0x0000a270 .quad -534194123654701028 + 0xb7, 0x76, 0x3a, 0x6b, 0x5c, 0xdb, 0x6d, 0x98, //0x0000a278 .quad -7463067817500576073 + 0x23, 0x58, 0x13, 0xf1, 0x97, 0xb3, 0xbb, 0xf6, //0x0000a280 .quad -667742654568376285 + 0x65, 0x14, 0x09, 0x86, 0x33, 0x52, 0x89, 0xbe, //0x0000a288 .quad -4717148753448332187 + 0x2c, 0x2e, 0x58, 0xed, 0x7d, 0xa0, 0x6a, 0x74, //0x0000a290 .quad 8388693718644305452 + 0x7f, 0x59, 0x8b, 0x67, 0xc0, 0xa6, 0x2b, 0xee, //0x0000a298 .quad -1284749923383027329 + 0xdc, 0x1c, 0x57, 0xb4, 0x4e, 0xa4, 0xc2, 0xa8, //0x0000a2a0 .quad -6286281471915778852 + 0xef, 0x17, 0xb7, 0x40, 0x38, 0x48, 0xdb, 0x94, //0x0000a2a8 .quad -7720497729755473937 + 0x13, 0xe4, 0x6c, 0x61, 0x62, 0x4d, 0xf3, 0x92, //0x0000a2b0 .quad -7857851839894723565 + 0xeb, 0xdd, 0xe4, 0x50, 0x46, 0x1a, 0x12, 0xba, //0x0000a2b8 .quad -5038936143766954517 + 0x17, 0x1d, 0xc8, 0xf9, 0xba, 0x20, 0xb0, 0x77, //0x0000a2c0 .quad 8624429273841147159 + 0x66, 0x15, 0x1e, 0xe5, 0xd7, 0xa0, 0x96, 0xe8, //0x0000a2c8 .quad -1686984161281305242 + 0x2e, 0x12, 0x1d, 0xdc, 0x74, 0x14, 0xce, 0x0a, //0x0000a2d0 .quad 778582277723329070 + 0x60, 0xcd, 0x32, 0xef, 0x86, 0x24, 0x5e, 0x91, //0x0000a2d8 .quad -7971894128441897632 + 0xba, 0x56, 0x24, 0x13, 0x92, 0x99, 0x81, 0x0d, //0x0000a2e0 .quad 973227847154161338 + 0xb8, 0x80, 0xff, 0xaa, 0xa8, 0xad, 0xb5, 0xb5, //0x0000a2e8 .quad -5353181642124984136 + 0x69, 0x6c, 0xed, 0x97, 0xf6, 0xff, 0xe1, 0x10, //0x0000a2f0 .quad 1216534808942701673 + 0xe6, 0x60, 0xbf, 0xd5, 0x12, 0x19, 0x23, 0xe3, //0x0000a2f8 .quad -2079791034228842266 + 0xc1, 0x63, 0xf4, 0x1e, 0xfa, 0x3f, 0x8d, 0xca, //0x0000a300 .quad -3851351762838199359 + 0x8f, 0x9c, 0x97, 0xc5, 0xab, 0xef, 0xf5, 0x8d, //0x0000a308 .quad -8217398424034108273 + 0xb2, 0x7c, 0xb1, 0xa6, 0xf8, 0x8f, 0x30, 0xbd, //0x0000a310 .quad -4814189703547749198 + 0xb3, 0x83, 0xfd, 0xb6, 0x96, 0x6b, 0x73, 0xb1, //0x0000a318 .quad -5660062011615247437 + 0xde, 0xdb, 0x5d, 0xd0, 0xf6, 0xb3, 0x7c, 0xac, //0x0000a320 .quad -6017737129434686498 + 0xa0, 0xe4, 0xbc, 0x64, 0x7c, 0x46, 0xd0, 0xdd, //0x0000a328 .quad -2463391496091671392 + 0x6b, 0xa9, 0x3a, 0x42, 0x7a, 0xf0, 0xcd, 0x6b, //0x0000a330 .quad 7768129340171790699 + 0xe4, 0x0e, 0xf6, 0xbe, 0x0d, 0x2c, 0xa2, 0x8a, //0x0000a338 .quad -8457148712698376476 + 0xc6, 0x53, 0xc9, 0xd2, 0x98, 0x6c, 0xc1, 0x86, //0x0000a340 .quad -8736582398494813242 + 0x9d, 0x92, 0xb3, 0x2e, 0x11, 0xb7, 0x4a, 0xad, //0x0000a348 .quad -5959749872445582691 + 0xb7, 0xa8, 0x7b, 0x07, 0xbf, 0xc7, 0x71, 0xe8, //0x0000a350 .quad -1697355961263740745 + 0x44, 0x77, 0x60, 0x7a, 0xd5, 0x64, 0x9d, 0xd8, //0x0000a358 .quad -2838001322129590460 + 0x72, 0x49, 0xad, 0x64, 0xd7, 0x1c, 0x47, 0x11, //0x0000a360 .quad 1244995533423855986 + 0x8b, 0x4a, 0x7c, 0x6c, 0x05, 0x5f, 0x62, 0x87, //0x0000a368 .quad -8691279853972075893 + 0xcf, 0x9b, 0xd8, 0x3d, 0x0d, 0xe4, 0x98, 0xd5, //0x0000a370 .quad -3055441601647567921 + 0x2d, 0x5d, 0x9b, 0xc7, 0xc6, 0xf6, 0x3a, 0xa9, //0x0000a378 .quad -6252413799037706963 + 0xc3, 0xc2, 0x4e, 0x8d, 0x10, 0x1d, 0xff, 0x4a, //0x0000a380 .quad 5404070034795315907 + 0x79, 0x34, 0x82, 0x79, 0x78, 0xb4, 0x89, 0xd3, //0x0000a388 .quad -3203831230369745799 + 0xba, 0x39, 0x51, 0x58, 0x2a, 0x72, 0xdf, 0xce, //0x0000a390 .quad -3539985255894009414 + 0xcb, 0x60, 0xf1, 0x4b, 0xcb, 0x10, 0x36, 0x84, //0x0000a398 .quad -8919923546622172981 + 0x28, 0x88, 0x65, 0xee, 0xb4, 0x4e, 0x97, 0xc2, //0x0000a3a0 .quad -4424981569867511768 + 0xfe, 0xb8, 0xed, 0x1e, 0xfe, 0x94, 0x43, 0xa5, //0x0000a3a8 .quad -6538218414850328322 + 0x32, 0xea, 0xfe, 0x29, 0x62, 0x22, 0x3d, 0x73, //0x0000a3b0 .quad 8303831092947774002 + 0x3e, 0x27, 0xa9, 0xa6, 0x3d, 0x7a, 0x94, 0xce, //0x0000a3b8 .quad -3561087000135522498 + 0x5f, 0x52, 0x3f, 0x5a, 0x7d, 0x35, 0x06, 0x08, //0x0000a3c0 .quad 578208414664970847 + 0x87, 0xb8, 0x29, 0x88, 0x66, 0xcc, 0x1c, 0x81, //0x0000a3c8 .quad -9143208402725783417 + 0xf7, 0x26, 0xcf, 0xb0, 0xdc, 0xc2, 0x07, 0xca, //0x0000a3d0 .quad -3888925500096174345 + 0xa8, 0x26, 0x34, 0x2a, 0x80, 0xff, 0x63, 0xa1, //0x0000a3d8 .quad -6817324484979841368 + 0xb5, 0xf0, 0x02, 0xdd, 0x93, 0xb3, 0x89, 0xfc, //0x0000a3e0 .quad -249470856692830027 + 0x52, 0x30, 0xc1, 0x34, 0x60, 0xff, 0xbc, 0xc9, //0x0000a3e8 .quad -3909969587797413806 + 0xe2, 0xac, 0x43, 0xd4, 0x78, 0x20, 0xac, 0xbb, //0x0000a3f0 .quad -4923524589293425438 + 0x67, 0x7c, 0xf1, 0x41, 0x38, 0x3f, 0x2c, 0xfc, //0x0000a3f8 .quad -275775966319379353 + 0x0d, 0x4c, 0xaa, 0x84, 0x4b, 0x94, 0x4b, 0xd5, //0x0000a400 .quad -3077202868308390899 + 0xc0, 0xed, 0x36, 0x29, 0x83, 0xa7, 0x9b, 0x9d, //0x0000a408 .quad -7089889006590693952 + 0x11, 0xdf, 0xd4, 0x65, 0x5e, 0x79, 0x9e, 0x0a, //0x0000a410 .quad 765182433041899281 + 0x31, 0xa9, 0x84, 0xf3, 0x63, 0x91, 0x02, 0xc5, //0x0000a418 .quad -4250675239810979535 + 0xd5, 0x16, 0x4a, 0xff, 0xb5, 0x17, 0x46, 0x4d, //0x0000a420 .quad 5568164059729762005 + 0x7d, 0xd3, 0x65, 0xf0, 0xbc, 0x35, 0x43, 0xf6, //0x0000a428 .quad -701658031336336515 + 0x45, 0x4e, 0x8e, 0xbf, 0xd1, 0xce, 0x4b, 0x50, //0x0000a430 .quad 5785945546544795205 + 0x2e, 0xa4, 0x3f, 0x16, 0x96, 0x01, 0xea, 0x99, //0x0000a438 .quad -7356065297226292178 + 0xd6, 0xe1, 0x71, 0x2f, 0x86, 0xc2, 0x5e, 0xe4, //0x0000a440 .quad -1990940103673781802 + 0x39, 0x8d, 0xcf, 0x9b, 0xfb, 0x81, 0x64, 0xc0, //0x0000a448 .quad -4583395603105477319 + 0x4c, 0x5a, 0x4e, 0xbb, 0x27, 0x73, 0x76, 0x5d, //0x0000a450 .quad 6734696907262548556 + 0x88, 0x70, 0xc3, 0x82, 0x7a, 0xa2, 0x7d, 0xf0, //0x0000a458 .quad -1117558485454458744 + 0x6f, 0xf8, 0x10, 0xd5, 0xf8, 0x07, 0x6a, 0x3a, //0x0000a460 .quad 4209185567039092847 + 0x55, 0x26, 0xba, 0x91, 0x8c, 0x85, 0x4e, 0x96, //0x0000a468 .quad -7616003081050118571 + 0x8b, 0x36, 0x55, 0x0a, 0xf7, 0x89, 0x04, 0x89, //0x0000a470 .quad -8573576096483297653 + 0xea, 0xaf, 0x28, 0xb6, 0xef, 0x26, 0xe2, 0xbb, //0x0000a478 .quad -4908317832885260310 + 0x2e, 0x84, 0xea, 0xcc, 0x74, 0xac, 0x45, 0x2b, //0x0000a480 .quad 3118087934678041646 + 0xe5, 0xdb, 0xb2, 0xa3, 0xab, 0xb0, 0xda, 0xea, //0x0000a488 .quad -1523711272679187483 + 0x9d, 0x92, 0x12, 0x00, 0xc9, 0x8b, 0x0b, 0x3b, //0x0000a490 .quad 4254647968387469981 + 0x6f, 0xc9, 0x4f, 0x46, 0x6b, 0xae, 0xc8, 0x92, //0x0000a498 .quad -7869848573065574033 + 0x44, 0x37, 0x17, 0x40, 0xbb, 0x6e, 0xce, 0x09, //0x0000a4a0 .quad 706623942056949572 + 0xcb, 0xbb, 0xe3, 0x17, 0x06, 0xda, 0x7a, 0xb7, //0x0000a4a8 .quad -5225624697904579637 + 0x15, 0x05, 0x1d, 0x10, 0x6a, 0x0a, 0x42, 0xcc, //0x0000a4b0 .quad -3728406090856200939 + 0xbd, 0xaa, 0xdc, 0x9d, 0x87, 0x90, 0x59, 0xe5, //0x0000a4b8 .quad -1920344853953336643 + 0x2d, 0x23, 0x12, 0x4a, 0x82, 0x46, 0xa9, 0x9f, //0x0000a4c0 .quad -6941939825212513491 + 0xb6, 0xea, 0xa9, 0xc2, 0x54, 0xfa, 0x57, 0x8f, //0x0000a4c8 .quad -8117744561361917258 + 0xf9, 0xab, 0x96, 0xdc, 0x22, 0x98, 0x93, 0x47, //0x0000a4d0 .quad 5157633273766521849 + 0x64, 0x65, 0x54, 0xf3, 0xe9, 0xf8, 0x2d, 0xb3, //0x0000a4d8 .quad -5535494683275008668 + 0xf7, 0x56, 0xbc, 0x93, 0x2b, 0x7e, 0x78, 0x59, //0x0000a4e0 .quad 6447041592208152311 + 0xbd, 0x7e, 0x29, 0x70, 0x24, 0x77, 0xf9, 0xdf, //0x0000a4e8 .quad -2307682335666372931 + 0x5a, 0xb6, 0x55, 0x3c, 0xdb, 0x4e, 0xeb, 0x57, //0x0000a4f0 .quad 6335244004343789146 + 0x36, 0xef, 0x19, 0xc6, 0x76, 0xea, 0xfb, 0x8b, //0x0000a4f8 .quad -8359830487432564938 + 0xf1, 0x23, 0x6b, 0x0b, 0x92, 0x22, 0xe6, 0xed, //0x0000a500 .quad -1304317031425039375 + 0x03, 0x6b, 0xa0, 0x77, 0x14, 0xe5, 0xfa, 0xae, //0x0000a508 .quad -5838102090863318269 + 0xed, 0xec, 0x45, 0x8e, 0x36, 0xab, 0x5f, 0xe9, //0x0000a510 .quad -1630396289281299219 + 0xc4, 0x85, 0x88, 0x95, 0x59, 0x9e, 0xb9, 0xda, //0x0000a518 .quad -2685941595151759932 + 0x14, 0xb4, 0xeb, 0x18, 0x02, 0xcb, 0xdb, 0x11, //0x0000a520 .quad 1286845328412881940 + 0x9b, 0x53, 0x75, 0xfd, 0xf7, 0x02, 0xb4, 0x88, //0x0000a528 .quad -8596242524610931813 + 0x19, 0xa1, 0x26, 0x9f, 0xc2, 0xbd, 0x52, 0xd6, //0x0000a530 .quad -3003129357911285479 + 0x81, 0xa8, 0xd2, 0xfc, 0xb5, 0x03, 0xe1, 0xaa, //0x0000a538 .quad -6133617137336276863 + 0x5f, 0x49, 0xf0, 0x46, 0x33, 0x6d, 0xe7, 0x4b, //0x0000a540 .quad 5469460339465668959 + 0xa2, 0x52, 0x07, 0x7c, 0xa3, 0x44, 0x99, 0xd5, //0x0000a548 .quad -3055335403242958174 + 0xdb, 0x2d, 0x56, 0x0c, 0x40, 0xa4, 0x70, 0x6f, //0x0000a550 .quad 8030098730593431003 + 0xa5, 0x93, 0x84, 0x2d, 0xe6, 0xca, 0x7f, 0x85, //0x0000a558 .quad -8827113654667930715 + 0x52, 0xb9, 0x6b, 0x0f, 0x50, 0xcd, 0x4c, 0xcb, //0x0000a560 .quad -3797434642040374958 + 0x8e, 0xb8, 0xe5, 0xb8, 0x9f, 0xbd, 0xdf, 0xa6, //0x0000a568 .quad -6422206049907525490 + 0xa7, 0xa7, 0x46, 0x13, 0xa4, 0x00, 0x20, 0x7e, //0x0000a570 .quad 9088264752731695015 + 0xb2, 0x26, 0x1f, 0xa7, 0x07, 0xad, 0x97, 0xd0, //0x0000a578 .quad -3416071543957018958 + 0xc8, 0x28, 0x0c, 0x8c, 0x66, 0x00, 0xd4, 0x8e, //0x0000a580 .quad -8154892584824854328 + 0x2f, 0x78, 0x73, 0xc8, 0x24, 0xcc, 0x5e, 0x82, //0x0000a588 .quad -9052573742614218705 + 0xfa, 0x32, 0x0f, 0x2f, 0x80, 0x00, 0x89, 0x72, //0x0000a590 .quad 8253128342678483706 + 0x3b, 0x56, 0x90, 0xfa, 0x2d, 0x7f, 0xf6, 0xa2, //0x0000a598 .quad -6704031159840385477 + 0xb9, 0xff, 0xd2, 0x3a, 0xa0, 0x40, 0x2b, 0x4f, //0x0000a5a0 .quad 5704724409920716729 + 0xca, 0x6b, 0x34, 0x79, 0xf9, 0x1e, 0xb4, 0xcb, //0x0000a5a8 .quad -3768352931373093942 + 0xa8, 0xbf, 0x87, 0x49, 0xc8, 0x10, 0xf6, 0xe2, //0x0000a5b0 .quad -2092466524453879896 + 0xbc, 0x86, 0x81, 0xd7, 0xb7, 0x26, 0xa1, 0xfe, //0x0000a5b8 .quad -98755145788979524 + 0xc9, 0xd7, 0xf4, 0x2d, 0x7d, 0xca, 0xd9, 0x0d, //0x0000a5c0 .quad 998051431430019017 + 0x36, 0xf4, 0xb0, 0xe6, 0x32, 0xb8, 0x24, 0x9f, //0x0000a5c8 .quad -6979250993759194058 + 0xbb, 0x0d, 0x72, 0x79, 0x1c, 0x3d, 0x50, 0x91, //0x0000a5d0 .quad -7975807747567252037 + 0x43, 0x31, 0x5d, 0xa0, 0x3f, 0xe6, 0xed, 0xc6, //0x0000a5d8 .quad -4112377723771604669 + 0x2a, 0x91, 0xce, 0x97, 0x63, 0x4c, 0xa4, 0x75, //0x0000a5e0 .quad 8476984389250486570 + 0x94, 0x7d, 0x74, 0x88, 0xcf, 0x5f, 0xa9, 0xf8, //0x0000a5e8 .quad -528786136287117932 + 0xba, 0x1a, 0xe1, 0x3e, 0xbe, 0xaf, 0x86, 0xc9, //0x0000a5f0 .quad -3925256793573221702 + 0x7c, 0xce, 0x48, 0xb5, 0xe1, 0xdb, 0x69, 0x9b, //0x0000a5f8 .quad -7248020362820530564 + 0x68, 0x61, 0x99, 0xce, 0xad, 0x5b, 0xe8, 0xfb, //0x0000a600 .quad -294884973539139224 + 0x1b, 0x02, 0x9b, 0x22, 0xda, 0x52, 0x44, 0xc2, //0x0000a608 .quad -4448339435098275301 + 0xc3, 0xb9, 0x3f, 0x42, 0x99, 0x72, 0xe2, 0xfa, //0x0000a610 .quad -368606216923924029 + 0xa2, 0xc2, 0x41, 0xab, 0x90, 0x67, 0xd5, 0xf2, //0x0000a618 .quad -948738275445456222 + 0x1a, 0xd4, 0x67, 0xc9, 0x9f, 0x87, 0xcd, 0xdc, //0x0000a620 .quad -2536221894791146470 + 0xa5, 0x19, 0x09, 0x6b, 0xba, 0x60, 0xc5, 0x97, //0x0000a628 .quad -7510490449794491995 + 0x20, 0xc9, 0xc1, 0xbb, 0x87, 0xe9, 0x00, 0x54, //0x0000a630 .quad 6053094668365842720 + 0x0f, 0x60, 0xcb, 0x05, 0xe9, 0xb8, 0xb6, 0xbd, //0x0000a638 .quad -4776427043815727089 + 0x68, 0x3b, 0xb2, 0xaa, 0xe9, 0x23, 0x01, 0x29, //0x0000a640 .quad 2954682317029915496 + 0x13, 0x38, 0x3e, 0x47, 0x23, 0x67, 0x24, 0xed, //0x0000a648 .quad -1358847786342270957 + 0x21, 0x65, 0xaf, 0x0a, 0x72, 0xb6, 0xa0, 0xf9, //0x0000a650 .quad -459166561069996767 + 0x0b, 0xe3, 0x86, 0x0c, 0x76, 0xc0, 0x36, 0x94, //0x0000a658 .quad -7766808894105001205 + 0x69, 0x3e, 0x5b, 0x8d, 0x0e, 0xe4, 0x08, 0xf8, //0x0000a660 .quad -573958201337495959 + 0xce, 0x9b, 0xa8, 0x8f, 0x93, 0x70, 0x44, 0xb9, //0x0000a668 .quad -5096825099203863602 + 0x04, 0x0e, 0xb2, 0x30, 0x12, 0x1d, 0x0b, 0xb6, //0x0000a670 .quad -5329133770099257852 + 0xc2, 0xc2, 0x92, 0x73, 0xb8, 0x8c, 0x95, 0xe7, //0x0000a678 .quad -1759345355577441598 + 0xc2, 0x48, 0x6f, 0x5e, 0x2b, 0xf2, 0xc6, 0xb1, //0x0000a680 .quad -5636551615525730110 + 0xb9, 0xb9, 0x3b, 0x48, 0xf3, 0x77, 0xbd, 0x90, //0x0000a688 .quad -8017119874876982855 + 0xf3, 0x1a, 0x0b, 0x36, 0xb6, 0xae, 0x38, 0x1e, //0x0000a690 .quad 2177682517447613171 + 0x28, 0xa8, 0x4a, 0x1a, 0xf0, 0xd5, 0xec, 0xb4, //0x0000a698 .quad -5409713825168840664 + 0xb0, 0xe1, 0x8d, 0xc3, 0x63, 0xda, 0xc6, 0x25, //0x0000a6a0 .quad 2722103146809516464 + 0x32, 0x52, 0xdd, 0x20, 0x6c, 0x0b, 0x28, 0xe2, //0x0000a6a8 .quad -2150456263033662926 + 0x0e, 0xad, 0x38, 0x5a, 0x7e, 0x48, 0x9c, 0x57, //0x0000a6b0 .quad 6313000485183335694 + 0x5f, 0x53, 0x8a, 0x94, 0x23, 0x07, 0x59, 0x8d, //0x0000a6b8 .quad -8261564192037121185 + 0x51, 0xd8, 0xc6, 0xf0, 0x9d, 0x5a, 0x83, 0x2d, //0x0000a6c0 .quad 3279564588051781713 + 0x37, 0xe8, 0xac, 0x79, 0xec, 0x48, 0xaf, 0xb0, //0x0000a6c8 .quad -5715269221619013577 + 0x65, 0x8e, 0xf8, 0x6c, 0x45, 0x31, 0xe4, 0xf8, //0x0000a6d0 .quad -512230283362660763 + 0x44, 0x22, 0x18, 0x98, 0x27, 0x1b, 0xdb, 0xdc, //0x0000a6d8 .quad -2532400508596379068 + 0xff, 0x58, 0x1b, 0x64, 0xcb, 0x9e, 0x8e, 0x1b, //0x0000a6e0 .quad 1985699082112030975 + 0x6b, 0x15, 0x0f, 0xbf, 0xf8, 0xf0, 0x08, 0x8a, //0x0000a6e8 .quad -8500279345513818773 + 0x3f, 0x2f, 0x22, 0x3d, 0x7e, 0x46, 0x72, 0xe2, //0x0000a6f0 .quad -2129562165787349185 + 0xc5, 0xda, 0xd2, 0xee, 0x36, 0x2d, 0x8b, 0xac, //0x0000a6f8 .quad -6013663163464885563 + 0x0f, 0xbb, 0x6a, 0xcc, 0x1d, 0xd8, 0x0e, 0x5b, //0x0000a700 .quad 6561419329620589327 + 0x77, 0x91, 0x87, 0xaa, 0x84, 0xf8, 0xad, 0xd7, //0x0000a708 .quad -2905392935903719049 + 0xe9, 0xb4, 0xc2, 0x9f, 0x12, 0x47, 0xe9, 0x98, //0x0000a710 .quad -7428327965055601431 + 0xea, 0xba, 0x94, 0xea, 0x52, 0xbb, 0xcc, 0x86, //0x0000a718 .quad -8733399612580906262 + 0x24, 0x62, 0xb3, 0x47, 0xd7, 0x98, 0x23, 0x3f, //0x0000a720 .quad 4549648098962661924 + 0xa5, 0xe9, 0x39, 0xa5, 0x27, 0xea, 0x7f, 0xa8, //0x0000a728 .quad -6305063497298744923 + 0xad, 0x3a, 0xa0, 0x19, 0x0d, 0x7f, 0xec, 0x8e, //0x0000a730 .quad -8147997931578836307 + 0x0e, 0x64, 0x88, 0x8e, 0xb1, 0xe4, 0x9f, 0xd2, //0x0000a738 .quad -3269643353196043250 + 0xac, 0x24, 0x04, 0x30, 0x68, 0xcf, 0x53, 0x19, //0x0000a740 .quad 1825030320404309164 + 0x89, 0x3e, 0x15, 0xf9, 0xee, 0xee, 0xa3, 0x83, //0x0000a748 .quad -8961056123388608887 + 0xd7, 0x2d, 0x05, 0x3c, 0x42, 0xc3, 0xa8, 0x5f, //0x0000a750 .quad 6892973918932774359 + 0x2b, 0x8e, 0x5a, 0xb7, 0xaa, 0xea, 0x8c, 0xa4, //0x0000a758 .quad -6589634135808373205 + 0x4d, 0x79, 0x06, 0xcb, 0x12, 0xf4, 0x92, 0x37, //0x0000a760 .quad 4004531380238580045 + 0xb6, 0x31, 0x31, 0x65, 0x55, 0x25, 0xb0, 0xcd, //0x0000a768 .quad -3625356651333078602 + 0xd0, 0x0b, 0xe4, 0xbe, 0x8b, 0xd8, 0xbb, 0xe2, //0x0000a770 .quad -2108853905778275376 + 0x11, 0xbf, 0x3e, 0x5f, 0x55, 0x17, 0x8e, 0x80, //0x0000a778 .quad -9183376934724255983 + 0xc4, 0x0e, 0x9d, 0xae, 0xae, 0xce, 0x6a, 0x5b, //0x0000a780 .quad 6587304654631931588 + 0xd6, 0x6e, 0x0e, 0xb7, 0x2a, 0x9d, 0xb1, 0xa0, //0x0000a788 .quad -6867535149977932074 + 0x75, 0x52, 0x44, 0x5a, 0x5a, 0x82, 0x45, 0xf2, //0x0000a790 .quad -989241218564861323 + 0x8b, 0x0a, 0xd2, 0x64, 0x75, 0x04, 0xde, 0xc8, //0x0000a798 .quad -3972732919045027189 + 0x12, 0x67, 0xd5, 0xf0, 0xf0, 0xe2, 0xd6, 0xee, //0x0000a7a0 .quad -1236551523206076654 + 0x2e, 0x8d, 0x06, 0xbe, 0x92, 0x85, 0x15, 0xfb, //0x0000a7a8 .quad -354230130378896082 + 0x6b, 0x60, 0x85, 0x96, 0xd6, 0x4d, 0x46, 0x55, //0x0000a7b0 .quad 6144684325637283947 + 0x3d, 0x18, 0xc4, 0xb6, 0x7b, 0x73, 0xed, 0x9c, //0x0000a7b8 .quad -7138922859127891907 + 0x86, 0xb8, 0x26, 0x3c, 0x4c, 0xe1, 0x97, 0xaa, //0x0000a7c0 .quad -6154202648235558778 + 0x4c, 0x1e, 0x75, 0xa4, 0x5a, 0xd0, 0x28, 0xc4, //0x0000a7c8 .quad -4311967555482476980 + 0xa8, 0x66, 0x30, 0x4b, 0x9f, 0xd9, 0x3d, 0xd5, //0x0000a7d0 .quad -3081067291867060568 + 0xdf, 0x65, 0x92, 0x4d, 0x71, 0x04, 0x33, 0xf5, //0x0000a7d8 .quad -778273425925708321 + 0x29, 0x40, 0xfe, 0x8e, 0x03, 0xa8, 0x46, 0xe5, //0x0000a7e0 .quad -1925667057416912855 + 0xab, 0x7f, 0x7b, 0xd0, 0xc6, 0xe2, 0x3f, 0x99, //0x0000a7e8 .quad -7403949918844649557 + 0x33, 0xd0, 0xbd, 0x72, 0x04, 0x52, 0x98, 0xde, //0x0000a7f0 .quad -2407083821771141069 + 0x96, 0x5f, 0x9a, 0x84, 0x78, 0xdb, 0x8f, 0xbf, //0x0000a7f8 .quad -4643251380128424042 + 0x40, 0x44, 0x6d, 0x8f, 0x85, 0x66, 0x3e, 0x96, //0x0000a800 .quad -7620540795641314240 + 0x7c, 0xf7, 0xc0, 0xa5, 0x56, 0xd2, 0x73, 0xef, //0x0000a808 .quad -1192378206733142148 + 0xa8, 0x4a, 0xa4, 0x79, 0x13, 0x00, 0xe7, 0xdd, //0x0000a810 .quad -2456994988062127448 + 0xad, 0x9a, 0x98, 0x27, 0x76, 0x63, 0xa8, 0x95, //0x0000a818 .quad -7662765406849295699 + 0x52, 0x5d, 0x0d, 0x58, 0x18, 0xc0, 0x60, 0x55, //0x0000a820 .quad 6152128301777116498 + 0x59, 0xc1, 0x7e, 0xb1, 0x53, 0x7c, 0x12, 0xbb, //0x0000a828 .quad -4966770740134231719 + 0xa6, 0xb4, 0x10, 0x6e, 0x1e, 0xf0, 0xb8, 0xaa, //0x0000a830 .quad -6144897678060768090 + 0xaf, 0x71, 0xde, 0x9d, 0x68, 0x1b, 0xd7, 0xe9, //0x0000a838 .quad -1596777406740401745 + 0xe8, 0x70, 0xca, 0x04, 0x13, 0x96, 0xb3, 0xca, //0x0000a840 .quad -3840561048787980056 + 0x0d, 0x07, 0xab, 0x62, 0x21, 0x71, 0x26, 0x92, //0x0000a848 .quad -7915514906853832947 + 0x22, 0x0d, 0xfd, 0xc5, 0x97, 0x7b, 0x60, 0x3d, //0x0000a850 .quad 4422670725869800738 + 0xd1, 0xc8, 0x55, 0xbb, 0x69, 0x0d, 0xb0, 0xb6, //0x0000a858 .quad -5282707615139903279 + 0x6a, 0x50, 0x7c, 0xb7, 0x7d, 0x9a, 0xb8, 0x8c, //0x0000a860 .quad -8306719647944912790 + 0x05, 0x3b, 0x2b, 0x2a, 0xc4, 0x10, 0x5c, 0xe4, //0x0000a868 .quad -1991698500497491195 + 0x42, 0xb2, 0xad, 0x92, 0x8e, 0x60, 0xf3, 0x77, //0x0000a870 .quad 8643358275316593218 + 0xe3, 0x04, 0x5b, 0x9a, 0x7a, 0x8a, 0xb9, 0x8e, //0x0000a878 .quad -8162340590452013853 + 0xd3, 0x1e, 0x59, 0x37, 0xb2, 0x38, 0xf0, 0x55, //0x0000a880 .quad 6192511825718353619 + 0x1c, 0xc6, 0xf1, 0x40, 0x19, 0xed, 0x67, 0xb2, //0x0000a888 .quad -5591239719637629412 + 0x88, 0x66, 0x2f, 0xc5, 0xde, 0x46, 0x6c, 0x6b, //0x0000a890 .quad 7740639782147942024 + 0xa3, 0x37, 0x2e, 0x91, 0x5f, 0xe8, 0x01, 0xdf, //0x0000a898 .quad -2377363631119648861 + 0x15, 0xa0, 0x3d, 0x3b, 0x4b, 0xac, 0x23, 0x23, //0x0000a8a0 .quad 2532056854628769813 + 0xc6, 0xe2, 0xbc, 0xba, 0x3b, 0x31, 0x61, 0x8b, //0x0000a8a8 .quad -8403381297090862394 + 0x1a, 0x08, 0x0d, 0x0a, 0x5e, 0x97, 0xec, 0xab, //0x0000a8b0 .quad -6058300968568813542 + 0x77, 0x1b, 0x6c, 0xa9, 0x8a, 0x7d, 0x39, 0xae, //0x0000a8b8 .quad -5892540602936190089 + 0x21, 0x4a, 0x90, 0x8c, 0x35, 0xbd, 0xe7, 0x96, //0x0000a8c0 .quad -7572876210711016927 + 0x55, 0x22, 0xc7, 0x53, 0xed, 0xdc, 0xc7, 0xd9, //0x0000a8c8 .quad -2753989735242849707 + 0x54, 0x2e, 0xda, 0x77, 0x41, 0xd6, 0x50, 0x7e, //0x0000a8d0 .quad 9102010423587778132 + 0x75, 0x75, 0x5c, 0x54, 0x14, 0xea, 0x1c, 0x88, //0x0000a8d8 .quad -8638772612167862923 + 0xe9, 0xb9, 0xd0, 0xd5, 0xd1, 0x0b, 0xe5, 0xdd, //0x0000a8e0 .quad -2457545025797441047 + 0xd2, 0x92, 0x73, 0x69, 0x99, 0x24, 0x24, 0xaa, //0x0000a8e8 .quad -6186779746782440750 + 0x64, 0xe8, 0x44, 0x4b, 0xc6, 0x4e, 0x5e, 0x95, //0x0000a8f0 .quad -7683617300674189212 + 0x87, 0x77, 0xd0, 0xc3, 0xbf, 0x2d, 0xad, 0xd4, //0x0000a8f8 .quad -3121788665050663033 + 0x3e, 0x11, 0x0b, 0xef, 0x3b, 0xf1, 0x5a, 0xbd, //0x0000a900 .quad -4802260812921368258 + 0xb4, 0x4a, 0x62, 0xda, 0x97, 0x3c, 0xec, 0x84, //0x0000a908 .quad -8868646943297746252 + 0x8e, 0xd5, 0xcd, 0xea, 0x8a, 0xad, 0xb1, 0xec, //0x0000a910 .quad -1391139997724322418 + 0x61, 0xdd, 0xfa, 0xd0, 0xbd, 0x4b, 0x27, 0xa6, //0x0000a918 .quad -6474122660694794911 + 0xf2, 0x4a, 0x81, 0xa5, 0xed, 0x18, 0xde, 0x67, //0x0000a920 .quad 7484447039699372786 + 0xba, 0x94, 0x39, 0x45, 0xad, 0x1e, 0xb1, 0xcf, //0x0000a928 .quad -3480967307441105734 + 0xd7, 0xce, 0x70, 0x87, 0x94, 0xcf, 0xea, 0x80, //0x0000a930 .quad -9157278655470055721 + 0xf4, 0xfc, 0x43, 0x4b, 0x2c, 0xb3, 0xce, 0x81, //0x0000a938 .quad -9093133594791772940 + 0x8d, 0x02, 0x4d, 0xa9, 0x79, 0x83, 0x25, 0xa1, //0x0000a940 .quad -6834912300910181747 + 0x31, 0xfc, 0x14, 0x5e, 0xf7, 0x5f, 0x42, 0xa2, //0x0000a948 .quad -6754730975062328271 + 0x30, 0x43, 0xa0, 0x13, 0x58, 0xe4, 0x6e, 0x09, //0x0000a950 .quad 679731660717048624 + 0x3e, 0x3b, 0x9a, 0x35, 0xf5, 0xf7, 0xd2, 0xca, //0x0000a958 .quad -3831727700400522434 + 0xfc, 0x53, 0x88, 0x18, 0x6e, 0x9d, 0xca, 0x8b, //0x0000a960 .quad -8373707460958465028 + 0x0d, 0xca, 0x00, 0x83, 0xf2, 0xb5, 0x87, 0xfd, //0x0000a968 .quad -177973607073265139 + 0x7d, 0x34, 0x55, 0xcf, 0x64, 0xa2, 0x5e, 0x77, //0x0000a970 .quad 8601490892183123069 + 0x48, 0x7e, 0xe0, 0x91, 0xb7, 0xd1, 0x74, 0x9e, //0x0000a978 .quad -7028762532061872568 + 0x9d, 0x81, 0x2a, 0x03, 0xfe, 0x4a, 0x36, 0x95, //0x0000a980 .quad -7694880458480647779 + 0xda, 0x9d, 0x58, 0x76, 0x25, 0x06, 0x12, 0xc6, //0x0000a988 .quad -4174267146649952806 + 0x04, 0x22, 0xf5, 0x83, 0xbd, 0xdd, 0x83, 0x3a, //0x0000a990 .quad 4216457482181353988 + 0x51, 0xc5, 0xee, 0xd3, 0xae, 0x87, 0x96, 0xf7, //0x0000a998 .quad -606147914885053103 + 0x42, 0x35, 0x79, 0x72, 0x96, 0x6a, 0x92, 0xc4, //0x0000a9a0 .quad -4282243101277735614 + 0x52, 0x3b, 0x75, 0x44, 0xcd, 0x14, 0xbe, 0x9a, //0x0000a9a8 .quad -7296371474444240046 + 0x93, 0x82, 0x17, 0x0f, 0x3c, 0x05, 0xb7, 0x75, //0x0000a9b0 .quad 8482254178684994195 + 0x27, 0x8a, 0x92, 0x95, 0x00, 0x9a, 0x6d, 0xc1, //0x0000a9b8 .quad -4508778324627912153 + 0x38, 0x63, 0xdd, 0x12, 0x8b, 0xc6, 0x24, 0x53, //0x0000a9c0 .quad 5991131704928854840 + 0xb1, 0x2c, 0xf7, 0xba, 0x80, 0x00, 0xc9, 0xf1, //0x0000a9c8 .quad -1024286887357502287 + 0x03, 0x5e, 0xca, 0xeb, 0x16, 0xfc, 0xf6, 0xd3, //0x0000a9d0 .quad -3173071712060547581 + 0xee, 0x7b, 0xda, 0x74, 0x50, 0xa0, 0x1d, 0x97, //0x0000a9d8 .quad -7557708332239520786 + 0x84, 0xf5, 0xbc, 0xa6, 0x1c, 0xbb, 0xf4, 0x88, //0x0000a9e0 .quad -8578025658503072380 + 0xea, 0x1a, 0x11, 0x92, 0x64, 0x08, 0xe5, 0xbc, //0x0000a9e8 .quad -4835449396872013078 + 0xe5, 0x32, 0x6c, 0xd0, 0xe3, 0xe9, 0x31, 0x2b, //0x0000a9f0 .quad 3112525982153323237 + 0xa5, 0x61, 0x95, 0xb6, 0x7d, 0x4a, 0x1e, 0xec, //0x0000a9f8 .quad -1432625727662628443 + 0xcf, 0x9f, 0x43, 0x62, 0x2e, 0x32, 0xff, 0x3a, //0x0000aa00 .quad 4251171748059520975 + 0x07, 0x5d, 0x1d, 0x92, 0x8e, 0xee, 0x92, 0x93, //0x0000aa08 .quad -7812920107430224633 + 0xc2, 0x87, 0xd4, 0xfa, 0xb9, 0xfe, 0xbe, 0x09, //0x0000aa10 .quad 702278666647013314 + 0x49, 0xb4, 0xa4, 0x36, 0x32, 0xaa, 0x77, 0xb8, //0x0000aa18 .quad -5154464115860392887 + 0xb3, 0xa9, 0x89, 0x79, 0x68, 0xbe, 0x2e, 0x4c, //0x0000aa20 .quad 5489534351736154547 + 0x5b, 0xe1, 0x4d, 0xc4, 0xbe, 0x94, 0x95, 0xe6, //0x0000aa28 .quad -1831394126398103205 + 0x10, 0x0a, 0xf6, 0x4b, 0x01, 0x37, 0x9d, 0x0f, //0x0000aa30 .quad 1125115960621402640 + 0xd9, 0xac, 0xb0, 0x3a, 0xf7, 0x7c, 0x1d, 0x90, //0x0000aa38 .quad -8062150356639896359 + 0x94, 0x8c, 0xf3, 0x9e, 0xc1, 0x84, 0x84, 0x53, //0x0000aa40 .quad 6018080969204141204 + 0x0f, 0xd8, 0x5c, 0x09, 0x35, 0xdc, 0x24, 0xb4, //0x0000aa48 .quad -5466001927372482545 + 0xb9, 0x6f, 0xb0, 0x06, 0xf2, 0xa5, 0x65, 0x28, //0x0000aa50 .quad 2910915193077788601 + 0x13, 0x0e, 0xb4, 0x4b, 0x42, 0x13, 0x2e, 0xe1, //0x0000aa58 .quad -2220816390788215277 + 0xd3, 0x45, 0x2e, 0x44, 0xb7, 0x87, 0x3f, 0xf9, //0x0000aa60 .quad -486521013540076077 + 0xcb, 0x88, 0x50, 0x6f, 0x09, 0xcc, 0xbc, 0x8c, //0x0000aa68 .quad -8305539271883716405 + 0x48, 0xd7, 0x39, 0x15, 0xa5, 0x69, 0x8f, 0xf7, //0x0000aa70 .quad -608151266925095096 + 0xfe, 0xaa, 0x24, 0xcb, 0x0b, 0xff, 0xeb, 0xaf, //0x0000aa78 .quad -5770238071427257602 + 0x1b, 0x4d, 0x88, 0x5a, 0x0e, 0x44, 0x73, 0xb5, //0x0000aa80 .quad -5371875102083756773 + 0xbe, 0xd5, 0xed, 0xbd, 0xce, 0xfe, 0xe6, 0xdb, //0x0000aa88 .quad -2601111570856684098 + 0x30, 0x30, 0x95, 0xf8, 0x88, 0x0a, 0x68, 0x31, //0x0000aa90 .quad 3560107088838733872 + 0x97, 0xa5, 0xb4, 0x36, 0x41, 0x5f, 0x70, 0x89, //0x0000aa98 .quad -8543223759426509417 + 0x3d, 0x7c, 0xba, 0x36, 0x2b, 0x0d, 0xc2, 0xfd, //0x0000aaa0 .quad -161552157378970563 + 0xfc, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x0000aaa8 .quad -6067343680855748868 + 0x4c, 0x1b, 0x69, 0x04, 0x76, 0x90, 0x32, 0x3d, //0x0000aab0 .quad 4409745821703674700 + 0xbc, 0x42, 0x7a, 0xe5, 0xd5, 0x94, 0xbf, 0xd6, //0x0000aab8 .quad -2972493582642298180 + 0x0f, 0xb1, 0xc1, 0xc2, 0x49, 0x9a, 0x3f, 0xa6, //0x0000aac0 .quad -6467280898289979121 + 0xb5, 0x69, 0x6c, 0xaf, 0x05, 0xbd, 0x37, 0x86, //0x0000aac8 .quad -8775337516792518219 + 0x53, 0x1d, 0x72, 0x33, 0xdc, 0x80, 0xcf, 0x0f, //0x0000aad0 .quad 1139270913992301907 + 0x23, 0x84, 0x47, 0x1b, 0x47, 0xac, 0xc5, 0xa7, //0x0000aad8 .quad -6357485877563259869 + 0xa8, 0xa4, 0x4e, 0x40, 0x13, 0x61, 0xc3, 0xd3, //0x0000aae0 .quad -3187597375937010520 + 0x2b, 0x65, 0x19, 0xe2, 0x58, 0x17, 0xb7, 0xd1, //0x0000aae8 .quad -3335171328526686933 + 0xe9, 0x26, 0x31, 0x08, 0xac, 0x1c, 0x5a, 0x64, //0x0000aaf0 .quad 7231123676894144233 + 0x3b, 0xdf, 0x4f, 0x8d, 0x97, 0x6e, 0x12, 0x83, //0x0000aaf8 .quad -9002011107970261189 + 0xa3, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, 0x70, 0x3d, //0x0000ab00 .quad 4427218577690292387 + 0x0a, 0xd7, 0xa3, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, //0x0000ab08 .quad -6640827866535438582 + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x0000ab10 QUAD $0xcccccccccccccccc; QUAD $0xcccccccccccccccc // .space 16, '\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ab20 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x0000ab28 .quad -9223372036854775808 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ab30 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, //0x0000ab38 .quad -6917529027641081856 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ab40 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, //0x0000ab48 .quad -4035225266123964416 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ab50 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, //0x0000ab58 .quad -432345564227567616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ab60 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x9c, //0x0000ab68 .quad -7187745005283311616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ab70 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xc3, //0x0000ab78 .quad -4372995238176751616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ab80 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xf4, //0x0000ab88 .quad -854558029293551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ab90 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x98, //0x0000ab98 .quad -7451627795949551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000aba0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xbc, 0xbe, //0x0000aba8 .quad -4702848726509551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000abb0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6b, 0xee, //0x0000abb8 .quad -1266874889709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000abc0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x02, 0x95, //0x0000abc8 .quad -7709325833709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000abd0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x40, 0xb7, 0x43, 0xba, //0x0000abd8 .quad -5024971273709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000abe0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0xd4, 0xe8, //0x0000abe8 .quad -1669528073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000abf0 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xe7, 0x84, 0x91, //0x0000abf8 .quad -7960984073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ac00 .quad 0 + 0x00, 0x00, 0x00, 0x80, 0xf4, 0x20, 0xe6, 0xb5, //0x0000ac08 .quad -5339544073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ac10 .quad 0 + 0x00, 0x00, 0x00, 0xa0, 0x31, 0xa9, 0x5f, 0xe3, //0x0000ac18 .quad -2062744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ac20 .quad 0 + 0x00, 0x00, 0x00, 0x04, 0xbf, 0xc9, 0x1b, 0x8e, //0x0000ac28 .quad -8206744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ac30 .quad 0 + 0x00, 0x00, 0x00, 0xc5, 0x2e, 0xbc, 0xa2, 0xb1, //0x0000ac38 .quad -5646744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ac40 .quad 0 + 0x00, 0x00, 0x40, 0x76, 0x3a, 0x6b, 0x0b, 0xde, //0x0000ac48 .quad -2446744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ac50 .quad 0 + 0x00, 0x00, 0xe8, 0x89, 0x04, 0x23, 0xc7, 0x8a, //0x0000ac58 .quad -8446744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ac60 .quad 0 + 0x00, 0x00, 0x62, 0xac, 0xc5, 0xeb, 0x78, 0xad, //0x0000ac68 .quad -5946744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ac70 .quad 0 + 0x00, 0x80, 0x7a, 0x17, 0xb7, 0x26, 0xd7, 0xd8, //0x0000ac78 .quad -2821744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ac80 .quad 0 + 0x00, 0x90, 0xac, 0x6e, 0x32, 0x78, 0x86, 0x87, //0x0000ac88 .quad -8681119073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ac90 .quad 0 + 0x00, 0xb4, 0x57, 0x0a, 0x3f, 0x16, 0x68, 0xa9, //0x0000ac98 .quad -6239712823709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000aca0 .quad 0 + 0x00, 0xa1, 0xed, 0xcc, 0xce, 0x1b, 0xc2, 0xd3, //0x0000aca8 .quad -3187955011209551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000acb0 .quad 0 + 0xa0, 0x84, 0x14, 0x40, 0x61, 0x51, 0x59, 0x84, //0x0000acb8 .quad -8910000909647051616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000acc0 .quad 0 + 0xc8, 0xa5, 0x19, 0x90, 0xb9, 0xa5, 0x6f, 0xa5, //0x0000acc8 .quad -6525815118631426616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000acd0 .quad 0 + 0x3a, 0x0f, 0x20, 0xf4, 0x27, 0x8f, 0xcb, 0xce, //0x0000acd8 .quad -3545582879861895366 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, //0x0000ace0 .quad 4611686018427387904 + 0x84, 0x09, 0x94, 0xf8, 0x78, 0x39, 0x3f, 0x81, //0x0000ace8 .quad -9133518327554766460 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, //0x0000acf0 .quad 5764607523034234880 + 0xe5, 0x0b, 0xb9, 0x36, 0xd7, 0x07, 0x8f, 0xa1, //0x0000acf8 .quad -6805211891016070171 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, //0x0000ad00 .quad -6629298651489370112 + 0xde, 0x4e, 0x67, 0x04, 0xcd, 0xc9, 0xf2, 0xc9, //0x0000ad08 .quad -3894828845342699810 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, //0x0000ad10 .quad 5548434740920451072 + 0x96, 0x22, 0x81, 0x45, 0x40, 0x7c, 0x6f, 0xfc, //0x0000ad18 .quad -256850038250986858 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf0, //0x0000ad20 .quad -1143914305352105984 + 0x9d, 0xb5, 0x70, 0x2b, 0xa8, 0xad, 0xc5, 0x9d, //0x0000ad28 .quad -7078060301547948643 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, //0x0000ad30 .quad 7793479155164643328 + 0x05, 0xe3, 0x4c, 0x36, 0x12, 0x19, 0x37, 0xc5, //0x0000ad38 .quad -4235889358507547899 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0xc7, //0x0000ad40 .quad -4093209111326359552 + 0xc6, 0x1b, 0xe0, 0xc3, 0x56, 0xdf, 0x84, 0xf6, //0x0000ad48 .quad -683175679707046970 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7f, 0x3c, //0x0000ad50 .quad 4359273333062107136 + 0x5c, 0x11, 0x6c, 0x3a, 0x96, 0x0b, 0x13, 0x9a, //0x0000ad58 .quad -7344513827457986212 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9f, 0x4b, //0x0000ad60 .quad 5449091666327633920 + 0xb3, 0x15, 0x07, 0xc9, 0x7b, 0xce, 0x97, 0xc0, //0x0000ad68 .quad -4568956265895094861 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x86, 0x1e, //0x0000ad70 .quad 2199678564482154496 + 0x20, 0xdb, 0x48, 0xbb, 0x1a, 0xc2, 0xbd, 0xf0, //0x0000ad78 .quad -1099509313941480672 + 0x00, 0x00, 0x00, 0x00, 0x80, 0x44, 0x14, 0x13, //0x0000ad80 .quad 1374799102801346560 + 0xf4, 0x88, 0x0d, 0xb5, 0x50, 0x99, 0x76, 0x96, //0x0000ad88 .quad -7604722348854507276 + 0x00, 0x00, 0x00, 0x00, 0xa0, 0x55, 0xd9, 0x17, //0x0000ad90 .quad 1718498878501683200 + 0x31, 0xeb, 0x50, 0xe2, 0xa4, 0x3f, 0x14, 0xbc, //0x0000ad98 .quad -4894216917640746191 + 0x00, 0x00, 0x00, 0x00, 0x08, 0xab, 0xcf, 0x5d, //0x0000ada0 .quad 6759809616554491904 + 0xfd, 0x25, 0xe5, 0x1a, 0x8e, 0x4f, 0x19, 0xeb, //0x0000ada8 .quad -1506085128623544835 + 0x00, 0x00, 0x00, 0x00, 0xe5, 0xca, 0xa1, 0x5a, //0x0000adb0 .quad 6530724019560251392 + 0xbe, 0x37, 0xcf, 0xd0, 0xb8, 0xd1, 0xef, 0x92, //0x0000adb8 .quad -7858832233030797378 + 0x00, 0x00, 0x00, 0x40, 0x9e, 0x3d, 0x4a, 0xf1, //0x0000adc0 .quad -1059967012404461568 + 0xad, 0x05, 0x03, 0x05, 0x27, 0xc6, 0xab, 0xb7, //0x0000adc8 .quad -5211854272861108819 + 0x00, 0x00, 0x00, 0xd0, 0x05, 0xcd, 0x9c, 0x6d, //0x0000add0 .quad 7898413271349198848 + 0x19, 0xc7, 0x43, 0xc6, 0xb0, 0xb7, 0x96, 0xe5, //0x0000add8 .quad -1903131822648998119 + 0x00, 0x00, 0x00, 0xa2, 0x23, 0x00, 0x82, 0xe4, //0x0000ade0 .quad -1981020733047832576 + 0x6f, 0x5c, 0xea, 0x7b, 0xce, 0x32, 0x7e, 0x8f, //0x0000ade8 .quad -8106986416796705681 + 0x00, 0x00, 0x80, 0x8a, 0x2c, 0x80, 0xa2, 0xdd, //0x0000adf0 .quad -2476275916309790720 + 0x8b, 0xf3, 0xe4, 0x1a, 0x82, 0xbf, 0x5d, 0xb3, //0x0000adf8 .quad -5522047002568494197 + 0x00, 0x00, 0x20, 0xad, 0x37, 0x20, 0x0b, 0xd5, //0x0000ae00 .quad -3095344895387238400 + 0x6e, 0x30, 0x9e, 0xa1, 0x62, 0x2f, 0x35, 0xe0, //0x0000ae08 .quad -2290872734783229842 + 0x00, 0x00, 0x34, 0xcc, 0x22, 0xf4, 0x26, 0x45, //0x0000ae10 .quad 4982938468024057856 + 0x45, 0xde, 0x02, 0xa5, 0x9d, 0x3d, 0x21, 0x8c, //0x0000ae18 .quad -8349324486880600507 + 0x00, 0x00, 0x41, 0x7f, 0x2b, 0xb1, 0x70, 0x96, //0x0000ae20 .quad -7606384970252091392 + 0xd6, 0x95, 0x43, 0x0e, 0x05, 0x8d, 0x29, 0xaf, //0x0000ae28 .quad -5824969590173362730 + 0x00, 0x40, 0x11, 0x5f, 0x76, 0xdd, 0x0c, 0x3c, //0x0000ae30 .quad 4327076842467049472 + 0x4c, 0x7b, 0xd4, 0x51, 0x46, 0xf0, 0xf3, 0xda, //0x0000ae38 .quad -2669525969289315508 + 0x00, 0xc8, 0x6a, 0xfb, 0x69, 0x0a, 0x88, 0xa5, //0x0000ae40 .quad -6518949010312869888 + 0x0f, 0xcd, 0x24, 0xf3, 0x2b, 0x76, 0xd8, 0x88, //0x0000ae48 .quad -8585982758446904049 + 0x00, 0x7a, 0x45, 0x7a, 0x04, 0x0d, 0xea, 0x8e, //0x0000ae50 .quad -8148686262891087360 + 0x53, 0x00, 0xee, 0xef, 0xb6, 0x93, 0x0e, 0xab, //0x0000ae58 .quad -6120792429631242157 + 0x80, 0xd8, 0xd6, 0x98, 0x45, 0x90, 0xa4, 0x72, //0x0000ae60 .quad 8260886245095692416 + 0x68, 0x80, 0xe9, 0xab, 0xa4, 0x38, 0xd2, 0xd5, //0x0000ae68 .quad -3039304518611664792 + 0x50, 0x47, 0x86, 0x7f, 0x2b, 0xda, 0xa6, 0x47, //0x0000ae70 .quad 5163053903184807760 + 0x41, 0xf0, 0x71, 0xeb, 0x66, 0x63, 0xa3, 0x85, //0x0000ae78 .quad -8817094351773372351 + 0x24, 0xd9, 0x67, 0x5f, 0xb6, 0x90, 0x90, 0x99, //0x0000ae80 .quad -7381240676301154012 + 0x51, 0x6c, 0x4e, 0xa6, 0x40, 0x3c, 0x0c, 0xa7, //0x0000ae88 .quad -6409681921289327535 + 0x6d, 0xcf, 0x41, 0xf7, 0xe3, 0xb4, 0xf4, 0xff, //0x0000ae90 .quad -3178808521666707 + 0x65, 0x07, 0xe2, 0xcf, 0x50, 0x4b, 0xcf, 0xd0, //0x0000ae98 .quad -3400416383184271515 + 0xa4, 0x21, 0x89, 0x7a, 0x0e, 0xf1, 0xf8, 0xbf, //0x0000aea0 .quad -4613672773753429596 + 0x9f, 0x44, 0xed, 0x81, 0x12, 0x8f, 0x81, 0x82, //0x0000aea8 .quad -9042789267131251553 + 0x0d, 0x6a, 0x2b, 0x19, 0x52, 0x2d, 0xf7, 0xaf, //0x0000aeb0 .quad -5767090967191786995 + 0xc7, 0x95, 0x68, 0x22, 0xd7, 0xf2, 0x21, 0xa3, //0x0000aeb8 .quad -6691800565486676537 + 0x90, 0x44, 0x76, 0x9f, 0xa6, 0xf8, 0xf4, 0x9b, //0x0000aec0 .quad -7208863708989733744 + 0x39, 0xbb, 0x02, 0xeb, 0x8c, 0x6f, 0xea, 0xcb, //0x0000aec8 .quad -3753064688430957767 + 0xb4, 0xd5, 0x53, 0x47, 0xd0, 0x36, 0xf2, 0x02, //0x0000aed0 .quad 212292400617608628 + 0x08, 0x6a, 0xc3, 0x25, 0x70, 0x0b, 0xe5, 0xfe, //0x0000aed8 .quad -79644842111309304 + 0x90, 0x65, 0x94, 0x2c, 0x42, 0x62, 0xd7, 0x01, //0x0000aee0 .quad 132682750386005392 + 0x45, 0x22, 0x9a, 0x17, 0x26, 0x27, 0x4f, 0x9f, //0x0000aee8 .quad -6967307053960650171 + 0xf5, 0x7e, 0xb9, 0xb7, 0xd2, 0x3a, 0x4d, 0x42, //0x0000aef0 .quad 4777539456409894645 + 0xd6, 0xaa, 0x80, 0x9d, 0xef, 0xf0, 0x22, 0xc7, //0x0000aef8 .quad -4097447799023424810 + 0xb2, 0xde, 0xa7, 0x65, 0x87, 0x89, 0xe0, 0xd2, //0x0000af00 .quad -3251447716342407502 + 0x8b, 0xd5, 0xe0, 0x84, 0x2b, 0xad, 0xeb, 0xf8, //0x0000af08 .quad -510123730351893109 + 0x2f, 0xeb, 0x88, 0x9f, 0xf4, 0x55, 0xcc, 0x63, //0x0000af10 .quad 7191217214140771119 + 0x77, 0x85, 0x0c, 0x33, 0x3b, 0x4c, 0x93, 0x9b, //0x0000af18 .quad -7236356359111015049 + 0xfb, 0x25, 0x6b, 0xc7, 0x71, 0x6b, 0xbf, 0x3c, //0x0000af20 .quad 4377335499248575995 + 0xd5, 0xa6, 0xcf, 0xff, 0x49, 0x1f, 0x78, 0xc2, //0x0000af28 .quad -4433759430461380907 + 0x7a, 0xef, 0x45, 0x39, 0x4e, 0x46, 0xef, 0x8b, //0x0000af30 .quad -8363388681221443718 + 0x8a, 0x90, 0xc3, 0x7f, 0x1c, 0x27, 0x16, 0xf3, //0x0000af38 .quad -930513269649338230 + 0xac, 0xb5, 0xcb, 0xe3, 0xf0, 0x8b, 0x75, 0x97, //0x0000af40 .quad -7532960934977096276 + 0x56, 0x3a, 0xda, 0xcf, 0x71, 0xd8, 0xed, 0x97, //0x0000af48 .quad -7499099821171918250 + 0x17, 0xa3, 0xbe, 0x1c, 0xed, 0xee, 0x52, 0x3d, //0x0000af50 .quad 4418856886560793367 + 0xec, 0xc8, 0xd0, 0x43, 0x8e, 0x4e, 0xe9, 0xbd, //0x0000af58 .quad -4762188758037509908 + 0xdd, 0x4b, 0xee, 0x63, 0xa8, 0xaa, 0xa7, 0x4c, //0x0000af60 .quad 5523571108200991709 + 0x27, 0xfb, 0xc4, 0xd4, 0x31, 0xa2, 0x63, 0xed, //0x0000af68 .quad -1341049929119499481 + 0x6a, 0xef, 0x74, 0x3e, 0xa9, 0xca, 0xe8, 0x8f, //0x0000af70 .quad -8076983103442849942 + 0xf8, 0x1c, 0xfb, 0x24, 0x5f, 0x45, 0x5e, 0x94, //0x0000af78 .quad -7755685233340769032 + 0x44, 0x2b, 0x12, 0x8e, 0x53, 0xfd, 0xe2, 0xb3, //0x0000af80 .quad -5484542860876174524 + 0x36, 0xe4, 0x39, 0xee, 0xb6, 0xd6, 0x75, 0xb9, //0x0000af88 .quad -5082920523248573386 + 0x16, 0xb6, 0x96, 0x71, 0xa8, 0xbc, 0xdb, 0x60, //0x0000af90 .quad 6979379479186945558 + 0x44, 0x5d, 0xc8, 0xa9, 0x64, 0x4c, 0xd3, 0xe7, //0x0000af98 .quad -1741964635633328828 + 0xcd, 0x31, 0xfe, 0x46, 0xe9, 0x55, 0x89, 0xbc, //0x0000afa0 .quad -4861259862362934835 + 0x4a, 0x3a, 0x1d, 0xea, 0xbe, 0x0f, 0xe4, 0x90, //0x0000afa8 .quad -8006256924911912374 + 0x41, 0xbe, 0xbd, 0x98, 0x63, 0xab, 0xab, 0x6b, //0x0000afb0 .quad 7758483227328495169 + 0xdd, 0x88, 0xa4, 0xa4, 0xae, 0x13, 0x1d, 0xb5, //0x0000afb8 .quad -5396135137712502563 + 0xd1, 0x2d, 0xed, 0x7e, 0x3c, 0x96, 0x96, 0xc6, //0x0000afc0 .quad -4136954021121544751 + 0x14, 0xab, 0xcd, 0x4d, 0x9a, 0x58, 0x64, 0xe2, //0x0000afc8 .quad -2133482903713240300 + 0xa2, 0x3c, 0x54, 0xcf, 0xe5, 0x1d, 0x1e, 0xfc, //0x0000afd0 .quad -279753253987271518 + 0xec, 0x8a, 0xa0, 0x70, 0x60, 0xb7, 0x7e, 0x8d, //0x0000afd8 .quad -8250955842461857044 + 0xcb, 0x4b, 0x29, 0x43, 0x5f, 0xa5, 0x25, 0x3b, //0x0000afe0 .quad 4261994450943298507 + 0xa8, 0xad, 0xc8, 0x8c, 0x38, 0x65, 0xde, 0xb0, //0x0000afe8 .quad -5702008784649933400 + 0xbe, 0x9e, 0xf3, 0x13, 0xb7, 0x0e, 0xef, 0x49, //0x0000aff0 .quad 5327493063679123134 + 0x12, 0xd9, 0xfa, 0xaf, 0x86, 0xfe, 0x15, 0xdd, //0x0000aff8 .quad -2515824962385028846 + 0x37, 0x43, 0x78, 0x6c, 0x32, 0x69, 0x35, 0x6e, //0x0000b000 .quad 7941369183226839863 + 0xab, 0xc7, 0xfc, 0x2d, 0x14, 0xbf, 0x2d, 0x8a, //0x0000b008 .quad -8489919629131724885 + 0x04, 0x54, 0x96, 0x07, 0x7f, 0xc3, 0xc2, 0x49, //0x0000b010 .quad 5315025460606161924 + 0x96, 0xf9, 0x7b, 0x39, 0xd9, 0x2e, 0xb9, 0xac, //0x0000b018 .quad -6000713517987268202 + 0x06, 0xe9, 0x7b, 0xc9, 0x5e, 0x74, 0x33, 0xdc, //0x0000b020 .quad -2579590211097073402 + 0xfb, 0xf7, 0xda, 0x87, 0x8f, 0x7a, 0xe7, 0xd7, //0x0000b028 .quad -2889205879056697349 + 0xa3, 0x71, 0xed, 0x3d, 0xbb, 0x28, 0xa0, 0x69, //0x0000b030 .quad 7611128154919104931 + 0xfd, 0xda, 0xe8, 0xb4, 0x99, 0xac, 0xf0, 0x86, //0x0000b038 .quad -8723282702051517699 + 0x0c, 0xce, 0x68, 0x0d, 0xea, 0x32, 0x08, 0xc4, //0x0000b040 .quad -4321147861633282548 + 0xbc, 0x11, 0x23, 0x22, 0xc0, 0xd7, 0xac, 0xa8, //0x0000b048 .quad -6292417359137009220 + 0x90, 0x01, 0xc3, 0x90, 0xa4, 0x3f, 0x0a, 0xf5, //0x0000b050 .quad -789748808614215280 + 0x2b, 0xd6, 0xab, 0x2a, 0xb0, 0x0d, 0xd8, 0xd2, //0x0000b058 .quad -3253835680493873621 + 0xfa, 0xe0, 0x79, 0xda, 0xc6, 0x67, 0x26, 0x79, //0x0000b060 .quad 8729779031470891258 + 0xdb, 0x65, 0xab, 0x1a, 0x8e, 0x08, 0xc7, 0x83, //0x0000b068 .quad -8951176327949752869 + 0x38, 0x59, 0x18, 0x91, 0xb8, 0x01, 0x70, 0x57, //0x0000b070 .quad 6300537770911226168 + 0x52, 0x3f, 0x56, 0xa1, 0xb1, 0xca, 0xb8, 0xa4, //0x0000b078 .quad -6577284391509803182 + 0x86, 0x6f, 0x5e, 0xb5, 0x26, 0x02, 0x4c, 0xed, //0x0000b080 .quad -1347699823215743098 + 0x26, 0xcf, 0xab, 0x09, 0x5e, 0xfd, 0xe6, 0xcd, //0x0000b088 .quad -3609919470959866074 + 0xb4, 0x05, 0x5b, 0x31, 0x58, 0x81, 0x4f, 0x54, //0x0000b090 .quad 6075216638131242420 + 0x78, 0x61, 0x0b, 0xc6, 0x5a, 0x5e, 0xb0, 0x80, //0x0000b098 .quad -9173728696990998152 + 0x21, 0xc7, 0xb1, 0x3d, 0xae, 0x61, 0x63, 0x69, //0x0000b0a0 .quad 7594020797664053025 + 0xd6, 0x39, 0x8e, 0x77, 0xf1, 0x75, 0xdc, 0xa0, //0x0000b0a8 .quad -6855474852811359786 + 0xe9, 0x38, 0x1e, 0xcd, 0x19, 0x3a, 0xbc, 0x03, //0x0000b0b0 .quad 269153960225290473 + 0x4c, 0xc8, 0x71, 0xd5, 0x6d, 0x93, 0x13, 0xc9, //0x0000b0b8 .quad -3957657547586811828 + 0x23, 0xc7, 0x65, 0x40, 0xa0, 0x48, 0xab, 0x04, //0x0000b0c0 .quad 336442450281613091 + 0x5f, 0x3a, 0xce, 0x4a, 0x49, 0x78, 0x58, 0xfb, //0x0000b0c8 .quad -335385916056126881 + 0x76, 0x9c, 0x3f, 0x28, 0x64, 0x0d, 0xeb, 0x62, //0x0000b0d0 .quad 7127805559067090038 + 0x7b, 0xe4, 0xc0, 0xce, 0x2d, 0x4b, 0x17, 0x9d, //0x0000b0d8 .quad -7127145225176161157 + 0x94, 0x83, 0x4f, 0x32, 0xbd, 0xd0, 0xa5, 0x3b, //0x0000b0e0 .quad 4298070930406474644 + 0x9a, 0x1d, 0x71, 0x42, 0xf9, 0x1d, 0x5d, 0xc4, //0x0000b0e8 .quad -4297245513042813542 + 0x79, 0x64, 0xe3, 0x7e, 0xec, 0x44, 0x8f, 0xca, //0x0000b0f0 .quad -3850783373846682503 + 0x00, 0x65, 0x0d, 0x93, 0x77, 0x65, 0x74, 0xf5, //0x0000b0f8 .quad -759870872876129024 + 0xcb, 0x1e, 0x4e, 0xcf, 0x13, 0x8b, 0x99, 0x7e, //0x0000b100 .quad 9122475437414293195 + 0x20, 0x5f, 0xe8, 0xbb, 0x6a, 0xbf, 0x68, 0x99, //0x0000b108 .quad -7392448323188662496 + 0x7e, 0xa6, 0x21, 0xc3, 0xd8, 0xed, 0x3f, 0x9e, //0x0000b110 .quad -7043649776941685122 + 0xe8, 0x76, 0xe2, 0x6a, 0x45, 0xef, 0xc2, 0xbf, //0x0000b118 .quad -4628874385558440216 + 0x1e, 0x10, 0xea, 0xf3, 0x4e, 0xe9, 0xcf, 0xc5, //0x0000b120 .quad -4192876202749718498 + 0xa2, 0x14, 0x9b, 0xc5, 0x16, 0xab, 0xb3, 0xef, //0x0000b128 .quad -1174406963520662366 + 0x12, 0x4a, 0x72, 0x58, 0xd1, 0xf1, 0xa1, 0xbb, //0x0000b130 .quad -4926390635932268014 + 0xe5, 0xec, 0x80, 0x3b, 0xee, 0x4a, 0xd0, 0x95, //0x0000b138 .quad -7651533379841495835 + 0x97, 0xdc, 0x8e, 0xae, 0x45, 0x6e, 0x8a, 0x2a, //0x0000b140 .quad 3065383741939440791 + 0x1f, 0x28, 0x61, 0xca, 0xa9, 0x5d, 0x44, 0xbb, //0x0000b148 .quad -4952730706374481889 + 0xbd, 0x93, 0x32, 0x1a, 0xd7, 0x09, 0x2d, 0xf5, //0x0000b150 .quad -779956341003086915 + 0x26, 0x72, 0xf9, 0x3c, 0x14, 0x75, 0x15, 0xea, //0x0000b158 .quad -1579227364540714458 + 0x56, 0x9c, 0x5f, 0x70, 0x26, 0x26, 0x3c, 0x59, //0x0000b160 .quad 6430056314514152534 + 0x58, 0xe7, 0x1b, 0xa6, 0x2c, 0x69, 0x4d, 0x92, //0x0000b168 .quad -7904546130479028392 + 0x6c, 0x83, 0x77, 0x0c, 0xb0, 0x2f, 0x8b, 0x6f, //0x0000b170 .quad 8037570393142690668 + 0x2e, 0xe1, 0xa2, 0xcf, 0x77, 0xc3, 0xe0, 0xb6, //0x0000b178 .quad -5268996644671397586 + 0x47, 0x64, 0x95, 0x0f, 0x9c, 0xfb, 0x6d, 0x0b, //0x0000b180 .quad 823590954573587527 + 0x7a, 0x99, 0x8b, 0xc3, 0x55, 0xf4, 0x98, 0xe4, //0x0000b188 .quad -1974559787411859078 + 0xac, 0x5e, 0xbd, 0x89, 0x41, 0xbd, 0x24, 0x47, //0x0000b190 .quad 5126430365035880108 + 0xec, 0x3f, 0x37, 0x9a, 0xb5, 0x98, 0xdf, 0x8e, //0x0000b198 .quad -8151628894773493780 + 0x57, 0xb6, 0x2c, 0xec, 0x91, 0xec, 0xed, 0x58, //0x0000b1a0 .quad 6408037956294850135 + 0xe7, 0x0f, 0xc5, 0x00, 0xe3, 0x7e, 0x97, 0xb2, //0x0000b1a8 .quad -5577850100039479321 + 0xed, 0xe3, 0x37, 0x67, 0xb6, 0x67, 0x29, 0x2f, //0x0000b1b0 .quad 3398361426941174765 + 0xe1, 0x53, 0xf6, 0xc0, 0x9b, 0x5e, 0x3d, 0xdf, //0x0000b1b8 .quad -2360626606621961247 + 0x74, 0xee, 0x82, 0x00, 0xd2, 0xe0, 0x79, 0xbd, //0x0000b1c0 .quad -4793553135802847628 + 0x6c, 0xf4, 0x99, 0x58, 0x21, 0x5b, 0x86, 0x8b, //0x0000b1c8 .quad -8392920656779807636 + 0x11, 0xaa, 0xa3, 0x80, 0x06, 0x59, 0xd8, 0xec, //0x0000b1d0 .quad -1380255401326171631 + 0x87, 0x71, 0xc0, 0xae, 0xe9, 0xf1, 0x67, 0xae, //0x0000b1d8 .quad -5879464802547371641 + 0x95, 0x94, 0xcc, 0x20, 0x48, 0x6f, 0x0e, 0xe8, //0x0000b1e0 .quad -1725319251657714539 + 0xe9, 0x8d, 0x70, 0x1a, 0x64, 0xee, 0x01, 0xda, //0x0000b1e8 .quad -2737644984756826647 + 0xdd, 0xdc, 0x7f, 0x14, 0x8d, 0x05, 0x09, 0x31, //0x0000b1f0 .quad 3533361486141316317 + 0xb2, 0x58, 0x86, 0x90, 0xfe, 0x34, 0x41, 0x88, //0x0000b1f8 .quad -8628557143114098510 + 0x15, 0xd4, 0x9f, 0x59, 0xf0, 0x46, 0x4b, 0xbd, //0x0000b200 .quad -4806670179178130411 + 0xde, 0xee, 0xa7, 0x34, 0x3e, 0x82, 0x51, 0xaa, //0x0000b208 .quad -6174010410465235234 + 0x1a, 0xc9, 0x07, 0x70, 0xac, 0x18, 0x9e, 0x6c, //0x0000b210 .quad 7826720331309500698 + 0x96, 0xea, 0xd1, 0xc1, 0xcd, 0xe2, 0xe5, 0xd4, //0x0000b218 .quad -3105826994654156138 + 0xb0, 0xdd, 0x04, 0xc6, 0x6b, 0xcf, 0xe2, 0x03, //0x0000b220 .quad 280014188641050032 + 0x9e, 0x32, 0x23, 0x99, 0xc0, 0xad, 0x0f, 0x85, //0x0000b228 .quad -8858670899299929442 + 0x1c, 0x15, 0x86, 0xb7, 0x46, 0x83, 0xdb, 0x84, //0x0000b230 .quad -8873354301053463268 + 0x45, 0xff, 0x6b, 0xbf, 0x30, 0x99, 0x53, 0xa6, //0x0000b238 .quad -6461652605697523899 + 0x63, 0x9a, 0x67, 0x65, 0x18, 0x64, 0x12, 0xe6, //0x0000b240 .quad -1868320839462053277 + 0x16, 0xff, 0x46, 0xef, 0x7c, 0x7f, 0xe8, 0xcf, //0x0000b248 .quad -3465379738694516970 + 0x7e, 0xc0, 0x60, 0x3f, 0x8f, 0x7e, 0xcb, 0x4f, //0x0000b250 .quad 5749828502977298558 + 0x6e, 0x5f, 0x8c, 0x15, 0xae, 0x4f, 0xf1, 0x81, //0x0000b258 .quad -9083391364325154962 + 0x9d, 0xf0, 0x38, 0x0f, 0x33, 0x5e, 0xbe, 0xe3, //0x0000b260 .quad -2036086408133152611 + 0x49, 0x77, 0xef, 0x9a, 0x99, 0xa3, 0x6d, 0xa2, //0x0000b268 .quad -6742553186979055799 + 0xc5, 0x2c, 0x07, 0xd3, 0xbf, 0xf5, 0xad, 0x5c, //0x0000b270 .quad 6678264026688335045 + 0x1c, 0x55, 0xab, 0x01, 0x80, 0x0c, 0x09, 0xcb, //0x0000b278 .quad -3816505465296431844 + 0xf6, 0xf7, 0xc8, 0xc7, 0x2f, 0x73, 0xd9, 0x73, //0x0000b280 .quad 8347830033360418806 + 0x63, 0x2a, 0x16, 0x02, 0xa0, 0x4f, 0xcb, 0xfd, //0x0000b288 .quad -158945813193151901 + 0xfa, 0x9a, 0xdd, 0xdc, 0xfd, 0xe7, 0x67, 0x28, //0x0000b290 .quad 2911550761636567802 + 0x7e, 0xda, 0x4d, 0x01, 0xc4, 0x11, 0x9f, 0x9e, //0x0000b298 .quad -7016870160886801794 + 0xb8, 0x01, 0x15, 0x54, 0xfd, 0xe1, 0x81, 0xb2, //0x0000b2a0 .quad -5583933584809066056 + 0x1d, 0x51, 0xa1, 0x01, 0x35, 0xd6, 0x46, 0xc6, //0x0000b2a8 .quad -4159401682681114339 + 0x26, 0x42, 0x1a, 0xa9, 0x7c, 0x5a, 0x22, 0x1f, //0x0000b2b0 .quad 2243455055843443238 + 0x65, 0xa5, 0x09, 0x42, 0xc2, 0x8b, 0xd8, 0xf7, //0x0000b2b8 .quad -587566084924005019 + 0x58, 0x69, 0xb0, 0xe9, 0x8d, 0x78, 0x75, 0x33, //0x0000b2c0 .quad 3708002419115845976 + 0x5f, 0x07, 0x46, 0x69, 0x59, 0x57, 0xe7, 0x9a, //0x0000b2c8 .quad -7284757830718584993 + 0xae, 0x83, 0x1c, 0x64, 0xb1, 0xd6, 0x52, 0x00, //0x0000b2d0 .quad 23317005467419566 + 0x37, 0x89, 0x97, 0xc3, 0x2f, 0x2d, 0xa1, 0xc1, //0x0000b2d8 .quad -4494261269970843337 + 0x9a, 0xa4, 0x23, 0xbd, 0x5d, 0x8c, 0x67, 0xc0, //0x0000b2e0 .quad -4582539761593113446 + 0x84, 0x6b, 0x7d, 0xb4, 0x7b, 0x78, 0x09, 0xf2, //0x0000b2e8 .quad -1006140569036166268 + 0xe0, 0x46, 0x36, 0x96, 0xba, 0xb7, 0x40, 0xf8, //0x0000b2f0 .quad -558244341782001952 + 0x32, 0x63, 0xce, 0x50, 0x4d, 0xeb, 0x45, 0x97, //0x0000b2f8 .quad -7546366883288685774 + 0x98, 0xd8, 0xc3, 0x3b, 0xa9, 0xe5, 0x50, 0xb6, //0x0000b300 .quad -5309491445654890344 + 0xff, 0xfb, 0x01, 0xa5, 0x20, 0x66, 0x17, 0xbd, //0x0000b308 .quad -4821272585683469313 + 0xbe, 0xce, 0xb4, 0x8a, 0x13, 0x1f, 0xe5, 0xa3, //0x0000b310 .quad -6636864307068612930 + 0xff, 0x7a, 0x42, 0xce, 0xa8, 0x3f, 0x5d, 0xec, //0x0000b318 .quad -1414904713676948737 + 0x37, 0x01, 0xb1, 0x36, 0x6c, 0x33, 0x6f, 0xc6, //0x0000b320 .quad -4148040191917883081 + 0xdf, 0x8c, 0xe9, 0x80, 0xc9, 0x47, 0xba, 0x93, //0x0000b328 .quad -7801844473689174817 + 0x84, 0x41, 0x5d, 0x44, 0x47, 0x00, 0x0b, 0xb8, //0x0000b330 .quad -5185050239897353852 + 0x17, 0xf0, 0x23, 0xe1, 0xbb, 0xd9, 0xa8, 0xb8, //0x0000b338 .quad -5140619573684080617 + 0xe5, 0x91, 0x74, 0x15, 0x59, 0xc0, 0x0d, 0xa6, //0x0000b340 .quad -6481312799871692315 + 0x1d, 0xec, 0x6c, 0xd9, 0x2a, 0x10, 0xd3, 0xe6, //0x0000b348 .quad -1814088448677712867 + 0x2f, 0xdb, 0x68, 0xad, 0x37, 0x98, 0xc8, 0x87, //0x0000b350 .quad -8662506518347195601 + 0x92, 0x13, 0xe4, 0xc7, 0x1a, 0xea, 0x43, 0x90, //0x0000b358 .quad -8051334308064652398 + 0xfb, 0x11, 0xc3, 0x98, 0x45, 0xbe, 0xba, 0x29, //0x0000b360 .quad 3006924907348169211 + 0x77, 0x18, 0xdd, 0x79, 0xa1, 0xe4, 0x54, 0xb4, //0x0000b368 .quad -5452481866653427593 + 0x7a, 0xd6, 0xf3, 0xfe, 0xd6, 0x6d, 0x29, 0xf4, //0x0000b370 .quad -853029884242176390 + 0x94, 0x5e, 0x54, 0xd8, 0xc9, 0x1d, 0x6a, 0xe1, //0x0000b378 .quad -2203916314889396588 + 0x0c, 0x66, 0x58, 0x5f, 0xa6, 0xe4, 0x99, 0x18, //0x0000b380 .quad 1772699331562333708 + 0x1d, 0xbb, 0x34, 0x27, 0x9e, 0x52, 0xe2, 0x8c, //0x0000b388 .quad -8294976724446954723 + 0x8f, 0x7f, 0x2e, 0xf7, 0xcf, 0x5d, 0xc0, 0x5e, //0x0000b390 .quad 6827560182880305039 + 0xe4, 0xe9, 0x01, 0xb1, 0x45, 0xe7, 0x1a, 0xb0, //0x0000b398 .quad -5757034887131305500 + 0x73, 0x1f, 0xfa, 0xf4, 0x43, 0x75, 0x70, 0x76, //0x0000b3a0 .quad 8534450228600381299 + 0x5d, 0x64, 0x42, 0x1d, 0x17, 0xa1, 0x21, 0xdc, //0x0000b3a8 .quad -2584607590486743971 + 0xa8, 0x53, 0x1c, 0x79, 0x4a, 0x49, 0x06, 0x6a, //0x0000b3b0 .quad 7639874402088932264 + 0xba, 0x7e, 0x49, 0x72, 0xae, 0x04, 0x95, 0x89, //0x0000b3b8 .quad -8532908771695296838 + 0x92, 0x68, 0x63, 0x17, 0x9d, 0xdb, 0x87, 0x04, //0x0000b3c0 .quad 326470965756389522 + 0x69, 0xde, 0xdb, 0x0e, 0xda, 0x45, 0xfa, 0xab, //0x0000b3c8 .quad -6054449946191733143 + 0xb6, 0x42, 0x3c, 0x5d, 0x84, 0xd2, 0xa9, 0x45, //0x0000b3d0 .quad 5019774725622874806 + 0x03, 0xd6, 0x92, 0x92, 0x50, 0xd7, 0xf8, 0xd6, //0x0000b3d8 .quad -2956376414312278525 + 0xb2, 0xa9, 0x45, 0xba, 0x92, 0x23, 0x8a, 0x0b, //0x0000b3e0 .quad 831516194300602802 + 0xc2, 0xc5, 0x9b, 0x5b, 0x92, 0x86, 0x5b, 0x86, //0x0000b3e8 .quad -8765264286586255934 + 0x1e, 0x14, 0xd7, 0x68, 0x77, 0xac, 0x6c, 0x8e, //0x0000b3f0 .quad -8183976793979022306 + 0x32, 0xb7, 0x82, 0xf2, 0x36, 0x68, 0xf2, 0xa7, //0x0000b3f8 .quad -6344894339805432014 + 0x26, 0xd9, 0x0c, 0x43, 0x95, 0xd7, 0x07, 0x32, //0x0000b400 .quad 3605087062808385830 + 0xff, 0x64, 0x23, 0xaf, 0x44, 0x02, 0xef, 0xd1, //0x0000b408 .quad -3319431906329402113 + 0xb8, 0x07, 0xe8, 0x49, 0xbd, 0xe6, 0x44, 0x7f, //0x0000b410 .quad 9170708441896323000 + 0x1f, 0x1f, 0x76, 0xed, 0x6a, 0x61, 0x35, 0x83, //0x0000b418 .quad -8992173969096958177 + 0xa6, 0x09, 0x62, 0x9c, 0x6c, 0x20, 0x16, 0x5f, //0x0000b420 .quad 6851699533943015846 + 0xe7, 0xa6, 0xd3, 0xa8, 0xc5, 0xb9, 0x02, 0xa4, //0x0000b428 .quad -6628531442943809817 + 0x0f, 0x8c, 0x7a, 0xc3, 0x87, 0xa8, 0xdb, 0x36, //0x0000b430 .quad 3952938399001381903 + 0xa1, 0x90, 0x08, 0x13, 0x37, 0x68, 0x03, 0xcd, //0x0000b438 .quad -3673978285252374367 + 0x89, 0x97, 0x2c, 0xda, 0x54, 0x49, 0x49, 0xc2, //0x0000b440 .quad -4446942528265218167 + 0x64, 0x5a, 0xe5, 0x6b, 0x22, 0x21, 0x22, 0x80, //0x0000b448 .quad -9213765455923815836 + 0x6c, 0xbd, 0xb7, 0x10, 0xaa, 0x9b, 0xdb, 0xf2, //0x0000b450 .quad -946992141904134804 + 0xfd, 0xb0, 0xde, 0x06, 0x6b, 0xa9, 0x2a, 0xa0, //0x0000b458 .quad -6905520801477381891 + 0xc7, 0xac, 0xe5, 0x94, 0x94, 0x82, 0x92, 0x6f, //0x0000b460 .quad 8039631859474607303 + 0x3d, 0x5d, 0x96, 0xc8, 0xc5, 0x53, 0x35, 0xc8, //0x0000b468 .quad -4020214983419339459 + 0xf9, 0x17, 0x1f, 0xba, 0x39, 0x23, 0x77, 0xcb, //0x0000b470 .quad -3785518230938904583 + 0x8c, 0xf4, 0xbb, 0x3a, 0xb7, 0xa8, 0x42, 0xfa, //0x0000b478 .quad -413582710846786420 + 0xfb, 0x6e, 0x53, 0x14, 0x04, 0x76, 0x2a, 0xff, //0x0000b480 .quad -60105885123121413 + 0xd7, 0x78, 0xb5, 0x84, 0x72, 0xa9, 0x69, 0x9c, //0x0000b488 .quad -7176018221920323369 + 0xba, 0x4a, 0x68, 0x19, 0x85, 0x13, 0xf5, 0xfe, //0x0000b490 .quad -75132356403901766 + 0x0d, 0xd7, 0xe2, 0x25, 0xcf, 0x13, 0x84, 0xc3, //0x0000b498 .quad -4358336758973016307 + 0x69, 0x5d, 0xc2, 0x5f, 0x66, 0x58, 0xb2, 0x7e, //0x0000b4a0 .quad 9129456591349898601 + 0xd1, 0x8c, 0x5b, 0xef, 0xc2, 0x18, 0x65, 0xf4, //0x0000b4a8 .quad -836234930288882479 + 0x61, 0x7a, 0xd9, 0xfb, 0x3f, 0x77, 0x2f, 0xef, //0x0000b4b0 .quad -1211618658047395231 + 0x02, 0x38, 0x99, 0xd5, 0x79, 0x2f, 0xbf, 0x98, //0x0000b4b8 .quad -7440175859071633406 + 0xfa, 0xd8, 0xcf, 0xfa, 0x0f, 0x55, 0xfb, 0xaa, //0x0000b4c0 .quad -6126209340986631942 + 0x03, 0x86, 0xff, 0x4a, 0x58, 0xfb, 0xee, 0xbe, //0x0000b4c8 .quad -4688533805412153853 + 0x38, 0xcf, 0x83, 0xf9, 0x53, 0x2a, 0xba, 0x95, //0x0000b4d0 .quad -7657761676233289928 + 0x84, 0x67, 0xbf, 0x5d, 0x2e, 0xba, 0xaa, 0xee, //0x0000b4d8 .quad -1248981238337804412 + 0x83, 0x61, 0xf2, 0x7b, 0x74, 0x5a, 0x94, 0xdd, //0x0000b4e0 .quad -2480258038432112253 + 0xb2, 0xa0, 0x97, 0xfa, 0x5c, 0xb4, 0x2a, 0x95, //0x0000b4e8 .quad -7698142301602209614 + 0xe4, 0xf9, 0xee, 0x9a, 0x11, 0x71, 0xf9, 0x94, //0x0000b4f0 .quad -7712008566467528220 + 0xdf, 0x88, 0x3d, 0x39, 0x74, 0x61, 0x75, 0xba, //0x0000b4f8 .quad -5010991858575374113 + 0x5d, 0xb8, 0xaa, 0x01, 0x56, 0xcd, 0x37, 0x7a, //0x0000b500 .quad 8806733365625141341 + 0x17, 0xeb, 0x8c, 0x47, 0xd1, 0xb9, 0x12, 0xe9, //0x0000b508 .quad -1652053804791829737 + 0x3a, 0xb3, 0x0a, 0xc1, 0x55, 0xe0, 0x62, 0xac, //0x0000b510 .quad -6025006692552756422 + 0xee, 0x12, 0xb8, 0xcc, 0x22, 0xb4, 0xab, 0x91, //0x0000b518 .quad -7950062655635975442 + 0x09, 0x60, 0x4d, 0x31, 0x6b, 0x98, 0x7b, 0x57, //0x0000b520 .quad 6303799689591218185 + 0xaa, 0x17, 0xe6, 0x7f, 0x2b, 0xa1, 0x16, 0xb6, //0x0000b528 .quad -5325892301117581398 + 0x0b, 0xb8, 0xa0, 0xfd, 0x85, 0x7e, 0x5a, 0xed, //0x0000b530 .quad -1343622424865753077 + 0x94, 0x9d, 0xdf, 0x5f, 0x76, 0x49, 0x9c, 0xe3, //0x0000b538 .quad -2045679357969588844 + 0x07, 0x73, 0x84, 0xbe, 0x13, 0x8f, 0x58, 0x14, //0x0000b540 .quad 1466078993672598279 + 0x7d, 0xc2, 0xeb, 0xfb, 0xe9, 0xad, 0x41, 0x8e, //0x0000b548 .quad -8196078626372074883 + 0xc8, 0x8f, 0x25, 0xae, 0xd8, 0xb2, 0x6e, 0x59, //0x0000b550 .quad 6444284760518135752 + 0x1c, 0xb3, 0xe6, 0x7a, 0x64, 0x19, 0xd2, 0xb1, //0x0000b558 .quad -5633412264537705700 + 0xbb, 0xf3, 0xae, 0xd9, 0x8e, 0x5f, 0xca, 0x6f, //0x0000b560 .quad 8055355950647669691 + 0xe3, 0x5f, 0xa0, 0x99, 0xbd, 0x9f, 0x46, 0xde, //0x0000b568 .quad -2430079312244744221 + 0x54, 0x58, 0x0d, 0x48, 0xb9, 0x7b, 0xde, 0x25, //0x0000b570 .quad 2728754459941099604 + 0xee, 0x3b, 0x04, 0x80, 0xd6, 0x23, 0xec, 0x8a, //0x0000b578 .quad -8436328597794046994 + 0x6a, 0xae, 0x10, 0x9a, 0xa7, 0x1a, 0x56, 0xaf, //0x0000b580 .quad -5812428961928401302 + 0xe9, 0x4a, 0x05, 0x20, 0xcc, 0x2c, 0xa7, 0xad, //0x0000b588 .quad -5933724728815170839 + 0x04, 0xda, 0x94, 0x80, 0x51, 0xa1, 0x2b, 0x1b, //0x0000b590 .quad 1957835834444274180 + 0xa4, 0x9d, 0x06, 0x28, 0xff, 0xf7, 0x10, 0xd9, //0x0000b598 .quad -2805469892591575644 + 0x42, 0x08, 0x5d, 0xf0, 0xd2, 0x44, 0xfb, 0x90, //0x0000b5a0 .quad -7999724640327104446 + 0x86, 0x22, 0x04, 0x79, 0xff, 0x9a, 0xaa, 0x87, //0x0000b5a8 .quad -8670947710510816634 + 0x53, 0x4a, 0x74, 0xac, 0x07, 0x16, 0x3a, 0x35, //0x0000b5b0 .quad 3835402254873283155 + 0x28, 0x2b, 0x45, 0x57, 0xbf, 0x41, 0x95, 0xa9, //0x0000b5b8 .quad -6226998619711132888 + 0xe8, 0x5c, 0x91, 0x97, 0x89, 0x9b, 0x88, 0x42, //0x0000b5c0 .quad 4794252818591603944 + 0xf2, 0x75, 0x16, 0x2d, 0x2f, 0x92, 0xfa, 0xd3, //0x0000b5c8 .quad -3172062256211528206 + 0x11, 0xda, 0xba, 0xfe, 0x35, 0x61, 0x95, 0x69, //0x0000b5d0 .quad 7608094030047140369 + 0xb7, 0x09, 0x2e, 0x7c, 0x5d, 0x9b, 0x7c, 0x84, //0x0000b5d8 .quad -8900067937773286985 + 0x95, 0x90, 0x69, 0x7e, 0x83, 0xb9, 0xfa, 0x43, //0x0000b5e0 .quad 4898431519131537557 + 0x25, 0x8c, 0x39, 0xdb, 0x34, 0xc2, 0x9b, 0xa5, //0x0000b5e8 .quad -6513398903789220827 + 0xbb, 0xf4, 0x03, 0x5e, 0xe4, 0x67, 0xf9, 0x94, //0x0000b5f0 .quad -7712018656367741765 + 0x2e, 0xef, 0x07, 0x12, 0xc2, 0xb2, 0x02, 0xcf, //0x0000b5f8 .quad -3530062611309138130 + 0xf5, 0x78, 0xc2, 0xba, 0xee, 0xe0, 0x1b, 0x1d, //0x0000b600 .quad 2097517367411243253 + 0x7d, 0xf5, 0x44, 0x4b, 0xb9, 0xaf, 0x61, 0x81, //0x0000b608 .quad -9123818159709293187 + 0x32, 0x17, 0x73, 0x69, 0x2a, 0xd9, 0x62, 0x64, //0x0000b610 .quad 7233582727691441970 + 0xdc, 0x32, 0x16, 0x9e, 0xa7, 0x1b, 0xba, 0xa1, //0x0000b618 .quad -6793086681209228580 + 0xfe, 0xdc, 0xcf, 0x03, 0x75, 0x8f, 0x7b, 0x7d, //0x0000b620 .quad 9041978409614302462 + 0x93, 0xbf, 0x9b, 0x85, 0x91, 0xa2, 0x28, 0xca, //0x0000b628 .quad -3879672333084147821 + 0x3e, 0xd4, 0xc3, 0x44, 0x52, 0x73, 0xda, 0x5c, //0x0000b630 .quad 6690786993590490174 + 0x78, 0xaf, 0x02, 0xe7, 0x35, 0xcb, 0xb2, 0xfc, //0x0000b638 .quad -237904397927796872 + 0xa7, 0x64, 0xfa, 0x6a, 0x13, 0x88, 0x08, 0x3a, //0x0000b640 .quad 4181741870994056359 + 0xab, 0xad, 0x61, 0xb0, 0x01, 0xbf, 0xef, 0x9d, //0x0000b648 .quad -7066219276345954901 + 0xd0, 0xfd, 0xb8, 0x45, 0x18, 0xaa, 0x8a, 0x08, //0x0000b650 .quad 615491320315182544 + 0x16, 0x19, 0x7a, 0x1c, 0xc2, 0xae, 0x6b, 0xc5, //0x0000b658 .quad -4221088077005055722 + 0x45, 0x3d, 0x27, 0x57, 0x9e, 0x54, 0xad, 0x8a, //0x0000b660 .quad -8454007886460797627 + 0x5b, 0x9f, 0x98, 0xa3, 0x72, 0x9a, 0xc6, 0xf6, //0x0000b668 .quad -664674077828931749 + 0x4b, 0x86, 0x78, 0xf6, 0xe2, 0x54, 0xac, 0x36, //0x0000b670 .quad 3939617107816777291 + 0x99, 0x63, 0x3f, 0xa6, 0x87, 0x20, 0x3c, 0x9a, //0x0000b678 .quad -7332950326284164199 + 0xdd, 0xa7, 0x16, 0xb4, 0x1b, 0x6a, 0x57, 0x84, //0x0000b680 .quad -8910536670511192099 + 0x7f, 0x3c, 0xcf, 0x8f, 0xa9, 0x28, 0xcb, 0xc0, //0x0000b688 .quad -4554501889427817345 + 0xd5, 0x51, 0x1c, 0xa1, 0xa2, 0x44, 0x6d, 0x65, //0x0000b690 .quad 7308573235570561493 + 0x9f, 0x0b, 0xc3, 0xf3, 0xd3, 0xf2, 0xfd, 0xf0, //0x0000b698 .quad -1081441343357383777 + 0x25, 0xb3, 0xb1, 0xa4, 0xe5, 0x4a, 0x64, 0x9f, //0x0000b6a0 .quad -6961356773836868827 + 0x43, 0xe7, 0x59, 0x78, 0xc4, 0xb7, 0x9e, 0x96, //0x0000b6a8 .quad -7593429867239446717 + 0xee, 0x1f, 0xde, 0x0d, 0x9f, 0x5d, 0x3d, 0x87, //0x0000b6b0 .quad -8701695967296086034 + 0x14, 0x61, 0x70, 0x96, 0xb5, 0x65, 0x46, 0xbc, //0x0000b6b8 .quad -4880101315621920492 + 0xea, 0xa7, 0x55, 0xd1, 0x06, 0xb5, 0x0c, 0xa9, //0x0000b6c0 .quad -6265433940692719638 + 0x59, 0x79, 0x0c, 0xfc, 0x22, 0xff, 0x57, 0xeb, //0x0000b6c8 .quad -1488440626100012711 + 0xf2, 0x88, 0xd5, 0x42, 0x24, 0xf1, 0xa7, 0x09, //0x0000b6d0 .quad 695789805494438130 + 0xd8, 0xcb, 0x87, 0xdd, 0x75, 0xff, 0x16, 0x93, //0x0000b6d8 .quad -7847804418953589800 + 0x2f, 0xeb, 0x8a, 0x53, 0x6d, 0xed, 0x11, 0x0c, //0x0000b6e0 .quad 869737256868047663 + 0xce, 0xbe, 0xe9, 0x54, 0x53, 0xbf, 0xdc, 0xb7, //0x0000b6e8 .quad -5198069505264599346 + 0xfa, 0xa5, 0x6d, 0xa8, 0xc8, 0x68, 0x16, 0x8f, //0x0000b6f0 .quad -8136200465769716230 + 0x81, 0x2e, 0x24, 0x2a, 0x28, 0xef, 0xd3, 0xe5, //0x0000b6f8 .quad -1885900863153361279 + 0xbc, 0x87, 0x44, 0x69, 0x7d, 0x01, 0x6e, 0xf9, //0x0000b700 .quad -473439272678684740 + 0x10, 0x9d, 0x56, 0x1a, 0x79, 0x75, 0xa4, 0x8f, //0x0000b708 .quad -8096217067111932656 + 0xac, 0xa9, 0x95, 0xc3, 0xdc, 0x81, 0xc9, 0x37, //0x0000b710 .quad 4019886927579031980 + 0x55, 0x44, 0xec, 0x60, 0xd7, 0x92, 0x8d, 0xb3, //0x0000b718 .quad -5508585315462527915 + 0x17, 0x14, 0x7b, 0xf4, 0x53, 0xe2, 0xbb, 0x85, //0x0000b720 .quad -8810199395808373737 + 0x6a, 0x55, 0x27, 0x39, 0x8d, 0xf7, 0x70, 0xe0, //0x0000b728 .quad -2274045625900771990 + 0x8e, 0xec, 0xcc, 0x78, 0x74, 0x6d, 0x95, 0x93, //0x0000b730 .quad -7812217631593927538 + 0x62, 0x95, 0xb8, 0x43, 0xb8, 0x9a, 0x46, 0x8c, //0x0000b738 .quad -8338807543829064350 + 0xb2, 0x27, 0x00, 0x97, 0xd1, 0xc8, 0x7a, 0x38, //0x0000b740 .quad 4069786015789754290 + 0xbb, 0xba, 0xa6, 0x54, 0x66, 0x41, 0x58, 0xaf, //0x0000b748 .quad -5811823411358942533 + 0x9e, 0x31, 0xc0, 0xfc, 0x05, 0x7b, 0x99, 0x06, //0x0000b750 .quad 475546501309804958 + 0x6a, 0x69, 0xd0, 0xe9, 0xbf, 0x51, 0x2e, 0xdb, //0x0000b758 .quad -2653093245771290262 + 0x03, 0x1f, 0xf8, 0xbd, 0xe3, 0xec, 0x1f, 0x44, //0x0000b760 .quad 4908902581746016003 + 0xe2, 0x41, 0x22, 0xf2, 0x17, 0xf3, 0xfc, 0x88, //0x0000b768 .quad -8575712306248138270 + 0xc3, 0x26, 0x76, 0xad, 0x1c, 0xe8, 0x27, 0xd5, //0x0000b770 .quad -3087243809672255805 + 0x5a, 0xd2, 0xaa, 0xee, 0xdd, 0x2f, 0x3c, 0xab, //0x0000b778 .quad -6107954364382784934 + 0x74, 0xb0, 0xd3, 0xd8, 0x23, 0xe2, 0x71, 0x8a, //0x0000b780 .quad -8470740780517707660 + 0xf1, 0x86, 0x55, 0x6a, 0xd5, 0x3b, 0x0b, 0xd6, //0x0000b788 .quad -3023256937051093263 + 0x49, 0x4e, 0x84, 0x67, 0x56, 0x2d, 0x87, 0xf6, //0x0000b790 .quad -682526969396179383 + 0x56, 0x74, 0x75, 0x62, 0x65, 0x05, 0xc7, 0x85, //0x0000b798 .quad -8807064613298015146 + 0xdb, 0x61, 0x65, 0x01, 0xac, 0xf8, 0x28, 0xb4, //0x0000b7a0 .quad -5464844730172612133 + 0x6c, 0xd1, 0x12, 0xbb, 0xbe, 0xc6, 0x38, 0xa7, //0x0000b7a8 .quad -6397144748195131028 + 0x52, 0xba, 0xbe, 0x01, 0xd7, 0x36, 0x33, 0xe1, //0x0000b7b0 .quad -2219369894288377262 + 0xc7, 0x85, 0xd7, 0x69, 0x6e, 0xf8, 0x06, 0xd1, //0x0000b7b8 .quad -3384744916816525881 + 0x73, 0x34, 0x17, 0x61, 0x46, 0x02, 0xc0, 0xec, //0x0000b7c0 .quad -1387106183930235789 + 0x9c, 0xb3, 0x26, 0x02, 0x45, 0x5b, 0xa4, 0x82, //0x0000b7c8 .quad -9032994600651410532 + 0x90, 0x01, 0x5d, 0xf9, 0xd7, 0x02, 0xf0, 0x27, //0x0000b7d0 .quad 2877803288514593168 + 0x84, 0x60, 0xb0, 0x42, 0x16, 0x72, 0x4d, 0xa3, //0x0000b7d8 .quad -6679557232386875260 + 0xf4, 0x41, 0xb4, 0xf7, 0x8d, 0x03, 0xec, 0x31, //0x0000b7e0 .quad 3597254110643241460 + 0xa5, 0x78, 0x5c, 0xd3, 0x9b, 0xce, 0x20, 0xcc, //0x0000b7e8 .quad -3737760522056206171 + 0x71, 0x52, 0xa1, 0x75, 0x71, 0x04, 0x67, 0x7e, //0x0000b7f0 .quad 9108253656731439729 + 0xce, 0x96, 0x33, 0xc8, 0x42, 0x02, 0x29, 0xff, //0x0000b7f8 .quad -60514634142869810 + 0x86, 0xd3, 0x84, 0xe9, 0xc6, 0x62, 0x00, 0x0f, //0x0000b800 .quad 1080972517029761926 + 0x41, 0x3e, 0x20, 0xbd, 0x69, 0xa1, 0x79, 0x9f, //0x0000b808 .quad -6955350673980375487 + 0x68, 0x08, 0xe6, 0xa3, 0x78, 0x7b, 0xc0, 0x52, //0x0000b810 .quad 5962901664714590312 + 0xd1, 0x4d, 0x68, 0x2c, 0xc4, 0x09, 0x58, 0xc7, //0x0000b818 .quad -4082502324048081455 + 0x82, 0x8a, 0xdf, 0xcc, 0x56, 0x9a, 0x70, 0xa7, //0x0000b820 .quad -6381430974388925822 + 0x45, 0x61, 0x82, 0x37, 0x35, 0x0c, 0x2e, 0xf9, //0x0000b828 .quad -491441886632713915 + 0x91, 0xb6, 0x0b, 0x40, 0x76, 0x60, 0xa6, 0x88, //0x0000b830 .quad -8600080377420466543 + 0xcb, 0x7c, 0xb1, 0x42, 0xa1, 0xc7, 0xbc, 0x9b, //0x0000b838 .quad -7224680206786528053 + 0x35, 0xa4, 0x0e, 0xd0, 0x93, 0xf8, 0xcf, 0x6a, //0x0000b840 .quad 7696643601933968437 + 0xfe, 0xdb, 0x5d, 0x93, 0x89, 0xf9, 0xab, 0xc2, //0x0000b848 .quad -4419164240055772162 + 0x43, 0x4d, 0x12, 0xc4, 0xb8, 0xf6, 0x83, 0x05, //0x0000b850 .quad 397432465562684739 + 0xfe, 0x52, 0x35, 0xf8, 0xeb, 0xf7, 0x56, 0xf3, //0x0000b858 .quad -912269281642327298 + 0x4a, 0x70, 0x8b, 0x7a, 0x33, 0x7a, 0x72, 0xc3, //0x0000b860 .quad -4363290727450709942 + 0xde, 0x53, 0x21, 0x7b, 0xf3, 0x5a, 0x16, 0x98, //0x0000b868 .quad -7487697328667536418 + 0x5c, 0x4c, 0x2e, 0x59, 0xc0, 0x18, 0x4f, 0x74, //0x0000b870 .quad 8380944645968776284 + 0xd6, 0xa8, 0xe9, 0x59, 0xb0, 0xf1, 0x1b, 0xbe, //0x0000b878 .quad -4747935642407032618 + 0x73, 0xdf, 0x79, 0x6f, 0xf0, 0xde, 0x62, 0x11, //0x0000b880 .quad 1252808770606194547 + 0x0c, 0x13, 0x64, 0x70, 0x1c, 0xee, 0xa2, 0xed, //0x0000b888 .quad -1323233534581402868 + 0xa8, 0x2b, 0xac, 0x45, 0x56, 0xcb, 0xdd, 0x8a, //0x0000b890 .quad -8440366555225904216 + 0xe7, 0x8b, 0x3e, 0xc6, 0xd1, 0xd4, 0x85, 0x94, //0x0000b898 .quad -7744549986754458649 + 0x92, 0x36, 0x17, 0xd7, 0x2b, 0x3e, 0x95, 0x6d, //0x0000b8a0 .quad 7896285879677171346 + 0xe1, 0x2e, 0xce, 0x37, 0x06, 0x4a, 0xa7, 0xb9, //0x0000b8a8 .quad -5069001465015685407 + 0x37, 0x04, 0xdd, 0xcc, 0xb6, 0x8d, 0xfa, 0xc8, //0x0000b8b0 .quad -3964700705685699529 + 0x99, 0xba, 0xc1, 0xc5, 0x87, 0x1c, 0x11, 0xe8, //0x0000b8b8 .quad -1724565812842218855 + 0xa2, 0x22, 0x0a, 0x40, 0x92, 0x98, 0x9c, 0x1d, //0x0000b8c0 .quad 2133748077373825698 + 0xa0, 0x14, 0x99, 0xdb, 0xd4, 0xb1, 0x0a, 0x91, //0x0000b8c8 .quad -7995382660667468640 + 0x4b, 0xab, 0x0c, 0xd0, 0xb6, 0xbe, 0x03, 0x25, //0x0000b8d0 .quad 2667185096717282123 + 0xc8, 0x59, 0x7f, 0x12, 0x4a, 0x5e, 0x4d, 0xb5, //0x0000b8d8 .quad -5382542307406947896 + 0x1d, 0xd6, 0x0f, 0x84, 0x64, 0xae, 0x44, 0x2e, //0x0000b8e0 .quad 3333981370896602653 + 0x3a, 0x30, 0x1f, 0x97, 0xdc, 0xb5, 0xa0, 0xe2, //0x0000b8e8 .quad -2116491865831296966 + 0xd2, 0xe5, 0x89, 0xd2, 0xfe, 0xec, 0xea, 0x5c, //0x0000b8f0 .quad 6695424375237764562 + 0x24, 0x7e, 0x73, 0xde, 0xa9, 0x71, 0xa4, 0x8d, //0x0000b8f8 .quad -8240336443785642460 + 0x47, 0x5f, 0x2c, 0x87, 0x3e, 0xa8, 0x25, 0x74, //0x0000b900 .quad 8369280469047205703 + 0xad, 0x5d, 0x10, 0x56, 0x14, 0x8e, 0x0d, 0xb1, //0x0000b908 .quad -5688734536304665171 + 0x19, 0x77, 0xf7, 0x28, 0x4e, 0x12, 0x2f, 0xd1, //0x0000b910 .quad -3373457468973156583 + 0x18, 0x75, 0x94, 0x6b, 0x99, 0xf1, 0x50, 0xdd, //0x0000b918 .quad -2499232151953443560 + 0x6f, 0xaa, 0x9a, 0xd9, 0x70, 0x6b, 0xbd, 0x82, //0x0000b920 .quad -9025939945749304721 + 0x2f, 0xc9, 0x3c, 0xe3, 0xff, 0x96, 0x52, 0x8a, //0x0000b928 .quad -8479549122611984081 + 0x0b, 0x55, 0x01, 0x10, 0x4d, 0xc6, 0x6c, 0x63, //0x0000b930 .quad 7164319141522920715 + 0x7b, 0xfb, 0x0b, 0xdc, 0xbf, 0x3c, 0xe7, 0xac, //0x0000b938 .quad -5987750384837592197 + 0x4e, 0xaa, 0x01, 0x54, 0xe0, 0xf7, 0x47, 0x3c, //0x0000b940 .quad 4343712908476262990 + 0x5a, 0xfa, 0x0e, 0xd3, 0xef, 0x0b, 0x21, 0xd8, //0x0000b948 .quad -2873001962619602342 + 0x71, 0x0a, 0x81, 0x34, 0xec, 0xfa, 0xac, 0x65, //0x0000b950 .quad 7326506586225052273 + 0x78, 0x5c, 0xe9, 0xe3, 0x75, 0xa7, 0x14, 0x87, //0x0000b958 .quad -8713155254278333320 + 0x0d, 0x4d, 0xa1, 0x41, 0xa7, 0x39, 0x18, 0x7f, //0x0000b960 .quad 9158133232781315341 + 0x96, 0xb3, 0xe3, 0x5c, 0x53, 0xd1, 0xd9, 0xa8, //0x0000b968 .quad -6279758049420528746 + 0x50, 0xa0, 0x09, 0x12, 0x11, 0x48, 0xde, 0x1e, //0x0000b970 .quad 2224294504121868368 + 0x7c, 0xa0, 0x1c, 0x34, 0xa8, 0x45, 0x10, 0xd3, //0x0000b978 .quad -3238011543348273028 + 0x32, 0x04, 0x46, 0xab, 0x0a, 0xed, 0x4a, 0x93, //0x0000b980 .quad -7833187971778608078 + 0x4d, 0xe4, 0x91, 0x20, 0x89, 0x2b, 0xea, 0x83, //0x0000b988 .quad -8941286242233752499 + 0x3f, 0x85, 0x17, 0x56, 0x4d, 0xa8, 0x1d, 0xf8, //0x0000b990 .quad -568112927868484289 + 0x60, 0x5d, 0xb6, 0x68, 0x6b, 0xb6, 0xe4, 0xa4, //0x0000b998 .quad -6564921784364802720 + 0x8e, 0x66, 0x9d, 0xab, 0x60, 0x12, 0x25, 0x36, //0x0000b9a0 .quad 3901544858591782542 + 0xb9, 0xf4, 0xe3, 0x42, 0x06, 0xe4, 0x1d, 0xce, //0x0000b9a8 .quad -3594466212028615495 + 0x19, 0x60, 0x42, 0x6b, 0x7c, 0x2b, 0xd7, 0xc1, //0x0000b9b0 .quad -4479063491021217767 + 0xf3, 0x78, 0xce, 0xe9, 0x83, 0xae, 0xd2, 0x80, //0x0000b9b8 .quad -9164070410158966541 + 0x1f, 0xf8, 0x12, 0x86, 0x5b, 0xf6, 0x4c, 0xb2, //0x0000b9c0 .quad -5598829363776522209 + 0x30, 0x17, 0x42, 0xe4, 0x24, 0x5a, 0x07, 0xa1, //0x0000b9c8 .quad -6843401994271320272 + 0x27, 0xb6, 0x97, 0x67, 0xf2, 0x33, 0xe0, 0xde, //0x0000b9d0 .quad -2386850686293264857 + 0xfc, 0x9c, 0x52, 0x1d, 0xae, 0x30, 0x49, 0xc9, //0x0000b9d8 .quad -3942566474411762436 + 0xb1, 0xa3, 0x7d, 0x01, 0xef, 0x40, 0x98, 0x16, //0x0000b9e0 .quad 1628122660560806833 + 0x3c, 0x44, 0xa7, 0xa4, 0xd9, 0x7c, 0x9b, 0xfb, //0x0000b9e8 .quad -316522074587315140 + 0x4e, 0x86, 0xee, 0x60, 0x95, 0x28, 0x1f, 0x8e, //0x0000b9f0 .quad -8205795374004271538 + 0xa5, 0x8a, 0xe8, 0x06, 0x08, 0x2e, 0x41, 0x9d, //0x0000b9f8 .quad -7115355324258153819 + 0xe2, 0x27, 0x2a, 0xb9, 0xba, 0xf2, 0xa6, 0xf1, //0x0000ba00 .quad -1033872180650563614 + 0x4e, 0xad, 0xa2, 0x08, 0x8a, 0x79, 0x91, 0xc4, //0x0000ba08 .quad -4282508136895304370 + 0xdb, 0xb1, 0x74, 0x67, 0x69, 0xaf, 0x10, 0xae, //0x0000ba10 .quad -5904026244240592421 + 0xa2, 0x58, 0xcb, 0x8a, 0xec, 0xd7, 0xb5, 0xf5, //0x0000ba18 .quad -741449152691742558 + 0x29, 0xef, 0xa8, 0xe0, 0xa1, 0x6d, 0xca, 0xac, //0x0000ba20 .quad -5995859411864064215 + 0x65, 0x17, 0xbf, 0xd6, 0xf3, 0xa6, 0x91, 0x99, //0x0000ba28 .quad -7380934748073420955 + 0xf3, 0x2a, 0xd3, 0x58, 0x0a, 0x09, 0xfd, 0x17, //0x0000ba30 .quad 1728547772024695539 + 0x3f, 0xdd, 0x6e, 0xcc, 0xb0, 0x10, 0xf6, 0xbf, //0x0000ba38 .quad -4614482416664388289 + 0xb0, 0xf5, 0x07, 0xef, 0x4c, 0x4b, 0xfc, 0xdd, //0x0000ba40 .quad -2451001303396518480 + 0x8e, 0x94, 0x8a, 0xff, 0xdc, 0x94, 0xf3, 0xef, //0x0000ba48 .quad -1156417002403097458 + 0x8e, 0xf9, 0x64, 0x15, 0x10, 0xaf, 0xbd, 0x4a, //0x0000ba50 .quad 5385653213018257806 + 0xd9, 0x9c, 0xb6, 0x1f, 0x0a, 0x3d, 0xf8, 0x95, //0x0000ba58 .quad -7640289654143017767 + 0xf1, 0x37, 0xbe, 0x1a, 0xd4, 0x1a, 0x6d, 0x9d, //0x0000ba60 .quad -7102991539009341455 + 0x0f, 0x44, 0xa4, 0xa7, 0x4c, 0x4c, 0x76, 0xbb, //0x0000ba68 .quad -4938676049251384305 + 0xed, 0xc5, 0x6d, 0x21, 0x89, 0x61, 0xc8, 0x84, //0x0000ba70 .quad -8878739423761676819 + 0x13, 0x55, 0x8d, 0xd1, 0x5f, 0xdf, 0x53, 0xea, //0x0000ba78 .quad -1561659043136842477 + 0xb4, 0x9b, 0xe4, 0xb4, 0xf5, 0x3c, 0xfd, 0x32, //0x0000ba80 .quad 3674159897003727796 + 0x2c, 0x55, 0xf8, 0xe2, 0x9b, 0x6b, 0x74, 0x92, //0x0000ba88 .quad -7893565929601608404 + 0xa1, 0xc2, 0x1d, 0x22, 0x33, 0x8c, 0xbc, 0x3f, //0x0000ba90 .quad 4592699871254659745 + 0x77, 0x6a, 0xb6, 0xdb, 0x82, 0x86, 0x11, 0xb7, //0x0000ba98 .quad -5255271393574622601 + 0x4a, 0x33, 0xa5, 0xea, 0x3f, 0xaf, 0xab, 0x0f, //0x0000baa0 .quad 1129188820640936778 + 0x15, 0x05, 0xa4, 0x92, 0x23, 0xe8, 0xd5, 0xe4, //0x0000baa8 .quad -1957403223540890347 + 0x0e, 0x40, 0xa7, 0xf2, 0x87, 0x4d, 0xcb, 0x29, //0x0000bab0 .quad 3011586022114279438 + 0x2d, 0x83, 0xa6, 0x3b, 0x16, 0xb1, 0x05, 0x8f, //0x0000bab8 .quad -8140906042354138323 + 0x12, 0x10, 0x51, 0xef, 0xe9, 0x20, 0x3e, 0x74, //0x0000bac0 .quad 8376168546070237202 + 0xf8, 0x23, 0x90, 0xca, 0x5b, 0x1d, 0xc7, 0xb2, //0x0000bac8 .quad -5564446534515285000 + 0x16, 0x54, 0x25, 0x6b, 0x24, 0xa9, 0x4d, 0x91, //0x0000bad0 .quad -7976533391121755114 + 0xf6, 0x2c, 0x34, 0xbd, 0xb2, 0xe4, 0x78, 0xdf, //0x0000bad8 .quad -2343872149716718346 + 0x8e, 0x54, 0xf7, 0xc2, 0xb6, 0x89, 0xd0, 0x1a, //0x0000bae0 .quad 1932195658189984910 + 0x1a, 0x9c, 0x40, 0xb6, 0xef, 0x8e, 0xab, 0x8b, //0x0000bae8 .quad -8382449121214030822 + 0xb1, 0x29, 0xb5, 0x73, 0x24, 0xac, 0x84, 0xa1, //0x0000baf0 .quad -6808127464117294671 + 0x20, 0xc3, 0xd0, 0xa3, 0xab, 0x72, 0x96, 0xae, //0x0000baf8 .quad -5866375383090150624 + 0x1e, 0x74, 0xa2, 0x90, 0x2d, 0xd7, 0xe5, 0xc9, //0x0000bb00 .quad -3898473311719230434 + 0xe8, 0xf3, 0xc4, 0x8c, 0x56, 0x0f, 0x3c, 0xda, //0x0000bb08 .quad -2721283210435300376 + 0x92, 0x88, 0x65, 0x7a, 0x7c, 0xa6, 0x2f, 0x7e, //0x0000bb10 .quad 9092669226243950738 + 0x71, 0x18, 0xfb, 0x17, 0x96, 0x89, 0x65, 0x88, //0x0000bb18 .quad -8618331034163144591 + 0xb7, 0xea, 0xfe, 0x98, 0x1b, 0x90, 0xbb, 0xdd, //0x0000bb20 .quad -2469221522477225289 + 0x8d, 0xde, 0xf9, 0x9d, 0xfb, 0xeb, 0x7e, 0xaa, //0x0000bb28 .quad -6161227774276542835 + 0x65, 0xa5, 0x3e, 0x7f, 0x22, 0x74, 0x2a, 0x55, //0x0000bb30 .quad 6136845133758244197 + 0x31, 0x56, 0x78, 0x85, 0xfa, 0xa6, 0x1e, 0xd5, //0x0000bb38 .quad -3089848699418290639 + 0x5f, 0x27, 0x87, 0x8f, 0x95, 0x88, 0x3a, 0xd5, //0x0000bb40 .quad -3082000819042179233 + 0xde, 0x35, 0x6b, 0x93, 0x5c, 0x28, 0x33, 0x85, //0x0000bb48 .quad -8848684464777513506 + 0x37, 0xf1, 0x68, 0xf3, 0xba, 0x2a, 0x89, 0x8a, //0x0000bb50 .quad -8464187042230111945 + 0x56, 0x03, 0x46, 0xb8, 0x73, 0xf2, 0x7f, 0xa6, //0x0000bb58 .quad -6449169562544503978 + 0x85, 0x2d, 0x43, 0xb0, 0x69, 0x75, 0x2b, 0x2d, //0x0000bb60 .quad 3254824252494523781 + 0x2c, 0x84, 0x57, 0xa6, 0x10, 0xef, 0x1f, 0xd0, //0x0000bb68 .quad -3449775934753242068 + 0x73, 0xfc, 0x29, 0x0e, 0x62, 0x29, 0x3b, 0x9c, //0x0000bb70 .quad -7189106879045698445 + 0x9b, 0xb2, 0xf6, 0x67, 0x6a, 0xf5, 0x13, 0x82, //0x0000bb78 .quad -9073638986861858149 + 0x8f, 0x7b, 0xb4, 0x91, 0xba, 0xf3, 0x49, 0x83, //0x0000bb80 .quad -8986383598807123057 + 0x42, 0x5f, 0xf4, 0x01, 0xc5, 0xf2, 0x98, 0xa2, //0x0000bb88 .quad -6730362715149934782 + 0x73, 0x9a, 0x21, 0x36, 0xa9, 0x70, 0x1c, 0x24, //0x0000bb90 .quad 2602078556773259891 + 0x13, 0x77, 0x71, 0x42, 0x76, 0x2f, 0x3f, 0xcb, //0x0000bb98 .quad -3801267375510030573 + 0x10, 0x01, 0xaa, 0x83, 0xd3, 0x8c, 0x23, 0xed, //0x0000bba0 .quad -1359087822460813040 + 0xd7, 0xd4, 0x0d, 0xd3, 0x53, 0xfb, 0x0e, 0xfe, //0x0000bba8 .quad -139898200960150313 + 0xaa, 0x40, 0x4a, 0x32, 0x04, 0x38, 0x36, 0xf4, //0x0000bbb0 .quad -849429889038008150 + 0x06, 0xa5, 0xe8, 0x63, 0x14, 0x5d, 0xc9, 0x9e, //0x0000bbb8 .quad -7004965403241175802 + 0xd5, 0xd0, 0xdc, 0x3e, 0x05, 0xc6, 0x43, 0xb1, //0x0000bbc0 .quad -5673473379724898091 + 0x48, 0xce, 0xe2, 0x7c, 0x59, 0xb4, 0x7b, 0xc6, //0x0000bbc8 .quad -4144520735624081848 + 0x0a, 0x05, 0x94, 0x8e, 0x86, 0xb7, 0x94, 0xdd, //0x0000bbd0 .quad -2480155706228734710 + 0xda, 0x81, 0x1b, 0xdc, 0x6f, 0xa1, 0x1a, 0xf8, //0x0000bbd8 .quad -568964901102714406 + 0x26, 0x83, 0x1c, 0x19, 0xb4, 0xf2, 0x7c, 0xca, //0x0000bbe0 .quad -3855940325606653146 + 0x28, 0x31, 0x91, 0xe9, 0xe5, 0xa4, 0x10, 0x9b, //0x0000bbe8 .quad -7273132090830278360 + 0xf0, 0xa3, 0x63, 0x1f, 0x61, 0x2f, 0x1c, 0xfd, //0x0000bbf0 .quad -208239388580928528 + 0x72, 0x7d, 0xf5, 0x63, 0x1f, 0xce, 0xd4, 0xc1, //0x0000bbf8 .quad -4479729095110460046 + 0xec, 0x8c, 0x3c, 0x67, 0x39, 0x3b, 0x63, 0xbc, //0x0000bc00 .quad -4871985254153548564 + 0xcf, 0xdc, 0xf2, 0x3c, 0xa7, 0x01, 0x4a, 0xf2, //0x0000bc08 .quad -987975350460687153 + 0x13, 0xd8, 0x85, 0xe0, 0x03, 0x05, 0xbe, 0xd5, //0x0000bc10 .quad -3044990783845967853 + 0x01, 0xca, 0x17, 0x86, 0x08, 0x41, 0x6e, 0x97, //0x0000bc18 .quad -7535013621679011327 + 0x18, 0x4e, 0xa7, 0xd8, 0x44, 0x86, 0x2d, 0x4b, //0x0000bc20 .quad 5417133557047315992 + 0x82, 0xbc, 0x9d, 0xa7, 0x4a, 0xd1, 0x49, 0xbd, //0x0000bc28 .quad -4807081008671376254 + 0x9e, 0x21, 0xd1, 0x0e, 0xd6, 0xe7, 0xf8, 0xdd, //0x0000bc30 .quad -2451955090545630818 + 0xa2, 0x2b, 0x85, 0x51, 0x9d, 0x45, 0x9c, 0xec, //0x0000bc38 .quad -1397165242411832414 + 0x03, 0xb5, 0x42, 0xc9, 0xe5, 0x90, 0xbb, 0xca, //0x0000bc40 .quad -3838314940804713213 + 0x45, 0x3b, 0xf3, 0x52, 0x82, 0xab, 0xe1, 0x93, //0x0000bc48 .quad -7790757304148477115 + 0x43, 0x62, 0x93, 0x3b, 0x1f, 0x75, 0x6a, 0x3d, //0x0000bc50 .quad 4425478360848884291 + 0x17, 0x0a, 0xb0, 0xe7, 0x62, 0x16, 0xda, 0xb8, //0x0000bc58 .quad -5126760611758208489 + 0xd4, 0x3a, 0x78, 0x0a, 0x67, 0x12, 0xc5, 0x0c, //0x0000bc60 .quad 920161932633717460 + 0x9d, 0x0c, 0x9c, 0xa1, 0xfb, 0x9b, 0x10, 0xe7, //0x0000bc68 .quad -1796764746270372707 + 0xc5, 0x24, 0x8b, 0x66, 0x80, 0x2b, 0xfb, 0x27, //0x0000bc70 .quad 2880944217109767365 + 0xe2, 0x87, 0x01, 0x45, 0x7d, 0x61, 0x6a, 0x90, //0x0000bc78 .quad -8040506994060064798 + 0xf6, 0xed, 0x2d, 0x80, 0x60, 0xf6, 0xf9, 0xb1, //0x0000bc80 .quad -5622191765467566602 + 0xda, 0xe9, 0x41, 0x96, 0xdc, 0xf9, 0x84, 0xb4, //0x0000bc88 .quad -5438947724147693094 + 0x73, 0x69, 0x39, 0xa0, 0xf8, 0x73, 0x78, 0x5e, //0x0000bc90 .quad 6807318348447705459 + 0x51, 0x64, 0xd2, 0xbb, 0x53, 0x38, 0xa6, 0xe1, //0x0000bc98 .quad -2186998636757228463 + 0xe8, 0xe1, 0x23, 0x64, 0x7b, 0x48, 0x0b, 0xdb, //0x0000bca0 .quad -2662955059861265944 + 0xb2, 0x7e, 0x63, 0x55, 0x34, 0xe3, 0x07, 0x8d, //0x0000bca8 .quad -8284403175614349646 + 0x62, 0xda, 0x2c, 0x3d, 0x9a, 0x1a, 0xce, 0x91, //0x0000bcb0 .quad -7940379843253970334 + 0x5f, 0x5e, 0xbc, 0x6a, 0x01, 0xdc, 0x49, 0xb0, //0x0000bcb8 .quad -5743817951090549153 + 0xfb, 0x10, 0x78, 0xcc, 0x40, 0xa1, 0x41, 0x76, //0x0000bcc0 .quad 8521269269642088699 + 0xf7, 0x75, 0x6b, 0xc5, 0x01, 0x53, 0x5c, 0xdc, //0x0000bcc8 .quad -2568086420435798537 + 0x9d, 0x0a, 0xcb, 0x7f, 0xc8, 0x04, 0xe9, 0xa9, //0x0000bcd0 .quad -6203421752542164323 + 0xba, 0x29, 0x63, 0x1b, 0xe1, 0xb3, 0xb9, 0x89, //0x0000bcd8 .quad -8522583040413455942 + 0x44, 0xcd, 0xbd, 0x9f, 0xfa, 0x45, 0x63, 0x54, //0x0000bce0 .quad 6080780864604458308 + 0x29, 0xf4, 0x3b, 0x62, 0xd9, 0x20, 0x28, 0xac, //0x0000bce8 .quad -6041542782089432023 + 0x95, 0x40, 0xad, 0x47, 0x79, 0x17, 0x7c, 0xa9, //0x0000bcf0 .quad -6234081974526590827 + 0x33, 0xf1, 0xca, 0xba, 0x0f, 0x29, 0x32, 0xd7, //0x0000bcf8 .quad -2940242459184402125 + 0x5d, 0x48, 0xcc, 0xcc, 0xab, 0x8e, 0xed, 0x49, //0x0000bd00 .quad 5327070802775656541 + 0xc0, 0xd6, 0xbe, 0xd4, 0xa9, 0x59, 0x7f, 0x86, //0x0000bd08 .quad -8755180564631333184 + 0x74, 0x5a, 0xff, 0xbf, 0x56, 0xf2, 0x68, 0x5c, //0x0000bd10 .quad 6658838503469570676 + 0x70, 0x8c, 0xee, 0x49, 0x14, 0x30, 0x1f, 0xa8, //0x0000bd18 .quad -6332289687361778576 + 0x11, 0x31, 0xff, 0x6f, 0xec, 0x2e, 0x83, 0x73, //0x0000bd20 .quad 8323548129336963345 + 0x8c, 0x2f, 0x6a, 0x5c, 0x19, 0xfc, 0x26, 0xd2, //0x0000bd28 .quad -3303676090774835316 + 0xab, 0x7e, 0xff, 0xc5, 0x53, 0xfd, 0x31, 0xc8, //0x0000bd30 .quad -4021154456019173717 + 0xb7, 0x5d, 0xc2, 0xd9, 0x8f, 0x5d, 0x58, 0x83, //0x0000bd38 .quad -8982326584375353929 + 0x55, 0x5e, 0x7f, 0xb7, 0xa8, 0x7c, 0x3e, 0xba, //0x0000bd40 .quad -5026443070023967147 + 0x25, 0xf5, 0x32, 0xd0, 0xf3, 0x74, 0x2e, 0xa4, //0x0000bd48 .quad -6616222212041804507 + 0xeb, 0x35, 0x5f, 0xe5, 0xd2, 0x1b, 0xce, 0x28, //0x0000bd50 .quad 2940318199324816875 + 0x6f, 0xb2, 0x3f, 0xc4, 0x30, 0x12, 0x3a, 0xcd, //0x0000bd58 .quad -3658591746624867729 + 0xb3, 0x81, 0x5b, 0xcf, 0x63, 0xd1, 0x80, 0x79, //0x0000bd60 .quad 8755227902219092403 + 0x85, 0xcf, 0xa7, 0x7a, 0x5e, 0x4b, 0x44, 0x80, //0x0000bd68 .quad -9204148869281624187 + 0x1f, 0x62, 0x32, 0xc3, 0xbc, 0x05, 0xe1, 0xd7, //0x0000bd70 .quad -2891023177508298209 + 0x66, 0xc3, 0x51, 0x19, 0x36, 0x5e, 0x55, 0xa0, //0x0000bd78 .quad -6893500068174642330 + 0xa7, 0xfa, 0xfe, 0xf3, 0x2b, 0x47, 0xd9, 0x8d, //0x0000bd80 .quad -8225464990312760665 + 0x40, 0x34, 0xa6, 0x9f, 0xc3, 0xb5, 0x6a, 0xc8, //0x0000bd88 .quad -4005189066790915008 + 0x51, 0xb9, 0xfe, 0xf0, 0xf6, 0x98, 0x4f, 0xb1, //0x0000bd90 .quad -5670145219463562927 + 0x50, 0xc1, 0x8f, 0x87, 0x34, 0x63, 0x85, 0xfa, //0x0000bd98 .quad -394800315061255856 + 0xd3, 0x33, 0x9f, 0x56, 0x9a, 0xbf, 0xd1, 0x6e, //0x0000bda0 .quad 7985374283903742931 + 0xd2, 0xd8, 0xb9, 0xd4, 0x00, 0x5e, 0x93, 0x9c, //0x0000bda8 .quad -7164279224554366766 + 0xc8, 0x00, 0x47, 0xec, 0x80, 0x2f, 0x86, 0x0a, //0x0000bdb0 .quad 758345818024902856 + 0x07, 0x4f, 0xe8, 0x09, 0x81, 0x35, 0xb8, 0xc3, //0x0000bdb8 .quad -4343663012265570553 + 0xfa, 0xc0, 0x58, 0x27, 0x61, 0xbb, 0x27, 0xcd, //0x0000bdc0 .quad -3663753745896259334 + 0xc8, 0x62, 0x62, 0x4c, 0xe1, 0x42, 0xa6, 0xf4, //0x0000bdc8 .quad -817892746904575288 + 0x9c, 0x78, 0x97, 0xb8, 0x1c, 0xd5, 0x38, 0x80, //0x0000bdd0 .quad -9207375118826243940 + 0xbd, 0x7d, 0xbd, 0xcf, 0xcc, 0xe9, 0xe7, 0x98, //0x0000bdd8 .quad -7428711994456441411 + 0xc3, 0x56, 0xbd, 0xe6, 0x63, 0x0a, 0x47, 0xe0, //0x0000bde0 .quad -2285846861678029117 + 0x2c, 0xdd, 0xac, 0x03, 0x40, 0xe4, 0x21, 0xbf, //0x0000bde8 .quad -4674203974643163860 + 0x74, 0xac, 0x6c, 0xe0, 0xfc, 0xcc, 0x58, 0x18, //0x0000bdf0 .quad 1754377441329851508 + 0x78, 0x14, 0x98, 0x04, 0x50, 0x5d, 0xea, 0xee, //0x0000bdf8 .quad -1231068949876566920 + 0xc8, 0xeb, 0x43, 0x0c, 0x1e, 0x80, 0x37, 0x0f, //0x0000be00 .quad 1096485900831157192 + 0xcb, 0x0c, 0xdf, 0x02, 0x52, 0x7a, 0x52, 0x95, //0x0000be08 .quad -7686947121313936181 + 0xba, 0xe6, 0x54, 0x8f, 0x25, 0x60, 0x05, 0xd3, //0x0000be10 .quad -3241078642388441414 + 0xfd, 0xcf, 0x96, 0x83, 0xe6, 0x18, 0xa7, 0xba, //0x0000be18 .quad -4996997883215032323 + 0x69, 0x20, 0x2a, 0xf3, 0x2e, 0xb8, 0xc6, 0x47, //0x0000be20 .quad 5172023733869224041 + 0xfd, 0x83, 0x7c, 0x24, 0x20, 0xdf, 0x50, 0xe9, //0x0000be28 .quad -1634561335591402499 + 0x41, 0x54, 0xfa, 0x57, 0x1d, 0x33, 0xdc, 0x4c, //0x0000be30 .quad 5538357842881958977 + 0x7e, 0xd2, 0xcd, 0x16, 0x74, 0x8b, 0xd2, 0x91, //0x0000be38 .quad -7939129862385708418 + 0x52, 0xe9, 0xf8, 0xad, 0xe4, 0x3f, 0x13, 0xe0, //0x0000be40 .quad -2300424733252327086 + 0x1d, 0x47, 0x81, 0x1c, 0x51, 0x2e, 0x47, 0xb6, //0x0000be48 .quad -5312226309554747619 + 0xa6, 0x23, 0x77, 0xd9, 0xdd, 0x0f, 0x18, 0x58, //0x0000be50 .quad 6347841120289366950 + 0xe5, 0x98, 0xa1, 0x63, 0xe5, 0xf9, 0xd8, 0xe3, //0x0000be58 .quad -2028596868516046619 + 0x48, 0x76, 0xea, 0xa7, 0xea, 0x09, 0x0f, 0x57, //0x0000be60 .quad 6273243709394548296 + 0x8f, 0xff, 0x44, 0x5e, 0x2f, 0x9c, 0x67, 0x8e, //0x0000be68 .quad -8185402070463610993 + 0xda, 0x13, 0xe5, 0x51, 0x65, 0xcc, 0xd2, 0x2c, //0x0000be70 .quad 3229868618315797466 + 0x73, 0x3f, 0xd6, 0x35, 0x3b, 0x83, 0x01, 0xb2, //0x0000be78 .quad -5620066569652125837 + 0xd1, 0x58, 0x5e, 0xa6, 0x7e, 0x7f, 0x07, 0xf8, //0x0000be80 .quad -574350245532641071 + 0x4f, 0xcf, 0x4b, 0x03, 0x0a, 0xe4, 0x81, 0xde, //0x0000be88 .quad -2413397193637769393 + 0x82, 0xf7, 0xfa, 0x27, 0xaf, 0xaf, 0x04, 0xfb, //0x0000be90 .quad -358968903457900670 + 0x91, 0x61, 0x0f, 0x42, 0x86, 0x2e, 0x11, 0x8b, //0x0000be98 .quad -8425902273664687727 + 0x63, 0xb5, 0xf9, 0xf1, 0x9a, 0xdb, 0xc5, 0x79, //0x0000bea0 .quad 8774660907532399971 + 0xf6, 0x39, 0x93, 0xd2, 0x27, 0x7a, 0xd5, 0xad, //0x0000bea8 .quad -5920691823653471754 + 0xbc, 0x22, 0x78, 0xae, 0x81, 0x52, 0x37, 0x18, //0x0000beb0 .quad 1744954097560724156 + 0x74, 0x08, 0x38, 0xc7, 0xb1, 0xd8, 0x4a, 0xd9, //0x0000beb8 .quad -2789178761139451788 + 0xb5, 0x15, 0x0b, 0x0d, 0x91, 0x93, 0x22, 0x8f, //0x0000bec0 .quad -8132775725879323211 + 0x48, 0x05, 0x83, 0x1c, 0x6f, 0xc7, 0xce, 0x87, //0x0000bec8 .quad -8660765753353239224 + 0x22, 0xdb, 0x4d, 0x50, 0x75, 0x38, 0xeb, 0xb2, //0x0000bed0 .quad -5554283638921766110 + 0x9a, 0xc6, 0xa3, 0xe3, 0x4a, 0x79, 0xc2, 0xa9, //0x0000bed8 .quad -6214271173264161126 + 0xeb, 0x51, 0x61, 0xa4, 0x92, 0x06, 0xa6, 0x5f, //0x0000bee0 .quad 6892203506629956075 + 0x41, 0xb8, 0x8c, 0x9c, 0x9d, 0x17, 0x33, 0xd4, //0x0000bee8 .quad -3156152948152813503 + 0x33, 0xd3, 0xbc, 0xa6, 0x1b, 0xc4, 0xc7, 0xdb, //0x0000bef0 .quad -2609901835997359309 + 0x28, 0xf3, 0xd7, 0x81, 0xc2, 0xee, 0x9f, 0x84, //0x0000bef8 .quad -8890124620236590296 + 0x00, 0x08, 0x6c, 0x90, 0x22, 0xb5, 0xb9, 0x12, //0x0000bf00 .quad 1349308723430688768 + 0xf3, 0xef, 0x4d, 0x22, 0x73, 0xea, 0xc7, 0xa5, //0x0000bf08 .quad -6500969756868349965 + 0x00, 0x0a, 0x87, 0x34, 0x6b, 0x22, 0x68, 0xd7, //0x0000bf10 .quad -2925050114139026944 + 0xef, 0x6b, 0xe1, 0xea, 0x0f, 0xe5, 0x39, 0xcf, //0x0000bf18 .quad -3514526177658049553 + 0x40, 0x66, 0xd4, 0x00, 0x83, 0x15, 0xa1, 0xe6, //0x0000bf20 .quad -1828156321336891840 + 0x75, 0xe3, 0xcc, 0xf2, 0x29, 0x2f, 0x84, 0x81, //0x0000bf28 .quad -9114107888677362827 + 0xd0, 0x7f, 0x09, 0xc1, 0xe3, 0x5a, 0x49, 0x60, //0x0000bf30 .quad 6938176635183661008 + 0x53, 0x1c, 0x80, 0x6f, 0xf4, 0x3a, 0xe5, 0xa1, //0x0000bf38 .quad -6780948842419315629 + 0xc4, 0xdf, 0x4b, 0xb1, 0x9c, 0xb1, 0x5b, 0x38, //0x0000bf40 .quad 4061034775552188356 + 0x68, 0x23, 0x60, 0x8b, 0xb1, 0x89, 0x5e, 0xca, //0x0000bf48 .quad -3864500034596756632 + 0xb5, 0xd7, 0x9e, 0xdd, 0x03, 0x9e, 0x72, 0x46, //0x0000bf50 .quad 5076293469440235445 + 0x42, 0x2c, 0x38, 0xee, 0x1d, 0x2c, 0xf6, 0xfc, //0x0000bf58 .quad -218939024818557886 + 0xd1, 0x46, 0x83, 0x6a, 0xc2, 0xa2, 0x07, 0x6c, //0x0000bf60 .quad 7784369436827535057 + 0xa9, 0x1b, 0xe3, 0xb4, 0x92, 0xdb, 0x19, 0x9e, //0x0000bf68 .quad -7054365918152680535 + 0x85, 0x18, 0x24, 0x05, 0x73, 0x8b, 0x09, 0xc7, //0x0000bf70 .quad -4104596259247744891 + 0x93, 0xe2, 0x1b, 0x62, 0x77, 0x52, 0xa0, 0xc5, //0x0000bf78 .quad -4206271379263462765 + 0xa7, 0x1e, 0x6d, 0xc6, 0x4f, 0xee, 0xcb, 0xb8, //0x0000bf80 .quad -5130745324059681113 + 0x38, 0xdb, 0xa2, 0x3a, 0x15, 0x67, 0x08, 0xf7, //0x0000bf88 .quad -646153205651940552 + 0x28, 0x33, 0x04, 0xdc, 0xf1, 0x74, 0x7f, 0x73, //0x0000bf90 .quad 8322499218531169064 + 0x03, 0xc9, 0xa5, 0x44, 0x6d, 0x40, 0x65, 0x9a, //0x0000bf98 .quad -7321374781173544701 + 0xf2, 0x3f, 0x05, 0x53, 0x2e, 0x52, 0x5f, 0x50, //0x0000bfa0 .quad 5791438004736573426 + 0x44, 0x3b, 0xcf, 0x95, 0x88, 0x90, 0xfe, 0xc0, //0x0000bfa8 .quad -4540032458039542972 + 0xef, 0x8f, 0xc6, 0xe7, 0xb9, 0x26, 0x77, 0x64, //0x0000bfb0 .quad 7239297505920716783 + 0x15, 0x0a, 0x43, 0xbb, 0xaa, 0x34, 0x3e, 0xf1, //0x0000bfb8 .quad -1063354554122040811 + 0xf5, 0x19, 0xdc, 0x30, 0x34, 0x78, 0xca, 0x5e, //0x0000bfc0 .quad 6830403950414141941 + 0x4d, 0xe6, 0x09, 0xb5, 0xea, 0xe0, 0xc6, 0x96, //0x0000bfc8 .quad -7582125623967357363 + 0x72, 0x20, 0x13, 0x3d, 0x41, 0x16, 0x7d, 0xb6, //0x0000bfd0 .quad -5297053117264486286 + 0xe0, 0x5f, 0x4c, 0x62, 0x25, 0x99, 0x78, 0xbc, //0x0000bfd8 .quad -4865971011531808800 + 0x8f, 0xe8, 0x57, 0x8c, 0xd1, 0x5b, 0x1c, 0xe4, //0x0000bfe0 .quad -2009630378153219953 + 0xd8, 0x77, 0xdf, 0xba, 0x6e, 0xbf, 0x96, 0xeb, //0x0000bfe8 .quad -1470777745987373096 + 0x59, 0xf1, 0xb6, 0xf7, 0x62, 0xb9, 0x91, 0x8e, //0x0000bff0 .quad -8173548013986844327 + 0xe7, 0xaa, 0xcb, 0x34, 0xa5, 0x37, 0x3e, 0x93, //0x0000bff8 .quad -7836765118883190041 + 0xb0, 0xad, 0xa4, 0xb5, 0xbb, 0x27, 0x36, 0x72, //0x0000c000 .quad 8229809056225996208 + 0xa1, 0x95, 0xfe, 0x81, 0x8e, 0xc5, 0x0d, 0xb8, //0x0000c008 .quad -5184270380176599647 + 0x1c, 0xd9, 0x0d, 0xa3, 0xaa, 0xb1, 0xc3, 0xce, //0x0000c010 .quad -3547796734999668452 + 0x09, 0x3b, 0x7e, 0x22, 0xf2, 0x36, 0x11, 0xe6, //0x0000c018 .quad -1868651956793361655 + 0xb1, 0xa7, 0xe8, 0xa5, 0x0a, 0x4f, 0x3a, 0x21, //0x0000c020 .quad 2394313059052595121 + 0xe6, 0xe4, 0x8e, 0x55, 0x57, 0xc2, 0xca, 0x8f, //0x0000c028 .quad -8085436500636932890 + 0x9d, 0xd1, 0x62, 0x4f, 0xcd, 0xe2, 0x88, 0xa9, //0x0000c030 .quad -6230480713039031907 + 0x1f, 0x9e, 0xf2, 0x2a, 0xed, 0x72, 0xbd, 0xb3, //0x0000c038 .quad -5495109607368778209 + 0x05, 0x86, 0x3b, 0xa3, 0x80, 0x1b, 0xeb, 0x93, //0x0000c040 .quad -7788100891298789883 + 0xa7, 0x45, 0xaf, 0x75, 0xa8, 0xcf, 0xac, 0xe0, //0x0000c048 .quad -2257200990783584857 + 0xc3, 0x33, 0x05, 0x66, 0x30, 0xf1, 0x72, 0xbc, //0x0000c050 .quad -4867563057061743677 + 0x88, 0x8b, 0x8d, 0x49, 0xc9, 0x01, 0x6c, 0x8c, //0x0000c058 .quad -8328279646880822392 + 0xb4, 0x80, 0x86, 0x7f, 0x7c, 0xad, 0x8f, 0xeb, //0x0000c060 .quad -1472767802899791692 + 0x6a, 0xee, 0xf0, 0x9b, 0x3b, 0x02, 0x87, 0xaf, //0x0000c068 .quad -5798663540173640086 + 0xe1, 0x20, 0x68, 0x9f, 0xdb, 0x98, 0x73, 0xa6, //0x0000c070 .quad -6452645772052127519 + 0x05, 0x2a, 0xed, 0x82, 0xca, 0xc2, 0x68, 0xdb, //0x0000c078 .quad -2636643406789662203 + 0x8c, 0x14, 0xa1, 0x43, 0x89, 0x3f, 0x08, 0x88, //0x0000c080 .quad -8644589625959967604 + 0x43, 0x3a, 0xd4, 0x91, 0xbe, 0x79, 0x21, 0x89, //0x0000c088 .quad -8565431156884620733 + 0xb0, 0x59, 0x89, 0x94, 0x6b, 0x4f, 0x0a, 0x6a, //0x0000c090 .quad 7641007041259592112 + 0xd4, 0x48, 0x49, 0x36, 0x2e, 0xd8, 0x69, 0xab, //0x0000c098 .quad -6095102927678388012 + 0x1c, 0xb0, 0xab, 0x79, 0x46, 0xe3, 0x8c, 0x84, //0x0000c0a0 .quad -8895485272135061476 + 0x09, 0x9b, 0xdb, 0xc3, 0x39, 0x4e, 0x44, 0xd6, //0x0000c0a8 .quad -3007192641170597111 + 0x11, 0x4e, 0x0b, 0x0c, 0x0c, 0x0e, 0xd8, 0xf2, //0x0000c0b0 .quad -947992276657025519 + 0xe5, 0x40, 0x69, 0x1a, 0xe4, 0xb0, 0xea, 0x85, //0x0000c0b8 .quad -8797024428372705051 + 0x95, 0x21, 0x0e, 0x0f, 0x8f, 0x11, 0x8e, 0x6f, //0x0000c0c0 .quad 8038381691033493909 + 0x1f, 0x91, 0x03, 0x21, 0x1d, 0x5d, 0x65, 0xa7, //0x0000c0c8 .quad -6384594517038493409 + 0xfb, 0xa9, 0xd1, 0xd2, 0xf2, 0x95, 0x71, 0x4b, //0x0000c0d0 .quad 5436291095364479483 + 0x67, 0x75, 0x44, 0x69, 0x64, 0xb4, 0x3e, 0xd1, //0x0000c0d8 .quad -3369057127870728857 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000c0e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x0000c0f0 .p2align 4, 0x00 + //0x0000c0f0 _POW_TAB + 0x01, 0x00, 0x00, 0x00, //0x0000c0f0 .long 1 + 0x03, 0x00, 0x00, 0x00, //0x0000c0f4 .long 3 + 0x06, 0x00, 0x00, 0x00, //0x0000c0f8 .long 6 + 0x09, 0x00, 0x00, 0x00, //0x0000c0fc .long 9 + 0x0d, 0x00, 0x00, 0x00, //0x0000c100 .long 13 + 0x10, 0x00, 0x00, 0x00, //0x0000c104 .long 16 + 0x13, 0x00, 0x00, 0x00, //0x0000c108 .long 19 + 0x17, 0x00, 0x00, 0x00, //0x0000c10c .long 23 + 0x1a, 0x00, 0x00, 0x00, //0x0000c110 .long 26 + //0x0000c114 .p2align 2, 0x00 + //0x0000c114 _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x0000c114 .long 2 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000c118 .p2align 4, 0x00 + //0x0000c120 _Digits + 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30, 0x33, 0x30, 0x34, 0x30, 0x35, 0x30, 0x36, 0x30, 0x37, //0x0000c120 QUAD $0x3330323031303030; QUAD $0x3730363035303430 // .ascii 16, '0001020304050607' + 0x30, 0x38, 0x30, 0x39, 0x31, 0x30, 0x31, 0x31, 0x31, 0x32, 0x31, 0x33, 0x31, 0x34, 0x31, 0x35, //0x0000c130 QUAD $0x3131303139303830; QUAD $0x3531343133313231 // .ascii 16, '0809101112131415' + 0x31, 0x36, 0x31, 0x37, 0x31, 0x38, 0x31, 0x39, 0x32, 0x30, 0x32, 0x31, 0x32, 0x32, 0x32, 0x33, //0x0000c140 QUAD $0x3931383137313631; QUAD $0x3332323231323032 // .ascii 16, '1617181920212223' + 0x32, 0x34, 0x32, 0x35, 0x32, 0x36, 0x32, 0x37, 0x32, 0x38, 0x32, 0x39, 0x33, 0x30, 0x33, 0x31, //0x0000c150 QUAD $0x3732363235323432; QUAD $0x3133303339323832 // .ascii 16, '2425262728293031' + 0x33, 0x32, 0x33, 0x33, 0x33, 0x34, 0x33, 0x35, 0x33, 0x36, 0x33, 0x37, 0x33, 0x38, 0x33, 0x39, //0x0000c160 QUAD $0x3533343333333233; QUAD $0x3933383337333633 // .ascii 16, '3233343536373839' + 0x34, 0x30, 0x34, 0x31, 0x34, 0x32, 0x34, 0x33, 0x34, 0x34, 0x34, 0x35, 0x34, 0x36, 0x34, 0x37, //0x0000c170 QUAD $0x3334323431343034; QUAD $0x3734363435343434 // .ascii 16, '4041424344454647' + 0x34, 0x38, 0x34, 0x39, 0x35, 0x30, 0x35, 0x31, 0x35, 0x32, 0x35, 0x33, 0x35, 0x34, 0x35, 0x35, //0x0000c180 QUAD $0x3135303539343834; QUAD $0x3535343533353235 // .ascii 16, '4849505152535455' + 0x35, 0x36, 0x35, 0x37, 0x35, 0x38, 0x35, 0x39, 0x36, 0x30, 0x36, 0x31, 0x36, 0x32, 0x36, 0x33, //0x0000c190 QUAD $0x3935383537353635; QUAD $0x3336323631363036 // .ascii 16, '5657585960616263' + 0x36, 0x34, 0x36, 0x35, 0x36, 0x36, 0x36, 0x37, 0x36, 0x38, 0x36, 0x39, 0x37, 0x30, 0x37, 0x31, //0x0000c1a0 QUAD $0x3736363635363436; QUAD $0x3137303739363836 // .ascii 16, '6465666768697071' + 0x37, 0x32, 0x37, 0x33, 0x37, 0x34, 0x37, 0x35, 0x37, 0x36, 0x37, 0x37, 0x37, 0x38, 0x37, 0x39, //0x0000c1b0 QUAD $0x3537343733373237; QUAD $0x3937383737373637 // .ascii 16, '7273747576777879' + 0x38, 0x30, 0x38, 0x31, 0x38, 0x32, 0x38, 0x33, 0x38, 0x34, 0x38, 0x35, 0x38, 0x36, 0x38, 0x37, //0x0000c1c0 QUAD $0x3338323831383038; QUAD $0x3738363835383438 // .ascii 16, '8081828384858687' + 0x38, 0x38, 0x38, 0x39, 0x39, 0x30, 0x39, 0x31, 0x39, 0x32, 0x39, 0x33, 0x39, 0x34, 0x39, 0x35, //0x0000c1d0 QUAD $0x3139303939383838; QUAD $0x3539343933393239 // .ascii 16, '8889909192939495' + 0x39, 0x36, 0x39, 0x37, 0x39, 0x38, 0x39, 0x39, //0x0000c1e0 QUAD $0x3939383937393639 // .ascii 8, '96979899' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000c1e8 .p2align 4, 0x00 + //0x0000c1f0 _pow10_ceil_sig.g + 0x4f, 0xdc, 0xbc, 0xbe, 0xfc, 0xb1, 0x77, 0xff, //0x0000c1f0 .quad -38366372719436721 + 0x7b, 0x0f, 0xbb, 0x13, 0x9c, 0xe8, 0xe8, 0x25, //0x0000c1f8 .quad 2731688931043774331 + 0xb1, 0x09, 0x36, 0xf7, 0x3d, 0xcf, 0xaa, 0x9f, //0x0000c200 .quad -6941508010590729807 + 0xad, 0xe9, 0x54, 0x8c, 0x61, 0x91, 0xb1, 0x77, //0x0000c208 .quad 8624834609543440813 + 0x1d, 0x8c, 0x03, 0x75, 0x0d, 0x83, 0x95, 0xc7, //0x0000c210 .quad -4065198994811024355 + 0x18, 0x24, 0x6a, 0xef, 0xb9, 0xf5, 0x9d, 0xd5, //0x0000c218 .quad -3054014793352862696 + 0x25, 0x6f, 0x44, 0xd2, 0xd0, 0xe3, 0x7a, 0xf9, //0x0000c220 .quad -469812725086392539 + 0x1e, 0xad, 0x44, 0x6b, 0x28, 0x73, 0x05, 0x4b, //0x0000c228 .quad 5405853545163697438 + 0x77, 0xc5, 0x6a, 0x83, 0x62, 0xce, 0xec, 0x9b, //0x0000c230 .quad -7211161980820077193 + 0x33, 0xec, 0x0a, 0x43, 0xf9, 0x67, 0xe3, 0x4e, //0x0000c238 .quad 5684501474941004851 + 0xd5, 0x76, 0x45, 0x24, 0xfb, 0x01, 0xe8, 0xc2, //0x0000c240 .quad -4402266457597708587 + 0x40, 0xa7, 0xcd, 0x93, 0xf7, 0x41, 0x9c, 0x22, //0x0000c248 .quad 2493940825248868160 + 0x8a, 0xd4, 0x56, 0xed, 0x79, 0x02, 0xa2, 0xf3, //0x0000c250 .quad -891147053569747830 + 0x10, 0x11, 0xc1, 0x78, 0x75, 0x52, 0x43, 0x6b, //0x0000c258 .quad 7729112049988473104 + 0xd6, 0x44, 0x56, 0x34, 0x8c, 0x41, 0x45, 0x98, //0x0000c260 .quad -7474495936122174250 + 0xaa, 0xaa, 0x78, 0x6b, 0x89, 0x13, 0x0a, 0x83, //0x0000c268 .quad -9004363024039368022 + 0x0c, 0xd6, 0x6b, 0x41, 0xef, 0x91, 0x56, 0xbe, //0x0000c270 .quad -4731433901725329908 + 0x54, 0xd5, 0x56, 0xc6, 0x6b, 0x98, 0xcc, 0x23, //0x0000c278 .quad 2579604275232953684 + 0x8f, 0xcb, 0xc6, 0x11, 0x6b, 0x36, 0xec, 0xed, //0x0000c280 .quad -1302606358729274481 + 0xa9, 0x8a, 0xec, 0xb7, 0x86, 0xbe, 0xbf, 0x2c, //0x0000c288 .quad 3224505344041192105 + 0x39, 0x3f, 0x1c, 0xeb, 0x02, 0xa2, 0xb3, 0x94, //0x0000c290 .quad -7731658001846878407 + 0xaa, 0xd6, 0xf3, 0x32, 0x14, 0xd7, 0xf7, 0x7b, //0x0000c298 .quad 8932844867666826922 + 0x07, 0x4f, 0xe3, 0xa5, 0x83, 0x8a, 0xe0, 0xb9, //0x0000c2a0 .quad -5052886483881210105 + 0x54, 0xcc, 0xb0, 0x3f, 0xd9, 0xcc, 0xf5, 0xda, //0x0000c2a8 .quad -2669001970698630060 + 0xc9, 0x22, 0x5c, 0x8f, 0x24, 0xad, 0x58, 0xe8, //0x0000c2b0 .quad -1704422086424124727 + 0x69, 0xff, 0x9c, 0x8f, 0x0f, 0x40, 0xb3, 0xd1, //0x0000c2b8 .quad -3336252463373287575 + 0xbe, 0x95, 0x99, 0xd9, 0x36, 0x6c, 0x37, 0x91, //0x0000c2c0 .quad -7982792831656159810 + 0xa2, 0x1f, 0xc2, 0xb9, 0x09, 0x08, 0x10, 0x23, //0x0000c2c8 .quad 2526528228819083170 + 0x2d, 0xfb, 0xff, 0x8f, 0x44, 0x47, 0x85, 0xb5, //0x0000c2d0 .quad -5366805021142811859 + 0x8b, 0xa7, 0x32, 0x28, 0x0c, 0x0a, 0xd4, 0xab, //0x0000c2d8 .quad -6065211750830921845 + 0xf9, 0xf9, 0xff, 0xb3, 0x15, 0x99, 0xe6, 0xe2, //0x0000c2e0 .quad -2096820258001126919 + 0x6d, 0x51, 0x3f, 0x32, 0x8f, 0x0c, 0xc9, 0x16, //0x0000c2e8 .quad 1641857348316123501 + 0x3b, 0xfc, 0x7f, 0x90, 0xad, 0x1f, 0xd0, 0x8d, //0x0000c2f0 .quad -8228041688891786181 + 0xe4, 0x92, 0x67, 0x7f, 0xd9, 0xa7, 0x3d, 0xae, //0x0000c2f8 .quad -5891368184943504668 + 0x4a, 0xfb, 0x9f, 0xf4, 0x98, 0x27, 0x44, 0xb1, //0x0000c300 .quad -5673366092687344822 + 0x9d, 0x77, 0x41, 0xdf, 0xcf, 0x11, 0xcd, 0x99, //0x0000c308 .quad -7364210231179380835 + 0x1d, 0xfa, 0xc7, 0x31, 0x7f, 0x31, 0x95, 0xdd, //0x0000c310 .quad -2480021597431793123 + 0x84, 0xd5, 0x11, 0xd7, 0x43, 0x56, 0x40, 0x40, //0x0000c318 .quad 4629795266307937668 + 0x52, 0xfc, 0x1c, 0x7f, 0xef, 0x3e, 0x7d, 0x8a, //0x0000c320 .quad -8467542526035952558 + 0x73, 0x25, 0x6b, 0x66, 0xea, 0x35, 0x28, 0x48, //0x0000c328 .quad 5199465050656154995 + 0x66, 0x3b, 0xe4, 0x5e, 0xab, 0x8e, 0x1c, 0xad, //0x0000c330 .quad -5972742139117552794 + 0xd0, 0xee, 0x05, 0x00, 0x65, 0x43, 0x32, 0xda, //0x0000c338 .quad -2724040723534582064 + 0x40, 0x4a, 0x9d, 0x36, 0x56, 0xb2, 0x63, 0xd8, //0x0000c340 .quad -2854241655469553088 + 0x83, 0x6a, 0x07, 0x40, 0x3e, 0xd4, 0xbe, 0x90, //0x0000c348 .quad -8016736922845615485 + 0x68, 0x4e, 0x22, 0xe2, 0x75, 0x4f, 0x3e, 0x87, //0x0000c350 .quad -8701430062309552536 + 0x92, 0xa2, 0x04, 0xe8, 0xa6, 0x44, 0x77, 0x5a, //0x0000c358 .quad 6518754469289960082 + 0x02, 0xe2, 0xaa, 0x5a, 0x53, 0xe3, 0x0d, 0xa9, //0x0000c360 .quad -6265101559459552766 + 0x37, 0xcb, 0x05, 0xa2, 0xd0, 0x15, 0x15, 0x71, //0x0000c368 .quad 8148443086612450103 + 0x83, 0x9a, 0x55, 0x31, 0x28, 0x5c, 0x51, 0xd3, //0x0000c370 .quad -3219690930897053053 + 0x04, 0x3e, 0x87, 0xca, 0x44, 0x5b, 0x5a, 0x0d, //0x0000c378 .quad 962181821410786820 + 0x91, 0x80, 0xd5, 0x1e, 0x99, 0xd9, 0x12, 0x84, //0x0000c380 .quad -8929835859451740015 + 0xc3, 0x86, 0x94, 0xfe, 0x0a, 0x79, 0x58, 0xe8, //0x0000c388 .quad -1704479370831952189 + 0xb6, 0xe0, 0x8a, 0x66, 0xff, 0x8f, 0x17, 0xa5, //0x0000c390 .quad -6550608805887287114 + 0x73, 0xa8, 0x39, 0xbe, 0x4d, 0x97, 0x6e, 0x62, //0x0000c398 .quad 7092772823314835571 + 0xe3, 0x98, 0x2d, 0x40, 0xff, 0x73, 0x5d, 0xce, //0x0000c3a0 .quad -3576574988931720989 + 0x90, 0x12, 0xc8, 0x2d, 0x21, 0x3d, 0x0a, 0xfb, //0x0000c3a8 .quad -357406007711231344 + 0x8e, 0x7f, 0x1c, 0x88, 0x7f, 0x68, 0xfa, 0x80, //0x0000c3b0 .quad -9152888395723407474 + 0x9a, 0x0b, 0x9d, 0xbc, 0x34, 0x66, 0xe6, 0x7c, //0x0000c3b8 .quad 8999993282035256218 + 0x72, 0x9f, 0x23, 0x6a, 0x9f, 0x02, 0x39, 0xa1, //0x0000c3c0 .quad -6829424476226871438 + 0x81, 0x4e, 0xc4, 0xeb, 0xc1, 0xff, 0x1f, 0x1c, //0x0000c3c8 .quad 2026619565689294465 + 0x4e, 0x87, 0xac, 0x44, 0x47, 0x43, 0x87, 0xc9, //0x0000c3d0 .quad -3925094576856201394 + 0x21, 0x62, 0xb5, 0x66, 0xb2, 0xff, 0x27, 0xa3, //0x0000c3d8 .quad -6690097579743157727 + 0x22, 0xa9, 0xd7, 0x15, 0x19, 0x14, 0xe9, 0xfb, //0x0000c3e0 .quad -294682202642863838 + 0xa9, 0xba, 0x62, 0x00, 0x9f, 0xff, 0xf1, 0x4b, //0x0000c3e8 .quad 5472436080603216553 + 0xb5, 0xc9, 0xa6, 0xad, 0x8f, 0xac, 0x71, 0x9d, //0x0000c3f0 .quad -7101705404292871755 + 0xaa, 0xb4, 0x3d, 0x60, 0xc3, 0x3f, 0x77, 0x6f, //0x0000c3f8 .quad 8031958568804398250 + 0x22, 0x7c, 0x10, 0x99, 0xb3, 0x17, 0xce, 0xc4, //0x0000c400 .quad -4265445736938701790 + 0xd4, 0x21, 0x4d, 0x38, 0xb4, 0x0f, 0x55, 0xcb, //0x0000c408 .quad -3795109844276665900 + 0x2b, 0x9b, 0x54, 0x7f, 0xa0, 0x9d, 0x01, 0xf6, //0x0000c410 .quad -720121152745989333 + 0x49, 0x6a, 0x60, 0x46, 0xa1, 0x53, 0x2a, 0x7e, //0x0000c418 .quad 9091170749936331337 + 0xfb, 0xe0, 0x94, 0x4f, 0x84, 0x02, 0xc1, 0x99, //0x0000c420 .quad -7367604748107325189 + 0x6e, 0x42, 0xfc, 0xcb, 0x44, 0x74, 0xda, 0x2e, //0x0000c428 .quad 3376138709496513134 + 0x39, 0x19, 0x7a, 0x63, 0x25, 0x43, 0x31, 0xc0, //0x0000c430 .quad -4597819916706768583 + 0x09, 0x53, 0xfb, 0xfe, 0x55, 0x11, 0x91, 0xfa, //0x0000c438 .quad -391512631556746487 + 0x88, 0x9f, 0x58, 0xbc, 0xee, 0x93, 0x3d, 0xf0, //0x0000c440 .quad -1135588877456072824 + 0xcb, 0x27, 0xba, 0x7e, 0xab, 0x55, 0x35, 0x79, //0x0000c448 .quad 8733981247408842699 + 0xb5, 0x63, 0xb7, 0x35, 0x75, 0x7c, 0x26, 0x96, //0x0000c450 .quad -7627272076051127371 + 0xdf, 0x58, 0x34, 0x2f, 0x8b, 0x55, 0xc1, 0x4b, //0x0000c458 .quad 5458738279630526687 + 0xa2, 0x3c, 0x25, 0x83, 0x92, 0x1b, 0xb0, 0xbb, //0x0000c460 .quad -4922404076636521310 + 0x17, 0x6f, 0x01, 0xfb, 0xed, 0xaa, 0xb1, 0x9e, //0x0000c468 .quad -7011635205744005353 + 0xcb, 0x8b, 0xee, 0x23, 0x77, 0x22, 0x9c, 0xea, //0x0000c470 .quad -1541319077368263733 + 0xdd, 0xca, 0xc1, 0x79, 0xa9, 0x15, 0x5e, 0x46, //0x0000c478 .quad 5070514048102157021 + 0x5f, 0x17, 0x75, 0x76, 0x8a, 0x95, 0xa1, 0x92, //0x0000c480 .quad -7880853450996246689 + 0xca, 0x1e, 0x19, 0xec, 0x89, 0xcd, 0xfa, 0x0b, //0x0000c488 .quad 863228270850154186 + 0x36, 0x5d, 0x12, 0x14, 0xed, 0xfa, 0x49, 0xb7, //0x0000c490 .quad -5239380795317920458 + 0x7c, 0x66, 0x1f, 0x67, 0xec, 0x80, 0xf9, 0xce, //0x0000c498 .quad -3532650679864695172 + 0x84, 0xf4, 0x16, 0x59, 0xa8, 0x79, 0x1c, 0xe5, //0x0000c4a0 .quad -1937539975720012668 + 0x1b, 0x40, 0xe7, 0x80, 0x27, 0xe1, 0xb7, 0x82, //0x0000c4a8 .quad -9027499368258256869 + 0xd2, 0x58, 0xae, 0x37, 0x09, 0xcc, 0x31, 0x8f, //0x0000c4b0 .quad -8128491512466089774 + 0x11, 0x88, 0x90, 0xb0, 0xb8, 0xec, 0xb2, 0xd1, //0x0000c4b8 .quad -3336344095947716591 + 0x07, 0xef, 0x99, 0x85, 0x0b, 0x3f, 0xfe, 0xb2, //0x0000c4c0 .quad -5548928372155224313 + 0x16, 0xaa, 0xb4, 0xdc, 0xe6, 0xa7, 0x1f, 0x86, //0x0000c4c8 .quad -8782116138362033642 + 0xc9, 0x6a, 0x00, 0x67, 0xce, 0xce, 0xbd, 0xdf, //0x0000c4d0 .quad -2324474446766642487 + 0x9b, 0xd4, 0xe1, 0x93, 0xe0, 0x91, 0xa7, 0x67, //0x0000c4d8 .quad 7469098900757009563 + 0xbd, 0x42, 0x60, 0x00, 0x41, 0xa1, 0xd6, 0x8b, //0x0000c4e0 .quad -8370325556870233411 + 0xe1, 0x24, 0x6d, 0x5c, 0x2c, 0xbb, 0xc8, 0xe0, //0x0000c4e8 .quad -2249342214667950879 + 0x6d, 0x53, 0x78, 0x40, 0x91, 0x49, 0xcc, 0xae, //0x0000c4f0 .quad -5851220927660403859 + 0x19, 0x6e, 0x88, 0x73, 0xf7, 0xe9, 0xfa, 0x58, //0x0000c4f8 .quad 6411694268519837209 + 0x48, 0x68, 0x96, 0x90, 0xf5, 0x5b, 0x7f, 0xda, //0x0000c500 .quad -2702340141148116920 + 0x9f, 0x89, 0x6a, 0x50, 0x75, 0xa4, 0x39, 0xaf, //0x0000c508 .quad -5820440219632367201 + 0x2d, 0x01, 0x5e, 0x7a, 0x79, 0x99, 0x8f, 0x88, //0x0000c510 .quad -8606491615858654931 + 0x04, 0x96, 0x42, 0x52, 0xc9, 0x06, 0x84, 0x6d, //0x0000c518 .quad 7891439908798240260 + 0x78, 0x81, 0xf5, 0xd8, 0xd7, 0x7f, 0xb3, 0xaa, //0x0000c520 .quad -6146428501395930760 + 0x84, 0x3b, 0xd3, 0xa6, 0x7b, 0x08, 0xe5, 0xc8, //0x0000c528 .quad -3970758169284363388 + 0xd6, 0xe1, 0x32, 0xcf, 0xcd, 0x5f, 0x60, 0xd5, //0x0000c530 .quad -3071349608317525546 + 0x65, 0x0a, 0x88, 0x90, 0x9a, 0x4a, 0x1e, 0xfb, //0x0000c538 .quad -351761693178066331 + 0x26, 0xcd, 0x7f, 0xa1, 0xe0, 0x3b, 0x5c, 0x85, //0x0000c540 .quad -8837122532839535322 + 0x80, 0x06, 0x55, 0x9a, 0xa0, 0xee, 0xf2, 0x5c, //0x0000c548 .quad 6697677969404790400 + 0x6f, 0xc0, 0xdf, 0xc9, 0xd8, 0x4a, 0xb3, 0xa6, //0x0000c550 .quad -6434717147622031249 + 0x1f, 0x48, 0xea, 0xc0, 0x48, 0xaa, 0x2f, 0xf4, //0x0000c558 .quad -851274575098787809 + 0x8b, 0xb0, 0x57, 0xfc, 0x8e, 0x1d, 0x60, 0xd0, //0x0000c560 .quad -3431710416100151157 + 0x27, 0xda, 0x24, 0xf1, 0xda, 0x94, 0x3b, 0xf1, //0x0000c568 .quad -1064093218873484761 + 0x57, 0xce, 0xb6, 0x5d, 0x79, 0x12, 0x3c, 0x82, //0x0000c570 .quad -9062348037703676329 + 0x59, 0x08, 0xb7, 0xd6, 0x08, 0x3d, 0xc5, 0x76, //0x0000c578 .quad 8558313775058847833 + 0xed, 0x81, 0x24, 0xb5, 0x17, 0x17, 0xcb, 0xa2, //0x0000c580 .quad -6716249028702207507 + 0x6f, 0xca, 0x64, 0x0c, 0x4b, 0x8c, 0x76, 0x54, //0x0000c588 .quad 6086206200396171887 + 0x68, 0xa2, 0x6d, 0xa2, 0xdd, 0xdc, 0x7d, 0xcb, //0x0000c590 .quad -3783625267450371480 + 0x0a, 0xfd, 0x7d, 0xcf, 0x5d, 0x2f, 0x94, 0xa9, //0x0000c598 .quad -6227300304786948854 + 0x02, 0x0b, 0x09, 0x0b, 0x15, 0x54, 0x5d, 0xfe, //0x0000c5a0 .quad -117845565885576446 + 0x4d, 0x7c, 0x5d, 0x43, 0x35, 0x3b, 0xf9, 0xd3, //0x0000c5a8 .quad -3172439362556298163 + 0xe1, 0xa6, 0xe5, 0x26, 0x8d, 0x54, 0xfa, 0x9e, //0x0000c5b0 .quad -6991182506319567135 + 0xb0, 0x6d, 0x1a, 0x4a, 0x01, 0xc5, 0x7b, 0xc4, //0x0000c5b8 .quad -4288617610811380304 + 0x9a, 0x10, 0x9f, 0x70, 0xb0, 0xe9, 0xb8, 0xc6, //0x0000c5c0 .quad -4127292114472071014 + 0x1c, 0x09, 0xa1, 0x9c, 0x41, 0xb6, 0x9a, 0x35, //0x0000c5c8 .quad 3862600023340550428 + 0xc0, 0xd4, 0xc6, 0x8c, 0x1c, 0x24, 0x67, 0xf8, //0x0000c5d0 .quad -547429124662700864 + 0x63, 0x4b, 0xc9, 0x03, 0xd2, 0x63, 0x01, 0xc3, //0x0000c5d8 .quad -4395122007679087773 + 0xf8, 0x44, 0xfc, 0xd7, 0x91, 0x76, 0x40, 0x9b, //0x0000c5e0 .quad -7259672230555269896 + 0x1e, 0xcf, 0x5d, 0x42, 0x63, 0xde, 0xe0, 0x79, //0x0000c5e8 .quad 8782263791269039902 + 0x36, 0x56, 0xfb, 0x4d, 0x36, 0x94, 0x10, 0xc2, //0x0000c5f0 .quad -4462904269766699466 + 0xe5, 0x42, 0xf5, 0x12, 0xfc, 0x15, 0x59, 0x98, //0x0000c5f8 .quad -7468914334623251739 + 0xc4, 0x2b, 0x7a, 0xe1, 0x43, 0xb9, 0x94, 0xf2, //0x0000c600 .quad -966944318780986428 + 0x9e, 0x93, 0xb2, 0x17, 0x7b, 0x5b, 0x6f, 0x3e, //0x0000c608 .quad 4498915137003099038 + 0x5a, 0x5b, 0xec, 0x6c, 0xca, 0xf3, 0x9c, 0x97, //0x0000c610 .quad -7521869226879198374 + 0x43, 0x9c, 0xcf, 0xee, 0x2c, 0x99, 0x05, 0xa7, //0x0000c618 .quad -6411550076227838909 + 0x31, 0x72, 0x27, 0x08, 0xbd, 0x30, 0x84, 0xbd, //0x0000c620 .quad -4790650515171610063 + 0x54, 0x83, 0x83, 0x2a, 0x78, 0xff, 0xc6, 0x50, //0x0000c628 .quad 5820620459997365076 + 0xbd, 0x4e, 0x31, 0x4a, 0xec, 0x3c, 0xe5, 0xec, //0x0000c630 .quad -1376627125537124675 + 0x29, 0x64, 0x24, 0x35, 0x56, 0xbf, 0xf8, 0xa4, //0x0000c638 .quad -6559282480285457367 + 0x36, 0xd1, 0x5e, 0xae, 0x13, 0x46, 0x0f, 0x94, //0x0000c640 .quad -7777920981101784778 + 0x9a, 0xbe, 0x36, 0xe1, 0x95, 0x77, 0x1b, 0x87, //0x0000c648 .quad -8711237568605798758 + 0x84, 0x85, 0xf6, 0x99, 0x98, 0x17, 0x13, 0xb9, //0x0000c650 .quad -5110715207949843068 + 0x40, 0x6e, 0x84, 0x59, 0x7b, 0x55, 0xe2, 0x28, //0x0000c658 .quad 2946011094524915264 + 0xe5, 0x26, 0x74, 0xc0, 0x7e, 0xdd, 0x57, 0xe7, //0x0000c660 .quad -1776707991509915931 + 0xd0, 0x89, 0xe5, 0x2f, 0xda, 0xea, 0x1a, 0x33, //0x0000c668 .quad 3682513868156144080 + 0x4f, 0x98, 0x48, 0x38, 0x6f, 0xea, 0x96, 0x90, //0x0000c670 .quad -8027971522334779313 + 0x22, 0x76, 0xef, 0x5d, 0xc8, 0xd2, 0xf0, 0x3f, //0x0000c678 .quad 4607414176811284002 + 0x63, 0xbe, 0x5a, 0x06, 0x0b, 0xa5, 0xbc, 0xb4, //0x0000c680 .quad -5423278384491086237 + 0xaa, 0x53, 0x6b, 0x75, 0x7a, 0x07, 0xed, 0x0f, //0x0000c688 .quad 1147581702586717098 + 0xfb, 0x6d, 0xf1, 0xc7, 0x4d, 0xce, 0xeb, 0xe1, //0x0000c690 .quad -2167411962186469893 + 0x95, 0x28, 0xc6, 0x12, 0x59, 0x49, 0xe8, 0xd3, //0x0000c698 .quad -3177208890193991531 + 0xbd, 0xe4, 0xf6, 0x9c, 0xf0, 0x60, 0x33, 0x8d, //0x0000c6a0 .quad -8272161504007625539 + 0x5d, 0xd9, 0xbb, 0xab, 0xd7, 0x2d, 0x71, 0x64, //0x0000c6a8 .quad 7237616480483531101 + 0xec, 0x9d, 0x34, 0xc4, 0x2c, 0x39, 0x80, 0xb0, //0x0000c6b0 .quad -5728515861582144020 + 0xb4, 0xcf, 0xaa, 0x96, 0x4d, 0x79, 0x8d, 0xbd, //0x0000c6b8 .quad -4788037454677749836 + 0x67, 0xc5, 0x41, 0xf5, 0x77, 0x47, 0xa0, 0xdc, //0x0000c6c0 .quad -2548958808550292121 + 0xa1, 0x83, 0x55, 0xfc, 0xa0, 0xd7, 0xf0, 0xec, //0x0000c6c8 .quad -1373360799919799391 + 0x60, 0x1b, 0x49, 0xf9, 0xaa, 0x2c, 0xe4, 0x89, //0x0000c6d0 .quad -8510628282985014432 + 0x45, 0x72, 0xb5, 0x9d, 0xc4, 0x86, 0x16, 0xf4, //0x0000c6d8 .quad -858350499949874619 + 0x39, 0x62, 0x9b, 0xb7, 0xd5, 0x37, 0x5d, 0xac, //0x0000c6e0 .quad -6026599335303880135 + 0xd6, 0xce, 0x22, 0xc5, 0x75, 0x28, 0x1c, 0x31, //0x0000c6e8 .quad 3538747893490044630 + 0xc7, 0x3a, 0x82, 0x25, 0xcb, 0x85, 0x74, 0xd7, //0x0000c6f0 .quad -2921563150702462265 + 0x8c, 0x82, 0x6b, 0x36, 0x93, 0x32, 0x63, 0x7d, //0x0000c6f8 .quad 9035120885289943692 + 0xbc, 0x64, 0x71, 0xf7, 0x9e, 0xd3, 0xa8, 0x86, //0x0000c700 .quad -8743505996830120772 + 0x98, 0x31, 0x03, 0x02, 0x9c, 0xff, 0x5d, 0xae, //0x0000c708 .quad -5882264492762254952 + 0xeb, 0xbd, 0x4d, 0xb5, 0x86, 0x08, 0x53, 0xa8, //0x0000c710 .quad -6317696477610263061 + 0xfd, 0xfd, 0x83, 0x02, 0x83, 0x7f, 0xf5, 0xd9, //0x0000c718 .quad -2741144597525430787 + 0x66, 0x2d, 0xa1, 0x62, 0xa8, 0xca, 0x67, 0xd2, //0x0000c720 .quad -3285434578585440922 + 0x7c, 0xfd, 0x24, 0xc3, 0x63, 0xdf, 0x72, 0xd0, //0x0000c728 .quad -3426430746906788484 + 0x60, 0xbc, 0xa4, 0x3d, 0xa9, 0xde, 0x80, 0x83, //0x0000c730 .quad -8970925639256982432 + 0x6e, 0x1e, 0xf7, 0x59, 0x9e, 0xcb, 0x47, 0x42, //0x0000c738 .quad 4776009810824339054 + 0x78, 0xeb, 0x0d, 0x8d, 0x53, 0x16, 0x61, 0xa4, //0x0000c740 .quad -6601971030643840136 + 0x09, 0xe6, 0x74, 0xf0, 0x85, 0xbe, 0xd9, 0x52, //0x0000c748 .quad 5970012263530423817 + 0x56, 0x66, 0x51, 0x70, 0xe8, 0x5b, 0x79, 0xcd, //0x0000c750 .quad -3640777769877412266 + 0x8c, 0x1f, 0x92, 0x6c, 0x27, 0x2e, 0x90, 0x67, //0x0000c758 .quad 7462515329413029772 + 0xf6, 0xdf, 0x32, 0x46, 0x71, 0xd9, 0x6b, 0x80, //0x0000c760 .quad -9193015133814464522 + 0xb7, 0x53, 0xdb, 0xa3, 0xd8, 0x1c, 0xba, 0x00, //0x0000c768 .quad 52386062455755703 + 0xf3, 0x97, 0xbf, 0x97, 0xcd, 0xcf, 0x86, 0xa0, //0x0000c770 .quad -6879582898840692749 + 0xa5, 0x28, 0xd2, 0xcc, 0x0e, 0xa4, 0xe8, 0x80, //0x0000c778 .quad -9157889458785081179 + 0xf0, 0x7d, 0xaf, 0xfd, 0xc0, 0x83, 0xa8, 0xc8, //0x0000c780 .quad -3987792605123478032 + 0xce, 0xb2, 0x06, 0x80, 0x12, 0xcd, 0x22, 0x61, //0x0000c788 .quad 6999382250228200142 + 0x6c, 0x5d, 0x1b, 0x3d, 0xb1, 0xa4, 0xd2, 0xfa, //0x0000c790 .quad -373054737976959636 + 0x82, 0x5f, 0x08, 0x20, 0x57, 0x80, 0x6b, 0x79, //0x0000c798 .quad 8749227812785250178 + 0x63, 0x1a, 0x31, 0xc6, 0xee, 0xa6, 0xc3, 0x9c, //0x0000c7a0 .quad -7150688238876681629 + 0xb1, 0x3b, 0x05, 0x74, 0x36, 0x30, 0xe3, 0xcb, //0x0000c7a8 .quad -3755104653863994447 + 0xfc, 0x60, 0xbd, 0x77, 0xaa, 0x90, 0xf4, 0xc3, //0x0000c7b0 .quad -4326674280168464132 + 0x9d, 0x8a, 0x06, 0x11, 0x44, 0xfc, 0xdb, 0xbe, //0x0000c7b8 .quad -4693880817329993059 + 0x3b, 0xb9, 0xac, 0x15, 0xd5, 0xb4, 0xf1, 0xf4, //0x0000c7c0 .quad -796656831783192261 + 0x45, 0x2d, 0x48, 0x15, 0x55, 0xfb, 0x92, 0xee, //0x0000c7c8 .quad -1255665003235103419 + 0xc5, 0xf3, 0x8b, 0x2d, 0x05, 0x11, 0x17, 0x99, //0x0000c7d0 .quad -7415439547505577019 + 0x4b, 0x1c, 0x4d, 0x2d, 0x15, 0xdd, 0x1b, 0x75, //0x0000c7d8 .quad 8438581409832836171 + 0xb6, 0xf0, 0xee, 0x78, 0x46, 0xd5, 0x5c, 0xbf, //0x0000c7e0 .quad -4657613415954583370 + 0x5e, 0x63, 0xa0, 0x78, 0x5a, 0xd4, 0x62, 0xd2, //0x0000c7e8 .quad -3286831292991118498 + 0xe4, 0xac, 0x2a, 0x17, 0x98, 0x0a, 0x34, 0xef, //0x0000c7f0 .quad -1210330751515841308 + 0x35, 0x7c, 0xc8, 0x16, 0x71, 0x89, 0xfb, 0x86, //0x0000c7f8 .quad -8720225134666286027 + 0x0e, 0xac, 0x7a, 0x0e, 0x9f, 0x86, 0x80, 0x95, //0x0000c800 .quad -7673985747338482674 + 0xa1, 0x4d, 0x3d, 0xae, 0xe6, 0x35, 0x5d, 0xd4, //0x0000c808 .quad -3144297699952734815 + 0x12, 0x57, 0x19, 0xd2, 0x46, 0xa8, 0xe0, 0xba, //0x0000c810 .quad -4980796165745715438 + 0x0a, 0xa1, 0xcc, 0x59, 0x60, 0x83, 0x74, 0x89, //0x0000c818 .quad -8542058143368306422 + 0xd7, 0xac, 0x9f, 0x86, 0x58, 0xd2, 0x98, 0xe9, //0x0000c820 .quad -1614309188754756393 + 0x4c, 0xc9, 0x3f, 0x70, 0x38, 0xa4, 0xd1, 0x2b, //0x0000c828 .quad 3157485376071780684 + 0x06, 0xcc, 0x23, 0x54, 0x77, 0x83, 0xff, 0x91, //0x0000c830 .quad -7926472270612804602 + 0xd0, 0xdd, 0x27, 0x46, 0xa3, 0x06, 0x63, 0x7b, //0x0000c838 .quad 8890957387685944784 + 0x08, 0xbf, 0x2c, 0x29, 0x55, 0x64, 0x7f, 0xb6, //0x0000c840 .quad -5296404319838617848 + 0x43, 0xd5, 0xb1, 0x17, 0x4c, 0xc8, 0x3b, 0x1a, //0x0000c848 .quad 1890324697752655171 + 0xca, 0xee, 0x77, 0x73, 0x6a, 0x3d, 0x1f, 0xe4, //0x0000c850 .quad -2008819381370884406 + 0x94, 0x4a, 0x9e, 0x1d, 0x5f, 0xba, 0xca, 0x20, //0x0000c858 .quad 2362905872190818964 + 0x3e, 0xf5, 0x2a, 0x88, 0x62, 0x86, 0x93, 0x8e, //0x0000c860 .quad -8173041140997884610 + 0x9d, 0xee, 0x82, 0x72, 0x7b, 0xb4, 0x7e, 0x54, //0x0000c868 .quad 6088502188546649757 + 0x8d, 0xb2, 0x35, 0x2a, 0xfb, 0x67, 0x38, 0xb2, //0x0000c870 .quad -5604615407819967859 + 0x44, 0xaa, 0x23, 0x4f, 0x9a, 0x61, 0x9e, 0xe9, //0x0000c878 .quad -1612744301171463612 + 0x31, 0x1f, 0xc3, 0xf4, 0xf9, 0x81, 0xc6, 0xde, //0x0000c880 .quad -2394083241347571919 + 0xd5, 0x94, 0xec, 0xe2, 0x00, 0xfa, 0x05, 0x64, //0x0000c888 .quad 7207441660390446293 + 0x7e, 0xf3, 0xf9, 0x38, 0x3c, 0x11, 0x3c, 0x8b, //0x0000c890 .quad -8413831053483314306 + 0x05, 0xdd, 0xd3, 0x8d, 0x40, 0xbc, 0x83, 0xde, //0x0000c898 .quad -2412877989897052923 + 0x5e, 0x70, 0x38, 0x47, 0x8b, 0x15, 0x0b, 0xae, //0x0000c8a0 .quad -5905602798426754978 + 0x46, 0xd4, 0x48, 0xb1, 0x50, 0xab, 0x24, 0x96, //0x0000c8a8 .quad -7627783505798704058 + 0x76, 0x8c, 0x06, 0x19, 0xee, 0xda, 0x8d, 0xd9, //0x0000c8b0 .quad -2770317479606055818 + 0x58, 0x09, 0x9b, 0xdd, 0x24, 0xd6, 0xad, 0x3b, //0x0000c8b8 .quad 4300328673033783640 + 0xc9, 0x17, 0xa4, 0xcf, 0xd4, 0xa8, 0xf8, 0x87, //0x0000c8c0 .quad -8648977452394866743 + 0xd7, 0xe5, 0x80, 0x0a, 0xd7, 0xa5, 0x4c, 0xe5, //0x0000c8c8 .quad -1923980597781273129 + 0xbc, 0x1d, 0x8d, 0x03, 0x0a, 0xd3, 0xf6, 0xa9, //0x0000c8d0 .quad -6199535797066195524 + 0x4d, 0x1f, 0x21, 0xcd, 0x4c, 0xcf, 0x9f, 0x5e, //0x0000c8d8 .quad 6818396289628184397 + 0x2b, 0x65, 0x70, 0x84, 0xcc, 0x87, 0x74, 0xd4, //0x0000c8e0 .quad -3137733727905356501 + 0x20, 0x67, 0x69, 0x00, 0x20, 0xc3, 0x47, 0x76, //0x0000c8e8 .quad 8522995362035230496 + 0x3b, 0x3f, 0xc6, 0xd2, 0xdf, 0xd4, 0xc8, 0x84, //0x0000c8f0 .quad -8878612607581929669 + 0x74, 0xe0, 0x41, 0x00, 0xf4, 0xd9, 0xec, 0x29, //0x0000c8f8 .quad 3021029092058325108 + 0x09, 0xcf, 0x77, 0xc7, 0x17, 0x0a, 0xfb, 0xa5, //0x0000c900 .quad -6486579741050024183 + 0x91, 0x58, 0x52, 0x00, 0x71, 0x10, 0x68, 0xf4, //0x0000c908 .quad -835399653354481519 + 0xcc, 0xc2, 0x55, 0xb9, 0x9d, 0xcc, 0x79, 0xcf, //0x0000c910 .quad -3496538657885142324 + 0xb5, 0xee, 0x66, 0x40, 0x8d, 0x14, 0x82, 0x71, //0x0000c918 .quad 8179122470161673909 + 0xbf, 0x99, 0xd5, 0x93, 0xe2, 0x1f, 0xac, 0x81, //0x0000c920 .quad -9102865688819295809 + 0x31, 0x55, 0x40, 0x48, 0xd8, 0x4c, 0xf1, 0xc6, //0x0000c928 .quad -4111420493003729615 + 0x2f, 0x00, 0xcb, 0x38, 0xdb, 0x27, 0x17, 0xa2, //0x0000c930 .quad -6766896092596731857 + 0x7d, 0x6a, 0x50, 0x5a, 0x0e, 0xa0, 0xad, 0xb8, //0x0000c938 .quad -5139275616254662019 + 0x3b, 0xc0, 0xfd, 0x06, 0xd2, 0xf1, 0x9c, 0xca, //0x0000c940 .quad -3846934097318526917 + 0x1d, 0x85, 0xe4, 0xf0, 0x11, 0x08, 0xd9, 0xa6, //0x0000c948 .quad -6424094520318327523 + 0x4a, 0x30, 0xbd, 0x88, 0x46, 0x2e, 0x44, 0xfd, //0x0000c950 .quad -196981603220770742 + 0x64, 0xa6, 0x1d, 0x6d, 0x16, 0x4a, 0x8f, 0x90, //0x0000c958 .quad -8030118150397909404 + 0x2e, 0x3e, 0x76, 0x15, 0xec, 0x9c, 0x4a, 0x9e, //0x0000c960 .quad -7040642529654063570 + 0xff, 0x87, 0x32, 0x04, 0x4e, 0x8e, 0x59, 0x9a, //0x0000c968 .quad -7324666853212387329 + 0xba, 0xcd, 0xd3, 0x1a, 0x27, 0x44, 0xdd, 0xc5, //0x0000c970 .quad -4189117143640191558 + 0xfe, 0x29, 0x3f, 0x85, 0xe1, 0xf1, 0xef, 0x40, //0x0000c978 .quad 4679224488766679550 + 0x28, 0xc1, 0x88, 0xe1, 0x30, 0x95, 0x54, 0xf7, //0x0000c980 .quad -624710411122851544 + 0x7d, 0xf4, 0x8e, 0xe6, 0x59, 0xee, 0x2b, 0xd1, //0x0000c988 .quad -3374341425896426371 + 0xb9, 0x78, 0xf5, 0x8c, 0x3e, 0xdd, 0x94, 0x9a, //0x0000c990 .quad -7307973034592864071 + 0xcf, 0x58, 0x19, 0x30, 0xf8, 0x74, 0xbb, 0x82, //0x0000c998 .quad -9026492418826348337 + 0xe7, 0xd6, 0x32, 0x30, 0x8e, 0x14, 0x3a, 0xc1, //0x0000c9a0 .quad -4523280274813692185 + 0x02, 0xaf, 0x1f, 0x3c, 0x36, 0x52, 0x6a, 0xe3, //0x0000c9a8 .quad -2059743486678159614 + 0xa1, 0x8c, 0x3f, 0xbc, 0xb1, 0x99, 0x88, 0xf1, //0x0000c9b0 .quad -1042414325089727327 + 0xc2, 0x9a, 0x27, 0xcb, 0xc3, 0xe6, 0x44, 0xdc, //0x0000c9b8 .quad -2574679358347699518 + 0xe5, 0xb7, 0xa7, 0x15, 0x0f, 0x60, 0xf5, 0x96, //0x0000c9c0 .quad -7569037980822161435 + 0xba, 0xc0, 0xf8, 0x5e, 0x3a, 0x10, 0xab, 0x29, //0x0000c9c8 .quad 3002511419460075706 + 0xde, 0xa5, 0x11, 0xdb, 0x12, 0xb8, 0xb2, 0xbc, //0x0000c9d0 .quad -4849611457600313890 + 0xe8, 0xf0, 0xb6, 0xf6, 0x48, 0xd4, 0x15, 0x74, //0x0000c9d8 .quad 8364825292752482536 + 0x56, 0x0f, 0xd6, 0x91, 0x17, 0x66, 0xdf, 0xeb, //0x0000c9e0 .quad -1450328303573004458 + 0x22, 0xad, 0x64, 0x34, 0x5b, 0x49, 0x1b, 0x11, //0x0000c9e8 .quad 1232659579085827362 + 0x95, 0xc9, 0x25, 0xbb, 0xce, 0x9f, 0x6b, 0x93, //0x0000c9f0 .quad -7823984217374209643 + 0x35, 0xec, 0xbe, 0x00, 0xd9, 0x0d, 0xb1, 0xca, //0x0000c9f8 .quad -3841273781498745803 + 0xfb, 0x3b, 0xef, 0x69, 0xc2, 0x87, 0x46, 0xb8, //0x0000ca00 .quad -5168294253290374149 + 0x43, 0xa7, 0xee, 0x40, 0x4f, 0x51, 0x5d, 0x3d, //0x0000ca08 .quad 4421779809981343555 + 0xfa, 0x0a, 0x6b, 0x04, 0xb3, 0x29, 0x58, 0xe6, //0x0000ca10 .quad -1848681798185579782 + 0x13, 0x51, 0x2a, 0x11, 0xa3, 0xa5, 0xb4, 0x0c, //0x0000ca18 .quad 915538744049291539 + 0xdc, 0xe6, 0xc2, 0xe2, 0x0f, 0x1a, 0xf7, 0x8f, //0x0000ca20 .quad -8072955151507069220 + 0xac, 0x72, 0xba, 0xea, 0x85, 0xe7, 0xf0, 0x47, //0x0000ca28 .quad 5183897733458195116 + 0x93, 0xa0, 0x73, 0xdb, 0x93, 0xe0, 0xf4, 0xb3, //0x0000ca30 .quad -5479507920956448621 + 0x57, 0x0f, 0x69, 0x65, 0x67, 0x21, 0xed, 0x59, //0x0000ca38 .quad 6479872166822743895 + 0xb8, 0x88, 0x50, 0xd2, 0xb8, 0x18, 0xf2, 0xe0, //0x0000ca40 .quad -2237698882768172872 + 0x2d, 0x53, 0xc3, 0x3e, 0xc1, 0x69, 0x68, 0x30, //0x0000ca48 .quad 3488154190101041965 + 0x73, 0x55, 0x72, 0x83, 0x73, 0x4f, 0x97, 0x8c, //0x0000ca50 .quad -8316090829371189901 + 0xfc, 0x13, 0x3a, 0xc7, 0x18, 0x42, 0x41, 0x1e, //0x0000ca58 .quad 2180096368813151228 + 0xcf, 0xea, 0x4e, 0x64, 0x50, 0x23, 0xbd, 0xaf, //0x0000ca60 .quad -5783427518286599473 + 0xfb, 0x98, 0x08, 0xf9, 0x9e, 0x92, 0xd1, 0xe5, //0x0000ca68 .quad -1886565557410948869 + 0x83, 0xa5, 0x62, 0x7d, 0x24, 0x6c, 0xac, 0xdb, //0x0000ca70 .quad -2617598379430861437 + 0x3a, 0xbf, 0x4a, 0xb7, 0x46, 0xf7, 0x45, 0xdf, //0x0000ca78 .quad -2358206946763686086 + 0x72, 0xa7, 0x5d, 0xce, 0x96, 0xc3, 0x4b, 0x89, //0x0000ca80 .quad -8553528014785370254 + 0x84, 0xb7, 0x8e, 0x32, 0x8c, 0xba, 0x8b, 0x6b, //0x0000ca88 .quad 7749492695127472004 + 0x4f, 0x11, 0xf5, 0x81, 0x7c, 0xb4, 0x9e, 0xab, //0x0000ca90 .quad -6080224000054324913 + 0x65, 0x65, 0x32, 0x3f, 0x2f, 0xa9, 0x6e, 0x06, //0x0000ca98 .quad 463493832054564197 + 0xa2, 0x55, 0x72, 0xa2, 0x9b, 0x61, 0x86, 0xd6, //0x0000caa0 .quad -2988593981640518238 + 0xbe, 0xfe, 0xfe, 0x0e, 0x7b, 0x53, 0x0a, 0xc8, //0x0000caa8 .quad -4032318728359182658 + 0x85, 0x75, 0x87, 0x45, 0x01, 0xfd, 0x13, 0x86, //0x0000cab0 .quad -8785400266166405755 + 0x37, 0x5f, 0x5f, 0xe9, 0x2c, 0x74, 0x06, 0xbd, //0x0000cab8 .quad -4826042214438183113 + 0xe7, 0x52, 0xe9, 0x96, 0x41, 0xfc, 0x98, 0xa7, //0x0000cac0 .quad -6370064314280619289 + 0x05, 0x37, 0xb7, 0x23, 0x38, 0x11, 0x48, 0x2c, //0x0000cac8 .quad 3190819268807046917 + 0xa0, 0xa7, 0xa3, 0xfc, 0x51, 0x3b, 0x7f, 0xd1, //0x0000cad0 .quad -3350894374423386208 + 0xc6, 0x04, 0xa5, 0x2c, 0x86, 0x15, 0x5a, 0xf7, //0x0000cad8 .quad -623161932418579258 + 0xc4, 0x48, 0xe6, 0x3d, 0x13, 0x85, 0xef, 0x82, //0x0000cae0 .quad -9011838011655698236 + 0xfc, 0x22, 0xe7, 0xdb, 0x73, 0x4d, 0x98, 0x9a, //0x0000cae8 .quad -7307005235402693892 + 0xf5, 0xda, 0x5f, 0x0d, 0x58, 0x66, 0xab, 0xa3, //0x0000caf0 .quad -6653111496142234891 + 0xbb, 0xeb, 0xe0, 0xd2, 0xd0, 0x60, 0x3e, 0xc1, //0x0000caf8 .quad -4522070525825979461 + 0xb3, 0xd1, 0xb7, 0x10, 0xee, 0x3f, 0x96, 0xcc, //0x0000cb00 .quad -3704703351750405709 + 0xa9, 0x26, 0x99, 0x07, 0x05, 0xf9, 0x8d, 0x31, //0x0000cb08 .quad 3570783879572301481 + 0x1f, 0xc6, 0xe5, 0x94, 0xe9, 0xcf, 0xbb, 0xff, //0x0000cb10 .quad -19193171260619233 + 0x53, 0x70, 0x7f, 0x49, 0x46, 0x77, 0xf1, 0xfd, //0x0000cb18 .quad -148206168962011053 + 0xd3, 0x9b, 0x0f, 0xfd, 0xf1, 0x61, 0xd5, 0x9f, //0x0000cb20 .quad -6929524759678968877 + 0x34, 0xa6, 0xef, 0xed, 0x8b, 0xea, 0xb6, 0xfe, //0x0000cb28 .quad -92628855601256908 + 0xc8, 0x82, 0x53, 0x7c, 0x6e, 0xba, 0xca, 0xc7, //0x0000cb30 .quad -4050219931171323192 + 0xc1, 0x8f, 0x6b, 0xe9, 0x2e, 0xa5, 0x64, 0xfe, //0x0000cb38 .quad -115786069501571135 + 0x7b, 0x63, 0x68, 0x1b, 0x0a, 0x69, 0xbd, 0xf9, //0x0000cb40 .quad -451088895536766085 + 0xb1, 0x73, 0xc6, 0xa3, 0x7a, 0xce, 0xfd, 0x3d, //0x0000cb48 .quad 4466953431550423985 + 0x2d, 0x3e, 0x21, 0x51, 0xa6, 0x61, 0x16, 0x9c, //0x0000cb50 .quad -7199459587351560659 + 0x4f, 0x08, 0x5c, 0xa6, 0x0c, 0xa1, 0xbe, 0x06, //0x0000cb58 .quad 486002885505321039 + 0xb8, 0x8d, 0x69, 0xe5, 0x0f, 0xfa, 0x1b, 0xc3, //0x0000cb60 .quad -4387638465762062920 + 0x63, 0x0a, 0xf3, 0xcf, 0x4f, 0x49, 0x6e, 0x48, //0x0000cb68 .quad 5219189625309039203 + 0x26, 0xf1, 0xc3, 0xde, 0x93, 0xf8, 0xe2, 0xf3, //0x0000cb70 .quad -872862063775190746 + 0xfb, 0xcc, 0xef, 0xc3, 0xa3, 0xdb, 0x89, 0x5a, //0x0000cb78 .quad 6523987031636299003 + 0xb7, 0x76, 0x3a, 0x6b, 0x5c, 0xdb, 0x6d, 0x98, //0x0000cb80 .quad -7463067817500576073 + 0x1d, 0xe0, 0x75, 0x5a, 0x46, 0x29, 0x96, 0xf8, //0x0000cb88 .quad -534194123654701027 + 0x65, 0x14, 0x09, 0x86, 0x33, 0x52, 0x89, 0xbe, //0x0000cb90 .quad -4717148753448332187 + 0x24, 0x58, 0x13, 0xf1, 0x97, 0xb3, 0xbb, 0xf6, //0x0000cb98 .quad -667742654568376284 + 0x7f, 0x59, 0x8b, 0x67, 0xc0, 0xa6, 0x2b, 0xee, //0x0000cba0 .quad -1284749923383027329 + 0x2d, 0x2e, 0x58, 0xed, 0x7d, 0xa0, 0x6a, 0x74, //0x0000cba8 .quad 8388693718644305453 + 0xef, 0x17, 0xb7, 0x40, 0x38, 0x48, 0xdb, 0x94, //0x0000cbb0 .quad -7720497729755473937 + 0xdd, 0x1c, 0x57, 0xb4, 0x4e, 0xa4, 0xc2, 0xa8, //0x0000cbb8 .quad -6286281471915778851 + 0xeb, 0xdd, 0xe4, 0x50, 0x46, 0x1a, 0x12, 0xba, //0x0000cbc0 .quad -5038936143766954517 + 0x14, 0xe4, 0x6c, 0x61, 0x62, 0x4d, 0xf3, 0x92, //0x0000cbc8 .quad -7857851839894723564 + 0x66, 0x15, 0x1e, 0xe5, 0xd7, 0xa0, 0x96, 0xe8, //0x0000cbd0 .quad -1686984161281305242 + 0x18, 0x1d, 0xc8, 0xf9, 0xba, 0x20, 0xb0, 0x77, //0x0000cbd8 .quad 8624429273841147160 + 0x60, 0xcd, 0x32, 0xef, 0x86, 0x24, 0x5e, 0x91, //0x0000cbe0 .quad -7971894128441897632 + 0x2f, 0x12, 0x1d, 0xdc, 0x74, 0x14, 0xce, 0x0a, //0x0000cbe8 .quad 778582277723329071 + 0xb8, 0x80, 0xff, 0xaa, 0xa8, 0xad, 0xb5, 0xb5, //0x0000cbf0 .quad -5353181642124984136 + 0xbb, 0x56, 0x24, 0x13, 0x92, 0x99, 0x81, 0x0d, //0x0000cbf8 .quad 973227847154161339 + 0xe6, 0x60, 0xbf, 0xd5, 0x12, 0x19, 0x23, 0xe3, //0x0000cc00 .quad -2079791034228842266 + 0x6a, 0x6c, 0xed, 0x97, 0xf6, 0xff, 0xe1, 0x10, //0x0000cc08 .quad 1216534808942701674 + 0x8f, 0x9c, 0x97, 0xc5, 0xab, 0xef, 0xf5, 0x8d, //0x0000cc10 .quad -8217398424034108273 + 0xc2, 0x63, 0xf4, 0x1e, 0xfa, 0x3f, 0x8d, 0xca, //0x0000cc18 .quad -3851351762838199358 + 0xb3, 0x83, 0xfd, 0xb6, 0x96, 0x6b, 0x73, 0xb1, //0x0000cc20 .quad -5660062011615247437 + 0xb3, 0x7c, 0xb1, 0xa6, 0xf8, 0x8f, 0x30, 0xbd, //0x0000cc28 .quad -4814189703547749197 + 0xa0, 0xe4, 0xbc, 0x64, 0x7c, 0x46, 0xd0, 0xdd, //0x0000cc30 .quad -2463391496091671392 + 0xdf, 0xdb, 0x5d, 0xd0, 0xf6, 0xb3, 0x7c, 0xac, //0x0000cc38 .quad -6017737129434686497 + 0xe4, 0x0e, 0xf6, 0xbe, 0x0d, 0x2c, 0xa2, 0x8a, //0x0000cc40 .quad -8457148712698376476 + 0x6c, 0xa9, 0x3a, 0x42, 0x7a, 0xf0, 0xcd, 0x6b, //0x0000cc48 .quad 7768129340171790700 + 0x9d, 0x92, 0xb3, 0x2e, 0x11, 0xb7, 0x4a, 0xad, //0x0000cc50 .quad -5959749872445582691 + 0xc7, 0x53, 0xc9, 0xd2, 0x98, 0x6c, 0xc1, 0x86, //0x0000cc58 .quad -8736582398494813241 + 0x44, 0x77, 0x60, 0x7a, 0xd5, 0x64, 0x9d, 0xd8, //0x0000cc60 .quad -2838001322129590460 + 0xb8, 0xa8, 0x7b, 0x07, 0xbf, 0xc7, 0x71, 0xe8, //0x0000cc68 .quad -1697355961263740744 + 0x8b, 0x4a, 0x7c, 0x6c, 0x05, 0x5f, 0x62, 0x87, //0x0000cc70 .quad -8691279853972075893 + 0x73, 0x49, 0xad, 0x64, 0xd7, 0x1c, 0x47, 0x11, //0x0000cc78 .quad 1244995533423855987 + 0x2d, 0x5d, 0x9b, 0xc7, 0xc6, 0xf6, 0x3a, 0xa9, //0x0000cc80 .quad -6252413799037706963 + 0xd0, 0x9b, 0xd8, 0x3d, 0x0d, 0xe4, 0x98, 0xd5, //0x0000cc88 .quad -3055441601647567920 + 0x79, 0x34, 0x82, 0x79, 0x78, 0xb4, 0x89, 0xd3, //0x0000cc90 .quad -3203831230369745799 + 0xc4, 0xc2, 0x4e, 0x8d, 0x10, 0x1d, 0xff, 0x4a, //0x0000cc98 .quad 5404070034795315908 + 0xcb, 0x60, 0xf1, 0x4b, 0xcb, 0x10, 0x36, 0x84, //0x0000cca0 .quad -8919923546622172981 + 0xbb, 0x39, 0x51, 0x58, 0x2a, 0x72, 0xdf, 0xce, //0x0000cca8 .quad -3539985255894009413 + 0xfe, 0xb8, 0xed, 0x1e, 0xfe, 0x94, 0x43, 0xa5, //0x0000ccb0 .quad -6538218414850328322 + 0x29, 0x88, 0x65, 0xee, 0xb4, 0x4e, 0x97, 0xc2, //0x0000ccb8 .quad -4424981569867511767 + 0x3e, 0x27, 0xa9, 0xa6, 0x3d, 0x7a, 0x94, 0xce, //0x0000ccc0 .quad -3561087000135522498 + 0x33, 0xea, 0xfe, 0x29, 0x62, 0x22, 0x3d, 0x73, //0x0000ccc8 .quad 8303831092947774003 + 0x87, 0xb8, 0x29, 0x88, 0x66, 0xcc, 0x1c, 0x81, //0x0000ccd0 .quad -9143208402725783417 + 0x60, 0x52, 0x3f, 0x5a, 0x7d, 0x35, 0x06, 0x08, //0x0000ccd8 .quad 578208414664970848 + 0xa8, 0x26, 0x34, 0x2a, 0x80, 0xff, 0x63, 0xa1, //0x0000cce0 .quad -6817324484979841368 + 0xf8, 0x26, 0xcf, 0xb0, 0xdc, 0xc2, 0x07, 0xca, //0x0000cce8 .quad -3888925500096174344 + 0x52, 0x30, 0xc1, 0x34, 0x60, 0xff, 0xbc, 0xc9, //0x0000ccf0 .quad -3909969587797413806 + 0xb6, 0xf0, 0x02, 0xdd, 0x93, 0xb3, 0x89, 0xfc, //0x0000ccf8 .quad -249470856692830026 + 0x67, 0x7c, 0xf1, 0x41, 0x38, 0x3f, 0x2c, 0xfc, //0x0000cd00 .quad -275775966319379353 + 0xe3, 0xac, 0x43, 0xd4, 0x78, 0x20, 0xac, 0xbb, //0x0000cd08 .quad -4923524589293425437 + 0xc0, 0xed, 0x36, 0x29, 0x83, 0xa7, 0x9b, 0x9d, //0x0000cd10 .quad -7089889006590693952 + 0x0e, 0x4c, 0xaa, 0x84, 0x4b, 0x94, 0x4b, 0xd5, //0x0000cd18 .quad -3077202868308390898 + 0x31, 0xa9, 0x84, 0xf3, 0x63, 0x91, 0x02, 0xc5, //0x0000cd20 .quad -4250675239810979535 + 0x12, 0xdf, 0xd4, 0x65, 0x5e, 0x79, 0x9e, 0x0a, //0x0000cd28 .quad 765182433041899282 + 0x7d, 0xd3, 0x65, 0xf0, 0xbc, 0x35, 0x43, 0xf6, //0x0000cd30 .quad -701658031336336515 + 0xd6, 0x16, 0x4a, 0xff, 0xb5, 0x17, 0x46, 0x4d, //0x0000cd38 .quad 5568164059729762006 + 0x2e, 0xa4, 0x3f, 0x16, 0x96, 0x01, 0xea, 0x99, //0x0000cd40 .quad -7356065297226292178 + 0x46, 0x4e, 0x8e, 0xbf, 0xd1, 0xce, 0x4b, 0x50, //0x0000cd48 .quad 5785945546544795206 + 0x39, 0x8d, 0xcf, 0x9b, 0xfb, 0x81, 0x64, 0xc0, //0x0000cd50 .quad -4583395603105477319 + 0xd7, 0xe1, 0x71, 0x2f, 0x86, 0xc2, 0x5e, 0xe4, //0x0000cd58 .quad -1990940103673781801 + 0x88, 0x70, 0xc3, 0x82, 0x7a, 0xa2, 0x7d, 0xf0, //0x0000cd60 .quad -1117558485454458744 + 0x4d, 0x5a, 0x4e, 0xbb, 0x27, 0x73, 0x76, 0x5d, //0x0000cd68 .quad 6734696907262548557 + 0x55, 0x26, 0xba, 0x91, 0x8c, 0x85, 0x4e, 0x96, //0x0000cd70 .quad -7616003081050118571 + 0x70, 0xf8, 0x10, 0xd5, 0xf8, 0x07, 0x6a, 0x3a, //0x0000cd78 .quad 4209185567039092848 + 0xea, 0xaf, 0x28, 0xb6, 0xef, 0x26, 0xe2, 0xbb, //0x0000cd80 .quad -4908317832885260310 + 0x8c, 0x36, 0x55, 0x0a, 0xf7, 0x89, 0x04, 0x89, //0x0000cd88 .quad -8573576096483297652 + 0xe5, 0xdb, 0xb2, 0xa3, 0xab, 0xb0, 0xda, 0xea, //0x0000cd90 .quad -1523711272679187483 + 0x2f, 0x84, 0xea, 0xcc, 0x74, 0xac, 0x45, 0x2b, //0x0000cd98 .quad 3118087934678041647 + 0x6f, 0xc9, 0x4f, 0x46, 0x6b, 0xae, 0xc8, 0x92, //0x0000cda0 .quad -7869848573065574033 + 0x9e, 0x92, 0x12, 0x00, 0xc9, 0x8b, 0x0b, 0x3b, //0x0000cda8 .quad 4254647968387469982 + 0xcb, 0xbb, 0xe3, 0x17, 0x06, 0xda, 0x7a, 0xb7, //0x0000cdb0 .quad -5225624697904579637 + 0x45, 0x37, 0x17, 0x40, 0xbb, 0x6e, 0xce, 0x09, //0x0000cdb8 .quad 706623942056949573 + 0xbd, 0xaa, 0xdc, 0x9d, 0x87, 0x90, 0x59, 0xe5, //0x0000cdc0 .quad -1920344853953336643 + 0x16, 0x05, 0x1d, 0x10, 0x6a, 0x0a, 0x42, 0xcc, //0x0000cdc8 .quad -3728406090856200938 + 0xb6, 0xea, 0xa9, 0xc2, 0x54, 0xfa, 0x57, 0x8f, //0x0000cdd0 .quad -8117744561361917258 + 0x2e, 0x23, 0x12, 0x4a, 0x82, 0x46, 0xa9, 0x9f, //0x0000cdd8 .quad -6941939825212513490 + 0x64, 0x65, 0x54, 0xf3, 0xe9, 0xf8, 0x2d, 0xb3, //0x0000cde0 .quad -5535494683275008668 + 0xfa, 0xab, 0x96, 0xdc, 0x22, 0x98, 0x93, 0x47, //0x0000cde8 .quad 5157633273766521850 + 0xbd, 0x7e, 0x29, 0x70, 0x24, 0x77, 0xf9, 0xdf, //0x0000cdf0 .quad -2307682335666372931 + 0xf8, 0x56, 0xbc, 0x93, 0x2b, 0x7e, 0x78, 0x59, //0x0000cdf8 .quad 6447041592208152312 + 0x36, 0xef, 0x19, 0xc6, 0x76, 0xea, 0xfb, 0x8b, //0x0000ce00 .quad -8359830487432564938 + 0x5b, 0xb6, 0x55, 0x3c, 0xdb, 0x4e, 0xeb, 0x57, //0x0000ce08 .quad 6335244004343789147 + 0x03, 0x6b, 0xa0, 0x77, 0x14, 0xe5, 0xfa, 0xae, //0x0000ce10 .quad -5838102090863318269 + 0xf2, 0x23, 0x6b, 0x0b, 0x92, 0x22, 0xe6, 0xed, //0x0000ce18 .quad -1304317031425039374 + 0xc4, 0x85, 0x88, 0x95, 0x59, 0x9e, 0xb9, 0xda, //0x0000ce20 .quad -2685941595151759932 + 0xee, 0xec, 0x45, 0x8e, 0x36, 0xab, 0x5f, 0xe9, //0x0000ce28 .quad -1630396289281299218 + 0x9b, 0x53, 0x75, 0xfd, 0xf7, 0x02, 0xb4, 0x88, //0x0000ce30 .quad -8596242524610931813 + 0x15, 0xb4, 0xeb, 0x18, 0x02, 0xcb, 0xdb, 0x11, //0x0000ce38 .quad 1286845328412881941 + 0x81, 0xa8, 0xd2, 0xfc, 0xb5, 0x03, 0xe1, 0xaa, //0x0000ce40 .quad -6133617137336276863 + 0x1a, 0xa1, 0x26, 0x9f, 0xc2, 0xbd, 0x52, 0xd6, //0x0000ce48 .quad -3003129357911285478 + 0xa2, 0x52, 0x07, 0x7c, 0xa3, 0x44, 0x99, 0xd5, //0x0000ce50 .quad -3055335403242958174 + 0x60, 0x49, 0xf0, 0x46, 0x33, 0x6d, 0xe7, 0x4b, //0x0000ce58 .quad 5469460339465668960 + 0xa5, 0x93, 0x84, 0x2d, 0xe6, 0xca, 0x7f, 0x85, //0x0000ce60 .quad -8827113654667930715 + 0xdc, 0x2d, 0x56, 0x0c, 0x40, 0xa4, 0x70, 0x6f, //0x0000ce68 .quad 8030098730593431004 + 0x8e, 0xb8, 0xe5, 0xb8, 0x9f, 0xbd, 0xdf, 0xa6, //0x0000ce70 .quad -6422206049907525490 + 0x53, 0xb9, 0x6b, 0x0f, 0x50, 0xcd, 0x4c, 0xcb, //0x0000ce78 .quad -3797434642040374957 + 0xb2, 0x26, 0x1f, 0xa7, 0x07, 0xad, 0x97, 0xd0, //0x0000ce80 .quad -3416071543957018958 + 0xa8, 0xa7, 0x46, 0x13, 0xa4, 0x00, 0x20, 0x7e, //0x0000ce88 .quad 9088264752731695016 + 0x2f, 0x78, 0x73, 0xc8, 0x24, 0xcc, 0x5e, 0x82, //0x0000ce90 .quad -9052573742614218705 + 0xc9, 0x28, 0x0c, 0x8c, 0x66, 0x00, 0xd4, 0x8e, //0x0000ce98 .quad -8154892584824854327 + 0x3b, 0x56, 0x90, 0xfa, 0x2d, 0x7f, 0xf6, 0xa2, //0x0000cea0 .quad -6704031159840385477 + 0xfb, 0x32, 0x0f, 0x2f, 0x80, 0x00, 0x89, 0x72, //0x0000cea8 .quad 8253128342678483707 + 0xca, 0x6b, 0x34, 0x79, 0xf9, 0x1e, 0xb4, 0xcb, //0x0000ceb0 .quad -3768352931373093942 + 0xba, 0xff, 0xd2, 0x3a, 0xa0, 0x40, 0x2b, 0x4f, //0x0000ceb8 .quad 5704724409920716730 + 0xbc, 0x86, 0x81, 0xd7, 0xb7, 0x26, 0xa1, 0xfe, //0x0000cec0 .quad -98755145788979524 + 0xa9, 0xbf, 0x87, 0x49, 0xc8, 0x10, 0xf6, 0xe2, //0x0000cec8 .quad -2092466524453879895 + 0x36, 0xf4, 0xb0, 0xe6, 0x32, 0xb8, 0x24, 0x9f, //0x0000ced0 .quad -6979250993759194058 + 0xca, 0xd7, 0xf4, 0x2d, 0x7d, 0xca, 0xd9, 0x0d, //0x0000ced8 .quad 998051431430019018 + 0x43, 0x31, 0x5d, 0xa0, 0x3f, 0xe6, 0xed, 0xc6, //0x0000cee0 .quad -4112377723771604669 + 0xbc, 0x0d, 0x72, 0x79, 0x1c, 0x3d, 0x50, 0x91, //0x0000cee8 .quad -7975807747567252036 + 0x94, 0x7d, 0x74, 0x88, 0xcf, 0x5f, 0xa9, 0xf8, //0x0000cef0 .quad -528786136287117932 + 0x2b, 0x91, 0xce, 0x97, 0x63, 0x4c, 0xa4, 0x75, //0x0000cef8 .quad 8476984389250486571 + 0x7c, 0xce, 0x48, 0xb5, 0xe1, 0xdb, 0x69, 0x9b, //0x0000cf00 .quad -7248020362820530564 + 0xbb, 0x1a, 0xe1, 0x3e, 0xbe, 0xaf, 0x86, 0xc9, //0x0000cf08 .quad -3925256793573221701 + 0x1b, 0x02, 0x9b, 0x22, 0xda, 0x52, 0x44, 0xc2, //0x0000cf10 .quad -4448339435098275301 + 0x69, 0x61, 0x99, 0xce, 0xad, 0x5b, 0xe8, 0xfb, //0x0000cf18 .quad -294884973539139223 + 0xa2, 0xc2, 0x41, 0xab, 0x90, 0x67, 0xd5, 0xf2, //0x0000cf20 .quad -948738275445456222 + 0xc4, 0xb9, 0x3f, 0x42, 0x99, 0x72, 0xe2, 0xfa, //0x0000cf28 .quad -368606216923924028 + 0xa5, 0x19, 0x09, 0x6b, 0xba, 0x60, 0xc5, 0x97, //0x0000cf30 .quad -7510490449794491995 + 0x1b, 0xd4, 0x67, 0xc9, 0x9f, 0x87, 0xcd, 0xdc, //0x0000cf38 .quad -2536221894791146469 + 0x0f, 0x60, 0xcb, 0x05, 0xe9, 0xb8, 0xb6, 0xbd, //0x0000cf40 .quad -4776427043815727089 + 0x21, 0xc9, 0xc1, 0xbb, 0x87, 0xe9, 0x00, 0x54, //0x0000cf48 .quad 6053094668365842721 + 0x13, 0x38, 0x3e, 0x47, 0x23, 0x67, 0x24, 0xed, //0x0000cf50 .quad -1358847786342270957 + 0x69, 0x3b, 0xb2, 0xaa, 0xe9, 0x23, 0x01, 0x29, //0x0000cf58 .quad 2954682317029915497 + 0x0b, 0xe3, 0x86, 0x0c, 0x76, 0xc0, 0x36, 0x94, //0x0000cf60 .quad -7766808894105001205 + 0x22, 0x65, 0xaf, 0x0a, 0x72, 0xb6, 0xa0, 0xf9, //0x0000cf68 .quad -459166561069996766 + 0xce, 0x9b, 0xa8, 0x8f, 0x93, 0x70, 0x44, 0xb9, //0x0000cf70 .quad -5096825099203863602 + 0x6a, 0x3e, 0x5b, 0x8d, 0x0e, 0xe4, 0x08, 0xf8, //0x0000cf78 .quad -573958201337495958 + 0xc2, 0xc2, 0x92, 0x73, 0xb8, 0x8c, 0x95, 0xe7, //0x0000cf80 .quad -1759345355577441598 + 0x05, 0x0e, 0xb2, 0x30, 0x12, 0x1d, 0x0b, 0xb6, //0x0000cf88 .quad -5329133770099257851 + 0xb9, 0xb9, 0x3b, 0x48, 0xf3, 0x77, 0xbd, 0x90, //0x0000cf90 .quad -8017119874876982855 + 0xc3, 0x48, 0x6f, 0x5e, 0x2b, 0xf2, 0xc6, 0xb1, //0x0000cf98 .quad -5636551615525730109 + 0x28, 0xa8, 0x4a, 0x1a, 0xf0, 0xd5, 0xec, 0xb4, //0x0000cfa0 .quad -5409713825168840664 + 0xf4, 0x1a, 0x0b, 0x36, 0xb6, 0xae, 0x38, 0x1e, //0x0000cfa8 .quad 2177682517447613172 + 0x32, 0x52, 0xdd, 0x20, 0x6c, 0x0b, 0x28, 0xe2, //0x0000cfb0 .quad -2150456263033662926 + 0xb1, 0xe1, 0x8d, 0xc3, 0x63, 0xda, 0xc6, 0x25, //0x0000cfb8 .quad 2722103146809516465 + 0x5f, 0x53, 0x8a, 0x94, 0x23, 0x07, 0x59, 0x8d, //0x0000cfc0 .quad -8261564192037121185 + 0x0f, 0xad, 0x38, 0x5a, 0x7e, 0x48, 0x9c, 0x57, //0x0000cfc8 .quad 6313000485183335695 + 0x37, 0xe8, 0xac, 0x79, 0xec, 0x48, 0xaf, 0xb0, //0x0000cfd0 .quad -5715269221619013577 + 0x52, 0xd8, 0xc6, 0xf0, 0x9d, 0x5a, 0x83, 0x2d, //0x0000cfd8 .quad 3279564588051781714 + 0x44, 0x22, 0x18, 0x98, 0x27, 0x1b, 0xdb, 0xdc, //0x0000cfe0 .quad -2532400508596379068 + 0x66, 0x8e, 0xf8, 0x6c, 0x45, 0x31, 0xe4, 0xf8, //0x0000cfe8 .quad -512230283362660762 + 0x6b, 0x15, 0x0f, 0xbf, 0xf8, 0xf0, 0x08, 0x8a, //0x0000cff0 .quad -8500279345513818773 + 0x00, 0x59, 0x1b, 0x64, 0xcb, 0x9e, 0x8e, 0x1b, //0x0000cff8 .quad 1985699082112030976 + 0xc5, 0xda, 0xd2, 0xee, 0x36, 0x2d, 0x8b, 0xac, //0x0000d000 .quad -6013663163464885563 + 0x40, 0x2f, 0x22, 0x3d, 0x7e, 0x46, 0x72, 0xe2, //0x0000d008 .quad -2129562165787349184 + 0x77, 0x91, 0x87, 0xaa, 0x84, 0xf8, 0xad, 0xd7, //0x0000d010 .quad -2905392935903719049 + 0x10, 0xbb, 0x6a, 0xcc, 0x1d, 0xd8, 0x0e, 0x5b, //0x0000d018 .quad 6561419329620589328 + 0xea, 0xba, 0x94, 0xea, 0x52, 0xbb, 0xcc, 0x86, //0x0000d020 .quad -8733399612580906262 + 0xea, 0xb4, 0xc2, 0x9f, 0x12, 0x47, 0xe9, 0x98, //0x0000d028 .quad -7428327965055601430 + 0xa5, 0xe9, 0x39, 0xa5, 0x27, 0xea, 0x7f, 0xa8, //0x0000d030 .quad -6305063497298744923 + 0x25, 0x62, 0xb3, 0x47, 0xd7, 0x98, 0x23, 0x3f, //0x0000d038 .quad 4549648098962661925 + 0x0e, 0x64, 0x88, 0x8e, 0xb1, 0xe4, 0x9f, 0xd2, //0x0000d040 .quad -3269643353196043250 + 0xae, 0x3a, 0xa0, 0x19, 0x0d, 0x7f, 0xec, 0x8e, //0x0000d048 .quad -8147997931578836306 + 0x89, 0x3e, 0x15, 0xf9, 0xee, 0xee, 0xa3, 0x83, //0x0000d050 .quad -8961056123388608887 + 0xad, 0x24, 0x04, 0x30, 0x68, 0xcf, 0x53, 0x19, //0x0000d058 .quad 1825030320404309165 + 0x2b, 0x8e, 0x5a, 0xb7, 0xaa, 0xea, 0x8c, 0xa4, //0x0000d060 .quad -6589634135808373205 + 0xd8, 0x2d, 0x05, 0x3c, 0x42, 0xc3, 0xa8, 0x5f, //0x0000d068 .quad 6892973918932774360 + 0xb6, 0x31, 0x31, 0x65, 0x55, 0x25, 0xb0, 0xcd, //0x0000d070 .quad -3625356651333078602 + 0x4e, 0x79, 0x06, 0xcb, 0x12, 0xf4, 0x92, 0x37, //0x0000d078 .quad 4004531380238580046 + 0x11, 0xbf, 0x3e, 0x5f, 0x55, 0x17, 0x8e, 0x80, //0x0000d080 .quad -9183376934724255983 + 0xd1, 0x0b, 0xe4, 0xbe, 0x8b, 0xd8, 0xbb, 0xe2, //0x0000d088 .quad -2108853905778275375 + 0xd6, 0x6e, 0x0e, 0xb7, 0x2a, 0x9d, 0xb1, 0xa0, //0x0000d090 .quad -6867535149977932074 + 0xc5, 0x0e, 0x9d, 0xae, 0xae, 0xce, 0x6a, 0x5b, //0x0000d098 .quad 6587304654631931589 + 0x8b, 0x0a, 0xd2, 0x64, 0x75, 0x04, 0xde, 0xc8, //0x0000d0a0 .quad -3972732919045027189 + 0x76, 0x52, 0x44, 0x5a, 0x5a, 0x82, 0x45, 0xf2, //0x0000d0a8 .quad -989241218564861322 + 0x2e, 0x8d, 0x06, 0xbe, 0x92, 0x85, 0x15, 0xfb, //0x0000d0b0 .quad -354230130378896082 + 0x13, 0x67, 0xd5, 0xf0, 0xf0, 0xe2, 0xd6, 0xee, //0x0000d0b8 .quad -1236551523206076653 + 0x3d, 0x18, 0xc4, 0xb6, 0x7b, 0x73, 0xed, 0x9c, //0x0000d0c0 .quad -7138922859127891907 + 0x6c, 0x60, 0x85, 0x96, 0xd6, 0x4d, 0x46, 0x55, //0x0000d0c8 .quad 6144684325637283948 + 0x4c, 0x1e, 0x75, 0xa4, 0x5a, 0xd0, 0x28, 0xc4, //0x0000d0d0 .quad -4311967555482476980 + 0x87, 0xb8, 0x26, 0x3c, 0x4c, 0xe1, 0x97, 0xaa, //0x0000d0d8 .quad -6154202648235558777 + 0xdf, 0x65, 0x92, 0x4d, 0x71, 0x04, 0x33, 0xf5, //0x0000d0e0 .quad -778273425925708321 + 0xa9, 0x66, 0x30, 0x4b, 0x9f, 0xd9, 0x3d, 0xd5, //0x0000d0e8 .quad -3081067291867060567 + 0xab, 0x7f, 0x7b, 0xd0, 0xc6, 0xe2, 0x3f, 0x99, //0x0000d0f0 .quad -7403949918844649557 + 0x2a, 0x40, 0xfe, 0x8e, 0x03, 0xa8, 0x46, 0xe5, //0x0000d0f8 .quad -1925667057416912854 + 0x96, 0x5f, 0x9a, 0x84, 0x78, 0xdb, 0x8f, 0xbf, //0x0000d100 .quad -4643251380128424042 + 0x34, 0xd0, 0xbd, 0x72, 0x04, 0x52, 0x98, 0xde, //0x0000d108 .quad -2407083821771141068 + 0x7c, 0xf7, 0xc0, 0xa5, 0x56, 0xd2, 0x73, 0xef, //0x0000d110 .quad -1192378206733142148 + 0x41, 0x44, 0x6d, 0x8f, 0x85, 0x66, 0x3e, 0x96, //0x0000d118 .quad -7620540795641314239 + 0xad, 0x9a, 0x98, 0x27, 0x76, 0x63, 0xa8, 0x95, //0x0000d120 .quad -7662765406849295699 + 0xa9, 0x4a, 0xa4, 0x79, 0x13, 0x00, 0xe7, 0xdd, //0x0000d128 .quad -2456994988062127447 + 0x59, 0xc1, 0x7e, 0xb1, 0x53, 0x7c, 0x12, 0xbb, //0x0000d130 .quad -4966770740134231719 + 0x53, 0x5d, 0x0d, 0x58, 0x18, 0xc0, 0x60, 0x55, //0x0000d138 .quad 6152128301777116499 + 0xaf, 0x71, 0xde, 0x9d, 0x68, 0x1b, 0xd7, 0xe9, //0x0000d140 .quad -1596777406740401745 + 0xa7, 0xb4, 0x10, 0x6e, 0x1e, 0xf0, 0xb8, 0xaa, //0x0000d148 .quad -6144897678060768089 + 0x0d, 0x07, 0xab, 0x62, 0x21, 0x71, 0x26, 0x92, //0x0000d150 .quad -7915514906853832947 + 0xe9, 0x70, 0xca, 0x04, 0x13, 0x96, 0xb3, 0xca, //0x0000d158 .quad -3840561048787980055 + 0xd1, 0xc8, 0x55, 0xbb, 0x69, 0x0d, 0xb0, 0xb6, //0x0000d160 .quad -5282707615139903279 + 0x23, 0x0d, 0xfd, 0xc5, 0x97, 0x7b, 0x60, 0x3d, //0x0000d168 .quad 4422670725869800739 + 0x05, 0x3b, 0x2b, 0x2a, 0xc4, 0x10, 0x5c, 0xe4, //0x0000d170 .quad -1991698500497491195 + 0x6b, 0x50, 0x7c, 0xb7, 0x7d, 0x9a, 0xb8, 0x8c, //0x0000d178 .quad -8306719647944912789 + 0xe3, 0x04, 0x5b, 0x9a, 0x7a, 0x8a, 0xb9, 0x8e, //0x0000d180 .quad -8162340590452013853 + 0x43, 0xb2, 0xad, 0x92, 0x8e, 0x60, 0xf3, 0x77, //0x0000d188 .quad 8643358275316593219 + 0x1c, 0xc6, 0xf1, 0x40, 0x19, 0xed, 0x67, 0xb2, //0x0000d190 .quad -5591239719637629412 + 0xd4, 0x1e, 0x59, 0x37, 0xb2, 0x38, 0xf0, 0x55, //0x0000d198 .quad 6192511825718353620 + 0xa3, 0x37, 0x2e, 0x91, 0x5f, 0xe8, 0x01, 0xdf, //0x0000d1a0 .quad -2377363631119648861 + 0x89, 0x66, 0x2f, 0xc5, 0xde, 0x46, 0x6c, 0x6b, //0x0000d1a8 .quad 7740639782147942025 + 0xc6, 0xe2, 0xbc, 0xba, 0x3b, 0x31, 0x61, 0x8b, //0x0000d1b0 .quad -8403381297090862394 + 0x16, 0xa0, 0x3d, 0x3b, 0x4b, 0xac, 0x23, 0x23, //0x0000d1b8 .quad 2532056854628769814 + 0x77, 0x1b, 0x6c, 0xa9, 0x8a, 0x7d, 0x39, 0xae, //0x0000d1c0 .quad -5892540602936190089 + 0x1b, 0x08, 0x0d, 0x0a, 0x5e, 0x97, 0xec, 0xab, //0x0000d1c8 .quad -6058300968568813541 + 0x55, 0x22, 0xc7, 0x53, 0xed, 0xdc, 0xc7, 0xd9, //0x0000d1d0 .quad -2753989735242849707 + 0x22, 0x4a, 0x90, 0x8c, 0x35, 0xbd, 0xe7, 0x96, //0x0000d1d8 .quad -7572876210711016926 + 0x75, 0x75, 0x5c, 0x54, 0x14, 0xea, 0x1c, 0x88, //0x0000d1e0 .quad -8638772612167862923 + 0x55, 0x2e, 0xda, 0x77, 0x41, 0xd6, 0x50, 0x7e, //0x0000d1e8 .quad 9102010423587778133 + 0xd2, 0x92, 0x73, 0x69, 0x99, 0x24, 0x24, 0xaa, //0x0000d1f0 .quad -6186779746782440750 + 0xea, 0xb9, 0xd0, 0xd5, 0xd1, 0x0b, 0xe5, 0xdd, //0x0000d1f8 .quad -2457545025797441046 + 0x87, 0x77, 0xd0, 0xc3, 0xbf, 0x2d, 0xad, 0xd4, //0x0000d200 .quad -3121788665050663033 + 0x65, 0xe8, 0x44, 0x4b, 0xc6, 0x4e, 0x5e, 0x95, //0x0000d208 .quad -7683617300674189211 + 0xb4, 0x4a, 0x62, 0xda, 0x97, 0x3c, 0xec, 0x84, //0x0000d210 .quad -8868646943297746252 + 0x3f, 0x11, 0x0b, 0xef, 0x3b, 0xf1, 0x5a, 0xbd, //0x0000d218 .quad -4802260812921368257 + 0x61, 0xdd, 0xfa, 0xd0, 0xbd, 0x4b, 0x27, 0xa6, //0x0000d220 .quad -6474122660694794911 + 0x8f, 0xd5, 0xcd, 0xea, 0x8a, 0xad, 0xb1, 0xec, //0x0000d228 .quad -1391139997724322417 + 0xba, 0x94, 0x39, 0x45, 0xad, 0x1e, 0xb1, 0xcf, //0x0000d230 .quad -3480967307441105734 + 0xf3, 0x4a, 0x81, 0xa5, 0xed, 0x18, 0xde, 0x67, //0x0000d238 .quad 7484447039699372787 + 0xf4, 0xfc, 0x43, 0x4b, 0x2c, 0xb3, 0xce, 0x81, //0x0000d240 .quad -9093133594791772940 + 0xd8, 0xce, 0x70, 0x87, 0x94, 0xcf, 0xea, 0x80, //0x0000d248 .quad -9157278655470055720 + 0x31, 0xfc, 0x14, 0x5e, 0xf7, 0x5f, 0x42, 0xa2, //0x0000d250 .quad -6754730975062328271 + 0x8e, 0x02, 0x4d, 0xa9, 0x79, 0x83, 0x25, 0xa1, //0x0000d258 .quad -6834912300910181746 + 0x3e, 0x3b, 0x9a, 0x35, 0xf5, 0xf7, 0xd2, 0xca, //0x0000d260 .quad -3831727700400522434 + 0x31, 0x43, 0xa0, 0x13, 0x58, 0xe4, 0x6e, 0x09, //0x0000d268 .quad 679731660717048625 + 0x0d, 0xca, 0x00, 0x83, 0xf2, 0xb5, 0x87, 0xfd, //0x0000d270 .quad -177973607073265139 + 0xfd, 0x53, 0x88, 0x18, 0x6e, 0x9d, 0xca, 0x8b, //0x0000d278 .quad -8373707460958465027 + 0x48, 0x7e, 0xe0, 0x91, 0xb7, 0xd1, 0x74, 0x9e, //0x0000d280 .quad -7028762532061872568 + 0x7e, 0x34, 0x55, 0xcf, 0x64, 0xa2, 0x5e, 0x77, //0x0000d288 .quad 8601490892183123070 + 0xda, 0x9d, 0x58, 0x76, 0x25, 0x06, 0x12, 0xc6, //0x0000d290 .quad -4174267146649952806 + 0x9e, 0x81, 0x2a, 0x03, 0xfe, 0x4a, 0x36, 0x95, //0x0000d298 .quad -7694880458480647778 + 0x51, 0xc5, 0xee, 0xd3, 0xae, 0x87, 0x96, 0xf7, //0x0000d2a0 .quad -606147914885053103 + 0x05, 0x22, 0xf5, 0x83, 0xbd, 0xdd, 0x83, 0x3a, //0x0000d2a8 .quad 4216457482181353989 + 0x52, 0x3b, 0x75, 0x44, 0xcd, 0x14, 0xbe, 0x9a, //0x0000d2b0 .quad -7296371474444240046 + 0x43, 0x35, 0x79, 0x72, 0x96, 0x6a, 0x92, 0xc4, //0x0000d2b8 .quad -4282243101277735613 + 0x27, 0x8a, 0x92, 0x95, 0x00, 0x9a, 0x6d, 0xc1, //0x0000d2c0 .quad -4508778324627912153 + 0x94, 0x82, 0x17, 0x0f, 0x3c, 0x05, 0xb7, 0x75, //0x0000d2c8 .quad 8482254178684994196 + 0xb1, 0x2c, 0xf7, 0xba, 0x80, 0x00, 0xc9, 0xf1, //0x0000d2d0 .quad -1024286887357502287 + 0x39, 0x63, 0xdd, 0x12, 0x8b, 0xc6, 0x24, 0x53, //0x0000d2d8 .quad 5991131704928854841 + 0xee, 0x7b, 0xda, 0x74, 0x50, 0xa0, 0x1d, 0x97, //0x0000d2e0 .quad -7557708332239520786 + 0x04, 0x5e, 0xca, 0xeb, 0x16, 0xfc, 0xf6, 0xd3, //0x0000d2e8 .quad -3173071712060547580 + 0xea, 0x1a, 0x11, 0x92, 0x64, 0x08, 0xe5, 0xbc, //0x0000d2f0 .quad -4835449396872013078 + 0x85, 0xf5, 0xbc, 0xa6, 0x1c, 0xbb, 0xf4, 0x88, //0x0000d2f8 .quad -8578025658503072379 + 0xa5, 0x61, 0x95, 0xb6, 0x7d, 0x4a, 0x1e, 0xec, //0x0000d300 .quad -1432625727662628443 + 0xe6, 0x32, 0x6c, 0xd0, 0xe3, 0xe9, 0x31, 0x2b, //0x0000d308 .quad 3112525982153323238 + 0x07, 0x5d, 0x1d, 0x92, 0x8e, 0xee, 0x92, 0x93, //0x0000d310 .quad -7812920107430224633 + 0xd0, 0x9f, 0x43, 0x62, 0x2e, 0x32, 0xff, 0x3a, //0x0000d318 .quad 4251171748059520976 + 0x49, 0xb4, 0xa4, 0x36, 0x32, 0xaa, 0x77, 0xb8, //0x0000d320 .quad -5154464115860392887 + 0xc3, 0x87, 0xd4, 0xfa, 0xb9, 0xfe, 0xbe, 0x09, //0x0000d328 .quad 702278666647013315 + 0x5b, 0xe1, 0x4d, 0xc4, 0xbe, 0x94, 0x95, 0xe6, //0x0000d330 .quad -1831394126398103205 + 0xb4, 0xa9, 0x89, 0x79, 0x68, 0xbe, 0x2e, 0x4c, //0x0000d338 .quad 5489534351736154548 + 0xd9, 0xac, 0xb0, 0x3a, 0xf7, 0x7c, 0x1d, 0x90, //0x0000d340 .quad -8062150356639896359 + 0x11, 0x0a, 0xf6, 0x4b, 0x01, 0x37, 0x9d, 0x0f, //0x0000d348 .quad 1125115960621402641 + 0x0f, 0xd8, 0x5c, 0x09, 0x35, 0xdc, 0x24, 0xb4, //0x0000d350 .quad -5466001927372482545 + 0x95, 0x8c, 0xf3, 0x9e, 0xc1, 0x84, 0x84, 0x53, //0x0000d358 .quad 6018080969204141205 + 0x13, 0x0e, 0xb4, 0x4b, 0x42, 0x13, 0x2e, 0xe1, //0x0000d360 .quad -2220816390788215277 + 0xba, 0x6f, 0xb0, 0x06, 0xf2, 0xa5, 0x65, 0x28, //0x0000d368 .quad 2910915193077788602 + 0xcb, 0x88, 0x50, 0x6f, 0x09, 0xcc, 0xbc, 0x8c, //0x0000d370 .quad -8305539271883716405 + 0xd4, 0x45, 0x2e, 0x44, 0xb7, 0x87, 0x3f, 0xf9, //0x0000d378 .quad -486521013540076076 + 0xfe, 0xaa, 0x24, 0xcb, 0x0b, 0xff, 0xeb, 0xaf, //0x0000d380 .quad -5770238071427257602 + 0x49, 0xd7, 0x39, 0x15, 0xa5, 0x69, 0x8f, 0xf7, //0x0000d388 .quad -608151266925095095 + 0xbe, 0xd5, 0xed, 0xbd, 0xce, 0xfe, 0xe6, 0xdb, //0x0000d390 .quad -2601111570856684098 + 0x1c, 0x4d, 0x88, 0x5a, 0x0e, 0x44, 0x73, 0xb5, //0x0000d398 .quad -5371875102083756772 + 0x97, 0xa5, 0xb4, 0x36, 0x41, 0x5f, 0x70, 0x89, //0x0000d3a0 .quad -8543223759426509417 + 0x31, 0x30, 0x95, 0xf8, 0x88, 0x0a, 0x68, 0x31, //0x0000d3a8 .quad 3560107088838733873 + 0xfc, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x0000d3b0 .quad -6067343680855748868 + 0x3e, 0x7c, 0xba, 0x36, 0x2b, 0x0d, 0xc2, 0xfd, //0x0000d3b8 .quad -161552157378970562 + 0xbc, 0x42, 0x7a, 0xe5, 0xd5, 0x94, 0xbf, 0xd6, //0x0000d3c0 .quad -2972493582642298180 + 0x4d, 0x1b, 0x69, 0x04, 0x76, 0x90, 0x32, 0x3d, //0x0000d3c8 .quad 4409745821703674701 + 0xb5, 0x69, 0x6c, 0xaf, 0x05, 0xbd, 0x37, 0x86, //0x0000d3d0 .quad -8775337516792518219 + 0x10, 0xb1, 0xc1, 0xc2, 0x49, 0x9a, 0x3f, 0xa6, //0x0000d3d8 .quad -6467280898289979120 + 0x23, 0x84, 0x47, 0x1b, 0x47, 0xac, 0xc5, 0xa7, //0x0000d3e0 .quad -6357485877563259869 + 0x54, 0x1d, 0x72, 0x33, 0xdc, 0x80, 0xcf, 0x0f, //0x0000d3e8 .quad 1139270913992301908 + 0x2b, 0x65, 0x19, 0xe2, 0x58, 0x17, 0xb7, 0xd1, //0x0000d3f0 .quad -3335171328526686933 + 0xa9, 0xa4, 0x4e, 0x40, 0x13, 0x61, 0xc3, 0xd3, //0x0000d3f8 .quad -3187597375937010519 + 0x3b, 0xdf, 0x4f, 0x8d, 0x97, 0x6e, 0x12, 0x83, //0x0000d400 .quad -9002011107970261189 + 0xea, 0x26, 0x31, 0x08, 0xac, 0x1c, 0x5a, 0x64, //0x0000d408 .quad 7231123676894144234 + 0x0a, 0xd7, 0xa3, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, //0x0000d410 .quad -6640827866535438582 + 0xa4, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, 0x70, 0x3d, //0x0000d418 .quad 4427218577690292388 + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x0000d420 .quad -3689348814741910324 + 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x0000d428 .quad -3689348814741910323 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x0000d430 .quad -9223372036854775808 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d438 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, //0x0000d440 .quad -6917529027641081856 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d448 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, //0x0000d450 .quad -4035225266123964416 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d458 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, //0x0000d460 .quad -432345564227567616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d468 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x9c, //0x0000d470 .quad -7187745005283311616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d478 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xc3, //0x0000d480 .quad -4372995238176751616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d488 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xf4, //0x0000d490 .quad -854558029293551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d498 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x98, //0x0000d4a0 .quad -7451627795949551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d4a8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xbc, 0xbe, //0x0000d4b0 .quad -4702848726509551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d4b8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6b, 0xee, //0x0000d4c0 .quad -1266874889709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d4c8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x02, 0x95, //0x0000d4d0 .quad -7709325833709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d4d8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x40, 0xb7, 0x43, 0xba, //0x0000d4e0 .quad -5024971273709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d4e8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0xd4, 0xe8, //0x0000d4f0 .quad -1669528073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d4f8 .quad 0 + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xe7, 0x84, 0x91, //0x0000d500 .quad -7960984073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d508 .quad 0 + 0x00, 0x00, 0x00, 0x80, 0xf4, 0x20, 0xe6, 0xb5, //0x0000d510 .quad -5339544073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d518 .quad 0 + 0x00, 0x00, 0x00, 0xa0, 0x31, 0xa9, 0x5f, 0xe3, //0x0000d520 .quad -2062744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d528 .quad 0 + 0x00, 0x00, 0x00, 0x04, 0xbf, 0xc9, 0x1b, 0x8e, //0x0000d530 .quad -8206744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d538 .quad 0 + 0x00, 0x00, 0x00, 0xc5, 0x2e, 0xbc, 0xa2, 0xb1, //0x0000d540 .quad -5646744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d548 .quad 0 + 0x00, 0x00, 0x40, 0x76, 0x3a, 0x6b, 0x0b, 0xde, //0x0000d550 .quad -2446744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d558 .quad 0 + 0x00, 0x00, 0xe8, 0x89, 0x04, 0x23, 0xc7, 0x8a, //0x0000d560 .quad -8446744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d568 .quad 0 + 0x00, 0x00, 0x62, 0xac, 0xc5, 0xeb, 0x78, 0xad, //0x0000d570 .quad -5946744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d578 .quad 0 + 0x00, 0x80, 0x7a, 0x17, 0xb7, 0x26, 0xd7, 0xd8, //0x0000d580 .quad -2821744073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d588 .quad 0 + 0x00, 0x90, 0xac, 0x6e, 0x32, 0x78, 0x86, 0x87, //0x0000d590 .quad -8681119073709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d598 .quad 0 + 0x00, 0xb4, 0x57, 0x0a, 0x3f, 0x16, 0x68, 0xa9, //0x0000d5a0 .quad -6239712823709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d5a8 .quad 0 + 0x00, 0xa1, 0xed, 0xcc, 0xce, 0x1b, 0xc2, 0xd3, //0x0000d5b0 .quad -3187955011209551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d5b8 .quad 0 + 0xa0, 0x84, 0x14, 0x40, 0x61, 0x51, 0x59, 0x84, //0x0000d5c0 .quad -8910000909647051616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d5c8 .quad 0 + 0xc8, 0xa5, 0x19, 0x90, 0xb9, 0xa5, 0x6f, 0xa5, //0x0000d5d0 .quad -6525815118631426616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d5d8 .quad 0 + 0x3a, 0x0f, 0x20, 0xf4, 0x27, 0x8f, 0xcb, 0xce, //0x0000d5e0 .quad -3545582879861895366 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000d5e8 .quad 0 + 0x84, 0x09, 0x94, 0xf8, 0x78, 0x39, 0x3f, 0x81, //0x0000d5f0 .quad -9133518327554766460 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, //0x0000d5f8 .quad 4611686018427387904 + 0xe5, 0x0b, 0xb9, 0x36, 0xd7, 0x07, 0x8f, 0xa1, //0x0000d600 .quad -6805211891016070171 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, //0x0000d608 .quad 5764607523034234880 + 0xde, 0x4e, 0x67, 0x04, 0xcd, 0xc9, 0xf2, 0xc9, //0x0000d610 .quad -3894828845342699810 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, //0x0000d618 .quad -6629298651489370112 + 0x96, 0x22, 0x81, 0x45, 0x40, 0x7c, 0x6f, 0xfc, //0x0000d620 .quad -256850038250986858 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, //0x0000d628 .quad 5548434740920451072 + 0x9d, 0xb5, 0x70, 0x2b, 0xa8, 0xad, 0xc5, 0x9d, //0x0000d630 .quad -7078060301547948643 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf0, //0x0000d638 .quad -1143914305352105984 + 0x05, 0xe3, 0x4c, 0x36, 0x12, 0x19, 0x37, 0xc5, //0x0000d640 .quad -4235889358507547899 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, //0x0000d648 .quad 7793479155164643328 + 0xc6, 0x1b, 0xe0, 0xc3, 0x56, 0xdf, 0x84, 0xf6, //0x0000d650 .quad -683175679707046970 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0xc7, //0x0000d658 .quad -4093209111326359552 + 0x5c, 0x11, 0x6c, 0x3a, 0x96, 0x0b, 0x13, 0x9a, //0x0000d660 .quad -7344513827457986212 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7f, 0x3c, //0x0000d668 .quad 4359273333062107136 + 0xb3, 0x15, 0x07, 0xc9, 0x7b, 0xce, 0x97, 0xc0, //0x0000d670 .quad -4568956265895094861 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9f, 0x4b, //0x0000d678 .quad 5449091666327633920 + 0x20, 0xdb, 0x48, 0xbb, 0x1a, 0xc2, 0xbd, 0xf0, //0x0000d680 .quad -1099509313941480672 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x86, 0x1e, //0x0000d688 .quad 2199678564482154496 + 0xf4, 0x88, 0x0d, 0xb5, 0x50, 0x99, 0x76, 0x96, //0x0000d690 .quad -7604722348854507276 + 0x00, 0x00, 0x00, 0x00, 0x80, 0x44, 0x14, 0x13, //0x0000d698 .quad 1374799102801346560 + 0x31, 0xeb, 0x50, 0xe2, 0xa4, 0x3f, 0x14, 0xbc, //0x0000d6a0 .quad -4894216917640746191 + 0x00, 0x00, 0x00, 0x00, 0xa0, 0x55, 0xd9, 0x17, //0x0000d6a8 .quad 1718498878501683200 + 0xfd, 0x25, 0xe5, 0x1a, 0x8e, 0x4f, 0x19, 0xeb, //0x0000d6b0 .quad -1506085128623544835 + 0x00, 0x00, 0x00, 0x00, 0x08, 0xab, 0xcf, 0x5d, //0x0000d6b8 .quad 6759809616554491904 + 0xbe, 0x37, 0xcf, 0xd0, 0xb8, 0xd1, 0xef, 0x92, //0x0000d6c0 .quad -7858832233030797378 + 0x00, 0x00, 0x00, 0x00, 0xe5, 0xca, 0xa1, 0x5a, //0x0000d6c8 .quad 6530724019560251392 + 0xad, 0x05, 0x03, 0x05, 0x27, 0xc6, 0xab, 0xb7, //0x0000d6d0 .quad -5211854272861108819 + 0x00, 0x00, 0x00, 0x40, 0x9e, 0x3d, 0x4a, 0xf1, //0x0000d6d8 .quad -1059967012404461568 + 0x19, 0xc7, 0x43, 0xc6, 0xb0, 0xb7, 0x96, 0xe5, //0x0000d6e0 .quad -1903131822648998119 + 0x00, 0x00, 0x00, 0xd0, 0x05, 0xcd, 0x9c, 0x6d, //0x0000d6e8 .quad 7898413271349198848 + 0x6f, 0x5c, 0xea, 0x7b, 0xce, 0x32, 0x7e, 0x8f, //0x0000d6f0 .quad -8106986416796705681 + 0x00, 0x00, 0x00, 0xa2, 0x23, 0x00, 0x82, 0xe4, //0x0000d6f8 .quad -1981020733047832576 + 0x8b, 0xf3, 0xe4, 0x1a, 0x82, 0xbf, 0x5d, 0xb3, //0x0000d700 .quad -5522047002568494197 + 0x00, 0x00, 0x80, 0x8a, 0x2c, 0x80, 0xa2, 0xdd, //0x0000d708 .quad -2476275916309790720 + 0x6e, 0x30, 0x9e, 0xa1, 0x62, 0x2f, 0x35, 0xe0, //0x0000d710 .quad -2290872734783229842 + 0x00, 0x00, 0x20, 0xad, 0x37, 0x20, 0x0b, 0xd5, //0x0000d718 .quad -3095344895387238400 + 0x45, 0xde, 0x02, 0xa5, 0x9d, 0x3d, 0x21, 0x8c, //0x0000d720 .quad -8349324486880600507 + 0x00, 0x00, 0x34, 0xcc, 0x22, 0xf4, 0x26, 0x45, //0x0000d728 .quad 4982938468024057856 + 0xd6, 0x95, 0x43, 0x0e, 0x05, 0x8d, 0x29, 0xaf, //0x0000d730 .quad -5824969590173362730 + 0x00, 0x00, 0x41, 0x7f, 0x2b, 0xb1, 0x70, 0x96, //0x0000d738 .quad -7606384970252091392 + 0x4c, 0x7b, 0xd4, 0x51, 0x46, 0xf0, 0xf3, 0xda, //0x0000d740 .quad -2669525969289315508 + 0x00, 0x40, 0x11, 0x5f, 0x76, 0xdd, 0x0c, 0x3c, //0x0000d748 .quad 4327076842467049472 + 0x0f, 0xcd, 0x24, 0xf3, 0x2b, 0x76, 0xd8, 0x88, //0x0000d750 .quad -8585982758446904049 + 0x00, 0xc8, 0x6a, 0xfb, 0x69, 0x0a, 0x88, 0xa5, //0x0000d758 .quad -6518949010312869888 + 0x53, 0x00, 0xee, 0xef, 0xb6, 0x93, 0x0e, 0xab, //0x0000d760 .quad -6120792429631242157 + 0x00, 0x7a, 0x45, 0x7a, 0x04, 0x0d, 0xea, 0x8e, //0x0000d768 .quad -8148686262891087360 + 0x68, 0x80, 0xe9, 0xab, 0xa4, 0x38, 0xd2, 0xd5, //0x0000d770 .quad -3039304518611664792 + 0x80, 0xd8, 0xd6, 0x98, 0x45, 0x90, 0xa4, 0x72, //0x0000d778 .quad 8260886245095692416 + 0x41, 0xf0, 0x71, 0xeb, 0x66, 0x63, 0xa3, 0x85, //0x0000d780 .quad -8817094351773372351 + 0x50, 0x47, 0x86, 0x7f, 0x2b, 0xda, 0xa6, 0x47, //0x0000d788 .quad 5163053903184807760 + 0x51, 0x6c, 0x4e, 0xa6, 0x40, 0x3c, 0x0c, 0xa7, //0x0000d790 .quad -6409681921289327535 + 0x24, 0xd9, 0x67, 0x5f, 0xb6, 0x90, 0x90, 0x99, //0x0000d798 .quad -7381240676301154012 + 0x65, 0x07, 0xe2, 0xcf, 0x50, 0x4b, 0xcf, 0xd0, //0x0000d7a0 .quad -3400416383184271515 + 0x6d, 0xcf, 0x41, 0xf7, 0xe3, 0xb4, 0xf4, 0xff, //0x0000d7a8 .quad -3178808521666707 + 0x9f, 0x44, 0xed, 0x81, 0x12, 0x8f, 0x81, 0x82, //0x0000d7b0 .quad -9042789267131251553 + 0xa5, 0x21, 0x89, 0x7a, 0x0e, 0xf1, 0xf8, 0xbf, //0x0000d7b8 .quad -4613672773753429595 + 0xc7, 0x95, 0x68, 0x22, 0xd7, 0xf2, 0x21, 0xa3, //0x0000d7c0 .quad -6691800565486676537 + 0x0e, 0x6a, 0x2b, 0x19, 0x52, 0x2d, 0xf7, 0xaf, //0x0000d7c8 .quad -5767090967191786994 + 0x39, 0xbb, 0x02, 0xeb, 0x8c, 0x6f, 0xea, 0xcb, //0x0000d7d0 .quad -3753064688430957767 + 0x91, 0x44, 0x76, 0x9f, 0xa6, 0xf8, 0xf4, 0x9b, //0x0000d7d8 .quad -7208863708989733743 + 0x08, 0x6a, 0xc3, 0x25, 0x70, 0x0b, 0xe5, 0xfe, //0x0000d7e0 .quad -79644842111309304 + 0xb5, 0xd5, 0x53, 0x47, 0xd0, 0x36, 0xf2, 0x02, //0x0000d7e8 .quad 212292400617608629 + 0x45, 0x22, 0x9a, 0x17, 0x26, 0x27, 0x4f, 0x9f, //0x0000d7f0 .quad -6967307053960650171 + 0x91, 0x65, 0x94, 0x2c, 0x42, 0x62, 0xd7, 0x01, //0x0000d7f8 .quad 132682750386005393 + 0xd6, 0xaa, 0x80, 0x9d, 0xef, 0xf0, 0x22, 0xc7, //0x0000d800 .quad -4097447799023424810 + 0xf6, 0x7e, 0xb9, 0xb7, 0xd2, 0x3a, 0x4d, 0x42, //0x0000d808 .quad 4777539456409894646 + 0x8b, 0xd5, 0xe0, 0x84, 0x2b, 0xad, 0xeb, 0xf8, //0x0000d810 .quad -510123730351893109 + 0xb3, 0xde, 0xa7, 0x65, 0x87, 0x89, 0xe0, 0xd2, //0x0000d818 .quad -3251447716342407501 + 0x77, 0x85, 0x0c, 0x33, 0x3b, 0x4c, 0x93, 0x9b, //0x0000d820 .quad -7236356359111015049 + 0x30, 0xeb, 0x88, 0x9f, 0xf4, 0x55, 0xcc, 0x63, //0x0000d828 .quad 7191217214140771120 + 0xd5, 0xa6, 0xcf, 0xff, 0x49, 0x1f, 0x78, 0xc2, //0x0000d830 .quad -4433759430461380907 + 0xfc, 0x25, 0x6b, 0xc7, 0x71, 0x6b, 0xbf, 0x3c, //0x0000d838 .quad 4377335499248575996 + 0x8a, 0x90, 0xc3, 0x7f, 0x1c, 0x27, 0x16, 0xf3, //0x0000d840 .quad -930513269649338230 + 0x7b, 0xef, 0x45, 0x39, 0x4e, 0x46, 0xef, 0x8b, //0x0000d848 .quad -8363388681221443717 + 0x56, 0x3a, 0xda, 0xcf, 0x71, 0xd8, 0xed, 0x97, //0x0000d850 .quad -7499099821171918250 + 0xad, 0xb5, 0xcb, 0xe3, 0xf0, 0x8b, 0x75, 0x97, //0x0000d858 .quad -7532960934977096275 + 0xec, 0xc8, 0xd0, 0x43, 0x8e, 0x4e, 0xe9, 0xbd, //0x0000d860 .quad -4762188758037509908 + 0x18, 0xa3, 0xbe, 0x1c, 0xed, 0xee, 0x52, 0x3d, //0x0000d868 .quad 4418856886560793368 + 0x27, 0xfb, 0xc4, 0xd4, 0x31, 0xa2, 0x63, 0xed, //0x0000d870 .quad -1341049929119499481 + 0xde, 0x4b, 0xee, 0x63, 0xa8, 0xaa, 0xa7, 0x4c, //0x0000d878 .quad 5523571108200991710 + 0xf8, 0x1c, 0xfb, 0x24, 0x5f, 0x45, 0x5e, 0x94, //0x0000d880 .quad -7755685233340769032 + 0x6b, 0xef, 0x74, 0x3e, 0xa9, 0xca, 0xe8, 0x8f, //0x0000d888 .quad -8076983103442849941 + 0x36, 0xe4, 0x39, 0xee, 0xb6, 0xd6, 0x75, 0xb9, //0x0000d890 .quad -5082920523248573386 + 0x45, 0x2b, 0x12, 0x8e, 0x53, 0xfd, 0xe2, 0xb3, //0x0000d898 .quad -5484542860876174523 + 0x44, 0x5d, 0xc8, 0xa9, 0x64, 0x4c, 0xd3, 0xe7, //0x0000d8a0 .quad -1741964635633328828 + 0x17, 0xb6, 0x96, 0x71, 0xa8, 0xbc, 0xdb, 0x60, //0x0000d8a8 .quad 6979379479186945559 + 0x4a, 0x3a, 0x1d, 0xea, 0xbe, 0x0f, 0xe4, 0x90, //0x0000d8b0 .quad -8006256924911912374 + 0xce, 0x31, 0xfe, 0x46, 0xe9, 0x55, 0x89, 0xbc, //0x0000d8b8 .quad -4861259862362934834 + 0xdd, 0x88, 0xa4, 0xa4, 0xae, 0x13, 0x1d, 0xb5, //0x0000d8c0 .quad -5396135137712502563 + 0x42, 0xbe, 0xbd, 0x98, 0x63, 0xab, 0xab, 0x6b, //0x0000d8c8 .quad 7758483227328495170 + 0x14, 0xab, 0xcd, 0x4d, 0x9a, 0x58, 0x64, 0xe2, //0x0000d8d0 .quad -2133482903713240300 + 0xd2, 0x2d, 0xed, 0x7e, 0x3c, 0x96, 0x96, 0xc6, //0x0000d8d8 .quad -4136954021121544750 + 0xec, 0x8a, 0xa0, 0x70, 0x60, 0xb7, 0x7e, 0x8d, //0x0000d8e0 .quad -8250955842461857044 + 0xa3, 0x3c, 0x54, 0xcf, 0xe5, 0x1d, 0x1e, 0xfc, //0x0000d8e8 .quad -279753253987271517 + 0xa8, 0xad, 0xc8, 0x8c, 0x38, 0x65, 0xde, 0xb0, //0x0000d8f0 .quad -5702008784649933400 + 0xcc, 0x4b, 0x29, 0x43, 0x5f, 0xa5, 0x25, 0x3b, //0x0000d8f8 .quad 4261994450943298508 + 0x12, 0xd9, 0xfa, 0xaf, 0x86, 0xfe, 0x15, 0xdd, //0x0000d900 .quad -2515824962385028846 + 0xbf, 0x9e, 0xf3, 0x13, 0xb7, 0x0e, 0xef, 0x49, //0x0000d908 .quad 5327493063679123135 + 0xab, 0xc7, 0xfc, 0x2d, 0x14, 0xbf, 0x2d, 0x8a, //0x0000d910 .quad -8489919629131724885 + 0x38, 0x43, 0x78, 0x6c, 0x32, 0x69, 0x35, 0x6e, //0x0000d918 .quad 7941369183226839864 + 0x96, 0xf9, 0x7b, 0x39, 0xd9, 0x2e, 0xb9, 0xac, //0x0000d920 .quad -6000713517987268202 + 0x05, 0x54, 0x96, 0x07, 0x7f, 0xc3, 0xc2, 0x49, //0x0000d928 .quad 5315025460606161925 + 0xfb, 0xf7, 0xda, 0x87, 0x8f, 0x7a, 0xe7, 0xd7, //0x0000d930 .quad -2889205879056697349 + 0x07, 0xe9, 0x7b, 0xc9, 0x5e, 0x74, 0x33, 0xdc, //0x0000d938 .quad -2579590211097073401 + 0xfd, 0xda, 0xe8, 0xb4, 0x99, 0xac, 0xf0, 0x86, //0x0000d940 .quad -8723282702051517699 + 0xa4, 0x71, 0xed, 0x3d, 0xbb, 0x28, 0xa0, 0x69, //0x0000d948 .quad 7611128154919104932 + 0xbc, 0x11, 0x23, 0x22, 0xc0, 0xd7, 0xac, 0xa8, //0x0000d950 .quad -6292417359137009220 + 0x0d, 0xce, 0x68, 0x0d, 0xea, 0x32, 0x08, 0xc4, //0x0000d958 .quad -4321147861633282547 + 0x2b, 0xd6, 0xab, 0x2a, 0xb0, 0x0d, 0xd8, 0xd2, //0x0000d960 .quad -3253835680493873621 + 0x91, 0x01, 0xc3, 0x90, 0xa4, 0x3f, 0x0a, 0xf5, //0x0000d968 .quad -789748808614215279 + 0xdb, 0x65, 0xab, 0x1a, 0x8e, 0x08, 0xc7, 0x83, //0x0000d970 .quad -8951176327949752869 + 0xfb, 0xe0, 0x79, 0xda, 0xc6, 0x67, 0x26, 0x79, //0x0000d978 .quad 8729779031470891259 + 0x52, 0x3f, 0x56, 0xa1, 0xb1, 0xca, 0xb8, 0xa4, //0x0000d980 .quad -6577284391509803182 + 0x39, 0x59, 0x18, 0x91, 0xb8, 0x01, 0x70, 0x57, //0x0000d988 .quad 6300537770911226169 + 0x26, 0xcf, 0xab, 0x09, 0x5e, 0xfd, 0xe6, 0xcd, //0x0000d990 .quad -3609919470959866074 + 0x87, 0x6f, 0x5e, 0xb5, 0x26, 0x02, 0x4c, 0xed, //0x0000d998 .quad -1347699823215743097 + 0x78, 0x61, 0x0b, 0xc6, 0x5a, 0x5e, 0xb0, 0x80, //0x0000d9a0 .quad -9173728696990998152 + 0xb5, 0x05, 0x5b, 0x31, 0x58, 0x81, 0x4f, 0x54, //0x0000d9a8 .quad 6075216638131242421 + 0xd6, 0x39, 0x8e, 0x77, 0xf1, 0x75, 0xdc, 0xa0, //0x0000d9b0 .quad -6855474852811359786 + 0x22, 0xc7, 0xb1, 0x3d, 0xae, 0x61, 0x63, 0x69, //0x0000d9b8 .quad 7594020797664053026 + 0x4c, 0xc8, 0x71, 0xd5, 0x6d, 0x93, 0x13, 0xc9, //0x0000d9c0 .quad -3957657547586811828 + 0xea, 0x38, 0x1e, 0xcd, 0x19, 0x3a, 0xbc, 0x03, //0x0000d9c8 .quad 269153960225290474 + 0x5f, 0x3a, 0xce, 0x4a, 0x49, 0x78, 0x58, 0xfb, //0x0000d9d0 .quad -335385916056126881 + 0x24, 0xc7, 0x65, 0x40, 0xa0, 0x48, 0xab, 0x04, //0x0000d9d8 .quad 336442450281613092 + 0x7b, 0xe4, 0xc0, 0xce, 0x2d, 0x4b, 0x17, 0x9d, //0x0000d9e0 .quad -7127145225176161157 + 0x77, 0x9c, 0x3f, 0x28, 0x64, 0x0d, 0xeb, 0x62, //0x0000d9e8 .quad 7127805559067090039 + 0x9a, 0x1d, 0x71, 0x42, 0xf9, 0x1d, 0x5d, 0xc4, //0x0000d9f0 .quad -4297245513042813542 + 0x95, 0x83, 0x4f, 0x32, 0xbd, 0xd0, 0xa5, 0x3b, //0x0000d9f8 .quad 4298070930406474645 + 0x00, 0x65, 0x0d, 0x93, 0x77, 0x65, 0x74, 0xf5, //0x0000da00 .quad -759870872876129024 + 0x7a, 0x64, 0xe3, 0x7e, 0xec, 0x44, 0x8f, 0xca, //0x0000da08 .quad -3850783373846682502 + 0x20, 0x5f, 0xe8, 0xbb, 0x6a, 0xbf, 0x68, 0x99, //0x0000da10 .quad -7392448323188662496 + 0xcc, 0x1e, 0x4e, 0xcf, 0x13, 0x8b, 0x99, 0x7e, //0x0000da18 .quad 9122475437414293196 + 0xe8, 0x76, 0xe2, 0x6a, 0x45, 0xef, 0xc2, 0xbf, //0x0000da20 .quad -4628874385558440216 + 0x7f, 0xa6, 0x21, 0xc3, 0xd8, 0xed, 0x3f, 0x9e, //0x0000da28 .quad -7043649776941685121 + 0xa2, 0x14, 0x9b, 0xc5, 0x16, 0xab, 0xb3, 0xef, //0x0000da30 .quad -1174406963520662366 + 0x1f, 0x10, 0xea, 0xf3, 0x4e, 0xe9, 0xcf, 0xc5, //0x0000da38 .quad -4192876202749718497 + 0xe5, 0xec, 0x80, 0x3b, 0xee, 0x4a, 0xd0, 0x95, //0x0000da40 .quad -7651533379841495835 + 0x13, 0x4a, 0x72, 0x58, 0xd1, 0xf1, 0xa1, 0xbb, //0x0000da48 .quad -4926390635932268013 + 0x1f, 0x28, 0x61, 0xca, 0xa9, 0x5d, 0x44, 0xbb, //0x0000da50 .quad -4952730706374481889 + 0x98, 0xdc, 0x8e, 0xae, 0x45, 0x6e, 0x8a, 0x2a, //0x0000da58 .quad 3065383741939440792 + 0x26, 0x72, 0xf9, 0x3c, 0x14, 0x75, 0x15, 0xea, //0x0000da60 .quad -1579227364540714458 + 0xbe, 0x93, 0x32, 0x1a, 0xd7, 0x09, 0x2d, 0xf5, //0x0000da68 .quad -779956341003086914 + 0x58, 0xe7, 0x1b, 0xa6, 0x2c, 0x69, 0x4d, 0x92, //0x0000da70 .quad -7904546130479028392 + 0x57, 0x9c, 0x5f, 0x70, 0x26, 0x26, 0x3c, 0x59, //0x0000da78 .quad 6430056314514152535 + 0x2e, 0xe1, 0xa2, 0xcf, 0x77, 0xc3, 0xe0, 0xb6, //0x0000da80 .quad -5268996644671397586 + 0x6d, 0x83, 0x77, 0x0c, 0xb0, 0x2f, 0x8b, 0x6f, //0x0000da88 .quad 8037570393142690669 + 0x7a, 0x99, 0x8b, 0xc3, 0x55, 0xf4, 0x98, 0xe4, //0x0000da90 .quad -1974559787411859078 + 0x48, 0x64, 0x95, 0x0f, 0x9c, 0xfb, 0x6d, 0x0b, //0x0000da98 .quad 823590954573587528 + 0xec, 0x3f, 0x37, 0x9a, 0xb5, 0x98, 0xdf, 0x8e, //0x0000daa0 .quad -8151628894773493780 + 0xad, 0x5e, 0xbd, 0x89, 0x41, 0xbd, 0x24, 0x47, //0x0000daa8 .quad 5126430365035880109 + 0xe7, 0x0f, 0xc5, 0x00, 0xe3, 0x7e, 0x97, 0xb2, //0x0000dab0 .quad -5577850100039479321 + 0x58, 0xb6, 0x2c, 0xec, 0x91, 0xec, 0xed, 0x58, //0x0000dab8 .quad 6408037956294850136 + 0xe1, 0x53, 0xf6, 0xc0, 0x9b, 0x5e, 0x3d, 0xdf, //0x0000dac0 .quad -2360626606621961247 + 0xee, 0xe3, 0x37, 0x67, 0xb6, 0x67, 0x29, 0x2f, //0x0000dac8 .quad 3398361426941174766 + 0x6c, 0xf4, 0x99, 0x58, 0x21, 0x5b, 0x86, 0x8b, //0x0000dad0 .quad -8392920656779807636 + 0x75, 0xee, 0x82, 0x00, 0xd2, 0xe0, 0x79, 0xbd, //0x0000dad8 .quad -4793553135802847627 + 0x87, 0x71, 0xc0, 0xae, 0xe9, 0xf1, 0x67, 0xae, //0x0000dae0 .quad -5879464802547371641 + 0x12, 0xaa, 0xa3, 0x80, 0x06, 0x59, 0xd8, 0xec, //0x0000dae8 .quad -1380255401326171630 + 0xe9, 0x8d, 0x70, 0x1a, 0x64, 0xee, 0x01, 0xda, //0x0000daf0 .quad -2737644984756826647 + 0x96, 0x94, 0xcc, 0x20, 0x48, 0x6f, 0x0e, 0xe8, //0x0000daf8 .quad -1725319251657714538 + 0xb2, 0x58, 0x86, 0x90, 0xfe, 0x34, 0x41, 0x88, //0x0000db00 .quad -8628557143114098510 + 0xde, 0xdc, 0x7f, 0x14, 0x8d, 0x05, 0x09, 0x31, //0x0000db08 .quad 3533361486141316318 + 0xde, 0xee, 0xa7, 0x34, 0x3e, 0x82, 0x51, 0xaa, //0x0000db10 .quad -6174010410465235234 + 0x16, 0xd4, 0x9f, 0x59, 0xf0, 0x46, 0x4b, 0xbd, //0x0000db18 .quad -4806670179178130410 + 0x96, 0xea, 0xd1, 0xc1, 0xcd, 0xe2, 0xe5, 0xd4, //0x0000db20 .quad -3105826994654156138 + 0x1b, 0xc9, 0x07, 0x70, 0xac, 0x18, 0x9e, 0x6c, //0x0000db28 .quad 7826720331309500699 + 0x9e, 0x32, 0x23, 0x99, 0xc0, 0xad, 0x0f, 0x85, //0x0000db30 .quad -8858670899299929442 + 0xb1, 0xdd, 0x04, 0xc6, 0x6b, 0xcf, 0xe2, 0x03, //0x0000db38 .quad 280014188641050033 + 0x45, 0xff, 0x6b, 0xbf, 0x30, 0x99, 0x53, 0xa6, //0x0000db40 .quad -6461652605697523899 + 0x1d, 0x15, 0x86, 0xb7, 0x46, 0x83, 0xdb, 0x84, //0x0000db48 .quad -8873354301053463267 + 0x16, 0xff, 0x46, 0xef, 0x7c, 0x7f, 0xe8, 0xcf, //0x0000db50 .quad -3465379738694516970 + 0x64, 0x9a, 0x67, 0x65, 0x18, 0x64, 0x12, 0xe6, //0x0000db58 .quad -1868320839462053276 + 0x6e, 0x5f, 0x8c, 0x15, 0xae, 0x4f, 0xf1, 0x81, //0x0000db60 .quad -9083391364325154962 + 0x7f, 0xc0, 0x60, 0x3f, 0x8f, 0x7e, 0xcb, 0x4f, //0x0000db68 .quad 5749828502977298559 + 0x49, 0x77, 0xef, 0x9a, 0x99, 0xa3, 0x6d, 0xa2, //0x0000db70 .quad -6742553186979055799 + 0x9e, 0xf0, 0x38, 0x0f, 0x33, 0x5e, 0xbe, 0xe3, //0x0000db78 .quad -2036086408133152610 + 0x1c, 0x55, 0xab, 0x01, 0x80, 0x0c, 0x09, 0xcb, //0x0000db80 .quad -3816505465296431844 + 0xc6, 0x2c, 0x07, 0xd3, 0xbf, 0xf5, 0xad, 0x5c, //0x0000db88 .quad 6678264026688335046 + 0x63, 0x2a, 0x16, 0x02, 0xa0, 0x4f, 0xcb, 0xfd, //0x0000db90 .quad -158945813193151901 + 0xf7, 0xf7, 0xc8, 0xc7, 0x2f, 0x73, 0xd9, 0x73, //0x0000db98 .quad 8347830033360418807 + 0x7e, 0xda, 0x4d, 0x01, 0xc4, 0x11, 0x9f, 0x9e, //0x0000dba0 .quad -7016870160886801794 + 0xfb, 0x9a, 0xdd, 0xdc, 0xfd, 0xe7, 0x67, 0x28, //0x0000dba8 .quad 2911550761636567803 + 0x1d, 0x51, 0xa1, 0x01, 0x35, 0xd6, 0x46, 0xc6, //0x0000dbb0 .quad -4159401682681114339 + 0xb9, 0x01, 0x15, 0x54, 0xfd, 0xe1, 0x81, 0xb2, //0x0000dbb8 .quad -5583933584809066055 + 0x65, 0xa5, 0x09, 0x42, 0xc2, 0x8b, 0xd8, 0xf7, //0x0000dbc0 .quad -587566084924005019 + 0x27, 0x42, 0x1a, 0xa9, 0x7c, 0x5a, 0x22, 0x1f, //0x0000dbc8 .quad 2243455055843443239 + 0x5f, 0x07, 0x46, 0x69, 0x59, 0x57, 0xe7, 0x9a, //0x0000dbd0 .quad -7284757830718584993 + 0x59, 0x69, 0xb0, 0xe9, 0x8d, 0x78, 0x75, 0x33, //0x0000dbd8 .quad 3708002419115845977 + 0x37, 0x89, 0x97, 0xc3, 0x2f, 0x2d, 0xa1, 0xc1, //0x0000dbe0 .quad -4494261269970843337 + 0xaf, 0x83, 0x1c, 0x64, 0xb1, 0xd6, 0x52, 0x00, //0x0000dbe8 .quad 23317005467419567 + 0x84, 0x6b, 0x7d, 0xb4, 0x7b, 0x78, 0x09, 0xf2, //0x0000dbf0 .quad -1006140569036166268 + 0x9b, 0xa4, 0x23, 0xbd, 0x5d, 0x8c, 0x67, 0xc0, //0x0000dbf8 .quad -4582539761593113445 + 0x32, 0x63, 0xce, 0x50, 0x4d, 0xeb, 0x45, 0x97, //0x0000dc00 .quad -7546366883288685774 + 0xe1, 0x46, 0x36, 0x96, 0xba, 0xb7, 0x40, 0xf8, //0x0000dc08 .quad -558244341782001951 + 0xff, 0xfb, 0x01, 0xa5, 0x20, 0x66, 0x17, 0xbd, //0x0000dc10 .quad -4821272585683469313 + 0x99, 0xd8, 0xc3, 0x3b, 0xa9, 0xe5, 0x50, 0xb6, //0x0000dc18 .quad -5309491445654890343 + 0xff, 0x7a, 0x42, 0xce, 0xa8, 0x3f, 0x5d, 0xec, //0x0000dc20 .quad -1414904713676948737 + 0xbf, 0xce, 0xb4, 0x8a, 0x13, 0x1f, 0xe5, 0xa3, //0x0000dc28 .quad -6636864307068612929 + 0xdf, 0x8c, 0xe9, 0x80, 0xc9, 0x47, 0xba, 0x93, //0x0000dc30 .quad -7801844473689174817 + 0x38, 0x01, 0xb1, 0x36, 0x6c, 0x33, 0x6f, 0xc6, //0x0000dc38 .quad -4148040191917883080 + 0x17, 0xf0, 0x23, 0xe1, 0xbb, 0xd9, 0xa8, 0xb8, //0x0000dc40 .quad -5140619573684080617 + 0x85, 0x41, 0x5d, 0x44, 0x47, 0x00, 0x0b, 0xb8, //0x0000dc48 .quad -5185050239897353851 + 0x1d, 0xec, 0x6c, 0xd9, 0x2a, 0x10, 0xd3, 0xe6, //0x0000dc50 .quad -1814088448677712867 + 0xe6, 0x91, 0x74, 0x15, 0x59, 0xc0, 0x0d, 0xa6, //0x0000dc58 .quad -6481312799871692314 + 0x92, 0x13, 0xe4, 0xc7, 0x1a, 0xea, 0x43, 0x90, //0x0000dc60 .quad -8051334308064652398 + 0x30, 0xdb, 0x68, 0xad, 0x37, 0x98, 0xc8, 0x87, //0x0000dc68 .quad -8662506518347195600 + 0x77, 0x18, 0xdd, 0x79, 0xa1, 0xe4, 0x54, 0xb4, //0x0000dc70 .quad -5452481866653427593 + 0xfc, 0x11, 0xc3, 0x98, 0x45, 0xbe, 0xba, 0x29, //0x0000dc78 .quad 3006924907348169212 + 0x94, 0x5e, 0x54, 0xd8, 0xc9, 0x1d, 0x6a, 0xe1, //0x0000dc80 .quad -2203916314889396588 + 0x7b, 0xd6, 0xf3, 0xfe, 0xd6, 0x6d, 0x29, 0xf4, //0x0000dc88 .quad -853029884242176389 + 0x1d, 0xbb, 0x34, 0x27, 0x9e, 0x52, 0xe2, 0x8c, //0x0000dc90 .quad -8294976724446954723 + 0x0d, 0x66, 0x58, 0x5f, 0xa6, 0xe4, 0x99, 0x18, //0x0000dc98 .quad 1772699331562333709 + 0xe4, 0xe9, 0x01, 0xb1, 0x45, 0xe7, 0x1a, 0xb0, //0x0000dca0 .quad -5757034887131305500 + 0x90, 0x7f, 0x2e, 0xf7, 0xcf, 0x5d, 0xc0, 0x5e, //0x0000dca8 .quad 6827560182880305040 + 0x5d, 0x64, 0x42, 0x1d, 0x17, 0xa1, 0x21, 0xdc, //0x0000dcb0 .quad -2584607590486743971 + 0x74, 0x1f, 0xfa, 0xf4, 0x43, 0x75, 0x70, 0x76, //0x0000dcb8 .quad 8534450228600381300 + 0xba, 0x7e, 0x49, 0x72, 0xae, 0x04, 0x95, 0x89, //0x0000dcc0 .quad -8532908771695296838 + 0xa9, 0x53, 0x1c, 0x79, 0x4a, 0x49, 0x06, 0x6a, //0x0000dcc8 .quad 7639874402088932265 + 0x69, 0xde, 0xdb, 0x0e, 0xda, 0x45, 0xfa, 0xab, //0x0000dcd0 .quad -6054449946191733143 + 0x93, 0x68, 0x63, 0x17, 0x9d, 0xdb, 0x87, 0x04, //0x0000dcd8 .quad 326470965756389523 + 0x03, 0xd6, 0x92, 0x92, 0x50, 0xd7, 0xf8, 0xd6, //0x0000dce0 .quad -2956376414312278525 + 0xb7, 0x42, 0x3c, 0x5d, 0x84, 0xd2, 0xa9, 0x45, //0x0000dce8 .quad 5019774725622874807 + 0xc2, 0xc5, 0x9b, 0x5b, 0x92, 0x86, 0x5b, 0x86, //0x0000dcf0 .quad -8765264286586255934 + 0xb3, 0xa9, 0x45, 0xba, 0x92, 0x23, 0x8a, 0x0b, //0x0000dcf8 .quad 831516194300602803 + 0x32, 0xb7, 0x82, 0xf2, 0x36, 0x68, 0xf2, 0xa7, //0x0000dd00 .quad -6344894339805432014 + 0x1f, 0x14, 0xd7, 0x68, 0x77, 0xac, 0x6c, 0x8e, //0x0000dd08 .quad -8183976793979022305 + 0xff, 0x64, 0x23, 0xaf, 0x44, 0x02, 0xef, 0xd1, //0x0000dd10 .quad -3319431906329402113 + 0x27, 0xd9, 0x0c, 0x43, 0x95, 0xd7, 0x07, 0x32, //0x0000dd18 .quad 3605087062808385831 + 0x1f, 0x1f, 0x76, 0xed, 0x6a, 0x61, 0x35, 0x83, //0x0000dd20 .quad -8992173969096958177 + 0xb9, 0x07, 0xe8, 0x49, 0xbd, 0xe6, 0x44, 0x7f, //0x0000dd28 .quad 9170708441896323001 + 0xe7, 0xa6, 0xd3, 0xa8, 0xc5, 0xb9, 0x02, 0xa4, //0x0000dd30 .quad -6628531442943809817 + 0xa7, 0x09, 0x62, 0x9c, 0x6c, 0x20, 0x16, 0x5f, //0x0000dd38 .quad 6851699533943015847 + 0xa1, 0x90, 0x08, 0x13, 0x37, 0x68, 0x03, 0xcd, //0x0000dd40 .quad -3673978285252374367 + 0x10, 0x8c, 0x7a, 0xc3, 0x87, 0xa8, 0xdb, 0x36, //0x0000dd48 .quad 3952938399001381904 + 0x64, 0x5a, 0xe5, 0x6b, 0x22, 0x21, 0x22, 0x80, //0x0000dd50 .quad -9213765455923815836 + 0x8a, 0x97, 0x2c, 0xda, 0x54, 0x49, 0x49, 0xc2, //0x0000dd58 .quad -4446942528265218166 + 0xfd, 0xb0, 0xde, 0x06, 0x6b, 0xa9, 0x2a, 0xa0, //0x0000dd60 .quad -6905520801477381891 + 0x6d, 0xbd, 0xb7, 0x10, 0xaa, 0x9b, 0xdb, 0xf2, //0x0000dd68 .quad -946992141904134803 + 0x3d, 0x5d, 0x96, 0xc8, 0xc5, 0x53, 0x35, 0xc8, //0x0000dd70 .quad -4020214983419339459 + 0xc8, 0xac, 0xe5, 0x94, 0x94, 0x82, 0x92, 0x6f, //0x0000dd78 .quad 8039631859474607304 + 0x8c, 0xf4, 0xbb, 0x3a, 0xb7, 0xa8, 0x42, 0xfa, //0x0000dd80 .quad -413582710846786420 + 0xfa, 0x17, 0x1f, 0xba, 0x39, 0x23, 0x77, 0xcb, //0x0000dd88 .quad -3785518230938904582 + 0xd7, 0x78, 0xb5, 0x84, 0x72, 0xa9, 0x69, 0x9c, //0x0000dd90 .quad -7176018221920323369 + 0xfc, 0x6e, 0x53, 0x14, 0x04, 0x76, 0x2a, 0xff, //0x0000dd98 .quad -60105885123121412 + 0x0d, 0xd7, 0xe2, 0x25, 0xcf, 0x13, 0x84, 0xc3, //0x0000dda0 .quad -4358336758973016307 + 0xbb, 0x4a, 0x68, 0x19, 0x85, 0x13, 0xf5, 0xfe, //0x0000dda8 .quad -75132356403901765 + 0xd1, 0x8c, 0x5b, 0xef, 0xc2, 0x18, 0x65, 0xf4, //0x0000ddb0 .quad -836234930288882479 + 0x6a, 0x5d, 0xc2, 0x5f, 0x66, 0x58, 0xb2, 0x7e, //0x0000ddb8 .quad 9129456591349898602 + 0x02, 0x38, 0x99, 0xd5, 0x79, 0x2f, 0xbf, 0x98, //0x0000ddc0 .quad -7440175859071633406 + 0x62, 0x7a, 0xd9, 0xfb, 0x3f, 0x77, 0x2f, 0xef, //0x0000ddc8 .quad -1211618658047395230 + 0x03, 0x86, 0xff, 0x4a, 0x58, 0xfb, 0xee, 0xbe, //0x0000ddd0 .quad -4688533805412153853 + 0xfb, 0xd8, 0xcf, 0xfa, 0x0f, 0x55, 0xfb, 0xaa, //0x0000ddd8 .quad -6126209340986631941 + 0x84, 0x67, 0xbf, 0x5d, 0x2e, 0xba, 0xaa, 0xee, //0x0000dde0 .quad -1248981238337804412 + 0x39, 0xcf, 0x83, 0xf9, 0x53, 0x2a, 0xba, 0x95, //0x0000dde8 .quad -7657761676233289927 + 0xb2, 0xa0, 0x97, 0xfa, 0x5c, 0xb4, 0x2a, 0x95, //0x0000ddf0 .quad -7698142301602209614 + 0x84, 0x61, 0xf2, 0x7b, 0x74, 0x5a, 0x94, 0xdd, //0x0000ddf8 .quad -2480258038432112252 + 0xdf, 0x88, 0x3d, 0x39, 0x74, 0x61, 0x75, 0xba, //0x0000de00 .quad -5010991858575374113 + 0xe5, 0xf9, 0xee, 0x9a, 0x11, 0x71, 0xf9, 0x94, //0x0000de08 .quad -7712008566467528219 + 0x17, 0xeb, 0x8c, 0x47, 0xd1, 0xb9, 0x12, 0xe9, //0x0000de10 .quad -1652053804791829737 + 0x5e, 0xb8, 0xaa, 0x01, 0x56, 0xcd, 0x37, 0x7a, //0x0000de18 .quad 8806733365625141342 + 0xee, 0x12, 0xb8, 0xcc, 0x22, 0xb4, 0xab, 0x91, //0x0000de20 .quad -7950062655635975442 + 0x3b, 0xb3, 0x0a, 0xc1, 0x55, 0xe0, 0x62, 0xac, //0x0000de28 .quad -6025006692552756421 + 0xaa, 0x17, 0xe6, 0x7f, 0x2b, 0xa1, 0x16, 0xb6, //0x0000de30 .quad -5325892301117581398 + 0x0a, 0x60, 0x4d, 0x31, 0x6b, 0x98, 0x7b, 0x57, //0x0000de38 .quad 6303799689591218186 + 0x94, 0x9d, 0xdf, 0x5f, 0x76, 0x49, 0x9c, 0xe3, //0x0000de40 .quad -2045679357969588844 + 0x0c, 0xb8, 0xa0, 0xfd, 0x85, 0x7e, 0x5a, 0xed, //0x0000de48 .quad -1343622424865753076 + 0x7d, 0xc2, 0xeb, 0xfb, 0xe9, 0xad, 0x41, 0x8e, //0x0000de50 .quad -8196078626372074883 + 0x08, 0x73, 0x84, 0xbe, 0x13, 0x8f, 0x58, 0x14, //0x0000de58 .quad 1466078993672598280 + 0x1c, 0xb3, 0xe6, 0x7a, 0x64, 0x19, 0xd2, 0xb1, //0x0000de60 .quad -5633412264537705700 + 0xc9, 0x8f, 0x25, 0xae, 0xd8, 0xb2, 0x6e, 0x59, //0x0000de68 .quad 6444284760518135753 + 0xe3, 0x5f, 0xa0, 0x99, 0xbd, 0x9f, 0x46, 0xde, //0x0000de70 .quad -2430079312244744221 + 0xbc, 0xf3, 0xae, 0xd9, 0x8e, 0x5f, 0xca, 0x6f, //0x0000de78 .quad 8055355950647669692 + 0xee, 0x3b, 0x04, 0x80, 0xd6, 0x23, 0xec, 0x8a, //0x0000de80 .quad -8436328597794046994 + 0x55, 0x58, 0x0d, 0x48, 0xb9, 0x7b, 0xde, 0x25, //0x0000de88 .quad 2728754459941099605 + 0xe9, 0x4a, 0x05, 0x20, 0xcc, 0x2c, 0xa7, 0xad, //0x0000de90 .quad -5933724728815170839 + 0x6b, 0xae, 0x10, 0x9a, 0xa7, 0x1a, 0x56, 0xaf, //0x0000de98 .quad -5812428961928401301 + 0xa4, 0x9d, 0x06, 0x28, 0xff, 0xf7, 0x10, 0xd9, //0x0000dea0 .quad -2805469892591575644 + 0x05, 0xda, 0x94, 0x80, 0x51, 0xa1, 0x2b, 0x1b, //0x0000dea8 .quad 1957835834444274181 + 0x86, 0x22, 0x04, 0x79, 0xff, 0x9a, 0xaa, 0x87, //0x0000deb0 .quad -8670947710510816634 + 0x43, 0x08, 0x5d, 0xf0, 0xd2, 0x44, 0xfb, 0x90, //0x0000deb8 .quad -7999724640327104445 + 0x28, 0x2b, 0x45, 0x57, 0xbf, 0x41, 0x95, 0xa9, //0x0000dec0 .quad -6226998619711132888 + 0x54, 0x4a, 0x74, 0xac, 0x07, 0x16, 0x3a, 0x35, //0x0000dec8 .quad 3835402254873283156 + 0xf2, 0x75, 0x16, 0x2d, 0x2f, 0x92, 0xfa, 0xd3, //0x0000ded0 .quad -3172062256211528206 + 0xe9, 0x5c, 0x91, 0x97, 0x89, 0x9b, 0x88, 0x42, //0x0000ded8 .quad 4794252818591603945 + 0xb7, 0x09, 0x2e, 0x7c, 0x5d, 0x9b, 0x7c, 0x84, //0x0000dee0 .quad -8900067937773286985 + 0x12, 0xda, 0xba, 0xfe, 0x35, 0x61, 0x95, 0x69, //0x0000dee8 .quad 7608094030047140370 + 0x25, 0x8c, 0x39, 0xdb, 0x34, 0xc2, 0x9b, 0xa5, //0x0000def0 .quad -6513398903789220827 + 0x96, 0x90, 0x69, 0x7e, 0x83, 0xb9, 0xfa, 0x43, //0x0000def8 .quad 4898431519131537558 + 0x2e, 0xef, 0x07, 0x12, 0xc2, 0xb2, 0x02, 0xcf, //0x0000df00 .quad -3530062611309138130 + 0xbc, 0xf4, 0x03, 0x5e, 0xe4, 0x67, 0xf9, 0x94, //0x0000df08 .quad -7712018656367741764 + 0x7d, 0xf5, 0x44, 0x4b, 0xb9, 0xaf, 0x61, 0x81, //0x0000df10 .quad -9123818159709293187 + 0xf6, 0x78, 0xc2, 0xba, 0xee, 0xe0, 0x1b, 0x1d, //0x0000df18 .quad 2097517367411243254 + 0xdc, 0x32, 0x16, 0x9e, 0xa7, 0x1b, 0xba, 0xa1, //0x0000df20 .quad -6793086681209228580 + 0x33, 0x17, 0x73, 0x69, 0x2a, 0xd9, 0x62, 0x64, //0x0000df28 .quad 7233582727691441971 + 0x93, 0xbf, 0x9b, 0x85, 0x91, 0xa2, 0x28, 0xca, //0x0000df30 .quad -3879672333084147821 + 0xff, 0xdc, 0xcf, 0x03, 0x75, 0x8f, 0x7b, 0x7d, //0x0000df38 .quad 9041978409614302463 + 0x78, 0xaf, 0x02, 0xe7, 0x35, 0xcb, 0xb2, 0xfc, //0x0000df40 .quad -237904397927796872 + 0x3f, 0xd4, 0xc3, 0x44, 0x52, 0x73, 0xda, 0x5c, //0x0000df48 .quad 6690786993590490175 + 0xab, 0xad, 0x61, 0xb0, 0x01, 0xbf, 0xef, 0x9d, //0x0000df50 .quad -7066219276345954901 + 0xa8, 0x64, 0xfa, 0x6a, 0x13, 0x88, 0x08, 0x3a, //0x0000df58 .quad 4181741870994056360 + 0x16, 0x19, 0x7a, 0x1c, 0xc2, 0xae, 0x6b, 0xc5, //0x0000df60 .quad -4221088077005055722 + 0xd1, 0xfd, 0xb8, 0x45, 0x18, 0xaa, 0x8a, 0x08, //0x0000df68 .quad 615491320315182545 + 0x5b, 0x9f, 0x98, 0xa3, 0x72, 0x9a, 0xc6, 0xf6, //0x0000df70 .quad -664674077828931749 + 0x46, 0x3d, 0x27, 0x57, 0x9e, 0x54, 0xad, 0x8a, //0x0000df78 .quad -8454007886460797626 + 0x99, 0x63, 0x3f, 0xa6, 0x87, 0x20, 0x3c, 0x9a, //0x0000df80 .quad -7332950326284164199 + 0x4c, 0x86, 0x78, 0xf6, 0xe2, 0x54, 0xac, 0x36, //0x0000df88 .quad 3939617107816777292 + 0x7f, 0x3c, 0xcf, 0x8f, 0xa9, 0x28, 0xcb, 0xc0, //0x0000df90 .quad -4554501889427817345 + 0xde, 0xa7, 0x16, 0xb4, 0x1b, 0x6a, 0x57, 0x84, //0x0000df98 .quad -8910536670511192098 + 0x9f, 0x0b, 0xc3, 0xf3, 0xd3, 0xf2, 0xfd, 0xf0, //0x0000dfa0 .quad -1081441343357383777 + 0xd6, 0x51, 0x1c, 0xa1, 0xa2, 0x44, 0x6d, 0x65, //0x0000dfa8 .quad 7308573235570561494 + 0x43, 0xe7, 0x59, 0x78, 0xc4, 0xb7, 0x9e, 0x96, //0x0000dfb0 .quad -7593429867239446717 + 0x26, 0xb3, 0xb1, 0xa4, 0xe5, 0x4a, 0x64, 0x9f, //0x0000dfb8 .quad -6961356773836868826 + 0x14, 0x61, 0x70, 0x96, 0xb5, 0x65, 0x46, 0xbc, //0x0000dfc0 .quad -4880101315621920492 + 0xef, 0x1f, 0xde, 0x0d, 0x9f, 0x5d, 0x3d, 0x87, //0x0000dfc8 .quad -8701695967296086033 + 0x59, 0x79, 0x0c, 0xfc, 0x22, 0xff, 0x57, 0xeb, //0x0000dfd0 .quad -1488440626100012711 + 0xeb, 0xa7, 0x55, 0xd1, 0x06, 0xb5, 0x0c, 0xa9, //0x0000dfd8 .quad -6265433940692719637 + 0xd8, 0xcb, 0x87, 0xdd, 0x75, 0xff, 0x16, 0x93, //0x0000dfe0 .quad -7847804418953589800 + 0xf3, 0x88, 0xd5, 0x42, 0x24, 0xf1, 0xa7, 0x09, //0x0000dfe8 .quad 695789805494438131 + 0xce, 0xbe, 0xe9, 0x54, 0x53, 0xbf, 0xdc, 0xb7, //0x0000dff0 .quad -5198069505264599346 + 0x30, 0xeb, 0x8a, 0x53, 0x6d, 0xed, 0x11, 0x0c, //0x0000dff8 .quad 869737256868047664 + 0x81, 0x2e, 0x24, 0x2a, 0x28, 0xef, 0xd3, 0xe5, //0x0000e000 .quad -1885900863153361279 + 0xfb, 0xa5, 0x6d, 0xa8, 0xc8, 0x68, 0x16, 0x8f, //0x0000e008 .quad -8136200465769716229 + 0x10, 0x9d, 0x56, 0x1a, 0x79, 0x75, 0xa4, 0x8f, //0x0000e010 .quad -8096217067111932656 + 0xbd, 0x87, 0x44, 0x69, 0x7d, 0x01, 0x6e, 0xf9, //0x0000e018 .quad -473439272678684739 + 0x55, 0x44, 0xec, 0x60, 0xd7, 0x92, 0x8d, 0xb3, //0x0000e020 .quad -5508585315462527915 + 0xad, 0xa9, 0x95, 0xc3, 0xdc, 0x81, 0xc9, 0x37, //0x0000e028 .quad 4019886927579031981 + 0x6a, 0x55, 0x27, 0x39, 0x8d, 0xf7, 0x70, 0xe0, //0x0000e030 .quad -2274045625900771990 + 0x18, 0x14, 0x7b, 0xf4, 0x53, 0xe2, 0xbb, 0x85, //0x0000e038 .quad -8810199395808373736 + 0x62, 0x95, 0xb8, 0x43, 0xb8, 0x9a, 0x46, 0x8c, //0x0000e040 .quad -8338807543829064350 + 0x8f, 0xec, 0xcc, 0x78, 0x74, 0x6d, 0x95, 0x93, //0x0000e048 .quad -7812217631593927537 + 0xbb, 0xba, 0xa6, 0x54, 0x66, 0x41, 0x58, 0xaf, //0x0000e050 .quad -5811823411358942533 + 0xb3, 0x27, 0x00, 0x97, 0xd1, 0xc8, 0x7a, 0x38, //0x0000e058 .quad 4069786015789754291 + 0x6a, 0x69, 0xd0, 0xe9, 0xbf, 0x51, 0x2e, 0xdb, //0x0000e060 .quad -2653093245771290262 + 0x9f, 0x31, 0xc0, 0xfc, 0x05, 0x7b, 0x99, 0x06, //0x0000e068 .quad 475546501309804959 + 0xe2, 0x41, 0x22, 0xf2, 0x17, 0xf3, 0xfc, 0x88, //0x0000e070 .quad -8575712306248138270 + 0x04, 0x1f, 0xf8, 0xbd, 0xe3, 0xec, 0x1f, 0x44, //0x0000e078 .quad 4908902581746016004 + 0x5a, 0xd2, 0xaa, 0xee, 0xdd, 0x2f, 0x3c, 0xab, //0x0000e080 .quad -6107954364382784934 + 0xc4, 0x26, 0x76, 0xad, 0x1c, 0xe8, 0x27, 0xd5, //0x0000e088 .quad -3087243809672255804 + 0xf1, 0x86, 0x55, 0x6a, 0xd5, 0x3b, 0x0b, 0xd6, //0x0000e090 .quad -3023256937051093263 + 0x75, 0xb0, 0xd3, 0xd8, 0x23, 0xe2, 0x71, 0x8a, //0x0000e098 .quad -8470740780517707659 + 0x56, 0x74, 0x75, 0x62, 0x65, 0x05, 0xc7, 0x85, //0x0000e0a0 .quad -8807064613298015146 + 0x4a, 0x4e, 0x84, 0x67, 0x56, 0x2d, 0x87, 0xf6, //0x0000e0a8 .quad -682526969396179382 + 0x6c, 0xd1, 0x12, 0xbb, 0xbe, 0xc6, 0x38, 0xa7, //0x0000e0b0 .quad -6397144748195131028 + 0xdc, 0x61, 0x65, 0x01, 0xac, 0xf8, 0x28, 0xb4, //0x0000e0b8 .quad -5464844730172612132 + 0xc7, 0x85, 0xd7, 0x69, 0x6e, 0xf8, 0x06, 0xd1, //0x0000e0c0 .quad -3384744916816525881 + 0x53, 0xba, 0xbe, 0x01, 0xd7, 0x36, 0x33, 0xe1, //0x0000e0c8 .quad -2219369894288377261 + 0x9c, 0xb3, 0x26, 0x02, 0x45, 0x5b, 0xa4, 0x82, //0x0000e0d0 .quad -9032994600651410532 + 0x74, 0x34, 0x17, 0x61, 0x46, 0x02, 0xc0, 0xec, //0x0000e0d8 .quad -1387106183930235788 + 0x84, 0x60, 0xb0, 0x42, 0x16, 0x72, 0x4d, 0xa3, //0x0000e0e0 .quad -6679557232386875260 + 0x91, 0x01, 0x5d, 0xf9, 0xd7, 0x02, 0xf0, 0x27, //0x0000e0e8 .quad 2877803288514593169 + 0xa5, 0x78, 0x5c, 0xd3, 0x9b, 0xce, 0x20, 0xcc, //0x0000e0f0 .quad -3737760522056206171 + 0xf5, 0x41, 0xb4, 0xf7, 0x8d, 0x03, 0xec, 0x31, //0x0000e0f8 .quad 3597254110643241461 + 0xce, 0x96, 0x33, 0xc8, 0x42, 0x02, 0x29, 0xff, //0x0000e100 .quad -60514634142869810 + 0x72, 0x52, 0xa1, 0x75, 0x71, 0x04, 0x67, 0x7e, //0x0000e108 .quad 9108253656731439730 + 0x41, 0x3e, 0x20, 0xbd, 0x69, 0xa1, 0x79, 0x9f, //0x0000e110 .quad -6955350673980375487 + 0x87, 0xd3, 0x84, 0xe9, 0xc6, 0x62, 0x00, 0x0f, //0x0000e118 .quad 1080972517029761927 + 0xd1, 0x4d, 0x68, 0x2c, 0xc4, 0x09, 0x58, 0xc7, //0x0000e120 .quad -4082502324048081455 + 0x69, 0x08, 0xe6, 0xa3, 0x78, 0x7b, 0xc0, 0x52, //0x0000e128 .quad 5962901664714590313 + 0x45, 0x61, 0x82, 0x37, 0x35, 0x0c, 0x2e, 0xf9, //0x0000e130 .quad -491441886632713915 + 0x83, 0x8a, 0xdf, 0xcc, 0x56, 0x9a, 0x70, 0xa7, //0x0000e138 .quad -6381430974388925821 + 0xcb, 0x7c, 0xb1, 0x42, 0xa1, 0xc7, 0xbc, 0x9b, //0x0000e140 .quad -7224680206786528053 + 0x92, 0xb6, 0x0b, 0x40, 0x76, 0x60, 0xa6, 0x88, //0x0000e148 .quad -8600080377420466542 + 0xfe, 0xdb, 0x5d, 0x93, 0x89, 0xf9, 0xab, 0xc2, //0x0000e150 .quad -4419164240055772162 + 0x36, 0xa4, 0x0e, 0xd0, 0x93, 0xf8, 0xcf, 0x6a, //0x0000e158 .quad 7696643601933968438 + 0xfe, 0x52, 0x35, 0xf8, 0xeb, 0xf7, 0x56, 0xf3, //0x0000e160 .quad -912269281642327298 + 0x44, 0x4d, 0x12, 0xc4, 0xb8, 0xf6, 0x83, 0x05, //0x0000e168 .quad 397432465562684740 + 0xde, 0x53, 0x21, 0x7b, 0xf3, 0x5a, 0x16, 0x98, //0x0000e170 .quad -7487697328667536418 + 0x4b, 0x70, 0x8b, 0x7a, 0x33, 0x7a, 0x72, 0xc3, //0x0000e178 .quad -4363290727450709941 + 0xd6, 0xa8, 0xe9, 0x59, 0xb0, 0xf1, 0x1b, 0xbe, //0x0000e180 .quad -4747935642407032618 + 0x5d, 0x4c, 0x2e, 0x59, 0xc0, 0x18, 0x4f, 0x74, //0x0000e188 .quad 8380944645968776285 + 0x0c, 0x13, 0x64, 0x70, 0x1c, 0xee, 0xa2, 0xed, //0x0000e190 .quad -1323233534581402868 + 0x74, 0xdf, 0x79, 0x6f, 0xf0, 0xde, 0x62, 0x11, //0x0000e198 .quad 1252808770606194548 + 0xe7, 0x8b, 0x3e, 0xc6, 0xd1, 0xd4, 0x85, 0x94, //0x0000e1a0 .quad -7744549986754458649 + 0xa9, 0x2b, 0xac, 0x45, 0x56, 0xcb, 0xdd, 0x8a, //0x0000e1a8 .quad -8440366555225904215 + 0xe1, 0x2e, 0xce, 0x37, 0x06, 0x4a, 0xa7, 0xb9, //0x0000e1b0 .quad -5069001465015685407 + 0x93, 0x36, 0x17, 0xd7, 0x2b, 0x3e, 0x95, 0x6d, //0x0000e1b8 .quad 7896285879677171347 + 0x99, 0xba, 0xc1, 0xc5, 0x87, 0x1c, 0x11, 0xe8, //0x0000e1c0 .quad -1724565812842218855 + 0x38, 0x04, 0xdd, 0xcc, 0xb6, 0x8d, 0xfa, 0xc8, //0x0000e1c8 .quad -3964700705685699528 + 0xa0, 0x14, 0x99, 0xdb, 0xd4, 0xb1, 0x0a, 0x91, //0x0000e1d0 .quad -7995382660667468640 + 0xa3, 0x22, 0x0a, 0x40, 0x92, 0x98, 0x9c, 0x1d, //0x0000e1d8 .quad 2133748077373825699 + 0xc8, 0x59, 0x7f, 0x12, 0x4a, 0x5e, 0x4d, 0xb5, //0x0000e1e0 .quad -5382542307406947896 + 0x4c, 0xab, 0x0c, 0xd0, 0xb6, 0xbe, 0x03, 0x25, //0x0000e1e8 .quad 2667185096717282124 + 0x3a, 0x30, 0x1f, 0x97, 0xdc, 0xb5, 0xa0, 0xe2, //0x0000e1f0 .quad -2116491865831296966 + 0x1e, 0xd6, 0x0f, 0x84, 0x64, 0xae, 0x44, 0x2e, //0x0000e1f8 .quad 3333981370896602654 + 0x24, 0x7e, 0x73, 0xde, 0xa9, 0x71, 0xa4, 0x8d, //0x0000e200 .quad -8240336443785642460 + 0xd3, 0xe5, 0x89, 0xd2, 0xfe, 0xec, 0xea, 0x5c, //0x0000e208 .quad 6695424375237764563 + 0xad, 0x5d, 0x10, 0x56, 0x14, 0x8e, 0x0d, 0xb1, //0x0000e210 .quad -5688734536304665171 + 0x48, 0x5f, 0x2c, 0x87, 0x3e, 0xa8, 0x25, 0x74, //0x0000e218 .quad 8369280469047205704 + 0x18, 0x75, 0x94, 0x6b, 0x99, 0xf1, 0x50, 0xdd, //0x0000e220 .quad -2499232151953443560 + 0x1a, 0x77, 0xf7, 0x28, 0x4e, 0x12, 0x2f, 0xd1, //0x0000e228 .quad -3373457468973156582 + 0x2f, 0xc9, 0x3c, 0xe3, 0xff, 0x96, 0x52, 0x8a, //0x0000e230 .quad -8479549122611984081 + 0x70, 0xaa, 0x9a, 0xd9, 0x70, 0x6b, 0xbd, 0x82, //0x0000e238 .quad -9025939945749304720 + 0x7b, 0xfb, 0x0b, 0xdc, 0xbf, 0x3c, 0xe7, 0xac, //0x0000e240 .quad -5987750384837592197 + 0x0c, 0x55, 0x01, 0x10, 0x4d, 0xc6, 0x6c, 0x63, //0x0000e248 .quad 7164319141522920716 + 0x5a, 0xfa, 0x0e, 0xd3, 0xef, 0x0b, 0x21, 0xd8, //0x0000e250 .quad -2873001962619602342 + 0x4f, 0xaa, 0x01, 0x54, 0xe0, 0xf7, 0x47, 0x3c, //0x0000e258 .quad 4343712908476262991 + 0x78, 0x5c, 0xe9, 0xe3, 0x75, 0xa7, 0x14, 0x87, //0x0000e260 .quad -8713155254278333320 + 0x72, 0x0a, 0x81, 0x34, 0xec, 0xfa, 0xac, 0x65, //0x0000e268 .quad 7326506586225052274 + 0x96, 0xb3, 0xe3, 0x5c, 0x53, 0xd1, 0xd9, 0xa8, //0x0000e270 .quad -6279758049420528746 + 0x0e, 0x4d, 0xa1, 0x41, 0xa7, 0x39, 0x18, 0x7f, //0x0000e278 .quad 9158133232781315342 + 0x7c, 0xa0, 0x1c, 0x34, 0xa8, 0x45, 0x10, 0xd3, //0x0000e280 .quad -3238011543348273028 + 0x51, 0xa0, 0x09, 0x12, 0x11, 0x48, 0xde, 0x1e, //0x0000e288 .quad 2224294504121868369 + 0x4d, 0xe4, 0x91, 0x20, 0x89, 0x2b, 0xea, 0x83, //0x0000e290 .quad -8941286242233752499 + 0x33, 0x04, 0x46, 0xab, 0x0a, 0xed, 0x4a, 0x93, //0x0000e298 .quad -7833187971778608077 + 0x60, 0x5d, 0xb6, 0x68, 0x6b, 0xb6, 0xe4, 0xa4, //0x0000e2a0 .quad -6564921784364802720 + 0x40, 0x85, 0x17, 0x56, 0x4d, 0xa8, 0x1d, 0xf8, //0x0000e2a8 .quad -568112927868484288 + 0xb9, 0xf4, 0xe3, 0x42, 0x06, 0xe4, 0x1d, 0xce, //0x0000e2b0 .quad -3594466212028615495 + 0x8f, 0x66, 0x9d, 0xab, 0x60, 0x12, 0x25, 0x36, //0x0000e2b8 .quad 3901544858591782543 + 0xf3, 0x78, 0xce, 0xe9, 0x83, 0xae, 0xd2, 0x80, //0x0000e2c0 .quad -9164070410158966541 + 0x1a, 0x60, 0x42, 0x6b, 0x7c, 0x2b, 0xd7, 0xc1, //0x0000e2c8 .quad -4479063491021217766 + 0x30, 0x17, 0x42, 0xe4, 0x24, 0x5a, 0x07, 0xa1, //0x0000e2d0 .quad -6843401994271320272 + 0x20, 0xf8, 0x12, 0x86, 0x5b, 0xf6, 0x4c, 0xb2, //0x0000e2d8 .quad -5598829363776522208 + 0xfc, 0x9c, 0x52, 0x1d, 0xae, 0x30, 0x49, 0xc9, //0x0000e2e0 .quad -3942566474411762436 + 0x28, 0xb6, 0x97, 0x67, 0xf2, 0x33, 0xe0, 0xde, //0x0000e2e8 .quad -2386850686293264856 + 0x3c, 0x44, 0xa7, 0xa4, 0xd9, 0x7c, 0x9b, 0xfb, //0x0000e2f0 .quad -316522074587315140 + 0xb2, 0xa3, 0x7d, 0x01, 0xef, 0x40, 0x98, 0x16, //0x0000e2f8 .quad 1628122660560806834 + 0xa5, 0x8a, 0xe8, 0x06, 0x08, 0x2e, 0x41, 0x9d, //0x0000e300 .quad -7115355324258153819 + 0x4f, 0x86, 0xee, 0x60, 0x95, 0x28, 0x1f, 0x8e, //0x0000e308 .quad -8205795374004271537 + 0x4e, 0xad, 0xa2, 0x08, 0x8a, 0x79, 0x91, 0xc4, //0x0000e310 .quad -4282508136895304370 + 0xe3, 0x27, 0x2a, 0xb9, 0xba, 0xf2, 0xa6, 0xf1, //0x0000e318 .quad -1033872180650563613 + 0xa2, 0x58, 0xcb, 0x8a, 0xec, 0xd7, 0xb5, 0xf5, //0x0000e320 .quad -741449152691742558 + 0xdc, 0xb1, 0x74, 0x67, 0x69, 0xaf, 0x10, 0xae, //0x0000e328 .quad -5904026244240592420 + 0x65, 0x17, 0xbf, 0xd6, 0xf3, 0xa6, 0x91, 0x99, //0x0000e330 .quad -7380934748073420955 + 0x2a, 0xef, 0xa8, 0xe0, 0xa1, 0x6d, 0xca, 0xac, //0x0000e338 .quad -5995859411864064214 + 0x3f, 0xdd, 0x6e, 0xcc, 0xb0, 0x10, 0xf6, 0xbf, //0x0000e340 .quad -4614482416664388289 + 0xf4, 0x2a, 0xd3, 0x58, 0x0a, 0x09, 0xfd, 0x17, //0x0000e348 .quad 1728547772024695540 + 0x8e, 0x94, 0x8a, 0xff, 0xdc, 0x94, 0xf3, 0xef, //0x0000e350 .quad -1156417002403097458 + 0xb1, 0xf5, 0x07, 0xef, 0x4c, 0x4b, 0xfc, 0xdd, //0x0000e358 .quad -2451001303396518479 + 0xd9, 0x9c, 0xb6, 0x1f, 0x0a, 0x3d, 0xf8, 0x95, //0x0000e360 .quad -7640289654143017767 + 0x8f, 0xf9, 0x64, 0x15, 0x10, 0xaf, 0xbd, 0x4a, //0x0000e368 .quad 5385653213018257807 + 0x0f, 0x44, 0xa4, 0xa7, 0x4c, 0x4c, 0x76, 0xbb, //0x0000e370 .quad -4938676049251384305 + 0xf2, 0x37, 0xbe, 0x1a, 0xd4, 0x1a, 0x6d, 0x9d, //0x0000e378 .quad -7102991539009341454 + 0x13, 0x55, 0x8d, 0xd1, 0x5f, 0xdf, 0x53, 0xea, //0x0000e380 .quad -1561659043136842477 + 0xee, 0xc5, 0x6d, 0x21, 0x89, 0x61, 0xc8, 0x84, //0x0000e388 .quad -8878739423761676818 + 0x2c, 0x55, 0xf8, 0xe2, 0x9b, 0x6b, 0x74, 0x92, //0x0000e390 .quad -7893565929601608404 + 0xb5, 0x9b, 0xe4, 0xb4, 0xf5, 0x3c, 0xfd, 0x32, //0x0000e398 .quad 3674159897003727797 + 0x77, 0x6a, 0xb6, 0xdb, 0x82, 0x86, 0x11, 0xb7, //0x0000e3a0 .quad -5255271393574622601 + 0xa2, 0xc2, 0x1d, 0x22, 0x33, 0x8c, 0xbc, 0x3f, //0x0000e3a8 .quad 4592699871254659746 + 0x15, 0x05, 0xa4, 0x92, 0x23, 0xe8, 0xd5, 0xe4, //0x0000e3b0 .quad -1957403223540890347 + 0x4b, 0x33, 0xa5, 0xea, 0x3f, 0xaf, 0xab, 0x0f, //0x0000e3b8 .quad 1129188820640936779 + 0x2d, 0x83, 0xa6, 0x3b, 0x16, 0xb1, 0x05, 0x8f, //0x0000e3c0 .quad -8140906042354138323 + 0x0f, 0x40, 0xa7, 0xf2, 0x87, 0x4d, 0xcb, 0x29, //0x0000e3c8 .quad 3011586022114279439 + 0xf8, 0x23, 0x90, 0xca, 0x5b, 0x1d, 0xc7, 0xb2, //0x0000e3d0 .quad -5564446534515285000 + 0x13, 0x10, 0x51, 0xef, 0xe9, 0x20, 0x3e, 0x74, //0x0000e3d8 .quad 8376168546070237203 + 0xf6, 0x2c, 0x34, 0xbd, 0xb2, 0xe4, 0x78, 0xdf, //0x0000e3e0 .quad -2343872149716718346 + 0x17, 0x54, 0x25, 0x6b, 0x24, 0xa9, 0x4d, 0x91, //0x0000e3e8 .quad -7976533391121755113 + 0x1a, 0x9c, 0x40, 0xb6, 0xef, 0x8e, 0xab, 0x8b, //0x0000e3f0 .quad -8382449121214030822 + 0x8f, 0x54, 0xf7, 0xc2, 0xb6, 0x89, 0xd0, 0x1a, //0x0000e3f8 .quad 1932195658189984911 + 0x20, 0xc3, 0xd0, 0xa3, 0xab, 0x72, 0x96, 0xae, //0x0000e400 .quad -5866375383090150624 + 0xb2, 0x29, 0xb5, 0x73, 0x24, 0xac, 0x84, 0xa1, //0x0000e408 .quad -6808127464117294670 + 0xe8, 0xf3, 0xc4, 0x8c, 0x56, 0x0f, 0x3c, 0xda, //0x0000e410 .quad -2721283210435300376 + 0x1f, 0x74, 0xa2, 0x90, 0x2d, 0xd7, 0xe5, 0xc9, //0x0000e418 .quad -3898473311719230433 + 0x71, 0x18, 0xfb, 0x17, 0x96, 0x89, 0x65, 0x88, //0x0000e420 .quad -8618331034163144591 + 0x93, 0x88, 0x65, 0x7a, 0x7c, 0xa6, 0x2f, 0x7e, //0x0000e428 .quad 9092669226243950739 + 0x8d, 0xde, 0xf9, 0x9d, 0xfb, 0xeb, 0x7e, 0xaa, //0x0000e430 .quad -6161227774276542835 + 0xb8, 0xea, 0xfe, 0x98, 0x1b, 0x90, 0xbb, 0xdd, //0x0000e438 .quad -2469221522477225288 + 0x31, 0x56, 0x78, 0x85, 0xfa, 0xa6, 0x1e, 0xd5, //0x0000e440 .quad -3089848699418290639 + 0x66, 0xa5, 0x3e, 0x7f, 0x22, 0x74, 0x2a, 0x55, //0x0000e448 .quad 6136845133758244198 + 0xde, 0x35, 0x6b, 0x93, 0x5c, 0x28, 0x33, 0x85, //0x0000e450 .quad -8848684464777513506 + 0x60, 0x27, 0x87, 0x8f, 0x95, 0x88, 0x3a, 0xd5, //0x0000e458 .quad -3082000819042179232 + 0x56, 0x03, 0x46, 0xb8, 0x73, 0xf2, 0x7f, 0xa6, //0x0000e460 .quad -6449169562544503978 + 0x38, 0xf1, 0x68, 0xf3, 0xba, 0x2a, 0x89, 0x8a, //0x0000e468 .quad -8464187042230111944 + 0x2c, 0x84, 0x57, 0xa6, 0x10, 0xef, 0x1f, 0xd0, //0x0000e470 .quad -3449775934753242068 + 0x86, 0x2d, 0x43, 0xb0, 0x69, 0x75, 0x2b, 0x2d, //0x0000e478 .quad 3254824252494523782 + 0x9b, 0xb2, 0xf6, 0x67, 0x6a, 0xf5, 0x13, 0x82, //0x0000e480 .quad -9073638986861858149 + 0x74, 0xfc, 0x29, 0x0e, 0x62, 0x29, 0x3b, 0x9c, //0x0000e488 .quad -7189106879045698444 + 0x42, 0x5f, 0xf4, 0x01, 0xc5, 0xf2, 0x98, 0xa2, //0x0000e490 .quad -6730362715149934782 + 0x90, 0x7b, 0xb4, 0x91, 0xba, 0xf3, 0x49, 0x83, //0x0000e498 .quad -8986383598807123056 + 0x13, 0x77, 0x71, 0x42, 0x76, 0x2f, 0x3f, 0xcb, //0x0000e4a0 .quad -3801267375510030573 + 0x74, 0x9a, 0x21, 0x36, 0xa9, 0x70, 0x1c, 0x24, //0x0000e4a8 .quad 2602078556773259892 + 0xd7, 0xd4, 0x0d, 0xd3, 0x53, 0xfb, 0x0e, 0xfe, //0x0000e4b0 .quad -139898200960150313 + 0x11, 0x01, 0xaa, 0x83, 0xd3, 0x8c, 0x23, 0xed, //0x0000e4b8 .quad -1359087822460813039 + 0x06, 0xa5, 0xe8, 0x63, 0x14, 0x5d, 0xc9, 0x9e, //0x0000e4c0 .quad -7004965403241175802 + 0xab, 0x40, 0x4a, 0x32, 0x04, 0x38, 0x36, 0xf4, //0x0000e4c8 .quad -849429889038008149 + 0x48, 0xce, 0xe2, 0x7c, 0x59, 0xb4, 0x7b, 0xc6, //0x0000e4d0 .quad -4144520735624081848 + 0xd6, 0xd0, 0xdc, 0x3e, 0x05, 0xc6, 0x43, 0xb1, //0x0000e4d8 .quad -5673473379724898090 + 0xda, 0x81, 0x1b, 0xdc, 0x6f, 0xa1, 0x1a, 0xf8, //0x0000e4e0 .quad -568964901102714406 + 0x0b, 0x05, 0x94, 0x8e, 0x86, 0xb7, 0x94, 0xdd, //0x0000e4e8 .quad -2480155706228734709 + 0x28, 0x31, 0x91, 0xe9, 0xe5, 0xa4, 0x10, 0x9b, //0x0000e4f0 .quad -7273132090830278360 + 0x27, 0x83, 0x1c, 0x19, 0xb4, 0xf2, 0x7c, 0xca, //0x0000e4f8 .quad -3855940325606653145 + 0x72, 0x7d, 0xf5, 0x63, 0x1f, 0xce, 0xd4, 0xc1, //0x0000e500 .quad -4479729095110460046 + 0xf1, 0xa3, 0x63, 0x1f, 0x61, 0x2f, 0x1c, 0xfd, //0x0000e508 .quad -208239388580928527 + 0xcf, 0xdc, 0xf2, 0x3c, 0xa7, 0x01, 0x4a, 0xf2, //0x0000e510 .quad -987975350460687153 + 0xed, 0x8c, 0x3c, 0x67, 0x39, 0x3b, 0x63, 0xbc, //0x0000e518 .quad -4871985254153548563 + 0x01, 0xca, 0x17, 0x86, 0x08, 0x41, 0x6e, 0x97, //0x0000e520 .quad -7535013621679011327 + 0x14, 0xd8, 0x85, 0xe0, 0x03, 0x05, 0xbe, 0xd5, //0x0000e528 .quad -3044990783845967852 + 0x82, 0xbc, 0x9d, 0xa7, 0x4a, 0xd1, 0x49, 0xbd, //0x0000e530 .quad -4807081008671376254 + 0x19, 0x4e, 0xa7, 0xd8, 0x44, 0x86, 0x2d, 0x4b, //0x0000e538 .quad 5417133557047315993 + 0xa2, 0x2b, 0x85, 0x51, 0x9d, 0x45, 0x9c, 0xec, //0x0000e540 .quad -1397165242411832414 + 0x9f, 0x21, 0xd1, 0x0e, 0xd6, 0xe7, 0xf8, 0xdd, //0x0000e548 .quad -2451955090545630817 + 0x45, 0x3b, 0xf3, 0x52, 0x82, 0xab, 0xe1, 0x93, //0x0000e550 .quad -7790757304148477115 + 0x04, 0xb5, 0x42, 0xc9, 0xe5, 0x90, 0xbb, 0xca, //0x0000e558 .quad -3838314940804713212 + 0x17, 0x0a, 0xb0, 0xe7, 0x62, 0x16, 0xda, 0xb8, //0x0000e560 .quad -5126760611758208489 + 0x44, 0x62, 0x93, 0x3b, 0x1f, 0x75, 0x6a, 0x3d, //0x0000e568 .quad 4425478360848884292 + 0x9d, 0x0c, 0x9c, 0xa1, 0xfb, 0x9b, 0x10, 0xe7, //0x0000e570 .quad -1796764746270372707 + 0xd5, 0x3a, 0x78, 0x0a, 0x67, 0x12, 0xc5, 0x0c, //0x0000e578 .quad 920161932633717461 + 0xe2, 0x87, 0x01, 0x45, 0x7d, 0x61, 0x6a, 0x90, //0x0000e580 .quad -8040506994060064798 + 0xc6, 0x24, 0x8b, 0x66, 0x80, 0x2b, 0xfb, 0x27, //0x0000e588 .quad 2880944217109767366 + 0xda, 0xe9, 0x41, 0x96, 0xdc, 0xf9, 0x84, 0xb4, //0x0000e590 .quad -5438947724147693094 + 0xf7, 0xed, 0x2d, 0x80, 0x60, 0xf6, 0xf9, 0xb1, //0x0000e598 .quad -5622191765467566601 + 0x51, 0x64, 0xd2, 0xbb, 0x53, 0x38, 0xa6, 0xe1, //0x0000e5a0 .quad -2186998636757228463 + 0x74, 0x69, 0x39, 0xa0, 0xf8, 0x73, 0x78, 0x5e, //0x0000e5a8 .quad 6807318348447705460 + 0xb2, 0x7e, 0x63, 0x55, 0x34, 0xe3, 0x07, 0x8d, //0x0000e5b0 .quad -8284403175614349646 + 0xe9, 0xe1, 0x23, 0x64, 0x7b, 0x48, 0x0b, 0xdb, //0x0000e5b8 .quad -2662955059861265943 + 0x5f, 0x5e, 0xbc, 0x6a, 0x01, 0xdc, 0x49, 0xb0, //0x0000e5c0 .quad -5743817951090549153 + 0x63, 0xda, 0x2c, 0x3d, 0x9a, 0x1a, 0xce, 0x91, //0x0000e5c8 .quad -7940379843253970333 + 0xf7, 0x75, 0x6b, 0xc5, 0x01, 0x53, 0x5c, 0xdc, //0x0000e5d0 .quad -2568086420435798537 + 0xfc, 0x10, 0x78, 0xcc, 0x40, 0xa1, 0x41, 0x76, //0x0000e5d8 .quad 8521269269642088700 + 0xba, 0x29, 0x63, 0x1b, 0xe1, 0xb3, 0xb9, 0x89, //0x0000e5e0 .quad -8522583040413455942 + 0x9e, 0x0a, 0xcb, 0x7f, 0xc8, 0x04, 0xe9, 0xa9, //0x0000e5e8 .quad -6203421752542164322 + 0x29, 0xf4, 0x3b, 0x62, 0xd9, 0x20, 0x28, 0xac, //0x0000e5f0 .quad -6041542782089432023 + 0x45, 0xcd, 0xbd, 0x9f, 0xfa, 0x45, 0x63, 0x54, //0x0000e5f8 .quad 6080780864604458309 + 0x33, 0xf1, 0xca, 0xba, 0x0f, 0x29, 0x32, 0xd7, //0x0000e600 .quad -2940242459184402125 + 0x96, 0x40, 0xad, 0x47, 0x79, 0x17, 0x7c, 0xa9, //0x0000e608 .quad -6234081974526590826 + 0xc0, 0xd6, 0xbe, 0xd4, 0xa9, 0x59, 0x7f, 0x86, //0x0000e610 .quad -8755180564631333184 + 0x5e, 0x48, 0xcc, 0xcc, 0xab, 0x8e, 0xed, 0x49, //0x0000e618 .quad 5327070802775656542 + 0x70, 0x8c, 0xee, 0x49, 0x14, 0x30, 0x1f, 0xa8, //0x0000e620 .quad -6332289687361778576 + 0x75, 0x5a, 0xff, 0xbf, 0x56, 0xf2, 0x68, 0x5c, //0x0000e628 .quad 6658838503469570677 + 0x8c, 0x2f, 0x6a, 0x5c, 0x19, 0xfc, 0x26, 0xd2, //0x0000e630 .quad -3303676090774835316 + 0x12, 0x31, 0xff, 0x6f, 0xec, 0x2e, 0x83, 0x73, //0x0000e638 .quad 8323548129336963346 + 0xb7, 0x5d, 0xc2, 0xd9, 0x8f, 0x5d, 0x58, 0x83, //0x0000e640 .quad -8982326584375353929 + 0xac, 0x7e, 0xff, 0xc5, 0x53, 0xfd, 0x31, 0xc8, //0x0000e648 .quad -4021154456019173716 + 0x25, 0xf5, 0x32, 0xd0, 0xf3, 0x74, 0x2e, 0xa4, //0x0000e650 .quad -6616222212041804507 + 0x56, 0x5e, 0x7f, 0xb7, 0xa8, 0x7c, 0x3e, 0xba, //0x0000e658 .quad -5026443070023967146 + 0x6f, 0xb2, 0x3f, 0xc4, 0x30, 0x12, 0x3a, 0xcd, //0x0000e660 .quad -3658591746624867729 + 0xec, 0x35, 0x5f, 0xe5, 0xd2, 0x1b, 0xce, 0x28, //0x0000e668 .quad 2940318199324816876 + 0x85, 0xcf, 0xa7, 0x7a, 0x5e, 0x4b, 0x44, 0x80, //0x0000e670 .quad -9204148869281624187 + 0xb4, 0x81, 0x5b, 0xcf, 0x63, 0xd1, 0x80, 0x79, //0x0000e678 .quad 8755227902219092404 + 0x66, 0xc3, 0x51, 0x19, 0x36, 0x5e, 0x55, 0xa0, //0x0000e680 .quad -6893500068174642330 + 0x20, 0x62, 0x32, 0xc3, 0xbc, 0x05, 0xe1, 0xd7, //0x0000e688 .quad -2891023177508298208 + 0x40, 0x34, 0xa6, 0x9f, 0xc3, 0xb5, 0x6a, 0xc8, //0x0000e690 .quad -4005189066790915008 + 0xa8, 0xfa, 0xfe, 0xf3, 0x2b, 0x47, 0xd9, 0x8d, //0x0000e698 .quad -8225464990312760664 + 0x50, 0xc1, 0x8f, 0x87, 0x34, 0x63, 0x85, 0xfa, //0x0000e6a0 .quad -394800315061255856 + 0x52, 0xb9, 0xfe, 0xf0, 0xf6, 0x98, 0x4f, 0xb1, //0x0000e6a8 .quad -5670145219463562926 + 0xd2, 0xd8, 0xb9, 0xd4, 0x00, 0x5e, 0x93, 0x9c, //0x0000e6b0 .quad -7164279224554366766 + 0xd4, 0x33, 0x9f, 0x56, 0x9a, 0xbf, 0xd1, 0x6e, //0x0000e6b8 .quad 7985374283903742932 + 0x07, 0x4f, 0xe8, 0x09, 0x81, 0x35, 0xb8, 0xc3, //0x0000e6c0 .quad -4343663012265570553 + 0xc9, 0x00, 0x47, 0xec, 0x80, 0x2f, 0x86, 0x0a, //0x0000e6c8 .quad 758345818024902857 + 0xc8, 0x62, 0x62, 0x4c, 0xe1, 0x42, 0xa6, 0xf4, //0x0000e6d0 .quad -817892746904575288 + 0xfb, 0xc0, 0x58, 0x27, 0x61, 0xbb, 0x27, 0xcd, //0x0000e6d8 .quad -3663753745896259333 + 0xbd, 0x7d, 0xbd, 0xcf, 0xcc, 0xe9, 0xe7, 0x98, //0x0000e6e0 .quad -7428711994456441411 + 0x9d, 0x78, 0x97, 0xb8, 0x1c, 0xd5, 0x38, 0x80, //0x0000e6e8 .quad -9207375118826243939 + 0x2c, 0xdd, 0xac, 0x03, 0x40, 0xe4, 0x21, 0xbf, //0x0000e6f0 .quad -4674203974643163860 + 0xc4, 0x56, 0xbd, 0xe6, 0x63, 0x0a, 0x47, 0xe0, //0x0000e6f8 .quad -2285846861678029116 + 0x78, 0x14, 0x98, 0x04, 0x50, 0x5d, 0xea, 0xee, //0x0000e700 .quad -1231068949876566920 + 0x75, 0xac, 0x6c, 0xe0, 0xfc, 0xcc, 0x58, 0x18, //0x0000e708 .quad 1754377441329851509 + 0xcb, 0x0c, 0xdf, 0x02, 0x52, 0x7a, 0x52, 0x95, //0x0000e710 .quad -7686947121313936181 + 0xc9, 0xeb, 0x43, 0x0c, 0x1e, 0x80, 0x37, 0x0f, //0x0000e718 .quad 1096485900831157193 + 0xfd, 0xcf, 0x96, 0x83, 0xe6, 0x18, 0xa7, 0xba, //0x0000e720 .quad -4996997883215032323 + 0xbb, 0xe6, 0x54, 0x8f, 0x25, 0x60, 0x05, 0xd3, //0x0000e728 .quad -3241078642388441413 + 0xfd, 0x83, 0x7c, 0x24, 0x20, 0xdf, 0x50, 0xe9, //0x0000e730 .quad -1634561335591402499 + 0x6a, 0x20, 0x2a, 0xf3, 0x2e, 0xb8, 0xc6, 0x47, //0x0000e738 .quad 5172023733869224042 + 0x7e, 0xd2, 0xcd, 0x16, 0x74, 0x8b, 0xd2, 0x91, //0x0000e740 .quad -7939129862385708418 + 0x42, 0x54, 0xfa, 0x57, 0x1d, 0x33, 0xdc, 0x4c, //0x0000e748 .quad 5538357842881958978 + 0x1d, 0x47, 0x81, 0x1c, 0x51, 0x2e, 0x47, 0xb6, //0x0000e750 .quad -5312226309554747619 + 0x53, 0xe9, 0xf8, 0xad, 0xe4, 0x3f, 0x13, 0xe0, //0x0000e758 .quad -2300424733252327085 + 0xe5, 0x98, 0xa1, 0x63, 0xe5, 0xf9, 0xd8, 0xe3, //0x0000e760 .quad -2028596868516046619 + 0xa7, 0x23, 0x77, 0xd9, 0xdd, 0x0f, 0x18, 0x58, //0x0000e768 .quad 6347841120289366951 + 0x8f, 0xff, 0x44, 0x5e, 0x2f, 0x9c, 0x67, 0x8e, //0x0000e770 .quad -8185402070463610993 + 0x49, 0x76, 0xea, 0xa7, 0xea, 0x09, 0x0f, 0x57, //0x0000e778 .quad 6273243709394548297 + 0x73, 0x3f, 0xd6, 0x35, 0x3b, 0x83, 0x01, 0xb2, //0x0000e780 .quad -5620066569652125837 + 0xdb, 0x13, 0xe5, 0x51, 0x65, 0xcc, 0xd2, 0x2c, //0x0000e788 .quad 3229868618315797467 + 0x4f, 0xcf, 0x4b, 0x03, 0x0a, 0xe4, 0x81, 0xde, //0x0000e790 .quad -2413397193637769393 + 0xd2, 0x58, 0x5e, 0xa6, 0x7e, 0x7f, 0x07, 0xf8, //0x0000e798 .quad -574350245532641070 + 0x91, 0x61, 0x0f, 0x42, 0x86, 0x2e, 0x11, 0x8b, //0x0000e7a0 .quad -8425902273664687727 + 0x83, 0xf7, 0xfa, 0x27, 0xaf, 0xaf, 0x04, 0xfb, //0x0000e7a8 .quad -358968903457900669 + 0xf6, 0x39, 0x93, 0xd2, 0x27, 0x7a, 0xd5, 0xad, //0x0000e7b0 .quad -5920691823653471754 + 0x64, 0xb5, 0xf9, 0xf1, 0x9a, 0xdb, 0xc5, 0x79, //0x0000e7b8 .quad 8774660907532399972 + 0x74, 0x08, 0x38, 0xc7, 0xb1, 0xd8, 0x4a, 0xd9, //0x0000e7c0 .quad -2789178761139451788 + 0xbd, 0x22, 0x78, 0xae, 0x81, 0x52, 0x37, 0x18, //0x0000e7c8 .quad 1744954097560724157 + 0x48, 0x05, 0x83, 0x1c, 0x6f, 0xc7, 0xce, 0x87, //0x0000e7d0 .quad -8660765753353239224 + 0xb6, 0x15, 0x0b, 0x0d, 0x91, 0x93, 0x22, 0x8f, //0x0000e7d8 .quad -8132775725879323210 + 0x9a, 0xc6, 0xa3, 0xe3, 0x4a, 0x79, 0xc2, 0xa9, //0x0000e7e0 .quad -6214271173264161126 + 0x23, 0xdb, 0x4d, 0x50, 0x75, 0x38, 0xeb, 0xb2, //0x0000e7e8 .quad -5554283638921766109 + 0x41, 0xb8, 0x8c, 0x9c, 0x9d, 0x17, 0x33, 0xd4, //0x0000e7f0 .quad -3156152948152813503 + 0xec, 0x51, 0x61, 0xa4, 0x92, 0x06, 0xa6, 0x5f, //0x0000e7f8 .quad 6892203506629956076 + 0x28, 0xf3, 0xd7, 0x81, 0xc2, 0xee, 0x9f, 0x84, //0x0000e800 .quad -8890124620236590296 + 0x34, 0xd3, 0xbc, 0xa6, 0x1b, 0xc4, 0xc7, 0xdb, //0x0000e808 .quad -2609901835997359308 + 0xf3, 0xef, 0x4d, 0x22, 0x73, 0xea, 0xc7, 0xa5, //0x0000e810 .quad -6500969756868349965 + 0x01, 0x08, 0x6c, 0x90, 0x22, 0xb5, 0xb9, 0x12, //0x0000e818 .quad 1349308723430688769 + 0xef, 0x6b, 0xe1, 0xea, 0x0f, 0xe5, 0x39, 0xcf, //0x0000e820 .quad -3514526177658049553 + 0x01, 0x0a, 0x87, 0x34, 0x6b, 0x22, 0x68, 0xd7, //0x0000e828 .quad -2925050114139026943 + 0x75, 0xe3, 0xcc, 0xf2, 0x29, 0x2f, 0x84, 0x81, //0x0000e830 .quad -9114107888677362827 + 0x41, 0x66, 0xd4, 0x00, 0x83, 0x15, 0xa1, 0xe6, //0x0000e838 .quad -1828156321336891839 + 0x53, 0x1c, 0x80, 0x6f, 0xf4, 0x3a, 0xe5, 0xa1, //0x0000e840 .quad -6780948842419315629 + 0xd1, 0x7f, 0x09, 0xc1, 0xe3, 0x5a, 0x49, 0x60, //0x0000e848 .quad 6938176635183661009 + 0x68, 0x23, 0x60, 0x8b, 0xb1, 0x89, 0x5e, 0xca, //0x0000e850 .quad -3864500034596756632 + 0xc5, 0xdf, 0x4b, 0xb1, 0x9c, 0xb1, 0x5b, 0x38, //0x0000e858 .quad 4061034775552188357 + 0x42, 0x2c, 0x38, 0xee, 0x1d, 0x2c, 0xf6, 0xfc, //0x0000e860 .quad -218939024818557886 + 0xb6, 0xd7, 0x9e, 0xdd, 0x03, 0x9e, 0x72, 0x46, //0x0000e868 .quad 5076293469440235446 + 0xa9, 0x1b, 0xe3, 0xb4, 0x92, 0xdb, 0x19, 0x9e, //0x0000e870 .quad -7054365918152680535 + 0xd2, 0x46, 0x83, 0x6a, 0xc2, 0xa2, 0x07, 0x6c, //0x0000e878 .quad 7784369436827535058 + //0x0000e880 .p2align 4, 0x00 + //0x0000e880 _VecShiftShuffles + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, //0x0000e880 QUAD $0x0706050403020100; QUAD $0x0f0e0d0c0b0a0908 // .ascii 16, '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, //0x0000e890 QUAD $0x0807060504030201; QUAD $0xff0f0e0d0c0b0a09 // .ascii 16, '\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff' + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, //0x0000e8a0 QUAD $0x0908070605040302; QUAD $0xffff0f0e0d0c0b0a // .ascii 16, '\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff' + 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, //0x0000e8b0 QUAD $0x0a09080706050403; QUAD $0xffffff0f0e0d0c0b // .ascii 16, '\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff' + 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, //0x0000e8c0 QUAD $0x0b0a090807060504; QUAD $0xffffffff0f0e0d0c // .ascii 16, '\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff' + 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0000e8d0 QUAD $0x0c0b0a0908070605; QUAD $0xffffffffff0f0e0d // .ascii 16, '\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff' + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0000e8e0 QUAD $0x0d0c0b0a09080706; QUAD $0xffffffffffff0f0e // .ascii 16, '\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff' + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0000e8f0 QUAD $0x0e0d0c0b0a090807; QUAD $0xffffffffffffff0f // .ascii 16, '\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff' + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x0000e900 QUAD $0x0f0e0d0c0b0a0908; QUAD $0xffffffffffffffff // .ascii 16, '\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff' + //0x0000e910 .p2align 4, 0x00 + //0x0000e910 __SingleQuoteTab + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e910 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, //0x0000e918 QUAD $0x000030303030755c // .asciz 8, '\\u0000\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e920 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x31, 0x00, 0x00, //0x0000e928 QUAD $0x000031303030755c // .asciz 8, '\\u0001\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e930 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x32, 0x00, 0x00, //0x0000e938 QUAD $0x000032303030755c // .asciz 8, '\\u0002\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e940 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x33, 0x00, 0x00, //0x0000e948 QUAD $0x000033303030755c // .asciz 8, '\\u0003\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e950 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x34, 0x00, 0x00, //0x0000e958 QUAD $0x000034303030755c // .asciz 8, '\\u0004\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e960 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x35, 0x00, 0x00, //0x0000e968 QUAD $0x000035303030755c // .asciz 8, '\\u0005\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e970 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x36, 0x00, 0x00, //0x0000e978 QUAD $0x000036303030755c // .asciz 8, '\\u0006\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e980 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x37, 0x00, 0x00, //0x0000e988 QUAD $0x000037303030755c // .asciz 8, '\\u0007\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e990 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x38, 0x00, 0x00, //0x0000e998 QUAD $0x000038303030755c // .asciz 8, '\\u0008\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9a0 .quad 2 + 0x5c, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9a8 QUAD $0x000000000000745c // .asciz 8, '\\t\x00\x00\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9b0 .quad 2 + 0x5c, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9b8 QUAD $0x0000000000006e5c // .asciz 8, '\\n\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9c0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x62, 0x00, 0x00, //0x0000e9c8 QUAD $0x000062303030755c // .asciz 8, '\\u000b\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9d0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x63, 0x00, 0x00, //0x0000e9d8 QUAD $0x000063303030755c // .asciz 8, '\\u000c\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9e0 .quad 2 + 0x5c, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9e8 QUAD $0x000000000000725c // .asciz 8, '\\r\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000e9f0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x65, 0x00, 0x00, //0x0000e9f8 QUAD $0x000065303030755c // .asciz 8, '\\u000e\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea00 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x30, 0x66, 0x00, 0x00, //0x0000ea08 QUAD $0x000066303030755c // .asciz 8, '\\u000f\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea10 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x30, 0x00, 0x00, //0x0000ea18 QUAD $0x000030313030755c // .asciz 8, '\\u0010\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea20 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x31, 0x00, 0x00, //0x0000ea28 QUAD $0x000031313030755c // .asciz 8, '\\u0011\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea30 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x32, 0x00, 0x00, //0x0000ea38 QUAD $0x000032313030755c // .asciz 8, '\\u0012\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea40 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x33, 0x00, 0x00, //0x0000ea48 QUAD $0x000033313030755c // .asciz 8, '\\u0013\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea50 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x34, 0x00, 0x00, //0x0000ea58 QUAD $0x000034313030755c // .asciz 8, '\\u0014\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea60 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x35, 0x00, 0x00, //0x0000ea68 QUAD $0x000035313030755c // .asciz 8, '\\u0015\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea70 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x36, 0x00, 0x00, //0x0000ea78 QUAD $0x000036313030755c // .asciz 8, '\\u0016\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea80 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x37, 0x00, 0x00, //0x0000ea88 QUAD $0x000037313030755c // .asciz 8, '\\u0017\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ea90 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x38, 0x00, 0x00, //0x0000ea98 QUAD $0x000038313030755c // .asciz 8, '\\u0018\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eaa0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x39, 0x00, 0x00, //0x0000eaa8 QUAD $0x000039313030755c // .asciz 8, '\\u0019\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eab0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x61, 0x00, 0x00, //0x0000eab8 QUAD $0x000061313030755c // .asciz 8, '\\u001a\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eac0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x00, 0x00, //0x0000eac8 QUAD $0x000062313030755c // .asciz 8, '\\u001b\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ead0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x63, 0x00, 0x00, //0x0000ead8 QUAD $0x000063313030755c // .asciz 8, '\\u001c\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eae0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x64, 0x00, 0x00, //0x0000eae8 QUAD $0x000064313030755c // .asciz 8, '\\u001d\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eaf0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x65, 0x00, 0x00, //0x0000eaf8 QUAD $0x000065313030755c // .asciz 8, '\\u001e\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb00 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x31, 0x66, 0x00, 0x00, //0x0000eb08 QUAD $0x000066313030755c // .asciz 8, '\\u001f\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb30 .quad 2 + 0x5c, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb38 QUAD $0x000000000000225c // .asciz 8, '\\"\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eb90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eba0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ebb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ebc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ebd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ebe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ebf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ec90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eca0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ecb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ecc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ecd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ece0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ecf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ed90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eda0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000edb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000edc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000edd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ede0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000edf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ee90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eea0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eeb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eec0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eed0 .quad 2 + 0x5c, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eed8 QUAD $0x0000000000005c5c // .asciz 8, '\\\\\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eee0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eef0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ef90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000efa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000efb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000efc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000efd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000efe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000eff0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f000 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f010 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f020 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f030 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f040 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f050 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f060 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f070 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f080 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f090 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f0a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f0b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f0c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f0d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f0e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f0f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f100 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f110 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f120 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f130 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f140 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f150 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f160 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f170 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f180 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f190 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f1a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f1b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f1c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f1d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f1e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f1f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f200 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f210 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f220 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f230 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f240 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f250 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f260 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f270 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f280 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f290 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f2a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f2b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f2c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f2d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f2e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f2f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f300 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f310 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f320 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f330 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f340 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f350 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f360 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f370 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f380 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f390 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f3f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f400 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f410 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f420 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f430 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f440 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f450 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f460 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f470 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f480 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f490 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f4f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f500 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f510 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f520 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f530 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f540 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f550 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f560 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f570 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f580 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f590 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f5f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f600 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f610 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f620 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f630 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f640 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f650 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f660 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f670 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f680 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f690 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f6f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f700 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f710 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f720 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f730 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f740 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f750 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f760 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f770 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f780 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f790 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f7f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f800 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f810 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f820 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f830 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f840 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f850 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f860 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f870 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f880 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f890 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f8f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f900 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x0000f910 .p2align 4, 0x00 + //0x0000f910 __DoubleQuoteTab + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f910 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x30, 0x00, //0x0000f918 QUAD $0x0030303030755c5c // .asciz 8, '\\\\u0000\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f920 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x31, 0x00, //0x0000f928 QUAD $0x0031303030755c5c // .asciz 8, '\\\\u0001\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f930 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x32, 0x00, //0x0000f938 QUAD $0x0032303030755c5c // .asciz 8, '\\\\u0002\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f940 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x33, 0x00, //0x0000f948 QUAD $0x0033303030755c5c // .asciz 8, '\\\\u0003\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f950 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x34, 0x00, //0x0000f958 QUAD $0x0034303030755c5c // .asciz 8, '\\\\u0004\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f960 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x35, 0x00, //0x0000f968 QUAD $0x0035303030755c5c // .asciz 8, '\\\\u0005\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f970 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x36, 0x00, //0x0000f978 QUAD $0x0036303030755c5c // .asciz 8, '\\\\u0006\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f980 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x37, 0x00, //0x0000f988 QUAD $0x0037303030755c5c // .asciz 8, '\\\\u0007\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f990 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x38, 0x00, //0x0000f998 QUAD $0x0038303030755c5c // .asciz 8, '\\\\u0008\x00' + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9a0 .quad 3 + 0x5c, 0x5c, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9a8 QUAD $0x0000000000745c5c // .asciz 8, '\\\\t\x00\x00\x00\x00\x00' + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9b0 .quad 3 + 0x5c, 0x5c, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9b8 QUAD $0x00000000006e5c5c // .asciz 8, '\\\\n\x00\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9c0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x62, 0x00, //0x0000f9c8 QUAD $0x0062303030755c5c // .asciz 8, '\\\\u000b\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9d0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x63, 0x00, //0x0000f9d8 QUAD $0x0063303030755c5c // .asciz 8, '\\\\u000c\x00' + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9e0 .quad 3 + 0x5c, 0x5c, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9e8 QUAD $0x0000000000725c5c // .asciz 8, '\\\\r\x00\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000f9f0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x65, 0x00, //0x0000f9f8 QUAD $0x0065303030755c5c // .asciz 8, '\\\\u000e\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa00 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x66, 0x00, //0x0000fa08 QUAD $0x0066303030755c5c // .asciz 8, '\\\\u000f\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa10 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x30, 0x00, //0x0000fa18 QUAD $0x0030313030755c5c // .asciz 8, '\\\\u0010\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa20 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x31, 0x00, //0x0000fa28 QUAD $0x0031313030755c5c // .asciz 8, '\\\\u0011\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa30 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x32, 0x00, //0x0000fa38 QUAD $0x0032313030755c5c // .asciz 8, '\\\\u0012\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa40 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x33, 0x00, //0x0000fa48 QUAD $0x0033313030755c5c // .asciz 8, '\\\\u0013\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa50 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x34, 0x00, //0x0000fa58 QUAD $0x0034313030755c5c // .asciz 8, '\\\\u0014\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa60 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x35, 0x00, //0x0000fa68 QUAD $0x0035313030755c5c // .asciz 8, '\\\\u0015\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa70 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x36, 0x00, //0x0000fa78 QUAD $0x0036313030755c5c // .asciz 8, '\\\\u0016\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa80 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x37, 0x00, //0x0000fa88 QUAD $0x0037313030755c5c // .asciz 8, '\\\\u0017\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fa90 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x38, 0x00, //0x0000fa98 QUAD $0x0038313030755c5c // .asciz 8, '\\\\u0018\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000faa0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x39, 0x00, //0x0000faa8 QUAD $0x0039313030755c5c // .asciz 8, '\\\\u0019\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fab0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x61, 0x00, //0x0000fab8 QUAD $0x0061313030755c5c // .asciz 8, '\\\\u001a\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fac0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x00, //0x0000fac8 QUAD $0x0062313030755c5c // .asciz 8, '\\\\u001b\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fad0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x63, 0x00, //0x0000fad8 QUAD $0x0063313030755c5c // .asciz 8, '\\\\u001c\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fae0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x64, 0x00, //0x0000fae8 QUAD $0x0064313030755c5c // .asciz 8, '\\\\u001d\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000faf0 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x65, 0x00, //0x0000faf8 QUAD $0x0065313030755c5c // .asciz 8, '\\\\u001e\x00' + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb00 .quad 7 + 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x66, 0x00, //0x0000fb08 QUAD $0x0066313030755c5c // .asciz 8, '\\\\u001f\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb30 .quad 4 + 0x5c, 0x5c, 0x5c, 0x22, 0x00, 0x00, 0x00, 0x00, //0x0000fb38 QUAD $0x00000000225c5c5c // .asciz 8, '\\\\\\"\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fb90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fba0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fbf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fc90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fca0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fcb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fcc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fcd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fce0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fcf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fd90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fda0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fdb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fdc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fdd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fde0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fdf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fe90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fea0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000feb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fec0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fed0 .quad 4 + 0x5c, 0x5c, 0x5c, 0x5c, 0x00, 0x00, 0x00, 0x00, //0x0000fed8 QUAD $0x000000005c5c5c5c // .asciz 8, '\\\\\\\\\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fee0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fef0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ff90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000ffe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000fff0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010000 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010010 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010020 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010030 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010040 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010050 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010060 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010070 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010080 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010090 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000100f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010100 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010110 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010120 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010130 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010140 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010150 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010160 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010170 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010180 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010190 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000101f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010200 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010210 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010220 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010230 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010240 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010250 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010260 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010270 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010280 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010290 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000102f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010300 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010310 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010320 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010330 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010340 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010350 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010360 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010370 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010380 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010390 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000103f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010400 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010410 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010420 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010430 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010440 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010450 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010460 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010470 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010480 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010490 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000104f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010500 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010510 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010520 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010530 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010540 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010550 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010560 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010570 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010580 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010590 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000105f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010600 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010610 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010620 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010630 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010640 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010650 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010660 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010670 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010680 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010690 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000106f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010700 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010710 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010720 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010730 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010740 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010750 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010760 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010770 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010780 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010790 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000107f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010800 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010810 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010820 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010830 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010840 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010850 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010860 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010870 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010880 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010890 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000108f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010900 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x00010910 .p2align 4, 0x00 + //0x00010910 __EscTab + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00010910 QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .ascii 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00010920 QUAD $0x0101010101010101; QUAD $0x0101010101010101 // .ascii 16, '\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010930 QUAD $0x0000000000010000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010940 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010950 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, //0x00010960 QUAD $0x0000000000000000; LONG $0x00000000; BYTE $0x01 // .ascii 13, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001096d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001097d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001098d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001099d QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109ad QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109bd QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109cd QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109dd QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109ed QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000109fd QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, //0x00010a0d WORD $0x0000; BYTE $0x00 // .space 3, '\x00\x00\x00' + //0x00010a10 .p2align 4, 0x00 + //0x00010a10 __UnquoteTab + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, //0x00010a30 QUAD $0x0000000000220000; QUAD $0x2f00000000000000 // .ascii 16, '\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, //0x00010a60 QUAD $0x0000000000000000; QUAD $0x0000005c00000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00' + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, //0x00010a70 QUAD $0x000c000000080000; QUAD $0x000a000000000000 // .ascii 16, '\x00\x00\x08\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\n\x00' + 0x00, 0x00, 0x0d, 0x00, 0x09, 0xff, //0x00010a80 LONG $0x000d0000; WORD $0xff09 // .ascii 6, '\x00\x00\r\x00\t\xff' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a86 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010a96 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010aa6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ab6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ac6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ad6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ae6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010af6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b06 QUAD $0x0000000000000000; WORD $0x0000 // .space 10, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x00010b10 .p2align 4, 0x00 + //0x00010b10 __HtmlQuoteTab + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010b90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ba0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010bb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010bc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010bd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010be0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010bf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010c90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ca0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010cb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010cc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010cd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ce0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010cf0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d70 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x32, 0x36, 0x00, 0x00, //0x00010d78 QUAD $0x000036323030755c // .asciz 8, '\\u0026\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010d90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010da0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010db0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010dc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010dd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010de0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010df0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010e90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ea0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010eb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ec0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ed0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x33, 0x63, 0x00, 0x00, //0x00010ed8 QUAD $0x000063333030755c // .asciz 8, '\\u003c\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ee0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ef0 .quad 6 + 0x5c, 0x75, 0x30, 0x30, 0x33, 0x65, 0x00, 0x00, //0x00010ef8 QUAD $0x000065333030755c // .asciz 8, '\\u003e\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010f90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fb0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fc0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fd0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010fe0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00010ff0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011000 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011010 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011020 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011030 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011040 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011050 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011060 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011070 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011080 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011090 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000110f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011100 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011110 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011120 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011130 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011140 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011150 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011160 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011170 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011180 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011190 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000111f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011200 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011210 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011220 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011230 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011240 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011250 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011260 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011270 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011280 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011290 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000112f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011300 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011310 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011320 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011330 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011340 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011350 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011360 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011370 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011380 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011390 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000113f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011400 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011410 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011420 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011430 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011440 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011450 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011460 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011470 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011480 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011490 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000114f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011500 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011510 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011520 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011530 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011540 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011550 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011560 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011570 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011580 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011590 .quad 6 + 0x5c, 0x75, 0x32, 0x30, 0x32, 0x38, 0x00, 0x00, //0x00011598 QUAD $0x000038323032755c // .asciz 8, '\\u2028\x00\x00' + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115a0 .quad 6 + 0x5c, 0x75, 0x32, 0x30, 0x32, 0x39, 0x00, 0x00, //0x000115a8 QUAD $0x000039323032755c // .asciz 8, '\\u2029\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000115f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011600 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011610 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011620 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011630 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011640 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011650 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011660 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011670 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011680 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011690 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000116f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011700 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011710 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011720 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011730 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011740 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011750 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011760 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011770 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011780 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011790 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000117f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011800 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011810 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011820 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011830 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011840 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011850 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011860 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011870 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011880 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011890 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000118f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011900 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011910 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011920 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011930 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011940 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011950 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011960 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011970 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011980 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011990 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119a0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119b0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119c0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119d0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119e0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000119f0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a70 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011a90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011aa0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ab0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ac0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ad0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ae0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011af0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + //0x00011b10 .p2align 4, 0x00 + //0x00011b10 _LSHIFT_TAB + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b20 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b70 QUAD $0x0000000000000000 // .space 8, '\x00\x00\x00\x00\x00\x00\x00\x00' + 0x01, 0x00, 0x00, 0x00, //0x00011b78 .long 1 + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b7c QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b8c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011b9c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011bac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011bbc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011bcc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011bdc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x01, 0x00, 0x00, 0x00, //0x00011be0 .long 1 + 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011be4 QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011bf4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c04 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c14 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c24 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c34 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011c44 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x01, 0x00, 0x00, 0x00, //0x00011c48 .long 1 + 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c4c QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c5c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c6c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c7c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c8c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011c9c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011cac LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, //0x00011cb0 .long 2 + 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011cb4 QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011cc4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011cd4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ce4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011cf4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d04 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011d14 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, //0x00011d18 .long 2 + 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d1c QUAD $0x0000000035323133; QUAD $0x0000000000000000 // .asciz 16, '3125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d2c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d4c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d5c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d6c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011d7c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x02, 0x00, 0x00, 0x00, //0x00011d80 .long 2 + 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d84 QUAD $0x0000003532363531; QUAD $0x0000000000000000 // .asciz 16, '15625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011d94 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011da4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011db4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011dc4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011dd4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011de4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x03, 0x00, 0x00, 0x00, //0x00011de8 .long 3 + 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011dec QUAD $0x0000003532313837; QUAD $0x0000000000000000 // .asciz 16, '78125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011dfc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e0c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e1c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e2c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011e4c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x03, 0x00, 0x00, 0x00, //0x00011e50 .long 3 + 0x33, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e54 QUAD $0x0000353236303933; QUAD $0x0000000000000000 // .asciz 16, '390625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e64 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e74 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e84 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011e94 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ea4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011eb4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x03, 0x00, 0x00, 0x00, //0x00011eb8 .long 3 + 0x31, 0x39, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ebc QUAD $0x0035323133353931; QUAD $0x0000000000000000 // .asciz 16, '1953125\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ecc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011edc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011eec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011efc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f0c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011f1c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, //0x00011f20 .long 4 + 0x39, 0x37, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f24 QUAD $0x0035323635363739; QUAD $0x0000000000000000 // .asciz 16, '9765625\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f34 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f44 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f54 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f64 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f74 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011f84 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, //0x00011f88 .long 4 + 0x34, 0x38, 0x38, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f8c QUAD $0x3532313832383834; QUAD $0x0000000000000000 // .asciz 16, '48828125\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011f9c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011fac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011fbc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011fcc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011fdc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00011fec LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, //0x00011ff0 .long 4 + 0x32, 0x34, 0x34, 0x31, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00011ff4 QUAD $0x3236303431343432; QUAD $0x0000000000000035 // .asciz 16, '244140625\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012004 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012014 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012024 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012034 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012044 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012054 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x04, 0x00, 0x00, 0x00, //0x00012058 .long 4 + 0x31, 0x32, 0x32, 0x30, 0x37, 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001205c QUAD $0x3133303730323231; QUAD $0x0000000000003532 // .asciz 16, '1220703125\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001206c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001207c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001208c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001209c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000120bc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x05, 0x00, 0x00, 0x00, //0x000120c0 .long 5 + 0x36, 0x31, 0x30, 0x33, 0x35, 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120c4 QUAD $0x3635313533303136; QUAD $0x0000000000003532 // .asciz 16, '6103515625\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120d4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000120f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012104 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012114 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012124 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x05, 0x00, 0x00, 0x00, //0x00012128 .long 5 + 0x33, 0x30, 0x35, 0x31, 0x37, 0x35, 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001212c QUAD $0x3837353731353033; QUAD $0x0000000000353231 // .asciz 16, '30517578125\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001213c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001214c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001215c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001216c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001217c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001218c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x05, 0x00, 0x00, 0x00, //0x00012190 .long 5 + 0x31, 0x35, 0x32, 0x35, 0x38, 0x37, 0x38, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, //0x00012194 QUAD $0x3938373835323531; QUAD $0x0000000035323630 // .asciz 16, '152587890625\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121a4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121c4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121d4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000121e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000121f4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, //0x000121f8 .long 6 + 0x37, 0x36, 0x32, 0x39, 0x33, 0x39, 0x34, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, //0x000121fc QUAD $0x3534393339323637; QUAD $0x0000000035323133 // .asciz 16, '762939453125\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001220c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001221c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001222c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001223c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001224c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001225c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, //0x00012260 .long 6 + 0x33, 0x38, 0x31, 0x34, 0x36, 0x39, 0x37, 0x32, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, //0x00012264 QUAD $0x3237393634313833; QUAD $0x0000003532363536 // .asciz 16, '3814697265625\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012274 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012284 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012294 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122a4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000122c4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x06, 0x00, 0x00, 0x00, //0x000122c8 .long 6 + 0x31, 0x39, 0x30, 0x37, 0x33, 0x34, 0x38, 0x36, 0x33, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, //0x000122cc QUAD $0x3638343337303931; QUAD $0x0000353231383233 // .asciz 16, '19073486328125\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122ec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000122fc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001230c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001231c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001232c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, //0x00012330 .long 7 + 0x39, 0x35, 0x33, 0x36, 0x37, 0x34, 0x33, 0x31, 0x36, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, //0x00012334 QUAD $0x3133343736333539; QUAD $0x0000353236303436 // .asciz 16, '95367431640625\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012344 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012354 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012364 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012374 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012384 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012394 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, //0x00012398 .long 7 + 0x34, 0x37, 0x36, 0x38, 0x33, 0x37, 0x31, 0x35, 0x38, 0x32, 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, //0x0001239c QUAD $0x3531373338363734; QUAD $0x0035323133303238 // .asciz 16, '476837158203125\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000123ec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000123fc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, //0x00012400 .long 7 + 0x32, 0x33, 0x38, 0x34, 0x31, 0x38, 0x35, 0x37, 0x39, 0x31, 0x30, 0x31, 0x35, 0x36, 0x32, 0x35, //0x00012404 QUAD $0x3735383134383332; QUAD $0x3532363531303139 // .asciz 16, '2384185791015625' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012414 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012424 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012434 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012444 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012454 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012464 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x07, 0x00, 0x00, 0x00, //0x00012468 .long 7 + 0x31, 0x31, 0x39, 0x32, 0x30, 0x39, 0x32, 0x38, 0x39, 0x35, 0x35, 0x30, 0x37, 0x38, 0x31, 0x32, //0x0001246c QUAD $0x3832393032393131; QUAD $0x3231383730353539 // .asciz 16, '1192092895507812' + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001247c QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001248c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001249c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000124cc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x08, 0x00, 0x00, 0x00, //0x000124d0 .long 8 + 0x35, 0x39, 0x36, 0x30, 0x34, 0x36, 0x34, 0x34, 0x37, 0x37, 0x35, 0x33, 0x39, 0x30, 0x36, 0x32, //0x000124d4 QUAD $0x3434363430363935; QUAD $0x3236303933353737 // .asciz 16, '5960464477539062' + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124e4 QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000124f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012504 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012514 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012524 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012534 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x08, 0x00, 0x00, 0x00, //0x00012538 .long 8 + 0x32, 0x39, 0x38, 0x30, 0x32, 0x33, 0x32, 0x32, 0x33, 0x38, 0x37, 0x36, 0x39, 0x35, 0x33, 0x31, //0x0001253c QUAD $0x3232333230383932; QUAD $0x3133353936373833 // .asciz 16, '2980232238769531' + 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001254c QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001255c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001256c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001257c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001258c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001259c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x08, 0x00, 0x00, 0x00, //0x000125a0 .long 8 + 0x31, 0x34, 0x39, 0x30, 0x31, 0x31, 0x36, 0x31, 0x31, 0x39, 0x33, 0x38, 0x34, 0x37, 0x36, 0x35, //0x000125a4 QUAD $0x3136313130393431; QUAD $0x3536373438333931 // .asciz 16, '1490116119384765' + 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125b4 QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125c4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125d4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000125f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012604 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x09, 0x00, 0x00, 0x00, //0x00012608 .long 9 + 0x37, 0x34, 0x35, 0x30, 0x35, 0x38, 0x30, 0x35, 0x39, 0x36, 0x39, 0x32, 0x33, 0x38, 0x32, 0x38, //0x0001260c QUAD $0x3530383530353437; QUAD $0x3832383332393639 // .asciz 16, '7450580596923828' + 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001261c QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001262c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001263c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001264c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001265c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001266c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x09, 0x00, 0x00, 0x00, //0x00012670 .long 9 + 0x33, 0x37, 0x32, 0x35, 0x32, 0x39, 0x30, 0x32, 0x39, 0x38, 0x34, 0x36, 0x31, 0x39, 0x31, 0x34, //0x00012674 QUAD $0x3230393235323733; QUAD $0x3431393136343839 // .asciz 16, '3725290298461914' + 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012684 QUAD $0x0000000035323630; QUAD $0x0000000000000000 // .asciz 16, '0625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012694 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126a4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126c4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000126d4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x09, 0x00, 0x00, 0x00, //0x000126d8 .long 9 + 0x31, 0x38, 0x36, 0x32, 0x36, 0x34, 0x35, 0x31, 0x34, 0x39, 0x32, 0x33, 0x30, 0x39, 0x35, 0x37, //0x000126dc QUAD $0x3135343632363831; QUAD $0x3735393033323934 // .asciz 16, '1862645149230957' + 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126ec QUAD $0x0000003532313330; QUAD $0x0000000000000000 // .asciz 16, '03125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000126fc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001270c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001271c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001272c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001273c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0a, 0x00, 0x00, 0x00, //0x00012740 .long 10 + 0x39, 0x33, 0x31, 0x33, 0x32, 0x32, 0x35, 0x37, 0x34, 0x36, 0x31, 0x35, 0x34, 0x37, 0x38, 0x35, //0x00012744 QUAD $0x3735323233313339; QUAD $0x3538373435313634 // .asciz 16, '9313225746154785' + 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012754 QUAD $0x0000003532363531; QUAD $0x0000000000000000 // .asciz 16, '15625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012764 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012774 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012784 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012794 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000127a4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0a, 0x00, 0x00, 0x00, //0x000127a8 .long 10 + 0x34, 0x36, 0x35, 0x36, 0x36, 0x31, 0x32, 0x38, 0x37, 0x33, 0x30, 0x37, 0x37, 0x33, 0x39, 0x32, //0x000127ac QUAD $0x3832313636353634; QUAD $0x3239333737303337 // .asciz 16, '4656612873077392' + 0x35, 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127bc QUAD $0x0000353231383735; QUAD $0x0000000000000000 // .asciz 16, '578125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127ec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000127fc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001280c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0a, 0x00, 0x00, 0x00, //0x00012810 .long 10 + 0x32, 0x33, 0x32, 0x38, 0x33, 0x30, 0x36, 0x34, 0x33, 0x36, 0x35, 0x33, 0x38, 0x36, 0x39, 0x36, //0x00012814 QUAD $0x3436303338323332; QUAD $0x3639363833353633 // .asciz 16, '2328306436538696' + 0x32, 0x38, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012824 QUAD $0x0035323630393832; QUAD $0x0000000000000000 // .asciz 16, '2890625\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012834 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012844 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012854 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012864 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012874 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0a, 0x00, 0x00, 0x00, //0x00012878 .long 10 + 0x31, 0x31, 0x36, 0x34, 0x31, 0x35, 0x33, 0x32, 0x31, 0x38, 0x32, 0x36, 0x39, 0x33, 0x34, 0x38, //0x0001287c QUAD $0x3233353134363131; QUAD $0x3834333936323831 // .asciz 16, '1164153218269348' + 0x31, 0x34, 0x34, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001288c QUAD $0x3532313335343431; QUAD $0x0000000000000000 // .asciz 16, '14453125\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001289c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000128ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000128bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000128cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000128dc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0b, 0x00, 0x00, 0x00, //0x000128e0 .long 11 + 0x35, 0x38, 0x32, 0x30, 0x37, 0x36, 0x36, 0x30, 0x39, 0x31, 0x33, 0x34, 0x36, 0x37, 0x34, 0x30, //0x000128e4 QUAD $0x3036363730323835; QUAD $0x3034373634333139 // .asciz 16, '5820766091346740' + 0x37, 0x32, 0x32, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000128f4 QUAD $0x3532363536323237; QUAD $0x0000000000000000 // .asciz 16, '72265625\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012904 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012914 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012924 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012934 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012944 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0b, 0x00, 0x00, 0x00, //0x00012948 .long 11 + 0x32, 0x39, 0x31, 0x30, 0x33, 0x38, 0x33, 0x30, 0x34, 0x35, 0x36, 0x37, 0x33, 0x33, 0x37, 0x30, //0x0001294c QUAD $0x3033383330313932; QUAD $0x3037333337363534 // .asciz 16, '2910383045673370' + 0x33, 0x36, 0x31, 0x33, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001295c QUAD $0x3231383233313633; QUAD $0x0000000000000035 // .asciz 16, '361328125\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001296c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001297c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001298c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001299c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000129ac LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0b, 0x00, 0x00, 0x00, //0x000129b0 .long 11 + 0x31, 0x34, 0x35, 0x35, 0x31, 0x39, 0x31, 0x35, 0x32, 0x32, 0x38, 0x33, 0x36, 0x36, 0x38, 0x35, //0x000129b4 QUAD $0x3531393135353431; QUAD $0x3538363633383232 // .asciz 16, '1455191522836685' + 0x31, 0x38, 0x30, 0x36, 0x36, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129c4 QUAD $0x3630343636303831; QUAD $0x0000000000003532 // .asciz 16, '1806640625\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129d4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000129f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a04 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012a14 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0c, 0x00, 0x00, 0x00, //0x00012a18 .long 12 + 0x37, 0x32, 0x37, 0x35, 0x39, 0x35, 0x37, 0x36, 0x31, 0x34, 0x31, 0x38, 0x33, 0x34, 0x32, 0x35, //0x00012a1c QUAD $0x3637353935373237; QUAD $0x3532343338313431 // .asciz 16, '7275957614183425' + 0x39, 0x30, 0x33, 0x33, 0x32, 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a2c QUAD $0x3133303233333039; QUAD $0x0000000000003532 // .asciz 16, '9033203125\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a4c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a5c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a6c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012a7c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0c, 0x00, 0x00, 0x00, //0x00012a80 .long 12 + 0x33, 0x36, 0x33, 0x37, 0x39, 0x37, 0x38, 0x38, 0x30, 0x37, 0x30, 0x39, 0x31, 0x37, 0x31, 0x32, //0x00012a84 QUAD $0x3838373937333633; QUAD $0x3231373139303730 // .asciz 16, '3637978807091712' + 0x39, 0x35, 0x31, 0x36, 0x36, 0x30, 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012a94 QUAD $0x3531303636313539; QUAD $0x0000000000353236 // .asciz 16, '95166015625\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012aa4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ab4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ac4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ad4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012ae4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0c, 0x00, 0x00, 0x00, //0x00012ae8 .long 12 + 0x31, 0x38, 0x31, 0x38, 0x39, 0x38, 0x39, 0x34, 0x30, 0x33, 0x35, 0x34, 0x35, 0x38, 0x35, 0x36, //0x00012aec QUAD $0x3439383938313831; QUAD $0x3635383534353330 // .asciz 16, '1818989403545856' + 0x34, 0x37, 0x35, 0x38, 0x33, 0x30, 0x30, 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, //0x00012afc QUAD $0x3730303338353734; QUAD $0x0000000035323138 // .asciz 16, '475830078125\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b0c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b1c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b2c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012b4c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0d, 0x00, 0x00, 0x00, //0x00012b50 .long 13 + 0x39, 0x30, 0x39, 0x34, 0x39, 0x34, 0x37, 0x30, 0x31, 0x37, 0x37, 0x32, 0x39, 0x32, 0x38, 0x32, //0x00012b54 QUAD $0x3037343934393039; QUAD $0x3238323932373731 // .asciz 16, '9094947017729282' + 0x33, 0x37, 0x39, 0x31, 0x35, 0x30, 0x33, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, //0x00012b64 QUAD $0x3933303531393733; QUAD $0x0000000035323630 // .asciz 16, '379150390625\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b74 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b84 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012b94 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ba4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012bb4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0d, 0x00, 0x00, 0x00, //0x00012bb8 .long 13 + 0x34, 0x35, 0x34, 0x37, 0x34, 0x37, 0x33, 0x35, 0x30, 0x38, 0x38, 0x36, 0x34, 0x36, 0x34, 0x31, //0x00012bbc QUAD $0x3533373437343534; QUAD $0x3134363436383830 // .asciz 16, '4547473508864641' + 0x31, 0x38, 0x39, 0x35, 0x37, 0x35, 0x31, 0x39, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, //0x00012bcc QUAD $0x3931353735393831; QUAD $0x0000003532313335 // .asciz 16, '1895751953125\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bdc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012bfc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c0c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012c1c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0d, 0x00, 0x00, 0x00, //0x00012c20 .long 13 + 0x32, 0x32, 0x37, 0x33, 0x37, 0x33, 0x36, 0x37, 0x35, 0x34, 0x34, 0x33, 0x32, 0x33, 0x32, 0x30, //0x00012c24 QUAD $0x3736333733373232; QUAD $0x3032333233343435 // .asciz 16, '2273736754432320' + 0x35, 0x39, 0x34, 0x37, 0x38, 0x37, 0x35, 0x39, 0x37, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, //0x00012c34 QUAD $0x3935373837343935; QUAD $0x0000353236353637 // .asciz 16, '59478759765625\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c44 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c54 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c64 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012c74 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012c84 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0d, 0x00, 0x00, 0x00, //0x00012c88 .long 13 + 0x31, 0x31, 0x33, 0x36, 0x38, 0x36, 0x38, 0x33, 0x37, 0x37, 0x32, 0x31, 0x36, 0x31, 0x36, 0x30, //0x00012c8c QUAD $0x3338363836333131; QUAD $0x3036313631323737 // .asciz 16, '1136868377216160' + 0x32, 0x39, 0x37, 0x33, 0x39, 0x33, 0x37, 0x39, 0x38, 0x38, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, //0x00012c9c QUAD $0x3937333933373932; QUAD $0x0035323138323838 // .asciz 16, '297393798828125\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012cac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012cbc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ccc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012cdc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012cec LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0e, 0x00, 0x00, 0x00, //0x00012cf0 .long 14 + 0x35, 0x36, 0x38, 0x34, 0x33, 0x34, 0x31, 0x38, 0x38, 0x36, 0x30, 0x38, 0x30, 0x38, 0x30, 0x31, //0x00012cf4 QUAD $0x3831343334383635; QUAD $0x3130383038303638 // .asciz 16, '5684341886080801' + 0x34, 0x38, 0x36, 0x39, 0x36, 0x38, 0x39, 0x39, 0x34, 0x31, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, //0x00012d04 QUAD $0x3939383639363834; QUAD $0x0035323630343134 // .asciz 16, '486968994140625\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d14 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d24 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d34 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d44 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012d54 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0e, 0x00, 0x00, 0x00, //0x00012d58 .long 14 + 0x32, 0x38, 0x34, 0x32, 0x31, 0x37, 0x30, 0x39, 0x34, 0x33, 0x30, 0x34, 0x30, 0x34, 0x30, 0x30, //0x00012d5c QUAD $0x3930373132343832; QUAD $0x3030343034303334 // .asciz 16, '2842170943040400' + 0x37, 0x34, 0x33, 0x34, 0x38, 0x34, 0x34, 0x39, 0x37, 0x30, 0x37, 0x30, 0x33, 0x31, 0x32, 0x35, //0x00012d6c QUAD $0x3934343834333437; QUAD $0x3532313330373037 // .asciz 16, '7434844970703125' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d7c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d8c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012d9c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012dac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012dbc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0e, 0x00, 0x00, 0x00, //0x00012dc0 .long 14 + 0x31, 0x34, 0x32, 0x31, 0x30, 0x38, 0x35, 0x34, 0x37, 0x31, 0x35, 0x32, 0x30, 0x32, 0x30, 0x30, //0x00012dc4 QUAD $0x3435383031323431; QUAD $0x3030323032353137 // .asciz 16, '1421085471520200' + 0x33, 0x37, 0x31, 0x37, 0x34, 0x32, 0x32, 0x34, 0x38, 0x35, 0x33, 0x35, 0x31, 0x35, 0x36, 0x32, //0x00012dd4 QUAD $0x3432323437313733; QUAD $0x3236353135333538 // .asciz 16, '3717422485351562' + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012de4 QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012df4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e04 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e14 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012e24 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0f, 0x00, 0x00, 0x00, //0x00012e28 .long 15 + 0x37, 0x31, 0x30, 0x35, 0x34, 0x32, 0x37, 0x33, 0x35, 0x37, 0x36, 0x30, 0x31, 0x30, 0x30, 0x31, //0x00012e2c QUAD $0x3337323435303137; QUAD $0x3130303130363735 // .asciz 16, '7105427357601001' + 0x38, 0x35, 0x38, 0x37, 0x31, 0x31, 0x32, 0x34, 0x32, 0x36, 0x37, 0x35, 0x37, 0x38, 0x31, 0x32, //0x00012e3c QUAD $0x3432313137383538; QUAD $0x3231383735373632 // .asciz 16, '8587112426757812' + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e4c QUAD $0x0000000000000035; QUAD $0x0000000000000000 // .asciz 16, '5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e5c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e6c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012e7c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012e8c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0f, 0x00, 0x00, 0x00, //0x00012e90 .long 15 + 0x33, 0x35, 0x35, 0x32, 0x37, 0x31, 0x33, 0x36, 0x37, 0x38, 0x38, 0x30, 0x30, 0x35, 0x30, 0x30, //0x00012e94 QUAD $0x3633313732353533; QUAD $0x3030353030383837 // .asciz 16, '3552713678800500' + 0x39, 0x32, 0x39, 0x33, 0x35, 0x35, 0x36, 0x32, 0x31, 0x33, 0x33, 0x37, 0x38, 0x39, 0x30, 0x36, //0x00012ea4 QUAD $0x3236353533393239; QUAD $0x3630393837333331 // .asciz 16, '9293556213378906' + 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012eb4 QUAD $0x0000000000003532; QUAD $0x0000000000000000 // .asciz 16, '25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ec4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ed4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ee4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012ef4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x0f, 0x00, 0x00, 0x00, //0x00012ef8 .long 15 + 0x31, 0x37, 0x37, 0x36, 0x33, 0x35, 0x36, 0x38, 0x33, 0x39, 0x34, 0x30, 0x30, 0x32, 0x35, 0x30, //0x00012efc QUAD $0x3836353336373731; QUAD $0x3035323030343933 // .asciz 16, '1776356839400250' + 0x34, 0x36, 0x34, 0x36, 0x37, 0x37, 0x38, 0x31, 0x30, 0x36, 0x36, 0x38, 0x39, 0x34, 0x35, 0x33, //0x00012f0c QUAD $0x3138373736343634; QUAD $0x3335343938363630 // .asciz 16, '4646778106689453' + 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f1c QUAD $0x0000000000353231; QUAD $0x0000000000000000 // .asciz 16, '125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f2c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f3c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f4c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012f5c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x10, 0x00, 0x00, 0x00, //0x00012f60 .long 16 + 0x38, 0x38, 0x38, 0x31, 0x37, 0x38, 0x34, 0x31, 0x39, 0x37, 0x30, 0x30, 0x31, 0x32, 0x35, 0x32, //0x00012f64 QUAD $0x3134383731383838; QUAD $0x3235323130303739 // .asciz 16, '8881784197001252' + 0x33, 0x32, 0x33, 0x33, 0x38, 0x39, 0x30, 0x35, 0x33, 0x33, 0x34, 0x34, 0x37, 0x32, 0x36, 0x35, //0x00012f74 QUAD $0x3530393833333233; QUAD $0x3536323734343333 // .asciz 16, '3233890533447265' + 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f84 QUAD $0x0000000000353236; QUAD $0x0000000000000000 // .asciz 16, '625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012f94 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012fa4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012fb4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00012fc4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x10, 0x00, 0x00, 0x00, //0x00012fc8 .long 16 + 0x34, 0x34, 0x34, 0x30, 0x38, 0x39, 0x32, 0x30, 0x39, 0x38, 0x35, 0x30, 0x30, 0x36, 0x32, 0x36, //0x00012fcc QUAD $0x3032393830343434; QUAD $0x3632363030353839 // .asciz 16, '4440892098500626' + 0x31, 0x36, 0x31, 0x36, 0x39, 0x34, 0x35, 0x32, 0x36, 0x36, 0x37, 0x32, 0x33, 0x36, 0x33, 0x32, //0x00012fdc QUAD $0x3235343936313631; QUAD $0x3233363332373636 // .asciz 16, '1616945266723632' + 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012fec QUAD $0x0000000035323138; QUAD $0x0000000000000000 // .asciz 16, '8125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00012ffc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001300c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001301c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001302c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x10, 0x00, 0x00, 0x00, //0x00013030 .long 16 + 0x32, 0x32, 0x32, 0x30, 0x34, 0x34, 0x36, 0x30, 0x34, 0x39, 0x32, 0x35, 0x30, 0x33, 0x31, 0x33, //0x00013034 QUAD $0x3036343430323232; QUAD $0x3331333035323934 // .asciz 16, '2220446049250313' + 0x30, 0x38, 0x30, 0x38, 0x34, 0x37, 0x32, 0x36, 0x33, 0x33, 0x33, 0x36, 0x31, 0x38, 0x31, 0x36, //0x00013044 QUAD $0x3632373438303830; QUAD $0x3631383136333333 // .asciz 16, '0808472633361816' + 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013054 QUAD $0x0000003532363034; QUAD $0x0000000000000000 // .asciz 16, '40625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013064 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013074 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013084 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013094 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x10, 0x00, 0x00, 0x00, //0x00013098 .long 16 + 0x31, 0x31, 0x31, 0x30, 0x32, 0x32, 0x33, 0x30, 0x32, 0x34, 0x36, 0x32, 0x35, 0x31, 0x35, 0x36, //0x0001309c QUAD $0x3033323230313131; QUAD $0x3635313532363432 // .asciz 16, '1110223024625156' + 0x35, 0x34, 0x30, 0x34, 0x32, 0x33, 0x36, 0x33, 0x31, 0x36, 0x36, 0x38, 0x30, 0x39, 0x30, 0x38, //0x000130ac QUAD $0x3336333234303435; QUAD $0x3830393038363631 // .asciz 16, '5404236316680908' + 0x32, 0x30, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000130bc QUAD $0x0000353231333032; QUAD $0x0000000000000000 // .asciz 16, '203125\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000130cc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000130dc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000130ec QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000130fc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x11, 0x00, 0x00, 0x00, //0x00013100 .long 17 + 0x35, 0x35, 0x35, 0x31, 0x31, 0x31, 0x35, 0x31, 0x32, 0x33, 0x31, 0x32, 0x35, 0x37, 0x38, 0x32, //0x00013104 QUAD $0x3135313131353535; QUAD $0x3238373532313332 // .asciz 16, '5551115123125782' + 0x37, 0x30, 0x32, 0x31, 0x31, 0x38, 0x31, 0x35, 0x38, 0x33, 0x34, 0x30, 0x34, 0x35, 0x34, 0x31, //0x00013114 QUAD $0x3531383131323037; QUAD $0x3134353430343338 // .asciz 16, '7021181583404541' + 0x30, 0x31, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013124 QUAD $0x0000353236353130; QUAD $0x0000000000000000 // .asciz 16, '015625\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013134 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013144 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013154 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013164 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x11, 0x00, 0x00, 0x00, //0x00013168 .long 17 + 0x32, 0x37, 0x37, 0x35, 0x35, 0x35, 0x37, 0x35, 0x36, 0x31, 0x35, 0x36, 0x32, 0x38, 0x39, 0x31, //0x0001316c QUAD $0x3537353535373732; QUAD $0x3139383236353136 // .asciz 16, '2775557561562891' + 0x33, 0x35, 0x31, 0x30, 0x35, 0x39, 0x30, 0x37, 0x39, 0x31, 0x37, 0x30, 0x32, 0x32, 0x37, 0x30, //0x0001317c QUAD $0x3730393530313533; QUAD $0x3037323230373139 // .asciz 16, '3510590791702270' + 0x35, 0x30, 0x37, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001318c QUAD $0x0035323138373035; QUAD $0x0000000000000000 // .asciz 16, '5078125\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001319c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000131ac QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000131bc QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000131cc LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x11, 0x00, 0x00, 0x00, //0x000131d0 .long 17 + 0x31, 0x33, 0x38, 0x37, 0x37, 0x37, 0x38, 0x37, 0x38, 0x30, 0x37, 0x38, 0x31, 0x34, 0x34, 0x35, //0x000131d4 QUAD $0x3738373737383331; QUAD $0x3534343138373038 // .asciz 16, '1387778780781445' + 0x36, 0x37, 0x35, 0x35, 0x32, 0x39, 0x35, 0x33, 0x39, 0x35, 0x38, 0x35, 0x31, 0x31, 0x33, 0x35, //0x000131e4 QUAD $0x3335393235353736; QUAD $0x3533313135383539 // .asciz 16, '6755295395851135' + 0x32, 0x35, 0x33, 0x39, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000131f4 QUAD $0x3532363039333532; QUAD $0x0000000000000000 // .asciz 16, '25390625\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013204 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013214 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013224 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013234 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x12, 0x00, 0x00, 0x00, //0x00013238 .long 18 + 0x36, 0x39, 0x33, 0x38, 0x38, 0x39, 0x33, 0x39, 0x30, 0x33, 0x39, 0x30, 0x37, 0x32, 0x32, 0x38, //0x0001323c QUAD $0x3933393838333936; QUAD $0x3832323730393330 // .asciz 16, '6938893903907228' + 0x33, 0x37, 0x37, 0x36, 0x34, 0x37, 0x36, 0x39, 0x37, 0x39, 0x32, 0x35, 0x35, 0x36, 0x37, 0x36, //0x0001324c QUAD $0x3936373436373733; QUAD $0x3637363535323937 // .asciz 16, '3776476979255676' + 0x32, 0x36, 0x39, 0x35, 0x33, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001325c QUAD $0x3532313335393632; QUAD $0x0000000000000000 // .asciz 16, '26953125\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001326c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001327c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001328c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001329c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x12, 0x00, 0x00, 0x00, //0x000132a0 .long 18 + 0x33, 0x34, 0x36, 0x39, 0x34, 0x34, 0x36, 0x39, 0x35, 0x31, 0x39, 0x35, 0x33, 0x36, 0x31, 0x34, //0x000132a4 QUAD $0x3936343439363433; QUAD $0x3431363335393135 // .asciz 16, '3469446951953614' + 0x31, 0x38, 0x38, 0x38, 0x32, 0x33, 0x38, 0x34, 0x38, 0x39, 0x36, 0x32, 0x37, 0x38, 0x33, 0x38, //0x000132b4 QUAD $0x3438333238383831; QUAD $0x3833383732363938 // .asciz 16, '1888238489627838' + 0x31, 0x33, 0x34, 0x37, 0x36, 0x35, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000132c4 QUAD $0x3236353637343331; QUAD $0x0000000000000035 // .asciz 16, '134765625\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000132d4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000132e4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000132f4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x00013304 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x12, 0x00, 0x00, 0x00, //0x00013308 .long 18 + 0x31, 0x37, 0x33, 0x34, 0x37, 0x32, 0x33, 0x34, 0x37, 0x35, 0x39, 0x37, 0x36, 0x38, 0x30, 0x37, //0x0001330c QUAD $0x3433323734333731; QUAD $0x3730383637393537 // .asciz 16, '1734723475976807' + 0x30, 0x39, 0x34, 0x34, 0x31, 0x31, 0x39, 0x32, 0x34, 0x34, 0x38, 0x31, 0x33, 0x39, 0x31, 0x39, //0x0001331c QUAD $0x3239313134343930; QUAD $0x3931393331383434 // .asciz 16, '0944119244813919' + 0x30, 0x36, 0x37, 0x33, 0x38, 0x32, 0x38, 0x31, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001332c QUAD $0x3138323833373630; QUAD $0x0000000000003532 // .asciz 16, '0673828125\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001333c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001334c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0001335c QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x0001336c LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x13, 0x00, 0x00, 0x00, //0x00013370 .long 19 + 0x38, 0x36, 0x37, 0x33, 0x36, 0x31, 0x37, 0x33, 0x37, 0x39, 0x38, 0x38, 0x34, 0x30, 0x33, 0x35, //0x00013374 QUAD $0x3337313633373638; QUAD $0x3533303438383937 // .asciz 16, '8673617379884035' + 0x34, 0x37, 0x32, 0x30, 0x35, 0x39, 0x36, 0x32, 0x32, 0x34, 0x30, 0x36, 0x39, 0x35, 0x39, 0x35, //0x00013384 QUAD $0x3236393530323734; QUAD $0x3539353936303432 // .asciz 16, '4720596224069595' + 0x33, 0x33, 0x36, 0x39, 0x31, 0x34, 0x30, 0x36, 0x32, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013394 QUAD $0x3630343139363333; QUAD $0x0000000000003532 // .asciz 16, '3369140625\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000133a4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000133b4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000133c4 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .asciz 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, //0x000133d4 LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000133d8 .p2align 4, 0x00 + //0x000133e0 _P10_TAB + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, //0x000133e0 .quad 4607182418800017408 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, //0x000133e8 .quad 4621819117588971520 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, //0x000133f0 .quad 4636737291354636288 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x8f, 0x40, //0x000133f8 .quad 4652007308841189376 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc3, 0x40, //0x00013400 .quad 4666723172467343360 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xf8, 0x40, //0x00013408 .quad 4681608360884174848 + 0x00, 0x00, 0x00, 0x00, 0x80, 0x84, 0x2e, 0x41, //0x00013410 .quad 4696837146684686336 + 0x00, 0x00, 0x00, 0x00, 0xd0, 0x12, 0x63, 0x41, //0x00013418 .quad 4711630319722168320 + 0x00, 0x00, 0x00, 0x00, 0x84, 0xd7, 0x97, 0x41, //0x00013420 .quad 4726483295884279808 + 0x00, 0x00, 0x00, 0x00, 0x65, 0xcd, 0xcd, 0x41, //0x00013428 .quad 4741671816366391296 + 0x00, 0x00, 0x00, 0x20, 0x5f, 0xa0, 0x02, 0x42, //0x00013430 .quad 4756540486875873280 + 0x00, 0x00, 0x00, 0xe8, 0x76, 0x48, 0x37, 0x42, //0x00013438 .quad 4771362005757984768 + 0x00, 0x00, 0x00, 0xa2, 0x94, 0x1a, 0x6d, 0x42, //0x00013440 .quad 4786511204640096256 + 0x00, 0x00, 0x40, 0xe5, 0x9c, 0x30, 0xa2, 0x42, //0x00013448 .quad 4801453603149578240 + 0x00, 0x00, 0x90, 0x1e, 0xc4, 0xbc, 0xd6, 0x42, //0x00013450 .quad 4816244402031689728 + 0x00, 0x00, 0x34, 0x26, 0xf5, 0x6b, 0x0c, 0x43, //0x00013458 .quad 4831355200913801216 + 0x00, 0x80, 0xe0, 0x37, 0x79, 0xc3, 0x41, 0x43, //0x00013460 .quad 4846369599423283200 + 0x00, 0xa0, 0xd8, 0x85, 0x57, 0x34, 0x76, 0x43, //0x00013468 .quad 4861130398305394688 + 0x00, 0xc8, 0x4e, 0x67, 0x6d, 0xc1, 0xab, 0x43, //0x00013470 .quad 4876203697187506176 + 0x00, 0x3d, 0x91, 0x60, 0xe4, 0x58, 0xe1, 0x43, //0x00013478 .quad 4891288408196988160 + 0x40, 0x8c, 0xb5, 0x78, 0x1d, 0xaf, 0x15, 0x44, //0x00013480 .quad 4906019910204099648 + 0x50, 0xef, 0xe2, 0xd6, 0xe4, 0x1a, 0x4b, 0x44, //0x00013488 .quad 4921056587992461136 + 0x92, 0xd5, 0x4d, 0x06, 0xcf, 0xf0, 0x80, 0x44, //0x00013490 .quad 4936209963552724370 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00013498 .p2align 4, 0x00 + //0x000134a0 _pow10_ceil_sig_f32.g + 0xf5, 0xfc, 0x43, 0x4b, 0x2c, 0xb3, 0xce, 0x81, //0x000134a0 .quad -9093133594791772939 + 0x32, 0xfc, 0x14, 0x5e, 0xf7, 0x5f, 0x42, 0xa2, //0x000134a8 .quad -6754730975062328270 + 0x3f, 0x3b, 0x9a, 0x35, 0xf5, 0xf7, 0xd2, 0xca, //0x000134b0 .quad -3831727700400522433 + 0x0e, 0xca, 0x00, 0x83, 0xf2, 0xb5, 0x87, 0xfd, //0x000134b8 .quad -177973607073265138 + 0x49, 0x7e, 0xe0, 0x91, 0xb7, 0xd1, 0x74, 0x9e, //0x000134c0 .quad -7028762532061872567 + 0xdb, 0x9d, 0x58, 0x76, 0x25, 0x06, 0x12, 0xc6, //0x000134c8 .quad -4174267146649952805 + 0x52, 0xc5, 0xee, 0xd3, 0xae, 0x87, 0x96, 0xf7, //0x000134d0 .quad -606147914885053102 + 0x53, 0x3b, 0x75, 0x44, 0xcd, 0x14, 0xbe, 0x9a, //0x000134d8 .quad -7296371474444240045 + 0x28, 0x8a, 0x92, 0x95, 0x00, 0x9a, 0x6d, 0xc1, //0x000134e0 .quad -4508778324627912152 + 0xb2, 0x2c, 0xf7, 0xba, 0x80, 0x00, 0xc9, 0xf1, //0x000134e8 .quad -1024286887357502286 + 0xef, 0x7b, 0xda, 0x74, 0x50, 0xa0, 0x1d, 0x97, //0x000134f0 .quad -7557708332239520785 + 0xeb, 0x1a, 0x11, 0x92, 0x64, 0x08, 0xe5, 0xbc, //0x000134f8 .quad -4835449396872013077 + 0xa6, 0x61, 0x95, 0xb6, 0x7d, 0x4a, 0x1e, 0xec, //0x00013500 .quad -1432625727662628442 + 0x08, 0x5d, 0x1d, 0x92, 0x8e, 0xee, 0x92, 0x93, //0x00013508 .quad -7812920107430224632 + 0x4a, 0xb4, 0xa4, 0x36, 0x32, 0xaa, 0x77, 0xb8, //0x00013510 .quad -5154464115860392886 + 0x5c, 0xe1, 0x4d, 0xc4, 0xbe, 0x94, 0x95, 0xe6, //0x00013518 .quad -1831394126398103204 + 0xda, 0xac, 0xb0, 0x3a, 0xf7, 0x7c, 0x1d, 0x90, //0x00013520 .quad -8062150356639896358 + 0x10, 0xd8, 0x5c, 0x09, 0x35, 0xdc, 0x24, 0xb4, //0x00013528 .quad -5466001927372482544 + 0x14, 0x0e, 0xb4, 0x4b, 0x42, 0x13, 0x2e, 0xe1, //0x00013530 .quad -2220816390788215276 + 0xcc, 0x88, 0x50, 0x6f, 0x09, 0xcc, 0xbc, 0x8c, //0x00013538 .quad -8305539271883716404 + 0xff, 0xaa, 0x24, 0xcb, 0x0b, 0xff, 0xeb, 0xaf, //0x00013540 .quad -5770238071427257601 + 0xbf, 0xd5, 0xed, 0xbd, 0xce, 0xfe, 0xe6, 0xdb, //0x00013548 .quad -2601111570856684097 + 0x98, 0xa5, 0xb4, 0x36, 0x41, 0x5f, 0x70, 0x89, //0x00013550 .quad -8543223759426509416 + 0xfd, 0xce, 0x61, 0x84, 0x11, 0x77, 0xcc, 0xab, //0x00013558 .quad -6067343680855748867 + 0xbd, 0x42, 0x7a, 0xe5, 0xd5, 0x94, 0xbf, 0xd6, //0x00013560 .quad -2972493582642298179 + 0xb6, 0x69, 0x6c, 0xaf, 0x05, 0xbd, 0x37, 0x86, //0x00013568 .quad -8775337516792518218 + 0x24, 0x84, 0x47, 0x1b, 0x47, 0xac, 0xc5, 0xa7, //0x00013570 .quad -6357485877563259868 + 0x2c, 0x65, 0x19, 0xe2, 0x58, 0x17, 0xb7, 0xd1, //0x00013578 .quad -3335171328526686932 + 0x3c, 0xdf, 0x4f, 0x8d, 0x97, 0x6e, 0x12, 0x83, //0x00013580 .quad -9002011107970261188 + 0x0b, 0xd7, 0xa3, 0x70, 0x3d, 0x0a, 0xd7, 0xa3, //0x00013588 .quad -6640827866535438581 + 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, //0x00013590 .quad -3689348814741910323 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //0x00013598 .quad -9223372036854775808 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, //0x000135a0 .quad -6917529027641081856 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, //0x000135a8 .quad -4035225266123964416 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, //0x000135b0 .quad -432345564227567616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x9c, //0x000135b8 .quad -7187745005283311616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xc3, //0x000135c0 .quad -4372995238176751616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xf4, //0x000135c8 .quad -854558029293551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x98, //0x000135d0 .quad -7451627795949551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xbc, 0xbe, //0x000135d8 .quad -4702848726509551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6b, 0xee, //0x000135e0 .quad -1266874889709551616 + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x02, 0x95, //0x000135e8 .quad -7709325833709551616 + 0x00, 0x00, 0x00, 0x00, 0x40, 0xb7, 0x43, 0xba, //0x000135f0 .quad -5024971273709551616 + 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0xd4, 0xe8, //0x000135f8 .quad -1669528073709551616 + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xe7, 0x84, 0x91, //0x00013600 .quad -7960984073709551616 + 0x00, 0x00, 0x00, 0x80, 0xf4, 0x20, 0xe6, 0xb5, //0x00013608 .quad -5339544073709551616 + 0x00, 0x00, 0x00, 0xa0, 0x31, 0xa9, 0x5f, 0xe3, //0x00013610 .quad -2062744073709551616 + 0x00, 0x00, 0x00, 0x04, 0xbf, 0xc9, 0x1b, 0x8e, //0x00013618 .quad -8206744073709551616 + 0x00, 0x00, 0x00, 0xc5, 0x2e, 0xbc, 0xa2, 0xb1, //0x00013620 .quad -5646744073709551616 + 0x00, 0x00, 0x40, 0x76, 0x3a, 0x6b, 0x0b, 0xde, //0x00013628 .quad -2446744073709551616 + 0x00, 0x00, 0xe8, 0x89, 0x04, 0x23, 0xc7, 0x8a, //0x00013630 .quad -8446744073709551616 + 0x00, 0x00, 0x62, 0xac, 0xc5, 0xeb, 0x78, 0xad, //0x00013638 .quad -5946744073709551616 + 0x00, 0x80, 0x7a, 0x17, 0xb7, 0x26, 0xd7, 0xd8, //0x00013640 .quad -2821744073709551616 + 0x00, 0x90, 0xac, 0x6e, 0x32, 0x78, 0x86, 0x87, //0x00013648 .quad -8681119073709551616 + 0x00, 0xb4, 0x57, 0x0a, 0x3f, 0x16, 0x68, 0xa9, //0x00013650 .quad -6239712823709551616 + 0x00, 0xa1, 0xed, 0xcc, 0xce, 0x1b, 0xc2, 0xd3, //0x00013658 .quad -3187955011209551616 + 0xa0, 0x84, 0x14, 0x40, 0x61, 0x51, 0x59, 0x84, //0x00013660 .quad -8910000909647051616 + 0xc8, 0xa5, 0x19, 0x90, 0xb9, 0xa5, 0x6f, 0xa5, //0x00013668 .quad -6525815118631426616 + 0x3a, 0x0f, 0x20, 0xf4, 0x27, 0x8f, 0xcb, 0xce, //0x00013670 .quad -3545582879861895366 + 0x85, 0x09, 0x94, 0xf8, 0x78, 0x39, 0x3f, 0x81, //0x00013678 .quad -9133518327554766459 + 0xe6, 0x0b, 0xb9, 0x36, 0xd7, 0x07, 0x8f, 0xa1, //0x00013680 .quad -6805211891016070170 + 0xdf, 0x4e, 0x67, 0x04, 0xcd, 0xc9, 0xf2, 0xc9, //0x00013688 .quad -3894828845342699809 + 0x97, 0x22, 0x81, 0x45, 0x40, 0x7c, 0x6f, 0xfc, //0x00013690 .quad -256850038250986857 + 0x9e, 0xb5, 0x70, 0x2b, 0xa8, 0xad, 0xc5, 0x9d, //0x00013698 .quad -7078060301547948642 + 0x06, 0xe3, 0x4c, 0x36, 0x12, 0x19, 0x37, 0xc5, //0x000136a0 .quad -4235889358507547898 + 0xc7, 0x1b, 0xe0, 0xc3, 0x56, 0xdf, 0x84, 0xf6, //0x000136a8 .quad -683175679707046969 + 0x5d, 0x11, 0x6c, 0x3a, 0x96, 0x0b, 0x13, 0x9a, //0x000136b0 .quad -7344513827457986211 + 0xb4, 0x15, 0x07, 0xc9, 0x7b, 0xce, 0x97, 0xc0, //0x000136b8 .quad -4568956265895094860 + 0x21, 0xdb, 0x48, 0xbb, 0x1a, 0xc2, 0xbd, 0xf0, //0x000136c0 .quad -1099509313941480671 + 0xf5, 0x88, 0x0d, 0xb5, 0x50, 0x99, 0x76, 0x96, //0x000136c8 .quad -7604722348854507275 + 0x32, 0xeb, 0x50, 0xe2, 0xa4, 0x3f, 0x14, 0xbc, //0x000136d0 .quad -4894216917640746190 + 0xfe, 0x25, 0xe5, 0x1a, 0x8e, 0x4f, 0x19, 0xeb, //0x000136d8 .quad -1506085128623544834 + 0xbf, 0x37, 0xcf, 0xd0, 0xb8, 0xd1, 0xef, 0x92, //0x000136e0 .quad -7858832233030797377 + 0xae, 0x05, 0x03, 0x05, 0x27, 0xc6, 0xab, 0xb7, //0x000136e8 .quad -5211854272861108818 + 0x1a, 0xc7, 0x43, 0xc6, 0xb0, 0xb7, 0x96, 0xe5, //0x000136f0 .quad -1903131822648998118 + 0x70, 0x5c, 0xea, 0x7b, 0xce, 0x32, 0x7e, 0x8f, //0x000136f8 .quad -8106986416796705680 + 0x8c, 0xf3, 0xe4, 0x1a, 0x82, 0xbf, 0x5d, 0xb3, //0x00013700 .quad -5522047002568494196 +} diff --git a/vendor/github.com/bytedance/sonic/internal/native/types/types.go b/vendor/github.com/bytedance/sonic/internal/native/types/types.go index e4e75705c7..b4afec9bad 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/types/types.go +++ b/vendor/github.com/bytedance/sonic/internal/native/types/types.go @@ -19,6 +19,7 @@ package types import ( `fmt` `sync` + `unsafe` ) type ValueType int @@ -46,15 +47,23 @@ const ( ) const ( + // for native.Unquote() flags B_DOUBLE_UNQUOTE = 0 B_UNICODE_REPLACE = 1 + + // for native.Value() flags + B_USE_NUMBER = 1 B_VALIDATE_STRING = 5 + B_ALLOW_CONTROL = 31 ) const ( F_DOUBLE_UNQUOTE = 1 << B_DOUBLE_UNQUOTE F_UNICODE_REPLACE = 1 << B_UNICODE_REPLACE + + F_USE_NUMBER = 1 << B_USE_NUMBER F_VALIDATE_STRING = 1 << B_VALIDATE_STRING + F_ALLOW_CONTROL = 1 << B_ALLOW_CONTROL ) const ( @@ -136,3 +145,18 @@ func FreeStateMachine(fsm *StateMachine) { stackPool.Put(fsm) } +const MaxDigitNums = 800 + +var digitPool = sync.Pool{ + New: func() interface{} { + return (*byte)(unsafe.Pointer(&[MaxDigitNums]byte{})) + }, +} + +func NewDbuf() *byte { + return digitPool.Get().(*byte) +} + +func FreeDbuf(p *byte) { + digitPool.Put(p) +} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/internal/resolver/stubs.go b/vendor/github.com/bytedance/sonic/internal/resolver/stubs_compat.go similarity index 98% rename from vendor/github.com/bytedance/sonic/internal/resolver/stubs.go rename to vendor/github.com/bytedance/sonic/internal/resolver/stubs_compat.go index ac27aa3d61..a3479543d1 100644 --- a/vendor/github.com/bytedance/sonic/internal/resolver/stubs.go +++ b/vendor/github.com/bytedance/sonic/internal/resolver/stubs_compat.go @@ -1,3 +1,5 @@ +// +build !go1.21 + /* * Copyright 2021 ByteDance Inc. * diff --git a/vendor/github.com/bytedance/sonic/internal/resolver/stubs_latest.go b/vendor/github.com/bytedance/sonic/internal/resolver/stubs_latest.go new file mode 100644 index 0000000000..f5a9bff2b2 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/resolver/stubs_latest.go @@ -0,0 +1,48 @@ +// +build go1.21 + +/* + * Copyright 2021 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package resolver + +import ( + _ `encoding/json` + `reflect` + _ `unsafe` +) + +type StdField struct { + name string + nameBytes []byte + nameNonEsc string + nameEscHTML string + tag bool + index []int + typ reflect.Type + omitEmpty bool + quoted bool + encoder func() +} + +type StdStructFields struct { + list []StdField + nameIndex map[string]*StdField + byFoldedName map[string]*StdField +} + +//go:noescape +//go:linkname typeFields encoding/json.typeFields +func typeFields(_ reflect.Type) StdStructFields diff --git a/vendor/github.com/bytedance/sonic/internal/rt/fastmem.go b/vendor/github.com/bytedance/sonic/internal/rt/fastmem.go index 5bf80dd4e7..e3bf0db91a 100644 --- a/vendor/github.com/bytedance/sonic/internal/rt/fastmem.go +++ b/vendor/github.com/bytedance/sonic/internal/rt/fastmem.go @@ -109,4 +109,16 @@ func StrFrom(p unsafe.Pointer, n int64) (s string) { (*GoString)(unsafe.Pointer(&s)).Ptr = p (*GoString)(unsafe.Pointer(&s)).Len = int(n) return +} + +// NoEscape hides a pointer from escape analysis. NoEscape is +// the identity function but escape analysis doesn't think the +// output depends on the input. NoEscape is inlined and currently +// compiles down to zero instructions. +// USE CAREFULLY! +//go:nosplit +//goland:noinspection GoVetUnsafePointer +func NoEscape(p unsafe.Pointer) unsafe.Pointer { + x := uintptr(p) + return unsafe.Pointer(x ^ 0) } \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/loader/funcdata.go b/vendor/github.com/bytedance/sonic/loader/funcdata.go index 9b760f6153..0e8594c2e5 100644 --- a/vendor/github.com/bytedance/sonic/loader/funcdata.go +++ b/vendor/github.com/bytedance/sonic/loader/funcdata.go @@ -42,6 +42,13 @@ const ( _SUB_BUCKETSIZE = _BUCKETSIZE / _SUBBUCKETS ) +// Note: This list must match the list in runtime/symtab.go. +const ( + FuncFlag_TOPFRAME = 1 << iota + FuncFlag_SPWRITE + FuncFlag_ASM +) + // PCDATA and FUNCDATA table indexes. // // See funcdata.h and $GROOT/src/cmd/internal/objabi/funcdata.go. @@ -141,4 +148,98 @@ func funcNameParts(name string) (string, string, string) { return name, "", "" } return name[:i], "[...]", name[j+1:] -} \ No newline at end of file +} + + +// func name table format: +// nameOff[0] -> namePartA namePartB namePartC \x00 +// nameOff[1] -> namePartA namePartB namePartC \x00 +// ... +func makeFuncnameTab(funcs []Func) (tab []byte, offs []int32) { + offs = make([]int32, len(funcs)) + offset := 1 + tab = []byte{0} + + for i, f := range funcs { + offs[i] = int32(offset) + + a, b, c := funcNameParts(f.Name) + tab = append(tab, a...) + tab = append(tab, b...) + tab = append(tab, c...) + tab = append(tab, 0) + offset += len(a) + len(b) + len(c) + 1 + } + + return +} + +// CU table format: +// cuOffsets[0] -> filetabOffset[0] filetabOffset[1] ... filetabOffset[len(CUs[0].fileNames)-1] +// cuOffsets[1] -> filetabOffset[len(CUs[0].fileNames)] ... filetabOffset[len(CUs[0].fileNames) + len(CUs[1].fileNames)-1] +// ... +// +// file name table format: +// filetabOffset[0] -> CUs[0].fileNames[0] \x00 +// ... +// filetabOffset[len(CUs[0]-1)] -> CUs[0].fileNames[len(CUs[0].fileNames)-1] \x00 +// ... +// filetabOffset[SUM(CUs,fileNames)-1] -> CUs[len(CU)-1].fileNames[len(CUs[len(CU)-1].fileNames)-1] \x00 +func makeFilenametab(cus []compilationUnit) (cutab []uint32, filetab []byte, cuOffsets []uint32) { + cuOffsets = make([]uint32, len(cus)) + cuOffset := 0 + fileOffset := 0 + + for i, cu := range cus { + cuOffsets[i] = uint32(cuOffset) + + for _, name := range cu.fileNames { + cutab = append(cutab, uint32(fileOffset)) + + fileOffset += len(name) + 1 + filetab = append(filetab, name...) + filetab = append(filetab, 0) + } + + cuOffset += len(cu.fileNames) + } + + return +} + +func writeFuncdata(out *[]byte, funcs []Func) (fstart int, funcdataOffs [][]uint32) { + fstart = len(*out) + *out = append(*out, byte(0)) + offs := uint32(1) + + funcdataOffs = make([][]uint32, len(funcs)) + for i, f := range funcs { + + var writer = func(fd encoding.BinaryMarshaler) { + var ab []byte + var err error + if fd != nil { + ab, err = fd.MarshalBinary() + if err != nil { + panic(err) + } + funcdataOffs[i] = append(funcdataOffs[i], offs) + } else { + ab = []byte{0} + funcdataOffs[i] = append(funcdataOffs[i], _INVALID_FUNCDATA_OFFSET) + } + *out = append(*out, ab...) + offs += uint32(len(ab)) + } + + writer(f.ArgsPointerMaps) + writer(f.LocalsPointerMaps) + writer(f.StackObjects) + writer(f.InlTree) + writer(f.OpenCodedDeferInfo) + writer(f.ArgInfo) + writer(f.ArgLiveInfo) + writer(f.WrapInfo) + } + return +} diff --git a/vendor/github.com/bytedance/sonic/loader/funcdata_go115.go b/vendor/github.com/bytedance/sonic/loader/funcdata_compat.go similarity index 77% rename from vendor/github.com/bytedance/sonic/loader/funcdata_go115.go rename to vendor/github.com/bytedance/sonic/loader/funcdata_compat.go index a2e3e65f9d..1af575aaa8 100644 --- a/vendor/github.com/bytedance/sonic/loader/funcdata_go115.go +++ b/vendor/github.com/bytedance/sonic/loader/funcdata_compat.go @@ -1,5 +1,5 @@ -//go:build go1.15 && !go1.16 -// +build go1.15,!go1.16 +//go:build !go1.16 +// +build !go1.16 /* * Copyright 2021 ByteDance Inc. @@ -20,11 +20,11 @@ package loader import ( - `encoding` - `os` - `unsafe` + `os` + `unsafe` + `sort` - `github.com/bytedance/sonic/internal/rt` + `github.com/bytedance/sonic/internal/rt` ) const ( @@ -171,99 +171,7 @@ type compilationUnit struct { fileNames []string } -// func name table format: -// nameOff[0] -> namePartA namePartB namePartC \x00 -// nameOff[1] -> namePartA namePartB namePartC \x00 -// ... -func makeFuncnameTab(funcs []Func) (tab []byte, offs []int32) { - offs = make([]int32, len(funcs)) - offset := 0 - - for i, f := range funcs { - offs[i] = int32(offset) - - a, b, c := funcNameParts(f.Name) - tab = append(tab, a...) - tab = append(tab, b...) - tab = append(tab, c...) - tab = append(tab, 0) - offset += len(a) + len(b) + len(c) + 1 - } - - return -} - -// CU table format: -// cuOffsets[0] -> filetabOffset[0] filetabOffset[1] ... filetabOffset[len(CUs[0].fileNames)-1] -// cuOffsets[1] -> filetabOffset[len(CUs[0].fileNames)] ... filetabOffset[len(CUs[0].fileNames) + len(CUs[1].fileNames)-1] -// ... -// -// file name table format: -// filetabOffset[0] -> CUs[0].fileNames[0] \x00 -// ... -// filetabOffset[len(CUs[0]-1)] -> CUs[0].fileNames[len(CUs[0].fileNames)-1] \x00 -// ... -// filetabOffset[SUM(CUs,fileNames)-1] -> CUs[len(CU)-1].fileNames[len(CUs[len(CU)-1].fileNames)-1] \x00 -func makeFilenametab(cus []compilationUnit) (cutab []uint32, filetab []byte, cuOffsets []uint32) { - cuOffsets = make([]uint32, len(cus)) - cuOffset := 0 - fileOffset := 0 - - for i, cu := range cus { - cuOffsets[i] = uint32(cuOffset) - - for _, name := range cu.fileNames { - cutab = append(cutab, uint32(fileOffset)) - - fileOffset += len(name) + 1 - filetab = append(filetab, name...) - filetab = append(filetab, 0) - } - - cuOffset += len(cu.fileNames) - } - - return -} - -func writeFuncdata(out *[]byte, funcs []Func) (fstart int, funcdataOffs [][]uint32) { - fstart = len(*out) - *out = append(*out, byte(0)) - offs := uint32(1) - - funcdataOffs = make([][]uint32, len(funcs)) - for i, f := range funcs { - - var writer = func(fd encoding.BinaryMarshaler) { - var ab []byte - var err error - if fd != nil { - ab, err = fd.MarshalBinary() - if err != nil { - panic(err) - } - funcdataOffs[i] = append(funcdataOffs[i], offs) - } else { - ab = []byte{0} - funcdataOffs[i] = append(funcdataOffs[i], _INVALID_FUNCDATA_OFFSET) - } - *out = append(*out, ab...) - offs += uint32(len(ab)) - } - - writer(f.ArgsPointerMaps) - writer(f.LocalsPointerMaps) - writer(f.StackObjects) - writer(f.InlTree) - writer(f.OpenCodedDeferInfo) - writer(f.ArgInfo) - writer(f.ArgLiveInfo) - writer(f.WrapInfo) - } - return -} - -func makeFtab(funcs []_func, lastFuncSize uint32) (ftab []funcTab, pclntabSize int64, startLocations []uint32) { +func makeFtab(funcs []_func, maxpc uintptr) (ftab []funcTab, pclntabSize int64, startLocations []uint32) { // Allocate space for the pc->func table. This structure consists of a pc offset // and an offset to the func structure. After that, we have a single pc // value that marks the end of the last function in the binary. @@ -283,14 +191,12 @@ func makeFtab(funcs []_func, lastFuncSize uint32) (ftab []funcTab, pclntabSize i } // Final entry of table is just end pc offset. - lastFunc := funcs[len(funcs)-1] - ftab = append(ftab, funcTab{lastFunc.entry + uintptr(lastFuncSize), 0}) - + ftab = append(ftab, funcTab{maxpc, 0}) return } // Pcln table format: [...]funcTab + [...]_Func -func makePclntable(size int64, startLocations []uint32, funcs []_func, lastFuncSize uint32, pcdataOffs [][]uint32, funcdataAddr uintptr, funcdataOffs [][]uint32) (pclntab []byte) { +func makePclntable(size int64, startLocations []uint32, funcs []_func, maxpc uintptr, pcdataOffs [][]uint32, funcdataAddr uintptr, funcdataOffs [][]uint32) (pclntab []byte) { pclntab = make([]byte, size, size) // write a map of pc->func info offsets @@ -301,8 +207,7 @@ func makePclntable(size int64, startLocations []uint32, funcs []_func, lastFuncS offs += 16 } // Final entry of table is just end pc offset. - lastFunc := funcs[len(funcs)-1] - byteOrder.PutUint64(pclntab[offs:offs+8], uint64(lastFunc.entry)+uint64(lastFuncSize)) + byteOrder.PutUint64(pclntab[offs:offs+8], uint64(maxpc)) offs += 8 // write func info table @@ -374,21 +279,22 @@ func writeFindfunctab(out *[]byte, ftab []funcTab) (start int) { tab := make([]findfuncbucket, 0, nbuckets) var s, e = 0, 0 for i := 0; ifunc (binary search) func table - lastFuncsize := funcs[len(funcs)-1].TextSize - ftab, pclntSize, startLocations := makeFtab(_funcs, lastFuncsize) + ftab, pclntSize, startLocations := makeFtab(_funcs, mod.maxpc) mod.ftab = ftab // write pc->func (modmap) findfunc table @@ -455,15 +372,9 @@ func makeModuledata(name string, filenames []string, funcs []Func, text []byte) funcdataAddr := uintptr(rt.IndexByte(cache, fstart)) // make pclnt table - pclntab := makePclntable(pclntSize, startLocations, _funcs, lastFuncsize, pcdataOffs, funcdataAddr, funcdataOffs) + pclntab := makePclntable(pclntSize, startLocations, _funcs, mod.maxpc, pcdataOffs, funcdataAddr, funcdataOffs) mod.pclntable = pclntab - // assign addresses - mod.text = addr - mod.etext = addr + uintptr(size) - mod.minpc = addr - mod.maxpc = addr + uintptr(len(text)) - // make pc header mod.pcHeader = &pcHeader { magic : _Magic, @@ -487,7 +398,7 @@ func makeModuledata(name string, filenames []string, funcs []Func, text []byte) // makePctab generates pcdelta->valuedelta tables for functions, // and returns the table and the entry offset of every kind pcdata in the table. -func makePctab(funcs []Func, addr uintptr, cuOffset []uint32, nameOffset []int32) (pctab []byte, pcdataOffs [][]uint32, _funcs []_func) { +func makePctab(funcs []Func, addr uintptr, cuOffset uint32, nameOffset []int32) (pctab []byte, pcdataOffs [][]uint32, _funcs []_func) { _funcs = make([]_func, len(funcs)) // Pctab offsets of 0 are considered invalid in the runtime. We respect @@ -538,7 +449,7 @@ func makePctab(funcs []Func, addr uintptr, cuOffset []uint32, nameOffset []int32 _f.deferreturn = f.DeferReturn // NOTICE: _func.pcdata is always as [PCDATA_UnsafePoint(0) : PCDATA_ArgLiveIndex(3)] _f.npcdata = uint32(_N_PCDATA) - _f.cuOffset = cuOffset[i] + _f.cuOffset = cuOffset _f.funcID = f.ID _f.nfuncdata = uint8(_N_FUNCDATA) } @@ -546,4 +457,4 @@ func makePctab(funcs []Func, addr uintptr, cuOffset []uint32, nameOffset []int32 return } -func registerFunction(name string, pc uintptr, textSize uintptr, fp int, args int, size uintptr, argptrs uintptr, localptrs uintptr) {} \ No newline at end of file +func registerFunction(name string, pc uintptr, textSize uintptr, fp int, args int, size uintptr, argptrs uintptr, localptrs uintptr) {} diff --git a/vendor/github.com/bytedance/sonic/loader/funcdata_go116.go b/vendor/github.com/bytedance/sonic/loader/funcdata_go116.go index 508268e7dd..1dfe2297d7 100644 --- a/vendor/github.com/bytedance/sonic/loader/funcdata_go116.go +++ b/vendor/github.com/bytedance/sonic/loader/funcdata_go116.go @@ -20,9 +20,9 @@ package loader import ( - `encoding` `os` `unsafe` + `sort` `github.com/bytedance/sonic/internal/rt` ) @@ -171,99 +171,7 @@ type compilationUnit struct { fileNames []string } -// func name table format: -// nameOff[0] -> namePartA namePartB namePartC \x00 -// nameOff[1] -> namePartA namePartB namePartC \x00 -// ... -func makeFuncnameTab(funcs []Func) (tab []byte, offs []int32) { - offs = make([]int32, len(funcs)) - offset := 0 - - for i, f := range funcs { - offs[i] = int32(offset) - - a, b, c := funcNameParts(f.Name) - tab = append(tab, a...) - tab = append(tab, b...) - tab = append(tab, c...) - tab = append(tab, 0) - offset += len(a) + len(b) + len(c) + 1 - } - - return -} - -// CU table format: -// cuOffsets[0] -> filetabOffset[0] filetabOffset[1] ... filetabOffset[len(CUs[0].fileNames)-1] -// cuOffsets[1] -> filetabOffset[len(CUs[0].fileNames)] ... filetabOffset[len(CUs[0].fileNames) + len(CUs[1].fileNames)-1] -// ... -// -// file name table format: -// filetabOffset[0] -> CUs[0].fileNames[0] \x00 -// ... -// filetabOffset[len(CUs[0]-1)] -> CUs[0].fileNames[len(CUs[0].fileNames)-1] \x00 -// ... -// filetabOffset[SUM(CUs,fileNames)-1] -> CUs[len(CU)-1].fileNames[len(CUs[len(CU)-1].fileNames)-1] \x00 -func makeFilenametab(cus []compilationUnit) (cutab []uint32, filetab []byte, cuOffsets []uint32) { - cuOffsets = make([]uint32, len(cus)) - cuOffset := 0 - fileOffset := 0 - - for i, cu := range cus { - cuOffsets[i] = uint32(cuOffset) - - for _, name := range cu.fileNames { - cutab = append(cutab, uint32(fileOffset)) - - fileOffset += len(name) + 1 - filetab = append(filetab, name...) - filetab = append(filetab, 0) - } - - cuOffset += len(cu.fileNames) - } - - return -} - -func writeFuncdata(out *[]byte, funcs []Func) (fstart int, funcdataOffs [][]uint32) { - fstart = len(*out) - *out = append(*out, byte(0)) - offs := uint32(1) - - funcdataOffs = make([][]uint32, len(funcs)) - for i, f := range funcs { - - var writer = func(fd encoding.BinaryMarshaler) { - var ab []byte - var err error - if fd != nil { - ab, err = fd.MarshalBinary() - if err != nil { - panic(err) - } - funcdataOffs[i] = append(funcdataOffs[i], offs) - } else { - ab = []byte{0} - funcdataOffs[i] = append(funcdataOffs[i], _INVALID_FUNCDATA_OFFSET) - } - *out = append(*out, ab...) - offs += uint32(len(ab)) - } - - writer(f.ArgsPointerMaps) - writer(f.LocalsPointerMaps) - writer(f.StackObjects) - writer(f.InlTree) - writer(f.OpenCodedDeferInfo) - writer(f.ArgInfo) - writer(f.ArgLiveInfo) - writer(f.WrapInfo) - } - return -} - -func makeFtab(funcs []_func, lastFuncSize uint32) (ftab []funcTab, pclntabSize int64, startLocations []uint32) { +func makeFtab(funcs []_func, maxpc uintptr) (ftab []funcTab, pclntabSize int64, startLocations []uint32) { // Allocate space for the pc->func table. This structure consists of a pc offset // and an offset to the func structure. After that, we have a single pc // value that marks the end of the last function in the binary. @@ -283,14 +191,13 @@ func makeFtab(funcs []_func, lastFuncSize uint32) (ftab []funcTab, pclntabSize i } // Final entry of table is just end pc offset. - lastFunc := funcs[len(funcs)-1] - ftab = append(ftab, funcTab{lastFunc.entry + uintptr(lastFuncSize), 0}) + ftab = append(ftab, funcTab{maxpc, 0}) return } // Pcln table format: [...]funcTab + [...]_Func -func makePclntable(size int64, startLocations []uint32, funcs []_func, lastFuncSize uint32, pcdataOffs [][]uint32, funcdataAddr uintptr, funcdataOffs [][]uint32) (pclntab []byte) { +func makePclntable(size int64, startLocations []uint32, funcs []_func, maxpc uintptr, pcdataOffs [][]uint32, funcdataAddr uintptr, funcdataOffs [][]uint32) (pclntab []byte) { pclntab = make([]byte, size, size) // write a map of pc->func info offsets @@ -301,8 +208,7 @@ func makePclntable(size int64, startLocations []uint32, funcs []_func, lastFuncS offs += 16 } // Final entry of table is just end pc offset. - lastFunc := funcs[len(funcs)-1] - byteOrder.PutUint64(pclntab[offs:offs+8], uint64(lastFunc.entry)+uint64(lastFuncSize)) + byteOrder.PutUint64(pclntab[offs:offs+8], uint64(maxpc)) offs += 8 // write func info table @@ -374,21 +280,22 @@ func writeFindfunctab(out *[]byte, ftab []funcTab) (start int) { tab := make([]findfuncbucket, 0, nbuckets) var s, e = 0, 0 for i := 0; ifunc (binary search) func table - lastFuncsize := funcs[len(funcs)-1].TextSize - ftab, pclntSize, startLocations := makeFtab(_funcs, lastFuncsize) + ftab, pclntSize, startLocations := makeFtab(_funcs, mod.maxpc) mod.ftab = ftab // write pc->func (modmap) findfunc table @@ -455,15 +373,9 @@ func makeModuledata(name string, filenames []string, funcs []Func, text []byte) funcdataAddr := uintptr(rt.IndexByte(cache, fstart)) // make pclnt table - pclntab := makePclntable(pclntSize, startLocations, _funcs, lastFuncsize, pcdataOffs, funcdataAddr, funcdataOffs) + pclntab := makePclntable(pclntSize, startLocations, _funcs, mod.maxpc, pcdataOffs, funcdataAddr, funcdataOffs) mod.pclntable = pclntab - // assign addresses - mod.text = addr - mod.etext = addr + uintptr(size) - mod.minpc = addr - mod.maxpc = addr + uintptr(len(text)) - // make pc header mod.pcHeader = &pcHeader { magic : _Magic, @@ -487,7 +399,7 @@ func makeModuledata(name string, filenames []string, funcs []Func, text []byte) // makePctab generates pcdelta->valuedelta tables for functions, // and returns the table and the entry offset of every kind pcdata in the table. -func makePctab(funcs []Func, addr uintptr, cuOffset []uint32, nameOffset []int32) (pctab []byte, pcdataOffs [][]uint32, _funcs []_func) { +func makePctab(funcs []Func, addr uintptr, cuOffset uint32, nameOffset []int32) (pctab []byte, pcdataOffs [][]uint32, _funcs []_func) { _funcs = make([]_func, len(funcs)) // Pctab offsets of 0 are considered invalid in the runtime. We respect @@ -538,7 +450,7 @@ func makePctab(funcs []Func, addr uintptr, cuOffset []uint32, nameOffset []int32 _f.deferreturn = f.DeferReturn // NOTICE: _func.pcdata is always as [PCDATA_UnsafePoint(0) : PCDATA_ArgLiveIndex(3)] _f.npcdata = uint32(_N_PCDATA) - _f.cuOffset = cuOffset[i] + _f.cuOffset = cuOffset _f.funcID = f.ID _f.nfuncdata = uint8(_N_FUNCDATA) } @@ -546,4 +458,4 @@ func makePctab(funcs []Func, addr uintptr, cuOffset []uint32, nameOffset []int32 return } -func registerFunction(name string, pc uintptr, textSize uintptr, fp int, args int, size uintptr, argptrs uintptr, localptrs uintptr) {} \ No newline at end of file +func registerFunction(name string, pc uintptr, textSize uintptr, fp int, args int, size uintptr, argptrs uintptr, localptrs uintptr) {} diff --git a/vendor/github.com/bytedance/sonic/loader/funcdata_go118.go b/vendor/github.com/bytedance/sonic/loader/funcdata_go118.go index a2bac857a1..84178ab851 100644 --- a/vendor/github.com/bytedance/sonic/loader/funcdata_go118.go +++ b/vendor/github.com/bytedance/sonic/loader/funcdata_go118.go @@ -1,4 +1,5 @@ // go:build go1.18 && !go1.20 +//go:build go1.18 && !go1.20 // +build go1.18,!go1.20 /* @@ -20,10 +21,6 @@ package loader import ( - `encoding` - `os` - `unsafe` - `github.com/bytedance/sonic/internal/rt` ) @@ -31,21 +28,6 @@ const ( _Magic uint32 = 0xfffffff0 ) -type pcHeader struct { - magic uint32 // 0xFFFFFFF0 - pad1, pad2 uint8 // 0,0 - minLC uint8 // min instruction size - ptrSize uint8 // size of a ptr in bytes - nfunc int // number of functions in the module - nfiles uint // number of entries in the file tab - textStart uintptr // base for function entry PC offsets in this module, equal to moduledata.text - funcnameOffset uintptr // offset to the funcnametab variable from pcHeader - cuOffset uintptr // offset to the cutab variable from pcHeader - filetabOffset uintptr // offset to the filetab variable from pcHeader - pctabOffset uintptr // offset to the pctab variable from pcHeader - pclnOffset uintptr // offset to the pclntab variable from pcHeader -} - type moduledata struct { pcHeader *pcHeader funcnametab []byte @@ -129,413 +111,3 @@ type _func struct { // // funcdata [nfuncdata]uint32 } - -type funcTab struct { - entry uint32 - funcoff uint32 -} - -type bitVector struct { - n int32 // # of bits - bytedata *uint8 -} - -type ptabEntry struct { - name int32 - typ int32 -} - -type textSection struct { - vaddr uintptr // prelinked section vaddr - end uintptr // vaddr + section length - baseaddr uintptr // relocated section address -} - -type modulehash struct { - modulename string - linktimehash string - runtimehash *string -} - -// findfuncbucket is an array of these structures. -// Each bucket represents 4096 bytes of the text segment. -// Each subbucket represents 256 bytes of the text segment. -// To find a function given a pc, locate the bucket and subbucket for -// that pc. Add together the idx and subbucket value to obtain a -// function index. Then scan the functab array starting at that -// index to find the target function. -// This table uses 20 bytes for every 4096 bytes of code, or ~0.5% overhead. -type findfuncbucket struct { - idx uint32 - _SUBBUCKETS [16]byte -} - -// func name table format: -// nameOff[0] -> namePartA namePartB namePartC \x00 -// nameOff[1] -> namePartA namePartB namePartC \x00 -// ... -func makeFuncnameTab(funcs []Func) (tab []byte, offs []int32) { - offs = make([]int32, len(funcs)) - offset := 0 - - for i, f := range funcs { - offs[i] = int32(offset) - - a, b, c := funcNameParts(f.Name) - tab = append(tab, a...) - tab = append(tab, b...) - tab = append(tab, c...) - tab = append(tab, 0) - offset += len(a) + len(b) + len(c) + 1 - } - - return -} - -type compilationUnit struct { - fileNames []string -} - -// CU table format: -// cuOffsets[0] -> filetabOffset[0] filetabOffset[1] ... filetabOffset[len(CUs[0].fileNames)-1] -// cuOffsets[1] -> filetabOffset[len(CUs[0].fileNames)] ... filetabOffset[len(CUs[0].fileNames) + len(CUs[1].fileNames)-1] -// ... -// -// file name table format: -// filetabOffset[0] -> CUs[0].fileNames[0] \x00 -// ... -// filetabOffset[len(CUs[0]-1)] -> CUs[0].fileNames[len(CUs[0].fileNames)-1] \x00 -// ... -// filetabOffset[SUM(CUs,fileNames)-1] -> CUs[len(CU)-1].fileNames[len(CUs[len(CU)-1].fileNames)-1] \x00 -func makeFilenametab(cus []compilationUnit) (cutab []uint32, filetab []byte, cuOffsets []uint32) { - cuOffsets = make([]uint32, len(cus)) - cuOffset := 0 - fileOffset := 0 - - for i, cu := range cus { - cuOffsets[i] = uint32(cuOffset) - - for _, name := range cu.fileNames { - cutab = append(cutab, uint32(fileOffset)) - - fileOffset += len(name) + 1 - filetab = append(filetab, name...) - filetab = append(filetab, 0) - } - - cuOffset += len(cu.fileNames) - } - - return -} - -func writeFuncdata(out *[]byte, funcs []Func) (fstart int, funcdataOffs [][]uint32) { - fstart = len(*out) - *out = append(*out, byte(0)) - offs := uint32(1) - - funcdataOffs = make([][]uint32, len(funcs)) - for i, f := range funcs { - - var writer = func(fd encoding.BinaryMarshaler) { - var ab []byte - var err error - if fd != nil { - ab, err = fd.MarshalBinary() - if err != nil { - panic(err) - } - funcdataOffs[i] = append(funcdataOffs[i], offs) - } else { - ab = []byte{0} - funcdataOffs[i] = append(funcdataOffs[i], _INVALID_FUNCDATA_OFFSET) - } - *out = append(*out, ab...) - offs += uint32(len(ab)) - } - - writer(f.ArgsPointerMaps) - writer(f.LocalsPointerMaps) - writer(f.StackObjects) - writer(f.InlTree) - writer(f.OpenCodedDeferInfo) - writer(f.ArgInfo) - writer(f.ArgLiveInfo) - writer(f.WrapInfo) - } - return -} - -func makeFtab(funcs []_func, lastFuncSize uint32) (ftab []funcTab) { - // Allocate space for the pc->func table. This structure consists of a pc offset - // and an offset to the func structure. After that, we have a single pc - // value that marks the end of the last function in the binary. - var size int64 = int64(len(funcs)*2*4 + 4) - var startLocations = make([]uint32, len(funcs)) - for i, f := range funcs { - size = rnd(size, int64(_PtrSize)) - //writePCToFunc - startLocations[i] = uint32(size) - size += int64(uint8(_FUNC_SIZE)+f.nfuncdata*4+uint8(f.npcdata)*4) - } - - ftab = make([]funcTab, 0, len(funcs)+1) - - // write a map of pc->func info offsets - for i, f := range funcs { - ftab = append(ftab, funcTab{uint32(f.entryOff), uint32(startLocations[i])}) - } - - // Final entry of table is just end pc offset. - lastFunc := funcs[len(funcs)-1] - ftab = append(ftab, funcTab{uint32(lastFunc.entryOff + lastFuncSize), 0}) - - return -} - -// Pcln table format: [...]funcTab + [...]_Func -func makePclntable(funcs []_func, lastFuncSize uint32, pcdataOffs [][]uint32, funcdataOffs [][]uint32) (pclntab []byte) { - // Allocate space for the pc->func table. This structure consists of a pc offset - // and an offset to the func structure. After that, we have a single pc - // value that marks the end of the last function in the binary. - var size int64 = int64(len(funcs)*2*4 + 4) - var startLocations = make([]uint32, len(funcs)) - for i := range funcs { - size = rnd(size, int64(_PtrSize)) - //writePCToFunc - startLocations[i] = uint32(size) - size += int64(int(_FUNC_SIZE)+len(funcdataOffs[i])*4+len(pcdataOffs[i])*4) - } - - pclntab = make([]byte, size, size) - - // write a map of pc->func info offsets - offs := 0 - for i, f := range funcs { - byteOrder.PutUint32(pclntab[offs:offs+4], uint32(f.entryOff)) - byteOrder.PutUint32(pclntab[offs+4:offs+8], uint32(startLocations[i])) - offs += 8 - } - // Final entry of table is just end pc offset. - lastFunc := funcs[len(funcs)-1] - byteOrder.PutUint32(pclntab[offs:offs+4], uint32(lastFunc.entryOff+lastFuncSize)) - - // write func info table - for i, f := range funcs { - off := startLocations[i] - - // write _func structure to pclntab - fb := rt.BytesFrom(unsafe.Pointer(&f), int(_FUNC_SIZE), int(_FUNC_SIZE)) - copy(pclntab[off:off+uint32(_FUNC_SIZE)], fb) - off += uint32(_FUNC_SIZE) - - // NOTICE: _func.pcdata always starts from PcUnsafePoint, which is index 3 - for j := 3; j < len(pcdataOffs[i]); j++ { - byteOrder.PutUint32(pclntab[off:off+4], uint32(pcdataOffs[i][j])) - off += 4 - } - - // funcdata refs as offsets from gofunc - for _, funcdata := range funcdataOffs[i] { - byteOrder.PutUint32(pclntab[off:off+4], uint32(funcdata)) - off += 4 - } - - } - - return -} - -// findfunc table used to map pc to belonging func, -// returns the index in the func table. -// -// All text section are divided into buckets sized _BUCKETSIZE(4K): -// every bucket is divided into _SUBBUCKETS sized _SUB_BUCKETSIZE(64), -// and it has a base idx to plus the offset stored in jth subbucket. -// see findfunc() in runtime/symtab.go -func writeFindfunctab(out *[]byte, ftab []funcTab) (start int) { - start = len(*out) - - max := ftab[len(ftab)-1].entry - min := ftab[0].entry - nbuckets := (max - min + _BUCKETSIZE - 1) / _BUCKETSIZE - n := (max - min + _SUB_BUCKETSIZE - 1) / _SUB_BUCKETSIZE - - tab := make([]findfuncbucket, 0, nbuckets) - var s, e = 0, 0 - for i := 0; i 0 { - size := int(unsafe.Sizeof(findfuncbucket{}))*len(tab) - *out = append(*out, rt.BytesFrom(unsafe.Pointer(&tab[0]), size, size)...) - } - return -} - -func makeModuledata(name string, filenames []string, funcs []Func, text []byte) (mod *moduledata) { - mod = new(moduledata) - mod.modulename = name - - // make filename table - cu := make([]string, 0, len(filenames)) - for _, f := range filenames { - cu = append(cu, f) - } - cutab, filetab, cuOffs := makeFilenametab([]compilationUnit{{cu}}) - mod.cutab = cutab - mod.filetab = filetab - - // make funcname table - funcnametab, nameOffs := makeFuncnameTab(funcs) - mod.funcnametab = funcnametab - - // make pcdata table - // NOTICE: _func only use offset to index pcdata, thus no need mmap() pcdata - pctab, pcdataOffs, _funcs := makePctab(funcs, cuOffs, nameOffs) - mod.pctab = pctab - - // write func data - // NOTICE: _func use mod.gofunc+offset to directly point funcdata, thus need cache funcdata - // TODO: estimate accurate capacity - cache := make([]byte, 0, len(funcs)*int(_PtrSize)) - fstart, funcdataOffs := writeFuncdata(&cache, funcs) - - // make pc->func (binary search) func table - lastFuncsize := funcs[len(funcs)-1].TextSize - ftab := makeFtab(_funcs, lastFuncsize) - mod.ftab = ftab - - // write pc->func (modmap) findfunc table - ffstart := writeFindfunctab(&cache, ftab) - - // make pclnt table - pclntab := makePclntable(_funcs, lastFuncsize, pcdataOffs, funcdataOffs) - mod.pclntable = pclntab - - // mmap() text and funcdata segements - p := os.Getpagesize() - size := int(rnd(int64(len(text)), int64(p))) - addr := mmap(size) - // copy the machine code - s := rt.BytesFrom(unsafe.Pointer(addr), len(text), size) - copy(s, text) - // make it executable - mprotect(addr, size) - - // assign addresses - mod.text = addr - mod.etext = addr + uintptr(size) - mod.minpc = addr - mod.maxpc = addr + uintptr(len(text)) - - // cache funcdata and findfuncbucket - moduleCache.Lock() - moduleCache.m[mod] = cache - moduleCache.Unlock() - mod.gofunc = uintptr(unsafe.Pointer(&cache[fstart])) - mod.findfunctab = uintptr(unsafe.Pointer(&cache[ffstart])) - - // make pc header - mod.pcHeader = &pcHeader { - magic : _Magic, - minLC : _MinLC, - ptrSize : _PtrSize, - nfunc : len(funcs), - nfiles: uint(len(cu)), - textStart: mod.text, - funcnameOffset: getOffsetOf(moduledata{}, "funcnametab"), - cuOffset: getOffsetOf(moduledata{}, "cutab"), - filetabOffset: getOffsetOf(moduledata{}, "filetab"), - pctabOffset: getOffsetOf(moduledata{}, "pctab"), - pclnOffset: getOffsetOf(moduledata{}, "pclntable"), - } - - // sepecial case: gcdata and gcbss must by non-empty - mod.gcdata = uintptr(unsafe.Pointer(&emptyByte)) - mod.gcbss = uintptr(unsafe.Pointer(&emptyByte)) - - return -} - -// makePctab generates pcdelta->valuedelta tables for functions, -// and returns the table and the entry offset of every kind pcdata in the table. -func makePctab(funcs []Func, cuOffset []uint32, nameOffset []int32) (pctab []byte, pcdataOffs [][]uint32, _funcs []_func) { - _funcs = make([]_func, len(funcs)) - - // Pctab offsets of 0 are considered invalid in the runtime. We respect - // that by just padding a single byte at the beginning of runtime.pctab, - // that way no real offsets can be zero. - pctab = make([]byte, 1, 12*len(funcs)+1) - pcdataOffs = make([][]uint32, len(funcs)) - - for i, f := range funcs { - _f := &_funcs[i] - - var writer = func(pc *Pcdata) { - var ab []byte - var err error - if pc != nil { - ab, err = pc.MarshalBinary() - if err != nil { - panic(err) - } - pcdataOffs[i] = append(pcdataOffs[i], uint32(len(pctab))) - } else { - ab = []byte{0} - pcdataOffs[i] = append(pcdataOffs[i], _PCDATA_INVALID_OFFSET) - } - pctab = append(pctab, ab...) - } - - if f.Pcsp != nil { - _f.pcsp = uint32(len(pctab)) - } - writer(f.Pcsp) - if f.Pcfile != nil { - _f.pcfile = uint32(len(pctab)) - } - writer(f.Pcfile) - if f.Pcline != nil { - _f.pcln = uint32(len(pctab)) - } - writer(f.Pcline) - writer(f.PcUnsafePoint) - writer(f.PcStackMapIndex) - writer(f.PcInlTreeIndex) - writer(f.PcArgLiveIndex) - - _f.entryOff = f.EntryOff - _f.nameOff = nameOffset[i] - _f.args = f.ArgsSize - _f.deferreturn = f.DeferReturn - // NOTICE: _func.pcdata is always as [PCDATA_UnsafePoint(0) : PCDATA_ArgLiveIndex(3)] - _f.npcdata = uint32(_N_PCDATA) - _f.cuOffset = cuOffset[i] - _f.funcID = f.ID - _f.flag = f.Flag - _f.nfuncdata = uint8(_N_FUNCDATA) - } - - return -} - -func registerFunction(name string, pc uintptr, textSize uintptr, fp int, args int, size uintptr, argptrs uintptr, localptrs uintptr) {} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/loader/funcdata_go120.go b/vendor/github.com/bytedance/sonic/loader/funcdata_go120.go index 906fe375d0..ed3e7d1a4c 100644 --- a/vendor/github.com/bytedance/sonic/loader/funcdata_go120.go +++ b/vendor/github.com/bytedance/sonic/loader/funcdata_go120.go @@ -20,10 +20,6 @@ package loader import ( - `encoding` - `os` - `unsafe` - `github.com/bytedance/sonic/internal/rt` ) @@ -51,8 +47,6 @@ type moduledata struct { end, gcdata, gcbss uintptr types, etypes uintptr rodata uintptr - - // TODO: generate funcinfo object to memory gofunc uintptr // go.func.* is actual funcinfo object in image textsectmap []textSection // see runtime/symtab.go: textAddr() @@ -118,428 +112,3 @@ type _func struct { // // funcdata [nfuncdata]uint32 } - -type funcTab struct { - entry uint32 - funcoff uint32 -} - -type pcHeader struct { - magic uint32 // 0xFFFFFFF0 - pad1, pad2 uint8 // 0,0 - minLC uint8 // min instruction size - ptrSize uint8 // size of a ptr in bytes - nfunc int // number of functions in the module - nfiles uint // number of entries in the file tab - textStart uintptr // base for function entry PC offsets in this module, equal to moduledata.text - funcnameOffset uintptr // offset to the funcnametab variable from pcHeader - cuOffset uintptr // offset to the cutab variable from pcHeader - filetabOffset uintptr // offset to the filetab variable from pcHeader - pctabOffset uintptr // offset to the pctab variable from pcHeader - pclnOffset uintptr // offset to the pclntab variable from pcHeader -} - -type bitVector struct { - n int32 // # of bits - bytedata *uint8 -} - -type ptabEntry struct { - name int32 - typ int32 -} - -type textSection struct { - vaddr uintptr // prelinked section vaddr - end uintptr // vaddr + section length - baseaddr uintptr // relocated section address -} - -type modulehash struct { - modulename string - linktimehash string - runtimehash *string -} - -// findfuncbucket is an array of these structures. -// Each bucket represents 4096 bytes of the text segment. -// Each subbucket represents 256 bytes of the text segment. -// To find a function given a pc, locate the bucket and subbucket for -// that pc. Add together the idx and subbucket value to obtain a -// function index. Then scan the functab array starting at that -// index to find the target function. -// This table uses 20 bytes for every 4096 bytes of code, or ~0.5% overhead. -type findfuncbucket struct { - idx uint32 - _SUBBUCKETS [16]byte -} - -// func name table format: -// nameOff[0] -> namePartA namePartB namePartC \x00 -// nameOff[1] -> namePartA namePartB namePartC \x00 -// ... -func makeFuncnameTab(funcs []Func) (tab []byte, offs []int32) { - offs = make([]int32, len(funcs)) - offset := 0 - - for i, f := range funcs { - offs[i] = int32(offset) - - a, b, c := funcNameParts(f.Name) - tab = append(tab, a...) - tab = append(tab, b...) - tab = append(tab, c...) - tab = append(tab, 0) - offset += len(a) + len(b) + len(c) + 1 - } - - return -} - -type compilationUnit struct { - fileNames []string -} - -// CU table format: -// cuOffsets[0] -> filetabOffset[0] filetabOffset[1] ... filetabOffset[len(CUs[0].fileNames)-1] -// cuOffsets[1] -> filetabOffset[len(CUs[0].fileNames)] ... filetabOffset[len(CUs[0].fileNames) + len(CUs[1].fileNames)-1] -// ... -// -// file name table format: -// filetabOffset[0] -> CUs[0].fileNames[0] \x00 -// ... -// filetabOffset[len(CUs[0]-1)] -> CUs[0].fileNames[len(CUs[0].fileNames)-1] \x00 -// ... -// filetabOffset[SUM(CUs,fileNames)-1] -> CUs[len(CU)-1].fileNames[len(CUs[len(CU)-1].fileNames)-1] \x00 -func makeFilenametab(cus []compilationUnit) (cutab []uint32, filetab []byte, cuOffsets []uint32) { - cuOffsets = make([]uint32, len(cus)) - cuOffset := 0 - fileOffset := 0 - - for i, cu := range cus { - cuOffsets[i] = uint32(cuOffset) - - for _, name := range cu.fileNames { - cutab = append(cutab, uint32(fileOffset)) - - fileOffset += len(name) + 1 - filetab = append(filetab, name...) - filetab = append(filetab, 0) - } - - cuOffset += len(cu.fileNames) - } - - return -} - -func writeFuncdata(out *[]byte, funcs []Func) (fstart int, funcdataOffs [][]uint32) { - fstart = len(*out) - *out = append(*out, byte(0)) - offs := uint32(1) - - funcdataOffs = make([][]uint32, len(funcs)) - for i, f := range funcs { - - var writer = func(fd encoding.BinaryMarshaler) { - var ab []byte - var err error - if fd != nil { - ab, err = fd.MarshalBinary() - if err != nil { - panic(err) - } - funcdataOffs[i] = append(funcdataOffs[i], offs) - } else { - ab = []byte{0} - funcdataOffs[i] = append(funcdataOffs[i], _INVALID_FUNCDATA_OFFSET) - } - *out = append(*out, ab...) - offs += uint32(len(ab)) - } - - writer(f.ArgsPointerMaps) - writer(f.LocalsPointerMaps) - writer(f.StackObjects) - writer(f.InlTree) - writer(f.OpenCodedDeferInfo) - writer(f.ArgInfo) - writer(f.ArgLiveInfo) - writer(f.WrapInfo) - } - return -} - -func makeFtab(funcs []_func, lastFuncSize uint32) (ftab []funcTab) { - // Allocate space for the pc->func table. This structure consists of a pc offset - // and an offset to the func structure. After that, we have a single pc - // value that marks the end of the last function in the binary. - var size int64 = int64(len(funcs)*2*4 + 4) - var startLocations = make([]uint32, len(funcs)) - for i, f := range funcs { - size = rnd(size, int64(_PtrSize)) - //writePCToFunc - startLocations[i] = uint32(size) - size += int64(uint8(_FUNC_SIZE)+f.nfuncdata*4+uint8(f.npcdata)*4) - } - - ftab = make([]funcTab, 0, len(funcs)+1) - - // write a map of pc->func info offsets - for i, f := range funcs { - ftab = append(ftab, funcTab{uint32(f.entryOff), uint32(startLocations[i])}) - } - - // Final entry of table is just end pc offset. - lastFunc := funcs[len(funcs)-1] - ftab = append(ftab, funcTab{uint32(lastFunc.entryOff + lastFuncSize), 0}) - - return -} - -// Pcln table format: [...]funcTab + [...]_Func -func makePclntable(funcs []_func, lastFuncSize uint32, pcdataOffs [][]uint32, funcdataOffs [][]uint32) (pclntab []byte) { - // Allocate space for the pc->func table. This structure consists of a pc offset - // and an offset to the func structure. After that, we have a single pc - // value that marks the end of the last function in the binary. - var size int64 = int64(len(funcs)*2*4 + 4) - var startLocations = make([]uint32, len(funcs)) - for i := range funcs { - size = rnd(size, int64(_PtrSize)) - //writePCToFunc - startLocations[i] = uint32(size) - size += int64(int(_FUNC_SIZE)+len(funcdataOffs[i])*4+len(pcdataOffs[i])*4) - } - - pclntab = make([]byte, size, size) - - // write a map of pc->func info offsets - offs := 0 - for i, f := range funcs { - byteOrder.PutUint32(pclntab[offs:offs+4], uint32(f.entryOff)) - byteOrder.PutUint32(pclntab[offs+4:offs+8], uint32(startLocations[i])) - offs += 8 - } - // Final entry of table is just end pc offset. - lastFunc := funcs[len(funcs)-1] - byteOrder.PutUint32(pclntab[offs:offs+4], uint32(lastFunc.entryOff+lastFuncSize)) - - // write func info table - for i, f := range funcs { - off := startLocations[i] - - // write _func structure to pclntab - fb := rt.BytesFrom(unsafe.Pointer(&f), int(_FUNC_SIZE), int(_FUNC_SIZE)) - copy(pclntab[off:off+uint32(_FUNC_SIZE)], fb) - off += uint32(_FUNC_SIZE) - - // NOTICE: _func.pcdata always starts from PcUnsafePoint, which is index 3 - for j := 3; j < len(pcdataOffs[i]); j++ { - byteOrder.PutUint32(pclntab[off:off+4], uint32(pcdataOffs[i][j])) - off += 4 - } - - // funcdata refs as offsets from gofunc - for _, funcdata := range funcdataOffs[i] { - byteOrder.PutUint32(pclntab[off:off+4], uint32(funcdata)) - off += 4 - } - - } - - return -} - -// findfunc table used to map pc to belonging func, -// returns the index in the func table. -// -// All text section are divided into buckets sized _BUCKETSIZE(4K): -// every bucket is divided into _SUBBUCKETS sized _SUB_BUCKETSIZE(64), -// and it has a base idx to plus the offset stored in jth subbucket. -// see findfunc() in runtime/symtab.go -func writeFindfunctab(out *[]byte, ftab []funcTab) (start int) { - start = len(*out) - - max := ftab[len(ftab)-1].entry - min := ftab[0].entry - nbuckets := (max - min + _BUCKETSIZE - 1) / _BUCKETSIZE - n := (max - min + _SUB_BUCKETSIZE - 1) / _SUB_BUCKETSIZE - - tab := make([]findfuncbucket, 0, nbuckets) - var s, e = 0, 0 - for i := 0; i 0 { - size := int(unsafe.Sizeof(findfuncbucket{}))*len(tab) - *out = append(*out, rt.BytesFrom(unsafe.Pointer(&tab[0]), size, size)...) - } - return -} - -func makeModuledata(name string, filenames []string, funcs []Func, text []byte) (mod *moduledata) { - mod = new(moduledata) - mod.modulename = name - - // make filename table - cu := make([]string, 0, len(filenames)) - for _, f := range filenames { - cu = append(cu, f) - } - cutab, filetab, cuOffs := makeFilenametab([]compilationUnit{{cu}}) - mod.cutab = cutab - mod.filetab = filetab - - // make funcname table - funcnametab, nameOffs := makeFuncnameTab(funcs) - mod.funcnametab = funcnametab - - // make pcdata table - // NOTICE: _func only use offset to index pcdata, thus no need mmap() pcdata - pctab, pcdataOffs, _funcs := makePctab(funcs, cuOffs, nameOffs) - mod.pctab = pctab - - // write func data - // NOTICE: _func use mod.gofunc+offset to directly point funcdata, thus need cache funcdata - // TODO: estimate accurate capacity - cache := make([]byte, 0, len(funcs)*int(_PtrSize)) - fstart, funcdataOffs := writeFuncdata(&cache, funcs) - - // make pc->func (binary search) func table - lastFuncsize := funcs[len(funcs)-1].TextSize - ftab := makeFtab(_funcs, lastFuncsize) - mod.ftab = ftab - - // write pc->func (modmap) findfunc table - ffstart := writeFindfunctab(&cache, ftab) - - // make pclnt table - pclntab := makePclntable(_funcs, lastFuncsize, pcdataOffs, funcdataOffs) - mod.pclntable = pclntab - - // mmap() text and funcdata segements - p := os.Getpagesize() - size := int(rnd(int64(len(text)), int64(p))) - addr := mmap(size) - // copy the machine code - s := rt.BytesFrom(unsafe.Pointer(addr), len(text), size) - copy(s, text) - // make it executable - mprotect(addr, size) - - // assign addresses - mod.text = addr - mod.etext = addr + uintptr(size) - mod.minpc = addr - mod.maxpc = addr + uintptr(len(text)) - - // cache funcdata and findfuncbucket - moduleCache.Lock() - moduleCache.m[mod] = cache - moduleCache.Unlock() - mod.gofunc = uintptr(unsafe.Pointer(&cache[fstart])) - mod.findfunctab = uintptr(unsafe.Pointer(&cache[ffstart])) - - // make pc header - mod.pcHeader = &pcHeader { - magic : _Magic, - minLC : _MinLC, - ptrSize : _PtrSize, - nfunc : len(funcs), - nfiles: uint(len(cu)), - textStart: mod.text, - funcnameOffset: getOffsetOf(moduledata{}, "funcnametab"), - cuOffset: getOffsetOf(moduledata{}, "cutab"), - filetabOffset: getOffsetOf(moduledata{}, "filetab"), - pctabOffset: getOffsetOf(moduledata{}, "pctab"), - pclnOffset: getOffsetOf(moduledata{}, "pclntable"), - } - - // sepecial case: gcdata and gcbss must by non-empty - mod.gcdata = uintptr(unsafe.Pointer(&emptyByte)) - mod.gcbss = uintptr(unsafe.Pointer(&emptyByte)) - - return -} - -// makePctab generates pcdelta->valuedelta tables for functions, -// and returns the table and the entry offset of every kind pcdata in the table. -func makePctab(funcs []Func, cuOffset []uint32, nameOffset []int32) (pctab []byte, pcdataOffs [][]uint32, _funcs []_func) { - _funcs = make([]_func, len(funcs)) - - // Pctab offsets of 0 are considered invalid in the runtime. We respect - // that by just padding a single byte at the beginning of runtime.pctab, - // that way no real offsets can be zero. - pctab = make([]byte, 1, 12*len(funcs)+1) - pcdataOffs = make([][]uint32, len(funcs)) - - for i, f := range funcs { - _f := &_funcs[i] - - var writer = func(pc *Pcdata) { - var ab []byte - var err error - if pc != nil { - ab, err = pc.MarshalBinary() - if err != nil { - panic(err) - } - pcdataOffs[i] = append(pcdataOffs[i], uint32(len(pctab))) - } else { - ab = []byte{0} - pcdataOffs[i] = append(pcdataOffs[i], _PCDATA_INVALID_OFFSET) - } - pctab = append(pctab, ab...) - } - - if f.Pcsp != nil { - _f.pcsp = uint32(len(pctab)) - } - writer(f.Pcsp) - if f.Pcfile != nil { - _f.pcfile = uint32(len(pctab)) - } - writer(f.Pcfile) - if f.Pcline != nil { - _f.pcln = uint32(len(pctab)) - } - writer(f.Pcline) - writer(f.PcUnsafePoint) - writer(f.PcStackMapIndex) - writer(f.PcInlTreeIndex) - writer(f.PcArgLiveIndex) - - _f.entryOff = f.EntryOff - _f.nameOff = nameOffset[i] - _f.args = f.ArgsSize - _f.deferreturn = f.DeferReturn - // NOTICE: _func.pcdata is always as [PCDATA_UnsafePoint(0) : PCDATA_ArgLiveIndex(3)] - _f.npcdata = uint32(_N_PCDATA) - _f.cuOffset = cuOffset[i] - _f.funcID = f.ID - _f.flag = f.Flag - _f.nfuncdata = uint8(_N_FUNCDATA) - } - - return -} - -func registerFunction(name string, pc uintptr, textSize uintptr, fp int, args int, size uintptr, argptrs uintptr, localptrs uintptr) {} \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/loader/funcdata_go121.go b/vendor/github.com/bytedance/sonic/loader/funcdata_go121.go new file mode 100644 index 0000000000..f50663e2ab --- /dev/null +++ b/vendor/github.com/bytedance/sonic/loader/funcdata_go121.go @@ -0,0 +1,119 @@ +//go:build go1.21 && !go1.22 +// +build go1.21,!go1.22 + +/* + * Copyright 2021 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package loader + +import ( + `unsafe` + `github.com/bytedance/sonic/internal/rt` +) + +const ( + _Magic uint32 = 0xFFFFFFF1 +) + +type moduledata struct { + pcHeader *pcHeader + funcnametab []byte + cutab []uint32 + filetab []byte + pctab []byte + pclntable []byte + ftab []funcTab + findfunctab uintptr + minpc, maxpc uintptr // first func address, last func address + last func size + + text, etext uintptr // start/end of text, (etext-text) must be greater than MIN_FUNC + noptrdata, enoptrdata uintptr + data, edata uintptr + bss, ebss uintptr + noptrbss, enoptrbss uintptr + covctrs, ecovctrs uintptr + end, gcdata, gcbss uintptr + types, etypes uintptr + rodata uintptr + gofunc uintptr // go.func.* is actual funcinfo object in image + + textsectmap []textSection // see runtime/symtab.go: textAddr() + typelinks []int32 // offsets from types + itablinks []*rt.GoItab + + ptab []ptabEntry + + pluginpath string + pkghashes []modulehash + + // This slice records the initializing tasks that need to be + // done to start up the program. It is built by the linker. + inittasks []unsafe.Pointer + + modulename string + modulehashes []modulehash + + hasmain uint8 // 1 if module contains the main function, 0 otherwise + + gcdatamask, gcbssmask bitVector + + typemap map[int32]*rt.GoType // offset to *_rtype in previous module + + bad bool // module failed to load and should be ignored + + next *moduledata +} + +type _func struct { + entryOff uint32 // start pc, as offset from moduledata.text/pcHeader.textStart + nameOff int32 // function name, as index into moduledata.funcnametab. + + args int32 // in/out args size + deferreturn uint32 // offset of start of a deferreturn call instruction from entry, if any. + + pcsp uint32 + pcfile uint32 + pcln uint32 + npcdata uint32 + cuOffset uint32 // runtime.cutab offset of this function's CU + startLine int32 // line number of start of function (func keyword/TEXT directive) + funcID uint8 // set for certain special runtime functions + flag uint8 + _ [1]byte // pad + nfuncdata uint8 // + + // The end of the struct is followed immediately by two variable-length + // arrays that reference the pcdata and funcdata locations for this + // function. + + // pcdata contains the offset into moduledata.pctab for the start of + // that index's table. e.g., + // &moduledata.pctab[_func.pcdata[_PCDATA_UnsafePoint]] is the start of + // the unsafe point table. + // + // An offset of 0 indicates that there is no table. + // + // pcdata [npcdata]uint32 + + // funcdata contains the offset past moduledata.gofunc which contains a + // pointer to that index's funcdata. e.g., + // *(moduledata.gofunc + _func.funcdata[_FUNCDATA_ArgsPointerMaps]) is + // the argument pointer map. + // + // An offset of ^uint32(0) indicates that there is no entry. + // + // funcdata [nfuncdata]uint32 +} diff --git a/vendor/github.com/bytedance/sonic/loader/funcdata_latest.go b/vendor/github.com/bytedance/sonic/loader/funcdata_latest.go new file mode 100644 index 0000000000..52c6097fbf --- /dev/null +++ b/vendor/github.com/bytedance/sonic/loader/funcdata_latest.go @@ -0,0 +1,355 @@ +// go:build go1.18 && !go1.22 +// +build go1.18,!go1.22 + +/* + * Copyright 2021 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package loader + +import ( + `os` + `sort` + `unsafe` + + `github.com/bytedance/sonic/internal/rt` +) + +type funcTab struct { + entry uint32 + funcoff uint32 +} + +type pcHeader struct { + magic uint32 // 0xFFFFFFF0 + pad1, pad2 uint8 // 0,0 + minLC uint8 // min instruction size + ptrSize uint8 // size of a ptr in bytes + nfunc int // number of functions in the module + nfiles uint // number of entries in the file tab + textStart uintptr // base for function entry PC offsets in this module, equal to moduledata.text + funcnameOffset uintptr // offset to the funcnametab variable from pcHeader + cuOffset uintptr // offset to the cutab variable from pcHeader + filetabOffset uintptr // offset to the filetab variable from pcHeader + pctabOffset uintptr // offset to the pctab variable from pcHeader + pclnOffset uintptr // offset to the pclntab variable from pcHeader +} + +type bitVector struct { + n int32 // # of bits + bytedata *uint8 +} + +type ptabEntry struct { + name int32 + typ int32 +} + +type textSection struct { + vaddr uintptr // prelinked section vaddr + end uintptr // vaddr + section length + baseaddr uintptr // relocated section address +} + +type modulehash struct { + modulename string + linktimehash string + runtimehash *string +} + +// findfuncbucket is an array of these structures. +// Each bucket represents 4096 bytes of the text segment. +// Each subbucket represents 256 bytes of the text segment. +// To find a function given a pc, locate the bucket and subbucket for +// that pc. Add together the idx and subbucket value to obtain a +// function index. Then scan the functab array starting at that +// index to find the target function. +// This table uses 20 bytes for every 4096 bytes of code, or ~0.5% overhead. +type findfuncbucket struct { + idx uint32 + _SUBBUCKETS [16]byte +} + +type compilationUnit struct { + fileNames []string +} + +func makeFtab(funcs []_func, maxpc uint32) (ftab []funcTab, pclntabSize int64, startLocations []uint32) { + // Allocate space for the pc->func table. This structure consists of a pc offset + // and an offset to the func structure. After that, we have a single pc + // value that marks the end of the last function in the binary. + pclntabSize = int64(len(funcs)*2*int(_PtrSize) + int(_PtrSize)) + startLocations = make([]uint32, len(funcs)) + for i, f := range funcs { + pclntabSize = rnd(pclntabSize, int64(_PtrSize)) + //writePCToFunc + startLocations[i] = uint32(pclntabSize) + pclntabSize += int64(uint8(_FUNC_SIZE)+f.nfuncdata*4+uint8(f.npcdata)*4) + } + + ftab = make([]funcTab, 0, len(funcs)+1) + + // write a map of pc->func info offsets + for i, f := range funcs { + ftab = append(ftab, funcTab{uint32(f.entryOff), uint32(startLocations[i])}) + } + + // Final entry of table is just end pc offset. + ftab = append(ftab, funcTab{maxpc, 0}) + return +} + +// Pcln table format: [...]funcTab + [...]_Func +func makePclntable(size int64, startLocations []uint32, funcs []_func, maxpc uint32, pcdataOffs [][]uint32, funcdataOffs [][]uint32) (pclntab []byte) { + // Allocate space for the pc->func table. This structure consists of a pc offset + // and an offset to the func structure. After that, we have a single pc + // value that marks the end of the last function in the binary. + pclntab = make([]byte, size, size) + + // write a map of pc->func info offsets + offs := 0 + for i, f := range funcs { + byteOrder.PutUint32(pclntab[offs:offs+4], uint32(f.entryOff)) + byteOrder.PutUint32(pclntab[offs+4:offs+8], uint32(startLocations[i])) + offs += 8 + } + // Final entry of table is just end pc offset. + byteOrder.PutUint32(pclntab[offs:offs+4], maxpc) + + // write func info table + for i := range funcs { + off := startLocations[i] + + // write _func structure to pclntab + fb := rt.BytesFrom(unsafe.Pointer(&funcs[i]), int(_FUNC_SIZE), int(_FUNC_SIZE)) + copy(pclntab[off:off+uint32(_FUNC_SIZE)], fb) + off += uint32(_FUNC_SIZE) + + // NOTICE: _func.pcdata always starts from PcUnsafePoint, which is index 3 + for j := 3; j < len(pcdataOffs[i]); j++ { + byteOrder.PutUint32(pclntab[off:off+4], uint32(pcdataOffs[i][j])) + off += 4 + } + + // funcdata refs as offsets from gofunc + for _, funcdata := range funcdataOffs[i] { + byteOrder.PutUint32(pclntab[off:off+4], uint32(funcdata)) + off += 4 + } + + } + + return +} + +// findfunc table used to map pc to belonging func, +// returns the index in the func table. +// +// All text section are divided into buckets sized _BUCKETSIZE(4K): +// every bucket is divided into _SUBBUCKETS sized _SUB_BUCKETSIZE(64), +// and it has a base idx to plus the offset stored in jth subbucket. +// see findfunc() in runtime/symtab.go +func writeFindfunctab(out *[]byte, ftab []funcTab) (start int) { + start = len(*out) + + max := ftab[len(ftab)-1].entry + min := ftab[0].entry + nbuckets := (max - min + _BUCKETSIZE - 1) / _BUCKETSIZE + n := (max - min + _SUB_BUCKETSIZE - 1) / _SUB_BUCKETSIZE + + tab := make([]findfuncbucket, 0, nbuckets) + var s, e = 0, 0 + for i := 0; i 0 { + size := int(unsafe.Sizeof(findfuncbucket{}))*len(tab) + *out = append(*out, rt.BytesFrom(unsafe.Pointer(&tab[0]), size, size)...) + } + return +} + +func makeModuledata(name string, filenames []string, funcsp *[]Func, text []byte) (mod *moduledata) { + mod = new(moduledata) + mod.modulename = name + + // sort funcs by entry + funcs := *funcsp + sort.Slice(funcs, func(i, j int) bool { + return funcs[i].EntryOff < funcs[j].EntryOff + }) + *funcsp = funcs + + // make filename table + cu := make([]string, 0, len(filenames)) + cu = append(cu, filenames...) + cutab, filetab, cuOffs := makeFilenametab([]compilationUnit{{cu}}) + mod.cutab = cutab + mod.filetab = filetab + + // make funcname table + funcnametab, nameOffs := makeFuncnameTab(funcs) + mod.funcnametab = funcnametab + + // mmap() text and funcdata segements + p := os.Getpagesize() + size := int(rnd(int64(len(text)), int64(p))) + addr := mmap(size) + // copy the machine code + s := rt.BytesFrom(unsafe.Pointer(addr), len(text), size) + copy(s, text) + // make it executable + mprotect(addr, size) + + // assign addresses + mod.text = addr + mod.etext = addr + uintptr(size) + mod.minpc = addr + mod.maxpc = addr + uintptr(len(text)) + + // make pcdata table + // NOTICE: _func only use offset to index pcdata, thus no need mmap() pcdata + cuOff := cuOffs[0] + pctab, pcdataOffs, _funcs := makePctab(funcs, cuOff, nameOffs) + mod.pctab = pctab + + // write func data + // NOTICE: _func use mod.gofunc+offset to directly point funcdata, thus need cache funcdata + // TODO: estimate accurate capacity + cache := make([]byte, 0, len(funcs)*int(_PtrSize)) + fstart, funcdataOffs := writeFuncdata(&cache, funcs) + + // make pc->func (binary search) func table + ftab, pclntSize, startLocations := makeFtab(_funcs, uint32(len(text))) + mod.ftab = ftab + + // write pc->func (modmap) findfunc table + ffstart := writeFindfunctab(&cache, ftab) + + // cache funcdata and findfuncbucket + moduleCache.Lock() + moduleCache.m[mod] = cache + moduleCache.Unlock() + mod.gofunc = uintptr(unsafe.Pointer(&cache[fstart])) + mod.findfunctab = uintptr(unsafe.Pointer(&cache[ffstart])) + + // make pclnt table + pclntab := makePclntable(pclntSize, startLocations, _funcs, uint32(len(text)), pcdataOffs, funcdataOffs) + mod.pclntable = pclntab + + // make pc header + mod.pcHeader = &pcHeader { + magic : _Magic, + minLC : _MinLC, + ptrSize : _PtrSize, + nfunc : len(funcs), + nfiles: uint(len(cu)), + textStart: mod.text, + funcnameOffset: getOffsetOf(moduledata{}, "funcnametab"), + cuOffset: getOffsetOf(moduledata{}, "cutab"), + filetabOffset: getOffsetOf(moduledata{}, "filetab"), + pctabOffset: getOffsetOf(moduledata{}, "pctab"), + pclnOffset: getOffsetOf(moduledata{}, "pclntable"), + } + + // sepecial case: gcdata and gcbss must by non-empty + mod.gcdata = uintptr(unsafe.Pointer(&emptyByte)) + mod.gcbss = uintptr(unsafe.Pointer(&emptyByte)) + + return +} + +// makePctab generates pcdelta->valuedelta tables for functions, +// and returns the table and the entry offset of every kind pcdata in the table. +func makePctab(funcs []Func, cuOffset uint32, nameOffset []int32) (pctab []byte, pcdataOffs [][]uint32, _funcs []_func) { + _funcs = make([]_func, len(funcs)) + + // Pctab offsets of 0 are considered invalid in the runtime. We respect + // that by just padding a single byte at the beginning of runtime.pctab, + // that way no real offsets can be zero. + pctab = make([]byte, 1, 12*len(funcs)+1) + pcdataOffs = make([][]uint32, len(funcs)) + + for i, f := range funcs { + _f := &_funcs[i] + + var writer = func(pc *Pcdata) { + var ab []byte + var err error + if pc != nil { + ab, err = pc.MarshalBinary() + if err != nil { + panic(err) + } + pcdataOffs[i] = append(pcdataOffs[i], uint32(len(pctab))) + } else { + ab = []byte{0} + pcdataOffs[i] = append(pcdataOffs[i], _PCDATA_INVALID_OFFSET) + } + pctab = append(pctab, ab...) + } + + if f.Pcsp != nil { + _f.pcsp = uint32(len(pctab)) + } + writer(f.Pcsp) + if f.Pcfile != nil { + _f.pcfile = uint32(len(pctab)) + } + writer(f.Pcfile) + if f.Pcline != nil { + _f.pcln = uint32(len(pctab)) + } + writer(f.Pcline) + writer(f.PcUnsafePoint) + writer(f.PcStackMapIndex) + writer(f.PcInlTreeIndex) + writer(f.PcArgLiveIndex) + + _f.entryOff = f.EntryOff + _f.nameOff = nameOffset[i] + _f.args = f.ArgsSize + _f.deferreturn = f.DeferReturn + // NOTICE: _func.pcdata is always as [PCDATA_UnsafePoint(0) : PCDATA_ArgLiveIndex(3)] + _f.npcdata = uint32(_N_PCDATA) + _f.cuOffset = cuOffset + _f.funcID = f.ID + _f.flag = f.Flag + _f.nfuncdata = uint8(_N_FUNCDATA) + } + + return +} + +func registerFunction(name string, pc uintptr, textSize uintptr, fp int, args int, size uintptr, argptrs uintptr, localptrs uintptr) {} diff --git a/vendor/github.com/bytedance/sonic/loader/loader.go b/vendor/github.com/bytedance/sonic/loader/loader.go index 929d8c23d3..43eaeb459b 100644 --- a/vendor/github.com/bytedance/sonic/loader/loader.go +++ b/vendor/github.com/bytedance/sonic/loader/loader.go @@ -34,4 +34,4 @@ type Loader struct { Name string // module name File string // file name Options -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/loader/loader_go116.go b/vendor/github.com/bytedance/sonic/loader/loader_latest.go similarity index 88% rename from vendor/github.com/bytedance/sonic/loader/loader_go116.go rename to vendor/github.com/bytedance/sonic/loader/loader_latest.go index ea30ec9a52..b6e3e75f86 100644 --- a/vendor/github.com/bytedance/sonic/loader/loader_go116.go +++ b/vendor/github.com/bytedance/sonic/loader/loader_latest.go @@ -1,5 +1,5 @@ -//go:build go1.16 && !go1.21 -// +build go1.16,!go1.21 +//go:build go1.16 && !go1.22 +// +build go1.16,!go1.22 /* * Copyright 2021 ByteDance Inc. @@ -87,18 +87,27 @@ func (self Loader) LoadOne(text []byte, funcName string, frameSize int, argSize // and returns runnable function pointer // WARN: this API is experimental, use it carefully func Load(text []byte, funcs []Func, modulename string, filenames []string) (out []Function) { + ids := make([]string, len(funcs)) + for i, f := range funcs { + ids[i] = f.Name + } // generate module data and allocate memory address - mod := makeModuledata(modulename, filenames, funcs, text) + mod := makeModuledata(modulename, filenames, &funcs, text) // verify and register the new module moduledataverify1(mod) registerModule(mod) + // // encapsulate function address out = make([]Function, len(funcs)) - for i, f := range funcs { - m := uintptr(mod.text + uintptr(f.EntryOff)) - out[i] = Function(&m) + for i, s := range ids { + for _, f := range funcs { + if f.Name == s { + m := uintptr(mod.text + uintptr(f.EntryOff)) + out[i] = Function(&m) + } + } } return -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/loader/mmap_unix.go b/vendor/github.com/bytedance/sonic/loader/mmap_unix.go index 50b80bf200..3ea944ed6a 100644 --- a/vendor/github.com/bytedance/sonic/loader/mmap_unix.go +++ b/vendor/github.com/bytedance/sonic/loader/mmap_unix.go @@ -42,4 +42,4 @@ func mprotect(p uintptr, nb int) { if _, _, err := syscall.RawSyscall(syscall.SYS_MPROTECT, p, uintptr(nb), _RX); err != 0 { panic(err) } -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/loader/pcdata.go b/vendor/github.com/bytedance/sonic/loader/pcdata.go index b5c62d17bc..efab4dac32 100644 --- a/vendor/github.com/bytedance/sonic/loader/pcdata.go +++ b/vendor/github.com/bytedance/sonic/loader/pcdata.go @@ -16,6 +16,10 @@ package loader +import ( + `encoding/binary` +) + const ( _N_PCDATA = 4 @@ -49,40 +53,16 @@ const ( var emptyByte byte -func encodeValue(v int) []byte { - return encodeVariant(toZigzag(v)) -} - -func toZigzag(v int) int { - return (v << 1) ^ (v >> 31) -} - -func encodeVariant(v int) []byte { - var u int - var r []byte - - /* split every 7 bits */ - for v > 127 { - u = v & 0x7f - v = v >> 7 - r = append(r, byte(u) | 0x80) - } - - /* check for last one */ - if v == 0 { - return r - } - - /* add the last one */ - r = append(r, byte(v)) - return r -} - +// Pcvalue is the program count corresponding to the value Val +// WARN: we use relative value here (to function entry) type Pcvalue struct { - PC uint32 // PC offset from func entry - Val int32 + PC uint32 // program count relative to function entry + Val int32 // value relative to the value in function entry } +// Pcdata represents pc->value mapping table. +// WARN: we use ** [Pcdata[i].PC, Pcdata[i+1].PC) ** +// as the range where the Pcdata[i].Val is effective. type Pcdata []Pcvalue // see https://docs.google.com/document/d/1lyPIbmsYbXnpNj57a261hgOYVpNRcgydurVQIyZOz_o/pub @@ -90,11 +70,24 @@ func (self Pcdata) MarshalBinary() (data []byte, err error) { // delta value always starts from -1 sv := int32(_PCDATA_START_VAL) sp := uint32(0) + buf := make([]byte, binary.MaxVarintLen32) for _, v := range self { - data = append(data, encodeVariant(toZigzag(int(v.Val - sv)))...) - data = append(data, encodeVariant(int(v.PC - sp))...) + if v.PC < sp { + panic("PC must be in ascending order!") + } + dp := uint64(v.PC - sp) + dv := int64(v.Val - sv) + if dv == 0 || dp == 0 { + continue + } + n := binary.PutVarint(buf, dv) + data = append(data, buf[:n]...) + n2 := binary.PutUvarint(buf, dp) + data = append(data, buf[:n2]...) sp = v.PC sv = v.Val } + // put 0 to indicate ends + data = append(data, 0) return -} \ No newline at end of file +} diff --git a/vendor/github.com/bytedance/sonic/loader/wrapper.go b/vendor/github.com/bytedance/sonic/loader/wrapper.go new file mode 100644 index 0000000000..73ebc35187 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/loader/wrapper.go @@ -0,0 +1,185 @@ +/** +* Copyright 2023 ByteDance Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package loader + +import ( + `reflect` + `unsafe` + + `github.com/bytedance/sonic/internal/abi` + `github.com/bytedance/sonic/internal/rt` +) + +var _C_Redzone = []bool{false, false, false, false} + +// CFunc is a function information for C func +type CFunc struct { + // C function name + Name string + + // entry pc relative to entire text segment + EntryOff uint32 + + // function text size in bytes + TextSize uint32 + + // maximum stack depth of the function + MaxStack uintptr + + // PC->SP delta lists of the function + Pcsp [][2]uint32 +} + +// GoC is the wrapper for Go calls to C +type GoC struct { + // CName is the name of corresponding C function + CName string + + // CEntry points out where to store the entry address of corresponding C function. + // It won't be set if nil + CEntry *uintptr + + // GoFunc is the POINTER of corresponding go stub function. + // It is used to generate Go-C ABI conversion wrapper and receive the wrapper's address + // eg. &func(a int, b int) int + // FOR + // int add(int a, int b) + // It won't be set if nil + GoFunc interface{} +} + +// WrapGoC wraps C functions and loader it into Go stubs +func WrapGoC(text []byte, natives []CFunc, stubs []GoC, modulename string, filename string) { + funcs := make([]Func, len(natives)) + + // register C funcs + for i, f := range natives { + fn := Func{ + Flag: FuncFlag_ASM, + EntryOff: f.EntryOff, + TextSize: f.TextSize, + Name: f.Name, + } + if len(f.Pcsp) != 0 { + fn.Pcsp = (*Pcdata)(unsafe.Pointer(&natives[i].Pcsp)) + } + // NOTICE: always forbid async preempt + fn.PcUnsafePoint = &Pcdata{ + {PC: f.TextSize, Val: PCDATA_UnsafePointUnsafe}, + } + // NOTICE: always refer to first file + fn.Pcfile = &Pcdata{ + {PC: f.TextSize, Val: 0}, + } + // NOTICE: always refer to first line + fn.Pcline = &Pcdata{ + {PC: f.TextSize, Val: 1}, + } + // NOTICE: copystack need locals stackmap + fn.PcStackMapIndex = &Pcdata{ + {PC: f.TextSize, Val: 0}, + } + sm := rt.StackMapBuilder{} + sm.AddField(false) + fn.ArgsPointerMaps = sm.Build() + fn.LocalsPointerMaps = sm.Build() + funcs[i] = fn + } + rets := Load(text, funcs, modulename, []string{filename}) + + // got absolute entry address + native_entry := **(**uintptr)(unsafe.Pointer(&rets[0])) + // println("native_entry: ", native_entry) + + wraps := make([]Func, 0, len(stubs)) + wrapIds := make([]int, 0, len(stubs)) + code := make([]byte, 0, len(wraps)) + entryOff := uint32(0) + + // register go wrappers + for i := range stubs { + for j := range natives { + if stubs[i].CName != natives[j].Name { + continue + } + + // calculate corresponding C entry + pc := uintptr(native_entry + uintptr(natives[j].EntryOff)) + if stubs[i].CEntry != nil { + *stubs[i].CEntry = pc + } + + // no need to generate wrapper, continue next + if stubs[i].GoFunc == nil { + continue + } + + // assemble wrapper codes + layout := abi.NewFunctionLayout(reflect.TypeOf(stubs[i].GoFunc).Elem()) + frame := abi.NewFrame(&layout, _C_Redzone, true) + tcode := abi.CallC(pc, frame, natives[j].MaxStack) + code = append(code, tcode...) + size := uint32(len(tcode)) + + fn := Func{ + Flag: FuncFlag_ASM, + ArgsSize: int32(layout.ArgSize()), + EntryOff: entryOff, + TextSize: size, + Name: stubs[i].CName + "_go", + } + + // add check-stack and grow-stack texts' pcsp + fn.Pcsp = &Pcdata{ + {PC: uint32(frame.StackCheckTextSize()), Val: 0}, + {PC: size - uint32(frame.GrowStackTextSize()), Val: int32(frame.Size())}, + {PC: size, Val: 0}, + } + // NOTICE: always refer to first file + fn.Pcfile = &Pcdata{ + {PC: size, Val: 0}, + } + // NOTICE: always refer to first line + fn.Pcline = &Pcdata{ + {PC: size, Val: 1}, + } + // NOTICE: always forbid async preempt + fn.PcUnsafePoint = &Pcdata{ + {PC: size, Val: PCDATA_UnsafePointUnsafe}, + } + + // register pointer stackmaps + fn.PcStackMapIndex = &Pcdata{ + {PC: size, Val: 0}, + } + fn.ArgsPointerMaps = frame.ArgPtrs() + fn.LocalsPointerMaps = frame.LocalPtrs() + + entryOff += size + wraps = append(wraps, fn) + wrapIds = append(wrapIds, i) + } + } + gofuncs := Load(code, wraps, modulename+"/go", []string{filename+".go"}) + + // set go func value + for i := range gofuncs { + idx := wrapIds[i] + w := rt.UnpackEface(stubs[idx].GoFunc) + *(*Function)(w.Value) = gofuncs[i] + } +} diff --git a/vendor/github.com/bytedance/sonic/sonic.go b/vendor/github.com/bytedance/sonic/sonic.go index 6cbb1ad412..58edb28294 100644 --- a/vendor/github.com/bytedance/sonic/sonic.go +++ b/vendor/github.com/bytedance/sonic/sonic.go @@ -1,4 +1,4 @@ -// +build amd64,go1.15,!go1.21 +// +build amd64,go1.16,!go1.22 /* * Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/utf8/utf8.go b/vendor/github.com/bytedance/sonic/utf8/utf8.go index 59d2caefe2..52c35fb280 100644 --- a/vendor/github.com/bytedance/sonic/utf8/utf8.go +++ b/vendor/github.com/bytedance/sonic/utf8/utf8.go @@ -68,4 +68,4 @@ func Validate(src []byte) bool { // ValidateString as Validate, but for string. func ValidateString(src string) bool { return native.ValidateUTF8Fast(&src) == 0 -} \ No newline at end of file +} diff --git a/vendor/github.com/chenzhuoyu/base64x/Makefile b/vendor/github.com/chenzhuoyu/base64x/Makefile index 436d8bafdf..a0793f485f 100644 --- a/vendor/github.com/chenzhuoyu/base64x/Makefile +++ b/vendor/github.com/chenzhuoyu/base64x/Makefile @@ -19,10 +19,11 @@ NATIVE_SRC += $(wildcard native/*.c) all: native_amd64.s clean: - rm -vf native_amd64.s output/*.s + rm -vf native_text_amd64.go native_subr_amd64.go output/*.s native_amd64.s: ${NATIVE_SRC} ${NATIVE_ASM} native_amd64.go mkdir -p output clang ${CFLAGS} -S -o output/native.s native/native.c - python3 tools/asm2asm/asm2asm.py native_amd64.s output/native.s ${NATIVE_ASM} - asmfmt -w native_amd64.s + python3 tools/asm2asm/asm2asm.py -r native_amd64.go output/native.s ${NATIVE_ASM} + awk '{gsub(/Text__native_entry__/, "text__native_entry__")}1' native_text_amd64.go > native_text_amd64.go.tmp && mv native_text_amd64.go.tmp native_text_amd64.go + awk '{gsub(/Funcs/, "funcs")}1' native_subr_amd64.go > native_subr_amd64.go.tmp && mv native_subr_amd64.go.tmp native_subr_amd64.go diff --git a/vendor/github.com/chenzhuoyu/base64x/base64x.go b/vendor/github.com/chenzhuoyu/base64x/base64x.go index 3d457176b8..f0746fce49 100644 --- a/vendor/github.com/chenzhuoyu/base64x/base64x.go +++ b/vendor/github.com/chenzhuoyu/base64x/base64x.go @@ -71,7 +71,7 @@ func (self Encoding) Encode(out []byte, src []byte) { // // It will also update the length of out. func (self Encoding) EncodeUnsafe(out *[]byte, src []byte) { - __b64encode(out, &src, int(self) | archFlags) + b64encode(out, &src, int(self) | archFlags) } // EncodeToString returns the base64 encoding of src. @@ -120,7 +120,7 @@ func (self Encoding) Decode(out []byte, src []byte) (int, error) { // // It will also update the length of out. func (self Encoding) DecodeUnsafe(out *[]byte, src []byte) (int, error) { - if n := __b64decode(out, mem2addr(src), len(src), int(self) | archFlags); n >= 0 { + if n := b64decode(out, mem2addr(src), len(src), int(self) | archFlags); n >= 0 { return n, nil } else { return 0, base64.CorruptInputError(-n - 1) @@ -149,9 +149,3 @@ func (self Encoding) DecodedLen(n int) int { return n * 6 / 8 } } - -func init() { - if hasAVX2() { - archFlags = _MODE_AVX2 - } -} diff --git a/vendor/github.com/chenzhuoyu/base64x/cpuid.go b/vendor/github.com/chenzhuoyu/base64x/cpuid.go index a768c768d5..68ba613319 100644 --- a/vendor/github.com/chenzhuoyu/base64x/cpuid.go +++ b/vendor/github.com/chenzhuoyu/base64x/cpuid.go @@ -14,4 +14,4 @@ func hasAVX2() bool { case "noavx2" : return false default : panic(fmt.Sprintf("invalid mode: '%s', should be one of 'auto', 'noavx2'", v)) } -} \ No newline at end of file +} diff --git a/vendor/github.com/chenzhuoyu/base64x/faststr.go b/vendor/github.com/chenzhuoyu/base64x/faststr.go index 83b58ea1f8..7334b063bd 100644 --- a/vendor/github.com/chenzhuoyu/base64x/faststr.go +++ b/vendor/github.com/chenzhuoyu/base64x/faststr.go @@ -21,3 +21,15 @@ func str2mem(s string) (v []byte) { func mem2addr(v []byte) unsafe.Pointer { return *(*unsafe.Pointer)(unsafe.Pointer(&v)) } + +// NoEscape hides a pointer from escape analysis. NoEscape is +// the identity function but escape analysis doesn't think the +// output depends on the input. NoEscape is inlined and currently +// compiles down to zero instructions. +// USE CAREFULLY! +//go:nosplit +//goland:noinspection GoVetUnsafePointer +func noEscape(p unsafe.Pointer) unsafe.Pointer { + x := uintptr(p) + return unsafe.Pointer(x ^ 0) +} diff --git a/vendor/github.com/chenzhuoyu/base64x/native_amd64.go b/vendor/github.com/chenzhuoyu/base64x/native_amd64.go index a6f95575ae..39a9161239 100644 --- a/vendor/github.com/chenzhuoyu/base64x/native_amd64.go +++ b/vendor/github.com/chenzhuoyu/base64x/native_amd64.go @@ -3,14 +3,40 @@ package base64x import ( `unsafe` + + `github.com/bytedance/sonic/loader` ) //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __b64encode(out *[]byte, src *[]byte, mode int) +func b64encode(out *[]byte, src *[]byte, mode int) { + __b64encode(noEscape(unsafe.Pointer(out)), noEscape(unsafe.Pointer(src)), mode) +} //go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __b64decode(out *[]byte, src unsafe.Pointer, len int, mode int) (ret int) +func b64decode(out *[]byte, src unsafe.Pointer, len int, mode int) (ret int) { + return __b64decode(noEscape(unsafe.Pointer(out)), noEscape(unsafe.Pointer(src)), len, mode) +} + +// asm2asm templates +var ( + __b64encode func(out unsafe.Pointer, src unsafe.Pointer, mod int) + __b64decode func(out unsafe.Pointer, src unsafe.Pointer, len int, mod int) (ret int) +) + +// directly jump PCs +var ( + _subr__b64encode uintptr + _subr__b64decode uintptr +) + +var stubs = []loader.GoC{ + {"_b64encode", &_subr__b64encode, &__b64encode}, + {"_b64decode", &_subr__b64decode, &__b64decode}, +} + +func init() { + if hasAVX2() { + archFlags = _MODE_AVX2 + } + loader.WrapGoC(text__native_entry__, funcs, stubs, "base64x", "base64x/native.c") +} diff --git a/vendor/github.com/chenzhuoyu/base64x/native_amd64.s b/vendor/github.com/chenzhuoyu/base64x/native_amd64.s deleted file mode 100644 index 7f7a587206..0000000000 --- a/vendor/github.com/chenzhuoyu/base64x/native_amd64.s +++ /dev/null @@ -1,4416 +0,0 @@ -// +build !noasm !appengine -// Code generated by asm2asm, DO NOT EDIT. - -#include "go_asm.h" -#include "funcdata.h" -#include "textflag.h" - -TEXT ·__native_entry__(SB), NOSPLIT, $0 - NO_LOCAL_POINTERS - LONG $0xf9058d48; WORD $0xffff; BYTE $0xff // leaq $-7(%rip), %rax - MOVQ AX, 8(SP) - RET - -LCPI0_0: - BYTE $0x47 // .byte 71 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xed // .byte 237 - BYTE $0xf0 // .byte 240 - BYTE $0x41 // .byte 65 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x47 // .byte 71 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xed // .byte 237 - BYTE $0xf0 // .byte 240 - BYTE $0x41 // .byte 65 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - -LCPI0_1: - BYTE $0x47 // .byte 71 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xef // .byte 239 - BYTE $0x20 // .byte 32 - BYTE $0x41 // .byte 65 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x47 // .byte 71 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xfc // .byte 252 - BYTE $0xef // .byte 239 - BYTE $0x20 // .byte 32 - BYTE $0x41 // .byte 65 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - -LCPI0_2: - BYTE $0x01 // .byte 1 - BYTE $0x00 // .byte 0 - BYTE $0x02 // .byte 2 - BYTE $0x01 // .byte 1 - BYTE $0x04 // .byte 4 - BYTE $0x03 // .byte 3 - BYTE $0x05 // .byte 5 - BYTE $0x04 // .byte 4 - BYTE $0x07 // .byte 7 - BYTE $0x06 // .byte 6 - BYTE $0x08 // .byte 8 - BYTE $0x07 // .byte 7 - BYTE $0x0a // .byte 10 - BYTE $0x09 // .byte 9 - BYTE $0x0b // .byte 11 - BYTE $0x0a // .byte 10 - BYTE $0x01 // .byte 1 - BYTE $0x00 // .byte 0 - BYTE $0x02 // .byte 2 - BYTE $0x01 // .byte 1 - BYTE $0x04 // .byte 4 - BYTE $0x03 // .byte 3 - BYTE $0x05 // .byte 5 - BYTE $0x04 // .byte 4 - BYTE $0x07 // .byte 7 - BYTE $0x06 // .byte 6 - BYTE $0x08 // .byte 8 - BYTE $0x07 // .byte 7 - BYTE $0x0a // .byte 10 - BYTE $0x09 // .byte 9 - BYTE $0x0b // .byte 11 - BYTE $0x0a // .byte 10 - -LCPI0_3: - WORD $0xfc00 // .word 64512 - WORD $0x0fc0 // .word 4032 - WORD $0xfc00 // .word 64512 - WORD $0x0fc0 // .word 4032 - WORD $0xfc00 // .word 64512 - WORD $0x0fc0 // .word 4032 - WORD $0xfc00 // .word 64512 - WORD $0x0fc0 // .word 4032 - WORD $0xfc00 // .word 64512 - WORD $0x0fc0 // .word 4032 - WORD $0xfc00 // .word 64512 - WORD $0x0fc0 // .word 4032 - WORD $0xfc00 // .word 64512 - WORD $0x0fc0 // .word 4032 - WORD $0xfc00 // .word 64512 - WORD $0x0fc0 // .word 4032 - -LCPI0_4: - WORD $0x0040 // .word 64 - WORD $0x0400 // .word 1024 - WORD $0x0040 // .word 64 - WORD $0x0400 // .word 1024 - WORD $0x0040 // .word 64 - WORD $0x0400 // .word 1024 - WORD $0x0040 // .word 64 - WORD $0x0400 // .word 1024 - WORD $0x0040 // .word 64 - WORD $0x0400 // .word 1024 - WORD $0x0040 // .word 64 - WORD $0x0400 // .word 1024 - WORD $0x0040 // .word 64 - WORD $0x0400 // .word 1024 - WORD $0x0040 // .word 64 - WORD $0x0400 // .word 1024 - -LCPI0_5: - WORD $0x03f0 // .word 1008 - WORD $0x003f // .word 63 - WORD $0x03f0 // .word 1008 - WORD $0x003f // .word 63 - WORD $0x03f0 // .word 1008 - WORD $0x003f // .word 63 - WORD $0x03f0 // .word 1008 - WORD $0x003f // .word 63 - WORD $0x03f0 // .word 1008 - WORD $0x003f // .word 63 - WORD $0x03f0 // .word 1008 - WORD $0x003f // .word 63 - WORD $0x03f0 // .word 1008 - WORD $0x003f // .word 63 - WORD $0x03f0 // .word 1008 - WORD $0x003f // .word 63 - -LCPI0_6: - QUAD $0x1a1a1a1a1a1a1a1a; QUAD $0x1a1a1a1a1a1a1a1a // .space 16, '\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a' - QUAD $0x1a1a1a1a1a1a1a1a; QUAD $0x1a1a1a1a1a1a1a1a // .space 16, '\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a' - -LCPI0_7: - QUAD $0x3333333333333333; QUAD $0x3333333333333333 // .space 16, '3333333333333333' - QUAD $0x3333333333333333; QUAD $0x3333333333333333 // .space 16, '3333333333333333' - -LCPI0_8: - QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' - QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' - -_b64encode: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - MOVQ 8(SI), R9 - TESTQ R9, R9 - JE LBB0_29 - MOVQ 0(DI), R8 - MOVQ 0(SI), R12 - ADDQ R12, R9 - LEAQ -28(R9), SI - LONG $0x610d8d48; WORD $0x002f; BYTE $0x00 // leaq $12129(%rip), %rcx /* _TabEncodeCharsetStd(%rip) */ - LONG $0x9a1d8d4c; WORD $0x002f; BYTE $0x00 // leaq $12186(%rip), %r11 /* _TabEncodeCharsetURL(%rip) */ - TESTB $1, DX - LONG $0xd9440f4c // cmoveq %rcx, %r11 - JE LBB0_2 - QUAD $0xfffffebc056ffec5 // vmovdqu $-324(%rip), %ymm0 /* LCPI0_1(%rip) */ - JMP LBB0_4 - -LBB0_2: - QUAD $0xfffffe92056ffec5 // vmovdqu $-366(%rip), %ymm0 /* LCPI0_0(%rip) */ - -LBB0_4: - ADDQ 8(DI), R8 - MOVL DX, R10 - ANDL $4, R10 - CMPQ R12, SI - JA LBB0_5 - TESTL R10, R10 - JE LBB0_7 - QUAD $0xfffffead0d6ffec5 // vmovdqu $-339(%rip), %ymm1 /* LCPI0_2(%rip) */ - QUAD $0xfffffec5156ffec5 // vmovdqu $-315(%rip), %ymm2 /* LCPI0_3(%rip) */ - QUAD $0xfffffedd1d6ffec5 // vmovdqu $-291(%rip), %ymm3 /* LCPI0_4(%rip) */ - QUAD $0xfffffef5256ffec5 // vmovdqu $-267(%rip), %ymm4 /* LCPI0_5(%rip) */ - QUAD $0xffffff0d2d6ffec5 // vmovdqu $-243(%rip), %ymm5 /* LCPI0_6(%rip) */ - QUAD $0xffffff25356ffec5 // vmovdqu $-219(%rip), %ymm6 /* LCPI0_7(%rip) */ - QUAD $0xffffff3d3d6ffec5 // vmovdqu $-195(%rip), %ymm7 /* LCPI0_8(%rip) */ - MOVQ R8, R14 - -LBB0_9: - LONG $0x6f7a41c4; WORD $0x2404 // vmovdqu (%r12), %xmm8 - QUAD $0x010c2444383d43c4 // vinserti128 $1, $12(%r12), %ymm8, %ymm8 - LONG $0x003d62c4; BYTE $0xc1 // vpshufb %ymm1, %ymm8, %ymm8 - LONG $0xcadb3dc5 // vpand %ymm2, %ymm8, %ymm9 - LONG $0xcbe435c5 // vpmulhuw %ymm3, %ymm9, %ymm9 - LONG $0xc4db3dc5 // vpand %ymm4, %ymm8, %ymm8 - LONG $0x712dc1c4; WORD $0x08f0 // vpsllw $8, %ymm8, %ymm10 - LONG $0x713dc1c4; WORD $0x04f0 // vpsllw $4, %ymm8, %ymm8 - LONG $0x0e3d43c4; WORD $0xaac2 // vpblendw $170, %ymm10, %ymm8, %ymm8 - LONG $0xeb3d41c4; BYTE $0xc1 // vpor %ymm9, %ymm8, %ymm8 - LONG $0x645541c4; BYTE $0xc8 // vpcmpgtb %ymm8, %ymm5, %ymm9 - LONG $0xcfdb35c5 // vpand %ymm7, %ymm9, %ymm9 - LONG $0xd6d83dc5 // vpsubusb %ymm6, %ymm8, %ymm10 - LONG $0xeb3541c4; BYTE $0xca // vpor %ymm10, %ymm9, %ymm9 - LONG $0x007d42c4; BYTE $0xc9 // vpshufb %ymm9, %ymm0, %ymm9 - LONG $0xfc3541c4; BYTE $0xc0 // vpaddb %ymm8, %ymm9, %ymm8 - LONG $0x7f7e41c4; BYTE $0x06 // vmovdqu %ymm8, (%r14) - ADDQ $32, R14 - ADDQ $24, R12 - CMPQ R12, SI - JBE LBB0_9 - JMP LBB0_10 - -LBB0_5: - MOVQ R8, R14 - -LBB0_10: - LEAQ -24(R9), SI - CMPQ R12, SI - JA LBB0_13 - -LBB0_11: - TESTL R10, R10 - JE LBB0_13 - LONG $0x6f7ac1c4; WORD $0x240c // vmovdqu (%r12), %xmm1 - LONG $0x6f7ac1c4; WORD $0x2454; BYTE $0x08 // vmovdqu $8(%r12), %xmm2 - LONG $0xda73e9c5; BYTE $0x04 // vpsrldq $4, %xmm2, %xmm2 - LONG $0x3875e3c4; WORD $0x01ca // vinserti128 $1, %xmm2, %ymm1, %ymm1 - QUAD $0xfffdda0d0075e2c4; BYTE $0xff // vpshufb $-550(%rip), %ymm1, %ymm1 /* LCPI0_2(%rip) */ - QUAD $0xfffffdf215dbf5c5 // vpand $-526(%rip), %ymm1, %ymm2 /* LCPI0_3(%rip) */ - QUAD $0xfffffe0a15e4edc5 // vpmulhuw $-502(%rip), %ymm2, %ymm2 /* LCPI0_4(%rip) */ - QUAD $0xfffffe220ddbf5c5 // vpand $-478(%rip), %ymm1, %ymm1 /* LCPI0_5(%rip) */ - LONG $0xf171e5c5; BYTE $0x08 // vpsllw $8, %ymm1, %ymm3 - LONG $0xf171f5c5; BYTE $0x04 // vpsllw $4, %ymm1, %ymm1 - LONG $0x0e75e3c4; WORD $0xaacb // vpblendw $170, %ymm3, %ymm1, %ymm1 - LONG $0xcaebf5c5 // vpor %ymm2, %ymm1, %ymm1 - QUAD $0xfffffe26156ffec5 // vmovdqu $-474(%rip), %ymm2 /* LCPI0_6(%rip) */ - LONG $0xd164edc5 // vpcmpgtb %ymm1, %ymm2, %ymm2 - QUAD $0xfffffe3a1dd8f5c5 // vpsubusb $-454(%rip), %ymm1, %ymm3 /* LCPI0_7(%rip) */ - QUAD $0xfffffe5215dbedc5 // vpand $-430(%rip), %ymm2, %ymm2 /* LCPI0_8(%rip) */ - LONG $0xd3ebedc5 // vpor %ymm3, %ymm2, %ymm2 - LONG $0x007de2c4; BYTE $0xc2 // vpshufb %ymm2, %ymm0, %ymm0 - LONG $0xc1fcfdc5 // vpaddb %ymm1, %ymm0, %ymm0 - LONG $0x7f7ec1c4; BYTE $0x06 // vmovdqu %ymm0, (%r14) - ADDQ $32, R14 - ADDQ $24, R12 - -LBB0_13: - CMPQ R12, R9 - JE LBB0_28 - LEAQ -4(R9), R10 - CMPQ R12, R10 - JA LBB0_17 - -LBB0_15: - MOVL 0(R12), SI - BSWAPL SI - MOVQ SI, R15 - SHRQ $26, R15 - MOVL SI, CX - SHRL $20, CX - ANDL $63, CX - MOVL SI, BX - SHRL $14, BX - ANDL $63, BX - SHRL $8, SI - ANDL $63, SI - ADDQ $3, R12 - MOVBLZX 0(R11)(R15*1), AX - MOVB AX, 0(R14) - MOVBLZX 0(R11)(CX*1), AX - MOVB AX, 1(R14) - MOVBLZX 0(R11)(BX*1), AX - MOVB AX, 2(R14) - MOVBLZX 0(R11)(SI*1), AX - MOVB AX, 3(R14) - ADDQ $4, R14 - CMPQ R12, R10 - JBE LBB0_15 - -LBB0_17: - SUBQ R12, R9 - MOVBLZX 0(R12), R10 - CMPQ R9, $1 - JE LBB0_24 - MOVQ R10, SI - SHLQ $16, SI - CMPQ R9, $2 - JE LBB0_21 - CMPQ R9, $3 - JNE LBB0_28 - MOVBLZX 2(R12), DX - ORL DX, SI - MOVBLZX 1(R12), AX - SHLL $8, AX - ORL SI, AX - SHRQ $2, R10 - MOVB 0(R11)(R10*1), CX - MOVB CX, 0(R14) - MOVL AX, CX - SHRL $12, CX - ANDL $63, CX - MOVB 0(R11)(CX*1), CX - MOVB CX, 1(R14) - SHRL $6, AX - ANDL $63, AX - MOVB 0(R11)(AX*1), AX - MOVB AX, 2(R14) - ANDL $63, DX - MOVB 0(R11)(DX*1), AX - MOVB AX, 3(R14) - JMP LBB0_27 - -LBB0_7: - MOVQ R8, R14 - LEAQ -24(R9), SI - CMPQ R12, SI - JBE LBB0_11 - JMP LBB0_13 - -LBB0_21: - MOVBLZX 1(R12), AX - MOVL AX, CX - SHLL $8, CX - ORL SI, CX - SHRQ $2, R10 - MOVB 0(R11)(R10*1), BX - MOVB BX, 0(R14) - SHRL $12, CX - ANDL $63, CX - MOVB 0(R11)(CX*1), CX - MOVB CX, 1(R14) - ANDL $15, AX - MOVB 0(R11)(AX*4), AX - MOVB AX, 2(R14) - TESTB $2, DX - JNE LBB0_22 - MOVB $61, 3(R14) - JMP LBB0_27 - -LBB0_24: - MOVQ R10, AX - SHRQ $2, AX - MOVB 0(R11)(AX*1), AX - MOVB AX, 0(R14) - SHLL $4, R10 - ANDL $48, R10 - MOVB 0(R11)(R10*1), AX - MOVB AX, 1(R14) - TESTB $2, DX - JNE LBB0_25 - MOVW $15677, 2(R14) - -LBB0_27: - ADDQ $4, R14 - JMP LBB0_28 - -LBB0_22: - ADDQ $3, R14 - JMP LBB0_28 - -LBB0_25: - ADDQ $2, R14 - -LBB0_28: - SUBQ R8, R14 - ADDQ R14, 8(DI) - -LBB0_29: - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - RET - -LCPI1_0: - BYTE $0xa8 // .byte 168 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf0 // .byte 240 - BYTE $0x54 // .byte 84 - BYTE $0x50 // .byte 80 - BYTE $0x50 // .byte 80 - BYTE $0x50 // .byte 80 - BYTE $0x54 // .byte 84 - BYTE $0xa8 // .byte 168 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf0 // .byte 240 - BYTE $0x54 // .byte 84 - BYTE $0x50 // .byte 80 - BYTE $0x50 // .byte 80 - BYTE $0x50 // .byte 80 - BYTE $0x54 // .byte 84 - -LCPI1_1: - BYTE $0xa8 // .byte 168 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf0 // .byte 240 - BYTE $0x50 // .byte 80 - BYTE $0x50 // .byte 80 - BYTE $0x54 // .byte 84 - BYTE $0x50 // .byte 80 - BYTE $0x70 // .byte 112 - BYTE $0xa8 // .byte 168 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf8 // .byte 248 - BYTE $0xf0 // .byte 240 - BYTE $0x50 // .byte 80 - BYTE $0x50 // .byte 80 - BYTE $0x54 // .byte 84 - BYTE $0x50 // .byte 80 - BYTE $0x70 // .byte 112 - -LCPI1_2: - QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' - QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' - -LCPI1_3: - QUAD $0x5f5f5f5f5f5f5f5f; QUAD $0x5f5f5f5f5f5f5f5f // .space 16, '________________' - QUAD $0x5f5f5f5f5f5f5f5f; QUAD $0x5f5f5f5f5f5f5f5f // .space 16, '________________' - -LCPI1_4: - QUAD $0x1010101010101010; QUAD $0x1010101010101010 // .space 16, '\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10' - QUAD $0x1010101010101010; QUAD $0x1010101010101010 // .space 16, '\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10' - -LCPI1_5: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -LCPI1_6: - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x13 // .byte 19 - BYTE $0x04 // .byte 4 - BYTE $0xbf // .byte 191 - BYTE $0xbf // .byte 191 - BYTE $0xb9 // .byte 185 - BYTE $0xb9 // .byte 185 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x13 // .byte 19 - BYTE $0x04 // .byte 4 - BYTE $0xbf // .byte 191 - BYTE $0xbf // .byte 191 - BYTE $0xb9 // .byte 185 - BYTE $0xb9 // .byte 185 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - -LCPI1_7: - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x11 // .byte 17 - BYTE $0x04 // .byte 4 - BYTE $0xbf // .byte 191 - BYTE $0xbf // .byte 191 - BYTE $0xb9 // .byte 185 - BYTE $0xb9 // .byte 185 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x11 // .byte 17 - BYTE $0x04 // .byte 4 - BYTE $0xbf // .byte 191 - BYTE $0xbf // .byte 191 - BYTE $0xb9 // .byte 185 - BYTE $0xb9 // .byte 185 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - -LCPI1_8: - QUAD $0x0f0f0f0f0f0f0f0f; QUAD $0x0f0f0f0f0f0f0f0f // .space 16, '\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f' - QUAD $0x0f0f0f0f0f0f0f0f; QUAD $0x0f0f0f0f0f0f0f0f // .space 16, '\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f' - -LCPI1_9: - BYTE $0x01 // .byte 1 - BYTE $0x02 // .byte 2 - BYTE $0x04 // .byte 4 - BYTE $0x08 // .byte 8 - BYTE $0x10 // .byte 16 - BYTE $0x20 // .byte 32 - BYTE $0x40 // .byte 64 - BYTE $0x80 // .byte 128 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x01 // .byte 1 - BYTE $0x02 // .byte 2 - BYTE $0x04 // .byte 4 - BYTE $0x08 // .byte 8 - BYTE $0x10 // .byte 16 - BYTE $0x20 // .byte 32 - BYTE $0x40 // .byte 64 - BYTE $0x80 // .byte 128 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - BYTE $0x00 // .byte 0 - -LCPI1_10: - QUAD $0x3f3f3f3f3f3f3f3f; QUAD $0x3f3f3f3f3f3f3f3f // .space 16, '????????????????' - QUAD $0x3f3f3f3f3f3f3f3f; QUAD $0x3f3f3f3f3f3f3f3f // .space 16, '????????????????' - -LCPI1_11: - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - BYTE $0x40 // .byte 64 - BYTE $0x01 // .byte 1 - -LCPI1_12: - WORD $0x1000 // .word 4096 - WORD $0x0001 // .word 1 - WORD $0x1000 // .word 4096 - WORD $0x0001 // .word 1 - WORD $0x1000 // .word 4096 - WORD $0x0001 // .word 1 - WORD $0x1000 // .word 4096 - WORD $0x0001 // .word 1 - WORD $0x1000 // .word 4096 - WORD $0x0001 // .word 1 - WORD $0x1000 // .word 4096 - WORD $0x0001 // .word 1 - WORD $0x1000 // .word 4096 - WORD $0x0001 // .word 1 - WORD $0x1000 // .word 4096 - WORD $0x0001 // .word 1 - -LCPI1_14: - BYTE $0x02 // .byte 2 - BYTE $0x01 // .byte 1 - BYTE $0x00 // .byte 0 - BYTE $0x06 // .byte 6 - BYTE $0x05 // .byte 5 - BYTE $0x04 // .byte 4 - BYTE $0x0a // .byte 10 - BYTE $0x09 // .byte 9 - BYTE $0x08 // .byte 8 - BYTE $0x0e // .byte 14 - BYTE $0x0d // .byte 13 - BYTE $0x0c // .byte 12 - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x05 // .byte 5 - BYTE $0x04 // .byte 4 - BYTE $0x0a // .byte 10 - BYTE $0x09 // .byte 9 - BYTE $0x08 // .byte 8 - BYTE $0x0e // .byte 14 - BYTE $0x0d // .byte 13 - BYTE $0x0c // .byte 12 - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - -LCPI1_13: - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x00 // .space 1, '\x00' - BYTE $0x02 // .byte 2 - BYTE $0x01 // .byte 1 - BYTE $0x00 // .byte 0 - BYTE $0x06 // .byte 6 - -_b64decode: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - SUBQ $80, SP - TESTQ DX, DX - JE LBB1_3 - MOVQ 0(DI), BX - MOVQ 8(DI), R15 - ADDQ BX, R15 - ADDQ 16(DI), BX - ADDQ SI, DX - TESTB $1, CX - LONG $0xee058d4c; WORD $0x002a; BYTE $0x00 // leaq $10990(%rip), %r8 /* _VecDecodeCharsetStd(%rip) */ - LONG $0xe7058d48; WORD $0x002b; BYTE $0x00 // leaq $11239(%rip), %rax /* _VecDecodeCharsetURL(%rip) */ - LONG $0xc0440f49 // cmoveq %r8, %rax - MOVQ AX, -56(BP) - TESTB $4, CX - MOVQ SI, -96(BP) - MOVQ DI, -120(BP) - MOVQ R15, -112(BP) - MOVQ BX, -88(BP) - JNE LBB1_4 - MOVL CX, R8 - ANDL $8, R8 - ANDL $2, CX - MOVL CX, -44(BP) - JMP LBB1_764 - -LBB1_3: - XORL AX, AX - JMP LBB1_763 - -LBB1_4: - LEAQ -32(DX), R14 - LEAQ -32(BX), R13 - TESTB $1, CX - JE LBB1_9 - QUAD $0xfffffdcd056ffec5 // vmovdqu $-563(%rip), %ymm0 /* LCPI1_1(%rip) */ - JNE LBB1_10 - -LBB1_6: - QUAD $0xfffffde30d6ffec5 // vmovdqu $-541(%rip), %ymm1 /* LCPI1_2(%rip) */ - JNE LBB1_11 - -LBB1_7: - QUAD $0xfffffe19156ffec5 // vmovdqu $-487(%rip), %ymm2 /* LCPI1_4(%rip) */ - JNE LBB1_12 - -LBB1_8: - QUAD $0xfffffe4f1d6ffec5 // vmovdqu $-433(%rip), %ymm3 /* LCPI1_6(%rip) */ - JMP LBB1_13 - -LBB1_9: - QUAD $0xfffffd85056ffec5 // vmovdqu $-635(%rip), %ymm0 /* LCPI1_0(%rip) */ - JE LBB1_6 - -LBB1_10: - QUAD $0xfffffddb0d6ffec5 // vmovdqu $-549(%rip), %ymm1 /* LCPI1_3(%rip) */ - JE LBB1_7 - -LBB1_11: - QUAD $0xfffffe11156ffec5 // vmovdqu $-495(%rip), %ymm2 /* LCPI1_5(%rip) */ - JE LBB1_8 - -LBB1_12: - QUAD $0xfffffe471d6ffec5 // vmovdqu $-441(%rip), %ymm3 /* LCPI1_7(%rip) */ - -LBB1_13: - MOVL CX, R8 - ANDL $8, R8 - ANDL $2, CX - CMPQ R14, SI - MOVL CX, -44(BP) - JB LBB1_205 - CMPQ R15, R13 - JA LBB1_764 - QUAD $0xfffffe40256ffec5 // vmovdqu $-448(%rip), %ymm4 /* LCPI1_8(%rip) */ - QUAD $0xfffffe582d6ffec5 // vmovdqu $-424(%rip), %ymm5 /* LCPI1_9(%rip) */ - LONG $0xf6efc9c5 // vpxor %xmm6, %xmm6, %xmm6 - MOVQ $-4294967296, DI - QUAD $0xfffffe82056f7ec5 // vmovdqu $-382(%rip), %ymm8 /* LCPI1_11(%rip) */ - QUAD $0xfffffe9a0d6f7ec5 // vmovdqu $-358(%rip), %ymm9 /* LCPI1_12(%rip) */ - QUAD $0xfffffed2156f7ac5 // vmovdqu $-302(%rip), %xmm10 /* LCPI1_13(%rip) */ - QUAD $0xfffffeaa1d6f7ec5 // vmovdqu $-342(%rip), %ymm11 /* LCPI1_14(%rip) */ - MOVQ SI, R10 - MOVQ R14, -72(BP) - MOVQ R13, -80(BP) - -LBB1_16: - LONG $0x6f7e41c4; BYTE $0x22 // vmovdqu (%r10), %ymm12 - LONG $0x7215c1c4; WORD $0x04d4 // vpsrld $4, %ymm12, %ymm13 - LONG $0xecdb15c5 // vpand %ymm4, %ymm13, %ymm13 - LONG $0xf4db1dc5 // vpand %ymm4, %ymm12, %ymm14 - LONG $0x007d42c4; BYTE $0xf6 // vpshufb %ymm14, %ymm0, %ymm14 - LONG $0x005542c4; BYTE $0xfd // vpshufb %ymm13, %ymm5, %ymm15 - LONG $0xdb0541c4; BYTE $0xf6 // vpand %ymm14, %ymm15, %ymm14 - LONG $0xf6740dc5 // vpcmpeqb %ymm6, %ymm14, %ymm14 - LONG $0xd77dc1c4; BYTE $0xc6 // vpmovmskb %ymm14, %eax - ORQ DI, AX - BSFQ AX, AX - CMPL AX, $31 - JA LBB1_19 - CMPQ R10, DX - JAE LBB1_110 - MOVQ R10, R12 - JMP LBB1_22 - -LBB1_19: - LONG $0xf1741dc5 // vpcmpeqb %ymm1, %ymm12, %ymm14 - LONG $0x006542c4; BYTE $0xed // vpshufb %ymm13, %ymm3, %ymm13 - LONG $0x4c1563c4; WORD $0xe0ea // vpblendvb %ymm14, %ymm2, %ymm13, %ymm13 - LONG $0xfc1541c4; BYTE $0xe4 // vpaddb %ymm12, %ymm13, %ymm12 - QUAD $0xfffffdde25db1dc5 // vpand $-546(%rip), %ymm12, %ymm12 /* LCPI1_10(%rip) */ - LONG $0x041d42c4; BYTE $0xe0 // vpmaddubsw %ymm8, %ymm12, %ymm12 - LONG $0xf51d41c4; BYTE $0xe1 // vpmaddwd %ymm9, %ymm12, %ymm12 - LONG $0x397d63c4; WORD $0x01e7 // vextracti128 $1, %ymm12, %xmm7 - LONG $0x0041c2c4; BYTE $0xfa // vpshufb %xmm10, %xmm7, %xmm7 - LONG $0x001d42c4; BYTE $0xe3 // vpshufb %ymm11, %ymm12, %ymm12 - LONG $0x021de3c4; WORD $0x08ff // vpblendd $8, %ymm7, %ymm12, %ymm7 - LONG $0x0245e3c4; WORD $0xc0fe // vpblendd $192, %ymm6, %ymm7, %ymm7 - LONG $0x7f7ec1c4; BYTE $0x3f // vmovdqu %ymm7, (%r15) - ADDQ $32, R10 - ADDQ $24, R15 - JMP LBB1_110 - -LBB1_38: - CMPB CX, $110 - JNE LBB1_43 - -LBB1_20: - MOVQ SI, R12 - -LBB1_21: - CMPQ R12, DX - JAE LBB1_40 - -LBB1_22: - LEAQ 1(R12), CX - MOVBLZX 0(R12), SI - CMPB SI, $92 - JNE LBB1_34 - TESTL R8, R8 - JE LBB1_36 - LEAQ 2(R12), SI - MOVB $-1, R9 - CMPQ SI, DX - JA LBB1_42 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_38 - CMPB CX, $114 - JE LBB1_20 - CMPB CX, $117 - JNE LBB1_45 - MOVQ DX, CX - SUBQ SI, CX - CMPQ CX, $4 - JL LBB1_45 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), CX - ANDL $-2139062144, DI - TESTL CX, DI - JNE LBB1_45 - LEAL 421075225(BX), CX - ORL BX, CX - TESTL $-2139062144, CX - JNE LBB1_45 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R11 - ANDL DI, AX - TESTL R11, AX - JNE LBB1_45 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_45 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R12 - ORL AX, CX - JNE LBB1_46 - CMPB SI, $13 - JNE LBB1_37 - JMP LBB1_21 - -LBB1_34: - MOVQ CX, R12 - CMPB SI, $13 - JNE LBB1_37 - JMP LBB1_21 - -LBB1_36: - MOVQ CX, R12 - CMPB SI, $13 - JE LBB1_21 - -LBB1_37: - MOVL SI, R9 - CMPB SI, $10 - JE LBB1_21 - JMP LBB1_46 - -LBB1_40: - MOVB $1, CX - XORL DI, DI - XORL R11, R11 - -LBB1_41: - TESTB CX, CX - JE LBB1_49 - JMP LBB1_109 - -LBB1_42: - MOVQ CX, R12 - JMP LBB1_46 - -LBB1_43: - CMPB CX, $47 - JNE LBB1_45 - MOVL CX, R9 - -LBB1_45: - MOVQ SI, R12 - -LBB1_46: - MOVBLZX R9, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), DI - MOVB $1, R13 - CMPL DI, $255 - JE LBB1_72 - MOVL $1, R11 - CMPQ R12, DX - JB LBB1_54 - -LBB1_48: - MOVQ -80(BP), R13 - -LBB1_49: - MOVL DI, -64(BP) - CMPL -44(BP), $0 - SETEQ CX - CMPL R11, $1 - SETEQ BX - CMPQ R12, DX - JB LBB1_102 - CMPL R11, $4 - JE LBB1_102 - ORB BX, CX - JNE LBB1_97 - JMP LBB1_102 - -LBB1_70: - CMPB CX, $110 - JNE LBB1_112 - -LBB1_52: - MOVQ SI, R12 - -LBB1_53: - CMPQ R12, DX - JAE LBB1_98 - -LBB1_54: - LEAQ 1(R12), CX - MOVBLZX 0(R12), SI - CMPB SI, $92 - JNE LBB1_66 - TESTL R8, R8 - JE LBB1_68 - LEAQ 2(R12), SI - MOVB $-1, R9 - CMPQ SI, DX - JA LBB1_100 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_70 - CMPB CX, $114 - JE LBB1_52 - CMPB CX, $117 - JNE LBB1_114 - MOVQ DX, AX - SUBQ SI, AX - CMPQ AX, $4 - JL LBB1_114 - MOVL DI, R14 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_99 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_99 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R11 - ANDL DI, AX - TESTL R11, AX - JNE LBB1_99 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_99 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R12 - ORL AX, CX - MOVL R14, DI - MOVQ -72(BP), R14 - JE LBB1_67 - JMP LBB1_115 - -LBB1_66: - MOVQ CX, R12 - -LBB1_67: - CMPB SI, $13 - JNE LBB1_69 - JMP LBB1_53 - -LBB1_68: - MOVQ CX, R12 - CMPB SI, $13 - JE LBB1_53 - -LBB1_69: - MOVL SI, R9 - CMPB SI, $10 - JE LBB1_53 - JMP LBB1_115 - -LBB1_72: - XORL DI, DI - XORL AX, AX - XORL R11, R11 - -LBB1_73: - CMPL -44(BP), $0 - JNE LBB1_96 - CMPB R9, $61 - JNE LBB1_96 - TESTB R13, R13 - JNE LBB1_96 - MOVL DI, -64(BP) - CMPQ R12, DX - MOVQ -80(BP), R13 - JAE LBB1_102 - MOVL AX, -100(BP) - MOVQ R12, SI - JMP LBB1_80 - -LBB1_95: - MOVQ BX, SI - CMPQ SI, DX - JB LBB1_80 - JMP LBB1_101 - -LBB1_78: - MOVQ R12, SI - CMPQ SI, DX - JAE LBB1_101 - -LBB1_80: - LEAQ 1(SI), BX - MOVBLZX 0(SI), DI - CMPB DI, $92 - JNE LBB1_92 - TESTL R8, R8 - JE LBB1_92 - LEAQ 2(SI), R12 - CMPQ R12, DX - JA LBB1_143 - MOVBLZX 0(BX), CX - CMPB CX, $110 - JE LBB1_78 - CMPB CX, $114 - JE LBB1_78 - CMPB CX, $117 - JNE LBB1_97 - MOVQ DX, AX - SUBQ R12, AX - CMPQ AX, $4 - JL LBB1_97 - MOVL 0(R12), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_97 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_97 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL DI, AX - TESTL R9, AX - JNE LBB1_97 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_97 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, DI - SHRL $4, DI - ORL BX, DI - MOVL DI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL DI, CX - ANDL $128, CX - ADDQ $6, SI - ORL AX, CX - MOVQ SI, BX - MOVQ SI, R12 - JNE LBB1_97 - -LBB1_92: - CMPB DI, $10 - JE LBB1_95 - CMPB DI, $13 - JE LBB1_95 - CMPB DI, $61 - JNE LBB1_143 - CMPB -100(BP), $0 - JE LBB1_147 - -LBB1_143: - MOVQ BX, R12 - JMP LBB1_97 - -LBB1_96: - MOVQ -80(BP), R13 - -LBB1_97: - XORL CX, CX - CMPQ R12, DX - SETEQ CX - ADDQ R12, CX - CMPQ CX, R10 - MOVQ $-4294967296, DI - JE LBB1_110 - JMP LBB1_762 - -LBB1_98: - MOVL $1, R11 - XORL CX, CX - MOVQ -80(BP), R13 - JMP LBB1_41 - -LBB1_99: - MOVQ SI, R12 - MOVL R14, DI - MOVQ -72(BP), R14 - JMP LBB1_115 - -LBB1_100: - MOVQ CX, R12 - JMP LBB1_115 - -LBB1_101: - MOVQ SI, R12 - -LBB1_102: - MOVB $4, AX - SUBB R11, AX - MOVBLZX AX, AX - ADDL AX, AX - LEAL 0(AX)(AX*2), CX - MOVL -64(BP), AX - SHLL CX, AX - CMPL R11, $2 - MOVQ R15, CX - JE LBB1_107 - CMPL R11, $3 - JE LBB1_106 - CMPL R11, $4 - JNE LBB1_108 - MOVB AX, 2(CX) - -LBB1_106: - MOVB AH, 1(CX) - -LBB1_107: - SHRL $16, AX - MOVB AX, 0(CX) - -LBB1_108: - MOVL R11, AX - LEAQ 0(AX)(CX*1), R15 - ADDQ $-1, R15 - -LBB1_109: - MOVQ R12, R10 - MOVQ $-4294967296, DI - -LBB1_110: - CMPQ R10, R14 - JA LBB1_206 - CMPQ R15, R13 - JBE LBB1_16 - JMP LBB1_206 - -LBB1_112: - CMPB CX, $47 - JNE LBB1_114 - MOVL CX, R9 - -LBB1_114: - MOVQ SI, R12 - -LBB1_115: - MOVBLZX R9, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), CX - CMPL CX, $255 - JE LBB1_138 - SHLL $6, DI - ORL CX, DI - MOVL $2, R11 - CMPQ R12, DX - JAE LBB1_48 - MOVQ -80(BP), R13 - JMP LBB1_120 - -LBB1_136: - CMPB CX, $110 - JNE LBB1_169 - -LBB1_118: - MOVQ SI, R12 - -LBB1_119: - CMPQ R12, DX - JAE LBB1_142 - -LBB1_120: - LEAQ 1(R12), CX - MOVBLZX 0(R12), SI - CMPB SI, $92 - JNE LBB1_132 - TESTL R8, R8 - JE LBB1_134 - LEAQ 2(R12), SI - MOVB $-1, R9 - CMPQ SI, DX - JA LBB1_146 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_136 - CMPB CX, $114 - JE LBB1_118 - CMPB CX, $117 - JNE LBB1_171 - MOVQ DX, AX - SUBQ SI, AX - CMPQ AX, $4 - JL LBB1_171 - MOVL DI, R14 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_144 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_144 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R11 - ANDL DI, AX - TESTL R11, AX - JNE LBB1_144 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_144 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R12 - ORL AX, CX - MOVL R14, DI - MOVQ -72(BP), R14 - JE LBB1_133 - JMP LBB1_172 - -LBB1_132: - MOVQ CX, R12 - -LBB1_133: - CMPB SI, $13 - JNE LBB1_135 - JMP LBB1_119 - -LBB1_134: - MOVQ CX, R12 - CMPB SI, $13 - JE LBB1_119 - -LBB1_135: - MOVL SI, R9 - CMPB SI, $10 - JE LBB1_119 - JMP LBB1_172 - -LBB1_138: - XORL AX, AX - MOVL $1, R11 - JMP LBB1_73 - -LBB1_142: - MOVL $2, R11 - XORL CX, CX - JMP LBB1_41 - -LBB1_144: - MOVQ SI, R12 - MOVL R14, DI - MOVQ -72(BP), R14 - JMP LBB1_172 - -LBB1_146: - MOVQ CX, R12 - JMP LBB1_172 - -LBB1_147: - CMPQ BX, DX - JB LBB1_151 - -LBB1_148: - MOVQ BX, R12 - JMP LBB1_102 - -LBB1_149: - MOVQ R12, BX - -LBB1_150: - CMPQ BX, DX - JAE LBB1_148 - -LBB1_151: - LEAQ 1(BX), CX - MOVBLZX 0(BX), SI - CMPB SI, $92 - JNE LBB1_164 - TESTL R8, R8 - JE LBB1_164 - LEAQ 2(BX), R12 - CMPQ R12, DX - JA LBB1_204 - MOVBLZX 0(CX), CX - CMPB CX, $110 - JE LBB1_149 - CMPB CX, $114 - JE LBB1_149 - CMPB CX, $117 - JNE LBB1_97 - MOVQ DX, AX - SUBQ R12, AX - CMPQ AX, $4 - JL LBB1_97 - MOVL 0(R12), CX - MOVL CX, SI - NOTL SI - LEAL -808464432(CX), AX - ANDL $-2139062144, SI - TESTL AX, SI - JNE LBB1_97 - LEAL 421075225(CX), AX - ORL CX, AX - TESTL $-2139062144, AX - JNE LBB1_97 - MOVL CX, DI - ANDL $2139062143, DI - MOVL $-1061109568, AX - SUBL DI, AX - LEAL 1179010630(DI), R9 - ANDL SI, AX - TESTL R9, AX - JNE LBB1_97 - MOVL $-522133280, AX - SUBL DI, AX - ADDL $960051513, DI - ANDL AX, SI - TESTL DI, SI - JNE LBB1_97 - BSWAPL CX - MOVL CX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, CX - ADDL AX, CX - MOVL CX, SI - SHRL $4, SI - ORL CX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, BX - ORL AX, CX - MOVQ BX, R12 - JE LBB1_165 - JMP LBB1_97 - -LBB1_164: - MOVQ CX, R12 - -LBB1_165: - CMPB SI, $13 - JE LBB1_149 - MOVQ R12, BX - CMPB SI, $10 - JE LBB1_150 - JMP LBB1_97 - -LBB1_169: - CMPB CX, $47 - JNE LBB1_171 - MOVL CX, R9 - -LBB1_171: - MOVQ SI, R12 - -LBB1_172: - MOVBLZX R9, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), CX - CMPL CX, $255 - JE LBB1_194 - SHLL $6, DI - ORL CX, DI - MOVL $3, R11 - CMPQ R12, DX - JB LBB1_176 - JMP LBB1_49 - -LBB1_192: - CMPB CX, $110 - JNE LBB1_197 - -LBB1_174: - MOVQ SI, R12 - -LBB1_175: - MOVL $3, R11 - XORL CX, CX - CMPQ R12, DX - JAE LBB1_41 - -LBB1_176: - LEAQ 1(R12), CX - MOVBLZX 0(R12), SI - CMPB SI, $92 - JNE LBB1_189 - TESTL R8, R8 - JE LBB1_189 - LEAQ 2(R12), SI - MOVB $-1, R9 - CMPQ SI, DX - JA LBB1_196 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_192 - CMPB CX, $114 - JE LBB1_174 - CMPB CX, $117 - JNE LBB1_199 - MOVQ DX, AX - SUBQ SI, AX - CMPQ AX, $4 - JL LBB1_199 - MOVL DI, R14 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_195 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_195 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R11 - ANDL DI, AX - TESTL R11, AX - JNE LBB1_195 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_195 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R12 - ORL AX, CX - MOVL R14, DI - MOVQ -72(BP), R14 - JE LBB1_190 - JMP LBB1_200 - -LBB1_189: - MOVQ CX, R12 - -LBB1_190: - CMPB SI, $13 - JE LBB1_175 - MOVL SI, R9 - CMPB SI, $10 - JE LBB1_175 - JMP LBB1_200 - -LBB1_194: - XORL R13, R13 - MOVL $2, R11 - XORL AX, AX - JMP LBB1_73 - -LBB1_195: - MOVQ SI, R12 - MOVL R14, DI - MOVQ -72(BP), R14 - JMP LBB1_200 - -LBB1_196: - MOVQ CX, R12 - JMP LBB1_200 - -LBB1_197: - CMPB CX, $47 - JNE LBB1_199 - MOVL CX, R9 - -LBB1_199: - MOVQ SI, R12 - -LBB1_200: - MOVBLZX R9, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), CX - CMPL CX, $255 - JE LBB1_202 - SHLL $6, DI - ORL CX, DI - MOVL $4, R11 - JMP LBB1_49 - -LBB1_202: - XORL R13, R13 - MOVL $3, R11 - MOVB $1, AX - JMP LBB1_73 - -LBB1_204: - MOVQ CX, R12 - JMP LBB1_97 - -LBB1_764: - MOVQ SI, R10 - LEAQ -8(DX), AX - MOVQ AX, -80(BP) - CMPQ R10, AX - JBE LBB1_207 - JMP LBB1_393 - -LBB1_205: - MOVQ SI, R10 - -LBB1_206: - LEAQ -8(DX), AX - MOVQ AX, -80(BP) - CMPQ R10, AX - JA LBB1_393 - -LBB1_207: - MOVQ -88(BP), AX - ADDQ $-8, AX - MOVQ AX, -72(BP) - CMPQ R15, AX - JA LBB1_393 - -LBB1_208: - MOVQ R15, -64(BP) - MOVBLZX 0(R10), AX - MOVQ -56(BP), DI - MOVBLZX 0(DI)(AX*1), R9 - MOVBLZX 1(R10), AX - MOVBLZX 0(DI)(AX*1), SI - MOVBLZX 2(R10), AX - MOVBLZX 0(DI)(AX*1), R12 - MOVBLZX 3(R10), AX - MOVBLZX 0(DI)(AX*1), AX - MOVBLZX 4(R10), CX - MOVBLZX 0(DI)(CX*1), R13 - MOVBLZX 5(R10), CX - MOVBLZX 0(DI)(CX*1), R11 - MOVBLZX 6(R10), CX - MOVBLZX 0(DI)(CX*1), BX - MOVBLZX 7(R10), CX - MOVBLZX 0(DI)(CX*1), CX - MOVL SI, DI - ORL R9, DI - MOVL AX, R15 - ORL R12, R15 - ORL DI, R15 - MOVL R11, DI - ORL R13, DI - MOVL BX, R14 - ORL DI, R14 - ORL R15, R14 - MOVL CX, DI - ORL R14, DI - CMPB DI, $-1 - JE LBB1_210 - SHLQ $58, R9 - SHLQ $52, SI - ORQ R9, SI - SHLQ $46, R12 - SHLQ $40, AX - ORQ R12, AX - ORQ SI, AX - SHLQ $34, R13 - SHLQ $28, R11 - ORQ R13, R11 - SHLQ $22, BX - ORQ R11, BX - ORQ AX, BX - SHLQ $16, CX - ORQ BX, CX - BSWAPQ CX - MOVQ -64(BP), AX - MOVQ CX, 0(AX) - ADDQ $8, R10 - ADDQ $6, AX - MOVQ AX, -64(BP) - CMPQ R10, -80(BP) - JBE LBB1_330 - JMP LBB1_392 - -LBB1_210: - CMPQ R10, DX - JAE LBB1_329 - MOVQ R10, R14 - JMP LBB1_214 - -LBB1_230: - CMPB CX, $110 - JNE LBB1_236 - -LBB1_212: - MOVQ SI, R14 - -LBB1_213: - CMPQ R14, DX - JAE LBB1_232 - -LBB1_214: - LEAQ 1(R14), CX - MOVBLZX 0(R14), SI - CMPB SI, $92 - JNE LBB1_226 - TESTL R8, R8 - JE LBB1_228 - LEAQ 2(R14), SI - MOVB $-1, R13 - CMPQ SI, DX - JA LBB1_235 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_230 - CMPB CX, $114 - JE LBB1_212 - CMPB CX, $117 - JNE LBB1_238 - MOVQ DX, CX - SUBQ SI, CX - CMPQ CX, $4 - JL LBB1_238 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), CX - ANDL $-2139062144, DI - TESTL CX, DI - JNE LBB1_238 - LEAL 421075225(BX), CX - ORL BX, CX - TESTL $-2139062144, CX - JNE LBB1_238 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL DI, AX - TESTL R9, AX - JNE LBB1_238 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_238 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R14 - ORL AX, CX - JNE LBB1_239 - CMPB SI, $13 - JNE LBB1_229 - JMP LBB1_213 - -LBB1_226: - MOVQ CX, R14 - CMPB SI, $13 - JNE LBB1_229 - JMP LBB1_213 - -LBB1_228: - MOVQ CX, R14 - CMPB SI, $13 - JE LBB1_213 - -LBB1_229: - MOVL SI, R13 - CMPB SI, $10 - JE LBB1_213 - JMP LBB1_239 - -LBB1_232: - MOVB $1, CX - XORL DI, DI - XORL R11, R11 - -LBB1_233: - TESTB CX, CX - JE LBB1_241 - MOVQ R14, R10 - CMPQ R10, -80(BP) - JBE LBB1_330 - JMP LBB1_392 - -LBB1_235: - MOVQ CX, R14 - JMP LBB1_239 - -LBB1_236: - CMPB CX, $47 - JNE LBB1_238 - MOVL CX, R13 - -LBB1_238: - MOVQ SI, R14 - -LBB1_239: - MOVBLZX R13, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), DI - MOVB $1, R9 - CMPL DI, $255 - JE LBB1_264 - MOVL $1, R11 - CMPQ R14, DX - JB LBB1_246 - -LBB1_241: - MOVL DI, R15 - CMPL -44(BP), $0 - SETEQ CX - CMPL R11, $1 - SETEQ BX - CMPQ R14, DX - JB LBB1_292 - CMPL R11, $4 - JE LBB1_292 - ORB BX, CX - JNE LBB1_328 - JMP LBB1_292 - -LBB1_262: - CMPB CX, $110 - JNE LBB1_299 - -LBB1_244: - MOVQ SI, R14 - -LBB1_245: - CMPQ R14, DX - JAE LBB1_288 - -LBB1_246: - LEAQ 1(R14), CX - MOVBLZX 0(R14), SI - CMPB SI, $92 - JNE LBB1_258 - TESTL R8, R8 - JE LBB1_260 - LEAQ 2(R14), SI - MOVB $-1, R13 - CMPQ SI, DX - JA LBB1_290 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_262 - CMPB CX, $114 - JE LBB1_244 - CMPB CX, $117 - JNE LBB1_301 - MOVQ DX, AX - SUBQ SI, AX - CMPQ AX, $4 - JL LBB1_301 - MOVL DI, R15 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_289 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_289 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R11 - ANDL DI, AX - TESTL R11, AX - JNE LBB1_289 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_289 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R14 - ORL AX, CX - MOVL R15, DI - JE LBB1_259 - JMP LBB1_302 - -LBB1_258: - MOVQ CX, R14 - -LBB1_259: - CMPB SI, $13 - JNE LBB1_261 - JMP LBB1_245 - -LBB1_260: - MOVQ CX, R14 - CMPB SI, $13 - JE LBB1_245 - -LBB1_261: - MOVL SI, R13 - CMPB SI, $10 - JE LBB1_245 - JMP LBB1_302 - -LBB1_264: - XORL DI, DI - XORL R12, R12 - XORL R11, R11 - -LBB1_265: - CMPL -44(BP), $0 - JNE LBB1_328 - CMPB R13, $61 - JNE LBB1_328 - TESTB R9, R9 - JNE LBB1_328 - MOVL DI, R15 - CMPQ R14, DX - JAE LBB1_292 - MOVQ R14, BX - JMP LBB1_272 - -LBB1_287: - MOVQ SI, BX - CMPQ BX, DX - JB LBB1_272 - JMP LBB1_291 - -LBB1_270: - MOVQ R14, BX - CMPQ BX, DX - JAE LBB1_291 - -LBB1_272: - LEAQ 1(BX), SI - MOVBLZX 0(BX), DI - CMPB DI, $92 - JNE LBB1_284 - TESTL R8, R8 - JE LBB1_284 - LEAQ 2(BX), R14 - CMPQ R14, DX - JA LBB1_327 - MOVBLZX 0(SI), CX - CMPB CX, $110 - JE LBB1_270 - CMPB CX, $114 - JE LBB1_270 - CMPB CX, $117 - JNE LBB1_328 - MOVQ DX, AX - SUBQ R14, AX - CMPQ AX, $4 - JL LBB1_328 - MOVL 0(R14), CX - MOVL CX, SI - NOTL SI - LEAL -808464432(CX), AX - ANDL $-2139062144, SI - TESTL AX, SI - JNE LBB1_328 - LEAL 421075225(CX), AX - ORL CX, AX - TESTL $-2139062144, AX - JNE LBB1_328 - MOVL CX, DI - ANDL $2139062143, DI - MOVL $-1061109568, AX - SUBL DI, AX - LEAL 1179010630(DI), R9 - ANDL SI, AX - TESTL R9, AX - JNE LBB1_328 - MOVL $-522133280, AX - SUBL DI, AX - ADDL $960051513, DI - ANDL AX, SI - TESTL DI, SI - JNE LBB1_328 - BSWAPL CX - MOVL CX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, CX - ADDL AX, CX - MOVL CX, DI - SHRL $4, DI - ORL CX, DI - MOVL DI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL DI, CX - ANDL $128, CX - ADDQ $6, BX - ORL AX, CX - MOVQ BX, SI - MOVQ BX, R14 - JNE LBB1_328 - -LBB1_284: - CMPB DI, $10 - JE LBB1_287 - CMPB DI, $13 - JE LBB1_287 - CMPB DI, $61 - JNE LBB1_327 - TESTB R12, R12 - JE LBB1_334 - -LBB1_327: - MOVQ SI, R14 - -LBB1_328: - XORL CX, CX - CMPQ R14, DX - SETEQ CX - ADDQ R14, CX - CMPQ CX, R10 - JNE LBB1_762 - -LBB1_329: - CMPQ R10, -80(BP) - JA LBB1_392 - -LBB1_330: - MOVQ -64(BP), R15 - CMPQ R15, -72(BP) - JBE LBB1_208 - JMP LBB1_393 - -LBB1_288: - MOVL $1, R11 - XORL CX, CX - JMP LBB1_233 - -LBB1_289: - MOVQ SI, R14 - MOVL R15, DI - JMP LBB1_302 - -LBB1_290: - MOVQ CX, R14 - JMP LBB1_302 - -LBB1_291: - MOVQ BX, R14 - -LBB1_292: - MOVB $4, AX - SUBB R11, AX - MOVBLZX AX, AX - ADDL AX, AX - LEAL 0(AX)(AX*2), CX - MOVL R15, AX - SHLL CX, AX - CMPL R11, $2 - MOVQ -64(BP), CX - JE LBB1_297 - CMPL R11, $3 - JE LBB1_296 - CMPL R11, $4 - JNE LBB1_298 - MOVB AX, 2(CX) - -LBB1_296: - MOVB AH, 1(CX) - -LBB1_297: - SHRL $16, AX - MOVB AX, 0(CX) - -LBB1_298: - MOVL R11, AX - ADDQ AX, CX - ADDQ $-1, CX - MOVQ CX, -64(BP) - MOVQ R14, R10 - CMPQ R10, -80(BP) - JBE LBB1_330 - JMP LBB1_392 - -LBB1_299: - CMPB CX, $47 - JNE LBB1_301 - MOVL CX, R13 - -LBB1_301: - MOVQ SI, R14 - -LBB1_302: - MOVBLZX R13, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), CX - CMPL CX, $255 - JE LBB1_324 - SHLL $6, DI - ORL CX, DI - MOVL $2, R11 - CMPQ R14, DX - JB LBB1_306 - JMP LBB1_241 - -LBB1_322: - CMPB CX, $110 - JNE LBB1_356 - -LBB1_304: - MOVQ SI, R14 - -LBB1_305: - CMPQ R14, DX - JAE LBB1_331 - -LBB1_306: - LEAQ 1(R14), CX - MOVBLZX 0(R14), SI - CMPB SI, $92 - JNE LBB1_318 - TESTL R8, R8 - JE LBB1_320 - LEAQ 2(R14), SI - MOVB $-1, R13 - CMPQ SI, DX - JA LBB1_333 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_322 - CMPB CX, $114 - JE LBB1_304 - CMPB CX, $117 - JNE LBB1_358 - MOVQ DX, AX - SUBQ SI, AX - CMPQ AX, $4 - JL LBB1_358 - MOVL DI, R11 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_332 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_332 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL DI, AX - TESTL R9, AX - JNE LBB1_332 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_332 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R14 - ORL AX, CX - MOVL R11, DI - JE LBB1_319 - JMP LBB1_359 - -LBB1_318: - MOVQ CX, R14 - -LBB1_319: - CMPB SI, $13 - JNE LBB1_321 - JMP LBB1_305 - -LBB1_320: - MOVQ CX, R14 - CMPB SI, $13 - JE LBB1_305 - -LBB1_321: - MOVL SI, R13 - CMPB SI, $10 - JE LBB1_305 - JMP LBB1_359 - -LBB1_324: - XORL R12, R12 - MOVL $1, R11 - JMP LBB1_265 - -LBB1_331: - MOVL $2, R11 - XORL CX, CX - JMP LBB1_233 - -LBB1_332: - MOVQ SI, R14 - MOVL R11, DI - JMP LBB1_359 - -LBB1_333: - MOVQ CX, R14 - JMP LBB1_359 - -LBB1_334: - CMPQ SI, DX - JB LBB1_338 - -LBB1_335: - MOVQ SI, R14 - JMP LBB1_292 - -LBB1_336: - MOVQ R14, SI - -LBB1_337: - CMPQ SI, DX - JAE LBB1_335 - -LBB1_338: - LEAQ 1(SI), CX - MOVBLZX 0(SI), DI - CMPB DI, $92 - JNE LBB1_351 - TESTL R8, R8 - JE LBB1_351 - LEAQ 2(SI), R14 - CMPQ R14, DX - JA LBB1_391 - MOVBLZX 0(CX), CX - CMPB CX, $110 - JE LBB1_336 - CMPB CX, $114 - JE LBB1_336 - CMPB CX, $117 - JNE LBB1_328 - MOVQ DX, AX - SUBQ R14, AX - CMPQ AX, $4 - JL LBB1_328 - MOVL 0(R14), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_328 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_328 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL DI, AX - TESTL R9, AX - JNE LBB1_328 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_328 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, DI - SHRL $4, DI - ORL BX, DI - MOVL DI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL DI, CX - ANDL $128, CX - ADDQ $6, SI - ORL AX, CX - MOVQ SI, R14 - JE LBB1_352 - JMP LBB1_328 - -LBB1_351: - MOVQ CX, R14 - -LBB1_352: - CMPB DI, $13 - JE LBB1_336 - MOVQ R14, SI - CMPB DI, $10 - JE LBB1_337 - JMP LBB1_328 - -LBB1_356: - CMPB CX, $47 - JNE LBB1_358 - MOVL CX, R13 - -LBB1_358: - MOVQ SI, R14 - -LBB1_359: - MOVBLZX R13, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), CX - CMPL CX, $255 - JE LBB1_381 - SHLL $6, DI - ORL CX, DI - MOVL $3, R11 - CMPQ R14, DX - JB LBB1_363 - JMP LBB1_241 - -LBB1_379: - CMPB CX, $110 - JNE LBB1_384 - -LBB1_361: - MOVQ SI, R14 - -LBB1_362: - MOVL $3, R11 - XORL CX, CX - CMPQ R14, DX - JAE LBB1_233 - -LBB1_363: - LEAQ 1(R14), CX - MOVBLZX 0(R14), SI - CMPB SI, $92 - JNE LBB1_375 - TESTL R8, R8 - JE LBB1_377 - LEAQ 2(R14), SI - MOVB $-1, R13 - CMPQ SI, DX - JA LBB1_383 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_379 - CMPB CX, $114 - JE LBB1_361 - CMPB CX, $117 - JNE LBB1_386 - MOVQ DX, AX - SUBQ SI, AX - CMPQ AX, $4 - JL LBB1_386 - MOVL DI, R11 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_382 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_382 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL DI, AX - TESTL R9, AX - JNE LBB1_382 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_382 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R14 - ORL AX, CX - MOVL R11, DI - JE LBB1_376 - JMP LBB1_387 - -LBB1_375: - MOVQ CX, R14 - -LBB1_376: - CMPB SI, $13 - JNE LBB1_378 - JMP LBB1_362 - -LBB1_377: - MOVQ CX, R14 - CMPB SI, $13 - JE LBB1_362 - -LBB1_378: - MOVL SI, R13 - CMPB SI, $10 - JE LBB1_362 - JMP LBB1_387 - -LBB1_381: - XORL R9, R9 - MOVL $2, R11 - XORL R12, R12 - JMP LBB1_265 - -LBB1_382: - MOVQ SI, R14 - MOVL R11, DI - JMP LBB1_387 - -LBB1_383: - MOVQ CX, R14 - JMP LBB1_387 - -LBB1_384: - CMPB CX, $47 - JNE LBB1_386 - MOVL CX, R13 - -LBB1_386: - MOVQ SI, R14 - -LBB1_387: - MOVBLZX R13, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), CX - CMPL CX, $255 - JE LBB1_389 - SHLL $6, DI - ORL CX, DI - MOVL $4, R11 - JMP LBB1_241 - -LBB1_389: - XORL R9, R9 - MOVL $3, R11 - MOVB $1, R12 - JMP LBB1_265 - -LBB1_391: - MOVQ CX, R14 - JMP LBB1_328 - -LBB1_392: - MOVQ -64(BP), R15 - -LBB1_393: - LEAQ -4(DX), R14 - CMPQ R10, R14 - MOVQ R15, -64(BP) - JA LBB1_581 - MOVQ -88(BP), AX - ADDQ $-4, AX - CMPQ R15, AX - JA LBB1_581 - MOVQ AX, R15 - MOVQ AX, -88(BP) - -LBB1_396: - MOVBLZX 0(R10), AX - MOVQ -56(BP), DI - MOVBLZX 0(DI)(AX*1), R9 - MOVBLZX 1(R10), AX - MOVBLZX 0(DI)(AX*1), BX - MOVBLZX 2(R10), CX - MOVBLZX 0(DI)(CX*1), SI - MOVBLZX 3(R10), CX - MOVBLZX 0(DI)(CX*1), CX - MOVL BX, AX - ORL R9, AX - MOVL SI, DI - ORL CX, DI - ORL AX, DI - CMPB DI, $-1 - JE LBB1_398 - SHLL $26, R9 - SHLL $20, BX - ORL R9, BX - SHLL $14, SI - SHLL $8, CX - ORL SI, CX - ORL BX, CX - BSWAPL CX - MOVQ -64(BP), AX - MOVL CX, 0(AX) - ADDQ $4, R10 - ADDQ $3, AX - MOVQ AX, -64(BP) - CMPQ R10, R14 - JBE LBB1_517 - JMP LBB1_581 - -LBB1_398: - CMPQ R10, DX - JAE LBB1_516 - MOVQ R10, R12 - JMP LBB1_402 - -LBB1_418: - CMPB CX, $110 - JNE LBB1_424 - -LBB1_400: - MOVQ SI, R12 - -LBB1_401: - CMPQ R12, DX - JAE LBB1_420 - -LBB1_402: - LEAQ 1(R12), CX - MOVBLZX 0(R12), SI - CMPB SI, $92 - JNE LBB1_414 - TESTL R8, R8 - JE LBB1_416 - LEAQ 2(R12), SI - MOVB $-1, R13 - CMPQ SI, DX - JA LBB1_423 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_418 - CMPB CX, $114 - JE LBB1_400 - CMPB CX, $117 - JNE LBB1_426 - MOVQ DX, CX - SUBQ SI, CX - CMPQ CX, $4 - JL LBB1_426 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), CX - ANDL $-2139062144, DI - TESTL CX, DI - JNE LBB1_426 - LEAL 421075225(BX), CX - ORL BX, CX - TESTL $-2139062144, CX - JNE LBB1_426 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL DI, AX - TESTL R9, AX - JNE LBB1_426 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_426 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R12 - ORL AX, CX - JNE LBB1_427 - CMPB SI, $13 - JNE LBB1_417 - JMP LBB1_401 - -LBB1_414: - MOVQ CX, R12 - CMPB SI, $13 - JNE LBB1_417 - JMP LBB1_401 - -LBB1_416: - MOVQ CX, R12 - CMPB SI, $13 - JE LBB1_401 - -LBB1_417: - MOVL SI, R13 - CMPB SI, $10 - JE LBB1_401 - JMP LBB1_427 - -LBB1_420: - MOVB $1, CX - XORL R9, R9 - XORL R11, R11 - -LBB1_421: - TESTB CX, CX - JE LBB1_429 - MOVQ R12, R10 - CMPQ R10, R14 - JBE LBB1_517 - JMP LBB1_581 - -LBB1_423: - MOVQ CX, R12 - JMP LBB1_427 - -LBB1_424: - CMPB CX, $47 - JNE LBB1_426 - MOVL CX, R13 - -LBB1_426: - MOVQ SI, R12 - -LBB1_427: - MOVBLZX R13, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), R9 - MOVB $1, AX - CMPL R9, $255 - JE LBB1_452 - MOVL $1, R11 - CMPQ R12, DX - JB LBB1_434 - -LBB1_429: - MOVL R9, R13 - CMPL -44(BP), $0 - SETEQ CX - CMPL R11, $1 - SETEQ BX - CMPQ R12, DX - JB LBB1_479 - CMPL R11, $4 - JE LBB1_479 - ORB BX, CX - JNE LBB1_515 - JMP LBB1_479 - -LBB1_450: - CMPB CX, $110 - JNE LBB1_486 - -LBB1_432: - MOVQ SI, R12 - -LBB1_433: - CMPQ R12, DX - JAE LBB1_476 - -LBB1_434: - LEAQ 1(R12), CX - MOVBLZX 0(R12), SI - CMPB SI, $92 - JNE LBB1_446 - TESTL R8, R8 - JE LBB1_448 - LEAQ 2(R12), SI - MOVB $-1, R13 - CMPQ SI, DX - JA LBB1_477 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_450 - CMPB CX, $114 - JE LBB1_432 - CMPB CX, $117 - JNE LBB1_488 - MOVQ DX, AX - SUBQ SI, AX - CMPQ AX, $4 - JL LBB1_488 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_488 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_488 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R11 - ANDL DI, AX - TESTL R11, AX - JNE LBB1_488 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_488 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R12 - ORL AX, CX - JE LBB1_447 - JMP LBB1_489 - -LBB1_446: - MOVQ CX, R12 - -LBB1_447: - CMPB SI, $13 - JNE LBB1_449 - JMP LBB1_433 - -LBB1_448: - MOVQ CX, R12 - CMPB SI, $13 - JE LBB1_433 - -LBB1_449: - MOVL SI, R13 - CMPB SI, $10 - JE LBB1_433 - JMP LBB1_489 - -LBB1_452: - XORL R9, R9 - XORL R15, R15 - XORL R11, R11 - -LBB1_453: - CMPL -44(BP), $0 - JNE LBB1_515 - CMPB R13, $61 - JNE LBB1_515 - TESTB AX, AX - JNE LBB1_515 - MOVL R9, R13 - CMPQ R12, DX - JAE LBB1_479 - MOVQ R12, BX - JMP LBB1_460 - -LBB1_475: - MOVQ SI, BX - CMPQ BX, DX - JB LBB1_460 - JMP LBB1_478 - -LBB1_458: - MOVQ R12, BX - CMPQ BX, DX - JAE LBB1_478 - -LBB1_460: - LEAQ 1(BX), SI - MOVBLZX 0(BX), DI - CMPB DI, $92 - JNE LBB1_472 - TESTL R8, R8 - JE LBB1_472 - LEAQ 2(BX), R12 - CMPQ R12, DX - JA LBB1_514 - MOVBLZX 0(SI), CX - CMPB CX, $110 - JE LBB1_458 - CMPB CX, $114 - JE LBB1_458 - CMPB CX, $117 - JNE LBB1_515 - MOVQ DX, AX - SUBQ R12, AX - CMPQ AX, $4 - JL LBB1_515 - MOVL 0(R12), CX - MOVL CX, SI - NOTL SI - LEAL -808464432(CX), AX - ANDL $-2139062144, SI - TESTL AX, SI - JNE LBB1_515 - LEAL 421075225(CX), AX - ORL CX, AX - TESTL $-2139062144, AX - JNE LBB1_515 - MOVL CX, DI - ANDL $2139062143, DI - MOVL $-1061109568, AX - SUBL DI, AX - LEAL 1179010630(DI), R9 - ANDL SI, AX - TESTL R9, AX - JNE LBB1_515 - MOVL $-522133280, AX - SUBL DI, AX - ADDL $960051513, DI - ANDL AX, SI - TESTL DI, SI - JNE LBB1_515 - BSWAPL CX - MOVL CX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, CX - ADDL AX, CX - MOVL CX, DI - SHRL $4, DI - ORL CX, DI - MOVL DI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL DI, CX - ANDL $128, CX - ADDQ $6, BX - ORL AX, CX - MOVQ BX, SI - MOVQ BX, R12 - JNE LBB1_515 - -LBB1_472: - CMPB DI, $10 - JE LBB1_475 - CMPB DI, $13 - JE LBB1_475 - CMPB DI, $61 - JNE LBB1_514 - TESTB R15, R15 - JE LBB1_521 - -LBB1_514: - MOVQ SI, R12 - -LBB1_515: - XORL CX, CX - CMPQ R12, DX - SETEQ CX - ADDQ R12, CX - CMPQ CX, R10 - MOVQ -88(BP), R15 - JNE LBB1_762 - -LBB1_516: - CMPQ R10, R14 - JA LBB1_581 - -LBB1_517: - CMPQ -64(BP), R15 - JBE LBB1_396 - JMP LBB1_581 - -LBB1_476: - MOVL $1, R11 - XORL CX, CX - JMP LBB1_421 - -LBB1_477: - MOVQ CX, R12 - JMP LBB1_489 - -LBB1_478: - MOVQ BX, R12 - -LBB1_479: - MOVB $4, AX - SUBB R11, AX - MOVBLZX AX, AX - ADDL AX, AX - LEAL 0(AX)(AX*2), CX - MOVL R13, AX - SHLL CX, AX - CMPL R11, $2 - MOVQ -64(BP), CX - JE LBB1_484 - CMPL R11, $3 - JE LBB1_483 - CMPL R11, $4 - JNE LBB1_485 - MOVB AX, 2(CX) - -LBB1_483: - MOVB AH, 1(CX) - -LBB1_484: - SHRL $16, AX - MOVB AX, 0(CX) - -LBB1_485: - MOVL R11, AX - ADDQ AX, CX - ADDQ $-1, CX - MOVQ CX, -64(BP) - MOVQ R12, R10 - MOVQ -88(BP), R15 - CMPQ R10, R14 - JBE LBB1_517 - JMP LBB1_581 - -LBB1_486: - CMPB CX, $47 - JNE LBB1_488 - MOVL CX, R13 - -LBB1_488: - MOVQ SI, R12 - -LBB1_489: - MOVBLZX R13, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), CX - CMPL CX, $255 - JE LBB1_511 - SHLL $6, R9 - ORL CX, R9 - MOVL $2, R11 - CMPQ R12, DX - JB LBB1_493 - JMP LBB1_429 - -LBB1_509: - CMPB CX, $110 - JNE LBB1_543 - -LBB1_491: - MOVQ SI, R12 - -LBB1_492: - CMPQ R12, DX - JAE LBB1_518 - -LBB1_493: - LEAQ 1(R12), CX - MOVBLZX 0(R12), SI - CMPB SI, $92 - JNE LBB1_505 - TESTL R8, R8 - JE LBB1_507 - LEAQ 2(R12), SI - MOVB $-1, R13 - CMPQ SI, DX - JA LBB1_520 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_509 - CMPB CX, $114 - JE LBB1_491 - CMPB CX, $117 - JNE LBB1_545 - MOVQ DX, AX - SUBQ SI, AX - CMPQ AX, $4 - JL LBB1_545 - MOVL R9, R11 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_519 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_519 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL DI, AX - TESTL R9, AX - JNE LBB1_519 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_519 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R12 - ORL AX, CX - MOVL R11, R9 - JE LBB1_506 - JMP LBB1_546 - -LBB1_505: - MOVQ CX, R12 - -LBB1_506: - CMPB SI, $13 - JNE LBB1_508 - JMP LBB1_492 - -LBB1_507: - MOVQ CX, R12 - CMPB SI, $13 - JE LBB1_492 - -LBB1_508: - MOVL SI, R13 - CMPB SI, $10 - JE LBB1_492 - JMP LBB1_546 - -LBB1_511: - XORL R15, R15 - MOVL $1, R11 - MOVB $1, AX - JMP LBB1_453 - -LBB1_518: - MOVL $2, R11 - XORL CX, CX - JMP LBB1_421 - -LBB1_519: - MOVQ SI, R12 - MOVL R11, R9 - JMP LBB1_546 - -LBB1_520: - MOVQ CX, R12 - JMP LBB1_546 - -LBB1_521: - CMPQ SI, DX - JB LBB1_525 - -LBB1_522: - MOVQ SI, R12 - JMP LBB1_479 - -LBB1_523: - MOVQ R12, SI - -LBB1_524: - CMPQ SI, DX - JAE LBB1_522 - -LBB1_525: - LEAQ 1(SI), CX - MOVBLZX 0(SI), DI - CMPB DI, $92 - JNE LBB1_538 - TESTL R8, R8 - JE LBB1_538 - LEAQ 2(SI), R12 - CMPQ R12, DX - JA LBB1_578 - MOVBLZX 0(CX), CX - CMPB CX, $110 - JE LBB1_523 - CMPB CX, $114 - JE LBB1_523 - CMPB CX, $117 - JNE LBB1_515 - MOVQ DX, AX - SUBQ R12, AX - CMPQ AX, $4 - JL LBB1_515 - MOVL 0(R12), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_515 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_515 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL DI, AX - TESTL R9, AX - JNE LBB1_515 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_515 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, DI - SHRL $4, DI - ORL BX, DI - MOVL DI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL DI, CX - ANDL $128, CX - ADDQ $6, SI - ORL AX, CX - MOVQ SI, R12 - JE LBB1_539 - JMP LBB1_515 - -LBB1_538: - MOVQ CX, R12 - -LBB1_539: - CMPB DI, $13 - JE LBB1_523 - MOVQ R12, SI - CMPB DI, $10 - JE LBB1_524 - JMP LBB1_515 - -LBB1_543: - CMPB CX, $47 - JNE LBB1_545 - MOVL CX, R13 - -LBB1_545: - MOVQ SI, R12 - -LBB1_546: - MOVBLZX R13, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), CX - CMPL CX, $255 - JE LBB1_568 - SHLL $6, R9 - ORL CX, R9 - MOVL $3, R11 - CMPQ R12, DX - JB LBB1_550 - JMP LBB1_429 - -LBB1_566: - CMPB CX, $110 - JNE LBB1_571 - -LBB1_548: - MOVQ SI, R12 - -LBB1_549: - MOVL $3, R11 - XORL CX, CX - CMPQ R12, DX - JAE LBB1_421 - -LBB1_550: - LEAQ 1(R12), CX - MOVBLZX 0(R12), SI - CMPB SI, $92 - JNE LBB1_562 - TESTL R8, R8 - JE LBB1_564 - LEAQ 2(R12), SI - MOVB $-1, R13 - CMPQ SI, DX - JA LBB1_570 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_566 - CMPB CX, $114 - JE LBB1_548 - CMPB CX, $117 - JNE LBB1_573 - MOVQ DX, AX - SUBQ SI, AX - CMPQ AX, $4 - JL LBB1_573 - MOVL R9, R11 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_569 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_569 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL DI, AX - TESTL R9, AX - JNE LBB1_569 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_569 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R12 - ORL AX, CX - MOVL R11, R9 - JE LBB1_563 - JMP LBB1_574 - -LBB1_562: - MOVQ CX, R12 - -LBB1_563: - CMPB SI, $13 - JNE LBB1_565 - JMP LBB1_549 - -LBB1_564: - MOVQ CX, R12 - CMPB SI, $13 - JE LBB1_549 - -LBB1_565: - MOVL SI, R13 - CMPB SI, $10 - JE LBB1_549 - JMP LBB1_574 - -LBB1_568: - XORL AX, AX - MOVL $2, R11 - XORL R15, R15 - JMP LBB1_453 - -LBB1_569: - MOVQ SI, R12 - MOVL R11, R9 - JMP LBB1_574 - -LBB1_570: - MOVQ CX, R12 - JMP LBB1_574 - -LBB1_571: - CMPB CX, $47 - JNE LBB1_573 - MOVL CX, R13 - -LBB1_573: - MOVQ SI, R12 - -LBB1_574: - MOVBLZX R13, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), CX - CMPL CX, $255 - JE LBB1_576 - SHLL $6, R9 - ORL CX, R9 - MOVL $4, R11 - JMP LBB1_429 - -LBB1_576: - XORL AX, AX - MOVL $3, R11 - MOVB $1, R15 - JMP LBB1_453 - -LBB1_578: - MOVQ CX, R12 - JMP LBB1_515 - -LBB1_579: - MOVQ BX, R12 - -LBB1_580: - XORL CX, CX - CMPQ R12, DX - SETEQ CX - ADDQ R12, CX - SUBQ R10, CX - TESTQ CX, CX - JNE LBB1_761 - -LBB1_581: - CMPQ R10, DX - JAE LBB1_760 - MOVQ R10, R12 - JMP LBB1_585 - -LBB1_601: - CMPB CX, $110 - JNE LBB1_606 - -LBB1_583: - MOVQ SI, R12 - -LBB1_584: - CMPQ R12, DX - JAE LBB1_603 - -LBB1_585: - LEAQ 1(R12), CX - MOVBLZX 0(R12), SI - CMPB SI, $92 - JNE LBB1_597 - TESTL R8, R8 - JE LBB1_599 - LEAQ 2(R12), SI - MOVB $-1, R15 - CMPQ SI, DX - JA LBB1_605 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_601 - CMPB CX, $114 - JE LBB1_583 - CMPB CX, $117 - JNE LBB1_608 - MOVQ DX, CX - SUBQ SI, CX - CMPQ CX, $4 - JL LBB1_608 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), CX - ANDL $-2139062144, DI - TESTL CX, DI - JNE LBB1_608 - LEAL 421075225(BX), CX - ORL BX, CX - TESTL $-2139062144, CX - JNE LBB1_608 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL DI, AX - TESTL R9, AX - JNE LBB1_608 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_608 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R12 - ORL AX, CX - JNE LBB1_609 - CMPB SI, $13 - JNE LBB1_600 - JMP LBB1_584 - -LBB1_597: - MOVQ CX, R12 - CMPB SI, $13 - JNE LBB1_600 - JMP LBB1_584 - -LBB1_599: - MOVQ CX, R12 - CMPB SI, $13 - JE LBB1_584 - -LBB1_600: - MOVL SI, R15 - CMPB SI, $10 - JE LBB1_584 - JMP LBB1_609 - -LBB1_603: - MOVB $1, CX - XORL BX, BX - XORL R11, R11 - -LBB1_604: - TESTB CX, CX - JE LBB1_611 - MOVQ R12, R10 - XORL CX, CX - TESTQ CX, CX - JE LBB1_581 - JMP LBB1_761 - -LBB1_605: - MOVQ CX, R12 - JMP LBB1_609 - -LBB1_606: - CMPB CX, $47 - JNE LBB1_608 - MOVL CX, R15 - -LBB1_608: - MOVQ SI, R12 - -LBB1_609: - MOVBLZX R15, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), BX - MOVB $1, R14 - CMPL BX, $255 - JE LBB1_635 - MOVL $1, R11 - CMPQ R12, DX - JB LBB1_617 - -LBB1_611: - MOVL BX, R15 - -LBB1_612: - CMPL -44(BP), $0 - SETEQ CX - CMPL R11, $1 - SETEQ BX - CMPQ R12, DX - JB LBB1_663 - CMPL R11, $4 - JE LBB1_663 - ORB BX, CX - JNE LBB1_580 - JMP LBB1_663 - -LBB1_633: - CMPB CX, $110 - JNE LBB1_671 - -LBB1_615: - MOVQ DI, R12 - -LBB1_616: - CMPQ R12, DX - JAE LBB1_659 - -LBB1_617: - LEAQ 1(R12), CX - MOVBLZX 0(R12), DI - CMPB DI, $92 - JNE LBB1_629 - TESTL R8, R8 - JE LBB1_631 - LEAQ 2(R12), DI - MOVB $-1, R15 - CMPQ DI, DX - JA LBB1_661 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_633 - CMPB CX, $114 - JE LBB1_615 - CMPB CX, $117 - JNE LBB1_673 - MOVQ DX, AX - SUBQ DI, AX - CMPQ AX, $4 - JL LBB1_673 - MOVL BX, R11 - MOVL 0(DI), BX - MOVL BX, SI - NOTL SI - LEAL -808464432(BX), AX - ANDL $-2139062144, SI - TESTL AX, SI - JNE LBB1_660 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_660 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL SI, AX - TESTL R9, AX - JNE LBB1_660 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, SI - TESTL CX, SI - JNE LBB1_660 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, DI - SHRL $4, DI - ORL BX, DI - MOVL DI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL DI, CX - ANDL $128, CX - ADDQ $6, R12 - ORL AX, CX - MOVL R11, BX - JNE LBB1_674 - CMPB DI, $13 - JNE LBB1_632 - JMP LBB1_616 - -LBB1_629: - MOVQ CX, R12 - CMPB DI, $13 - JNE LBB1_632 - JMP LBB1_616 - -LBB1_631: - MOVQ CX, R12 - CMPB DI, $13 - JE LBB1_616 - -LBB1_632: - MOVL DI, R15 - CMPB DI, $10 - JE LBB1_616 - JMP LBB1_674 - -LBB1_635: - XORL BX, BX - XORL R9, R9 - XORL R11, R11 - -LBB1_636: - CMPL -44(BP), $0 - JNE LBB1_580 - CMPB R15, $61 - JNE LBB1_580 - TESTB R14, R14 - JNE LBB1_580 - MOVL BX, R15 - CMPQ R12, DX - JAE LBB1_663 - MOVQ R12, SI - JMP LBB1_643 - -LBB1_658: - MOVQ BX, SI - CMPQ SI, DX - JB LBB1_643 - JMP LBB1_662 - -LBB1_641: - MOVQ R12, SI - CMPQ SI, DX - JAE LBB1_662 - -LBB1_643: - LEAQ 1(SI), BX - MOVBLZX 0(SI), DI - CMPB DI, $92 - JNE LBB1_655 - TESTL R8, R8 - JE LBB1_655 - LEAQ 2(SI), R12 - CMPQ R12, DX - JA LBB1_579 - MOVBLZX 0(BX), CX - CMPB CX, $110 - JE LBB1_641 - CMPB CX, $114 - JE LBB1_641 - CMPB CX, $117 - JNE LBB1_580 - MOVQ DX, AX - SUBQ R12, AX - CMPQ AX, $4 - JL LBB1_580 - MOVL 0(R12), CX - MOVL CX, DI - NOTL DI - LEAL -808464432(CX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_580 - LEAL 421075225(CX), AX - ORL CX, AX - TESTL $-2139062144, AX - JNE LBB1_580 - MOVL CX, BX - ANDL $2139062143, BX - MOVL $-1061109568, AX - SUBL BX, AX - LEAL 1179010630(BX), R14 - ANDL DI, AX - TESTL R14, AX - JNE LBB1_580 - MOVL $-522133280, AX - SUBL BX, AX - ADDL $960051513, BX - ANDL AX, DI - TESTL BX, DI - JNE LBB1_580 - BSWAPL CX - MOVL CX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, CX - ADDL AX, CX - MOVL CX, DI - SHRL $4, DI - ORL CX, DI - MOVL DI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL DI, CX - ANDL $128, CX - ADDQ $6, SI - ORL AX, CX - MOVQ SI, BX - MOVQ SI, R12 - JNE LBB1_580 - -LBB1_655: - CMPB DI, $10 - JE LBB1_658 - CMPB DI, $13 - JE LBB1_658 - CMPB DI, $61 - JNE LBB1_579 - TESTB R9, R9 - JNE LBB1_579 - CMPQ BX, DX - JB LBB1_706 - -LBB1_700: - MOVQ BX, R12 - JMP LBB1_663 - -LBB1_659: - MOVL $1, R11 - XORL CX, CX - JMP LBB1_604 - -LBB1_660: - MOVQ DI, R12 - MOVL R11, BX - JMP LBB1_674 - -LBB1_661: - MOVQ CX, R12 - JMP LBB1_674 - -LBB1_662: - MOVQ SI, R12 - -LBB1_663: - MOVB $4, AX - SUBB R11, AX - MOVBLZX AX, AX - ADDL AX, AX - LEAL 0(AX)(AX*2), CX - MOVL R15, AX - SHLL CX, AX - CMPL R11, $2 - MOVQ -64(BP), CX - JE LBB1_668 - CMPL R11, $3 - JE LBB1_667 - CMPL R11, $4 - JNE LBB1_669 - MOVB AX, 2(CX) - -LBB1_667: - MOVB AH, 1(CX) - -LBB1_668: - SHRL $16, AX - MOVB AX, 0(CX) - -LBB1_669: - MOVL R11, AX - ADDQ AX, CX - ADDQ $-1, CX - MOVQ CX, -64(BP) - MOVQ R12, R10 - XORL CX, CX - TESTQ CX, CX - JE LBB1_581 - JMP LBB1_761 - -LBB1_671: - CMPB CX, $47 - JNE LBB1_673 - MOVL CX, R15 - -LBB1_673: - MOVQ DI, R12 - -LBB1_674: - MOVBLZX R15, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), CX - CMPL CX, $255 - JE LBB1_696 - SHLL $6, BX - ORL CX, BX - MOVL $2, R11 - CMPQ R12, DX - JB LBB1_678 - JMP LBB1_611 - -LBB1_694: - CMPB CX, $110 - JNE LBB1_724 - -LBB1_676: - MOVQ SI, R12 - -LBB1_677: - CMPQ R12, DX - JAE LBB1_701 - -LBB1_678: - LEAQ 1(R12), CX - MOVBLZX 0(R12), SI - CMPB SI, $92 - JNE LBB1_690 - TESTL R8, R8 - JE LBB1_692 - LEAQ 2(R12), SI - MOVB $-1, R15 - CMPQ SI, DX - JA LBB1_703 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_694 - CMPB CX, $114 - JE LBB1_676 - CMPB CX, $117 - JNE LBB1_726 - MOVQ DX, AX - SUBQ SI, AX - CMPQ AX, $4 - JL LBB1_726 - MOVL BX, R11 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_702 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_702 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL DI, AX - TESTL R9, AX - JNE LBB1_702 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_702 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R12 - ORL AX, CX - MOVL R11, BX - JE LBB1_691 - JMP LBB1_727 - -LBB1_690: - MOVQ CX, R12 - -LBB1_691: - CMPB SI, $13 - JNE LBB1_693 - JMP LBB1_677 - -LBB1_692: - MOVQ CX, R12 - CMPB SI, $13 - JE LBB1_677 - -LBB1_693: - MOVL SI, R15 - CMPB SI, $10 - JE LBB1_677 - JMP LBB1_727 - -LBB1_696: - XORL R9, R9 - MOVL $1, R11 - JMP LBB1_636 - -LBB1_704: - MOVQ R12, BX - -LBB1_705: - CMPQ BX, DX - JAE LBB1_700 - -LBB1_706: - LEAQ 1(BX), CX - MOVBLZX 0(BX), SI - CMPB SI, $92 - JNE LBB1_718 - TESTL R8, R8 - JE LBB1_720 - LEAQ 2(BX), R12 - CMPQ R12, DX - JA LBB1_759 - MOVBLZX 0(CX), CX - CMPB CX, $110 - JE LBB1_704 - CMPB CX, $114 - JE LBB1_704 - CMPB CX, $117 - JNE LBB1_580 - MOVQ DX, AX - SUBQ R12, AX - CMPQ AX, $4 - JL LBB1_580 - MOVL 0(R12), CX - MOVL CX, SI - NOTL SI - LEAL -808464432(CX), AX - ANDL $-2139062144, SI - TESTL AX, SI - JNE LBB1_580 - LEAL 421075225(CX), AX - ORL CX, AX - TESTL $-2139062144, AX - JNE LBB1_580 - MOVL CX, DI - ANDL $2139062143, DI - MOVL $-1061109568, AX - SUBL DI, AX - LEAL 1179010630(DI), R9 - ANDL SI, AX - TESTL R9, AX - JNE LBB1_580 - MOVL $-522133280, AX - SUBL DI, AX - ADDL $960051513, DI - ANDL AX, SI - TESTL DI, SI - JNE LBB1_580 - BSWAPL CX - MOVL CX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, CX - ADDL AX, CX - MOVL CX, SI - SHRL $4, SI - ORL CX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, BX - ORL AX, CX - MOVQ BX, R12 - JE LBB1_719 - JMP LBB1_580 - -LBB1_718: - MOVQ CX, R12 - -LBB1_719: - CMPB SI, $13 - JNE LBB1_721 - JMP LBB1_704 - -LBB1_720: - MOVQ CX, R12 - CMPB SI, $13 - JE LBB1_704 - -LBB1_721: - MOVQ R12, BX - CMPB SI, $10 - JE LBB1_705 - JMP LBB1_580 - -LBB1_701: - MOVL $2, R11 - XORL CX, CX - JMP LBB1_604 - -LBB1_702: - MOVQ SI, R12 - MOVL R11, BX - JMP LBB1_727 - -LBB1_703: - MOVQ CX, R12 - JMP LBB1_727 - -LBB1_724: - CMPB CX, $47 - JNE LBB1_726 - MOVL CX, R15 - -LBB1_726: - MOVQ SI, R12 - -LBB1_727: - MOVBLZX R15, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), CX - CMPL CX, $255 - JE LBB1_749 - SHLL $6, BX - ORL CX, BX - MOVL $3, R11 - CMPQ R12, DX - JB LBB1_731 - JMP LBB1_611 - -LBB1_747: - CMPB CX, $110 - JNE LBB1_752 - -LBB1_729: - MOVQ SI, R12 - -LBB1_730: - MOVL $3, R11 - XORL CX, CX - CMPQ R12, DX - JAE LBB1_604 - -LBB1_731: - LEAQ 1(R12), CX - MOVBLZX 0(R12), SI - CMPB SI, $92 - JNE LBB1_743 - TESTL R8, R8 - JE LBB1_745 - LEAQ 2(R12), SI - MOVB $-1, R15 - CMPQ SI, DX - JA LBB1_751 - MOVBLZX 0(CX), CX - CMPB CX, $113 - JLE LBB1_747 - CMPB CX, $114 - JE LBB1_729 - CMPB CX, $117 - JNE LBB1_754 - MOVQ DX, AX - SUBQ SI, AX - CMPQ AX, $4 - JL LBB1_754 - MOVL BX, R11 - MOVL 0(SI), BX - MOVL BX, DI - NOTL DI - LEAL -808464432(BX), AX - ANDL $-2139062144, DI - TESTL AX, DI - JNE LBB1_750 - LEAL 421075225(BX), AX - ORL BX, AX - TESTL $-2139062144, AX - JNE LBB1_750 - MOVL BX, CX - ANDL $2139062143, CX - MOVL $-1061109568, AX - SUBL CX, AX - LEAL 1179010630(CX), R9 - ANDL DI, AX - TESTL R9, AX - JNE LBB1_750 - MOVL $-522133280, AX - SUBL CX, AX - ADDL $960051513, CX - ANDL AX, DI - TESTL CX, DI - JNE LBB1_750 - BSWAPL BX - MOVL BX, AX - SHRL $4, AX - NOTL AX - ANDL $16843009, AX - LEAL 0(AX)(AX*8), AX - ANDL $252645135, BX - ADDL AX, BX - MOVL BX, SI - SHRL $4, SI - ORL BX, SI - MOVL SI, AX - SHRL $8, AX - ANDL $65280, AX - MOVL SI, CX - ANDL $128, CX - ADDQ $6, R12 - ORL AX, CX - MOVL R11, BX - JE LBB1_744 - JMP LBB1_755 - -LBB1_743: - MOVQ CX, R12 - -LBB1_744: - CMPB SI, $13 - JNE LBB1_746 - JMP LBB1_730 - -LBB1_745: - MOVQ CX, R12 - CMPB SI, $13 - JE LBB1_730 - -LBB1_746: - MOVL SI, R15 - CMPB SI, $10 - JE LBB1_730 - JMP LBB1_755 - -LBB1_749: - XORL R14, R14 - MOVL $2, R11 - XORL R9, R9 - JMP LBB1_636 - -LBB1_750: - MOVQ SI, R12 - MOVL R11, BX - JMP LBB1_755 - -LBB1_751: - MOVQ CX, R12 - JMP LBB1_755 - -LBB1_752: - CMPB CX, $47 - JNE LBB1_754 - MOVL CX, R15 - -LBB1_754: - MOVQ SI, R12 - -LBB1_755: - MOVBLZX R15, AX - MOVQ -56(BP), CX - MOVBLZX 0(CX)(AX*1), CX - CMPL CX, $255 - JE LBB1_757 - SHLL $6, BX - ORL CX, BX - MOVL BX, R15 - MOVL $4, R11 - JMP LBB1_612 - -LBB1_757: - XORL R14, R14 - MOVL $3, R11 - MOVB $1, R9 - JMP LBB1_636 - -LBB1_759: - MOVQ CX, R12 - JMP LBB1_580 - -LBB1_760: - MOVQ -64(BP), CX - SUBQ -112(BP), CX - MOVQ -120(BP), AX - ADDQ CX, 8(AX) - MOVQ CX, AX - JMP LBB1_763 - -LBB1_761: - ADDQ R10, CX - -LBB1_762: - MOVQ -96(BP), AX - SUBQ CX, AX - -LBB1_763: - ADDQ $80, SP - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - RET - -_TabEncodeCharsetStd: - QUAD $0x4847464544434241; QUAD $0x504f4e4d4c4b4a49 // .ascii 16, 'ABCDEFGHIJKLMNOP' - QUAD $0x5857565554535251; QUAD $0x6665646362615a59 // .ascii 16, 'QRSTUVWXYZabcdef' - QUAD $0x6e6d6c6b6a696867; QUAD $0x767574737271706f // .ascii 16, 'ghijklmnopqrstuv' - QUAD $0x333231307a797877; QUAD $0x2f2b393837363534 // .ascii 16, 'wxyz0123456789+/' - -_TabEncodeCharsetURL: - QUAD $0x4847464544434241; QUAD $0x504f4e4d4c4b4a49 // .ascii 16, 'ABCDEFGHIJKLMNOP' - QUAD $0x5857565554535251; QUAD $0x6665646362615a59 // .ascii 16, 'QRSTUVWXYZabcdef' - QUAD $0x6e6d6c6b6a696867; QUAD $0x767574737271706f // .ascii 16, 'ghijklmnopqrstuv' - QUAD $0x333231307a797877; QUAD $0x5f2d393837363534 // .ascii 16, 'wxyz0123456789-_' - -_VecDecodeCharsetStd: - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0x3fffffff3effffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff>\xff\xff\xff?' - QUAD $0x3b3a393837363534; QUAD $0xffffffffffff3d3c // .ascii 16, '456789:;<=\xff\xff\xff\xff\xff\xff' - QUAD $0x06050403020100ff; QUAD $0x0e0d0c0b0a090807 // .ascii 16, '\xff\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e' - QUAD $0x161514131211100f; QUAD $0xffffffffff191817 // .ascii 16, '\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\xff\xff\xff\xff\xff' - QUAD $0x201f1e1d1c1b1aff; QUAD $0x2827262524232221 // .ascii 16, '\xff\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'(' - QUAD $0x302f2e2d2c2b2a29; QUAD $0xffffffffff333231 // .ascii 16, ')*+,-./0123\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - -_VecDecodeCharsetURL: - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffff3effffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff>\xff\xff' - QUAD $0x3b3a393837363534; QUAD $0xffffffffffff3d3c // .ascii 16, '456789:;<=\xff\xff\xff\xff\xff\xff' - QUAD $0x06050403020100ff; QUAD $0x0e0d0c0b0a090807 // .ascii 16, '\xff\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e' - QUAD $0x161514131211100f; QUAD $0x3fffffffff191817 // .ascii 16, '\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\xff\xff\xff\xff?' - QUAD $0x201f1e1d1c1b1aff; QUAD $0x2827262524232221 // .ascii 16, '\xff\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'(' - QUAD $0x302f2e2d2c2b2a29; QUAD $0xffffffffff333231 // .ascii 16, ')*+,-./0123\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' - -TEXT ·__b64decode(SB), NOSPLIT | NOFRAME, $0 - 40 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -128(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_b64decode: - MOVQ out+0(FP), DI - MOVQ src+8(FP), SI - MOVQ len+16(FP), DX - MOVQ mode+24(FP), CX - CALL ·__native_entry__+1563(SB) // _b64decode - MOVQ AX, ret+32(FP) - RET - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry - -TEXT ·__b64encode(SB), NOSPLIT | NOFRAME, $0 - 24 - NO_LOCAL_POINTERS - -_entry: - MOVQ (TLS), R14 - LEAQ -40(SP), R12 - CMPQ R12, 16(R14) - JBE _stack_grow - -_b64encode: - MOVQ out+0(FP), DI - MOVQ src+8(FP), SI - MOVQ mode+16(FP), DX - LEAQ ·__native_entry__+301(SB), AX // _b64encode - JMP AX - -_stack_grow: - CALL runtime·morestack_noctxt<>(SB) - JMP _entry diff --git a/vendor/github.com/chenzhuoyu/base64x/native_subr_amd64.go b/vendor/github.com/chenzhuoyu/base64x/native_subr_amd64.go index f18de543eb..3bcb090057 100644 --- a/vendor/github.com/chenzhuoyu/base64x/native_subr_amd64.go +++ b/vendor/github.com/chenzhuoyu/base64x/native_subr_amd64.go @@ -3,27 +3,61 @@ package base64x -//go:nosplit -//go:noescape -//goland:noinspection ALL -func __native_entry__() uintptr +import ( + `github.com/bytedance/sonic/loader` +) -var ( - _subr__b64decode = __native_entry__() + 1563 - _subr__b64encode = __native_entry__() + 301 +const ( + _entry__b64decode = 1328 + _entry__b64encode = 256 ) const ( - _stack__b64decode = 128 + _stack__b64decode = 152 _stack__b64encode = 40 ) -var ( - _ = _subr__b64decode - _ = _subr__b64encode +const ( + _size__b64decode = 17616 + _size__b64encode = 864 ) -const ( - _ = _stack__b64decode - _ = _stack__b64encode +var ( + _pcsp__b64decode = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {12, 40}, + {13, 48}, + {17560, 152}, + {17564, 48}, + {17565, 40}, + {17567, 32}, + {17569, 24}, + {17571, 16}, + {17573, 8}, + {17577, 0}, + {17608, 152}, + } + _pcsp__b64encode = [][2]uint32{ + {1, 0}, + {4, 8}, + {6, 16}, + {8, 24}, + {10, 32}, + {852, 40}, + {853, 32}, + {855, 24}, + {857, 16}, + {859, 8}, + {864, 0}, + } ) + +var funcs = []loader.CFunc{ + {"__native_entry__", 0, 67, 0, nil}, + {"_b64decode", _entry__b64decode, _size__b64decode, _stack__b64decode, _pcsp__b64decode}, + {"_b64encode", _entry__b64encode, _size__b64encode, _stack__b64encode, _pcsp__b64encode}, +} diff --git a/vendor/github.com/chenzhuoyu/base64x/native_text_amd64.go b/vendor/github.com/chenzhuoyu/base64x/native_text_amd64.go new file mode 100644 index 0000000000..fcfb219428 --- /dev/null +++ b/vendor/github.com/chenzhuoyu/base64x/native_text_amd64.go @@ -0,0 +1,5305 @@ +// +build amd64 +// Code generated by asm2asm, DO NOT EDIT. + +package base64x + +var text__native_entry__ = []byte{ + 0x48, 0x8d, 0x05, 0xf9, 0xff, 0xff, 0xff, // leaq $-7(%rip), %rax + 0x48, 0x89, 0x44, 0x24, 0x08, //0x00000007 movq %rax, $8(%rsp) + 0xc3, //0x0000000c retq + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000000d .p2align 5, 0x00 + //0x00000020 LCPI0_0 + 0x01, //0x00000020 .byte 1 + 0x00, //0x00000021 .byte 0 + 0x02, //0x00000022 .byte 2 + 0x01, //0x00000023 .byte 1 + 0x04, //0x00000024 .byte 4 + 0x03, //0x00000025 .byte 3 + 0x05, //0x00000026 .byte 5 + 0x04, //0x00000027 .byte 4 + 0x07, //0x00000028 .byte 7 + 0x06, //0x00000029 .byte 6 + 0x08, //0x0000002a .byte 8 + 0x07, //0x0000002b .byte 7 + 0x0a, //0x0000002c .byte 10 + 0x09, //0x0000002d .byte 9 + 0x0b, //0x0000002e .byte 11 + 0x0a, //0x0000002f .byte 10 + 0x01, //0x00000030 .byte 1 + 0x00, //0x00000031 .byte 0 + 0x02, //0x00000032 .byte 2 + 0x01, //0x00000033 .byte 1 + 0x04, //0x00000034 .byte 4 + 0x03, //0x00000035 .byte 3 + 0x05, //0x00000036 .byte 5 + 0x04, //0x00000037 .byte 4 + 0x07, //0x00000038 .byte 7 + 0x06, //0x00000039 .byte 6 + 0x08, //0x0000003a .byte 8 + 0x07, //0x0000003b .byte 7 + 0x0a, //0x0000003c .byte 10 + 0x09, //0x0000003d .byte 9 + 0x0b, //0x0000003e .byte 11 + 0x0a, //0x0000003f .byte 10 + //0x00000040 LCPI0_1 + 0x00, 0xfc, //0x00000040 .word 64512 + 0xc0, 0x0f, //0x00000042 .word 4032 + 0x00, 0xfc, //0x00000044 .word 64512 + 0xc0, 0x0f, //0x00000046 .word 4032 + 0x00, 0xfc, //0x00000048 .word 64512 + 0xc0, 0x0f, //0x0000004a .word 4032 + 0x00, 0xfc, //0x0000004c .word 64512 + 0xc0, 0x0f, //0x0000004e .word 4032 + 0x00, 0xfc, //0x00000050 .word 64512 + 0xc0, 0x0f, //0x00000052 .word 4032 + 0x00, 0xfc, //0x00000054 .word 64512 + 0xc0, 0x0f, //0x00000056 .word 4032 + 0x00, 0xfc, //0x00000058 .word 64512 + 0xc0, 0x0f, //0x0000005a .word 4032 + 0x00, 0xfc, //0x0000005c .word 64512 + 0xc0, 0x0f, //0x0000005e .word 4032 + //0x00000060 LCPI0_2 + 0x40, 0x00, //0x00000060 .word 64 + 0x00, 0x04, //0x00000062 .word 1024 + 0x40, 0x00, //0x00000064 .word 64 + 0x00, 0x04, //0x00000066 .word 1024 + 0x40, 0x00, //0x00000068 .word 64 + 0x00, 0x04, //0x0000006a .word 1024 + 0x40, 0x00, //0x0000006c .word 64 + 0x00, 0x04, //0x0000006e .word 1024 + 0x40, 0x00, //0x00000070 .word 64 + 0x00, 0x04, //0x00000072 .word 1024 + 0x40, 0x00, //0x00000074 .word 64 + 0x00, 0x04, //0x00000076 .word 1024 + 0x40, 0x00, //0x00000078 .word 64 + 0x00, 0x04, //0x0000007a .word 1024 + 0x40, 0x00, //0x0000007c .word 64 + 0x00, 0x04, //0x0000007e .word 1024 + //0x00000080 LCPI0_3 + 0xf0, 0x03, //0x00000080 .word 1008 + 0x3f, 0x00, //0x00000082 .word 63 + 0xf0, 0x03, //0x00000084 .word 1008 + 0x3f, 0x00, //0x00000086 .word 63 + 0xf0, 0x03, //0x00000088 .word 1008 + 0x3f, 0x00, //0x0000008a .word 63 + 0xf0, 0x03, //0x0000008c .word 1008 + 0x3f, 0x00, //0x0000008e .word 63 + 0xf0, 0x03, //0x00000090 .word 1008 + 0x3f, 0x00, //0x00000092 .word 63 + 0xf0, 0x03, //0x00000094 .word 1008 + 0x3f, 0x00, //0x00000096 .word 63 + 0xf0, 0x03, //0x00000098 .word 1008 + 0x3f, 0x00, //0x0000009a .word 63 + 0xf0, 0x03, //0x0000009c .word 1008 + 0x3f, 0x00, //0x0000009e .word 63 + //0x000000a0 LCPI0_4 + 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, //0x000000a0 QUAD $0x1a1a1a1a1a1a1a1a; QUAD $0x1a1a1a1a1a1a1a1a // .space 16, '\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a' + 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, //0x000000b0 QUAD $0x1a1a1a1a1a1a1a1a; QUAD $0x1a1a1a1a1a1a1a1a // .space 16, '\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a' + //0x000000c0 LCPI0_5 + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x000000c0 QUAD $0x3333333333333333; QUAD $0x3333333333333333 // .space 16, '3333333333333333' + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x000000d0 QUAD $0x3333333333333333; QUAD $0x3333333333333333 // .space 16, '3333333333333333' + //0x000000e0 LCPI0_6 + 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, //0x000000e0 QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' + 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, //0x000000f0 QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' + //0x00000100 .p2align 4, 0x90 + //0x00000100 _b64encode + 0x55, //0x00000100 pushq %rbp + 0x48, 0x89, 0xe5, //0x00000101 movq %rsp, %rbp + 0x41, 0x57, //0x00000104 pushq %r15 + 0x41, 0x56, //0x00000106 pushq %r14 + 0x41, 0x54, //0x00000108 pushq %r12 + 0x53, //0x0000010a pushq %rbx + 0x4c, 0x8b, 0x4e, 0x08, //0x0000010b movq $8(%rsi), %r9 + 0x4d, 0x85, 0xc9, //0x0000010f testq %r9, %r9 + 0x0f, 0x84, 0x3c, 0x03, 0x00, 0x00, //0x00000112 je LBB0_26 + 0x4c, 0x8b, 0x07, //0x00000118 movq (%rdi), %r8 + 0x4c, 0x03, 0x47, 0x08, //0x0000011b addq $8(%rdi), %r8 + 0x4c, 0x8b, 0x26, //0x0000011f movq (%rsi), %r12 + 0x4d, 0x01, 0xe1, //0x00000122 addq %r12, %r9 + 0xf6, 0xc2, 0x01, //0x00000125 testb $1, %dl + 0x48, 0x8d, 0x0d, 0x11, 0x49, 0x00, 0x00, //0x00000128 leaq $18705(%rip), %rcx /* _VecEncodeCharsetStd+0(%rip) */ + 0x4c, 0x8d, 0x15, 0x6a, 0x49, 0x00, 0x00, //0x0000012f leaq $18794(%rip), %r10 /* _VecEncodeCharsetURL+0(%rip) */ + 0x4c, 0x0f, 0x44, 0xd1, //0x00000136 cmoveq %rcx, %r10 + 0x48, 0x8d, 0x0d, 0xbf, 0x48, 0x00, 0x00, //0x0000013a leaq $18623(%rip), %rcx /* _TabEncodeCharsetStd+0(%rip) */ + 0x4c, 0x8d, 0x1d, 0x18, 0x49, 0x00, 0x00, //0x00000141 leaq $18712(%rip), %r11 /* _TabEncodeCharsetURL+0(%rip) */ + 0x4c, 0x0f, 0x44, 0xd9, //0x00000148 cmoveq %rcx, %r11 + 0xf6, 0xc2, 0x04, //0x0000014c testb $4, %dl + 0x0f, 0x84, 0xc8, 0x00, 0x00, 0x00, //0x0000014f je LBB0_2 + 0x49, 0x8d, 0x71, 0xe4, //0x00000155 leaq $-28(%r9), %rsi + 0x49, 0x39, 0xf4, //0x00000159 cmpq %rsi, %r12 + 0x0f, 0x87, 0x4e, 0x02, 0x00, 0x00, //0x0000015c ja LBB0_4 + 0xc4, 0xc1, 0x7e, 0x6f, 0x02, //0x00000162 vmovdqu (%r10), %ymm0 + 0xc5, 0xfd, 0x6f, 0x0d, 0xb1, 0xfe, 0xff, 0xff, //0x00000167 vmovdqa $-335(%rip), %ymm1 /* LCPI0_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x15, 0xc9, 0xfe, 0xff, 0xff, //0x0000016f vmovdqa $-311(%rip), %ymm2 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x1d, 0xe1, 0xfe, 0xff, 0xff, //0x00000177 vmovdqa $-287(%rip), %ymm3 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x25, 0xf9, 0xfe, 0xff, 0xff, //0x0000017f vmovdqa $-263(%rip), %ymm4 /* LCPI0_3+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x2d, 0x11, 0xff, 0xff, 0xff, //0x00000187 vmovdqa $-239(%rip), %ymm5 /* LCPI0_4+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0x29, 0xff, 0xff, 0xff, //0x0000018f vmovdqa $-215(%rip), %ymm6 /* LCPI0_5+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x3d, 0x41, 0xff, 0xff, 0xff, //0x00000197 vmovdqa $-191(%rip), %ymm7 /* LCPI0_6+0(%rip) */ + 0x4d, 0x89, 0xc6, //0x0000019f movq %r8, %r14 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000001a2 .p2align 4, 0x90 + //0x000001b0 LBB0_6 + 0xc4, 0x41, 0x7a, 0x6f, 0x04, 0x24, //0x000001b0 vmovdqu (%r12), %xmm8 + 0xc4, 0x43, 0x3d, 0x38, 0x44, 0x24, 0x0c, 0x01, //0x000001b6 vinserti128 $1, $12(%r12), %ymm8, %ymm8 + 0xc4, 0x62, 0x3d, 0x00, 0xc1, //0x000001be vpshufb %ymm1, %ymm8, %ymm8 + 0xc5, 0x3d, 0xdb, 0xca, //0x000001c3 vpand %ymm2, %ymm8, %ymm9 + 0xc5, 0x35, 0xe4, 0xcb, //0x000001c7 vpmulhuw %ymm3, %ymm9, %ymm9 + 0xc5, 0x3d, 0xdb, 0xc4, //0x000001cb vpand %ymm4, %ymm8, %ymm8 + 0xc4, 0xc1, 0x2d, 0x71, 0xf0, 0x08, //0x000001cf vpsllw $8, %ymm8, %ymm10 + 0xc4, 0xc1, 0x3d, 0x71, 0xf0, 0x04, //0x000001d5 vpsllw $4, %ymm8, %ymm8 + 0xc4, 0x43, 0x3d, 0x0e, 0xc2, 0xaa, //0x000001db vpblendw $170, %ymm10, %ymm8, %ymm8 + 0xc4, 0x41, 0x3d, 0xeb, 0xc1, //0x000001e1 vpor %ymm9, %ymm8, %ymm8 + 0xc4, 0x41, 0x55, 0x64, 0xc8, //0x000001e6 vpcmpgtb %ymm8, %ymm5, %ymm9 + 0xc5, 0x35, 0xdb, 0xcf, //0x000001eb vpand %ymm7, %ymm9, %ymm9 + 0xc5, 0x3d, 0xd8, 0xd6, //0x000001ef vpsubusb %ymm6, %ymm8, %ymm10 + 0xc4, 0x41, 0x35, 0xeb, 0xca, //0x000001f3 vpor %ymm10, %ymm9, %ymm9 + 0xc4, 0x42, 0x7d, 0x00, 0xc9, //0x000001f8 vpshufb %ymm9, %ymm0, %ymm9 + 0xc4, 0x41, 0x35, 0xfc, 0xc0, //0x000001fd vpaddb %ymm8, %ymm9, %ymm8 + 0xc4, 0x41, 0x7e, 0x7f, 0x06, //0x00000202 vmovdqu %ymm8, (%r14) + 0x49, 0x83, 0xc6, 0x20, //0x00000207 addq $32, %r14 + 0x49, 0x83, 0xc4, 0x18, //0x0000020b addq $24, %r12 + 0x49, 0x39, 0xf4, //0x0000020f cmpq %rsi, %r12 + 0x0f, 0x86, 0x98, 0xff, 0xff, 0xff, //0x00000212 jbe LBB0_6 + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00000218 jmp LBB0_7 + //0x0000021d LBB0_2 + 0x4d, 0x89, 0xc6, //0x0000021d movq %r8, %r14 + //0x00000220 LBB0_7 + 0x49, 0x8d, 0x71, 0xe8, //0x00000220 leaq $-24(%r9), %rsi + 0x49, 0x39, 0xf4, //0x00000224 cmpq %rsi, %r12 + 0x0f, 0x87, 0x93, 0x00, 0x00, 0x00, //0x00000227 ja LBB0_10 + //0x0000022d LBB0_8 + 0x89, 0xd6, //0x0000022d movl %edx, %esi + 0x83, 0xe6, 0x04, //0x0000022f andl $4, %esi + 0x0f, 0x84, 0x88, 0x00, 0x00, 0x00, //0x00000232 je LBB0_10 + 0xc4, 0xc1, 0x7a, 0x6f, 0x04, 0x24, //0x00000238 vmovdqu (%r12), %xmm0 + 0xc4, 0xc1, 0x7a, 0x6f, 0x4c, 0x24, 0x08, //0x0000023e vmovdqu $8(%r12), %xmm1 + 0xc5, 0xf1, 0x73, 0xd9, 0x04, //0x00000245 vpsrldq $4, %xmm1, %xmm1 + 0xc4, 0xe3, 0x7d, 0x38, 0xc1, 0x01, //0x0000024a vinserti128 $1, %xmm1, %ymm0, %ymm0 + 0xc4, 0xe2, 0x7d, 0x00, 0x05, 0xc7, 0xfd, 0xff, 0xff, //0x00000250 vpshufb $-569(%rip), %ymm0, %ymm0 /* LCPI0_0+0(%rip) */ + 0xc5, 0xfd, 0xdb, 0x0d, 0xdf, 0xfd, 0xff, 0xff, //0x00000259 vpand $-545(%rip), %ymm0, %ymm1 /* LCPI0_1+0(%rip) */ + 0xc5, 0xf5, 0xe4, 0x0d, 0xf7, 0xfd, 0xff, 0xff, //0x00000261 vpmulhuw $-521(%rip), %ymm1, %ymm1 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfd, 0xdb, 0x05, 0x0f, 0xfe, 0xff, 0xff, //0x00000269 vpand $-497(%rip), %ymm0, %ymm0 /* LCPI0_3+0(%rip) */ + 0xc5, 0xed, 0x71, 0xf0, 0x08, //0x00000271 vpsllw $8, %ymm0, %ymm2 + 0xc5, 0xfd, 0x71, 0xf0, 0x04, //0x00000276 vpsllw $4, %ymm0, %ymm0 + 0xc4, 0xe3, 0x7d, 0x0e, 0xc2, 0xaa, //0x0000027b vpblendw $170, %ymm2, %ymm0, %ymm0 + 0xc5, 0xfd, 0xeb, 0xc1, //0x00000281 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0x6f, 0x0d, 0x13, 0xfe, 0xff, 0xff, //0x00000285 vmovdqa $-493(%rip), %ymm1 /* LCPI0_4+0(%rip) */ + 0xc5, 0xf5, 0x64, 0xc8, //0x0000028d vpcmpgtb %ymm0, %ymm1, %ymm1 + 0xc4, 0xc1, 0x7e, 0x6f, 0x12, //0x00000291 vmovdqu (%r10), %ymm2 + 0xc5, 0xfd, 0xd8, 0x1d, 0x22, 0xfe, 0xff, 0xff, //0x00000296 vpsubusb $-478(%rip), %ymm0, %ymm3 /* LCPI0_5+0(%rip) */ + 0xc5, 0xf5, 0xdb, 0x0d, 0x3a, 0xfe, 0xff, 0xff, //0x0000029e vpand $-454(%rip), %ymm1, %ymm1 /* LCPI0_6+0(%rip) */ + 0xc5, 0xf5, 0xeb, 0xcb, //0x000002a6 vpor %ymm3, %ymm1, %ymm1 + 0xc4, 0xe2, 0x6d, 0x00, 0xc9, //0x000002aa vpshufb %ymm1, %ymm2, %ymm1 + 0xc5, 0xf5, 0xfc, 0xc0, //0x000002af vpaddb %ymm0, %ymm1, %ymm0 + 0xc4, 0xc1, 0x7e, 0x7f, 0x06, //0x000002b3 vmovdqu %ymm0, (%r14) + 0x49, 0x83, 0xc6, 0x20, //0x000002b8 addq $32, %r14 + 0x49, 0x83, 0xc4, 0x18, //0x000002bc addq $24, %r12 + //0x000002c0 LBB0_10 + 0x4d, 0x39, 0xcc, //0x000002c0 cmpq %r9, %r12 + 0x0f, 0x84, 0x84, 0x01, 0x00, 0x00, //0x000002c3 je LBB0_25 + 0x4d, 0x8d, 0x51, 0xfc, //0x000002c9 leaq $-4(%r9), %r10 + 0x4d, 0x39, 0xd4, //0x000002cd cmpq %r10, %r12 + 0x0f, 0x87, 0x61, 0x00, 0x00, 0x00, //0x000002d0 ja LBB0_14 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000002d6 .p2align 4, 0x90 + //0x000002e0 LBB0_12 + 0x41, 0x8b, 0x34, 0x24, //0x000002e0 movl (%r12), %esi + 0x0f, 0xce, //0x000002e4 bswapl %esi + 0x49, 0x89, 0xf7, //0x000002e6 movq %rsi, %r15 + 0x49, 0xc1, 0xef, 0x1a, //0x000002e9 shrq $26, %r15 + 0x89, 0xf1, //0x000002ed movl %esi, %ecx + 0xc1, 0xe9, 0x14, //0x000002ef shrl $20, %ecx + 0x83, 0xe1, 0x3f, //0x000002f2 andl $63, %ecx + 0x89, 0xf3, //0x000002f5 movl %esi, %ebx + 0xc1, 0xeb, 0x0e, //0x000002f7 shrl $14, %ebx + 0x83, 0xe3, 0x3f, //0x000002fa andl $63, %ebx + 0xc1, 0xee, 0x08, //0x000002fd shrl $8, %esi + 0x83, 0xe6, 0x3f, //0x00000300 andl $63, %esi + 0x49, 0x83, 0xc4, 0x03, //0x00000303 addq $3, %r12 + 0x43, 0x0f, 0xb6, 0x04, 0x3b, //0x00000307 movzbl (%r11,%r15), %eax + 0x41, 0x88, 0x06, //0x0000030c movb %al, (%r14) + 0x41, 0x0f, 0xb6, 0x04, 0x0b, //0x0000030f movzbl (%r11,%rcx), %eax + 0x41, 0x88, 0x46, 0x01, //0x00000314 movb %al, $1(%r14) + 0x41, 0x0f, 0xb6, 0x04, 0x1b, //0x00000318 movzbl (%r11,%rbx), %eax + 0x41, 0x88, 0x46, 0x02, //0x0000031d movb %al, $2(%r14) + 0x41, 0x0f, 0xb6, 0x04, 0x33, //0x00000321 movzbl (%r11,%rsi), %eax + 0x41, 0x88, 0x46, 0x03, //0x00000326 movb %al, $3(%r14) + 0x49, 0x83, 0xc6, 0x04, //0x0000032a addq $4, %r14 + 0x4d, 0x39, 0xd4, //0x0000032e cmpq %r10, %r12 + 0x0f, 0x86, 0xa9, 0xff, 0xff, 0xff, //0x00000331 jbe LBB0_12 + //0x00000337 LBB0_14 + 0x4d, 0x29, 0xe1, //0x00000337 subq %r12, %r9 + 0x45, 0x0f, 0xb6, 0x14, 0x24, //0x0000033a movzbl (%r12), %r10d + 0x49, 0x83, 0xf9, 0x01, //0x0000033f cmpq $1, %r9 + 0x0f, 0x84, 0xc0, 0x00, 0x00, 0x00, //0x00000343 je LBB0_21 + 0x4c, 0x89, 0xd6, //0x00000349 movq %r10, %rsi + 0x48, 0xc1, 0xe6, 0x10, //0x0000034c shlq $16, %rsi + 0x49, 0x83, 0xf9, 0x02, //0x00000350 cmpq $2, %r9 + 0x0f, 0x84, 0x6b, 0x00, 0x00, 0x00, //0x00000354 je LBB0_18 + 0x49, 0x83, 0xf9, 0x03, //0x0000035a cmpq $3, %r9 + 0x0f, 0x85, 0xe9, 0x00, 0x00, 0x00, //0x0000035e jne LBB0_25 + 0x41, 0x0f, 0xb6, 0x54, 0x24, 0x02, //0x00000364 movzbl $2(%r12), %edx + 0x09, 0xd6, //0x0000036a orl %edx, %esi + 0x41, 0x0f, 0xb6, 0x44, 0x24, 0x01, //0x0000036c movzbl $1(%r12), %eax + 0xc1, 0xe0, 0x08, //0x00000372 shll $8, %eax + 0x09, 0xf0, //0x00000375 orl %esi, %eax + 0x49, 0xc1, 0xea, 0x02, //0x00000377 shrq $2, %r10 + 0x43, 0x8a, 0x0c, 0x13, //0x0000037b movb (%r11,%r10), %cl + 0x41, 0x88, 0x0e, //0x0000037f movb %cl, (%r14) + 0x89, 0xc1, //0x00000382 movl %eax, %ecx + 0xc1, 0xe9, 0x0c, //0x00000384 shrl $12, %ecx + 0x83, 0xe1, 0x3f, //0x00000387 andl $63, %ecx + 0x41, 0x8a, 0x0c, 0x0b, //0x0000038a movb (%r11,%rcx), %cl + 0x41, 0x88, 0x4e, 0x01, //0x0000038e movb %cl, $1(%r14) + 0xc1, 0xe8, 0x06, //0x00000392 shrl $6, %eax + 0x83, 0xe0, 0x3f, //0x00000395 andl $63, %eax + 0x41, 0x8a, 0x04, 0x03, //0x00000398 movb (%r11,%rax), %al + 0x41, 0x88, 0x46, 0x02, //0x0000039c movb %al, $2(%r14) + 0x83, 0xe2, 0x3f, //0x000003a0 andl $63, %edx + 0x41, 0x8a, 0x04, 0x13, //0x000003a3 movb (%r11,%rdx), %al + 0x41, 0x88, 0x46, 0x03, //0x000003a7 movb %al, $3(%r14) + 0xe9, 0x87, 0x00, 0x00, 0x00, //0x000003ab jmp LBB0_24 + //0x000003b0 LBB0_4 + 0x4d, 0x89, 0xc6, //0x000003b0 movq %r8, %r14 + 0x49, 0x8d, 0x71, 0xe8, //0x000003b3 leaq $-24(%r9), %rsi + 0x49, 0x39, 0xf4, //0x000003b7 cmpq %rsi, %r12 + 0x0f, 0x86, 0x6d, 0xfe, 0xff, 0xff, //0x000003ba jbe LBB0_8 + 0xe9, 0xfb, 0xfe, 0xff, 0xff, //0x000003c0 jmp LBB0_10 + //0x000003c5 LBB0_18 + 0x41, 0x0f, 0xb6, 0x44, 0x24, 0x01, //0x000003c5 movzbl $1(%r12), %eax + 0x89, 0xc1, //0x000003cb movl %eax, %ecx + 0xc1, 0xe1, 0x08, //0x000003cd shll $8, %ecx + 0x09, 0xf1, //0x000003d0 orl %esi, %ecx + 0x49, 0xc1, 0xea, 0x02, //0x000003d2 shrq $2, %r10 + 0x43, 0x8a, 0x1c, 0x13, //0x000003d6 movb (%r11,%r10), %bl + 0x41, 0x88, 0x1e, //0x000003da movb %bl, (%r14) + 0xc1, 0xe9, 0x0c, //0x000003dd shrl $12, %ecx + 0x83, 0xe1, 0x3f, //0x000003e0 andl $63, %ecx + 0x41, 0x8a, 0x0c, 0x0b, //0x000003e3 movb (%r11,%rcx), %cl + 0x41, 0x88, 0x4e, 0x01, //0x000003e7 movb %cl, $1(%r14) + 0x83, 0xe0, 0x0f, //0x000003eb andl $15, %eax + 0x41, 0x8a, 0x04, 0x83, //0x000003ee movb (%r11,%rax,4), %al + 0x41, 0x88, 0x46, 0x02, //0x000003f2 movb %al, $2(%r14) + 0xf6, 0xc2, 0x02, //0x000003f6 testb $2, %dl + 0x0f, 0x85, 0x41, 0x00, 0x00, 0x00, //0x000003f9 jne LBB0_19 + 0x41, 0xc6, 0x46, 0x03, 0x3d, //0x000003ff movb $61, $3(%r14) + 0xe9, 0x2e, 0x00, 0x00, 0x00, //0x00000404 jmp LBB0_24 + //0x00000409 LBB0_21 + 0x4c, 0x89, 0xd0, //0x00000409 movq %r10, %rax + 0x48, 0xc1, 0xe8, 0x02, //0x0000040c shrq $2, %rax + 0x41, 0x8a, 0x04, 0x03, //0x00000410 movb (%r11,%rax), %al + 0x41, 0x88, 0x06, //0x00000414 movb %al, (%r14) + 0x41, 0xc1, 0xe2, 0x04, //0x00000417 shll $4, %r10d + 0x41, 0x83, 0xe2, 0x30, //0x0000041b andl $48, %r10d + 0x43, 0x8a, 0x04, 0x13, //0x0000041f movb (%r11,%r10), %al + 0x41, 0x88, 0x46, 0x01, //0x00000423 movb %al, $1(%r14) + 0xf6, 0xc2, 0x02, //0x00000427 testb $2, %dl + 0x0f, 0x85, 0x19, 0x00, 0x00, 0x00, //0x0000042a jne LBB0_22 + 0x66, 0x41, 0xc7, 0x46, 0x02, 0x3d, 0x3d, //0x00000430 movw $15677, $2(%r14) + //0x00000437 LBB0_24 + 0x49, 0x83, 0xc6, 0x04, //0x00000437 addq $4, %r14 + 0xe9, 0x0d, 0x00, 0x00, 0x00, //0x0000043b jmp LBB0_25 + //0x00000440 LBB0_19 + 0x49, 0x83, 0xc6, 0x03, //0x00000440 addq $3, %r14 + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00000444 jmp LBB0_25 + //0x00000449 LBB0_22 + 0x49, 0x83, 0xc6, 0x02, //0x00000449 addq $2, %r14 + //0x0000044d LBB0_25 + 0x4d, 0x29, 0xc6, //0x0000044d subq %r8, %r14 + 0x4c, 0x01, 0x77, 0x08, //0x00000450 addq %r14, $8(%rdi) + //0x00000454 LBB0_26 + 0x5b, //0x00000454 popq %rbx + 0x41, 0x5c, //0x00000455 popq %r12 + 0x41, 0x5e, //0x00000457 popq %r14 + 0x41, 0x5f, //0x00000459 popq %r15 + 0x5d, //0x0000045b popq %rbp + 0xc5, 0xf8, 0x77, //0x0000045c vzeroupper + 0xc3, //0x0000045f retq + //0x00000460 .p2align 5, 0x00 + //0x00000460 LCPI1_0 + 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000460 QUAD $0x0f0f0f0f0f0f0f0f; QUAD $0x0f0f0f0f0f0f0f0f // .space 16, '\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f' + 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000470 QUAD $0x0f0f0f0f0f0f0f0f; QUAD $0x0f0f0f0f0f0f0f0f // .space 16, '\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f' + //0x00000480 LCPI1_1 + 0x01, //0x00000480 .byte 1 + 0x02, //0x00000481 .byte 2 + 0x04, //0x00000482 .byte 4 + 0x08, //0x00000483 .byte 8 + 0x10, //0x00000484 .byte 16 + 0x20, //0x00000485 .byte 32 + 0x40, //0x00000486 .byte 64 + 0x80, //0x00000487 .byte 128 + 0x00, //0x00000488 .byte 0 + 0x00, //0x00000489 .byte 0 + 0x00, //0x0000048a .byte 0 + 0x00, //0x0000048b .byte 0 + 0x00, //0x0000048c .byte 0 + 0x00, //0x0000048d .byte 0 + 0x00, //0x0000048e .byte 0 + 0x00, //0x0000048f .byte 0 + 0x01, //0x00000490 .byte 1 + 0x02, //0x00000491 .byte 2 + 0x04, //0x00000492 .byte 4 + 0x08, //0x00000493 .byte 8 + 0x10, //0x00000494 .byte 16 + 0x20, //0x00000495 .byte 32 + 0x40, //0x00000496 .byte 64 + 0x80, //0x00000497 .byte 128 + 0x00, //0x00000498 .byte 0 + 0x00, //0x00000499 .byte 0 + 0x00, //0x0000049a .byte 0 + 0x00, //0x0000049b .byte 0 + 0x00, //0x0000049c .byte 0 + 0x00, //0x0000049d .byte 0 + 0x00, //0x0000049e .byte 0 + 0x00, //0x0000049f .byte 0 + //0x000004a0 LCPI1_2 + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, //0x000004a0 QUAD $0x3f3f3f3f3f3f3f3f; QUAD $0x3f3f3f3f3f3f3f3f // .space 16, '????????????????' + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, //0x000004b0 QUAD $0x3f3f3f3f3f3f3f3f; QUAD $0x3f3f3f3f3f3f3f3f // .space 16, '????????????????' + //0x000004c0 LCPI1_3 + 0x40, //0x000004c0 .byte 64 + 0x01, //0x000004c1 .byte 1 + 0x40, //0x000004c2 .byte 64 + 0x01, //0x000004c3 .byte 1 + 0x40, //0x000004c4 .byte 64 + 0x01, //0x000004c5 .byte 1 + 0x40, //0x000004c6 .byte 64 + 0x01, //0x000004c7 .byte 1 + 0x40, //0x000004c8 .byte 64 + 0x01, //0x000004c9 .byte 1 + 0x40, //0x000004ca .byte 64 + 0x01, //0x000004cb .byte 1 + 0x40, //0x000004cc .byte 64 + 0x01, //0x000004cd .byte 1 + 0x40, //0x000004ce .byte 64 + 0x01, //0x000004cf .byte 1 + 0x40, //0x000004d0 .byte 64 + 0x01, //0x000004d1 .byte 1 + 0x40, //0x000004d2 .byte 64 + 0x01, //0x000004d3 .byte 1 + 0x40, //0x000004d4 .byte 64 + 0x01, //0x000004d5 .byte 1 + 0x40, //0x000004d6 .byte 64 + 0x01, //0x000004d7 .byte 1 + 0x40, //0x000004d8 .byte 64 + 0x01, //0x000004d9 .byte 1 + 0x40, //0x000004da .byte 64 + 0x01, //0x000004db .byte 1 + 0x40, //0x000004dc .byte 64 + 0x01, //0x000004dd .byte 1 + 0x40, //0x000004de .byte 64 + 0x01, //0x000004df .byte 1 + //0x000004e0 LCPI1_4 + 0x00, 0x10, //0x000004e0 .word 4096 + 0x01, 0x00, //0x000004e2 .word 1 + 0x00, 0x10, //0x000004e4 .word 4096 + 0x01, 0x00, //0x000004e6 .word 1 + 0x00, 0x10, //0x000004e8 .word 4096 + 0x01, 0x00, //0x000004ea .word 1 + 0x00, 0x10, //0x000004ec .word 4096 + 0x01, 0x00, //0x000004ee .word 1 + 0x00, 0x10, //0x000004f0 .word 4096 + 0x01, 0x00, //0x000004f2 .word 1 + 0x00, 0x10, //0x000004f4 .word 4096 + 0x01, 0x00, //0x000004f6 .word 1 + 0x00, 0x10, //0x000004f8 .word 4096 + 0x01, 0x00, //0x000004fa .word 1 + 0x00, 0x10, //0x000004fc .word 4096 + 0x01, 0x00, //0x000004fe .word 1 + //0x00000500 LCPI1_6 + 0x02, //0x00000500 .byte 2 + 0x01, //0x00000501 .byte 1 + 0x00, //0x00000502 .byte 0 + 0x06, //0x00000503 .byte 6 + 0x05, //0x00000504 .byte 5 + 0x04, //0x00000505 .byte 4 + 0x0a, //0x00000506 .byte 10 + 0x09, //0x00000507 .byte 9 + 0x08, //0x00000508 .byte 8 + 0x0e, //0x00000509 .byte 14 + 0x0d, //0x0000050a .byte 13 + 0x0c, //0x0000050b .byte 12 + 0x00, //0x0000050c BYTE $0x00 // .space 1, '\x00' + 0x00, //0x0000050d BYTE $0x00 // .space 1, '\x00' + 0x00, //0x0000050e BYTE $0x00 // .space 1, '\x00' + 0x00, //0x0000050f BYTE $0x00 // .space 1, '\x00' + 0x05, //0x00000510 .byte 5 + 0x04, //0x00000511 .byte 4 + 0x0a, //0x00000512 .byte 10 + 0x09, //0x00000513 .byte 9 + 0x08, //0x00000514 .byte 8 + 0x0e, //0x00000515 .byte 14 + 0x0d, //0x00000516 .byte 13 + 0x0c, //0x00000517 .byte 12 + 0x00, //0x00000518 BYTE $0x00 // .space 1, '\x00' + 0x00, //0x00000519 BYTE $0x00 // .space 1, '\x00' + 0x00, //0x0000051a BYTE $0x00 // .space 1, '\x00' + 0x00, //0x0000051b BYTE $0x00 // .space 1, '\x00' + 0x00, //0x0000051c BYTE $0x00 // .space 1, '\x00' + 0x00, //0x0000051d BYTE $0x00 // .space 1, '\x00' + 0x00, //0x0000051e BYTE $0x00 // .space 1, '\x00' + 0x00, //0x0000051f BYTE $0x00 // .space 1, '\x00' + //0x00000520 .p2align 4, 0x00 + //0x00000520 LCPI1_5 + 0x00, //0x00000520 BYTE $0x00 // .space 1, '\x00' + 0x00, //0x00000521 BYTE $0x00 // .space 1, '\x00' + 0x00, //0x00000522 BYTE $0x00 // .space 1, '\x00' + 0x00, //0x00000523 BYTE $0x00 // .space 1, '\x00' + 0x00, //0x00000524 BYTE $0x00 // .space 1, '\x00' + 0x00, //0x00000525 BYTE $0x00 // .space 1, '\x00' + 0x00, //0x00000526 BYTE $0x00 // .space 1, '\x00' + 0x00, //0x00000527 BYTE $0x00 // .space 1, '\x00' + 0x00, //0x00000528 BYTE $0x00 // .space 1, '\x00' + 0x00, //0x00000529 BYTE $0x00 // .space 1, '\x00' + 0x00, //0x0000052a BYTE $0x00 // .space 1, '\x00' + 0x00, //0x0000052b BYTE $0x00 // .space 1, '\x00' + 0x02, //0x0000052c .byte 2 + 0x01, //0x0000052d .byte 1 + 0x00, //0x0000052e .byte 0 + 0x06, //0x0000052f .byte 6 + //0x00000530 .p2align 4, 0x90 + //0x00000530 _b64decode + 0x55, //0x00000530 pushq %rbp + 0x48, 0x89, 0xe5, //0x00000531 movq %rsp, %rbp + 0x41, 0x57, //0x00000534 pushq %r15 + 0x41, 0x56, //0x00000536 pushq %r14 + 0x41, 0x55, //0x00000538 pushq %r13 + 0x41, 0x54, //0x0000053a pushq %r12 + 0x53, //0x0000053c pushq %rbx + 0x48, 0x83, 0xec, 0x68, //0x0000053d subq $104, %rsp + 0x48, 0x85, 0xd2, //0x00000541 testq %rdx, %rdx + 0x0f, 0x84, 0x3e, 0x11, 0x00, 0x00, //0x00000544 je LBB1_282 + 0x48, 0x8b, 0x1f, //0x0000054a movq (%rdi), %rbx + 0x48, 0x8b, 0x47, 0x08, //0x0000054d movq $8(%rdi), %rax + 0x48, 0x01, 0xd8, //0x00000551 addq %rbx, %rax + 0x48, 0x89, 0xbd, 0x70, 0xff, 0xff, 0xff, //0x00000554 movq %rdi, $-144(%rbp) + 0x48, 0x03, 0x5f, 0x10, //0x0000055b addq $16(%rdi), %rbx + 0x48, 0x89, 0x5d, 0x90, //0x0000055f movq %rbx, $-112(%rbp) + 0x48, 0x89, 0x55, 0x88, //0x00000563 movq %rdx, $-120(%rbp) + 0x48, 0x8d, 0x1c, 0x16, //0x00000567 leaq (%rsi,%rdx), %rbx + 0xf6, 0xc1, 0x01, //0x0000056b testb $1, %cl + 0x48, 0x8d, 0x15, 0xcb, 0x45, 0x00, 0x00, //0x0000056e leaq $17867(%rip), %rdx /* _VecDecodeCharsetStd+0(%rip) */ + 0x48, 0x8d, 0x3d, 0x44, 0x47, 0x00, 0x00, //0x00000575 leaq $18244(%rip), %rdi /* _VecDecodeCharsetURL+0(%rip) */ + 0x48, 0x0f, 0x44, 0xfa, //0x0000057c cmoveq %rdx, %rdi + 0x48, 0x89, 0x7d, 0xc0, //0x00000580 movq %rdi, $-64(%rbp) + 0x48, 0x8d, 0x15, 0x35, 0x45, 0x00, 0x00, //0x00000584 leaq $17717(%rip), %rdx /* _VecDecodeTableStd+0(%rip) */ + 0x4c, 0x8d, 0x0d, 0xae, 0x46, 0x00, 0x00, //0x0000058b leaq $18094(%rip), %r9 /* _VecDecodeTableURL+0(%rip) */ + 0x4c, 0x0f, 0x44, 0xca, //0x00000592 cmoveq %rdx, %r9 + 0x48, 0x89, 0x85, 0x78, 0xff, 0xff, 0xff, //0x00000596 movq %rax, $-136(%rbp) + 0x48, 0x89, 0x45, 0xb0, //0x0000059d movq %rax, $-80(%rbp) + 0x48, 0x89, 0x75, 0xa8, //0x000005a1 movq %rsi, $-88(%rbp) + 0x49, 0x89, 0xf7, //0x000005a5 movq %rsi, %r15 + 0x89, 0x4d, 0xbc, //0x000005a8 movl %ecx, $-68(%rbp) + 0xf6, 0xc1, 0x04, //0x000005ab testb $4, %cl + 0x48, 0x89, 0x5d, 0xd0, //0x000005ae movq %rbx, $-48(%rbp) + 0x0f, 0x85, 0xd7, 0x10, 0x00, 0x00, //0x000005b2 jne LBB1_283 + //0x000005b8 LBB1_2 + 0x48, 0x8b, 0x45, 0x90, //0x000005b8 movq $-112(%rbp), %rax + 0x48, 0x83, 0xc0, 0xf8, //0x000005bc addq $-8, %rax + 0x48, 0x89, 0x45, 0xc8, //0x000005c0 movq %rax, $-56(%rbp) + 0x48, 0x3b, 0x45, 0xb0, //0x000005c4 cmpq $-80(%rbp), %rax + 0x0f, 0x82, 0xfe, 0x22, 0x00, 0x00, //0x000005c8 jb LBB1_574 + 0x48, 0x8d, 0x43, 0xf8, //0x000005ce leaq $-8(%rbx), %rax + 0x48, 0x89, 0x45, 0xa0, //0x000005d2 movq %rax, $-96(%rbp) + 0x4c, 0x39, 0xf8, //0x000005d6 cmpq %r15, %rax + 0x0f, 0x82, 0xed, 0x22, 0x00, 0x00, //0x000005d9 jb LBB1_574 + 0x48, 0x8b, 0x45, 0xa8, //0x000005df movq $-88(%rbp), %rax + 0x48, 0x8b, 0x4d, 0x88, //0x000005e3 movq $-120(%rbp), %rcx + 0x48, 0x8d, 0x54, 0x01, 0xfe, //0x000005e7 leaq $-2(%rcx,%rax), %rdx + 0x48, 0x89, 0x55, 0x80, //0x000005ec movq %rdx, $-128(%rbp) + 0x48, 0x8d, 0x44, 0x01, 0xfd, //0x000005f0 leaq $-3(%rcx,%rax), %rax + 0x48, 0x89, 0x45, 0x98, //0x000005f5 movq %rax, $-104(%rbp) + 0x4d, 0x89, 0xf9, //0x000005f9 movq %r15, %r9 + 0xe9, 0x71, 0x00, 0x00, 0x00, //0x000005fc jmp LBB1_5 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000601 .p2align 4, 0x90 + //0x00000610 LBB1_6 + 0x49, 0xc1, 0xe3, 0x3a, //0x00000610 shlq $58, %r11 + 0x49, 0xc1, 0xe0, 0x34, //0x00000614 shlq $52, %r8 + 0x4d, 0x09, 0xd8, //0x00000618 orq %r11, %r8 + 0x49, 0xc1, 0xe6, 0x2e, //0x0000061b shlq $46, %r14 + 0x48, 0xc1, 0xe1, 0x28, //0x0000061f shlq $40, %rcx + 0x4c, 0x09, 0xf1, //0x00000623 orq %r14, %rcx + 0x4c, 0x09, 0xc1, //0x00000626 orq %r8, %rcx + 0x49, 0xc1, 0xe2, 0x22, //0x00000629 shlq $34, %r10 + 0x48, 0xc1, 0xe6, 0x1c, //0x0000062d shlq $28, %rsi + 0x4c, 0x09, 0xd6, //0x00000631 orq %r10, %rsi + 0x48, 0xc1, 0xe3, 0x16, //0x00000634 shlq $22, %rbx + 0x48, 0x09, 0xf3, //0x00000638 orq %rsi, %rbx + 0x48, 0x09, 0xcb, //0x0000063b orq %rcx, %rbx + 0x48, 0xc1, 0xe0, 0x10, //0x0000063e shlq $16, %rax + 0x48, 0x09, 0xd8, //0x00000642 orq %rbx, %rax + 0x48, 0x0f, 0xc8, //0x00000645 bswapq %rax + 0x48, 0x8b, 0x4d, 0xb0, //0x00000648 movq $-80(%rbp), %rcx + 0x48, 0x89, 0x01, //0x0000064c movq %rax, (%rcx) + 0x49, 0x83, 0xc1, 0x08, //0x0000064f addq $8, %r9 + 0x48, 0x83, 0xc1, 0x06, //0x00000653 addq $6, %rcx + 0x48, 0x89, 0x4d, 0xb0, //0x00000657 movq %rcx, $-80(%rbp) + 0x48, 0x39, 0x4d, 0xc8, //0x0000065b cmpq %rcx, $-56(%rbp) + 0x0f, 0x82, 0x81, 0x22, 0x00, 0x00, //0x0000065f jb LBB1_572 + //0x00000665 LBB1_223 + 0x4d, 0x89, 0xcf, //0x00000665 movq %r9, %r15 + 0x4c, 0x39, 0x4d, 0xa0, //0x00000668 cmpq %r9, $-96(%rbp) + 0x0f, 0x82, 0x74, 0x22, 0x00, 0x00, //0x0000066c jb LBB1_572 + //0x00000672 LBB1_5 + 0x41, 0x0f, 0xb6, 0x01, //0x00000672 movzbl (%r9), %eax + 0x48, 0x8b, 0x55, 0xc0, //0x00000676 movq $-64(%rbp), %rdx + 0x44, 0x0f, 0xb6, 0x1c, 0x02, //0x0000067a movzbl (%rdx,%rax), %r11d + 0x41, 0x0f, 0xb6, 0x41, 0x01, //0x0000067f movzbl $1(%r9), %eax + 0x44, 0x0f, 0xb6, 0x04, 0x02, //0x00000684 movzbl (%rdx,%rax), %r8d + 0x41, 0x0f, 0xb6, 0x41, 0x02, //0x00000689 movzbl $2(%r9), %eax + 0x44, 0x0f, 0xb6, 0x34, 0x02, //0x0000068e movzbl (%rdx,%rax), %r14d + 0x41, 0x0f, 0xb6, 0x41, 0x03, //0x00000693 movzbl $3(%r9), %eax + 0x0f, 0xb6, 0x0c, 0x02, //0x00000698 movzbl (%rdx,%rax), %ecx + 0x41, 0x0f, 0xb6, 0x41, 0x04, //0x0000069c movzbl $4(%r9), %eax + 0x44, 0x0f, 0xb6, 0x14, 0x02, //0x000006a1 movzbl (%rdx,%rax), %r10d + 0x41, 0x0f, 0xb6, 0x41, 0x05, //0x000006a6 movzbl $5(%r9), %eax + 0x0f, 0xb6, 0x34, 0x02, //0x000006ab movzbl (%rdx,%rax), %esi + 0x41, 0x0f, 0xb6, 0x41, 0x06, //0x000006af movzbl $6(%r9), %eax + 0x0f, 0xb6, 0x1c, 0x02, //0x000006b4 movzbl (%rdx,%rax), %ebx + 0x41, 0x0f, 0xb6, 0x41, 0x07, //0x000006b8 movzbl $7(%r9), %eax + 0x0f, 0xb6, 0x04, 0x02, //0x000006bd movzbl (%rdx,%rax), %eax + 0x45, 0x89, 0xc5, //0x000006c1 movl %r8d, %r13d + 0x45, 0x09, 0xdd, //0x000006c4 orl %r11d, %r13d + 0x41, 0x89, 0xcc, //0x000006c7 movl %ecx, %r12d + 0x45, 0x09, 0xf4, //0x000006ca orl %r14d, %r12d + 0x45, 0x09, 0xec, //0x000006cd orl %r13d, %r12d + 0x89, 0xf7, //0x000006d0 movl %esi, %edi + 0x44, 0x09, 0xd7, //0x000006d2 orl %r10d, %edi + 0x89, 0xda, //0x000006d5 movl %ebx, %edx + 0x09, 0xfa, //0x000006d7 orl %edi, %edx + 0x44, 0x09, 0xe2, //0x000006d9 orl %r12d, %edx + 0x89, 0xc7, //0x000006dc movl %eax, %edi + 0x09, 0xd7, //0x000006de orl %edx, %edi + 0x40, 0x80, 0xff, 0xff, //0x000006e0 cmpb $-1, %dil + 0x0f, 0x85, 0x26, 0xff, 0xff, 0xff, //0x000006e4 jne LBB1_6 + 0x48, 0x8b, 0x5d, 0xd0, //0x000006ea movq $-48(%rbp), %rbx + 0x4c, 0x39, 0xcb, //0x000006ee cmpq %r9, %rbx + 0x44, 0x8b, 0x55, 0xbc, //0x000006f1 movl $-68(%rbp), %r10d + 0x0f, 0x86, 0x15, 0x02, 0x00, 0x00, //0x000006f5 jbe LBB1_39 + 0x41, 0xf6, 0xc2, 0x08, //0x000006fb testb $8, %r10b + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x000006ff je LBB1_11 + 0x4c, 0x89, 0xca, //0x00000705 movq %r9, %rdx + 0xe9, 0xbf, 0x00, 0x00, 0x00, //0x00000708 jmp LBB1_22 + 0x90, 0x90, 0x90, //0x0000070d .p2align 4, 0x90 + //0x00000710 LBB1_10 + 0x49, 0xff, 0xc1, //0x00000710 incq %r9 + 0x49, 0x39, 0xd9, //0x00000713 cmpq %rbx, %r9 + 0x0f, 0x83, 0xde, 0x01, 0x00, 0x00, //0x00000716 jae LBB1_37 + //0x0000071c LBB1_11 + 0x41, 0x0f, 0xb6, 0x09, //0x0000071c movzbl (%r9), %ecx + 0x48, 0x83, 0xf9, 0x0d, //0x00000720 cmpq $13, %rcx + 0x0f, 0x84, 0xe6, 0xff, 0xff, 0xff, //0x00000724 je LBB1_10 + 0x80, 0xf9, 0x0a, //0x0000072a cmpb $10, %cl + 0x0f, 0x84, 0xdd, 0xff, 0xff, 0xff, //0x0000072d je LBB1_10 + 0x48, 0x8b, 0x45, 0xc0, //0x00000733 movq $-64(%rbp), %rax + 0x0f, 0xb6, 0x14, 0x08, //0x00000737 movzbl (%rax,%rcx), %edx + 0x49, 0xff, 0xc1, //0x0000073b incq %r9 + 0x81, 0xfa, 0xff, 0x00, 0x00, 0x00, //0x0000073e cmpl $255, %edx + 0x0f, 0x84, 0x81, 0x02, 0x00, 0x00, //0x00000744 je LBB1_51 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x0000074a movl $1, %r11d + 0x49, 0x39, 0xd9, //0x00000750 cmpq %rbx, %r9 + 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00000753 jb LBB1_16 + 0xe9, 0x8b, 0x0b, 0x00, 0x00, //0x00000759 jmp LBB1_209 + 0x90, 0x90, //0x0000075e .p2align 4, 0x90 + //0x00000760 LBB1_15 + 0x49, 0xff, 0xc1, //0x00000760 incq %r9 + 0x49, 0x39, 0xd9, //0x00000763 cmpq %rbx, %r9 + 0x0f, 0x83, 0x3d, 0x04, 0x00, 0x00, //0x00000766 jae LBB1_82 + //0x0000076c LBB1_16 + 0x41, 0x0f, 0xb6, 0x09, //0x0000076c movzbl (%r9), %ecx + 0x48, 0x83, 0xf9, 0x0d, //0x00000770 cmpq $13, %rcx + 0x0f, 0x84, 0xe6, 0xff, 0xff, 0xff, //0x00000774 je LBB1_15 + 0x80, 0xf9, 0x0a, //0x0000077a cmpb $10, %cl + 0x0f, 0x84, 0xdd, 0xff, 0xff, 0xff, //0x0000077d je LBB1_15 + 0x48, 0x8b, 0x45, 0xc0, //0x00000783 movq $-64(%rbp), %rax + 0x0f, 0xb6, 0x04, 0x08, //0x00000787 movzbl (%rax,%rcx), %eax + 0x49, 0xff, 0xc1, //0x0000078b incq %r9 + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x0000078e cmpl $255, %eax + 0x0f, 0x84, 0x30, 0x06, 0x00, 0x00, //0x00000793 je LBB1_115 + 0xc1, 0xe2, 0x06, //0x00000799 shll $6, %edx + 0x09, 0xc2, //0x0000079c orl %eax, %edx + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x0000079e movl $2, %r11d + 0x49, 0x39, 0xd9, //0x000007a4 cmpq %rbx, %r9 + 0x0f, 0x82, 0x95, 0x01, 0x00, 0x00, //0x000007a7 jb LBB1_41 + 0xe9, 0x37, 0x0b, 0x00, 0x00, //0x000007ad jmp LBB1_209 + //0x000007b2 LBB1_20 + 0x3c, 0x6e, //0x000007b2 cmpb $110, %al + 0x0f, 0x85, 0xd6, 0x01, 0x00, 0x00, //0x000007b4 jne LBB1_46 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000007ba .p2align 4, 0x90 + //0x000007c0 LBB1_21 + 0x4c, 0x89, 0xca, //0x000007c0 movq %r9, %rdx + 0x49, 0x39, 0xd9, //0x000007c3 cmpq %rbx, %r9 + 0x0f, 0x83, 0x2e, 0x01, 0x00, 0x00, //0x000007c6 jae LBB1_37 + //0x000007cc LBB1_22 + 0x48, 0x8d, 0x42, 0x01, //0x000007cc leaq $1(%rdx), %rax + 0x0f, 0xb6, 0x0a, //0x000007d0 movzbl (%rdx), %ecx + 0x80, 0xf9, 0x5c, //0x000007d3 cmpb $92, %cl + 0x0f, 0x85, 0x04, 0x01, 0x00, 0x00, //0x000007d6 jne LBB1_35 + 0x4c, 0x8d, 0x4a, 0x02, //0x000007dc leaq $2(%rdx), %r9 + 0xb1, 0xff, //0x000007e0 movb $-1, %cl + 0x49, 0x39, 0xd9, //0x000007e2 cmpq %rbx, %r9 + 0x0f, 0x87, 0x9d, 0x01, 0x00, 0x00, //0x000007e5 ja LBB1_45 + 0x0f, 0xb6, 0x00, //0x000007eb movzbl (%rax), %eax + 0x3c, 0x71, //0x000007ee cmpb $113, %al + 0x0f, 0x8e, 0xbc, 0xff, 0xff, 0xff, //0x000007f0 jle LBB1_20 + 0x3c, 0x72, //0x000007f6 cmpb $114, %al + 0x0f, 0x84, 0xc2, 0xff, 0xff, 0xff, //0x000007f8 je LBB1_21 + 0x3c, 0x75, //0x000007fe cmpb $117, %al + 0x0f, 0x85, 0x94, 0x01, 0x00, 0x00, //0x00000800 jne LBB1_48 + 0x48, 0x89, 0xd8, //0x00000806 movq %rbx, %rax + 0x4c, 0x29, 0xc8, //0x00000809 subq %r9, %rax + 0x48, 0x83, 0xf8, 0x04, //0x0000080c cmpq $4, %rax + 0x0f, 0x8c, 0x84, 0x01, 0x00, 0x00, //0x00000810 jl LBB1_48 + 0x41, 0x8b, 0x01, //0x00000816 movl (%r9), %eax + 0x89, 0xc6, //0x00000819 movl %eax, %esi + 0xf7, 0xd6, //0x0000081b notl %esi + 0x8d, 0xb8, 0xd0, 0xcf, 0xcf, 0xcf, //0x0000081d leal $-808464432(%rax), %edi + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00000823 andl $-2139062144, %esi + 0x85, 0xfe, //0x00000829 testl %edi, %esi + 0x0f, 0x85, 0x69, 0x01, 0x00, 0x00, //0x0000082b jne LBB1_48 + 0x8d, 0xb8, 0x19, 0x19, 0x19, 0x19, //0x00000831 leal $421075225(%rax), %edi + 0x09, 0xc7, //0x00000837 orl %eax, %edi + 0xf7, 0xc7, 0x80, 0x80, 0x80, 0x80, //0x00000839 testl $-2139062144, %edi + 0x0f, 0x85, 0x55, 0x01, 0x00, 0x00, //0x0000083f jne LBB1_48 + 0x89, 0xc7, //0x00000845 movl %eax, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x00000847 andl $2139062143, %edi + 0xbb, 0xc0, 0xc0, 0xc0, 0xc0, //0x0000084d movl $-1061109568, %ebx + 0x29, 0xfb, //0x00000852 subl %edi, %ebx + 0x44, 0x8d, 0x87, 0x46, 0x46, 0x46, 0x46, //0x00000854 leal $1179010630(%rdi), %r8d + 0x21, 0xf3, //0x0000085b andl %esi, %ebx + 0x44, 0x85, 0xc3, //0x0000085d testl %r8d, %ebx + 0x48, 0x8b, 0x5d, 0xd0, //0x00000860 movq $-48(%rbp), %rbx + 0x0f, 0x85, 0x30, 0x01, 0x00, 0x00, //0x00000864 jne LBB1_48 + 0xbb, 0xe0, 0xe0, 0xe0, 0xe0, //0x0000086a movl $-522133280, %ebx + 0x29, 0xfb, //0x0000086f subl %edi, %ebx + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x00000871 addl $960051513, %edi + 0x21, 0xde, //0x00000877 andl %ebx, %esi + 0x48, 0x8b, 0x5d, 0xd0, //0x00000879 movq $-48(%rbp), %rbx + 0x85, 0xfe, //0x0000087d testl %edi, %esi + 0x0f, 0x85, 0x15, 0x01, 0x00, 0x00, //0x0000087f jne LBB1_48 + 0x0f, 0xc8, //0x00000885 bswapl %eax + 0x89, 0xc1, //0x00000887 movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00000889 shrl $4, %ecx + 0xf7, 0xd1, //0x0000088c notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x0000088e andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00000894 leal (%rcx,%rcx,8), %ecx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000897 andl $252645135, %eax + 0x01, 0xc8, //0x0000089c addl %ecx, %eax + 0x89, 0xc1, //0x0000089e movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x000008a0 shrl $4, %ecx + 0x09, 0xc1, //0x000008a3 orl %eax, %ecx + 0x89, 0xc8, //0x000008a5 movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x000008a7 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x000008aa andl $65280, %eax + 0x89, 0xce, //0x000008af movl %ecx, %esi + 0x81, 0xe6, 0x80, 0x00, 0x00, 0x00, //0x000008b1 andl $128, %esi + 0x09, 0xc6, //0x000008b7 orl %eax, %esi + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x000008b9 je LBB1_34 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x000008bf movl $255, %ecx + //0x000008c4 LBB1_34 + 0x48, 0x83, 0xc2, 0x06, //0x000008c4 addq $6, %rdx + 0x49, 0x89, 0xd1, //0x000008c8 movq %rdx, %r9 + 0x80, 0xf9, 0x0d, //0x000008cb cmpb $13, %cl + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x000008ce jne LBB1_36 + 0xe9, 0xe7, 0xfe, 0xff, 0xff, //0x000008d4 jmp LBB1_21 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000008d9 .p2align 4, 0x90 + //0x000008e0 LBB1_35 + 0x49, 0x89, 0xc1, //0x000008e0 movq %rax, %r9 + 0x80, 0xf9, 0x0d, //0x000008e3 cmpb $13, %cl + 0x0f, 0x84, 0xd4, 0xfe, 0xff, 0xff, //0x000008e6 je LBB1_21 + //0x000008ec LBB1_36 + 0x80, 0xf9, 0x0a, //0x000008ec cmpb $10, %cl + 0x0f, 0x84, 0xcb, 0xfe, 0xff, 0xff, //0x000008ef je LBB1_21 + 0xe9, 0xa0, 0x00, 0x00, 0x00, //0x000008f5 jmp LBB1_48 + //0x000008fa LBB1_37 + 0x31, 0xd2, //0x000008fa xorl %edx, %edx + 0x45, 0x31, 0xdb, //0x000008fc xorl %r11d, %r11d + //0x000008ff LBB1_38 + 0x45, 0x85, 0xdb, //0x000008ff testl %r11d, %r11d + 0x0f, 0x85, 0xe1, 0x09, 0x00, 0x00, //0x00000902 jne LBB1_209 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000908 .p2align 4, 0x90 + //0x00000910 LBB1_39 + 0x48, 0x8b, 0x4d, 0xb0, //0x00000910 movq $-80(%rbp), %rcx + 0x48, 0x89, 0x4d, 0xb0, //0x00000914 movq %rcx, $-80(%rbp) + 0x48, 0x39, 0x4d, 0xc8, //0x00000918 cmpq %rcx, $-56(%rbp) + 0x0f, 0x83, 0x43, 0xfd, 0xff, 0xff, //0x0000091c jae LBB1_223 + 0xe9, 0xbf, 0x1f, 0x00, 0x00, //0x00000922 jmp LBB1_572 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000927 .p2align 4, 0x90 + //0x00000930 LBB1_40 + 0x49, 0xff, 0xc1, //0x00000930 incq %r9 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00000933 movl $2, %r11d + 0x49, 0x39, 0xd9, //0x00000939 cmpq %rbx, %r9 + 0x0f, 0x83, 0xbd, 0xff, 0xff, 0xff, //0x0000093c jae LBB1_38 + //0x00000942 LBB1_41 + 0x41, 0x0f, 0xb6, 0x09, //0x00000942 movzbl (%r9), %ecx + 0x48, 0x83, 0xf9, 0x0d, //0x00000946 cmpq $13, %rcx + 0x0f, 0x84, 0xe0, 0xff, 0xff, 0xff, //0x0000094a je LBB1_40 + 0x80, 0xf9, 0x0a, //0x00000950 cmpb $10, %cl + 0x0f, 0x84, 0xd7, 0xff, 0xff, 0xff, //0x00000953 je LBB1_40 + 0x48, 0x8b, 0x45, 0xc0, //0x00000959 movq $-64(%rbp), %rax + 0x0f, 0xb6, 0x04, 0x08, //0x0000095d movzbl (%rax,%rcx), %eax + 0x49, 0xff, 0xc1, //0x00000961 incq %r9 + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00000964 cmpl $255, %eax + 0x0f, 0x84, 0xea, 0x08, 0x00, 0x00, //0x00000969 je LBB1_176 + 0xc1, 0xe2, 0x06, //0x0000096f shll $6, %edx + 0x09, 0xc2, //0x00000972 orl %eax, %edx + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00000974 movl $3, %r11d + 0x49, 0x39, 0xd9, //0x0000097a cmpq %rbx, %r9 + 0x0f, 0x82, 0xba, 0x03, 0x00, 0x00, //0x0000097d jb LBB1_105 + 0xe9, 0x61, 0x09, 0x00, 0x00, //0x00000983 jmp LBB1_209 + //0x00000988 LBB1_45 + 0x49, 0x89, 0xc1, //0x00000988 movq %rax, %r9 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x0000098b jmp LBB1_48 + //0x00000990 LBB1_46 + 0x3c, 0x2f, //0x00000990 cmpb $47, %al + 0x0f, 0x85, 0x02, 0x00, 0x00, 0x00, //0x00000992 jne LBB1_48 + 0x89, 0xc1, //0x00000998 movl %eax, %ecx + //0x0000099a LBB1_48 + 0x0f, 0xb6, 0xc1, //0x0000099a movzbl %cl, %eax + 0x48, 0x8b, 0x55, 0xc0, //0x0000099d movq $-64(%rbp), %rdx + 0x0f, 0xb6, 0x14, 0x02, //0x000009a1 movzbl (%rdx,%rax), %edx + 0x81, 0xfa, 0xff, 0x00, 0x00, 0x00, //0x000009a5 cmpl $255, %edx + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x000009ab je LBB1_51 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x000009b1 movl $1, %r11d + 0x49, 0x39, 0xd9, //0x000009b7 cmpq %rbx, %r9 + 0x0f, 0x83, 0x29, 0x09, 0x00, 0x00, //0x000009ba jae LBB1_209 + 0x41, 0x89, 0xd4, //0x000009c0 movl %edx, %r12d + 0x4c, 0x89, 0xca, //0x000009c3 movq %r9, %rdx + 0xe9, 0xcd, 0x00, 0x00, 0x00, //0x000009c6 jmp LBB1_67 + //0x000009cb LBB1_51 + 0x45, 0x31, 0xe4, //0x000009cb xorl %r12d, %r12d + 0x45, 0x31, 0xdb, //0x000009ce xorl %r11d, %r11d + //0x000009d1 LBB1_52 + 0x41, 0xf6, 0xc2, 0x02, //0x000009d1 testb $2, %r10b + 0x0f, 0x85, 0x3a, 0x09, 0x00, 0x00, //0x000009d5 jne LBB1_212 + 0x41, 0x83, 0xfb, 0x02, //0x000009db cmpl $2, %r11d + 0x0f, 0x82, 0x30, 0x09, 0x00, 0x00, //0x000009df jb LBB1_212 + 0x80, 0xf9, 0x3d, //0x000009e5 cmpb $61, %cl + 0x0f, 0x85, 0x27, 0x09, 0x00, 0x00, //0x000009e8 jne LBB1_212 + 0x41, 0xbe, 0x05, 0x00, 0x00, 0x00, //0x000009ee movl $5, %r14d + 0x45, 0x29, 0xde, //0x000009f4 subl %r11d, %r14d + 0x41, 0xf6, 0xc2, 0x08, //0x000009f7 testb $8, %r10b + 0x0f, 0x85, 0xb3, 0x01, 0x00, 0x00, //0x000009fb jne LBB1_83 + 0x4c, 0x39, 0x4d, 0xd0, //0x00000a01 cmpq %r9, $-48(%rbp) + 0x0f, 0x86, 0x6f, 0x09, 0x00, 0x00, //0x00000a05 jbe LBB1_216 + 0x49, 0x8d, 0x49, 0x03, //0x00000a0b leaq $3(%r9), %rcx + 0x48, 0x8b, 0x5d, 0x80, //0x00000a0f movq $-128(%rbp), %rbx + 0x4c, 0x29, 0xcb, //0x00000a13 subq %r9, %rbx + 0x49, 0x8d, 0x51, 0x04, //0x00000a16 leaq $4(%r9), %rdx + 0x48, 0x8b, 0x7d, 0x98, //0x00000a1a movq $-104(%rbp), %rdi + 0x4c, 0x29, 0xcf, //0x00000a1e subq %r9, %rdi + 0xe9, 0x23, 0x00, 0x00, 0x00, //0x00000a21 jmp LBB1_59 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000a26 .p2align 4, 0x90 + //0x00000a30 LBB1_58 + 0x49, 0xff, 0xc1, //0x00000a30 incq %r9 + 0x48, 0xff, 0xc1, //0x00000a33 incq %rcx + 0x48, 0xff, 0xcb, //0x00000a36 decq %rbx + 0x48, 0xff, 0xc2, //0x00000a39 incq %rdx + 0x48, 0xff, 0xcf, //0x00000a3c decq %rdi + 0x4c, 0x39, 0x4d, 0xd0, //0x00000a3f cmpq %r9, $-48(%rbp) + 0x0f, 0x84, 0x2d, 0x09, 0x00, 0x00, //0x00000a43 je LBB1_215 + //0x00000a49 LBB1_59 + 0x41, 0x0f, 0xb6, 0x01, //0x00000a49 movzbl (%r9), %eax + 0x3c, 0x0a, //0x00000a4d cmpb $10, %al + 0x0f, 0x84, 0xdb, 0xff, 0xff, 0xff, //0x00000a4f je LBB1_58 + 0x3c, 0x0d, //0x00000a55 cmpb $13, %al + 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x00000a57 je LBB1_58 + 0x3c, 0x3d, //0x00000a5d cmpb $61, %al + 0x0f, 0x85, 0x04, 0x05, 0x00, 0x00, //0x00000a5f jne LBB1_144 + 0x49, 0xff, 0xc1, //0x00000a65 incq %r9 + 0x41, 0x83, 0xfe, 0x02, //0x00000a68 cmpl $2, %r14d + 0x0f, 0x84, 0xa3, 0x08, 0x00, 0x00, //0x00000a6c je LBB1_212 + 0x4c, 0x39, 0x4d, 0xd0, //0x00000a72 cmpq %r9, $-48(%rbp) + 0x0f, 0x87, 0x15, 0x03, 0x00, 0x00, //0x00000a76 ja LBB1_110 + 0xe9, 0xf9, 0x08, 0x00, 0x00, //0x00000a7c jmp LBB1_216 + //0x00000a81 LBB1_64 + 0x3c, 0x6e, //0x00000a81 cmpb $110, %al + 0x0f, 0x85, 0x4e, 0x03, 0x00, 0x00, //0x00000a83 jne LBB1_116 + //0x00000a89 LBB1_65 + 0x4d, 0x89, 0xc1, //0x00000a89 movq %r8, %r9 + //0x00000a8c LBB1_66 + 0x4c, 0x89, 0xca, //0x00000a8c movq %r9, %rdx + 0x49, 0x39, 0xd9, //0x00000a8f cmpq %rbx, %r9 + 0x0f, 0x83, 0x85, 0x02, 0x00, 0x00, //0x00000a92 jae LBB1_103 + //0x00000a98 LBB1_67 + 0x4c, 0x8d, 0x4a, 0x01, //0x00000a98 leaq $1(%rdx), %r9 + 0x0f, 0xb6, 0x0a, //0x00000a9c movzbl (%rdx), %ecx + 0x80, 0xf9, 0x5c, //0x00000a9f cmpb $92, %cl + 0x0f, 0x85, 0xea, 0x00, 0x00, 0x00, //0x00000aa2 jne LBB1_80 + 0x4c, 0x8d, 0x42, 0x02, //0x00000aa8 leaq $2(%rdx), %r8 + 0xb1, 0xff, //0x00000aac movb $-1, %cl + 0x49, 0x39, 0xd8, //0x00000aae cmpq %rbx, %r8 + 0x0f, 0x87, 0x31, 0x03, 0x00, 0x00, //0x00000ab1 ja LBB1_119 + 0x41, 0x0f, 0xb6, 0x01, //0x00000ab7 movzbl (%r9), %eax + 0x3c, 0x71, //0x00000abb cmpb $113, %al + 0x0f, 0x8e, 0xbe, 0xff, 0xff, 0xff, //0x00000abd jle LBB1_64 + 0x3c, 0x72, //0x00000ac3 cmpb $114, %al + 0x0f, 0x84, 0xbe, 0xff, 0xff, 0xff, //0x00000ac5 je LBB1_65 + 0x3c, 0x75, //0x00000acb cmpb $117, %al + 0x0f, 0x85, 0x0e, 0x03, 0x00, 0x00, //0x00000acd jne LBB1_118 + 0x48, 0x8b, 0x45, 0xd0, //0x00000ad3 movq $-48(%rbp), %rax + 0x4c, 0x29, 0xc0, //0x00000ad7 subq %r8, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00000ada cmpq $4, %rax + 0x0f, 0x8c, 0xfd, 0x02, 0x00, 0x00, //0x00000ade jl LBB1_118 + 0x41, 0x8b, 0x18, //0x00000ae4 movl (%r8), %ebx + 0x89, 0xde, //0x00000ae7 movl %ebx, %esi + 0xf7, 0xd6, //0x00000ae9 notl %esi + 0x8d, 0x83, 0xd0, 0xcf, 0xcf, 0xcf, //0x00000aeb leal $-808464432(%rbx), %eax + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00000af1 andl $-2139062144, %esi + 0x85, 0xc6, //0x00000af7 testl %eax, %esi + 0x0f, 0x85, 0xe2, 0x02, 0x00, 0x00, //0x00000af9 jne LBB1_118 + 0x8d, 0x83, 0x19, 0x19, 0x19, 0x19, //0x00000aff leal $421075225(%rbx), %eax + 0x09, 0xd8, //0x00000b05 orl %ebx, %eax + 0xa9, 0x80, 0x80, 0x80, 0x80, //0x00000b07 testl $-2139062144, %eax + 0x0f, 0x85, 0xcf, 0x02, 0x00, 0x00, //0x00000b0c jne LBB1_118 + 0x89, 0xd8, //0x00000b12 movl %ebx, %eax + 0x25, 0x7f, 0x7f, 0x7f, 0x7f, //0x00000b14 andl $2139062143, %eax + 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, //0x00000b19 movl $-1061109568, %edi + 0x29, 0xc7, //0x00000b1e subl %eax, %edi + 0x44, 0x8d, 0x88, 0x46, 0x46, 0x46, 0x46, //0x00000b20 leal $1179010630(%rax), %r9d + 0x21, 0xf7, //0x00000b27 andl %esi, %edi + 0x44, 0x85, 0xcf, //0x00000b29 testl %r9d, %edi + 0x0f, 0x85, 0xaf, 0x02, 0x00, 0x00, //0x00000b2c jne LBB1_118 + 0xbf, 0xe0, 0xe0, 0xe0, 0xe0, //0x00000b32 movl $-522133280, %edi + 0x29, 0xc7, //0x00000b37 subl %eax, %edi + 0x05, 0x39, 0x39, 0x39, 0x39, //0x00000b39 addl $960051513, %eax + 0x21, 0xfe, //0x00000b3e andl %edi, %esi + 0x85, 0xc6, //0x00000b40 testl %eax, %esi + 0x0f, 0x85, 0x99, 0x02, 0x00, 0x00, //0x00000b42 jne LBB1_118 + 0x0f, 0xcb, //0x00000b48 bswapl %ebx + 0x89, 0xd8, //0x00000b4a movl %ebx, %eax + 0xc1, 0xe8, 0x04, //0x00000b4c shrl $4, %eax + 0xf7, 0xd0, //0x00000b4f notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x00000b51 andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x00000b56 leal (%rax,%rax,8), %eax + 0x81, 0xe3, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000b59 andl $252645135, %ebx + 0x01, 0xc3, //0x00000b5f addl %eax, %ebx + 0x89, 0xd9, //0x00000b61 movl %ebx, %ecx + 0xc1, 0xe9, 0x04, //0x00000b63 shrl $4, %ecx + 0x09, 0xd9, //0x00000b66 orl %ebx, %ecx + 0x89, 0xc8, //0x00000b68 movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x00000b6a shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00000b6d andl $65280, %eax + 0x89, 0xce, //0x00000b72 movl %ecx, %esi + 0x81, 0xe6, 0x80, 0x00, 0x00, 0x00, //0x00000b74 andl $128, %esi + 0x09, 0xc6, //0x00000b7a orl %eax, %esi + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00000b7c je LBB1_79 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x00000b82 movl $255, %ecx + //0x00000b87 LBB1_79 + 0x48, 0x83, 0xc2, 0x06, //0x00000b87 addq $6, %rdx + 0x49, 0x89, 0xd1, //0x00000b8b movq %rdx, %r9 + 0x48, 0x8b, 0x5d, 0xd0, //0x00000b8e movq $-48(%rbp), %rbx + //0x00000b92 LBB1_80 + 0x80, 0xf9, 0x0a, //0x00000b92 cmpb $10, %cl + 0x0f, 0x84, 0xf1, 0xfe, 0xff, 0xff, //0x00000b95 je LBB1_66 + 0x80, 0xf9, 0x0d, //0x00000b9b cmpb $13, %cl + 0x0f, 0x84, 0xe8, 0xfe, 0xff, 0xff, //0x00000b9e je LBB1_66 + 0xe9, 0x3f, 0x02, 0x00, 0x00, //0x00000ba4 jmp LBB1_119 + //0x00000ba9 LBB1_82 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00000ba9 movl $1, %r11d + 0xe9, 0x4b, 0xfd, 0xff, 0xff, //0x00000baf jmp LBB1_38 + //0x00000bb4 LBB1_83 + 0x48, 0x8b, 0x55, 0xd0, //0x00000bb4 movq $-48(%rbp), %rdx + 0x4c, 0x39, 0xca, //0x00000bb8 cmpq %r9, %rdx + 0x0f, 0x87, 0x28, 0x00, 0x00, 0x00, //0x00000bbb ja LBB1_86 + 0xe9, 0xb4, 0x07, 0x00, 0x00, //0x00000bc1 jmp LBB1_216 + //0x00000bc6 LBB1_102 + 0x48, 0x89, 0xc1, //0x00000bc6 movq %rax, %rcx + 0x49, 0x89, 0xc9, //0x00000bc9 movq %rcx, %r9 + 0x48, 0x39, 0xd1, //0x00000bcc cmpq %rdx, %rcx + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00000bcf jb LBB1_86 + 0xe9, 0x3b, 0x01, 0x00, 0x00, //0x00000bd5 jmp LBB1_143 + //0x00000bda LBB1_84 + 0x48, 0x89, 0xc8, //0x00000bda movq %rcx, %rax + 0x49, 0x89, 0xc9, //0x00000bdd movq %rcx, %r9 + 0x48, 0x39, 0xd1, //0x00000be0 cmpq %rdx, %rcx + 0x0f, 0x83, 0x2c, 0x01, 0x00, 0x00, //0x00000be3 jae LBB1_143 + //0x00000be9 LBB1_86 + 0x49, 0x8d, 0x41, 0x01, //0x00000be9 leaq $1(%r9), %rax + 0x41, 0x0f, 0xb6, 0x09, //0x00000bed movzbl (%r9), %ecx + 0x80, 0xf9, 0x5c, //0x00000bf1 cmpb $92, %cl + 0x0f, 0x85, 0xe6, 0x00, 0x00, 0x00, //0x00000bf4 jne LBB1_99 + 0x49, 0x8d, 0x49, 0x02, //0x00000bfa leaq $2(%r9), %rcx + 0x48, 0x39, 0xd1, //0x00000bfe cmpq %rdx, %rcx + 0x0f, 0x87, 0x79, 0x0a, 0x00, 0x00, //0x00000c01 ja LBB1_258 + 0x0f, 0xb6, 0x00, //0x00000c07 movzbl (%rax), %eax + 0x3c, 0x6e, //0x00000c0a cmpb $110, %al + 0x0f, 0x84, 0xc8, 0xff, 0xff, 0xff, //0x00000c0c je LBB1_84 + 0x3c, 0x72, //0x00000c12 cmpb $114, %al + 0x0f, 0x84, 0xc0, 0xff, 0xff, 0xff, //0x00000c14 je LBB1_84 + 0x3c, 0x75, //0x00000c1a cmpb $117, %al + 0x0f, 0x85, 0x53, 0x0a, 0x00, 0x00, //0x00000c1c jne LBB1_278 + 0x48, 0x89, 0xd0, //0x00000c22 movq %rdx, %rax + 0x48, 0x29, 0xc8, //0x00000c25 subq %rcx, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00000c28 cmpq $4, %rax + 0x0f, 0x8c, 0x43, 0x0a, 0x00, 0x00, //0x00000c2c jl LBB1_278 + 0x8b, 0x01, //0x00000c32 movl (%rcx), %eax + 0x89, 0xc2, //0x00000c34 movl %eax, %edx + 0xf7, 0xd2, //0x00000c36 notl %edx + 0x8d, 0xb0, 0xd0, 0xcf, 0xcf, 0xcf, //0x00000c38 leal $-808464432(%rax), %esi + 0x81, 0xe2, 0x80, 0x80, 0x80, 0x80, //0x00000c3e andl $-2139062144, %edx + 0x85, 0xf2, //0x00000c44 testl %esi, %edx + 0x0f, 0x85, 0x29, 0x0a, 0x00, 0x00, //0x00000c46 jne LBB1_278 + 0x8d, 0xb0, 0x19, 0x19, 0x19, 0x19, //0x00000c4c leal $421075225(%rax), %esi + 0x09, 0xc6, //0x00000c52 orl %eax, %esi + 0xf7, 0xc6, 0x80, 0x80, 0x80, 0x80, //0x00000c54 testl $-2139062144, %esi + 0x0f, 0x85, 0x15, 0x0a, 0x00, 0x00, //0x00000c5a jne LBB1_278 + 0x89, 0xc6, //0x00000c60 movl %eax, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x00000c62 andl $2139062143, %esi + 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, //0x00000c68 movl $-1061109568, %edi + 0x29, 0xf7, //0x00000c6d subl %esi, %edi + 0x8d, 0x9e, 0x46, 0x46, 0x46, 0x46, //0x00000c6f leal $1179010630(%rsi), %ebx + 0x21, 0xd7, //0x00000c75 andl %edx, %edi + 0x85, 0xdf, //0x00000c77 testl %ebx, %edi + 0x0f, 0x85, 0xf6, 0x09, 0x00, 0x00, //0x00000c79 jne LBB1_278 + 0xbf, 0xe0, 0xe0, 0xe0, 0xe0, //0x00000c7f movl $-522133280, %edi + 0x29, 0xf7, //0x00000c84 subl %esi, %edi + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x00000c86 addl $960051513, %esi + 0x21, 0xfa, //0x00000c8c andl %edi, %edx + 0x85, 0xf2, //0x00000c8e testl %esi, %edx + 0x0f, 0x85, 0xdf, 0x09, 0x00, 0x00, //0x00000c90 jne LBB1_278 + 0x0f, 0xc8, //0x00000c96 bswapl %eax + 0x89, 0xc1, //0x00000c98 movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00000c9a shrl $4, %ecx + 0xf7, 0xd1, //0x00000c9d notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00000c9f andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00000ca5 leal (%rcx,%rcx,8), %ecx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000ca8 andl $252645135, %eax + 0x01, 0xc8, //0x00000cad addl %ecx, %eax + 0x89, 0xc1, //0x00000caf movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00000cb1 shrl $4, %ecx + 0x09, 0xc1, //0x00000cb4 orl %eax, %ecx + 0x89, 0xc8, //0x00000cb6 movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x00000cb8 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00000cbb andl $65280, %eax + 0x89, 0xca, //0x00000cc0 movl %ecx, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x00000cc2 andl $128, %edx + 0x09, 0xc2, //0x00000cc8 orl %eax, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00000cca je LBB1_98 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x00000cd0 movl $255, %ecx + //0x00000cd5 LBB1_98 + 0x49, 0x83, 0xc1, 0x06, //0x00000cd5 addq $6, %r9 + 0x4c, 0x89, 0xc8, //0x00000cd9 movq %r9, %rax + 0x48, 0x8b, 0x55, 0xd0, //0x00000cdc movq $-48(%rbp), %rdx + //0x00000ce0 LBB1_99 + 0x80, 0xf9, 0x0a, //0x00000ce0 cmpb $10, %cl + 0x0f, 0x84, 0xdd, 0xfe, 0xff, 0xff, //0x00000ce3 je LBB1_102 + 0x80, 0xf9, 0x0d, //0x00000ce9 cmpb $13, %cl + 0x0f, 0x84, 0xd4, 0xfe, 0xff, 0xff, //0x00000cec je LBB1_102 + 0x80, 0xf9, 0x3d, //0x00000cf2 cmpb $61, %cl + 0x0f, 0x85, 0x85, 0x09, 0x00, 0x00, //0x00000cf5 jne LBB1_258 + 0x49, 0x89, 0xc1, //0x00000cfb movq %rax, %r9 + 0x41, 0x83, 0xfe, 0x02, //0x00000cfe cmpl $2, %r14d + 0x0f, 0x84, 0x0d, 0x06, 0x00, 0x00, //0x00000d02 je LBB1_212 + 0x48, 0x8b, 0x75, 0xd0, //0x00000d08 movq $-48(%rbp), %rsi + 0x48, 0x39, 0xc6, //0x00000d0c cmpq %rax, %rsi + 0x0f, 0x87, 0x0e, 0x04, 0x00, 0x00, //0x00000d0f ja LBB1_179 + //0x00000d15 LBB1_143 + 0x49, 0x89, 0xc1, //0x00000d15 movq %rax, %r9 + 0xe9, 0x5d, 0x06, 0x00, 0x00, //0x00000d18 jmp LBB1_216 + //0x00000d1d LBB1_103 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00000d1d movl $1, %r11d + 0x44, 0x89, 0xe2, //0x00000d23 movl %r12d, %edx + 0xe9, 0xd4, 0xfb, 0xff, 0xff, //0x00000d26 jmp LBB1_38 + //0x00000d2b LBB1_104 + 0x49, 0xff, 0xc1, //0x00000d2b incq %r9 + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00000d2e movl $3, %r11d + 0x49, 0x39, 0xd9, //0x00000d34 cmpq %rbx, %r9 + 0x0f, 0x83, 0xc2, 0xfb, 0xff, 0xff, //0x00000d37 jae LBB1_38 + //0x00000d3d LBB1_105 + 0x41, 0x0f, 0xb6, 0x09, //0x00000d3d movzbl (%r9), %ecx + 0x48, 0x83, 0xf9, 0x0d, //0x00000d41 cmpq $13, %rcx + 0x0f, 0x84, 0xe0, 0xff, 0xff, 0xff, //0x00000d45 je LBB1_104 + 0x80, 0xf9, 0x0a, //0x00000d4b cmpb $10, %cl + 0x0f, 0x84, 0xd7, 0xff, 0xff, 0xff, //0x00000d4e je LBB1_104 + 0x48, 0x8b, 0x45, 0xc0, //0x00000d54 movq $-64(%rbp), %rax + 0x0f, 0xb6, 0x04, 0x08, //0x00000d58 movzbl (%rax,%rcx), %eax + 0x49, 0xff, 0xc1, //0x00000d5c incq %r9 + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00000d5f cmpl $255, %eax + 0x0f, 0x85, 0x74, 0x05, 0x00, 0x00, //0x00000d64 jne LBB1_208 + 0x41, 0x89, 0xd4, //0x00000d6a movl %edx, %r12d + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00000d6d movl $3, %r11d + 0xe9, 0x59, 0xfc, 0xff, 0xff, //0x00000d73 jmp LBB1_52 + //0x00000d78 LBB1_109 + 0x49, 0xff, 0xc1, //0x00000d78 incq %r9 + 0x48, 0xff, 0xc1, //0x00000d7b incq %rcx + 0x48, 0xff, 0xcb, //0x00000d7e decq %rbx + 0x48, 0xff, 0xc2, //0x00000d81 incq %rdx + 0x48, 0xff, 0xcf, //0x00000d84 decq %rdi + 0x4c, 0x39, 0x4d, 0xd0, //0x00000d87 cmpq %r9, $-48(%rbp) + 0x0f, 0x84, 0xe5, 0x05, 0x00, 0x00, //0x00000d8b je LBB1_215 + //0x00000d91 LBB1_110 + 0x41, 0x0f, 0xb6, 0x01, //0x00000d91 movzbl (%r9), %eax + 0x3c, 0x0a, //0x00000d95 cmpb $10, %al + 0x0f, 0x84, 0xdb, 0xff, 0xff, 0xff, //0x00000d97 je LBB1_109 + 0x3c, 0x0d, //0x00000d9d cmpb $13, %al + 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x00000d9f je LBB1_109 + 0x3c, 0x3d, //0x00000da5 cmpb $61, %al + 0x0f, 0x85, 0xbc, 0x01, 0x00, 0x00, //0x00000da7 jne LBB1_144 + 0x49, 0xff, 0xc1, //0x00000dad incq %r9 + 0x41, 0x83, 0xfe, 0x03, //0x00000db0 cmpl $3, %r14d + 0x0f, 0x84, 0x5b, 0x05, 0x00, 0x00, //0x00000db4 je LBB1_212 + 0x4c, 0x39, 0x4d, 0xd0, //0x00000dba cmpq %r9, $-48(%rbp) + 0x0f, 0x87, 0xb5, 0x04, 0x00, 0x00, //0x00000dbe ja LBB1_197 + 0xe9, 0xb1, 0x05, 0x00, 0x00, //0x00000dc4 jmp LBB1_216 + //0x00000dc9 LBB1_115 + 0x41, 0x89, 0xd4, //0x00000dc9 movl %edx, %r12d + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00000dcc movl $1, %r11d + 0xe9, 0xfa, 0xfb, 0xff, 0xff, //0x00000dd2 jmp LBB1_52 + //0x00000dd7 LBB1_116 + 0x3c, 0x2f, //0x00000dd7 cmpb $47, %al + 0x0f, 0x85, 0x02, 0x00, 0x00, 0x00, //0x00000dd9 jne LBB1_118 + 0x89, 0xc1, //0x00000ddf movl %eax, %ecx + //0x00000de1 LBB1_118 + 0x4d, 0x89, 0xc1, //0x00000de1 movq %r8, %r9 + 0x48, 0x8b, 0x5d, 0xd0, //0x00000de4 movq $-48(%rbp), %rbx + //0x00000de8 LBB1_119 + 0x0f, 0xb6, 0xc1, //0x00000de8 movzbl %cl, %eax + 0x48, 0x8b, 0x55, 0xc0, //0x00000deb movq $-64(%rbp), %rdx + 0x0f, 0xb6, 0x04, 0x02, //0x00000def movzbl (%rdx,%rax), %eax + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00000df3 cmpl $255, %eax + 0x0f, 0x84, 0x58, 0x01, 0x00, 0x00, //0x00000df8 je LBB1_140 + 0x44, 0x89, 0xe2, //0x00000dfe movl %r12d, %edx + 0xc1, 0xe2, 0x06, //0x00000e01 shll $6, %edx + 0x09, 0xc2, //0x00000e04 orl %eax, %edx + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00000e06 movl $2, %r11d + 0x49, 0x39, 0xd9, //0x00000e0c cmpq %rbx, %r9 + 0x0f, 0x83, 0xd4, 0x04, 0x00, 0x00, //0x00000e0f jae LBB1_209 + 0x41, 0x89, 0xd4, //0x00000e15 movl %edx, %r12d + 0xe9, 0x20, 0x00, 0x00, 0x00, //0x00000e18 jmp LBB1_125 + //0x00000e1d LBB1_122 + 0x3c, 0x6e, //0x00000e1d cmpb $110, %al + 0x0f, 0x85, 0x52, 0x01, 0x00, 0x00, //0x00000e1f jne LBB1_150 + //0x00000e25 LBB1_123 + 0x48, 0x89, 0xd7, //0x00000e25 movq %rdx, %rdi + 0x44, 0x89, 0xe2, //0x00000e28 movl %r12d, %edx + //0x00000e2b LBB1_124 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00000e2b movl $2, %r11d + 0x49, 0x89, 0xf9, //0x00000e31 movq %rdi, %r9 + 0x48, 0x39, 0xdf, //0x00000e34 cmpq %rbx, %rdi + 0x0f, 0x83, 0x24, 0x01, 0x00, 0x00, //0x00000e37 jae LBB1_142 + //0x00000e3d LBB1_125 + 0x49, 0x8d, 0x79, 0x01, //0x00000e3d leaq $1(%r9), %rdi + 0x41, 0x0f, 0xb6, 0x09, //0x00000e41 movzbl (%r9), %ecx + 0x80, 0xf9, 0x5c, //0x00000e45 cmpb $92, %cl + 0x0f, 0x85, 0xf1, 0x00, 0x00, 0x00, //0x00000e48 jne LBB1_138 + 0x49, 0x8d, 0x51, 0x02, //0x00000e4e leaq $2(%r9), %rdx + 0xb1, 0xff, //0x00000e52 movb $-1, %cl + 0x48, 0x39, 0xda, //0x00000e54 cmpq %rbx, %rdx + 0x0f, 0x87, 0x27, 0x01, 0x00, 0x00, //0x00000e57 ja LBB1_153 + 0x0f, 0xb6, 0x07, //0x00000e5d movzbl (%rdi), %eax + 0x3c, 0x71, //0x00000e60 cmpb $113, %al + 0x0f, 0x8e, 0xb5, 0xff, 0xff, 0xff, //0x00000e62 jle LBB1_122 + 0x3c, 0x72, //0x00000e68 cmpb $114, %al + 0x0f, 0x84, 0xb5, 0xff, 0xff, 0xff, //0x00000e6a je LBB1_123 + 0x3c, 0x75, //0x00000e70 cmpb $117, %al + 0x0f, 0x85, 0x09, 0x01, 0x00, 0x00, //0x00000e72 jne LBB1_152 + 0x48, 0x89, 0xd8, //0x00000e78 movq %rbx, %rax + 0x48, 0x29, 0xd0, //0x00000e7b subq %rdx, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00000e7e cmpq $4, %rax + 0x0f, 0x8c, 0xf9, 0x00, 0x00, 0x00, //0x00000e82 jl LBB1_152 + 0x8b, 0x02, //0x00000e88 movl (%rdx), %eax + 0x89, 0xc6, //0x00000e8a movl %eax, %esi + 0xf7, 0xd6, //0x00000e8c notl %esi + 0x8d, 0xb8, 0xd0, 0xcf, 0xcf, 0xcf, //0x00000e8e leal $-808464432(%rax), %edi + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00000e94 andl $-2139062144, %esi + 0x85, 0xfe, //0x00000e9a testl %edi, %esi + 0x0f, 0x85, 0xdf, 0x00, 0x00, 0x00, //0x00000e9c jne LBB1_152 + 0x8d, 0xb8, 0x19, 0x19, 0x19, 0x19, //0x00000ea2 leal $421075225(%rax), %edi + 0x09, 0xc7, //0x00000ea8 orl %eax, %edi + 0xf7, 0xc7, 0x80, 0x80, 0x80, 0x80, //0x00000eaa testl $-2139062144, %edi + 0x0f, 0x85, 0xcb, 0x00, 0x00, 0x00, //0x00000eb0 jne LBB1_152 + 0x89, 0xc7, //0x00000eb6 movl %eax, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x00000eb8 andl $2139062143, %edi + 0xbb, 0xc0, 0xc0, 0xc0, 0xc0, //0x00000ebe movl $-1061109568, %ebx + 0x29, 0xfb, //0x00000ec3 subl %edi, %ebx + 0x44, 0x8d, 0x87, 0x46, 0x46, 0x46, 0x46, //0x00000ec5 leal $1179010630(%rdi), %r8d + 0x21, 0xf3, //0x00000ecc andl %esi, %ebx + 0x44, 0x85, 0xc3, //0x00000ece testl %r8d, %ebx + 0x48, 0x8b, 0x5d, 0xd0, //0x00000ed1 movq $-48(%rbp), %rbx + 0x0f, 0x85, 0xa6, 0x00, 0x00, 0x00, //0x00000ed5 jne LBB1_152 + 0xbb, 0xe0, 0xe0, 0xe0, 0xe0, //0x00000edb movl $-522133280, %ebx + 0x29, 0xfb, //0x00000ee0 subl %edi, %ebx + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x00000ee2 addl $960051513, %edi + 0x21, 0xde, //0x00000ee8 andl %ebx, %esi + 0x48, 0x8b, 0x5d, 0xd0, //0x00000eea movq $-48(%rbp), %rbx + 0x85, 0xfe, //0x00000eee testl %edi, %esi + 0x0f, 0x85, 0x8b, 0x00, 0x00, 0x00, //0x00000ef0 jne LBB1_152 + 0x0f, 0xc8, //0x00000ef6 bswapl %eax + 0x89, 0xc1, //0x00000ef8 movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00000efa shrl $4, %ecx + 0xf7, 0xd1, //0x00000efd notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00000eff andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00000f05 leal (%rcx,%rcx,8), %ecx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000f08 andl $252645135, %eax + 0x01, 0xc8, //0x00000f0d addl %ecx, %eax + 0x89, 0xc1, //0x00000f0f movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00000f11 shrl $4, %ecx + 0x09, 0xc1, //0x00000f14 orl %eax, %ecx + 0x89, 0xc8, //0x00000f16 movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x00000f18 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00000f1b andl $65280, %eax + 0x89, 0xca, //0x00000f20 movl %ecx, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x00000f22 andl $128, %edx + 0x09, 0xc2, //0x00000f28 orl %eax, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00000f2a je LBB1_137 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x00000f30 movl $255, %ecx + //0x00000f35 LBB1_137 + 0x49, 0x83, 0xc1, 0x06, //0x00000f35 addq $6, %r9 + 0x4c, 0x89, 0xcf, //0x00000f39 movq %r9, %rdi + 0x44, 0x89, 0xe2, //0x00000f3c movl %r12d, %edx + //0x00000f3f LBB1_138 + 0x80, 0xf9, 0x0a, //0x00000f3f cmpb $10, %cl + 0x0f, 0x84, 0xe3, 0xfe, 0xff, 0xff, //0x00000f42 je LBB1_124 + 0x80, 0xf9, 0x0d, //0x00000f48 cmpb $13, %cl + 0x0f, 0x84, 0xda, 0xfe, 0xff, 0xff, //0x00000f4b je LBB1_124 + 0xe9, 0x2e, 0x00, 0x00, 0x00, //0x00000f51 jmp LBB1_153 + //0x00000f56 LBB1_140 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00000f56 movl $1, %r11d + 0xe9, 0x70, 0xfa, 0xff, 0xff, //0x00000f5c jmp LBB1_52 + //0x00000f61 LBB1_142 + 0x49, 0x89, 0xf9, //0x00000f61 movq %rdi, %r9 + 0xe9, 0x96, 0xf9, 0xff, 0xff, //0x00000f64 jmp LBB1_38 + //0x00000f69 LBB1_144 + 0x49, 0xff, 0xc1, //0x00000f69 incq %r9 + 0x4c, 0x89, 0xca, //0x00000f6c movq %r9, %rdx + //0x00000f6f LBB1_145 + 0x49, 0x89, 0xd1, //0x00000f6f movq %rdx, %r9 + 0xe9, 0x9e, 0x03, 0x00, 0x00, //0x00000f72 jmp LBB1_212 + //0x00000f77 LBB1_150 + 0x3c, 0x2f, //0x00000f77 cmpb $47, %al + 0x0f, 0x85, 0x02, 0x00, 0x00, 0x00, //0x00000f79 jne LBB1_152 + 0x89, 0xc1, //0x00000f7f movl %eax, %ecx + //0x00000f81 LBB1_152 + 0x48, 0x89, 0xd7, //0x00000f81 movq %rdx, %rdi + //0x00000f84 LBB1_153 + 0x0f, 0xb6, 0xc1, //0x00000f84 movzbl %cl, %eax + 0x48, 0x8b, 0x55, 0xc0, //0x00000f87 movq $-64(%rbp), %rdx + 0x0f, 0xb6, 0x04, 0x02, //0x00000f8b movzbl (%rdx,%rax), %eax + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00000f8f cmpl $255, %eax + 0x0f, 0x84, 0x50, 0x01, 0x00, 0x00, //0x00000f94 je LBB1_174 + 0x44, 0x89, 0xe2, //0x00000f9a movl %r12d, %edx + 0xc1, 0xe2, 0x06, //0x00000f9d shll $6, %edx + 0x09, 0xc2, //0x00000fa0 orl %eax, %edx + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00000fa2 movl $3, %r11d + 0x48, 0x39, 0xdf, //0x00000fa8 cmpq %rbx, %rdi + 0x0f, 0x83, 0x47, 0x01, 0x00, 0x00, //0x00000fab jae LBB1_175 + 0x41, 0x89, 0xd4, //0x00000fb1 movl %edx, %r12d + 0xe9, 0x1d, 0x00, 0x00, 0x00, //0x00000fb4 jmp LBB1_159 + //0x00000fb9 LBB1_156 + 0x3c, 0x6e, //0x00000fb9 cmpb $110, %al + 0x0f, 0x85, 0xf3, 0x02, 0x00, 0x00, //0x00000fbb jne LBB1_203 + //0x00000fc1 LBB1_157 + 0x4d, 0x89, 0xc1, //0x00000fc1 movq %r8, %r9 + //0x00000fc4 LBB1_158 + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00000fc4 movl $3, %r11d + 0x4c, 0x89, 0xcf, //0x00000fca movq %r9, %rdi + 0x49, 0x39, 0xd9, //0x00000fcd cmpq %rbx, %r9 + 0x0f, 0x83, 0x29, 0xf9, 0xff, 0xff, //0x00000fd0 jae LBB1_38 + //0x00000fd6 LBB1_159 + 0x4c, 0x8d, 0x4f, 0x01, //0x00000fd6 leaq $1(%rdi), %r9 + 0x0f, 0xb6, 0x0f, //0x00000fda movzbl (%rdi), %ecx + 0x80, 0xf9, 0x5c, //0x00000fdd cmpb $92, %cl + 0x0f, 0x85, 0xed, 0x00, 0x00, 0x00, //0x00000fe0 jne LBB1_172 + 0x4c, 0x8d, 0x47, 0x02, //0x00000fe6 leaq $2(%rdi), %r8 + 0xb1, 0xff, //0x00000fea movb $-1, %cl + 0x49, 0x39, 0xd8, //0x00000fec cmpq %rbx, %r8 + 0x0f, 0x87, 0xd0, 0x02, 0x00, 0x00, //0x00000fef ja LBB1_206 + 0x41, 0x0f, 0xb6, 0x01, //0x00000ff5 movzbl (%r9), %eax + 0x3c, 0x71, //0x00000ff9 cmpb $113, %al + 0x0f, 0x8e, 0xb8, 0xff, 0xff, 0xff, //0x00000ffb jle LBB1_156 + 0x3c, 0x72, //0x00001001 cmpb $114, %al + 0x0f, 0x84, 0xb8, 0xff, 0xff, 0xff, //0x00001003 je LBB1_157 + 0x3c, 0x75, //0x00001009 cmpb $117, %al + 0x0f, 0x85, 0xad, 0x02, 0x00, 0x00, //0x0000100b jne LBB1_205 + 0x48, 0x8b, 0x45, 0xd0, //0x00001011 movq $-48(%rbp), %rax + 0x4c, 0x29, 0xc0, //0x00001015 subq %r8, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00001018 cmpq $4, %rax + 0x0f, 0x8c, 0x9c, 0x02, 0x00, 0x00, //0x0000101c jl LBB1_205 + 0x41, 0x8b, 0x18, //0x00001022 movl (%r8), %ebx + 0x89, 0xde, //0x00001025 movl %ebx, %esi + 0xf7, 0xd6, //0x00001027 notl %esi + 0x8d, 0x83, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001029 leal $-808464432(%rbx), %eax + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x0000102f andl $-2139062144, %esi + 0x85, 0xc6, //0x00001035 testl %eax, %esi + 0x0f, 0x85, 0x81, 0x02, 0x00, 0x00, //0x00001037 jne LBB1_205 + 0x8d, 0x83, 0x19, 0x19, 0x19, 0x19, //0x0000103d leal $421075225(%rbx), %eax + 0x09, 0xd8, //0x00001043 orl %ebx, %eax + 0xa9, 0x80, 0x80, 0x80, 0x80, //0x00001045 testl $-2139062144, %eax + 0x0f, 0x85, 0x6e, 0x02, 0x00, 0x00, //0x0000104a jne LBB1_205 + 0x89, 0xd8, //0x00001050 movl %ebx, %eax + 0x25, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001052 andl $2139062143, %eax + 0xba, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001057 movl $-1061109568, %edx + 0x29, 0xc2, //0x0000105c subl %eax, %edx + 0x44, 0x8d, 0x88, 0x46, 0x46, 0x46, 0x46, //0x0000105e leal $1179010630(%rax), %r9d + 0x21, 0xf2, //0x00001065 andl %esi, %edx + 0x44, 0x85, 0xca, //0x00001067 testl %r9d, %edx + 0x0f, 0x85, 0x4e, 0x02, 0x00, 0x00, //0x0000106a jne LBB1_205 + 0xba, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001070 movl $-522133280, %edx + 0x29, 0xc2, //0x00001075 subl %eax, %edx + 0x05, 0x39, 0x39, 0x39, 0x39, //0x00001077 addl $960051513, %eax + 0x21, 0xd6, //0x0000107c andl %edx, %esi + 0x85, 0xc6, //0x0000107e testl %eax, %esi + 0x0f, 0x85, 0x38, 0x02, 0x00, 0x00, //0x00001080 jne LBB1_205 + 0x0f, 0xcb, //0x00001086 bswapl %ebx + 0x89, 0xd8, //0x00001088 movl %ebx, %eax + 0xc1, 0xe8, 0x04, //0x0000108a shrl $4, %eax + 0xf7, 0xd0, //0x0000108d notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x0000108f andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x00001094 leal (%rax,%rax,8), %eax + 0x81, 0xe3, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001097 andl $252645135, %ebx + 0x01, 0xc3, //0x0000109d addl %eax, %ebx + 0x89, 0xd9, //0x0000109f movl %ebx, %ecx + 0xc1, 0xe9, 0x04, //0x000010a1 shrl $4, %ecx + 0x09, 0xd9, //0x000010a4 orl %ebx, %ecx + 0x89, 0xc8, //0x000010a6 movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x000010a8 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x000010ab andl $65280, %eax + 0x89, 0xca, //0x000010b0 movl %ecx, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x000010b2 andl $128, %edx + 0x09, 0xc2, //0x000010b8 orl %eax, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x000010ba je LBB1_171 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x000010c0 movl $255, %ecx + //0x000010c5 LBB1_171 + 0x48, 0x83, 0xc7, 0x06, //0x000010c5 addq $6, %rdi + 0x49, 0x89, 0xf9, //0x000010c9 movq %rdi, %r9 + 0x48, 0x8b, 0x5d, 0xd0, //0x000010cc movq $-48(%rbp), %rbx + 0x44, 0x89, 0xe2, //0x000010d0 movl %r12d, %edx + //0x000010d3 LBB1_172 + 0x80, 0xf9, 0x0a, //0x000010d3 cmpb $10, %cl + 0x0f, 0x84, 0xe8, 0xfe, 0xff, 0xff, //0x000010d6 je LBB1_158 + 0x80, 0xf9, 0x0d, //0x000010dc cmpb $13, %cl + 0x0f, 0x84, 0xdf, 0xfe, 0xff, 0xff, //0x000010df je LBB1_158 + 0xe9, 0xdb, 0x01, 0x00, 0x00, //0x000010e5 jmp LBB1_206 + //0x000010ea LBB1_174 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x000010ea movl $2, %r11d + 0x49, 0x89, 0xf9, //0x000010f0 movq %rdi, %r9 + 0xe9, 0xd9, 0xf8, 0xff, 0xff, //0x000010f3 jmp LBB1_52 + //0x000010f8 LBB1_175 + 0x49, 0x89, 0xf9, //0x000010f8 movq %rdi, %r9 + 0xe9, 0xe9, 0x01, 0x00, 0x00, //0x000010fb jmp LBB1_209 + //0x00001100 LBB1_195 + 0x4c, 0x89, 0xc9, //0x00001100 movq %r9, %rcx + 0x48, 0x89, 0xc8, //0x00001103 movq %rcx, %rax + 0x48, 0x39, 0xf1, //0x00001106 cmpq %rsi, %rcx + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00001109 jb LBB1_179 + 0xe9, 0x66, 0x02, 0x00, 0x00, //0x0000110f jmp LBB1_216 + //0x00001114 LBB1_177 + 0x49, 0x89, 0xc9, //0x00001114 movq %rcx, %r9 + 0x48, 0x89, 0xc8, //0x00001117 movq %rcx, %rax + 0x48, 0x39, 0xf1, //0x0000111a cmpq %rsi, %rcx + 0x0f, 0x83, 0x57, 0x02, 0x00, 0x00, //0x0000111d jae LBB1_216 + //0x00001123 LBB1_179 + 0x4c, 0x8d, 0x48, 0x01, //0x00001123 leaq $1(%rax), %r9 + 0x0f, 0xb6, 0x08, //0x00001127 movzbl (%rax), %ecx + 0x80, 0xf9, 0x5c, //0x0000112a cmpb $92, %cl + 0x0f, 0x85, 0xee, 0x00, 0x00, 0x00, //0x0000112d jne LBB1_192 + 0x48, 0x8d, 0x48, 0x02, //0x00001133 leaq $2(%rax), %rcx + 0x48, 0x39, 0xf1, //0x00001137 cmpq %rsi, %rcx + 0x0f, 0x87, 0x3d, 0x05, 0x00, 0x00, //0x0000113a ja LBB1_279 + 0x41, 0x0f, 0xb6, 0x11, //0x00001140 movzbl (%r9), %edx + 0x80, 0xfa, 0x6e, //0x00001144 cmpb $110, %dl + 0x0f, 0x84, 0xc7, 0xff, 0xff, 0xff, //0x00001147 je LBB1_177 + 0x80, 0xfa, 0x72, //0x0000114d cmpb $114, %dl + 0x0f, 0x84, 0xbe, 0xff, 0xff, 0xff, //0x00001150 je LBB1_177 + 0x80, 0xfa, 0x75, //0x00001156 cmpb $117, %dl + 0x0f, 0x85, 0x16, 0x05, 0x00, 0x00, //0x00001159 jne LBB1_278 + 0x48, 0x89, 0xf2, //0x0000115f movq %rsi, %rdx + 0x48, 0x29, 0xca, //0x00001162 subq %rcx, %rdx + 0x48, 0x83, 0xfa, 0x04, //0x00001165 cmpq $4, %rdx + 0x0f, 0x8c, 0x06, 0x05, 0x00, 0x00, //0x00001169 jl LBB1_278 + 0x8b, 0x11, //0x0000116f movl (%rcx), %edx + 0x89, 0xd6, //0x00001171 movl %edx, %esi + 0xf7, 0xd6, //0x00001173 notl %esi + 0x8d, 0xba, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001175 leal $-808464432(%rdx), %edi + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x0000117b andl $-2139062144, %esi + 0x85, 0xfe, //0x00001181 testl %edi, %esi + 0x0f, 0x85, 0xec, 0x04, 0x00, 0x00, //0x00001183 jne LBB1_278 + 0x8d, 0xba, 0x19, 0x19, 0x19, 0x19, //0x00001189 leal $421075225(%rdx), %edi + 0x09, 0xd7, //0x0000118f orl %edx, %edi + 0xf7, 0xc7, 0x80, 0x80, 0x80, 0x80, //0x00001191 testl $-2139062144, %edi + 0x0f, 0x85, 0xd8, 0x04, 0x00, 0x00, //0x00001197 jne LBB1_278 + 0x89, 0xd7, //0x0000119d movl %edx, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x0000119f andl $2139062143, %edi + 0xbb, 0xc0, 0xc0, 0xc0, 0xc0, //0x000011a5 movl $-1061109568, %ebx + 0x29, 0xfb, //0x000011aa subl %edi, %ebx + 0x44, 0x8d, 0x87, 0x46, 0x46, 0x46, 0x46, //0x000011ac leal $1179010630(%rdi), %r8d + 0x21, 0xf3, //0x000011b3 andl %esi, %ebx + 0x44, 0x85, 0xc3, //0x000011b5 testl %r8d, %ebx + 0x0f, 0x85, 0xb7, 0x04, 0x00, 0x00, //0x000011b8 jne LBB1_278 + 0xbb, 0xe0, 0xe0, 0xe0, 0xe0, //0x000011be movl $-522133280, %ebx + 0x29, 0xfb, //0x000011c3 subl %edi, %ebx + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x000011c5 addl $960051513, %edi + 0x21, 0xde, //0x000011cb andl %ebx, %esi + 0x85, 0xfe, //0x000011cd testl %edi, %esi + 0x0f, 0x85, 0xa0, 0x04, 0x00, 0x00, //0x000011cf jne LBB1_278 + 0x0f, 0xca, //0x000011d5 bswapl %edx + 0x89, 0xd1, //0x000011d7 movl %edx, %ecx + 0xc1, 0xe9, 0x04, //0x000011d9 shrl $4, %ecx + 0xf7, 0xd1, //0x000011dc notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x000011de andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x000011e4 leal (%rcx,%rcx,8), %ecx + 0x81, 0xe2, 0x0f, 0x0f, 0x0f, 0x0f, //0x000011e7 andl $252645135, %edx + 0x01, 0xca, //0x000011ed addl %ecx, %edx + 0x89, 0xd1, //0x000011ef movl %edx, %ecx + 0xc1, 0xe9, 0x04, //0x000011f1 shrl $4, %ecx + 0x09, 0xd1, //0x000011f4 orl %edx, %ecx + 0x89, 0xca, //0x000011f6 movl %ecx, %edx + 0xc1, 0xea, 0x08, //0x000011f8 shrl $8, %edx + 0x81, 0xe2, 0x00, 0xff, 0x00, 0x00, //0x000011fb andl $65280, %edx + 0x89, 0xce, //0x00001201 movl %ecx, %esi + 0x81, 0xe6, 0x80, 0x00, 0x00, 0x00, //0x00001203 andl $128, %esi + 0x09, 0xd6, //0x00001209 orl %edx, %esi + 0x48, 0x8b, 0x75, 0xd0, //0x0000120b movq $-48(%rbp), %rsi + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x0000120f je LBB1_191 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x00001215 movl $255, %ecx + //0x0000121a LBB1_191 + 0x48, 0x83, 0xc0, 0x06, //0x0000121a addq $6, %rax + 0x49, 0x89, 0xc1, //0x0000121e movq %rax, %r9 + //0x00001221 LBB1_192 + 0x80, 0xf9, 0x0a, //0x00001221 cmpb $10, %cl + 0x0f, 0x84, 0xd6, 0xfe, 0xff, 0xff, //0x00001224 je LBB1_195 + 0x80, 0xf9, 0x0d, //0x0000122a cmpb $13, %cl + 0x0f, 0x84, 0xcd, 0xfe, 0xff, 0xff, //0x0000122d je LBB1_195 + 0x80, 0xf9, 0x3d, //0x00001233 cmpb $61, %cl + 0x0f, 0x85, 0xd9, 0x00, 0x00, 0x00, //0x00001236 jne LBB1_212 + 0x41, 0x83, 0xfe, 0x03, //0x0000123c cmpl $3, %r14d + 0x0f, 0x84, 0xcf, 0x00, 0x00, 0x00, //0x00001240 je LBB1_212 + 0x4c, 0x39, 0x4d, 0xd0, //0x00001246 cmpq %r9, $-48(%rbp) + 0x0f, 0x86, 0x2a, 0x01, 0x00, 0x00, //0x0000124a jbe LBB1_216 + 0x48, 0x8b, 0x55, 0xd0, //0x00001250 movq $-48(%rbp), %rdx + 0xe9, 0x8e, 0x01, 0x00, 0x00, //0x00001254 jmp LBB1_234 + //0x00001259 LBB1_176 + 0x41, 0x89, 0xd4, //0x00001259 movl %edx, %r12d + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x0000125c movl $2, %r11d + 0xe9, 0x6a, 0xf7, 0xff, 0xff, //0x00001262 jmp LBB1_52 + //0x00001267 LBB1_196 + 0x48, 0xff, 0xc1, //0x00001267 incq %rcx + 0x48, 0xff, 0xc2, //0x0000126a incq %rdx + 0x48, 0xff, 0xcf, //0x0000126d decq %rdi + 0x48, 0xff, 0xcb, //0x00001270 decq %rbx + 0x0f, 0x84, 0xfd, 0x00, 0x00, 0x00, //0x00001273 je LBB1_215 + //0x00001279 LBB1_197 + 0x0f, 0xb6, 0x41, 0xff, //0x00001279 movzbl $-1(%rcx), %eax + 0x3c, 0x0a, //0x0000127d cmpb $10, %al + 0x0f, 0x84, 0xe2, 0xff, 0xff, 0xff, //0x0000127f je LBB1_196 + 0x3c, 0x0d, //0x00001285 cmpb $13, %al + 0x0f, 0x84, 0xda, 0xff, 0xff, 0xff, //0x00001287 je LBB1_196 + 0x3c, 0x3d, //0x0000128d cmpb $61, %al + 0x0f, 0x85, 0x75, 0x02, 0x00, 0x00, //0x0000128f jne LBB1_252 + 0x49, 0x89, 0xc9, //0x00001295 movq %rcx, %r9 + 0x41, 0x83, 0xfe, 0x04, //0x00001298 cmpl $4, %r14d + 0x0f, 0x84, 0x73, 0x00, 0x00, 0x00, //0x0000129c je LBB1_212 + 0x48, 0x39, 0x4d, 0xd0, //0x000012a2 cmpq %rcx, $-48(%rbp) + 0x0f, 0x87, 0xaf, 0x00, 0x00, 0x00, //0x000012a6 ja LBB1_229 + 0x49, 0x89, 0xc9, //0x000012ac movq %rcx, %r9 + 0xe9, 0xc6, 0x00, 0x00, 0x00, //0x000012af jmp LBB1_216 + //0x000012b4 LBB1_203 + 0x3c, 0x2f, //0x000012b4 cmpb $47, %al + 0x0f, 0x85, 0x02, 0x00, 0x00, 0x00, //0x000012b6 jne LBB1_205 + 0x89, 0xc1, //0x000012bc movl %eax, %ecx + //0x000012be LBB1_205 + 0x4d, 0x89, 0xc1, //0x000012be movq %r8, %r9 + 0x48, 0x8b, 0x5d, 0xd0, //0x000012c1 movq $-48(%rbp), %rbx + //0x000012c5 LBB1_206 + 0x0f, 0xb6, 0xc1, //0x000012c5 movzbl %cl, %eax + 0x48, 0x8b, 0x55, 0xc0, //0x000012c8 movq $-64(%rbp), %rdx + 0x0f, 0xb6, 0x04, 0x02, //0x000012cc movzbl (%rdx,%rax), %eax + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x000012d0 cmpl $255, %eax + 0x0f, 0x84, 0x69, 0x00, 0x00, 0x00, //0x000012d5 je LBB1_214 + 0x44, 0x89, 0xe2, //0x000012db movl %r12d, %edx + //0x000012de LBB1_208 + 0xc1, 0xe2, 0x06, //0x000012de shll $6, %edx + 0x09, 0xc2, //0x000012e1 orl %eax, %edx + 0x41, 0xbb, 0x04, 0x00, 0x00, 0x00, //0x000012e3 movl $4, %r11d + //0x000012e9 LBB1_209 + 0x41, 0x89, 0xd4, //0x000012e9 movl %edx, %r12d + 0x41, 0xf6, 0xc2, 0x02, //0x000012ec testb $2, %r10b + 0x0f, 0x94, 0xc0, //0x000012f0 sete %al + 0x41, 0x83, 0xfb, 0x01, //0x000012f3 cmpl $1, %r11d + 0x0f, 0x94, 0xc1, //0x000012f7 sete %cl + 0x49, 0x39, 0xd9, //0x000012fa cmpq %rbx, %r9 + 0x0f, 0x82, 0x77, 0x00, 0x00, 0x00, //0x000012fd jb LBB1_216 + 0x41, 0x83, 0xfb, 0x04, //0x00001303 cmpl $4, %r11d + 0x0f, 0x84, 0x6d, 0x00, 0x00, 0x00, //0x00001307 je LBB1_216 + 0x08, 0xc8, //0x0000130d orb %cl, %al + 0x0f, 0x84, 0x65, 0x00, 0x00, 0x00, //0x0000130f je LBB1_216 + //0x00001315 LBB1_212 + 0x49, 0x8d, 0x49, 0x01, //0x00001315 leaq $1(%r9), %rcx + 0x4c, 0x39, 0x4d, 0xd0, //0x00001319 cmpq %r9, $-48(%rbp) + 0x49, 0x0f, 0x45, 0xc9, //0x0000131d cmovneq %r9, %rcx + 0x4c, 0x29, 0xf9, //0x00001321 subq %r15, %rcx + 0x0f, 0x85, 0xb0, 0x36, 0x00, 0x00, //0x00001324 jne LBB1_1140 + 0x4d, 0x89, 0xf9, //0x0000132a movq %r15, %r9 + 0x48, 0x8b, 0x4d, 0xb0, //0x0000132d movq $-80(%rbp), %rcx + 0x48, 0x89, 0x4d, 0xb0, //0x00001331 movq %rcx, $-80(%rbp) + 0x48, 0x39, 0x4d, 0xc8, //0x00001335 cmpq %rcx, $-56(%rbp) + 0x0f, 0x83, 0x26, 0xf3, 0xff, 0xff, //0x00001339 jae LBB1_223 + 0xe9, 0xa2, 0x15, 0x00, 0x00, //0x0000133f jmp LBB1_572 + //0x00001344 LBB1_214 + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00001344 movl $3, %r11d + 0xe9, 0x82, 0xf6, 0xff, 0xff, //0x0000134a jmp LBB1_52 + //0x0000134f LBB1_228 + 0x48, 0xff, 0xc2, //0x0000134f incq %rdx + 0x48, 0xff, 0xcf, //0x00001352 decq %rdi + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00001355 je LBB1_215 + //0x0000135b LBB1_229 + 0x0f, 0xb6, 0x42, 0xff, //0x0000135b movzbl $-1(%rdx), %eax + 0x3c, 0x0a, //0x0000135f cmpb $10, %al + 0x0f, 0x84, 0xe8, 0xff, 0xff, 0xff, //0x00001361 je LBB1_228 + 0x3c, 0x0d, //0x00001367 cmpb $13, %al + 0x0f, 0x84, 0xe0, 0xff, 0xff, 0xff, //0x00001369 je LBB1_228 + 0x3c, 0x3d, //0x0000136f cmpb $61, %al + 0xe9, 0xf9, 0xfb, 0xff, 0xff, //0x00001371 jmp LBB1_145 + //0x00001376 LBB1_215 + 0x4c, 0x8b, 0x4d, 0xd0, //0x00001376 movq $-48(%rbp), %r9 + //0x0000137a LBB1_216 + 0xb0, 0x04, //0x0000137a movb $4, %al + 0x44, 0x28, 0xd8, //0x0000137c subb %r11b, %al + 0x0f, 0xb6, 0xc0, //0x0000137f movzbl %al, %eax + 0x01, 0xc0, //0x00001382 addl %eax, %eax + 0x8d, 0x0c, 0x40, //0x00001384 leal (%rax,%rax,2), %ecx + 0x44, 0x89, 0xe0, //0x00001387 movl %r12d, %eax + 0xd3, 0xe0, //0x0000138a shll %cl, %eax + 0x41, 0x83, 0xfb, 0x02, //0x0000138c cmpl $2, %r11d + 0x48, 0x8b, 0x4d, 0xb0, //0x00001390 movq $-80(%rbp), %rcx + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00001394 je LBB1_221 + 0x41, 0x83, 0xfb, 0x03, //0x0000139a cmpl $3, %r11d + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000139e je LBB1_220 + 0x41, 0x83, 0xfb, 0x04, //0x000013a4 cmpl $4, %r11d + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000013a8 jne LBB1_222 + 0x88, 0x41, 0x02, //0x000013ae movb %al, $2(%rcx) + //0x000013b1 LBB1_220 + 0x88, 0x61, 0x01, //0x000013b1 movb %ah, $1(%rcx) + //0x000013b4 LBB1_221 + 0xc1, 0xe8, 0x10, //0x000013b4 shrl $16, %eax + 0x88, 0x01, //0x000013b7 movb %al, (%rcx) + //0x000013b9 LBB1_222 + 0x44, 0x89, 0xd8, //0x000013b9 movl %r11d, %eax + 0x48, 0x8d, 0x4c, 0x01, 0xff, //0x000013bc leaq $-1(%rcx,%rax), %rcx + 0x48, 0x89, 0x4d, 0xb0, //0x000013c1 movq %rcx, $-80(%rbp) + 0x48, 0x39, 0x4d, 0xc8, //0x000013c5 cmpq %rcx, $-56(%rbp) + 0x0f, 0x83, 0x96, 0xf2, 0xff, 0xff, //0x000013c9 jae LBB1_223 + 0xe9, 0x12, 0x15, 0x00, 0x00, //0x000013cf jmp LBB1_572 + //0x000013d4 LBB1_233 + 0x48, 0x89, 0xc1, //0x000013d4 movq %rax, %rcx + 0x48, 0x8b, 0x55, 0xd0, //0x000013d7 movq $-48(%rbp), %rdx + 0x49, 0x89, 0xc9, //0x000013db movq %rcx, %r9 + 0x48, 0x39, 0xd1, //0x000013de cmpq %rdx, %rcx + 0x0f, 0x83, 0x2e, 0xf9, 0xff, 0xff, //0x000013e1 jae LBB1_143 + //0x000013e7 LBB1_234 + 0x49, 0x8d, 0x41, 0x01, //0x000013e7 leaq $1(%r9), %rax + 0x41, 0x0f, 0xb6, 0x09, //0x000013eb movzbl (%r9), %ecx + 0x80, 0xf9, 0x5c, //0x000013ef cmpb $92, %cl + 0x0f, 0x85, 0xe3, 0x00, 0x00, 0x00, //0x000013f2 jne LBB1_247 + 0x49, 0x8d, 0x49, 0x02, //0x000013f8 leaq $2(%r9), %rcx + 0x48, 0x39, 0xd1, //0x000013fc cmpq %rdx, %rcx + 0x0f, 0x87, 0x7b, 0x02, 0x00, 0x00, //0x000013ff ja LBB1_258 + 0x0f, 0xb6, 0x00, //0x00001405 movzbl (%rax), %eax + 0x3c, 0x6e, //0x00001408 cmpb $110, %al + 0x0f, 0x84, 0xe2, 0x00, 0x00, 0x00, //0x0000140a je LBB1_249 + 0x3c, 0x72, //0x00001410 cmpb $114, %al + 0x0f, 0x84, 0xda, 0x00, 0x00, 0x00, //0x00001412 je LBB1_249 + 0x3c, 0x75, //0x00001418 cmpb $117, %al + 0x0f, 0x85, 0x55, 0x02, 0x00, 0x00, //0x0000141a jne LBB1_278 + 0x48, 0x8b, 0x45, 0xd0, //0x00001420 movq $-48(%rbp), %rax + 0x48, 0x29, 0xc8, //0x00001424 subq %rcx, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00001427 cmpq $4, %rax + 0x0f, 0x8c, 0x44, 0x02, 0x00, 0x00, //0x0000142b jl LBB1_278 + 0x8b, 0x01, //0x00001431 movl (%rcx), %eax + 0x89, 0xc2, //0x00001433 movl %eax, %edx + 0xf7, 0xd2, //0x00001435 notl %edx + 0x8d, 0xb0, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001437 leal $-808464432(%rax), %esi + 0x81, 0xe2, 0x80, 0x80, 0x80, 0x80, //0x0000143d andl $-2139062144, %edx + 0x85, 0xf2, //0x00001443 testl %esi, %edx + 0x0f, 0x85, 0x2a, 0x02, 0x00, 0x00, //0x00001445 jne LBB1_278 + 0x8d, 0xb0, 0x19, 0x19, 0x19, 0x19, //0x0000144b leal $421075225(%rax), %esi + 0x09, 0xc6, //0x00001451 orl %eax, %esi + 0xf7, 0xc6, 0x80, 0x80, 0x80, 0x80, //0x00001453 testl $-2139062144, %esi + 0x0f, 0x85, 0x16, 0x02, 0x00, 0x00, //0x00001459 jne LBB1_278 + 0x89, 0xc6, //0x0000145f movl %eax, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001461 andl $2139062143, %esi + 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001467 movl $-1061109568, %edi + 0x29, 0xf7, //0x0000146c subl %esi, %edi + 0x8d, 0x9e, 0x46, 0x46, 0x46, 0x46, //0x0000146e leal $1179010630(%rsi), %ebx + 0x21, 0xd7, //0x00001474 andl %edx, %edi + 0x85, 0xdf, //0x00001476 testl %ebx, %edi + 0x0f, 0x85, 0xf7, 0x01, 0x00, 0x00, //0x00001478 jne LBB1_278 + 0xbf, 0xe0, 0xe0, 0xe0, 0xe0, //0x0000147e movl $-522133280, %edi + 0x29, 0xf7, //0x00001483 subl %esi, %edi + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x00001485 addl $960051513, %esi + 0x21, 0xfa, //0x0000148b andl %edi, %edx + 0x85, 0xf2, //0x0000148d testl %esi, %edx + 0x0f, 0x85, 0xe0, 0x01, 0x00, 0x00, //0x0000148f jne LBB1_278 + 0x0f, 0xc8, //0x00001495 bswapl %eax + 0x89, 0xc1, //0x00001497 movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00001499 shrl $4, %ecx + 0xf7, 0xd1, //0x0000149c notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x0000149e andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x000014a4 leal (%rcx,%rcx,8), %ecx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x000014a7 andl $252645135, %eax + 0x01, 0xc8, //0x000014ac addl %ecx, %eax + 0x89, 0xc1, //0x000014ae movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x000014b0 shrl $4, %ecx + 0x09, 0xc1, //0x000014b3 orl %eax, %ecx + 0x89, 0xc8, //0x000014b5 movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x000014b7 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x000014ba andl $65280, %eax + 0x89, 0xca, //0x000014bf movl %ecx, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x000014c1 andl $128, %edx + 0x09, 0xc2, //0x000014c7 orl %eax, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x000014c9 je LBB1_246 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x000014cf movl $255, %ecx + //0x000014d4 LBB1_246 + 0x49, 0x83, 0xc1, 0x06, //0x000014d4 addq $6, %r9 + 0x4c, 0x89, 0xc8, //0x000014d8 movq %r9, %rax + //0x000014db LBB1_247 + 0x80, 0xf9, 0x0a, //0x000014db cmpb $10, %cl + 0x0f, 0x84, 0xf0, 0xfe, 0xff, 0xff, //0x000014de je LBB1_233 + 0x80, 0xf9, 0x0d, //0x000014e4 cmpb $13, %cl + 0x0f, 0x84, 0xe7, 0xfe, 0xff, 0xff, //0x000014e7 je LBB1_233 + 0xe9, 0x23, 0x00, 0x00, 0x00, //0x000014ed jmp LBB1_254 + //0x000014f2 LBB1_249 + 0x48, 0x89, 0xc8, //0x000014f2 movq %rcx, %rax + 0x48, 0x8b, 0x55, 0xd0, //0x000014f5 movq $-48(%rbp), %rdx + 0x49, 0x89, 0xc9, //0x000014f9 movq %rcx, %r9 + 0x48, 0x39, 0xd1, //0x000014fc cmpq %rdx, %rcx + 0x0f, 0x82, 0xe2, 0xfe, 0xff, 0xff, //0x000014ff jb LBB1_234 + 0xe9, 0x0b, 0xf8, 0xff, 0xff, //0x00001505 jmp LBB1_143 + //0x0000150a LBB1_252 + 0x48, 0x89, 0xca, //0x0000150a movq %rcx, %rdx + 0x49, 0x89, 0xc9, //0x0000150d movq %rcx, %r9 + 0xe9, 0x00, 0xfe, 0xff, 0xff, //0x00001510 jmp LBB1_212 + //0x00001515 LBB1_254 + 0x80, 0xf9, 0x3d, //0x00001515 cmpb $61, %cl + 0x0f, 0x85, 0x62, 0x01, 0x00, 0x00, //0x00001518 jne LBB1_258 + 0x49, 0x89, 0xc1, //0x0000151e movq %rax, %r9 + 0x41, 0x83, 0xfe, 0x04, //0x00001521 cmpl $4, %r14d + 0x0f, 0x84, 0xea, 0xfd, 0xff, 0xff, //0x00001525 je LBB1_212 + 0x48, 0x39, 0x45, 0xd0, //0x0000152b cmpq %rax, $-48(%rbp) + 0x0f, 0x87, 0x2a, 0x00, 0x00, 0x00, //0x0000152f ja LBB1_261 + 0xe9, 0xdb, 0xf7, 0xff, 0xff, //0x00001535 jmp LBB1_143 + //0x0000153a LBB1_277 + 0x4c, 0x89, 0xc9, //0x0000153a movq %r9, %rcx + 0x48, 0x89, 0xc8, //0x0000153d movq %rcx, %rax + 0x48, 0x3b, 0x4d, 0xd0, //0x00001540 cmpq $-48(%rbp), %rcx + 0x0f, 0x82, 0x15, 0x00, 0x00, 0x00, //0x00001544 jb LBB1_261 + 0xe9, 0x2b, 0xfe, 0xff, 0xff, //0x0000154a jmp LBB1_216 + //0x0000154f LBB1_259 + 0x49, 0x89, 0xc9, //0x0000154f movq %rcx, %r9 + 0x48, 0x89, 0xc8, //0x00001552 movq %rcx, %rax + 0x48, 0x3b, 0x4d, 0xd0, //0x00001555 cmpq $-48(%rbp), %rcx + 0x0f, 0x83, 0x1b, 0xfe, 0xff, 0xff, //0x00001559 jae LBB1_216 + //0x0000155f LBB1_261 + 0x4c, 0x8d, 0x48, 0x01, //0x0000155f leaq $1(%rax), %r9 + 0x0f, 0xb6, 0x08, //0x00001563 movzbl (%rax), %ecx + 0x80, 0xf9, 0x5c, //0x00001566 cmpb $92, %cl + 0x0f, 0x85, 0xec, 0x00, 0x00, 0x00, //0x00001569 jne LBB1_274 + 0x48, 0x8d, 0x48, 0x02, //0x0000156f leaq $2(%rax), %rcx + 0x48, 0x3b, 0x4d, 0xd0, //0x00001573 cmpq $-48(%rbp), %rcx + 0x0f, 0x87, 0x00, 0x01, 0x00, 0x00, //0x00001577 ja LBB1_279 + 0x41, 0x0f, 0xb6, 0x11, //0x0000157d movzbl (%r9), %edx + 0x80, 0xfa, 0x6e, //0x00001581 cmpb $110, %dl + 0x0f, 0x84, 0xc5, 0xff, 0xff, 0xff, //0x00001584 je LBB1_259 + 0x80, 0xfa, 0x72, //0x0000158a cmpb $114, %dl + 0x0f, 0x84, 0xbc, 0xff, 0xff, 0xff, //0x0000158d je LBB1_259 + 0x80, 0xfa, 0x75, //0x00001593 cmpb $117, %dl + 0x0f, 0x85, 0xd9, 0x00, 0x00, 0x00, //0x00001596 jne LBB1_278 + 0x48, 0x8b, 0x55, 0xd0, //0x0000159c movq $-48(%rbp), %rdx + 0x48, 0x29, 0xca, //0x000015a0 subq %rcx, %rdx + 0x48, 0x83, 0xfa, 0x04, //0x000015a3 cmpq $4, %rdx + 0x0f, 0x8c, 0xc8, 0x00, 0x00, 0x00, //0x000015a7 jl LBB1_278 + 0x8b, 0x11, //0x000015ad movl (%rcx), %edx + 0x89, 0xd6, //0x000015af movl %edx, %esi + 0xf7, 0xd6, //0x000015b1 notl %esi + 0x8d, 0xba, 0xd0, 0xcf, 0xcf, 0xcf, //0x000015b3 leal $-808464432(%rdx), %edi + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x000015b9 andl $-2139062144, %esi + 0x85, 0xfe, //0x000015bf testl %edi, %esi + 0x0f, 0x85, 0xae, 0x00, 0x00, 0x00, //0x000015c1 jne LBB1_278 + 0x8d, 0xba, 0x19, 0x19, 0x19, 0x19, //0x000015c7 leal $421075225(%rdx), %edi + 0x09, 0xd7, //0x000015cd orl %edx, %edi + 0xf7, 0xc7, 0x80, 0x80, 0x80, 0x80, //0x000015cf testl $-2139062144, %edi + 0x0f, 0x85, 0x9a, 0x00, 0x00, 0x00, //0x000015d5 jne LBB1_278 + 0x89, 0xd7, //0x000015db movl %edx, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x000015dd andl $2139062143, %edi + 0xbb, 0xc0, 0xc0, 0xc0, 0xc0, //0x000015e3 movl $-1061109568, %ebx + 0x29, 0xfb, //0x000015e8 subl %edi, %ebx + 0x44, 0x8d, 0x87, 0x46, 0x46, 0x46, 0x46, //0x000015ea leal $1179010630(%rdi), %r8d + 0x21, 0xf3, //0x000015f1 andl %esi, %ebx + 0x44, 0x85, 0xc3, //0x000015f3 testl %r8d, %ebx + 0x0f, 0x85, 0x79, 0x00, 0x00, 0x00, //0x000015f6 jne LBB1_278 + 0xbb, 0xe0, 0xe0, 0xe0, 0xe0, //0x000015fc movl $-522133280, %ebx + 0x29, 0xfb, //0x00001601 subl %edi, %ebx + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x00001603 addl $960051513, %edi + 0x21, 0xde, //0x00001609 andl %ebx, %esi + 0x85, 0xfe, //0x0000160b testl %edi, %esi + 0x0f, 0x85, 0x62, 0x00, 0x00, 0x00, //0x0000160d jne LBB1_278 + 0x0f, 0xca, //0x00001613 bswapl %edx + 0x89, 0xd1, //0x00001615 movl %edx, %ecx + 0xc1, 0xe9, 0x04, //0x00001617 shrl $4, %ecx + 0xf7, 0xd1, //0x0000161a notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x0000161c andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00001622 leal (%rcx,%rcx,8), %ecx + 0x81, 0xe2, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001625 andl $252645135, %edx + 0x01, 0xca, //0x0000162b addl %ecx, %edx + 0x89, 0xd1, //0x0000162d movl %edx, %ecx + 0xc1, 0xe9, 0x04, //0x0000162f shrl $4, %ecx + 0x09, 0xd1, //0x00001632 orl %edx, %ecx + 0x89, 0xca, //0x00001634 movl %ecx, %edx + 0xc1, 0xea, 0x08, //0x00001636 shrl $8, %edx + 0x81, 0xe2, 0x00, 0xff, 0x00, 0x00, //0x00001639 andl $65280, %edx + 0x89, 0xce, //0x0000163f movl %ecx, %esi + 0x81, 0xe6, 0x80, 0x00, 0x00, 0x00, //0x00001641 andl $128, %esi + 0x09, 0xd6, //0x00001647 orl %edx, %esi + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00001649 je LBB1_273 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x0000164f movl $255, %ecx + //0x00001654 LBB1_273 + 0x48, 0x83, 0xc0, 0x06, //0x00001654 addq $6, %rax + 0x49, 0x89, 0xc1, //0x00001658 movq %rax, %r9 + //0x0000165b LBB1_274 + 0x80, 0xf9, 0x0a, //0x0000165b cmpb $10, %cl + 0x0f, 0x84, 0xd6, 0xfe, 0xff, 0xff, //0x0000165e je LBB1_277 + 0x80, 0xf9, 0x0d, //0x00001664 cmpb $13, %cl + 0x0f, 0x84, 0xcd, 0xfe, 0xff, 0xff, //0x00001667 je LBB1_277 + 0x80, 0xf9, 0x3d, //0x0000166d cmpb $61, %cl + 0xe9, 0xa0, 0xfc, 0xff, 0xff, //0x00001670 jmp LBB1_212 + //0x00001675 LBB1_278 + 0x49, 0x89, 0xc9, //0x00001675 movq %rcx, %r9 + 0xe9, 0x98, 0xfc, 0xff, 0xff, //0x00001678 jmp LBB1_212 + //0x0000167d LBB1_279 + 0x4c, 0x89, 0xc8, //0x0000167d movq %r9, %rax + //0x00001680 LBB1_258 + 0x49, 0x89, 0xc1, //0x00001680 movq %rax, %r9 + 0xe9, 0x8d, 0xfc, 0xff, 0xff, //0x00001683 jmp LBB1_212 + //0x00001688 LBB1_282 + 0x31, 0xc0, //0x00001688 xorl %eax, %eax + 0xe9, 0x39, 0x33, 0x00, 0x00, //0x0000168a jmp LBB1_1139 + //0x0000168f LBB1_283 + 0x48, 0x8b, 0x45, 0x90, //0x0000168f movq $-112(%rbp), %rax + 0x4c, 0x8d, 0x60, 0xe0, //0x00001693 leaq $-32(%rax), %r12 + 0x48, 0x8b, 0x85, 0x78, 0xff, 0xff, 0xff, //0x00001697 movq $-136(%rbp), %rax + 0x49, 0x39, 0xc4, //0x0000169e cmpq %rax, %r12 + 0x0f, 0x82, 0xad, 0x22, 0x00, 0x00, //0x000016a1 jb LBB1_854 + 0x4c, 0x8d, 0x53, 0xe0, //0x000016a7 leaq $-32(%rbx), %r10 + 0x48, 0x89, 0x45, 0xb0, //0x000016ab movq %rax, $-80(%rbp) + 0x48, 0x8b, 0x45, 0xa8, //0x000016af movq $-88(%rbp), %rax + 0x49, 0x89, 0xc7, //0x000016b3 movq %rax, %r15 + 0x49, 0x39, 0xc2, //0x000016b6 cmpq %rax, %r10 + 0x0f, 0x82, 0xf9, 0xee, 0xff, 0xff, //0x000016b9 jb LBB1_2 + 0xc4, 0xc1, 0x7e, 0x6f, 0x41, 0x20, //0x000016bf vmovdqu $32(%r9), %ymm0 + 0x4c, 0x8b, 0x6d, 0xa8, //0x000016c5 movq $-88(%rbp), %r13 + 0x48, 0x8b, 0x45, 0x88, //0x000016c9 movq $-120(%rbp), %rax + 0x4a, 0x8d, 0x4c, 0x28, 0xfe, //0x000016cd leaq $-2(%rax,%r13), %rcx + 0x48, 0x89, 0x4d, 0xa0, //0x000016d2 movq %rcx, $-96(%rbp) + 0x4a, 0x8d, 0x44, 0x28, 0xfd, //0x000016d6 leaq $-3(%rax,%r13), %rax + 0x48, 0x89, 0x45, 0x80, //0x000016db movq %rax, $-128(%rbp) + 0xc5, 0xfd, 0x6f, 0x0d, 0x79, 0xed, 0xff, 0xff, //0x000016df vmovdqa $-4743(%rip), %ymm1 /* LCPI1_0+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x15, 0x91, 0xed, 0xff, 0xff, //0x000016e7 vmovdqa $-4719(%rip), %ymm2 /* LCPI1_1+0(%rip) */ + 0xc5, 0xe1, 0xef, 0xdb, //0x000016ef vpxor %xmm3, %xmm3, %xmm3 + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x000016f3 movabsq $-4294967296, %r8 + 0xc5, 0x7d, 0x6f, 0x2d, 0x9b, 0xed, 0xff, 0xff, //0x000016fd vmovdqa $-4709(%rip), %ymm13 /* LCPI1_2+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x2d, 0xb3, 0xed, 0xff, 0xff, //0x00001705 vmovdqa $-4685(%rip), %ymm5 /* LCPI1_3+0(%rip) */ + 0xc5, 0xfd, 0x6f, 0x35, 0xcb, 0xed, 0xff, 0xff, //0x0000170d vmovdqa $-4661(%rip), %ymm6 /* LCPI1_4+0(%rip) */ + 0xc5, 0xf9, 0x6f, 0x3d, 0x03, 0xee, 0xff, 0xff, //0x00001715 vmovdqa $-4605(%rip), %xmm7 /* LCPI1_5+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0x05, 0xdb, 0xed, 0xff, 0xff, //0x0000171d vmovdqa $-4645(%rip), %ymm8 /* LCPI1_6+0(%rip) */ + 0x48, 0x8b, 0x85, 0x78, 0xff, 0xff, 0xff, //0x00001725 movq $-136(%rbp), %rax + 0x48, 0x89, 0x45, 0xb0, //0x0000172c movq %rax, $-80(%rbp) + 0x4d, 0x89, 0xef, //0x00001730 movq %r13, %r15 + 0xe9, 0x77, 0x00, 0x00, 0x00, //0x00001733 jmp LBB1_286 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001738 .p2align 4, 0x90 + //0x00001740 LBB1_295 + 0xc4, 0x41, 0x35, 0x74, 0x59, 0x40, //0x00001740 vpcmpeqb $64(%r9), %ymm9, %ymm11 + 0xc4, 0x41, 0x7e, 0x6f, 0x21, //0x00001746 vmovdqu (%r9), %ymm12 + 0xc4, 0x42, 0x1d, 0x00, 0xd2, //0x0000174b vpshufb %ymm10, %ymm12, %ymm10 + 0xc4, 0x43, 0x2d, 0x4c, 0x51, 0x60, 0xb0, //0x00001750 vpblendvb %ymm11, $96(%r9), %ymm10, %ymm10 + 0xc4, 0x41, 0x2d, 0xfc, 0xc9, //0x00001757 vpaddb %ymm9, %ymm10, %ymm9 + 0xc4, 0x41, 0x35, 0xdb, 0xcd, //0x0000175c vpand %ymm13, %ymm9, %ymm9 + 0xc4, 0x62, 0x35, 0x04, 0xcd, //0x00001761 vpmaddubsw %ymm5, %ymm9, %ymm9 + 0xc5, 0x35, 0xf5, 0xce, //0x00001766 vpmaddwd %ymm6, %ymm9, %ymm9 + 0xc4, 0x63, 0x7d, 0x39, 0xcc, 0x01, //0x0000176a vextracti128 $1, %ymm9, %xmm4 + 0xc4, 0xe2, 0x59, 0x00, 0xe7, //0x00001770 vpshufb %xmm7, %xmm4, %xmm4 + 0xc4, 0x42, 0x35, 0x00, 0xc8, //0x00001775 vpshufb %ymm8, %ymm9, %ymm9 + 0xc4, 0xe3, 0x35, 0x02, 0xe4, 0x08, //0x0000177a vpblendd $8, %ymm4, %ymm9, %ymm4 + 0xc4, 0xe3, 0x5d, 0x02, 0xe3, 0xc0, //0x00001780 vpblendd $192, %ymm3, %ymm4, %ymm4 + 0x48, 0x8b, 0x4d, 0xb0, //0x00001786 movq $-80(%rbp), %rcx + 0xc5, 0xfe, 0x7f, 0x21, //0x0000178a vmovdqu %ymm4, (%rcx) + 0x49, 0x83, 0xc7, 0x20, //0x0000178e addq $32, %r15 + 0x48, 0x83, 0xc1, 0x18, //0x00001792 addq $24, %rcx + 0x48, 0x89, 0x4d, 0xb0, //0x00001796 movq %rcx, $-80(%rbp) + 0x49, 0x39, 0xcc, //0x0000179a cmpq %rcx, %r12 + 0x0f, 0x82, 0x15, 0xee, 0xff, 0xff, //0x0000179d jb LBB1_2 + //0x000017a3 LBB1_506 + 0x4d, 0x89, 0xfd, //0x000017a3 movq %r15, %r13 + 0x4d, 0x39, 0xfa, //0x000017a6 cmpq %r15, %r10 + 0x0f, 0x82, 0x09, 0xee, 0xff, 0xff, //0x000017a9 jb LBB1_2 + //0x000017af LBB1_286 + 0xc4, 0x41, 0x7e, 0x6f, 0x4d, 0x00, //0x000017af vmovdqu (%r13), %ymm9 + 0xc4, 0xc1, 0x2d, 0x72, 0xd1, 0x04, //0x000017b5 vpsrld $4, %ymm9, %ymm10 + 0xc5, 0x2d, 0xdb, 0xd1, //0x000017bb vpand %ymm1, %ymm10, %ymm10 + 0xc5, 0x35, 0xdb, 0xd9, //0x000017bf vpand %ymm1, %ymm9, %ymm11 + 0xc4, 0x42, 0x7d, 0x00, 0xdb, //0x000017c3 vpshufb %ymm11, %ymm0, %ymm11 + 0xc4, 0x42, 0x6d, 0x00, 0xe2, //0x000017c8 vpshufb %ymm10, %ymm2, %ymm12 + 0xc4, 0x41, 0x1d, 0xdb, 0xdb, //0x000017cd vpand %ymm11, %ymm12, %ymm11 + 0xc5, 0x25, 0x74, 0xdb, //0x000017d2 vpcmpeqb %ymm3, %ymm11, %ymm11 + 0xc4, 0xc1, 0x7d, 0xd7, 0xc3, //0x000017d6 vpmovmskb %ymm11, %eax + 0x4c, 0x09, 0xc0, //0x000017db orq %r8, %rax + 0x48, 0x0f, 0xbc, 0xc0, //0x000017de bsfq %rax, %rax + 0x83, 0xf8, 0x1f, //0x000017e2 cmpl $31, %eax + 0x0f, 0x87, 0x55, 0xff, 0xff, 0xff, //0x000017e5 ja LBB1_295 + 0x4c, 0x39, 0xfb, //0x000017eb cmpq %r15, %rbx + 0x0f, 0x86, 0x3c, 0x02, 0x00, 0x00, //0x000017ee jbe LBB1_320 + 0xf6, 0x45, 0xbc, 0x08, //0x000017f4 testb $8, $-68(%rbp) + 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x000017f8 je LBB1_291 + 0x4c, 0x89, 0xf8, //0x000017fe movq %r15, %rax + 0xe9, 0xd6, 0x00, 0x00, 0x00, //0x00001801 jmp LBB1_303 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001806 .p2align 4, 0x90 + //0x00001810 LBB1_290 + 0x49, 0xff, 0xc7, //0x00001810 incq %r15 + 0x49, 0x39, 0xdf, //0x00001813 cmpq %rbx, %r15 + 0x0f, 0x83, 0x00, 0x02, 0x00, 0x00, //0x00001816 jae LBB1_318 + //0x0000181c LBB1_291 + 0x45, 0x0f, 0xb6, 0x37, //0x0000181c movzbl (%r15), %r14d + 0x49, 0x83, 0xfe, 0x0d, //0x00001820 cmpq $13, %r14 + 0x0f, 0x84, 0xe6, 0xff, 0xff, 0xff, //0x00001824 je LBB1_290 + 0x41, 0x80, 0xfe, 0x0a, //0x0000182a cmpb $10, %r14b + 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x0000182e je LBB1_290 + 0x48, 0x8b, 0x45, 0xc0, //0x00001834 movq $-64(%rbp), %rax + 0x42, 0x0f, 0xb6, 0x04, 0x30, //0x00001838 movzbl (%rax,%r14), %eax + 0x49, 0xff, 0xc7, //0x0000183d incq %r15 + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00001840 cmpl $255, %eax + 0x0f, 0x84, 0xb0, 0x02, 0x00, 0x00, //0x00001845 je LBB1_333 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x0000184b movl $1, %r11d + 0x49, 0x39, 0xdf, //0x00001851 cmpq %rbx, %r15 + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001854 jb LBB1_297 + 0xe9, 0x4e, 0x0c, 0x00, 0x00, //0x0000185a jmp LBB1_492 + 0x90, //0x0000185f .p2align 4, 0x90 + //0x00001860 LBB1_296 + 0x49, 0xff, 0xc7, //0x00001860 incq %r15 + 0x49, 0x39, 0xdf, //0x00001863 cmpq %rbx, %r15 + 0x0f, 0x83, 0x90, 0x04, 0x00, 0x00, //0x00001866 jae LBB1_364 + //0x0000186c LBB1_297 + 0x45, 0x0f, 0xb6, 0x37, //0x0000186c movzbl (%r15), %r14d + 0x49, 0x83, 0xfe, 0x0d, //0x00001870 cmpq $13, %r14 + 0x0f, 0x84, 0xe6, 0xff, 0xff, 0xff, //0x00001874 je LBB1_296 + 0x41, 0x80, 0xfe, 0x0a, //0x0000187a cmpb $10, %r14b + 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x0000187e je LBB1_296 + 0x89, 0x45, 0xc8, //0x00001884 movl %eax, $-56(%rbp) + 0x48, 0x8b, 0x45, 0xc0, //0x00001887 movq $-64(%rbp), %rax + 0x42, 0x0f, 0xb6, 0x04, 0x30, //0x0000188b movzbl (%rax,%r14), %eax + 0x49, 0xff, 0xc7, //0x00001890 incq %r15 + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00001893 cmpl $255, %eax + 0x0f, 0x84, 0xe0, 0x06, 0x00, 0x00, //0x00001898 je LBB1_422 + 0x8b, 0x4d, 0xc8, //0x0000189e movl $-56(%rbp), %ecx + 0xc1, 0xe1, 0x06, //0x000018a1 shll $6, %ecx + 0x09, 0xc1, //0x000018a4 orl %eax, %ecx + 0x89, 0xc8, //0x000018a6 movl %ecx, %eax + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x000018a8 movl $2, %r11d + 0x49, 0x39, 0xdf, //0x000018ae cmpq %rbx, %r15 + 0x0f, 0x82, 0xab, 0x01, 0x00, 0x00, //0x000018b1 jb LBB1_322 + 0xe9, 0xf1, 0x0b, 0x00, 0x00, //0x000018b7 jmp LBB1_492 + //0x000018bc LBB1_301 + 0x80, 0xfa, 0x6e, //0x000018bc cmpb $110, %dl + 0x0f, 0x85, 0xf5, 0x01, 0x00, 0x00, //0x000018bf jne LBB1_327 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000018c5 .p2align 4, 0x90 + //0x000018d0 LBB1_302 + 0x4c, 0x89, 0xf8, //0x000018d0 movq %r15, %rax + 0x49, 0x39, 0xdf, //0x000018d3 cmpq %rbx, %r15 + 0x0f, 0x83, 0x40, 0x01, 0x00, 0x00, //0x000018d6 jae LBB1_318 + //0x000018dc LBB1_303 + 0x48, 0x8d, 0x50, 0x01, //0x000018dc leaq $1(%rax), %rdx + 0x44, 0x0f, 0xb6, 0x30, //0x000018e0 movzbl (%rax), %r14d + 0x41, 0x80, 0xfe, 0x5c, //0x000018e4 cmpb $92, %r14b + 0x0f, 0x85, 0x12, 0x01, 0x00, 0x00, //0x000018e8 jne LBB1_316 + 0x4c, 0x8d, 0x78, 0x02, //0x000018ee leaq $2(%rax), %r15 + 0x41, 0xb6, 0xff, //0x000018f2 movb $-1, %r14b + 0x49, 0x39, 0xdf, //0x000018f5 cmpq %rbx, %r15 + 0x0f, 0x87, 0xb4, 0x01, 0x00, 0x00, //0x000018f8 ja LBB1_326 + 0x0f, 0xb6, 0x12, //0x000018fe movzbl (%rdx), %edx + 0x80, 0xfa, 0x71, //0x00001901 cmpb $113, %dl + 0x0f, 0x8e, 0xb2, 0xff, 0xff, 0xff, //0x00001904 jle LBB1_301 + 0x80, 0xfa, 0x72, //0x0000190a cmpb $114, %dl + 0x0f, 0x84, 0xbd, 0xff, 0xff, 0xff, //0x0000190d je LBB1_302 + 0x80, 0xfa, 0x75, //0x00001913 cmpb $117, %dl + 0x0f, 0x85, 0xaa, 0x01, 0x00, 0x00, //0x00001916 jne LBB1_329 + 0x48, 0x8b, 0x4d, 0xd0, //0x0000191c movq $-48(%rbp), %rcx + 0x4c, 0x29, 0xf9, //0x00001920 subq %r15, %rcx + 0x48, 0x83, 0xf9, 0x04, //0x00001923 cmpq $4, %rcx + 0x0f, 0x8c, 0x99, 0x01, 0x00, 0x00, //0x00001927 jl LBB1_329 + 0x41, 0x8b, 0x1f, //0x0000192d movl (%r15), %ebx + 0x89, 0xdf, //0x00001930 movl %ebx, %edi + 0xf7, 0xd7, //0x00001932 notl %edi + 0x8d, 0x8b, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001934 leal $-808464432(%rbx), %ecx + 0x81, 0xe7, 0x80, 0x80, 0x80, 0x80, //0x0000193a andl $-2139062144, %edi + 0x85, 0xcf, //0x00001940 testl %ecx, %edi + 0x0f, 0x85, 0x7e, 0x01, 0x00, 0x00, //0x00001942 jne LBB1_329 + 0x8d, 0x8b, 0x19, 0x19, 0x19, 0x19, //0x00001948 leal $421075225(%rbx), %ecx + 0x09, 0xd9, //0x0000194e orl %ebx, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x00001950 testl $-2139062144, %ecx + 0x0f, 0x85, 0x6a, 0x01, 0x00, 0x00, //0x00001956 jne LBB1_329 + 0x89, 0xda, //0x0000195c movl %ebx, %edx + 0x81, 0xe2, 0x7f, 0x7f, 0x7f, 0x7f, //0x0000195e andl $2139062143, %edx + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001964 movl $-1061109568, %ecx + 0x29, 0xd1, //0x00001969 subl %edx, %ecx + 0x8d, 0xb2, 0x46, 0x46, 0x46, 0x46, //0x0000196b leal $1179010630(%rdx), %esi + 0x21, 0xf9, //0x00001971 andl %edi, %ecx + 0x85, 0xf1, //0x00001973 testl %esi, %ecx + 0x0f, 0x85, 0x4b, 0x01, 0x00, 0x00, //0x00001975 jne LBB1_329 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x0000197b movl $-522133280, %ecx + 0x29, 0xd1, //0x00001980 subl %edx, %ecx + 0x81, 0xc2, 0x39, 0x39, 0x39, 0x39, //0x00001982 addl $960051513, %edx + 0x21, 0xcf, //0x00001988 andl %ecx, %edi + 0x85, 0xd7, //0x0000198a testl %edx, %edi + 0x0f, 0x85, 0x34, 0x01, 0x00, 0x00, //0x0000198c jne LBB1_329 + 0x0f, 0xcb, //0x00001992 bswapl %ebx + 0x89, 0xd9, //0x00001994 movl %ebx, %ecx + 0xc1, 0xe9, 0x04, //0x00001996 shrl $4, %ecx + 0xf7, 0xd1, //0x00001999 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x0000199b andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x000019a1 leal (%rcx,%rcx,8), %ecx + 0x81, 0xe3, 0x0f, 0x0f, 0x0f, 0x0f, //0x000019a4 andl $252645135, %ebx + 0x01, 0xcb, //0x000019aa addl %ecx, %ebx + 0x41, 0x89, 0xde, //0x000019ac movl %ebx, %r14d + 0x41, 0xc1, 0xee, 0x04, //0x000019af shrl $4, %r14d + 0x41, 0x09, 0xde, //0x000019b3 orl %ebx, %r14d + 0x44, 0x89, 0xf1, //0x000019b6 movl %r14d, %ecx + 0xc1, 0xe9, 0x08, //0x000019b9 shrl $8, %ecx + 0x81, 0xe1, 0x00, 0xff, 0x00, 0x00, //0x000019bc andl $65280, %ecx + 0x44, 0x89, 0xf2, //0x000019c2 movl %r14d, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x000019c5 andl $128, %edx + 0x09, 0xca, //0x000019cb orl %ecx, %edx + 0x0f, 0x84, 0x06, 0x00, 0x00, 0x00, //0x000019cd je LBB1_315 + 0x41, 0xbe, 0xff, 0x00, 0x00, 0x00, //0x000019d3 movl $255, %r14d + //0x000019d9 LBB1_315 + 0x48, 0x83, 0xc0, 0x06, //0x000019d9 addq $6, %rax + 0x49, 0x89, 0xc7, //0x000019dd movq %rax, %r15 + 0x48, 0x8b, 0x5d, 0xd0, //0x000019e0 movq $-48(%rbp), %rbx + 0x41, 0x80, 0xfe, 0x0d, //0x000019e4 cmpb $13, %r14b + 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x000019e8 jne LBB1_317 + 0xe9, 0xdd, 0xfe, 0xff, 0xff, //0x000019ee jmp LBB1_302 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000019f3 .p2align 4, 0x90 + //0x00001a00 LBB1_316 + 0x49, 0x89, 0xd7, //0x00001a00 movq %rdx, %r15 + 0x41, 0x80, 0xfe, 0x0d, //0x00001a03 cmpb $13, %r14b + 0x0f, 0x84, 0xc3, 0xfe, 0xff, 0xff, //0x00001a07 je LBB1_302 + //0x00001a0d LBB1_317 + 0x41, 0x80, 0xfe, 0x0a, //0x00001a0d cmpb $10, %r14b + 0x0f, 0x84, 0xb9, 0xfe, 0xff, 0xff, //0x00001a11 je LBB1_302 + 0xe9, 0xae, 0x00, 0x00, 0x00, //0x00001a17 jmp LBB1_330 + //0x00001a1c LBB1_318 + 0x31, 0xc0, //0x00001a1c xorl %eax, %eax + 0x45, 0x31, 0xdb, //0x00001a1e xorl %r11d, %r11d + //0x00001a21 LBB1_319 + 0x45, 0x85, 0xdb, //0x00001a21 testl %r11d, %r11d + 0x0f, 0x85, 0x83, 0x0a, 0x00, 0x00, //0x00001a24 jne LBB1_492 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001a2a .p2align 4, 0x90 + //0x00001a30 LBB1_320 + 0x48, 0x8b, 0x4d, 0xb0, //0x00001a30 movq $-80(%rbp), %rcx + 0x48, 0x89, 0x4d, 0xb0, //0x00001a34 movq %rcx, $-80(%rbp) + 0x49, 0x39, 0xcc, //0x00001a38 cmpq %rcx, %r12 + 0x0f, 0x83, 0x62, 0xfd, 0xff, 0xff, //0x00001a3b jae LBB1_506 + 0xe9, 0x72, 0xeb, 0xff, 0xff, //0x00001a41 jmp LBB1_2 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001a46 .p2align 4, 0x90 + //0x00001a50 LBB1_321 + 0x49, 0xff, 0xc7, //0x00001a50 incq %r15 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00001a53 movl $2, %r11d + 0x49, 0x39, 0xdf, //0x00001a59 cmpq %rbx, %r15 + 0x0f, 0x83, 0xbf, 0xff, 0xff, 0xff, //0x00001a5c jae LBB1_319 + //0x00001a62 LBB1_322 + 0x45, 0x0f, 0xb6, 0x37, //0x00001a62 movzbl (%r15), %r14d + 0x49, 0x83, 0xfe, 0x0d, //0x00001a66 cmpq $13, %r14 + 0x0f, 0x84, 0xe0, 0xff, 0xff, 0xff, //0x00001a6a je LBB1_321 + 0x41, 0x80, 0xfe, 0x0a, //0x00001a70 cmpb $10, %r14b + 0x0f, 0x84, 0xd6, 0xff, 0xff, 0xff, //0x00001a74 je LBB1_321 + 0x89, 0x45, 0xc8, //0x00001a7a movl %eax, $-56(%rbp) + 0x48, 0x8b, 0x45, 0xc0, //0x00001a7d movq $-64(%rbp), %rax + 0x42, 0x0f, 0xb6, 0x04, 0x30, //0x00001a81 movzbl (%rax,%r14), %eax + 0x49, 0xff, 0xc7, //0x00001a86 incq %r15 + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00001a89 cmpl $255, %eax + 0x0f, 0x84, 0x67, 0x09, 0x00, 0x00, //0x00001a8e je LBB1_458 + 0x8b, 0x4d, 0xc8, //0x00001a94 movl $-56(%rbp), %ecx + 0xc1, 0xe1, 0x06, //0x00001a97 shll $6, %ecx + 0x09, 0xc1, //0x00001a9a orl %eax, %ecx + 0x89, 0xc8, //0x00001a9c movl %ecx, %eax + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00001a9e movl $3, %r11d + 0x49, 0x39, 0xdf, //0x00001aa4 cmpq %rbx, %r15 + 0x0f, 0x82, 0xec, 0x03, 0x00, 0x00, //0x00001aa7 jb LBB1_387 + 0xe9, 0xfb, 0x09, 0x00, 0x00, //0x00001aad jmp LBB1_492 + //0x00001ab2 LBB1_326 + 0x49, 0x89, 0xd7, //0x00001ab2 movq %rdx, %r15 + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00001ab5 jmp LBB1_330 + //0x00001aba LBB1_327 + 0x80, 0xfa, 0x2f, //0x00001aba cmpb $47, %dl + 0x0f, 0x85, 0x03, 0x00, 0x00, 0x00, //0x00001abd jne LBB1_329 + 0x41, 0x89, 0xd6, //0x00001ac3 movl %edx, %r14d + //0x00001ac6 LBB1_329 + 0x48, 0x8b, 0x5d, 0xd0, //0x00001ac6 movq $-48(%rbp), %rbx + //0x00001aca LBB1_330 + 0x41, 0x0f, 0xb6, 0xc6, //0x00001aca movzbl %r14b, %eax + 0x48, 0x8b, 0x4d, 0xc0, //0x00001ace movq $-64(%rbp), %rcx + 0x0f, 0xb6, 0x04, 0x01, //0x00001ad2 movzbl (%rcx,%rax), %eax + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00001ad6 cmpl $255, %eax + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00001adb je LBB1_333 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00001ae1 movl $1, %r11d + 0x49, 0x39, 0xdf, //0x00001ae7 cmpq %rbx, %r15 + 0x0f, 0x83, 0xbd, 0x09, 0x00, 0x00, //0x00001aea jae LBB1_492 + 0x89, 0x45, 0xc8, //0x00001af0 movl %eax, $-56(%rbp) + 0x4c, 0x89, 0xf8, //0x00001af3 movq %r15, %rax + 0xe9, 0xd4, 0x00, 0x00, 0x00, //0x00001af6 jmp LBB1_349 + //0x00001afb LBB1_333 + 0xc7, 0x45, 0xc8, 0x00, 0x00, 0x00, 0x00, //0x00001afb movl $0, $-56(%rbp) + 0x45, 0x31, 0xdb, //0x00001b02 xorl %r11d, %r11d + //0x00001b05 LBB1_334 + 0xf6, 0x45, 0xbc, 0x02, //0x00001b05 testb $2, $-68(%rbp) + 0x0f, 0x85, 0xca, 0x09, 0x00, 0x00, //0x00001b09 jne LBB1_495 + 0x41, 0x83, 0xfb, 0x02, //0x00001b0f cmpl $2, %r11d + 0x0f, 0x82, 0xc0, 0x09, 0x00, 0x00, //0x00001b13 jb LBB1_495 + 0x41, 0x80, 0xfe, 0x3d, //0x00001b19 cmpb $61, %r14b + 0x0f, 0x85, 0xb6, 0x09, 0x00, 0x00, //0x00001b1d jne LBB1_495 + 0xbe, 0x05, 0x00, 0x00, 0x00, //0x00001b23 movl $5, %esi + 0x44, 0x29, 0xde, //0x00001b28 subl %r11d, %esi + 0xf6, 0x45, 0xbc, 0x08, //0x00001b2b testb $8, $-68(%rbp) + 0x0f, 0x85, 0xd2, 0x01, 0x00, 0x00, //0x00001b2f jne LBB1_365 + 0x4c, 0x39, 0x7d, 0xd0, //0x00001b35 cmpq %r15, $-48(%rbp) + 0x0f, 0x86, 0x74, 0x0b, 0x00, 0x00, //0x00001b39 jbe LBB1_499 + 0x49, 0x8d, 0x57, 0x03, //0x00001b3f leaq $3(%r15), %rdx + 0x48, 0x8b, 0x45, 0xa0, //0x00001b43 movq $-96(%rbp), %rax + 0x4c, 0x29, 0xf8, //0x00001b47 subq %r15, %rax + 0x49, 0x8d, 0x5f, 0x04, //0x00001b4a leaq $4(%r15), %rbx + 0x48, 0x8b, 0x7d, 0x80, //0x00001b4e movq $-128(%rbp), %rdi + 0x4c, 0x29, 0xff, //0x00001b52 subq %r15, %rdi + 0xe9, 0x1f, 0x00, 0x00, 0x00, //0x00001b55 jmp LBB1_341 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001b5a .p2align 4, 0x90 + //0x00001b60 LBB1_340 + 0x49, 0xff, 0xc7, //0x00001b60 incq %r15 + 0x48, 0xff, 0xc2, //0x00001b63 incq %rdx + 0x48, 0xff, 0xc8, //0x00001b66 decq %rax + 0x48, 0xff, 0xc3, //0x00001b69 incq %rbx + 0x48, 0xff, 0xcf, //0x00001b6c decq %rdi + 0x4c, 0x39, 0x7d, 0xd0, //0x00001b6f cmpq %r15, $-48(%rbp) + 0x0f, 0x84, 0x51, 0x05, 0x00, 0x00, //0x00001b73 je LBB1_498 + //0x00001b79 LBB1_341 + 0x41, 0x0f, 0xb6, 0x0f, //0x00001b79 movzbl (%r15), %ecx + 0x80, 0xf9, 0x0a, //0x00001b7d cmpb $10, %cl + 0x0f, 0x84, 0xda, 0xff, 0xff, 0xff, //0x00001b80 je LBB1_340 + 0x80, 0xf9, 0x0d, //0x00001b86 cmpb $13, %cl + 0x0f, 0x84, 0xd1, 0xff, 0xff, 0xff, //0x00001b89 je LBB1_340 + 0x80, 0xf9, 0x3d, //0x00001b8f cmpb $61, %cl + 0x0f, 0x85, 0x43, 0x05, 0x00, 0x00, //0x00001b92 jne LBB1_426 + 0x49, 0xff, 0xc7, //0x00001b98 incq %r15 + 0x83, 0xfe, 0x02, //0x00001b9b cmpl $2, %esi + 0x0f, 0x84, 0x35, 0x09, 0x00, 0x00, //0x00001b9e je LBB1_495 + 0x4c, 0x39, 0x7d, 0xd0, //0x00001ba4 cmpq %r15, $-48(%rbp) + 0x0f, 0x87, 0x41, 0x03, 0x00, 0x00, //0x00001ba8 ja LBB1_392 + 0xe9, 0x00, 0x0b, 0x00, 0x00, //0x00001bae jmp LBB1_499 + //0x00001bb3 LBB1_346 + 0x80, 0xfb, 0x6e, //0x00001bb3 cmpb $110, %bl + 0x0f, 0x85, 0x6d, 0x03, 0x00, 0x00, //0x00001bb6 jne LBB1_398 + //0x00001bbc LBB1_347 + 0x49, 0x89, 0xd7, //0x00001bbc movq %rdx, %r15 + 0x48, 0x8b, 0x5d, 0xd0, //0x00001bbf movq $-48(%rbp), %rbx + //0x00001bc3 LBB1_348 + 0x4c, 0x89, 0xf8, //0x00001bc3 movq %r15, %rax + 0x49, 0x39, 0xdf, //0x00001bc6 cmpq %rbx, %r15 + 0x0f, 0x83, 0xaa, 0x02, 0x00, 0x00, //0x00001bc9 jae LBB1_385 + //0x00001bcf LBB1_349 + 0x4c, 0x8d, 0x78, 0x01, //0x00001bcf leaq $1(%rax), %r15 + 0x44, 0x0f, 0xb6, 0x30, //0x00001bd3 movzbl (%rax), %r14d + 0x41, 0x80, 0xfe, 0x5c, //0x00001bd7 cmpb $92, %r14b + 0x0f, 0x85, 0x02, 0x01, 0x00, 0x00, //0x00001bdb jne LBB1_362 + 0x48, 0x8d, 0x50, 0x02, //0x00001be1 leaq $2(%rax), %rdx + 0x41, 0xb6, 0xff, //0x00001be5 movb $-1, %r14b + 0x48, 0x39, 0xda, //0x00001be8 cmpq %rbx, %rdx + 0x0f, 0x87, 0x55, 0x03, 0x00, 0x00, //0x00001beb ja LBB1_401 + 0x41, 0x0f, 0xb6, 0x1f, //0x00001bf1 movzbl (%r15), %ebx + 0x80, 0xfb, 0x71, //0x00001bf5 cmpb $113, %bl + 0x0f, 0x8e, 0xb5, 0xff, 0xff, 0xff, //0x00001bf8 jle LBB1_346 + 0x80, 0xfb, 0x72, //0x00001bfe cmpb $114, %bl + 0x0f, 0x84, 0xb5, 0xff, 0xff, 0xff, //0x00001c01 je LBB1_347 + 0x80, 0xfb, 0x75, //0x00001c07 cmpb $117, %bl + 0x0f, 0x85, 0x25, 0x03, 0x00, 0x00, //0x00001c0a jne LBB1_400 + 0x48, 0x8b, 0x4d, 0xd0, //0x00001c10 movq $-48(%rbp), %rcx + 0x48, 0x29, 0xd1, //0x00001c14 subq %rdx, %rcx + 0x48, 0x83, 0xf9, 0x04, //0x00001c17 cmpq $4, %rcx + 0x0f, 0x8c, 0x14, 0x03, 0x00, 0x00, //0x00001c1b jl LBB1_400 + 0x8b, 0x32, //0x00001c21 movl (%rdx), %esi + 0x89, 0xf3, //0x00001c23 movl %esi, %ebx + 0xf7, 0xd3, //0x00001c25 notl %ebx + 0x8d, 0x8e, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001c27 leal $-808464432(%rsi), %ecx + 0x81, 0xe3, 0x80, 0x80, 0x80, 0x80, //0x00001c2d andl $-2139062144, %ebx + 0x85, 0xcb, //0x00001c33 testl %ecx, %ebx + 0x0f, 0x85, 0xfa, 0x02, 0x00, 0x00, //0x00001c35 jne LBB1_400 + 0x8d, 0x8e, 0x19, 0x19, 0x19, 0x19, //0x00001c3b leal $421075225(%rsi), %ecx + 0x09, 0xf1, //0x00001c41 orl %esi, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x00001c43 testl $-2139062144, %ecx + 0x0f, 0x85, 0xe6, 0x02, 0x00, 0x00, //0x00001c49 jne LBB1_400 + 0x89, 0xf7, //0x00001c4f movl %esi, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001c51 andl $2139062143, %edi + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001c57 movl $-1061109568, %ecx + 0x29, 0xf9, //0x00001c5c subl %edi, %ecx + 0x44, 0x8d, 0x87, 0x46, 0x46, 0x46, 0x46, //0x00001c5e leal $1179010630(%rdi), %r8d + 0x21, 0xd9, //0x00001c65 andl %ebx, %ecx + 0x44, 0x85, 0xc1, //0x00001c67 testl %r8d, %ecx + 0x0f, 0x85, 0xc5, 0x02, 0x00, 0x00, //0x00001c6a jne LBB1_400 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001c70 movl $-522133280, %ecx + 0x29, 0xf9, //0x00001c75 subl %edi, %ecx + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x00001c77 addl $960051513, %edi + 0x21, 0xcb, //0x00001c7d andl %ecx, %ebx + 0x85, 0xfb, //0x00001c7f testl %edi, %ebx + 0x0f, 0x85, 0xae, 0x02, 0x00, 0x00, //0x00001c81 jne LBB1_400 + 0x0f, 0xce, //0x00001c87 bswapl %esi + 0x89, 0xf1, //0x00001c89 movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001c8b shrl $4, %ecx + 0xf7, 0xd1, //0x00001c8e notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00001c90 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00001c96 leal (%rcx,%rcx,8), %ecx + 0x81, 0xe6, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001c99 andl $252645135, %esi + 0x01, 0xce, //0x00001c9f addl %ecx, %esi + 0x41, 0x89, 0xf6, //0x00001ca1 movl %esi, %r14d + 0x41, 0xc1, 0xee, 0x04, //0x00001ca4 shrl $4, %r14d + 0x41, 0x09, 0xf6, //0x00001ca8 orl %esi, %r14d + 0x44, 0x89, 0xf1, //0x00001cab movl %r14d, %ecx + 0xc1, 0xe9, 0x08, //0x00001cae shrl $8, %ecx + 0x81, 0xe1, 0x00, 0xff, 0x00, 0x00, //0x00001cb1 andl $65280, %ecx + 0x44, 0x89, 0xf2, //0x00001cb7 movl %r14d, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x00001cba andl $128, %edx + 0x09, 0xca, //0x00001cc0 orl %ecx, %edx + 0x0f, 0x84, 0x06, 0x00, 0x00, 0x00, //0x00001cc2 je LBB1_361 + 0x41, 0xbe, 0xff, 0x00, 0x00, 0x00, //0x00001cc8 movl $255, %r14d + //0x00001cce LBB1_361 + 0x48, 0x83, 0xc0, 0x06, //0x00001cce addq $6, %rax + 0x49, 0x89, 0xc7, //0x00001cd2 movq %rax, %r15 + 0x48, 0x8b, 0x5d, 0xd0, //0x00001cd5 movq $-48(%rbp), %rbx + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x00001cd9 movabsq $-4294967296, %r8 + //0x00001ce3 LBB1_362 + 0x41, 0x80, 0xfe, 0x0a, //0x00001ce3 cmpb $10, %r14b + 0x0f, 0x84, 0xd6, 0xfe, 0xff, 0xff, //0x00001ce7 je LBB1_348 + 0x41, 0x80, 0xfe, 0x0d, //0x00001ced cmpb $13, %r14b + 0x0f, 0x84, 0xcc, 0xfe, 0xff, 0xff, //0x00001cf1 je LBB1_348 + 0xe9, 0x4a, 0x02, 0x00, 0x00, //0x00001cf7 jmp LBB1_401 + //0x00001cfc LBB1_364 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00001cfc movl $1, %r11d + 0xe9, 0x1a, 0xfd, 0xff, 0xff, //0x00001d02 jmp LBB1_319 + //0x00001d07 LBB1_365 + 0x48, 0x8b, 0x5d, 0xd0, //0x00001d07 movq $-48(%rbp), %rbx + 0x4c, 0x39, 0xfb, //0x00001d0b cmpq %r15, %rbx + 0x0f, 0x87, 0x28, 0x00, 0x00, 0x00, //0x00001d0e ja LBB1_368 + 0xe9, 0x9a, 0x09, 0x00, 0x00, //0x00001d14 jmp LBB1_499 + //0x00001d19 LBB1_384 + 0x49, 0x89, 0xd6, //0x00001d19 movq %rdx, %r14 + 0x4d, 0x89, 0xf7, //0x00001d1c movq %r14, %r15 + 0x49, 0x39, 0xde, //0x00001d1f cmpq %rbx, %r14 + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00001d22 jb LBB1_368 + 0xe9, 0x44, 0x01, 0x00, 0x00, //0x00001d28 jmp LBB1_425 + //0x00001d2d LBB1_366 + 0x4c, 0x89, 0xf2, //0x00001d2d movq %r14, %rdx + 0x4d, 0x89, 0xf7, //0x00001d30 movq %r14, %r15 + 0x49, 0x39, 0xde, //0x00001d33 cmpq %rbx, %r14 + 0x0f, 0x83, 0x35, 0x01, 0x00, 0x00, //0x00001d36 jae LBB1_425 + //0x00001d3c LBB1_368 + 0x49, 0x8d, 0x57, 0x01, //0x00001d3c leaq $1(%r15), %rdx + 0x41, 0x0f, 0xb6, 0x3f, //0x00001d40 movzbl (%r15), %edi + 0x40, 0x80, 0xff, 0x5c, //0x00001d44 cmpb $92, %dil + 0x0f, 0x85, 0xe9, 0x00, 0x00, 0x00, //0x00001d48 jne LBB1_381 + 0x4d, 0x8d, 0x77, 0x02, //0x00001d4e leaq $2(%r15), %r14 + 0x49, 0x39, 0xde, //0x00001d52 cmpq %rbx, %r14 + 0x0f, 0x87, 0xe2, 0x07, 0x00, 0x00, //0x00001d55 ja LBB1_459 + 0x0f, 0xb6, 0x02, //0x00001d5b movzbl (%rdx), %eax + 0x3c, 0x6e, //0x00001d5e cmpb $110, %al + 0x0f, 0x84, 0xc7, 0xff, 0xff, 0xff, //0x00001d60 je LBB1_366 + 0x3c, 0x72, //0x00001d66 cmpb $114, %al + 0x0f, 0x84, 0xbf, 0xff, 0xff, 0xff, //0x00001d68 je LBB1_366 + 0x3c, 0x75, //0x00001d6e cmpb $117, %al + 0x0f, 0x85, 0x7d, 0x06, 0x00, 0x00, //0x00001d70 jne LBB1_479 + 0x48, 0x89, 0xd8, //0x00001d76 movq %rbx, %rax + 0x4c, 0x29, 0xf0, //0x00001d79 subq %r14, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00001d7c cmpq $4, %rax + 0x0f, 0x8c, 0x6d, 0x06, 0x00, 0x00, //0x00001d80 jl LBB1_479 + 0x41, 0x8b, 0x06, //0x00001d86 movl (%r14), %eax + 0x89, 0xc2, //0x00001d89 movl %eax, %edx + 0xf7, 0xd2, //0x00001d8b notl %edx + 0x8d, 0x88, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001d8d leal $-808464432(%rax), %ecx + 0x81, 0xe2, 0x80, 0x80, 0x80, 0x80, //0x00001d93 andl $-2139062144, %edx + 0x85, 0xca, //0x00001d99 testl %ecx, %edx + 0x0f, 0x85, 0x52, 0x06, 0x00, 0x00, //0x00001d9b jne LBB1_479 + 0x8d, 0x88, 0x19, 0x19, 0x19, 0x19, //0x00001da1 leal $421075225(%rax), %ecx + 0x09, 0xc1, //0x00001da7 orl %eax, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x00001da9 testl $-2139062144, %ecx + 0x0f, 0x85, 0x3e, 0x06, 0x00, 0x00, //0x00001daf jne LBB1_479 + 0x89, 0x75, 0x98, //0x00001db5 movl %esi, $-104(%rbp) + 0x89, 0xc7, //0x00001db8 movl %eax, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001dba andl $2139062143, %edi + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001dc0 movl $-1061109568, %ecx + 0x29, 0xf9, //0x00001dc5 subl %edi, %ecx + 0x8d, 0xb7, 0x46, 0x46, 0x46, 0x46, //0x00001dc7 leal $1179010630(%rdi), %esi + 0x21, 0xd1, //0x00001dcd andl %edx, %ecx + 0x85, 0xf1, //0x00001dcf testl %esi, %ecx + 0x0f, 0x85, 0x1c, 0x06, 0x00, 0x00, //0x00001dd1 jne LBB1_479 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001dd7 movl $-522133280, %ecx + 0x29, 0xf9, //0x00001ddc subl %edi, %ecx + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x00001dde addl $960051513, %edi + 0x21, 0xca, //0x00001de4 andl %ecx, %edx + 0x85, 0xfa, //0x00001de6 testl %edi, %edx + 0x0f, 0x85, 0x05, 0x06, 0x00, 0x00, //0x00001de8 jne LBB1_479 + 0x0f, 0xc8, //0x00001dee bswapl %eax + 0x89, 0xc1, //0x00001df0 movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00001df2 shrl $4, %ecx + 0xf7, 0xd1, //0x00001df5 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00001df7 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00001dfd leal (%rcx,%rcx,8), %ecx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001e00 andl $252645135, %eax + 0x01, 0xc8, //0x00001e05 addl %ecx, %eax + 0x89, 0xc7, //0x00001e07 movl %eax, %edi + 0xc1, 0xef, 0x04, //0x00001e09 shrl $4, %edi + 0x09, 0xc7, //0x00001e0c orl %eax, %edi + 0x89, 0xf8, //0x00001e0e movl %edi, %eax + 0xc1, 0xe8, 0x08, //0x00001e10 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00001e13 andl $65280, %eax + 0x89, 0xf9, //0x00001e18 movl %edi, %ecx + 0x81, 0xe1, 0x80, 0x00, 0x00, 0x00, //0x00001e1a andl $128, %ecx + 0x09, 0xc1, //0x00001e20 orl %eax, %ecx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00001e22 je LBB1_380 + 0xbf, 0xff, 0x00, 0x00, 0x00, //0x00001e28 movl $255, %edi + //0x00001e2d LBB1_380 + 0x49, 0x83, 0xc7, 0x06, //0x00001e2d addq $6, %r15 + 0x4c, 0x89, 0xfa, //0x00001e31 movq %r15, %rdx + 0x8b, 0x75, 0x98, //0x00001e34 movl $-104(%rbp), %esi + //0x00001e37 LBB1_381 + 0x40, 0x80, 0xff, 0x0a, //0x00001e37 cmpb $10, %dil + 0x0f, 0x84, 0xd8, 0xfe, 0xff, 0xff, //0x00001e3b je LBB1_384 + 0x40, 0x80, 0xff, 0x0d, //0x00001e41 cmpb $13, %dil + 0x0f, 0x84, 0xce, 0xfe, 0xff, 0xff, //0x00001e45 je LBB1_384 + 0x40, 0x80, 0xff, 0x3d, //0x00001e4b cmpb $61, %dil + 0x0f, 0x85, 0xe8, 0x06, 0x00, 0x00, //0x00001e4f jne LBB1_459 + 0x49, 0x89, 0xd7, //0x00001e55 movq %rdx, %r15 + 0x83, 0xfe, 0x02, //0x00001e58 cmpl $2, %esi + 0x0f, 0x84, 0x78, 0x06, 0x00, 0x00, //0x00001e5b je LBB1_495 + 0x89, 0x75, 0x98, //0x00001e61 movl %esi, $-104(%rbp) + 0x48, 0x8b, 0x75, 0xd0, //0x00001e64 movq $-48(%rbp), %rsi + 0x48, 0x39, 0xd6, //0x00001e68 cmpq %rdx, %rsi + 0x0f, 0x87, 0x48, 0x04, 0x00, 0x00, //0x00001e6b ja LBB1_462 + //0x00001e71 LBB1_425 + 0x49, 0x89, 0xd7, //0x00001e71 movq %rdx, %r15 + 0xe9, 0x3a, 0x08, 0x00, 0x00, //0x00001e74 jmp LBB1_499 + //0x00001e79 LBB1_385 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00001e79 movl $1, %r11d + 0x8b, 0x45, 0xc8, //0x00001e7f movl $-56(%rbp), %eax + 0xe9, 0x9a, 0xfb, 0xff, 0xff, //0x00001e82 jmp LBB1_319 + //0x00001e87 LBB1_386 + 0x49, 0xff, 0xc7, //0x00001e87 incq %r15 + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00001e8a movl $3, %r11d + 0x49, 0x39, 0xdf, //0x00001e90 cmpq %rbx, %r15 + 0x0f, 0x83, 0x88, 0xfb, 0xff, 0xff, //0x00001e93 jae LBB1_319 + //0x00001e99 LBB1_387 + 0x45, 0x0f, 0xb6, 0x37, //0x00001e99 movzbl (%r15), %r14d + 0x49, 0x83, 0xfe, 0x0d, //0x00001e9d cmpq $13, %r14 + 0x0f, 0x84, 0xe0, 0xff, 0xff, 0xff, //0x00001ea1 je LBB1_386 + 0x41, 0x80, 0xfe, 0x0a, //0x00001ea7 cmpb $10, %r14b + 0x0f, 0x84, 0xd6, 0xff, 0xff, 0xff, //0x00001eab je LBB1_386 + 0x89, 0x45, 0xc8, //0x00001eb1 movl %eax, $-56(%rbp) + 0x48, 0x8b, 0x45, 0xc0, //0x00001eb4 movq $-64(%rbp), %rax + 0x42, 0x0f, 0xb6, 0x04, 0x30, //0x00001eb8 movzbl (%rax,%r14), %eax + 0x49, 0xff, 0xc7, //0x00001ebd incq %r15 + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00001ec0 cmpl $255, %eax + 0x0f, 0x85, 0xd2, 0x05, 0x00, 0x00, //0x00001ec5 jne LBB1_491 + //0x00001ecb LBB1_497 + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00001ecb movl $3, %r11d + 0xe9, 0x2f, 0xfc, 0xff, 0xff, //0x00001ed1 jmp LBB1_334 + //0x00001ed6 LBB1_391 + 0x49, 0xff, 0xc7, //0x00001ed6 incq %r15 + 0x48, 0xff, 0xc2, //0x00001ed9 incq %rdx + 0x48, 0xff, 0xc8, //0x00001edc decq %rax + 0x48, 0xff, 0xc3, //0x00001edf incq %rbx + 0x48, 0xff, 0xcf, //0x00001ee2 decq %rdi + 0x4c, 0x39, 0x7d, 0xd0, //0x00001ee5 cmpq %r15, $-48(%rbp) + 0x0f, 0x84, 0xdb, 0x01, 0x00, 0x00, //0x00001ee9 je LBB1_498 + //0x00001eef LBB1_392 + 0x41, 0x0f, 0xb6, 0x0f, //0x00001eef movzbl (%r15), %ecx + 0x80, 0xf9, 0x0a, //0x00001ef3 cmpb $10, %cl + 0x0f, 0x84, 0xda, 0xff, 0xff, 0xff, //0x00001ef6 je LBB1_391 + 0x80, 0xf9, 0x0d, //0x00001efc cmpb $13, %cl + 0x0f, 0x84, 0xd1, 0xff, 0xff, 0xff, //0x00001eff je LBB1_391 + 0x80, 0xf9, 0x3d, //0x00001f05 cmpb $61, %cl + 0x0f, 0x85, 0xcd, 0x01, 0x00, 0x00, //0x00001f08 jne LBB1_426 + 0x49, 0xff, 0xc7, //0x00001f0e incq %r15 + 0x83, 0xfe, 0x03, //0x00001f11 cmpl $3, %esi + 0x0f, 0x84, 0xbf, 0x05, 0x00, 0x00, //0x00001f14 je LBB1_495 + 0x4c, 0x39, 0x7d, 0xd0, //0x00001f1a cmpq %r15, $-48(%rbp) + 0x0f, 0x87, 0xf4, 0x04, 0x00, 0x00, //0x00001f1e ja LBB1_481 + 0xe9, 0x8a, 0x07, 0x00, 0x00, //0x00001f24 jmp LBB1_499 + //0x00001f29 LBB1_398 + 0x80, 0xfb, 0x2f, //0x00001f29 cmpb $47, %bl + 0x0f, 0x85, 0x03, 0x00, 0x00, 0x00, //0x00001f2c jne LBB1_400 + 0x41, 0x89, 0xde, //0x00001f32 movl %ebx, %r14d + //0x00001f35 LBB1_400 + 0x49, 0x89, 0xd7, //0x00001f35 movq %rdx, %r15 + 0x48, 0x8b, 0x5d, 0xd0, //0x00001f38 movq $-48(%rbp), %rbx + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x00001f3c movabsq $-4294967296, %r8 + //0x00001f46 LBB1_401 + 0x41, 0x0f, 0xb6, 0xc6, //0x00001f46 movzbl %r14b, %eax + 0x48, 0x8b, 0x4d, 0xc0, //0x00001f4a movq $-64(%rbp), %rcx + 0x0f, 0xb6, 0x04, 0x01, //0x00001f4e movzbl (%rcx,%rax), %eax + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00001f52 cmpl $255, %eax + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00001f57 je LBB1_422 + 0x8b, 0x4d, 0xc8, //0x00001f5d movl $-56(%rbp), %ecx + 0xc1, 0xe1, 0x06, //0x00001f60 shll $6, %ecx + 0x09, 0xc1, //0x00001f63 orl %eax, %ecx + 0x89, 0xc8, //0x00001f65 movl %ecx, %eax + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00001f67 movl $2, %r11d + 0x49, 0x39, 0xdf, //0x00001f6d cmpq %rbx, %r15 + 0x0f, 0x83, 0x37, 0x05, 0x00, 0x00, //0x00001f70 jae LBB1_492 + 0x89, 0x45, 0xc8, //0x00001f76 movl %eax, $-56(%rbp) + 0xe9, 0x2c, 0x00, 0x00, 0x00, //0x00001f79 jmp LBB1_407 + //0x00001f7e LBB1_422 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00001f7e movl $1, %r11d + 0xe9, 0x7c, 0xfb, 0xff, 0xff, //0x00001f84 jmp LBB1_334 + //0x00001f89 LBB1_404 + 0x80, 0xfa, 0x6e, //0x00001f89 cmpb $110, %dl + 0x0f, 0x85, 0x54, 0x01, 0x00, 0x00, //0x00001f8c jne LBB1_432 + //0x00001f92 LBB1_405 + 0x48, 0x89, 0xc2, //0x00001f92 movq %rax, %rdx + 0x8b, 0x45, 0xc8, //0x00001f95 movl $-56(%rbp), %eax + //0x00001f98 LBB1_406 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00001f98 movl $2, %r11d + 0x49, 0x89, 0xd7, //0x00001f9e movq %rdx, %r15 + 0x48, 0x39, 0xda, //0x00001fa1 cmpq %rbx, %rdx + 0x0f, 0x83, 0x29, 0x01, 0x00, 0x00, //0x00001fa4 jae LBB1_424 + //0x00001faa LBB1_407 + 0x49, 0x8d, 0x57, 0x01, //0x00001faa leaq $1(%r15), %rdx + 0x45, 0x0f, 0xb6, 0x37, //0x00001fae movzbl (%r15), %r14d + 0x41, 0x80, 0xfe, 0x5c, //0x00001fb2 cmpb $92, %r14b + 0x0f, 0x85, 0xf5, 0x00, 0x00, 0x00, //0x00001fb6 jne LBB1_420 + 0x49, 0x8d, 0x47, 0x02, //0x00001fbc leaq $2(%r15), %rax + 0x41, 0xb6, 0xff, //0x00001fc0 movb $-1, %r14b + 0x48, 0x39, 0xd8, //0x00001fc3 cmpq %rbx, %rax + 0x0f, 0x87, 0x29, 0x01, 0x00, 0x00, //0x00001fc6 ja LBB1_435 + 0x0f, 0xb6, 0x12, //0x00001fcc movzbl (%rdx), %edx + 0x80, 0xfa, 0x71, //0x00001fcf cmpb $113, %dl + 0x0f, 0x8e, 0xb1, 0xff, 0xff, 0xff, //0x00001fd2 jle LBB1_404 + 0x80, 0xfa, 0x72, //0x00001fd8 cmpb $114, %dl + 0x0f, 0x84, 0xb1, 0xff, 0xff, 0xff, //0x00001fdb je LBB1_405 + 0x80, 0xfa, 0x75, //0x00001fe1 cmpb $117, %dl + 0x0f, 0x85, 0x08, 0x01, 0x00, 0x00, //0x00001fe4 jne LBB1_434 + 0x48, 0x89, 0xd9, //0x00001fea movq %rbx, %rcx + 0x48, 0x29, 0xc1, //0x00001fed subq %rax, %rcx + 0x48, 0x83, 0xf9, 0x04, //0x00001ff0 cmpq $4, %rcx + 0x0f, 0x8c, 0xf8, 0x00, 0x00, 0x00, //0x00001ff4 jl LBB1_434 + 0x8b, 0x10, //0x00001ffa movl (%rax), %edx + 0x89, 0xd7, //0x00001ffc movl %edx, %edi + 0xf7, 0xd7, //0x00001ffe notl %edi + 0x8d, 0x8a, 0xd0, 0xcf, 0xcf, 0xcf, //0x00002000 leal $-808464432(%rdx), %ecx + 0x81, 0xe7, 0x80, 0x80, 0x80, 0x80, //0x00002006 andl $-2139062144, %edi + 0x85, 0xcf, //0x0000200c testl %ecx, %edi + 0x0f, 0x85, 0xde, 0x00, 0x00, 0x00, //0x0000200e jne LBB1_434 + 0x8d, 0x8a, 0x19, 0x19, 0x19, 0x19, //0x00002014 leal $421075225(%rdx), %ecx + 0x09, 0xd1, //0x0000201a orl %edx, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x0000201c testl $-2139062144, %ecx + 0x0f, 0x85, 0xca, 0x00, 0x00, 0x00, //0x00002022 jne LBB1_434 + 0x89, 0xd6, //0x00002028 movl %edx, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x0000202a andl $2139062143, %esi + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x00002030 movl $-1061109568, %ecx + 0x29, 0xf1, //0x00002035 subl %esi, %ecx + 0x8d, 0x9e, 0x46, 0x46, 0x46, 0x46, //0x00002037 leal $1179010630(%rsi), %ebx + 0x21, 0xf9, //0x0000203d andl %edi, %ecx + 0x85, 0xd9, //0x0000203f testl %ebx, %ecx + 0x48, 0x8b, 0x5d, 0xd0, //0x00002041 movq $-48(%rbp), %rbx + 0x0f, 0x85, 0xa7, 0x00, 0x00, 0x00, //0x00002045 jne LBB1_434 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x0000204b movl $-522133280, %ecx + 0x29, 0xf1, //0x00002050 subl %esi, %ecx + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x00002052 addl $960051513, %esi + 0x21, 0xcf, //0x00002058 andl %ecx, %edi + 0x85, 0xf7, //0x0000205a testl %esi, %edi + 0x0f, 0x85, 0x90, 0x00, 0x00, 0x00, //0x0000205c jne LBB1_434 + 0x0f, 0xca, //0x00002062 bswapl %edx + 0x89, 0xd0, //0x00002064 movl %edx, %eax + 0xc1, 0xe8, 0x04, //0x00002066 shrl $4, %eax + 0xf7, 0xd0, //0x00002069 notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x0000206b andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x00002070 leal (%rax,%rax,8), %eax + 0x81, 0xe2, 0x0f, 0x0f, 0x0f, 0x0f, //0x00002073 andl $252645135, %edx + 0x01, 0xc2, //0x00002079 addl %eax, %edx + 0x41, 0x89, 0xd6, //0x0000207b movl %edx, %r14d + 0x41, 0xc1, 0xee, 0x04, //0x0000207e shrl $4, %r14d + 0x41, 0x09, 0xd6, //0x00002082 orl %edx, %r14d + 0x44, 0x89, 0xf0, //0x00002085 movl %r14d, %eax + 0xc1, 0xe8, 0x08, //0x00002088 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x0000208b andl $65280, %eax + 0x44, 0x89, 0xf1, //0x00002090 movl %r14d, %ecx + 0x81, 0xe1, 0x80, 0x00, 0x00, 0x00, //0x00002093 andl $128, %ecx + 0x09, 0xc1, //0x00002099 orl %eax, %ecx + 0x0f, 0x84, 0x06, 0x00, 0x00, 0x00, //0x0000209b je LBB1_419 + 0x41, 0xbe, 0xff, 0x00, 0x00, 0x00, //0x000020a1 movl $255, %r14d + //0x000020a7 LBB1_419 + 0x49, 0x83, 0xc7, 0x06, //0x000020a7 addq $6, %r15 + 0x4c, 0x89, 0xfa, //0x000020ab movq %r15, %rdx + 0x8b, 0x45, 0xc8, //0x000020ae movl $-56(%rbp), %eax + //0x000020b1 LBB1_420 + 0x41, 0x80, 0xfe, 0x0a, //0x000020b1 cmpb $10, %r14b + 0x0f, 0x84, 0xdd, 0xfe, 0xff, 0xff, //0x000020b5 je LBB1_406 + 0x41, 0x80, 0xfe, 0x0d, //0x000020bb cmpb $13, %r14b + 0x0f, 0x84, 0xd3, 0xfe, 0xff, 0xff, //0x000020bf je LBB1_406 + 0xe9, 0x2b, 0x00, 0x00, 0x00, //0x000020c5 jmp LBB1_435 + //0x000020ca LBB1_498 + 0x4c, 0x8b, 0x7d, 0xd0, //0x000020ca movq $-48(%rbp), %r15 + 0xe9, 0xe0, 0x05, 0x00, 0x00, //0x000020ce jmp LBB1_499 + //0x000020d3 LBB1_424 + 0x49, 0x89, 0xd7, //0x000020d3 movq %rdx, %r15 + 0xe9, 0x46, 0xf9, 0xff, 0xff, //0x000020d6 jmp LBB1_319 + //0x000020db LBB1_426 + 0x49, 0xff, 0xc7, //0x000020db incq %r15 + 0x4c, 0x89, 0xfb, //0x000020de movq %r15, %rbx + 0xe9, 0xf3, 0x03, 0x00, 0x00, //0x000020e1 jmp LBB1_495 + //0x000020e6 LBB1_432 + 0x80, 0xfa, 0x2f, //0x000020e6 cmpb $47, %dl + 0x0f, 0x85, 0x03, 0x00, 0x00, 0x00, //0x000020e9 jne LBB1_434 + 0x41, 0x89, 0xd6, //0x000020ef movl %edx, %r14d + //0x000020f2 LBB1_434 + 0x48, 0x89, 0xc2, //0x000020f2 movq %rax, %rdx + //0x000020f5 LBB1_435 + 0x41, 0x0f, 0xb6, 0xc6, //0x000020f5 movzbl %r14b, %eax + 0x48, 0x8b, 0x4d, 0xc0, //0x000020f9 movq $-64(%rbp), %rcx + 0x0f, 0xb6, 0x04, 0x01, //0x000020fd movzbl (%rcx,%rax), %eax + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00002101 cmpl $255, %eax + 0x0f, 0x84, 0x74, 0x01, 0x00, 0x00, //0x00002106 je LBB1_456 + 0x8b, 0x4d, 0xc8, //0x0000210c movl $-56(%rbp), %ecx + 0xc1, 0xe1, 0x06, //0x0000210f shll $6, %ecx + 0x09, 0xc1, //0x00002112 orl %eax, %ecx + 0x89, 0xc8, //0x00002114 movl %ecx, %eax + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00002116 movl $3, %r11d + 0x48, 0x39, 0xda, //0x0000211c cmpq %rbx, %rdx + 0x0f, 0x83, 0x69, 0x01, 0x00, 0x00, //0x0000211f jae LBB1_457 + 0x89, 0x45, 0xc8, //0x00002125 movl %eax, $-56(%rbp) + 0xe9, 0x25, 0x00, 0x00, 0x00, //0x00002128 jmp LBB1_441 + //0x0000212d LBB1_438 + 0x80, 0xfb, 0x6e, //0x0000212d cmpb $110, %bl + 0x0f, 0x85, 0x33, 0x03, 0x00, 0x00, //0x00002130 jne LBB1_487 + //0x00002136 LBB1_439 + 0x49, 0x89, 0xc7, //0x00002136 movq %rax, %r15 + 0x48, 0x8b, 0x5d, 0xd0, //0x00002139 movq $-48(%rbp), %rbx + 0x8b, 0x45, 0xc8, //0x0000213d movl $-56(%rbp), %eax + //0x00002140 LBB1_440 + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00002140 movl $3, %r11d + 0x4c, 0x89, 0xfa, //0x00002146 movq %r15, %rdx + 0x49, 0x39, 0xdf, //0x00002149 cmpq %rbx, %r15 + 0x0f, 0x83, 0xcf, 0xf8, 0xff, 0xff, //0x0000214c jae LBB1_319 + //0x00002152 LBB1_441 + 0x4c, 0x8d, 0x7a, 0x01, //0x00002152 leaq $1(%rdx), %r15 + 0x44, 0x0f, 0xb6, 0x32, //0x00002156 movzbl (%rdx), %r14d + 0x41, 0x80, 0xfe, 0x5c, //0x0000215a cmpb $92, %r14b + 0x0f, 0x85, 0x03, 0x01, 0x00, 0x00, //0x0000215e jne LBB1_454 + 0x48, 0x8d, 0x42, 0x02, //0x00002164 leaq $2(%rdx), %rax + 0x41, 0xb6, 0xff, //0x00002168 movb $-1, %r14b + 0x48, 0x39, 0xd8, //0x0000216b cmpq %rbx, %rax + 0x0f, 0x87, 0x12, 0x03, 0x00, 0x00, //0x0000216e ja LBB1_490 + 0x41, 0x0f, 0xb6, 0x1f, //0x00002174 movzbl (%r15), %ebx + 0x80, 0xfb, 0x71, //0x00002178 cmpb $113, %bl + 0x0f, 0x8e, 0xac, 0xff, 0xff, 0xff, //0x0000217b jle LBB1_438 + 0x80, 0xfb, 0x72, //0x00002181 cmpb $114, %bl + 0x0f, 0x84, 0xac, 0xff, 0xff, 0xff, //0x00002184 je LBB1_439 + 0x80, 0xfb, 0x75, //0x0000218a cmpb $117, %bl + 0x0f, 0x85, 0xe2, 0x02, 0x00, 0x00, //0x0000218d jne LBB1_489 + 0x48, 0x8b, 0x4d, 0xd0, //0x00002193 movq $-48(%rbp), %rcx + 0x48, 0x29, 0xc1, //0x00002197 subq %rax, %rcx + 0x48, 0x83, 0xf9, 0x04, //0x0000219a cmpq $4, %rcx + 0x0f, 0x8c, 0xd1, 0x02, 0x00, 0x00, //0x0000219e jl LBB1_489 + 0x8b, 0x38, //0x000021a4 movl (%rax), %edi + 0x89, 0xfb, //0x000021a6 movl %edi, %ebx + 0xf7, 0xd3, //0x000021a8 notl %ebx + 0x8d, 0x8f, 0xd0, 0xcf, 0xcf, 0xcf, //0x000021aa leal $-808464432(%rdi), %ecx + 0x81, 0xe3, 0x80, 0x80, 0x80, 0x80, //0x000021b0 andl $-2139062144, %ebx + 0x85, 0xcb, //0x000021b6 testl %ecx, %ebx + 0x0f, 0x85, 0xb7, 0x02, 0x00, 0x00, //0x000021b8 jne LBB1_489 + 0x8d, 0x8f, 0x19, 0x19, 0x19, 0x19, //0x000021be leal $421075225(%rdi), %ecx + 0x09, 0xf9, //0x000021c4 orl %edi, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x000021c6 testl $-2139062144, %ecx + 0x0f, 0x85, 0xa3, 0x02, 0x00, 0x00, //0x000021cc jne LBB1_489 + 0x89, 0xfe, //0x000021d2 movl %edi, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x000021d4 andl $2139062143, %esi + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x000021da movl $-1061109568, %ecx + 0x29, 0xf1, //0x000021df subl %esi, %ecx + 0x44, 0x8d, 0x86, 0x46, 0x46, 0x46, 0x46, //0x000021e1 leal $1179010630(%rsi), %r8d + 0x21, 0xd9, //0x000021e8 andl %ebx, %ecx + 0x44, 0x85, 0xc1, //0x000021ea testl %r8d, %ecx + 0x0f, 0x85, 0x82, 0x02, 0x00, 0x00, //0x000021ed jne LBB1_489 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x000021f3 movl $-522133280, %ecx + 0x29, 0xf1, //0x000021f8 subl %esi, %ecx + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x000021fa addl $960051513, %esi + 0x21, 0xcb, //0x00002200 andl %ecx, %ebx + 0x85, 0xf3, //0x00002202 testl %esi, %ebx + 0x0f, 0x85, 0x6b, 0x02, 0x00, 0x00, //0x00002204 jne LBB1_489 + 0x0f, 0xcf, //0x0000220a bswapl %edi + 0x89, 0xf8, //0x0000220c movl %edi, %eax + 0xc1, 0xe8, 0x04, //0x0000220e shrl $4, %eax + 0xf7, 0xd0, //0x00002211 notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x00002213 andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x00002218 leal (%rax,%rax,8), %eax + 0x81, 0xe7, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000221b andl $252645135, %edi + 0x01, 0xc7, //0x00002221 addl %eax, %edi + 0x41, 0x89, 0xfe, //0x00002223 movl %edi, %r14d + 0x41, 0xc1, 0xee, 0x04, //0x00002226 shrl $4, %r14d + 0x41, 0x09, 0xfe, //0x0000222a orl %edi, %r14d + 0x44, 0x89, 0xf0, //0x0000222d movl %r14d, %eax + 0xc1, 0xe8, 0x08, //0x00002230 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00002233 andl $65280, %eax + 0x44, 0x89, 0xf1, //0x00002238 movl %r14d, %ecx + 0x81, 0xe1, 0x80, 0x00, 0x00, 0x00, //0x0000223b andl $128, %ecx + 0x09, 0xc1, //0x00002241 orl %eax, %ecx + 0x0f, 0x84, 0x06, 0x00, 0x00, 0x00, //0x00002243 je LBB1_453 + 0x41, 0xbe, 0xff, 0x00, 0x00, 0x00, //0x00002249 movl $255, %r14d + //0x0000224f LBB1_453 + 0x48, 0x83, 0xc2, 0x06, //0x0000224f addq $6, %rdx + 0x49, 0x89, 0xd7, //0x00002253 movq %rdx, %r15 + 0x48, 0x8b, 0x5d, 0xd0, //0x00002256 movq $-48(%rbp), %rbx + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x0000225a movabsq $-4294967296, %r8 + 0x8b, 0x45, 0xc8, //0x00002264 movl $-56(%rbp), %eax + //0x00002267 LBB1_454 + 0x41, 0x80, 0xfe, 0x0a, //0x00002267 cmpb $10, %r14b + 0x0f, 0x84, 0xcf, 0xfe, 0xff, 0xff, //0x0000226b je LBB1_440 + 0x41, 0x80, 0xfe, 0x0d, //0x00002271 cmpb $13, %r14b + 0x0f, 0x84, 0xc5, 0xfe, 0xff, 0xff, //0x00002275 je LBB1_440 + 0xe9, 0x06, 0x02, 0x00, 0x00, //0x0000227b jmp LBB1_490 + //0x00002280 LBB1_456 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00002280 movl $2, %r11d + 0x49, 0x89, 0xd7, //0x00002286 movq %rdx, %r15 + 0xe9, 0x77, 0xf8, 0xff, 0xff, //0x00002289 jmp LBB1_334 + //0x0000228e LBB1_457 + 0x49, 0x89, 0xd7, //0x0000228e movq %rdx, %r15 + 0xe9, 0x17, 0x02, 0x00, 0x00, //0x00002291 jmp LBB1_492 + //0x00002296 LBB1_478 + 0x4d, 0x89, 0xfe, //0x00002296 movq %r15, %r14 + 0x4c, 0x89, 0xf2, //0x00002299 movq %r14, %rdx + 0x49, 0x39, 0xf6, //0x0000229c cmpq %rsi, %r14 + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x0000229f jb LBB1_462 + 0xe9, 0x09, 0x04, 0x00, 0x00, //0x000022a5 jmp LBB1_499 + //0x000022aa LBB1_460 + 0x4d, 0x89, 0xf7, //0x000022aa movq %r14, %r15 + 0x4c, 0x89, 0xf2, //0x000022ad movq %r14, %rdx + 0x49, 0x39, 0xf6, //0x000022b0 cmpq %rsi, %r14 + 0x0f, 0x83, 0xfa, 0x03, 0x00, 0x00, //0x000022b3 jae LBB1_499 + //0x000022b9 LBB1_462 + 0x4c, 0x8d, 0x7a, 0x01, //0x000022b9 leaq $1(%rdx), %r15 + 0x0f, 0xb6, 0x3a, //0x000022bd movzbl (%rdx), %edi + 0x40, 0x80, 0xff, 0x5c, //0x000022c0 cmpb $92, %dil + 0x0f, 0x85, 0xe8, 0x00, 0x00, 0x00, //0x000022c4 jne LBB1_475 + 0x4c, 0x8d, 0x72, 0x02, //0x000022ca leaq $2(%rdx), %r14 + 0x49, 0x39, 0xf6, //0x000022ce cmpq %rsi, %r14 + 0x0f, 0x87, 0x63, 0x02, 0x00, 0x00, //0x000022d1 ja LBB1_517 + 0x41, 0x0f, 0xb6, 0x07, //0x000022d7 movzbl (%r15), %eax + 0x3c, 0x6e, //0x000022db cmpb $110, %al + 0x0f, 0x84, 0xc7, 0xff, 0xff, 0xff, //0x000022dd je LBB1_460 + 0x3c, 0x72, //0x000022e3 cmpb $114, %al + 0x0f, 0x84, 0xbf, 0xff, 0xff, 0xff, //0x000022e5 je LBB1_460 + 0x3c, 0x75, //0x000022eb cmpb $117, %al + 0x0f, 0x85, 0x00, 0x01, 0x00, 0x00, //0x000022ed jne LBB1_479 + 0x48, 0x89, 0xf0, //0x000022f3 movq %rsi, %rax + 0x4c, 0x29, 0xf0, //0x000022f6 subq %r14, %rax + 0x48, 0x83, 0xf8, 0x04, //0x000022f9 cmpq $4, %rax + 0x0f, 0x8c, 0xf0, 0x00, 0x00, 0x00, //0x000022fd jl LBB1_479 + 0x41, 0x8b, 0x06, //0x00002303 movl (%r14), %eax + 0x89, 0xc7, //0x00002306 movl %eax, %edi + 0xf7, 0xd7, //0x00002308 notl %edi + 0x8d, 0x88, 0xd0, 0xcf, 0xcf, 0xcf, //0x0000230a leal $-808464432(%rax), %ecx + 0x81, 0xe7, 0x80, 0x80, 0x80, 0x80, //0x00002310 andl $-2139062144, %edi + 0x85, 0xcf, //0x00002316 testl %ecx, %edi + 0x0f, 0x85, 0xd5, 0x00, 0x00, 0x00, //0x00002318 jne LBB1_479 + 0x8d, 0x88, 0x19, 0x19, 0x19, 0x19, //0x0000231e leal $421075225(%rax), %ecx + 0x09, 0xc1, //0x00002324 orl %eax, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x00002326 testl $-2139062144, %ecx + 0x0f, 0x85, 0xc1, 0x00, 0x00, 0x00, //0x0000232c jne LBB1_479 + 0x89, 0xc6, //0x00002332 movl %eax, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x00002334 andl $2139062143, %esi + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x0000233a movl $-1061109568, %ecx + 0x29, 0xf1, //0x0000233f subl %esi, %ecx + 0x8d, 0x9e, 0x46, 0x46, 0x46, 0x46, //0x00002341 leal $1179010630(%rsi), %ebx + 0x21, 0xf9, //0x00002347 andl %edi, %ecx + 0x85, 0xd9, //0x00002349 testl %ebx, %ecx + 0x0f, 0x85, 0xa2, 0x00, 0x00, 0x00, //0x0000234b jne LBB1_479 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x00002351 movl $-522133280, %ecx + 0x29, 0xf1, //0x00002356 subl %esi, %ecx + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x00002358 addl $960051513, %esi + 0x21, 0xcf, //0x0000235e andl %ecx, %edi + 0x85, 0xf7, //0x00002360 testl %esi, %edi + 0x48, 0x8b, 0x75, 0xd0, //0x00002362 movq $-48(%rbp), %rsi + 0x0f, 0x85, 0x87, 0x00, 0x00, 0x00, //0x00002366 jne LBB1_479 + 0x0f, 0xc8, //0x0000236c bswapl %eax + 0x89, 0xc1, //0x0000236e movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00002370 shrl $4, %ecx + 0xf7, 0xd1, //0x00002373 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00002375 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x0000237b leal (%rcx,%rcx,8), %ecx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000237e andl $252645135, %eax + 0x01, 0xc8, //0x00002383 addl %ecx, %eax + 0x89, 0xc7, //0x00002385 movl %eax, %edi + 0xc1, 0xef, 0x04, //0x00002387 shrl $4, %edi + 0x09, 0xc7, //0x0000238a orl %eax, %edi + 0x89, 0xf8, //0x0000238c movl %edi, %eax + 0xc1, 0xe8, 0x08, //0x0000238e shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00002391 andl $65280, %eax + 0x89, 0xf9, //0x00002396 movl %edi, %ecx + 0x81, 0xe1, 0x80, 0x00, 0x00, 0x00, //0x00002398 andl $128, %ecx + 0x09, 0xc1, //0x0000239e orl %eax, %ecx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x000023a0 je LBB1_474 + 0xbf, 0xff, 0x00, 0x00, 0x00, //0x000023a6 movl $255, %edi + //0x000023ab LBB1_474 + 0x48, 0x83, 0xc2, 0x06, //0x000023ab addq $6, %rdx + 0x49, 0x89, 0xd7, //0x000023af movq %rdx, %r15 + //0x000023b2 LBB1_475 + 0x40, 0x80, 0xff, 0x0a, //0x000023b2 cmpb $10, %dil + 0x0f, 0x84, 0xda, 0xfe, 0xff, 0xff, //0x000023b6 je LBB1_478 + 0x40, 0x80, 0xff, 0x0d, //0x000023bc cmpb $13, %dil + 0x0f, 0x84, 0xd0, 0xfe, 0xff, 0xff, //0x000023c0 je LBB1_478 + 0x40, 0x80, 0xff, 0x3d, //0x000023c6 cmpb $61, %dil + 0x0f, 0x85, 0x09, 0x01, 0x00, 0x00, //0x000023ca jne LBB1_495 + 0x83, 0x7d, 0x98, 0x03, //0x000023d0 cmpl $3, $-104(%rbp) + 0x0f, 0x84, 0xff, 0x00, 0x00, 0x00, //0x000023d4 je LBB1_495 + 0x4c, 0x39, 0x7d, 0xd0, //0x000023da cmpq %r15, $-48(%rbp) + 0x0f, 0x87, 0x86, 0x01, 0x00, 0x00, //0x000023de ja LBB1_522 + //0x000023e4 LBB1_511 + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x000023e4 movabsq $-4294967296, %r8 + 0xe9, 0xc0, 0x02, 0x00, 0x00, //0x000023ee jmp LBB1_499 + //0x000023f3 LBB1_479 + 0x4d, 0x89, 0xf7, //0x000023f3 movq %r14, %r15 + 0xe9, 0xde, 0x00, 0x00, 0x00, //0x000023f6 jmp LBB1_495 + //0x000023fb LBB1_458 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x000023fb movl $2, %r11d + 0xe9, 0xff, 0xf6, 0xff, 0xff, //0x00002401 jmp LBB1_334 + //0x00002406 LBB1_480 + 0x48, 0xff, 0xc2, //0x00002406 incq %rdx + 0x48, 0xff, 0xc3, //0x00002409 incq %rbx + 0x48, 0xff, 0xcf, //0x0000240c decq %rdi + 0x48, 0xff, 0xc8, //0x0000240f decq %rax + 0x0f, 0x84, 0x8d, 0x02, 0x00, 0x00, //0x00002412 je LBB1_519 + //0x00002418 LBB1_481 + 0x0f, 0xb6, 0x4a, 0xff, //0x00002418 movzbl $-1(%rdx), %ecx + 0x80, 0xf9, 0x0a, //0x0000241c cmpb $10, %cl + 0x0f, 0x84, 0xe1, 0xff, 0xff, 0xff, //0x0000241f je LBB1_480 + 0x80, 0xf9, 0x0d, //0x00002425 cmpb $13, %cl + 0x0f, 0x84, 0xd8, 0xff, 0xff, 0xff, //0x00002428 je LBB1_480 + 0x80, 0xf9, 0x3d, //0x0000242e cmpb $61, %cl + 0x0f, 0x85, 0xe5, 0x02, 0x00, 0x00, //0x00002431 jne LBB1_539 + 0x49, 0x89, 0xd7, //0x00002437 movq %rdx, %r15 + 0x83, 0xfe, 0x04, //0x0000243a cmpl $4, %esi + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x0000243d movabsq $-4294967296, %r8 + 0x0f, 0x84, 0x8c, 0x00, 0x00, 0x00, //0x00002447 je LBB1_495 + 0x48, 0x39, 0x55, 0xd0, //0x0000244d cmpq %rdx, $-48(%rbp) + 0x0f, 0x87, 0xbf, 0x00, 0x00, 0x00, //0x00002451 ja LBB1_513 + //0x00002457 LBB1_486 + 0x49, 0x89, 0xd7, //0x00002457 movq %rdx, %r15 + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x0000245a movabsq $-4294967296, %r8 + 0xe9, 0x4a, 0x02, 0x00, 0x00, //0x00002464 jmp LBB1_499 + //0x00002469 LBB1_487 + 0x80, 0xfb, 0x2f, //0x00002469 cmpb $47, %bl + 0x0f, 0x85, 0x03, 0x00, 0x00, 0x00, //0x0000246c jne LBB1_489 + 0x41, 0x89, 0xde, //0x00002472 movl %ebx, %r14d + //0x00002475 LBB1_489 + 0x49, 0x89, 0xc7, //0x00002475 movq %rax, %r15 + 0x48, 0x8b, 0x5d, 0xd0, //0x00002478 movq $-48(%rbp), %rbx + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x0000247c movabsq $-4294967296, %r8 + //0x00002486 LBB1_490 + 0x41, 0x0f, 0xb6, 0xc6, //0x00002486 movzbl %r14b, %eax + 0x48, 0x8b, 0x4d, 0xc0, //0x0000248a movq $-64(%rbp), %rcx + 0x0f, 0xb6, 0x04, 0x01, //0x0000248e movzbl (%rcx,%rax), %eax + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00002492 cmpl $255, %eax + 0x0f, 0x84, 0x2e, 0xfa, 0xff, 0xff, //0x00002497 je LBB1_497 + //0x0000249d LBB1_491 + 0x8b, 0x4d, 0xc8, //0x0000249d movl $-56(%rbp), %ecx + 0xc1, 0xe1, 0x06, //0x000024a0 shll $6, %ecx + 0x09, 0xc1, //0x000024a3 orl %eax, %ecx + 0x89, 0xc8, //0x000024a5 movl %ecx, %eax + 0x41, 0xbb, 0x04, 0x00, 0x00, 0x00, //0x000024a7 movl $4, %r11d + //0x000024ad LBB1_492 + 0x89, 0x45, 0xc8, //0x000024ad movl %eax, $-56(%rbp) + 0xf6, 0x45, 0xbc, 0x02, //0x000024b0 testb $2, $-68(%rbp) + 0x0f, 0x94, 0xc0, //0x000024b4 sete %al + 0x41, 0x83, 0xfb, 0x01, //0x000024b7 cmpl $1, %r11d + 0x0f, 0x94, 0xc1, //0x000024bb sete %cl + 0x49, 0x39, 0xdf, //0x000024be cmpq %rbx, %r15 + 0x0f, 0x82, 0xec, 0x01, 0x00, 0x00, //0x000024c1 jb LBB1_499 + 0x41, 0x83, 0xfb, 0x04, //0x000024c7 cmpl $4, %r11d + 0x0f, 0x84, 0xe2, 0x01, 0x00, 0x00, //0x000024cb je LBB1_499 + 0x08, 0xc8, //0x000024d1 orb %cl, %al + 0x0f, 0x84, 0xda, 0x01, 0x00, 0x00, //0x000024d3 je LBB1_499 + //0x000024d9 LBB1_495 + 0x49, 0x8d, 0x4f, 0x01, //0x000024d9 leaq $1(%r15), %rcx + 0x48, 0x8b, 0x5d, 0xd0, //0x000024dd movq $-48(%rbp), %rbx + 0x4c, 0x39, 0xfb, //0x000024e1 cmpq %r15, %rbx + 0x49, 0x0f, 0x45, 0xcf, //0x000024e4 cmovneq %r15, %rcx + 0x4c, 0x29, 0xe9, //0x000024e8 subq %r13, %rcx + 0x0f, 0x85, 0xf8, 0x24, 0x00, 0x00, //0x000024eb jne LBB1_1141 + 0x4d, 0x89, 0xef, //0x000024f1 movq %r13, %r15 + 0x48, 0x8b, 0x4d, 0xb0, //0x000024f4 movq $-80(%rbp), %rcx + 0x48, 0x89, 0x4d, 0xb0, //0x000024f8 movq %rcx, $-80(%rbp) + 0x49, 0x39, 0xcc, //0x000024fc cmpq %rcx, %r12 + 0x0f, 0x83, 0x9e, 0xf2, 0xff, 0xff, //0x000024ff jae LBB1_506 + 0xe9, 0xae, 0xe0, 0xff, 0xff, //0x00002505 jmp LBB1_2 + //0x0000250a LBB1_512 + 0x48, 0xff, 0xc3, //0x0000250a incq %rbx + 0x48, 0xff, 0xcf, //0x0000250d decq %rdi + 0x0f, 0x84, 0x8f, 0x01, 0x00, 0x00, //0x00002510 je LBB1_519 + //0x00002516 LBB1_513 + 0x0f, 0xb6, 0x43, 0xff, //0x00002516 movzbl $-1(%rbx), %eax + 0x3c, 0x0a, //0x0000251a cmpb $10, %al + 0x0f, 0x84, 0xe8, 0xff, 0xff, 0xff, //0x0000251c je LBB1_512 + 0x3c, 0x0d, //0x00002522 cmpb $13, %al + 0x0f, 0x84, 0xe0, 0xff, 0xff, 0xff, //0x00002524 je LBB1_512 + 0x3c, 0x3d, //0x0000252a cmpb $61, %al + 0x0f, 0x85, 0x64, 0x03, 0x00, 0x00, //0x0000252c jne LBB1_545 + 0x49, 0x89, 0xdf, //0x00002532 movq %rbx, %r15 + 0xe9, 0x71, 0x03, 0x00, 0x00, //0x00002535 jmp LBB1_567 + //0x0000253a LBB1_517 + 0x4c, 0x89, 0xfa, //0x0000253a movq %r15, %rdx + //0x0000253d LBB1_459 + 0x49, 0x89, 0xd7, //0x0000253d movq %rdx, %r15 + 0xe9, 0x94, 0xff, 0xff, 0xff, //0x00002540 jmp LBB1_495 + //0x00002545 LBB1_538 + 0x49, 0x89, 0xd6, //0x00002545 movq %rdx, %r14 + 0x4d, 0x89, 0xf7, //0x00002548 movq %r14, %r15 + 0x4c, 0x3b, 0x75, 0xd0, //0x0000254b cmpq $-48(%rbp), %r14 + 0x0f, 0x82, 0x15, 0x00, 0x00, 0x00, //0x0000254f jb LBB1_522 + 0xe9, 0xfd, 0xfe, 0xff, 0xff, //0x00002555 jmp LBB1_486 + //0x0000255a LBB1_520 + 0x4c, 0x89, 0xf2, //0x0000255a movq %r14, %rdx + 0x4d, 0x89, 0xf7, //0x0000255d movq %r14, %r15 + 0x4c, 0x3b, 0x75, 0xd0, //0x00002560 cmpq $-48(%rbp), %r14 + 0x0f, 0x83, 0xed, 0xfe, 0xff, 0xff, //0x00002564 jae LBB1_486 + //0x0000256a LBB1_522 + 0x49, 0x8d, 0x57, 0x01, //0x0000256a leaq $1(%r15), %rdx + 0x41, 0x0f, 0xb6, 0x3f, //0x0000256e movzbl (%r15), %edi + 0x40, 0x80, 0xff, 0x5c, //0x00002572 cmpb $92, %dil + 0x0f, 0x85, 0xe5, 0x00, 0x00, 0x00, //0x00002576 jne LBB1_535 + 0x4d, 0x8d, 0x77, 0x02, //0x0000257c leaq $2(%r15), %r14 + 0x4c, 0x3b, 0x75, 0xd0, //0x00002580 cmpq $-48(%rbp), %r14 + 0x0f, 0x87, 0xa7, 0x01, 0x00, 0x00, //0x00002584 ja LBB1_543 + 0x0f, 0xb6, 0x02, //0x0000258a movzbl (%rdx), %eax + 0x3c, 0x6e, //0x0000258d cmpb $110, %al + 0x0f, 0x84, 0xc5, 0xff, 0xff, 0xff, //0x0000258f je LBB1_520 + 0x3c, 0x72, //0x00002595 cmpb $114, %al + 0x0f, 0x84, 0xbd, 0xff, 0xff, 0xff, //0x00002597 je LBB1_520 + 0x3c, 0x75, //0x0000259d cmpb $117, %al + 0x0f, 0x85, 0xdf, 0x02, 0x00, 0x00, //0x0000259f jne LBB1_544 + 0x48, 0x8b, 0x45, 0xd0, //0x000025a5 movq $-48(%rbp), %rax + 0x4c, 0x29, 0xf0, //0x000025a9 subq %r14, %rax + 0x48, 0x83, 0xf8, 0x04, //0x000025ac cmpq $4, %rax + 0x0f, 0x8c, 0xc6, 0x02, 0x00, 0x00, //0x000025b0 jl LBB1_566 + 0x41, 0x8b, 0x06, //0x000025b6 movl (%r14), %eax + 0x89, 0xc2, //0x000025b9 movl %eax, %edx + 0xf7, 0xd2, //0x000025bb notl %edx + 0x8d, 0x88, 0xd0, 0xcf, 0xcf, 0xcf, //0x000025bd leal $-808464432(%rax), %ecx + 0x81, 0xe2, 0x80, 0x80, 0x80, 0x80, //0x000025c3 andl $-2139062144, %edx + 0x85, 0xca, //0x000025c9 testl %ecx, %edx + 0x0f, 0x85, 0xab, 0x02, 0x00, 0x00, //0x000025cb jne LBB1_566 + 0x8d, 0x88, 0x19, 0x19, 0x19, 0x19, //0x000025d1 leal $421075225(%rax), %ecx + 0x09, 0xc1, //0x000025d7 orl %eax, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x000025d9 testl $-2139062144, %ecx + 0x0f, 0x85, 0x97, 0x02, 0x00, 0x00, //0x000025df jne LBB1_566 + 0x89, 0xc6, //0x000025e5 movl %eax, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x000025e7 andl $2139062143, %esi + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x000025ed movl $-1061109568, %ecx + 0x29, 0xf1, //0x000025f2 subl %esi, %ecx + 0x8d, 0xbe, 0x46, 0x46, 0x46, 0x46, //0x000025f4 leal $1179010630(%rsi), %edi + 0x21, 0xd1, //0x000025fa andl %edx, %ecx + 0x85, 0xf9, //0x000025fc testl %edi, %ecx + 0x0f, 0x85, 0x78, 0x02, 0x00, 0x00, //0x000025fe jne LBB1_566 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x00002604 movl $-522133280, %ecx + 0x29, 0xf1, //0x00002609 subl %esi, %ecx + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x0000260b addl $960051513, %esi + 0x21, 0xca, //0x00002611 andl %ecx, %edx + 0x85, 0xf2, //0x00002613 testl %esi, %edx + 0x0f, 0x85, 0x61, 0x02, 0x00, 0x00, //0x00002615 jne LBB1_566 + 0x0f, 0xc8, //0x0000261b bswapl %eax + 0x89, 0xc1, //0x0000261d movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x0000261f shrl $4, %ecx + 0xf7, 0xd1, //0x00002622 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00002624 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x0000262a leal (%rcx,%rcx,8), %ecx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000262d andl $252645135, %eax + 0x01, 0xc8, //0x00002632 addl %ecx, %eax + 0x89, 0xc7, //0x00002634 movl %eax, %edi + 0xc1, 0xef, 0x04, //0x00002636 shrl $4, %edi + 0x09, 0xc7, //0x00002639 orl %eax, %edi + 0x89, 0xf8, //0x0000263b movl %edi, %eax + 0xc1, 0xe8, 0x08, //0x0000263d shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00002640 andl $65280, %eax + 0x89, 0xf9, //0x00002645 movl %edi, %ecx + 0x81, 0xe1, 0x80, 0x00, 0x00, 0x00, //0x00002647 andl $128, %ecx + 0x09, 0xc1, //0x0000264d orl %eax, %ecx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x0000264f je LBB1_534 + 0xbf, 0xff, 0x00, 0x00, 0x00, //0x00002655 movl $255, %edi + //0x0000265a LBB1_534 + 0x49, 0x83, 0xc7, 0x06, //0x0000265a addq $6, %r15 + 0x4c, 0x89, 0xfa, //0x0000265e movq %r15, %rdx + //0x00002661 LBB1_535 + 0x40, 0x80, 0xff, 0x0a, //0x00002661 cmpb $10, %dil + 0x0f, 0x84, 0xda, 0xfe, 0xff, 0xff, //0x00002665 je LBB1_538 + 0x40, 0x80, 0xff, 0x0d, //0x0000266b cmpb $13, %dil + 0x0f, 0x84, 0xd0, 0xfe, 0xff, 0xff, //0x0000266f je LBB1_538 + 0x40, 0x80, 0xff, 0x3d, //0x00002675 cmpb $61, %dil + 0x0f, 0x85, 0x29, 0x02, 0x00, 0x00, //0x00002679 jne LBB1_546 + 0x49, 0x89, 0xd7, //0x0000267f movq %rdx, %r15 + 0x83, 0x7d, 0x98, 0x04, //0x00002682 cmpl $4, $-104(%rbp) + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x00002686 movabsq $-4294967296, %r8 + 0x0f, 0x84, 0x43, 0xfe, 0xff, 0xff, //0x00002690 je LBB1_495 + 0x48, 0x39, 0x55, 0xd0, //0x00002696 cmpq %rdx, $-48(%rbp) + 0x0f, 0x87, 0xc8, 0x00, 0x00, 0x00, //0x0000269a ja LBB1_549 + 0xe9, 0xb2, 0xfd, 0xff, 0xff, //0x000026a0 jmp LBB1_486 + //0x000026a5 LBB1_519 + 0x4c, 0x8b, 0x7d, 0xd0, //0x000026a5 movq $-48(%rbp), %r15 + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x000026a9 movabsq $-4294967296, %r8 + //0x000026b3 LBB1_499 + 0xb0, 0x04, //0x000026b3 movb $4, %al + 0x44, 0x28, 0xd8, //0x000026b5 subb %r11b, %al + 0x0f, 0xb6, 0xc0, //0x000026b8 movzbl %al, %eax + 0x01, 0xc0, //0x000026bb addl %eax, %eax + 0x8d, 0x0c, 0x40, //0x000026bd leal (%rax,%rax,2), %ecx + 0x8b, 0x45, 0xc8, //0x000026c0 movl $-56(%rbp), %eax + 0xd3, 0xe0, //0x000026c3 shll %cl, %eax + 0x41, 0x83, 0xfb, 0x02, //0x000026c5 cmpl $2, %r11d + 0x48, 0x8b, 0x5d, 0xd0, //0x000026c9 movq $-48(%rbp), %rbx + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x000026cd je LBB1_504 + 0x41, 0x83, 0xfb, 0x03, //0x000026d3 cmpl $3, %r11d + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x000026d7 je LBB1_503 + 0x41, 0x83, 0xfb, 0x04, //0x000026dd cmpl $4, %r11d + 0x48, 0x8b, 0x4d, 0xb0, //0x000026e1 movq $-80(%rbp), %rcx + 0x0f, 0x85, 0x17, 0x00, 0x00, 0x00, //0x000026e5 jne LBB1_505 + 0x88, 0x41, 0x02, //0x000026eb movb %al, $2(%rcx) + //0x000026ee LBB1_503 + 0x89, 0xc1, //0x000026ee movl %eax, %ecx + 0x48, 0x8b, 0x45, 0xb0, //0x000026f0 movq $-80(%rbp), %rax + 0x88, 0x68, 0x01, //0x000026f4 movb %ch, $1(%rax) + 0x89, 0xc8, //0x000026f7 movl %ecx, %eax + //0x000026f9 LBB1_504 + 0xc1, 0xe8, 0x10, //0x000026f9 shrl $16, %eax + 0x48, 0x8b, 0x4d, 0xb0, //0x000026fc movq $-80(%rbp), %rcx + 0x88, 0x01, //0x00002700 movb %al, (%rcx) + //0x00002702 LBB1_505 + 0x44, 0x89, 0xd8, //0x00002702 movl %r11d, %eax + 0x48, 0x8d, 0x4c, 0x01, 0xff, //0x00002705 leaq $-1(%rcx,%rax), %rcx + 0x48, 0x89, 0x4d, 0xb0, //0x0000270a movq %rcx, $-80(%rbp) + 0x49, 0x39, 0xcc, //0x0000270e cmpq %rcx, %r12 + 0x0f, 0x83, 0x8c, 0xf0, 0xff, 0xff, //0x00002711 jae LBB1_506 + 0xe9, 0x9c, 0xde, 0xff, 0xff, //0x00002717 jmp LBB1_2 + //0x0000271c LBB1_539 + 0x48, 0x89, 0xd3, //0x0000271c movq %rdx, %rbx + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x0000271f movabsq $-4294967296, %r8 + 0x49, 0x89, 0xd7, //0x00002729 movq %rdx, %r15 + 0xe9, 0xa8, 0xfd, 0xff, 0xff, //0x0000272c jmp LBB1_495 + //0x00002731 LBB1_543 + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x00002731 movabsq $-4294967296, %r8 + 0x49, 0x89, 0xd7, //0x0000273b movq %rdx, %r15 + 0xe9, 0x96, 0xfd, 0xff, 0xff, //0x0000273e jmp LBB1_495 + //0x00002743 LBB1_565 + 0x4d, 0x89, 0xfe, //0x00002743 movq %r15, %r14 + 0x4c, 0x89, 0xf2, //0x00002746 movq %r14, %rdx + 0x4c, 0x3b, 0x75, 0xd0, //0x00002749 cmpq $-48(%rbp), %r14 + 0x0f, 0x82, 0x15, 0x00, 0x00, 0x00, //0x0000274d jb LBB1_549 + 0xe9, 0x8c, 0xfc, 0xff, 0xff, //0x00002753 jmp LBB1_511 + //0x00002758 LBB1_547 + 0x4d, 0x89, 0xf7, //0x00002758 movq %r14, %r15 + 0x4c, 0x89, 0xf2, //0x0000275b movq %r14, %rdx + 0x4c, 0x3b, 0x75, 0xd0, //0x0000275e cmpq $-48(%rbp), %r14 + 0x0f, 0x83, 0x7c, 0xfc, 0xff, 0xff, //0x00002762 jae LBB1_511 + //0x00002768 LBB1_549 + 0x4c, 0x8d, 0x7a, 0x01, //0x00002768 leaq $1(%rdx), %r15 + 0x0f, 0xb6, 0x3a, //0x0000276c movzbl (%rdx), %edi + 0x40, 0x80, 0xff, 0x5c, //0x0000276f cmpb $92, %dil + 0x0f, 0x85, 0xe6, 0x00, 0x00, 0x00, //0x00002773 jne LBB1_562 + 0x4c, 0x8d, 0x72, 0x02, //0x00002779 leaq $2(%rdx), %r14 + 0x4c, 0x3b, 0x75, 0xd0, //0x0000277d cmpq $-48(%rbp), %r14 + 0x0f, 0x87, 0x33, 0x01, 0x00, 0x00, //0x00002781 ja LBB1_570 + 0x41, 0x0f, 0xb6, 0x07, //0x00002787 movzbl (%r15), %eax + 0x3c, 0x6e, //0x0000278b cmpb $110, %al + 0x0f, 0x84, 0xc5, 0xff, 0xff, 0xff, //0x0000278d je LBB1_547 + 0x3c, 0x72, //0x00002793 cmpb $114, %al + 0x0f, 0x84, 0xbd, 0xff, 0xff, 0xff, //0x00002795 je LBB1_547 + 0x3c, 0x75, //0x0000279b cmpb $117, %al + 0x0f, 0x85, 0xe1, 0x00, 0x00, 0x00, //0x0000279d jne LBB1_544 + 0x48, 0x8b, 0x45, 0xd0, //0x000027a3 movq $-48(%rbp), %rax + 0x4c, 0x29, 0xf0, //0x000027a7 subq %r14, %rax + 0x48, 0x83, 0xf8, 0x04, //0x000027aa cmpq $4, %rax + 0x0f, 0x8c, 0xc8, 0x00, 0x00, 0x00, //0x000027ae jl LBB1_566 + 0x41, 0x8b, 0x06, //0x000027b4 movl (%r14), %eax + 0x89, 0xc7, //0x000027b7 movl %eax, %edi + 0xf7, 0xd7, //0x000027b9 notl %edi + 0x8d, 0x88, 0xd0, 0xcf, 0xcf, 0xcf, //0x000027bb leal $-808464432(%rax), %ecx + 0x81, 0xe7, 0x80, 0x80, 0x80, 0x80, //0x000027c1 andl $-2139062144, %edi + 0x85, 0xcf, //0x000027c7 testl %ecx, %edi + 0x0f, 0x85, 0xad, 0x00, 0x00, 0x00, //0x000027c9 jne LBB1_566 + 0x8d, 0x88, 0x19, 0x19, 0x19, 0x19, //0x000027cf leal $421075225(%rax), %ecx + 0x09, 0xc1, //0x000027d5 orl %eax, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x000027d7 testl $-2139062144, %ecx + 0x0f, 0x85, 0x99, 0x00, 0x00, 0x00, //0x000027dd jne LBB1_566 + 0x89, 0xc6, //0x000027e3 movl %eax, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x000027e5 andl $2139062143, %esi + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x000027eb movl $-1061109568, %ecx + 0x29, 0xf1, //0x000027f0 subl %esi, %ecx + 0x8d, 0x9e, 0x46, 0x46, 0x46, 0x46, //0x000027f2 leal $1179010630(%rsi), %ebx + 0x21, 0xf9, //0x000027f8 andl %edi, %ecx + 0x85, 0xd9, //0x000027fa testl %ebx, %ecx + 0x0f, 0x85, 0x7a, 0x00, 0x00, 0x00, //0x000027fc jne LBB1_566 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x00002802 movl $-522133280, %ecx + 0x29, 0xf1, //0x00002807 subl %esi, %ecx + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x00002809 addl $960051513, %esi + 0x21, 0xcf, //0x0000280f andl %ecx, %edi + 0x85, 0xf7, //0x00002811 testl %esi, %edi + 0x0f, 0x85, 0x63, 0x00, 0x00, 0x00, //0x00002813 jne LBB1_566 + 0x0f, 0xc8, //0x00002819 bswapl %eax + 0x89, 0xc1, //0x0000281b movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x0000281d shrl $4, %ecx + 0xf7, 0xd1, //0x00002820 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00002822 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00002828 leal (%rcx,%rcx,8), %ecx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000282b andl $252645135, %eax + 0x01, 0xc8, //0x00002830 addl %ecx, %eax + 0x89, 0xc7, //0x00002832 movl %eax, %edi + 0xc1, 0xef, 0x04, //0x00002834 shrl $4, %edi + 0x09, 0xc7, //0x00002837 orl %eax, %edi + 0x89, 0xf8, //0x00002839 movl %edi, %eax + 0xc1, 0xe8, 0x08, //0x0000283b shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x0000283e andl $65280, %eax + 0x89, 0xf9, //0x00002843 movl %edi, %ecx + 0x81, 0xe1, 0x80, 0x00, 0x00, 0x00, //0x00002845 andl $128, %ecx + 0x09, 0xc1, //0x0000284b orl %eax, %ecx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x0000284d je LBB1_561 + 0xbf, 0xff, 0x00, 0x00, 0x00, //0x00002853 movl $255, %edi + //0x00002858 LBB1_561 + 0x48, 0x83, 0xc2, 0x06, //0x00002858 addq $6, %rdx + 0x49, 0x89, 0xd7, //0x0000285c movq %rdx, %r15 + //0x0000285f LBB1_562 + 0x40, 0x80, 0xff, 0x0a, //0x0000285f cmpb $10, %dil + 0x0f, 0x84, 0xda, 0xfe, 0xff, 0xff, //0x00002863 je LBB1_565 + 0x40, 0x80, 0xff, 0x0d, //0x00002869 cmpb $13, %dil + 0x0f, 0x84, 0xd0, 0xfe, 0xff, 0xff, //0x0000286d je LBB1_565 + 0x40, 0x80, 0xff, 0x3d, //0x00002873 cmpb $61, %dil + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00002877 jmp LBB1_567 + //0x0000287c LBB1_566 + 0x4d, 0x89, 0xf7, //0x0000287c movq %r14, %r15 + 0xe9, 0x27, 0x00, 0x00, 0x00, //0x0000287f jmp LBB1_567 + //0x00002884 LBB1_544 + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x00002884 movabsq $-4294967296, %r8 + 0x4d, 0x89, 0xf7, //0x0000288e movq %r14, %r15 + 0xe9, 0x43, 0xfc, 0xff, 0xff, //0x00002891 jmp LBB1_495 + //0x00002896 LBB1_545 + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x00002896 movabsq $-4294967296, %r8 + 0x49, 0x89, 0xdf, //0x000028a0 movq %rbx, %r15 + 0xe9, 0x31, 0xfc, 0xff, 0xff, //0x000028a3 jmp LBB1_495 + //0x000028a8 LBB1_546 + 0x49, 0x89, 0xd7, //0x000028a8 movq %rdx, %r15 + //0x000028ab LBB1_567 + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x000028ab movabsq $-4294967296, %r8 + 0xe9, 0x1f, 0xfc, 0xff, 0xff, //0x000028b5 jmp LBB1_495 + //0x000028ba LBB1_570 + 0x4c, 0x89, 0xfa, //0x000028ba movq %r15, %rdx + 0x49, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, //0x000028bd movabsq $-4294967296, %r8 + 0xe9, 0x0d, 0xfc, 0xff, 0xff, //0x000028c7 jmp LBB1_495 + //0x000028cc LBB1_574 + 0x4d, 0x89, 0xf9, //0x000028cc movq %r15, %r9 + 0x48, 0x8b, 0x45, 0x90, //0x000028cf movq $-112(%rbp), %rax + 0x48, 0x83, 0xc0, 0xfc, //0x000028d3 addq $-4, %rax + 0x48, 0x3b, 0x45, 0xb0, //0x000028d7 cmpq $-80(%rbp), %rax + 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x000028db jae LBB1_575 + 0xe9, 0x34, 0x10, 0x00, 0x00, //0x000028e1 jmp LBB1_851 + //0x000028e6 LBB1_572 + 0x4d, 0x89, 0xcf, //0x000028e6 movq %r9, %r15 + 0x48, 0x8b, 0x5d, 0xd0, //0x000028e9 movq $-48(%rbp), %rbx + 0x48, 0x8b, 0x45, 0x90, //0x000028ed movq $-112(%rbp), %rax + 0x48, 0x83, 0xc0, 0xfc, //0x000028f1 addq $-4, %rax + 0x48, 0x3b, 0x45, 0xb0, //0x000028f5 cmpq $-80(%rbp), %rax + 0x0f, 0x82, 0x1b, 0x10, 0x00, 0x00, //0x000028f9 jb LBB1_851 + //0x000028ff LBB1_575 + 0x4c, 0x8d, 0x6b, 0xfc, //0x000028ff leaq $-4(%rbx), %r13 + 0x4d, 0x39, 0xfd, //0x00002903 cmpq %r15, %r13 + 0x0f, 0x82, 0x0e, 0x10, 0x00, 0x00, //0x00002906 jb LBB1_851 + 0x49, 0x89, 0xc6, //0x0000290c movq %rax, %r14 + 0x44, 0x8b, 0x65, 0xbc, //0x0000290f movl $-68(%rbp), %r12d + 0x41, 0x83, 0xe4, 0x02, //0x00002913 andl $2, %r12d + 0x48, 0x8b, 0x45, 0xa8, //0x00002917 movq $-88(%rbp), %rax + 0x48, 0x8b, 0x4d, 0x88, //0x0000291b movq $-120(%rbp), %rcx + 0x48, 0x8d, 0x54, 0x01, 0xfe, //0x0000291f leaq $-2(%rcx,%rax), %rdx + 0x48, 0x89, 0x55, 0xa0, //0x00002924 movq %rdx, $-96(%rbp) + 0x48, 0x8d, 0x44, 0x01, 0xfd, //0x00002928 leaq $-3(%rcx,%rax), %rax + 0x48, 0x89, 0x45, 0x90, //0x0000292d movq %rax, $-112(%rbp) + 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00002931 jmp LBB1_577 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002936 .p2align 4, 0x90 + //0x00002940 LBB1_578 + 0xc1, 0xe2, 0x1a, //0x00002940 shll $26, %edx + 0xc1, 0xe0, 0x14, //0x00002943 shll $20, %eax + 0x09, 0xd0, //0x00002946 orl %edx, %eax + 0xc1, 0xe3, 0x0e, //0x00002948 shll $14, %ebx + 0xc1, 0xe1, 0x08, //0x0000294b shll $8, %ecx + 0x09, 0xd9, //0x0000294e orl %ebx, %ecx + 0x09, 0xc1, //0x00002950 orl %eax, %ecx + 0x0f, 0xc9, //0x00002952 bswapl %ecx + 0x48, 0x8b, 0x55, 0xb0, //0x00002954 movq $-80(%rbp), %rdx + 0x89, 0x0a, //0x00002958 movl %ecx, (%rdx) + 0x49, 0x83, 0xc7, 0x04, //0x0000295a addq $4, %r15 + 0x48, 0x83, 0xc2, 0x03, //0x0000295e addq $3, %rdx + 0x48, 0x89, 0x55, 0xb0, //0x00002962 movq %rdx, $-80(%rbp) + 0x49, 0x39, 0xd6, //0x00002966 cmpq %rdx, %r14 + 0x0f, 0x82, 0xbb, 0x0f, 0x00, 0x00, //0x00002969 jb LBB1_852 + //0x0000296f LBB1_727 + 0x4d, 0x89, 0xf9, //0x0000296f movq %r15, %r9 + 0x4d, 0x39, 0xfd, //0x00002972 cmpq %r15, %r13 + 0x0f, 0x82, 0xaf, 0x0f, 0x00, 0x00, //0x00002975 jb LBB1_852 + //0x0000297b LBB1_577 + 0x41, 0x0f, 0xb6, 0x07, //0x0000297b movzbl (%r15), %eax + 0x48, 0x8b, 0x75, 0xc0, //0x0000297f movq $-64(%rbp), %rsi + 0x0f, 0xb6, 0x14, 0x06, //0x00002983 movzbl (%rsi,%rax), %edx + 0x41, 0x0f, 0xb6, 0x47, 0x01, //0x00002987 movzbl $1(%r15), %eax + 0x0f, 0xb6, 0x04, 0x06, //0x0000298c movzbl (%rsi,%rax), %eax + 0x41, 0x0f, 0xb6, 0x4f, 0x02, //0x00002990 movzbl $2(%r15), %ecx + 0x0f, 0xb6, 0x1c, 0x0e, //0x00002995 movzbl (%rsi,%rcx), %ebx + 0x41, 0x0f, 0xb6, 0x4f, 0x03, //0x00002999 movzbl $3(%r15), %ecx + 0x0f, 0xb6, 0x0c, 0x0e, //0x0000299e movzbl (%rsi,%rcx), %ecx + 0x89, 0xc7, //0x000029a2 movl %eax, %edi + 0x09, 0xd7, //0x000029a4 orl %edx, %edi + 0x89, 0xde, //0x000029a6 movl %ebx, %esi + 0x09, 0xce, //0x000029a8 orl %ecx, %esi + 0x09, 0xfe, //0x000029aa orl %edi, %esi + 0x40, 0x80, 0xfe, 0xff, //0x000029ac cmpb $-1, %sil + 0x0f, 0x85, 0x8a, 0xff, 0xff, 0xff, //0x000029b0 jne LBB1_578 + 0x48, 0x8b, 0x5d, 0xd0, //0x000029b6 movq $-48(%rbp), %rbx + 0x4c, 0x39, 0xfb, //0x000029ba cmpq %r15, %rbx + 0x0f, 0x86, 0x1d, 0x02, 0x00, 0x00, //0x000029bd jbe LBB1_611 + 0xf6, 0x45, 0xbc, 0x08, //0x000029c3 testb $8, $-68(%rbp) + 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x000029c7 je LBB1_583 + 0x4c, 0x89, 0xfa, //0x000029cd movq %r15, %rdx + 0xe9, 0xc7, 0x00, 0x00, 0x00, //0x000029d0 jmp LBB1_594 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000029d5 .p2align 4, 0x90 + //0x000029e0 LBB1_582 + 0x49, 0xff, 0xc7, //0x000029e0 incq %r15 + 0x49, 0x39, 0xdf, //0x000029e3 cmpq %rbx, %r15 + 0x0f, 0x83, 0xde, 0x01, 0x00, 0x00, //0x000029e6 jae LBB1_609 + //0x000029ec LBB1_583 + 0x41, 0x0f, 0xb6, 0x0f, //0x000029ec movzbl (%r15), %ecx + 0x48, 0x83, 0xf9, 0x0d, //0x000029f0 cmpq $13, %rcx + 0x0f, 0x84, 0xe6, 0xff, 0xff, 0xff, //0x000029f4 je LBB1_582 + 0x80, 0xf9, 0x0a, //0x000029fa cmpb $10, %cl + 0x0f, 0x84, 0xdd, 0xff, 0xff, 0xff, //0x000029fd je LBB1_582 + 0x48, 0x8b, 0x45, 0xc0, //0x00002a03 movq $-64(%rbp), %rax + 0x0f, 0xb6, 0x04, 0x08, //0x00002a07 movzbl (%rax,%rcx), %eax + 0x49, 0xff, 0xc7, //0x00002a0b incq %r15 + 0x89, 0x45, 0xc8, //0x00002a0e movl %eax, $-56(%rbp) + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00002a11 cmpl $255, %eax + 0x0f, 0x84, 0x84, 0x02, 0x00, 0x00, //0x00002a16 je LBB1_623 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00002a1c movl $1, %r11d + 0x49, 0x39, 0xdf, //0x00002a22 cmpq %rbx, %r15 + 0x0f, 0x82, 0x11, 0x00, 0x00, 0x00, //0x00002a25 jb LBB1_588 + 0xe9, 0x99, 0x06, 0x00, 0x00, //0x00002a2b jmp LBB1_693 + //0x00002a30 .p2align 4, 0x90 + //0x00002a30 LBB1_587 + 0x49, 0xff, 0xc7, //0x00002a30 incq %r15 + 0x49, 0x39, 0xdf, //0x00002a33 cmpq %rbx, %r15 + 0x0f, 0x83, 0x3d, 0x04, 0x00, 0x00, //0x00002a36 jae LBB1_675 + //0x00002a3c LBB1_588 + 0x41, 0x0f, 0xb6, 0x0f, //0x00002a3c movzbl (%r15), %ecx + 0x48, 0x83, 0xf9, 0x0d, //0x00002a40 cmpq $13, %rcx + 0x0f, 0x84, 0xe6, 0xff, 0xff, 0xff, //0x00002a44 je LBB1_587 + 0x80, 0xf9, 0x0a, //0x00002a4a cmpb $10, %cl + 0x0f, 0x84, 0xdd, 0xff, 0xff, 0xff, //0x00002a4d je LBB1_587 + 0x48, 0x8b, 0x45, 0xc0, //0x00002a53 movq $-64(%rbp), %rax + 0x0f, 0xb6, 0x04, 0x08, //0x00002a57 movzbl (%rax,%rcx), %eax + 0x49, 0xff, 0xc7, //0x00002a5b incq %r15 + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00002a5e cmpl $255, %eax + 0x0f, 0x84, 0xb6, 0x06, 0x00, 0x00, //0x00002a63 je LBB1_716 + 0x8b, 0x4d, 0xc8, //0x00002a69 movl $-56(%rbp), %ecx + 0xc1, 0xe1, 0x06, //0x00002a6c shll $6, %ecx + 0x09, 0xc1, //0x00002a6f orl %eax, %ecx + 0x89, 0x4d, 0xc8, //0x00002a71 movl %ecx, $-56(%rbp) + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00002a74 movl $2, %r11d + 0x49, 0x39, 0xdf, //0x00002a7a cmpq %rbx, %r15 + 0x0f, 0x82, 0x8f, 0x01, 0x00, 0x00, //0x00002a7d jb LBB1_613 + 0xe9, 0x41, 0x06, 0x00, 0x00, //0x00002a83 jmp LBB1_693 + //0x00002a88 LBB1_592 + 0x3c, 0x6e, //0x00002a88 cmpb $110, %al + 0x0f, 0x85, 0xd6, 0x01, 0x00, 0x00, //0x00002a8a jne LBB1_618 + //0x00002a90 .p2align 4, 0x90 + //0x00002a90 LBB1_593 + 0x4c, 0x89, 0xfa, //0x00002a90 movq %r15, %rdx + 0x49, 0x39, 0xdf, //0x00002a93 cmpq %rbx, %r15 + 0x0f, 0x83, 0x2e, 0x01, 0x00, 0x00, //0x00002a96 jae LBB1_609 + //0x00002a9c LBB1_594 + 0x48, 0x8d, 0x42, 0x01, //0x00002a9c leaq $1(%rdx), %rax + 0x0f, 0xb6, 0x0a, //0x00002aa0 movzbl (%rdx), %ecx + 0x80, 0xf9, 0x5c, //0x00002aa3 cmpb $92, %cl + 0x0f, 0x85, 0x04, 0x01, 0x00, 0x00, //0x00002aa6 jne LBB1_607 + 0x4c, 0x8d, 0x7a, 0x02, //0x00002aac leaq $2(%rdx), %r15 + 0xb1, 0xff, //0x00002ab0 movb $-1, %cl + 0x49, 0x39, 0xdf, //0x00002ab2 cmpq %rbx, %r15 + 0x0f, 0x87, 0xa3, 0x01, 0x00, 0x00, //0x00002ab5 ja LBB1_617 + 0x0f, 0xb6, 0x00, //0x00002abb movzbl (%rax), %eax + 0x3c, 0x71, //0x00002abe cmpb $113, %al + 0x0f, 0x8e, 0xc2, 0xff, 0xff, 0xff, //0x00002ac0 jle LBB1_592 + 0x3c, 0x72, //0x00002ac6 cmpb $114, %al + 0x0f, 0x84, 0xc2, 0xff, 0xff, 0xff, //0x00002ac8 je LBB1_593 + 0x3c, 0x75, //0x00002ace cmpb $117, %al + 0x0f, 0x85, 0x9a, 0x01, 0x00, 0x00, //0x00002ad0 jne LBB1_620 + 0x48, 0x89, 0xd8, //0x00002ad6 movq %rbx, %rax + 0x4c, 0x29, 0xf8, //0x00002ad9 subq %r15, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00002adc cmpq $4, %rax + 0x0f, 0x8c, 0x8a, 0x01, 0x00, 0x00, //0x00002ae0 jl LBB1_620 + 0x41, 0x8b, 0x07, //0x00002ae6 movl (%r15), %eax + 0x89, 0xc6, //0x00002ae9 movl %eax, %esi + 0xf7, 0xd6, //0x00002aeb notl %esi + 0x8d, 0xb8, 0xd0, 0xcf, 0xcf, 0xcf, //0x00002aed leal $-808464432(%rax), %edi + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00002af3 andl $-2139062144, %esi + 0x85, 0xfe, //0x00002af9 testl %edi, %esi + 0x0f, 0x85, 0x6f, 0x01, 0x00, 0x00, //0x00002afb jne LBB1_620 + 0x8d, 0xb8, 0x19, 0x19, 0x19, 0x19, //0x00002b01 leal $421075225(%rax), %edi + 0x09, 0xc7, //0x00002b07 orl %eax, %edi + 0xf7, 0xc7, 0x80, 0x80, 0x80, 0x80, //0x00002b09 testl $-2139062144, %edi + 0x0f, 0x85, 0x5b, 0x01, 0x00, 0x00, //0x00002b0f jne LBB1_620 + 0x89, 0xc7, //0x00002b15 movl %eax, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x00002b17 andl $2139062143, %edi + 0xbb, 0xc0, 0xc0, 0xc0, 0xc0, //0x00002b1d movl $-1061109568, %ebx + 0x29, 0xfb, //0x00002b22 subl %edi, %ebx + 0x44, 0x8d, 0x87, 0x46, 0x46, 0x46, 0x46, //0x00002b24 leal $1179010630(%rdi), %r8d + 0x21, 0xf3, //0x00002b2b andl %esi, %ebx + 0x44, 0x85, 0xc3, //0x00002b2d testl %r8d, %ebx + 0x48, 0x8b, 0x5d, 0xd0, //0x00002b30 movq $-48(%rbp), %rbx + 0x0f, 0x85, 0x36, 0x01, 0x00, 0x00, //0x00002b34 jne LBB1_620 + 0xbb, 0xe0, 0xe0, 0xe0, 0xe0, //0x00002b3a movl $-522133280, %ebx + 0x29, 0xfb, //0x00002b3f subl %edi, %ebx + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x00002b41 addl $960051513, %edi + 0x21, 0xde, //0x00002b47 andl %ebx, %esi + 0x48, 0x8b, 0x5d, 0xd0, //0x00002b49 movq $-48(%rbp), %rbx + 0x85, 0xfe, //0x00002b4d testl %edi, %esi + 0x0f, 0x85, 0x1b, 0x01, 0x00, 0x00, //0x00002b4f jne LBB1_620 + 0x0f, 0xc8, //0x00002b55 bswapl %eax + 0x89, 0xc1, //0x00002b57 movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00002b59 shrl $4, %ecx + 0xf7, 0xd1, //0x00002b5c notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00002b5e andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00002b64 leal (%rcx,%rcx,8), %ecx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x00002b67 andl $252645135, %eax + 0x01, 0xc8, //0x00002b6c addl %ecx, %eax + 0x89, 0xc1, //0x00002b6e movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00002b70 shrl $4, %ecx + 0x09, 0xc1, //0x00002b73 orl %eax, %ecx + 0x89, 0xc8, //0x00002b75 movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x00002b77 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00002b7a andl $65280, %eax + 0x89, 0xce, //0x00002b7f movl %ecx, %esi + 0x81, 0xe6, 0x80, 0x00, 0x00, 0x00, //0x00002b81 andl $128, %esi + 0x09, 0xc6, //0x00002b87 orl %eax, %esi + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00002b89 je LBB1_606 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x00002b8f movl $255, %ecx + //0x00002b94 LBB1_606 + 0x48, 0x83, 0xc2, 0x06, //0x00002b94 addq $6, %rdx + 0x49, 0x89, 0xd7, //0x00002b98 movq %rdx, %r15 + 0x80, 0xf9, 0x0d, //0x00002b9b cmpb $13, %cl + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x00002b9e jne LBB1_608 + 0xe9, 0xe7, 0xfe, 0xff, 0xff, //0x00002ba4 jmp LBB1_593 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002ba9 .p2align 4, 0x90 + //0x00002bb0 LBB1_607 + 0x49, 0x89, 0xc7, //0x00002bb0 movq %rax, %r15 + 0x80, 0xf9, 0x0d, //0x00002bb3 cmpb $13, %cl + 0x0f, 0x84, 0xd4, 0xfe, 0xff, 0xff, //0x00002bb6 je LBB1_593 + //0x00002bbc LBB1_608 + 0x80, 0xf9, 0x0a, //0x00002bbc cmpb $10, %cl + 0x0f, 0x84, 0xcb, 0xfe, 0xff, 0xff, //0x00002bbf je LBB1_593 + 0xe9, 0xa6, 0x00, 0x00, 0x00, //0x00002bc5 jmp LBB1_620 + //0x00002bca LBB1_609 + 0xc7, 0x45, 0xc8, 0x00, 0x00, 0x00, 0x00, //0x00002bca movl $0, $-56(%rbp) + 0x45, 0x31, 0xdb, //0x00002bd1 xorl %r11d, %r11d + //0x00002bd4 LBB1_610 + 0x45, 0x85, 0xdb, //0x00002bd4 testl %r11d, %r11d + 0x0f, 0x85, 0xec, 0x04, 0x00, 0x00, //0x00002bd7 jne LBB1_693 + 0x90, 0x90, 0x90, //0x00002bdd .p2align 4, 0x90 + //0x00002be0 LBB1_611 + 0x48, 0x8b, 0x55, 0xb0, //0x00002be0 movq $-80(%rbp), %rdx + 0x48, 0x89, 0x55, 0xb0, //0x00002be4 movq %rdx, $-80(%rbp) + 0x49, 0x39, 0xd6, //0x00002be8 cmpq %rdx, %r14 + 0x0f, 0x83, 0x7e, 0xfd, 0xff, 0xff, //0x00002beb jae LBB1_727 + 0xe9, 0x34, 0x0d, 0x00, 0x00, //0x00002bf1 jmp LBB1_852 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002bf6 .p2align 4, 0x90 + //0x00002c00 LBB1_612 + 0x49, 0xff, 0xc7, //0x00002c00 incq %r15 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00002c03 movl $2, %r11d + 0x49, 0x39, 0xdf, //0x00002c09 cmpq %rbx, %r15 + 0x0f, 0x83, 0xc2, 0xff, 0xff, 0xff, //0x00002c0c jae LBB1_610 + //0x00002c12 LBB1_613 + 0x41, 0x0f, 0xb6, 0x0f, //0x00002c12 movzbl (%r15), %ecx + 0x48, 0x83, 0xf9, 0x0d, //0x00002c16 cmpq $13, %rcx + 0x0f, 0x84, 0xe0, 0xff, 0xff, 0xff, //0x00002c1a je LBB1_612 + 0x80, 0xf9, 0x0a, //0x00002c20 cmpb $10, %cl + 0x0f, 0x84, 0xd7, 0xff, 0xff, 0xff, //0x00002c23 je LBB1_612 + 0x48, 0x8b, 0x45, 0xc0, //0x00002c29 movq $-64(%rbp), %rax + 0x0f, 0xb6, 0x04, 0x08, //0x00002c2d movzbl (%rax,%rcx), %eax + 0x49, 0xff, 0xc7, //0x00002c31 incq %r15 + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00002c34 cmpl $255, %eax + 0x0f, 0x84, 0x0e, 0x09, 0x00, 0x00, //0x00002c39 je LBB1_759 + 0x8b, 0x4d, 0xc8, //0x00002c3f movl $-56(%rbp), %ecx + 0xc1, 0xe1, 0x06, //0x00002c42 shll $6, %ecx + 0x09, 0xc1, //0x00002c45 orl %eax, %ecx + 0x89, 0x4d, 0xc8, //0x00002c47 movl %ecx, $-56(%rbp) + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00002c4a movl $3, %r11d + 0x49, 0x39, 0xdf, //0x00002c50 cmpq %rbx, %r15 + 0x0f, 0x82, 0xa6, 0x03, 0x00, 0x00, //0x00002c53 jb LBB1_677 + 0xe9, 0x6b, 0x04, 0x00, 0x00, //0x00002c59 jmp LBB1_693 + //0x00002c5e LBB1_617 + 0x49, 0x89, 0xc7, //0x00002c5e movq %rax, %r15 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00002c61 jmp LBB1_620 + //0x00002c66 LBB1_618 + 0x3c, 0x2f, //0x00002c66 cmpb $47, %al + 0x0f, 0x85, 0x02, 0x00, 0x00, 0x00, //0x00002c68 jne LBB1_620 + 0x89, 0xc1, //0x00002c6e movl %eax, %ecx + //0x00002c70 LBB1_620 + 0x0f, 0xb6, 0xc1, //0x00002c70 movzbl %cl, %eax + 0x48, 0x8b, 0x55, 0xc0, //0x00002c73 movq $-64(%rbp), %rdx + 0x0f, 0xb6, 0x04, 0x02, //0x00002c77 movzbl (%rdx,%rax), %eax + 0x89, 0x45, 0xc8, //0x00002c7b movl %eax, $-56(%rbp) + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00002c7e cmpl $255, %eax + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00002c83 je LBB1_623 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00002c89 movl $1, %r11d + 0x49, 0x39, 0xdf, //0x00002c8f cmpq %rbx, %r15 + 0x0f, 0x83, 0x31, 0x04, 0x00, 0x00, //0x00002c92 jae LBB1_693 + 0x4c, 0x89, 0xfa, //0x00002c98 movq %r15, %rdx + 0xe9, 0xc8, 0x00, 0x00, 0x00, //0x00002c9b jmp LBB1_639 + //0x00002ca0 LBB1_623 + 0xc7, 0x45, 0xc8, 0x00, 0x00, 0x00, 0x00, //0x00002ca0 movl $0, $-56(%rbp) + 0x45, 0x31, 0xdb, //0x00002ca7 xorl %r11d, %r11d + //0x00002caa LBB1_624 + 0x45, 0x85, 0xe4, //0x00002caa testl %r12d, %r12d + 0x0f, 0x85, 0x3e, 0x04, 0x00, 0x00, //0x00002cad jne LBB1_696 + 0x41, 0x83, 0xfb, 0x02, //0x00002cb3 cmpl $2, %r11d + 0x0f, 0x82, 0x34, 0x04, 0x00, 0x00, //0x00002cb7 jb LBB1_696 + 0x80, 0xf9, 0x3d, //0x00002cbd cmpb $61, %cl + 0x0f, 0x85, 0x2b, 0x04, 0x00, 0x00, //0x00002cc0 jne LBB1_696 + 0x41, 0xba, 0x05, 0x00, 0x00, 0x00, //0x00002cc6 movl $5, %r10d + 0x45, 0x29, 0xda, //0x00002ccc subl %r11d, %r10d + 0xf6, 0x45, 0xbc, 0x08, //0x00002ccf testb $8, $-68(%rbp) + 0x0f, 0x85, 0xab, 0x01, 0x00, 0x00, //0x00002cd3 jne LBB1_655 + 0x4c, 0x39, 0x7d, 0xd0, //0x00002cd9 cmpq %r15, $-48(%rbp) + 0x0f, 0x86, 0x2a, 0x09, 0x00, 0x00, //0x00002cdd jbe LBB1_720 + 0x49, 0x8d, 0x4f, 0x03, //0x00002ce3 leaq $3(%r15), %rcx + 0x48, 0x8b, 0x5d, 0xa0, //0x00002ce7 movq $-96(%rbp), %rbx + 0x4c, 0x29, 0xfb, //0x00002ceb subq %r15, %rbx + 0x49, 0x8d, 0x57, 0x04, //0x00002cee leaq $4(%r15), %rdx + 0x48, 0x8b, 0x7d, 0x90, //0x00002cf2 movq $-112(%rbp), %rdi + 0x4c, 0x29, 0xff, //0x00002cf6 subq %r15, %rdi + 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x00002cf9 jmp LBB1_631 + 0x90, 0x90, //0x00002cfe .p2align 4, 0x90 + //0x00002d00 LBB1_630 + 0x49, 0xff, 0xc7, //0x00002d00 incq %r15 + 0x48, 0xff, 0xc1, //0x00002d03 incq %rcx + 0x48, 0xff, 0xcb, //0x00002d06 decq %rbx + 0x48, 0xff, 0xc2, //0x00002d09 incq %rdx + 0x48, 0xff, 0xcf, //0x00002d0c decq %rdi + 0x4c, 0x39, 0x7d, 0xd0, //0x00002d0f cmpq %r15, $-48(%rbp) + 0x0f, 0x84, 0xf0, 0x08, 0x00, 0x00, //0x00002d13 je LBB1_717 + //0x00002d19 LBB1_631 + 0x41, 0x0f, 0xb6, 0x07, //0x00002d19 movzbl (%r15), %eax + 0x3c, 0x0a, //0x00002d1d cmpb $10, %al + 0x0f, 0x84, 0xdb, 0xff, 0xff, 0xff, //0x00002d1f je LBB1_630 + 0x3c, 0x0d, //0x00002d25 cmpb $13, %al + 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x00002d27 je LBB1_630 + 0x3c, 0x3d, //0x00002d2d cmpb $61, %al + 0x0f, 0x85, 0x30, 0x05, 0x00, 0x00, //0x00002d2f jne LBB1_728 + 0x49, 0xff, 0xc7, //0x00002d35 incq %r15 + 0x41, 0x83, 0xfa, 0x02, //0x00002d38 cmpl $2, %r10d + 0x0f, 0x84, 0xaf, 0x03, 0x00, 0x00, //0x00002d3c je LBB1_696 + 0x4c, 0x39, 0x7d, 0xd0, //0x00002d42 cmpq %r15, $-48(%rbp) + 0x0f, 0x87, 0x04, 0x03, 0x00, 0x00, //0x00002d46 ja LBB1_682 + 0xe9, 0xbc, 0x08, 0x00, 0x00, //0x00002d4c jmp LBB1_720 + //0x00002d51 LBB1_636 + 0x3c, 0x6e, //0x00002d51 cmpb $110, %al + 0x0f, 0x85, 0x2f, 0x03, 0x00, 0x00, //0x00002d53 jne LBB1_688 + //0x00002d59 LBB1_637 + 0x4d, 0x89, 0xc7, //0x00002d59 movq %r8, %r15 + //0x00002d5c LBB1_638 + 0x4c, 0x89, 0xfa, //0x00002d5c movq %r15, %rdx + 0x49, 0x39, 0xdf, //0x00002d5f cmpq %rbx, %r15 + 0x0f, 0x83, 0x11, 0x01, 0x00, 0x00, //0x00002d62 jae LBB1_675 + //0x00002d68 LBB1_639 + 0x4c, 0x8d, 0x7a, 0x01, //0x00002d68 leaq $1(%rdx), %r15 + 0x0f, 0xb6, 0x0a, //0x00002d6c movzbl (%rdx), %ecx + 0x80, 0xf9, 0x5c, //0x00002d6f cmpb $92, %cl + 0x0f, 0x85, 0xea, 0x00, 0x00, 0x00, //0x00002d72 jne LBB1_652 + 0x4c, 0x8d, 0x42, 0x02, //0x00002d78 leaq $2(%rdx), %r8 + 0xb1, 0xff, //0x00002d7c movb $-1, %cl + 0x49, 0x39, 0xd8, //0x00002d7e cmpq %rbx, %r8 + 0x0f, 0x87, 0x12, 0x03, 0x00, 0x00, //0x00002d81 ja LBB1_691 + 0x41, 0x0f, 0xb6, 0x07, //0x00002d87 movzbl (%r15), %eax + 0x3c, 0x71, //0x00002d8b cmpb $113, %al + 0x0f, 0x8e, 0xbe, 0xff, 0xff, 0xff, //0x00002d8d jle LBB1_636 + 0x3c, 0x72, //0x00002d93 cmpb $114, %al + 0x0f, 0x84, 0xbe, 0xff, 0xff, 0xff, //0x00002d95 je LBB1_637 + 0x3c, 0x75, //0x00002d9b cmpb $117, %al + 0x0f, 0x85, 0xef, 0x02, 0x00, 0x00, //0x00002d9d jne LBB1_690 + 0x48, 0x8b, 0x45, 0xd0, //0x00002da3 movq $-48(%rbp), %rax + 0x4c, 0x29, 0xc0, //0x00002da7 subq %r8, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00002daa cmpq $4, %rax + 0x0f, 0x8c, 0xde, 0x02, 0x00, 0x00, //0x00002dae jl LBB1_690 + 0x41, 0x8b, 0x18, //0x00002db4 movl (%r8), %ebx + 0x89, 0xde, //0x00002db7 movl %ebx, %esi + 0xf7, 0xd6, //0x00002db9 notl %esi + 0x8d, 0x83, 0xd0, 0xcf, 0xcf, 0xcf, //0x00002dbb leal $-808464432(%rbx), %eax + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00002dc1 andl $-2139062144, %esi + 0x85, 0xc6, //0x00002dc7 testl %eax, %esi + 0x0f, 0x85, 0xc3, 0x02, 0x00, 0x00, //0x00002dc9 jne LBB1_690 + 0x8d, 0x83, 0x19, 0x19, 0x19, 0x19, //0x00002dcf leal $421075225(%rbx), %eax + 0x09, 0xd8, //0x00002dd5 orl %ebx, %eax + 0xa9, 0x80, 0x80, 0x80, 0x80, //0x00002dd7 testl $-2139062144, %eax + 0x0f, 0x85, 0xb0, 0x02, 0x00, 0x00, //0x00002ddc jne LBB1_690 + 0x89, 0xd8, //0x00002de2 movl %ebx, %eax + 0x25, 0x7f, 0x7f, 0x7f, 0x7f, //0x00002de4 andl $2139062143, %eax + 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, //0x00002de9 movl $-1061109568, %edi + 0x29, 0xc7, //0x00002dee subl %eax, %edi + 0x44, 0x8d, 0x90, 0x46, 0x46, 0x46, 0x46, //0x00002df0 leal $1179010630(%rax), %r10d + 0x21, 0xf7, //0x00002df7 andl %esi, %edi + 0x44, 0x85, 0xd7, //0x00002df9 testl %r10d, %edi + 0x0f, 0x85, 0x90, 0x02, 0x00, 0x00, //0x00002dfc jne LBB1_690 + 0xbf, 0xe0, 0xe0, 0xe0, 0xe0, //0x00002e02 movl $-522133280, %edi + 0x29, 0xc7, //0x00002e07 subl %eax, %edi + 0x05, 0x39, 0x39, 0x39, 0x39, //0x00002e09 addl $960051513, %eax + 0x21, 0xfe, //0x00002e0e andl %edi, %esi + 0x85, 0xc6, //0x00002e10 testl %eax, %esi + 0x0f, 0x85, 0x7a, 0x02, 0x00, 0x00, //0x00002e12 jne LBB1_690 + 0x0f, 0xcb, //0x00002e18 bswapl %ebx + 0x89, 0xd8, //0x00002e1a movl %ebx, %eax + 0xc1, 0xe8, 0x04, //0x00002e1c shrl $4, %eax + 0xf7, 0xd0, //0x00002e1f notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x00002e21 andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x00002e26 leal (%rax,%rax,8), %eax + 0x81, 0xe3, 0x0f, 0x0f, 0x0f, 0x0f, //0x00002e29 andl $252645135, %ebx + 0x01, 0xc3, //0x00002e2f addl %eax, %ebx + 0x89, 0xd9, //0x00002e31 movl %ebx, %ecx + 0xc1, 0xe9, 0x04, //0x00002e33 shrl $4, %ecx + 0x09, 0xd9, //0x00002e36 orl %ebx, %ecx + 0x89, 0xc8, //0x00002e38 movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x00002e3a shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00002e3d andl $65280, %eax + 0x89, 0xce, //0x00002e42 movl %ecx, %esi + 0x81, 0xe6, 0x80, 0x00, 0x00, 0x00, //0x00002e44 andl $128, %esi + 0x09, 0xc6, //0x00002e4a orl %eax, %esi + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00002e4c je LBB1_651 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x00002e52 movl $255, %ecx + //0x00002e57 LBB1_651 + 0x48, 0x83, 0xc2, 0x06, //0x00002e57 addq $6, %rdx + 0x49, 0x89, 0xd7, //0x00002e5b movq %rdx, %r15 + 0x48, 0x8b, 0x5d, 0xd0, //0x00002e5e movq $-48(%rbp), %rbx + //0x00002e62 LBB1_652 + 0x80, 0xf9, 0x0a, //0x00002e62 cmpb $10, %cl + 0x0f, 0x84, 0xf1, 0xfe, 0xff, 0xff, //0x00002e65 je LBB1_638 + 0x80, 0xf9, 0x0d, //0x00002e6b cmpb $13, %cl + 0x0f, 0x84, 0xe8, 0xfe, 0xff, 0xff, //0x00002e6e je LBB1_638 + 0xe9, 0x20, 0x02, 0x00, 0x00, //0x00002e74 jmp LBB1_691 + //0x00002e79 LBB1_675 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00002e79 movl $1, %r11d + 0xe9, 0x50, 0xfd, 0xff, 0xff, //0x00002e7f jmp LBB1_610 + //0x00002e84 LBB1_655 + 0x48, 0x8b, 0x55, 0xd0, //0x00002e84 movq $-48(%rbp), %rdx + 0x4c, 0x39, 0xfa, //0x00002e88 cmpq %r15, %rdx + 0x0f, 0x87, 0x28, 0x00, 0x00, 0x00, //0x00002e8b ja LBB1_658 + 0xe9, 0x77, 0x07, 0x00, 0x00, //0x00002e91 jmp LBB1_720 + //0x00002e96 LBB1_674 + 0x48, 0x89, 0xc1, //0x00002e96 movq %rax, %rcx + 0x49, 0x89, 0xcf, //0x00002e99 movq %rcx, %r15 + 0x48, 0x39, 0xd1, //0x00002e9c cmpq %rdx, %rcx + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00002e9f jb LBB1_658 + 0xe9, 0x3b, 0x01, 0x00, 0x00, //0x00002ea5 jmp LBB1_719 + //0x00002eaa LBB1_656 + 0x48, 0x89, 0xc8, //0x00002eaa movq %rcx, %rax + 0x49, 0x89, 0xcf, //0x00002ead movq %rcx, %r15 + 0x48, 0x39, 0xd1, //0x00002eb0 cmpq %rdx, %rcx + 0x0f, 0x83, 0x2c, 0x01, 0x00, 0x00, //0x00002eb3 jae LBB1_719 + //0x00002eb9 LBB1_658 + 0x49, 0x8d, 0x47, 0x01, //0x00002eb9 leaq $1(%r15), %rax + 0x41, 0x0f, 0xb6, 0x0f, //0x00002ebd movzbl (%r15), %ecx + 0x80, 0xf9, 0x5c, //0x00002ec1 cmpb $92, %cl + 0x0f, 0x85, 0xe6, 0x00, 0x00, 0x00, //0x00002ec4 jne LBB1_671 + 0x49, 0x8d, 0x4f, 0x02, //0x00002eca leaq $2(%r15), %rcx + 0x48, 0x39, 0xd1, //0x00002ece cmpq %rdx, %rcx + 0x0f, 0x87, 0x3b, 0x0a, 0x00, 0x00, //0x00002ed1 ja LBB1_827 + 0x0f, 0xb6, 0x00, //0x00002ed7 movzbl (%rax), %eax + 0x3c, 0x6e, //0x00002eda cmpb $110, %al + 0x0f, 0x84, 0xc8, 0xff, 0xff, 0xff, //0x00002edc je LBB1_656 + 0x3c, 0x72, //0x00002ee2 cmpb $114, %al + 0x0f, 0x84, 0xc0, 0xff, 0xff, 0xff, //0x00002ee4 je LBB1_656 + 0x3c, 0x75, //0x00002eea cmpb $117, %al + 0x0f, 0x85, 0x15, 0x0a, 0x00, 0x00, //0x00002eec jne LBB1_847 + 0x48, 0x89, 0xd0, //0x00002ef2 movq %rdx, %rax + 0x48, 0x29, 0xc8, //0x00002ef5 subq %rcx, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00002ef8 cmpq $4, %rax + 0x0f, 0x8c, 0x05, 0x0a, 0x00, 0x00, //0x00002efc jl LBB1_847 + 0x8b, 0x01, //0x00002f02 movl (%rcx), %eax + 0x89, 0xc2, //0x00002f04 movl %eax, %edx + 0xf7, 0xd2, //0x00002f06 notl %edx + 0x8d, 0xb0, 0xd0, 0xcf, 0xcf, 0xcf, //0x00002f08 leal $-808464432(%rax), %esi + 0x81, 0xe2, 0x80, 0x80, 0x80, 0x80, //0x00002f0e andl $-2139062144, %edx + 0x85, 0xf2, //0x00002f14 testl %esi, %edx + 0x0f, 0x85, 0xeb, 0x09, 0x00, 0x00, //0x00002f16 jne LBB1_847 + 0x8d, 0xb0, 0x19, 0x19, 0x19, 0x19, //0x00002f1c leal $421075225(%rax), %esi + 0x09, 0xc6, //0x00002f22 orl %eax, %esi + 0xf7, 0xc6, 0x80, 0x80, 0x80, 0x80, //0x00002f24 testl $-2139062144, %esi + 0x0f, 0x85, 0xd7, 0x09, 0x00, 0x00, //0x00002f2a jne LBB1_847 + 0x89, 0xc6, //0x00002f30 movl %eax, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x00002f32 andl $2139062143, %esi + 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, //0x00002f38 movl $-1061109568, %edi + 0x29, 0xf7, //0x00002f3d subl %esi, %edi + 0x8d, 0x9e, 0x46, 0x46, 0x46, 0x46, //0x00002f3f leal $1179010630(%rsi), %ebx + 0x21, 0xd7, //0x00002f45 andl %edx, %edi + 0x85, 0xdf, //0x00002f47 testl %ebx, %edi + 0x0f, 0x85, 0xb8, 0x09, 0x00, 0x00, //0x00002f49 jne LBB1_847 + 0xbf, 0xe0, 0xe0, 0xe0, 0xe0, //0x00002f4f movl $-522133280, %edi + 0x29, 0xf7, //0x00002f54 subl %esi, %edi + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x00002f56 addl $960051513, %esi + 0x21, 0xfa, //0x00002f5c andl %edi, %edx + 0x85, 0xf2, //0x00002f5e testl %esi, %edx + 0x0f, 0x85, 0xa1, 0x09, 0x00, 0x00, //0x00002f60 jne LBB1_847 + 0x0f, 0xc8, //0x00002f66 bswapl %eax + 0x89, 0xc1, //0x00002f68 movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00002f6a shrl $4, %ecx + 0xf7, 0xd1, //0x00002f6d notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00002f6f andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00002f75 leal (%rcx,%rcx,8), %ecx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x00002f78 andl $252645135, %eax + 0x01, 0xc8, //0x00002f7d addl %ecx, %eax + 0x89, 0xc1, //0x00002f7f movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00002f81 shrl $4, %ecx + 0x09, 0xc1, //0x00002f84 orl %eax, %ecx + 0x89, 0xc8, //0x00002f86 movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x00002f88 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00002f8b andl $65280, %eax + 0x89, 0xca, //0x00002f90 movl %ecx, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x00002f92 andl $128, %edx + 0x09, 0xc2, //0x00002f98 orl %eax, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00002f9a je LBB1_670 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x00002fa0 movl $255, %ecx + //0x00002fa5 LBB1_670 + 0x49, 0x83, 0xc7, 0x06, //0x00002fa5 addq $6, %r15 + 0x4c, 0x89, 0xf8, //0x00002fa9 movq %r15, %rax + 0x48, 0x8b, 0x55, 0xd0, //0x00002fac movq $-48(%rbp), %rdx + //0x00002fb0 LBB1_671 + 0x80, 0xf9, 0x0a, //0x00002fb0 cmpb $10, %cl + 0x0f, 0x84, 0xdd, 0xfe, 0xff, 0xff, //0x00002fb3 je LBB1_674 + 0x80, 0xf9, 0x0d, //0x00002fb9 cmpb $13, %cl + 0x0f, 0x84, 0xd4, 0xfe, 0xff, 0xff, //0x00002fbc je LBB1_674 + 0x80, 0xf9, 0x3d, //0x00002fc2 cmpb $61, %cl + 0x0f, 0x85, 0x47, 0x09, 0x00, 0x00, //0x00002fc5 jne LBB1_827 + 0x49, 0x89, 0xc7, //0x00002fcb movq %rax, %r15 + 0x41, 0x83, 0xfa, 0x02, //0x00002fce cmpl $2, %r10d + 0x0f, 0x84, 0x19, 0x01, 0x00, 0x00, //0x00002fd2 je LBB1_696 + 0x48, 0x8b, 0x75, 0xd0, //0x00002fd8 movq $-48(%rbp), %rsi + 0x48, 0x39, 0xc6, //0x00002fdc cmpq %rax, %rsi + 0x0f, 0x87, 0x32, 0x04, 0x00, 0x00, //0x00002fdf ja LBB1_762 + //0x00002fe5 LBB1_719 + 0x49, 0x89, 0xc7, //0x00002fe5 movq %rax, %r15 + 0xe9, 0x20, 0x06, 0x00, 0x00, //0x00002fe8 jmp LBB1_720 + //0x00002fed LBB1_676 + 0x49, 0xff, 0xc7, //0x00002fed incq %r15 + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00002ff0 movl $3, %r11d + 0x49, 0x39, 0xdf, //0x00002ff6 cmpq %rbx, %r15 + 0x0f, 0x83, 0xd5, 0xfb, 0xff, 0xff, //0x00002ff9 jae LBB1_610 + //0x00002fff LBB1_677 + 0x41, 0x0f, 0xb6, 0x0f, //0x00002fff movzbl (%r15), %ecx + 0x48, 0x83, 0xf9, 0x0d, //0x00003003 cmpq $13, %rcx + 0x0f, 0x84, 0xe0, 0xff, 0xff, 0xff, //0x00003007 je LBB1_676 + 0x80, 0xf9, 0x0a, //0x0000300d cmpb $10, %cl + 0x0f, 0x84, 0xd7, 0xff, 0xff, 0xff, //0x00003010 je LBB1_676 + 0x48, 0x8b, 0x45, 0xc0, //0x00003016 movq $-64(%rbp), %rax + 0x0f, 0xb6, 0x04, 0x08, //0x0000301a movzbl (%rax,%rcx), %eax + 0x49, 0xff, 0xc7, //0x0000301e incq %r15 + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x00003021 cmpl $255, %eax + 0x0f, 0x85, 0xa0, 0x05, 0x00, 0x00, //0x00003026 jne LBB1_790 + //0x0000302c LBB1_791 + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x0000302c movl $3, %r11d + 0xe9, 0x73, 0xfc, 0xff, 0xff, //0x00003032 jmp LBB1_624 + //0x00003037 LBB1_681 + 0x49, 0xff, 0xc7, //0x00003037 incq %r15 + 0x48, 0xff, 0xc1, //0x0000303a incq %rcx + 0x48, 0xff, 0xcb, //0x0000303d decq %rbx + 0x48, 0xff, 0xc2, //0x00003040 incq %rdx + 0x48, 0xff, 0xcf, //0x00003043 decq %rdi + 0x4c, 0x39, 0x7d, 0xd0, //0x00003046 cmpq %r15, $-48(%rbp) + 0x0f, 0x84, 0xb9, 0x05, 0x00, 0x00, //0x0000304a je LBB1_717 + //0x00003050 LBB1_682 + 0x41, 0x0f, 0xb6, 0x07, //0x00003050 movzbl (%r15), %eax + 0x3c, 0x0a, //0x00003054 cmpb $10, %al + 0x0f, 0x84, 0xdb, 0xff, 0xff, 0xff, //0x00003056 je LBB1_681 + 0x3c, 0x0d, //0x0000305c cmpb $13, %al + 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x0000305e je LBB1_681 + 0x3c, 0x3d, //0x00003064 cmpb $61, %al + 0x0f, 0x85, 0xf9, 0x01, 0x00, 0x00, //0x00003066 jne LBB1_728 + 0x49, 0xff, 0xc7, //0x0000306c incq %r15 + 0x41, 0x83, 0xfa, 0x03, //0x0000306f cmpl $3, %r10d + 0x0f, 0x84, 0x78, 0x00, 0x00, 0x00, //0x00003073 je LBB1_696 + 0x4c, 0x39, 0x7d, 0xd0, //0x00003079 cmpq %r15, $-48(%rbp) + 0x0f, 0x87, 0xe7, 0x04, 0x00, 0x00, //0x0000307d ja LBB1_780 + 0xe9, 0x85, 0x05, 0x00, 0x00, //0x00003083 jmp LBB1_720 + //0x00003088 LBB1_688 + 0x3c, 0x2f, //0x00003088 cmpb $47, %al + 0x0f, 0x85, 0x02, 0x00, 0x00, 0x00, //0x0000308a jne LBB1_690 + 0x89, 0xc1, //0x00003090 movl %eax, %ecx + //0x00003092 LBB1_690 + 0x4d, 0x89, 0xc7, //0x00003092 movq %r8, %r15 + 0x48, 0x8b, 0x5d, 0xd0, //0x00003095 movq $-48(%rbp), %rbx + //0x00003099 LBB1_691 + 0x0f, 0xb6, 0xc1, //0x00003099 movzbl %cl, %eax + 0x48, 0x8b, 0x55, 0xc0, //0x0000309c movq $-64(%rbp), %rdx + 0x0f, 0xb6, 0x04, 0x02, //0x000030a0 movzbl (%rdx,%rax), %eax + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x000030a4 cmpl $255, %eax + 0x0f, 0x84, 0x70, 0x00, 0x00, 0x00, //0x000030a9 je LBB1_716 + 0x8b, 0x4d, 0xc8, //0x000030af movl $-56(%rbp), %ecx + 0xc1, 0xe1, 0x06, //0x000030b2 shll $6, %ecx + 0x09, 0xc1, //0x000030b5 orl %eax, %ecx + 0x89, 0x4d, 0xc8, //0x000030b7 movl %ecx, $-56(%rbp) + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x000030ba movl $2, %r11d + 0x49, 0x39, 0xdf, //0x000030c0 cmpq %rbx, %r15 + 0x0f, 0x82, 0x7e, 0x00, 0x00, 0x00, //0x000030c3 jb LBB1_701 + //0x000030c9 LBB1_693 + 0x45, 0x85, 0xe4, //0x000030c9 testl %r12d, %r12d + 0x0f, 0x94, 0xc0, //0x000030cc sete %al + 0x41, 0x83, 0xfb, 0x01, //0x000030cf cmpl $1, %r11d + 0x0f, 0x94, 0xc1, //0x000030d3 sete %cl + 0x49, 0x39, 0xdf, //0x000030d6 cmpq %rbx, %r15 + 0x0f, 0x82, 0x2e, 0x05, 0x00, 0x00, //0x000030d9 jb LBB1_720 + 0x41, 0x83, 0xfb, 0x04, //0x000030df cmpl $4, %r11d + 0x0f, 0x84, 0x24, 0x05, 0x00, 0x00, //0x000030e3 je LBB1_720 + 0x08, 0xc8, //0x000030e9 orb %cl, %al + 0x0f, 0x84, 0x1c, 0x05, 0x00, 0x00, //0x000030eb je LBB1_720 + //0x000030f1 LBB1_696 + 0x49, 0x8d, 0x4f, 0x01, //0x000030f1 leaq $1(%r15), %rcx + 0x4c, 0x39, 0x7d, 0xd0, //0x000030f5 cmpq %r15, $-48(%rbp) + 0x49, 0x0f, 0x45, 0xcf, //0x000030f9 cmovneq %r15, %rcx + 0x4c, 0x29, 0xc9, //0x000030fd subq %r9, %rcx + 0x0f, 0x85, 0x9a, 0x18, 0x00, 0x00, //0x00003100 jne LBB1_1137 + 0x4d, 0x89, 0xcf, //0x00003106 movq %r9, %r15 + 0x48, 0x8b, 0x55, 0xb0, //0x00003109 movq $-80(%rbp), %rdx + 0x48, 0x89, 0x55, 0xb0, //0x0000310d movq %rdx, $-80(%rbp) + 0x49, 0x39, 0xd6, //0x00003111 cmpq %rdx, %r14 + 0x0f, 0x83, 0x55, 0xf8, 0xff, 0xff, //0x00003114 jae LBB1_727 + 0xe9, 0x0b, 0x08, 0x00, 0x00, //0x0000311a jmp LBB1_852 + //0x0000311f LBB1_716 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x0000311f movl $1, %r11d + 0xe9, 0x80, 0xfb, 0xff, 0xff, //0x00003125 jmp LBB1_624 + //0x0000312a LBB1_698 + 0x3c, 0x6e, //0x0000312a cmpb $110, %al + 0x0f, 0x85, 0x41, 0x01, 0x00, 0x00, //0x0000312c jne LBB1_734 + //0x00003132 LBB1_699 + 0x48, 0x89, 0xd7, //0x00003132 movq %rdx, %rdi + //0x00003135 LBB1_700 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00003135 movl $2, %r11d + 0x49, 0x89, 0xff, //0x0000313b movq %rdi, %r15 + 0x48, 0x39, 0xdf, //0x0000313e cmpq %rbx, %rdi + 0x0f, 0x83, 0x16, 0x01, 0x00, 0x00, //0x00003141 jae LBB1_718 + //0x00003147 LBB1_701 + 0x49, 0x8d, 0x7f, 0x01, //0x00003147 leaq $1(%r15), %rdi + 0x41, 0x0f, 0xb6, 0x0f, //0x0000314b movzbl (%r15), %ecx + 0x80, 0xf9, 0x5c, //0x0000314f cmpb $92, %cl + 0x0f, 0x85, 0xee, 0x00, 0x00, 0x00, //0x00003152 jne LBB1_714 + 0x49, 0x8d, 0x57, 0x02, //0x00003158 leaq $2(%r15), %rdx + 0xb1, 0xff, //0x0000315c movb $-1, %cl + 0x48, 0x39, 0xda, //0x0000315e cmpq %rbx, %rdx + 0x0f, 0x87, 0x19, 0x01, 0x00, 0x00, //0x00003161 ja LBB1_737 + 0x0f, 0xb6, 0x07, //0x00003167 movzbl (%rdi), %eax + 0x3c, 0x71, //0x0000316a cmpb $113, %al + 0x0f, 0x8e, 0xb8, 0xff, 0xff, 0xff, //0x0000316c jle LBB1_698 + 0x3c, 0x72, //0x00003172 cmpb $114, %al + 0x0f, 0x84, 0xb8, 0xff, 0xff, 0xff, //0x00003174 je LBB1_699 + 0x3c, 0x75, //0x0000317a cmpb $117, %al + 0x0f, 0x85, 0xfb, 0x00, 0x00, 0x00, //0x0000317c jne LBB1_736 + 0x48, 0x89, 0xd8, //0x00003182 movq %rbx, %rax + 0x48, 0x29, 0xd0, //0x00003185 subq %rdx, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00003188 cmpq $4, %rax + 0x0f, 0x8c, 0xeb, 0x00, 0x00, 0x00, //0x0000318c jl LBB1_736 + 0x8b, 0x02, //0x00003192 movl (%rdx), %eax + 0x89, 0xc6, //0x00003194 movl %eax, %esi + 0xf7, 0xd6, //0x00003196 notl %esi + 0x8d, 0xb8, 0xd0, 0xcf, 0xcf, 0xcf, //0x00003198 leal $-808464432(%rax), %edi + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x0000319e andl $-2139062144, %esi + 0x85, 0xfe, //0x000031a4 testl %edi, %esi + 0x0f, 0x85, 0xd1, 0x00, 0x00, 0x00, //0x000031a6 jne LBB1_736 + 0x8d, 0xb8, 0x19, 0x19, 0x19, 0x19, //0x000031ac leal $421075225(%rax), %edi + 0x09, 0xc7, //0x000031b2 orl %eax, %edi + 0xf7, 0xc7, 0x80, 0x80, 0x80, 0x80, //0x000031b4 testl $-2139062144, %edi + 0x0f, 0x85, 0xbd, 0x00, 0x00, 0x00, //0x000031ba jne LBB1_736 + 0x89, 0xc7, //0x000031c0 movl %eax, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x000031c2 andl $2139062143, %edi + 0xbb, 0xc0, 0xc0, 0xc0, 0xc0, //0x000031c8 movl $-1061109568, %ebx + 0x29, 0xfb, //0x000031cd subl %edi, %ebx + 0x44, 0x8d, 0x87, 0x46, 0x46, 0x46, 0x46, //0x000031cf leal $1179010630(%rdi), %r8d + 0x21, 0xf3, //0x000031d6 andl %esi, %ebx + 0x44, 0x85, 0xc3, //0x000031d8 testl %r8d, %ebx + 0x48, 0x8b, 0x5d, 0xd0, //0x000031db movq $-48(%rbp), %rbx + 0x0f, 0x85, 0x98, 0x00, 0x00, 0x00, //0x000031df jne LBB1_736 + 0xbb, 0xe0, 0xe0, 0xe0, 0xe0, //0x000031e5 movl $-522133280, %ebx + 0x29, 0xfb, //0x000031ea subl %edi, %ebx + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x000031ec addl $960051513, %edi + 0x21, 0xde, //0x000031f2 andl %ebx, %esi + 0x48, 0x8b, 0x5d, 0xd0, //0x000031f4 movq $-48(%rbp), %rbx + 0x85, 0xfe, //0x000031f8 testl %edi, %esi + 0x0f, 0x85, 0x7d, 0x00, 0x00, 0x00, //0x000031fa jne LBB1_736 + 0x0f, 0xc8, //0x00003200 bswapl %eax + 0x89, 0xc1, //0x00003202 movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00003204 shrl $4, %ecx + 0xf7, 0xd1, //0x00003207 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00003209 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x0000320f leal (%rcx,%rcx,8), %ecx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x00003212 andl $252645135, %eax + 0x01, 0xc8, //0x00003217 addl %ecx, %eax + 0x89, 0xc1, //0x00003219 movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x0000321b shrl $4, %ecx + 0x09, 0xc1, //0x0000321e orl %eax, %ecx + 0x89, 0xc8, //0x00003220 movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x00003222 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00003225 andl $65280, %eax + 0x89, 0xca, //0x0000322a movl %ecx, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x0000322c andl $128, %edx + 0x09, 0xc2, //0x00003232 orl %eax, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00003234 je LBB1_713 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x0000323a movl $255, %ecx + //0x0000323f LBB1_713 + 0x49, 0x83, 0xc7, 0x06, //0x0000323f addq $6, %r15 + 0x4c, 0x89, 0xff, //0x00003243 movq %r15, %rdi + //0x00003246 LBB1_714 + 0x80, 0xf9, 0x0a, //0x00003246 cmpb $10, %cl + 0x0f, 0x84, 0xe6, 0xfe, 0xff, 0xff, //0x00003249 je LBB1_700 + 0x80, 0xf9, 0x0d, //0x0000324f cmpb $13, %cl + 0x0f, 0x84, 0xdd, 0xfe, 0xff, 0xff, //0x00003252 je LBB1_700 + 0xe9, 0x23, 0x00, 0x00, 0x00, //0x00003258 jmp LBB1_737 + //0x0000325d LBB1_718 + 0x49, 0x89, 0xff, //0x0000325d movq %rdi, %r15 + 0xe9, 0x6f, 0xf9, 0xff, 0xff, //0x00003260 jmp LBB1_610 + //0x00003265 LBB1_728 + 0x49, 0xff, 0xc7, //0x00003265 incq %r15 + 0x4c, 0x89, 0xfa, //0x00003268 movq %r15, %rdx + //0x0000326b LBB1_729 + 0x49, 0x89, 0xd7, //0x0000326b movq %rdx, %r15 + 0xe9, 0x7e, 0xfe, 0xff, 0xff, //0x0000326e jmp LBB1_696 + //0x00003273 LBB1_734 + 0x3c, 0x2f, //0x00003273 cmpb $47, %al + 0x0f, 0x85, 0x02, 0x00, 0x00, 0x00, //0x00003275 jne LBB1_736 + 0x89, 0xc1, //0x0000327b movl %eax, %ecx + //0x0000327d LBB1_736 + 0x48, 0x89, 0xd7, //0x0000327d movq %rdx, %rdi + //0x00003280 LBB1_737 + 0x0f, 0xb6, 0xc1, //0x00003280 movzbl %cl, %eax + 0x48, 0x8b, 0x55, 0xc0, //0x00003283 movq $-64(%rbp), %rdx + 0x0f, 0xb6, 0x04, 0x02, //0x00003287 movzbl (%rdx,%rax), %eax + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x0000328b cmpl $255, %eax + 0x0f, 0x84, 0x50, 0x01, 0x00, 0x00, //0x00003290 je LBB1_758 + 0x8b, 0x4d, 0xc8, //0x00003296 movl $-56(%rbp), %ecx + 0xc1, 0xe1, 0x06, //0x00003299 shll $6, %ecx + 0x09, 0xc1, //0x0000329c orl %eax, %ecx + 0x89, 0x4d, 0xc8, //0x0000329e movl %ecx, $-56(%rbp) + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x000032a1 movl $3, %r11d + 0x48, 0x39, 0xdf, //0x000032a7 cmpq %rbx, %rdi + 0x0f, 0x82, 0x25, 0x00, 0x00, 0x00, //0x000032aa jb LBB1_743 + 0x49, 0x89, 0xff, //0x000032b0 movq %rdi, %r15 + 0xe9, 0x11, 0xfe, 0xff, 0xff, //0x000032b3 jmp LBB1_693 + //0x000032b8 LBB1_740 + 0x3c, 0x6e, //0x000032b8 cmpb $110, %al + 0x0f, 0x85, 0xe5, 0x02, 0x00, 0x00, //0x000032ba jne LBB1_786 + //0x000032c0 LBB1_741 + 0x4d, 0x89, 0xc7, //0x000032c0 movq %r8, %r15 + //0x000032c3 LBB1_742 + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x000032c3 movl $3, %r11d + 0x4c, 0x89, 0xff, //0x000032c9 movq %r15, %rdi + 0x49, 0x39, 0xdf, //0x000032cc cmpq %rbx, %r15 + 0x0f, 0x83, 0xff, 0xf8, 0xff, 0xff, //0x000032cf jae LBB1_610 + //0x000032d5 LBB1_743 + 0x4c, 0x8d, 0x7f, 0x01, //0x000032d5 leaq $1(%rdi), %r15 + 0x0f, 0xb6, 0x0f, //0x000032d9 movzbl (%rdi), %ecx + 0x80, 0xf9, 0x5c, //0x000032dc cmpb $92, %cl + 0x0f, 0x85, 0xea, 0x00, 0x00, 0x00, //0x000032df jne LBB1_756 + 0x4c, 0x8d, 0x47, 0x02, //0x000032e5 leaq $2(%rdi), %r8 + 0xb1, 0xff, //0x000032e9 movb $-1, %cl + 0x49, 0x39, 0xd8, //0x000032eb cmpq %rbx, %r8 + 0x0f, 0x87, 0xc2, 0x02, 0x00, 0x00, //0x000032ee ja LBB1_789 + 0x41, 0x0f, 0xb6, 0x07, //0x000032f4 movzbl (%r15), %eax + 0x3c, 0x71, //0x000032f8 cmpb $113, %al + 0x0f, 0x8e, 0xb8, 0xff, 0xff, 0xff, //0x000032fa jle LBB1_740 + 0x3c, 0x72, //0x00003300 cmpb $114, %al + 0x0f, 0x84, 0xb8, 0xff, 0xff, 0xff, //0x00003302 je LBB1_741 + 0x3c, 0x75, //0x00003308 cmpb $117, %al + 0x0f, 0x85, 0x9f, 0x02, 0x00, 0x00, //0x0000330a jne LBB1_788 + 0x48, 0x8b, 0x45, 0xd0, //0x00003310 movq $-48(%rbp), %rax + 0x4c, 0x29, 0xc0, //0x00003314 subq %r8, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00003317 cmpq $4, %rax + 0x0f, 0x8c, 0x8e, 0x02, 0x00, 0x00, //0x0000331b jl LBB1_788 + 0x41, 0x8b, 0x18, //0x00003321 movl (%r8), %ebx + 0x89, 0xde, //0x00003324 movl %ebx, %esi + 0xf7, 0xd6, //0x00003326 notl %esi + 0x8d, 0x83, 0xd0, 0xcf, 0xcf, 0xcf, //0x00003328 leal $-808464432(%rbx), %eax + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x0000332e andl $-2139062144, %esi + 0x85, 0xc6, //0x00003334 testl %eax, %esi + 0x0f, 0x85, 0x73, 0x02, 0x00, 0x00, //0x00003336 jne LBB1_788 + 0x8d, 0x83, 0x19, 0x19, 0x19, 0x19, //0x0000333c leal $421075225(%rbx), %eax + 0x09, 0xd8, //0x00003342 orl %ebx, %eax + 0xa9, 0x80, 0x80, 0x80, 0x80, //0x00003344 testl $-2139062144, %eax + 0x0f, 0x85, 0x60, 0x02, 0x00, 0x00, //0x00003349 jne LBB1_788 + 0x89, 0xd8, //0x0000334f movl %ebx, %eax + 0x25, 0x7f, 0x7f, 0x7f, 0x7f, //0x00003351 andl $2139062143, %eax + 0xba, 0xc0, 0xc0, 0xc0, 0xc0, //0x00003356 movl $-1061109568, %edx + 0x29, 0xc2, //0x0000335b subl %eax, %edx + 0x44, 0x8d, 0x90, 0x46, 0x46, 0x46, 0x46, //0x0000335d leal $1179010630(%rax), %r10d + 0x21, 0xf2, //0x00003364 andl %esi, %edx + 0x44, 0x85, 0xd2, //0x00003366 testl %r10d, %edx + 0x0f, 0x85, 0x40, 0x02, 0x00, 0x00, //0x00003369 jne LBB1_788 + 0xba, 0xe0, 0xe0, 0xe0, 0xe0, //0x0000336f movl $-522133280, %edx + 0x29, 0xc2, //0x00003374 subl %eax, %edx + 0x05, 0x39, 0x39, 0x39, 0x39, //0x00003376 addl $960051513, %eax + 0x21, 0xd6, //0x0000337b andl %edx, %esi + 0x85, 0xc6, //0x0000337d testl %eax, %esi + 0x0f, 0x85, 0x2a, 0x02, 0x00, 0x00, //0x0000337f jne LBB1_788 + 0x0f, 0xcb, //0x00003385 bswapl %ebx + 0x89, 0xd8, //0x00003387 movl %ebx, %eax + 0xc1, 0xe8, 0x04, //0x00003389 shrl $4, %eax + 0xf7, 0xd0, //0x0000338c notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x0000338e andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x00003393 leal (%rax,%rax,8), %eax + 0x81, 0xe3, 0x0f, 0x0f, 0x0f, 0x0f, //0x00003396 andl $252645135, %ebx + 0x01, 0xc3, //0x0000339c addl %eax, %ebx + 0x89, 0xd9, //0x0000339e movl %ebx, %ecx + 0xc1, 0xe9, 0x04, //0x000033a0 shrl $4, %ecx + 0x09, 0xd9, //0x000033a3 orl %ebx, %ecx + 0x89, 0xc8, //0x000033a5 movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x000033a7 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x000033aa andl $65280, %eax + 0x89, 0xca, //0x000033af movl %ecx, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x000033b1 andl $128, %edx + 0x09, 0xc2, //0x000033b7 orl %eax, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x000033b9 je LBB1_755 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x000033bf movl $255, %ecx + //0x000033c4 LBB1_755 + 0x48, 0x83, 0xc7, 0x06, //0x000033c4 addq $6, %rdi + 0x49, 0x89, 0xff, //0x000033c8 movq %rdi, %r15 + 0x48, 0x8b, 0x5d, 0xd0, //0x000033cb movq $-48(%rbp), %rbx + //0x000033cf LBB1_756 + 0x80, 0xf9, 0x0a, //0x000033cf cmpb $10, %cl + 0x0f, 0x84, 0xeb, 0xfe, 0xff, 0xff, //0x000033d2 je LBB1_742 + 0x80, 0xf9, 0x0d, //0x000033d8 cmpb $13, %cl + 0x0f, 0x84, 0xe2, 0xfe, 0xff, 0xff, //0x000033db je LBB1_742 + 0xe9, 0xd0, 0x01, 0x00, 0x00, //0x000033e1 jmp LBB1_789 + //0x000033e6 LBB1_758 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x000033e6 movl $2, %r11d + 0x49, 0x89, 0xff, //0x000033ec movq %rdi, %r15 + 0xe9, 0xb6, 0xf8, 0xff, 0xff, //0x000033ef jmp LBB1_624 + //0x000033f4 LBB1_778 + 0x4c, 0x89, 0xf9, //0x000033f4 movq %r15, %rcx + 0x48, 0x89, 0xc8, //0x000033f7 movq %rcx, %rax + 0x48, 0x39, 0xf1, //0x000033fa cmpq %rsi, %rcx + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x000033fd jb LBB1_762 + 0xe9, 0x05, 0x02, 0x00, 0x00, //0x00003403 jmp LBB1_720 + //0x00003408 LBB1_760 + 0x49, 0x89, 0xcf, //0x00003408 movq %rcx, %r15 + 0x48, 0x89, 0xc8, //0x0000340b movq %rcx, %rax + 0x48, 0x39, 0xf1, //0x0000340e cmpq %rsi, %rcx + 0x0f, 0x83, 0xf6, 0x01, 0x00, 0x00, //0x00003411 jae LBB1_720 + //0x00003417 LBB1_762 + 0x4c, 0x8d, 0x78, 0x01, //0x00003417 leaq $1(%rax), %r15 + 0x0f, 0xb6, 0x08, //0x0000341b movzbl (%rax), %ecx + 0x80, 0xf9, 0x5c, //0x0000341e cmpb $92, %cl + 0x0f, 0x85, 0xee, 0x00, 0x00, 0x00, //0x00003421 jne LBB1_775 + 0x48, 0x8d, 0x48, 0x02, //0x00003427 leaq $2(%rax), %rcx + 0x48, 0x39, 0xf1, //0x0000342b cmpq %rsi, %rcx + 0x0f, 0x87, 0xdb, 0x04, 0x00, 0x00, //0x0000342e ja LBB1_848 + 0x41, 0x0f, 0xb6, 0x17, //0x00003434 movzbl (%r15), %edx + 0x80, 0xfa, 0x6e, //0x00003438 cmpb $110, %dl + 0x0f, 0x84, 0xc7, 0xff, 0xff, 0xff, //0x0000343b je LBB1_760 + 0x80, 0xfa, 0x72, //0x00003441 cmpb $114, %dl + 0x0f, 0x84, 0xbe, 0xff, 0xff, 0xff, //0x00003444 je LBB1_760 + 0x80, 0xfa, 0x75, //0x0000344a cmpb $117, %dl + 0x0f, 0x85, 0xb4, 0x04, 0x00, 0x00, //0x0000344d jne LBB1_847 + 0x48, 0x89, 0xf2, //0x00003453 movq %rsi, %rdx + 0x48, 0x29, 0xca, //0x00003456 subq %rcx, %rdx + 0x48, 0x83, 0xfa, 0x04, //0x00003459 cmpq $4, %rdx + 0x0f, 0x8c, 0xa4, 0x04, 0x00, 0x00, //0x0000345d jl LBB1_847 + 0x8b, 0x11, //0x00003463 movl (%rcx), %edx + 0x89, 0xd6, //0x00003465 movl %edx, %esi + 0xf7, 0xd6, //0x00003467 notl %esi + 0x8d, 0xba, 0xd0, 0xcf, 0xcf, 0xcf, //0x00003469 leal $-808464432(%rdx), %edi + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x0000346f andl $-2139062144, %esi + 0x85, 0xfe, //0x00003475 testl %edi, %esi + 0x0f, 0x85, 0x8a, 0x04, 0x00, 0x00, //0x00003477 jne LBB1_847 + 0x8d, 0xba, 0x19, 0x19, 0x19, 0x19, //0x0000347d leal $421075225(%rdx), %edi + 0x09, 0xd7, //0x00003483 orl %edx, %edi + 0xf7, 0xc7, 0x80, 0x80, 0x80, 0x80, //0x00003485 testl $-2139062144, %edi + 0x0f, 0x85, 0x76, 0x04, 0x00, 0x00, //0x0000348b jne LBB1_847 + 0x89, 0xd7, //0x00003491 movl %edx, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x00003493 andl $2139062143, %edi + 0xbb, 0xc0, 0xc0, 0xc0, 0xc0, //0x00003499 movl $-1061109568, %ebx + 0x29, 0xfb, //0x0000349e subl %edi, %ebx + 0x44, 0x8d, 0x87, 0x46, 0x46, 0x46, 0x46, //0x000034a0 leal $1179010630(%rdi), %r8d + 0x21, 0xf3, //0x000034a7 andl %esi, %ebx + 0x44, 0x85, 0xc3, //0x000034a9 testl %r8d, %ebx + 0x0f, 0x85, 0x55, 0x04, 0x00, 0x00, //0x000034ac jne LBB1_847 + 0xbb, 0xe0, 0xe0, 0xe0, 0xe0, //0x000034b2 movl $-522133280, %ebx + 0x29, 0xfb, //0x000034b7 subl %edi, %ebx + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x000034b9 addl $960051513, %edi + 0x21, 0xde, //0x000034bf andl %ebx, %esi + 0x85, 0xfe, //0x000034c1 testl %edi, %esi + 0x0f, 0x85, 0x3e, 0x04, 0x00, 0x00, //0x000034c3 jne LBB1_847 + 0x0f, 0xca, //0x000034c9 bswapl %edx + 0x89, 0xd1, //0x000034cb movl %edx, %ecx + 0xc1, 0xe9, 0x04, //0x000034cd shrl $4, %ecx + 0xf7, 0xd1, //0x000034d0 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x000034d2 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x000034d8 leal (%rcx,%rcx,8), %ecx + 0x81, 0xe2, 0x0f, 0x0f, 0x0f, 0x0f, //0x000034db andl $252645135, %edx + 0x01, 0xca, //0x000034e1 addl %ecx, %edx + 0x89, 0xd1, //0x000034e3 movl %edx, %ecx + 0xc1, 0xe9, 0x04, //0x000034e5 shrl $4, %ecx + 0x09, 0xd1, //0x000034e8 orl %edx, %ecx + 0x89, 0xca, //0x000034ea movl %ecx, %edx + 0xc1, 0xea, 0x08, //0x000034ec shrl $8, %edx + 0x81, 0xe2, 0x00, 0xff, 0x00, 0x00, //0x000034ef andl $65280, %edx + 0x89, 0xce, //0x000034f5 movl %ecx, %esi + 0x81, 0xe6, 0x80, 0x00, 0x00, 0x00, //0x000034f7 andl $128, %esi + 0x09, 0xd6, //0x000034fd orl %edx, %esi + 0x48, 0x8b, 0x75, 0xd0, //0x000034ff movq $-48(%rbp), %rsi + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00003503 je LBB1_774 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x00003509 movl $255, %ecx + //0x0000350e LBB1_774 + 0x48, 0x83, 0xc0, 0x06, //0x0000350e addq $6, %rax + 0x49, 0x89, 0xc7, //0x00003512 movq %rax, %r15 + //0x00003515 LBB1_775 + 0x80, 0xf9, 0x0a, //0x00003515 cmpb $10, %cl + 0x0f, 0x84, 0xd6, 0xfe, 0xff, 0xff, //0x00003518 je LBB1_778 + 0x80, 0xf9, 0x0d, //0x0000351e cmpb $13, %cl + 0x0f, 0x84, 0xcd, 0xfe, 0xff, 0xff, //0x00003521 je LBB1_778 + 0x80, 0xf9, 0x3d, //0x00003527 cmpb $61, %cl + 0x0f, 0x85, 0xc1, 0xfb, 0xff, 0xff, //0x0000352a jne LBB1_696 + 0x41, 0x83, 0xfa, 0x03, //0x00003530 cmpl $3, %r10d + 0x0f, 0x84, 0xb7, 0xfb, 0xff, 0xff, //0x00003534 je LBB1_696 + 0x4c, 0x39, 0x7d, 0xd0, //0x0000353a cmpq %r15, $-48(%rbp) + 0x0f, 0x86, 0xc9, 0x00, 0x00, 0x00, //0x0000353e jbe LBB1_720 + 0x48, 0x8b, 0x55, 0xd0, //0x00003544 movq $-48(%rbp), %rdx + 0xe9, 0x2c, 0x01, 0x00, 0x00, //0x00003548 jmp LBB1_803 + //0x0000354d LBB1_759 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x0000354d movl $2, %r11d + 0xe9, 0x52, 0xf7, 0xff, 0xff, //0x00003553 jmp LBB1_624 + //0x00003558 LBB1_779 + 0x48, 0xff, 0xc1, //0x00003558 incq %rcx + 0x48, 0xff, 0xc2, //0x0000355b incq %rdx + 0x48, 0xff, 0xcf, //0x0000355e decq %rdi + 0x48, 0xff, 0xcb, //0x00003561 decq %rbx + 0x0f, 0x84, 0x9f, 0x00, 0x00, 0x00, //0x00003564 je LBB1_717 + //0x0000356a LBB1_780 + 0x0f, 0xb6, 0x41, 0xff, //0x0000356a movzbl $-1(%rcx), %eax + 0x3c, 0x0a, //0x0000356e cmpb $10, %al + 0x0f, 0x84, 0xe2, 0xff, 0xff, 0xff, //0x00003570 je LBB1_779 + 0x3c, 0x0d, //0x00003576 cmpb $13, %al + 0x0f, 0x84, 0xda, 0xff, 0xff, 0xff, //0x00003578 je LBB1_779 + 0x3c, 0x3d, //0x0000357e cmpb $61, %al + 0x0f, 0x85, 0x16, 0x02, 0x00, 0x00, //0x00003580 jne LBB1_821 + 0x49, 0x89, 0xcf, //0x00003586 movq %rcx, %r15 + 0x41, 0x83, 0xfa, 0x04, //0x00003589 cmpl $4, %r10d + 0x0f, 0x84, 0x5e, 0xfb, 0xff, 0xff, //0x0000358d je LBB1_696 + 0x48, 0x39, 0x4d, 0xd0, //0x00003593 cmpq %rcx, $-48(%rbp) + 0x0f, 0x87, 0x51, 0x00, 0x00, 0x00, //0x00003597 ja LBB1_798 + 0x49, 0x89, 0xcf, //0x0000359d movq %rcx, %r15 + 0xe9, 0x68, 0x00, 0x00, 0x00, //0x000035a0 jmp LBB1_720 + //0x000035a5 LBB1_786 + 0x3c, 0x2f, //0x000035a5 cmpb $47, %al + 0x0f, 0x85, 0x02, 0x00, 0x00, 0x00, //0x000035a7 jne LBB1_788 + 0x89, 0xc1, //0x000035ad movl %eax, %ecx + //0x000035af LBB1_788 + 0x4d, 0x89, 0xc7, //0x000035af movq %r8, %r15 + 0x48, 0x8b, 0x5d, 0xd0, //0x000035b2 movq $-48(%rbp), %rbx + //0x000035b6 LBB1_789 + 0x0f, 0xb6, 0xc1, //0x000035b6 movzbl %cl, %eax + 0x48, 0x8b, 0x55, 0xc0, //0x000035b9 movq $-64(%rbp), %rdx + 0x0f, 0xb6, 0x04, 0x02, //0x000035bd movzbl (%rdx,%rax), %eax + 0x3d, 0xff, 0x00, 0x00, 0x00, //0x000035c1 cmpl $255, %eax + 0x0f, 0x84, 0x60, 0xfa, 0xff, 0xff, //0x000035c6 je LBB1_791 + //0x000035cc LBB1_790 + 0x8b, 0x4d, 0xc8, //0x000035cc movl $-56(%rbp), %ecx + 0xc1, 0xe1, 0x06, //0x000035cf shll $6, %ecx + 0x09, 0xc1, //0x000035d2 orl %eax, %ecx + 0x89, 0x4d, 0xc8, //0x000035d4 movl %ecx, $-56(%rbp) + 0x41, 0xbb, 0x04, 0x00, 0x00, 0x00, //0x000035d7 movl $4, %r11d + 0xe9, 0xe7, 0xfa, 0xff, 0xff, //0x000035dd jmp LBB1_693 + //0x000035e2 LBB1_797 + 0x48, 0xff, 0xc2, //0x000035e2 incq %rdx + 0x48, 0xff, 0xcf, //0x000035e5 decq %rdi + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x000035e8 je LBB1_717 + //0x000035ee LBB1_798 + 0x0f, 0xb6, 0x42, 0xff, //0x000035ee movzbl $-1(%rdx), %eax + 0x3c, 0x0a, //0x000035f2 cmpb $10, %al + 0x0f, 0x84, 0xe8, 0xff, 0xff, 0xff, //0x000035f4 je LBB1_797 + 0x3c, 0x0d, //0x000035fa cmpb $13, %al + 0x0f, 0x84, 0xe0, 0xff, 0xff, 0xff, //0x000035fc je LBB1_797 + 0x3c, 0x3d, //0x00003602 cmpb $61, %al + 0xe9, 0x62, 0xfc, 0xff, 0xff, //0x00003604 jmp LBB1_729 + //0x00003609 LBB1_717 + 0x4c, 0x8b, 0x7d, 0xd0, //0x00003609 movq $-48(%rbp), %r15 + //0x0000360d LBB1_720 + 0xb0, 0x04, //0x0000360d movb $4, %al + 0x44, 0x28, 0xd8, //0x0000360f subb %r11b, %al + 0x0f, 0xb6, 0xc0, //0x00003612 movzbl %al, %eax + 0x01, 0xc0, //0x00003615 addl %eax, %eax + 0x8d, 0x0c, 0x40, //0x00003617 leal (%rax,%rax,2), %ecx + 0x8b, 0x45, 0xc8, //0x0000361a movl $-56(%rbp), %eax + 0xd3, 0xe0, //0x0000361d shll %cl, %eax + 0x41, 0x83, 0xfb, 0x02, //0x0000361f cmpl $2, %r11d + 0x48, 0x8b, 0x55, 0xb0, //0x00003623 movq $-80(%rbp), %rdx + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00003627 je LBB1_725 + 0x41, 0x83, 0xfb, 0x03, //0x0000362d cmpl $3, %r11d + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00003631 je LBB1_724 + 0x41, 0x83, 0xfb, 0x04, //0x00003637 cmpl $4, %r11d + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x0000363b jne LBB1_726 + 0x88, 0x42, 0x02, //0x00003641 movb %al, $2(%rdx) + //0x00003644 LBB1_724 + 0x88, 0x62, 0x01, //0x00003644 movb %ah, $1(%rdx) + //0x00003647 LBB1_725 + 0xc1, 0xe8, 0x10, //0x00003647 shrl $16, %eax + 0x88, 0x02, //0x0000364a movb %al, (%rdx) + //0x0000364c LBB1_726 + 0x44, 0x89, 0xd8, //0x0000364c movl %r11d, %eax + 0x48, 0x8d, 0x54, 0x02, 0xff, //0x0000364f leaq $-1(%rdx,%rax), %rdx + 0x48, 0x89, 0x55, 0xb0, //0x00003654 movq %rdx, $-80(%rbp) + 0x49, 0x39, 0xd6, //0x00003658 cmpq %rdx, %r14 + 0x0f, 0x83, 0x0e, 0xf3, 0xff, 0xff, //0x0000365b jae LBB1_727 + 0xe9, 0xc4, 0x02, 0x00, 0x00, //0x00003661 jmp LBB1_852 + //0x00003666 LBB1_802 + 0x48, 0x89, 0xc1, //0x00003666 movq %rax, %rcx + 0x48, 0x8b, 0x55, 0xd0, //0x00003669 movq $-48(%rbp), %rdx + 0x49, 0x89, 0xcf, //0x0000366d movq %rcx, %r15 + 0x48, 0x39, 0xd1, //0x00003670 cmpq %rdx, %rcx + 0x0f, 0x83, 0x6c, 0xf9, 0xff, 0xff, //0x00003673 jae LBB1_719 + //0x00003679 LBB1_803 + 0x49, 0x8d, 0x47, 0x01, //0x00003679 leaq $1(%r15), %rax + 0x41, 0x0f, 0xb6, 0x0f, //0x0000367d movzbl (%r15), %ecx + 0x80, 0xf9, 0x5c, //0x00003681 cmpb $92, %cl + 0x0f, 0x85, 0xe3, 0x00, 0x00, 0x00, //0x00003684 jne LBB1_816 + 0x49, 0x8d, 0x4f, 0x02, //0x0000368a leaq $2(%r15), %rcx + 0x48, 0x39, 0xd1, //0x0000368e cmpq %rdx, %rcx + 0x0f, 0x87, 0x7b, 0x02, 0x00, 0x00, //0x00003691 ja LBB1_827 + 0x0f, 0xb6, 0x00, //0x00003697 movzbl (%rax), %eax + 0x3c, 0x6e, //0x0000369a cmpb $110, %al + 0x0f, 0x84, 0xe2, 0x00, 0x00, 0x00, //0x0000369c je LBB1_818 + 0x3c, 0x72, //0x000036a2 cmpb $114, %al + 0x0f, 0x84, 0xda, 0x00, 0x00, 0x00, //0x000036a4 je LBB1_818 + 0x3c, 0x75, //0x000036aa cmpb $117, %al + 0x0f, 0x85, 0x55, 0x02, 0x00, 0x00, //0x000036ac jne LBB1_847 + 0x48, 0x8b, 0x45, 0xd0, //0x000036b2 movq $-48(%rbp), %rax + 0x48, 0x29, 0xc8, //0x000036b6 subq %rcx, %rax + 0x48, 0x83, 0xf8, 0x04, //0x000036b9 cmpq $4, %rax + 0x0f, 0x8c, 0x44, 0x02, 0x00, 0x00, //0x000036bd jl LBB1_847 + 0x8b, 0x01, //0x000036c3 movl (%rcx), %eax + 0x89, 0xc2, //0x000036c5 movl %eax, %edx + 0xf7, 0xd2, //0x000036c7 notl %edx + 0x8d, 0xb0, 0xd0, 0xcf, 0xcf, 0xcf, //0x000036c9 leal $-808464432(%rax), %esi + 0x81, 0xe2, 0x80, 0x80, 0x80, 0x80, //0x000036cf andl $-2139062144, %edx + 0x85, 0xf2, //0x000036d5 testl %esi, %edx + 0x0f, 0x85, 0x2a, 0x02, 0x00, 0x00, //0x000036d7 jne LBB1_847 + 0x8d, 0xb0, 0x19, 0x19, 0x19, 0x19, //0x000036dd leal $421075225(%rax), %esi + 0x09, 0xc6, //0x000036e3 orl %eax, %esi + 0xf7, 0xc6, 0x80, 0x80, 0x80, 0x80, //0x000036e5 testl $-2139062144, %esi + 0x0f, 0x85, 0x16, 0x02, 0x00, 0x00, //0x000036eb jne LBB1_847 + 0x89, 0xc6, //0x000036f1 movl %eax, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x000036f3 andl $2139062143, %esi + 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, //0x000036f9 movl $-1061109568, %edi + 0x29, 0xf7, //0x000036fe subl %esi, %edi + 0x8d, 0x9e, 0x46, 0x46, 0x46, 0x46, //0x00003700 leal $1179010630(%rsi), %ebx + 0x21, 0xd7, //0x00003706 andl %edx, %edi + 0x85, 0xdf, //0x00003708 testl %ebx, %edi + 0x0f, 0x85, 0xf7, 0x01, 0x00, 0x00, //0x0000370a jne LBB1_847 + 0xbf, 0xe0, 0xe0, 0xe0, 0xe0, //0x00003710 movl $-522133280, %edi + 0x29, 0xf7, //0x00003715 subl %esi, %edi + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x00003717 addl $960051513, %esi + 0x21, 0xfa, //0x0000371d andl %edi, %edx + 0x85, 0xf2, //0x0000371f testl %esi, %edx + 0x0f, 0x85, 0xe0, 0x01, 0x00, 0x00, //0x00003721 jne LBB1_847 + 0x0f, 0xc8, //0x00003727 bswapl %eax + 0x89, 0xc1, //0x00003729 movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x0000372b shrl $4, %ecx + 0xf7, 0xd1, //0x0000372e notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00003730 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00003736 leal (%rcx,%rcx,8), %ecx + 0x25, 0x0f, 0x0f, 0x0f, 0x0f, //0x00003739 andl $252645135, %eax + 0x01, 0xc8, //0x0000373e addl %ecx, %eax + 0x89, 0xc1, //0x00003740 movl %eax, %ecx + 0xc1, 0xe9, 0x04, //0x00003742 shrl $4, %ecx + 0x09, 0xc1, //0x00003745 orl %eax, %ecx + 0x89, 0xc8, //0x00003747 movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x00003749 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x0000374c andl $65280, %eax + 0x89, 0xca, //0x00003751 movl %ecx, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x00003753 andl $128, %edx + 0x09, 0xc2, //0x00003759 orl %eax, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x0000375b je LBB1_815 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x00003761 movl $255, %ecx + //0x00003766 LBB1_815 + 0x49, 0x83, 0xc7, 0x06, //0x00003766 addq $6, %r15 + 0x4c, 0x89, 0xf8, //0x0000376a movq %r15, %rax + //0x0000376d LBB1_816 + 0x80, 0xf9, 0x0a, //0x0000376d cmpb $10, %cl + 0x0f, 0x84, 0xf0, 0xfe, 0xff, 0xff, //0x00003770 je LBB1_802 + 0x80, 0xf9, 0x0d, //0x00003776 cmpb $13, %cl + 0x0f, 0x84, 0xe7, 0xfe, 0xff, 0xff, //0x00003779 je LBB1_802 + 0xe9, 0x23, 0x00, 0x00, 0x00, //0x0000377f jmp LBB1_823 + //0x00003784 LBB1_818 + 0x48, 0x89, 0xc8, //0x00003784 movq %rcx, %rax + 0x48, 0x8b, 0x55, 0xd0, //0x00003787 movq $-48(%rbp), %rdx + 0x49, 0x89, 0xcf, //0x0000378b movq %rcx, %r15 + 0x48, 0x39, 0xd1, //0x0000378e cmpq %rdx, %rcx + 0x0f, 0x82, 0xe2, 0xfe, 0xff, 0xff, //0x00003791 jb LBB1_803 + 0xe9, 0x49, 0xf8, 0xff, 0xff, //0x00003797 jmp LBB1_719 + //0x0000379c LBB1_821 + 0x48, 0x89, 0xca, //0x0000379c movq %rcx, %rdx + 0x49, 0x89, 0xcf, //0x0000379f movq %rcx, %r15 + 0xe9, 0x4a, 0xf9, 0xff, 0xff, //0x000037a2 jmp LBB1_696 + //0x000037a7 LBB1_823 + 0x80, 0xf9, 0x3d, //0x000037a7 cmpb $61, %cl + 0x0f, 0x85, 0x62, 0x01, 0x00, 0x00, //0x000037aa jne LBB1_827 + 0x49, 0x89, 0xc7, //0x000037b0 movq %rax, %r15 + 0x41, 0x83, 0xfa, 0x04, //0x000037b3 cmpl $4, %r10d + 0x0f, 0x84, 0x34, 0xf9, 0xff, 0xff, //0x000037b7 je LBB1_696 + 0x48, 0x39, 0x45, 0xd0, //0x000037bd cmpq %rax, $-48(%rbp) + 0x0f, 0x87, 0x2a, 0x00, 0x00, 0x00, //0x000037c1 ja LBB1_830 + 0xe9, 0x19, 0xf8, 0xff, 0xff, //0x000037c7 jmp LBB1_719 + //0x000037cc LBB1_846 + 0x4c, 0x89, 0xf9, //0x000037cc movq %r15, %rcx + 0x48, 0x89, 0xc8, //0x000037cf movq %rcx, %rax + 0x48, 0x3b, 0x4d, 0xd0, //0x000037d2 cmpq $-48(%rbp), %rcx + 0x0f, 0x82, 0x15, 0x00, 0x00, 0x00, //0x000037d6 jb LBB1_830 + 0xe9, 0x2c, 0xfe, 0xff, 0xff, //0x000037dc jmp LBB1_720 + //0x000037e1 LBB1_828 + 0x49, 0x89, 0xcf, //0x000037e1 movq %rcx, %r15 + 0x48, 0x89, 0xc8, //0x000037e4 movq %rcx, %rax + 0x48, 0x3b, 0x4d, 0xd0, //0x000037e7 cmpq $-48(%rbp), %rcx + 0x0f, 0x83, 0x1c, 0xfe, 0xff, 0xff, //0x000037eb jae LBB1_720 + //0x000037f1 LBB1_830 + 0x4c, 0x8d, 0x78, 0x01, //0x000037f1 leaq $1(%rax), %r15 + 0x0f, 0xb6, 0x08, //0x000037f5 movzbl (%rax), %ecx + 0x80, 0xf9, 0x5c, //0x000037f8 cmpb $92, %cl + 0x0f, 0x85, 0xec, 0x00, 0x00, 0x00, //0x000037fb jne LBB1_843 + 0x48, 0x8d, 0x48, 0x02, //0x00003801 leaq $2(%rax), %rcx + 0x48, 0x3b, 0x4d, 0xd0, //0x00003805 cmpq $-48(%rbp), %rcx + 0x0f, 0x87, 0x00, 0x01, 0x00, 0x00, //0x00003809 ja LBB1_848 + 0x41, 0x0f, 0xb6, 0x17, //0x0000380f movzbl (%r15), %edx + 0x80, 0xfa, 0x6e, //0x00003813 cmpb $110, %dl + 0x0f, 0x84, 0xc5, 0xff, 0xff, 0xff, //0x00003816 je LBB1_828 + 0x80, 0xfa, 0x72, //0x0000381c cmpb $114, %dl + 0x0f, 0x84, 0xbc, 0xff, 0xff, 0xff, //0x0000381f je LBB1_828 + 0x80, 0xfa, 0x75, //0x00003825 cmpb $117, %dl + 0x0f, 0x85, 0xd9, 0x00, 0x00, 0x00, //0x00003828 jne LBB1_847 + 0x48, 0x8b, 0x55, 0xd0, //0x0000382e movq $-48(%rbp), %rdx + 0x48, 0x29, 0xca, //0x00003832 subq %rcx, %rdx + 0x48, 0x83, 0xfa, 0x04, //0x00003835 cmpq $4, %rdx + 0x0f, 0x8c, 0xc8, 0x00, 0x00, 0x00, //0x00003839 jl LBB1_847 + 0x8b, 0x11, //0x0000383f movl (%rcx), %edx + 0x89, 0xd6, //0x00003841 movl %edx, %esi + 0xf7, 0xd6, //0x00003843 notl %esi + 0x8d, 0xba, 0xd0, 0xcf, 0xcf, 0xcf, //0x00003845 leal $-808464432(%rdx), %edi + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x0000384b andl $-2139062144, %esi + 0x85, 0xfe, //0x00003851 testl %edi, %esi + 0x0f, 0x85, 0xae, 0x00, 0x00, 0x00, //0x00003853 jne LBB1_847 + 0x8d, 0xba, 0x19, 0x19, 0x19, 0x19, //0x00003859 leal $421075225(%rdx), %edi + 0x09, 0xd7, //0x0000385f orl %edx, %edi + 0xf7, 0xc7, 0x80, 0x80, 0x80, 0x80, //0x00003861 testl $-2139062144, %edi + 0x0f, 0x85, 0x9a, 0x00, 0x00, 0x00, //0x00003867 jne LBB1_847 + 0x89, 0xd7, //0x0000386d movl %edx, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x0000386f andl $2139062143, %edi + 0xbb, 0xc0, 0xc0, 0xc0, 0xc0, //0x00003875 movl $-1061109568, %ebx + 0x29, 0xfb, //0x0000387a subl %edi, %ebx + 0x44, 0x8d, 0x87, 0x46, 0x46, 0x46, 0x46, //0x0000387c leal $1179010630(%rdi), %r8d + 0x21, 0xf3, //0x00003883 andl %esi, %ebx + 0x44, 0x85, 0xc3, //0x00003885 testl %r8d, %ebx + 0x0f, 0x85, 0x79, 0x00, 0x00, 0x00, //0x00003888 jne LBB1_847 + 0xbb, 0xe0, 0xe0, 0xe0, 0xe0, //0x0000388e movl $-522133280, %ebx + 0x29, 0xfb, //0x00003893 subl %edi, %ebx + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x00003895 addl $960051513, %edi + 0x21, 0xde, //0x0000389b andl %ebx, %esi + 0x85, 0xfe, //0x0000389d testl %edi, %esi + 0x0f, 0x85, 0x62, 0x00, 0x00, 0x00, //0x0000389f jne LBB1_847 + 0x0f, 0xca, //0x000038a5 bswapl %edx + 0x89, 0xd1, //0x000038a7 movl %edx, %ecx + 0xc1, 0xe9, 0x04, //0x000038a9 shrl $4, %ecx + 0xf7, 0xd1, //0x000038ac notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x000038ae andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x000038b4 leal (%rcx,%rcx,8), %ecx + 0x81, 0xe2, 0x0f, 0x0f, 0x0f, 0x0f, //0x000038b7 andl $252645135, %edx + 0x01, 0xca, //0x000038bd addl %ecx, %edx + 0x89, 0xd1, //0x000038bf movl %edx, %ecx + 0xc1, 0xe9, 0x04, //0x000038c1 shrl $4, %ecx + 0x09, 0xd1, //0x000038c4 orl %edx, %ecx + 0x89, 0xca, //0x000038c6 movl %ecx, %edx + 0xc1, 0xea, 0x08, //0x000038c8 shrl $8, %edx + 0x81, 0xe2, 0x00, 0xff, 0x00, 0x00, //0x000038cb andl $65280, %edx + 0x89, 0xce, //0x000038d1 movl %ecx, %esi + 0x81, 0xe6, 0x80, 0x00, 0x00, 0x00, //0x000038d3 andl $128, %esi + 0x09, 0xd6, //0x000038d9 orl %edx, %esi + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x000038db je LBB1_842 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x000038e1 movl $255, %ecx + //0x000038e6 LBB1_842 + 0x48, 0x83, 0xc0, 0x06, //0x000038e6 addq $6, %rax + 0x49, 0x89, 0xc7, //0x000038ea movq %rax, %r15 + //0x000038ed LBB1_843 + 0x80, 0xf9, 0x0a, //0x000038ed cmpb $10, %cl + 0x0f, 0x84, 0xd6, 0xfe, 0xff, 0xff, //0x000038f0 je LBB1_846 + 0x80, 0xf9, 0x0d, //0x000038f6 cmpb $13, %cl + 0x0f, 0x84, 0xcd, 0xfe, 0xff, 0xff, //0x000038f9 je LBB1_846 + 0x80, 0xf9, 0x3d, //0x000038ff cmpb $61, %cl + 0xe9, 0xea, 0xf7, 0xff, 0xff, //0x00003902 jmp LBB1_696 + //0x00003907 LBB1_847 + 0x49, 0x89, 0xcf, //0x00003907 movq %rcx, %r15 + 0xe9, 0xe2, 0xf7, 0xff, 0xff, //0x0000390a jmp LBB1_696 + //0x0000390f LBB1_848 + 0x4c, 0x89, 0xf8, //0x0000390f movq %r15, %rax + //0x00003912 LBB1_827 + 0x49, 0x89, 0xc7, //0x00003912 movq %rax, %r15 + 0xe9, 0xd7, 0xf7, 0xff, 0xff, //0x00003915 jmp LBB1_696 + //0x0000391a LBB1_851 + 0x44, 0x8b, 0x75, 0xbc, //0x0000391a movl $-68(%rbp), %r14d + 0x45, 0x89, 0xf4, //0x0000391e movl %r14d, %r12d + 0x41, 0x83, 0xe4, 0x02, //0x00003921 andl $2, %r12d + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00003925 jmp LBB1_853 + //0x0000392a LBB1_852 + 0x4d, 0x89, 0xf9, //0x0000392a movq %r15, %r9 + 0x44, 0x8b, 0x75, 0xbc, //0x0000392d movl $-68(%rbp), %r14d + 0x48, 0x8b, 0x5d, 0xd0, //0x00003931 movq $-48(%rbp), %rbx + //0x00003935 LBB1_853 + 0x48, 0x8b, 0x45, 0xa8, //0x00003935 movq $-88(%rbp), %rax + 0x48, 0x8b, 0x4d, 0x88, //0x00003939 movq $-120(%rbp), %rcx + 0x48, 0x8d, 0x54, 0x01, 0xfe, //0x0000393d leaq $-2(%rcx,%rax), %rdx + 0x48, 0x89, 0x55, 0xc8, //0x00003942 movq %rdx, $-56(%rbp) + 0x48, 0x8d, 0x44, 0x01, 0xfd, //0x00003946 leaq $-3(%rcx,%rax), %rax + 0x48, 0x89, 0x45, 0xa0, //0x0000394b movq %rax, $-96(%rbp) + 0xe9, 0x37, 0x00, 0x00, 0x00, //0x0000394f jmp LBB1_857 + //0x00003954 LBB1_854 + 0x48, 0x89, 0x45, 0xb0, //0x00003954 movq %rax, $-80(%rbp) + 0x4c, 0x8b, 0x7d, 0xa8, //0x00003958 movq $-88(%rbp), %r15 + 0xe9, 0x57, 0xcc, 0xff, 0xff, //0x0000395c jmp LBB1_2 + //0x00003961 LBB1_1102 + 0x49, 0x89, 0xc8, //0x00003961 movq %rcx, %r8 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003964 .p2align 4, 0x90 + //0x00003970 LBB1_856 + 0x49, 0x8d, 0x48, 0x01, //0x00003970 leaq $1(%r8), %rcx + 0x4c, 0x39, 0xc3, //0x00003974 cmpq %r8, %rbx + 0x49, 0x0f, 0x45, 0xc8, //0x00003977 cmovneq %r8, %rcx + 0x4c, 0x29, 0xc9, //0x0000397b subq %r9, %rcx + 0x44, 0x8b, 0x75, 0xbc, //0x0000397e movl $-68(%rbp), %r14d + 0x48, 0x85, 0xc9, //0x00003982 testq %rcx, %rcx + 0x0f, 0x85, 0x15, 0x10, 0x00, 0x00, //0x00003985 jne LBB1_1137 + //0x0000398b LBB1_857 + 0x4c, 0x39, 0xcb, //0x0000398b cmpq %r9, %rbx + 0x0f, 0x86, 0x1b, 0x10, 0x00, 0x00, //0x0000398e jbe LBB1_1138 + 0x41, 0xf6, 0xc6, 0x08, //0x00003994 testb $8, %r14b + 0x0f, 0x85, 0xc2, 0x00, 0x00, 0x00, //0x00003998 jne LBB1_870 + 0x4d, 0x89, 0xc8, //0x0000399e movq %r9, %r8 + 0xe9, 0x16, 0x00, 0x00, 0x00, //0x000039a1 jmp LBB1_861 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000039a6 .p2align 4, 0x90 + //0x000039b0 LBB1_860 + 0x49, 0xff, 0xc0, //0x000039b0 incq %r8 + 0x49, 0x39, 0xd8, //0x000039b3 cmpq %rbx, %r8 + 0x0f, 0x83, 0x04, 0x02, 0x00, 0x00, //0x000039b6 jae LBB1_888 + //0x000039bc LBB1_861 + 0x41, 0x0f, 0xb6, 0x00, //0x000039bc movzbl (%r8), %eax + 0x48, 0x83, 0xf8, 0x0d, //0x000039c0 cmpq $13, %rax + 0x0f, 0x84, 0xe6, 0xff, 0xff, 0xff, //0x000039c4 je LBB1_860 + 0x3c, 0x0a, //0x000039ca cmpb $10, %al + 0x0f, 0x84, 0xde, 0xff, 0xff, 0xff, //0x000039cc je LBB1_860 + 0x48, 0x8b, 0x4d, 0xc0, //0x000039d2 movq $-64(%rbp), %rcx + 0x0f, 0xb6, 0x14, 0x01, //0x000039d6 movzbl (%rcx,%rax), %edx + 0x49, 0xff, 0xc0, //0x000039da incq %r8 + 0x81, 0xfa, 0xff, 0x00, 0x00, 0x00, //0x000039dd cmpl $255, %edx + 0x0f, 0x84, 0xb7, 0x02, 0x00, 0x00, //0x000039e3 je LBB1_902 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x000039e9 movl $1, %r11d + 0x49, 0x39, 0xd8, //0x000039ef cmpq %rbx, %r8 + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x000039f2 jb LBB1_866 + 0xe9, 0xe3, 0x0b, 0x00, 0x00, //0x000039f8 jmp LBB1_1060 + 0x90, 0x90, 0x90, //0x000039fd .p2align 4, 0x90 + //0x00003a00 LBB1_865 + 0x49, 0xff, 0xc0, //0x00003a00 incq %r8 + 0x49, 0x39, 0xd8, //0x00003a03 cmpq %rbx, %r8 + 0x0f, 0x83, 0x70, 0x04, 0x00, 0x00, //0x00003a06 jae LBB1_933 + //0x00003a0c LBB1_866 + 0x41, 0x0f, 0xb6, 0x00, //0x00003a0c movzbl (%r8), %eax + 0x48, 0x83, 0xf8, 0x0d, //0x00003a10 cmpq $13, %rax + 0x0f, 0x84, 0xe6, 0xff, 0xff, 0xff, //0x00003a14 je LBB1_865 + 0x3c, 0x0a, //0x00003a1a cmpb $10, %al + 0x0f, 0x84, 0xde, 0xff, 0xff, 0xff, //0x00003a1c je LBB1_865 + 0x48, 0x8b, 0x4d, 0xc0, //0x00003a22 movq $-64(%rbp), %rcx + 0x0f, 0xb6, 0x0c, 0x01, //0x00003a26 movzbl (%rcx,%rax), %ecx + 0x49, 0xff, 0xc0, //0x00003a2a incq %r8 + 0x81, 0xf9, 0xff, 0x00, 0x00, 0x00, //0x00003a2d cmpl $255, %ecx + 0x0f, 0x84, 0x25, 0x06, 0x00, 0x00, //0x00003a33 je LBB1_960 + 0xc1, 0xe2, 0x06, //0x00003a39 shll $6, %edx + 0x09, 0xca, //0x00003a3c orl %ecx, %edx + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00003a3e movl $2, %r11d + 0x49, 0x39, 0xd8, //0x00003a44 cmpq %rbx, %r8 + 0x0f, 0x82, 0xb5, 0x01, 0x00, 0x00, //0x00003a47 jb LBB1_892 + 0xe9, 0x8e, 0x0b, 0x00, 0x00, //0x00003a4d jmp LBB1_1060 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003a52 .p2align 4, 0x90 + //0x00003a60 LBB1_870 + 0x4c, 0x89, 0xca, //0x00003a60 movq %r9, %rdx + 0xe9, 0x24, 0x00, 0x00, 0x00, //0x00003a63 jmp LBB1_873 + //0x00003a68 LBB1_871 + 0x80, 0xf9, 0x6e, //0x00003a68 cmpb $110, %cl + 0x0f, 0x85, 0xdf, 0x01, 0x00, 0x00, //0x00003a6b jne LBB1_897 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003a71 .p2align 4, 0x90 + //0x00003a80 LBB1_872 + 0x4c, 0x89, 0xc2, //0x00003a80 movq %r8, %rdx + 0x49, 0x39, 0xd8, //0x00003a83 cmpq %rbx, %r8 + 0x0f, 0x83, 0x34, 0x01, 0x00, 0x00, //0x00003a86 jae LBB1_888 + //0x00003a8c LBB1_873 + 0x48, 0x8d, 0x4a, 0x01, //0x00003a8c leaq $1(%rdx), %rcx + 0x0f, 0xb6, 0x02, //0x00003a90 movzbl (%rdx), %eax + 0x3c, 0x5c, //0x00003a93 cmpb $92, %al + 0x0f, 0x85, 0x05, 0x01, 0x00, 0x00, //0x00003a95 jne LBB1_886 + 0x4c, 0x8d, 0x42, 0x02, //0x00003a9b leaq $2(%rdx), %r8 + 0xb0, 0xff, //0x00003a9f movb $-1, %al + 0x49, 0x39, 0xd8, //0x00003aa1 cmpq %rbx, %r8 + 0x0f, 0x87, 0x9e, 0x01, 0x00, 0x00, //0x00003aa4 ja LBB1_896 + 0x0f, 0xb6, 0x09, //0x00003aaa movzbl (%rcx), %ecx + 0x80, 0xf9, 0x71, //0x00003aad cmpb $113, %cl + 0x0f, 0x8e, 0xb2, 0xff, 0xff, 0xff, //0x00003ab0 jle LBB1_871 + 0x80, 0xf9, 0x72, //0x00003ab6 cmpb $114, %cl + 0x0f, 0x84, 0xc1, 0xff, 0xff, 0xff, //0x00003ab9 je LBB1_872 + 0x80, 0xf9, 0x75, //0x00003abf cmpb $117, %cl + 0x0f, 0x85, 0x98, 0x01, 0x00, 0x00, //0x00003ac2 jne LBB1_899 + 0x48, 0x89, 0xd9, //0x00003ac8 movq %rbx, %rcx + 0x4c, 0x29, 0xc1, //0x00003acb subq %r8, %rcx + 0x48, 0x83, 0xf9, 0x04, //0x00003ace cmpq $4, %rcx + 0x0f, 0x8c, 0x88, 0x01, 0x00, 0x00, //0x00003ad2 jl LBB1_899 + 0x41, 0x8b, 0x08, //0x00003ad8 movl (%r8), %ecx + 0x89, 0xcf, //0x00003adb movl %ecx, %edi + 0xf7, 0xd7, //0x00003add notl %edi + 0x8d, 0xb1, 0xd0, 0xcf, 0xcf, 0xcf, //0x00003adf leal $-808464432(%rcx), %esi + 0x81, 0xe7, 0x80, 0x80, 0x80, 0x80, //0x00003ae5 andl $-2139062144, %edi + 0x85, 0xf7, //0x00003aeb testl %esi, %edi + 0x0f, 0x85, 0x6d, 0x01, 0x00, 0x00, //0x00003aed jne LBB1_899 + 0x8d, 0xb1, 0x19, 0x19, 0x19, 0x19, //0x00003af3 leal $421075225(%rcx), %esi + 0x09, 0xce, //0x00003af9 orl %ecx, %esi + 0xf7, 0xc6, 0x80, 0x80, 0x80, 0x80, //0x00003afb testl $-2139062144, %esi + 0x0f, 0x85, 0x59, 0x01, 0x00, 0x00, //0x00003b01 jne LBB1_899 + 0x89, 0xce, //0x00003b07 movl %ecx, %esi + 0x81, 0xe6, 0x7f, 0x7f, 0x7f, 0x7f, //0x00003b09 andl $2139062143, %esi + 0xbb, 0xc0, 0xc0, 0xc0, 0xc0, //0x00003b0f movl $-1061109568, %ebx + 0x29, 0xf3, //0x00003b14 subl %esi, %ebx + 0x44, 0x8d, 0x96, 0x46, 0x46, 0x46, 0x46, //0x00003b16 leal $1179010630(%rsi), %r10d + 0x21, 0xfb, //0x00003b1d andl %edi, %ebx + 0x44, 0x85, 0xd3, //0x00003b1f testl %r10d, %ebx + 0x48, 0x8b, 0x5d, 0xd0, //0x00003b22 movq $-48(%rbp), %rbx + 0x0f, 0x85, 0x34, 0x01, 0x00, 0x00, //0x00003b26 jne LBB1_899 + 0xbb, 0xe0, 0xe0, 0xe0, 0xe0, //0x00003b2c movl $-522133280, %ebx + 0x29, 0xf3, //0x00003b31 subl %esi, %ebx + 0x81, 0xc6, 0x39, 0x39, 0x39, 0x39, //0x00003b33 addl $960051513, %esi + 0x21, 0xdf, //0x00003b39 andl %ebx, %edi + 0x48, 0x8b, 0x5d, 0xd0, //0x00003b3b movq $-48(%rbp), %rbx + 0x85, 0xf7, //0x00003b3f testl %esi, %edi + 0x0f, 0x85, 0x19, 0x01, 0x00, 0x00, //0x00003b41 jne LBB1_899 + 0x0f, 0xc9, //0x00003b47 bswapl %ecx + 0x89, 0xc8, //0x00003b49 movl %ecx, %eax + 0xc1, 0xe8, 0x04, //0x00003b4b shrl $4, %eax + 0xf7, 0xd0, //0x00003b4e notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x00003b50 andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x00003b55 leal (%rax,%rax,8), %eax + 0x81, 0xe1, 0x0f, 0x0f, 0x0f, 0x0f, //0x00003b58 andl $252645135, %ecx + 0x01, 0xc1, //0x00003b5e addl %eax, %ecx + 0x89, 0xc8, //0x00003b60 movl %ecx, %eax + 0xc1, 0xe8, 0x04, //0x00003b62 shrl $4, %eax + 0x09, 0xc8, //0x00003b65 orl %ecx, %eax + 0x89, 0xc1, //0x00003b67 movl %eax, %ecx + 0xc1, 0xe9, 0x08, //0x00003b69 shrl $8, %ecx + 0x81, 0xe1, 0x00, 0xff, 0x00, 0x00, //0x00003b6c andl $65280, %ecx + 0x89, 0xc6, //0x00003b72 movl %eax, %esi + 0x81, 0xe6, 0x80, 0x00, 0x00, 0x00, //0x00003b74 andl $128, %esi + 0x09, 0xce, //0x00003b7a orl %ecx, %esi + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00003b7c je LBB1_885 + 0xb8, 0xff, 0x00, 0x00, 0x00, //0x00003b82 movl $255, %eax + //0x00003b87 LBB1_885 + 0x48, 0x83, 0xc2, 0x06, //0x00003b87 addq $6, %rdx + 0x49, 0x89, 0xd0, //0x00003b8b movq %rdx, %r8 + 0x3c, 0x0d, //0x00003b8e cmpb $13, %al + 0x0f, 0x85, 0x15, 0x00, 0x00, 0x00, //0x00003b90 jne LBB1_887 + 0xe9, 0xe5, 0xfe, 0xff, 0xff, //0x00003b96 jmp LBB1_872 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003b9b .p2align 4, 0x90 + //0x00003ba0 LBB1_886 + 0x49, 0x89, 0xc8, //0x00003ba0 movq %rcx, %r8 + 0x3c, 0x0d, //0x00003ba3 cmpb $13, %al + 0x0f, 0x84, 0xd5, 0xfe, 0xff, 0xff, //0x00003ba5 je LBB1_872 + //0x00003bab LBB1_887 + 0x3c, 0x0a, //0x00003bab cmpb $10, %al + 0x0f, 0x84, 0xcd, 0xfe, 0xff, 0xff, //0x00003bad je LBB1_872 + 0xe9, 0xa8, 0x00, 0x00, 0x00, //0x00003bb3 jmp LBB1_899 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003bb8 .p2align 4, 0x90 + //0x00003bc0 LBB1_888 + 0x31, 0xd2, //0x00003bc0 xorl %edx, %edx + 0x45, 0x31, 0xdb, //0x00003bc2 xorl %r11d, %r11d + //0x00003bc5 LBB1_889 + 0x45, 0x85, 0xdb, //0x00003bc5 testl %r11d, %r11d + 0x0f, 0x85, 0x12, 0x0a, 0x00, 0x00, //0x00003bc8 jne LBB1_1060 + 0x4d, 0x89, 0xc1, //0x00003bce movq %r8, %r9 + 0x31, 0xc9, //0x00003bd1 xorl %ecx, %ecx + 0x48, 0x85, 0xc9, //0x00003bd3 testq %rcx, %rcx + 0x0f, 0x84, 0xaf, 0xfd, 0xff, 0xff, //0x00003bd6 je LBB1_857 + 0xe9, 0xbf, 0x0d, 0x00, 0x00, //0x00003bdc jmp LBB1_1137 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003be1 .p2align 4, 0x90 + //0x00003bf0 LBB1_891 + 0x49, 0xff, 0xc0, //0x00003bf0 incq %r8 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00003bf3 movl $2, %r11d + 0x49, 0x39, 0xd8, //0x00003bf9 cmpq %rbx, %r8 + 0x0f, 0x83, 0xc3, 0xff, 0xff, 0xff, //0x00003bfc jae LBB1_889 + //0x00003c02 LBB1_892 + 0x41, 0x0f, 0xb6, 0x00, //0x00003c02 movzbl (%r8), %eax + 0x48, 0x83, 0xf8, 0x0d, //0x00003c06 cmpq $13, %rax + 0x0f, 0x84, 0xe0, 0xff, 0xff, 0xff, //0x00003c0a je LBB1_891 + 0x3c, 0x0a, //0x00003c10 cmpb $10, %al + 0x0f, 0x84, 0xd8, 0xff, 0xff, 0xff, //0x00003c12 je LBB1_891 + 0x48, 0x8b, 0x4d, 0xc0, //0x00003c18 movq $-64(%rbp), %rcx + 0x0f, 0xb6, 0x0c, 0x01, //0x00003c1c movzbl (%rcx,%rax), %ecx + 0x49, 0xff, 0xc0, //0x00003c20 incq %r8 + 0x81, 0xf9, 0xff, 0x00, 0x00, 0x00, //0x00003c23 cmpl $255, %ecx + 0x0f, 0x84, 0xbd, 0x07, 0x00, 0x00, //0x00003c29 je LBB1_1025 + 0xc1, 0xe2, 0x06, //0x00003c2f shll $6, %edx + 0x09, 0xca, //0x00003c32 orl %ecx, %edx + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00003c34 movl $3, %r11d + 0x49, 0x39, 0xd8, //0x00003c3a cmpq %rbx, %r8 + 0x0f, 0x82, 0x6f, 0x02, 0x00, 0x00, //0x00003c3d jb LBB1_936 + 0xe9, 0x98, 0x09, 0x00, 0x00, //0x00003c43 jmp LBB1_1060 + //0x00003c48 LBB1_896 + 0x49, 0x89, 0xc8, //0x00003c48 movq %rcx, %r8 + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00003c4b jmp LBB1_899 + //0x00003c50 LBB1_897 + 0x80, 0xf9, 0x2f, //0x00003c50 cmpb $47, %cl + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00003c53 jne LBB1_899 + 0x89, 0xc8, //0x00003c59 movl %ecx, %eax + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003c5b .p2align 4, 0x90 + //0x00003c60 LBB1_899 + 0x0f, 0xb6, 0xc8, //0x00003c60 movzbl %al, %ecx + 0x48, 0x8b, 0x55, 0xc0, //0x00003c63 movq $-64(%rbp), %rdx + 0x0f, 0xb6, 0x14, 0x0a, //0x00003c67 movzbl (%rdx,%rcx), %edx + 0x81, 0xfa, 0xff, 0x00, 0x00, 0x00, //0x00003c6b cmpl $255, %edx + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x00003c71 je LBB1_902 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00003c77 movl $1, %r11d + 0x49, 0x39, 0xd8, //0x00003c7d cmpq %rbx, %r8 + 0x0f, 0x83, 0x5a, 0x09, 0x00, 0x00, //0x00003c80 jae LBB1_1060 + 0x41, 0x89, 0xd7, //0x00003c86 movl %edx, %r15d + 0x4c, 0x89, 0xc2, //0x00003c89 movq %r8, %rdx + 0xe9, 0xd6, 0x00, 0x00, 0x00, //0x00003c8c jmp LBB1_918 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003c91 .p2align 4, 0x90 + //0x00003ca0 LBB1_902 + 0x45, 0x31, 0xff, //0x00003ca0 xorl %r15d, %r15d + 0x45, 0x31, 0xdb, //0x00003ca3 xorl %r11d, %r11d + //0x00003ca6 LBB1_903 + 0x45, 0x85, 0xe4, //0x00003ca6 testl %r12d, %r12d + 0x0f, 0x85, 0xc1, 0xfc, 0xff, 0xff, //0x00003ca9 jne LBB1_856 + 0x41, 0x83, 0xfb, 0x02, //0x00003caf cmpl $2, %r11d + 0x0f, 0x82, 0xb7, 0xfc, 0xff, 0xff, //0x00003cb3 jb LBB1_856 + 0x3c, 0x3d, //0x00003cb9 cmpb $61, %al + 0x0f, 0x85, 0xaf, 0xfc, 0xff, 0xff, //0x00003cbb jne LBB1_856 + 0x41, 0xbe, 0x05, 0x00, 0x00, 0x00, //0x00003cc1 movl $5, %r14d + 0x45, 0x29, 0xde, //0x00003cc7 subl %r11d, %r14d + 0xf6, 0x45, 0xbc, 0x08, //0x00003cca testb $8, $-68(%rbp) + 0x0f, 0x85, 0x19, 0x02, 0x00, 0x00, //0x00003cce jne LBB1_940 + 0x4c, 0x39, 0xc3, //0x00003cd4 cmpq %r8, %rbx + 0x0f, 0x86, 0x2e, 0x09, 0x00, 0x00, //0x00003cd7 jbe LBB1_1063 + 0x49, 0x8d, 0x48, 0x03, //0x00003cdd leaq $3(%r8), %rcx + 0x48, 0x8b, 0x75, 0xc8, //0x00003ce1 movq $-56(%rbp), %rsi + 0x4c, 0x29, 0xc6, //0x00003ce5 subq %r8, %rsi + 0x49, 0x8d, 0x50, 0x04, //0x00003ce8 leaq $4(%r8), %rdx + 0x48, 0x8b, 0x7d, 0xa0, //0x00003cec movq $-96(%rbp), %rdi + 0x4c, 0x29, 0xc7, //0x00003cf0 subq %r8, %rdi + 0xe9, 0x20, 0x00, 0x00, 0x00, //0x00003cf3 jmp LBB1_910 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003cf8 .p2align 4, 0x90 + //0x00003d00 LBB1_909 + 0x49, 0xff, 0xc0, //0x00003d00 incq %r8 + 0x48, 0xff, 0xc1, //0x00003d03 incq %rcx + 0x48, 0xff, 0xce, //0x00003d06 decq %rsi + 0x48, 0xff, 0xc2, //0x00003d09 incq %rdx + 0x48, 0xff, 0xcf, //0x00003d0c decq %rdi + 0x4c, 0x39, 0xc3, //0x00003d0f cmpq %r8, %rbx + 0x0f, 0x84, 0x7e, 0x08, 0x00, 0x00, //0x00003d12 je LBB1_993 + //0x00003d18 LBB1_910 + 0x41, 0x0f, 0xb6, 0x00, //0x00003d18 movzbl (%r8), %eax + 0x3c, 0x0a, //0x00003d1c cmpb $10, %al + 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x00003d1e je LBB1_909 + 0x3c, 0x0d, //0x00003d24 cmpb $13, %al + 0x0f, 0x84, 0xd4, 0xff, 0xff, 0xff, //0x00003d26 je LBB1_909 + 0x3c, 0x3d, //0x00003d2c cmpb $61, %al + 0x0f, 0x85, 0x1d, 0x05, 0x00, 0x00, //0x00003d2e jne LBB1_855 + 0x49, 0xff, 0xc0, //0x00003d34 incq %r8 + 0x41, 0x83, 0xfe, 0x02, //0x00003d37 cmpl $2, %r14d + 0x0f, 0x84, 0x2f, 0xfc, 0xff, 0xff, //0x00003d3b je LBB1_856 + 0x4c, 0x39, 0xc3, //0x00003d41 cmpq %r8, %rbx + 0x0f, 0x87, 0x3a, 0x03, 0x00, 0x00, //0x00003d44 ja LBB1_962 + 0xe9, 0xbc, 0x08, 0x00, 0x00, //0x00003d4a jmp LBB1_1063 + //0x00003d4f LBB1_915 + 0x80, 0xf9, 0x6e, //0x00003d4f cmpb $110, %cl + 0x0f, 0x85, 0x63, 0x03, 0x00, 0x00, //0x00003d52 jne LBB1_967 + //0x00003d58 LBB1_916 + 0x4d, 0x89, 0xd0, //0x00003d58 movq %r10, %r8 + //0x00003d5b LBB1_917 + 0x4c, 0x89, 0xc2, //0x00003d5b movq %r8, %rdx + 0x49, 0x39, 0xd8, //0x00003d5e cmpq %rbx, %r8 + 0x0f, 0x83, 0x20, 0x01, 0x00, 0x00, //0x00003d61 jae LBB1_934 + //0x00003d67 LBB1_918 + 0x4c, 0x8d, 0x42, 0x01, //0x00003d67 leaq $1(%rdx), %r8 + 0x0f, 0xb6, 0x02, //0x00003d6b movzbl (%rdx), %eax + 0x3c, 0x5c, //0x00003d6e cmpb $92, %al + 0x0f, 0x85, 0xf1, 0x00, 0x00, 0x00, //0x00003d70 jne LBB1_931 + 0x4c, 0x8d, 0x52, 0x02, //0x00003d76 leaq $2(%rdx), %r10 + 0xb0, 0xff, //0x00003d7a movb $-1, %al + 0x49, 0x39, 0xda, //0x00003d7c cmpq %rbx, %r10 + 0x0f, 0x87, 0x48, 0x03, 0x00, 0x00, //0x00003d7f ja LBB1_970 + 0x41, 0x0f, 0xb6, 0x08, //0x00003d85 movzbl (%r8), %ecx + 0x80, 0xf9, 0x71, //0x00003d89 cmpb $113, %cl + 0x0f, 0x8e, 0xbd, 0xff, 0xff, 0xff, //0x00003d8c jle LBB1_915 + 0x80, 0xf9, 0x72, //0x00003d92 cmpb $114, %cl + 0x0f, 0x84, 0xbd, 0xff, 0xff, 0xff, //0x00003d95 je LBB1_916 + 0x80, 0xf9, 0x75, //0x00003d9b cmpb $117, %cl + 0x0f, 0x85, 0x22, 0x03, 0x00, 0x00, //0x00003d9e jne LBB1_969 + 0x48, 0x8b, 0x4d, 0xd0, //0x00003da4 movq $-48(%rbp), %rcx + 0x4c, 0x29, 0xd1, //0x00003da8 subq %r10, %rcx + 0x48, 0x83, 0xf9, 0x04, //0x00003dab cmpq $4, %rcx + 0x0f, 0x8c, 0x11, 0x03, 0x00, 0x00, //0x00003daf jl LBB1_969 + 0x41, 0x8b, 0x3a, //0x00003db5 movl (%r10), %edi + 0x89, 0xfb, //0x00003db8 movl %edi, %ebx + 0xf7, 0xd3, //0x00003dba notl %ebx + 0x8d, 0x8f, 0xd0, 0xcf, 0xcf, 0xcf, //0x00003dbc leal $-808464432(%rdi), %ecx + 0x81, 0xe3, 0x80, 0x80, 0x80, 0x80, //0x00003dc2 andl $-2139062144, %ebx + 0x85, 0xcb, //0x00003dc8 testl %ecx, %ebx + 0x0f, 0x85, 0xf6, 0x02, 0x00, 0x00, //0x00003dca jne LBB1_969 + 0x8d, 0x8f, 0x19, 0x19, 0x19, 0x19, //0x00003dd0 leal $421075225(%rdi), %ecx + 0x09, 0xf9, //0x00003dd6 orl %edi, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x00003dd8 testl $-2139062144, %ecx + 0x0f, 0x85, 0xe2, 0x02, 0x00, 0x00, //0x00003dde jne LBB1_969 + 0x89, 0xf9, //0x00003de4 movl %edi, %ecx + 0x81, 0xe1, 0x7f, 0x7f, 0x7f, 0x7f, //0x00003de6 andl $2139062143, %ecx + 0xbe, 0xc0, 0xc0, 0xc0, 0xc0, //0x00003dec movl $-1061109568, %esi + 0x29, 0xce, //0x00003df1 subl %ecx, %esi + 0x44, 0x8d, 0x81, 0x46, 0x46, 0x46, 0x46, //0x00003df3 leal $1179010630(%rcx), %r8d + 0x21, 0xde, //0x00003dfa andl %ebx, %esi + 0x44, 0x85, 0xc6, //0x00003dfc testl %r8d, %esi + 0x0f, 0x85, 0xc1, 0x02, 0x00, 0x00, //0x00003dff jne LBB1_969 + 0xbe, 0xe0, 0xe0, 0xe0, 0xe0, //0x00003e05 movl $-522133280, %esi + 0x29, 0xce, //0x00003e0a subl %ecx, %esi + 0x81, 0xc1, 0x39, 0x39, 0x39, 0x39, //0x00003e0c addl $960051513, %ecx + 0x21, 0xf3, //0x00003e12 andl %esi, %ebx + 0x85, 0xcb, //0x00003e14 testl %ecx, %ebx + 0x0f, 0x85, 0xaa, 0x02, 0x00, 0x00, //0x00003e16 jne LBB1_969 + 0x0f, 0xcf, //0x00003e1c bswapl %edi + 0x89, 0xf8, //0x00003e1e movl %edi, %eax + 0xc1, 0xe8, 0x04, //0x00003e20 shrl $4, %eax + 0xf7, 0xd0, //0x00003e23 notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x00003e25 andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x00003e2a leal (%rax,%rax,8), %eax + 0x81, 0xe7, 0x0f, 0x0f, 0x0f, 0x0f, //0x00003e2d andl $252645135, %edi + 0x01, 0xc7, //0x00003e33 addl %eax, %edi + 0x89, 0xf8, //0x00003e35 movl %edi, %eax + 0xc1, 0xe8, 0x04, //0x00003e37 shrl $4, %eax + 0x09, 0xf8, //0x00003e3a orl %edi, %eax + 0x89, 0xc1, //0x00003e3c movl %eax, %ecx + 0xc1, 0xe9, 0x08, //0x00003e3e shrl $8, %ecx + 0x81, 0xe1, 0x00, 0xff, 0x00, 0x00, //0x00003e41 andl $65280, %ecx + 0x89, 0xc6, //0x00003e47 movl %eax, %esi + 0x81, 0xe6, 0x80, 0x00, 0x00, 0x00, //0x00003e49 andl $128, %esi + 0x09, 0xce, //0x00003e4f orl %ecx, %esi + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00003e51 je LBB1_930 + 0xb8, 0xff, 0x00, 0x00, 0x00, //0x00003e57 movl $255, %eax + //0x00003e5c LBB1_930 + 0x48, 0x83, 0xc2, 0x06, //0x00003e5c addq $6, %rdx + 0x49, 0x89, 0xd0, //0x00003e60 movq %rdx, %r8 + 0x48, 0x8b, 0x5d, 0xd0, //0x00003e63 movq $-48(%rbp), %rbx + //0x00003e67 LBB1_931 + 0x3c, 0x0a, //0x00003e67 cmpb $10, %al + 0x0f, 0x84, 0xec, 0xfe, 0xff, 0xff, //0x00003e69 je LBB1_917 + 0x3c, 0x0d, //0x00003e6f cmpb $13, %al + 0x0f, 0x84, 0xe4, 0xfe, 0xff, 0xff, //0x00003e71 je LBB1_917 + 0xe9, 0x51, 0x02, 0x00, 0x00, //0x00003e77 jmp LBB1_970 + //0x00003e7c LBB1_933 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00003e7c movl $1, %r11d + 0xe9, 0x3e, 0xfd, 0xff, 0xff, //0x00003e82 jmp LBB1_889 + //0x00003e87 LBB1_934 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00003e87 movl $1, %r11d + 0x44, 0x89, 0xfa, //0x00003e8d movl %r15d, %edx + 0xe9, 0x30, 0xfd, 0xff, 0xff, //0x00003e90 jmp LBB1_889 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003e95 .p2align 4, 0x90 + //0x00003ea0 LBB1_935 + 0x49, 0xff, 0xc0, //0x00003ea0 incq %r8 + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00003ea3 movl $3, %r11d + 0x49, 0x39, 0xd8, //0x00003ea9 cmpq %rbx, %r8 + 0x0f, 0x83, 0x13, 0xfd, 0xff, 0xff, //0x00003eac jae LBB1_889 + //0x00003eb2 LBB1_936 + 0x41, 0x0f, 0xb6, 0x00, //0x00003eb2 movzbl (%r8), %eax + 0x48, 0x83, 0xf8, 0x0d, //0x00003eb6 cmpq $13, %rax + 0x0f, 0x84, 0xe0, 0xff, 0xff, 0xff, //0x00003eba je LBB1_935 + 0x3c, 0x0a, //0x00003ec0 cmpb $10, %al + 0x0f, 0x84, 0xd8, 0xff, 0xff, 0xff, //0x00003ec2 je LBB1_935 + 0x48, 0x8b, 0x4d, 0xc0, //0x00003ec8 movq $-64(%rbp), %rcx + 0x0f, 0xb6, 0x0c, 0x01, //0x00003ecc movzbl (%rcx,%rax), %ecx + 0x49, 0xff, 0xc0, //0x00003ed0 incq %r8 + 0x81, 0xf9, 0xff, 0x00, 0x00, 0x00, //0x00003ed3 cmpl $255, %ecx + 0x0f, 0x85, 0xeb, 0x06, 0x00, 0x00, //0x00003ed9 jne LBB1_1059 + 0x41, 0x89, 0xd7, //0x00003edf movl %edx, %r15d + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00003ee2 movl $3, %r11d + 0xe9, 0xb9, 0xfd, 0xff, 0xff, //0x00003ee8 jmp LBB1_903 + //0x00003eed LBB1_940 + 0x4c, 0x39, 0xc3, //0x00003eed cmpq %r8, %rbx + 0x0f, 0x87, 0x39, 0x00, 0x00, 0x00, //0x00003ef0 ja LBB1_943 + 0xe9, 0x10, 0x07, 0x00, 0x00, //0x00003ef6 jmp LBB1_1063 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003efb .p2align 4, 0x90 + //0x00003f00 LBB1_959 + 0x4c, 0x89, 0xe9, //0x00003f00 movq %r13, %rcx + 0x49, 0x89, 0xc8, //0x00003f03 movq %rcx, %r8 + 0x48, 0x39, 0xd9, //0x00003f06 cmpq %rbx, %rcx + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x00003f09 jb LBB1_943 + 0xe9, 0x42, 0x01, 0x00, 0x00, //0x00003f0f jmp LBB1_994 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003f14 .p2align 4, 0x90 + //0x00003f20 LBB1_941 + 0x49, 0x89, 0xcd, //0x00003f20 movq %rcx, %r13 + 0x49, 0x89, 0xc8, //0x00003f23 movq %rcx, %r8 + 0x48, 0x39, 0xd9, //0x00003f26 cmpq %rbx, %rcx + 0x0f, 0x83, 0x27, 0x01, 0x00, 0x00, //0x00003f29 jae LBB1_994 + //0x00003f2f LBB1_943 + 0x4d, 0x8d, 0x68, 0x01, //0x00003f2f leaq $1(%r8), %r13 + 0x41, 0x0f, 0xb6, 0x08, //0x00003f33 movzbl (%r8), %ecx + 0x80, 0xf9, 0x5c, //0x00003f37 cmpb $92, %cl + 0x0f, 0x85, 0xe5, 0x00, 0x00, 0x00, //0x00003f3a jne LBB1_956 + 0x49, 0x8d, 0x48, 0x02, //0x00003f40 leaq $2(%r8), %rcx + 0x48, 0x39, 0xd9, //0x00003f44 cmpq %rbx, %rcx + 0x0f, 0x87, 0x66, 0x07, 0x00, 0x00, //0x00003f47 ja LBB1_1026 + 0x41, 0x0f, 0xb6, 0x45, 0x00, //0x00003f4d movzbl (%r13), %eax + 0x3c, 0x6e, //0x00003f52 cmpb $110, %al + 0x0f, 0x84, 0xc6, 0xff, 0xff, 0xff, //0x00003f54 je LBB1_941 + 0x3c, 0x72, //0x00003f5a cmpb $114, %al + 0x0f, 0x84, 0xbe, 0xff, 0xff, 0xff, //0x00003f5c je LBB1_941 + 0x3c, 0x75, //0x00003f62 cmpb $117, %al + 0x0f, 0x85, 0xf7, 0xf9, 0xff, 0xff, //0x00003f64 jne LBB1_1102 + 0x48, 0x89, 0xd8, //0x00003f6a movq %rbx, %rax + 0x48, 0x29, 0xc8, //0x00003f6d subq %rcx, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00003f70 cmpq $4, %rax + 0x0f, 0x8c, 0xe7, 0xf9, 0xff, 0xff, //0x00003f74 jl LBB1_1102 + 0x8b, 0x11, //0x00003f7a movl (%rcx), %edx + 0x89, 0xd6, //0x00003f7c movl %edx, %esi + 0xf7, 0xd6, //0x00003f7e notl %esi + 0x8d, 0x82, 0xd0, 0xcf, 0xcf, 0xcf, //0x00003f80 leal $-808464432(%rdx), %eax + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00003f86 andl $-2139062144, %esi + 0x85, 0xc6, //0x00003f8c testl %eax, %esi + 0x0f, 0x85, 0xcd, 0xf9, 0xff, 0xff, //0x00003f8e jne LBB1_1102 + 0x8d, 0x82, 0x19, 0x19, 0x19, 0x19, //0x00003f94 leal $421075225(%rdx), %eax + 0x09, 0xd0, //0x00003f9a orl %edx, %eax + 0xa9, 0x80, 0x80, 0x80, 0x80, //0x00003f9c testl $-2139062144, %eax + 0x0f, 0x85, 0xba, 0xf9, 0xff, 0xff, //0x00003fa1 jne LBB1_1102 + 0x89, 0xd0, //0x00003fa7 movl %edx, %eax + 0x25, 0x7f, 0x7f, 0x7f, 0x7f, //0x00003fa9 andl $2139062143, %eax + 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, //0x00003fae movl $-1061109568, %edi + 0x29, 0xc7, //0x00003fb3 subl %eax, %edi + 0x8d, 0x98, 0x46, 0x46, 0x46, 0x46, //0x00003fb5 leal $1179010630(%rax), %ebx + 0x21, 0xf7, //0x00003fbb andl %esi, %edi + 0x85, 0xdf, //0x00003fbd testl %ebx, %edi + 0x0f, 0x85, 0x9a, 0x09, 0x00, 0x00, //0x00003fbf jne LBB1_1131 + 0xbf, 0xe0, 0xe0, 0xe0, 0xe0, //0x00003fc5 movl $-522133280, %edi + 0x29, 0xc7, //0x00003fca subl %eax, %edi + 0x05, 0x39, 0x39, 0x39, 0x39, //0x00003fcc addl $960051513, %eax + 0x21, 0xfe, //0x00003fd1 andl %edi, %esi + 0x85, 0xc6, //0x00003fd3 testl %eax, %esi + 0x48, 0x8b, 0x5d, 0xd0, //0x00003fd5 movq $-48(%rbp), %rbx + 0x0f, 0x85, 0x82, 0xf9, 0xff, 0xff, //0x00003fd9 jne LBB1_1102 + 0x0f, 0xca, //0x00003fdf bswapl %edx + 0x89, 0xd0, //0x00003fe1 movl %edx, %eax + 0xc1, 0xe8, 0x04, //0x00003fe3 shrl $4, %eax + 0xf7, 0xd0, //0x00003fe6 notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x00003fe8 andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x00003fed leal (%rax,%rax,8), %eax + 0x81, 0xe2, 0x0f, 0x0f, 0x0f, 0x0f, //0x00003ff0 andl $252645135, %edx + 0x01, 0xc2, //0x00003ff6 addl %eax, %edx + 0x89, 0xd1, //0x00003ff8 movl %edx, %ecx + 0xc1, 0xe9, 0x04, //0x00003ffa shrl $4, %ecx + 0x09, 0xd1, //0x00003ffd orl %edx, %ecx + 0x89, 0xc8, //0x00003fff movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x00004001 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00004004 andl $65280, %eax + 0x89, 0xca, //0x00004009 movl %ecx, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x0000400b andl $128, %edx + 0x09, 0xc2, //0x00004011 orl %eax, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00004013 je LBB1_955 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x00004019 movl $255, %ecx + //0x0000401e LBB1_955 + 0x49, 0x83, 0xc0, 0x06, //0x0000401e addq $6, %r8 + 0x4d, 0x89, 0xc5, //0x00004022 movq %r8, %r13 + //0x00004025 LBB1_956 + 0x80, 0xf9, 0x0a, //0x00004025 cmpb $10, %cl + 0x0f, 0x84, 0xd2, 0xfe, 0xff, 0xff, //0x00004028 je LBB1_959 + 0x80, 0xf9, 0x0d, //0x0000402e cmpb $13, %cl + 0x0f, 0x84, 0xc9, 0xfe, 0xff, 0xff, //0x00004031 je LBB1_959 + 0x80, 0xf9, 0x3d, //0x00004037 cmpb $61, %cl + 0x0f, 0x85, 0x73, 0x06, 0x00, 0x00, //0x0000403a jne LBB1_1026 + 0x4d, 0x89, 0xe8, //0x00004040 movq %r13, %r8 + 0x41, 0x83, 0xfe, 0x02, //0x00004043 cmpl $2, %r14d + 0x0f, 0x84, 0x23, 0xf9, 0xff, 0xff, //0x00004047 je LBB1_856 + 0x4c, 0x39, 0xeb, //0x0000404d cmpq %r13, %rbx + 0x0f, 0x87, 0xc7, 0x03, 0x00, 0x00, //0x00004050 ja LBB1_1029 + //0x00004056 LBB1_994 + 0x4d, 0x89, 0xe8, //0x00004056 movq %r13, %r8 + 0xe9, 0xad, 0x05, 0x00, 0x00, //0x00004059 jmp LBB1_1063 + //0x0000405e LBB1_960 + 0x41, 0x89, 0xd7, //0x0000405e movl %edx, %r15d + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00004061 movl $1, %r11d + 0xe9, 0x3a, 0xfc, 0xff, 0xff, //0x00004067 jmp LBB1_903 + //0x0000406c LBB1_961 + 0x49, 0xff, 0xc0, //0x0000406c incq %r8 + 0x48, 0xff, 0xc1, //0x0000406f incq %rcx + 0x48, 0xff, 0xce, //0x00004072 decq %rsi + 0x48, 0xff, 0xc2, //0x00004075 incq %rdx + 0x48, 0xff, 0xcf, //0x00004078 decq %rdi + 0x4c, 0x39, 0xc3, //0x0000407b cmpq %r8, %rbx + 0x0f, 0x84, 0x12, 0x05, 0x00, 0x00, //0x0000407e je LBB1_993 + //0x00004084 LBB1_962 + 0x41, 0x0f, 0xb6, 0x00, //0x00004084 movzbl (%r8), %eax + 0x3c, 0x0a, //0x00004088 cmpb $10, %al + 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x0000408a je LBB1_961 + 0x3c, 0x0d, //0x00004090 cmpb $13, %al + 0x0f, 0x84, 0xd4, 0xff, 0xff, 0xff, //0x00004092 je LBB1_961 + 0x3c, 0x3d, //0x00004098 cmpb $61, %al + 0x0f, 0x85, 0xb1, 0x01, 0x00, 0x00, //0x0000409a jne LBB1_855 + 0x49, 0xff, 0xc0, //0x000040a0 incq %r8 + 0x41, 0x83, 0xfe, 0x03, //0x000040a3 cmpl $3, %r14d + 0x0f, 0x84, 0xc3, 0xf8, 0xff, 0xff, //0x000040a7 je LBB1_856 + 0x4c, 0x39, 0xc3, //0x000040ad cmpq %r8, %rbx + 0x0f, 0x87, 0xa2, 0x04, 0x00, 0x00, //0x000040b0 ja LBB1_1048 + 0xe9, 0x50, 0x05, 0x00, 0x00, //0x000040b6 jmp LBB1_1063 + //0x000040bb LBB1_967 + 0x80, 0xf9, 0x2f, //0x000040bb cmpb $47, %cl + 0x0f, 0x85, 0x02, 0x00, 0x00, 0x00, //0x000040be jne LBB1_969 + 0x89, 0xc8, //0x000040c4 movl %ecx, %eax + //0x000040c6 LBB1_969 + 0x4d, 0x89, 0xd0, //0x000040c6 movq %r10, %r8 + 0x48, 0x8b, 0x5d, 0xd0, //0x000040c9 movq $-48(%rbp), %rbx + //0x000040cd LBB1_970 + 0x0f, 0xb6, 0xc8, //0x000040cd movzbl %al, %ecx + 0x48, 0x8b, 0x55, 0xc0, //0x000040d0 movq $-64(%rbp), %rdx + 0x0f, 0xb6, 0x0c, 0x0a, //0x000040d4 movzbl (%rdx,%rcx), %ecx + 0x81, 0xf9, 0xff, 0x00, 0x00, 0x00, //0x000040d8 cmpl $255, %ecx + 0x0f, 0x84, 0x5a, 0x01, 0x00, 0x00, //0x000040de je LBB1_991 + 0x44, 0x89, 0xfa, //0x000040e4 movl %r15d, %edx + 0xc1, 0xe2, 0x06, //0x000040e7 shll $6, %edx + 0x09, 0xca, //0x000040ea orl %ecx, %edx + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x000040ec movl $2, %r11d + 0x49, 0x39, 0xd8, //0x000040f2 cmpq %rbx, %r8 + 0x0f, 0x83, 0xe5, 0x04, 0x00, 0x00, //0x000040f5 jae LBB1_1060 + 0x41, 0x89, 0xd7, //0x000040fb movl %edx, %r15d + 0xe9, 0x21, 0x00, 0x00, 0x00, //0x000040fe jmp LBB1_976 + //0x00004103 LBB1_973 + 0x80, 0xf9, 0x6e, //0x00004103 cmpb $110, %cl + 0x0f, 0x85, 0x50, 0x01, 0x00, 0x00, //0x00004106 jne LBB1_995 + //0x0000410c LBB1_974 + 0x48, 0x89, 0xd7, //0x0000410c movq %rdx, %rdi + 0x44, 0x89, 0xfa, //0x0000410f movl %r15d, %edx + //0x00004112 LBB1_975 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00004112 movl $2, %r11d + 0x49, 0x89, 0xf8, //0x00004118 movq %rdi, %r8 + 0x48, 0x39, 0xdf, //0x0000411b cmpq %rbx, %rdi + 0x0f, 0x83, 0x25, 0x01, 0x00, 0x00, //0x0000411e jae LBB1_992 + //0x00004124 LBB1_976 + 0x49, 0x8d, 0x78, 0x01, //0x00004124 leaq $1(%r8), %rdi + 0x41, 0x0f, 0xb6, 0x00, //0x00004128 movzbl (%r8), %eax + 0x3c, 0x5c, //0x0000412c cmpb $92, %al + 0x0f, 0x85, 0xf5, 0x00, 0x00, 0x00, //0x0000412e jne LBB1_989 + 0x49, 0x8d, 0x50, 0x02, //0x00004134 leaq $2(%r8), %rdx + 0xb0, 0xff, //0x00004138 movb $-1, %al + 0x48, 0x39, 0xda, //0x0000413a cmpq %rbx, %rdx + 0x0f, 0x87, 0x27, 0x01, 0x00, 0x00, //0x0000413d ja LBB1_998 + 0x0f, 0xb6, 0x0f, //0x00004143 movzbl (%rdi), %ecx + 0x80, 0xf9, 0x71, //0x00004146 cmpb $113, %cl + 0x0f, 0x8e, 0xb4, 0xff, 0xff, 0xff, //0x00004149 jle LBB1_973 + 0x80, 0xf9, 0x72, //0x0000414f cmpb $114, %cl + 0x0f, 0x84, 0xb4, 0xff, 0xff, 0xff, //0x00004152 je LBB1_974 + 0x80, 0xf9, 0x75, //0x00004158 cmpb $117, %cl + 0x0f, 0x85, 0x06, 0x01, 0x00, 0x00, //0x0000415b jne LBB1_997 + 0x48, 0x89, 0xd9, //0x00004161 movq %rbx, %rcx + 0x48, 0x29, 0xd1, //0x00004164 subq %rdx, %rcx + 0x48, 0x83, 0xf9, 0x04, //0x00004167 cmpq $4, %rcx + 0x0f, 0x8c, 0xf6, 0x00, 0x00, 0x00, //0x0000416b jl LBB1_997 + 0x8b, 0x32, //0x00004171 movl (%rdx), %esi + 0x89, 0xf7, //0x00004173 movl %esi, %edi + 0xf7, 0xd7, //0x00004175 notl %edi + 0x8d, 0x8e, 0xd0, 0xcf, 0xcf, 0xcf, //0x00004177 leal $-808464432(%rsi), %ecx + 0x81, 0xe7, 0x80, 0x80, 0x80, 0x80, //0x0000417d andl $-2139062144, %edi + 0x85, 0xcf, //0x00004183 testl %ecx, %edi + 0x0f, 0x85, 0xdc, 0x00, 0x00, 0x00, //0x00004185 jne LBB1_997 + 0x8d, 0x8e, 0x19, 0x19, 0x19, 0x19, //0x0000418b leal $421075225(%rsi), %ecx + 0x09, 0xf1, //0x00004191 orl %esi, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x00004193 testl $-2139062144, %ecx + 0x0f, 0x85, 0xc8, 0x00, 0x00, 0x00, //0x00004199 jne LBB1_997 + 0x89, 0xf1, //0x0000419f movl %esi, %ecx + 0x81, 0xe1, 0x7f, 0x7f, 0x7f, 0x7f, //0x000041a1 andl $2139062143, %ecx + 0xbb, 0xc0, 0xc0, 0xc0, 0xc0, //0x000041a7 movl $-1061109568, %ebx + 0x29, 0xcb, //0x000041ac subl %ecx, %ebx + 0x44, 0x8d, 0x91, 0x46, 0x46, 0x46, 0x46, //0x000041ae leal $1179010630(%rcx), %r10d + 0x21, 0xfb, //0x000041b5 andl %edi, %ebx + 0x44, 0x85, 0xd3, //0x000041b7 testl %r10d, %ebx + 0x48, 0x8b, 0x5d, 0xd0, //0x000041ba movq $-48(%rbp), %rbx + 0x0f, 0x85, 0xa3, 0x00, 0x00, 0x00, //0x000041be jne LBB1_997 + 0xbb, 0xe0, 0xe0, 0xe0, 0xe0, //0x000041c4 movl $-522133280, %ebx + 0x29, 0xcb, //0x000041c9 subl %ecx, %ebx + 0x81, 0xc1, 0x39, 0x39, 0x39, 0x39, //0x000041cb addl $960051513, %ecx + 0x21, 0xdf, //0x000041d1 andl %ebx, %edi + 0x48, 0x8b, 0x5d, 0xd0, //0x000041d3 movq $-48(%rbp), %rbx + 0x85, 0xcf, //0x000041d7 testl %ecx, %edi + 0x0f, 0x85, 0x88, 0x00, 0x00, 0x00, //0x000041d9 jne LBB1_997 + 0x0f, 0xce, //0x000041df bswapl %esi + 0x89, 0xf0, //0x000041e1 movl %esi, %eax + 0xc1, 0xe8, 0x04, //0x000041e3 shrl $4, %eax + 0xf7, 0xd0, //0x000041e6 notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x000041e8 andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x000041ed leal (%rax,%rax,8), %eax + 0x81, 0xe6, 0x0f, 0x0f, 0x0f, 0x0f, //0x000041f0 andl $252645135, %esi + 0x01, 0xc6, //0x000041f6 addl %eax, %esi + 0x89, 0xf0, //0x000041f8 movl %esi, %eax + 0xc1, 0xe8, 0x04, //0x000041fa shrl $4, %eax + 0x09, 0xf0, //0x000041fd orl %esi, %eax + 0x89, 0xc1, //0x000041ff movl %eax, %ecx + 0xc1, 0xe9, 0x08, //0x00004201 shrl $8, %ecx + 0x81, 0xe1, 0x00, 0xff, 0x00, 0x00, //0x00004204 andl $65280, %ecx + 0x89, 0xc2, //0x0000420a movl %eax, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x0000420c andl $128, %edx + 0x09, 0xca, //0x00004212 orl %ecx, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00004214 je LBB1_988 + 0xb8, 0xff, 0x00, 0x00, 0x00, //0x0000421a movl $255, %eax + //0x0000421f LBB1_988 + 0x49, 0x83, 0xc0, 0x06, //0x0000421f addq $6, %r8 + 0x4c, 0x89, 0xc7, //0x00004223 movq %r8, %rdi + 0x44, 0x89, 0xfa, //0x00004226 movl %r15d, %edx + //0x00004229 LBB1_989 + 0x3c, 0x0a, //0x00004229 cmpb $10, %al + 0x0f, 0x84, 0xe1, 0xfe, 0xff, 0xff, //0x0000422b je LBB1_975 + 0x3c, 0x0d, //0x00004231 cmpb $13, %al + 0x0f, 0x84, 0xd9, 0xfe, 0xff, 0xff, //0x00004233 je LBB1_975 + 0xe9, 0x2c, 0x00, 0x00, 0x00, //0x00004239 jmp LBB1_998 + //0x0000423e LBB1_991 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x0000423e movl $1, %r11d + 0xe9, 0x5d, 0xfa, 0xff, 0xff, //0x00004244 jmp LBB1_903 + //0x00004249 LBB1_992 + 0x49, 0x89, 0xf8, //0x00004249 movq %rdi, %r8 + 0xe9, 0x74, 0xf9, 0xff, 0xff, //0x0000424c jmp LBB1_889 + //0x00004251 LBB1_855 + 0x49, 0xff, 0xc0, //0x00004251 incq %r8 + 0x4c, 0x89, 0xc2, //0x00004254 movq %r8, %rdx + 0xe9, 0x14, 0xf7, 0xff, 0xff, //0x00004257 jmp LBB1_856 + //0x0000425c LBB1_995 + 0x80, 0xf9, 0x2f, //0x0000425c cmpb $47, %cl + 0x0f, 0x85, 0x02, 0x00, 0x00, 0x00, //0x0000425f jne LBB1_997 + 0x89, 0xc8, //0x00004265 movl %ecx, %eax + //0x00004267 LBB1_997 + 0x48, 0x89, 0xd7, //0x00004267 movq %rdx, %rdi + //0x0000426a LBB1_998 + 0x0f, 0xb6, 0xc8, //0x0000426a movzbl %al, %ecx + 0x48, 0x8b, 0x55, 0xc0, //0x0000426d movq $-64(%rbp), %rdx + 0x0f, 0xb6, 0x0c, 0x0a, //0x00004271 movzbl (%rdx,%rcx), %ecx + 0x81, 0xf9, 0xff, 0x00, 0x00, 0x00, //0x00004275 cmpl $255, %ecx + 0x0f, 0x84, 0x55, 0x01, 0x00, 0x00, //0x0000427b je LBB1_1019 + 0x44, 0x89, 0xfa, //0x00004281 movl %r15d, %edx + 0xc1, 0xe2, 0x06, //0x00004284 shll $6, %edx + 0x09, 0xca, //0x00004287 orl %ecx, %edx + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00004289 movl $3, %r11d + 0x48, 0x39, 0xdf, //0x0000428f cmpq %rbx, %rdi + 0x0f, 0x83, 0x4c, 0x01, 0x00, 0x00, //0x00004292 jae LBB1_1020 + 0x41, 0x89, 0xd7, //0x00004298 movl %edx, %r15d + 0xe9, 0x1e, 0x00, 0x00, 0x00, //0x0000429b jmp LBB1_1004 + //0x000042a0 LBB1_1001 + 0x80, 0xf9, 0x6e, //0x000042a0 cmpb $110, %cl + 0x0f, 0x85, 0xf5, 0x02, 0x00, 0x00, //0x000042a3 jne LBB1_1054 + //0x000042a9 LBB1_1002 + 0x4d, 0x89, 0xd0, //0x000042a9 movq %r10, %r8 + //0x000042ac LBB1_1003 + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x000042ac movl $3, %r11d + 0x4c, 0x89, 0xc7, //0x000042b2 movq %r8, %rdi + 0x49, 0x39, 0xd8, //0x000042b5 cmpq %rbx, %r8 + 0x0f, 0x83, 0x07, 0xf9, 0xff, 0xff, //0x000042b8 jae LBB1_889 + //0x000042be LBB1_1004 + 0x4c, 0x8d, 0x47, 0x01, //0x000042be leaq $1(%rdi), %r8 + 0x0f, 0xb6, 0x07, //0x000042c2 movzbl (%rdi), %eax + 0x3c, 0x5c, //0x000042c5 cmpb $92, %al + 0x0f, 0x85, 0xf4, 0x00, 0x00, 0x00, //0x000042c7 jne LBB1_1017 + 0x4c, 0x8d, 0x57, 0x02, //0x000042cd leaq $2(%rdi), %r10 + 0xb0, 0xff, //0x000042d1 movb $-1, %al + 0x49, 0x39, 0xda, //0x000042d3 cmpq %rbx, %r10 + 0x0f, 0x87, 0xd4, 0x02, 0x00, 0x00, //0x000042d6 ja LBB1_1057 + 0x41, 0x0f, 0xb6, 0x08, //0x000042dc movzbl (%r8), %ecx + 0x80, 0xf9, 0x71, //0x000042e0 cmpb $113, %cl + 0x0f, 0x8e, 0xb7, 0xff, 0xff, 0xff, //0x000042e3 jle LBB1_1001 + 0x80, 0xf9, 0x72, //0x000042e9 cmpb $114, %cl + 0x0f, 0x84, 0xb7, 0xff, 0xff, 0xff, //0x000042ec je LBB1_1002 + 0x80, 0xf9, 0x75, //0x000042f2 cmpb $117, %cl + 0x0f, 0x85, 0xae, 0x02, 0x00, 0x00, //0x000042f5 jne LBB1_1056 + 0x48, 0x8b, 0x4d, 0xd0, //0x000042fb movq $-48(%rbp), %rcx + 0x4c, 0x29, 0xd1, //0x000042ff subq %r10, %rcx + 0x48, 0x83, 0xf9, 0x04, //0x00004302 cmpq $4, %rcx + 0x0f, 0x8c, 0x9d, 0x02, 0x00, 0x00, //0x00004306 jl LBB1_1056 + 0x41, 0x8b, 0x32, //0x0000430c movl (%r10), %esi + 0x89, 0xf3, //0x0000430f movl %esi, %ebx + 0xf7, 0xd3, //0x00004311 notl %ebx + 0x8d, 0x8e, 0xd0, 0xcf, 0xcf, 0xcf, //0x00004313 leal $-808464432(%rsi), %ecx + 0x81, 0xe3, 0x80, 0x80, 0x80, 0x80, //0x00004319 andl $-2139062144, %ebx + 0x85, 0xcb, //0x0000431f testl %ecx, %ebx + 0x0f, 0x85, 0x82, 0x02, 0x00, 0x00, //0x00004321 jne LBB1_1056 + 0x8d, 0x8e, 0x19, 0x19, 0x19, 0x19, //0x00004327 leal $421075225(%rsi), %ecx + 0x09, 0xf1, //0x0000432d orl %esi, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x0000432f testl $-2139062144, %ecx + 0x0f, 0x85, 0x6e, 0x02, 0x00, 0x00, //0x00004335 jne LBB1_1056 + 0x89, 0xf1, //0x0000433b movl %esi, %ecx + 0x81, 0xe1, 0x7f, 0x7f, 0x7f, 0x7f, //0x0000433d andl $2139062143, %ecx + 0xba, 0xc0, 0xc0, 0xc0, 0xc0, //0x00004343 movl $-1061109568, %edx + 0x29, 0xca, //0x00004348 subl %ecx, %edx + 0x44, 0x8d, 0x81, 0x46, 0x46, 0x46, 0x46, //0x0000434a leal $1179010630(%rcx), %r8d + 0x21, 0xda, //0x00004351 andl %ebx, %edx + 0x44, 0x85, 0xc2, //0x00004353 testl %r8d, %edx + 0x0f, 0x85, 0x4d, 0x02, 0x00, 0x00, //0x00004356 jne LBB1_1056 + 0xba, 0xe0, 0xe0, 0xe0, 0xe0, //0x0000435c movl $-522133280, %edx + 0x29, 0xca, //0x00004361 subl %ecx, %edx + 0x81, 0xc1, 0x39, 0x39, 0x39, 0x39, //0x00004363 addl $960051513, %ecx + 0x21, 0xd3, //0x00004369 andl %edx, %ebx + 0x85, 0xcb, //0x0000436b testl %ecx, %ebx + 0x0f, 0x85, 0x36, 0x02, 0x00, 0x00, //0x0000436d jne LBB1_1056 + 0x0f, 0xce, //0x00004373 bswapl %esi + 0x89, 0xf0, //0x00004375 movl %esi, %eax + 0xc1, 0xe8, 0x04, //0x00004377 shrl $4, %eax + 0xf7, 0xd0, //0x0000437a notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x0000437c andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x00004381 leal (%rax,%rax,8), %eax + 0x81, 0xe6, 0x0f, 0x0f, 0x0f, 0x0f, //0x00004384 andl $252645135, %esi + 0x01, 0xc6, //0x0000438a addl %eax, %esi + 0x89, 0xf0, //0x0000438c movl %esi, %eax + 0xc1, 0xe8, 0x04, //0x0000438e shrl $4, %eax + 0x09, 0xf0, //0x00004391 orl %esi, %eax + 0x89, 0xc1, //0x00004393 movl %eax, %ecx + 0xc1, 0xe9, 0x08, //0x00004395 shrl $8, %ecx + 0x81, 0xe1, 0x00, 0xff, 0x00, 0x00, //0x00004398 andl $65280, %ecx + 0x89, 0xc2, //0x0000439e movl %eax, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x000043a0 andl $128, %edx + 0x09, 0xca, //0x000043a6 orl %ecx, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x000043a8 je LBB1_1016 + 0xb8, 0xff, 0x00, 0x00, 0x00, //0x000043ae movl $255, %eax + //0x000043b3 LBB1_1016 + 0x48, 0x83, 0xc7, 0x06, //0x000043b3 addq $6, %rdi + 0x49, 0x89, 0xf8, //0x000043b7 movq %rdi, %r8 + 0x48, 0x8b, 0x5d, 0xd0, //0x000043ba movq $-48(%rbp), %rbx + 0x44, 0x89, 0xfa, //0x000043be movl %r15d, %edx + //0x000043c1 LBB1_1017 + 0x3c, 0x0a, //0x000043c1 cmpb $10, %al + 0x0f, 0x84, 0xe3, 0xfe, 0xff, 0xff, //0x000043c3 je LBB1_1003 + 0x3c, 0x0d, //0x000043c9 cmpb $13, %al + 0x0f, 0x84, 0xdb, 0xfe, 0xff, 0xff, //0x000043cb je LBB1_1003 + 0xe9, 0xda, 0x01, 0x00, 0x00, //0x000043d1 jmp LBB1_1057 + //0x000043d6 LBB1_1019 + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x000043d6 movl $2, %r11d + 0x49, 0x89, 0xf8, //0x000043dc movq %rdi, %r8 + 0xe9, 0xc2, 0xf8, 0xff, 0xff, //0x000043df jmp LBB1_903 + //0x000043e4 LBB1_1020 + 0x49, 0x89, 0xf8, //0x000043e4 movq %rdi, %r8 + 0xe9, 0xf4, 0x01, 0x00, 0x00, //0x000043e7 jmp LBB1_1060 + //0x000043ec LBB1_1025 + 0x41, 0x89, 0xd7, //0x000043ec movl %edx, %r15d + 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, //0x000043ef movl $2, %r11d + 0xe9, 0xac, 0xf8, 0xff, 0xff, //0x000043f5 jmp LBB1_903 + //0x000043fa LBB1_1045 + 0x4c, 0x89, 0xc1, //0x000043fa movq %r8, %rcx + 0x49, 0x89, 0xcd, //0x000043fd movq %rcx, %r13 + 0x48, 0x39, 0xd9, //0x00004400 cmpq %rbx, %rcx + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00004403 jb LBB1_1029 + 0xe9, 0xfd, 0x01, 0x00, 0x00, //0x00004409 jmp LBB1_1063 + //0x0000440e LBB1_1027 + 0x49, 0x89, 0xc8, //0x0000440e movq %rcx, %r8 + 0x49, 0x89, 0xcd, //0x00004411 movq %rcx, %r13 + 0x48, 0x39, 0xd9, //0x00004414 cmpq %rbx, %rcx + 0x0f, 0x83, 0xee, 0x01, 0x00, 0x00, //0x00004417 jae LBB1_1063 + //0x0000441d LBB1_1029 + 0x4d, 0x8d, 0x45, 0x01, //0x0000441d leaq $1(%r13), %r8 + 0x41, 0x0f, 0xb6, 0x4d, 0x00, //0x00004421 movzbl (%r13), %ecx + 0x80, 0xf9, 0x5c, //0x00004426 cmpb $92, %cl + 0x0f, 0x85, 0xe4, 0x00, 0x00, 0x00, //0x00004429 jne LBB1_1042 + 0x49, 0x8d, 0x4d, 0x02, //0x0000442f leaq $2(%r13), %rcx + 0x48, 0x39, 0xd9, //0x00004433 cmpq %rbx, %rcx + 0x0f, 0x87, 0x74, 0x02, 0x00, 0x00, //0x00004436 ja LBB1_1080 + 0x41, 0x0f, 0xb6, 0x00, //0x0000443c movzbl (%r8), %eax + 0x3c, 0x6e, //0x00004440 cmpb $110, %al + 0x0f, 0x84, 0xc6, 0xff, 0xff, 0xff, //0x00004442 je LBB1_1027 + 0x3c, 0x72, //0x00004448 cmpb $114, %al + 0x0f, 0x84, 0xbe, 0xff, 0xff, 0xff, //0x0000444a je LBB1_1027 + 0x3c, 0x75, //0x00004450 cmpb $117, %al + 0x0f, 0x85, 0x09, 0xf5, 0xff, 0xff, //0x00004452 jne LBB1_1102 + 0x48, 0x89, 0xd8, //0x00004458 movq %rbx, %rax + 0x48, 0x29, 0xc8, //0x0000445b subq %rcx, %rax + 0x48, 0x83, 0xf8, 0x04, //0x0000445e cmpq $4, %rax + 0x0f, 0x8c, 0xf9, 0xf4, 0xff, 0xff, //0x00004462 jl LBB1_1102 + 0x8b, 0x11, //0x00004468 movl (%rcx), %edx + 0x89, 0xd6, //0x0000446a movl %edx, %esi + 0xf7, 0xd6, //0x0000446c notl %esi + 0x8d, 0x82, 0xd0, 0xcf, 0xcf, 0xcf, //0x0000446e leal $-808464432(%rdx), %eax + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00004474 andl $-2139062144, %esi + 0x85, 0xc6, //0x0000447a testl %eax, %esi + 0x0f, 0x85, 0xdf, 0xf4, 0xff, 0xff, //0x0000447c jne LBB1_1102 + 0x8d, 0x82, 0x19, 0x19, 0x19, 0x19, //0x00004482 leal $421075225(%rdx), %eax + 0x09, 0xd0, //0x00004488 orl %edx, %eax + 0xa9, 0x80, 0x80, 0x80, 0x80, //0x0000448a testl $-2139062144, %eax + 0x0f, 0x85, 0xcc, 0xf4, 0xff, 0xff, //0x0000448f jne LBB1_1102 + 0x89, 0xd0, //0x00004495 movl %edx, %eax + 0x25, 0x7f, 0x7f, 0x7f, 0x7f, //0x00004497 andl $2139062143, %eax + 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, //0x0000449c movl $-1061109568, %edi + 0x29, 0xc7, //0x000044a1 subl %eax, %edi + 0x8d, 0x98, 0x46, 0x46, 0x46, 0x46, //0x000044a3 leal $1179010630(%rax), %ebx + 0x21, 0xf7, //0x000044a9 andl %esi, %edi + 0x85, 0xdf, //0x000044ab testl %ebx, %edi + 0x0f, 0x85, 0xac, 0x04, 0x00, 0x00, //0x000044ad jne LBB1_1131 + 0xbf, 0xe0, 0xe0, 0xe0, 0xe0, //0x000044b3 movl $-522133280, %edi + 0x29, 0xc7, //0x000044b8 subl %eax, %edi + 0x05, 0x39, 0x39, 0x39, 0x39, //0x000044ba addl $960051513, %eax + 0x21, 0xfe, //0x000044bf andl %edi, %esi + 0x85, 0xc6, //0x000044c1 testl %eax, %esi + 0x48, 0x8b, 0x5d, 0xd0, //0x000044c3 movq $-48(%rbp), %rbx + 0x0f, 0x85, 0x94, 0xf4, 0xff, 0xff, //0x000044c7 jne LBB1_1102 + 0x0f, 0xca, //0x000044cd bswapl %edx + 0x89, 0xd0, //0x000044cf movl %edx, %eax + 0xc1, 0xe8, 0x04, //0x000044d1 shrl $4, %eax + 0xf7, 0xd0, //0x000044d4 notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x000044d6 andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x000044db leal (%rax,%rax,8), %eax + 0x81, 0xe2, 0x0f, 0x0f, 0x0f, 0x0f, //0x000044de andl $252645135, %edx + 0x01, 0xc2, //0x000044e4 addl %eax, %edx + 0x89, 0xd1, //0x000044e6 movl %edx, %ecx + 0xc1, 0xe9, 0x04, //0x000044e8 shrl $4, %ecx + 0x09, 0xd1, //0x000044eb orl %edx, %ecx + 0x89, 0xc8, //0x000044ed movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x000044ef shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x000044f2 andl $65280, %eax + 0x89, 0xca, //0x000044f7 movl %ecx, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x000044f9 andl $128, %edx + 0x09, 0xc2, //0x000044ff orl %eax, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00004501 je LBB1_1041 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x00004507 movl $255, %ecx + //0x0000450c LBB1_1041 + 0x49, 0x83, 0xc5, 0x06, //0x0000450c addq $6, %r13 + 0x4d, 0x89, 0xe8, //0x00004510 movq %r13, %r8 + //0x00004513 LBB1_1042 + 0x80, 0xf9, 0x0a, //0x00004513 cmpb $10, %cl + 0x0f, 0x84, 0xde, 0xfe, 0xff, 0xff, //0x00004516 je LBB1_1045 + 0x80, 0xf9, 0x0d, //0x0000451c cmpb $13, %cl + 0x0f, 0x84, 0xd5, 0xfe, 0xff, 0xff, //0x0000451f je LBB1_1045 + 0x80, 0xf9, 0x3d, //0x00004525 cmpb $61, %cl + 0x0f, 0x85, 0x42, 0xf4, 0xff, 0xff, //0x00004528 jne LBB1_856 + 0x41, 0x83, 0xfe, 0x03, //0x0000452e cmpl $3, %r14d + 0x0f, 0x84, 0x38, 0xf4, 0xff, 0xff, //0x00004532 je LBB1_856 + 0x4c, 0x39, 0xc3, //0x00004538 cmpq %r8, %rbx + 0x0f, 0x87, 0x9d, 0x01, 0x00, 0x00, //0x0000453b ja LBB1_1085 + 0xe9, 0xc5, 0x00, 0x00, 0x00, //0x00004541 jmp LBB1_1063 + //0x00004546 LBB1_1047 + 0x48, 0xff, 0xc1, //0x00004546 incq %rcx + 0x48, 0xff, 0xc2, //0x00004549 incq %rdx + 0x48, 0xff, 0xcf, //0x0000454c decq %rdi + 0x48, 0xff, 0xce, //0x0000454f decq %rsi + 0x0f, 0x84, 0x3e, 0x00, 0x00, 0x00, //0x00004552 je LBB1_993 + //0x00004558 LBB1_1048 + 0x0f, 0xb6, 0x41, 0xff, //0x00004558 movzbl $-1(%rcx), %eax + 0x3c, 0x0a, //0x0000455c cmpb $10, %al + 0x0f, 0x84, 0xe2, 0xff, 0xff, 0xff, //0x0000455e je LBB1_1047 + 0x3c, 0x0d, //0x00004564 cmpb $13, %al + 0x0f, 0x84, 0xda, 0xff, 0xff, 0xff, //0x00004566 je LBB1_1047 + 0x3c, 0x3d, //0x0000456c cmpb $61, %al + 0x0f, 0x85, 0xa1, 0x02, 0x00, 0x00, //0x0000456e jne LBB1_1103 + 0x49, 0x89, 0xc8, //0x00004574 movq %rcx, %r8 + 0x41, 0x83, 0xfe, 0x04, //0x00004577 cmpl $4, %r14d + 0x0f, 0x84, 0xef, 0xf3, 0xff, 0xff, //0x0000457b je LBB1_856 + 0x48, 0x39, 0xcb, //0x00004581 cmpq %rcx, %rbx + 0x0f, 0x87, 0x02, 0x01, 0x00, 0x00, //0x00004584 ja LBB1_1076 + 0x49, 0x89, 0xc8, //0x0000458a movq %rcx, %r8 + 0x48, 0x8b, 0x5d, 0xd0, //0x0000458d movq $-48(%rbp), %rbx + 0xe9, 0x75, 0x00, 0x00, 0x00, //0x00004591 jmp LBB1_1063 + //0x00004596 LBB1_993 + 0x49, 0x89, 0xd8, //0x00004596 movq %rbx, %r8 + 0xe9, 0x6d, 0x00, 0x00, 0x00, //0x00004599 jmp LBB1_1063 + //0x0000459e LBB1_1054 + 0x80, 0xf9, 0x2f, //0x0000459e cmpb $47, %cl + 0x0f, 0x85, 0x02, 0x00, 0x00, 0x00, //0x000045a1 jne LBB1_1056 + 0x89, 0xc8, //0x000045a7 movl %ecx, %eax + //0x000045a9 LBB1_1056 + 0x4d, 0x89, 0xd0, //0x000045a9 movq %r10, %r8 + 0x48, 0x8b, 0x5d, 0xd0, //0x000045ac movq $-48(%rbp), %rbx + //0x000045b0 LBB1_1057 + 0x0f, 0xb6, 0xc8, //0x000045b0 movzbl %al, %ecx + 0x48, 0x8b, 0x55, 0xc0, //0x000045b3 movq $-64(%rbp), %rdx + 0x0f, 0xb6, 0x0c, 0x0a, //0x000045b7 movzbl (%rdx,%rcx), %ecx + 0x81, 0xf9, 0xff, 0x00, 0x00, 0x00, //0x000045bb cmpl $255, %ecx + 0x0f, 0x84, 0xae, 0x00, 0x00, 0x00, //0x000045c1 je LBB1_1070 + 0x44, 0x89, 0xfa, //0x000045c7 movl %r15d, %edx + //0x000045ca LBB1_1059 + 0xc1, 0xe2, 0x06, //0x000045ca shll $6, %edx + 0x09, 0xca, //0x000045cd orl %ecx, %edx + 0x41, 0xbb, 0x04, 0x00, 0x00, 0x00, //0x000045cf movl $4, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000045d5 .p2align 4, 0x90 + //0x000045e0 LBB1_1060 + 0x41, 0x89, 0xd7, //0x000045e0 movl %edx, %r15d + 0x45, 0x85, 0xe4, //0x000045e3 testl %r12d, %r12d + 0x0f, 0x94, 0xc0, //0x000045e6 sete %al + 0x41, 0x83, 0xfb, 0x01, //0x000045e9 cmpl $1, %r11d + 0x0f, 0x94, 0xc1, //0x000045ed sete %cl + 0x49, 0x39, 0xd8, //0x000045f0 cmpq %rbx, %r8 + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x000045f3 jb LBB1_1063 + 0x41, 0x83, 0xfb, 0x04, //0x000045f9 cmpl $4, %r11d + 0x0f, 0x84, 0x08, 0x00, 0x00, 0x00, //0x000045fd je LBB1_1063 + 0x08, 0xc8, //0x00004603 orb %cl, %al + 0x0f, 0x85, 0x65, 0xf3, 0xff, 0xff, //0x00004605 jne LBB1_856 + //0x0000460b LBB1_1063 + 0xb0, 0x04, //0x0000460b movb $4, %al + 0x44, 0x28, 0xd8, //0x0000460d subb %r11b, %al + 0x0f, 0xb6, 0xc0, //0x00004610 movzbl %al, %eax + 0x01, 0xc0, //0x00004613 addl %eax, %eax + 0x8d, 0x0c, 0x40, //0x00004615 leal (%rax,%rax,2), %ecx + 0x44, 0x89, 0xfa, //0x00004618 movl %r15d, %edx + 0xd3, 0xe2, //0x0000461b shll %cl, %edx + 0x41, 0x83, 0xfb, 0x02, //0x0000461d cmpl $2, %r11d + 0x0f, 0x84, 0x22, 0x00, 0x00, 0x00, //0x00004621 je LBB1_1068 + 0x41, 0x83, 0xfb, 0x03, //0x00004627 cmpl $3, %r11d + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x0000462b je LBB1_1067 + 0x41, 0x83, 0xfb, 0x04, //0x00004631 cmpl $4, %r11d + 0x48, 0x8b, 0x4d, 0xb0, //0x00004635 movq $-80(%rbp), %rcx + 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x00004639 jne LBB1_1069 + 0x88, 0x51, 0x02, //0x0000463f movb %dl, $2(%rcx) + //0x00004642 LBB1_1067 + 0x48, 0x8b, 0x45, 0xb0, //0x00004642 movq $-80(%rbp), %rax + 0x88, 0x70, 0x01, //0x00004646 movb %dh, $1(%rax) + //0x00004649 LBB1_1068 + 0xc1, 0xea, 0x10, //0x00004649 shrl $16, %edx + 0x48, 0x8b, 0x4d, 0xb0, //0x0000464c movq $-80(%rbp), %rcx + 0x88, 0x11, //0x00004650 movb %dl, (%rcx) + //0x00004652 LBB1_1069 + 0x44, 0x89, 0xd8, //0x00004652 movl %r11d, %eax + 0x48, 0x8d, 0x4c, 0x01, 0xff, //0x00004655 leaq $-1(%rcx,%rax), %rcx + 0x48, 0x89, 0x4d, 0xb0, //0x0000465a movq %rcx, $-80(%rbp) + 0x4d, 0x89, 0xc1, //0x0000465e movq %r8, %r9 + 0x31, 0xc9, //0x00004661 xorl %ecx, %ecx + 0x44, 0x8b, 0x75, 0xbc, //0x00004663 movl $-68(%rbp), %r14d + 0x48, 0x85, 0xc9, //0x00004667 testq %rcx, %rcx + 0x0f, 0x84, 0x1b, 0xf3, 0xff, 0xff, //0x0000466a je LBB1_857 + 0xe9, 0x2b, 0x03, 0x00, 0x00, //0x00004670 jmp LBB1_1137 + //0x00004675 LBB1_1070 + 0x41, 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00004675 movl $3, %r11d + 0xe9, 0x26, 0xf6, 0xff, 0xff, //0x0000467b jmp LBB1_903 + //0x00004680 LBB1_1075 + 0x48, 0xff, 0xc2, //0x00004680 incq %rdx + 0x48, 0xff, 0xcf, //0x00004683 decq %rdi + 0x0f, 0x84, 0x94, 0x01, 0x00, 0x00, //0x00004686 je LBB1_1105 + //0x0000468c LBB1_1076 + 0x0f, 0xb6, 0x42, 0xff, //0x0000468c movzbl $-1(%rdx), %eax + 0x3c, 0x0a, //0x00004690 cmpb $10, %al + 0x0f, 0x84, 0xe8, 0xff, 0xff, 0xff, //0x00004692 je LBB1_1075 + 0x3c, 0x0d, //0x00004698 cmpb $13, %al + 0x0f, 0x84, 0xe0, 0xff, 0xff, 0xff, //0x0000469a je LBB1_1075 + 0x3c, 0x3d, //0x000046a0 cmpb $61, %al + 0x0f, 0x85, 0xc3, 0x02, 0x00, 0x00, //0x000046a2 jne LBB1_1110 + 0x49, 0x89, 0xd0, //0x000046a8 movq %rdx, %r8 + 0xe9, 0xb2, 0x02, 0x00, 0x00, //0x000046ab jmp LBB1_1132 + //0x000046b0 LBB1_1080 + 0x4d, 0x89, 0xc5, //0x000046b0 movq %r8, %r13 + //0x000046b3 LBB1_1026 + 0x4d, 0x89, 0xe8, //0x000046b3 movq %r13, %r8 + 0xe9, 0xb5, 0xf2, 0xff, 0xff, //0x000046b6 jmp LBB1_856 + //0x000046bb LBB1_1101 + 0x4c, 0x89, 0xe9, //0x000046bb movq %r13, %rcx + 0x49, 0x89, 0xc8, //0x000046be movq %rcx, %r8 + 0x48, 0x39, 0xd9, //0x000046c1 cmpq %rbx, %rcx + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x000046c4 jb LBB1_1085 + 0xe9, 0x87, 0xf9, 0xff, 0xff, //0x000046ca jmp LBB1_994 + //0x000046cf LBB1_1083 + 0x49, 0x89, 0xcd, //0x000046cf movq %rcx, %r13 + 0x49, 0x89, 0xc8, //0x000046d2 movq %rcx, %r8 + 0x48, 0x39, 0xd9, //0x000046d5 cmpq %rbx, %rcx + 0x0f, 0x83, 0x78, 0xf9, 0xff, 0xff, //0x000046d8 jae LBB1_994 + //0x000046de LBB1_1085 + 0x4d, 0x8d, 0x68, 0x01, //0x000046de leaq $1(%r8), %r13 + 0x41, 0x0f, 0xb6, 0x08, //0x000046e2 movzbl (%r8), %ecx + 0x80, 0xf9, 0x5c, //0x000046e6 cmpb $92, %cl + 0x0f, 0x85, 0xe5, 0x00, 0x00, 0x00, //0x000046e9 jne LBB1_1098 + 0x49, 0x8d, 0x48, 0x02, //0x000046ef leaq $2(%r8), %rcx + 0x48, 0x39, 0xd9, //0x000046f3 cmpq %rbx, %rcx + 0x0f, 0x87, 0xb7, 0xff, 0xff, 0xff, //0x000046f6 ja LBB1_1026 + 0x41, 0x0f, 0xb6, 0x45, 0x00, //0x000046fc movzbl (%r13), %eax + 0x3c, 0x6e, //0x00004701 cmpb $110, %al + 0x0f, 0x84, 0xc6, 0xff, 0xff, 0xff, //0x00004703 je LBB1_1083 + 0x3c, 0x72, //0x00004709 cmpb $114, %al + 0x0f, 0x84, 0xbe, 0xff, 0xff, 0xff, //0x0000470b je LBB1_1083 + 0x3c, 0x75, //0x00004711 cmpb $117, %al + 0x0f, 0x85, 0x48, 0xf2, 0xff, 0xff, //0x00004713 jne LBB1_1102 + 0x48, 0x89, 0xd8, //0x00004719 movq %rbx, %rax + 0x48, 0x29, 0xc8, //0x0000471c subq %rcx, %rax + 0x48, 0x83, 0xf8, 0x04, //0x0000471f cmpq $4, %rax + 0x0f, 0x8c, 0x36, 0x02, 0x00, 0x00, //0x00004723 jl LBB1_1131 + 0x8b, 0x11, //0x00004729 movl (%rcx), %edx + 0x89, 0xd6, //0x0000472b movl %edx, %esi + 0xf7, 0xd6, //0x0000472d notl %esi + 0x8d, 0x82, 0xd0, 0xcf, 0xcf, 0xcf, //0x0000472f leal $-808464432(%rdx), %eax + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00004735 andl $-2139062144, %esi + 0x85, 0xc6, //0x0000473b testl %eax, %esi + 0x0f, 0x85, 0x1c, 0x02, 0x00, 0x00, //0x0000473d jne LBB1_1131 + 0x8d, 0x82, 0x19, 0x19, 0x19, 0x19, //0x00004743 leal $421075225(%rdx), %eax + 0x09, 0xd0, //0x00004749 orl %edx, %eax + 0xa9, 0x80, 0x80, 0x80, 0x80, //0x0000474b testl $-2139062144, %eax + 0x0f, 0x85, 0x09, 0x02, 0x00, 0x00, //0x00004750 jne LBB1_1131 + 0x89, 0xd0, //0x00004756 movl %edx, %eax + 0x25, 0x7f, 0x7f, 0x7f, 0x7f, //0x00004758 andl $2139062143, %eax + 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, //0x0000475d movl $-1061109568, %edi + 0x29, 0xc7, //0x00004762 subl %eax, %edi + 0x8d, 0x98, 0x46, 0x46, 0x46, 0x46, //0x00004764 leal $1179010630(%rax), %ebx + 0x21, 0xf7, //0x0000476a andl %esi, %edi + 0x85, 0xdf, //0x0000476c testl %ebx, %edi + 0x0f, 0x85, 0xeb, 0x01, 0x00, 0x00, //0x0000476e jne LBB1_1131 + 0xbf, 0xe0, 0xe0, 0xe0, 0xe0, //0x00004774 movl $-522133280, %edi + 0x29, 0xc7, //0x00004779 subl %eax, %edi + 0x05, 0x39, 0x39, 0x39, 0x39, //0x0000477b addl $960051513, %eax + 0x21, 0xfe, //0x00004780 andl %edi, %esi + 0x85, 0xc6, //0x00004782 testl %eax, %esi + 0x0f, 0x85, 0xd5, 0x01, 0x00, 0x00, //0x00004784 jne LBB1_1131 + 0x0f, 0xca, //0x0000478a bswapl %edx + 0x89, 0xd0, //0x0000478c movl %edx, %eax + 0xc1, 0xe8, 0x04, //0x0000478e shrl $4, %eax + 0xf7, 0xd0, //0x00004791 notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x00004793 andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x00004798 leal (%rax,%rax,8), %eax + 0x81, 0xe2, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000479b andl $252645135, %edx + 0x01, 0xc2, //0x000047a1 addl %eax, %edx + 0x89, 0xd1, //0x000047a3 movl %edx, %ecx + 0xc1, 0xe9, 0x04, //0x000047a5 shrl $4, %ecx + 0x09, 0xd1, //0x000047a8 orl %edx, %ecx + 0x89, 0xc8, //0x000047aa movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x000047ac shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x000047af andl $65280, %eax + 0x89, 0xca, //0x000047b4 movl %ecx, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x000047b6 andl $128, %edx + 0x09, 0xc2, //0x000047bc orl %eax, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x000047be je LBB1_1097 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x000047c4 movl $255, %ecx + //0x000047c9 LBB1_1097 + 0x49, 0x83, 0xc0, 0x06, //0x000047c9 addq $6, %r8 + 0x4d, 0x89, 0xc5, //0x000047cd movq %r8, %r13 + 0x48, 0x8b, 0x5d, 0xd0, //0x000047d0 movq $-48(%rbp), %rbx + //0x000047d4 LBB1_1098 + 0x80, 0xf9, 0x0a, //0x000047d4 cmpb $10, %cl + 0x0f, 0x84, 0xde, 0xfe, 0xff, 0xff, //0x000047d7 je LBB1_1101 + 0x80, 0xf9, 0x0d, //0x000047dd cmpb $13, %cl + 0x0f, 0x84, 0xd5, 0xfe, 0xff, 0xff, //0x000047e0 je LBB1_1101 + 0x80, 0xf9, 0x3d, //0x000047e6 cmpb $61, %cl + 0x0f, 0x85, 0x88, 0x01, 0x00, 0x00, //0x000047e9 jne LBB1_1111 + 0x4d, 0x89, 0xe8, //0x000047ef movq %r13, %r8 + 0x41, 0x83, 0xfe, 0x04, //0x000047f2 cmpl $4, %r14d + 0x48, 0x8b, 0x5d, 0xd0, //0x000047f6 movq $-48(%rbp), %rbx + 0x0f, 0x84, 0x70, 0xf1, 0xff, 0xff, //0x000047fa je LBB1_856 + 0x4c, 0x39, 0xeb, //0x00004800 cmpq %r13, %rbx + 0x0f, 0x87, 0x48, 0x00, 0x00, 0x00, //0x00004803 ja LBB1_1114 + 0x4d, 0x89, 0xe8, //0x00004809 movq %r13, %r8 + 0x48, 0x8b, 0x5d, 0xd0, //0x0000480c movq $-48(%rbp), %rbx + 0xe9, 0xf6, 0xfd, 0xff, 0xff, //0x00004810 jmp LBB1_1063 + //0x00004815 LBB1_1103 + 0x48, 0x89, 0xca, //0x00004815 movq %rcx, %rdx + 0x49, 0x89, 0xc8, //0x00004818 movq %rcx, %r8 + 0xe9, 0x50, 0xf1, 0xff, 0xff, //0x0000481b jmp LBB1_856 + //0x00004820 LBB1_1105 + 0x48, 0x8b, 0x5d, 0xd0, //0x00004820 movq $-48(%rbp), %rbx + 0x49, 0x89, 0xd8, //0x00004824 movq %rbx, %r8 + 0xe9, 0xdf, 0xfd, 0xff, 0xff, //0x00004827 jmp LBB1_1063 + //0x0000482c LBB1_1130 + 0x4c, 0x89, 0xc1, //0x0000482c movq %r8, %rcx + 0x49, 0x89, 0xcd, //0x0000482f movq %rcx, %r13 + 0x48, 0x3b, 0x4d, 0xd0, //0x00004832 cmpq $-48(%rbp), %rcx + 0x0f, 0x82, 0x15, 0x00, 0x00, 0x00, //0x00004836 jb LBB1_1114 + 0xe9, 0x3e, 0x01, 0x00, 0x00, //0x0000483c jmp LBB1_1133 + //0x00004841 LBB1_1112 + 0x49, 0x89, 0xc8, //0x00004841 movq %rcx, %r8 + 0x49, 0x89, 0xcd, //0x00004844 movq %rcx, %r13 + 0x48, 0x3b, 0x4d, 0xd0, //0x00004847 cmpq $-48(%rbp), %rcx + 0x0f, 0x83, 0x2e, 0x01, 0x00, 0x00, //0x0000484b jae LBB1_1133 + //0x00004851 LBB1_1114 + 0x4d, 0x8d, 0x45, 0x01, //0x00004851 leaq $1(%r13), %r8 + 0x41, 0x0f, 0xb6, 0x4d, 0x00, //0x00004855 movzbl (%r13), %ecx + 0x80, 0xf9, 0x5c, //0x0000485a cmpb $92, %cl + 0x0f, 0x85, 0xe2, 0x00, 0x00, 0x00, //0x0000485d jne LBB1_1127 + 0x49, 0x8d, 0x4d, 0x02, //0x00004863 leaq $2(%r13), %rcx + 0x48, 0x3b, 0x4d, 0xd0, //0x00004867 cmpq $-48(%rbp), %rcx + 0x0f, 0x87, 0x17, 0x01, 0x00, 0x00, //0x0000486b ja LBB1_1135 + 0x41, 0x0f, 0xb6, 0x00, //0x00004871 movzbl (%r8), %eax + 0x3c, 0x6e, //0x00004875 cmpb $110, %al + 0x0f, 0x84, 0xc4, 0xff, 0xff, 0xff, //0x00004877 je LBB1_1112 + 0x3c, 0x72, //0x0000487d cmpb $114, %al + 0x0f, 0x84, 0xbc, 0xff, 0xff, 0xff, //0x0000487f je LBB1_1112 + 0x3c, 0x75, //0x00004885 cmpb $117, %al + 0x0f, 0x85, 0x07, 0x01, 0x00, 0x00, //0x00004887 jne LBB1_1136 + 0x48, 0x8b, 0x45, 0xd0, //0x0000488d movq $-48(%rbp), %rax + 0x48, 0x29, 0xc8, //0x00004891 subq %rcx, %rax + 0x48, 0x83, 0xf8, 0x04, //0x00004894 cmpq $4, %rax + 0x0f, 0x8c, 0xc1, 0x00, 0x00, 0x00, //0x00004898 jl LBB1_1131 + 0x8b, 0x11, //0x0000489e movl (%rcx), %edx + 0x89, 0xd6, //0x000048a0 movl %edx, %esi + 0xf7, 0xd6, //0x000048a2 notl %esi + 0x8d, 0x82, 0xd0, 0xcf, 0xcf, 0xcf, //0x000048a4 leal $-808464432(%rdx), %eax + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x000048aa andl $-2139062144, %esi + 0x85, 0xc6, //0x000048b0 testl %eax, %esi + 0x0f, 0x85, 0xa7, 0x00, 0x00, 0x00, //0x000048b2 jne LBB1_1131 + 0x8d, 0x82, 0x19, 0x19, 0x19, 0x19, //0x000048b8 leal $421075225(%rdx), %eax + 0x09, 0xd0, //0x000048be orl %edx, %eax + 0xa9, 0x80, 0x80, 0x80, 0x80, //0x000048c0 testl $-2139062144, %eax + 0x0f, 0x85, 0x94, 0x00, 0x00, 0x00, //0x000048c5 jne LBB1_1131 + 0x89, 0xd0, //0x000048cb movl %edx, %eax + 0x25, 0x7f, 0x7f, 0x7f, 0x7f, //0x000048cd andl $2139062143, %eax + 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, //0x000048d2 movl $-1061109568, %edi + 0x29, 0xc7, //0x000048d7 subl %eax, %edi + 0x8d, 0x98, 0x46, 0x46, 0x46, 0x46, //0x000048d9 leal $1179010630(%rax), %ebx + 0x21, 0xf7, //0x000048df andl %esi, %edi + 0x85, 0xdf, //0x000048e1 testl %ebx, %edi + 0x0f, 0x85, 0x76, 0x00, 0x00, 0x00, //0x000048e3 jne LBB1_1131 + 0xbf, 0xe0, 0xe0, 0xe0, 0xe0, //0x000048e9 movl $-522133280, %edi + 0x29, 0xc7, //0x000048ee subl %eax, %edi + 0x05, 0x39, 0x39, 0x39, 0x39, //0x000048f0 addl $960051513, %eax + 0x21, 0xfe, //0x000048f5 andl %edi, %esi + 0x85, 0xc6, //0x000048f7 testl %eax, %esi + 0x0f, 0x85, 0x60, 0x00, 0x00, 0x00, //0x000048f9 jne LBB1_1131 + 0x0f, 0xca, //0x000048ff bswapl %edx + 0x89, 0xd0, //0x00004901 movl %edx, %eax + 0xc1, 0xe8, 0x04, //0x00004903 shrl $4, %eax + 0xf7, 0xd0, //0x00004906 notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x00004908 andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x0000490d leal (%rax,%rax,8), %eax + 0x81, 0xe2, 0x0f, 0x0f, 0x0f, 0x0f, //0x00004910 andl $252645135, %edx + 0x01, 0xc2, //0x00004916 addl %eax, %edx + 0x89, 0xd1, //0x00004918 movl %edx, %ecx + 0xc1, 0xe9, 0x04, //0x0000491a shrl $4, %ecx + 0x09, 0xd1, //0x0000491d orl %edx, %ecx + 0x89, 0xc8, //0x0000491f movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x00004921 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00004924 andl $65280, %eax + 0x89, 0xca, //0x00004929 movl %ecx, %edx + 0x81, 0xe2, 0x80, 0x00, 0x00, 0x00, //0x0000492b andl $128, %edx + 0x09, 0xc2, //0x00004931 orl %eax, %edx + 0x0f, 0x84, 0x05, 0x00, 0x00, 0x00, //0x00004933 je LBB1_1126 + 0xb9, 0xff, 0x00, 0x00, 0x00, //0x00004939 movl $255, %ecx + //0x0000493e LBB1_1126 + 0x49, 0x83, 0xc5, 0x06, //0x0000493e addq $6, %r13 + 0x4d, 0x89, 0xe8, //0x00004942 movq %r13, %r8 + //0x00004945 LBB1_1127 + 0x80, 0xf9, 0x0a, //0x00004945 cmpb $10, %cl + 0x0f, 0x84, 0xde, 0xfe, 0xff, 0xff, //0x00004948 je LBB1_1130 + 0x80, 0xf9, 0x0d, //0x0000494e cmpb $13, %cl + 0x0f, 0x84, 0xd5, 0xfe, 0xff, 0xff, //0x00004951 je LBB1_1130 + 0x80, 0xf9, 0x3d, //0x00004957 cmpb $61, %cl + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x0000495a jmp LBB1_1132 + //0x0000495f LBB1_1131 + 0x49, 0x89, 0xc8, //0x0000495f movq %rcx, %r8 + //0x00004962 LBB1_1132 + 0x48, 0x8b, 0x5d, 0xd0, //0x00004962 movq $-48(%rbp), %rbx + 0xe9, 0x05, 0xf0, 0xff, 0xff, //0x00004966 jmp LBB1_856 + //0x0000496b LBB1_1110 + 0x48, 0x8b, 0x5d, 0xd0, //0x0000496b movq $-48(%rbp), %rbx + 0x49, 0x89, 0xd0, //0x0000496f movq %rdx, %r8 + 0xe9, 0xf9, 0xef, 0xff, 0xff, //0x00004972 jmp LBB1_856 + //0x00004977 LBB1_1111 + 0x4d, 0x89, 0xe8, //0x00004977 movq %r13, %r8 + 0xe9, 0xe3, 0xff, 0xff, 0xff, //0x0000497a jmp LBB1_1132 + //0x0000497f LBB1_1133 + 0x48, 0x8b, 0x5d, 0xd0, //0x0000497f movq $-48(%rbp), %rbx + 0xe9, 0x83, 0xfc, 0xff, 0xff, //0x00004983 jmp LBB1_1063 + //0x00004988 LBB1_1135 + 0x4d, 0x89, 0xc5, //0x00004988 movq %r8, %r13 + 0x48, 0x8b, 0x5d, 0xd0, //0x0000498b movq $-48(%rbp), %rbx + 0xe9, 0xdc, 0xef, 0xff, 0xff, //0x0000498f jmp LBB1_856 + //0x00004994 LBB1_1136 + 0x48, 0x8b, 0x5d, 0xd0, //0x00004994 movq $-48(%rbp), %rbx + 0x49, 0x89, 0xc8, //0x00004998 movq %rcx, %r8 + 0xe9, 0xd0, 0xef, 0xff, 0xff, //0x0000499b jmp LBB1_856 + //0x000049a0 LBB1_1137 + 0x48, 0x8b, 0x45, 0xa8, //0x000049a0 movq $-88(%rbp), %rax + 0x4c, 0x29, 0xc8, //0x000049a4 subq %r9, %rax + 0x48, 0x29, 0xc8, //0x000049a7 subq %rcx, %rax + 0xe9, 0x19, 0x00, 0x00, 0x00, //0x000049aa jmp LBB1_1139 + //0x000049af LBB1_1138 + 0x48, 0x8b, 0x4d, 0xb0, //0x000049af movq $-80(%rbp), %rcx + 0x48, 0x2b, 0x8d, 0x78, 0xff, 0xff, 0xff, //0x000049b3 subq $-136(%rbp), %rcx + 0x48, 0x8b, 0x85, 0x70, 0xff, 0xff, 0xff, //0x000049ba movq $-144(%rbp), %rax + 0x48, 0x01, 0x48, 0x08, //0x000049c1 addq %rcx, $8(%rax) + 0x48, 0x89, 0xc8, //0x000049c5 movq %rcx, %rax + //0x000049c8 LBB1_1139 + 0x48, 0x83, 0xc4, 0x68, //0x000049c8 addq $104, %rsp + 0x5b, //0x000049cc popq %rbx + 0x41, 0x5c, //0x000049cd popq %r12 + 0x41, 0x5d, //0x000049cf popq %r13 + 0x41, 0x5e, //0x000049d1 popq %r14 + 0x41, 0x5f, //0x000049d3 popq %r15 + 0x5d, //0x000049d5 popq %rbp + 0xc5, 0xf8, 0x77, //0x000049d6 vzeroupper + 0xc3, //0x000049d9 retq + //0x000049da LBB1_1140 + 0x48, 0x8b, 0x45, 0xa8, //0x000049da movq $-88(%rbp), %rax + 0x4c, 0x29, 0xf8, //0x000049de subq %r15, %rax + 0x48, 0x29, 0xc8, //0x000049e1 subq %rcx, %rax + 0xe9, 0xdf, 0xff, 0xff, 0xff, //0x000049e4 jmp LBB1_1139 + //0x000049e9 LBB1_1141 + 0x48, 0x8b, 0x45, 0xa8, //0x000049e9 movq $-88(%rbp), %rax + 0x4c, 0x29, 0xe8, //0x000049ed subq %r13, %rax + 0x48, 0x29, 0xc8, //0x000049f0 subq %rcx, %rax + 0xe9, 0xd0, 0xff, 0xff, 0xff, //0x000049f3 jmp LBB1_1139 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000049f8 .p2align 4, 0x00 + //0x00004a00 _TabEncodeCharsetStd + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, //0x00004a00 QUAD $0x4847464544434241; QUAD $0x504f4e4d4c4b4a49 // .ascii 16, 'ABCDEFGHIJKLMNOP' + 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, //0x00004a10 QUAD $0x5857565554535251; QUAD $0x6665646362615a59 // .ascii 16, 'QRSTUVWXYZabcdef' + 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, //0x00004a20 QUAD $0x6e6d6c6b6a696867; QUAD $0x767574737271706f // .ascii 16, 'ghijklmnopqrstuv' + 0x77, 0x78, 0x79, 0x7a, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2b, 0x2f, //0x00004a30 QUAD $0x333231307a797877; QUAD $0x2f2b393837363534 // .ascii 16, 'wxyz0123456789+/' + //0x00004a40 .p2align 4, 0x00 + //0x00004a40 _VecEncodeCharsetStd + 0x47, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xed, 0xf0, 0x41, 0x00, 0x00, //0x00004a40 QUAD $0xfcfcfcfcfcfcfc47; QUAD $0x000041f0edfcfcfc // .asciz 16, 'G\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xed\xf0A\x00\x00' + 0x47, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xed, 0xf0, 0x41, 0x00, 0x00, //0x00004a50 QUAD $0xfcfcfcfcfcfcfc47; QUAD $0x000041f0edfcfcfc // .asciz 16, 'G\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xed\xf0A\x00\x00' + //0x00004a60 .p2align 4, 0x00 + //0x00004a60 _TabEncodeCharsetURL + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, //0x00004a60 QUAD $0x4847464544434241; QUAD $0x504f4e4d4c4b4a49 // .ascii 16, 'ABCDEFGHIJKLMNOP' + 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, //0x00004a70 QUAD $0x5857565554535251; QUAD $0x6665646362615a59 // .ascii 16, 'QRSTUVWXYZabcdef' + 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, //0x00004a80 QUAD $0x6e6d6c6b6a696867; QUAD $0x767574737271706f // .ascii 16, 'ghijklmnopqrstuv' + 0x77, 0x78, 0x79, 0x7a, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2d, 0x5f, //0x00004a90 QUAD $0x333231307a797877; QUAD $0x5f2d393837363534 // .ascii 16, 'wxyz0123456789-_' + //0x00004aa0 .p2align 4, 0x00 + //0x00004aa0 _VecEncodeCharsetURL + 0x47, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xef, 0x20, 0x41, 0x00, 0x00, //0x00004aa0 QUAD $0xfcfcfcfcfcfcfc47; QUAD $0x00004120effcfcfc // .asciz 16, 'G\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xef A\x00\x00' + 0x47, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xef, 0x20, 0x41, 0x00, 0x00, //0x00004ab0 QUAD $0xfcfcfcfcfcfcfc47; QUAD $0x00004120effcfcfc // .asciz 16, 'G\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xef A\x00\x00' + //0x00004ac0 .p2align 4, 0x00 + //0x00004ac0 _VecDecodeTableStd + 0x00, 0x00, 0x13, 0x04, 0xbf, 0xbf, 0xb9, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004ac0 QUAD $0xb9b9bfbf04130000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x13\x04\xbf\xbf\xb9\xb9\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x13, 0x04, 0xbf, 0xbf, 0xb9, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004ad0 QUAD $0xb9b9bfbf04130000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x13\x04\xbf\xbf\xb9\xb9\x00\x00\x00\x00\x00\x00\x00\x00' + 0xa8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0x54, 0x50, 0x50, 0x50, 0x54, //0x00004ae0 QUAD $0xf8f8f8f8f8f8f8a8; QUAD $0x5450505054f0f8f8 // .ascii 16, '\xa8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf0TPPPT' + 0xa8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0x54, 0x50, 0x50, 0x50, 0x54, //0x00004af0 QUAD $0xf8f8f8f8f8f8f8a8; QUAD $0x5450505054f0f8f8 // .ascii 16, '\xa8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf0TPPPT' + 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, //0x00004b00 QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .ascii 16, '////////////////' + 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, //0x00004b10 QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .ascii 16, '////////////////' + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, //0x00004b20 QUAD $0x1010101010101010; QUAD $0x1010101010101010 // .ascii 16, '\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10' + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, //0x00004b30 QUAD $0x1010101010101010; QUAD $0x1010101010101010 // .ascii 16, '\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10' + //0x00004b40 .p2align 4, 0x00 + //0x00004b40 _VecDecodeCharsetStd + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004b40 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004b50 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3e, 0xff, 0xff, 0xff, 0x3f, //0x00004b60 QUAD $0xffffffffffffffff; QUAD $0x3fffffff3effffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff>\xff\xff\xff?' + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004b70 QUAD $0x3b3a393837363534; QUAD $0xffffffffffff3d3c // .ascii 16, '456789:;<=\xff\xff\xff\xff\xff\xff' + 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, //0x00004b80 QUAD $0x06050403020100ff; QUAD $0x0e0d0c0b0a090807 // .ascii 16, '\xff\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e' + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004b90 QUAD $0x161514131211100f; QUAD $0xffffffffff191817 // .ascii 16, '\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\xff\xff\xff\xff\xff' + 0xff, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, //0x00004ba0 QUAD $0x201f1e1d1c1b1aff; QUAD $0x2827262524232221 // .ascii 16, '\xff\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'(' + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004bb0 QUAD $0x302f2e2d2c2b2a29; QUAD $0xffffffffff333231 // .ascii 16, ')*+,-./0123\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004bc0 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004bd0 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004be0 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004bf0 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004c00 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004c10 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004c20 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004c30 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + //0x00004c40 .p2align 4, 0x00 + //0x00004c40 _VecDecodeTableURL + 0x00, 0x00, 0x11, 0x04, 0xbf, 0xbf, 0xb9, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004c40 QUAD $0xb9b9bfbf04110000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x11\x04\xbf\xbf\xb9\xb9\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x11, 0x04, 0xbf, 0xbf, 0xb9, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00004c50 QUAD $0xb9b9bfbf04110000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x11\x04\xbf\xbf\xb9\xb9\x00\x00\x00\x00\x00\x00\x00\x00' + 0xa8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0x50, 0x50, 0x54, 0x50, 0x70, //0x00004c60 QUAD $0xf8f8f8f8f8f8f8a8; QUAD $0x7050545050f0f8f8 // .ascii 16, '\xa8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf0PPTPp' + 0xa8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0x50, 0x50, 0x54, 0x50, 0x70, //0x00004c70 QUAD $0xf8f8f8f8f8f8f8a8; QUAD $0x7050545050f0f8f8 // .ascii 16, '\xa8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf0PPTPp' + 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, //0x00004c80 QUAD $0x5f5f5f5f5f5f5f5f; QUAD $0x5f5f5f5f5f5f5f5f // .ascii 16, '________________' + 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, //0x00004c90 QUAD $0x5f5f5f5f5f5f5f5f; QUAD $0x5f5f5f5f5f5f5f5f // .ascii 16, '________________' + 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, //0x00004ca0 QUAD $0xe0e0e0e0e0e0e0e0; QUAD $0xe0e0e0e0e0e0e0e0 // .ascii 16, '\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0' + 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, //0x00004cb0 QUAD $0xe0e0e0e0e0e0e0e0; QUAD $0xe0e0e0e0e0e0e0e0 // .ascii 16, '\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0' + //0x00004cc0 .p2align 4, 0x00 + //0x00004cc0 _VecDecodeCharsetURL + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004cc0 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004cd0 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3e, 0xff, 0xff, //0x00004ce0 QUAD $0xffffffffffffffff; QUAD $0xffff3effffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff>\xff\xff' + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004cf0 QUAD $0x3b3a393837363534; QUAD $0xffffffffffff3d3c // .ascii 16, '456789:;<=\xff\xff\xff\xff\xff\xff' + 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, //0x00004d00 QUAD $0x06050403020100ff; QUAD $0x0e0d0c0b0a090807 // .ascii 16, '\xff\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e' + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0xff, 0xff, 0xff, 0xff, 0x3f, //0x00004d10 QUAD $0x161514131211100f; QUAD $0x3fffffffff191817 // .ascii 16, '\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\xff\xff\xff\xff?' + 0xff, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, //0x00004d20 QUAD $0x201f1e1d1c1b1aff; QUAD $0x2827262524232221 // .ascii 16, '\xff\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'(' + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004d30 QUAD $0x302f2e2d2c2b2a29; QUAD $0xffffffffff333231 // .ascii 16, ')*+,-./0123\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004d40 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004d50 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004d60 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004d70 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004d80 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004d90 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004da0 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //0x00004db0 QUAD $0xffffffffffffffff; QUAD $0xffffffffffffffff // .ascii 16, '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' +} diff --git a/vendor/github.com/chenzhuoyu/iasm/LICENSE b/vendor/github.com/chenzhuoyu/iasm/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/LICENSE @@ -0,0 +1,201 @@ + 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/chenzhuoyu/iasm/expr/ast.go b/vendor/github.com/chenzhuoyu/iasm/expr/ast.go new file mode 100644 index 0000000000..c9e872e285 --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/expr/ast.go @@ -0,0 +1,245 @@ +package expr + +import ( + `fmt` +) + +// Type is tyep expression type. +type Type int + +const ( + // CONST indicates that the expression is a constant. + CONST Type = iota + + // TERM indicates that the expression is a Term reference. + TERM + + // EXPR indicates that the expression is a unary or binary expression. + EXPR +) + +var typeNames = map[Type]string { + EXPR : "Expr", + TERM : "Term", + CONST : "Const", +} + +// String returns the string representation of a Type. +func (self Type) String() string { + if v, ok := typeNames[self]; ok { + return v + } else { + return fmt.Sprintf("expr.Type(%d)", self) + } +} + +// Operator represents an operation to perform when Type is EXPR. +type Operator uint8 + +const ( + // ADD performs "Add Expr.Left and Expr.Right". + ADD Operator = iota + + // SUB performs "Subtract Expr.Left by Expr.Right". + SUB + + // MUL performs "Multiply Expr.Left by Expr.Right". + MUL + + // DIV performs "Divide Expr.Left by Expr.Right". + DIV + + // MOD performs "Modulo Expr.Left by Expr.Right". + MOD + + // AND performs "Bitwise AND Expr.Left and Expr.Right". + AND + + // OR performs "Bitwise OR Expr.Left and Expr.Right". + OR + + // XOR performs "Bitwise XOR Expr.Left and Expr.Right". + XOR + + // SHL performs "Bitwise Shift Expr.Left to the Left by Expr.Right Bits". + SHL + + // SHR performs "Bitwise Shift Expr.Left to the Right by Expr.Right Bits". + SHR + + // POW performs "Raise Expr.Left to the power of Expr.Right" + POW + + // NOT performs "Bitwise Invert Expr.Left". + NOT + + // NEG performs "Negate Expr.Left". + NEG +) + +var operatorNames = map[Operator]string { + ADD : "Add", + SUB : "Subtract", + MUL : "Multiply", + DIV : "Divide", + MOD : "Modulo", + AND : "And", + OR : "Or", + XOR : "ExclusiveOr", + SHL : "ShiftLeft", + SHR : "ShiftRight", + POW : "Power", + NOT : "Invert", + NEG : "Negate", +} + +// String returns the string representation of a Type. +func (self Operator) String() string { + if v, ok := operatorNames[self]; ok { + return v + } else { + return fmt.Sprintf("expr.Operator(%d)", self) + } +} + +// Expr represents an expression node. +type Expr struct { + Type Type + Term Term + Op Operator + Left *Expr + Right *Expr + Const int64 +} + +// Ref creates an expression from a Term. +func Ref(t Term) (p *Expr) { + p = newExpression() + p.Term = t + p.Type = TERM + return +} + +// Int creates an expression from an integer. +func Int(v int64) (p *Expr) { + p = newExpression() + p.Type = CONST + p.Const = v + return +} + +func (self *Expr) clear() { + if self.Term != nil { self.Term.Free() } + if self.Left != nil { self.Left.Free() } + if self.Right != nil { self.Right.Free() } +} + +// Free returns the Expr into pool. +// Any operation performed after Free is undefined behavior. +func (self *Expr) Free() { + self.clear() + freeExpression(self) +} + +// Evaluate evaluates the expression into an integer. +// It also implements the Term interface. +func (self *Expr) Evaluate() (int64, error) { + switch self.Type { + case EXPR : return self.eval() + case TERM : return self.Term.Evaluate() + case CONST : return self.Const, nil + default : panic("invalid expression type: " + self.Type.String()) + } +} + +/** Expression Combinator **/ + +func combine(a *Expr, op Operator, b *Expr) (r *Expr) { + r = newExpression() + r.Op = op + r.Type = EXPR + r.Left = a + r.Right = b + return +} + +func (self *Expr) Add(v *Expr) *Expr { return combine(self, ADD, v) } +func (self *Expr) Sub(v *Expr) *Expr { return combine(self, SUB, v) } +func (self *Expr) Mul(v *Expr) *Expr { return combine(self, MUL, v) } +func (self *Expr) Div(v *Expr) *Expr { return combine(self, DIV, v) } +func (self *Expr) Mod(v *Expr) *Expr { return combine(self, MOD, v) } +func (self *Expr) And(v *Expr) *Expr { return combine(self, AND, v) } +func (self *Expr) Or (v *Expr) *Expr { return combine(self, OR , v) } +func (self *Expr) Xor(v *Expr) *Expr { return combine(self, XOR, v) } +func (self *Expr) Shl(v *Expr) *Expr { return combine(self, SHL, v) } +func (self *Expr) Shr(v *Expr) *Expr { return combine(self, SHR, v) } +func (self *Expr) Pow(v *Expr) *Expr { return combine(self, POW, v) } +func (self *Expr) Not() *Expr { return combine(self, NOT, nil) } +func (self *Expr) Neg() *Expr { return combine(self, NEG, nil) } + +/** Expression Evaluator **/ + +var binaryEvaluators = [256]func(int64, int64) (int64, error) { + ADD: func(a, b int64) (int64, error) { return a + b, nil }, + SUB: func(a, b int64) (int64, error) { return a - b, nil }, + MUL: func(a, b int64) (int64, error) { return a * b, nil }, + DIV: idiv, + MOD: imod, + AND: func(a, b int64) (int64, error) { return a & b, nil }, + OR: func(a, b int64) (int64, error) { return a | b, nil }, + XOR: func(a, b int64) (int64, error) { return a ^ b, nil }, + SHL: func(a, b int64) (int64, error) { return a << b, nil }, + SHR: func(a, b int64) (int64, error) { return a >> b, nil }, + POW: ipow, +} + +func (self *Expr) eval() (int64, error) { + var lhs int64 + var rhs int64 + var err error + var vfn func(int64, int64) (int64, error) + + /* evaluate LHS */ + if lhs, err = self.Left.Evaluate(); err != nil { + return 0, err + } + + /* check for unary operators */ + switch self.Op { + case NOT: return self.unaryNot(lhs) + case NEG: return self.unaryNeg(lhs) + } + + /* check for operators */ + if vfn = binaryEvaluators[self.Op]; vfn == nil { + panic("invalid operator: " + self.Op.String()) + } + + /* must be a binary expression */ + if self.Right == nil { + panic("operator " + self.Op.String() + " is a binary operator") + } + + /* evaluate RHS, and call the operator */ + if rhs, err = self.Right.Evaluate(); err != nil { + return 0, err + } else { + return vfn(lhs, rhs) + } +} + +func (self *Expr) unaryNot(v int64) (int64, error) { + if self.Right == nil { + return ^v, nil + } else { + panic("operator Invert is an unary operator") + } +} + +func (self *Expr) unaryNeg(v int64) (int64, error) { + if self.Right == nil { + return -v, nil + } else { + panic("operator Negate is an unary operator") + } +} diff --git a/vendor/github.com/chenzhuoyu/iasm/expr/errors.go b/vendor/github.com/chenzhuoyu/iasm/expr/errors.go new file mode 100644 index 0000000000..7f4f7b5cee --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/expr/errors.go @@ -0,0 +1,37 @@ +package expr + +import ( + `fmt` +) + +// SyntaxError represents a syntax error in the expression. +type SyntaxError struct { + Pos int + Reason string +} + +func newSyntaxError(pos int, reason string) *SyntaxError { + return &SyntaxError { + Pos : pos, + Reason : reason, + } +} + +func (self *SyntaxError) Error() string { + return fmt.Sprintf("Syntax error at position %d: %s", self.Pos, self.Reason) +} + +// RuntimeError is an error which would occure at run time. +type RuntimeError struct { + Reason string +} + +func newRuntimeError(reason string) *RuntimeError { + return &RuntimeError { + Reason: reason, + } +} + +func (self *RuntimeError) Error() string { + return "Runtime error: " + self.Reason +} diff --git a/vendor/github.com/chenzhuoyu/iasm/expr/ops.go b/vendor/github.com/chenzhuoyu/iasm/expr/ops.go new file mode 100644 index 0000000000..860be87dfc --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/expr/ops.go @@ -0,0 +1,51 @@ +package expr + +import ( + `fmt` +) + +func idiv(v int64, d int64) (int64, error) { + if d != 0 { + return v / d, nil + } else { + return 0, newRuntimeError("division by zero") + } +} + +func imod(v int64, d int64) (int64, error) { + if d != 0 { + return v % d, nil + } else { + return 0, newRuntimeError("division by zero") + } +} + +func ipow(v int64, e int64) (int64, error) { + mul := v + ret := int64(1) + + /* value must be 0 or positive */ + if v < 0 { + return 0, newRuntimeError(fmt.Sprintf("negative base value: %d", v)) + } + + /* exponent must be non-negative */ + if e < 0 { + return 0, newRuntimeError(fmt.Sprintf("negative exponent: %d", e)) + } + + /* fast power first round */ + if (e & 1) != 0 { + ret *= mul + } + + /* fast power remaining rounds */ + for e >>= 1; e != 0; e >>= 1 { + if mul *= mul; (e & 1) != 0 { + ret *= mul + } + } + + /* all done */ + return ret, nil +} diff --git a/vendor/github.com/chenzhuoyu/iasm/expr/parser.go b/vendor/github.com/chenzhuoyu/iasm/expr/parser.go new file mode 100644 index 0000000000..6022f007cc --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/expr/parser.go @@ -0,0 +1,313 @@ +package expr + +import ( + `strconv` + `unicode` + `unsafe` +) + +type _TokenKind uint8 + +const ( + _T_end _TokenKind = iota + 1 + _T_int + _T_punc + _T_name +) + +const ( + _OP2 = 0x80 + _POW = _OP2 | '*' + _SHL = _OP2 | '<' + _SHR = _OP2 | '>' +) + +type _Slice struct { + p unsafe.Pointer + n int + c int +} + +type _Token struct { + pos int + ptr *rune + u64 uint64 + tag _TokenKind +} + +func (self _Token) str() (v string) { + return string(self.rbuf()) +} + +func (self _Token) rbuf() (v []rune) { + (*_Slice)(unsafe.Pointer(&v)).c = int(self.u64) + (*_Slice)(unsafe.Pointer(&v)).n = int(self.u64) + (*_Slice)(unsafe.Pointer(&v)).p = unsafe.Pointer(self.ptr) + return +} + +func tokenEnd(p int) _Token { + return _Token { + pos: p, + tag: _T_end, + } +} + +func tokenInt(p int, v uint64) _Token { + return _Token { + pos: p, + u64: v, + tag: _T_int, + } +} + +func tokenPunc(p int, v rune) _Token { + return _Token { + pos: p, + tag: _T_punc, + u64: uint64(v), + } +} + +func tokenName(p int, v []rune) _Token { + return _Token { + pos: p, + ptr: &v[0], + tag: _T_name, + u64: uint64(len(v)), + } +} + +// Repository represents a repository of Term's. +type Repository interface { + Get(name string) (Term, error) +} + +// Parser parses an expression string to it's AST representation. +type Parser struct { + pos int + src []rune +} + +var binaryOps = [...]func(*Expr, *Expr) *Expr { + '+' : (*Expr).Add, + '-' : (*Expr).Sub, + '*' : (*Expr).Mul, + '/' : (*Expr).Div, + '%' : (*Expr).Mod, + '&' : (*Expr).And, + '^' : (*Expr).Xor, + '|' : (*Expr).Or, + _SHL : (*Expr).Shl, + _SHR : (*Expr).Shr, + _POW : (*Expr).Pow, +} + +var precedence = [...]map[int]bool { + {_SHL: true, _SHR: true}, + {'|' : true}, + {'^' : true}, + {'&' : true}, + {'+' : true, '-': true}, + {'*' : true, '/': true, '%': true}, + {_POW: true}, +} + +func (self *Parser) ch() rune { + return self.src[self.pos] +} + +func (self *Parser) eof() bool { + return self.pos >= len(self.src) +} + +func (self *Parser) rch() (v rune) { + v, self.pos = self.src[self.pos], self.pos + 1 + return +} + +func (self *Parser) hex(ss []rune) bool { + if len(ss) == 1 && ss[0] == '0' { + return unicode.ToLower(self.ch()) == 'x' + } else if len(ss) <= 1 || unicode.ToLower(ss[1]) != 'x' { + return unicode.IsDigit(self.ch()) + } else { + return ishexdigit(self.ch()) + } +} + +func (self *Parser) int(p int, ss []rune) (_Token, error) { + var err error + var val uint64 + + /* find all the digits */ + for !self.eof() && self.hex(ss) { + ss = append(ss, self.rch()) + } + + /* parse the value */ + if val, err = strconv.ParseUint(string(ss), 0, 64); err != nil { + return _Token{}, err + } else { + return tokenInt(p, val), nil + } +} + +func (self *Parser) name(p int, ss []rune) _Token { + for !self.eof() && isident(self.ch()) { ss = append(ss, self.rch()) } + return tokenName(p, ss) +} + +func (self *Parser) read(p int, ch rune) (_Token, error) { + if isdigit(ch) { + return self.int(p, []rune { ch }) + } else if isident0(ch) { + return self.name(p, []rune { ch }), nil + } else if isop2ch(ch) && !self.eof() && self.ch() == ch { + return tokenPunc(p, _OP2 | self.rch()), nil + } else if isop1ch(ch) { + return tokenPunc(p, ch), nil + } else { + return _Token{}, newSyntaxError(self.pos, "invalid character " + strconv.QuoteRuneToASCII(ch)) + } +} + +func (self *Parser) next() (_Token, error) { + for { + var p int + var c rune + + /* check for EOF */ + if self.eof() { + return tokenEnd(self.pos), nil + } + + /* read the next char */ + p = self.pos + c = self.rch() + + /* parse the token if not a space */ + if !unicode.IsSpace(c) { + return self.read(p, c) + } + } +} + +func (self *Parser) grab(tk _Token, repo Repository) (*Expr, error) { + if repo == nil { + return nil, newSyntaxError(tk.pos, "unresolved symbol: " + tk.str()) + } else if term, err := repo.Get(tk.str()); err != nil { + return nil, err + } else { + return Ref(term), nil + } +} + +func (self *Parser) nest(nest int, repo Repository) (*Expr, error) { + var err error + var ret *Expr + var ntk _Token + + /* evaluate the nested expression */ + if ret, err = self.expr(0, nest + 1, repo); err != nil { + return nil, err + } + + /* must follows with a ')' */ + if ntk, err = self.next(); err != nil { + return nil, err + } else if ntk.tag != _T_punc || ntk.u64 != ')' { + return nil, newSyntaxError(ntk.pos, "')' expected") + } else { + return ret, nil + } +} + +func (self *Parser) unit(nest int, repo Repository) (*Expr, error) { + if tk, err := self.next(); err != nil { + return nil, err + } else if tk.tag == _T_int { + return Int(int64(tk.u64)), nil + } else if tk.tag == _T_name { + return self.grab(tk, repo) + } else if tk.tag == _T_punc && tk.u64 == '(' { + return self.nest(nest, repo) + } else if tk.tag == _T_punc && tk.u64 == '+' { + return self.unit(nest, repo) + } else if tk.tag == _T_punc && tk.u64 == '-' { + return neg2(self.unit(nest, repo)) + } else if tk.tag == _T_punc && tk.u64 == '~' { + return not2(self.unit(nest, repo)) + } else { + return nil, newSyntaxError(tk.pos, "integer, unary operator or nested expression expected") + } +} + +func (self *Parser) term(prec int, nest int, repo Repository) (*Expr, error) { + var err error + var val *Expr + + /* parse the LHS operand */ + if val, err = self.expr(prec + 1, nest, repo); err != nil { + return nil, err + } + + /* parse all the operators of the same precedence */ + for { + var op int + var rv *Expr + var tk _Token + + /* peek the next token */ + pp := self.pos + tk, err = self.next() + + /* check for errors */ + if err != nil { + return nil, err + } + + /* encountered EOF */ + if tk.tag == _T_end { + return val, nil + } + + /* must be an operator */ + if tk.tag != _T_punc { + return nil, newSyntaxError(tk.pos, "operators expected") + } + + /* check for the operator precedence */ + if op = int(tk.u64); !precedence[prec][op] { + self.pos = pp + return val, nil + } + + /* evaluate the RHS operand, and combine the value */ + if rv, err = self.expr(prec + 1, nest, repo); err != nil { + return nil, err + } else { + val = binaryOps[op](val, rv) + } + } +} + +func (self *Parser) expr(prec int, nest int, repo Repository) (*Expr, error) { + if prec >= len(precedence) { + return self.unit(nest, repo) + } else { + return self.term(prec, nest, repo) + } +} + +// Parse parses the expression, and returns it's AST tree. +func (self *Parser) Parse(repo Repository) (*Expr, error) { + return self.expr(0, 0, repo) +} + +// SetSource resets the expression parser and sets the expression source. +func (self *Parser) SetSource(src string) *Parser { + self.pos = 0 + self.src = []rune(src) + return self +} diff --git a/vendor/github.com/chenzhuoyu/iasm/expr/pools.go b/vendor/github.com/chenzhuoyu/iasm/expr/pools.go new file mode 100644 index 0000000000..fde422ee61 --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/expr/pools.go @@ -0,0 +1,26 @@ +package expr + +import ( + `sync` +) + +var ( + expressionPool sync.Pool +) + +func newExpression() *Expr { + if v := expressionPool.Get(); v == nil { + return new(Expr) + } else { + return resetExpression(v.(*Expr)) + } +} + +func freeExpression(p *Expr) { + expressionPool.Put(p) +} + +func resetExpression(p *Expr) *Expr { + *p = Expr{} + return p +} diff --git a/vendor/github.com/chenzhuoyu/iasm/expr/term.go b/vendor/github.com/chenzhuoyu/iasm/expr/term.go new file mode 100644 index 0000000000..110bcebdb7 --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/expr/term.go @@ -0,0 +1,7 @@ +package expr + +// Term represents a value that can Evaluate() into an integer. +type Term interface { + Free() + Evaluate() (int64, error) +} diff --git a/vendor/github.com/chenzhuoyu/iasm/expr/utils.go b/vendor/github.com/chenzhuoyu/iasm/expr/utils.go new file mode 100644 index 0000000000..03a98b85b6 --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/expr/utils.go @@ -0,0 +1,61 @@ +package expr + +var op1ch = [...]bool { + '+': true, + '-': true, + '*': true, + '/': true, + '%': true, + '&': true, + '|': true, + '^': true, + '~': true, + '(': true, + ')': true, +} + +var op2ch = [...]bool { + '*': true, + '<': true, + '>': true, +} + +func neg2(v *Expr, err error) (*Expr, error) { + if err != nil { + return nil, err + } else { + return v.Neg(), nil + } +} + +func not2(v *Expr, err error) (*Expr, error) { + if err != nil { + return nil, err + } else { + return v.Not(), nil + } +} + +func isop1ch(ch rune) bool { + return ch >= 0 && int(ch) < len(op1ch) && op1ch[ch] +} + +func isop2ch(ch rune) bool { + return ch >= 0 && int(ch) < len(op2ch) && op2ch[ch] +} + +func isdigit(ch rune) bool { + return ch >= '0' && ch <= '9' +} + +func isident(ch rune) bool { + return isdigit(ch) || isident0(ch) +} + +func isident0(ch rune) bool { + return (ch == '_') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') +} + +func ishexdigit(ch rune) bool { + return isdigit(ch) || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F') +} diff --git a/vendor/github.com/chenzhuoyu/iasm/x86_64/arch.go b/vendor/github.com/chenzhuoyu/iasm/x86_64/arch.go new file mode 100644 index 0000000000..c427c8c09a --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/x86_64/arch.go @@ -0,0 +1,235 @@ +package x86_64 + +import ( + `fmt` +) + +// ISA represents an extension to x86-64 instruction set. +type ISA uint64 + +const ( + ISA_CPUID ISA = 1 << iota + ISA_RDTSC + ISA_RDTSCP + ISA_CMOV + ISA_MOVBE + ISA_POPCNT + ISA_LZCNT + ISA_TBM + ISA_BMI + ISA_BMI2 + ISA_ADX + ISA_MMX + ISA_MMX_PLUS + ISA_FEMMS + ISA_3DNOW + ISA_3DNOW_PLUS + ISA_SSE + ISA_SSE2 + ISA_SSE3 + ISA_SSSE3 + ISA_SSE4A + ISA_SSE4_1 + ISA_SSE4_2 + ISA_FMA3 + ISA_FMA4 + ISA_XOP + ISA_F16C + ISA_AVX + ISA_AVX2 + ISA_AVX512F + ISA_AVX512BW + ISA_AVX512DQ + ISA_AVX512VL + ISA_AVX512PF + ISA_AVX512ER + ISA_AVX512CD + ISA_AVX512VBMI + ISA_AVX512IFMA + ISA_AVX512VPOPCNTDQ + ISA_AVX512_4VNNIW + ISA_AVX512_4FMAPS + ISA_PREFETCH + ISA_PREFETCHW + ISA_PREFETCHWT1 + ISA_CLFLUSH + ISA_CLFLUSHOPT + ISA_CLWB + ISA_CLZERO + ISA_RDRAND + ISA_RDSEED + ISA_PCLMULQDQ + ISA_AES + ISA_SHA + ISA_MONITOR + ISA_MONITORX + ISA_ALL = ^ISA(0) +) + +var _ISA_NAMES = map[ISA]string { + ISA_CPUID : "CPUID", + ISA_RDTSC : "RDTSC", + ISA_RDTSCP : "RDTSCP", + ISA_CMOV : "CMOV", + ISA_MOVBE : "MOVBE", + ISA_POPCNT : "POPCNT", + ISA_LZCNT : "LZCNT", + ISA_TBM : "TBM", + ISA_BMI : "BMI", + ISA_BMI2 : "BMI2", + ISA_ADX : "ADX", + ISA_MMX : "MMX", + ISA_MMX_PLUS : "MMX+", + ISA_FEMMS : "FEMMS", + ISA_3DNOW : "3dnow!", + ISA_3DNOW_PLUS : "3dnow!+", + ISA_SSE : "SSE", + ISA_SSE2 : "SSE2", + ISA_SSE3 : "SSE3", + ISA_SSSE3 : "SSSE3", + ISA_SSE4A : "SSE4A", + ISA_SSE4_1 : "SSE4.1", + ISA_SSE4_2 : "SSE4.2", + ISA_FMA3 : "FMA3", + ISA_FMA4 : "FMA4", + ISA_XOP : "XOP", + ISA_F16C : "F16C", + ISA_AVX : "AVX", + ISA_AVX2 : "AVX2", + ISA_AVX512F : "AVX512F", + ISA_AVX512BW : "AVX512BW", + ISA_AVX512DQ : "AVX512DQ", + ISA_AVX512VL : "AVX512VL", + ISA_AVX512PF : "AVX512PF", + ISA_AVX512ER : "AVX512ER", + ISA_AVX512CD : "AVX512CD", + ISA_AVX512VBMI : "AVX512VBMI", + ISA_AVX512IFMA : "AVX512IFMA", + ISA_AVX512VPOPCNTDQ : "AVX512VPOPCNTDQ", + ISA_AVX512_4VNNIW : "AVX512_4VNNIW", + ISA_AVX512_4FMAPS : "AVX512_4FMAPS", + ISA_PREFETCH : "PREFETCH", + ISA_PREFETCHW : "PREFETCHW", + ISA_PREFETCHWT1 : "PREFETCHWT1", + ISA_CLFLUSH : "CLFLUSH", + ISA_CLFLUSHOPT : "CLFLUSHOPT", + ISA_CLWB : "CLWB", + ISA_CLZERO : "CLZERO", + ISA_RDRAND : "RDRAND", + ISA_RDSEED : "RDSEED", + ISA_PCLMULQDQ : "PCLMULQDQ", + ISA_AES : "AES", + ISA_SHA : "SHA", + ISA_MONITOR : "MONITOR", + ISA_MONITORX : "MONITORX", +} + +var _ISA_MAPPING = map[string]ISA { + "CPUID" : ISA_CPUID, + "RDTSC" : ISA_RDTSC, + "RDTSCP" : ISA_RDTSCP, + "CMOV" : ISA_CMOV, + "MOVBE" : ISA_MOVBE, + "POPCNT" : ISA_POPCNT, + "LZCNT" : ISA_LZCNT, + "TBM" : ISA_TBM, + "BMI" : ISA_BMI, + "BMI2" : ISA_BMI2, + "ADX" : ISA_ADX, + "MMX" : ISA_MMX, + "MMX+" : ISA_MMX_PLUS, + "FEMMS" : ISA_FEMMS, + "3dnow!" : ISA_3DNOW, + "3dnow!+" : ISA_3DNOW_PLUS, + "SSE" : ISA_SSE, + "SSE2" : ISA_SSE2, + "SSE3" : ISA_SSE3, + "SSSE3" : ISA_SSSE3, + "SSE4A" : ISA_SSE4A, + "SSE4.1" : ISA_SSE4_1, + "SSE4.2" : ISA_SSE4_2, + "FMA3" : ISA_FMA3, + "FMA4" : ISA_FMA4, + "XOP" : ISA_XOP, + "F16C" : ISA_F16C, + "AVX" : ISA_AVX, + "AVX2" : ISA_AVX2, + "AVX512F" : ISA_AVX512F, + "AVX512BW" : ISA_AVX512BW, + "AVX512DQ" : ISA_AVX512DQ, + "AVX512VL" : ISA_AVX512VL, + "AVX512PF" : ISA_AVX512PF, + "AVX512ER" : ISA_AVX512ER, + "AVX512CD" : ISA_AVX512CD, + "AVX512VBMI" : ISA_AVX512VBMI, + "AVX512IFMA" : ISA_AVX512IFMA, + "AVX512VPOPCNTDQ" : ISA_AVX512VPOPCNTDQ, + "AVX512_4VNNIW" : ISA_AVX512_4VNNIW, + "AVX512_4FMAPS" : ISA_AVX512_4FMAPS, + "PREFETCH" : ISA_PREFETCH, + "PREFETCHW" : ISA_PREFETCHW, + "PREFETCHWT1" : ISA_PREFETCHWT1, + "CLFLUSH" : ISA_CLFLUSH, + "CLFLUSHOPT" : ISA_CLFLUSHOPT, + "CLWB" : ISA_CLWB, + "CLZERO" : ISA_CLZERO, + "RDRAND" : ISA_RDRAND, + "RDSEED" : ISA_RDSEED, + "PCLMULQDQ" : ISA_PCLMULQDQ, + "AES" : ISA_AES, + "SHA" : ISA_SHA, + "MONITOR" : ISA_MONITOR, + "MONITORX" : ISA_MONITORX, +} + +func (self ISA) String() string { + if v, ok := _ISA_NAMES[self]; ok { + return v + } else { + return fmt.Sprintf("(invalid: %#x)", uint64(self)) + } +} + +// ParseISA parses name into ISA, it will panic if the name is invalid. +func ParseISA(name string) ISA { + if v, ok := _ISA_MAPPING[name]; ok { + return v + } else { + panic("invalid ISA name: " + name) + } +} + +// Arch represents the x86_64 architecture. +type Arch struct { + isa ISA +} + +// DefaultArch is the default architecture with all ISA enabled. +var DefaultArch = CreateArch() + +// CreateArch creates a new Arch with all ISA enabled. +func CreateArch() *Arch { + return new(Arch).EnableISA(ISA_ALL) +} + +// HasISA checks if a particular ISA was enabled. +func (self *Arch) HasISA(isa ISA) bool { + return (self.isa & isa) != 0 +} + +// EnableISA enables a particular ISA. +func (self *Arch) EnableISA(isa ISA) *Arch { + self.isa |= isa + return self +} + +// DisableISA disables a particular ISA. +func (self *Arch) DisableISA(isa ISA) *Arch { + self.isa &^= isa + return self +} + +// CreateProgram creates a new empty program. +func (self *Arch) CreateProgram() *Program { + return newProgram(self) +} diff --git a/vendor/github.com/bytedance/sonic/internal/loader/asm.s b/vendor/github.com/chenzhuoyu/iasm/x86_64/asm.s similarity index 100% rename from vendor/github.com/bytedance/sonic/internal/loader/asm.s rename to vendor/github.com/chenzhuoyu/iasm/x86_64/asm.s diff --git a/vendor/github.com/chenzhuoyu/iasm/x86_64/assembler.go b/vendor/github.com/chenzhuoyu/iasm/x86_64/assembler.go new file mode 100644 index 0000000000..b33a586b45 --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/x86_64/assembler.go @@ -0,0 +1,1803 @@ +package x86_64 + +import ( + `bytes` + `errors` + `fmt` + `math` + `strconv` + `strings` + `unicode` + + `github.com/chenzhuoyu/iasm/expr` +) + +type ( + _TokenKind int + _Punctuation int +) + +const ( + _T_end _TokenKind = iota + 1 + _T_int + _T_name + _T_punc + _T_space +) + +const ( + _P_plus _Punctuation = iota + 1 + _P_minus + _P_star + _P_slash + _P_percent + _P_amp + _P_bar + _P_caret + _P_shl + _P_shr + _P_tilde + _P_lbrk + _P_rbrk + _P_dot + _P_comma + _P_colon + _P_dollar + _P_hash +) + +var _PUNC_NAME = map[_Punctuation]string { + _P_plus : "+", + _P_minus : "-", + _P_star : "*", + _P_slash : "/", + _P_percent : "%", + _P_amp : "&", + _P_bar : "|", + _P_caret : "^", + _P_shl : "<<", + _P_shr : ">>", + _P_tilde : "~", + _P_lbrk : "(", + _P_rbrk : ")", + _P_dot : ".", + _P_comma : ",", + _P_colon : ":", + _P_dollar : "$", + _P_hash : "#", +} + +func (self _Punctuation) String() string { + if v, ok := _PUNC_NAME[self]; ok { + return v + } else { + return fmt.Sprintf("_Punctuation(%d)", self) + } +} + +type _Token struct { + pos int + end int + u64 uint64 + str string + tag _TokenKind +} + +func (self *_Token) punc() _Punctuation { + return _Punctuation(self.u64) +} + +func (self *_Token) String() string { + switch self.tag { + case _T_end : return "" + case _T_int : return fmt.Sprintf("", self.u64) + case _T_punc : return fmt.Sprintf("", _Punctuation(self.u64)) + case _T_name : return fmt.Sprintf("", strconv.QuoteToASCII(self.str)) + case _T_space : return "" + default : return fmt.Sprintf("", self.tag, self.u64, strconv.QuoteToASCII(self.str)) + } +} + +func tokenEnd(p int, end int) _Token { + return _Token { + pos: p, + end: end, + tag: _T_end, + } +} + +func tokenInt(p int, val uint64) _Token { + return _Token { + pos: p, + u64: val, + tag: _T_int, + } +} + +func tokenName(p int, name string) _Token { + return _Token { + pos: p, + str: name, + tag: _T_name, + } +} + +func tokenPunc(p int, punc _Punctuation) _Token { + return _Token { + pos: p, + tag: _T_punc, + u64: uint64(punc), + } +} + +func tokenSpace(p int, end int) _Token { + return _Token { + pos: p, + end: end, + tag: _T_space, + } +} + +// SyntaxError represents an error in the assembly syntax. +type SyntaxError struct { + Pos int + Row int + Src []rune + Reason string +} + +// Error implements the error interface. +func (self *SyntaxError) Error() string { + if self.Pos < 0 { + return fmt.Sprintf("%s at line %d", self.Reason, self.Row) + } else { + return fmt.Sprintf("%s at %d:%d", self.Reason, self.Row, self.Pos + 1) + } +} + +type _Tokenizer struct { + pos int + row int + src []rune +} + +func (self *_Tokenizer) ch() rune { + return self.src[self.pos] +} + +func (self *_Tokenizer) eof() bool { + return self.pos >= len(self.src) +} + +func (self *_Tokenizer) rch() (ret rune) { + ret, self.pos = self.src[self.pos], self.pos + 1 + return +} + +func (self *_Tokenizer) err(pos int, msg string) *SyntaxError { + return &SyntaxError { + Pos : pos, + Row : self.row, + Src : self.src, + Reason : msg, + } +} + +type _TrimState int + +const ( + _TS_normal _TrimState = iota + _TS_slcomm + _TS_hscomm + _TS_string + _TS_escape + _TS_accept + _TS_nolast +) + +func (self *_Tokenizer) init(src string) { + var i int + var ch rune + var st _TrimState + + /* set the source */ + self.pos = 0 + self.src = []rune(src) + + /* remove commends, including "//" and "##" */ + loop: for i, ch = range self.src { + switch { + case st == _TS_normal && ch == '/' : st = _TS_slcomm + case st == _TS_normal && ch == '"' : st = _TS_string + case st == _TS_normal && ch == ';' : st = _TS_accept; break loop + case st == _TS_normal && ch == '#' : st = _TS_hscomm + case st == _TS_slcomm && ch == '/' : st = _TS_nolast; break loop + case st == _TS_slcomm : st = _TS_normal + case st == _TS_hscomm && ch == '#' : st = _TS_nolast; break loop + case st == _TS_hscomm : st = _TS_normal + case st == _TS_string && ch == '"' : st = _TS_normal + case st == _TS_string && ch == '\\' : st = _TS_escape + case st == _TS_escape : st = _TS_string + } + } + + /* check for errors */ + switch st { + case _TS_accept: self.src = self.src[:i] + case _TS_nolast: self.src = self.src[:i - 1] + case _TS_string: panic(self.err(i, "string is not terminated")) + case _TS_escape: panic(self.err(i, "escape sequence is not terminated")) + } +} + +func (self *_Tokenizer) skip(check func(v rune) bool) { + for !self.eof() && check(self.ch()) { + self.pos++ + } +} + +func (self *_Tokenizer) find(pos int, check func(v rune) bool) string { + self.skip(check) + return string(self.src[pos:self.pos]) +} + +func (self *_Tokenizer) chrv(p int) _Token { + var err error + var val uint64 + + /* starting and ending position */ + p0 := p + 1 + p1 := p0 + 1 + + /* find the end of the literal */ + for p1 < len(self.src) && self.src[p1] != '\'' { + if p1++; self.src[p1 - 1] == '\\' { + p1++ + } + } + + /* empty literal */ + if p1 == p0 { + panic(self.err(p1, "empty character constant")) + } + + /* check for EOF */ + if p1 == len(self.src) { + panic(self.err(p1, "unexpected EOF when scanning literals")) + } + + /* parse the literal */ + if val, err = literal64(string(self.src[p0:p1])); err != nil { + panic(self.err(p0, "cannot parse literal: " + err.Error())) + } + + /* skip the closing '\'' */ + self.pos = p1 + 1 + return tokenInt(p, val) +} + +func (self *_Tokenizer) numv(p int) _Token { + if val, err := strconv.ParseUint(self.find(p, isnumber), 0, 64); err != nil { + panic(self.err(p, "invalid immediate value: " + err.Error())) + } else { + return tokenInt(p, val) + } +} + +func (self *_Tokenizer) defv(p int, cc rune) _Token { + if isdigit(cc) { + return self.numv(p) + } else if isident0(cc) { + return tokenName(p, self.find(p, isident)) + } else { + panic(self.err(p, "invalid char: " + strconv.QuoteRune(cc))) + } +} + +func (self *_Tokenizer) rep2(p int, pp _Punctuation, cc rune) _Token { + if self.eof() { + panic(self.err(self.pos, "unexpected EOF when scanning operators")) + } else if c := self.rch(); c != cc { + panic(self.err(p + 1, strconv.QuoteRune(cc) + " expected, got " + strconv.QuoteRune(c))) + } else { + return tokenPunc(p, pp) + } +} + +func (self *_Tokenizer) read() _Token { + var p int + var c rune + var t _Token + + /* check for EOF */ + if self.eof() { + return tokenEnd(self.pos, self.pos) + } + + /* skip spaces as needed */ + if p = self.pos; unicode.IsSpace(self.src[p]) { + self.skip(unicode.IsSpace) + return tokenSpace(p, self.pos) + } + + /* check for line comments */ + if p = self.pos; p < len(self.src) - 1 && self.src[p] == '/' && self.src[p + 1] == '/' { + self.pos = len(self.src) + return tokenEnd(p, self.pos) + } + + /* read the next character */ + p = self.pos + c = self.rch() + + /* parse the next character */ + switch c { + case '+' : t = tokenPunc(p, _P_plus) + case '-' : t = tokenPunc(p, _P_minus) + case '*' : t = tokenPunc(p, _P_star) + case '/' : t = tokenPunc(p, _P_slash) + case '%' : t = tokenPunc(p, _P_percent) + case '&' : t = tokenPunc(p, _P_amp) + case '|' : t = tokenPunc(p, _P_bar) + case '^' : t = tokenPunc(p, _P_caret) + case '<' : t = self.rep2(p, _P_shl, '<') + case '>' : t = self.rep2(p, _P_shr, '>') + case '~' : t = tokenPunc(p, _P_tilde) + case '(' : t = tokenPunc(p, _P_lbrk) + case ')' : t = tokenPunc(p, _P_rbrk) + case '.' : t = tokenPunc(p, _P_dot) + case ',' : t = tokenPunc(p, _P_comma) + case ':' : t = tokenPunc(p, _P_colon) + case '$' : t = tokenPunc(p, _P_dollar) + case '#' : t = tokenPunc(p, _P_hash) + case '\'' : t = self.chrv(p) + default : t = self.defv(p, c) + } + + /* mark the end of token */ + t.end = self.pos + return t +} + +func (self *_Tokenizer) next() (tk _Token) { + for { + if tk = self.read(); tk.tag != _T_space { + return + } + } +} + +// LabelKind indicates the type of label reference. +type LabelKind int + +// OperandKind indicates the type of the operand. +type OperandKind int + +// InstructionPrefix indicates the prefix bytes prepended to the instruction. +type InstructionPrefix byte + +const ( + // OpImm means the operand is an immediate value. + OpImm OperandKind = 1 << iota + + // OpReg means the operand is a register. + OpReg + + // OpMem means the operand is a memory address. + OpMem + + // OpLabel means the operand is a label, specifically for + // branch instructions. + OpLabel +) + +const ( + // Declaration means the label is a declaration. + Declaration LabelKind = iota + 1 + + // BranchTarget means the label should be treated as a branch target. + BranchTarget + + // RelativeAddress means the label should be treated as a reference to + // the code section (e.g. RIP-relative addressing). + RelativeAddress +) + +const ( + // PrefixLock causes the processor's LOCK# signal to be asserted during execution of + // the accompanying instruction (turns the instruction into an atomic instruction). + // In a multiprocessor environment, the LOCK# signal insures that the processor + // has exclusive use of any shared memory while the signal is asserted. + PrefixLock InstructionPrefix = iota + + // PrefixSegmentCS overrides the memory operation of this instruction to CS (Code Segment). + PrefixSegmentCS + + // PrefixSegmentDS overrides the memory operation of this instruction to DS (Data Segment), + // this is the default section for most instructions if not specified. + PrefixSegmentDS + + // PrefixSegmentES overrides the memory operation of this instruction to ES (Extra Segment). + PrefixSegmentES + + // PrefixSegmentFS overrides the memory operation of this instruction to FS. + PrefixSegmentFS + + // PrefixSegmentGS overrides the memory operation of this instruction to GS. + PrefixSegmentGS + + // PrefixSegmentSS overrides the memory operation of this instruction to SS (Stack Segment). + PrefixSegmentSS +) + +// ParsedLabel represents a label in the source, either a jump target or +// an RIP-relative addressing. +type ParsedLabel struct { + Name string + Kind LabelKind +} + +// ParsedOperand represents an operand of an instruction in the source. +type ParsedOperand struct { + Op OperandKind + Imm int64 + Reg Register + Label ParsedLabel + Memory MemoryAddress +} + +// ParsedInstruction represents an instruction in the source. +type ParsedInstruction struct { + Mnemonic string + Operands []ParsedOperand + Prefixes []InstructionPrefix +} + +func (self *ParsedInstruction) imm(v int64) { + self.Operands = append(self.Operands, ParsedOperand { + Op : OpImm, + Imm : v, + }) +} + +func (self *ParsedInstruction) reg(v Register) { + self.Operands = append(self.Operands, ParsedOperand { + Op : OpReg, + Reg : v, + }) +} + +func (self *ParsedInstruction) mem(v MemoryAddress) { + self.Operands = append(self.Operands, ParsedOperand { + Op : OpMem, + Memory : v, + }) +} + +func (self *ParsedInstruction) target(v string) { + self.Operands = append(self.Operands, ParsedOperand { + Op : OpLabel, + Label : ParsedLabel { + Name: v, + Kind: BranchTarget, + }, + }) +} + +func (self *ParsedInstruction) reference(v string) { + self.Operands = append(self.Operands, ParsedOperand { + Op : OpLabel, + Label : ParsedLabel { + Name: v, + Kind: RelativeAddress, + }, + }) +} + +// LineKind indicates the type of ParsedLine. +type LineKind int + +const ( + // LineLabel means the ParsedLine is a label. + LineLabel LineKind = iota + 1 + + // LineInstr means the ParsedLine is an instruction. + LineInstr + + // LineCommand means the ParsedLine is a ParsedCommand. + LineCommand +) + +// ParsedLine represents a parsed source line. +type ParsedLine struct { + Row int + Src []rune + Kind LineKind + Label ParsedLabel + Command ParsedCommand + Instruction ParsedInstruction +} + +// ParsedCommand represents a parsed assembly directive command. +type ParsedCommand struct { + Cmd string + Args []ParsedCommandArg +} + +// ParsedCommandArg represents an argument of a ParsedCommand. +type ParsedCommandArg struct { + Value string + IsString bool +} + +// Parser parses the source, and generates a sequence of ParsedInstruction's. +type Parser struct { + lex _Tokenizer + exp expr.Parser +} + +const ( + rip Register64 = 0xff +) + +var _RegBranch = map[string]bool { + "jmp" : true, + "jmpq" : true, + "call" : true, + "callq" : true, +} + +var _SegPrefix = map[string]InstructionPrefix { + "cs": PrefixSegmentCS, + "ds": PrefixSegmentDS, + "es": PrefixSegmentES, + "fs": PrefixSegmentFS, + "gs": PrefixSegmentGS, + "ss": PrefixSegmentSS, +} + +func (self *Parser) i32(tk _Token, v int64) int32 { + if v >= math.MinInt32 && v <= math.MaxUint32 { + return int32(v) + } else { + panic(self.err(tk.pos, fmt.Sprintf("32-bit integer out ouf range: %d", v))) + } +} + +func (self *Parser) err(pos int, msg string) *SyntaxError { + return &SyntaxError { + Pos : pos, + Row : self.lex.row, + Src : self.lex.src, + Reason : msg, + } +} + +func (self *Parser) negv() int64 { + tk := self.lex.read() + tt := tk.tag + + /* must be an integer */ + if tt != _T_int { + panic(self.err(tk.pos, "integer expected after '-'")) + } else { + return -int64(tk.u64) + } +} + +func (self *Parser) eval(p int) (r int64) { + var e error + var v *expr.Expr + + /* searching start */ + n := 1 + q := p + 1 + + /* find the end of expression */ + for n > 0 && q < len(self.lex.src) { + switch self.lex.src[q] { + case '(' : q++; n++ + case ')' : q++; n-- + default : q++ + } + } + + /* check for EOF */ + if n != 0 { + panic(self.err(q, "unexpected EOF when parsing expressions")) + } + + /* evaluate the expression */ + if v, e = self.exp.SetSource(string(self.lex.src[p:q - 1])).Parse(nil); e != nil { + panic(self.err(p, "cannot evaluate expression: " + e.Error())) + } + + /* evaluate the expression */ + if r, e = v.Evaluate(); e != nil { + panic(self.err(p, "cannot evaluate expression: " + e.Error())) + } + + /* skip the last ')' */ + v.Free() + self.lex.pos = q + return +} + +func (self *Parser) relx(tk _Token) { + if tk.tag != _T_punc || tk.punc() != _P_lbrk { + panic(self.err(tk.pos, "'(' expected for RIP-relative addressing")) + } else if tk = self.lex.next(); self.regx(tk) != rip { + panic(self.err(tk.pos, "RIP-relative addressing expects %rip as the base register")) + } else if tk = self.lex.next(); tk.tag != _T_punc || tk.punc() != _P_rbrk { + panic(self.err(tk.pos, "RIP-relative addressing does not support indexing or scaling")) + } +} + +func (self *Parser) immx(tk _Token) int64 { + if tk.tag != _T_punc || tk.punc() != _P_dollar { + panic(self.err(tk.pos, "'$' expected for registers")) + } else if tk = self.lex.read(); tk.tag == _T_int { + return int64(tk.u64) + } else if tk.tag == _T_punc && tk.punc() == _P_lbrk { + return self.eval(self.lex.pos) + } else if tk.tag == _T_punc && tk.punc() == _P_minus { + return self.negv() + } else { + panic(self.err(tk.pos, "immediate value expected")) + } +} + +func (self *Parser) regx(tk _Token) Register { + if tk.tag != _T_punc || tk.punc() != _P_percent { + panic(self.err(tk.pos, "'%' expected for registers")) + } else if tk = self.lex.read(); tk.tag != _T_name { + panic(self.err(tk.pos, "register name expected")) + } else if tk.str == "rip" { + return rip + } else if reg, ok := Registers[tk.str]; ok { + return reg + } else { + panic(self.err(tk.pos, "invalid register name: " + strconv.Quote(tk.str))) + } +} + +func (self *Parser) regv(tk _Token) Register { + if reg := self.regx(tk); reg == rip { + panic(self.err(tk.pos, "%rip is not accessable as a dedicated register")) + } else { + return reg + } +} + +func (self *Parser) disp(vv int32) MemoryAddress { + switch tk := self.lex.next(); tk.tag { + case _T_end : return MemoryAddress { Displacement: vv } + case _T_punc : return self.relm(tk, vv) + default : panic(self.err(tk.pos, "',' or '(' expected")) + } +} + +func (self *Parser) relm(tv _Token, disp int32) MemoryAddress { + var tk _Token + var tt _TokenKind + + /* check for absolute addressing */ + if tv.punc() == _P_comma { + self.lex.pos-- + return MemoryAddress { Displacement: disp } + } + + /* must be '(' now */ + if tv.punc() != _P_lbrk { + panic(self.err(tv.pos, "',' or '(' expected")) + } + + /* read the next token */ + tk = self.lex.next() + tt = tk.tag + + /* must be a punctuation */ + if tt != _T_punc { + panic(self.err(tk.pos, "'%' or ',' expected")) + } + + /* check for base */ + switch tk.punc() { + case _P_percent : return self.base(tk, disp) + case _P_comma : return self.index(nil, disp) + default : panic(self.err(tk.pos, "'%' or ',' expected")) + } +} + +func (self *Parser) base(tk _Token, disp int32) MemoryAddress { + rr := self.regx(tk) + nk := self.lex.next() + + /* check for register indirection or base-index addressing */ + if !isReg64(rr) { + panic(self.err(tk.pos, "not a valid base register")) + } else if nk.tag != _T_punc { + panic(self.err(nk.pos, "',' or ')' expected")) + } else if nk.punc() == _P_comma { + return self.index(rr, disp) + } else if nk.punc() == _P_rbrk { + return MemoryAddress { Base: rr, Displacement: disp } + } else { + panic(self.err(nk.pos, "',' or ')' expected")) + } +} + +func (self *Parser) index(base Register, disp int32) MemoryAddress { + tk := self.lex.next() + rr := self.regx(tk) + nk := self.lex.next() + + /* check for scaled indexing */ + if base == rip { + panic(self.err(tk.pos, "RIP-relative addressing does not support indexing or scaling")) + } else if !isIndexable(rr) { + panic(self.err(tk.pos, "not a valid index register")) + } else if nk.tag != _T_punc { + panic(self.err(nk.pos, "',' or ')' expected")) + } else if nk.punc() == _P_comma { + return self.scale(base, rr, disp) + } else if nk.punc() == _P_rbrk { + return MemoryAddress { Base: base, Index: rr, Scale: 1, Displacement: disp } + } else { + panic(self.err(nk.pos, "',' or ')' expected")) + } +} + +func (self *Parser) scale(base Register, index Register, disp int32) MemoryAddress { + tk := self.lex.next() + tt := tk.tag + tv := tk.u64 + + /* must be an integer */ + if tt != _T_int { + panic(self.err(tk.pos, "integer expected")) + } + + /* scale can only be 1, 2, 4 or 8 */ + if tv == 0 || (_Scales & (1 << tv)) == 0 { + panic(self.err(tk.pos, "scale can only be 1, 2, 4 or 8")) + } + + /* read next token */ + tk = self.lex.next() + tt = tk.tag + + /* check for the closing ')' */ + if tt != _T_punc || tk.punc() != _P_rbrk { + panic(self.err(tk.pos, "')' expected")) + } + + /* construct the memory address */ + return MemoryAddress { + Base : base, + Index : index, + Scale : uint8(tv), + Displacement : disp, + } +} + +func (self *Parser) cmds() *ParsedLine { + cmd := "" + pos := self.lex.pos + buf := []ParsedCommandArg(nil) + + /* find the end of command */ + for p := pos; pos < len(self.lex.src); pos++ { + if unicode.IsSpace(self.lex.src[pos]) { + cmd = string(self.lex.src[p:pos]) + break + } + } + + /* parse the arguments */ + loop: for { + switch self.next(&pos) { + case 0 : break loop + case '#' : break loop + case '"' : pos = self.strings(&buf, pos) + default : pos = self.expressions(&buf, pos) + } + } + + /* construct the line */ + return &ParsedLine { + Row : self.lex.row, + Src : self.lex.src, + Kind : LineCommand, + Command : ParsedCommand { + Cmd : cmd, + Args : buf, + }, + } +} + +func (self *Parser) feed(line string) *ParsedLine { + ff := true + rr := false + lk := false + + /* reset the lexer */ + self.lex.row++ + self.lex.init(line) + + /* parse the first token */ + tk := self.lex.next() + tt := tk.tag + + /* it is a directive if it starts with a dot */ + if tk.tag == _T_punc && tk.punc() == _P_dot { + return self.cmds() + } + + /* otherwise it could be labels or instructions */ + if tt != _T_name { + panic(self.err(tk.pos, "identifier expected")) + } + + /* peek the next token */ + lex := self.lex + tkx := lex.next() + + /* check for labels */ + if tkx.tag == _T_punc && tkx.punc() == _P_colon { + tkx = lex.next() + ttx := tkx.tag + + /* the line must end here */ + if ttx != _T_end { + panic(self.err(tkx.pos, "garbage after label definition")) + } + + /* construct the label */ + return &ParsedLine { + Row : self.lex.row, + Src : self.lex.src, + Kind : LineLabel, + Label : ParsedLabel { + Kind: Declaration, + Name: tk.str, + }, + } + } + + /* special case for the "lock" prefix */ + if tk.tag == _T_name && strings.ToLower(tk.str) == "lock" { + lk = true + tk = self.lex.next() + + /* must be an instruction */ + if tk.tag != _T_name { + panic(self.err(tk.pos, "identifier expected")) + } + } + + /* set the line kind and mnemonic */ + ret := &ParsedLine { + Row : self.lex.row, + Src : self.lex.src, + Kind : LineInstr, + Instruction : ParsedInstruction { Mnemonic: strings.ToLower(tk.str) }, + } + + /* check for LOCK prefix */ + if lk { + ret.Instruction.Prefixes = append(ret.Instruction.Prefixes, PrefixLock) + } + + /* parse all the operands */ + for { + tk = self.lex.next() + tt = tk.tag + + /* check for end of line */ + if tt == _T_end { + break + } + + /* expect a comma if not the first operand */ + if !ff { + if tt == _T_punc && tk.punc() == _P_comma { + tk = self.lex.next() + } else { + panic(self.err(tk.pos, "',' expected")) + } + } + + /* not the first operand anymore */ + ff = false + tt = tk.tag + + /* encountered an integer, must be a SIB memory address */ + if tt == _T_int { + ret.Instruction.mem(self.disp(self.i32(tk, int64(tk.u64)))) + continue + } + + /* encountered an identifier, maybe an expression or a jump target, or a segment override prefix */ + if tt == _T_name { + ts := tk.str + tp := self.lex.pos + + /* if the next token is EOF or a comma, it's a jumpt target */ + if tk = self.lex.next(); tk.tag == _T_end || (tk.tag == _T_punc && tk.punc() == _P_comma) { + self.lex.pos = tp + ret.Instruction.target(ts) + continue + } + + /* if it is a colon, it's a segment override prefix, otherwise it must be an RIP-relative addressing operand */ + if tk.tag != _T_punc || tk.punc() != _P_colon { + self.relx(tk) + ret.Instruction.reference(ts) + continue + } + + /* lookup segment prefixes */ + if p, ok := _SegPrefix[strings.ToLower(ts)]; !ok { + panic(self.err(tk.pos, "invalid segment name")) + } else { + ret.Instruction.Prefixes = append(ret.Instruction.Prefixes, p) + } + + /* read the next token */ + tk = self.lex.next() + tt = tk.tag + + /* encountered an integer, must be a SIB memory address */ + if tt == _T_int { + ret.Instruction.mem(self.disp(self.i32(tk, int64(tk.u64)))) + continue + } + } + + /* certain instructions may have a "*" before operands */ + if tt == _T_punc && tk.punc() == _P_star { + tk = self.lex.next() + tt = tk.tag + rr = true + } + + /* ... otherwise it must be a punctuation */ + if tt != _T_punc { + panic(self.err(tk.pos, "'$', '%', '-' or '(' expected")) + } + + /* check the operator */ + switch tk.punc() { + case _P_lbrk : break + case _P_minus : ret.Instruction.mem(self.disp(self.i32(tk, self.negv()))) ; continue + case _P_dollar : ret.Instruction.imm(self.immx(tk)) ; continue + case _P_percent : ret.Instruction.reg(self.regv(tk)) ; continue + default : panic(self.err(tk.pos, "'$', '%', '-' or '(' expected")) + } + + /* special case of '(', might be either `(expr)(SIB)` or just `(SIB)` + * read one more token to confirm */ + tk = self.lex.next() + tt = tk.tag + + /* the next token is '%', it's a memory address, + * or ',' if it's a memory address without base, + * otherwise it must be in `(expr)(SIB)` form */ + if tk.tag == _T_punc && tk.punc() == _P_percent { + ret.Instruction.mem(self.base(tk, 0)) + } else if tk.tag == _T_punc && tk.punc() == _P_comma { + ret.Instruction.mem(self.index(nil, 0)) + } else { + ret.Instruction.mem(self.disp(self.i32(tk, self.eval(tk.pos)))) + } + } + + /* check "jmp" and "call" instructions */ + if !_RegBranch[ret.Instruction.Mnemonic] { + return ret + } else if len(ret.Instruction.Operands) != 1 { + panic(self.err(tk.pos, fmt.Sprintf(`"%s" requires exact 1 argument`, ret.Instruction.Mnemonic))) + } else if !rr && ret.Instruction.Operands[0].Op != OpReg && ret.Instruction.Operands[0].Op != OpLabel { + panic(self.err(tk.pos, fmt.Sprintf(`invalid operand for "%s" instruction`, ret.Instruction.Mnemonic))) + } else { + return ret + } +} + +func (self *Parser) next(p *int) rune { + for { + if *p >= len(self.lex.src) { + return 0 + } else if cc := self.lex.src[*p]; !unicode.IsSpace(cc) { + return cc + } else { + *p++ + } + } +} + +func (self *Parser) delim(p int) int { + if cc := self.next(&p); cc == 0 { + return p + } else if cc == ',' { + return p + 1 + } else { + panic(self.err(p, "',' expected")) + } +} + +func (self *Parser) strings(argv *[]ParsedCommandArg, p int) int { + var i int + var e error + var v string + + /* find the end of string */ + for i = p + 1; i < len(self.lex.src) && self.lex.src[i] != '"'; i++ { + if self.lex.src[i] == '\\' { + i++ + } + } + + /* check for EOF */ + if i == len(self.lex.src) { + panic(self.err(i, "unexpected EOF when scanning strings")) + } + + /* unquote the string */ + if v, e = strconv.Unquote(string(self.lex.src[p:i + 1])); e != nil { + panic(self.err(p, "invalid string: " + e.Error())) + } + + /* add the argument to buffer */ + *argv = append(*argv, ParsedCommandArg { Value: v, IsString: true }) + return self.delim(i + 1) +} + +func (self *Parser) directives(line string) { + self.lex.row++ + self.lex.init(line) + + /* parse the first token */ + tk := self.lex.next() + tt := tk.tag + + /* check for EOF */ + if tt == _T_end { + return + } + + /* must be a directive */ + if tt != _T_punc || tk.punc() != _P_hash { + panic(self.err(tk.pos, "'#' expected")) + } + + /* parse the line number */ + tk = self.lex.next() + tt = tk.tag + + /* must be a line number, if it is, set the row number, and ignore the rest of the line */ + if tt != _T_int { + panic(self.err(tk.pos, "line number expected")) + } else { + self.lex.row = int(tk.u64) - 1 + } +} + +func (self *Parser) expressions(argv *[]ParsedCommandArg, p int) int { + var i int + var n int + var s int + + /* scan until the first standalone ',' or EOF */ + loop: for i = p; i < len(self.lex.src); i++ { + switch self.lex.src[i] { + case ',' : if s == 0 { if n == 0 { break loop } } + case ']', '}', '>' : if s == 0 { if n == 0 { break loop } else { n-- } } + case '[', '{', '<' : if s == 0 { n++ } + case '\\' : if s != 0 { i++ } + case '\'' : if s != 2 { s ^= 1 } + case '"' : if s != 1 { s ^= 2 } + } + } + + /* check for EOF in strings */ + if s != 0 { + panic(self.err(i, "unexpected EOF when scanning strings")) + } + + /* check for bracket matching */ + if n != 0 { + panic(self.err(i, "unbalanced '{' or '[' or '<'")) + } + + /* add the argument to buffer */ + *argv = append(*argv, ParsedCommandArg { Value: string(self.lex.src[p:i]) }) + return self.delim(i) +} + +// Feed feeds the parser with one more line, and the parser +// parses it into a ParsedLine. +// +// NOTE: Feed does not handle empty lines or multiple lines, +// it panics when this happens. Use Parse to parse multiple +// lines of assembly source. +// +func (self *Parser) Feed(src string) (ret *ParsedLine, err error) { + var ok bool + var ss string + var vv interface{} + + /* check for multiple lines */ + if strings.ContainsRune(src, '\n') { + return nil, errors.New("passing multiple lines to Feed()") + } + + /* check for blank lines */ + if ss = strings.TrimSpace(src); ss == "" || ss[0] == '#' || strings.HasPrefix(ss, "//") { + return nil, errors.New("blank line or line with only comments or line-marks") + } + + /* setup error handler */ + defer func() { + if vv = recover(); vv != nil { + if err, ok = vv.(*SyntaxError); !ok { + panic(vv) + } + } + }() + + /* call the actual parser */ + ret = self.feed(src) + return +} + +// Parse parses the entire assembly source (possibly multiple lines) into +// a sequence of *ParsedLine. +func (self *Parser) Parse(src string) (ret []*ParsedLine, err error) { + var ok bool + var ss string + var vv interface{} + + /* setup error handler */ + defer func() { + if vv = recover(); vv != nil { + if err, ok = vv.(*SyntaxError); !ok { + panic(vv) + } + } + }() + + /* feed every line */ + for _, line := range strings.Split(src, "\n") { + if ss = strings.TrimSpace(line); ss == "" || strings.HasPrefix(ss, "//") { + self.lex.row++ + } else if ss[0] == '#' { + self.directives(line) + } else { + ret = append(ret, self.feed(line)) + } + } + + /* all done */ + err = nil + return +} + +// Directive handles the directive. +func (self *Parser) Directive(line string) (err error) { + var ok bool + var ss string + var vv interface{} + + /* check for directives */ + if ss = strings.TrimSpace(line); ss == "" || ss[0] != '#' { + return errors.New("not a directive") + } + + /* setup error handler */ + defer func() { + if vv = recover(); vv != nil { + if err, ok = vv.(*SyntaxError); !ok { + panic(vv) + } + } + }() + + /* call the directive parser */ + self.directives(line) + return +} + +type _TermRepo struct { + terms map[string]expr.Term +} + +func (self *_TermRepo) Get(name string) (expr.Term, error) { + if ret, ok := self.terms[name]; ok { + return ret, nil + } else { + return nil, errors.New("undefined name: " + name) + } +} + +func (self *_TermRepo) label(name string) (*Label, error) { + var ok bool + var lb *Label + var tr expr.Term + + /* check for existing terms */ + if tr, ok = self.terms[name]; ok { + if lb, ok = tr.(*Label); ok { + return lb, nil + } else { + return nil, errors.New("name is not a label: " + name) + } + } + + /* create a new one as needed */ + lb = new(Label) + lb.Name = name + + /* create the map if needed */ + if self.terms == nil { + self.terms = make(map[string]expr.Term, 1) + } + + /* register the label */ + self.terms[name] = lb + return lb, nil +} + +func (self *_TermRepo) define(name string, term expr.Term) { + var ok bool + var tr expr.Term + + /* create the map if needed */ + if self.terms == nil { + self.terms = make(map[string]expr.Term, 1) + } + + /* check for existing terms */ + if tr, ok = self.terms[name]; !ok { + self.terms[name] = term + } else if _, ok = tr.(*Label); !ok { + self.terms[name] = term + } else { + panic("conflicting term types: " + name) + } +} + +// _Command describes an assembler command. +// +// The _Command.args describes both the arity and argument type with characters, +// the length is the number of arguments, the character itself represents the +// argument type. +// +// Possible values are: +// +// s This argument should be a string +// e This argument should be an expression +// ? The next argument is optional, and must be the last argument. +// +type _Command struct { + args string + handler func(*Assembler, *Program, []ParsedCommandArg) error +} + +// Options controls the behavior of Assembler. +type Options struct { + // InstructionAliasing specifies whether to enable instruction aliasing. + // Set to true enables instruction aliasing, and the Assembler will try harder to find instructions. + InstructionAliasing bool + + // IgnoreUnknownDirectives specifies whether to report errors when encountered unknown directives. + // Set to true ignores all unknwon directives silently, useful for parsing generated assembly. + IgnoreUnknownDirectives bool +} + +// Assembler assembles the entire assembly program and generates the corresponding +// machine code representations. +type Assembler struct { + cc int + ps Parser + pc uintptr + buf []byte + main string + opts Options + repo _TermRepo + expr expr.Parser + line *ParsedLine +} + +var asmCommands = map[string]_Command { + "org" : { "e" , (*Assembler).assembleCommandOrg }, + "set" : { "ee" , (*Assembler).assembleCommandSet }, + "byte" : { "e" , (*Assembler).assembleCommandByte }, + "word" : { "e" , (*Assembler).assembleCommandWord }, + "long" : { "e" , (*Assembler).assembleCommandLong }, + "quad" : { "e" , (*Assembler).assembleCommandQuad }, + "fill" : { "e?e" , (*Assembler).assembleCommandFill }, + "space" : { "e?e" , (*Assembler).assembleCommandFill }, + "align" : { "e?e" , (*Assembler).assembleCommandAlign }, + "entry" : { "e" , (*Assembler).assembleCommandEntry }, + "ascii" : { "s" , (*Assembler).assembleCommandAscii }, + "asciz" : { "s" , (*Assembler).assembleCommandAsciz }, + "p2align" : { "e?e" , (*Assembler).assembleCommandP2Align }, +} + +func (self *Assembler) err(msg string) *SyntaxError { + return &SyntaxError { + Pos : -1, + Row : self.line.Row, + Src : self.line.Src, + Reason : msg, + } +} + +func (self *Assembler) eval(expr string) (int64, error) { + if exp, err := self.expr.SetSource(expr).Parse(nil); err != nil { + return 0, err + } else { + return exp.Evaluate() + } +} + +func (self *Assembler) checkArgs(i int, n int, v *ParsedCommand, isString bool) error { + if i >= len(v.Args) { + return self.err(fmt.Sprintf("command %s takes exact %d arguments", strconv.Quote(v.Cmd), n)) + } else if isString && !v.Args[i].IsString { + return self.err(fmt.Sprintf("argument %d of command %s must be a string", i + 1, strconv.Quote(v.Cmd))) + } else if !isString && v.Args[i].IsString { + return self.err(fmt.Sprintf("argument %d of command %s must be an expression", i + 1, strconv.Quote(v.Cmd))) + } else { + return nil + } +} + +func (self *Assembler) assembleLabel(p *Program, lb *ParsedLabel) error { + if v, err := self.repo.label(lb.Name); err != nil { + return err + } else { + p.Link(v) + return nil + } +} + +func (self *Assembler) assembleInstr(p *Program, line *ParsedInstruction) (err error) { + var ok bool + var pfx []byte + var ops []interface{} + var enc _InstructionEncoder + + /* convert to lower-case */ + opts := self.opts + name := strings.ToLower(line.Mnemonic) + + /* fix register-addressing branches if needed */ + if opts.InstructionAliasing && len(line.Operands) == 1 { + switch { + case name == "retq" : name = "ret" + case name == "movabsq" : name = "movq" + case name == "jmp" && line.Operands[0].Op != OpLabel : name = "jmpq" + case name == "jmpq" && line.Operands[0].Op == OpLabel : name = "jmp" + case name == "call" && line.Operands[0].Op != OpLabel : name = "callq" + case name == "callq" && line.Operands[0].Op == OpLabel : name = "call" + } + } + + /* lookup from the alias table if needed */ + if opts.InstructionAliasing { + enc, ok = _InstructionAliases[name] + } + + /* lookup from the instruction table */ + if !ok { + enc, ok = Instructions[name] + } + + /* remove size suffix if possible */ + if !ok && opts.InstructionAliasing { + switch i := len(name) - 1; name[i] { + case 'b', 'w', 'l', 'q': { + enc, ok = Instructions[name[:i]] + } + } + } + + /* check for instruction name */ + if !ok { + return self.err("no such instruction: " + strconv.Quote(name)) + } + + /* allocate memory for prefix if any */ + if len(line.Prefixes) != 0 { + pfx = make([]byte, len(line.Prefixes)) + } + + /* convert the prefixes */ + for i, v := range line.Prefixes { + switch v { + case PrefixLock : pfx[i] = _P_lock + case PrefixSegmentCS : pfx[i] = _P_cs + case PrefixSegmentDS : pfx[i] = _P_ds + case PrefixSegmentES : pfx[i] = _P_es + case PrefixSegmentFS : pfx[i] = _P_fs + case PrefixSegmentGS : pfx[i] = _P_gs + case PrefixSegmentSS : pfx[i] = _P_ss + default : panic("unreachable: invalid segment prefix") + } + } + + /* convert the operands */ + for _, op := range line.Operands { + switch op.Op { + case OpImm : ops = append(ops, op.Imm) + case OpReg : ops = append(ops, op.Reg) + case OpMem : self.assembleInstrMem(&ops, op.Memory) + case OpLabel : self.assembleInstrLabel(&ops, op.Label) + default : panic("parser yields an invalid operand kind") + } + } + + /* catch any exceptions in the encoder */ + defer func() { + if v := recover(); v != nil { + err = self.err(fmt.Sprint(v)) + } + }() + + /* encode the instruction */ + enc(p, ops...).prefix = pfx + return nil +} + +func (self *Assembler) assembleInstrMem(ops *[]interface{}, addr MemoryAddress) { + mem := new(MemoryOperand) + *ops = append(*ops, mem) + + /* check for RIP-relative addressing */ + if addr.Base != rip { + mem.Addr.Type = Memory + mem.Addr.Memory = addr + } else { + mem.Addr.Type = Offset + mem.Addr.Offset = RelativeOffset(addr.Displacement) + } +} + +func (self *Assembler) assembleInstrLabel(ops *[]interface{}, label ParsedLabel) { + vk := label.Kind + tr, err := self.repo.label(label.Name) + + /* check for errors */ + if err != nil { + panic(err) + } + + /* check for branch target */ + if vk == BranchTarget { + *ops = append(*ops, tr) + return + } + + /* add to ops */ + *ops = append(*ops, &MemoryOperand { + Addr: Addressable { + Type : Reference, + Reference : tr, + }, + }) +} + +func (self *Assembler) assembleCommand(p *Program, line *ParsedCommand) error { + var iv int + var cc rune + var ok bool + var va bool + var fn _Command + + /* find the command */ + if fn, ok = asmCommands[line.Cmd]; !ok { + if self.opts.IgnoreUnknownDirectives { + return nil + } else { + return self.err("no such command: " + strconv.Quote(line.Cmd)) + } + } + + /* expected & real argument count */ + argx := len(fn.args) + argc := len(line.Args) + + /* check the arguments */ + loop: for iv, cc = range fn.args { + switch cc { + case '?' : va = true; break loop + case 's' : if err := self.checkArgs(iv, argx, line, true) ; err != nil { return err } + case 'e' : if err := self.checkArgs(iv, argx, line, false) ; err != nil { return err } + default : panic("invalid argument descriptor: " + strconv.Quote(fn.args)) + } + } + + /* simple case: non-variadic command */ + if !va { + if argc == argx { + return fn.handler(self, p, line.Args) + } else { + return self.err(fmt.Sprintf("command %s takes exact %d arguments", strconv.Quote(line.Cmd), argx)) + } + } + + /* check for the descriptor */ + if iv != argx - 2 { + panic("invalid argument descriptor: " + strconv.Quote(fn.args)) + } + + /* variadic command and the final optional argument is set */ + if argc == argx - 1 { + switch fn.args[argx - 1] { + case 's' : if err := self.checkArgs(iv, -1, line, true) ; err != nil { return err } + case 'e' : if err := self.checkArgs(iv, -1, line, false) ; err != nil { return err } + default : panic("invalid argument descriptor: " + strconv.Quote(fn.args)) + } + } + + /* check argument count */ + if argc == argx - 1 || argc == argx - 2 { + return fn.handler(self, p, line.Args) + } else { + return self.err(fmt.Sprintf("command %s takes %d or %d arguments", strconv.Quote(line.Cmd), argx - 2, argx - 1)) + } +} + +func (self *Assembler) assembleCommandInt(p *Program, argv []ParsedCommandArg, addfn func(*Program, *expr.Expr) *Instruction) error { + var err error + var val *expr.Expr + + /* parse the expression */ + if val, err = self.expr.SetSource(argv[0].Value).Parse(&self.repo); err != nil { + return err + } + + /* add to the program */ + addfn(p, val) + return nil +} + +func (self *Assembler) assembleCommandOrg(_ *Program, argv []ParsedCommandArg) error { + var err error + var val int64 + + /* evaluate the expression */ + if val, err = self.eval(argv[0].Value); err != nil { + return err + } + + /* check for origin */ + if val < 0 { + return self.err(fmt.Sprintf("negative origin: %d", val)) + } + + /* ".org" must be the first command if any */ + if self.cc != 1 { + return self.err(".org must be the first command if present") + } + + /* set the initial program counter */ + self.pc = uintptr(val) + return nil +} + +func (self *Assembler) assembleCommandSet(_ *Program, argv []ParsedCommandArg) error { + var err error + var val *expr.Expr + + /* parse the expression */ + if val, err = self.expr.SetSource(argv[1].Value).Parse(&self.repo); err != nil { + return err + } + + /* define the new identifier */ + self.repo.define(argv[0].Value, val) + return nil +} + +func (self *Assembler) assembleCommandByte(p *Program, argv []ParsedCommandArg) error { + return self.assembleCommandInt(p, argv, (*Program).Byte) +} + +func (self *Assembler) assembleCommandWord(p *Program, argv []ParsedCommandArg) error { + return self.assembleCommandInt(p, argv, (*Program).Word) +} + +func (self *Assembler) assembleCommandLong(p *Program, argv []ParsedCommandArg) error { + return self.assembleCommandInt(p, argv, (*Program).Long) +} + +func (self *Assembler) assembleCommandQuad(p *Program, argv []ParsedCommandArg) error { + return self.assembleCommandInt(p, argv, (*Program).Quad) +} + +func (self *Assembler) assembleCommandFill(p *Program, argv []ParsedCommandArg) error { + var fv byte + var nb int64 + var ex error + + /* evaluate the size */ + if nb, ex = self.eval(argv[0].Value); ex != nil { + return ex + } + + /* check for filling size */ + if nb < 0 { + return self.err(fmt.Sprintf("negative filling size: %d", nb)) + } + + /* check for optional filling value */ + if len(argv) == 2 { + if val, err := self.eval(argv[1].Value); err != nil { + return err + } else if val < math.MinInt8 || val > math.MaxUint8 { + return self.err(fmt.Sprintf("value %d cannot be represented with a byte", val)) + } else { + fv = byte(val) + } + } + + /* fill with specified byte */ + p.Data(bytes.Repeat([]byte { fv }, int(nb))) + return nil +} + +func (self *Assembler) assembleCommandAlign(p *Program, argv []ParsedCommandArg) error { + var nb int64 + var ex error + var fv *expr.Expr + + /* evaluate the size */ + if nb, ex = self.eval(argv[0].Value); ex != nil { + return ex + } + + /* check for alignment value */ + if nb <= 0 { + return self.err(fmt.Sprintf("zero or negative alignment: %d", nb)) + } + + /* alignment must be a power of 2 */ + if (nb & (nb - 1)) != 0 { + return self.err(fmt.Sprintf("alignment must be a power of 2: %d", nb)) + } + + /* check for optional filling value */ + if len(argv) == 2 { + if v, err := self.expr.SetSource(argv[1].Value).Parse(&self.repo); err == nil { + fv = v + } else { + return err + } + } + + /* fill with specified byte, default to 0 if not specified */ + p.Align(uint64(nb), fv) + return nil +} + +func (self *Assembler) assembleCommandEntry(_ *Program, argv []ParsedCommandArg) error { + name := argv[0].Value + rbuf := []rune(name) + + /* check all the characters */ + for i, cc := range rbuf { + if !isident0(cc) && (i == 0 || !isident(cc)) { + return self.err("entry point must be a label name") + } + } + + /* set the main entry point */ + self.main = name + return nil +} + +func (self *Assembler) assembleCommandAscii(p *Program, argv []ParsedCommandArg) error { + p.Data([]byte(argv[0].Value)) + return nil +} + +func (self *Assembler) assembleCommandAsciz(p *Program, argv []ParsedCommandArg) error { + p.Data(append([]byte(argv[0].Value), 0)) + return nil +} + +func (self *Assembler) assembleCommandP2Align(p *Program, argv []ParsedCommandArg) error { + var nb int64 + var ex error + var fv *expr.Expr + + /* evaluate the size */ + if nb, ex = self.eval(argv[0].Value); ex != nil { + return ex + } + + /* check for alignment value */ + if nb <= 0 { + return self.err(fmt.Sprintf("zero or negative alignment: %d", nb)) + } + + /* check for optional filling value */ + if len(argv) == 2 { + if v, err := self.expr.SetSource(argv[1].Value).Parse(&self.repo); err == nil { + fv = v + } else { + return err + } + } + + /* fill with specified byte, default to 0 if not specified */ + p.Align(1 << nb, fv) + return nil +} + +// Base returns the origin. +func (self *Assembler) Base() uintptr { + return self.pc +} + +// Code returns the assembled machine code. +func (self *Assembler) Code() []byte { + return self.buf +} + +// Entry returns the address of the specified entry point, or the origin if not specified. +func (self *Assembler) Entry() uintptr { + if self.main == "" { + return self.pc + } else if tr, err := self.repo.Get(self.main); err != nil { + panic(err) + } else if val, err := tr.Evaluate(); err != nil { + panic(err) + } else { + return uintptr(val) + } +} + +// Options returns the internal options reference, changing it WILL affect this Assembler instance. +func (self *Assembler) Options() *Options { + return &self.opts +} + +// WithBase resets the origin to pc. +func (self *Assembler) WithBase(pc uintptr) *Assembler { + self.pc = pc + return self +} + +// Assemble assembles the assembly source and save the machine code to internal buffer. +func (self *Assembler) Assemble(src string) error { + var err error + var buf []*ParsedLine + + /* parse the source */ + if buf, err = self.ps.Parse(src); err != nil { + return err + } + + /* create a new program */ + p := DefaultArch.CreateProgram() + defer p.Free() + + /* process every line */ + for _, self.line = range buf { + switch self.cc++; self.line.Kind { + case LineLabel : if err = self.assembleLabel (p, &self.line.Label) ; err != nil { return err } + case LineInstr : if err = self.assembleInstr (p, &self.line.Instruction) ; err != nil { return err } + case LineCommand : if err = self.assembleCommand (p, &self.line.Command) ; err != nil { return err } + default : panic("parser yields an invalid line kind") + } + } + + /* assemble the program */ + self.buf = p.Assemble(self.pc) + return nil +} diff --git a/vendor/github.com/chenzhuoyu/iasm/x86_64/assembler_alias.go b/vendor/github.com/chenzhuoyu/iasm/x86_64/assembler_alias.go new file mode 100644 index 0000000000..23a7cd1b9b --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/x86_64/assembler_alias.go @@ -0,0 +1,33 @@ +package x86_64 + +func alias_INT3(p *Program, vv ...interface{}) *Instruction { + if len(vv) == 0 { + return p.INT(3) + } else { + panic("instruction INT3 takes no operands") + } +} + +func alias_VCMPEQPS(p *Program, vv ...interface{}) *Instruction { + if len(vv) >= 3 { + return p.VCMPPS(0x00, vv[0], vv[1], vv[2], vv[3:]...) + } else { + panic("instruction VCMPEQPS takes 3 or 4 operands") + } +} + +func alias_VCMPTRUEPS(p *Program, vv ...interface{}) *Instruction { + if len(vv) >= 3 { + return p.VCMPPS(0x0f, vv[0], vv[1], vv[2], vv[3:]...) + } else { + panic("instruction VCMPTRUEPS takes 3 or 4 operands") + } +} + +var _InstructionAliases = map[string]_InstructionEncoder { + "int3" : alias_INT3, + "retq" : Instructions["ret"], + "movabsq" : Instructions["movq"], + "vcmpeqps" : alias_VCMPEQPS, + "vcmptrueps" : alias_VCMPTRUEPS, +} diff --git a/vendor/github.com/chenzhuoyu/iasm/x86_64/eface.go b/vendor/github.com/chenzhuoyu/iasm/x86_64/eface.go new file mode 100644 index 0000000000..b5607e8f98 --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/x86_64/eface.go @@ -0,0 +1,63 @@ +package x86_64 + +import ( + `reflect` + `unsafe` +) + +type _GoType struct { + size uintptr + pdata uintptr + hash uint32 + flags uint8 + align uint8 + falign uint8 + kflags uint8 + traits unsafe.Pointer + gcdata *byte + str int32 + ptrx int32 +} + +const ( + _KindMask = (1 << 5) - 1 +) + +func (self *_GoType) kind() reflect.Kind { + return reflect.Kind(self.kflags & _KindMask) +} + +type _GoSlice struct { + ptr unsafe.Pointer + len int + cap int +} + +type _GoEface struct { + vt *_GoType + ptr unsafe.Pointer +} + +func (self *_GoEface) kind() reflect.Kind { + if self.vt != nil { + return self.vt.kind() + } else { + return reflect.Invalid + } +} + +func (self *_GoEface) toInt64() int64 { + if self.vt.size == 8 { + return *(*int64)(self.ptr) + } else if self.vt.size == 4 { + return int64(*(*int32)(self.ptr)) + } else if self.vt.size == 2 { + return int64(*(*int16)(self.ptr)) + } else { + return int64(*(*int8)(self.ptr)) + } +} + +func efaceOf(v interface{}) _GoEface { + return *(*_GoEface)(unsafe.Pointer(&v)) +} diff --git a/vendor/github.com/chenzhuoyu/iasm/x86_64/encodings.go b/vendor/github.com/chenzhuoyu/iasm/x86_64/encodings.go new file mode 100644 index 0000000000..c8fac785da --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/x86_64/encodings.go @@ -0,0 +1,675 @@ +package x86_64 + +import ( + `encoding/binary` + `math` +) + +/** Operand Encoding Helpers **/ + +func imml(v interface{}) byte { + return byte(toImmAny(v) & 0x0f) +} + +func relv(v interface{}) int64 { + switch r := v.(type) { + case *Label : return 0 + case RelativeOffset : return int64(r) + default : panic("invalid relative offset") + } +} + +func addr(v interface{}) interface{} { + switch a := v.(*MemoryOperand).Addr; a.Type { + case Memory : return a.Memory + case Offset : return a.Offset + case Reference : return a.Reference + default : panic("invalid memory operand type") + } +} + +func bcode(v interface{}) byte { + if m, ok := v.(*MemoryOperand); !ok { + panic("v is not a memory operand") + } else if m.Broadcast == 0 { + return 0 + } else { + return 1 + } +} + +func vcode(v interface{}) byte { + switch r := v.(type) { + case XMMRegister : return byte(r) + case YMMRegister : return byte(r) + case ZMMRegister : return byte(r) + case MaskedRegister : return vcode(r.Reg) + default : panic("v is not a vector register") + } +} + +func kcode(v interface{}) byte { + switch r := v.(type) { + case KRegister : return byte(r) + case XMMRegister : return 0 + case YMMRegister : return 0 + case ZMMRegister : return 0 + case RegisterMask : return byte(r.K) + case MaskedRegister : return byte(r.Mask.K) + case *MemoryOperand : return toKcodeMem(r) + default : panic("v is not a maskable operand") + } +} + +func zcode(v interface{}) byte { + switch r := v.(type) { + case KRegister : return 0 + case XMMRegister : return 0 + case YMMRegister : return 0 + case ZMMRegister : return 0 + case RegisterMask : return toZcodeRegM(r) + case MaskedRegister : return toZcodeRegM(r.Mask) + case *MemoryOperand : return toZcodeMem(r) + default : panic("v is not a maskable operand") + } +} + +func lcode(v interface{}) byte { + switch r := v.(type) { + case Register8 : return byte(r & 0x07) + case Register16 : return byte(r & 0x07) + case Register32 : return byte(r & 0x07) + case Register64 : return byte(r & 0x07) + case KRegister : return byte(r & 0x07) + case MMRegister : return byte(r & 0x07) + case XMMRegister : return byte(r & 0x07) + case YMMRegister : return byte(r & 0x07) + case ZMMRegister : return byte(r & 0x07) + case MaskedRegister : return lcode(r.Reg) + default : panic("v is not a register") + } +} + +func hcode(v interface{}) byte { + switch r := v.(type) { + case Register8 : return byte(r >> 3) & 1 + case Register16 : return byte(r >> 3) & 1 + case Register32 : return byte(r >> 3) & 1 + case Register64 : return byte(r >> 3) & 1 + case KRegister : return byte(r >> 3) & 1 + case MMRegister : return byte(r >> 3) & 1 + case XMMRegister : return byte(r >> 3) & 1 + case YMMRegister : return byte(r >> 3) & 1 + case ZMMRegister : return byte(r >> 3) & 1 + case MaskedRegister : return hcode(r.Reg) + default : panic("v is not a register") + } +} + +func ecode(v interface{}) byte { + switch r := v.(type) { + case Register8 : return byte(r >> 4) & 1 + case Register16 : return byte(r >> 4) & 1 + case Register32 : return byte(r >> 4) & 1 + case Register64 : return byte(r >> 4) & 1 + case KRegister : return byte(r >> 4) & 1 + case MMRegister : return byte(r >> 4) & 1 + case XMMRegister : return byte(r >> 4) & 1 + case YMMRegister : return byte(r >> 4) & 1 + case ZMMRegister : return byte(r >> 4) & 1 + case MaskedRegister : return ecode(r.Reg) + default : panic("v is not a register") + } +} + +func hlcode(v interface{}) byte { + switch r := v.(type) { + case Register8 : return toHLcodeReg8(r) + case Register16 : return byte(r & 0x0f) + case Register32 : return byte(r & 0x0f) + case Register64 : return byte(r & 0x0f) + case KRegister : return byte(r & 0x0f) + case MMRegister : return byte(r & 0x0f) + case XMMRegister : return byte(r & 0x0f) + case YMMRegister : return byte(r & 0x0f) + case ZMMRegister : return byte(r & 0x0f) + case MaskedRegister : return hlcode(r.Reg) + default : panic("v is not a register") + } +} + +func ehcode(v interface{}) byte { + switch r := v.(type) { + case Register8 : return byte(r >> 3) & 0x03 + case Register16 : return byte(r >> 3) & 0x03 + case Register32 : return byte(r >> 3) & 0x03 + case Register64 : return byte(r >> 3) & 0x03 + case KRegister : return byte(r >> 3) & 0x03 + case MMRegister : return byte(r >> 3) & 0x03 + case XMMRegister : return byte(r >> 3) & 0x03 + case YMMRegister : return byte(r >> 3) & 0x03 + case ZMMRegister : return byte(r >> 3) & 0x03 + case MaskedRegister : return ehcode(r.Reg) + default : panic("v is not a register") + } +} + +func toImmAny(v interface{}) int64 { + if x, ok := asInt64(v); ok { + return x + } else { + panic("value is not an integer") + } +} + +func toHcodeOpt(v interface{}) byte { + if v == nil { + return 0 + } else { + return hcode(v) + } +} + +func toEcodeVMM(v interface{}, x byte) byte { + switch r := v.(type) { + case XMMRegister : return ecode(r) + case YMMRegister : return ecode(r) + case ZMMRegister : return ecode(r) + default : return x + } +} + +func toKcodeMem(v *MemoryOperand) byte { + if !v.Masked { + return 0 + } else { + return byte(v.Mask.K) + } +} + +func toZcodeMem(v *MemoryOperand) byte { + if !v.Masked || v.Mask.Z { + return 0 + } else { + return 1 + } +} + +func toZcodeRegM(v RegisterMask) byte { + if v.Z { + return 1 + } else { + return 0 + } +} + +func toHLcodeReg8(v Register8) byte { + switch v { + case AH: fallthrough + case BH: fallthrough + case CH: fallthrough + case DH: panic("ah/bh/ch/dh registers never use 4-bit encoding") + default: return byte(v & 0x0f) + } +} + +/** Instruction Encoding Helpers **/ + +const ( + _N_inst = 16 +) + +const ( + _F_rel1 = 1 << iota + _F_rel4 +) + +type _Encoding struct { + len int + flags int + bytes [_N_inst]byte + encoder func(m *_Encoding, v []interface{}) +} + +// buf ensures len + n <= len(bytes). +func (self *_Encoding) buf(n int) []byte { + if i := self.len; i + n > _N_inst { + panic("instruction too long") + } else { + return self.bytes[i:] + } +} + +// emit encodes a single byte. +func (self *_Encoding) emit(v byte) { + self.buf(1)[0] = v + self.len++ +} + +// imm1 encodes a single byte immediate value. +func (self *_Encoding) imm1(v int64) { + self.emit(byte(v)) +} + +// imm2 encodes a two-byte immediate value in little-endian. +func (self *_Encoding) imm2(v int64) { + binary.LittleEndian.PutUint16(self.buf(2), uint16(v)) + self.len += 2 +} + +// imm4 encodes a 4-byte immediate value in little-endian. +func (self *_Encoding) imm4(v int64) { + binary.LittleEndian.PutUint32(self.buf(4), uint32(v)) + self.len += 4 +} + +// imm8 encodes an 8-byte immediate value in little-endian. +func (self *_Encoding) imm8(v int64) { + binary.LittleEndian.PutUint64(self.buf(8), uint64(v)) + self.len += 8 +} + +// vex2 encodes a 2-byte or 3-byte VEX prefix. +// +// 2-byte VEX prefix: +// Requires: VEX.W = 0, VEX.mmmmm = 0b00001 and VEX.B = VEX.X = 0 +// +----------------+ +// Byte 0: | Bits 0-7: 0xc5 | +// +----------------+ +// +// +-----------+----------------+----------+--------------+ +// Byte 1: | Bit 7: ~R | Bits 3-6 ~vvvv | Bit 2: L | Bits 0-1: pp | +// +-----------+----------------+----------+--------------+ +// +// 3-byte VEX prefix: +// +----------------+ +// Byte 0: | Bits 0-7: 0xc4 | +// +----------------+ +// +// +-----------+-----------+-----------+-------------------+ +// Byte 1: | Bit 7: ~R | Bit 6: ~X | Bit 5: ~B | Bits 0-4: 0b00001 | +// +-----------+-----------+-----------+-------------------+ +// +// +----------+-----------------+----------+--------------+ +// Byte 2: | Bit 7: 0 | Bits 3-6: ~vvvv | Bit 2: L | Bits 0-1: pp | +// +----------+-----------------+----------+--------------+ +// +func (self *_Encoding) vex2(lpp byte, r byte, rm interface{}, vvvv byte) { + var b byte + var x byte + + /* VEX.R must be a single-bit mask */ + if r > 1 { + panic("VEX.R must be a 1-bit mask") + } + + /* VEX.Lpp must be a 3-bit mask */ + if lpp &^ 0b111 != 0 { + panic("VEX.Lpp must be a 3-bit mask") + } + + /* VEX.vvvv must be a 4-bit mask */ + if vvvv &^ 0b1111 != 0 { + panic("VEX.vvvv must be a 4-bit mask") + } + + /* encode the RM bits if any */ + if rm != nil { + switch v := rm.(type) { + case *Label : break + case Register : b = hcode(v) + case MemoryAddress : b, x = toHcodeOpt(v.Base), toHcodeOpt(v.Index) + case RelativeOffset : break + default : panic("rm is expected to be a register or a memory address") + } + } + + /* if VEX.B and VEX.X are zeroes, 2-byte VEX prefix can be used */ + if x == 0 && b == 0 { + self.emit(0xc5) + self.emit(0xf8 ^ (r << 7) ^ (vvvv << 3) ^ lpp) + } else { + self.emit(0xc4) + self.emit(0xe1 ^ (r << 7) ^ (x << 6) ^ (b << 5)) + self.emit(0x78 ^ (vvvv << 3) ^ lpp) + } +} + +// vex3 encodes a 3-byte VEX or XOP prefix. +// +// 3-byte VEX/XOP prefix +// +-----------------------------------+ +// Byte 0: | Bits 0-7: 0xc4 (VEX) / 0x8f (XOP) | +// +-----------------------------------+ +// +// +-----------+-----------+-----------+-----------------+ +// Byte 1: | Bit 7: ~R | Bit 6: ~X | Bit 5: ~B | Bits 0-4: mmmmm | +// +-----------+-----------+-----------+-----------------+ +// +// +----------+-----------------+----------+--------------+ +// Byte 2: | Bit 7: W | Bits 3-6: ~vvvv | Bit 2: L | Bits 0-1: pp | +// +----------+-----------------+----------+--------------+ +// +func (self *_Encoding) vex3(esc byte, mmmmm byte, wlpp byte, r byte, rm interface{}, vvvv byte) { + var b byte + var x byte + + /* VEX.R must be a single-bit mask */ + if r > 1 { + panic("VEX.R must be a 1-bit mask") + } + + /* VEX.vvvv must be a 4-bit mask */ + if vvvv &^ 0b1111 != 0 { + panic("VEX.vvvv must be a 4-bit mask") + } + + /* escape must be a 3-byte VEX (0xc4) or XOP (0x8f) prefix */ + if esc != 0xc4 && esc != 0x8f { + panic("escape must be a 3-byte VEX (0xc4) or XOP (0x8f) prefix") + } + + /* VEX.W____Lpp is expected to have no bits set except 0, 1, 2 and 7 */ + if wlpp &^ 0b10000111 != 0 { + panic("VEX.W____Lpp is expected to have no bits set except 0, 1, 2 and 7") + } + + /* VEX.m-mmmm is expected to be a 5-bit mask */ + if mmmmm &^ 0b11111 != 0 { + panic("VEX.m-mmmm is expected to be a 5-bit mask") + } + + /* encode the RM bits */ + switch v := rm.(type) { + case *Label : break + case MemoryAddress : b, x = toHcodeOpt(v.Base), toHcodeOpt(v.Index) + case RelativeOffset : break + default : panic("rm is expected to be a register or a memory address") + } + + /* encode the 3-byte VEX or XOP prefix */ + self.emit(esc) + self.emit(0xe0 ^ (r << 7) ^ (x << 6) ^ (b << 5) ^ mmmmm) + self.emit(0x78 ^ (vvvv << 3) ^ wlpp) +} + +// evex encodes a 4-byte EVEX prefix. +func (self *_Encoding) evex(mm byte, w1pp byte, ll byte, rr byte, rm interface{}, vvvvv byte, aaa byte, zz byte, bb byte) { + var b byte + var x byte + + /* EVEX.b must be a single-bit mask */ + if bb > 1 { + panic("EVEX.b must be a 1-bit mask") + } + + /* EVEX.z must be a single-bit mask */ + if zz > 1 { + panic("EVEX.z must be a 1-bit mask") + } + + /* EVEX.mm must be a 2-bit mask */ + if mm &^ 0b11 != 0 { + panic("EVEX.mm must be a 2-bit mask") + } + + /* EVEX.L'L must be a 2-bit mask */ + if ll &^ 0b11 != 0 { + panic("EVEX.L'L must be a 2-bit mask") + } + + /* EVEX.R'R must be a 2-bit mask */ + if rr &^ 0b11 != 0 { + panic("EVEX.R'R must be a 2-bit mask") + } + + /* EVEX.aaa must be a 3-bit mask */ + if aaa &^ 0b111 != 0 { + panic("EVEX.aaa must be a 3-bit mask") + } + + /* EVEX.v'vvvv must be a 5-bit mask */ + if vvvvv &^ 0b11111 != 0 { + panic("EVEX.v'vvvv must be a 5-bit mask") + } + + /* EVEX.W____1pp is expected to have no bits set except 0, 1, 2, and 7 */ + if w1pp &^ 0b10000011 != 0b100 { + panic("EVEX.W____1pp is expected to have no bits set except 0, 1, 2, and 7") + } + + /* extract bits from EVEX.R'R and EVEX.v'vvvv */ + r1, r0 := rr >> 1, rr & 1 + v1, v0 := vvvvv >> 4, vvvvv & 0b1111 + + /* encode the RM bits if any */ + if rm != nil { + switch m := rm.(type) { + case *Label : break + case Register : b, x = hcode(m), ecode(m) + case MemoryAddress : b, x, v1 = toHcodeOpt(m.Base), toHcodeOpt(m.Index), toEcodeVMM(m.Index, v1) + case RelativeOffset : break + default : panic("rm is expected to be a register or a memory address") + } + } + + /* EVEX prefix bytes */ + p0 := (r0 << 7) | (x << 6) | (b << 5) | (r1 << 4) | mm + p1 := (v0 << 3) | w1pp + p2 := (zz << 7) | (ll << 5) | (b << 4) | (v1 << 3) | aaa + + /* p0: invert RXBR' (bits 4-7) + * p1: invert vvvv (bits 3-6) + * p2: invert V' (bit 3) */ + self.emit(0x62) + self.emit(p0 ^ 0xf0) + self.emit(p1 ^ 0x78) + self.emit(p2 ^ 0x08) +} + +// rexm encodes a mandatory REX prefix. +func (self *_Encoding) rexm(w byte, r byte, rm interface{}) { + var b byte + var x byte + + /* REX.R must be 0 or 1 */ + if r != 0 && r != 1 { + panic("REX.R must be 0 or 1") + } + + /* REX.W must be 0 or 1 */ + if w != 0 && w != 1 { + panic("REX.W must be 0 or 1") + } + + /* encode the RM bits */ + switch v := rm.(type) { + case *Label : break + case MemoryAddress : b, x = toHcodeOpt(v.Base), toHcodeOpt(v.Index) + case RelativeOffset : break + default : panic("rm is expected to be a register or a memory address") + } + + /* encode the REX prefix */ + self.emit(0x40 | (w << 3) | (r << 2) | (x << 1) | b) +} + +// rexo encodes an optional REX prefix. +func (self *_Encoding) rexo(r byte, rm interface{}, force bool) { + var b byte + var x byte + + /* REX.R must be 0 or 1 */ + if r != 0 && r != 1 { + panic("REX.R must be 0 or 1") + } + + /* encode the RM bits */ + switch v := rm.(type) { + case *Label : break + case Register : b = hcode(v) + case MemoryAddress : b, x = toHcodeOpt(v.Base), toHcodeOpt(v.Index) + case RelativeOffset : break + default : panic("rm is expected to be a register or a memory address") + } + + /* if REX.R, REX.X, and REX.B are all zeroes, REX prefix can be omitted */ + if force || r != 0 || x != 0 || b != 0 { + self.emit(0x40 | (r << 2) | (x << 1) | b) + } +} + +// mrsd encodes ModR/M, SIB and Displacement. +// +// ModR/M byte +// +----------------+---------------+---------------+ +// | Bits 6-7: Mode | Bits 3-5: Reg | Bits 0-2: R/M | +// +----------------+---------------+---------------+ +// +// SIB byte +// +-----------------+-----------------+----------------+ +// | Bits 6-7: Scale | Bits 3-5: Index | Bits 0-2: Base | +// +-----------------+-----------------+----------------+ +// +func (self *_Encoding) mrsd(reg byte, rm interface{}, disp8v int32) { + var ok bool + var mm MemoryAddress + var ro RelativeOffset + + /* ModRM encodes the lower 3-bit of the register */ + if reg > 7 { + panic("invalid register bits") + } + + /* check the displacement scale */ + switch disp8v { + case 1: break + case 2: break + case 4: break + case 8: break + case 16: break + case 32: break + case 64: break + default: panic("invalid displacement size") + } + + /* special case: unresolved labels, assuming a zero offset */ + if _, ok = rm.(*Label); ok { + self.emit(0x05 | (reg << 3)) + self.imm4(0) + return + } + + /* special case: RIP-relative offset + * ModRM.Mode == 0 and ModeRM.R/M == 5 indicates (rip + disp32) addressing */ + if ro, ok = rm.(RelativeOffset); ok { + self.emit(0x05 | (reg << 3)) + self.imm4(int64(ro)) + return + } + + /* must be a generic memory address */ + if mm, ok = rm.(MemoryAddress); !ok { + panic("rm must be a memory address") + } + + /* absolute addressing, encoded as disp(%rbp,%rsp,1) */ + if mm.Base == nil && mm.Index == nil { + self.emit(0x04 | (reg << 3)) + self.emit(0x25) + self.imm4(int64(mm.Displacement)) + return + } + + /* no SIB byte */ + if mm.Index == nil && lcode(mm.Base) != 0b100 { + cc := lcode(mm.Base) + dv := mm.Displacement + + /* ModRM.Mode == 0 (no displacement) */ + if dv == 0 && mm.Base != RBP && mm.Base != R13 { + if cc == 0b101 { + panic("rbp/r13 is not encodable as a base register (interpreted as disp32 address)") + } else { + self.emit((reg << 3) | cc) + return + } + } + + /* ModRM.Mode == 1 (8-bit displacement) */ + if dq := dv / disp8v; dq >= math.MinInt8 && dq <= math.MaxInt8 && dv % disp8v == 0 { + self.emit(0x40 | (reg << 3) | cc) + self.imm1(int64(dq)) + return + } + + /* ModRM.Mode == 2 (32-bit displacement) */ + self.emit(0x80 | (reg << 3) | cc) + self.imm4(int64(mm.Displacement)) + return + } + + /* all encodings below use ModRM.R/M = 4 (0b100) to indicate the presence of SIB */ + if mm.Index == RSP { + panic("rsp is not encodable as an index register (interpreted as no index)") + } + + /* index = 4 (0b100) denotes no-index encoding */ + var scale byte + var index byte = 0x04 + + /* encode the scale byte */ + if mm.Scale != 0 { + switch mm.Scale { + case 1 : scale = 0 + case 2 : scale = 1 + case 4 : scale = 2 + case 8 : scale = 3 + default : panic("invalid scale value") + } + } + + /* encode the index byte */ + if mm.Index != nil { + index = lcode(mm.Index) + } + + /* SIB.Base = 5 (0b101) and ModRM.Mode = 0 indicates no-base encoding with disp32 */ + if mm.Base == nil { + self.emit((reg << 3) | 0b100) + self.emit((scale << 6) | (index << 3) | 0b101) + self.imm4(int64(mm.Displacement)) + return + } + + /* base L-code & displacement value */ + cc := lcode(mm.Base) + dv := mm.Displacement + + /* ModRM.Mode == 0 (no displacement) */ + if dv == 0 && cc != 0b101 { + self.emit((reg << 3) | 0b100) + self.emit((scale << 6) | (index << 3) | cc) + return + } + + /* ModRM.Mode == 1 (8-bit displacement) */ + if dq := dv / disp8v; dq >= math.MinInt8 && dq <= math.MaxInt8 && dv % disp8v == 0 { + self.emit(0x44 | (reg << 3)) + self.emit((scale << 6) | (index << 3) | cc) + self.imm1(int64(dq)) + return + } + + /* ModRM.Mode == 2 (32-bit displacement) */ + self.emit(0x84 | (reg << 3)) + self.emit((scale << 6) | (index << 3) | cc) + self.imm4(int64(mm.Displacement)) +} + +// encode invokes the encoder to encode this instruction. +func (self *_Encoding) encode(v []interface{}) int { + self.len = 0 + self.encoder(self, v) + return self.len +} diff --git a/vendor/github.com/chenzhuoyu/iasm/x86_64/instructions.go b/vendor/github.com/chenzhuoyu/iasm/x86_64/instructions.go new file mode 100644 index 0000000000..fc73a6f8bb --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/x86_64/instructions.go @@ -0,0 +1,97194 @@ +// Code generated by "mkasm_amd64.py", DO NOT EDIT. + +package x86_64 + +// ADCB performs "Add with Carry". +// +// Mnemonic : ADC +// Supported forms : (6 forms) +// +// * ADCB imm8, al +// * ADCB imm8, r8 +// * ADCB r8, r8 +// * ADCB m8, r8 +// * ADCB imm8, m8 +// * ADCB r8, m8 +// +func (self *Program) ADCB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADCB", 2, Operands { v0, v1 }) + // ADCB imm8, al + if isImm8(v0) && v1 == AL { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x14) + m.imm1(toImmAny(v[0])) + }) + } + // ADCB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0x80) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ADCB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x10) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADCB m8, r8 + if isM8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), isReg8REX(v[1])) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ADCB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x80) + m.mrsd(2, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ADCB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x10) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADCB") + } + return p +} + +// ADCL performs "Add with Carry". +// +// Mnemonic : ADC +// Supported forms : (8 forms) +// +// * ADCL imm32, eax +// * ADCL imm8, r32 +// * ADCL imm32, r32 +// * ADCL r32, r32 +// * ADCL m32, r32 +// * ADCL imm8, m32 +// * ADCL imm32, m32 +// * ADCL r32, m32 +// +func (self *Program) ADCL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADCL", 2, Operands { v0, v1 }) + // ADCL imm32, eax + if isImm32(v0) && v1 == EAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x15) + m.imm4(toImmAny(v[0])) + }) + } + // ADCL imm8, r32 + if isImm8Ext(v0, 4) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ADCL imm32, r32 + if isImm32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xd0 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // ADCL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x13) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADCL m32, r32 + if isM32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x13) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ADCL imm8, m32 + if isImm8Ext(v0, 4) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(2, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ADCL imm32, m32 + if isImm32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(2, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // ADCL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADCL") + } + return p +} + +// ADCQ performs "Add with Carry". +// +// Mnemonic : ADC +// Supported forms : (8 forms) +// +// * ADCQ imm32, rax +// * ADCQ imm8, r64 +// * ADCQ imm32, r64 +// * ADCQ r64, r64 +// * ADCQ m64, r64 +// * ADCQ imm8, m64 +// * ADCQ imm32, m64 +// * ADCQ r64, m64 +// +func (self *Program) ADCQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADCQ", 2, Operands { v0, v1 }) + // ADCQ imm32, rax + if isImm32(v0) && v1 == RAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48) + m.emit(0x15) + m.imm4(toImmAny(v[0])) + }) + } + // ADCQ imm8, r64 + if isImm8Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x83) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ADCQ imm32, r64 + if isImm32Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x81) + m.emit(0xd0 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // ADCQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x13) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADCQ m64, r64 + if isM64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x13) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ADCQ imm8, m64 + if isImm8Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x83) + m.mrsd(2, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ADCQ imm32, m64 + if isImm32Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x81) + m.mrsd(2, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // ADCQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADCQ") + } + return p +} + +// ADCW performs "Add with Carry". +// +// Mnemonic : ADC +// Supported forms : (8 forms) +// +// * ADCW imm16, ax +// * ADCW imm8, r16 +// * ADCW imm16, r16 +// * ADCW r16, r16 +// * ADCW m16, r16 +// * ADCW imm8, m16 +// * ADCW imm16, m16 +// * ADCW r16, m16 +// +func (self *Program) ADCW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADCW", 2, Operands { v0, v1 }) + // ADCW imm16, ax + if isImm16(v0) && v1 == AX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x15) + m.imm2(toImmAny(v[0])) + }) + } + // ADCW imm8, r16 + if isImm8Ext(v0, 2) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ADCW imm16, r16 + if isImm16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xd0 | lcode(v[1])) + m.imm2(toImmAny(v[0])) + }) + } + // ADCW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x13) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADCW m16, r16 + if isM16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x13) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ADCW imm8, m16 + if isImm8Ext(v0, 2) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(2, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ADCW imm16, m16 + if isImm16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(2, addr(v[1]), 1) + m.imm2(toImmAny(v[0])) + }) + } + // ADCW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADCW") + } + return p +} + +// ADCXL performs "Unsigned Integer Addition of Two Operands with Carry Flag". +// +// Mnemonic : ADCX +// Supported forms : (2 forms) +// +// * ADCXL r32, r32 [ADX] +// * ADCXL m32, r32 [ADX] +// +func (self *Program) ADCXL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADCXL", 2, Operands { v0, v1 }) + // ADCXL r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_ADX) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADCXL m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_ADX) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADCXL") + } + return p +} + +// ADCXQ performs "Unsigned Integer Addition of Two Operands with Carry Flag". +// +// Mnemonic : ADCX +// Supported forms : (2 forms) +// +// * ADCXQ r64, r64 [ADX] +// * ADCXQ m64, r64 [ADX] +// +func (self *Program) ADCXQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADCXQ", 2, Operands { v0, v1 }) + // ADCXQ r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_ADX) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADCXQ m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_ADX) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADCXQ") + } + return p +} + +// ADDB performs "Add". +// +// Mnemonic : ADD +// Supported forms : (6 forms) +// +// * ADDB imm8, al +// * ADDB imm8, r8 +// * ADDB r8, r8 +// * ADDB m8, r8 +// * ADDB imm8, m8 +// * ADDB r8, m8 +// +func (self *Program) ADDB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADDB", 2, Operands { v0, v1 }) + // ADDB imm8, al + if isImm8(v0) && v1 == AL { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x04) + m.imm1(toImmAny(v[0])) + }) + } + // ADDB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0x80) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ADDB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x00) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x02) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADDB m8, r8 + if isM8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), isReg8REX(v[1])) + m.emit(0x02) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ADDB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x80) + m.mrsd(0, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ADDB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x00) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADDB") + } + return p +} + +// ADDL performs "Add". +// +// Mnemonic : ADD +// Supported forms : (8 forms) +// +// * ADDL imm32, eax +// * ADDL imm8, r32 +// * ADDL imm32, r32 +// * ADDL r32, r32 +// * ADDL m32, r32 +// * ADDL imm8, m32 +// * ADDL imm32, m32 +// * ADDL r32, m32 +// +func (self *Program) ADDL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADDL", 2, Operands { v0, v1 }) + // ADDL imm32, eax + if isImm32(v0) && v1 == EAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x05) + m.imm4(toImmAny(v[0])) + }) + } + // ADDL imm8, r32 + if isImm8Ext(v0, 4) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ADDL imm32, r32 + if isImm32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xc0 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // ADDL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x01) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x03) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADDL m32, r32 + if isM32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x03) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ADDL imm8, m32 + if isImm8Ext(v0, 4) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(0, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ADDL imm32, m32 + if isImm32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(0, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // ADDL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x01) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADDL") + } + return p +} + +// ADDPD performs "Add Packed Double-Precision Floating-Point Values". +// +// Mnemonic : ADDPD +// Supported forms : (2 forms) +// +// * ADDPD xmm, xmm [SSE2] +// * ADDPD m128, xmm [SSE2] +// +func (self *Program) ADDPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADDPD", 2, Operands { v0, v1 }) + // ADDPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x58) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADDPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x58) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADDPD") + } + return p +} + +// ADDPS performs "Add Packed Single-Precision Floating-Point Values". +// +// Mnemonic : ADDPS +// Supported forms : (2 forms) +// +// * ADDPS xmm, xmm [SSE] +// * ADDPS m128, xmm [SSE] +// +func (self *Program) ADDPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADDPS", 2, Operands { v0, v1 }) + // ADDPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x58) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADDPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x58) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADDPS") + } + return p +} + +// ADDQ performs "Add". +// +// Mnemonic : ADD +// Supported forms : (8 forms) +// +// * ADDQ imm32, rax +// * ADDQ imm8, r64 +// * ADDQ imm32, r64 +// * ADDQ r64, r64 +// * ADDQ m64, r64 +// * ADDQ imm8, m64 +// * ADDQ imm32, m64 +// * ADDQ r64, m64 +// +func (self *Program) ADDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADDQ", 2, Operands { v0, v1 }) + // ADDQ imm32, rax + if isImm32(v0) && v1 == RAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48) + m.emit(0x05) + m.imm4(toImmAny(v[0])) + }) + } + // ADDQ imm8, r64 + if isImm8Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x83) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ADDQ imm32, r64 + if isImm32Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x81) + m.emit(0xc0 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // ADDQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x01) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x03) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADDQ m64, r64 + if isM64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x03) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ADDQ imm8, m64 + if isImm8Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x83) + m.mrsd(0, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ADDQ imm32, m64 + if isImm32Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x81) + m.mrsd(0, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // ADDQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x01) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADDQ") + } + return p +} + +// ADDSD performs "Add Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : ADDSD +// Supported forms : (2 forms) +// +// * ADDSD xmm, xmm [SSE2] +// * ADDSD m64, xmm [SSE2] +// +func (self *Program) ADDSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADDSD", 2, Operands { v0, v1 }) + // ADDSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x58) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADDSD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x58) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADDSD") + } + return p +} + +// ADDSS performs "Add Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : ADDSS +// Supported forms : (2 forms) +// +// * ADDSS xmm, xmm [SSE] +// * ADDSS m32, xmm [SSE] +// +func (self *Program) ADDSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADDSS", 2, Operands { v0, v1 }) + // ADDSS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x58) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADDSS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x58) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADDSS") + } + return p +} + +// ADDSUBPD performs "Packed Double-FP Add/Subtract". +// +// Mnemonic : ADDSUBPD +// Supported forms : (2 forms) +// +// * ADDSUBPD xmm, xmm [SSE3] +// * ADDSUBPD m128, xmm [SSE3] +// +func (self *Program) ADDSUBPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADDSUBPD", 2, Operands { v0, v1 }) + // ADDSUBPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd0) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADDSUBPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd0) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADDSUBPD") + } + return p +} + +// ADDSUBPS performs "Packed Single-FP Add/Subtract". +// +// Mnemonic : ADDSUBPS +// Supported forms : (2 forms) +// +// * ADDSUBPS xmm, xmm [SSE3] +// * ADDSUBPS m128, xmm [SSE3] +// +func (self *Program) ADDSUBPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADDSUBPS", 2, Operands { v0, v1 }) + // ADDSUBPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd0) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADDSUBPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd0) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADDSUBPS") + } + return p +} + +// ADDW performs "Add". +// +// Mnemonic : ADD +// Supported forms : (8 forms) +// +// * ADDW imm16, ax +// * ADDW imm8, r16 +// * ADDW imm16, r16 +// * ADDW r16, r16 +// * ADDW m16, r16 +// * ADDW imm8, m16 +// * ADDW imm16, m16 +// * ADDW r16, m16 +// +func (self *Program) ADDW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADDW", 2, Operands { v0, v1 }) + // ADDW imm16, ax + if isImm16(v0) && v1 == AX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x05) + m.imm2(toImmAny(v[0])) + }) + } + // ADDW imm8, r16 + if isImm8Ext(v0, 2) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ADDW imm16, r16 + if isImm16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xc0 | lcode(v[1])) + m.imm2(toImmAny(v[0])) + }) + } + // ADDW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x01) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x03) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADDW m16, r16 + if isM16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x03) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ADDW imm8, m16 + if isImm8Ext(v0, 2) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(0, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ADDW imm16, m16 + if isImm16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(0, addr(v[1]), 1) + m.imm2(toImmAny(v[0])) + }) + } + // ADDW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x01) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADDW") + } + return p +} + +// ADOXL performs "Unsigned Integer Addition of Two Operands with Overflow Flag". +// +// Mnemonic : ADOX +// Supported forms : (2 forms) +// +// * ADOXL r32, r32 [ADX] +// * ADOXL m32, r32 [ADX] +// +func (self *Program) ADOXL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADOXL", 2, Operands { v0, v1 }) + // ADOXL r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_ADX) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADOXL m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_ADX) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADOXL") + } + return p +} + +// ADOXQ performs "Unsigned Integer Addition of Two Operands with Overflow Flag". +// +// Mnemonic : ADOX +// Supported forms : (2 forms) +// +// * ADOXQ r64, r64 [ADX] +// * ADOXQ m64, r64 [ADX] +// +func (self *Program) ADOXQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ADOXQ", 2, Operands { v0, v1 }) + // ADOXQ r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_ADX) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ADOXQ m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_ADX) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ADOXQ") + } + return p +} + +// AESDEC performs "Perform One Round of an AES Decryption Flow". +// +// Mnemonic : AESDEC +// Supported forms : (2 forms) +// +// * AESDEC xmm, xmm [AES] +// * AESDEC m128, xmm [AES] +// +func (self *Program) AESDEC(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("AESDEC", 2, Operands { v0, v1 }) + // AESDEC xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xde) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // AESDEC m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xde) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for AESDEC") + } + return p +} + +// AESDECLAST performs "Perform Last Round of an AES Decryption Flow". +// +// Mnemonic : AESDECLAST +// Supported forms : (2 forms) +// +// * AESDECLAST xmm, xmm [AES] +// * AESDECLAST m128, xmm [AES] +// +func (self *Program) AESDECLAST(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("AESDECLAST", 2, Operands { v0, v1 }) + // AESDECLAST xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // AESDECLAST m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xdf) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for AESDECLAST") + } + return p +} + +// AESENC performs "Perform One Round of an AES Encryption Flow". +// +// Mnemonic : AESENC +// Supported forms : (2 forms) +// +// * AESENC xmm, xmm [AES] +// * AESENC m128, xmm [AES] +// +func (self *Program) AESENC(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("AESENC", 2, Operands { v0, v1 }) + // AESENC xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xdc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // AESENC m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xdc) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for AESENC") + } + return p +} + +// AESENCLAST performs "Perform Last Round of an AES Encryption Flow". +// +// Mnemonic : AESENCLAST +// Supported forms : (2 forms) +// +// * AESENCLAST xmm, xmm [AES] +// * AESENCLAST m128, xmm [AES] +// +func (self *Program) AESENCLAST(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("AESENCLAST", 2, Operands { v0, v1 }) + // AESENCLAST xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xdd) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // AESENCLAST m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xdd) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for AESENCLAST") + } + return p +} + +// AESIMC performs "Perform the AES InvMixColumn Transformation". +// +// Mnemonic : AESIMC +// Supported forms : (2 forms) +// +// * AESIMC xmm, xmm [AES] +// * AESIMC m128, xmm [AES] +// +func (self *Program) AESIMC(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("AESIMC", 2, Operands { v0, v1 }) + // AESIMC xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // AESIMC m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xdb) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for AESIMC") + } + return p +} + +// AESKEYGENASSIST performs "AES Round Key Generation Assist". +// +// Mnemonic : AESKEYGENASSIST +// Supported forms : (2 forms) +// +// * AESKEYGENASSIST imm8, xmm, xmm [AES] +// * AESKEYGENASSIST imm8, m128, xmm [AES] +// +func (self *Program) AESKEYGENASSIST(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("AESKEYGENASSIST", 3, Operands { v0, v1, v2 }) + // AESKEYGENASSIST imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // AESKEYGENASSIST imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0xdf) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for AESKEYGENASSIST") + } + return p +} + +// ANDB performs "Logical AND". +// +// Mnemonic : AND +// Supported forms : (6 forms) +// +// * ANDB imm8, al +// * ANDB imm8, r8 +// * ANDB r8, r8 +// * ANDB m8, r8 +// * ANDB imm8, m8 +// * ANDB r8, m8 +// +func (self *Program) ANDB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ANDB", 2, Operands { v0, v1 }) + // ANDB imm8, al + if isImm8(v0) && v1 == AL { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x24) + m.imm1(toImmAny(v[0])) + }) + } + // ANDB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0x80) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ANDB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x20) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x22) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ANDB m8, r8 + if isM8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), isReg8REX(v[1])) + m.emit(0x22) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ANDB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x80) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ANDB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x20) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ANDB") + } + return p +} + +// ANDL performs "Logical AND". +// +// Mnemonic : AND +// Supported forms : (8 forms) +// +// * ANDL imm32, eax +// * ANDL imm8, r32 +// * ANDL imm32, r32 +// * ANDL r32, r32 +// * ANDL m32, r32 +// * ANDL imm8, m32 +// * ANDL imm32, m32 +// * ANDL r32, m32 +// +func (self *Program) ANDL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ANDL", 2, Operands { v0, v1 }) + // ANDL imm32, eax + if isImm32(v0) && v1 == EAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x25) + m.imm4(toImmAny(v[0])) + }) + } + // ANDL imm8, r32 + if isImm8Ext(v0, 4) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ANDL imm32, r32 + if isImm32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xe0 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // ANDL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x21) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x23) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ANDL m32, r32 + if isM32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x23) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ANDL imm8, m32 + if isImm8Ext(v0, 4) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ANDL imm32, m32 + if isImm32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(4, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // ANDL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x21) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ANDL") + } + return p +} + +// ANDNL performs "Logical AND NOT". +// +// Mnemonic : ANDN +// Supported forms : (2 forms) +// +// * ANDNL r32, r32, r32 [BMI] +// * ANDNL m32, r32, r32 [BMI] +// +func (self *Program) ANDNL(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("ANDNL", 3, Operands { v0, v1, v2 }) + // ANDNL r32, r32, r32 + if isReg32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0xf2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // ANDNL m32, r32, r32 + if isM32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x00, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf2) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ANDNL") + } + return p +} + +// ANDNPD performs "Bitwise Logical AND NOT of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : ANDNPD +// Supported forms : (2 forms) +// +// * ANDNPD xmm, xmm [SSE2] +// * ANDNPD m128, xmm [SSE2] +// +func (self *Program) ANDNPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ANDNPD", 2, Operands { v0, v1 }) + // ANDNPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x55) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ANDNPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x55) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ANDNPD") + } + return p +} + +// ANDNPS performs "Bitwise Logical AND NOT of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : ANDNPS +// Supported forms : (2 forms) +// +// * ANDNPS xmm, xmm [SSE] +// * ANDNPS m128, xmm [SSE] +// +func (self *Program) ANDNPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ANDNPS", 2, Operands { v0, v1 }) + // ANDNPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x55) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ANDNPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x55) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ANDNPS") + } + return p +} + +// ANDNQ performs "Logical AND NOT". +// +// Mnemonic : ANDN +// Supported forms : (2 forms) +// +// * ANDNQ r64, r64, r64 [BMI] +// * ANDNQ m64, r64, r64 [BMI] +// +func (self *Program) ANDNQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("ANDNQ", 3, Operands { v0, v1, v2 }) + // ANDNQ r64, r64, r64 + if isReg64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0xf2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // ANDNQ m64, r64, r64 + if isM64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf2) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ANDNQ") + } + return p +} + +// ANDPD performs "Bitwise Logical AND of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : ANDPD +// Supported forms : (2 forms) +// +// * ANDPD xmm, xmm [SSE2] +// * ANDPD m128, xmm [SSE2] +// +func (self *Program) ANDPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ANDPD", 2, Operands { v0, v1 }) + // ANDPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x54) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ANDPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x54) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ANDPD") + } + return p +} + +// ANDPS performs "Bitwise Logical AND of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : ANDPS +// Supported forms : (2 forms) +// +// * ANDPS xmm, xmm [SSE] +// * ANDPS m128, xmm [SSE] +// +func (self *Program) ANDPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ANDPS", 2, Operands { v0, v1 }) + // ANDPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x54) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ANDPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x54) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ANDPS") + } + return p +} + +// ANDQ performs "Logical AND". +// +// Mnemonic : AND +// Supported forms : (8 forms) +// +// * ANDQ imm32, rax +// * ANDQ imm8, r64 +// * ANDQ imm32, r64 +// * ANDQ r64, r64 +// * ANDQ m64, r64 +// * ANDQ imm8, m64 +// * ANDQ imm32, m64 +// * ANDQ r64, m64 +// +func (self *Program) ANDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ANDQ", 2, Operands { v0, v1 }) + // ANDQ imm32, rax + if isImm32(v0) && v1 == RAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48) + m.emit(0x25) + m.imm4(toImmAny(v[0])) + }) + } + // ANDQ imm8, r64 + if isImm8Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x83) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ANDQ imm32, r64 + if isImm32Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x81) + m.emit(0xe0 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // ANDQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x21) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x23) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ANDQ m64, r64 + if isM64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x23) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ANDQ imm8, m64 + if isImm8Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x83) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ANDQ imm32, m64 + if isImm32Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x81) + m.mrsd(4, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // ANDQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x21) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ANDQ") + } + return p +} + +// ANDW performs "Logical AND". +// +// Mnemonic : AND +// Supported forms : (8 forms) +// +// * ANDW imm16, ax +// * ANDW imm8, r16 +// * ANDW imm16, r16 +// * ANDW r16, r16 +// * ANDW m16, r16 +// * ANDW imm8, m16 +// * ANDW imm16, m16 +// * ANDW r16, m16 +// +func (self *Program) ANDW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ANDW", 2, Operands { v0, v1 }) + // ANDW imm16, ax + if isImm16(v0) && v1 == AX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x25) + m.imm2(toImmAny(v[0])) + }) + } + // ANDW imm8, r16 + if isImm8Ext(v0, 2) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ANDW imm16, r16 + if isImm16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xe0 | lcode(v[1])) + m.imm2(toImmAny(v[0])) + }) + } + // ANDW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x21) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x23) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ANDW m16, r16 + if isM16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x23) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ANDW imm8, m16 + if isImm8Ext(v0, 2) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ANDW imm16, m16 + if isImm16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(4, addr(v[1]), 1) + m.imm2(toImmAny(v[0])) + }) + } + // ANDW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x21) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ANDW") + } + return p +} + +// BEXTR performs "Bit Field Extract". +// +// Mnemonic : BEXTR +// Supported forms : (8 forms) +// +// * BEXTR imm32, r32, r32 [TBM] +// * BEXTR imm32, m32, r32 [TBM] +// * BEXTR imm32, r64, r64 [TBM] +// * BEXTR imm32, m64, r64 [TBM] +// * BEXTR r32, r32, r32 [BMI] +// * BEXTR r32, m32, r32 [BMI] +// * BEXTR r64, r64, r64 [BMI] +// * BEXTR r64, m64, r64 [BMI] +// +func (self *Program) BEXTR(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("BEXTR", 3, Operands { v0, v1, v2 }) + // BEXTR imm32, r32, r32 + if isImm32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xea ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78) + m.emit(0x10) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // BEXTR imm32, m32, r32 + if isImm32(v0) && isM32(v1) && isReg32(v2) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1010, 0x00, hcode(v[2]), addr(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // BEXTR imm32, r64, r64 + if isImm32(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xea ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xf8) + m.emit(0x10) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // BEXTR imm32, m64, r64 + if isImm32(v0) && isM64(v1) && isReg64(v2) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1010, 0x80, hcode(v[2]), addr(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // BEXTR r32, r32, r32 + if isReg32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // BEXTR r32, m32, r32 + if isReg32(v0) && isM32(v1) && isReg32(v2) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0xf7) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // BEXTR r64, r64, r64 + if isReg64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xf8 ^ (hlcode(v[0]) << 3)) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // BEXTR r64, m64, r64 + if isReg64(v0) && isM64(v1) && isReg64(v2) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x80, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0xf7) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BEXTR") + } + return p +} + +// BLCFILL performs "Fill From Lowest Clear Bit". +// +// Mnemonic : BLCFILL +// Supported forms : (4 forms) +// +// * BLCFILL r32, r32 [TBM] +// * BLCFILL m32, r32 [TBM] +// * BLCFILL r64, r64 [TBM] +// * BLCFILL m64, r64 [TBM] +// +func (self *Program) BLCFILL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BLCFILL", 2, Operands { v0, v1 }) + // BLCFILL r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xc8 | lcode(v[0])) + }) + } + // BLCFILL m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(1, addr(v[0]), 1) + }) + } + // BLCFILL r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xc8 | lcode(v[0])) + }) + } + // BLCFILL m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(1, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BLCFILL") + } + return p +} + +// BLCI performs "Isolate Lowest Clear Bit". +// +// Mnemonic : BLCI +// Supported forms : (4 forms) +// +// * BLCI r32, r32 [TBM] +// * BLCI m32, r32 [TBM] +// * BLCI r64, r64 [TBM] +// * BLCI m64, r64 [TBM] +// +func (self *Program) BLCI(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BLCI", 2, Operands { v0, v1 }) + // BLCI r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0x02) + m.emit(0xf0 | lcode(v[0])) + }) + } + // BLCI m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x02) + m.mrsd(6, addr(v[0]), 1) + }) + } + // BLCI r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x02) + m.emit(0xf0 | lcode(v[0])) + }) + } + // BLCI m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x02) + m.mrsd(6, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BLCI") + } + return p +} + +// BLCIC performs "Isolate Lowest Set Bit and Complement". +// +// Mnemonic : BLCIC +// Supported forms : (4 forms) +// +// * BLCIC r32, r32 [TBM] +// * BLCIC m32, r32 [TBM] +// * BLCIC r64, r64 [TBM] +// * BLCIC m64, r64 [TBM] +// +func (self *Program) BLCIC(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BLCIC", 2, Operands { v0, v1 }) + // BLCIC r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xe8 | lcode(v[0])) + }) + } + // BLCIC m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(5, addr(v[0]), 1) + }) + } + // BLCIC r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xe8 | lcode(v[0])) + }) + } + // BLCIC m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(5, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BLCIC") + } + return p +} + +// BLCMSK performs "Mask From Lowest Clear Bit". +// +// Mnemonic : BLCMSK +// Supported forms : (4 forms) +// +// * BLCMSK r32, r32 [TBM] +// * BLCMSK m32, r32 [TBM] +// * BLCMSK r64, r64 [TBM] +// * BLCMSK m64, r64 [TBM] +// +func (self *Program) BLCMSK(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BLCMSK", 2, Operands { v0, v1 }) + // BLCMSK r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0x02) + m.emit(0xc8 | lcode(v[0])) + }) + } + // BLCMSK m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x02) + m.mrsd(1, addr(v[0]), 1) + }) + } + // BLCMSK r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x02) + m.emit(0xc8 | lcode(v[0])) + }) + } + // BLCMSK m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x02) + m.mrsd(1, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BLCMSK") + } + return p +} + +// BLCS performs "Set Lowest Clear Bit". +// +// Mnemonic : BLCS +// Supported forms : (4 forms) +// +// * BLCS r32, r32 [TBM] +// * BLCS m32, r32 [TBM] +// * BLCS r64, r64 [TBM] +// * BLCS m64, r64 [TBM] +// +func (self *Program) BLCS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BLCS", 2, Operands { v0, v1 }) + // BLCS r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xd8 | lcode(v[0])) + }) + } + // BLCS m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(3, addr(v[0]), 1) + }) + } + // BLCS r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xd8 | lcode(v[0])) + }) + } + // BLCS m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(3, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BLCS") + } + return p +} + +// BLENDPD performs "Blend Packed Double Precision Floating-Point Values". +// +// Mnemonic : BLENDPD +// Supported forms : (2 forms) +// +// * BLENDPD imm8, xmm, xmm [SSE4.1] +// * BLENDPD imm8, m128, xmm [SSE4.1] +// +func (self *Program) BLENDPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("BLENDPD", 3, Operands { v0, v1, v2 }) + // BLENDPD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BLENDPD imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0d) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for BLENDPD") + } + return p +} + +// BLENDPS performs " Blend Packed Single Precision Floating-Point Values". +// +// Mnemonic : BLENDPS +// Supported forms : (2 forms) +// +// * BLENDPS imm8, xmm, xmm [SSE4.1] +// * BLENDPS imm8, m128, xmm [SSE4.1] +// +func (self *Program) BLENDPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("BLENDPS", 3, Operands { v0, v1, v2 }) + // BLENDPS imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BLENDPS imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0c) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for BLENDPS") + } + return p +} + +// BLENDVPD performs " Variable Blend Packed Double Precision Floating-Point Values". +// +// Mnemonic : BLENDVPD +// Supported forms : (2 forms) +// +// * BLENDVPD xmm0, xmm, xmm [SSE4.1] +// * BLENDVPD xmm0, m128, xmm [SSE4.1] +// +func (self *Program) BLENDVPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("BLENDVPD", 3, Operands { v0, v1, v2 }) + // BLENDVPD xmm0, xmm, xmm + if v0 == XMM0 && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // BLENDVPD xmm0, m128, xmm + if v0 == XMM0 && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BLENDVPD") + } + return p +} + +// BLENDVPS performs " Variable Blend Packed Single Precision Floating-Point Values". +// +// Mnemonic : BLENDVPS +// Supported forms : (2 forms) +// +// * BLENDVPS xmm0, xmm, xmm [SSE4.1] +// * BLENDVPS xmm0, m128, xmm [SSE4.1] +// +func (self *Program) BLENDVPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("BLENDVPS", 3, Operands { v0, v1, v2 }) + // BLENDVPS xmm0, xmm, xmm + if v0 == XMM0 && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // BLENDVPS xmm0, m128, xmm + if v0 == XMM0 && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BLENDVPS") + } + return p +} + +// BLSFILL performs "Fill From Lowest Set Bit". +// +// Mnemonic : BLSFILL +// Supported forms : (4 forms) +// +// * BLSFILL r32, r32 [TBM] +// * BLSFILL m32, r32 [TBM] +// * BLSFILL r64, r64 [TBM] +// * BLSFILL m64, r64 [TBM] +// +func (self *Program) BLSFILL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BLSFILL", 2, Operands { v0, v1 }) + // BLSFILL r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xd0 | lcode(v[0])) + }) + } + // BLSFILL m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(2, addr(v[0]), 1) + }) + } + // BLSFILL r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xd0 | lcode(v[0])) + }) + } + // BLSFILL m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(2, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BLSFILL") + } + return p +} + +// BLSI performs "Isolate Lowest Set Bit". +// +// Mnemonic : BLSI +// Supported forms : (4 forms) +// +// * BLSI r32, r32 [BMI] +// * BLSI m32, r32 [BMI] +// * BLSI r64, r64 [BMI] +// * BLSI m64, r64 [BMI] +// +func (self *Program) BLSI(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BLSI", 2, Operands { v0, v1 }) + // BLSI r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0xf3) + m.emit(0xd8 | lcode(v[0])) + }) + } + // BLSI m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x00, 0, addr(v[0]), hlcode(v[1])) + m.emit(0xf3) + m.mrsd(3, addr(v[0]), 1) + }) + } + // BLSI r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0xf3) + m.emit(0xd8 | lcode(v[0])) + }) + } + // BLSI m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x80, 0, addr(v[0]), hlcode(v[1])) + m.emit(0xf3) + m.mrsd(3, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BLSI") + } + return p +} + +// BLSIC performs "Isolate Lowest Set Bit and Complement". +// +// Mnemonic : BLSIC +// Supported forms : (4 forms) +// +// * BLSIC r32, r32 [TBM] +// * BLSIC m32, r32 [TBM] +// * BLSIC r64, r64 [TBM] +// * BLSIC m64, r64 [TBM] +// +func (self *Program) BLSIC(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BLSIC", 2, Operands { v0, v1 }) + // BLSIC r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xf0 | lcode(v[0])) + }) + } + // BLSIC m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(6, addr(v[0]), 1) + }) + } + // BLSIC r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xf0 | lcode(v[0])) + }) + } + // BLSIC m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(6, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BLSIC") + } + return p +} + +// BLSMSK performs "Mask From Lowest Set Bit". +// +// Mnemonic : BLSMSK +// Supported forms : (4 forms) +// +// * BLSMSK r32, r32 [BMI] +// * BLSMSK m32, r32 [BMI] +// * BLSMSK r64, r64 [BMI] +// * BLSMSK m64, r64 [BMI] +// +func (self *Program) BLSMSK(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BLSMSK", 2, Operands { v0, v1 }) + // BLSMSK r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0xf3) + m.emit(0xd0 | lcode(v[0])) + }) + } + // BLSMSK m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x00, 0, addr(v[0]), hlcode(v[1])) + m.emit(0xf3) + m.mrsd(2, addr(v[0]), 1) + }) + } + // BLSMSK r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0xf3) + m.emit(0xd0 | lcode(v[0])) + }) + } + // BLSMSK m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x80, 0, addr(v[0]), hlcode(v[1])) + m.emit(0xf3) + m.mrsd(2, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BLSMSK") + } + return p +} + +// BLSR performs "Reset Lowest Set Bit". +// +// Mnemonic : BLSR +// Supported forms : (4 forms) +// +// * BLSR r32, r32 [BMI] +// * BLSR m32, r32 [BMI] +// * BLSR r64, r64 [BMI] +// * BLSR m64, r64 [BMI] +// +func (self *Program) BLSR(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BLSR", 2, Operands { v0, v1 }) + // BLSR r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0xf3) + m.emit(0xc8 | lcode(v[0])) + }) + } + // BLSR m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x00, 0, addr(v[0]), hlcode(v[1])) + m.emit(0xf3) + m.mrsd(1, addr(v[0]), 1) + }) + } + // BLSR r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0xf3) + m.emit(0xc8 | lcode(v[0])) + }) + } + // BLSR m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x80, 0, addr(v[0]), hlcode(v[1])) + m.emit(0xf3) + m.mrsd(1, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BLSR") + } + return p +} + +// BSFL performs "Bit Scan Forward". +// +// Mnemonic : BSF +// Supported forms : (2 forms) +// +// * BSFL r32, r32 +// * BSFL m32, r32 +// +func (self *Program) BSFL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BSFL", 2, Operands { v0, v1 }) + // BSFL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // BSFL m32, r32 + if isM32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xbc) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BSFL") + } + return p +} + +// BSFQ performs "Bit Scan Forward". +// +// Mnemonic : BSF +// Supported forms : (2 forms) +// +// * BSFQ r64, r64 +// * BSFQ m64, r64 +// +func (self *Program) BSFQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BSFQ", 2, Operands { v0, v1 }) + // BSFQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // BSFQ m64, r64 + if isM64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0xbc) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BSFQ") + } + return p +} + +// BSFW performs "Bit Scan Forward". +// +// Mnemonic : BSF +// Supported forms : (2 forms) +// +// * BSFW r16, r16 +// * BSFW m16, r16 +// +func (self *Program) BSFW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BSFW", 2, Operands { v0, v1 }) + // BSFW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // BSFW m16, r16 + if isM16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xbc) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BSFW") + } + return p +} + +// BSRL performs "Bit Scan Reverse". +// +// Mnemonic : BSR +// Supported forms : (2 forms) +// +// * BSRL r32, r32 +// * BSRL m32, r32 +// +func (self *Program) BSRL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BSRL", 2, Operands { v0, v1 }) + // BSRL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xbd) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // BSRL m32, r32 + if isM32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xbd) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BSRL") + } + return p +} + +// BSRQ performs "Bit Scan Reverse". +// +// Mnemonic : BSR +// Supported forms : (2 forms) +// +// * BSRQ r64, r64 +// * BSRQ m64, r64 +// +func (self *Program) BSRQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BSRQ", 2, Operands { v0, v1 }) + // BSRQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xbd) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // BSRQ m64, r64 + if isM64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0xbd) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BSRQ") + } + return p +} + +// BSRW performs "Bit Scan Reverse". +// +// Mnemonic : BSR +// Supported forms : (2 forms) +// +// * BSRW r16, r16 +// * BSRW m16, r16 +// +func (self *Program) BSRW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BSRW", 2, Operands { v0, v1 }) + // BSRW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xbd) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // BSRW m16, r16 + if isM16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xbd) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BSRW") + } + return p +} + +// BSWAPL performs "Byte Swap". +// +// Mnemonic : BSWAP +// Supported forms : (1 form) +// +// * BSWAPL r32 +// +func (self *Program) BSWAPL(v0 interface{}) *Instruction { + p := self.alloc("BSWAPL", 1, Operands { v0 }) + // BSWAPL r32 + if isReg32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0x0f) + m.emit(0xc8 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for BSWAPL") + } + return p +} + +// BSWAPQ performs "Byte Swap". +// +// Mnemonic : BSWAP +// Supported forms : (1 form) +// +// * BSWAPQ r64 +// +func (self *Program) BSWAPQ(v0 interface{}) *Instruction { + p := self.alloc("BSWAPQ", 1, Operands { v0 }) + // BSWAPQ r64 + if isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xc8 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for BSWAPQ") + } + return p +} + +// BTCL performs "Bit Test and Complement". +// +// Mnemonic : BTC +// Supported forms : (4 forms) +// +// * BTCL imm8, r32 +// * BTCL r32, r32 +// * BTCL imm8, m32 +// * BTCL r32, m32 +// +func (self *Program) BTCL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BTCL", 2, Operands { v0, v1 }) + // BTCL imm8, r32 + if isImm8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0xba) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BTCL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xbb) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // BTCL imm8, m32 + if isImm8(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x0f) + m.emit(0xba) + m.mrsd(7, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // BTCL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xbb) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BTCL") + } + return p +} + +// BTCQ performs "Bit Test and Complement". +// +// Mnemonic : BTC +// Supported forms : (4 forms) +// +// * BTCQ imm8, r64 +// * BTCQ r64, r64 +// * BTCQ imm8, m64 +// * BTCQ r64, m64 +// +func (self *Program) BTCQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BTCQ", 2, Operands { v0, v1 }) + // BTCQ imm8, r64 + if isImm8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x0f) + m.emit(0xba) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BTCQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x0f) + m.emit(0xbb) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // BTCQ imm8, m64 + if isImm8(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x0f) + m.emit(0xba) + m.mrsd(7, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // BTCQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x0f) + m.emit(0xbb) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BTCQ") + } + return p +} + +// BTCW performs "Bit Test and Complement". +// +// Mnemonic : BTC +// Supported forms : (4 forms) +// +// * BTCW imm8, r16 +// * BTCW r16, r16 +// * BTCW imm8, m16 +// * BTCW r16, m16 +// +func (self *Program) BTCW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BTCW", 2, Operands { v0, v1 }) + // BTCW imm8, r16 + if isImm8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0xba) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BTCW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xbb) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // BTCW imm8, m16 + if isImm8(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x0f) + m.emit(0xba) + m.mrsd(7, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // BTCW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xbb) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BTCW") + } + return p +} + +// BTL performs "Bit Test". +// +// Mnemonic : BT +// Supported forms : (4 forms) +// +// * BTL imm8, r32 +// * BTL r32, r32 +// * BTL imm8, m32 +// * BTL r32, m32 +// +func (self *Program) BTL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BTL", 2, Operands { v0, v1 }) + // BTL imm8, r32 + if isImm8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0xba) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BTL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xa3) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // BTL imm8, m32 + if isImm8(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x0f) + m.emit(0xba) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // BTL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xa3) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BTL") + } + return p +} + +// BTQ performs "Bit Test". +// +// Mnemonic : BT +// Supported forms : (4 forms) +// +// * BTQ imm8, r64 +// * BTQ r64, r64 +// * BTQ imm8, m64 +// * BTQ r64, m64 +// +func (self *Program) BTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BTQ", 2, Operands { v0, v1 }) + // BTQ imm8, r64 + if isImm8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x0f) + m.emit(0xba) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BTQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x0f) + m.emit(0xa3) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // BTQ imm8, m64 + if isImm8(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x0f) + m.emit(0xba) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // BTQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x0f) + m.emit(0xa3) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BTQ") + } + return p +} + +// BTRL performs "Bit Test and Reset". +// +// Mnemonic : BTR +// Supported forms : (4 forms) +// +// * BTRL imm8, r32 +// * BTRL r32, r32 +// * BTRL imm8, m32 +// * BTRL r32, m32 +// +func (self *Program) BTRL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BTRL", 2, Operands { v0, v1 }) + // BTRL imm8, r32 + if isImm8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0xba) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BTRL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xb3) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // BTRL imm8, m32 + if isImm8(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x0f) + m.emit(0xba) + m.mrsd(6, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // BTRL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xb3) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BTRL") + } + return p +} + +// BTRQ performs "Bit Test and Reset". +// +// Mnemonic : BTR +// Supported forms : (4 forms) +// +// * BTRQ imm8, r64 +// * BTRQ r64, r64 +// * BTRQ imm8, m64 +// * BTRQ r64, m64 +// +func (self *Program) BTRQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BTRQ", 2, Operands { v0, v1 }) + // BTRQ imm8, r64 + if isImm8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x0f) + m.emit(0xba) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BTRQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x0f) + m.emit(0xb3) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // BTRQ imm8, m64 + if isImm8(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x0f) + m.emit(0xba) + m.mrsd(6, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // BTRQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x0f) + m.emit(0xb3) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BTRQ") + } + return p +} + +// BTRW performs "Bit Test and Reset". +// +// Mnemonic : BTR +// Supported forms : (4 forms) +// +// * BTRW imm8, r16 +// * BTRW r16, r16 +// * BTRW imm8, m16 +// * BTRW r16, m16 +// +func (self *Program) BTRW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BTRW", 2, Operands { v0, v1 }) + // BTRW imm8, r16 + if isImm8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0xba) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BTRW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xb3) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // BTRW imm8, m16 + if isImm8(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x0f) + m.emit(0xba) + m.mrsd(6, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // BTRW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xb3) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BTRW") + } + return p +} + +// BTSL performs "Bit Test and Set". +// +// Mnemonic : BTS +// Supported forms : (4 forms) +// +// * BTSL imm8, r32 +// * BTSL r32, r32 +// * BTSL imm8, m32 +// * BTSL r32, m32 +// +func (self *Program) BTSL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BTSL", 2, Operands { v0, v1 }) + // BTSL imm8, r32 + if isImm8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0xba) + m.emit(0xe8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BTSL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xab) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // BTSL imm8, m32 + if isImm8(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x0f) + m.emit(0xba) + m.mrsd(5, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // BTSL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xab) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BTSL") + } + return p +} + +// BTSQ performs "Bit Test and Set". +// +// Mnemonic : BTS +// Supported forms : (4 forms) +// +// * BTSQ imm8, r64 +// * BTSQ r64, r64 +// * BTSQ imm8, m64 +// * BTSQ r64, m64 +// +func (self *Program) BTSQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BTSQ", 2, Operands { v0, v1 }) + // BTSQ imm8, r64 + if isImm8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x0f) + m.emit(0xba) + m.emit(0xe8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BTSQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x0f) + m.emit(0xab) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // BTSQ imm8, m64 + if isImm8(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x0f) + m.emit(0xba) + m.mrsd(5, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // BTSQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x0f) + m.emit(0xab) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BTSQ") + } + return p +} + +// BTSW performs "Bit Test and Set". +// +// Mnemonic : BTS +// Supported forms : (4 forms) +// +// * BTSW imm8, r16 +// * BTSW r16, r16 +// * BTSW imm8, m16 +// * BTSW r16, m16 +// +func (self *Program) BTSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BTSW", 2, Operands { v0, v1 }) + // BTSW imm8, r16 + if isImm8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0xba) + m.emit(0xe8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BTSW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xab) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // BTSW imm8, m16 + if isImm8(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x0f) + m.emit(0xba) + m.mrsd(5, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // BTSW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xab) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BTSW") + } + return p +} + +// BTW performs "Bit Test". +// +// Mnemonic : BT +// Supported forms : (4 forms) +// +// * BTW imm8, r16 +// * BTW r16, r16 +// * BTW imm8, m16 +// * BTW r16, m16 +// +func (self *Program) BTW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("BTW", 2, Operands { v0, v1 }) + // BTW imm8, r16 + if isImm8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0xba) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // BTW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xa3) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // BTW imm8, m16 + if isImm8(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x0f) + m.emit(0xba) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // BTW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xa3) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BTW") + } + return p +} + +// BZHI performs "Zero High Bits Starting with Specified Bit Position". +// +// Mnemonic : BZHI +// Supported forms : (4 forms) +// +// * BZHI r32, r32, r32 [BMI2] +// * BZHI r32, m32, r32 [BMI2] +// * BZHI r64, r64, r64 [BMI2] +// * BZHI r64, m64, r64 [BMI2] +// +func (self *Program) BZHI(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("BZHI", 3, Operands { v0, v1, v2 }) + // BZHI r32, r32, r32 + if isReg32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // BZHI r32, m32, r32 + if isReg32(v0) && isM32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0xf5) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // BZHI r64, r64, r64 + if isReg64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xf8 ^ (hlcode(v[0]) << 3)) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // BZHI r64, m64, r64 + if isReg64(v0) && isM64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x80, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0xf5) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for BZHI") + } + return p +} + +// CALL performs "Call Procedure". +// +// Mnemonic : CALL +// Supported forms : (1 form) +// +// * CALL rel32 +// +func (self *Program) CALL(v0 interface{}) *Instruction { + p := self.alloc("CALL", 1, Operands { v0 }) + // CALL rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xe8) + m.imm4(relv(v[0])) + }) + } + // CALL label + if isLabel(v0) { + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0xe8) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for CALL") + } + return p +} + +// CALLQ performs "Call Procedure". +// +// Mnemonic : CALL +// Supported forms : (2 forms) +// +// * CALLQ r64 +// * CALLQ m64 +// +func (self *Program) CALLQ(v0 interface{}) *Instruction { + p := self.alloc("CALLQ", 1, Operands { v0 }) + // CALLQ r64 + if isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0xff) + m.emit(0xd0 | lcode(v[0])) + }) + } + // CALLQ m64 + if isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xff) + m.mrsd(2, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CALLQ") + } + return p +} + +// CBTW performs "Convert Byte to Word". +// +// Mnemonic : CBW +// Supported forms : (1 form) +// +// * CBTW +// +func (self *Program) CBTW() *Instruction { + p := self.alloc("CBTW", 0, Operands { }) + // CBTW + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x98) + }) + return p +} + +// CLC performs "Clear Carry Flag". +// +// Mnemonic : CLC +// Supported forms : (1 form) +// +// * CLC +// +func (self *Program) CLC() *Instruction { + p := self.alloc("CLC", 0, Operands { }) + // CLC + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf8) + }) + return p +} + +// CLD performs "Clear Direction Flag". +// +// Mnemonic : CLD +// Supported forms : (1 form) +// +// * CLD +// +func (self *Program) CLD() *Instruction { + p := self.alloc("CLD", 0, Operands { }) + // CLD + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xfc) + }) + return p +} + +// CLFLUSH performs "Flush Cache Line". +// +// Mnemonic : CLFLUSH +// Supported forms : (1 form) +// +// * CLFLUSH m8 [CLFLUSH] +// +func (self *Program) CLFLUSH(v0 interface{}) *Instruction { + p := self.alloc("CLFLUSH", 1, Operands { v0 }) + // CLFLUSH m8 + if isM8(v0) { + self.require(ISA_CLFLUSH) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0xae) + m.mrsd(7, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CLFLUSH") + } + return p +} + +// CLFLUSHOPT performs "Flush Cache Line Optimized". +// +// Mnemonic : CLFLUSHOPT +// Supported forms : (1 form) +// +// * CLFLUSHOPT m8 [CLFLUSHOPT] +// +func (self *Program) CLFLUSHOPT(v0 interface{}) *Instruction { + p := self.alloc("CLFLUSHOPT", 1, Operands { v0 }) + // CLFLUSHOPT m8 + if isM8(v0) { + self.require(ISA_CLFLUSHOPT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0xae) + m.mrsd(7, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CLFLUSHOPT") + } + return p +} + +// CLTD performs "Convert Doubleword to Quadword". +// +// Mnemonic : CDQ +// Supported forms : (1 form) +// +// * CLTD +// +func (self *Program) CLTD() *Instruction { + p := self.alloc("CLTD", 0, Operands { }) + // CLTD + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x99) + }) + return p +} + +// CLTQ performs "Convert Doubleword to Quadword". +// +// Mnemonic : CDQE +// Supported forms : (1 form) +// +// * CLTQ +// +func (self *Program) CLTQ() *Instruction { + p := self.alloc("CLTQ", 0, Operands { }) + // CLTQ + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48) + m.emit(0x98) + }) + return p +} + +// CLWB performs "Cache Line Write Back". +// +// Mnemonic : CLWB +// Supported forms : (1 form) +// +// * CLWB m8 [CLWB] +// +func (self *Program) CLWB(v0 interface{}) *Instruction { + p := self.alloc("CLWB", 1, Operands { v0 }) + // CLWB m8 + if isM8(v0) { + self.require(ISA_CLWB) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0xae) + m.mrsd(6, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CLWB") + } + return p +} + +// CLZERO performs "Zero-out 64-bit Cache Line". +// +// Mnemonic : CLZERO +// Supported forms : (1 form) +// +// * CLZERO [CLZERO] +// +func (self *Program) CLZERO() *Instruction { + p := self.alloc("CLZERO", 0, Operands { }) + // CLZERO + self.require(ISA_CLZERO) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x01) + m.emit(0xfc) + }) + return p +} + +// CMC performs "Complement Carry Flag". +// +// Mnemonic : CMC +// Supported forms : (1 form) +// +// * CMC +// +func (self *Program) CMC() *Instruction { + p := self.alloc("CMC", 0, Operands { }) + // CMC + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf5) + }) + return p +} + +// CMOVA performs "Move if above (CF == 0 and ZF == 0)". +// +// Mnemonic : CMOVA +// Supported forms : (6 forms) +// +// * CMOVA r16, r16 [CMOV] +// * CMOVA m16, r16 [CMOV] +// * CMOVA r32, r32 [CMOV] +// * CMOVA m32, r32 [CMOV] +// * CMOVA r64, r64 [CMOV] +// * CMOVA m64, r64 [CMOV] +// +func (self *Program) CMOVA(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVA", 2, Operands { v0, v1 }) + // CMOVA r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x47) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVA m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x47) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVA r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x47) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVA m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x47) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVA r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x47) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVA m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x47) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVA") + } + return p +} + +// CMOVAE performs "Move if above or equal (CF == 0)". +// +// Mnemonic : CMOVAE +// Supported forms : (6 forms) +// +// * CMOVAE r16, r16 [CMOV] +// * CMOVAE m16, r16 [CMOV] +// * CMOVAE r32, r32 [CMOV] +// * CMOVAE m32, r32 [CMOV] +// * CMOVAE r64, r64 [CMOV] +// * CMOVAE m64, r64 [CMOV] +// +func (self *Program) CMOVAE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVAE", 2, Operands { v0, v1 }) + // CMOVAE r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x43) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVAE m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x43) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVAE r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x43) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVAE m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x43) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVAE r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x43) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVAE m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x43) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVAE") + } + return p +} + +// CMOVB performs "Move if below (CF == 1)". +// +// Mnemonic : CMOVB +// Supported forms : (6 forms) +// +// * CMOVB r16, r16 [CMOV] +// * CMOVB m16, r16 [CMOV] +// * CMOVB r32, r32 [CMOV] +// * CMOVB m32, r32 [CMOV] +// * CMOVB r64, r64 [CMOV] +// * CMOVB m64, r64 [CMOV] +// +func (self *Program) CMOVB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVB", 2, Operands { v0, v1 }) + // CMOVB r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVB m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVB r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVB m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVB r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVB m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVB") + } + return p +} + +// CMOVBE performs "Move if below or equal (CF == 1 or ZF == 1)". +// +// Mnemonic : CMOVBE +// Supported forms : (6 forms) +// +// * CMOVBE r16, r16 [CMOV] +// * CMOVBE m16, r16 [CMOV] +// * CMOVBE r32, r32 [CMOV] +// * CMOVBE m32, r32 [CMOV] +// * CMOVBE r64, r64 [CMOV] +// * CMOVBE m64, r64 [CMOV] +// +func (self *Program) CMOVBE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVBE", 2, Operands { v0, v1 }) + // CMOVBE r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x46) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVBE m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x46) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVBE r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x46) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVBE m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x46) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVBE r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x46) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVBE m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x46) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVBE") + } + return p +} + +// CMOVC performs "Move if carry (CF == 1)". +// +// Mnemonic : CMOVC +// Supported forms : (6 forms) +// +// * CMOVC r16, r16 [CMOV] +// * CMOVC m16, r16 [CMOV] +// * CMOVC r32, r32 [CMOV] +// * CMOVC m32, r32 [CMOV] +// * CMOVC r64, r64 [CMOV] +// * CMOVC m64, r64 [CMOV] +// +func (self *Program) CMOVC(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVC", 2, Operands { v0, v1 }) + // CMOVC r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVC m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVC r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVC m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVC r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVC m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVC") + } + return p +} + +// CMOVE performs "Move if equal (ZF == 1)". +// +// Mnemonic : CMOVE +// Supported forms : (6 forms) +// +// * CMOVE r16, r16 [CMOV] +// * CMOVE m16, r16 [CMOV] +// * CMOVE r32, r32 [CMOV] +// * CMOVE m32, r32 [CMOV] +// * CMOVE r64, r64 [CMOV] +// * CMOVE m64, r64 [CMOV] +// +func (self *Program) CMOVE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVE", 2, Operands { v0, v1 }) + // CMOVE r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVE m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x44) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVE r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVE m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x44) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVE r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVE m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x44) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVE") + } + return p +} + +// CMOVG performs "Move if greater (ZF == 0 and SF == OF)". +// +// Mnemonic : CMOVG +// Supported forms : (6 forms) +// +// * CMOVG r16, r16 [CMOV] +// * CMOVG m16, r16 [CMOV] +// * CMOVG r32, r32 [CMOV] +// * CMOVG m32, r32 [CMOV] +// * CMOVG r64, r64 [CMOV] +// * CMOVG m64, r64 [CMOV] +// +func (self *Program) CMOVG(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVG", 2, Operands { v0, v1 }) + // CMOVG r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVG m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVG r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVG m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVG r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x4f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVG m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x4f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVG") + } + return p +} + +// CMOVGE performs "Move if greater or equal (SF == OF)". +// +// Mnemonic : CMOVGE +// Supported forms : (6 forms) +// +// * CMOVGE r16, r16 [CMOV] +// * CMOVGE m16, r16 [CMOV] +// * CMOVGE r32, r32 [CMOV] +// * CMOVGE m32, r32 [CMOV] +// * CMOVGE r64, r64 [CMOV] +// * CMOVGE m64, r64 [CMOV] +// +func (self *Program) CMOVGE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVGE", 2, Operands { v0, v1 }) + // CMOVGE r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVGE m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVGE r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVGE m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVGE r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x4d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVGE m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x4d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVGE") + } + return p +} + +// CMOVL performs "Move if less (SF != OF)". +// +// Mnemonic : CMOVL +// Supported forms : (6 forms) +// +// * CMOVL r16, r16 [CMOV] +// * CMOVL m16, r16 [CMOV] +// * CMOVL r32, r32 [CMOV] +// * CMOVL m32, r32 [CMOV] +// * CMOVL r64, r64 [CMOV] +// * CMOVL m64, r64 [CMOV] +// +func (self *Program) CMOVL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVL", 2, Operands { v0, v1 }) + // CMOVL r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVL m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVL r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVL m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVL r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVL m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x4c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVL") + } + return p +} + +// CMOVLE performs "Move if less or equal (ZF == 1 or SF != OF)". +// +// Mnemonic : CMOVLE +// Supported forms : (6 forms) +// +// * CMOVLE r16, r16 [CMOV] +// * CMOVLE m16, r16 [CMOV] +// * CMOVLE r32, r32 [CMOV] +// * CMOVLE m32, r32 [CMOV] +// * CMOVLE r64, r64 [CMOV] +// * CMOVLE m64, r64 [CMOV] +// +func (self *Program) CMOVLE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVLE", 2, Operands { v0, v1 }) + // CMOVLE r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVLE m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVLE r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVLE m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVLE r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x4e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVLE m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x4e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVLE") + } + return p +} + +// CMOVNA performs "Move if not above (CF == 1 or ZF == 1)". +// +// Mnemonic : CMOVNA +// Supported forms : (6 forms) +// +// * CMOVNA r16, r16 [CMOV] +// * CMOVNA m16, r16 [CMOV] +// * CMOVNA r32, r32 [CMOV] +// * CMOVNA m32, r32 [CMOV] +// * CMOVNA r64, r64 [CMOV] +// * CMOVNA m64, r64 [CMOV] +// +func (self *Program) CMOVNA(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNA", 2, Operands { v0, v1 }) + // CMOVNA r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x46) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNA m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x46) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNA r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x46) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNA m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x46) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNA r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x46) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNA m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x46) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNA") + } + return p +} + +// CMOVNAE performs "Move if not above or equal (CF == 1)". +// +// Mnemonic : CMOVNAE +// Supported forms : (6 forms) +// +// * CMOVNAE r16, r16 [CMOV] +// * CMOVNAE m16, r16 [CMOV] +// * CMOVNAE r32, r32 [CMOV] +// * CMOVNAE m32, r32 [CMOV] +// * CMOVNAE r64, r64 [CMOV] +// * CMOVNAE m64, r64 [CMOV] +// +func (self *Program) CMOVNAE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNAE", 2, Operands { v0, v1 }) + // CMOVNAE r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNAE m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNAE r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNAE m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNAE r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNAE m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNAE") + } + return p +} + +// CMOVNB performs "Move if not below (CF == 0)". +// +// Mnemonic : CMOVNB +// Supported forms : (6 forms) +// +// * CMOVNB r16, r16 [CMOV] +// * CMOVNB m16, r16 [CMOV] +// * CMOVNB r32, r32 [CMOV] +// * CMOVNB m32, r32 [CMOV] +// * CMOVNB r64, r64 [CMOV] +// * CMOVNB m64, r64 [CMOV] +// +func (self *Program) CMOVNB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNB", 2, Operands { v0, v1 }) + // CMOVNB r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x43) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNB m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x43) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNB r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x43) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNB m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x43) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNB r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x43) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNB m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x43) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNB") + } + return p +} + +// CMOVNBE performs "Move if not below or equal (CF == 0 and ZF == 0)". +// +// Mnemonic : CMOVNBE +// Supported forms : (6 forms) +// +// * CMOVNBE r16, r16 [CMOV] +// * CMOVNBE m16, r16 [CMOV] +// * CMOVNBE r32, r32 [CMOV] +// * CMOVNBE m32, r32 [CMOV] +// * CMOVNBE r64, r64 [CMOV] +// * CMOVNBE m64, r64 [CMOV] +// +func (self *Program) CMOVNBE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNBE", 2, Operands { v0, v1 }) + // CMOVNBE r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x47) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNBE m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x47) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNBE r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x47) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNBE m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x47) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNBE r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x47) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNBE m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x47) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNBE") + } + return p +} + +// CMOVNC performs "Move if not carry (CF == 0)". +// +// Mnemonic : CMOVNC +// Supported forms : (6 forms) +// +// * CMOVNC r16, r16 [CMOV] +// * CMOVNC m16, r16 [CMOV] +// * CMOVNC r32, r32 [CMOV] +// * CMOVNC m32, r32 [CMOV] +// * CMOVNC r64, r64 [CMOV] +// * CMOVNC m64, r64 [CMOV] +// +func (self *Program) CMOVNC(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNC", 2, Operands { v0, v1 }) + // CMOVNC r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x43) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNC m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x43) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNC r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x43) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNC m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x43) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNC r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x43) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNC m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x43) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNC") + } + return p +} + +// CMOVNE performs "Move if not equal (ZF == 0)". +// +// Mnemonic : CMOVNE +// Supported forms : (6 forms) +// +// * CMOVNE r16, r16 [CMOV] +// * CMOVNE m16, r16 [CMOV] +// * CMOVNE r32, r32 [CMOV] +// * CMOVNE m32, r32 [CMOV] +// * CMOVNE r64, r64 [CMOV] +// * CMOVNE m64, r64 [CMOV] +// +func (self *Program) CMOVNE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNE", 2, Operands { v0, v1 }) + // CMOVNE r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x45) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNE m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x45) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNE r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x45) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNE m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x45) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNE r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x45) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNE m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x45) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNE") + } + return p +} + +// CMOVNG performs "Move if not greater (ZF == 1 or SF != OF)". +// +// Mnemonic : CMOVNG +// Supported forms : (6 forms) +// +// * CMOVNG r16, r16 [CMOV] +// * CMOVNG m16, r16 [CMOV] +// * CMOVNG r32, r32 [CMOV] +// * CMOVNG m32, r32 [CMOV] +// * CMOVNG r64, r64 [CMOV] +// * CMOVNG m64, r64 [CMOV] +// +func (self *Program) CMOVNG(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNG", 2, Operands { v0, v1 }) + // CMOVNG r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNG m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNG r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNG m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNG r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x4e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNG m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x4e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNG") + } + return p +} + +// CMOVNGE performs "Move if not greater or equal (SF != OF)". +// +// Mnemonic : CMOVNGE +// Supported forms : (6 forms) +// +// * CMOVNGE r16, r16 [CMOV] +// * CMOVNGE m16, r16 [CMOV] +// * CMOVNGE r32, r32 [CMOV] +// * CMOVNGE m32, r32 [CMOV] +// * CMOVNGE r64, r64 [CMOV] +// * CMOVNGE m64, r64 [CMOV] +// +func (self *Program) CMOVNGE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNGE", 2, Operands { v0, v1 }) + // CMOVNGE r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNGE m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNGE r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNGE m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNGE r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNGE m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x4c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNGE") + } + return p +} + +// CMOVNL performs "Move if not less (SF == OF)". +// +// Mnemonic : CMOVNL +// Supported forms : (6 forms) +// +// * CMOVNL r16, r16 [CMOV] +// * CMOVNL m16, r16 [CMOV] +// * CMOVNL r32, r32 [CMOV] +// * CMOVNL m32, r32 [CMOV] +// * CMOVNL r64, r64 [CMOV] +// * CMOVNL m64, r64 [CMOV] +// +func (self *Program) CMOVNL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNL", 2, Operands { v0, v1 }) + // CMOVNL r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNL m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNL r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNL m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNL r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x4d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNL m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x4d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNL") + } + return p +} + +// CMOVNLE performs "Move if not less or equal (ZF == 0 and SF == OF)". +// +// Mnemonic : CMOVNLE +// Supported forms : (6 forms) +// +// * CMOVNLE r16, r16 [CMOV] +// * CMOVNLE m16, r16 [CMOV] +// * CMOVNLE r32, r32 [CMOV] +// * CMOVNLE m32, r32 [CMOV] +// * CMOVNLE r64, r64 [CMOV] +// * CMOVNLE m64, r64 [CMOV] +// +func (self *Program) CMOVNLE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNLE", 2, Operands { v0, v1 }) + // CMOVNLE r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNLE m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNLE r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNLE m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNLE r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x4f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNLE m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x4f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNLE") + } + return p +} + +// CMOVNO performs "Move if not overflow (OF == 0)". +// +// Mnemonic : CMOVNO +// Supported forms : (6 forms) +// +// * CMOVNO r16, r16 [CMOV] +// * CMOVNO m16, r16 [CMOV] +// * CMOVNO r32, r32 [CMOV] +// * CMOVNO m32, r32 [CMOV] +// * CMOVNO r64, r64 [CMOV] +// * CMOVNO m64, r64 [CMOV] +// +func (self *Program) CMOVNO(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNO", 2, Operands { v0, v1 }) + // CMOVNO r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x41) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNO m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x41) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNO r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x41) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNO m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x41) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNO r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x41) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNO m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x41) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNO") + } + return p +} + +// CMOVNP performs "Move if not parity (PF == 0)". +// +// Mnemonic : CMOVNP +// Supported forms : (6 forms) +// +// * CMOVNP r16, r16 [CMOV] +// * CMOVNP m16, r16 [CMOV] +// * CMOVNP r32, r32 [CMOV] +// * CMOVNP m32, r32 [CMOV] +// * CMOVNP r64, r64 [CMOV] +// * CMOVNP m64, r64 [CMOV] +// +func (self *Program) CMOVNP(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNP", 2, Operands { v0, v1 }) + // CMOVNP r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNP m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNP r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNP m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNP r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x4b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNP m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x4b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNP") + } + return p +} + +// CMOVNS performs "Move if not sign (SF == 0)". +// +// Mnemonic : CMOVNS +// Supported forms : (6 forms) +// +// * CMOVNS r16, r16 [CMOV] +// * CMOVNS m16, r16 [CMOV] +// * CMOVNS r32, r32 [CMOV] +// * CMOVNS m32, r32 [CMOV] +// * CMOVNS r64, r64 [CMOV] +// * CMOVNS m64, r64 [CMOV] +// +func (self *Program) CMOVNS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNS", 2, Operands { v0, v1 }) + // CMOVNS r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x49) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNS m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x49) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNS r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x49) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNS m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x49) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNS r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x49) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNS m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x49) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNS") + } + return p +} + +// CMOVNZ performs "Move if not zero (ZF == 0)". +// +// Mnemonic : CMOVNZ +// Supported forms : (6 forms) +// +// * CMOVNZ r16, r16 [CMOV] +// * CMOVNZ m16, r16 [CMOV] +// * CMOVNZ r32, r32 [CMOV] +// * CMOVNZ m32, r32 [CMOV] +// * CMOVNZ r64, r64 [CMOV] +// * CMOVNZ m64, r64 [CMOV] +// +func (self *Program) CMOVNZ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVNZ", 2, Operands { v0, v1 }) + // CMOVNZ r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x45) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNZ m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x45) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNZ r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x45) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNZ m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x45) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVNZ r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x45) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVNZ m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x45) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVNZ") + } + return p +} + +// CMOVO performs "Move if overflow (OF == 1)". +// +// Mnemonic : CMOVO +// Supported forms : (6 forms) +// +// * CMOVO r16, r16 [CMOV] +// * CMOVO m16, r16 [CMOV] +// * CMOVO r32, r32 [CMOV] +// * CMOVO m32, r32 [CMOV] +// * CMOVO r64, r64 [CMOV] +// * CMOVO m64, r64 [CMOV] +// +func (self *Program) CMOVO(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVO", 2, Operands { v0, v1 }) + // CMOVO r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x40) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVO m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x40) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVO r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x40) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVO m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x40) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVO r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x40) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVO m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x40) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVO") + } + return p +} + +// CMOVP performs "Move if parity (PF == 1)". +// +// Mnemonic : CMOVP +// Supported forms : (6 forms) +// +// * CMOVP r16, r16 [CMOV] +// * CMOVP m16, r16 [CMOV] +// * CMOVP r32, r32 [CMOV] +// * CMOVP m32, r32 [CMOV] +// * CMOVP r64, r64 [CMOV] +// * CMOVP m64, r64 [CMOV] +// +func (self *Program) CMOVP(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVP", 2, Operands { v0, v1 }) + // CMOVP r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVP m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVP r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVP m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVP r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x4a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVP m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x4a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVP") + } + return p +} + +// CMOVPE performs "Move if parity even (PF == 1)". +// +// Mnemonic : CMOVPE +// Supported forms : (6 forms) +// +// * CMOVPE r16, r16 [CMOV] +// * CMOVPE m16, r16 [CMOV] +// * CMOVPE r32, r32 [CMOV] +// * CMOVPE m32, r32 [CMOV] +// * CMOVPE r64, r64 [CMOV] +// * CMOVPE m64, r64 [CMOV] +// +func (self *Program) CMOVPE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVPE", 2, Operands { v0, v1 }) + // CMOVPE r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVPE m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVPE r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVPE m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVPE r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x4a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVPE m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x4a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVPE") + } + return p +} + +// CMOVPO performs "Move if parity odd (PF == 0)". +// +// Mnemonic : CMOVPO +// Supported forms : (6 forms) +// +// * CMOVPO r16, r16 [CMOV] +// * CMOVPO m16, r16 [CMOV] +// * CMOVPO r32, r32 [CMOV] +// * CMOVPO m32, r32 [CMOV] +// * CMOVPO r64, r64 [CMOV] +// * CMOVPO m64, r64 [CMOV] +// +func (self *Program) CMOVPO(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVPO", 2, Operands { v0, v1 }) + // CMOVPO r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVPO m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVPO r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x4b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVPO m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x4b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVPO r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x4b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVPO m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x4b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVPO") + } + return p +} + +// CMOVS performs "Move if sign (SF == 1)". +// +// Mnemonic : CMOVS +// Supported forms : (6 forms) +// +// * CMOVS r16, r16 [CMOV] +// * CMOVS m16, r16 [CMOV] +// * CMOVS r32, r32 [CMOV] +// * CMOVS m32, r32 [CMOV] +// * CMOVS r64, r64 [CMOV] +// * CMOVS m64, r64 [CMOV] +// +func (self *Program) CMOVS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVS", 2, Operands { v0, v1 }) + // CMOVS r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x48) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVS m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x48) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVS r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x48) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVS m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x48) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVS r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x48) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVS m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x48) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVS") + } + return p +} + +// CMOVZ performs "Move if zero (ZF == 1)". +// +// Mnemonic : CMOVZ +// Supported forms : (6 forms) +// +// * CMOVZ r16, r16 [CMOV] +// * CMOVZ m16, r16 [CMOV] +// * CMOVZ r32, r32 [CMOV] +// * CMOVZ m32, r32 [CMOV] +// * CMOVZ r64, r64 [CMOV] +// * CMOVZ m64, r64 [CMOV] +// +func (self *Program) CMOVZ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMOVZ", 2, Operands { v0, v1 }) + // CMOVZ r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVZ m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x44) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVZ r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVZ m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x44) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMOVZ r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMOVZ m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_CMOV) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x44) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMOVZ") + } + return p +} + +// CMPB performs "Compare Two Operands". +// +// Mnemonic : CMP +// Supported forms : (6 forms) +// +// * CMPB imm8, al +// * CMPB imm8, r8 +// * CMPB r8, r8 +// * CMPB m8, r8 +// * CMPB imm8, m8 +// * CMPB r8, m8 +// +func (self *Program) CMPB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMPB", 2, Operands { v0, v1 }) + // CMPB imm8, al + if isImm8(v0) && v1 == AL { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x3c) + m.imm1(toImmAny(v[0])) + }) + } + // CMPB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0x80) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // CMPB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x38) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x3a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMPB m8, r8 + if isM8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), isReg8REX(v[1])) + m.emit(0x3a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMPB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x80) + m.mrsd(7, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // CMPB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x38) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMPB") + } + return p +} + +// CMPL performs "Compare Two Operands". +// +// Mnemonic : CMP +// Supported forms : (8 forms) +// +// * CMPL imm32, eax +// * CMPL imm8, r32 +// * CMPL imm32, r32 +// * CMPL r32, r32 +// * CMPL m32, r32 +// * CMPL imm8, m32 +// * CMPL imm32, m32 +// * CMPL r32, m32 +// +func (self *Program) CMPL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMPL", 2, Operands { v0, v1 }) + // CMPL imm32, eax + if isImm32(v0) && v1 == EAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x3d) + m.imm4(toImmAny(v[0])) + }) + } + // CMPL imm8, r32 + if isImm8Ext(v0, 4) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // CMPL imm32, r32 + if isImm32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xf8 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // CMPL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x39) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMPL m32, r32 + if isM32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x3b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMPL imm8, m32 + if isImm8Ext(v0, 4) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(7, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // CMPL imm32, m32 + if isImm32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(7, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // CMPL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x39) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMPL") + } + return p +} + +// CMPPD performs "Compare Packed Double-Precision Floating-Point Values". +// +// Mnemonic : CMPPD +// Supported forms : (2 forms) +// +// * CMPPD imm8, xmm, xmm [SSE2] +// * CMPPD imm8, m128, xmm [SSE2] +// +func (self *Program) CMPPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("CMPPD", 3, Operands { v0, v1, v2 }) + // CMPPD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // CMPPD imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xc2) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for CMPPD") + } + return p +} + +// CMPPS performs "Compare Packed Single-Precision Floating-Point Values". +// +// Mnemonic : CMPPS +// Supported forms : (2 forms) +// +// * CMPPS imm8, xmm, xmm [SSE] +// * CMPPS imm8, m128, xmm [SSE] +// +func (self *Program) CMPPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("CMPPS", 3, Operands { v0, v1, v2 }) + // CMPPS imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // CMPPS imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xc2) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for CMPPS") + } + return p +} + +// CMPQ performs "Compare Two Operands". +// +// Mnemonic : CMP +// Supported forms : (8 forms) +// +// * CMPQ imm32, rax +// * CMPQ imm8, r64 +// * CMPQ imm32, r64 +// * CMPQ r64, r64 +// * CMPQ m64, r64 +// * CMPQ imm8, m64 +// * CMPQ imm32, m64 +// * CMPQ r64, m64 +// +func (self *Program) CMPQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMPQ", 2, Operands { v0, v1 }) + // CMPQ imm32, rax + if isImm32(v0) && v1 == RAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48) + m.emit(0x3d) + m.imm4(toImmAny(v[0])) + }) + } + // CMPQ imm8, r64 + if isImm8Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x83) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // CMPQ imm32, r64 + if isImm32Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x81) + m.emit(0xf8 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // CMPQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x39) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMPQ m64, r64 + if isM64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x3b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMPQ imm8, m64 + if isImm8Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x83) + m.mrsd(7, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // CMPQ imm32, m64 + if isImm32Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x81) + m.mrsd(7, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // CMPQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x39) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMPQ") + } + return p +} + +// CMPSD performs "Compare Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : CMPSD +// Supported forms : (2 forms) +// +// * CMPSD imm8, xmm, xmm [SSE2] +// * CMPSD imm8, m64, xmm [SSE2] +// +func (self *Program) CMPSD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("CMPSD", 3, Operands { v0, v1, v2 }) + // CMPSD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // CMPSD imm8, m64, xmm + if isImm8(v0) && isM64(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xc2) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for CMPSD") + } + return p +} + +// CMPSS performs "Compare Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : CMPSS +// Supported forms : (2 forms) +// +// * CMPSS imm8, xmm, xmm [SSE] +// * CMPSS imm8, m32, xmm [SSE] +// +func (self *Program) CMPSS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("CMPSS", 3, Operands { v0, v1, v2 }) + // CMPSS imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // CMPSS imm8, m32, xmm + if isImm8(v0) && isM32(v1) && isXMM(v2) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xc2) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for CMPSS") + } + return p +} + +// CMPW performs "Compare Two Operands". +// +// Mnemonic : CMP +// Supported forms : (8 forms) +// +// * CMPW imm16, ax +// * CMPW imm8, r16 +// * CMPW imm16, r16 +// * CMPW r16, r16 +// * CMPW m16, r16 +// * CMPW imm8, m16 +// * CMPW imm16, m16 +// * CMPW r16, m16 +// +func (self *Program) CMPW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMPW", 2, Operands { v0, v1 }) + // CMPW imm16, ax + if isImm16(v0) && v1 == AX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x3d) + m.imm2(toImmAny(v[0])) + }) + } + // CMPW imm8, r16 + if isImm8Ext(v0, 2) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // CMPW imm16, r16 + if isImm16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xf8 | lcode(v[1])) + m.imm2(toImmAny(v[0])) + }) + } + // CMPW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x39) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CMPW m16, r16 + if isM16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x3b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CMPW imm8, m16 + if isImm8Ext(v0, 2) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(7, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // CMPW imm16, m16 + if isImm16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(7, addr(v[1]), 1) + m.imm2(toImmAny(v[0])) + }) + } + // CMPW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x39) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMPW") + } + return p +} + +// CMPXCHG16B performs "Compare and Exchange 16 Bytes". +// +// Mnemonic : CMPXCHG16B +// Supported forms : (1 form) +// +// * CMPXCHG16B m128 +// +func (self *Program) CMPXCHG16B(v0 interface{}) *Instruction { + p := self.alloc("CMPXCHG16B", 1, Operands { v0 }) + // CMPXCHG16B m128 + if isM128(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[0])) + m.emit(0x0f) + m.emit(0xc7) + m.mrsd(1, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMPXCHG16B") + } + return p +} + +// CMPXCHG8B performs "Compare and Exchange 8 Bytes". +// +// Mnemonic : CMPXCHG8B +// Supported forms : (1 form) +// +// * CMPXCHG8B m64 +// +func (self *Program) CMPXCHG8B(v0 interface{}) *Instruction { + p := self.alloc("CMPXCHG8B", 1, Operands { v0 }) + // CMPXCHG8B m64 + if isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0xc7) + m.mrsd(1, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMPXCHG8B") + } + return p +} + +// CMPXCHGB performs "Compare and Exchange". +// +// Mnemonic : CMPXCHG +// Supported forms : (2 forms) +// +// * CMPXCHGB r8, r8 +// * CMPXCHGB r8, m8 +// +func (self *Program) CMPXCHGB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMPXCHGB", 2, Operands { v0, v1 }) + // CMPXCHGB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x0f) + m.emit(0xb0) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // CMPXCHGB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0xb0) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMPXCHGB") + } + return p +} + +// CMPXCHGL performs "Compare and Exchange". +// +// Mnemonic : CMPXCHG +// Supported forms : (2 forms) +// +// * CMPXCHGL r32, r32 +// * CMPXCHGL r32, m32 +// +func (self *Program) CMPXCHGL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMPXCHGL", 2, Operands { v0, v1 }) + // CMPXCHGL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xb1) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // CMPXCHGL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xb1) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMPXCHGL") + } + return p +} + +// CMPXCHGQ performs "Compare and Exchange". +// +// Mnemonic : CMPXCHG +// Supported forms : (2 forms) +// +// * CMPXCHGQ r64, r64 +// * CMPXCHGQ r64, m64 +// +func (self *Program) CMPXCHGQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMPXCHGQ", 2, Operands { v0, v1 }) + // CMPXCHGQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x0f) + m.emit(0xb1) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // CMPXCHGQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x0f) + m.emit(0xb1) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMPXCHGQ") + } + return p +} + +// CMPXCHGW performs "Compare and Exchange". +// +// Mnemonic : CMPXCHG +// Supported forms : (2 forms) +// +// * CMPXCHGW r16, r16 +// * CMPXCHGW r16, m16 +// +func (self *Program) CMPXCHGW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CMPXCHGW", 2, Operands { v0, v1 }) + // CMPXCHGW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xb1) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // CMPXCHGW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xb1) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CMPXCHGW") + } + return p +} + +// COMISD performs "Compare Scalar Ordered Double-Precision Floating-Point Values and Set EFLAGS". +// +// Mnemonic : COMISD +// Supported forms : (2 forms) +// +// * COMISD xmm, xmm [SSE2] +// * COMISD m64, xmm [SSE2] +// +func (self *Program) COMISD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("COMISD", 2, Operands { v0, v1 }) + // COMISD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // COMISD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for COMISD") + } + return p +} + +// COMISS performs "Compare Scalar Ordered Single-Precision Floating-Point Values and Set EFLAGS". +// +// Mnemonic : COMISS +// Supported forms : (2 forms) +// +// * COMISS xmm, xmm [SSE] +// * COMISS m32, xmm [SSE] +// +func (self *Program) COMISS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("COMISS", 2, Operands { v0, v1 }) + // COMISS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // COMISS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for COMISS") + } + return p +} + +// CPUID performs "CPU Identification". +// +// Mnemonic : CPUID +// Supported forms : (1 form) +// +// * CPUID [CPUID] +// +func (self *Program) CPUID() *Instruction { + p := self.alloc("CPUID", 0, Operands { }) + // CPUID + self.require(ISA_CPUID) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0xa2) + }) + return p +} + +// CQTO performs "Convert Quadword to Octaword". +// +// Mnemonic : CQO +// Supported forms : (1 form) +// +// * CQTO +// +func (self *Program) CQTO() *Instruction { + p := self.alloc("CQTO", 0, Operands { }) + // CQTO + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48) + m.emit(0x99) + }) + return p +} + +// CRC32B performs "Accumulate CRC32 Value". +// +// Mnemonic : CRC32 +// Supported forms : (4 forms) +// +// * CRC32B r8, r32 [SSE4.2] +// * CRC32B m8, r32 [SSE4.2] +// * CRC32B r8, r64 [SSE4.2] +// * CRC32B m8, r64 [SSE4.2] +// +func (self *Program) CRC32B(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CRC32B", 2, Operands { v0, v1 }) + // CRC32B r8, r32 + if isReg8(v0) && isReg32(v1) { + self.require(ISA_SSE4_2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf0) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CRC32B m8, r32 + if isM8(v0) && isReg32(v1) { + self.require(ISA_SSE4_2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf0) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CRC32B r8, r64 + if isReg8(v0) && isReg64(v1) { + self.require(ISA_SSE4_2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf0) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CRC32B m8, r64 + if isM8(v0) && isReg64(v1) { + self.require(ISA_SSE4_2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf0) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CRC32B") + } + return p +} + +// CRC32L performs "Accumulate CRC32 Value". +// +// Mnemonic : CRC32 +// Supported forms : (2 forms) +// +// * CRC32L r32, r32 [SSE4.2] +// * CRC32L m32, r32 [SSE4.2] +// +func (self *Program) CRC32L(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CRC32L", 2, Operands { v0, v1 }) + // CRC32L r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_SSE4_2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf1) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CRC32L m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_SSE4_2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf1) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CRC32L") + } + return p +} + +// CRC32Q performs "Accumulate CRC32 Value". +// +// Mnemonic : CRC32 +// Supported forms : (2 forms) +// +// * CRC32Q r64, r64 [SSE4.2] +// * CRC32Q m64, r64 [SSE4.2] +// +func (self *Program) CRC32Q(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CRC32Q", 2, Operands { v0, v1 }) + // CRC32Q r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_SSE4_2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf1) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CRC32Q m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_SSE4_2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf1) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CRC32Q") + } + return p +} + +// CRC32W performs "Accumulate CRC32 Value". +// +// Mnemonic : CRC32 +// Supported forms : (2 forms) +// +// * CRC32W r16, r32 [SSE4.2] +// * CRC32W m16, r32 [SSE4.2] +// +func (self *Program) CRC32W(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CRC32W", 2, Operands { v0, v1 }) + // CRC32W r16, r32 + if isReg16(v0) && isReg32(v1) { + self.require(ISA_SSE4_2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf1) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CRC32W m16, r32 + if isM16(v0) && isReg32(v1) { + self.require(ISA_SSE4_2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf1) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CRC32W") + } + return p +} + +// CVTDQ2PD performs "Convert Packed Dword Integers to Packed Double-Precision FP Values". +// +// Mnemonic : CVTDQ2PD +// Supported forms : (2 forms) +// +// * CVTDQ2PD xmm, xmm [SSE2] +// * CVTDQ2PD m64, xmm [SSE2] +// +func (self *Program) CVTDQ2PD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTDQ2PD", 2, Operands { v0, v1 }) + // CVTDQ2PD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTDQ2PD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTDQ2PD") + } + return p +} + +// CVTDQ2PS performs "Convert Packed Dword Integers to Packed Single-Precision FP Values". +// +// Mnemonic : CVTDQ2PS +// Supported forms : (2 forms) +// +// * CVTDQ2PS xmm, xmm [SSE2] +// * CVTDQ2PS m128, xmm [SSE2] +// +func (self *Program) CVTDQ2PS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTDQ2PS", 2, Operands { v0, v1 }) + // CVTDQ2PS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTDQ2PS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTDQ2PS") + } + return p +} + +// CVTPD2DQ performs "Convert Packed Double-Precision FP Values to Packed Dword Integers". +// +// Mnemonic : CVTPD2DQ +// Supported forms : (2 forms) +// +// * CVTPD2DQ xmm, xmm [SSE2] +// * CVTPD2DQ m128, xmm [SSE2] +// +func (self *Program) CVTPD2DQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTPD2DQ", 2, Operands { v0, v1 }) + // CVTPD2DQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTPD2DQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTPD2DQ") + } + return p +} + +// CVTPD2PI performs "Convert Packed Double-Precision FP Values to Packed Dword Integers". +// +// Mnemonic : CVTPD2PI +// Supported forms : (2 forms) +// +// * CVTPD2PI xmm, mm [SSE] +// * CVTPD2PI m128, mm [SSE] +// +func (self *Program) CVTPD2PI(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTPD2PI", 2, Operands { v0, v1 }) + // CVTPD2PI xmm, mm + if isXMM(v0) && isMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTPD2PI m128, mm + if isM128(v0) && isMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTPD2PI") + } + return p +} + +// CVTPD2PS performs "Convert Packed Double-Precision FP Values to Packed Single-Precision FP Values". +// +// Mnemonic : CVTPD2PS +// Supported forms : (2 forms) +// +// * CVTPD2PS xmm, xmm [SSE2] +// * CVTPD2PS m128, xmm [SSE2] +// +func (self *Program) CVTPD2PS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTPD2PS", 2, Operands { v0, v1 }) + // CVTPD2PS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTPD2PS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTPD2PS") + } + return p +} + +// CVTPI2PD performs "Convert Packed Dword Integers to Packed Double-Precision FP Values". +// +// Mnemonic : CVTPI2PD +// Supported forms : (2 forms) +// +// * CVTPI2PD mm, xmm [SSE2] +// * CVTPI2PD m64, xmm [SSE2] +// +func (self *Program) CVTPI2PD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTPI2PD", 2, Operands { v0, v1 }) + // CVTPI2PD mm, xmm + if isMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTPI2PD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTPI2PD") + } + return p +} + +// CVTPI2PS performs "Convert Packed Dword Integers to Packed Single-Precision FP Values". +// +// Mnemonic : CVTPI2PS +// Supported forms : (2 forms) +// +// * CVTPI2PS mm, xmm [SSE] +// * CVTPI2PS m64, xmm [SSE] +// +func (self *Program) CVTPI2PS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTPI2PS", 2, Operands { v0, v1 }) + // CVTPI2PS mm, xmm + if isMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTPI2PS m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTPI2PS") + } + return p +} + +// CVTPS2DQ performs "Convert Packed Single-Precision FP Values to Packed Dword Integers". +// +// Mnemonic : CVTPS2DQ +// Supported forms : (2 forms) +// +// * CVTPS2DQ xmm, xmm [SSE2] +// * CVTPS2DQ m128, xmm [SSE2] +// +func (self *Program) CVTPS2DQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTPS2DQ", 2, Operands { v0, v1 }) + // CVTPS2DQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTPS2DQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTPS2DQ") + } + return p +} + +// CVTPS2PD performs "Convert Packed Single-Precision FP Values to Packed Double-Precision FP Values". +// +// Mnemonic : CVTPS2PD +// Supported forms : (2 forms) +// +// * CVTPS2PD xmm, xmm [SSE2] +// * CVTPS2PD m64, xmm [SSE2] +// +func (self *Program) CVTPS2PD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTPS2PD", 2, Operands { v0, v1 }) + // CVTPS2PD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTPS2PD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTPS2PD") + } + return p +} + +// CVTPS2PI performs "Convert Packed Single-Precision FP Values to Packed Dword Integers". +// +// Mnemonic : CVTPS2PI +// Supported forms : (2 forms) +// +// * CVTPS2PI xmm, mm [SSE] +// * CVTPS2PI m64, mm [SSE] +// +func (self *Program) CVTPS2PI(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTPS2PI", 2, Operands { v0, v1 }) + // CVTPS2PI xmm, mm + if isXMM(v0) && isMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTPS2PI m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTPS2PI") + } + return p +} + +// CVTSD2SI performs "Convert Scalar Double-Precision FP Value to Integer". +// +// Mnemonic : CVTSD2SI +// Supported forms : (4 forms) +// +// * CVTSD2SI xmm, r32 [SSE2] +// * CVTSD2SI m64, r32 [SSE2] +// * CVTSD2SI xmm, r64 [SSE2] +// * CVTSD2SI m64, r64 [SSE2] +// +func (self *Program) CVTSD2SI(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTSD2SI", 2, Operands { v0, v1 }) + // CVTSD2SI xmm, r32 + if isXMM(v0) && isReg32(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTSD2SI m64, r32 + if isM64(v0) && isReg32(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CVTSD2SI xmm, r64 + if isXMM(v0) && isReg64(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTSD2SI m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTSD2SI") + } + return p +} + +// CVTSD2SS performs "Convert Scalar Double-Precision FP Value to Scalar Single-Precision FP Value". +// +// Mnemonic : CVTSD2SS +// Supported forms : (2 forms) +// +// * CVTSD2SS xmm, xmm [SSE2] +// * CVTSD2SS m64, xmm [SSE2] +// +func (self *Program) CVTSD2SS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTSD2SS", 2, Operands { v0, v1 }) + // CVTSD2SS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTSD2SS m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTSD2SS") + } + return p +} + +// CVTSI2SD performs "Convert Dword Integer to Scalar Double-Precision FP Value". +// +// Mnemonic : CVTSI2SD +// Supported forms : (4 forms) +// +// * CVTSI2SD r32, xmm [SSE2] +// * CVTSI2SD r64, xmm [SSE2] +// * CVTSI2SD m32, xmm [SSE2] +// * CVTSI2SD m64, xmm [SSE2] +// +func (self *Program) CVTSI2SD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTSI2SD", 2, Operands { v0, v1 }) + // CVTSI2SD r32, xmm + if isReg32(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTSI2SD r64, xmm + if isReg64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTSI2SD m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CVTSI2SD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTSI2SD") + } + return p +} + +// CVTSI2SS performs "Convert Dword Integer to Scalar Single-Precision FP Value". +// +// Mnemonic : CVTSI2SS +// Supported forms : (4 forms) +// +// * CVTSI2SS r32, xmm [SSE] +// * CVTSI2SS r64, xmm [SSE] +// * CVTSI2SS m32, xmm [SSE] +// * CVTSI2SS m64, xmm [SSE] +// +func (self *Program) CVTSI2SS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTSI2SS", 2, Operands { v0, v1 }) + // CVTSI2SS r32, xmm + if isReg32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTSI2SS r64, xmm + if isReg64(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTSI2SS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CVTSI2SS m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTSI2SS") + } + return p +} + +// CVTSS2SD performs "Convert Scalar Single-Precision FP Value to Scalar Double-Precision FP Value". +// +// Mnemonic : CVTSS2SD +// Supported forms : (2 forms) +// +// * CVTSS2SD xmm, xmm [SSE2] +// * CVTSS2SD m32, xmm [SSE2] +// +func (self *Program) CVTSS2SD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTSS2SD", 2, Operands { v0, v1 }) + // CVTSS2SD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTSS2SD m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTSS2SD") + } + return p +} + +// CVTSS2SI performs "Convert Scalar Single-Precision FP Value to Dword Integer". +// +// Mnemonic : CVTSS2SI +// Supported forms : (4 forms) +// +// * CVTSS2SI xmm, r32 [SSE] +// * CVTSS2SI m32, r32 [SSE] +// * CVTSS2SI xmm, r64 [SSE] +// * CVTSS2SI m32, r64 [SSE] +// +func (self *Program) CVTSS2SI(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTSS2SI", 2, Operands { v0, v1 }) + // CVTSS2SI xmm, r32 + if isXMM(v0) && isReg32(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTSS2SI m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CVTSS2SI xmm, r64 + if isXMM(v0) && isReg64(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTSS2SI m32, r64 + if isM32(v0) && isReg64(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTSS2SI") + } + return p +} + +// CVTTPD2DQ performs "Convert with Truncation Packed Double-Precision FP Values to Packed Dword Integers". +// +// Mnemonic : CVTTPD2DQ +// Supported forms : (2 forms) +// +// * CVTTPD2DQ xmm, xmm [SSE2] +// * CVTTPD2DQ m128, xmm [SSE2] +// +func (self *Program) CVTTPD2DQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTTPD2DQ", 2, Operands { v0, v1 }) + // CVTTPD2DQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTTPD2DQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTTPD2DQ") + } + return p +} + +// CVTTPD2PI performs "Convert with Truncation Packed Double-Precision FP Values to Packed Dword Integers". +// +// Mnemonic : CVTTPD2PI +// Supported forms : (2 forms) +// +// * CVTTPD2PI xmm, mm [SSE2] +// * CVTTPD2PI m128, mm [SSE2] +// +func (self *Program) CVTTPD2PI(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTTPD2PI", 2, Operands { v0, v1 }) + // CVTTPD2PI xmm, mm + if isXMM(v0) && isMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTTPD2PI m128, mm + if isM128(v0) && isMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTTPD2PI") + } + return p +} + +// CVTTPS2DQ performs "Convert with Truncation Packed Single-Precision FP Values to Packed Dword Integers". +// +// Mnemonic : CVTTPS2DQ +// Supported forms : (2 forms) +// +// * CVTTPS2DQ xmm, xmm [SSE2] +// * CVTTPS2DQ m128, xmm [SSE2] +// +func (self *Program) CVTTPS2DQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTTPS2DQ", 2, Operands { v0, v1 }) + // CVTTPS2DQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTTPS2DQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTTPS2DQ") + } + return p +} + +// CVTTPS2PI performs "Convert with Truncation Packed Single-Precision FP Values to Packed Dword Integers". +// +// Mnemonic : CVTTPS2PI +// Supported forms : (2 forms) +// +// * CVTTPS2PI xmm, mm [SSE] +// * CVTTPS2PI m64, mm [SSE] +// +func (self *Program) CVTTPS2PI(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTTPS2PI", 2, Operands { v0, v1 }) + // CVTTPS2PI xmm, mm + if isXMM(v0) && isMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTTPS2PI m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTTPS2PI") + } + return p +} + +// CVTTSD2SI performs "Convert with Truncation Scalar Double-Precision FP Value to Signed Integer". +// +// Mnemonic : CVTTSD2SI +// Supported forms : (4 forms) +// +// * CVTTSD2SI xmm, r32 [SSE2] +// * CVTTSD2SI m64, r32 [SSE2] +// * CVTTSD2SI xmm, r64 [SSE2] +// * CVTTSD2SI m64, r64 [SSE2] +// +func (self *Program) CVTTSD2SI(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTTSD2SI", 2, Operands { v0, v1 }) + // CVTTSD2SI xmm, r32 + if isXMM(v0) && isReg32(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTTSD2SI m64, r32 + if isM64(v0) && isReg32(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CVTTSD2SI xmm, r64 + if isXMM(v0) && isReg64(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTTSD2SI m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTTSD2SI") + } + return p +} + +// CVTTSS2SI performs "Convert with Truncation Scalar Single-Precision FP Value to Dword Integer". +// +// Mnemonic : CVTTSS2SI +// Supported forms : (4 forms) +// +// * CVTTSS2SI xmm, r32 [SSE] +// * CVTTSS2SI m32, r32 [SSE] +// * CVTTSS2SI xmm, r64 [SSE] +// * CVTTSS2SI m32, r64 [SSE] +// +func (self *Program) CVTTSS2SI(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("CVTTSS2SI", 2, Operands { v0, v1 }) + // CVTTSS2SI xmm, r32 + if isXMM(v0) && isReg32(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTTSS2SI m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // CVTTSS2SI xmm, r64 + if isXMM(v0) && isReg64(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // CVTTSS2SI m32, r64 + if isM32(v0) && isReg64(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for CVTTSS2SI") + } + return p +} + +// CWTD performs "Convert Word to Doubleword". +// +// Mnemonic : CWD +// Supported forms : (1 form) +// +// * CWTD +// +func (self *Program) CWTD() *Instruction { + p := self.alloc("CWTD", 0, Operands { }) + // CWTD + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x99) + }) + return p +} + +// CWTL performs "Convert Word to Doubleword". +// +// Mnemonic : CWDE +// Supported forms : (1 form) +// +// * CWTL +// +func (self *Program) CWTL() *Instruction { + p := self.alloc("CWTL", 0, Operands { }) + // CWTL + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x98) + }) + return p +} + +// DECB performs "Decrement by 1". +// +// Mnemonic : DEC +// Supported forms : (2 forms) +// +// * DECB r8 +// * DECB m8 +// +func (self *Program) DECB(v0 interface{}) *Instruction { + p := self.alloc("DECB", 1, Operands { v0 }) + // DECB r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0xfe) + m.emit(0xc8 | lcode(v[0])) + }) + } + // DECB m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xfe) + m.mrsd(1, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for DECB") + } + return p +} + +// DECL performs "Decrement by 1". +// +// Mnemonic : DEC +// Supported forms : (2 forms) +// +// * DECL r32 +// * DECL m32 +// +func (self *Program) DECL(v0 interface{}) *Instruction { + p := self.alloc("DECL", 1, Operands { v0 }) + // DECL r32 + if isReg32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0xff) + m.emit(0xc8 | lcode(v[0])) + }) + } + // DECL m32 + if isM32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xff) + m.mrsd(1, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for DECL") + } + return p +} + +// DECQ performs "Decrement by 1". +// +// Mnemonic : DEC +// Supported forms : (2 forms) +// +// * DECQ r64 +// * DECQ m64 +// +func (self *Program) DECQ(v0 interface{}) *Instruction { + p := self.alloc("DECQ", 1, Operands { v0 }) + // DECQ r64 + if isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0])) + m.emit(0xff) + m.emit(0xc8 | lcode(v[0])) + }) + } + // DECQ m64 + if isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[0])) + m.emit(0xff) + m.mrsd(1, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for DECQ") + } + return p +} + +// DECW performs "Decrement by 1". +// +// Mnemonic : DEC +// Supported forms : (2 forms) +// +// * DECW r16 +// * DECW m16 +// +func (self *Program) DECW(v0 interface{}) *Instruction { + p := self.alloc("DECW", 1, Operands { v0 }) + // DECW r16 + if isReg16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0xff) + m.emit(0xc8 | lcode(v[0])) + }) + } + // DECW m16 + if isM16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[0]), false) + m.emit(0xff) + m.mrsd(1, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for DECW") + } + return p +} + +// DIVB performs "Unsigned Divide". +// +// Mnemonic : DIV +// Supported forms : (2 forms) +// +// * DIVB r8 +// * DIVB m8 +// +func (self *Program) DIVB(v0 interface{}) *Instruction { + p := self.alloc("DIVB", 1, Operands { v0 }) + // DIVB r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0xf6) + m.emit(0xf0 | lcode(v[0])) + }) + } + // DIVB m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xf6) + m.mrsd(6, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for DIVB") + } + return p +} + +// DIVL performs "Unsigned Divide". +// +// Mnemonic : DIV +// Supported forms : (2 forms) +// +// * DIVL r32 +// * DIVL m32 +// +func (self *Program) DIVL(v0 interface{}) *Instruction { + p := self.alloc("DIVL", 1, Operands { v0 }) + // DIVL r32 + if isReg32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0xf7) + m.emit(0xf0 | lcode(v[0])) + }) + } + // DIVL m32 + if isM32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xf7) + m.mrsd(6, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for DIVL") + } + return p +} + +// DIVPD performs "Divide Packed Double-Precision Floating-Point Values". +// +// Mnemonic : DIVPD +// Supported forms : (2 forms) +// +// * DIVPD xmm, xmm [SSE2] +// * DIVPD m128, xmm [SSE2] +// +func (self *Program) DIVPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("DIVPD", 2, Operands { v0, v1 }) + // DIVPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // DIVPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for DIVPD") + } + return p +} + +// DIVPS performs "Divide Packed Single-Precision Floating-Point Values". +// +// Mnemonic : DIVPS +// Supported forms : (2 forms) +// +// * DIVPS xmm, xmm [SSE] +// * DIVPS m128, xmm [SSE] +// +func (self *Program) DIVPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("DIVPS", 2, Operands { v0, v1 }) + // DIVPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // DIVPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for DIVPS") + } + return p +} + +// DIVQ performs "Unsigned Divide". +// +// Mnemonic : DIV +// Supported forms : (2 forms) +// +// * DIVQ r64 +// * DIVQ m64 +// +func (self *Program) DIVQ(v0 interface{}) *Instruction { + p := self.alloc("DIVQ", 1, Operands { v0 }) + // DIVQ r64 + if isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0])) + m.emit(0xf7) + m.emit(0xf0 | lcode(v[0])) + }) + } + // DIVQ m64 + if isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[0])) + m.emit(0xf7) + m.mrsd(6, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for DIVQ") + } + return p +} + +// DIVSD performs "Divide Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : DIVSD +// Supported forms : (2 forms) +// +// * DIVSD xmm, xmm [SSE2] +// * DIVSD m64, xmm [SSE2] +// +func (self *Program) DIVSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("DIVSD", 2, Operands { v0, v1 }) + // DIVSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // DIVSD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for DIVSD") + } + return p +} + +// DIVSS performs "Divide Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : DIVSS +// Supported forms : (2 forms) +// +// * DIVSS xmm, xmm [SSE] +// * DIVSS m32, xmm [SSE] +// +func (self *Program) DIVSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("DIVSS", 2, Operands { v0, v1 }) + // DIVSS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // DIVSS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for DIVSS") + } + return p +} + +// DIVW performs "Unsigned Divide". +// +// Mnemonic : DIV +// Supported forms : (2 forms) +// +// * DIVW r16 +// * DIVW m16 +// +func (self *Program) DIVW(v0 interface{}) *Instruction { + p := self.alloc("DIVW", 1, Operands { v0 }) + // DIVW r16 + if isReg16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0xf7) + m.emit(0xf0 | lcode(v[0])) + }) + } + // DIVW m16 + if isM16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[0]), false) + m.emit(0xf7) + m.mrsd(6, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for DIVW") + } + return p +} + +// DPPD performs "Dot Product of Packed Double Precision Floating-Point Values". +// +// Mnemonic : DPPD +// Supported forms : (2 forms) +// +// * DPPD imm8, xmm, xmm [SSE4.1] +// * DPPD imm8, m128, xmm [SSE4.1] +// +func (self *Program) DPPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("DPPD", 3, Operands { v0, v1, v2 }) + // DPPD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x41) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // DPPD imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x41) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for DPPD") + } + return p +} + +// DPPS performs "Dot Product of Packed Single Precision Floating-Point Values". +// +// Mnemonic : DPPS +// Supported forms : (2 forms) +// +// * DPPS imm8, xmm, xmm [SSE4.1] +// * DPPS imm8, m128, xmm [SSE4.1] +// +func (self *Program) DPPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("DPPS", 3, Operands { v0, v1, v2 }) + // DPPS imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x40) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // DPPS imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x40) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for DPPS") + } + return p +} + +// EMMS performs "Exit MMX State". +// +// Mnemonic : EMMS +// Supported forms : (1 form) +// +// * EMMS [MMX] +// +func (self *Program) EMMS() *Instruction { + p := self.alloc("EMMS", 0, Operands { }) + // EMMS + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x77) + }) + return p +} + +// EXTRACTPS performs "Extract Packed Single Precision Floating-Point Value". +// +// Mnemonic : EXTRACTPS +// Supported forms : (2 forms) +// +// * EXTRACTPS imm8, xmm, r32 [SSE4.1] +// * EXTRACTPS imm8, xmm, m32 [SSE4.1] +// +func (self *Program) EXTRACTPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("EXTRACTPS", 3, Operands { v0, v1, v2 }) + // EXTRACTPS imm8, xmm, r32 + if isImm8(v0) && isXMM(v1) && isReg32(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[2], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x17) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // EXTRACTPS imm8, xmm, m32 + if isImm8(v0) && isXMM(v1) && isM32(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[2]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x17) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for EXTRACTPS") + } + return p +} + +// EXTRQ performs "Extract Field". +// +// Mnemonic : EXTRQ +// Supported forms : (2 forms) +// +// * EXTRQ xmm, xmm [SSE4A] +// * EXTRQ imm8, imm8, xmm [SSE4A] +// +func (self *Program) EXTRQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("EXTRQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("EXTRQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction EXTRQ takes 2 or 3 operands") + } + // EXTRQ xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4A) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // EXTRQ imm8, imm8, xmm + if len(vv) == 1 && isImm8(v0) && isImm8(v1) && isXMM(vv[0]) { + self.require(ISA_SSE4A) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[2], false) + m.emit(0x0f) + m.emit(0x78) + m.emit(0xc0 | lcode(v[2])) + m.imm1(toImmAny(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for EXTRQ") + } + return p +} + +// FEMMS performs "Fast Exit Multimedia State". +// +// Mnemonic : FEMMS +// Supported forms : (1 form) +// +// * FEMMS [FEMMS] +// +func (self *Program) FEMMS() *Instruction { + p := self.alloc("FEMMS", 0, Operands { }) + // FEMMS + self.require(ISA_FEMMS) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x0e) + }) + return p +} + +// HADDPD performs "Packed Double-FP Horizontal Add". +// +// Mnemonic : HADDPD +// Supported forms : (2 forms) +// +// * HADDPD xmm, xmm [SSE3] +// * HADDPD m128, xmm [SSE3] +// +func (self *Program) HADDPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("HADDPD", 2, Operands { v0, v1 }) + // HADDPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // HADDPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x7c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for HADDPD") + } + return p +} + +// HADDPS performs "Packed Single-FP Horizontal Add". +// +// Mnemonic : HADDPS +// Supported forms : (2 forms) +// +// * HADDPS xmm, xmm [SSE3] +// * HADDPS m128, xmm [SSE3] +// +func (self *Program) HADDPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("HADDPS", 2, Operands { v0, v1 }) + // HADDPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // HADDPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x7c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for HADDPS") + } + return p +} + +// HSUBPD performs "Packed Double-FP Horizontal Subtract". +// +// Mnemonic : HSUBPD +// Supported forms : (2 forms) +// +// * HSUBPD xmm, xmm [SSE3] +// * HSUBPD m128, xmm [SSE3] +// +func (self *Program) HSUBPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("HSUBPD", 2, Operands { v0, v1 }) + // HSUBPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // HSUBPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x7d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for HSUBPD") + } + return p +} + +// HSUBPS performs "Packed Single-FP Horizontal Subtract". +// +// Mnemonic : HSUBPS +// Supported forms : (2 forms) +// +// * HSUBPS xmm, xmm [SSE3] +// * HSUBPS m128, xmm [SSE3] +// +func (self *Program) HSUBPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("HSUBPS", 2, Operands { v0, v1 }) + // HSUBPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // HSUBPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x7d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for HSUBPS") + } + return p +} + +// IDIVB performs "Signed Divide". +// +// Mnemonic : IDIV +// Supported forms : (2 forms) +// +// * IDIVB r8 +// * IDIVB m8 +// +func (self *Program) IDIVB(v0 interface{}) *Instruction { + p := self.alloc("IDIVB", 1, Operands { v0 }) + // IDIVB r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0xf6) + m.emit(0xf8 | lcode(v[0])) + }) + } + // IDIVB m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xf6) + m.mrsd(7, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for IDIVB") + } + return p +} + +// IDIVL performs "Signed Divide". +// +// Mnemonic : IDIV +// Supported forms : (2 forms) +// +// * IDIVL r32 +// * IDIVL m32 +// +func (self *Program) IDIVL(v0 interface{}) *Instruction { + p := self.alloc("IDIVL", 1, Operands { v0 }) + // IDIVL r32 + if isReg32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0xf7) + m.emit(0xf8 | lcode(v[0])) + }) + } + // IDIVL m32 + if isM32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xf7) + m.mrsd(7, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for IDIVL") + } + return p +} + +// IDIVQ performs "Signed Divide". +// +// Mnemonic : IDIV +// Supported forms : (2 forms) +// +// * IDIVQ r64 +// * IDIVQ m64 +// +func (self *Program) IDIVQ(v0 interface{}) *Instruction { + p := self.alloc("IDIVQ", 1, Operands { v0 }) + // IDIVQ r64 + if isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0])) + m.emit(0xf7) + m.emit(0xf8 | lcode(v[0])) + }) + } + // IDIVQ m64 + if isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[0])) + m.emit(0xf7) + m.mrsd(7, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for IDIVQ") + } + return p +} + +// IDIVW performs "Signed Divide". +// +// Mnemonic : IDIV +// Supported forms : (2 forms) +// +// * IDIVW r16 +// * IDIVW m16 +// +func (self *Program) IDIVW(v0 interface{}) *Instruction { + p := self.alloc("IDIVW", 1, Operands { v0 }) + // IDIVW r16 + if isReg16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0xf7) + m.emit(0xf8 | lcode(v[0])) + }) + } + // IDIVW m16 + if isM16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[0]), false) + m.emit(0xf7) + m.mrsd(7, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for IDIVW") + } + return p +} + +// IMULB performs "Signed Multiply". +// +// Mnemonic : IMUL +// Supported forms : (2 forms) +// +// * IMULB r8 +// * IMULB m8 +// +func (self *Program) IMULB(v0 interface{}) *Instruction { + p := self.alloc("IMULB", 1, Operands { v0 }) + // IMULB r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0xf6) + m.emit(0xe8 | lcode(v[0])) + }) + } + // IMULB m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xf6) + m.mrsd(5, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for IMULB") + } + return p +} + +// IMULL performs "Signed Multiply". +// +// Mnemonic : IMUL +// Supported forms : (8 forms) +// +// * IMULL r32 +// * IMULL m32 +// * IMULL r32, r32 +// * IMULL m32, r32 +// * IMULL imm8, r32, r32 +// * IMULL imm32, r32, r32 +// * IMULL imm8, m32, r32 +// * IMULL imm32, m32, r32 +// +func (self *Program) IMULL(v0 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("IMULL", 1, Operands { v0 }) + case 1 : p = self.alloc("IMULL", 2, Operands { v0, vv[0] }) + case 2 : p = self.alloc("IMULL", 3, Operands { v0, vv[0], vv[1] }) + default : panic("instruction IMULL takes 1 or 2 or 3 operands") + } + // IMULL r32 + if len(vv) == 0 && isReg32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0xf7) + m.emit(0xe8 | lcode(v[0])) + }) + } + // IMULL m32 + if len(vv) == 0 && isM32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xf7) + m.mrsd(5, addr(v[0]), 1) + }) + } + // IMULL r32, r32 + if len(vv) == 1 && isReg32(v0) && isReg32(vv[0]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xaf) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // IMULL m32, r32 + if len(vv) == 1 && isM32(v0) && isReg32(vv[0]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xaf) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // IMULL imm8, r32, r32 + if len(vv) == 2 && isImm8(v0) && isReg32(vv[0]) && isReg32(vv[1]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x6b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // IMULL imm32, r32, r32 + if len(vv) == 2 && isImm32(v0) && isReg32(vv[0]) && isReg32(vv[1]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x69) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // IMULL imm8, m32, r32 + if len(vv) == 2 && isImm8(v0) && isM32(vv[0]) && isReg32(vv[1]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x6b) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // IMULL imm32, m32, r32 + if len(vv) == 2 && isImm32(v0) && isM32(vv[0]) && isReg32(vv[1]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x69) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for IMULL") + } + return p +} + +// IMULQ performs "Signed Multiply". +// +// Mnemonic : IMUL +// Supported forms : (8 forms) +// +// * IMULQ r64 +// * IMULQ m64 +// * IMULQ r64, r64 +// * IMULQ m64, r64 +// * IMULQ imm8, r64, r64 +// * IMULQ imm32, r64, r64 +// * IMULQ imm8, m64, r64 +// * IMULQ imm32, m64, r64 +// +func (self *Program) IMULQ(v0 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("IMULQ", 1, Operands { v0 }) + case 1 : p = self.alloc("IMULQ", 2, Operands { v0, vv[0] }) + case 2 : p = self.alloc("IMULQ", 3, Operands { v0, vv[0], vv[1] }) + default : panic("instruction IMULQ takes 1 or 2 or 3 operands") + } + // IMULQ r64 + if len(vv) == 0 && isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0])) + m.emit(0xf7) + m.emit(0xe8 | lcode(v[0])) + }) + } + // IMULQ m64 + if len(vv) == 0 && isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[0])) + m.emit(0xf7) + m.mrsd(5, addr(v[0]), 1) + }) + } + // IMULQ r64, r64 + if len(vv) == 1 && isReg64(v0) && isReg64(vv[0]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xaf) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // IMULQ m64, r64 + if len(vv) == 1 && isM64(v0) && isReg64(vv[0]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0xaf) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // IMULQ imm8, r64, r64 + if len(vv) == 2 && isImm8(v0) && isReg64(vv[0]) && isReg64(vv[1]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[2]) << 2 | hcode(v[1])) + m.emit(0x6b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // IMULQ imm32, r64, r64 + if len(vv) == 2 && isImm32(v0) && isReg64(vv[0]) && isReg64(vv[1]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[2]) << 2 | hcode(v[1])) + m.emit(0x69) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // IMULQ imm8, m64, r64 + if len(vv) == 2 && isImm8(v0) && isM64(vv[0]) && isReg64(vv[1]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[2]), addr(v[1])) + m.emit(0x6b) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // IMULQ imm32, m64, r64 + if len(vv) == 2 && isImm32(v0) && isM64(vv[0]) && isReg64(vv[1]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[2]), addr(v[1])) + m.emit(0x69) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for IMULQ") + } + return p +} + +// IMULW performs "Signed Multiply". +// +// Mnemonic : IMUL +// Supported forms : (8 forms) +// +// * IMULW r16 +// * IMULW m16 +// * IMULW r16, r16 +// * IMULW m16, r16 +// * IMULW imm8, r16, r16 +// * IMULW imm16, r16, r16 +// * IMULW imm8, m16, r16 +// * IMULW imm16, m16, r16 +// +func (self *Program) IMULW(v0 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("IMULW", 1, Operands { v0 }) + case 1 : p = self.alloc("IMULW", 2, Operands { v0, vv[0] }) + case 2 : p = self.alloc("IMULW", 3, Operands { v0, vv[0], vv[1] }) + default : panic("instruction IMULW takes 1 or 2 or 3 operands") + } + // IMULW r16 + if len(vv) == 0 && isReg16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0xf7) + m.emit(0xe8 | lcode(v[0])) + }) + } + // IMULW m16 + if len(vv) == 0 && isM16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[0]), false) + m.emit(0xf7) + m.mrsd(5, addr(v[0]), 1) + }) + } + // IMULW r16, r16 + if len(vv) == 1 && isReg16(v0) && isReg16(vv[0]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xaf) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // IMULW m16, r16 + if len(vv) == 1 && isM16(v0) && isReg16(vv[0]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xaf) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // IMULW imm8, r16, r16 + if len(vv) == 2 && isImm8(v0) && isReg16(vv[0]) && isReg16(vv[1]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x6b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // IMULW imm16, r16, r16 + if len(vv) == 2 && isImm16(v0) && isReg16(vv[0]) && isReg16(vv[1]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x69) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm2(toImmAny(v[0])) + }) + } + // IMULW imm8, m16, r16 + if len(vv) == 2 && isImm8(v0) && isM16(vv[0]) && isReg16(vv[1]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x6b) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // IMULW imm16, m16, r16 + if len(vv) == 2 && isImm16(v0) && isM16(vv[0]) && isReg16(vv[1]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x69) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm2(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for IMULW") + } + return p +} + +// INCB performs "Increment by 1". +// +// Mnemonic : INC +// Supported forms : (2 forms) +// +// * INCB r8 +// * INCB m8 +// +func (self *Program) INCB(v0 interface{}) *Instruction { + p := self.alloc("INCB", 1, Operands { v0 }) + // INCB r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0xfe) + m.emit(0xc0 | lcode(v[0])) + }) + } + // INCB m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xfe) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for INCB") + } + return p +} + +// INCL performs "Increment by 1". +// +// Mnemonic : INC +// Supported forms : (2 forms) +// +// * INCL r32 +// * INCL m32 +// +func (self *Program) INCL(v0 interface{}) *Instruction { + p := self.alloc("INCL", 1, Operands { v0 }) + // INCL r32 + if isReg32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0xff) + m.emit(0xc0 | lcode(v[0])) + }) + } + // INCL m32 + if isM32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xff) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for INCL") + } + return p +} + +// INCQ performs "Increment by 1". +// +// Mnemonic : INC +// Supported forms : (2 forms) +// +// * INCQ r64 +// * INCQ m64 +// +func (self *Program) INCQ(v0 interface{}) *Instruction { + p := self.alloc("INCQ", 1, Operands { v0 }) + // INCQ r64 + if isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0])) + m.emit(0xff) + m.emit(0xc0 | lcode(v[0])) + }) + } + // INCQ m64 + if isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[0])) + m.emit(0xff) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for INCQ") + } + return p +} + +// INCW performs "Increment by 1". +// +// Mnemonic : INC +// Supported forms : (2 forms) +// +// * INCW r16 +// * INCW m16 +// +func (self *Program) INCW(v0 interface{}) *Instruction { + p := self.alloc("INCW", 1, Operands { v0 }) + // INCW r16 + if isReg16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0xff) + m.emit(0xc0 | lcode(v[0])) + }) + } + // INCW m16 + if isM16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[0]), false) + m.emit(0xff) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for INCW") + } + return p +} + +// INSERTPS performs "Insert Packed Single Precision Floating-Point Value". +// +// Mnemonic : INSERTPS +// Supported forms : (2 forms) +// +// * INSERTPS imm8, xmm, xmm [SSE4.1] +// * INSERTPS imm8, m32, xmm [SSE4.1] +// +func (self *Program) INSERTPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("INSERTPS", 3, Operands { v0, v1, v2 }) + // INSERTPS imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x21) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // INSERTPS imm8, m32, xmm + if isImm8(v0) && isM32(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x21) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for INSERTPS") + } + return p +} + +// INSERTQ performs "Insert Field". +// +// Mnemonic : INSERTQ +// Supported forms : (2 forms) +// +// * INSERTQ xmm, xmm [SSE4A] +// * INSERTQ imm8, imm8, xmm, xmm [SSE4A] +// +func (self *Program) INSERTQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("INSERTQ", 2, Operands { v0, v1 }) + case 2 : p = self.alloc("INSERTQ", 4, Operands { v0, v1, vv[0], vv[1] }) + default : panic("instruction INSERTQ takes 2 or 4 operands") + } + // INSERTQ xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4A) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // INSERTQ imm8, imm8, xmm, xmm + if len(vv) == 2 && isImm8(v0) && isImm8(v1) && isXMM(vv[0]) && isXMM(vv[1]) { + self.require(ISA_SSE4A) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[3]), v[2], false) + m.emit(0x0f) + m.emit(0x78) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for INSERTQ") + } + return p +} + +// INT performs "Call to Interrupt Procedure". +// +// Mnemonic : INT +// Supported forms : (2 forms) +// +// * INT 3 +// * INT imm8 +// +func (self *Program) INT(v0 interface{}) *Instruction { + p := self.alloc("INT", 1, Operands { v0 }) + // INT 3 + if isConst3(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xcc) + }) + } + // INT imm8 + if isImm8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xcd) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for INT") + } + return p +} + +// JA performs "Jump if above (CF == 0 and ZF == 0)". +// +// Mnemonic : JA +// Supported forms : (2 forms) +// +// * JA rel8 +// * JA rel32 +// +func (self *Program) JA(v0 interface{}) *Instruction { + p := self.alloc("JA", 1, Operands { v0 }) + p.branch = _B_conditional + // JA rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x77) + m.imm1(relv(v[0])) + }) + } + // JA rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x87) + m.imm4(relv(v[0])) + }) + } + // JA label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x77) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x87) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JA") + } + return p +} + +// JAE performs "Jump if above or equal (CF == 0)". +// +// Mnemonic : JAE +// Supported forms : (2 forms) +// +// * JAE rel8 +// * JAE rel32 +// +func (self *Program) JAE(v0 interface{}) *Instruction { + p := self.alloc("JAE", 1, Operands { v0 }) + p.branch = _B_conditional + // JAE rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x73) + m.imm1(relv(v[0])) + }) + } + // JAE rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x83) + m.imm4(relv(v[0])) + }) + } + // JAE label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x73) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x83) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JAE") + } + return p +} + +// JB performs "Jump if below (CF == 1)". +// +// Mnemonic : JB +// Supported forms : (2 forms) +// +// * JB rel8 +// * JB rel32 +// +func (self *Program) JB(v0 interface{}) *Instruction { + p := self.alloc("JB", 1, Operands { v0 }) + p.branch = _B_conditional + // JB rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x72) + m.imm1(relv(v[0])) + }) + } + // JB rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x82) + m.imm4(relv(v[0])) + }) + } + // JB label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x72) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x82) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JB") + } + return p +} + +// JBE performs "Jump if below or equal (CF == 1 or ZF == 1)". +// +// Mnemonic : JBE +// Supported forms : (2 forms) +// +// * JBE rel8 +// * JBE rel32 +// +func (self *Program) JBE(v0 interface{}) *Instruction { + p := self.alloc("JBE", 1, Operands { v0 }) + p.branch = _B_conditional + // JBE rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x76) + m.imm1(relv(v[0])) + }) + } + // JBE rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x86) + m.imm4(relv(v[0])) + }) + } + // JBE label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x76) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x86) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JBE") + } + return p +} + +// JC performs "Jump if carry (CF == 1)". +// +// Mnemonic : JC +// Supported forms : (2 forms) +// +// * JC rel8 +// * JC rel32 +// +func (self *Program) JC(v0 interface{}) *Instruction { + p := self.alloc("JC", 1, Operands { v0 }) + p.branch = _B_conditional + // JC rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x72) + m.imm1(relv(v[0])) + }) + } + // JC rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x82) + m.imm4(relv(v[0])) + }) + } + // JC label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x72) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x82) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JC") + } + return p +} + +// JE performs "Jump if equal (ZF == 1)". +// +// Mnemonic : JE +// Supported forms : (2 forms) +// +// * JE rel8 +// * JE rel32 +// +func (self *Program) JE(v0 interface{}) *Instruction { + p := self.alloc("JE", 1, Operands { v0 }) + p.branch = _B_conditional + // JE rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x74) + m.imm1(relv(v[0])) + }) + } + // JE rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x84) + m.imm4(relv(v[0])) + }) + } + // JE label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x74) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x84) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JE") + } + return p +} + +// JECXZ performs "Jump if ECX register is 0". +// +// Mnemonic : JECXZ +// Supported forms : (1 form) +// +// * JECXZ rel8 +// +func (self *Program) JECXZ(v0 interface{}) *Instruction { + p := self.alloc("JECXZ", 1, Operands { v0 }) + p.branch = _B_conditional + // JECXZ rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xe3) + m.imm1(relv(v[0])) + }) + } + // JECXZ label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0xe3) + m.imm1(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JECXZ") + } + return p +} + +// JG performs "Jump if greater (ZF == 0 and SF == OF)". +// +// Mnemonic : JG +// Supported forms : (2 forms) +// +// * JG rel8 +// * JG rel32 +// +func (self *Program) JG(v0 interface{}) *Instruction { + p := self.alloc("JG", 1, Operands { v0 }) + p.branch = _B_conditional + // JG rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x7f) + m.imm1(relv(v[0])) + }) + } + // JG rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8f) + m.imm4(relv(v[0])) + }) + } + // JG label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x7f) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8f) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JG") + } + return p +} + +// JGE performs "Jump if greater or equal (SF == OF)". +// +// Mnemonic : JGE +// Supported forms : (2 forms) +// +// * JGE rel8 +// * JGE rel32 +// +func (self *Program) JGE(v0 interface{}) *Instruction { + p := self.alloc("JGE", 1, Operands { v0 }) + p.branch = _B_conditional + // JGE rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x7d) + m.imm1(relv(v[0])) + }) + } + // JGE rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8d) + m.imm4(relv(v[0])) + }) + } + // JGE label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x7d) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8d) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JGE") + } + return p +} + +// JL performs "Jump if less (SF != OF)". +// +// Mnemonic : JL +// Supported forms : (2 forms) +// +// * JL rel8 +// * JL rel32 +// +func (self *Program) JL(v0 interface{}) *Instruction { + p := self.alloc("JL", 1, Operands { v0 }) + p.branch = _B_conditional + // JL rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x7c) + m.imm1(relv(v[0])) + }) + } + // JL rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8c) + m.imm4(relv(v[0])) + }) + } + // JL label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x7c) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8c) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JL") + } + return p +} + +// JLE performs "Jump if less or equal (ZF == 1 or SF != OF)". +// +// Mnemonic : JLE +// Supported forms : (2 forms) +// +// * JLE rel8 +// * JLE rel32 +// +func (self *Program) JLE(v0 interface{}) *Instruction { + p := self.alloc("JLE", 1, Operands { v0 }) + p.branch = _B_conditional + // JLE rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x7e) + m.imm1(relv(v[0])) + }) + } + // JLE rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8e) + m.imm4(relv(v[0])) + }) + } + // JLE label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x7e) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8e) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JLE") + } + return p +} + +// JMP performs "Jump Unconditionally". +// +// Mnemonic : JMP +// Supported forms : (2 forms) +// +// * JMP rel8 +// * JMP rel32 +// +func (self *Program) JMP(v0 interface{}) *Instruction { + p := self.alloc("JMP", 1, Operands { v0 }) + p.branch = _B_unconditional + // JMP rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xeb) + m.imm1(relv(v[0])) + }) + } + // JMP rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xe9) + m.imm4(relv(v[0])) + }) + } + // JMP label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0xeb) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0xe9) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JMP") + } + return p +} + +// JMPQ performs "Jump Unconditionally". +// +// Mnemonic : JMP +// Supported forms : (2 forms) +// +// * JMPQ r64 +// * JMPQ m64 +// +func (self *Program) JMPQ(v0 interface{}) *Instruction { + p := self.alloc("JMPQ", 1, Operands { v0 }) + // JMPQ r64 + if isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0xff) + m.emit(0xe0 | lcode(v[0])) + }) + } + // JMPQ m64 + if isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xff) + m.mrsd(4, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for JMPQ") + } + return p +} + +// JNA performs "Jump if not above (CF == 1 or ZF == 1)". +// +// Mnemonic : JNA +// Supported forms : (2 forms) +// +// * JNA rel8 +// * JNA rel32 +// +func (self *Program) JNA(v0 interface{}) *Instruction { + p := self.alloc("JNA", 1, Operands { v0 }) + p.branch = _B_conditional + // JNA rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x76) + m.imm1(relv(v[0])) + }) + } + // JNA rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x86) + m.imm4(relv(v[0])) + }) + } + // JNA label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x76) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x86) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNA") + } + return p +} + +// JNAE performs "Jump if not above or equal (CF == 1)". +// +// Mnemonic : JNAE +// Supported forms : (2 forms) +// +// * JNAE rel8 +// * JNAE rel32 +// +func (self *Program) JNAE(v0 interface{}) *Instruction { + p := self.alloc("JNAE", 1, Operands { v0 }) + p.branch = _B_conditional + // JNAE rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x72) + m.imm1(relv(v[0])) + }) + } + // JNAE rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x82) + m.imm4(relv(v[0])) + }) + } + // JNAE label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x72) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x82) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNAE") + } + return p +} + +// JNB performs "Jump if not below (CF == 0)". +// +// Mnemonic : JNB +// Supported forms : (2 forms) +// +// * JNB rel8 +// * JNB rel32 +// +func (self *Program) JNB(v0 interface{}) *Instruction { + p := self.alloc("JNB", 1, Operands { v0 }) + p.branch = _B_conditional + // JNB rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x73) + m.imm1(relv(v[0])) + }) + } + // JNB rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x83) + m.imm4(relv(v[0])) + }) + } + // JNB label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x73) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x83) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNB") + } + return p +} + +// JNBE performs "Jump if not below or equal (CF == 0 and ZF == 0)". +// +// Mnemonic : JNBE +// Supported forms : (2 forms) +// +// * JNBE rel8 +// * JNBE rel32 +// +func (self *Program) JNBE(v0 interface{}) *Instruction { + p := self.alloc("JNBE", 1, Operands { v0 }) + p.branch = _B_conditional + // JNBE rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x77) + m.imm1(relv(v[0])) + }) + } + // JNBE rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x87) + m.imm4(relv(v[0])) + }) + } + // JNBE label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x77) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x87) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNBE") + } + return p +} + +// JNC performs "Jump if not carry (CF == 0)". +// +// Mnemonic : JNC +// Supported forms : (2 forms) +// +// * JNC rel8 +// * JNC rel32 +// +func (self *Program) JNC(v0 interface{}) *Instruction { + p := self.alloc("JNC", 1, Operands { v0 }) + p.branch = _B_conditional + // JNC rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x73) + m.imm1(relv(v[0])) + }) + } + // JNC rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x83) + m.imm4(relv(v[0])) + }) + } + // JNC label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x73) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x83) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNC") + } + return p +} + +// JNE performs "Jump if not equal (ZF == 0)". +// +// Mnemonic : JNE +// Supported forms : (2 forms) +// +// * JNE rel8 +// * JNE rel32 +// +func (self *Program) JNE(v0 interface{}) *Instruction { + p := self.alloc("JNE", 1, Operands { v0 }) + p.branch = _B_conditional + // JNE rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x75) + m.imm1(relv(v[0])) + }) + } + // JNE rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x85) + m.imm4(relv(v[0])) + }) + } + // JNE label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x75) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x85) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNE") + } + return p +} + +// JNG performs "Jump if not greater (ZF == 1 or SF != OF)". +// +// Mnemonic : JNG +// Supported forms : (2 forms) +// +// * JNG rel8 +// * JNG rel32 +// +func (self *Program) JNG(v0 interface{}) *Instruction { + p := self.alloc("JNG", 1, Operands { v0 }) + p.branch = _B_conditional + // JNG rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x7e) + m.imm1(relv(v[0])) + }) + } + // JNG rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8e) + m.imm4(relv(v[0])) + }) + } + // JNG label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x7e) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8e) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNG") + } + return p +} + +// JNGE performs "Jump if not greater or equal (SF != OF)". +// +// Mnemonic : JNGE +// Supported forms : (2 forms) +// +// * JNGE rel8 +// * JNGE rel32 +// +func (self *Program) JNGE(v0 interface{}) *Instruction { + p := self.alloc("JNGE", 1, Operands { v0 }) + p.branch = _B_conditional + // JNGE rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x7c) + m.imm1(relv(v[0])) + }) + } + // JNGE rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8c) + m.imm4(relv(v[0])) + }) + } + // JNGE label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x7c) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8c) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNGE") + } + return p +} + +// JNL performs "Jump if not less (SF == OF)". +// +// Mnemonic : JNL +// Supported forms : (2 forms) +// +// * JNL rel8 +// * JNL rel32 +// +func (self *Program) JNL(v0 interface{}) *Instruction { + p := self.alloc("JNL", 1, Operands { v0 }) + p.branch = _B_conditional + // JNL rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x7d) + m.imm1(relv(v[0])) + }) + } + // JNL rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8d) + m.imm4(relv(v[0])) + }) + } + // JNL label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x7d) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8d) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNL") + } + return p +} + +// JNLE performs "Jump if not less or equal (ZF == 0 and SF == OF)". +// +// Mnemonic : JNLE +// Supported forms : (2 forms) +// +// * JNLE rel8 +// * JNLE rel32 +// +func (self *Program) JNLE(v0 interface{}) *Instruction { + p := self.alloc("JNLE", 1, Operands { v0 }) + p.branch = _B_conditional + // JNLE rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x7f) + m.imm1(relv(v[0])) + }) + } + // JNLE rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8f) + m.imm4(relv(v[0])) + }) + } + // JNLE label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x7f) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8f) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNLE") + } + return p +} + +// JNO performs "Jump if not overflow (OF == 0)". +// +// Mnemonic : JNO +// Supported forms : (2 forms) +// +// * JNO rel8 +// * JNO rel32 +// +func (self *Program) JNO(v0 interface{}) *Instruction { + p := self.alloc("JNO", 1, Operands { v0 }) + p.branch = _B_conditional + // JNO rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x71) + m.imm1(relv(v[0])) + }) + } + // JNO rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x81) + m.imm4(relv(v[0])) + }) + } + // JNO label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x71) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x81) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNO") + } + return p +} + +// JNP performs "Jump if not parity (PF == 0)". +// +// Mnemonic : JNP +// Supported forms : (2 forms) +// +// * JNP rel8 +// * JNP rel32 +// +func (self *Program) JNP(v0 interface{}) *Instruction { + p := self.alloc("JNP", 1, Operands { v0 }) + p.branch = _B_conditional + // JNP rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x7b) + m.imm1(relv(v[0])) + }) + } + // JNP rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8b) + m.imm4(relv(v[0])) + }) + } + // JNP label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x7b) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8b) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNP") + } + return p +} + +// JNS performs "Jump if not sign (SF == 0)". +// +// Mnemonic : JNS +// Supported forms : (2 forms) +// +// * JNS rel8 +// * JNS rel32 +// +func (self *Program) JNS(v0 interface{}) *Instruction { + p := self.alloc("JNS", 1, Operands { v0 }) + p.branch = _B_conditional + // JNS rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x79) + m.imm1(relv(v[0])) + }) + } + // JNS rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x89) + m.imm4(relv(v[0])) + }) + } + // JNS label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x79) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x89) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNS") + } + return p +} + +// JNZ performs "Jump if not zero (ZF == 0)". +// +// Mnemonic : JNZ +// Supported forms : (2 forms) +// +// * JNZ rel8 +// * JNZ rel32 +// +func (self *Program) JNZ(v0 interface{}) *Instruction { + p := self.alloc("JNZ", 1, Operands { v0 }) + p.branch = _B_conditional + // JNZ rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x75) + m.imm1(relv(v[0])) + }) + } + // JNZ rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x85) + m.imm4(relv(v[0])) + }) + } + // JNZ label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x75) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x85) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JNZ") + } + return p +} + +// JO performs "Jump if overflow (OF == 1)". +// +// Mnemonic : JO +// Supported forms : (2 forms) +// +// * JO rel8 +// * JO rel32 +// +func (self *Program) JO(v0 interface{}) *Instruction { + p := self.alloc("JO", 1, Operands { v0 }) + p.branch = _B_conditional + // JO rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x70) + m.imm1(relv(v[0])) + }) + } + // JO rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x80) + m.imm4(relv(v[0])) + }) + } + // JO label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x70) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x80) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JO") + } + return p +} + +// JP performs "Jump if parity (PF == 1)". +// +// Mnemonic : JP +// Supported forms : (2 forms) +// +// * JP rel8 +// * JP rel32 +// +func (self *Program) JP(v0 interface{}) *Instruction { + p := self.alloc("JP", 1, Operands { v0 }) + p.branch = _B_conditional + // JP rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x7a) + m.imm1(relv(v[0])) + }) + } + // JP rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8a) + m.imm4(relv(v[0])) + }) + } + // JP label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x7a) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8a) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JP") + } + return p +} + +// JPE performs "Jump if parity even (PF == 1)". +// +// Mnemonic : JPE +// Supported forms : (2 forms) +// +// * JPE rel8 +// * JPE rel32 +// +func (self *Program) JPE(v0 interface{}) *Instruction { + p := self.alloc("JPE", 1, Operands { v0 }) + p.branch = _B_conditional + // JPE rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x7a) + m.imm1(relv(v[0])) + }) + } + // JPE rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8a) + m.imm4(relv(v[0])) + }) + } + // JPE label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x7a) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8a) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JPE") + } + return p +} + +// JPO performs "Jump if parity odd (PF == 0)". +// +// Mnemonic : JPO +// Supported forms : (2 forms) +// +// * JPO rel8 +// * JPO rel32 +// +func (self *Program) JPO(v0 interface{}) *Instruction { + p := self.alloc("JPO", 1, Operands { v0 }) + p.branch = _B_conditional + // JPO rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x7b) + m.imm1(relv(v[0])) + }) + } + // JPO rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8b) + m.imm4(relv(v[0])) + }) + } + // JPO label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x7b) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x8b) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JPO") + } + return p +} + +// JRCXZ performs "Jump if RCX register is 0". +// +// Mnemonic : JRCXZ +// Supported forms : (1 form) +// +// * JRCXZ rel8 +// +func (self *Program) JRCXZ(v0 interface{}) *Instruction { + p := self.alloc("JRCXZ", 1, Operands { v0 }) + p.branch = _B_conditional + // JRCXZ rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xe3) + m.imm1(relv(v[0])) + }) + } + // JRCXZ label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0xe3) + m.imm1(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JRCXZ") + } + return p +} + +// JS performs "Jump if sign (SF == 1)". +// +// Mnemonic : JS +// Supported forms : (2 forms) +// +// * JS rel8 +// * JS rel32 +// +func (self *Program) JS(v0 interface{}) *Instruction { + p := self.alloc("JS", 1, Operands { v0 }) + p.branch = _B_conditional + // JS rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x78) + m.imm1(relv(v[0])) + }) + } + // JS rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x88) + m.imm4(relv(v[0])) + }) + } + // JS label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x78) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x88) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JS") + } + return p +} + +// JZ performs "Jump if zero (ZF == 1)". +// +// Mnemonic : JZ +// Supported forms : (2 forms) +// +// * JZ rel8 +// * JZ rel32 +// +func (self *Program) JZ(v0 interface{}) *Instruction { + p := self.alloc("JZ", 1, Operands { v0 }) + p.branch = _B_conditional + // JZ rel8 + if isRel8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x74) + m.imm1(relv(v[0])) + }) + } + // JZ rel32 + if isRel32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x84) + m.imm4(relv(v[0])) + }) + } + // JZ label + if isLabel(v0) { + p.add(_F_rel1, func(m *_Encoding, v []interface{}) { + m.emit(0x74) + m.imm1(relv(v[0])) + }) + p.add(_F_rel4, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x84) + m.imm4(relv(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for JZ") + } + return p +} + +// KADDB performs "ADD Two 8-bit Masks". +// +// Mnemonic : KADDB +// Supported forms : (1 form) +// +// * KADDB k, k, k [AVX512DQ] +// +func (self *Program) KADDB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KADDB", 3, Operands { v0, v1, v2 }) + // KADDB k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, nil, hlcode(v[1])) + m.emit(0x4a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KADDB") + } + return p +} + +// KADDD performs "ADD Two 32-bit Masks". +// +// Mnemonic : KADDD +// Supported forms : (1 form) +// +// * KADDD k, k, k [AVX512BW] +// +func (self *Program) KADDD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KADDD", 3, Operands { v0, v1, v2 }) + // KADDD k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x4a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KADDD") + } + return p +} + +// KADDQ performs "ADD Two 64-bit Masks". +// +// Mnemonic : KADDQ +// Supported forms : (1 form) +// +// * KADDQ k, k, k [AVX512BW] +// +func (self *Program) KADDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KADDQ", 3, Operands { v0, v1, v2 }) + // KADDQ k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfc ^ (hlcode(v[1]) << 3)) + m.emit(0x4a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KADDQ") + } + return p +} + +// KADDW performs "ADD Two 16-bit Masks". +// +// Mnemonic : KADDW +// Supported forms : (1 form) +// +// * KADDW k, k, k [AVX512DQ] +// +func (self *Program) KADDW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KADDW", 3, Operands { v0, v1, v2 }) + // KADDW k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, 0, nil, hlcode(v[1])) + m.emit(0x4a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KADDW") + } + return p +} + +// KANDB performs "Bitwise Logical AND 8-bit Masks". +// +// Mnemonic : KANDB +// Supported forms : (1 form) +// +// * KANDB k, k, k [AVX512DQ] +// +func (self *Program) KANDB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KANDB", 3, Operands { v0, v1, v2 }) + // KANDB k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, nil, hlcode(v[1])) + m.emit(0x41) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KANDB") + } + return p +} + +// KANDD performs "Bitwise Logical AND 32-bit Masks". +// +// Mnemonic : KANDD +// Supported forms : (1 form) +// +// * KANDD k, k, k [AVX512BW] +// +func (self *Program) KANDD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KANDD", 3, Operands { v0, v1, v2 }) + // KANDD k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x41) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KANDD") + } + return p +} + +// KANDNB performs "Bitwise Logical AND NOT 8-bit Masks". +// +// Mnemonic : KANDNB +// Supported forms : (1 form) +// +// * KANDNB k, k, k [AVX512DQ] +// +func (self *Program) KANDNB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KANDNB", 3, Operands { v0, v1, v2 }) + // KANDNB k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, nil, hlcode(v[1])) + m.emit(0x42) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KANDNB") + } + return p +} + +// KANDND performs "Bitwise Logical AND NOT 32-bit Masks". +// +// Mnemonic : KANDND +// Supported forms : (1 form) +// +// * KANDND k, k, k [AVX512BW] +// +func (self *Program) KANDND(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KANDND", 3, Operands { v0, v1, v2 }) + // KANDND k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x42) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KANDND") + } + return p +} + +// KANDNQ performs "Bitwise Logical AND NOT 64-bit Masks". +// +// Mnemonic : KANDNQ +// Supported forms : (1 form) +// +// * KANDNQ k, k, k [AVX512BW] +// +func (self *Program) KANDNQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KANDNQ", 3, Operands { v0, v1, v2 }) + // KANDNQ k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfc ^ (hlcode(v[1]) << 3)) + m.emit(0x42) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KANDNQ") + } + return p +} + +// KANDNW performs "Bitwise Logical AND NOT 16-bit Masks". +// +// Mnemonic : KANDNW +// Supported forms : (1 form) +// +// * KANDNW k, k, k [AVX512F] +// +func (self *Program) KANDNW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KANDNW", 3, Operands { v0, v1, v2 }) + // KANDNW k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, 0, nil, hlcode(v[1])) + m.emit(0x42) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KANDNW") + } + return p +} + +// KANDQ performs "Bitwise Logical AND 64-bit Masks". +// +// Mnemonic : KANDQ +// Supported forms : (1 form) +// +// * KANDQ k, k, k [AVX512BW] +// +func (self *Program) KANDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KANDQ", 3, Operands { v0, v1, v2 }) + // KANDQ k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfc ^ (hlcode(v[1]) << 3)) + m.emit(0x41) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KANDQ") + } + return p +} + +// KANDW performs "Bitwise Logical AND 16-bit Masks". +// +// Mnemonic : KANDW +// Supported forms : (1 form) +// +// * KANDW k, k, k [AVX512F] +// +func (self *Program) KANDW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KANDW", 3, Operands { v0, v1, v2 }) + // KANDW k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, 0, nil, hlcode(v[1])) + m.emit(0x41) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KANDW") + } + return p +} + +// KMOVB performs "Move 8-bit Mask". +// +// Mnemonic : KMOVB +// Supported forms : (5 forms) +// +// * KMOVB k, k [AVX512DQ] +// * KMOVB r32, k [AVX512DQ] +// * KMOVB m8, k [AVX512DQ] +// * KMOVB k, r32 [AVX512DQ] +// * KMOVB k, m8 [AVX512DQ] +// +func (self *Program) KMOVB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KMOVB", 2, Operands { v0, v1 }) + // KMOVB k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, nil, 0) + m.emit(0x90) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // KMOVB r32, k + if isReg32(v0) && isK(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, v[0], 0) + m.emit(0x92) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // KMOVB m8, k + if isM8(v0) && isK(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, addr(v[0]), 0) + m.emit(0x90) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // KMOVB k, r32 + if isK(v0) && isReg32(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), nil, 0) + m.emit(0x93) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // KMOVB k, m8 + if isK(v0) && isM8(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, addr(v[1]), 0) + m.emit(0x91) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for KMOVB") + } + return p +} + +// KMOVD performs "Move 32-bit Mask". +// +// Mnemonic : KMOVD +// Supported forms : (5 forms) +// +// * KMOVD k, k [AVX512BW] +// * KMOVD r32, k [AVX512BW] +// * KMOVD m32, k [AVX512BW] +// * KMOVD k, r32 [AVX512BW] +// * KMOVD k, m32 [AVX512BW] +// +func (self *Program) KMOVD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KMOVD", 2, Operands { v0, v1 }) + // KMOVD k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xf9) + m.emit(0x90) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // KMOVD r32, k + if isReg32(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, 0, v[0], 0) + m.emit(0x92) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // KMOVD m32, k + if isM32(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b1, 0x81, 0, addr(v[0]), 0) + m.emit(0x90) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // KMOVD k, r32 + if isK(v0) && isReg32(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[1]), nil, 0) + m.emit(0x93) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // KMOVD k, m32 + if isK(v0) && isM32(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b1, 0x81, 0, addr(v[1]), 0) + m.emit(0x91) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for KMOVD") + } + return p +} + +// KMOVQ performs "Move 64-bit Mask". +// +// Mnemonic : KMOVQ +// Supported forms : (5 forms) +// +// * KMOVQ k, k [AVX512BW] +// * KMOVQ r64, k [AVX512BW] +// * KMOVQ m64, k [AVX512BW] +// * KMOVQ k, r64 [AVX512BW] +// * KMOVQ k, m64 [AVX512BW] +// +func (self *Program) KMOVQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KMOVQ", 2, Operands { v0, v1 }) + // KMOVQ k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xf8) + m.emit(0x90) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // KMOVQ r64, k + if isReg64(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1 ^ (hcode(v[0]) << 5)) + m.emit(0xfb) + m.emit(0x92) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // KMOVQ m64, k + if isM64(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b1, 0x80, 0, addr(v[0]), 0) + m.emit(0x90) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // KMOVQ k, r64 + if isK(v0) && isReg64(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1 ^ (hcode(v[1]) << 7)) + m.emit(0xfb) + m.emit(0x93) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // KMOVQ k, m64 + if isK(v0) && isM64(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b1, 0x80, 0, addr(v[1]), 0) + m.emit(0x91) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for KMOVQ") + } + return p +} + +// KMOVW performs "Move 16-bit Mask". +// +// Mnemonic : KMOVW +// Supported forms : (5 forms) +// +// * KMOVW k, k [AVX512F] +// * KMOVW r32, k [AVX512F] +// * KMOVW m16, k [AVX512F] +// * KMOVW k, r32 [AVX512F] +// * KMOVW k, m16 [AVX512F] +// +func (self *Program) KMOVW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KMOVW", 2, Operands { v0, v1 }) + // KMOVW k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, 0, nil, 0) + m.emit(0x90) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // KMOVW r32, k + if isReg32(v0) && isK(v1) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, 0, v[0], 0) + m.emit(0x92) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // KMOVW m16, k + if isM16(v0) && isK(v1) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, 0, addr(v[0]), 0) + m.emit(0x90) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // KMOVW k, r32 + if isK(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), nil, 0) + m.emit(0x93) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // KMOVW k, m16 + if isK(v0) && isM16(v1) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, 0, addr(v[1]), 0) + m.emit(0x91) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for KMOVW") + } + return p +} + +// KNOTB performs "NOT 8-bit Mask Register". +// +// Mnemonic : KNOTB +// Supported forms : (1 form) +// +// * KNOTB k, k [AVX512DQ] +// +func (self *Program) KNOTB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KNOTB", 2, Operands { v0, v1 }) + // KNOTB k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, nil, 0) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KNOTB") + } + return p +} + +// KNOTD performs "NOT 32-bit Mask Register". +// +// Mnemonic : KNOTD +// Supported forms : (1 form) +// +// * KNOTD k, k [AVX512BW] +// +func (self *Program) KNOTD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KNOTD", 2, Operands { v0, v1 }) + // KNOTD k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xf9) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KNOTD") + } + return p +} + +// KNOTQ performs "NOT 64-bit Mask Register". +// +// Mnemonic : KNOTQ +// Supported forms : (1 form) +// +// * KNOTQ k, k [AVX512BW] +// +func (self *Program) KNOTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KNOTQ", 2, Operands { v0, v1 }) + // KNOTQ k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xf8) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KNOTQ") + } + return p +} + +// KNOTW performs "NOT 16-bit Mask Register". +// +// Mnemonic : KNOTW +// Supported forms : (1 form) +// +// * KNOTW k, k [AVX512F] +// +func (self *Program) KNOTW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KNOTW", 2, Operands { v0, v1 }) + // KNOTW k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, 0, nil, 0) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KNOTW") + } + return p +} + +// KORB performs "Bitwise Logical OR 8-bit Masks". +// +// Mnemonic : KORB +// Supported forms : (1 form) +// +// * KORB k, k, k [AVX512DQ] +// +func (self *Program) KORB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KORB", 3, Operands { v0, v1, v2 }) + // KORB k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, nil, hlcode(v[1])) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KORB") + } + return p +} + +// KORD performs "Bitwise Logical OR 32-bit Masks". +// +// Mnemonic : KORD +// Supported forms : (1 form) +// +// * KORD k, k, k [AVX512BW] +// +func (self *Program) KORD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KORD", 3, Operands { v0, v1, v2 }) + // KORD k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KORD") + } + return p +} + +// KORQ performs "Bitwise Logical OR 64-bit Masks". +// +// Mnemonic : KORQ +// Supported forms : (1 form) +// +// * KORQ k, k, k [AVX512BW] +// +func (self *Program) KORQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KORQ", 3, Operands { v0, v1, v2 }) + // KORQ k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfc ^ (hlcode(v[1]) << 3)) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KORQ") + } + return p +} + +// KORTESTB performs "OR 8-bit Masks and Set Flags". +// +// Mnemonic : KORTESTB +// Supported forms : (1 form) +// +// * KORTESTB k, k [AVX512DQ] +// +func (self *Program) KORTESTB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KORTESTB", 2, Operands { v0, v1 }) + // KORTESTB k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, nil, 0) + m.emit(0x98) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KORTESTB") + } + return p +} + +// KORTESTD performs "OR 32-bit Masks and Set Flags". +// +// Mnemonic : KORTESTD +// Supported forms : (1 form) +// +// * KORTESTD k, k [AVX512BW] +// +func (self *Program) KORTESTD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KORTESTD", 2, Operands { v0, v1 }) + // KORTESTD k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xf9) + m.emit(0x98) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KORTESTD") + } + return p +} + +// KORTESTQ performs "OR 64-bit Masks and Set Flags". +// +// Mnemonic : KORTESTQ +// Supported forms : (1 form) +// +// * KORTESTQ k, k [AVX512BW] +// +func (self *Program) KORTESTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KORTESTQ", 2, Operands { v0, v1 }) + // KORTESTQ k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xf8) + m.emit(0x98) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KORTESTQ") + } + return p +} + +// KORTESTW performs "OR 16-bit Masks and Set Flags". +// +// Mnemonic : KORTESTW +// Supported forms : (1 form) +// +// * KORTESTW k, k [AVX512F] +// +func (self *Program) KORTESTW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KORTESTW", 2, Operands { v0, v1 }) + // KORTESTW k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, 0, nil, 0) + m.emit(0x98) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KORTESTW") + } + return p +} + +// KORW performs "Bitwise Logical OR 16-bit Masks". +// +// Mnemonic : KORW +// Supported forms : (1 form) +// +// * KORW k, k, k [AVX512F] +// +func (self *Program) KORW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KORW", 3, Operands { v0, v1, v2 }) + // KORW k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, 0, nil, hlcode(v[1])) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KORW") + } + return p +} + +// KSHIFTLB performs "Shift Left 8-bit Masks". +// +// Mnemonic : KSHIFTLB +// Supported forms : (1 form) +// +// * KSHIFTLB imm8, k, k [AVX512DQ] +// +func (self *Program) KSHIFTLB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KSHIFTLB", 3, Operands { v0, v1, v2 }) + // KSHIFTLB imm8, k, k + if isImm8(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3) + m.emit(0x79) + m.emit(0x32) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KSHIFTLB") + } + return p +} + +// KSHIFTLD performs "Shift Left 32-bit Masks". +// +// Mnemonic : KSHIFTLD +// Supported forms : (1 form) +// +// * KSHIFTLD imm8, k, k [AVX512BW] +// +func (self *Program) KSHIFTLD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KSHIFTLD", 3, Operands { v0, v1, v2 }) + // KSHIFTLD imm8, k, k + if isImm8(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3) + m.emit(0x79) + m.emit(0x33) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KSHIFTLD") + } + return p +} + +// KSHIFTLQ performs "Shift Left 64-bit Masks". +// +// Mnemonic : KSHIFTLQ +// Supported forms : (1 form) +// +// * KSHIFTLQ imm8, k, k [AVX512BW] +// +func (self *Program) KSHIFTLQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KSHIFTLQ", 3, Operands { v0, v1, v2 }) + // KSHIFTLQ imm8, k, k + if isImm8(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3) + m.emit(0xf9) + m.emit(0x33) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KSHIFTLQ") + } + return p +} + +// KSHIFTLW performs "Shift Left 16-bit Masks". +// +// Mnemonic : KSHIFTLW +// Supported forms : (1 form) +// +// * KSHIFTLW imm8, k, k [AVX512F] +// +func (self *Program) KSHIFTLW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KSHIFTLW", 3, Operands { v0, v1, v2 }) + // KSHIFTLW imm8, k, k + if isImm8(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3) + m.emit(0xf9) + m.emit(0x32) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KSHIFTLW") + } + return p +} + +// KSHIFTRB performs "Shift Right 8-bit Masks". +// +// Mnemonic : KSHIFTRB +// Supported forms : (1 form) +// +// * KSHIFTRB imm8, k, k [AVX512DQ] +// +func (self *Program) KSHIFTRB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KSHIFTRB", 3, Operands { v0, v1, v2 }) + // KSHIFTRB imm8, k, k + if isImm8(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3) + m.emit(0x79) + m.emit(0x30) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KSHIFTRB") + } + return p +} + +// KSHIFTRD performs "Shift Right 32-bit Masks". +// +// Mnemonic : KSHIFTRD +// Supported forms : (1 form) +// +// * KSHIFTRD imm8, k, k [AVX512BW] +// +func (self *Program) KSHIFTRD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KSHIFTRD", 3, Operands { v0, v1, v2 }) + // KSHIFTRD imm8, k, k + if isImm8(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3) + m.emit(0x79) + m.emit(0x31) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KSHIFTRD") + } + return p +} + +// KSHIFTRQ performs "Shift Right 64-bit Masks". +// +// Mnemonic : KSHIFTRQ +// Supported forms : (1 form) +// +// * KSHIFTRQ imm8, k, k [AVX512BW] +// +func (self *Program) KSHIFTRQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KSHIFTRQ", 3, Operands { v0, v1, v2 }) + // KSHIFTRQ imm8, k, k + if isImm8(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3) + m.emit(0xf9) + m.emit(0x31) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KSHIFTRQ") + } + return p +} + +// KSHIFTRW performs "Shift Right 16-bit Masks". +// +// Mnemonic : KSHIFTRW +// Supported forms : (1 form) +// +// * KSHIFTRW imm8, k, k [AVX512F] +// +func (self *Program) KSHIFTRW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KSHIFTRW", 3, Operands { v0, v1, v2 }) + // KSHIFTRW imm8, k, k + if isImm8(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3) + m.emit(0xf9) + m.emit(0x30) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KSHIFTRW") + } + return p +} + +// KTESTB performs "Bit Test 8-bit Masks and Set Flags". +// +// Mnemonic : KTESTB +// Supported forms : (1 form) +// +// * KTESTB k, k [AVX512DQ] +// +func (self *Program) KTESTB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KTESTB", 2, Operands { v0, v1 }) + // KTESTB k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, nil, 0) + m.emit(0x99) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KTESTB") + } + return p +} + +// KTESTD performs "Bit Test 32-bit Masks and Set Flags". +// +// Mnemonic : KTESTD +// Supported forms : (1 form) +// +// * KTESTD k, k [AVX512BW] +// +func (self *Program) KTESTD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KTESTD", 2, Operands { v0, v1 }) + // KTESTD k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xf9) + m.emit(0x99) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KTESTD") + } + return p +} + +// KTESTQ performs "Bit Test 64-bit Masks and Set Flags". +// +// Mnemonic : KTESTQ +// Supported forms : (1 form) +// +// * KTESTQ k, k [AVX512BW] +// +func (self *Program) KTESTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KTESTQ", 2, Operands { v0, v1 }) + // KTESTQ k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xf8) + m.emit(0x99) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KTESTQ") + } + return p +} + +// KTESTW performs "Bit Test 16-bit Masks and Set Flags". +// +// Mnemonic : KTESTW +// Supported forms : (1 form) +// +// * KTESTW k, k [AVX512DQ] +// +func (self *Program) KTESTW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("KTESTW", 2, Operands { v0, v1 }) + // KTESTW k, k + if isK(v0) && isK(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, 0, nil, 0) + m.emit(0x99) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KTESTW") + } + return p +} + +// KUNPCKBW performs "Unpack and Interleave 8-bit Masks". +// +// Mnemonic : KUNPCKBW +// Supported forms : (1 form) +// +// * KUNPCKBW k, k, k [AVX512F] +// +func (self *Program) KUNPCKBW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KUNPCKBW", 3, Operands { v0, v1, v2 }) + // KUNPCKBW k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, nil, hlcode(v[1])) + m.emit(0x4b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KUNPCKBW") + } + return p +} + +// KUNPCKDQ performs "Unpack and Interleave 32-bit Masks". +// +// Mnemonic : KUNPCKDQ +// Supported forms : (1 form) +// +// * KUNPCKDQ k, k, k [AVX512BW] +// +func (self *Program) KUNPCKDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KUNPCKDQ", 3, Operands { v0, v1, v2 }) + // KUNPCKDQ k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfc ^ (hlcode(v[1]) << 3)) + m.emit(0x4b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KUNPCKDQ") + } + return p +} + +// KUNPCKWD performs "Unpack and Interleave 16-bit Masks". +// +// Mnemonic : KUNPCKWD +// Supported forms : (1 form) +// +// * KUNPCKWD k, k, k [AVX512BW] +// +func (self *Program) KUNPCKWD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KUNPCKWD", 3, Operands { v0, v1, v2 }) + // KUNPCKWD k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, 0, nil, hlcode(v[1])) + m.emit(0x4b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KUNPCKWD") + } + return p +} + +// KXNORB performs "Bitwise Logical XNOR 8-bit Masks". +// +// Mnemonic : KXNORB +// Supported forms : (1 form) +// +// * KXNORB k, k, k [AVX512DQ] +// +func (self *Program) KXNORB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KXNORB", 3, Operands { v0, v1, v2 }) + // KXNORB k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, nil, hlcode(v[1])) + m.emit(0x46) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KXNORB") + } + return p +} + +// KXNORD performs "Bitwise Logical XNOR 32-bit Masks". +// +// Mnemonic : KXNORD +// Supported forms : (1 form) +// +// * KXNORD k, k, k [AVX512BW] +// +func (self *Program) KXNORD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KXNORD", 3, Operands { v0, v1, v2 }) + // KXNORD k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x46) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KXNORD") + } + return p +} + +// KXNORQ performs "Bitwise Logical XNOR 64-bit Masks". +// +// Mnemonic : KXNORQ +// Supported forms : (1 form) +// +// * KXNORQ k, k, k [AVX512BW] +// +func (self *Program) KXNORQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KXNORQ", 3, Operands { v0, v1, v2 }) + // KXNORQ k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfc ^ (hlcode(v[1]) << 3)) + m.emit(0x46) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KXNORQ") + } + return p +} + +// KXNORW performs "Bitwise Logical XNOR 16-bit Masks". +// +// Mnemonic : KXNORW +// Supported forms : (1 form) +// +// * KXNORW k, k, k [AVX512F] +// +func (self *Program) KXNORW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KXNORW", 3, Operands { v0, v1, v2 }) + // KXNORW k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, 0, nil, hlcode(v[1])) + m.emit(0x46) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KXNORW") + } + return p +} + +// KXORB performs "Bitwise Logical XOR 8-bit Masks". +// +// Mnemonic : KXORB +// Supported forms : (1 form) +// +// * KXORB k, k, k [AVX512DQ] +// +func (self *Program) KXORB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KXORB", 3, Operands { v0, v1, v2 }) + // KXORB k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, nil, hlcode(v[1])) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KXORB") + } + return p +} + +// KXORD performs "Bitwise Logical XOR 32-bit Masks". +// +// Mnemonic : KXORD +// Supported forms : (1 form) +// +// * KXORD k, k, k [AVX512BW] +// +func (self *Program) KXORD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KXORD", 3, Operands { v0, v1, v2 }) + // KXORD k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KXORD") + } + return p +} + +// KXORQ performs "Bitwise Logical XOR 64-bit Masks". +// +// Mnemonic : KXORQ +// Supported forms : (1 form) +// +// * KXORQ k, k, k [AVX512BW] +// +func (self *Program) KXORQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KXORQ", 3, Operands { v0, v1, v2 }) + // KXORQ k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1) + m.emit(0xfc ^ (hlcode(v[1]) << 3)) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KXORQ") + } + return p +} + +// KXORW performs "Bitwise Logical XOR 16-bit Masks". +// +// Mnemonic : KXORW +// Supported forms : (1 form) +// +// * KXORW k, k, k [AVX512F] +// +func (self *Program) KXORW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("KXORW", 3, Operands { v0, v1, v2 }) + // KXORW k, k, k + if isK(v0) && isK(v1) && isK(v2) { + self.require(ISA_AVX512F) + p.domain = DomainMask + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, 0, nil, hlcode(v[1])) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for KXORW") + } + return p +} + +// LDDQU performs "Load Unaligned Integer 128 Bits". +// +// Mnemonic : LDDQU +// Supported forms : (1 form) +// +// * LDDQU m128, xmm [SSE3] +// +func (self *Program) LDDQU(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("LDDQU", 2, Operands { v0, v1 }) + // LDDQU m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf0) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for LDDQU") + } + return p +} + +// LDMXCSR performs "Load MXCSR Register". +// +// Mnemonic : LDMXCSR +// Supported forms : (1 form) +// +// * LDMXCSR m32 [SSE] +// +func (self *Program) LDMXCSR(v0 interface{}) *Instruction { + p := self.alloc("LDMXCSR", 1, Operands { v0 }) + // LDMXCSR m32 + if isM32(v0) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0xae) + m.mrsd(2, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for LDMXCSR") + } + return p +} + +// LEAL performs "Load Effective Address". +// +// Mnemonic : LEA +// Supported forms : (1 form) +// +// * LEAL m, r32 +// +func (self *Program) LEAL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("LEAL", 2, Operands { v0, v1 }) + // LEAL m, r32 + if isM(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x8d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for LEAL") + } + return p +} + +// LEAQ performs "Load Effective Address". +// +// Mnemonic : LEA +// Supported forms : (1 form) +// +// * LEAQ m, r64 +// +func (self *Program) LEAQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("LEAQ", 2, Operands { v0, v1 }) + // LEAQ m, r64 + if isM(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x8d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for LEAQ") + } + return p +} + +// LEAW performs "Load Effective Address". +// +// Mnemonic : LEA +// Supported forms : (1 form) +// +// * LEAW m, r16 +// +func (self *Program) LEAW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("LEAW", 2, Operands { v0, v1 }) + // LEAW m, r16 + if isM(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x8d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for LEAW") + } + return p +} + +// LFENCE performs "Load Fence". +// +// Mnemonic : LFENCE +// Supported forms : (1 form) +// +// * LFENCE [SSE2] +// +func (self *Program) LFENCE() *Instruction { + p := self.alloc("LFENCE", 0, Operands { }) + // LFENCE + self.require(ISA_SSE2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0xae) + m.emit(0xe8) + }) + return p +} + +// LZCNTL performs "Count the Number of Leading Zero Bits". +// +// Mnemonic : LZCNT +// Supported forms : (2 forms) +// +// * LZCNTL r32, r32 [LZCNT] +// * LZCNTL m32, r32 [LZCNT] +// +func (self *Program) LZCNTL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("LZCNTL", 2, Operands { v0, v1 }) + // LZCNTL r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_LZCNT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xbd) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // LZCNTL m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_LZCNT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xbd) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for LZCNTL") + } + return p +} + +// LZCNTQ performs "Count the Number of Leading Zero Bits". +// +// Mnemonic : LZCNT +// Supported forms : (2 forms) +// +// * LZCNTQ r64, r64 [LZCNT] +// * LZCNTQ m64, r64 [LZCNT] +// +func (self *Program) LZCNTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("LZCNTQ", 2, Operands { v0, v1 }) + // LZCNTQ r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_LZCNT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xbd) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // LZCNTQ m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_LZCNT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0xbd) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for LZCNTQ") + } + return p +} + +// LZCNTW performs "Count the Number of Leading Zero Bits". +// +// Mnemonic : LZCNT +// Supported forms : (2 forms) +// +// * LZCNTW r16, r16 [LZCNT] +// * LZCNTW m16, r16 [LZCNT] +// +func (self *Program) LZCNTW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("LZCNTW", 2, Operands { v0, v1 }) + // LZCNTW r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_LZCNT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xbd) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // LZCNTW m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_LZCNT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xbd) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for LZCNTW") + } + return p +} + +// MASKMOVDQU performs "Store Selected Bytes of Double Quadword". +// +// Mnemonic : MASKMOVDQU +// Supported forms : (1 form) +// +// * MASKMOVDQU xmm, xmm [SSE2] +// +func (self *Program) MASKMOVDQU(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MASKMOVDQU", 2, Operands { v0, v1 }) + // MASKMOVDQU xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for MASKMOVDQU") + } + return p +} + +// MASKMOVQ performs "Store Selected Bytes of Quadword". +// +// Mnemonic : MASKMOVQ +// Supported forms : (1 form) +// +// * MASKMOVQ mm, mm [MMX+] +// +func (self *Program) MASKMOVQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MASKMOVQ", 2, Operands { v0, v1 }) + // MASKMOVQ mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for MASKMOVQ") + } + return p +} + +// MAXPD performs "Return Maximum Packed Double-Precision Floating-Point Values". +// +// Mnemonic : MAXPD +// Supported forms : (2 forms) +// +// * MAXPD xmm, xmm [SSE2] +// * MAXPD m128, xmm [SSE2] +// +func (self *Program) MAXPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MAXPD", 2, Operands { v0, v1 }) + // MAXPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MAXPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MAXPD") + } + return p +} + +// MAXPS performs "Return Maximum Packed Single-Precision Floating-Point Values". +// +// Mnemonic : MAXPS +// Supported forms : (2 forms) +// +// * MAXPS xmm, xmm [SSE] +// * MAXPS m128, xmm [SSE] +// +func (self *Program) MAXPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MAXPS", 2, Operands { v0, v1 }) + // MAXPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MAXPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MAXPS") + } + return p +} + +// MAXSD performs "Return Maximum Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : MAXSD +// Supported forms : (2 forms) +// +// * MAXSD xmm, xmm [SSE2] +// * MAXSD m64, xmm [SSE2] +// +func (self *Program) MAXSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MAXSD", 2, Operands { v0, v1 }) + // MAXSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MAXSD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MAXSD") + } + return p +} + +// MAXSS performs "Return Maximum Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : MAXSS +// Supported forms : (2 forms) +// +// * MAXSS xmm, xmm [SSE] +// * MAXSS m32, xmm [SSE] +// +func (self *Program) MAXSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MAXSS", 2, Operands { v0, v1 }) + // MAXSS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MAXSS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MAXSS") + } + return p +} + +// MFENCE performs "Memory Fence". +// +// Mnemonic : MFENCE +// Supported forms : (1 form) +// +// * MFENCE [SSE2] +// +func (self *Program) MFENCE() *Instruction { + p := self.alloc("MFENCE", 0, Operands { }) + // MFENCE + self.require(ISA_SSE2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0xae) + m.emit(0xf0) + }) + return p +} + +// MINPD performs "Return Minimum Packed Double-Precision Floating-Point Values". +// +// Mnemonic : MINPD +// Supported forms : (2 forms) +// +// * MINPD xmm, xmm [SSE2] +// * MINPD m128, xmm [SSE2] +// +func (self *Program) MINPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MINPD", 2, Operands { v0, v1 }) + // MINPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MINPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MINPD") + } + return p +} + +// MINPS performs "Return Minimum Packed Single-Precision Floating-Point Values". +// +// Mnemonic : MINPS +// Supported forms : (2 forms) +// +// * MINPS xmm, xmm [SSE] +// * MINPS m128, xmm [SSE] +// +func (self *Program) MINPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MINPS", 2, Operands { v0, v1 }) + // MINPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MINPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MINPS") + } + return p +} + +// MINSD performs "Return Minimum Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : MINSD +// Supported forms : (2 forms) +// +// * MINSD xmm, xmm [SSE2] +// * MINSD m64, xmm [SSE2] +// +func (self *Program) MINSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MINSD", 2, Operands { v0, v1 }) + // MINSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MINSD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MINSD") + } + return p +} + +// MINSS performs "Return Minimum Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : MINSS +// Supported forms : (2 forms) +// +// * MINSS xmm, xmm [SSE] +// * MINSS m32, xmm [SSE] +// +func (self *Program) MINSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MINSS", 2, Operands { v0, v1 }) + // MINSS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MINSS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MINSS") + } + return p +} + +// MONITOR performs "Monitor a Linear Address Range". +// +// Mnemonic : MONITOR +// Supported forms : (1 form) +// +// * MONITOR [MONITOR] +// +func (self *Program) MONITOR() *Instruction { + p := self.alloc("MONITOR", 0, Operands { }) + // MONITOR + self.require(ISA_MONITOR) + p.domain = DomainMisc + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x01) + m.emit(0xc8) + }) + return p +} + +// MONITORX performs "Monitor a Linear Address Range with Timeout". +// +// Mnemonic : MONITORX +// Supported forms : (1 form) +// +// * MONITORX [MONITORX] +// +func (self *Program) MONITORX() *Instruction { + p := self.alloc("MONITORX", 0, Operands { }) + // MONITORX + self.require(ISA_MONITORX) + p.domain = DomainMisc + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x01) + m.emit(0xfa) + }) + return p +} + +// MOVAPD performs "Move Aligned Packed Double-Precision Floating-Point Values". +// +// Mnemonic : MOVAPD +// Supported forms : (3 forms) +// +// * MOVAPD xmm, xmm [SSE2] +// * MOVAPD m128, xmm [SSE2] +// * MOVAPD xmm, m128 [SSE2] +// +func (self *Program) MOVAPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVAPD", 2, Operands { v0, v1 }) + // MOVAPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVAPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVAPD xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVAPD") + } + return p +} + +// MOVAPS performs "Move Aligned Packed Single-Precision Floating-Point Values". +// +// Mnemonic : MOVAPS +// Supported forms : (3 forms) +// +// * MOVAPS xmm, xmm [SSE] +// * MOVAPS m128, xmm [SSE] +// * MOVAPS xmm, m128 [SSE] +// +func (self *Program) MOVAPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVAPS", 2, Operands { v0, v1 }) + // MOVAPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVAPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVAPS xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVAPS") + } + return p +} + +// MOVB performs "Move". +// +// Mnemonic : MOV +// Supported forms : (5 forms) +// +// * MOVB imm8, r8 +// * MOVB r8, r8 +// * MOVB m8, r8 +// * MOVB imm8, m8 +// * MOVB r8, m8 +// +func (self *Program) MOVB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVB", 2, Operands { v0, v1 }) + // MOVB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xb0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // MOVB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x88) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x8a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVB m8, r8 + if isM8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), isReg8REX(v[1])) + m.emit(0x8a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc6) + m.mrsd(0, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // MOVB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x88) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVB") + } + return p +} + +// MOVBEL performs "Move Data After Swapping Bytes". +// +// Mnemonic : MOVBE +// Supported forms : (2 forms) +// +// * MOVBEL m32, r32 [MOVBE] +// * MOVBEL r32, m32 [MOVBE] +// +func (self *Program) MOVBEL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVBEL", 2, Operands { v0, v1 }) + // MOVBEL m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_MOVBE) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf0) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVBEL r32, m32 + if isReg32(v0) && isM32(v1) { + self.require(ISA_MOVBE) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf1) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVBEL") + } + return p +} + +// MOVBEQ performs "Move Data After Swapping Bytes". +// +// Mnemonic : MOVBE +// Supported forms : (2 forms) +// +// * MOVBEQ m64, r64 [MOVBE] +// * MOVBEQ r64, m64 [MOVBE] +// +func (self *Program) MOVBEQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVBEQ", 2, Operands { v0, v1 }) + // MOVBEQ m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_MOVBE) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf0) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVBEQ r64, m64 + if isReg64(v0) && isM64(v1) { + self.require(ISA_MOVBE) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf1) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVBEQ") + } + return p +} + +// MOVBEW performs "Move Data After Swapping Bytes". +// +// Mnemonic : MOVBE +// Supported forms : (2 forms) +// +// * MOVBEW m16, r16 [MOVBE] +// * MOVBEW r16, m16 [MOVBE] +// +func (self *Program) MOVBEW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVBEW", 2, Operands { v0, v1 }) + // MOVBEW m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_MOVBE) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf0) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVBEW r16, m16 + if isReg16(v0) && isM16(v1) { + self.require(ISA_MOVBE) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xf1) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVBEW") + } + return p +} + +// MOVD performs "Move Doubleword". +// +// Mnemonic : MOVD +// Supported forms : (8 forms) +// +// * MOVD mm, r32 [MMX] +// * MOVD r32, mm [MMX] +// * MOVD m32, mm [MMX] +// * MOVD mm, m32 [MMX] +// * MOVD xmm, r32 [SSE2] +// * MOVD r32, xmm [SSE2] +// * MOVD m32, xmm [SSE2] +// * MOVD xmm, m32 [SSE2] +// +func (self *Program) MOVD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVD", 2, Operands { v0, v1 }) + // MOVD mm, r32 + if isMM(v0) && isReg32(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVD r32, mm + if isReg32(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x6e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVD m32, mm + if isM32(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x6e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVD mm, m32 + if isMM(v0) && isM32(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x7e) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // MOVD xmm, r32 + if isXMM(v0) && isReg32(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVD r32, xmm + if isReg32(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x6e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVD m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x6e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVD xmm, m32 + if isXMM(v0) && isM32(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x7e) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVD") + } + return p +} + +// MOVDDUP performs "Move One Double-FP and Duplicate". +// +// Mnemonic : MOVDDUP +// Supported forms : (2 forms) +// +// * MOVDDUP xmm, xmm [SSE3] +// * MOVDDUP m64, xmm [SSE3] +// +func (self *Program) MOVDDUP(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVDDUP", 2, Operands { v0, v1 }) + // MOVDDUP xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVDDUP m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVDDUP") + } + return p +} + +// MOVDQ2Q performs "Move Quadword from XMM to MMX Technology Register". +// +// Mnemonic : MOVDQ2Q +// Supported forms : (1 form) +// +// * MOVDQ2Q xmm, mm [SSE2] +// +func (self *Program) MOVDQ2Q(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVDQ2Q", 2, Operands { v0, v1 }) + // MOVDQ2Q xmm, mm + if isXMM(v0) && isMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for MOVDQ2Q") + } + return p +} + +// MOVDQA performs "Move Aligned Double Quadword". +// +// Mnemonic : MOVDQA +// Supported forms : (3 forms) +// +// * MOVDQA xmm, xmm [SSE2] +// * MOVDQA m128, xmm [SSE2] +// * MOVDQA xmm, m128 [SSE2] +// +func (self *Program) MOVDQA(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVDQA", 2, Operands { v0, v1 }) + // MOVDQA xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVDQA m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVDQA xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVDQA") + } + return p +} + +// MOVDQU performs "Move Unaligned Double Quadword". +// +// Mnemonic : MOVDQU +// Supported forms : (3 forms) +// +// * MOVDQU xmm, xmm [SSE2] +// * MOVDQU m128, xmm [SSE2] +// * MOVDQU xmm, m128 [SSE2] +// +func (self *Program) MOVDQU(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVDQU", 2, Operands { v0, v1 }) + // MOVDQU xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVDQU m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVDQU xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVDQU") + } + return p +} + +// MOVHLPS performs "Move Packed Single-Precision Floating-Point Values High to Low". +// +// Mnemonic : MOVHLPS +// Supported forms : (1 form) +// +// * MOVHLPS xmm, xmm [SSE] +// +func (self *Program) MOVHLPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVHLPS", 2, Operands { v0, v1 }) + // MOVHLPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for MOVHLPS") + } + return p +} + +// MOVHPD performs "Move High Packed Double-Precision Floating-Point Value". +// +// Mnemonic : MOVHPD +// Supported forms : (2 forms) +// +// * MOVHPD m64, xmm [SSE2] +// * MOVHPD xmm, m64 [SSE2] +// +func (self *Program) MOVHPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVHPD", 2, Operands { v0, v1 }) + // MOVHPD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVHPD xmm, m64 + if isXMM(v0) && isM64(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x17) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVHPD") + } + return p +} + +// MOVHPS performs "Move High Packed Single-Precision Floating-Point Values". +// +// Mnemonic : MOVHPS +// Supported forms : (2 forms) +// +// * MOVHPS m64, xmm [SSE] +// * MOVHPS xmm, m64 [SSE] +// +func (self *Program) MOVHPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVHPS", 2, Operands { v0, v1 }) + // MOVHPS m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVHPS xmm, m64 + if isXMM(v0) && isM64(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x17) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVHPS") + } + return p +} + +// MOVL performs "Move". +// +// Mnemonic : MOV +// Supported forms : (5 forms) +// +// * MOVL imm32, r32 +// * MOVL r32, r32 +// * MOVL m32, r32 +// * MOVL imm32, m32 +// * MOVL r32, m32 +// +func (self *Program) MOVL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVL", 2, Operands { v0, v1 }) + // MOVL imm32, r32 + if isImm32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xc7) + m.emit(0xc0 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xb8 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // MOVL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x89) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x8b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVL m32, r32 + if isM32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x8b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVL imm32, m32 + if isImm32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc7) + m.mrsd(0, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // MOVL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x89) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVL") + } + return p +} + +// MOVLHPS performs "Move Packed Single-Precision Floating-Point Values Low to High". +// +// Mnemonic : MOVLHPS +// Supported forms : (1 form) +// +// * MOVLHPS xmm, xmm [SSE] +// +func (self *Program) MOVLHPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVLHPS", 2, Operands { v0, v1 }) + // MOVLHPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for MOVLHPS") + } + return p +} + +// MOVLPD performs "Move Low Packed Double-Precision Floating-Point Value". +// +// Mnemonic : MOVLPD +// Supported forms : (2 forms) +// +// * MOVLPD m64, xmm [SSE2] +// * MOVLPD xmm, m64 [SSE2] +// +func (self *Program) MOVLPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVLPD", 2, Operands { v0, v1 }) + // MOVLPD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVLPD xmm, m64 + if isXMM(v0) && isM64(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x13) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVLPD") + } + return p +} + +// MOVLPS performs "Move Low Packed Single-Precision Floating-Point Values". +// +// Mnemonic : MOVLPS +// Supported forms : (2 forms) +// +// * MOVLPS m64, xmm [SSE] +// * MOVLPS xmm, m64 [SSE] +// +func (self *Program) MOVLPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVLPS", 2, Operands { v0, v1 }) + // MOVLPS m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVLPS xmm, m64 + if isXMM(v0) && isM64(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x13) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVLPS") + } + return p +} + +// MOVMSKPD performs "Extract Packed Double-Precision Floating-Point Sign Mask". +// +// Mnemonic : MOVMSKPD +// Supported forms : (1 form) +// +// * MOVMSKPD xmm, r32 [SSE2] +// +func (self *Program) MOVMSKPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVMSKPD", 2, Operands { v0, v1 }) + // MOVMSKPD xmm, r32 + if isXMM(v0) && isReg32(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x50) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for MOVMSKPD") + } + return p +} + +// MOVMSKPS performs "Extract Packed Single-Precision Floating-Point Sign Mask". +// +// Mnemonic : MOVMSKPS +// Supported forms : (1 form) +// +// * MOVMSKPS xmm, r32 [SSE] +// +func (self *Program) MOVMSKPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVMSKPS", 2, Operands { v0, v1 }) + // MOVMSKPS xmm, r32 + if isXMM(v0) && isReg32(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x50) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for MOVMSKPS") + } + return p +} + +// MOVNTDQ performs "Store Double Quadword Using Non-Temporal Hint". +// +// Mnemonic : MOVNTDQ +// Supported forms : (1 form) +// +// * MOVNTDQ xmm, m128 [SSE2] +// +func (self *Program) MOVNTDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVNTDQ", 2, Operands { v0, v1 }) + // MOVNTDQ xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xe7) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVNTDQ") + } + return p +} + +// MOVNTDQA performs "Load Double Quadword Non-Temporal Aligned Hint". +// +// Mnemonic : MOVNTDQA +// Supported forms : (1 form) +// +// * MOVNTDQA m128, xmm [SSE4.1] +// +func (self *Program) MOVNTDQA(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVNTDQA", 2, Operands { v0, v1 }) + // MOVNTDQA m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVNTDQA") + } + return p +} + +// MOVNTIL performs "Store Doubleword Using Non-Temporal Hint". +// +// Mnemonic : MOVNTI +// Supported forms : (1 form) +// +// * MOVNTIL r32, m32 [SSE2] +// +func (self *Program) MOVNTIL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVNTIL", 2, Operands { v0, v1 }) + // MOVNTIL r32, m32 + if isReg32(v0) && isM32(v1) { + self.require(ISA_SSE2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xc3) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVNTIL") + } + return p +} + +// MOVNTIQ performs "Store Doubleword Using Non-Temporal Hint". +// +// Mnemonic : MOVNTI +// Supported forms : (1 form) +// +// * MOVNTIQ r64, m64 [SSE2] +// +func (self *Program) MOVNTIQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVNTIQ", 2, Operands { v0, v1 }) + // MOVNTIQ r64, m64 + if isReg64(v0) && isM64(v1) { + self.require(ISA_SSE2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x0f) + m.emit(0xc3) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVNTIQ") + } + return p +} + +// MOVNTPD performs "Store Packed Double-Precision Floating-Point Values Using Non-Temporal Hint". +// +// Mnemonic : MOVNTPD +// Supported forms : (1 form) +// +// * MOVNTPD xmm, m128 [SSE2] +// +func (self *Program) MOVNTPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVNTPD", 2, Operands { v0, v1 }) + // MOVNTPD xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVNTPD") + } + return p +} + +// MOVNTPS performs "Store Packed Single-Precision Floating-Point Values Using Non-Temporal Hint". +// +// Mnemonic : MOVNTPS +// Supported forms : (1 form) +// +// * MOVNTPS xmm, m128 [SSE] +// +func (self *Program) MOVNTPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVNTPS", 2, Operands { v0, v1 }) + // MOVNTPS xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVNTPS") + } + return p +} + +// MOVNTQ performs "Store of Quadword Using Non-Temporal Hint". +// +// Mnemonic : MOVNTQ +// Supported forms : (1 form) +// +// * MOVNTQ mm, m64 [MMX+] +// +func (self *Program) MOVNTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVNTQ", 2, Operands { v0, v1 }) + // MOVNTQ mm, m64 + if isMM(v0) && isM64(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xe7) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVNTQ") + } + return p +} + +// MOVNTSD performs "Store Scalar Double-Precision Floating-Point Values Using Non-Temporal Hint". +// +// Mnemonic : MOVNTSD +// Supported forms : (1 form) +// +// * MOVNTSD xmm, m64 [SSE4A] +// +func (self *Program) MOVNTSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVNTSD", 2, Operands { v0, v1 }) + // MOVNTSD xmm, m64 + if isXMM(v0) && isM64(v1) { + self.require(ISA_SSE4A) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVNTSD") + } + return p +} + +// MOVNTSS performs "Store Scalar Single-Precision Floating-Point Values Using Non-Temporal Hint". +// +// Mnemonic : MOVNTSS +// Supported forms : (1 form) +// +// * MOVNTSS xmm, m32 [SSE4A] +// +func (self *Program) MOVNTSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVNTSS", 2, Operands { v0, v1 }) + // MOVNTSS xmm, m32 + if isXMM(v0) && isM32(v1) { + self.require(ISA_SSE4A) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVNTSS") + } + return p +} + +// MOVQ performs "Move". +// +// Mnemonic : MOV +// Supported forms : (16 forms) +// +// * MOVQ imm32, r64 +// * MOVQ imm64, r64 +// * MOVQ r64, r64 +// * MOVQ m64, r64 +// * MOVQ imm32, m64 +// * MOVQ r64, m64 +// * MOVQ mm, r64 [MMX] +// * MOVQ r64, mm [MMX] +// * MOVQ mm, mm [MMX] +// * MOVQ m64, mm [MMX] +// * MOVQ mm, m64 [MMX] +// * MOVQ xmm, r64 [SSE2] +// * MOVQ r64, xmm [SSE2] +// * MOVQ xmm, xmm [SSE2] +// * MOVQ m64, xmm [SSE2] +// * MOVQ xmm, m64 [SSE2] +// +func (self *Program) MOVQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVQ", 2, Operands { v0, v1 }) + // MOVQ imm32, r64 + if isImm32Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xc7) + m.emit(0xc0 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // MOVQ imm64, r64 + if isImm64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xb8 | lcode(v[1])) + m.imm8(toImmAny(v[0])) + }) + } + // MOVQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x89) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x8b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVQ m64, r64 + if isM64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x8b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVQ imm32, m64 + if isImm32Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xc7) + m.mrsd(0, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // MOVQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x89) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // MOVQ mm, r64 + if isMM(v0) && isReg64(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x0f) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVQ r64, mm + if isReg64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x6e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVQ mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVQ m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x6e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVQ mm, m64 + if isMM(v0) && isM64(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x0f) + m.emit(0x7e) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // MOVQ xmm, r64 + if isXMM(v0) && isReg64(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x0f) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVQ r64, xmm + if isReg64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0x6e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xd6) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVQ m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x7e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0x6e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVQ xmm, m64 + if isXMM(v0) && isM64(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xd6) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x0f) + m.emit(0x7e) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVQ") + } + return p +} + +// MOVQ2DQ performs "Move Quadword from MMX Technology to XMM Register". +// +// Mnemonic : MOVQ2DQ +// Supported forms : (1 form) +// +// * MOVQ2DQ mm, xmm [SSE2] +// +func (self *Program) MOVQ2DQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVQ2DQ", 2, Operands { v0, v1 }) + // MOVQ2DQ mm, xmm + if isMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for MOVQ2DQ") + } + return p +} + +// MOVSBL performs "Move with Sign-Extension". +// +// Mnemonic : MOVSX +// Supported forms : (2 forms) +// +// * MOVSBL r8, r32 +// * MOVSBL m8, r32 +// +func (self *Program) MOVSBL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVSBL", 2, Operands { v0, v1 }) + // MOVSBL r8, r32 + if isReg8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVSBL m8, r32 + if isM8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xbe) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVSBL") + } + return p +} + +// MOVSBQ performs "Move with Sign-Extension". +// +// Mnemonic : MOVSX +// Supported forms : (2 forms) +// +// * MOVSBQ r8, r64 +// * MOVSBQ m8, r64 +// +func (self *Program) MOVSBQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVSBQ", 2, Operands { v0, v1 }) + // MOVSBQ r8, r64 + if isReg8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVSBQ m8, r64 + if isM8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0xbe) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVSBQ") + } + return p +} + +// MOVSBW performs "Move with Sign-Extension". +// +// Mnemonic : MOVSX +// Supported forms : (2 forms) +// +// * MOVSBW r8, r16 +// * MOVSBW m8, r16 +// +func (self *Program) MOVSBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVSBW", 2, Operands { v0, v1 }) + // MOVSBW r8, r16 + if isReg8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVSBW m8, r16 + if isM8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xbe) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVSBW") + } + return p +} + +// MOVSD performs "Move Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : MOVSD +// Supported forms : (3 forms) +// +// * MOVSD xmm, xmm [SSE2] +// * MOVSD m64, xmm [SSE2] +// * MOVSD xmm, m64 [SSE2] +// +func (self *Program) MOVSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVSD", 2, Operands { v0, v1 }) + // MOVSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVSD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVSD xmm, m64 + if isXMM(v0) && isM64(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVSD") + } + return p +} + +// MOVSHDUP performs "Move Packed Single-FP High and Duplicate". +// +// Mnemonic : MOVSHDUP +// Supported forms : (2 forms) +// +// * MOVSHDUP xmm, xmm [SSE3] +// * MOVSHDUP m128, xmm [SSE3] +// +func (self *Program) MOVSHDUP(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVSHDUP", 2, Operands { v0, v1 }) + // MOVSHDUP xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVSHDUP m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVSHDUP") + } + return p +} + +// MOVSLDUP performs "Move Packed Single-FP Low and Duplicate". +// +// Mnemonic : MOVSLDUP +// Supported forms : (2 forms) +// +// * MOVSLDUP xmm, xmm [SSE3] +// * MOVSLDUP m128, xmm [SSE3] +// +func (self *Program) MOVSLDUP(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVSLDUP", 2, Operands { v0, v1 }) + // MOVSLDUP xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVSLDUP m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVSLDUP") + } + return p +} + +// MOVSLQ performs "Move Doubleword to Quadword with Sign-Extension". +// +// Mnemonic : MOVSXD +// Supported forms : (2 forms) +// +// * MOVSLQ r32, r64 +// * MOVSLQ m32, r64 +// +func (self *Program) MOVSLQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVSLQ", 2, Operands { v0, v1 }) + // MOVSLQ r32, r64 + if isReg32(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x63) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVSLQ m32, r64 + if isM32(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x63) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVSLQ") + } + return p +} + +// MOVSS performs "Move Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : MOVSS +// Supported forms : (3 forms) +// +// * MOVSS xmm, xmm [SSE] +// * MOVSS m32, xmm [SSE] +// * MOVSS xmm, m32 [SSE] +// +func (self *Program) MOVSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVSS", 2, Operands { v0, v1 }) + // MOVSS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVSS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVSS xmm, m32 + if isXMM(v0) && isM32(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVSS") + } + return p +} + +// MOVSWL performs "Move with Sign-Extension". +// +// Mnemonic : MOVSX +// Supported forms : (2 forms) +// +// * MOVSWL r16, r32 +// * MOVSWL m16, r32 +// +func (self *Program) MOVSWL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVSWL", 2, Operands { v0, v1 }) + // MOVSWL r16, r32 + if isReg16(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xbf) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVSWL m16, r32 + if isM16(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xbf) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVSWL") + } + return p +} + +// MOVSWQ performs "Move with Sign-Extension". +// +// Mnemonic : MOVSX +// Supported forms : (2 forms) +// +// * MOVSWQ r16, r64 +// * MOVSWQ m16, r64 +// +func (self *Program) MOVSWQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVSWQ", 2, Operands { v0, v1 }) + // MOVSWQ r16, r64 + if isReg16(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xbf) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVSWQ m16, r64 + if isM16(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0xbf) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVSWQ") + } + return p +} + +// MOVUPD performs "Move Unaligned Packed Double-Precision Floating-Point Values". +// +// Mnemonic : MOVUPD +// Supported forms : (3 forms) +// +// * MOVUPD xmm, xmm [SSE2] +// * MOVUPD m128, xmm [SSE2] +// * MOVUPD xmm, m128 [SSE2] +// +func (self *Program) MOVUPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVUPD", 2, Operands { v0, v1 }) + // MOVUPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVUPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVUPD xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVUPD") + } + return p +} + +// MOVUPS performs "Move Unaligned Packed Single-Precision Floating-Point Values". +// +// Mnemonic : MOVUPS +// Supported forms : (3 forms) +// +// * MOVUPS xmm, xmm [SSE] +// * MOVUPS m128, xmm [SSE] +// * MOVUPS xmm, m128 [SSE] +// +func (self *Program) MOVUPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVUPS", 2, Operands { v0, v1 }) + // MOVUPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // MOVUPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVUPS xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVUPS") + } + return p +} + +// MOVW performs "Move". +// +// Mnemonic : MOV +// Supported forms : (5 forms) +// +// * MOVW imm16, r16 +// * MOVW r16, r16 +// * MOVW m16, r16 +// * MOVW imm16, m16 +// * MOVW r16, m16 +// +func (self *Program) MOVW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVW", 2, Operands { v0, v1 }) + // MOVW imm16, r16 + if isImm16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xc7) + m.emit(0xc0 | lcode(v[1])) + m.imm2(toImmAny(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xb8 | lcode(v[1])) + m.imm2(toImmAny(v[0])) + }) + } + // MOVW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x89) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x8b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVW m16, r16 + if isM16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x8b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // MOVW imm16, m16 + if isImm16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xc7) + m.mrsd(0, addr(v[1]), 1) + m.imm2(toImmAny(v[0])) + }) + } + // MOVW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x89) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVW") + } + return p +} + +// MOVZBL performs "Move with Zero-Extend". +// +// Mnemonic : MOVZX +// Supported forms : (2 forms) +// +// * MOVZBL r8, r32 +// * MOVZBL m8, r32 +// +func (self *Program) MOVZBL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVZBL", 2, Operands { v0, v1 }) + // MOVZBL r8, r32 + if isReg8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVZBL m8, r32 + if isM8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xb6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVZBL") + } + return p +} + +// MOVZBQ performs "Move with Zero-Extend". +// +// Mnemonic : MOVZX +// Supported forms : (2 forms) +// +// * MOVZBQ r8, r64 +// * MOVZBQ m8, r64 +// +func (self *Program) MOVZBQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVZBQ", 2, Operands { v0, v1 }) + // MOVZBQ r8, r64 + if isReg8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVZBQ m8, r64 + if isM8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0xb6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVZBQ") + } + return p +} + +// MOVZBW performs "Move with Zero-Extend". +// +// Mnemonic : MOVZX +// Supported forms : (2 forms) +// +// * MOVZBW r8, r16 +// * MOVZBW m8, r16 +// +func (self *Program) MOVZBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVZBW", 2, Operands { v0, v1 }) + // MOVZBW r8, r16 + if isReg8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVZBW m8, r16 + if isM8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xb6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVZBW") + } + return p +} + +// MOVZWL performs "Move with Zero-Extend". +// +// Mnemonic : MOVZX +// Supported forms : (2 forms) +// +// * MOVZWL r16, r32 +// * MOVZWL m16, r32 +// +func (self *Program) MOVZWL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVZWL", 2, Operands { v0, v1 }) + // MOVZWL r16, r32 + if isReg16(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVZWL m16, r32 + if isM16(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xb7) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVZWL") + } + return p +} + +// MOVZWQ performs "Move with Zero-Extend". +// +// Mnemonic : MOVZX +// Supported forms : (2 forms) +// +// * MOVZWQ r16, r64 +// * MOVZWQ m16, r64 +// +func (self *Program) MOVZWQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MOVZWQ", 2, Operands { v0, v1 }) + // MOVZWQ r16, r64 + if isReg16(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MOVZWQ m16, r64 + if isM16(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0xb7) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MOVZWQ") + } + return p +} + +// MPSADBW performs "Compute Multiple Packed Sums of Absolute Difference". +// +// Mnemonic : MPSADBW +// Supported forms : (2 forms) +// +// * MPSADBW imm8, xmm, xmm [SSE4.1] +// * MPSADBW imm8, m128, xmm [SSE4.1] +// +func (self *Program) MPSADBW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("MPSADBW", 3, Operands { v0, v1, v2 }) + // MPSADBW imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x42) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // MPSADBW imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x42) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for MPSADBW") + } + return p +} + +// MULB performs "Unsigned Multiply". +// +// Mnemonic : MUL +// Supported forms : (2 forms) +// +// * MULB r8 +// * MULB m8 +// +func (self *Program) MULB(v0 interface{}) *Instruction { + p := self.alloc("MULB", 1, Operands { v0 }) + // MULB r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0xf6) + m.emit(0xe0 | lcode(v[0])) + }) + } + // MULB m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xf6) + m.mrsd(4, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MULB") + } + return p +} + +// MULL performs "Unsigned Multiply". +// +// Mnemonic : MUL +// Supported forms : (2 forms) +// +// * MULL r32 +// * MULL m32 +// +func (self *Program) MULL(v0 interface{}) *Instruction { + p := self.alloc("MULL", 1, Operands { v0 }) + // MULL r32 + if isReg32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0xf7) + m.emit(0xe0 | lcode(v[0])) + }) + } + // MULL m32 + if isM32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xf7) + m.mrsd(4, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MULL") + } + return p +} + +// MULPD performs "Multiply Packed Double-Precision Floating-Point Values". +// +// Mnemonic : MULPD +// Supported forms : (2 forms) +// +// * MULPD xmm, xmm [SSE2] +// * MULPD m128, xmm [SSE2] +// +func (self *Program) MULPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MULPD", 2, Operands { v0, v1 }) + // MULPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x59) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MULPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x59) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MULPD") + } + return p +} + +// MULPS performs "Multiply Packed Single-Precision Floating-Point Values". +// +// Mnemonic : MULPS +// Supported forms : (2 forms) +// +// * MULPS xmm, xmm [SSE] +// * MULPS m128, xmm [SSE] +// +func (self *Program) MULPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MULPS", 2, Operands { v0, v1 }) + // MULPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x59) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MULPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x59) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MULPS") + } + return p +} + +// MULQ performs "Unsigned Multiply". +// +// Mnemonic : MUL +// Supported forms : (2 forms) +// +// * MULQ r64 +// * MULQ m64 +// +func (self *Program) MULQ(v0 interface{}) *Instruction { + p := self.alloc("MULQ", 1, Operands { v0 }) + // MULQ r64 + if isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0])) + m.emit(0xf7) + m.emit(0xe0 | lcode(v[0])) + }) + } + // MULQ m64 + if isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[0])) + m.emit(0xf7) + m.mrsd(4, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MULQ") + } + return p +} + +// MULSD performs "Multiply Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : MULSD +// Supported forms : (2 forms) +// +// * MULSD xmm, xmm [SSE2] +// * MULSD m64, xmm [SSE2] +// +func (self *Program) MULSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MULSD", 2, Operands { v0, v1 }) + // MULSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x59) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MULSD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x59) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MULSD") + } + return p +} + +// MULSS performs "Multiply Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : MULSS +// Supported forms : (2 forms) +// +// * MULSS xmm, xmm [SSE] +// * MULSS m32, xmm [SSE] +// +func (self *Program) MULSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("MULSS", 2, Operands { v0, v1 }) + // MULSS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x59) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // MULSS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x59) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MULSS") + } + return p +} + +// MULW performs "Unsigned Multiply". +// +// Mnemonic : MUL +// Supported forms : (2 forms) +// +// * MULW r16 +// * MULW m16 +// +func (self *Program) MULW(v0 interface{}) *Instruction { + p := self.alloc("MULW", 1, Operands { v0 }) + // MULW r16 + if isReg16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0xf7) + m.emit(0xe0 | lcode(v[0])) + }) + } + // MULW m16 + if isM16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[0]), false) + m.emit(0xf7) + m.mrsd(4, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MULW") + } + return p +} + +// MULXL performs "Unsigned Multiply Without Affecting Flags". +// +// Mnemonic : MULX +// Supported forms : (2 forms) +// +// * MULXL r32, r32, r32 [BMI2] +// * MULXL m32, r32, r32 [BMI2] +// +func (self *Program) MULXL(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("MULXL", 3, Operands { v0, v1, v2 }) + // MULXL r32, r32, r32 + if isReg32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7b ^ (hlcode(v[1]) << 3)) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // MULXL m32, r32, r32 + if isM32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x03, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf6) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MULXL") + } + return p +} + +// MULXQ performs "Unsigned Multiply Without Affecting Flags". +// +// Mnemonic : MULX +// Supported forms : (2 forms) +// +// * MULXQ r64, r64, r64 [BMI2] +// * MULXQ m64, r64, r64 [BMI2] +// +func (self *Program) MULXQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("MULXQ", 3, Operands { v0, v1, v2 }) + // MULXQ r64, r64, r64 + if isReg64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfb ^ (hlcode(v[1]) << 3)) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // MULXQ m64, r64, r64 + if isM64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x83, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf6) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for MULXQ") + } + return p +} + +// MWAIT performs "Monitor Wait". +// +// Mnemonic : MWAIT +// Supported forms : (1 form) +// +// * MWAIT [MONITOR] +// +func (self *Program) MWAIT() *Instruction { + p := self.alloc("MWAIT", 0, Operands { }) + // MWAIT + self.require(ISA_MONITOR) + p.domain = DomainMisc + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x01) + m.emit(0xc9) + }) + return p +} + +// MWAITX performs "Monitor Wait with Timeout". +// +// Mnemonic : MWAITX +// Supported forms : (1 form) +// +// * MWAITX [MONITORX] +// +func (self *Program) MWAITX() *Instruction { + p := self.alloc("MWAITX", 0, Operands { }) + // MWAITX + self.require(ISA_MONITORX) + p.domain = DomainMisc + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x01) + m.emit(0xfb) + }) + return p +} + +// NEGB performs "Two's Complement Negation". +// +// Mnemonic : NEG +// Supported forms : (2 forms) +// +// * NEGB r8 +// * NEGB m8 +// +func (self *Program) NEGB(v0 interface{}) *Instruction { + p := self.alloc("NEGB", 1, Operands { v0 }) + // NEGB r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0xf6) + m.emit(0xd8 | lcode(v[0])) + }) + } + // NEGB m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xf6) + m.mrsd(3, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for NEGB") + } + return p +} + +// NEGL performs "Two's Complement Negation". +// +// Mnemonic : NEG +// Supported forms : (2 forms) +// +// * NEGL r32 +// * NEGL m32 +// +func (self *Program) NEGL(v0 interface{}) *Instruction { + p := self.alloc("NEGL", 1, Operands { v0 }) + // NEGL r32 + if isReg32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0xf7) + m.emit(0xd8 | lcode(v[0])) + }) + } + // NEGL m32 + if isM32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xf7) + m.mrsd(3, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for NEGL") + } + return p +} + +// NEGQ performs "Two's Complement Negation". +// +// Mnemonic : NEG +// Supported forms : (2 forms) +// +// * NEGQ r64 +// * NEGQ m64 +// +func (self *Program) NEGQ(v0 interface{}) *Instruction { + p := self.alloc("NEGQ", 1, Operands { v0 }) + // NEGQ r64 + if isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0])) + m.emit(0xf7) + m.emit(0xd8 | lcode(v[0])) + }) + } + // NEGQ m64 + if isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[0])) + m.emit(0xf7) + m.mrsd(3, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for NEGQ") + } + return p +} + +// NEGW performs "Two's Complement Negation". +// +// Mnemonic : NEG +// Supported forms : (2 forms) +// +// * NEGW r16 +// * NEGW m16 +// +func (self *Program) NEGW(v0 interface{}) *Instruction { + p := self.alloc("NEGW", 1, Operands { v0 }) + // NEGW r16 + if isReg16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0xf7) + m.emit(0xd8 | lcode(v[0])) + }) + } + // NEGW m16 + if isM16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[0]), false) + m.emit(0xf7) + m.mrsd(3, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for NEGW") + } + return p +} + +// NOP performs "No Operation". +// +// Mnemonic : NOP +// Supported forms : (1 form) +// +// * NOP +// +func (self *Program) NOP() *Instruction { + p := self.alloc("NOP", 0, Operands { }) + // NOP + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x90) + }) + return p +} + +// NOTB performs "One's Complement Negation". +// +// Mnemonic : NOT +// Supported forms : (2 forms) +// +// * NOTB r8 +// * NOTB m8 +// +func (self *Program) NOTB(v0 interface{}) *Instruction { + p := self.alloc("NOTB", 1, Operands { v0 }) + // NOTB r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0xf6) + m.emit(0xd0 | lcode(v[0])) + }) + } + // NOTB m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xf6) + m.mrsd(2, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for NOTB") + } + return p +} + +// NOTL performs "One's Complement Negation". +// +// Mnemonic : NOT +// Supported forms : (2 forms) +// +// * NOTL r32 +// * NOTL m32 +// +func (self *Program) NOTL(v0 interface{}) *Instruction { + p := self.alloc("NOTL", 1, Operands { v0 }) + // NOTL r32 + if isReg32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0xf7) + m.emit(0xd0 | lcode(v[0])) + }) + } + // NOTL m32 + if isM32(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xf7) + m.mrsd(2, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for NOTL") + } + return p +} + +// NOTQ performs "One's Complement Negation". +// +// Mnemonic : NOT +// Supported forms : (2 forms) +// +// * NOTQ r64 +// * NOTQ m64 +// +func (self *Program) NOTQ(v0 interface{}) *Instruction { + p := self.alloc("NOTQ", 1, Operands { v0 }) + // NOTQ r64 + if isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0])) + m.emit(0xf7) + m.emit(0xd0 | lcode(v[0])) + }) + } + // NOTQ m64 + if isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[0])) + m.emit(0xf7) + m.mrsd(2, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for NOTQ") + } + return p +} + +// NOTW performs "One's Complement Negation". +// +// Mnemonic : NOT +// Supported forms : (2 forms) +// +// * NOTW r16 +// * NOTW m16 +// +func (self *Program) NOTW(v0 interface{}) *Instruction { + p := self.alloc("NOTW", 1, Operands { v0 }) + // NOTW r16 + if isReg16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0xf7) + m.emit(0xd0 | lcode(v[0])) + }) + } + // NOTW m16 + if isM16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[0]), false) + m.emit(0xf7) + m.mrsd(2, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for NOTW") + } + return p +} + +// ORB performs "Logical Inclusive OR". +// +// Mnemonic : OR +// Supported forms : (6 forms) +// +// * ORB imm8, al +// * ORB imm8, r8 +// * ORB r8, r8 +// * ORB m8, r8 +// * ORB imm8, m8 +// * ORB r8, m8 +// +func (self *Program) ORB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ORB", 2, Operands { v0, v1 }) + // ORB imm8, al + if isImm8(v0) && v1 == AL { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0c) + m.imm1(toImmAny(v[0])) + }) + } + // ORB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0x80) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ORB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x08) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x0a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ORB m8, r8 + if isM8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), isReg8REX(v[1])) + m.emit(0x0a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ORB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x80) + m.mrsd(1, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ORB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x08) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ORB") + } + return p +} + +// ORL performs "Logical Inclusive OR". +// +// Mnemonic : OR +// Supported forms : (8 forms) +// +// * ORL imm32, eax +// * ORL imm8, r32 +// * ORL imm32, r32 +// * ORL r32, r32 +// * ORL m32, r32 +// * ORL imm8, m32 +// * ORL imm32, m32 +// * ORL r32, m32 +// +func (self *Program) ORL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ORL", 2, Operands { v0, v1 }) + // ORL imm32, eax + if isImm32(v0) && v1 == EAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0d) + m.imm4(toImmAny(v[0])) + }) + } + // ORL imm8, r32 + if isImm8Ext(v0, 4) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ORL imm32, r32 + if isImm32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xc8 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // ORL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x09) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ORL m32, r32 + if isM32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ORL imm8, m32 + if isImm8Ext(v0, 4) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(1, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ORL imm32, m32 + if isImm32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(1, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // ORL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x09) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ORL") + } + return p +} + +// ORPD performs "Bitwise Logical OR of Double-Precision Floating-Point Values". +// +// Mnemonic : ORPD +// Supported forms : (2 forms) +// +// * ORPD xmm, xmm [SSE2] +// * ORPD m128, xmm [SSE2] +// +func (self *Program) ORPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ORPD", 2, Operands { v0, v1 }) + // ORPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x56) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ORPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x56) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ORPD") + } + return p +} + +// ORPS performs "Bitwise Logical OR of Single-Precision Floating-Point Values". +// +// Mnemonic : ORPS +// Supported forms : (2 forms) +// +// * ORPS xmm, xmm [SSE] +// * ORPS m128, xmm [SSE] +// +func (self *Program) ORPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ORPS", 2, Operands { v0, v1 }) + // ORPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x56) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ORPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x56) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ORPS") + } + return p +} + +// ORQ performs "Logical Inclusive OR". +// +// Mnemonic : OR +// Supported forms : (8 forms) +// +// * ORQ imm32, rax +// * ORQ imm8, r64 +// * ORQ imm32, r64 +// * ORQ r64, r64 +// * ORQ m64, r64 +// * ORQ imm8, m64 +// * ORQ imm32, m64 +// * ORQ r64, m64 +// +func (self *Program) ORQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ORQ", 2, Operands { v0, v1 }) + // ORQ imm32, rax + if isImm32(v0) && v1 == RAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48) + m.emit(0x0d) + m.imm4(toImmAny(v[0])) + }) + } + // ORQ imm8, r64 + if isImm8Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x83) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ORQ imm32, r64 + if isImm32Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x81) + m.emit(0xc8 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // ORQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x09) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ORQ m64, r64 + if isM64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ORQ imm8, m64 + if isImm8Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x83) + m.mrsd(1, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ORQ imm32, m64 + if isImm32Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x81) + m.mrsd(1, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // ORQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x09) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ORQ") + } + return p +} + +// ORW performs "Logical Inclusive OR". +// +// Mnemonic : OR +// Supported forms : (8 forms) +// +// * ORW imm16, ax +// * ORW imm8, r16 +// * ORW imm16, r16 +// * ORW r16, r16 +// * ORW m16, r16 +// * ORW imm8, m16 +// * ORW imm16, m16 +// * ORW r16, m16 +// +func (self *Program) ORW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ORW", 2, Operands { v0, v1 }) + // ORW imm16, ax + if isImm16(v0) && v1 == AX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x0d) + m.imm2(toImmAny(v[0])) + }) + } + // ORW imm8, r16 + if isImm8Ext(v0, 2) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ORW imm16, r16 + if isImm16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xc8 | lcode(v[1])) + m.imm2(toImmAny(v[0])) + }) + } + // ORW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x09) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // ORW m16, r16 + if isM16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // ORW imm8, m16 + if isImm8Ext(v0, 2) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(1, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ORW imm16, m16 + if isImm16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(1, addr(v[1]), 1) + m.imm2(toImmAny(v[0])) + }) + } + // ORW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x09) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ORW") + } + return p +} + +// PABSB performs "Packed Absolute Value of Byte Integers". +// +// Mnemonic : PABSB +// Supported forms : (4 forms) +// +// * PABSB mm, mm [SSSE3] +// * PABSB m64, mm [SSSE3] +// * PABSB xmm, xmm [SSSE3] +// * PABSB m128, xmm [SSSE3] +// +func (self *Program) PABSB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PABSB", 2, Operands { v0, v1 }) + // PABSB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x1c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PABSB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x1c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PABSB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x1c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PABSB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x1c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PABSB") + } + return p +} + +// PABSD performs "Packed Absolute Value of Doubleword Integers". +// +// Mnemonic : PABSD +// Supported forms : (4 forms) +// +// * PABSD mm, mm [SSSE3] +// * PABSD m64, mm [SSSE3] +// * PABSD xmm, xmm [SSSE3] +// * PABSD m128, xmm [SSSE3] +// +func (self *Program) PABSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PABSD", 2, Operands { v0, v1 }) + // PABSD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PABSD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x1e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PABSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PABSD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x1e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PABSD") + } + return p +} + +// PABSW performs "Packed Absolute Value of Word Integers". +// +// Mnemonic : PABSW +// Supported forms : (4 forms) +// +// * PABSW mm, mm [SSSE3] +// * PABSW m64, mm [SSSE3] +// * PABSW xmm, xmm [SSSE3] +// * PABSW m128, xmm [SSSE3] +// +func (self *Program) PABSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PABSW", 2, Operands { v0, v1 }) + // PABSW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PABSW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x1d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PABSW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PABSW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x1d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PABSW") + } + return p +} + +// PACKSSDW performs "Pack Doublewords into Words with Signed Saturation". +// +// Mnemonic : PACKSSDW +// Supported forms : (4 forms) +// +// * PACKSSDW mm, mm [MMX] +// * PACKSSDW m64, mm [MMX] +// * PACKSSDW xmm, xmm [SSE2] +// * PACKSSDW m128, xmm [SSE2] +// +func (self *Program) PACKSSDW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PACKSSDW", 2, Operands { v0, v1 }) + // PACKSSDW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x6b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PACKSSDW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x6b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PACKSSDW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x6b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PACKSSDW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x6b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PACKSSDW") + } + return p +} + +// PACKSSWB performs "Pack Words into Bytes with Signed Saturation". +// +// Mnemonic : PACKSSWB +// Supported forms : (4 forms) +// +// * PACKSSWB mm, mm [MMX] +// * PACKSSWB m64, mm [MMX] +// * PACKSSWB xmm, xmm [SSE2] +// * PACKSSWB m128, xmm [SSE2] +// +func (self *Program) PACKSSWB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PACKSSWB", 2, Operands { v0, v1 }) + // PACKSSWB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x63) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PACKSSWB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x63) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PACKSSWB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x63) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PACKSSWB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x63) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PACKSSWB") + } + return p +} + +// PACKUSDW performs "Pack Doublewords into Words with Unsigned Saturation". +// +// Mnemonic : PACKUSDW +// Supported forms : (2 forms) +// +// * PACKUSDW xmm, xmm [SSE4.1] +// * PACKUSDW m128, xmm [SSE4.1] +// +func (self *Program) PACKUSDW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PACKUSDW", 2, Operands { v0, v1 }) + // PACKUSDW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x2b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PACKUSDW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x2b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PACKUSDW") + } + return p +} + +// PACKUSWB performs "Pack Words into Bytes with Unsigned Saturation". +// +// Mnemonic : PACKUSWB +// Supported forms : (4 forms) +// +// * PACKUSWB mm, mm [MMX] +// * PACKUSWB m64, mm [MMX] +// * PACKUSWB xmm, xmm [SSE2] +// * PACKUSWB m128, xmm [SSE2] +// +func (self *Program) PACKUSWB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PACKUSWB", 2, Operands { v0, v1 }) + // PACKUSWB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x67) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PACKUSWB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x67) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PACKUSWB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x67) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PACKUSWB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x67) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PACKUSWB") + } + return p +} + +// PADDB performs "Add Packed Byte Integers". +// +// Mnemonic : PADDB +// Supported forms : (4 forms) +// +// * PADDB mm, mm [MMX] +// * PADDB m64, mm [MMX] +// * PADDB xmm, xmm [SSE2] +// * PADDB m128, xmm [SSE2] +// +func (self *Program) PADDB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PADDB", 2, Operands { v0, v1 }) + // PADDB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xfc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xfc) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PADDB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xfc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xfc) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PADDB") + } + return p +} + +// PADDD performs "Add Packed Doubleword Integers". +// +// Mnemonic : PADDD +// Supported forms : (4 forms) +// +// * PADDD mm, mm [MMX] +// * PADDD m64, mm [MMX] +// * PADDD xmm, xmm [SSE2] +// * PADDD m128, xmm [SSE2] +// +func (self *Program) PADDD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PADDD", 2, Operands { v0, v1 }) + // PADDD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xfe) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xfe) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PADDD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xfe) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xfe) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PADDD") + } + return p +} + +// PADDQ performs "Add Packed Quadword Integers". +// +// Mnemonic : PADDQ +// Supported forms : (4 forms) +// +// * PADDQ mm, mm [SSE2] +// * PADDQ m64, mm [SSE2] +// * PADDQ xmm, xmm [SSE2] +// * PADDQ m128, xmm [SSE2] +// +func (self *Program) PADDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PADDQ", 2, Operands { v0, v1 }) + // PADDQ mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDQ m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd4) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PADDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd4) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PADDQ") + } + return p +} + +// PADDSB performs "Add Packed Signed Byte Integers with Signed Saturation". +// +// Mnemonic : PADDSB +// Supported forms : (4 forms) +// +// * PADDSB mm, mm [MMX] +// * PADDSB m64, mm [MMX] +// * PADDSB xmm, xmm [SSE2] +// * PADDSB m128, xmm [SSE2] +// +func (self *Program) PADDSB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PADDSB", 2, Operands { v0, v1 }) + // PADDSB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xec) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDSB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xec) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PADDSB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xec) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDSB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xec) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PADDSB") + } + return p +} + +// PADDSW performs "Add Packed Signed Word Integers with Signed Saturation". +// +// Mnemonic : PADDSW +// Supported forms : (4 forms) +// +// * PADDSW mm, mm [MMX] +// * PADDSW m64, mm [MMX] +// * PADDSW xmm, xmm [SSE2] +// * PADDSW m128, xmm [SSE2] +// +func (self *Program) PADDSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PADDSW", 2, Operands { v0, v1 }) + // PADDSW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xed) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDSW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xed) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PADDSW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xed) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDSW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xed) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PADDSW") + } + return p +} + +// PADDUSB performs "Add Packed Unsigned Byte Integers with Unsigned Saturation". +// +// Mnemonic : PADDUSB +// Supported forms : (4 forms) +// +// * PADDUSB mm, mm [MMX] +// * PADDUSB m64, mm [MMX] +// * PADDUSB xmm, xmm [SSE2] +// * PADDUSB m128, xmm [SSE2] +// +func (self *Program) PADDUSB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PADDUSB", 2, Operands { v0, v1 }) + // PADDUSB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xdc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDUSB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xdc) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PADDUSB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xdc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDUSB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xdc) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PADDUSB") + } + return p +} + +// PADDUSW performs "Add Packed Unsigned Word Integers with Unsigned Saturation". +// +// Mnemonic : PADDUSW +// Supported forms : (4 forms) +// +// * PADDUSW mm, mm [MMX] +// * PADDUSW m64, mm [MMX] +// * PADDUSW xmm, xmm [SSE2] +// * PADDUSW m128, xmm [SSE2] +// +func (self *Program) PADDUSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PADDUSW", 2, Operands { v0, v1 }) + // PADDUSW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xdd) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDUSW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xdd) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PADDUSW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xdd) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDUSW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xdd) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PADDUSW") + } + return p +} + +// PADDW performs "Add Packed Word Integers". +// +// Mnemonic : PADDW +// Supported forms : (4 forms) +// +// * PADDW mm, mm [MMX] +// * PADDW m64, mm [MMX] +// * PADDW xmm, xmm [SSE2] +// * PADDW m128, xmm [SSE2] +// +func (self *Program) PADDW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PADDW", 2, Operands { v0, v1 }) + // PADDW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xfd) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xfd) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PADDW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xfd) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PADDW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xfd) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PADDW") + } + return p +} + +// PALIGNR performs "Packed Align Right". +// +// Mnemonic : PALIGNR +// Supported forms : (4 forms) +// +// * PALIGNR imm8, mm, mm [SSSE3] +// * PALIGNR imm8, m64, mm [SSSE3] +// * PALIGNR imm8, xmm, xmm [SSSE3] +// * PALIGNR imm8, m128, xmm [SSSE3] +// +func (self *Program) PALIGNR(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PALIGNR", 3, Operands { v0, v1, v2 }) + // PALIGNR imm8, mm, mm + if isImm8(v0) && isMM(v1) && isMM(v2) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PALIGNR imm8, m64, mm + if isImm8(v0) && isM64(v1) && isMM(v2) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0f) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // PALIGNR imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PALIGNR imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0f) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PALIGNR") + } + return p +} + +// PAND performs "Packed Bitwise Logical AND". +// +// Mnemonic : PAND +// Supported forms : (4 forms) +// +// * PAND mm, mm [MMX] +// * PAND m64, mm [MMX] +// * PAND xmm, xmm [SSE2] +// * PAND m128, xmm [SSE2] +// +func (self *Program) PAND(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PAND", 2, Operands { v0, v1 }) + // PAND mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PAND m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xdb) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PAND xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PAND m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xdb) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PAND") + } + return p +} + +// PANDN performs "Packed Bitwise Logical AND NOT". +// +// Mnemonic : PANDN +// Supported forms : (4 forms) +// +// * PANDN mm, mm [MMX] +// * PANDN m64, mm [MMX] +// * PANDN xmm, xmm [SSE2] +// * PANDN m128, xmm [SSE2] +// +func (self *Program) PANDN(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PANDN", 2, Operands { v0, v1 }) + // PANDN mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PANDN m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xdf) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PANDN xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PANDN m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xdf) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PANDN") + } + return p +} + +// PAUSE performs "Spin Loop Hint". +// +// Mnemonic : PAUSE +// Supported forms : (1 form) +// +// * PAUSE +// +func (self *Program) PAUSE() *Instruction { + p := self.alloc("PAUSE", 0, Operands { }) + // PAUSE + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.emit(0x90) + }) + return p +} + +// PAVGB performs "Average Packed Byte Integers". +// +// Mnemonic : PAVGB +// Supported forms : (4 forms) +// +// * PAVGB mm, mm [MMX+] +// * PAVGB m64, mm [MMX+] +// * PAVGB xmm, xmm [SSE2] +// * PAVGB m128, xmm [SSE2] +// +func (self *Program) PAVGB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PAVGB", 2, Operands { v0, v1 }) + // PAVGB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe0) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PAVGB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe0) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PAVGB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe0) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PAVGB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe0) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PAVGB") + } + return p +} + +// PAVGUSB performs "Average Packed Byte Integers". +// +// Mnemonic : PAVGUSB +// Supported forms : (2 forms) +// +// * PAVGUSB mm, mm [3dnow!] +// * PAVGUSB m64, mm [3dnow!] +// +func (self *Program) PAVGUSB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PAVGUSB", 2, Operands { v0, v1 }) + // PAVGUSB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0xbf) + }) + } + // PAVGUSB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0xbf) + }) + } + if p.len == 0 { + panic("invalid operands for PAVGUSB") + } + return p +} + +// PAVGW performs "Average Packed Word Integers". +// +// Mnemonic : PAVGW +// Supported forms : (4 forms) +// +// * PAVGW mm, mm [MMX+] +// * PAVGW m64, mm [MMX+] +// * PAVGW xmm, xmm [SSE2] +// * PAVGW m128, xmm [SSE2] +// +func (self *Program) PAVGW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PAVGW", 2, Operands { v0, v1 }) + // PAVGW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe3) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PAVGW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe3) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PAVGW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe3) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PAVGW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe3) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PAVGW") + } + return p +} + +// PBLENDVB performs "Variable Blend Packed Bytes". +// +// Mnemonic : PBLENDVB +// Supported forms : (2 forms) +// +// * PBLENDVB xmm0, xmm, xmm [SSE4.1] +// * PBLENDVB xmm0, m128, xmm [SSE4.1] +// +func (self *Program) PBLENDVB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PBLENDVB", 3, Operands { v0, v1, v2 }) + // PBLENDVB xmm0, xmm, xmm + if v0 == XMM0 && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x10) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // PBLENDVB xmm0, m128, xmm + if v0 == XMM0 && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x10) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PBLENDVB") + } + return p +} + +// PBLENDW performs "Blend Packed Words". +// +// Mnemonic : PBLENDW +// Supported forms : (2 forms) +// +// * PBLENDW imm8, xmm, xmm [SSE4.1] +// * PBLENDW imm8, m128, xmm [SSE4.1] +// +func (self *Program) PBLENDW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PBLENDW", 3, Operands { v0, v1, v2 }) + // PBLENDW imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PBLENDW imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0e) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PBLENDW") + } + return p +} + +// PCLMULQDQ performs "Carry-Less Quadword Multiplication". +// +// Mnemonic : PCLMULQDQ +// Supported forms : (2 forms) +// +// * PCLMULQDQ imm8, xmm, xmm [PCLMULQDQ] +// * PCLMULQDQ imm8, m128, xmm [PCLMULQDQ] +// +func (self *Program) PCLMULQDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PCLMULQDQ", 3, Operands { v0, v1, v2 }) + // PCLMULQDQ imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_PCLMULQDQ) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x44) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PCLMULQDQ imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_PCLMULQDQ) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x44) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PCLMULQDQ") + } + return p +} + +// PCMPEQB performs "Compare Packed Byte Data for Equality". +// +// Mnemonic : PCMPEQB +// Supported forms : (4 forms) +// +// * PCMPEQB mm, mm [MMX] +// * PCMPEQB m64, mm [MMX] +// * PCMPEQB xmm, xmm [SSE2] +// * PCMPEQB m128, xmm [SSE2] +// +func (self *Program) PCMPEQB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PCMPEQB", 2, Operands { v0, v1 }) + // PCMPEQB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x74) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPEQB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x74) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PCMPEQB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x74) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPEQB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x74) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PCMPEQB") + } + return p +} + +// PCMPEQD performs "Compare Packed Doubleword Data for Equality". +// +// Mnemonic : PCMPEQD +// Supported forms : (4 forms) +// +// * PCMPEQD mm, mm [MMX] +// * PCMPEQD m64, mm [MMX] +// * PCMPEQD xmm, xmm [SSE2] +// * PCMPEQD m128, xmm [SSE2] +// +func (self *Program) PCMPEQD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PCMPEQD", 2, Operands { v0, v1 }) + // PCMPEQD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x76) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPEQD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x76) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PCMPEQD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x76) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPEQD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x76) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PCMPEQD") + } + return p +} + +// PCMPEQQ performs "Compare Packed Quadword Data for Equality". +// +// Mnemonic : PCMPEQQ +// Supported forms : (2 forms) +// +// * PCMPEQQ xmm, xmm [SSE4.1] +// * PCMPEQQ m128, xmm [SSE4.1] +// +func (self *Program) PCMPEQQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PCMPEQQ", 2, Operands { v0, v1 }) + // PCMPEQQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x29) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPEQQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x29) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PCMPEQQ") + } + return p +} + +// PCMPEQW performs "Compare Packed Word Data for Equality". +// +// Mnemonic : PCMPEQW +// Supported forms : (4 forms) +// +// * PCMPEQW mm, mm [MMX] +// * PCMPEQW m64, mm [MMX] +// * PCMPEQW xmm, xmm [SSE2] +// * PCMPEQW m128, xmm [SSE2] +// +func (self *Program) PCMPEQW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PCMPEQW", 2, Operands { v0, v1 }) + // PCMPEQW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x75) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPEQW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x75) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PCMPEQW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x75) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPEQW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x75) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PCMPEQW") + } + return p +} + +// PCMPESTRI performs "Packed Compare Explicit Length Strings, Return Index". +// +// Mnemonic : PCMPESTRI +// Supported forms : (2 forms) +// +// * PCMPESTRI imm8, xmm, xmm [SSE4.2] +// * PCMPESTRI imm8, m128, xmm [SSE4.2] +// +func (self *Program) PCMPESTRI(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PCMPESTRI", 3, Operands { v0, v1, v2 }) + // PCMPESTRI imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x61) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PCMPESTRI imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x61) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PCMPESTRI") + } + return p +} + +// PCMPESTRM performs "Packed Compare Explicit Length Strings, Return Mask". +// +// Mnemonic : PCMPESTRM +// Supported forms : (2 forms) +// +// * PCMPESTRM imm8, xmm, xmm [SSE4.2] +// * PCMPESTRM imm8, m128, xmm [SSE4.2] +// +func (self *Program) PCMPESTRM(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PCMPESTRM", 3, Operands { v0, v1, v2 }) + // PCMPESTRM imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x60) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PCMPESTRM imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x60) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PCMPESTRM") + } + return p +} + +// PCMPGTB performs "Compare Packed Signed Byte Integers for Greater Than". +// +// Mnemonic : PCMPGTB +// Supported forms : (4 forms) +// +// * PCMPGTB mm, mm [MMX] +// * PCMPGTB m64, mm [MMX] +// * PCMPGTB xmm, xmm [SSE2] +// * PCMPGTB m128, xmm [SSE2] +// +func (self *Program) PCMPGTB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PCMPGTB", 2, Operands { v0, v1 }) + // PCMPGTB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x64) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPGTB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x64) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PCMPGTB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x64) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPGTB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x64) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PCMPGTB") + } + return p +} + +// PCMPGTD performs "Compare Packed Signed Doubleword Integers for Greater Than". +// +// Mnemonic : PCMPGTD +// Supported forms : (4 forms) +// +// * PCMPGTD mm, mm [MMX] +// * PCMPGTD m64, mm [MMX] +// * PCMPGTD xmm, xmm [SSE2] +// * PCMPGTD m128, xmm [SSE2] +// +func (self *Program) PCMPGTD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PCMPGTD", 2, Operands { v0, v1 }) + // PCMPGTD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x66) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPGTD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x66) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PCMPGTD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x66) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPGTD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x66) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PCMPGTD") + } + return p +} + +// PCMPGTQ performs "Compare Packed Data for Greater Than". +// +// Mnemonic : PCMPGTQ +// Supported forms : (2 forms) +// +// * PCMPGTQ xmm, xmm [SSE4.2] +// * PCMPGTQ m128, xmm [SSE4.2] +// +func (self *Program) PCMPGTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PCMPGTQ", 2, Operands { v0, v1 }) + // PCMPGTQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x37) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPGTQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x37) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PCMPGTQ") + } + return p +} + +// PCMPGTW performs "Compare Packed Signed Word Integers for Greater Than". +// +// Mnemonic : PCMPGTW +// Supported forms : (4 forms) +// +// * PCMPGTW mm, mm [MMX] +// * PCMPGTW m64, mm [MMX] +// * PCMPGTW xmm, xmm [SSE2] +// * PCMPGTW m128, xmm [SSE2] +// +func (self *Program) PCMPGTW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PCMPGTW", 2, Operands { v0, v1 }) + // PCMPGTW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x65) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPGTW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x65) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PCMPGTW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x65) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PCMPGTW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x65) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PCMPGTW") + } + return p +} + +// PCMPISTRI performs "Packed Compare Implicit Length Strings, Return Index". +// +// Mnemonic : PCMPISTRI +// Supported forms : (2 forms) +// +// * PCMPISTRI imm8, xmm, xmm [SSE4.2] +// * PCMPISTRI imm8, m128, xmm [SSE4.2] +// +func (self *Program) PCMPISTRI(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PCMPISTRI", 3, Operands { v0, v1, v2 }) + // PCMPISTRI imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x63) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PCMPISTRI imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x63) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PCMPISTRI") + } + return p +} + +// PCMPISTRM performs "Packed Compare Implicit Length Strings, Return Mask". +// +// Mnemonic : PCMPISTRM +// Supported forms : (2 forms) +// +// * PCMPISTRM imm8, xmm, xmm [SSE4.2] +// * PCMPISTRM imm8, m128, xmm [SSE4.2] +// +func (self *Program) PCMPISTRM(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PCMPISTRM", 3, Operands { v0, v1, v2 }) + // PCMPISTRM imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x62) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PCMPISTRM imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x62) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PCMPISTRM") + } + return p +} + +// PDEP performs "Parallel Bits Deposit". +// +// Mnemonic : PDEP +// Supported forms : (4 forms) +// +// * PDEP r32, r32, r32 [BMI2] +// * PDEP m32, r32, r32 [BMI2] +// * PDEP r64, r64, r64 [BMI2] +// * PDEP m64, r64, r64 [BMI2] +// +func (self *Program) PDEP(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PDEP", 3, Operands { v0, v1, v2 }) + // PDEP r32, r32, r32 + if isReg32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7b ^ (hlcode(v[1]) << 3)) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // PDEP m32, r32, r32 + if isM32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x03, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf5) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // PDEP r64, r64, r64 + if isReg64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfb ^ (hlcode(v[1]) << 3)) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // PDEP m64, r64, r64 + if isM64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x83, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf5) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PDEP") + } + return p +} + +// PEXT performs "Parallel Bits Extract". +// +// Mnemonic : PEXT +// Supported forms : (4 forms) +// +// * PEXT r32, r32, r32 [BMI2] +// * PEXT m32, r32, r32 [BMI2] +// * PEXT r64, r64, r64 [BMI2] +// * PEXT m64, r64, r64 [BMI2] +// +func (self *Program) PEXT(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PEXT", 3, Operands { v0, v1, v2 }) + // PEXT r32, r32, r32 + if isReg32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7a ^ (hlcode(v[1]) << 3)) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // PEXT m32, r32, r32 + if isM32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x02, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf5) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // PEXT r64, r64, r64 + if isReg64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfa ^ (hlcode(v[1]) << 3)) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // PEXT m64, r64, r64 + if isM64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x82, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf5) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PEXT") + } + return p +} + +// PEXTRB performs "Extract Byte". +// +// Mnemonic : PEXTRB +// Supported forms : (2 forms) +// +// * PEXTRB imm8, xmm, r32 [SSE4.1] +// * PEXTRB imm8, xmm, m8 [SSE4.1] +// +func (self *Program) PEXTRB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PEXTRB", 3, Operands { v0, v1, v2 }) + // PEXTRB imm8, xmm, r32 + if isImm8(v0) && isXMM(v1) && isReg32(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[2], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x14) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // PEXTRB imm8, xmm, m8 + if isImm8(v0) && isXMM(v1) && isM8(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[2]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x14) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PEXTRB") + } + return p +} + +// PEXTRD performs "Extract Doubleword". +// +// Mnemonic : PEXTRD +// Supported forms : (2 forms) +// +// * PEXTRD imm8, xmm, r32 [SSE4.1] +// * PEXTRD imm8, xmm, m32 [SSE4.1] +// +func (self *Program) PEXTRD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PEXTRD", 3, Operands { v0, v1, v2 }) + // PEXTRD imm8, xmm, r32 + if isImm8(v0) && isXMM(v1) && isReg32(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[2], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // PEXTRD imm8, xmm, m32 + if isImm8(v0) && isXMM(v1) && isM32(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[2]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PEXTRD") + } + return p +} + +// PEXTRQ performs "Extract Quadword". +// +// Mnemonic : PEXTRQ +// Supported forms : (2 forms) +// +// * PEXTRQ imm8, xmm, r64 [SSE4.1] +// * PEXTRQ imm8, xmm, m64 [SSE4.1] +// +func (self *Program) PEXTRQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PEXTRQ", 3, Operands { v0, v1, v2 }) + // PEXTRQ imm8, xmm, r64 + if isImm8(v0) && isXMM(v1) && isReg64(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[2])) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // PEXTRQ imm8, xmm, m64 + if isImm8(v0) && isXMM(v1) && isM64(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexm(1, hcode(v[1]), addr(v[2])) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PEXTRQ") + } + return p +} + +// PEXTRW performs "Extract Word". +// +// Mnemonic : PEXTRW +// Supported forms : (3 forms) +// +// * PEXTRW imm8, mm, r32 [MMX+] +// * PEXTRW imm8, xmm, r32 [SSE4.1] +// * PEXTRW imm8, xmm, m16 [SSE4.1] +// +func (self *Program) PEXTRW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PEXTRW", 3, Operands { v0, v1, v2 }) + // PEXTRW imm8, mm, r32 + if isImm8(v0) && isMM(v1) && isReg32(v2) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0xc5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PEXTRW imm8, xmm, r32 + if isImm8(v0) && isXMM(v1) && isReg32(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[2], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x15) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0xc5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PEXTRW imm8, xmm, m16 + if isImm8(v0) && isXMM(v1) && isM16(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[2]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x15) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PEXTRW") + } + return p +} + +// PF2ID performs "Packed Floating-Point to Integer Doubleword Converson". +// +// Mnemonic : PF2ID +// Supported forms : (2 forms) +// +// * PF2ID mm, mm [3dnow!] +// * PF2ID m64, mm [3dnow!] +// +func (self *Program) PF2ID(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PF2ID", 2, Operands { v0, v1 }) + // PF2ID mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0x1d) + }) + } + // PF2ID m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0x1d) + }) + } + if p.len == 0 { + panic("invalid operands for PF2ID") + } + return p +} + +// PF2IW performs "Packed Floating-Point to Integer Word Conversion". +// +// Mnemonic : PF2IW +// Supported forms : (2 forms) +// +// * PF2IW mm, mm [3dnow!+] +// * PF2IW m64, mm [3dnow!+] +// +func (self *Program) PF2IW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PF2IW", 2, Operands { v0, v1 }) + // PF2IW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW_PLUS) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0x1c) + }) + } + // PF2IW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW_PLUS) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0x1c) + }) + } + if p.len == 0 { + panic("invalid operands for PF2IW") + } + return p +} + +// PFACC performs "Packed Floating-Point Accumulate". +// +// Mnemonic : PFACC +// Supported forms : (2 forms) +// +// * PFACC mm, mm [3dnow!] +// * PFACC m64, mm [3dnow!] +// +func (self *Program) PFACC(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFACC", 2, Operands { v0, v1 }) + // PFACC mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0xae) + }) + } + // PFACC m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0xae) + }) + } + if p.len == 0 { + panic("invalid operands for PFACC") + } + return p +} + +// PFADD performs "Packed Floating-Point Add". +// +// Mnemonic : PFADD +// Supported forms : (2 forms) +// +// * PFADD mm, mm [3dnow!] +// * PFADD m64, mm [3dnow!] +// +func (self *Program) PFADD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFADD", 2, Operands { v0, v1 }) + // PFADD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0x9e) + }) + } + // PFADD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0x9e) + }) + } + if p.len == 0 { + panic("invalid operands for PFADD") + } + return p +} + +// PFCMPEQ performs "Packed Floating-Point Compare for Equal". +// +// Mnemonic : PFCMPEQ +// Supported forms : (2 forms) +// +// * PFCMPEQ mm, mm [3dnow!] +// * PFCMPEQ m64, mm [3dnow!] +// +func (self *Program) PFCMPEQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFCMPEQ", 2, Operands { v0, v1 }) + // PFCMPEQ mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0xb0) + }) + } + // PFCMPEQ m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0xb0) + }) + } + if p.len == 0 { + panic("invalid operands for PFCMPEQ") + } + return p +} + +// PFCMPGE performs "Packed Floating-Point Compare for Greater or Equal". +// +// Mnemonic : PFCMPGE +// Supported forms : (2 forms) +// +// * PFCMPGE mm, mm [3dnow!] +// * PFCMPGE m64, mm [3dnow!] +// +func (self *Program) PFCMPGE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFCMPGE", 2, Operands { v0, v1 }) + // PFCMPGE mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0x90) + }) + } + // PFCMPGE m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0x90) + }) + } + if p.len == 0 { + panic("invalid operands for PFCMPGE") + } + return p +} + +// PFCMPGT performs "Packed Floating-Point Compare for Greater Than". +// +// Mnemonic : PFCMPGT +// Supported forms : (2 forms) +// +// * PFCMPGT mm, mm [3dnow!] +// * PFCMPGT m64, mm [3dnow!] +// +func (self *Program) PFCMPGT(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFCMPGT", 2, Operands { v0, v1 }) + // PFCMPGT mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0xa0) + }) + } + // PFCMPGT m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0xa0) + }) + } + if p.len == 0 { + panic("invalid operands for PFCMPGT") + } + return p +} + +// PFMAX performs "Packed Floating-Point Maximum". +// +// Mnemonic : PFMAX +// Supported forms : (2 forms) +// +// * PFMAX mm, mm [3dnow!] +// * PFMAX m64, mm [3dnow!] +// +func (self *Program) PFMAX(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFMAX", 2, Operands { v0, v1 }) + // PFMAX mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0xa4) + }) + } + // PFMAX m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0xa4) + }) + } + if p.len == 0 { + panic("invalid operands for PFMAX") + } + return p +} + +// PFMIN performs "Packed Floating-Point Minimum". +// +// Mnemonic : PFMIN +// Supported forms : (2 forms) +// +// * PFMIN mm, mm [3dnow!] +// * PFMIN m64, mm [3dnow!] +// +func (self *Program) PFMIN(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFMIN", 2, Operands { v0, v1 }) + // PFMIN mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0x94) + }) + } + // PFMIN m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0x94) + }) + } + if p.len == 0 { + panic("invalid operands for PFMIN") + } + return p +} + +// PFMUL performs "Packed Floating-Point Multiply". +// +// Mnemonic : PFMUL +// Supported forms : (2 forms) +// +// * PFMUL mm, mm [3dnow!] +// * PFMUL m64, mm [3dnow!] +// +func (self *Program) PFMUL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFMUL", 2, Operands { v0, v1 }) + // PFMUL mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0xb4) + }) + } + // PFMUL m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0xb4) + }) + } + if p.len == 0 { + panic("invalid operands for PFMUL") + } + return p +} + +// PFNACC performs "Packed Floating-Point Negative Accumulate". +// +// Mnemonic : PFNACC +// Supported forms : (2 forms) +// +// * PFNACC mm, mm [3dnow!+] +// * PFNACC m64, mm [3dnow!+] +// +func (self *Program) PFNACC(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFNACC", 2, Operands { v0, v1 }) + // PFNACC mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW_PLUS) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0x8a) + }) + } + // PFNACC m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW_PLUS) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0x8a) + }) + } + if p.len == 0 { + panic("invalid operands for PFNACC") + } + return p +} + +// PFPNACC performs "Packed Floating-Point Positive-Negative Accumulate". +// +// Mnemonic : PFPNACC +// Supported forms : (2 forms) +// +// * PFPNACC mm, mm [3dnow!+] +// * PFPNACC m64, mm [3dnow!+] +// +func (self *Program) PFPNACC(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFPNACC", 2, Operands { v0, v1 }) + // PFPNACC mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW_PLUS) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0x8e) + }) + } + // PFPNACC m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW_PLUS) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0x8e) + }) + } + if p.len == 0 { + panic("invalid operands for PFPNACC") + } + return p +} + +// PFRCP performs "Packed Floating-Point Reciprocal Approximation". +// +// Mnemonic : PFRCP +// Supported forms : (2 forms) +// +// * PFRCP mm, mm [3dnow!] +// * PFRCP m64, mm [3dnow!] +// +func (self *Program) PFRCP(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFRCP", 2, Operands { v0, v1 }) + // PFRCP mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0x96) + }) + } + // PFRCP m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0x96) + }) + } + if p.len == 0 { + panic("invalid operands for PFRCP") + } + return p +} + +// PFRCPIT1 performs "Packed Floating-Point Reciprocal Iteration 1". +// +// Mnemonic : PFRCPIT1 +// Supported forms : (2 forms) +// +// * PFRCPIT1 mm, mm [3dnow!] +// * PFRCPIT1 m64, mm [3dnow!] +// +func (self *Program) PFRCPIT1(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFRCPIT1", 2, Operands { v0, v1 }) + // PFRCPIT1 mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0xa6) + }) + } + // PFRCPIT1 m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0xa6) + }) + } + if p.len == 0 { + panic("invalid operands for PFRCPIT1") + } + return p +} + +// PFRCPIT2 performs "Packed Floating-Point Reciprocal Iteration 2". +// +// Mnemonic : PFRCPIT2 +// Supported forms : (2 forms) +// +// * PFRCPIT2 mm, mm [3dnow!] +// * PFRCPIT2 m64, mm [3dnow!] +// +func (self *Program) PFRCPIT2(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFRCPIT2", 2, Operands { v0, v1 }) + // PFRCPIT2 mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0xb6) + }) + } + // PFRCPIT2 m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0xb6) + }) + } + if p.len == 0 { + panic("invalid operands for PFRCPIT2") + } + return p +} + +// PFRSQIT1 performs "Packed Floating-Point Reciprocal Square Root Iteration 1". +// +// Mnemonic : PFRSQIT1 +// Supported forms : (2 forms) +// +// * PFRSQIT1 mm, mm [3dnow!] +// * PFRSQIT1 m64, mm [3dnow!] +// +func (self *Program) PFRSQIT1(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFRSQIT1", 2, Operands { v0, v1 }) + // PFRSQIT1 mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0xa7) + }) + } + // PFRSQIT1 m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0xa7) + }) + } + if p.len == 0 { + panic("invalid operands for PFRSQIT1") + } + return p +} + +// PFRSQRT performs "Packed Floating-Point Reciprocal Square Root Approximation". +// +// Mnemonic : PFRSQRT +// Supported forms : (2 forms) +// +// * PFRSQRT mm, mm [3dnow!] +// * PFRSQRT m64, mm [3dnow!] +// +func (self *Program) PFRSQRT(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFRSQRT", 2, Operands { v0, v1 }) + // PFRSQRT mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0x97) + }) + } + // PFRSQRT m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0x97) + }) + } + if p.len == 0 { + panic("invalid operands for PFRSQRT") + } + return p +} + +// PFSUB performs "Packed Floating-Point Subtract". +// +// Mnemonic : PFSUB +// Supported forms : (2 forms) +// +// * PFSUB mm, mm [3dnow!] +// * PFSUB m64, mm [3dnow!] +// +func (self *Program) PFSUB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFSUB", 2, Operands { v0, v1 }) + // PFSUB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0x9a) + }) + } + // PFSUB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0x9a) + }) + } + if p.len == 0 { + panic("invalid operands for PFSUB") + } + return p +} + +// PFSUBR performs "Packed Floating-Point Subtract Reverse". +// +// Mnemonic : PFSUBR +// Supported forms : (2 forms) +// +// * PFSUBR mm, mm [3dnow!] +// * PFSUBR m64, mm [3dnow!] +// +func (self *Program) PFSUBR(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PFSUBR", 2, Operands { v0, v1 }) + // PFSUBR mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0xaa) + }) + } + // PFSUBR m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0xaa) + }) + } + if p.len == 0 { + panic("invalid operands for PFSUBR") + } + return p +} + +// PHADDD performs "Packed Horizontal Add Doubleword Integer". +// +// Mnemonic : PHADDD +// Supported forms : (4 forms) +// +// * PHADDD mm, mm [SSSE3] +// * PHADDD m64, mm [SSSE3] +// * PHADDD xmm, xmm [SSSE3] +// * PHADDD m128, xmm [SSSE3] +// +func (self *Program) PHADDD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PHADDD", 2, Operands { v0, v1 }) + // PHADDD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x02) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHADDD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x02) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PHADDD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x02) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHADDD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x02) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PHADDD") + } + return p +} + +// PHADDSW performs "Packed Horizontal Add Signed Word Integers with Signed Saturation". +// +// Mnemonic : PHADDSW +// Supported forms : (4 forms) +// +// * PHADDSW mm, mm [SSSE3] +// * PHADDSW m64, mm [SSSE3] +// * PHADDSW xmm, xmm [SSSE3] +// * PHADDSW m128, xmm [SSSE3] +// +func (self *Program) PHADDSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PHADDSW", 2, Operands { v0, v1 }) + // PHADDSW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x03) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHADDSW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x03) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PHADDSW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x03) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHADDSW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x03) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PHADDSW") + } + return p +} + +// PHADDW performs "Packed Horizontal Add Word Integers". +// +// Mnemonic : PHADDW +// Supported forms : (4 forms) +// +// * PHADDW mm, mm [SSSE3] +// * PHADDW m64, mm [SSSE3] +// * PHADDW xmm, xmm [SSSE3] +// * PHADDW m128, xmm [SSSE3] +// +func (self *Program) PHADDW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PHADDW", 2, Operands { v0, v1 }) + // PHADDW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x01) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHADDW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x01) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PHADDW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x01) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHADDW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x01) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PHADDW") + } + return p +} + +// PHMINPOSUW performs "Packed Horizontal Minimum of Unsigned Word Integers". +// +// Mnemonic : PHMINPOSUW +// Supported forms : (2 forms) +// +// * PHMINPOSUW xmm, xmm [SSE4.1] +// * PHMINPOSUW m128, xmm [SSE4.1] +// +func (self *Program) PHMINPOSUW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PHMINPOSUW", 2, Operands { v0, v1 }) + // PHMINPOSUW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x41) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHMINPOSUW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x41) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PHMINPOSUW") + } + return p +} + +// PHSUBD performs "Packed Horizontal Subtract Doubleword Integers". +// +// Mnemonic : PHSUBD +// Supported forms : (4 forms) +// +// * PHSUBD mm, mm [SSSE3] +// * PHSUBD m64, mm [SSSE3] +// * PHSUBD xmm, xmm [SSSE3] +// * PHSUBD m128, xmm [SSSE3] +// +func (self *Program) PHSUBD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PHSUBD", 2, Operands { v0, v1 }) + // PHSUBD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x06) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHSUBD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x06) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PHSUBD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x06) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHSUBD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x06) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PHSUBD") + } + return p +} + +// PHSUBSW performs "Packed Horizontal Subtract Signed Word Integers with Signed Saturation". +// +// Mnemonic : PHSUBSW +// Supported forms : (4 forms) +// +// * PHSUBSW mm, mm [SSSE3] +// * PHSUBSW m64, mm [SSSE3] +// * PHSUBSW xmm, xmm [SSSE3] +// * PHSUBSW m128, xmm [SSSE3] +// +func (self *Program) PHSUBSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PHSUBSW", 2, Operands { v0, v1 }) + // PHSUBSW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x07) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHSUBSW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x07) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PHSUBSW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x07) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHSUBSW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x07) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PHSUBSW") + } + return p +} + +// PHSUBW performs "Packed Horizontal Subtract Word Integers". +// +// Mnemonic : PHSUBW +// Supported forms : (4 forms) +// +// * PHSUBW mm, mm [SSSE3] +// * PHSUBW m64, mm [SSSE3] +// * PHSUBW xmm, xmm [SSSE3] +// * PHSUBW m128, xmm [SSSE3] +// +func (self *Program) PHSUBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PHSUBW", 2, Operands { v0, v1 }) + // PHSUBW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x05) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHSUBW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x05) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PHSUBW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x05) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PHSUBW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x05) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PHSUBW") + } + return p +} + +// PI2FD performs "Packed Integer to Floating-Point Doubleword Conversion". +// +// Mnemonic : PI2FD +// Supported forms : (2 forms) +// +// * PI2FD mm, mm [3dnow!] +// * PI2FD m64, mm [3dnow!] +// +func (self *Program) PI2FD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PI2FD", 2, Operands { v0, v1 }) + // PI2FD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0x0d) + }) + } + // PI2FD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0x0d) + }) + } + if p.len == 0 { + panic("invalid operands for PI2FD") + } + return p +} + +// PI2FW performs "Packed Integer to Floating-Point Word Conversion". +// +// Mnemonic : PI2FW +// Supported forms : (2 forms) +// +// * PI2FW mm, mm [3dnow!+] +// * PI2FW m64, mm [3dnow!+] +// +func (self *Program) PI2FW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PI2FW", 2, Operands { v0, v1 }) + // PI2FW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW_PLUS) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0x0c) + }) + } + // PI2FW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW_PLUS) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0x0c) + }) + } + if p.len == 0 { + panic("invalid operands for PI2FW") + } + return p +} + +// PINSRB performs "Insert Byte". +// +// Mnemonic : PINSRB +// Supported forms : (2 forms) +// +// * PINSRB imm8, r32, xmm [SSE4.1] +// * PINSRB imm8, m8, xmm [SSE4.1] +// +func (self *Program) PINSRB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PINSRB", 3, Operands { v0, v1, v2 }) + // PINSRB imm8, r32, xmm + if isImm8(v0) && isReg32(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x20) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PINSRB imm8, m8, xmm + if isImm8(v0) && isM8(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x20) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PINSRB") + } + return p +} + +// PINSRD performs "Insert Doubleword". +// +// Mnemonic : PINSRD +// Supported forms : (2 forms) +// +// * PINSRD imm8, r32, xmm [SSE4.1] +// * PINSRD imm8, m32, xmm [SSE4.1] +// +func (self *Program) PINSRD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PINSRD", 3, Operands { v0, v1, v2 }) + // PINSRD imm8, r32, xmm + if isImm8(v0) && isReg32(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x22) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PINSRD imm8, m32, xmm + if isImm8(v0) && isM32(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x22) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PINSRD") + } + return p +} + +// PINSRQ performs "Insert Quadword". +// +// Mnemonic : PINSRQ +// Supported forms : (2 forms) +// +// * PINSRQ imm8, r64, xmm [SSE4.1] +// * PINSRQ imm8, m64, xmm [SSE4.1] +// +func (self *Program) PINSRQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PINSRQ", 3, Operands { v0, v1, v2 }) + // PINSRQ imm8, r64, xmm + if isImm8(v0) && isReg64(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x48 | hcode(v[2]) << 2 | hcode(v[1])) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x22) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PINSRQ imm8, m64, xmm + if isImm8(v0) && isM64(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexm(1, hcode(v[2]), addr(v[1])) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x22) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PINSRQ") + } + return p +} + +// PINSRW performs "Insert Word". +// +// Mnemonic : PINSRW +// Supported forms : (4 forms) +// +// * PINSRW imm8, r32, mm [MMX+] +// * PINSRW imm8, m16, mm [MMX+] +// * PINSRW imm8, r32, xmm [SSE2] +// * PINSRW imm8, m16, xmm [SSE2] +// +func (self *Program) PINSRW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PINSRW", 3, Operands { v0, v1, v2 }) + // PINSRW imm8, r32, mm + if isImm8(v0) && isReg32(v1) && isMM(v2) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0xc4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PINSRW imm8, m16, mm + if isImm8(v0) && isM16(v1) && isMM(v2) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xc4) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // PINSRW imm8, r32, xmm + if isImm8(v0) && isReg32(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0xc4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PINSRW imm8, m16, xmm + if isImm8(v0) && isM16(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xc4) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PINSRW") + } + return p +} + +// PMADDUBSW performs "Multiply and Add Packed Signed and Unsigned Byte Integers". +// +// Mnemonic : PMADDUBSW +// Supported forms : (4 forms) +// +// * PMADDUBSW mm, mm [SSSE3] +// * PMADDUBSW m64, mm [SSSE3] +// * PMADDUBSW xmm, xmm [SSSE3] +// * PMADDUBSW m128, xmm [SSSE3] +// +func (self *Program) PMADDUBSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMADDUBSW", 2, Operands { v0, v1 }) + // PMADDUBSW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x04) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMADDUBSW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x04) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PMADDUBSW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x04) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMADDUBSW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x04) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMADDUBSW") + } + return p +} + +// PMADDWD performs "Multiply and Add Packed Signed Word Integers". +// +// Mnemonic : PMADDWD +// Supported forms : (4 forms) +// +// * PMADDWD mm, mm [MMX] +// * PMADDWD m64, mm [MMX] +// * PMADDWD xmm, xmm [SSE2] +// * PMADDWD m128, xmm [SSE2] +// +func (self *Program) PMADDWD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMADDWD", 2, Operands { v0, v1 }) + // PMADDWD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMADDWD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf5) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PMADDWD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMADDWD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf5) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMADDWD") + } + return p +} + +// PMAXSB performs "Maximum of Packed Signed Byte Integers". +// +// Mnemonic : PMAXSB +// Supported forms : (2 forms) +// +// * PMAXSB xmm, xmm [SSE4.1] +// * PMAXSB m128, xmm [SSE4.1] +// +func (self *Program) PMAXSB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMAXSB", 2, Operands { v0, v1 }) + // PMAXSB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x3c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMAXSB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x3c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMAXSB") + } + return p +} + +// PMAXSD performs "Maximum of Packed Signed Doubleword Integers". +// +// Mnemonic : PMAXSD +// Supported forms : (2 forms) +// +// * PMAXSD xmm, xmm [SSE4.1] +// * PMAXSD m128, xmm [SSE4.1] +// +func (self *Program) PMAXSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMAXSD", 2, Operands { v0, v1 }) + // PMAXSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x3d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMAXSD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x3d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMAXSD") + } + return p +} + +// PMAXSW performs "Maximum of Packed Signed Word Integers". +// +// Mnemonic : PMAXSW +// Supported forms : (4 forms) +// +// * PMAXSW mm, mm [MMX+] +// * PMAXSW m64, mm [MMX+] +// * PMAXSW xmm, xmm [SSE2] +// * PMAXSW m128, xmm [SSE2] +// +func (self *Program) PMAXSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMAXSW", 2, Operands { v0, v1 }) + // PMAXSW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xee) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMAXSW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xee) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PMAXSW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xee) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMAXSW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xee) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMAXSW") + } + return p +} + +// PMAXUB performs "Maximum of Packed Unsigned Byte Integers". +// +// Mnemonic : PMAXUB +// Supported forms : (4 forms) +// +// * PMAXUB mm, mm [MMX+] +// * PMAXUB m64, mm [MMX+] +// * PMAXUB xmm, xmm [SSE2] +// * PMAXUB m128, xmm [SSE2] +// +func (self *Program) PMAXUB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMAXUB", 2, Operands { v0, v1 }) + // PMAXUB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xde) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMAXUB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xde) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PMAXUB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xde) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMAXUB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xde) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMAXUB") + } + return p +} + +// PMAXUD performs "Maximum of Packed Unsigned Doubleword Integers". +// +// Mnemonic : PMAXUD +// Supported forms : (2 forms) +// +// * PMAXUD xmm, xmm [SSE4.1] +// * PMAXUD m128, xmm [SSE4.1] +// +func (self *Program) PMAXUD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMAXUD", 2, Operands { v0, v1 }) + // PMAXUD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMAXUD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x3f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMAXUD") + } + return p +} + +// PMAXUW performs "Maximum of Packed Unsigned Word Integers". +// +// Mnemonic : PMAXUW +// Supported forms : (2 forms) +// +// * PMAXUW xmm, xmm [SSE4.1] +// * PMAXUW m128, xmm [SSE4.1] +// +func (self *Program) PMAXUW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMAXUW", 2, Operands { v0, v1 }) + // PMAXUW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x3e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMAXUW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x3e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMAXUW") + } + return p +} + +// PMINSB performs "Minimum of Packed Signed Byte Integers". +// +// Mnemonic : PMINSB +// Supported forms : (2 forms) +// +// * PMINSB xmm, xmm [SSE4.1] +// * PMINSB m128, xmm [SSE4.1] +// +func (self *Program) PMINSB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMINSB", 2, Operands { v0, v1 }) + // PMINSB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x38) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMINSB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x38) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMINSB") + } + return p +} + +// PMINSD performs "Minimum of Packed Signed Doubleword Integers". +// +// Mnemonic : PMINSD +// Supported forms : (2 forms) +// +// * PMINSD xmm, xmm [SSE4.1] +// * PMINSD m128, xmm [SSE4.1] +// +func (self *Program) PMINSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMINSD", 2, Operands { v0, v1 }) + // PMINSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x39) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMINSD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x39) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMINSD") + } + return p +} + +// PMINSW performs "Minimum of Packed Signed Word Integers". +// +// Mnemonic : PMINSW +// Supported forms : (4 forms) +// +// * PMINSW mm, mm [MMX+] +// * PMINSW m64, mm [MMX+] +// * PMINSW xmm, xmm [SSE2] +// * PMINSW m128, xmm [SSE2] +// +func (self *Program) PMINSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMINSW", 2, Operands { v0, v1 }) + // PMINSW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xea) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMINSW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xea) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PMINSW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xea) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMINSW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xea) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMINSW") + } + return p +} + +// PMINUB performs "Minimum of Packed Unsigned Byte Integers". +// +// Mnemonic : PMINUB +// Supported forms : (4 forms) +// +// * PMINUB mm, mm [MMX+] +// * PMINUB m64, mm [MMX+] +// * PMINUB xmm, xmm [SSE2] +// * PMINUB m128, xmm [SSE2] +// +func (self *Program) PMINUB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMINUB", 2, Operands { v0, v1 }) + // PMINUB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xda) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMINUB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xda) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PMINUB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xda) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMINUB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xda) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMINUB") + } + return p +} + +// PMINUD performs "Minimum of Packed Unsigned Doubleword Integers". +// +// Mnemonic : PMINUD +// Supported forms : (2 forms) +// +// * PMINUD xmm, xmm [SSE4.1] +// * PMINUD m128, xmm [SSE4.1] +// +func (self *Program) PMINUD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMINUD", 2, Operands { v0, v1 }) + // PMINUD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMINUD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x3b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMINUD") + } + return p +} + +// PMINUW performs "Minimum of Packed Unsigned Word Integers". +// +// Mnemonic : PMINUW +// Supported forms : (2 forms) +// +// * PMINUW xmm, xmm [SSE4.1] +// * PMINUW m128, xmm [SSE4.1] +// +func (self *Program) PMINUW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMINUW", 2, Operands { v0, v1 }) + // PMINUW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x3a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMINUW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x3a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMINUW") + } + return p +} + +// PMOVMSKB performs "Move Byte Mask". +// +// Mnemonic : PMOVMSKB +// Supported forms : (2 forms) +// +// * PMOVMSKB mm, r32 [MMX+] +// * PMOVMSKB xmm, r32 [SSE2] +// +func (self *Program) PMOVMSKB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVMSKB", 2, Operands { v0, v1 }) + // PMOVMSKB mm, r32 + if isMM(v0) && isReg32(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd7) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVMSKB xmm, r32 + if isXMM(v0) && isReg32(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd7) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVMSKB") + } + return p +} + +// PMOVSXBD performs "Move Packed Byte Integers to Doubleword Integers with Sign Extension". +// +// Mnemonic : PMOVSXBD +// Supported forms : (2 forms) +// +// * PMOVSXBD xmm, xmm [SSE4.1] +// * PMOVSXBD m32, xmm [SSE4.1] +// +func (self *Program) PMOVSXBD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVSXBD", 2, Operands { v0, v1 }) + // PMOVSXBD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x21) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVSXBD m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x21) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVSXBD") + } + return p +} + +// PMOVSXBQ performs "Move Packed Byte Integers to Quadword Integers with Sign Extension". +// +// Mnemonic : PMOVSXBQ +// Supported forms : (2 forms) +// +// * PMOVSXBQ xmm, xmm [SSE4.1] +// * PMOVSXBQ m16, xmm [SSE4.1] +// +func (self *Program) PMOVSXBQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVSXBQ", 2, Operands { v0, v1 }) + // PMOVSXBQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x22) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVSXBQ m16, xmm + if isM16(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x22) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVSXBQ") + } + return p +} + +// PMOVSXBW performs "Move Packed Byte Integers to Word Integers with Sign Extension". +// +// Mnemonic : PMOVSXBW +// Supported forms : (2 forms) +// +// * PMOVSXBW xmm, xmm [SSE4.1] +// * PMOVSXBW m64, xmm [SSE4.1] +// +func (self *Program) PMOVSXBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVSXBW", 2, Operands { v0, v1 }) + // PMOVSXBW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x20) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVSXBW m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x20) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVSXBW") + } + return p +} + +// PMOVSXDQ performs "Move Packed Doubleword Integers to Quadword Integers with Sign Extension". +// +// Mnemonic : PMOVSXDQ +// Supported forms : (2 forms) +// +// * PMOVSXDQ xmm, xmm [SSE4.1] +// * PMOVSXDQ m64, xmm [SSE4.1] +// +func (self *Program) PMOVSXDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVSXDQ", 2, Operands { v0, v1 }) + // PMOVSXDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x25) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVSXDQ m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x25) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVSXDQ") + } + return p +} + +// PMOVSXWD performs "Move Packed Word Integers to Doubleword Integers with Sign Extension". +// +// Mnemonic : PMOVSXWD +// Supported forms : (2 forms) +// +// * PMOVSXWD xmm, xmm [SSE4.1] +// * PMOVSXWD m64, xmm [SSE4.1] +// +func (self *Program) PMOVSXWD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVSXWD", 2, Operands { v0, v1 }) + // PMOVSXWD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x23) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVSXWD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x23) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVSXWD") + } + return p +} + +// PMOVSXWQ performs "Move Packed Word Integers to Quadword Integers with Sign Extension". +// +// Mnemonic : PMOVSXWQ +// Supported forms : (2 forms) +// +// * PMOVSXWQ xmm, xmm [SSE4.1] +// * PMOVSXWQ m32, xmm [SSE4.1] +// +func (self *Program) PMOVSXWQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVSXWQ", 2, Operands { v0, v1 }) + // PMOVSXWQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x24) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVSXWQ m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x24) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVSXWQ") + } + return p +} + +// PMOVZXBD performs "Move Packed Byte Integers to Doubleword Integers with Zero Extension". +// +// Mnemonic : PMOVZXBD +// Supported forms : (2 forms) +// +// * PMOVZXBD xmm, xmm [SSE4.1] +// * PMOVZXBD m32, xmm [SSE4.1] +// +func (self *Program) PMOVZXBD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVZXBD", 2, Operands { v0, v1 }) + // PMOVZXBD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x31) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVZXBD m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x31) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVZXBD") + } + return p +} + +// PMOVZXBQ performs "Move Packed Byte Integers to Quadword Integers with Zero Extension". +// +// Mnemonic : PMOVZXBQ +// Supported forms : (2 forms) +// +// * PMOVZXBQ xmm, xmm [SSE4.1] +// * PMOVZXBQ m16, xmm [SSE4.1] +// +func (self *Program) PMOVZXBQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVZXBQ", 2, Operands { v0, v1 }) + // PMOVZXBQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x32) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVZXBQ m16, xmm + if isM16(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x32) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVZXBQ") + } + return p +} + +// PMOVZXBW performs "Move Packed Byte Integers to Word Integers with Zero Extension". +// +// Mnemonic : PMOVZXBW +// Supported forms : (2 forms) +// +// * PMOVZXBW xmm, xmm [SSE4.1] +// * PMOVZXBW m64, xmm [SSE4.1] +// +func (self *Program) PMOVZXBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVZXBW", 2, Operands { v0, v1 }) + // PMOVZXBW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x30) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVZXBW m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x30) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVZXBW") + } + return p +} + +// PMOVZXDQ performs "Move Packed Doubleword Integers to Quadword Integers with Zero Extension". +// +// Mnemonic : PMOVZXDQ +// Supported forms : (2 forms) +// +// * PMOVZXDQ xmm, xmm [SSE4.1] +// * PMOVZXDQ m64, xmm [SSE4.1] +// +func (self *Program) PMOVZXDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVZXDQ", 2, Operands { v0, v1 }) + // PMOVZXDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x35) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVZXDQ m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x35) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVZXDQ") + } + return p +} + +// PMOVZXWD performs "Move Packed Word Integers to Doubleword Integers with Zero Extension". +// +// Mnemonic : PMOVZXWD +// Supported forms : (2 forms) +// +// * PMOVZXWD xmm, xmm [SSE4.1] +// * PMOVZXWD m64, xmm [SSE4.1] +// +func (self *Program) PMOVZXWD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVZXWD", 2, Operands { v0, v1 }) + // PMOVZXWD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x33) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVZXWD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x33) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVZXWD") + } + return p +} + +// PMOVZXWQ performs "Move Packed Word Integers to Quadword Integers with Zero Extension". +// +// Mnemonic : PMOVZXWQ +// Supported forms : (2 forms) +// +// * PMOVZXWQ xmm, xmm [SSE4.1] +// * PMOVZXWQ m32, xmm [SSE4.1] +// +func (self *Program) PMOVZXWQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMOVZXWQ", 2, Operands { v0, v1 }) + // PMOVZXWQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x34) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMOVZXWQ m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x34) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMOVZXWQ") + } + return p +} + +// PMULDQ performs "Multiply Packed Signed Doubleword Integers and Store Quadword Result". +// +// Mnemonic : PMULDQ +// Supported forms : (2 forms) +// +// * PMULDQ xmm, xmm [SSE4.1] +// * PMULDQ m128, xmm [SSE4.1] +// +func (self *Program) PMULDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMULDQ", 2, Operands { v0, v1 }) + // PMULDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMULDQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMULDQ") + } + return p +} + +// PMULHRSW performs "Packed Multiply Signed Word Integers and Store High Result with Round and Scale". +// +// Mnemonic : PMULHRSW +// Supported forms : (4 forms) +// +// * PMULHRSW mm, mm [SSSE3] +// * PMULHRSW m64, mm [SSSE3] +// * PMULHRSW xmm, xmm [SSSE3] +// * PMULHRSW m128, xmm [SSSE3] +// +func (self *Program) PMULHRSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMULHRSW", 2, Operands { v0, v1 }) + // PMULHRSW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMULHRSW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x0b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PMULHRSW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMULHRSW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x0b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMULHRSW") + } + return p +} + +// PMULHRW performs "Packed Multiply High Rounded Word". +// +// Mnemonic : PMULHRW +// Supported forms : (2 forms) +// +// * PMULHRW mm, mm [3dnow!] +// * PMULHRW m64, mm [3dnow!] +// +func (self *Program) PMULHRW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMULHRW", 2, Operands { v0, v1 }) + // PMULHRW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0xb7) + }) + } + // PMULHRW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0xb7) + }) + } + if p.len == 0 { + panic("invalid operands for PMULHRW") + } + return p +} + +// PMULHUW performs "Multiply Packed Unsigned Word Integers and Store High Result". +// +// Mnemonic : PMULHUW +// Supported forms : (4 forms) +// +// * PMULHUW mm, mm [MMX+] +// * PMULHUW m64, mm [MMX+] +// * PMULHUW xmm, xmm [SSE2] +// * PMULHUW m128, xmm [SSE2] +// +func (self *Program) PMULHUW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMULHUW", 2, Operands { v0, v1 }) + // PMULHUW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMULHUW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe4) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PMULHUW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMULHUW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe4) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMULHUW") + } + return p +} + +// PMULHW performs "Multiply Packed Signed Word Integers and Store High Result". +// +// Mnemonic : PMULHW +// Supported forms : (4 forms) +// +// * PMULHW mm, mm [MMX] +// * PMULHW m64, mm [MMX] +// * PMULHW xmm, xmm [SSE2] +// * PMULHW m128, xmm [SSE2] +// +func (self *Program) PMULHW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMULHW", 2, Operands { v0, v1 }) + // PMULHW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe5) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMULHW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe5) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PMULHW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe5) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMULHW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe5) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMULHW") + } + return p +} + +// PMULLD performs "Multiply Packed Signed Doubleword Integers and Store Low Result". +// +// Mnemonic : PMULLD +// Supported forms : (2 forms) +// +// * PMULLD xmm, xmm [SSE4.1] +// * PMULLD m128, xmm [SSE4.1] +// +func (self *Program) PMULLD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMULLD", 2, Operands { v0, v1 }) + // PMULLD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x40) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMULLD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x40) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMULLD") + } + return p +} + +// PMULLW performs "Multiply Packed Signed Word Integers and Store Low Result". +// +// Mnemonic : PMULLW +// Supported forms : (4 forms) +// +// * PMULLW mm, mm [MMX] +// * PMULLW m64, mm [MMX] +// * PMULLW xmm, xmm [SSE2] +// * PMULLW m128, xmm [SSE2] +// +func (self *Program) PMULLW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMULLW", 2, Operands { v0, v1 }) + // PMULLW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd5) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMULLW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd5) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PMULLW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd5) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMULLW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd5) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMULLW") + } + return p +} + +// PMULUDQ performs "Multiply Packed Unsigned Doubleword Integers". +// +// Mnemonic : PMULUDQ +// Supported forms : (4 forms) +// +// * PMULUDQ mm, mm [SSE2] +// * PMULUDQ m64, mm [SSE2] +// * PMULUDQ xmm, xmm [SSE2] +// * PMULUDQ m128, xmm [SSE2] +// +func (self *Program) PMULUDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PMULUDQ", 2, Operands { v0, v1 }) + // PMULUDQ mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMULUDQ m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf4) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PMULUDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PMULUDQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf4) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PMULUDQ") + } + return p +} + +// POPCNTL performs "Count of Number of Bits Set to 1". +// +// Mnemonic : POPCNT +// Supported forms : (2 forms) +// +// * POPCNTL r32, r32 [POPCNT] +// * POPCNTL m32, r32 [POPCNT] +// +func (self *Program) POPCNTL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("POPCNTL", 2, Operands { v0, v1 }) + // POPCNTL r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_POPCNT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // POPCNTL m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_POPCNT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xb8) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for POPCNTL") + } + return p +} + +// POPCNTQ performs "Count of Number of Bits Set to 1". +// +// Mnemonic : POPCNT +// Supported forms : (2 forms) +// +// * POPCNTQ r64, r64 [POPCNT] +// * POPCNTQ m64, r64 [POPCNT] +// +func (self *Program) POPCNTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("POPCNTQ", 2, Operands { v0, v1 }) + // POPCNTQ r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_POPCNT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // POPCNTQ m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_POPCNT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0xb8) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for POPCNTQ") + } + return p +} + +// POPCNTW performs "Count of Number of Bits Set to 1". +// +// Mnemonic : POPCNT +// Supported forms : (2 forms) +// +// * POPCNTW r16, r16 [POPCNT] +// * POPCNTW m16, r16 [POPCNT] +// +func (self *Program) POPCNTW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("POPCNTW", 2, Operands { v0, v1 }) + // POPCNTW r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_POPCNT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // POPCNTW m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_POPCNT) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xb8) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for POPCNTW") + } + return p +} + +// POPQ performs "Pop a Value from the Stack". +// +// Mnemonic : POP +// Supported forms : (2 forms) +// +// * POPQ r64 +// * POPQ m64 +// +func (self *Program) POPQ(v0 interface{}) *Instruction { + p := self.alloc("POPQ", 1, Operands { v0 }) + // POPQ r64 + if isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0x58 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0x8f) + m.emit(0xc0 | lcode(v[0])) + }) + } + // POPQ m64 + if isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x8f) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for POPQ") + } + return p +} + +// POPW performs "Pop a Value from the Stack". +// +// Mnemonic : POP +// Supported forms : (2 forms) +// +// * POPW r16 +// * POPW m16 +// +func (self *Program) POPW(v0 interface{}) *Instruction { + p := self.alloc("POPW", 1, Operands { v0 }) + // POPW r16 + if isReg16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0x58 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0x8f) + m.emit(0xc0 | lcode(v[0])) + }) + } + // POPW m16 + if isM16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[0]), false) + m.emit(0x8f) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for POPW") + } + return p +} + +// POR performs "Packed Bitwise Logical OR". +// +// Mnemonic : POR +// Supported forms : (4 forms) +// +// * POR mm, mm [MMX] +// * POR m64, mm [MMX] +// * POR xmm, xmm [SSE2] +// * POR m128, xmm [SSE2] +// +func (self *Program) POR(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("POR", 2, Operands { v0, v1 }) + // POR mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xeb) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // POR m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xeb) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // POR xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xeb) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // POR m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xeb) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for POR") + } + return p +} + +// PREFETCH performs "Prefetch Data into Caches". +// +// Mnemonic : PREFETCH +// Supported forms : (1 form) +// +// * PREFETCH m8 [PREFETCH] +// +func (self *Program) PREFETCH(v0 interface{}) *Instruction { + p := self.alloc("PREFETCH", 1, Operands { v0 }) + // PREFETCH m8 + if isM8(v0) { + self.require(ISA_PREFETCH) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0d) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PREFETCH") + } + return p +} + +// PREFETCHNTA performs "Prefetch Data Into Caches using NTA Hint". +// +// Mnemonic : PREFETCHNTA +// Supported forms : (1 form) +// +// * PREFETCHNTA m8 [MMX+] +// +func (self *Program) PREFETCHNTA(v0 interface{}) *Instruction { + p := self.alloc("PREFETCHNTA", 1, Operands { v0 }) + // PREFETCHNTA m8 + if isM8(v0) { + self.require(ISA_MMX_PLUS) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x18) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PREFETCHNTA") + } + return p +} + +// PREFETCHT0 performs "Prefetch Data Into Caches using T0 Hint". +// +// Mnemonic : PREFETCHT0 +// Supported forms : (1 form) +// +// * PREFETCHT0 m8 [MMX+] +// +func (self *Program) PREFETCHT0(v0 interface{}) *Instruction { + p := self.alloc("PREFETCHT0", 1, Operands { v0 }) + // PREFETCHT0 m8 + if isM8(v0) { + self.require(ISA_MMX_PLUS) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x18) + m.mrsd(1, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PREFETCHT0") + } + return p +} + +// PREFETCHT1 performs "Prefetch Data Into Caches using T1 Hint". +// +// Mnemonic : PREFETCHT1 +// Supported forms : (1 form) +// +// * PREFETCHT1 m8 [MMX+] +// +func (self *Program) PREFETCHT1(v0 interface{}) *Instruction { + p := self.alloc("PREFETCHT1", 1, Operands { v0 }) + // PREFETCHT1 m8 + if isM8(v0) { + self.require(ISA_MMX_PLUS) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x18) + m.mrsd(2, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PREFETCHT1") + } + return p +} + +// PREFETCHT2 performs "Prefetch Data Into Caches using T2 Hint". +// +// Mnemonic : PREFETCHT2 +// Supported forms : (1 form) +// +// * PREFETCHT2 m8 [MMX+] +// +func (self *Program) PREFETCHT2(v0 interface{}) *Instruction { + p := self.alloc("PREFETCHT2", 1, Operands { v0 }) + // PREFETCHT2 m8 + if isM8(v0) { + self.require(ISA_MMX_PLUS) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x18) + m.mrsd(3, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PREFETCHT2") + } + return p +} + +// PREFETCHW performs "Prefetch Data into Caches in Anticipation of a Write". +// +// Mnemonic : PREFETCHW +// Supported forms : (1 form) +// +// * PREFETCHW m8 [PREFETCHW] +// +func (self *Program) PREFETCHW(v0 interface{}) *Instruction { + p := self.alloc("PREFETCHW", 1, Operands { v0 }) + // PREFETCHW m8 + if isM8(v0) { + self.require(ISA_PREFETCHW) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0d) + m.mrsd(1, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PREFETCHW") + } + return p +} + +// PREFETCHWT1 performs "Prefetch Vector Data Into Caches with Intent to Write and T1 Hint". +// +// Mnemonic : PREFETCHWT1 +// Supported forms : (1 form) +// +// * PREFETCHWT1 m8 [PREFETCHWT1] +// +func (self *Program) PREFETCHWT1(v0 interface{}) *Instruction { + p := self.alloc("PREFETCHWT1", 1, Operands { v0 }) + // PREFETCHWT1 m8 + if isM8(v0) { + self.require(ISA_PREFETCHWT1) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0d) + m.mrsd(2, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PREFETCHWT1") + } + return p +} + +// PSADBW performs "Compute Sum of Absolute Differences". +// +// Mnemonic : PSADBW +// Supported forms : (4 forms) +// +// * PSADBW mm, mm [MMX+] +// * PSADBW m64, mm [MMX+] +// * PSADBW xmm, xmm [SSE2] +// * PSADBW m128, xmm [SSE2] +// +func (self *Program) PSADBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSADBW", 2, Operands { v0, v1 }) + // PSADBW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSADBW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSADBW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSADBW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSADBW") + } + return p +} + +// PSHUFB performs "Packed Shuffle Bytes". +// +// Mnemonic : PSHUFB +// Supported forms : (4 forms) +// +// * PSHUFB mm, mm [SSSE3] +// * PSHUFB m64, mm [SSSE3] +// * PSHUFB xmm, xmm [SSSE3] +// * PSHUFB m128, xmm [SSSE3] +// +func (self *Program) PSHUFB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSHUFB", 2, Operands { v0, v1 }) + // PSHUFB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x00) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSHUFB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x00) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSHUFB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x00) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSHUFB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x00) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSHUFB") + } + return p +} + +// PSHUFD performs "Shuffle Packed Doublewords". +// +// Mnemonic : PSHUFD +// Supported forms : (2 forms) +// +// * PSHUFD imm8, xmm, xmm [SSE2] +// * PSHUFD imm8, m128, xmm [SSE2] +// +func (self *Program) PSHUFD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PSHUFD", 3, Operands { v0, v1, v2 }) + // PSHUFD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSHUFD imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PSHUFD") + } + return p +} + +// PSHUFHW performs "Shuffle Packed High Words". +// +// Mnemonic : PSHUFHW +// Supported forms : (2 forms) +// +// * PSHUFHW imm8, xmm, xmm [SSE2] +// * PSHUFHW imm8, m128, xmm [SSE2] +// +func (self *Program) PSHUFHW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PSHUFHW", 3, Operands { v0, v1, v2 }) + // PSHUFHW imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSHUFHW imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PSHUFHW") + } + return p +} + +// PSHUFLW performs "Shuffle Packed Low Words". +// +// Mnemonic : PSHUFLW +// Supported forms : (2 forms) +// +// * PSHUFLW imm8, xmm, xmm [SSE2] +// * PSHUFLW imm8, m128, xmm [SSE2] +// +func (self *Program) PSHUFLW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PSHUFLW", 3, Operands { v0, v1, v2 }) + // PSHUFLW imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSHUFLW imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PSHUFLW") + } + return p +} + +// PSHUFW performs "Shuffle Packed Words". +// +// Mnemonic : PSHUFW +// Supported forms : (2 forms) +// +// * PSHUFW imm8, mm, mm [MMX+] +// * PSHUFW imm8, m64, mm [MMX+] +// +func (self *Program) PSHUFW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("PSHUFW", 3, Operands { v0, v1, v2 }) + // PSHUFW imm8, mm, mm + if isImm8(v0) && isMM(v1) && isMM(v2) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSHUFW imm8, m64, mm + if isImm8(v0) && isM64(v1) && isMM(v2) { + self.require(ISA_MMX_PLUS) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PSHUFW") + } + return p +} + +// PSIGNB performs "Packed Sign of Byte Integers". +// +// Mnemonic : PSIGNB +// Supported forms : (4 forms) +// +// * PSIGNB mm, mm [SSSE3] +// * PSIGNB m64, mm [SSSE3] +// * PSIGNB xmm, xmm [SSSE3] +// * PSIGNB m128, xmm [SSSE3] +// +func (self *Program) PSIGNB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSIGNB", 2, Operands { v0, v1 }) + // PSIGNB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x08) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSIGNB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x08) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSIGNB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x08) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSIGNB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x08) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSIGNB") + } + return p +} + +// PSIGND performs "Packed Sign of Doubleword Integers". +// +// Mnemonic : PSIGND +// Supported forms : (4 forms) +// +// * PSIGND mm, mm [SSSE3] +// * PSIGND m64, mm [SSSE3] +// * PSIGND xmm, xmm [SSSE3] +// * PSIGND m128, xmm [SSSE3] +// +func (self *Program) PSIGND(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSIGND", 2, Operands { v0, v1 }) + // PSIGND mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x0a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSIGND m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x0a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSIGND xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x0a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSIGND m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x0a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSIGND") + } + return p +} + +// PSIGNW performs "Packed Sign of Word Integers". +// +// Mnemonic : PSIGNW +// Supported forms : (4 forms) +// +// * PSIGNW mm, mm [SSSE3] +// * PSIGNW m64, mm [SSSE3] +// * PSIGNW xmm, xmm [SSSE3] +// * PSIGNW m128, xmm [SSSE3] +// +func (self *Program) PSIGNW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSIGNW", 2, Operands { v0, v1 }) + // PSIGNW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x09) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSIGNW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x09) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSIGNW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x09) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSIGNW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSSE3) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x09) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSIGNW") + } + return p +} + +// PSLLD performs "Shift Packed Doubleword Data Left Logical". +// +// Mnemonic : PSLLD +// Supported forms : (6 forms) +// +// * PSLLD imm8, mm [MMX] +// * PSLLD mm, mm [MMX] +// * PSLLD m64, mm [MMX] +// * PSLLD imm8, xmm [SSE2] +// * PSLLD xmm, xmm [SSE2] +// * PSLLD m128, xmm [SSE2] +// +func (self *Program) PSLLD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSLLD", 2, Operands { v0, v1 }) + // PSLLD imm8, mm + if isImm8(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x72) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSLLD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf2) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSLLD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf2) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSLLD imm8, xmm + if isImm8(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x72) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSLLD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf2) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSLLD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf2) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSLLD") + } + return p +} + +// PSLLDQ performs "Shift Packed Double Quadword Left Logical". +// +// Mnemonic : PSLLDQ +// Supported forms : (1 form) +// +// * PSLLDQ imm8, xmm [SSE2] +// +func (self *Program) PSLLDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSLLDQ", 2, Operands { v0, v1 }) + // PSLLDQ imm8, xmm + if isImm8(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x73) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PSLLDQ") + } + return p +} + +// PSLLQ performs "Shift Packed Quadword Data Left Logical". +// +// Mnemonic : PSLLQ +// Supported forms : (6 forms) +// +// * PSLLQ imm8, mm [MMX] +// * PSLLQ mm, mm [MMX] +// * PSLLQ m64, mm [MMX] +// * PSLLQ imm8, xmm [SSE2] +// * PSLLQ xmm, xmm [SSE2] +// * PSLLQ m128, xmm [SSE2] +// +func (self *Program) PSLLQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSLLQ", 2, Operands { v0, v1 }) + // PSLLQ imm8, mm + if isImm8(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x73) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSLLQ mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf3) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSLLQ m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf3) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSLLQ imm8, xmm + if isImm8(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x73) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSLLQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf3) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSLLQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf3) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSLLQ") + } + return p +} + +// PSLLW performs "Shift Packed Word Data Left Logical". +// +// Mnemonic : PSLLW +// Supported forms : (6 forms) +// +// * PSLLW imm8, mm [MMX] +// * PSLLW mm, mm [MMX] +// * PSLLW m64, mm [MMX] +// * PSLLW imm8, xmm [SSE2] +// * PSLLW xmm, xmm [SSE2] +// * PSLLW m128, xmm [SSE2] +// +func (self *Program) PSLLW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSLLW", 2, Operands { v0, v1 }) + // PSLLW imm8, mm + if isImm8(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x71) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSLLW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf1) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSLLW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf1) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSLLW imm8, xmm + if isImm8(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x71) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSLLW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf1) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSLLW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf1) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSLLW") + } + return p +} + +// PSRAD performs "Shift Packed Doubleword Data Right Arithmetic". +// +// Mnemonic : PSRAD +// Supported forms : (6 forms) +// +// * PSRAD imm8, mm [MMX] +// * PSRAD mm, mm [MMX] +// * PSRAD m64, mm [MMX] +// * PSRAD imm8, xmm [SSE2] +// * PSRAD xmm, xmm [SSE2] +// * PSRAD m128, xmm [SSE2] +// +func (self *Program) PSRAD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSRAD", 2, Operands { v0, v1 }) + // PSRAD imm8, mm + if isImm8(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x72) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSRAD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe2) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSRAD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe2) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSRAD imm8, xmm + if isImm8(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x72) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSRAD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe2) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSRAD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe2) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSRAD") + } + return p +} + +// PSRAW performs "Shift Packed Word Data Right Arithmetic". +// +// Mnemonic : PSRAW +// Supported forms : (6 forms) +// +// * PSRAW imm8, mm [MMX] +// * PSRAW mm, mm [MMX] +// * PSRAW m64, mm [MMX] +// * PSRAW imm8, xmm [SSE2] +// * PSRAW xmm, xmm [SSE2] +// * PSRAW m128, xmm [SSE2] +// +func (self *Program) PSRAW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSRAW", 2, Operands { v0, v1 }) + // PSRAW imm8, mm + if isImm8(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x71) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSRAW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe1) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSRAW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe1) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSRAW imm8, xmm + if isImm8(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x71) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSRAW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe1) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSRAW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe1) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSRAW") + } + return p +} + +// PSRLD performs "Shift Packed Doubleword Data Right Logical". +// +// Mnemonic : PSRLD +// Supported forms : (6 forms) +// +// * PSRLD imm8, mm [MMX] +// * PSRLD mm, mm [MMX] +// * PSRLD m64, mm [MMX] +// * PSRLD imm8, xmm [SSE2] +// * PSRLD xmm, xmm [SSE2] +// * PSRLD m128, xmm [SSE2] +// +func (self *Program) PSRLD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSRLD", 2, Operands { v0, v1 }) + // PSRLD imm8, mm + if isImm8(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x72) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSRLD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd2) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSRLD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd2) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSRLD imm8, xmm + if isImm8(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x72) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSRLD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd2) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSRLD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd2) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSRLD") + } + return p +} + +// PSRLDQ performs "Shift Packed Double Quadword Right Logical". +// +// Mnemonic : PSRLDQ +// Supported forms : (1 form) +// +// * PSRLDQ imm8, xmm [SSE2] +// +func (self *Program) PSRLDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSRLDQ", 2, Operands { v0, v1 }) + // PSRLDQ imm8, xmm + if isImm8(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x73) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for PSRLDQ") + } + return p +} + +// PSRLQ performs "Shift Packed Quadword Data Right Logical". +// +// Mnemonic : PSRLQ +// Supported forms : (6 forms) +// +// * PSRLQ imm8, mm [MMX] +// * PSRLQ mm, mm [MMX] +// * PSRLQ m64, mm [MMX] +// * PSRLQ imm8, xmm [SSE2] +// * PSRLQ xmm, xmm [SSE2] +// * PSRLQ m128, xmm [SSE2] +// +func (self *Program) PSRLQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSRLQ", 2, Operands { v0, v1 }) + // PSRLQ imm8, mm + if isImm8(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x73) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSRLQ mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd3) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSRLQ m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd3) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSRLQ imm8, xmm + if isImm8(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x73) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSRLQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd3) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSRLQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd3) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSRLQ") + } + return p +} + +// PSRLW performs "Shift Packed Word Data Right Logical". +// +// Mnemonic : PSRLW +// Supported forms : (6 forms) +// +// * PSRLW imm8, mm [MMX] +// * PSRLW mm, mm [MMX] +// * PSRLW m64, mm [MMX] +// * PSRLW imm8, xmm [SSE2] +// * PSRLW xmm, xmm [SSE2] +// * PSRLW m128, xmm [SSE2] +// +func (self *Program) PSRLW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSRLW", 2, Operands { v0, v1 }) + // PSRLW imm8, mm + if isImm8(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x71) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSRLW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd1) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSRLW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd1) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSRLW imm8, xmm + if isImm8(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x0f) + m.emit(0x71) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // PSRLW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd1) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSRLW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd1) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSRLW") + } + return p +} + +// PSUBB performs "Subtract Packed Byte Integers". +// +// Mnemonic : PSUBB +// Supported forms : (4 forms) +// +// * PSUBB mm, mm [MMX] +// * PSUBB m64, mm [MMX] +// * PSUBB xmm, xmm [SSE2] +// * PSUBB m128, xmm [SSE2] +// +func (self *Program) PSUBB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSUBB", 2, Operands { v0, v1 }) + // PSUBB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf8) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf8) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSUBB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf8) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf8) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSUBB") + } + return p +} + +// PSUBD performs "Subtract Packed Doubleword Integers". +// +// Mnemonic : PSUBD +// Supported forms : (4 forms) +// +// * PSUBD mm, mm [MMX] +// * PSUBD m64, mm [MMX] +// * PSUBD xmm, xmm [SSE2] +// * PSUBD m128, xmm [SSE2] +// +func (self *Program) PSUBD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSUBD", 2, Operands { v0, v1 }) + // PSUBD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xfa) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xfa) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSUBD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xfa) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xfa) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSUBD") + } + return p +} + +// PSUBQ performs "Subtract Packed Quadword Integers". +// +// Mnemonic : PSUBQ +// Supported forms : (4 forms) +// +// * PSUBQ mm, mm [SSE2] +// * PSUBQ m64, mm [SSE2] +// * PSUBQ xmm, xmm [SSE2] +// * PSUBQ m128, xmm [SSE2] +// +func (self *Program) PSUBQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSUBQ", 2, Operands { v0, v1 }) + // PSUBQ mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xfb) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBQ m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xfb) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSUBQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xfb) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xfb) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSUBQ") + } + return p +} + +// PSUBSB performs "Subtract Packed Signed Byte Integers with Signed Saturation". +// +// Mnemonic : PSUBSB +// Supported forms : (4 forms) +// +// * PSUBSB mm, mm [MMX] +// * PSUBSB m64, mm [MMX] +// * PSUBSB xmm, xmm [SSE2] +// * PSUBSB m128, xmm [SSE2] +// +func (self *Program) PSUBSB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSUBSB", 2, Operands { v0, v1 }) + // PSUBSB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe8) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBSB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe8) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSUBSB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe8) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBSB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe8) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSUBSB") + } + return p +} + +// PSUBSW performs "Subtract Packed Signed Word Integers with Signed Saturation". +// +// Mnemonic : PSUBSW +// Supported forms : (4 forms) +// +// * PSUBSW mm, mm [MMX] +// * PSUBSW m64, mm [MMX] +// * PSUBSW xmm, xmm [SSE2] +// * PSUBSW m128, xmm [SSE2] +// +func (self *Program) PSUBSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSUBSW", 2, Operands { v0, v1 }) + // PSUBSW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe9) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBSW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe9) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSUBSW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xe9) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBSW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xe9) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSUBSW") + } + return p +} + +// PSUBUSB performs "Subtract Packed Unsigned Byte Integers with Unsigned Saturation". +// +// Mnemonic : PSUBUSB +// Supported forms : (4 forms) +// +// * PSUBUSB mm, mm [MMX] +// * PSUBUSB m64, mm [MMX] +// * PSUBUSB xmm, xmm [SSE2] +// * PSUBUSB m128, xmm [SSE2] +// +func (self *Program) PSUBUSB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSUBUSB", 2, Operands { v0, v1 }) + // PSUBUSB mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd8) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBUSB m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd8) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSUBUSB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd8) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBUSB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd8) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSUBUSB") + } + return p +} + +// PSUBUSW performs "Subtract Packed Unsigned Word Integers with Unsigned Saturation". +// +// Mnemonic : PSUBUSW +// Supported forms : (4 forms) +// +// * PSUBUSW mm, mm [MMX] +// * PSUBUSW m64, mm [MMX] +// * PSUBUSW xmm, xmm [SSE2] +// * PSUBUSW m128, xmm [SSE2] +// +func (self *Program) PSUBUSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSUBUSW", 2, Operands { v0, v1 }) + // PSUBUSW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd9) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBUSW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd9) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSUBUSW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xd9) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBUSW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xd9) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSUBUSW") + } + return p +} + +// PSUBW performs "Subtract Packed Word Integers". +// +// Mnemonic : PSUBW +// Supported forms : (4 forms) +// +// * PSUBW mm, mm [MMX] +// * PSUBW m64, mm [MMX] +// * PSUBW xmm, xmm [SSE2] +// * PSUBW m128, xmm [SSE2] +// +func (self *Program) PSUBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSUBW", 2, Operands { v0, v1 }) + // PSUBW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf9) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf9) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PSUBW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xf9) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PSUBW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xf9) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PSUBW") + } + return p +} + +// PSWAPD performs "Packed Swap Doubleword". +// +// Mnemonic : PSWAPD +// Supported forms : (2 forms) +// +// * PSWAPD mm, mm [3dnow!+] +// * PSWAPD m64, mm [3dnow!+] +// +func (self *Program) PSWAPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PSWAPD", 2, Operands { v0, v1 }) + // PSWAPD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_3DNOW_PLUS) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + m.emit(0xbb) + }) + } + // PSWAPD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_3DNOW_PLUS) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + m.emit(0xbb) + }) + } + if p.len == 0 { + panic("invalid operands for PSWAPD") + } + return p +} + +// PTEST performs "Packed Logical Compare". +// +// Mnemonic : PTEST +// Supported forms : (2 forms) +// +// * PTEST xmm, xmm [SSE4.1] +// * PTEST m128, xmm [SSE4.1] +// +func (self *Program) PTEST(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PTEST", 2, Operands { v0, v1 }) + // PTEST xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x17) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PTEST m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0x17) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PTEST") + } + return p +} + +// PUNPCKHBW performs "Unpack and Interleave High-Order Bytes into Words". +// +// Mnemonic : PUNPCKHBW +// Supported forms : (4 forms) +// +// * PUNPCKHBW mm, mm [MMX] +// * PUNPCKHBW m64, mm [MMX] +// * PUNPCKHBW xmm, xmm [SSE2] +// * PUNPCKHBW m128, xmm [SSE2] +// +func (self *Program) PUNPCKHBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PUNPCKHBW", 2, Operands { v0, v1 }) + // PUNPCKHBW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x68) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKHBW m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x68) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PUNPCKHBW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x68) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKHBW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x68) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PUNPCKHBW") + } + return p +} + +// PUNPCKHDQ performs "Unpack and Interleave High-Order Doublewords into Quadwords". +// +// Mnemonic : PUNPCKHDQ +// Supported forms : (4 forms) +// +// * PUNPCKHDQ mm, mm [MMX] +// * PUNPCKHDQ m64, mm [MMX] +// * PUNPCKHDQ xmm, xmm [SSE2] +// * PUNPCKHDQ m128, xmm [SSE2] +// +func (self *Program) PUNPCKHDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PUNPCKHDQ", 2, Operands { v0, v1 }) + // PUNPCKHDQ mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x6a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKHDQ m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x6a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PUNPCKHDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x6a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKHDQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x6a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PUNPCKHDQ") + } + return p +} + +// PUNPCKHQDQ performs "Unpack and Interleave High-Order Quadwords into Double Quadwords". +// +// Mnemonic : PUNPCKHQDQ +// Supported forms : (2 forms) +// +// * PUNPCKHQDQ xmm, xmm [SSE2] +// * PUNPCKHQDQ m128, xmm [SSE2] +// +func (self *Program) PUNPCKHQDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PUNPCKHQDQ", 2, Operands { v0, v1 }) + // PUNPCKHQDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x6d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKHQDQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x6d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PUNPCKHQDQ") + } + return p +} + +// PUNPCKHWD performs "Unpack and Interleave High-Order Words into Doublewords". +// +// Mnemonic : PUNPCKHWD +// Supported forms : (4 forms) +// +// * PUNPCKHWD mm, mm [MMX] +// * PUNPCKHWD m64, mm [MMX] +// * PUNPCKHWD xmm, xmm [SSE2] +// * PUNPCKHWD m128, xmm [SSE2] +// +func (self *Program) PUNPCKHWD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PUNPCKHWD", 2, Operands { v0, v1 }) + // PUNPCKHWD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x69) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKHWD m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x69) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PUNPCKHWD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x69) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKHWD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x69) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PUNPCKHWD") + } + return p +} + +// PUNPCKLBW performs "Unpack and Interleave Low-Order Bytes into Words". +// +// Mnemonic : PUNPCKLBW +// Supported forms : (4 forms) +// +// * PUNPCKLBW mm, mm [MMX] +// * PUNPCKLBW m32, mm [MMX] +// * PUNPCKLBW xmm, xmm [SSE2] +// * PUNPCKLBW m128, xmm [SSE2] +// +func (self *Program) PUNPCKLBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PUNPCKLBW", 2, Operands { v0, v1 }) + // PUNPCKLBW mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x60) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKLBW m32, mm + if isM32(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x60) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PUNPCKLBW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x60) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKLBW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x60) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PUNPCKLBW") + } + return p +} + +// PUNPCKLDQ performs "Unpack and Interleave Low-Order Doublewords into Quadwords". +// +// Mnemonic : PUNPCKLDQ +// Supported forms : (4 forms) +// +// * PUNPCKLDQ mm, mm [MMX] +// * PUNPCKLDQ m32, mm [MMX] +// * PUNPCKLDQ xmm, xmm [SSE2] +// * PUNPCKLDQ m128, xmm [SSE2] +// +func (self *Program) PUNPCKLDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PUNPCKLDQ", 2, Operands { v0, v1 }) + // PUNPCKLDQ mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x62) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKLDQ m32, mm + if isM32(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x62) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PUNPCKLDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x62) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKLDQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x62) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PUNPCKLDQ") + } + return p +} + +// PUNPCKLQDQ performs "Unpack and Interleave Low-Order Quadwords into Double Quadwords". +// +// Mnemonic : PUNPCKLQDQ +// Supported forms : (2 forms) +// +// * PUNPCKLQDQ xmm, xmm [SSE2] +// * PUNPCKLQDQ m128, xmm [SSE2] +// +func (self *Program) PUNPCKLQDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PUNPCKLQDQ", 2, Operands { v0, v1 }) + // PUNPCKLQDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x6c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKLQDQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x6c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PUNPCKLQDQ") + } + return p +} + +// PUNPCKLWD performs "Unpack and Interleave Low-Order Words into Doublewords". +// +// Mnemonic : PUNPCKLWD +// Supported forms : (4 forms) +// +// * PUNPCKLWD mm, mm [MMX] +// * PUNPCKLWD m32, mm [MMX] +// * PUNPCKLWD xmm, xmm [SSE2] +// * PUNPCKLWD m128, xmm [SSE2] +// +func (self *Program) PUNPCKLWD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PUNPCKLWD", 2, Operands { v0, v1 }) + // PUNPCKLWD mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x61) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKLWD m32, mm + if isM32(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x61) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PUNPCKLWD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x61) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PUNPCKLWD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x61) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PUNPCKLWD") + } + return p +} + +// PUSHQ performs "Push Value Onto the Stack". +// +// Mnemonic : PUSH +// Supported forms : (4 forms) +// +// * PUSHQ imm8 +// * PUSHQ imm32 +// * PUSHQ r64 +// * PUSHQ m64 +// +func (self *Program) PUSHQ(v0 interface{}) *Instruction { + p := self.alloc("PUSHQ", 1, Operands { v0 }) + // PUSHQ imm8 + if isImm8Ext(v0, 8) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x6a) + m.imm1(toImmAny(v[0])) + }) + } + // PUSHQ imm32 + if isImm32Ext(v0, 8) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x68) + m.imm4(toImmAny(v[0])) + }) + } + // PUSHQ r64 + if isReg64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0x50 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0xff) + m.emit(0xf0 | lcode(v[0])) + }) + } + // PUSHQ m64 + if isM64(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0xff) + m.mrsd(6, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PUSHQ") + } + return p +} + +// PUSHW performs "Push Value Onto the Stack". +// +// Mnemonic : PUSH +// Supported forms : (2 forms) +// +// * PUSHW r16 +// * PUSHW m16 +// +func (self *Program) PUSHW(v0 interface{}) *Instruction { + p := self.alloc("PUSHW", 1, Operands { v0 }) + // PUSHW r16 + if isReg16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0x50 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0xff) + m.emit(0xf0 | lcode(v[0])) + }) + } + // PUSHW m16 + if isM16(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[0]), false) + m.emit(0xff) + m.mrsd(6, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PUSHW") + } + return p +} + +// PXOR performs "Packed Bitwise Logical Exclusive OR". +// +// Mnemonic : PXOR +// Supported forms : (4 forms) +// +// * PXOR mm, mm [MMX] +// * PXOR m64, mm [MMX] +// * PXOR xmm, xmm [SSE2] +// * PXOR m128, xmm [SSE2] +// +func (self *Program) PXOR(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("PXOR", 2, Operands { v0, v1 }) + // PXOR mm, mm + if isMM(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xef) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PXOR m64, mm + if isM64(v0) && isMM(v1) { + self.require(ISA_MMX) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xef) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // PXOR xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xef) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // PXOR m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xef) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for PXOR") + } + return p +} + +// RCLB performs "Rotate Left through Carry Flag". +// +// Mnemonic : RCL +// Supported forms : (6 forms) +// +// * RCLB 1, r8 +// * RCLB imm8, r8 +// * RCLB cl, r8 +// * RCLB 1, m8 +// * RCLB imm8, m8 +// * RCLB cl, m8 +// +func (self *Program) RCLB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RCLB", 2, Operands { v0, v1 }) + // RCLB 1, r8 + if isConst1(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd0) + m.emit(0xd0 | lcode(v[1])) + }) + } + // RCLB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xc0) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RCLB cl, r8 + if v0 == CL && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd2) + m.emit(0xd0 | lcode(v[1])) + }) + } + // RCLB 1, m8 + if isConst1(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd0) + m.mrsd(2, addr(v[1]), 1) + }) + } + // RCLB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc0) + m.mrsd(2, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // RCLB cl, m8 + if v0 == CL && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd2) + m.mrsd(2, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RCLB") + } + return p +} + +// RCLL performs "Rotate Left through Carry Flag". +// +// Mnemonic : RCL +// Supported forms : (6 forms) +// +// * RCLL 1, r32 +// * RCLL imm8, r32 +// * RCLL cl, r32 +// * RCLL 1, m32 +// * RCLL imm8, m32 +// * RCLL cl, m32 +// +func (self *Program) RCLL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RCLL", 2, Operands { v0, v1 }) + // RCLL 1, r32 + if isConst1(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xd0 | lcode(v[1])) + }) + } + // RCLL imm8, r32 + if isImm8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RCLL cl, r32 + if v0 == CL && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xd0 | lcode(v[1])) + }) + } + // RCLL 1, m32 + if isConst1(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(2, addr(v[1]), 1) + }) + } + // RCLL imm8, m32 + if isImm8(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(2, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // RCLL cl, m32 + if v0 == CL && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(2, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RCLL") + } + return p +} + +// RCLQ performs "Rotate Left through Carry Flag". +// +// Mnemonic : RCL +// Supported forms : (6 forms) +// +// * RCLQ 1, r64 +// * RCLQ imm8, r64 +// * RCLQ cl, r64 +// * RCLQ 1, m64 +// * RCLQ imm8, m64 +// * RCLQ cl, m64 +// +func (self *Program) RCLQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RCLQ", 2, Operands { v0, v1 }) + // RCLQ 1, r64 + if isConst1(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd1) + m.emit(0xd0 | lcode(v[1])) + }) + } + // RCLQ imm8, r64 + if isImm8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xc1) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RCLQ cl, r64 + if v0 == CL && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd3) + m.emit(0xd0 | lcode(v[1])) + }) + } + // RCLQ 1, m64 + if isConst1(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd1) + m.mrsd(2, addr(v[1]), 1) + }) + } + // RCLQ imm8, m64 + if isImm8(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xc1) + m.mrsd(2, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // RCLQ cl, m64 + if v0 == CL && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd3) + m.mrsd(2, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RCLQ") + } + return p +} + +// RCLW performs "Rotate Left through Carry Flag". +// +// Mnemonic : RCL +// Supported forms : (6 forms) +// +// * RCLW 1, r16 +// * RCLW imm8, r16 +// * RCLW cl, r16 +// * RCLW 1, m16 +// * RCLW imm8, m16 +// * RCLW cl, m16 +// +func (self *Program) RCLW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RCLW", 2, Operands { v0, v1 }) + // RCLW 1, r16 + if isConst1(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xd0 | lcode(v[1])) + }) + } + // RCLW imm8, r16 + if isImm8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RCLW cl, r16 + if v0 == CL && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xd0 | lcode(v[1])) + }) + } + // RCLW 1, m16 + if isConst1(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(2, addr(v[1]), 1) + }) + } + // RCLW imm8, m16 + if isImm8(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(2, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // RCLW cl, m16 + if v0 == CL && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(2, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RCLW") + } + return p +} + +// RCPPS performs "Compute Approximate Reciprocals of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : RCPPS +// Supported forms : (2 forms) +// +// * RCPPS xmm, xmm [SSE] +// * RCPPS m128, xmm [SSE] +// +func (self *Program) RCPPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RCPPS", 2, Operands { v0, v1 }) + // RCPPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x53) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // RCPPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x53) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RCPPS") + } + return p +} + +// RCPSS performs "Compute Approximate Reciprocal of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : RCPSS +// Supported forms : (2 forms) +// +// * RCPSS xmm, xmm [SSE] +// * RCPSS m32, xmm [SSE] +// +func (self *Program) RCPSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RCPSS", 2, Operands { v0, v1 }) + // RCPSS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x53) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // RCPSS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x53) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RCPSS") + } + return p +} + +// RCRB performs "Rotate Right through Carry Flag". +// +// Mnemonic : RCR +// Supported forms : (6 forms) +// +// * RCRB 1, r8 +// * RCRB imm8, r8 +// * RCRB cl, r8 +// * RCRB 1, m8 +// * RCRB imm8, m8 +// * RCRB cl, m8 +// +func (self *Program) RCRB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RCRB", 2, Operands { v0, v1 }) + // RCRB 1, r8 + if isConst1(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd0) + m.emit(0xd8 | lcode(v[1])) + }) + } + // RCRB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xc0) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RCRB cl, r8 + if v0 == CL && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd2) + m.emit(0xd8 | lcode(v[1])) + }) + } + // RCRB 1, m8 + if isConst1(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd0) + m.mrsd(3, addr(v[1]), 1) + }) + } + // RCRB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc0) + m.mrsd(3, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // RCRB cl, m8 + if v0 == CL && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd2) + m.mrsd(3, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RCRB") + } + return p +} + +// RCRL performs "Rotate Right through Carry Flag". +// +// Mnemonic : RCR +// Supported forms : (6 forms) +// +// * RCRL 1, r32 +// * RCRL imm8, r32 +// * RCRL cl, r32 +// * RCRL 1, m32 +// * RCRL imm8, m32 +// * RCRL cl, m32 +// +func (self *Program) RCRL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RCRL", 2, Operands { v0, v1 }) + // RCRL 1, r32 + if isConst1(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xd8 | lcode(v[1])) + }) + } + // RCRL imm8, r32 + if isImm8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RCRL cl, r32 + if v0 == CL && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xd8 | lcode(v[1])) + }) + } + // RCRL 1, m32 + if isConst1(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(3, addr(v[1]), 1) + }) + } + // RCRL imm8, m32 + if isImm8(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(3, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // RCRL cl, m32 + if v0 == CL && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(3, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RCRL") + } + return p +} + +// RCRQ performs "Rotate Right through Carry Flag". +// +// Mnemonic : RCR +// Supported forms : (6 forms) +// +// * RCRQ 1, r64 +// * RCRQ imm8, r64 +// * RCRQ cl, r64 +// * RCRQ 1, m64 +// * RCRQ imm8, m64 +// * RCRQ cl, m64 +// +func (self *Program) RCRQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RCRQ", 2, Operands { v0, v1 }) + // RCRQ 1, r64 + if isConst1(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd1) + m.emit(0xd8 | lcode(v[1])) + }) + } + // RCRQ imm8, r64 + if isImm8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xc1) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RCRQ cl, r64 + if v0 == CL && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd3) + m.emit(0xd8 | lcode(v[1])) + }) + } + // RCRQ 1, m64 + if isConst1(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd1) + m.mrsd(3, addr(v[1]), 1) + }) + } + // RCRQ imm8, m64 + if isImm8(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xc1) + m.mrsd(3, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // RCRQ cl, m64 + if v0 == CL && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd3) + m.mrsd(3, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RCRQ") + } + return p +} + +// RCRW performs "Rotate Right through Carry Flag". +// +// Mnemonic : RCR +// Supported forms : (6 forms) +// +// * RCRW 1, r16 +// * RCRW imm8, r16 +// * RCRW cl, r16 +// * RCRW 1, m16 +// * RCRW imm8, m16 +// * RCRW cl, m16 +// +func (self *Program) RCRW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RCRW", 2, Operands { v0, v1 }) + // RCRW 1, r16 + if isConst1(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xd8 | lcode(v[1])) + }) + } + // RCRW imm8, r16 + if isImm8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RCRW cl, r16 + if v0 == CL && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xd8 | lcode(v[1])) + }) + } + // RCRW 1, m16 + if isConst1(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(3, addr(v[1]), 1) + }) + } + // RCRW imm8, m16 + if isImm8(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(3, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // RCRW cl, m16 + if v0 == CL && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(3, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RCRW") + } + return p +} + +// RDRAND performs "Read Random Number". +// +// Mnemonic : RDRAND +// Supported forms : (3 forms) +// +// * RDRAND r16 [RDRAND] +// * RDRAND r32 [RDRAND] +// * RDRAND r64 [RDRAND] +// +func (self *Program) RDRAND(v0 interface{}) *Instruction { + p := self.alloc("RDRAND", 1, Operands { v0 }) + // RDRAND r16 + if isReg16(v0) { + self.require(ISA_RDRAND) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0x0f) + m.emit(0xc7) + m.emit(0xf0 | lcode(v[0])) + }) + } + // RDRAND r32 + if isReg32(v0) { + self.require(ISA_RDRAND) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0x0f) + m.emit(0xc7) + m.emit(0xf0 | lcode(v[0])) + }) + } + // RDRAND r64 + if isReg64(v0) { + self.require(ISA_RDRAND) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xc7) + m.emit(0xf0 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for RDRAND") + } + return p +} + +// RDSEED performs "Read Random SEED". +// +// Mnemonic : RDSEED +// Supported forms : (3 forms) +// +// * RDSEED r16 [RDSEED] +// * RDSEED r32 [RDSEED] +// * RDSEED r64 [RDSEED] +// +func (self *Program) RDSEED(v0 interface{}) *Instruction { + p := self.alloc("RDSEED", 1, Operands { v0 }) + // RDSEED r16 + if isReg16(v0) { + self.require(ISA_RDSEED) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0x0f) + m.emit(0xc7) + m.emit(0xf8 | lcode(v[0])) + }) + } + // RDSEED r32 + if isReg32(v0) { + self.require(ISA_RDSEED) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0x0f) + m.emit(0xc7) + m.emit(0xf8 | lcode(v[0])) + }) + } + // RDSEED r64 + if isReg64(v0) { + self.require(ISA_RDSEED) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xc7) + m.emit(0xf8 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for RDSEED") + } + return p +} + +// RDTSC performs "Read Time-Stamp Counter". +// +// Mnemonic : RDTSC +// Supported forms : (1 form) +// +// * RDTSC [RDTSC] +// +func (self *Program) RDTSC() *Instruction { + p := self.alloc("RDTSC", 0, Operands { }) + // RDTSC + self.require(ISA_RDTSC) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x31) + }) + return p +} + +// RDTSCP performs "Read Time-Stamp Counter and Processor ID". +// +// Mnemonic : RDTSCP +// Supported forms : (1 form) +// +// * RDTSCP [RDTSCP] +// +func (self *Program) RDTSCP() *Instruction { + p := self.alloc("RDTSCP", 0, Operands { }) + // RDTSCP + self.require(ISA_RDTSCP) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x01) + m.emit(0xf9) + }) + return p +} + +// RET performs "Return from Procedure". +// +// Mnemonic : RET +// Supported forms : (2 forms) +// +// * RET +// * RET imm16 +// +func (self *Program) RET(vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("RET", 0, Operands { }) + case 1 : p = self.alloc("RET", 1, Operands { vv[0] }) + default : panic("instruction RET takes 0 or 1 operands") + } + // RET + if len(vv) == 0 { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc3) + }) + } + // RET imm16 + if len(vv) == 1 && isImm16(vv[0]) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc2) + m.imm2(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for RET") + } + return p +} + +// ROLB performs "Rotate Left". +// +// Mnemonic : ROL +// Supported forms : (6 forms) +// +// * ROLB 1, r8 +// * ROLB imm8, r8 +// * ROLB cl, r8 +// * ROLB 1, m8 +// * ROLB imm8, m8 +// * ROLB cl, m8 +// +func (self *Program) ROLB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ROLB", 2, Operands { v0, v1 }) + // ROLB 1, r8 + if isConst1(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd0) + m.emit(0xc0 | lcode(v[1])) + }) + } + // ROLB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xc0) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ROLB cl, r8 + if v0 == CL && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd2) + m.emit(0xc0 | lcode(v[1])) + }) + } + // ROLB 1, m8 + if isConst1(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd0) + m.mrsd(0, addr(v[1]), 1) + }) + } + // ROLB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc0) + m.mrsd(0, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ROLB cl, m8 + if v0 == CL && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd2) + m.mrsd(0, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ROLB") + } + return p +} + +// ROLL performs "Rotate Left". +// +// Mnemonic : ROL +// Supported forms : (6 forms) +// +// * ROLL 1, r32 +// * ROLL imm8, r32 +// * ROLL cl, r32 +// * ROLL 1, m32 +// * ROLL imm8, m32 +// * ROLL cl, m32 +// +func (self *Program) ROLL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ROLL", 2, Operands { v0, v1 }) + // ROLL 1, r32 + if isConst1(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xc0 | lcode(v[1])) + }) + } + // ROLL imm8, r32 + if isImm8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ROLL cl, r32 + if v0 == CL && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xc0 | lcode(v[1])) + }) + } + // ROLL 1, m32 + if isConst1(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(0, addr(v[1]), 1) + }) + } + // ROLL imm8, m32 + if isImm8(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(0, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ROLL cl, m32 + if v0 == CL && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(0, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ROLL") + } + return p +} + +// ROLQ performs "Rotate Left". +// +// Mnemonic : ROL +// Supported forms : (6 forms) +// +// * ROLQ 1, r64 +// * ROLQ imm8, r64 +// * ROLQ cl, r64 +// * ROLQ 1, m64 +// * ROLQ imm8, m64 +// * ROLQ cl, m64 +// +func (self *Program) ROLQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ROLQ", 2, Operands { v0, v1 }) + // ROLQ 1, r64 + if isConst1(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd1) + m.emit(0xc0 | lcode(v[1])) + }) + } + // ROLQ imm8, r64 + if isImm8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xc1) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ROLQ cl, r64 + if v0 == CL && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd3) + m.emit(0xc0 | lcode(v[1])) + }) + } + // ROLQ 1, m64 + if isConst1(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd1) + m.mrsd(0, addr(v[1]), 1) + }) + } + // ROLQ imm8, m64 + if isImm8(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xc1) + m.mrsd(0, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ROLQ cl, m64 + if v0 == CL && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd3) + m.mrsd(0, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ROLQ") + } + return p +} + +// ROLW performs "Rotate Left". +// +// Mnemonic : ROL +// Supported forms : (6 forms) +// +// * ROLW 1, r16 +// * ROLW imm8, r16 +// * ROLW cl, r16 +// * ROLW 1, m16 +// * ROLW imm8, m16 +// * ROLW cl, m16 +// +func (self *Program) ROLW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("ROLW", 2, Operands { v0, v1 }) + // ROLW 1, r16 + if isConst1(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xc0 | lcode(v[1])) + }) + } + // ROLW imm8, r16 + if isImm8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ROLW cl, r16 + if v0 == CL && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xc0 | lcode(v[1])) + }) + } + // ROLW 1, m16 + if isConst1(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(0, addr(v[1]), 1) + }) + } + // ROLW imm8, m16 + if isImm8(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(0, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // ROLW cl, m16 + if v0 == CL && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(0, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for ROLW") + } + return p +} + +// RORB performs "Rotate Right". +// +// Mnemonic : ROR +// Supported forms : (6 forms) +// +// * RORB 1, r8 +// * RORB imm8, r8 +// * RORB cl, r8 +// * RORB 1, m8 +// * RORB imm8, m8 +// * RORB cl, m8 +// +func (self *Program) RORB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RORB", 2, Operands { v0, v1 }) + // RORB 1, r8 + if isConst1(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd0) + m.emit(0xc8 | lcode(v[1])) + }) + } + // RORB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xc0) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RORB cl, r8 + if v0 == CL && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd2) + m.emit(0xc8 | lcode(v[1])) + }) + } + // RORB 1, m8 + if isConst1(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd0) + m.mrsd(1, addr(v[1]), 1) + }) + } + // RORB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc0) + m.mrsd(1, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // RORB cl, m8 + if v0 == CL && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd2) + m.mrsd(1, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RORB") + } + return p +} + +// RORL performs "Rotate Right". +// +// Mnemonic : ROR +// Supported forms : (6 forms) +// +// * RORL 1, r32 +// * RORL imm8, r32 +// * RORL cl, r32 +// * RORL 1, m32 +// * RORL imm8, m32 +// * RORL cl, m32 +// +func (self *Program) RORL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RORL", 2, Operands { v0, v1 }) + // RORL 1, r32 + if isConst1(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xc8 | lcode(v[1])) + }) + } + // RORL imm8, r32 + if isImm8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RORL cl, r32 + if v0 == CL && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xc8 | lcode(v[1])) + }) + } + // RORL 1, m32 + if isConst1(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(1, addr(v[1]), 1) + }) + } + // RORL imm8, m32 + if isImm8(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(1, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // RORL cl, m32 + if v0 == CL && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(1, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RORL") + } + return p +} + +// RORQ performs "Rotate Right". +// +// Mnemonic : ROR +// Supported forms : (6 forms) +// +// * RORQ 1, r64 +// * RORQ imm8, r64 +// * RORQ cl, r64 +// * RORQ 1, m64 +// * RORQ imm8, m64 +// * RORQ cl, m64 +// +func (self *Program) RORQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RORQ", 2, Operands { v0, v1 }) + // RORQ 1, r64 + if isConst1(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd1) + m.emit(0xc8 | lcode(v[1])) + }) + } + // RORQ imm8, r64 + if isImm8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xc1) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RORQ cl, r64 + if v0 == CL && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd3) + m.emit(0xc8 | lcode(v[1])) + }) + } + // RORQ 1, m64 + if isConst1(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd1) + m.mrsd(1, addr(v[1]), 1) + }) + } + // RORQ imm8, m64 + if isImm8(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xc1) + m.mrsd(1, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // RORQ cl, m64 + if v0 == CL && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd3) + m.mrsd(1, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RORQ") + } + return p +} + +// RORW performs "Rotate Right". +// +// Mnemonic : ROR +// Supported forms : (6 forms) +// +// * RORW 1, r16 +// * RORW imm8, r16 +// * RORW cl, r16 +// * RORW 1, m16 +// * RORW imm8, m16 +// * RORW cl, m16 +// +func (self *Program) RORW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RORW", 2, Operands { v0, v1 }) + // RORW 1, r16 + if isConst1(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xc8 | lcode(v[1])) + }) + } + // RORW imm8, r16 + if isImm8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RORW cl, r16 + if v0 == CL && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xc8 | lcode(v[1])) + }) + } + // RORW 1, m16 + if isConst1(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(1, addr(v[1]), 1) + }) + } + // RORW imm8, m16 + if isImm8(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(1, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // RORW cl, m16 + if v0 == CL && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(1, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RORW") + } + return p +} + +// RORXL performs "Rotate Right Logical Without Affecting Flags". +// +// Mnemonic : RORX +// Supported forms : (2 forms) +// +// * RORXL imm8, r32, r32 [BMI2] +// * RORXL imm8, m32, r32 [BMI2] +// +func (self *Program) RORXL(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("RORXL", 3, Operands { v0, v1, v2 }) + // RORXL imm8, r32, r32 + if isImm8(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7b) + m.emit(0xf0) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RORXL imm8, m32, r32 + if isImm8(v0) && isM32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x03, hcode(v[2]), addr(v[1]), 0) + m.emit(0xf0) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for RORXL") + } + return p +} + +// RORXQ performs "Rotate Right Logical Without Affecting Flags". +// +// Mnemonic : RORX +// Supported forms : (2 forms) +// +// * RORXQ imm8, r64, r64 [BMI2] +// * RORXQ imm8, m64, r64 [BMI2] +// +func (self *Program) RORXQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("RORXQ", 3, Operands { v0, v1, v2 }) + // RORXQ imm8, r64, r64 + if isImm8(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xfb) + m.emit(0xf0) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // RORXQ imm8, m64, r64 + if isImm8(v0) && isM64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x83, hcode(v[2]), addr(v[1]), 0) + m.emit(0xf0) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for RORXQ") + } + return p +} + +// ROUNDPD performs "Round Packed Double Precision Floating-Point Values". +// +// Mnemonic : ROUNDPD +// Supported forms : (2 forms) +// +// * ROUNDPD imm8, xmm, xmm [SSE4.1] +// * ROUNDPD imm8, m128, xmm [SSE4.1] +// +func (self *Program) ROUNDPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("ROUNDPD", 3, Operands { v0, v1, v2 }) + // ROUNDPD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x09) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ROUNDPD imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x09) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for ROUNDPD") + } + return p +} + +// ROUNDPS performs "Round Packed Single Precision Floating-Point Values". +// +// Mnemonic : ROUNDPS +// Supported forms : (2 forms) +// +// * ROUNDPS imm8, xmm, xmm [SSE4.1] +// * ROUNDPS imm8, m128, xmm [SSE4.1] +// +func (self *Program) ROUNDPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("ROUNDPS", 3, Operands { v0, v1, v2 }) + // ROUNDPS imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x08) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ROUNDPS imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x08) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for ROUNDPS") + } + return p +} + +// ROUNDSD performs "Round Scalar Double Precision Floating-Point Values". +// +// Mnemonic : ROUNDSD +// Supported forms : (2 forms) +// +// * ROUNDSD imm8, xmm, xmm [SSE4.1] +// * ROUNDSD imm8, m64, xmm [SSE4.1] +// +func (self *Program) ROUNDSD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("ROUNDSD", 3, Operands { v0, v1, v2 }) + // ROUNDSD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ROUNDSD imm8, m64, xmm + if isImm8(v0) && isM64(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0b) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for ROUNDSD") + } + return p +} + +// ROUNDSS performs "Round Scalar Single Precision Floating-Point Values". +// +// Mnemonic : ROUNDSS +// Supported forms : (2 forms) +// +// * ROUNDSS imm8, xmm, xmm [SSE4.1] +// * ROUNDSS imm8, m32, xmm [SSE4.1] +// +func (self *Program) ROUNDSS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("ROUNDSS", 3, Operands { v0, v1, v2 }) + // ROUNDSS imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // ROUNDSS imm8, m32, xmm + if isImm8(v0) && isM32(v1) && isXMM(v2) { + self.require(ISA_SSE4_1) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0x0a) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for ROUNDSS") + } + return p +} + +// RSQRTPS performs "Compute Reciprocals of Square Roots of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : RSQRTPS +// Supported forms : (2 forms) +// +// * RSQRTPS xmm, xmm [SSE] +// * RSQRTPS m128, xmm [SSE] +// +func (self *Program) RSQRTPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RSQRTPS", 2, Operands { v0, v1 }) + // RSQRTPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x52) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // RSQRTPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x52) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RSQRTPS") + } + return p +} + +// RSQRTSS performs "Compute Reciprocal of Square Root of Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : RSQRTSS +// Supported forms : (2 forms) +// +// * RSQRTSS xmm, xmm [SSE] +// * RSQRTSS m32, xmm [SSE] +// +func (self *Program) RSQRTSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("RSQRTSS", 2, Operands { v0, v1 }) + // RSQRTSS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x52) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // RSQRTSS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x52) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for RSQRTSS") + } + return p +} + +// SALB performs "Arithmetic Shift Left". +// +// Mnemonic : SAL +// Supported forms : (6 forms) +// +// * SALB 1, r8 +// * SALB imm8, r8 +// * SALB cl, r8 +// * SALB 1, m8 +// * SALB imm8, m8 +// * SALB cl, m8 +// +func (self *Program) SALB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SALB", 2, Operands { v0, v1 }) + // SALB 1, r8 + if isConst1(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd0) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SALB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xc0) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SALB cl, r8 + if v0 == CL && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd2) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SALB 1, m8 + if isConst1(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd0) + m.mrsd(4, addr(v[1]), 1) + }) + } + // SALB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc0) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SALB cl, m8 + if v0 == CL && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd2) + m.mrsd(4, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SALB") + } + return p +} + +// SALL performs "Arithmetic Shift Left". +// +// Mnemonic : SAL +// Supported forms : (6 forms) +// +// * SALL 1, r32 +// * SALL imm8, r32 +// * SALL cl, r32 +// * SALL 1, m32 +// * SALL imm8, m32 +// * SALL cl, m32 +// +func (self *Program) SALL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SALL", 2, Operands { v0, v1 }) + // SALL 1, r32 + if isConst1(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SALL imm8, r32 + if isImm8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SALL cl, r32 + if v0 == CL && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SALL 1, m32 + if isConst1(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(4, addr(v[1]), 1) + }) + } + // SALL imm8, m32 + if isImm8(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SALL cl, m32 + if v0 == CL && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(4, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SALL") + } + return p +} + +// SALQ performs "Arithmetic Shift Left". +// +// Mnemonic : SAL +// Supported forms : (6 forms) +// +// * SALQ 1, r64 +// * SALQ imm8, r64 +// * SALQ cl, r64 +// * SALQ 1, m64 +// * SALQ imm8, m64 +// * SALQ cl, m64 +// +func (self *Program) SALQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SALQ", 2, Operands { v0, v1 }) + // SALQ 1, r64 + if isConst1(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd1) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SALQ imm8, r64 + if isImm8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xc1) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SALQ cl, r64 + if v0 == CL && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd3) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SALQ 1, m64 + if isConst1(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd1) + m.mrsd(4, addr(v[1]), 1) + }) + } + // SALQ imm8, m64 + if isImm8(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xc1) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SALQ cl, m64 + if v0 == CL && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd3) + m.mrsd(4, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SALQ") + } + return p +} + +// SALW performs "Arithmetic Shift Left". +// +// Mnemonic : SAL +// Supported forms : (6 forms) +// +// * SALW 1, r16 +// * SALW imm8, r16 +// * SALW cl, r16 +// * SALW 1, m16 +// * SALW imm8, m16 +// * SALW cl, m16 +// +func (self *Program) SALW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SALW", 2, Operands { v0, v1 }) + // SALW 1, r16 + if isConst1(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SALW imm8, r16 + if isImm8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SALW cl, r16 + if v0 == CL && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SALW 1, m16 + if isConst1(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(4, addr(v[1]), 1) + }) + } + // SALW imm8, m16 + if isImm8(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SALW cl, m16 + if v0 == CL && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(4, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SALW") + } + return p +} + +// SARB performs "Arithmetic Shift Right". +// +// Mnemonic : SAR +// Supported forms : (6 forms) +// +// * SARB 1, r8 +// * SARB imm8, r8 +// * SARB cl, r8 +// * SARB 1, m8 +// * SARB imm8, m8 +// * SARB cl, m8 +// +func (self *Program) SARB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SARB", 2, Operands { v0, v1 }) + // SARB 1, r8 + if isConst1(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd0) + m.emit(0xf8 | lcode(v[1])) + }) + } + // SARB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xc0) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SARB cl, r8 + if v0 == CL && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd2) + m.emit(0xf8 | lcode(v[1])) + }) + } + // SARB 1, m8 + if isConst1(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd0) + m.mrsd(7, addr(v[1]), 1) + }) + } + // SARB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc0) + m.mrsd(7, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SARB cl, m8 + if v0 == CL && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd2) + m.mrsd(7, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SARB") + } + return p +} + +// SARL performs "Arithmetic Shift Right". +// +// Mnemonic : SAR +// Supported forms : (6 forms) +// +// * SARL 1, r32 +// * SARL imm8, r32 +// * SARL cl, r32 +// * SARL 1, m32 +// * SARL imm8, m32 +// * SARL cl, m32 +// +func (self *Program) SARL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SARL", 2, Operands { v0, v1 }) + // SARL 1, r32 + if isConst1(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xf8 | lcode(v[1])) + }) + } + // SARL imm8, r32 + if isImm8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SARL cl, r32 + if v0 == CL && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xf8 | lcode(v[1])) + }) + } + // SARL 1, m32 + if isConst1(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(7, addr(v[1]), 1) + }) + } + // SARL imm8, m32 + if isImm8(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(7, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SARL cl, m32 + if v0 == CL && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(7, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SARL") + } + return p +} + +// SARQ performs "Arithmetic Shift Right". +// +// Mnemonic : SAR +// Supported forms : (6 forms) +// +// * SARQ 1, r64 +// * SARQ imm8, r64 +// * SARQ cl, r64 +// * SARQ 1, m64 +// * SARQ imm8, m64 +// * SARQ cl, m64 +// +func (self *Program) SARQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SARQ", 2, Operands { v0, v1 }) + // SARQ 1, r64 + if isConst1(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd1) + m.emit(0xf8 | lcode(v[1])) + }) + } + // SARQ imm8, r64 + if isImm8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xc1) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SARQ cl, r64 + if v0 == CL && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd3) + m.emit(0xf8 | lcode(v[1])) + }) + } + // SARQ 1, m64 + if isConst1(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd1) + m.mrsd(7, addr(v[1]), 1) + }) + } + // SARQ imm8, m64 + if isImm8(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xc1) + m.mrsd(7, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SARQ cl, m64 + if v0 == CL && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd3) + m.mrsd(7, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SARQ") + } + return p +} + +// SARW performs "Arithmetic Shift Right". +// +// Mnemonic : SAR +// Supported forms : (6 forms) +// +// * SARW 1, r16 +// * SARW imm8, r16 +// * SARW cl, r16 +// * SARW 1, m16 +// * SARW imm8, m16 +// * SARW cl, m16 +// +func (self *Program) SARW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SARW", 2, Operands { v0, v1 }) + // SARW 1, r16 + if isConst1(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xf8 | lcode(v[1])) + }) + } + // SARW imm8, r16 + if isImm8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SARW cl, r16 + if v0 == CL && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xf8 | lcode(v[1])) + }) + } + // SARW 1, m16 + if isConst1(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(7, addr(v[1]), 1) + }) + } + // SARW imm8, m16 + if isImm8(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(7, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SARW cl, m16 + if v0 == CL && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(7, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SARW") + } + return p +} + +// SARXL performs "Arithmetic Shift Right Without Affecting Flags". +// +// Mnemonic : SARX +// Supported forms : (2 forms) +// +// * SARXL r32, r32, r32 [BMI2] +// * SARXL r32, m32, r32 [BMI2] +// +func (self *Program) SARXL(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SARXL", 3, Operands { v0, v1, v2 }) + // SARXL r32, r32, r32 + if isReg32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7a ^ (hlcode(v[0]) << 3)) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // SARXL r32, m32, r32 + if isReg32(v0) && isM32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x02, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0xf7) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SARXL") + } + return p +} + +// SARXQ performs "Arithmetic Shift Right Without Affecting Flags". +// +// Mnemonic : SARX +// Supported forms : (2 forms) +// +// * SARXQ r64, r64, r64 [BMI2] +// * SARXQ r64, m64, r64 [BMI2] +// +func (self *Program) SARXQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SARXQ", 3, Operands { v0, v1, v2 }) + // SARXQ r64, r64, r64 + if isReg64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xfa ^ (hlcode(v[0]) << 3)) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // SARXQ r64, m64, r64 + if isReg64(v0) && isM64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x82, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0xf7) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SARXQ") + } + return p +} + +// SBBB performs "Subtract with Borrow". +// +// Mnemonic : SBB +// Supported forms : (6 forms) +// +// * SBBB imm8, al +// * SBBB imm8, r8 +// * SBBB r8, r8 +// * SBBB m8, r8 +// * SBBB imm8, m8 +// * SBBB r8, m8 +// +func (self *Program) SBBB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SBBB", 2, Operands { v0, v1 }) + // SBBB imm8, al + if isImm8(v0) && v1 == AL { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x1c) + m.imm1(toImmAny(v[0])) + }) + } + // SBBB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0x80) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SBBB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x18) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x1a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SBBB m8, r8 + if isM8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), isReg8REX(v[1])) + m.emit(0x1a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // SBBB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x80) + m.mrsd(3, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SBBB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x18) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SBBB") + } + return p +} + +// SBBL performs "Subtract with Borrow". +// +// Mnemonic : SBB +// Supported forms : (8 forms) +// +// * SBBL imm32, eax +// * SBBL imm8, r32 +// * SBBL imm32, r32 +// * SBBL r32, r32 +// * SBBL m32, r32 +// * SBBL imm8, m32 +// * SBBL imm32, m32 +// * SBBL r32, m32 +// +func (self *Program) SBBL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SBBL", 2, Operands { v0, v1 }) + // SBBL imm32, eax + if isImm32(v0) && v1 == EAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x1d) + m.imm4(toImmAny(v[0])) + }) + } + // SBBL imm8, r32 + if isImm8Ext(v0, 4) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SBBL imm32, r32 + if isImm32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xd8 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // SBBL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x19) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x1b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SBBL m32, r32 + if isM32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x1b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // SBBL imm8, m32 + if isImm8Ext(v0, 4) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(3, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SBBL imm32, m32 + if isImm32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(3, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // SBBL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x19) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SBBL") + } + return p +} + +// SBBQ performs "Subtract with Borrow". +// +// Mnemonic : SBB +// Supported forms : (8 forms) +// +// * SBBQ imm32, rax +// * SBBQ imm8, r64 +// * SBBQ imm32, r64 +// * SBBQ r64, r64 +// * SBBQ m64, r64 +// * SBBQ imm8, m64 +// * SBBQ imm32, m64 +// * SBBQ r64, m64 +// +func (self *Program) SBBQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SBBQ", 2, Operands { v0, v1 }) + // SBBQ imm32, rax + if isImm32(v0) && v1 == RAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48) + m.emit(0x1d) + m.imm4(toImmAny(v[0])) + }) + } + // SBBQ imm8, r64 + if isImm8Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x83) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SBBQ imm32, r64 + if isImm32Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x81) + m.emit(0xd8 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // SBBQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x19) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x1b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SBBQ m64, r64 + if isM64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x1b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // SBBQ imm8, m64 + if isImm8Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x83) + m.mrsd(3, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SBBQ imm32, m64 + if isImm32Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x81) + m.mrsd(3, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // SBBQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x19) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SBBQ") + } + return p +} + +// SBBW performs "Subtract with Borrow". +// +// Mnemonic : SBB +// Supported forms : (8 forms) +// +// * SBBW imm16, ax +// * SBBW imm8, r16 +// * SBBW imm16, r16 +// * SBBW r16, r16 +// * SBBW m16, r16 +// * SBBW imm8, m16 +// * SBBW imm16, m16 +// * SBBW r16, m16 +// +func (self *Program) SBBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SBBW", 2, Operands { v0, v1 }) + // SBBW imm16, ax + if isImm16(v0) && v1 == AX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x1d) + m.imm2(toImmAny(v[0])) + }) + } + // SBBW imm8, r16 + if isImm8Ext(v0, 2) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SBBW imm16, r16 + if isImm16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xd8 | lcode(v[1])) + m.imm2(toImmAny(v[0])) + }) + } + // SBBW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x19) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x1b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SBBW m16, r16 + if isM16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x1b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // SBBW imm8, m16 + if isImm8Ext(v0, 2) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(3, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SBBW imm16, m16 + if isImm16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(3, addr(v[1]), 1) + m.imm2(toImmAny(v[0])) + }) + } + // SBBW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x19) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SBBW") + } + return p +} + +// SETA performs "Set byte if above (CF == 0 and ZF == 0)". +// +// Mnemonic : SETA +// Supported forms : (2 forms) +// +// * SETA r8 +// * SETA m8 +// +func (self *Program) SETA(v0 interface{}) *Instruction { + p := self.alloc("SETA", 1, Operands { v0 }) + // SETA r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x97) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETA m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x97) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETA") + } + return p +} + +// SETAE performs "Set byte if above or equal (CF == 0)". +// +// Mnemonic : SETAE +// Supported forms : (2 forms) +// +// * SETAE r8 +// * SETAE m8 +// +func (self *Program) SETAE(v0 interface{}) *Instruction { + p := self.alloc("SETAE", 1, Operands { v0 }) + // SETAE r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x93) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETAE m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x93) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETAE") + } + return p +} + +// SETB performs "Set byte if below (CF == 1)". +// +// Mnemonic : SETB +// Supported forms : (2 forms) +// +// * SETB r8 +// * SETB m8 +// +func (self *Program) SETB(v0 interface{}) *Instruction { + p := self.alloc("SETB", 1, Operands { v0 }) + // SETB r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x92) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETB m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x92) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETB") + } + return p +} + +// SETBE performs "Set byte if below or equal (CF == 1 or ZF == 1)". +// +// Mnemonic : SETBE +// Supported forms : (2 forms) +// +// * SETBE r8 +// * SETBE m8 +// +func (self *Program) SETBE(v0 interface{}) *Instruction { + p := self.alloc("SETBE", 1, Operands { v0 }) + // SETBE r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x96) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETBE m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x96) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETBE") + } + return p +} + +// SETC performs "Set byte if carry (CF == 1)". +// +// Mnemonic : SETC +// Supported forms : (2 forms) +// +// * SETC r8 +// * SETC m8 +// +func (self *Program) SETC(v0 interface{}) *Instruction { + p := self.alloc("SETC", 1, Operands { v0 }) + // SETC r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x92) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETC m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x92) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETC") + } + return p +} + +// SETE performs "Set byte if equal (ZF == 1)". +// +// Mnemonic : SETE +// Supported forms : (2 forms) +// +// * SETE r8 +// * SETE m8 +// +func (self *Program) SETE(v0 interface{}) *Instruction { + p := self.alloc("SETE", 1, Operands { v0 }) + // SETE r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x94) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETE m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x94) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETE") + } + return p +} + +// SETG performs "Set byte if greater (ZF == 0 and SF == OF)". +// +// Mnemonic : SETG +// Supported forms : (2 forms) +// +// * SETG r8 +// * SETG m8 +// +func (self *Program) SETG(v0 interface{}) *Instruction { + p := self.alloc("SETG", 1, Operands { v0 }) + // SETG r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x9f) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETG m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x9f) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETG") + } + return p +} + +// SETGE performs "Set byte if greater or equal (SF == OF)". +// +// Mnemonic : SETGE +// Supported forms : (2 forms) +// +// * SETGE r8 +// * SETGE m8 +// +func (self *Program) SETGE(v0 interface{}) *Instruction { + p := self.alloc("SETGE", 1, Operands { v0 }) + // SETGE r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x9d) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETGE m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x9d) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETGE") + } + return p +} + +// SETL performs "Set byte if less (SF != OF)". +// +// Mnemonic : SETL +// Supported forms : (2 forms) +// +// * SETL r8 +// * SETL m8 +// +func (self *Program) SETL(v0 interface{}) *Instruction { + p := self.alloc("SETL", 1, Operands { v0 }) + // SETL r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETL m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x9c) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETL") + } + return p +} + +// SETLE performs "Set byte if less or equal (ZF == 1 or SF != OF)". +// +// Mnemonic : SETLE +// Supported forms : (2 forms) +// +// * SETLE r8 +// * SETLE m8 +// +func (self *Program) SETLE(v0 interface{}) *Instruction { + p := self.alloc("SETLE", 1, Operands { v0 }) + // SETLE r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETLE m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x9e) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETLE") + } + return p +} + +// SETNA performs "Set byte if not above (CF == 1 or ZF == 1)". +// +// Mnemonic : SETNA +// Supported forms : (2 forms) +// +// * SETNA r8 +// * SETNA m8 +// +func (self *Program) SETNA(v0 interface{}) *Instruction { + p := self.alloc("SETNA", 1, Operands { v0 }) + // SETNA r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x96) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNA m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x96) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNA") + } + return p +} + +// SETNAE performs "Set byte if not above or equal (CF == 1)". +// +// Mnemonic : SETNAE +// Supported forms : (2 forms) +// +// * SETNAE r8 +// * SETNAE m8 +// +func (self *Program) SETNAE(v0 interface{}) *Instruction { + p := self.alloc("SETNAE", 1, Operands { v0 }) + // SETNAE r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x92) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNAE m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x92) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNAE") + } + return p +} + +// SETNB performs "Set byte if not below (CF == 0)". +// +// Mnemonic : SETNB +// Supported forms : (2 forms) +// +// * SETNB r8 +// * SETNB m8 +// +func (self *Program) SETNB(v0 interface{}) *Instruction { + p := self.alloc("SETNB", 1, Operands { v0 }) + // SETNB r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x93) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNB m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x93) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNB") + } + return p +} + +// SETNBE performs "Set byte if not below or equal (CF == 0 and ZF == 0)". +// +// Mnemonic : SETNBE +// Supported forms : (2 forms) +// +// * SETNBE r8 +// * SETNBE m8 +// +func (self *Program) SETNBE(v0 interface{}) *Instruction { + p := self.alloc("SETNBE", 1, Operands { v0 }) + // SETNBE r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x97) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNBE m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x97) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNBE") + } + return p +} + +// SETNC performs "Set byte if not carry (CF == 0)". +// +// Mnemonic : SETNC +// Supported forms : (2 forms) +// +// * SETNC r8 +// * SETNC m8 +// +func (self *Program) SETNC(v0 interface{}) *Instruction { + p := self.alloc("SETNC", 1, Operands { v0 }) + // SETNC r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x93) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNC m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x93) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNC") + } + return p +} + +// SETNE performs "Set byte if not equal (ZF == 0)". +// +// Mnemonic : SETNE +// Supported forms : (2 forms) +// +// * SETNE r8 +// * SETNE m8 +// +func (self *Program) SETNE(v0 interface{}) *Instruction { + p := self.alloc("SETNE", 1, Operands { v0 }) + // SETNE r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x95) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNE m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x95) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNE") + } + return p +} + +// SETNG performs "Set byte if not greater (ZF == 1 or SF != OF)". +// +// Mnemonic : SETNG +// Supported forms : (2 forms) +// +// * SETNG r8 +// * SETNG m8 +// +func (self *Program) SETNG(v0 interface{}) *Instruction { + p := self.alloc("SETNG", 1, Operands { v0 }) + // SETNG r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNG m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x9e) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNG") + } + return p +} + +// SETNGE performs "Set byte if not greater or equal (SF != OF)". +// +// Mnemonic : SETNGE +// Supported forms : (2 forms) +// +// * SETNGE r8 +// * SETNGE m8 +// +func (self *Program) SETNGE(v0 interface{}) *Instruction { + p := self.alloc("SETNGE", 1, Operands { v0 }) + // SETNGE r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNGE m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x9c) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNGE") + } + return p +} + +// SETNL performs "Set byte if not less (SF == OF)". +// +// Mnemonic : SETNL +// Supported forms : (2 forms) +// +// * SETNL r8 +// * SETNL m8 +// +func (self *Program) SETNL(v0 interface{}) *Instruction { + p := self.alloc("SETNL", 1, Operands { v0 }) + // SETNL r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x9d) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNL m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x9d) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNL") + } + return p +} + +// SETNLE performs "Set byte if not less or equal (ZF == 0 and SF == OF)". +// +// Mnemonic : SETNLE +// Supported forms : (2 forms) +// +// * SETNLE r8 +// * SETNLE m8 +// +func (self *Program) SETNLE(v0 interface{}) *Instruction { + p := self.alloc("SETNLE", 1, Operands { v0 }) + // SETNLE r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x9f) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNLE m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x9f) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNLE") + } + return p +} + +// SETNO performs "Set byte if not overflow (OF == 0)". +// +// Mnemonic : SETNO +// Supported forms : (2 forms) +// +// * SETNO r8 +// * SETNO m8 +// +func (self *Program) SETNO(v0 interface{}) *Instruction { + p := self.alloc("SETNO", 1, Operands { v0 }) + // SETNO r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x91) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNO m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x91) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNO") + } + return p +} + +// SETNP performs "Set byte if not parity (PF == 0)". +// +// Mnemonic : SETNP +// Supported forms : (2 forms) +// +// * SETNP r8 +// * SETNP m8 +// +func (self *Program) SETNP(v0 interface{}) *Instruction { + p := self.alloc("SETNP", 1, Operands { v0 }) + // SETNP r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x9b) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNP m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x9b) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNP") + } + return p +} + +// SETNS performs "Set byte if not sign (SF == 0)". +// +// Mnemonic : SETNS +// Supported forms : (2 forms) +// +// * SETNS r8 +// * SETNS m8 +// +func (self *Program) SETNS(v0 interface{}) *Instruction { + p := self.alloc("SETNS", 1, Operands { v0 }) + // SETNS r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x99) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNS m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x99) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNS") + } + return p +} + +// SETNZ performs "Set byte if not zero (ZF == 0)". +// +// Mnemonic : SETNZ +// Supported forms : (2 forms) +// +// * SETNZ r8 +// * SETNZ m8 +// +func (self *Program) SETNZ(v0 interface{}) *Instruction { + p := self.alloc("SETNZ", 1, Operands { v0 }) + // SETNZ r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x95) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETNZ m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x95) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETNZ") + } + return p +} + +// SETO performs "Set byte if overflow (OF == 1)". +// +// Mnemonic : SETO +// Supported forms : (2 forms) +// +// * SETO r8 +// * SETO m8 +// +func (self *Program) SETO(v0 interface{}) *Instruction { + p := self.alloc("SETO", 1, Operands { v0 }) + // SETO r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x90) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETO m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x90) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETO") + } + return p +} + +// SETP performs "Set byte if parity (PF == 1)". +// +// Mnemonic : SETP +// Supported forms : (2 forms) +// +// * SETP r8 +// * SETP m8 +// +func (self *Program) SETP(v0 interface{}) *Instruction { + p := self.alloc("SETP", 1, Operands { v0 }) + // SETP r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETP m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x9a) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETP") + } + return p +} + +// SETPE performs "Set byte if parity even (PF == 1)". +// +// Mnemonic : SETPE +// Supported forms : (2 forms) +// +// * SETPE r8 +// * SETPE m8 +// +func (self *Program) SETPE(v0 interface{}) *Instruction { + p := self.alloc("SETPE", 1, Operands { v0 }) + // SETPE r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETPE m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x9a) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETPE") + } + return p +} + +// SETPO performs "Set byte if parity odd (PF == 0)". +// +// Mnemonic : SETPO +// Supported forms : (2 forms) +// +// * SETPO r8 +// * SETPO m8 +// +func (self *Program) SETPO(v0 interface{}) *Instruction { + p := self.alloc("SETPO", 1, Operands { v0 }) + // SETPO r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x9b) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETPO m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x9b) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETPO") + } + return p +} + +// SETS performs "Set byte if sign (SF == 1)". +// +// Mnemonic : SETS +// Supported forms : (2 forms) +// +// * SETS r8 +// * SETS m8 +// +func (self *Program) SETS(v0 interface{}) *Instruction { + p := self.alloc("SETS", 1, Operands { v0 }) + // SETS r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x98) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETS m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x98) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETS") + } + return p +} + +// SETZ performs "Set byte if zero (ZF == 1)". +// +// Mnemonic : SETZ +// Supported forms : (2 forms) +// +// * SETZ r8 +// * SETZ m8 +// +func (self *Program) SETZ(v0 interface{}) *Instruction { + p := self.alloc("SETZ", 1, Operands { v0 }) + // SETZ r8 + if isReg8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0x94) + m.emit(0xc0 | lcode(v[0])) + }) + } + // SETZ m8 + if isM8(v0) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0x94) + m.mrsd(0, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SETZ") + } + return p +} + +// SFENCE performs "Store Fence". +// +// Mnemonic : SFENCE +// Supported forms : (1 form) +// +// * SFENCE [MMX+] +// +func (self *Program) SFENCE() *Instruction { + p := self.alloc("SFENCE", 0, Operands { }) + // SFENCE + self.require(ISA_MMX_PLUS) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0xae) + m.emit(0xf8) + }) + return p +} + +// SHA1MSG1 performs "Perform an Intermediate Calculation for the Next Four SHA1 Message Doublewords". +// +// Mnemonic : SHA1MSG1 +// Supported forms : (2 forms) +// +// * SHA1MSG1 xmm, xmm [SHA] +// * SHA1MSG1 m128, xmm [SHA] +// +func (self *Program) SHA1MSG1(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHA1MSG1", 2, Operands { v0, v1 }) + // SHA1MSG1 xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xc9) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SHA1MSG1 m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xc9) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHA1MSG1") + } + return p +} + +// SHA1MSG2 performs "Perform a Final Calculation for the Next Four SHA1 Message Doublewords". +// +// Mnemonic : SHA1MSG2 +// Supported forms : (2 forms) +// +// * SHA1MSG2 xmm, xmm [SHA] +// * SHA1MSG2 m128, xmm [SHA] +// +func (self *Program) SHA1MSG2(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHA1MSG2", 2, Operands { v0, v1 }) + // SHA1MSG2 xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xca) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SHA1MSG2 m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xca) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHA1MSG2") + } + return p +} + +// SHA1NEXTE performs "Calculate SHA1 State Variable E after Four Rounds". +// +// Mnemonic : SHA1NEXTE +// Supported forms : (2 forms) +// +// * SHA1NEXTE xmm, xmm [SHA] +// * SHA1NEXTE m128, xmm [SHA] +// +func (self *Program) SHA1NEXTE(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHA1NEXTE", 2, Operands { v0, v1 }) + // SHA1NEXTE xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xc8) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SHA1NEXTE m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xc8) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHA1NEXTE") + } + return p +} + +// SHA1RNDS4 performs "Perform Four Rounds of SHA1 Operation". +// +// Mnemonic : SHA1RNDS4 +// Supported forms : (2 forms) +// +// * SHA1RNDS4 imm8, xmm, xmm [SHA] +// * SHA1RNDS4 imm8, m128, xmm [SHA] +// +func (self *Program) SHA1RNDS4(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHA1RNDS4", 3, Operands { v0, v1, v2 }) + // SHA1RNDS4 imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0xcc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SHA1RNDS4 imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x3a) + m.emit(0xcc) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for SHA1RNDS4") + } + return p +} + +// SHA256MSG1 performs "Perform an Intermediate Calculation for the Next Four SHA256 Message Doublewords". +// +// Mnemonic : SHA256MSG1 +// Supported forms : (2 forms) +// +// * SHA256MSG1 xmm, xmm [SHA] +// * SHA256MSG1 m128, xmm [SHA] +// +func (self *Program) SHA256MSG1(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHA256MSG1", 2, Operands { v0, v1 }) + // SHA256MSG1 xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xcc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SHA256MSG1 m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xcc) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHA256MSG1") + } + return p +} + +// SHA256MSG2 performs "Perform a Final Calculation for the Next Four SHA256 Message Doublewords". +// +// Mnemonic : SHA256MSG2 +// Supported forms : (2 forms) +// +// * SHA256MSG2 xmm, xmm [SHA] +// * SHA256MSG2 m128, xmm [SHA] +// +func (self *Program) SHA256MSG2(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHA256MSG2", 2, Operands { v0, v1 }) + // SHA256MSG2 xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xcd) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SHA256MSG2 m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xcd) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHA256MSG2") + } + return p +} + +// SHA256RNDS2 performs "Perform Two Rounds of SHA256 Operation". +// +// Mnemonic : SHA256RNDS2 +// Supported forms : (2 forms) +// +// * SHA256RNDS2 xmm0, xmm, xmm [SHA] +// * SHA256RNDS2 xmm0, m128, xmm [SHA] +// +func (self *Program) SHA256RNDS2(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHA256RNDS2", 3, Operands { v0, v1, v2 }) + // SHA256RNDS2 xmm0, xmm, xmm + if v0 == XMM0 && isXMM(v1) && isXMM(v2) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xcb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // SHA256RNDS2 xmm0, m128, xmm + if v0 == XMM0 && isM128(v1) && isXMM(v2) { + self.require(ISA_SHA) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0x38) + m.emit(0xcb) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHA256RNDS2") + } + return p +} + +// SHLB performs "Logical Shift Left". +// +// Mnemonic : SHL +// Supported forms : (6 forms) +// +// * SHLB 1, r8 +// * SHLB imm8, r8 +// * SHLB cl, r8 +// * SHLB 1, m8 +// * SHLB imm8, m8 +// * SHLB cl, m8 +// +func (self *Program) SHLB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHLB", 2, Operands { v0, v1 }) + // SHLB 1, r8 + if isConst1(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd0) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SHLB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xc0) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SHLB cl, r8 + if v0 == CL && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd2) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SHLB 1, m8 + if isConst1(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd0) + m.mrsd(4, addr(v[1]), 1) + }) + } + // SHLB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc0) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHLB cl, m8 + if v0 == CL && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd2) + m.mrsd(4, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHLB") + } + return p +} + +// SHLDL performs "Integer Double Precision Shift Left". +// +// Mnemonic : SHLD +// Supported forms : (4 forms) +// +// * SHLDL imm8, r32, r32 +// * SHLDL cl, r32, r32 +// * SHLDL imm8, r32, m32 +// * SHLDL cl, r32, m32 +// +func (self *Program) SHLDL(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHLDL", 3, Operands { v0, v1, v2 }) + // SHLDL imm8, r32, r32 + if isImm8(v0) && isReg32(v1) && isReg32(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[2], false) + m.emit(0x0f) + m.emit(0xa4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // SHLDL cl, r32, r32 + if v0 == CL && isReg32(v1) && isReg32(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[2], false) + m.emit(0x0f) + m.emit(0xa5) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + }) + } + // SHLDL imm8, r32, m32 + if isImm8(v0) && isReg32(v1) && isM32(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[2]), false) + m.emit(0x0f) + m.emit(0xa4) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHLDL cl, r32, m32 + if v0 == CL && isReg32(v1) && isM32(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[2]), false) + m.emit(0x0f) + m.emit(0xa5) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHLDL") + } + return p +} + +// SHLDQ performs "Integer Double Precision Shift Left". +// +// Mnemonic : SHLD +// Supported forms : (4 forms) +// +// * SHLDQ imm8, r64, r64 +// * SHLDQ cl, r64, r64 +// * SHLDQ imm8, r64, m64 +// * SHLDQ cl, r64, m64 +// +func (self *Program) SHLDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHLDQ", 3, Operands { v0, v1, v2 }) + // SHLDQ imm8, r64, r64 + if isImm8(v0) && isReg64(v1) && isReg64(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[2])) + m.emit(0x0f) + m.emit(0xa4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // SHLDQ cl, r64, r64 + if v0 == CL && isReg64(v1) && isReg64(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[2])) + m.emit(0x0f) + m.emit(0xa5) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + }) + } + // SHLDQ imm8, r64, m64 + if isImm8(v0) && isReg64(v1) && isM64(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[2])) + m.emit(0x0f) + m.emit(0xa4) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHLDQ cl, r64, m64 + if v0 == CL && isReg64(v1) && isM64(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[2])) + m.emit(0x0f) + m.emit(0xa5) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHLDQ") + } + return p +} + +// SHLDW performs "Integer Double Precision Shift Left". +// +// Mnemonic : SHLD +// Supported forms : (4 forms) +// +// * SHLDW imm8, r16, r16 +// * SHLDW cl, r16, r16 +// * SHLDW imm8, r16, m16 +// * SHLDW cl, r16, m16 +// +func (self *Program) SHLDW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHLDW", 3, Operands { v0, v1, v2 }) + // SHLDW imm8, r16, r16 + if isImm8(v0) && isReg16(v1) && isReg16(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[2], false) + m.emit(0x0f) + m.emit(0xa4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // SHLDW cl, r16, r16 + if v0 == CL && isReg16(v1) && isReg16(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[2], false) + m.emit(0x0f) + m.emit(0xa5) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + }) + } + // SHLDW imm8, r16, m16 + if isImm8(v0) && isReg16(v1) && isM16(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[2]), false) + m.emit(0x0f) + m.emit(0xa4) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHLDW cl, r16, m16 + if v0 == CL && isReg16(v1) && isM16(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[2]), false) + m.emit(0x0f) + m.emit(0xa5) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHLDW") + } + return p +} + +// SHLL performs "Logical Shift Left". +// +// Mnemonic : SHL +// Supported forms : (6 forms) +// +// * SHLL 1, r32 +// * SHLL imm8, r32 +// * SHLL cl, r32 +// * SHLL 1, m32 +// * SHLL imm8, m32 +// * SHLL cl, m32 +// +func (self *Program) SHLL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHLL", 2, Operands { v0, v1 }) + // SHLL 1, r32 + if isConst1(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SHLL imm8, r32 + if isImm8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SHLL cl, r32 + if v0 == CL && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SHLL 1, m32 + if isConst1(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(4, addr(v[1]), 1) + }) + } + // SHLL imm8, m32 + if isImm8(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHLL cl, m32 + if v0 == CL && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(4, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHLL") + } + return p +} + +// SHLQ performs "Logical Shift Left". +// +// Mnemonic : SHL +// Supported forms : (6 forms) +// +// * SHLQ 1, r64 +// * SHLQ imm8, r64 +// * SHLQ cl, r64 +// * SHLQ 1, m64 +// * SHLQ imm8, m64 +// * SHLQ cl, m64 +// +func (self *Program) SHLQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHLQ", 2, Operands { v0, v1 }) + // SHLQ 1, r64 + if isConst1(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd1) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SHLQ imm8, r64 + if isImm8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xc1) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SHLQ cl, r64 + if v0 == CL && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd3) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SHLQ 1, m64 + if isConst1(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd1) + m.mrsd(4, addr(v[1]), 1) + }) + } + // SHLQ imm8, m64 + if isImm8(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xc1) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHLQ cl, m64 + if v0 == CL && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd3) + m.mrsd(4, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHLQ") + } + return p +} + +// SHLW performs "Logical Shift Left". +// +// Mnemonic : SHL +// Supported forms : (6 forms) +// +// * SHLW 1, r16 +// * SHLW imm8, r16 +// * SHLW cl, r16 +// * SHLW 1, m16 +// * SHLW imm8, m16 +// * SHLW cl, m16 +// +func (self *Program) SHLW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHLW", 2, Operands { v0, v1 }) + // SHLW 1, r16 + if isConst1(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SHLW imm8, r16 + if isImm8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SHLW cl, r16 + if v0 == CL && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xe0 | lcode(v[1])) + }) + } + // SHLW 1, m16 + if isConst1(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(4, addr(v[1]), 1) + }) + } + // SHLW imm8, m16 + if isImm8(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(4, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHLW cl, m16 + if v0 == CL && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(4, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHLW") + } + return p +} + +// SHLXL performs "Logical Shift Left Without Affecting Flags". +// +// Mnemonic : SHLX +// Supported forms : (2 forms) +// +// * SHLXL r32, r32, r32 [BMI2] +// * SHLXL r32, m32, r32 [BMI2] +// +func (self *Program) SHLXL(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHLXL", 3, Operands { v0, v1, v2 }) + // SHLXL r32, r32, r32 + if isReg32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[0]) << 3)) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // SHLXL r32, m32, r32 + if isReg32(v0) && isM32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0xf7) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHLXL") + } + return p +} + +// SHLXQ performs "Logical Shift Left Without Affecting Flags". +// +// Mnemonic : SHLX +// Supported forms : (2 forms) +// +// * SHLXQ r64, r64, r64 [BMI2] +// * SHLXQ r64, m64, r64 [BMI2] +// +func (self *Program) SHLXQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHLXQ", 3, Operands { v0, v1, v2 }) + // SHLXQ r64, r64, r64 + if isReg64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xf9 ^ (hlcode(v[0]) << 3)) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // SHLXQ r64, m64, r64 + if isReg64(v0) && isM64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0xf7) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHLXQ") + } + return p +} + +// SHRB performs "Logical Shift Right". +// +// Mnemonic : SHR +// Supported forms : (6 forms) +// +// * SHRB 1, r8 +// * SHRB imm8, r8 +// * SHRB cl, r8 +// * SHRB 1, m8 +// * SHRB imm8, m8 +// * SHRB cl, m8 +// +func (self *Program) SHRB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHRB", 2, Operands { v0, v1 }) + // SHRB 1, r8 + if isConst1(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd0) + m.emit(0xe8 | lcode(v[1])) + }) + } + // SHRB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xc0) + m.emit(0xe8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SHRB cl, r8 + if v0 == CL && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xd2) + m.emit(0xe8 | lcode(v[1])) + }) + } + // SHRB 1, m8 + if isConst1(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd0) + m.mrsd(5, addr(v[1]), 1) + }) + } + // SHRB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc0) + m.mrsd(5, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHRB cl, m8 + if v0 == CL && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd2) + m.mrsd(5, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHRB") + } + return p +} + +// SHRDL performs "Integer Double Precision Shift Right". +// +// Mnemonic : SHRD +// Supported forms : (4 forms) +// +// * SHRDL imm8, r32, r32 +// * SHRDL cl, r32, r32 +// * SHRDL imm8, r32, m32 +// * SHRDL cl, r32, m32 +// +func (self *Program) SHRDL(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHRDL", 3, Operands { v0, v1, v2 }) + // SHRDL imm8, r32, r32 + if isImm8(v0) && isReg32(v1) && isReg32(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[2], false) + m.emit(0x0f) + m.emit(0xac) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // SHRDL cl, r32, r32 + if v0 == CL && isReg32(v1) && isReg32(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[2], false) + m.emit(0x0f) + m.emit(0xad) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + }) + } + // SHRDL imm8, r32, m32 + if isImm8(v0) && isReg32(v1) && isM32(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[2]), false) + m.emit(0x0f) + m.emit(0xac) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHRDL cl, r32, m32 + if v0 == CL && isReg32(v1) && isM32(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[2]), false) + m.emit(0x0f) + m.emit(0xad) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHRDL") + } + return p +} + +// SHRDQ performs "Integer Double Precision Shift Right". +// +// Mnemonic : SHRD +// Supported forms : (4 forms) +// +// * SHRDQ imm8, r64, r64 +// * SHRDQ cl, r64, r64 +// * SHRDQ imm8, r64, m64 +// * SHRDQ cl, r64, m64 +// +func (self *Program) SHRDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHRDQ", 3, Operands { v0, v1, v2 }) + // SHRDQ imm8, r64, r64 + if isImm8(v0) && isReg64(v1) && isReg64(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[2])) + m.emit(0x0f) + m.emit(0xac) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // SHRDQ cl, r64, r64 + if v0 == CL && isReg64(v1) && isReg64(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[2])) + m.emit(0x0f) + m.emit(0xad) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + }) + } + // SHRDQ imm8, r64, m64 + if isImm8(v0) && isReg64(v1) && isM64(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[2])) + m.emit(0x0f) + m.emit(0xac) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHRDQ cl, r64, m64 + if v0 == CL && isReg64(v1) && isM64(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[2])) + m.emit(0x0f) + m.emit(0xad) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHRDQ") + } + return p +} + +// SHRDW performs "Integer Double Precision Shift Right". +// +// Mnemonic : SHRD +// Supported forms : (4 forms) +// +// * SHRDW imm8, r16, r16 +// * SHRDW cl, r16, r16 +// * SHRDW imm8, r16, m16 +// * SHRDW cl, r16, m16 +// +func (self *Program) SHRDW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHRDW", 3, Operands { v0, v1, v2 }) + // SHRDW imm8, r16, r16 + if isImm8(v0) && isReg16(v1) && isReg16(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[2], false) + m.emit(0x0f) + m.emit(0xac) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // SHRDW cl, r16, r16 + if v0 == CL && isReg16(v1) && isReg16(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[2], false) + m.emit(0x0f) + m.emit(0xad) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + }) + } + // SHRDW imm8, r16, m16 + if isImm8(v0) && isReg16(v1) && isM16(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[2]), false) + m.emit(0x0f) + m.emit(0xac) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHRDW cl, r16, m16 + if v0 == CL && isReg16(v1) && isM16(v2) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[2]), false) + m.emit(0x0f) + m.emit(0xad) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHRDW") + } + return p +} + +// SHRL performs "Logical Shift Right". +// +// Mnemonic : SHR +// Supported forms : (6 forms) +// +// * SHRL 1, r32 +// * SHRL imm8, r32 +// * SHRL cl, r32 +// * SHRL 1, m32 +// * SHRL imm8, m32 +// * SHRL cl, m32 +// +func (self *Program) SHRL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHRL", 2, Operands { v0, v1 }) + // SHRL 1, r32 + if isConst1(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xe8 | lcode(v[1])) + }) + } + // SHRL imm8, r32 + if isImm8(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xe8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SHRL cl, r32 + if v0 == CL && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xe8 | lcode(v[1])) + }) + } + // SHRL 1, m32 + if isConst1(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(5, addr(v[1]), 1) + }) + } + // SHRL imm8, m32 + if isImm8(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(5, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHRL cl, m32 + if v0 == CL && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(5, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHRL") + } + return p +} + +// SHRQ performs "Logical Shift Right". +// +// Mnemonic : SHR +// Supported forms : (6 forms) +// +// * SHRQ 1, r64 +// * SHRQ imm8, r64 +// * SHRQ cl, r64 +// * SHRQ 1, m64 +// * SHRQ imm8, m64 +// * SHRQ cl, m64 +// +func (self *Program) SHRQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHRQ", 2, Operands { v0, v1 }) + // SHRQ 1, r64 + if isConst1(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd1) + m.emit(0xe8 | lcode(v[1])) + }) + } + // SHRQ imm8, r64 + if isImm8(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xc1) + m.emit(0xe8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SHRQ cl, r64 + if v0 == CL && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xd3) + m.emit(0xe8 | lcode(v[1])) + }) + } + // SHRQ 1, m64 + if isConst1(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd1) + m.mrsd(5, addr(v[1]), 1) + }) + } + // SHRQ imm8, m64 + if isImm8(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xc1) + m.mrsd(5, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHRQ cl, m64 + if v0 == CL && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xd3) + m.mrsd(5, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHRQ") + } + return p +} + +// SHRW performs "Logical Shift Right". +// +// Mnemonic : SHR +// Supported forms : (6 forms) +// +// * SHRW 1, r16 +// * SHRW imm8, r16 +// * SHRW cl, r16 +// * SHRW 1, m16 +// * SHRW imm8, m16 +// * SHRW cl, m16 +// +func (self *Program) SHRW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SHRW", 2, Operands { v0, v1 }) + // SHRW 1, r16 + if isConst1(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd1) + m.emit(0xe8 | lcode(v[1])) + }) + } + // SHRW imm8, r16 + if isImm8(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xc1) + m.emit(0xe8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SHRW cl, r16 + if v0 == CL && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xd3) + m.emit(0xe8 | lcode(v[1])) + }) + } + // SHRW 1, m16 + if isConst1(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd1) + m.mrsd(5, addr(v[1]), 1) + }) + } + // SHRW imm8, m16 + if isImm8(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xc1) + m.mrsd(5, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SHRW cl, m16 + if v0 == CL && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xd3) + m.mrsd(5, addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHRW") + } + return p +} + +// SHRXL performs "Logical Shift Right Without Affecting Flags". +// +// Mnemonic : SHRX +// Supported forms : (2 forms) +// +// * SHRXL r32, r32, r32 [BMI2] +// * SHRXL r32, m32, r32 [BMI2] +// +func (self *Program) SHRXL(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHRXL", 3, Operands { v0, v1, v2 }) + // SHRXL r32, r32, r32 + if isReg32(v0) && isReg32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7b ^ (hlcode(v[0]) << 3)) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // SHRXL r32, m32, r32 + if isReg32(v0) && isM32(v1) && isReg32(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x03, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0xf7) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHRXL") + } + return p +} + +// SHRXQ performs "Logical Shift Right Without Affecting Flags". +// +// Mnemonic : SHRX +// Supported forms : (2 forms) +// +// * SHRXQ r64, r64, r64 [BMI2] +// * SHRXQ r64, m64, r64 [BMI2] +// +func (self *Program) SHRXQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHRXQ", 3, Operands { v0, v1, v2 }) + // SHRXQ r64, r64, r64 + if isReg64(v0) && isReg64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xfb ^ (hlcode(v[0]) << 3)) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // SHRXQ r64, m64, r64 + if isReg64(v0) && isM64(v1) && isReg64(v2) { + self.require(ISA_BMI2) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x83, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0xf7) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SHRXQ") + } + return p +} + +// SHUFPD performs "Shuffle Packed Double-Precision Floating-Point Values". +// +// Mnemonic : SHUFPD +// Supported forms : (2 forms) +// +// * SHUFPD imm8, xmm, xmm [SSE2] +// * SHUFPD imm8, m128, xmm [SSE2] +// +func (self *Program) SHUFPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHUFPD", 3, Operands { v0, v1, v2 }) + // SHUFPD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SHUFPD imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xc6) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for SHUFPD") + } + return p +} + +// SHUFPS performs "Shuffle Packed Single-Precision Floating-Point Values". +// +// Mnemonic : SHUFPS +// Supported forms : (2 forms) +// +// * SHUFPS imm8, xmm, xmm [SSE] +// * SHUFPS imm8, m128, xmm [SSE] +// +func (self *Program) SHUFPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("SHUFPS", 3, Operands { v0, v1, v2 }) + // SHUFPS imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), v[1], false) + m.emit(0x0f) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SHUFPS imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[2]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xc6) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for SHUFPS") + } + return p +} + +// SQRTPD performs "Compute Square Roots of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : SQRTPD +// Supported forms : (2 forms) +// +// * SQRTPD xmm, xmm [SSE2] +// * SQRTPD m128, xmm [SSE2] +// +func (self *Program) SQRTPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SQRTPD", 2, Operands { v0, v1 }) + // SQRTPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SQRTPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SQRTPD") + } + return p +} + +// SQRTPS performs "Compute Square Roots of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : SQRTPS +// Supported forms : (2 forms) +// +// * SQRTPS xmm, xmm [SSE] +// * SQRTPS m128, xmm [SSE] +// +func (self *Program) SQRTPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SQRTPS", 2, Operands { v0, v1 }) + // SQRTPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SQRTPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SQRTPS") + } + return p +} + +// SQRTSD performs "Compute Square Root of Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : SQRTSD +// Supported forms : (2 forms) +// +// * SQRTSD xmm, xmm [SSE2] +// * SQRTSD m64, xmm [SSE2] +// +func (self *Program) SQRTSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SQRTSD", 2, Operands { v0, v1 }) + // SQRTSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SQRTSD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SQRTSD") + } + return p +} + +// SQRTSS performs "Compute Square Root of Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : SQRTSS +// Supported forms : (2 forms) +// +// * SQRTSS xmm, xmm [SSE] +// * SQRTSS m32, xmm [SSE] +// +func (self *Program) SQRTSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SQRTSS", 2, Operands { v0, v1 }) + // SQRTSS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SQRTSS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SQRTSS") + } + return p +} + +// STC performs "Set Carry Flag". +// +// Mnemonic : STC +// Supported forms : (1 form) +// +// * STC +// +func (self *Program) STC() *Instruction { + p := self.alloc("STC", 0, Operands { }) + // STC + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf9) + }) + return p +} + +// STD performs "Set Direction Flag". +// +// Mnemonic : STD +// Supported forms : (1 form) +// +// * STD +// +func (self *Program) STD() *Instruction { + p := self.alloc("STD", 0, Operands { }) + // STD + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xfd) + }) + return p +} + +// STMXCSR performs "Store MXCSR Register State". +// +// Mnemonic : STMXCSR +// Supported forms : (1 form) +// +// * STMXCSR m32 [SSE] +// +func (self *Program) STMXCSR(v0 interface{}) *Instruction { + p := self.alloc("STMXCSR", 1, Operands { v0 }) + // STMXCSR m32 + if isM32(v0) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[0]), false) + m.emit(0x0f) + m.emit(0xae) + m.mrsd(3, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for STMXCSR") + } + return p +} + +// SUBB performs "Subtract". +// +// Mnemonic : SUB +// Supported forms : (6 forms) +// +// * SUBB imm8, al +// * SUBB imm8, r8 +// * SUBB r8, r8 +// * SUBB m8, r8 +// * SUBB imm8, m8 +// * SUBB r8, m8 +// +func (self *Program) SUBB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SUBB", 2, Operands { v0, v1 }) + // SUBB imm8, al + if isImm8(v0) && v1 == AL { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x2c) + m.imm1(toImmAny(v[0])) + }) + } + // SUBB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0x80) + m.emit(0xe8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SUBB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x28) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SUBB m8, r8 + if isM8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), isReg8REX(v[1])) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // SUBB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x80) + m.mrsd(5, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SUBB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x28) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SUBB") + } + return p +} + +// SUBL performs "Subtract". +// +// Mnemonic : SUB +// Supported forms : (8 forms) +// +// * SUBL imm32, eax +// * SUBL imm8, r32 +// * SUBL imm32, r32 +// * SUBL r32, r32 +// * SUBL m32, r32 +// * SUBL imm8, m32 +// * SUBL imm32, m32 +// * SUBL r32, m32 +// +func (self *Program) SUBL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SUBL", 2, Operands { v0, v1 }) + // SUBL imm32, eax + if isImm32(v0) && v1 == EAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x2d) + m.imm4(toImmAny(v[0])) + }) + } + // SUBL imm8, r32 + if isImm8Ext(v0, 4) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xe8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SUBL imm32, r32 + if isImm32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xe8 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // SUBL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x2b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SUBL m32, r32 + if isM32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x2b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // SUBL imm8, m32 + if isImm8Ext(v0, 4) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(5, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SUBL imm32, m32 + if isImm32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(5, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // SUBL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SUBL") + } + return p +} + +// SUBPD performs "Subtract Packed Double-Precision Floating-Point Values". +// +// Mnemonic : SUBPD +// Supported forms : (2 forms) +// +// * SUBPD xmm, xmm [SSE2] +// * SUBPD m128, xmm [SSE2] +// +func (self *Program) SUBPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SUBPD", 2, Operands { v0, v1 }) + // SUBPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SUBPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SUBPD") + } + return p +} + +// SUBPS performs "Subtract Packed Single-Precision Floating-Point Values". +// +// Mnemonic : SUBPS +// Supported forms : (2 forms) +// +// * SUBPS xmm, xmm [SSE] +// * SUBPS m128, xmm [SSE] +// +func (self *Program) SUBPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SUBPS", 2, Operands { v0, v1 }) + // SUBPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SUBPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SUBPS") + } + return p +} + +// SUBQ performs "Subtract". +// +// Mnemonic : SUB +// Supported forms : (8 forms) +// +// * SUBQ imm32, rax +// * SUBQ imm8, r64 +// * SUBQ imm32, r64 +// * SUBQ r64, r64 +// * SUBQ m64, r64 +// * SUBQ imm8, m64 +// * SUBQ imm32, m64 +// * SUBQ r64, m64 +// +func (self *Program) SUBQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SUBQ", 2, Operands { v0, v1 }) + // SUBQ imm32, rax + if isImm32(v0) && v1 == RAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48) + m.emit(0x2d) + m.imm4(toImmAny(v[0])) + }) + } + // SUBQ imm8, r64 + if isImm8Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x83) + m.emit(0xe8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SUBQ imm32, r64 + if isImm32Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x81) + m.emit(0xe8 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // SUBQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x2b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SUBQ m64, r64 + if isM64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x2b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // SUBQ imm8, m64 + if isImm8Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x83) + m.mrsd(5, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SUBQ imm32, m64 + if isImm32Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x81) + m.mrsd(5, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // SUBQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SUBQ") + } + return p +} + +// SUBSD performs "Subtract Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : SUBSD +// Supported forms : (2 forms) +// +// * SUBSD xmm, xmm [SSE2] +// * SUBSD m64, xmm [SSE2] +// +func (self *Program) SUBSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SUBSD", 2, Operands { v0, v1 }) + // SUBSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SUBSD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf2) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SUBSD") + } + return p +} + +// SUBSS performs "Subtract Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : SUBSS +// Supported forms : (2 forms) +// +// * SUBSS xmm, xmm [SSE] +// * SUBSS m32, xmm [SSE] +// +func (self *Program) SUBSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SUBSS", 2, Operands { v0, v1 }) + // SUBSS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SUBSS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x5c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SUBSS") + } + return p +} + +// SUBW performs "Subtract". +// +// Mnemonic : SUB +// Supported forms : (8 forms) +// +// * SUBW imm16, ax +// * SUBW imm8, r16 +// * SUBW imm16, r16 +// * SUBW r16, r16 +// * SUBW m16, r16 +// * SUBW imm8, m16 +// * SUBW imm16, m16 +// * SUBW r16, m16 +// +func (self *Program) SUBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("SUBW", 2, Operands { v0, v1 }) + // SUBW imm16, ax + if isImm16(v0) && v1 == AX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x2d) + m.imm2(toImmAny(v[0])) + }) + } + // SUBW imm8, r16 + if isImm8Ext(v0, 2) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xe8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // SUBW imm16, r16 + if isImm16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xe8 | lcode(v[1])) + m.imm2(toImmAny(v[0])) + }) + } + // SUBW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x2b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // SUBW m16, r16 + if isM16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x2b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // SUBW imm8, m16 + if isImm8Ext(v0, 2) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(5, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // SUBW imm16, m16 + if isImm16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(5, addr(v[1]), 1) + m.imm2(toImmAny(v[0])) + }) + } + // SUBW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for SUBW") + } + return p +} + +// SYSCALL performs "Fast System Call". +// +// Mnemonic : SYSCALL +// Supported forms : (1 form) +// +// * SYSCALL +// +func (self *Program) SYSCALL() *Instruction { + p := self.alloc("SYSCALL", 0, Operands { }) + // SYSCALL + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x05) + }) + return p +} + +// T1MSKC performs "Inverse Mask From Trailing Ones". +// +// Mnemonic : T1MSKC +// Supported forms : (4 forms) +// +// * T1MSKC r32, r32 [TBM] +// * T1MSKC m32, r32 [TBM] +// * T1MSKC r64, r64 [TBM] +// * T1MSKC m64, r64 [TBM] +// +func (self *Program) T1MSKC(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("T1MSKC", 2, Operands { v0, v1 }) + // T1MSKC r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xf8 | lcode(v[0])) + }) + } + // T1MSKC m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(7, addr(v[0]), 1) + }) + } + // T1MSKC r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xf8 | lcode(v[0])) + }) + } + // T1MSKC m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(7, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for T1MSKC") + } + return p +} + +// TESTB performs "Logical Compare". +// +// Mnemonic : TEST +// Supported forms : (5 forms) +// +// * TESTB imm8, al +// * TESTB imm8, r8 +// * TESTB r8, r8 +// * TESTB imm8, m8 +// * TESTB r8, m8 +// +func (self *Program) TESTB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("TESTB", 2, Operands { v0, v1 }) + // TESTB imm8, al + if isImm8(v0) && v1 == AL { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xa8) + m.imm1(toImmAny(v[0])) + }) + } + // TESTB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // TESTB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x84) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // TESTB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xf6) + m.mrsd(0, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // TESTB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x84) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for TESTB") + } + return p +} + +// TESTL performs "Logical Compare". +// +// Mnemonic : TEST +// Supported forms : (5 forms) +// +// * TESTL imm32, eax +// * TESTL imm32, r32 +// * TESTL r32, r32 +// * TESTL imm32, m32 +// * TESTL r32, m32 +// +func (self *Program) TESTL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("TESTL", 2, Operands { v0, v1 }) + // TESTL imm32, eax + if isImm32(v0) && v1 == EAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xa9) + m.imm4(toImmAny(v[0])) + }) + } + // TESTL imm32, r32 + if isImm32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // TESTL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x85) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // TESTL imm32, m32 + if isImm32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0xf7) + m.mrsd(0, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // TESTL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x85) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for TESTL") + } + return p +} + +// TESTQ performs "Logical Compare". +// +// Mnemonic : TEST +// Supported forms : (5 forms) +// +// * TESTQ imm32, rax +// * TESTQ imm32, r64 +// * TESTQ r64, r64 +// * TESTQ imm32, m64 +// * TESTQ r64, m64 +// +func (self *Program) TESTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("TESTQ", 2, Operands { v0, v1 }) + // TESTQ imm32, rax + if isImm32(v0) && v1 == RAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48) + m.emit(0xa9) + m.imm4(toImmAny(v[0])) + }) + } + // TESTQ imm32, r64 + if isImm32Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // TESTQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x85) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // TESTQ imm32, m64 + if isImm32Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0xf7) + m.mrsd(0, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // TESTQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x85) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for TESTQ") + } + return p +} + +// TESTW performs "Logical Compare". +// +// Mnemonic : TEST +// Supported forms : (5 forms) +// +// * TESTW imm16, ax +// * TESTW imm16, r16 +// * TESTW r16, r16 +// * TESTW imm16, m16 +// * TESTW r16, m16 +// +func (self *Program) TESTW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("TESTW", 2, Operands { v0, v1 }) + // TESTW imm16, ax + if isImm16(v0) && v1 == AX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0xa9) + m.imm2(toImmAny(v[0])) + }) + } + // TESTW imm16, r16 + if isImm16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[1])) + m.imm2(toImmAny(v[0])) + }) + } + // TESTW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x85) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // TESTW imm16, m16 + if isImm16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0xf7) + m.mrsd(0, addr(v[1]), 1) + m.imm2(toImmAny(v[0])) + }) + } + // TESTW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x85) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for TESTW") + } + return p +} + +// TZCNTL performs "Count the Number of Trailing Zero Bits". +// +// Mnemonic : TZCNT +// Supported forms : (2 forms) +// +// * TZCNTL r32, r32 [BMI] +// * TZCNTL m32, r32 [BMI] +// +func (self *Program) TZCNTL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("TZCNTL", 2, Operands { v0, v1 }) + // TZCNTL r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // TZCNTL m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xbc) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for TZCNTL") + } + return p +} + +// TZCNTQ performs "Count the Number of Trailing Zero Bits". +// +// Mnemonic : TZCNT +// Supported forms : (2 forms) +// +// * TZCNTQ r64, r64 [BMI] +// * TZCNTQ m64, r64 [BMI] +// +func (self *Program) TZCNTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("TZCNTQ", 2, Operands { v0, v1 }) + // TZCNTQ r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x0f) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // TZCNTQ m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xf3) + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x0f) + m.emit(0xbc) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for TZCNTQ") + } + return p +} + +// TZCNTW performs "Count the Number of Trailing Zero Bits". +// +// Mnemonic : TZCNT +// Supported forms : (2 forms) +// +// * TZCNTW r16, r16 [BMI] +// * TZCNTW m16, r16 [BMI] +// +func (self *Program) TZCNTW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("TZCNTW", 2, Operands { v0, v1 }) + // TZCNTW r16, r16 + if isReg16(v0) && isReg16(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0xf3) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // TZCNTW m16, r16 + if isM16(v0) && isReg16(v1) { + self.require(ISA_BMI) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0xf3) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0xbc) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for TZCNTW") + } + return p +} + +// TZMSK performs "Mask From Trailing Zeros". +// +// Mnemonic : TZMSK +// Supported forms : (4 forms) +// +// * TZMSK r32, r32 [TBM] +// * TZMSK m32, r32 [TBM] +// * TZMSK r64, r64 [TBM] +// * TZMSK m64, r64 [TBM] +// +func (self *Program) TZMSK(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("TZMSK", 2, Operands { v0, v1 }) + // TZMSK r32, r32 + if isReg32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0x78 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xe0 | lcode(v[0])) + }) + } + // TZMSK m32, r32 + if isM32(v0) && isReg32(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(4, addr(v[0]), 1) + }) + } + // TZMSK r64, r64 + if isReg64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xe0 | lcode(v[0])) + }) + } + // TZMSK m64, r64 + if isM64(v0) && isReg64(v1) { + self.require(ISA_TBM) + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, 0, addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(4, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for TZMSK") + } + return p +} + +// UCOMISD performs "Unordered Compare Scalar Double-Precision Floating-Point Values and Set EFLAGS". +// +// Mnemonic : UCOMISD +// Supported forms : (2 forms) +// +// * UCOMISD xmm, xmm [SSE2] +// * UCOMISD m64, xmm [SSE2] +// +func (self *Program) UCOMISD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("UCOMISD", 2, Operands { v0, v1 }) + // UCOMISD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // UCOMISD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for UCOMISD") + } + return p +} + +// UCOMISS performs "Unordered Compare Scalar Single-Precision Floating-Point Values and Set EFLAGS". +// +// Mnemonic : UCOMISS +// Supported forms : (2 forms) +// +// * UCOMISS xmm, xmm [SSE] +// * UCOMISS m32, xmm [SSE] +// +func (self *Program) UCOMISS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("UCOMISS", 2, Operands { v0, v1 }) + // UCOMISS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x2e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // UCOMISS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x2e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for UCOMISS") + } + return p +} + +// UD2 performs "Undefined Instruction". +// +// Mnemonic : UD2 +// Supported forms : (1 form) +// +// * UD2 +// +func (self *Program) UD2() *Instruction { + p := self.alloc("UD2", 0, Operands { }) + // UD2 + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x0b) + }) + return p +} + +// UNPCKHPD performs "Unpack and Interleave High Packed Double-Precision Floating-Point Values". +// +// Mnemonic : UNPCKHPD +// Supported forms : (2 forms) +// +// * UNPCKHPD xmm, xmm [SSE2] +// * UNPCKHPD m128, xmm [SSE2] +// +func (self *Program) UNPCKHPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("UNPCKHPD", 2, Operands { v0, v1 }) + // UNPCKHPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x15) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // UNPCKHPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x15) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for UNPCKHPD") + } + return p +} + +// UNPCKHPS performs "Unpack and Interleave High Packed Single-Precision Floating-Point Values". +// +// Mnemonic : UNPCKHPS +// Supported forms : (2 forms) +// +// * UNPCKHPS xmm, xmm [SSE] +// * UNPCKHPS m128, xmm [SSE] +// +func (self *Program) UNPCKHPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("UNPCKHPS", 2, Operands { v0, v1 }) + // UNPCKHPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x15) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // UNPCKHPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x15) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for UNPCKHPS") + } + return p +} + +// UNPCKLPD performs "Unpack and Interleave Low Packed Double-Precision Floating-Point Values". +// +// Mnemonic : UNPCKLPD +// Supported forms : (2 forms) +// +// * UNPCKLPD xmm, xmm [SSE2] +// * UNPCKLPD m128, xmm [SSE2] +// +func (self *Program) UNPCKLPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("UNPCKLPD", 2, Operands { v0, v1 }) + // UNPCKLPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x14) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // UNPCKLPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x14) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for UNPCKLPD") + } + return p +} + +// UNPCKLPS performs "Unpack and Interleave Low Packed Single-Precision Floating-Point Values". +// +// Mnemonic : UNPCKLPS +// Supported forms : (2 forms) +// +// * UNPCKLPS xmm, xmm [SSE] +// * UNPCKLPS m128, xmm [SSE] +// +func (self *Program) UNPCKLPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("UNPCKLPS", 2, Operands { v0, v1 }) + // UNPCKLPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x14) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // UNPCKLPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x14) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for UNPCKLPS") + } + return p +} + +// VADDPD performs "Add Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VADDPD +// Supported forms : (11 forms) +// +// * VADDPD xmm, xmm, xmm [AVX] +// * VADDPD m128, xmm, xmm [AVX] +// * VADDPD ymm, ymm, ymm [AVX] +// * VADDPD m256, ymm, ymm [AVX] +// * VADDPD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VADDPD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VADDPD zmm, zmm, zmm{k}{z} [AVX512F] +// * VADDPD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VADDPD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VADDPD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VADDPD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VADDPD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VADDPD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VADDPD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VADDPD takes 3 or 4 operands") + } + // VADDPD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDPD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VADDPD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDPD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VADDPD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VADDPD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x58) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VADDPD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDPD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VADDPD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDPD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VADDPD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VADDPD") + } + return p +} + +// VADDPS performs "Add Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VADDPS +// Supported forms : (11 forms) +// +// * VADDPS xmm, xmm, xmm [AVX] +// * VADDPS m128, xmm, xmm [AVX] +// * VADDPS ymm, ymm, ymm [AVX] +// * VADDPS m256, ymm, ymm [AVX] +// * VADDPS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VADDPS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VADDPS zmm, zmm, zmm{k}{z} [AVX512F] +// * VADDPS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VADDPS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VADDPS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VADDPS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VADDPS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VADDPS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VADDPS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VADDPS takes 3 or 4 operands") + } + // VADDPS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDPS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VADDPS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDPS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VADDPS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VADDPS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x58) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VADDPS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDPS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VADDPS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDPS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VADDPS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VADDPS") + } + return p +} + +// VADDSD performs "Add Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VADDSD +// Supported forms : (5 forms) +// +// * VADDSD xmm, xmm, xmm [AVX] +// * VADDSD m64, xmm, xmm [AVX] +// * VADDSD m64, xmm, xmm{k}{z} [AVX512F] +// * VADDSD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VADDSD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VADDSD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VADDSD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VADDSD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VADDSD takes 3 or 4 operands") + } + // VADDSD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDSD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VADDSD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VADDSD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xff ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x58) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VADDSD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VADDSD") + } + return p +} + +// VADDSS performs "Add Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VADDSS +// Supported forms : (5 forms) +// +// * VADDSS xmm, xmm, xmm [AVX] +// * VADDSS m32, xmm, xmm [AVX] +// * VADDSS m32, xmm, xmm{k}{z} [AVX512F] +// * VADDSS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VADDSS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VADDSS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VADDSS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VADDSS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VADDSS takes 3 or 4 operands") + } + // VADDSS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDSS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VADDSS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x58) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VADDSS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7e ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x58) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VADDSS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x58) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VADDSS") + } + return p +} + +// VADDSUBPD performs "Packed Double-FP Add/Subtract". +// +// Mnemonic : VADDSUBPD +// Supported forms : (4 forms) +// +// * VADDSUBPD xmm, xmm, xmm [AVX] +// * VADDSUBPD m128, xmm, xmm [AVX] +// * VADDSUBPD ymm, ymm, ymm [AVX] +// * VADDSUBPD m256, ymm, ymm [AVX] +// +func (self *Program) VADDSUBPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VADDSUBPD", 3, Operands { v0, v1, v2 }) + // VADDSUBPD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd0) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDSUBPD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd0) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VADDSUBPD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd0) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDSUBPD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd0) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VADDSUBPD") + } + return p +} + +// VADDSUBPS performs "Packed Single-FP Add/Subtract". +// +// Mnemonic : VADDSUBPS +// Supported forms : (4 forms) +// +// * VADDSUBPS xmm, xmm, xmm [AVX] +// * VADDSUBPS m128, xmm, xmm [AVX] +// * VADDSUBPS ymm, ymm, ymm [AVX] +// * VADDSUBPS m256, ymm, ymm [AVX] +// +func (self *Program) VADDSUBPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VADDSUBPS", 3, Operands { v0, v1, v2 }) + // VADDSUBPS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd0) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDSUBPS m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd0) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VADDSUBPS ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd0) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VADDSUBPS m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd0) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VADDSUBPS") + } + return p +} + +// VAESDEC performs "Perform One Round of an AES Decryption Flow". +// +// Mnemonic : VAESDEC +// Supported forms : (2 forms) +// +// * VAESDEC xmm, xmm, xmm [AES,AVX] +// * VAESDEC m128, xmm, xmm [AES,AVX] +// +func (self *Program) VAESDEC(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VAESDEC", 3, Operands { v0, v1, v2 }) + // VAESDEC xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX | ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xde) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VAESDEC m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX | ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xde) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VAESDEC") + } + return p +} + +// VAESDECLAST performs "Perform Last Round of an AES Decryption Flow". +// +// Mnemonic : VAESDECLAST +// Supported forms : (2 forms) +// +// * VAESDECLAST xmm, xmm, xmm [AES,AVX] +// * VAESDECLAST m128, xmm, xmm [AES,AVX] +// +func (self *Program) VAESDECLAST(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VAESDECLAST", 3, Operands { v0, v1, v2 }) + // VAESDECLAST xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX | ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VAESDECLAST m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX | ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xdf) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VAESDECLAST") + } + return p +} + +// VAESENC performs "Perform One Round of an AES Encryption Flow". +// +// Mnemonic : VAESENC +// Supported forms : (2 forms) +// +// * VAESENC xmm, xmm, xmm [AES,AVX] +// * VAESENC m128, xmm, xmm [AES,AVX] +// +func (self *Program) VAESENC(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VAESENC", 3, Operands { v0, v1, v2 }) + // VAESENC xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX | ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xdc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VAESENC m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX | ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xdc) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VAESENC") + } + return p +} + +// VAESENCLAST performs "Perform Last Round of an AES Encryption Flow". +// +// Mnemonic : VAESENCLAST +// Supported forms : (2 forms) +// +// * VAESENCLAST xmm, xmm, xmm [AES,AVX] +// * VAESENCLAST m128, xmm, xmm [AES,AVX] +// +func (self *Program) VAESENCLAST(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VAESENCLAST", 3, Operands { v0, v1, v2 }) + // VAESENCLAST xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX | ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xdd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VAESENCLAST m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX | ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xdd) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VAESENCLAST") + } + return p +} + +// VAESIMC performs "Perform the AES InvMixColumn Transformation". +// +// Mnemonic : VAESIMC +// Supported forms : (2 forms) +// +// * VAESIMC xmm, xmm [AES,AVX] +// * VAESIMC m128, xmm [AES,AVX] +// +func (self *Program) VAESIMC(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VAESIMC", 2, Operands { v0, v1 }) + // VAESIMC xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX | ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VAESIMC m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX | ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0xdb) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VAESIMC") + } + return p +} + +// VAESKEYGENASSIST performs "AES Round Key Generation Assist". +// +// Mnemonic : VAESKEYGENASSIST +// Supported forms : (2 forms) +// +// * VAESKEYGENASSIST imm8, xmm, xmm [AES,AVX] +// * VAESKEYGENASSIST imm8, m128, xmm [AES,AVX] +// +func (self *Program) VAESKEYGENASSIST(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VAESKEYGENASSIST", 3, Operands { v0, v1, v2 }) + // VAESKEYGENASSIST imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX | ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VAESKEYGENASSIST imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AVX | ISA_AES) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[2]), addr(v[1]), 0) + m.emit(0xdf) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VAESKEYGENASSIST") + } + return p +} + +// VALIGND performs "Align Doubleword Vectors". +// +// Mnemonic : VALIGND +// Supported forms : (6 forms) +// +// * VALIGND imm8, m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VALIGND imm8, zmm, zmm, zmm{k}{z} [AVX512F] +// * VALIGND imm8, m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VALIGND imm8, xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VALIGND imm8, m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VALIGND imm8, ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VALIGND(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VALIGND", 4, Operands { v0, v1, v2, v3 }) + // VALIGND imm8, m512/m32bcst, zmm, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x03) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VALIGND imm8, zmm, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x03) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VALIGND imm8, m128/m32bcst, xmm, xmm{k}{z} + if isImm8(v0) && isM128M32bcst(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x03) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VALIGND imm8, xmm, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x03) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VALIGND imm8, m256/m32bcst, ymm, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x03) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VALIGND imm8, ymm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x03) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VALIGND") + } + return p +} + +// VALIGNQ performs "Align Quadword Vectors". +// +// Mnemonic : VALIGNQ +// Supported forms : (6 forms) +// +// * VALIGNQ imm8, m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VALIGNQ imm8, zmm, zmm, zmm{k}{z} [AVX512F] +// * VALIGNQ imm8, m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VALIGNQ imm8, xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VALIGNQ imm8, m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VALIGNQ imm8, ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VALIGNQ(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VALIGNQ", 4, Operands { v0, v1, v2, v3 }) + // VALIGNQ imm8, m512/m64bcst, zmm, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x03) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VALIGNQ imm8, zmm, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x03) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VALIGNQ imm8, m128/m64bcst, xmm, xmm{k}{z} + if isImm8(v0) && isM128M64bcst(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x03) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VALIGNQ imm8, xmm, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x03) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VALIGNQ imm8, m256/m64bcst, ymm, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x03) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VALIGNQ imm8, ymm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x03) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VALIGNQ") + } + return p +} + +// VANDNPD performs "Bitwise Logical AND NOT of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VANDNPD +// Supported forms : (10 forms) +// +// * VANDNPD xmm, xmm, xmm [AVX] +// * VANDNPD m128, xmm, xmm [AVX] +// * VANDNPD ymm, ymm, ymm [AVX] +// * VANDNPD m256, ymm, ymm [AVX] +// * VANDNPD m512/m64bcst, zmm, zmm{k}{z} [AVX512DQ] +// * VANDNPD zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VANDNPD m128/m64bcst, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VANDNPD xmm, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VANDNPD m256/m64bcst, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VANDNPD ymm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VANDNPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VANDNPD", 3, Operands { v0, v1, v2 }) + // VANDNPD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x55) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDNPD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x55) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VANDNPD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x55) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDNPD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x55) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VANDNPD m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x55) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VANDNPD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x55) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDNPD m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x55) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VANDNPD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x55) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDNPD m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x55) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VANDNPD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x55) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VANDNPD") + } + return p +} + +// VANDNPS performs "Bitwise Logical AND NOT of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VANDNPS +// Supported forms : (10 forms) +// +// * VANDNPS xmm, xmm, xmm [AVX] +// * VANDNPS m128, xmm, xmm [AVX] +// * VANDNPS ymm, ymm, ymm [AVX] +// * VANDNPS m256, ymm, ymm [AVX] +// * VANDNPS m512/m32bcst, zmm, zmm{k}{z} [AVX512DQ] +// * VANDNPS zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VANDNPS m128/m32bcst, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VANDNPS xmm, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VANDNPS m256/m32bcst, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VANDNPS ymm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VANDNPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VANDNPS", 3, Operands { v0, v1, v2 }) + // VANDNPS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x55) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDNPS m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x55) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VANDNPS ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x55) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDNPS m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x55) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VANDNPS m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x55) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VANDNPS zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x55) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDNPS m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x55) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VANDNPS xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x55) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDNPS m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x55) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VANDNPS ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x55) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VANDNPS") + } + return p +} + +// VANDPD performs "Bitwise Logical AND of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VANDPD +// Supported forms : (10 forms) +// +// * VANDPD xmm, xmm, xmm [AVX] +// * VANDPD m128, xmm, xmm [AVX] +// * VANDPD ymm, ymm, ymm [AVX] +// * VANDPD m256, ymm, ymm [AVX] +// * VANDPD m512/m64bcst, zmm, zmm{k}{z} [AVX512DQ] +// * VANDPD zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VANDPD m128/m64bcst, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VANDPD xmm, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VANDPD m256/m64bcst, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VANDPD ymm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VANDPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VANDPD", 3, Operands { v0, v1, v2 }) + // VANDPD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x54) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDPD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x54) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VANDPD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x54) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDPD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x54) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VANDPD m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x54) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VANDPD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x54) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDPD m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x54) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VANDPD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x54) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDPD m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x54) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VANDPD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x54) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VANDPD") + } + return p +} + +// VANDPS performs "Bitwise Logical AND of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VANDPS +// Supported forms : (10 forms) +// +// * VANDPS xmm, xmm, xmm [AVX] +// * VANDPS m128, xmm, xmm [AVX] +// * VANDPS ymm, ymm, ymm [AVX] +// * VANDPS m256, ymm, ymm [AVX] +// * VANDPS m512/m32bcst, zmm, zmm{k}{z} [AVX512DQ] +// * VANDPS zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VANDPS m128/m32bcst, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VANDPS xmm, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VANDPS m256/m32bcst, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VANDPS ymm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VANDPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VANDPS", 3, Operands { v0, v1, v2 }) + // VANDPS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x54) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDPS m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x54) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VANDPS ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x54) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDPS m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x54) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VANDPS m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x54) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VANDPS zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x54) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDPS m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x54) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VANDPS xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x54) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VANDPS m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x54) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VANDPS ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x54) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VANDPS") + } + return p +} + +// VBLENDMPD performs "Blend Packed Double-Precision Floating-Point Vectors Using an OpMask Control". +// +// Mnemonic : VBLENDMPD +// Supported forms : (6 forms) +// +// * VBLENDMPD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VBLENDMPD zmm, zmm, zmm{k}{z} [AVX512F] +// * VBLENDMPD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VBLENDMPD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VBLENDMPD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VBLENDMPD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VBLENDMPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VBLENDMPD", 3, Operands { v0, v1, v2 }) + // VBLENDMPD m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x65) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VBLENDMPD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x65) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VBLENDMPD m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x65) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VBLENDMPD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x65) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VBLENDMPD m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x65) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VBLENDMPD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x65) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VBLENDMPD") + } + return p +} + +// VBLENDMPS performs "Blend Packed Single-Precision Floating-Point Vectors Using an OpMask Control". +// +// Mnemonic : VBLENDMPS +// Supported forms : (6 forms) +// +// * VBLENDMPS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VBLENDMPS zmm, zmm, zmm{k}{z} [AVX512F] +// * VBLENDMPS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VBLENDMPS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VBLENDMPS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VBLENDMPS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VBLENDMPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VBLENDMPS", 3, Operands { v0, v1, v2 }) + // VBLENDMPS m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x65) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VBLENDMPS zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x65) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VBLENDMPS m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x65) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VBLENDMPS xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x65) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VBLENDMPS m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x65) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VBLENDMPS ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x65) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VBLENDMPS") + } + return p +} + +// VBLENDPD performs "Blend Packed Double Precision Floating-Point Values". +// +// Mnemonic : VBLENDPD +// Supported forms : (4 forms) +// +// * VBLENDPD imm8, xmm, xmm, xmm [AVX] +// * VBLENDPD imm8, m128, xmm, xmm [AVX] +// * VBLENDPD imm8, ymm, ymm, ymm [AVX] +// * VBLENDPD imm8, m256, ymm, ymm [AVX] +// +func (self *Program) VBLENDPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VBLENDPD", 4, Operands { v0, v1, v2, v3 }) + // VBLENDPD imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x0d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VBLENDPD imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x0d) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VBLENDPD imm8, ymm, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x0d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VBLENDPD imm8, m256, ymm, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x0d) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VBLENDPD") + } + return p +} + +// VBLENDPS performs " Blend Packed Single Precision Floating-Point Values". +// +// Mnemonic : VBLENDPS +// Supported forms : (4 forms) +// +// * VBLENDPS imm8, xmm, xmm, xmm [AVX] +// * VBLENDPS imm8, m128, xmm, xmm [AVX] +// * VBLENDPS imm8, ymm, ymm, ymm [AVX] +// * VBLENDPS imm8, m256, ymm, ymm [AVX] +// +func (self *Program) VBLENDPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VBLENDPS", 4, Operands { v0, v1, v2, v3 }) + // VBLENDPS imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x0c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VBLENDPS imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x0c) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VBLENDPS imm8, ymm, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x0c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VBLENDPS imm8, m256, ymm, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x0c) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VBLENDPS") + } + return p +} + +// VBLENDVPD performs " Variable Blend Packed Double Precision Floating-Point Values". +// +// Mnemonic : VBLENDVPD +// Supported forms : (4 forms) +// +// * VBLENDVPD xmm, xmm, xmm, xmm [AVX] +// * VBLENDVPD xmm, m128, xmm, xmm [AVX] +// * VBLENDVPD ymm, ymm, ymm, ymm [AVX] +// * VBLENDVPD ymm, m256, ymm, ymm [AVX] +// +func (self *Program) VBLENDVPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VBLENDVPD", 4, Operands { v0, v1, v2, v3 }) + // VBLENDVPD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x4b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VBLENDVPD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x4b) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VBLENDVPD ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x4b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VBLENDVPD ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x4b) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VBLENDVPD") + } + return p +} + +// VBLENDVPS performs " Variable Blend Packed Single Precision Floating-Point Values". +// +// Mnemonic : VBLENDVPS +// Supported forms : (4 forms) +// +// * VBLENDVPS xmm, xmm, xmm, xmm [AVX] +// * VBLENDVPS xmm, m128, xmm, xmm [AVX] +// * VBLENDVPS ymm, ymm, ymm, ymm [AVX] +// * VBLENDVPS ymm, m256, ymm, ymm [AVX] +// +func (self *Program) VBLENDVPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VBLENDVPS", 4, Operands { v0, v1, v2, v3 }) + // VBLENDVPS xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x4a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VBLENDVPS xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x4a) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VBLENDVPS ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x4a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VBLENDVPS ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x4a) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VBLENDVPS") + } + return p +} + +// VBROADCASTF128 performs "Broadcast 128 Bit of Floating-Point Data". +// +// Mnemonic : VBROADCASTF128 +// Supported forms : (1 form) +// +// * VBROADCASTF128 m128, ymm [AVX] +// +func (self *Program) VBROADCASTF128(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTF128", 2, Operands { v0, v1 }) + // VBROADCASTF128 m128, ymm + if isM128(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x1a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTF128") + } + return p +} + +// VBROADCASTF32X2 performs "Broadcast Two Single-Precision Floating-Point Elements". +// +// Mnemonic : VBROADCASTF32X2 +// Supported forms : (4 forms) +// +// * VBROADCASTF32X2 xmm, zmm{k}{z} [AVX512DQ] +// * VBROADCASTF32X2 m64, zmm{k}{z} [AVX512DQ] +// * VBROADCASTF32X2 xmm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VBROADCASTF32X2 m64, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VBROADCASTF32X2(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTF32X2", 2, Operands { v0, v1 }) + // VBROADCASTF32X2 xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x19) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VBROADCASTF32X2 m64, zmm{k}{z} + if isM64(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x19) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VBROADCASTF32X2 xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x19) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VBROADCASTF32X2 m64, ymm{k}{z} + if isM64(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x19) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTF32X2") + } + return p +} + +// VBROADCASTF32X4 performs "Broadcast Four Single-Precision Floating-Point Elements". +// +// Mnemonic : VBROADCASTF32X4 +// Supported forms : (2 forms) +// +// * VBROADCASTF32X4 m128, zmm{k}{z} [AVX512F] +// * VBROADCASTF32X4 m128, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VBROADCASTF32X4(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTF32X4", 2, Operands { v0, v1 }) + // VBROADCASTF32X4 m128, zmm{k}{z} + if isM128(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x1a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VBROADCASTF32X4 m128, ymm{k}{z} + if isM128(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x1a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTF32X4") + } + return p +} + +// VBROADCASTF32X8 performs "Broadcast Eight Single-Precision Floating-Point Elements". +// +// Mnemonic : VBROADCASTF32X8 +// Supported forms : (1 form) +// +// * VBROADCASTF32X8 m256, zmm{k}{z} [AVX512DQ] +// +func (self *Program) VBROADCASTF32X8(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTF32X8", 2, Operands { v0, v1 }) + // VBROADCASTF32X8 m256, zmm{k}{z} + if isM256(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x1b) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTF32X8") + } + return p +} + +// VBROADCASTF64X2 performs "Broadcast Two Double-Precision Floating-Point Elements". +// +// Mnemonic : VBROADCASTF64X2 +// Supported forms : (2 forms) +// +// * VBROADCASTF64X2 m128, zmm{k}{z} [AVX512DQ] +// * VBROADCASTF64X2 m128, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VBROADCASTF64X2(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTF64X2", 2, Operands { v0, v1 }) + // VBROADCASTF64X2 m128, zmm{k}{z} + if isM128(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x1a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VBROADCASTF64X2 m128, ymm{k}{z} + if isM128(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x1a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTF64X2") + } + return p +} + +// VBROADCASTF64X4 performs "Broadcast Four Double-Precision Floating-Point Elements". +// +// Mnemonic : VBROADCASTF64X4 +// Supported forms : (1 form) +// +// * VBROADCASTF64X4 m256, zmm{k}{z} [AVX512F] +// +func (self *Program) VBROADCASTF64X4(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTF64X4", 2, Operands { v0, v1 }) + // VBROADCASTF64X4 m256, zmm{k}{z} + if isM256(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x1b) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTF64X4") + } + return p +} + +// VBROADCASTI128 performs "Broadcast 128 Bits of Integer Data". +// +// Mnemonic : VBROADCASTI128 +// Supported forms : (1 form) +// +// * VBROADCASTI128 m128, ymm [AVX2] +// +func (self *Program) VBROADCASTI128(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTI128", 2, Operands { v0, v1 }) + // VBROADCASTI128 m128, ymm + if isM128(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTI128") + } + return p +} + +// VBROADCASTI32X2 performs "Broadcast Two Doubleword Elements". +// +// Mnemonic : VBROADCASTI32X2 +// Supported forms : (6 forms) +// +// * VBROADCASTI32X2 xmm, zmm{k}{z} [AVX512DQ] +// * VBROADCASTI32X2 m64, zmm{k}{z} [AVX512DQ] +// * VBROADCASTI32X2 xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VBROADCASTI32X2 xmm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VBROADCASTI32X2 m64, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VBROADCASTI32X2 m64, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VBROADCASTI32X2(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTI32X2", 2, Operands { v0, v1 }) + // VBROADCASTI32X2 xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x59) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VBROADCASTI32X2 m64, zmm{k}{z} + if isM64(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x59) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VBROADCASTI32X2 xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x59) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VBROADCASTI32X2 xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x59) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VBROADCASTI32X2 m64, xmm{k}{z} + if isM64(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x59) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VBROADCASTI32X2 m64, ymm{k}{z} + if isM64(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x59) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTI32X2") + } + return p +} + +// VBROADCASTI32X4 performs "Broadcast Four Doubleword Elements". +// +// Mnemonic : VBROADCASTI32X4 +// Supported forms : (2 forms) +// +// * VBROADCASTI32X4 m128, zmm{k}{z} [AVX512F] +// * VBROADCASTI32X4 m128, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VBROADCASTI32X4(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTI32X4", 2, Operands { v0, v1 }) + // VBROADCASTI32X4 m128, zmm{k}{z} + if isM128(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VBROADCASTI32X4 m128, ymm{k}{z} + if isM128(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTI32X4") + } + return p +} + +// VBROADCASTI32X8 performs "Broadcast Eight Doubleword Elements". +// +// Mnemonic : VBROADCASTI32X8 +// Supported forms : (1 form) +// +// * VBROADCASTI32X8 m256, zmm{k}{z} [AVX512DQ] +// +func (self *Program) VBROADCASTI32X8(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTI32X8", 2, Operands { v0, v1 }) + // VBROADCASTI32X8 m256, zmm{k}{z} + if isM256(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTI32X8") + } + return p +} + +// VBROADCASTI64X2 performs "Broadcast Two Quadword Elements". +// +// Mnemonic : VBROADCASTI64X2 +// Supported forms : (2 forms) +// +// * VBROADCASTI64X2 m128, zmm{k}{z} [AVX512DQ] +// * VBROADCASTI64X2 m128, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VBROADCASTI64X2(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTI64X2", 2, Operands { v0, v1 }) + // VBROADCASTI64X2 m128, zmm{k}{z} + if isM128(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VBROADCASTI64X2 m128, ymm{k}{z} + if isM128(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTI64X2") + } + return p +} + +// VBROADCASTI64X4 performs "Broadcast Four Quadword Elements". +// +// Mnemonic : VBROADCASTI64X4 +// Supported forms : (1 form) +// +// * VBROADCASTI64X4 m256, zmm{k}{z} [AVX512F] +// +func (self *Program) VBROADCASTI64X4(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTI64X4", 2, Operands { v0, v1 }) + // VBROADCASTI64X4 m256, zmm{k}{z} + if isM256(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTI64X4") + } + return p +} + +// VBROADCASTSD performs "Broadcast Double-Precision Floating-Point Element". +// +// Mnemonic : VBROADCASTSD +// Supported forms : (6 forms) +// +// * VBROADCASTSD m64, ymm [AVX] +// * VBROADCASTSD xmm, ymm [AVX2] +// * VBROADCASTSD xmm, zmm{k}{z} [AVX512F] +// * VBROADCASTSD m64, zmm{k}{z} [AVX512F] +// * VBROADCASTSD xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VBROADCASTSD m64, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VBROADCASTSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTSD", 2, Operands { v0, v1 }) + // VBROADCASTSD m64, ymm + if isM64(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x19) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VBROADCASTSD xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x19) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VBROADCASTSD xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x19) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VBROADCASTSD m64, zmm{k}{z} + if isM64(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x19) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VBROADCASTSD xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x19) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VBROADCASTSD m64, ymm{k}{z} + if isM64(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x19) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTSD") + } + return p +} + +// VBROADCASTSS performs "Broadcast Single-Precision Floating-Point Element". +// +// Mnemonic : VBROADCASTSS +// Supported forms : (8 forms) +// +// * VBROADCASTSS m32, xmm [AVX] +// * VBROADCASTSS m32, ymm [AVX] +// * VBROADCASTSS xmm, xmm [AVX2] +// * VBROADCASTSS xmm, ymm [AVX2] +// * VBROADCASTSS xmm, zmm{k}{z} [AVX512F] +// * VBROADCASTSS m32, zmm{k}{z} [AVX512F] +// * VBROADCASTSS xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VBROADCASTSS m32, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VBROADCASTSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VBROADCASTSS", 2, Operands { v0, v1 }) + // VBROADCASTSS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x18) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VBROADCASTSS m32, ymm + if isM32(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x18) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VBROADCASTSS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x18) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VBROADCASTSS xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x18) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VBROADCASTSS xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x18) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VBROADCASTSS m32, zmm{k}{z} + if isM32(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x18) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VBROADCASTSS xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x18) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VBROADCASTSS m32, ymm{k}{z} + if isM32(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x18) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VBROADCASTSS") + } + return p +} + +// VCMPPD performs "Compare Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VCMPPD +// Supported forms : (11 forms) +// +// * VCMPPD imm8, xmm, xmm, xmm [AVX] +// * VCMPPD imm8, m128, xmm, xmm [AVX] +// * VCMPPD imm8, ymm, ymm, ymm [AVX] +// * VCMPPD imm8, m256, ymm, ymm [AVX] +// * VCMPPD imm8, m512/m64bcst, zmm, k{k} [AVX512F] +// * VCMPPD imm8, {sae}, zmm, zmm, k{k} [AVX512F] +// * VCMPPD imm8, zmm, zmm, k{k} [AVX512F] +// * VCMPPD imm8, m128/m64bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VCMPPD imm8, xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VCMPPD imm8, m256/m64bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VCMPPD imm8, ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VCMPPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCMPPD", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VCMPPD", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VCMPPD takes 4 or 5 operands") + } + // VCMPPD imm8, xmm, xmm, xmm + if len(vv) == 0 && isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[3]), v[1], hlcode(v[2])) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPD imm8, m128, xmm, xmm + if len(vv) == 0 && isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPD imm8, ymm, ymm, ymm + if len(vv) == 0 && isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[3]), v[1], hlcode(v[2])) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPD imm8, m256, ymm, ymm + if len(vv) == 0 && isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPD imm8, m512/m64bcst, zmm, k{k} + if len(vv) == 0 && isImm8(v0) && isM512M64bcst(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPD imm8, {sae}, zmm, zmm, k{k} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isZMM(v2) && isZMM(v3) && isKk(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0xfd ^ (hlcode(v[3]) << 3)) + m.emit((0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPD imm8, zmm, zmm, k{k} + if len(vv) == 0 && isImm8(v0) && isZMM(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPD imm8, m128/m64bcst, xmm, k{k} + if len(vv) == 0 && isImm8(v0) && isM128M64bcst(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPD imm8, xmm, xmm, k{k} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPD imm8, m256/m64bcst, ymm, k{k} + if len(vv) == 0 && isImm8(v0) && isM256M64bcst(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPD imm8, ymm, ymm, k{k} + if len(vv) == 0 && isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCMPPD") + } + return p +} + +// VCMPPS performs "Compare Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VCMPPS +// Supported forms : (11 forms) +// +// * VCMPPS imm8, xmm, xmm, xmm [AVX] +// * VCMPPS imm8, m128, xmm, xmm [AVX] +// * VCMPPS imm8, ymm, ymm, ymm [AVX] +// * VCMPPS imm8, m256, ymm, ymm [AVX] +// * VCMPPS imm8, m512/m32bcst, zmm, k{k} [AVX512F] +// * VCMPPS imm8, {sae}, zmm, zmm, k{k} [AVX512F] +// * VCMPPS imm8, zmm, zmm, k{k} [AVX512F] +// * VCMPPS imm8, m128/m32bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VCMPPS imm8, xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VCMPPS imm8, m256/m32bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VCMPPS imm8, ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VCMPPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCMPPS", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VCMPPS", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VCMPPS takes 4 or 5 operands") + } + // VCMPPS imm8, xmm, xmm, xmm + if len(vv) == 0 && isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[3]), v[1], hlcode(v[2])) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPS imm8, m128, xmm, xmm + if len(vv) == 0 && isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPS imm8, ymm, ymm, ymm + if len(vv) == 0 && isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[3]), v[1], hlcode(v[2])) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPS imm8, m256, ymm, ymm + if len(vv) == 0 && isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPS imm8, m512/m32bcst, zmm, k{k} + if len(vv) == 0 && isImm8(v0) && isM512M32bcst(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPS imm8, {sae}, zmm, zmm, k{k} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isZMM(v2) && isZMM(v3) && isKk(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0x7c ^ (hlcode(v[3]) << 3)) + m.emit((0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPS imm8, zmm, zmm, k{k} + if len(vv) == 0 && isImm8(v0) && isZMM(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPS imm8, m128/m32bcst, xmm, k{k} + if len(vv) == 0 && isImm8(v0) && isM128M32bcst(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPS imm8, xmm, xmm, k{k} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPS imm8, m256/m32bcst, ymm, k{k} + if len(vv) == 0 && isImm8(v0) && isM256M32bcst(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPPS imm8, ymm, ymm, k{k} + if len(vv) == 0 && isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCMPPS") + } + return p +} + +// VCMPSD performs "Compare Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VCMPSD +// Supported forms : (5 forms) +// +// * VCMPSD imm8, xmm, xmm, xmm [AVX] +// * VCMPSD imm8, m64, xmm, xmm [AVX] +// * VCMPSD imm8, m64, xmm, k{k} [AVX512F] +// * VCMPSD imm8, {sae}, xmm, xmm, k{k} [AVX512F] +// * VCMPSD imm8, xmm, xmm, k{k} [AVX512F] +// +func (self *Program) VCMPSD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCMPSD", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VCMPSD", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VCMPSD takes 4 or 5 operands") + } + // VCMPSD imm8, xmm, xmm, xmm + if len(vv) == 0 && isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[3]), v[1], hlcode(v[2])) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPSD imm8, m64, xmm, xmm + if len(vv) == 0 && isImm8(v0) && isM64(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPSD imm8, m64, xmm, k{k} + if len(vv) == 0 && isImm8(v0) && isM64(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 8) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPSD imm8, {sae}, xmm, xmm, k{k} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) && isKk(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0xff ^ (hlcode(v[3]) << 3)) + m.emit((0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPSD imm8, xmm, xmm, k{k} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xff ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCMPSD") + } + return p +} + +// VCMPSS performs "Compare Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VCMPSS +// Supported forms : (5 forms) +// +// * VCMPSS imm8, xmm, xmm, xmm [AVX] +// * VCMPSS imm8, m32, xmm, xmm [AVX] +// * VCMPSS imm8, m32, xmm, k{k} [AVX512F] +// * VCMPSS imm8, {sae}, xmm, xmm, k{k} [AVX512F] +// * VCMPSS imm8, xmm, xmm, k{k} [AVX512F] +// +func (self *Program) VCMPSS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCMPSS", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VCMPSS", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VCMPSS takes 4 or 5 operands") + } + // VCMPSS imm8, xmm, xmm, xmm + if len(vv) == 0 && isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[3]), v[1], hlcode(v[2])) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPSS imm8, m32, xmm, xmm + if len(vv) == 0 && isImm8(v0) && isM32(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPSS imm8, m32, xmm, k{k} + if len(vv) == 0 && isImm8(v0) && isM32(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0xc2) + m.mrsd(lcode(v[3]), addr(v[1]), 4) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPSS imm8, {sae}, xmm, xmm, k{k} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) && isKk(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0x7e ^ (hlcode(v[3]) << 3)) + m.emit((0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VCMPSS imm8, xmm, xmm, k{k} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7e ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCMPSS") + } + return p +} + +// VCOMISD performs "Compare Scalar Ordered Double-Precision Floating-Point Values and Set EFLAGS". +// +// Mnemonic : VCOMISD +// Supported forms : (5 forms) +// +// * VCOMISD xmm, xmm [AVX] +// * VCOMISD m64, xmm [AVX] +// * VCOMISD m64, xmm [AVX512F] +// * VCOMISD {sae}, xmm, xmm [AVX512F] +// * VCOMISD xmm, xmm [AVX512F] +// +func (self *Program) VCOMISD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCOMISD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCOMISD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCOMISD takes 2 or 3 operands") + } + // VCOMISD xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0x2f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCOMISD m64, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCOMISD m64, xmm + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2f) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCOMISD {sae}, xmm, xmm + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit(0x18) + m.emit(0x2f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCOMISD xmm, xmm + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit(0x48) + m.emit(0x2f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCOMISD") + } + return p +} + +// VCOMISS performs "Compare Scalar Ordered Single-Precision Floating-Point Values and Set EFLAGS". +// +// Mnemonic : VCOMISS +// Supported forms : (5 forms) +// +// * VCOMISS xmm, xmm [AVX] +// * VCOMISS m32, xmm [AVX] +// * VCOMISS m32, xmm [AVX512F] +// * VCOMISS {sae}, xmm, xmm [AVX512F] +// * VCOMISS xmm, xmm [AVX512F] +// +func (self *Program) VCOMISS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCOMISS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCOMISS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCOMISS takes 2 or 3 operands") + } + // VCOMISS xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), v[0], 0) + m.emit(0x2f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCOMISS m32, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCOMISS m32, xmm + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2f) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VCOMISS {sae}, xmm, xmm + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c) + m.emit(0x18) + m.emit(0x2f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCOMISS xmm, xmm + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit(0x48) + m.emit(0x2f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCOMISS") + } + return p +} + +// VCOMPRESSPD performs "Store Sparse Packed Double-Precision Floating-Point Values into Dense Memory/Register". +// +// Mnemonic : VCOMPRESSPD +// Supported forms : (6 forms) +// +// * VCOMPRESSPD zmm, zmm{k}{z} [AVX512F] +// * VCOMPRESSPD zmm, m512{k}{z} [AVX512F] +// * VCOMPRESSPD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCOMPRESSPD xmm, m128{k}{z} [AVX512F,AVX512VL] +// * VCOMPRESSPD ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VCOMPRESSPD ymm, m256{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCOMPRESSPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VCOMPRESSPD", 2, Operands { v0, v1 }) + // VCOMPRESSPD zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x8a) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VCOMPRESSPD zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x8a) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VCOMPRESSPD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x8a) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VCOMPRESSPD xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x8a) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VCOMPRESSPD ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x8a) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VCOMPRESSPD ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x8a) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VCOMPRESSPD") + } + return p +} + +// VCOMPRESSPS performs "Store Sparse Packed Single-Precision Floating-Point Values into Dense Memory/Register". +// +// Mnemonic : VCOMPRESSPS +// Supported forms : (6 forms) +// +// * VCOMPRESSPS zmm, zmm{k}{z} [AVX512F] +// * VCOMPRESSPS zmm, m512{k}{z} [AVX512F] +// * VCOMPRESSPS xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCOMPRESSPS xmm, m128{k}{z} [AVX512F,AVX512VL] +// * VCOMPRESSPS ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VCOMPRESSPS ymm, m256{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCOMPRESSPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VCOMPRESSPS", 2, Operands { v0, v1 }) + // VCOMPRESSPS zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x8a) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VCOMPRESSPS zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x8a) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VCOMPRESSPS xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x8a) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VCOMPRESSPS xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x8a) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VCOMPRESSPS ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x8a) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VCOMPRESSPS ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x8a) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VCOMPRESSPS") + } + return p +} + +// VCVTDQ2PD performs "Convert Packed Dword Integers to Packed Double-Precision FP Values". +// +// Mnemonic : VCVTDQ2PD +// Supported forms : (10 forms) +// +// * VCVTDQ2PD xmm, xmm [AVX] +// * VCVTDQ2PD m64, xmm [AVX] +// * VCVTDQ2PD xmm, ymm [AVX] +// * VCVTDQ2PD m128, ymm [AVX] +// * VCVTDQ2PD m256/m32bcst, zmm{k}{z} [AVX512F] +// * VCVTDQ2PD ymm, zmm{k}{z} [AVX512F] +// * VCVTDQ2PD m64/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTDQ2PD m128/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VCVTDQ2PD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTDQ2PD xmm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTDQ2PD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VCVTDQ2PD", 2, Operands { v0, v1 }) + // VCVTDQ2PD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), v[0], 0) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTDQ2PD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), addr(v[0]), 0) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTDQ2PD xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[1]), v[0], 0) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTDQ2PD m128, ymm + if isM128(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[1]), addr(v[0]), 0) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTDQ2PD m256/m32bcst, zmm{k}{z} + if isM256M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTDQ2PD ymm, zmm{k}{z} + if isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTDQ2PD m64/m32bcst, xmm{k}{z} + if isM64M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTDQ2PD m128/m32bcst, ymm{k}{z} + if isM128M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTDQ2PD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTDQ2PD xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTDQ2PD") + } + return p +} + +// VCVTDQ2PS performs "Convert Packed Dword Integers to Packed Single-Precision FP Values". +// +// Mnemonic : VCVTDQ2PS +// Supported forms : (11 forms) +// +// * VCVTDQ2PS xmm, xmm [AVX] +// * VCVTDQ2PS m128, xmm [AVX] +// * VCVTDQ2PS ymm, ymm [AVX] +// * VCVTDQ2PS m256, ymm [AVX] +// * VCVTDQ2PS m512/m32bcst, zmm{k}{z} [AVX512F] +// * VCVTDQ2PS {er}, zmm, zmm{k}{z} [AVX512F] +// * VCVTDQ2PS zmm, zmm{k}{z} [AVX512F] +// * VCVTDQ2PS m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTDQ2PS m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VCVTDQ2PS xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTDQ2PS ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTDQ2PS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTDQ2PS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTDQ2PS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTDQ2PS takes 2 or 3 operands") + } + // VCVTDQ2PS xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), v[0], 0) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTDQ2PS m128, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), addr(v[0]), 0) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTDQ2PS ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), v[0], 0) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTDQ2PS m256, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), addr(v[0]), 0) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTDQ2PS m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTDQ2PS {er}, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTDQ2PS zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTDQ2PS m128/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTDQ2PS m256/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTDQ2PS xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTDQ2PS ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTDQ2PS") + } + return p +} + +// VCVTPD2DQ performs "Convert Packed Double-Precision FP Values to Packed Dword Integers". +// +// Mnemonic : VCVTPD2DQ +// Supported forms : (11 forms) +// +// * VCVTPD2DQ xmm, xmm [AVX] +// * VCVTPD2DQ ymm, xmm [AVX] +// * VCVTPD2DQ m128, xmm [AVX] +// * VCVTPD2DQ m256, xmm [AVX] +// * VCVTPD2DQ m512/m64bcst, ymm{k}{z} [AVX512F] +// * VCVTPD2DQ {er}, zmm, ymm{k}{z} [AVX512F] +// * VCVTPD2DQ zmm, ymm{k}{z} [AVX512F] +// * VCVTPD2DQ m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPD2DQ m256/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPD2DQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPD2DQ ymm, xmm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTPD2DQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTPD2DQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTPD2DQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTPD2DQ takes 2 or 3 operands") + } + // VCVTPD2DQ xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[1]), v[0], 0) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2DQ ymm, xmm + if len(vv) == 0 && isYMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[1]), v[0], 0) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2DQ m128, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[1]), addr(v[0]), 0) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTPD2DQ m256, xmm + if len(vv) == 0 && isM256(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[1]), addr(v[0]), 0) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTPD2DQ m512/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTPD2DQ {er}, zmm, ymm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isYMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTPD2DQ zmm, ymm{k}{z} + if len(vv) == 0 && isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2DQ m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTPD2DQ m256/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTPD2DQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2DQ ymm, xmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTPD2DQ") + } + return p +} + +// VCVTPD2PS performs "Convert Packed Double-Precision FP Values to Packed Single-Precision FP Values". +// +// Mnemonic : VCVTPD2PS +// Supported forms : (11 forms) +// +// * VCVTPD2PS xmm, xmm [AVX] +// * VCVTPD2PS ymm, xmm [AVX] +// * VCVTPD2PS m128, xmm [AVX] +// * VCVTPD2PS m256, xmm [AVX] +// * VCVTPD2PS m512/m64bcst, ymm{k}{z} [AVX512F] +// * VCVTPD2PS {er}, zmm, ymm{k}{z} [AVX512F] +// * VCVTPD2PS zmm, ymm{k}{z} [AVX512F] +// * VCVTPD2PS m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPD2PS m256/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPD2PS xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPD2PS ymm, xmm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTPD2PS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTPD2PS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTPD2PS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTPD2PS takes 2 or 3 operands") + } + // VCVTPD2PS xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2PS ymm, xmm + if len(vv) == 0 && isYMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), v[0], 0) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2PS m128, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), addr(v[0]), 0) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTPD2PS m256, xmm + if len(vv) == 0 && isM256(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), addr(v[0]), 0) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTPD2PS m512/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTPD2PS {er}, zmm, ymm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isYMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTPD2PS zmm, ymm{k}{z} + if len(vv) == 0 && isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2PS m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTPD2PS m256/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTPD2PS xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2PS ymm, xmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTPD2PS") + } + return p +} + +// VCVTPD2QQ performs "Convert Packed Double-Precision Floating-Point Values to Packed Quadword Integers". +// +// Mnemonic : VCVTPD2QQ +// Supported forms : (7 forms) +// +// * VCVTPD2QQ m512/m64bcst, zmm{k}{z} [AVX512DQ] +// * VCVTPD2QQ {er}, zmm, zmm{k}{z} [AVX512DQ] +// * VCVTPD2QQ zmm, zmm{k}{z} [AVX512DQ] +// * VCVTPD2QQ m128/m64bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTPD2QQ m256/m64bcst, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTPD2QQ xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTPD2QQ ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VCVTPD2QQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTPD2QQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTPD2QQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTPD2QQ takes 2 or 3 operands") + } + // VCVTPD2QQ m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7b) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTPD2QQ {er}, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTPD2QQ zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2QQ m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7b) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTPD2QQ m256/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7b) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTPD2QQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2QQ ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTPD2QQ") + } + return p +} + +// VCVTPD2UDQ performs "Convert Packed Double-Precision Floating-Point Values to Packed Unsigned Doubleword Integers". +// +// Mnemonic : VCVTPD2UDQ +// Supported forms : (7 forms) +// +// * VCVTPD2UDQ m512/m64bcst, ymm{k}{z} [AVX512F] +// * VCVTPD2UDQ {er}, zmm, ymm{k}{z} [AVX512F] +// * VCVTPD2UDQ zmm, ymm{k}{z} [AVX512F] +// * VCVTPD2UDQ m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPD2UDQ m256/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPD2UDQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPD2UDQ ymm, xmm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTPD2UDQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTPD2UDQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTPD2UDQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTPD2UDQ takes 2 or 3 operands") + } + // VCVTPD2UDQ m512/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x84, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTPD2UDQ {er}, zmm, ymm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isYMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfc) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x79) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTPD2UDQ zmm, ymm{k}{z} + if len(vv) == 0 && isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfc) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2UDQ m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x84, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTPD2UDQ m256/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x84, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTPD2UDQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfc) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2UDQ ymm, xmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfc) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTPD2UDQ") + } + return p +} + +// VCVTPD2UQQ performs "Convert Packed Double-Precision Floating-Point Values to Packed Unsigned Quadword Integers". +// +// Mnemonic : VCVTPD2UQQ +// Supported forms : (7 forms) +// +// * VCVTPD2UQQ m512/m64bcst, zmm{k}{z} [AVX512DQ] +// * VCVTPD2UQQ {er}, zmm, zmm{k}{z} [AVX512DQ] +// * VCVTPD2UQQ zmm, zmm{k}{z} [AVX512DQ] +// * VCVTPD2UQQ m128/m64bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTPD2UQQ m256/m64bcst, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTPD2UQQ xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTPD2UQQ ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VCVTPD2UQQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTPD2UQQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTPD2UQQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTPD2UQQ takes 2 or 3 operands") + } + // VCVTPD2UQQ m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTPD2UQQ {er}, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x79) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTPD2UQQ zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2UQQ m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTPD2UQQ m256/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTPD2UQQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPD2UQQ ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTPD2UQQ") + } + return p +} + +// VCVTPH2PS performs "Convert Half-Precision FP Values to Single-Precision FP Values". +// +// Mnemonic : VCVTPH2PS +// Supported forms : (11 forms) +// +// * VCVTPH2PS xmm, xmm [F16C] +// * VCVTPH2PS m64, xmm [F16C] +// * VCVTPH2PS xmm, ymm [F16C] +// * VCVTPH2PS m128, ymm [F16C] +// * VCVTPH2PS m256, zmm{k}{z} [AVX512F] +// * VCVTPH2PS {sae}, ymm, zmm{k}{z} [AVX512F] +// * VCVTPH2PS ymm, zmm{k}{z} [AVX512F] +// * VCVTPH2PS xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPH2PS xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VCVTPH2PS m64, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPH2PS m128, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTPH2PS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTPH2PS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTPH2PS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTPH2PS takes 2 or 3 operands") + } + // VCVTPH2PS xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_F16C) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x13) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPH2PS m64, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) { + self.require(ISA_F16C) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x13) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTPH2PS xmm, ymm + if len(vv) == 0 && isXMM(v0) && isYMM(v1) { + self.require(ISA_F16C) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x13) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPH2PS m128, ymm + if len(vv) == 0 && isM128(v0) && isYMM(v1) { + self.require(ISA_F16C) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x13) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTPH2PS m256, zmm{k}{z} + if len(vv) == 0 && isM256(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x13) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTPH2PS {sae}, ymm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXYMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0x13) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTPH2PS ymm, zmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x13) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPH2PS xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x13) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPH2PS xmm, ymm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x13) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPH2PS m64, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x13) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTPH2PS m128, ymm{k}{z} + if len(vv) == 0 && isM128(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x13) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTPH2PS") + } + return p +} + +// VCVTPS2DQ performs "Convert Packed Single-Precision FP Values to Packed Dword Integers". +// +// Mnemonic : VCVTPS2DQ +// Supported forms : (11 forms) +// +// * VCVTPS2DQ xmm, xmm [AVX] +// * VCVTPS2DQ m128, xmm [AVX] +// * VCVTPS2DQ ymm, ymm [AVX] +// * VCVTPS2DQ m256, ymm [AVX] +// * VCVTPS2DQ m512/m32bcst, zmm{k}{z} [AVX512F] +// * VCVTPS2DQ {er}, zmm, zmm{k}{z} [AVX512F] +// * VCVTPS2DQ zmm, zmm{k}{z} [AVX512F] +// * VCVTPS2DQ m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPS2DQ m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VCVTPS2DQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPS2DQ ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTPS2DQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTPS2DQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTPS2DQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTPS2DQ takes 2 or 3 operands") + } + // VCVTPS2DQ xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2DQ m128, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), addr(v[0]), 0) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTPS2DQ ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), v[0], 0) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2DQ m256, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), addr(v[0]), 0) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTPS2DQ m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTPS2DQ {er}, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTPS2DQ zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2DQ m128/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTPS2DQ m256/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTPS2DQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2DQ ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTPS2DQ") + } + return p +} + +// VCVTPS2PD performs "Convert Packed Single-Precision FP Values to Packed Double-Precision FP Values". +// +// Mnemonic : VCVTPS2PD +// Supported forms : (11 forms) +// +// * VCVTPS2PD xmm, xmm [AVX] +// * VCVTPS2PD m64, xmm [AVX] +// * VCVTPS2PD xmm, ymm [AVX] +// * VCVTPS2PD m128, ymm [AVX] +// * VCVTPS2PD m256/m32bcst, zmm{k}{z} [AVX512F] +// * VCVTPS2PD {sae}, ymm, zmm{k}{z} [AVX512F] +// * VCVTPS2PD ymm, zmm{k}{z} [AVX512F] +// * VCVTPS2PD m64/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPS2PD m128/m32bcst, ymm{k}{z} [AVX512VL] +// * VCVTPS2PD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPS2PD xmm, ymm{k}{z} [AVX512VL] +// +func (self *Program) VCVTPS2PD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTPS2PD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTPS2PD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTPS2PD takes 2 or 3 operands") + } + // VCVTPS2PD xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), v[0], 0) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2PD m64, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), addr(v[0]), 0) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTPS2PD xmm, ymm + if len(vv) == 0 && isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), v[0], 0) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2PD m128, ymm + if len(vv) == 0 && isM128(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), addr(v[0]), 0) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTPS2PD m256/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTPS2PD {sae}, ymm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXYMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTPS2PD ymm, zmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2PD m64/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM64M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTPS2PD m128/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTPS2PD xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2PD xmm, ymm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTPS2PD") + } + return p +} + +// VCVTPS2PH performs "Convert Single-Precision FP value to Half-Precision FP value". +// +// Mnemonic : VCVTPS2PH +// Supported forms : (11 forms) +// +// * VCVTPS2PH imm8, xmm, xmm [F16C] +// * VCVTPS2PH imm8, ymm, xmm [F16C] +// * VCVTPS2PH imm8, xmm, m64 [F16C] +// * VCVTPS2PH imm8, ymm, m128 [F16C] +// * VCVTPS2PH imm8, zmm, m256{k}{z} [AVX512F] +// * VCVTPS2PH imm8, {sae}, zmm, ymm{k}{z} [AVX512F] +// * VCVTPS2PH imm8, zmm, ymm{k}{z} [AVX512F] +// * VCVTPS2PH imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPS2PH imm8, xmm, m64{k}{z} [AVX512F,AVX512VL] +// * VCVTPS2PH imm8, ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPS2PH imm8, ymm, m128{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTPS2PH(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTPS2PH", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VCVTPS2PH", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VCVTPS2PH takes 3 or 4 operands") + } + // VCVTPS2PH imm8, xmm, xmm + if len(vv) == 0 && isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_F16C) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[1]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0x79) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VCVTPS2PH imm8, ymm, xmm + if len(vv) == 0 && isImm8(v0) && isYMM(v1) && isXMM(v2) { + self.require(ISA_F16C) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[1]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0x7d) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VCVTPS2PH imm8, xmm, m64 + if len(vv) == 0 && isImm8(v0) && isXMM(v1) && isM64(v2) { + self.require(ISA_F16C) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[1]), addr(v[2]), 0) + m.emit(0x1d) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VCVTPS2PH imm8, ymm, m128 + if len(vv) == 0 && isImm8(v0) && isYMM(v1) && isM128(v2) { + self.require(ISA_F16C) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[1]), addr(v[2]), 0) + m.emit(0x1d) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VCVTPS2PH imm8, zmm, m256{k}{z} + if len(vv) == 0 && isImm8(v0) && isZMM(v1) && isM256kz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x1d) + m.mrsd(lcode(v[1]), addr(v[2]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VCVTPS2PH imm8, {sae}, zmm, ymm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isZMM(v2) && isYMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[3]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[3]) << 7) | kcode(v[3]) | 0x18) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[3])) + m.imm1(toImmAny(v[0])) + }) + } + // VCVTPS2PH imm8, zmm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isZMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VCVTPS2PH imm8, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x08) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VCVTPS2PH imm8, xmm, m64{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isM64kz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x1d) + m.mrsd(lcode(v[1]), addr(v[2]), 8) + m.imm1(toImmAny(v[0])) + }) + } + // VCVTPS2PH imm8, ymm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXYMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VCVTPS2PH imm8, ymm, m128{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXYMM(v1) && isM128kz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x1d) + m.mrsd(lcode(v[1]), addr(v[2]), 16) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTPS2PH") + } + return p +} + +// VCVTPS2QQ performs "Convert Packed Single Precision Floating-Point Values to Packed Singed Quadword Integer Values". +// +// Mnemonic : VCVTPS2QQ +// Supported forms : (7 forms) +// +// * VCVTPS2QQ m256/m32bcst, zmm{k}{z} [AVX512DQ] +// * VCVTPS2QQ {er}, ymm, zmm{k}{z} [AVX512DQ] +// * VCVTPS2QQ ymm, zmm{k}{z} [AVX512DQ] +// * VCVTPS2QQ m64/m32bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTPS2QQ m128/m32bcst, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTPS2QQ xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTPS2QQ xmm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VCVTPS2QQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTPS2QQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTPS2QQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTPS2QQ takes 2 or 3 operands") + } + // VCVTPS2QQ m256/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7b) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTPS2QQ {er}, ymm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXYMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTPS2QQ ymm, zmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2QQ m64/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM64M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7b) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTPS2QQ m128/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7b) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTPS2QQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2QQ xmm, ymm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTPS2QQ") + } + return p +} + +// VCVTPS2UDQ performs "Convert Packed Single-Precision Floating-Point Values to Packed Unsigned Doubleword Integer Values". +// +// Mnemonic : VCVTPS2UDQ +// Supported forms : (7 forms) +// +// * VCVTPS2UDQ m512/m32bcst, zmm{k}{z} [AVX512F] +// * VCVTPS2UDQ {er}, zmm, zmm{k}{z} [AVX512F] +// * VCVTPS2UDQ zmm, zmm{k}{z} [AVX512F] +// * VCVTPS2UDQ m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPS2UDQ m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VCVTPS2UDQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTPS2UDQ ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTPS2UDQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTPS2UDQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTPS2UDQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTPS2UDQ takes 2 or 3 operands") + } + // VCVTPS2UDQ m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTPS2UDQ {er}, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x79) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTPS2UDQ zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2UDQ m128/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTPS2UDQ m256/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTPS2UDQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2UDQ ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTPS2UDQ") + } + return p +} + +// VCVTPS2UQQ performs "Convert Packed Single Precision Floating-Point Values to Packed Unsigned Quadword Integer Values". +// +// Mnemonic : VCVTPS2UQQ +// Supported forms : (7 forms) +// +// * VCVTPS2UQQ m256/m32bcst, zmm{k}{z} [AVX512DQ] +// * VCVTPS2UQQ {er}, ymm, zmm{k}{z} [AVX512DQ] +// * VCVTPS2UQQ ymm, zmm{k}{z} [AVX512DQ] +// * VCVTPS2UQQ m64/m32bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTPS2UQQ m128/m32bcst, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTPS2UQQ xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTPS2UQQ xmm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VCVTPS2UQQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTPS2UQQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTPS2UQQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTPS2UQQ takes 2 or 3 operands") + } + // VCVTPS2UQQ m256/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTPS2UQQ {er}, ymm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXYMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x79) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTPS2UQQ ymm, zmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2UQQ m64/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM64M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTPS2UQQ m128/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTPS2UQQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTPS2UQQ xmm, ymm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTPS2UQQ") + } + return p +} + +// VCVTQQ2PD performs "Convert Packed Quadword Integers to Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VCVTQQ2PD +// Supported forms : (7 forms) +// +// * VCVTQQ2PD m512/m64bcst, zmm{k}{z} [AVX512DQ] +// * VCVTQQ2PD {er}, zmm, zmm{k}{z} [AVX512DQ] +// * VCVTQQ2PD zmm, zmm{k}{z} [AVX512DQ] +// * VCVTQQ2PD m128/m64bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTQQ2PD m256/m64bcst, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTQQ2PD xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTQQ2PD ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VCVTQQ2PD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTQQ2PD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTQQ2PD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTQQ2PD takes 2 or 3 operands") + } + // VCVTQQ2PD m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTQQ2PD {er}, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTQQ2PD zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTQQ2PD m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTQQ2PD m256/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTQQ2PD xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTQQ2PD ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTQQ2PD") + } + return p +} + +// VCVTQQ2PS performs "Convert Packed Quadword Integers to Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VCVTQQ2PS +// Supported forms : (7 forms) +// +// * VCVTQQ2PS m512/m64bcst, ymm{k}{z} [AVX512DQ] +// * VCVTQQ2PS {er}, zmm, ymm{k}{z} [AVX512DQ] +// * VCVTQQ2PS zmm, ymm{k}{z} [AVX512DQ] +// * VCVTQQ2PS m128/m64bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTQQ2PS m256/m64bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTQQ2PS xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTQQ2PS ymm, xmm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VCVTQQ2PS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTQQ2PS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTQQ2PS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTQQ2PS takes 2 or 3 operands") + } + // VCVTQQ2PS m512/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x84, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTQQ2PS {er}, zmm, ymm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isYMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfc) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTQQ2PS zmm, ymm{k}{z} + if len(vv) == 0 && isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfc) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTQQ2PS m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x84, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTQQ2PS m256/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x84, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTQQ2PS xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfc) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTQQ2PS ymm, xmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfc) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTQQ2PS") + } + return p +} + +// VCVTSD2SI performs "Convert Scalar Double-Precision FP Value to Integer". +// +// Mnemonic : VCVTSD2SI +// Supported forms : (10 forms) +// +// * VCVTSD2SI xmm, r32 [AVX] +// * VCVTSD2SI m64, r32 [AVX] +// * VCVTSD2SI xmm, r64 [AVX] +// * VCVTSD2SI m64, r64 [AVX] +// * VCVTSD2SI m64, r32 [AVX512F] +// * VCVTSD2SI m64, r64 [AVX512F] +// * VCVTSD2SI {er}, xmm, r32 [AVX512F] +// * VCVTSD2SI {er}, xmm, r64 [AVX512F] +// * VCVTSD2SI xmm, r32 [AVX512F] +// * VCVTSD2SI xmm, r64 [AVX512F] +// +func (self *Program) VCVTSD2SI(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTSD2SI", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTSD2SI", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTSD2SI takes 2 or 3 operands") + } + // VCVTSD2SI xmm, r32 + if len(vv) == 0 && isXMM(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[1]), v[0], 0) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTSD2SI m64, r32 + if len(vv) == 0 && isM64(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTSD2SI xmm, r64 + if len(vv) == 0 && isXMM(v0) && isReg64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfb) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTSD2SI m64, r64 + if len(vv) == 0 && isM64(v0) && isReg64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b1, 0x83, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTSD2SI m64, r32 + if len(vv) == 0 && isM64(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTSD2SI m64, r64 + if len(vv) == 0 && isM64(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTSD2SI {er}, xmm, r32 + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isReg32(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7f) + m.emit((vcode(v[0]) << 5) | 0x18) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTSD2SI {er}, xmm, r64 + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isReg64(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff) + m.emit((vcode(v[0]) << 5) | 0x18) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTSD2SI xmm, r32 + if len(vv) == 0 && isEVEXXMM(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7f) + m.emit(0x48) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTSD2SI xmm, r64 + if len(vv) == 0 && isEVEXXMM(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit(0x48) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTSD2SI") + } + return p +} + +// VCVTSD2SS performs "Convert Scalar Double-Precision FP Value to Scalar Single-Precision FP Value". +// +// Mnemonic : VCVTSD2SS +// Supported forms : (5 forms) +// +// * VCVTSD2SS xmm, xmm, xmm [AVX] +// * VCVTSD2SS m64, xmm, xmm [AVX] +// * VCVTSD2SS m64, xmm, xmm{k}{z} [AVX512F] +// * VCVTSD2SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VCVTSD2SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VCVTSD2SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTSD2SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VCVTSD2SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VCVTSD2SS takes 3 or 4 operands") + } + // VCVTSD2SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VCVTSD2SS m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VCVTSD2SS m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x5a) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VCVTSD2SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xff ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VCVTSD2SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTSD2SS") + } + return p +} + +// VCVTSD2USI performs "Convert Scalar Double-Precision Floating-Point Value to Unsigned Doubleword Integer". +// +// Mnemonic : VCVTSD2USI +// Supported forms : (6 forms) +// +// * VCVTSD2USI m64, r32 [AVX512F] +// * VCVTSD2USI m64, r64 [AVX512F] +// * VCVTSD2USI {er}, xmm, r32 [AVX512F] +// * VCVTSD2USI {er}, xmm, r64 [AVX512F] +// * VCVTSD2USI xmm, r32 [AVX512F] +// * VCVTSD2USI xmm, r64 [AVX512F] +// +func (self *Program) VCVTSD2USI(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTSD2USI", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTSD2USI", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTSD2USI takes 2 or 3 operands") + } + // VCVTSD2USI m64, r32 + if len(vv) == 0 && isM64(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTSD2USI m64, r64 + if len(vv) == 0 && isM64(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTSD2USI {er}, xmm, r32 + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isReg32(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7f) + m.emit((vcode(v[0]) << 5) | 0x18) + m.emit(0x79) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTSD2USI {er}, xmm, r64 + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isReg64(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff) + m.emit((vcode(v[0]) << 5) | 0x18) + m.emit(0x79) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTSD2USI xmm, r32 + if len(vv) == 0 && isEVEXXMM(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7f) + m.emit(0x48) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTSD2USI xmm, r64 + if len(vv) == 0 && isEVEXXMM(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit(0x48) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTSD2USI") + } + return p +} + +// VCVTSI2SD performs "Convert Dword Integer to Scalar Double-Precision FP Value". +// +// Mnemonic : VCVTSI2SD +// Supported forms : (9 forms) +// +// * VCVTSI2SD r32, xmm, xmm [AVX] +// * VCVTSI2SD r64, xmm, xmm [AVX] +// * VCVTSI2SD m32, xmm, xmm [AVX] +// * VCVTSI2SD m64, xmm, xmm [AVX] +// * VCVTSI2SD r32, xmm, xmm [AVX512F] +// * VCVTSI2SD m32, xmm, xmm [AVX512F] +// * VCVTSI2SD m64, xmm, xmm [AVX512F] +// * VCVTSI2SD {er}, r64, xmm, xmm [AVX512F] +// * VCVTSI2SD r64, xmm, xmm [AVX512F] +// +func (self *Program) VCVTSI2SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTSI2SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VCVTSI2SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VCVTSI2SD takes 3 or 4 operands") + } + // VCVTSI2SD r32, xmm, xmm + if len(vv) == 0 && isReg32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VCVTSI2SD r64, xmm, xmm + if len(vv) == 0 && isReg64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfb ^ (hlcode(v[1]) << 3)) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VCVTSI2SD m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x2a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VCVTSI2SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b1, 0x83, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x2a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VCVTSI2SD r32, xmm, xmm + if len(vv) == 0 && isReg32(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7f ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x00) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VCVTSI2SD m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0x2a) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VCVTSI2SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0x2a) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VCVTSI2SD {er}, r64, xmm, xmm + if len(vv) == 1 && isER(v0) && isReg64(v1) && isEVEXXMM(v2) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xff ^ (hlcode(v[2]) << 3)) + m.emit((vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | 0x10) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VCVTSI2SD r64, xmm, xmm + if len(vv) == 0 && isReg64(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x40) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTSI2SD") + } + return p +} + +// VCVTSI2SS performs "Convert Dword Integer to Scalar Single-Precision FP Value". +// +// Mnemonic : VCVTSI2SS +// Supported forms : (10 forms) +// +// * VCVTSI2SS r32, xmm, xmm [AVX] +// * VCVTSI2SS r64, xmm, xmm [AVX] +// * VCVTSI2SS m32, xmm, xmm [AVX] +// * VCVTSI2SS m64, xmm, xmm [AVX] +// * VCVTSI2SS m32, xmm, xmm [AVX512F] +// * VCVTSI2SS m64, xmm, xmm [AVX512F] +// * VCVTSI2SS {er}, r32, xmm, xmm [AVX512F] +// * VCVTSI2SS {er}, r64, xmm, xmm [AVX512F] +// * VCVTSI2SS r32, xmm, xmm [AVX512F] +// * VCVTSI2SS r64, xmm, xmm [AVX512F] +// +func (self *Program) VCVTSI2SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTSI2SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VCVTSI2SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VCVTSI2SS takes 3 or 4 operands") + } + // VCVTSI2SS r32, xmm, xmm + if len(vv) == 0 && isReg32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VCVTSI2SS r64, xmm, xmm + if len(vv) == 0 && isReg64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfa ^ (hlcode(v[1]) << 3)) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VCVTSI2SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x2a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VCVTSI2SS m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b1, 0x82, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x2a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VCVTSI2SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0x2a) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VCVTSI2SS m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0x2a) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VCVTSI2SS {er}, r32, xmm, xmm + if len(vv) == 1 && isER(v0) && isReg32(v1) && isEVEXXMM(v2) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7e ^ (hlcode(v[2]) << 3)) + m.emit((vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | 0x10) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VCVTSI2SS {er}, r64, xmm, xmm + if len(vv) == 1 && isER(v0) && isReg64(v1) && isEVEXXMM(v2) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfe ^ (hlcode(v[2]) << 3)) + m.emit((vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | 0x10) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VCVTSI2SS r32, xmm, xmm + if len(vv) == 0 && isReg32(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x40) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VCVTSI2SS r64, xmm, xmm + if len(vv) == 0 && isReg64(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x40) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTSI2SS") + } + return p +} + +// VCVTSS2SD performs "Convert Scalar Single-Precision FP Value to Scalar Double-Precision FP Value". +// +// Mnemonic : VCVTSS2SD +// Supported forms : (5 forms) +// +// * VCVTSS2SD xmm, xmm, xmm [AVX] +// * VCVTSS2SD m32, xmm, xmm [AVX] +// * VCVTSS2SD m32, xmm, xmm{k}{z} [AVX512F] +// * VCVTSS2SD {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VCVTSS2SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VCVTSS2SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTSS2SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VCVTSS2SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VCVTSS2SD takes 3 or 4 operands") + } + // VCVTSS2SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VCVTSS2SD m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VCVTSS2SD m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x5a) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VCVTSS2SD {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7e ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VCVTSS2SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTSS2SD") + } + return p +} + +// VCVTSS2SI performs "Convert Scalar Single-Precision FP Value to Dword Integer". +// +// Mnemonic : VCVTSS2SI +// Supported forms : (10 forms) +// +// * VCVTSS2SI xmm, r32 [AVX] +// * VCVTSS2SI m32, r32 [AVX] +// * VCVTSS2SI xmm, r64 [AVX] +// * VCVTSS2SI m32, r64 [AVX] +// * VCVTSS2SI m32, r32 [AVX512F] +// * VCVTSS2SI m32, r64 [AVX512F] +// * VCVTSS2SI {er}, xmm, r32 [AVX512F] +// * VCVTSS2SI {er}, xmm, r64 [AVX512F] +// * VCVTSS2SI xmm, r32 [AVX512F] +// * VCVTSS2SI xmm, r64 [AVX512F] +// +func (self *Program) VCVTSS2SI(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTSS2SI", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTSS2SI", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTSS2SI takes 2 or 3 operands") + } + // VCVTSS2SI xmm, r32 + if len(vv) == 0 && isXMM(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), v[0], 0) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTSS2SI m32, r32 + if len(vv) == 0 && isM32(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTSS2SI xmm, r64 + if len(vv) == 0 && isXMM(v0) && isReg64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfa) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTSS2SI m32, r64 + if len(vv) == 0 && isM32(v0) && isReg64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b1, 0x82, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTSS2SI m32, r32 + if len(vv) == 0 && isM32(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VCVTSS2SI m32, r64 + if len(vv) == 0 && isM32(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2d) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VCVTSS2SI {er}, xmm, r32 + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isReg32(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e) + m.emit((vcode(v[0]) << 5) | 0x18) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTSS2SI {er}, xmm, r64 + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isReg64(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe) + m.emit((vcode(v[0]) << 5) | 0x18) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTSS2SI xmm, r32 + if len(vv) == 0 && isEVEXXMM(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x48) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTSS2SI xmm, r64 + if len(vv) == 0 && isEVEXXMM(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x48) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTSS2SI") + } + return p +} + +// VCVTSS2USI performs "Convert Scalar Single-Precision Floating-Point Value to Unsigned Doubleword Integer". +// +// Mnemonic : VCVTSS2USI +// Supported forms : (6 forms) +// +// * VCVTSS2USI m32, r32 [AVX512F] +// * VCVTSS2USI m32, r64 [AVX512F] +// * VCVTSS2USI {er}, xmm, r32 [AVX512F] +// * VCVTSS2USI {er}, xmm, r64 [AVX512F] +// * VCVTSS2USI xmm, r32 [AVX512F] +// * VCVTSS2USI xmm, r64 [AVX512F] +// +func (self *Program) VCVTSS2USI(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTSS2USI", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTSS2USI", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTSS2USI takes 2 or 3 operands") + } + // VCVTSS2USI m32, r32 + if len(vv) == 0 && isM32(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VCVTSS2USI m32, r64 + if len(vv) == 0 && isM32(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VCVTSS2USI {er}, xmm, r32 + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isReg32(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e) + m.emit((vcode(v[0]) << 5) | 0x18) + m.emit(0x79) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTSS2USI {er}, xmm, r64 + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isReg64(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe) + m.emit((vcode(v[0]) << 5) | 0x18) + m.emit(0x79) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTSS2USI xmm, r32 + if len(vv) == 0 && isEVEXXMM(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x48) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTSS2USI xmm, r64 + if len(vv) == 0 && isEVEXXMM(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x48) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTSS2USI") + } + return p +} + +// VCVTTPD2DQ performs "Convert with Truncation Packed Double-Precision FP Values to Packed Dword Integers". +// +// Mnemonic : VCVTTPD2DQ +// Supported forms : (11 forms) +// +// * VCVTTPD2DQ xmm, xmm [AVX] +// * VCVTTPD2DQ ymm, xmm [AVX] +// * VCVTTPD2DQ m128, xmm [AVX] +// * VCVTTPD2DQ m256, xmm [AVX] +// * VCVTTPD2DQ m512/m64bcst, ymm{k}{z} [AVX512F] +// * VCVTTPD2DQ {sae}, zmm, ymm{k}{z} [AVX512F] +// * VCVTTPD2DQ zmm, ymm{k}{z} [AVX512F] +// * VCVTTPD2DQ m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTTPD2DQ m256/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTTPD2DQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTTPD2DQ ymm, xmm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTTPD2DQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTTPD2DQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTTPD2DQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTTPD2DQ takes 2 or 3 operands") + } + // VCVTTPD2DQ xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPD2DQ ymm, xmm + if len(vv) == 0 && isYMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), v[0], 0) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPD2DQ m128, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), addr(v[0]), 0) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTTPD2DQ m256, xmm + if len(vv) == 0 && isM256(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), addr(v[0]), 0) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTTPD2DQ m512/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTTPD2DQ {sae}, zmm, ymm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isYMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTPD2DQ zmm, ymm{k}{z} + if len(vv) == 0 && isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPD2DQ m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTTPD2DQ m256/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xe6) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTTPD2DQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPD2DQ ymm, xmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0xe6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTTPD2DQ") + } + return p +} + +// VCVTTPD2QQ performs "Convert with Truncation Packed Double-Precision Floating-Point Values to Packed Quadword Integers". +// +// Mnemonic : VCVTTPD2QQ +// Supported forms : (7 forms) +// +// * VCVTTPD2QQ m512/m64bcst, zmm{k}{z} [AVX512DQ] +// * VCVTTPD2QQ {sae}, zmm, zmm{k}{z} [AVX512DQ] +// * VCVTTPD2QQ zmm, zmm{k}{z} [AVX512DQ] +// * VCVTTPD2QQ m128/m64bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTTPD2QQ m256/m64bcst, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTTPD2QQ xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTTPD2QQ ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VCVTTPD2QQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTTPD2QQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTTPD2QQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTTPD2QQ takes 2 or 3 operands") + } + // VCVTTPD2QQ m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTTPD2QQ {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTPD2QQ zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPD2QQ m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTTPD2QQ m256/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTTPD2QQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPD2QQ ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTTPD2QQ") + } + return p +} + +// VCVTTPD2UDQ performs "Convert with Truncation Packed Double-Precision Floating-Point Values to Packed Unsigned Doubleword Integers". +// +// Mnemonic : VCVTTPD2UDQ +// Supported forms : (7 forms) +// +// * VCVTTPD2UDQ m512/m64bcst, ymm{k}{z} [AVX512F] +// * VCVTTPD2UDQ {sae}, zmm, ymm{k}{z} [AVX512F] +// * VCVTTPD2UDQ zmm, ymm{k}{z} [AVX512F] +// * VCVTTPD2UDQ m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTTPD2UDQ m256/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTTPD2UDQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTTPD2UDQ ymm, xmm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTTPD2UDQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTTPD2UDQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTTPD2UDQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTTPD2UDQ takes 2 or 3 operands") + } + // VCVTTPD2UDQ m512/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x84, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTTPD2UDQ {sae}, zmm, ymm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isYMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfc) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0x78) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTPD2UDQ zmm, ymm{k}{z} + if len(vv) == 0 && isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfc) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPD2UDQ m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x84, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTTPD2UDQ m256/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x84, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTTPD2UDQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfc) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPD2UDQ ymm, xmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfc) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTTPD2UDQ") + } + return p +} + +// VCVTTPD2UQQ performs "Convert with Truncation Packed Double-Precision Floating-Point Values to Packed Unsigned Quadword Integers". +// +// Mnemonic : VCVTTPD2UQQ +// Supported forms : (7 forms) +// +// * VCVTTPD2UQQ m512/m64bcst, zmm{k}{z} [AVX512DQ] +// * VCVTTPD2UQQ {sae}, zmm, zmm{k}{z} [AVX512DQ] +// * VCVTTPD2UQQ zmm, zmm{k}{z} [AVX512DQ] +// * VCVTTPD2UQQ m128/m64bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTTPD2UQQ m256/m64bcst, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTTPD2UQQ xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTTPD2UQQ ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VCVTTPD2UQQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTTPD2UQQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTTPD2UQQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTTPD2UQQ takes 2 or 3 operands") + } + // VCVTTPD2UQQ m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTTPD2UQQ {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0x78) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTPD2UQQ zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPD2UQQ m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTTPD2UQQ m256/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTTPD2UQQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPD2UQQ ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTTPD2UQQ") + } + return p +} + +// VCVTTPS2DQ performs "Convert with Truncation Packed Single-Precision FP Values to Packed Dword Integers". +// +// Mnemonic : VCVTTPS2DQ +// Supported forms : (11 forms) +// +// * VCVTTPS2DQ xmm, xmm [AVX] +// * VCVTTPS2DQ m128, xmm [AVX] +// * VCVTTPS2DQ ymm, ymm [AVX] +// * VCVTTPS2DQ m256, ymm [AVX] +// * VCVTTPS2DQ m512/m32bcst, zmm{k}{z} [AVX512F] +// * VCVTTPS2DQ {sae}, zmm, zmm{k}{z} [AVX512F] +// * VCVTTPS2DQ zmm, zmm{k}{z} [AVX512F] +// * VCVTTPS2DQ m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTTPS2DQ m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VCVTTPS2DQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTTPS2DQ ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTTPS2DQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTTPS2DQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTTPS2DQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTTPS2DQ takes 2 or 3 operands") + } + // VCVTTPS2DQ xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), v[0], 0) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPS2DQ m128, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), addr(v[0]), 0) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTTPS2DQ ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[1]), v[0], 0) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPS2DQ m256, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[1]), addr(v[0]), 0) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTTPS2DQ m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTTPS2DQ {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTPS2DQ zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPS2DQ m128/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTTPS2DQ m256/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x5b) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTTPS2DQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPS2DQ ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x5b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTTPS2DQ") + } + return p +} + +// VCVTTPS2QQ performs "Convert with Truncation Packed Single Precision Floating-Point Values to Packed Singed Quadword Integer Values". +// +// Mnemonic : VCVTTPS2QQ +// Supported forms : (7 forms) +// +// * VCVTTPS2QQ m256/m32bcst, zmm{k}{z} [AVX512DQ] +// * VCVTTPS2QQ {sae}, ymm, zmm{k}{z} [AVX512DQ] +// * VCVTTPS2QQ ymm, zmm{k}{z} [AVX512DQ] +// * VCVTTPS2QQ m64/m32bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTTPS2QQ m128/m32bcst, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTTPS2QQ xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTTPS2QQ xmm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VCVTTPS2QQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTTPS2QQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTTPS2QQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTTPS2QQ takes 2 or 3 operands") + } + // VCVTTPS2QQ m256/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTTPS2QQ {sae}, ymm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXYMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTPS2QQ ymm, zmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPS2QQ m64/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM64M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTTPS2QQ m128/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTTPS2QQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPS2QQ xmm, ymm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTTPS2QQ") + } + return p +} + +// VCVTTPS2UDQ performs "Convert with Truncation Packed Single-Precision Floating-Point Values to Packed Unsigned Doubleword Integer Values". +// +// Mnemonic : VCVTTPS2UDQ +// Supported forms : (7 forms) +// +// * VCVTTPS2UDQ m512/m32bcst, zmm{k}{z} [AVX512F] +// * VCVTTPS2UDQ {sae}, zmm, zmm{k}{z} [AVX512F] +// * VCVTTPS2UDQ zmm, zmm{k}{z} [AVX512F] +// * VCVTTPS2UDQ m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTTPS2UDQ m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VCVTTPS2UDQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTTPS2UDQ ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTTPS2UDQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTTPS2UDQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTTPS2UDQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTTPS2UDQ takes 2 or 3 operands") + } + // VCVTTPS2UDQ m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTTPS2UDQ {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0x78) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTPS2UDQ zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPS2UDQ m128/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTTPS2UDQ m256/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTTPS2UDQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPS2UDQ ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTTPS2UDQ") + } + return p +} + +// VCVTTPS2UQQ performs "Convert with Truncation Packed Single Precision Floating-Point Values to Packed Unsigned Quadword Integer Values". +// +// Mnemonic : VCVTTPS2UQQ +// Supported forms : (7 forms) +// +// * VCVTTPS2UQQ m256/m32bcst, zmm{k}{z} [AVX512DQ] +// * VCVTTPS2UQQ {sae}, ymm, zmm{k}{z} [AVX512DQ] +// * VCVTTPS2UQQ ymm, zmm{k}{z} [AVX512DQ] +// * VCVTTPS2UQQ m64/m32bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTTPS2UQQ m128/m32bcst, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTTPS2UQQ xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTTPS2UQQ xmm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VCVTTPS2UQQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTTPS2UQQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTTPS2UQQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTTPS2UQQ takes 2 or 3 operands") + } + // VCVTTPS2UQQ m256/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTTPS2UQQ {sae}, ymm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXYMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0x78) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTPS2UQQ ymm, zmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPS2UQQ m64/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM64M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTTPS2UQQ m128/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTTPS2UQQ xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTPS2UQQ xmm, ymm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTTPS2UQQ") + } + return p +} + +// VCVTTSD2SI performs "Convert with Truncation Scalar Double-Precision FP Value to Signed Integer". +// +// Mnemonic : VCVTTSD2SI +// Supported forms : (10 forms) +// +// * VCVTTSD2SI xmm, r32 [AVX] +// * VCVTTSD2SI m64, r32 [AVX] +// * VCVTTSD2SI xmm, r64 [AVX] +// * VCVTTSD2SI m64, r64 [AVX] +// * VCVTTSD2SI m64, r32 [AVX512F] +// * VCVTTSD2SI m64, r64 [AVX512F] +// * VCVTTSD2SI {sae}, xmm, r32 [AVX512F] +// * VCVTTSD2SI {sae}, xmm, r64 [AVX512F] +// * VCVTTSD2SI xmm, r32 [AVX512F] +// * VCVTTSD2SI xmm, r64 [AVX512F] +// +func (self *Program) VCVTTSD2SI(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTTSD2SI", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTTSD2SI", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTTSD2SI takes 2 or 3 operands") + } + // VCVTTSD2SI xmm, r32 + if len(vv) == 0 && isXMM(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[1]), v[0], 0) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTSD2SI m64, r32 + if len(vv) == 0 && isM64(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTTSD2SI xmm, r64 + if len(vv) == 0 && isXMM(v0) && isReg64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfb) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTSD2SI m64, r64 + if len(vv) == 0 && isM64(v0) && isReg64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b1, 0x83, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTTSD2SI m64, r32 + if len(vv) == 0 && isM64(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTTSD2SI m64, r64 + if len(vv) == 0 && isM64(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTTSD2SI {sae}, xmm, r32 + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isReg32(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7f) + m.emit(0x18) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTSD2SI {sae}, xmm, r64 + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isReg64(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff) + m.emit(0x18) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTSD2SI xmm, r32 + if len(vv) == 0 && isEVEXXMM(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7f) + m.emit(0x48) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTSD2SI xmm, r64 + if len(vv) == 0 && isEVEXXMM(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit(0x48) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTTSD2SI") + } + return p +} + +// VCVTTSD2USI performs "Convert with Truncation Scalar Double-Precision Floating-Point Value to Unsigned Integer". +// +// Mnemonic : VCVTTSD2USI +// Supported forms : (6 forms) +// +// * VCVTTSD2USI m64, r32 [AVX512F] +// * VCVTTSD2USI m64, r64 [AVX512F] +// * VCVTTSD2USI {sae}, xmm, r32 [AVX512F] +// * VCVTTSD2USI {sae}, xmm, r64 [AVX512F] +// * VCVTTSD2USI xmm, r32 [AVX512F] +// * VCVTTSD2USI xmm, r64 [AVX512F] +// +func (self *Program) VCVTTSD2USI(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTTSD2USI", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTTSD2USI", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTTSD2USI takes 2 or 3 operands") + } + // VCVTTSD2USI m64, r32 + if len(vv) == 0 && isM64(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTTSD2USI m64, r64 + if len(vv) == 0 && isM64(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTTSD2USI {sae}, xmm, r32 + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isReg32(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7f) + m.emit(0x18) + m.emit(0x78) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTSD2USI {sae}, xmm, r64 + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isReg64(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff) + m.emit(0x18) + m.emit(0x78) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTSD2USI xmm, r32 + if len(vv) == 0 && isEVEXXMM(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7f) + m.emit(0x48) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTSD2USI xmm, r64 + if len(vv) == 0 && isEVEXXMM(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit(0x48) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTTSD2USI") + } + return p +} + +// VCVTTSS2SI performs "Convert with Truncation Scalar Single-Precision FP Value to Dword Integer". +// +// Mnemonic : VCVTTSS2SI +// Supported forms : (10 forms) +// +// * VCVTTSS2SI xmm, r32 [AVX] +// * VCVTTSS2SI m32, r32 [AVX] +// * VCVTTSS2SI xmm, r64 [AVX] +// * VCVTTSS2SI m32, r64 [AVX] +// * VCVTTSS2SI m32, r32 [AVX512F] +// * VCVTTSS2SI m32, r64 [AVX512F] +// * VCVTTSS2SI {sae}, xmm, r32 [AVX512F] +// * VCVTTSS2SI {sae}, xmm, r64 [AVX512F] +// * VCVTTSS2SI xmm, r32 [AVX512F] +// * VCVTTSS2SI xmm, r64 [AVX512F] +// +func (self *Program) VCVTTSS2SI(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTTSS2SI", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTTSS2SI", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTTSS2SI takes 2 or 3 operands") + } + // VCVTTSS2SI xmm, r32 + if len(vv) == 0 && isXMM(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), v[0], 0) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTSS2SI m32, r32 + if len(vv) == 0 && isM32(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTTSS2SI xmm, r64 + if len(vv) == 0 && isXMM(v0) && isReg64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfa) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTSS2SI m32, r64 + if len(vv) == 0 && isM32(v0) && isReg64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b1, 0x82, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VCVTTSS2SI m32, r32 + if len(vv) == 0 && isM32(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VCVTTSS2SI m32, r64 + if len(vv) == 0 && isM32(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2c) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VCVTTSS2SI {sae}, xmm, r32 + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isReg32(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e) + m.emit(0x18) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTSS2SI {sae}, xmm, r64 + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isReg64(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe) + m.emit(0x18) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTSS2SI xmm, r32 + if len(vv) == 0 && isEVEXXMM(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x48) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTSS2SI xmm, r64 + if len(vv) == 0 && isEVEXXMM(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x48) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTTSS2SI") + } + return p +} + +// VCVTTSS2USI performs "Convert with Truncation Scalar Single-Precision Floating-Point Value to Unsigned Integer". +// +// Mnemonic : VCVTTSS2USI +// Supported forms : (6 forms) +// +// * VCVTTSS2USI m32, r32 [AVX512F] +// * VCVTTSS2USI m32, r64 [AVX512F] +// * VCVTTSS2USI {sae}, xmm, r32 [AVX512F] +// * VCVTTSS2USI {sae}, xmm, r64 [AVX512F] +// * VCVTTSS2USI xmm, r32 [AVX512F] +// * VCVTTSS2USI xmm, r64 [AVX512F] +// +func (self *Program) VCVTTSS2USI(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTTSS2USI", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTTSS2USI", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTTSS2USI takes 2 or 3 operands") + } + // VCVTTSS2USI m32, r32 + if len(vv) == 0 && isM32(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VCVTTSS2USI m32, r64 + if len(vv) == 0 && isM32(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VCVTTSS2USI {sae}, xmm, r32 + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isReg32(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e) + m.emit(0x18) + m.emit(0x78) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTSS2USI {sae}, xmm, r64 + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isReg64(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe) + m.emit(0x18) + m.emit(0x78) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTTSS2USI xmm, r32 + if len(vv) == 0 && isEVEXXMM(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x48) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTTSS2USI xmm, r64 + if len(vv) == 0 && isEVEXXMM(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x48) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTTSS2USI") + } + return p +} + +// VCVTUDQ2PD performs "Convert Packed Unsigned Doubleword Integers to Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VCVTUDQ2PD +// Supported forms : (6 forms) +// +// * VCVTUDQ2PD m256/m32bcst, zmm{k}{z} [AVX512F] +// * VCVTUDQ2PD ymm, zmm{k}{z} [AVX512F] +// * VCVTUDQ2PD m64/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTUDQ2PD m128/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VCVTUDQ2PD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTUDQ2PD xmm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTUDQ2PD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VCVTUDQ2PD", 2, Operands { v0, v1 }) + // VCVTUDQ2PD m256/m32bcst, zmm{k}{z} + if isM256M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTUDQ2PD ymm, zmm{k}{z} + if isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTUDQ2PD m64/m32bcst, xmm{k}{z} + if isM64M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VCVTUDQ2PD m128/m32bcst, ymm{k}{z} + if isM128M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTUDQ2PD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTUDQ2PD xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTUDQ2PD") + } + return p +} + +// VCVTUDQ2PS performs "Convert Packed Unsigned Doubleword Integers to Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VCVTUDQ2PS +// Supported forms : (7 forms) +// +// * VCVTUDQ2PS m512/m32bcst, zmm{k}{z} [AVX512F] +// * VCVTUDQ2PS {er}, zmm, zmm{k}{z} [AVX512F] +// * VCVTUDQ2PS zmm, zmm{k}{z} [AVX512F] +// * VCVTUDQ2PS m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTUDQ2PS m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VCVTUDQ2PS xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VCVTUDQ2PS ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VCVTUDQ2PS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTUDQ2PS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTUDQ2PS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTUDQ2PS takes 2 or 3 operands") + } + // VCVTUDQ2PS m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTUDQ2PS {er}, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTUDQ2PS zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTUDQ2PS m128/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTUDQ2PS m256/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTUDQ2PS xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTUDQ2PS ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTUDQ2PS") + } + return p +} + +// VCVTUQQ2PD performs "Convert Packed Unsigned Quadword Integers to Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VCVTUQQ2PD +// Supported forms : (7 forms) +// +// * VCVTUQQ2PD m512/m64bcst, zmm{k}{z} [AVX512DQ] +// * VCVTUQQ2PD {er}, zmm, zmm{k}{z} [AVX512DQ] +// * VCVTUQQ2PD zmm, zmm{k}{z} [AVX512DQ] +// * VCVTUQQ2PD m128/m64bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTUQQ2PD m256/m64bcst, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTUQQ2PD xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTUQQ2PD ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VCVTUQQ2PD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTUQQ2PD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTUQQ2PD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTUQQ2PD takes 2 or 3 operands") + } + // VCVTUQQ2PD m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTUQQ2PD {er}, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTUQQ2PD zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTUQQ2PD m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTUQQ2PD m256/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTUQQ2PD xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTUQQ2PD ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTUQQ2PD") + } + return p +} + +// VCVTUQQ2PS performs "Convert Packed Unsigned Quadword Integers to Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VCVTUQQ2PS +// Supported forms : (7 forms) +// +// * VCVTUQQ2PS m512/m64bcst, ymm{k}{z} [AVX512DQ] +// * VCVTUQQ2PS {er}, zmm, ymm{k}{z} [AVX512DQ] +// * VCVTUQQ2PS zmm, ymm{k}{z} [AVX512DQ] +// * VCVTUQQ2PS m128/m64bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTUQQ2PS m256/m64bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTUQQ2PS xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VCVTUQQ2PS ymm, xmm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VCVTUQQ2PS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTUQQ2PS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VCVTUQQ2PS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VCVTUQQ2PS takes 2 or 3 operands") + } + // VCVTUQQ2PS m512/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VCVTUQQ2PS {er}, zmm, ymm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isYMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VCVTUQQ2PS zmm, ymm{k}{z} + if len(vv) == 0 && isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTUQQ2PS m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VCVTUQQ2PS m256/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x7a) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VCVTUQQ2PS xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VCVTUQQ2PS ymm, xmm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTUQQ2PS") + } + return p +} + +// VCVTUSI2SD performs "Convert Unsigned Integer to Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : VCVTUSI2SD +// Supported forms : (5 forms) +// +// * VCVTUSI2SD r32, xmm, xmm [AVX512F] +// * VCVTUSI2SD m32, xmm, xmm [AVX512F] +// * VCVTUSI2SD m64, xmm, xmm [AVX512F] +// * VCVTUSI2SD {er}, r64, xmm, xmm [AVX512F] +// * VCVTUSI2SD r64, xmm, xmm [AVX512F] +// +func (self *Program) VCVTUSI2SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTUSI2SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VCVTUSI2SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VCVTUSI2SD takes 3 or 4 operands") + } + // VCVTUSI2SD r32, xmm, xmm + if len(vv) == 0 && isReg32(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7f ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x00) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VCVTUSI2SD m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0x7b) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VCVTUSI2SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0x7b) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VCVTUSI2SD {er}, r64, xmm, xmm + if len(vv) == 1 && isER(v0) && isReg64(v1) && isEVEXXMM(v2) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xff ^ (hlcode(v[2]) << 3)) + m.emit((vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | 0x10) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VCVTUSI2SD r64, xmm, xmm + if len(vv) == 0 && isReg64(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x40) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTUSI2SD") + } + return p +} + +// VCVTUSI2SS performs "Convert Unsigned Integer to Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : VCVTUSI2SS +// Supported forms : (6 forms) +// +// * VCVTUSI2SS m32, xmm, xmm [AVX512F] +// * VCVTUSI2SS m64, xmm, xmm [AVX512F] +// * VCVTUSI2SS {er}, r32, xmm, xmm [AVX512F] +// * VCVTUSI2SS {er}, r64, xmm, xmm [AVX512F] +// * VCVTUSI2SS r32, xmm, xmm [AVX512F] +// * VCVTUSI2SS r64, xmm, xmm [AVX512F] +// +func (self *Program) VCVTUSI2SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VCVTUSI2SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VCVTUSI2SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VCVTUSI2SS takes 3 or 4 operands") + } + // VCVTUSI2SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0x7b) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VCVTUSI2SS m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0x7b) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VCVTUSI2SS {er}, r32, xmm, xmm + if len(vv) == 1 && isER(v0) && isReg32(v1) && isEVEXXMM(v2) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7e ^ (hlcode(v[2]) << 3)) + m.emit((vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | 0x10) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VCVTUSI2SS {er}, r64, xmm, xmm + if len(vv) == 1 && isER(v0) && isReg64(v1) && isEVEXXMM(v2) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfe ^ (hlcode(v[2]) << 3)) + m.emit((vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | 0x10) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VCVTUSI2SS r32, xmm, xmm + if len(vv) == 0 && isReg32(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x40) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VCVTUSI2SS r64, xmm, xmm + if len(vv) == 0 && isReg64(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x40) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VCVTUSI2SS") + } + return p +} + +// VDBPSADBW performs "Double Block Packed Sum-Absolute-Differences on Unsigned Bytes". +// +// Mnemonic : VDBPSADBW +// Supported forms : (6 forms) +// +// * VDBPSADBW imm8, zmm, zmm, zmm{k}{z} [AVX512BW] +// * VDBPSADBW imm8, m512, zmm, zmm{k}{z} [AVX512BW] +// * VDBPSADBW imm8, xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VDBPSADBW imm8, m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VDBPSADBW imm8, ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VDBPSADBW imm8, m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VDBPSADBW(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VDBPSADBW", 4, Operands { v0, v1, v2, v3 }) + // VDBPSADBW imm8, zmm, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x42) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VDBPSADBW imm8, m512, zmm, zmm{k}{z} + if isImm8(v0) && isM512(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x42) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VDBPSADBW imm8, xmm, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x42) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VDBPSADBW imm8, m128, xmm, xmm{k}{z} + if isImm8(v0) && isM128(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x42) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VDBPSADBW imm8, ymm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x42) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VDBPSADBW imm8, m256, ymm, ymm{k}{z} + if isImm8(v0) && isM256(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x42) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VDBPSADBW") + } + return p +} + +// VDIVPD performs "Divide Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VDIVPD +// Supported forms : (11 forms) +// +// * VDIVPD xmm, xmm, xmm [AVX] +// * VDIVPD m128, xmm, xmm [AVX] +// * VDIVPD ymm, ymm, ymm [AVX] +// * VDIVPD m256, ymm, ymm [AVX] +// * VDIVPD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VDIVPD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VDIVPD zmm, zmm, zmm{k}{z} [AVX512F] +// * VDIVPD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VDIVPD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VDIVPD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VDIVPD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VDIVPD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VDIVPD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VDIVPD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VDIVPD takes 3 or 4 operands") + } + // VDIVPD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VDIVPD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VDIVPD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VDIVPD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VDIVPD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VDIVPD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VDIVPD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VDIVPD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VDIVPD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VDIVPD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VDIVPD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VDIVPD") + } + return p +} + +// VDIVPS performs "Divide Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VDIVPS +// Supported forms : (11 forms) +// +// * VDIVPS xmm, xmm, xmm [AVX] +// * VDIVPS m128, xmm, xmm [AVX] +// * VDIVPS ymm, ymm, ymm [AVX] +// * VDIVPS m256, ymm, ymm [AVX] +// * VDIVPS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VDIVPS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VDIVPS zmm, zmm, zmm{k}{z} [AVX512F] +// * VDIVPS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VDIVPS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VDIVPS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VDIVPS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VDIVPS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VDIVPS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VDIVPS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VDIVPS takes 3 or 4 operands") + } + // VDIVPS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VDIVPS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VDIVPS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VDIVPS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VDIVPS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VDIVPS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VDIVPS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VDIVPS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VDIVPS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VDIVPS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VDIVPS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VDIVPS") + } + return p +} + +// VDIVSD performs "Divide Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VDIVSD +// Supported forms : (5 forms) +// +// * VDIVSD xmm, xmm, xmm [AVX] +// * VDIVSD m64, xmm, xmm [AVX] +// * VDIVSD m64, xmm, xmm{k}{z} [AVX512F] +// * VDIVSD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VDIVSD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VDIVSD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VDIVSD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VDIVSD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VDIVSD takes 3 or 4 operands") + } + // VDIVSD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VDIVSD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VDIVSD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VDIVSD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xff ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VDIVSD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VDIVSD") + } + return p +} + +// VDIVSS performs "Divide Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VDIVSS +// Supported forms : (5 forms) +// +// * VDIVSS xmm, xmm, xmm [AVX] +// * VDIVSS m32, xmm, xmm [AVX] +// * VDIVSS m32, xmm, xmm{k}{z} [AVX512F] +// * VDIVSS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VDIVSS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VDIVSS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VDIVSS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VDIVSS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VDIVSS takes 3 or 4 operands") + } + // VDIVSS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VDIVSS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VDIVSS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x5e) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VDIVSS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7e ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VDIVSS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VDIVSS") + } + return p +} + +// VDPPD performs "Dot Product of Packed Double Precision Floating-Point Values". +// +// Mnemonic : VDPPD +// Supported forms : (2 forms) +// +// * VDPPD imm8, xmm, xmm, xmm [AVX] +// * VDPPD imm8, m128, xmm, xmm [AVX] +// +func (self *Program) VDPPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VDPPD", 4, Operands { v0, v1, v2, v3 }) + // VDPPD imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x41) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VDPPD imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x41) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VDPPD") + } + return p +} + +// VDPPS performs "Dot Product of Packed Single Precision Floating-Point Values". +// +// Mnemonic : VDPPS +// Supported forms : (4 forms) +// +// * VDPPS imm8, xmm, xmm, xmm [AVX] +// * VDPPS imm8, m128, xmm, xmm [AVX] +// * VDPPS imm8, ymm, ymm, ymm [AVX] +// * VDPPS imm8, m256, ymm, ymm [AVX] +// +func (self *Program) VDPPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VDPPS", 4, Operands { v0, v1, v2, v3 }) + // VDPPS imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x40) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VDPPS imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x40) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VDPPS imm8, ymm, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x40) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VDPPS imm8, m256, ymm, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x40) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VDPPS") + } + return p +} + +// VEXP2PD performs "Approximation to the Exponential 2^x of Packed Double-Precision Floating-Point Values with Less Than 2^-23 Relative Error". +// +// Mnemonic : VEXP2PD +// Supported forms : (3 forms) +// +// * VEXP2PD m512/m64bcst, zmm{k}{z} [AVX512ER] +// * VEXP2PD {sae}, zmm, zmm{k}{z} [AVX512ER] +// * VEXP2PD zmm, zmm{k}{z} [AVX512ER] +// +func (self *Program) VEXP2PD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VEXP2PD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VEXP2PD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VEXP2PD takes 2 or 3 operands") + } + // VEXP2PD m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xc8) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VEXP2PD {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0xc8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VEXP2PD zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0xc8) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXP2PD") + } + return p +} + +// VEXP2PS performs "Approximation to the Exponential 2^x of Packed Single-Precision Floating-Point Values with Less Than 2^-23 Relative Error". +// +// Mnemonic : VEXP2PS +// Supported forms : (3 forms) +// +// * VEXP2PS m512/m32bcst, zmm{k}{z} [AVX512ER] +// * VEXP2PS {sae}, zmm, zmm{k}{z} [AVX512ER] +// * VEXP2PS zmm, zmm{k}{z} [AVX512ER] +// +func (self *Program) VEXP2PS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VEXP2PS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VEXP2PS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VEXP2PS takes 2 or 3 operands") + } + // VEXP2PS m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xc8) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VEXP2PS {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0xc8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VEXP2PS zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0xc8) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXP2PS") + } + return p +} + +// VEXPANDPD performs "Load Sparse Packed Double-Precision Floating-Point Values from Dense Memory". +// +// Mnemonic : VEXPANDPD +// Supported forms : (6 forms) +// +// * VEXPANDPD zmm, zmm{k}{z} [AVX512F] +// * VEXPANDPD m512, zmm{k}{z} [AVX512F] +// * VEXPANDPD xmm, xmm{k}{z} [AVX512VL] +// * VEXPANDPD ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VEXPANDPD m128, xmm{k}{z} [AVX512VL] +// * VEXPANDPD m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VEXPANDPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VEXPANDPD", 2, Operands { v0, v1 }) + // VEXPANDPD zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x88) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VEXPANDPD m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x88) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VEXPANDPD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x88) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VEXPANDPD ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x88) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VEXPANDPD m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x88) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VEXPANDPD m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x88) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VEXPANDPD") + } + return p +} + +// VEXPANDPS performs "Load Sparse Packed Single-Precision Floating-Point Values from Dense Memory". +// +// Mnemonic : VEXPANDPS +// Supported forms : (6 forms) +// +// * VEXPANDPS zmm, zmm{k}{z} [AVX512F] +// * VEXPANDPS m512, zmm{k}{z} [AVX512F] +// * VEXPANDPS xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VEXPANDPS ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VEXPANDPS m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VEXPANDPS m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VEXPANDPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VEXPANDPS", 2, Operands { v0, v1 }) + // VEXPANDPS zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x88) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VEXPANDPS m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x88) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VEXPANDPS xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x88) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VEXPANDPS ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x88) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VEXPANDPS m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x88) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VEXPANDPS m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x88) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VEXPANDPS") + } + return p +} + +// VEXTRACTF128 performs "Extract Packed Floating-Point Values". +// +// Mnemonic : VEXTRACTF128 +// Supported forms : (2 forms) +// +// * VEXTRACTF128 imm8, ymm, xmm [AVX] +// * VEXTRACTF128 imm8, ymm, m128 [AVX] +// +func (self *Program) VEXTRACTF128(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VEXTRACTF128", 3, Operands { v0, v1, v2 }) + // VEXTRACTF128 imm8, ymm, xmm + if isImm8(v0) && isYMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[1]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0x7d) + m.emit(0x19) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTF128 imm8, ymm, m128 + if isImm8(v0) && isYMM(v1) && isM128(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[1]), addr(v[2]), 0) + m.emit(0x19) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXTRACTF128") + } + return p +} + +// VEXTRACTF32X4 performs "Extract 128 Bits of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VEXTRACTF32X4 +// Supported forms : (4 forms) +// +// * VEXTRACTF32X4 imm8, zmm, xmm{k}{z} [AVX512F] +// * VEXTRACTF32X4 imm8, zmm, m128{k}{z} [AVX512F] +// * VEXTRACTF32X4 imm8, ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VEXTRACTF32X4 imm8, ymm, m128{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VEXTRACTF32X4(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VEXTRACTF32X4", 3, Operands { v0, v1, v2 }) + // VEXTRACTF32X4 imm8, zmm, xmm{k}{z} + if isImm8(v0) && isZMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x19) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTF32X4 imm8, zmm, m128{k}{z} + if isImm8(v0) && isZMM(v1) && isM128kz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x19) + m.mrsd(lcode(v[1]), addr(v[2]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTF32X4 imm8, ymm, xmm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x19) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTF32X4 imm8, ymm, m128{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isM128kz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x19) + m.mrsd(lcode(v[1]), addr(v[2]), 16) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXTRACTF32X4") + } + return p +} + +// VEXTRACTF32X8 performs "Extract 256 Bits of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VEXTRACTF32X8 +// Supported forms : (2 forms) +// +// * VEXTRACTF32X8 imm8, zmm, ymm{k}{z} [AVX512DQ] +// * VEXTRACTF32X8 imm8, zmm, m256{k}{z} [AVX512DQ] +// +func (self *Program) VEXTRACTF32X8(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VEXTRACTF32X8", 3, Operands { v0, v1, v2 }) + // VEXTRACTF32X8 imm8, zmm, ymm{k}{z} + if isImm8(v0) && isZMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x1b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTF32X8 imm8, zmm, m256{k}{z} + if isImm8(v0) && isZMM(v1) && isM256kz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x1b) + m.mrsd(lcode(v[1]), addr(v[2]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXTRACTF32X8") + } + return p +} + +// VEXTRACTF64X2 performs "Extract 128 Bits of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VEXTRACTF64X2 +// Supported forms : (4 forms) +// +// * VEXTRACTF64X2 imm8, zmm, xmm{k}{z} [AVX512DQ] +// * VEXTRACTF64X2 imm8, zmm, m128{k}{z} [AVX512DQ] +// * VEXTRACTF64X2 imm8, ymm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VEXTRACTF64X2 imm8, ymm, m128{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VEXTRACTF64X2(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VEXTRACTF64X2", 3, Operands { v0, v1, v2 }) + // VEXTRACTF64X2 imm8, zmm, xmm{k}{z} + if isImm8(v0) && isZMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x19) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTF64X2 imm8, zmm, m128{k}{z} + if isImm8(v0) && isZMM(v1) && isM128kz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x19) + m.mrsd(lcode(v[1]), addr(v[2]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTF64X2 imm8, ymm, xmm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x19) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTF64X2 imm8, ymm, m128{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isM128kz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x19) + m.mrsd(lcode(v[1]), addr(v[2]), 16) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXTRACTF64X2") + } + return p +} + +// VEXTRACTF64X4 performs "Extract 256 Bits of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VEXTRACTF64X4 +// Supported forms : (2 forms) +// +// * VEXTRACTF64X4 imm8, zmm, ymm{k}{z} [AVX512F] +// * VEXTRACTF64X4 imm8, zmm, m256{k}{z} [AVX512F] +// +func (self *Program) VEXTRACTF64X4(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VEXTRACTF64X4", 3, Operands { v0, v1, v2 }) + // VEXTRACTF64X4 imm8, zmm, ymm{k}{z} + if isImm8(v0) && isZMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x1b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTF64X4 imm8, zmm, m256{k}{z} + if isImm8(v0) && isZMM(v1) && isM256kz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x1b) + m.mrsd(lcode(v[1]), addr(v[2]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXTRACTF64X4") + } + return p +} + +// VEXTRACTI128 performs "Extract Packed Integer Values". +// +// Mnemonic : VEXTRACTI128 +// Supported forms : (2 forms) +// +// * VEXTRACTI128 imm8, ymm, xmm [AVX2] +// * VEXTRACTI128 imm8, ymm, m128 [AVX2] +// +func (self *Program) VEXTRACTI128(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VEXTRACTI128", 3, Operands { v0, v1, v2 }) + // VEXTRACTI128 imm8, ymm, xmm + if isImm8(v0) && isYMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[1]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0x7d) + m.emit(0x39) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTI128 imm8, ymm, m128 + if isImm8(v0) && isYMM(v1) && isM128(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[1]), addr(v[2]), 0) + m.emit(0x39) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXTRACTI128") + } + return p +} + +// VEXTRACTI32X4 performs "Extract 128 Bits of Packed Doubleword Integer Values". +// +// Mnemonic : VEXTRACTI32X4 +// Supported forms : (4 forms) +// +// * VEXTRACTI32X4 imm8, zmm, xmm{k}{z} [AVX512F] +// * VEXTRACTI32X4 imm8, zmm, m128{k}{z} [AVX512F] +// * VEXTRACTI32X4 imm8, ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VEXTRACTI32X4 imm8, ymm, m128{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VEXTRACTI32X4(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VEXTRACTI32X4", 3, Operands { v0, v1, v2 }) + // VEXTRACTI32X4 imm8, zmm, xmm{k}{z} + if isImm8(v0) && isZMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x39) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTI32X4 imm8, zmm, m128{k}{z} + if isImm8(v0) && isZMM(v1) && isM128kz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x39) + m.mrsd(lcode(v[1]), addr(v[2]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTI32X4 imm8, ymm, xmm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x39) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTI32X4 imm8, ymm, m128{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isM128kz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x39) + m.mrsd(lcode(v[1]), addr(v[2]), 16) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXTRACTI32X4") + } + return p +} + +// VEXTRACTI32X8 performs "Extract 256 Bits of Packed Doubleword Integer Values". +// +// Mnemonic : VEXTRACTI32X8 +// Supported forms : (2 forms) +// +// * VEXTRACTI32X8 imm8, zmm, ymm{k}{z} [AVX512DQ] +// * VEXTRACTI32X8 imm8, zmm, m256{k}{z} [AVX512DQ] +// +func (self *Program) VEXTRACTI32X8(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VEXTRACTI32X8", 3, Operands { v0, v1, v2 }) + // VEXTRACTI32X8 imm8, zmm, ymm{k}{z} + if isImm8(v0) && isZMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTI32X8 imm8, zmm, m256{k}{z} + if isImm8(v0) && isZMM(v1) && isM256kz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x3b) + m.mrsd(lcode(v[1]), addr(v[2]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXTRACTI32X8") + } + return p +} + +// VEXTRACTI64X2 performs "Extract 128 Bits of Packed Quadword Integer Values". +// +// Mnemonic : VEXTRACTI64X2 +// Supported forms : (4 forms) +// +// * VEXTRACTI64X2 imm8, zmm, xmm{k}{z} [AVX512DQ] +// * VEXTRACTI64X2 imm8, zmm, m128{k}{z} [AVX512DQ] +// * VEXTRACTI64X2 imm8, ymm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VEXTRACTI64X2 imm8, ymm, m128{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VEXTRACTI64X2(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VEXTRACTI64X2", 3, Operands { v0, v1, v2 }) + // VEXTRACTI64X2 imm8, zmm, xmm{k}{z} + if isImm8(v0) && isZMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x39) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTI64X2 imm8, zmm, m128{k}{z} + if isImm8(v0) && isZMM(v1) && isM128kz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x39) + m.mrsd(lcode(v[1]), addr(v[2]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTI64X2 imm8, ymm, xmm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x39) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTI64X2 imm8, ymm, m128{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isM128kz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x39) + m.mrsd(lcode(v[1]), addr(v[2]), 16) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXTRACTI64X2") + } + return p +} + +// VEXTRACTI64X4 performs "Extract 256 Bits of Packed Quadword Integer Values". +// +// Mnemonic : VEXTRACTI64X4 +// Supported forms : (2 forms) +// +// * VEXTRACTI64X4 imm8, zmm, ymm{k}{z} [AVX512F] +// * VEXTRACTI64X4 imm8, zmm, m256{k}{z} [AVX512F] +// +func (self *Program) VEXTRACTI64X4(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VEXTRACTI64X4", 3, Operands { v0, v1, v2 }) + // VEXTRACTI64X4 imm8, zmm, ymm{k}{z} + if isImm8(v0) && isZMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTI64X4 imm8, zmm, m256{k}{z} + if isImm8(v0) && isZMM(v1) && isM256kz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[1]), addr(v[2]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x3b) + m.mrsd(lcode(v[1]), addr(v[2]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXTRACTI64X4") + } + return p +} + +// VEXTRACTPS performs "Extract Packed Single Precision Floating-Point Value". +// +// Mnemonic : VEXTRACTPS +// Supported forms : (4 forms) +// +// * VEXTRACTPS imm8, xmm, r32 [AVX] +// * VEXTRACTPS imm8, xmm, m32 [AVX] +// * VEXTRACTPS imm8, xmm, r32 [AVX512F] +// * VEXTRACTPS imm8, xmm, m32 [AVX512F] +// +func (self *Program) VEXTRACTPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VEXTRACTPS", 3, Operands { v0, v1, v2 }) + // VEXTRACTPS imm8, xmm, r32 + if isImm8(v0) && isXMM(v1) && isReg32(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[1]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0x79) + m.emit(0x17) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTPS imm8, xmm, m32 + if isImm8(v0) && isXMM(v1) && isM32(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[1]), addr(v[2]), 0) + m.emit(0x17) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTPS imm8, xmm, r32 + if isImm8(v0) && isEVEXXMM(v1) && isReg32(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit(0x08) + m.emit(0x17) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VEXTRACTPS imm8, xmm, m32 + if isImm8(v0) && isEVEXXMM(v1) && isM32(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[1]), addr(v[2]), 0, 0, 0, 0) + m.emit(0x17) + m.mrsd(lcode(v[1]), addr(v[2]), 4) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VEXTRACTPS") + } + return p +} + +// VFIXUPIMMPD performs "Fix Up Special Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFIXUPIMMPD +// Supported forms : (7 forms) +// +// * VFIXUPIMMPD imm8, m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFIXUPIMMPD imm8, {sae}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFIXUPIMMPD imm8, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFIXUPIMMPD imm8, m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFIXUPIMMPD imm8, xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFIXUPIMMPD imm8, m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFIXUPIMMPD imm8, ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFIXUPIMMPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFIXUPIMMPD", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VFIXUPIMMPD", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VFIXUPIMMPD takes 4 or 5 operands") + } + // VFIXUPIMMPD imm8, m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM512M64bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x54) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMPD imm8, {sae}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isZMM(v2) && isZMM(v3) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0xfd ^ (hlcode(v[3]) << 3)) + m.emit((zcode(v[4]) << 7) | (0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0x54) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMPD imm8, zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x54) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMPD imm8, m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM128M64bcst(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x54) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMPD imm8, xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x54) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMPD imm8, m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM256M64bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x54) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMPD imm8, ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x54) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFIXUPIMMPD") + } + return p +} + +// VFIXUPIMMPS performs "Fix Up Special Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFIXUPIMMPS +// Supported forms : (7 forms) +// +// * VFIXUPIMMPS imm8, m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFIXUPIMMPS imm8, {sae}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFIXUPIMMPS imm8, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFIXUPIMMPS imm8, m128/m32bcst, xmm, xmm{k}{z} [AVX512VL] +// * VFIXUPIMMPS imm8, xmm, xmm, xmm{k}{z} [AVX512VL] +// * VFIXUPIMMPS imm8, m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFIXUPIMMPS imm8, ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFIXUPIMMPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFIXUPIMMPS", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VFIXUPIMMPS", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VFIXUPIMMPS takes 4 or 5 operands") + } + // VFIXUPIMMPS imm8, m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM512M32bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x54) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMPS imm8, {sae}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isZMM(v2) && isZMM(v3) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0x7d ^ (hlcode(v[3]) << 3)) + m.emit((zcode(v[4]) << 7) | (0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0x54) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMPS imm8, zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x54) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMPS imm8, m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM128M32bcst(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x54) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMPS imm8, xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x54) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMPS imm8, m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM256M32bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x54) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMPS imm8, ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x54) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFIXUPIMMPS") + } + return p +} + +// VFIXUPIMMSD performs "Fix Up Special Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : VFIXUPIMMSD +// Supported forms : (3 forms) +// +// * VFIXUPIMMSD imm8, m64, xmm, xmm{k}{z} [AVX512F] +// * VFIXUPIMMSD imm8, {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFIXUPIMMSD imm8, xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFIXUPIMMSD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFIXUPIMMSD", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VFIXUPIMMSD", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VFIXUPIMMSD takes 4 or 5 operands") + } + // VFIXUPIMMSD imm8, m64, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM64(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x55) + m.mrsd(lcode(v[3]), addr(v[1]), 8) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMSD imm8, {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0xfd ^ (hlcode(v[3]) << 3)) + m.emit((zcode(v[4]) << 7) | (0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0x55) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMSD imm8, xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x55) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFIXUPIMMSD") + } + return p +} + +// VFIXUPIMMSS performs "Fix Up Special Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : VFIXUPIMMSS +// Supported forms : (3 forms) +// +// * VFIXUPIMMSS imm8, m32, xmm, xmm{k}{z} [AVX512F] +// * VFIXUPIMMSS imm8, {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFIXUPIMMSS imm8, xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFIXUPIMMSS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFIXUPIMMSS", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VFIXUPIMMSS", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VFIXUPIMMSS takes 4 or 5 operands") + } + // VFIXUPIMMSS imm8, m32, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM32(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x55) + m.mrsd(lcode(v[3]), addr(v[1]), 4) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMSS imm8, {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0x7d ^ (hlcode(v[3]) << 3)) + m.emit((zcode(v[4]) << 7) | (0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0x55) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VFIXUPIMMSS imm8, xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x55) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFIXUPIMMSS") + } + return p +} + +// VFMADD132PD performs "Fused Multiply-Add of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMADD132PD +// Supported forms : (11 forms) +// +// * VFMADD132PD xmm, xmm, xmm [FMA3] +// * VFMADD132PD m128, xmm, xmm [FMA3] +// * VFMADD132PD ymm, ymm, ymm [FMA3] +// * VFMADD132PD m256, ymm, ymm [FMA3] +// * VFMADD132PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMADD132PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADD132PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADD132PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADD132PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADD132PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMADD132PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMADD132PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADD132PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADD132PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADD132PD takes 3 or 4 operands") + } + // VFMADD132PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0x98) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD132PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x98) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD132PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x98) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD132PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x98) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD132PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x98) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMADD132PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x98) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADD132PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x98) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD132PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x98) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMADD132PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x98) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD132PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x98) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMADD132PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x98) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADD132PD") + } + return p +} + +// VFMADD132PS performs "Fused Multiply-Add of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMADD132PS +// Supported forms : (11 forms) +// +// * VFMADD132PS xmm, xmm, xmm [FMA3] +// * VFMADD132PS m128, xmm, xmm [FMA3] +// * VFMADD132PS ymm, ymm, ymm [FMA3] +// * VFMADD132PS m256, ymm, ymm [FMA3] +// * VFMADD132PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMADD132PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADD132PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADD132PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADD132PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADD132PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMADD132PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMADD132PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADD132PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADD132PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADD132PS takes 3 or 4 operands") + } + // VFMADD132PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x98) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD132PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x98) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD132PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x98) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD132PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x98) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD132PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x98) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMADD132PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x98) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADD132PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x98) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD132PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x98) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMADD132PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x98) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD132PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x98) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMADD132PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x98) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADD132PS") + } + return p +} + +// VFMADD132SD performs "Fused Multiply-Add of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFMADD132SD +// Supported forms : (5 forms) +// +// * VFMADD132SD xmm, xmm, xmm [FMA3] +// * VFMADD132SD m64, xmm, xmm [FMA3] +// * VFMADD132SD m64, xmm, xmm{k}{z} [AVX512F] +// * VFMADD132SD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFMADD132SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFMADD132SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADD132SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADD132SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADD132SD takes 3 or 4 operands") + } + // VFMADD132SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0x99) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD132SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x99) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD132SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x99) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VFMADD132SD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x99) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADD132SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x99) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADD132SD") + } + return p +} + +// VFMADD132SS performs "Fused Multiply-Add of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFMADD132SS +// Supported forms : (5 forms) +// +// * VFMADD132SS xmm, xmm, xmm [FMA3] +// * VFMADD132SS m32, xmm, xmm [FMA3] +// * VFMADD132SS m32, xmm, xmm{k}{z} [AVX512F] +// * VFMADD132SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFMADD132SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFMADD132SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADD132SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADD132SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADD132SS takes 3 or 4 operands") + } + // VFMADD132SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x99) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD132SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x99) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD132SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x99) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VFMADD132SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x99) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADD132SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x99) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADD132SS") + } + return p +} + +// VFMADD213PD performs "Fused Multiply-Add of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMADD213PD +// Supported forms : (11 forms) +// +// * VFMADD213PD xmm, xmm, xmm [FMA3] +// * VFMADD213PD m128, xmm, xmm [FMA3] +// * VFMADD213PD ymm, ymm, ymm [FMA3] +// * VFMADD213PD m256, ymm, ymm [FMA3] +// * VFMADD213PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMADD213PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADD213PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADD213PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADD213PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADD213PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMADD213PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMADD213PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADD213PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADD213PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADD213PD takes 3 or 4 operands") + } + // VFMADD213PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xa8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD213PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD213PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0xa8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD213PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD213PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa8) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMADD213PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xa8) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADD213PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xa8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD213PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa8) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMADD213PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xa8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD213PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa8) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMADD213PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xa8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADD213PD") + } + return p +} + +// VFMADD213PS performs "Fused Multiply-Add of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMADD213PS +// Supported forms : (11 forms) +// +// * VFMADD213PS xmm, xmm, xmm [FMA3] +// * VFMADD213PS m128, xmm, xmm [FMA3] +// * VFMADD213PS ymm, ymm, ymm [FMA3] +// * VFMADD213PS m256, ymm, ymm [FMA3] +// * VFMADD213PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMADD213PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADD213PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADD213PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADD213PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADD213PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMADD213PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMADD213PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADD213PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADD213PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADD213PS takes 3 or 4 operands") + } + // VFMADD213PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xa8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD213PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD213PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0xa8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD213PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD213PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa8) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMADD213PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xa8) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADD213PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xa8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD213PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa8) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMADD213PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xa8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD213PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa8) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMADD213PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xa8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADD213PS") + } + return p +} + +// VFMADD213SD performs "Fused Multiply-Add of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFMADD213SD +// Supported forms : (5 forms) +// +// * VFMADD213SD xmm, xmm, xmm [FMA3] +// * VFMADD213SD m64, xmm, xmm [FMA3] +// * VFMADD213SD m64, xmm, xmm{k}{z} [AVX512F] +// * VFMADD213SD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFMADD213SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFMADD213SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADD213SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADD213SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADD213SD takes 3 or 4 operands") + } + // VFMADD213SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xa9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD213SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa9) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD213SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xa9) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VFMADD213SD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xa9) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADD213SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xa9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADD213SD") + } + return p +} + +// VFMADD213SS performs "Fused Multiply-Add of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFMADD213SS +// Supported forms : (5 forms) +// +// * VFMADD213SS xmm, xmm, xmm [FMA3] +// * VFMADD213SS m32, xmm, xmm [FMA3] +// * VFMADD213SS m32, xmm, xmm{k}{z} [AVX512F] +// * VFMADD213SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFMADD213SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFMADD213SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADD213SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADD213SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADD213SS takes 3 or 4 operands") + } + // VFMADD213SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xa9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD213SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa9) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD213SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xa9) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VFMADD213SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xa9) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADD213SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xa9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADD213SS") + } + return p +} + +// VFMADD231PD performs "Fused Multiply-Add of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMADD231PD +// Supported forms : (11 forms) +// +// * VFMADD231PD xmm, xmm, xmm [FMA3] +// * VFMADD231PD m128, xmm, xmm [FMA3] +// * VFMADD231PD ymm, ymm, ymm [FMA3] +// * VFMADD231PD m256, ymm, ymm [FMA3] +// * VFMADD231PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMADD231PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADD231PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADD231PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADD231PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADD231PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMADD231PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMADD231PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADD231PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADD231PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADD231PD takes 3 or 4 operands") + } + // VFMADD231PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD231PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD231PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD231PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD231PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb8) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMADD231PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADD231PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD231PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb8) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMADD231PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD231PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb8) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMADD231PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADD231PD") + } + return p +} + +// VFMADD231PS performs "Fused Multiply-Add of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMADD231PS +// Supported forms : (11 forms) +// +// * VFMADD231PS xmm, xmm, xmm [FMA3] +// * VFMADD231PS m128, xmm, xmm [FMA3] +// * VFMADD231PS ymm, ymm, ymm [FMA3] +// * VFMADD231PS m256, ymm, ymm [FMA3] +// * VFMADD231PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMADD231PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADD231PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADD231PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADD231PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADD231PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMADD231PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMADD231PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADD231PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADD231PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADD231PS takes 3 or 4 operands") + } + // VFMADD231PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD231PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD231PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD231PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD231PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb8) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMADD231PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADD231PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD231PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb8) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMADD231PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD231PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb8) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMADD231PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xb8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADD231PS") + } + return p +} + +// VFMADD231SD performs "Fused Multiply-Add of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFMADD231SD +// Supported forms : (5 forms) +// +// * VFMADD231SD xmm, xmm, xmm [FMA3] +// * VFMADD231SD m64, xmm, xmm [FMA3] +// * VFMADD231SD m64, xmm, xmm{k}{z} [AVX512F] +// * VFMADD231SD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFMADD231SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFMADD231SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADD231SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADD231SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADD231SD takes 3 or 4 operands") + } + // VFMADD231SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xb9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD231SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb9) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD231SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xb9) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VFMADD231SD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xb9) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADD231SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xb9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADD231SD") + } + return p +} + +// VFMADD231SS performs "Fused Multiply-Add of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFMADD231SS +// Supported forms : (5 forms) +// +// * VFMADD231SS xmm, xmm, xmm [FMA3] +// * VFMADD231SS m32, xmm, xmm [FMA3] +// * VFMADD231SS m32, xmm, xmm{k}{z} [AVX512F] +// * VFMADD231SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFMADD231SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFMADD231SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADD231SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADD231SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADD231SS takes 3 or 4 operands") + } + // VFMADD231SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xb9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADD231SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb9) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADD231SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xb9) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VFMADD231SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xb9) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADD231SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xb9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADD231SS") + } + return p +} + +// VFMADDPD performs "Fused Multiply-Add of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMADDPD +// Supported forms : (6 forms) +// +// * VFMADDPD xmm, xmm, xmm, xmm [FMA4] +// * VFMADDPD m128, xmm, xmm, xmm [FMA4] +// * VFMADDPD xmm, m128, xmm, xmm [FMA4] +// * VFMADDPD ymm, ymm, ymm, ymm [FMA4] +// * VFMADDPD m256, ymm, ymm, ymm [FMA4] +// * VFMADDPD ymm, m256, ymm, ymm [FMA4] +// +func (self *Program) VFMADDPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFMADDPD", 4, Operands { v0, v1, v2, v3 }) + // VFMADDPD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x69) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x69) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDPD m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x69) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMADDPD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x69) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDPD ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit(0x69) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x69) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDPD m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x69) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMADDPD ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x69) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADDPD") + } + return p +} + +// VFMADDPS performs "Fused Multiply-Add of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMADDPS +// Supported forms : (6 forms) +// +// * VFMADDPS xmm, xmm, xmm, xmm [FMA4] +// * VFMADDPS m128, xmm, xmm, xmm [FMA4] +// * VFMADDPS xmm, m128, xmm, xmm [FMA4] +// * VFMADDPS ymm, ymm, ymm, ymm [FMA4] +// * VFMADDPS m256, ymm, ymm, ymm [FMA4] +// * VFMADDPS ymm, m256, ymm, ymm [FMA4] +// +func (self *Program) VFMADDPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFMADDPS", 4, Operands { v0, v1, v2, v3 }) + // VFMADDPS xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x68) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x68) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDPS m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x68) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMADDPS xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x68) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDPS ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit(0x68) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x68) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDPS m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x68) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMADDPS ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x68) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADDPS") + } + return p +} + +// VFMADDSD performs "Fused Multiply-Add of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFMADDSD +// Supported forms : (3 forms) +// +// * VFMADDSD xmm, xmm, xmm, xmm [FMA4] +// * VFMADDSD m64, xmm, xmm, xmm [FMA4] +// * VFMADDSD xmm, m64, xmm, xmm [FMA4] +// +func (self *Program) VFMADDSD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFMADDSD", 4, Operands { v0, v1, v2, v3 }) + // VFMADDSD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x6b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x6b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDSD m64, xmm, xmm, xmm + if isM64(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x6b) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMADDSD xmm, m64, xmm, xmm + if isXMM(v0) && isM64(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x6b) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADDSD") + } + return p +} + +// VFMADDSS performs "Fused Multiply-Add of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFMADDSS +// Supported forms : (3 forms) +// +// * VFMADDSS xmm, xmm, xmm, xmm [FMA4] +// * VFMADDSS m32, xmm, xmm, xmm [FMA4] +// * VFMADDSS xmm, m32, xmm, xmm [FMA4] +// +func (self *Program) VFMADDSS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFMADDSS", 4, Operands { v0, v1, v2, v3 }) + // VFMADDSS xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x6a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x6a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDSS m32, xmm, xmm, xmm + if isM32(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x6a) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMADDSS xmm, m32, xmm, xmm + if isXMM(v0) && isM32(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x6a) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADDSS") + } + return p +} + +// VFMADDSUB132PD performs "Fused Multiply-Alternating Add/Subtract of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMADDSUB132PD +// Supported forms : (11 forms) +// +// * VFMADDSUB132PD xmm, xmm, xmm [FMA3] +// * VFMADDSUB132PD m128, xmm, xmm [FMA3] +// * VFMADDSUB132PD ymm, ymm, ymm [FMA3] +// * VFMADDSUB132PD m256, ymm, ymm [FMA3] +// * VFMADDSUB132PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB132PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB132PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB132PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB132PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB132PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB132PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMADDSUB132PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADDSUB132PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADDSUB132PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADDSUB132PD takes 3 or 4 operands") + } + // VFMADDSUB132PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0x96) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB132PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x96) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADDSUB132PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x96) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB132PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x96) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADDSUB132PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x96) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMADDSUB132PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x96) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADDSUB132PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x96) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB132PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x96) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMADDSUB132PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x96) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB132PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x96) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMADDSUB132PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x96) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADDSUB132PD") + } + return p +} + +// VFMADDSUB132PS performs "Fused Multiply-Alternating Add/Subtract of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMADDSUB132PS +// Supported forms : (11 forms) +// +// * VFMADDSUB132PS xmm, xmm, xmm [FMA3] +// * VFMADDSUB132PS m128, xmm, xmm [FMA3] +// * VFMADDSUB132PS ymm, ymm, ymm [FMA3] +// * VFMADDSUB132PS m256, ymm, ymm [FMA3] +// * VFMADDSUB132PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB132PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB132PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB132PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB132PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB132PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB132PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMADDSUB132PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADDSUB132PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADDSUB132PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADDSUB132PS takes 3 or 4 operands") + } + // VFMADDSUB132PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x96) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB132PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x96) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADDSUB132PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x96) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB132PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x96) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADDSUB132PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x96) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMADDSUB132PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x96) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADDSUB132PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x96) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB132PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x96) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMADDSUB132PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x96) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB132PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x96) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMADDSUB132PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x96) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADDSUB132PS") + } + return p +} + +// VFMADDSUB213PD performs "Fused Multiply-Alternating Add/Subtract of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMADDSUB213PD +// Supported forms : (11 forms) +// +// * VFMADDSUB213PD xmm, xmm, xmm [FMA3] +// * VFMADDSUB213PD m128, xmm, xmm [FMA3] +// * VFMADDSUB213PD ymm, ymm, ymm [FMA3] +// * VFMADDSUB213PD m256, ymm, ymm [FMA3] +// * VFMADDSUB213PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB213PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB213PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB213PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB213PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB213PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB213PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMADDSUB213PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADDSUB213PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADDSUB213PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADDSUB213PD takes 3 or 4 operands") + } + // VFMADDSUB213PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB213PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa6) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADDSUB213PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB213PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa6) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADDSUB213PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa6) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMADDSUB213PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADDSUB213PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB213PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa6) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMADDSUB213PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB213PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa6) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMADDSUB213PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADDSUB213PD") + } + return p +} + +// VFMADDSUB213PS performs "Fused Multiply-Alternating Add/Subtract of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMADDSUB213PS +// Supported forms : (11 forms) +// +// * VFMADDSUB213PS xmm, xmm, xmm [FMA3] +// * VFMADDSUB213PS m128, xmm, xmm [FMA3] +// * VFMADDSUB213PS ymm, ymm, ymm [FMA3] +// * VFMADDSUB213PS m256, ymm, ymm [FMA3] +// * VFMADDSUB213PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB213PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB213PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB213PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB213PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB213PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB213PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMADDSUB213PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADDSUB213PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADDSUB213PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADDSUB213PS takes 3 or 4 operands") + } + // VFMADDSUB213PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB213PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa6) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADDSUB213PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB213PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa6) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADDSUB213PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa6) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMADDSUB213PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADDSUB213PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB213PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa6) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMADDSUB213PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB213PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa6) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMADDSUB213PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADDSUB213PS") + } + return p +} + +// VFMADDSUB231PD performs "Fused Multiply-Alternating Add/Subtract of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMADDSUB231PD +// Supported forms : (11 forms) +// +// * VFMADDSUB231PD xmm, xmm, xmm [FMA3] +// * VFMADDSUB231PD m128, xmm, xmm [FMA3] +// * VFMADDSUB231PD ymm, ymm, ymm [FMA3] +// * VFMADDSUB231PD m256, ymm, ymm [FMA3] +// * VFMADDSUB231PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB231PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB231PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB231PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB231PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB231PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB231PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMADDSUB231PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADDSUB231PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADDSUB231PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADDSUB231PD takes 3 or 4 operands") + } + // VFMADDSUB231PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB231PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb6) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADDSUB231PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB231PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb6) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADDSUB231PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb6) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMADDSUB231PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADDSUB231PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB231PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb6) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMADDSUB231PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB231PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb6) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMADDSUB231PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADDSUB231PD") + } + return p +} + +// VFMADDSUB231PS performs "Fused Multiply-Alternating Add/Subtract of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMADDSUB231PS +// Supported forms : (11 forms) +// +// * VFMADDSUB231PS xmm, xmm, xmm [FMA3] +// * VFMADDSUB231PS m128, xmm, xmm [FMA3] +// * VFMADDSUB231PS ymm, ymm, ymm [FMA3] +// * VFMADDSUB231PS m256, ymm, ymm [FMA3] +// * VFMADDSUB231PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB231PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB231PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMADDSUB231PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB231PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB231PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMADDSUB231PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMADDSUB231PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMADDSUB231PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMADDSUB231PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMADDSUB231PS takes 3 or 4 operands") + } + // VFMADDSUB231PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB231PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb6) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADDSUB231PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB231PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb6) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMADDSUB231PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb6) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMADDSUB231PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMADDSUB231PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB231PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb6) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMADDSUB231PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMADDSUB231PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb6) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMADDSUB231PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADDSUB231PS") + } + return p +} + +// VFMADDSUBPD performs "Fused Multiply-Alternating Add/Subtract of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMADDSUBPD +// Supported forms : (6 forms) +// +// * VFMADDSUBPD xmm, xmm, xmm, xmm [FMA4] +// * VFMADDSUBPD m128, xmm, xmm, xmm [FMA4] +// * VFMADDSUBPD xmm, m128, xmm, xmm [FMA4] +// * VFMADDSUBPD ymm, ymm, ymm, ymm [FMA4] +// * VFMADDSUBPD m256, ymm, ymm, ymm [FMA4] +// * VFMADDSUBPD ymm, m256, ymm, ymm [FMA4] +// +func (self *Program) VFMADDSUBPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFMADDSUBPD", 4, Operands { v0, v1, v2, v3 }) + // VFMADDSUBPD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDSUBPD m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x5d) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMADDSUBPD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x5d) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDSUBPD ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDSUBPD m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x5d) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMADDSUBPD ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x5d) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADDSUBPD") + } + return p +} + +// VFMADDSUBPS performs "Fused Multiply-Alternating Add/Subtract of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMADDSUBPS +// Supported forms : (6 forms) +// +// * VFMADDSUBPS xmm, xmm, xmm, xmm [FMA4] +// * VFMADDSUBPS m128, xmm, xmm, xmm [FMA4] +// * VFMADDSUBPS xmm, m128, xmm, xmm [FMA4] +// * VFMADDSUBPS ymm, ymm, ymm, ymm [FMA4] +// * VFMADDSUBPS m256, ymm, ymm, ymm [FMA4] +// * VFMADDSUBPS ymm, m256, ymm, ymm [FMA4] +// +func (self *Program) VFMADDSUBPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFMADDSUBPS", 4, Operands { v0, v1, v2, v3 }) + // VFMADDSUBPS xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDSUBPS m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x5c) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMADDSUBPS xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x5c) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDSUBPS ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMADDSUBPS m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x5c) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMADDSUBPS ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x5c) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFMADDSUBPS") + } + return p +} + +// VFMSUB132PD performs "Fused Multiply-Subtract of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMSUB132PD +// Supported forms : (11 forms) +// +// * VFMSUB132PD xmm, xmm, xmm [FMA3] +// * VFMSUB132PD m128, xmm, xmm [FMA3] +// * VFMSUB132PD ymm, ymm, ymm [FMA3] +// * VFMSUB132PD m256, ymm, ymm [FMA3] +// * VFMSUB132PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB132PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB132PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB132PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB132PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB132PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB132PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMSUB132PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUB132PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUB132PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUB132PD takes 3 or 4 operands") + } + // VFMSUB132PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB132PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB132PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB132PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB132PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9a) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMSUB132PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUB132PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB132PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9a) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMSUB132PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB132PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9a) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMSUB132PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUB132PD") + } + return p +} + +// VFMSUB132PS performs "Fused Multiply-Subtract of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMSUB132PS +// Supported forms : (11 forms) +// +// * VFMSUB132PS xmm, xmm, xmm [FMA3] +// * VFMSUB132PS m128, xmm, xmm [FMA3] +// * VFMSUB132PS ymm, ymm, ymm [FMA3] +// * VFMSUB132PS m256, ymm, ymm [FMA3] +// * VFMSUB132PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB132PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB132PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB132PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB132PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB132PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB132PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMSUB132PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUB132PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUB132PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUB132PS takes 3 or 4 operands") + } + // VFMSUB132PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB132PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB132PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB132PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB132PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9a) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMSUB132PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUB132PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB132PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9a) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMSUB132PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB132PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9a) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMSUB132PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUB132PS") + } + return p +} + +// VFMSUB132SD performs "Fused Multiply-Subtract of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFMSUB132SD +// Supported forms : (5 forms) +// +// * VFMSUB132SD xmm, xmm, xmm [FMA3] +// * VFMSUB132SD m64, xmm, xmm [FMA3] +// * VFMSUB132SD m64, xmm, xmm{k}{z} [AVX512F] +// * VFMSUB132SD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFMSUB132SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFMSUB132SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUB132SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUB132SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUB132SD takes 3 or 4 operands") + } + // VFMSUB132SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0x9b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB132SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9b) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB132SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x9b) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VFMSUB132SD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x9b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUB132SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x9b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUB132SD") + } + return p +} + +// VFMSUB132SS performs "Fused Multiply-Subtract of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFMSUB132SS +// Supported forms : (5 forms) +// +// * VFMSUB132SS xmm, xmm, xmm [FMA3] +// * VFMSUB132SS m32, xmm, xmm [FMA3] +// * VFMSUB132SS m32, xmm, xmm{k}{z} [AVX512F] +// * VFMSUB132SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFMSUB132SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFMSUB132SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUB132SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUB132SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUB132SS takes 3 or 4 operands") + } + // VFMSUB132SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x9b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB132SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9b) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB132SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x9b) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VFMSUB132SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x9b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUB132SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x9b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUB132SS") + } + return p +} + +// VFMSUB213PD performs "Fused Multiply-Subtract of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMSUB213PD +// Supported forms : (11 forms) +// +// * VFMSUB213PD xmm, xmm, xmm [FMA3] +// * VFMSUB213PD m128, xmm, xmm [FMA3] +// * VFMSUB213PD ymm, ymm, ymm [FMA3] +// * VFMSUB213PD m256, ymm, ymm [FMA3] +// * VFMSUB213PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB213PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB213PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB213PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB213PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB213PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB213PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMSUB213PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUB213PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUB213PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUB213PD takes 3 or 4 operands") + } + // VFMSUB213PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xaa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB213PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xaa) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB213PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0xaa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB213PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xaa) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB213PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xaa) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMSUB213PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xaa) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUB213PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xaa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB213PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xaa) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMSUB213PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xaa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB213PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xaa) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMSUB213PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xaa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUB213PD") + } + return p +} + +// VFMSUB213PS performs "Fused Multiply-Subtract of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMSUB213PS +// Supported forms : (11 forms) +// +// * VFMSUB213PS xmm, xmm, xmm [FMA3] +// * VFMSUB213PS m128, xmm, xmm [FMA3] +// * VFMSUB213PS ymm, ymm, ymm [FMA3] +// * VFMSUB213PS m256, ymm, ymm [FMA3] +// * VFMSUB213PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB213PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB213PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB213PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB213PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB213PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB213PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMSUB213PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUB213PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUB213PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUB213PS takes 3 or 4 operands") + } + // VFMSUB213PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xaa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB213PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xaa) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB213PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0xaa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB213PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xaa) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB213PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xaa) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMSUB213PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xaa) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUB213PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xaa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB213PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xaa) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMSUB213PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xaa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB213PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xaa) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMSUB213PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xaa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUB213PS") + } + return p +} + +// VFMSUB213SD performs "Fused Multiply-Subtract of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFMSUB213SD +// Supported forms : (5 forms) +// +// * VFMSUB213SD xmm, xmm, xmm [FMA3] +// * VFMSUB213SD m64, xmm, xmm [FMA3] +// * VFMSUB213SD m64, xmm, xmm{k}{z} [AVX512F] +// * VFMSUB213SD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFMSUB213SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFMSUB213SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUB213SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUB213SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUB213SD takes 3 or 4 operands") + } + // VFMSUB213SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xab) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB213SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xab) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB213SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xab) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VFMSUB213SD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xab) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUB213SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xab) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUB213SD") + } + return p +} + +// VFMSUB213SS performs "Fused Multiply-Subtract of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFMSUB213SS +// Supported forms : (5 forms) +// +// * VFMSUB213SS xmm, xmm, xmm [FMA3] +// * VFMSUB213SS m32, xmm, xmm [FMA3] +// * VFMSUB213SS m32, xmm, xmm{k}{z} [AVX512F] +// * VFMSUB213SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFMSUB213SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFMSUB213SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUB213SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUB213SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUB213SS takes 3 or 4 operands") + } + // VFMSUB213SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xab) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB213SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xab) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB213SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xab) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VFMSUB213SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xab) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUB213SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xab) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUB213SS") + } + return p +} + +// VFMSUB231PD performs "Fused Multiply-Subtract of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMSUB231PD +// Supported forms : (11 forms) +// +// * VFMSUB231PD xmm, xmm, xmm [FMA3] +// * VFMSUB231PD m128, xmm, xmm [FMA3] +// * VFMSUB231PD ymm, ymm, ymm [FMA3] +// * VFMSUB231PD m256, ymm, ymm [FMA3] +// * VFMSUB231PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB231PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB231PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB231PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB231PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB231PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB231PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMSUB231PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUB231PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUB231PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUB231PD takes 3 or 4 operands") + } + // VFMSUB231PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xba) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB231PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xba) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB231PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0xba) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB231PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xba) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB231PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xba) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMSUB231PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xba) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUB231PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xba) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB231PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xba) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMSUB231PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xba) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB231PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xba) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMSUB231PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xba) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUB231PD") + } + return p +} + +// VFMSUB231PS performs "Fused Multiply-Subtract of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMSUB231PS +// Supported forms : (11 forms) +// +// * VFMSUB231PS xmm, xmm, xmm [FMA3] +// * VFMSUB231PS m128, xmm, xmm [FMA3] +// * VFMSUB231PS ymm, ymm, ymm [FMA3] +// * VFMSUB231PS m256, ymm, ymm [FMA3] +// * VFMSUB231PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB231PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB231PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUB231PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB231PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB231PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMSUB231PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMSUB231PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUB231PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUB231PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUB231PS takes 3 or 4 operands") + } + // VFMSUB231PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xba) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB231PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xba) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB231PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0xba) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB231PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xba) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB231PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xba) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMSUB231PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xba) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUB231PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xba) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB231PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xba) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMSUB231PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xba) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB231PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xba) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMSUB231PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xba) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUB231PS") + } + return p +} + +// VFMSUB231SD performs "Fused Multiply-Subtract of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFMSUB231SD +// Supported forms : (5 forms) +// +// * VFMSUB231SD xmm, xmm, xmm [FMA3] +// * VFMSUB231SD m64, xmm, xmm [FMA3] +// * VFMSUB231SD m64, xmm, xmm{k}{z} [AVX512F] +// * VFMSUB231SD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFMSUB231SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFMSUB231SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUB231SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUB231SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUB231SD takes 3 or 4 operands") + } + // VFMSUB231SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xbb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB231SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbb) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB231SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xbb) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VFMSUB231SD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xbb) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUB231SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xbb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUB231SD") + } + return p +} + +// VFMSUB231SS performs "Fused Multiply-Subtract of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFMSUB231SS +// Supported forms : (5 forms) +// +// * VFMSUB231SS xmm, xmm, xmm [FMA3] +// * VFMSUB231SS m32, xmm, xmm [FMA3] +// * VFMSUB231SS m32, xmm, xmm{k}{z} [AVX512F] +// * VFMSUB231SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFMSUB231SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFMSUB231SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUB231SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUB231SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUB231SS takes 3 or 4 operands") + } + // VFMSUB231SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xbb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUB231SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbb) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUB231SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xbb) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VFMSUB231SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xbb) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUB231SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xbb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUB231SS") + } + return p +} + +// VFMSUBADD132PD performs "Fused Multiply-Alternating Subtract/Add of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMSUBADD132PD +// Supported forms : (11 forms) +// +// * VFMSUBADD132PD xmm, xmm, xmm [FMA3] +// * VFMSUBADD132PD m128, xmm, xmm [FMA3] +// * VFMSUBADD132PD ymm, ymm, ymm [FMA3] +// * VFMSUBADD132PD m256, ymm, ymm [FMA3] +// * VFMSUBADD132PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD132PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD132PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD132PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD132PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD132PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD132PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMSUBADD132PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUBADD132PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUBADD132PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUBADD132PD takes 3 or 4 operands") + } + // VFMSUBADD132PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0x97) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD132PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x97) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUBADD132PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x97) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD132PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x97) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUBADD132PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x97) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMSUBADD132PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x97) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUBADD132PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x97) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD132PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x97) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMSUBADD132PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x97) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD132PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x97) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMSUBADD132PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x97) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUBADD132PD") + } + return p +} + +// VFMSUBADD132PS performs "Fused Multiply-Alternating Subtract/Add of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMSUBADD132PS +// Supported forms : (11 forms) +// +// * VFMSUBADD132PS xmm, xmm, xmm [FMA3] +// * VFMSUBADD132PS m128, xmm, xmm [FMA3] +// * VFMSUBADD132PS ymm, ymm, ymm [FMA3] +// * VFMSUBADD132PS m256, ymm, ymm [FMA3] +// * VFMSUBADD132PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD132PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD132PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD132PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD132PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD132PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD132PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMSUBADD132PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUBADD132PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUBADD132PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUBADD132PS takes 3 or 4 operands") + } + // VFMSUBADD132PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x97) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD132PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x97) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUBADD132PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x97) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD132PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x97) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUBADD132PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x97) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMSUBADD132PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x97) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUBADD132PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x97) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD132PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x97) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMSUBADD132PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x97) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD132PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x97) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMSUBADD132PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x97) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUBADD132PS") + } + return p +} + +// VFMSUBADD213PD performs "Fused Multiply-Alternating Subtract/Add of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMSUBADD213PD +// Supported forms : (11 forms) +// +// * VFMSUBADD213PD xmm, xmm, xmm [FMA3] +// * VFMSUBADD213PD m128, xmm, xmm [FMA3] +// * VFMSUBADD213PD ymm, ymm, ymm [FMA3] +// * VFMSUBADD213PD m256, ymm, ymm [FMA3] +// * VFMSUBADD213PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD213PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD213PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD213PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD213PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD213PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD213PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMSUBADD213PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUBADD213PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUBADD213PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUBADD213PD takes 3 or 4 operands") + } + // VFMSUBADD213PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xa7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD213PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa7) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUBADD213PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0xa7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD213PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa7) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUBADD213PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa7) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMSUBADD213PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xa7) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUBADD213PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xa7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD213PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa7) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMSUBADD213PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xa7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD213PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa7) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMSUBADD213PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xa7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUBADD213PD") + } + return p +} + +// VFMSUBADD213PS performs "Fused Multiply-Alternating Subtract/Add of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMSUBADD213PS +// Supported forms : (11 forms) +// +// * VFMSUBADD213PS xmm, xmm, xmm [FMA3] +// * VFMSUBADD213PS m128, xmm, xmm [FMA3] +// * VFMSUBADD213PS ymm, ymm, ymm [FMA3] +// * VFMSUBADD213PS m256, ymm, ymm [FMA3] +// * VFMSUBADD213PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD213PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD213PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD213PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD213PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD213PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD213PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMSUBADD213PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUBADD213PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUBADD213PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUBADD213PS takes 3 or 4 operands") + } + // VFMSUBADD213PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xa7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD213PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa7) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUBADD213PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0xa7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD213PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xa7) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUBADD213PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa7) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMSUBADD213PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xa7) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUBADD213PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xa7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD213PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa7) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMSUBADD213PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xa7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD213PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xa7) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMSUBADD213PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xa7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUBADD213PS") + } + return p +} + +// VFMSUBADD231PD performs "Fused Multiply-Alternating Subtract/Add of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMSUBADD231PD +// Supported forms : (11 forms) +// +// * VFMSUBADD231PD xmm, xmm, xmm [FMA3] +// * VFMSUBADD231PD m128, xmm, xmm [FMA3] +// * VFMSUBADD231PD ymm, ymm, ymm [FMA3] +// * VFMSUBADD231PD m256, ymm, ymm [FMA3] +// * VFMSUBADD231PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD231PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD231PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD231PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD231PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD231PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD231PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMSUBADD231PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUBADD231PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUBADD231PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUBADD231PD takes 3 or 4 operands") + } + // VFMSUBADD231PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD231PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb7) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUBADD231PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD231PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb7) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUBADD231PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb7) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMSUBADD231PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUBADD231PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD231PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb7) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMSUBADD231PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD231PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb7) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMSUBADD231PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUBADD231PD") + } + return p +} + +// VFMSUBADD231PS performs "Fused Multiply-Alternating Subtract/Add of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMSUBADD231PS +// Supported forms : (11 forms) +// +// * VFMSUBADD231PS xmm, xmm, xmm [FMA3] +// * VFMSUBADD231PS m128, xmm, xmm [FMA3] +// * VFMSUBADD231PS ymm, ymm, ymm [FMA3] +// * VFMSUBADD231PS m256, ymm, ymm [FMA3] +// * VFMSUBADD231PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD231PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD231PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFMSUBADD231PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD231PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD231PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFMSUBADD231PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFMSUBADD231PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFMSUBADD231PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFMSUBADD231PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFMSUBADD231PS takes 3 or 4 operands") + } + // VFMSUBADD231PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD231PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb7) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUBADD231PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD231PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xb7) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFMSUBADD231PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb7) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFMSUBADD231PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFMSUBADD231PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD231PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb7) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFMSUBADD231PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFMSUBADD231PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb7) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFMSUBADD231PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xb7) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUBADD231PS") + } + return p +} + +// VFMSUBADDPD performs "Fused Multiply-Alternating Subtract/Add of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMSUBADDPD +// Supported forms : (6 forms) +// +// * VFMSUBADDPD xmm, xmm, xmm, xmm [FMA4] +// * VFMSUBADDPD m128, xmm, xmm, xmm [FMA4] +// * VFMSUBADDPD xmm, m128, xmm, xmm [FMA4] +// * VFMSUBADDPD ymm, ymm, ymm, ymm [FMA4] +// * VFMSUBADDPD m256, ymm, ymm, ymm [FMA4] +// * VFMSUBADDPD ymm, m256, ymm, ymm [FMA4] +// +func (self *Program) VFMSUBADDPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFMSUBADDPD", 4, Operands { v0, v1, v2, v3 }) + // VFMSUBADDPD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBADDPD m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x5f) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMSUBADDPD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x5f) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBADDPD ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBADDPD m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x5f) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMSUBADDPD ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x5f) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUBADDPD") + } + return p +} + +// VFMSUBADDPS performs "Fused Multiply-Alternating Subtract/Add of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMSUBADDPS +// Supported forms : (6 forms) +// +// * VFMSUBADDPS xmm, xmm, xmm, xmm [FMA4] +// * VFMSUBADDPS m128, xmm, xmm, xmm [FMA4] +// * VFMSUBADDPS xmm, m128, xmm, xmm [FMA4] +// * VFMSUBADDPS ymm, ymm, ymm, ymm [FMA4] +// * VFMSUBADDPS m256, ymm, ymm, ymm [FMA4] +// * VFMSUBADDPS ymm, m256, ymm, ymm [FMA4] +// +func (self *Program) VFMSUBADDPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFMSUBADDPS", 4, Operands { v0, v1, v2, v3 }) + // VFMSUBADDPS xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBADDPS m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x5e) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMSUBADDPS xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x5e) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBADDPS ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x5e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBADDPS m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x5e) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMSUBADDPS ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x5e) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUBADDPS") + } + return p +} + +// VFMSUBPD performs "Fused Multiply-Subtract of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFMSUBPD +// Supported forms : (6 forms) +// +// * VFMSUBPD xmm, xmm, xmm, xmm [FMA4] +// * VFMSUBPD m128, xmm, xmm, xmm [FMA4] +// * VFMSUBPD xmm, m128, xmm, xmm [FMA4] +// * VFMSUBPD ymm, ymm, ymm, ymm [FMA4] +// * VFMSUBPD m256, ymm, ymm, ymm [FMA4] +// * VFMSUBPD ymm, m256, ymm, ymm [FMA4] +// +func (self *Program) VFMSUBPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFMSUBPD", 4, Operands { v0, v1, v2, v3 }) + // VFMSUBPD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x6d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x6d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBPD m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x6d) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMSUBPD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x6d) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBPD ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit(0x6d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x6d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBPD m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x6d) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMSUBPD ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x6d) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUBPD") + } + return p +} + +// VFMSUBPS performs "Fused Multiply-Subtract of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFMSUBPS +// Supported forms : (6 forms) +// +// * VFMSUBPS xmm, xmm, xmm, xmm [FMA4] +// * VFMSUBPS m128, xmm, xmm, xmm [FMA4] +// * VFMSUBPS xmm, m128, xmm, xmm [FMA4] +// * VFMSUBPS ymm, ymm, ymm, ymm [FMA4] +// * VFMSUBPS m256, ymm, ymm, ymm [FMA4] +// * VFMSUBPS ymm, m256, ymm, ymm [FMA4] +// +func (self *Program) VFMSUBPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFMSUBPS", 4, Operands { v0, v1, v2, v3 }) + // VFMSUBPS xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x6c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x6c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBPS m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x6c) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMSUBPS xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x6c) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBPS ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit(0x6c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x6c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBPS m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x6c) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMSUBPS ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x6c) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUBPS") + } + return p +} + +// VFMSUBSD performs "Fused Multiply-Subtract of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFMSUBSD +// Supported forms : (3 forms) +// +// * VFMSUBSD xmm, xmm, xmm, xmm [FMA4] +// * VFMSUBSD m64, xmm, xmm, xmm [FMA4] +// * VFMSUBSD xmm, m64, xmm, xmm [FMA4] +// +func (self *Program) VFMSUBSD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFMSUBSD", 4, Operands { v0, v1, v2, v3 }) + // VFMSUBSD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBSD m64, xmm, xmm, xmm + if isM64(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x6f) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMSUBSD xmm, m64, xmm, xmm + if isXMM(v0) && isM64(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x6f) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUBSD") + } + return p +} + +// VFMSUBSS performs "Fused Multiply-Subtract of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFMSUBSS +// Supported forms : (3 forms) +// +// * VFMSUBSS xmm, xmm, xmm, xmm [FMA4] +// * VFMSUBSS m32, xmm, xmm, xmm [FMA4] +// * VFMSUBSS xmm, m32, xmm, xmm [FMA4] +// +func (self *Program) VFMSUBSS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFMSUBSS", 4, Operands { v0, v1, v2, v3 }) + // VFMSUBSS xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x6e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x6e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFMSUBSS m32, xmm, xmm, xmm + if isM32(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x6e) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFMSUBSS xmm, m32, xmm, xmm + if isXMM(v0) && isM32(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x6e) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFMSUBSS") + } + return p +} + +// VFNMADD132PD performs "Fused Negative Multiply-Add of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMADD132PD +// Supported forms : (11 forms) +// +// * VFNMADD132PD xmm, xmm, xmm [FMA3] +// * VFNMADD132PD m128, xmm, xmm [FMA3] +// * VFNMADD132PD ymm, ymm, ymm [FMA3] +// * VFNMADD132PD m256, ymm, ymm [FMA3] +// * VFNMADD132PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD132PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD132PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD132PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD132PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD132PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD132PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFNMADD132PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMADD132PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMADD132PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMADD132PD takes 3 or 4 operands") + } + // VFNMADD132PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD132PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD132PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD132PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD132PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9c) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFNMADD132PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMADD132PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD132PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9c) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFNMADD132PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD132PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9c) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFNMADD132PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADD132PD") + } + return p +} + +// VFNMADD132PS performs "Fused Negative Multiply-Add of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMADD132PS +// Supported forms : (11 forms) +// +// * VFNMADD132PS xmm, xmm, xmm [FMA3] +// * VFNMADD132PS m128, xmm, xmm [FMA3] +// * VFNMADD132PS ymm, ymm, ymm [FMA3] +// * VFNMADD132PS m256, ymm, ymm [FMA3] +// * VFNMADD132PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD132PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD132PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD132PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD132PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD132PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD132PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFNMADD132PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMADD132PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMADD132PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMADD132PS takes 3 or 4 operands") + } + // VFNMADD132PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD132PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD132PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD132PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD132PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9c) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFNMADD132PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMADD132PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD132PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9c) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFNMADD132PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD132PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9c) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFNMADD132PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x9c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADD132PS") + } + return p +} + +// VFNMADD132SD performs "Fused Negative Multiply-Add of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMADD132SD +// Supported forms : (5 forms) +// +// * VFNMADD132SD xmm, xmm, xmm [FMA3] +// * VFNMADD132SD m64, xmm, xmm [FMA3] +// * VFNMADD132SD m64, xmm, xmm{k}{z} [AVX512F] +// * VFNMADD132SD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFNMADD132SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFNMADD132SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMADD132SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMADD132SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMADD132SD takes 3 or 4 operands") + } + // VFNMADD132SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0x9d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD132SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD132SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x9d) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VFNMADD132SD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x9d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMADD132SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x9d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADD132SD") + } + return p +} + +// VFNMADD132SS performs "Fused Negative Multiply-Add of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMADD132SS +// Supported forms : (5 forms) +// +// * VFNMADD132SS xmm, xmm, xmm [FMA3] +// * VFNMADD132SS m32, xmm, xmm [FMA3] +// * VFNMADD132SS m32, xmm, xmm{k}{z} [AVX512F] +// * VFNMADD132SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFNMADD132SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFNMADD132SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMADD132SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMADD132SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMADD132SS takes 3 or 4 operands") + } + // VFNMADD132SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x9d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD132SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD132SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x9d) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VFNMADD132SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x9d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMADD132SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x9d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADD132SS") + } + return p +} + +// VFNMADD213PD performs "Fused Negative Multiply-Add of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMADD213PD +// Supported forms : (11 forms) +// +// * VFNMADD213PD xmm, xmm, xmm [FMA3] +// * VFNMADD213PD m128, xmm, xmm [FMA3] +// * VFNMADD213PD ymm, ymm, ymm [FMA3] +// * VFNMADD213PD m256, ymm, ymm [FMA3] +// * VFNMADD213PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD213PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD213PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD213PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD213PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD213PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD213PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFNMADD213PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMADD213PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMADD213PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMADD213PD takes 3 or 4 operands") + } + // VFNMADD213PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xac) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD213PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xac) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD213PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0xac) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD213PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xac) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD213PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xac) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFNMADD213PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xac) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMADD213PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xac) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD213PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xac) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFNMADD213PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xac) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD213PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xac) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFNMADD213PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xac) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADD213PD") + } + return p +} + +// VFNMADD213PS performs "Fused Negative Multiply-Add of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMADD213PS +// Supported forms : (11 forms) +// +// * VFNMADD213PS xmm, xmm, xmm [FMA3] +// * VFNMADD213PS m128, xmm, xmm [FMA3] +// * VFNMADD213PS ymm, ymm, ymm [FMA3] +// * VFNMADD213PS m256, ymm, ymm [FMA3] +// * VFNMADD213PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD213PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD213PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD213PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD213PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD213PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD213PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFNMADD213PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMADD213PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMADD213PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMADD213PS takes 3 or 4 operands") + } + // VFNMADD213PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xac) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD213PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xac) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD213PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0xac) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD213PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xac) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD213PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xac) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFNMADD213PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xac) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMADD213PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xac) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD213PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xac) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFNMADD213PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xac) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD213PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xac) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFNMADD213PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xac) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADD213PS") + } + return p +} + +// VFNMADD213SD performs "Fused Negative Multiply-Add of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMADD213SD +// Supported forms : (5 forms) +// +// * VFNMADD213SD xmm, xmm, xmm [FMA3] +// * VFNMADD213SD m64, xmm, xmm [FMA3] +// * VFNMADD213SD m64, xmm, xmm{k}{z} [AVX512F] +// * VFNMADD213SD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFNMADD213SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFNMADD213SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMADD213SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMADD213SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMADD213SD takes 3 or 4 operands") + } + // VFNMADD213SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xad) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD213SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xad) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD213SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xad) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VFNMADD213SD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xad) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMADD213SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xad) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADD213SD") + } + return p +} + +// VFNMADD213SS performs "Fused Negative Multiply-Add of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMADD213SS +// Supported forms : (5 forms) +// +// * VFNMADD213SS xmm, xmm, xmm [FMA3] +// * VFNMADD213SS m32, xmm, xmm [FMA3] +// * VFNMADD213SS m32, xmm, xmm{k}{z} [AVX512F] +// * VFNMADD213SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFNMADD213SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFNMADD213SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMADD213SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMADD213SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMADD213SS takes 3 or 4 operands") + } + // VFNMADD213SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xad) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD213SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xad) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD213SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xad) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VFNMADD213SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xad) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMADD213SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xad) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADD213SS") + } + return p +} + +// VFNMADD231PD performs "Fused Negative Multiply-Add of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMADD231PD +// Supported forms : (11 forms) +// +// * VFNMADD231PD xmm, xmm, xmm [FMA3] +// * VFNMADD231PD m128, xmm, xmm [FMA3] +// * VFNMADD231PD ymm, ymm, ymm [FMA3] +// * VFNMADD231PD m256, ymm, ymm [FMA3] +// * VFNMADD231PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD231PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD231PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD231PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD231PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD231PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD231PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFNMADD231PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMADD231PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMADD231PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMADD231PD takes 3 or 4 operands") + } + // VFNMADD231PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD231PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbc) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD231PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD231PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbc) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD231PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xbc) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFNMADD231PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMADD231PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD231PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xbc) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFNMADD231PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD231PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xbc) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFNMADD231PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADD231PD") + } + return p +} + +// VFNMADD231PS performs "Fused Negative Multiply-Add of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMADD231PS +// Supported forms : (11 forms) +// +// * VFNMADD231PS xmm, xmm, xmm [FMA3] +// * VFNMADD231PS m128, xmm, xmm [FMA3] +// * VFNMADD231PS ymm, ymm, ymm [FMA3] +// * VFNMADD231PS m256, ymm, ymm [FMA3] +// * VFNMADD231PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD231PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD231PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMADD231PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD231PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD231PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFNMADD231PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFNMADD231PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMADD231PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMADD231PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMADD231PS takes 3 or 4 operands") + } + // VFNMADD231PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD231PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbc) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD231PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD231PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbc) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD231PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xbc) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFNMADD231PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMADD231PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD231PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xbc) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFNMADD231PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD231PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xbc) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFNMADD231PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xbc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADD231PS") + } + return p +} + +// VFNMADD231SD performs "Fused Negative Multiply-Add of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMADD231SD +// Supported forms : (5 forms) +// +// * VFNMADD231SD xmm, xmm, xmm [FMA3] +// * VFNMADD231SD m64, xmm, xmm [FMA3] +// * VFNMADD231SD m64, xmm, xmm{k}{z} [AVX512F] +// * VFNMADD231SD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFNMADD231SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFNMADD231SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMADD231SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMADD231SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMADD231SD takes 3 or 4 operands") + } + // VFNMADD231SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xbd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD231SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbd) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD231SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xbd) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VFNMADD231SD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xbd) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMADD231SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xbd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADD231SD") + } + return p +} + +// VFNMADD231SS performs "Fused Negative Multiply-Add of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMADD231SS +// Supported forms : (5 forms) +// +// * VFNMADD231SS xmm, xmm, xmm [FMA3] +// * VFNMADD231SS m32, xmm, xmm [FMA3] +// * VFNMADD231SS m32, xmm, xmm{k}{z} [AVX512F] +// * VFNMADD231SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFNMADD231SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFNMADD231SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMADD231SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMADD231SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMADD231SS takes 3 or 4 operands") + } + // VFNMADD231SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xbd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMADD231SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbd) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMADD231SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xbd) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VFNMADD231SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xbd) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMADD231SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xbd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADD231SS") + } + return p +} + +// VFNMADDPD performs "Fused Negative Multiply-Add of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMADDPD +// Supported forms : (6 forms) +// +// * VFNMADDPD xmm, xmm, xmm, xmm [FMA4] +// * VFNMADDPD m128, xmm, xmm, xmm [FMA4] +// * VFNMADDPD xmm, m128, xmm, xmm [FMA4] +// * VFNMADDPD ymm, ymm, ymm, ymm [FMA4] +// * VFNMADDPD m256, ymm, ymm, ymm [FMA4] +// * VFNMADDPD ymm, m256, ymm, ymm [FMA4] +// +func (self *Program) VFNMADDPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFNMADDPD", 4, Operands { v0, v1, v2, v3 }) + // VFNMADDPD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x79) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x79) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMADDPD m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x79) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFNMADDPD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x79) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMADDPD ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit(0x79) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x79) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMADDPD m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x79) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFNMADDPD ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x79) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADDPD") + } + return p +} + +// VFNMADDPS performs "Fused Negative Multiply-Add of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMADDPS +// Supported forms : (6 forms) +// +// * VFNMADDPS xmm, xmm, xmm, xmm [FMA4] +// * VFNMADDPS m128, xmm, xmm, xmm [FMA4] +// * VFNMADDPS xmm, m128, xmm, xmm [FMA4] +// * VFNMADDPS ymm, ymm, ymm, ymm [FMA4] +// * VFNMADDPS m256, ymm, ymm, ymm [FMA4] +// * VFNMADDPS ymm, m256, ymm, ymm [FMA4] +// +func (self *Program) VFNMADDPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFNMADDPS", 4, Operands { v0, v1, v2, v3 }) + // VFNMADDPS xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x78) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x78) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMADDPS m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x78) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFNMADDPS xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x78) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMADDPS ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit(0x78) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x78) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMADDPS m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x78) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFNMADDPS ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x78) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADDPS") + } + return p +} + +// VFNMADDSD performs "Fused Negative Multiply-Add of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMADDSD +// Supported forms : (3 forms) +// +// * VFNMADDSD xmm, xmm, xmm, xmm [FMA4] +// * VFNMADDSD m64, xmm, xmm, xmm [FMA4] +// * VFNMADDSD xmm, m64, xmm, xmm [FMA4] +// +func (self *Program) VFNMADDSD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFNMADDSD", 4, Operands { v0, v1, v2, v3 }) + // VFNMADDSD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMADDSD m64, xmm, xmm, xmm + if isM64(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x7b) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFNMADDSD xmm, m64, xmm, xmm + if isXMM(v0) && isM64(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x7b) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADDSD") + } + return p +} + +// VFNMADDSS performs "Fused Negative Multiply-Add of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMADDSS +// Supported forms : (3 forms) +// +// * VFNMADDSS xmm, xmm, xmm, xmm [FMA4] +// * VFNMADDSS m32, xmm, xmm, xmm [FMA4] +// * VFNMADDSS xmm, m32, xmm, xmm [FMA4] +// +func (self *Program) VFNMADDSS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFNMADDSS", 4, Operands { v0, v1, v2, v3 }) + // VFNMADDSS xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMADDSS m32, xmm, xmm, xmm + if isM32(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x7a) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFNMADDSS xmm, m32, xmm, xmm + if isXMM(v0) && isM32(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x7a) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMADDSS") + } + return p +} + +// VFNMSUB132PD performs "Fused Negative Multiply-Subtract of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUB132PD +// Supported forms : (11 forms) +// +// * VFNMSUB132PD xmm, xmm, xmm [FMA3] +// * VFNMSUB132PD m128, xmm, xmm [FMA3] +// * VFNMSUB132PD ymm, ymm, ymm [FMA3] +// * VFNMSUB132PD m256, ymm, ymm [FMA3] +// * VFNMSUB132PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB132PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB132PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB132PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB132PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB132PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB132PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFNMSUB132PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMSUB132PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMSUB132PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMSUB132PD takes 3 or 4 operands") + } + // VFNMSUB132PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB132PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9e) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB132PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB132PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9e) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB132PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9e) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFNMSUB132PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMSUB132PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB132PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9e) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFNMSUB132PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB132PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9e) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFNMSUB132PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUB132PD") + } + return p +} + +// VFNMSUB132PS performs "Fused Negative Multiply-Subtract of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUB132PS +// Supported forms : (11 forms) +// +// * VFNMSUB132PS xmm, xmm, xmm [FMA3] +// * VFNMSUB132PS m128, xmm, xmm [FMA3] +// * VFNMSUB132PS ymm, ymm, ymm [FMA3] +// * VFNMSUB132PS m256, ymm, ymm [FMA3] +// * VFNMSUB132PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB132PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB132PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB132PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB132PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB132PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB132PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFNMSUB132PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMSUB132PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMSUB132PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMSUB132PS takes 3 or 4 operands") + } + // VFNMSUB132PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB132PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9e) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB132PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB132PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9e) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB132PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9e) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFNMSUB132PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMSUB132PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB132PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9e) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFNMSUB132PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB132PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x9e) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFNMSUB132PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUB132PS") + } + return p +} + +// VFNMSUB132SD performs "Fused Negative Multiply-Subtract of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUB132SD +// Supported forms : (5 forms) +// +// * VFNMSUB132SD xmm, xmm, xmm [FMA3] +// * VFNMSUB132SD m64, xmm, xmm [FMA3] +// * VFNMSUB132SD m64, xmm, xmm{k}{z} [AVX512F] +// * VFNMSUB132SD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFNMSUB132SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFNMSUB132SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMSUB132SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMSUB132SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMSUB132SD takes 3 or 4 operands") + } + // VFNMSUB132SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0x9f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB132SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9f) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB132SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x9f) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VFNMSUB132SD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x9f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMSUB132SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x9f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUB132SD") + } + return p +} + +// VFNMSUB132SS performs "Fused Negative Multiply-Subtract of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUB132SS +// Supported forms : (5 forms) +// +// * VFNMSUB132SS xmm, xmm, xmm [FMA3] +// * VFNMSUB132SS m32, xmm, xmm [FMA3] +// * VFNMSUB132SS m32, xmm, xmm{k}{z} [AVX512F] +// * VFNMSUB132SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFNMSUB132SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFNMSUB132SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMSUB132SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMSUB132SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMSUB132SS takes 3 or 4 operands") + } + // VFNMSUB132SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x9f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB132SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9f) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB132SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x9f) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VFNMSUB132SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x9f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMSUB132SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x9f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUB132SS") + } + return p +} + +// VFNMSUB213PD performs "Fused Negative Multiply-Subtract of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUB213PD +// Supported forms : (11 forms) +// +// * VFNMSUB213PD xmm, xmm, xmm [FMA3] +// * VFNMSUB213PD m128, xmm, xmm [FMA3] +// * VFNMSUB213PD ymm, ymm, ymm [FMA3] +// * VFNMSUB213PD m256, ymm, ymm [FMA3] +// * VFNMSUB213PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB213PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB213PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB213PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB213PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB213PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB213PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFNMSUB213PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMSUB213PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMSUB213PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMSUB213PD takes 3 or 4 operands") + } + // VFNMSUB213PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xae) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB213PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xae) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB213PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0xae) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB213PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xae) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB213PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xae) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFNMSUB213PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xae) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMSUB213PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xae) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB213PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xae) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFNMSUB213PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xae) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB213PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xae) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFNMSUB213PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xae) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUB213PD") + } + return p +} + +// VFNMSUB213PS performs "Fused Negative Multiply-Subtract of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUB213PS +// Supported forms : (11 forms) +// +// * VFNMSUB213PS xmm, xmm, xmm [FMA3] +// * VFNMSUB213PS m128, xmm, xmm [FMA3] +// * VFNMSUB213PS ymm, ymm, ymm [FMA3] +// * VFNMSUB213PS m256, ymm, ymm [FMA3] +// * VFNMSUB213PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB213PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB213PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB213PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB213PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB213PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB213PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFNMSUB213PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMSUB213PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMSUB213PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMSUB213PS takes 3 or 4 operands") + } + // VFNMSUB213PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xae) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB213PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xae) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB213PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0xae) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB213PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xae) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB213PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xae) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFNMSUB213PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xae) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMSUB213PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xae) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB213PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xae) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFNMSUB213PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xae) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB213PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xae) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFNMSUB213PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xae) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUB213PS") + } + return p +} + +// VFNMSUB213SD performs "Fused Negative Multiply-Subtract of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUB213SD +// Supported forms : (5 forms) +// +// * VFNMSUB213SD xmm, xmm, xmm [FMA3] +// * VFNMSUB213SD m64, xmm, xmm [FMA3] +// * VFNMSUB213SD m64, xmm, xmm{k}{z} [AVX512F] +// * VFNMSUB213SD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFNMSUB213SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFNMSUB213SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMSUB213SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMSUB213SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMSUB213SD takes 3 or 4 operands") + } + // VFNMSUB213SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xaf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB213SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xaf) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB213SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xaf) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VFNMSUB213SD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xaf) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMSUB213SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xaf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUB213SD") + } + return p +} + +// VFNMSUB213SS performs "Fused Negative Multiply-Subtract of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUB213SS +// Supported forms : (5 forms) +// +// * VFNMSUB213SS xmm, xmm, xmm [FMA3] +// * VFNMSUB213SS m32, xmm, xmm [FMA3] +// * VFNMSUB213SS m32, xmm, xmm{k}{z} [AVX512F] +// * VFNMSUB213SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFNMSUB213SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFNMSUB213SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMSUB213SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMSUB213SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMSUB213SS takes 3 or 4 operands") + } + // VFNMSUB213SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xaf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB213SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xaf) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB213SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xaf) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VFNMSUB213SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xaf) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMSUB213SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xaf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUB213SS") + } + return p +} + +// VFNMSUB231PD performs "Fused Negative Multiply-Subtract of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUB231PD +// Supported forms : (11 forms) +// +// * VFNMSUB231PD xmm, xmm, xmm [FMA3] +// * VFNMSUB231PD m128, xmm, xmm [FMA3] +// * VFNMSUB231PD ymm, ymm, ymm [FMA3] +// * VFNMSUB231PD m256, ymm, ymm [FMA3] +// * VFNMSUB231PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB231PD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB231PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB231PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB231PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB231PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB231PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFNMSUB231PD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMSUB231PD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMSUB231PD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMSUB231PD takes 3 or 4 operands") + } + // VFNMSUB231PD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB231PD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbe) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB231PD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB231PD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbe) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB231PD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xbe) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFNMSUB231PD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMSUB231PD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB231PD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xbe) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFNMSUB231PD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB231PD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xbe) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFNMSUB231PD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUB231PD") + } + return p +} + +// VFNMSUB231PS performs "Fused Negative Multiply-Subtract of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUB231PS +// Supported forms : (11 forms) +// +// * VFNMSUB231PS xmm, xmm, xmm [FMA3] +// * VFNMSUB231PS m128, xmm, xmm [FMA3] +// * VFNMSUB231PS ymm, ymm, ymm [FMA3] +// * VFNMSUB231PS m256, ymm, ymm [FMA3] +// * VFNMSUB231PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB231PS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB231PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VFNMSUB231PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB231PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB231PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VFNMSUB231PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VFNMSUB231PS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMSUB231PS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMSUB231PS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMSUB231PS takes 3 or 4 operands") + } + // VFNMSUB231PS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB231PS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbe) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB231PS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB231PS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbe) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB231PS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xbe) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VFNMSUB231PS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMSUB231PS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB231PS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xbe) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VFNMSUB231PS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB231PS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xbe) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VFNMSUB231PS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xbe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUB231PS") + } + return p +} + +// VFNMSUB231SD performs "Fused Negative Multiply-Subtract of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUB231SD +// Supported forms : (5 forms) +// +// * VFNMSUB231SD xmm, xmm, xmm [FMA3] +// * VFNMSUB231SD m64, xmm, xmm [FMA3] +// * VFNMSUB231SD m64, xmm, xmm{k}{z} [AVX512F] +// * VFNMSUB231SD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFNMSUB231SD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFNMSUB231SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMSUB231SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMSUB231SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMSUB231SD takes 3 or 4 operands") + } + // VFNMSUB231SD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0xbf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB231SD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbf) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB231SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xbf) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VFNMSUB231SD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xbf) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMSUB231SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xbf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUB231SD") + } + return p +} + +// VFNMSUB231SS performs "Fused Negative Multiply-Subtract of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUB231SS +// Supported forms : (5 forms) +// +// * VFNMSUB231SS xmm, xmm, xmm [FMA3] +// * VFNMSUB231SS m32, xmm, xmm [FMA3] +// * VFNMSUB231SS m32, xmm, xmm{k}{z} [AVX512F] +// * VFNMSUB231SS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VFNMSUB231SS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VFNMSUB231SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VFNMSUB231SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VFNMSUB231SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VFNMSUB231SS takes 3 or 4 operands") + } + // VFNMSUB231SS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0xbf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VFNMSUB231SS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_FMA3) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xbf) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VFNMSUB231SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xbf) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VFNMSUB231SS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xbf) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VFNMSUB231SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xbf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUB231SS") + } + return p +} + +// VFNMSUBPD performs "Fused Negative Multiply-Subtract of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUBPD +// Supported forms : (6 forms) +// +// * VFNMSUBPD xmm, xmm, xmm, xmm [FMA4] +// * VFNMSUBPD m128, xmm, xmm, xmm [FMA4] +// * VFNMSUBPD xmm, m128, xmm, xmm [FMA4] +// * VFNMSUBPD ymm, ymm, ymm, ymm [FMA4] +// * VFNMSUBPD m256, ymm, ymm, ymm [FMA4] +// * VFNMSUBPD ymm, m256, ymm, ymm [FMA4] +// +func (self *Program) VFNMSUBPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFNMSUBPD", 4, Operands { v0, v1, v2, v3 }) + // VFNMSUBPD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMSUBPD m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x7d) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFNMSUBPD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x7d) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMSUBPD ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMSUBPD m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x7d) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFNMSUBPD ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x7d) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUBPD") + } + return p +} + +// VFNMSUBPS performs "Fused Negative Multiply-Subtract of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUBPS +// Supported forms : (6 forms) +// +// * VFNMSUBPS xmm, xmm, xmm, xmm [FMA4] +// * VFNMSUBPS m128, xmm, xmm, xmm [FMA4] +// * VFNMSUBPS xmm, m128, xmm, xmm [FMA4] +// * VFNMSUBPS ymm, ymm, ymm, ymm [FMA4] +// * VFNMSUBPS m256, ymm, ymm, ymm [FMA4] +// * VFNMSUBPS ymm, m256, ymm, ymm [FMA4] +// +func (self *Program) VFNMSUBPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFNMSUBPS", 4, Operands { v0, v1, v2, v3 }) + // VFNMSUBPS xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMSUBPS m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x7c) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFNMSUBPS xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x7c) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMSUBPS ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMSUBPS m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x7c) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFNMSUBPS ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x7c) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUBPS") + } + return p +} + +// VFNMSUBSD performs "Fused Negative Multiply-Subtract of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUBSD +// Supported forms : (3 forms) +// +// * VFNMSUBSD xmm, xmm, xmm, xmm [FMA4] +// * VFNMSUBSD m64, xmm, xmm, xmm [FMA4] +// * VFNMSUBSD xmm, m64, xmm, xmm [FMA4] +// +func (self *Program) VFNMSUBSD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFNMSUBSD", 4, Operands { v0, v1, v2, v3 }) + // VFNMSUBSD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMSUBSD m64, xmm, xmm, xmm + if isM64(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x7f) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFNMSUBSD xmm, m64, xmm, xmm + if isXMM(v0) && isM64(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x7f) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUBSD") + } + return p +} + +// VFNMSUBSS performs "Fused Negative Multiply-Subtract of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VFNMSUBSS +// Supported forms : (3 forms) +// +// * VFNMSUBSS xmm, xmm, xmm, xmm [FMA4] +// * VFNMSUBSS m32, xmm, xmm, xmm [FMA4] +// * VFNMSUBSS xmm, m32, xmm, xmm [FMA4] +// +func (self *Program) VFNMSUBSS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VFNMSUBSS", 4, Operands { v0, v1, v2, v3 }) + // VFNMSUBSS xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VFNMSUBSS m32, xmm, xmm, xmm + if isM32(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0x7e) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VFNMSUBSS xmm, m32, xmm, xmm + if isXMM(v0) && isM32(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_FMA4) + p.domain = DomainFMA + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x7e) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VFNMSUBSS") + } + return p +} + +// VFPCLASSPD performs "Test Class of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VFPCLASSPD +// Supported forms : (6 forms) +// +// * VFPCLASSPD imm8, m512/m64bcst, k{k} [AVX512DQ] +// * VFPCLASSPD imm8, zmm, k{k} [AVX512DQ] +// * VFPCLASSPD imm8, m128/m64bcst, k{k} [AVX512DQ,AVX512VL] +// * VFPCLASSPD imm8, m256/m64bcst, k{k} [AVX512DQ,AVX512VL] +// * VFPCLASSPD imm8, xmm, k{k} [AVX512DQ,AVX512VL] +// * VFPCLASSPD imm8, ymm, k{k} [AVX512DQ,AVX512VL] +// +func (self *Program) VFPCLASSPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VFPCLASSPD", 3, Operands { v0, v1, v2 }) + // VFPCLASSPD imm8, m512/m64bcst, k{k} + if isImm8(v0) && isM512M64bcst(v1) && isKk(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), 0, bcode(v[1])) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VFPCLASSPD imm8, zmm, k{k} + if isImm8(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit(kcode(v[2]) | 0x48) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VFPCLASSPD imm8, m128/m64bcst, k{k} + if isImm8(v0) && isM128M64bcst(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), 0, bcode(v[1])) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VFPCLASSPD imm8, m256/m64bcst, k{k} + if isImm8(v0) && isM256M64bcst(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), 0, bcode(v[1])) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VFPCLASSPD imm8, xmm, k{k} + if isImm8(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit(kcode(v[2]) | 0x08) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VFPCLASSPD imm8, ymm, k{k} + if isImm8(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit(kcode(v[2]) | 0x28) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFPCLASSPD") + } + return p +} + +// VFPCLASSPS performs "Test Class of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VFPCLASSPS +// Supported forms : (6 forms) +// +// * VFPCLASSPS imm8, m512/m32bcst, k{k} [AVX512DQ] +// * VFPCLASSPS imm8, zmm, k{k} [AVX512DQ] +// * VFPCLASSPS imm8, m128/m32bcst, k{k} [AVX512DQ,AVX512VL] +// * VFPCLASSPS imm8, m256/m32bcst, k{k} [AVX512DQ,AVX512VL] +// * VFPCLASSPS imm8, xmm, k{k} [AVX512DQ,AVX512VL] +// * VFPCLASSPS imm8, ymm, k{k} [AVX512DQ,AVX512VL] +// +func (self *Program) VFPCLASSPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VFPCLASSPS", 3, Operands { v0, v1, v2 }) + // VFPCLASSPS imm8, m512/m32bcst, k{k} + if isImm8(v0) && isM512M32bcst(v1) && isKk(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), 0, bcode(v[1])) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VFPCLASSPS imm8, zmm, k{k} + if isImm8(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit(kcode(v[2]) | 0x48) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VFPCLASSPS imm8, m128/m32bcst, k{k} + if isImm8(v0) && isM128M32bcst(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), 0, bcode(v[1])) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VFPCLASSPS imm8, m256/m32bcst, k{k} + if isImm8(v0) && isM256M32bcst(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), 0, bcode(v[1])) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VFPCLASSPS imm8, xmm, k{k} + if isImm8(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit(kcode(v[2]) | 0x08) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VFPCLASSPS imm8, ymm, k{k} + if isImm8(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit(kcode(v[2]) | 0x28) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFPCLASSPS") + } + return p +} + +// VFPCLASSSD performs "Test Class of Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : VFPCLASSSD +// Supported forms : (2 forms) +// +// * VFPCLASSSD imm8, xmm, k{k} [AVX512DQ] +// * VFPCLASSSD imm8, m64, k{k} [AVX512DQ] +// +func (self *Program) VFPCLASSSD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VFPCLASSSD", 3, Operands { v0, v1, v2 }) + // VFPCLASSSD imm8, xmm, k{k} + if isImm8(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit(kcode(v[2]) | 0x08) + m.emit(0x67) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VFPCLASSSD imm8, m64, k{k} + if isImm8(v0) && isM64(v1) && isKk(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), 0, 0) + m.emit(0x67) + m.mrsd(lcode(v[2]), addr(v[1]), 8) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFPCLASSSD") + } + return p +} + +// VFPCLASSSS performs "Test Class of Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : VFPCLASSSS +// Supported forms : (2 forms) +// +// * VFPCLASSSS imm8, xmm, k{k} [AVX512DQ] +// * VFPCLASSSS imm8, m32, k{k} [AVX512DQ] +// +func (self *Program) VFPCLASSSS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VFPCLASSSS", 3, Operands { v0, v1, v2 }) + // VFPCLASSSS imm8, xmm, k{k} + if isImm8(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit(kcode(v[2]) | 0x08) + m.emit(0x67) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VFPCLASSSS imm8, m32, k{k} + if isImm8(v0) && isM32(v1) && isKk(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), 0, 0) + m.emit(0x67) + m.mrsd(lcode(v[2]), addr(v[1]), 4) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VFPCLASSSS") + } + return p +} + +// VFRCZPD performs "Extract Fraction Packed Double-Precision Floating-Point". +// +// Mnemonic : VFRCZPD +// Supported forms : (4 forms) +// +// * VFRCZPD xmm, xmm [XOP] +// * VFRCZPD m128, xmm [XOP] +// * VFRCZPD ymm, ymm [XOP] +// * VFRCZPD m256, ymm [XOP] +// +func (self *Program) VFRCZPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VFRCZPD", 2, Operands { v0, v1 }) + // VFRCZPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0x81) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VFRCZPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0x81) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VFRCZPD ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7c) + m.emit(0x81) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VFRCZPD m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x04, hcode(v[1]), addr(v[0]), 0) + m.emit(0x81) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VFRCZPD") + } + return p +} + +// VFRCZPS performs "Extract Fraction Packed Single-Precision Floating-Point". +// +// Mnemonic : VFRCZPS +// Supported forms : (4 forms) +// +// * VFRCZPS xmm, xmm [XOP] +// * VFRCZPS m128, xmm [XOP] +// * VFRCZPS ymm, ymm [XOP] +// * VFRCZPS m256, ymm [XOP] +// +func (self *Program) VFRCZPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VFRCZPS", 2, Operands { v0, v1 }) + // VFRCZPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0x80) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VFRCZPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0x80) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VFRCZPS ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7c) + m.emit(0x80) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VFRCZPS m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x04, hcode(v[1]), addr(v[0]), 0) + m.emit(0x80) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VFRCZPS") + } + return p +} + +// VFRCZSD performs "Extract Fraction Scalar Double-Precision Floating-Point". +// +// Mnemonic : VFRCZSD +// Supported forms : (2 forms) +// +// * VFRCZSD xmm, xmm [XOP] +// * VFRCZSD m64, xmm [XOP] +// +func (self *Program) VFRCZSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VFRCZSD", 2, Operands { v0, v1 }) + // VFRCZSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0x83) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VFRCZSD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0x83) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VFRCZSD") + } + return p +} + +// VFRCZSS performs "Extract Fraction Scalar Single-Precision Floating Point". +// +// Mnemonic : VFRCZSS +// Supported forms : (2 forms) +// +// * VFRCZSS xmm, xmm [XOP] +// * VFRCZSS m32, xmm [XOP] +// +func (self *Program) VFRCZSS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VFRCZSS", 2, Operands { v0, v1 }) + // VFRCZSS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0x82) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VFRCZSS m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0x82) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VFRCZSS") + } + return p +} + +// VGATHERDPD performs "Gather Packed Double-Precision Floating-Point Values Using Signed Doubleword Indices". +// +// Mnemonic : VGATHERDPD +// Supported forms : (5 forms) +// +// * VGATHERDPD xmm, vm32x, xmm [AVX2] +// * VGATHERDPD ymm, vm32x, ymm [AVX2] +// * VGATHERDPD vm32y, zmm{k} [AVX512F] +// * VGATHERDPD vm32x, xmm{k} [AVX512F,AVX512VL] +// * VGATHERDPD vm32x, ymm{k} [AVX512F,AVX512VL] +// +func (self *Program) VGATHERDPD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VGATHERDPD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VGATHERDPD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VGATHERDPD takes 2 or 3 operands") + } + // VGATHERDPD xmm, vm32x, xmm + if len(vv) == 1 && isXMM(v0) && isVMX(v1) && isXMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x92) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VGATHERDPD ymm, vm32x, ymm + if len(vv) == 1 && isYMM(v0) && isVMX(v1) && isYMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x92) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VGATHERDPD vm32y, zmm{k} + if len(vv) == 0 && isEVEXVMY(v0) && isZMMk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x92) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VGATHERDPD vm32x, xmm{k} + if len(vv) == 0 && isEVEXVMX(v0) && isXMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x92) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VGATHERDPD vm32x, ymm{k} + if len(vv) == 0 && isEVEXVMX(v0) && isYMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x92) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VGATHERDPD") + } + return p +} + +// VGATHERDPS performs "Gather Packed Single-Precision Floating-Point Values Using Signed Doubleword Indices". +// +// Mnemonic : VGATHERDPS +// Supported forms : (5 forms) +// +// * VGATHERDPS xmm, vm32x, xmm [AVX2] +// * VGATHERDPS ymm, vm32y, ymm [AVX2] +// * VGATHERDPS vm32z, zmm{k} [AVX512F] +// * VGATHERDPS vm32x, xmm{k} [AVX512F,AVX512VL] +// * VGATHERDPS vm32y, ymm{k} [AVX512F,AVX512VL] +// +func (self *Program) VGATHERDPS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VGATHERDPS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VGATHERDPS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VGATHERDPS takes 2 or 3 operands") + } + // VGATHERDPS xmm, vm32x, xmm + if len(vv) == 1 && isXMM(v0) && isVMX(v1) && isXMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x92) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VGATHERDPS ymm, vm32y, ymm + if len(vv) == 1 && isYMM(v0) && isVMY(v1) && isYMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x92) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VGATHERDPS vm32z, zmm{k} + if len(vv) == 0 && isVMZ(v0) && isZMMk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x92) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VGATHERDPS vm32x, xmm{k} + if len(vv) == 0 && isEVEXVMX(v0) && isXMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x92) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VGATHERDPS vm32y, ymm{k} + if len(vv) == 0 && isEVEXVMY(v0) && isYMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x92) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VGATHERDPS") + } + return p +} + +// VGATHERPF0DPD performs "Sparse Prefetch Packed Double-Precision Floating-Point Data Values with Signed Doubleword Indices Using T0 Hint". +// +// Mnemonic : VGATHERPF0DPD +// Supported forms : (1 form) +// +// * VGATHERPF0DPD vm32y{k} [AVX512PF] +// +func (self *Program) VGATHERPF0DPD(v0 interface{}) *Instruction { + p := self.alloc("VGATHERPF0DPD", 1, Operands { v0 }) + // VGATHERPF0DPD vm32y{k} + if isVMYk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc6) + m.mrsd(1, addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VGATHERPF0DPD") + } + return p +} + +// VGATHERPF0DPS performs "Sparse Prefetch Packed Single-Precision Floating-Point Data Values with Signed Doubleword Indices Using T0 Hint". +// +// Mnemonic : VGATHERPF0DPS +// Supported forms : (1 form) +// +// * VGATHERPF0DPS vm32z{k} [AVX512PF] +// +func (self *Program) VGATHERPF0DPS(v0 interface{}) *Instruction { + p := self.alloc("VGATHERPF0DPS", 1, Operands { v0 }) + // VGATHERPF0DPS vm32z{k} + if isVMZk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc6) + m.mrsd(1, addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VGATHERPF0DPS") + } + return p +} + +// VGATHERPF0QPD performs "Sparse Prefetch Packed Double-Precision Floating-Point Data Values with Signed Quadword Indices Using T0 Hint". +// +// Mnemonic : VGATHERPF0QPD +// Supported forms : (1 form) +// +// * VGATHERPF0QPD vm64z{k} [AVX512PF] +// +func (self *Program) VGATHERPF0QPD(v0 interface{}) *Instruction { + p := self.alloc("VGATHERPF0QPD", 1, Operands { v0 }) + // VGATHERPF0QPD vm64z{k} + if isVMZk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc7) + m.mrsd(1, addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VGATHERPF0QPD") + } + return p +} + +// VGATHERPF0QPS performs "Sparse Prefetch Packed Single-Precision Floating-Point Data Values with Signed Quadword Indices Using T0 Hint". +// +// Mnemonic : VGATHERPF0QPS +// Supported forms : (1 form) +// +// * VGATHERPF0QPS vm64z{k} [AVX512PF] +// +func (self *Program) VGATHERPF0QPS(v0 interface{}) *Instruction { + p := self.alloc("VGATHERPF0QPS", 1, Operands { v0 }) + // VGATHERPF0QPS vm64z{k} + if isVMZk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc7) + m.mrsd(1, addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VGATHERPF0QPS") + } + return p +} + +// VGATHERPF1DPD performs "Sparse Prefetch Packed Double-Precision Floating-Point Data Values with Signed Doubleword Indices Using T1 Hint". +// +// Mnemonic : VGATHERPF1DPD +// Supported forms : (1 form) +// +// * VGATHERPF1DPD vm32y{k} [AVX512PF] +// +func (self *Program) VGATHERPF1DPD(v0 interface{}) *Instruction { + p := self.alloc("VGATHERPF1DPD", 1, Operands { v0 }) + // VGATHERPF1DPD vm32y{k} + if isVMYk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc6) + m.mrsd(2, addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VGATHERPF1DPD") + } + return p +} + +// VGATHERPF1DPS performs "Sparse Prefetch Packed Single-Precision Floating-Point Data Values with Signed Doubleword Indices Using T1 Hint". +// +// Mnemonic : VGATHERPF1DPS +// Supported forms : (1 form) +// +// * VGATHERPF1DPS vm32z{k} [AVX512PF] +// +func (self *Program) VGATHERPF1DPS(v0 interface{}) *Instruction { + p := self.alloc("VGATHERPF1DPS", 1, Operands { v0 }) + // VGATHERPF1DPS vm32z{k} + if isVMZk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc6) + m.mrsd(2, addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VGATHERPF1DPS") + } + return p +} + +// VGATHERPF1QPD performs "Sparse Prefetch Packed Double-Precision Floating-Point Data Values with Signed Quadword Indices Using T1 Hint". +// +// Mnemonic : VGATHERPF1QPD +// Supported forms : (1 form) +// +// * VGATHERPF1QPD vm64z{k} [AVX512PF] +// +func (self *Program) VGATHERPF1QPD(v0 interface{}) *Instruction { + p := self.alloc("VGATHERPF1QPD", 1, Operands { v0 }) + // VGATHERPF1QPD vm64z{k} + if isVMZk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc7) + m.mrsd(2, addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VGATHERPF1QPD") + } + return p +} + +// VGATHERPF1QPS performs "Sparse Prefetch Packed Single-Precision Floating-Point Data Values with Signed Quadword Indices Using T1 Hint". +// +// Mnemonic : VGATHERPF1QPS +// Supported forms : (1 form) +// +// * VGATHERPF1QPS vm64z{k} [AVX512PF] +// +func (self *Program) VGATHERPF1QPS(v0 interface{}) *Instruction { + p := self.alloc("VGATHERPF1QPS", 1, Operands { v0 }) + // VGATHERPF1QPS vm64z{k} + if isVMZk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc7) + m.mrsd(2, addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VGATHERPF1QPS") + } + return p +} + +// VGATHERQPD performs "Gather Packed Double-Precision Floating-Point Values Using Signed Quadword Indices". +// +// Mnemonic : VGATHERQPD +// Supported forms : (5 forms) +// +// * VGATHERQPD xmm, vm64x, xmm [AVX2] +// * VGATHERQPD ymm, vm64y, ymm [AVX2] +// * VGATHERQPD vm64z, zmm{k} [AVX512F] +// * VGATHERQPD vm64x, xmm{k} [AVX512F,AVX512VL] +// * VGATHERQPD vm64y, ymm{k} [AVX512F,AVX512VL] +// +func (self *Program) VGATHERQPD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VGATHERQPD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VGATHERQPD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VGATHERQPD takes 2 or 3 operands") + } + // VGATHERQPD xmm, vm64x, xmm + if len(vv) == 1 && isXMM(v0) && isVMX(v1) && isXMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x93) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VGATHERQPD ymm, vm64y, ymm + if len(vv) == 1 && isYMM(v0) && isVMY(v1) && isYMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x93) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VGATHERQPD vm64z, zmm{k} + if len(vv) == 0 && isVMZ(v0) && isZMMk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x93) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VGATHERQPD vm64x, xmm{k} + if len(vv) == 0 && isEVEXVMX(v0) && isXMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x93) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VGATHERQPD vm64y, ymm{k} + if len(vv) == 0 && isEVEXVMY(v0) && isYMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x93) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VGATHERQPD") + } + return p +} + +// VGATHERQPS performs "Gather Packed Single-Precision Floating-Point Values Using Signed Quadword Indices". +// +// Mnemonic : VGATHERQPS +// Supported forms : (5 forms) +// +// * VGATHERQPS xmm, vm64x, xmm [AVX2] +// * VGATHERQPS xmm, vm64y, xmm [AVX2] +// * VGATHERQPS vm64z, ymm{k} [AVX512F] +// * VGATHERQPS vm64x, xmm{k} [AVX512F,AVX512VL] +// * VGATHERQPS vm64y, xmm{k} [AVX512F,AVX512VL] +// +func (self *Program) VGATHERQPS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VGATHERQPS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VGATHERQPS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VGATHERQPS takes 2 or 3 operands") + } + // VGATHERQPS xmm, vm64x, xmm + if len(vv) == 1 && isXMM(v0) && isVMX(v1) && isXMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x93) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VGATHERQPS xmm, vm64y, xmm + if len(vv) == 1 && isXMM(v0) && isVMY(v1) && isXMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x93) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VGATHERQPS vm64z, ymm{k} + if len(vv) == 0 && isVMZ(v0) && isYMMk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x93) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VGATHERQPS vm64x, xmm{k} + if len(vv) == 0 && isEVEXVMX(v0) && isXMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x93) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VGATHERQPS vm64y, xmm{k} + if len(vv) == 0 && isEVEXVMY(v0) && isXMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x93) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VGATHERQPS") + } + return p +} + +// VGETEXPPD performs "Extract Exponents of Packed Double-Precision Floating-Point Values as Double-Precision Floating-Point Values". +// +// Mnemonic : VGETEXPPD +// Supported forms : (7 forms) +// +// * VGETEXPPD m512/m64bcst, zmm{k}{z} [AVX512F] +// * VGETEXPPD {sae}, zmm, zmm{k}{z} [AVX512F] +// * VGETEXPPD zmm, zmm{k}{z} [AVX512F] +// * VGETEXPPD m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VGETEXPPD m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VGETEXPPD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VGETEXPPD ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VGETEXPPD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VGETEXPPD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VGETEXPPD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VGETEXPPD takes 2 or 3 operands") + } + // VGETEXPPD m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VGETEXPPD {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0x42) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VGETEXPPD zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VGETEXPPD m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VGETEXPPD m256/m64bcst, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VGETEXPPD xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VGETEXPPD ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VGETEXPPD") + } + return p +} + +// VGETEXPPS performs "Extract Exponents of Packed Single-Precision Floating-Point Values as Single-Precision Floating-Point Values". +// +// Mnemonic : VGETEXPPS +// Supported forms : (7 forms) +// +// * VGETEXPPS m512/m32bcst, zmm{k}{z} [AVX512F] +// * VGETEXPPS {sae}, zmm, zmm{k}{z} [AVX512F] +// * VGETEXPPS zmm, zmm{k}{z} [AVX512F] +// * VGETEXPPS m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VGETEXPPS m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VGETEXPPS xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VGETEXPPS ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VGETEXPPS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VGETEXPPS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VGETEXPPS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VGETEXPPS takes 2 or 3 operands") + } + // VGETEXPPS m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VGETEXPPS {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0x42) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VGETEXPPS zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VGETEXPPS m128/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VGETEXPPS m256/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x42) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VGETEXPPS xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VGETEXPPS ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x42) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VGETEXPPS") + } + return p +} + +// VGETEXPSD performs "Extract Exponent of Scalar Double-Precision Floating-Point Value as Double-Precision Floating-Point Value". +// +// Mnemonic : VGETEXPSD +// Supported forms : (3 forms) +// +// * VGETEXPSD m64, xmm, xmm{k}{z} [AVX512F] +// * VGETEXPSD {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VGETEXPSD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VGETEXPSD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VGETEXPSD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VGETEXPSD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VGETEXPSD takes 3 or 4 operands") + } + // VGETEXPSD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x43) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VGETEXPSD {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x43) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VGETEXPSD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x43) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VGETEXPSD") + } + return p +} + +// VGETEXPSS performs "Extract Exponent of Scalar Single-Precision Floating-Point Value as Single-Precision Floating-Point Value". +// +// Mnemonic : VGETEXPSS +// Supported forms : (3 forms) +// +// * VGETEXPSS m32, xmm, xmm{k}{z} [AVX512F] +// * VGETEXPSS {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VGETEXPSS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VGETEXPSS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VGETEXPSS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VGETEXPSS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VGETEXPSS takes 3 or 4 operands") + } + // VGETEXPSS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x43) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VGETEXPSS {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x43) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VGETEXPSS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x43) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VGETEXPSS") + } + return p +} + +// VGETMANTPD performs "Extract Normalized Mantissas from Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VGETMANTPD +// Supported forms : (7 forms) +// +// * VGETMANTPD imm8, m512/m64bcst, zmm{k}{z} [AVX512F] +// * VGETMANTPD imm8, {sae}, zmm, zmm{k}{z} [AVX512F] +// * VGETMANTPD imm8, zmm, zmm{k}{z} [AVX512F] +// * VGETMANTPD imm8, m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VGETMANTPD imm8, m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VGETMANTPD imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VGETMANTPD imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VGETMANTPD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VGETMANTPD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VGETMANTPD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VGETMANTPD takes 3 or 4 operands") + } + // VGETMANTPD imm8, m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM512M64bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTPD imm8, {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[3]) << 7) | kcode(v[3]) | 0x18) + m.emit(0x26) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTPD imm8, zmm, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTPD imm8, m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM128M64bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTPD imm8, m256/m64bcst, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM256M64bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTPD imm8, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x08) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTPD imm8, ymm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VGETMANTPD") + } + return p +} + +// VGETMANTPS performs "Extract Normalized Mantissas from Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VGETMANTPS +// Supported forms : (7 forms) +// +// * VGETMANTPS imm8, m512/m32bcst, zmm{k}{z} [AVX512F] +// * VGETMANTPS imm8, {sae}, zmm, zmm{k}{z} [AVX512F] +// * VGETMANTPS imm8, zmm, zmm{k}{z} [AVX512F] +// * VGETMANTPS imm8, m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VGETMANTPS imm8, m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VGETMANTPS imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VGETMANTPS imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VGETMANTPS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VGETMANTPS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VGETMANTPS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VGETMANTPS takes 3 or 4 operands") + } + // VGETMANTPS imm8, m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM512M32bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTPS imm8, {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[3]) << 7) | kcode(v[3]) | 0x18) + m.emit(0x26) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTPS imm8, zmm, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTPS imm8, m128/m32bcst, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM128M32bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTPS imm8, m256/m32bcst, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM256M32bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTPS imm8, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x08) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTPS imm8, ymm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VGETMANTPS") + } + return p +} + +// VGETMANTSD performs "Extract Normalized Mantissa from Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : VGETMANTSD +// Supported forms : (3 forms) +// +// * VGETMANTSD imm8, m64, xmm, xmm{k}{z} [AVX512F] +// * VGETMANTSD imm8, {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VGETMANTSD imm8, xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VGETMANTSD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VGETMANTSD", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VGETMANTSD", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VGETMANTSD takes 4 or 5 operands") + } + // VGETMANTSD imm8, m64, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM64(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x27) + m.mrsd(lcode(v[3]), addr(v[1]), 8) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTSD imm8, {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0xfd ^ (hlcode(v[3]) << 3)) + m.emit((zcode(v[4]) << 7) | (0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0x27) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTSD imm8, xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x27) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VGETMANTSD") + } + return p +} + +// VGETMANTSS performs "Extract Normalized Mantissa from Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : VGETMANTSS +// Supported forms : (3 forms) +// +// * VGETMANTSS imm8, m32, xmm, xmm{k}{z} [AVX512F] +// * VGETMANTSS imm8, {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VGETMANTSS imm8, xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VGETMANTSS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VGETMANTSS", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VGETMANTSS", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VGETMANTSS takes 4 or 5 operands") + } + // VGETMANTSS imm8, m32, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM32(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x27) + m.mrsd(lcode(v[3]), addr(v[1]), 4) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTSS imm8, {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0x7d ^ (hlcode(v[3]) << 3)) + m.emit((zcode(v[4]) << 7) | (0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0x27) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VGETMANTSS imm8, xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x27) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VGETMANTSS") + } + return p +} + +// VHADDPD performs "Packed Double-FP Horizontal Add". +// +// Mnemonic : VHADDPD +// Supported forms : (4 forms) +// +// * VHADDPD xmm, xmm, xmm [AVX] +// * VHADDPD m128, xmm, xmm [AVX] +// * VHADDPD ymm, ymm, ymm [AVX] +// * VHADDPD m256, ymm, ymm [AVX] +// +func (self *Program) VHADDPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VHADDPD", 3, Operands { v0, v1, v2 }) + // VHADDPD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VHADDPD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x7c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VHADDPD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VHADDPD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x7c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VHADDPD") + } + return p +} + +// VHADDPS performs "Packed Single-FP Horizontal Add". +// +// Mnemonic : VHADDPS +// Supported forms : (4 forms) +// +// * VHADDPS xmm, xmm, xmm [AVX] +// * VHADDPS m128, xmm, xmm [AVX] +// * VHADDPS ymm, ymm, ymm [AVX] +// * VHADDPS m256, ymm, ymm [AVX] +// +func (self *Program) VHADDPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VHADDPS", 3, Operands { v0, v1, v2 }) + // VHADDPS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VHADDPS m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x7c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VHADDPS ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VHADDPS m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x7c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VHADDPS") + } + return p +} + +// VHSUBPD performs "Packed Double-FP Horizontal Subtract". +// +// Mnemonic : VHSUBPD +// Supported forms : (4 forms) +// +// * VHSUBPD xmm, xmm, xmm [AVX] +// * VHSUBPD m128, xmm, xmm [AVX] +// * VHSUBPD ymm, ymm, ymm [AVX] +// * VHSUBPD m256, ymm, ymm [AVX] +// +func (self *Program) VHSUBPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VHSUBPD", 3, Operands { v0, v1, v2 }) + // VHSUBPD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VHSUBPD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x7d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VHSUBPD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VHSUBPD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x7d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VHSUBPD") + } + return p +} + +// VHSUBPS performs "Packed Single-FP Horizontal Subtract". +// +// Mnemonic : VHSUBPS +// Supported forms : (4 forms) +// +// * VHSUBPS xmm, xmm, xmm [AVX] +// * VHSUBPS m128, xmm, xmm [AVX] +// * VHSUBPS ymm, ymm, ymm [AVX] +// * VHSUBPS m256, ymm, ymm [AVX] +// +func (self *Program) VHSUBPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VHSUBPS", 3, Operands { v0, v1, v2 }) + // VHSUBPS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VHSUBPS m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x7d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VHSUBPS ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VHSUBPS m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x7d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VHSUBPS") + } + return p +} + +// VINSERTF128 performs "Insert Packed Floating-Point Values". +// +// Mnemonic : VINSERTF128 +// Supported forms : (2 forms) +// +// * VINSERTF128 imm8, xmm, ymm, ymm [AVX] +// * VINSERTF128 imm8, m128, ymm, ymm [AVX] +// +func (self *Program) VINSERTF128(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VINSERTF128", 4, Operands { v0, v1, v2, v3 }) + // VINSERTF128 imm8, xmm, ymm, ymm + if isImm8(v0) && isXMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x18) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTF128 imm8, m128, ymm, ymm + if isImm8(v0) && isM128(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x18) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VINSERTF128") + } + return p +} + +// VINSERTF32X4 performs "Insert 128 Bits of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VINSERTF32X4 +// Supported forms : (4 forms) +// +// * VINSERTF32X4 imm8, xmm, zmm, zmm{k}{z} [AVX512F] +// * VINSERTF32X4 imm8, m128, zmm, zmm{k}{z} [AVX512F] +// * VINSERTF32X4 imm8, xmm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VINSERTF32X4 imm8, m128, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VINSERTF32X4(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VINSERTF32X4", 4, Operands { v0, v1, v2, v3 }) + // VINSERTF32X4 imm8, xmm, zmm, zmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x18) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTF32X4 imm8, m128, zmm, zmm{k}{z} + if isImm8(v0) && isM128(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x18) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTF32X4 imm8, xmm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x18) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTF32X4 imm8, m128, ymm, ymm{k}{z} + if isImm8(v0) && isM128(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x18) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VINSERTF32X4") + } + return p +} + +// VINSERTF32X8 performs "Insert 256 Bits of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VINSERTF32X8 +// Supported forms : (2 forms) +// +// * VINSERTF32X8 imm8, ymm, zmm, zmm{k}{z} [AVX512DQ] +// * VINSERTF32X8 imm8, m256, zmm, zmm{k}{z} [AVX512DQ] +// +func (self *Program) VINSERTF32X8(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VINSERTF32X8", 4, Operands { v0, v1, v2, v3 }) + // VINSERTF32X8 imm8, ymm, zmm, zmm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x1a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTF32X8 imm8, m256, zmm, zmm{k}{z} + if isImm8(v0) && isM256(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x1a) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VINSERTF32X8") + } + return p +} + +// VINSERTF64X2 performs "Insert 128 Bits of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VINSERTF64X2 +// Supported forms : (4 forms) +// +// * VINSERTF64X2 imm8, xmm, zmm, zmm{k}{z} [AVX512DQ] +// * VINSERTF64X2 imm8, m128, zmm, zmm{k}{z} [AVX512DQ] +// * VINSERTF64X2 imm8, xmm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VINSERTF64X2 imm8, m128, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VINSERTF64X2(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VINSERTF64X2", 4, Operands { v0, v1, v2, v3 }) + // VINSERTF64X2 imm8, xmm, zmm, zmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x18) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTF64X2 imm8, m128, zmm, zmm{k}{z} + if isImm8(v0) && isM128(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x18) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTF64X2 imm8, xmm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x18) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTF64X2 imm8, m128, ymm, ymm{k}{z} + if isImm8(v0) && isM128(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x18) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VINSERTF64X2") + } + return p +} + +// VINSERTF64X4 performs "Insert 256 Bits of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VINSERTF64X4 +// Supported forms : (2 forms) +// +// * VINSERTF64X4 imm8, ymm, zmm, zmm{k}{z} [AVX512F] +// * VINSERTF64X4 imm8, m256, zmm, zmm{k}{z} [AVX512F] +// +func (self *Program) VINSERTF64X4(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VINSERTF64X4", 4, Operands { v0, v1, v2, v3 }) + // VINSERTF64X4 imm8, ymm, zmm, zmm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x1a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTF64X4 imm8, m256, zmm, zmm{k}{z} + if isImm8(v0) && isM256(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x1a) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VINSERTF64X4") + } + return p +} + +// VINSERTI128 performs "Insert Packed Integer Values". +// +// Mnemonic : VINSERTI128 +// Supported forms : (2 forms) +// +// * VINSERTI128 imm8, xmm, ymm, ymm [AVX2] +// * VINSERTI128 imm8, m128, ymm, ymm [AVX2] +// +func (self *Program) VINSERTI128(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VINSERTI128", 4, Operands { v0, v1, v2, v3 }) + // VINSERTI128 imm8, xmm, ymm, ymm + if isImm8(v0) && isXMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x38) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTI128 imm8, m128, ymm, ymm + if isImm8(v0) && isM128(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x38) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VINSERTI128") + } + return p +} + +// VINSERTI32X4 performs "Insert 128 Bits of Packed Doubleword Integer Values". +// +// Mnemonic : VINSERTI32X4 +// Supported forms : (4 forms) +// +// * VINSERTI32X4 imm8, xmm, zmm, zmm{k}{z} [AVX512F] +// * VINSERTI32X4 imm8, m128, zmm, zmm{k}{z} [AVX512F] +// * VINSERTI32X4 imm8, xmm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VINSERTI32X4 imm8, m128, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VINSERTI32X4(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VINSERTI32X4", 4, Operands { v0, v1, v2, v3 }) + // VINSERTI32X4 imm8, xmm, zmm, zmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x38) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTI32X4 imm8, m128, zmm, zmm{k}{z} + if isImm8(v0) && isM128(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x38) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTI32X4 imm8, xmm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x38) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTI32X4 imm8, m128, ymm, ymm{k}{z} + if isImm8(v0) && isM128(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x38) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VINSERTI32X4") + } + return p +} + +// VINSERTI32X8 performs "Insert 256 Bits of Packed Doubleword Integer Values". +// +// Mnemonic : VINSERTI32X8 +// Supported forms : (2 forms) +// +// * VINSERTI32X8 imm8, ymm, zmm, zmm{k}{z} [AVX512DQ] +// * VINSERTI32X8 imm8, m256, zmm, zmm{k}{z} [AVX512DQ] +// +func (self *Program) VINSERTI32X8(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VINSERTI32X8", 4, Operands { v0, v1, v2, v3 }) + // VINSERTI32X8 imm8, ymm, zmm, zmm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x3a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTI32X8 imm8, m256, zmm, zmm{k}{z} + if isImm8(v0) && isM256(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x3a) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VINSERTI32X8") + } + return p +} + +// VINSERTI64X2 performs "Insert 128 Bits of Packed Quadword Integer Values". +// +// Mnemonic : VINSERTI64X2 +// Supported forms : (4 forms) +// +// * VINSERTI64X2 imm8, xmm, zmm, zmm{k}{z} [AVX512DQ] +// * VINSERTI64X2 imm8, m128, zmm, zmm{k}{z} [AVX512DQ] +// * VINSERTI64X2 imm8, xmm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VINSERTI64X2 imm8, m128, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VINSERTI64X2(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VINSERTI64X2", 4, Operands { v0, v1, v2, v3 }) + // VINSERTI64X2 imm8, xmm, zmm, zmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x38) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTI64X2 imm8, m128, zmm, zmm{k}{z} + if isImm8(v0) && isM128(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x38) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTI64X2 imm8, xmm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x38) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTI64X2 imm8, m128, ymm, ymm{k}{z} + if isImm8(v0) && isM128(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x38) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VINSERTI64X2") + } + return p +} + +// VINSERTI64X4 performs "Insert 256 Bits of Packed Quadword Integer Values". +// +// Mnemonic : VINSERTI64X4 +// Supported forms : (2 forms) +// +// * VINSERTI64X4 imm8, ymm, zmm, zmm{k}{z} [AVX512F] +// * VINSERTI64X4 imm8, m256, zmm, zmm{k}{z} [AVX512F] +// +func (self *Program) VINSERTI64X4(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VINSERTI64X4", 4, Operands { v0, v1, v2, v3 }) + // VINSERTI64X4 imm8, ymm, zmm, zmm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x3a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTI64X4 imm8, m256, zmm, zmm{k}{z} + if isImm8(v0) && isM256(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x3a) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VINSERTI64X4") + } + return p +} + +// VINSERTPS performs "Insert Packed Single Precision Floating-Point Value". +// +// Mnemonic : VINSERTPS +// Supported forms : (4 forms) +// +// * VINSERTPS imm8, xmm, xmm, xmm [AVX] +// * VINSERTPS imm8, m32, xmm, xmm [AVX] +// * VINSERTPS imm8, xmm, xmm, xmm [AVX512F] +// * VINSERTPS imm8, m32, xmm, xmm [AVX512F] +// +func (self *Program) VINSERTPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VINSERTPS", 4, Operands { v0, v1, v2, v3 }) + // VINSERTPS imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x21) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTPS imm8, m32, xmm, xmm + if isImm8(v0) && isM32(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x21) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTPS imm8, xmm, xmm, xmm + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | 0x00) + m.emit(0x21) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VINSERTPS imm8, m32, xmm, xmm + if isImm8(v0) && isM32(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), 0, 0, 0) + m.emit(0x21) + m.mrsd(lcode(v[3]), addr(v[1]), 4) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VINSERTPS") + } + return p +} + +// VLDDQU performs "Load Unaligned Integer 128 Bits". +// +// Mnemonic : VLDDQU +// Supported forms : (2 forms) +// +// * VLDDQU m128, xmm [AVX] +// * VLDDQU m256, ymm [AVX] +// +func (self *Program) VLDDQU(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VLDDQU", 2, Operands { v0, v1 }) + // VLDDQU m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[1]), addr(v[0]), 0) + m.emit(0xf0) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VLDDQU m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[1]), addr(v[0]), 0) + m.emit(0xf0) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VLDDQU") + } + return p +} + +// VLDMXCSR performs "Load MXCSR Register". +// +// Mnemonic : VLDMXCSR +// Supported forms : (1 form) +// +// * VLDMXCSR m32 [AVX] +// +func (self *Program) VLDMXCSR(v0 interface{}) *Instruction { + p := self.alloc("VLDMXCSR", 1, Operands { v0 }) + // VLDMXCSR m32 + if isM32(v0) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, 0, addr(v[0]), 0) + m.emit(0xae) + m.mrsd(2, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VLDMXCSR") + } + return p +} + +// VMASKMOVDQU performs "Store Selected Bytes of Double Quadword". +// +// Mnemonic : VMASKMOVDQU +// Supported forms : (1 form) +// +// * VMASKMOVDQU xmm, xmm [AVX] +// +func (self *Program) VMASKMOVDQU(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMASKMOVDQU", 2, Operands { v0, v1 }) + // VMASKMOVDQU xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0xf7) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMASKMOVDQU") + } + return p +} + +// VMASKMOVPD performs "Conditional Move Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VMASKMOVPD +// Supported forms : (4 forms) +// +// * VMASKMOVPD m128, xmm, xmm [AVX] +// * VMASKMOVPD m256, ymm, ymm [AVX] +// * VMASKMOVPD xmm, xmm, m128 [AVX] +// * VMASKMOVPD ymm, ymm, m256 [AVX] +// +func (self *Program) VMASKMOVPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VMASKMOVPD", 3, Operands { v0, v1, v2 }) + // VMASKMOVPD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x2d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMASKMOVPD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x2d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMASKMOVPD xmm, xmm, m128 + if isXMM(v0) && isXMM(v1) && isM128(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[0]), addr(v[2]), hlcode(v[1])) + m.emit(0x2f) + m.mrsd(lcode(v[0]), addr(v[2]), 1) + }) + } + // VMASKMOVPD ymm, ymm, m256 + if isYMM(v0) && isYMM(v1) && isM256(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[0]), addr(v[2]), hlcode(v[1])) + m.emit(0x2f) + m.mrsd(lcode(v[0]), addr(v[2]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VMASKMOVPD") + } + return p +} + +// VMASKMOVPS performs "Conditional Move Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VMASKMOVPS +// Supported forms : (4 forms) +// +// * VMASKMOVPS m128, xmm, xmm [AVX] +// * VMASKMOVPS m256, ymm, ymm [AVX] +// * VMASKMOVPS xmm, xmm, m128 [AVX] +// * VMASKMOVPS ymm, ymm, m256 [AVX] +// +func (self *Program) VMASKMOVPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VMASKMOVPS", 3, Operands { v0, v1, v2 }) + // VMASKMOVPS m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x2c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMASKMOVPS m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x2c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMASKMOVPS xmm, xmm, m128 + if isXMM(v0) && isXMM(v1) && isM128(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[0]), addr(v[2]), hlcode(v[1])) + m.emit(0x2e) + m.mrsd(lcode(v[0]), addr(v[2]), 1) + }) + } + // VMASKMOVPS ymm, ymm, m256 + if isYMM(v0) && isYMM(v1) && isM256(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[0]), addr(v[2]), hlcode(v[1])) + m.emit(0x2e) + m.mrsd(lcode(v[0]), addr(v[2]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VMASKMOVPS") + } + return p +} + +// VMAXPD performs "Return Maximum Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VMAXPD +// Supported forms : (11 forms) +// +// * VMAXPD xmm, xmm, xmm [AVX] +// * VMAXPD m128, xmm, xmm [AVX] +// * VMAXPD ymm, ymm, ymm [AVX] +// * VMAXPD m256, ymm, ymm [AVX] +// * VMAXPD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VMAXPD {sae}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VMAXPD zmm, zmm, zmm{k}{z} [AVX512F] +// * VMAXPD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMAXPD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMAXPD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMAXPD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMAXPD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMAXPD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VMAXPD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VMAXPD takes 3 or 4 operands") + } + // VMAXPD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMAXPD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMAXPD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMAXPD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMAXPD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VMAXPD {sae}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VMAXPD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMAXPD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VMAXPD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMAXPD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VMAXPD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMAXPD") + } + return p +} + +// VMAXPS performs "Return Maximum Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VMAXPS +// Supported forms : (11 forms) +// +// * VMAXPS xmm, xmm, xmm [AVX] +// * VMAXPS m128, xmm, xmm [AVX] +// * VMAXPS ymm, ymm, ymm [AVX] +// * VMAXPS m256, ymm, ymm [AVX] +// * VMAXPS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VMAXPS {sae}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VMAXPS zmm, zmm, zmm{k}{z} [AVX512F] +// * VMAXPS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMAXPS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMAXPS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMAXPS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMAXPS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMAXPS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VMAXPS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VMAXPS takes 3 or 4 operands") + } + // VMAXPS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMAXPS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMAXPS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMAXPS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMAXPS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VMAXPS {sae}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VMAXPS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMAXPS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VMAXPS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMAXPS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VMAXPS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMAXPS") + } + return p +} + +// VMAXSD performs "Return Maximum Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : VMAXSD +// Supported forms : (5 forms) +// +// * VMAXSD xmm, xmm, xmm [AVX] +// * VMAXSD m64, xmm, xmm [AVX] +// * VMAXSD m64, xmm, xmm{k}{z} [AVX512F] +// * VMAXSD {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VMAXSD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VMAXSD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMAXSD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VMAXSD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VMAXSD takes 3 or 4 operands") + } + // VMAXSD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMAXSD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMAXSD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VMAXSD {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xff ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VMAXSD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMAXSD") + } + return p +} + +// VMAXSS performs "Return Maximum Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : VMAXSS +// Supported forms : (5 forms) +// +// * VMAXSS xmm, xmm, xmm [AVX] +// * VMAXSS m32, xmm, xmm [AVX] +// * VMAXSS m32, xmm, xmm{k}{z} [AVX512F] +// * VMAXSS {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VMAXSS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VMAXSS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMAXSS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VMAXSS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VMAXSS takes 3 or 4 operands") + } + // VMAXSS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMAXSS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMAXSS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x5f) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VMAXSS {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7e ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VMAXSS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMAXSS") + } + return p +} + +// VMINPD performs "Return Minimum Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VMINPD +// Supported forms : (11 forms) +// +// * VMINPD xmm, xmm, xmm [AVX] +// * VMINPD m128, xmm, xmm [AVX] +// * VMINPD ymm, ymm, ymm [AVX] +// * VMINPD m256, ymm, ymm [AVX] +// * VMINPD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VMINPD {sae}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VMINPD zmm, zmm, zmm{k}{z} [AVX512F] +// * VMINPD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMINPD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMINPD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMINPD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMINPD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMINPD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VMINPD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VMINPD takes 3 or 4 operands") + } + // VMINPD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMINPD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMINPD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMINPD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMINPD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VMINPD {sae}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VMINPD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMINPD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VMINPD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMINPD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VMINPD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMINPD") + } + return p +} + +// VMINPS performs "Return Minimum Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VMINPS +// Supported forms : (11 forms) +// +// * VMINPS xmm, xmm, xmm [AVX] +// * VMINPS m128, xmm, xmm [AVX] +// * VMINPS ymm, ymm, ymm [AVX] +// * VMINPS m256, ymm, ymm [AVX] +// * VMINPS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VMINPS {sae}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VMINPS zmm, zmm, zmm{k}{z} [AVX512F] +// * VMINPS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMINPS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMINPS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMINPS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMINPS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMINPS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VMINPS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VMINPS takes 3 or 4 operands") + } + // VMINPS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMINPS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMINPS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMINPS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMINPS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VMINPS {sae}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VMINPS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMINPS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VMINPS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMINPS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VMINPS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMINPS") + } + return p +} + +// VMINSD performs "Return Minimum Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : VMINSD +// Supported forms : (5 forms) +// +// * VMINSD xmm, xmm, xmm [AVX] +// * VMINSD m64, xmm, xmm [AVX] +// * VMINSD m64, xmm, xmm{k}{z} [AVX512F] +// * VMINSD {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VMINSD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VMINSD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMINSD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VMINSD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VMINSD takes 3 or 4 operands") + } + // VMINSD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMINSD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMINSD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VMINSD {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xff ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VMINSD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMINSD") + } + return p +} + +// VMINSS performs "Return Minimum Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : VMINSS +// Supported forms : (5 forms) +// +// * VMINSS xmm, xmm, xmm [AVX] +// * VMINSS m32, xmm, xmm [AVX] +// * VMINSS m32, xmm, xmm{k}{z} [AVX512F] +// * VMINSS {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VMINSS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VMINSS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMINSS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VMINSS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VMINSS takes 3 or 4 operands") + } + // VMINSS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMINSS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMINSS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x5d) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VMINSS {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7e ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VMINSS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMINSS") + } + return p +} + +// VMOVAPD performs "Move Aligned Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VMOVAPD +// Supported forms : (15 forms) +// +// * VMOVAPD xmm, xmm [AVX] +// * VMOVAPD m128, xmm [AVX] +// * VMOVAPD ymm, ymm [AVX] +// * VMOVAPD m256, ymm [AVX] +// * VMOVAPD xmm, m128 [AVX] +// * VMOVAPD ymm, m256 [AVX] +// * VMOVAPD zmm, m512{k}{z} [AVX512F] +// * VMOVAPD zmm, zmm{k}{z} [AVX512F] +// * VMOVAPD m512, zmm{k}{z} [AVX512F] +// * VMOVAPD xmm, m128{k}{z} [AVX512F,AVX512VL] +// * VMOVAPD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVAPD ymm, m256{k}{z} [AVX512F,AVX512VL] +// * VMOVAPD ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMOVAPD m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVAPD m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMOVAPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVAPD", 2, Operands { v0, v1 }) + // VMOVAPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), v[1], 0) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVAPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), addr(v[0]), 0) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVAPD ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), v[0], 0) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[0]), v[1], 0) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVAPD m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), addr(v[0]), 0) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVAPD xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), addr(v[1]), 0) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVAPD ymm, m256 + if isYMM(v0) && isM256(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[0]), addr(v[1]), 0) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVAPD zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVAPD zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVAPD m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVAPD xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVAPD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVAPD ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VMOVAPD ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVAPD m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVAPD m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVAPD") + } + return p +} + +// VMOVAPS performs "Move Aligned Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VMOVAPS +// Supported forms : (15 forms) +// +// * VMOVAPS xmm, xmm [AVX] +// * VMOVAPS m128, xmm [AVX] +// * VMOVAPS ymm, ymm [AVX] +// * VMOVAPS m256, ymm [AVX] +// * VMOVAPS xmm, m128 [AVX] +// * VMOVAPS ymm, m256 [AVX] +// * VMOVAPS zmm, m512{k}{z} [AVX512F] +// * VMOVAPS zmm, zmm{k}{z} [AVX512F] +// * VMOVAPS m512, zmm{k}{z} [AVX512F] +// * VMOVAPS xmm, m128{k}{z} [AVX512F,AVX512VL] +// * VMOVAPS xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVAPS ymm, m256{k}{z} [AVX512F,AVX512VL] +// * VMOVAPS ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMOVAPS m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVAPS m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMOVAPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVAPS", 2, Operands { v0, v1 }) + // VMOVAPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), v[0], 0) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[0]), v[1], 0) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVAPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), addr(v[0]), 0) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVAPS ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), v[0], 0) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[0]), v[1], 0) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVAPS m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), addr(v[0]), 0) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVAPS xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[0]), addr(v[1]), 0) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVAPS ymm, m256 + if isYMM(v0) && isM256(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[0]), addr(v[1]), 0) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVAPS zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVAPS zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVAPS m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVAPS xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVAPS xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVAPS ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x29) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VMOVAPS ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x29) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVAPS m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVAPS m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x28) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVAPS") + } + return p +} + +// VMOVD performs "Move Doubleword". +// +// Mnemonic : VMOVD +// Supported forms : (8 forms) +// +// * VMOVD xmm, r32 [AVX] +// * VMOVD r32, xmm [AVX] +// * VMOVD m32, xmm [AVX] +// * VMOVD xmm, m32 [AVX] +// * VMOVD xmm, r32 [AVX512F] +// * VMOVD r32, xmm [AVX512F] +// * VMOVD m32, xmm [AVX512F] +// * VMOVD xmm, m32 [AVX512F] +// +func (self *Program) VMOVD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVD", 2, Operands { v0, v1 }) + // VMOVD xmm, r32 + if isXMM(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), v[1], 0) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVD r32, xmm + if isReg32(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0x6e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVD m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), addr(v[0]), 0) + m.emit(0x6e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVD xmm, m32 + if isXMM(v0) && isM32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), addr(v[1]), 0) + m.emit(0x7e) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVD xmm, r32 + if isEVEXXMM(v0) && isReg32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7d) + m.emit(0x08) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVD r32, xmm + if isReg32(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit(0x08) + m.emit(0x6e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVD m32, xmm + if isM32(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x6e) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VMOVD xmm, m32 + if isEVEXXMM(v0) && isM32(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0x7e) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVD") + } + return p +} + +// VMOVDDUP performs "Move One Double-FP and Duplicate". +// +// Mnemonic : VMOVDDUP +// Supported forms : (10 forms) +// +// * VMOVDDUP xmm, xmm [AVX] +// * VMOVDDUP m64, xmm [AVX] +// * VMOVDDUP ymm, ymm [AVX] +// * VMOVDDUP m256, ymm [AVX] +// * VMOVDDUP zmm, zmm{k}{z} [AVX512F] +// * VMOVDDUP m512, zmm{k}{z} [AVX512F] +// * VMOVDDUP xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVDDUP ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMOVDDUP m64, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVDDUP m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMOVDDUP(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVDDUP", 2, Operands { v0, v1 }) + // VMOVDDUP xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[1]), v[0], 0) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVDDUP m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[1]), addr(v[0]), 0) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVDDUP ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[1]), v[0], 0) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVDDUP m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[1]), addr(v[0]), 0) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVDDUP zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVDDUP m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVDDUP xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVDDUP ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVDDUP m64, xmm{k}{z} + if isM64(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VMOVDDUP m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVDDUP") + } + return p +} + +// VMOVDQA performs "Move Aligned Double Quadword". +// +// Mnemonic : VMOVDQA +// Supported forms : (6 forms) +// +// * VMOVDQA xmm, xmm [AVX] +// * VMOVDQA m128, xmm [AVX] +// * VMOVDQA ymm, ymm [AVX] +// * VMOVDQA m256, ymm [AVX] +// * VMOVDQA xmm, m128 [AVX] +// * VMOVDQA ymm, m256 [AVX] +// +func (self *Program) VMOVDQA(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVDQA", 2, Operands { v0, v1 }) + // VMOVDQA xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), v[1], 0) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQA m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), addr(v[0]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVDQA ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), v[0], 0) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[0]), v[1], 0) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQA m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), addr(v[0]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVDQA xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), addr(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVDQA ymm, m256 + if isYMM(v0) && isM256(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[0]), addr(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVDQA") + } + return p +} + +// VMOVDQA32 performs "Move Aligned Doubleword Values". +// +// Mnemonic : VMOVDQA32 +// Supported forms : (9 forms) +// +// * VMOVDQA32 zmm, m512{k}{z} [AVX512F] +// * VMOVDQA32 zmm, zmm{k}{z} [AVX512F] +// * VMOVDQA32 m512, zmm{k}{z} [AVX512F] +// * VMOVDQA32 xmm, m128{k}{z} [AVX512F,AVX512VL] +// * VMOVDQA32 xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVDQA32 ymm, m256{k}{z} [AVX512F,AVX512VL] +// * VMOVDQA32 ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMOVDQA32 m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVDQA32 m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMOVDQA32(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVDQA32", 2, Operands { v0, v1 }) + // VMOVDQA32 zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVDQA32 zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQA32 m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVDQA32 xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVDQA32 xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQA32 ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VMOVDQA32 ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQA32 m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVDQA32 m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVDQA32") + } + return p +} + +// VMOVDQA64 performs "Move Aligned Quadword Values". +// +// Mnemonic : VMOVDQA64 +// Supported forms : (9 forms) +// +// * VMOVDQA64 zmm, m512{k}{z} [AVX512F] +// * VMOVDQA64 zmm, zmm{k}{z} [AVX512F] +// * VMOVDQA64 m512, zmm{k}{z} [AVX512F] +// * VMOVDQA64 xmm, m128{k}{z} [AVX512F,AVX512VL] +// * VMOVDQA64 xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVDQA64 ymm, m256{k}{z} [AVX512F,AVX512VL] +// * VMOVDQA64 ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMOVDQA64 m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVDQA64 m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMOVDQA64(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVDQA64", 2, Operands { v0, v1 }) + // VMOVDQA64 zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVDQA64 zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQA64 m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVDQA64 xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVDQA64 xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQA64 ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VMOVDQA64 ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQA64 m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVDQA64 m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVDQA64") + } + return p +} + +// VMOVDQU performs "Move Unaligned Double Quadword". +// +// Mnemonic : VMOVDQU +// Supported forms : (6 forms) +// +// * VMOVDQU xmm, xmm [AVX] +// * VMOVDQU m128, xmm [AVX] +// * VMOVDQU ymm, ymm [AVX] +// * VMOVDQU m256, ymm [AVX] +// * VMOVDQU xmm, m128 [AVX] +// * VMOVDQU ymm, m256 [AVX] +// +func (self *Program) VMOVDQU(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVDQU", 2, Operands { v0, v1 }) + // VMOVDQU xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), v[0], 0) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[0]), v[1], 0) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), addr(v[0]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVDQU ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[1]), v[0], 0) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[0]), v[1], 0) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[1]), addr(v[0]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVDQU xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[0]), addr(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVDQU ymm, m256 + if isYMM(v0) && isM256(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[0]), addr(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVDQU") + } + return p +} + +// VMOVDQU16 performs "Move Unaligned Word Values". +// +// Mnemonic : VMOVDQU16 +// Supported forms : (9 forms) +// +// * VMOVDQU16 zmm, m512{k}{z} [AVX512BW] +// * VMOVDQU16 zmm, zmm{k}{z} [AVX512BW] +// * VMOVDQU16 m512, zmm{k}{z} [AVX512BW] +// * VMOVDQU16 xmm, m128{k}{z} [AVX512BW,AVX512VL] +// * VMOVDQU16 xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VMOVDQU16 ymm, m256{k}{z} [AVX512BW,AVX512VL] +// * VMOVDQU16 ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VMOVDQU16 m128, xmm{k}{z} [AVX512BW,AVX512VL] +// * VMOVDQU16 m256, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VMOVDQU16(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVDQU16", 2, Operands { v0, v1 }) + // VMOVDQU16 zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVDQU16 zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU16 m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVDQU16 xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVDQU16 xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU16 ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VMOVDQU16 ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xff) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU16 m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVDQU16 m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVDQU16") + } + return p +} + +// VMOVDQU32 performs "Move Unaligned Doubleword Values". +// +// Mnemonic : VMOVDQU32 +// Supported forms : (9 forms) +// +// * VMOVDQU32 zmm, m512{k}{z} [AVX512F] +// * VMOVDQU32 zmm, zmm{k}{z} [AVX512F] +// * VMOVDQU32 m512, zmm{k}{z} [AVX512F] +// * VMOVDQU32 xmm, m128{k}{z} [AVX512F,AVX512VL] +// * VMOVDQU32 xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVDQU32 ymm, m256{k}{z} [AVX512F,AVX512VL] +// * VMOVDQU32 ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMOVDQU32 m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVDQU32 m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMOVDQU32(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVDQU32", 2, Operands { v0, v1 }) + // VMOVDQU32 zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVDQU32 zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU32 m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVDQU32 xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVDQU32 xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU32 ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VMOVDQU32 ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU32 m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVDQU32 m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVDQU32") + } + return p +} + +// VMOVDQU64 performs "Move Unaligned Quadword Values". +// +// Mnemonic : VMOVDQU64 +// Supported forms : (9 forms) +// +// * VMOVDQU64 zmm, m512{k}{z} [AVX512F] +// * VMOVDQU64 zmm, zmm{k}{z} [AVX512F] +// * VMOVDQU64 m512, zmm{k}{z} [AVX512F] +// * VMOVDQU64 xmm, m128{k}{z} [AVX512F,AVX512VL] +// * VMOVDQU64 xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVDQU64 ymm, m256{k}{z} [AVX512F,AVX512VL] +// * VMOVDQU64 ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMOVDQU64 m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVDQU64 m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMOVDQU64(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVDQU64", 2, Operands { v0, v1 }) + // VMOVDQU64 zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVDQU64 zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU64 m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVDQU64 xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVDQU64 xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU64 ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VMOVDQU64 ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfe) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU64 m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVDQU64 m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVDQU64") + } + return p +} + +// VMOVDQU8 performs "Move Unaligned Byte Values". +// +// Mnemonic : VMOVDQU8 +// Supported forms : (9 forms) +// +// * VMOVDQU8 zmm, m512{k}{z} [AVX512BW] +// * VMOVDQU8 zmm, zmm{k}{z} [AVX512BW] +// * VMOVDQU8 m512, zmm{k}{z} [AVX512BW] +// * VMOVDQU8 xmm, m128{k}{z} [AVX512BW,AVX512VL] +// * VMOVDQU8 xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VMOVDQU8 ymm, m256{k}{z} [AVX512BW,AVX512VL] +// * VMOVDQU8 ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VMOVDQU8 m128, xmm{k}{z} [AVX512BW,AVX512VL] +// * VMOVDQU8 m256, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VMOVDQU8(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVDQU8", 2, Operands { v0, v1 }) + // VMOVDQU8 zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVDQU8 zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU8 m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVDQU8 xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVDQU8 xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU8 ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x7f) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VMOVDQU8 ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x6f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVDQU8 m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVDQU8 m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x6f) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVDQU8") + } + return p +} + +// VMOVHLPS performs "Move Packed Single-Precision Floating-Point Values High to Low". +// +// Mnemonic : VMOVHLPS +// Supported forms : (2 forms) +// +// * VMOVHLPS xmm, xmm, xmm [AVX] +// * VMOVHLPS xmm, xmm, xmm [AVX512F] +// +func (self *Program) VMOVHLPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VMOVHLPS", 3, Operands { v0, v1, v2 }) + // VMOVHLPS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x12) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMOVHLPS xmm, xmm, xmm + if isEVEXXMM(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x00) + m.emit(0x12) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVHLPS") + } + return p +} + +// VMOVHPD performs "Move High Packed Double-Precision Floating-Point Value". +// +// Mnemonic : VMOVHPD +// Supported forms : (4 forms) +// +// * VMOVHPD xmm, m64 [AVX] +// * VMOVHPD m64, xmm, xmm [AVX] +// * VMOVHPD xmm, m64 [AVX512F] +// * VMOVHPD m64, xmm, xmm [AVX512F] +// +func (self *Program) VMOVHPD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMOVHPD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VMOVHPD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VMOVHPD takes 2 or 3 operands") + } + // VMOVHPD xmm, m64 + if len(vv) == 0 && isXMM(v0) && isM64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), addr(v[1]), 0) + m.emit(0x17) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVHPD m64, xmm, xmm + if len(vv) == 1 && isM64(v0) && isXMM(v1) && isXMM(vv[0]) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x16) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMOVHPD xmm, m64 + if len(vv) == 0 && isEVEXXMM(v0) && isM64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0x17) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VMOVHPD m64, xmm, xmm + if len(vv) == 1 && isM64(v0) && isEVEXXMM(v1) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0x16) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVHPD") + } + return p +} + +// VMOVHPS performs "Move High Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VMOVHPS +// Supported forms : (4 forms) +// +// * VMOVHPS xmm, m64 [AVX] +// * VMOVHPS m64, xmm, xmm [AVX] +// * VMOVHPS xmm, m64 [AVX512F] +// * VMOVHPS m64, xmm, xmm [AVX512F] +// +func (self *Program) VMOVHPS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMOVHPS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VMOVHPS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VMOVHPS takes 2 or 3 operands") + } + // VMOVHPS xmm, m64 + if len(vv) == 0 && isXMM(v0) && isM64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[0]), addr(v[1]), 0) + m.emit(0x17) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVHPS m64, xmm, xmm + if len(vv) == 1 && isM64(v0) && isXMM(v1) && isXMM(vv[0]) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x16) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMOVHPS xmm, m64 + if len(vv) == 0 && isEVEXXMM(v0) && isM64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0x17) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VMOVHPS m64, xmm, xmm + if len(vv) == 1 && isM64(v0) && isEVEXXMM(v1) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0x16) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVHPS") + } + return p +} + +// VMOVLHPS performs "Move Packed Single-Precision Floating-Point Values Low to High". +// +// Mnemonic : VMOVLHPS +// Supported forms : (2 forms) +// +// * VMOVLHPS xmm, xmm, xmm [AVX] +// * VMOVLHPS xmm, xmm, xmm [AVX512F] +// +func (self *Program) VMOVLHPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VMOVLHPS", 3, Operands { v0, v1, v2 }) + // VMOVLHPS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x16) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMOVLHPS xmm, xmm, xmm + if isEVEXXMM(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x00) + m.emit(0x16) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVLHPS") + } + return p +} + +// VMOVLPD performs "Move Low Packed Double-Precision Floating-Point Value". +// +// Mnemonic : VMOVLPD +// Supported forms : (4 forms) +// +// * VMOVLPD xmm, m64 [AVX] +// * VMOVLPD m64, xmm, xmm [AVX] +// * VMOVLPD xmm, m64 [AVX512F] +// * VMOVLPD m64, xmm, xmm [AVX512F] +// +func (self *Program) VMOVLPD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMOVLPD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VMOVLPD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VMOVLPD takes 2 or 3 operands") + } + // VMOVLPD xmm, m64 + if len(vv) == 0 && isXMM(v0) && isM64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), addr(v[1]), 0) + m.emit(0x13) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVLPD m64, xmm, xmm + if len(vv) == 1 && isM64(v0) && isXMM(v1) && isXMM(vv[0]) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x12) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMOVLPD xmm, m64 + if len(vv) == 0 && isEVEXXMM(v0) && isM64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0x13) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VMOVLPD m64, xmm, xmm + if len(vv) == 1 && isM64(v0) && isEVEXXMM(v1) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0x12) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVLPD") + } + return p +} + +// VMOVLPS performs "Move Low Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VMOVLPS +// Supported forms : (4 forms) +// +// * VMOVLPS xmm, m64 [AVX] +// * VMOVLPS m64, xmm, xmm [AVX] +// * VMOVLPS xmm, m64 [AVX512F] +// * VMOVLPS m64, xmm, xmm [AVX512F] +// +func (self *Program) VMOVLPS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMOVLPS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VMOVLPS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VMOVLPS takes 2 or 3 operands") + } + // VMOVLPS xmm, m64 + if len(vv) == 0 && isXMM(v0) && isM64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[0]), addr(v[1]), 0) + m.emit(0x13) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVLPS m64, xmm, xmm + if len(vv) == 1 && isM64(v0) && isXMM(v1) && isXMM(vv[0]) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x12) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMOVLPS xmm, m64 + if len(vv) == 0 && isEVEXXMM(v0) && isM64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0x13) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VMOVLPS m64, xmm, xmm + if len(vv) == 1 && isM64(v0) && isEVEXXMM(v1) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0x12) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVLPS") + } + return p +} + +// VMOVMSKPD performs "Extract Packed Double-Precision Floating-Point Sign Mask". +// +// Mnemonic : VMOVMSKPD +// Supported forms : (2 forms) +// +// * VMOVMSKPD xmm, r32 [AVX] +// * VMOVMSKPD ymm, r32 [AVX] +// +func (self *Program) VMOVMSKPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVMSKPD", 2, Operands { v0, v1 }) + // VMOVMSKPD xmm, r32 + if isXMM(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0x50) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVMSKPD ymm, r32 + if isYMM(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), v[0], 0) + m.emit(0x50) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVMSKPD") + } + return p +} + +// VMOVMSKPS performs "Extract Packed Single-Precision Floating-Point Sign Mask". +// +// Mnemonic : VMOVMSKPS +// Supported forms : (2 forms) +// +// * VMOVMSKPS xmm, r32 [AVX] +// * VMOVMSKPS ymm, r32 [AVX] +// +func (self *Program) VMOVMSKPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVMSKPS", 2, Operands { v0, v1 }) + // VMOVMSKPS xmm, r32 + if isXMM(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), v[0], 0) + m.emit(0x50) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVMSKPS ymm, r32 + if isYMM(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), v[0], 0) + m.emit(0x50) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVMSKPS") + } + return p +} + +// VMOVNTDQ performs "Store Double Quadword Using Non-Temporal Hint". +// +// Mnemonic : VMOVNTDQ +// Supported forms : (5 forms) +// +// * VMOVNTDQ xmm, m128 [AVX] +// * VMOVNTDQ ymm, m256 [AVX] +// * VMOVNTDQ zmm, m512 [AVX512F] +// * VMOVNTDQ xmm, m128 [AVX512F,AVX512VL] +// * VMOVNTDQ ymm, m256 [AVX512F,AVX512VL] +// +func (self *Program) VMOVNTDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVNTDQ", 2, Operands { v0, v1 }) + // VMOVNTDQ xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), addr(v[1]), 0) + m.emit(0xe7) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVNTDQ ymm, m256 + if isYMM(v0) && isM256(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[0]), addr(v[1]), 0) + m.emit(0xe7) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVNTDQ zmm, m512 + if isZMM(v0) && isM512(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0xe7) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVNTDQ xmm, m128 + if isEVEXXMM(v0) && isM128(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0xe7) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVNTDQ ymm, m256 + if isEVEXYMM(v0) && isM256(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0xe7) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVNTDQ") + } + return p +} + +// VMOVNTDQA performs "Load Double Quadword Non-Temporal Aligned Hint". +// +// Mnemonic : VMOVNTDQA +// Supported forms : (5 forms) +// +// * VMOVNTDQA m128, xmm [AVX] +// * VMOVNTDQA m256, ymm [AVX2] +// * VMOVNTDQA m512, zmm [AVX512F] +// * VMOVNTDQA m128, xmm [AVX512F,AVX512VL] +// * VMOVNTDQA m256, ymm [AVX512F,AVX512VL] +// +func (self *Program) VMOVNTDQA(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVNTDQA", 2, Operands { v0, v1 }) + // VMOVNTDQA m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVNTDQA m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVNTDQA m512, zmm + if isM512(v0) && isZMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVNTDQA m128, xmm + if isM128(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVNTDQA m256, ymm + if isM256(v0) && isEVEXYMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2a) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVNTDQA") + } + return p +} + +// VMOVNTPD performs "Store Packed Double-Precision Floating-Point Values Using Non-Temporal Hint". +// +// Mnemonic : VMOVNTPD +// Supported forms : (5 forms) +// +// * VMOVNTPD xmm, m128 [AVX] +// * VMOVNTPD ymm, m256 [AVX] +// * VMOVNTPD zmm, m512 [AVX512F] +// * VMOVNTPD xmm, m128 [AVX512F,AVX512VL] +// * VMOVNTPD ymm, m256 [AVX512F,AVX512VL] +// +func (self *Program) VMOVNTPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVNTPD", 2, Operands { v0, v1 }) + // VMOVNTPD xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), addr(v[1]), 0) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVNTPD ymm, m256 + if isYMM(v0) && isM256(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[0]), addr(v[1]), 0) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVNTPD zmm, m512 + if isZMM(v0) && isM512(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVNTPD xmm, m128 + if isEVEXXMM(v0) && isM128(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVNTPD ymm, m256 + if isEVEXYMM(v0) && isM256(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVNTPD") + } + return p +} + +// VMOVNTPS performs "Store Packed Single-Precision Floating-Point Values Using Non-Temporal Hint". +// +// Mnemonic : VMOVNTPS +// Supported forms : (5 forms) +// +// * VMOVNTPS xmm, m128 [AVX] +// * VMOVNTPS ymm, m256 [AVX] +// * VMOVNTPS zmm, m512 [AVX512F] +// * VMOVNTPS xmm, m128 [AVX512F,AVX512VL] +// * VMOVNTPS ymm, m256 [AVX512F,AVX512VL] +// +func (self *Program) VMOVNTPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVNTPS", 2, Operands { v0, v1 }) + // VMOVNTPS xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[0]), addr(v[1]), 0) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVNTPS ymm, m256 + if isYMM(v0) && isM256(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[0]), addr(v[1]), 0) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVNTPS zmm, m512 + if isZMM(v0) && isM512(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVNTPS xmm, m128 + if isEVEXXMM(v0) && isM128(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVNTPS ymm, m256 + if isEVEXYMM(v0) && isM256(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0x2b) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVNTPS") + } + return p +} + +// VMOVQ performs "Move Quadword". +// +// Mnemonic : VMOVQ +// Supported forms : (10 forms) +// +// * VMOVQ xmm, r64 [AVX] +// * VMOVQ r64, xmm [AVX] +// * VMOVQ xmm, xmm [AVX] +// * VMOVQ m64, xmm [AVX] +// * VMOVQ xmm, m64 [AVX] +// * VMOVQ xmm, r64 [AVX512F] +// * VMOVQ r64, xmm [AVX512F] +// * VMOVQ xmm, xmm [AVX512F] +// * VMOVQ m64, xmm [AVX512F] +// * VMOVQ xmm, m64 [AVX512F] +// +func (self *Program) VMOVQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVQ", 2, Operands { v0, v1 }) + // VMOVQ xmm, r64 + if isXMM(v0) && isReg64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1 ^ (hcode(v[0]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xf9) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVQ r64, xmm + if isReg64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe1 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9) + m.emit(0x6e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), v[0], 0) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), v[1], 0) + m.emit(0xd6) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVQ m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), addr(v[0]), 0) + m.emit(0x7e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b1, 0x81, hcode(v[1]), addr(v[0]), 0) + m.emit(0x6e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVQ xmm, m64 + if isXMM(v0) && isM64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), addr(v[1]), 0) + m.emit(0xd6) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b1, 0x81, hcode(v[0]), addr(v[1]), 0) + m.emit(0x7e) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVQ xmm, r64 + if isEVEXXMM(v0) && isReg64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit(0x08) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVQ r64, xmm + if isReg64(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit(0x08) + m.emit(0x6e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVQ xmm, xmm + if isEVEXXMM(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x08) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit(0x08) + m.emit(0xd6) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVQ m64, xmm + if isM64(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x6e) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x86, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x7e) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VMOVQ xmm, m64 + if isEVEXXMM(v0) && isM64(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0x7e) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, 0, 0, 0) + m.emit(0xd6) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVQ") + } + return p +} + +// VMOVSD performs "Move Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : VMOVSD +// Supported forms : (6 forms) +// +// * VMOVSD m64, xmm [AVX] +// * VMOVSD xmm, m64 [AVX] +// * VMOVSD xmm, xmm, xmm [AVX] +// * VMOVSD xmm, m64{k} [AVX512F] +// * VMOVSD m64, xmm{k}{z} [AVX512F] +// * VMOVSD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VMOVSD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMOVSD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VMOVSD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VMOVSD takes 2 or 3 operands") + } + // VMOVSD m64, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[1]), addr(v[0]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVSD xmm, m64 + if len(vv) == 0 && isXMM(v0) && isM64(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[0]), addr(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVSD xmm, xmm, xmm + if len(vv) == 1 && isXMM(v0) && isXMM(v1) && isXMM(vv[0]) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x10) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[0]), v[2], hlcode(v[1])) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[2])) + }) + } + // VMOVSD xmm, m64{k} + if len(vv) == 0 && isEVEXXMM(v0) && isM64k(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VMOVSD m64, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isXMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VMOVSD xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x10) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xff ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[2])) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVSD") + } + return p +} + +// VMOVSHDUP performs "Move Packed Single-FP High and Duplicate". +// +// Mnemonic : VMOVSHDUP +// Supported forms : (10 forms) +// +// * VMOVSHDUP xmm, xmm [AVX] +// * VMOVSHDUP m128, xmm [AVX] +// * VMOVSHDUP ymm, ymm [AVX] +// * VMOVSHDUP m256, ymm [AVX] +// * VMOVSHDUP zmm, zmm{k}{z} [AVX512F] +// * VMOVSHDUP m512, zmm{k}{z} [AVX512F] +// * VMOVSHDUP xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVSHDUP ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMOVSHDUP m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVSHDUP m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMOVSHDUP(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVSHDUP", 2, Operands { v0, v1 }) + // VMOVSHDUP xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), v[0], 0) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVSHDUP m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), addr(v[0]), 0) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVSHDUP ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[1]), v[0], 0) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVSHDUP m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[1]), addr(v[0]), 0) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVSHDUP zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVSHDUP m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVSHDUP xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVSHDUP ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVSHDUP m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVSHDUP m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVSHDUP") + } + return p +} + +// VMOVSLDUP performs "Move Packed Single-FP Low and Duplicate". +// +// Mnemonic : VMOVSLDUP +// Supported forms : (10 forms) +// +// * VMOVSLDUP xmm, xmm [AVX] +// * VMOVSLDUP m128, xmm [AVX] +// * VMOVSLDUP ymm, ymm [AVX] +// * VMOVSLDUP m256, ymm [AVX] +// * VMOVSLDUP zmm, zmm{k}{z} [AVX512F] +// * VMOVSLDUP m512, zmm{k}{z} [AVX512F] +// * VMOVSLDUP xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVSLDUP ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMOVSLDUP m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVSLDUP m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMOVSLDUP(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVSLDUP", 2, Operands { v0, v1 }) + // VMOVSLDUP xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), v[0], 0) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVSLDUP m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), addr(v[0]), 0) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVSLDUP ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[1]), v[0], 0) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVSLDUP m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[1]), addr(v[0]), 0) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVSLDUP zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVSLDUP m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVSLDUP xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVSLDUP ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x12) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VMOVSLDUP m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVSLDUP m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x12) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVSLDUP") + } + return p +} + +// VMOVSS performs "Move Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VMOVSS +// Supported forms : (6 forms) +// +// * VMOVSS m32, xmm [AVX] +// * VMOVSS xmm, m32 [AVX] +// * VMOVSS xmm, xmm, xmm [AVX] +// * VMOVSS xmm, m32{k} [AVX512F] +// * VMOVSS m32, xmm{k}{z} [AVX512F] +// * VMOVSS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VMOVSS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMOVSS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VMOVSS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VMOVSS takes 2 or 3 operands") + } + // VMOVSS m32, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[1]), addr(v[0]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVSS xmm, m32 + if len(vv) == 0 && isXMM(v0) && isM32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[0]), addr(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVSS xmm, xmm, xmm + if len(vv) == 1 && isXMM(v0) && isXMM(v1) && isXMM(vv[0]) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x10) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[0]), v[2], hlcode(v[1])) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[2])) + }) + } + // VMOVSS xmm, m32{k} + if len(vv) == 0 && isEVEXXMM(v0) && isM32k(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VMOVSS m32, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isXMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VMOVSS xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x10) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[2])) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVSS") + } + return p +} + +// VMOVUPD performs "Move Unaligned Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VMOVUPD +// Supported forms : (15 forms) +// +// * VMOVUPD xmm, xmm [AVX] +// * VMOVUPD m128, xmm [AVX] +// * VMOVUPD ymm, ymm [AVX] +// * VMOVUPD m256, ymm [AVX] +// * VMOVUPD xmm, m128 [AVX] +// * VMOVUPD ymm, m256 [AVX] +// * VMOVUPD zmm, m512{k}{z} [AVX512F] +// * VMOVUPD zmm, zmm{k}{z} [AVX512F] +// * VMOVUPD m512, zmm{k}{z} [AVX512F] +// * VMOVUPD xmm, m128{k}{z} [AVX512F,AVX512VL] +// * VMOVUPD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVUPD ymm, m256{k}{z} [AVX512F,AVX512VL] +// * VMOVUPD ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMOVUPD m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVUPD m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMOVUPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVUPD", 2, Operands { v0, v1 }) + // VMOVUPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), v[1], 0) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVUPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), addr(v[0]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVUPD ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), v[0], 0) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[0]), v[1], 0) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVUPD m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), addr(v[0]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVUPD xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[0]), addr(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVUPD ymm, m256 + if isYMM(v0) && isM256(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[0]), addr(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVUPD zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVUPD zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVUPD m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVUPD xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVUPD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVUPD ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VMOVUPD ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVUPD m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVUPD m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVUPD") + } + return p +} + +// VMOVUPS performs "Move Unaligned Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VMOVUPS +// Supported forms : (15 forms) +// +// * VMOVUPS xmm, xmm [AVX] +// * VMOVUPS m128, xmm [AVX] +// * VMOVUPS ymm, ymm [AVX] +// * VMOVUPS m256, ymm [AVX] +// * VMOVUPS xmm, m128 [AVX] +// * VMOVUPS ymm, m256 [AVX] +// * VMOVUPS zmm, m512{k}{z} [AVX512F] +// * VMOVUPS zmm, zmm{k}{z} [AVX512F] +// * VMOVUPS m512, zmm{k}{z} [AVX512F] +// * VMOVUPS xmm, m128{k}{z} [AVX512F,AVX512VL] +// * VMOVUPS xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVUPS ymm, m256{k}{z} [AVX512F,AVX512VL] +// * VMOVUPS ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMOVUPS m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VMOVUPS m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMOVUPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VMOVUPS", 2, Operands { v0, v1 }) + // VMOVUPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), v[0], 0) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[0]), v[1], 0) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVUPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), addr(v[0]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVUPS ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), v[0], 0) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[0]), v[1], 0) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVUPS m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), addr(v[0]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VMOVUPS xmm, m128 + if isXMM(v0) && isM128(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[0]), addr(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVUPS ymm, m256 + if isYMM(v0) && isM256(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[0]), addr(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + // VMOVUPS zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 64) + }) + } + // VMOVUPS zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVUPS m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VMOVUPS xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VMOVUPS xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVUPS ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VMOVUPS ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x10) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VMOVUPS m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VMOVUPS m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VMOVUPS") + } + return p +} + +// VMPSADBW performs "Compute Multiple Packed Sums of Absolute Difference". +// +// Mnemonic : VMPSADBW +// Supported forms : (4 forms) +// +// * VMPSADBW imm8, xmm, xmm, xmm [AVX] +// * VMPSADBW imm8, m128, xmm, xmm [AVX] +// * VMPSADBW imm8, ymm, ymm, ymm [AVX2] +// * VMPSADBW imm8, m256, ymm, ymm [AVX2] +// +func (self *Program) VMPSADBW(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VMPSADBW", 4, Operands { v0, v1, v2, v3 }) + // VMPSADBW imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x42) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VMPSADBW imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x42) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VMPSADBW imm8, ymm, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x42) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VMPSADBW imm8, m256, ymm, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x42) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMPSADBW") + } + return p +} + +// VMULPD performs "Multiply Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VMULPD +// Supported forms : (11 forms) +// +// * VMULPD xmm, xmm, xmm [AVX] +// * VMULPD m128, xmm, xmm [AVX] +// * VMULPD ymm, ymm, ymm [AVX] +// * VMULPD m256, ymm, ymm [AVX] +// * VMULPD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VMULPD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VMULPD zmm, zmm, zmm{k}{z} [AVX512F] +// * VMULPD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMULPD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMULPD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMULPD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMULPD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMULPD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VMULPD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VMULPD takes 3 or 4 operands") + } + // VMULPD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMULPD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMULPD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMULPD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMULPD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VMULPD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x59) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VMULPD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMULPD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VMULPD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMULPD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VMULPD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMULPD") + } + return p +} + +// VMULPS performs "Multiply Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VMULPS +// Supported forms : (11 forms) +// +// * VMULPS xmm, xmm, xmm [AVX] +// * VMULPS m128, xmm, xmm [AVX] +// * VMULPS ymm, ymm, ymm [AVX] +// * VMULPS m256, ymm, ymm [AVX] +// * VMULPS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VMULPS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VMULPS zmm, zmm, zmm{k}{z} [AVX512F] +// * VMULPS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMULPS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VMULPS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VMULPS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VMULPS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMULPS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VMULPS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VMULPS takes 3 or 4 operands") + } + // VMULPS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMULPS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMULPS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMULPS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMULPS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VMULPS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x59) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VMULPS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMULPS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VMULPS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMULPS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VMULPS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMULPS") + } + return p +} + +// VMULSD performs "Multiply Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VMULSD +// Supported forms : (5 forms) +// +// * VMULSD xmm, xmm, xmm [AVX] +// * VMULSD m64, xmm, xmm [AVX] +// * VMULSD m64, xmm, xmm{k}{z} [AVX512F] +// * VMULSD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VMULSD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VMULSD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMULSD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VMULSD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VMULSD takes 3 or 4 operands") + } + // VMULSD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMULSD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMULSD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VMULSD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xff ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x59) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VMULSD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMULSD") + } + return p +} + +// VMULSS performs "Multiply Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VMULSS +// Supported forms : (5 forms) +// +// * VMULSS xmm, xmm, xmm [AVX] +// * VMULSS m32, xmm, xmm [AVX] +// * VMULSS m32, xmm, xmm{k}{z} [AVX512F] +// * VMULSS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VMULSS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VMULSS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VMULSS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VMULSS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VMULSS takes 3 or 4 operands") + } + // VMULSS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VMULSS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VMULSS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x59) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VMULSS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7e ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x59) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VMULSS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x59) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VMULSS") + } + return p +} + +// VORPD performs "Bitwise Logical OR of Double-Precision Floating-Point Values". +// +// Mnemonic : VORPD +// Supported forms : (10 forms) +// +// * VORPD xmm, xmm, xmm [AVX] +// * VORPD m128, xmm, xmm [AVX] +// * VORPD ymm, ymm, ymm [AVX] +// * VORPD m256, ymm, ymm [AVX] +// * VORPD m512/m64bcst, zmm, zmm{k}{z} [AVX512DQ] +// * VORPD zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VORPD m128/m64bcst, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VORPD xmm, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VORPD m256/m64bcst, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VORPD ymm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VORPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VORPD", 3, Operands { v0, v1, v2 }) + // VORPD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VORPD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VORPD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VORPD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VORPD m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VORPD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VORPD m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VORPD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VORPD m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VORPD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VORPD") + } + return p +} + +// VORPS performs "Bitwise Logical OR of Single-Precision Floating-Point Values". +// +// Mnemonic : VORPS +// Supported forms : (10 forms) +// +// * VORPS xmm, xmm, xmm [AVX] +// * VORPS m128, xmm, xmm [AVX] +// * VORPS ymm, ymm, ymm [AVX] +// * VORPS m256, ymm, ymm [AVX] +// * VORPS m512/m32bcst, zmm, zmm{k}{z} [AVX512DQ] +// * VORPS zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VORPS m128/m32bcst, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VORPS xmm, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VORPS m256/m32bcst, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VORPS ymm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VORPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VORPS", 3, Operands { v0, v1, v2 }) + // VORPS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VORPS m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VORPS ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VORPS m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VORPS m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VORPS zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VORPS m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VORPS xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VORPS m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VORPS ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VORPS") + } + return p +} + +// VPABSB performs "Packed Absolute Value of Byte Integers". +// +// Mnemonic : VPABSB +// Supported forms : (10 forms) +// +// * VPABSB xmm, xmm [AVX] +// * VPABSB m128, xmm [AVX] +// * VPABSB ymm, ymm [AVX2] +// * VPABSB m256, ymm [AVX2] +// * VPABSB zmm, zmm{k}{z} [AVX512BW] +// * VPABSB m512, zmm{k}{z} [AVX512BW] +// * VPABSB xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPABSB ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPABSB m128, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPABSB m256, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPABSB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPABSB", 2, Operands { v0, v1 }) + // VPABSB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x1c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSB m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x1c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPABSB ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x1c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSB m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x1c) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPABSB zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x1c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSB m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x1c) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VPABSB xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x1c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSB ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x1c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSB m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x1c) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VPABSB m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x1c) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPABSB") + } + return p +} + +// VPABSD performs "Packed Absolute Value of Doubleword Integers". +// +// Mnemonic : VPABSD +// Supported forms : (10 forms) +// +// * VPABSD xmm, xmm [AVX] +// * VPABSD m128, xmm [AVX] +// * VPABSD ymm, ymm [AVX2] +// * VPABSD m256, ymm [AVX2] +// * VPABSD m512/m32bcst, zmm{k}{z} [AVX512F] +// * VPABSD zmm, zmm{k}{z} [AVX512F] +// * VPABSD m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPABSD m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPABSD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPABSD ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPABSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPABSD", 2, Operands { v0, v1 }) + // VPABSD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x1e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPABSD ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSD m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x1e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPABSD m512/m32bcst, zmm{k}{z} + if isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x1e) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VPABSD zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSD m128/m32bcst, xmm{k}{z} + if isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x1e) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VPABSD m256/m32bcst, ymm{k}{z} + if isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x1e) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VPABSD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSD ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPABSD") + } + return p +} + +// VPABSQ performs "Packed Absolute Value of Quadword Integers". +// +// Mnemonic : VPABSQ +// Supported forms : (6 forms) +// +// * VPABSQ m512/m64bcst, zmm{k}{z} [AVX512F] +// * VPABSQ zmm, zmm{k}{z} [AVX512F] +// * VPABSQ m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPABSQ m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPABSQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPABSQ ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPABSQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPABSQ", 2, Operands { v0, v1 }) + // VPABSQ m512/m64bcst, zmm{k}{z} + if isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x1f) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VPABSQ zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x1f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSQ m128/m64bcst, xmm{k}{z} + if isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x1f) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VPABSQ m256/m64bcst, ymm{k}{z} + if isM256M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x1f) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VPABSQ xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x1f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSQ ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x1f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPABSQ") + } + return p +} + +// VPABSW performs "Packed Absolute Value of Word Integers". +// +// Mnemonic : VPABSW +// Supported forms : (10 forms) +// +// * VPABSW xmm, xmm [AVX] +// * VPABSW m128, xmm [AVX] +// * VPABSW ymm, ymm [AVX2] +// * VPABSW m256, ymm [AVX2] +// * VPABSW zmm, zmm{k}{z} [AVX512BW] +// * VPABSW m512, zmm{k}{z} [AVX512BW] +// * VPABSW xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPABSW ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPABSW m128, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPABSW m256, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPABSW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPABSW", 2, Operands { v0, v1 }) + // VPABSW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x1d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPABSW ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSW m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x1d) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPABSW zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSW m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x1d) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VPABSW xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSW ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x1d) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPABSW m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x1d) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VPABSW m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x1d) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPABSW") + } + return p +} + +// VPACKSSDW performs "Pack Doublewords into Words with Signed Saturation". +// +// Mnemonic : VPACKSSDW +// Supported forms : (10 forms) +// +// * VPACKSSDW xmm, xmm, xmm [AVX] +// * VPACKSSDW m128, xmm, xmm [AVX] +// * VPACKSSDW ymm, ymm, ymm [AVX2] +// * VPACKSSDW m256, ymm, ymm [AVX2] +// * VPACKSSDW m512/m32bcst, zmm, zmm{k}{z} [AVX512BW] +// * VPACKSSDW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPACKSSDW m128/m32bcst, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPACKSSDW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPACKSSDW m256/m32bcst, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPACKSSDW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPACKSSDW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPACKSSDW", 3, Operands { v0, v1, v2 }) + // VPACKSSDW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x6b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKSSDW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x6b) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPACKSSDW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x6b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKSSDW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x6b) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPACKSSDW m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x6b) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPACKSSDW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x6b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKSSDW m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x6b) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPACKSSDW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x6b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKSSDW m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x6b) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPACKSSDW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x6b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPACKSSDW") + } + return p +} + +// VPACKSSWB performs "Pack Words into Bytes with Signed Saturation". +// +// Mnemonic : VPACKSSWB +// Supported forms : (10 forms) +// +// * VPACKSSWB xmm, xmm, xmm [AVX] +// * VPACKSSWB m128, xmm, xmm [AVX] +// * VPACKSSWB ymm, ymm, ymm [AVX2] +// * VPACKSSWB m256, ymm, ymm [AVX2] +// * VPACKSSWB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPACKSSWB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPACKSSWB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPACKSSWB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPACKSSWB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPACKSSWB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPACKSSWB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPACKSSWB", 3, Operands { v0, v1, v2 }) + // VPACKSSWB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x63) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKSSWB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x63) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPACKSSWB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x63) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKSSWB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x63) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPACKSSWB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x63) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKSSWB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x63) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPACKSSWB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x63) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKSSWB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x63) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPACKSSWB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x63) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKSSWB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x63) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPACKSSWB") + } + return p +} + +// VPACKUSDW performs "Pack Doublewords into Words with Unsigned Saturation". +// +// Mnemonic : VPACKUSDW +// Supported forms : (10 forms) +// +// * VPACKUSDW xmm, xmm, xmm [AVX] +// * VPACKUSDW m128, xmm, xmm [AVX] +// * VPACKUSDW ymm, ymm, ymm [AVX2] +// * VPACKUSDW m256, ymm, ymm [AVX2] +// * VPACKUSDW m512/m32bcst, zmm, zmm{k}{z} [AVX512BW] +// * VPACKUSDW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPACKUSDW m128/m32bcst, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPACKUSDW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPACKUSDW m256/m32bcst, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPACKUSDW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPACKUSDW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPACKUSDW", 3, Operands { v0, v1, v2 }) + // VPACKUSDW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x2b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKUSDW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x2b) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPACKUSDW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x2b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKUSDW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x2b) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPACKUSDW m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x2b) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPACKUSDW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x2b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKUSDW m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x2b) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPACKUSDW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x2b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKUSDW m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x2b) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPACKUSDW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x2b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPACKUSDW") + } + return p +} + +// VPACKUSWB performs "Pack Words into Bytes with Unsigned Saturation". +// +// Mnemonic : VPACKUSWB +// Supported forms : (10 forms) +// +// * VPACKUSWB xmm, xmm, xmm [AVX] +// * VPACKUSWB m128, xmm, xmm [AVX] +// * VPACKUSWB ymm, ymm, ymm [AVX2] +// * VPACKUSWB m256, ymm, ymm [AVX2] +// * VPACKUSWB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPACKUSWB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPACKUSWB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPACKUSWB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPACKUSWB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPACKUSWB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPACKUSWB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPACKUSWB", 3, Operands { v0, v1, v2 }) + // VPACKUSWB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x67) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKUSWB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x67) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPACKUSWB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x67) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKUSWB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x67) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPACKUSWB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x67) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKUSWB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x67) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPACKUSWB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x67) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKUSWB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x67) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPACKUSWB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x67) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPACKUSWB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x67) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPACKUSWB") + } + return p +} + +// VPADDB performs "Add Packed Byte Integers". +// +// Mnemonic : VPADDB +// Supported forms : (10 forms) +// +// * VPADDB xmm, xmm, xmm [AVX] +// * VPADDB m128, xmm, xmm [AVX] +// * VPADDB ymm, ymm, ymm [AVX2] +// * VPADDB m256, ymm, ymm [AVX2] +// * VPADDB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPADDB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPADDB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPADDB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPADDB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPADDB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPADDB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPADDB", 3, Operands { v0, v1, v2 }) + // VPADDB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xfc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xfc) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xfc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xfc) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xfc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xfc) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPADDB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xfc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xfc) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPADDB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xfc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xfc) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPADDB") + } + return p +} + +// VPADDD performs "Add Packed Doubleword Integers". +// +// Mnemonic : VPADDD +// Supported forms : (10 forms) +// +// * VPADDD xmm, xmm, xmm [AVX] +// * VPADDD m128, xmm, xmm [AVX] +// * VPADDD ymm, ymm, ymm [AVX2] +// * VPADDD m256, ymm, ymm [AVX2] +// * VPADDD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPADDD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPADDD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPADDD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPADDD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPADDD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPADDD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPADDD", 3, Operands { v0, v1, v2 }) + // VPADDD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xfe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xfe) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xfe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xfe) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xfe) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPADDD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xfe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xfe) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPADDD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xfe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xfe) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPADDD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xfe) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPADDD") + } + return p +} + +// VPADDQ performs "Add Packed Quadword Integers". +// +// Mnemonic : VPADDQ +// Supported forms : (10 forms) +// +// * VPADDQ xmm, xmm, xmm [AVX] +// * VPADDQ m128, xmm, xmm [AVX] +// * VPADDQ ymm, ymm, ymm [AVX2] +// * VPADDQ m256, ymm, ymm [AVX2] +// * VPADDQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPADDQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPADDQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPADDQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPADDQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPADDQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPADDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPADDQ", 3, Operands { v0, v1, v2 }) + // VPADDQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd4) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDQ ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd4) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xd4) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPADDQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xd4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xd4) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPADDQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xd4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xd4) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPADDQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xd4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPADDQ") + } + return p +} + +// VPADDSB performs "Add Packed Signed Byte Integers with Signed Saturation". +// +// Mnemonic : VPADDSB +// Supported forms : (10 forms) +// +// * VPADDSB xmm, xmm, xmm [AVX] +// * VPADDSB m128, xmm, xmm [AVX] +// * VPADDSB ymm, ymm, ymm [AVX2] +// * VPADDSB m256, ymm, ymm [AVX2] +// * VPADDSB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPADDSB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPADDSB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPADDSB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPADDSB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPADDSB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPADDSB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPADDSB", 3, Operands { v0, v1, v2 }) + // VPADDSB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xec) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDSB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xec) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDSB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xec) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDSB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xec) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDSB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xec) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDSB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xec) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPADDSB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xec) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDSB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xec) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPADDSB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xec) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDSB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xec) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPADDSB") + } + return p +} + +// VPADDSW performs "Add Packed Signed Word Integers with Signed Saturation". +// +// Mnemonic : VPADDSW +// Supported forms : (10 forms) +// +// * VPADDSW xmm, xmm, xmm [AVX] +// * VPADDSW m128, xmm, xmm [AVX] +// * VPADDSW ymm, ymm, ymm [AVX2] +// * VPADDSW m256, ymm, ymm [AVX2] +// * VPADDSW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPADDSW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPADDSW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPADDSW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPADDSW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPADDSW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPADDSW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPADDSW", 3, Operands { v0, v1, v2 }) + // VPADDSW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xed) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDSW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xed) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDSW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xed) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDSW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xed) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDSW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xed) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDSW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xed) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPADDSW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xed) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDSW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xed) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPADDSW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xed) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDSW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xed) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPADDSW") + } + return p +} + +// VPADDUSB performs "Add Packed Unsigned Byte Integers with Unsigned Saturation". +// +// Mnemonic : VPADDUSB +// Supported forms : (10 forms) +// +// * VPADDUSB xmm, xmm, xmm [AVX] +// * VPADDUSB m128, xmm, xmm [AVX] +// * VPADDUSB ymm, ymm, ymm [AVX2] +// * VPADDUSB m256, ymm, ymm [AVX2] +// * VPADDUSB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPADDUSB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPADDUSB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPADDUSB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPADDUSB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPADDUSB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPADDUSB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPADDUSB", 3, Operands { v0, v1, v2 }) + // VPADDUSB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xdc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDUSB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xdc) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDUSB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xdc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDUSB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xdc) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDUSB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xdc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDUSB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xdc) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPADDUSB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xdc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDUSB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xdc) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPADDUSB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xdc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDUSB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xdc) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPADDUSB") + } + return p +} + +// VPADDUSW performs "Add Packed Unsigned Word Integers with Unsigned Saturation". +// +// Mnemonic : VPADDUSW +// Supported forms : (10 forms) +// +// * VPADDUSW xmm, xmm, xmm [AVX] +// * VPADDUSW m128, xmm, xmm [AVX] +// * VPADDUSW ymm, ymm, ymm [AVX2] +// * VPADDUSW m256, ymm, ymm [AVX2] +// * VPADDUSW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPADDUSW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPADDUSW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPADDUSW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPADDUSW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPADDUSW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPADDUSW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPADDUSW", 3, Operands { v0, v1, v2 }) + // VPADDUSW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xdd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDUSW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xdd) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDUSW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xdd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDUSW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xdd) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDUSW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xdd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDUSW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xdd) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPADDUSW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xdd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDUSW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xdd) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPADDUSW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xdd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDUSW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xdd) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPADDUSW") + } + return p +} + +// VPADDW performs "Add Packed Word Integers". +// +// Mnemonic : VPADDW +// Supported forms : (10 forms) +// +// * VPADDW xmm, xmm, xmm [AVX] +// * VPADDW m128, xmm, xmm [AVX] +// * VPADDW ymm, ymm, ymm [AVX2] +// * VPADDW m256, ymm, ymm [AVX2] +// * VPADDW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPADDW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPADDW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPADDW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPADDW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPADDW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPADDW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPADDW", 3, Operands { v0, v1, v2 }) + // VPADDW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xfd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xfd) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xfd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xfd) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPADDW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xfd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xfd) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPADDW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xfd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xfd) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPADDW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xfd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPADDW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xfd) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPADDW") + } + return p +} + +// VPALIGNR performs "Packed Align Right". +// +// Mnemonic : VPALIGNR +// Supported forms : (10 forms) +// +// * VPALIGNR imm8, xmm, xmm, xmm [AVX] +// * VPALIGNR imm8, m128, xmm, xmm [AVX] +// * VPALIGNR imm8, ymm, ymm, ymm [AVX2] +// * VPALIGNR imm8, m256, ymm, ymm [AVX2] +// * VPALIGNR imm8, zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPALIGNR imm8, m512, zmm, zmm{k}{z} [AVX512BW] +// * VPALIGNR imm8, xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPALIGNR imm8, m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPALIGNR imm8, ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPALIGNR imm8, m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPALIGNR(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPALIGNR", 4, Operands { v0, v1, v2, v3 }) + // VPALIGNR imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPALIGNR imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x0f) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPALIGNR imm8, ymm, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPALIGNR imm8, m256, ymm, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x0f) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPALIGNR imm8, zmm, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPALIGNR imm8, m512, zmm, zmm{k}{z} + if isImm8(v0) && isM512(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x0f) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPALIGNR imm8, xmm, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPALIGNR imm8, m128, xmm, xmm{k}{z} + if isImm8(v0) && isM128(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x0f) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPALIGNR imm8, ymm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPALIGNR imm8, m256, ymm, ymm{k}{z} + if isImm8(v0) && isM256(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x0f) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPALIGNR") + } + return p +} + +// VPAND performs "Packed Bitwise Logical AND". +// +// Mnemonic : VPAND +// Supported forms : (4 forms) +// +// * VPAND xmm, xmm, xmm [AVX] +// * VPAND m128, xmm, xmm [AVX] +// * VPAND ymm, ymm, ymm [AVX2] +// * VPAND m256, ymm, ymm [AVX2] +// +func (self *Program) VPAND(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPAND", 3, Operands { v0, v1, v2 }) + // VPAND xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPAND m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xdb) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPAND ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPAND m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xdb) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPAND") + } + return p +} + +// VPANDD performs "Bitwise Logical AND of Packed Doubleword Integers". +// +// Mnemonic : VPANDD +// Supported forms : (6 forms) +// +// * VPANDD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPANDD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPANDD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPANDD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPANDD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPANDD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPANDD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPANDD", 3, Operands { v0, v1, v2 }) + // VPANDD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xdb) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPANDD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPANDD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xdb) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPANDD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPANDD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xdb) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPANDD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPANDD") + } + return p +} + +// VPANDN performs "Packed Bitwise Logical AND NOT". +// +// Mnemonic : VPANDN +// Supported forms : (4 forms) +// +// * VPANDN xmm, xmm, xmm [AVX] +// * VPANDN m128, xmm, xmm [AVX] +// * VPANDN ymm, ymm, ymm [AVX2] +// * VPANDN m256, ymm, ymm [AVX2] +// +func (self *Program) VPANDN(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPANDN", 3, Operands { v0, v1, v2 }) + // VPANDN xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPANDN m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xdf) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPANDN ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPANDN m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xdf) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPANDN") + } + return p +} + +// VPANDND performs "Bitwise Logical AND NOT of Packed Doubleword Integers". +// +// Mnemonic : VPANDND +// Supported forms : (6 forms) +// +// * VPANDND m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPANDND zmm, zmm, zmm{k}{z} [AVX512F] +// * VPANDND m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPANDND xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPANDND m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPANDND ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPANDND(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPANDND", 3, Operands { v0, v1, v2 }) + // VPANDND m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xdf) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPANDND zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPANDND m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xdf) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPANDND xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPANDND m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xdf) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPANDND ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPANDND") + } + return p +} + +// VPANDNQ performs "Bitwise Logical AND NOT of Packed Quadword Integers". +// +// Mnemonic : VPANDNQ +// Supported forms : (6 forms) +// +// * VPANDNQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPANDNQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPANDNQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPANDNQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPANDNQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPANDNQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPANDNQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPANDNQ", 3, Operands { v0, v1, v2 }) + // VPANDNQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xdf) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPANDNQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPANDNQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xdf) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPANDNQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPANDNQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xdf) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPANDNQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xdf) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPANDNQ") + } + return p +} + +// VPANDQ performs "Bitwise Logical AND of Packed Quadword Integers". +// +// Mnemonic : VPANDQ +// Supported forms : (6 forms) +// +// * VPANDQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPANDQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPANDQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPANDQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPANDQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPANDQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPANDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPANDQ", 3, Operands { v0, v1, v2 }) + // VPANDQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xdb) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPANDQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPANDQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xdb) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPANDQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPANDQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xdb) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPANDQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPANDQ") + } + return p +} + +// VPAVGB performs "Average Packed Byte Integers". +// +// Mnemonic : VPAVGB +// Supported forms : (10 forms) +// +// * VPAVGB xmm, xmm, xmm [AVX] +// * VPAVGB m128, xmm, xmm [AVX] +// * VPAVGB ymm, ymm, ymm [AVX2] +// * VPAVGB m256, ymm, ymm [AVX2] +// * VPAVGB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPAVGB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPAVGB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPAVGB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPAVGB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPAVGB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPAVGB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPAVGB", 3, Operands { v0, v1, v2 }) + // VPAVGB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe0) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPAVGB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe0) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPAVGB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe0) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPAVGB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe0) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPAVGB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xe0) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPAVGB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe0) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPAVGB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xe0) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPAVGB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe0) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPAVGB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xe0) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPAVGB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe0) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPAVGB") + } + return p +} + +// VPAVGW performs "Average Packed Word Integers". +// +// Mnemonic : VPAVGW +// Supported forms : (10 forms) +// +// * VPAVGW xmm, xmm, xmm [AVX] +// * VPAVGW m128, xmm, xmm [AVX] +// * VPAVGW ymm, ymm, ymm [AVX2] +// * VPAVGW m256, ymm, ymm [AVX2] +// * VPAVGW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPAVGW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPAVGW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPAVGW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPAVGW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPAVGW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPAVGW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPAVGW", 3, Operands { v0, v1, v2 }) + // VPAVGW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPAVGW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe3) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPAVGW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPAVGW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe3) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPAVGW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xe3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPAVGW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe3) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPAVGW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xe3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPAVGW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe3) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPAVGW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xe3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPAVGW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe3) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPAVGW") + } + return p +} + +// VPBLENDD performs "Blend Packed Doublewords". +// +// Mnemonic : VPBLENDD +// Supported forms : (4 forms) +// +// * VPBLENDD imm8, xmm, xmm, xmm [AVX2] +// * VPBLENDD imm8, m128, xmm, xmm [AVX2] +// * VPBLENDD imm8, ymm, ymm, ymm [AVX2] +// * VPBLENDD imm8, m256, ymm, ymm [AVX2] +// +func (self *Program) VPBLENDD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPBLENDD", 4, Operands { v0, v1, v2, v3 }) + // VPBLENDD imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x02) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPBLENDD imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x02) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPBLENDD imm8, ymm, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x02) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPBLENDD imm8, m256, ymm, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x02) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPBLENDD") + } + return p +} + +// VPBLENDMB performs "Blend Byte Vectors Using an OpMask Control". +// +// Mnemonic : VPBLENDMB +// Supported forms : (6 forms) +// +// * VPBLENDMB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPBLENDMB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPBLENDMB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPBLENDMB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPBLENDMB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPBLENDMB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPBLENDMB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPBLENDMB", 3, Operands { v0, v1, v2 }) + // VPBLENDMB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPBLENDMB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPBLENDMB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPBLENDMB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPBLENDMB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPBLENDMB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPBLENDMB") + } + return p +} + +// VPBLENDMD performs "Blend Doubleword Vectors Using an OpMask Control". +// +// Mnemonic : VPBLENDMD +// Supported forms : (6 forms) +// +// * VPBLENDMD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPBLENDMD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPBLENDMD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPBLENDMD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPBLENDMD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPBLENDMD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPBLENDMD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPBLENDMD", 3, Operands { v0, v1, v2 }) + // VPBLENDMD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x64) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPBLENDMD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x64) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPBLENDMD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x64) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPBLENDMD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x64) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPBLENDMD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x64) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPBLENDMD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x64) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPBLENDMD") + } + return p +} + +// VPBLENDMQ performs "Blend Quadword Vectors Using an OpMask Control". +// +// Mnemonic : VPBLENDMQ +// Supported forms : (6 forms) +// +// * VPBLENDMQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPBLENDMQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPBLENDMQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPBLENDMQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPBLENDMQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPBLENDMQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPBLENDMQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPBLENDMQ", 3, Operands { v0, v1, v2 }) + // VPBLENDMQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x64) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPBLENDMQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x64) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPBLENDMQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x64) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPBLENDMQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x64) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPBLENDMQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x64) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPBLENDMQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x64) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPBLENDMQ") + } + return p +} + +// VPBLENDMW performs "Blend Word Vectors Using an OpMask Control". +// +// Mnemonic : VPBLENDMW +// Supported forms : (6 forms) +// +// * VPBLENDMW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPBLENDMW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPBLENDMW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPBLENDMW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPBLENDMW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPBLENDMW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPBLENDMW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPBLENDMW", 3, Operands { v0, v1, v2 }) + // VPBLENDMW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPBLENDMW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPBLENDMW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPBLENDMW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPBLENDMW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPBLENDMW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPBLENDMW") + } + return p +} + +// VPBLENDVB performs "Variable Blend Packed Bytes". +// +// Mnemonic : VPBLENDVB +// Supported forms : (4 forms) +// +// * VPBLENDVB xmm, xmm, xmm, xmm [AVX] +// * VPBLENDVB xmm, m128, xmm, xmm [AVX] +// * VPBLENDVB ymm, ymm, ymm, ymm [AVX2] +// * VPBLENDVB ymm, m256, ymm, ymm [AVX2] +// +func (self *Program) VPBLENDVB(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPBLENDVB", 4, Operands { v0, v1, v2, v3 }) + // VPBLENDVB xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPBLENDVB xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x4c) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPBLENDVB ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPBLENDVB ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x4c) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPBLENDVB") + } + return p +} + +// VPBLENDW performs "Blend Packed Words". +// +// Mnemonic : VPBLENDW +// Supported forms : (4 forms) +// +// * VPBLENDW imm8, xmm, xmm, xmm [AVX] +// * VPBLENDW imm8, m128, xmm, xmm [AVX] +// * VPBLENDW imm8, ymm, ymm, ymm [AVX2] +// * VPBLENDW imm8, m256, ymm, ymm [AVX2] +// +func (self *Program) VPBLENDW(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPBLENDW", 4, Operands { v0, v1, v2, v3 }) + // VPBLENDW imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x0e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPBLENDW imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x0e) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPBLENDW imm8, ymm, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x0e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPBLENDW imm8, m256, ymm, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x0e) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPBLENDW") + } + return p +} + +// VPBROADCASTB performs "Broadcast Byte Integer". +// +// Mnemonic : VPBROADCASTB +// Supported forms : (13 forms) +// +// * VPBROADCASTB xmm, xmm [AVX2] +// * VPBROADCASTB m8, xmm [AVX2] +// * VPBROADCASTB xmm, ymm [AVX2] +// * VPBROADCASTB m8, ymm [AVX2] +// * VPBROADCASTB r32, zmm{k}{z} [AVX512BW] +// * VPBROADCASTB xmm, zmm{k}{z} [AVX512BW] +// * VPBROADCASTB m8, zmm{k}{z} [AVX512BW] +// * VPBROADCASTB r32, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPBROADCASTB r32, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPBROADCASTB xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPBROADCASTB xmm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPBROADCASTB m8, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPBROADCASTB m8, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPBROADCASTB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPBROADCASTB", 2, Operands { v0, v1 }) + // VPBROADCASTB xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTB m8, xmm + if isM8(v0) && isXMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPBROADCASTB xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTB m8, ymm + if isM8(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPBROADCASTB r32, zmm{k}{z} + if isReg32(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTB xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTB m8, zmm{k}{z} + if isM8(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPBROADCASTB r32, xmm{k}{z} + if isReg32(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTB r32, ymm{k}{z} + if isReg32(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTB xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTB xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x78) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTB m8, xmm{k}{z} + if isM8(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPBROADCASTB m8, ymm{k}{z} + if isM8(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x78) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPBROADCASTB") + } + return p +} + +// VPBROADCASTD performs "Broadcast Doubleword Integer". +// +// Mnemonic : VPBROADCASTD +// Supported forms : (13 forms) +// +// * VPBROADCASTD xmm, xmm [AVX2] +// * VPBROADCASTD m32, xmm [AVX2] +// * VPBROADCASTD xmm, ymm [AVX2] +// * VPBROADCASTD m32, ymm [AVX2] +// * VPBROADCASTD r32, zmm{k}{z} [AVX512F] +// * VPBROADCASTD xmm, zmm{k}{z} [AVX512F] +// * VPBROADCASTD m32, zmm{k}{z} [AVX512F] +// * VPBROADCASTD r32, xmm{k}{z} [AVX512F,AVX512VL] +// * VPBROADCASTD r32, ymm{k}{z} [AVX512F,AVX512VL] +// * VPBROADCASTD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPBROADCASTD xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPBROADCASTD m32, xmm{k}{z} [AVX512F,AVX512VL] +// * VPBROADCASTD m32, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPBROADCASTD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPBROADCASTD", 2, Operands { v0, v1 }) + // VPBROADCASTD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x58) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTD m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x58) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPBROADCASTD xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x58) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTD m32, ymm + if isM32(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x58) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPBROADCASTD r32, zmm{k}{z} + if isReg32(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTD xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x58) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTD m32, zmm{k}{z} + if isM32(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x58) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VPBROADCASTD r32, xmm{k}{z} + if isReg32(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTD r32, ymm{k}{z} + if isReg32(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x58) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTD xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x58) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTD m32, xmm{k}{z} + if isM32(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x58) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VPBROADCASTD m32, ymm{k}{z} + if isM32(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x58) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPBROADCASTD") + } + return p +} + +// VPBROADCASTMB2Q performs "Broadcast Low Byte of Mask Register to Packed Quadword Values". +// +// Mnemonic : VPBROADCASTMB2Q +// Supported forms : (3 forms) +// +// * VPBROADCASTMB2Q k, xmm [AVX512CD,AVX512VL] +// * VPBROADCASTMB2Q k, ymm [AVX512CD,AVX512VL] +// * VPBROADCASTMB2Q k, zmm [AVX512CD] +// +func (self *Program) VPBROADCASTMB2Q(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPBROADCASTMB2Q", 2, Operands { v0, v1 }) + // VPBROADCASTMB2Q k, xmm + if isK(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x08) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTMB2Q k, ymm + if isK(v0) && isEVEXYMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x28) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTMB2Q k, zmm + if isK(v0) && isZMM(v1) { + self.require(ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x48) + m.emit(0x2a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPBROADCASTMB2Q") + } + return p +} + +// VPBROADCASTMW2D performs "Broadcast Low Word of Mask Register to Packed Doubleword Values". +// +// Mnemonic : VPBROADCASTMW2D +// Supported forms : (3 forms) +// +// * VPBROADCASTMW2D k, xmm [AVX512CD,AVX512VL] +// * VPBROADCASTMW2D k, ymm [AVX512CD,AVX512VL] +// * VPBROADCASTMW2D k, zmm [AVX512CD] +// +func (self *Program) VPBROADCASTMW2D(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPBROADCASTMW2D", 2, Operands { v0, v1 }) + // VPBROADCASTMW2D k, xmm + if isK(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x08) + m.emit(0x3a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTMW2D k, ymm + if isK(v0) && isEVEXYMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x28) + m.emit(0x3a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTMW2D k, zmm + if isK(v0) && isZMM(v1) { + self.require(ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x48) + m.emit(0x3a) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPBROADCASTMW2D") + } + return p +} + +// VPBROADCASTQ performs "Broadcast Quadword Integer". +// +// Mnemonic : VPBROADCASTQ +// Supported forms : (13 forms) +// +// * VPBROADCASTQ xmm, xmm [AVX2] +// * VPBROADCASTQ m64, xmm [AVX2] +// * VPBROADCASTQ xmm, ymm [AVX2] +// * VPBROADCASTQ m64, ymm [AVX2] +// * VPBROADCASTQ r64, zmm{k}{z} [AVX512F] +// * VPBROADCASTQ xmm, zmm{k}{z} [AVX512F] +// * VPBROADCASTQ m64, zmm{k}{z} [AVX512F] +// * VPBROADCASTQ r64, xmm{k}{z} [AVX512F,AVX512VL] +// * VPBROADCASTQ r64, ymm{k}{z} [AVX512F,AVX512VL] +// * VPBROADCASTQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPBROADCASTQ xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPBROADCASTQ m64, xmm{k}{z} [AVX512F,AVX512VL] +// * VPBROADCASTQ m64, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPBROADCASTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPBROADCASTQ", 2, Operands { v0, v1 }) + // VPBROADCASTQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x59) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTQ m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x59) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPBROADCASTQ xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x59) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTQ m64, ymm + if isM64(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x59) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPBROADCASTQ r64, zmm{k}{z} + if isReg64(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTQ xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x59) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTQ m64, zmm{k}{z} + if isM64(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x59) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPBROADCASTQ r64, xmm{k}{z} + if isReg64(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTQ r64, ymm{k}{z} + if isReg64(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTQ xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x59) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTQ xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x59) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTQ m64, xmm{k}{z} + if isM64(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x59) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPBROADCASTQ m64, ymm{k}{z} + if isM64(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x59) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPBROADCASTQ") + } + return p +} + +// VPBROADCASTW performs "Broadcast Word Integer". +// +// Mnemonic : VPBROADCASTW +// Supported forms : (13 forms) +// +// * VPBROADCASTW xmm, xmm [AVX2] +// * VPBROADCASTW m16, xmm [AVX2] +// * VPBROADCASTW xmm, ymm [AVX2] +// * VPBROADCASTW m16, ymm [AVX2] +// * VPBROADCASTW r32, zmm{k}{z} [AVX512BW] +// * VPBROADCASTW xmm, zmm{k}{z} [AVX512BW] +// * VPBROADCASTW m16, zmm{k}{z} [AVX512BW] +// * VPBROADCASTW r32, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPBROADCASTW r32, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPBROADCASTW xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPBROADCASTW xmm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPBROADCASTW m16, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPBROADCASTW m16, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPBROADCASTW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPBROADCASTW", 2, Operands { v0, v1 }) + // VPBROADCASTW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTW m16, xmm + if isM16(v0) && isXMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPBROADCASTW xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTW m16, ymm + if isM16(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPBROADCASTW r32, zmm{k}{z} + if isReg32(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTW xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTW m16, zmm{k}{z} + if isM16(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 2) + }) + } + // VPBROADCASTW r32, xmm{k}{z} + if isReg32(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTW r32, ymm{k}{z} + if isReg32(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x7b) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTW xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTW xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x79) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPBROADCASTW m16, xmm{k}{z} + if isM16(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 2) + }) + } + // VPBROADCASTW m16, ymm{k}{z} + if isM16(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x79) + m.mrsd(lcode(v[1]), addr(v[0]), 2) + }) + } + if p.len == 0 { + panic("invalid operands for VPBROADCASTW") + } + return p +} + +// VPCLMULQDQ performs "Carry-Less Quadword Multiplication". +// +// Mnemonic : VPCLMULQDQ +// Supported forms : (2 forms) +// +// * VPCLMULQDQ imm8, xmm, xmm, xmm [AVX,PCLMULQDQ] +// * VPCLMULQDQ imm8, m128, xmm, xmm [AVX,PCLMULQDQ] +// +func (self *Program) VPCLMULQDQ(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCLMULQDQ", 4, Operands { v0, v1, v2, v3 }) + // VPCLMULQDQ imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX | ISA_PCLMULQDQ) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x44) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCLMULQDQ imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX | ISA_PCLMULQDQ) + p.domain = DomainCrypto + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x44) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCLMULQDQ") + } + return p +} + +// VPCMOV performs "Packed Conditional Move". +// +// Mnemonic : VPCMOV +// Supported forms : (6 forms) +// +// * VPCMOV xmm, xmm, xmm, xmm [XOP] +// * VPCMOV m128, xmm, xmm, xmm [XOP] +// * VPCMOV xmm, m128, xmm, xmm [XOP] +// * VPCMOV ymm, ymm, ymm, ymm [XOP] +// * VPCMOV m256, ymm, ymm, ymm [XOP] +// * VPCMOV ymm, m256, ymm, ymm [XOP] +// +func (self *Program) VPCMOV(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCMOV", 4, Operands { v0, v1, v2, v3 }) + // VPCMOV xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0xa2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[2]) << 3)) + m.emit(0xa2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + } + // VPCMOV m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x80, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0xa2) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VPCMOV xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xa2) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPCMOV ymm, ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit(0xa2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfc ^ (hlcode(v[2]) << 3)) + m.emit(0xa2) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + } + // VPCMOV m256, ymm, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x84, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0xa2) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VPCMOV ymm, m256, ymm, ymm + if isYMM(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x04, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xa2) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMOV") + } + return p +} + +// VPCMPB performs "Compare Packed Signed Byte Values". +// +// Mnemonic : VPCMPB +// Supported forms : (6 forms) +// +// * VPCMPB imm8, zmm, zmm, k{k} [AVX512BW] +// * VPCMPB imm8, m512, zmm, k{k} [AVX512BW] +// * VPCMPB imm8, xmm, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPB imm8, m128, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPB imm8, ymm, ymm, k{k} [AVX512BW,AVX512VL] +// * VPCMPB imm8, m256, ymm, k{k} [AVX512BW,AVX512VL] +// +func (self *Program) VPCMPB(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCMPB", 4, Operands { v0, v1, v2, v3 }) + // VPCMPB imm8, zmm, zmm, k{k} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPB imm8, m512, zmm, k{k} + if isImm8(v0) && isM512(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0x3f) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPB imm8, xmm, xmm, k{k} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPB imm8, m128, xmm, k{k} + if isImm8(v0) && isM128(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0x3f) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPB imm8, ymm, ymm, k{k} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPB imm8, m256, ymm, k{k} + if isImm8(v0) && isM256(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0x3f) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPB") + } + return p +} + +// VPCMPD performs "Compare Packed Signed Doubleword Values". +// +// Mnemonic : VPCMPD +// Supported forms : (6 forms) +// +// * VPCMPD imm8, m512/m32bcst, zmm, k{k} [AVX512F] +// * VPCMPD imm8, zmm, zmm, k{k} [AVX512F] +// * VPCMPD imm8, m128/m32bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPD imm8, xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPD imm8, m256/m32bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VPCMPD imm8, ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VPCMPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCMPD", 4, Operands { v0, v1, v2, v3 }) + // VPCMPD imm8, m512/m32bcst, zmm, k{k} + if isImm8(v0) && isM512M32bcst(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0x1f) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPD imm8, zmm, zmm, k{k} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x1f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPD imm8, m128/m32bcst, xmm, k{k} + if isImm8(v0) && isM128M32bcst(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0x1f) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPD imm8, xmm, xmm, k{k} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x1f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPD imm8, m256/m32bcst, ymm, k{k} + if isImm8(v0) && isM256M32bcst(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0x1f) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPD imm8, ymm, ymm, k{k} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x1f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPD") + } + return p +} + +// VPCMPEQB performs "Compare Packed Byte Data for Equality". +// +// Mnemonic : VPCMPEQB +// Supported forms : (10 forms) +// +// * VPCMPEQB xmm, xmm, xmm [AVX] +// * VPCMPEQB m128, xmm, xmm [AVX] +// * VPCMPEQB ymm, ymm, ymm [AVX2] +// * VPCMPEQB m256, ymm, ymm [AVX2] +// * VPCMPEQB zmm, zmm, k{k} [AVX512BW] +// * VPCMPEQB m512, zmm, k{k} [AVX512BW] +// * VPCMPEQB xmm, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPEQB m128, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPEQB ymm, ymm, k{k} [AVX512BW,AVX512VL] +// * VPCMPEQB m256, ymm, k{k} [AVX512BW,AVX512VL] +// +func (self *Program) VPCMPEQB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPCMPEQB", 3, Operands { v0, v1, v2 }) + // VPCMPEQB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x74) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x74) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPEQB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x74) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x74) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPEQB zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x74) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQB m512, zmm, k{k} + if isM512(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x74) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPCMPEQB xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x74) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQB m128, xmm, k{k} + if isM128(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x74) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPCMPEQB ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x74) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQB m256, ymm, k{k} + if isM256(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x74) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPEQB") + } + return p +} + +// VPCMPEQD performs "Compare Packed Doubleword Data for Equality". +// +// Mnemonic : VPCMPEQD +// Supported forms : (10 forms) +// +// * VPCMPEQD xmm, xmm, xmm [AVX] +// * VPCMPEQD m128, xmm, xmm [AVX] +// * VPCMPEQD ymm, ymm, ymm [AVX2] +// * VPCMPEQD m256, ymm, ymm [AVX2] +// * VPCMPEQD m512/m32bcst, zmm, k{k} [AVX512F] +// * VPCMPEQD zmm, zmm, k{k} [AVX512F] +// * VPCMPEQD m128/m32bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPEQD xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPEQD m256/m32bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VPCMPEQD ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VPCMPEQD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPCMPEQD", 3, Operands { v0, v1, v2 }) + // VPCMPEQD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x76) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x76) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPEQD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x76) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x76) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPEQD m512/m32bcst, zmm, k{k} + if isM512M32bcst(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x76) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPCMPEQD zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x76) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQD m128/m32bcst, xmm, k{k} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x76) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPCMPEQD xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x76) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQD m256/m32bcst, ymm, k{k} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x76) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPCMPEQD ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x76) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPEQD") + } + return p +} + +// VPCMPEQQ performs "Compare Packed Quadword Data for Equality". +// +// Mnemonic : VPCMPEQQ +// Supported forms : (10 forms) +// +// * VPCMPEQQ xmm, xmm, xmm [AVX] +// * VPCMPEQQ m128, xmm, xmm [AVX] +// * VPCMPEQQ ymm, ymm, ymm [AVX2] +// * VPCMPEQQ m256, ymm, ymm [AVX2] +// * VPCMPEQQ m512/m64bcst, zmm, k{k} [AVX512F] +// * VPCMPEQQ zmm, zmm, k{k} [AVX512F] +// * VPCMPEQQ m128/m64bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPEQQ xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPEQQ m256/m64bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VPCMPEQQ ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VPCMPEQQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPCMPEQQ", 3, Operands { v0, v1, v2 }) + // VPCMPEQQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x29) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x29) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPEQQ ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x29) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x29) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPEQQ m512/m64bcst, zmm, k{k} + if isM512M64bcst(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x29) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPCMPEQQ zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x29) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQQ m128/m64bcst, xmm, k{k} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x29) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPCMPEQQ xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x29) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQQ m256/m64bcst, ymm, k{k} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x29) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPCMPEQQ ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x29) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPEQQ") + } + return p +} + +// VPCMPEQW performs "Compare Packed Word Data for Equality". +// +// Mnemonic : VPCMPEQW +// Supported forms : (10 forms) +// +// * VPCMPEQW xmm, xmm, xmm [AVX] +// * VPCMPEQW m128, xmm, xmm [AVX] +// * VPCMPEQW ymm, ymm, ymm [AVX2] +// * VPCMPEQW m256, ymm, ymm [AVX2] +// * VPCMPEQW zmm, zmm, k{k} [AVX512BW] +// * VPCMPEQW m512, zmm, k{k} [AVX512BW] +// * VPCMPEQW xmm, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPEQW m128, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPEQW ymm, ymm, k{k} [AVX512BW,AVX512VL] +// * VPCMPEQW m256, ymm, k{k} [AVX512BW,AVX512VL] +// +func (self *Program) VPCMPEQW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPCMPEQW", 3, Operands { v0, v1, v2 }) + // VPCMPEQW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x75) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x75) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPEQW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x75) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x75) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPEQW zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x75) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQW m512, zmm, k{k} + if isM512(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x75) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPCMPEQW xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x75) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQW m128, xmm, k{k} + if isM128(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x75) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPCMPEQW ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x75) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPEQW m256, ymm, k{k} + if isM256(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x75) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPEQW") + } + return p +} + +// VPCMPESTRI performs "Packed Compare Explicit Length Strings, Return Index". +// +// Mnemonic : VPCMPESTRI +// Supported forms : (2 forms) +// +// * VPCMPESTRI imm8, xmm, xmm [AVX] +// * VPCMPESTRI imm8, m128, xmm [AVX] +// +func (self *Program) VPCMPESTRI(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPCMPESTRI", 3, Operands { v0, v1, v2 }) + // VPCMPESTRI imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79) + m.emit(0x61) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPESTRI imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[2]), addr(v[1]), 0) + m.emit(0x61) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPESTRI") + } + return p +} + +// VPCMPESTRM performs "Packed Compare Explicit Length Strings, Return Mask". +// +// Mnemonic : VPCMPESTRM +// Supported forms : (2 forms) +// +// * VPCMPESTRM imm8, xmm, xmm [AVX] +// * VPCMPESTRM imm8, m128, xmm [AVX] +// +func (self *Program) VPCMPESTRM(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPCMPESTRM", 3, Operands { v0, v1, v2 }) + // VPCMPESTRM imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79) + m.emit(0x60) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPESTRM imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[2]), addr(v[1]), 0) + m.emit(0x60) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPESTRM") + } + return p +} + +// VPCMPGTB performs "Compare Packed Signed Byte Integers for Greater Than". +// +// Mnemonic : VPCMPGTB +// Supported forms : (10 forms) +// +// * VPCMPGTB xmm, xmm, xmm [AVX] +// * VPCMPGTB m128, xmm, xmm [AVX] +// * VPCMPGTB ymm, ymm, ymm [AVX2] +// * VPCMPGTB m256, ymm, ymm [AVX2] +// * VPCMPGTB zmm, zmm, k{k} [AVX512BW] +// * VPCMPGTB m512, zmm, k{k} [AVX512BW] +// * VPCMPGTB xmm, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPGTB m128, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPGTB ymm, ymm, k{k} [AVX512BW,AVX512VL] +// * VPCMPGTB m256, ymm, k{k} [AVX512BW,AVX512VL] +// +func (self *Program) VPCMPGTB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPCMPGTB", 3, Operands { v0, v1, v2 }) + // VPCMPGTB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x64) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x64) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPGTB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x64) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x64) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPGTB zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x64) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTB m512, zmm, k{k} + if isM512(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x64) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPCMPGTB xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x64) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTB m128, xmm, k{k} + if isM128(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x64) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPCMPGTB ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x64) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTB m256, ymm, k{k} + if isM256(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x64) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPGTB") + } + return p +} + +// VPCMPGTD performs "Compare Packed Signed Doubleword Integers for Greater Than". +// +// Mnemonic : VPCMPGTD +// Supported forms : (10 forms) +// +// * VPCMPGTD xmm, xmm, xmm [AVX] +// * VPCMPGTD m128, xmm, xmm [AVX] +// * VPCMPGTD ymm, ymm, ymm [AVX2] +// * VPCMPGTD m256, ymm, ymm [AVX2] +// * VPCMPGTD m512/m32bcst, zmm, k{k} [AVX512F] +// * VPCMPGTD zmm, zmm, k{k} [AVX512F] +// * VPCMPGTD m128/m32bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPGTD xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPGTD m256/m32bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VPCMPGTD ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VPCMPGTD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPCMPGTD", 3, Operands { v0, v1, v2 }) + // VPCMPGTD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPGTD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPGTD m512/m32bcst, zmm, k{k} + if isM512M32bcst(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPCMPGTD zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTD m128/m32bcst, xmm, k{k} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPCMPGTD xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTD m256/m32bcst, ymm, k{k} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x66) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPCMPGTD ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x66) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPGTD") + } + return p +} + +// VPCMPGTQ performs "Compare Packed Data for Greater Than". +// +// Mnemonic : VPCMPGTQ +// Supported forms : (10 forms) +// +// * VPCMPGTQ xmm, xmm, xmm [AVX] +// * VPCMPGTQ m128, xmm, xmm [AVX] +// * VPCMPGTQ ymm, ymm, ymm [AVX2] +// * VPCMPGTQ m256, ymm, ymm [AVX2] +// * VPCMPGTQ m512/m64bcst, zmm, k{k} [AVX512F] +// * VPCMPGTQ zmm, zmm, k{k} [AVX512F] +// * VPCMPGTQ m128/m64bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPGTQ xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPGTQ m256/m64bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VPCMPGTQ ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VPCMPGTQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPCMPGTQ", 3, Operands { v0, v1, v2 }) + // VPCMPGTQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x37) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x37) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPGTQ ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x37) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x37) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPGTQ m512/m64bcst, zmm, k{k} + if isM512M64bcst(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x37) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPCMPGTQ zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x37) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTQ m128/m64bcst, xmm, k{k} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x37) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPCMPGTQ xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x37) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTQ m256/m64bcst, ymm, k{k} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x37) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPCMPGTQ ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x37) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPGTQ") + } + return p +} + +// VPCMPGTW performs "Compare Packed Signed Word Integers for Greater Than". +// +// Mnemonic : VPCMPGTW +// Supported forms : (10 forms) +// +// * VPCMPGTW xmm, xmm, xmm [AVX] +// * VPCMPGTW m128, xmm, xmm [AVX] +// * VPCMPGTW ymm, ymm, ymm [AVX2] +// * VPCMPGTW m256, ymm, ymm [AVX2] +// * VPCMPGTW zmm, zmm, k{k} [AVX512BW] +// * VPCMPGTW m512, zmm, k{k} [AVX512BW] +// * VPCMPGTW xmm, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPGTW m128, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPGTW ymm, ymm, k{k} [AVX512BW,AVX512VL] +// * VPCMPGTW m256, ymm, k{k} [AVX512BW,AVX512VL] +// +func (self *Program) VPCMPGTW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPCMPGTW", 3, Operands { v0, v1, v2 }) + // VPCMPGTW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x65) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x65) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPGTW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x65) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x65) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPCMPGTW zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x65) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTW m512, zmm, k{k} + if isM512(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x65) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPCMPGTW xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x65) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTW m128, xmm, k{k} + if isM128(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x65) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPCMPGTW ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x65) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPCMPGTW m256, ymm, k{k} + if isM256(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x65) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPGTW") + } + return p +} + +// VPCMPISTRI performs "Packed Compare Implicit Length Strings, Return Index". +// +// Mnemonic : VPCMPISTRI +// Supported forms : (2 forms) +// +// * VPCMPISTRI imm8, xmm, xmm [AVX] +// * VPCMPISTRI imm8, m128, xmm [AVX] +// +func (self *Program) VPCMPISTRI(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPCMPISTRI", 3, Operands { v0, v1, v2 }) + // VPCMPISTRI imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79) + m.emit(0x63) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPISTRI imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[2]), addr(v[1]), 0) + m.emit(0x63) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPISTRI") + } + return p +} + +// VPCMPISTRM performs "Packed Compare Implicit Length Strings, Return Mask". +// +// Mnemonic : VPCMPISTRM +// Supported forms : (2 forms) +// +// * VPCMPISTRM imm8, xmm, xmm [AVX] +// * VPCMPISTRM imm8, m128, xmm [AVX] +// +func (self *Program) VPCMPISTRM(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPCMPISTRM", 3, Operands { v0, v1, v2 }) + // VPCMPISTRM imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79) + m.emit(0x62) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPISTRM imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[2]), addr(v[1]), 0) + m.emit(0x62) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPISTRM") + } + return p +} + +// VPCMPQ performs "Compare Packed Signed Quadword Values". +// +// Mnemonic : VPCMPQ +// Supported forms : (6 forms) +// +// * VPCMPQ imm8, m512/m64bcst, zmm, k{k} [AVX512F] +// * VPCMPQ imm8, zmm, zmm, k{k} [AVX512F] +// * VPCMPQ imm8, m128/m64bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPQ imm8, xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPQ imm8, m256/m64bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VPCMPQ imm8, ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VPCMPQ(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCMPQ", 4, Operands { v0, v1, v2, v3 }) + // VPCMPQ imm8, m512/m64bcst, zmm, k{k} + if isImm8(v0) && isM512M64bcst(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0x1f) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPQ imm8, zmm, zmm, k{k} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x1f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPQ imm8, m128/m64bcst, xmm, k{k} + if isImm8(v0) && isM128M64bcst(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0x1f) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPQ imm8, xmm, xmm, k{k} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x1f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPQ imm8, m256/m64bcst, ymm, k{k} + if isImm8(v0) && isM256M64bcst(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0x1f) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPQ imm8, ymm, ymm, k{k} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x1f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPQ") + } + return p +} + +// VPCMPUB performs "Compare Packed Unsigned Byte Values". +// +// Mnemonic : VPCMPUB +// Supported forms : (6 forms) +// +// * VPCMPUB imm8, zmm, zmm, k{k} [AVX512BW] +// * VPCMPUB imm8, m512, zmm, k{k} [AVX512BW] +// * VPCMPUB imm8, xmm, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPUB imm8, m128, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPUB imm8, ymm, ymm, k{k} [AVX512BW,AVX512VL] +// * VPCMPUB imm8, m256, ymm, k{k} [AVX512BW,AVX512VL] +// +func (self *Program) VPCMPUB(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCMPUB", 4, Operands { v0, v1, v2, v3 }) + // VPCMPUB imm8, zmm, zmm, k{k} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x3e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUB imm8, m512, zmm, k{k} + if isImm8(v0) && isM512(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0x3e) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUB imm8, xmm, xmm, k{k} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x3e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUB imm8, m128, xmm, k{k} + if isImm8(v0) && isM128(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0x3e) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUB imm8, ymm, ymm, k{k} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x3e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUB imm8, m256, ymm, k{k} + if isImm8(v0) && isM256(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0x3e) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPUB") + } + return p +} + +// VPCMPUD performs "Compare Packed Unsigned Doubleword Values". +// +// Mnemonic : VPCMPUD +// Supported forms : (6 forms) +// +// * VPCMPUD imm8, m512/m32bcst, zmm, k{k} [AVX512F] +// * VPCMPUD imm8, zmm, zmm, k{k} [AVX512F] +// * VPCMPUD imm8, m128/m32bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPUD imm8, xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPUD imm8, m256/m32bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VPCMPUD imm8, ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VPCMPUD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCMPUD", 4, Operands { v0, v1, v2, v3 }) + // VPCMPUD imm8, m512/m32bcst, zmm, k{k} + if isImm8(v0) && isM512M32bcst(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0x1e) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUD imm8, zmm, zmm, k{k} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUD imm8, m128/m32bcst, xmm, k{k} + if isImm8(v0) && isM128M32bcst(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0x1e) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUD imm8, xmm, xmm, k{k} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUD imm8, m256/m32bcst, ymm, k{k} + if isImm8(v0) && isM256M32bcst(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0x1e) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUD imm8, ymm, ymm, k{k} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPUD") + } + return p +} + +// VPCMPUQ performs "Compare Packed Unsigned Quadword Values". +// +// Mnemonic : VPCMPUQ +// Supported forms : (6 forms) +// +// * VPCMPUQ imm8, m512/m64bcst, zmm, k{k} [AVX512F] +// * VPCMPUQ imm8, zmm, zmm, k{k} [AVX512F] +// * VPCMPUQ imm8, m128/m64bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPUQ imm8, xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VPCMPUQ imm8, m256/m64bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VPCMPUQ imm8, ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VPCMPUQ(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCMPUQ", 4, Operands { v0, v1, v2, v3 }) + // VPCMPUQ imm8, m512/m64bcst, zmm, k{k} + if isImm8(v0) && isM512M64bcst(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0x1e) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUQ imm8, zmm, zmm, k{k} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUQ imm8, m128/m64bcst, xmm, k{k} + if isImm8(v0) && isM128M64bcst(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0x1e) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUQ imm8, xmm, xmm, k{k} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUQ imm8, m256/m64bcst, ymm, k{k} + if isImm8(v0) && isM256M64bcst(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, bcode(v[1])) + m.emit(0x1e) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUQ imm8, ymm, ymm, k{k} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x1e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPUQ") + } + return p +} + +// VPCMPUW performs "Compare Packed Unsigned Word Values". +// +// Mnemonic : VPCMPUW +// Supported forms : (6 forms) +// +// * VPCMPUW imm8, zmm, zmm, k{k} [AVX512BW] +// * VPCMPUW imm8, m512, zmm, k{k} [AVX512BW] +// * VPCMPUW imm8, xmm, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPUW imm8, m128, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPUW imm8, ymm, ymm, k{k} [AVX512BW,AVX512VL] +// * VPCMPUW imm8, m256, ymm, k{k} [AVX512BW,AVX512VL] +// +func (self *Program) VPCMPUW(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCMPUW", 4, Operands { v0, v1, v2, v3 }) + // VPCMPUW imm8, zmm, zmm, k{k} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x3e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUW imm8, m512, zmm, k{k} + if isImm8(v0) && isM512(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0x3e) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUW imm8, xmm, xmm, k{k} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x3e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUW imm8, m128, xmm, k{k} + if isImm8(v0) && isM128(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0x3e) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUW imm8, ymm, ymm, k{k} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x3e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPUW imm8, m256, ymm, k{k} + if isImm8(v0) && isM256(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0x3e) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPUW") + } + return p +} + +// VPCMPW performs "Compare Packed Signed Word Values". +// +// Mnemonic : VPCMPW +// Supported forms : (6 forms) +// +// * VPCMPW imm8, zmm, zmm, k{k} [AVX512BW] +// * VPCMPW imm8, m512, zmm, k{k} [AVX512BW] +// * VPCMPW imm8, xmm, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPW imm8, m128, xmm, k{k} [AVX512BW,AVX512VL] +// * VPCMPW imm8, ymm, ymm, k{k} [AVX512BW,AVX512VL] +// * VPCMPW imm8, m256, ymm, k{k} [AVX512BW,AVX512VL] +// +func (self *Program) VPCMPW(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCMPW", 4, Operands { v0, v1, v2, v3 }) + // VPCMPW imm8, zmm, zmm, k{k} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPW imm8, m512, zmm, k{k} + if isImm8(v0) && isM512(v1) && isZMM(v2) && isKk(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0x3f) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPW imm8, xmm, xmm, k{k} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPW imm8, m128, xmm, k{k} + if isImm8(v0) && isM128(v1) && isEVEXXMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0x3f) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPW imm8, ymm, ymm, k{k} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCMPW imm8, m256, ymm, k{k} + if isImm8(v0) && isM256(v1) && isEVEXYMM(v2) && isKk(v3) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), 0, 0) + m.emit(0x3f) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCMPW") + } + return p +} + +// VPCOMB performs "Compare Packed Signed Byte Integers". +// +// Mnemonic : VPCOMB +// Supported forms : (2 forms) +// +// * VPCOMB imm8, xmm, xmm, xmm [XOP] +// * VPCOMB imm8, m128, xmm, xmm [XOP] +// +func (self *Program) VPCOMB(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCOMB", 4, Operands { v0, v1, v2, v3 }) + // VPCOMB imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0xcc) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCOMB imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xcc) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCOMB") + } + return p +} + +// VPCOMD performs "Compare Packed Signed Doubleword Integers". +// +// Mnemonic : VPCOMD +// Supported forms : (2 forms) +// +// * VPCOMD imm8, xmm, xmm, xmm [XOP] +// * VPCOMD imm8, m128, xmm, xmm [XOP] +// +func (self *Program) VPCOMD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCOMD", 4, Operands { v0, v1, v2, v3 }) + // VPCOMD imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0xce) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCOMD imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xce) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCOMD") + } + return p +} + +// VPCOMPRESSD performs "Store Sparse Packed Doubleword Integer Values into Dense Memory/Register". +// +// Mnemonic : VPCOMPRESSD +// Supported forms : (6 forms) +// +// * VPCOMPRESSD zmm, zmm{k}{z} [AVX512F] +// * VPCOMPRESSD zmm, m512{k}{z} [AVX512F] +// * VPCOMPRESSD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPCOMPRESSD xmm, m128{k}{z} [AVX512F,AVX512VL] +// * VPCOMPRESSD ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPCOMPRESSD ymm, m256{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPCOMPRESSD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPCOMPRESSD", 2, Operands { v0, v1 }) + // VPCOMPRESSD zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x8b) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPCOMPRESSD zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x8b) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VPCOMPRESSD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x8b) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPCOMPRESSD xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x8b) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VPCOMPRESSD ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x8b) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPCOMPRESSD ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x8b) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPCOMPRESSD") + } + return p +} + +// VPCOMPRESSQ performs "Store Sparse Packed Quadword Integer Values into Dense Memory/Register". +// +// Mnemonic : VPCOMPRESSQ +// Supported forms : (6 forms) +// +// * VPCOMPRESSQ zmm, zmm{k}{z} [AVX512F] +// * VPCOMPRESSQ zmm, m512{k}{z} [AVX512F] +// * VPCOMPRESSQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPCOMPRESSQ xmm, m128{k}{z} [AVX512F,AVX512VL] +// * VPCOMPRESSQ ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPCOMPRESSQ ymm, m256{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPCOMPRESSQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPCOMPRESSQ", 2, Operands { v0, v1 }) + // VPCOMPRESSQ zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x8b) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPCOMPRESSQ zmm, m512{k}{z} + if isZMM(v0) && isM512kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x8b) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPCOMPRESSQ xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x8b) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPCOMPRESSQ xmm, m128{k}{z} + if isEVEXXMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x8b) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPCOMPRESSQ ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x8b) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPCOMPRESSQ ymm, m256{k}{z} + if isEVEXYMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x8b) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPCOMPRESSQ") + } + return p +} + +// VPCOMQ performs "Compare Packed Signed Quadword Integers". +// +// Mnemonic : VPCOMQ +// Supported forms : (2 forms) +// +// * VPCOMQ imm8, xmm, xmm, xmm [XOP] +// * VPCOMQ imm8, m128, xmm, xmm [XOP] +// +func (self *Program) VPCOMQ(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCOMQ", 4, Operands { v0, v1, v2, v3 }) + // VPCOMQ imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0xcf) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCOMQ imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xcf) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCOMQ") + } + return p +} + +// VPCOMUB performs "Compare Packed Unsigned Byte Integers". +// +// Mnemonic : VPCOMUB +// Supported forms : (2 forms) +// +// * VPCOMUB imm8, xmm, xmm, xmm [XOP] +// * VPCOMUB imm8, m128, xmm, xmm [XOP] +// +func (self *Program) VPCOMUB(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCOMUB", 4, Operands { v0, v1, v2, v3 }) + // VPCOMUB imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0xec) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCOMUB imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xec) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCOMUB") + } + return p +} + +// VPCOMUD performs "Compare Packed Unsigned Doubleword Integers". +// +// Mnemonic : VPCOMUD +// Supported forms : (2 forms) +// +// * VPCOMUD imm8, xmm, xmm, xmm [XOP] +// * VPCOMUD imm8, m128, xmm, xmm [XOP] +// +func (self *Program) VPCOMUD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCOMUD", 4, Operands { v0, v1, v2, v3 }) + // VPCOMUD imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0xee) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCOMUD imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xee) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCOMUD") + } + return p +} + +// VPCOMUQ performs "Compare Packed Unsigned Quadword Integers". +// +// Mnemonic : VPCOMUQ +// Supported forms : (2 forms) +// +// * VPCOMUQ imm8, xmm, xmm, xmm [XOP] +// * VPCOMUQ imm8, m128, xmm, xmm [XOP] +// +func (self *Program) VPCOMUQ(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCOMUQ", 4, Operands { v0, v1, v2, v3 }) + // VPCOMUQ imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0xef) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCOMUQ imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xef) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCOMUQ") + } + return p +} + +// VPCOMUW performs "Compare Packed Unsigned Word Integers". +// +// Mnemonic : VPCOMUW +// Supported forms : (2 forms) +// +// * VPCOMUW imm8, xmm, xmm, xmm [XOP] +// * VPCOMUW imm8, m128, xmm, xmm [XOP] +// +func (self *Program) VPCOMUW(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCOMUW", 4, Operands { v0, v1, v2, v3 }) + // VPCOMUW imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0xed) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCOMUW imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xed) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCOMUW") + } + return p +} + +// VPCOMW performs "Compare Packed Signed Word Integers". +// +// Mnemonic : VPCOMW +// Supported forms : (2 forms) +// +// * VPCOMW imm8, xmm, xmm, xmm [XOP] +// * VPCOMW imm8, m128, xmm, xmm [XOP] +// +func (self *Program) VPCOMW(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPCOMW", 4, Operands { v0, v1, v2, v3 }) + // VPCOMW imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0xcd) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPCOMW imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xcd) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCOMW") + } + return p +} + +// VPCONFLICTD performs "Detect Conflicts Within a Vector of Packed Doubleword Values into Dense Memory/Register". +// +// Mnemonic : VPCONFLICTD +// Supported forms : (6 forms) +// +// * VPCONFLICTD m128/m32bcst, xmm{k}{z} [AVX512CD,AVX512VL] +// * VPCONFLICTD m256/m32bcst, ymm{k}{z} [AVX512CD,AVX512VL] +// * VPCONFLICTD m512/m32bcst, zmm{k}{z} [AVX512CD] +// * VPCONFLICTD xmm, xmm{k}{z} [AVX512CD,AVX512VL] +// * VPCONFLICTD ymm, ymm{k}{z} [AVX512CD,AVX512VL] +// * VPCONFLICTD zmm, zmm{k}{z} [AVX512CD] +// +func (self *Program) VPCONFLICTD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPCONFLICTD", 2, Operands { v0, v1 }) + // VPCONFLICTD m128/m32bcst, xmm{k}{z} + if isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xc4) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VPCONFLICTD m256/m32bcst, ymm{k}{z} + if isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xc4) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VPCONFLICTD m512/m32bcst, zmm{k}{z} + if isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xc4) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VPCONFLICTD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0xc4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPCONFLICTD ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0xc4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPCONFLICTD zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0xc4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCONFLICTD") + } + return p +} + +// VPCONFLICTQ performs "Detect Conflicts Within a Vector of Packed Quadword Values into Dense Memory/Register". +// +// Mnemonic : VPCONFLICTQ +// Supported forms : (6 forms) +// +// * VPCONFLICTQ m128/m64bcst, xmm{k}{z} [AVX512CD,AVX512VL] +// * VPCONFLICTQ m256/m64bcst, ymm{k}{z} [AVX512CD,AVX512VL] +// * VPCONFLICTQ m512/m64bcst, zmm{k}{z} [AVX512CD] +// * VPCONFLICTQ xmm, xmm{k}{z} [AVX512CD,AVX512VL] +// * VPCONFLICTQ ymm, ymm{k}{z} [AVX512CD,AVX512VL] +// * VPCONFLICTQ zmm, zmm{k}{z} [AVX512CD] +// +func (self *Program) VPCONFLICTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPCONFLICTQ", 2, Operands { v0, v1 }) + // VPCONFLICTQ m128/m64bcst, xmm{k}{z} + if isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xc4) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VPCONFLICTQ m256/m64bcst, ymm{k}{z} + if isM256M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xc4) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VPCONFLICTQ m512/m64bcst, zmm{k}{z} + if isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xc4) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VPCONFLICTQ xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0xc4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPCONFLICTQ ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0xc4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPCONFLICTQ zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0xc4) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPCONFLICTQ") + } + return p +} + +// VPERM2F128 performs "Permute Floating-Point Values". +// +// Mnemonic : VPERM2F128 +// Supported forms : (2 forms) +// +// * VPERM2F128 imm8, ymm, ymm, ymm [AVX] +// * VPERM2F128 imm8, m256, ymm, ymm [AVX] +// +func (self *Program) VPERM2F128(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPERM2F128", 4, Operands { v0, v1, v2, v3 }) + // VPERM2F128 imm8, ymm, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x06) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERM2F128 imm8, m256, ymm, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x06) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERM2F128") + } + return p +} + +// VPERM2I128 performs "Permute 128-Bit Integer Values". +// +// Mnemonic : VPERM2I128 +// Supported forms : (2 forms) +// +// * VPERM2I128 imm8, ymm, ymm, ymm [AVX2] +// * VPERM2I128 imm8, m256, ymm, ymm [AVX2] +// +func (self *Program) VPERM2I128(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPERM2I128", 4, Operands { v0, v1, v2, v3 }) + // VPERM2I128 imm8, ymm, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit(0x46) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERM2I128 imm8, m256, ymm, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x46) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERM2I128") + } + return p +} + +// VPERMB performs "Permute Byte Integers". +// +// Mnemonic : VPERMB +// Supported forms : (6 forms) +// +// * VPERMB xmm, xmm, xmm{k}{z} [AVX512VBMI,AVX512VL] +// * VPERMB m128, xmm, xmm{k}{z} [AVX512VBMI,AVX512VL] +// * VPERMB ymm, ymm, ymm{k}{z} [AVX512VBMI,AVX512VL] +// * VPERMB m256, ymm, ymm{k}{z} [AVX512VBMI,AVX512VL] +// * VPERMB zmm, zmm, zmm{k}{z} [AVX512VBMI] +// * VPERMB m512, zmm, zmm{k}{z} [AVX512VBMI] +// +func (self *Program) VPERMB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMB", 3, Operands { v0, v1, v2 }) + // VPERMB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x8d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x8d) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x8d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x8d) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x8d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x8d) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMB") + } + return p +} + +// VPERMD performs "Permute Doubleword Integers". +// +// Mnemonic : VPERMD +// Supported forms : (6 forms) +// +// * VPERMD ymm, ymm, ymm [AVX2] +// * VPERMD m256, ymm, ymm [AVX2] +// * VPERMD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMD", 3, Operands { v0, v1, v2 }) + // VPERMD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x36) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x36) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPERMD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x36) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x36) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x36) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x36) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMD") + } + return p +} + +// VPERMI2B performs "Full Permute of Bytes From Two Tables Overwriting the Index". +// +// Mnemonic : VPERMI2B +// Supported forms : (6 forms) +// +// * VPERMI2B xmm, xmm, xmm{k}{z} [AVX512VBMI,AVX512VL] +// * VPERMI2B m128, xmm, xmm{k}{z} [AVX512VBMI,AVX512VL] +// * VPERMI2B ymm, ymm, ymm{k}{z} [AVX512VBMI,AVX512VL] +// * VPERMI2B m256, ymm, ymm{k}{z} [AVX512VBMI,AVX512VL] +// * VPERMI2B zmm, zmm, zmm{k}{z} [AVX512VBMI] +// * VPERMI2B m512, zmm, zmm{k}{z} [AVX512VBMI] +// +func (self *Program) VPERMI2B(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMI2B", 3, Operands { v0, v1, v2 }) + // VPERMI2B xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x75) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2B m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x75) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMI2B ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x75) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2B m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x75) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMI2B zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x75) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2B m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x75) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMI2B") + } + return p +} + +// VPERMI2D performs "Full Permute of Doublewords From Two Tables Overwriting the Index". +// +// Mnemonic : VPERMI2D +// Supported forms : (6 forms) +// +// * VPERMI2D m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMI2D zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMI2D m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMI2D xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMI2D m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMI2D ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMI2D(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMI2D", 3, Operands { v0, v1, v2 }) + // VPERMI2D m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x76) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMI2D zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x76) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2D m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x76) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMI2D xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x76) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2D m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x76) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMI2D ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x76) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMI2D") + } + return p +} + +// VPERMI2PD performs "Full Permute of Double-Precision Floating-Point Values From Two Tables Overwriting the Index". +// +// Mnemonic : VPERMI2PD +// Supported forms : (6 forms) +// +// * VPERMI2PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMI2PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMI2PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMI2PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMI2PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMI2PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMI2PD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMI2PD", 3, Operands { v0, v1, v2 }) + // VPERMI2PD m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x77) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMI2PD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x77) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2PD m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x77) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMI2PD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x77) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2PD m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x77) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMI2PD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x77) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMI2PD") + } + return p +} + +// VPERMI2PS performs "Full Permute of Single-Precision Floating-Point Values From Two Tables Overwriting the Index". +// +// Mnemonic : VPERMI2PS +// Supported forms : (6 forms) +// +// * VPERMI2PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMI2PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMI2PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMI2PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMI2PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMI2PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMI2PS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMI2PS", 3, Operands { v0, v1, v2 }) + // VPERMI2PS m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x77) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMI2PS zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x77) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2PS m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x77) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMI2PS xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x77) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2PS m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x77) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMI2PS ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x77) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMI2PS") + } + return p +} + +// VPERMI2Q performs "Full Permute of Quadwords From Two Tables Overwriting the Index". +// +// Mnemonic : VPERMI2Q +// Supported forms : (6 forms) +// +// * VPERMI2Q m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMI2Q zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMI2Q m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMI2Q xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMI2Q m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMI2Q ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMI2Q(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMI2Q", 3, Operands { v0, v1, v2 }) + // VPERMI2Q m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x76) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMI2Q zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x76) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2Q m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x76) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMI2Q xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x76) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2Q m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x76) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMI2Q ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x76) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMI2Q") + } + return p +} + +// VPERMI2W performs "Full Permute of Words From Two Tables Overwriting the Index". +// +// Mnemonic : VPERMI2W +// Supported forms : (6 forms) +// +// * VPERMI2W zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPERMI2W m512, zmm, zmm{k}{z} [AVX512BW] +// * VPERMI2W xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPERMI2W m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPERMI2W ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPERMI2W m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPERMI2W(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMI2W", 3, Operands { v0, v1, v2 }) + // VPERMI2W zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x75) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2W m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x75) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMI2W xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x75) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2W m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x75) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMI2W ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x75) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMI2W m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x75) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMI2W") + } + return p +} + +// VPERMIL2PD performs "Permute Two-Source Double-Precision Floating-Point Vectors". +// +// Mnemonic : VPERMIL2PD +// Supported forms : (6 forms) +// +// * VPERMIL2PD imm4, xmm, xmm, xmm, xmm [XOP] +// * VPERMIL2PD imm4, m128, xmm, xmm, xmm [XOP] +// * VPERMIL2PD imm4, xmm, m128, xmm, xmm [XOP] +// * VPERMIL2PD imm4, ymm, ymm, ymm, ymm [XOP] +// * VPERMIL2PD imm4, m256, ymm, ymm, ymm [XOP] +// * VPERMIL2PD imm4, ymm, m256, ymm, ymm [XOP] +// +func (self *Program) VPERMIL2PD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, v4 interface{}) *Instruction { + p := self.alloc("VPERMIL2PD", 5, Operands { v0, v1, v2, v3, v4 }) + // VPERMIL2PD imm4, xmm, xmm, xmm, xmm + if isImm4(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) && isXMM(v4) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[4]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0x79 ^ (hlcode(v[3]) << 3)) + m.emit(0x49) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.emit((hlcode(v[1]) << 4) | imml(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[4]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xf9 ^ (hlcode(v[3]) << 3)) + m.emit(0x49) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[1])) + m.emit((hlcode(v[2]) << 4) | imml(v[0])) + }) + } + // VPERMIL2PD imm4, m128, xmm, xmm, xmm + if isImm4(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) && isXMM(v4) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[4]), addr(v[1]), hlcode(v[3])) + m.emit(0x49) + m.mrsd(lcode(v[4]), addr(v[1]), 1) + m.emit((hlcode(v[2]) << 4) | imml(v[0])) + }) + } + // VPERMIL2PD imm4, xmm, m128, xmm, xmm + if isImm4(v0) && isXMM(v1) && isM128(v2) && isXMM(v3) && isXMM(v4) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[4]), addr(v[2]), hlcode(v[3])) + m.emit(0x49) + m.mrsd(lcode(v[4]), addr(v[2]), 1) + m.emit((hlcode(v[1]) << 4) | imml(v[0])) + }) + } + // VPERMIL2PD imm4, ymm, ymm, ymm, ymm + if isImm4(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) && isYMM(v4) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[4]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0x7d ^ (hlcode(v[3]) << 3)) + m.emit(0x49) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.emit((hlcode(v[1]) << 4) | imml(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[4]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[3]) << 3)) + m.emit(0x49) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[1])) + m.emit((hlcode(v[2]) << 4) | imml(v[0])) + }) + } + // VPERMIL2PD imm4, m256, ymm, ymm, ymm + if isImm4(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) && isYMM(v4) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[4]), addr(v[1]), hlcode(v[3])) + m.emit(0x49) + m.mrsd(lcode(v[4]), addr(v[1]), 1) + m.emit((hlcode(v[2]) << 4) | imml(v[0])) + }) + } + // VPERMIL2PD imm4, ymm, m256, ymm, ymm + if isImm4(v0) && isYMM(v1) && isM256(v2) && isYMM(v3) && isYMM(v4) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[4]), addr(v[2]), hlcode(v[3])) + m.emit(0x49) + m.mrsd(lcode(v[4]), addr(v[2]), 1) + m.emit((hlcode(v[1]) << 4) | imml(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMIL2PD") + } + return p +} + +// VPERMIL2PS performs "Permute Two-Source Single-Precision Floating-Point Vectors". +// +// Mnemonic : VPERMIL2PS +// Supported forms : (6 forms) +// +// * VPERMIL2PS imm4, xmm, xmm, xmm, xmm [XOP] +// * VPERMIL2PS imm4, m128, xmm, xmm, xmm [XOP] +// * VPERMIL2PS imm4, xmm, m128, xmm, xmm [XOP] +// * VPERMIL2PS imm4, ymm, ymm, ymm, ymm [XOP] +// * VPERMIL2PS imm4, m256, ymm, ymm, ymm [XOP] +// * VPERMIL2PS imm4, ymm, m256, ymm, ymm [XOP] +// +func (self *Program) VPERMIL2PS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, v4 interface{}) *Instruction { + p := self.alloc("VPERMIL2PS", 5, Operands { v0, v1, v2, v3, v4 }) + // VPERMIL2PS imm4, xmm, xmm, xmm, xmm + if isImm4(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) && isXMM(v4) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[4]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0x79 ^ (hlcode(v[3]) << 3)) + m.emit(0x48) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.emit((hlcode(v[1]) << 4) | imml(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[4]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xf9 ^ (hlcode(v[3]) << 3)) + m.emit(0x48) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[1])) + m.emit((hlcode(v[2]) << 4) | imml(v[0])) + }) + } + // VPERMIL2PS imm4, m128, xmm, xmm, xmm + if isImm4(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) && isXMM(v4) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[4]), addr(v[1]), hlcode(v[3])) + m.emit(0x48) + m.mrsd(lcode(v[4]), addr(v[1]), 1) + m.emit((hlcode(v[2]) << 4) | imml(v[0])) + }) + } + // VPERMIL2PS imm4, xmm, m128, xmm, xmm + if isImm4(v0) && isXMM(v1) && isM128(v2) && isXMM(v3) && isXMM(v4) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[4]), addr(v[2]), hlcode(v[3])) + m.emit(0x48) + m.mrsd(lcode(v[4]), addr(v[2]), 1) + m.emit((hlcode(v[1]) << 4) | imml(v[0])) + }) + } + // VPERMIL2PS imm4, ymm, ymm, ymm, ymm + if isImm4(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) && isYMM(v4) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[4]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0x7d ^ (hlcode(v[3]) << 3)) + m.emit(0x48) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.emit((hlcode(v[1]) << 4) | imml(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[4]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[3]) << 3)) + m.emit(0x48) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[1])) + m.emit((hlcode(v[2]) << 4) | imml(v[0])) + }) + } + // VPERMIL2PS imm4, m256, ymm, ymm, ymm + if isImm4(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) && isYMM(v4) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[4]), addr(v[1]), hlcode(v[3])) + m.emit(0x48) + m.mrsd(lcode(v[4]), addr(v[1]), 1) + m.emit((hlcode(v[2]) << 4) | imml(v[0])) + }) + } + // VPERMIL2PS imm4, ymm, m256, ymm, ymm + if isImm4(v0) && isYMM(v1) && isM256(v2) && isYMM(v3) && isYMM(v4) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[4]), addr(v[2]), hlcode(v[3])) + m.emit(0x48) + m.mrsd(lcode(v[4]), addr(v[2]), 1) + m.emit((hlcode(v[1]) << 4) | imml(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMIL2PS") + } + return p +} + +// VPERMILPD performs "Permute Double-Precision Floating-Point Values". +// +// Mnemonic : VPERMILPD +// Supported forms : (20 forms) +// +// * VPERMILPD imm8, xmm, xmm [AVX] +// * VPERMILPD xmm, xmm, xmm [AVX] +// * VPERMILPD m128, xmm, xmm [AVX] +// * VPERMILPD imm8, m128, xmm [AVX] +// * VPERMILPD imm8, ymm, ymm [AVX] +// * VPERMILPD ymm, ymm, ymm [AVX] +// * VPERMILPD m256, ymm, ymm [AVX] +// * VPERMILPD imm8, m256, ymm [AVX] +// * VPERMILPD imm8, m512/m64bcst, zmm{k}{z} [AVX512F] +// * VPERMILPD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMILPD imm8, zmm, zmm{k}{z} [AVX512F] +// * VPERMILPD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMILPD imm8, m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPD imm8, m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPD imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPD imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMILPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMILPD", 3, Operands { v0, v1, v2 }) + // VPERMILPD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79) + m.emit(0x05) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x0d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMILPD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x0d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPERMILPD imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[2]), addr(v[1]), 0) + m.emit(0x05) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPD imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d) + m.emit(0x05) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x0d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMILPD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x0d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPERMILPD imm8, m256, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[2]), addr(v[1]), 0) + m.emit(0x05) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPD imm8, m512/m64bcst, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x05) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPD m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x0d) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMILPD imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x05) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x0d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMILPD imm8, m128/m64bcst, xmm{k}{z} + if isImm8(v0) && isM128M64bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x05) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPD imm8, m256/m64bcst, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x05) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPD m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x0d) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMILPD imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x08) + m.emit(0x05) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x0d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMILPD m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x0d) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMILPD imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x05) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x0d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMILPD") + } + return p +} + +// VPERMILPS performs "Permute Single-Precision Floating-Point Values". +// +// Mnemonic : VPERMILPS +// Supported forms : (20 forms) +// +// * VPERMILPS imm8, xmm, xmm [AVX] +// * VPERMILPS xmm, xmm, xmm [AVX] +// * VPERMILPS m128, xmm, xmm [AVX] +// * VPERMILPS imm8, m128, xmm [AVX] +// * VPERMILPS imm8, ymm, ymm [AVX] +// * VPERMILPS ymm, ymm, ymm [AVX] +// * VPERMILPS m256, ymm, ymm [AVX] +// * VPERMILPS imm8, m256, ymm [AVX] +// * VPERMILPS imm8, m512/m32bcst, zmm{k}{z} [AVX512F] +// * VPERMILPS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMILPS imm8, zmm, zmm{k}{z} [AVX512F] +// * VPERMILPS zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMILPS imm8, m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPS imm8, m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPS imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPS imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMILPS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMILPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMILPS", 3, Operands { v0, v1, v2 }) + // VPERMILPS imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79) + m.emit(0x04) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x0c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMILPS m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x0c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPERMILPS imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[2]), addr(v[1]), 0) + m.emit(0x04) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPS imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d) + m.emit(0x04) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPS ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x0c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMILPS m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x0c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPERMILPS imm8, m256, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[2]), addr(v[1]), 0) + m.emit(0x04) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPS imm8, m512/m32bcst, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x04) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPS m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x0c) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMILPS imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x04) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPS zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x0c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMILPS imm8, m128/m32bcst, xmm{k}{z} + if isImm8(v0) && isM128M32bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x04) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPS imm8, m256/m32bcst, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x04) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPS m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x0c) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMILPS imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x08) + m.emit(0x04) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPS xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x0c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMILPS m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x0c) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMILPS imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x04) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMILPS ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x0c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMILPS") + } + return p +} + +// VPERMPD performs "Permute Double-Precision Floating-Point Elements". +// +// Mnemonic : VPERMPD +// Supported forms : (10 forms) +// +// * VPERMPD imm8, ymm, ymm [AVX2] +// * VPERMPD imm8, m256, ymm [AVX2] +// * VPERMPD imm8, m512/m64bcst, zmm{k}{z} [AVX512F] +// * VPERMPD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMPD imm8, zmm, zmm{k}{z} [AVX512F] +// * VPERMPD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMPD imm8, m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMPD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMPD imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMPD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMPD", 3, Operands { v0, v1, v2 }) + // VPERMPD imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xfd) + m.emit(0x01) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMPD imm8, m256, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[2]), addr(v[1]), 0) + m.emit(0x01) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMPD imm8, m512/m64bcst, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x01) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMPD m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x16) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMPD imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x01) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMPD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x16) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMPD imm8, m256/m64bcst, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x01) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMPD m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x16) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMPD imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x01) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMPD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x16) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMPD") + } + return p +} + +// VPERMPS performs "Permute Single-Precision Floating-Point Elements". +// +// Mnemonic : VPERMPS +// Supported forms : (6 forms) +// +// * VPERMPS ymm, ymm, ymm [AVX2] +// * VPERMPS m256, ymm, ymm [AVX2] +// * VPERMPS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMPS zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMPS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMPS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMPS", 3, Operands { v0, v1, v2 }) + // VPERMPS ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x16) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMPS m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x16) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPERMPS m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x16) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMPS zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x16) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMPS m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x16) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMPS ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x16) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMPS") + } + return p +} + +// VPERMQ performs "Permute Quadword Integers". +// +// Mnemonic : VPERMQ +// Supported forms : (10 forms) +// +// * VPERMQ imm8, ymm, ymm [AVX2] +// * VPERMQ imm8, m256, ymm [AVX2] +// * VPERMQ imm8, m512/m64bcst, zmm{k}{z} [AVX512F] +// * VPERMQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMQ imm8, zmm, zmm{k}{z} [AVX512F] +// * VPERMQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMQ imm8, m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMQ imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMQ", 3, Operands { v0, v1, v2 }) + // VPERMQ imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xfd) + m.emit(0x00) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMQ imm8, m256, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x85, hcode(v[2]), addr(v[1]), 0) + m.emit(0x00) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMQ imm8, m512/m64bcst, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x00) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x36) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMQ imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x00) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x36) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMQ imm8, m256/m64bcst, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x00) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x36) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMQ imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x00) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPERMQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x36) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMQ") + } + return p +} + +// VPERMT2B performs "Full Permute of Bytes From Two Tables Overwriting a Table". +// +// Mnemonic : VPERMT2B +// Supported forms : (6 forms) +// +// * VPERMT2B xmm, xmm, xmm{k}{z} [AVX512VBMI,AVX512VL] +// * VPERMT2B m128, xmm, xmm{k}{z} [AVX512VBMI,AVX512VL] +// * VPERMT2B ymm, ymm, ymm{k}{z} [AVX512VBMI,AVX512VL] +// * VPERMT2B m256, ymm, ymm{k}{z} [AVX512VBMI,AVX512VL] +// * VPERMT2B zmm, zmm, zmm{k}{z} [AVX512VBMI] +// * VPERMT2B m512, zmm, zmm{k}{z} [AVX512VBMI] +// +func (self *Program) VPERMT2B(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMT2B", 3, Operands { v0, v1, v2 }) + // VPERMT2B xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2B m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x7d) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMT2B ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2B m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x7d) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMT2B zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2B m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x7d) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMT2B") + } + return p +} + +// VPERMT2D performs "Full Permute of Doublewords From Two Tables Overwriting a Table". +// +// Mnemonic : VPERMT2D +// Supported forms : (6 forms) +// +// * VPERMT2D m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMT2D zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMT2D m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMT2D xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMT2D m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMT2D ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMT2D(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMT2D", 3, Operands { v0, v1, v2 }) + // VPERMT2D m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x7e) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMT2D zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2D m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x7e) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMT2D xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2D m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x7e) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMT2D ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMT2D") + } + return p +} + +// VPERMT2PD performs "Full Permute of Double-Precision Floating-Point Values From Two Tables Overwriting a Table". +// +// Mnemonic : VPERMT2PD +// Supported forms : (6 forms) +// +// * VPERMT2PD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMT2PD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMT2PD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMT2PD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMT2PD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMT2PD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMT2PD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMT2PD", 3, Operands { v0, v1, v2 }) + // VPERMT2PD m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x7f) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMT2PD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2PD m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x7f) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMT2PD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2PD m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x7f) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMT2PD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMT2PD") + } + return p +} + +// VPERMT2PS performs "Full Permute of Single-Precision Floating-Point Values From Two Tables Overwriting a Table". +// +// Mnemonic : VPERMT2PS +// Supported forms : (6 forms) +// +// * VPERMT2PS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMT2PS zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMT2PS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMT2PS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMT2PS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMT2PS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMT2PS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMT2PS", 3, Operands { v0, v1, v2 }) + // VPERMT2PS m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x7f) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMT2PS zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2PS m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x7f) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMT2PS xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2PS m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x7f) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMT2PS ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x7f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMT2PS") + } + return p +} + +// VPERMT2Q performs "Full Permute of Quadwords From Two Tables Overwriting a Table". +// +// Mnemonic : VPERMT2Q +// Supported forms : (6 forms) +// +// * VPERMT2Q m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPERMT2Q zmm, zmm, zmm{k}{z} [AVX512F] +// * VPERMT2Q m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMT2Q xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPERMT2Q m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPERMT2Q ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPERMT2Q(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMT2Q", 3, Operands { v0, v1, v2 }) + // VPERMT2Q m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x7e) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMT2Q zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2Q m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x7e) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMT2Q xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2Q m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x7e) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPERMT2Q ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x7e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMT2Q") + } + return p +} + +// VPERMT2W performs "Full Permute of Words From Two Tables Overwriting a Table". +// +// Mnemonic : VPERMT2W +// Supported forms : (6 forms) +// +// * VPERMT2W zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPERMT2W m512, zmm, zmm{k}{z} [AVX512BW] +// * VPERMT2W xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPERMT2W m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPERMT2W ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPERMT2W m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPERMT2W(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMT2W", 3, Operands { v0, v1, v2 }) + // VPERMT2W zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2W m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x7d) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMT2W xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2W m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x7d) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMT2W ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x7d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMT2W m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x7d) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMT2W") + } + return p +} + +// VPERMW performs "Permute Word Integers". +// +// Mnemonic : VPERMW +// Supported forms : (6 forms) +// +// * VPERMW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPERMW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPERMW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPERMW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPERMW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPERMW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPERMW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPERMW", 3, Operands { v0, v1, v2 }) + // VPERMW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x8d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x8d) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPERMW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x8d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x8d) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPERMW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x8d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPERMW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x8d) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPERMW") + } + return p +} + +// VPEXPANDD performs "Load Sparse Packed Doubleword Integer Values from Dense Memory/Register". +// +// Mnemonic : VPEXPANDD +// Supported forms : (6 forms) +// +// * VPEXPANDD zmm, zmm{k}{z} [AVX512F] +// * VPEXPANDD m512, zmm{k}{z} [AVX512F] +// * VPEXPANDD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPEXPANDD ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPEXPANDD m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VPEXPANDD m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPEXPANDD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPEXPANDD", 2, Operands { v0, v1 }) + // VPEXPANDD zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x89) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPEXPANDD m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x89) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VPEXPANDD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x89) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPEXPANDD ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x89) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPEXPANDD m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x89) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VPEXPANDD m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x89) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPEXPANDD") + } + return p +} + +// VPEXPANDQ performs "Load Sparse Packed Quadword Integer Values from Dense Memory/Register". +// +// Mnemonic : VPEXPANDQ +// Supported forms : (6 forms) +// +// * VPEXPANDQ zmm, zmm{k}{z} [AVX512F] +// * VPEXPANDQ m512, zmm{k}{z} [AVX512F] +// * VPEXPANDQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPEXPANDQ ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPEXPANDQ m128, xmm{k}{z} [AVX512F,AVX512VL] +// * VPEXPANDQ m256, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPEXPANDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPEXPANDQ", 2, Operands { v0, v1 }) + // VPEXPANDQ zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x89) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPEXPANDQ m512, zmm{k}{z} + if isM512(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x89) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPEXPANDQ xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x89) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPEXPANDQ ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x89) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPEXPANDQ m128, xmm{k}{z} + if isM128(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x89) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPEXPANDQ m256, ymm{k}{z} + if isM256(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x89) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPEXPANDQ") + } + return p +} + +// VPEXTRB performs "Extract Byte". +// +// Mnemonic : VPEXTRB +// Supported forms : (4 forms) +// +// * VPEXTRB imm8, xmm, r32 [AVX] +// * VPEXTRB imm8, xmm, m8 [AVX] +// * VPEXTRB imm8, xmm, r32 [AVX512BW] +// * VPEXTRB imm8, xmm, m8 [AVX512BW] +// +func (self *Program) VPEXTRB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPEXTRB", 3, Operands { v0, v1, v2 }) + // VPEXTRB imm8, xmm, r32 + if isImm8(v0) && isXMM(v1) && isReg32(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[1]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0x79) + m.emit(0x14) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VPEXTRB imm8, xmm, m8 + if isImm8(v0) && isXMM(v1) && isM8(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[1]), addr(v[2]), 0) + m.emit(0x14) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPEXTRB imm8, xmm, r32 + if isImm8(v0) && isEVEXXMM(v1) && isReg32(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit(0x08) + m.emit(0x14) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VPEXTRB imm8, xmm, m8 + if isImm8(v0) && isEVEXXMM(v1) && isM8(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[1]), addr(v[2]), 0, 0, 0, 0) + m.emit(0x14) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPEXTRB") + } + return p +} + +// VPEXTRD performs "Extract Doubleword". +// +// Mnemonic : VPEXTRD +// Supported forms : (4 forms) +// +// * VPEXTRD imm8, xmm, r32 [AVX] +// * VPEXTRD imm8, xmm, m32 [AVX] +// * VPEXTRD imm8, xmm, r32 [AVX512DQ] +// * VPEXTRD imm8, xmm, m32 [AVX512DQ] +// +func (self *Program) VPEXTRD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPEXTRD", 3, Operands { v0, v1, v2 }) + // VPEXTRD imm8, xmm, r32 + if isImm8(v0) && isXMM(v1) && isReg32(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[1]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0x79) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VPEXTRD imm8, xmm, m32 + if isImm8(v0) && isXMM(v1) && isM32(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[1]), addr(v[2]), 0) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPEXTRD imm8, xmm, r32 + if isImm8(v0) && isEVEXXMM(v1) && isReg32(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit(0x08) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VPEXTRD imm8, xmm, m32 + if isImm8(v0) && isEVEXXMM(v1) && isM32(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[1]), addr(v[2]), 0, 0, 0, 0) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[2]), 4) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPEXTRD") + } + return p +} + +// VPEXTRQ performs "Extract Quadword". +// +// Mnemonic : VPEXTRQ +// Supported forms : (4 forms) +// +// * VPEXTRQ imm8, xmm, r64 [AVX] +// * VPEXTRQ imm8, xmm, m64 [AVX] +// * VPEXTRQ imm8, xmm, r64 [AVX512DQ] +// * VPEXTRQ imm8, xmm, m64 [AVX512DQ] +// +func (self *Program) VPEXTRQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPEXTRQ", 3, Operands { v0, v1, v2 }) + // VPEXTRQ imm8, xmm, r64 + if isImm8(v0) && isXMM(v1) && isReg64(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[1]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0xf9) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VPEXTRQ imm8, xmm, m64 + if isImm8(v0) && isXMM(v1) && isM64(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[1]), addr(v[2]), 0) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPEXTRQ imm8, xmm, r64 + if isImm8(v0) && isEVEXXMM(v1) && isReg64(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit(0x08) + m.emit(0x16) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VPEXTRQ imm8, xmm, m64 + if isImm8(v0) && isEVEXXMM(v1) && isM64(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[1]), addr(v[2]), 0, 0, 0, 0) + m.emit(0x16) + m.mrsd(lcode(v[1]), addr(v[2]), 8) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPEXTRQ") + } + return p +} + +// VPEXTRW performs "Extract Word". +// +// Mnemonic : VPEXTRW +// Supported forms : (4 forms) +// +// * VPEXTRW imm8, xmm, r32 [AVX] +// * VPEXTRW imm8, xmm, m16 [AVX] +// * VPEXTRW imm8, xmm, r32 [AVX512BW] +// * VPEXTRW imm8, xmm, m16 [AVX512BW] +// +func (self *Program) VPEXTRW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPEXTRW", 3, Operands { v0, v1, v2 }) + // VPEXTRW imm8, xmm, r32 + if isImm8(v0) && isXMM(v1) && isReg32(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[1], 0) + m.emit(0xc5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[1]) << 7) ^ (hcode(v[2]) << 5)) + m.emit(0x79) + m.emit(0x15) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VPEXTRW imm8, xmm, m16 + if isImm8(v0) && isXMM(v1) && isM16(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[1]), addr(v[2]), 0) + m.emit(0x15) + m.mrsd(lcode(v[1]), addr(v[2]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPEXTRW imm8, xmm, r32 + if isImm8(v0) && isEVEXXMM(v1) && isReg32(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[1]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit(0x08) + m.emit(0x15) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit(0x08) + m.emit(0xc5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPEXTRW imm8, xmm, m16 + if isImm8(v0) && isEVEXXMM(v1) && isM16(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[1]), addr(v[2]), 0, 0, 0, 0) + m.emit(0x15) + m.mrsd(lcode(v[1]), addr(v[2]), 2) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPEXTRW") + } + return p +} + +// VPGATHERDD performs "Gather Packed Doubleword Values Using Signed Doubleword Indices". +// +// Mnemonic : VPGATHERDD +// Supported forms : (5 forms) +// +// * VPGATHERDD xmm, vm32x, xmm [AVX2] +// * VPGATHERDD ymm, vm32y, ymm [AVX2] +// * VPGATHERDD vm32z, zmm{k} [AVX512F] +// * VPGATHERDD vm32x, xmm{k} [AVX512F,AVX512VL] +// * VPGATHERDD vm32y, ymm{k} [AVX512F,AVX512VL] +// +func (self *Program) VPGATHERDD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VPGATHERDD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VPGATHERDD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VPGATHERDD takes 2 or 3 operands") + } + // VPGATHERDD xmm, vm32x, xmm + if len(vv) == 1 && isXMM(v0) && isVMX(v1) && isXMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x90) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VPGATHERDD ymm, vm32y, ymm + if len(vv) == 1 && isYMM(v0) && isVMY(v1) && isYMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x90) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VPGATHERDD vm32z, zmm{k} + if len(vv) == 0 && isVMZ(v0) && isZMMk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x90) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VPGATHERDD vm32x, xmm{k} + if len(vv) == 0 && isEVEXVMX(v0) && isXMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x90) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VPGATHERDD vm32y, ymm{k} + if len(vv) == 0 && isEVEXVMY(v0) && isYMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x90) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPGATHERDD") + } + return p +} + +// VPGATHERDQ performs "Gather Packed Quadword Values Using Signed Doubleword Indices". +// +// Mnemonic : VPGATHERDQ +// Supported forms : (5 forms) +// +// * VPGATHERDQ xmm, vm32x, xmm [AVX2] +// * VPGATHERDQ ymm, vm32x, ymm [AVX2] +// * VPGATHERDQ vm32y, zmm{k} [AVX512F] +// * VPGATHERDQ vm32x, xmm{k} [AVX512F,AVX512VL] +// * VPGATHERDQ vm32x, ymm{k} [AVX512F,AVX512VL] +// +func (self *Program) VPGATHERDQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VPGATHERDQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VPGATHERDQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VPGATHERDQ takes 2 or 3 operands") + } + // VPGATHERDQ xmm, vm32x, xmm + if len(vv) == 1 && isXMM(v0) && isVMX(v1) && isXMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x90) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VPGATHERDQ ymm, vm32x, ymm + if len(vv) == 1 && isYMM(v0) && isVMX(v1) && isYMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x90) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VPGATHERDQ vm32y, zmm{k} + if len(vv) == 0 && isEVEXVMY(v0) && isZMMk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x90) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPGATHERDQ vm32x, xmm{k} + if len(vv) == 0 && isEVEXVMX(v0) && isXMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x90) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPGATHERDQ vm32x, ymm{k} + if len(vv) == 0 && isEVEXVMX(v0) && isYMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x90) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPGATHERDQ") + } + return p +} + +// VPGATHERQD performs "Gather Packed Doubleword Values Using Signed Quadword Indices". +// +// Mnemonic : VPGATHERQD +// Supported forms : (5 forms) +// +// * VPGATHERQD xmm, vm64x, xmm [AVX2] +// * VPGATHERQD xmm, vm64y, xmm [AVX2] +// * VPGATHERQD vm64z, ymm{k} [AVX512F] +// * VPGATHERQD vm64x, xmm{k} [AVX512F,AVX512VL] +// * VPGATHERQD vm64y, xmm{k} [AVX512F,AVX512VL] +// +func (self *Program) VPGATHERQD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VPGATHERQD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VPGATHERQD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VPGATHERQD takes 2 or 3 operands") + } + // VPGATHERQD xmm, vm64x, xmm + if len(vv) == 1 && isXMM(v0) && isVMX(v1) && isXMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x91) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VPGATHERQD xmm, vm64y, xmm + if len(vv) == 1 && isXMM(v0) && isVMY(v1) && isXMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x91) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VPGATHERQD vm64z, ymm{k} + if len(vv) == 0 && isVMZ(v0) && isYMMk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x91) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VPGATHERQD vm64x, xmm{k} + if len(vv) == 0 && isEVEXVMX(v0) && isXMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x91) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VPGATHERQD vm64y, xmm{k} + if len(vv) == 0 && isEVEXVMY(v0) && isXMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x91) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPGATHERQD") + } + return p +} + +// VPGATHERQQ performs "Gather Packed Quadword Values Using Signed Quadword Indices". +// +// Mnemonic : VPGATHERQQ +// Supported forms : (5 forms) +// +// * VPGATHERQQ xmm, vm64x, xmm [AVX2] +// * VPGATHERQQ ymm, vm64y, ymm [AVX2] +// * VPGATHERQQ vm64z, zmm{k} [AVX512F] +// * VPGATHERQQ vm64x, xmm{k} [AVX512F,AVX512VL] +// * VPGATHERQQ vm64y, ymm{k} [AVX512F,AVX512VL] +// +func (self *Program) VPGATHERQQ(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VPGATHERQQ", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VPGATHERQQ", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VPGATHERQQ takes 2 or 3 operands") + } + // VPGATHERQQ xmm, vm64x, xmm + if len(vv) == 1 && isXMM(v0) && isVMX(v1) && isXMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x91) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VPGATHERQQ ymm, vm64y, ymm + if len(vv) == 1 && isYMM(v0) && isVMY(v1) && isYMM(vv[0]) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x91) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + // VPGATHERQQ vm64z, zmm{k} + if len(vv) == 0 && isVMZ(v0) && isZMMk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x91) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPGATHERQQ vm64x, xmm{k} + if len(vv) == 0 && isEVEXVMX(v0) && isXMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x91) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPGATHERQQ vm64y, ymm{k} + if len(vv) == 0 && isEVEXVMY(v0) && isYMMk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), 0, 0) + m.emit(0x91) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPGATHERQQ") + } + return p +} + +// VPHADDBD performs "Packed Horizontal Add Signed Byte to Signed Doubleword". +// +// Mnemonic : VPHADDBD +// Supported forms : (2 forms) +// +// * VPHADDBD xmm, xmm [XOP] +// * VPHADDBD m128, xmm [XOP] +// +func (self *Program) VPHADDBD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHADDBD", 2, Operands { v0, v1 }) + // VPHADDBD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHADDBD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xc2) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDBD") + } + return p +} + +// VPHADDBQ performs "Packed Horizontal Add Signed Byte to Signed Quadword". +// +// Mnemonic : VPHADDBQ +// Supported forms : (2 forms) +// +// * VPHADDBQ xmm, xmm [XOP] +// * VPHADDBQ m128, xmm [XOP] +// +func (self *Program) VPHADDBQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHADDBQ", 2, Operands { v0, v1 }) + // VPHADDBQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xc3) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHADDBQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xc3) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDBQ") + } + return p +} + +// VPHADDBW performs "Packed Horizontal Add Signed Byte to Signed Word". +// +// Mnemonic : VPHADDBW +// Supported forms : (2 forms) +// +// * VPHADDBW xmm, xmm [XOP] +// * VPHADDBW m128, xmm [XOP] +// +func (self *Program) VPHADDBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHADDBW", 2, Operands { v0, v1 }) + // VPHADDBW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xc1) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHADDBW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xc1) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDBW") + } + return p +} + +// VPHADDD performs "Packed Horizontal Add Doubleword Integer". +// +// Mnemonic : VPHADDD +// Supported forms : (4 forms) +// +// * VPHADDD xmm, xmm, xmm [AVX] +// * VPHADDD m128, xmm, xmm [AVX] +// * VPHADDD ymm, ymm, ymm [AVX2] +// * VPHADDD m256, ymm, ymm [AVX2] +// +func (self *Program) VPHADDD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPHADDD", 3, Operands { v0, v1, v2 }) + // VPHADDD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x02) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPHADDD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x02) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPHADDD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x02) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPHADDD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x02) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDD") + } + return p +} + +// VPHADDDQ performs "Packed Horizontal Add Signed Doubleword to Signed Quadword". +// +// Mnemonic : VPHADDDQ +// Supported forms : (2 forms) +// +// * VPHADDDQ xmm, xmm [XOP] +// * VPHADDDQ m128, xmm [XOP] +// +func (self *Program) VPHADDDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHADDDQ", 2, Operands { v0, v1 }) + // VPHADDDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xcb) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHADDDQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xcb) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDDQ") + } + return p +} + +// VPHADDSW performs "Packed Horizontal Add Signed Word Integers with Signed Saturation". +// +// Mnemonic : VPHADDSW +// Supported forms : (4 forms) +// +// * VPHADDSW xmm, xmm, xmm [AVX] +// * VPHADDSW m128, xmm, xmm [AVX] +// * VPHADDSW ymm, ymm, ymm [AVX2] +// * VPHADDSW m256, ymm, ymm [AVX2] +// +func (self *Program) VPHADDSW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPHADDSW", 3, Operands { v0, v1, v2 }) + // VPHADDSW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x03) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPHADDSW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x03) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPHADDSW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x03) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPHADDSW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x03) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDSW") + } + return p +} + +// VPHADDUBD performs "Packed Horizontal Add Unsigned Byte to Doubleword". +// +// Mnemonic : VPHADDUBD +// Supported forms : (2 forms) +// +// * VPHADDUBD xmm, xmm [XOP] +// * VPHADDUBD m128, xmm [XOP] +// +func (self *Program) VPHADDUBD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHADDUBD", 2, Operands { v0, v1 }) + // VPHADDUBD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xd2) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHADDUBD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xd2) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDUBD") + } + return p +} + +// VPHADDUBQ performs "Packed Horizontal Add Unsigned Byte to Quadword". +// +// Mnemonic : VPHADDUBQ +// Supported forms : (2 forms) +// +// * VPHADDUBQ xmm, xmm [XOP] +// * VPHADDUBQ m128, xmm [XOP] +// +func (self *Program) VPHADDUBQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHADDUBQ", 2, Operands { v0, v1 }) + // VPHADDUBQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xd3) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHADDUBQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xd3) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDUBQ") + } + return p +} + +// VPHADDUBW performs "Packed Horizontal Add Unsigned Byte to Word". +// +// Mnemonic : VPHADDUBW +// Supported forms : (2 forms) +// +// * VPHADDUBW xmm, xmm [XOP] +// * VPHADDUBW m128, xmm [XOP] +// +func (self *Program) VPHADDUBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHADDUBW", 2, Operands { v0, v1 }) + // VPHADDUBW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xd1) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHADDUBW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xd1) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDUBW") + } + return p +} + +// VPHADDUDQ performs "Packed Horizontal Add Unsigned Doubleword to Quadword". +// +// Mnemonic : VPHADDUDQ +// Supported forms : (2 forms) +// +// * VPHADDUDQ xmm, xmm [XOP] +// * VPHADDUDQ m128, xmm [XOP] +// +func (self *Program) VPHADDUDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHADDUDQ", 2, Operands { v0, v1 }) + // VPHADDUDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xdb) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHADDUDQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xdb) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDUDQ") + } + return p +} + +// VPHADDUWD performs "Packed Horizontal Add Unsigned Word to Doubleword". +// +// Mnemonic : VPHADDUWD +// Supported forms : (2 forms) +// +// * VPHADDUWD xmm, xmm [XOP] +// * VPHADDUWD m128, xmm [XOP] +// +func (self *Program) VPHADDUWD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHADDUWD", 2, Operands { v0, v1 }) + // VPHADDUWD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xd6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHADDUWD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xd6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDUWD") + } + return p +} + +// VPHADDUWQ performs "Packed Horizontal Add Unsigned Word to Quadword". +// +// Mnemonic : VPHADDUWQ +// Supported forms : (2 forms) +// +// * VPHADDUWQ xmm, xmm [XOP] +// * VPHADDUWQ m128, xmm [XOP] +// +func (self *Program) VPHADDUWQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHADDUWQ", 2, Operands { v0, v1 }) + // VPHADDUWQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xd7) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHADDUWQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xd7) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDUWQ") + } + return p +} + +// VPHADDW performs "Packed Horizontal Add Word Integers". +// +// Mnemonic : VPHADDW +// Supported forms : (4 forms) +// +// * VPHADDW xmm, xmm, xmm [AVX] +// * VPHADDW m128, xmm, xmm [AVX] +// * VPHADDW ymm, ymm, ymm [AVX2] +// * VPHADDW m256, ymm, ymm [AVX2] +// +func (self *Program) VPHADDW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPHADDW", 3, Operands { v0, v1, v2 }) + // VPHADDW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPHADDW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPHADDW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x01) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPHADDW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x01) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDW") + } + return p +} + +// VPHADDWD performs "Packed Horizontal Add Signed Word to Signed Doubleword". +// +// Mnemonic : VPHADDWD +// Supported forms : (2 forms) +// +// * VPHADDWD xmm, xmm [XOP] +// * VPHADDWD m128, xmm [XOP] +// +func (self *Program) VPHADDWD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHADDWD", 2, Operands { v0, v1 }) + // VPHADDWD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHADDWD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xc6) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDWD") + } + return p +} + +// VPHADDWQ performs "Packed Horizontal Add Signed Word to Signed Quadword". +// +// Mnemonic : VPHADDWQ +// Supported forms : (2 forms) +// +// * VPHADDWQ xmm, xmm [XOP] +// * VPHADDWQ m128, xmm [XOP] +// +func (self *Program) VPHADDWQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHADDWQ", 2, Operands { v0, v1 }) + // VPHADDWQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xc7) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHADDWQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xc7) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHADDWQ") + } + return p +} + +// VPHMINPOSUW performs "Packed Horizontal Minimum of Unsigned Word Integers". +// +// Mnemonic : VPHMINPOSUW +// Supported forms : (2 forms) +// +// * VPHMINPOSUW xmm, xmm [AVX] +// * VPHMINPOSUW m128, xmm [AVX] +// +func (self *Program) VPHMINPOSUW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHMINPOSUW", 2, Operands { v0, v1 }) + // VPHMINPOSUW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x41) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHMINPOSUW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x41) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHMINPOSUW") + } + return p +} + +// VPHSUBBW performs "Packed Horizontal Subtract Signed Byte to Signed Word". +// +// Mnemonic : VPHSUBBW +// Supported forms : (2 forms) +// +// * VPHSUBBW xmm, xmm [XOP] +// * VPHSUBBW m128, xmm [XOP] +// +func (self *Program) VPHSUBBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHSUBBW", 2, Operands { v0, v1 }) + // VPHSUBBW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xe1) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHSUBBW m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xe1) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHSUBBW") + } + return p +} + +// VPHSUBD performs "Packed Horizontal Subtract Doubleword Integers". +// +// Mnemonic : VPHSUBD +// Supported forms : (4 forms) +// +// * VPHSUBD xmm, xmm, xmm [AVX] +// * VPHSUBD m128, xmm, xmm [AVX] +// * VPHSUBD ymm, ymm, ymm [AVX2] +// * VPHSUBD m256, ymm, ymm [AVX2] +// +func (self *Program) VPHSUBD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPHSUBD", 3, Operands { v0, v1, v2 }) + // VPHSUBD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x06) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPHSUBD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x06) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPHSUBD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x06) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPHSUBD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x06) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHSUBD") + } + return p +} + +// VPHSUBDQ performs "Packed Horizontal Subtract Signed Doubleword to Signed Quadword". +// +// Mnemonic : VPHSUBDQ +// Supported forms : (2 forms) +// +// * VPHSUBDQ xmm, xmm [XOP] +// * VPHSUBDQ m128, xmm [XOP] +// +func (self *Program) VPHSUBDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHSUBDQ", 2, Operands { v0, v1 }) + // VPHSUBDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xe3) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHSUBDQ m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xe3) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHSUBDQ") + } + return p +} + +// VPHSUBSW performs "Packed Horizontal Subtract Signed Word Integers with Signed Saturation". +// +// Mnemonic : VPHSUBSW +// Supported forms : (4 forms) +// +// * VPHSUBSW xmm, xmm, xmm [AVX] +// * VPHSUBSW m128, xmm, xmm [AVX] +// * VPHSUBSW ymm, ymm, ymm [AVX2] +// * VPHSUBSW m256, ymm, ymm [AVX2] +// +func (self *Program) VPHSUBSW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPHSUBSW", 3, Operands { v0, v1, v2 }) + // VPHSUBSW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x07) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPHSUBSW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x07) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPHSUBSW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x07) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPHSUBSW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x07) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHSUBSW") + } + return p +} + +// VPHSUBW performs "Packed Horizontal Subtract Word Integers". +// +// Mnemonic : VPHSUBW +// Supported forms : (4 forms) +// +// * VPHSUBW xmm, xmm, xmm [AVX] +// * VPHSUBW m128, xmm, xmm [AVX] +// * VPHSUBW ymm, ymm, ymm [AVX2] +// * VPHSUBW m256, ymm, ymm [AVX2] +// +func (self *Program) VPHSUBW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPHSUBW", 3, Operands { v0, v1, v2 }) + // VPHSUBW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x05) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPHSUBW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x05) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPHSUBW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x05) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPHSUBW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x05) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHSUBW") + } + return p +} + +// VPHSUBWD performs "Packed Horizontal Subtract Signed Word to Signed Doubleword". +// +// Mnemonic : VPHSUBWD +// Supported forms : (2 forms) +// +// * VPHSUBWD xmm, xmm [XOP] +// * VPHSUBWD m128, xmm [XOP] +// +func (self *Program) VPHSUBWD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPHSUBWD", 2, Operands { v0, v1 }) + // VPHSUBWD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x78) + m.emit(0xe2) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPHSUBWD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[1]), addr(v[0]), 0) + m.emit(0xe2) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPHSUBWD") + } + return p +} + +// VPINSRB performs "Insert Byte". +// +// Mnemonic : VPINSRB +// Supported forms : (4 forms) +// +// * VPINSRB imm8, r32, xmm, xmm [AVX] +// * VPINSRB imm8, m8, xmm, xmm [AVX] +// * VPINSRB imm8, r32, xmm, xmm [AVX512BW] +// * VPINSRB imm8, m8, xmm, xmm [AVX512BW] +// +func (self *Program) VPINSRB(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPINSRB", 4, Operands { v0, v1, v2, v3 }) + // VPINSRB imm8, r32, xmm, xmm + if isImm8(v0) && isReg32(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x20) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPINSRB imm8, m8, xmm, xmm + if isImm8(v0) && isM8(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x20) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPINSRB imm8, r32, xmm, xmm + if isImm8(v0) && isReg32(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | 0x00) + m.emit(0x20) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPINSRB imm8, m8, xmm, xmm + if isImm8(v0) && isM8(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), 0, 0, 0) + m.emit(0x20) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPINSRB") + } + return p +} + +// VPINSRD performs "Insert Doubleword". +// +// Mnemonic : VPINSRD +// Supported forms : (4 forms) +// +// * VPINSRD imm8, r32, xmm, xmm [AVX] +// * VPINSRD imm8, m32, xmm, xmm [AVX] +// * VPINSRD imm8, r32, xmm, xmm [AVX512DQ] +// * VPINSRD imm8, m32, xmm, xmm [AVX512DQ] +// +func (self *Program) VPINSRD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPINSRD", 4, Operands { v0, v1, v2, v3 }) + // VPINSRD imm8, r32, xmm, xmm + if isImm8(v0) && isReg32(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x22) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPINSRD imm8, m32, xmm, xmm + if isImm8(v0) && isM32(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x22) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPINSRD imm8, r32, xmm, xmm + if isImm8(v0) && isReg32(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | 0x00) + m.emit(0x22) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPINSRD imm8, m32, xmm, xmm + if isImm8(v0) && isM32(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), 0, 0, 0) + m.emit(0x22) + m.mrsd(lcode(v[3]), addr(v[1]), 4) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPINSRD") + } + return p +} + +// VPINSRQ performs "Insert Quadword". +// +// Mnemonic : VPINSRQ +// Supported forms : (4 forms) +// +// * VPINSRQ imm8, r64, xmm, xmm [AVX] +// * VPINSRQ imm8, m64, xmm, xmm [AVX] +// * VPINSRQ imm8, r64, xmm, xmm [AVX512DQ] +// * VPINSRQ imm8, m64, xmm, xmm [AVX512DQ] +// +func (self *Program) VPINSRQ(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPINSRQ", 4, Operands { v0, v1, v2, v3 }) + // VPINSRQ imm8, r64, xmm, xmm + if isImm8(v0) && isReg64(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0xf9 ^ (hlcode(v[2]) << 3)) + m.emit(0x22) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPINSRQ imm8, m64, xmm, xmm + if isImm8(v0) && isM64(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x81, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x22) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPINSRQ imm8, r64, xmm, xmm + if isImm8(v0) && isReg64(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | 0x00) + m.emit(0x22) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPINSRQ imm8, m64, xmm, xmm + if isImm8(v0) && isM64(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), 0, 0, 0) + m.emit(0x22) + m.mrsd(lcode(v[3]), addr(v[1]), 8) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPINSRQ") + } + return p +} + +// VPINSRW performs "Insert Word". +// +// Mnemonic : VPINSRW +// Supported forms : (4 forms) +// +// * VPINSRW imm8, r32, xmm, xmm [AVX] +// * VPINSRW imm8, m16, xmm, xmm [AVX] +// * VPINSRW imm8, r32, xmm, xmm [AVX512BW] +// * VPINSRW imm8, m16, xmm, xmm [AVX512BW] +// +func (self *Program) VPINSRW(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPINSRW", 4, Operands { v0, v1, v2, v3 }) + // VPINSRW imm8, r32, xmm, xmm + if isImm8(v0) && isReg32(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[3]), v[1], hlcode(v[2])) + m.emit(0xc4) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPINSRW imm8, m16, xmm, xmm + if isImm8(v0) && isM16(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xc4) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPINSRW imm8, r32, xmm, xmm + if isImm8(v0) && isReg32(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | 0x00) + m.emit(0xc4) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPINSRW imm8, m16, xmm, xmm + if isImm8(v0) && isM16(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), 0, 0, 0) + m.emit(0xc4) + m.mrsd(lcode(v[3]), addr(v[1]), 2) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPINSRW") + } + return p +} + +// VPLZCNTD performs "Count the Number of Leading Zero Bits for Packed Doubleword Values". +// +// Mnemonic : VPLZCNTD +// Supported forms : (6 forms) +// +// * VPLZCNTD m128/m32bcst, xmm{k}{z} [AVX512CD,AVX512VL] +// * VPLZCNTD m256/m32bcst, ymm{k}{z} [AVX512CD,AVX512VL] +// * VPLZCNTD m512/m32bcst, zmm{k}{z} [AVX512CD] +// * VPLZCNTD xmm, xmm{k}{z} [AVX512CD,AVX512VL] +// * VPLZCNTD ymm, ymm{k}{z} [AVX512CD,AVX512VL] +// * VPLZCNTD zmm, zmm{k}{z} [AVX512CD] +// +func (self *Program) VPLZCNTD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPLZCNTD", 2, Operands { v0, v1 }) + // VPLZCNTD m128/m32bcst, xmm{k}{z} + if isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x44) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VPLZCNTD m256/m32bcst, ymm{k}{z} + if isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x44) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VPLZCNTD m512/m32bcst, zmm{k}{z} + if isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x44) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VPLZCNTD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPLZCNTD ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPLZCNTD zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPLZCNTD") + } + return p +} + +// VPLZCNTQ performs "Count the Number of Leading Zero Bits for Packed Quadword Values". +// +// Mnemonic : VPLZCNTQ +// Supported forms : (6 forms) +// +// * VPLZCNTQ m128/m64bcst, xmm{k}{z} [AVX512CD,AVX512VL] +// * VPLZCNTQ m256/m64bcst, ymm{k}{z} [AVX512CD,AVX512VL] +// * VPLZCNTQ m512/m64bcst, zmm{k}{z} [AVX512CD] +// * VPLZCNTQ xmm, xmm{k}{z} [AVX512CD,AVX512VL] +// * VPLZCNTQ ymm, ymm{k}{z} [AVX512CD,AVX512VL] +// * VPLZCNTQ zmm, zmm{k}{z} [AVX512CD] +// +func (self *Program) VPLZCNTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPLZCNTQ", 2, Operands { v0, v1 }) + // VPLZCNTQ m128/m64bcst, xmm{k}{z} + if isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x44) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VPLZCNTQ m256/m64bcst, ymm{k}{z} + if isM256M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x44) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VPLZCNTQ m512/m64bcst, zmm{k}{z} + if isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x44) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VPLZCNTQ xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPLZCNTQ ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPLZCNTQ zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512CD) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x44) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPLZCNTQ") + } + return p +} + +// VPMACSDD performs "Packed Multiply Accumulate Signed Doubleword to Signed Doubleword". +// +// Mnemonic : VPMACSDD +// Supported forms : (2 forms) +// +// * VPMACSDD xmm, xmm, xmm, xmm [XOP] +// * VPMACSDD xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPMACSDD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPMACSDD", 4, Operands { v0, v1, v2, v3 }) + // VPMACSDD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0x9e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPMACSDD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x9e) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMACSDD") + } + return p +} + +// VPMACSDQH performs "Packed Multiply Accumulate Signed High Doubleword to Signed Quadword". +// +// Mnemonic : VPMACSDQH +// Supported forms : (2 forms) +// +// * VPMACSDQH xmm, xmm, xmm, xmm [XOP] +// * VPMACSDQH xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPMACSDQH(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPMACSDQH", 4, Operands { v0, v1, v2, v3 }) + // VPMACSDQH xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0x9f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPMACSDQH xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x9f) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMACSDQH") + } + return p +} + +// VPMACSDQL performs "Packed Multiply Accumulate Signed Low Doubleword to Signed Quadword". +// +// Mnemonic : VPMACSDQL +// Supported forms : (2 forms) +// +// * VPMACSDQL xmm, xmm, xmm, xmm [XOP] +// * VPMACSDQL xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPMACSDQL(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPMACSDQL", 4, Operands { v0, v1, v2, v3 }) + // VPMACSDQL xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0x97) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPMACSDQL xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x97) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMACSDQL") + } + return p +} + +// VPMACSSDD performs "Packed Multiply Accumulate with Saturation Signed Doubleword to Signed Doubleword". +// +// Mnemonic : VPMACSSDD +// Supported forms : (2 forms) +// +// * VPMACSSDD xmm, xmm, xmm, xmm [XOP] +// * VPMACSSDD xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPMACSSDD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPMACSSDD", 4, Operands { v0, v1, v2, v3 }) + // VPMACSSDD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0x8e) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPMACSSDD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x8e) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMACSSDD") + } + return p +} + +// VPMACSSDQH performs "Packed Multiply Accumulate with Saturation Signed High Doubleword to Signed Quadword". +// +// Mnemonic : VPMACSSDQH +// Supported forms : (2 forms) +// +// * VPMACSSDQH xmm, xmm, xmm, xmm [XOP] +// * VPMACSSDQH xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPMACSSDQH(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPMACSSDQH", 4, Operands { v0, v1, v2, v3 }) + // VPMACSSDQH xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0x8f) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPMACSSDQH xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x8f) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMACSSDQH") + } + return p +} + +// VPMACSSDQL performs "Packed Multiply Accumulate with Saturation Signed Low Doubleword to Signed Quadword". +// +// Mnemonic : VPMACSSDQL +// Supported forms : (2 forms) +// +// * VPMACSSDQL xmm, xmm, xmm, xmm [XOP] +// * VPMACSSDQL xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPMACSSDQL(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPMACSSDQL", 4, Operands { v0, v1, v2, v3 }) + // VPMACSSDQL xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0x87) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPMACSSDQL xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x87) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMACSSDQL") + } + return p +} + +// VPMACSSWD performs "Packed Multiply Accumulate with Saturation Signed Word to Signed Doubleword". +// +// Mnemonic : VPMACSSWD +// Supported forms : (2 forms) +// +// * VPMACSSWD xmm, xmm, xmm, xmm [XOP] +// * VPMACSSWD xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPMACSSWD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPMACSSWD", 4, Operands { v0, v1, v2, v3 }) + // VPMACSSWD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0x86) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPMACSSWD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x86) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMACSSWD") + } + return p +} + +// VPMACSSWW performs "Packed Multiply Accumulate with Saturation Signed Word to Signed Word". +// +// Mnemonic : VPMACSSWW +// Supported forms : (2 forms) +// +// * VPMACSSWW xmm, xmm, xmm, xmm [XOP] +// * VPMACSSWW xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPMACSSWW(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPMACSSWW", 4, Operands { v0, v1, v2, v3 }) + // VPMACSSWW xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0x85) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPMACSSWW xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x85) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMACSSWW") + } + return p +} + +// VPMACSWD performs "Packed Multiply Accumulate Signed Word to Signed Doubleword". +// +// Mnemonic : VPMACSWD +// Supported forms : (2 forms) +// +// * VPMACSWD xmm, xmm, xmm, xmm [XOP] +// * VPMACSWD xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPMACSWD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPMACSWD", 4, Operands { v0, v1, v2, v3 }) + // VPMACSWD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0x96) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPMACSWD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x96) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMACSWD") + } + return p +} + +// VPMACSWW performs "Packed Multiply Accumulate Signed Word to Signed Word". +// +// Mnemonic : VPMACSWW +// Supported forms : (2 forms) +// +// * VPMACSWW xmm, xmm, xmm, xmm [XOP] +// * VPMACSWW xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPMACSWW(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPMACSWW", 4, Operands { v0, v1, v2, v3 }) + // VPMACSWW xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0x95) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPMACSWW xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x95) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMACSWW") + } + return p +} + +// VPMADCSSWD performs "Packed Multiply Add Accumulate with Saturation Signed Word to Signed Doubleword". +// +// Mnemonic : VPMADCSSWD +// Supported forms : (2 forms) +// +// * VPMADCSSWD xmm, xmm, xmm, xmm [XOP] +// * VPMADCSSWD xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPMADCSSWD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPMADCSSWD", 4, Operands { v0, v1, v2, v3 }) + // VPMADCSSWD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0xa6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPMADCSSWD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xa6) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMADCSSWD") + } + return p +} + +// VPMADCSWD performs "Packed Multiply Add Accumulate Signed Word to Signed Doubleword". +// +// Mnemonic : VPMADCSWD +// Supported forms : (2 forms) +// +// * VPMADCSWD xmm, xmm, xmm, xmm [XOP] +// * VPMADCSWD xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPMADCSWD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPMADCSWD", 4, Operands { v0, v1, v2, v3 }) + // VPMADCSWD xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0xb6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + } + // VPMADCSWD xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xb6) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMADCSWD") + } + return p +} + +// VPMADD52HUQ performs "Packed Multiply of Unsigned 52-bit Unsigned Integers and Add High 52-bit Products to Quadword Accumulators". +// +// Mnemonic : VPMADD52HUQ +// Supported forms : (6 forms) +// +// * VPMADD52HUQ m128/m64bcst, xmm, xmm{k}{z} [AVX512IFMA,AVX512VL] +// * VPMADD52HUQ xmm, xmm, xmm{k}{z} [AVX512IFMA,AVX512VL] +// * VPMADD52HUQ m256/m64bcst, ymm, ymm{k}{z} [AVX512IFMA,AVX512VL] +// * VPMADD52HUQ ymm, ymm, ymm{k}{z} [AVX512IFMA,AVX512VL] +// * VPMADD52HUQ m512/m64bcst, zmm, zmm{k}{z} [AVX512IFMA] +// * VPMADD52HUQ zmm, zmm, zmm{k}{z} [AVX512IFMA] +// +func (self *Program) VPMADD52HUQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMADD52HUQ", 3, Operands { v0, v1, v2 }) + // VPMADD52HUQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512IFMA | ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb5) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMADD52HUQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512IFMA | ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xb5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADD52HUQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512IFMA | ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb5) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMADD52HUQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512IFMA | ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xb5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADD52HUQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512IFMA) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb5) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMADD52HUQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512IFMA) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xb5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMADD52HUQ") + } + return p +} + +// VPMADD52LUQ performs "Packed Multiply of Unsigned 52-bit Integers and Add the Low 52-bit Products to Quadword Accumulators". +// +// Mnemonic : VPMADD52LUQ +// Supported forms : (6 forms) +// +// * VPMADD52LUQ m128/m64bcst, xmm, xmm{k}{z} [AVX512IFMA,AVX512VL] +// * VPMADD52LUQ xmm, xmm, xmm{k}{z} [AVX512IFMA,AVX512VL] +// * VPMADD52LUQ m256/m64bcst, ymm, ymm{k}{z} [AVX512IFMA,AVX512VL] +// * VPMADD52LUQ ymm, ymm, ymm{k}{z} [AVX512IFMA,AVX512VL] +// * VPMADD52LUQ m512/m64bcst, zmm, zmm{k}{z} [AVX512IFMA] +// * VPMADD52LUQ zmm, zmm, zmm{k}{z} [AVX512IFMA] +// +func (self *Program) VPMADD52LUQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMADD52LUQ", 3, Operands { v0, v1, v2 }) + // VPMADD52LUQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512IFMA | ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb4) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMADD52LUQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512IFMA | ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xb4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADD52LUQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512IFMA | ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb4) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMADD52LUQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512IFMA | ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xb4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADD52LUQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512IFMA) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xb4) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMADD52LUQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512IFMA) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xb4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMADD52LUQ") + } + return p +} + +// VPMADDUBSW performs "Multiply and Add Packed Signed and Unsigned Byte Integers". +// +// Mnemonic : VPMADDUBSW +// Supported forms : (10 forms) +// +// * VPMADDUBSW xmm, xmm, xmm [AVX] +// * VPMADDUBSW m128, xmm, xmm [AVX] +// * VPMADDUBSW ymm, ymm, ymm [AVX2] +// * VPMADDUBSW m256, ymm, ymm [AVX2] +// * VPMADDUBSW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMADDUBSW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMADDUBSW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMADDUBSW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMADDUBSW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMADDUBSW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMADDUBSW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMADDUBSW", 3, Operands { v0, v1, v2 }) + // VPMADDUBSW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x04) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADDUBSW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x04) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMADDUBSW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x04) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADDUBSW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x04) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMADDUBSW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x04) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADDUBSW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x04) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMADDUBSW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x04) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADDUBSW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x04) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMADDUBSW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x04) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADDUBSW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x04) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMADDUBSW") + } + return p +} + +// VPMADDWD performs "Multiply and Add Packed Signed Word Integers". +// +// Mnemonic : VPMADDWD +// Supported forms : (10 forms) +// +// * VPMADDWD xmm, xmm, xmm [AVX] +// * VPMADDWD m128, xmm, xmm [AVX] +// * VPMADDWD ymm, ymm, ymm [AVX2] +// * VPMADDWD m256, ymm, ymm [AVX2] +// * VPMADDWD zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMADDWD m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMADDWD xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMADDWD m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMADDWD ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMADDWD m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMADDWD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMADDWD", 3, Operands { v0, v1, v2 }) + // VPMADDWD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADDWD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf5) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMADDWD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADDWD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf5) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMADDWD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADDWD m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf5) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMADDWD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADDWD m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf5) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMADDWD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xf5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMADDWD m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf5) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMADDWD") + } + return p +} + +// VPMASKMOVD performs "Conditional Move Packed Doubleword Integers". +// +// Mnemonic : VPMASKMOVD +// Supported forms : (4 forms) +// +// * VPMASKMOVD m128, xmm, xmm [AVX2] +// * VPMASKMOVD m256, ymm, ymm [AVX2] +// * VPMASKMOVD xmm, xmm, m128 [AVX2] +// * VPMASKMOVD ymm, ymm, m256 [AVX2] +// +func (self *Program) VPMASKMOVD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMASKMOVD", 3, Operands { v0, v1, v2 }) + // VPMASKMOVD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x8c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMASKMOVD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x8c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMASKMOVD xmm, xmm, m128 + if isXMM(v0) && isXMM(v1) && isM128(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[0]), addr(v[2]), hlcode(v[1])) + m.emit(0x8e) + m.mrsd(lcode(v[0]), addr(v[2]), 1) + }) + } + // VPMASKMOVD ymm, ymm, m256 + if isYMM(v0) && isYMM(v1) && isM256(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[0]), addr(v[2]), hlcode(v[1])) + m.emit(0x8e) + m.mrsd(lcode(v[0]), addr(v[2]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPMASKMOVD") + } + return p +} + +// VPMASKMOVQ performs "Conditional Move Packed Quadword Integers". +// +// Mnemonic : VPMASKMOVQ +// Supported forms : (4 forms) +// +// * VPMASKMOVQ m128, xmm, xmm [AVX2] +// * VPMASKMOVQ m256, ymm, ymm [AVX2] +// * VPMASKMOVQ xmm, xmm, m128 [AVX2] +// * VPMASKMOVQ ymm, ymm, m256 [AVX2] +// +func (self *Program) VPMASKMOVQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMASKMOVQ", 3, Operands { v0, v1, v2 }) + // VPMASKMOVQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x8c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMASKMOVQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x8c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMASKMOVQ xmm, xmm, m128 + if isXMM(v0) && isXMM(v1) && isM128(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[0]), addr(v[2]), hlcode(v[1])) + m.emit(0x8e) + m.mrsd(lcode(v[0]), addr(v[2]), 1) + }) + } + // VPMASKMOVQ ymm, ymm, m256 + if isYMM(v0) && isYMM(v1) && isM256(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[0]), addr(v[2]), hlcode(v[1])) + m.emit(0x8e) + m.mrsd(lcode(v[0]), addr(v[2]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPMASKMOVQ") + } + return p +} + +// VPMAXSB performs "Maximum of Packed Signed Byte Integers". +// +// Mnemonic : VPMAXSB +// Supported forms : (10 forms) +// +// * VPMAXSB xmm, xmm, xmm [AVX] +// * VPMAXSB m128, xmm, xmm [AVX] +// * VPMAXSB ymm, ymm, ymm [AVX2] +// * VPMAXSB m256, ymm, ymm [AVX2] +// * VPMAXSB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMAXSB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMAXSB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMAXSB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMAXSB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMAXSB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMAXSB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMAXSB", 3, Operands { v0, v1, v2 }) + // VPMAXSB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x3c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x3c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMAXSB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x3c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x3c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMAXSB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x3c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x3c) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMAXSB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x3c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x3c) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMAXSB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x3c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x3c) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMAXSB") + } + return p +} + +// VPMAXSD performs "Maximum of Packed Signed Doubleword Integers". +// +// Mnemonic : VPMAXSD +// Supported forms : (10 forms) +// +// * VPMAXSD xmm, xmm, xmm [AVX] +// * VPMAXSD m128, xmm, xmm [AVX] +// * VPMAXSD ymm, ymm, ymm [AVX2] +// * VPMAXSD m256, ymm, ymm [AVX2] +// * VPMAXSD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPMAXSD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPMAXSD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMAXSD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMAXSD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMAXSD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMAXSD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMAXSD", 3, Operands { v0, v1, v2 }) + // VPMAXSD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x3d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x3d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMAXSD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x3d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x3d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMAXSD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3d) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMAXSD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x3d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3d) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMAXSD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x3d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3d) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMAXSD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x3d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMAXSD") + } + return p +} + +// VPMAXSQ performs "Maximum of Packed Signed Quadword Integers". +// +// Mnemonic : VPMAXSQ +// Supported forms : (6 forms) +// +// * VPMAXSQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPMAXSQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPMAXSQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMAXSQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMAXSQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMAXSQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMAXSQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMAXSQ", 3, Operands { v0, v1, v2 }) + // VPMAXSQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3d) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMAXSQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x3d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3d) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMAXSQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x3d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3d) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMAXSQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x3d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMAXSQ") + } + return p +} + +// VPMAXSW performs "Maximum of Packed Signed Word Integers". +// +// Mnemonic : VPMAXSW +// Supported forms : (10 forms) +// +// * VPMAXSW xmm, xmm, xmm [AVX] +// * VPMAXSW m128, xmm, xmm [AVX] +// * VPMAXSW ymm, ymm, ymm [AVX2] +// * VPMAXSW m256, ymm, ymm [AVX2] +// * VPMAXSW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMAXSW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMAXSW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMAXSW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMAXSW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMAXSW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMAXSW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMAXSW", 3, Operands { v0, v1, v2 }) + // VPMAXSW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xee) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xee) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMAXSW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xee) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xee) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMAXSW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xee) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xee) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMAXSW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xee) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xee) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMAXSW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xee) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXSW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xee) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMAXSW") + } + return p +} + +// VPMAXUB performs "Maximum of Packed Unsigned Byte Integers". +// +// Mnemonic : VPMAXUB +// Supported forms : (10 forms) +// +// * VPMAXUB xmm, xmm, xmm [AVX] +// * VPMAXUB m128, xmm, xmm [AVX] +// * VPMAXUB ymm, ymm, ymm [AVX2] +// * VPMAXUB m256, ymm, ymm [AVX2] +// * VPMAXUB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMAXUB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMAXUB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMAXUB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMAXUB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMAXUB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMAXUB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMAXUB", 3, Operands { v0, v1, v2 }) + // VPMAXUB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xde) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xde) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMAXUB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xde) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xde) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMAXUB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xde) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xde) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMAXUB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xde) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xde) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMAXUB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xde) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xde) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMAXUB") + } + return p +} + +// VPMAXUD performs "Maximum of Packed Unsigned Doubleword Integers". +// +// Mnemonic : VPMAXUD +// Supported forms : (10 forms) +// +// * VPMAXUD xmm, xmm, xmm [AVX] +// * VPMAXUD m128, xmm, xmm [AVX] +// * VPMAXUD ymm, ymm, ymm [AVX2] +// * VPMAXUD m256, ymm, ymm [AVX2] +// * VPMAXUD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPMAXUD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPMAXUD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMAXUD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMAXUD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMAXUD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMAXUD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMAXUD", 3, Operands { v0, v1, v2 }) + // VPMAXUD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x3f) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMAXUD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x3f) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMAXUD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3f) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMAXUD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3f) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMAXUD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3f) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMAXUD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMAXUD") + } + return p +} + +// VPMAXUQ performs "Maximum of Packed Unsigned Quadword Integers". +// +// Mnemonic : VPMAXUQ +// Supported forms : (6 forms) +// +// * VPMAXUQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPMAXUQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPMAXUQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMAXUQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMAXUQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMAXUQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMAXUQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMAXUQ", 3, Operands { v0, v1, v2 }) + // VPMAXUQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3f) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMAXUQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3f) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMAXUQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3f) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMAXUQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x3f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMAXUQ") + } + return p +} + +// VPMAXUW performs "Maximum of Packed Unsigned Word Integers". +// +// Mnemonic : VPMAXUW +// Supported forms : (10 forms) +// +// * VPMAXUW xmm, xmm, xmm [AVX] +// * VPMAXUW m128, xmm, xmm [AVX] +// * VPMAXUW ymm, ymm, ymm [AVX2] +// * VPMAXUW m256, ymm, ymm [AVX2] +// * VPMAXUW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMAXUW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMAXUW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMAXUW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMAXUW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMAXUW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMAXUW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMAXUW", 3, Operands { v0, v1, v2 }) + // VPMAXUW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x3e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x3e) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMAXUW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x3e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x3e) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMAXUW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x3e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x3e) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMAXUW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x3e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x3e) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMAXUW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x3e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMAXUW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x3e) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMAXUW") + } + return p +} + +// VPMINSB performs "Minimum of Packed Signed Byte Integers". +// +// Mnemonic : VPMINSB +// Supported forms : (10 forms) +// +// * VPMINSB xmm, xmm, xmm [AVX] +// * VPMINSB m128, xmm, xmm [AVX] +// * VPMINSB ymm, ymm, ymm [AVX2] +// * VPMINSB m256, ymm, ymm [AVX2] +// * VPMINSB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMINSB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMINSB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMINSB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMINSB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMINSB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMINSB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMINSB", 3, Operands { v0, v1, v2 }) + // VPMINSB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x38) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x38) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMINSB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x38) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x38) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMINSB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x38) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x38) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMINSB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x38) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x38) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMINSB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x38) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x38) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMINSB") + } + return p +} + +// VPMINSD performs "Minimum of Packed Signed Doubleword Integers". +// +// Mnemonic : VPMINSD +// Supported forms : (10 forms) +// +// * VPMINSD xmm, xmm, xmm [AVX] +// * VPMINSD m128, xmm, xmm [AVX] +// * VPMINSD ymm, ymm, ymm [AVX2] +// * VPMINSD m256, ymm, ymm [AVX2] +// * VPMINSD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPMINSD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPMINSD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMINSD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMINSD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMINSD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMINSD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMINSD", 3, Operands { v0, v1, v2 }) + // VPMINSD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x39) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x39) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMINSD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x39) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x39) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMINSD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x39) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMINSD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x39) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x39) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMINSD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x39) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x39) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMINSD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x39) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMINSD") + } + return p +} + +// VPMINSQ performs "Minimum of Packed Signed Quadword Integers". +// +// Mnemonic : VPMINSQ +// Supported forms : (6 forms) +// +// * VPMINSQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPMINSQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPMINSQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMINSQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMINSQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMINSQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMINSQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMINSQ", 3, Operands { v0, v1, v2 }) + // VPMINSQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x39) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMINSQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x39) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x39) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMINSQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x39) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x39) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMINSQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x39) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMINSQ") + } + return p +} + +// VPMINSW performs "Minimum of Packed Signed Word Integers". +// +// Mnemonic : VPMINSW +// Supported forms : (10 forms) +// +// * VPMINSW xmm, xmm, xmm [AVX] +// * VPMINSW m128, xmm, xmm [AVX] +// * VPMINSW ymm, ymm, ymm [AVX2] +// * VPMINSW m256, ymm, ymm [AVX2] +// * VPMINSW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMINSW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMINSW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMINSW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMINSW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMINSW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMINSW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMINSW", 3, Operands { v0, v1, v2 }) + // VPMINSW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xea) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xea) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMINSW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xea) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xea) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMINSW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xea) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xea) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMINSW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xea) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xea) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMINSW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xea) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINSW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xea) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMINSW") + } + return p +} + +// VPMINUB performs "Minimum of Packed Unsigned Byte Integers". +// +// Mnemonic : VPMINUB +// Supported forms : (10 forms) +// +// * VPMINUB xmm, xmm, xmm [AVX] +// * VPMINUB m128, xmm, xmm [AVX] +// * VPMINUB ymm, ymm, ymm [AVX2] +// * VPMINUB m256, ymm, ymm [AVX2] +// * VPMINUB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMINUB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMINUB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMINUB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMINUB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMINUB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMINUB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMINUB", 3, Operands { v0, v1, v2 }) + // VPMINUB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xda) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xda) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMINUB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xda) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xda) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMINUB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xda) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xda) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMINUB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xda) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xda) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMINUB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xda) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xda) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMINUB") + } + return p +} + +// VPMINUD performs "Minimum of Packed Unsigned Doubleword Integers". +// +// Mnemonic : VPMINUD +// Supported forms : (10 forms) +// +// * VPMINUD xmm, xmm, xmm [AVX] +// * VPMINUD m128, xmm, xmm [AVX] +// * VPMINUD ymm, ymm, ymm [AVX2] +// * VPMINUD m256, ymm, ymm [AVX2] +// * VPMINUD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPMINUD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPMINUD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMINUD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMINUD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMINUD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMINUD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMINUD", 3, Operands { v0, v1, v2 }) + // VPMINUD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x3b) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMINUD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x3b) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMINUD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3b) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMINUD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3b) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMINUD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3b) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMINUD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMINUD") + } + return p +} + +// VPMINUQ performs "Minimum of Packed Unsigned Quadword Integers". +// +// Mnemonic : VPMINUQ +// Supported forms : (6 forms) +// +// * VPMINUQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPMINUQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPMINUQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMINUQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMINUQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMINUQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMINUQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMINUQ", 3, Operands { v0, v1, v2 }) + // VPMINUQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3b) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMINUQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3b) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMINUQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x3b) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMINUQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x3b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMINUQ") + } + return p +} + +// VPMINUW performs "Minimum of Packed Unsigned Word Integers". +// +// Mnemonic : VPMINUW +// Supported forms : (10 forms) +// +// * VPMINUW xmm, xmm, xmm [AVX] +// * VPMINUW m128, xmm, xmm [AVX] +// * VPMINUW ymm, ymm, ymm [AVX2] +// * VPMINUW m256, ymm, ymm [AVX2] +// * VPMINUW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMINUW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMINUW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMINUW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMINUW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMINUW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMINUW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMINUW", 3, Operands { v0, v1, v2 }) + // VPMINUW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x3a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x3a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMINUW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x3a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x3a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMINUW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x3a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x3a) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMINUW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x3a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x3a) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMINUW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x3a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMINUW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x3a) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMINUW") + } + return p +} + +// VPMOVB2M performs "Move Signs of Packed Byte Integers to Mask Register". +// +// Mnemonic : VPMOVB2M +// Supported forms : (3 forms) +// +// * VPMOVB2M zmm, k [AVX512BW] +// * VPMOVB2M xmm, k [AVX512BW,AVX512VL] +// * VPMOVB2M ymm, k [AVX512BW,AVX512VL] +// +func (self *Program) VPMOVB2M(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVB2M", 2, Operands { v0, v1 }) + // VPMOVB2M zmm, k + if isZMM(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x48) + m.emit(0x29) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVB2M xmm, k + if isEVEXXMM(v0) && isK(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x08) + m.emit(0x29) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVB2M ymm, k + if isEVEXYMM(v0) && isK(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x28) + m.emit(0x29) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVB2M") + } + return p +} + +// VPMOVD2M performs "Move Signs of Packed Doubleword Integers to Mask Register". +// +// Mnemonic : VPMOVD2M +// Supported forms : (3 forms) +// +// * VPMOVD2M zmm, k [AVX512DQ] +// * VPMOVD2M xmm, k [AVX512DQ,AVX512VL] +// * VPMOVD2M ymm, k [AVX512DQ,AVX512VL] +// +func (self *Program) VPMOVD2M(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVD2M", 2, Operands { v0, v1 }) + // VPMOVD2M zmm, k + if isZMM(v0) && isK(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x48) + m.emit(0x39) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVD2M xmm, k + if isEVEXXMM(v0) && isK(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x08) + m.emit(0x39) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVD2M ymm, k + if isEVEXYMM(v0) && isK(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x28) + m.emit(0x39) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVD2M") + } + return p +} + +// VPMOVDB performs "Down Convert Packed Doubleword Values to Byte Values with Truncation". +// +// Mnemonic : VPMOVDB +// Supported forms : (6 forms) +// +// * VPMOVDB zmm, xmm{k}{z} [AVX512F] +// * VPMOVDB zmm, m128{k}{z} [AVX512F] +// * VPMOVDB xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVDB xmm, m32{k}{z} [AVX512F,AVX512VL] +// * VPMOVDB ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVDB ymm, m64{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVDB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVDB", 2, Operands { v0, v1 }) + // VPMOVDB zmm, xmm{k}{z} + if isZMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x31) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVDB zmm, m128{k}{z} + if isZMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x31) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VPMOVDB xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x31) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVDB xmm, m32{k}{z} + if isEVEXXMM(v0) && isM32kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x31) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VPMOVDB ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x31) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVDB ymm, m64{k}{z} + if isEVEXYMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x31) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVDB") + } + return p +} + +// VPMOVDW performs "Down Convert Packed Doubleword Values to Word Values with Truncation". +// +// Mnemonic : VPMOVDW +// Supported forms : (6 forms) +// +// * VPMOVDW zmm, ymm{k}{z} [AVX512F] +// * VPMOVDW zmm, m256{k}{z} [AVX512F] +// * VPMOVDW xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVDW xmm, m64{k}{z} [AVX512F,AVX512VL] +// * VPMOVDW ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVDW ymm, m128{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVDW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVDW", 2, Operands { v0, v1 }) + // VPMOVDW zmm, ymm{k}{z} + if isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x33) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVDW zmm, m256{k}{z} + if isZMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x33) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VPMOVDW xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x33) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVDW xmm, m64{k}{z} + if isEVEXXMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x33) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPMOVDW ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x33) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVDW ymm, m128{k}{z} + if isEVEXYMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x33) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVDW") + } + return p +} + +// VPMOVM2B performs "Expand Bits of Mask Register to Packed Byte Integers". +// +// Mnemonic : VPMOVM2B +// Supported forms : (3 forms) +// +// * VPMOVM2B k, zmm [AVX512BW] +// * VPMOVM2B k, xmm [AVX512BW,AVX512VL] +// * VPMOVM2B k, ymm [AVX512BW,AVX512VL] +// +func (self *Program) VPMOVM2B(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVM2B", 2, Operands { v0, v1 }) + // VPMOVM2B k, zmm + if isK(v0) && isZMM(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x48) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVM2B k, xmm + if isK(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x08) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVM2B k, ymm + if isK(v0) && isEVEXYMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x28) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVM2B") + } + return p +} + +// VPMOVM2D performs "Expand Bits of Mask Register to Packed Doubleword Integers". +// +// Mnemonic : VPMOVM2D +// Supported forms : (3 forms) +// +// * VPMOVM2D k, zmm [AVX512DQ] +// * VPMOVM2D k, xmm [AVX512DQ,AVX512VL] +// * VPMOVM2D k, ymm [AVX512DQ,AVX512VL] +// +func (self *Program) VPMOVM2D(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVM2D", 2, Operands { v0, v1 }) + // VPMOVM2D k, zmm + if isK(v0) && isZMM(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x48) + m.emit(0x38) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVM2D k, xmm + if isK(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x08) + m.emit(0x38) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVM2D k, ymm + if isK(v0) && isEVEXYMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7e) + m.emit(0x28) + m.emit(0x38) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVM2D") + } + return p +} + +// VPMOVM2Q performs "Expand Bits of Mask Register to Packed Quadword Integers". +// +// Mnemonic : VPMOVM2Q +// Supported forms : (3 forms) +// +// * VPMOVM2Q k, zmm [AVX512DQ] +// * VPMOVM2Q k, xmm [AVX512DQ,AVX512VL] +// * VPMOVM2Q k, ymm [AVX512DQ,AVX512VL] +// +func (self *Program) VPMOVM2Q(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVM2Q", 2, Operands { v0, v1 }) + // VPMOVM2Q k, zmm + if isK(v0) && isZMM(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x48) + m.emit(0x38) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVM2Q k, xmm + if isK(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x08) + m.emit(0x38) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVM2Q k, ymm + if isK(v0) && isEVEXYMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x28) + m.emit(0x38) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVM2Q") + } + return p +} + +// VPMOVM2W performs "Expand Bits of Mask Register to Packed Word Integers". +// +// Mnemonic : VPMOVM2W +// Supported forms : (3 forms) +// +// * VPMOVM2W k, zmm [AVX512BW] +// * VPMOVM2W k, xmm [AVX512BW,AVX512VL] +// * VPMOVM2W k, ymm [AVX512BW,AVX512VL] +// +func (self *Program) VPMOVM2W(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVM2W", 2, Operands { v0, v1 }) + // VPMOVM2W k, zmm + if isK(v0) && isZMM(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x48) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVM2W k, xmm + if isK(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x08) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVM2W k, ymm + if isK(v0) && isEVEXYMM(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x28) + m.emit(0x28) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVM2W") + } + return p +} + +// VPMOVMSKB performs "Move Byte Mask". +// +// Mnemonic : VPMOVMSKB +// Supported forms : (2 forms) +// +// * VPMOVMSKB xmm, r32 [AVX] +// * VPMOVMSKB ymm, r32 [AVX2] +// +func (self *Program) VPMOVMSKB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVMSKB", 2, Operands { v0, v1 }) + // VPMOVMSKB xmm, r32 + if isXMM(v0) && isReg32(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0xd7) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVMSKB ymm, r32 + if isYMM(v0) && isReg32(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), v[0], 0) + m.emit(0xd7) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVMSKB") + } + return p +} + +// VPMOVQ2M performs "Move Signs of Packed Quadword Integers to Mask Register". +// +// Mnemonic : VPMOVQ2M +// Supported forms : (3 forms) +// +// * VPMOVQ2M zmm, k [AVX512DQ] +// * VPMOVQ2M xmm, k [AVX512DQ,AVX512VL] +// * VPMOVQ2M ymm, k [AVX512DQ,AVX512VL] +// +func (self *Program) VPMOVQ2M(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVQ2M", 2, Operands { v0, v1 }) + // VPMOVQ2M zmm, k + if isZMM(v0) && isK(v1) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x48) + m.emit(0x39) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVQ2M xmm, k + if isEVEXXMM(v0) && isK(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x08) + m.emit(0x39) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVQ2M ymm, k + if isEVEXYMM(v0) && isK(v1) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x28) + m.emit(0x39) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVQ2M") + } + return p +} + +// VPMOVQB performs "Down Convert Packed Quadword Values to Byte Values with Truncation". +// +// Mnemonic : VPMOVQB +// Supported forms : (6 forms) +// +// * VPMOVQB zmm, xmm{k}{z} [AVX512F] +// * VPMOVQB zmm, m64{k}{z} [AVX512F] +// * VPMOVQB xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVQB xmm, m16{k}{z} [AVX512F,AVX512VL] +// * VPMOVQB ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVQB ymm, m32{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVQB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVQB", 2, Operands { v0, v1 }) + // VPMOVQB zmm, xmm{k}{z} + if isZMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x32) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVQB zmm, m64{k}{z} + if isZMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x32) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPMOVQB xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x32) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVQB xmm, m16{k}{z} + if isEVEXXMM(v0) && isM16kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x32) + m.mrsd(lcode(v[0]), addr(v[1]), 2) + }) + } + // VPMOVQB ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x32) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVQB ymm, m32{k}{z} + if isEVEXYMM(v0) && isM32kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x32) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVQB") + } + return p +} + +// VPMOVQD performs "Down Convert Packed Quadword Values to Doubleword Values with Truncation". +// +// Mnemonic : VPMOVQD +// Supported forms : (6 forms) +// +// * VPMOVQD zmm, ymm{k}{z} [AVX512F] +// * VPMOVQD zmm, m256{k}{z} [AVX512F] +// * VPMOVQD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVQD xmm, m64{k}{z} [AVX512F,AVX512VL] +// * VPMOVQD ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVQD ymm, m128{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVQD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVQD", 2, Operands { v0, v1 }) + // VPMOVQD zmm, ymm{k}{z} + if isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x35) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVQD zmm, m256{k}{z} + if isZMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x35) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VPMOVQD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x35) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVQD xmm, m64{k}{z} + if isEVEXXMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x35) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPMOVQD ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x35) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVQD ymm, m128{k}{z} + if isEVEXYMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x35) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVQD") + } + return p +} + +// VPMOVQW performs "Down Convert Packed Quadword Values to Word Values with Truncation". +// +// Mnemonic : VPMOVQW +// Supported forms : (6 forms) +// +// * VPMOVQW zmm, xmm{k}{z} [AVX512F] +// * VPMOVQW zmm, m128{k}{z} [AVX512F] +// * VPMOVQW xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVQW xmm, m32{k}{z} [AVX512F,AVX512VL] +// * VPMOVQW ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVQW ymm, m64{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVQW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVQW", 2, Operands { v0, v1 }) + // VPMOVQW zmm, xmm{k}{z} + if isZMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x34) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVQW zmm, m128{k}{z} + if isZMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x34) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VPMOVQW xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x34) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVQW xmm, m32{k}{z} + if isEVEXXMM(v0) && isM32kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x34) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VPMOVQW ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x34) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVQW ymm, m64{k}{z} + if isEVEXYMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x34) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVQW") + } + return p +} + +// VPMOVSDB performs "Down Convert Packed Doubleword Values to Byte Values with Signed Saturation". +// +// Mnemonic : VPMOVSDB +// Supported forms : (6 forms) +// +// * VPMOVSDB zmm, xmm{k}{z} [AVX512F] +// * VPMOVSDB zmm, m128{k}{z} [AVX512F] +// * VPMOVSDB xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSDB xmm, m32{k}{z} [AVX512F,AVX512VL] +// * VPMOVSDB ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSDB ymm, m64{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVSDB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVSDB", 2, Operands { v0, v1 }) + // VPMOVSDB zmm, xmm{k}{z} + if isZMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x21) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSDB zmm, m128{k}{z} + if isZMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x21) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VPMOVSDB xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x21) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSDB xmm, m32{k}{z} + if isEVEXXMM(v0) && isM32kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x21) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VPMOVSDB ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x21) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSDB ymm, m64{k}{z} + if isEVEXYMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x21) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVSDB") + } + return p +} + +// VPMOVSDW performs "Down Convert Packed Doubleword Values to Word Values with Signed Saturation". +// +// Mnemonic : VPMOVSDW +// Supported forms : (6 forms) +// +// * VPMOVSDW zmm, ymm{k}{z} [AVX512F] +// * VPMOVSDW zmm, m256{k}{z} [AVX512F] +// * VPMOVSDW xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSDW xmm, m64{k}{z} [AVX512F,AVX512VL] +// * VPMOVSDW ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSDW ymm, m128{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVSDW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVSDW", 2, Operands { v0, v1 }) + // VPMOVSDW zmm, ymm{k}{z} + if isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x23) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSDW zmm, m256{k}{z} + if isZMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x23) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VPMOVSDW xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x23) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSDW xmm, m64{k}{z} + if isEVEXXMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x23) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPMOVSDW ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x23) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSDW ymm, m128{k}{z} + if isEVEXYMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x23) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVSDW") + } + return p +} + +// VPMOVSQB performs "Down Convert Packed Quadword Values to Byte Values with Signed Saturation". +// +// Mnemonic : VPMOVSQB +// Supported forms : (6 forms) +// +// * VPMOVSQB zmm, xmm{k}{z} [AVX512F] +// * VPMOVSQB zmm, m64{k}{z} [AVX512F] +// * VPMOVSQB xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSQB xmm, m16{k}{z} [AVX512F,AVX512VL] +// * VPMOVSQB ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSQB ymm, m32{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVSQB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVSQB", 2, Operands { v0, v1 }) + // VPMOVSQB zmm, xmm{k}{z} + if isZMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x22) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSQB zmm, m64{k}{z} + if isZMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x22) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPMOVSQB xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x22) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSQB xmm, m16{k}{z} + if isEVEXXMM(v0) && isM16kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x22) + m.mrsd(lcode(v[0]), addr(v[1]), 2) + }) + } + // VPMOVSQB ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x22) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSQB ymm, m32{k}{z} + if isEVEXYMM(v0) && isM32kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x22) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVSQB") + } + return p +} + +// VPMOVSQD performs "Down Convert Packed Quadword Values to Doubleword Values with Signed Saturation". +// +// Mnemonic : VPMOVSQD +// Supported forms : (6 forms) +// +// * VPMOVSQD zmm, ymm{k}{z} [AVX512F] +// * VPMOVSQD zmm, m256{k}{z} [AVX512F] +// * VPMOVSQD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSQD xmm, m64{k}{z} [AVX512F,AVX512VL] +// * VPMOVSQD ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSQD ymm, m128{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVSQD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVSQD", 2, Operands { v0, v1 }) + // VPMOVSQD zmm, ymm{k}{z} + if isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x25) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSQD zmm, m256{k}{z} + if isZMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x25) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VPMOVSQD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x25) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSQD xmm, m64{k}{z} + if isEVEXXMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x25) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPMOVSQD ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x25) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSQD ymm, m128{k}{z} + if isEVEXYMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x25) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVSQD") + } + return p +} + +// VPMOVSQW performs "Down Convert Packed Quadword Values to Word Values with Signed Saturation". +// +// Mnemonic : VPMOVSQW +// Supported forms : (6 forms) +// +// * VPMOVSQW zmm, xmm{k}{z} [AVX512F] +// * VPMOVSQW zmm, m128{k}{z} [AVX512F] +// * VPMOVSQW xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSQW xmm, m32{k}{z} [AVX512F,AVX512VL] +// * VPMOVSQW ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSQW ymm, m64{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVSQW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVSQW", 2, Operands { v0, v1 }) + // VPMOVSQW zmm, xmm{k}{z} + if isZMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x24) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSQW zmm, m128{k}{z} + if isZMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x24) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VPMOVSQW xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x24) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSQW xmm, m32{k}{z} + if isEVEXXMM(v0) && isM32kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x24) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VPMOVSQW ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x24) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSQW ymm, m64{k}{z} + if isEVEXYMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x24) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVSQW") + } + return p +} + +// VPMOVSWB performs "Down Convert Packed Word Values to Byte Values with Signed Saturation". +// +// Mnemonic : VPMOVSWB +// Supported forms : (6 forms) +// +// * VPMOVSWB zmm, ymm{k}{z} [AVX512BW] +// * VPMOVSWB zmm, m256{k}{z} [AVX512BW] +// * VPMOVSWB xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMOVSWB xmm, m64{k}{z} [AVX512BW,AVX512VL] +// * VPMOVSWB ymm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMOVSWB ymm, m128{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMOVSWB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVSWB", 2, Operands { v0, v1 }) + // VPMOVSWB zmm, ymm{k}{z} + if isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x20) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSWB zmm, m256{k}{z} + if isZMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x20) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VPMOVSWB xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x20) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSWB xmm, m64{k}{z} + if isEVEXXMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x20) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPMOVSWB ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x20) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVSWB ymm, m128{k}{z} + if isEVEXYMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x20) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVSWB") + } + return p +} + +// VPMOVSXBD performs "Move Packed Byte Integers to Doubleword Integers with Sign Extension". +// +// Mnemonic : VPMOVSXBD +// Supported forms : (10 forms) +// +// * VPMOVSXBD xmm, xmm [AVX] +// * VPMOVSXBD m32, xmm [AVX] +// * VPMOVSXBD xmm, ymm [AVX2] +// * VPMOVSXBD m64, ymm [AVX2] +// * VPMOVSXBD xmm, zmm{k}{z} [AVX512F] +// * VPMOVSXBD m128, zmm{k}{z} [AVX512F] +// * VPMOVSXBD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXBD xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXBD m32, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXBD m64, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVSXBD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVSXBD", 2, Operands { v0, v1 }) + // VPMOVSXBD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x21) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBD m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x21) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVSXBD xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x21) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBD m64, ymm + if isM64(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x21) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVSXBD xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x21) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBD m128, zmm{k}{z} + if isM128(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x21) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VPMOVSXBD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x21) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBD xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x21) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBD m32, xmm{k}{z} + if isM32(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x21) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VPMOVSXBD m64, ymm{k}{z} + if isM64(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x21) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVSXBD") + } + return p +} + +// VPMOVSXBQ performs "Move Packed Byte Integers to Quadword Integers with Sign Extension". +// +// Mnemonic : VPMOVSXBQ +// Supported forms : (10 forms) +// +// * VPMOVSXBQ xmm, xmm [AVX] +// * VPMOVSXBQ m16, xmm [AVX] +// * VPMOVSXBQ xmm, ymm [AVX2] +// * VPMOVSXBQ m32, ymm [AVX2] +// * VPMOVSXBQ xmm, zmm{k}{z} [AVX512F] +// * VPMOVSXBQ m64, zmm{k}{z} [AVX512F] +// * VPMOVSXBQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXBQ xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXBQ m16, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXBQ m32, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVSXBQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVSXBQ", 2, Operands { v0, v1 }) + // VPMOVSXBQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x22) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBQ m16, xmm + if isM16(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x22) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVSXBQ xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x22) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBQ m32, ymm + if isM32(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x22) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVSXBQ xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x22) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBQ m64, zmm{k}{z} + if isM64(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x22) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPMOVSXBQ xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x22) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBQ xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x22) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBQ m16, xmm{k}{z} + if isM16(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x22) + m.mrsd(lcode(v[1]), addr(v[0]), 2) + }) + } + // VPMOVSXBQ m32, ymm{k}{z} + if isM32(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x22) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVSXBQ") + } + return p +} + +// VPMOVSXBW performs "Move Packed Byte Integers to Word Integers with Sign Extension". +// +// Mnemonic : VPMOVSXBW +// Supported forms : (10 forms) +// +// * VPMOVSXBW xmm, xmm [AVX] +// * VPMOVSXBW m64, xmm [AVX] +// * VPMOVSXBW xmm, ymm [AVX2] +// * VPMOVSXBW m128, ymm [AVX2] +// * VPMOVSXBW ymm, zmm{k}{z} [AVX512BW] +// * VPMOVSXBW m256, zmm{k}{z} [AVX512BW] +// * VPMOVSXBW xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMOVSXBW xmm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMOVSXBW m64, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMOVSXBW m128, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMOVSXBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVSXBW", 2, Operands { v0, v1 }) + // VPMOVSXBW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x20) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBW m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x20) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVSXBW xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x20) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBW m128, ymm + if isM128(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x20) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVSXBW ymm, zmm{k}{z} + if isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x20) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBW m256, zmm{k}{z} + if isM256(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x20) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VPMOVSXBW xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x20) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBW xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x20) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXBW m64, xmm{k}{z} + if isM64(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x20) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPMOVSXBW m128, ymm{k}{z} + if isM128(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x20) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVSXBW") + } + return p +} + +// VPMOVSXDQ performs "Move Packed Doubleword Integers to Quadword Integers with Sign Extension". +// +// Mnemonic : VPMOVSXDQ +// Supported forms : (10 forms) +// +// * VPMOVSXDQ xmm, xmm [AVX] +// * VPMOVSXDQ m64, xmm [AVX] +// * VPMOVSXDQ xmm, ymm [AVX2] +// * VPMOVSXDQ m128, ymm [AVX2] +// * VPMOVSXDQ ymm, zmm{k}{z} [AVX512F] +// * VPMOVSXDQ m256, zmm{k}{z} [AVX512F] +// * VPMOVSXDQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXDQ xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXDQ m64, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXDQ m128, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVSXDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVSXDQ", 2, Operands { v0, v1 }) + // VPMOVSXDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x25) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXDQ m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x25) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVSXDQ xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x25) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXDQ m128, ymm + if isM128(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x25) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVSXDQ ymm, zmm{k}{z} + if isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x25) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXDQ m256, zmm{k}{z} + if isM256(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x25) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VPMOVSXDQ xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x25) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXDQ xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x25) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXDQ m64, xmm{k}{z} + if isM64(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x25) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPMOVSXDQ m128, ymm{k}{z} + if isM128(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x25) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVSXDQ") + } + return p +} + +// VPMOVSXWD performs "Move Packed Word Integers to Doubleword Integers with Sign Extension". +// +// Mnemonic : VPMOVSXWD +// Supported forms : (10 forms) +// +// * VPMOVSXWD xmm, xmm [AVX] +// * VPMOVSXWD m64, xmm [AVX] +// * VPMOVSXWD xmm, ymm [AVX2] +// * VPMOVSXWD m128, ymm [AVX2] +// * VPMOVSXWD ymm, zmm{k}{z} [AVX512F] +// * VPMOVSXWD m256, zmm{k}{z} [AVX512F] +// * VPMOVSXWD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXWD xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXWD m64, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXWD m128, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVSXWD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVSXWD", 2, Operands { v0, v1 }) + // VPMOVSXWD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x23) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXWD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x23) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVSXWD xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x23) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXWD m128, ymm + if isM128(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x23) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVSXWD ymm, zmm{k}{z} + if isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x23) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXWD m256, zmm{k}{z} + if isM256(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x23) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VPMOVSXWD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x23) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXWD xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x23) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXWD m64, xmm{k}{z} + if isM64(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x23) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPMOVSXWD m128, ymm{k}{z} + if isM128(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x23) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVSXWD") + } + return p +} + +// VPMOVSXWQ performs "Move Packed Word Integers to Quadword Integers with Sign Extension". +// +// Mnemonic : VPMOVSXWQ +// Supported forms : (10 forms) +// +// * VPMOVSXWQ xmm, xmm [AVX] +// * VPMOVSXWQ m32, xmm [AVX] +// * VPMOVSXWQ xmm, ymm [AVX2] +// * VPMOVSXWQ m64, ymm [AVX2] +// * VPMOVSXWQ xmm, zmm{k}{z} [AVX512F] +// * VPMOVSXWQ m128, zmm{k}{z} [AVX512F] +// * VPMOVSXWQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXWQ xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXWQ m32, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVSXWQ m64, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVSXWQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVSXWQ", 2, Operands { v0, v1 }) + // VPMOVSXWQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x24) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXWQ m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x24) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVSXWQ xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x24) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXWQ m64, ymm + if isM64(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x24) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVSXWQ xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x24) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXWQ m128, zmm{k}{z} + if isM128(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x24) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VPMOVSXWQ xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x24) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXWQ xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x24) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVSXWQ m32, xmm{k}{z} + if isM32(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x24) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VPMOVSXWQ m64, ymm{k}{z} + if isM64(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x24) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVSXWQ") + } + return p +} + +// VPMOVUSDB performs "Down Convert Packed Doubleword Values to Byte Values with Unsigned Saturation". +// +// Mnemonic : VPMOVUSDB +// Supported forms : (6 forms) +// +// * VPMOVUSDB zmm, xmm{k}{z} [AVX512F] +// * VPMOVUSDB zmm, m128{k}{z} [AVX512F] +// * VPMOVUSDB xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSDB xmm, m32{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSDB ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSDB ymm, m64{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVUSDB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVUSDB", 2, Operands { v0, v1 }) + // VPMOVUSDB zmm, xmm{k}{z} + if isZMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSDB zmm, m128{k}{z} + if isZMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VPMOVUSDB xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSDB xmm, m32{k}{z} + if isEVEXXMM(v0) && isM32kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VPMOVUSDB ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x11) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSDB ymm, m64{k}{z} + if isEVEXYMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x11) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVUSDB") + } + return p +} + +// VPMOVUSDW performs "Down Convert Packed Doubleword Values to Word Values with Unsigned Saturation". +// +// Mnemonic : VPMOVUSDW +// Supported forms : (6 forms) +// +// * VPMOVUSDW zmm, ymm{k}{z} [AVX512F] +// * VPMOVUSDW zmm, m256{k}{z} [AVX512F] +// * VPMOVUSDW xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSDW xmm, m64{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSDW ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSDW ymm, m128{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVUSDW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVUSDW", 2, Operands { v0, v1 }) + // VPMOVUSDW zmm, ymm{k}{z} + if isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x13) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSDW zmm, m256{k}{z} + if isZMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x13) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VPMOVUSDW xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x13) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSDW xmm, m64{k}{z} + if isEVEXXMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x13) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPMOVUSDW ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x13) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSDW ymm, m128{k}{z} + if isEVEXYMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x13) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVUSDW") + } + return p +} + +// VPMOVUSQB performs "Down Convert Packed Quadword Values to Byte Values with Unsigned Saturation". +// +// Mnemonic : VPMOVUSQB +// Supported forms : (6 forms) +// +// * VPMOVUSQB zmm, xmm{k}{z} [AVX512F] +// * VPMOVUSQB zmm, m64{k}{z} [AVX512F] +// * VPMOVUSQB xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSQB xmm, m16{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSQB ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSQB ymm, m32{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVUSQB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVUSQB", 2, Operands { v0, v1 }) + // VPMOVUSQB zmm, xmm{k}{z} + if isZMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x12) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSQB zmm, m64{k}{z} + if isZMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x12) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPMOVUSQB xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x12) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSQB xmm, m16{k}{z} + if isEVEXXMM(v0) && isM16kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x12) + m.mrsd(lcode(v[0]), addr(v[1]), 2) + }) + } + // VPMOVUSQB ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x12) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSQB ymm, m32{k}{z} + if isEVEXYMM(v0) && isM32kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x12) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVUSQB") + } + return p +} + +// VPMOVUSQD performs "Down Convert Packed Quadword Values to Doubleword Values with Unsigned Saturation". +// +// Mnemonic : VPMOVUSQD +// Supported forms : (6 forms) +// +// * VPMOVUSQD zmm, ymm{k}{z} [AVX512F] +// * VPMOVUSQD zmm, m256{k}{z} [AVX512F] +// * VPMOVUSQD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSQD xmm, m64{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSQD ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSQD ymm, m128{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVUSQD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVUSQD", 2, Operands { v0, v1 }) + // VPMOVUSQD zmm, ymm{k}{z} + if isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x15) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSQD zmm, m256{k}{z} + if isZMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x15) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VPMOVUSQD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x15) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSQD xmm, m64{k}{z} + if isEVEXXMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x15) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPMOVUSQD ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x15) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSQD ymm, m128{k}{z} + if isEVEXYMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x15) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVUSQD") + } + return p +} + +// VPMOVUSQW performs "Down Convert Packed Quadword Values to Word Values with Unsigned Saturation". +// +// Mnemonic : VPMOVUSQW +// Supported forms : (6 forms) +// +// * VPMOVUSQW zmm, xmm{k}{z} [AVX512F] +// * VPMOVUSQW zmm, m128{k}{z} [AVX512F] +// * VPMOVUSQW xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSQW xmm, m32{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSQW ymm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVUSQW ymm, m64{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVUSQW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVUSQW", 2, Operands { v0, v1 }) + // VPMOVUSQW zmm, xmm{k}{z} + if isZMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x14) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSQW zmm, m128{k}{z} + if isZMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x14) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + // VPMOVUSQW xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x14) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSQW xmm, m32{k}{z} + if isEVEXXMM(v0) && isM32kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x14) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VPMOVUSQW ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x14) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSQW ymm, m64{k}{z} + if isEVEXYMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x14) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVUSQW") + } + return p +} + +// VPMOVUSWB performs "Down Convert Packed Word Values to Byte Values with Unsigned Saturation". +// +// Mnemonic : VPMOVUSWB +// Supported forms : (6 forms) +// +// * VPMOVUSWB zmm, ymm{k}{z} [AVX512BW] +// * VPMOVUSWB zmm, m256{k}{z} [AVX512BW] +// * VPMOVUSWB xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMOVUSWB xmm, m64{k}{z} [AVX512BW,AVX512VL] +// * VPMOVUSWB ymm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMOVUSWB ymm, m128{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMOVUSWB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVUSWB", 2, Operands { v0, v1 }) + // VPMOVUSWB zmm, ymm{k}{z} + if isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x10) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSWB zmm, m256{k}{z} + if isZMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VPMOVUSWB xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x10) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSWB xmm, m64{k}{z} + if isEVEXXMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPMOVUSWB ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x10) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVUSWB ymm, m128{k}{z} + if isEVEXYMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x10) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVUSWB") + } + return p +} + +// VPMOVW2M performs "Move Signs of Packed Word Integers to Mask Register". +// +// Mnemonic : VPMOVW2M +// Supported forms : (3 forms) +// +// * VPMOVW2M zmm, k [AVX512BW] +// * VPMOVW2M xmm, k [AVX512BW,AVX512VL] +// * VPMOVW2M ymm, k [AVX512BW,AVX512VL] +// +func (self *Program) VPMOVW2M(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVW2M", 2, Operands { v0, v1 }) + // VPMOVW2M zmm, k + if isZMM(v0) && isK(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x48) + m.emit(0x29) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVW2M xmm, k + if isEVEXXMM(v0) && isK(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x08) + m.emit(0x29) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVW2M ymm, k + if isEVEXYMM(v0) && isK(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfe) + m.emit(0x28) + m.emit(0x29) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVW2M") + } + return p +} + +// VPMOVWB performs "Down Convert Packed Word Values to Byte Values with Truncation". +// +// Mnemonic : VPMOVWB +// Supported forms : (6 forms) +// +// * VPMOVWB zmm, ymm{k}{z} [AVX512BW] +// * VPMOVWB zmm, m256{k}{z} [AVX512BW] +// * VPMOVWB xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMOVWB xmm, m64{k}{z} [AVX512BW,AVX512VL] +// * VPMOVWB ymm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMOVWB ymm, m128{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMOVWB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVWB", 2, Operands { v0, v1 }) + // VPMOVWB zmm, ymm{k}{z} + if isZMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x30) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVWB zmm, m256{k}{z} + if isZMM(v0) && isM256kz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x30) + m.mrsd(lcode(v[0]), addr(v[1]), 32) + }) + } + // VPMOVWB xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x30) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVWB xmm, m64{k}{z} + if isEVEXXMM(v0) && isM64kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x30) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPMOVWB ymm, xmm{k}{z} + if isEVEXYMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[0]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[0]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x30) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // VPMOVWB ymm, m128{k}{z} + if isEVEXYMM(v0) && isM128kz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x30) + m.mrsd(lcode(v[0]), addr(v[1]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVWB") + } + return p +} + +// VPMOVZXBD performs "Move Packed Byte Integers to Doubleword Integers with Zero Extension". +// +// Mnemonic : VPMOVZXBD +// Supported forms : (10 forms) +// +// * VPMOVZXBD xmm, xmm [AVX] +// * VPMOVZXBD m32, xmm [AVX] +// * VPMOVZXBD xmm, ymm [AVX2] +// * VPMOVZXBD m64, ymm [AVX2] +// * VPMOVZXBD xmm, zmm{k}{z} [AVX512F] +// * VPMOVZXBD m128, zmm{k}{z} [AVX512F] +// * VPMOVZXBD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXBD xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXBD m32, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXBD m64, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVZXBD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVZXBD", 2, Operands { v0, v1 }) + // VPMOVZXBD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x31) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBD m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x31) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVZXBD xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x31) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBD m64, ymm + if isM64(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x31) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVZXBD xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x31) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBD m128, zmm{k}{z} + if isM128(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x31) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VPMOVZXBD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x31) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBD xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x31) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBD m32, xmm{k}{z} + if isM32(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x31) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VPMOVZXBD m64, ymm{k}{z} + if isM64(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x31) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVZXBD") + } + return p +} + +// VPMOVZXBQ performs "Move Packed Byte Integers to Quadword Integers with Zero Extension". +// +// Mnemonic : VPMOVZXBQ +// Supported forms : (10 forms) +// +// * VPMOVZXBQ xmm, xmm [AVX] +// * VPMOVZXBQ m16, xmm [AVX] +// * VPMOVZXBQ xmm, ymm [AVX2] +// * VPMOVZXBQ m32, ymm [AVX2] +// * VPMOVZXBQ xmm, zmm{k}{z} [AVX512F] +// * VPMOVZXBQ m64, zmm{k}{z} [AVX512F] +// * VPMOVZXBQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXBQ xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXBQ m16, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXBQ m32, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVZXBQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVZXBQ", 2, Operands { v0, v1 }) + // VPMOVZXBQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x32) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBQ m16, xmm + if isM16(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x32) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVZXBQ xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x32) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBQ m32, ymm + if isM32(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x32) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVZXBQ xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x32) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBQ m64, zmm{k}{z} + if isM64(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x32) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPMOVZXBQ xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x32) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBQ xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x32) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBQ m16, xmm{k}{z} + if isM16(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x32) + m.mrsd(lcode(v[1]), addr(v[0]), 2) + }) + } + // VPMOVZXBQ m32, ymm{k}{z} + if isM32(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x32) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVZXBQ") + } + return p +} + +// VPMOVZXBW performs "Move Packed Byte Integers to Word Integers with Zero Extension". +// +// Mnemonic : VPMOVZXBW +// Supported forms : (10 forms) +// +// * VPMOVZXBW xmm, xmm [AVX] +// * VPMOVZXBW m64, xmm [AVX] +// * VPMOVZXBW xmm, ymm [AVX2] +// * VPMOVZXBW m128, ymm [AVX2] +// * VPMOVZXBW ymm, zmm{k}{z} [AVX512BW] +// * VPMOVZXBW m256, zmm{k}{z} [AVX512BW] +// * VPMOVZXBW xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMOVZXBW xmm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMOVZXBW m64, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMOVZXBW m128, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMOVZXBW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVZXBW", 2, Operands { v0, v1 }) + // VPMOVZXBW xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x30) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBW m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x30) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVZXBW xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x30) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBW m128, ymm + if isM128(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x30) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVZXBW ymm, zmm{k}{z} + if isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x30) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBW m256, zmm{k}{z} + if isM256(v0) && isZMMkz(v1) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x30) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VPMOVZXBW xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x30) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBW xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x30) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXBW m64, xmm{k}{z} + if isM64(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x30) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPMOVZXBW m128, ymm{k}{z} + if isM128(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x30) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVZXBW") + } + return p +} + +// VPMOVZXDQ performs "Move Packed Doubleword Integers to Quadword Integers with Zero Extension". +// +// Mnemonic : VPMOVZXDQ +// Supported forms : (10 forms) +// +// * VPMOVZXDQ xmm, xmm [AVX] +// * VPMOVZXDQ m64, xmm [AVX] +// * VPMOVZXDQ xmm, ymm [AVX2] +// * VPMOVZXDQ m128, ymm [AVX2] +// * VPMOVZXDQ ymm, zmm{k}{z} [AVX512F] +// * VPMOVZXDQ m256, zmm{k}{z} [AVX512F] +// * VPMOVZXDQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXDQ xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXDQ m64, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXDQ m128, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVZXDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVZXDQ", 2, Operands { v0, v1 }) + // VPMOVZXDQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x35) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXDQ m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x35) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVZXDQ xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x35) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXDQ m128, ymm + if isM128(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x35) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVZXDQ ymm, zmm{k}{z} + if isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x35) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXDQ m256, zmm{k}{z} + if isM256(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x35) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VPMOVZXDQ xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x35) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXDQ xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x35) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXDQ m64, xmm{k}{z} + if isM64(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x35) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPMOVZXDQ m128, ymm{k}{z} + if isM128(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x35) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVZXDQ") + } + return p +} + +// VPMOVZXWD performs "Move Packed Word Integers to Doubleword Integers with Zero Extension". +// +// Mnemonic : VPMOVZXWD +// Supported forms : (10 forms) +// +// * VPMOVZXWD xmm, xmm [AVX] +// * VPMOVZXWD m64, xmm [AVX] +// * VPMOVZXWD xmm, ymm [AVX2] +// * VPMOVZXWD m128, ymm [AVX2] +// * VPMOVZXWD ymm, zmm{k}{z} [AVX512F] +// * VPMOVZXWD m256, zmm{k}{z} [AVX512F] +// * VPMOVZXWD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXWD xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXWD m64, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXWD m128, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVZXWD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVZXWD", 2, Operands { v0, v1 }) + // VPMOVZXWD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x33) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXWD m64, xmm + if isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x33) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVZXWD xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x33) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXWD m128, ymm + if isM128(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x33) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVZXWD ymm, zmm{k}{z} + if isEVEXYMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x33) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXWD m256, zmm{k}{z} + if isM256(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x33) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VPMOVZXWD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x33) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXWD xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x33) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXWD m64, xmm{k}{z} + if isM64(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x33) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VPMOVZXWD m128, ymm{k}{z} + if isM128(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x33) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVZXWD") + } + return p +} + +// VPMOVZXWQ performs "Move Packed Word Integers to Quadword Integers with Zero Extension". +// +// Mnemonic : VPMOVZXWQ +// Supported forms : (10 forms) +// +// * VPMOVZXWQ xmm, xmm [AVX] +// * VPMOVZXWQ m32, xmm [AVX] +// * VPMOVZXWQ xmm, ymm [AVX2] +// * VPMOVZXWQ m64, ymm [AVX2] +// * VPMOVZXWQ xmm, zmm{k}{z} [AVX512F] +// * VPMOVZXWQ m128, zmm{k}{z} [AVX512F] +// * VPMOVZXWQ xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXWQ xmm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXWQ m32, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMOVZXWQ m64, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMOVZXWQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPMOVZXWQ", 2, Operands { v0, v1 }) + // VPMOVZXWQ xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x34) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXWQ m32, xmm + if isM32(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x34) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVZXWQ xmm, ymm + if isXMM(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x34) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXWQ m64, ymm + if isM64(v0) && isYMM(v1) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x34) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPMOVZXWQ xmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x34) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXWQ m128, zmm{k}{z} + if isM128(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x34) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VPMOVZXWQ xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x34) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXWQ xmm, ymm{k}{z} + if isEVEXXMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x34) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPMOVZXWQ m32, xmm{k}{z} + if isM32(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x34) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VPMOVZXWQ m64, ymm{k}{z} + if isM64(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), 0) + m.emit(0x34) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPMOVZXWQ") + } + return p +} + +// VPMULDQ performs "Multiply Packed Signed Doubleword Integers and Store Quadword Result". +// +// Mnemonic : VPMULDQ +// Supported forms : (10 forms) +// +// * VPMULDQ xmm, xmm, xmm [AVX] +// * VPMULDQ m128, xmm, xmm [AVX] +// * VPMULDQ ymm, ymm, ymm [AVX2] +// * VPMULDQ m256, ymm, ymm [AVX2] +// * VPMULDQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPMULDQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPMULDQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMULDQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMULDQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMULDQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMULDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMULDQ", 3, Operands { v0, v1, v2 }) + // VPMULDQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x28) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULDQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x28) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULDQ ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x28) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULDQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x28) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULDQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x28) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMULDQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x28) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULDQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x28) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMULDQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x28) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULDQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x28) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMULDQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x28) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMULDQ") + } + return p +} + +// VPMULHRSW performs "Packed Multiply Signed Word Integers and Store High Result with Round and Scale". +// +// Mnemonic : VPMULHRSW +// Supported forms : (10 forms) +// +// * VPMULHRSW xmm, xmm, xmm [AVX] +// * VPMULHRSW m128, xmm, xmm [AVX] +// * VPMULHRSW ymm, ymm, ymm [AVX2] +// * VPMULHRSW m256, ymm, ymm [AVX2] +// * VPMULHRSW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMULHRSW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMULHRSW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMULHRSW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMULHRSW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMULHRSW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMULHRSW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMULHRSW", 3, Operands { v0, v1, v2 }) + // VPMULHRSW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHRSW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x0b) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULHRSW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHRSW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x0b) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULHRSW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHRSW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x0b) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMULHRSW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHRSW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x0b) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMULHRSW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHRSW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x0b) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMULHRSW") + } + return p +} + +// VPMULHUW performs "Multiply Packed Unsigned Word Integers and Store High Result". +// +// Mnemonic : VPMULHUW +// Supported forms : (10 forms) +// +// * VPMULHUW xmm, xmm, xmm [AVX] +// * VPMULHUW m128, xmm, xmm [AVX] +// * VPMULHUW ymm, ymm, ymm [AVX2] +// * VPMULHUW m256, ymm, ymm [AVX2] +// * VPMULHUW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMULHUW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMULHUW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMULHUW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMULHUW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMULHUW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMULHUW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMULHUW", 3, Operands { v0, v1, v2 }) + // VPMULHUW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHUW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe4) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULHUW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHUW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe4) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULHUW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xe4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHUW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe4) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMULHUW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xe4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHUW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe4) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMULHUW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xe4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHUW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe4) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMULHUW") + } + return p +} + +// VPMULHW performs "Multiply Packed Signed Word Integers and Store High Result". +// +// Mnemonic : VPMULHW +// Supported forms : (10 forms) +// +// * VPMULHW xmm, xmm, xmm [AVX] +// * VPMULHW m128, xmm, xmm [AVX] +// * VPMULHW ymm, ymm, ymm [AVX2] +// * VPMULHW m256, ymm, ymm [AVX2] +// * VPMULHW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMULHW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMULHW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMULHW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMULHW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMULHW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMULHW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMULHW", 3, Operands { v0, v1, v2 }) + // VPMULHW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe5) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULHW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe5) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULHW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xe5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe5) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMULHW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xe5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe5) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMULHW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xe5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULHW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe5) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMULHW") + } + return p +} + +// VPMULLD performs "Multiply Packed Signed Doubleword Integers and Store Low Result". +// +// Mnemonic : VPMULLD +// Supported forms : (10 forms) +// +// * VPMULLD xmm, xmm, xmm [AVX] +// * VPMULLD m128, xmm, xmm [AVX] +// * VPMULLD ymm, ymm, ymm [AVX2] +// * VPMULLD m256, ymm, ymm [AVX2] +// * VPMULLD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPMULLD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPMULLD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMULLD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMULLD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMULLD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMULLD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMULLD", 3, Operands { v0, v1, v2 }) + // VPMULLD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x40) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULLD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x40) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULLD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x40) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULLD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x40) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULLD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x40) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMULLD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x40) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULLD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x40) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMULLD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x40) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULLD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x40) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMULLD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x40) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMULLD") + } + return p +} + +// VPMULLQ performs "Multiply Packed Signed Quadword Integers and Store Low Result". +// +// Mnemonic : VPMULLQ +// Supported forms : (6 forms) +// +// * VPMULLQ m512/m64bcst, zmm, zmm{k}{z} [AVX512DQ] +// * VPMULLQ zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VPMULLQ m128/m64bcst, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VPMULLQ xmm, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VPMULLQ m256/m64bcst, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VPMULLQ ymm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VPMULLQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMULLQ", 3, Operands { v0, v1, v2 }) + // VPMULLQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x40) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMULLQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x40) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULLQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x40) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMULLQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x40) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULLQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x40) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMULLQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x40) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMULLQ") + } + return p +} + +// VPMULLW performs "Multiply Packed Signed Word Integers and Store Low Result". +// +// Mnemonic : VPMULLW +// Supported forms : (10 forms) +// +// * VPMULLW xmm, xmm, xmm [AVX] +// * VPMULLW m128, xmm, xmm [AVX] +// * VPMULLW ymm, ymm, ymm [AVX2] +// * VPMULLW m256, ymm, ymm [AVX2] +// * VPMULLW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPMULLW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPMULLW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMULLW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPMULLW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPMULLW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPMULLW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMULLW", 3, Operands { v0, v1, v2 }) + // VPMULLW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULLW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd5) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULLW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULLW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd5) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULLW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xd5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULLW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd5) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMULLW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xd5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULLW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd5) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMULLW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xd5) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULLW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd5) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPMULLW") + } + return p +} + +// VPMULTISHIFTQB performs "Select Packed Unaligned Bytes from Quadword Sources". +// +// Mnemonic : VPMULTISHIFTQB +// Supported forms : (6 forms) +// +// * VPMULTISHIFTQB m128/m64bcst, xmm, xmm{k}{z} [AVX512VBMI,AVX512VL] +// * VPMULTISHIFTQB xmm, xmm, xmm{k}{z} [AVX512VBMI,AVX512VL] +// * VPMULTISHIFTQB m256/m64bcst, ymm, ymm{k}{z} [AVX512VBMI,AVX512VL] +// * VPMULTISHIFTQB ymm, ymm, ymm{k}{z} [AVX512VBMI,AVX512VL] +// * VPMULTISHIFTQB m512/m64bcst, zmm, zmm{k}{z} [AVX512VBMI] +// * VPMULTISHIFTQB zmm, zmm, zmm{k}{z} [AVX512VBMI] +// +func (self *Program) VPMULTISHIFTQB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMULTISHIFTQB", 3, Operands { v0, v1, v2 }) + // VPMULTISHIFTQB m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VBMI | ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x83) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMULTISHIFTQB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VBMI | ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x83) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULTISHIFTQB m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VBMI | ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x83) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMULTISHIFTQB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VBMI | ISA_AVX512VL) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x83) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULTISHIFTQB m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x83) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMULTISHIFTQB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512VBMI) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x83) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMULTISHIFTQB") + } + return p +} + +// VPMULUDQ performs "Multiply Packed Unsigned Doubleword Integers". +// +// Mnemonic : VPMULUDQ +// Supported forms : (10 forms) +// +// * VPMULUDQ xmm, xmm, xmm [AVX] +// * VPMULUDQ m128, xmm, xmm [AVX] +// * VPMULUDQ ymm, ymm, ymm [AVX2] +// * VPMULUDQ m256, ymm, ymm [AVX2] +// * VPMULUDQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPMULUDQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPMULUDQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMULUDQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPMULUDQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPMULUDQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPMULUDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPMULUDQ", 3, Operands { v0, v1, v2 }) + // VPMULUDQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULUDQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf4) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULUDQ ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULUDQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf4) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPMULUDQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xf4) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPMULUDQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xf4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULUDQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xf4) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPMULUDQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xf4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPMULUDQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xf4) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPMULUDQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xf4) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPMULUDQ") + } + return p +} + +// VPOPCNTD performs "Packed Population Count for Doubleword Integers". +// +// Mnemonic : VPOPCNTD +// Supported forms : (2 forms) +// +// * VPOPCNTD m512/m32bcst, zmm{k}{z} [AVX512VPOPCNTDQ] +// * VPOPCNTD zmm, zmm{k}{z} [AVX512VPOPCNTDQ] +// +func (self *Program) VPOPCNTD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPOPCNTD", 2, Operands { v0, v1 }) + // VPOPCNTD m512/m32bcst, zmm{k}{z} + if isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512VPOPCNTDQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x55) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VPOPCNTD zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512VPOPCNTDQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x55) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPOPCNTD") + } + return p +} + +// VPOPCNTQ performs "Packed Population Count for Quadword Integers". +// +// Mnemonic : VPOPCNTQ +// Supported forms : (2 forms) +// +// * VPOPCNTQ m512/m64bcst, zmm{k}{z} [AVX512VPOPCNTDQ] +// * VPOPCNTQ zmm, zmm{k}{z} [AVX512VPOPCNTDQ] +// +func (self *Program) VPOPCNTQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPOPCNTQ", 2, Operands { v0, v1 }) + // VPOPCNTQ m512/m64bcst, zmm{k}{z} + if isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512VPOPCNTDQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x55) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VPOPCNTQ zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512VPOPCNTDQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x55) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPOPCNTQ") + } + return p +} + +// VPOR performs "Packed Bitwise Logical OR". +// +// Mnemonic : VPOR +// Supported forms : (4 forms) +// +// * VPOR xmm, xmm, xmm [AVX] +// * VPOR m128, xmm, xmm [AVX] +// * VPOR ymm, ymm, ymm [AVX2] +// * VPOR m256, ymm, ymm [AVX2] +// +func (self *Program) VPOR(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPOR", 3, Operands { v0, v1, v2 }) + // VPOR xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xeb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPOR m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xeb) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPOR ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xeb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPOR m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xeb) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPOR") + } + return p +} + +// VPORD performs "Bitwise Logical OR of Packed Doubleword Integers". +// +// Mnemonic : VPORD +// Supported forms : (6 forms) +// +// * VPORD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPORD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPORD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPORD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPORD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPORD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPORD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPORD", 3, Operands { v0, v1, v2 }) + // VPORD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xeb) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPORD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xeb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPORD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xeb) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPORD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xeb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPORD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xeb) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPORD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xeb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPORD") + } + return p +} + +// VPORQ performs "Bitwise Logical OR of Packed Quadword Integers". +// +// Mnemonic : VPORQ +// Supported forms : (6 forms) +// +// * VPORQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPORQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPORQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPORQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPORQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPORQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPORQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPORQ", 3, Operands { v0, v1, v2 }) + // VPORQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xeb) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPORQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xeb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPORQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xeb) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPORQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xeb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPORQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xeb) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPORQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xeb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPORQ") + } + return p +} + +// VPPERM performs "Packed Permute Bytes". +// +// Mnemonic : VPPERM +// Supported forms : (3 forms) +// +// * VPPERM xmm, xmm, xmm, xmm [XOP] +// * VPPERM m128, xmm, xmm, xmm [XOP] +// * VPPERM xmm, m128, xmm, xmm [XOP] +// +func (self *Program) VPPERM(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPPERM", 4, Operands { v0, v1, v2, v3 }) + // VPPERM xmm, xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[2]) << 3)) + m.emit(0xa3) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.emit(hlcode(v[0]) << 4) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[3]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[2]) << 3)) + m.emit(0xa3) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[0])) + m.emit(hlcode(v[1]) << 4) + }) + } + // VPPERM m128, xmm, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x80, hcode(v[3]), addr(v[0]), hlcode(v[2])) + m.emit(0xa3) + m.mrsd(lcode(v[3]), addr(v[0]), 1) + m.emit(hlcode(v[1]) << 4) + }) + } + // VPPERM xmm, m128, xmm, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xa3) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.emit(hlcode(v[0]) << 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPPERM") + } + return p +} + +// VPROLD performs "Rotate Packed Doubleword Left". +// +// Mnemonic : VPROLD +// Supported forms : (6 forms) +// +// * VPROLD imm8, m512/m32bcst, zmm{k}{z} [AVX512F] +// * VPROLD imm8, zmm, zmm{k}{z} [AVX512F] +// * VPROLD imm8, m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPROLD imm8, m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPROLD imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPROLD imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPROLD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPROLD", 3, Operands { v0, v1, v2 }) + // VPROLD imm8, m512/m32bcst, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(1, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPROLD imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x72) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPROLD imm8, m128/m32bcst, xmm{k}{z} + if isImm8(v0) && isM128M32bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(1, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPROLD imm8, m256/m32bcst, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(1, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPROLD imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x72) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPROLD imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x72) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPROLD") + } + return p +} + +// VPROLQ performs "Rotate Packed Quadword Left". +// +// Mnemonic : VPROLQ +// Supported forms : (6 forms) +// +// * VPROLQ imm8, m512/m64bcst, zmm{k}{z} [AVX512F] +// * VPROLQ imm8, zmm, zmm{k}{z} [AVX512F] +// * VPROLQ imm8, m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPROLQ imm8, m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPROLQ imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPROLQ imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPROLQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPROLQ", 3, Operands { v0, v1, v2 }) + // VPROLQ imm8, m512/m64bcst, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(1, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPROLQ imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x72) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPROLQ imm8, m128/m64bcst, xmm{k}{z} + if isImm8(v0) && isM128M64bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(1, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPROLQ imm8, m256/m64bcst, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(1, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPROLQ imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x72) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPROLQ imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x72) + m.emit(0xc8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPROLQ") + } + return p +} + +// VPROLVD performs "Variable Rotate Packed Doubleword Left". +// +// Mnemonic : VPROLVD +// Supported forms : (6 forms) +// +// * VPROLVD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPROLVD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPROLVD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPROLVD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPROLVD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPROLVD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPROLVD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPROLVD", 3, Operands { v0, v1, v2 }) + // VPROLVD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPROLVD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPROLVD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPROLVD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPROLVD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPROLVD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPROLVD") + } + return p +} + +// VPROLVQ performs "Variable Rotate Packed Quadword Left". +// +// Mnemonic : VPROLVQ +// Supported forms : (6 forms) +// +// * VPROLVQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPROLVQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPROLVQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPROLVQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPROLVQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPROLVQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPROLVQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPROLVQ", 3, Operands { v0, v1, v2 }) + // VPROLVQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPROLVQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPROLVQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPROLVQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPROLVQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPROLVQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPROLVQ") + } + return p +} + +// VPRORD performs "Rotate Packed Doubleword Right". +// +// Mnemonic : VPRORD +// Supported forms : (6 forms) +// +// * VPRORD imm8, m512/m32bcst, zmm{k}{z} [AVX512F] +// * VPRORD imm8, zmm, zmm{k}{z} [AVX512F] +// * VPRORD imm8, m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPRORD imm8, m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPRORD imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPRORD imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPRORD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPRORD", 3, Operands { v0, v1, v2 }) + // VPRORD imm8, m512/m32bcst, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(0, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPRORD imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x72) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPRORD imm8, m128/m32bcst, xmm{k}{z} + if isImm8(v0) && isM128M32bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(0, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPRORD imm8, m256/m32bcst, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(0, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPRORD imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x72) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPRORD imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x72) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPRORD") + } + return p +} + +// VPRORQ performs "Rotate Packed Quadword Right". +// +// Mnemonic : VPRORQ +// Supported forms : (6 forms) +// +// * VPRORQ imm8, m512/m64bcst, zmm{k}{z} [AVX512F] +// * VPRORQ imm8, zmm, zmm{k}{z} [AVX512F] +// * VPRORQ imm8, m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPRORQ imm8, m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPRORQ imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPRORQ imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPRORQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPRORQ", 3, Operands { v0, v1, v2 }) + // VPRORQ imm8, m512/m64bcst, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(0, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPRORQ imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x72) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPRORQ imm8, m128/m64bcst, xmm{k}{z} + if isImm8(v0) && isM128M64bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(0, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPRORQ imm8, m256/m64bcst, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(0, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPRORQ imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x72) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPRORQ imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x72) + m.emit(0xc0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPRORQ") + } + return p +} + +// VPRORVD performs "Variable Rotate Packed Doubleword Right". +// +// Mnemonic : VPRORVD +// Supported forms : (6 forms) +// +// * VPRORVD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPRORVD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPRORVD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPRORVD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPRORVD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPRORVD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPRORVD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPRORVD", 3, Operands { v0, v1, v2 }) + // VPRORVD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPRORVD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPRORVD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPRORVD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPRORVD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPRORVD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPRORVD") + } + return p +} + +// VPRORVQ performs "Variable Rotate Packed Quadword Right". +// +// Mnemonic : VPRORVQ +// Supported forms : (6 forms) +// +// * VPRORVQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPRORVQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPRORVQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPRORVQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPRORVQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPRORVQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPRORVQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPRORVQ", 3, Operands { v0, v1, v2 }) + // VPRORVQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPRORVQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPRORVQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPRORVQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPRORVQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPRORVQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPRORVQ") + } + return p +} + +// VPROTB performs "Packed Rotate Bytes". +// +// Mnemonic : VPROTB +// Supported forms : (5 forms) +// +// * VPROTB imm8, xmm, xmm [XOP] +// * VPROTB xmm, xmm, xmm [XOP] +// * VPROTB m128, xmm, xmm [XOP] +// * VPROTB imm8, m128, xmm [XOP] +// * VPROTB xmm, m128, xmm [XOP] +// +func (self *Program) VPROTB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPROTB", 3, Operands { v0, v1, v2 }) + // VPROTB imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78) + m.emit(0xc0) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPROTB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0x90) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x90) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPROTB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x90) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPROTB imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[2]), addr(v[1]), 0) + m.emit(0xc0) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPROTB xmm, m128, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x90) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPROTB") + } + return p +} + +// VPROTD performs "Packed Rotate Doublewords". +// +// Mnemonic : VPROTD +// Supported forms : (5 forms) +// +// * VPROTD imm8, xmm, xmm [XOP] +// * VPROTD xmm, xmm, xmm [XOP] +// * VPROTD m128, xmm, xmm [XOP] +// * VPROTD imm8, m128, xmm [XOP] +// * VPROTD xmm, m128, xmm [XOP] +// +func (self *Program) VPROTD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPROTD", 3, Operands { v0, v1, v2 }) + // VPROTD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78) + m.emit(0xc2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPROTD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0x92) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x92) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPROTD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x92) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPROTD imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[2]), addr(v[1]), 0) + m.emit(0xc2) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPROTD xmm, m128, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x92) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPROTD") + } + return p +} + +// VPROTQ performs "Packed Rotate Quadwords". +// +// Mnemonic : VPROTQ +// Supported forms : (5 forms) +// +// * VPROTQ imm8, xmm, xmm [XOP] +// * VPROTQ xmm, xmm, xmm [XOP] +// * VPROTQ m128, xmm, xmm [XOP] +// * VPROTQ imm8, m128, xmm [XOP] +// * VPROTQ xmm, m128, xmm [XOP] +// +func (self *Program) VPROTQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPROTQ", 3, Operands { v0, v1, v2 }) + // VPROTQ imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78) + m.emit(0xc3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPROTQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0x93) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x93) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPROTQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x93) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPROTQ imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[2]), addr(v[1]), 0) + m.emit(0xc3) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPROTQ xmm, m128, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x93) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPROTQ") + } + return p +} + +// VPROTW performs "Packed Rotate Words". +// +// Mnemonic : VPROTW +// Supported forms : (5 forms) +// +// * VPROTW imm8, xmm, xmm [XOP] +// * VPROTW xmm, xmm, xmm [XOP] +// * VPROTW m128, xmm, xmm [XOP] +// * VPROTW imm8, m128, xmm [XOP] +// * VPROTW xmm, m128, xmm [XOP] +// +func (self *Program) VPROTW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPROTW", 3, Operands { v0, v1, v2 }) + // VPROTW imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe8 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78) + m.emit(0xc1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPROTW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0x91) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x91) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPROTW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x91) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPROTW imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1000, 0x00, hcode(v[2]), addr(v[1]), 0) + m.emit(0xc1) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPROTW xmm, m128, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x91) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPROTW") + } + return p +} + +// VPSADBW performs "Compute Sum of Absolute Differences". +// +// Mnemonic : VPSADBW +// Supported forms : (10 forms) +// +// * VPSADBW xmm, xmm, xmm [AVX] +// * VPSADBW m128, xmm, xmm [AVX] +// * VPSADBW ymm, ymm, ymm [AVX2] +// * VPSADBW m256, ymm, ymm [AVX2] +// * VPSADBW zmm, zmm, zmm [AVX512BW] +// * VPSADBW m512, zmm, zmm [AVX512BW] +// * VPSADBW xmm, xmm, xmm [AVX512BW,AVX512VL] +// * VPSADBW m128, xmm, xmm [AVX512BW,AVX512VL] +// * VPSADBW ymm, ymm, ymm [AVX512BW,AVX512VL] +// * VPSADBW m256, ymm, ymm [AVX512BW,AVX512VL] +// +func (self *Program) VPSADBW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSADBW", 3, Operands { v0, v1, v2 }) + // VPSADBW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSADBW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf6) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSADBW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSADBW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf6) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSADBW zmm, zmm, zmm + if isZMM(v0) && isZMM(v1) && isZMM(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x40) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSADBW m512, zmm, zmm + if isM512(v0) && isZMM(v1) && isZMM(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0xf6) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSADBW xmm, xmm, xmm + if isEVEXXMM(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x00) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSADBW m128, xmm, xmm + if isM128(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0xf6) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSADBW ymm, ymm, ymm + if isEVEXYMM(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | 0x20) + m.emit(0xf6) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSADBW m256, ymm, ymm + if isM256(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), 0, 0, 0) + m.emit(0xf6) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPSADBW") + } + return p +} + +// VPSCATTERDD performs "Scatter Packed Doubleword Values with Signed Doubleword Indices". +// +// Mnemonic : VPSCATTERDD +// Supported forms : (3 forms) +// +// * VPSCATTERDD zmm, vm32z{k} [AVX512F] +// * VPSCATTERDD xmm, vm32x{k} [AVX512F,AVX512VL] +// * VPSCATTERDD ymm, vm32y{k} [AVX512F,AVX512VL] +// +func (self *Program) VPSCATTERDD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPSCATTERDD", 2, Operands { v0, v1 }) + // VPSCATTERDD zmm, vm32z{k} + if isZMM(v0) && isVMZk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa0) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VPSCATTERDD xmm, vm32x{k} + if isEVEXXMM(v0) && isVMXk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa0) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VPSCATTERDD ymm, vm32y{k} + if isEVEXYMM(v0) && isVMYk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa0) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPSCATTERDD") + } + return p +} + +// VPSCATTERDQ performs "Scatter Packed Quadword Values with Signed Doubleword Indices". +// +// Mnemonic : VPSCATTERDQ +// Supported forms : (3 forms) +// +// * VPSCATTERDQ zmm, vm32y{k} [AVX512F] +// * VPSCATTERDQ xmm, vm32x{k} [AVX512F,AVX512VL] +// * VPSCATTERDQ ymm, vm32x{k} [AVX512F,AVX512VL] +// +func (self *Program) VPSCATTERDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPSCATTERDQ", 2, Operands { v0, v1 }) + // VPSCATTERDQ zmm, vm32y{k} + if isZMM(v0) && isVMYk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa0) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPSCATTERDQ xmm, vm32x{k} + if isEVEXXMM(v0) && isVMXk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa0) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPSCATTERDQ ymm, vm32x{k} + if isEVEXYMM(v0) && isVMXk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa0) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPSCATTERDQ") + } + return p +} + +// VPSCATTERQD performs "Scatter Packed Doubleword Values with Signed Quadword Indices". +// +// Mnemonic : VPSCATTERQD +// Supported forms : (3 forms) +// +// * VPSCATTERQD ymm, vm64z{k} [AVX512F] +// * VPSCATTERQD xmm, vm64x{k} [AVX512F,AVX512VL] +// * VPSCATTERQD xmm, vm64y{k} [AVX512F,AVX512VL] +// +func (self *Program) VPSCATTERQD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPSCATTERQD", 2, Operands { v0, v1 }) + // VPSCATTERQD ymm, vm64z{k} + if isEVEXYMM(v0) && isVMZk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa1) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VPSCATTERQD xmm, vm64x{k} + if isEVEXXMM(v0) && isVMXk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa1) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VPSCATTERQD xmm, vm64y{k} + if isEVEXXMM(v0) && isVMYk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa1) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VPSCATTERQD") + } + return p +} + +// VPSCATTERQQ performs "Scatter Packed Quadword Values with Signed Quadword Indices". +// +// Mnemonic : VPSCATTERQQ +// Supported forms : (3 forms) +// +// * VPSCATTERQQ zmm, vm64z{k} [AVX512F] +// * VPSCATTERQQ xmm, vm64x{k} [AVX512F,AVX512VL] +// * VPSCATTERQQ ymm, vm64y{k} [AVX512F,AVX512VL] +// +func (self *Program) VPSCATTERQQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPSCATTERQQ", 2, Operands { v0, v1 }) + // VPSCATTERQQ zmm, vm64z{k} + if isZMM(v0) && isVMZk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa1) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPSCATTERQQ xmm, vm64x{k} + if isEVEXXMM(v0) && isVMXk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa1) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VPSCATTERQQ ymm, vm64y{k} + if isEVEXYMM(v0) && isVMYk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa1) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VPSCATTERQQ") + } + return p +} + +// VPSHAB performs "Packed Shift Arithmetic Bytes". +// +// Mnemonic : VPSHAB +// Supported forms : (3 forms) +// +// * VPSHAB xmm, xmm, xmm [XOP] +// * VPSHAB m128, xmm, xmm [XOP] +// * VPSHAB xmm, m128, xmm [XOP] +// +func (self *Program) VPSHAB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSHAB", 3, Operands { v0, v1, v2 }) + // VPSHAB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0x98) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x98) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHAB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x98) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSHAB xmm, m128, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x98) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPSHAB") + } + return p +} + +// VPSHAD performs "Packed Shift Arithmetic Doublewords". +// +// Mnemonic : VPSHAD +// Supported forms : (3 forms) +// +// * VPSHAD xmm, xmm, xmm [XOP] +// * VPSHAD m128, xmm, xmm [XOP] +// * VPSHAD xmm, m128, xmm [XOP] +// +func (self *Program) VPSHAD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSHAD", 3, Operands { v0, v1, v2 }) + // VPSHAD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x9a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHAD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSHAD xmm, m128, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x9a) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPSHAD") + } + return p +} + +// VPSHAQ performs "Packed Shift Arithmetic Quadwords". +// +// Mnemonic : VPSHAQ +// Supported forms : (3 forms) +// +// * VPSHAQ xmm, xmm, xmm [XOP] +// * VPSHAQ m128, xmm, xmm [XOP] +// * VPSHAQ xmm, m128, xmm [XOP] +// +func (self *Program) VPSHAQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSHAQ", 3, Operands { v0, v1, v2 }) + // VPSHAQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0x9b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x9b) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHAQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x9b) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSHAQ xmm, m128, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x9b) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPSHAQ") + } + return p +} + +// VPSHAW performs "Packed Shift Arithmetic Words". +// +// Mnemonic : VPSHAW +// Supported forms : (3 forms) +// +// * VPSHAW xmm, xmm, xmm [XOP] +// * VPSHAW m128, xmm, xmm [XOP] +// * VPSHAW xmm, m128, xmm [XOP] +// +func (self *Program) VPSHAW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSHAW", 3, Operands { v0, v1, v2 }) + // VPSHAW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0x99) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x99) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHAW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x99) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSHAW xmm, m128, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x99) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPSHAW") + } + return p +} + +// VPSHLB performs "Packed Shift Logical Bytes". +// +// Mnemonic : VPSHLB +// Supported forms : (3 forms) +// +// * VPSHLB xmm, xmm, xmm [XOP] +// * VPSHLB m128, xmm, xmm [XOP] +// * VPSHLB xmm, m128, xmm [XOP] +// +func (self *Program) VPSHLB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSHLB", 3, Operands { v0, v1, v2 }) + // VPSHLB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0x94) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x94) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHLB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x94) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSHLB xmm, m128, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x94) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPSHLB") + } + return p +} + +// VPSHLD performs "Packed Shift Logical Doublewords". +// +// Mnemonic : VPSHLD +// Supported forms : (3 forms) +// +// * VPSHLD xmm, xmm, xmm [XOP] +// * VPSHLD m128, xmm, xmm [XOP] +// * VPSHLD xmm, m128, xmm [XOP] +// +func (self *Program) VPSHLD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSHLD", 3, Operands { v0, v1, v2 }) + // VPSHLD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0x96) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x96) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHLD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x96) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSHLD xmm, m128, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x96) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPSHLD") + } + return p +} + +// VPSHLQ performs "Packed Shift Logical Quadwords". +// +// Mnemonic : VPSHLQ +// Supported forms : (3 forms) +// +// * VPSHLQ xmm, xmm, xmm [XOP] +// * VPSHLQ m128, xmm, xmm [XOP] +// * VPSHLQ xmm, m128, xmm [XOP] +// +func (self *Program) VPSHLQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSHLQ", 3, Operands { v0, v1, v2 }) + // VPSHLQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0x97) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x97) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHLQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x97) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSHLQ xmm, m128, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x97) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPSHLQ") + } + return p +} + +// VPSHLW performs "Packed Shift Logical Words". +// +// Mnemonic : VPSHLW +// Supported forms : (3 forms) +// +// * VPSHLW xmm, xmm, xmm [XOP] +// * VPSHLW m128, xmm, xmm [XOP] +// * VPSHLW xmm, m128, xmm [XOP] +// +func (self *Program) VPSHLW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSHLW", 3, Operands { v0, v1, v2 }) + // VPSHLW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x78 ^ (hlcode(v[0]) << 3)) + m.emit(0x95) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x8f) + m.emit(0xe9 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf8 ^ (hlcode(v[1]) << 3)) + m.emit(0x95) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHLW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x80, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x95) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSHLW xmm, m128, xmm + if isXMM(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_XOP) + p.domain = DomainAMDSpecific + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0x8f, 0b1001, 0x00, hcode(v[2]), addr(v[1]), hlcode(v[0])) + m.emit(0x95) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPSHLW") + } + return p +} + +// VPSHUFB performs "Packed Shuffle Bytes". +// +// Mnemonic : VPSHUFB +// Supported forms : (10 forms) +// +// * VPSHUFB xmm, xmm, xmm [AVX] +// * VPSHUFB m128, xmm, xmm [AVX] +// * VPSHUFB ymm, ymm, ymm [AVX2] +// * VPSHUFB m256, ymm, ymm [AVX2] +// * VPSHUFB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSHUFB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPSHUFB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSHUFB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSHUFB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSHUFB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSHUFB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSHUFB", 3, Operands { v0, v1, v2 }) + // VPSHUFB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x00) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHUFB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x00) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSHUFB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x00) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHUFB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x00) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSHUFB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x00) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHUFB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x00) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSHUFB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x00) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHUFB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x00) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSHUFB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x00) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSHUFB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x00) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPSHUFB") + } + return p +} + +// VPSHUFD performs "Shuffle Packed Doublewords". +// +// Mnemonic : VPSHUFD +// Supported forms : (10 forms) +// +// * VPSHUFD imm8, xmm, xmm [AVX] +// * VPSHUFD imm8, m128, xmm [AVX] +// * VPSHUFD imm8, ymm, ymm [AVX2] +// * VPSHUFD imm8, m256, ymm [AVX2] +// * VPSHUFD imm8, m512/m32bcst, zmm{k}{z} [AVX512F] +// * VPSHUFD imm8, zmm, zmm{k}{z} [AVX512F] +// * VPSHUFD imm8, m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSHUFD imm8, m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSHUFD imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSHUFD imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSHUFD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSHUFD", 3, Operands { v0, v1, v2 }) + // VPSHUFD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[1], 0) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFD imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[1]), 0) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFD imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[1], 0) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFD imm8, m256, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[1]), 0) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFD imm8, m512/m32bcst, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFD imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFD imm8, m128/m32bcst, xmm{k}{z} + if isImm8(v0) && isM128M32bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFD imm8, m256/m32bcst, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFD imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x08) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFD imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSHUFD") + } + return p +} + +// VPSHUFHW performs "Shuffle Packed High Words". +// +// Mnemonic : VPSHUFHW +// Supported forms : (10 forms) +// +// * VPSHUFHW imm8, xmm, xmm [AVX] +// * VPSHUFHW imm8, m128, xmm [AVX] +// * VPSHUFHW imm8, ymm, ymm [AVX2] +// * VPSHUFHW imm8, m256, ymm [AVX2] +// * VPSHUFHW imm8, zmm, zmm{k}{z} [AVX512BW] +// * VPSHUFHW imm8, m512, zmm{k}{z} [AVX512BW] +// * VPSHUFHW imm8, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSHUFHW imm8, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSHUFHW imm8, m128, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSHUFHW imm8, m256, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSHUFHW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSHUFHW", 3, Operands { v0, v1, v2 }) + // VPSHUFHW imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[1], 0) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFHW imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), addr(v[1]), 0) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFHW imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[2]), v[1], 0) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFHW imm8, m256, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(6, hcode(v[2]), addr(v[1]), 0) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFHW imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFHW imm8, m512, zmm{k}{z} + if isImm8(v0) && isM512(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFHW imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x08) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFHW imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFHW imm8, m128, xmm{k}{z} + if isImm8(v0) && isM128(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFHW imm8, m256, ymm{k}{z} + if isImm8(v0) && isM256(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSHUFHW") + } + return p +} + +// VPSHUFLW performs "Shuffle Packed Low Words". +// +// Mnemonic : VPSHUFLW +// Supported forms : (10 forms) +// +// * VPSHUFLW imm8, xmm, xmm [AVX] +// * VPSHUFLW imm8, m128, xmm [AVX] +// * VPSHUFLW imm8, ymm, ymm [AVX2] +// * VPSHUFLW imm8, m256, ymm [AVX2] +// * VPSHUFLW imm8, zmm, zmm{k}{z} [AVX512BW] +// * VPSHUFLW imm8, m512, zmm{k}{z} [AVX512BW] +// * VPSHUFLW imm8, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSHUFLW imm8, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSHUFLW imm8, m128, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSHUFLW imm8, m256, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSHUFLW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSHUFLW", 3, Operands { v0, v1, v2 }) + // VPSHUFLW imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[1], 0) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFLW imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[1]), 0) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFLW imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[2]), v[1], 0) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFLW imm8, m256, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(7, hcode(v[2]), addr(v[1]), 0) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFLW imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFLW imm8, m512, zmm{k}{z} + if isImm8(v0) && isM512(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFLW imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x08) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFLW imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7f) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x70) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFLW imm8, m128, xmm{k}{z} + if isImm8(v0) && isM128(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSHUFLW imm8, m256, ymm{k}{z} + if isImm8(v0) && isM256(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x07, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), 0) + m.emit(0x70) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSHUFLW") + } + return p +} + +// VPSIGNB performs "Packed Sign of Byte Integers". +// +// Mnemonic : VPSIGNB +// Supported forms : (4 forms) +// +// * VPSIGNB xmm, xmm, xmm [AVX] +// * VPSIGNB m128, xmm, xmm [AVX] +// * VPSIGNB ymm, ymm, ymm [AVX2] +// * VPSIGNB m256, ymm, ymm [AVX2] +// +func (self *Program) VPSIGNB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSIGNB", 3, Operands { v0, v1, v2 }) + // VPSIGNB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x08) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSIGNB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x08) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSIGNB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x08) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSIGNB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x08) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPSIGNB") + } + return p +} + +// VPSIGND performs "Packed Sign of Doubleword Integers". +// +// Mnemonic : VPSIGND +// Supported forms : (4 forms) +// +// * VPSIGND xmm, xmm, xmm [AVX] +// * VPSIGND m128, xmm, xmm [AVX] +// * VPSIGND ymm, ymm, ymm [AVX2] +// * VPSIGND m256, ymm, ymm [AVX2] +// +func (self *Program) VPSIGND(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSIGND", 3, Operands { v0, v1, v2 }) + // VPSIGND xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x0a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSIGND m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x0a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSIGND ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x0a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSIGND m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x0a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPSIGND") + } + return p +} + +// VPSIGNW performs "Packed Sign of Word Integers". +// +// Mnemonic : VPSIGNW +// Supported forms : (4 forms) +// +// * VPSIGNW xmm, xmm, xmm [AVX] +// * VPSIGNW m128, xmm, xmm [AVX] +// * VPSIGNW ymm, ymm, ymm [AVX2] +// * VPSIGNW m256, ymm, ymm [AVX2] +// +func (self *Program) VPSIGNW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSIGNW", 3, Operands { v0, v1, v2 }) + // VPSIGNW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x09) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSIGNW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x09) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSIGNW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x09) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSIGNW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x09) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPSIGNW") + } + return p +} + +// VPSLLD performs "Shift Packed Doubleword Data Left Logical". +// +// Mnemonic : VPSLLD +// Supported forms : (18 forms) +// +// * VPSLLD imm8, xmm, xmm [AVX] +// * VPSLLD xmm, xmm, xmm [AVX] +// * VPSLLD m128, xmm, xmm [AVX] +// * VPSLLD imm8, ymm, ymm [AVX2] +// * VPSLLD xmm, ymm, ymm [AVX2] +// * VPSLLD m128, ymm, ymm [AVX2] +// * VPSLLD imm8, m512/m32bcst, zmm{k}{z} [AVX512F] +// * VPSLLD imm8, zmm, zmm{k}{z} [AVX512F] +// * VPSLLD xmm, zmm, zmm{k}{z} [AVX512F] +// * VPSLLD m128, zmm, zmm{k}{z} [AVX512F] +// * VPSLLD imm8, m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSLLD imm8, m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSLLD imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSLLD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSLLD m128, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSLLD imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSLLD xmm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSLLD m128, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSLLD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSLLD", 3, Operands { v0, v1, v2 }) + // VPSLLD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, v[1], hlcode(v[2])) + m.emit(0x72) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf2) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSLLD imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, v[1], hlcode(v[2])) + m.emit(0x72) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLD xmm, ymm, ymm + if isXMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLD m128, ymm, ymm + if isM128(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf2) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSLLD imm8, m512/m32bcst, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(6, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLD imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x72) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLD xmm, zmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xf2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLD m128, zmm, zmm{k}{z} + if isM128(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf2) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSLLD imm8, m128/m32bcst, xmm{k}{z} + if isImm8(v0) && isM128M32bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(6, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLD imm8, m256/m32bcst, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(6, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLD imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x72) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xf2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLD m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf2) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSLLD imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x72) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLD xmm, ymm, ymm{k}{z} + if isEVEXXMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xf2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLD m128, ymm, ymm{k}{z} + if isM128(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf2) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPSLLD") + } + return p +} + +// VPSLLDQ performs "Shift Packed Double Quadword Left Logical". +// +// Mnemonic : VPSLLDQ +// Supported forms : (8 forms) +// +// * VPSLLDQ imm8, xmm, xmm [AVX] +// * VPSLLDQ imm8, ymm, ymm [AVX2] +// * VPSLLDQ imm8, zmm, zmm [AVX512BW] +// * VPSLLDQ imm8, m512, zmm [AVX512BW] +// * VPSLLDQ imm8, xmm, xmm [AVX512BW,AVX512VL] +// * VPSLLDQ imm8, m128, xmm [AVX512BW,AVX512VL] +// * VPSLLDQ imm8, ymm, ymm [AVX512BW,AVX512VL] +// * VPSLLDQ imm8, m256, ymm [AVX512BW,AVX512VL] +// +func (self *Program) VPSLLDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSLLDQ", 3, Operands { v0, v1, v2 }) + // VPSLLDQ imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, v[1], hlcode(v[2])) + m.emit(0x73) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLDQ imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, v[1], hlcode(v[2])) + m.emit(0x73) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLDQ imm8, zmm, zmm + if isImm8(v0) && isZMM(v1) && isZMM(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | 0x40) + m.emit(0x73) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLDQ imm8, m512, zmm + if isImm8(v0) && isM512(v1) && isZMM(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, 0, addr(v[1]), vcode(v[2]), 0, 0, 0) + m.emit(0x73) + m.mrsd(7, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLDQ imm8, xmm, xmm + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | 0x00) + m.emit(0x73) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLDQ imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, 0, addr(v[1]), vcode(v[2]), 0, 0, 0) + m.emit(0x73) + m.mrsd(7, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLDQ imm8, ymm, ymm + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | 0x20) + m.emit(0x73) + m.emit(0xf8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLDQ imm8, m256, ymm + if isImm8(v0) && isM256(v1) && isEVEXYMM(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, 0, addr(v[1]), vcode(v[2]), 0, 0, 0) + m.emit(0x73) + m.mrsd(7, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSLLDQ") + } + return p +} + +// VPSLLQ performs "Shift Packed Quadword Data Left Logical". +// +// Mnemonic : VPSLLQ +// Supported forms : (18 forms) +// +// * VPSLLQ imm8, xmm, xmm [AVX] +// * VPSLLQ xmm, xmm, xmm [AVX] +// * VPSLLQ m128, xmm, xmm [AVX] +// * VPSLLQ imm8, ymm, ymm [AVX2] +// * VPSLLQ xmm, ymm, ymm [AVX2] +// * VPSLLQ m128, ymm, ymm [AVX2] +// * VPSLLQ imm8, m512/m64bcst, zmm{k}{z} [AVX512F] +// * VPSLLQ imm8, zmm, zmm{k}{z} [AVX512F] +// * VPSLLQ xmm, zmm, zmm{k}{z} [AVX512F] +// * VPSLLQ m128, zmm, zmm{k}{z} [AVX512F] +// * VPSLLQ imm8, m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSLLQ imm8, m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSLLQ imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSLLQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSLLQ m128, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSLLQ imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSLLQ xmm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSLLQ m128, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSLLQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSLLQ", 3, Operands { v0, v1, v2 }) + // VPSLLQ imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, v[1], hlcode(v[2])) + m.emit(0x73) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf3) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSLLQ imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, v[1], hlcode(v[2])) + m.emit(0x73) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLQ xmm, ymm, ymm + if isXMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLQ m128, ymm, ymm + if isM128(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf3) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSLLQ imm8, m512/m64bcst, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x73) + m.mrsd(6, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLQ imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x73) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLQ xmm, zmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xf3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLQ m128, zmm, zmm{k}{z} + if isM128(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf3) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSLLQ imm8, m128/m64bcst, xmm{k}{z} + if isImm8(v0) && isM128M64bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x73) + m.mrsd(6, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLQ imm8, m256/m64bcst, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x73) + m.mrsd(6, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLQ imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x73) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xf3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLQ m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf3) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSLLQ imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x73) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLQ xmm, ymm, ymm{k}{z} + if isEVEXXMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xf3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLQ m128, ymm, ymm{k}{z} + if isM128(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf3) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPSLLQ") + } + return p +} + +// VPSLLVD performs "Variable Shift Packed Doubleword Data Left Logical". +// +// Mnemonic : VPSLLVD +// Supported forms : (10 forms) +// +// * VPSLLVD xmm, xmm, xmm [AVX2] +// * VPSLLVD m128, xmm, xmm [AVX2] +// * VPSLLVD ymm, ymm, ymm [AVX2] +// * VPSLLVD m256, ymm, ymm [AVX2] +// * VPSLLVD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPSLLVD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPSLLVD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSLLVD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSLLVD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSLLVD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSLLVD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSLLVD", 3, Operands { v0, v1, v2 }) + // VPSLLVD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLVD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x47) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSLLVD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLVD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x47) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSLLVD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x47) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSLLVD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLVD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x47) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSLLVD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLVD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x47) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPSLLVD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSLLVD") + } + return p +} + +// VPSLLVQ performs "Variable Shift Packed Quadword Data Left Logical". +// +// Mnemonic : VPSLLVQ +// Supported forms : (10 forms) +// +// * VPSLLVQ xmm, xmm, xmm [AVX2] +// * VPSLLVQ m128, xmm, xmm [AVX2] +// * VPSLLVQ ymm, ymm, ymm [AVX2] +// * VPSLLVQ m256, ymm, ymm [AVX2] +// * VPSLLVQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPSLLVQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPSLLVQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSLLVQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSLLVQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSLLVQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSLLVQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSLLVQ", 3, Operands { v0, v1, v2 }) + // VPSLLVQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLVQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x47) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSLLVQ ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLVQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x47) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSLLVQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x47) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSLLVQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLVQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x47) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSLLVQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLVQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x47) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPSLLVQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x47) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSLLVQ") + } + return p +} + +// VPSLLVW performs "Variable Shift Packed Word Data Left Logical". +// +// Mnemonic : VPSLLVW +// Supported forms : (6 forms) +// +// * VPSLLVW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSLLVW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPSLLVW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSLLVW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSLLVW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSLLVW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSLLVW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSLLVW", 3, Operands { v0, v1, v2 }) + // VPSLLVW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x12) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLVW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x12) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSLLVW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x12) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLVW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x12) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSLLVW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x12) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLVW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x12) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPSLLVW") + } + return p +} + +// VPSLLW performs "Shift Packed Word Data Left Logical". +// +// Mnemonic : VPSLLW +// Supported forms : (18 forms) +// +// * VPSLLW imm8, xmm, xmm [AVX] +// * VPSLLW xmm, xmm, xmm [AVX] +// * VPSLLW m128, xmm, xmm [AVX] +// * VPSLLW imm8, ymm, ymm [AVX2] +// * VPSLLW xmm, ymm, ymm [AVX2] +// * VPSLLW m128, ymm, ymm [AVX2] +// * VPSLLW imm8, zmm, zmm{k}{z} [AVX512BW] +// * VPSLLW xmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSLLW m128, zmm, zmm{k}{z} [AVX512BW] +// * VPSLLW imm8, m512, zmm{k}{z} [AVX512BW] +// * VPSLLW imm8, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSLLW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSLLW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSLLW imm8, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSLLW xmm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSLLW m128, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSLLW imm8, m128, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSLLW imm8, m256, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSLLW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSLLW", 3, Operands { v0, v1, v2 }) + // VPSLLW imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, v[1], hlcode(v[2])) + m.emit(0x71) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf1) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSLLW imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, v[1], hlcode(v[2])) + m.emit(0x71) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLW xmm, ymm, ymm + if isXMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLW m128, ymm, ymm + if isM128(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf1) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSLLW imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x71) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLW xmm, zmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xf1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLW m128, zmm, zmm{k}{z} + if isM128(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf1) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSLLW imm8, m512, zmm{k}{z} + if isImm8(v0) && isM512(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x71) + m.mrsd(6, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLW imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x71) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xf1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf1) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSLLW imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x71) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLW xmm, ymm, ymm{k}{z} + if isEVEXXMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xf1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSLLW m128, ymm, ymm{k}{z} + if isM128(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf1) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSLLW imm8, m128, xmm{k}{z} + if isImm8(v0) && isM128(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x71) + m.mrsd(6, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSLLW imm8, m256, ymm{k}{z} + if isImm8(v0) && isM256(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x71) + m.mrsd(6, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSLLW") + } + return p +} + +// VPSRAD performs "Shift Packed Doubleword Data Right Arithmetic". +// +// Mnemonic : VPSRAD +// Supported forms : (18 forms) +// +// * VPSRAD imm8, xmm, xmm [AVX] +// * VPSRAD xmm, xmm, xmm [AVX] +// * VPSRAD m128, xmm, xmm [AVX] +// * VPSRAD imm8, ymm, ymm [AVX2] +// * VPSRAD xmm, ymm, ymm [AVX2] +// * VPSRAD m128, ymm, ymm [AVX2] +// * VPSRAD imm8, m512/m32bcst, zmm{k}{z} [AVX512F] +// * VPSRAD imm8, zmm, zmm{k}{z} [AVX512F] +// * VPSRAD xmm, zmm, zmm{k}{z} [AVX512F] +// * VPSRAD m128, zmm, zmm{k}{z} [AVX512F] +// * VPSRAD imm8, m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRAD imm8, m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRAD imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRAD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRAD m128, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRAD imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRAD xmm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRAD m128, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSRAD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRAD", 3, Operands { v0, v1, v2 }) + // VPSRAD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, v[1], hlcode(v[2])) + m.emit(0x72) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe2) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRAD imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, v[1], hlcode(v[2])) + m.emit(0x72) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAD xmm, ymm, ymm + if isXMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAD m128, ymm, ymm + if isM128(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe2) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRAD imm8, m512/m32bcst, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(4, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAD imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x72) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAD xmm, zmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xe2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAD m128, zmm, zmm{k}{z} + if isM128(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe2) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRAD imm8, m128/m32bcst, xmm{k}{z} + if isImm8(v0) && isM128M32bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(4, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAD imm8, m256/m32bcst, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(4, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAD imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x72) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xe2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAD m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe2) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRAD imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x72) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAD xmm, ymm, ymm{k}{z} + if isEVEXXMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xe2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAD m128, ymm, ymm{k}{z} + if isM128(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe2) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRAD") + } + return p +} + +// VPSRAQ performs "Shift Packed Quadword Data Right Arithmetic". +// +// Mnemonic : VPSRAQ +// Supported forms : (12 forms) +// +// * VPSRAQ imm8, m512/m64bcst, zmm{k}{z} [AVX512F] +// * VPSRAQ imm8, zmm, zmm{k}{z} [AVX512F] +// * VPSRAQ xmm, zmm, zmm{k}{z} [AVX512F] +// * VPSRAQ m128, zmm, zmm{k}{z} [AVX512F] +// * VPSRAQ imm8, m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRAQ imm8, m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRAQ imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRAQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRAQ m128, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRAQ imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRAQ xmm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRAQ m128, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSRAQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRAQ", 3, Operands { v0, v1, v2 }) + // VPSRAQ imm8, m512/m64bcst, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(4, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAQ imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x72) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAQ xmm, zmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xe2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAQ m128, zmm, zmm{k}{z} + if isM128(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe2) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRAQ imm8, m128/m64bcst, xmm{k}{z} + if isImm8(v0) && isM128M64bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(4, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAQ imm8, m256/m64bcst, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(4, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAQ imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x72) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xe2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAQ m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe2) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRAQ imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x72) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAQ xmm, ymm, ymm{k}{z} + if isEVEXXMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xe2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAQ m128, ymm, ymm{k}{z} + if isM128(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe2) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRAQ") + } + return p +} + +// VPSRAVD performs "Variable Shift Packed Doubleword Data Right Arithmetic". +// +// Mnemonic : VPSRAVD +// Supported forms : (10 forms) +// +// * VPSRAVD xmm, xmm, xmm [AVX2] +// * VPSRAVD m128, xmm, xmm [AVX2] +// * VPSRAVD ymm, ymm, ymm [AVX2] +// * VPSRAVD m256, ymm, ymm [AVX2] +// * VPSRAVD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPSRAVD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPSRAVD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRAVD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRAVD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRAVD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSRAVD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRAVD", 3, Operands { v0, v1, v2 }) + // VPSRAVD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x46) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAVD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x46) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRAVD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x46) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAVD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x46) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRAVD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x46) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSRAVD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x46) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAVD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x46) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRAVD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x46) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAVD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x46) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPSRAVD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x46) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRAVD") + } + return p +} + +// VPSRAVQ performs "Variable Shift Packed Quadword Data Right Arithmetic". +// +// Mnemonic : VPSRAVQ +// Supported forms : (6 forms) +// +// * VPSRAVQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPSRAVQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPSRAVQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRAVQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRAVQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRAVQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSRAVQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRAVQ", 3, Operands { v0, v1, v2 }) + // VPSRAVQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x46) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSRAVQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x46) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAVQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x46) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRAVQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x46) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAVQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x46) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPSRAVQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x46) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRAVQ") + } + return p +} + +// VPSRAVW performs "Variable Shift Packed Word Data Right Arithmetic". +// +// Mnemonic : VPSRAVW +// Supported forms : (6 forms) +// +// * VPSRAVW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSRAVW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPSRAVW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSRAVW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSRAVW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSRAVW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSRAVW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRAVW", 3, Operands { v0, v1, v2 }) + // VPSRAVW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x11) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAVW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x11) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSRAVW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x11) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAVW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x11) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRAVW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x11) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAVW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x11) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRAVW") + } + return p +} + +// VPSRAW performs "Shift Packed Word Data Right Arithmetic". +// +// Mnemonic : VPSRAW +// Supported forms : (18 forms) +// +// * VPSRAW imm8, xmm, xmm [AVX] +// * VPSRAW xmm, xmm, xmm [AVX] +// * VPSRAW m128, xmm, xmm [AVX] +// * VPSRAW imm8, ymm, ymm [AVX2] +// * VPSRAW xmm, ymm, ymm [AVX2] +// * VPSRAW m128, ymm, ymm [AVX2] +// * VPSRAW imm8, zmm, zmm{k}{z} [AVX512BW] +// * VPSRAW xmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSRAW m128, zmm, zmm{k}{z} [AVX512BW] +// * VPSRAW imm8, m512, zmm{k}{z} [AVX512BW] +// * VPSRAW imm8, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSRAW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSRAW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSRAW imm8, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSRAW xmm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSRAW m128, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSRAW imm8, m128, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSRAW imm8, m256, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSRAW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRAW", 3, Operands { v0, v1, v2 }) + // VPSRAW imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, v[1], hlcode(v[2])) + m.emit(0x71) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe1) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRAW imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, v[1], hlcode(v[2])) + m.emit(0x71) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAW xmm, ymm, ymm + if isXMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAW m128, ymm, ymm + if isM128(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe1) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRAW imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x71) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAW xmm, zmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xe1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAW m128, zmm, zmm{k}{z} + if isM128(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe1) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRAW imm8, m512, zmm{k}{z} + if isImm8(v0) && isM512(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x71) + m.mrsd(4, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAW imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x71) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xe1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe1) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRAW imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x71) + m.emit(0xe0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAW xmm, ymm, ymm{k}{z} + if isEVEXXMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xe1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRAW m128, ymm, ymm{k}{z} + if isM128(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe1) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRAW imm8, m128, xmm{k}{z} + if isImm8(v0) && isM128(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x71) + m.mrsd(4, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRAW imm8, m256, ymm{k}{z} + if isImm8(v0) && isM256(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x71) + m.mrsd(4, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRAW") + } + return p +} + +// VPSRLD performs "Shift Packed Doubleword Data Right Logical". +// +// Mnemonic : VPSRLD +// Supported forms : (18 forms) +// +// * VPSRLD imm8, xmm, xmm [AVX] +// * VPSRLD xmm, xmm, xmm [AVX] +// * VPSRLD m128, xmm, xmm [AVX] +// * VPSRLD imm8, ymm, ymm [AVX2] +// * VPSRLD xmm, ymm, ymm [AVX2] +// * VPSRLD m128, ymm, ymm [AVX2] +// * VPSRLD imm8, m512/m32bcst, zmm{k}{z} [AVX512F] +// * VPSRLD imm8, zmm, zmm{k}{z} [AVX512F] +// * VPSRLD xmm, zmm, zmm{k}{z} [AVX512F] +// * VPSRLD m128, zmm, zmm{k}{z} [AVX512F] +// * VPSRLD imm8, m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRLD imm8, m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRLD imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRLD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRLD m128, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRLD imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRLD xmm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRLD m128, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSRLD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRLD", 3, Operands { v0, v1, v2 }) + // VPSRLD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, v[1], hlcode(v[2])) + m.emit(0x72) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd2) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRLD imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, v[1], hlcode(v[2])) + m.emit(0x72) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLD xmm, ymm, ymm + if isXMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLD m128, ymm, ymm + if isM128(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd2) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRLD imm8, m512/m32bcst, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(2, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLD imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x72) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLD xmm, zmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xd2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLD m128, zmm, zmm{k}{z} + if isM128(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd2) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRLD imm8, m128/m32bcst, xmm{k}{z} + if isImm8(v0) && isM128M32bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(2, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLD imm8, m256/m32bcst, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x72) + m.mrsd(2, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLD imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x72) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xd2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLD m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd2) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRLD imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x72) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLD xmm, ymm, ymm{k}{z} + if isEVEXXMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xd2) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLD m128, ymm, ymm{k}{z} + if isM128(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd2) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRLD") + } + return p +} + +// VPSRLDQ performs "Shift Packed Double Quadword Right Logical". +// +// Mnemonic : VPSRLDQ +// Supported forms : (8 forms) +// +// * VPSRLDQ imm8, xmm, xmm [AVX] +// * VPSRLDQ imm8, ymm, ymm [AVX2] +// * VPSRLDQ imm8, zmm, zmm [AVX512BW] +// * VPSRLDQ imm8, m512, zmm [AVX512BW] +// * VPSRLDQ imm8, xmm, xmm [AVX512BW,AVX512VL] +// * VPSRLDQ imm8, m128, xmm [AVX512BW,AVX512VL] +// * VPSRLDQ imm8, ymm, ymm [AVX512BW,AVX512VL] +// * VPSRLDQ imm8, m256, ymm [AVX512BW,AVX512VL] +// +func (self *Program) VPSRLDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRLDQ", 3, Operands { v0, v1, v2 }) + // VPSRLDQ imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, v[1], hlcode(v[2])) + m.emit(0x73) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLDQ imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, v[1], hlcode(v[2])) + m.emit(0x73) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLDQ imm8, zmm, zmm + if isImm8(v0) && isZMM(v1) && isZMM(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | 0x40) + m.emit(0x73) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLDQ imm8, m512, zmm + if isImm8(v0) && isM512(v1) && isZMM(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, 0, addr(v[1]), vcode(v[2]), 0, 0, 0) + m.emit(0x73) + m.mrsd(3, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLDQ imm8, xmm, xmm + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | 0x00) + m.emit(0x73) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLDQ imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isEVEXXMM(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, 0, addr(v[1]), vcode(v[2]), 0, 0, 0) + m.emit(0x73) + m.mrsd(3, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLDQ imm8, ymm, ymm + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((0x08 ^ (ecode(v[2]) << 3)) | 0x20) + m.emit(0x73) + m.emit(0xd8 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLDQ imm8, m256, ymm + if isImm8(v0) && isM256(v1) && isEVEXYMM(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, 0, addr(v[1]), vcode(v[2]), 0, 0, 0) + m.emit(0x73) + m.mrsd(3, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRLDQ") + } + return p +} + +// VPSRLQ performs "Shift Packed Quadword Data Right Logical". +// +// Mnemonic : VPSRLQ +// Supported forms : (18 forms) +// +// * VPSRLQ imm8, xmm, xmm [AVX] +// * VPSRLQ xmm, xmm, xmm [AVX] +// * VPSRLQ m128, xmm, xmm [AVX] +// * VPSRLQ imm8, ymm, ymm [AVX2] +// * VPSRLQ xmm, ymm, ymm [AVX2] +// * VPSRLQ m128, ymm, ymm [AVX2] +// * VPSRLQ imm8, m512/m64bcst, zmm{k}{z} [AVX512F] +// * VPSRLQ imm8, zmm, zmm{k}{z} [AVX512F] +// * VPSRLQ xmm, zmm, zmm{k}{z} [AVX512F] +// * VPSRLQ m128, zmm, zmm{k}{z} [AVX512F] +// * VPSRLQ imm8, m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRLQ imm8, m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRLQ imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRLQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRLQ m128, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRLQ imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRLQ xmm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRLQ m128, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSRLQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRLQ", 3, Operands { v0, v1, v2 }) + // VPSRLQ imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, v[1], hlcode(v[2])) + m.emit(0x73) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd3) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRLQ imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, v[1], hlcode(v[2])) + m.emit(0x73) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLQ xmm, ymm, ymm + if isXMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLQ m128, ymm, ymm + if isM128(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd3) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRLQ imm8, m512/m64bcst, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x73) + m.mrsd(2, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLQ imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x73) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLQ xmm, zmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xd3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLQ m128, zmm, zmm{k}{z} + if isM128(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd3) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRLQ imm8, m128/m64bcst, xmm{k}{z} + if isImm8(v0) && isM128M64bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x73) + m.mrsd(2, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLQ imm8, m256/m64bcst, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x73) + m.mrsd(2, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLQ imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x73) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xd3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLQ m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd3) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRLQ imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x73) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLQ xmm, ymm, ymm{k}{z} + if isEVEXXMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xd3) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLQ m128, ymm, ymm{k}{z} + if isM128(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd3) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRLQ") + } + return p +} + +// VPSRLVD performs "Variable Shift Packed Doubleword Data Right Logical". +// +// Mnemonic : VPSRLVD +// Supported forms : (10 forms) +// +// * VPSRLVD xmm, xmm, xmm [AVX2] +// * VPSRLVD m128, xmm, xmm [AVX2] +// * VPSRLVD ymm, ymm, ymm [AVX2] +// * VPSRLVD m256, ymm, ymm [AVX2] +// * VPSRLVD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPSRLVD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPSRLVD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRLVD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRLVD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRLVD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSRLVD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRLVD", 3, Operands { v0, v1, v2 }) + // VPSRLVD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79 ^ (hlcode(v[1]) << 3)) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLVD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x45) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRLVD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLVD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x45) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRLVD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x45) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSRLVD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLVD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x45) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRLVD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLVD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x45) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPSRLVD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRLVD") + } + return p +} + +// VPSRLVQ performs "Variable Shift Packed Quadword Data Right Logical". +// +// Mnemonic : VPSRLVQ +// Supported forms : (10 forms) +// +// * VPSRLVQ xmm, xmm, xmm [AVX2] +// * VPSRLVQ m128, xmm, xmm [AVX2] +// * VPSRLVQ ymm, ymm, ymm [AVX2] +// * VPSRLVQ m256, ymm, ymm [AVX2] +// * VPSRLVQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPSRLVQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPSRLVQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRLVQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSRLVQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSRLVQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSRLVQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRLVQ", 3, Operands { v0, v1, v2 }) + // VPSRLVQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xf9 ^ (hlcode(v[1]) << 3)) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLVQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x81, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x45) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRLVQ ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[2]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLVQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x85, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x45) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRLVQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x45) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSRLVQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLVQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x45) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRLVQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLVQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x45) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPSRLVQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x45) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRLVQ") + } + return p +} + +// VPSRLVW performs "Variable Shift Packed Word Data Right Logical". +// +// Mnemonic : VPSRLVW +// Supported forms : (6 forms) +// +// * VPSRLVW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSRLVW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPSRLVW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSRLVW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSRLVW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSRLVW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSRLVW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRLVW", 3, Operands { v0, v1, v2 }) + // VPSRLVW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x10) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLVW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x10) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSRLVW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x10) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLVW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x10) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRLVW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x10) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLVW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x10) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRLVW") + } + return p +} + +// VPSRLW performs "Shift Packed Word Data Right Logical". +// +// Mnemonic : VPSRLW +// Supported forms : (18 forms) +// +// * VPSRLW imm8, xmm, xmm [AVX] +// * VPSRLW xmm, xmm, xmm [AVX] +// * VPSRLW m128, xmm, xmm [AVX] +// * VPSRLW imm8, ymm, ymm [AVX2] +// * VPSRLW xmm, ymm, ymm [AVX2] +// * VPSRLW m128, ymm, ymm [AVX2] +// * VPSRLW imm8, zmm, zmm{k}{z} [AVX512BW] +// * VPSRLW xmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSRLW m128, zmm, zmm{k}{z} [AVX512BW] +// * VPSRLW imm8, m512, zmm{k}{z} [AVX512BW] +// * VPSRLW imm8, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSRLW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSRLW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSRLW imm8, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSRLW xmm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSRLW m128, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSRLW imm8, m128, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSRLW imm8, m256, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSRLW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSRLW", 3, Operands { v0, v1, v2 }) + // VPSRLW imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, 0, v[1], hlcode(v[2])) + m.emit(0x71) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd1) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRLW imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, 0, v[1], hlcode(v[2])) + m.emit(0x71) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLW xmm, ymm, ymm + if isXMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLW m128, ymm, ymm + if isM128(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd1) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSRLW imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x71) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLW xmm, zmm, zmm{k}{z} + if isEVEXXMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xd1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLW m128, zmm, zmm{k}{z} + if isM128(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd1) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRLW imm8, m512, zmm{k}{z} + if isImm8(v0) && isM512(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x71) + m.mrsd(2, addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLW imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x71) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xd1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd1) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRLW imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ (ehcode(v[1]) << 5)) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x71) + m.emit(0xd0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLW xmm, ymm, ymm{k}{z} + if isEVEXXMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xd1) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSRLW m128, ymm, ymm{k}{z} + if isM128(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd1) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSRLW imm8, m128, xmm{k}{z} + if isImm8(v0) && isM128(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x71) + m.mrsd(2, addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPSRLW imm8, m256, ymm{k}{z} + if isImm8(v0) && isM256(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, 0, addr(v[1]), vcode(v[2]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x71) + m.mrsd(2, addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSRLW") + } + return p +} + +// VPSUBB performs "Subtract Packed Byte Integers". +// +// Mnemonic : VPSUBB +// Supported forms : (10 forms) +// +// * VPSUBB xmm, xmm, xmm [AVX] +// * VPSUBB m128, xmm, xmm [AVX] +// * VPSUBB ymm, ymm, ymm [AVX2] +// * VPSUBB m256, ymm, ymm [AVX2] +// * VPSUBB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSUBB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPSUBB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSUBB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSUBB", 3, Operands { v0, v1, v2 }) + // VPSUBB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xf8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf8) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSUBB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xf8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf8) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSUBB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xf8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf8) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPSUBB") + } + return p +} + +// VPSUBD performs "Subtract Packed Doubleword Integers". +// +// Mnemonic : VPSUBD +// Supported forms : (10 forms) +// +// * VPSUBD xmm, xmm, xmm [AVX] +// * VPSUBD m128, xmm, xmm [AVX] +// * VPSUBD ymm, ymm, ymm [AVX2] +// * VPSUBD m256, ymm, ymm [AVX2] +// * VPSUBD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPSUBD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPSUBD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSUBD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSUBD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSUBD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSUBD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSUBD", 3, Operands { v0, v1, v2 }) + // VPSUBD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xfa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xfa) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xfa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xfa) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xfa) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSUBD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xfa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xfa) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSUBD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xfa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xfa) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPSUBD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xfa) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSUBD") + } + return p +} + +// VPSUBQ performs "Subtract Packed Quadword Integers". +// +// Mnemonic : VPSUBQ +// Supported forms : (10 forms) +// +// * VPSUBQ xmm, xmm, xmm [AVX] +// * VPSUBQ m128, xmm, xmm [AVX] +// * VPSUBQ ymm, ymm, ymm [AVX2] +// * VPSUBQ m256, ymm, ymm [AVX2] +// * VPSUBQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPSUBQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPSUBQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSUBQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPSUBQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPSUBQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPSUBQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSUBQ", 3, Operands { v0, v1, v2 }) + // VPSUBQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xfb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xfb) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBQ ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xfb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xfb) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xfb) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSUBQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xfb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xfb) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSUBQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xfb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xfb) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPSUBQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xfb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPSUBQ") + } + return p +} + +// VPSUBSB performs "Subtract Packed Signed Byte Integers with Signed Saturation". +// +// Mnemonic : VPSUBSB +// Supported forms : (10 forms) +// +// * VPSUBSB xmm, xmm, xmm [AVX] +// * VPSUBSB m128, xmm, xmm [AVX] +// * VPSUBSB ymm, ymm, ymm [AVX2] +// * VPSUBSB m256, ymm, ymm [AVX2] +// * VPSUBSB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSUBSB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPSUBSB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBSB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBSB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBSB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSUBSB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSUBSB", 3, Operands { v0, v1, v2 }) + // VPSUBSB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBSB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBSB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBSB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBSB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xe8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBSB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe8) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSUBSB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xe8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBSB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe8) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSUBSB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xe8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBSB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe8) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPSUBSB") + } + return p +} + +// VPSUBSW performs "Subtract Packed Signed Word Integers with Signed Saturation". +// +// Mnemonic : VPSUBSW +// Supported forms : (10 forms) +// +// * VPSUBSW xmm, xmm, xmm [AVX] +// * VPSUBSW m128, xmm, xmm [AVX] +// * VPSUBSW ymm, ymm, ymm [AVX2] +// * VPSUBSW m256, ymm, ymm [AVX2] +// * VPSUBSW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSUBSW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPSUBSW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBSW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBSW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBSW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSUBSW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSUBSW", 3, Operands { v0, v1, v2 }) + // VPSUBSW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBSW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe9) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBSW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xe9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBSW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xe9) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBSW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xe9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBSW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe9) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSUBSW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xe9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBSW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe9) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSUBSW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xe9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBSW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xe9) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPSUBSW") + } + return p +} + +// VPSUBUSB performs "Subtract Packed Unsigned Byte Integers with Unsigned Saturation". +// +// Mnemonic : VPSUBUSB +// Supported forms : (10 forms) +// +// * VPSUBUSB xmm, xmm, xmm [AVX] +// * VPSUBUSB m128, xmm, xmm [AVX] +// * VPSUBUSB ymm, ymm, ymm [AVX2] +// * VPSUBUSB m256, ymm, ymm [AVX2] +// * VPSUBUSB zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSUBUSB m512, zmm, zmm{k}{z} [AVX512BW] +// * VPSUBUSB xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBUSB m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBUSB ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBUSB m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSUBUSB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSUBUSB", 3, Operands { v0, v1, v2 }) + // VPSUBUSB xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBUSB m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBUSB ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBUSB m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd8) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBUSB zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xd8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBUSB m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd8) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSUBUSB xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xd8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBUSB m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd8) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSUBUSB ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xd8) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBUSB m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd8) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPSUBUSB") + } + return p +} + +// VPSUBUSW performs "Subtract Packed Unsigned Word Integers with Unsigned Saturation". +// +// Mnemonic : VPSUBUSW +// Supported forms : (10 forms) +// +// * VPSUBUSW xmm, xmm, xmm [AVX] +// * VPSUBUSW m128, xmm, xmm [AVX] +// * VPSUBUSW ymm, ymm, ymm [AVX2] +// * VPSUBUSW m256, ymm, ymm [AVX2] +// * VPSUBUSW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSUBUSW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPSUBUSW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBUSW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBUSW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBUSW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSUBUSW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSUBUSW", 3, Operands { v0, v1, v2 }) + // VPSUBUSW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBUSW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd9) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBUSW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xd9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBUSW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xd9) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBUSW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xd9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBUSW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd9) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSUBUSW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xd9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBUSW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd9) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSUBUSW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xd9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBUSW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xd9) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPSUBUSW") + } + return p +} + +// VPSUBW performs "Subtract Packed Word Integers". +// +// Mnemonic : VPSUBW +// Supported forms : (10 forms) +// +// * VPSUBW xmm, xmm, xmm [AVX] +// * VPSUBW m128, xmm, xmm [AVX] +// * VPSUBW ymm, ymm, ymm [AVX2] +// * VPSUBW m256, ymm, ymm [AVX2] +// * VPSUBW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPSUBW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPSUBW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPSUBW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPSUBW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPSUBW", 3, Operands { v0, v1, v2 }) + // VPSUBW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf9) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xf9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xf9) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPSUBW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xf9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf9) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPSUBW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xf9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf9) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPSUBW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xf9) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPSUBW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xf9) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPSUBW") + } + return p +} + +// VPTERNLOGD performs "Bitwise Ternary Logical Operation on Doubleword Values". +// +// Mnemonic : VPTERNLOGD +// Supported forms : (6 forms) +// +// * VPTERNLOGD imm8, m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPTERNLOGD imm8, zmm, zmm, zmm{k}{z} [AVX512F] +// * VPTERNLOGD imm8, m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPTERNLOGD imm8, xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPTERNLOGD imm8, m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPTERNLOGD imm8, ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPTERNLOGD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPTERNLOGD", 4, Operands { v0, v1, v2, v3 }) + // VPTERNLOGD imm8, m512/m32bcst, zmm, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x25) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPTERNLOGD imm8, zmm, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x25) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPTERNLOGD imm8, m128/m32bcst, xmm, xmm{k}{z} + if isImm8(v0) && isM128M32bcst(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x25) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPTERNLOGD imm8, xmm, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x25) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPTERNLOGD imm8, m256/m32bcst, ymm, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x25) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPTERNLOGD imm8, ymm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x25) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPTERNLOGD") + } + return p +} + +// VPTERNLOGQ performs "Bitwise Ternary Logical Operation on Quadword Values". +// +// Mnemonic : VPTERNLOGQ +// Supported forms : (6 forms) +// +// * VPTERNLOGQ imm8, m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPTERNLOGQ imm8, zmm, zmm, zmm{k}{z} [AVX512F] +// * VPTERNLOGQ imm8, m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPTERNLOGQ imm8, xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPTERNLOGQ imm8, m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPTERNLOGQ imm8, ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPTERNLOGQ(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VPTERNLOGQ", 4, Operands { v0, v1, v2, v3 }) + // VPTERNLOGQ imm8, m512/m64bcst, zmm, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x25) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VPTERNLOGQ imm8, zmm, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x25) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPTERNLOGQ imm8, m128/m64bcst, xmm, xmm{k}{z} + if isImm8(v0) && isM128M64bcst(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x25) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VPTERNLOGQ imm8, xmm, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x25) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VPTERNLOGQ imm8, m256/m64bcst, ymm, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x25) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VPTERNLOGQ imm8, ymm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x25) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPTERNLOGQ") + } + return p +} + +// VPTEST performs "Packed Logical Compare". +// +// Mnemonic : VPTEST +// Supported forms : (4 forms) +// +// * VPTEST xmm, xmm [AVX] +// * VPTEST m128, xmm [AVX] +// * VPTEST ymm, ymm [AVX] +// * VPTEST m256, ymm [AVX] +// +func (self *Program) VPTEST(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VPTEST", 2, Operands { v0, v1 }) + // VPTEST xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x17) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPTEST m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x17) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VPTEST ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x17) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VPTEST m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x17) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPTEST") + } + return p +} + +// VPTESTMB performs "Logical AND of Packed Byte Integer Values and Set Mask". +// +// Mnemonic : VPTESTMB +// Supported forms : (6 forms) +// +// * VPTESTMB zmm, zmm, k{k} [AVX512BW] +// * VPTESTMB m512, zmm, k{k} [AVX512BW] +// * VPTESTMB xmm, xmm, k{k} [AVX512BW,AVX512VL] +// * VPTESTMB m128, xmm, k{k} [AVX512BW,AVX512VL] +// * VPTESTMB ymm, ymm, k{k} [AVX512BW,AVX512VL] +// * VPTESTMB m256, ymm, k{k} [AVX512BW,AVX512VL] +// +func (self *Program) VPTESTMB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPTESTMB", 3, Operands { v0, v1, v2 }) + // VPTESTMB zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTMB m512, zmm, k{k} + if isM512(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPTESTMB xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTMB m128, xmm, k{k} + if isM128(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPTESTMB ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTMB m256, ymm, k{k} + if isM256(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPTESTMB") + } + return p +} + +// VPTESTMD performs "Logical AND of Packed Doubleword Integer Values and Set Mask". +// +// Mnemonic : VPTESTMD +// Supported forms : (6 forms) +// +// * VPTESTMD m512/m32bcst, zmm, k{k} [AVX512F] +// * VPTESTMD zmm, zmm, k{k} [AVX512F] +// * VPTESTMD m128/m32bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VPTESTMD xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VPTESTMD m256/m32bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VPTESTMD ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VPTESTMD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPTESTMD", 3, Operands { v0, v1, v2 }) + // VPTESTMD m512/m32bcst, zmm, k{k} + if isM512M32bcst(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x27) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPTESTMD zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x27) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTMD m128/m32bcst, xmm, k{k} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x27) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPTESTMD xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x27) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTMD m256/m32bcst, ymm, k{k} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x27) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPTESTMD ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x27) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPTESTMD") + } + return p +} + +// VPTESTMQ performs "Logical AND of Packed Quadword Integer Values and Set Mask". +// +// Mnemonic : VPTESTMQ +// Supported forms : (6 forms) +// +// * VPTESTMQ m512/m64bcst, zmm, k{k} [AVX512F] +// * VPTESTMQ zmm, zmm, k{k} [AVX512F] +// * VPTESTMQ m128/m64bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VPTESTMQ xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VPTESTMQ m256/m64bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VPTESTMQ ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VPTESTMQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPTESTMQ", 3, Operands { v0, v1, v2 }) + // VPTESTMQ m512/m64bcst, zmm, k{k} + if isM512M64bcst(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x27) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPTESTMQ zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x27) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTMQ m128/m64bcst, xmm, k{k} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x27) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPTESTMQ xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x27) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTMQ m256/m64bcst, ymm, k{k} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x27) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPTESTMQ ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x27) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPTESTMQ") + } + return p +} + +// VPTESTMW performs "Logical AND of Packed Word Integer Values and Set Mask". +// +// Mnemonic : VPTESTMW +// Supported forms : (6 forms) +// +// * VPTESTMW zmm, zmm, k{k} [AVX512BW] +// * VPTESTMW m512, zmm, k{k} [AVX512BW] +// * VPTESTMW xmm, xmm, k{k} [AVX512BW,AVX512VL] +// * VPTESTMW m128, xmm, k{k} [AVX512BW,AVX512VL] +// * VPTESTMW ymm, ymm, k{k} [AVX512BW,AVX512VL] +// * VPTESTMW m256, ymm, k{k} [AVX512BW,AVX512VL] +// +func (self *Program) VPTESTMW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPTESTMW", 3, Operands { v0, v1, v2 }) + // VPTESTMW zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTMW m512, zmm, k{k} + if isM512(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPTESTMW xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTMW m128, xmm, k{k} + if isM128(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPTESTMW ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTMW m256, ymm, k{k} + if isM256(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPTESTMW") + } + return p +} + +// VPTESTNMB performs "Logical NAND of Packed Byte Integer Values and Set Mask". +// +// Mnemonic : VPTESTNMB +// Supported forms : (6 forms) +// +// * VPTESTNMB zmm, zmm, k{k} [AVX512BW,AVX512F] +// * VPTESTNMB m512, zmm, k{k} [AVX512BW,AVX512F] +// * VPTESTNMB xmm, xmm, k{k} [AVX512BW,AVX512VL] +// * VPTESTNMB m128, xmm, k{k} [AVX512BW,AVX512VL] +// * VPTESTNMB ymm, ymm, k{k} [AVX512BW,AVX512VL] +// * VPTESTNMB m256, ymm, k{k} [AVX512BW,AVX512VL] +// +func (self *Program) VPTESTNMB(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPTESTNMB", 3, Operands { v0, v1, v2 }) + // VPTESTNMB zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTNMB m512, zmm, k{k} + if isM512(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPTESTNMB xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTNMB m128, xmm, k{k} + if isM128(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPTESTNMB ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTNMB m256, ymm, k{k} + if isM256(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPTESTNMB") + } + return p +} + +// VPTESTNMD performs "Logical NAND of Packed Doubleword Integer Values and Set Mask". +// +// Mnemonic : VPTESTNMD +// Supported forms : (6 forms) +// +// * VPTESTNMD m512/m32bcst, zmm, k{k} [AVX512F] +// * VPTESTNMD zmm, zmm, k{k} [AVX512F] +// * VPTESTNMD m128/m32bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VPTESTNMD xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VPTESTNMD m256/m32bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VPTESTNMD ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VPTESTNMD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPTESTNMD", 3, Operands { v0, v1, v2 }) + // VPTESTNMD m512/m32bcst, zmm, k{k} + if isM512M32bcst(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x27) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPTESTNMD zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x27) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTNMD m128/m32bcst, xmm, k{k} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x27) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPTESTNMD xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x27) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTNMD m256/m32bcst, ymm, k{k} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x06, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x27) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPTESTNMD ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x27) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPTESTNMD") + } + return p +} + +// VPTESTNMQ performs "Logical NAND of Packed Quadword Integer Values and Set Mask". +// +// Mnemonic : VPTESTNMQ +// Supported forms : (6 forms) +// +// * VPTESTNMQ m512/m64bcst, zmm, k{k} [AVX512F] +// * VPTESTNMQ zmm, zmm, k{k} [AVX512F] +// * VPTESTNMQ m128/m64bcst, xmm, k{k} [AVX512F,AVX512VL] +// * VPTESTNMQ xmm, xmm, k{k} [AVX512F,AVX512VL] +// * VPTESTNMQ m256/m64bcst, ymm, k{k} [AVX512F,AVX512VL] +// * VPTESTNMQ ymm, ymm, k{k} [AVX512F,AVX512VL] +// +func (self *Program) VPTESTNMQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPTESTNMQ", 3, Operands { v0, v1, v2 }) + // VPTESTNMQ m512/m64bcst, zmm, k{k} + if isM512M64bcst(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x86, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x27) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPTESTNMQ zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x27) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTNMQ m128/m64bcst, xmm, k{k} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x86, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x27) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPTESTNMQ xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x27) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTNMQ m256/m64bcst, ymm, k{k} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x86, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, bcode(v[0])) + m.emit(0x27) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPTESTNMQ ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x27) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPTESTNMQ") + } + return p +} + +// VPTESTNMW performs "Logical NAND of Packed Word Integer Values and Set Mask". +// +// Mnemonic : VPTESTNMW +// Supported forms : (6 forms) +// +// * VPTESTNMW zmm, zmm, k{k} [AVX512BW,AVX512F] +// * VPTESTNMW m512, zmm, k{k} [AVX512BW,AVX512F] +// * VPTESTNMW xmm, xmm, k{k} [AVX512BW,AVX512VL] +// * VPTESTNMW m128, xmm, k{k} [AVX512BW,AVX512VL] +// * VPTESTNMW ymm, ymm, k{k} [AVX512BW,AVX512VL] +// * VPTESTNMW m256, ymm, k{k} [AVX512BW,AVX512VL] +// +func (self *Program) VPTESTNMW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPTESTNMW", 3, Operands { v0, v1, v2 }) + // VPTESTNMW zmm, zmm, k{k} + if isZMM(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTNMW m512, zmm, k{k} + if isM512(v0) && isZMM(v1) && isKk(v2) { + self.require(ISA_AVX512F | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x86, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPTESTNMW xmm, xmm, k{k} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTNMW m128, xmm, k{k} + if isM128(v0) && isEVEXXMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x86, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPTESTNMW ymm, ymm, k{k} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfe ^ (hlcode(v[1]) << 3)) + m.emit((0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x26) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPTESTNMW m256, ymm, k{k} + if isM256(v0) && isEVEXYMM(v1) && isKk(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x86, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), 0, 0) + m.emit(0x26) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPTESTNMW") + } + return p +} + +// VPUNPCKHBW performs "Unpack and Interleave High-Order Bytes into Words". +// +// Mnemonic : VPUNPCKHBW +// Supported forms : (10 forms) +// +// * VPUNPCKHBW xmm, xmm, xmm [AVX] +// * VPUNPCKHBW m128, xmm, xmm [AVX] +// * VPUNPCKHBW ymm, ymm, ymm [AVX2] +// * VPUNPCKHBW m256, ymm, ymm [AVX2] +// * VPUNPCKHBW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPUNPCKHBW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPUNPCKHBW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPUNPCKHBW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPUNPCKHBW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPUNPCKHBW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPUNPCKHBW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPUNPCKHBW", 3, Operands { v0, v1, v2 }) + // VPUNPCKHBW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x68) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHBW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x68) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKHBW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x68) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHBW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x68) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKHBW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x68) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHBW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x68) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPUNPCKHBW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x68) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHBW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x68) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPUNPCKHBW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x68) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHBW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x68) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPUNPCKHBW") + } + return p +} + +// VPUNPCKHDQ performs "Unpack and Interleave High-Order Doublewords into Quadwords". +// +// Mnemonic : VPUNPCKHDQ +// Supported forms : (10 forms) +// +// * VPUNPCKHDQ xmm, xmm, xmm [AVX] +// * VPUNPCKHDQ m128, xmm, xmm [AVX] +// * VPUNPCKHDQ ymm, ymm, ymm [AVX2] +// * VPUNPCKHDQ m256, ymm, ymm [AVX2] +// * VPUNPCKHDQ m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPUNPCKHDQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPUNPCKHDQ m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPUNPCKHDQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPUNPCKHDQ m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPUNPCKHDQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPUNPCKHDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPUNPCKHDQ", 3, Operands { v0, v1, v2 }) + // VPUNPCKHDQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x6a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHDQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x6a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKHDQ ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x6a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHDQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x6a) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKHDQ m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x6a) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPUNPCKHDQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x6a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHDQ m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x6a) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPUNPCKHDQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x6a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHDQ m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x6a) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPUNPCKHDQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x6a) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPUNPCKHDQ") + } + return p +} + +// VPUNPCKHQDQ performs "Unpack and Interleave High-Order Quadwords into Double Quadwords". +// +// Mnemonic : VPUNPCKHQDQ +// Supported forms : (10 forms) +// +// * VPUNPCKHQDQ xmm, xmm, xmm [AVX] +// * VPUNPCKHQDQ m128, xmm, xmm [AVX] +// * VPUNPCKHQDQ ymm, ymm, ymm [AVX2] +// * VPUNPCKHQDQ m256, ymm, ymm [AVX2] +// * VPUNPCKHQDQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPUNPCKHQDQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPUNPCKHQDQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPUNPCKHQDQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPUNPCKHQDQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPUNPCKHQDQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPUNPCKHQDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPUNPCKHQDQ", 3, Operands { v0, v1, v2 }) + // VPUNPCKHQDQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x6d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHQDQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x6d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKHQDQ ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x6d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHQDQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x6d) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKHQDQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x6d) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPUNPCKHQDQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x6d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHQDQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x6d) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPUNPCKHQDQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x6d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHQDQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x6d) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPUNPCKHQDQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x6d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPUNPCKHQDQ") + } + return p +} + +// VPUNPCKHWD performs "Unpack and Interleave High-Order Words into Doublewords". +// +// Mnemonic : VPUNPCKHWD +// Supported forms : (10 forms) +// +// * VPUNPCKHWD xmm, xmm, xmm [AVX] +// * VPUNPCKHWD m128, xmm, xmm [AVX] +// * VPUNPCKHWD ymm, ymm, ymm [AVX2] +// * VPUNPCKHWD m256, ymm, ymm [AVX2] +// * VPUNPCKHWD zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPUNPCKHWD m512, zmm, zmm{k}{z} [AVX512BW] +// * VPUNPCKHWD xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPUNPCKHWD m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPUNPCKHWD ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPUNPCKHWD m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPUNPCKHWD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPUNPCKHWD", 3, Operands { v0, v1, v2 }) + // VPUNPCKHWD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x69) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHWD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x69) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKHWD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x69) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHWD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x69) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKHWD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x69) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHWD m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x69) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPUNPCKHWD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x69) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHWD m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x69) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPUNPCKHWD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x69) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKHWD m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x69) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPUNPCKHWD") + } + return p +} + +// VPUNPCKLBW performs "Unpack and Interleave Low-Order Bytes into Words". +// +// Mnemonic : VPUNPCKLBW +// Supported forms : (10 forms) +// +// * VPUNPCKLBW xmm, xmm, xmm [AVX] +// * VPUNPCKLBW m128, xmm, xmm [AVX] +// * VPUNPCKLBW ymm, ymm, ymm [AVX2] +// * VPUNPCKLBW m256, ymm, ymm [AVX2] +// * VPUNPCKLBW zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPUNPCKLBW m512, zmm, zmm{k}{z} [AVX512BW] +// * VPUNPCKLBW xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPUNPCKLBW m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPUNPCKLBW ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPUNPCKLBW m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPUNPCKLBW(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPUNPCKLBW", 3, Operands { v0, v1, v2 }) + // VPUNPCKLBW xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x60) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLBW m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x60) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKLBW ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x60) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLBW m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x60) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKLBW zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x60) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLBW m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x60) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPUNPCKLBW xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x60) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLBW m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x60) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPUNPCKLBW ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x60) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLBW m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x60) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPUNPCKLBW") + } + return p +} + +// VPUNPCKLDQ performs "Unpack and Interleave Low-Order Doublewords into Quadwords". +// +// Mnemonic : VPUNPCKLDQ +// Supported forms : (10 forms) +// +// * VPUNPCKLDQ xmm, xmm, xmm [AVX] +// * VPUNPCKLDQ m128, xmm, xmm [AVX] +// * VPUNPCKLDQ ymm, ymm, ymm [AVX2] +// * VPUNPCKLDQ m256, ymm, ymm [AVX2] +// * VPUNPCKLDQ m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPUNPCKLDQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPUNPCKLDQ m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPUNPCKLDQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPUNPCKLDQ m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPUNPCKLDQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPUNPCKLDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPUNPCKLDQ", 3, Operands { v0, v1, v2 }) + // VPUNPCKLDQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x62) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLDQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x62) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKLDQ ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x62) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLDQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x62) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKLDQ m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x62) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPUNPCKLDQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x62) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLDQ m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x62) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPUNPCKLDQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x62) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLDQ m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x62) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPUNPCKLDQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x62) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPUNPCKLDQ") + } + return p +} + +// VPUNPCKLQDQ performs "Unpack and Interleave Low-Order Quadwords into Double Quadwords". +// +// Mnemonic : VPUNPCKLQDQ +// Supported forms : (10 forms) +// +// * VPUNPCKLQDQ xmm, xmm, xmm [AVX] +// * VPUNPCKLQDQ m128, xmm, xmm [AVX] +// * VPUNPCKLQDQ ymm, ymm, ymm [AVX2] +// * VPUNPCKLQDQ m256, ymm, ymm [AVX2] +// * VPUNPCKLQDQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPUNPCKLQDQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPUNPCKLQDQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPUNPCKLQDQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPUNPCKLQDQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPUNPCKLQDQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPUNPCKLQDQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPUNPCKLQDQ", 3, Operands { v0, v1, v2 }) + // VPUNPCKLQDQ xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x6c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLQDQ m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x6c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKLQDQ ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x6c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLQDQ m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x6c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKLQDQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x6c) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPUNPCKLQDQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x6c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLQDQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x6c) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPUNPCKLQDQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x6c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLQDQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x6c) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPUNPCKLQDQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x6c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPUNPCKLQDQ") + } + return p +} + +// VPUNPCKLWD performs "Unpack and Interleave Low-Order Words into Doublewords". +// +// Mnemonic : VPUNPCKLWD +// Supported forms : (10 forms) +// +// * VPUNPCKLWD xmm, xmm, xmm [AVX] +// * VPUNPCKLWD m128, xmm, xmm [AVX] +// * VPUNPCKLWD ymm, ymm, ymm [AVX2] +// * VPUNPCKLWD m256, ymm, ymm [AVX2] +// * VPUNPCKLWD zmm, zmm, zmm{k}{z} [AVX512BW] +// * VPUNPCKLWD m512, zmm, zmm{k}{z} [AVX512BW] +// * VPUNPCKLWD xmm, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPUNPCKLWD m128, xmm, xmm{k}{z} [AVX512BW,AVX512VL] +// * VPUNPCKLWD ymm, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// * VPUNPCKLWD m256, ymm, ymm{k}{z} [AVX512BW,AVX512VL] +// +func (self *Program) VPUNPCKLWD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPUNPCKLWD", 3, Operands { v0, v1, v2 }) + // VPUNPCKLWD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x61) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLWD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x61) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKLWD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x61) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLWD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x61) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPUNPCKLWD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x61) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLWD m512, zmm, zmm{k}{z} + if isM512(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x61) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPUNPCKLWD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x61) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLWD m128, xmm, xmm{k}{z} + if isM128(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x61) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPUNPCKLWD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x61) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPUNPCKLWD m256, ymm, ymm{k}{z} + if isM256(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512BW) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x61) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + if p.len == 0 { + panic("invalid operands for VPUNPCKLWD") + } + return p +} + +// VPXOR performs "Packed Bitwise Logical Exclusive OR". +// +// Mnemonic : VPXOR +// Supported forms : (4 forms) +// +// * VPXOR xmm, xmm, xmm [AVX] +// * VPXOR m128, xmm, xmm [AVX] +// * VPXOR ymm, ymm, ymm [AVX2] +// * VPXOR m256, ymm, ymm [AVX2] +// +func (self *Program) VPXOR(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPXOR", 3, Operands { v0, v1, v2 }) + // VPXOR xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xef) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPXOR m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xef) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VPXOR ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0xef) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPXOR m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX2) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0xef) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VPXOR") + } + return p +} + +// VPXORD performs "Bitwise Logical Exclusive OR of Packed Doubleword Integers". +// +// Mnemonic : VPXORD +// Supported forms : (6 forms) +// +// * VPXORD m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VPXORD zmm, zmm, zmm{k}{z} [AVX512F] +// * VPXORD m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPXORD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPXORD m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPXORD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPXORD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPXORD", 3, Operands { v0, v1, v2 }) + // VPXORD m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xef) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPXORD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xef) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPXORD m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xef) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPXORD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xef) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPXORD m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xef) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPXORD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xef) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPXORD") + } + return p +} + +// VPXORQ performs "Bitwise Logical Exclusive OR of Packed Quadword Integers". +// +// Mnemonic : VPXORQ +// Supported forms : (6 forms) +// +// * VPXORQ m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VPXORQ zmm, zmm, zmm{k}{z} [AVX512F] +// * VPXORQ m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPXORQ xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VPXORQ m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VPXORQ ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VPXORQ(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VPXORQ", 3, Operands { v0, v1, v2 }) + // VPXORQ m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xef) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VPXORQ zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xef) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPXORQ m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xef) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VPXORQ xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0xef) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VPXORQ m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0xef) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VPXORQ ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0xef) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VPXORQ") + } + return p +} + +// VRANGEPD performs "Range Restriction Calculation For Packed Pairs of Double-Precision Floating-Point Values". +// +// Mnemonic : VRANGEPD +// Supported forms : (7 forms) +// +// * VRANGEPD imm8, m512/m64bcst, zmm, zmm{k}{z} [AVX512DQ] +// * VRANGEPD imm8, {sae}, zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VRANGEPD imm8, zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VRANGEPD imm8, m128/m64bcst, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VRANGEPD imm8, xmm, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VRANGEPD imm8, m256/m64bcst, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VRANGEPD imm8, ymm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VRANGEPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRANGEPD", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VRANGEPD", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VRANGEPD takes 4 or 5 operands") + } + // VRANGEPD imm8, m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM512M64bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x50) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGEPD imm8, {sae}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isZMM(v2) && isZMM(v3) && isZMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0xfd ^ (hlcode(v[3]) << 3)) + m.emit((zcode(v[4]) << 7) | (0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0x50) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGEPD imm8, zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x50) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGEPD imm8, m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM128M64bcst(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x50) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGEPD imm8, xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x50) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGEPD imm8, m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM256M64bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x50) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGEPD imm8, ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x50) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRANGEPD") + } + return p +} + +// VRANGEPS performs "Range Restriction Calculation For Packed Pairs of Single-Precision Floating-Point Values". +// +// Mnemonic : VRANGEPS +// Supported forms : (7 forms) +// +// * VRANGEPS imm8, m512/m32bcst, zmm, zmm{k}{z} [AVX512DQ] +// * VRANGEPS imm8, {sae}, zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VRANGEPS imm8, zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VRANGEPS imm8, m128/m32bcst, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VRANGEPS imm8, xmm, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VRANGEPS imm8, m256/m32bcst, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VRANGEPS imm8, ymm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VRANGEPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRANGEPS", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VRANGEPS", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VRANGEPS takes 4 or 5 operands") + } + // VRANGEPS imm8, m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM512M32bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x50) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGEPS imm8, {sae}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isZMM(v2) && isZMM(v3) && isZMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0x7d ^ (hlcode(v[3]) << 3)) + m.emit((zcode(v[4]) << 7) | (0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0x50) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGEPS imm8, zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x50) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGEPS imm8, m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM128M32bcst(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x50) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGEPS imm8, xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x50) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGEPS imm8, m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM256M32bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x50) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGEPS imm8, ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x50) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRANGEPS") + } + return p +} + +// VRANGESD performs "Range Restriction Calculation For a pair of Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VRANGESD +// Supported forms : (3 forms) +// +// * VRANGESD imm8, m64, xmm, xmm{k}{z} [AVX512DQ] +// * VRANGESD imm8, {sae}, xmm, xmm, xmm{k}{z} [AVX512DQ] +// * VRANGESD imm8, xmm, xmm, xmm{k}{z} [AVX512DQ] +// +func (self *Program) VRANGESD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRANGESD", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VRANGESD", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VRANGESD takes 4 or 5 operands") + } + // VRANGESD imm8, m64, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM64(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x51) + m.mrsd(lcode(v[3]), addr(v[1]), 8) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGESD imm8, {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) && isXMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0xfd ^ (hlcode(v[3]) << 3)) + m.emit((zcode(v[4]) << 7) | (0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0x51) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGESD imm8, xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x51) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRANGESD") + } + return p +} + +// VRANGESS performs "Range Restriction Calculation For a pair of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VRANGESS +// Supported forms : (3 forms) +// +// * VRANGESS imm8, m32, xmm, xmm{k}{z} [AVX512DQ] +// * VRANGESS imm8, {sae}, xmm, xmm, xmm{k}{z} [AVX512DQ] +// * VRANGESS imm8, xmm, xmm, xmm{k}{z} [AVX512DQ] +// +func (self *Program) VRANGESS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRANGESS", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VRANGESS", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VRANGESS takes 4 or 5 operands") + } + // VRANGESS imm8, m32, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM32(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x51) + m.mrsd(lcode(v[3]), addr(v[1]), 4) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGESS imm8, {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) && isXMMkz(vv[0]) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0x7d ^ (hlcode(v[3]) << 3)) + m.emit((zcode(v[4]) << 7) | (0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0x51) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VRANGESS imm8, xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x51) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRANGESS") + } + return p +} + +// VRCP14PD performs "Compute Approximate Reciprocals of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VRCP14PD +// Supported forms : (6 forms) +// +// * VRCP14PD m512/m64bcst, zmm{k}{z} [AVX512F] +// * VRCP14PD zmm, zmm{k}{z} [AVX512F] +// * VRCP14PD m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VRCP14PD m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VRCP14PD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VRCP14PD ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VRCP14PD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VRCP14PD", 2, Operands { v0, v1 }) + // VRCP14PD m512/m64bcst, zmm{k}{z} + if isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x4c) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VRCP14PD zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VRCP14PD m128/m64bcst, xmm{k}{z} + if isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x4c) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VRCP14PD m256/m64bcst, ymm{k}{z} + if isM256M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x4c) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VRCP14PD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VRCP14PD ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRCP14PD") + } + return p +} + +// VRCP14PS performs "Compute Approximate Reciprocals of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VRCP14PS +// Supported forms : (6 forms) +// +// * VRCP14PS m512/m32bcst, zmm{k}{z} [AVX512F] +// * VRCP14PS zmm, zmm{k}{z} [AVX512F] +// * VRCP14PS m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VRCP14PS m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VRCP14PS xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VRCP14PS ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VRCP14PS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VRCP14PS", 2, Operands { v0, v1 }) + // VRCP14PS m512/m32bcst, zmm{k}{z} + if isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x4c) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VRCP14PS zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VRCP14PS m128/m32bcst, xmm{k}{z} + if isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x4c) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VRCP14PS m256/m32bcst, ymm{k}{z} + if isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x4c) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VRCP14PS xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VRCP14PS ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x4c) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRCP14PS") + } + return p +} + +// VRCP14SD performs "Compute Approximate Reciprocal of a Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : VRCP14SD +// Supported forms : (2 forms) +// +// * VRCP14SD xmm, xmm, xmm{k}{z} [AVX512F] +// * VRCP14SD m64, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VRCP14SD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VRCP14SD", 3, Operands { v0, v1, v2 }) + // VRCP14SD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x4d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VRCP14SD m64, xmm, xmm{k}{z} + if isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x4d) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VRCP14SD") + } + return p +} + +// VRCP14SS performs "Compute Approximate Reciprocal of a Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : VRCP14SS +// Supported forms : (2 forms) +// +// * VRCP14SS xmm, xmm, xmm{k}{z} [AVX512F] +// * VRCP14SS m32, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VRCP14SS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VRCP14SS", 3, Operands { v0, v1, v2 }) + // VRCP14SS xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x4d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VRCP14SS m32, xmm, xmm{k}{z} + if isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x4d) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VRCP14SS") + } + return p +} + +// VRCP28PD performs "Approximation to the Reciprocal of Packed Double-Precision Floating-Point Values with Less Than 2^-28 Relative Error". +// +// Mnemonic : VRCP28PD +// Supported forms : (3 forms) +// +// * VRCP28PD m512/m64bcst, zmm{k}{z} [AVX512ER] +// * VRCP28PD {sae}, zmm, zmm{k}{z} [AVX512ER] +// * VRCP28PD zmm, zmm{k}{z} [AVX512ER] +// +func (self *Program) VRCP28PD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRCP28PD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VRCP28PD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VRCP28PD takes 2 or 3 operands") + } + // VRCP28PD m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xca) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VRCP28PD {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0xca) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VRCP28PD zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0xca) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRCP28PD") + } + return p +} + +// VRCP28PS performs "Approximation to the Reciprocal of Packed Single-Precision Floating-Point Values with Less Than 2^-28 Relative Error". +// +// Mnemonic : VRCP28PS +// Supported forms : (3 forms) +// +// * VRCP28PS m512/m32bcst, zmm{k}{z} [AVX512ER] +// * VRCP28PS {sae}, zmm, zmm{k}{z} [AVX512ER] +// * VRCP28PS zmm, zmm{k}{z} [AVX512ER] +// +func (self *Program) VRCP28PS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRCP28PS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VRCP28PS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VRCP28PS takes 2 or 3 operands") + } + // VRCP28PS m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xca) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VRCP28PS {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0xca) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VRCP28PS zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0xca) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRCP28PS") + } + return p +} + +// VRCP28SD performs "Approximation to the Reciprocal of a Scalar Double-Precision Floating-Point Value with Less Than 2^-28 Relative Error". +// +// Mnemonic : VRCP28SD +// Supported forms : (3 forms) +// +// * VRCP28SD m64, xmm, xmm{k}{z} [AVX512ER] +// * VRCP28SD {sae}, xmm, xmm, xmm{k}{z} [AVX512ER] +// * VRCP28SD xmm, xmm, xmm{k}{z} [AVX512ER] +// +func (self *Program) VRCP28SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRCP28SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VRCP28SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VRCP28SD takes 3 or 4 operands") + } + // VRCP28SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xcb) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VRCP28SD {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xcb) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VRCP28SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xcb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRCP28SD") + } + return p +} + +// VRCP28SS performs "Approximation to the Reciprocal of a Scalar Single-Precision Floating-Point Value with Less Than 2^-28 Relative Error". +// +// Mnemonic : VRCP28SS +// Supported forms : (3 forms) +// +// * VRCP28SS m32, xmm, xmm{k}{z} [AVX512ER] +// * VRCP28SS {sae}, xmm, xmm, xmm{k}{z} [AVX512ER] +// * VRCP28SS xmm, xmm, xmm{k}{z} [AVX512ER] +// +func (self *Program) VRCP28SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRCP28SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VRCP28SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VRCP28SS takes 3 or 4 operands") + } + // VRCP28SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xcb) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VRCP28SS {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xcb) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VRCP28SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xcb) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRCP28SS") + } + return p +} + +// VRCPPS performs "Compute Approximate Reciprocals of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VRCPPS +// Supported forms : (4 forms) +// +// * VRCPPS xmm, xmm [AVX] +// * VRCPPS m128, xmm [AVX] +// * VRCPPS ymm, ymm [AVX] +// * VRCPPS m256, ymm [AVX] +// +func (self *Program) VRCPPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VRCPPS", 2, Operands { v0, v1 }) + // VRCPPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), v[0], 0) + m.emit(0x53) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VRCPPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), addr(v[0]), 0) + m.emit(0x53) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VRCPPS ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), v[0], 0) + m.emit(0x53) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VRCPPS m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), addr(v[0]), 0) + m.emit(0x53) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VRCPPS") + } + return p +} + +// VRCPSS performs "Compute Approximate Reciprocal of Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VRCPSS +// Supported forms : (2 forms) +// +// * VRCPSS xmm, xmm, xmm [AVX] +// * VRCPSS m32, xmm, xmm [AVX] +// +func (self *Program) VRCPSS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VRCPSS", 3, Operands { v0, v1, v2 }) + // VRCPSS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x53) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VRCPSS m32, xmm, xmm + if isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x53) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VRCPSS") + } + return p +} + +// VREDUCEPD performs "Perform Reduction Transformation on Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VREDUCEPD +// Supported forms : (6 forms) +// +// * VREDUCEPD imm8, m512/m64bcst, zmm{k}{z} [AVX512DQ] +// * VREDUCEPD imm8, zmm, zmm{k}{z} [AVX512DQ] +// * VREDUCEPD imm8, m128/m64bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VREDUCEPD imm8, m256/m64bcst, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VREDUCEPD imm8, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VREDUCEPD imm8, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VREDUCEPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VREDUCEPD", 3, Operands { v0, v1, v2 }) + // VREDUCEPD imm8, m512/m64bcst, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VREDUCEPD imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VREDUCEPD imm8, m128/m64bcst, xmm{k}{z} + if isImm8(v0) && isM128M64bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VREDUCEPD imm8, m256/m64bcst, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VREDUCEPD imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x08) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VREDUCEPD imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VREDUCEPD") + } + return p +} + +// VREDUCEPS performs "Perform Reduction Transformation on Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VREDUCEPS +// Supported forms : (6 forms) +// +// * VREDUCEPS imm8, m512/m32bcst, zmm{k}{z} [AVX512DQ] +// * VREDUCEPS imm8, zmm, zmm{k}{z} [AVX512DQ] +// * VREDUCEPS imm8, m128/m32bcst, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VREDUCEPS imm8, m256/m32bcst, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VREDUCEPS imm8, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VREDUCEPS imm8, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VREDUCEPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VREDUCEPS", 3, Operands { v0, v1, v2 }) + // VREDUCEPS imm8, m512/m32bcst, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VREDUCEPS imm8, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VREDUCEPS imm8, m128/m32bcst, xmm{k}{z} + if isImm8(v0) && isM128M32bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VREDUCEPS imm8, m256/m32bcst, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x56) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VREDUCEPS imm8, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x08) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VREDUCEPS imm8, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x56) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VREDUCEPS") + } + return p +} + +// VREDUCESD performs "Perform Reduction Transformation on a Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : VREDUCESD +// Supported forms : (2 forms) +// +// * VREDUCESD imm8, xmm, xmm, xmm{k}{z} [AVX512DQ] +// * VREDUCESD imm8, m64, xmm, xmm{k}{z} [AVX512DQ] +// +func (self *Program) VREDUCESD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VREDUCESD", 4, Operands { v0, v1, v2, v3 }) + // VREDUCESD imm8, xmm, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x57) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VREDUCESD imm8, m64, xmm, xmm{k}{z} + if isImm8(v0) && isM64(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x57) + m.mrsd(lcode(v[3]), addr(v[1]), 8) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VREDUCESD") + } + return p +} + +// VREDUCESS performs "Perform Reduction Transformation on a Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : VREDUCESS +// Supported forms : (2 forms) +// +// * VREDUCESS imm8, xmm, xmm, xmm{k}{z} [AVX512DQ] +// * VREDUCESS imm8, m32, xmm, xmm{k}{z} [AVX512DQ] +// +func (self *Program) VREDUCESS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VREDUCESS", 4, Operands { v0, v1, v2, v3 }) + // VREDUCESS imm8, xmm, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0x57) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VREDUCESS imm8, m32, xmm, xmm{k}{z} + if isImm8(v0) && isM32(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x57) + m.mrsd(lcode(v[3]), addr(v[1]), 4) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VREDUCESS") + } + return p +} + +// VRNDSCALEPD performs "Round Packed Double-Precision Floating-Point Values To Include A Given Number Of Fraction Bits". +// +// Mnemonic : VRNDSCALEPD +// Supported forms : (7 forms) +// +// * VRNDSCALEPD imm8, m512/m64bcst, zmm{k}{z} [AVX512F] +// * VRNDSCALEPD imm8, {sae}, zmm, zmm{k}{z} [AVX512F] +// * VRNDSCALEPD imm8, zmm, zmm{k}{z} [AVX512F] +// * VRNDSCALEPD imm8, m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VRNDSCALEPD imm8, m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VRNDSCALEPD imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VRNDSCALEPD imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VRNDSCALEPD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRNDSCALEPD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VRNDSCALEPD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VRNDSCALEPD takes 3 or 4 operands") + } + // VRNDSCALEPD imm8, m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM512M64bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x09) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALEPD imm8, {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[3]) << 7) | kcode(v[3]) | 0x18) + m.emit(0x09) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALEPD imm8, zmm, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x09) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALEPD imm8, m128/m64bcst, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM128M64bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x09) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALEPD imm8, m256/m64bcst, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM256M64bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x09) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALEPD imm8, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x08) + m.emit(0x09) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALEPD imm8, ymm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x09) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRNDSCALEPD") + } + return p +} + +// VRNDSCALEPS performs "Round Packed Single-Precision Floating-Point Values To Include A Given Number Of Fraction Bits". +// +// Mnemonic : VRNDSCALEPS +// Supported forms : (7 forms) +// +// * VRNDSCALEPS imm8, m512/m32bcst, zmm{k}{z} [AVX512F] +// * VRNDSCALEPS imm8, {sae}, zmm, zmm{k}{z} [AVX512F] +// * VRNDSCALEPS imm8, zmm, zmm{k}{z} [AVX512F] +// * VRNDSCALEPS imm8, m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VRNDSCALEPS imm8, m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VRNDSCALEPS imm8, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VRNDSCALEPS imm8, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VRNDSCALEPS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRNDSCALEPS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VRNDSCALEPS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VRNDSCALEPS takes 3 or 4 operands") + } + // VRNDSCALEPS imm8, m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM512M32bcst(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x08) + m.mrsd(lcode(v[2]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALEPS imm8, {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[3]) << 7) | kcode(v[3]) | 0x18) + m.emit(0x08) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALEPS imm8, zmm, zmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x48) + m.emit(0x08) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALEPS imm8, m128/m32bcst, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM128M32bcst(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x08) + m.mrsd(lcode(v[2]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALEPS imm8, m256/m32bcst, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM256M32bcst(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[2]), addr(v[1]), 0, kcode(v[2]), zcode(v[2]), bcode(v[1])) + m.emit(0x08) + m.mrsd(lcode(v[2]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALEPS imm8, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x08) + m.emit(0x08) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALEPS imm8, ymm, ymm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x28) + m.emit(0x08) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRNDSCALEPS") + } + return p +} + +// VRNDSCALESD performs "Round Scalar Double-Precision Floating-Point Value To Include A Given Number Of Fraction Bits". +// +// Mnemonic : VRNDSCALESD +// Supported forms : (3 forms) +// +// * VRNDSCALESD imm8, m64, xmm, xmm{k}{z} [AVX512F] +// * VRNDSCALESD imm8, {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VRNDSCALESD imm8, xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VRNDSCALESD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRNDSCALESD", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VRNDSCALESD", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VRNDSCALESD takes 4 or 5 operands") + } + // VRNDSCALESD imm8, m64, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM64(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x0b) + m.mrsd(lcode(v[3]), addr(v[1]), 8) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALESD imm8, {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0xfd ^ (hlcode(v[3]) << 3)) + m.emit((zcode(v[4]) << 7) | (0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALESD imm8, xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRNDSCALESD") + } + return p +} + +// VRNDSCALESS performs "Round Scalar Single-Precision Floating-Point Value To Include A Given Number Of Fraction Bits". +// +// Mnemonic : VRNDSCALESS +// Supported forms : (3 forms) +// +// * VRNDSCALESS imm8, m32, xmm, xmm{k}{z} [AVX512F] +// * VRNDSCALESS imm8, {sae}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VRNDSCALESS imm8, xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VRNDSCALESS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRNDSCALESS", 4, Operands { v0, v1, v2, v3 }) + case 1 : p = self.alloc("VRNDSCALESS", 5, Operands { v0, v1, v2, v3, vv[0] }) + default : panic("instruction VRNDSCALESS takes 4 or 5 operands") + } + // VRNDSCALESS imm8, m32, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isM32(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), 0) + m.emit(0x0a) + m.mrsd(lcode(v[3]), addr(v[1]), 4) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALESS imm8, {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isImm8(v0) && isSAE(v1) && isEVEXXMM(v2) && isEVEXXMM(v3) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[4]) << 7) | (ehcode(v[2]) << 5) | (ecode(v[4]) << 4))) + m.emit(0x7d ^ (hlcode(v[3]) << 3)) + m.emit((zcode(v[4]) << 7) | (0x08 ^ (ecode(v[3]) << 3)) | kcode(v[4]) | 0x10) + m.emit(0x0a) + m.emit(0xc0 | lcode(v[4]) << 3 | lcode(v[2])) + m.imm1(toImmAny(v[0])) + }) + } + // VRNDSCALESS imm8, xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x0a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRNDSCALESS") + } + return p +} + +// VROUNDPD performs "Round Packed Double Precision Floating-Point Values". +// +// Mnemonic : VROUNDPD +// Supported forms : (4 forms) +// +// * VROUNDPD imm8, xmm, xmm [AVX] +// * VROUNDPD imm8, m128, xmm [AVX] +// * VROUNDPD imm8, ymm, ymm [AVX] +// * VROUNDPD imm8, m256, ymm [AVX] +// +func (self *Program) VROUNDPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VROUNDPD", 3, Operands { v0, v1, v2 }) + // VROUNDPD imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79) + m.emit(0x09) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VROUNDPD imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[2]), addr(v[1]), 0) + m.emit(0x09) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VROUNDPD imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d) + m.emit(0x09) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VROUNDPD imm8, m256, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[2]), addr(v[1]), 0) + m.emit(0x09) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VROUNDPD") + } + return p +} + +// VROUNDPS performs "Round Packed Single Precision Floating-Point Values". +// +// Mnemonic : VROUNDPS +// Supported forms : (4 forms) +// +// * VROUNDPS imm8, xmm, xmm [AVX] +// * VROUNDPS imm8, m128, xmm [AVX] +// * VROUNDPS imm8, ymm, ymm [AVX] +// * VROUNDPS imm8, m256, ymm [AVX] +// +func (self *Program) VROUNDPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VROUNDPS", 3, Operands { v0, v1, v2 }) + // VROUNDPS imm8, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79) + m.emit(0x08) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VROUNDPS imm8, m128, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[2]), addr(v[1]), 0) + m.emit(0x08) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VROUNDPS imm8, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[2]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x7d) + m.emit(0x08) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VROUNDPS imm8, m256, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x05, hcode(v[2]), addr(v[1]), 0) + m.emit(0x08) + m.mrsd(lcode(v[2]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VROUNDPS") + } + return p +} + +// VROUNDSD performs "Round Scalar Double Precision Floating-Point Values". +// +// Mnemonic : VROUNDSD +// Supported forms : (2 forms) +// +// * VROUNDSD imm8, xmm, xmm, xmm [AVX] +// * VROUNDSD imm8, m64, xmm, xmm [AVX] +// +func (self *Program) VROUNDSD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VROUNDSD", 4, Operands { v0, v1, v2, v3 }) + // VROUNDSD imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x0b) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VROUNDSD imm8, m64, xmm, xmm + if isImm8(v0) && isM64(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x0b) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VROUNDSD") + } + return p +} + +// VROUNDSS performs "Round Scalar Single Precision Floating-Point Values". +// +// Mnemonic : VROUNDSS +// Supported forms : (2 forms) +// +// * VROUNDSS imm8, xmm, xmm, xmm [AVX] +// * VROUNDSS imm8, m32, xmm, xmm [AVX] +// +func (self *Program) VROUNDSS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VROUNDSS", 4, Operands { v0, v1, v2, v3 }) + // VROUNDSS imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe3 ^ (hcode(v[3]) << 7) ^ (hcode(v[1]) << 5)) + m.emit(0x79 ^ (hlcode(v[2]) << 3)) + m.emit(0x0a) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VROUNDSS imm8, m32, xmm, xmm + if isImm8(v0) && isM32(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b11, 0x01, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0x0a) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VROUNDSS") + } + return p +} + +// VRSQRT14PD performs "Compute Approximate Reciprocals of Square Roots of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VRSQRT14PD +// Supported forms : (6 forms) +// +// * VRSQRT14PD m512/m64bcst, zmm{k}{z} [AVX512F] +// * VRSQRT14PD zmm, zmm{k}{z} [AVX512F] +// * VRSQRT14PD m128/m64bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VRSQRT14PD m256/m64bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VRSQRT14PD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VRSQRT14PD ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VRSQRT14PD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VRSQRT14PD", 2, Operands { v0, v1 }) + // VRSQRT14PD m512/m64bcst, zmm{k}{z} + if isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x4e) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VRSQRT14PD zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x4e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VRSQRT14PD m128/m64bcst, xmm{k}{z} + if isM128M64bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x4e) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VRSQRT14PD m256/m64bcst, ymm{k}{z} + if isM256M64bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x4e) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VRSQRT14PD xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x4e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VRSQRT14PD ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x4e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRSQRT14PD") + } + return p +} + +// VRSQRT14PS performs "Compute Approximate Reciprocals of Square Roots of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VRSQRT14PS +// Supported forms : (6 forms) +// +// * VRSQRT14PS m512/m32bcst, zmm{k}{z} [AVX512F] +// * VRSQRT14PS zmm, zmm{k}{z} [AVX512F] +// * VRSQRT14PS m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VRSQRT14PS m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VRSQRT14PS xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VRSQRT14PS ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VRSQRT14PS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VRSQRT14PS", 2, Operands { v0, v1 }) + // VRSQRT14PS m512/m32bcst, zmm{k}{z} + if isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x4e) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VRSQRT14PS zmm, zmm{k}{z} + if isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x4e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VRSQRT14PS m128/m32bcst, xmm{k}{z} + if isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x4e) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VRSQRT14PS m256/m32bcst, ymm{k}{z} + if isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x4e) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VRSQRT14PS xmm, xmm{k}{z} + if isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x4e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VRSQRT14PS ymm, ymm{k}{z} + if isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x4e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRSQRT14PS") + } + return p +} + +// VRSQRT14SD performs "Compute Approximate Reciprocal of a Square Root of a Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : VRSQRT14SD +// Supported forms : (2 forms) +// +// * VRSQRT14SD xmm, xmm, xmm{k}{z} [AVX512F] +// * VRSQRT14SD m64, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VRSQRT14SD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VRSQRT14SD", 3, Operands { v0, v1, v2 }) + // VRSQRT14SD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x4f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VRSQRT14SD m64, xmm, xmm{k}{z} + if isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x4f) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VRSQRT14SD") + } + return p +} + +// VRSQRT14SS performs "Compute Approximate Reciprocal of a Square Root of a Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : VRSQRT14SS +// Supported forms : (2 forms) +// +// * VRSQRT14SS xmm, xmm, xmm{k}{z} [AVX512F] +// * VRSQRT14SS m32, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VRSQRT14SS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VRSQRT14SS", 3, Operands { v0, v1, v2 }) + // VRSQRT14SS xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x4f) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VRSQRT14SS m32, xmm, xmm{k}{z} + if isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x4f) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VRSQRT14SS") + } + return p +} + +// VRSQRT28PD performs "Approximation to the Reciprocal Square Root of Packed Double-Precision Floating-Point Values with Less Than 2^-28 Relative Error". +// +// Mnemonic : VRSQRT28PD +// Supported forms : (3 forms) +// +// * VRSQRT28PD m512/m64bcst, zmm{k}{z} [AVX512ER] +// * VRSQRT28PD {sae}, zmm, zmm{k}{z} [AVX512ER] +// * VRSQRT28PD zmm, zmm{k}{z} [AVX512ER] +// +func (self *Program) VRSQRT28PD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRSQRT28PD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VRSQRT28PD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VRSQRT28PD takes 2 or 3 operands") + } + // VRSQRT28PD m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xcc) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VRSQRT28PD {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0xcc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VRSQRT28PD zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0xcc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRSQRT28PD") + } + return p +} + +// VRSQRT28PS performs "Approximation to the Reciprocal Square Root of Packed Single-Precision Floating-Point Values with Less Than 2^-28 Relative Error". +// +// Mnemonic : VRSQRT28PS +// Supported forms : (3 forms) +// +// * VRSQRT28PS m512/m32bcst, zmm{k}{z} [AVX512ER] +// * VRSQRT28PS {sae}, zmm, zmm{k}{z} [AVX512ER] +// * VRSQRT28PS zmm, zmm{k}{z} [AVX512ER] +// +func (self *Program) VRSQRT28PS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRSQRT28PS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VRSQRT28PS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VRSQRT28PS takes 2 or 3 operands") + } + // VRSQRT28PS m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0xcc) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VRSQRT28PS {sae}, zmm, zmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[2]) << 7) | kcode(v[2]) | 0x18) + m.emit(0xcc) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VRSQRT28PS zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7d) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0xcc) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRSQRT28PS") + } + return p +} + +// VRSQRT28SD performs "Approximation to the Reciprocal Square Root of a Scalar Double-Precision Floating-Point Value with Less Than 2^-28 Relative Error". +// +// Mnemonic : VRSQRT28SD +// Supported forms : (3 forms) +// +// * VRSQRT28SD m64, xmm, xmm{k}{z} [AVX512ER] +// * VRSQRT28SD {sae}, xmm, xmm, xmm{k}{z} [AVX512ER] +// * VRSQRT28SD xmm, xmm, xmm{k}{z} [AVX512ER] +// +func (self *Program) VRSQRT28SD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRSQRT28SD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VRSQRT28SD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VRSQRT28SD takes 3 or 4 operands") + } + // VRSQRT28SD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xcd) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VRSQRT28SD {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xcd) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VRSQRT28SD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xcd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRSQRT28SD") + } + return p +} + +// VRSQRT28SS performs "Approximation to the Reciprocal Square Root of a Scalar Single-Precision Floating-Point Value with Less Than 2^-28 Relative Error". +// +// Mnemonic : VRSQRT28SS +// Supported forms : (3 forms) +// +// * VRSQRT28SS m32, xmm, xmm{k}{z} [AVX512ER] +// * VRSQRT28SS {sae}, xmm, xmm, xmm{k}{z} [AVX512ER] +// * VRSQRT28SS xmm, xmm, xmm{k}{z} [AVX512ER] +// +func (self *Program) VRSQRT28SS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VRSQRT28SS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VRSQRT28SS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VRSQRT28SS takes 3 or 4 operands") + } + // VRSQRT28SS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0xcd) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VRSQRT28SS {sae}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0xcd) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VRSQRT28SS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512ER) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0xcd) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VRSQRT28SS") + } + return p +} + +// VRSQRTPS performs "Compute Reciprocals of Square Roots of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VRSQRTPS +// Supported forms : (4 forms) +// +// * VRSQRTPS xmm, xmm [AVX] +// * VRSQRTPS m128, xmm [AVX] +// * VRSQRTPS ymm, ymm [AVX] +// * VRSQRTPS m256, ymm [AVX] +// +func (self *Program) VRSQRTPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VRSQRTPS", 2, Operands { v0, v1 }) + // VRSQRTPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), v[0], 0) + m.emit(0x52) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VRSQRTPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), addr(v[0]), 0) + m.emit(0x52) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VRSQRTPS ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), v[0], 0) + m.emit(0x52) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VRSQRTPS m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), addr(v[0]), 0) + m.emit(0x52) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VRSQRTPS") + } + return p +} + +// VRSQRTSS performs "Compute Reciprocal of Square Root of Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : VRSQRTSS +// Supported forms : (2 forms) +// +// * VRSQRTSS xmm, xmm, xmm [AVX] +// * VRSQRTSS m32, xmm, xmm [AVX] +// +func (self *Program) VRSQRTSS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VRSQRTSS", 3, Operands { v0, v1, v2 }) + // VRSQRTSS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x52) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VRSQRTSS m32, xmm, xmm + if isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x52) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VRSQRTSS") + } + return p +} + +// VSCALEFPD performs "Scale Packed Double-Precision Floating-Point Values With Double-Precision Floating-Point Values". +// +// Mnemonic : VSCALEFPD +// Supported forms : (7 forms) +// +// * VSCALEFPD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VSCALEFPD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VSCALEFPD zmm, zmm, zmm{k}{z} [AVX512F] +// * VSCALEFPD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSCALEFPD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSCALEFPD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VSCALEFPD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VSCALEFPD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VSCALEFPD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VSCALEFPD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VSCALEFPD takes 3 or 4 operands") + } + // VSCALEFPD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x2c) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VSCALEFPD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VSCALEFPD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSCALEFPD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x2c) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VSCALEFPD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSCALEFPD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x2c) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VSCALEFPD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSCALEFPD") + } + return p +} + +// VSCALEFPS performs "Scale Packed Single-Precision Floating-Point Values With Single-Precision Floating-Point Values". +// +// Mnemonic : VSCALEFPS +// Supported forms : (7 forms) +// +// * VSCALEFPS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VSCALEFPS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VSCALEFPS zmm, zmm, zmm{k}{z} [AVX512F] +// * VSCALEFPS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSCALEFPS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSCALEFPS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VSCALEFPS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VSCALEFPS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VSCALEFPS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VSCALEFPS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VSCALEFPS takes 3 or 4 operands") + } + // VSCALEFPS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x2c) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VSCALEFPS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VSCALEFPS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSCALEFPS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x2c) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VSCALEFPS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSCALEFPS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x2c) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VSCALEFPS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x2c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSCALEFPS") + } + return p +} + +// VSCALEFSD performs "Scale Scalar Double-Precision Floating-Point Value With a Double-Precision Floating-Point Value". +// +// Mnemonic : VSCALEFSD +// Supported forms : (3 forms) +// +// * VSCALEFSD m64, xmm, xmm{k}{z} [AVX512F] +// * VSCALEFSD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VSCALEFSD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VSCALEFSD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VSCALEFSD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VSCALEFSD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VSCALEFSD takes 3 or 4 operands") + } + // VSCALEFSD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x2d) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VSCALEFSD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VSCALEFSD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSCALEFSD") + } + return p +} + +// VSCALEFSS performs "Scale Scalar Single-Precision Floating-Point Value With a Single-Precision Floating-Point Value". +// +// Mnemonic : VSCALEFSS +// Supported forms : (3 forms) +// +// * VSCALEFSS m32, xmm, xmm{k}{z} [AVX512F] +// * VSCALEFSS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VSCALEFSS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VSCALEFSS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VSCALEFSS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VSCALEFSS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VSCALEFSS takes 3 or 4 operands") + } + // VSCALEFSS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x2d) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VSCALEFSS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VSCALEFSS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf2 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7d ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x2d) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSCALEFSS") + } + return p +} + +// VSCATTERDPD performs "Scatter Packed Double-Precision Floating-Point Values with Signed Doubleword Indices". +// +// Mnemonic : VSCATTERDPD +// Supported forms : (3 forms) +// +// * VSCATTERDPD zmm, vm32y{k} [AVX512F] +// * VSCATTERDPD xmm, vm32x{k} [AVX512F,AVX512VL] +// * VSCATTERDPD ymm, vm32x{k} [AVX512F,AVX512VL] +// +func (self *Program) VSCATTERDPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VSCATTERDPD", 2, Operands { v0, v1 }) + // VSCATTERDPD zmm, vm32y{k} + if isZMM(v0) && isVMYk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa2) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VSCATTERDPD xmm, vm32x{k} + if isEVEXXMM(v0) && isVMXk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa2) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VSCATTERDPD ymm, vm32x{k} + if isEVEXYMM(v0) && isVMXk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa2) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VSCATTERDPD") + } + return p +} + +// VSCATTERDPS performs "Scatter Packed Single-Precision Floating-Point Values with Signed Doubleword Indices". +// +// Mnemonic : VSCATTERDPS +// Supported forms : (3 forms) +// +// * VSCATTERDPS zmm, vm32z{k} [AVX512F] +// * VSCATTERDPS xmm, vm32x{k} [AVX512F,AVX512VL] +// * VSCATTERDPS ymm, vm32y{k} [AVX512F,AVX512VL] +// +func (self *Program) VSCATTERDPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VSCATTERDPS", 2, Operands { v0, v1 }) + // VSCATTERDPS zmm, vm32z{k} + if isZMM(v0) && isVMZk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa2) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VSCATTERDPS xmm, vm32x{k} + if isEVEXXMM(v0) && isVMXk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa2) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VSCATTERDPS ymm, vm32y{k} + if isEVEXYMM(v0) && isVMYk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa2) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VSCATTERDPS") + } + return p +} + +// VSCATTERPF0DPD performs "Sparse Prefetch Packed Double-Precision Floating-Point Data Values with Signed Doubleword Indices Using T0 Hint with Intent to Write". +// +// Mnemonic : VSCATTERPF0DPD +// Supported forms : (1 form) +// +// * VSCATTERPF0DPD vm32y{k} [AVX512PF] +// +func (self *Program) VSCATTERPF0DPD(v0 interface{}) *Instruction { + p := self.alloc("VSCATTERPF0DPD", 1, Operands { v0 }) + // VSCATTERPF0DPD vm32y{k} + if isVMYk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc6) + m.mrsd(5, addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VSCATTERPF0DPD") + } + return p +} + +// VSCATTERPF0DPS performs "Sparse Prefetch Packed Single-Precision Floating-Point Data Values with Signed Doubleword Indices Using T0 Hint with Intent to Write". +// +// Mnemonic : VSCATTERPF0DPS +// Supported forms : (1 form) +// +// * VSCATTERPF0DPS vm32z{k} [AVX512PF] +// +func (self *Program) VSCATTERPF0DPS(v0 interface{}) *Instruction { + p := self.alloc("VSCATTERPF0DPS", 1, Operands { v0 }) + // VSCATTERPF0DPS vm32z{k} + if isVMZk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc6) + m.mrsd(5, addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VSCATTERPF0DPS") + } + return p +} + +// VSCATTERPF0QPD performs "Sparse Prefetch Packed Double-Precision Floating-Point Data Values with Signed Quadword Indices Using T0 Hint with Intent to Write". +// +// Mnemonic : VSCATTERPF0QPD +// Supported forms : (1 form) +// +// * VSCATTERPF0QPD vm64z{k} [AVX512PF] +// +func (self *Program) VSCATTERPF0QPD(v0 interface{}) *Instruction { + p := self.alloc("VSCATTERPF0QPD", 1, Operands { v0 }) + // VSCATTERPF0QPD vm64z{k} + if isVMZk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc7) + m.mrsd(5, addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VSCATTERPF0QPD") + } + return p +} + +// VSCATTERPF0QPS performs "Sparse Prefetch Packed Single-Precision Floating-Point Data Values with Signed Quadword Indices Using T0 Hint with Intent to Write". +// +// Mnemonic : VSCATTERPF0QPS +// Supported forms : (1 form) +// +// * VSCATTERPF0QPS vm64z{k} [AVX512PF] +// +func (self *Program) VSCATTERPF0QPS(v0 interface{}) *Instruction { + p := self.alloc("VSCATTERPF0QPS", 1, Operands { v0 }) + // VSCATTERPF0QPS vm64z{k} + if isVMZk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc7) + m.mrsd(5, addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VSCATTERPF0QPS") + } + return p +} + +// VSCATTERPF1DPD performs "Sparse Prefetch Packed Double-Precision Floating-Point Data Values with Signed Doubleword Indices Using T1 Hint with Intent to Write". +// +// Mnemonic : VSCATTERPF1DPD +// Supported forms : (1 form) +// +// * VSCATTERPF1DPD vm32y{k} [AVX512PF] +// +func (self *Program) VSCATTERPF1DPD(v0 interface{}) *Instruction { + p := self.alloc("VSCATTERPF1DPD", 1, Operands { v0 }) + // VSCATTERPF1DPD vm32y{k} + if isVMYk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc6) + m.mrsd(6, addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VSCATTERPF1DPD") + } + return p +} + +// VSCATTERPF1DPS performs "Sparse Prefetch Packed Single-Precision Floating-Point Data Values with Signed Doubleword Indices Using T1 Hint with Intent to Write". +// +// Mnemonic : VSCATTERPF1DPS +// Supported forms : (1 form) +// +// * VSCATTERPF1DPS vm32z{k} [AVX512PF] +// +func (self *Program) VSCATTERPF1DPS(v0 interface{}) *Instruction { + p := self.alloc("VSCATTERPF1DPS", 1, Operands { v0 }) + // VSCATTERPF1DPS vm32z{k} + if isVMZk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc6) + m.mrsd(6, addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VSCATTERPF1DPS") + } + return p +} + +// VSCATTERPF1QPD performs "Sparse Prefetch Packed Double-Precision Floating-Point Data Values with Signed Quadword Indices Using T1 Hint with Intent to Write". +// +// Mnemonic : VSCATTERPF1QPD +// Supported forms : (1 form) +// +// * VSCATTERPF1QPD vm64z{k} [AVX512PF] +// +func (self *Program) VSCATTERPF1QPD(v0 interface{}) *Instruction { + p := self.alloc("VSCATTERPF1QPD", 1, Operands { v0 }) + // VSCATTERPF1QPD vm64z{k} + if isVMZk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc7) + m.mrsd(6, addr(v[0]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VSCATTERPF1QPD") + } + return p +} + +// VSCATTERPF1QPS performs "Sparse Prefetch Packed Single-Precision Floating-Point Data Values with Signed Quadword Indices Using T1 Hint with Intent to Write". +// +// Mnemonic : VSCATTERPF1QPS +// Supported forms : (1 form) +// +// * VSCATTERPF1QPS vm64z{k} [AVX512PF] +// +func (self *Program) VSCATTERPF1QPS(v0 interface{}) *Instruction { + p := self.alloc("VSCATTERPF1QPS", 1, Operands { v0 }) + // VSCATTERPF1QPS vm64z{k} + if isVMZk(v0) { + self.require(ISA_AVX512PF) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, 0, addr(v[0]), 0, kcode(v[0]), 0, 0) + m.emit(0xc7) + m.mrsd(6, addr(v[0]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VSCATTERPF1QPS") + } + return p +} + +// VSCATTERQPD performs "Scatter Packed Double-Precision Floating-Point Values with Signed Quadword Indices". +// +// Mnemonic : VSCATTERQPD +// Supported forms : (3 forms) +// +// * VSCATTERQPD zmm, vm64z{k} [AVX512F] +// * VSCATTERQPD xmm, vm64x{k} [AVX512F,AVX512VL] +// * VSCATTERQPD ymm, vm64y{k} [AVX512F,AVX512VL] +// +func (self *Program) VSCATTERQPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VSCATTERQPD", 2, Operands { v0, v1 }) + // VSCATTERQPD zmm, vm64z{k} + if isZMM(v0) && isVMZk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa3) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VSCATTERQPD xmm, vm64x{k} + if isEVEXXMM(v0) && isVMXk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa3) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + // VSCATTERQPD ymm, vm64y{k} + if isEVEXYMM(v0) && isVMYk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x85, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa3) + m.mrsd(lcode(v[0]), addr(v[1]), 8) + }) + } + if p.len == 0 { + panic("invalid operands for VSCATTERQPD") + } + return p +} + +// VSCATTERQPS performs "Scatter Packed Single-Precision Floating-Point Values with Signed Quadword Indices". +// +// Mnemonic : VSCATTERQPS +// Supported forms : (3 forms) +// +// * VSCATTERQPS ymm, vm64z{k} [AVX512F] +// * VSCATTERQPS xmm, vm64x{k} [AVX512F,AVX512VL] +// * VSCATTERQPS xmm, vm64y{k} [AVX512F,AVX512VL] +// +func (self *Program) VSCATTERQPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VSCATTERQPS", 2, Operands { v0, v1 }) + // VSCATTERQPS ymm, vm64z{k} + if isEVEXYMM(v0) && isVMZk(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b10, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa3) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VSCATTERQPS xmm, vm64x{k} + if isEVEXXMM(v0) && isVMXk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b00, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa3) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + // VSCATTERQPS xmm, vm64y{k} + if isEVEXXMM(v0) && isVMYk(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b10, 0x05, 0b01, ehcode(v[0]), addr(v[1]), 0, kcode(v[1]), 0, 0) + m.emit(0xa3) + m.mrsd(lcode(v[0]), addr(v[1]), 4) + }) + } + if p.len == 0 { + panic("invalid operands for VSCATTERQPS") + } + return p +} + +// VSHUFF32X4 performs "Shuffle 128-Bit Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VSHUFF32X4 +// Supported forms : (4 forms) +// +// * VSHUFF32X4 imm8, m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VSHUFF32X4 imm8, zmm, zmm, zmm{k}{z} [AVX512F] +// * VSHUFF32X4 imm8, m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VSHUFF32X4 imm8, ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VSHUFF32X4(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VSHUFF32X4", 4, Operands { v0, v1, v2, v3 }) + // VSHUFF32X4 imm8, m512/m32bcst, zmm, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x23) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFF32X4 imm8, zmm, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x23) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFF32X4 imm8, m256/m32bcst, ymm, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x23) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFF32X4 imm8, ymm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x23) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSHUFF32X4") + } + return p +} + +// VSHUFF64X2 performs "Shuffle 128-Bit Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VSHUFF64X2 +// Supported forms : (4 forms) +// +// * VSHUFF64X2 imm8, m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VSHUFF64X2 imm8, zmm, zmm, zmm{k}{z} [AVX512F] +// * VSHUFF64X2 imm8, m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VSHUFF64X2 imm8, ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VSHUFF64X2(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VSHUFF64X2", 4, Operands { v0, v1, v2, v3 }) + // VSHUFF64X2 imm8, m512/m64bcst, zmm, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x23) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFF64X2 imm8, zmm, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x23) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFF64X2 imm8, m256/m64bcst, ymm, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x23) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFF64X2 imm8, ymm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x23) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSHUFF64X2") + } + return p +} + +// VSHUFI32X4 performs "Shuffle 128-Bit Packed Doubleword Integer Values". +// +// Mnemonic : VSHUFI32X4 +// Supported forms : (4 forms) +// +// * VSHUFI32X4 imm8, m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VSHUFI32X4 imm8, zmm, zmm, zmm{k}{z} [AVX512F] +// * VSHUFI32X4 imm8, m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VSHUFI32X4 imm8, ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VSHUFI32X4(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VSHUFI32X4", 4, Operands { v0, v1, v2, v3 }) + // VSHUFI32X4 imm8, m512/m32bcst, zmm, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x43) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFI32X4 imm8, zmm, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x43) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFI32X4 imm8, m256/m32bcst, ymm, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x05, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x43) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFI32X4 imm8, ymm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7d ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x43) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSHUFI32X4") + } + return p +} + +// VSHUFI64X2 performs "Shuffle 128-Bit Packed Quadword Integer Values". +// +// Mnemonic : VSHUFI64X2 +// Supported forms : (4 forms) +// +// * VSHUFI64X2 imm8, m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VSHUFI64X2 imm8, zmm, zmm, zmm{k}{z} [AVX512F] +// * VSHUFI64X2 imm8, m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VSHUFI64X2 imm8, ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VSHUFI64X2(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VSHUFI64X2", 4, Operands { v0, v1, v2, v3 }) + // VSHUFI64X2 imm8, m512/m64bcst, zmm, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x43) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFI64X2 imm8, zmm, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0x43) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFI64X2 imm8, m256/m64bcst, ymm, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b11, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0x43) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFI64X2 imm8, ymm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf3 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0x43) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSHUFI64X2") + } + return p +} + +// VSHUFPD performs "Shuffle Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VSHUFPD +// Supported forms : (10 forms) +// +// * VSHUFPD imm8, xmm, xmm, xmm [AVX] +// * VSHUFPD imm8, m128, xmm, xmm [AVX] +// * VSHUFPD imm8, ymm, ymm, ymm [AVX] +// * VSHUFPD imm8, m256, ymm, ymm [AVX] +// * VSHUFPD imm8, m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VSHUFPD imm8, zmm, zmm, zmm{k}{z} [AVX512F] +// * VSHUFPD imm8, m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSHUFPD imm8, xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSHUFPD imm8, m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VSHUFPD imm8, ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VSHUFPD(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VSHUFPD", 4, Operands { v0, v1, v2, v3 }) + // VSHUFPD imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[3]), v[1], hlcode(v[2])) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPD imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xc6) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPD imm8, ymm, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[3]), v[1], hlcode(v[2])) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPD imm8, m256, ymm, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xc6) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPD imm8, m512/m64bcst, zmm, zmm{k}{z} + if isImm8(v0) && isM512M64bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0xc6) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPD imm8, zmm, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPD imm8, m128/m64bcst, xmm, xmm{k}{z} + if isImm8(v0) && isM128M64bcst(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0xc6) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPD imm8, xmm, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPD imm8, m256/m64bcst, ymm, ymm{k}{z} + if isImm8(v0) && isM256M64bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0xc6) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPD imm8, ymm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSHUFPD") + } + return p +} + +// VSHUFPS performs "Shuffle Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VSHUFPS +// Supported forms : (10 forms) +// +// * VSHUFPS imm8, xmm, xmm, xmm [AVX] +// * VSHUFPS imm8, m128, xmm, xmm [AVX] +// * VSHUFPS imm8, ymm, ymm, ymm [AVX] +// * VSHUFPS imm8, m256, ymm, ymm [AVX] +// * VSHUFPS imm8, m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VSHUFPS imm8, zmm, zmm, zmm{k}{z} [AVX512F] +// * VSHUFPS imm8, m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSHUFPS imm8, xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSHUFPS imm8, m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VSHUFPS imm8, ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VSHUFPS(v0 interface{}, v1 interface{}, v2 interface{}, v3 interface{}) *Instruction { + p := self.alloc("VSHUFPS", 4, Operands { v0, v1, v2, v3 }) + // VSHUFPS imm8, xmm, xmm, xmm + if isImm8(v0) && isXMM(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[3]), v[1], hlcode(v[2])) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPS imm8, m128, xmm, xmm + if isImm8(v0) && isM128(v1) && isXMM(v2) && isXMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xc6) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPS imm8, ymm, ymm, ymm + if isImm8(v0) && isYMM(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[3]), v[1], hlcode(v[2])) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPS imm8, m256, ymm, ymm + if isImm8(v0) && isM256(v1) && isYMM(v2) && isYMM(v3) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[3]), addr(v[1]), hlcode(v[2])) + m.emit(0xc6) + m.mrsd(lcode(v[3]), addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPS imm8, m512/m32bcst, zmm, zmm{k}{z} + if isImm8(v0) && isM512M32bcst(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0xc6) + m.mrsd(lcode(v[3]), addr(v[1]), 64) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPS imm8, zmm, zmm, zmm{k}{z} + if isImm8(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(v3) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x40) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPS imm8, m128/m32bcst, xmm, xmm{k}{z} + if isImm8(v0) && isM128M32bcst(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0xc6) + m.mrsd(lcode(v[3]), addr(v[1]), 16) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPS imm8, xmm, xmm, xmm{k}{z} + if isImm8(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x00) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPS imm8, m256/m32bcst, ymm, ymm{k}{z} + if isImm8(v0) && isM256M32bcst(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[3]), addr(v[1]), vcode(v[2]), kcode(v[3]), zcode(v[3]), bcode(v[1])) + m.emit(0xc6) + m.mrsd(lcode(v[3]), addr(v[1]), 32) + m.imm1(toImmAny(v[0])) + }) + } + // VSHUFPS imm8, ymm, ymm, ymm{k}{z} + if isImm8(v0) && isEVEXYMM(v1) && isEVEXYMM(v2) && isYMMkz(v3) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x20) + m.emit(0xc6) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSHUFPS") + } + return p +} + +// VSQRTPD performs "Compute Square Roots of Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VSQRTPD +// Supported forms : (11 forms) +// +// * VSQRTPD xmm, xmm [AVX] +// * VSQRTPD m128, xmm [AVX] +// * VSQRTPD ymm, ymm [AVX] +// * VSQRTPD m256, ymm [AVX] +// * VSQRTPD m512/m64bcst, zmm{k}{z} [AVX512F] +// * VSQRTPD {er}, zmm, zmm{k}{z} [AVX512F] +// * VSQRTPD zmm, zmm{k}{z} [AVX512F] +// * VSQRTPD m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VSQRTPD m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VSQRTPD xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSQRTPD ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VSQRTPD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VSQRTPD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VSQRTPD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VSQRTPD takes 2 or 3 operands") + } + // VSQRTPD xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VSQRTPD m128, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), addr(v[0]), 0) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VSQRTPD ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), v[0], 0) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VSQRTPD m256, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[1]), addr(v[0]), 0) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VSQRTPD m512/m64bcst, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VSQRTPD {er}, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x51) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VSQRTPD zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VSQRTPD m128/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VSQRTPD m256/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VSQRTPD xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VSQRTPD ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSQRTPD") + } + return p +} + +// VSQRTPS performs "Compute Square Roots of Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VSQRTPS +// Supported forms : (11 forms) +// +// * VSQRTPS xmm, xmm [AVX] +// * VSQRTPS m128, xmm [AVX] +// * VSQRTPS ymm, ymm [AVX] +// * VSQRTPS m256, ymm [AVX] +// * VSQRTPS m512/m32bcst, zmm{k}{z} [AVX512F] +// * VSQRTPS {er}, zmm, zmm{k}{z} [AVX512F] +// * VSQRTPS zmm, zmm{k}{z} [AVX512F] +// * VSQRTPS m128/m32bcst, xmm{k}{z} [AVX512F,AVX512VL] +// * VSQRTPS m256/m32bcst, ymm{k}{z} [AVX512F,AVX512VL] +// * VSQRTPS xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSQRTPS ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VSQRTPS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VSQRTPS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VSQRTPS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VSQRTPS takes 2 or 3 operands") + } + // VSQRTPS xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), v[0], 0) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VSQRTPS m128, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), addr(v[0]), 0) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VSQRTPS ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), v[0], 0) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VSQRTPS m256, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[1]), addr(v[0]), 0) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VSQRTPS m512/m32bcst, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 64) + }) + } + // VSQRTPS {er}, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[2]) << 7) | (vcode(v[0]) << 5) | kcode(v[2]) | 0x18) + m.emit(0x51) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VSQRTPS zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMMkz(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x48) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VSQRTPS m128/m32bcst, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 16) + }) + } + // VSQRTPS m256/m32bcst, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[1]), addr(v[0]), 0, kcode(v[1]), zcode(v[1]), bcode(v[0])) + m.emit(0x51) + m.mrsd(lcode(v[1]), addr(v[0]), 32) + }) + } + // VSQRTPS xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isXMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x08) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VSQRTPS ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isYMMkz(v1) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit((zcode(v[1]) << 7) | kcode(v[1]) | 0x28) + m.emit(0x51) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSQRTPS") + } + return p +} + +// VSQRTSD performs "Compute Square Root of Scalar Double-Precision Floating-Point Value". +// +// Mnemonic : VSQRTSD +// Supported forms : (5 forms) +// +// * VSQRTSD xmm, xmm, xmm [AVX] +// * VSQRTSD m64, xmm, xmm [AVX] +// * VSQRTSD m64, xmm, xmm{k}{z} [AVX512F] +// * VSQRTSD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VSQRTSD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VSQRTSD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VSQRTSD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VSQRTSD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VSQRTSD takes 3 or 4 operands") + } + // VSQRTSD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x51) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSQRTSD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x51) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VSQRTSD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x51) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VSQRTSD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xff ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x51) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VSQRTSD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x51) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSQRTSD") + } + return p +} + +// VSQRTSS performs "Compute Square Root of Scalar Single-Precision Floating-Point Value". +// +// Mnemonic : VSQRTSS +// Supported forms : (5 forms) +// +// * VSQRTSS xmm, xmm, xmm [AVX] +// * VSQRTSS m32, xmm, xmm [AVX] +// * VSQRTSS m32, xmm, xmm{k}{z} [AVX512F] +// * VSQRTSS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VSQRTSS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VSQRTSS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VSQRTSS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VSQRTSS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VSQRTSS takes 3 or 4 operands") + } + // VSQRTSS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x51) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSQRTSS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x51) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VSQRTSS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x51) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VSQRTSS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7e ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x51) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VSQRTSS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x51) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSQRTSS") + } + return p +} + +// VSTMXCSR performs "Store MXCSR Register State". +// +// Mnemonic : VSTMXCSR +// Supported forms : (1 form) +// +// * VSTMXCSR m32 [AVX] +// +func (self *Program) VSTMXCSR(v0 interface{}) *Instruction { + p := self.alloc("VSTMXCSR", 1, Operands { v0 }) + // VSTMXCSR m32 + if isM32(v0) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, 0, addr(v[0]), 0) + m.emit(0xae) + m.mrsd(3, addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VSTMXCSR") + } + return p +} + +// VSUBPD performs "Subtract Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VSUBPD +// Supported forms : (11 forms) +// +// * VSUBPD xmm, xmm, xmm [AVX] +// * VSUBPD m128, xmm, xmm [AVX] +// * VSUBPD ymm, ymm, ymm [AVX] +// * VSUBPD m256, ymm, ymm [AVX] +// * VSUBPD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VSUBPD {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VSUBPD zmm, zmm, zmm{k}{z} [AVX512F] +// * VSUBPD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSUBPD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSUBPD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VSUBPD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VSUBPD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VSUBPD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VSUBPD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VSUBPD takes 3 or 4 operands") + } + // VSUBPD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSUBPD m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VSUBPD ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSUBPD m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VSUBPD m512/m64bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VSUBPD {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xfd ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VSUBPD zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSUBPD m128/m64bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VSUBPD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSUBPD m256/m64bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VSUBPD ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSUBPD") + } + return p +} + +// VSUBPS performs "Subtract Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VSUBPS +// Supported forms : (11 forms) +// +// * VSUBPS xmm, xmm, xmm [AVX] +// * VSUBPS m128, xmm, xmm [AVX] +// * VSUBPS ymm, ymm, ymm [AVX] +// * VSUBPS m256, ymm, ymm [AVX] +// * VSUBPS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VSUBPS {er}, zmm, zmm, zmm{k}{z} [AVX512F] +// * VSUBPS zmm, zmm, zmm{k}{z} [AVX512F] +// * VSUBPS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSUBPS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VSUBPS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VSUBPS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VSUBPS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VSUBPS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VSUBPS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VSUBPS takes 3 or 4 operands") + } + // VSUBPS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSUBPS m128, xmm, xmm + if len(vv) == 0 && isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VSUBPS ymm, ymm, ymm + if len(vv) == 0 && isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSUBPS m256, ymm, ymm + if len(vv) == 0 && isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VSUBPS m512/m32bcst, zmm, zmm{k}{z} + if len(vv) == 0 && isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VSUBPS {er}, zmm, zmm, zmm{k}{z} + if len(vv) == 1 && isER(v0) && isZMM(v1) && isZMM(v2) && isZMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7c ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VSUBPS zmm, zmm, zmm{k}{z} + if len(vv) == 0 && isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSUBPS m128/m32bcst, xmm, xmm{k}{z} + if len(vv) == 0 && isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VSUBPS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSUBPS m256/m32bcst, ymm, ymm{k}{z} + if len(vv) == 0 && isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VSUBPS ymm, ymm, ymm{k}{z} + if len(vv) == 0 && isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSUBPS") + } + return p +} + +// VSUBSD performs "Subtract Scalar Double-Precision Floating-Point Values". +// +// Mnemonic : VSUBSD +// Supported forms : (5 forms) +// +// * VSUBSD xmm, xmm, xmm [AVX] +// * VSUBSD m64, xmm, xmm [AVX] +// * VSUBSD m64, xmm, xmm{k}{z} [AVX512F] +// * VSUBSD {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VSUBSD xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VSUBSD(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VSUBSD", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VSUBSD", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VSUBSD takes 3 or 4 operands") + } + // VSUBSD xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSUBSD m64, xmm, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(3, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VSUBSD m64, xmm, xmm{k}{z} + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x87, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 8) + }) + } + // VSUBSD {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0xff ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VSUBSD xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xff ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSUBSD") + } + return p +} + +// VSUBSS performs "Subtract Scalar Single-Precision Floating-Point Values". +// +// Mnemonic : VSUBSS +// Supported forms : (5 forms) +// +// * VSUBSS xmm, xmm, xmm [AVX] +// * VSUBSS m32, xmm, xmm [AVX] +// * VSUBSS m32, xmm, xmm{k}{z} [AVX512F] +// * VSUBSS {er}, xmm, xmm, xmm{k}{z} [AVX512F] +// * VSUBSS xmm, xmm, xmm{k}{z} [AVX512F] +// +func (self *Program) VSUBSS(v0 interface{}, v1 interface{}, v2 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VSUBSS", 3, Operands { v0, v1, v2 }) + case 1 : p = self.alloc("VSUBSS", 4, Operands { v0, v1, v2, vv[0] }) + default : panic("instruction VSUBSS takes 3 or 4 operands") + } + // VSUBSS xmm, xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VSUBSS m32, xmm, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(2, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VSUBSS m32, xmm, xmm{k}{z} + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x06, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), 0) + m.emit(0x5c) + m.mrsd(lcode(v[2]), addr(v[0]), 4) + }) + } + // VSUBSS {er}, xmm, xmm, xmm{k}{z} + if len(vv) == 1 && isER(v0) && isEVEXXMM(v1) && isEVEXXMM(v2) && isXMMkz(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[3]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[3]) << 4))) + m.emit(0x7e ^ (hlcode(v[2]) << 3)) + m.emit((zcode(v[3]) << 7) | (vcode(v[0]) << 5) | (0x08 ^ (ecode(v[2]) << 3)) | kcode(v[3]) | 0x10) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[3]) << 3 | lcode(v[1])) + }) + } + // VSUBSS xmm, xmm, xmm{k}{z} + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7e ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x5c) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VSUBSS") + } + return p +} + +// VTESTPD performs "Packed Double-Precision Floating-Point Bit Test". +// +// Mnemonic : VTESTPD +// Supported forms : (4 forms) +// +// * VTESTPD xmm, xmm [AVX] +// * VTESTPD m128, xmm [AVX] +// * VTESTPD ymm, ymm [AVX] +// * VTESTPD m256, ymm [AVX] +// +func (self *Program) VTESTPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VTESTPD", 2, Operands { v0, v1 }) + // VTESTPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VTESTPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VTESTPD ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x0f) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VTESTPD m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x0f) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VTESTPD") + } + return p +} + +// VTESTPS performs "Packed Single-Precision Floating-Point Bit Test". +// +// Mnemonic : VTESTPS +// Supported forms : (4 forms) +// +// * VTESTPS xmm, xmm [AVX] +// * VTESTPS m128, xmm [AVX] +// * VTESTPS ymm, ymm [AVX] +// * VTESTPS m256, ymm [AVX] +// +func (self *Program) VTESTPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("VTESTPS", 2, Operands { v0, v1 }) + // VTESTPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x79) + m.emit(0x0e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VTESTPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x01, hcode(v[1]), addr(v[0]), 0) + m.emit(0x0e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VTESTPS ymm, ymm + if isYMM(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xc4) + m.emit(0xe2 ^ (hcode(v[1]) << 7) ^ (hcode(v[0]) << 5)) + m.emit(0x7d) + m.emit(0x0e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VTESTPS m256, ymm + if isM256(v0) && isYMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex3(0xc4, 0b10, 0x05, hcode(v[1]), addr(v[0]), 0) + m.emit(0x0e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for VTESTPS") + } + return p +} + +// VUCOMISD performs "Unordered Compare Scalar Double-Precision Floating-Point Values and Set EFLAGS". +// +// Mnemonic : VUCOMISD +// Supported forms : (5 forms) +// +// * VUCOMISD xmm, xmm [AVX] +// * VUCOMISD m64, xmm [AVX] +// * VUCOMISD m64, xmm [AVX512F] +// * VUCOMISD {sae}, xmm, xmm [AVX512F] +// * VUCOMISD xmm, xmm [AVX512F] +// +func (self *Program) VUCOMISD(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VUCOMISD", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VUCOMISD", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VUCOMISD takes 2 or 3 operands") + } + // VUCOMISD xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), v[0], 0) + m.emit(0x2e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VUCOMISD m64, xmm + if len(vv) == 0 && isM64(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VUCOMISD m64, xmm + if len(vv) == 0 && isM64(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2e) + m.mrsd(lcode(v[1]), addr(v[0]), 8) + }) + } + // VUCOMISD {sae}, xmm, xmm + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd) + m.emit(0x18) + m.emit(0x2e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VUCOMISD xmm, xmm + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0xfd) + m.emit(0x48) + m.emit(0x2e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VUCOMISD") + } + return p +} + +// VUCOMISS performs "Unordered Compare Scalar Single-Precision Floating-Point Values and Set EFLAGS". +// +// Mnemonic : VUCOMISS +// Supported forms : (5 forms) +// +// * VUCOMISS xmm, xmm [AVX] +// * VUCOMISS m32, xmm [AVX] +// * VUCOMISS m32, xmm [AVX512F] +// * VUCOMISS {sae}, xmm, xmm [AVX512F] +// * VUCOMISS xmm, xmm [AVX512F] +// +func (self *Program) VUCOMISS(v0 interface{}, v1 interface{}, vv ...interface{}) *Instruction { + var p *Instruction + switch len(vv) { + case 0 : p = self.alloc("VUCOMISS", 2, Operands { v0, v1 }) + case 1 : p = self.alloc("VUCOMISS", 3, Operands { v0, v1, vv[0] }) + default : panic("instruction VUCOMISS takes 2 or 3 operands") + } + // VUCOMISS xmm, xmm + if len(vv) == 0 && isXMM(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), v[0], 0) + m.emit(0x2e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // VUCOMISS m32, xmm + if len(vv) == 0 && isM32(v0) && isXMM(v1) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[1]), addr(v[0]), 0) + m.emit(0x2e) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // VUCOMISS m32, xmm + if len(vv) == 0 && isM32(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[1]), addr(v[0]), 0, 0, 0, 0) + m.emit(0x2e) + m.mrsd(lcode(v[1]), addr(v[0]), 4) + }) + } + // VUCOMISS {sae}, xmm, xmm + if len(vv) == 1 && isSAE(v0) && isEVEXXMM(v1) && isEVEXXMM(vv[0]) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[1]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c) + m.emit(0x18) + m.emit(0x2e) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[1])) + }) + } + // VUCOMISS xmm, xmm + if len(vv) == 0 && isEVEXXMM(v0) && isEVEXXMM(v1) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[1]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[1]) << 4))) + m.emit(0x7c) + m.emit(0x48) + m.emit(0x2e) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VUCOMISS") + } + return p +} + +// VUNPCKHPD performs "Unpack and Interleave High Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VUNPCKHPD +// Supported forms : (10 forms) +// +// * VUNPCKHPD xmm, xmm, xmm [AVX] +// * VUNPCKHPD m128, xmm, xmm [AVX] +// * VUNPCKHPD ymm, ymm, ymm [AVX] +// * VUNPCKHPD m256, ymm, ymm [AVX] +// * VUNPCKHPD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VUNPCKHPD zmm, zmm, zmm{k}{z} [AVX512F] +// * VUNPCKHPD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VUNPCKHPD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VUNPCKHPD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VUNPCKHPD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VUNPCKHPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VUNPCKHPD", 3, Operands { v0, v1, v2 }) + // VUNPCKHPD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKHPD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VUNPCKHPD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKHPD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VUNPCKHPD m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VUNPCKHPD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKHPD m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VUNPCKHPD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKHPD m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VUNPCKHPD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VUNPCKHPD") + } + return p +} + +// VUNPCKHPS performs "Unpack and Interleave High Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VUNPCKHPS +// Supported forms : (10 forms) +// +// * VUNPCKHPS xmm, xmm, xmm [AVX] +// * VUNPCKHPS m128, xmm, xmm [AVX] +// * VUNPCKHPS ymm, ymm, ymm [AVX] +// * VUNPCKHPS m256, ymm, ymm [AVX] +// * VUNPCKHPS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VUNPCKHPS zmm, zmm, zmm{k}{z} [AVX512F] +// * VUNPCKHPS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VUNPCKHPS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VUNPCKHPS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VUNPCKHPS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VUNPCKHPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VUNPCKHPS", 3, Operands { v0, v1, v2 }) + // VUNPCKHPS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKHPS m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VUNPCKHPS ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKHPS m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VUNPCKHPS m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VUNPCKHPS zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKHPS m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VUNPCKHPS xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKHPS m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x15) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VUNPCKHPS ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x15) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VUNPCKHPS") + } + return p +} + +// VUNPCKLPD performs "Unpack and Interleave Low Packed Double-Precision Floating-Point Values". +// +// Mnemonic : VUNPCKLPD +// Supported forms : (10 forms) +// +// * VUNPCKLPD xmm, xmm, xmm [AVX] +// * VUNPCKLPD m128, xmm, xmm [AVX] +// * VUNPCKLPD ymm, ymm, ymm [AVX] +// * VUNPCKLPD m256, ymm, ymm [AVX] +// * VUNPCKLPD m512/m64bcst, zmm, zmm{k}{z} [AVX512F] +// * VUNPCKLPD zmm, zmm, zmm{k}{z} [AVX512F] +// * VUNPCKLPD m128/m64bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VUNPCKLPD xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VUNPCKLPD m256/m64bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VUNPCKLPD ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VUNPCKLPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VUNPCKLPD", 3, Operands { v0, v1, v2 }) + // VUNPCKLPD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKLPD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VUNPCKLPD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKLPD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VUNPCKLPD m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VUNPCKLPD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKLPD m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VUNPCKLPD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKLPD m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VUNPCKLPD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VUNPCKLPD") + } + return p +} + +// VUNPCKLPS performs "Unpack and Interleave Low Packed Single-Precision Floating-Point Values". +// +// Mnemonic : VUNPCKLPS +// Supported forms : (10 forms) +// +// * VUNPCKLPS xmm, xmm, xmm [AVX] +// * VUNPCKLPS m128, xmm, xmm [AVX] +// * VUNPCKLPS ymm, ymm, ymm [AVX] +// * VUNPCKLPS m256, ymm, ymm [AVX] +// * VUNPCKLPS m512/m32bcst, zmm, zmm{k}{z} [AVX512F] +// * VUNPCKLPS zmm, zmm, zmm{k}{z} [AVX512F] +// * VUNPCKLPS m128/m32bcst, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VUNPCKLPS xmm, xmm, xmm{k}{z} [AVX512F,AVX512VL] +// * VUNPCKLPS m256/m32bcst, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// * VUNPCKLPS ymm, ymm, ymm{k}{z} [AVX512F,AVX512VL] +// +func (self *Program) VUNPCKLPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VUNPCKLPS", 3, Operands { v0, v1, v2 }) + // VUNPCKLPS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKLPS m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VUNPCKLPS ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKLPS m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VUNPCKLPS m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VUNPCKLPS zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKLPS m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VUNPCKLPS xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VUNPCKLPS m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x14) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VUNPCKLPS ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512F) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x14) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VUNPCKLPS") + } + return p +} + +// VXORPD performs "Bitwise Logical XOR for Double-Precision Floating-Point Values". +// +// Mnemonic : VXORPD +// Supported forms : (10 forms) +// +// * VXORPD xmm, xmm, xmm [AVX] +// * VXORPD m128, xmm, xmm [AVX] +// * VXORPD ymm, ymm, ymm [AVX] +// * VXORPD m256, ymm, ymm [AVX] +// * VXORPD m512/m64bcst, zmm, zmm{k}{z} [AVX512DQ] +// * VXORPD zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VXORPD m128/m64bcst, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VXORPD xmm, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VXORPD m256/m64bcst, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VXORPD ymm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VXORPD(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VXORPD", 3, Operands { v0, v1, v2 }) + // VXORPD xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x57) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VXORPD m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(1, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x57) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VXORPD ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x57) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VXORPD m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(5, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x57) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VXORPD m512/m64bcst, zmm, zmm{k}{z} + if isM512M64bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x57) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VXORPD zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x57) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VXORPD m128/m64bcst, xmm, xmm{k}{z} + if isM128M64bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x57) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VXORPD xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x57) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VXORPD m256/m64bcst, ymm, ymm{k}{z} + if isM256M64bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x85, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x57) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VXORPD ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0xfd ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x57) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VXORPD") + } + return p +} + +// VXORPS performs "Bitwise Logical XOR for Single-Precision Floating-Point Values". +// +// Mnemonic : VXORPS +// Supported forms : (10 forms) +// +// * VXORPS xmm, xmm, xmm [AVX] +// * VXORPS m128, xmm, xmm [AVX] +// * VXORPS ymm, ymm, ymm [AVX] +// * VXORPS m256, ymm, ymm [AVX] +// * VXORPS m512/m32bcst, zmm, zmm{k}{z} [AVX512DQ] +// * VXORPS zmm, zmm, zmm{k}{z} [AVX512DQ] +// * VXORPS m128/m32bcst, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VXORPS xmm, xmm, xmm{k}{z} [AVX512DQ,AVX512VL] +// * VXORPS m256/m32bcst, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// * VXORPS ymm, ymm, ymm{k}{z} [AVX512DQ,AVX512VL] +// +func (self *Program) VXORPS(v0 interface{}, v1 interface{}, v2 interface{}) *Instruction { + p := self.alloc("VXORPS", 3, Operands { v0, v1, v2 }) + // VXORPS xmm, xmm, xmm + if isXMM(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x57) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VXORPS m128, xmm, xmm + if isM128(v0) && isXMM(v1) && isXMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x57) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VXORPS ymm, ymm, ymm + if isYMM(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), v[0], hlcode(v[1])) + m.emit(0x57) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VXORPS m256, ymm, ymm + if isM256(v0) && isYMM(v1) && isYMM(v2) { + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, hcode(v[2]), addr(v[0]), hlcode(v[1])) + m.emit(0x57) + m.mrsd(lcode(v[2]), addr(v[0]), 1) + }) + } + // VXORPS m512/m32bcst, zmm, zmm{k}{z} + if isM512M32bcst(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b10, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x57) + m.mrsd(lcode(v[2]), addr(v[0]), 64) + }) + } + // VXORPS zmm, zmm, zmm{k}{z} + if isZMM(v0) && isZMM(v1) && isZMMkz(v2) { + self.require(ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x40) + m.emit(0x57) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VXORPS m128/m32bcst, xmm, xmm{k}{z} + if isM128M32bcst(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b00, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x57) + m.mrsd(lcode(v[2]), addr(v[0]), 16) + }) + } + // VXORPS xmm, xmm, xmm{k}{z} + if isEVEXXMM(v0) && isEVEXXMM(v1) && isXMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x00) + m.emit(0x57) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + // VXORPS m256/m32bcst, ymm, ymm{k}{z} + if isM256M32bcst(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.evex(0b01, 0x04, 0b01, ehcode(v[2]), addr(v[0]), vcode(v[1]), kcode(v[2]), zcode(v[2]), bcode(v[0])) + m.emit(0x57) + m.mrsd(lcode(v[2]), addr(v[0]), 32) + }) + } + // VXORPS ymm, ymm, ymm{k}{z} + if isEVEXYMM(v0) && isEVEXYMM(v1) && isYMMkz(v2) { + self.require(ISA_AVX512VL | ISA_AVX512DQ) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x62) + m.emit(0xf1 ^ ((hcode(v[2]) << 7) | (ehcode(v[0]) << 5) | (ecode(v[2]) << 4))) + m.emit(0x7c ^ (hlcode(v[1]) << 3)) + m.emit((zcode(v[2]) << 7) | (0x08 ^ (ecode(v[1]) << 3)) | kcode(v[2]) | 0x20) + m.emit(0x57) + m.emit(0xc0 | lcode(v[2]) << 3 | lcode(v[0])) + }) + } + if p.len == 0 { + panic("invalid operands for VXORPS") + } + return p +} + +// VZEROALL performs "Zero All YMM Registers". +// +// Mnemonic : VZEROALL +// Supported forms : (1 form) +// +// * VZEROALL [AVX] +// +func (self *Program) VZEROALL() *Instruction { + p := self.alloc("VZEROALL", 0, Operands { }) + // VZEROALL + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(4, 0, nil, 0) + m.emit(0x77) + }) + return p +} + +// VZEROUPPER performs "Zero Upper Bits of YMM Registers". +// +// Mnemonic : VZEROUPPER +// Supported forms : (1 form) +// +// * VZEROUPPER [AVX] +// +func (self *Program) VZEROUPPER() *Instruction { + p := self.alloc("VZEROUPPER", 0, Operands { }) + // VZEROUPPER + self.require(ISA_AVX) + p.domain = DomainAVX + p.add(0, func(m *_Encoding, v []interface{}) { + m.vex2(0, 0, nil, 0) + m.emit(0x77) + }) + return p +} + +// XADDB performs "Exchange and Add". +// +// Mnemonic : XADD +// Supported forms : (2 forms) +// +// * XADDB r8, r8 +// * XADDB r8, m8 +// +func (self *Program) XADDB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XADDB", 2, Operands { v0, v1 }) + // XADDB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x0f) + m.emit(0xc0) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // XADDB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x0f) + m.emit(0xc0) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XADDB") + } + return p +} + +// XADDL performs "Exchange and Add". +// +// Mnemonic : XADD +// Supported forms : (2 forms) +// +// * XADDL r32, r32 +// * XADDL r32, m32 +// +func (self *Program) XADDL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XADDL", 2, Operands { v0, v1 }) + // XADDL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xc1) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // XADDL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xc1) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XADDL") + } + return p +} + +// XADDQ performs "Exchange and Add". +// +// Mnemonic : XADD +// Supported forms : (2 forms) +// +// * XADDQ r64, r64 +// * XADDQ r64, m64 +// +func (self *Program) XADDQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XADDQ", 2, Operands { v0, v1 }) + // XADDQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x0f) + m.emit(0xc1) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // XADDQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x0f) + m.emit(0xc1) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XADDQ") + } + return p +} + +// XADDW performs "Exchange and Add". +// +// Mnemonic : XADD +// Supported forms : (2 forms) +// +// * XADDW r16, r16 +// * XADDW r16, m16 +// +func (self *Program) XADDW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XADDW", 2, Operands { v0, v1 }) + // XADDW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x0f) + m.emit(0xc1) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + } + // XADDW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x0f) + m.emit(0xc1) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XADDW") + } + return p +} + +// XCHGB performs "Exchange Register/Memory with Register". +// +// Mnemonic : XCHG +// Supported forms : (3 forms) +// +// * XCHGB r8, r8 +// * XCHGB m8, r8 +// * XCHGB r8, m8 +// +func (self *Program) XCHGB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XCHGB", 2, Operands { v0, v1 }) + // XCHGB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x86) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x86) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // XCHGB m8, r8 + if isM8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), isReg8REX(v[1])) + m.emit(0x86) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // XCHGB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x86) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XCHGB") + } + return p +} + +// XCHGL performs "Exchange Register/Memory with Register". +// +// Mnemonic : XCHG +// Supported forms : (5 forms) +// +// * XCHGL r32, eax +// * XCHGL eax, r32 +// * XCHGL r32, r32 +// * XCHGL m32, r32 +// * XCHGL r32, m32 +// +func (self *Program) XCHGL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XCHGL", 2, Operands { v0, v1 }) + // XCHGL r32, eax + if isReg32(v0) && v1 == EAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[0], false) + m.emit(0x90 | lcode(v[0])) + }) + } + // XCHGL eax, r32 + if v0 == EAX && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x90 | lcode(v[1])) + }) + } + // XCHGL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x87) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x87) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // XCHGL m32, r32 + if isM32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x87) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // XCHGL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x87) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XCHGL") + } + return p +} + +// XCHGQ performs "Exchange Register/Memory with Register". +// +// Mnemonic : XCHG +// Supported forms : (5 forms) +// +// * XCHGQ r64, rax +// * XCHGQ rax, r64 +// * XCHGQ r64, r64 +// * XCHGQ m64, r64 +// * XCHGQ r64, m64 +// +func (self *Program) XCHGQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XCHGQ", 2, Operands { v0, v1 }) + // XCHGQ r64, rax + if isReg64(v0) && v1 == RAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0])) + m.emit(0x90 | lcode(v[0])) + }) + } + // XCHGQ rax, r64 + if v0 == RAX && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x90 | lcode(v[1])) + }) + } + // XCHGQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x87) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x87) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // XCHGQ m64, r64 + if isM64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x87) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // XCHGQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x87) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XCHGQ") + } + return p +} + +// XCHGW performs "Exchange Register/Memory with Register". +// +// Mnemonic : XCHG +// Supported forms : (5 forms) +// +// * XCHGW r16, ax +// * XCHGW ax, r16 +// * XCHGW r16, r16 +// * XCHGW m16, r16 +// * XCHGW r16, m16 +// +func (self *Program) XCHGW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XCHGW", 2, Operands { v0, v1 }) + // XCHGW r16, ax + if isReg16(v0) && v1 == AX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[0], false) + m.emit(0x90 | lcode(v[0])) + }) + } + // XCHGW ax, r16 + if v0 == AX && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x90 | lcode(v[1])) + }) + } + // XCHGW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x87) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x87) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // XCHGW m16, r16 + if isM16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x87) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // XCHGW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x87) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XCHGW") + } + return p +} + +// XGETBV performs "Get Value of Extended Control Register". +// +// Mnemonic : XGETBV +// Supported forms : (1 form) +// +// * XGETBV +// +func (self *Program) XGETBV() *Instruction { + p := self.alloc("XGETBV", 0, Operands { }) + // XGETBV + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x0f) + m.emit(0x01) + m.emit(0xd0) + }) + return p +} + +// XLATB performs "Table Look-up Translation". +// +// Mnemonic : XLATB +// Supported forms : (2 forms) +// +// * XLATB +// * XLATB +// +func (self *Program) XLATB() *Instruction { + p := self.alloc("XLATB", 0, Operands { }) + // XLATB + p.domain = DomainMisc + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0xd7) + }) + // XLATB + p.domain = DomainMisc + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48) + m.emit(0xd7) + }) + return p +} + +// XORB performs "Logical Exclusive OR". +// +// Mnemonic : XOR +// Supported forms : (6 forms) +// +// * XORB imm8, al +// * XORB imm8, r8 +// * XORB r8, r8 +// * XORB m8, r8 +// * XORB imm8, m8 +// * XORB r8, m8 +// +func (self *Program) XORB(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XORB", 2, Operands { v0, v1 }) + // XORB imm8, al + if isImm8(v0) && v1 == AL { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x34) + m.imm1(toImmAny(v[0])) + }) + } + // XORB imm8, r8 + if isImm8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], isReg8REX(v[1])) + m.emit(0x80) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // XORB r8, r8 + if isReg8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x30) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], isReg8REX(v[0]) || isReg8REX(v[1])) + m.emit(0x32) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // XORB m8, r8 + if isM8(v0) && isReg8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), isReg8REX(v[1])) + m.emit(0x32) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // XORB imm8, m8 + if isImm8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x80) + m.mrsd(6, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // XORB r8, m8 + if isReg8(v0) && isM8(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), isReg8REX(v[0])) + m.emit(0x30) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XORB") + } + return p +} + +// XORL performs "Logical Exclusive OR". +// +// Mnemonic : XOR +// Supported forms : (8 forms) +// +// * XORL imm32, eax +// * XORL imm8, r32 +// * XORL imm32, r32 +// * XORL r32, r32 +// * XORL m32, r32 +// * XORL imm8, m32 +// * XORL imm32, m32 +// * XORL r32, m32 +// +func (self *Program) XORL(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XORL", 2, Operands { v0, v1 }) + // XORL imm32, eax + if isImm32(v0) && v1 == EAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x35) + m.imm4(toImmAny(v[0])) + }) + } + // XORL imm8, r32 + if isImm8Ext(v0, 4) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // XORL imm32, r32 + if isImm32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xf0 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // XORL r32, r32 + if isReg32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x31) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x33) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // XORL m32, r32 + if isM32(v0) && isReg32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x33) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // XORL imm8, m32 + if isImm8Ext(v0, 4) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(6, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // XORL imm32, m32 + if isImm32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(6, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // XORL r32, m32 + if isReg32(v0) && isM32(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x31) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XORL") + } + return p +} + +// XORPD performs "Bitwise Logical XOR for Double-Precision Floating-Point Values". +// +// Mnemonic : XORPD +// Supported forms : (2 forms) +// +// * XORPD xmm, xmm [SSE2] +// * XORPD m128, xmm [SSE2] +// +func (self *Program) XORPD(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XORPD", 2, Operands { v0, v1 }) + // XORPD xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x57) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // XORPD m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE2) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x57) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XORPD") + } + return p +} + +// XORPS performs "Bitwise Logical XOR for Single-Precision Floating-Point Values". +// +// Mnemonic : XORPS +// Supported forms : (2 forms) +// +// * XORPS xmm, xmm [SSE] +// * XORPS m128, xmm [SSE] +// +func (self *Program) XORPS(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XORPS", 2, Operands { v0, v1 }) + // XORPS xmm, xmm + if isXMM(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x0f) + m.emit(0x57) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // XORPS m128, xmm + if isM128(v0) && isXMM(v1) { + self.require(ISA_SSE) + p.domain = DomainMMXSSE + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x0f) + m.emit(0x57) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XORPS") + } + return p +} + +// XORQ performs "Logical Exclusive OR". +// +// Mnemonic : XOR +// Supported forms : (8 forms) +// +// * XORQ imm32, rax +// * XORQ imm8, r64 +// * XORQ imm32, r64 +// * XORQ r64, r64 +// * XORQ m64, r64 +// * XORQ imm8, m64 +// * XORQ imm32, m64 +// * XORQ r64, m64 +// +func (self *Program) XORQ(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XORQ", 2, Operands { v0, v1 }) + // XORQ imm32, rax + if isImm32(v0) && v1 == RAX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48) + m.emit(0x35) + m.imm4(toImmAny(v[0])) + }) + } + // XORQ imm8, r64 + if isImm8Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x83) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // XORQ imm32, r64 + if isImm32Ext(v0, 8) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1])) + m.emit(0x81) + m.emit(0xf0 | lcode(v[1])) + m.imm4(toImmAny(v[0])) + }) + } + // XORQ r64, r64 + if isReg64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[0]) << 2 | hcode(v[1])) + m.emit(0x31) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x48 | hcode(v[1]) << 2 | hcode(v[0])) + m.emit(0x33) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // XORQ m64, r64 + if isM64(v0) && isReg64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[1]), addr(v[0])) + m.emit(0x33) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // XORQ imm8, m64 + if isImm8Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x83) + m.mrsd(6, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // XORQ imm32, m64 + if isImm32Ext(v0, 8) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, 0, addr(v[1])) + m.emit(0x81) + m.mrsd(6, addr(v[1]), 1) + m.imm4(toImmAny(v[0])) + }) + } + // XORQ r64, m64 + if isReg64(v0) && isM64(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.rexm(1, hcode(v[0]), addr(v[1])) + m.emit(0x31) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XORQ") + } + return p +} + +// XORW performs "Logical Exclusive OR". +// +// Mnemonic : XOR +// Supported forms : (8 forms) +// +// * XORW imm16, ax +// * XORW imm8, r16 +// * XORW imm16, r16 +// * XORW r16, r16 +// * XORW m16, r16 +// * XORW imm8, m16 +// * XORW imm16, m16 +// * XORW r16, m16 +// +func (self *Program) XORW(v0 interface{}, v1 interface{}) *Instruction { + p := self.alloc("XORW", 2, Operands { v0, v1 }) + // XORW imm16, ax + if isImm16(v0) && v1 == AX { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.emit(0x35) + m.imm2(toImmAny(v[0])) + }) + } + // XORW imm8, r16 + if isImm8Ext(v0, 2) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x83) + m.emit(0xf0 | lcode(v[1])) + m.imm1(toImmAny(v[0])) + }) + } + // XORW imm16, r16 + if isImm16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, v[1], false) + m.emit(0x81) + m.emit(0xf0 | lcode(v[1])) + m.imm2(toImmAny(v[0])) + }) + } + // XORW r16, r16 + if isReg16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), v[1], false) + m.emit(0x31) + m.emit(0xc0 | lcode(v[0]) << 3 | lcode(v[1])) + }) + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), v[0], false) + m.emit(0x33) + m.emit(0xc0 | lcode(v[1]) << 3 | lcode(v[0])) + }) + } + // XORW m16, r16 + if isM16(v0) && isReg16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[1]), addr(v[0]), false) + m.emit(0x33) + m.mrsd(lcode(v[1]), addr(v[0]), 1) + }) + } + // XORW imm8, m16 + if isImm8Ext(v0, 2) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x83) + m.mrsd(6, addr(v[1]), 1) + m.imm1(toImmAny(v[0])) + }) + } + // XORW imm16, m16 + if isImm16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(0, addr(v[1]), false) + m.emit(0x81) + m.mrsd(6, addr(v[1]), 1) + m.imm2(toImmAny(v[0])) + }) + } + // XORW r16, m16 + if isReg16(v0) && isM16(v1) { + p.domain = DomainGeneric + p.add(0, func(m *_Encoding, v []interface{}) { + m.emit(0x66) + m.rexo(hcode(v[0]), addr(v[1]), false) + m.emit(0x31) + m.mrsd(lcode(v[0]), addr(v[1]), 1) + }) + } + if p.len == 0 { + panic("invalid operands for XORW") + } + return p +} diff --git a/vendor/github.com/chenzhuoyu/iasm/x86_64/instructions_table.go b/vendor/github.com/chenzhuoyu/iasm/x86_64/instructions_table.go new file mode 100644 index 0000000000..675699eb01 --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/x86_64/instructions_table.go @@ -0,0 +1,12291 @@ +// Code generated by "mkasm_amd64.py", DO NOT EDIT. + +package x86_64 + +const ( + _N_args = 5 + _N_forms = 23 +) + +// Instructions maps all the instruction name to it's encoder function. +var Instructions = map[string]_InstructionEncoder { + "adcb" : __asm_proxy_ADCB__, + "adcl" : __asm_proxy_ADCL__, + "adcq" : __asm_proxy_ADCQ__, + "adcw" : __asm_proxy_ADCW__, + "adcxl" : __asm_proxy_ADCXL__, + "adcxq" : __asm_proxy_ADCXQ__, + "addb" : __asm_proxy_ADDB__, + "addl" : __asm_proxy_ADDL__, + "addpd" : __asm_proxy_ADDPD__, + "addps" : __asm_proxy_ADDPS__, + "addq" : __asm_proxy_ADDQ__, + "addsd" : __asm_proxy_ADDSD__, + "addss" : __asm_proxy_ADDSS__, + "addsubpd" : __asm_proxy_ADDSUBPD__, + "addsubps" : __asm_proxy_ADDSUBPS__, + "addw" : __asm_proxy_ADDW__, + "adoxl" : __asm_proxy_ADOXL__, + "adoxq" : __asm_proxy_ADOXQ__, + "aesdec" : __asm_proxy_AESDEC__, + "aesdeclast" : __asm_proxy_AESDECLAST__, + "aesenc" : __asm_proxy_AESENC__, + "aesenclast" : __asm_proxy_AESENCLAST__, + "aesimc" : __asm_proxy_AESIMC__, + "aeskeygenassist" : __asm_proxy_AESKEYGENASSIST__, + "andb" : __asm_proxy_ANDB__, + "andl" : __asm_proxy_ANDL__, + "andnl" : __asm_proxy_ANDNL__, + "andnpd" : __asm_proxy_ANDNPD__, + "andnps" : __asm_proxy_ANDNPS__, + "andnq" : __asm_proxy_ANDNQ__, + "andpd" : __asm_proxy_ANDPD__, + "andps" : __asm_proxy_ANDPS__, + "andq" : __asm_proxy_ANDQ__, + "andw" : __asm_proxy_ANDW__, + "bextr" : __asm_proxy_BEXTR__, + "blcfill" : __asm_proxy_BLCFILL__, + "blci" : __asm_proxy_BLCI__, + "blcic" : __asm_proxy_BLCIC__, + "blcmsk" : __asm_proxy_BLCMSK__, + "blcs" : __asm_proxy_BLCS__, + "blendpd" : __asm_proxy_BLENDPD__, + "blendps" : __asm_proxy_BLENDPS__, + "blendvpd" : __asm_proxy_BLENDVPD__, + "blendvps" : __asm_proxy_BLENDVPS__, + "blsfill" : __asm_proxy_BLSFILL__, + "blsi" : __asm_proxy_BLSI__, + "blsic" : __asm_proxy_BLSIC__, + "blsmsk" : __asm_proxy_BLSMSK__, + "blsr" : __asm_proxy_BLSR__, + "bsfl" : __asm_proxy_BSFL__, + "bsfq" : __asm_proxy_BSFQ__, + "bsfw" : __asm_proxy_BSFW__, + "bsrl" : __asm_proxy_BSRL__, + "bsrq" : __asm_proxy_BSRQ__, + "bsrw" : __asm_proxy_BSRW__, + "bswapl" : __asm_proxy_BSWAPL__, + "bswapq" : __asm_proxy_BSWAPQ__, + "btcl" : __asm_proxy_BTCL__, + "btcq" : __asm_proxy_BTCQ__, + "btcw" : __asm_proxy_BTCW__, + "btl" : __asm_proxy_BTL__, + "btq" : __asm_proxy_BTQ__, + "btrl" : __asm_proxy_BTRL__, + "btrq" : __asm_proxy_BTRQ__, + "btrw" : __asm_proxy_BTRW__, + "btsl" : __asm_proxy_BTSL__, + "btsq" : __asm_proxy_BTSQ__, + "btsw" : __asm_proxy_BTSW__, + "btw" : __asm_proxy_BTW__, + "bzhi" : __asm_proxy_BZHI__, + "call" : __asm_proxy_CALL__, + "callq" : __asm_proxy_CALLQ__, + "cbtw" : __asm_proxy_CBTW__, + "clc" : __asm_proxy_CLC__, + "cld" : __asm_proxy_CLD__, + "clflush" : __asm_proxy_CLFLUSH__, + "clflushopt" : __asm_proxy_CLFLUSHOPT__, + "cltd" : __asm_proxy_CLTD__, + "cltq" : __asm_proxy_CLTQ__, + "clwb" : __asm_proxy_CLWB__, + "clzero" : __asm_proxy_CLZERO__, + "cmc" : __asm_proxy_CMC__, + "cmova" : __asm_proxy_CMOVA__, + "cmovae" : __asm_proxy_CMOVAE__, + "cmovb" : __asm_proxy_CMOVB__, + "cmovbe" : __asm_proxy_CMOVBE__, + "cmovc" : __asm_proxy_CMOVC__, + "cmove" : __asm_proxy_CMOVE__, + "cmovg" : __asm_proxy_CMOVG__, + "cmovge" : __asm_proxy_CMOVGE__, + "cmovl" : __asm_proxy_CMOVL__, + "cmovle" : __asm_proxy_CMOVLE__, + "cmovna" : __asm_proxy_CMOVNA__, + "cmovnae" : __asm_proxy_CMOVNAE__, + "cmovnb" : __asm_proxy_CMOVNB__, + "cmovnbe" : __asm_proxy_CMOVNBE__, + "cmovnc" : __asm_proxy_CMOVNC__, + "cmovne" : __asm_proxy_CMOVNE__, + "cmovng" : __asm_proxy_CMOVNG__, + "cmovnge" : __asm_proxy_CMOVNGE__, + "cmovnl" : __asm_proxy_CMOVNL__, + "cmovnle" : __asm_proxy_CMOVNLE__, + "cmovno" : __asm_proxy_CMOVNO__, + "cmovnp" : __asm_proxy_CMOVNP__, + "cmovns" : __asm_proxy_CMOVNS__, + "cmovnz" : __asm_proxy_CMOVNZ__, + "cmovo" : __asm_proxy_CMOVO__, + "cmovp" : __asm_proxy_CMOVP__, + "cmovpe" : __asm_proxy_CMOVPE__, + "cmovpo" : __asm_proxy_CMOVPO__, + "cmovs" : __asm_proxy_CMOVS__, + "cmovz" : __asm_proxy_CMOVZ__, + "cmpb" : __asm_proxy_CMPB__, + "cmpl" : __asm_proxy_CMPL__, + "cmppd" : __asm_proxy_CMPPD__, + "cmpps" : __asm_proxy_CMPPS__, + "cmpq" : __asm_proxy_CMPQ__, + "cmpsd" : __asm_proxy_CMPSD__, + "cmpss" : __asm_proxy_CMPSS__, + "cmpw" : __asm_proxy_CMPW__, + "cmpxchg16b" : __asm_proxy_CMPXCHG16B__, + "cmpxchg8b" : __asm_proxy_CMPXCHG8B__, + "cmpxchgb" : __asm_proxy_CMPXCHGB__, + "cmpxchgl" : __asm_proxy_CMPXCHGL__, + "cmpxchgq" : __asm_proxy_CMPXCHGQ__, + "cmpxchgw" : __asm_proxy_CMPXCHGW__, + "comisd" : __asm_proxy_COMISD__, + "comiss" : __asm_proxy_COMISS__, + "cpuid" : __asm_proxy_CPUID__, + "cqto" : __asm_proxy_CQTO__, + "crc32b" : __asm_proxy_CRC32B__, + "crc32l" : __asm_proxy_CRC32L__, + "crc32q" : __asm_proxy_CRC32Q__, + "crc32w" : __asm_proxy_CRC32W__, + "cvtdq2pd" : __asm_proxy_CVTDQ2PD__, + "cvtdq2ps" : __asm_proxy_CVTDQ2PS__, + "cvtpd2dq" : __asm_proxy_CVTPD2DQ__, + "cvtpd2pi" : __asm_proxy_CVTPD2PI__, + "cvtpd2ps" : __asm_proxy_CVTPD2PS__, + "cvtpi2pd" : __asm_proxy_CVTPI2PD__, + "cvtpi2ps" : __asm_proxy_CVTPI2PS__, + "cvtps2dq" : __asm_proxy_CVTPS2DQ__, + "cvtps2pd" : __asm_proxy_CVTPS2PD__, + "cvtps2pi" : __asm_proxy_CVTPS2PI__, + "cvtsd2si" : __asm_proxy_CVTSD2SI__, + "cvtsd2ss" : __asm_proxy_CVTSD2SS__, + "cvtsi2sd" : __asm_proxy_CVTSI2SD__, + "cvtsi2ss" : __asm_proxy_CVTSI2SS__, + "cvtss2sd" : __asm_proxy_CVTSS2SD__, + "cvtss2si" : __asm_proxy_CVTSS2SI__, + "cvttpd2dq" : __asm_proxy_CVTTPD2DQ__, + "cvttpd2pi" : __asm_proxy_CVTTPD2PI__, + "cvttps2dq" : __asm_proxy_CVTTPS2DQ__, + "cvttps2pi" : __asm_proxy_CVTTPS2PI__, + "cvttsd2si" : __asm_proxy_CVTTSD2SI__, + "cvttss2si" : __asm_proxy_CVTTSS2SI__, + "cwtd" : __asm_proxy_CWTD__, + "cwtl" : __asm_proxy_CWTL__, + "decb" : __asm_proxy_DECB__, + "decl" : __asm_proxy_DECL__, + "decq" : __asm_proxy_DECQ__, + "decw" : __asm_proxy_DECW__, + "divb" : __asm_proxy_DIVB__, + "divl" : __asm_proxy_DIVL__, + "divpd" : __asm_proxy_DIVPD__, + "divps" : __asm_proxy_DIVPS__, + "divq" : __asm_proxy_DIVQ__, + "divsd" : __asm_proxy_DIVSD__, + "divss" : __asm_proxy_DIVSS__, + "divw" : __asm_proxy_DIVW__, + "dppd" : __asm_proxy_DPPD__, + "dpps" : __asm_proxy_DPPS__, + "emms" : __asm_proxy_EMMS__, + "extractps" : __asm_proxy_EXTRACTPS__, + "extrq" : __asm_proxy_EXTRQ__, + "femms" : __asm_proxy_FEMMS__, + "haddpd" : __asm_proxy_HADDPD__, + "haddps" : __asm_proxy_HADDPS__, + "hsubpd" : __asm_proxy_HSUBPD__, + "hsubps" : __asm_proxy_HSUBPS__, + "idivb" : __asm_proxy_IDIVB__, + "idivl" : __asm_proxy_IDIVL__, + "idivq" : __asm_proxy_IDIVQ__, + "idivw" : __asm_proxy_IDIVW__, + "imulb" : __asm_proxy_IMULB__, + "imull" : __asm_proxy_IMULL__, + "imulq" : __asm_proxy_IMULQ__, + "imulw" : __asm_proxy_IMULW__, + "incb" : __asm_proxy_INCB__, + "incl" : __asm_proxy_INCL__, + "incq" : __asm_proxy_INCQ__, + "incw" : __asm_proxy_INCW__, + "insertps" : __asm_proxy_INSERTPS__, + "insertq" : __asm_proxy_INSERTQ__, + "int" : __asm_proxy_INT__, + "ja" : __asm_proxy_JA__, + "jae" : __asm_proxy_JAE__, + "jb" : __asm_proxy_JB__, + "jbe" : __asm_proxy_JBE__, + "jc" : __asm_proxy_JC__, + "je" : __asm_proxy_JE__, + "jecxz" : __asm_proxy_JECXZ__, + "jg" : __asm_proxy_JG__, + "jge" : __asm_proxy_JGE__, + "jl" : __asm_proxy_JL__, + "jle" : __asm_proxy_JLE__, + "jmp" : __asm_proxy_JMP__, + "jmpq" : __asm_proxy_JMPQ__, + "jna" : __asm_proxy_JNA__, + "jnae" : __asm_proxy_JNAE__, + "jnb" : __asm_proxy_JNB__, + "jnbe" : __asm_proxy_JNBE__, + "jnc" : __asm_proxy_JNC__, + "jne" : __asm_proxy_JNE__, + "jng" : __asm_proxy_JNG__, + "jnge" : __asm_proxy_JNGE__, + "jnl" : __asm_proxy_JNL__, + "jnle" : __asm_proxy_JNLE__, + "jno" : __asm_proxy_JNO__, + "jnp" : __asm_proxy_JNP__, + "jns" : __asm_proxy_JNS__, + "jnz" : __asm_proxy_JNZ__, + "jo" : __asm_proxy_JO__, + "jp" : __asm_proxy_JP__, + "jpe" : __asm_proxy_JPE__, + "jpo" : __asm_proxy_JPO__, + "jrcxz" : __asm_proxy_JRCXZ__, + "js" : __asm_proxy_JS__, + "jz" : __asm_proxy_JZ__, + "kaddb" : __asm_proxy_KADDB__, + "kaddd" : __asm_proxy_KADDD__, + "kaddq" : __asm_proxy_KADDQ__, + "kaddw" : __asm_proxy_KADDW__, + "kandb" : __asm_proxy_KANDB__, + "kandd" : __asm_proxy_KANDD__, + "kandnb" : __asm_proxy_KANDNB__, + "kandnd" : __asm_proxy_KANDND__, + "kandnq" : __asm_proxy_KANDNQ__, + "kandnw" : __asm_proxy_KANDNW__, + "kandq" : __asm_proxy_KANDQ__, + "kandw" : __asm_proxy_KANDW__, + "kmovb" : __asm_proxy_KMOVB__, + "kmovd" : __asm_proxy_KMOVD__, + "kmovq" : __asm_proxy_KMOVQ__, + "kmovw" : __asm_proxy_KMOVW__, + "knotb" : __asm_proxy_KNOTB__, + "knotd" : __asm_proxy_KNOTD__, + "knotq" : __asm_proxy_KNOTQ__, + "knotw" : __asm_proxy_KNOTW__, + "korb" : __asm_proxy_KORB__, + "kord" : __asm_proxy_KORD__, + "korq" : __asm_proxy_KORQ__, + "kortestb" : __asm_proxy_KORTESTB__, + "kortestd" : __asm_proxy_KORTESTD__, + "kortestq" : __asm_proxy_KORTESTQ__, + "kortestw" : __asm_proxy_KORTESTW__, + "korw" : __asm_proxy_KORW__, + "kshiftlb" : __asm_proxy_KSHIFTLB__, + "kshiftld" : __asm_proxy_KSHIFTLD__, + "kshiftlq" : __asm_proxy_KSHIFTLQ__, + "kshiftlw" : __asm_proxy_KSHIFTLW__, + "kshiftrb" : __asm_proxy_KSHIFTRB__, + "kshiftrd" : __asm_proxy_KSHIFTRD__, + "kshiftrq" : __asm_proxy_KSHIFTRQ__, + "kshiftrw" : __asm_proxy_KSHIFTRW__, + "ktestb" : __asm_proxy_KTESTB__, + "ktestd" : __asm_proxy_KTESTD__, + "ktestq" : __asm_proxy_KTESTQ__, + "ktestw" : __asm_proxy_KTESTW__, + "kunpckbw" : __asm_proxy_KUNPCKBW__, + "kunpckdq" : __asm_proxy_KUNPCKDQ__, + "kunpckwd" : __asm_proxy_KUNPCKWD__, + "kxnorb" : __asm_proxy_KXNORB__, + "kxnord" : __asm_proxy_KXNORD__, + "kxnorq" : __asm_proxy_KXNORQ__, + "kxnorw" : __asm_proxy_KXNORW__, + "kxorb" : __asm_proxy_KXORB__, + "kxord" : __asm_proxy_KXORD__, + "kxorq" : __asm_proxy_KXORQ__, + "kxorw" : __asm_proxy_KXORW__, + "lddqu" : __asm_proxy_LDDQU__, + "ldmxcsr" : __asm_proxy_LDMXCSR__, + "leal" : __asm_proxy_LEAL__, + "leaq" : __asm_proxy_LEAQ__, + "leaw" : __asm_proxy_LEAW__, + "lfence" : __asm_proxy_LFENCE__, + "lzcntl" : __asm_proxy_LZCNTL__, + "lzcntq" : __asm_proxy_LZCNTQ__, + "lzcntw" : __asm_proxy_LZCNTW__, + "maskmovdqu" : __asm_proxy_MASKMOVDQU__, + "maskmovq" : __asm_proxy_MASKMOVQ__, + "maxpd" : __asm_proxy_MAXPD__, + "maxps" : __asm_proxy_MAXPS__, + "maxsd" : __asm_proxy_MAXSD__, + "maxss" : __asm_proxy_MAXSS__, + "mfence" : __asm_proxy_MFENCE__, + "minpd" : __asm_proxy_MINPD__, + "minps" : __asm_proxy_MINPS__, + "minsd" : __asm_proxy_MINSD__, + "minss" : __asm_proxy_MINSS__, + "monitor" : __asm_proxy_MONITOR__, + "monitorx" : __asm_proxy_MONITORX__, + "movapd" : __asm_proxy_MOVAPD__, + "movaps" : __asm_proxy_MOVAPS__, + "movb" : __asm_proxy_MOVB__, + "movbel" : __asm_proxy_MOVBEL__, + "movbeq" : __asm_proxy_MOVBEQ__, + "movbew" : __asm_proxy_MOVBEW__, + "movd" : __asm_proxy_MOVD__, + "movddup" : __asm_proxy_MOVDDUP__, + "movdq2q" : __asm_proxy_MOVDQ2Q__, + "movdqa" : __asm_proxy_MOVDQA__, + "movdqu" : __asm_proxy_MOVDQU__, + "movhlps" : __asm_proxy_MOVHLPS__, + "movhpd" : __asm_proxy_MOVHPD__, + "movhps" : __asm_proxy_MOVHPS__, + "movl" : __asm_proxy_MOVL__, + "movlhps" : __asm_proxy_MOVLHPS__, + "movlpd" : __asm_proxy_MOVLPD__, + "movlps" : __asm_proxy_MOVLPS__, + "movmskpd" : __asm_proxy_MOVMSKPD__, + "movmskps" : __asm_proxy_MOVMSKPS__, + "movntdq" : __asm_proxy_MOVNTDQ__, + "movntdqa" : __asm_proxy_MOVNTDQA__, + "movntil" : __asm_proxy_MOVNTIL__, + "movntiq" : __asm_proxy_MOVNTIQ__, + "movntpd" : __asm_proxy_MOVNTPD__, + "movntps" : __asm_proxy_MOVNTPS__, + "movntq" : __asm_proxy_MOVNTQ__, + "movntsd" : __asm_proxy_MOVNTSD__, + "movntss" : __asm_proxy_MOVNTSS__, + "movq" : __asm_proxy_MOVQ__, + "movq2dq" : __asm_proxy_MOVQ2DQ__, + "movsbl" : __asm_proxy_MOVSBL__, + "movsbq" : __asm_proxy_MOVSBQ__, + "movsbw" : __asm_proxy_MOVSBW__, + "movsd" : __asm_proxy_MOVSD__, + "movshdup" : __asm_proxy_MOVSHDUP__, + "movsldup" : __asm_proxy_MOVSLDUP__, + "movslq" : __asm_proxy_MOVSLQ__, + "movss" : __asm_proxy_MOVSS__, + "movswl" : __asm_proxy_MOVSWL__, + "movswq" : __asm_proxy_MOVSWQ__, + "movupd" : __asm_proxy_MOVUPD__, + "movups" : __asm_proxy_MOVUPS__, + "movw" : __asm_proxy_MOVW__, + "movzbl" : __asm_proxy_MOVZBL__, + "movzbq" : __asm_proxy_MOVZBQ__, + "movzbw" : __asm_proxy_MOVZBW__, + "movzwl" : __asm_proxy_MOVZWL__, + "movzwq" : __asm_proxy_MOVZWQ__, + "mpsadbw" : __asm_proxy_MPSADBW__, + "mulb" : __asm_proxy_MULB__, + "mull" : __asm_proxy_MULL__, + "mulpd" : __asm_proxy_MULPD__, + "mulps" : __asm_proxy_MULPS__, + "mulq" : __asm_proxy_MULQ__, + "mulsd" : __asm_proxy_MULSD__, + "mulss" : __asm_proxy_MULSS__, + "mulw" : __asm_proxy_MULW__, + "mulxl" : __asm_proxy_MULXL__, + "mulxq" : __asm_proxy_MULXQ__, + "mwait" : __asm_proxy_MWAIT__, + "mwaitx" : __asm_proxy_MWAITX__, + "negb" : __asm_proxy_NEGB__, + "negl" : __asm_proxy_NEGL__, + "negq" : __asm_proxy_NEGQ__, + "negw" : __asm_proxy_NEGW__, + "nop" : __asm_proxy_NOP__, + "notb" : __asm_proxy_NOTB__, + "notl" : __asm_proxy_NOTL__, + "notq" : __asm_proxy_NOTQ__, + "notw" : __asm_proxy_NOTW__, + "orb" : __asm_proxy_ORB__, + "orl" : __asm_proxy_ORL__, + "orpd" : __asm_proxy_ORPD__, + "orps" : __asm_proxy_ORPS__, + "orq" : __asm_proxy_ORQ__, + "orw" : __asm_proxy_ORW__, + "pabsb" : __asm_proxy_PABSB__, + "pabsd" : __asm_proxy_PABSD__, + "pabsw" : __asm_proxy_PABSW__, + "packssdw" : __asm_proxy_PACKSSDW__, + "packsswb" : __asm_proxy_PACKSSWB__, + "packusdw" : __asm_proxy_PACKUSDW__, + "packuswb" : __asm_proxy_PACKUSWB__, + "paddb" : __asm_proxy_PADDB__, + "paddd" : __asm_proxy_PADDD__, + "paddq" : __asm_proxy_PADDQ__, + "paddsb" : __asm_proxy_PADDSB__, + "paddsw" : __asm_proxy_PADDSW__, + "paddusb" : __asm_proxy_PADDUSB__, + "paddusw" : __asm_proxy_PADDUSW__, + "paddw" : __asm_proxy_PADDW__, + "palignr" : __asm_proxy_PALIGNR__, + "pand" : __asm_proxy_PAND__, + "pandn" : __asm_proxy_PANDN__, + "pause" : __asm_proxy_PAUSE__, + "pavgb" : __asm_proxy_PAVGB__, + "pavgusb" : __asm_proxy_PAVGUSB__, + "pavgw" : __asm_proxy_PAVGW__, + "pblendvb" : __asm_proxy_PBLENDVB__, + "pblendw" : __asm_proxy_PBLENDW__, + "pclmulqdq" : __asm_proxy_PCLMULQDQ__, + "pcmpeqb" : __asm_proxy_PCMPEQB__, + "pcmpeqd" : __asm_proxy_PCMPEQD__, + "pcmpeqq" : __asm_proxy_PCMPEQQ__, + "pcmpeqw" : __asm_proxy_PCMPEQW__, + "pcmpestri" : __asm_proxy_PCMPESTRI__, + "pcmpestrm" : __asm_proxy_PCMPESTRM__, + "pcmpgtb" : __asm_proxy_PCMPGTB__, + "pcmpgtd" : __asm_proxy_PCMPGTD__, + "pcmpgtq" : __asm_proxy_PCMPGTQ__, + "pcmpgtw" : __asm_proxy_PCMPGTW__, + "pcmpistri" : __asm_proxy_PCMPISTRI__, + "pcmpistrm" : __asm_proxy_PCMPISTRM__, + "pdep" : __asm_proxy_PDEP__, + "pext" : __asm_proxy_PEXT__, + "pextrb" : __asm_proxy_PEXTRB__, + "pextrd" : __asm_proxy_PEXTRD__, + "pextrq" : __asm_proxy_PEXTRQ__, + "pextrw" : __asm_proxy_PEXTRW__, + "pf2id" : __asm_proxy_PF2ID__, + "pf2iw" : __asm_proxy_PF2IW__, + "pfacc" : __asm_proxy_PFACC__, + "pfadd" : __asm_proxy_PFADD__, + "pfcmpeq" : __asm_proxy_PFCMPEQ__, + "pfcmpge" : __asm_proxy_PFCMPGE__, + "pfcmpgt" : __asm_proxy_PFCMPGT__, + "pfmax" : __asm_proxy_PFMAX__, + "pfmin" : __asm_proxy_PFMIN__, + "pfmul" : __asm_proxy_PFMUL__, + "pfnacc" : __asm_proxy_PFNACC__, + "pfpnacc" : __asm_proxy_PFPNACC__, + "pfrcp" : __asm_proxy_PFRCP__, + "pfrcpit1" : __asm_proxy_PFRCPIT1__, + "pfrcpit2" : __asm_proxy_PFRCPIT2__, + "pfrsqit1" : __asm_proxy_PFRSQIT1__, + "pfrsqrt" : __asm_proxy_PFRSQRT__, + "pfsub" : __asm_proxy_PFSUB__, + "pfsubr" : __asm_proxy_PFSUBR__, + "phaddd" : __asm_proxy_PHADDD__, + "phaddsw" : __asm_proxy_PHADDSW__, + "phaddw" : __asm_proxy_PHADDW__, + "phminposuw" : __asm_proxy_PHMINPOSUW__, + "phsubd" : __asm_proxy_PHSUBD__, + "phsubsw" : __asm_proxy_PHSUBSW__, + "phsubw" : __asm_proxy_PHSUBW__, + "pi2fd" : __asm_proxy_PI2FD__, + "pi2fw" : __asm_proxy_PI2FW__, + "pinsrb" : __asm_proxy_PINSRB__, + "pinsrd" : __asm_proxy_PINSRD__, + "pinsrq" : __asm_proxy_PINSRQ__, + "pinsrw" : __asm_proxy_PINSRW__, + "pmaddubsw" : __asm_proxy_PMADDUBSW__, + "pmaddwd" : __asm_proxy_PMADDWD__, + "pmaxsb" : __asm_proxy_PMAXSB__, + "pmaxsd" : __asm_proxy_PMAXSD__, + "pmaxsw" : __asm_proxy_PMAXSW__, + "pmaxub" : __asm_proxy_PMAXUB__, + "pmaxud" : __asm_proxy_PMAXUD__, + "pmaxuw" : __asm_proxy_PMAXUW__, + "pminsb" : __asm_proxy_PMINSB__, + "pminsd" : __asm_proxy_PMINSD__, + "pminsw" : __asm_proxy_PMINSW__, + "pminub" : __asm_proxy_PMINUB__, + "pminud" : __asm_proxy_PMINUD__, + "pminuw" : __asm_proxy_PMINUW__, + "pmovmskb" : __asm_proxy_PMOVMSKB__, + "pmovsxbd" : __asm_proxy_PMOVSXBD__, + "pmovsxbq" : __asm_proxy_PMOVSXBQ__, + "pmovsxbw" : __asm_proxy_PMOVSXBW__, + "pmovsxdq" : __asm_proxy_PMOVSXDQ__, + "pmovsxwd" : __asm_proxy_PMOVSXWD__, + "pmovsxwq" : __asm_proxy_PMOVSXWQ__, + "pmovzxbd" : __asm_proxy_PMOVZXBD__, + "pmovzxbq" : __asm_proxy_PMOVZXBQ__, + "pmovzxbw" : __asm_proxy_PMOVZXBW__, + "pmovzxdq" : __asm_proxy_PMOVZXDQ__, + "pmovzxwd" : __asm_proxy_PMOVZXWD__, + "pmovzxwq" : __asm_proxy_PMOVZXWQ__, + "pmuldq" : __asm_proxy_PMULDQ__, + "pmulhrsw" : __asm_proxy_PMULHRSW__, + "pmulhrw" : __asm_proxy_PMULHRW__, + "pmulhuw" : __asm_proxy_PMULHUW__, + "pmulhw" : __asm_proxy_PMULHW__, + "pmulld" : __asm_proxy_PMULLD__, + "pmullw" : __asm_proxy_PMULLW__, + "pmuludq" : __asm_proxy_PMULUDQ__, + "popcntl" : __asm_proxy_POPCNTL__, + "popcntq" : __asm_proxy_POPCNTQ__, + "popcntw" : __asm_proxy_POPCNTW__, + "popq" : __asm_proxy_POPQ__, + "popw" : __asm_proxy_POPW__, + "por" : __asm_proxy_POR__, + "prefetch" : __asm_proxy_PREFETCH__, + "prefetchnta" : __asm_proxy_PREFETCHNTA__, + "prefetcht0" : __asm_proxy_PREFETCHT0__, + "prefetcht1" : __asm_proxy_PREFETCHT1__, + "prefetcht2" : __asm_proxy_PREFETCHT2__, + "prefetchw" : __asm_proxy_PREFETCHW__, + "prefetchwt1" : __asm_proxy_PREFETCHWT1__, + "psadbw" : __asm_proxy_PSADBW__, + "pshufb" : __asm_proxy_PSHUFB__, + "pshufd" : __asm_proxy_PSHUFD__, + "pshufhw" : __asm_proxy_PSHUFHW__, + "pshuflw" : __asm_proxy_PSHUFLW__, + "pshufw" : __asm_proxy_PSHUFW__, + "psignb" : __asm_proxy_PSIGNB__, + "psignd" : __asm_proxy_PSIGND__, + "psignw" : __asm_proxy_PSIGNW__, + "pslld" : __asm_proxy_PSLLD__, + "pslldq" : __asm_proxy_PSLLDQ__, + "psllq" : __asm_proxy_PSLLQ__, + "psllw" : __asm_proxy_PSLLW__, + "psrad" : __asm_proxy_PSRAD__, + "psraw" : __asm_proxy_PSRAW__, + "psrld" : __asm_proxy_PSRLD__, + "psrldq" : __asm_proxy_PSRLDQ__, + "psrlq" : __asm_proxy_PSRLQ__, + "psrlw" : __asm_proxy_PSRLW__, + "psubb" : __asm_proxy_PSUBB__, + "psubd" : __asm_proxy_PSUBD__, + "psubq" : __asm_proxy_PSUBQ__, + "psubsb" : __asm_proxy_PSUBSB__, + "psubsw" : __asm_proxy_PSUBSW__, + "psubusb" : __asm_proxy_PSUBUSB__, + "psubusw" : __asm_proxy_PSUBUSW__, + "psubw" : __asm_proxy_PSUBW__, + "pswapd" : __asm_proxy_PSWAPD__, + "ptest" : __asm_proxy_PTEST__, + "punpckhbw" : __asm_proxy_PUNPCKHBW__, + "punpckhdq" : __asm_proxy_PUNPCKHDQ__, + "punpckhqdq" : __asm_proxy_PUNPCKHQDQ__, + "punpckhwd" : __asm_proxy_PUNPCKHWD__, + "punpcklbw" : __asm_proxy_PUNPCKLBW__, + "punpckldq" : __asm_proxy_PUNPCKLDQ__, + "punpcklqdq" : __asm_proxy_PUNPCKLQDQ__, + "punpcklwd" : __asm_proxy_PUNPCKLWD__, + "pushq" : __asm_proxy_PUSHQ__, + "pushw" : __asm_proxy_PUSHW__, + "pxor" : __asm_proxy_PXOR__, + "rclb" : __asm_proxy_RCLB__, + "rcll" : __asm_proxy_RCLL__, + "rclq" : __asm_proxy_RCLQ__, + "rclw" : __asm_proxy_RCLW__, + "rcpps" : __asm_proxy_RCPPS__, + "rcpss" : __asm_proxy_RCPSS__, + "rcrb" : __asm_proxy_RCRB__, + "rcrl" : __asm_proxy_RCRL__, + "rcrq" : __asm_proxy_RCRQ__, + "rcrw" : __asm_proxy_RCRW__, + "rdrand" : __asm_proxy_RDRAND__, + "rdseed" : __asm_proxy_RDSEED__, + "rdtsc" : __asm_proxy_RDTSC__, + "rdtscp" : __asm_proxy_RDTSCP__, + "ret" : __asm_proxy_RET__, + "rolb" : __asm_proxy_ROLB__, + "roll" : __asm_proxy_ROLL__, + "rolq" : __asm_proxy_ROLQ__, + "rolw" : __asm_proxy_ROLW__, + "rorb" : __asm_proxy_RORB__, + "rorl" : __asm_proxy_RORL__, + "rorq" : __asm_proxy_RORQ__, + "rorw" : __asm_proxy_RORW__, + "rorxl" : __asm_proxy_RORXL__, + "rorxq" : __asm_proxy_RORXQ__, + "roundpd" : __asm_proxy_ROUNDPD__, + "roundps" : __asm_proxy_ROUNDPS__, + "roundsd" : __asm_proxy_ROUNDSD__, + "roundss" : __asm_proxy_ROUNDSS__, + "rsqrtps" : __asm_proxy_RSQRTPS__, + "rsqrtss" : __asm_proxy_RSQRTSS__, + "salb" : __asm_proxy_SALB__, + "sall" : __asm_proxy_SALL__, + "salq" : __asm_proxy_SALQ__, + "salw" : __asm_proxy_SALW__, + "sarb" : __asm_proxy_SARB__, + "sarl" : __asm_proxy_SARL__, + "sarq" : __asm_proxy_SARQ__, + "sarw" : __asm_proxy_SARW__, + "sarxl" : __asm_proxy_SARXL__, + "sarxq" : __asm_proxy_SARXQ__, + "sbbb" : __asm_proxy_SBBB__, + "sbbl" : __asm_proxy_SBBL__, + "sbbq" : __asm_proxy_SBBQ__, + "sbbw" : __asm_proxy_SBBW__, + "seta" : __asm_proxy_SETA__, + "setae" : __asm_proxy_SETAE__, + "setb" : __asm_proxy_SETB__, + "setbe" : __asm_proxy_SETBE__, + "setc" : __asm_proxy_SETC__, + "sete" : __asm_proxy_SETE__, + "setg" : __asm_proxy_SETG__, + "setge" : __asm_proxy_SETGE__, + "setl" : __asm_proxy_SETL__, + "setle" : __asm_proxy_SETLE__, + "setna" : __asm_proxy_SETNA__, + "setnae" : __asm_proxy_SETNAE__, + "setnb" : __asm_proxy_SETNB__, + "setnbe" : __asm_proxy_SETNBE__, + "setnc" : __asm_proxy_SETNC__, + "setne" : __asm_proxy_SETNE__, + "setng" : __asm_proxy_SETNG__, + "setnge" : __asm_proxy_SETNGE__, + "setnl" : __asm_proxy_SETNL__, + "setnle" : __asm_proxy_SETNLE__, + "setno" : __asm_proxy_SETNO__, + "setnp" : __asm_proxy_SETNP__, + "setns" : __asm_proxy_SETNS__, + "setnz" : __asm_proxy_SETNZ__, + "seto" : __asm_proxy_SETO__, + "setp" : __asm_proxy_SETP__, + "setpe" : __asm_proxy_SETPE__, + "setpo" : __asm_proxy_SETPO__, + "sets" : __asm_proxy_SETS__, + "setz" : __asm_proxy_SETZ__, + "sfence" : __asm_proxy_SFENCE__, + "sha1msg1" : __asm_proxy_SHA1MSG1__, + "sha1msg2" : __asm_proxy_SHA1MSG2__, + "sha1nexte" : __asm_proxy_SHA1NEXTE__, + "sha1rnds4" : __asm_proxy_SHA1RNDS4__, + "sha256msg1" : __asm_proxy_SHA256MSG1__, + "sha256msg2" : __asm_proxy_SHA256MSG2__, + "sha256rnds2" : __asm_proxy_SHA256RNDS2__, + "shlb" : __asm_proxy_SHLB__, + "shldl" : __asm_proxy_SHLDL__, + "shldq" : __asm_proxy_SHLDQ__, + "shldw" : __asm_proxy_SHLDW__, + "shll" : __asm_proxy_SHLL__, + "shlq" : __asm_proxy_SHLQ__, + "shlw" : __asm_proxy_SHLW__, + "shlxl" : __asm_proxy_SHLXL__, + "shlxq" : __asm_proxy_SHLXQ__, + "shrb" : __asm_proxy_SHRB__, + "shrdl" : __asm_proxy_SHRDL__, + "shrdq" : __asm_proxy_SHRDQ__, + "shrdw" : __asm_proxy_SHRDW__, + "shrl" : __asm_proxy_SHRL__, + "shrq" : __asm_proxy_SHRQ__, + "shrw" : __asm_proxy_SHRW__, + "shrxl" : __asm_proxy_SHRXL__, + "shrxq" : __asm_proxy_SHRXQ__, + "shufpd" : __asm_proxy_SHUFPD__, + "shufps" : __asm_proxy_SHUFPS__, + "sqrtpd" : __asm_proxy_SQRTPD__, + "sqrtps" : __asm_proxy_SQRTPS__, + "sqrtsd" : __asm_proxy_SQRTSD__, + "sqrtss" : __asm_proxy_SQRTSS__, + "stc" : __asm_proxy_STC__, + "std" : __asm_proxy_STD__, + "stmxcsr" : __asm_proxy_STMXCSR__, + "subb" : __asm_proxy_SUBB__, + "subl" : __asm_proxy_SUBL__, + "subpd" : __asm_proxy_SUBPD__, + "subps" : __asm_proxy_SUBPS__, + "subq" : __asm_proxy_SUBQ__, + "subsd" : __asm_proxy_SUBSD__, + "subss" : __asm_proxy_SUBSS__, + "subw" : __asm_proxy_SUBW__, + "syscall" : __asm_proxy_SYSCALL__, + "t1mskc" : __asm_proxy_T1MSKC__, + "testb" : __asm_proxy_TESTB__, + "testl" : __asm_proxy_TESTL__, + "testq" : __asm_proxy_TESTQ__, + "testw" : __asm_proxy_TESTW__, + "tzcntl" : __asm_proxy_TZCNTL__, + "tzcntq" : __asm_proxy_TZCNTQ__, + "tzcntw" : __asm_proxy_TZCNTW__, + "tzmsk" : __asm_proxy_TZMSK__, + "ucomisd" : __asm_proxy_UCOMISD__, + "ucomiss" : __asm_proxy_UCOMISS__, + "ud2" : __asm_proxy_UD2__, + "unpckhpd" : __asm_proxy_UNPCKHPD__, + "unpckhps" : __asm_proxy_UNPCKHPS__, + "unpcklpd" : __asm_proxy_UNPCKLPD__, + "unpcklps" : __asm_proxy_UNPCKLPS__, + "vaddpd" : __asm_proxy_VADDPD__, + "vaddps" : __asm_proxy_VADDPS__, + "vaddsd" : __asm_proxy_VADDSD__, + "vaddss" : __asm_proxy_VADDSS__, + "vaddsubpd" : __asm_proxy_VADDSUBPD__, + "vaddsubps" : __asm_proxy_VADDSUBPS__, + "vaesdec" : __asm_proxy_VAESDEC__, + "vaesdeclast" : __asm_proxy_VAESDECLAST__, + "vaesenc" : __asm_proxy_VAESENC__, + "vaesenclast" : __asm_proxy_VAESENCLAST__, + "vaesimc" : __asm_proxy_VAESIMC__, + "vaeskeygenassist" : __asm_proxy_VAESKEYGENASSIST__, + "valignd" : __asm_proxy_VALIGND__, + "valignq" : __asm_proxy_VALIGNQ__, + "vandnpd" : __asm_proxy_VANDNPD__, + "vandnps" : __asm_proxy_VANDNPS__, + "vandpd" : __asm_proxy_VANDPD__, + "vandps" : __asm_proxy_VANDPS__, + "vblendmpd" : __asm_proxy_VBLENDMPD__, + "vblendmps" : __asm_proxy_VBLENDMPS__, + "vblendpd" : __asm_proxy_VBLENDPD__, + "vblendps" : __asm_proxy_VBLENDPS__, + "vblendvpd" : __asm_proxy_VBLENDVPD__, + "vblendvps" : __asm_proxy_VBLENDVPS__, + "vbroadcastf128" : __asm_proxy_VBROADCASTF128__, + "vbroadcastf32x2" : __asm_proxy_VBROADCASTF32X2__, + "vbroadcastf32x4" : __asm_proxy_VBROADCASTF32X4__, + "vbroadcastf32x8" : __asm_proxy_VBROADCASTF32X8__, + "vbroadcastf64x2" : __asm_proxy_VBROADCASTF64X2__, + "vbroadcastf64x4" : __asm_proxy_VBROADCASTF64X4__, + "vbroadcasti128" : __asm_proxy_VBROADCASTI128__, + "vbroadcasti32x2" : __asm_proxy_VBROADCASTI32X2__, + "vbroadcasti32x4" : __asm_proxy_VBROADCASTI32X4__, + "vbroadcasti32x8" : __asm_proxy_VBROADCASTI32X8__, + "vbroadcasti64x2" : __asm_proxy_VBROADCASTI64X2__, + "vbroadcasti64x4" : __asm_proxy_VBROADCASTI64X4__, + "vbroadcastsd" : __asm_proxy_VBROADCASTSD__, + "vbroadcastss" : __asm_proxy_VBROADCASTSS__, + "vcmppd" : __asm_proxy_VCMPPD__, + "vcmpps" : __asm_proxy_VCMPPS__, + "vcmpsd" : __asm_proxy_VCMPSD__, + "vcmpss" : __asm_proxy_VCMPSS__, + "vcomisd" : __asm_proxy_VCOMISD__, + "vcomiss" : __asm_proxy_VCOMISS__, + "vcompresspd" : __asm_proxy_VCOMPRESSPD__, + "vcompressps" : __asm_proxy_VCOMPRESSPS__, + "vcvtdq2pd" : __asm_proxy_VCVTDQ2PD__, + "vcvtdq2ps" : __asm_proxy_VCVTDQ2PS__, + "vcvtpd2dq" : __asm_proxy_VCVTPD2DQ__, + "vcvtpd2ps" : __asm_proxy_VCVTPD2PS__, + "vcvtpd2qq" : __asm_proxy_VCVTPD2QQ__, + "vcvtpd2udq" : __asm_proxy_VCVTPD2UDQ__, + "vcvtpd2uqq" : __asm_proxy_VCVTPD2UQQ__, + "vcvtph2ps" : __asm_proxy_VCVTPH2PS__, + "vcvtps2dq" : __asm_proxy_VCVTPS2DQ__, + "vcvtps2pd" : __asm_proxy_VCVTPS2PD__, + "vcvtps2ph" : __asm_proxy_VCVTPS2PH__, + "vcvtps2qq" : __asm_proxy_VCVTPS2QQ__, + "vcvtps2udq" : __asm_proxy_VCVTPS2UDQ__, + "vcvtps2uqq" : __asm_proxy_VCVTPS2UQQ__, + "vcvtqq2pd" : __asm_proxy_VCVTQQ2PD__, + "vcvtqq2ps" : __asm_proxy_VCVTQQ2PS__, + "vcvtsd2si" : __asm_proxy_VCVTSD2SI__, + "vcvtsd2ss" : __asm_proxy_VCVTSD2SS__, + "vcvtsd2usi" : __asm_proxy_VCVTSD2USI__, + "vcvtsi2sd" : __asm_proxy_VCVTSI2SD__, + "vcvtsi2ss" : __asm_proxy_VCVTSI2SS__, + "vcvtss2sd" : __asm_proxy_VCVTSS2SD__, + "vcvtss2si" : __asm_proxy_VCVTSS2SI__, + "vcvtss2usi" : __asm_proxy_VCVTSS2USI__, + "vcvttpd2dq" : __asm_proxy_VCVTTPD2DQ__, + "vcvttpd2qq" : __asm_proxy_VCVTTPD2QQ__, + "vcvttpd2udq" : __asm_proxy_VCVTTPD2UDQ__, + "vcvttpd2uqq" : __asm_proxy_VCVTTPD2UQQ__, + "vcvttps2dq" : __asm_proxy_VCVTTPS2DQ__, + "vcvttps2qq" : __asm_proxy_VCVTTPS2QQ__, + "vcvttps2udq" : __asm_proxy_VCVTTPS2UDQ__, + "vcvttps2uqq" : __asm_proxy_VCVTTPS2UQQ__, + "vcvttsd2si" : __asm_proxy_VCVTTSD2SI__, + "vcvttsd2usi" : __asm_proxy_VCVTTSD2USI__, + "vcvttss2si" : __asm_proxy_VCVTTSS2SI__, + "vcvttss2usi" : __asm_proxy_VCVTTSS2USI__, + "vcvtudq2pd" : __asm_proxy_VCVTUDQ2PD__, + "vcvtudq2ps" : __asm_proxy_VCVTUDQ2PS__, + "vcvtuqq2pd" : __asm_proxy_VCVTUQQ2PD__, + "vcvtuqq2ps" : __asm_proxy_VCVTUQQ2PS__, + "vcvtusi2sd" : __asm_proxy_VCVTUSI2SD__, + "vcvtusi2ss" : __asm_proxy_VCVTUSI2SS__, + "vdbpsadbw" : __asm_proxy_VDBPSADBW__, + "vdivpd" : __asm_proxy_VDIVPD__, + "vdivps" : __asm_proxy_VDIVPS__, + "vdivsd" : __asm_proxy_VDIVSD__, + "vdivss" : __asm_proxy_VDIVSS__, + "vdppd" : __asm_proxy_VDPPD__, + "vdpps" : __asm_proxy_VDPPS__, + "vexp2pd" : __asm_proxy_VEXP2PD__, + "vexp2ps" : __asm_proxy_VEXP2PS__, + "vexpandpd" : __asm_proxy_VEXPANDPD__, + "vexpandps" : __asm_proxy_VEXPANDPS__, + "vextractf128" : __asm_proxy_VEXTRACTF128__, + "vextractf32x4" : __asm_proxy_VEXTRACTF32X4__, + "vextractf32x8" : __asm_proxy_VEXTRACTF32X8__, + "vextractf64x2" : __asm_proxy_VEXTRACTF64X2__, + "vextractf64x4" : __asm_proxy_VEXTRACTF64X4__, + "vextracti128" : __asm_proxy_VEXTRACTI128__, + "vextracti32x4" : __asm_proxy_VEXTRACTI32X4__, + "vextracti32x8" : __asm_proxy_VEXTRACTI32X8__, + "vextracti64x2" : __asm_proxy_VEXTRACTI64X2__, + "vextracti64x4" : __asm_proxy_VEXTRACTI64X4__, + "vextractps" : __asm_proxy_VEXTRACTPS__, + "vfixupimmpd" : __asm_proxy_VFIXUPIMMPD__, + "vfixupimmps" : __asm_proxy_VFIXUPIMMPS__, + "vfixupimmsd" : __asm_proxy_VFIXUPIMMSD__, + "vfixupimmss" : __asm_proxy_VFIXUPIMMSS__, + "vfmadd132pd" : __asm_proxy_VFMADD132PD__, + "vfmadd132ps" : __asm_proxy_VFMADD132PS__, + "vfmadd132sd" : __asm_proxy_VFMADD132SD__, + "vfmadd132ss" : __asm_proxy_VFMADD132SS__, + "vfmadd213pd" : __asm_proxy_VFMADD213PD__, + "vfmadd213ps" : __asm_proxy_VFMADD213PS__, + "vfmadd213sd" : __asm_proxy_VFMADD213SD__, + "vfmadd213ss" : __asm_proxy_VFMADD213SS__, + "vfmadd231pd" : __asm_proxy_VFMADD231PD__, + "vfmadd231ps" : __asm_proxy_VFMADD231PS__, + "vfmadd231sd" : __asm_proxy_VFMADD231SD__, + "vfmadd231ss" : __asm_proxy_VFMADD231SS__, + "vfmaddpd" : __asm_proxy_VFMADDPD__, + "vfmaddps" : __asm_proxy_VFMADDPS__, + "vfmaddsd" : __asm_proxy_VFMADDSD__, + "vfmaddss" : __asm_proxy_VFMADDSS__, + "vfmaddsub132pd" : __asm_proxy_VFMADDSUB132PD__, + "vfmaddsub132ps" : __asm_proxy_VFMADDSUB132PS__, + "vfmaddsub213pd" : __asm_proxy_VFMADDSUB213PD__, + "vfmaddsub213ps" : __asm_proxy_VFMADDSUB213PS__, + "vfmaddsub231pd" : __asm_proxy_VFMADDSUB231PD__, + "vfmaddsub231ps" : __asm_proxy_VFMADDSUB231PS__, + "vfmaddsubpd" : __asm_proxy_VFMADDSUBPD__, + "vfmaddsubps" : __asm_proxy_VFMADDSUBPS__, + "vfmsub132pd" : __asm_proxy_VFMSUB132PD__, + "vfmsub132ps" : __asm_proxy_VFMSUB132PS__, + "vfmsub132sd" : __asm_proxy_VFMSUB132SD__, + "vfmsub132ss" : __asm_proxy_VFMSUB132SS__, + "vfmsub213pd" : __asm_proxy_VFMSUB213PD__, + "vfmsub213ps" : __asm_proxy_VFMSUB213PS__, + "vfmsub213sd" : __asm_proxy_VFMSUB213SD__, + "vfmsub213ss" : __asm_proxy_VFMSUB213SS__, + "vfmsub231pd" : __asm_proxy_VFMSUB231PD__, + "vfmsub231ps" : __asm_proxy_VFMSUB231PS__, + "vfmsub231sd" : __asm_proxy_VFMSUB231SD__, + "vfmsub231ss" : __asm_proxy_VFMSUB231SS__, + "vfmsubadd132pd" : __asm_proxy_VFMSUBADD132PD__, + "vfmsubadd132ps" : __asm_proxy_VFMSUBADD132PS__, + "vfmsubadd213pd" : __asm_proxy_VFMSUBADD213PD__, + "vfmsubadd213ps" : __asm_proxy_VFMSUBADD213PS__, + "vfmsubadd231pd" : __asm_proxy_VFMSUBADD231PD__, + "vfmsubadd231ps" : __asm_proxy_VFMSUBADD231PS__, + "vfmsubaddpd" : __asm_proxy_VFMSUBADDPD__, + "vfmsubaddps" : __asm_proxy_VFMSUBADDPS__, + "vfmsubpd" : __asm_proxy_VFMSUBPD__, + "vfmsubps" : __asm_proxy_VFMSUBPS__, + "vfmsubsd" : __asm_proxy_VFMSUBSD__, + "vfmsubss" : __asm_proxy_VFMSUBSS__, + "vfnmadd132pd" : __asm_proxy_VFNMADD132PD__, + "vfnmadd132ps" : __asm_proxy_VFNMADD132PS__, + "vfnmadd132sd" : __asm_proxy_VFNMADD132SD__, + "vfnmadd132ss" : __asm_proxy_VFNMADD132SS__, + "vfnmadd213pd" : __asm_proxy_VFNMADD213PD__, + "vfnmadd213ps" : __asm_proxy_VFNMADD213PS__, + "vfnmadd213sd" : __asm_proxy_VFNMADD213SD__, + "vfnmadd213ss" : __asm_proxy_VFNMADD213SS__, + "vfnmadd231pd" : __asm_proxy_VFNMADD231PD__, + "vfnmadd231ps" : __asm_proxy_VFNMADD231PS__, + "vfnmadd231sd" : __asm_proxy_VFNMADD231SD__, + "vfnmadd231ss" : __asm_proxy_VFNMADD231SS__, + "vfnmaddpd" : __asm_proxy_VFNMADDPD__, + "vfnmaddps" : __asm_proxy_VFNMADDPS__, + "vfnmaddsd" : __asm_proxy_VFNMADDSD__, + "vfnmaddss" : __asm_proxy_VFNMADDSS__, + "vfnmsub132pd" : __asm_proxy_VFNMSUB132PD__, + "vfnmsub132ps" : __asm_proxy_VFNMSUB132PS__, + "vfnmsub132sd" : __asm_proxy_VFNMSUB132SD__, + "vfnmsub132ss" : __asm_proxy_VFNMSUB132SS__, + "vfnmsub213pd" : __asm_proxy_VFNMSUB213PD__, + "vfnmsub213ps" : __asm_proxy_VFNMSUB213PS__, + "vfnmsub213sd" : __asm_proxy_VFNMSUB213SD__, + "vfnmsub213ss" : __asm_proxy_VFNMSUB213SS__, + "vfnmsub231pd" : __asm_proxy_VFNMSUB231PD__, + "vfnmsub231ps" : __asm_proxy_VFNMSUB231PS__, + "vfnmsub231sd" : __asm_proxy_VFNMSUB231SD__, + "vfnmsub231ss" : __asm_proxy_VFNMSUB231SS__, + "vfnmsubpd" : __asm_proxy_VFNMSUBPD__, + "vfnmsubps" : __asm_proxy_VFNMSUBPS__, + "vfnmsubsd" : __asm_proxy_VFNMSUBSD__, + "vfnmsubss" : __asm_proxy_VFNMSUBSS__, + "vfpclasspd" : __asm_proxy_VFPCLASSPD__, + "vfpclassps" : __asm_proxy_VFPCLASSPS__, + "vfpclasssd" : __asm_proxy_VFPCLASSSD__, + "vfpclassss" : __asm_proxy_VFPCLASSSS__, + "vfrczpd" : __asm_proxy_VFRCZPD__, + "vfrczps" : __asm_proxy_VFRCZPS__, + "vfrczsd" : __asm_proxy_VFRCZSD__, + "vfrczss" : __asm_proxy_VFRCZSS__, + "vgatherdpd" : __asm_proxy_VGATHERDPD__, + "vgatherdps" : __asm_proxy_VGATHERDPS__, + "vgatherpf0dpd" : __asm_proxy_VGATHERPF0DPD__, + "vgatherpf0dps" : __asm_proxy_VGATHERPF0DPS__, + "vgatherpf0qpd" : __asm_proxy_VGATHERPF0QPD__, + "vgatherpf0qps" : __asm_proxy_VGATHERPF0QPS__, + "vgatherpf1dpd" : __asm_proxy_VGATHERPF1DPD__, + "vgatherpf1dps" : __asm_proxy_VGATHERPF1DPS__, + "vgatherpf1qpd" : __asm_proxy_VGATHERPF1QPD__, + "vgatherpf1qps" : __asm_proxy_VGATHERPF1QPS__, + "vgatherqpd" : __asm_proxy_VGATHERQPD__, + "vgatherqps" : __asm_proxy_VGATHERQPS__, + "vgetexppd" : __asm_proxy_VGETEXPPD__, + "vgetexpps" : __asm_proxy_VGETEXPPS__, + "vgetexpsd" : __asm_proxy_VGETEXPSD__, + "vgetexpss" : __asm_proxy_VGETEXPSS__, + "vgetmantpd" : __asm_proxy_VGETMANTPD__, + "vgetmantps" : __asm_proxy_VGETMANTPS__, + "vgetmantsd" : __asm_proxy_VGETMANTSD__, + "vgetmantss" : __asm_proxy_VGETMANTSS__, + "vhaddpd" : __asm_proxy_VHADDPD__, + "vhaddps" : __asm_proxy_VHADDPS__, + "vhsubpd" : __asm_proxy_VHSUBPD__, + "vhsubps" : __asm_proxy_VHSUBPS__, + "vinsertf128" : __asm_proxy_VINSERTF128__, + "vinsertf32x4" : __asm_proxy_VINSERTF32X4__, + "vinsertf32x8" : __asm_proxy_VINSERTF32X8__, + "vinsertf64x2" : __asm_proxy_VINSERTF64X2__, + "vinsertf64x4" : __asm_proxy_VINSERTF64X4__, + "vinserti128" : __asm_proxy_VINSERTI128__, + "vinserti32x4" : __asm_proxy_VINSERTI32X4__, + "vinserti32x8" : __asm_proxy_VINSERTI32X8__, + "vinserti64x2" : __asm_proxy_VINSERTI64X2__, + "vinserti64x4" : __asm_proxy_VINSERTI64X4__, + "vinsertps" : __asm_proxy_VINSERTPS__, + "vlddqu" : __asm_proxy_VLDDQU__, + "vldmxcsr" : __asm_proxy_VLDMXCSR__, + "vmaskmovdqu" : __asm_proxy_VMASKMOVDQU__, + "vmaskmovpd" : __asm_proxy_VMASKMOVPD__, + "vmaskmovps" : __asm_proxy_VMASKMOVPS__, + "vmaxpd" : __asm_proxy_VMAXPD__, + "vmaxps" : __asm_proxy_VMAXPS__, + "vmaxsd" : __asm_proxy_VMAXSD__, + "vmaxss" : __asm_proxy_VMAXSS__, + "vminpd" : __asm_proxy_VMINPD__, + "vminps" : __asm_proxy_VMINPS__, + "vminsd" : __asm_proxy_VMINSD__, + "vminss" : __asm_proxy_VMINSS__, + "vmovapd" : __asm_proxy_VMOVAPD__, + "vmovaps" : __asm_proxy_VMOVAPS__, + "vmovd" : __asm_proxy_VMOVD__, + "vmovddup" : __asm_proxy_VMOVDDUP__, + "vmovdqa" : __asm_proxy_VMOVDQA__, + "vmovdqa32" : __asm_proxy_VMOVDQA32__, + "vmovdqa64" : __asm_proxy_VMOVDQA64__, + "vmovdqu" : __asm_proxy_VMOVDQU__, + "vmovdqu16" : __asm_proxy_VMOVDQU16__, + "vmovdqu32" : __asm_proxy_VMOVDQU32__, + "vmovdqu64" : __asm_proxy_VMOVDQU64__, + "vmovdqu8" : __asm_proxy_VMOVDQU8__, + "vmovhlps" : __asm_proxy_VMOVHLPS__, + "vmovhpd" : __asm_proxy_VMOVHPD__, + "vmovhps" : __asm_proxy_VMOVHPS__, + "vmovlhps" : __asm_proxy_VMOVLHPS__, + "vmovlpd" : __asm_proxy_VMOVLPD__, + "vmovlps" : __asm_proxy_VMOVLPS__, + "vmovmskpd" : __asm_proxy_VMOVMSKPD__, + "vmovmskps" : __asm_proxy_VMOVMSKPS__, + "vmovntdq" : __asm_proxy_VMOVNTDQ__, + "vmovntdqa" : __asm_proxy_VMOVNTDQA__, + "vmovntpd" : __asm_proxy_VMOVNTPD__, + "vmovntps" : __asm_proxy_VMOVNTPS__, + "vmovq" : __asm_proxy_VMOVQ__, + "vmovsd" : __asm_proxy_VMOVSD__, + "vmovshdup" : __asm_proxy_VMOVSHDUP__, + "vmovsldup" : __asm_proxy_VMOVSLDUP__, + "vmovss" : __asm_proxy_VMOVSS__, + "vmovupd" : __asm_proxy_VMOVUPD__, + "vmovups" : __asm_proxy_VMOVUPS__, + "vmpsadbw" : __asm_proxy_VMPSADBW__, + "vmulpd" : __asm_proxy_VMULPD__, + "vmulps" : __asm_proxy_VMULPS__, + "vmulsd" : __asm_proxy_VMULSD__, + "vmulss" : __asm_proxy_VMULSS__, + "vorpd" : __asm_proxy_VORPD__, + "vorps" : __asm_proxy_VORPS__, + "vpabsb" : __asm_proxy_VPABSB__, + "vpabsd" : __asm_proxy_VPABSD__, + "vpabsq" : __asm_proxy_VPABSQ__, + "vpabsw" : __asm_proxy_VPABSW__, + "vpackssdw" : __asm_proxy_VPACKSSDW__, + "vpacksswb" : __asm_proxy_VPACKSSWB__, + "vpackusdw" : __asm_proxy_VPACKUSDW__, + "vpackuswb" : __asm_proxy_VPACKUSWB__, + "vpaddb" : __asm_proxy_VPADDB__, + "vpaddd" : __asm_proxy_VPADDD__, + "vpaddq" : __asm_proxy_VPADDQ__, + "vpaddsb" : __asm_proxy_VPADDSB__, + "vpaddsw" : __asm_proxy_VPADDSW__, + "vpaddusb" : __asm_proxy_VPADDUSB__, + "vpaddusw" : __asm_proxy_VPADDUSW__, + "vpaddw" : __asm_proxy_VPADDW__, + "vpalignr" : __asm_proxy_VPALIGNR__, + "vpand" : __asm_proxy_VPAND__, + "vpandd" : __asm_proxy_VPANDD__, + "vpandn" : __asm_proxy_VPANDN__, + "vpandnd" : __asm_proxy_VPANDND__, + "vpandnq" : __asm_proxy_VPANDNQ__, + "vpandq" : __asm_proxy_VPANDQ__, + "vpavgb" : __asm_proxy_VPAVGB__, + "vpavgw" : __asm_proxy_VPAVGW__, + "vpblendd" : __asm_proxy_VPBLENDD__, + "vpblendmb" : __asm_proxy_VPBLENDMB__, + "vpblendmd" : __asm_proxy_VPBLENDMD__, + "vpblendmq" : __asm_proxy_VPBLENDMQ__, + "vpblendmw" : __asm_proxy_VPBLENDMW__, + "vpblendvb" : __asm_proxy_VPBLENDVB__, + "vpblendw" : __asm_proxy_VPBLENDW__, + "vpbroadcastb" : __asm_proxy_VPBROADCASTB__, + "vpbroadcastd" : __asm_proxy_VPBROADCASTD__, + "vpbroadcastmb2q" : __asm_proxy_VPBROADCASTMB2Q__, + "vpbroadcastmw2d" : __asm_proxy_VPBROADCASTMW2D__, + "vpbroadcastq" : __asm_proxy_VPBROADCASTQ__, + "vpbroadcastw" : __asm_proxy_VPBROADCASTW__, + "vpclmulqdq" : __asm_proxy_VPCLMULQDQ__, + "vpcmov" : __asm_proxy_VPCMOV__, + "vpcmpb" : __asm_proxy_VPCMPB__, + "vpcmpd" : __asm_proxy_VPCMPD__, + "vpcmpeqb" : __asm_proxy_VPCMPEQB__, + "vpcmpeqd" : __asm_proxy_VPCMPEQD__, + "vpcmpeqq" : __asm_proxy_VPCMPEQQ__, + "vpcmpeqw" : __asm_proxy_VPCMPEQW__, + "vpcmpestri" : __asm_proxy_VPCMPESTRI__, + "vpcmpestrm" : __asm_proxy_VPCMPESTRM__, + "vpcmpgtb" : __asm_proxy_VPCMPGTB__, + "vpcmpgtd" : __asm_proxy_VPCMPGTD__, + "vpcmpgtq" : __asm_proxy_VPCMPGTQ__, + "vpcmpgtw" : __asm_proxy_VPCMPGTW__, + "vpcmpistri" : __asm_proxy_VPCMPISTRI__, + "vpcmpistrm" : __asm_proxy_VPCMPISTRM__, + "vpcmpq" : __asm_proxy_VPCMPQ__, + "vpcmpub" : __asm_proxy_VPCMPUB__, + "vpcmpud" : __asm_proxy_VPCMPUD__, + "vpcmpuq" : __asm_proxy_VPCMPUQ__, + "vpcmpuw" : __asm_proxy_VPCMPUW__, + "vpcmpw" : __asm_proxy_VPCMPW__, + "vpcomb" : __asm_proxy_VPCOMB__, + "vpcomd" : __asm_proxy_VPCOMD__, + "vpcompressd" : __asm_proxy_VPCOMPRESSD__, + "vpcompressq" : __asm_proxy_VPCOMPRESSQ__, + "vpcomq" : __asm_proxy_VPCOMQ__, + "vpcomub" : __asm_proxy_VPCOMUB__, + "vpcomud" : __asm_proxy_VPCOMUD__, + "vpcomuq" : __asm_proxy_VPCOMUQ__, + "vpcomuw" : __asm_proxy_VPCOMUW__, + "vpcomw" : __asm_proxy_VPCOMW__, + "vpconflictd" : __asm_proxy_VPCONFLICTD__, + "vpconflictq" : __asm_proxy_VPCONFLICTQ__, + "vperm2f128" : __asm_proxy_VPERM2F128__, + "vperm2i128" : __asm_proxy_VPERM2I128__, + "vpermb" : __asm_proxy_VPERMB__, + "vpermd" : __asm_proxy_VPERMD__, + "vpermi2b" : __asm_proxy_VPERMI2B__, + "vpermi2d" : __asm_proxy_VPERMI2D__, + "vpermi2pd" : __asm_proxy_VPERMI2PD__, + "vpermi2ps" : __asm_proxy_VPERMI2PS__, + "vpermi2q" : __asm_proxy_VPERMI2Q__, + "vpermi2w" : __asm_proxy_VPERMI2W__, + "vpermil2pd" : __asm_proxy_VPERMIL2PD__, + "vpermil2ps" : __asm_proxy_VPERMIL2PS__, + "vpermilpd" : __asm_proxy_VPERMILPD__, + "vpermilps" : __asm_proxy_VPERMILPS__, + "vpermpd" : __asm_proxy_VPERMPD__, + "vpermps" : __asm_proxy_VPERMPS__, + "vpermq" : __asm_proxy_VPERMQ__, + "vpermt2b" : __asm_proxy_VPERMT2B__, + "vpermt2d" : __asm_proxy_VPERMT2D__, + "vpermt2pd" : __asm_proxy_VPERMT2PD__, + "vpermt2ps" : __asm_proxy_VPERMT2PS__, + "vpermt2q" : __asm_proxy_VPERMT2Q__, + "vpermt2w" : __asm_proxy_VPERMT2W__, + "vpermw" : __asm_proxy_VPERMW__, + "vpexpandd" : __asm_proxy_VPEXPANDD__, + "vpexpandq" : __asm_proxy_VPEXPANDQ__, + "vpextrb" : __asm_proxy_VPEXTRB__, + "vpextrd" : __asm_proxy_VPEXTRD__, + "vpextrq" : __asm_proxy_VPEXTRQ__, + "vpextrw" : __asm_proxy_VPEXTRW__, + "vpgatherdd" : __asm_proxy_VPGATHERDD__, + "vpgatherdq" : __asm_proxy_VPGATHERDQ__, + "vpgatherqd" : __asm_proxy_VPGATHERQD__, + "vpgatherqq" : __asm_proxy_VPGATHERQQ__, + "vphaddbd" : __asm_proxy_VPHADDBD__, + "vphaddbq" : __asm_proxy_VPHADDBQ__, + "vphaddbw" : __asm_proxy_VPHADDBW__, + "vphaddd" : __asm_proxy_VPHADDD__, + "vphadddq" : __asm_proxy_VPHADDDQ__, + "vphaddsw" : __asm_proxy_VPHADDSW__, + "vphaddubd" : __asm_proxy_VPHADDUBD__, + "vphaddubq" : __asm_proxy_VPHADDUBQ__, + "vphaddubw" : __asm_proxy_VPHADDUBW__, + "vphaddudq" : __asm_proxy_VPHADDUDQ__, + "vphadduwd" : __asm_proxy_VPHADDUWD__, + "vphadduwq" : __asm_proxy_VPHADDUWQ__, + "vphaddw" : __asm_proxy_VPHADDW__, + "vphaddwd" : __asm_proxy_VPHADDWD__, + "vphaddwq" : __asm_proxy_VPHADDWQ__, + "vphminposuw" : __asm_proxy_VPHMINPOSUW__, + "vphsubbw" : __asm_proxy_VPHSUBBW__, + "vphsubd" : __asm_proxy_VPHSUBD__, + "vphsubdq" : __asm_proxy_VPHSUBDQ__, + "vphsubsw" : __asm_proxy_VPHSUBSW__, + "vphsubw" : __asm_proxy_VPHSUBW__, + "vphsubwd" : __asm_proxy_VPHSUBWD__, + "vpinsrb" : __asm_proxy_VPINSRB__, + "vpinsrd" : __asm_proxy_VPINSRD__, + "vpinsrq" : __asm_proxy_VPINSRQ__, + "vpinsrw" : __asm_proxy_VPINSRW__, + "vplzcntd" : __asm_proxy_VPLZCNTD__, + "vplzcntq" : __asm_proxy_VPLZCNTQ__, + "vpmacsdd" : __asm_proxy_VPMACSDD__, + "vpmacsdqh" : __asm_proxy_VPMACSDQH__, + "vpmacsdql" : __asm_proxy_VPMACSDQL__, + "vpmacssdd" : __asm_proxy_VPMACSSDD__, + "vpmacssdqh" : __asm_proxy_VPMACSSDQH__, + "vpmacssdql" : __asm_proxy_VPMACSSDQL__, + "vpmacsswd" : __asm_proxy_VPMACSSWD__, + "vpmacssww" : __asm_proxy_VPMACSSWW__, + "vpmacswd" : __asm_proxy_VPMACSWD__, + "vpmacsww" : __asm_proxy_VPMACSWW__, + "vpmadcsswd" : __asm_proxy_VPMADCSSWD__, + "vpmadcswd" : __asm_proxy_VPMADCSWD__, + "vpmadd52huq" : __asm_proxy_VPMADD52HUQ__, + "vpmadd52luq" : __asm_proxy_VPMADD52LUQ__, + "vpmaddubsw" : __asm_proxy_VPMADDUBSW__, + "vpmaddwd" : __asm_proxy_VPMADDWD__, + "vpmaskmovd" : __asm_proxy_VPMASKMOVD__, + "vpmaskmovq" : __asm_proxy_VPMASKMOVQ__, + "vpmaxsb" : __asm_proxy_VPMAXSB__, + "vpmaxsd" : __asm_proxy_VPMAXSD__, + "vpmaxsq" : __asm_proxy_VPMAXSQ__, + "vpmaxsw" : __asm_proxy_VPMAXSW__, + "vpmaxub" : __asm_proxy_VPMAXUB__, + "vpmaxud" : __asm_proxy_VPMAXUD__, + "vpmaxuq" : __asm_proxy_VPMAXUQ__, + "vpmaxuw" : __asm_proxy_VPMAXUW__, + "vpminsb" : __asm_proxy_VPMINSB__, + "vpminsd" : __asm_proxy_VPMINSD__, + "vpminsq" : __asm_proxy_VPMINSQ__, + "vpminsw" : __asm_proxy_VPMINSW__, + "vpminub" : __asm_proxy_VPMINUB__, + "vpminud" : __asm_proxy_VPMINUD__, + "vpminuq" : __asm_proxy_VPMINUQ__, + "vpminuw" : __asm_proxy_VPMINUW__, + "vpmovb2m" : __asm_proxy_VPMOVB2M__, + "vpmovd2m" : __asm_proxy_VPMOVD2M__, + "vpmovdb" : __asm_proxy_VPMOVDB__, + "vpmovdw" : __asm_proxy_VPMOVDW__, + "vpmovm2b" : __asm_proxy_VPMOVM2B__, + "vpmovm2d" : __asm_proxy_VPMOVM2D__, + "vpmovm2q" : __asm_proxy_VPMOVM2Q__, + "vpmovm2w" : __asm_proxy_VPMOVM2W__, + "vpmovmskb" : __asm_proxy_VPMOVMSKB__, + "vpmovq2m" : __asm_proxy_VPMOVQ2M__, + "vpmovqb" : __asm_proxy_VPMOVQB__, + "vpmovqd" : __asm_proxy_VPMOVQD__, + "vpmovqw" : __asm_proxy_VPMOVQW__, + "vpmovsdb" : __asm_proxy_VPMOVSDB__, + "vpmovsdw" : __asm_proxy_VPMOVSDW__, + "vpmovsqb" : __asm_proxy_VPMOVSQB__, + "vpmovsqd" : __asm_proxy_VPMOVSQD__, + "vpmovsqw" : __asm_proxy_VPMOVSQW__, + "vpmovswb" : __asm_proxy_VPMOVSWB__, + "vpmovsxbd" : __asm_proxy_VPMOVSXBD__, + "vpmovsxbq" : __asm_proxy_VPMOVSXBQ__, + "vpmovsxbw" : __asm_proxy_VPMOVSXBW__, + "vpmovsxdq" : __asm_proxy_VPMOVSXDQ__, + "vpmovsxwd" : __asm_proxy_VPMOVSXWD__, + "vpmovsxwq" : __asm_proxy_VPMOVSXWQ__, + "vpmovusdb" : __asm_proxy_VPMOVUSDB__, + "vpmovusdw" : __asm_proxy_VPMOVUSDW__, + "vpmovusqb" : __asm_proxy_VPMOVUSQB__, + "vpmovusqd" : __asm_proxy_VPMOVUSQD__, + "vpmovusqw" : __asm_proxy_VPMOVUSQW__, + "vpmovuswb" : __asm_proxy_VPMOVUSWB__, + "vpmovw2m" : __asm_proxy_VPMOVW2M__, + "vpmovwb" : __asm_proxy_VPMOVWB__, + "vpmovzxbd" : __asm_proxy_VPMOVZXBD__, + "vpmovzxbq" : __asm_proxy_VPMOVZXBQ__, + "vpmovzxbw" : __asm_proxy_VPMOVZXBW__, + "vpmovzxdq" : __asm_proxy_VPMOVZXDQ__, + "vpmovzxwd" : __asm_proxy_VPMOVZXWD__, + "vpmovzxwq" : __asm_proxy_VPMOVZXWQ__, + "vpmuldq" : __asm_proxy_VPMULDQ__, + "vpmulhrsw" : __asm_proxy_VPMULHRSW__, + "vpmulhuw" : __asm_proxy_VPMULHUW__, + "vpmulhw" : __asm_proxy_VPMULHW__, + "vpmulld" : __asm_proxy_VPMULLD__, + "vpmullq" : __asm_proxy_VPMULLQ__, + "vpmullw" : __asm_proxy_VPMULLW__, + "vpmultishiftqb" : __asm_proxy_VPMULTISHIFTQB__, + "vpmuludq" : __asm_proxy_VPMULUDQ__, + "vpopcntd" : __asm_proxy_VPOPCNTD__, + "vpopcntq" : __asm_proxy_VPOPCNTQ__, + "vpor" : __asm_proxy_VPOR__, + "vpord" : __asm_proxy_VPORD__, + "vporq" : __asm_proxy_VPORQ__, + "vpperm" : __asm_proxy_VPPERM__, + "vprold" : __asm_proxy_VPROLD__, + "vprolq" : __asm_proxy_VPROLQ__, + "vprolvd" : __asm_proxy_VPROLVD__, + "vprolvq" : __asm_proxy_VPROLVQ__, + "vprord" : __asm_proxy_VPRORD__, + "vprorq" : __asm_proxy_VPRORQ__, + "vprorvd" : __asm_proxy_VPRORVD__, + "vprorvq" : __asm_proxy_VPRORVQ__, + "vprotb" : __asm_proxy_VPROTB__, + "vprotd" : __asm_proxy_VPROTD__, + "vprotq" : __asm_proxy_VPROTQ__, + "vprotw" : __asm_proxy_VPROTW__, + "vpsadbw" : __asm_proxy_VPSADBW__, + "vpscatterdd" : __asm_proxy_VPSCATTERDD__, + "vpscatterdq" : __asm_proxy_VPSCATTERDQ__, + "vpscatterqd" : __asm_proxy_VPSCATTERQD__, + "vpscatterqq" : __asm_proxy_VPSCATTERQQ__, + "vpshab" : __asm_proxy_VPSHAB__, + "vpshad" : __asm_proxy_VPSHAD__, + "vpshaq" : __asm_proxy_VPSHAQ__, + "vpshaw" : __asm_proxy_VPSHAW__, + "vpshlb" : __asm_proxy_VPSHLB__, + "vpshld" : __asm_proxy_VPSHLD__, + "vpshlq" : __asm_proxy_VPSHLQ__, + "vpshlw" : __asm_proxy_VPSHLW__, + "vpshufb" : __asm_proxy_VPSHUFB__, + "vpshufd" : __asm_proxy_VPSHUFD__, + "vpshufhw" : __asm_proxy_VPSHUFHW__, + "vpshuflw" : __asm_proxy_VPSHUFLW__, + "vpsignb" : __asm_proxy_VPSIGNB__, + "vpsignd" : __asm_proxy_VPSIGND__, + "vpsignw" : __asm_proxy_VPSIGNW__, + "vpslld" : __asm_proxy_VPSLLD__, + "vpslldq" : __asm_proxy_VPSLLDQ__, + "vpsllq" : __asm_proxy_VPSLLQ__, + "vpsllvd" : __asm_proxy_VPSLLVD__, + "vpsllvq" : __asm_proxy_VPSLLVQ__, + "vpsllvw" : __asm_proxy_VPSLLVW__, + "vpsllw" : __asm_proxy_VPSLLW__, + "vpsrad" : __asm_proxy_VPSRAD__, + "vpsraq" : __asm_proxy_VPSRAQ__, + "vpsravd" : __asm_proxy_VPSRAVD__, + "vpsravq" : __asm_proxy_VPSRAVQ__, + "vpsravw" : __asm_proxy_VPSRAVW__, + "vpsraw" : __asm_proxy_VPSRAW__, + "vpsrld" : __asm_proxy_VPSRLD__, + "vpsrldq" : __asm_proxy_VPSRLDQ__, + "vpsrlq" : __asm_proxy_VPSRLQ__, + "vpsrlvd" : __asm_proxy_VPSRLVD__, + "vpsrlvq" : __asm_proxy_VPSRLVQ__, + "vpsrlvw" : __asm_proxy_VPSRLVW__, + "vpsrlw" : __asm_proxy_VPSRLW__, + "vpsubb" : __asm_proxy_VPSUBB__, + "vpsubd" : __asm_proxy_VPSUBD__, + "vpsubq" : __asm_proxy_VPSUBQ__, + "vpsubsb" : __asm_proxy_VPSUBSB__, + "vpsubsw" : __asm_proxy_VPSUBSW__, + "vpsubusb" : __asm_proxy_VPSUBUSB__, + "vpsubusw" : __asm_proxy_VPSUBUSW__, + "vpsubw" : __asm_proxy_VPSUBW__, + "vpternlogd" : __asm_proxy_VPTERNLOGD__, + "vpternlogq" : __asm_proxy_VPTERNLOGQ__, + "vptest" : __asm_proxy_VPTEST__, + "vptestmb" : __asm_proxy_VPTESTMB__, + "vptestmd" : __asm_proxy_VPTESTMD__, + "vptestmq" : __asm_proxy_VPTESTMQ__, + "vptestmw" : __asm_proxy_VPTESTMW__, + "vptestnmb" : __asm_proxy_VPTESTNMB__, + "vptestnmd" : __asm_proxy_VPTESTNMD__, + "vptestnmq" : __asm_proxy_VPTESTNMQ__, + "vptestnmw" : __asm_proxy_VPTESTNMW__, + "vpunpckhbw" : __asm_proxy_VPUNPCKHBW__, + "vpunpckhdq" : __asm_proxy_VPUNPCKHDQ__, + "vpunpckhqdq" : __asm_proxy_VPUNPCKHQDQ__, + "vpunpckhwd" : __asm_proxy_VPUNPCKHWD__, + "vpunpcklbw" : __asm_proxy_VPUNPCKLBW__, + "vpunpckldq" : __asm_proxy_VPUNPCKLDQ__, + "vpunpcklqdq" : __asm_proxy_VPUNPCKLQDQ__, + "vpunpcklwd" : __asm_proxy_VPUNPCKLWD__, + "vpxor" : __asm_proxy_VPXOR__, + "vpxord" : __asm_proxy_VPXORD__, + "vpxorq" : __asm_proxy_VPXORQ__, + "vrangepd" : __asm_proxy_VRANGEPD__, + "vrangeps" : __asm_proxy_VRANGEPS__, + "vrangesd" : __asm_proxy_VRANGESD__, + "vrangess" : __asm_proxy_VRANGESS__, + "vrcp14pd" : __asm_proxy_VRCP14PD__, + "vrcp14ps" : __asm_proxy_VRCP14PS__, + "vrcp14sd" : __asm_proxy_VRCP14SD__, + "vrcp14ss" : __asm_proxy_VRCP14SS__, + "vrcp28pd" : __asm_proxy_VRCP28PD__, + "vrcp28ps" : __asm_proxy_VRCP28PS__, + "vrcp28sd" : __asm_proxy_VRCP28SD__, + "vrcp28ss" : __asm_proxy_VRCP28SS__, + "vrcpps" : __asm_proxy_VRCPPS__, + "vrcpss" : __asm_proxy_VRCPSS__, + "vreducepd" : __asm_proxy_VREDUCEPD__, + "vreduceps" : __asm_proxy_VREDUCEPS__, + "vreducesd" : __asm_proxy_VREDUCESD__, + "vreducess" : __asm_proxy_VREDUCESS__, + "vrndscalepd" : __asm_proxy_VRNDSCALEPD__, + "vrndscaleps" : __asm_proxy_VRNDSCALEPS__, + "vrndscalesd" : __asm_proxy_VRNDSCALESD__, + "vrndscaless" : __asm_proxy_VRNDSCALESS__, + "vroundpd" : __asm_proxy_VROUNDPD__, + "vroundps" : __asm_proxy_VROUNDPS__, + "vroundsd" : __asm_proxy_VROUNDSD__, + "vroundss" : __asm_proxy_VROUNDSS__, + "vrsqrt14pd" : __asm_proxy_VRSQRT14PD__, + "vrsqrt14ps" : __asm_proxy_VRSQRT14PS__, + "vrsqrt14sd" : __asm_proxy_VRSQRT14SD__, + "vrsqrt14ss" : __asm_proxy_VRSQRT14SS__, + "vrsqrt28pd" : __asm_proxy_VRSQRT28PD__, + "vrsqrt28ps" : __asm_proxy_VRSQRT28PS__, + "vrsqrt28sd" : __asm_proxy_VRSQRT28SD__, + "vrsqrt28ss" : __asm_proxy_VRSQRT28SS__, + "vrsqrtps" : __asm_proxy_VRSQRTPS__, + "vrsqrtss" : __asm_proxy_VRSQRTSS__, + "vscalefpd" : __asm_proxy_VSCALEFPD__, + "vscalefps" : __asm_proxy_VSCALEFPS__, + "vscalefsd" : __asm_proxy_VSCALEFSD__, + "vscalefss" : __asm_proxy_VSCALEFSS__, + "vscatterdpd" : __asm_proxy_VSCATTERDPD__, + "vscatterdps" : __asm_proxy_VSCATTERDPS__, + "vscatterpf0dpd" : __asm_proxy_VSCATTERPF0DPD__, + "vscatterpf0dps" : __asm_proxy_VSCATTERPF0DPS__, + "vscatterpf0qpd" : __asm_proxy_VSCATTERPF0QPD__, + "vscatterpf0qps" : __asm_proxy_VSCATTERPF0QPS__, + "vscatterpf1dpd" : __asm_proxy_VSCATTERPF1DPD__, + "vscatterpf1dps" : __asm_proxy_VSCATTERPF1DPS__, + "vscatterpf1qpd" : __asm_proxy_VSCATTERPF1QPD__, + "vscatterpf1qps" : __asm_proxy_VSCATTERPF1QPS__, + "vscatterqpd" : __asm_proxy_VSCATTERQPD__, + "vscatterqps" : __asm_proxy_VSCATTERQPS__, + "vshuff32x4" : __asm_proxy_VSHUFF32X4__, + "vshuff64x2" : __asm_proxy_VSHUFF64X2__, + "vshufi32x4" : __asm_proxy_VSHUFI32X4__, + "vshufi64x2" : __asm_proxy_VSHUFI64X2__, + "vshufpd" : __asm_proxy_VSHUFPD__, + "vshufps" : __asm_proxy_VSHUFPS__, + "vsqrtpd" : __asm_proxy_VSQRTPD__, + "vsqrtps" : __asm_proxy_VSQRTPS__, + "vsqrtsd" : __asm_proxy_VSQRTSD__, + "vsqrtss" : __asm_proxy_VSQRTSS__, + "vstmxcsr" : __asm_proxy_VSTMXCSR__, + "vsubpd" : __asm_proxy_VSUBPD__, + "vsubps" : __asm_proxy_VSUBPS__, + "vsubsd" : __asm_proxy_VSUBSD__, + "vsubss" : __asm_proxy_VSUBSS__, + "vtestpd" : __asm_proxy_VTESTPD__, + "vtestps" : __asm_proxy_VTESTPS__, + "vucomisd" : __asm_proxy_VUCOMISD__, + "vucomiss" : __asm_proxy_VUCOMISS__, + "vunpckhpd" : __asm_proxy_VUNPCKHPD__, + "vunpckhps" : __asm_proxy_VUNPCKHPS__, + "vunpcklpd" : __asm_proxy_VUNPCKLPD__, + "vunpcklps" : __asm_proxy_VUNPCKLPS__, + "vxorpd" : __asm_proxy_VXORPD__, + "vxorps" : __asm_proxy_VXORPS__, + "vzeroall" : __asm_proxy_VZEROALL__, + "vzeroupper" : __asm_proxy_VZEROUPPER__, + "xaddb" : __asm_proxy_XADDB__, + "xaddl" : __asm_proxy_XADDL__, + "xaddq" : __asm_proxy_XADDQ__, + "xaddw" : __asm_proxy_XADDW__, + "xchgb" : __asm_proxy_XCHGB__, + "xchgl" : __asm_proxy_XCHGL__, + "xchgq" : __asm_proxy_XCHGQ__, + "xchgw" : __asm_proxy_XCHGW__, + "xgetbv" : __asm_proxy_XGETBV__, + "xlatb" : __asm_proxy_XLATB__, + "xorb" : __asm_proxy_XORB__, + "xorl" : __asm_proxy_XORL__, + "xorpd" : __asm_proxy_XORPD__, + "xorps" : __asm_proxy_XORPS__, + "xorq" : __asm_proxy_XORQ__, + "xorw" : __asm_proxy_XORW__, +} + +func __asm_proxy_ADCB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADCB(v[0], v[1]) + } else { + panic("instruction ADCB takes exactly 2 operands") + } +} + +func __asm_proxy_ADCL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADCL(v[0], v[1]) + } else { + panic("instruction ADCL takes exactly 2 operands") + } +} + +func __asm_proxy_ADCQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADCQ(v[0], v[1]) + } else { + panic("instruction ADCQ takes exactly 2 operands") + } +} + +func __asm_proxy_ADCW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADCW(v[0], v[1]) + } else { + panic("instruction ADCW takes exactly 2 operands") + } +} + +func __asm_proxy_ADCXL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADCXL(v[0], v[1]) + } else { + panic("instruction ADCXL takes exactly 2 operands") + } +} + +func __asm_proxy_ADCXQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADCXQ(v[0], v[1]) + } else { + panic("instruction ADCXQ takes exactly 2 operands") + } +} + +func __asm_proxy_ADDB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADDB(v[0], v[1]) + } else { + panic("instruction ADDB takes exactly 2 operands") + } +} + +func __asm_proxy_ADDL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADDL(v[0], v[1]) + } else { + panic("instruction ADDL takes exactly 2 operands") + } +} + +func __asm_proxy_ADDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADDPD(v[0], v[1]) + } else { + panic("instruction ADDPD takes exactly 2 operands") + } +} + +func __asm_proxy_ADDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADDPS(v[0], v[1]) + } else { + panic("instruction ADDPS takes exactly 2 operands") + } +} + +func __asm_proxy_ADDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADDQ(v[0], v[1]) + } else { + panic("instruction ADDQ takes exactly 2 operands") + } +} + +func __asm_proxy_ADDSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADDSD(v[0], v[1]) + } else { + panic("instruction ADDSD takes exactly 2 operands") + } +} + +func __asm_proxy_ADDSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADDSS(v[0], v[1]) + } else { + panic("instruction ADDSS takes exactly 2 operands") + } +} + +func __asm_proxy_ADDSUBPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADDSUBPD(v[0], v[1]) + } else { + panic("instruction ADDSUBPD takes exactly 2 operands") + } +} + +func __asm_proxy_ADDSUBPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADDSUBPS(v[0], v[1]) + } else { + panic("instruction ADDSUBPS takes exactly 2 operands") + } +} + +func __asm_proxy_ADDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADDW(v[0], v[1]) + } else { + panic("instruction ADDW takes exactly 2 operands") + } +} + +func __asm_proxy_ADOXL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADOXL(v[0], v[1]) + } else { + panic("instruction ADOXL takes exactly 2 operands") + } +} + +func __asm_proxy_ADOXQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ADOXQ(v[0], v[1]) + } else { + panic("instruction ADOXQ takes exactly 2 operands") + } +} + +func __asm_proxy_AESDEC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.AESDEC(v[0], v[1]) + } else { + panic("instruction AESDEC takes exactly 2 operands") + } +} + +func __asm_proxy_AESDECLAST__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.AESDECLAST(v[0], v[1]) + } else { + panic("instruction AESDECLAST takes exactly 2 operands") + } +} + +func __asm_proxy_AESENC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.AESENC(v[0], v[1]) + } else { + panic("instruction AESENC takes exactly 2 operands") + } +} + +func __asm_proxy_AESENCLAST__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.AESENCLAST(v[0], v[1]) + } else { + panic("instruction AESENCLAST takes exactly 2 operands") + } +} + +func __asm_proxy_AESIMC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.AESIMC(v[0], v[1]) + } else { + panic("instruction AESIMC takes exactly 2 operands") + } +} + +func __asm_proxy_AESKEYGENASSIST__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.AESKEYGENASSIST(v[0], v[1], v[2]) + } else { + panic("instruction AESKEYGENASSIST takes exactly 3 operands") + } +} + +func __asm_proxy_ANDB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ANDB(v[0], v[1]) + } else { + panic("instruction ANDB takes exactly 2 operands") + } +} + +func __asm_proxy_ANDL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ANDL(v[0], v[1]) + } else { + panic("instruction ANDL takes exactly 2 operands") + } +} + +func __asm_proxy_ANDNL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.ANDNL(v[0], v[1], v[2]) + } else { + panic("instruction ANDNL takes exactly 3 operands") + } +} + +func __asm_proxy_ANDNPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ANDNPD(v[0], v[1]) + } else { + panic("instruction ANDNPD takes exactly 2 operands") + } +} + +func __asm_proxy_ANDNPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ANDNPS(v[0], v[1]) + } else { + panic("instruction ANDNPS takes exactly 2 operands") + } +} + +func __asm_proxy_ANDNQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.ANDNQ(v[0], v[1], v[2]) + } else { + panic("instruction ANDNQ takes exactly 3 operands") + } +} + +func __asm_proxy_ANDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ANDPD(v[0], v[1]) + } else { + panic("instruction ANDPD takes exactly 2 operands") + } +} + +func __asm_proxy_ANDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ANDPS(v[0], v[1]) + } else { + panic("instruction ANDPS takes exactly 2 operands") + } +} + +func __asm_proxy_ANDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ANDQ(v[0], v[1]) + } else { + panic("instruction ANDQ takes exactly 2 operands") + } +} + +func __asm_proxy_ANDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ANDW(v[0], v[1]) + } else { + panic("instruction ANDW takes exactly 2 operands") + } +} + +func __asm_proxy_BEXTR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.BEXTR(v[0], v[1], v[2]) + } else { + panic("instruction BEXTR takes exactly 3 operands") + } +} + +func __asm_proxy_BLCFILL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BLCFILL(v[0], v[1]) + } else { + panic("instruction BLCFILL takes exactly 2 operands") + } +} + +func __asm_proxy_BLCI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BLCI(v[0], v[1]) + } else { + panic("instruction BLCI takes exactly 2 operands") + } +} + +func __asm_proxy_BLCIC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BLCIC(v[0], v[1]) + } else { + panic("instruction BLCIC takes exactly 2 operands") + } +} + +func __asm_proxy_BLCMSK__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BLCMSK(v[0], v[1]) + } else { + panic("instruction BLCMSK takes exactly 2 operands") + } +} + +func __asm_proxy_BLCS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BLCS(v[0], v[1]) + } else { + panic("instruction BLCS takes exactly 2 operands") + } +} + +func __asm_proxy_BLENDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.BLENDPD(v[0], v[1], v[2]) + } else { + panic("instruction BLENDPD takes exactly 3 operands") + } +} + +func __asm_proxy_BLENDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.BLENDPS(v[0], v[1], v[2]) + } else { + panic("instruction BLENDPS takes exactly 3 operands") + } +} + +func __asm_proxy_BLENDVPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.BLENDVPD(v[0], v[1], v[2]) + } else { + panic("instruction BLENDVPD takes exactly 3 operands") + } +} + +func __asm_proxy_BLENDVPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.BLENDVPS(v[0], v[1], v[2]) + } else { + panic("instruction BLENDVPS takes exactly 3 operands") + } +} + +func __asm_proxy_BLSFILL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BLSFILL(v[0], v[1]) + } else { + panic("instruction BLSFILL takes exactly 2 operands") + } +} + +func __asm_proxy_BLSI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BLSI(v[0], v[1]) + } else { + panic("instruction BLSI takes exactly 2 operands") + } +} + +func __asm_proxy_BLSIC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BLSIC(v[0], v[1]) + } else { + panic("instruction BLSIC takes exactly 2 operands") + } +} + +func __asm_proxy_BLSMSK__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BLSMSK(v[0], v[1]) + } else { + panic("instruction BLSMSK takes exactly 2 operands") + } +} + +func __asm_proxy_BLSR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BLSR(v[0], v[1]) + } else { + panic("instruction BLSR takes exactly 2 operands") + } +} + +func __asm_proxy_BSFL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BSFL(v[0], v[1]) + } else { + panic("instruction BSFL takes exactly 2 operands") + } +} + +func __asm_proxy_BSFQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BSFQ(v[0], v[1]) + } else { + panic("instruction BSFQ takes exactly 2 operands") + } +} + +func __asm_proxy_BSFW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BSFW(v[0], v[1]) + } else { + panic("instruction BSFW takes exactly 2 operands") + } +} + +func __asm_proxy_BSRL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BSRL(v[0], v[1]) + } else { + panic("instruction BSRL takes exactly 2 operands") + } +} + +func __asm_proxy_BSRQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BSRQ(v[0], v[1]) + } else { + panic("instruction BSRQ takes exactly 2 operands") + } +} + +func __asm_proxy_BSRW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BSRW(v[0], v[1]) + } else { + panic("instruction BSRW takes exactly 2 operands") + } +} + +func __asm_proxy_BSWAPL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.BSWAPL(v[0]) + } else { + panic("instruction BSWAPL takes exactly 1 operand") + } +} + +func __asm_proxy_BSWAPQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.BSWAPQ(v[0]) + } else { + panic("instruction BSWAPQ takes exactly 1 operand") + } +} + +func __asm_proxy_BTCL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BTCL(v[0], v[1]) + } else { + panic("instruction BTCL takes exactly 2 operands") + } +} + +func __asm_proxy_BTCQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BTCQ(v[0], v[1]) + } else { + panic("instruction BTCQ takes exactly 2 operands") + } +} + +func __asm_proxy_BTCW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BTCW(v[0], v[1]) + } else { + panic("instruction BTCW takes exactly 2 operands") + } +} + +func __asm_proxy_BTL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BTL(v[0], v[1]) + } else { + panic("instruction BTL takes exactly 2 operands") + } +} + +func __asm_proxy_BTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BTQ(v[0], v[1]) + } else { + panic("instruction BTQ takes exactly 2 operands") + } +} + +func __asm_proxy_BTRL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BTRL(v[0], v[1]) + } else { + panic("instruction BTRL takes exactly 2 operands") + } +} + +func __asm_proxy_BTRQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BTRQ(v[0], v[1]) + } else { + panic("instruction BTRQ takes exactly 2 operands") + } +} + +func __asm_proxy_BTRW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BTRW(v[0], v[1]) + } else { + panic("instruction BTRW takes exactly 2 operands") + } +} + +func __asm_proxy_BTSL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BTSL(v[0], v[1]) + } else { + panic("instruction BTSL takes exactly 2 operands") + } +} + +func __asm_proxy_BTSQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BTSQ(v[0], v[1]) + } else { + panic("instruction BTSQ takes exactly 2 operands") + } +} + +func __asm_proxy_BTSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BTSW(v[0], v[1]) + } else { + panic("instruction BTSW takes exactly 2 operands") + } +} + +func __asm_proxy_BTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.BTW(v[0], v[1]) + } else { + panic("instruction BTW takes exactly 2 operands") + } +} + +func __asm_proxy_BZHI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.BZHI(v[0], v[1], v[2]) + } else { + panic("instruction BZHI takes exactly 3 operands") + } +} + +func __asm_proxy_CALL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.CALL(v[0]) + } else { + panic("instruction CALL takes exactly 1 operand") + } +} + +func __asm_proxy_CALLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.CALLQ(v[0]) + } else { + panic("instruction CALLQ takes exactly 1 operand") + } +} + +func __asm_proxy_CBTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.CBTW() + } else { + panic("instruction CBTW takes no operands") + } +} + +func __asm_proxy_CLC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.CLC() + } else { + panic("instruction CLC takes no operands") + } +} + +func __asm_proxy_CLD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.CLD() + } else { + panic("instruction CLD takes no operands") + } +} + +func __asm_proxy_CLFLUSH__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.CLFLUSH(v[0]) + } else { + panic("instruction CLFLUSH takes exactly 1 operand") + } +} + +func __asm_proxy_CLFLUSHOPT__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.CLFLUSHOPT(v[0]) + } else { + panic("instruction CLFLUSHOPT takes exactly 1 operand") + } +} + +func __asm_proxy_CLTD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.CLTD() + } else { + panic("instruction CLTD takes no operands") + } +} + +func __asm_proxy_CLTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.CLTQ() + } else { + panic("instruction CLTQ takes no operands") + } +} + +func __asm_proxy_CLWB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.CLWB(v[0]) + } else { + panic("instruction CLWB takes exactly 1 operand") + } +} + +func __asm_proxy_CLZERO__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.CLZERO() + } else { + panic("instruction CLZERO takes no operands") + } +} + +func __asm_proxy_CMC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.CMC() + } else { + panic("instruction CMC takes no operands") + } +} + +func __asm_proxy_CMOVA__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVA(v[0], v[1]) + } else { + panic("instruction CMOVA takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVAE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVAE(v[0], v[1]) + } else { + panic("instruction CMOVAE takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVB(v[0], v[1]) + } else { + panic("instruction CMOVB takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVBE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVBE(v[0], v[1]) + } else { + panic("instruction CMOVBE takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVC(v[0], v[1]) + } else { + panic("instruction CMOVC takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVE(v[0], v[1]) + } else { + panic("instruction CMOVE takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVG__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVG(v[0], v[1]) + } else { + panic("instruction CMOVG takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVGE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVGE(v[0], v[1]) + } else { + panic("instruction CMOVGE takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVL(v[0], v[1]) + } else { + panic("instruction CMOVL takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVLE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVLE(v[0], v[1]) + } else { + panic("instruction CMOVLE takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNA__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNA(v[0], v[1]) + } else { + panic("instruction CMOVNA takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNAE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNAE(v[0], v[1]) + } else { + panic("instruction CMOVNAE takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNB(v[0], v[1]) + } else { + panic("instruction CMOVNB takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNBE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNBE(v[0], v[1]) + } else { + panic("instruction CMOVNBE takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNC(v[0], v[1]) + } else { + panic("instruction CMOVNC takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNE(v[0], v[1]) + } else { + panic("instruction CMOVNE takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNG__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNG(v[0], v[1]) + } else { + panic("instruction CMOVNG takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNGE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNGE(v[0], v[1]) + } else { + panic("instruction CMOVNGE takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNL(v[0], v[1]) + } else { + panic("instruction CMOVNL takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNLE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNLE(v[0], v[1]) + } else { + panic("instruction CMOVNLE takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNO__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNO(v[0], v[1]) + } else { + panic("instruction CMOVNO takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNP(v[0], v[1]) + } else { + panic("instruction CMOVNP takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNS(v[0], v[1]) + } else { + panic("instruction CMOVNS takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVNZ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVNZ(v[0], v[1]) + } else { + panic("instruction CMOVNZ takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVO__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVO(v[0], v[1]) + } else { + panic("instruction CMOVO takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVP(v[0], v[1]) + } else { + panic("instruction CMOVP takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVPE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVPE(v[0], v[1]) + } else { + panic("instruction CMOVPE takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVPO__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVPO(v[0], v[1]) + } else { + panic("instruction CMOVPO takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVS(v[0], v[1]) + } else { + panic("instruction CMOVS takes exactly 2 operands") + } +} + +func __asm_proxy_CMOVZ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMOVZ(v[0], v[1]) + } else { + panic("instruction CMOVZ takes exactly 2 operands") + } +} + +func __asm_proxy_CMPB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMPB(v[0], v[1]) + } else { + panic("instruction CMPB takes exactly 2 operands") + } +} + +func __asm_proxy_CMPL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMPL(v[0], v[1]) + } else { + panic("instruction CMPL takes exactly 2 operands") + } +} + +func __asm_proxy_CMPPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.CMPPD(v[0], v[1], v[2]) + } else { + panic("instruction CMPPD takes exactly 3 operands") + } +} + +func __asm_proxy_CMPPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.CMPPS(v[0], v[1], v[2]) + } else { + panic("instruction CMPPS takes exactly 3 operands") + } +} + +func __asm_proxy_CMPQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMPQ(v[0], v[1]) + } else { + panic("instruction CMPQ takes exactly 2 operands") + } +} + +func __asm_proxy_CMPSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.CMPSD(v[0], v[1], v[2]) + } else { + panic("instruction CMPSD takes exactly 3 operands") + } +} + +func __asm_proxy_CMPSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.CMPSS(v[0], v[1], v[2]) + } else { + panic("instruction CMPSS takes exactly 3 operands") + } +} + +func __asm_proxy_CMPW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMPW(v[0], v[1]) + } else { + panic("instruction CMPW takes exactly 2 operands") + } +} + +func __asm_proxy_CMPXCHG16B__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.CMPXCHG16B(v[0]) + } else { + panic("instruction CMPXCHG16B takes exactly 1 operand") + } +} + +func __asm_proxy_CMPXCHG8B__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.CMPXCHG8B(v[0]) + } else { + panic("instruction CMPXCHG8B takes exactly 1 operand") + } +} + +func __asm_proxy_CMPXCHGB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMPXCHGB(v[0], v[1]) + } else { + panic("instruction CMPXCHGB takes exactly 2 operands") + } +} + +func __asm_proxy_CMPXCHGL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMPXCHGL(v[0], v[1]) + } else { + panic("instruction CMPXCHGL takes exactly 2 operands") + } +} + +func __asm_proxy_CMPXCHGQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMPXCHGQ(v[0], v[1]) + } else { + panic("instruction CMPXCHGQ takes exactly 2 operands") + } +} + +func __asm_proxy_CMPXCHGW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CMPXCHGW(v[0], v[1]) + } else { + panic("instruction CMPXCHGW takes exactly 2 operands") + } +} + +func __asm_proxy_COMISD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.COMISD(v[0], v[1]) + } else { + panic("instruction COMISD takes exactly 2 operands") + } +} + +func __asm_proxy_COMISS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.COMISS(v[0], v[1]) + } else { + panic("instruction COMISS takes exactly 2 operands") + } +} + +func __asm_proxy_CPUID__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.CPUID() + } else { + panic("instruction CPUID takes no operands") + } +} + +func __asm_proxy_CQTO__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.CQTO() + } else { + panic("instruction CQTO takes no operands") + } +} + +func __asm_proxy_CRC32B__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CRC32B(v[0], v[1]) + } else { + panic("instruction CRC32B takes exactly 2 operands") + } +} + +func __asm_proxy_CRC32L__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CRC32L(v[0], v[1]) + } else { + panic("instruction CRC32L takes exactly 2 operands") + } +} + +func __asm_proxy_CRC32Q__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CRC32Q(v[0], v[1]) + } else { + panic("instruction CRC32Q takes exactly 2 operands") + } +} + +func __asm_proxy_CRC32W__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CRC32W(v[0], v[1]) + } else { + panic("instruction CRC32W takes exactly 2 operands") + } +} + +func __asm_proxy_CVTDQ2PD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTDQ2PD(v[0], v[1]) + } else { + panic("instruction CVTDQ2PD takes exactly 2 operands") + } +} + +func __asm_proxy_CVTDQ2PS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTDQ2PS(v[0], v[1]) + } else { + panic("instruction CVTDQ2PS takes exactly 2 operands") + } +} + +func __asm_proxy_CVTPD2DQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTPD2DQ(v[0], v[1]) + } else { + panic("instruction CVTPD2DQ takes exactly 2 operands") + } +} + +func __asm_proxy_CVTPD2PI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTPD2PI(v[0], v[1]) + } else { + panic("instruction CVTPD2PI takes exactly 2 operands") + } +} + +func __asm_proxy_CVTPD2PS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTPD2PS(v[0], v[1]) + } else { + panic("instruction CVTPD2PS takes exactly 2 operands") + } +} + +func __asm_proxy_CVTPI2PD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTPI2PD(v[0], v[1]) + } else { + panic("instruction CVTPI2PD takes exactly 2 operands") + } +} + +func __asm_proxy_CVTPI2PS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTPI2PS(v[0], v[1]) + } else { + panic("instruction CVTPI2PS takes exactly 2 operands") + } +} + +func __asm_proxy_CVTPS2DQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTPS2DQ(v[0], v[1]) + } else { + panic("instruction CVTPS2DQ takes exactly 2 operands") + } +} + +func __asm_proxy_CVTPS2PD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTPS2PD(v[0], v[1]) + } else { + panic("instruction CVTPS2PD takes exactly 2 operands") + } +} + +func __asm_proxy_CVTPS2PI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTPS2PI(v[0], v[1]) + } else { + panic("instruction CVTPS2PI takes exactly 2 operands") + } +} + +func __asm_proxy_CVTSD2SI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTSD2SI(v[0], v[1]) + } else { + panic("instruction CVTSD2SI takes exactly 2 operands") + } +} + +func __asm_proxy_CVTSD2SS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTSD2SS(v[0], v[1]) + } else { + panic("instruction CVTSD2SS takes exactly 2 operands") + } +} + +func __asm_proxy_CVTSI2SD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTSI2SD(v[0], v[1]) + } else { + panic("instruction CVTSI2SD takes exactly 2 operands") + } +} + +func __asm_proxy_CVTSI2SS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTSI2SS(v[0], v[1]) + } else { + panic("instruction CVTSI2SS takes exactly 2 operands") + } +} + +func __asm_proxy_CVTSS2SD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTSS2SD(v[0], v[1]) + } else { + panic("instruction CVTSS2SD takes exactly 2 operands") + } +} + +func __asm_proxy_CVTSS2SI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTSS2SI(v[0], v[1]) + } else { + panic("instruction CVTSS2SI takes exactly 2 operands") + } +} + +func __asm_proxy_CVTTPD2DQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTTPD2DQ(v[0], v[1]) + } else { + panic("instruction CVTTPD2DQ takes exactly 2 operands") + } +} + +func __asm_proxy_CVTTPD2PI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTTPD2PI(v[0], v[1]) + } else { + panic("instruction CVTTPD2PI takes exactly 2 operands") + } +} + +func __asm_proxy_CVTTPS2DQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTTPS2DQ(v[0], v[1]) + } else { + panic("instruction CVTTPS2DQ takes exactly 2 operands") + } +} + +func __asm_proxy_CVTTPS2PI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTTPS2PI(v[0], v[1]) + } else { + panic("instruction CVTTPS2PI takes exactly 2 operands") + } +} + +func __asm_proxy_CVTTSD2SI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTTSD2SI(v[0], v[1]) + } else { + panic("instruction CVTTSD2SI takes exactly 2 operands") + } +} + +func __asm_proxy_CVTTSS2SI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.CVTTSS2SI(v[0], v[1]) + } else { + panic("instruction CVTTSS2SI takes exactly 2 operands") + } +} + +func __asm_proxy_CWTD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.CWTD() + } else { + panic("instruction CWTD takes no operands") + } +} + +func __asm_proxy_CWTL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.CWTL() + } else { + panic("instruction CWTL takes no operands") + } +} + +func __asm_proxy_DECB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.DECB(v[0]) + } else { + panic("instruction DECB takes exactly 1 operand") + } +} + +func __asm_proxy_DECL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.DECL(v[0]) + } else { + panic("instruction DECL takes exactly 1 operand") + } +} + +func __asm_proxy_DECQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.DECQ(v[0]) + } else { + panic("instruction DECQ takes exactly 1 operand") + } +} + +func __asm_proxy_DECW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.DECW(v[0]) + } else { + panic("instruction DECW takes exactly 1 operand") + } +} + +func __asm_proxy_DIVB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.DIVB(v[0]) + } else { + panic("instruction DIVB takes exactly 1 operand") + } +} + +func __asm_proxy_DIVL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.DIVL(v[0]) + } else { + panic("instruction DIVL takes exactly 1 operand") + } +} + +func __asm_proxy_DIVPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.DIVPD(v[0], v[1]) + } else { + panic("instruction DIVPD takes exactly 2 operands") + } +} + +func __asm_proxy_DIVPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.DIVPS(v[0], v[1]) + } else { + panic("instruction DIVPS takes exactly 2 operands") + } +} + +func __asm_proxy_DIVQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.DIVQ(v[0]) + } else { + panic("instruction DIVQ takes exactly 1 operand") + } +} + +func __asm_proxy_DIVSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.DIVSD(v[0], v[1]) + } else { + panic("instruction DIVSD takes exactly 2 operands") + } +} + +func __asm_proxy_DIVSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.DIVSS(v[0], v[1]) + } else { + panic("instruction DIVSS takes exactly 2 operands") + } +} + +func __asm_proxy_DIVW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.DIVW(v[0]) + } else { + panic("instruction DIVW takes exactly 1 operand") + } +} + +func __asm_proxy_DPPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.DPPD(v[0], v[1], v[2]) + } else { + panic("instruction DPPD takes exactly 3 operands") + } +} + +func __asm_proxy_DPPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.DPPS(v[0], v[1], v[2]) + } else { + panic("instruction DPPS takes exactly 3 operands") + } +} + +func __asm_proxy_EMMS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.EMMS() + } else { + panic("instruction EMMS takes no operands") + } +} + +func __asm_proxy_EXTRACTPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.EXTRACTPS(v[0], v[1], v[2]) + } else { + panic("instruction EXTRACTPS takes exactly 3 operands") + } +} + +func __asm_proxy_EXTRQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.EXTRQ(v[0], v[1]) + case 3 : return p.EXTRQ(v[0], v[1], v[2]) + default : panic("instruction EXTRQ takes 2 or 3 operands") + } +} + +func __asm_proxy_FEMMS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.FEMMS() + } else { + panic("instruction FEMMS takes no operands") + } +} + +func __asm_proxy_HADDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.HADDPD(v[0], v[1]) + } else { + panic("instruction HADDPD takes exactly 2 operands") + } +} + +func __asm_proxy_HADDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.HADDPS(v[0], v[1]) + } else { + panic("instruction HADDPS takes exactly 2 operands") + } +} + +func __asm_proxy_HSUBPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.HSUBPD(v[0], v[1]) + } else { + panic("instruction HSUBPD takes exactly 2 operands") + } +} + +func __asm_proxy_HSUBPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.HSUBPS(v[0], v[1]) + } else { + panic("instruction HSUBPS takes exactly 2 operands") + } +} + +func __asm_proxy_IDIVB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.IDIVB(v[0]) + } else { + panic("instruction IDIVB takes exactly 1 operand") + } +} + +func __asm_proxy_IDIVL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.IDIVL(v[0]) + } else { + panic("instruction IDIVL takes exactly 1 operand") + } +} + +func __asm_proxy_IDIVQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.IDIVQ(v[0]) + } else { + panic("instruction IDIVQ takes exactly 1 operand") + } +} + +func __asm_proxy_IDIVW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.IDIVW(v[0]) + } else { + panic("instruction IDIVW takes exactly 1 operand") + } +} + +func __asm_proxy_IMULB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.IMULB(v[0]) + } else { + panic("instruction IMULB takes exactly 1 operand") + } +} + +func __asm_proxy_IMULL__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 1 : return p.IMULL(v[0]) + case 2 : return p.IMULL(v[0], v[1]) + case 3 : return p.IMULL(v[0], v[1], v[2]) + default : panic("instruction IMULL takes 1 or 2 or 3 operands") + } +} + +func __asm_proxy_IMULQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 1 : return p.IMULQ(v[0]) + case 2 : return p.IMULQ(v[0], v[1]) + case 3 : return p.IMULQ(v[0], v[1], v[2]) + default : panic("instruction IMULQ takes 1 or 2 or 3 operands") + } +} + +func __asm_proxy_IMULW__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 1 : return p.IMULW(v[0]) + case 2 : return p.IMULW(v[0], v[1]) + case 3 : return p.IMULW(v[0], v[1], v[2]) + default : panic("instruction IMULW takes 1 or 2 or 3 operands") + } +} + +func __asm_proxy_INCB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.INCB(v[0]) + } else { + panic("instruction INCB takes exactly 1 operand") + } +} + +func __asm_proxy_INCL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.INCL(v[0]) + } else { + panic("instruction INCL takes exactly 1 operand") + } +} + +func __asm_proxy_INCQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.INCQ(v[0]) + } else { + panic("instruction INCQ takes exactly 1 operand") + } +} + +func __asm_proxy_INCW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.INCW(v[0]) + } else { + panic("instruction INCW takes exactly 1 operand") + } +} + +func __asm_proxy_INSERTPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.INSERTPS(v[0], v[1], v[2]) + } else { + panic("instruction INSERTPS takes exactly 3 operands") + } +} + +func __asm_proxy_INSERTQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.INSERTQ(v[0], v[1]) + case 4 : return p.INSERTQ(v[0], v[1], v[2], v[3]) + default : panic("instruction INSERTQ takes 2 or 4 operands") + } +} + +func __asm_proxy_INT__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.INT(v[0]) + } else { + panic("instruction INT takes exactly 1 operand") + } +} + +func __asm_proxy_JA__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JA(v[0]) + } else { + panic("instruction JA takes exactly 1 operand") + } +} + +func __asm_proxy_JAE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JAE(v[0]) + } else { + panic("instruction JAE takes exactly 1 operand") + } +} + +func __asm_proxy_JB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JB(v[0]) + } else { + panic("instruction JB takes exactly 1 operand") + } +} + +func __asm_proxy_JBE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JBE(v[0]) + } else { + panic("instruction JBE takes exactly 1 operand") + } +} + +func __asm_proxy_JC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JC(v[0]) + } else { + panic("instruction JC takes exactly 1 operand") + } +} + +func __asm_proxy_JE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JE(v[0]) + } else { + panic("instruction JE takes exactly 1 operand") + } +} + +func __asm_proxy_JECXZ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JECXZ(v[0]) + } else { + panic("instruction JECXZ takes exactly 1 operand") + } +} + +func __asm_proxy_JG__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JG(v[0]) + } else { + panic("instruction JG takes exactly 1 operand") + } +} + +func __asm_proxy_JGE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JGE(v[0]) + } else { + panic("instruction JGE takes exactly 1 operand") + } +} + +func __asm_proxy_JL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JL(v[0]) + } else { + panic("instruction JL takes exactly 1 operand") + } +} + +func __asm_proxy_JLE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JLE(v[0]) + } else { + panic("instruction JLE takes exactly 1 operand") + } +} + +func __asm_proxy_JMP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JMP(v[0]) + } else { + panic("instruction JMP takes exactly 1 operand") + } +} + +func __asm_proxy_JMPQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JMPQ(v[0]) + } else { + panic("instruction JMPQ takes exactly 1 operand") + } +} + +func __asm_proxy_JNA__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNA(v[0]) + } else { + panic("instruction JNA takes exactly 1 operand") + } +} + +func __asm_proxy_JNAE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNAE(v[0]) + } else { + panic("instruction JNAE takes exactly 1 operand") + } +} + +func __asm_proxy_JNB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNB(v[0]) + } else { + panic("instruction JNB takes exactly 1 operand") + } +} + +func __asm_proxy_JNBE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNBE(v[0]) + } else { + panic("instruction JNBE takes exactly 1 operand") + } +} + +func __asm_proxy_JNC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNC(v[0]) + } else { + panic("instruction JNC takes exactly 1 operand") + } +} + +func __asm_proxy_JNE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNE(v[0]) + } else { + panic("instruction JNE takes exactly 1 operand") + } +} + +func __asm_proxy_JNG__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNG(v[0]) + } else { + panic("instruction JNG takes exactly 1 operand") + } +} + +func __asm_proxy_JNGE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNGE(v[0]) + } else { + panic("instruction JNGE takes exactly 1 operand") + } +} + +func __asm_proxy_JNL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNL(v[0]) + } else { + panic("instruction JNL takes exactly 1 operand") + } +} + +func __asm_proxy_JNLE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNLE(v[0]) + } else { + panic("instruction JNLE takes exactly 1 operand") + } +} + +func __asm_proxy_JNO__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNO(v[0]) + } else { + panic("instruction JNO takes exactly 1 operand") + } +} + +func __asm_proxy_JNP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNP(v[0]) + } else { + panic("instruction JNP takes exactly 1 operand") + } +} + +func __asm_proxy_JNS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNS(v[0]) + } else { + panic("instruction JNS takes exactly 1 operand") + } +} + +func __asm_proxy_JNZ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JNZ(v[0]) + } else { + panic("instruction JNZ takes exactly 1 operand") + } +} + +func __asm_proxy_JO__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JO(v[0]) + } else { + panic("instruction JO takes exactly 1 operand") + } +} + +func __asm_proxy_JP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JP(v[0]) + } else { + panic("instruction JP takes exactly 1 operand") + } +} + +func __asm_proxy_JPE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JPE(v[0]) + } else { + panic("instruction JPE takes exactly 1 operand") + } +} + +func __asm_proxy_JPO__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JPO(v[0]) + } else { + panic("instruction JPO takes exactly 1 operand") + } +} + +func __asm_proxy_JRCXZ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JRCXZ(v[0]) + } else { + panic("instruction JRCXZ takes exactly 1 operand") + } +} + +func __asm_proxy_JS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JS(v[0]) + } else { + panic("instruction JS takes exactly 1 operand") + } +} + +func __asm_proxy_JZ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.JZ(v[0]) + } else { + panic("instruction JZ takes exactly 1 operand") + } +} + +func __asm_proxy_KADDB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KADDB(v[0], v[1], v[2]) + } else { + panic("instruction KADDB takes exactly 3 operands") + } +} + +func __asm_proxy_KADDD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KADDD(v[0], v[1], v[2]) + } else { + panic("instruction KADDD takes exactly 3 operands") + } +} + +func __asm_proxy_KADDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KADDQ(v[0], v[1], v[2]) + } else { + panic("instruction KADDQ takes exactly 3 operands") + } +} + +func __asm_proxy_KADDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KADDW(v[0], v[1], v[2]) + } else { + panic("instruction KADDW takes exactly 3 operands") + } +} + +func __asm_proxy_KANDB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KANDB(v[0], v[1], v[2]) + } else { + panic("instruction KANDB takes exactly 3 operands") + } +} + +func __asm_proxy_KANDD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KANDD(v[0], v[1], v[2]) + } else { + panic("instruction KANDD takes exactly 3 operands") + } +} + +func __asm_proxy_KANDNB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KANDNB(v[0], v[1], v[2]) + } else { + panic("instruction KANDNB takes exactly 3 operands") + } +} + +func __asm_proxy_KANDND__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KANDND(v[0], v[1], v[2]) + } else { + panic("instruction KANDND takes exactly 3 operands") + } +} + +func __asm_proxy_KANDNQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KANDNQ(v[0], v[1], v[2]) + } else { + panic("instruction KANDNQ takes exactly 3 operands") + } +} + +func __asm_proxy_KANDNW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KANDNW(v[0], v[1], v[2]) + } else { + panic("instruction KANDNW takes exactly 3 operands") + } +} + +func __asm_proxy_KANDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KANDQ(v[0], v[1], v[2]) + } else { + panic("instruction KANDQ takes exactly 3 operands") + } +} + +func __asm_proxy_KANDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KANDW(v[0], v[1], v[2]) + } else { + panic("instruction KANDW takes exactly 3 operands") + } +} + +func __asm_proxy_KMOVB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KMOVB(v[0], v[1]) + } else { + panic("instruction KMOVB takes exactly 2 operands") + } +} + +func __asm_proxy_KMOVD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KMOVD(v[0], v[1]) + } else { + panic("instruction KMOVD takes exactly 2 operands") + } +} + +func __asm_proxy_KMOVQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KMOVQ(v[0], v[1]) + } else { + panic("instruction KMOVQ takes exactly 2 operands") + } +} + +func __asm_proxy_KMOVW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KMOVW(v[0], v[1]) + } else { + panic("instruction KMOVW takes exactly 2 operands") + } +} + +func __asm_proxy_KNOTB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KNOTB(v[0], v[1]) + } else { + panic("instruction KNOTB takes exactly 2 operands") + } +} + +func __asm_proxy_KNOTD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KNOTD(v[0], v[1]) + } else { + panic("instruction KNOTD takes exactly 2 operands") + } +} + +func __asm_proxy_KNOTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KNOTQ(v[0], v[1]) + } else { + panic("instruction KNOTQ takes exactly 2 operands") + } +} + +func __asm_proxy_KNOTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KNOTW(v[0], v[1]) + } else { + panic("instruction KNOTW takes exactly 2 operands") + } +} + +func __asm_proxy_KORB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KORB(v[0], v[1], v[2]) + } else { + panic("instruction KORB takes exactly 3 operands") + } +} + +func __asm_proxy_KORD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KORD(v[0], v[1], v[2]) + } else { + panic("instruction KORD takes exactly 3 operands") + } +} + +func __asm_proxy_KORQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KORQ(v[0], v[1], v[2]) + } else { + panic("instruction KORQ takes exactly 3 operands") + } +} + +func __asm_proxy_KORTESTB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KORTESTB(v[0], v[1]) + } else { + panic("instruction KORTESTB takes exactly 2 operands") + } +} + +func __asm_proxy_KORTESTD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KORTESTD(v[0], v[1]) + } else { + panic("instruction KORTESTD takes exactly 2 operands") + } +} + +func __asm_proxy_KORTESTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KORTESTQ(v[0], v[1]) + } else { + panic("instruction KORTESTQ takes exactly 2 operands") + } +} + +func __asm_proxy_KORTESTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KORTESTW(v[0], v[1]) + } else { + panic("instruction KORTESTW takes exactly 2 operands") + } +} + +func __asm_proxy_KORW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KORW(v[0], v[1], v[2]) + } else { + panic("instruction KORW takes exactly 3 operands") + } +} + +func __asm_proxy_KSHIFTLB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KSHIFTLB(v[0], v[1], v[2]) + } else { + panic("instruction KSHIFTLB takes exactly 3 operands") + } +} + +func __asm_proxy_KSHIFTLD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KSHIFTLD(v[0], v[1], v[2]) + } else { + panic("instruction KSHIFTLD takes exactly 3 operands") + } +} + +func __asm_proxy_KSHIFTLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KSHIFTLQ(v[0], v[1], v[2]) + } else { + panic("instruction KSHIFTLQ takes exactly 3 operands") + } +} + +func __asm_proxy_KSHIFTLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KSHIFTLW(v[0], v[1], v[2]) + } else { + panic("instruction KSHIFTLW takes exactly 3 operands") + } +} + +func __asm_proxy_KSHIFTRB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KSHIFTRB(v[0], v[1], v[2]) + } else { + panic("instruction KSHIFTRB takes exactly 3 operands") + } +} + +func __asm_proxy_KSHIFTRD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KSHIFTRD(v[0], v[1], v[2]) + } else { + panic("instruction KSHIFTRD takes exactly 3 operands") + } +} + +func __asm_proxy_KSHIFTRQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KSHIFTRQ(v[0], v[1], v[2]) + } else { + panic("instruction KSHIFTRQ takes exactly 3 operands") + } +} + +func __asm_proxy_KSHIFTRW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KSHIFTRW(v[0], v[1], v[2]) + } else { + panic("instruction KSHIFTRW takes exactly 3 operands") + } +} + +func __asm_proxy_KTESTB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KTESTB(v[0], v[1]) + } else { + panic("instruction KTESTB takes exactly 2 operands") + } +} + +func __asm_proxy_KTESTD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KTESTD(v[0], v[1]) + } else { + panic("instruction KTESTD takes exactly 2 operands") + } +} + +func __asm_proxy_KTESTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KTESTQ(v[0], v[1]) + } else { + panic("instruction KTESTQ takes exactly 2 operands") + } +} + +func __asm_proxy_KTESTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.KTESTW(v[0], v[1]) + } else { + panic("instruction KTESTW takes exactly 2 operands") + } +} + +func __asm_proxy_KUNPCKBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KUNPCKBW(v[0], v[1], v[2]) + } else { + panic("instruction KUNPCKBW takes exactly 3 operands") + } +} + +func __asm_proxy_KUNPCKDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KUNPCKDQ(v[0], v[1], v[2]) + } else { + panic("instruction KUNPCKDQ takes exactly 3 operands") + } +} + +func __asm_proxy_KUNPCKWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KUNPCKWD(v[0], v[1], v[2]) + } else { + panic("instruction KUNPCKWD takes exactly 3 operands") + } +} + +func __asm_proxy_KXNORB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KXNORB(v[0], v[1], v[2]) + } else { + panic("instruction KXNORB takes exactly 3 operands") + } +} + +func __asm_proxy_KXNORD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KXNORD(v[0], v[1], v[2]) + } else { + panic("instruction KXNORD takes exactly 3 operands") + } +} + +func __asm_proxy_KXNORQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KXNORQ(v[0], v[1], v[2]) + } else { + panic("instruction KXNORQ takes exactly 3 operands") + } +} + +func __asm_proxy_KXNORW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KXNORW(v[0], v[1], v[2]) + } else { + panic("instruction KXNORW takes exactly 3 operands") + } +} + +func __asm_proxy_KXORB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KXORB(v[0], v[1], v[2]) + } else { + panic("instruction KXORB takes exactly 3 operands") + } +} + +func __asm_proxy_KXORD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KXORD(v[0], v[1], v[2]) + } else { + panic("instruction KXORD takes exactly 3 operands") + } +} + +func __asm_proxy_KXORQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KXORQ(v[0], v[1], v[2]) + } else { + panic("instruction KXORQ takes exactly 3 operands") + } +} + +func __asm_proxy_KXORW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.KXORW(v[0], v[1], v[2]) + } else { + panic("instruction KXORW takes exactly 3 operands") + } +} + +func __asm_proxy_LDDQU__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.LDDQU(v[0], v[1]) + } else { + panic("instruction LDDQU takes exactly 2 operands") + } +} + +func __asm_proxy_LDMXCSR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.LDMXCSR(v[0]) + } else { + panic("instruction LDMXCSR takes exactly 1 operand") + } +} + +func __asm_proxy_LEAL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.LEAL(v[0], v[1]) + } else { + panic("instruction LEAL takes exactly 2 operands") + } +} + +func __asm_proxy_LEAQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.LEAQ(v[0], v[1]) + } else { + panic("instruction LEAQ takes exactly 2 operands") + } +} + +func __asm_proxy_LEAW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.LEAW(v[0], v[1]) + } else { + panic("instruction LEAW takes exactly 2 operands") + } +} + +func __asm_proxy_LFENCE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.LFENCE() + } else { + panic("instruction LFENCE takes no operands") + } +} + +func __asm_proxy_LZCNTL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.LZCNTL(v[0], v[1]) + } else { + panic("instruction LZCNTL takes exactly 2 operands") + } +} + +func __asm_proxy_LZCNTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.LZCNTQ(v[0], v[1]) + } else { + panic("instruction LZCNTQ takes exactly 2 operands") + } +} + +func __asm_proxy_LZCNTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.LZCNTW(v[0], v[1]) + } else { + panic("instruction LZCNTW takes exactly 2 operands") + } +} + +func __asm_proxy_MASKMOVDQU__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MASKMOVDQU(v[0], v[1]) + } else { + panic("instruction MASKMOVDQU takes exactly 2 operands") + } +} + +func __asm_proxy_MASKMOVQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MASKMOVQ(v[0], v[1]) + } else { + panic("instruction MASKMOVQ takes exactly 2 operands") + } +} + +func __asm_proxy_MAXPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MAXPD(v[0], v[1]) + } else { + panic("instruction MAXPD takes exactly 2 operands") + } +} + +func __asm_proxy_MAXPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MAXPS(v[0], v[1]) + } else { + panic("instruction MAXPS takes exactly 2 operands") + } +} + +func __asm_proxy_MAXSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MAXSD(v[0], v[1]) + } else { + panic("instruction MAXSD takes exactly 2 operands") + } +} + +func __asm_proxy_MAXSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MAXSS(v[0], v[1]) + } else { + panic("instruction MAXSS takes exactly 2 operands") + } +} + +func __asm_proxy_MFENCE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.MFENCE() + } else { + panic("instruction MFENCE takes no operands") + } +} + +func __asm_proxy_MINPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MINPD(v[0], v[1]) + } else { + panic("instruction MINPD takes exactly 2 operands") + } +} + +func __asm_proxy_MINPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MINPS(v[0], v[1]) + } else { + panic("instruction MINPS takes exactly 2 operands") + } +} + +func __asm_proxy_MINSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MINSD(v[0], v[1]) + } else { + panic("instruction MINSD takes exactly 2 operands") + } +} + +func __asm_proxy_MINSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MINSS(v[0], v[1]) + } else { + panic("instruction MINSS takes exactly 2 operands") + } +} + +func __asm_proxy_MONITOR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.MONITOR() + } else { + panic("instruction MONITOR takes no operands") + } +} + +func __asm_proxy_MONITORX__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.MONITORX() + } else { + panic("instruction MONITORX takes no operands") + } +} + +func __asm_proxy_MOVAPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVAPD(v[0], v[1]) + } else { + panic("instruction MOVAPD takes exactly 2 operands") + } +} + +func __asm_proxy_MOVAPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVAPS(v[0], v[1]) + } else { + panic("instruction MOVAPS takes exactly 2 operands") + } +} + +func __asm_proxy_MOVB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVB(v[0], v[1]) + } else { + panic("instruction MOVB takes exactly 2 operands") + } +} + +func __asm_proxy_MOVBEL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVBEL(v[0], v[1]) + } else { + panic("instruction MOVBEL takes exactly 2 operands") + } +} + +func __asm_proxy_MOVBEQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVBEQ(v[0], v[1]) + } else { + panic("instruction MOVBEQ takes exactly 2 operands") + } +} + +func __asm_proxy_MOVBEW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVBEW(v[0], v[1]) + } else { + panic("instruction MOVBEW takes exactly 2 operands") + } +} + +func __asm_proxy_MOVD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVD(v[0], v[1]) + } else { + panic("instruction MOVD takes exactly 2 operands") + } +} + +func __asm_proxy_MOVDDUP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVDDUP(v[0], v[1]) + } else { + panic("instruction MOVDDUP takes exactly 2 operands") + } +} + +func __asm_proxy_MOVDQ2Q__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVDQ2Q(v[0], v[1]) + } else { + panic("instruction MOVDQ2Q takes exactly 2 operands") + } +} + +func __asm_proxy_MOVDQA__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVDQA(v[0], v[1]) + } else { + panic("instruction MOVDQA takes exactly 2 operands") + } +} + +func __asm_proxy_MOVDQU__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVDQU(v[0], v[1]) + } else { + panic("instruction MOVDQU takes exactly 2 operands") + } +} + +func __asm_proxy_MOVHLPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVHLPS(v[0], v[1]) + } else { + panic("instruction MOVHLPS takes exactly 2 operands") + } +} + +func __asm_proxy_MOVHPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVHPD(v[0], v[1]) + } else { + panic("instruction MOVHPD takes exactly 2 operands") + } +} + +func __asm_proxy_MOVHPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVHPS(v[0], v[1]) + } else { + panic("instruction MOVHPS takes exactly 2 operands") + } +} + +func __asm_proxy_MOVL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVL(v[0], v[1]) + } else { + panic("instruction MOVL takes exactly 2 operands") + } +} + +func __asm_proxy_MOVLHPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVLHPS(v[0], v[1]) + } else { + panic("instruction MOVLHPS takes exactly 2 operands") + } +} + +func __asm_proxy_MOVLPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVLPD(v[0], v[1]) + } else { + panic("instruction MOVLPD takes exactly 2 operands") + } +} + +func __asm_proxy_MOVLPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVLPS(v[0], v[1]) + } else { + panic("instruction MOVLPS takes exactly 2 operands") + } +} + +func __asm_proxy_MOVMSKPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVMSKPD(v[0], v[1]) + } else { + panic("instruction MOVMSKPD takes exactly 2 operands") + } +} + +func __asm_proxy_MOVMSKPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVMSKPS(v[0], v[1]) + } else { + panic("instruction MOVMSKPS takes exactly 2 operands") + } +} + +func __asm_proxy_MOVNTDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVNTDQ(v[0], v[1]) + } else { + panic("instruction MOVNTDQ takes exactly 2 operands") + } +} + +func __asm_proxy_MOVNTDQA__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVNTDQA(v[0], v[1]) + } else { + panic("instruction MOVNTDQA takes exactly 2 operands") + } +} + +func __asm_proxy_MOVNTIL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVNTIL(v[0], v[1]) + } else { + panic("instruction MOVNTIL takes exactly 2 operands") + } +} + +func __asm_proxy_MOVNTIQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVNTIQ(v[0], v[1]) + } else { + panic("instruction MOVNTIQ takes exactly 2 operands") + } +} + +func __asm_proxy_MOVNTPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVNTPD(v[0], v[1]) + } else { + panic("instruction MOVNTPD takes exactly 2 operands") + } +} + +func __asm_proxy_MOVNTPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVNTPS(v[0], v[1]) + } else { + panic("instruction MOVNTPS takes exactly 2 operands") + } +} + +func __asm_proxy_MOVNTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVNTQ(v[0], v[1]) + } else { + panic("instruction MOVNTQ takes exactly 2 operands") + } +} + +func __asm_proxy_MOVNTSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVNTSD(v[0], v[1]) + } else { + panic("instruction MOVNTSD takes exactly 2 operands") + } +} + +func __asm_proxy_MOVNTSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVNTSS(v[0], v[1]) + } else { + panic("instruction MOVNTSS takes exactly 2 operands") + } +} + +func __asm_proxy_MOVQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVQ(v[0], v[1]) + } else { + panic("instruction MOVQ takes exactly 2 operands") + } +} + +func __asm_proxy_MOVQ2DQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVQ2DQ(v[0], v[1]) + } else { + panic("instruction MOVQ2DQ takes exactly 2 operands") + } +} + +func __asm_proxy_MOVSBL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVSBL(v[0], v[1]) + } else { + panic("instruction MOVSBL takes exactly 2 operands") + } +} + +func __asm_proxy_MOVSBQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVSBQ(v[0], v[1]) + } else { + panic("instruction MOVSBQ takes exactly 2 operands") + } +} + +func __asm_proxy_MOVSBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVSBW(v[0], v[1]) + } else { + panic("instruction MOVSBW takes exactly 2 operands") + } +} + +func __asm_proxy_MOVSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVSD(v[0], v[1]) + } else { + panic("instruction MOVSD takes exactly 2 operands") + } +} + +func __asm_proxy_MOVSHDUP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVSHDUP(v[0], v[1]) + } else { + panic("instruction MOVSHDUP takes exactly 2 operands") + } +} + +func __asm_proxy_MOVSLDUP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVSLDUP(v[0], v[1]) + } else { + panic("instruction MOVSLDUP takes exactly 2 operands") + } +} + +func __asm_proxy_MOVSLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVSLQ(v[0], v[1]) + } else { + panic("instruction MOVSLQ takes exactly 2 operands") + } +} + +func __asm_proxy_MOVSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVSS(v[0], v[1]) + } else { + panic("instruction MOVSS takes exactly 2 operands") + } +} + +func __asm_proxy_MOVSWL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVSWL(v[0], v[1]) + } else { + panic("instruction MOVSWL takes exactly 2 operands") + } +} + +func __asm_proxy_MOVSWQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVSWQ(v[0], v[1]) + } else { + panic("instruction MOVSWQ takes exactly 2 operands") + } +} + +func __asm_proxy_MOVUPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVUPD(v[0], v[1]) + } else { + panic("instruction MOVUPD takes exactly 2 operands") + } +} + +func __asm_proxy_MOVUPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVUPS(v[0], v[1]) + } else { + panic("instruction MOVUPS takes exactly 2 operands") + } +} + +func __asm_proxy_MOVW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVW(v[0], v[1]) + } else { + panic("instruction MOVW takes exactly 2 operands") + } +} + +func __asm_proxy_MOVZBL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVZBL(v[0], v[1]) + } else { + panic("instruction MOVZBL takes exactly 2 operands") + } +} + +func __asm_proxy_MOVZBQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVZBQ(v[0], v[1]) + } else { + panic("instruction MOVZBQ takes exactly 2 operands") + } +} + +func __asm_proxy_MOVZBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVZBW(v[0], v[1]) + } else { + panic("instruction MOVZBW takes exactly 2 operands") + } +} + +func __asm_proxy_MOVZWL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVZWL(v[0], v[1]) + } else { + panic("instruction MOVZWL takes exactly 2 operands") + } +} + +func __asm_proxy_MOVZWQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MOVZWQ(v[0], v[1]) + } else { + panic("instruction MOVZWQ takes exactly 2 operands") + } +} + +func __asm_proxy_MPSADBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.MPSADBW(v[0], v[1], v[2]) + } else { + panic("instruction MPSADBW takes exactly 3 operands") + } +} + +func __asm_proxy_MULB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.MULB(v[0]) + } else { + panic("instruction MULB takes exactly 1 operand") + } +} + +func __asm_proxy_MULL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.MULL(v[0]) + } else { + panic("instruction MULL takes exactly 1 operand") + } +} + +func __asm_proxy_MULPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MULPD(v[0], v[1]) + } else { + panic("instruction MULPD takes exactly 2 operands") + } +} + +func __asm_proxy_MULPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MULPS(v[0], v[1]) + } else { + panic("instruction MULPS takes exactly 2 operands") + } +} + +func __asm_proxy_MULQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.MULQ(v[0]) + } else { + panic("instruction MULQ takes exactly 1 operand") + } +} + +func __asm_proxy_MULSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MULSD(v[0], v[1]) + } else { + panic("instruction MULSD takes exactly 2 operands") + } +} + +func __asm_proxy_MULSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.MULSS(v[0], v[1]) + } else { + panic("instruction MULSS takes exactly 2 operands") + } +} + +func __asm_proxy_MULW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.MULW(v[0]) + } else { + panic("instruction MULW takes exactly 1 operand") + } +} + +func __asm_proxy_MULXL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.MULXL(v[0], v[1], v[2]) + } else { + panic("instruction MULXL takes exactly 3 operands") + } +} + +func __asm_proxy_MULXQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.MULXQ(v[0], v[1], v[2]) + } else { + panic("instruction MULXQ takes exactly 3 operands") + } +} + +func __asm_proxy_MWAIT__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.MWAIT() + } else { + panic("instruction MWAIT takes no operands") + } +} + +func __asm_proxy_MWAITX__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.MWAITX() + } else { + panic("instruction MWAITX takes no operands") + } +} + +func __asm_proxy_NEGB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.NEGB(v[0]) + } else { + panic("instruction NEGB takes exactly 1 operand") + } +} + +func __asm_proxy_NEGL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.NEGL(v[0]) + } else { + panic("instruction NEGL takes exactly 1 operand") + } +} + +func __asm_proxy_NEGQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.NEGQ(v[0]) + } else { + panic("instruction NEGQ takes exactly 1 operand") + } +} + +func __asm_proxy_NEGW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.NEGW(v[0]) + } else { + panic("instruction NEGW takes exactly 1 operand") + } +} + +func __asm_proxy_NOP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.NOP() + } else { + panic("instruction NOP takes no operands") + } +} + +func __asm_proxy_NOTB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.NOTB(v[0]) + } else { + panic("instruction NOTB takes exactly 1 operand") + } +} + +func __asm_proxy_NOTL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.NOTL(v[0]) + } else { + panic("instruction NOTL takes exactly 1 operand") + } +} + +func __asm_proxy_NOTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.NOTQ(v[0]) + } else { + panic("instruction NOTQ takes exactly 1 operand") + } +} + +func __asm_proxy_NOTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.NOTW(v[0]) + } else { + panic("instruction NOTW takes exactly 1 operand") + } +} + +func __asm_proxy_ORB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ORB(v[0], v[1]) + } else { + panic("instruction ORB takes exactly 2 operands") + } +} + +func __asm_proxy_ORL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ORL(v[0], v[1]) + } else { + panic("instruction ORL takes exactly 2 operands") + } +} + +func __asm_proxy_ORPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ORPD(v[0], v[1]) + } else { + panic("instruction ORPD takes exactly 2 operands") + } +} + +func __asm_proxy_ORPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ORPS(v[0], v[1]) + } else { + panic("instruction ORPS takes exactly 2 operands") + } +} + +func __asm_proxy_ORQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ORQ(v[0], v[1]) + } else { + panic("instruction ORQ takes exactly 2 operands") + } +} + +func __asm_proxy_ORW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ORW(v[0], v[1]) + } else { + panic("instruction ORW takes exactly 2 operands") + } +} + +func __asm_proxy_PABSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PABSB(v[0], v[1]) + } else { + panic("instruction PABSB takes exactly 2 operands") + } +} + +func __asm_proxy_PABSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PABSD(v[0], v[1]) + } else { + panic("instruction PABSD takes exactly 2 operands") + } +} + +func __asm_proxy_PABSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PABSW(v[0], v[1]) + } else { + panic("instruction PABSW takes exactly 2 operands") + } +} + +func __asm_proxy_PACKSSDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PACKSSDW(v[0], v[1]) + } else { + panic("instruction PACKSSDW takes exactly 2 operands") + } +} + +func __asm_proxy_PACKSSWB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PACKSSWB(v[0], v[1]) + } else { + panic("instruction PACKSSWB takes exactly 2 operands") + } +} + +func __asm_proxy_PACKUSDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PACKUSDW(v[0], v[1]) + } else { + panic("instruction PACKUSDW takes exactly 2 operands") + } +} + +func __asm_proxy_PACKUSWB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PACKUSWB(v[0], v[1]) + } else { + panic("instruction PACKUSWB takes exactly 2 operands") + } +} + +func __asm_proxy_PADDB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PADDB(v[0], v[1]) + } else { + panic("instruction PADDB takes exactly 2 operands") + } +} + +func __asm_proxy_PADDD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PADDD(v[0], v[1]) + } else { + panic("instruction PADDD takes exactly 2 operands") + } +} + +func __asm_proxy_PADDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PADDQ(v[0], v[1]) + } else { + panic("instruction PADDQ takes exactly 2 operands") + } +} + +func __asm_proxy_PADDSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PADDSB(v[0], v[1]) + } else { + panic("instruction PADDSB takes exactly 2 operands") + } +} + +func __asm_proxy_PADDSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PADDSW(v[0], v[1]) + } else { + panic("instruction PADDSW takes exactly 2 operands") + } +} + +func __asm_proxy_PADDUSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PADDUSB(v[0], v[1]) + } else { + panic("instruction PADDUSB takes exactly 2 operands") + } +} + +func __asm_proxy_PADDUSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PADDUSW(v[0], v[1]) + } else { + panic("instruction PADDUSW takes exactly 2 operands") + } +} + +func __asm_proxy_PADDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PADDW(v[0], v[1]) + } else { + panic("instruction PADDW takes exactly 2 operands") + } +} + +func __asm_proxy_PALIGNR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PALIGNR(v[0], v[1], v[2]) + } else { + panic("instruction PALIGNR takes exactly 3 operands") + } +} + +func __asm_proxy_PAND__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PAND(v[0], v[1]) + } else { + panic("instruction PAND takes exactly 2 operands") + } +} + +func __asm_proxy_PANDN__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PANDN(v[0], v[1]) + } else { + panic("instruction PANDN takes exactly 2 operands") + } +} + +func __asm_proxy_PAUSE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.PAUSE() + } else { + panic("instruction PAUSE takes no operands") + } +} + +func __asm_proxy_PAVGB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PAVGB(v[0], v[1]) + } else { + panic("instruction PAVGB takes exactly 2 operands") + } +} + +func __asm_proxy_PAVGUSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PAVGUSB(v[0], v[1]) + } else { + panic("instruction PAVGUSB takes exactly 2 operands") + } +} + +func __asm_proxy_PAVGW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PAVGW(v[0], v[1]) + } else { + panic("instruction PAVGW takes exactly 2 operands") + } +} + +func __asm_proxy_PBLENDVB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PBLENDVB(v[0], v[1], v[2]) + } else { + panic("instruction PBLENDVB takes exactly 3 operands") + } +} + +func __asm_proxy_PBLENDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PBLENDW(v[0], v[1], v[2]) + } else { + panic("instruction PBLENDW takes exactly 3 operands") + } +} + +func __asm_proxy_PCLMULQDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PCLMULQDQ(v[0], v[1], v[2]) + } else { + panic("instruction PCLMULQDQ takes exactly 3 operands") + } +} + +func __asm_proxy_PCMPEQB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PCMPEQB(v[0], v[1]) + } else { + panic("instruction PCMPEQB takes exactly 2 operands") + } +} + +func __asm_proxy_PCMPEQD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PCMPEQD(v[0], v[1]) + } else { + panic("instruction PCMPEQD takes exactly 2 operands") + } +} + +func __asm_proxy_PCMPEQQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PCMPEQQ(v[0], v[1]) + } else { + panic("instruction PCMPEQQ takes exactly 2 operands") + } +} + +func __asm_proxy_PCMPEQW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PCMPEQW(v[0], v[1]) + } else { + panic("instruction PCMPEQW takes exactly 2 operands") + } +} + +func __asm_proxy_PCMPESTRI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PCMPESTRI(v[0], v[1], v[2]) + } else { + panic("instruction PCMPESTRI takes exactly 3 operands") + } +} + +func __asm_proxy_PCMPESTRM__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PCMPESTRM(v[0], v[1], v[2]) + } else { + panic("instruction PCMPESTRM takes exactly 3 operands") + } +} + +func __asm_proxy_PCMPGTB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PCMPGTB(v[0], v[1]) + } else { + panic("instruction PCMPGTB takes exactly 2 operands") + } +} + +func __asm_proxy_PCMPGTD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PCMPGTD(v[0], v[1]) + } else { + panic("instruction PCMPGTD takes exactly 2 operands") + } +} + +func __asm_proxy_PCMPGTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PCMPGTQ(v[0], v[1]) + } else { + panic("instruction PCMPGTQ takes exactly 2 operands") + } +} + +func __asm_proxy_PCMPGTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PCMPGTW(v[0], v[1]) + } else { + panic("instruction PCMPGTW takes exactly 2 operands") + } +} + +func __asm_proxy_PCMPISTRI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PCMPISTRI(v[0], v[1], v[2]) + } else { + panic("instruction PCMPISTRI takes exactly 3 operands") + } +} + +func __asm_proxy_PCMPISTRM__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PCMPISTRM(v[0], v[1], v[2]) + } else { + panic("instruction PCMPISTRM takes exactly 3 operands") + } +} + +func __asm_proxy_PDEP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PDEP(v[0], v[1], v[2]) + } else { + panic("instruction PDEP takes exactly 3 operands") + } +} + +func __asm_proxy_PEXT__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PEXT(v[0], v[1], v[2]) + } else { + panic("instruction PEXT takes exactly 3 operands") + } +} + +func __asm_proxy_PEXTRB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PEXTRB(v[0], v[1], v[2]) + } else { + panic("instruction PEXTRB takes exactly 3 operands") + } +} + +func __asm_proxy_PEXTRD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PEXTRD(v[0], v[1], v[2]) + } else { + panic("instruction PEXTRD takes exactly 3 operands") + } +} + +func __asm_proxy_PEXTRQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PEXTRQ(v[0], v[1], v[2]) + } else { + panic("instruction PEXTRQ takes exactly 3 operands") + } +} + +func __asm_proxy_PEXTRW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PEXTRW(v[0], v[1], v[2]) + } else { + panic("instruction PEXTRW takes exactly 3 operands") + } +} + +func __asm_proxy_PF2ID__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PF2ID(v[0], v[1]) + } else { + panic("instruction PF2ID takes exactly 2 operands") + } +} + +func __asm_proxy_PF2IW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PF2IW(v[0], v[1]) + } else { + panic("instruction PF2IW takes exactly 2 operands") + } +} + +func __asm_proxy_PFACC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFACC(v[0], v[1]) + } else { + panic("instruction PFACC takes exactly 2 operands") + } +} + +func __asm_proxy_PFADD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFADD(v[0], v[1]) + } else { + panic("instruction PFADD takes exactly 2 operands") + } +} + +func __asm_proxy_PFCMPEQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFCMPEQ(v[0], v[1]) + } else { + panic("instruction PFCMPEQ takes exactly 2 operands") + } +} + +func __asm_proxy_PFCMPGE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFCMPGE(v[0], v[1]) + } else { + panic("instruction PFCMPGE takes exactly 2 operands") + } +} + +func __asm_proxy_PFCMPGT__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFCMPGT(v[0], v[1]) + } else { + panic("instruction PFCMPGT takes exactly 2 operands") + } +} + +func __asm_proxy_PFMAX__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFMAX(v[0], v[1]) + } else { + panic("instruction PFMAX takes exactly 2 operands") + } +} + +func __asm_proxy_PFMIN__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFMIN(v[0], v[1]) + } else { + panic("instruction PFMIN takes exactly 2 operands") + } +} + +func __asm_proxy_PFMUL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFMUL(v[0], v[1]) + } else { + panic("instruction PFMUL takes exactly 2 operands") + } +} + +func __asm_proxy_PFNACC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFNACC(v[0], v[1]) + } else { + panic("instruction PFNACC takes exactly 2 operands") + } +} + +func __asm_proxy_PFPNACC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFPNACC(v[0], v[1]) + } else { + panic("instruction PFPNACC takes exactly 2 operands") + } +} + +func __asm_proxy_PFRCP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFRCP(v[0], v[1]) + } else { + panic("instruction PFRCP takes exactly 2 operands") + } +} + +func __asm_proxy_PFRCPIT1__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFRCPIT1(v[0], v[1]) + } else { + panic("instruction PFRCPIT1 takes exactly 2 operands") + } +} + +func __asm_proxy_PFRCPIT2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFRCPIT2(v[0], v[1]) + } else { + panic("instruction PFRCPIT2 takes exactly 2 operands") + } +} + +func __asm_proxy_PFRSQIT1__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFRSQIT1(v[0], v[1]) + } else { + panic("instruction PFRSQIT1 takes exactly 2 operands") + } +} + +func __asm_proxy_PFRSQRT__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFRSQRT(v[0], v[1]) + } else { + panic("instruction PFRSQRT takes exactly 2 operands") + } +} + +func __asm_proxy_PFSUB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFSUB(v[0], v[1]) + } else { + panic("instruction PFSUB takes exactly 2 operands") + } +} + +func __asm_proxy_PFSUBR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PFSUBR(v[0], v[1]) + } else { + panic("instruction PFSUBR takes exactly 2 operands") + } +} + +func __asm_proxy_PHADDD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PHADDD(v[0], v[1]) + } else { + panic("instruction PHADDD takes exactly 2 operands") + } +} + +func __asm_proxy_PHADDSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PHADDSW(v[0], v[1]) + } else { + panic("instruction PHADDSW takes exactly 2 operands") + } +} + +func __asm_proxy_PHADDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PHADDW(v[0], v[1]) + } else { + panic("instruction PHADDW takes exactly 2 operands") + } +} + +func __asm_proxy_PHMINPOSUW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PHMINPOSUW(v[0], v[1]) + } else { + panic("instruction PHMINPOSUW takes exactly 2 operands") + } +} + +func __asm_proxy_PHSUBD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PHSUBD(v[0], v[1]) + } else { + panic("instruction PHSUBD takes exactly 2 operands") + } +} + +func __asm_proxy_PHSUBSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PHSUBSW(v[0], v[1]) + } else { + panic("instruction PHSUBSW takes exactly 2 operands") + } +} + +func __asm_proxy_PHSUBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PHSUBW(v[0], v[1]) + } else { + panic("instruction PHSUBW takes exactly 2 operands") + } +} + +func __asm_proxy_PI2FD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PI2FD(v[0], v[1]) + } else { + panic("instruction PI2FD takes exactly 2 operands") + } +} + +func __asm_proxy_PI2FW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PI2FW(v[0], v[1]) + } else { + panic("instruction PI2FW takes exactly 2 operands") + } +} + +func __asm_proxy_PINSRB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PINSRB(v[0], v[1], v[2]) + } else { + panic("instruction PINSRB takes exactly 3 operands") + } +} + +func __asm_proxy_PINSRD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PINSRD(v[0], v[1], v[2]) + } else { + panic("instruction PINSRD takes exactly 3 operands") + } +} + +func __asm_proxy_PINSRQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PINSRQ(v[0], v[1], v[2]) + } else { + panic("instruction PINSRQ takes exactly 3 operands") + } +} + +func __asm_proxy_PINSRW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PINSRW(v[0], v[1], v[2]) + } else { + panic("instruction PINSRW takes exactly 3 operands") + } +} + +func __asm_proxy_PMADDUBSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMADDUBSW(v[0], v[1]) + } else { + panic("instruction PMADDUBSW takes exactly 2 operands") + } +} + +func __asm_proxy_PMADDWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMADDWD(v[0], v[1]) + } else { + panic("instruction PMADDWD takes exactly 2 operands") + } +} + +func __asm_proxy_PMAXSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMAXSB(v[0], v[1]) + } else { + panic("instruction PMAXSB takes exactly 2 operands") + } +} + +func __asm_proxy_PMAXSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMAXSD(v[0], v[1]) + } else { + panic("instruction PMAXSD takes exactly 2 operands") + } +} + +func __asm_proxy_PMAXSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMAXSW(v[0], v[1]) + } else { + panic("instruction PMAXSW takes exactly 2 operands") + } +} + +func __asm_proxy_PMAXUB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMAXUB(v[0], v[1]) + } else { + panic("instruction PMAXUB takes exactly 2 operands") + } +} + +func __asm_proxy_PMAXUD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMAXUD(v[0], v[1]) + } else { + panic("instruction PMAXUD takes exactly 2 operands") + } +} + +func __asm_proxy_PMAXUW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMAXUW(v[0], v[1]) + } else { + panic("instruction PMAXUW takes exactly 2 operands") + } +} + +func __asm_proxy_PMINSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMINSB(v[0], v[1]) + } else { + panic("instruction PMINSB takes exactly 2 operands") + } +} + +func __asm_proxy_PMINSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMINSD(v[0], v[1]) + } else { + panic("instruction PMINSD takes exactly 2 operands") + } +} + +func __asm_proxy_PMINSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMINSW(v[0], v[1]) + } else { + panic("instruction PMINSW takes exactly 2 operands") + } +} + +func __asm_proxy_PMINUB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMINUB(v[0], v[1]) + } else { + panic("instruction PMINUB takes exactly 2 operands") + } +} + +func __asm_proxy_PMINUD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMINUD(v[0], v[1]) + } else { + panic("instruction PMINUD takes exactly 2 operands") + } +} + +func __asm_proxy_PMINUW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMINUW(v[0], v[1]) + } else { + panic("instruction PMINUW takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVMSKB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVMSKB(v[0], v[1]) + } else { + panic("instruction PMOVMSKB takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVSXBD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVSXBD(v[0], v[1]) + } else { + panic("instruction PMOVSXBD takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVSXBQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVSXBQ(v[0], v[1]) + } else { + panic("instruction PMOVSXBQ takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVSXBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVSXBW(v[0], v[1]) + } else { + panic("instruction PMOVSXBW takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVSXDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVSXDQ(v[0], v[1]) + } else { + panic("instruction PMOVSXDQ takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVSXWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVSXWD(v[0], v[1]) + } else { + panic("instruction PMOVSXWD takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVSXWQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVSXWQ(v[0], v[1]) + } else { + panic("instruction PMOVSXWQ takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVZXBD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVZXBD(v[0], v[1]) + } else { + panic("instruction PMOVZXBD takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVZXBQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVZXBQ(v[0], v[1]) + } else { + panic("instruction PMOVZXBQ takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVZXBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVZXBW(v[0], v[1]) + } else { + panic("instruction PMOVZXBW takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVZXDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVZXDQ(v[0], v[1]) + } else { + panic("instruction PMOVZXDQ takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVZXWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVZXWD(v[0], v[1]) + } else { + panic("instruction PMOVZXWD takes exactly 2 operands") + } +} + +func __asm_proxy_PMOVZXWQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMOVZXWQ(v[0], v[1]) + } else { + panic("instruction PMOVZXWQ takes exactly 2 operands") + } +} + +func __asm_proxy_PMULDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMULDQ(v[0], v[1]) + } else { + panic("instruction PMULDQ takes exactly 2 operands") + } +} + +func __asm_proxy_PMULHRSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMULHRSW(v[0], v[1]) + } else { + panic("instruction PMULHRSW takes exactly 2 operands") + } +} + +func __asm_proxy_PMULHRW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMULHRW(v[0], v[1]) + } else { + panic("instruction PMULHRW takes exactly 2 operands") + } +} + +func __asm_proxy_PMULHUW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMULHUW(v[0], v[1]) + } else { + panic("instruction PMULHUW takes exactly 2 operands") + } +} + +func __asm_proxy_PMULHW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMULHW(v[0], v[1]) + } else { + panic("instruction PMULHW takes exactly 2 operands") + } +} + +func __asm_proxy_PMULLD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMULLD(v[0], v[1]) + } else { + panic("instruction PMULLD takes exactly 2 operands") + } +} + +func __asm_proxy_PMULLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMULLW(v[0], v[1]) + } else { + panic("instruction PMULLW takes exactly 2 operands") + } +} + +func __asm_proxy_PMULUDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PMULUDQ(v[0], v[1]) + } else { + panic("instruction PMULUDQ takes exactly 2 operands") + } +} + +func __asm_proxy_POPCNTL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.POPCNTL(v[0], v[1]) + } else { + panic("instruction POPCNTL takes exactly 2 operands") + } +} + +func __asm_proxy_POPCNTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.POPCNTQ(v[0], v[1]) + } else { + panic("instruction POPCNTQ takes exactly 2 operands") + } +} + +func __asm_proxy_POPCNTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.POPCNTW(v[0], v[1]) + } else { + panic("instruction POPCNTW takes exactly 2 operands") + } +} + +func __asm_proxy_POPQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.POPQ(v[0]) + } else { + panic("instruction POPQ takes exactly 1 operand") + } +} + +func __asm_proxy_POPW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.POPW(v[0]) + } else { + panic("instruction POPW takes exactly 1 operand") + } +} + +func __asm_proxy_POR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.POR(v[0], v[1]) + } else { + panic("instruction POR takes exactly 2 operands") + } +} + +func __asm_proxy_PREFETCH__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.PREFETCH(v[0]) + } else { + panic("instruction PREFETCH takes exactly 1 operand") + } +} + +func __asm_proxy_PREFETCHNTA__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.PREFETCHNTA(v[0]) + } else { + panic("instruction PREFETCHNTA takes exactly 1 operand") + } +} + +func __asm_proxy_PREFETCHT0__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.PREFETCHT0(v[0]) + } else { + panic("instruction PREFETCHT0 takes exactly 1 operand") + } +} + +func __asm_proxy_PREFETCHT1__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.PREFETCHT1(v[0]) + } else { + panic("instruction PREFETCHT1 takes exactly 1 operand") + } +} + +func __asm_proxy_PREFETCHT2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.PREFETCHT2(v[0]) + } else { + panic("instruction PREFETCHT2 takes exactly 1 operand") + } +} + +func __asm_proxy_PREFETCHW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.PREFETCHW(v[0]) + } else { + panic("instruction PREFETCHW takes exactly 1 operand") + } +} + +func __asm_proxy_PREFETCHWT1__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.PREFETCHWT1(v[0]) + } else { + panic("instruction PREFETCHWT1 takes exactly 1 operand") + } +} + +func __asm_proxy_PSADBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSADBW(v[0], v[1]) + } else { + panic("instruction PSADBW takes exactly 2 operands") + } +} + +func __asm_proxy_PSHUFB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSHUFB(v[0], v[1]) + } else { + panic("instruction PSHUFB takes exactly 2 operands") + } +} + +func __asm_proxy_PSHUFD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PSHUFD(v[0], v[1], v[2]) + } else { + panic("instruction PSHUFD takes exactly 3 operands") + } +} + +func __asm_proxy_PSHUFHW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PSHUFHW(v[0], v[1], v[2]) + } else { + panic("instruction PSHUFHW takes exactly 3 operands") + } +} + +func __asm_proxy_PSHUFLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PSHUFLW(v[0], v[1], v[2]) + } else { + panic("instruction PSHUFLW takes exactly 3 operands") + } +} + +func __asm_proxy_PSHUFW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.PSHUFW(v[0], v[1], v[2]) + } else { + panic("instruction PSHUFW takes exactly 3 operands") + } +} + +func __asm_proxy_PSIGNB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSIGNB(v[0], v[1]) + } else { + panic("instruction PSIGNB takes exactly 2 operands") + } +} + +func __asm_proxy_PSIGND__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSIGND(v[0], v[1]) + } else { + panic("instruction PSIGND takes exactly 2 operands") + } +} + +func __asm_proxy_PSIGNW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSIGNW(v[0], v[1]) + } else { + panic("instruction PSIGNW takes exactly 2 operands") + } +} + +func __asm_proxy_PSLLD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSLLD(v[0], v[1]) + } else { + panic("instruction PSLLD takes exactly 2 operands") + } +} + +func __asm_proxy_PSLLDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSLLDQ(v[0], v[1]) + } else { + panic("instruction PSLLDQ takes exactly 2 operands") + } +} + +func __asm_proxy_PSLLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSLLQ(v[0], v[1]) + } else { + panic("instruction PSLLQ takes exactly 2 operands") + } +} + +func __asm_proxy_PSLLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSLLW(v[0], v[1]) + } else { + panic("instruction PSLLW takes exactly 2 operands") + } +} + +func __asm_proxy_PSRAD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSRAD(v[0], v[1]) + } else { + panic("instruction PSRAD takes exactly 2 operands") + } +} + +func __asm_proxy_PSRAW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSRAW(v[0], v[1]) + } else { + panic("instruction PSRAW takes exactly 2 operands") + } +} + +func __asm_proxy_PSRLD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSRLD(v[0], v[1]) + } else { + panic("instruction PSRLD takes exactly 2 operands") + } +} + +func __asm_proxy_PSRLDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSRLDQ(v[0], v[1]) + } else { + panic("instruction PSRLDQ takes exactly 2 operands") + } +} + +func __asm_proxy_PSRLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSRLQ(v[0], v[1]) + } else { + panic("instruction PSRLQ takes exactly 2 operands") + } +} + +func __asm_proxy_PSRLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSRLW(v[0], v[1]) + } else { + panic("instruction PSRLW takes exactly 2 operands") + } +} + +func __asm_proxy_PSUBB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSUBB(v[0], v[1]) + } else { + panic("instruction PSUBB takes exactly 2 operands") + } +} + +func __asm_proxy_PSUBD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSUBD(v[0], v[1]) + } else { + panic("instruction PSUBD takes exactly 2 operands") + } +} + +func __asm_proxy_PSUBQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSUBQ(v[0], v[1]) + } else { + panic("instruction PSUBQ takes exactly 2 operands") + } +} + +func __asm_proxy_PSUBSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSUBSB(v[0], v[1]) + } else { + panic("instruction PSUBSB takes exactly 2 operands") + } +} + +func __asm_proxy_PSUBSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSUBSW(v[0], v[1]) + } else { + panic("instruction PSUBSW takes exactly 2 operands") + } +} + +func __asm_proxy_PSUBUSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSUBUSB(v[0], v[1]) + } else { + panic("instruction PSUBUSB takes exactly 2 operands") + } +} + +func __asm_proxy_PSUBUSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSUBUSW(v[0], v[1]) + } else { + panic("instruction PSUBUSW takes exactly 2 operands") + } +} + +func __asm_proxy_PSUBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSUBW(v[0], v[1]) + } else { + panic("instruction PSUBW takes exactly 2 operands") + } +} + +func __asm_proxy_PSWAPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PSWAPD(v[0], v[1]) + } else { + panic("instruction PSWAPD takes exactly 2 operands") + } +} + +func __asm_proxy_PTEST__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PTEST(v[0], v[1]) + } else { + panic("instruction PTEST takes exactly 2 operands") + } +} + +func __asm_proxy_PUNPCKHBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PUNPCKHBW(v[0], v[1]) + } else { + panic("instruction PUNPCKHBW takes exactly 2 operands") + } +} + +func __asm_proxy_PUNPCKHDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PUNPCKHDQ(v[0], v[1]) + } else { + panic("instruction PUNPCKHDQ takes exactly 2 operands") + } +} + +func __asm_proxy_PUNPCKHQDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PUNPCKHQDQ(v[0], v[1]) + } else { + panic("instruction PUNPCKHQDQ takes exactly 2 operands") + } +} + +func __asm_proxy_PUNPCKHWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PUNPCKHWD(v[0], v[1]) + } else { + panic("instruction PUNPCKHWD takes exactly 2 operands") + } +} + +func __asm_proxy_PUNPCKLBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PUNPCKLBW(v[0], v[1]) + } else { + panic("instruction PUNPCKLBW takes exactly 2 operands") + } +} + +func __asm_proxy_PUNPCKLDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PUNPCKLDQ(v[0], v[1]) + } else { + panic("instruction PUNPCKLDQ takes exactly 2 operands") + } +} + +func __asm_proxy_PUNPCKLQDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PUNPCKLQDQ(v[0], v[1]) + } else { + panic("instruction PUNPCKLQDQ takes exactly 2 operands") + } +} + +func __asm_proxy_PUNPCKLWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PUNPCKLWD(v[0], v[1]) + } else { + panic("instruction PUNPCKLWD takes exactly 2 operands") + } +} + +func __asm_proxy_PUSHQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.PUSHQ(v[0]) + } else { + panic("instruction PUSHQ takes exactly 1 operand") + } +} + +func __asm_proxy_PUSHW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.PUSHW(v[0]) + } else { + panic("instruction PUSHW takes exactly 1 operand") + } +} + +func __asm_proxy_PXOR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.PXOR(v[0], v[1]) + } else { + panic("instruction PXOR takes exactly 2 operands") + } +} + +func __asm_proxy_RCLB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RCLB(v[0], v[1]) + } else { + panic("instruction RCLB takes exactly 2 operands") + } +} + +func __asm_proxy_RCLL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RCLL(v[0], v[1]) + } else { + panic("instruction RCLL takes exactly 2 operands") + } +} + +func __asm_proxy_RCLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RCLQ(v[0], v[1]) + } else { + panic("instruction RCLQ takes exactly 2 operands") + } +} + +func __asm_proxy_RCLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RCLW(v[0], v[1]) + } else { + panic("instruction RCLW takes exactly 2 operands") + } +} + +func __asm_proxy_RCPPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RCPPS(v[0], v[1]) + } else { + panic("instruction RCPPS takes exactly 2 operands") + } +} + +func __asm_proxy_RCPSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RCPSS(v[0], v[1]) + } else { + panic("instruction RCPSS takes exactly 2 operands") + } +} + +func __asm_proxy_RCRB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RCRB(v[0], v[1]) + } else { + panic("instruction RCRB takes exactly 2 operands") + } +} + +func __asm_proxy_RCRL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RCRL(v[0], v[1]) + } else { + panic("instruction RCRL takes exactly 2 operands") + } +} + +func __asm_proxy_RCRQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RCRQ(v[0], v[1]) + } else { + panic("instruction RCRQ takes exactly 2 operands") + } +} + +func __asm_proxy_RCRW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RCRW(v[0], v[1]) + } else { + panic("instruction RCRW takes exactly 2 operands") + } +} + +func __asm_proxy_RDRAND__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.RDRAND(v[0]) + } else { + panic("instruction RDRAND takes exactly 1 operand") + } +} + +func __asm_proxy_RDSEED__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.RDSEED(v[0]) + } else { + panic("instruction RDSEED takes exactly 1 operand") + } +} + +func __asm_proxy_RDTSC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.RDTSC() + } else { + panic("instruction RDTSC takes no operands") + } +} + +func __asm_proxy_RDTSCP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.RDTSCP() + } else { + panic("instruction RDTSCP takes no operands") + } +} + +func __asm_proxy_RET__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 0 : return p.RET() + case 1 : return p.RET(v[0]) + default : panic("instruction RET takes 0 or 1 operands") + } +} + +func __asm_proxy_ROLB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ROLB(v[0], v[1]) + } else { + panic("instruction ROLB takes exactly 2 operands") + } +} + +func __asm_proxy_ROLL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ROLL(v[0], v[1]) + } else { + panic("instruction ROLL takes exactly 2 operands") + } +} + +func __asm_proxy_ROLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ROLQ(v[0], v[1]) + } else { + panic("instruction ROLQ takes exactly 2 operands") + } +} + +func __asm_proxy_ROLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.ROLW(v[0], v[1]) + } else { + panic("instruction ROLW takes exactly 2 operands") + } +} + +func __asm_proxy_RORB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RORB(v[0], v[1]) + } else { + panic("instruction RORB takes exactly 2 operands") + } +} + +func __asm_proxy_RORL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RORL(v[0], v[1]) + } else { + panic("instruction RORL takes exactly 2 operands") + } +} + +func __asm_proxy_RORQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RORQ(v[0], v[1]) + } else { + panic("instruction RORQ takes exactly 2 operands") + } +} + +func __asm_proxy_RORW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RORW(v[0], v[1]) + } else { + panic("instruction RORW takes exactly 2 operands") + } +} + +func __asm_proxy_RORXL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.RORXL(v[0], v[1], v[2]) + } else { + panic("instruction RORXL takes exactly 3 operands") + } +} + +func __asm_proxy_RORXQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.RORXQ(v[0], v[1], v[2]) + } else { + panic("instruction RORXQ takes exactly 3 operands") + } +} + +func __asm_proxy_ROUNDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.ROUNDPD(v[0], v[1], v[2]) + } else { + panic("instruction ROUNDPD takes exactly 3 operands") + } +} + +func __asm_proxy_ROUNDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.ROUNDPS(v[0], v[1], v[2]) + } else { + panic("instruction ROUNDPS takes exactly 3 operands") + } +} + +func __asm_proxy_ROUNDSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.ROUNDSD(v[0], v[1], v[2]) + } else { + panic("instruction ROUNDSD takes exactly 3 operands") + } +} + +func __asm_proxy_ROUNDSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.ROUNDSS(v[0], v[1], v[2]) + } else { + panic("instruction ROUNDSS takes exactly 3 operands") + } +} + +func __asm_proxy_RSQRTPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RSQRTPS(v[0], v[1]) + } else { + panic("instruction RSQRTPS takes exactly 2 operands") + } +} + +func __asm_proxy_RSQRTSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.RSQRTSS(v[0], v[1]) + } else { + panic("instruction RSQRTSS takes exactly 2 operands") + } +} + +func __asm_proxy_SALB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SALB(v[0], v[1]) + } else { + panic("instruction SALB takes exactly 2 operands") + } +} + +func __asm_proxy_SALL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SALL(v[0], v[1]) + } else { + panic("instruction SALL takes exactly 2 operands") + } +} + +func __asm_proxy_SALQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SALQ(v[0], v[1]) + } else { + panic("instruction SALQ takes exactly 2 operands") + } +} + +func __asm_proxy_SALW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SALW(v[0], v[1]) + } else { + panic("instruction SALW takes exactly 2 operands") + } +} + +func __asm_proxy_SARB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SARB(v[0], v[1]) + } else { + panic("instruction SARB takes exactly 2 operands") + } +} + +func __asm_proxy_SARL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SARL(v[0], v[1]) + } else { + panic("instruction SARL takes exactly 2 operands") + } +} + +func __asm_proxy_SARQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SARQ(v[0], v[1]) + } else { + panic("instruction SARQ takes exactly 2 operands") + } +} + +func __asm_proxy_SARW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SARW(v[0], v[1]) + } else { + panic("instruction SARW takes exactly 2 operands") + } +} + +func __asm_proxy_SARXL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SARXL(v[0], v[1], v[2]) + } else { + panic("instruction SARXL takes exactly 3 operands") + } +} + +func __asm_proxy_SARXQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SARXQ(v[0], v[1], v[2]) + } else { + panic("instruction SARXQ takes exactly 3 operands") + } +} + +func __asm_proxy_SBBB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SBBB(v[0], v[1]) + } else { + panic("instruction SBBB takes exactly 2 operands") + } +} + +func __asm_proxy_SBBL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SBBL(v[0], v[1]) + } else { + panic("instruction SBBL takes exactly 2 operands") + } +} + +func __asm_proxy_SBBQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SBBQ(v[0], v[1]) + } else { + panic("instruction SBBQ takes exactly 2 operands") + } +} + +func __asm_proxy_SBBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SBBW(v[0], v[1]) + } else { + panic("instruction SBBW takes exactly 2 operands") + } +} + +func __asm_proxy_SETA__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETA(v[0]) + } else { + panic("instruction SETA takes exactly 1 operand") + } +} + +func __asm_proxy_SETAE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETAE(v[0]) + } else { + panic("instruction SETAE takes exactly 1 operand") + } +} + +func __asm_proxy_SETB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETB(v[0]) + } else { + panic("instruction SETB takes exactly 1 operand") + } +} + +func __asm_proxy_SETBE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETBE(v[0]) + } else { + panic("instruction SETBE takes exactly 1 operand") + } +} + +func __asm_proxy_SETC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETC(v[0]) + } else { + panic("instruction SETC takes exactly 1 operand") + } +} + +func __asm_proxy_SETE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETE(v[0]) + } else { + panic("instruction SETE takes exactly 1 operand") + } +} + +func __asm_proxy_SETG__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETG(v[0]) + } else { + panic("instruction SETG takes exactly 1 operand") + } +} + +func __asm_proxy_SETGE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETGE(v[0]) + } else { + panic("instruction SETGE takes exactly 1 operand") + } +} + +func __asm_proxy_SETL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETL(v[0]) + } else { + panic("instruction SETL takes exactly 1 operand") + } +} + +func __asm_proxy_SETLE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETLE(v[0]) + } else { + panic("instruction SETLE takes exactly 1 operand") + } +} + +func __asm_proxy_SETNA__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNA(v[0]) + } else { + panic("instruction SETNA takes exactly 1 operand") + } +} + +func __asm_proxy_SETNAE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNAE(v[0]) + } else { + panic("instruction SETNAE takes exactly 1 operand") + } +} + +func __asm_proxy_SETNB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNB(v[0]) + } else { + panic("instruction SETNB takes exactly 1 operand") + } +} + +func __asm_proxy_SETNBE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNBE(v[0]) + } else { + panic("instruction SETNBE takes exactly 1 operand") + } +} + +func __asm_proxy_SETNC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNC(v[0]) + } else { + panic("instruction SETNC takes exactly 1 operand") + } +} + +func __asm_proxy_SETNE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNE(v[0]) + } else { + panic("instruction SETNE takes exactly 1 operand") + } +} + +func __asm_proxy_SETNG__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNG(v[0]) + } else { + panic("instruction SETNG takes exactly 1 operand") + } +} + +func __asm_proxy_SETNGE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNGE(v[0]) + } else { + panic("instruction SETNGE takes exactly 1 operand") + } +} + +func __asm_proxy_SETNL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNL(v[0]) + } else { + panic("instruction SETNL takes exactly 1 operand") + } +} + +func __asm_proxy_SETNLE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNLE(v[0]) + } else { + panic("instruction SETNLE takes exactly 1 operand") + } +} + +func __asm_proxy_SETNO__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNO(v[0]) + } else { + panic("instruction SETNO takes exactly 1 operand") + } +} + +func __asm_proxy_SETNP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNP(v[0]) + } else { + panic("instruction SETNP takes exactly 1 operand") + } +} + +func __asm_proxy_SETNS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNS(v[0]) + } else { + panic("instruction SETNS takes exactly 1 operand") + } +} + +func __asm_proxy_SETNZ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETNZ(v[0]) + } else { + panic("instruction SETNZ takes exactly 1 operand") + } +} + +func __asm_proxy_SETO__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETO(v[0]) + } else { + panic("instruction SETO takes exactly 1 operand") + } +} + +func __asm_proxy_SETP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETP(v[0]) + } else { + panic("instruction SETP takes exactly 1 operand") + } +} + +func __asm_proxy_SETPE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETPE(v[0]) + } else { + panic("instruction SETPE takes exactly 1 operand") + } +} + +func __asm_proxy_SETPO__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETPO(v[0]) + } else { + panic("instruction SETPO takes exactly 1 operand") + } +} + +func __asm_proxy_SETS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETS(v[0]) + } else { + panic("instruction SETS takes exactly 1 operand") + } +} + +func __asm_proxy_SETZ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.SETZ(v[0]) + } else { + panic("instruction SETZ takes exactly 1 operand") + } +} + +func __asm_proxy_SFENCE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.SFENCE() + } else { + panic("instruction SFENCE takes no operands") + } +} + +func __asm_proxy_SHA1MSG1__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHA1MSG1(v[0], v[1]) + } else { + panic("instruction SHA1MSG1 takes exactly 2 operands") + } +} + +func __asm_proxy_SHA1MSG2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHA1MSG2(v[0], v[1]) + } else { + panic("instruction SHA1MSG2 takes exactly 2 operands") + } +} + +func __asm_proxy_SHA1NEXTE__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHA1NEXTE(v[0], v[1]) + } else { + panic("instruction SHA1NEXTE takes exactly 2 operands") + } +} + +func __asm_proxy_SHA1RNDS4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHA1RNDS4(v[0], v[1], v[2]) + } else { + panic("instruction SHA1RNDS4 takes exactly 3 operands") + } +} + +func __asm_proxy_SHA256MSG1__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHA256MSG1(v[0], v[1]) + } else { + panic("instruction SHA256MSG1 takes exactly 2 operands") + } +} + +func __asm_proxy_SHA256MSG2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHA256MSG2(v[0], v[1]) + } else { + panic("instruction SHA256MSG2 takes exactly 2 operands") + } +} + +func __asm_proxy_SHA256RNDS2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHA256RNDS2(v[0], v[1], v[2]) + } else { + panic("instruction SHA256RNDS2 takes exactly 3 operands") + } +} + +func __asm_proxy_SHLB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHLB(v[0], v[1]) + } else { + panic("instruction SHLB takes exactly 2 operands") + } +} + +func __asm_proxy_SHLDL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHLDL(v[0], v[1], v[2]) + } else { + panic("instruction SHLDL takes exactly 3 operands") + } +} + +func __asm_proxy_SHLDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHLDQ(v[0], v[1], v[2]) + } else { + panic("instruction SHLDQ takes exactly 3 operands") + } +} + +func __asm_proxy_SHLDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHLDW(v[0], v[1], v[2]) + } else { + panic("instruction SHLDW takes exactly 3 operands") + } +} + +func __asm_proxy_SHLL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHLL(v[0], v[1]) + } else { + panic("instruction SHLL takes exactly 2 operands") + } +} + +func __asm_proxy_SHLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHLQ(v[0], v[1]) + } else { + panic("instruction SHLQ takes exactly 2 operands") + } +} + +func __asm_proxy_SHLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHLW(v[0], v[1]) + } else { + panic("instruction SHLW takes exactly 2 operands") + } +} + +func __asm_proxy_SHLXL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHLXL(v[0], v[1], v[2]) + } else { + panic("instruction SHLXL takes exactly 3 operands") + } +} + +func __asm_proxy_SHLXQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHLXQ(v[0], v[1], v[2]) + } else { + panic("instruction SHLXQ takes exactly 3 operands") + } +} + +func __asm_proxy_SHRB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHRB(v[0], v[1]) + } else { + panic("instruction SHRB takes exactly 2 operands") + } +} + +func __asm_proxy_SHRDL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHRDL(v[0], v[1], v[2]) + } else { + panic("instruction SHRDL takes exactly 3 operands") + } +} + +func __asm_proxy_SHRDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHRDQ(v[0], v[1], v[2]) + } else { + panic("instruction SHRDQ takes exactly 3 operands") + } +} + +func __asm_proxy_SHRDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHRDW(v[0], v[1], v[2]) + } else { + panic("instruction SHRDW takes exactly 3 operands") + } +} + +func __asm_proxy_SHRL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHRL(v[0], v[1]) + } else { + panic("instruction SHRL takes exactly 2 operands") + } +} + +func __asm_proxy_SHRQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHRQ(v[0], v[1]) + } else { + panic("instruction SHRQ takes exactly 2 operands") + } +} + +func __asm_proxy_SHRW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SHRW(v[0], v[1]) + } else { + panic("instruction SHRW takes exactly 2 operands") + } +} + +func __asm_proxy_SHRXL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHRXL(v[0], v[1], v[2]) + } else { + panic("instruction SHRXL takes exactly 3 operands") + } +} + +func __asm_proxy_SHRXQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHRXQ(v[0], v[1], v[2]) + } else { + panic("instruction SHRXQ takes exactly 3 operands") + } +} + +func __asm_proxy_SHUFPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHUFPD(v[0], v[1], v[2]) + } else { + panic("instruction SHUFPD takes exactly 3 operands") + } +} + +func __asm_proxy_SHUFPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.SHUFPS(v[0], v[1], v[2]) + } else { + panic("instruction SHUFPS takes exactly 3 operands") + } +} + +func __asm_proxy_SQRTPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SQRTPD(v[0], v[1]) + } else { + panic("instruction SQRTPD takes exactly 2 operands") + } +} + +func __asm_proxy_SQRTPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SQRTPS(v[0], v[1]) + } else { + panic("instruction SQRTPS takes exactly 2 operands") + } +} + +func __asm_proxy_SQRTSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SQRTSD(v[0], v[1]) + } else { + panic("instruction SQRTSD takes exactly 2 operands") + } +} + +func __asm_proxy_SQRTSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SQRTSS(v[0], v[1]) + } else { + panic("instruction SQRTSS takes exactly 2 operands") + } +} + +func __asm_proxy_STC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.STC() + } else { + panic("instruction STC takes no operands") + } +} + +func __asm_proxy_STD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.STD() + } else { + panic("instruction STD takes no operands") + } +} + +func __asm_proxy_STMXCSR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.STMXCSR(v[0]) + } else { + panic("instruction STMXCSR takes exactly 1 operand") + } +} + +func __asm_proxy_SUBB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SUBB(v[0], v[1]) + } else { + panic("instruction SUBB takes exactly 2 operands") + } +} + +func __asm_proxy_SUBL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SUBL(v[0], v[1]) + } else { + panic("instruction SUBL takes exactly 2 operands") + } +} + +func __asm_proxy_SUBPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SUBPD(v[0], v[1]) + } else { + panic("instruction SUBPD takes exactly 2 operands") + } +} + +func __asm_proxy_SUBPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SUBPS(v[0], v[1]) + } else { + panic("instruction SUBPS takes exactly 2 operands") + } +} + +func __asm_proxy_SUBQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SUBQ(v[0], v[1]) + } else { + panic("instruction SUBQ takes exactly 2 operands") + } +} + +func __asm_proxy_SUBSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SUBSD(v[0], v[1]) + } else { + panic("instruction SUBSD takes exactly 2 operands") + } +} + +func __asm_proxy_SUBSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SUBSS(v[0], v[1]) + } else { + panic("instruction SUBSS takes exactly 2 operands") + } +} + +func __asm_proxy_SUBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.SUBW(v[0], v[1]) + } else { + panic("instruction SUBW takes exactly 2 operands") + } +} + +func __asm_proxy_SYSCALL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.SYSCALL() + } else { + panic("instruction SYSCALL takes no operands") + } +} + +func __asm_proxy_T1MSKC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.T1MSKC(v[0], v[1]) + } else { + panic("instruction T1MSKC takes exactly 2 operands") + } +} + +func __asm_proxy_TESTB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.TESTB(v[0], v[1]) + } else { + panic("instruction TESTB takes exactly 2 operands") + } +} + +func __asm_proxy_TESTL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.TESTL(v[0], v[1]) + } else { + panic("instruction TESTL takes exactly 2 operands") + } +} + +func __asm_proxy_TESTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.TESTQ(v[0], v[1]) + } else { + panic("instruction TESTQ takes exactly 2 operands") + } +} + +func __asm_proxy_TESTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.TESTW(v[0], v[1]) + } else { + panic("instruction TESTW takes exactly 2 operands") + } +} + +func __asm_proxy_TZCNTL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.TZCNTL(v[0], v[1]) + } else { + panic("instruction TZCNTL takes exactly 2 operands") + } +} + +func __asm_proxy_TZCNTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.TZCNTQ(v[0], v[1]) + } else { + panic("instruction TZCNTQ takes exactly 2 operands") + } +} + +func __asm_proxy_TZCNTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.TZCNTW(v[0], v[1]) + } else { + panic("instruction TZCNTW takes exactly 2 operands") + } +} + +func __asm_proxy_TZMSK__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.TZMSK(v[0], v[1]) + } else { + panic("instruction TZMSK takes exactly 2 operands") + } +} + +func __asm_proxy_UCOMISD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.UCOMISD(v[0], v[1]) + } else { + panic("instruction UCOMISD takes exactly 2 operands") + } +} + +func __asm_proxy_UCOMISS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.UCOMISS(v[0], v[1]) + } else { + panic("instruction UCOMISS takes exactly 2 operands") + } +} + +func __asm_proxy_UD2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.UD2() + } else { + panic("instruction UD2 takes no operands") + } +} + +func __asm_proxy_UNPCKHPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.UNPCKHPD(v[0], v[1]) + } else { + panic("instruction UNPCKHPD takes exactly 2 operands") + } +} + +func __asm_proxy_UNPCKHPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.UNPCKHPS(v[0], v[1]) + } else { + panic("instruction UNPCKHPS takes exactly 2 operands") + } +} + +func __asm_proxy_UNPCKLPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.UNPCKLPD(v[0], v[1]) + } else { + panic("instruction UNPCKLPD takes exactly 2 operands") + } +} + +func __asm_proxy_UNPCKLPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.UNPCKLPS(v[0], v[1]) + } else { + panic("instruction UNPCKLPS takes exactly 2 operands") + } +} + +func __asm_proxy_VADDPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VADDPD(v[0], v[1], v[2]) + case 4 : return p.VADDPD(v[0], v[1], v[2], v[3]) + default : panic("instruction VADDPD takes 3 or 4 operands") + } +} + +func __asm_proxy_VADDPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VADDPS(v[0], v[1], v[2]) + case 4 : return p.VADDPS(v[0], v[1], v[2], v[3]) + default : panic("instruction VADDPS takes 3 or 4 operands") + } +} + +func __asm_proxy_VADDSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VADDSD(v[0], v[1], v[2]) + case 4 : return p.VADDSD(v[0], v[1], v[2], v[3]) + default : panic("instruction VADDSD takes 3 or 4 operands") + } +} + +func __asm_proxy_VADDSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VADDSS(v[0], v[1], v[2]) + case 4 : return p.VADDSS(v[0], v[1], v[2], v[3]) + default : panic("instruction VADDSS takes 3 or 4 operands") + } +} + +func __asm_proxy_VADDSUBPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VADDSUBPD(v[0], v[1], v[2]) + } else { + panic("instruction VADDSUBPD takes exactly 3 operands") + } +} + +func __asm_proxy_VADDSUBPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VADDSUBPS(v[0], v[1], v[2]) + } else { + panic("instruction VADDSUBPS takes exactly 3 operands") + } +} + +func __asm_proxy_VAESDEC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VAESDEC(v[0], v[1], v[2]) + } else { + panic("instruction VAESDEC takes exactly 3 operands") + } +} + +func __asm_proxy_VAESDECLAST__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VAESDECLAST(v[0], v[1], v[2]) + } else { + panic("instruction VAESDECLAST takes exactly 3 operands") + } +} + +func __asm_proxy_VAESENC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VAESENC(v[0], v[1], v[2]) + } else { + panic("instruction VAESENC takes exactly 3 operands") + } +} + +func __asm_proxy_VAESENCLAST__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VAESENCLAST(v[0], v[1], v[2]) + } else { + panic("instruction VAESENCLAST takes exactly 3 operands") + } +} + +func __asm_proxy_VAESIMC__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VAESIMC(v[0], v[1]) + } else { + panic("instruction VAESIMC takes exactly 2 operands") + } +} + +func __asm_proxy_VAESKEYGENASSIST__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VAESKEYGENASSIST(v[0], v[1], v[2]) + } else { + panic("instruction VAESKEYGENASSIST takes exactly 3 operands") + } +} + +func __asm_proxy_VALIGND__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VALIGND(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VALIGND takes exactly 4 operands") + } +} + +func __asm_proxy_VALIGNQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VALIGNQ(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VALIGNQ takes exactly 4 operands") + } +} + +func __asm_proxy_VANDNPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VANDNPD(v[0], v[1], v[2]) + } else { + panic("instruction VANDNPD takes exactly 3 operands") + } +} + +func __asm_proxy_VANDNPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VANDNPS(v[0], v[1], v[2]) + } else { + panic("instruction VANDNPS takes exactly 3 operands") + } +} + +func __asm_proxy_VANDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VANDPD(v[0], v[1], v[2]) + } else { + panic("instruction VANDPD takes exactly 3 operands") + } +} + +func __asm_proxy_VANDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VANDPS(v[0], v[1], v[2]) + } else { + panic("instruction VANDPS takes exactly 3 operands") + } +} + +func __asm_proxy_VBLENDMPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VBLENDMPD(v[0], v[1], v[2]) + } else { + panic("instruction VBLENDMPD takes exactly 3 operands") + } +} + +func __asm_proxy_VBLENDMPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VBLENDMPS(v[0], v[1], v[2]) + } else { + panic("instruction VBLENDMPS takes exactly 3 operands") + } +} + +func __asm_proxy_VBLENDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VBLENDPD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VBLENDPD takes exactly 4 operands") + } +} + +func __asm_proxy_VBLENDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VBLENDPS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VBLENDPS takes exactly 4 operands") + } +} + +func __asm_proxy_VBLENDVPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VBLENDVPD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VBLENDVPD takes exactly 4 operands") + } +} + +func __asm_proxy_VBLENDVPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VBLENDVPS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VBLENDVPS takes exactly 4 operands") + } +} + +func __asm_proxy_VBROADCASTF128__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTF128(v[0], v[1]) + } else { + panic("instruction VBROADCASTF128 takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTF32X2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTF32X2(v[0], v[1]) + } else { + panic("instruction VBROADCASTF32X2 takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTF32X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTF32X4(v[0], v[1]) + } else { + panic("instruction VBROADCASTF32X4 takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTF32X8__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTF32X8(v[0], v[1]) + } else { + panic("instruction VBROADCASTF32X8 takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTF64X2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTF64X2(v[0], v[1]) + } else { + panic("instruction VBROADCASTF64X2 takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTF64X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTF64X4(v[0], v[1]) + } else { + panic("instruction VBROADCASTF64X4 takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTI128__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTI128(v[0], v[1]) + } else { + panic("instruction VBROADCASTI128 takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTI32X2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTI32X2(v[0], v[1]) + } else { + panic("instruction VBROADCASTI32X2 takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTI32X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTI32X4(v[0], v[1]) + } else { + panic("instruction VBROADCASTI32X4 takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTI32X8__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTI32X8(v[0], v[1]) + } else { + panic("instruction VBROADCASTI32X8 takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTI64X2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTI64X2(v[0], v[1]) + } else { + panic("instruction VBROADCASTI64X2 takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTI64X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTI64X4(v[0], v[1]) + } else { + panic("instruction VBROADCASTI64X4 takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTSD(v[0], v[1]) + } else { + panic("instruction VBROADCASTSD takes exactly 2 operands") + } +} + +func __asm_proxy_VBROADCASTSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VBROADCASTSS(v[0], v[1]) + } else { + panic("instruction VBROADCASTSS takes exactly 2 operands") + } +} + +func __asm_proxy_VCMPPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VCMPPD(v[0], v[1], v[2], v[3]) + case 5 : return p.VCMPPD(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VCMPPD takes 4 or 5 operands") + } +} + +func __asm_proxy_VCMPPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VCMPPS(v[0], v[1], v[2], v[3]) + case 5 : return p.VCMPPS(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VCMPPS takes 4 or 5 operands") + } +} + +func __asm_proxy_VCMPSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VCMPSD(v[0], v[1], v[2], v[3]) + case 5 : return p.VCMPSD(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VCMPSD takes 4 or 5 operands") + } +} + +func __asm_proxy_VCMPSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VCMPSS(v[0], v[1], v[2], v[3]) + case 5 : return p.VCMPSS(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VCMPSS takes 4 or 5 operands") + } +} + +func __asm_proxy_VCOMISD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCOMISD(v[0], v[1]) + case 3 : return p.VCOMISD(v[0], v[1], v[2]) + default : panic("instruction VCOMISD takes 2 or 3 operands") + } +} + +func __asm_proxy_VCOMISS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCOMISS(v[0], v[1]) + case 3 : return p.VCOMISS(v[0], v[1], v[2]) + default : panic("instruction VCOMISS takes 2 or 3 operands") + } +} + +func __asm_proxy_VCOMPRESSPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VCOMPRESSPD(v[0], v[1]) + } else { + panic("instruction VCOMPRESSPD takes exactly 2 operands") + } +} + +func __asm_proxy_VCOMPRESSPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VCOMPRESSPS(v[0], v[1]) + } else { + panic("instruction VCOMPRESSPS takes exactly 2 operands") + } +} + +func __asm_proxy_VCVTDQ2PD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VCVTDQ2PD(v[0], v[1]) + } else { + panic("instruction VCVTDQ2PD takes exactly 2 operands") + } +} + +func __asm_proxy_VCVTDQ2PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTDQ2PS(v[0], v[1]) + case 3 : return p.VCVTDQ2PS(v[0], v[1], v[2]) + default : panic("instruction VCVTDQ2PS takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTPD2DQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTPD2DQ(v[0], v[1]) + case 3 : return p.VCVTPD2DQ(v[0], v[1], v[2]) + default : panic("instruction VCVTPD2DQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTPD2PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTPD2PS(v[0], v[1]) + case 3 : return p.VCVTPD2PS(v[0], v[1], v[2]) + default : panic("instruction VCVTPD2PS takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTPD2QQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTPD2QQ(v[0], v[1]) + case 3 : return p.VCVTPD2QQ(v[0], v[1], v[2]) + default : panic("instruction VCVTPD2QQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTPD2UDQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTPD2UDQ(v[0], v[1]) + case 3 : return p.VCVTPD2UDQ(v[0], v[1], v[2]) + default : panic("instruction VCVTPD2UDQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTPD2UQQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTPD2UQQ(v[0], v[1]) + case 3 : return p.VCVTPD2UQQ(v[0], v[1], v[2]) + default : panic("instruction VCVTPD2UQQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTPH2PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTPH2PS(v[0], v[1]) + case 3 : return p.VCVTPH2PS(v[0], v[1], v[2]) + default : panic("instruction VCVTPH2PS takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTPS2DQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTPS2DQ(v[0], v[1]) + case 3 : return p.VCVTPS2DQ(v[0], v[1], v[2]) + default : panic("instruction VCVTPS2DQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTPS2PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTPS2PD(v[0], v[1]) + case 3 : return p.VCVTPS2PD(v[0], v[1], v[2]) + default : panic("instruction VCVTPS2PD takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTPS2PH__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VCVTPS2PH(v[0], v[1], v[2]) + case 4 : return p.VCVTPS2PH(v[0], v[1], v[2], v[3]) + default : panic("instruction VCVTPS2PH takes 3 or 4 operands") + } +} + +func __asm_proxy_VCVTPS2QQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTPS2QQ(v[0], v[1]) + case 3 : return p.VCVTPS2QQ(v[0], v[1], v[2]) + default : panic("instruction VCVTPS2QQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTPS2UDQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTPS2UDQ(v[0], v[1]) + case 3 : return p.VCVTPS2UDQ(v[0], v[1], v[2]) + default : panic("instruction VCVTPS2UDQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTPS2UQQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTPS2UQQ(v[0], v[1]) + case 3 : return p.VCVTPS2UQQ(v[0], v[1], v[2]) + default : panic("instruction VCVTPS2UQQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTQQ2PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTQQ2PD(v[0], v[1]) + case 3 : return p.VCVTQQ2PD(v[0], v[1], v[2]) + default : panic("instruction VCVTQQ2PD takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTQQ2PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTQQ2PS(v[0], v[1]) + case 3 : return p.VCVTQQ2PS(v[0], v[1], v[2]) + default : panic("instruction VCVTQQ2PS takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTSD2SI__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTSD2SI(v[0], v[1]) + case 3 : return p.VCVTSD2SI(v[0], v[1], v[2]) + default : panic("instruction VCVTSD2SI takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTSD2SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VCVTSD2SS(v[0], v[1], v[2]) + case 4 : return p.VCVTSD2SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VCVTSD2SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VCVTSD2USI__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTSD2USI(v[0], v[1]) + case 3 : return p.VCVTSD2USI(v[0], v[1], v[2]) + default : panic("instruction VCVTSD2USI takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTSI2SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VCVTSI2SD(v[0], v[1], v[2]) + case 4 : return p.VCVTSI2SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VCVTSI2SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VCVTSI2SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VCVTSI2SS(v[0], v[1], v[2]) + case 4 : return p.VCVTSI2SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VCVTSI2SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VCVTSS2SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VCVTSS2SD(v[0], v[1], v[2]) + case 4 : return p.VCVTSS2SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VCVTSS2SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VCVTSS2SI__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTSS2SI(v[0], v[1]) + case 3 : return p.VCVTSS2SI(v[0], v[1], v[2]) + default : panic("instruction VCVTSS2SI takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTSS2USI__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTSS2USI(v[0], v[1]) + case 3 : return p.VCVTSS2USI(v[0], v[1], v[2]) + default : panic("instruction VCVTSS2USI takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTTPD2DQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTTPD2DQ(v[0], v[1]) + case 3 : return p.VCVTTPD2DQ(v[0], v[1], v[2]) + default : panic("instruction VCVTTPD2DQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTTPD2QQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTTPD2QQ(v[0], v[1]) + case 3 : return p.VCVTTPD2QQ(v[0], v[1], v[2]) + default : panic("instruction VCVTTPD2QQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTTPD2UDQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTTPD2UDQ(v[0], v[1]) + case 3 : return p.VCVTTPD2UDQ(v[0], v[1], v[2]) + default : panic("instruction VCVTTPD2UDQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTTPD2UQQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTTPD2UQQ(v[0], v[1]) + case 3 : return p.VCVTTPD2UQQ(v[0], v[1], v[2]) + default : panic("instruction VCVTTPD2UQQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTTPS2DQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTTPS2DQ(v[0], v[1]) + case 3 : return p.VCVTTPS2DQ(v[0], v[1], v[2]) + default : panic("instruction VCVTTPS2DQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTTPS2QQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTTPS2QQ(v[0], v[1]) + case 3 : return p.VCVTTPS2QQ(v[0], v[1], v[2]) + default : panic("instruction VCVTTPS2QQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTTPS2UDQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTTPS2UDQ(v[0], v[1]) + case 3 : return p.VCVTTPS2UDQ(v[0], v[1], v[2]) + default : panic("instruction VCVTTPS2UDQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTTPS2UQQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTTPS2UQQ(v[0], v[1]) + case 3 : return p.VCVTTPS2UQQ(v[0], v[1], v[2]) + default : panic("instruction VCVTTPS2UQQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTTSD2SI__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTTSD2SI(v[0], v[1]) + case 3 : return p.VCVTTSD2SI(v[0], v[1], v[2]) + default : panic("instruction VCVTTSD2SI takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTTSD2USI__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTTSD2USI(v[0], v[1]) + case 3 : return p.VCVTTSD2USI(v[0], v[1], v[2]) + default : panic("instruction VCVTTSD2USI takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTTSS2SI__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTTSS2SI(v[0], v[1]) + case 3 : return p.VCVTTSS2SI(v[0], v[1], v[2]) + default : panic("instruction VCVTTSS2SI takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTTSS2USI__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTTSS2USI(v[0], v[1]) + case 3 : return p.VCVTTSS2USI(v[0], v[1], v[2]) + default : panic("instruction VCVTTSS2USI takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTUDQ2PD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VCVTUDQ2PD(v[0], v[1]) + } else { + panic("instruction VCVTUDQ2PD takes exactly 2 operands") + } +} + +func __asm_proxy_VCVTUDQ2PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTUDQ2PS(v[0], v[1]) + case 3 : return p.VCVTUDQ2PS(v[0], v[1], v[2]) + default : panic("instruction VCVTUDQ2PS takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTUQQ2PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTUQQ2PD(v[0], v[1]) + case 3 : return p.VCVTUQQ2PD(v[0], v[1], v[2]) + default : panic("instruction VCVTUQQ2PD takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTUQQ2PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VCVTUQQ2PS(v[0], v[1]) + case 3 : return p.VCVTUQQ2PS(v[0], v[1], v[2]) + default : panic("instruction VCVTUQQ2PS takes 2 or 3 operands") + } +} + +func __asm_proxy_VCVTUSI2SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VCVTUSI2SD(v[0], v[1], v[2]) + case 4 : return p.VCVTUSI2SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VCVTUSI2SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VCVTUSI2SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VCVTUSI2SS(v[0], v[1], v[2]) + case 4 : return p.VCVTUSI2SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VCVTUSI2SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VDBPSADBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VDBPSADBW(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VDBPSADBW takes exactly 4 operands") + } +} + +func __asm_proxy_VDIVPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VDIVPD(v[0], v[1], v[2]) + case 4 : return p.VDIVPD(v[0], v[1], v[2], v[3]) + default : panic("instruction VDIVPD takes 3 or 4 operands") + } +} + +func __asm_proxy_VDIVPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VDIVPS(v[0], v[1], v[2]) + case 4 : return p.VDIVPS(v[0], v[1], v[2], v[3]) + default : panic("instruction VDIVPS takes 3 or 4 operands") + } +} + +func __asm_proxy_VDIVSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VDIVSD(v[0], v[1], v[2]) + case 4 : return p.VDIVSD(v[0], v[1], v[2], v[3]) + default : panic("instruction VDIVSD takes 3 or 4 operands") + } +} + +func __asm_proxy_VDIVSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VDIVSS(v[0], v[1], v[2]) + case 4 : return p.VDIVSS(v[0], v[1], v[2], v[3]) + default : panic("instruction VDIVSS takes 3 or 4 operands") + } +} + +func __asm_proxy_VDPPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VDPPD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VDPPD takes exactly 4 operands") + } +} + +func __asm_proxy_VDPPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VDPPS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VDPPS takes exactly 4 operands") + } +} + +func __asm_proxy_VEXP2PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VEXP2PD(v[0], v[1]) + case 3 : return p.VEXP2PD(v[0], v[1], v[2]) + default : panic("instruction VEXP2PD takes 2 or 3 operands") + } +} + +func __asm_proxy_VEXP2PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VEXP2PS(v[0], v[1]) + case 3 : return p.VEXP2PS(v[0], v[1], v[2]) + default : panic("instruction VEXP2PS takes 2 or 3 operands") + } +} + +func __asm_proxy_VEXPANDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VEXPANDPD(v[0], v[1]) + } else { + panic("instruction VEXPANDPD takes exactly 2 operands") + } +} + +func __asm_proxy_VEXPANDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VEXPANDPS(v[0], v[1]) + } else { + panic("instruction VEXPANDPS takes exactly 2 operands") + } +} + +func __asm_proxy_VEXTRACTF128__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VEXTRACTF128(v[0], v[1], v[2]) + } else { + panic("instruction VEXTRACTF128 takes exactly 3 operands") + } +} + +func __asm_proxy_VEXTRACTF32X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VEXTRACTF32X4(v[0], v[1], v[2]) + } else { + panic("instruction VEXTRACTF32X4 takes exactly 3 operands") + } +} + +func __asm_proxy_VEXTRACTF32X8__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VEXTRACTF32X8(v[0], v[1], v[2]) + } else { + panic("instruction VEXTRACTF32X8 takes exactly 3 operands") + } +} + +func __asm_proxy_VEXTRACTF64X2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VEXTRACTF64X2(v[0], v[1], v[2]) + } else { + panic("instruction VEXTRACTF64X2 takes exactly 3 operands") + } +} + +func __asm_proxy_VEXTRACTF64X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VEXTRACTF64X4(v[0], v[1], v[2]) + } else { + panic("instruction VEXTRACTF64X4 takes exactly 3 operands") + } +} + +func __asm_proxy_VEXTRACTI128__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VEXTRACTI128(v[0], v[1], v[2]) + } else { + panic("instruction VEXTRACTI128 takes exactly 3 operands") + } +} + +func __asm_proxy_VEXTRACTI32X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VEXTRACTI32X4(v[0], v[1], v[2]) + } else { + panic("instruction VEXTRACTI32X4 takes exactly 3 operands") + } +} + +func __asm_proxy_VEXTRACTI32X8__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VEXTRACTI32X8(v[0], v[1], v[2]) + } else { + panic("instruction VEXTRACTI32X8 takes exactly 3 operands") + } +} + +func __asm_proxy_VEXTRACTI64X2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VEXTRACTI64X2(v[0], v[1], v[2]) + } else { + panic("instruction VEXTRACTI64X2 takes exactly 3 operands") + } +} + +func __asm_proxy_VEXTRACTI64X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VEXTRACTI64X4(v[0], v[1], v[2]) + } else { + panic("instruction VEXTRACTI64X4 takes exactly 3 operands") + } +} + +func __asm_proxy_VEXTRACTPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VEXTRACTPS(v[0], v[1], v[2]) + } else { + panic("instruction VEXTRACTPS takes exactly 3 operands") + } +} + +func __asm_proxy_VFIXUPIMMPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VFIXUPIMMPD(v[0], v[1], v[2], v[3]) + case 5 : return p.VFIXUPIMMPD(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VFIXUPIMMPD takes 4 or 5 operands") + } +} + +func __asm_proxy_VFIXUPIMMPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VFIXUPIMMPS(v[0], v[1], v[2], v[3]) + case 5 : return p.VFIXUPIMMPS(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VFIXUPIMMPS takes 4 or 5 operands") + } +} + +func __asm_proxy_VFIXUPIMMSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VFIXUPIMMSD(v[0], v[1], v[2], v[3]) + case 5 : return p.VFIXUPIMMSD(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VFIXUPIMMSD takes 4 or 5 operands") + } +} + +func __asm_proxy_VFIXUPIMMSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VFIXUPIMMSS(v[0], v[1], v[2], v[3]) + case 5 : return p.VFIXUPIMMSS(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VFIXUPIMMSS takes 4 or 5 operands") + } +} + +func __asm_proxy_VFMADD132PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADD132PD(v[0], v[1], v[2]) + case 4 : return p.VFMADD132PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADD132PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADD132PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADD132PS(v[0], v[1], v[2]) + case 4 : return p.VFMADD132PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADD132PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADD132SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADD132SD(v[0], v[1], v[2]) + case 4 : return p.VFMADD132SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADD132SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADD132SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADD132SS(v[0], v[1], v[2]) + case 4 : return p.VFMADD132SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADD132SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADD213PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADD213PD(v[0], v[1], v[2]) + case 4 : return p.VFMADD213PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADD213PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADD213PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADD213PS(v[0], v[1], v[2]) + case 4 : return p.VFMADD213PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADD213PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADD213SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADD213SD(v[0], v[1], v[2]) + case 4 : return p.VFMADD213SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADD213SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADD213SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADD213SS(v[0], v[1], v[2]) + case 4 : return p.VFMADD213SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADD213SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADD231PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADD231PD(v[0], v[1], v[2]) + case 4 : return p.VFMADD231PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADD231PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADD231PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADD231PS(v[0], v[1], v[2]) + case 4 : return p.VFMADD231PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADD231PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADD231SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADD231SD(v[0], v[1], v[2]) + case 4 : return p.VFMADD231SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADD231SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADD231SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADD231SS(v[0], v[1], v[2]) + case 4 : return p.VFMADD231SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADD231SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFMADDPD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFMADDPD takes exactly 4 operands") + } +} + +func __asm_proxy_VFMADDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFMADDPS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFMADDPS takes exactly 4 operands") + } +} + +func __asm_proxy_VFMADDSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFMADDSD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFMADDSD takes exactly 4 operands") + } +} + +func __asm_proxy_VFMADDSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFMADDSS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFMADDSS takes exactly 4 operands") + } +} + +func __asm_proxy_VFMADDSUB132PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADDSUB132PD(v[0], v[1], v[2]) + case 4 : return p.VFMADDSUB132PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADDSUB132PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADDSUB132PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADDSUB132PS(v[0], v[1], v[2]) + case 4 : return p.VFMADDSUB132PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADDSUB132PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADDSUB213PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADDSUB213PD(v[0], v[1], v[2]) + case 4 : return p.VFMADDSUB213PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADDSUB213PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADDSUB213PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADDSUB213PS(v[0], v[1], v[2]) + case 4 : return p.VFMADDSUB213PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADDSUB213PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADDSUB231PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADDSUB231PD(v[0], v[1], v[2]) + case 4 : return p.VFMADDSUB231PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADDSUB231PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADDSUB231PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMADDSUB231PS(v[0], v[1], v[2]) + case 4 : return p.VFMADDSUB231PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMADDSUB231PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMADDSUBPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFMADDSUBPD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFMADDSUBPD takes exactly 4 operands") + } +} + +func __asm_proxy_VFMADDSUBPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFMADDSUBPS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFMADDSUBPS takes exactly 4 operands") + } +} + +func __asm_proxy_VFMSUB132PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUB132PD(v[0], v[1], v[2]) + case 4 : return p.VFMSUB132PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUB132PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUB132PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUB132PS(v[0], v[1], v[2]) + case 4 : return p.VFMSUB132PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUB132PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUB132SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUB132SD(v[0], v[1], v[2]) + case 4 : return p.VFMSUB132SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUB132SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUB132SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUB132SS(v[0], v[1], v[2]) + case 4 : return p.VFMSUB132SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUB132SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUB213PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUB213PD(v[0], v[1], v[2]) + case 4 : return p.VFMSUB213PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUB213PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUB213PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUB213PS(v[0], v[1], v[2]) + case 4 : return p.VFMSUB213PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUB213PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUB213SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUB213SD(v[0], v[1], v[2]) + case 4 : return p.VFMSUB213SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUB213SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUB213SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUB213SS(v[0], v[1], v[2]) + case 4 : return p.VFMSUB213SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUB213SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUB231PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUB231PD(v[0], v[1], v[2]) + case 4 : return p.VFMSUB231PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUB231PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUB231PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUB231PS(v[0], v[1], v[2]) + case 4 : return p.VFMSUB231PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUB231PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUB231SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUB231SD(v[0], v[1], v[2]) + case 4 : return p.VFMSUB231SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUB231SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUB231SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUB231SS(v[0], v[1], v[2]) + case 4 : return p.VFMSUB231SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUB231SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUBADD132PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUBADD132PD(v[0], v[1], v[2]) + case 4 : return p.VFMSUBADD132PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUBADD132PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUBADD132PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUBADD132PS(v[0], v[1], v[2]) + case 4 : return p.VFMSUBADD132PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUBADD132PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUBADD213PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUBADD213PD(v[0], v[1], v[2]) + case 4 : return p.VFMSUBADD213PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUBADD213PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUBADD213PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUBADD213PS(v[0], v[1], v[2]) + case 4 : return p.VFMSUBADD213PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUBADD213PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUBADD231PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUBADD231PD(v[0], v[1], v[2]) + case 4 : return p.VFMSUBADD231PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUBADD231PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUBADD231PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFMSUBADD231PS(v[0], v[1], v[2]) + case 4 : return p.VFMSUBADD231PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFMSUBADD231PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFMSUBADDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFMSUBADDPD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFMSUBADDPD takes exactly 4 operands") + } +} + +func __asm_proxy_VFMSUBADDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFMSUBADDPS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFMSUBADDPS takes exactly 4 operands") + } +} + +func __asm_proxy_VFMSUBPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFMSUBPD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFMSUBPD takes exactly 4 operands") + } +} + +func __asm_proxy_VFMSUBPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFMSUBPS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFMSUBPS takes exactly 4 operands") + } +} + +func __asm_proxy_VFMSUBSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFMSUBSD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFMSUBSD takes exactly 4 operands") + } +} + +func __asm_proxy_VFMSUBSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFMSUBSS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFMSUBSS takes exactly 4 operands") + } +} + +func __asm_proxy_VFNMADD132PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMADD132PD(v[0], v[1], v[2]) + case 4 : return p.VFNMADD132PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMADD132PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMADD132PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMADD132PS(v[0], v[1], v[2]) + case 4 : return p.VFNMADD132PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMADD132PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMADD132SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMADD132SD(v[0], v[1], v[2]) + case 4 : return p.VFNMADD132SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMADD132SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMADD132SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMADD132SS(v[0], v[1], v[2]) + case 4 : return p.VFNMADD132SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMADD132SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMADD213PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMADD213PD(v[0], v[1], v[2]) + case 4 : return p.VFNMADD213PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMADD213PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMADD213PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMADD213PS(v[0], v[1], v[2]) + case 4 : return p.VFNMADD213PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMADD213PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMADD213SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMADD213SD(v[0], v[1], v[2]) + case 4 : return p.VFNMADD213SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMADD213SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMADD213SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMADD213SS(v[0], v[1], v[2]) + case 4 : return p.VFNMADD213SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMADD213SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMADD231PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMADD231PD(v[0], v[1], v[2]) + case 4 : return p.VFNMADD231PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMADD231PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMADD231PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMADD231PS(v[0], v[1], v[2]) + case 4 : return p.VFNMADD231PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMADD231PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMADD231SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMADD231SD(v[0], v[1], v[2]) + case 4 : return p.VFNMADD231SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMADD231SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMADD231SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMADD231SS(v[0], v[1], v[2]) + case 4 : return p.VFNMADD231SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMADD231SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMADDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFNMADDPD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFNMADDPD takes exactly 4 operands") + } +} + +func __asm_proxy_VFNMADDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFNMADDPS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFNMADDPS takes exactly 4 operands") + } +} + +func __asm_proxy_VFNMADDSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFNMADDSD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFNMADDSD takes exactly 4 operands") + } +} + +func __asm_proxy_VFNMADDSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFNMADDSS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFNMADDSS takes exactly 4 operands") + } +} + +func __asm_proxy_VFNMSUB132PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMSUB132PD(v[0], v[1], v[2]) + case 4 : return p.VFNMSUB132PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMSUB132PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMSUB132PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMSUB132PS(v[0], v[1], v[2]) + case 4 : return p.VFNMSUB132PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMSUB132PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMSUB132SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMSUB132SD(v[0], v[1], v[2]) + case 4 : return p.VFNMSUB132SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMSUB132SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMSUB132SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMSUB132SS(v[0], v[1], v[2]) + case 4 : return p.VFNMSUB132SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMSUB132SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMSUB213PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMSUB213PD(v[0], v[1], v[2]) + case 4 : return p.VFNMSUB213PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMSUB213PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMSUB213PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMSUB213PS(v[0], v[1], v[2]) + case 4 : return p.VFNMSUB213PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMSUB213PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMSUB213SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMSUB213SD(v[0], v[1], v[2]) + case 4 : return p.VFNMSUB213SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMSUB213SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMSUB213SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMSUB213SS(v[0], v[1], v[2]) + case 4 : return p.VFNMSUB213SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMSUB213SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMSUB231PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMSUB231PD(v[0], v[1], v[2]) + case 4 : return p.VFNMSUB231PD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMSUB231PD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMSUB231PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMSUB231PS(v[0], v[1], v[2]) + case 4 : return p.VFNMSUB231PS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMSUB231PS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMSUB231SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMSUB231SD(v[0], v[1], v[2]) + case 4 : return p.VFNMSUB231SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMSUB231SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMSUB231SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VFNMSUB231SS(v[0], v[1], v[2]) + case 4 : return p.VFNMSUB231SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VFNMSUB231SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VFNMSUBPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFNMSUBPD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFNMSUBPD takes exactly 4 operands") + } +} + +func __asm_proxy_VFNMSUBPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFNMSUBPS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFNMSUBPS takes exactly 4 operands") + } +} + +func __asm_proxy_VFNMSUBSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFNMSUBSD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFNMSUBSD takes exactly 4 operands") + } +} + +func __asm_proxy_VFNMSUBSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VFNMSUBSS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VFNMSUBSS takes exactly 4 operands") + } +} + +func __asm_proxy_VFPCLASSPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VFPCLASSPD(v[0], v[1], v[2]) + } else { + panic("instruction VFPCLASSPD takes exactly 3 operands") + } +} + +func __asm_proxy_VFPCLASSPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VFPCLASSPS(v[0], v[1], v[2]) + } else { + panic("instruction VFPCLASSPS takes exactly 3 operands") + } +} + +func __asm_proxy_VFPCLASSSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VFPCLASSSD(v[0], v[1], v[2]) + } else { + panic("instruction VFPCLASSSD takes exactly 3 operands") + } +} + +func __asm_proxy_VFPCLASSSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VFPCLASSSS(v[0], v[1], v[2]) + } else { + panic("instruction VFPCLASSSS takes exactly 3 operands") + } +} + +func __asm_proxy_VFRCZPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VFRCZPD(v[0], v[1]) + } else { + panic("instruction VFRCZPD takes exactly 2 operands") + } +} + +func __asm_proxy_VFRCZPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VFRCZPS(v[0], v[1]) + } else { + panic("instruction VFRCZPS takes exactly 2 operands") + } +} + +func __asm_proxy_VFRCZSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VFRCZSD(v[0], v[1]) + } else { + panic("instruction VFRCZSD takes exactly 2 operands") + } +} + +func __asm_proxy_VFRCZSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VFRCZSS(v[0], v[1]) + } else { + panic("instruction VFRCZSS takes exactly 2 operands") + } +} + +func __asm_proxy_VGATHERDPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VGATHERDPD(v[0], v[1]) + case 3 : return p.VGATHERDPD(v[0], v[1], v[2]) + default : panic("instruction VGATHERDPD takes 2 or 3 operands") + } +} + +func __asm_proxy_VGATHERDPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VGATHERDPS(v[0], v[1]) + case 3 : return p.VGATHERDPS(v[0], v[1], v[2]) + default : panic("instruction VGATHERDPS takes 2 or 3 operands") + } +} + +func __asm_proxy_VGATHERPF0DPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VGATHERPF0DPD(v[0]) + } else { + panic("instruction VGATHERPF0DPD takes exactly 1 operand") + } +} + +func __asm_proxy_VGATHERPF0DPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VGATHERPF0DPS(v[0]) + } else { + panic("instruction VGATHERPF0DPS takes exactly 1 operand") + } +} + +func __asm_proxy_VGATHERPF0QPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VGATHERPF0QPD(v[0]) + } else { + panic("instruction VGATHERPF0QPD takes exactly 1 operand") + } +} + +func __asm_proxy_VGATHERPF0QPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VGATHERPF0QPS(v[0]) + } else { + panic("instruction VGATHERPF0QPS takes exactly 1 operand") + } +} + +func __asm_proxy_VGATHERPF1DPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VGATHERPF1DPD(v[0]) + } else { + panic("instruction VGATHERPF1DPD takes exactly 1 operand") + } +} + +func __asm_proxy_VGATHERPF1DPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VGATHERPF1DPS(v[0]) + } else { + panic("instruction VGATHERPF1DPS takes exactly 1 operand") + } +} + +func __asm_proxy_VGATHERPF1QPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VGATHERPF1QPD(v[0]) + } else { + panic("instruction VGATHERPF1QPD takes exactly 1 operand") + } +} + +func __asm_proxy_VGATHERPF1QPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VGATHERPF1QPS(v[0]) + } else { + panic("instruction VGATHERPF1QPS takes exactly 1 operand") + } +} + +func __asm_proxy_VGATHERQPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VGATHERQPD(v[0], v[1]) + case 3 : return p.VGATHERQPD(v[0], v[1], v[2]) + default : panic("instruction VGATHERQPD takes 2 or 3 operands") + } +} + +func __asm_proxy_VGATHERQPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VGATHERQPS(v[0], v[1]) + case 3 : return p.VGATHERQPS(v[0], v[1], v[2]) + default : panic("instruction VGATHERQPS takes 2 or 3 operands") + } +} + +func __asm_proxy_VGETEXPPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VGETEXPPD(v[0], v[1]) + case 3 : return p.VGETEXPPD(v[0], v[1], v[2]) + default : panic("instruction VGETEXPPD takes 2 or 3 operands") + } +} + +func __asm_proxy_VGETEXPPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VGETEXPPS(v[0], v[1]) + case 3 : return p.VGETEXPPS(v[0], v[1], v[2]) + default : panic("instruction VGETEXPPS takes 2 or 3 operands") + } +} + +func __asm_proxy_VGETEXPSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VGETEXPSD(v[0], v[1], v[2]) + case 4 : return p.VGETEXPSD(v[0], v[1], v[2], v[3]) + default : panic("instruction VGETEXPSD takes 3 or 4 operands") + } +} + +func __asm_proxy_VGETEXPSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VGETEXPSS(v[0], v[1], v[2]) + case 4 : return p.VGETEXPSS(v[0], v[1], v[2], v[3]) + default : panic("instruction VGETEXPSS takes 3 or 4 operands") + } +} + +func __asm_proxy_VGETMANTPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VGETMANTPD(v[0], v[1], v[2]) + case 4 : return p.VGETMANTPD(v[0], v[1], v[2], v[3]) + default : panic("instruction VGETMANTPD takes 3 or 4 operands") + } +} + +func __asm_proxy_VGETMANTPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VGETMANTPS(v[0], v[1], v[2]) + case 4 : return p.VGETMANTPS(v[0], v[1], v[2], v[3]) + default : panic("instruction VGETMANTPS takes 3 or 4 operands") + } +} + +func __asm_proxy_VGETMANTSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VGETMANTSD(v[0], v[1], v[2], v[3]) + case 5 : return p.VGETMANTSD(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VGETMANTSD takes 4 or 5 operands") + } +} + +func __asm_proxy_VGETMANTSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VGETMANTSS(v[0], v[1], v[2], v[3]) + case 5 : return p.VGETMANTSS(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VGETMANTSS takes 4 or 5 operands") + } +} + +func __asm_proxy_VHADDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VHADDPD(v[0], v[1], v[2]) + } else { + panic("instruction VHADDPD takes exactly 3 operands") + } +} + +func __asm_proxy_VHADDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VHADDPS(v[0], v[1], v[2]) + } else { + panic("instruction VHADDPS takes exactly 3 operands") + } +} + +func __asm_proxy_VHSUBPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VHSUBPD(v[0], v[1], v[2]) + } else { + panic("instruction VHSUBPD takes exactly 3 operands") + } +} + +func __asm_proxy_VHSUBPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VHSUBPS(v[0], v[1], v[2]) + } else { + panic("instruction VHSUBPS takes exactly 3 operands") + } +} + +func __asm_proxy_VINSERTF128__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VINSERTF128(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VINSERTF128 takes exactly 4 operands") + } +} + +func __asm_proxy_VINSERTF32X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VINSERTF32X4(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VINSERTF32X4 takes exactly 4 operands") + } +} + +func __asm_proxy_VINSERTF32X8__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VINSERTF32X8(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VINSERTF32X8 takes exactly 4 operands") + } +} + +func __asm_proxy_VINSERTF64X2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VINSERTF64X2(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VINSERTF64X2 takes exactly 4 operands") + } +} + +func __asm_proxy_VINSERTF64X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VINSERTF64X4(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VINSERTF64X4 takes exactly 4 operands") + } +} + +func __asm_proxy_VINSERTI128__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VINSERTI128(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VINSERTI128 takes exactly 4 operands") + } +} + +func __asm_proxy_VINSERTI32X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VINSERTI32X4(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VINSERTI32X4 takes exactly 4 operands") + } +} + +func __asm_proxy_VINSERTI32X8__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VINSERTI32X8(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VINSERTI32X8 takes exactly 4 operands") + } +} + +func __asm_proxy_VINSERTI64X2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VINSERTI64X2(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VINSERTI64X2 takes exactly 4 operands") + } +} + +func __asm_proxy_VINSERTI64X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VINSERTI64X4(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VINSERTI64X4 takes exactly 4 operands") + } +} + +func __asm_proxy_VINSERTPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VINSERTPS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VINSERTPS takes exactly 4 operands") + } +} + +func __asm_proxy_VLDDQU__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VLDDQU(v[0], v[1]) + } else { + panic("instruction VLDDQU takes exactly 2 operands") + } +} + +func __asm_proxy_VLDMXCSR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VLDMXCSR(v[0]) + } else { + panic("instruction VLDMXCSR takes exactly 1 operand") + } +} + +func __asm_proxy_VMASKMOVDQU__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMASKMOVDQU(v[0], v[1]) + } else { + panic("instruction VMASKMOVDQU takes exactly 2 operands") + } +} + +func __asm_proxy_VMASKMOVPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VMASKMOVPD(v[0], v[1], v[2]) + } else { + panic("instruction VMASKMOVPD takes exactly 3 operands") + } +} + +func __asm_proxy_VMASKMOVPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VMASKMOVPS(v[0], v[1], v[2]) + } else { + panic("instruction VMASKMOVPS takes exactly 3 operands") + } +} + +func __asm_proxy_VMAXPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VMAXPD(v[0], v[1], v[2]) + case 4 : return p.VMAXPD(v[0], v[1], v[2], v[3]) + default : panic("instruction VMAXPD takes 3 or 4 operands") + } +} + +func __asm_proxy_VMAXPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VMAXPS(v[0], v[1], v[2]) + case 4 : return p.VMAXPS(v[0], v[1], v[2], v[3]) + default : panic("instruction VMAXPS takes 3 or 4 operands") + } +} + +func __asm_proxy_VMAXSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VMAXSD(v[0], v[1], v[2]) + case 4 : return p.VMAXSD(v[0], v[1], v[2], v[3]) + default : panic("instruction VMAXSD takes 3 or 4 operands") + } +} + +func __asm_proxy_VMAXSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VMAXSS(v[0], v[1], v[2]) + case 4 : return p.VMAXSS(v[0], v[1], v[2], v[3]) + default : panic("instruction VMAXSS takes 3 or 4 operands") + } +} + +func __asm_proxy_VMINPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VMINPD(v[0], v[1], v[2]) + case 4 : return p.VMINPD(v[0], v[1], v[2], v[3]) + default : panic("instruction VMINPD takes 3 or 4 operands") + } +} + +func __asm_proxy_VMINPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VMINPS(v[0], v[1], v[2]) + case 4 : return p.VMINPS(v[0], v[1], v[2], v[3]) + default : panic("instruction VMINPS takes 3 or 4 operands") + } +} + +func __asm_proxy_VMINSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VMINSD(v[0], v[1], v[2]) + case 4 : return p.VMINSD(v[0], v[1], v[2], v[3]) + default : panic("instruction VMINSD takes 3 or 4 operands") + } +} + +func __asm_proxy_VMINSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VMINSS(v[0], v[1], v[2]) + case 4 : return p.VMINSS(v[0], v[1], v[2], v[3]) + default : panic("instruction VMINSS takes 3 or 4 operands") + } +} + +func __asm_proxy_VMOVAPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVAPD(v[0], v[1]) + } else { + panic("instruction VMOVAPD takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVAPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVAPS(v[0], v[1]) + } else { + panic("instruction VMOVAPS takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVD(v[0], v[1]) + } else { + panic("instruction VMOVD takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVDDUP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVDDUP(v[0], v[1]) + } else { + panic("instruction VMOVDDUP takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVDQA__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVDQA(v[0], v[1]) + } else { + panic("instruction VMOVDQA takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVDQA32__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVDQA32(v[0], v[1]) + } else { + panic("instruction VMOVDQA32 takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVDQA64__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVDQA64(v[0], v[1]) + } else { + panic("instruction VMOVDQA64 takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVDQU__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVDQU(v[0], v[1]) + } else { + panic("instruction VMOVDQU takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVDQU16__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVDQU16(v[0], v[1]) + } else { + panic("instruction VMOVDQU16 takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVDQU32__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVDQU32(v[0], v[1]) + } else { + panic("instruction VMOVDQU32 takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVDQU64__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVDQU64(v[0], v[1]) + } else { + panic("instruction VMOVDQU64 takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVDQU8__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVDQU8(v[0], v[1]) + } else { + panic("instruction VMOVDQU8 takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVHLPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VMOVHLPS(v[0], v[1], v[2]) + } else { + panic("instruction VMOVHLPS takes exactly 3 operands") + } +} + +func __asm_proxy_VMOVHPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VMOVHPD(v[0], v[1]) + case 3 : return p.VMOVHPD(v[0], v[1], v[2]) + default : panic("instruction VMOVHPD takes 2 or 3 operands") + } +} + +func __asm_proxy_VMOVHPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VMOVHPS(v[0], v[1]) + case 3 : return p.VMOVHPS(v[0], v[1], v[2]) + default : panic("instruction VMOVHPS takes 2 or 3 operands") + } +} + +func __asm_proxy_VMOVLHPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VMOVLHPS(v[0], v[1], v[2]) + } else { + panic("instruction VMOVLHPS takes exactly 3 operands") + } +} + +func __asm_proxy_VMOVLPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VMOVLPD(v[0], v[1]) + case 3 : return p.VMOVLPD(v[0], v[1], v[2]) + default : panic("instruction VMOVLPD takes 2 or 3 operands") + } +} + +func __asm_proxy_VMOVLPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VMOVLPS(v[0], v[1]) + case 3 : return p.VMOVLPS(v[0], v[1], v[2]) + default : panic("instruction VMOVLPS takes 2 or 3 operands") + } +} + +func __asm_proxy_VMOVMSKPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVMSKPD(v[0], v[1]) + } else { + panic("instruction VMOVMSKPD takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVMSKPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVMSKPS(v[0], v[1]) + } else { + panic("instruction VMOVMSKPS takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVNTDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVNTDQ(v[0], v[1]) + } else { + panic("instruction VMOVNTDQ takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVNTDQA__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVNTDQA(v[0], v[1]) + } else { + panic("instruction VMOVNTDQA takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVNTPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVNTPD(v[0], v[1]) + } else { + panic("instruction VMOVNTPD takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVNTPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVNTPS(v[0], v[1]) + } else { + panic("instruction VMOVNTPS takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVQ(v[0], v[1]) + } else { + panic("instruction VMOVQ takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VMOVSD(v[0], v[1]) + case 3 : return p.VMOVSD(v[0], v[1], v[2]) + default : panic("instruction VMOVSD takes 2 or 3 operands") + } +} + +func __asm_proxy_VMOVSHDUP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVSHDUP(v[0], v[1]) + } else { + panic("instruction VMOVSHDUP takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVSLDUP__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVSLDUP(v[0], v[1]) + } else { + panic("instruction VMOVSLDUP takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VMOVSS(v[0], v[1]) + case 3 : return p.VMOVSS(v[0], v[1], v[2]) + default : panic("instruction VMOVSS takes 2 or 3 operands") + } +} + +func __asm_proxy_VMOVUPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVUPD(v[0], v[1]) + } else { + panic("instruction VMOVUPD takes exactly 2 operands") + } +} + +func __asm_proxy_VMOVUPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VMOVUPS(v[0], v[1]) + } else { + panic("instruction VMOVUPS takes exactly 2 operands") + } +} + +func __asm_proxy_VMPSADBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VMPSADBW(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VMPSADBW takes exactly 4 operands") + } +} + +func __asm_proxy_VMULPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VMULPD(v[0], v[1], v[2]) + case 4 : return p.VMULPD(v[0], v[1], v[2], v[3]) + default : panic("instruction VMULPD takes 3 or 4 operands") + } +} + +func __asm_proxy_VMULPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VMULPS(v[0], v[1], v[2]) + case 4 : return p.VMULPS(v[0], v[1], v[2], v[3]) + default : panic("instruction VMULPS takes 3 or 4 operands") + } +} + +func __asm_proxy_VMULSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VMULSD(v[0], v[1], v[2]) + case 4 : return p.VMULSD(v[0], v[1], v[2], v[3]) + default : panic("instruction VMULSD takes 3 or 4 operands") + } +} + +func __asm_proxy_VMULSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VMULSS(v[0], v[1], v[2]) + case 4 : return p.VMULSS(v[0], v[1], v[2], v[3]) + default : panic("instruction VMULSS takes 3 or 4 operands") + } +} + +func __asm_proxy_VORPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VORPD(v[0], v[1], v[2]) + } else { + panic("instruction VORPD takes exactly 3 operands") + } +} + +func __asm_proxy_VORPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VORPS(v[0], v[1], v[2]) + } else { + panic("instruction VORPS takes exactly 3 operands") + } +} + +func __asm_proxy_VPABSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPABSB(v[0], v[1]) + } else { + panic("instruction VPABSB takes exactly 2 operands") + } +} + +func __asm_proxy_VPABSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPABSD(v[0], v[1]) + } else { + panic("instruction VPABSD takes exactly 2 operands") + } +} + +func __asm_proxy_VPABSQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPABSQ(v[0], v[1]) + } else { + panic("instruction VPABSQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPABSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPABSW(v[0], v[1]) + } else { + panic("instruction VPABSW takes exactly 2 operands") + } +} + +func __asm_proxy_VPACKSSDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPACKSSDW(v[0], v[1], v[2]) + } else { + panic("instruction VPACKSSDW takes exactly 3 operands") + } +} + +func __asm_proxy_VPACKSSWB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPACKSSWB(v[0], v[1], v[2]) + } else { + panic("instruction VPACKSSWB takes exactly 3 operands") + } +} + +func __asm_proxy_VPACKUSDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPACKUSDW(v[0], v[1], v[2]) + } else { + panic("instruction VPACKUSDW takes exactly 3 operands") + } +} + +func __asm_proxy_VPACKUSWB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPACKUSWB(v[0], v[1], v[2]) + } else { + panic("instruction VPACKUSWB takes exactly 3 operands") + } +} + +func __asm_proxy_VPADDB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPADDB(v[0], v[1], v[2]) + } else { + panic("instruction VPADDB takes exactly 3 operands") + } +} + +func __asm_proxy_VPADDD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPADDD(v[0], v[1], v[2]) + } else { + panic("instruction VPADDD takes exactly 3 operands") + } +} + +func __asm_proxy_VPADDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPADDQ(v[0], v[1], v[2]) + } else { + panic("instruction VPADDQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPADDSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPADDSB(v[0], v[1], v[2]) + } else { + panic("instruction VPADDSB takes exactly 3 operands") + } +} + +func __asm_proxy_VPADDSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPADDSW(v[0], v[1], v[2]) + } else { + panic("instruction VPADDSW takes exactly 3 operands") + } +} + +func __asm_proxy_VPADDUSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPADDUSB(v[0], v[1], v[2]) + } else { + panic("instruction VPADDUSB takes exactly 3 operands") + } +} + +func __asm_proxy_VPADDUSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPADDUSW(v[0], v[1], v[2]) + } else { + panic("instruction VPADDUSW takes exactly 3 operands") + } +} + +func __asm_proxy_VPADDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPADDW(v[0], v[1], v[2]) + } else { + panic("instruction VPADDW takes exactly 3 operands") + } +} + +func __asm_proxy_VPALIGNR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPALIGNR(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPALIGNR takes exactly 4 operands") + } +} + +func __asm_proxy_VPAND__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPAND(v[0], v[1], v[2]) + } else { + panic("instruction VPAND takes exactly 3 operands") + } +} + +func __asm_proxy_VPANDD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPANDD(v[0], v[1], v[2]) + } else { + panic("instruction VPANDD takes exactly 3 operands") + } +} + +func __asm_proxy_VPANDN__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPANDN(v[0], v[1], v[2]) + } else { + panic("instruction VPANDN takes exactly 3 operands") + } +} + +func __asm_proxy_VPANDND__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPANDND(v[0], v[1], v[2]) + } else { + panic("instruction VPANDND takes exactly 3 operands") + } +} + +func __asm_proxy_VPANDNQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPANDNQ(v[0], v[1], v[2]) + } else { + panic("instruction VPANDNQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPANDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPANDQ(v[0], v[1], v[2]) + } else { + panic("instruction VPANDQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPAVGB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPAVGB(v[0], v[1], v[2]) + } else { + panic("instruction VPAVGB takes exactly 3 operands") + } +} + +func __asm_proxy_VPAVGW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPAVGW(v[0], v[1], v[2]) + } else { + panic("instruction VPAVGW takes exactly 3 operands") + } +} + +func __asm_proxy_VPBLENDD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPBLENDD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPBLENDD takes exactly 4 operands") + } +} + +func __asm_proxy_VPBLENDMB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPBLENDMB(v[0], v[1], v[2]) + } else { + panic("instruction VPBLENDMB takes exactly 3 operands") + } +} + +func __asm_proxy_VPBLENDMD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPBLENDMD(v[0], v[1], v[2]) + } else { + panic("instruction VPBLENDMD takes exactly 3 operands") + } +} + +func __asm_proxy_VPBLENDMQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPBLENDMQ(v[0], v[1], v[2]) + } else { + panic("instruction VPBLENDMQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPBLENDMW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPBLENDMW(v[0], v[1], v[2]) + } else { + panic("instruction VPBLENDMW takes exactly 3 operands") + } +} + +func __asm_proxy_VPBLENDVB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPBLENDVB(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPBLENDVB takes exactly 4 operands") + } +} + +func __asm_proxy_VPBLENDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPBLENDW(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPBLENDW takes exactly 4 operands") + } +} + +func __asm_proxy_VPBROADCASTB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPBROADCASTB(v[0], v[1]) + } else { + panic("instruction VPBROADCASTB takes exactly 2 operands") + } +} + +func __asm_proxy_VPBROADCASTD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPBROADCASTD(v[0], v[1]) + } else { + panic("instruction VPBROADCASTD takes exactly 2 operands") + } +} + +func __asm_proxy_VPBROADCASTMB2Q__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPBROADCASTMB2Q(v[0], v[1]) + } else { + panic("instruction VPBROADCASTMB2Q takes exactly 2 operands") + } +} + +func __asm_proxy_VPBROADCASTMW2D__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPBROADCASTMW2D(v[0], v[1]) + } else { + panic("instruction VPBROADCASTMW2D takes exactly 2 operands") + } +} + +func __asm_proxy_VPBROADCASTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPBROADCASTQ(v[0], v[1]) + } else { + panic("instruction VPBROADCASTQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPBROADCASTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPBROADCASTW(v[0], v[1]) + } else { + panic("instruction VPBROADCASTW takes exactly 2 operands") + } +} + +func __asm_proxy_VPCLMULQDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCLMULQDQ(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCLMULQDQ takes exactly 4 operands") + } +} + +func __asm_proxy_VPCMOV__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCMOV(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCMOV takes exactly 4 operands") + } +} + +func __asm_proxy_VPCMPB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCMPB(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCMPB takes exactly 4 operands") + } +} + +func __asm_proxy_VPCMPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCMPD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCMPD takes exactly 4 operands") + } +} + +func __asm_proxy_VPCMPEQB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPCMPEQB(v[0], v[1], v[2]) + } else { + panic("instruction VPCMPEQB takes exactly 3 operands") + } +} + +func __asm_proxy_VPCMPEQD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPCMPEQD(v[0], v[1], v[2]) + } else { + panic("instruction VPCMPEQD takes exactly 3 operands") + } +} + +func __asm_proxy_VPCMPEQQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPCMPEQQ(v[0], v[1], v[2]) + } else { + panic("instruction VPCMPEQQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPCMPEQW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPCMPEQW(v[0], v[1], v[2]) + } else { + panic("instruction VPCMPEQW takes exactly 3 operands") + } +} + +func __asm_proxy_VPCMPESTRI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPCMPESTRI(v[0], v[1], v[2]) + } else { + panic("instruction VPCMPESTRI takes exactly 3 operands") + } +} + +func __asm_proxy_VPCMPESTRM__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPCMPESTRM(v[0], v[1], v[2]) + } else { + panic("instruction VPCMPESTRM takes exactly 3 operands") + } +} + +func __asm_proxy_VPCMPGTB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPCMPGTB(v[0], v[1], v[2]) + } else { + panic("instruction VPCMPGTB takes exactly 3 operands") + } +} + +func __asm_proxy_VPCMPGTD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPCMPGTD(v[0], v[1], v[2]) + } else { + panic("instruction VPCMPGTD takes exactly 3 operands") + } +} + +func __asm_proxy_VPCMPGTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPCMPGTQ(v[0], v[1], v[2]) + } else { + panic("instruction VPCMPGTQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPCMPGTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPCMPGTW(v[0], v[1], v[2]) + } else { + panic("instruction VPCMPGTW takes exactly 3 operands") + } +} + +func __asm_proxy_VPCMPISTRI__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPCMPISTRI(v[0], v[1], v[2]) + } else { + panic("instruction VPCMPISTRI takes exactly 3 operands") + } +} + +func __asm_proxy_VPCMPISTRM__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPCMPISTRM(v[0], v[1], v[2]) + } else { + panic("instruction VPCMPISTRM takes exactly 3 operands") + } +} + +func __asm_proxy_VPCMPQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCMPQ(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCMPQ takes exactly 4 operands") + } +} + +func __asm_proxy_VPCMPUB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCMPUB(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCMPUB takes exactly 4 operands") + } +} + +func __asm_proxy_VPCMPUD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCMPUD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCMPUD takes exactly 4 operands") + } +} + +func __asm_proxy_VPCMPUQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCMPUQ(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCMPUQ takes exactly 4 operands") + } +} + +func __asm_proxy_VPCMPUW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCMPUW(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCMPUW takes exactly 4 operands") + } +} + +func __asm_proxy_VPCMPW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCMPW(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCMPW takes exactly 4 operands") + } +} + +func __asm_proxy_VPCOMB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCOMB(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCOMB takes exactly 4 operands") + } +} + +func __asm_proxy_VPCOMD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCOMD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCOMD takes exactly 4 operands") + } +} + +func __asm_proxy_VPCOMPRESSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPCOMPRESSD(v[0], v[1]) + } else { + panic("instruction VPCOMPRESSD takes exactly 2 operands") + } +} + +func __asm_proxy_VPCOMPRESSQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPCOMPRESSQ(v[0], v[1]) + } else { + panic("instruction VPCOMPRESSQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPCOMQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCOMQ(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCOMQ takes exactly 4 operands") + } +} + +func __asm_proxy_VPCOMUB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCOMUB(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCOMUB takes exactly 4 operands") + } +} + +func __asm_proxy_VPCOMUD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCOMUD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCOMUD takes exactly 4 operands") + } +} + +func __asm_proxy_VPCOMUQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCOMUQ(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCOMUQ takes exactly 4 operands") + } +} + +func __asm_proxy_VPCOMUW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCOMUW(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCOMUW takes exactly 4 operands") + } +} + +func __asm_proxy_VPCOMW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPCOMW(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPCOMW takes exactly 4 operands") + } +} + +func __asm_proxy_VPCONFLICTD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPCONFLICTD(v[0], v[1]) + } else { + panic("instruction VPCONFLICTD takes exactly 2 operands") + } +} + +func __asm_proxy_VPCONFLICTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPCONFLICTQ(v[0], v[1]) + } else { + panic("instruction VPCONFLICTQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPERM2F128__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPERM2F128(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPERM2F128 takes exactly 4 operands") + } +} + +func __asm_proxy_VPERM2I128__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPERM2I128(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPERM2I128 takes exactly 4 operands") + } +} + +func __asm_proxy_VPERMB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMB(v[0], v[1], v[2]) + } else { + panic("instruction VPERMB takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMD(v[0], v[1], v[2]) + } else { + panic("instruction VPERMD takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMI2B__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMI2B(v[0], v[1], v[2]) + } else { + panic("instruction VPERMI2B takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMI2D__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMI2D(v[0], v[1], v[2]) + } else { + panic("instruction VPERMI2D takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMI2PD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMI2PD(v[0], v[1], v[2]) + } else { + panic("instruction VPERMI2PD takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMI2PS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMI2PS(v[0], v[1], v[2]) + } else { + panic("instruction VPERMI2PS takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMI2Q__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMI2Q(v[0], v[1], v[2]) + } else { + panic("instruction VPERMI2Q takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMI2W__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMI2W(v[0], v[1], v[2]) + } else { + panic("instruction VPERMI2W takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMIL2PD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 5 { + return p.VPERMIL2PD(v[0], v[1], v[2], v[3], v[4]) + } else { + panic("instruction VPERMIL2PD takes exactly 5 operands") + } +} + +func __asm_proxy_VPERMIL2PS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 5 { + return p.VPERMIL2PS(v[0], v[1], v[2], v[3], v[4]) + } else { + panic("instruction VPERMIL2PS takes exactly 5 operands") + } +} + +func __asm_proxy_VPERMILPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMILPD(v[0], v[1], v[2]) + } else { + panic("instruction VPERMILPD takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMILPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMILPS(v[0], v[1], v[2]) + } else { + panic("instruction VPERMILPS takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMPD(v[0], v[1], v[2]) + } else { + panic("instruction VPERMPD takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMPS(v[0], v[1], v[2]) + } else { + panic("instruction VPERMPS takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMQ(v[0], v[1], v[2]) + } else { + panic("instruction VPERMQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMT2B__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMT2B(v[0], v[1], v[2]) + } else { + panic("instruction VPERMT2B takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMT2D__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMT2D(v[0], v[1], v[2]) + } else { + panic("instruction VPERMT2D takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMT2PD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMT2PD(v[0], v[1], v[2]) + } else { + panic("instruction VPERMT2PD takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMT2PS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMT2PS(v[0], v[1], v[2]) + } else { + panic("instruction VPERMT2PS takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMT2Q__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMT2Q(v[0], v[1], v[2]) + } else { + panic("instruction VPERMT2Q takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMT2W__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMT2W(v[0], v[1], v[2]) + } else { + panic("instruction VPERMT2W takes exactly 3 operands") + } +} + +func __asm_proxy_VPERMW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPERMW(v[0], v[1], v[2]) + } else { + panic("instruction VPERMW takes exactly 3 operands") + } +} + +func __asm_proxy_VPEXPANDD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPEXPANDD(v[0], v[1]) + } else { + panic("instruction VPEXPANDD takes exactly 2 operands") + } +} + +func __asm_proxy_VPEXPANDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPEXPANDQ(v[0], v[1]) + } else { + panic("instruction VPEXPANDQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPEXTRB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPEXTRB(v[0], v[1], v[2]) + } else { + panic("instruction VPEXTRB takes exactly 3 operands") + } +} + +func __asm_proxy_VPEXTRD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPEXTRD(v[0], v[1], v[2]) + } else { + panic("instruction VPEXTRD takes exactly 3 operands") + } +} + +func __asm_proxy_VPEXTRQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPEXTRQ(v[0], v[1], v[2]) + } else { + panic("instruction VPEXTRQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPEXTRW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPEXTRW(v[0], v[1], v[2]) + } else { + panic("instruction VPEXTRW takes exactly 3 operands") + } +} + +func __asm_proxy_VPGATHERDD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VPGATHERDD(v[0], v[1]) + case 3 : return p.VPGATHERDD(v[0], v[1], v[2]) + default : panic("instruction VPGATHERDD takes 2 or 3 operands") + } +} + +func __asm_proxy_VPGATHERDQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VPGATHERDQ(v[0], v[1]) + case 3 : return p.VPGATHERDQ(v[0], v[1], v[2]) + default : panic("instruction VPGATHERDQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VPGATHERQD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VPGATHERQD(v[0], v[1]) + case 3 : return p.VPGATHERQD(v[0], v[1], v[2]) + default : panic("instruction VPGATHERQD takes 2 or 3 operands") + } +} + +func __asm_proxy_VPGATHERQQ__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VPGATHERQQ(v[0], v[1]) + case 3 : return p.VPGATHERQQ(v[0], v[1], v[2]) + default : panic("instruction VPGATHERQQ takes 2 or 3 operands") + } +} + +func __asm_proxy_VPHADDBD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHADDBD(v[0], v[1]) + } else { + panic("instruction VPHADDBD takes exactly 2 operands") + } +} + +func __asm_proxy_VPHADDBQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHADDBQ(v[0], v[1]) + } else { + panic("instruction VPHADDBQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPHADDBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHADDBW(v[0], v[1]) + } else { + panic("instruction VPHADDBW takes exactly 2 operands") + } +} + +func __asm_proxy_VPHADDD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPHADDD(v[0], v[1], v[2]) + } else { + panic("instruction VPHADDD takes exactly 3 operands") + } +} + +func __asm_proxy_VPHADDDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHADDDQ(v[0], v[1]) + } else { + panic("instruction VPHADDDQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPHADDSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPHADDSW(v[0], v[1], v[2]) + } else { + panic("instruction VPHADDSW takes exactly 3 operands") + } +} + +func __asm_proxy_VPHADDUBD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHADDUBD(v[0], v[1]) + } else { + panic("instruction VPHADDUBD takes exactly 2 operands") + } +} + +func __asm_proxy_VPHADDUBQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHADDUBQ(v[0], v[1]) + } else { + panic("instruction VPHADDUBQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPHADDUBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHADDUBW(v[0], v[1]) + } else { + panic("instruction VPHADDUBW takes exactly 2 operands") + } +} + +func __asm_proxy_VPHADDUDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHADDUDQ(v[0], v[1]) + } else { + panic("instruction VPHADDUDQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPHADDUWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHADDUWD(v[0], v[1]) + } else { + panic("instruction VPHADDUWD takes exactly 2 operands") + } +} + +func __asm_proxy_VPHADDUWQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHADDUWQ(v[0], v[1]) + } else { + panic("instruction VPHADDUWQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPHADDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPHADDW(v[0], v[1], v[2]) + } else { + panic("instruction VPHADDW takes exactly 3 operands") + } +} + +func __asm_proxy_VPHADDWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHADDWD(v[0], v[1]) + } else { + panic("instruction VPHADDWD takes exactly 2 operands") + } +} + +func __asm_proxy_VPHADDWQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHADDWQ(v[0], v[1]) + } else { + panic("instruction VPHADDWQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPHMINPOSUW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHMINPOSUW(v[0], v[1]) + } else { + panic("instruction VPHMINPOSUW takes exactly 2 operands") + } +} + +func __asm_proxy_VPHSUBBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHSUBBW(v[0], v[1]) + } else { + panic("instruction VPHSUBBW takes exactly 2 operands") + } +} + +func __asm_proxy_VPHSUBD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPHSUBD(v[0], v[1], v[2]) + } else { + panic("instruction VPHSUBD takes exactly 3 operands") + } +} + +func __asm_proxy_VPHSUBDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHSUBDQ(v[0], v[1]) + } else { + panic("instruction VPHSUBDQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPHSUBSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPHSUBSW(v[0], v[1], v[2]) + } else { + panic("instruction VPHSUBSW takes exactly 3 operands") + } +} + +func __asm_proxy_VPHSUBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPHSUBW(v[0], v[1], v[2]) + } else { + panic("instruction VPHSUBW takes exactly 3 operands") + } +} + +func __asm_proxy_VPHSUBWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPHSUBWD(v[0], v[1]) + } else { + panic("instruction VPHSUBWD takes exactly 2 operands") + } +} + +func __asm_proxy_VPINSRB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPINSRB(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPINSRB takes exactly 4 operands") + } +} + +func __asm_proxy_VPINSRD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPINSRD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPINSRD takes exactly 4 operands") + } +} + +func __asm_proxy_VPINSRQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPINSRQ(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPINSRQ takes exactly 4 operands") + } +} + +func __asm_proxy_VPINSRW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPINSRW(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPINSRW takes exactly 4 operands") + } +} + +func __asm_proxy_VPLZCNTD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPLZCNTD(v[0], v[1]) + } else { + panic("instruction VPLZCNTD takes exactly 2 operands") + } +} + +func __asm_proxy_VPLZCNTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPLZCNTQ(v[0], v[1]) + } else { + panic("instruction VPLZCNTQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPMACSDD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPMACSDD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPMACSDD takes exactly 4 operands") + } +} + +func __asm_proxy_VPMACSDQH__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPMACSDQH(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPMACSDQH takes exactly 4 operands") + } +} + +func __asm_proxy_VPMACSDQL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPMACSDQL(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPMACSDQL takes exactly 4 operands") + } +} + +func __asm_proxy_VPMACSSDD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPMACSSDD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPMACSSDD takes exactly 4 operands") + } +} + +func __asm_proxy_VPMACSSDQH__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPMACSSDQH(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPMACSSDQH takes exactly 4 operands") + } +} + +func __asm_proxy_VPMACSSDQL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPMACSSDQL(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPMACSSDQL takes exactly 4 operands") + } +} + +func __asm_proxy_VPMACSSWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPMACSSWD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPMACSSWD takes exactly 4 operands") + } +} + +func __asm_proxy_VPMACSSWW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPMACSSWW(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPMACSSWW takes exactly 4 operands") + } +} + +func __asm_proxy_VPMACSWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPMACSWD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPMACSWD takes exactly 4 operands") + } +} + +func __asm_proxy_VPMACSWW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPMACSWW(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPMACSWW takes exactly 4 operands") + } +} + +func __asm_proxy_VPMADCSSWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPMADCSSWD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPMADCSSWD takes exactly 4 operands") + } +} + +func __asm_proxy_VPMADCSWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPMADCSWD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPMADCSWD takes exactly 4 operands") + } +} + +func __asm_proxy_VPMADD52HUQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMADD52HUQ(v[0], v[1], v[2]) + } else { + panic("instruction VPMADD52HUQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPMADD52LUQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMADD52LUQ(v[0], v[1], v[2]) + } else { + panic("instruction VPMADD52LUQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPMADDUBSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMADDUBSW(v[0], v[1], v[2]) + } else { + panic("instruction VPMADDUBSW takes exactly 3 operands") + } +} + +func __asm_proxy_VPMADDWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMADDWD(v[0], v[1], v[2]) + } else { + panic("instruction VPMADDWD takes exactly 3 operands") + } +} + +func __asm_proxy_VPMASKMOVD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMASKMOVD(v[0], v[1], v[2]) + } else { + panic("instruction VPMASKMOVD takes exactly 3 operands") + } +} + +func __asm_proxy_VPMASKMOVQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMASKMOVQ(v[0], v[1], v[2]) + } else { + panic("instruction VPMASKMOVQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPMAXSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMAXSB(v[0], v[1], v[2]) + } else { + panic("instruction VPMAXSB takes exactly 3 operands") + } +} + +func __asm_proxy_VPMAXSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMAXSD(v[0], v[1], v[2]) + } else { + panic("instruction VPMAXSD takes exactly 3 operands") + } +} + +func __asm_proxy_VPMAXSQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMAXSQ(v[0], v[1], v[2]) + } else { + panic("instruction VPMAXSQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPMAXSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMAXSW(v[0], v[1], v[2]) + } else { + panic("instruction VPMAXSW takes exactly 3 operands") + } +} + +func __asm_proxy_VPMAXUB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMAXUB(v[0], v[1], v[2]) + } else { + panic("instruction VPMAXUB takes exactly 3 operands") + } +} + +func __asm_proxy_VPMAXUD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMAXUD(v[0], v[1], v[2]) + } else { + panic("instruction VPMAXUD takes exactly 3 operands") + } +} + +func __asm_proxy_VPMAXUQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMAXUQ(v[0], v[1], v[2]) + } else { + panic("instruction VPMAXUQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPMAXUW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMAXUW(v[0], v[1], v[2]) + } else { + panic("instruction VPMAXUW takes exactly 3 operands") + } +} + +func __asm_proxy_VPMINSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMINSB(v[0], v[1], v[2]) + } else { + panic("instruction VPMINSB takes exactly 3 operands") + } +} + +func __asm_proxy_VPMINSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMINSD(v[0], v[1], v[2]) + } else { + panic("instruction VPMINSD takes exactly 3 operands") + } +} + +func __asm_proxy_VPMINSQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMINSQ(v[0], v[1], v[2]) + } else { + panic("instruction VPMINSQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPMINSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMINSW(v[0], v[1], v[2]) + } else { + panic("instruction VPMINSW takes exactly 3 operands") + } +} + +func __asm_proxy_VPMINUB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMINUB(v[0], v[1], v[2]) + } else { + panic("instruction VPMINUB takes exactly 3 operands") + } +} + +func __asm_proxy_VPMINUD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMINUD(v[0], v[1], v[2]) + } else { + panic("instruction VPMINUD takes exactly 3 operands") + } +} + +func __asm_proxy_VPMINUQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMINUQ(v[0], v[1], v[2]) + } else { + panic("instruction VPMINUQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPMINUW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMINUW(v[0], v[1], v[2]) + } else { + panic("instruction VPMINUW takes exactly 3 operands") + } +} + +func __asm_proxy_VPMOVB2M__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVB2M(v[0], v[1]) + } else { + panic("instruction VPMOVB2M takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVD2M__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVD2M(v[0], v[1]) + } else { + panic("instruction VPMOVD2M takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVDB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVDB(v[0], v[1]) + } else { + panic("instruction VPMOVDB takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVDW(v[0], v[1]) + } else { + panic("instruction VPMOVDW takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVM2B__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVM2B(v[0], v[1]) + } else { + panic("instruction VPMOVM2B takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVM2D__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVM2D(v[0], v[1]) + } else { + panic("instruction VPMOVM2D takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVM2Q__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVM2Q(v[0], v[1]) + } else { + panic("instruction VPMOVM2Q takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVM2W__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVM2W(v[0], v[1]) + } else { + panic("instruction VPMOVM2W takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVMSKB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVMSKB(v[0], v[1]) + } else { + panic("instruction VPMOVMSKB takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVQ2M__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVQ2M(v[0], v[1]) + } else { + panic("instruction VPMOVQ2M takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVQB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVQB(v[0], v[1]) + } else { + panic("instruction VPMOVQB takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVQD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVQD(v[0], v[1]) + } else { + panic("instruction VPMOVQD takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVQW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVQW(v[0], v[1]) + } else { + panic("instruction VPMOVQW takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVSDB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVSDB(v[0], v[1]) + } else { + panic("instruction VPMOVSDB takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVSDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVSDW(v[0], v[1]) + } else { + panic("instruction VPMOVSDW takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVSQB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVSQB(v[0], v[1]) + } else { + panic("instruction VPMOVSQB takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVSQD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVSQD(v[0], v[1]) + } else { + panic("instruction VPMOVSQD takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVSQW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVSQW(v[0], v[1]) + } else { + panic("instruction VPMOVSQW takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVSWB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVSWB(v[0], v[1]) + } else { + panic("instruction VPMOVSWB takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVSXBD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVSXBD(v[0], v[1]) + } else { + panic("instruction VPMOVSXBD takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVSXBQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVSXBQ(v[0], v[1]) + } else { + panic("instruction VPMOVSXBQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVSXBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVSXBW(v[0], v[1]) + } else { + panic("instruction VPMOVSXBW takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVSXDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVSXDQ(v[0], v[1]) + } else { + panic("instruction VPMOVSXDQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVSXWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVSXWD(v[0], v[1]) + } else { + panic("instruction VPMOVSXWD takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVSXWQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVSXWQ(v[0], v[1]) + } else { + panic("instruction VPMOVSXWQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVUSDB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVUSDB(v[0], v[1]) + } else { + panic("instruction VPMOVUSDB takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVUSDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVUSDW(v[0], v[1]) + } else { + panic("instruction VPMOVUSDW takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVUSQB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVUSQB(v[0], v[1]) + } else { + panic("instruction VPMOVUSQB takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVUSQD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVUSQD(v[0], v[1]) + } else { + panic("instruction VPMOVUSQD takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVUSQW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVUSQW(v[0], v[1]) + } else { + panic("instruction VPMOVUSQW takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVUSWB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVUSWB(v[0], v[1]) + } else { + panic("instruction VPMOVUSWB takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVW2M__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVW2M(v[0], v[1]) + } else { + panic("instruction VPMOVW2M takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVWB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVWB(v[0], v[1]) + } else { + panic("instruction VPMOVWB takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVZXBD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVZXBD(v[0], v[1]) + } else { + panic("instruction VPMOVZXBD takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVZXBQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVZXBQ(v[0], v[1]) + } else { + panic("instruction VPMOVZXBQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVZXBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVZXBW(v[0], v[1]) + } else { + panic("instruction VPMOVZXBW takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVZXDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVZXDQ(v[0], v[1]) + } else { + panic("instruction VPMOVZXDQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVZXWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVZXWD(v[0], v[1]) + } else { + panic("instruction VPMOVZXWD takes exactly 2 operands") + } +} + +func __asm_proxy_VPMOVZXWQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPMOVZXWQ(v[0], v[1]) + } else { + panic("instruction VPMOVZXWQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPMULDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMULDQ(v[0], v[1], v[2]) + } else { + panic("instruction VPMULDQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPMULHRSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMULHRSW(v[0], v[1], v[2]) + } else { + panic("instruction VPMULHRSW takes exactly 3 operands") + } +} + +func __asm_proxy_VPMULHUW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMULHUW(v[0], v[1], v[2]) + } else { + panic("instruction VPMULHUW takes exactly 3 operands") + } +} + +func __asm_proxy_VPMULHW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMULHW(v[0], v[1], v[2]) + } else { + panic("instruction VPMULHW takes exactly 3 operands") + } +} + +func __asm_proxy_VPMULLD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMULLD(v[0], v[1], v[2]) + } else { + panic("instruction VPMULLD takes exactly 3 operands") + } +} + +func __asm_proxy_VPMULLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMULLQ(v[0], v[1], v[2]) + } else { + panic("instruction VPMULLQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPMULLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMULLW(v[0], v[1], v[2]) + } else { + panic("instruction VPMULLW takes exactly 3 operands") + } +} + +func __asm_proxy_VPMULTISHIFTQB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMULTISHIFTQB(v[0], v[1], v[2]) + } else { + panic("instruction VPMULTISHIFTQB takes exactly 3 operands") + } +} + +func __asm_proxy_VPMULUDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPMULUDQ(v[0], v[1], v[2]) + } else { + panic("instruction VPMULUDQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPOPCNTD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPOPCNTD(v[0], v[1]) + } else { + panic("instruction VPOPCNTD takes exactly 2 operands") + } +} + +func __asm_proxy_VPOPCNTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPOPCNTQ(v[0], v[1]) + } else { + panic("instruction VPOPCNTQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPOR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPOR(v[0], v[1], v[2]) + } else { + panic("instruction VPOR takes exactly 3 operands") + } +} + +func __asm_proxy_VPORD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPORD(v[0], v[1], v[2]) + } else { + panic("instruction VPORD takes exactly 3 operands") + } +} + +func __asm_proxy_VPORQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPORQ(v[0], v[1], v[2]) + } else { + panic("instruction VPORQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPPERM__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPPERM(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPPERM takes exactly 4 operands") + } +} + +func __asm_proxy_VPROLD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPROLD(v[0], v[1], v[2]) + } else { + panic("instruction VPROLD takes exactly 3 operands") + } +} + +func __asm_proxy_VPROLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPROLQ(v[0], v[1], v[2]) + } else { + panic("instruction VPROLQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPROLVD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPROLVD(v[0], v[1], v[2]) + } else { + panic("instruction VPROLVD takes exactly 3 operands") + } +} + +func __asm_proxy_VPROLVQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPROLVQ(v[0], v[1], v[2]) + } else { + panic("instruction VPROLVQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPRORD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPRORD(v[0], v[1], v[2]) + } else { + panic("instruction VPRORD takes exactly 3 operands") + } +} + +func __asm_proxy_VPRORQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPRORQ(v[0], v[1], v[2]) + } else { + panic("instruction VPRORQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPRORVD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPRORVD(v[0], v[1], v[2]) + } else { + panic("instruction VPRORVD takes exactly 3 operands") + } +} + +func __asm_proxy_VPRORVQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPRORVQ(v[0], v[1], v[2]) + } else { + panic("instruction VPRORVQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPROTB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPROTB(v[0], v[1], v[2]) + } else { + panic("instruction VPROTB takes exactly 3 operands") + } +} + +func __asm_proxy_VPROTD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPROTD(v[0], v[1], v[2]) + } else { + panic("instruction VPROTD takes exactly 3 operands") + } +} + +func __asm_proxy_VPROTQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPROTQ(v[0], v[1], v[2]) + } else { + panic("instruction VPROTQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPROTW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPROTW(v[0], v[1], v[2]) + } else { + panic("instruction VPROTW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSADBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSADBW(v[0], v[1], v[2]) + } else { + panic("instruction VPSADBW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSCATTERDD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPSCATTERDD(v[0], v[1]) + } else { + panic("instruction VPSCATTERDD takes exactly 2 operands") + } +} + +func __asm_proxy_VPSCATTERDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPSCATTERDQ(v[0], v[1]) + } else { + panic("instruction VPSCATTERDQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPSCATTERQD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPSCATTERQD(v[0], v[1]) + } else { + panic("instruction VPSCATTERQD takes exactly 2 operands") + } +} + +func __asm_proxy_VPSCATTERQQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPSCATTERQQ(v[0], v[1]) + } else { + panic("instruction VPSCATTERQQ takes exactly 2 operands") + } +} + +func __asm_proxy_VPSHAB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSHAB(v[0], v[1], v[2]) + } else { + panic("instruction VPSHAB takes exactly 3 operands") + } +} + +func __asm_proxy_VPSHAD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSHAD(v[0], v[1], v[2]) + } else { + panic("instruction VPSHAD takes exactly 3 operands") + } +} + +func __asm_proxy_VPSHAQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSHAQ(v[0], v[1], v[2]) + } else { + panic("instruction VPSHAQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPSHAW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSHAW(v[0], v[1], v[2]) + } else { + panic("instruction VPSHAW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSHLB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSHLB(v[0], v[1], v[2]) + } else { + panic("instruction VPSHLB takes exactly 3 operands") + } +} + +func __asm_proxy_VPSHLD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSHLD(v[0], v[1], v[2]) + } else { + panic("instruction VPSHLD takes exactly 3 operands") + } +} + +func __asm_proxy_VPSHLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSHLQ(v[0], v[1], v[2]) + } else { + panic("instruction VPSHLQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPSHLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSHLW(v[0], v[1], v[2]) + } else { + panic("instruction VPSHLW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSHUFB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSHUFB(v[0], v[1], v[2]) + } else { + panic("instruction VPSHUFB takes exactly 3 operands") + } +} + +func __asm_proxy_VPSHUFD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSHUFD(v[0], v[1], v[2]) + } else { + panic("instruction VPSHUFD takes exactly 3 operands") + } +} + +func __asm_proxy_VPSHUFHW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSHUFHW(v[0], v[1], v[2]) + } else { + panic("instruction VPSHUFHW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSHUFLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSHUFLW(v[0], v[1], v[2]) + } else { + panic("instruction VPSHUFLW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSIGNB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSIGNB(v[0], v[1], v[2]) + } else { + panic("instruction VPSIGNB takes exactly 3 operands") + } +} + +func __asm_proxy_VPSIGND__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSIGND(v[0], v[1], v[2]) + } else { + panic("instruction VPSIGND takes exactly 3 operands") + } +} + +func __asm_proxy_VPSIGNW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSIGNW(v[0], v[1], v[2]) + } else { + panic("instruction VPSIGNW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSLLD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSLLD(v[0], v[1], v[2]) + } else { + panic("instruction VPSLLD takes exactly 3 operands") + } +} + +func __asm_proxy_VPSLLDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSLLDQ(v[0], v[1], v[2]) + } else { + panic("instruction VPSLLDQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPSLLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSLLQ(v[0], v[1], v[2]) + } else { + panic("instruction VPSLLQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPSLLVD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSLLVD(v[0], v[1], v[2]) + } else { + panic("instruction VPSLLVD takes exactly 3 operands") + } +} + +func __asm_proxy_VPSLLVQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSLLVQ(v[0], v[1], v[2]) + } else { + panic("instruction VPSLLVQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPSLLVW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSLLVW(v[0], v[1], v[2]) + } else { + panic("instruction VPSLLVW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSLLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSLLW(v[0], v[1], v[2]) + } else { + panic("instruction VPSLLW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRAD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRAD(v[0], v[1], v[2]) + } else { + panic("instruction VPSRAD takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRAQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRAQ(v[0], v[1], v[2]) + } else { + panic("instruction VPSRAQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRAVD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRAVD(v[0], v[1], v[2]) + } else { + panic("instruction VPSRAVD takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRAVQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRAVQ(v[0], v[1], v[2]) + } else { + panic("instruction VPSRAVQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRAVW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRAVW(v[0], v[1], v[2]) + } else { + panic("instruction VPSRAVW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRAW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRAW(v[0], v[1], v[2]) + } else { + panic("instruction VPSRAW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRLD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRLD(v[0], v[1], v[2]) + } else { + panic("instruction VPSRLD takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRLDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRLDQ(v[0], v[1], v[2]) + } else { + panic("instruction VPSRLDQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRLQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRLQ(v[0], v[1], v[2]) + } else { + panic("instruction VPSRLQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRLVD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRLVD(v[0], v[1], v[2]) + } else { + panic("instruction VPSRLVD takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRLVQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRLVQ(v[0], v[1], v[2]) + } else { + panic("instruction VPSRLVQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRLVW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRLVW(v[0], v[1], v[2]) + } else { + panic("instruction VPSRLVW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSRLW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSRLW(v[0], v[1], v[2]) + } else { + panic("instruction VPSRLW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSUBB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSUBB(v[0], v[1], v[2]) + } else { + panic("instruction VPSUBB takes exactly 3 operands") + } +} + +func __asm_proxy_VPSUBD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSUBD(v[0], v[1], v[2]) + } else { + panic("instruction VPSUBD takes exactly 3 operands") + } +} + +func __asm_proxy_VPSUBQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSUBQ(v[0], v[1], v[2]) + } else { + panic("instruction VPSUBQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPSUBSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSUBSB(v[0], v[1], v[2]) + } else { + panic("instruction VPSUBSB takes exactly 3 operands") + } +} + +func __asm_proxy_VPSUBSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSUBSW(v[0], v[1], v[2]) + } else { + panic("instruction VPSUBSW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSUBUSB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSUBUSB(v[0], v[1], v[2]) + } else { + panic("instruction VPSUBUSB takes exactly 3 operands") + } +} + +func __asm_proxy_VPSUBUSW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSUBUSW(v[0], v[1], v[2]) + } else { + panic("instruction VPSUBUSW takes exactly 3 operands") + } +} + +func __asm_proxy_VPSUBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPSUBW(v[0], v[1], v[2]) + } else { + panic("instruction VPSUBW takes exactly 3 operands") + } +} + +func __asm_proxy_VPTERNLOGD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPTERNLOGD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPTERNLOGD takes exactly 4 operands") + } +} + +func __asm_proxy_VPTERNLOGQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VPTERNLOGQ(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VPTERNLOGQ takes exactly 4 operands") + } +} + +func __asm_proxy_VPTEST__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VPTEST(v[0], v[1]) + } else { + panic("instruction VPTEST takes exactly 2 operands") + } +} + +func __asm_proxy_VPTESTMB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPTESTMB(v[0], v[1], v[2]) + } else { + panic("instruction VPTESTMB takes exactly 3 operands") + } +} + +func __asm_proxy_VPTESTMD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPTESTMD(v[0], v[1], v[2]) + } else { + panic("instruction VPTESTMD takes exactly 3 operands") + } +} + +func __asm_proxy_VPTESTMQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPTESTMQ(v[0], v[1], v[2]) + } else { + panic("instruction VPTESTMQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPTESTMW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPTESTMW(v[0], v[1], v[2]) + } else { + panic("instruction VPTESTMW takes exactly 3 operands") + } +} + +func __asm_proxy_VPTESTNMB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPTESTNMB(v[0], v[1], v[2]) + } else { + panic("instruction VPTESTNMB takes exactly 3 operands") + } +} + +func __asm_proxy_VPTESTNMD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPTESTNMD(v[0], v[1], v[2]) + } else { + panic("instruction VPTESTNMD takes exactly 3 operands") + } +} + +func __asm_proxy_VPTESTNMQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPTESTNMQ(v[0], v[1], v[2]) + } else { + panic("instruction VPTESTNMQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPTESTNMW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPTESTNMW(v[0], v[1], v[2]) + } else { + panic("instruction VPTESTNMW takes exactly 3 operands") + } +} + +func __asm_proxy_VPUNPCKHBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPUNPCKHBW(v[0], v[1], v[2]) + } else { + panic("instruction VPUNPCKHBW takes exactly 3 operands") + } +} + +func __asm_proxy_VPUNPCKHDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPUNPCKHDQ(v[0], v[1], v[2]) + } else { + panic("instruction VPUNPCKHDQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPUNPCKHQDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPUNPCKHQDQ(v[0], v[1], v[2]) + } else { + panic("instruction VPUNPCKHQDQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPUNPCKHWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPUNPCKHWD(v[0], v[1], v[2]) + } else { + panic("instruction VPUNPCKHWD takes exactly 3 operands") + } +} + +func __asm_proxy_VPUNPCKLBW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPUNPCKLBW(v[0], v[1], v[2]) + } else { + panic("instruction VPUNPCKLBW takes exactly 3 operands") + } +} + +func __asm_proxy_VPUNPCKLDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPUNPCKLDQ(v[0], v[1], v[2]) + } else { + panic("instruction VPUNPCKLDQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPUNPCKLQDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPUNPCKLQDQ(v[0], v[1], v[2]) + } else { + panic("instruction VPUNPCKLQDQ takes exactly 3 operands") + } +} + +func __asm_proxy_VPUNPCKLWD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPUNPCKLWD(v[0], v[1], v[2]) + } else { + panic("instruction VPUNPCKLWD takes exactly 3 operands") + } +} + +func __asm_proxy_VPXOR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPXOR(v[0], v[1], v[2]) + } else { + panic("instruction VPXOR takes exactly 3 operands") + } +} + +func __asm_proxy_VPXORD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPXORD(v[0], v[1], v[2]) + } else { + panic("instruction VPXORD takes exactly 3 operands") + } +} + +func __asm_proxy_VPXORQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VPXORQ(v[0], v[1], v[2]) + } else { + panic("instruction VPXORQ takes exactly 3 operands") + } +} + +func __asm_proxy_VRANGEPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VRANGEPD(v[0], v[1], v[2], v[3]) + case 5 : return p.VRANGEPD(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VRANGEPD takes 4 or 5 operands") + } +} + +func __asm_proxy_VRANGEPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VRANGEPS(v[0], v[1], v[2], v[3]) + case 5 : return p.VRANGEPS(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VRANGEPS takes 4 or 5 operands") + } +} + +func __asm_proxy_VRANGESD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VRANGESD(v[0], v[1], v[2], v[3]) + case 5 : return p.VRANGESD(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VRANGESD takes 4 or 5 operands") + } +} + +func __asm_proxy_VRANGESS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VRANGESS(v[0], v[1], v[2], v[3]) + case 5 : return p.VRANGESS(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VRANGESS takes 4 or 5 operands") + } +} + +func __asm_proxy_VRCP14PD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VRCP14PD(v[0], v[1]) + } else { + panic("instruction VRCP14PD takes exactly 2 operands") + } +} + +func __asm_proxy_VRCP14PS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VRCP14PS(v[0], v[1]) + } else { + panic("instruction VRCP14PS takes exactly 2 operands") + } +} + +func __asm_proxy_VRCP14SD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VRCP14SD(v[0], v[1], v[2]) + } else { + panic("instruction VRCP14SD takes exactly 3 operands") + } +} + +func __asm_proxy_VRCP14SS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VRCP14SS(v[0], v[1], v[2]) + } else { + panic("instruction VRCP14SS takes exactly 3 operands") + } +} + +func __asm_proxy_VRCP28PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VRCP28PD(v[0], v[1]) + case 3 : return p.VRCP28PD(v[0], v[1], v[2]) + default : panic("instruction VRCP28PD takes 2 or 3 operands") + } +} + +func __asm_proxy_VRCP28PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VRCP28PS(v[0], v[1]) + case 3 : return p.VRCP28PS(v[0], v[1], v[2]) + default : panic("instruction VRCP28PS takes 2 or 3 operands") + } +} + +func __asm_proxy_VRCP28SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VRCP28SD(v[0], v[1], v[2]) + case 4 : return p.VRCP28SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VRCP28SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VRCP28SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VRCP28SS(v[0], v[1], v[2]) + case 4 : return p.VRCP28SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VRCP28SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VRCPPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VRCPPS(v[0], v[1]) + } else { + panic("instruction VRCPPS takes exactly 2 operands") + } +} + +func __asm_proxy_VRCPSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VRCPSS(v[0], v[1], v[2]) + } else { + panic("instruction VRCPSS takes exactly 3 operands") + } +} + +func __asm_proxy_VREDUCEPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VREDUCEPD(v[0], v[1], v[2]) + } else { + panic("instruction VREDUCEPD takes exactly 3 operands") + } +} + +func __asm_proxy_VREDUCEPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VREDUCEPS(v[0], v[1], v[2]) + } else { + panic("instruction VREDUCEPS takes exactly 3 operands") + } +} + +func __asm_proxy_VREDUCESD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VREDUCESD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VREDUCESD takes exactly 4 operands") + } +} + +func __asm_proxy_VREDUCESS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VREDUCESS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VREDUCESS takes exactly 4 operands") + } +} + +func __asm_proxy_VRNDSCALEPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VRNDSCALEPD(v[0], v[1], v[2]) + case 4 : return p.VRNDSCALEPD(v[0], v[1], v[2], v[3]) + default : panic("instruction VRNDSCALEPD takes 3 or 4 operands") + } +} + +func __asm_proxy_VRNDSCALEPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VRNDSCALEPS(v[0], v[1], v[2]) + case 4 : return p.VRNDSCALEPS(v[0], v[1], v[2], v[3]) + default : panic("instruction VRNDSCALEPS takes 3 or 4 operands") + } +} + +func __asm_proxy_VRNDSCALESD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VRNDSCALESD(v[0], v[1], v[2], v[3]) + case 5 : return p.VRNDSCALESD(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VRNDSCALESD takes 4 or 5 operands") + } +} + +func __asm_proxy_VRNDSCALESS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 4 : return p.VRNDSCALESS(v[0], v[1], v[2], v[3]) + case 5 : return p.VRNDSCALESS(v[0], v[1], v[2], v[3], v[4]) + default : panic("instruction VRNDSCALESS takes 4 or 5 operands") + } +} + +func __asm_proxy_VROUNDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VROUNDPD(v[0], v[1], v[2]) + } else { + panic("instruction VROUNDPD takes exactly 3 operands") + } +} + +func __asm_proxy_VROUNDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VROUNDPS(v[0], v[1], v[2]) + } else { + panic("instruction VROUNDPS takes exactly 3 operands") + } +} + +func __asm_proxy_VROUNDSD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VROUNDSD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VROUNDSD takes exactly 4 operands") + } +} + +func __asm_proxy_VROUNDSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VROUNDSS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VROUNDSS takes exactly 4 operands") + } +} + +func __asm_proxy_VRSQRT14PD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VRSQRT14PD(v[0], v[1]) + } else { + panic("instruction VRSQRT14PD takes exactly 2 operands") + } +} + +func __asm_proxy_VRSQRT14PS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VRSQRT14PS(v[0], v[1]) + } else { + panic("instruction VRSQRT14PS takes exactly 2 operands") + } +} + +func __asm_proxy_VRSQRT14SD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VRSQRT14SD(v[0], v[1], v[2]) + } else { + panic("instruction VRSQRT14SD takes exactly 3 operands") + } +} + +func __asm_proxy_VRSQRT14SS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VRSQRT14SS(v[0], v[1], v[2]) + } else { + panic("instruction VRSQRT14SS takes exactly 3 operands") + } +} + +func __asm_proxy_VRSQRT28PD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VRSQRT28PD(v[0], v[1]) + case 3 : return p.VRSQRT28PD(v[0], v[1], v[2]) + default : panic("instruction VRSQRT28PD takes 2 or 3 operands") + } +} + +func __asm_proxy_VRSQRT28PS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VRSQRT28PS(v[0], v[1]) + case 3 : return p.VRSQRT28PS(v[0], v[1], v[2]) + default : panic("instruction VRSQRT28PS takes 2 or 3 operands") + } +} + +func __asm_proxy_VRSQRT28SD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VRSQRT28SD(v[0], v[1], v[2]) + case 4 : return p.VRSQRT28SD(v[0], v[1], v[2], v[3]) + default : panic("instruction VRSQRT28SD takes 3 or 4 operands") + } +} + +func __asm_proxy_VRSQRT28SS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VRSQRT28SS(v[0], v[1], v[2]) + case 4 : return p.VRSQRT28SS(v[0], v[1], v[2], v[3]) + default : panic("instruction VRSQRT28SS takes 3 or 4 operands") + } +} + +func __asm_proxy_VRSQRTPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VRSQRTPS(v[0], v[1]) + } else { + panic("instruction VRSQRTPS takes exactly 2 operands") + } +} + +func __asm_proxy_VRSQRTSS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VRSQRTSS(v[0], v[1], v[2]) + } else { + panic("instruction VRSQRTSS takes exactly 3 operands") + } +} + +func __asm_proxy_VSCALEFPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VSCALEFPD(v[0], v[1], v[2]) + case 4 : return p.VSCALEFPD(v[0], v[1], v[2], v[3]) + default : panic("instruction VSCALEFPD takes 3 or 4 operands") + } +} + +func __asm_proxy_VSCALEFPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VSCALEFPS(v[0], v[1], v[2]) + case 4 : return p.VSCALEFPS(v[0], v[1], v[2], v[3]) + default : panic("instruction VSCALEFPS takes 3 or 4 operands") + } +} + +func __asm_proxy_VSCALEFSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VSCALEFSD(v[0], v[1], v[2]) + case 4 : return p.VSCALEFSD(v[0], v[1], v[2], v[3]) + default : panic("instruction VSCALEFSD takes 3 or 4 operands") + } +} + +func __asm_proxy_VSCALEFSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VSCALEFSS(v[0], v[1], v[2]) + case 4 : return p.VSCALEFSS(v[0], v[1], v[2], v[3]) + default : panic("instruction VSCALEFSS takes 3 or 4 operands") + } +} + +func __asm_proxy_VSCATTERDPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VSCATTERDPD(v[0], v[1]) + } else { + panic("instruction VSCATTERDPD takes exactly 2 operands") + } +} + +func __asm_proxy_VSCATTERDPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VSCATTERDPS(v[0], v[1]) + } else { + panic("instruction VSCATTERDPS takes exactly 2 operands") + } +} + +func __asm_proxy_VSCATTERPF0DPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VSCATTERPF0DPD(v[0]) + } else { + panic("instruction VSCATTERPF0DPD takes exactly 1 operand") + } +} + +func __asm_proxy_VSCATTERPF0DPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VSCATTERPF0DPS(v[0]) + } else { + panic("instruction VSCATTERPF0DPS takes exactly 1 operand") + } +} + +func __asm_proxy_VSCATTERPF0QPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VSCATTERPF0QPD(v[0]) + } else { + panic("instruction VSCATTERPF0QPD takes exactly 1 operand") + } +} + +func __asm_proxy_VSCATTERPF0QPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VSCATTERPF0QPS(v[0]) + } else { + panic("instruction VSCATTERPF0QPS takes exactly 1 operand") + } +} + +func __asm_proxy_VSCATTERPF1DPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VSCATTERPF1DPD(v[0]) + } else { + panic("instruction VSCATTERPF1DPD takes exactly 1 operand") + } +} + +func __asm_proxy_VSCATTERPF1DPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VSCATTERPF1DPS(v[0]) + } else { + panic("instruction VSCATTERPF1DPS takes exactly 1 operand") + } +} + +func __asm_proxy_VSCATTERPF1QPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VSCATTERPF1QPD(v[0]) + } else { + panic("instruction VSCATTERPF1QPD takes exactly 1 operand") + } +} + +func __asm_proxy_VSCATTERPF1QPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VSCATTERPF1QPS(v[0]) + } else { + panic("instruction VSCATTERPF1QPS takes exactly 1 operand") + } +} + +func __asm_proxy_VSCATTERQPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VSCATTERQPD(v[0], v[1]) + } else { + panic("instruction VSCATTERQPD takes exactly 2 operands") + } +} + +func __asm_proxy_VSCATTERQPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VSCATTERQPS(v[0], v[1]) + } else { + panic("instruction VSCATTERQPS takes exactly 2 operands") + } +} + +func __asm_proxy_VSHUFF32X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VSHUFF32X4(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VSHUFF32X4 takes exactly 4 operands") + } +} + +func __asm_proxy_VSHUFF64X2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VSHUFF64X2(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VSHUFF64X2 takes exactly 4 operands") + } +} + +func __asm_proxy_VSHUFI32X4__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VSHUFI32X4(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VSHUFI32X4 takes exactly 4 operands") + } +} + +func __asm_proxy_VSHUFI64X2__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VSHUFI64X2(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VSHUFI64X2 takes exactly 4 operands") + } +} + +func __asm_proxy_VSHUFPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VSHUFPD(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VSHUFPD takes exactly 4 operands") + } +} + +func __asm_proxy_VSHUFPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 4 { + return p.VSHUFPS(v[0], v[1], v[2], v[3]) + } else { + panic("instruction VSHUFPS takes exactly 4 operands") + } +} + +func __asm_proxy_VSQRTPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VSQRTPD(v[0], v[1]) + case 3 : return p.VSQRTPD(v[0], v[1], v[2]) + default : panic("instruction VSQRTPD takes 2 or 3 operands") + } +} + +func __asm_proxy_VSQRTPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VSQRTPS(v[0], v[1]) + case 3 : return p.VSQRTPS(v[0], v[1], v[2]) + default : panic("instruction VSQRTPS takes 2 or 3 operands") + } +} + +func __asm_proxy_VSQRTSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VSQRTSD(v[0], v[1], v[2]) + case 4 : return p.VSQRTSD(v[0], v[1], v[2], v[3]) + default : panic("instruction VSQRTSD takes 3 or 4 operands") + } +} + +func __asm_proxy_VSQRTSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VSQRTSS(v[0], v[1], v[2]) + case 4 : return p.VSQRTSS(v[0], v[1], v[2], v[3]) + default : panic("instruction VSQRTSS takes 3 or 4 operands") + } +} + +func __asm_proxy_VSTMXCSR__(p *Program, v ...interface{}) *Instruction { + if len(v) == 1 { + return p.VSTMXCSR(v[0]) + } else { + panic("instruction VSTMXCSR takes exactly 1 operand") + } +} + +func __asm_proxy_VSUBPD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VSUBPD(v[0], v[1], v[2]) + case 4 : return p.VSUBPD(v[0], v[1], v[2], v[3]) + default : panic("instruction VSUBPD takes 3 or 4 operands") + } +} + +func __asm_proxy_VSUBPS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VSUBPS(v[0], v[1], v[2]) + case 4 : return p.VSUBPS(v[0], v[1], v[2], v[3]) + default : panic("instruction VSUBPS takes 3 or 4 operands") + } +} + +func __asm_proxy_VSUBSD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VSUBSD(v[0], v[1], v[2]) + case 4 : return p.VSUBSD(v[0], v[1], v[2], v[3]) + default : panic("instruction VSUBSD takes 3 or 4 operands") + } +} + +func __asm_proxy_VSUBSS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 3 : return p.VSUBSS(v[0], v[1], v[2]) + case 4 : return p.VSUBSS(v[0], v[1], v[2], v[3]) + default : panic("instruction VSUBSS takes 3 or 4 operands") + } +} + +func __asm_proxy_VTESTPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VTESTPD(v[0], v[1]) + } else { + panic("instruction VTESTPD takes exactly 2 operands") + } +} + +func __asm_proxy_VTESTPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.VTESTPS(v[0], v[1]) + } else { + panic("instruction VTESTPS takes exactly 2 operands") + } +} + +func __asm_proxy_VUCOMISD__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VUCOMISD(v[0], v[1]) + case 3 : return p.VUCOMISD(v[0], v[1], v[2]) + default : panic("instruction VUCOMISD takes 2 or 3 operands") + } +} + +func __asm_proxy_VUCOMISS__(p *Program, v ...interface{}) *Instruction { + switch len(v) { + case 2 : return p.VUCOMISS(v[0], v[1]) + case 3 : return p.VUCOMISS(v[0], v[1], v[2]) + default : panic("instruction VUCOMISS takes 2 or 3 operands") + } +} + +func __asm_proxy_VUNPCKHPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VUNPCKHPD(v[0], v[1], v[2]) + } else { + panic("instruction VUNPCKHPD takes exactly 3 operands") + } +} + +func __asm_proxy_VUNPCKHPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VUNPCKHPS(v[0], v[1], v[2]) + } else { + panic("instruction VUNPCKHPS takes exactly 3 operands") + } +} + +func __asm_proxy_VUNPCKLPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VUNPCKLPD(v[0], v[1], v[2]) + } else { + panic("instruction VUNPCKLPD takes exactly 3 operands") + } +} + +func __asm_proxy_VUNPCKLPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VUNPCKLPS(v[0], v[1], v[2]) + } else { + panic("instruction VUNPCKLPS takes exactly 3 operands") + } +} + +func __asm_proxy_VXORPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VXORPD(v[0], v[1], v[2]) + } else { + panic("instruction VXORPD takes exactly 3 operands") + } +} + +func __asm_proxy_VXORPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 3 { + return p.VXORPS(v[0], v[1], v[2]) + } else { + panic("instruction VXORPS takes exactly 3 operands") + } +} + +func __asm_proxy_VZEROALL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.VZEROALL() + } else { + panic("instruction VZEROALL takes no operands") + } +} + +func __asm_proxy_VZEROUPPER__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.VZEROUPPER() + } else { + panic("instruction VZEROUPPER takes no operands") + } +} + +func __asm_proxy_XADDB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XADDB(v[0], v[1]) + } else { + panic("instruction XADDB takes exactly 2 operands") + } +} + +func __asm_proxy_XADDL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XADDL(v[0], v[1]) + } else { + panic("instruction XADDL takes exactly 2 operands") + } +} + +func __asm_proxy_XADDQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XADDQ(v[0], v[1]) + } else { + panic("instruction XADDQ takes exactly 2 operands") + } +} + +func __asm_proxy_XADDW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XADDW(v[0], v[1]) + } else { + panic("instruction XADDW takes exactly 2 operands") + } +} + +func __asm_proxy_XCHGB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XCHGB(v[0], v[1]) + } else { + panic("instruction XCHGB takes exactly 2 operands") + } +} + +func __asm_proxy_XCHGL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XCHGL(v[0], v[1]) + } else { + panic("instruction XCHGL takes exactly 2 operands") + } +} + +func __asm_proxy_XCHGQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XCHGQ(v[0], v[1]) + } else { + panic("instruction XCHGQ takes exactly 2 operands") + } +} + +func __asm_proxy_XCHGW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XCHGW(v[0], v[1]) + } else { + panic("instruction XCHGW takes exactly 2 operands") + } +} + +func __asm_proxy_XGETBV__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.XGETBV() + } else { + panic("instruction XGETBV takes no operands") + } +} + +func __asm_proxy_XLATB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 0 { + return p.XLATB() + } else { + panic("instruction XLATB takes no operands") + } +} + +func __asm_proxy_XORB__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XORB(v[0], v[1]) + } else { + panic("instruction XORB takes exactly 2 operands") + } +} + +func __asm_proxy_XORL__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XORL(v[0], v[1]) + } else { + panic("instruction XORL takes exactly 2 operands") + } +} + +func __asm_proxy_XORPD__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XORPD(v[0], v[1]) + } else { + panic("instruction XORPD takes exactly 2 operands") + } +} + +func __asm_proxy_XORPS__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XORPS(v[0], v[1]) + } else { + panic("instruction XORPS takes exactly 2 operands") + } +} + +func __asm_proxy_XORQ__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XORQ(v[0], v[1]) + } else { + panic("instruction XORQ takes exactly 2 operands") + } +} + +func __asm_proxy_XORW__(p *Program, v ...interface{}) *Instruction { + if len(v) == 2 { + return p.XORW(v[0], v[1]) + } else { + panic("instruction XORW takes exactly 2 operands") + } +} diff --git a/vendor/github.com/chenzhuoyu/iasm/x86_64/operands.go b/vendor/github.com/chenzhuoyu/iasm/x86_64/operands.go new file mode 100644 index 0000000000..9660902259 --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/x86_64/operands.go @@ -0,0 +1,510 @@ +package x86_64 + +import ( + `errors` + `fmt` + `math` + `reflect` + `strconv` + `strings` + `sync/atomic` +) + +// RelativeOffset represents an RIP-relative offset. +type RelativeOffset int32 + +// String implements the fmt.Stringer interface. +func (self RelativeOffset) String() string { + if self == 0 { + return "(%rip)" + } else { + return fmt.Sprintf("%d(%%rip)", self) + } +} + +// RoundingControl represents a floating-point rounding option. +type RoundingControl uint8 + +const ( + // RN_SAE represents "Round Nearest", which is the default rounding option. + RN_SAE RoundingControl = iota + + // RD_SAE represents "Round Down". + RD_SAE + + // RU_SAE represents "Round Up". + RU_SAE + + // RZ_SAE represents "Round towards Zero". + RZ_SAE +) + +var _RC_NAMES = map[RoundingControl]string { + RN_SAE: "rn-sae", + RD_SAE: "rd-sae", + RU_SAE: "ru-sae", + RZ_SAE: "rz-sae", +} + +func (self RoundingControl) String() string { + if v, ok := _RC_NAMES[self]; ok { + return v + } else { + panic("invalid RoundingControl value") + } +} + +// ExceptionControl represents the "Suppress All Exceptions" flag. +type ExceptionControl uint8 + +const ( + // SAE represents the flag "Suppress All Exceptions" for floating point operations. + SAE ExceptionControl = iota +) + +func (ExceptionControl) String() string { + return "sae" +} + +// AddressType indicates which kind of value that an Addressable object contains. +type AddressType uint + +const ( + // None indicates the Addressable does not contain any addressable value. + None AddressType = iota + + // Memory indicates the Addressable contains a memory address. + Memory + + // Offset indicates the Addressable contains an RIP-relative offset. + Offset + + // Reference indicates the Addressable contains a label reference. + Reference +) + +// Disposable is a type of object that can be Free'd manually. +type Disposable interface { + Free() +} + +// Label represents a location within the program. +type Label struct { + refs int64 + Name string + Dest *Instruction +} + +func (self *Label) offset(p uintptr, n int) RelativeOffset { + if self.Dest == nil { + panic("unresolved label: " + self.Name) + } else { + return RelativeOffset(self.Dest.pc - p - uintptr(n)) + } +} + +// Free decreases the reference count of a Label, if the +// refcount drops to 0, the Label will be recycled. +func (self *Label) Free() { + if atomic.AddInt64(&self.refs, -1) == 0 { + freeLabel(self) + } +} + +// String implements the fmt.Stringer interface. +func (self *Label) String() string { + if self.Dest == nil { + return fmt.Sprintf("%s(%%rip)", self.Name) + } else { + return fmt.Sprintf("%s(%%rip)@%#x", self.Name, self.Dest.pc) + } +} + +// Retain increases the reference count of a Label. +func (self *Label) Retain() *Label { + atomic.AddInt64(&self.refs, 1) + return self +} + +// Evaluate implements the interface expr.Term. +func (self *Label) Evaluate() (int64, error) { + if self.Dest != nil { + return int64(self.Dest.pc), nil + } else { + return 0, errors.New("unresolved label: " + self.Name) + } +} + +// Addressable is a union to represent an addressable operand. +type Addressable struct { + Type AddressType + Memory MemoryAddress + Offset RelativeOffset + Reference *Label +} + +// String implements the fmt.Stringer interface. +func (self *Addressable) String() string { + switch self.Type { + case None : return "(not addressable)" + case Memory : return self.Memory.String() + case Offset : return self.Offset.String() + case Reference : return self.Reference.String() + default : return "(invalid addressable)" + } +} + +// MemoryOperand represents a memory operand for an instruction. +type MemoryOperand struct { + refs int64 + Size int + Addr Addressable + Mask RegisterMask + Masked bool + Broadcast uint8 +} + +const ( + _Sizes = 0b10000000100010111 // bit-mask for valid sizes (0, 1, 2, 4, 8, 16) +) + +func (self *MemoryOperand) isVMX(evex bool) bool { + return self.Addr.Type == Memory && self.Addr.Memory.isVMX(evex) +} + +func (self *MemoryOperand) isVMY(evex bool) bool { + return self.Addr.Type == Memory && self.Addr.Memory.isVMY(evex) +} + +func (self *MemoryOperand) isVMZ() bool { + return self.Addr.Type == Memory && self.Addr.Memory.isVMZ() +} + +func (self *MemoryOperand) isMem() bool { + if (_Sizes & (1 << self.Broadcast)) == 0 { + return false + } else if self.Addr.Type == Memory { + return self.Addr.Memory.isMem() + } else if self.Addr.Type == Offset { + return true + } else if self.Addr.Type == Reference { + return true + } else { + return false + } +} + +func (self *MemoryOperand) isSize(n int) bool { + return self.Size == 0 || self.Size == n +} + +func (self *MemoryOperand) isBroadcast(n int, b uint8) bool { + return self.Size == n && self.Broadcast == b +} + +func (self *MemoryOperand) formatMask() string { + if !self.Masked { + return "" + } else { + return self.Mask.String() + } +} + +func (self *MemoryOperand) formatBroadcast() string { + if self.Broadcast == 0 { + return "" + } else { + return fmt.Sprintf("{1to%d}", self.Broadcast) + } +} + +func (self *MemoryOperand) ensureAddrValid() { + switch self.Addr.Type { + case None : break + case Memory : self.Addr.Memory.EnsureValid() + case Offset : break + case Reference : break + default : panic("invalid address type") + } +} + +func (self *MemoryOperand) ensureSizeValid() { + if (_Sizes & (1 << self.Size)) == 0 { + panic("invalid memory operand size") + } +} + +func (self *MemoryOperand) ensureBroadcastValid() { + if (_Sizes & (1 << self.Broadcast)) == 0 { + panic("invalid memory operand broadcast") + } +} + +// Free decreases the reference count of a MemoryOperand, if the +// refcount drops to 0, the Label will be recycled. +func (self *MemoryOperand) Free() { + if atomic.AddInt64(&self.refs, -1) == 0 { + freeMemoryOperand(self) + } +} + +// String implements the fmt.Stringer interface. +func (self *MemoryOperand) String() string { + return self.Addr.String() + self.formatMask() + self.formatBroadcast() +} + +// Retain increases the reference count of a MemoryOperand. +func (self *MemoryOperand) Retain() *MemoryOperand { + atomic.AddInt64(&self.refs, 1) + return self +} + +// EnsureValid checks if the memory operand is valid, if not, it panics. +func (self *MemoryOperand) EnsureValid() { + self.ensureAddrValid() + self.ensureSizeValid() + self.ensureBroadcastValid() +} + +// MemoryAddress represents a memory address. +type MemoryAddress struct { + Base Register + Index Register + Scale uint8 + Displacement int32 +} + +const ( + _Scales = 0b100010111 // bit-mask for valid scales (0, 1, 2, 4, 8) +) + +func (self *MemoryAddress) isVMX(evex bool) bool { + return self.isMemBase() && (self.Index == nil || isXMM(self.Index) || (evex && isEVEXXMM(self.Index))) +} + +func (self *MemoryAddress) isVMY(evex bool) bool { + return self.isMemBase() && (self.Index == nil || isYMM(self.Index) || (evex && isEVEXYMM(self.Index))) +} + +func (self *MemoryAddress) isVMZ() bool { + return self.isMemBase() && (self.Index == nil || isZMM(self.Index)) +} + +func (self *MemoryAddress) isMem() bool { + return self.isMemBase() && (self.Index == nil || isReg64(self.Index)) +} + +func (self *MemoryAddress) isMemBase() bool { + return (self.Base == nil || isReg64(self.Base)) && // `Base` must be 64-bit if present + (self.Scale == 0) == (self.Index == nil) && // `Scale` and `Index` depends on each other + (_Scales & (1 << self.Scale)) != 0 // `Scale` can only be 0, 1, 2, 4 or 8 +} + +// String implements the fmt.Stringer interface. +func (self *MemoryAddress) String() string { + var dp int + var sb strings.Builder + + /* the displacement part */ + if dp = int(self.Displacement); dp != 0 { + sb.WriteString(strconv.Itoa(dp)) + } + + /* the base register */ + if sb.WriteByte('('); self.Base != nil { + sb.WriteByte('%') + sb.WriteString(self.Base.String()) + } + + /* index is optional */ + if self.Index != nil { + sb.WriteString(",%") + sb.WriteString(self.Index.String()) + + /* scale is also optional */ + if self.Scale >= 2 { + sb.WriteByte(',') + sb.WriteString(strconv.Itoa(int(self.Scale))) + } + } + + /* close the bracket */ + sb.WriteByte(')') + return sb.String() +} + +// EnsureValid checks if the memory address is valid, if not, it panics. +func (self *MemoryAddress) EnsureValid() { + if !self.isMemBase() || (self.Index != nil && !isIndexable(self.Index)) { + panic("not a valid memory address") + } +} + +// Ref constructs a memory reference to a label. +func Ref(ref *Label) (v *MemoryOperand) { + v = CreateMemoryOperand() + v.Addr.Type = Reference + v.Addr.Reference = ref + return +} + +// Abs construct a simple memory address that represents absolute addressing. +func Abs(disp int32) *MemoryOperand { + return Sib(nil, nil, 0, disp) +} + +// Ptr constructs a simple memory operand with base and displacement. +func Ptr(base Register, disp int32) *MemoryOperand { + return Sib(base, nil, 0, disp) +} + +// Sib constructs a simple memory operand that represents a complete memory address. +func Sib(base Register, index Register, scale uint8, disp int32) (v *MemoryOperand) { + v = CreateMemoryOperand() + v.Addr.Type = Memory + v.Addr.Memory.Base = base + v.Addr.Memory.Index = index + v.Addr.Memory.Scale = scale + v.Addr.Memory.Displacement = disp + v.EnsureValid() + return +} + +/** Operand Matching Helpers **/ + +const _IntMask = + (1 << reflect.Int ) | + (1 << reflect.Int8 ) | + (1 << reflect.Int16 ) | + (1 << reflect.Int32 ) | + (1 << reflect.Int64 ) | + (1 << reflect.Uint ) | + (1 << reflect.Uint8 ) | + (1 << reflect.Uint16 ) | + (1 << reflect.Uint32 ) | + (1 << reflect.Uint64 ) | + (1 << reflect.Uintptr) + +func isInt(k reflect.Kind) bool { + return (_IntMask & (1 << k)) != 0 +} + +func asInt64(v interface{}) (int64, bool) { + if isSpecial(v) { + return 0, false + } else if x := efaceOf(v); isInt(x.kind()) { + return x.toInt64(), true + } else { + return 0, false + } +} + +func inRange(v interface{}, low int64, high int64) bool { + x, ok := asInt64(v) + return ok && x >= low && x <= high +} + +func isSpecial(v interface{}) bool { + switch v.(type) { + case Register8 : return true + case Register16 : return true + case Register32 : return true + case Register64 : return true + case KRegister : return true + case MMRegister : return true + case XMMRegister : return true + case YMMRegister : return true + case ZMMRegister : return true + case RelativeOffset : return true + case RoundingControl : return true + case ExceptionControl : return true + default : return false + } +} + +func isIndexable(v interface{}) bool { + return isZMM(v) || isReg64(v) || isEVEXXMM(v) || isEVEXYMM(v) +} + +func isImm4 (v interface{}) bool { return inRange(v, 0, 15) } +func isImm8 (v interface{}) bool { return inRange(v, math.MinInt8, math.MaxUint8) } +func isImm16 (v interface{}) bool { return inRange(v, math.MinInt16, math.MaxUint16) } +func isImm32 (v interface{}) bool { return inRange(v, math.MinInt32, math.MaxUint32) } +func isImm64 (v interface{}) bool { _, r := asInt64(v) ; return r } +func isConst1 (v interface{}) bool { x, r := asInt64(v) ; return r && x == 1 } +func isConst3 (v interface{}) bool { x, r := asInt64(v) ; return r && x == 3 } +func isRel8 (v interface{}) bool { x, r := v.(RelativeOffset) ; return r && x >= math.MinInt8 && x <= math.MaxInt8 } +func isRel32 (v interface{}) bool { _, r := v.(RelativeOffset) ; return r } +func isLabel (v interface{}) bool { _, r := v.(*Label) ; return r } +func isReg8 (v interface{}) bool { _, r := v.(Register8) ; return r } +func isReg8REX (v interface{}) bool { x, r := v.(Register8) ; return r && (x & 0x80) == 0 && x >= SPL } +func isReg16 (v interface{}) bool { _, r := v.(Register16) ; return r } +func isReg32 (v interface{}) bool { _, r := v.(Register32) ; return r } +func isReg64 (v interface{}) bool { _, r := v.(Register64) ; return r } +func isMM (v interface{}) bool { _, r := v.(MMRegister) ; return r } +func isXMM (v interface{}) bool { x, r := v.(XMMRegister) ; return r && x <= XMM15 } +func isEVEXXMM (v interface{}) bool { _, r := v.(XMMRegister) ; return r } +func isXMMk (v interface{}) bool { x, r := v.(MaskedRegister) ; return isXMM(v) || (r && isXMM(x.Reg) && !x.Mask.Z) } +func isXMMkz (v interface{}) bool { x, r := v.(MaskedRegister) ; return isXMM(v) || (r && isXMM(x.Reg)) } +func isYMM (v interface{}) bool { x, r := v.(YMMRegister) ; return r && x <= YMM15 } +func isEVEXYMM (v interface{}) bool { _, r := v.(YMMRegister) ; return r } +func isYMMk (v interface{}) bool { x, r := v.(MaskedRegister) ; return isYMM(v) || (r && isYMM(x.Reg) && !x.Mask.Z) } +func isYMMkz (v interface{}) bool { x, r := v.(MaskedRegister) ; return isYMM(v) || (r && isYMM(x.Reg)) } +func isZMM (v interface{}) bool { _, r := v.(ZMMRegister) ; return r } +func isZMMk (v interface{}) bool { x, r := v.(MaskedRegister) ; return isZMM(v) || (r && isZMM(x.Reg) && !x.Mask.Z) } +func isZMMkz (v interface{}) bool { x, r := v.(MaskedRegister) ; return isZMM(v) || (r && isZMM(x.Reg)) } +func isK (v interface{}) bool { _, r := v.(KRegister) ; return r } +func isKk (v interface{}) bool { x, r := v.(MaskedRegister) ; return isK(v) || (r && isK(x.Reg) && !x.Mask.Z) } +func isM (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && x.isMem() && x.Broadcast == 0 && !x.Masked } +func isMk (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && x.isMem() && x.Broadcast == 0 && !(x.Masked && x.Mask.Z) } +func isMkz (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && x.isMem() && x.Broadcast == 0 } +func isM8 (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isM(v) && x.isSize(1) } +func isM16 (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isM(v) && x.isSize(2) } +func isM16kz (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isMkz(v) && x.isSize(2) } +func isM32 (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isM(v) && x.isSize(4) } +func isM32k (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isMk(v) && x.isSize(4) } +func isM32kz (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isMkz(v) && x.isSize(4) } +func isM64 (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isM(v) && x.isSize(8) } +func isM64k (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isMk(v) && x.isSize(8) } +func isM64kz (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isMkz(v) && x.isSize(8) } +func isM128 (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isM(v) && x.isSize(16) } +func isM128kz (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isMkz(v) && x.isSize(16) } +func isM256 (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isM(v) && x.isSize(32) } +func isM256kz (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isMkz(v) && x.isSize(32) } +func isM512 (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isM(v) && x.isSize(64) } +func isM512kz (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && isMkz(v) && x.isSize(64) } +func isM64M32bcst (v interface{}) bool { x, r := v.(*MemoryOperand) ; return isM64(v) || (r && x.isBroadcast(4, 2)) } +func isM128M32bcst (v interface{}) bool { x, r := v.(*MemoryOperand) ; return isM128(v) || (r && x.isBroadcast(4, 4)) } +func isM256M32bcst (v interface{}) bool { x, r := v.(*MemoryOperand) ; return isM256(v) || (r && x.isBroadcast(4, 8)) } +func isM512M32bcst (v interface{}) bool { x, r := v.(*MemoryOperand) ; return isM512(v) || (r && x.isBroadcast(4, 16)) } +func isM128M64bcst (v interface{}) bool { x, r := v.(*MemoryOperand) ; return isM128(v) || (r && x.isBroadcast(8, 2)) } +func isM256M64bcst (v interface{}) bool { x, r := v.(*MemoryOperand) ; return isM256(v) || (r && x.isBroadcast(8, 4)) } +func isM512M64bcst (v interface{}) bool { x, r := v.(*MemoryOperand) ; return isM512(v) || (r && x.isBroadcast(8, 8)) } +func isVMX (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && x.isVMX(false) && !x.Masked } +func isEVEXVMX (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && x.isVMX(true) && !x.Masked } +func isVMXk (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && x.isVMX(true) } +func isVMY (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && x.isVMY(false) && !x.Masked } +func isEVEXVMY (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && x.isVMY(true) && !x.Masked } +func isVMYk (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && x.isVMY(true) } +func isVMZ (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && x.isVMZ() && !x.Masked } +func isVMZk (v interface{}) bool { x, r := v.(*MemoryOperand) ; return r && x.isVMZ() } +func isSAE (v interface{}) bool { _, r := v.(ExceptionControl) ; return r } +func isER (v interface{}) bool { _, r := v.(RoundingControl) ; return r } + +func isImmExt(v interface{}, ext int, min int64, max int64) bool { + if x, ok := asInt64(v); !ok { + return false + } else if m := int64(1) << (8 * ext); x < m && x >= m + min { + return true + } else { + return x <= max && x >= min + } +} + +func isImm8Ext(v interface{}, ext int) bool { + return isImmExt(v, ext, math.MinInt8, math.MaxInt8) +} + +func isImm32Ext(v interface{}, ext int) bool { + return isImmExt(v, ext, math.MinInt32, math.MaxInt32) +} diff --git a/vendor/github.com/chenzhuoyu/iasm/x86_64/pools.go b/vendor/github.com/chenzhuoyu/iasm/x86_64/pools.go new file mode 100644 index 0000000000..06f85ac262 --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/x86_64/pools.go @@ -0,0 +1,117 @@ +package x86_64 + +import ( + `sync` +) + +var ( + labelPool sync.Pool + programPool sync.Pool + instructionPool sync.Pool + memoryOperandPool sync.Pool +) + +func freeLabel(v *Label) { + labelPool.Put(v) +} + +func clearLabel(p *Label) *Label { + *p = Label{} + return p +} + +// CreateLabel creates a new Label, it may allocate a new one or grab one from a pool. +func CreateLabel(name string) *Label { + var p *Label + var v interface{} + + /* attempt to grab from the pool */ + if v = labelPool.Get(); v == nil { + p = new(Label) + } else { + p = clearLabel(v.(*Label)) + } + + /* initialize the label */ + p.refs = 1 + p.Name = name + return p +} + +func newProgram(arch *Arch) *Program { + var p *Program + var v interface{} + + /* attempt to grab from the pool */ + if v = programPool.Get(); v == nil { + p = new(Program) + } else { + p = clearProgram(v.(*Program)) + } + + /* initialize the program */ + p.arch = arch + return p +} + +func freeProgram(p *Program) { + programPool.Put(p) +} + +func clearProgram(p *Program) *Program { + *p = Program{} + return p +} + +func newInstruction(name string, argc int, argv Operands) *Instruction { + var v interface{} + var p *Instruction + + /* attempt to grab from the pool */ + if v = instructionPool.Get(); v == nil { + p = new(Instruction) + } else { + p = clearInstruction(v.(*Instruction)) + } + + /* initialize the instruction */ + p.name = name + p.argc = argc + p.argv = argv + return p +} + +func freeInstruction(v *Instruction) { + instructionPool.Put(v) +} + +func clearInstruction(p *Instruction) *Instruction { + *p = Instruction { prefix: p.prefix[:0] } + return p +} + +func freeMemoryOperand(m *MemoryOperand) { + memoryOperandPool.Put(m) +} + +func clearMemoryOperand(m *MemoryOperand) *MemoryOperand { + *m = MemoryOperand{} + return m +} + +// CreateMemoryOperand creates a new MemoryOperand, it may allocate a new one or grab one from a pool. +func CreateMemoryOperand() *MemoryOperand { + var v interface{} + var p *MemoryOperand + + /* attempt to grab from the pool */ + if v = memoryOperandPool.Get(); v == nil { + p = new(MemoryOperand) + } else { + p = clearMemoryOperand(v.(*MemoryOperand)) + } + + /* initialize the memory operand */ + p.refs = 1 + return p +} diff --git a/vendor/github.com/chenzhuoyu/iasm/x86_64/program.go b/vendor/github.com/chenzhuoyu/iasm/x86_64/program.go new file mode 100644 index 0000000000..9f80618eff --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/x86_64/program.go @@ -0,0 +1,542 @@ +package x86_64 + +import ( + `fmt` + `math` + `math/bits` + + `github.com/chenzhuoyu/iasm/expr` +) + +type ( + _PseudoType int + _InstructionEncoder func(*Program, ...interface{}) *Instruction +) + +const ( + _PseudoNop _PseudoType = iota + 1 + _PseudoByte + _PseudoWord + _PseudoLong + _PseudoQuad + _PseudoData + _PseudoAlign +) + +func (self _PseudoType) String() string { + switch self { + case _PseudoNop : return ".nop" + case _PseudoByte : return ".byte" + case _PseudoWord : return ".word" + case _PseudoLong : return ".long" + case _PseudoQuad : return ".quad" + case _PseudoData : return ".data" + case _PseudoAlign : return ".align" + default : panic("unreachable") + } +} + +type _Pseudo struct { + kind _PseudoType + data []byte + uint uint64 + expr *expr.Expr +} + +func (self *_Pseudo) free() { + if self.expr != nil { + self.expr.Free() + } +} + +func (self *_Pseudo) encode(m *[]byte, pc uintptr) int { + switch self.kind { + case _PseudoNop : return 0 + case _PseudoByte : self.encodeByte(m) ; return 1 + case _PseudoWord : self.encodeWord(m) ; return 2 + case _PseudoLong : self.encodeLong(m) ; return 4 + case _PseudoQuad : self.encodeQuad(m) ; return 8 + case _PseudoData : self.encodeData(m) ; return len(self.data) + case _PseudoAlign : self.encodeAlign(m, pc) ; return self.alignSize(pc) + default : panic("invalid pseudo instruction") + } +} + +func (self *_Pseudo) evalExpr(low int64, high int64) int64 { + if v, err := self.expr.Evaluate(); err != nil { + panic(err) + } else if v < low || v > high { + panic(fmt.Sprintf("expression out of range [%d, %d]: %d", low, high, v)) + } else { + return v + } +} + +func (self *_Pseudo) alignSize(pc uintptr) int { + if !ispow2(self.uint) { + panic(fmt.Sprintf("aligment should be a power of 2, not %d", self.uint)) + } else { + return align(int(pc), bits.TrailingZeros64(self.uint)) - int(pc) + } +} + +func (self *_Pseudo) encodeData(m *[]byte) { + if m != nil { + *m = append(*m, self.data...) + } +} + +func (self *_Pseudo) encodeByte(m *[]byte) { + if m != nil { + append8(m, byte(self.evalExpr(math.MinInt8, math.MaxUint8))) + } +} + +func (self *_Pseudo) encodeWord(m *[]byte) { + if m != nil { + append16(m, uint16(self.evalExpr(math.MinInt16, math.MaxUint16))) + } +} + +func (self *_Pseudo) encodeLong(m *[]byte) { + if m != nil { + append32(m, uint32(self.evalExpr(math.MinInt32, math.MaxUint32))) + } +} + +func (self *_Pseudo) encodeQuad(m *[]byte) { + if m != nil { + if v, err := self.expr.Evaluate(); err != nil { + panic(err) + } else { + append64(m, uint64(v)) + } + } +} + +func (self *_Pseudo) encodeAlign(m *[]byte, pc uintptr) { + if m != nil { + if self.expr == nil { + expandmm(m, self.alignSize(pc), 0) + } else { + expandmm(m, self.alignSize(pc), byte(self.evalExpr(math.MinInt8, math.MaxUint8))) + } + } +} + +// Operands represents a sequence of operand required by an instruction. +type Operands [_N_args]interface{} + +// InstructionDomain represents the domain of an instruction. +type InstructionDomain uint8 + +const ( + DomainGeneric InstructionDomain = iota + DomainMMXSSE + DomainAVX + DomainFMA + DomainCrypto + DomainMask + DomainAMDSpecific + DomainMisc + DomainPseudo +) + +type ( + _BranchType uint8 +) + +const ( + _B_none _BranchType = iota + _B_conditional + _B_unconditional +) + +// Instruction represents an unencoded instruction. +type Instruction struct { + next *Instruction + pc uintptr + nb int + len int + argc int + name string + argv Operands + forms [_N_forms]_Encoding + pseudo _Pseudo + branch _BranchType + domain InstructionDomain + prefix []byte +} + +func (self *Instruction) add(flags int, encoder func(m *_Encoding, v []interface{})) { + self.forms[self.len].flags = flags + self.forms[self.len].encoder = encoder + self.len++ +} + +func (self *Instruction) free() { + self.clear() + self.pseudo.free() + freeInstruction(self) +} + +func (self *Instruction) clear() { + for i := 0; i < self.argc; i++ { + if v, ok := self.argv[i].(Disposable); ok { + v.Free() + } + } +} + +func (self *Instruction) check(e *_Encoding) bool { + if (e.flags & _F_rel1) != 0 { + return isRel8(self.argv[0]) + } else if (e.flags & _F_rel4) != 0 { + return isRel32(self.argv[0]) || isLabel(self.argv[0]) + } else { + return true + } +} + +func (self *Instruction) encode(m *[]byte) int { + n := math.MaxInt64 + p := (*_Encoding)(nil) + + /* encode prefixes if any */ + if self.nb = len(self.prefix); m != nil { + *m = append(*m, self.prefix...) + } + + /* check for pseudo-instructions */ + if self.pseudo.kind != 0 { + self.nb += self.pseudo.encode(m, self.pc) + return self.nb + } + + /* find the shortest encoding */ + for i := 0; i < self.len; i++ { + if e := &self.forms[i]; self.check(e) { + if v := e.encode(self.argv[:self.argc]); v < n { + n = v + p = e + } + } + } + + /* add to buffer if needed */ + if m != nil { + *m = append(*m, p.bytes[:n]...) + } + + /* update the instruction length */ + self.nb += n + return self.nb +} + +/** Instruction Prefixes **/ + +const ( + _P_cs = 0x2e + _P_ds = 0x3e + _P_es = 0x26 + _P_fs = 0x64 + _P_gs = 0x65 + _P_ss = 0x36 + _P_lock = 0xf0 +) + +// CS overrides the memory operation of this instruction to CS. +func (self *Instruction) CS() *Instruction { + self.prefix = append(self.prefix, _P_cs) + return self +} + +// DS overrides the memory operation of this instruction to DS, +// this is the default section for most instructions if not specified. +func (self *Instruction) DS() *Instruction { + self.prefix = append(self.prefix, _P_ds) + return self +} + +// ES overrides the memory operation of this instruction to ES. +func (self *Instruction) ES() *Instruction { + self.prefix = append(self.prefix, _P_es) + return self +} + +// FS overrides the memory operation of this instruction to FS. +func (self *Instruction) FS() *Instruction { + self.prefix = append(self.prefix, _P_fs) + return self +} + +// GS overrides the memory operation of this instruction to GS. +func (self *Instruction) GS() *Instruction { + self.prefix = append(self.prefix, _P_gs) + return self +} + +// SS overrides the memory operation of this instruction to SS. +func (self *Instruction) SS() *Instruction { + self.prefix = append(self.prefix, _P_ss) + return self +} + +// LOCK causes the processor's LOCK# signal to be asserted during execution of +// the accompanying instruction (turns the instruction into an atomic instruction). +// In a multiprocessor environment, the LOCK# signal insures that the processor +// has exclusive use of any shared memory while the signal is asserted. +func (self *Instruction) LOCK() *Instruction { + self.prefix = append(self.prefix, _P_lock) + return self +} + +/** Basic Instruction Properties **/ + +// Name returns the instruction name. +func (self *Instruction) Name() string { + return self.name +} + +// Domain returns the domain of this instruction. +func (self *Instruction) Domain() InstructionDomain { + return self.domain +} + +// Operands returns the operands of this instruction. +func (self *Instruction) Operands() []interface{} { + return self.argv[:self.argc] +} + +// Program represents a sequence of instructions. +type Program struct { + arch *Arch + head *Instruction + tail *Instruction +} + +const ( + _N_near = 2 // near-branch (-128 ~ +127) takes 2 bytes to encode + _N_far_cond = 6 // conditional far-branch takes 6 bytes to encode + _N_far_uncond = 5 // unconditional far-branch takes 5 bytes to encode +) + +func (self *Program) clear() { + for p, q := self.head, self.head; p != nil; p = q { + q = p.next + p.free() + } +} + +func (self *Program) alloc(name string, argc int, argv Operands) *Instruction { + p := self.tail + q := newInstruction(name, argc, argv) + + /* attach to tail if any */ + if p != nil { + p.next = q + } else { + self.head = q + } + + /* set the new tail */ + self.tail = q + return q +} + +func (self *Program) pseudo(kind _PseudoType) (p *Instruction) { + p = self.alloc(kind.String(), 0, Operands{}) + p.domain = DomainPseudo + p.pseudo.kind = kind + return +} + +func (self *Program) require(isa ISA) { + if !self.arch.HasISA(isa) { + panic("ISA '" + isa.String() + "' was not enabled") + } +} + +func (self *Program) branchSize(p *Instruction) int { + switch p.branch { + case _B_none : panic("p is not a branch") + case _B_conditional : return _N_far_cond + case _B_unconditional : return _N_far_uncond + default : panic("invalid instruction") + } +} + +/** Pseudo-Instructions **/ + +// Byte is a pseudo-instruction to add raw byte to the assembled code. +func (self *Program) Byte(v *expr.Expr) (p *Instruction) { + p = self.pseudo(_PseudoByte) + p.pseudo.expr = v + return +} + +// Word is a pseudo-instruction to add raw uint16 as little-endian to the assembled code. +func (self *Program) Word(v *expr.Expr) (p *Instruction) { + p = self.pseudo(_PseudoWord) + p.pseudo.expr = v + return +} + +// Long is a pseudo-instruction to add raw uint32 as little-endian to the assembled code. +func (self *Program) Long(v *expr.Expr) (p *Instruction) { + p = self.pseudo(_PseudoLong) + p.pseudo.expr = v + return +} + +// Quad is a pseudo-instruction to add raw uint64 as little-endian to the assembled code. +func (self *Program) Quad(v *expr.Expr) (p *Instruction) { + p = self.pseudo(_PseudoQuad) + p.pseudo.expr = v + return +} + +// Data is a pseudo-instruction to add raw bytes to the assembled code. +func (self *Program) Data(v []byte) (p *Instruction) { + p = self.pseudo(_PseudoData) + p.pseudo.data = v + return +} + +// Align is a pseudo-instruction to ensure the PC is aligned to a certain value. +func (self *Program) Align(align uint64, padding *expr.Expr) (p *Instruction) { + p = self.pseudo(_PseudoAlign) + p.pseudo.uint = align + p.pseudo.expr = padding + return +} + +/** Program Assembler **/ + +// Free returns the Program object into pool. +// Any operation performed after Free is undefined behavior. +// +// NOTE: This also frees all the instructions, labels, memory +// operands and expressions associated with this program. +// +func (self *Program) Free() { + self.clear() + freeProgram(self) +} + +// Link pins a label at the current position. +func (self *Program) Link(p *Label) { + if p.Dest != nil { + panic("lable was alreay linked") + } else { + p.Dest = self.pseudo(_PseudoNop) + } +} + +// Assemble assembles and links the entire program into machine code. +func (self *Program) Assemble(pc uintptr) (ret []byte) { + orig := pc + next := true + offs := uintptr(0) + + /* Pass 0: PC-precompute, assume all labeled branches are far-branches. */ + for p := self.head; p != nil; p = p.next { + if p.pc = pc; !isLabel(p.argv[0]) || p.branch == _B_none { + pc += uintptr(p.encode(nil)) + } else { + pc += uintptr(self.branchSize(p)) + } + } + + /* allocate space for the machine code */ + nb := int(pc - orig) + ret = make([]byte, 0, nb) + + /* Pass 1: adjust all the jumps */ + for next { + next = false + offs = uintptr(0) + + /* scan all the branches */ + for p := self.head; p != nil; p = p.next { + var ok bool + var lb *Label + + /* re-calculate the alignment here */ + if nb = p.nb; p.pseudo.kind == _PseudoAlign { + p.pc -= offs + offs += uintptr(nb - p.encode(nil)) + continue + } + + /* adjust the program counter */ + p.pc -= offs + lb, ok = p.argv[0].(*Label) + + /* only care about labeled far-branches */ + if !ok || p.nb == _N_near || p.branch == _B_none { + continue + } + + /* calculate the jump offset */ + size := self.branchSize(p) + diff := lb.offset(p.pc, size) + + /* too far to be a near jump */ + if diff > 127 || diff < -128 { + p.nb = size + continue + } + + /* a far jump becomes a near jump, calculate + * the PC adjustment value and assemble again */ + next = true + p.nb = _N_near + offs += uintptr(size - _N_near) + } + } + + /* Pass 3: link all the cross-references */ + for p := self.head; p != nil; p = p.next { + for i := 0; i < p.argc; i++ { + var ok bool + var lb *Label + var op *MemoryOperand + + /* resolve labels */ + if lb, ok = p.argv[i].(*Label); ok { + p.argv[i] = lb.offset(p.pc, p.nb) + continue + } + + /* check for memory operands */ + if op, ok = p.argv[i].(*MemoryOperand); !ok { + continue + } + + /* check for label references */ + if op.Addr.Type != Reference { + continue + } + + /* replace the label with the real offset */ + op.Addr.Type = Offset + op.Addr.Offset = op.Addr.Reference.offset(p.pc, p.nb) + } + } + + /* Pass 4: actually encode all the instructions */ + for p := self.head; p != nil; p = p.next { + p.encode(&ret) + } + + /* all done */ + return ret +} + +// AssembleAndFree is like Assemble, but it frees the Program after assembling. +func (self *Program) AssembleAndFree(pc uintptr) (ret []byte) { + ret = self.Assemble(pc) + self.Free() + return +} \ No newline at end of file diff --git a/vendor/github.com/chenzhuoyu/iasm/x86_64/registers.go b/vendor/github.com/chenzhuoyu/iasm/x86_64/registers.go new file mode 100644 index 0000000000..cd1188a2d4 --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/x86_64/registers.go @@ -0,0 +1,677 @@ +package x86_64 + +import ( + `fmt` +) + +// Register represents a hardware register. +type Register interface { + fmt.Stringer + implRegister() +} + +type ( + Register8 byte + Register16 byte + Register32 byte + Register64 byte +) + +type ( + KRegister byte + MMRegister byte + XMMRegister byte + YMMRegister byte + ZMMRegister byte +) + +// RegisterMask is a KRegister used to mask another register. +type RegisterMask struct { + Z bool + K KRegister +} + +// String implements the fmt.Stringer interface. +func (self RegisterMask) String() string { + if !self.Z { + return fmt.Sprintf("{%%%s}", self.K) + } else { + return fmt.Sprintf("{%%%s}{z}", self.K) + } +} + +// MaskedRegister is a Register masked by a RegisterMask. +type MaskedRegister struct { + Reg Register + Mask RegisterMask +} + +// String implements the fmt.Stringer interface. +func (self MaskedRegister) String() string { + return self.Reg.String() + self.Mask.String() +} + +const ( + AL Register8 = iota + CL + DL + BL + SPL + BPL + SIL + DIL + R8b + R9b + R10b + R11b + R12b + R13b + R14b + R15b +) + +const ( + AH = SPL | 0x80 + CH = BPL | 0x80 + DH = SIL | 0x80 + BH = DIL | 0x80 +) + +const ( + AX Register16 = iota + CX + DX + BX + SP + BP + SI + DI + R8w + R9w + R10w + R11w + R12w + R13w + R14w + R15w +) + +const ( + EAX Register32 = iota + ECX + EDX + EBX + ESP + EBP + ESI + EDI + R8d + R9d + R10d + R11d + R12d + R13d + R14d + R15d +) + +const ( + RAX Register64 = iota + RCX + RDX + RBX + RSP + RBP + RSI + RDI + R8 + R9 + R10 + R11 + R12 + R13 + R14 + R15 +) + +const ( + K0 KRegister = iota + K1 + K2 + K3 + K4 + K5 + K6 + K7 +) + +const ( + MM0 MMRegister = iota + MM1 + MM2 + MM3 + MM4 + MM5 + MM6 + MM7 +) + +const ( + XMM0 XMMRegister = iota + XMM1 + XMM2 + XMM3 + XMM4 + XMM5 + XMM6 + XMM7 + XMM8 + XMM9 + XMM10 + XMM11 + XMM12 + XMM13 + XMM14 + XMM15 + XMM16 + XMM17 + XMM18 + XMM19 + XMM20 + XMM21 + XMM22 + XMM23 + XMM24 + XMM25 + XMM26 + XMM27 + XMM28 + XMM29 + XMM30 + XMM31 +) + +const ( + YMM0 YMMRegister = iota + YMM1 + YMM2 + YMM3 + YMM4 + YMM5 + YMM6 + YMM7 + YMM8 + YMM9 + YMM10 + YMM11 + YMM12 + YMM13 + YMM14 + YMM15 + YMM16 + YMM17 + YMM18 + YMM19 + YMM20 + YMM21 + YMM22 + YMM23 + YMM24 + YMM25 + YMM26 + YMM27 + YMM28 + YMM29 + YMM30 + YMM31 +) + +const ( + ZMM0 ZMMRegister = iota + ZMM1 + ZMM2 + ZMM3 + ZMM4 + ZMM5 + ZMM6 + ZMM7 + ZMM8 + ZMM9 + ZMM10 + ZMM11 + ZMM12 + ZMM13 + ZMM14 + ZMM15 + ZMM16 + ZMM17 + ZMM18 + ZMM19 + ZMM20 + ZMM21 + ZMM22 + ZMM23 + ZMM24 + ZMM25 + ZMM26 + ZMM27 + ZMM28 + ZMM29 + ZMM30 + ZMM31 +) + +func (self Register8) implRegister() {} +func (self Register16) implRegister() {} +func (self Register32) implRegister() {} +func (self Register64) implRegister() {} + +func (self KRegister) implRegister() {} +func (self MMRegister) implRegister() {} +func (self XMMRegister) implRegister() {} +func (self YMMRegister) implRegister() {} +func (self ZMMRegister) implRegister() {} + +func (self Register8) String() string { if int(self) >= len(r8names) { return "???" } else { return r8names[self] } } +func (self Register16) String() string { if int(self) >= len(r16names) { return "???" } else { return r16names[self] } } +func (self Register32) String() string { if int(self) >= len(r32names) { return "???" } else { return r32names[self] } } +func (self Register64) String() string { if int(self) >= len(r64names) { return "???" } else { return r64names[self] } } + +func (self KRegister) String() string { if int(self) >= len(knames) { return "???" } else { return knames[self] } } +func (self MMRegister) String() string { if int(self) >= len(mmnames) { return "???" } else { return mmnames[self] } } +func (self XMMRegister) String() string { if int(self) >= len(xmmnames) { return "???" } else { return xmmnames[self] } } +func (self YMMRegister) String() string { if int(self) >= len(ymmnames) { return "???" } else { return ymmnames[self] } } +func (self ZMMRegister) String() string { if int(self) >= len(zmmnames) { return "???" } else { return zmmnames[self] } } + +// Registers maps register name into Register instances. +var Registers = map[string]Register { + "al" : AL, + "cl" : CL, + "dl" : DL, + "bl" : BL, + "spl" : SPL, + "bpl" : BPL, + "sil" : SIL, + "dil" : DIL, + "r8b" : R8b, + "r9b" : R9b, + "r10b" : R10b, + "r11b" : R11b, + "r12b" : R12b, + "r13b" : R13b, + "r14b" : R14b, + "r15b" : R15b, + "ah" : AH, + "ch" : CH, + "dh" : DH, + "bh" : BH, + "ax" : AX, + "cx" : CX, + "dx" : DX, + "bx" : BX, + "sp" : SP, + "bp" : BP, + "si" : SI, + "di" : DI, + "r8w" : R8w, + "r9w" : R9w, + "r10w" : R10w, + "r11w" : R11w, + "r12w" : R12w, + "r13w" : R13w, + "r14w" : R14w, + "r15w" : R15w, + "eax" : EAX, + "ecx" : ECX, + "edx" : EDX, + "ebx" : EBX, + "esp" : ESP, + "ebp" : EBP, + "esi" : ESI, + "edi" : EDI, + "r8d" : R8d, + "r9d" : R9d, + "r10d" : R10d, + "r11d" : R11d, + "r12d" : R12d, + "r13d" : R13d, + "r14d" : R14d, + "r15d" : R15d, + "rax" : RAX, + "rcx" : RCX, + "rdx" : RDX, + "rbx" : RBX, + "rsp" : RSP, + "rbp" : RBP, + "rsi" : RSI, + "rdi" : RDI, + "r8" : R8, + "r9" : R9, + "r10" : R10, + "r11" : R11, + "r12" : R12, + "r13" : R13, + "r14" : R14, + "r15" : R15, + "k0" : K0, + "k1" : K1, + "k2" : K2, + "k3" : K3, + "k4" : K4, + "k5" : K5, + "k6" : K6, + "k7" : K7, + "mm0" : MM0, + "mm1" : MM1, + "mm2" : MM2, + "mm3" : MM3, + "mm4" : MM4, + "mm5" : MM5, + "mm6" : MM6, + "mm7" : MM7, + "xmm0" : XMM0, + "xmm1" : XMM1, + "xmm2" : XMM2, + "xmm3" : XMM3, + "xmm4" : XMM4, + "xmm5" : XMM5, + "xmm6" : XMM6, + "xmm7" : XMM7, + "xmm8" : XMM8, + "xmm9" : XMM9, + "xmm10" : XMM10, + "xmm11" : XMM11, + "xmm12" : XMM12, + "xmm13" : XMM13, + "xmm14" : XMM14, + "xmm15" : XMM15, + "xmm16" : XMM16, + "xmm17" : XMM17, + "xmm18" : XMM18, + "xmm19" : XMM19, + "xmm20" : XMM20, + "xmm21" : XMM21, + "xmm22" : XMM22, + "xmm23" : XMM23, + "xmm24" : XMM24, + "xmm25" : XMM25, + "xmm26" : XMM26, + "xmm27" : XMM27, + "xmm28" : XMM28, + "xmm29" : XMM29, + "xmm30" : XMM30, + "xmm31" : XMM31, + "ymm0" : YMM0, + "ymm1" : YMM1, + "ymm2" : YMM2, + "ymm3" : YMM3, + "ymm4" : YMM4, + "ymm5" : YMM5, + "ymm6" : YMM6, + "ymm7" : YMM7, + "ymm8" : YMM8, + "ymm9" : YMM9, + "ymm10" : YMM10, + "ymm11" : YMM11, + "ymm12" : YMM12, + "ymm13" : YMM13, + "ymm14" : YMM14, + "ymm15" : YMM15, + "ymm16" : YMM16, + "ymm17" : YMM17, + "ymm18" : YMM18, + "ymm19" : YMM19, + "ymm20" : YMM20, + "ymm21" : YMM21, + "ymm22" : YMM22, + "ymm23" : YMM23, + "ymm24" : YMM24, + "ymm25" : YMM25, + "ymm26" : YMM26, + "ymm27" : YMM27, + "ymm28" : YMM28, + "ymm29" : YMM29, + "ymm30" : YMM30, + "ymm31" : YMM31, + "zmm0" : ZMM0, + "zmm1" : ZMM1, + "zmm2" : ZMM2, + "zmm3" : ZMM3, + "zmm4" : ZMM4, + "zmm5" : ZMM5, + "zmm6" : ZMM6, + "zmm7" : ZMM7, + "zmm8" : ZMM8, + "zmm9" : ZMM9, + "zmm10" : ZMM10, + "zmm11" : ZMM11, + "zmm12" : ZMM12, + "zmm13" : ZMM13, + "zmm14" : ZMM14, + "zmm15" : ZMM15, + "zmm16" : ZMM16, + "zmm17" : ZMM17, + "zmm18" : ZMM18, + "zmm19" : ZMM19, + "zmm20" : ZMM20, + "zmm21" : ZMM21, + "zmm22" : ZMM22, + "zmm23" : ZMM23, + "zmm24" : ZMM24, + "zmm25" : ZMM25, + "zmm26" : ZMM26, + "zmm27" : ZMM27, + "zmm28" : ZMM28, + "zmm29" : ZMM29, + "zmm30" : ZMM30, + "zmm31" : ZMM31, +} + +/** Register Name Tables **/ + +var r8names = [...]string { + AL : "al", + CL : "cl", + DL : "dl", + BL : "bl", + SPL : "spl", + BPL : "bpl", + SIL : "sil", + DIL : "dil", + R8b : "r8b", + R9b : "r9b", + R10b : "r10b", + R11b : "r11b", + R12b : "r12b", + R13b : "r13b", + R14b : "r14b", + R15b : "r15b", + AH : "ah", + CH : "ch", + DH : "dh", + BH : "bh", +} + +var r16names = [...]string { + AX : "ax", + CX : "cx", + DX : "dx", + BX : "bx", + SP : "sp", + BP : "bp", + SI : "si", + DI : "di", + R8w : "r8w", + R9w : "r9w", + R10w : "r10w", + R11w : "r11w", + R12w : "r12w", + R13w : "r13w", + R14w : "r14w", + R15w : "r15w", +} + +var r32names = [...]string { + EAX : "eax", + ECX : "ecx", + EDX : "edx", + EBX : "ebx", + ESP : "esp", + EBP : "ebp", + ESI : "esi", + EDI : "edi", + R8d : "r8d", + R9d : "r9d", + R10d : "r10d", + R11d : "r11d", + R12d : "r12d", + R13d : "r13d", + R14d : "r14d", + R15d : "r15d", +} + +var r64names = [...]string { + RAX : "rax", + RCX : "rcx", + RDX : "rdx", + RBX : "rbx", + RSP : "rsp", + RBP : "rbp", + RSI : "rsi", + RDI : "rdi", + R8 : "r8", + R9 : "r9", + R10 : "r10", + R11 : "r11", + R12 : "r12", + R13 : "r13", + R14 : "r14", + R15 : "r15", +} + +var knames = [...]string { + K0: "k0", + K1: "k1", + K2: "k2", + K3: "k3", + K4: "k4", + K5: "k5", + K6: "k6", + K7: "k7", +} + +var mmnames = [...]string { + MM0: "mm0", + MM1: "mm1", + MM2: "mm2", + MM3: "mm3", + MM4: "mm4", + MM5: "mm5", + MM6: "mm6", + MM7: "mm7", +} + +var xmmnames = [...]string { + XMM0 : "xmm0", + XMM1 : "xmm1", + XMM2 : "xmm2", + XMM3 : "xmm3", + XMM4 : "xmm4", + XMM5 : "xmm5", + XMM6 : "xmm6", + XMM7 : "xmm7", + XMM8 : "xmm8", + XMM9 : "xmm9", + XMM10 : "xmm10", + XMM11 : "xmm11", + XMM12 : "xmm12", + XMM13 : "xmm13", + XMM14 : "xmm14", + XMM15 : "xmm15", + XMM16 : "xmm16", + XMM17 : "xmm17", + XMM18 : "xmm18", + XMM19 : "xmm19", + XMM20 : "xmm20", + XMM21 : "xmm21", + XMM22 : "xmm22", + XMM23 : "xmm23", + XMM24 : "xmm24", + XMM25 : "xmm25", + XMM26 : "xmm26", + XMM27 : "xmm27", + XMM28 : "xmm28", + XMM29 : "xmm29", + XMM30 : "xmm30", + XMM31 : "xmm31", +} + +var ymmnames = [...]string { + YMM0 : "ymm0", + YMM1 : "ymm1", + YMM2 : "ymm2", + YMM3 : "ymm3", + YMM4 : "ymm4", + YMM5 : "ymm5", + YMM6 : "ymm6", + YMM7 : "ymm7", + YMM8 : "ymm8", + YMM9 : "ymm9", + YMM10 : "ymm10", + YMM11 : "ymm11", + YMM12 : "ymm12", + YMM13 : "ymm13", + YMM14 : "ymm14", + YMM15 : "ymm15", + YMM16 : "ymm16", + YMM17 : "ymm17", + YMM18 : "ymm18", + YMM19 : "ymm19", + YMM20 : "ymm20", + YMM21 : "ymm21", + YMM22 : "ymm22", + YMM23 : "ymm23", + YMM24 : "ymm24", + YMM25 : "ymm25", + YMM26 : "ymm26", + YMM27 : "ymm27", + YMM28 : "ymm28", + YMM29 : "ymm29", + YMM30 : "ymm30", + YMM31 : "ymm31", +} + +var zmmnames = [...]string { + ZMM0 : "zmm0", + ZMM1 : "zmm1", + ZMM2 : "zmm2", + ZMM3 : "zmm3", + ZMM4 : "zmm4", + ZMM5 : "zmm5", + ZMM6 : "zmm6", + ZMM7 : "zmm7", + ZMM8 : "zmm8", + ZMM9 : "zmm9", + ZMM10 : "zmm10", + ZMM11 : "zmm11", + ZMM12 : "zmm12", + ZMM13 : "zmm13", + ZMM14 : "zmm14", + ZMM15 : "zmm15", + ZMM16 : "zmm16", + ZMM17 : "zmm17", + ZMM18 : "zmm18", + ZMM19 : "zmm19", + ZMM20 : "zmm20", + ZMM21 : "zmm21", + ZMM22 : "zmm22", + ZMM23 : "zmm23", + ZMM24 : "zmm24", + ZMM25 : "zmm25", + ZMM26 : "zmm26", + ZMM27 : "zmm27", + ZMM28 : "zmm28", + ZMM29 : "zmm29", + ZMM30 : "zmm30", + ZMM31 : "zmm31", +} diff --git a/vendor/github.com/chenzhuoyu/iasm/x86_64/utils.go b/vendor/github.com/chenzhuoyu/iasm/x86_64/utils.go new file mode 100644 index 0000000000..19a259951e --- /dev/null +++ b/vendor/github.com/chenzhuoyu/iasm/x86_64/utils.go @@ -0,0 +1,131 @@ +package x86_64 + +import ( + `encoding/binary` + `errors` + `reflect` + `strconv` + `unicode/utf8` + `unsafe` +) + +const ( + _CC_digit = 1 << iota + _CC_ident + _CC_ident0 + _CC_number +) + +func ispow2(v uint64) bool { + return (v & (v - 1)) == 0 +} + +func isdigit(cc rune) bool { + return '0' <= cc && cc <= '9' +} + +func isalpha(cc rune) bool { + return (cc >= 'a' && cc <= 'z') || (cc >= 'A' && cc <= 'Z') +} + +func isident(cc rune) bool { + return cc == '_' || isalpha(cc) || isdigit(cc) +} + +func isident0(cc rune) bool { + return cc == '_' || isalpha(cc) +} + +func isnumber(cc rune) bool { + return (cc == 'b' || cc == 'B') || + (cc == 'o' || cc == 'O') || + (cc == 'x' || cc == 'X') || + (cc >= '0' && cc <= '9') || + (cc >= 'a' && cc <= 'f') || + (cc >= 'A' && cc <= 'F') +} + +func align(v int, n int) int { + return (((v - 1) >> n) + 1) << n +} + +func append8(m *[]byte, v byte) { + *m = append(*m, v) +} + +func append16(m *[]byte, v uint16) { + p := len(*m) + *m = append(*m, 0, 0) + binary.LittleEndian.PutUint16((*m)[p:], v) +} + +func append32(m *[]byte, v uint32) { + p := len(*m) + *m = append(*m, 0, 0, 0, 0) + binary.LittleEndian.PutUint32((*m)[p:], v) +} + +func append64(m *[]byte, v uint64) { + p := len(*m) + *m = append(*m, 0, 0, 0, 0, 0, 0, 0, 0) + binary.LittleEndian.PutUint64((*m)[p:], v) +} + +func expandmm(m *[]byte, n int, v byte) { + sl := (*_GoSlice)(unsafe.Pointer(m)) + nb := sl.len + n + + /* grow as needed */ + if nb > cap(*m) { + *m = growslice(byteType, *m, nb) + } + + /* fill the new area */ + memset(unsafe.Pointer(uintptr(sl.ptr) + uintptr(sl.len)), v, uintptr(n)) + sl.len = nb +} + +func memset(p unsafe.Pointer, c byte, n uintptr) { + if c != 0 { + memsetv(p, c, n) + } else { + memclrNoHeapPointers(p, n) + } +} + +func memsetv(p unsafe.Pointer, c byte, n uintptr) { + for i := uintptr(0); i < n; i++ { + *(*byte)(unsafe.Pointer(uintptr(p) + i)) = c + } +} + +func literal64(v string) (uint64, error) { + var nb int + var ch rune + var ex error + var mm [12]byte + + /* unquote the runes */ + for v != "" { + if ch, _, v, ex = strconv.UnquoteChar(v, '\''); ex != nil { + return 0, ex + } else if nb += utf8.EncodeRune(mm[nb:], ch); nb > 8 { + return 0, errors.New("multi-char constant too large") + } + } + + /* convert to uint64 */ + return *(*uint64)(unsafe.Pointer(&mm)), nil +} + +var ( + byteWrap = reflect.TypeOf(byte(0)) + byteType = (*_GoType)(efaceOf(byteWrap).ptr) +) + +//go:linkname growslice runtime.growslice +func growslice(_ *_GoType, _ []byte, _ int) []byte + +//go:noescape +//go:linkname memclrNoHeapPointers runtime.memclrNoHeapPointers +func memclrNoHeapPointers(_ unsafe.Pointer, _ uintptr) diff --git a/vendor/github.com/go-chi/chi/v5/CHANGELOG.md b/vendor/github.com/go-chi/chi/v5/CHANGELOG.md index a1feeec055..f6eb7e6e40 100644 --- a/vendor/github.com/go-chi/chi/v5/CHANGELOG.md +++ b/vendor/github.com/go-chi/chi/v5/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## v5.0.10 (2023-07-13) + +- Fixed small edge case in tests of v5.0.9 for older Go versions +- History of changes: see https://github.com/go-chi/chi/compare/v5.0.8...v5.0.10 + + +## v5.0.9 (2023-07-13) + +- History of changes: see https://github.com/go-chi/chi/compare/v5.0.8...v5.0.9 + + ## v5.0.8 (2022-12-07) - History of changes: see https://github.com/go-chi/chi/compare/v5.0.7...v5.0.8 @@ -90,14 +101,14 @@ incremental, with the architecture and api being the same today as it was origin makes chi a pretty easy project to maintain, as well thanks to the many amazing community contributions over the years to who all help make chi better (total of 86 contributors to date -- thanks all!). -Chi has been an labour of love, art and engineering, with the goals to offer beautiful ergonomics, flexibility, performance +Chi has been a labour of love, art and engineering, with the goals to offer beautiful ergonomics, flexibility, performance and simplicity when building HTTP services with Go. I've strived to keep the router very minimal in surface area / code size, and always improving the code wherever possible -- and as of today the `chi` package is just 1082 lines of code (not counting middlewares, which are all optional). As well, I don't have the exact metrics, but from my analysis and email exchanges from companies and developers, chi is used by thousands of projects around the world -- thank you all as there is no better form of joy for me than to have art I had started be helpful and enjoyed by others. And of course I use chi in all of my own projects too :) -For me, the asthetics of chi's code and usage are very important. With the introduction of Go's module support +For me, the aesthetics of chi's code and usage are very important. With the introduction of Go's module support (which I'm a big fan of), chi's past versioning scheme choice to v2, v3 and v4 would mean I'd require the import path of "github.com/go-chi/chi/v4", leading to the lengthy discussion at https://github.com/go-chi/chi/issues/462. Haha, to some, you may be scratching your head why I've spent > 1 year stalling to adopt "/vXX" convention in the import @@ -289,7 +300,7 @@ Cheers all, happy coding! ## v2.0.0-rc1 (2016-07-26) -- Huge update! chi v2 is a large refactor targetting Go 1.7+. As of Go 1.7, the popular +- Huge update! chi v2 is a large refactor targeting Go 1.7+. As of Go 1.7, the popular community `"net/context"` package has been included in the standard library as `"context"` and utilized by `"net/http"` and `http.Request` to managing deadlines, cancelation signals and other request-scoped values. We're very excited about the new context addition and are proud to diff --git a/vendor/github.com/go-chi/chi/v5/README.md b/vendor/github.com/go-chi/chi/v5/README.md index 3e4cc4a2e1..718e373fa0 100644 --- a/vendor/github.com/go-chi/chi/v5/README.md +++ b/vendor/github.com/go-chi/chi/v5/README.md @@ -1,7 +1,7 @@ # chi -[![GoDoc Widget]][GoDoc] [![Travis Widget]][Travis] +[![GoDoc Widget]][GoDoc] `chi` is a lightweight, idiomatic and composable router for building Go HTTP services. It's especially good at helping you write large REST API services that are kept maintainable as your diff --git a/vendor/github.com/go-chi/chi/v5/context.go b/vendor/github.com/go-chi/chi/v5/context.go index e78a2385d8..88f8e221a1 100644 --- a/vendor/github.com/go-chi/chi/v5/context.go +++ b/vendor/github.com/go-chi/chi/v5/context.go @@ -76,6 +76,7 @@ type Context struct { // methodNotAllowed hint methodNotAllowed bool + methodsAllowed []methodTyp // allowed methods in case of a 405 } // Reset a routing context to its initial state. diff --git a/vendor/github.com/go-chi/chi/v5/middleware/compress.go b/vendor/github.com/go-chi/chi/v5/middleware/compress.go index 52f4e0b539..773d47a161 100644 --- a/vendor/github.com/go-chi/chi/v5/middleware/compress.go +++ b/vendor/github.com/go-chi/chi/v5/middleware/compress.go @@ -135,12 +135,12 @@ func NewCompressor(level int, types ...string) *Compressor { // The encoding should be a standardised identifier. See: // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding // -// For example, add the Brotli algortithm: +// For example, add the Brotli algorithm: // // import brotli_enc "gopkg.in/kothar/brotli-go.v0/enc" // // compressor := middleware.NewCompressor(5, "text/html") -// compressor.SetEncoder("br", func(w http.ResponseWriter, level int) io.Writer { +// compressor.SetEncoder("br", func(w io.Writer, level int) io.Writer { // params := brotli_enc.NewBrotliParams() // params.SetQuality(level) // return brotli_enc.NewBrotliWriter(params, w) @@ -285,7 +285,7 @@ func (cw *compressResponseWriter) isCompressable() bool { contentType = contentType[0:idx] } - // Is the content type compressable? + // Is the content type compressible? if _, ok := cw.contentTypes[contentType]; ok { return true } @@ -382,6 +382,10 @@ func (cw *compressResponseWriter) Close() error { return errors.New("chi/middleware: io.WriteCloser is unavailable on the writer") } +func (cw *compressResponseWriter) Unwrap() http.ResponseWriter { + return cw.ResponseWriter +} + func encoderGzip(w io.Writer, level int) io.Writer { gw, err := gzip.NewWriterLevel(w, level) if err != nil { diff --git a/vendor/github.com/go-chi/chi/v5/middleware/nocache.go b/vendor/github.com/go-chi/chi/v5/middleware/nocache.go index 2412829e1b..7353448d69 100644 --- a/vendor/github.com/go-chi/chi/v5/middleware/nocache.go +++ b/vendor/github.com/go-chi/chi/v5/middleware/nocache.go @@ -9,7 +9,7 @@ import ( ) // Unix epoch time -var epoch = time.Unix(0, 0).Format(time.RFC1123) +var epoch = time.Unix(0, 0).UTC().Format(http.TimeFormat) // Taken from https://github.com/mytrile/nocache var noCacheHeaders = map[string]string{ diff --git a/vendor/github.com/go-chi/chi/v5/middleware/recoverer.go b/vendor/github.com/go-chi/chi/v5/middleware/recoverer.go index 8fa69baddb..612e155a78 100644 --- a/vendor/github.com/go-chi/chi/v5/middleware/recoverer.go +++ b/vendor/github.com/go-chi/chi/v5/middleware/recoverer.go @@ -36,7 +36,9 @@ func Recoverer(next http.Handler) http.Handler { PrintPrettyStack(rvr) } - w.WriteHeader(http.StatusInternalServerError) + if r.Header.Get("Connection") != "Upgrade" { + w.WriteHeader(http.StatusInternalServerError) + } } }() diff --git a/vendor/github.com/go-chi/chi/v5/middleware/request_size.go b/vendor/github.com/go-chi/chi/v5/middleware/request_size.go new file mode 100644 index 0000000000..678248c461 --- /dev/null +++ b/vendor/github.com/go-chi/chi/v5/middleware/request_size.go @@ -0,0 +1,18 @@ +package middleware + +import ( + "net/http" +) + +// RequestSize is a middleware that will limit request sizes to a specified +// number of bytes. It uses MaxBytesReader to do so. +func RequestSize(bytes int64) func(http.Handler) http.Handler { + f := func(h http.Handler) http.Handler { + fn := func(w http.ResponseWriter, r *http.Request) { + r.Body = http.MaxBytesReader(w, r.Body, bytes) + h.ServeHTTP(w, r) + } + return http.HandlerFunc(fn) + } + return f +} diff --git a/vendor/github.com/go-chi/chi/v5/middleware/throttle.go b/vendor/github.com/go-chi/chi/v5/middleware/throttle.go index 8dcb9440bc..bdf4f9f187 100644 --- a/vendor/github.com/go-chi/chi/v5/middleware/throttle.go +++ b/vendor/github.com/go-chi/chi/v5/middleware/throttle.go @@ -26,7 +26,7 @@ type ThrottleOpts struct { // Throttle is a middleware that limits number of currently processed requests // at a time across all users. Note: Throttle is not a rate-limiter per user, -// instead it just puts a ceiling on the number of currentl in-flight requests +// instead it just puts a ceiling on the number of currently in-flight requests // being processed from the point from where the Throttle middleware is mounted. func Throttle(limit int) func(http.Handler) http.Handler { return ThrottleWithOpts(ThrottleOpts{Limit: limit, BacklogTimeout: defaultBacklogTimeout}) diff --git a/vendor/github.com/go-chi/chi/v5/mux.go b/vendor/github.com/go-chi/chi/v5/mux.go index 47e64cf296..977aa52dd1 100644 --- a/vendor/github.com/go-chi/chi/v5/mux.go +++ b/vendor/github.com/go-chi/chi/v5/mux.go @@ -156,7 +156,7 @@ func (mx *Mux) Head(pattern string, handlerFn http.HandlerFunc) { mx.handle(mHEAD, pattern, handlerFn) } -// Options adds the route `pattern` that matches a OPTIONS http method to +// Options adds the route `pattern` that matches an OPTIONS http method to // execute the `handlerFn` http.HandlerFunc. func (mx *Mux) Options(pattern string, handlerFn http.HandlerFunc) { mx.handle(mOPTIONS, pattern, handlerFn) @@ -378,11 +378,11 @@ func (mx *Mux) NotFoundHandler() http.HandlerFunc { // MethodNotAllowedHandler returns the default Mux 405 responder whenever // a method cannot be resolved for a route. -func (mx *Mux) MethodNotAllowedHandler() http.HandlerFunc { +func (mx *Mux) MethodNotAllowedHandler(methodsAllowed ...methodTyp) http.HandlerFunc { if mx.methodNotAllowedHandler != nil { return mx.methodNotAllowedHandler } - return methodNotAllowedHandler + return methodNotAllowedHandler(methodsAllowed...) } // handle registers a http.Handler in the routing tree for a particular http method @@ -445,7 +445,7 @@ func (mx *Mux) routeHTTP(w http.ResponseWriter, r *http.Request) { return } if rctx.methodNotAllowed { - mx.MethodNotAllowedHandler().ServeHTTP(w, r) + mx.MethodNotAllowedHandler(rctx.methodsAllowed...).ServeHTTP(w, r) } else { mx.NotFoundHandler().ServeHTTP(w, r) } @@ -480,8 +480,14 @@ func (mx *Mux) updateRouteHandler() { } // methodNotAllowedHandler is a helper function to respond with a 405, -// method not allowed. -func methodNotAllowedHandler(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(405) - w.Write(nil) +// method not allowed. It sets the Allow header with the list of allowed +// methods for the route. +func methodNotAllowedHandler(methodsAllowed ...methodTyp) func(w http.ResponseWriter, r *http.Request) { + return func(w http.ResponseWriter, r *http.Request) { + for _, m := range methodsAllowed { + w.Header().Add("Allow", reverseMethodMap[m]) + } + w.WriteHeader(405) + w.Write(nil) + } } diff --git a/vendor/github.com/go-chi/chi/v5/tree.go b/vendor/github.com/go-chi/chi/v5/tree.go index 4189b5228b..c7d3bc5704 100644 --- a/vendor/github.com/go-chi/chi/v5/tree.go +++ b/vendor/github.com/go-chi/chi/v5/tree.go @@ -43,6 +43,18 @@ var methodMap = map[string]methodTyp{ http.MethodTrace: mTRACE, } +var reverseMethodMap = map[methodTyp]string{ + mCONNECT: http.MethodConnect, + mDELETE: http.MethodDelete, + mGET: http.MethodGet, + mHEAD: http.MethodHead, + mOPTIONS: http.MethodOptions, + mPATCH: http.MethodPatch, + mPOST: http.MethodPost, + mPUT: http.MethodPut, + mTRACE: http.MethodTrace, +} + // RegisterMethod adds support for custom HTTP method handlers, available // via Router#Method and Router#MethodFunc func RegisterMethod(method string) { @@ -454,6 +466,13 @@ func (n *node) findRoute(rctx *Context, method methodTyp, path string) *node { return xn } + for endpoints := range xn.endpoints { + if endpoints == mALL || endpoints == mSTUB { + continue + } + rctx.methodsAllowed = append(rctx.methodsAllowed, endpoints) + } + // flag that the routing context found a route, but not a corresponding // supported method rctx.methodNotAllowed = true @@ -493,6 +512,13 @@ func (n *node) findRoute(rctx *Context, method methodTyp, path string) *node { return xn } + for endpoints := range xn.endpoints { + if endpoints == mALL || endpoints == mSTUB { + continue + } + rctx.methodsAllowed = append(rctx.methodsAllowed, endpoints) + } + // flag that the routing context found a route, but not a corresponding // supported method rctx.methodNotAllowed = true diff --git a/vendor/github.com/go-ole/go-ole/SECURITY.md b/vendor/github.com/go-ole/go-ole/SECURITY.md new file mode 100644 index 0000000000..dac281523b --- /dev/null +++ b/vendor/github.com/go-ole/go-ole/SECURITY.md @@ -0,0 +1,13 @@ +# Security Policy + +## Supported Versions + +Security updates are applied only to the latest release. + +## Reporting a Vulnerability + +If you have discovered a security vulnerability in this project, please report it privately. **Do not disclose it as a public issue.** This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released. + +Please disclose it at [security advisory](https://github.com/go-ole/go-ole/security/advisories/new). + +This project is maintained by a team of volunteers on a reasonable-effort basis. As such, please give us at least 90 days to work on a fix before public exposure. diff --git a/vendor/github.com/go-ole/go-ole/appveyor.yml b/vendor/github.com/go-ole/go-ole/appveyor.yml index 0d557ac2ff..8df7fa26e3 100644 --- a/vendor/github.com/go-ole/go-ole/appveyor.yml +++ b/vendor/github.com/go-ole/go-ole/appveyor.yml @@ -6,14 +6,9 @@ version: "1.3.0.{build}-alpha-{branch}" -os: Windows Server 2012 R2 +os: Visual Studio 2019 -branches: - only: - - master - - v1.2 - - v1.1 - - v1.0 +build: off skip_tags: true @@ -21,20 +16,40 @@ clone_folder: c:\gopath\src\github.com\go-ole\go-ole environment: GOPATH: c:\gopath - matrix: - - GOARCH: amd64 - GOVERSION: 1.5 - GOROOT: c:\go - DOWNLOADPLATFORM: "x64" + GOROOT: c:\go + DOWNLOADPLATFORM: "x64" -install: - - choco install mingw - - SET PATH=c:\tools\mingw64\bin;%PATH% +before_test: # - Download COM Server - ps: Start-FileDownload "https://github.com/go-ole/test-com-server/releases/download/v1.0.2/test-com-server-${env:DOWNLOADPLATFORM}.zip" - 7z e test-com-server-%DOWNLOADPLATFORM%.zip -oc:\gopath\src\github.com\go-ole\go-ole > NUL - c:\gopath\src\github.com\go-ole\go-ole\build\register-assembly.bat - # - set + +test_script: + - go test -v -cover ./... + # go vet has false positives on unsafe.Pointer with windows/sys. Disabling since it is recommended to use go test instead. + # - go vet ./... + +branches: + only: + - master + - v1.2 + - v1.1 + - v1.0 + +matrix: + allow_failures: + - environment: + GOROOT: C:\go-x86 + DOWNLOADPLATFORM: "x86" + - environment: + GOROOT: C:\go118 + DOWNLOADPLATFORM: "x64" + - environment: + GOROOT: C:\go118-x86 + DOWNLOADPLATFORM: "x86" + +install: - go version - go env - go get -u golang.org/x/tools/cmd/cover @@ -45,10 +60,9 @@ build_script: - cd c:\gopath\src\github.com\go-ole\go-ole - go get -v -t ./... - go build - - go test -v -cover ./... # disable automatic tests -test: off +test: on # disable deployment deploy: off diff --git a/vendor/github.com/go-ole/go-ole/com.go b/vendor/github.com/go-ole/go-ole/com.go index a9bef150a3..cabbac0122 100644 --- a/vendor/github.com/go-ole/go-ole/com.go +++ b/vendor/github.com/go-ole/go-ole/com.go @@ -11,6 +11,7 @@ import ( var ( procCoInitialize = modole32.NewProc("CoInitialize") procCoInitializeEx = modole32.NewProc("CoInitializeEx") + procCoInitializeSecurity = modole32.NewProc("CoInitializeSecurity") procCoUninitialize = modole32.NewProc("CoUninitialize") procCoCreateInstance = modole32.NewProc("CoCreateInstance") procCoTaskMemFree = modole32.NewProc("CoTaskMemFree") @@ -37,6 +38,9 @@ var ( procDispatchMessageW = moduser32.NewProc("DispatchMessageW") ) +// This is to enable calling COM Security initialization multiple times +var bSecurityInit bool = false + // coInitialize initializes COM library on current thread. // // MSDN documentation suggests that this function should not be called. Call @@ -68,6 +72,35 @@ func coInitializeEx(coinit uint32) (err error) { return } +// coInitializeSecurity: Registers security and sets the default security values +// for the process. +func coInitializeSecurity(cAuthSvc int32, + dwAuthnLevel uint32, + dwImpLevel uint32, + dwCapabilities uint32) (err error) { + // Check COM Security initialization has done previously + if !bSecurityInit { + // https://learn.microsoft.com/en-us/windows/win32/api/combaseapi/nf-combaseapi-coinitializesecurity + hr, _, _ := procCoInitializeSecurity.Call( + uintptr(0), // Allow *all* VSS writers to communicate back! + uintptr(cAuthSvc), // Default COM authentication service + uintptr(0), // Default COM authorization service + uintptr(0), // Reserved parameter + uintptr(dwAuthnLevel), // Strongest COM authentication level + uintptr(dwImpLevel), // Minimal impersonation abilities + uintptr(0), // Default COM authentication settings + uintptr(dwCapabilities), // Cloaking + uintptr(0)) // eserved parameter + if hr != 0 { + err = NewError(hr) + } else { + // COM Security initialization done make global flag true. + bSecurityInit = true + } + } + return +} + // CoInitialize initializes COM library on current thread. // // MSDN documentation suggests that this function should not be called. Call @@ -96,6 +129,15 @@ func CoUninitialize() { procCoUninitialize.Call() } +// CoInitializeSecurity: Registers security and sets the default security values +// for the process. +func CoInitializeSecurity(cAuthSvc int32, + dwAuthnLevel uint32, + dwImpLevel uint32, + dwCapabilities uint32) (err error) { + return coInitializeSecurity(cAuthSvc, dwAuthnLevel, dwImpLevel, dwCapabilities) +} + // CoTaskMemFree frees memory pointer. func CoTaskMemFree(memptr uintptr) { procCoTaskMemFree.Call(memptr) diff --git a/vendor/github.com/go-ole/go-ole/idispatch_windows.go b/vendor/github.com/go-ole/go-ole/idispatch_windows.go index b399f04791..649c0734ff 100644 --- a/vendor/github.com/go-ole/go-ole/idispatch_windows.go +++ b/vendor/github.com/go-ole/go-ole/idispatch_windows.go @@ -1,3 +1,4 @@ +//go:build windows // +build windows package ole @@ -92,7 +93,7 @@ func invoke(disp *IDispatch, dispid int32, dispatch int16, params ...interface{} case int8: vargs[n] = NewVariant(VT_I1, int64(v.(int8))) case *int8: - vargs[n] = NewVariant(VT_I1|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint8))))) + vargs[n] = NewVariant(VT_I1|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int8))))) case int16: vargs[n] = NewVariant(VT_I2, int64(v.(int16))) case *int16: diff --git a/vendor/github.com/go-ole/go-ole/variant.go b/vendor/github.com/go-ole/go-ole/variant.go index 967a23fea9..a2c8402f7b 100644 --- a/vendor/github.com/go-ole/go-ole/variant.go +++ b/vendor/github.com/go-ole/go-ole/variant.go @@ -99,7 +99,7 @@ func (v *VARIANT) Value() interface{} { case VT_DISPATCH: return v.ToIDispatch() case VT_BOOL: - return v.Val != 0 + return (v.Val & 0xffff) != 0 } return nil } diff --git a/vendor/github.com/go-playground/validator/v10/README.md b/vendor/github.com/go-playground/validator/v10/README.md index 520661db62..b2e0e2d9f7 100644 --- a/vendor/github.com/go-playground/validator/v10/README.md +++ b/vendor/github.com/go-playground/validator/v10/README.md @@ -1,7 +1,7 @@ Package validator ================= -[![Join the chat at https://gitter.im/go-playground/validator](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/go-playground/validator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -![Project status](https://img.shields.io/badge/version-10.14.1-green.svg) +[![Join the chat at https://gitter.im/go-playground/validator](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/go-playground/validator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +![Project status](https://img.shields.io/badge/version-10.15.0-green.svg) [![Build Status](https://travis-ci.org/go-playground/validator.svg?branch=master)](https://travis-ci.org/go-playground/validator) [![Coverage Status](https://coveralls.io/repos/go-playground/validator/badge.svg?branch=master&service=github)](https://coveralls.io/github/go-playground/validator?branch=master) [![Go Report Card](https://goreportcard.com/badge/github.com/go-playground/validator)](https://goreportcard.com/report/github.com/go-playground/validator) @@ -158,6 +158,7 @@ Baked-in Validations | credit_card | Credit Card Number | | mongodb | MongoDB ObjectID | | cron | Cron | +| spicedb | SpiceDb ObjectID/Permission/Type | | datetime | Datetime | | e164 | e164 formatted phone number | | email | E-mail String diff --git a/vendor/github.com/go-playground/validator/v10/baked_in.go b/vendor/github.com/go-playground/validator/v10/baked_in.go index e676f1d164..ca9eeb1dd5 100644 --- a/vendor/github.com/go-playground/validator/v10/baked_in.go +++ b/vendor/github.com/go-playground/validator/v10/baked_in.go @@ -230,6 +230,7 @@ var ( "luhn_checksum": hasLuhnChecksum, "mongodb": isMongoDB, "cron": isCron, + "spicedb": isSpiceDB, } ) @@ -1294,8 +1295,13 @@ func isEq(fl FieldLevel) bool { return field.Uint() == p - case reflect.Float32, reflect.Float64: - p := asFloat(param) + case reflect.Float32: + p := asFloat32(param) + + return field.Float() == p + + case reflect.Float64: + p := asFloat64(param) return field.Float() == p @@ -1561,6 +1567,10 @@ func isFilePath(fl FieldLevel) bool { field := fl.Field() + // Not valid if it is a directory. + if isDir(fl) { + return false + } // If it exists, it obviously is valid. // This is done first to avoid code duplication and unnecessary additional logic. if exists = isFile(fl); exists { @@ -1710,7 +1720,7 @@ func hasValue(fl FieldLevel) bool { if fl.(*validate).fldIsPointer && field.Interface() != nil { return true } - return field.IsValid() && field.Interface() != reflect.Zero(field.Type()).Interface() + return field.IsValid() && !field.IsZero() } } @@ -1734,7 +1744,7 @@ func requireCheckFieldKind(fl FieldLevel, param string, defaultNotFoundValue boo if nullable && field.Interface() != nil { return false } - return field.IsValid() && field.Interface() == reflect.Zero(field.Type()).Interface() + return field.IsValid() && field.IsZero() } } @@ -1755,8 +1765,11 @@ func requireCheckFieldValue( case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: return field.Uint() == asUint(value) - case reflect.Float32, reflect.Float64: - return field.Float() == asFloat(value) + case reflect.Float32: + return field.Float() == asFloat32(value) + + case reflect.Float64: + return field.Float() == asFloat64(value) case reflect.Slice, reflect.Map, reflect.Array: return int64(field.Len()) == asInt(value) @@ -2055,8 +2068,13 @@ func isGte(fl FieldLevel) bool { return field.Uint() >= p - case reflect.Float32, reflect.Float64: - p := asFloat(param) + case reflect.Float32: + p := asFloat32(param) + + return field.Float() >= p + + case reflect.Float64: + p := asFloat64(param) return field.Float() >= p @@ -2101,10 +2119,16 @@ func isGt(fl FieldLevel) bool { return field.Uint() > p - case reflect.Float32, reflect.Float64: - p := asFloat(param) + case reflect.Float32: + p := asFloat32(param) + + return field.Float() > p + + case reflect.Float64: + p := asFloat64(param) return field.Float() > p + case reflect.Struct: if field.Type().ConvertibleTo(timeType) { @@ -2143,8 +2167,13 @@ func hasLengthOf(fl FieldLevel) bool { return field.Uint() == p - case reflect.Float32, reflect.Float64: - p := asFloat(param) + case reflect.Float32: + p := asFloat32(param) + + return field.Float() == p + + case reflect.Float64: + p := asFloat64(param) return field.Float() == p } @@ -2276,8 +2305,13 @@ func isLte(fl FieldLevel) bool { return field.Uint() <= p - case reflect.Float32, reflect.Float64: - p := asFloat(param) + case reflect.Float32: + p := asFloat32(param) + + return field.Float() <= p + + case reflect.Float64: + p := asFloat64(param) return field.Float() <= p @@ -2322,8 +2356,13 @@ func isLt(fl FieldLevel) bool { return field.Uint() < p - case reflect.Float32, reflect.Float64: - p := asFloat(param) + case reflect.Float32: + p := asFloat32(param) + + return field.Float() < p + + case reflect.Float64: + p := asFloat64(param) return field.Float() < p @@ -2808,6 +2847,23 @@ func isMongoDB(fl FieldLevel) bool { return mongodbRegex.MatchString(val) } +// isSpiceDB is the validation function for validating if the current field's value is valid for use with Authzed SpiceDB in the indicated way +func isSpiceDB(fl FieldLevel) bool { + val := fl.Field().String() + param := fl.Param() + + switch param { + case "permission": + return spicedbPermissionRegex.MatchString(val) + case "type": + return spicedbTypeRegex.MatchString(val) + case "id", "": + return spicedbIDRegex.MatchString(val) + } + + panic("Unrecognized parameter: " + param) +} + // isCreditCard is the validation function for validating if the current field's value is a valid credit card number func isCreditCard(fl FieldLevel) bool { val := fl.Field().String() diff --git a/vendor/github.com/go-playground/validator/v10/cache.go b/vendor/github.com/go-playground/validator/v10/cache.go index bbfd2a4af1..ddd37b8329 100644 --- a/vendor/github.com/go-playground/validator/v10/cache.go +++ b/vendor/github.com/go-playground/validator/v10/cache.go @@ -20,6 +20,7 @@ const ( typeOr typeKeys typeEndKeys + typeNestedStructLevel ) const ( @@ -152,7 +153,7 @@ func (v *Validate) extractStructCache(current reflect.Value, sName string) *cStr // and so only struct level caching can be used instead of combined with Field tag caching if len(tag) > 0 { - ctag, _ = v.parseFieldTagsRecursive(tag, fld.Name, "", false) + ctag, _ = v.parseFieldTagsRecursive(tag, fld, "", false) } else { // even if field doesn't have validations need cTag for traversing to potential inner/nested // elements of the field. @@ -171,7 +172,7 @@ func (v *Validate) extractStructCache(current reflect.Value, sName string) *cStr return cs } -func (v *Validate) parseFieldTagsRecursive(tag string, fieldName string, alias string, hasAlias bool) (firstCtag *cTag, current *cTag) { +func (v *Validate) parseFieldTagsRecursive(tag string, field reflect.StructField, alias string, hasAlias bool) (firstCtag *cTag, current *cTag) { var t string noAlias := len(alias) == 0 tags := strings.Split(tag, tagSeparator) @@ -185,9 +186,9 @@ func (v *Validate) parseFieldTagsRecursive(tag string, fieldName string, alias s // check map for alias and process new tags, otherwise process as usual if tagsVal, found := v.aliases[t]; found { if i == 0 { - firstCtag, current = v.parseFieldTagsRecursive(tagsVal, fieldName, t, true) + firstCtag, current = v.parseFieldTagsRecursive(tagsVal, field, t, true) } else { - next, curr := v.parseFieldTagsRecursive(tagsVal, fieldName, t, true) + next, curr := v.parseFieldTagsRecursive(tagsVal, field, t, true) current.next, current = next, curr } @@ -235,7 +236,7 @@ func (v *Validate) parseFieldTagsRecursive(tag string, fieldName string, alias s } } - current.keys, _ = v.parseFieldTagsRecursive(string(b[:len(b)-1]), fieldName, "", false) + current.keys, _ = v.parseFieldTagsRecursive(string(b[:len(b)-1]), field, "", false) continue case endKeysTag: @@ -284,14 +285,18 @@ func (v *Validate) parseFieldTagsRecursive(tag string, fieldName string, alias s current.tag = vals[0] if len(current.tag) == 0 { - panic(strings.TrimSpace(fmt.Sprintf(invalidValidation, fieldName))) + panic(strings.TrimSpace(fmt.Sprintf(invalidValidation, field.Name))) } if wrapper, ok := v.validations[current.tag]; ok { current.fn = wrapper.fn current.runValidationWhenNil = wrapper.runValidatinOnNil } else { - panic(strings.TrimSpace(fmt.Sprintf(undefinedValidation, current.tag, fieldName))) + panic(strings.TrimSpace(fmt.Sprintf(undefinedValidation, current.tag, field.Name))) + } + + if current.typeof == typeDefault && isNestedStructOrStructPtr(field) { + current.typeof = typeNestedStructLevel } if len(orVals) > 1 { @@ -319,7 +324,7 @@ func (v *Validate) fetchCacheTag(tag string) *cTag { // isn't parsed again. ctag, found = v.tagCache.Get(tag) if !found { - ctag, _ = v.parseFieldTagsRecursive(tag, "", "", false) + ctag, _ = v.parseFieldTagsRecursive(tag, reflect.StructField{}, "", false) v.tagCache.Set(tag, ctag) } } diff --git a/vendor/github.com/go-playground/validator/v10/doc.go b/vendor/github.com/go-playground/validator/v10/doc.go index f5aa9e5230..d1eff50fa7 100644 --- a/vendor/github.com/go-playground/validator/v10/doc.go +++ b/vendor/github.com/go-playground/validator/v10/doc.go @@ -247,7 +247,7 @@ Example #2 This validates that the value is not the data types default zero value. For numbers ensures value is not zero. For strings ensures value is not "". For slices, maps, pointers, interfaces, channels and functions -ensures the value is not nil. +ensures the value is not nil. For structs ensures value is not the zero value. Usage: required @@ -256,7 +256,7 @@ ensures the value is not nil. The field under validation must be present and not empty only if all the other specified fields are equal to the value following the specified field. For strings ensures value is not "". For slices, maps, pointers, -interfaces, channels and functions ensures the value is not nil. +interfaces, channels and functions ensures the value is not nil. For structs ensures value is not the zero value. Usage: required_if @@ -273,7 +273,7 @@ Examples: The field under validation must be present and not empty unless all the other specified fields are equal to the value following the specified field. For strings ensures value is not "". For slices, maps, pointers, -interfaces, channels and functions ensures the value is not nil. +interfaces, channels and functions ensures the value is not nil. For structs ensures value is not the zero value. Usage: required_unless @@ -290,7 +290,7 @@ Examples: The field under validation must be present and not empty only if any of the other specified fields are present. For strings ensures value is not "". For slices, maps, pointers, interfaces, channels and functions -ensures the value is not nil. +ensures the value is not nil. For structs ensures value is not the zero value. Usage: required_with @@ -307,7 +307,7 @@ Examples: The field under validation must be present and not empty only if all of the other specified fields are present. For strings ensures value is not "". For slices, maps, pointers, interfaces, channels and functions -ensures the value is not nil. +ensures the value is not nil. For structs ensures value is not the zero value. Usage: required_with_all @@ -321,7 +321,7 @@ Example: The field under validation must be present and not empty only when any of the other specified fields are not present. For strings ensures value is not "". For slices, maps, pointers, interfaces, channels and functions -ensures the value is not nil. +ensures the value is not nil. For structs ensures value is not the zero value. Usage: required_without @@ -338,7 +338,7 @@ Examples: The field under validation must be present and not empty only when all of the other specified fields are not present. For strings ensures value is not "". For slices, maps, pointers, interfaces, channels and functions -ensures the value is not nil. +ensures the value is not nil. For structs ensures value is not the zero value. Usage: required_without_all @@ -352,7 +352,7 @@ Example: The field under validation must not be present or not empty only if all the other specified fields are equal to the value following the specified field. For strings ensures value is not "". For slices, maps, pointers, -interfaces, channels and functions ensures the value is not nil. +interfaces, channels and functions ensures the value is not nil. For structs ensures value is not the zero value. Usage: excluded_if @@ -369,7 +369,7 @@ Examples: The field under validation must not be present or empty unless all the other specified fields are equal to the value following the specified field. For strings ensures value is not "". For slices, maps, pointers, -interfaces, channels and functions ensures the value is not nil. +interfaces, channels and functions ensures the value is not nil. For structs ensures value is not the zero value. Usage: excluded_unless @@ -879,8 +879,6 @@ This is done using os.Stat and github.com/gabriel-vasile/mimetype Usage: image -# URL String - # File Path This validates that a string value contains a valid file path but does not @@ -1384,6 +1382,12 @@ This validates that a string value contains a valid cron expression. Usage: cron +# SpiceDb ObjectID/Permission/Object Type + +This validates that a string is valid for use with SpiceDb for the indicated purpose. If no purpose is given, a purpose of 'id' is assumed. + + Usage: spicedb=id|permission|type + # Alias Validators and Tags Alias Validators and Tags diff --git a/vendor/github.com/go-playground/validator/v10/regexes.go b/vendor/github.com/go-playground/validator/v10/regexes.go index ba450b3d05..6c8f985607 100644 --- a/vendor/github.com/go-playground/validator/v10/regexes.go +++ b/vendor/github.com/go-playground/validator/v10/regexes.go @@ -68,6 +68,9 @@ const ( cveRegexString = `^CVE-(1999|2\d{3})-(0[^0]\d{2}|0\d[^0]\d{1}|0\d{2}[^0]|[1-9]{1}\d{3,})$` // CVE Format Id https://cve.mitre.org/cve/identifiers/syntaxchange.html mongodbRegexString = "^[a-f\\d]{24}$" cronRegexString = `(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)|((((\d+,)+\d+|(\d+(\/|-)\d+)|\d+|\*) ?){5,7})` + spicedbIDRegexString = `^(([a-zA-Z0-9/_|\-=+]{1,})|\*)$` + spicedbPermissionRegexString = "^([a-z][a-z0-9_]{1,62}[a-z0-9])?$" + spicedbTypeRegexString = "^([a-z][a-z0-9_]{1,61}[a-z0-9]/)?[a-z][a-z0-9_]{1,62}[a-z0-9]$" ) var ( @@ -134,4 +137,7 @@ var ( cveRegex = regexp.MustCompile(cveRegexString) mongodbRegex = regexp.MustCompile(mongodbRegexString) cronRegex = regexp.MustCompile(cronRegexString) + spicedbIDRegex = regexp.MustCompile(spicedbIDRegexString) + spicedbPermissionRegex = regexp.MustCompile(spicedbPermissionRegexString) + spicedbTypeRegex = regexp.MustCompile(spicedbTypeRegexString) ) diff --git a/vendor/github.com/go-playground/validator/v10/util.go b/vendor/github.com/go-playground/validator/v10/util.go index 3925cfe1cd..084d46173d 100644 --- a/vendor/github.com/go-playground/validator/v10/util.go +++ b/vendor/github.com/go-playground/validator/v10/util.go @@ -261,13 +261,19 @@ func asUint(param string) uint64 { return i } -// asFloat returns the parameter as a float64 +// asFloat64 returns the parameter as a float64 // or panics if it can't convert -func asFloat(param string) float64 { - +func asFloat64(param string) float64 { i, err := strconv.ParseFloat(param, 64) panicIf(err) + return i +} +// asFloat64 returns the parameter as a float64 +// or panics if it can't convert +func asFloat32(param string) float64 { + i, err := strconv.ParseFloat(param, 32) + panicIf(err) return i } @@ -286,3 +292,11 @@ func panicIf(err error) { panic(err.Error()) } } + +func isNestedStructOrStructPtr(v reflect.StructField) bool { + if v.Type == nil { + return false + } + kind := v.Type.Kind() + return kind == reflect.Struct || kind == reflect.Ptr && v.Type.Elem().Kind() == reflect.Struct +} diff --git a/vendor/github.com/go-playground/validator/v10/validator.go b/vendor/github.com/go-playground/validator/v10/validator.go index 6f6d53ada7..a6fa1f5d53 100644 --- a/vendor/github.com/go-playground/validator/v10/validator.go +++ b/vendor/github.com/go-playground/validator/v10/validator.go @@ -170,7 +170,7 @@ func (v *validate) traverseField(ctx context.Context, parent reflect.Value, curr if ct.typeof == typeStructOnly { goto CONTINUE - } else if ct.typeof == typeIsDefault { + } else if ct.typeof == typeIsDefault || ct.typeof == typeNestedStructLevel { // set Field Level fields v.slflParent = parent v.flField = current diff --git a/vendor/github.com/google/pprof/profile/encode.go b/vendor/github.com/google/pprof/profile/encode.go index ab7f03ae26..182c926b90 100644 --- a/vendor/github.com/google/pprof/profile/encode.go +++ b/vendor/github.com/google/pprof/profile/encode.go @@ -17,6 +17,7 @@ package profile import ( "errors" "sort" + "strings" ) func (p *Profile) decoder() []decoder { @@ -183,12 +184,13 @@ var profileDecoder = []decoder{ // repeated Location location = 4 func(b *buffer, m message) error { x := new(Location) - x.Line = make([]Line, 0, 8) // Pre-allocate Line buffer + x.Line = b.tmpLines[:0] // Use shared space temporarily pp := m.(*Profile) pp.Location = append(pp.Location, x) err := decodeMessage(b, x) - var tmp []Line - x.Line = append(tmp, x.Line...) // Shrink to allocated size + b.tmpLines = x.Line[:0] + // Copy to shrink size and detach from shared space. + x.Line = append([]Line(nil), x.Line...) return err }, // repeated Function function = 5 @@ -252,6 +254,14 @@ func (p *Profile) postDecode() error { } else { mappings[m.ID] = m } + + // If this a main linux kernel mapping with a relocation symbol suffix + // ("[kernel.kallsyms]_text"), extract said suffix. + // It is fairly hacky to handle at this level, but the alternatives appear even worse. + const prefix = "[kernel.kallsyms]" + if strings.HasPrefix(m.File, prefix) { + m.KernelRelocationSymbol = m.File[len(prefix):] + } } functions := make(map[uint64]*Function, len(p.Function)) @@ -298,41 +308,52 @@ func (p *Profile) postDecode() error { st.Unit, err = getString(p.stringTable, &st.unitX, err) } + // Pre-allocate space for all locations. + numLocations := 0 + for _, s := range p.Sample { + numLocations += len(s.locationIDX) + } + locBuffer := make([]*Location, numLocations) + for _, s := range p.Sample { - labels := make(map[string][]string, len(s.labelX)) - numLabels := make(map[string][]int64, len(s.labelX)) - numUnits := make(map[string][]string, len(s.labelX)) - for _, l := range s.labelX { - var key, value string - key, err = getString(p.stringTable, &l.keyX, err) - if l.strX != 0 { - value, err = getString(p.stringTable, &l.strX, err) - labels[key] = append(labels[key], value) - } else if l.numX != 0 || l.unitX != 0 { - numValues := numLabels[key] - units := numUnits[key] - if l.unitX != 0 { - var unit string - unit, err = getString(p.stringTable, &l.unitX, err) - units = padStringArray(units, len(numValues)) - numUnits[key] = append(units, unit) + if len(s.labelX) > 0 { + labels := make(map[string][]string, len(s.labelX)) + numLabels := make(map[string][]int64, len(s.labelX)) + numUnits := make(map[string][]string, len(s.labelX)) + for _, l := range s.labelX { + var key, value string + key, err = getString(p.stringTable, &l.keyX, err) + if l.strX != 0 { + value, err = getString(p.stringTable, &l.strX, err) + labels[key] = append(labels[key], value) + } else if l.numX != 0 || l.unitX != 0 { + numValues := numLabels[key] + units := numUnits[key] + if l.unitX != 0 { + var unit string + unit, err = getString(p.stringTable, &l.unitX, err) + units = padStringArray(units, len(numValues)) + numUnits[key] = append(units, unit) + } + numLabels[key] = append(numLabels[key], l.numX) } - numLabels[key] = append(numLabels[key], l.numX) } - } - if len(labels) > 0 { - s.Label = labels - } - if len(numLabels) > 0 { - s.NumLabel = numLabels - for key, units := range numUnits { - if len(units) > 0 { - numUnits[key] = padStringArray(units, len(numLabels[key])) + if len(labels) > 0 { + s.Label = labels + } + if len(numLabels) > 0 { + s.NumLabel = numLabels + for key, units := range numUnits { + if len(units) > 0 { + numUnits[key] = padStringArray(units, len(numLabels[key])) + } } + s.NumUnit = numUnits } - s.NumUnit = numUnits } - s.Location = make([]*Location, len(s.locationIDX)) + + s.Location = locBuffer[:len(s.locationIDX)] + locBuffer = locBuffer[len(s.locationIDX):] for i, lid := range s.locationIDX { if lid < uint64(len(locationIds)) { s.Location[i] = locationIds[lid] diff --git a/vendor/github.com/google/pprof/profile/filter.go b/vendor/github.com/google/pprof/profile/filter.go index ea8e66c68d..c794b93906 100644 --- a/vendor/github.com/google/pprof/profile/filter.go +++ b/vendor/github.com/google/pprof/profile/filter.go @@ -22,6 +22,10 @@ import "regexp" // samples where at least one frame matches focus but none match ignore. // Returns true is the corresponding regexp matched at least one sample. func (p *Profile) FilterSamplesByName(focus, ignore, hide, show *regexp.Regexp) (fm, im, hm, hnm bool) { + if focus == nil && ignore == nil && hide == nil && show == nil { + fm = true // Missing focus implies a match + return + } focusOrIgnore := make(map[uint64]bool) hidden := make(map[uint64]bool) for _, l := range p.Location { diff --git a/vendor/github.com/google/pprof/profile/legacy_profile.go b/vendor/github.com/google/pprof/profile/legacy_profile.go index 0c8f3bb5b7..8d07fd6c27 100644 --- a/vendor/github.com/google/pprof/profile/legacy_profile.go +++ b/vendor/github.com/google/pprof/profile/legacy_profile.go @@ -295,11 +295,12 @@ func get64b(b []byte) (uint64, []byte) { // // The general format for profilez samples is a sequence of words in // binary format. The first words are a header with the following data: -// 1st word -- 0 -// 2nd word -- 3 -// 3rd word -- 0 if a c++ application, 1 if a java application. -// 4th word -- Sampling period (in microseconds). -// 5th word -- Padding. +// +// 1st word -- 0 +// 2nd word -- 3 +// 3rd word -- 0 if a c++ application, 1 if a java application. +// 4th word -- Sampling period (in microseconds). +// 5th word -- Padding. func parseCPU(b []byte) (*Profile, error) { var parse func([]byte) (uint64, []byte) var n1, n2, n3, n4, n5 uint64 @@ -403,15 +404,18 @@ func cleanupDuplicateLocations(p *Profile) { // // profilez samples are a repeated sequence of stack frames of the // form: -// 1st word -- The number of times this stack was encountered. -// 2nd word -- The size of the stack (StackSize). -// 3rd word -- The first address on the stack. -// ... -// StackSize + 2 -- The last address on the stack +// +// 1st word -- The number of times this stack was encountered. +// 2nd word -- The size of the stack (StackSize). +// 3rd word -- The first address on the stack. +// ... +// StackSize + 2 -- The last address on the stack +// // The last stack trace is of the form: -// 1st word -- 0 -// 2nd word -- 1 -// 3rd word -- 0 +// +// 1st word -- 0 +// 2nd word -- 1 +// 3rd word -- 0 // // Addresses from stack traces may point to the next instruction after // each call. Optionally adjust by -1 to land somewhere on the actual @@ -861,7 +865,6 @@ func parseThread(b []byte) (*Profile, error) { // Recognize each thread and populate profile samples. for !isMemoryMapSentinel(line) { if strings.HasPrefix(line, "---- no stack trace for") { - line = "" break } if t := threadStartRE.FindStringSubmatch(line); len(t) != 4 { diff --git a/vendor/github.com/google/pprof/profile/merge.go b/vendor/github.com/google/pprof/profile/merge.go index 9978e7330e..4b66282cb8 100644 --- a/vendor/github.com/google/pprof/profile/merge.go +++ b/vendor/github.com/google/pprof/profile/merge.go @@ -15,6 +15,7 @@ package profile import ( + "encoding/binary" "fmt" "sort" "strconv" @@ -58,7 +59,7 @@ func Merge(srcs []*Profile) (*Profile, error) { for _, src := range srcs { // Clear the profile-specific hash tables - pm.locationsByID = make(map[uint64]*Location, len(src.Location)) + pm.locationsByID = makeLocationIDMap(len(src.Location)) pm.functionsByID = make(map[uint64]*Function, len(src.Function)) pm.mappingsByID = make(map[uint64]mapInfo, len(src.Mapping)) @@ -136,7 +137,7 @@ type profileMerger struct { p *Profile // Memoization tables within a profile. - locationsByID map[uint64]*Location + locationsByID locationIDMap functionsByID map[uint64]*Function mappingsByID map[uint64]mapInfo @@ -153,6 +154,16 @@ type mapInfo struct { } func (pm *profileMerger) mapSample(src *Sample) *Sample { + // Check memoization table + k := pm.sampleKey(src) + if ss, ok := pm.samples[k]; ok { + for i, v := range src.Value { + ss.Value[i] += v + } + return ss + } + + // Make new sample. s := &Sample{ Location: make([]*Location, len(src.Location)), Value: make([]int64, len(src.Value)), @@ -177,52 +188,98 @@ func (pm *profileMerger) mapSample(src *Sample) *Sample { s.NumLabel[k] = vv s.NumUnit[k] = uu } - // Check memoization table. Must be done on the remapped location to - // account for the remapped mapping. Add current values to the - // existing sample. - k := s.key() - if ss, ok := pm.samples[k]; ok { - for i, v := range src.Value { - ss.Value[i] += v - } - return ss - } copy(s.Value, src.Value) pm.samples[k] = s pm.p.Sample = append(pm.p.Sample, s) return s } -// key generates sampleKey to be used as a key for maps. -func (sample *Sample) key() sampleKey { - ids := make([]string, len(sample.Location)) - for i, l := range sample.Location { - ids[i] = strconv.FormatUint(l.ID, 16) +func (pm *profileMerger) sampleKey(sample *Sample) sampleKey { + // Accumulate contents into a string. + var buf strings.Builder + buf.Grow(64) // Heuristic to avoid extra allocs + + // encode a number + putNumber := func(v uint64) { + var num [binary.MaxVarintLen64]byte + n := binary.PutUvarint(num[:], v) + buf.Write(num[:n]) + } + + // encode a string prefixed with its length. + putDelimitedString := func(s string) { + putNumber(uint64(len(s))) + buf.WriteString(s) + } + + for _, l := range sample.Location { + // Get the location in the merged profile, which may have a different ID. + if loc := pm.mapLocation(l); loc != nil { + putNumber(loc.ID) + } } + putNumber(0) // Delimiter - labels := make([]string, 0, len(sample.Label)) - for k, v := range sample.Label { - labels = append(labels, fmt.Sprintf("%q%q", k, v)) + for _, l := range sortedKeys1(sample.Label) { + putDelimitedString(l) + values := sample.Label[l] + putNumber(uint64(len(values))) + for _, v := range values { + putDelimitedString(v) + } } - sort.Strings(labels) - numlabels := make([]string, 0, len(sample.NumLabel)) - for k, v := range sample.NumLabel { - numlabels = append(numlabels, fmt.Sprintf("%q%x%x", k, v, sample.NumUnit[k])) + for _, l := range sortedKeys2(sample.NumLabel) { + putDelimitedString(l) + values := sample.NumLabel[l] + putNumber(uint64(len(values))) + for _, v := range values { + putNumber(uint64(v)) + } + units := sample.NumUnit[l] + putNumber(uint64(len(units))) + for _, v := range units { + putDelimitedString(v) + } } - sort.Strings(numlabels) - return sampleKey{ - strings.Join(ids, "|"), - strings.Join(labels, ""), - strings.Join(numlabels, ""), + return sampleKey(buf.String()) +} + +type sampleKey string + +// sortedKeys1 returns the sorted keys found in a string->[]string map. +// +// Note: this is currently non-generic since github pprof runs golint, +// which does not support generics. When that issue is fixed, it can +// be merged with sortedKeys2 and made into a generic function. +func sortedKeys1(m map[string][]string) []string { + if len(m) == 0 { + return nil } + keys := make([]string, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + sort.Strings(keys) + return keys } -type sampleKey struct { - locations string - labels string - numlabels string +// sortedKeys2 returns the sorted keys found in a string->[]int64 map. +// +// Note: this is currently non-generic since github pprof runs golint, +// which does not support generics. When that issue is fixed, it can +// be merged with sortedKeys1 and made into a generic function. +func sortedKeys2(m map[string][]int64) []string { + if len(m) == 0 { + return nil + } + keys := make([]string, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + sort.Strings(keys) + return keys } func (pm *profileMerger) mapLocation(src *Location) *Location { @@ -230,7 +287,7 @@ func (pm *profileMerger) mapLocation(src *Location) *Location { return nil } - if l, ok := pm.locationsByID[src.ID]; ok { + if l := pm.locationsByID.get(src.ID); l != nil { return l } @@ -249,10 +306,10 @@ func (pm *profileMerger) mapLocation(src *Location) *Location { // account for the remapped mapping ID. k := l.key() if ll, ok := pm.locations[k]; ok { - pm.locationsByID[src.ID] = ll + pm.locationsByID.set(src.ID, ll) return ll } - pm.locationsByID[src.ID] = l + pm.locationsByID.set(src.ID, l) pm.locations[k] = l pm.p.Location = append(pm.p.Location, l) return l @@ -303,16 +360,17 @@ func (pm *profileMerger) mapMapping(src *Mapping) mapInfo { return mi } m := &Mapping{ - ID: uint64(len(pm.p.Mapping) + 1), - Start: src.Start, - Limit: src.Limit, - Offset: src.Offset, - File: src.File, - BuildID: src.BuildID, - HasFunctions: src.HasFunctions, - HasFilenames: src.HasFilenames, - HasLineNumbers: src.HasLineNumbers, - HasInlineFrames: src.HasInlineFrames, + ID: uint64(len(pm.p.Mapping) + 1), + Start: src.Start, + Limit: src.Limit, + Offset: src.Offset, + File: src.File, + KernelRelocationSymbol: src.KernelRelocationSymbol, + BuildID: src.BuildID, + HasFunctions: src.HasFunctions, + HasFilenames: src.HasFilenames, + HasLineNumbers: src.HasLineNumbers, + HasInlineFrames: src.HasInlineFrames, } pm.p.Mapping = append(pm.p.Mapping, m) @@ -479,3 +537,131 @@ func (p *Profile) compatible(pb *Profile) error { func equalValueType(st1, st2 *ValueType) bool { return st1.Type == st2.Type && st1.Unit == st2.Unit } + +// locationIDMap is like a map[uint64]*Location, but provides efficiency for +// ids that are densely numbered, which is often the case. +type locationIDMap struct { + dense []*Location // indexed by id for id < len(dense) + sparse map[uint64]*Location // indexed by id for id >= len(dense) +} + +func makeLocationIDMap(n int) locationIDMap { + return locationIDMap{ + dense: make([]*Location, n), + sparse: map[uint64]*Location{}, + } +} + +func (lm locationIDMap) get(id uint64) *Location { + if id < uint64(len(lm.dense)) { + return lm.dense[int(id)] + } + return lm.sparse[id] +} + +func (lm locationIDMap) set(id uint64, loc *Location) { + if id < uint64(len(lm.dense)) { + lm.dense[id] = loc + return + } + lm.sparse[id] = loc +} + +// CompatibilizeSampleTypes makes profiles compatible to be compared/merged. It +// keeps sample types that appear in all profiles only and drops/reorders the +// sample types as necessary. +// +// In the case of sample types order is not the same for given profiles the +// order is derived from the first profile. +// +// Profiles are modified in-place. +// +// It returns an error if the sample type's intersection is empty. +func CompatibilizeSampleTypes(ps []*Profile) error { + sTypes := commonSampleTypes(ps) + if len(sTypes) == 0 { + return fmt.Errorf("profiles have empty common sample type list") + } + for _, p := range ps { + if err := compatibilizeSampleTypes(p, sTypes); err != nil { + return err + } + } + return nil +} + +// commonSampleTypes returns sample types that appear in all profiles in the +// order how they ordered in the first profile. +func commonSampleTypes(ps []*Profile) []string { + if len(ps) == 0 { + return nil + } + sTypes := map[string]int{} + for _, p := range ps { + for _, st := range p.SampleType { + sTypes[st.Type]++ + } + } + var res []string + for _, st := range ps[0].SampleType { + if sTypes[st.Type] == len(ps) { + res = append(res, st.Type) + } + } + return res +} + +// compatibilizeSampleTypes drops sample types that are not present in sTypes +// list and reorder them if needed. +// +// It sets DefaultSampleType to sType[0] if it is not in sType list. +// +// It assumes that all sample types from the sTypes list are present in the +// given profile otherwise it returns an error. +func compatibilizeSampleTypes(p *Profile, sTypes []string) error { + if len(sTypes) == 0 { + return fmt.Errorf("sample type list is empty") + } + defaultSampleType := sTypes[0] + reMap, needToModify := make([]int, len(sTypes)), false + for i, st := range sTypes { + if st == p.DefaultSampleType { + defaultSampleType = p.DefaultSampleType + } + idx := searchValueType(p.SampleType, st) + if idx < 0 { + return fmt.Errorf("%q sample type is not found in profile", st) + } + reMap[i] = idx + if idx != i { + needToModify = true + } + } + if !needToModify && len(sTypes) == len(p.SampleType) { + return nil + } + p.DefaultSampleType = defaultSampleType + oldSampleTypes := p.SampleType + p.SampleType = make([]*ValueType, len(sTypes)) + for i, idx := range reMap { + p.SampleType[i] = oldSampleTypes[idx] + } + values := make([]int64, len(sTypes)) + for _, s := range p.Sample { + for i, idx := range reMap { + values[i] = s.Value[idx] + } + s.Value = s.Value[:len(values)] + copy(s.Value, values) + } + return nil +} + +func searchValueType(vts []*ValueType, s string) int { + for i, vt := range vts { + if vt.Type == s { + return i + } + } + return -1 +} diff --git a/vendor/github.com/google/pprof/profile/profile.go b/vendor/github.com/google/pprof/profile/profile.go index 2590c8ddb4..60ef7e9268 100644 --- a/vendor/github.com/google/pprof/profile/profile.go +++ b/vendor/github.com/google/pprof/profile/profile.go @@ -21,7 +21,6 @@ import ( "compress/gzip" "fmt" "io" - "io/ioutil" "math" "path/filepath" "regexp" @@ -73,9 +72,23 @@ type ValueType struct { type Sample struct { Location []*Location Value []int64 - Label map[string][]string + // Label is a per-label-key map to values for string labels. + // + // In general, having multiple values for the given label key is strongly + // discouraged - see docs for the sample label field in profile.proto. The + // main reason this unlikely state is tracked here is to make the + // decoding->encoding roundtrip not lossy. But we expect that the value + // slices present in this map are always of length 1. + Label map[string][]string + // NumLabel is a per-label-key map to values for numeric labels. See a note + // above on handling multiple values for a label. NumLabel map[string][]int64 - NumUnit map[string][]string + // NumUnit is a per-label-key map to the unit names of corresponding numeric + // label values. The unit info may be missing even if the label is in + // NumLabel, see the docs in profile.proto for details. When the value is + // slice is present and not nil, its length must be equal to the length of + // the corresponding value slice in NumLabel. + NumUnit map[string][]string locationIDX []uint64 labelX []label @@ -106,6 +119,15 @@ type Mapping struct { fileX int64 buildIDX int64 + + // Name of the kernel relocation symbol ("_text" or "_stext"), extracted from File. + // For linux kernel mappings generated by some tools, correct symbolization depends + // on knowing which of the two possible relocation symbols was used for `Start`. + // This is given to us as a suffix in `File` (e.g. "[kernel.kallsyms]_stext"). + // + // Note, this public field is not persisted in the proto. For the purposes of + // copying / merging / hashing profiles, it is considered subsumed by `File`. + KernelRelocationSymbol string } // Location corresponds to Profile.Location @@ -144,7 +166,7 @@ type Function struct { // may be a gzip-compressed encoded protobuf or one of many legacy // profile formats which may be unsupported in the future. func Parse(r io.Reader) (*Profile, error) { - data, err := ioutil.ReadAll(r) + data, err := io.ReadAll(r) if err != nil { return nil, err } @@ -159,7 +181,7 @@ func ParseData(data []byte) (*Profile, error) { if len(data) >= 2 && data[0] == 0x1f && data[1] == 0x8b { gz, err := gzip.NewReader(bytes.NewBuffer(data)) if err == nil { - data, err = ioutil.ReadAll(gz) + data, err = io.ReadAll(gz) } if err != nil { return nil, fmt.Errorf("decompressing profile: %v", err) @@ -707,6 +729,35 @@ func (s *Sample) HasLabel(key, value string) bool { return false } +// SetNumLabel sets the specified key to the specified value for all samples in the +// profile. "unit" is a slice that describes the units that each corresponding member +// of "values" is measured in (e.g. bytes or seconds). If there is no relevant +// unit for a given value, that member of "unit" should be the empty string. +// "unit" must either have the same length as "value", or be nil. +func (p *Profile) SetNumLabel(key string, value []int64, unit []string) { + for _, sample := range p.Sample { + if sample.NumLabel == nil { + sample.NumLabel = map[string][]int64{key: value} + } else { + sample.NumLabel[key] = value + } + if sample.NumUnit == nil { + sample.NumUnit = map[string][]string{key: unit} + } else { + sample.NumUnit[key] = unit + } + } +} + +// RemoveNumLabel removes all numerical labels associated with the specified key for all +// samples in the profile. +func (p *Profile) RemoveNumLabel(key string) { + for _, sample := range p.Sample { + delete(sample.NumLabel, key) + delete(sample.NumUnit, key) + } +} + // DiffBaseSample returns true if a sample belongs to the diff base and false // otherwise. func (s *Sample) DiffBaseSample() bool { diff --git a/vendor/github.com/google/pprof/profile/proto.go b/vendor/github.com/google/pprof/profile/proto.go index 539ad3ab33..a15696ba16 100644 --- a/vendor/github.com/google/pprof/profile/proto.go +++ b/vendor/github.com/google/pprof/profile/proto.go @@ -39,11 +39,12 @@ import ( ) type buffer struct { - field int // field tag - typ int // proto wire type code for field - u64 uint64 - data []byte - tmp [16]byte + field int // field tag + typ int // proto wire type code for field + u64 uint64 + data []byte + tmp [16]byte + tmpLines []Line // temporary storage used while decoding "repeated Line". } type decoder func(*buffer, message) error @@ -286,7 +287,6 @@ func decodeInt64s(b *buffer, x *[]int64) error { if b.typ == 2 { // Packed encoding data := b.data - tmp := make([]int64, 0, len(data)) // Maximally sized for len(data) > 0 { var u uint64 var err error @@ -294,9 +294,8 @@ func decodeInt64s(b *buffer, x *[]int64) error { if u, data, err = decodeVarint(data); err != nil { return err } - tmp = append(tmp, int64(u)) + *x = append(*x, int64(u)) } - *x = append(*x, tmp...) return nil } var i int64 @@ -319,7 +318,6 @@ func decodeUint64s(b *buffer, x *[]uint64) error { if b.typ == 2 { data := b.data // Packed encoding - tmp := make([]uint64, 0, len(data)) // Maximally sized for len(data) > 0 { var u uint64 var err error @@ -327,9 +325,8 @@ func decodeUint64s(b *buffer, x *[]uint64) error { if u, data, err = decodeVarint(data); err != nil { return err } - tmp = append(tmp, u) + *x = append(*x, u) } - *x = append(*x, tmp...) return nil } var u uint64 diff --git a/vendor/github.com/google/pprof/profile/prune.go b/vendor/github.com/google/pprof/profile/prune.go index 02d21a8184..b2f9fd5466 100644 --- a/vendor/github.com/google/pprof/profile/prune.go +++ b/vendor/github.com/google/pprof/profile/prune.go @@ -62,15 +62,31 @@ func (p *Profile) Prune(dropRx, keepRx *regexp.Regexp) { prune := make(map[uint64]bool) pruneBeneath := make(map[uint64]bool) + // simplifyFunc can be expensive, so cache results. + // Note that the same function name can be encountered many times due + // different lines and addresses in the same function. + pruneCache := map[string]bool{} // Map from function to whether or not to prune + pruneFromHere := func(s string) bool { + if r, ok := pruneCache[s]; ok { + return r + } + funcName := simplifyFunc(s) + if dropRx.MatchString(funcName) { + if keepRx == nil || !keepRx.MatchString(funcName) { + pruneCache[s] = true + return true + } + } + pruneCache[s] = false + return false + } + for _, loc := range p.Location { var i int for i = len(loc.Line) - 1; i >= 0; i-- { if fn := loc.Line[i].Function; fn != nil && fn.Name != "" { - funcName := simplifyFunc(fn.Name) - if dropRx.MatchString(funcName) { - if keepRx == nil || !keepRx.MatchString(funcName) { - break - } + if pruneFromHere(fn.Name) { + break } } } diff --git a/vendor/github.com/google/uuid/.travis.yml b/vendor/github.com/google/uuid/.travis.yml deleted file mode 100644 index d8156a60ba..0000000000 --- a/vendor/github.com/google/uuid/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: go - -go: - - 1.4.3 - - 1.5.3 - - tip - -script: - - go test -v ./... diff --git a/vendor/github.com/google/uuid/CHANGELOG.md b/vendor/github.com/google/uuid/CHANGELOG.md new file mode 100644 index 0000000000..2bd78667af --- /dev/null +++ b/vendor/github.com/google/uuid/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +## [1.3.1](https://github.com/google/uuid/compare/v1.3.0...v1.3.1) (2023-08-18) + + +### Bug Fixes + +* Use .EqualFold() to parse urn prefixed UUIDs ([#118](https://github.com/google/uuid/issues/118)) ([574e687](https://github.com/google/uuid/commit/574e6874943741fb99d41764c705173ada5293f0)) + +## Changelog diff --git a/vendor/github.com/google/uuid/CONTRIBUTING.md b/vendor/github.com/google/uuid/CONTRIBUTING.md index 04fdf09f13..5566888726 100644 --- a/vendor/github.com/google/uuid/CONTRIBUTING.md +++ b/vendor/github.com/google/uuid/CONTRIBUTING.md @@ -2,6 +2,22 @@ We definitely welcome patches and contribution to this project! +### Tips + +Commits must be formatted according to the [Conventional Commits Specification](https://www.conventionalcommits.org). + +Always try to include a test case! If it is not possible or not necessary, +please explain why in the pull request description. + +### Releasing + +Commits that would precipitate a SemVer change, as desrcibed in the Conventional +Commits Specification, will trigger [`release-please`](https://github.com/google-github-actions/release-please-action) +to create a release candidate pull request. Once submitted, `release-please` +will create a release. + +For tips on how to work with `release-please`, see its documentation. + ### Legal requirements In order to protect both you and ourselves, you will need to sign the diff --git a/vendor/github.com/google/uuid/README.md b/vendor/github.com/google/uuid/README.md index f765a46f91..3e9a61889d 100644 --- a/vendor/github.com/google/uuid/README.md +++ b/vendor/github.com/google/uuid/README.md @@ -1,6 +1,6 @@ -# uuid ![build status](https://travis-ci.org/google/uuid.svg?branch=master) +# uuid The uuid package generates and inspects UUIDs based on -[RFC 4122](http://tools.ietf.org/html/rfc4122) +[RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122) and DCE 1.1: Authentication and Security Services. This package is based on the github.com/pborman/uuid package (previously named @@ -9,10 +9,12 @@ a UUID is a 16 byte array rather than a byte slice. One loss due to this change is the ability to represent an invalid UUID (vs a NIL UUID). ###### Install -`go get github.com/google/uuid` +```sh +go get github.com/google/uuid +``` ###### Documentation -[![GoDoc](https://godoc.org/github.com/google/uuid?status.svg)](http://godoc.org/github.com/google/uuid) +[![Go Reference](https://pkg.go.dev/badge/github.com/google/uuid.svg)](https://pkg.go.dev/github.com/google/uuid) Full `go doc` style documentation for the package can be viewed online without installing this package by using the GoDoc site here: diff --git a/vendor/github.com/google/uuid/node_js.go b/vendor/github.com/google/uuid/node_js.go index 24b78edc90..b2a0bc8711 100644 --- a/vendor/github.com/google/uuid/node_js.go +++ b/vendor/github.com/google/uuid/node_js.go @@ -7,6 +7,6 @@ package uuid // getHardwareInterface returns nil values for the JS version of the code. -// This remvoves the "net" dependency, because it is not used in the browser. +// This removes the "net" dependency, because it is not used in the browser. // Using the "net" library inflates the size of the transpiled JS code by 673k bytes. func getHardwareInterface(name string) (string, []byte) { return "", nil } diff --git a/vendor/github.com/google/uuid/uuid.go b/vendor/github.com/google/uuid/uuid.go index a57207aeb6..a56138cc4b 100644 --- a/vendor/github.com/google/uuid/uuid.go +++ b/vendor/github.com/google/uuid/uuid.go @@ -69,7 +69,7 @@ func Parse(s string) (UUID, error) { // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx case 36 + 9: - if strings.ToLower(s[:9]) != "urn:uuid:" { + if !strings.EqualFold(s[:9], "urn:uuid:") { return uuid, fmt.Errorf("invalid urn prefix: %q", s[:9]) } s = s[9:] @@ -101,7 +101,8 @@ func Parse(s string) (UUID, error) { 9, 11, 14, 16, 19, 21, - 24, 26, 28, 30, 32, 34} { + 24, 26, 28, 30, 32, 34, + } { v, ok := xtob(s[x], s[x+1]) if !ok { return uuid, errors.New("invalid UUID format") @@ -117,7 +118,7 @@ func ParseBytes(b []byte) (UUID, error) { switch len(b) { case 36: // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx case 36 + 9: // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - if !bytes.Equal(bytes.ToLower(b[:9]), []byte("urn:uuid:")) { + if !bytes.EqualFold(b[:9], []byte("urn:uuid:")) { return uuid, fmt.Errorf("invalid urn prefix: %q", b[:9]) } b = b[9:] @@ -145,7 +146,8 @@ func ParseBytes(b []byte) (UUID, error) { 9, 11, 14, 16, 19, 21, - 24, 26, 28, 30, 32, 34} { + 24, 26, 28, 30, 32, 34, + } { v, ok := xtob(b[x], b[x+1]) if !ok { return uuid, errors.New("invalid UUID format") diff --git a/vendor/github.com/gookit/color/color_16.go b/vendor/github.com/gookit/color/color_16.go index 0b70efe442..eda226a152 100644 --- a/vendor/github.com/gookit/color/color_16.go +++ b/vendor/github.com/gookit/color/color_16.go @@ -41,15 +41,27 @@ func (o Opts) String() string { * Basic 16 color definition *************************************************************/ -// Base value for foreground/background color -// base: fg 30~37, bg 40~47 -// light: fg 90~97, bg 100~107 +const ( + // OptMax max option value. range: 0 - 9 + OptMax = 10 + // DiffFgBg diff foreground and background color + DiffFgBg = 10 +) + +// Boundary value for foreground/background color 16 +// +// - base: fg 30~37, bg 40~47 +// - light: fg 90~97, bg 100~107 const ( FgBase uint8 = 30 + FgMax uint8 = 37 BgBase uint8 = 40 + BgMax uint8 = 47 HiFgBase uint8 = 90 + HiFgMax uint8 = 97 HiBgBase uint8 = 100 + HiBgMax uint8 = 107 ) // Foreground colors. basic foreground colors 30 - 37 @@ -94,7 +106,7 @@ const ( BgDefault Color = 49 ) -// Extra background color 100 - 107(非标准) +// Extra background color 100 - 107 (non-standard) const ( BgDarkGray Color = iota + 100 BgLightRed @@ -108,7 +120,7 @@ const ( BgGray Color = 100 ) -// Option settings +// Option settings. range: 0 - 9 const ( OpReset Color = iota // 0 重置所有设置 OpBold // 1 加粗 @@ -248,9 +260,9 @@ func (c Color) Println(a ...any) { doPrintlnV2(c.String(), a) } // lightCyan := Cyan.Light() // lightCyan.Print("message") func (c Color) Light() Color { - val := int(c) + val := uint8(c) if val >= 30 && val <= 47 { - return Color(uint8(c) + 60) + return Color(val + 60) } // don't change @@ -264,9 +276,9 @@ func (c Color) Light() Color { // cyan := LightCyan.Darken() // cyan.Print("message") func (c Color) Darken() Color { - val := int(c) + val := uint8(c) if val >= 90 && val <= 107 { - return Color(uint8(c) - 60) + return Color(val - 60) } // don't change @@ -324,7 +336,7 @@ func (c Color) RGB() RGBColor { return emptyRGBColor } - return HEX(Basic2hex(val)) + return HEX(Basic2hex(val), c.IsBg()) } // Code convert to code string. eg "35" @@ -337,8 +349,23 @@ func (c Color) String() string { return strconv.FormatInt(int64(c), 10) } +// IsBg check is background color +func (c Color) IsBg() bool { + val := uint8(c) + return val >= BgBase && val <= BgMax || val >= HiBgBase && val <= HiBgMax +} + +// IsFg check is foreground color +func (c Color) IsFg() bool { + val := uint8(c) + return val >= FgBase && val <= FgMax || val >= HiFgBase && val <= HiFgMax +} + +// IsOption check is option code: 0-9 +func (c Color) IsOption() bool { return uint8(c) < OptMax } + // IsValid color value -func (c Color) IsValid() bool { return c < 107 } +func (c Color) IsValid() bool { return uint8(c) < HiBgMax } /************************************************************* * basic color maps diff --git a/vendor/github.com/gookit/color/color_256.go b/vendor/github.com/gookit/color/color_256.go index 991e604c0a..79ae5f8df3 100644 --- a/vendor/github.com/gookit/color/color_256.go +++ b/vendor/github.com/gookit/color/color_256.go @@ -43,7 +43,8 @@ const ( * 8bit(256) Color: Bit8Color Color256 *************************************************************/ -// Color256 256 color (8 bit), uint8 range at 0 - 255 +// Color256 256 color (8 bit), uint8 range at 0 - 255. +// Support 256 color on windows CMD, PowerShell // // 颜色值使用10进制和16进制都可 0x98 = 152 // @@ -54,10 +55,9 @@ const ( // // example: // -// fg color: [152, 0] -// bg color: [152, 1] +// fg color: [152, 0] +// bg color: [152, 1] // -// NOTICE: now support 256 color on windows CMD, PowerShell // lint warn - Name starts with package name type Color256 [2]uint8 type Bit8Color = Color256 // alias @@ -164,9 +164,7 @@ func (c Color256) String() string { } // IsFg color -func (c Color256) IsFg() bool { - return c[1] == AsFg -} +func (c Color256) IsFg() bool { return c[1] == AsFg } // ToFg 256 color func (c Color256) ToFg() Color256 { @@ -175,9 +173,7 @@ func (c Color256) ToFg() Color256 { } // IsBg color -func (c Color256) IsBg() bool { - return c[1] == AsBg -} +func (c Color256) IsBg() bool { return c[1] == AsBg } // ToBg 256 color func (c Color256) ToBg() Color256 { @@ -186,9 +182,7 @@ func (c Color256) ToBg() Color256 { } // IsEmpty value -func (c Color256) IsEmpty() bool { - return c[1] > 1 -} +func (c Color256) IsEmpty() bool { return c[1] > 1 } /************************************************************* * 8bit(256) Style diff --git a/vendor/github.com/gookit/color/color_rgb.go b/vendor/github.com/gookit/color/color_rgb.go index 724cf6659a..bc129b7153 100644 --- a/vendor/github.com/gookit/color/color_rgb.go +++ b/vendor/github.com/gookit/color/color_rgb.go @@ -44,6 +44,7 @@ const ( *************************************************************/ // RGBColor definition. +// Support RGB color on Windows CMD, PowerShell // // The first to third digits represent the color value. // The last digit represents the foreground(0), background(1), >1 is unset value @@ -54,8 +55,6 @@ const ( // // 3rd: Fg=0, Bg=1, >1: unset value // RGBColor{30,144,255, 0} // RGBColor{30,144,255, 1} -// -// NOTICE: now support RGB color on Windows CMD, PowerShell type RGBColor [4]uint8 // create an empty RGBColor @@ -251,6 +250,18 @@ func (c RGBColor) String() string { return "" } +// ToBg convert to background color +func (c RGBColor) ToBg() RGBColor { + c[3] = AsBg + return c +} + +// ToFg convert to foreground color +func (c RGBColor) ToFg() RGBColor { + c[3] = AsFg + return c +} + // IsEmpty value func (c RGBColor) IsEmpty() bool { return c[3] > AsBg diff --git a/vendor/github.com/gookit/color/convert.go b/vendor/github.com/gookit/color/convert.go index 39aac7d2ee..c71035360f 100644 --- a/vendor/github.com/gookit/color/convert.go +++ b/vendor/github.com/gookit/color/convert.go @@ -52,6 +52,7 @@ var ( // ---------- basic(16) <=> RGB color convert ---------- // refer from Hyper app + // Tip: only keep foreground color, background color need convert to foreground color for convert to RGB basic2hexMap = map[uint8]string{ 30: "000000", // black 31: "c51e14", // red @@ -61,7 +62,7 @@ var ( 35: "c839c5", // magenta 36: "20c5c6", // cyan 37: "c7c7c7", // white - // - don't add bg color + // - don't add bg color, convert to fg color for convert to RGB // 40: "000000", // black // 41: "c51e14", // red // 42: "1dc121", // green @@ -428,10 +429,11 @@ func HexToRGB(hex string) []int { return HexToRgb(hex) } // HexToRgb convert hex color string to RGB numbers // // Usage: -// rgb := HexToRgb("ccc") // rgb: [204 204 204] -// rgb := HexToRgb("aabbcc") // rgb: [170 187 204] -// rgb := HexToRgb("#aabbcc") // rgb: [170 187 204] -// rgb := HexToRgb("0xad99c0") // rgb: [170 187 204] +// +// rgb := HexToRgb("ccc") // rgb: [204 204 204] +// rgb := HexToRgb("aabbcc") // rgb: [170 187 204] +// rgb := HexToRgb("#aabbcc") // rgb: [170 187 204] +// rgb := HexToRgb("0xad99c0") // rgb: [170 187 204] func HexToRgb(hex string) (rgb []int) { hex = strings.TrimSpace(hex) if hex == "" { @@ -474,6 +476,7 @@ func Rgb2hex(rgb []int) string { return RgbToHex(rgb) } // RgbToHex convert RGB-code to hex-code // // Usage: +// // hex := RgbToHex([]int{170, 187, 204}) // hex: "aabbcc" func RgbToHex(rgb []int) string { hexNodes := make([]string, len(rgb)) @@ -488,10 +491,15 @@ func RgbToHex(rgb []int) string { * 4bit(16) color <=> RGB/True color *************************************************************/ +// BasicToHex convert basic color to hex string. +func BasicToHex(val uint8) string { + val = Bg2Fg(val) + return basic2hexMap[val] +} + // Basic2hex convert basic color to hex string. func Basic2hex(val uint8) string { - val = Fg2Bg(val) - return basic2hexMap[val] + return BasicToHex(val) } // Hex2basic convert hex string to basic color code. @@ -663,6 +671,7 @@ func C256ToRgbV1(val uint8) (rgb []uint8) { // returns r, g, and b in the set [0, 255]. // // Usage: +// // HslIntToRgb(0, 100, 50) // red // HslIntToRgb(120, 100, 50) // lime // HslIntToRgb(120, 100, 25) // dark green @@ -677,6 +686,7 @@ func HslIntToRgb(h, s, l int) (rgb []uint8) { // returns r, g, and b in the set [0, 255]. // // Usage: +// // rgbVals := HslToRgb(0, 1, 0.5) // red func HslToRgb(h, s, l float64) (rgb []uint8) { var r, g, b float64 diff --git a/vendor/github.com/gookit/color/style.go b/vendor/github.com/gookit/color/style.go index a009d1d6e5..353d39f10c 100644 --- a/vendor/github.com/gookit/color/style.go +++ b/vendor/github.com/gookit/color/style.go @@ -37,7 +37,8 @@ func (s *Style) Add(cs ...Color) { *s = append(*s, cs...) } -// Render render text +// Render colored text +// // Usage: // // color.New(color.FgGreen).Render("text") @@ -46,8 +47,9 @@ func (s Style) Render(a ...any) string { return RenderCode(s.String(), a...) } -// Renderln render text line. +// Renderln render text with newline. // like Println, will add spaces for each argument +// // Usage: // // color.New(color.FgGreen).Renderln("text", "more") diff --git a/vendor/github.com/itchyny/gojq/.dockerignore b/vendor/github.com/itchyny/gojq/.dockerignore index c8e02dc8f5..ac001636bc 100644 --- a/vendor/github.com/itchyny/gojq/.dockerignore +++ b/vendor/github.com/itchyny/gojq/.dockerignore @@ -6,4 +6,12 @@ *.exe *.test *.out -/.github/ +*.md +*.y +**/*.jq +**/*.json +**/*.yaml +**/*_test.go +.github +_gojq +_tools diff --git a/vendor/github.com/itchyny/gojq/CHANGELOG.md b/vendor/github.com/itchyny/gojq/CHANGELOG.md index 65e605fb6e..8477cd3836 100644 --- a/vendor/github.com/itchyny/gojq/CHANGELOG.md +++ b/vendor/github.com/itchyny/gojq/CHANGELOG.md @@ -1,4 +1,9 @@ # Changelog +## [v0.12.13](https://github.com/itchyny/gojq/compare/v0.12.12..v0.12.13) (2023-06-01) +* implement `@urid` format string to decode URI values +* fix functions returning arrays not to emit nil slices (`flatten`, `group_by`, + `unique`, `unique_by`, `nth`, `indices`, `path`, and `modulemeta.deps`) + ## [v0.12.12](https://github.com/itchyny/gojq/compare/v0.12.11..v0.12.12) (2023-03-01) * fix assignment operator (`=`) with overlapping paths and multiple values (`[[]] | .. = ..`) * fix crash on multiplying large numbers to an empty string (`9223372036854775807 * ""`) diff --git a/vendor/github.com/itchyny/gojq/Dockerfile b/vendor/github.com/itchyny/gojq/Dockerfile index 284ece7762..51f8632e5d 100644 --- a/vendor/github.com/itchyny/gojq/Dockerfile +++ b/vendor/github.com/itchyny/gojq/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19 AS builder +FROM golang:1.20 AS builder WORKDIR /app COPY . . diff --git a/vendor/github.com/itchyny/gojq/README.md b/vendor/github.com/itchyny/gojq/README.md index 6370e4409e..ca13b2f680 100644 --- a/vendor/github.com/itchyny/gojq/README.md +++ b/vendor/github.com/itchyny/gojq/README.md @@ -5,7 +5,7 @@ [![release](https://img.shields.io/github/release/itchyny/gojq/all.svg)](https://github.com/itchyny/gojq/releases) [![pkg.go.dev](https://pkg.go.dev/badge/github.com/itchyny/gojq)](https://pkg.go.dev/github.com/itchyny/gojq) -### Pure Go implementation of [jq](https://github.com/stedolan/jq) +### Pure Go implementation of [jq](https://github.com/jqlang/jq) This is an implementation of jq command written in Go language. You can also embed gojq as a library to your Go products. @@ -77,10 +77,10 @@ docker run -i --rm ghcr.io/itchyny/gojq - gojq implements nice error messages for invalid query and JSON input. The error message of jq is sometimes difficult to tell where to fix the query. - gojq does not keep the order of object keys. I understand this might cause problems for some scripts but basically, we should not rely on the order of object keys. Due to this limitation, gojq does not have `keys_unsorted` function and `--sort-keys` (`-S`) option. I would implement when ordered map is implemented in the standard library of Go but I'm less motivated. - gojq supports arbitrary-precision integer calculation while jq does not; jq loses the precision of large integers when calculation is involved. Note that even with gojq, all mathematical functions, including `floor` and `round`, convert integers to floating-point numbers; only addition, subtraction, multiplication, modulo, and division operators (when divisible) keep the integer precision. To calculate floor division of integers without losing the precision, use `def idivide($n): (. - . % $n) / $n;`. To round down floating-point numbers to integers, use `def ifloor: floor | tostring | tonumber;`, but note that this function does not work with large floating-point numbers and also loses the precision of large integers. -- gojq fixes various bugs of jq. gojq correctly deletes elements of arrays by `|= empty` ([jq#2051](https://github.com/stedolan/jq/issues/2051)). gojq fixes `try`/`catch` handling ([jq#1859](https://github.com/stedolan/jq/issues/1859), [jq#1885](https://github.com/stedolan/jq/issues/1885), [jq#2140](https://github.com/stedolan/jq/issues/2140)). gojq fixes `nth/2` to output nothing when the count is equal to or larger than the stream size ([jq#1867](https://github.com/stedolan/jq/issues/1867)). gojq consistently counts by characters (not by bytes) in `index`, `rindex`, and `indices` functions; `"12345" | .[index("3"):]` results in `"345"` ([jq#1430](https://github.com/stedolan/jq/issues/1430), [jq#1624](https://github.com/stedolan/jq/issues/1624)). gojq handles overlapping occurrence differently in `rindex` and `indices`; `"ababa" | [rindex("aba"), indices("aba")]` results in `[2,[0,2]]` ([jq#2433](https://github.com/stedolan/jq/issues/2433)). gojq supports string indexing; `"abcde"[2]` ([jq#1520](https://github.com/stedolan/jq/issues/1520)). gojq accepts indexing query `.e0` ([jq#1526](https://github.com/stedolan/jq/issues/1526), [jq#1651](https://github.com/stedolan/jq/issues/1651)), and allows `gsub` to handle patterns including `"^"` ([jq#2148](https://github.com/stedolan/jq/issues/2148)). gojq improves variable lexer to allow using keywords for variable names, especially in binding patterns, also disallows spaces after `$` ([jq#526](https://github.com/stedolan/jq/issues/526)). gojq fixes handling files with no newline characters at the end ([jq#2374](https://github.com/stedolan/jq/issues/2374)). -- gojq truncates down floating-point numbers on indexing (`[0] | .[0.5]` results in `0` not `null`), and slicing (`[0,1,2] | .[0.5:1.5]` results in `[0]` not `[0,1]`). gojq parses unary operators with higher precedence than variable binding (`[-1 as $x | 1,$x]` results in `[1,-1]` not `[-1,-1]`). gojq implements `@uri` to escape all the reserved characters defined in RFC 3986, Sec. 2.2 ([jq#1506](https://github.com/stedolan/jq/issues/1506)), and fixes `@base64d` to allow binary string as the decoded string ([jq#1931](https://github.com/stedolan/jq/issues/1931)). gojq improves time formatting and parsing; deals with `%f` in `strftime` and `strptime` ([jq#1409](https://github.com/stedolan/jq/issues/1409)), parses timezone offsets with `fromdate` and `fromdateiso8601` ([jq#1053](https://github.com/stedolan/jq/issues/1053)), supports timezone name/offset with `%Z`/`%z` in `strptime` ([jq#929](https://github.com/stedolan/jq/issues/929), [jq#2195](https://github.com/stedolan/jq/issues/2195)), and looks up correct timezone during daylight saving time on formatting with `%Z` ([jq#1912](https://github.com/stedolan/jq/issues/1912)). gojq supports nanoseconds in date and time functions. +- gojq fixes various bugs of jq. gojq correctly deletes elements of arrays by `|= empty` ([jq#2051](https://github.com/jqlang/jq/issues/2051)). gojq fixes `try`/`catch` handling ([jq#1859](https://github.com/jqlang/jq/issues/1859), [jq#1885](https://github.com/jqlang/jq/issues/1885), [jq#2140](https://github.com/jqlang/jq/issues/2140)). gojq fixes `nth/2` to output nothing when the count is equal to or larger than the stream size ([jq#1867](https://github.com/jqlang/jq/issues/1867)). gojq consistently counts by characters (not by bytes) in `index`, `rindex`, and `indices` functions; `"12345" | .[index("3"):]` results in `"345"` ([jq#1430](https://github.com/jqlang/jq/issues/1430), [jq#1624](https://github.com/jqlang/jq/issues/1624)). gojq handles overlapping occurrence differently in `rindex` and `indices`; `"ababa" | [rindex("aba"), indices("aba")]` results in `[2,[0,2]]` ([jq#2433](https://github.com/jqlang/jq/issues/2433)). gojq supports string indexing; `"abcde"[2]` ([jq#1520](https://github.com/jqlang/jq/issues/1520)). gojq accepts indexing query `.e0` ([jq#1526](https://github.com/jqlang/jq/issues/1526), [jq#1651](https://github.com/jqlang/jq/issues/1651)), and allows `gsub` to handle patterns including `"^"` ([jq#2148](https://github.com/jqlang/jq/issues/2148)). gojq improves variable lexer to allow using keywords for variable names, especially in binding patterns, also disallows spaces after `$` ([jq#526](https://github.com/jqlang/jq/issues/526)). gojq fixes handling files with no newline characters at the end ([jq#2374](https://github.com/jqlang/jq/issues/2374)). +- gojq truncates down floating-point numbers on indexing (`[0] | .[0.5]` results in `0` not `null`), and slicing (`[0,1,2] | .[0.5:1.5]` results in `[0]` not `[0,1]`). gojq parses unary operators with higher precedence than variable binding (`[-1 as $x | 1,$x]` results in `[1,-1]` not `[-1,-1]`). gojq implements `@uri` to escape all the reserved characters defined in RFC 3986, Sec. 2.2 ([jq#1506](https://github.com/jqlang/jq/issues/1506)), and fixes `@base64d` to allow binary string as the decoded string ([jq#1931](https://github.com/jqlang/jq/issues/1931)). gojq improves time formatting and parsing; deals with `%f` in `strftime` and `strptime` ([jq#1409](https://github.com/jqlang/jq/issues/1409)), parses timezone offsets with `fromdate` and `fromdateiso8601` ([jq#1053](https://github.com/jqlang/jq/issues/1053)), supports timezone name/offset with `%Z`/`%z` in `strptime` ([jq#929](https://github.com/jqlang/jq/issues/929), [jq#2195](https://github.com/jqlang/jq/issues/2195)), and looks up correct timezone during daylight saving time on formatting with `%Z` ([jq#1912](https://github.com/jqlang/jq/issues/1912)). gojq supports nanoseconds in date and time functions. - gojq does not support some functions intentionally; `get_jq_origin`, `get_prog_origin`, `get_search_list` (unstable, not listed in jq document), `input_line_number`, `$__loc__` (performance issue), `recurse_down` (deprecated in jq). gojq does not support some flags; `--ascii-output, -a` (performance issue), `--seq` (not used commonly), `--sort-keys, -S` (sorts by default because `map[string]any` does not keep the order), `--unbuffered` (unbuffered by default). gojq does not parse JSON extensions supported by jq; `NaN`, `Infinity`, and `[000]`. gojq normalizes floating-point numbers to fit to double-precision floating-point numbers. gojq does not support or behaves differently with some regular expression metacharacters and flags (regular expression engine differences). gojq does not support BOM (`encoding/json` does not support this). gojq disallows using keywords for function names (`def true: .; true` is a confusing query), and module name prefixes in function declarations (using module prefixes like `def m::f: .;` is undocumented). -- gojq supports reading from YAML input (`--yaml-input`) while jq does not. gojq also supports YAML output (`--yaml-output`). +- gojq supports reading from YAML input (`--yaml-input`) while jq does not. gojq also supports YAML output (`--yaml-output`). gojq supports a few filters missing in jq; `scan/2` ([jq#2207](https://github.com/jqlang/jq/pull/2207)), and `@urid` format string ([jq#2261](https://github.com/jqlang/jq/issues/2261)). ### Color configuration The gojq command automatically disables coloring output when the output is not a tty. diff --git a/vendor/github.com/itchyny/gojq/compiler.go b/vendor/github.com/itchyny/gojq/compiler.go index 135387fa31..de5f9a1075 100644 --- a/vendor/github.com/itchyny/gojq/compiler.go +++ b/vendor/github.com/itchyny/gojq/compiler.go @@ -1172,7 +1172,7 @@ func (c *compiler) funcInput(any, []any) any { func (c *compiler) funcModulemeta(v any, _ []any) any { s, ok := v.(string) if !ok { - return &funcTypeError{"modulemeta", v} + return &func0TypeError{"modulemeta", v} } if c.moduleLoader == nil { return fmt.Errorf("cannot load module: %q", s) @@ -1196,7 +1196,7 @@ func (c *compiler) funcModulemeta(v any, _ []any) any { if meta == nil { meta = make(map[string]any) } - var deps []any + deps := []any{} for _, i := range q.Imports { v := i.Meta.ToValue() if v == nil { @@ -1409,6 +1409,8 @@ func formatToFunc(format string) *Func { return &Func{Name: "_tohtml"} case "@uri": return &Func{Name: "_touri"} + case "@urid": + return &Func{Name: "_tourid"} case "@csv": return &Func{Name: "_tocsv"} case "@tsv": diff --git a/vendor/github.com/itchyny/gojq/error.go b/vendor/github.com/itchyny/gojq/error.go index 695463f3b8..168658770a 100644 --- a/vendor/github.com/itchyny/gojq/error.go +++ b/vendor/github.com/itchyny/gojq/error.go @@ -27,20 +27,20 @@ func (err *expectedArrayError) Error() string { return "expected an array but got: " + typeErrorPreview(err.v) } -type expectedStringError struct { +type iteratorError struct { v any } -func (err *expectedStringError) Error() string { - return "expected a string but got: " + typeErrorPreview(err.v) +func (err *iteratorError) Error() string { + return "cannot iterate over: " + typeErrorPreview(err.v) } -type iteratorError struct { - v any +type arrayIndexNegativeError struct { + v int } -func (err *iteratorError) Error() string { - return "cannot iterate over: " + typeErrorPreview(err.v) +func (err *arrayIndexNegativeError) Error() string { + return "array index should not be negative: " + Preview(err.v) } type arrayIndexTooLargeError struct { @@ -83,13 +83,10 @@ func (err *expectedStartEndError) Error() string { return `expected "start" and "end" for slicing but got: ` + typeErrorPreview(err.v) } -type lengthMismatchError struct { - name string - v, x []any -} +type lengthMismatchError struct{} func (err *lengthMismatchError) Error() string { - return "length mismatch in " + err.name + ": " + typeErrorPreview(err.v) + ", " + typeErrorPreview(err.x) + return "length mismatch" } type inputNotAllowedError struct{} @@ -106,15 +103,63 @@ func (err *funcNotFoundError) Error() string { return "function not defined: " + err.f.Name + "/" + strconv.Itoa(len(err.f.Args)) } -type funcTypeError struct { +type func0TypeError struct { name string v any } -func (err *funcTypeError) Error() string { +func (err *func0TypeError) Error() string { return err.name + " cannot be applied to: " + typeErrorPreview(err.v) } +type func1TypeError struct { + name string + v, w any +} + +func (err *func1TypeError) Error() string { + return err.name + "(" + Preview(err.w) + ") cannot be applied to: " + typeErrorPreview(err.v) +} + +type func2TypeError struct { + name string + v, w, x any +} + +func (err *func2TypeError) Error() string { + return err.name + "(" + Preview(err.w) + "; " + Preview(err.x) + ") cannot be applied to: " + typeErrorPreview(err.v) +} + +type func0WrapError struct { + name string + v any + err error +} + +func (err *func0WrapError) Error() string { + return err.name + " cannot be applied to " + Preview(err.v) + ": " + err.err.Error() +} + +type func1WrapError struct { + name string + v, w any + err error +} + +func (err *func1WrapError) Error() string { + return err.name + "(" + Preview(err.w) + ") cannot be applied to " + Preview(err.v) + ": " + err.err.Error() +} + +type func2WrapError struct { + name string + v, w, x any + err error +} + +func (err *func2WrapError) Error() string { + return err.name + "(" + Preview(err.w) + "; " + Preview(err.x) + ") cannot be applied to " + Preview(err.v) + ": " + err.err.Error() +} + type exitCodeError struct { value any code int @@ -144,28 +189,12 @@ func (err *exitCodeError) IsHaltError() bool { return err.halt } -type containsTypeError struct { - l, r any -} - -func (err *containsTypeError) Error() string { - return "cannot check contains(" + Preview(err.r) + "): " + typeErrorPreview(err.l) -} - -type hasKeyTypeError struct { - l, r any -} - -func (err *hasKeyTypeError) Error() string { - return "cannot check whether " + typeErrorPreview(err.l) + " has a key: " + typeErrorPreview(err.r) -} - type flattenDepthError struct { v float64 } func (err *flattenDepthError) Error() string { - return "flatten depth must not be negative: " + typeErrorPreview(err.v) + return "flatten depth should not be negative: " + Preview(err.v) } type joinTypeError struct { @@ -173,7 +202,13 @@ type joinTypeError struct { } func (err *joinTypeError) Error() string { - return "cannot join: " + typeErrorPreview(err.v) + return "join cannot be applied to an array including: " + typeErrorPreview(err.v) +} + +type timeArrayError struct{} + +func (err *timeArrayError) Error() string { + return "expected an array of 8 numbers" } type unaryTypeError struct { @@ -294,14 +329,6 @@ func (err *invalidPathIterError) Error() string { return "invalid path on iterating against: " + typeErrorPreview(err.v) } -type getpathError struct { - v, path any -} - -func (err *getpathError) Error() string { - return "cannot getpath with " + Preview(err.path) + " against: " + typeErrorPreview(err.v) -} - type queryParseError struct { fname, contents string err error diff --git a/vendor/github.com/itchyny/gojq/execute.go b/vendor/github.com/itchyny/gojq/execute.go index d43ef3e97f..dcf9d9849a 100644 --- a/vendor/github.com/itchyny/gojq/execute.go +++ b/vendor/github.com/itchyny/gojq/execute.go @@ -436,7 +436,7 @@ func (env *env) pathIntact(v any) bool { } func (env *env) poppaths() []any { - var xs []any + xs := []any{} for { p := env.paths.pop().(pathValue) if p.path == nil { diff --git a/vendor/github.com/itchyny/gojq/func.go b/vendor/github.com/itchyny/gojq/func.go index d94a7a4742..6e8d150080 100644 --- a/vendor/github.com/itchyny/gojq/func.go +++ b/vendor/github.com/itchyny/gojq/func.go @@ -3,6 +3,7 @@ package gojq import ( "encoding/base64" "encoding/json" + "errors" "fmt" "io" "math" @@ -78,6 +79,7 @@ func init() { "format": argFunc1(funcFormat), "_tohtml": argFunc0(funcToHTML), "_touri": argFunc0(funcToURI), + "_tourid": argFunc0(funcToURId), "_tocsv": argFunc0(funcToCSV), "_totsv": argFunc0(funcToTSV), "_tosh": argFunc0(funcToSh), @@ -234,7 +236,7 @@ func mathFunc(name string, f func(float64) float64) function { return argFunc0(func(v any) any { x, ok := toFloat(v) if !ok { - return &funcTypeError{name, v} + return &func0TypeError{name, v} } return f(x) }) @@ -244,11 +246,11 @@ func mathFunc2(name string, f func(_, _ float64) float64) function { return argFunc2(func(_, x, y any) any { l, ok := toFloat(x) if !ok { - return &funcTypeError{name, x} + return &func0TypeError{name, x} } r, ok := toFloat(y) if !ok { - return &funcTypeError{name, y} + return &func0TypeError{name, y} } return f(l, r) }) @@ -258,15 +260,15 @@ func mathFunc3(name string, f func(_, _, _ float64) float64) function { return argFunc3(func(_, a, b, c any) any { x, ok := toFloat(a) if !ok { - return &funcTypeError{name, a} + return &func0TypeError{name, a} } y, ok := toFloat(b) if !ok { - return &funcTypeError{name, b} + return &func0TypeError{name, b} } z, ok := toFloat(c) if !ok { - return &funcTypeError{name, c} + return &func0TypeError{name, c} } return f(x, y, z) }) @@ -295,14 +297,14 @@ func funcLength(v any) any { case map[string]any: return len(v) default: - return &funcTypeError{"length", v} + return &func0TypeError{"length", v} } } func funcUtf8ByteLength(v any) any { s, ok := v.(string) if !ok { - return &funcTypeError{"utf8bytelength", v} + return &func0TypeError{"utf8bytelength", v} } return len(s) } @@ -322,7 +324,7 @@ func funcKeys(v any) any { } return w default: - return &funcTypeError{"keys", v} + return &func0TypeError{"keys", v} } } @@ -366,7 +368,7 @@ func funcHas(v, x any) any { case nil: return false } - return &hasKeyTypeError{v, x} + return &func1TypeError{"has", v, x} } func funcToEntries(v any) any { @@ -384,14 +386,14 @@ func funcToEntries(v any) any { } return w default: - return &funcTypeError{"to_entries", v} + return &func0TypeError{"to_entries", v} } } func funcFromEntries(v any) any { vs, ok := v.([]any) if !ok { - return &funcTypeError{"from_entries", v} + return &func0TypeError{"from_entries", v} } w := make(map[string]any, len(vs)) for _, v := range vs { @@ -405,13 +407,13 @@ func funcFromEntries(v any) any { for _, k := range [4]string{"key", "Key", "name", "Name"} { if k := v[k]; k != nil && k != false { if key, ok = k.(string); !ok { - return &objectKeyNotStringError{k} + return &func0WrapError{"from_entries", vs, &objectKeyNotStringError{k}} } break } } if !ok { - return &objectKeyNotStringError{nil} + return &func0WrapError{"from_entries", vs, &objectKeyNotStringError{nil}} } for _, k := range [2]string{"value", "Value"} { if value, ok = v[k]; ok { @@ -420,7 +422,7 @@ func funcFromEntries(v any) any { } w[key] = value default: - return &funcTypeError{"from_entries", v} + return &func0TypeError{"from_entries", v} } } return w @@ -429,7 +431,7 @@ func funcFromEntries(v any) any { func funcAdd(v any) any { vs, ok := values(v) if !ok { - return &funcTypeError{"add", v} + return &func0TypeError{"add", v} } v = nil for _, x := range vs { @@ -494,11 +496,11 @@ func funcToNumber(v any) any { return v case string: if !newLexer(v).validNumber() { - return fmt.Errorf("invalid number: %q", v) + return &func0WrapError{"tonumber", v, errors.New("invalid number")} } return toNumber(v) default: - return &funcTypeError{"tonumber", v} + return &func0TypeError{"tonumber", v} } } @@ -520,7 +522,7 @@ func funcType(v any) any { func funcReverse(v any) any { vs, ok := v.([]any) if !ok { - return &funcTypeError{"reverse", v} + return &func0TypeError{"reverse", v} } ws := make([]any, len(vs)) for i, v := range vs { @@ -562,17 +564,17 @@ func funcContains(v, x any) any { if l == r { return true } - return &containsTypeError{l, r} + return &func1TypeError{"contains", l, r} }, ) } func funcIndices(v, x any) any { - return indexFunc(v, x, indices) + return indexFunc("indices", v, x, indices) } func indices(vs, xs []any) any { - var rs []any + rs := []any{} if len(xs) == 0 { return rs } @@ -585,7 +587,7 @@ func indices(vs, xs []any) any { } func funcIndex(v, x any) any { - return indexFunc(v, x, func(vs, xs []any) any { + return indexFunc("index", v, x, func(vs, xs []any) any { if len(xs) == 0 { return nil } @@ -599,7 +601,7 @@ func funcIndex(v, x any) any { } func funcRindex(v, x any) any { - return indexFunc(v, x, func(vs, xs []any) any { + return indexFunc("rindex", v, x, func(vs, xs []any) any { if len(xs) == 0 { return nil } @@ -612,7 +614,7 @@ func funcRindex(v, x any) any { }) } -func indexFunc(v, x any, f func(_, _ []any) any) any { +func indexFunc(name string, v, x any, f func(_, _ []any) any) any { switch v := v.(type) { case nil: return nil @@ -627,20 +629,20 @@ func indexFunc(v, x any, f func(_, _ []any) any) any { if x, ok := x.(string); ok { return f(explode(v), explode(x)) } - return &expectedStringError{x} + return &func1TypeError{name, v, x} default: - return &expectedArrayError{v} + return &func1TypeError{name, v, x} } } func funcStartsWith(v, x any) any { s, ok := v.(string) if !ok { - return &funcTypeError{"startswith", v} + return &func1TypeError{"startswith", v, x} } t, ok := x.(string) if !ok { - return &funcTypeError{"startswith", x} + return &func1TypeError{"startswith", v, x} } return strings.HasPrefix(s, t) } @@ -648,11 +650,11 @@ func funcStartsWith(v, x any) any { func funcEndsWith(v, x any) any { s, ok := v.(string) if !ok { - return &funcTypeError{"endswith", v} + return &func1TypeError{"endswith", v, x} } t, ok := x.(string) if !ok { - return &funcTypeError{"endswith", x} + return &func1TypeError{"endswith", v, x} } return strings.HasSuffix(s, t) } @@ -684,7 +686,7 @@ func funcRtrimstr(v, x any) any { func funcExplode(v any) any { s, ok := v.(string) if !ok { - return &funcTypeError{"explode", v} + return &func0TypeError{"explode", v} } return explode(s) } @@ -702,7 +704,7 @@ func explode(s string) []any { func funcImplode(v any) any { vs, ok := v.([]any) if !ok { - return &funcTypeError{"implode", v} + return &func0TypeError{"implode", v} } var sb strings.Builder sb.Grow(len(vs)) @@ -710,7 +712,7 @@ func funcImplode(v any) any { if r, ok := toInt(v); ok && 0 <= r && r <= utf8.MaxRune { sb.WriteRune(rune(r)) } else { - return &funcTypeError{"implode", vs} + return &func0TypeError{"implode", vs} } } return sb.String() @@ -719,11 +721,11 @@ func funcImplode(v any) any { func funcSplit(v any, args []any) any { s, ok := v.(string) if !ok { - return &funcTypeError{"split", v} + return &func0TypeError{"split", v} } x, ok := args[0].(string) if !ok { - return &funcTypeError{"split", x} + return &func0TypeError{"split", x} } var ss []string if len(args) == 1 { @@ -733,7 +735,7 @@ func funcSplit(v any, args []any) any { if args[1] != nil { v, ok := args[1].(string) if !ok { - return &funcTypeError{"split", args[1]} + return &func0TypeError{"split", args[1]} } flags = v } @@ -753,7 +755,7 @@ func funcSplit(v any, args []any) any { func funcASCIIDowncase(v any) any { s, ok := v.(string) if !ok { - return &funcTypeError{"ascii_downcase", v} + return &func0TypeError{"ascii_downcase", v} } return strings.Map(func(r rune) rune { if 'A' <= r && r <= 'Z' { @@ -766,7 +768,7 @@ func funcASCIIDowncase(v any) any { func funcASCIIUpcase(v any) any { s, ok := v.(string) if !ok { - return &funcTypeError{"ascii_upcase", v} + return &func0TypeError{"ascii_upcase", v} } return strings.Map(func(r rune) rune { if 'a' <= r && r <= 'z' { @@ -783,16 +785,16 @@ func funcToJSON(v any) any { func funcFromJSON(v any) any { s, ok := v.(string) if !ok { - return &funcTypeError{"fromjson", v} + return &func0TypeError{"fromjson", v} } var w any dec := json.NewDecoder(strings.NewReader(s)) dec.UseNumber() if err := dec.Decode(&w); err != nil { - return err + return &func0WrapError{"fromjson", v, err} } if _, err := dec.Token(); err != io.EOF { - return &funcTypeError{"fromjson", v} + return &func0TypeError{"fromjson", v} } return normalizeNumbers(w) } @@ -800,7 +802,7 @@ func funcFromJSON(v any) any { func funcFormat(v, x any) any { s, ok := x.(string) if !ok { - return &funcTypeError{"format", x} + return &func0TypeError{"format", x} } format := "@" + s f := formatToFunc(format) @@ -836,6 +838,19 @@ func funcToURI(v any) any { } } +func funcToURId(v any) any { + switch x := funcToString(v).(type) { + case string: + x, err := url.QueryUnescape(x) + if err != nil { + return &func0WrapError{"@urid", v, err} + } + return x + default: + return x + } +} + var csvEscaper = strings.NewReplacer( `"`, `""`, "\x00", `\0`, @@ -876,7 +891,7 @@ func funcToSh(v any) any { func formatJoin(typ string, v any, sep string, escape func(string) string) any { vs, ok := v.([]any) if !ok { - return &funcTypeError{"@" + typ, v} + return &func0TypeError{"@" + typ, v} } ss := make([]string, len(vs)) for i, v := range vs { @@ -911,7 +926,7 @@ func funcToBase64d(v any) any { } y, err := base64.RawStdEncoding.DecodeString(x) if err != nil { - return err + return &func0WrapError{"@base64d", v, err} } return string(y) default: @@ -1089,7 +1104,7 @@ func clampIndex(i, min, max int) int { func funcFlatten(v any, args []any) any { vs, ok := values(v) if !ok { - return &funcTypeError{"flatten", v} + return &func0TypeError{"flatten", v} } var depth float64 if len(args) == 0 { @@ -1097,13 +1112,13 @@ func funcFlatten(v any, args []any) any { } else { depth, ok = toFloat(args[0]) if !ok { - return &funcTypeError{"flatten", args[0]} + return &func0TypeError{"flatten", args[0]} } if depth < 0 { return &flattenDepthError{depth} } } - return flatten(nil, vs, depth) + return flatten([]any{}, vs, depth) } func flatten(xs, vs []any, depth float64) []any { @@ -1135,7 +1150,7 @@ func funcRange(_ any, xs []any) any { switch x.(type) { case int, float64, *big.Int: default: - return &funcTypeError{"range", x} + return &func0TypeError{"range", x} } } return &rangeIter{xs[0], xs[1], xs[2]} @@ -1144,7 +1159,7 @@ func funcRange(_ any, xs []any) any { func funcMin(v any) any { vs, ok := v.([]any) if !ok { - return &funcTypeError{"min", v} + return &func0TypeError{"min", v} } return minMaxBy(vs, vs, true) } @@ -1152,14 +1167,14 @@ func funcMin(v any) any { func funcMinBy(v, x any) any { vs, ok := v.([]any) if !ok { - return &funcTypeError{"min_by", v} + return &func1TypeError{"min_by", v, x} } xs, ok := x.([]any) if !ok { - return &funcTypeError{"min_by", x} + return &func1TypeError{"min_by", v, x} } if len(vs) != len(xs) { - return &lengthMismatchError{"min_by", vs, xs} + return &func1WrapError{"min_by", v, x, &lengthMismatchError{}} } return minMaxBy(vs, xs, true) } @@ -1167,7 +1182,7 @@ func funcMinBy(v, x any) any { func funcMax(v any) any { vs, ok := v.([]any) if !ok { - return &funcTypeError{"max", v} + return &func0TypeError{"max", v} } return minMaxBy(vs, vs, false) } @@ -1175,14 +1190,14 @@ func funcMax(v any) any { func funcMaxBy(v, x any) any { vs, ok := v.([]any) if !ok { - return &funcTypeError{"max_by", v} + return &func1TypeError{"max_by", v, x} } xs, ok := x.([]any) if !ok { - return &funcTypeError{"max_by", x} + return &func1TypeError{"max_by", v, x} } if len(vs) != len(xs) { - return &lengthMismatchError{"max_by", vs, xs} + return &func1WrapError{"max_by", v, x, &lengthMismatchError{}} } return minMaxBy(vs, xs, false) } @@ -1207,14 +1222,17 @@ type sortItem struct { func sortItems(name string, v, x any) ([]*sortItem, error) { vs, ok := v.([]any) if !ok { - return nil, &funcTypeError{name, v} + if strings.HasSuffix(name, "_by") { + return nil, &func1TypeError{name, v, x} + } + return nil, &func0TypeError{name, v} } xs, ok := x.([]any) if !ok { - return nil, &funcTypeError{name, x} + return nil, &func1TypeError{name, v, x} } if len(vs) != len(xs) { - return nil, &lengthMismatchError{name, vs, xs} + return nil, &func1WrapError{name, v, x, &lengthMismatchError{}} } items := make([]*sortItem, len(vs)) for i, v := range vs { @@ -1251,7 +1269,7 @@ func funcGroupBy(v, x any) any { if err != nil { return err } - var rs []any + rs := []any{} var last any for i, r := range items { if i == 0 || compare(last, r.key) != 0 { @@ -1276,7 +1294,7 @@ func uniqueBy(name string, v, x any) any { if err != nil { return err } - var rs []any + rs := []any{} var last any for i, r := range items { if i == 0 || compare(last, r.key) != 0 { @@ -1289,14 +1307,14 @@ func uniqueBy(name string, v, x any) any { func funcJoin(v, x any) any { vs, ok := values(v) if !ok { - return &funcTypeError{"join", v} + return &func1TypeError{"join", v, x} } if len(vs) == 0 { return "" } sep, ok := x.(string) if len(vs) > 1 && !ok { - return &funcTypeError{"join", x} + return &func1TypeError{"join", v, x} } ss := make([]string, len(vs)) for i, v := range vs { @@ -1333,7 +1351,7 @@ func funcExp10(v float64) float64 { func funcFrexp(v any) any { x, ok := toFloat(v) if !ok { - return &funcTypeError{"frexp", v} + return &func0TypeError{"frexp", v} } f, e := math.Frexp(x) return []any{f, e} @@ -1342,7 +1360,7 @@ func funcFrexp(v any) any { func funcModf(v any) any { x, ok := toFloat(v) if !ok { - return &funcTypeError{"modf", v} + return &func0TypeError{"modf", v} } i, f := math.Modf(x) return []any{f, i} @@ -1405,7 +1423,7 @@ func funcIsnan(v any) any { if v == nil { return false } - return &funcTypeError{"isnan", v} + return &func0TypeError{"isnan", v} } return math.IsNaN(x) } @@ -1465,16 +1483,13 @@ func funcSetpathWithAllocator(v any, args []any) any { func setpath(v, p, n any, a allocator) any { path, ok := p.([]any) if !ok { - return &funcTypeError{"setpath", p} + return &func1TypeError{"setpath", v, p} } - var err error - if v, err = update(v, path, n, a); err != nil { - if err, ok := err.(*funcTypeError); ok { - err.name = "setpath" - } - return err + u, err := update(v, path, n, a) + if err != nil { + return &func2WrapError{"setpath", v, p, n, err} } - return v + return u } func funcDelpaths(v, p any) any { @@ -1489,7 +1504,7 @@ func funcDelpathsWithAllocator(v any, args []any) any { func delpaths(v, p any, a allocator) any { paths, ok := p.([]any) if !ok { - return &funcTypeError{"delpaths", p} + return &func1TypeError{"delpaths", v, p} } if len(paths) == 0 { return v @@ -1499,16 +1514,18 @@ func delpaths(v, p any, a allocator) any { // jq -n "[0, 1, 2, 3] | delpaths([[1], [2]])" #=> [0, 3]. var empty struct{} var err error - for _, p := range paths { - path, ok := p.([]any) + u := v + for _, q := range paths { + path, ok := q.([]any) if !ok { - return &funcTypeError{"delpaths", p} + return &func1WrapError{"delpaths", v, p, &expectedArrayError{q}} } - if v, err = update(v, path, empty, a); err != nil { - return err + u, err = update(u, path, empty, a) + if err != nil { + return &func1WrapError{"delpaths", v, p, err} } } - return deleteEmpty(v) + return deleteEmpty(u) } func update(v any, path []any, n any, a allocator) (any, error) { @@ -1587,7 +1604,7 @@ func updateArrayIndex(v []any, i int, path []any, n any, a allocator) (any, erro if n == struct{}{} { return v, nil } - return nil, &funcTypeError{v: i} + return nil, &arrayIndexNegativeError{i} } else if j < len(v) { i = j x = v[i] @@ -1708,20 +1725,20 @@ func deleteEmpty(v any) any { } func funcGetpath(v, p any) any { - keys, ok := p.([]any) + path, ok := p.([]any) if !ok { - return &funcTypeError{"getpath", p} + return &func1TypeError{"getpath", v, p} } u := v - for _, x := range keys { + for _, x := range path { switch v.(type) { case nil, []any, map[string]any: v = funcIndex2(nil, v, x) - if _, ok := v.(error); ok { - return &getpathError{u, p} + if err, ok := v.(error); ok { + return &func1WrapError{"getpath", u, p, err} } default: - return &getpathError{u, p} + return &func1TypeError{"getpath", u, p} } } return v @@ -1730,7 +1747,7 @@ func funcGetpath(v, p any) any { func funcTranspose(v any) any { vss, ok := v.([]any) if !ok { - return &funcTypeError{"transpose", v} + return &func0TypeError{"transpose", v} } if len(vss) == 0 { return []any{} @@ -1739,7 +1756,7 @@ func funcTranspose(v any) any { for _, vs := range vss { vs, ok := vs.([]any) if !ok { - return &funcTypeError{"transpose", v} + return &func0TypeError{"transpose", v} } if k := len(vs); l < k { l = k @@ -1763,7 +1780,7 @@ func funcTranspose(v any) any { func funcBsearch(v, t any) any { vs, ok := v.([]any) if !ok { - return &funcTypeError{"bsearch", v} + return &func1TypeError{"bsearch", v, t} } i := sort.Search(len(vs), func(i int) bool { return compare(vs[i], t) >= 0 @@ -1778,14 +1795,14 @@ func funcGmtime(v any) any { if v, ok := toFloat(v); ok { return epochToArray(v, time.UTC) } - return &funcTypeError{"gmtime", v} + return &func0TypeError{"gmtime", v} } func funcLocaltime(v any) any { if v, ok := toFloat(v); ok { return epochToArray(v, time.Local) } - return &funcTypeError{"localtime", v} + return &func0TypeError{"localtime", v} } func epochToArray(v float64, loc *time.Location) []any { @@ -1803,14 +1820,15 @@ func epochToArray(v float64, loc *time.Location) []any { } func funcMktime(v any) any { - if a, ok := v.([]any); ok { - t, err := arrayToTime("mktime", a, time.UTC) - if err != nil { - return err - } - return timeToEpoch(t) + a, ok := v.([]any) + if !ok { + return &func0TypeError{"mktime", v} } - return &funcTypeError{"mktime", v} + t, err := arrayToTime(a, time.UTC) + if err != nil { + return &func0WrapError{"mktime", v, err} + } + return timeToEpoch(t) } func timeToEpoch(t time.Time) float64 { @@ -1821,90 +1839,95 @@ func funcStrftime(v, x any) any { if w, ok := toFloat(v); ok { v = epochToArray(w, time.UTC) } - if a, ok := v.([]any); ok { - if format, ok := x.(string); ok { - t, err := arrayToTime("strftime", a, time.UTC) - if err != nil { - return err - } - return timefmt.Format(t, format) - } - return &funcTypeError{"strftime", x} + a, ok := v.([]any) + if !ok { + return &func1TypeError{"strftime", v, x} + } + format, ok := x.(string) + if !ok { + return &func1TypeError{"strftime", v, x} } - return &funcTypeError{"strftime", v} + t, err := arrayToTime(a, time.UTC) + if err != nil { + return &func1WrapError{"strftime", v, x, err} + } + return timefmt.Format(t, format) } func funcStrflocaltime(v, x any) any { if w, ok := toFloat(v); ok { v = epochToArray(w, time.Local) } - if a, ok := v.([]any); ok { - if format, ok := x.(string); ok { - t, err := arrayToTime("strflocaltime", a, time.Local) - if err != nil { - return err - } - return timefmt.Format(t, format) - } - return &funcTypeError{"strflocaltime", x} + a, ok := v.([]any) + if !ok { + return &func1TypeError{"strflocaltime", v, x} + } + format, ok := x.(string) + if !ok { + return &func1TypeError{"strflocaltime", v, x} } - return &funcTypeError{"strflocaltime", v} + t, err := arrayToTime(a, time.Local) + if err != nil { + return &func1WrapError{"strflocaltime", v, x, err} + } + return timefmt.Format(t, format) } func funcStrptime(v, x any) any { - if v, ok := v.(string); ok { - if format, ok := x.(string); ok { - t, err := timefmt.Parse(v, format) - if err != nil { - return err - } - var s time.Time - if t == s { - return &funcTypeError{"strptime", v} - } - return epochToArray(timeToEpoch(t), time.UTC) - } - return &funcTypeError{"strptime", x} + s, ok := v.(string) + if !ok { + return &func1TypeError{"strptime", v, x} + } + format, ok := x.(string) + if !ok { + return &func1TypeError{"strptime", v, x} + } + t, err := timefmt.Parse(s, format) + if err != nil { + return &func1WrapError{"strptime", v, x, err} + } + var u time.Time + if t == u { + return &func1TypeError{"strptime", v, x} } - return &funcTypeError{"strptime", v} + return epochToArray(timeToEpoch(t), time.UTC) } -func arrayToTime(name string, a []any, loc *time.Location) (time.Time, error) { +func arrayToTime(a []any, loc *time.Location) (time.Time, error) { var t time.Time if len(a) != 8 { - return t, &funcTypeError{name, a} + return t, &timeArrayError{} } var y, m, d, h, min, sec, nsec int - if x, ok := toInt(a[0]); ok { - y = x - } else { - return t, &funcTypeError{name, a} + var ok bool + if y, ok = toInt(a[0]); !ok { + return t, &timeArrayError{} } - if x, ok := toInt(a[1]); ok { - m = x + 1 + if m, ok = toInt(a[1]); ok { + m++ } else { - return t, &funcTypeError{name, a} + return t, &timeArrayError{} } - if x, ok := toInt(a[2]); ok { - d = x - } else { - return t, &funcTypeError{name, a} + if d, ok = toInt(a[2]); !ok { + return t, &timeArrayError{} } - if x, ok := toInt(a[3]); ok { - h = x - } else { - return t, &funcTypeError{name, a} + if h, ok = toInt(a[3]); !ok { + return t, &timeArrayError{} } - if x, ok := toInt(a[4]); ok { - min = x - } else { - return t, &funcTypeError{name, a} + if min, ok = toInt(a[4]); !ok { + return t, &timeArrayError{} } if x, ok := toFloat(a[5]); ok { sec = int(x) nsec = int((x - math.Floor(x)) * 1e9) } else { - return t, &funcTypeError{name, a} + return t, &timeArrayError{} + } + if _, ok = toFloat(a[6]); !ok { + return t, &timeArrayError{} + } + if _, ok = toFloat(a[7]); !ok { + return t, &timeArrayError{} } return time.Date(y, time.Month(m), d, h, min, sec, nsec, loc), nil } @@ -1914,21 +1937,25 @@ func funcNow(any) any { } func funcMatch(v, re, fs, testing any) any { + name := "match" + if testing == true { + name = "test" + } var flags string if fs != nil { v, ok := fs.(string) if !ok { - return &funcTypeError{"match", fs} + return &func2TypeError{name, v, re, fs} } flags = v } s, ok := v.(string) if !ok { - return &funcTypeError{"match", v} + return &func2TypeError{name, v, re, fs} } restr, ok := re.(string) if !ok { - return &funcTypeError{"match", v} + return &func2TypeError{name, v, re, fs} } r, err := compileRegexp(restr, flags) if err != nil { @@ -2041,7 +2068,7 @@ func funcHaltError(v any, args []any) any { if len(args) > 0 { var ok bool if code, ok = toInt(args[0]); !ok { - return &funcTypeError{"halt_error", args[0]} + return &func0TypeError{"halt_error", args[0]} } } return &exitCodeError{v, code, true} diff --git a/vendor/github.com/itchyny/gojq/module_loader.go b/vendor/github.com/itchyny/gojq/module_loader.go index 6e9ba48cc0..599e37bf6c 100644 --- a/vendor/github.com/itchyny/gojq/module_loader.go +++ b/vendor/github.com/itchyny/gojq/module_loader.go @@ -84,7 +84,7 @@ func (l *moduleLoader) LoadJSONWithMeta(name string, meta map[string]any) (any, return nil, err } defer f.Close() - var vals []any + vals := []any{} dec := json.NewDecoder(f) dec.UseNumber() for { diff --git a/vendor/github.com/james-barrow/golang-ipc/README.md b/vendor/github.com/james-barrow/golang-ipc/README.md index 793751d464..fd93e5fd22 100644 --- a/vendor/github.com/james-barrow/golang-ipc/README.md +++ b/vendor/github.com/james-barrow/golang-ipc/README.md @@ -13,7 +13,9 @@ As well as using this library just for go processes it was also designed to work #### NodeJs -I currently use this library to comunicate between a ElectronJs GUI and a go program. +I currently use this library to comunicate between a ElectronJS GUI and a go program. + +Below is a link to the nodeJS client library: https://github.com/james-barrow/node-ipc-client @@ -27,59 +29,97 @@ Create a server with the default configuation and start listening for the client ```go - sc, err := ipc.StartServer("", nil) + s, err := ipc.StartServer("", nil) if err != nil { log.Println(err) return } ``` - Create a client and connect to the server: ```go - cc, err := ipc.StartClient("", nil) + c, err := ipc.StartClient("", nil) if err != nil { log.Println(err) return } ``` -Read and write data to the connection: + +### Read messages + +Read each message sent: + +```go + + for { + + // message, err := s.Read() server + message, err := c.Read() // client + + if err == nil { + // handle error + } + + // do something with the received messages + } + +``` + +All received messages are formated into the type Message + +```go + +type Message struct { + Err error // details of any error + MsgType int // 0 = reserved , -1 is an internal message (disconnection or error etc), all messages recieved will be > 0 + Data []byte // message data received + Status string // the status of the connection +} + +``` + +### Write a message + + +```go + + //err := s.Write(1, []byte("", config) - + Encryption: false ``` ### Unix Socket Permissions Under most configurations, a socket created by a user will by default not be writable by another user, making it impossible for the client and server to communicate if being run by separate users. - The permission mask can be dropped during socket creation by passing custom configuration to the server start function. **This will make the socket writable by any user.** + The permission mask can be dropped during socket creation by passing a custom configuration to the server start function. **This will make the socket writable for any user.** ```go - - config := &ipc.ServerConfig{UnmaskPermissions: true} - sc, err := ipc.StartServer("", config) - + UnmaskPermissions: true ``` Note: Tested on Linux, not tested on Mac, not implemented on Windows. - ### Testing + ## Testing The package has been tested on Mac, Windows and Linux and has extensive test coverage. -### Licence +## Licence MIT diff --git a/vendor/github.com/james-barrow/golang-ipc/client_all.go b/vendor/github.com/james-barrow/golang-ipc/client_all.go index d76c147350..0a89de78e7 100644 --- a/vendor/github.com/james-barrow/golang-ipc/client_all.go +++ b/vendor/github.com/james-barrow/golang-ipc/client_all.go @@ -4,15 +4,13 @@ import ( "bufio" "errors" "io" + "log" "strings" "time" ) // StartClient - start the ipc client. -// // ipcName = is the name of the unix socket or named pipe that the client will try and connect to. -// timeout = number of seconds before the socket/pipe times out trying to connect/re-cconnect - if -1 or 0 it never times out. -// retryTimer = number of seconds before the client tries to connect again. func StartClient(ipcName string, config *ClientConfig) (*Client, error) { err := checkIpcName(ipcName) @@ -24,14 +22,14 @@ func StartClient(ipcName string, config *ClientConfig) (*Client, error) { cc := &Client{ Name: ipcName, status: NotConnected, - recieved: make(chan *Message), + received: make(chan *Message), toWrite: make(chan *Message), } if config == nil { cc.timeout = 0 - cc.retryTimer = time.Duration(1) + cc.retryTimer = time.Duration(20) cc.encryptionReq = true } else { @@ -58,34 +56,32 @@ func StartClient(ipcName string, config *ClientConfig) (*Client, error) { go startClient(cc) return cc, nil - } -func startClient(cc *Client) { +func startClient(c *Client) { - cc.status = Connecting - cc.recieved <- &Message{Status: cc.status.String(), MsgType: -1} + c.status = Connecting + c.received <- &Message{Status: c.status.String(), MsgType: -1} - err := cc.dial() + err := c.dial() if err != nil { - cc.recieved <- &Message{err: err, MsgType: -2} + c.received <- &Message{Err: err, MsgType: -1} return } - cc.status = Connected - cc.recieved <- &Message{Status: cc.status.String(), MsgType: -1} - - go cc.read() - go cc.write() + c.status = Connected + c.received <- &Message{Status: c.status.String(), MsgType: -1} + go c.read() + go c.write() } -func (cc *Client) read() { +func (c *Client) read() { bLen := make([]byte, 4) for { - res := cc.readData(bLen) + res := c.readData(bLen) if !res { break } @@ -94,13 +90,13 @@ func (cc *Client) read() { msgRecvd := make([]byte, mLen) - res = cc.readData(msgRecvd) + res = c.readData(msgRecvd) if !res { break } - if cc.encryption { - msgFinal, err := decrypt(*cc.enc.cipher, msgRecvd) + if c.encryption { + msgFinal, err := decrypt(*c.enc.cipher, msgRecvd) if err != nil { break } @@ -108,7 +104,7 @@ func (cc *Client) read() { if bytesToInt(msgFinal[:4]) == 0 { // type 0 = control message } else { - cc.recieved <- &Message{Data: msgFinal[4:], MsgType: bytesToInt(msgFinal[:4])} + c.received <- &Message{Data: msgFinal[4:], MsgType: bytesToInt(msgFinal[:4])} } } else { @@ -116,30 +112,29 @@ func (cc *Client) read() { if bytesToInt(msgRecvd[:4]) == 0 { // type 0 = control message } else { - cc.recieved <- &Message{Data: msgRecvd[4:], MsgType: bytesToInt(msgRecvd[:4])} + c.received <- &Message{Data: msgRecvd[4:], MsgType: bytesToInt(msgRecvd[:4])} } } } } -func (cc *Client) readData(buff []byte) bool { +func (c *Client) readData(buff []byte) bool { - _, err := io.ReadFull(cc.conn, buff) - //_, err := cc.conn.Read(buff) + _, err := io.ReadFull(c.conn, buff) if err != nil { if strings.Contains(err.Error(), "EOF") { // the connection has been closed by the client. - cc.conn.Close() + c.conn.Close() - if cc.status != Closing || cc.status == Closed { - go cc.reconnect() + if c.status != Closing || c.status == Closed { + go c.reconnect() } return false } - if cc.status == Closing { - cc.status = Closed - cc.recieved <- &Message{Status: cc.status.String(), MsgType: -1} - cc.recieved <- &Message{err: errors.New("Client has closed the connection"), MsgType: -2} + if c.status == Closing { + c.status = Closed + c.received <- &Message{Status: c.status.String(), MsgType: -1} + c.received <- &Message{Err: errors.New("client has closed the connection"), MsgType: -2} return false } @@ -155,44 +150,44 @@ func (cc *Client) readData(buff []byte) bool { func (c *Client) reconnect() { c.status = ReConnecting - c.recieved <- &Message{Status: c.status.String(), MsgType: -1} + c.received <- &Message{Status: c.status.String(), MsgType: -1} err := c.dial() // connect to the pipe if err != nil { - if err.Error() == "Timed out trying to connect" { + if err.Error() == "timed out trying to connect" { c.status = Timeout - c.recieved <- &Message{Status: c.status.String(), MsgType: -1} - c.recieved <- &Message{err: errors.New("timed out trying to re-connect"), MsgType: -2} + c.received <- &Message{Status: c.status.String(), MsgType: -1} + c.received <- &Message{Err: errors.New("timed out trying to re-connect"), MsgType: -1} } return } c.status = Connected - c.recieved <- &Message{Status: c.status.String(), MsgType: -1} + c.received <- &Message{Status: c.status.String(), MsgType: -1} go c.read() } -// Read - blocking function that waits until an non multipart message is recieved -// returns the message type, data and any error. +// Read - blocking function that receices messages +// if MsgType is a negative number its an internal message func (c *Client) Read() (*Message, error) { - m, ok := (<-c.recieved) + m, ok := (<-c.received) if !ok { - return nil, errors.New("the recieve channel has been closed") + return nil, errors.New("the received channel has been closed") } - if m.err != nil { - close(c.recieved) + if m.Err != nil { + close(c.received) close(c.toWrite) - return nil, m.err + return nil, m.Err } return m, nil } -// Write - writes a non multipart message to the ipc connection. +// Write - writes a message to the ipc connection. // msgType - denotes the type of data being sent. 0 is a reserved type for internal messages and errors. func (c *Client) Write(msgType int, message []byte) error { @@ -220,7 +215,7 @@ func (c *Client) write() { m, ok := <-c.toWrite - if !ok{ + if !ok { break } @@ -232,7 +227,8 @@ func (c *Client) write() { toSend = append(toSend, m.Data...) toSendEnc, err := encrypt(*c.enc.cipher, toSend) if err != nil { - //return err + log.Println("error encrypting data", err) + continue } toSend = toSendEnc } else { @@ -246,7 +242,8 @@ func (c *Client) write() { err := writer.Flush() if err != nil { - //return err + log.Println("error flushing data", err) + continue } } diff --git a/vendor/github.com/james-barrow/golang-ipc/connect_other.go b/vendor/github.com/james-barrow/golang-ipc/connect_other.go index eff12a9ddf..cf2473f423 100644 --- a/vendor/github.com/james-barrow/golang-ipc/connect_other.go +++ b/vendor/github.com/james-barrow/golang-ipc/connect_other.go @@ -1,3 +1,4 @@ +//go:build linux || darwin // +build linux darwin package ipc @@ -12,23 +13,23 @@ import ( ) // Server create a unix socket and start listening connections - for unix and linux -func (sc *Server) run() error { +func (s *Server) run() error { base := "/tmp/" sock := ".sock" - if err := os.RemoveAll(base + sc.name + sock); err != nil { + if err := os.RemoveAll(base + s.name + sock); err != nil { return err } var oldUmask int - if sc.unMask { + if s.unMask { oldUmask = syscall.Umask(0) } - listen, err := net.Listen("unix", base+sc.name+sock) + listen, err := net.Listen("unix", base+s.name+sock) - if sc.unMask { + if s.unMask { syscall.Umask(oldUmask) } @@ -36,25 +37,18 @@ func (sc *Server) run() error { return err } - sc.listen = listen + s.listen = listen - sc.status = Listening - sc.recieved <- &Message{Status: sc.status.String(), MsgType: -1} - sc.connChannel = make(chan bool) + go s.acceptLoop() - go sc.acceptLoop() - - err = sc.connectionTimer() - if err != nil { - return err - } + s.status = Listening return nil } // Client connect to the unix socket created by the server - for unix and linux -func (cc *Client) dial() error { +func (c *Client) dial() error { base := "/tmp/" sock := ".sock" @@ -62,14 +56,16 @@ func (cc *Client) dial() error { startTime := time.Now() for { - if cc.timeout != 0 { - if time.Now().Sub(startTime).Seconds() > cc.timeout { - cc.status = Closed + + if c.timeout != 0 { + + if time.Since(startTime).Seconds() > c.timeout { + c.status = Closed return errors.New("timed out trying to connect") } } - conn, err := net.Dial("unix", base+cc.Name+sock) + conn, err := net.Dial("unix", base+c.Name+sock) if err != nil { if strings.Contains(err.Error(), "connect: no such file or directory") { @@ -77,14 +73,14 @@ func (cc *Client) dial() error { } else if strings.Contains(err.Error(), "connect: connection refused") { } else { - cc.recieved <- &Message{err: err, MsgType: -2} + c.received <- &Message{Err: err, MsgType: -1} } } else { - cc.conn = conn + c.conn = conn - err = cc.handshake() + err = c.handshake() if err != nil { return err } @@ -92,7 +88,7 @@ func (cc *Client) dial() error { return nil } - time.Sleep(cc.retryTimer * time.Second) + time.Sleep(c.retryTimer * time.Second) } diff --git a/vendor/github.com/james-barrow/golang-ipc/connect_windows.go b/vendor/github.com/james-barrow/golang-ipc/connect_windows.go index 41c7e48887..f206b5dad0 100644 --- a/vendor/github.com/james-barrow/golang-ipc/connect_windows.go +++ b/vendor/github.com/james-barrow/golang-ipc/connect_windows.go @@ -11,28 +11,27 @@ import ( // Server function // Create the named pipe (if it doesn't already exist) and start listening for a client to connect. // when a client connects and connection is accepted the read function is called on a go routine. -func (sc *Server) run() error { +func (s *Server) run() error { var pipeBase = `\\.\pipe\` - listen, err := winio.ListenPipe(pipeBase+sc.name, nil) + var config *winio.PipeConfig + + if s.unMask { + config = &winio.PipeConfig{SecurityDescriptor: "D:P(A;;GA;;;AU)"} + } + + listen, err := winio.ListenPipe(pipeBase+s.name, config) if err != nil { return err } - sc.listen = listen - - sc.status = Listening + s.listen = listen - sc.connChannel = make(chan bool) + s.status = Listening - go sc.acceptLoop() - - err2 := sc.connectionTimer() - if err2 != nil { - return err2 - } + go s.acceptLoop() return nil @@ -40,23 +39,23 @@ func (sc *Server) run() error { // Client function // dial - attempts to connect to a named pipe created by the server -func (cc *Client) dial() error { +func (c *Client) dial() error { var pipeBase = `\\.\pipe\` startTime := time.Now() for { - if cc.timeout != 0 { - if time.Now().Sub(startTime).Seconds() > cc.timeout { - cc.status = Closed - return errors.New("Timed out trying to connect") + if c.timeout != 0 { + if time.Since(startTime).Seconds() > c.timeout { + c.status = Closed + return errors.New("timed out trying to connect") } } - pn, err := winio.DialPipe(pipeBase+cc.Name, nil) + pn, err := winio.DialPipe(pipeBase+c.Name, nil) if err != nil { - if strings.Contains(err.Error(), "The system cannot find the file specified.") == true { + if strings.Contains(err.Error(), "the system cannot find the file specified.") == true { } else { return err @@ -64,16 +63,16 @@ func (cc *Client) dial() error { } else { - cc.conn = pn + c.conn = pn - err = cc.handshake() + err = c.handshake() if err != nil { return err } return nil } - time.Sleep(cc.retryTimer * time.Second) + time.Sleep(c.retryTimer * time.Second) } } diff --git a/vendor/github.com/james-barrow/golang-ipc/encryption.go b/vendor/github.com/james-barrow/golang-ipc/encryption.go index 705b50b85b..73af1b3c75 100644 --- a/vendor/github.com/james-barrow/golang-ipc/encryption.go +++ b/vendor/github.com/james-barrow/golang-ipc/encryption.go @@ -27,7 +27,7 @@ func (sc *Server) keyExchange() ([32]byte, error) { return shared, err } - // recieve clients public key + // received clients public key pubRecvd, err := recvPublic(sc.conn) if err != nil { return shared, err @@ -50,7 +50,7 @@ func (cc *Client) keyExchange() ([32]byte, error) { return shared, err } - // recieve servers public key + // received servers public key pubRecvd, err := recvPublic(cc.conn) if err != nil { return shared, err @@ -103,20 +103,20 @@ func sendPublic(conn net.Conn, pub *ecdsa.PublicKey) error { func recvPublic(conn net.Conn) (*ecdsa.PublicKey, error) { - buff := make([]byte, 300) + buff := make([]byte, 98) i, err := conn.Read(buff) if err != nil { - return nil, errors.New("didn't recieve public key") + return nil, errors.New("didn't received public key") } if i != 97 { - return nil, errors.New("public key recieved isn't valid length") + return nil, errors.New("public key received isn't valid length") } recvdPub := bytesToPublicKey(buff[:i]) if !recvdPub.IsOnCurve(recvdPub.X, recvdPub.Y) { - return nil, errors.New("didn't recieve valid public key") + return nil, errors.New("didn't received valid public key") } return recvdPub, nil @@ -145,7 +145,6 @@ func bytesToPublicKey(recvdPub []byte) *ecdsa.PublicKey { func createCipher(shared [32]byte) (*cipher.AEAD, error) { b, err := aes.NewCipher(shared[:]) - if err != nil { return nil, err } @@ -162,11 +161,9 @@ func encrypt(g cipher.AEAD, data []byte) ([]byte, error) { nonce := make([]byte, g.NonceSize()) - if _, err := io.ReadFull(rand.Reader, nonce); err != nil { - return nil, err - } + _, err := io.ReadFull(rand.Reader, nonce) - return g.Seal(nonce, nonce, data, nil), nil + return g.Seal(nonce, nonce, data, nil), err } diff --git a/vendor/github.com/james-barrow/golang-ipc/handshake.go b/vendor/github.com/james-barrow/golang-ipc/handshake.go index f4f9ec6292..3ac65e5c75 100644 --- a/vendor/github.com/james-barrow/golang-ipc/handshake.go +++ b/vendor/github.com/james-barrow/golang-ipc/handshake.go @@ -52,7 +52,7 @@ func (sc *Server) one() error { recv := make([]byte, 1) _, err = sc.conn.Read(recv) if err != nil { - return errors.New("failed to recieve handshake reply") + return errors.New("failed to received handshake reply") } switch result := recv[0]; result { @@ -124,14 +124,14 @@ func (sc *Server) msgLength() error { _, err = sc.conn.Read(reply) if err != nil { - return errors.New("did not recieve message length reply") + return errors.New("did not received message length reply") } return nil } -// 1st message recieved by the client +// 1st message received by the client func (cc *Client) handshake() error { err := cc.one() @@ -160,7 +160,7 @@ func (cc *Client) one() error { recv := make([]byte, 2) _, err := cc.conn.Read(recv) if err != nil { - return errors.New("failed to recieve handshake message") + return errors.New("failed to received handshake message") } if recv[0] != version { @@ -212,7 +212,7 @@ func (cc *Client) msgLength() error { _, err := cc.conn.Read(buff) if err != nil { - return errors.New("failed to recieve max message length 1") + return errors.New("failed to received max message length 1") } var msgLen uint32 @@ -222,13 +222,13 @@ func (cc *Client) msgLength() error { _, err = cc.conn.Read(buff) if err != nil { - return errors.New("failed to recieve max message length 2") + return errors.New("failed to received max message length 2") } var buff2 []byte if cc.encryption { buff2, err = decrypt(*cc.enc.cipher, buff) if err != nil { - return errors.New("failed to recieve max message length 3") + return errors.New("failed to received max message length 3") } } else { diff --git a/vendor/github.com/james-barrow/golang-ipc/server_all.go b/vendor/github.com/james-barrow/golang-ipc/server_all.go index 3690690cd7..4f7a61b54b 100644 --- a/vendor/github.com/james-barrow/golang-ipc/server_all.go +++ b/vendor/github.com/james-barrow/golang-ipc/server_all.go @@ -4,13 +4,13 @@ import ( "bufio" "errors" "io" + "log" "time" ) // StartServer - starts the ipc server. // -// ipcName = is the name of the unix socket or named pipe that will be created. -// timeout = number of seconds before the socket/pipe times out waiting for a connection/re-cconnection - if -1 or 0 it never times out. +// ipcName - is the name of the unix socket or named pipe that will be created, the client needs to use the same name func StartServer(ipcName string, config *ServerConfig) (*Server, error) { err := checkIpcName(ipcName) @@ -18,84 +18,71 @@ func StartServer(ipcName string, config *ServerConfig) (*Server, error) { return nil, err } - sc := &Server{ + s := &Server{ name: ipcName, status: NotConnected, - recieved: make(chan *Message), + received: make(chan *Message), toWrite: make(chan *Message), } if config == nil { - sc.timeout = 0 - sc.maxMsgSize = maxMsgSize - sc.encryption = true - sc.unMask = false + s.timeout = 0 + s.maxMsgSize = maxMsgSize + s.encryption = true + s.unMask = false } else { - if config.Timeout < 0 { - sc.timeout = 0 - } else { - sc.timeout = config.Timeout - } - if config.MaxMsgSize < 1024 { - sc.maxMsgSize = maxMsgSize + s.maxMsgSize = maxMsgSize } else { - sc.maxMsgSize = config.MaxMsgSize + s.maxMsgSize = config.MaxMsgSize } if !config.Encryption { - sc.encryption = false + s.encryption = false } else { - sc.encryption = true + s.encryption = true } if config.UnmaskPermissions { - sc.unMask = true + s.unMask = true } else { - sc.unMask = false + s.unMask = false } } - go startServer(sc) + err = s.run() - return sc, err + return s, err } -func startServer(sc *Server) { - - err := sc.run() - if err != nil { - sc.recieved <- &Message{err: err, MsgType: -2} - } -} +func (s *Server) acceptLoop() { -func (sc *Server) acceptLoop() { for { - conn, err := sc.listen.Accept() + conn, err := s.listen.Accept() if err != nil { break } - if sc.status == Listening || sc.status == ReConnecting { + if s.status == Listening || s.status == Disconnected { - sc.conn = conn + s.conn = conn - err2 := sc.handshake() + err2 := s.handshake() if err2 != nil { - sc.recieved <- &Message{err: err2, MsgType: -2} - sc.status = Error - sc.listen.Close() - sc.conn.Close() + s.received <- &Message{Err: err2, MsgType: -1} + s.status = Error + s.listen.Close() + s.conn.Close() } else { - go sc.read() - go sc.write() - sc.status = Connected - sc.recieved <- &Message{Status: sc.status.String(), MsgType: -1} - sc.connChannel <- true + go s.read() + go s.write() + + s.status = Connected + s.received <- &Message{Status: s.status.String(), MsgType: -1} } } @@ -104,46 +91,16 @@ func (sc *Server) acceptLoop() { } -func (sc *Server) connectionTimer() error { - - if sc.timeout != 0 { - - timeout := make(chan bool) - - go func() { - time.Sleep(sc.timeout * time.Second) - timeout <- true - }() - - select { - - case <-sc.connChannel: - return nil - case <-timeout: - sc.listen.Close() - return errors.New("timed out waiting for client to connect") - } - } - - //select { - - //case <-sc.connChannel: - // return nil - //} - - <-sc.connChannel - return nil - -} - -func (sc *Server) read() { +func (s *Server) read() { bLen := make([]byte, 4) for { - res := sc.readData(bLen) + res := s.readData(bLen) if !res { + s.conn.Close() + break } @@ -151,124 +108,111 @@ func (sc *Server) read() { msgRecvd := make([]byte, mLen) - res = sc.readData(msgRecvd) + res = s.readData(msgRecvd) if !res { + s.conn.Close() + break } - if sc.encryption { - msgFinal, err := decrypt(*sc.enc.cipher, msgRecvd) + if s.encryption { + msgFinal, err := decrypt(*s.enc.cipher, msgRecvd) if err != nil { - sc.recieved <- &Message{err: err, MsgType: -2} + s.received <- &Message{Err: err, MsgType: -1} continue } if bytesToInt(msgFinal[:4]) == 0 { // type 0 = control message } else { - sc.recieved <- &Message{Data: msgFinal[4:], MsgType: bytesToInt(msgFinal[:4])} + s.received <- &Message{Data: msgFinal[4:], MsgType: bytesToInt(msgFinal[:4])} } } else { if bytesToInt(msgRecvd[:4]) == 0 { // type 0 = control message } else { - sc.recieved <- &Message{Data: msgRecvd[4:], MsgType: bytesToInt(msgRecvd[:4])} + s.received <- &Message{Data: msgRecvd[4:], MsgType: bytesToInt(msgRecvd[:4])} } } } + } -func (sc *Server) readData(buff []byte) bool { +func (s *Server) readData(buff []byte) bool { - _, err := io.ReadFull(sc.conn, buff) - //_, err := sc.conn.Read(buff) + _, err := io.ReadFull(s.conn, buff) if err != nil { - if sc.status == Closing { + if s.status == Closing { - sc.status = Closed - sc.recieved <- &Message{Status: sc.status.String(), MsgType: -1} - sc.recieved <- &Message{err: errors.New("Server has closed the connection"), MsgType: -2} + s.status = Closed + s.received <- &Message{Status: s.status.String(), MsgType: -1} + s.received <- &Message{Err: errors.New("server has closed the connection"), MsgType: -1} return false } - go sc.reConnect() - return false - - } - - return true - -} - -func (sc *Server) reConnect() { - - sc.status = ReConnecting - sc.recieved <- &Message{Status: sc.status.String(), MsgType: -1} - - err := sc.connectionTimer() - if err != nil { - sc.status = Timeout - sc.recieved <- &Message{Status: sc.status.String(), MsgType: -1} + if err == io.EOF { - sc.recieved <- &Message{err: err, MsgType: -2} + s.status = Disconnected + s.received <- &Message{Status: s.status.String(), MsgType: -1} + return false + } } + return true } -// Read - blocking function that waits until an non multipart message is recieved +// Read - blocking function, reads each message recieved +// if MsgType is a negative number its an internal message +func (s *Server) Read() (*Message, error) { -func (sc *Server) Read() (*Message, error) { - - m, ok := (<-sc.recieved) + m, ok := (<-s.received) if !ok { - return nil, errors.New("the recieve channel has been closed") + return nil, errors.New("the received channel has been closed") } - if m.err != nil { - close(sc.recieved) - close(sc.toWrite) - return nil, m.err + if m.Err != nil { + //close(s.received) + //close(s.toWrite) + return nil, m.Err } return m, nil - } -// Write - writes a non multipart message to the ipc connection. +// Write - writes a message to the ipc connection // msgType - denotes the type of data being sent. 0 is a reserved type for internal messages and errors. -func (sc *Server) Write(msgType int, message []byte) error { +func (s *Server) Write(msgType int, message []byte) error { if msgType == 0 { - return errors.New("Message type 0 is reserved") + return errors.New("message type 0 is reserved") } mlen := len(message) - if mlen > sc.maxMsgSize { - return errors.New("Message exceeds maximum message length") + if mlen > s.maxMsgSize { + return errors.New("message exceeds maximum message length") } - if sc.status == Connected { + if s.status == Connected { - sc.toWrite <- &Message{MsgType: msgType, Data: message} + s.toWrite <- &Message{MsgType: msgType, Data: message} } else { - return errors.New(sc.status.String()) + return errors.New(s.status.String()) } return nil - } -func (sc *Server) write() { +func (s *Server) write() { for { - m, ok := <-sc.toWrite + m, ok := <-s.toWrite if !ok { break @@ -276,14 +220,16 @@ func (sc *Server) write() { toSend := intToBytes(m.MsgType) - writer := bufio.NewWriter(sc.conn) + writer := bufio.NewWriter(s.conn) - if sc.encryption { + if s.encryption { toSend = append(toSend, m.Data...) - toSendEnc, err := encrypt(*sc.enc.cipher, toSend) + toSendEnc, err := encrypt(*s.enc.cipher, toSend) if err != nil { - //return err + log.Println("error encrypting data", err) + continue } + toSend = toSendEnc } else { @@ -296,42 +242,44 @@ func (sc *Server) write() { err := writer.Flush() if err != nil { - //return err + log.Println("error flushing data", err) + continue } time.Sleep(2 * time.Millisecond) } - } + // getStatus - get the current status of the connection -func (sc *Server) getStatus() Status { +func (s *Server) getStatus() Status { - return sc.status + return s.status } + // StatusCode - returns the current connection status -func (sc *Server) StatusCode() Status { - return sc.status +func (s *Server) StatusCode() Status { + return s.status } // Status - returns the current connection status as a string -func (sc *Server) Status() string { +func (s *Server) Status() string { - return sc.status.String() + return s.status.String() } // Close - closes the connection -func (sc *Server) Close() { +func (s *Server) Close() { - sc.status = Closing + s.status = Closing - if sc.listen != nil { - sc.listen.Close() + if s.listen != nil { + s.listen.Close() } - if sc.conn != nil { - sc.conn.Close() + if s.conn != nil { + s.conn.Close() } } diff --git a/vendor/github.com/james-barrow/golang-ipc/shared.go b/vendor/github.com/james-barrow/golang-ipc/shared.go index f910330264..56811028f3 100644 --- a/vendor/github.com/james-barrow/golang-ipc/shared.go +++ b/vendor/github.com/james-barrow/golang-ipc/shared.go @@ -2,7 +2,7 @@ package ipc import "errors" -// returns the status of the connection as a string +// returns the status of the connection as a string func (status *Status) String() string { switch *status { @@ -17,13 +17,15 @@ func (status *Status) String() string { case Closing: return "Closing" case ReConnecting: - return "Re-connecting" + return "Reconnecting" case Timeout: return "Timeout" case Closed: return "Closed" case Error: return "Error" + case Disconnected: + return "Disconnected" default: return "Status not found" } @@ -37,5 +39,4 @@ func checkIpcName(ipcName string) error { } return nil - } diff --git a/vendor/github.com/james-barrow/golang-ipc/types.go b/vendor/github.com/james-barrow/golang-ipc/types.go index 5633533387..572651f4fb 100644 --- a/vendor/github.com/james-barrow/golang-ipc/types.go +++ b/vendor/github.com/james-barrow/golang-ipc/types.go @@ -8,18 +8,17 @@ import ( // Server - holds the details of the server connection & config. type Server struct { - name string - listen net.Listener - conn net.Conn - status Status - recieved chan (*Message) - connChannel chan bool - toWrite chan (*Message) - timeout time.Duration - encryption bool - maxMsgSize int - enc *encryption - unMask bool + name string + listen net.Listener + conn net.Conn + status Status + received chan (*Message) + toWrite chan (*Message) + timeout time.Duration + encryption bool + maxMsgSize int + enc *encryption + unMask bool } // Client - holds the details of the client connection and config. @@ -29,7 +28,7 @@ type Client struct { status Status timeout float64 // retryTimer time.Duration // number of seconds before trying to connect again - recieved chan (*Message) + received chan (*Message) toWrite chan (*Message) encryption bool encryptionReq bool @@ -37,12 +36,12 @@ type Client struct { enc *encryption } -// Message - contains the recieved message +// Message - contains the received message type Message struct { - err error // details of any error - MsgType int // type of message sent - 0 is reserved - Data []byte // message data recieved - Status string + Err error // details of any error + MsgType int // 0 = reserved , -1 is an internal message (disconnection or error etc), all messages recieved will be > 0 + Data []byte // message data received + Status string // the status of the connection } // Status - Status of the connection @@ -53,26 +52,27 @@ const ( // NotConnected - 0 NotConnected Status = iota // Listening - 1 - Listening Status = iota + Listening // Connecting - 2 - Connecting Status = iota + Connecting // Connected - 3 - Connected Status = iota + Connected // ReConnecting - 4 - ReConnecting Status = iota + ReConnecting // Closed - 5 - Closed Status = iota + Closed // Closing - 6 - Closing Status = iota + Closing // Error - 7 - Error Status = iota + Error // Timeout - 8 - Timeout Status = iota + Timeout + // Disconnected - 9 + Disconnected ) // ServerConfig - used to pass configuation overrides to ServerStart() type ServerConfig struct { - Timeout time.Duration MaxMsgSize int Encryption bool UnmaskPermissions bool diff --git a/vendor/github.com/jaypipes/ghw/README.md b/vendor/github.com/jaypipes/ghw/README.md index e8e184e307..1f3f04a74f 100644 --- a/vendor/github.com/jaypipes/ghw/README.md +++ b/vendor/github.com/jaypipes/ghw/README.md @@ -408,12 +408,13 @@ A `ghw.ProcessorCore` has the following fields: core. Note that this does *not* necessarily equate to a zero-based index of the core within a physical package. For example, the core IDs for an Intel Core i7 are 0, 1, 2, 8, 9, and 10 -* `ghw.ProcessorCore.Index` is the zero-based index of the core on the physical - processor package * `ghw.ProcessorCore.NumThreads` is the number of hardware threads associated with the core -* `ghw.ProcessorCore.LogicalProcessors` is an array of logical processor IDs - assigned to any processing unit for the core +* `ghw.ProcessorCore.LogicalProcessors` is an array of ints representing the + logical processor IDs assigned to any processing unit for the core. These are + sometimes called the "thread siblings". Logical processor IDs are the + *zero-based* index of the processor on the host and are *not* related to the + core ID. ```go package main diff --git a/vendor/github.com/jaypipes/ghw/pkg/cpu/cpu.go b/vendor/github.com/jaypipes/ghw/pkg/cpu/cpu.go index 2fa0cd2d06..4865b46dd3 100644 --- a/vendor/github.com/jaypipes/ghw/pkg/cpu/cpu.go +++ b/vendor/github.com/jaypipes/ghw/pkg/cpu/cpu.go @@ -23,13 +23,12 @@ type ProcessorCore struct { // within a physical package. For example, the core IDs for an Intel Core // i7 are 0, 1, 2, 8, 9, and 10 ID int `json:"id"` - // Index is the zero-based index of the core on the physical processor - // package - Index int `json:"index"` // NumThreads is the number of hardware threads associated with the core NumThreads uint32 `json:"total_threads"` // LogicalProcessors is a slice of ints representing the logical processor - // IDs assigned to any processing unit for the core + // IDs assigned to any processing unit for the core. These are sometimes + // called the "thread siblings". Logical processor IDs are the *zero-based* + // index of the processor on the host and are *not* related to the core ID. LogicalProcessors []int `json:"logical_processors"` } @@ -38,7 +37,7 @@ type ProcessorCore struct { func (c *ProcessorCore) String() string { return fmt.Sprintf( "processor core #%d (%d threads), logical processors %v", - c.Index, + c.ID, c.NumThreads, c.LogicalProcessors, ) @@ -64,6 +63,16 @@ type Processor struct { Cores []*ProcessorCore `json:"cores"` } +// CoreByID returns the ProcessorCore having the supplied ID. +func (p *Processor) CoreByID(coreID int) *ProcessorCore { + for _, core := range p.Cores { + if core.ID == coreID { + return core + } + } + return nil +} + // HasCapability returns true if the Processor has the supplied cpuid // capability, false otherwise. Example of cpuid capabilities would be 'vmx' or // 'sse4_2'. To see a list of potential cpuid capabilitiies, see the section on diff --git a/vendor/github.com/jaypipes/ghw/pkg/cpu/cpu_linux.go b/vendor/github.com/jaypipes/ghw/pkg/cpu/cpu_linux.go index d4b048d72a..00e701940f 100644 --- a/vendor/github.com/jaypipes/ghw/pkg/cpu/cpu_linux.go +++ b/vendor/github.com/jaypipes/ghw/pkg/cpu/cpu_linux.go @@ -37,117 +37,111 @@ func (i *Info) load() error { return nil } -func ProcByID(procs []*Processor, id int) *Processor { - for pid := range procs { - if procs[pid].ID == id { - return procs[pid] - } - } - return nil -} - -func CoreByID(cores []*ProcessorCore, id int) *ProcessorCore { - for cid := range cores { - if cores[cid].Index == id { - return cores[cid] - } - } - return nil -} - func processorsGet(ctx *context.Context) []*Processor { - procs := make([]*Processor, 0) paths := linuxpath.New(ctx) - r, err := os.Open(paths.ProcCpuinfo) - if err != nil { - return nil - } - defer util.SafeClose(r) + lps := logicalProcessorsFromProcCPUInfo(ctx) + // keyed by processor ID (physical_package_id) + procs := map[int]*Processor{} - // An array of maps of attributes describing the logical processor - procAttrs := make([]map[string]string, 0) - curProcAttrs := make(map[string]string) - - // Parse /proc/cpuinfo - scanner := bufio.NewScanner(r) - for scanner.Scan() { - line := strings.TrimSpace(scanner.Text()) - if line == "" { - // Output of /proc/cpuinfo has a blank newline to separate logical - // processors, so here we collect up all the attributes we've - // collected for this logical processor block - procAttrs = append(procAttrs, curProcAttrs) - // Reset the current set of processor attributes... - curProcAttrs = make(map[string]string) - continue - } - parts := strings.Split(line, ":") - key := strings.TrimSpace(parts[0]) - value := strings.TrimSpace(parts[1]) - curProcAttrs[key] = value - } - - // Iterate on /sys/devices/system/cpu/cpuN, not on /proc/cpuinfo - Entries, err := ioutil.ReadDir(paths.SysDevicesSystemCPU) + // /sys/devices/system/cpu pseudodir contains N number of pseudodirs with + // information about the logical processors on the host. These logical + // processor pseudodirs are of the pattern /sys/devices/system/cpu/cpu{N} + fnames, err := ioutil.ReadDir(paths.SysDevicesSystemCPU) if err != nil { - return nil + ctx.Warn("failed to read /sys/devices/system/cpu: %s", err) + return []*Processor{} } - for _, lcore := range Entries { - matches := regexForCpulCore.FindStringSubmatch(lcore.Name()) + for _, fname := range fnames { + matches := regexForCpulCore.FindStringSubmatch(fname.Name()) if len(matches) < 2 { continue } - lcoreID, error := strconv.Atoi(matches[1]) - if error != nil { + lpID, err := strconv.Atoi(matches[1]) + if err != nil { + ctx.Warn("failed to find numeric logical processor ID: %s", err) continue } - // Fetch CPU ID - physIdPath := filepath.Join(paths.SysDevicesSystemCPU, fmt.Sprintf("cpu%d", lcoreID), "topology", "physical_package_id") - cpuID := util.SafeIntFromFile(ctx, physIdPath) + procID := processorIDFromLogicalProcessorID(ctx, lpID) + proc, found := procs[procID] + if !found { + proc = &Processor{ID: procID} + lp, ok := lps[lpID] + if !ok { + ctx.Warn( + "failed to find attributes for logical processor %d", + lpID, + ) + continue + } - proc := ProcByID(procs, cpuID) - if proc == nil { - proc = &Processor{ID: cpuID} - // Assumes /proc/cpuinfo is in order of logical cpu id, then - // procAttrs[lcoreID] describes logical cpu `lcoreID`. + // Assumes /proc/cpuinfo is in order of logical processor id, then + // lps[lpID] describes logical processor `lpID`. // Once got a more robust way of fetching the following info, // can we drop /proc/cpuinfo. - if len(procAttrs[lcoreID]["flags"]) != 0 { // x86 - proc.Capabilities = strings.Split(procAttrs[lcoreID]["flags"], " ") - } else if len(procAttrs[lcoreID]["Features"]) != 0 { // ARM64 - proc.Capabilities = strings.Split(procAttrs[lcoreID]["Features"], " ") + if len(lp.Attrs["flags"]) != 0 { // x86 + proc.Capabilities = strings.Split(lp.Attrs["flags"], " ") + } else if len(lp.Attrs["Features"]) != 0 { // ARM64 + proc.Capabilities = strings.Split(lp.Attrs["Features"], " ") } - if len(procAttrs[lcoreID]["model name"]) != 0 { - proc.Model = procAttrs[lcoreID]["model name"] - } else if len(procAttrs[lcoreID]["uarch"]) != 0 { // SiFive - proc.Model = procAttrs[lcoreID]["uarch"] + if len(lp.Attrs["model name"]) != 0 { + proc.Model = lp.Attrs["model name"] + } else if len(lp.Attrs["uarch"]) != 0 { // SiFive + proc.Model = lp.Attrs["uarch"] } - if len(procAttrs[lcoreID]["vendor_id"]) != 0 { - proc.Vendor = procAttrs[lcoreID]["vendor_id"] - } else if len(procAttrs[lcoreID]["isa"]) != 0 { // RISCV64 - proc.Vendor = procAttrs[lcoreID]["isa"] + if len(lp.Attrs["vendor_id"]) != 0 { + proc.Vendor = lp.Attrs["vendor_id"] + } else if len(lp.Attrs["isa"]) != 0 { // RISCV64 + proc.Vendor = lp.Attrs["isa"] } - procs = append(procs, proc) + procs[procID] = proc } - // Fetch Core ID - coreIdPath := filepath.Join(paths.SysDevicesSystemCPU, fmt.Sprintf("cpu%d", lcoreID), "topology", "core_id") - coreID := util.SafeIntFromFile(ctx, coreIdPath) - core := CoreByID(proc.Cores, coreID) + coreID := coreIDFromLogicalProcessorID(ctx, lpID) + core := proc.CoreByID(coreID) if core == nil { - core = &ProcessorCore{Index: coreID, NumThreads: 1} + core = &ProcessorCore{ID: coreID, NumThreads: 1} proc.Cores = append(proc.Cores, core) proc.NumCores += 1 } else { core.NumThreads += 1 } proc.NumThreads += 1 - core.LogicalProcessors = append(core.LogicalProcessors, lcoreID) + core.LogicalProcessors = append(core.LogicalProcessors, lpID) + } + res := []*Processor{} + for _, p := range procs { + res = append(res, p) } - return procs + return res +} + +// processorIDFromLogicalProcessorID returns the processor physical package ID +// for the supplied logical processor ID +func processorIDFromLogicalProcessorID(ctx *context.Context, lpID int) int { + paths := linuxpath.New(ctx) + // Fetch CPU ID + path := filepath.Join( + paths.SysDevicesSystemCPU, + fmt.Sprintf("cpu%d", lpID), + "topology", "physical_package_id", + ) + return util.SafeIntFromFile(ctx, path) +} + +// coreIDFromLogicalProcessorID returns the core ID for the supplied logical +// processor ID +func coreIDFromLogicalProcessorID(ctx *context.Context, lpID int) int { + paths := linuxpath.New(ctx) + // Fetch CPU ID + path := filepath.Join( + paths.SysDevicesSystemCPU, + fmt.Sprintf("cpu%d", lpID), + "topology", "core_id", + ) + return util.SafeIntFromFile(ctx, path) } func CoresForNode(ctx *context.Context, nodeID int) ([]*ProcessorCore, error) { @@ -172,8 +166,7 @@ func CoresForNode(ctx *context.Context, nodeID int) ([]*ProcessorCore, error) { c := &ProcessorCore{ ID: coreID, - Index: len(cores), - LogicalProcessors: make([]int, 0), + LogicalProcessors: []int{}, } cores = append(cores, c) return c @@ -199,8 +192,7 @@ func CoresForNode(ctx *context.Context, nodeID int) ([]*ProcessorCore, error) { cpuPath := filepath.Join(path, filename) procID, err := strconv.Atoi(filename[3:]) if err != nil { - _, _ = fmt.Fprintf( - os.Stderr, + ctx.Warn( "failed to determine procID from %s. Expected integer after 3rd char.", filename, ) @@ -221,3 +213,126 @@ func CoresForNode(ctx *context.Context, nodeID int) ([]*ProcessorCore, error) { return cores, nil } + +// logicalProcessor contains information about a single logical processor +// on the host. +type logicalProcessor struct { + // This is the logical processor ID assigned by the host. In /proc/cpuinfo, + // this is the zero-based index of the logical processor as it appears in + // the /proc/cpuinfo file and matches the "processor" attribute. In + // /sys/devices/system/cpu/cpu{N} pseudodir entries, this is the N value. + ID int + // The entire collection of string attribute name/value pairs for the + // logical processor. + Attrs map[string]string +} + +// logicalProcessorsFromProcCPUInfo reads the `/proc/cpuinfo` pseudofile and +// returns a map, keyed by logical processor ID, of logical processor structs. +// +// `/proc/cpuinfo` files look like the following: +// +// ``` +// processor : 0 +// vendor_id : AuthenticAMD +// cpu family : 23 +// model : 8 +// model name : AMD Ryzen 7 2700X Eight-Core Processor +// stepping : 2 +// microcode : 0x800820d +// cpu MHz : 2200.000 +// cache size : 512 KB +// physical id : 0 +// siblings : 16 +// core id : 0 +// cpu cores : 8 +// apicid : 0 +// initial apicid : 0 +// fpu : yes +// fpu_exception : yes +// cpuid level : 13 +// wp : yes +// flags : fpu vme de pse tsc msr pae mce +// bugs : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass retbleed smt_rsb +// bogomips : 7386.41 +// TLB size : 2560 4K pages +// clflush size : 64 +// cache_alignment : 64 +// address sizes : 43 bits physical, 48 bits virtual +// power management: ts ttp tm hwpstate cpb eff_freq_ro [13] [14] +// +// processor : 1 +// vendor_id : AuthenticAMD +// cpu family : 23 +// model : 8 +// model name : AMD Ryzen 7 2700X Eight-Core Processor +// stepping : 2 +// microcode : 0x800820d +// cpu MHz : 1885.364 +// cache size : 512 KB +// physical id : 0 +// siblings : 16 +// core id : 1 +// cpu cores : 8 +// apicid : 2 +// initial apicid : 2 +// fpu : yes +// fpu_exception : yes +// cpuid level : 13 +// wp : yes +// flags : fpu vme de pse tsc msr pae mce +// bugs : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass retbleed smt_rsb +// bogomips : 7386.41 +// TLB size : 2560 4K pages +// clflush size : 64 +// cache_alignment : 64 +// address sizes : 43 bits physical, 48 bits virtual +// power management: ts ttp tm hwpstate cpb eff_freq_ro [13] [14] +// ``` +// +// with blank line-separated blocks of colon-delimited attribute name/value +// pairs for a specific logical processor on the host. +func logicalProcessorsFromProcCPUInfo( + ctx *context.Context, +) map[int]*logicalProcessor { + paths := linuxpath.New(ctx) + r, err := os.Open(paths.ProcCpuinfo) + if err != nil { + return nil + } + defer util.SafeClose(r) + + lps := map[int]*logicalProcessor{} + + // A map of attributes describing the logical processor + lpAttrs := map[string]string{} + + scanner := bufio.NewScanner(r) + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if line == "" { + // Output of /proc/cpuinfo has a blank newline to separate logical + // processors, so here we collect up all the attributes we've + // collected for this logical processor block + lpIDstr, ok := lpAttrs["processor"] + if !ok { + ctx.Warn("expected to find 'processor' key in /proc/cpuinfo attributes") + continue + } + lpID, _ := strconv.Atoi(lpIDstr) + lp := &logicalProcessor{ + ID: lpID, + Attrs: lpAttrs, + } + lps[lpID] = lp + // Reset the current set of processor attributes... + lpAttrs = map[string]string{} + continue + } + parts := strings.Split(line, ":") + key := strings.TrimSpace(parts[0]) + value := strings.TrimSpace(parts[1]) + lpAttrs[key] = value + } + return lps +} diff --git a/vendor/github.com/klauspost/reedsolomon/leopard.go b/vendor/github.com/klauspost/reedsolomon/leopard.go index 618adf51f3..16bec4b92b 100644 --- a/vendor/github.com/klauspost/reedsolomon/leopard.go +++ b/vendor/github.com/klauspost/reedsolomon/leopard.go @@ -122,7 +122,7 @@ func (r *leopardFF16) Encode(shards [][]byte) error { func (r *leopardFF16) encode(shards [][]byte) error { shardSize := shardSize(shards) if shardSize%64 != 0 { - return ErrShardSize + return ErrInvalidShardSize } m := ceilPow2(r.parityShards) @@ -409,7 +409,7 @@ func (r *leopardFF16) reconstruct(shards [][]byte, recoverAll bool) error { shardSize := shardSize(shards) if shardSize%64 != 0 { - return ErrShardSize + return ErrInvalidShardSize } m := ceilPow2(r.parityShards) diff --git a/vendor/github.com/klauspost/reedsolomon/leopard8.go b/vendor/github.com/klauspost/reedsolomon/leopard8.go index 9826d8a860..31c97ea3e8 100644 --- a/vendor/github.com/klauspost/reedsolomon/leopard8.go +++ b/vendor/github.com/klauspost/reedsolomon/leopard8.go @@ -134,7 +134,7 @@ func (r *leopardFF8) Encode(shards [][]byte) error { func (r *leopardFF8) encode(shards [][]byte) error { shardSize := shardSize(shards) if shardSize%64 != 0 { - return ErrShardSize + return ErrInvalidShardSize } m := ceilPow2(r.parityShards) @@ -442,7 +442,7 @@ func (r *leopardFF8) reconstruct(shards [][]byte, recoverAll bool) error { shardSize := shardSize(shards) if shardSize%64 != 0 { - return ErrShardSize + return ErrInvalidShardSize } // Use only if we are missing less than 1/4 parity, diff --git a/vendor/github.com/klauspost/reedsolomon/matrix.go b/vendor/github.com/klauspost/reedsolomon/matrix.go index 22669c27e5..497a3d9a88 100644 --- a/vendor/github.com/klauspost/reedsolomon/matrix.go +++ b/vendor/github.com/klauspost/reedsolomon/matrix.go @@ -175,8 +175,7 @@ func (m matrix) SwapRows(r1, r2 int) error { return nil } -// IsSquare will return true if the matrix is square -// and nil if the matrix is square +// IsSquare will return true if the matrix is square, otherwise false. func (m matrix) IsSquare() bool { return len(m) == len(m[0]) } diff --git a/vendor/github.com/klauspost/reedsolomon/reedsolomon.go b/vendor/github.com/klauspost/reedsolomon/reedsolomon.go index acf6da331e..20e397480c 100644 --- a/vendor/github.com/klauspost/reedsolomon/reedsolomon.go +++ b/vendor/github.com/klauspost/reedsolomon/reedsolomon.go @@ -477,11 +477,17 @@ func New(dataShards, parityShards int, opts ...Option) (Encoder, error) { // Calculate what we want per round r.o.perRound = cpuid.CPU.Cache.L2 + if r.o.perRound < 128<<10 { + r.o.perRound = 128 << 10 + } divide := parityShards + 1 if avx2CodeGen && r.o.useAVX2 && (dataShards > maxAvx2Inputs || parityShards > maxAvx2Outputs) { // Base on L1 cache if we have many inputs. r.o.perRound = cpuid.CPU.Cache.L1D + if r.o.perRound < 32<<10 { + r.o.perRound = 32 << 10 + } divide = 0 if dataShards > maxAvx2Inputs { divide += maxAvx2Inputs @@ -495,11 +501,6 @@ func New(dataShards, parityShards int, opts ...Option) (Encoder, error) { } } - if r.o.perRound <= 0 { - // Set to 128K if undetectable. - r.o.perRound = 128 << 10 - } - if cpuid.CPU.ThreadsPerCore > 1 && r.o.maxGoroutines > cpuid.CPU.PhysicalCores { // If multiple threads per core, make sure they don't contend for cache. r.o.perRound /= cpuid.CPU.ThreadsPerCore @@ -510,6 +511,11 @@ func New(dataShards, parityShards int, opts ...Option) (Encoder, error) { // Align to 64 bytes. r.o.perRound = ((r.o.perRound + 63) / 64) * 64 + // Final sanity check... + if r.o.perRound < 1<<10 { + r.o.perRound = 1 << 10 + } + if r.o.minSplitSize <= 0 { // Set minsplit as high as we can, but still have parity in L1. cacheSize := cpuid.CPU.Cache.L1D @@ -646,6 +652,19 @@ func (r *reedSolomon) EncodeIdx(dataShard []byte, idx int, parity [][]byte) erro return ErrShardSize } + if avx2CodeGen && len(dataShard) >= r.o.perRound && len(parity) >= avx2CodeGenMinShards && (r.o.useAVX2 || r.o.useGFNI) { + m := make([][]byte, r.parityShards) + for iRow := range m { + m[iRow] = r.parity[iRow][idx : idx+1] + } + if r.o.useGFNI { + r.codeSomeShardsGFNI(m, [][]byte{dataShard}, parity, len(dataShard), false) + } else { + r.codeSomeShardsAVXP(m, [][]byte{dataShard}, parity, len(dataShard), false) + } + return nil + } + // Process using no goroutines for now. start, end := 0, r.o.perRound if end > len(dataShard) { @@ -909,16 +928,16 @@ func (r *reedSolomon) codeSomeShardsP(matrixRows, inputs, outputs [][]byte, byte avx2Matrix = genAvx2Matrix(matrixRows, len(inputs), 0, len(outputs), r.getTmpSlice()) defer r.putTmpSlice(avx2Matrix) } else if r.o.useGFNI && byteCount < 10<<20 && len(inputs)+len(outputs) > avx2CodeGenMinShards && - r.canAVX2C(byteCount/4, maxAvx2Inputs, maxAvx2Outputs) { + r.canGFNI(byteCount/4, maxAvx2Inputs, maxAvx2Outputs) { // It appears there is a switchover point at around 10MB where // Regular processing is faster... - r.codeSomeShardsAVXP(matrixRows, inputs, outputs, byteCount) + r.codeSomeShardsGFNI(matrixRows, inputs, outputs, byteCount, true) return } else if r.o.useAVX2 && byteCount < 10<<20 && len(inputs)+len(outputs) > avx2CodeGenMinShards && r.canAVX2C(byteCount/4, maxAvx2Inputs, maxAvx2Outputs) { // It appears there is a switchover point at around 10MB where // Regular processing is faster... - r.codeSomeShardsAVXP(matrixRows, inputs, outputs, byteCount) + r.codeSomeShardsAVXP(matrixRows, inputs, outputs, byteCount, true) return } @@ -982,7 +1001,8 @@ func (r *reedSolomon) codeSomeShardsP(matrixRows, inputs, outputs [][]byte, byte // Perform the same as codeSomeShards, but split the workload into // several goroutines. -func (r *reedSolomon) codeSomeShardsAVXP(matrixRows, inputs, outputs [][]byte, byteCount int) { +// If clear is set, the first write will overwrite the output. +func (r *reedSolomon) codeSomeShardsAVXP(matrixRows, inputs, outputs [][]byte, byteCount int, clear bool) { var wg sync.WaitGroup gor := r.o.maxGoroutines @@ -1022,7 +1042,7 @@ func (r *reedSolomon) codeSomeShardsAVXP(matrixRows, inputs, outputs [][]byte, b input: inPer, output: outPer, m: m, - first: inIdx == 0, + first: inIdx == 0 && clear, }) outIdx += len(outPer) outs = outs[len(outPer):] @@ -1054,7 +1074,7 @@ func (r *reedSolomon) codeSomeShardsAVXP(matrixRows, inputs, outputs [][]byte, b input: inPer, output: outPer, m: m, - first: inIdx == 0, + first: inIdx == 0 && clear, }) inIdx += len(inPer) ins = ins[len(inPer):] @@ -1070,6 +1090,7 @@ func (r *reedSolomon) codeSomeShardsAVXP(matrixRows, inputs, outputs [][]byte, b } exec := func(start, stop int) { + defer wg.Done() lstart, lstop := start, start+r.o.perRound if lstop > stop { lstop = stop @@ -1097,7 +1118,7 @@ func (r *reedSolomon) codeSomeShardsAVXP(matrixRows, inputs, outputs [][]byte, b for c := range inputs { in := inputs[c][lstart:lstop] for iRow := 0; iRow < len(outputs); iRow++ { - if c == 0 { + if c == 0 && clear { galMulSlice(matrixRows[iRow][c], in, outputs[iRow][lstart:lstop], &r.o) } else { galMulSliceXor(matrixRows[iRow][c], in, outputs[iRow][lstart:lstop], &r.o) @@ -1110,7 +1131,6 @@ func (r *reedSolomon) codeSomeShardsAVXP(matrixRows, inputs, outputs [][]byte, b lstop = stop } } - wg.Done() } if gor == 1 { wg.Add(1) @@ -1135,7 +1155,8 @@ func (r *reedSolomon) codeSomeShardsAVXP(matrixRows, inputs, outputs [][]byte, b // Perform the same as codeSomeShards, but split the workload into // several goroutines. -func (r *reedSolomon) codeSomeShardsGFNI(matrixRows, inputs, outputs [][]byte, byteCount int) { +// If clear is set, the first write will overwrite the output. +func (r *reedSolomon) codeSomeShardsGFNI(matrixRows, inputs, outputs [][]byte, byteCount int, clear bool) { var wg sync.WaitGroup gor := r.o.maxGoroutines @@ -1171,7 +1192,7 @@ func (r *reedSolomon) codeSomeShardsGFNI(matrixRows, inputs, outputs [][]byte, b input: inPer, output: outPer, m: m, - first: inIdx == 0, + first: inIdx == 0 && clear, }) outIdx += len(outPer) outs = outs[len(outPer):] @@ -1202,7 +1223,7 @@ func (r *reedSolomon) codeSomeShardsGFNI(matrixRows, inputs, outputs [][]byte, b input: inPer, output: outPer, m: m, - first: inIdx == 0, + first: inIdx == 0 && clear, }) inIdx += len(inPer) ins = ins[len(inPer):] @@ -1218,6 +1239,7 @@ func (r *reedSolomon) codeSomeShardsGFNI(matrixRows, inputs, outputs [][]byte, b } exec := func(start, stop int) { + defer wg.Done() lstart, lstop := start, start+r.o.perRound if lstop > stop { lstop = stop @@ -1245,7 +1267,7 @@ func (r *reedSolomon) codeSomeShardsGFNI(matrixRows, inputs, outputs [][]byte, b for c := range inputs { in := inputs[c][lstart:lstop] for iRow := 0; iRow < len(outputs); iRow++ { - if c == 0 { + if c == 0 && clear { galMulSlice(matrixRows[iRow][c], in, outputs[iRow][lstart:lstop], &r.o) } else { galMulSliceXor(matrixRows[iRow][c], in, outputs[iRow][lstart:lstop], &r.o) @@ -1258,8 +1280,8 @@ func (r *reedSolomon) codeSomeShardsGFNI(matrixRows, inputs, outputs [][]byte, b lstop = stop } } - wg.Done() } + if gor == 1 { wg.Add(1) exec(0, byteCount) @@ -1308,6 +1330,10 @@ var ErrShardNoData = errors.New("no shard data") // shards. var ErrShardSize = errors.New("shard sizes do not match") +// ErrInvalidShardSize is returned if shard length doesn't meet the requirements, +// typically a multiple of N. +var ErrInvalidShardSize = errors.New("invalid shard size") + // checkShards will check if shards are the same size // or 0, if allowed. An error is returned if this fails. // An error is also returned if all shards are size 0. diff --git a/vendor/github.com/lufia/plan9stats/README.md b/vendor/github.com/lufia/plan9stats/README.md index a21700c0cf..04bdcef733 100644 --- a/vendor/github.com/lufia/plan9stats/README.md +++ b/vendor/github.com/lufia/plan9stats/README.md @@ -1,2 +1,13 @@ # plan9stats A module for retrieving statistics of Plan 9 + +[![GoDev][godev-image]][godev-url] +[![Actions Status][actions-image]][actions-url] +[![Coverage Status][coveralls-image]][coveralls-url] + +[godev-image]: https://pkg.go.dev/badge/github.com/lufia/plan9stats +[godev-url]: https://pkg.go.dev/github.com/lufia/plan9stats +[actions-image]: https://github.com/lufia/plan9stats/workflows/Test/badge.svg?branch=main +[actions-url]: https://github.com/lufia/plan9stats/actions?workflow=Test +[coveralls-image]: https://coveralls.io/repos/github/lufia/plan9stats/badge.svg +[coveralls-url]: https://coveralls.io/github/lufia/plan9stats diff --git a/vendor/github.com/lufia/plan9stats/cpu.go b/vendor/github.com/lufia/plan9stats/cpu.go index a101b91190..eaff362c34 100644 --- a/vendor/github.com/lufia/plan9stats/cpu.go +++ b/vendor/github.com/lufia/plan9stats/cpu.go @@ -178,9 +178,12 @@ func ReadCPUStats(ctx context.Context, opts ...Option) (*CPUStats, error) { var up uint32parser pids := make([]uint32, len(names)) for i, s := range names { + if s == "trace" { + continue + } pids[i] = up.Parse(s) } - if up.err != nil { + if err := up.err; err != nil { return nil, err } sort.Slice(pids, func(i, j int) bool { diff --git a/vendor/github.com/lufia/plan9stats/disk.go b/vendor/github.com/lufia/plan9stats/disk.go new file mode 100644 index 0000000000..4a4fa0cd9d --- /dev/null +++ b/vendor/github.com/lufia/plan9stats/disk.go @@ -0,0 +1,116 @@ +package stats + +import ( + "bufio" + "bytes" + "context" + "os" + "path/filepath" + "strings" +) + +// Storage represents /dev/sdXX/ctl. +type Storage struct { + Name string + Model string + Capacity int64 + Partitions []*Partition +} + +// Partition represents a part of /dev/sdXX/ctl. +type Partition struct { + Name string + Start uint64 + End uint64 +} + +func ReadStorages(ctx context.Context, opts ...Option) ([]*Storage, error) { + cfg := newConfig(opts...) + sdctl := filepath.Join(cfg.rootdir, "/dev/sdctl") + f, err := os.Open(sdctl) + if err != nil { + return nil, err + } + defer f.Close() + + var a []*Storage + scanner := bufio.NewScanner(f) + for scanner.Scan() { + fields := bytes.Split(scanner.Bytes(), delim) + if len(fields) == 0 { + continue + } + exp := string(fields[0]) + "*" + if !strings.HasPrefix(exp, "sd") { + continue + } + dir := filepath.Join(cfg.rootdir, "/dev", exp) + m, err := filepath.Glob(dir) + if err != nil { + return nil, err + } + for _, dir := range m { + s, err := readStorage(dir) + if err != nil { + return nil, err + } + a = append(a, s) + } + } + if err := scanner.Err(); err != nil { + return nil, err + } + return a, nil +} + +func readStorage(dir string) (*Storage, error) { + ctl := filepath.Join(dir, "ctl") + f, err := os.Open(ctl) + if err != nil { + return nil, err + } + defer f.Close() + + var s Storage + s.Name = filepath.Base(dir) + scanner := bufio.NewScanner(f) + for scanner.Scan() { + line := scanner.Bytes() + switch { + case bytes.HasPrefix(line, []byte("inquiry ")): + s.Model = string(bytes.TrimSpace(line[7:])) + case bytes.HasPrefix(line, []byte("geometry ")): + fields := bytes.Split(line, delim) + if len(fields) < 3 { + continue + } + var p intParser + sec := p.ParseInt64(string(fields[1]), 10) + size := p.ParseInt64(string(fields[2]), 10) + if err := p.Err(); err != nil { + return nil, err + } + s.Capacity = sec * size + case bytes.HasPrefix(line, []byte("part ")): + fields := bytes.Split(line, delim) + if len(fields) < 4 { + continue + } + var p intParser + start := p.ParseUint64(string(fields[2]), 10) + end := p.ParseUint64(string(fields[3]), 10) + if err := p.Err(); err != nil { + return nil, err + } + s.Partitions = append(s.Partitions, &Partition{ + Name: string(fields[1]), + Start: start, + End: end, + }) + } + } + if err := scanner.Err(); err != nil { + return nil, err + } + return &s, nil +} diff --git a/vendor/github.com/lufia/plan9stats/host.go b/vendor/github.com/lufia/plan9stats/host.go index 957e903489..a3921c0e36 100644 --- a/vendor/github.com/lufia/plan9stats/host.go +++ b/vendor/github.com/lufia/plan9stats/host.go @@ -109,12 +109,6 @@ func parseGauge(s string, r *Gauge) error { return nil } -type Storage struct { - Name string - Model string - Capacity int64 -} - type Interface struct { Name string Addr string @@ -177,7 +171,7 @@ func ReadHost(ctx context.Context, opts ...Option) (*Host, error) { } h.Sysname = name - a, err := readStorages(cfg.rootdir) + a, err := ReadStorages(ctx, opts...) if err != nil { return nil, err } @@ -203,80 +197,6 @@ func readSysname(rootdir string) (string, error) { return string(bytes.TrimSpace(b)), nil } -func readStorages(rootdir string) ([]*Storage, error) { - sdctl := filepath.Join(rootdir, "/dev/sdctl") - f, err := os.Open(sdctl) - if err != nil { - return nil, err - } - defer f.Close() - - var a []*Storage - scanner := bufio.NewScanner(f) - for scanner.Scan() { - fields := bytes.Split(scanner.Bytes(), delim) - if len(fields) == 0 { - continue - } - exp := string(fields[0]) + "*" - if !strings.HasPrefix(exp, "sd") { - continue - } - dir := filepath.Join(rootdir, "/dev", exp) - m, err := filepath.Glob(dir) - if err != nil { - return nil, err - } - for _, dir := range m { - s, err := readStorage(dir) - if err != nil { - return nil, err - } - a = append(a, s) - } - } - if err := scanner.Err(); err != nil { - return nil, err - } - return a, nil -} - -func readStorage(dir string) (*Storage, error) { - ctl := filepath.Join(dir, "ctl") - f, err := os.Open(ctl) - if err != nil { - return nil, err - } - defer f.Close() - - var s Storage - s.Name = filepath.Base(dir) - scanner := bufio.NewScanner(f) - for scanner.Scan() { - line := scanner.Bytes() - switch { - case bytes.HasPrefix(line, []byte("inquiry")): - s.Model = string(bytes.TrimSpace(line[7:])) - case bytes.HasPrefix(line, []byte("geometry")): - fields := bytes.Split(line, delim) - if len(fields) < 3 { - continue - } - var p intParser - sec := p.ParseInt64(string(fields[1]), 10) - size := p.ParseInt64(string(fields[2]), 10) - if err := p.Err(); err != nil { - return nil, err - } - s.Capacity = sec * size - } - } - if err := scanner.Err(); err != nil { - return nil, err - } - return &s, nil -} - type IPStats struct { ID int // number of interface in ipifc dir Device string // associated physical device diff --git a/vendor/github.com/lufia/plan9stats/int.go b/vendor/github.com/lufia/plan9stats/int.go index db133c43ed..e3c9dc834c 100644 --- a/vendor/github.com/lufia/plan9stats/int.go +++ b/vendor/github.com/lufia/plan9stats/int.go @@ -26,6 +26,15 @@ func (p *intParser) ParseInt64(s string, base int) int64 { return n } +func (p *intParser) ParseUint64(s string, base int) uint64 { + if p.err != nil { + return 0 + } + var n uint64 + n, p.err = strconv.ParseUint(s, base, 64) + return n +} + func (p *intParser) Err() error { return p.err } diff --git a/vendor/github.com/onsi/ginkgo/v2/formatter/formatter.go b/vendor/github.com/onsi/ginkgo/v2/formatter/formatter.go index 43b16211d8..743555ddea 100644 --- a/vendor/github.com/onsi/ginkgo/v2/formatter/formatter.go +++ b/vendor/github.com/onsi/ginkgo/v2/formatter/formatter.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "regexp" + "strconv" "strings" ) @@ -50,6 +51,37 @@ func NewWithNoColorBool(noColor bool) Formatter { } func New(colorMode ColorMode) Formatter { + colorAliases := map[string]int{ + "black": 0, + "red": 1, + "green": 2, + "yellow": 3, + "blue": 4, + "magenta": 5, + "cyan": 6, + "white": 7, + } + for colorAlias, n := range colorAliases { + colorAliases[fmt.Sprintf("bright-%s", colorAlias)] = n + 8 + } + + getColor := func(color, defaultEscapeCode string) string { + color = strings.ToUpper(strings.ReplaceAll(color, "-", "_")) + envVar := fmt.Sprintf("GINKGO_CLI_COLOR_%s", color) + envVarColor := os.Getenv(envVar) + if envVarColor == "" { + return defaultEscapeCode + } + if colorCode, ok := colorAliases[envVarColor]; ok { + return fmt.Sprintf("\x1b[38;5;%dm", colorCode) + } + colorCode, err := strconv.Atoi(envVarColor) + if err != nil || colorCode < 0 || colorCode > 255 { + return defaultEscapeCode + } + return fmt.Sprintf("\x1b[38;5;%dm", colorCode) + } + f := Formatter{ ColorMode: colorMode, colors: map[string]string{ @@ -57,18 +89,18 @@ func New(colorMode ColorMode) Formatter { "bold": "\x1b[1m", "underline": "\x1b[4m", - "red": "\x1b[38;5;9m", - "orange": "\x1b[38;5;214m", - "coral": "\x1b[38;5;204m", - "magenta": "\x1b[38;5;13m", - "green": "\x1b[38;5;10m", - "dark-green": "\x1b[38;5;28m", - "yellow": "\x1b[38;5;11m", - "light-yellow": "\x1b[38;5;228m", - "cyan": "\x1b[38;5;14m", - "gray": "\x1b[38;5;243m", - "light-gray": "\x1b[38;5;246m", - "blue": "\x1b[38;5;12m", + "red": getColor("red", "\x1b[38;5;9m"), + "orange": getColor("orange", "\x1b[38;5;214m"), + "coral": getColor("coral", "\x1b[38;5;204m"), + "magenta": getColor("magenta", "\x1b[38;5;13m"), + "green": getColor("green", "\x1b[38;5;10m"), + "dark-green": getColor("dark-green", "\x1b[38;5;28m"), + "yellow": getColor("yellow", "\x1b[38;5;11m"), + "light-yellow": getColor("light-yellow", "\x1b[38;5;228m"), + "cyan": getColor("cyan", "\x1b[38;5;14m"), + "gray": getColor("gray", "\x1b[38;5;243m"), + "light-gray": getColor("light-gray", "\x1b[38;5;246m"), + "blue": getColor("blue", "\x1b[38;5;12m"), }, } colors := []string{} @@ -88,7 +120,10 @@ func (f Formatter) Fi(indentation uint, format string, args ...interface{}) stri } func (f Formatter) Fiw(indentation uint, maxWidth uint, format string, args ...interface{}) string { - out := fmt.Sprintf(f.style(format), args...) + out := f.style(format) + if len(args) > 0 { + out = fmt.Sprintf(out, args...) + } if indentation == 0 && maxWidth == 0 { return out diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go index f7d2eaf0b3..5db5d1a7bf 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go @@ -39,6 +39,8 @@ func buildSpecs(args []string, cliConfig types.CLIConfig, goFlagsConfig types.Go command.AbortWith("Found no test suites") } + internal.VerifyCLIAndFrameworkVersion(suites) + opc := internal.NewOrderedParallelCompiler(cliConfig.ComputedNumCompilers()) opc.StartCompiling(suites, goFlagsConfig) diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/bootstrap_command.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/bootstrap_command.go index 0273abe9c6..73aff0b7a1 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/bootstrap_command.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/bootstrap_command.go @@ -2,6 +2,7 @@ package generators import ( "bytes" + "encoding/json" "fmt" "os" "text/template" @@ -25,6 +26,9 @@ func BuildBootstrapCommand() command.Command { {Name: "template", KeyPath: "CustomTemplate", UsageArgument: "template-file", Usage: "If specified, generate will use the contents of the file passed as the bootstrap template"}, + {Name: "template-data", KeyPath: "CustomTemplateData", + UsageArgument: "template-data-file", + Usage: "If specified, generate will use the contents of the file passed as data to be rendered in the bootstrap template"}, }, &conf, types.GinkgoFlagSections{}, @@ -57,6 +61,7 @@ type bootstrapData struct { GomegaImport string GinkgoPackage string GomegaPackage string + CustomData map[string]any } func generateBootstrap(conf GeneratorsConfig) { @@ -95,17 +100,32 @@ func generateBootstrap(conf GeneratorsConfig) { tpl, err := os.ReadFile(conf.CustomTemplate) command.AbortIfError("Failed to read custom bootstrap file:", err) templateText = string(tpl) + if conf.CustomTemplateData != "" { + var tplCustomDataMap map[string]any + tplCustomData, err := os.ReadFile(conf.CustomTemplateData) + command.AbortIfError("Failed to read custom boostrap data file:", err) + if !json.Valid([]byte(tplCustomData)) { + command.AbortWith("Invalid JSON object in custom data file.") + } + //create map from the custom template data + json.Unmarshal(tplCustomData, &tplCustomDataMap) + data.CustomData = tplCustomDataMap + } } else if conf.Agouti { templateText = agoutiBootstrapText } else { templateText = bootstrapText } - bootstrapTemplate, err := template.New("bootstrap").Funcs(sprig.TxtFuncMap()).Parse(templateText) + //Setting the option to explicitly fail if template is rendered trying to access missing key + bootstrapTemplate, err := template.New("bootstrap").Funcs(sprig.TxtFuncMap()).Option("missingkey=error").Parse(templateText) command.AbortIfError("Failed to parse bootstrap template:", err) buf := &bytes.Buffer{} - bootstrapTemplate.Execute(buf, data) + //Being explicit about failing sooner during template rendering + //when accessing custom data rather than during the go fmt command + err = bootstrapTemplate.Execute(buf, data) + command.AbortIfError("Failed to render bootstrap template:", err) buf.WriteTo(f) diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go index 93b0b4b25b..be01dec979 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go @@ -2,6 +2,7 @@ package generators import ( "bytes" + "encoding/json" "fmt" "os" "path/filepath" @@ -28,6 +29,12 @@ func BuildGenerateCommand() command.Command { {Name: "template", KeyPath: "CustomTemplate", UsageArgument: "template-file", Usage: "If specified, generate will use the contents of the file passed as the test file template"}, + {Name: "template-data", KeyPath: "CustomTemplateData", + UsageArgument: "template-data-file", + Usage: "If specified, generate will use the contents of the file passed as data to be rendered in the test file template"}, + {Name: "tags", KeyPath: "Tags", + UsageArgument: "build-tags", + Usage: "If specified, generate will create a test file that uses the given build tags (i.e. `--tags e2e,!unit` will add `//go:build e2e,!unit`)"}, }, &conf, types.GinkgoFlagSections{}, @@ -55,6 +62,7 @@ You can also pass a of the form "file.go" and generate will emit "fil } type specData struct { + BuildTags string Package string Subject string PackageImportPath string @@ -64,6 +72,7 @@ type specData struct { GomegaImport string GinkgoPackage string GomegaPackage string + CustomData map[string]any } func generateTestFiles(conf GeneratorsConfig, args []string) { @@ -88,6 +97,7 @@ func generateTestFileForSubject(subject string, conf GeneratorsConfig) { } data := specData{ + BuildTags: getBuildTags(conf.Tags), Package: determinePackageName(packageName, conf.Internal), Subject: formattedName, PackageImportPath: getPackageImportPath(), @@ -122,16 +132,31 @@ func generateTestFileForSubject(subject string, conf GeneratorsConfig) { tpl, err := os.ReadFile(conf.CustomTemplate) command.AbortIfError("Failed to read custom template file:", err) templateText = string(tpl) + if conf.CustomTemplateData != "" { + var tplCustomDataMap map[string]any + tplCustomData, err := os.ReadFile(conf.CustomTemplateData) + command.AbortIfError("Failed to read custom template data file:", err) + if !json.Valid([]byte(tplCustomData)) { + command.AbortWith("Invalid JSON object in custom data file.") + } + //create map from the custom template data + json.Unmarshal(tplCustomData, &tplCustomDataMap) + data.CustomData = tplCustomDataMap + } } else if conf.Agouti { templateText = agoutiSpecText } else { templateText = specText } - specTemplate, err := template.New("spec").Funcs(sprig.TxtFuncMap()).Parse(templateText) + //Setting the option to explicitly fail if template is rendered trying to access missing key + specTemplate, err := template.New("spec").Funcs(sprig.TxtFuncMap()).Option("missingkey=error").Parse(templateText) command.AbortIfError("Failed to read parse test template:", err) - specTemplate.Execute(f, data) + //Being explicit about failing sooner during template rendering + //when accessing custom data rather than during the go fmt command + err = specTemplate.Execute(f, data) + command.AbortIfError("Failed to render bootstrap template:", err) internal.GoFmt(targetFile) } diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go index c3470adbfd..4dab07d036 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go @@ -1,6 +1,7 @@ package generators -var specText = `package {{.Package}} +var specText = `{{.BuildTags}} +package {{.Package}} import ( {{.GinkgoImport}} @@ -14,7 +15,8 @@ var _ = {{.GinkgoPackage}}Describe("{{.Subject}}", func() { }) ` -var agoutiSpecText = `package {{.Package}} +var agoutiSpecText = `{{.BuildTags}} +package {{.Package}} import ( {{.GinkgoImport}} diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go index 3086e6056a..28c7aa6f43 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go @@ -1,6 +1,7 @@ package generators import ( + "fmt" "go/build" "os" "path/filepath" @@ -13,6 +14,8 @@ import ( type GeneratorsConfig struct { Agouti, NoDot, Internal bool CustomTemplate string + CustomTemplateData string + Tags string } func getPackageAndFormattedName() (string, string, string) { @@ -61,3 +64,13 @@ func determinePackageName(name string, internal bool) string { return name + "_test" } + +// getBuildTags returns the resultant string to be added. +// If the input string is not empty, then returns a `//go:build {}` string, +// otherwise returns an empty string. +func getBuildTags(tags string) string { + if tags != "" { + return fmt.Sprintf("//go:build %s\n", tags) + } + return "" +} diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go index 496ec4a28a..86da7340d1 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go @@ -25,7 +25,16 @@ func CompileSuite(suite TestSuite, goFlagsConfig types.GoFlagsConfig) TestSuite return suite } - args, err := types.GenerateGoTestCompileArgs(goFlagsConfig, path, "./") + ginkgoInvocationPath, _ := os.Getwd() + ginkgoInvocationPath, _ = filepath.Abs(ginkgoInvocationPath) + packagePath := suite.AbsPath() + pathToInvocationPath, err := filepath.Rel(packagePath, ginkgoInvocationPath) + if err != nil { + suite.State = TestSuiteStateFailedToCompile + suite.CompilationError = fmt.Errorf("Failed to get relative path from package to the current working directory:\n%s", err.Error()) + return suite + } + args, err := types.GenerateGoTestCompileArgs(goFlagsConfig, path, "./", pathToInvocationPath) if err != nil { suite.State = TestSuiteStateFailedToCompile suite.CompilationError = fmt.Errorf("Failed to generate go test compile flags:\n%s", err.Error()) diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go index cad2386717..41052ea19d 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go @@ -6,6 +6,7 @@ import ( "io" "os" "os/exec" + "path/filepath" "regexp" "strings" "syscall" @@ -63,6 +64,12 @@ func checkForNoTestsWarning(buf *bytes.Buffer) bool { } func runGoTest(suite TestSuite, cliConfig types.CLIConfig, goFlagsConfig types.GoFlagsConfig) TestSuite { + // As we run the go test from the suite directory, make sure the cover profile is absolute + // and placed into the expected output directory when one is configured. + if goFlagsConfig.Cover && !filepath.IsAbs(goFlagsConfig.CoverProfile) { + goFlagsConfig.CoverProfile = AbsPathForGeneratedAsset(goFlagsConfig.CoverProfile, suite, cliConfig, 0) + } + args, err := types.GenerateGoTestRunArgs(goFlagsConfig) command.AbortIfError("Failed to generate test run arguments", err) cmd, buf := buildAndStartCommand(suite, args, true) diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/verify_version.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/verify_version.go new file mode 100644 index 0000000000..9da1bab3db --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/verify_version.go @@ -0,0 +1,54 @@ +package internal + +import ( + "fmt" + "os/exec" + "regexp" + "strings" + + "github.com/onsi/ginkgo/v2/formatter" + "github.com/onsi/ginkgo/v2/types" +) + +var versiorRe = regexp.MustCompile(`v(\d+\.\d+\.\d+)`) + +func VerifyCLIAndFrameworkVersion(suites TestSuites) { + cliVersion := types.VERSION + mismatches := map[string][]string{} + + for _, suite := range suites { + cmd := exec.Command("go", "list", "-m", "github.com/onsi/ginkgo/v2") + cmd.Dir = suite.Path + output, err := cmd.CombinedOutput() + if err != nil { + continue + } + components := strings.Split(string(output), " ") + if len(components) != 2 { + continue + } + matches := versiorRe.FindStringSubmatch(components[1]) + if matches == nil || len(matches) != 2 { + continue + } + libraryVersion := matches[1] + if cliVersion != libraryVersion { + mismatches[libraryVersion] = append(mismatches[libraryVersion], suite.PackageName) + } + } + + if len(mismatches) == 0 { + return + } + + fmt.Println(formatter.F("{{red}}{{bold}}Ginkgo detected a version mismatch between the Ginkgo CLI and the version of Ginkgo imported by your packages:{{/}}")) + + fmt.Println(formatter.Fi(1, "Ginkgo CLI Version:")) + fmt.Println(formatter.Fi(2, "{{bold}}%s{{/}}", cliVersion)) + fmt.Println(formatter.Fi(1, "Mismatched package versions found:")) + for version, packages := range mismatches { + fmt.Println(formatter.Fi(2, "{{bold}}%s{{/}} used by %s", version, strings.Join(packages, ", "))) + } + fmt.Println("") + fmt.Println(formatter.Fiw(1, formatter.COLS, "{{gray}}Ginkgo will continue to attempt to run but you may see errors (including flag parsing errors) and should either update your go.mod or your version of the Ginkgo CLI to match.\n\nTo install the matching version of the CLI run\n {{bold}}go install github.com/onsi/ginkgo/v2/ginkgo{{/}}{{gray}}\nfrom a path that contains a go.mod file. Alternatively you can use\n {{bold}}go run github.com/onsi/ginkgo/v2/ginkgo{{/}}{{gray}}\nfrom a path that contains a go.mod file to invoke the matching version of the Ginkgo CLI.\n\nIf you are attempting to test multiple packages that each have a different version of the Ginkgo library with a single Ginkgo CLI that is currently unsupported.\n{{/}}")) +} diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/ginkgo.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/ginkgo.go index c197bb6862..958daccbfa 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/ginkgo.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/ginkgo.go @@ -1,6 +1,7 @@ package outline import ( + "github.com/onsi/ginkgo/v2/types" "go/ast" "go/token" "strconv" @@ -25,9 +26,10 @@ type ginkgoMetadata struct { // End is the position of first character immediately after the spec or container block End int `json:"end"` - Spec bool `json:"spec"` - Focused bool `json:"focused"` - Pending bool `json:"pending"` + Spec bool `json:"spec"` + Focused bool `json:"focused"` + Pending bool `json:"pending"` + Labels []string `json:"labels"` } // ginkgoNode is used to construct the outline as a tree @@ -145,27 +147,35 @@ func ginkgoNodeFromCallExpr(fset *token.FileSet, ce *ast.CallExpr, ginkgoPackage case "It", "Specify", "Entry": n.Spec = true n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + n.Labels = labelFromCallExpr(ce) + n.Pending = pendingFromCallExpr(ce) return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName case "FIt", "FSpecify", "FEntry": n.Spec = true n.Focused = true n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + n.Labels = labelFromCallExpr(ce) return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName case "PIt", "PSpecify", "XIt", "XSpecify", "PEntry", "XEntry": n.Spec = true n.Pending = true n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + n.Labels = labelFromCallExpr(ce) return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName case "Context", "Describe", "When", "DescribeTable": n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + n.Labels = labelFromCallExpr(ce) + n.Pending = pendingFromCallExpr(ce) return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName case "FContext", "FDescribe", "FWhen", "FDescribeTable": n.Focused = true n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + n.Labels = labelFromCallExpr(ce) return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName case "PContext", "PDescribe", "PWhen", "XContext", "XDescribe", "XWhen", "PDescribeTable", "XDescribeTable": n.Pending = true n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + n.Labels = labelFromCallExpr(ce) return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName case "By": n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) @@ -216,3 +226,75 @@ func textFromCallExpr(ce *ast.CallExpr) (string, bool) { return text.Value, true } } + +func labelFromCallExpr(ce *ast.CallExpr) []string { + + labels := []string{} + if len(ce.Args) < 2 { + return labels + } + + for _, arg := range ce.Args[1:] { + switch expr := arg.(type) { + case *ast.CallExpr: + id, ok := expr.Fun.(*ast.Ident) + if !ok { + // to skip over cases where the expr.Fun. is actually *ast.SelectorExpr + continue + } + if id.Name == "Label" { + ls := extractLabels(expr) + labels = append(labels, ls...) + } + } + } + return labels +} + +func extractLabels(expr *ast.CallExpr) []string { + out := []string{} + for _, arg := range expr.Args { + switch expr := arg.(type) { + case *ast.BasicLit: + if expr.Kind == token.STRING { + unquoted, err := strconv.Unquote(expr.Value) + if err != nil { + unquoted = expr.Value + } + validated, err := types.ValidateAndCleanupLabel(unquoted, types.CodeLocation{}) + if err == nil { + out = append(out, validated) + } + } + } + } + + return out +} + +func pendingFromCallExpr(ce *ast.CallExpr) bool { + + pending := false + if len(ce.Args) < 2 { + return pending + } + + for _, arg := range ce.Args[1:] { + switch expr := arg.(type) { + case *ast.CallExpr: + id, ok := expr.Fun.(*ast.Ident) + if !ok { + // to skip over cases where the expr.Fun. is actually *ast.SelectorExpr + continue + } + if id.Name == "Pending" { + pending = true + } + case *ast.Ident: + if expr.Name == "Pending" { + pending = true + } + } + } + return pending +} diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/import.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/import.go index 4328ab3910..67ec5ab757 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/import.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/import.go @@ -47,7 +47,7 @@ func packageNameForImport(f *ast.File, path string) *string { // or nil otherwise. func importSpec(f *ast.File, path string) *ast.ImportSpec { for _, s := range f.Imports { - if importPath(s) == path { + if strings.HasPrefix(importPath(s), path) { return s } } diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline.go index 4b45e76274..c2327cda8c 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline.go @@ -85,12 +85,19 @@ func (o *outline) String() string { // one 'width' of spaces for every level of nesting. func (o *outline) StringIndent(width int) string { var b strings.Builder - b.WriteString("Name,Text,Start,End,Spec,Focused,Pending\n") + b.WriteString("Name,Text,Start,End,Spec,Focused,Pending,Labels\n") currentIndent := 0 pre := func(n *ginkgoNode) { b.WriteString(fmt.Sprintf("%*s", currentIndent, "")) - b.WriteString(fmt.Sprintf("%s,%s,%d,%d,%t,%t,%t\n", n.Name, n.Text, n.Start, n.End, n.Spec, n.Focused, n.Pending)) + var labels string + if len(n.Labels) == 1 { + labels = n.Labels[0] + } else { + labels = strings.Join(n.Labels, ", ") + } + //enclosing labels in a double quoted comma separate listed so that when inmported into a CSV app the Labels column has comma separate strings + b.WriteString(fmt.Sprintf("%s,%s,%d,%d,%t,%t,%t,\"%s\"\n", n.Name, n.Text, n.Start, n.End, n.Spec, n.Focused, n.Pending, labels)) currentIndent += width } post := func(n *ginkgoNode) { diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/run/run_command.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/run/run_command.go index 8ee0acc818..aaed4d570e 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/run/run_command.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/run/run_command.go @@ -24,7 +24,7 @@ func BuildRunCommand() command.Command { panic(err) } - interruptHandler := interrupt_handler.NewInterruptHandler(0, nil) + interruptHandler := interrupt_handler.NewInterruptHandler(nil) interrupt_handler.SwallowSigQuit() return command.Command{ @@ -69,6 +69,8 @@ func (r *SpecRunner) RunSpecs(args []string, additionalArgs []string) { skippedSuites := suites.WithState(internal.TestSuiteStateSkippedByFilter) suites = suites.WithoutState(internal.TestSuiteStateSkippedByFilter) + internal.VerifyCLIAndFrameworkVersion(suites) + if len(skippedSuites) > 0 { fmt.Println("Will skip:") for _, skippedSuite := range skippedSuites { @@ -115,7 +117,7 @@ OUTER_LOOP: } suites[suiteIdx] = suite - if r.interruptHandler.Status().Interrupted { + if r.interruptHandler.Status().Interrupted() { opc.StopAndDrain() break OUTER_LOOP } diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/watch_command.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/watch_command.go index 83dbeb1e89..bde4193ce7 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/watch_command.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/watch_command.go @@ -22,7 +22,7 @@ func BuildWatchCommand() command.Command { if err != nil { panic(err) } - interruptHandler := interrupt_handler.NewInterruptHandler(0, nil) + interruptHandler := interrupt_handler.NewInterruptHandler(nil) interrupt_handler.SwallowSigQuit() return command.Command{ @@ -65,6 +65,8 @@ type SpecWatcher struct { func (w *SpecWatcher) WatchSpecs(args []string, additionalArgs []string) { suites := internal.FindSuites(args, w.cliConfig, false).WithoutState(internal.TestSuiteStateSkippedByFilter) + internal.VerifyCLIAndFrameworkVersion(suites) + if len(suites) == 0 { command.AbortWith("Found no test suites") } @@ -127,7 +129,7 @@ func (w *SpecWatcher) WatchSpecs(args []string, additionalArgs []string) { w.updateSeed() w.computeSuccinctMode(len(suites)) for idx := range suites { - if w.interruptHandler.Status().Interrupted { + if w.interruptHandler.Status().Interrupted() { return } deltaTracker.WillRun(suites[idx]) @@ -156,7 +158,7 @@ func (w *SpecWatcher) compileAndRun(suite internal.TestSuite, additionalArgs []s fmt.Println(suite.CompilationError.Error()) return suite } - if w.interruptHandler.Status().Interrupted { + if w.interruptHandler.Status().Interrupted() { return suite } suite = internal.RunCompiledSuite(suite, w.suiteConfig, w.reporterConfig, w.cliConfig, w.goFlagsConfig, additionalArgs) diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/interrupt_handler.go b/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/interrupt_handler.go index ad224bc595..8ed86111f7 100644 --- a/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/interrupt_handler.go +++ b/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/interrupt_handler.go @@ -1,7 +1,6 @@ package interrupt_handler import ( - "fmt" "os" "os/signal" "sync" @@ -11,27 +10,29 @@ import ( "github.com/onsi/ginkgo/v2/internal/parallel_support" ) -const TIMEOUT_REPEAT_INTERRUPT_MAXIMUM_DURATION = 30 * time.Second -const TIMEOUT_REPEAT_INTERRUPT_FRACTION_OF_TIMEOUT = 10 -const ABORT_POLLING_INTERVAL = 500 * time.Millisecond -const ABORT_REPEAT_INTERRUPT_DURATION = 30 * time.Second +var ABORT_POLLING_INTERVAL = 500 * time.Millisecond type InterruptCause uint const ( InterruptCauseInvalid InterruptCause = iota - InterruptCauseSignal - InterruptCauseTimeout InterruptCauseAbortByOtherProcess ) +type InterruptLevel uint + +const ( + InterruptLevelUninterrupted InterruptLevel = iota + InterruptLevelCleanupAndReport + InterruptLevelReportOnly + InterruptLevelBailOut +) + func (ic InterruptCause) String() string { switch ic { case InterruptCauseSignal: return "Interrupted by User" - case InterruptCauseTimeout: - return "Interrupted by Timeout" case InterruptCauseAbortByOtherProcess: return "Interrupted by Other Ginkgo Process" } @@ -39,37 +40,51 @@ func (ic InterruptCause) String() string { } type InterruptStatus struct { - Interrupted bool - Channel chan interface{} - Cause InterruptCause + Channel chan interface{} + Level InterruptLevel + Cause InterruptCause +} + +func (s InterruptStatus) Interrupted() bool { + return s.Level != InterruptLevelUninterrupted +} + +func (s InterruptStatus) Message() string { + return s.Cause.String() +} + +func (s InterruptStatus) ShouldIncludeProgressReport() bool { + return s.Cause != InterruptCauseAbortByOtherProcess } type InterruptHandlerInterface interface { Status() InterruptStatus - SetInterruptPlaceholderMessage(string) - ClearInterruptPlaceholderMessage() - InterruptMessage() (string, bool) } type InterruptHandler struct { - c chan interface{} - lock *sync.Mutex - interrupted bool - interruptPlaceholderMessage string - interruptCause InterruptCause - client parallel_support.Client - stop chan interface{} + c chan interface{} + lock *sync.Mutex + level InterruptLevel + cause InterruptCause + client parallel_support.Client + stop chan interface{} + signals []os.Signal + requestAbortCheck chan interface{} } -func NewInterruptHandler(timeout time.Duration, client parallel_support.Client) *InterruptHandler { +func NewInterruptHandler(client parallel_support.Client, signals ...os.Signal) *InterruptHandler { + if len(signals) == 0 { + signals = []os.Signal{os.Interrupt, syscall.SIGTERM} + } handler := &InterruptHandler{ - c: make(chan interface{}), - lock: &sync.Mutex{}, - interrupted: false, - stop: make(chan interface{}), - client: client, + c: make(chan interface{}), + lock: &sync.Mutex{}, + stop: make(chan interface{}), + requestAbortCheck: make(chan interface{}), + client: client, + signals: signals, } - handler.registerForInterrupts(timeout) + handler.registerForInterrupts() return handler } @@ -77,30 +92,28 @@ func (handler *InterruptHandler) Stop() { close(handler.stop) } -func (handler *InterruptHandler) registerForInterrupts(timeout time.Duration) { +func (handler *InterruptHandler) registerForInterrupts() { // os signal handling signalChannel := make(chan os.Signal, 1) - signal.Notify(signalChannel, os.Interrupt, syscall.SIGTERM) - - // timeout handling - var timeoutChannel <-chan time.Time - var timeoutTimer *time.Timer - if timeout > 0 { - timeoutTimer = time.NewTimer(timeout) - timeoutChannel = timeoutTimer.C - } + signal.Notify(signalChannel, handler.signals...) // cross-process abort handling - var abortChannel chan bool + var abortChannel chan interface{} if handler.client != nil { - abortChannel = make(chan bool) + abortChannel = make(chan interface{}) go func() { pollTicker := time.NewTicker(ABORT_POLLING_INTERVAL) for { select { case <-pollTicker.C: if handler.client.ShouldAbort() { - abortChannel <- true + close(abortChannel) + pollTicker.Stop() + return + } + case <-handler.requestAbortCheck: + if handler.client.ShouldAbort() { + close(abortChannel) pollTicker.Stop() return } @@ -112,85 +125,53 @@ func (handler *InterruptHandler) registerForInterrupts(timeout time.Duration) { }() } - // listen for any interrupt signals - // note that some (timeouts, cross-process aborts) will only trigger once - // for these we set up a ticker to keep interrupting the suite until it ends - // this ensures any `AfterEach` or `AfterSuite`s that get stuck cleaning up - // get interrupted eventually - go func() { + go func(abortChannel chan interface{}) { var interruptCause InterruptCause - var repeatChannel <-chan time.Time - var repeatTicker *time.Ticker for { select { case <-signalChannel: interruptCause = InterruptCauseSignal - case <-timeoutChannel: - interruptCause = InterruptCauseTimeout - repeatInterruptTimeout := timeout / time.Duration(TIMEOUT_REPEAT_INTERRUPT_FRACTION_OF_TIMEOUT) - if repeatInterruptTimeout > TIMEOUT_REPEAT_INTERRUPT_MAXIMUM_DURATION { - repeatInterruptTimeout = TIMEOUT_REPEAT_INTERRUPT_MAXIMUM_DURATION - } - timeoutTimer.Stop() - repeatTicker = time.NewTicker(repeatInterruptTimeout) - repeatChannel = repeatTicker.C case <-abortChannel: interruptCause = InterruptCauseAbortByOtherProcess - repeatTicker = time.NewTicker(ABORT_REPEAT_INTERRUPT_DURATION) - repeatChannel = repeatTicker.C - case <-repeatChannel: - //do nothing, just interrupt again using the same interruptCause case <-handler.stop: - if timeoutTimer != nil { - timeoutTimer.Stop() - } - if repeatTicker != nil { - repeatTicker.Stop() - } signal.Stop(signalChannel) return } + abortChannel = nil + handler.lock.Lock() - handler.interruptCause = interruptCause - if handler.interruptPlaceholderMessage != "" { - fmt.Println(handler.interruptPlaceholderMessage) + oldLevel := handler.level + handler.cause = interruptCause + if handler.level == InterruptLevelUninterrupted { + handler.level = InterruptLevelCleanupAndReport + } else if handler.level == InterruptLevelCleanupAndReport { + handler.level = InterruptLevelReportOnly + } else if handler.level == InterruptLevelReportOnly { + handler.level = InterruptLevelBailOut + } + if handler.level != oldLevel { + close(handler.c) + handler.c = make(chan interface{}) } - handler.interrupted = true - close(handler.c) - handler.c = make(chan interface{}) handler.lock.Unlock() } - }() + }(abortChannel) } func (handler *InterruptHandler) Status() InterruptStatus { handler.lock.Lock() - defer handler.lock.Unlock() - - return InterruptStatus{ - Interrupted: handler.interrupted, - Channel: handler.c, - Cause: handler.interruptCause, + status := InterruptStatus{ + Level: handler.level, + Channel: handler.c, + Cause: handler.cause, } -} - -func (handler *InterruptHandler) SetInterruptPlaceholderMessage(message string) { - handler.lock.Lock() - defer handler.lock.Unlock() - - handler.interruptPlaceholderMessage = message -} - -func (handler *InterruptHandler) ClearInterruptPlaceholderMessage() { - handler.lock.Lock() - defer handler.lock.Unlock() + handler.lock.Unlock() - handler.interruptPlaceholderMessage = "" -} + if handler.client != nil && handler.client.ShouldAbort() && !status.Interrupted() { + close(handler.requestAbortCheck) + <-status.Channel + return handler.Status() + } -func (handler *InterruptHandler) InterruptMessage() (string, bool) { - handler.lock.Lock() - out := fmt.Sprintf("%s", handler.interruptCause.String()) - defer handler.lock.Unlock() - return out, handler.interruptCause != InterruptCauseAbortByOtherProcess + return status } diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/client_server.go b/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/client_server.go index b417bf5b3f..b3cd64292a 100644 --- a/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/client_server.go +++ b/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/client_server.go @@ -42,6 +42,8 @@ type Client interface { PostSuiteWillBegin(report types.Report) error PostDidRun(report types.SpecReport) error PostSuiteDidEnd(report types.Report) error + PostReportBeforeSuiteCompleted(state types.SpecState) error + BlockUntilReportBeforeSuiteCompleted() (types.SpecState, error) PostSynchronizedBeforeSuiteCompleted(state types.SpecState, data []byte) error BlockUntilSynchronizedBeforeSuiteData() (types.SpecState, []byte, error) BlockUntilNonprimaryProcsHaveFinished() error diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_client.go b/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_client.go index ad9932f2a9..6547c7a66e 100644 --- a/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_client.go +++ b/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_client.go @@ -98,6 +98,19 @@ func (client *httpClient) PostEmitProgressReport(report types.ProgressReport) er return client.post("/progress-report", report) } +func (client *httpClient) PostReportBeforeSuiteCompleted(state types.SpecState) error { + return client.post("/report-before-suite-completed", state) +} + +func (client *httpClient) BlockUntilReportBeforeSuiteCompleted() (types.SpecState, error) { + var state types.SpecState + err := client.poll("/report-before-suite-state", &state) + if err == ErrorGone { + return types.SpecStateFailed, nil + } + return state, err +} + func (client *httpClient) PostSynchronizedBeforeSuiteCompleted(state types.SpecState, data []byte) error { beforeSuiteState := BeforeSuiteState{ State: state, diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_server.go b/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_server.go index fa3ac682a0..d2c71ab1b2 100644 --- a/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_server.go +++ b/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_server.go @@ -26,7 +26,7 @@ type httpServer struct { handler *ServerHandler } -//Create a new server, automatically selecting a port +// Create a new server, automatically selecting a port func newHttpServer(parallelTotal int, reporter reporters.Reporter) (*httpServer, error) { listener, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { @@ -38,7 +38,7 @@ func newHttpServer(parallelTotal int, reporter reporters.Reporter) (*httpServer, }, nil } -//Start the server. You don't need to `go s.Start()`, just `s.Start()` +// Start the server. You don't need to `go s.Start()`, just `s.Start()` func (server *httpServer) Start() { httpServer := &http.Server{} mux := http.NewServeMux() @@ -52,6 +52,8 @@ func (server *httpServer) Start() { mux.HandleFunc("/progress-report", server.emitProgressReport) //synchronization endpoints + mux.HandleFunc("/report-before-suite-completed", server.handleReportBeforeSuiteCompleted) + mux.HandleFunc("/report-before-suite-state", server.handleReportBeforeSuiteState) mux.HandleFunc("/before-suite-completed", server.handleBeforeSuiteCompleted) mux.HandleFunc("/before-suite-state", server.handleBeforeSuiteState) mux.HandleFunc("/have-nonprimary-procs-finished", server.handleHaveNonprimaryProcsFinished) @@ -63,12 +65,12 @@ func (server *httpServer) Start() { go httpServer.Serve(server.listener) } -//Stop the server +// Stop the server func (server *httpServer) Close() { server.listener.Close() } -//The address the server can be reached it. Pass this into the `ForwardingReporter`. +// The address the server can be reached it. Pass this into the `ForwardingReporter`. func (server *httpServer) Address() string { return "http://" + server.listener.Addr().String() } @@ -93,7 +95,7 @@ func (server *httpServer) RegisterAlive(node int, alive func() bool) { // Streaming Endpoints // -//The server will forward all received messages to Ginkgo reporters registered with `RegisterReporters` +// The server will forward all received messages to Ginkgo reporters registered with `RegisterReporters` func (server *httpServer) decode(writer http.ResponseWriter, request *http.Request, object interface{}) bool { defer request.Body.Close() if json.NewDecoder(request.Body).Decode(object) != nil { @@ -164,6 +166,23 @@ func (server *httpServer) emitProgressReport(writer http.ResponseWriter, request server.handleError(server.handler.EmitProgressReport(report, voidReceiver), writer) } +func (server *httpServer) handleReportBeforeSuiteCompleted(writer http.ResponseWriter, request *http.Request) { + var state types.SpecState + if !server.decode(writer, request, &state) { + return + } + + server.handleError(server.handler.ReportBeforeSuiteCompleted(state, voidReceiver), writer) +} + +func (server *httpServer) handleReportBeforeSuiteState(writer http.ResponseWriter, request *http.Request) { + var state types.SpecState + if server.handleError(server.handler.ReportBeforeSuiteState(voidSender, &state), writer) { + return + } + json.NewEncoder(writer).Encode(state) +} + func (server *httpServer) handleBeforeSuiteCompleted(writer http.ResponseWriter, request *http.Request) { var beforeSuiteState BeforeSuiteState if !server.decode(writer, request, &beforeSuiteState) { diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_client.go b/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_client.go index fe93cc2b9a..59e8e6fd0a 100644 --- a/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_client.go +++ b/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_client.go @@ -76,6 +76,19 @@ func (client *rpcClient) PostEmitProgressReport(report types.ProgressReport) err return client.client.Call("Server.EmitProgressReport", report, voidReceiver) } +func (client *rpcClient) PostReportBeforeSuiteCompleted(state types.SpecState) error { + return client.client.Call("Server.ReportBeforeSuiteCompleted", state, voidReceiver) +} + +func (client *rpcClient) BlockUntilReportBeforeSuiteCompleted() (types.SpecState, error) { + var state types.SpecState + err := client.poll("Server.ReportBeforeSuiteState", &state) + if err == ErrorGone { + return types.SpecStateFailed, nil + } + return state, err +} + func (client *rpcClient) PostSynchronizedBeforeSuiteCompleted(state types.SpecState, data []byte) error { beforeSuiteState := BeforeSuiteState{ State: state, diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/server_handler.go b/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/server_handler.go index 7c6e67b960..a6d98793e9 100644 --- a/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/server_handler.go +++ b/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/server_handler.go @@ -18,16 +18,17 @@ var voidSender Void // It handles all the business logic to avoid duplication between the two servers type ServerHandler struct { - done chan interface{} - outputDestination io.Writer - reporter reporters.Reporter - alives []func() bool - lock *sync.Mutex - beforeSuiteState BeforeSuiteState - parallelTotal int - counter int - counterLock *sync.Mutex - shouldAbort bool + done chan interface{} + outputDestination io.Writer + reporter reporters.Reporter + alives []func() bool + lock *sync.Mutex + beforeSuiteState BeforeSuiteState + reportBeforeSuiteState types.SpecState + parallelTotal int + counter int + counterLock *sync.Mutex + shouldAbort bool numSuiteDidBegins int numSuiteDidEnds int @@ -37,11 +38,12 @@ type ServerHandler struct { func newServerHandler(parallelTotal int, reporter reporters.Reporter) *ServerHandler { return &ServerHandler{ - reporter: reporter, - lock: &sync.Mutex{}, - counterLock: &sync.Mutex{}, - alives: make([]func() bool, parallelTotal), - beforeSuiteState: BeforeSuiteState{Data: nil, State: types.SpecStateInvalid}, + reporter: reporter, + lock: &sync.Mutex{}, + counterLock: &sync.Mutex{}, + alives: make([]func() bool, parallelTotal), + beforeSuiteState: BeforeSuiteState{Data: nil, State: types.SpecStateInvalid}, + parallelTotal: parallelTotal, outputDestination: os.Stdout, done: make(chan interface{}), @@ -140,6 +142,29 @@ func (handler *ServerHandler) haveNonprimaryProcsFinished() bool { return true } +func (handler *ServerHandler) ReportBeforeSuiteCompleted(reportBeforeSuiteState types.SpecState, _ *Void) error { + handler.lock.Lock() + defer handler.lock.Unlock() + handler.reportBeforeSuiteState = reportBeforeSuiteState + + return nil +} + +func (handler *ServerHandler) ReportBeforeSuiteState(_ Void, reportBeforeSuiteState *types.SpecState) error { + proc1IsAlive := handler.procIsAlive(1) + handler.lock.Lock() + defer handler.lock.Unlock() + if handler.reportBeforeSuiteState == types.SpecStateInvalid { + if proc1IsAlive { + return ErrorEarly + } else { + return ErrorGone + } + } + *reportBeforeSuiteState = handler.reportBeforeSuiteState + return nil +} + func (handler *ServerHandler) BeforeSuiteCompleted(beforeSuiteState BeforeSuiteState, _ *Void) error { handler.lock.Lock() defer handler.lock.Unlock() diff --git a/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go b/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go index ccd3317a59..56b7be7587 100644 --- a/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go +++ b/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go @@ -12,6 +12,7 @@ import ( "io" "runtime" "strings" + "sync" "time" "github.com/onsi/ginkgo/v2/formatter" @@ -23,13 +24,16 @@ type DefaultReporter struct { writer io.Writer // managing the emission stream - lastChar string + lastCharWasNewline bool lastEmissionWasDelimiter bool // rendering specDenoter string retryDenoter string formatter formatter.Formatter + + runningInParallel bool + lock *sync.Mutex } func NewDefaultReporterUnderTest(conf types.ReporterConfig, writer io.Writer) *DefaultReporter { @@ -44,12 +48,13 @@ func NewDefaultReporter(conf types.ReporterConfig, writer io.Writer) *DefaultRep conf: conf, writer: writer, - lastChar: "\n", + lastCharWasNewline: true, lastEmissionWasDelimiter: false, specDenoter: "•", retryDenoter: "↺", formatter: formatter.NewWithNoColorBool(conf.NoColor), + lock: &sync.Mutex{}, } if runtime.GOOS == "windows" { reporter.specDenoter = "+" @@ -97,244 +102,356 @@ func (r *DefaultReporter) SuiteWillBegin(report types.Report) { } } -func (r *DefaultReporter) WillRun(report types.SpecReport) { - if r.conf.Verbosity().LT(types.VerbosityLevelVerbose) || report.State.Is(types.SpecStatePending|types.SpecStateSkipped) { +func (r *DefaultReporter) SuiteDidEnd(report types.Report) { + failures := report.SpecReports.WithState(types.SpecStateFailureStates) + if len(failures) > 0 { + r.emitBlock("\n") + if len(failures) > 1 { + r.emitBlock(r.f("{{red}}{{bold}}Summarizing %d Failures:{{/}}", len(failures))) + } else { + r.emitBlock(r.f("{{red}}{{bold}}Summarizing 1 Failure:{{/}}")) + } + for _, specReport := range failures { + highlightColor, heading := "{{red}}", "[FAIL]" + switch specReport.State { + case types.SpecStatePanicked: + highlightColor, heading = "{{magenta}}", "[PANICKED!]" + case types.SpecStateAborted: + highlightColor, heading = "{{coral}}", "[ABORTED]" + case types.SpecStateTimedout: + highlightColor, heading = "{{orange}}", "[TIMEDOUT]" + case types.SpecStateInterrupted: + highlightColor, heading = "{{orange}}", "[INTERRUPTED]" + } + locationBlock := r.codeLocationBlock(specReport, highlightColor, false, true) + r.emitBlock(r.fi(1, highlightColor+"%s{{/}} %s", heading, locationBlock)) + } + } + + //summarize the suite + if r.conf.Verbosity().Is(types.VerbosityLevelSuccinct) && report.SuiteSucceeded { + r.emit(r.f(" {{green}}SUCCESS!{{/}} %s ", report.RunTime)) return } - r.emitDelimiter() - indentation := uint(0) - if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) { - r.emitBlock(r.f("{{bold}}[%s] %s{{/}}", report.LeafNodeType.String(), report.LeafNodeText)) + r.emitBlock("\n") + color, status := "{{green}}{{bold}}", "SUCCESS!" + if !report.SuiteSucceeded { + color, status = "{{red}}{{bold}}", "FAIL!" + } + + specs := report.SpecReports.WithLeafNodeType(types.NodeTypeIt) //exclude any suite setup nodes + r.emitBlock(r.f(color+"Ran %d of %d Specs in %.3f seconds{{/}}", + specs.CountWithState(types.SpecStatePassed)+specs.CountWithState(types.SpecStateFailureStates), + report.PreRunStats.TotalSpecs, + report.RunTime.Seconds()), + ) + + switch len(report.SpecialSuiteFailureReasons) { + case 0: + r.emit(r.f(color+"%s{{/}} -- ", status)) + case 1: + r.emit(r.f(color+"%s - %s{{/}} -- ", status, report.SpecialSuiteFailureReasons[0])) + default: + r.emitBlock(r.f(color+"%s - %s{{/}}\n", status, strings.Join(report.SpecialSuiteFailureReasons, ", "))) + } + + if len(specs) == 0 && report.SpecReports.WithLeafNodeType(types.NodeTypeBeforeSuite|types.NodeTypeSynchronizedBeforeSuite).CountWithState(types.SpecStateFailureStates) > 0 { + r.emit(r.f("{{cyan}}{{bold}}A BeforeSuite node failed so all tests were skipped.{{/}}\n")) } else { - if len(report.ContainerHierarchyTexts) > 0 { - r.emitBlock(r.cycleJoin(report.ContainerHierarchyTexts, " ")) - indentation = 1 + r.emit(r.f("{{green}}{{bold}}%d Passed{{/}} | ", specs.CountWithState(types.SpecStatePassed))) + r.emit(r.f("{{red}}{{bold}}%d Failed{{/}} | ", specs.CountWithState(types.SpecStateFailureStates))) + if specs.CountOfFlakedSpecs() > 0 { + r.emit(r.f("{{light-yellow}}{{bold}}%d Flaked{{/}} | ", specs.CountOfFlakedSpecs())) } - line := r.fi(indentation, "{{bold}}%s{{/}}", report.LeafNodeText) - labels := report.Labels() - if len(labels) > 0 { - line += r.f(" {{coral}}[%s]{{/}}", strings.Join(labels, ", ")) + if specs.CountOfRepeatedSpecs() > 0 { + r.emit(r.f("{{light-yellow}}{{bold}}%d Repeated{{/}} | ", specs.CountOfRepeatedSpecs())) } - r.emitBlock(line) + r.emit(r.f("{{yellow}}{{bold}}%d Pending{{/}} | ", specs.CountWithState(types.SpecStatePending))) + r.emit(r.f("{{cyan}}{{bold}}%d Skipped{{/}}\n", specs.CountWithState(types.SpecStateSkipped))) } - r.emitBlock(r.fi(indentation, "{{gray}}%s{{/}}", report.LeafNodeLocation)) } -func (r *DefaultReporter) DidRun(report types.SpecReport) { +func (r *DefaultReporter) WillRun(report types.SpecReport) { v := r.conf.Verbosity() - var header, highlightColor string - includeRuntime, emitGinkgoWriterOutput, stream, denoter := true, true, false, r.specDenoter - succinctLocationBlock := v.Is(types.VerbosityLevelSuccinct) + if v.LT(types.VerbosityLevelVerbose) || report.State.Is(types.SpecStatePending|types.SpecStateSkipped) || report.RunningInParallel { + return + } + + r.emitDelimiter(0) + r.emitBlock(r.f(r.codeLocationBlock(report, "{{/}}", v.Is(types.VerbosityLevelVeryVerbose), false))) +} - hasGW := report.CapturedGinkgoWriterOutput != "" - hasStd := report.CapturedStdOutErr != "" - hasEmittableReports := report.ReportEntries.HasVisibility(types.ReportEntryVisibilityAlways) || (report.ReportEntries.HasVisibility(types.ReportEntryVisibilityFailureOrVerbose) && (!report.Failure.IsZero() || v.GTE(types.VerbosityLevelVerbose))) +func (r *DefaultReporter) DidRun(report types.SpecReport) { + v := r.conf.Verbosity() + inParallel := report.RunningInParallel + header := r.specDenoter if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) { - denoter = fmt.Sprintf("[%s]", report.LeafNodeType) + header = fmt.Sprintf("[%s]", report.LeafNodeType) + } + highlightColor := r.highlightColorForState(report.State) + + // have we already been streaming the timeline? + timelineHasBeenStreaming := v.GTE(types.VerbosityLevelVerbose) && !inParallel + + // should we show the timeline? + var timeline types.Timeline + showTimeline := !timelineHasBeenStreaming && (v.GTE(types.VerbosityLevelVerbose) || report.Failed()) + if showTimeline { + timeline = report.Timeline().WithoutHiddenReportEntries() + keepVeryVerboseSpecEvents := v.Is(types.VerbosityLevelVeryVerbose) || + (v.Is(types.VerbosityLevelVerbose) && r.conf.ShowNodeEvents) || + (report.Failed() && r.conf.ShowNodeEvents) + if !keepVeryVerboseSpecEvents { + timeline = timeline.WithoutVeryVerboseSpecEvents() + } + if len(timeline) == 0 && report.CapturedGinkgoWriterOutput == "" { + // the timeline is completely empty - don't show it + showTimeline = false + } + if v.LT(types.VerbosityLevelVeryVerbose) && report.CapturedGinkgoWriterOutput == "" && len(timeline) > 0 { + //if we aren't -vv and the timeline only has a single failure, don't show it as it will appear at the end of the report + failure, isFailure := timeline[0].(types.Failure) + if isFailure && (len(timeline) == 1 || (len(timeline) == 2 && failure.AdditionalFailure != nil)) { + showTimeline = false + } + } } + // should we have a separate section for always-visible reports? + showSeparateVisibilityAlwaysReportsSection := !timelineHasBeenStreaming && !showTimeline && report.ReportEntries.HasVisibility(types.ReportEntryVisibilityAlways) + + // should we have a separate section for captured stdout/stderr + showSeparateStdSection := inParallel && (report.CapturedStdOutErr != "") + + // given all that - do we have any actual content to show? or are we a single denoter in a stream? + reportHasContent := v.Is(types.VerbosityLevelVeryVerbose) || showTimeline || showSeparateVisibilityAlwaysReportsSection || showSeparateStdSection || report.Failed() || (v.Is(types.VerbosityLevelVerbose) && !report.State.Is(types.SpecStateSkipped)) + + // should we show a runtime? + includeRuntime := !report.State.Is(types.SpecStateSkipped|types.SpecStatePending) || (report.State.Is(types.SpecStateSkipped) && report.Failure.Message != "") + + // should we show the codelocation block? + showCodeLocation := !timelineHasBeenStreaming || !report.State.Is(types.SpecStatePassed) + switch report.State { case types.SpecStatePassed: - highlightColor, succinctLocationBlock = "{{green}}", v.LT(types.VerbosityLevelVerbose) - emitGinkgoWriterOutput = (r.conf.AlwaysEmitGinkgoWriter || v.GTE(types.VerbosityLevelVerbose)) && hasGW + if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) && !reportHasContent { + return + } if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) { - if v.GTE(types.VerbosityLevelVerbose) || hasStd || hasEmittableReports { - header = fmt.Sprintf("%s PASSED", denoter) - } else { - return - } - } else { - header, stream = denoter, true - if report.NumAttempts > 1 { - header, stream = fmt.Sprintf("%s [FLAKEY TEST - TOOK %d ATTEMPTS TO PASS]", r.retryDenoter, report.NumAttempts), false - } - if report.RunTime > r.conf.SlowSpecThreshold { - header, stream = fmt.Sprintf("%s [SLOW TEST]", header), false - } + header = fmt.Sprintf("%s PASSED", header) } - if hasStd || emitGinkgoWriterOutput || hasEmittableReports { - stream = false + if report.NumAttempts > 1 && report.MaxFlakeAttempts > 1 { + header, reportHasContent = fmt.Sprintf("%s [FLAKEY TEST - TOOK %d ATTEMPTS TO PASS]", r.retryDenoter, report.NumAttempts), true } case types.SpecStatePending: - highlightColor = "{{yellow}}" - includeRuntime, emitGinkgoWriterOutput = false, false - if v.Is(types.VerbosityLevelSuccinct) { - header, stream = "P", true - } else { - header, succinctLocationBlock = "P [PENDING]", v.LT(types.VerbosityLevelVeryVerbose) + header = "P" + if v.GT(types.VerbosityLevelSuccinct) { + header, reportHasContent = "P [PENDING]", true } case types.SpecStateSkipped: - highlightColor = "{{cyan}}" - if report.Failure.Message != "" || v.Is(types.VerbosityLevelVeryVerbose) { - header = "S [SKIPPED]" - } else { - header, stream = "S", true + header = "S" + if v.Is(types.VerbosityLevelVeryVerbose) || (v.Is(types.VerbosityLevelVerbose) && report.Failure.Message != "") { + header, reportHasContent = "S [SKIPPED]", true + } + default: + header = fmt.Sprintf("%s [%s]", header, r.humanReadableState(report.State)) + if report.MaxMustPassRepeatedly > 1 { + header = fmt.Sprintf("%s DURING REPETITION #%d", header, report.NumAttempts) } - case types.SpecStateFailed: - highlightColor, header = "{{red}}", fmt.Sprintf("%s [FAILED]", denoter) - case types.SpecStatePanicked: - highlightColor, header = "{{magenta}}", fmt.Sprintf("%s! [PANICKED]", denoter) - case types.SpecStateInterrupted: - highlightColor, header = "{{orange}}", fmt.Sprintf("%s! [INTERRUPTED]", denoter) - case types.SpecStateAborted: - highlightColor, header = "{{coral}}", fmt.Sprintf("%s! [ABORTED]", denoter) } - // Emit stream and return - if stream { + // If we have no content to show, jsut emit the header and return + if !reportHasContent { r.emit(r.f(highlightColor + header + "{{/}}")) return } - // Emit header - r.emitDelimiter() if includeRuntime { header = r.f("%s [%.3f seconds]", header, report.RunTime.Seconds()) } - r.emitBlock(r.f(highlightColor + header + "{{/}}")) - // Emit Code Location Block - r.emitBlock(r.codeLocationBlock(report, highlightColor, succinctLocationBlock, false)) + // Emit header + if !timelineHasBeenStreaming { + r.emitDelimiter(0) + } + r.emitBlock(r.f(highlightColor + header + "{{/}}")) + if showCodeLocation { + r.emitBlock(r.codeLocationBlock(report, highlightColor, v.Is(types.VerbosityLevelVeryVerbose), false)) + } //Emit Stdout/Stderr Output - if hasStd { + if showSeparateStdSection { r.emitBlock("\n") - r.emitBlock(r.fi(1, "{{gray}}Begin Captured StdOut/StdErr Output >>{{/}}")) - r.emitBlock(r.fi(2, "%s", report.CapturedStdOutErr)) - r.emitBlock(r.fi(1, "{{gray}}<< End Captured StdOut/StdErr Output{{/}}")) + r.emitBlock(r.fi(1, "{{gray}}Captured StdOut/StdErr Output >>{{/}}")) + r.emitBlock(r.fi(1, "%s", report.CapturedStdOutErr)) + r.emitBlock(r.fi(1, "{{gray}}<< Captured StdOut/StdErr Output{{/}}")) } - //Emit Captured GinkgoWriter Output - if emitGinkgoWriterOutput && hasGW { + if showSeparateVisibilityAlwaysReportsSection { r.emitBlock("\n") - r.emitGinkgoWriterOutput(1, report.CapturedGinkgoWriterOutput, 0) + r.emitBlock(r.fi(1, "{{gray}}Report Entries >>{{/}}")) + for _, entry := range report.ReportEntries.WithVisibility(types.ReportEntryVisibilityAlways) { + r.emitReportEntry(1, entry) + } + r.emitBlock(r.fi(1, "{{gray}}<< Report Entries{{/}}")) } - if hasEmittableReports { + if showTimeline { r.emitBlock("\n") - r.emitBlock(r.fi(1, "{{gray}}Begin Report Entries >>{{/}}")) - reportEntries := report.ReportEntries.WithVisibility(types.ReportEntryVisibilityAlways) - if !report.Failure.IsZero() || v.GTE(types.VerbosityLevelVerbose) { - reportEntries = report.ReportEntries.WithVisibility(types.ReportEntryVisibilityAlways, types.ReportEntryVisibilityFailureOrVerbose) - } - for _, entry := range reportEntries { - r.emitBlock(r.fi(2, "{{bold}}"+entry.Name+"{{gray}} - %s @ %s{{/}}", entry.Location, entry.Time.Format(types.GINKGO_TIME_FORMAT))) - if representation := entry.StringRepresentation(); representation != "" { - r.emitBlock(r.fi(3, representation)) - } - } - r.emitBlock(r.fi(1, "{{gray}}<< End Report Entries{{/}}")) + r.emitBlock(r.fi(1, "{{gray}}Timeline >>{{/}}")) + r.emitTimeline(1, report, timeline) + r.emitBlock(r.fi(1, "{{gray}}<< Timeline{{/}}")) } // Emit Failure Message - if !report.Failure.IsZero() { + if !report.Failure.IsZero() && !v.Is(types.VerbosityLevelVeryVerbose) { r.emitBlock("\n") - r.emitBlock(r.fi(1, highlightColor+"%s{{/}}", report.Failure.Message)) - r.emitBlock(r.fi(1, highlightColor+"In {{bold}}[%s]{{/}}"+highlightColor+" at: {{bold}}%s{{/}}\n", report.Failure.FailureNodeType, report.Failure.Location)) - if report.Failure.ForwardedPanic != "" { - r.emitBlock("\n") - r.emitBlock(r.fi(1, highlightColor+"%s{{/}}", report.Failure.ForwardedPanic)) + r.emitFailure(1, report.State, report.Failure, true) + if len(report.AdditionalFailures) > 0 { + r.emitBlock(r.fi(1, "\nThere were {{bold}}{{red}}additional failures{{/}} detected. To view them in detail run {{bold}}ginkgo -vv{{/}}")) } + } - if r.conf.FullTrace || report.Failure.ForwardedPanic != "" { - r.emitBlock("\n") - r.emitBlock(r.fi(1, highlightColor+"Full Stack Trace{{/}}")) - r.emitBlock(r.fi(2, "%s", report.Failure.Location.FullStackTrace)) - } + r.emitDelimiter(0) +} - if !report.Failure.ProgressReport.IsZero() { - r.emitBlock("\n") - r.emitProgressReport(1, false, report.Failure.ProgressReport) - } +func (r *DefaultReporter) highlightColorForState(state types.SpecState) string { + switch state { + case types.SpecStatePassed: + return "{{green}}" + case types.SpecStatePending: + return "{{yellow}}" + case types.SpecStateSkipped: + return "{{cyan}}" + case types.SpecStateFailed: + return "{{red}}" + case types.SpecStateTimedout: + return "{{orange}}" + case types.SpecStatePanicked: + return "{{magenta}}" + case types.SpecStateInterrupted: + return "{{orange}}" + case types.SpecStateAborted: + return "{{coral}}" + default: + return "{{gray}}" } +} - r.emitDelimiter() +func (r *DefaultReporter) humanReadableState(state types.SpecState) string { + return strings.ToUpper(state.String()) } -func (r *DefaultReporter) SuiteDidEnd(report types.Report) { - failures := report.SpecReports.WithState(types.SpecStateFailureStates) - if len(failures) > 0 { - r.emitBlock("\n\n") - if len(failures) > 1 { - r.emitBlock(r.f("{{red}}{{bold}}Summarizing %d Failures:{{/}}", len(failures))) - } else { - r.emitBlock(r.f("{{red}}{{bold}}Summarizing 1 Failure:{{/}}")) - } - for _, specReport := range failures { - highlightColor, heading := "{{red}}", "[FAIL]" - switch specReport.State { - case types.SpecStatePanicked: - highlightColor, heading = "{{magenta}}", "[PANICKED!]" - case types.SpecStateAborted: - highlightColor, heading = "{{coral}}", "[ABORTED]" - case types.SpecStateInterrupted: - highlightColor, heading = "{{orange}}", "[INTERRUPTED]" +func (r *DefaultReporter) emitTimeline(indent uint, report types.SpecReport, timeline types.Timeline) { + isVeryVerbose := r.conf.Verbosity().Is(types.VerbosityLevelVeryVerbose) + gw := report.CapturedGinkgoWriterOutput + cursor := 0 + for _, entry := range timeline { + tl := entry.GetTimelineLocation() + if tl.Offset < len(gw) { + r.emit(r.fi(indent, "%s", gw[cursor:tl.Offset])) + cursor = tl.Offset + } else if cursor < len(gw) { + r.emit(r.fi(indent, "%s", gw[cursor:])) + cursor = len(gw) + } + switch x := entry.(type) { + case types.Failure: + if isVeryVerbose { + r.emitFailure(indent, report.State, x, false) + } else { + r.emitShortFailure(indent, report.State, x) + } + case types.AdditionalFailure: + if isVeryVerbose { + r.emitFailure(indent, x.State, x.Failure, true) + } else { + r.emitShortFailure(indent, x.State, x.Failure) + } + case types.ReportEntry: + r.emitReportEntry(indent, x) + case types.ProgressReport: + r.emitProgressReport(indent, false, x) + case types.SpecEvent: + if isVeryVerbose || !x.IsOnlyVisibleAtVeryVerbose() || r.conf.ShowNodeEvents { + r.emitSpecEvent(indent, x, isVeryVerbose) } - locationBlock := r.codeLocationBlock(specReport, highlightColor, true, true) - r.emitBlock(r.fi(1, highlightColor+"%s{{/}} %s", heading, locationBlock)) } } + if cursor < len(gw) { + r.emit(r.fi(indent, "%s", gw[cursor:])) + } +} - //summarize the suite - if r.conf.Verbosity().Is(types.VerbosityLevelSuccinct) && report.SuiteSucceeded { - r.emit(r.f(" {{green}}SUCCESS!{{/}} %s ", report.RunTime)) - return +func (r *DefaultReporter) EmitFailure(state types.SpecState, failure types.Failure) { + if r.conf.Verbosity().Is(types.VerbosityLevelVerbose) { + r.emitShortFailure(1, state, failure) + } else if r.conf.Verbosity().Is(types.VerbosityLevelVeryVerbose) { + r.emitFailure(1, state, failure, true) } +} - r.emitBlock("\n") - color, status := "{{green}}{{bold}}", "SUCCESS!" - if !report.SuiteSucceeded { - color, status = "{{red}}{{bold}}", "FAIL!" +func (r *DefaultReporter) emitShortFailure(indent uint, state types.SpecState, failure types.Failure) { + r.emitBlock(r.fi(indent, r.highlightColorForState(state)+"[%s]{{/}} in [%s] - %s {{gray}}@ %s{{/}}", + r.humanReadableState(state), + failure.FailureNodeType, + failure.Location, + failure.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT), + )) +} + +func (r *DefaultReporter) emitFailure(indent uint, state types.SpecState, failure types.Failure, includeAdditionalFailure bool) { + highlightColor := r.highlightColorForState(state) + r.emitBlock(r.fi(indent, highlightColor+"[%s] %s{{/}}", r.humanReadableState(state), failure.Message)) + r.emitBlock(r.fi(indent, highlightColor+"In {{bold}}[%s]{{/}}"+highlightColor+" at: {{bold}}%s{{/}} {{gray}}@ %s{{/}}\n", failure.FailureNodeType, failure.Location, failure.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) + if failure.ForwardedPanic != "" { + r.emitBlock("\n") + r.emitBlock(r.fi(indent, highlightColor+"%s{{/}}", failure.ForwardedPanic)) } - specs := report.SpecReports.WithLeafNodeType(types.NodeTypeIt) //exclude any suite setup nodes - r.emitBlock(r.f(color+"Ran %d of %d Specs in %.3f seconds{{/}}", - specs.CountWithState(types.SpecStatePassed)+specs.CountWithState(types.SpecStateFailureStates), - report.PreRunStats.TotalSpecs, - report.RunTime.Seconds()), - ) + if r.conf.FullTrace || failure.ForwardedPanic != "" { + r.emitBlock("\n") + r.emitBlock(r.fi(indent, highlightColor+"Full Stack Trace{{/}}")) + r.emitBlock(r.fi(indent+1, "%s", failure.Location.FullStackTrace)) + } - switch len(report.SpecialSuiteFailureReasons) { - case 0: - r.emit(r.f(color+"%s{{/}} -- ", status)) - case 1: - r.emit(r.f(color+"%s - %s{{/}} -- ", status, report.SpecialSuiteFailureReasons[0])) - default: - r.emitBlock(r.f(color+"%s - %s{{/}}\n", status, strings.Join(report.SpecialSuiteFailureReasons, ", "))) + if !failure.ProgressReport.IsZero() { + r.emitBlock("\n") + r.emitProgressReport(indent, false, failure.ProgressReport) } - if len(specs) == 0 && report.SpecReports.WithLeafNodeType(types.NodeTypeBeforeSuite|types.NodeTypeSynchronizedBeforeSuite).CountWithState(types.SpecStateFailureStates) > 0 { - r.emit(r.f("{{cyan}}{{bold}}A BeforeSuite node failed so all tests were skipped.{{/}}\n")) - } else { - r.emit(r.f("{{green}}{{bold}}%d Passed{{/}} | ", specs.CountWithState(types.SpecStatePassed))) - r.emit(r.f("{{red}}{{bold}}%d Failed{{/}} | ", specs.CountWithState(types.SpecStateFailureStates))) - if specs.CountOfFlakedSpecs() > 0 { - r.emit(r.f("{{light-yellow}}{{bold}}%d Flaked{{/}} | ", specs.CountOfFlakedSpecs())) - } - r.emit(r.f("{{yellow}}{{bold}}%d Pending{{/}} | ", specs.CountWithState(types.SpecStatePending))) - r.emit(r.f("{{cyan}}{{bold}}%d Skipped{{/}}\n", specs.CountWithState(types.SpecStateSkipped))) + if failure.AdditionalFailure != nil && includeAdditionalFailure { + r.emitBlock("\n") + r.emitFailure(indent, failure.AdditionalFailure.State, failure.AdditionalFailure.Failure, true) } } func (r *DefaultReporter) EmitProgressReport(report types.ProgressReport) { - r.emitDelimiter() + r.emitDelimiter(1) if report.RunningInParallel { - r.emit(r.f("{{coral}}Progress Report for Ginkgo Process #{{bold}}%d{{/}}\n", report.ParallelProcess)) + r.emit(r.fi(1, "{{coral}}Progress Report for Ginkgo Process #{{bold}}%d{{/}}\n", report.ParallelProcess)) } - r.emitProgressReport(0, true, report) - r.emitDelimiter() + shouldEmitGW := report.RunningInParallel || r.conf.Verbosity().LT(types.VerbosityLevelVerbose) + r.emitProgressReport(1, shouldEmitGW, report) + r.emitDelimiter(1) } func (r *DefaultReporter) emitProgressReport(indent uint, emitGinkgoWriterOutput bool, report types.ProgressReport) { + if report.Message != "" { + r.emitBlock(r.fi(indent, report.Message+"\n")) + indent += 1 + } if report.LeafNodeText != "" { + subjectIndent := indent if len(report.ContainerHierarchyTexts) > 0 { r.emit(r.fi(indent, r.cycleJoin(report.ContainerHierarchyTexts, " "))) r.emit(" ") + subjectIndent = 0 } - r.emit(r.f("{{bold}}{{orange}}%s{{/}} (Spec Runtime: %s)\n", report.LeafNodeText, report.Time.Sub(report.SpecStartTime).Round(time.Millisecond))) + r.emit(r.fi(subjectIndent, "{{bold}}{{orange}}%s{{/}} (Spec Runtime: %s)\n", report.LeafNodeText, report.Time().Sub(report.SpecStartTime).Round(time.Millisecond))) r.emit(r.fi(indent+1, "{{gray}}%s{{/}}\n", report.LeafNodeLocation)) indent += 1 } @@ -344,12 +461,12 @@ func (r *DefaultReporter) emitProgressReport(indent uint, emitGinkgoWriterOutput r.emit(r.f(" {{bold}}{{orange}}%s{{/}}", report.CurrentNodeText)) } - r.emit(r.f(" (Node Runtime: %s)\n", report.Time.Sub(report.CurrentNodeStartTime).Round(time.Millisecond))) + r.emit(r.f(" (Node Runtime: %s)\n", report.Time().Sub(report.CurrentNodeStartTime).Round(time.Millisecond))) r.emit(r.fi(indent+1, "{{gray}}%s{{/}}\n", report.CurrentNodeLocation)) indent += 1 } if report.CurrentStepText != "" { - r.emit(r.fi(indent, "At {{bold}}{{orange}}[By Step] %s{{/}} (Step Runtime: %s)\n", report.CurrentStepText, report.Time.Sub(report.CurrentStepStartTime).Round(time.Millisecond))) + r.emit(r.fi(indent, "At {{bold}}{{orange}}[By Step] %s{{/}} (Step Runtime: %s)\n", report.CurrentStepText, report.Time().Sub(report.CurrentStepStartTime).Round(time.Millisecond))) r.emit(r.fi(indent+1, "{{gray}}%s{{/}}\n", report.CurrentStepLocation)) indent += 1 } @@ -358,9 +475,19 @@ func (r *DefaultReporter) emitProgressReport(indent uint, emitGinkgoWriterOutput indent -= 1 } - if emitGinkgoWriterOutput && report.CapturedGinkgoWriterOutput != "" && (report.RunningInParallel || r.conf.Verbosity().LT(types.VerbosityLevelVerbose)) { + if emitGinkgoWriterOutput && report.CapturedGinkgoWriterOutput != "" { r.emit("\n") - r.emitGinkgoWriterOutput(indent, report.CapturedGinkgoWriterOutput, 10) + r.emitBlock(r.fi(indent, "{{gray}}Begin Captured GinkgoWriter Output >>{{/}}")) + limit, lines := 10, strings.Split(report.CapturedGinkgoWriterOutput, "\n") + if len(lines) <= limit { + r.emitBlock(r.fi(indent+1, "%s", report.CapturedGinkgoWriterOutput)) + } else { + r.emitBlock(r.fi(indent+1, "{{gray}}...{{/}}")) + for _, line := range lines[len(lines)-limit-1:] { + r.emitBlock(r.fi(indent+1, "%s", line)) + } + } + r.emitBlock(r.fi(indent, "{{gray}}<< End Captured GinkgoWriter Output{{/}}")) } if !report.SpecGoroutine().IsZero() { @@ -369,6 +496,18 @@ func (r *DefaultReporter) emitProgressReport(indent uint, emitGinkgoWriterOutput r.emitGoroutines(indent, report.SpecGoroutine()) } + if len(report.AdditionalReports) > 0 { + r.emit("\n") + r.emitBlock(r.fi(indent, "{{gray}}Begin Additional Progress Reports >>{{/}}")) + for i, additionalReport := range report.AdditionalReports { + r.emit(r.fi(indent+1, additionalReport)) + if i < len(report.AdditionalReports)-1 { + r.emitBlock(r.fi(indent+1, "{{gray}}%s{{/}}", strings.Repeat("-", 10))) + } + } + r.emitBlock(r.fi(indent, "{{gray}}<< End Additional Progress Reports{{/}}")) + } + highlightedGoroutines := report.HighlightedGoroutines() if len(highlightedGoroutines) > 0 { r.emit("\n") @@ -384,22 +523,48 @@ func (r *DefaultReporter) emitProgressReport(indent uint, emitGinkgoWriterOutput } } -func (r *DefaultReporter) emitGinkgoWriterOutput(indent uint, output string, limit int) { - r.emitBlock(r.fi(indent, "{{gray}}Begin Captured GinkgoWriter Output >>{{/}}")) - if limit == 0 { - r.emitBlock(r.fi(indent+1, "%s", output)) - } else { - lines := strings.Split(output, "\n") - if len(lines) <= limit { - r.emitBlock(r.fi(indent+1, "%s", output)) - } else { - r.emitBlock(r.fi(indent+1, "{{gray}}...{{/}}")) - for _, line := range lines[len(lines)-limit-1:] { - r.emitBlock(r.fi(indent+1, "%s", line)) - } - } +func (r *DefaultReporter) EmitReportEntry(entry types.ReportEntry) { + if r.conf.Verbosity().LT(types.VerbosityLevelVerbose) || entry.Visibility == types.ReportEntryVisibilityNever { + return + } + r.emitReportEntry(1, entry) +} + +func (r *DefaultReporter) emitReportEntry(indent uint, entry types.ReportEntry) { + r.emitBlock(r.fi(indent, "{{bold}}"+entry.Name+"{{gray}} "+fmt.Sprintf("- %s @ %s{{/}}", entry.Location, entry.Time.Format(types.GINKGO_TIME_FORMAT)))) + if representation := entry.StringRepresentation(); representation != "" { + r.emitBlock(r.fi(indent+1, representation)) + } +} + +func (r *DefaultReporter) EmitSpecEvent(event types.SpecEvent) { + v := r.conf.Verbosity() + if v.Is(types.VerbosityLevelVeryVerbose) || (v.Is(types.VerbosityLevelVerbose) && (r.conf.ShowNodeEvents || !event.IsOnlyVisibleAtVeryVerbose())) { + r.emitSpecEvent(1, event, r.conf.Verbosity().Is(types.VerbosityLevelVeryVerbose)) + } +} + +func (r *DefaultReporter) emitSpecEvent(indent uint, event types.SpecEvent, includeLocation bool) { + location := "" + if includeLocation { + location = fmt.Sprintf("- %s ", event.CodeLocation.String()) + } + switch event.SpecEventType { + case types.SpecEventInvalid: + return + case types.SpecEventByStart: + r.emitBlock(r.fi(indent, "{{bold}}STEP:{{/}} %s {{gray}}%s@ %s{{/}}", event.Message, location, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) + case types.SpecEventByEnd: + r.emitBlock(r.fi(indent, "{{bold}}END STEP:{{/}} %s {{gray}}%s@ %s (%s){{/}}", event.Message, location, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT), event.Duration.Round(time.Millisecond))) + case types.SpecEventNodeStart: + r.emitBlock(r.fi(indent, "> Enter {{bold}}[%s]{{/}} %s {{gray}}%s@ %s{{/}}", event.NodeType.String(), event.Message, location, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) + case types.SpecEventNodeEnd: + r.emitBlock(r.fi(indent, "< Exit {{bold}}[%s]{{/}} %s {{gray}}%s@ %s (%s){{/}}", event.NodeType.String(), event.Message, location, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT), event.Duration.Round(time.Millisecond))) + case types.SpecEventSpecRepeat: + r.emitBlock(r.fi(indent, "\n{{bold}}Attempt #%d {{green}}Passed{{/}}{{bold}}. Repeating %s{{/}} {{gray}}@ %s{{/}}\n\n", event.Attempt, r.retryDenoter, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) + case types.SpecEventSpecRetry: + r.emitBlock(r.fi(indent, "\n{{bold}}Attempt #%d {{red}}Failed{{/}}{{bold}}. Retrying %s{{/}} {{gray}}@ %s{{/}}\n\n", event.Attempt, r.retryDenoter, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) } - r.emitBlock(r.fi(indent, "{{gray}}<< End Captured GinkgoWriter Output{{/}}")) } func (r *DefaultReporter) emitGoroutines(indent uint, goroutines ...types.Goroutine) { @@ -457,31 +622,37 @@ func (r *DefaultReporter) emitSource(indent uint, fc types.FunctionCall) { /* Emitting to the writer */ func (r *DefaultReporter) emit(s string) { - if len(s) > 0 { - r.lastChar = s[len(s)-1:] - r.lastEmissionWasDelimiter = false - r.writer.Write([]byte(s)) - } + r._emit(s, false, false) } func (r *DefaultReporter) emitBlock(s string) { - if len(s) > 0 { - if r.lastChar != "\n" { - r.emit("\n") - } - r.emit(s) - if r.lastChar != "\n" { - r.emit("\n") - } - } + r._emit(s, true, false) +} + +func (r *DefaultReporter) emitDelimiter(indent uint) { + r._emit(r.fi(indent, "{{gray}}%s{{/}}", strings.Repeat("-", 30)), true, true) } -func (r *DefaultReporter) emitDelimiter() { - if r.lastEmissionWasDelimiter { +// a bit ugly - but we're trying to minimize locking on this hot codepath +func (r *DefaultReporter) _emit(s string, block bool, isDelimiter bool) { + if len(s) == 0 { return } - r.emitBlock(r.f("{{gray}}%s{{/}}", strings.Repeat("-", 30))) - r.lastEmissionWasDelimiter = true + r.lock.Lock() + defer r.lock.Unlock() + if isDelimiter && r.lastEmissionWasDelimiter { + return + } + if block && !r.lastCharWasNewline { + r.writer.Write([]byte("\n")) + } + r.lastCharWasNewline = (s[len(s)-1:] == "\n") + r.writer.Write([]byte(s)) + if block && !r.lastCharWasNewline { + r.writer.Write([]byte("\n")) + r.lastCharWasNewline = true + } + r.lastEmissionWasDelimiter = isDelimiter } /* Rendering text */ @@ -497,13 +668,14 @@ func (r *DefaultReporter) cycleJoin(elements []string, joiner string) string { return r.formatter.CycleJoin(elements, joiner, []string{"{{/}}", "{{gray}}"}) } -func (r *DefaultReporter) codeLocationBlock(report types.SpecReport, highlightColor string, succinct bool, usePreciseFailureLocation bool) string { +func (r *DefaultReporter) codeLocationBlock(report types.SpecReport, highlightColor string, veryVerbose bool, usePreciseFailureLocation bool) string { texts, locations, labels := []string{}, []types.CodeLocation{}, [][]string{} texts, locations, labels = append(texts, report.ContainerHierarchyTexts...), append(locations, report.ContainerHierarchyLocations...), append(labels, report.ContainerHierarchyLabels...) + if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) { texts = append(texts, r.f("[%s] %s", report.LeafNodeType, report.LeafNodeText)) } else { - texts = append(texts, report.LeafNodeText) + texts = append(texts, r.f(report.LeafNodeText)) } labels = append(labels, report.LeafNodeLabels) locations = append(locations, report.LeafNodeLocation) @@ -513,24 +685,58 @@ func (r *DefaultReporter) codeLocationBlock(report types.SpecReport, highlightCo failureLocation = report.Failure.Location } + highlightIndex := -1 switch report.Failure.FailureNodeContext { case types.FailureNodeAtTopLevel: - texts = append([]string{r.f(highlightColor+"{{bold}}TOP-LEVEL [%s]{{/}}", report.Failure.FailureNodeType)}, texts...) + texts = append([]string{fmt.Sprintf("TOP-LEVEL [%s]", report.Failure.FailureNodeType)}, texts...) locations = append([]types.CodeLocation{failureLocation}, locations...) labels = append([][]string{{}}, labels...) + highlightIndex = 0 case types.FailureNodeInContainer: i := report.Failure.FailureNodeContainerIndex - texts[i] = r.f(highlightColor+"{{bold}}%s [%s]{{/}}", texts[i], report.Failure.FailureNodeType) + texts[i] = fmt.Sprintf("%s [%s]", texts[i], report.Failure.FailureNodeType) locations[i] = failureLocation + highlightIndex = i case types.FailureNodeIsLeafNode: i := len(texts) - 1 - texts[i] = r.f(highlightColor+"{{bold}}[%s] %s{{/}}", report.LeafNodeType, report.LeafNodeText) + texts[i] = fmt.Sprintf("[%s] %s", report.LeafNodeType, report.LeafNodeText) locations[i] = failureLocation + highlightIndex = i + default: + //there is no failure, so we highlight the leaf ndoe + highlightIndex = len(texts) - 1 } out := "" - if succinct { - out += r.f("%s", r.cycleJoin(texts, " ")) + if veryVerbose { + for i := range texts { + if i == highlightIndex { + out += r.fi(uint(i), highlightColor+"{{bold}}%s{{/}}", texts[i]) + } else { + out += r.fi(uint(i), "%s", texts[i]) + } + if len(labels[i]) > 0 { + out += r.f(" {{coral}}[%s]{{/}}", strings.Join(labels[i], ", ")) + } + out += "\n" + out += r.fi(uint(i), "{{gray}}%s{{/}}\n", locations[i]) + } + } else { + for i := range texts { + style := "{{/}}" + if i%2 == 1 { + style = "{{gray}}" + } + if i == highlightIndex { + style = highlightColor + "{{bold}}" + } + out += r.f(style+"%s", texts[i]) + if i < len(texts)-1 { + out += " " + } else { + out += r.f("{{/}}") + } + } flattenedLabels := report.Labels() if len(flattenedLabels) > 0 { out += r.f(" {{coral}}[%s]{{/}}", strings.Join(flattenedLabels, ", ")) @@ -539,17 +745,15 @@ func (r *DefaultReporter) codeLocationBlock(report types.SpecReport, highlightCo if usePreciseFailureLocation { out += r.f("{{gray}}%s{{/}}", failureLocation) } else { - out += r.f("{{gray}}%s{{/}}", locations[len(locations)-1]) - } - } else { - for i := range texts { - out += r.fi(uint(i), "%s", texts[i]) - if len(labels[i]) > 0 { - out += r.f(" {{coral}}[%s]{{/}}", strings.Join(labels[i], ", ")) + leafLocation := locations[len(locations)-1] + if (report.Failure.FailureNodeLocation != types.CodeLocation{}) && (report.Failure.FailureNodeLocation != leafLocation) { + out += r.fi(1, highlightColor+"[%s]{{/}} {{gray}}%s{{/}}\n", report.Failure.FailureNodeType, report.Failure.FailureNodeLocation) + out += r.fi(1, "{{gray}}[%s] %s{{/}}", report.LeafNodeType, leafLocation) + } else { + out += r.f("{{gray}}%s{{/}}", leafLocation) } - out += "\n" - out += r.fi(uint(i), "{{gray}}%s{{/}}\n", locations[i]) } + } return out } diff --git a/vendor/github.com/onsi/ginkgo/v2/reporters/deprecated_reporter.go b/vendor/github.com/onsi/ginkgo/v2/reporters/deprecated_reporter.go index 89d30076bf..613072ebf1 100644 --- a/vendor/github.com/onsi/ginkgo/v2/reporters/deprecated_reporter.go +++ b/vendor/github.com/onsi/ginkgo/v2/reporters/deprecated_reporter.go @@ -35,7 +35,7 @@ func ReportViaDeprecatedReporter(reporter DeprecatedReporter, report types.Repor FailOnPending: report.SuiteConfig.FailOnPending, FailFast: report.SuiteConfig.FailFast, FlakeAttempts: report.SuiteConfig.FlakeAttempts, - EmitSpecProgress: report.SuiteConfig.EmitSpecProgress, + EmitSpecProgress: false, DryRun: report.SuiteConfig.DryRun, ParallelNode: report.SuiteConfig.ParallelProcess, ParallelTotal: report.SuiteConfig.ParallelTotal, diff --git a/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go b/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go index 7f96c450fe..be506f9b47 100644 --- a/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go +++ b/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go @@ -4,12 +4,16 @@ import ( "encoding/json" "fmt" "os" + "path" "github.com/onsi/ginkgo/v2/types" ) -//GenerateJSONReport produces a JSON-formatted report at the passed in destination +// GenerateJSONReport produces a JSON-formatted report at the passed in destination func GenerateJSONReport(report types.Report, destination string) error { + if err := os.MkdirAll(path.Dir(destination), 0770); err != nil { + return err + } f, err := os.Create(destination) if err != nil { return err @@ -25,8 +29,8 @@ func GenerateJSONReport(report types.Report, destination string) error { return f.Close() } -//MergeJSONReports produces a single JSON-formatted report at the passed in destination by merging the JSON-formatted reports provided in sources -//It skips over reports that fail to decode but reports on them via the returned messages []string +// MergeJSONReports produces a single JSON-formatted report at the passed in destination by merging the JSON-formatted reports provided in sources +// It skips over reports that fail to decode but reports on them via the returned messages []string func MergeAndCleanupJSONReports(sources []string, destination string) ([]string, error) { messages := []string{} allReports := []types.Report{} @@ -46,6 +50,9 @@ func MergeAndCleanupJSONReports(sources []string, destination string) ([]string, allReports = append(allReports, reports...) } + if err := os.MkdirAll(path.Dir(destination), 0770); err != nil { + return messages, err + } f, err := os.Create(destination) if err != nil { return messages, err diff --git a/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go b/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go index 0f165069ab..816042208c 100644 --- a/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go +++ b/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go @@ -14,13 +14,34 @@ import ( "encoding/xml" "fmt" "os" + "path" "strings" - "time" "github.com/onsi/ginkgo/v2/config" "github.com/onsi/ginkgo/v2/types" ) +type JunitReportConfig struct { + // Spec States for which no timeline should be emitted for system-err + // set this to types.SpecStatePassed|types.SpecStateSkipped|types.SpecStatePending to only match failing specs + OmitTimelinesForSpecState types.SpecState + + // Enable OmitFailureMessageAttr to prevent failure messages appearing in the "message" attribute of the Failure and Error tags + OmitFailureMessageAttr bool + + //Enable OmitCapturedStdOutErr to prevent captured stdout/stderr appearing in system-out + OmitCapturedStdOutErr bool + + // Enable OmitSpecLabels to prevent labels from appearing in the spec name + OmitSpecLabels bool + + // Enable OmitLeafNodeType to prevent the spec leaf node type from appearing in the spec name + OmitLeafNodeType bool + + // Enable OmitSuiteSetupNodes to prevent the creation of testcase entries for setup nodes + OmitSuiteSetupNodes bool +} + type JUnitTestSuites struct { XMLName xml.Name `xml:"testsuites"` // Tests maps onto the total number of specs in all test suites (this includes any suite nodes such as BeforeSuite) @@ -128,6 +149,10 @@ type JUnitFailure struct { } func GenerateJUnitReport(report types.Report, dst string) error { + return GenerateJUnitReportWithConfig(report, dst, JunitReportConfig{}) +} + +func GenerateJUnitReportWithConfig(report types.Report, dst string, config JunitReportConfig) error { suite := JUnitTestSuite{ Name: report.SuiteDescription, Package: report.SuitePath, @@ -149,7 +174,6 @@ func GenerateJUnitReport(report types.Report, dst string) error { {"FailOnPending", fmt.Sprintf("%t", report.SuiteConfig.FailOnPending)}, {"FailFast", fmt.Sprintf("%t", report.SuiteConfig.FailFast)}, {"FlakeAttempts", fmt.Sprintf("%d", report.SuiteConfig.FlakeAttempts)}, - {"EmitSpecProgress", fmt.Sprintf("%t", report.SuiteConfig.EmitSpecProgress)}, {"DryRun", fmt.Sprintf("%t", report.SuiteConfig.DryRun)}, {"ParallelTotal", fmt.Sprintf("%d", report.SuiteConfig.ParallelTotal)}, {"OutputInterceptorMode", report.SuiteConfig.OutputInterceptorMode}, @@ -157,22 +181,33 @@ func GenerateJUnitReport(report types.Report, dst string) error { }, } for _, spec := range report.SpecReports { + if config.OmitSuiteSetupNodes && spec.LeafNodeType != types.NodeTypeIt { + continue + } name := fmt.Sprintf("[%s]", spec.LeafNodeType) + if config.OmitLeafNodeType { + name = "" + } if spec.FullText() != "" { name = name + " " + spec.FullText() } labels := spec.Labels() - if len(labels) > 0 { + if len(labels) > 0 && !config.OmitSpecLabels { name = name + " [" + strings.Join(labels, ", ") + "]" } + name = strings.TrimSpace(name) test := JUnitTestCase{ Name: name, Classname: report.SuiteDescription, Status: spec.State.String(), Time: spec.RunTime.Seconds(), - SystemOut: systemOutForUnstructuredReporters(spec), - SystemErr: systemErrForUnstructuredReporters(spec), + } + if !spec.State.Is(config.OmitTimelinesForSpecState) { + test.SystemErr = systemErrForUnstructuredReporters(spec) + } + if !config.OmitCapturedStdOutErr { + test.SystemOut = systemOutForUnstructuredReporters(spec) } suite.Tests += 1 @@ -191,28 +226,50 @@ func GenerateJUnitReport(report types.Report, dst string) error { test.Failure = &JUnitFailure{ Message: spec.Failure.Message, Type: "failed", - Description: fmt.Sprintf("%s\n%s", spec.Failure.Location.String(), spec.Failure.Location.FullStackTrace), + Description: failureDescriptionForUnstructuredReporters(spec), + } + if config.OmitFailureMessageAttr { + test.Failure.Message = "" + } + suite.Failures += 1 + case types.SpecStateTimedout: + test.Failure = &JUnitFailure{ + Message: spec.Failure.Message, + Type: "timedout", + Description: failureDescriptionForUnstructuredReporters(spec), + } + if config.OmitFailureMessageAttr { + test.Failure.Message = "" } suite.Failures += 1 case types.SpecStateInterrupted: test.Error = &JUnitError{ - Message: "interrupted", + Message: spec.Failure.Message, Type: "interrupted", - Description: interruptDescriptionForUnstructuredReporters(spec.Failure), + Description: failureDescriptionForUnstructuredReporters(spec), + } + if config.OmitFailureMessageAttr { + test.Error.Message = "" } suite.Errors += 1 case types.SpecStateAborted: test.Failure = &JUnitFailure{ Message: spec.Failure.Message, Type: "aborted", - Description: fmt.Sprintf("%s\n%s", spec.Failure.Location.String(), spec.Failure.Location.FullStackTrace), + Description: failureDescriptionForUnstructuredReporters(spec), + } + if config.OmitFailureMessageAttr { + test.Failure.Message = "" } suite.Errors += 1 case types.SpecStatePanicked: test.Error = &JUnitError{ Message: spec.Failure.ForwardedPanic, Type: "panicked", - Description: fmt.Sprintf("%s\n%s", spec.Failure.Location.String(), spec.Failure.Location.FullStackTrace), + Description: failureDescriptionForUnstructuredReporters(spec), + } + if config.OmitFailureMessageAttr { + test.Error.Message = "" } suite.Errors += 1 } @@ -229,6 +286,9 @@ func GenerateJUnitReport(report types.Report, dst string) error { TestSuites: []JUnitTestSuite{suite}, } + if err := os.MkdirAll(path.Dir(dst), 0770); err != nil { + return err + } f, err := os.Create(dst) if err != nil { return err @@ -266,6 +326,9 @@ func MergeAndCleanupJUnitReports(sources []string, dst string) ([]string, error) mergedReport.TestSuites = append(mergedReport.TestSuites, report.TestSuites...) } + if err := os.MkdirAll(path.Dir(dst), 0770); err != nil { + return messages, err + } f, err := os.Create(dst) if err != nil { return messages, err @@ -278,52 +341,27 @@ func MergeAndCleanupJUnitReports(sources []string, dst string) ([]string, error) return messages, f.Close() } -func interruptDescriptionForUnstructuredReporters(failure types.Failure) string { +func failureDescriptionForUnstructuredReporters(spec types.SpecReport) string { out := &strings.Builder{} - out.WriteString(failure.Message + "\n") - NewDefaultReporter(types.ReporterConfig{NoColor: true}, out).EmitProgressReport(failure.ProgressReport) + NewDefaultReporter(types.ReporterConfig{NoColor: true, VeryVerbose: true}, out).emitFailure(0, spec.State, spec.Failure, true) + if len(spec.AdditionalFailures) > 0 { + out.WriteString("\nThere were additional failures detected after the initial failure. These are visible in the timeline\n") + } return out.String() } func systemErrForUnstructuredReporters(spec types.SpecReport) string { - out := &strings.Builder{} - gw := spec.CapturedGinkgoWriterOutput - cursor := 0 - for _, pr := range spec.ProgressReports { - if cursor < pr.GinkgoWriterOffset { - if pr.GinkgoWriterOffset < len(gw) { - out.WriteString(gw[cursor:pr.GinkgoWriterOffset]) - cursor = pr.GinkgoWriterOffset - } else if cursor < len(gw) { - out.WriteString(gw[cursor:]) - cursor = len(gw) - } - } - NewDefaultReporter(types.ReporterConfig{NoColor: true}, out).EmitProgressReport(pr) - } - - if cursor < len(gw) { - out.WriteString(gw[cursor:]) - } + return RenderTimeline(spec, true) +} +func RenderTimeline(spec types.SpecReport, noColor bool) string { + out := &strings.Builder{} + NewDefaultReporter(types.ReporterConfig{NoColor: noColor, VeryVerbose: true}, out).emitTimeline(0, spec, spec.Timeline()) return out.String() } func systemOutForUnstructuredReporters(spec types.SpecReport) string { - systemOut := spec.CapturedStdOutErr - if len(spec.ReportEntries) > 0 { - systemOut += "\nReport Entries:\n" - for i, entry := range spec.ReportEntries { - systemOut += fmt.Sprintf("%s\n%s\n%s\n", entry.Name, entry.Location, entry.Time.Format(time.RFC3339Nano)) - if representation := entry.StringRepresentation(); representation != "" { - systemOut += representation + "\n" - } - if i+1 < len(spec.ReportEntries) { - systemOut += "--\n" - } - } - } - return systemOut + return spec.CapturedStdOutErr } // Deprecated JUnitReporter (so folks can still compile their suites) diff --git a/vendor/github.com/onsi/ginkgo/v2/reporters/reporter.go b/vendor/github.com/onsi/ginkgo/v2/reporters/reporter.go index f79f005dbe..5e726c464e 100644 --- a/vendor/github.com/onsi/ginkgo/v2/reporters/reporter.go +++ b/vendor/github.com/onsi/ginkgo/v2/reporters/reporter.go @@ -9,13 +9,21 @@ type Reporter interface { WillRun(report types.SpecReport) DidRun(report types.SpecReport) SuiteDidEnd(report types.Report) + + //Timeline emission + EmitFailure(state types.SpecState, failure types.Failure) EmitProgressReport(progressReport types.ProgressReport) + EmitReportEntry(entry types.ReportEntry) + EmitSpecEvent(event types.SpecEvent) } type NoopReporter struct{} -func (n NoopReporter) SuiteWillBegin(report types.Report) {} -func (n NoopReporter) WillRun(report types.SpecReport) {} -func (n NoopReporter) DidRun(report types.SpecReport) {} -func (n NoopReporter) SuiteDidEnd(report types.Report) {} -func (n NoopReporter) EmitProgressReport(progressReport types.ProgressReport) {} +func (n NoopReporter) SuiteWillBegin(report types.Report) {} +func (n NoopReporter) WillRun(report types.SpecReport) {} +func (n NoopReporter) DidRun(report types.SpecReport) {} +func (n NoopReporter) SuiteDidEnd(report types.Report) {} +func (n NoopReporter) EmitFailure(state types.SpecState, failure types.Failure) {} +func (n NoopReporter) EmitProgressReport(progressReport types.ProgressReport) {} +func (n NoopReporter) EmitReportEntry(entry types.ReportEntry) {} +func (n NoopReporter) EmitSpecEvent(event types.SpecEvent) {} diff --git a/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go b/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go index 00b038769f..e990ad82e1 100644 --- a/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go +++ b/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go @@ -11,6 +11,7 @@ package reporters import ( "fmt" "os" + "path" "strings" "github.com/onsi/ginkgo/v2/types" @@ -27,6 +28,9 @@ func tcEscape(s string) string { } func GenerateTeamcityReport(report types.Report, dst string) error { + if err := os.MkdirAll(path.Dir(dst), 0770); err != nil { + return err + } f, err := os.Create(dst) if err != nil { return err @@ -60,15 +64,19 @@ func GenerateTeamcityReport(report types.Report, dst string) error { } fmt.Fprintf(f, "##teamcity[testIgnored name='%s' message='%s']\n", name, tcEscape(message)) case types.SpecStateFailed: - details := fmt.Sprintf("%s\n%s", spec.Failure.Location.String(), spec.Failure.Location.FullStackTrace) + details := failureDescriptionForUnstructuredReporters(spec) fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='failed - %s' details='%s']\n", name, tcEscape(spec.Failure.Message), tcEscape(details)) case types.SpecStatePanicked: - details := fmt.Sprintf("%s\n%s", spec.Failure.Location.String(), spec.Failure.Location.FullStackTrace) + details := failureDescriptionForUnstructuredReporters(spec) fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='panicked - %s' details='%s']\n", name, tcEscape(spec.Failure.ForwardedPanic), tcEscape(details)) + case types.SpecStateTimedout: + details := failureDescriptionForUnstructuredReporters(spec) + fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='timedout - %s' details='%s']\n", name, tcEscape(spec.Failure.Message), tcEscape(details)) case types.SpecStateInterrupted: - fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='interrupted' details='%s']\n", name, tcEscape(interruptDescriptionForUnstructuredReporters(spec.Failure))) + details := failureDescriptionForUnstructuredReporters(spec) + fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='interrupted - %s' details='%s']\n", name, tcEscape(spec.Failure.Message), tcEscape(details)) case types.SpecStateAborted: - details := fmt.Sprintf("%s\n%s", spec.Failure.Location.String(), spec.Failure.Location.FullStackTrace) + details := failureDescriptionForUnstructuredReporters(spec) fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='aborted - %s' details='%s']\n", name, tcEscape(spec.Failure.Message), tcEscape(details)) } diff --git a/vendor/github.com/onsi/ginkgo/v2/types/code_location.go b/vendor/github.com/onsi/ginkgo/v2/types/code_location.go index 1291091834..9cd5768170 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/code_location.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/code_location.go @@ -7,6 +7,7 @@ import ( "runtime" "runtime/debug" "strings" + "sync" ) type CodeLocation struct { @@ -38,6 +39,73 @@ func (codeLocation CodeLocation) ContentsOfLine() string { return lines[codeLocation.LineNumber-1] } +type codeLocationLocator struct { + pcs map[uintptr]bool + helpers map[string]bool + lock *sync.Mutex +} + +func (c *codeLocationLocator) addHelper(pc uintptr) { + c.lock.Lock() + defer c.lock.Unlock() + + if c.pcs[pc] { + return + } + c.lock.Unlock() + f := runtime.FuncForPC(pc) + c.lock.Lock() + if f == nil { + return + } + c.helpers[f.Name()] = true + c.pcs[pc] = true +} + +func (c *codeLocationLocator) hasHelper(name string) bool { + c.lock.Lock() + defer c.lock.Unlock() + return c.helpers[name] +} + +func (c *codeLocationLocator) getCodeLocation(skip int) CodeLocation { + pc := make([]uintptr, 40) + n := runtime.Callers(skip+2, pc) + if n == 0 { + return CodeLocation{} + } + pc = pc[:n] + frames := runtime.CallersFrames(pc) + for { + frame, more := frames.Next() + if !c.hasHelper(frame.Function) { + return CodeLocation{FileName: frame.File, LineNumber: frame.Line} + } + if !more { + break + } + } + return CodeLocation{} +} + +var clLocator = &codeLocationLocator{ + pcs: map[uintptr]bool{}, + helpers: map[string]bool{}, + lock: &sync.Mutex{}, +} + +// MarkAsHelper is used by GinkgoHelper to mark the caller (appropriately offset by skip)as a helper. You can use this directly if you need to provide an optional `skip` to mark functions further up the call stack as helpers. +func MarkAsHelper(optionalSkip ...int) { + skip := 1 + if len(optionalSkip) > 0 { + skip += optionalSkip[0] + } + pc, _, _, ok := runtime.Caller(skip) + if ok { + clLocator.addHelper(pc) + } +} + func NewCustomCodeLocation(message string) CodeLocation { return CodeLocation{ CustomMessage: message, @@ -45,14 +113,13 @@ func NewCustomCodeLocation(message string) CodeLocation { } func NewCodeLocation(skip int) CodeLocation { - _, file, line, _ := runtime.Caller(skip + 1) - return CodeLocation{FileName: file, LineNumber: line} + return clLocator.getCodeLocation(skip + 1) } func NewCodeLocationWithStackTrace(skip int) CodeLocation { - _, file, line, _ := runtime.Caller(skip + 1) - stackTrace := PruneStack(string(debug.Stack()), skip+1) - return CodeLocation{FileName: file, LineNumber: line, FullStackTrace: stackTrace} + cl := clLocator.getCodeLocation(skip + 1) + cl.FullStackTrace = PruneStack(string(debug.Stack()), skip+1) + return cl } // PruneStack removes references to functions that are internal to Ginkgo diff --git a/vendor/github.com/onsi/ginkgo/v2/types/config.go b/vendor/github.com/onsi/ginkgo/v2/types/config.go index 438c947c87..c88fc85a75 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/config.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/config.go @@ -8,6 +8,7 @@ package types import ( "flag" "os" + "path/filepath" "runtime" "strconv" "strings" @@ -26,13 +27,15 @@ type SuiteConfig struct { FailOnPending bool FailFast bool FlakeAttempts int - EmitSpecProgress bool + MustPassRepeatedly int DryRun bool PollProgressAfter time.Duration PollProgressInterval time.Duration Timeout time.Duration + EmitSpecProgress bool // this is deprecated but its removal is causing compile issue for some users that were setting it manually OutputInterceptorMode string SourceRoots []string + GracePeriod time.Duration ParallelProcess int ParallelTotal int @@ -45,6 +48,7 @@ func NewDefaultSuiteConfig() SuiteConfig { Timeout: time.Hour, ParallelProcess: 1, ParallelTotal: 1, + GracePeriod: 30 * time.Second, } } @@ -79,13 +83,12 @@ func (vl VerbosityLevel) LT(comp VerbosityLevel) bool { // Configuration for Ginkgo's reporter type ReporterConfig struct { - NoColor bool - SlowSpecThreshold time.Duration - Succinct bool - Verbose bool - VeryVerbose bool - FullTrace bool - AlwaysEmitGinkgoWriter bool + NoColor bool + Succinct bool + Verbose bool + VeryVerbose bool + FullTrace bool + ShowNodeEvents bool JSONReport string JUnitReport string @@ -108,9 +111,7 @@ func (rc ReporterConfig) WillGenerateReport() bool { } func NewDefaultReporterConfig() ReporterConfig { - return ReporterConfig{ - SlowSpecThreshold: 5 * time.Second, - } + return ReporterConfig{} } // Configuration for the Ginkgo CLI @@ -233,6 +234,9 @@ type deprecatedConfig struct { SlowSpecThresholdWithFLoatUnits float64 Stream bool Notify bool + EmitSpecProgress bool + SlowSpecThreshold time.Duration + AlwaysEmitGinkgoWriter bool } // Flags @@ -273,8 +277,6 @@ var SuiteConfigFlags = GinkgoFlags{ {KeyPath: "S.DryRun", Name: "dry-run", SectionKey: "debug", DeprecatedName: "dryRun", DeprecatedDocLink: "changed-command-line-flags", Usage: "If set, ginkgo will walk the test hierarchy without actually running anything. Best paired with -v."}, - {KeyPath: "S.EmitSpecProgress", Name: "progress", SectionKey: "debug", - Usage: "If set, ginkgo will emit progress information as each spec runs to the GinkgoWriter."}, {KeyPath: "S.PollProgressAfter", Name: "poll-progress-after", SectionKey: "debug", UsageDefaultValue: "0", Usage: "Emit node progress reports periodically if node hasn't completed after this duration."}, {KeyPath: "S.PollProgressInterval", Name: "poll-progress-interval", SectionKey: "debug", UsageDefaultValue: "10s", @@ -283,6 +285,8 @@ var SuiteConfigFlags = GinkgoFlags{ Usage: "The location to look for source code when generating progress reports. You can pass multiple --source-root flags."}, {KeyPath: "S.Timeout", Name: "timeout", SectionKey: "debug", UsageDefaultValue: "1h", Usage: "Test suite fails if it does not complete within the specified timeout."}, + {KeyPath: "S.GracePeriod", Name: "grace-period", SectionKey: "debug", UsageDefaultValue: "30s", + Usage: "When interrupted, Ginkgo will wait for GracePeriod for the current running node to exit before moving on to the next one."}, {KeyPath: "S.OutputInterceptorMode", Name: "output-interceptor-mode", SectionKey: "debug", UsageArgument: "dup, swap, or none", Usage: "If set, ginkgo will use the specified output interception strategy when running in parallel. Defaults to dup on unix and swap on windows."}, @@ -299,6 +303,8 @@ var SuiteConfigFlags = GinkgoFlags{ {KeyPath: "D.RegexScansFilePath", DeprecatedName: "regexScansFilePath", DeprecatedDocLink: "removed--regexscansfilepath", DeprecatedVersion: "2.0.0"}, {KeyPath: "D.DebugParallel", DeprecatedName: "debug", DeprecatedDocLink: "removed--debug", DeprecatedVersion: "2.0.0"}, + {KeyPath: "D.EmitSpecProgress", DeprecatedName: "progress", SectionKey: "debug", + DeprecatedVersion: "2.5.0", Usage: ". The functionality provided by --progress was confusing and is no longer needed. Use --show-node-events instead to see node entry and exit events included in the timeline of failed and verbose specs. Or you can run with -vv to always see all node events. Lastly, --poll-progress-after and the PollProgressAfter decorator now provide a better mechanism for debugging specs that tend to get stuck."}, } // ParallelConfigFlags provides flags for the Ginkgo test process (not the CLI) @@ -315,8 +321,6 @@ var ParallelConfigFlags = GinkgoFlags{ var ReporterConfigFlags = GinkgoFlags{ {KeyPath: "R.NoColor", Name: "no-color", SectionKey: "output", DeprecatedName: "noColor", DeprecatedDocLink: "changed-command-line-flags", Usage: "If set, suppress color output in default reporter."}, - {KeyPath: "R.SlowSpecThreshold", Name: "slow-spec-threshold", SectionKey: "output", UsageArgument: "duration", UsageDefaultValue: "5s", - Usage: "Specs that take longer to run than this threshold are flagged as slow by the default reporter."}, {KeyPath: "R.Verbose", Name: "v", SectionKey: "output", Usage: "If set, emits more output including GinkgoWriter contents."}, {KeyPath: "R.VeryVerbose", Name: "vv", SectionKey: "output", @@ -325,8 +329,8 @@ var ReporterConfigFlags = GinkgoFlags{ Usage: "If set, default reporter prints out a very succinct report"}, {KeyPath: "R.FullTrace", Name: "trace", SectionKey: "output", Usage: "If set, default reporter prints out the full stack trace when a failure occurs"}, - {KeyPath: "R.AlwaysEmitGinkgoWriter", Name: "always-emit-ginkgo-writer", SectionKey: "output", DeprecatedName: "reportPassed", DeprecatedDocLink: "renamed--reportpassed", - Usage: "If set, default reporter prints out captured output of passed tests."}, + {KeyPath: "R.ShowNodeEvents", Name: "show-node-events", SectionKey: "output", + Usage: "If set, default reporter prints node > Enter and < Exit events when specs fail"}, {KeyPath: "R.JSONReport", Name: "json-report", UsageArgument: "filename.json", SectionKey: "output", Usage: "If set, Ginkgo will generate a JSON-formatted test report at the specified location."}, @@ -339,6 +343,8 @@ var ReporterConfigFlags = GinkgoFlags{ Usage: "use --slow-spec-threshold instead and pass in a duration string (e.g. '5s', not '5.0')"}, {KeyPath: "D.NoisyPendings", DeprecatedName: "noisyPendings", DeprecatedDocLink: "removed--noisypendings-and--noisyskippings", DeprecatedVersion: "2.0.0"}, {KeyPath: "D.NoisySkippings", DeprecatedName: "noisySkippings", DeprecatedDocLink: "removed--noisypendings-and--noisyskippings", DeprecatedVersion: "2.0.0"}, + {KeyPath: "D.SlowSpecThreshold", DeprecatedName: "slow-spec-threshold", SectionKey: "output", Usage: "--slow-spec-threshold has been deprecated and will be removed in a future version of Ginkgo. This feature has proved to be more noisy than useful. You can use --poll-progress-after, instead, to get more actionable feedback about potentially slow specs and understand where they might be getting stuck.", DeprecatedVersion: "2.5.0"}, + {KeyPath: "D.AlwaysEmitGinkgoWriter", DeprecatedName: "always-emit-ginkgo-writer", SectionKey: "output", Usage: " - use -v instead, or one of Ginkgo's machine-readable report formats to get GinkgoWriter output for passing specs."}, } // BuildTestSuiteFlagSet attaches to the CommandLine flagset and provides flags for the Ginkgo test process @@ -390,6 +396,10 @@ func VetConfig(flagSet GinkgoFlagSet, suiteConfig SuiteConfig, reporterConfig Re errors = append(errors, GinkgoErrors.DryRunInParallelConfiguration()) } + if suiteConfig.GracePeriod <= 0 { + errors = append(errors, GinkgoErrors.GracePeriodCannotBeZero()) + } + if len(suiteConfig.FocusFiles) > 0 { _, err := ParseFileFilters(suiteConfig.FocusFiles) if err != nil { @@ -592,13 +602,29 @@ func VetAndInitializeCLIAndGoConfig(cliConfig CLIConfig, goFlagsConfig GoFlagsCo } // GenerateGoTestCompileArgs is used by the Ginkgo CLI to generate command line arguments to pass to the go test -c command when compiling the test -func GenerateGoTestCompileArgs(goFlagsConfig GoFlagsConfig, destination string, packageToBuild string) ([]string, error) { +func GenerateGoTestCompileArgs(goFlagsConfig GoFlagsConfig, destination string, packageToBuild string, pathToInvocationPath string) ([]string, error) { // if the user has set the CoverProfile run-time flag make sure to set the build-time cover flag to make sure // the built test binary can generate a coverprofile if goFlagsConfig.CoverProfile != "" { goFlagsConfig.Cover = true } + if goFlagsConfig.CoverPkg != "" { + coverPkgs := strings.Split(goFlagsConfig.CoverPkg, ",") + adjustedCoverPkgs := make([]string, len(coverPkgs)) + for i, coverPkg := range coverPkgs { + coverPkg = strings.Trim(coverPkg, " ") + if strings.HasPrefix(coverPkg, "./") { + // this is a relative coverPkg - we need to reroot it + adjustedCoverPkgs[i] = "./" + filepath.Join(pathToInvocationPath, strings.TrimPrefix(coverPkg, "./")) + } else { + // this is a package name - don't touch it + adjustedCoverPkgs[i] = coverPkg + } + } + goFlagsConfig.CoverPkg = strings.Join(adjustedCoverPkgs, ",") + } + args := []string{"test", "-c", "-o", destination, packageToBuild} goArgs, err := GenerateFlagArgs( GoBuildFlags, diff --git a/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go b/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go index 2948dfa0c9..e2519f673f 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go @@ -38,7 +38,7 @@ func (d deprecations) Async() Deprecation { func (d deprecations) Measure() Deprecation { return Deprecation{ - Message: "Measure is deprecated and will be removed in Ginkgo V2. Please migrate to gomega/gmeasure.", + Message: "Measure is deprecated and has been removed from Ginkgo V2. Any Measure tests in your spec will not run. Please migrate to gomega/gmeasure.", DocLink: "removed-measure", Version: "1.16.3", } @@ -83,6 +83,13 @@ func (d deprecations) Nodot() Deprecation { } } +func (d deprecations) SuppressProgressReporting() Deprecation { + return Deprecation{ + Message: "Improvements to how reporters emit timeline information means that SuppressProgressReporting is no longer necessary and has been deprecated.", + Version: "2.5.0", + } +} + type DeprecationTracker struct { deprecations map[Deprecation][]CodeLocation lock *sync.Mutex diff --git a/vendor/github.com/onsi/ginkgo/v2/types/errors.go b/vendor/github.com/onsi/ginkgo/v2/types/errors.go index 6806d6afc3..4fbdc3e9b1 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/errors.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/errors.go @@ -108,8 +108,8 @@ Please ensure all assertions are inside leaf nodes such as {{bold}}BeforeEach{{/ func (g ginkgoErrors) SuiteNodeInNestedContext(nodeType NodeType, cl CodeLocation) error { docLink := "suite-setup-and-cleanup-beforesuite-and-aftersuite" - if nodeType.Is(NodeTypeReportAfterSuite) { - docLink = "reporting-nodes---reportaftersuite" + if nodeType.Is(NodeTypeReportBeforeSuite | NodeTypeReportAfterSuite) { + docLink = "reporting-nodes---reportbeforesuite-and-reportaftersuite" } return GinkgoError{ @@ -125,8 +125,8 @@ func (g ginkgoErrors) SuiteNodeInNestedContext(nodeType NodeType, cl CodeLocatio func (g ginkgoErrors) SuiteNodeDuringRunPhase(nodeType NodeType, cl CodeLocation) error { docLink := "suite-setup-and-cleanup-beforesuite-and-aftersuite" - if nodeType.Is(NodeTypeReportAfterSuite) { - docLink = "reporting-nodes---reportaftersuite" + if nodeType.Is(NodeTypeReportBeforeSuite | NodeTypeReportAfterSuite) { + docLink = "reporting-nodes---reportbeforesuite-and-reportaftersuite" } return GinkgoError{ @@ -180,6 +180,15 @@ func (g ginkgoErrors) InvalidDeclarationOfFocusedAndPending(cl CodeLocation, nod } } +func (g ginkgoErrors) InvalidDeclarationOfFlakeAttemptsAndMustPassRepeatedly(cl CodeLocation, nodeType NodeType) error { + return GinkgoError{ + Heading: "Invalid Combination of Decorators: FlakeAttempts and MustPassRepeatedly", + Message: formatter.F(`[%s] node was decorated with both FlakeAttempts and MustPassRepeatedly. At most one is allowed.`, nodeType), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + func (g ginkgoErrors) UnknownDecorator(cl CodeLocation, nodeType NodeType, decorator interface{}) error { return GinkgoError{ Heading: "Unknown Decorator", @@ -189,20 +198,55 @@ func (g ginkgoErrors) UnknownDecorator(cl CodeLocation, nodeType NodeType, decor } } +func (g ginkgoErrors) InvalidBodyTypeForContainer(t reflect.Type, cl CodeLocation, nodeType NodeType) error { + return GinkgoError{ + Heading: "Invalid Function", + Message: formatter.F(`[%s] node must be passed {{bold}}func(){{/}} - i.e. functions that take nothing and return nothing. You passed {{bold}}%s{{/}} instead.`, nodeType, t), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + func (g ginkgoErrors) InvalidBodyType(t reflect.Type, cl CodeLocation, nodeType NodeType) error { + mustGet := "{{bold}}func(){{/}}, {{bold}}func(ctx SpecContext){{/}}, or {{bold}}func(ctx context.Context){{/}}" + if nodeType.Is(NodeTypeContainer) { + mustGet = "{{bold}}func(){{/}}" + } return GinkgoError{ Heading: "Invalid Function", - Message: formatter.F(`[%s] node must be passed {{bold}}func(){{/}} - i.e. functions that take nothing and return nothing. + Message: formatter.F(`[%s] node must be passed `+mustGet+`. You passed {{bold}}%s{{/}} instead.`, nodeType, t), CodeLocation: cl, DocLink: "node-decorators-overview", } } +func (g ginkgoErrors) InvalidBodyTypeForSynchronizedBeforeSuiteProc1(t reflect.Type, cl CodeLocation) error { + mustGet := "{{bold}}func() []byte{{/}}, {{bold}}func(ctx SpecContext) []byte{{/}}, or {{bold}}func(ctx context.Context) []byte{{/}}, {{bold}}func(){{/}}, {{bold}}func(ctx SpecContext){{/}}, or {{bold}}func(ctx context.Context){{/}}" + return GinkgoError{ + Heading: "Invalid Function", + Message: formatter.F(`[SynchronizedBeforeSuite] node must be passed `+mustGet+` for its first function. +You passed {{bold}}%s{{/}} instead.`, t), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + +func (g ginkgoErrors) InvalidBodyTypeForSynchronizedBeforeSuiteAllProcs(t reflect.Type, cl CodeLocation) error { + mustGet := "{{bold}}func(){{/}}, {{bold}}func(ctx SpecContext){{/}}, or {{bold}}func(ctx context.Context){{/}}, {{bold}}func([]byte){{/}}, {{bold}}func(ctx SpecContext, []byte){{/}}, or {{bold}}func(ctx context.Context, []byte){{/}}" + return GinkgoError{ + Heading: "Invalid Function", + Message: formatter.F(`[SynchronizedBeforeSuite] node must be passed `+mustGet+` for its second function. +You passed {{bold}}%s{{/}} instead.`, t), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + func (g ginkgoErrors) MultipleBodyFunctions(cl CodeLocation, nodeType NodeType) error { return GinkgoError{ Heading: "Multiple Functions", - Message: formatter.F(`[%s] node must be passed a single {{bold}}func(){{/}} - but more than one was passed in.`, nodeType), + Message: formatter.F(`[%s] node must be passed a single function - but more than one was passed in.`, nodeType), CodeLocation: cl, DocLink: "node-decorators-overview", } @@ -211,12 +255,30 @@ func (g ginkgoErrors) MultipleBodyFunctions(cl CodeLocation, nodeType NodeType) func (g ginkgoErrors) MissingBodyFunction(cl CodeLocation, nodeType NodeType) error { return GinkgoError{ Heading: "Missing Functions", - Message: formatter.F(`[%s] node must be passed a single {{bold}}func(){{/}} - but none was passed in.`, nodeType), + Message: formatter.F(`[%s] node must be passed a single function - but none was passed in.`, nodeType), CodeLocation: cl, DocLink: "node-decorators-overview", } } +func (g ginkgoErrors) InvalidTimeoutOrGracePeriodForNonContextNode(cl CodeLocation, nodeType NodeType) error { + return GinkgoError{ + Heading: "Invalid NodeTimeout SpecTimeout, or GracePeriod", + Message: formatter.F(`[%s] was passed NodeTimeout, SpecTimeout, or GracePeriod but does not have a callback that accepts a {{bold}}SpecContext{{/}} or {{bold}}context.Context{{/}}. You must accept a context to enable timeouts and grace periods`, nodeType), + CodeLocation: cl, + DocLink: "spec-timeouts-and-interruptible-nodes", + } +} + +func (g ginkgoErrors) InvalidTimeoutOrGracePeriodForNonContextCleanupNode(cl CodeLocation) error { + return GinkgoError{ + Heading: "Invalid NodeTimeout SpecTimeout, or GracePeriod", + Message: formatter.F(`[DeferCleanup] was passed NodeTimeout or GracePeriod but does not have a callback that accepts a {{bold}}SpecContext{{/}} or {{bold}}context.Context{{/}}. You must accept a context to enable timeouts and grace periods`), + CodeLocation: cl, + DocLink: "spec-timeouts-and-interruptible-nodes", + } +} + /* Ordered Container errors */ func (g ginkgoErrors) InvalidSerialNodeInNonSerialOrderedContainer(cl CodeLocation, nodeType NodeType) error { return GinkgoError{ @@ -236,6 +298,15 @@ func (g ginkgoErrors) SetupNodeNotInOrderedContainer(cl CodeLocation, nodeType N } } +func (g ginkgoErrors) InvalidContinueOnFailureDecoration(cl CodeLocation) error { + return GinkgoError{ + Heading: "ContinueOnFailure not decorating an outermost Ordered Container", + Message: "ContinueOnFailure can only decorate an Ordered container, and this Ordered container must be the outermost Ordered container.", + CodeLocation: cl, + DocLink: "ordered-containers", + } +} + /* DeferCleanup errors */ func (g ginkgoErrors) DeferCleanupInvalidFunction(cl CodeLocation) error { return GinkgoError{ @@ -258,7 +329,7 @@ func (g ginkgoErrors) PushingCleanupNodeDuringTreeConstruction(cl CodeLocation) func (g ginkgoErrors) PushingCleanupInReportingNode(cl CodeLocation, nodeType NodeType) error { return GinkgoError{ Heading: fmt.Sprintf("DeferCleanup cannot be called in %s", nodeType), - Message: "Please inline your cleanup code - Ginkgo won't run cleanup code after a ReportAfterEach or ReportAfterSuite.", + Message: "Please inline your cleanup code - Ginkgo won't run cleanup code after a Reporting node.", CodeLocation: cl, DocLink: "cleaning-up-our-cleanup-code-defercleanup", } @@ -380,6 +451,15 @@ func (g ginkgoErrors) InvalidEntryDescription(cl CodeLocation) error { } } +func (g ginkgoErrors) MissingParametersForTableFunction(cl CodeLocation) error { + return GinkgoError{ + Heading: "No parameters have been passed to the Table Function", + Message: "The Table Function expected at least 1 parameter", + CodeLocation: cl, + DocLink: "table-specs", + } +} + func (g ginkgoErrors) IncorrectParameterTypeForTable(i int, name string, cl CodeLocation) error { return GinkgoError{ Heading: "DescribeTable passed incorrect parameter type", @@ -498,6 +578,13 @@ func (g ginkgoErrors) DryRunInParallelConfiguration() error { } } +func (g ginkgoErrors) GracePeriodCannotBeZero() error { + return GinkgoError{ + Heading: "Ginkgo requires a positive --grace-period.", + Message: "Please set --grace-period to a positive duration. The default is 30s.", + } +} + func (g ginkgoErrors) ConflictingVerbosityConfiguration() error { return GinkgoError{ Heading: "Conflicting reporter verbosity settings.", diff --git a/vendor/github.com/onsi/ginkgo/v2/types/label_filter.go b/vendor/github.com/onsi/ginkgo/v2/types/label_filter.go index 0403f9e631..b0d3b651e7 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/label_filter.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/label_filter.go @@ -272,12 +272,23 @@ func tokenize(input string) func() (*treeNode, error) { } } +func MustParseLabelFilter(input string) LabelFilter { + filter, err := ParseLabelFilter(input) + if err != nil { + panic(err) + } + return filter +} + func ParseLabelFilter(input string) (LabelFilter, error) { if DEBUG_LABEL_FILTER_PARSING { fmt.Println("\n==============") fmt.Println("Input: ", input) fmt.Print("Tokens: ") } + if input == "" { + return func(_ []string) bool { return true }, nil + } nextToken := tokenize(input) root := &treeNode{token: lfTokenRoot} diff --git a/vendor/github.com/onsi/ginkgo/v2/types/report_entry.go b/vendor/github.com/onsi/ginkgo/v2/types/report_entry.go index 798bedc039..7b1524b52e 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/report_entry.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/report_entry.go @@ -6,8 +6,8 @@ import ( "time" ) -//ReportEntryValue wraps a report entry's value ensuring it can be encoded and decoded safely into reports -//and across the network connection when running in parallel +// ReportEntryValue wraps a report entry's value ensuring it can be encoded and decoded safely into reports +// and across the network connection when running in parallel type ReportEntryValue struct { raw interface{} //unexported to prevent gob from freaking out about unregistered structs AsJSON string @@ -85,10 +85,12 @@ func (rev *ReportEntryValue) GobDecode(data []byte) error { type ReportEntry struct { // Visibility captures the visibility policy for this ReportEntry Visibility ReportEntryVisibility - // Time captures the time the AddReportEntry was called - Time time.Time // Location captures the location of the AddReportEntry call Location CodeLocation + + Time time.Time //need this for backwards compatibility + TimelineLocation TimelineLocation + // Name captures the name of this report Name string // Value captures the (optional) object passed into AddReportEntry - this can be @@ -120,7 +122,9 @@ func (entry ReportEntry) GetRawValue() interface{} { return entry.Value.GetRawValue() } - +func (entry ReportEntry) GetTimelineLocation() TimelineLocation { + return entry.TimelineLocation +} type ReportEntries []ReportEntry diff --git a/vendor/github.com/onsi/ginkgo/v2/types/types.go b/vendor/github.com/onsi/ginkgo/v2/types/types.go index aec9062ede..aae69b04c9 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/types.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/types.go @@ -2,6 +2,8 @@ package types import ( "encoding/json" + "fmt" + "sort" "strings" "time" ) @@ -56,19 +58,20 @@ type Report struct { SuiteConfig SuiteConfig //SpecReports is a list of all SpecReports generated by this test run + //It is empty when the SuiteReport is provided to ReportBeforeSuite SpecReports SpecReports } -//PreRunStats contains a set of stats captured before the test run begins. This is primarily used -//by Ginkgo's reporter to tell the user how many specs are in the current suite (PreRunStats.TotalSpecs) -//and how many it intends to run (PreRunStats.SpecsThatWillRun) after applying any relevant focus or skip filters. +// PreRunStats contains a set of stats captured before the test run begins. This is primarily used +// by Ginkgo's reporter to tell the user how many specs are in the current suite (PreRunStats.TotalSpecs) +// and how many it intends to run (PreRunStats.SpecsThatWillRun) after applying any relevant focus or skip filters. type PreRunStats struct { TotalSpecs int SpecsThatWillRun int } -//Add is ued by Ginkgo's parallel aggregation mechanisms to combine test run reports form individual parallel processes -//to form a complete final report. +// Add is used by Ginkgo's parallel aggregation mechanisms to combine test run reports form individual parallel processes +// to form a complete final report. func (report Report) Add(other Report) Report { report.SuiteSucceeded = report.SuiteSucceeded && other.SuiteSucceeded @@ -94,9 +97,7 @@ func (report Report) Add(other Report) Report { report.RunTime = report.EndTime.Sub(report.StartTime) reports := make(SpecReports, len(report.SpecReports)+len(other.SpecReports)) - for i := range report.SpecReports { - reports[i] = report.SpecReports[i] - } + copy(reports, report.SpecReports) offset := len(report.SpecReports) for i := range other.SpecReports { reports[i+offset] = other.SpecReports[i] @@ -147,14 +148,24 @@ type SpecReport struct { // ParallelProcess captures the parallel process that this spec ran on ParallelProcess int + // RunningInParallel captures whether this spec is part of a suite that ran in parallel + RunningInParallel bool + //Failure is populated if a spec has failed, panicked, been interrupted, or skipped by the user (e.g. calling Skip()) //It includes detailed information about the Failure Failure Failure - // NumAttempts captures the number of times this Spec was run. Flakey specs can be retried with - // ginkgo --flake-attempts=N + // NumAttempts captures the number of times this Spec was run. + // Flakey specs can be retried with ginkgo --flake-attempts=N or the use of the FlakeAttempts decorator. + // Repeated specs can be retried with the use of the MustPassRepeatedly decorator NumAttempts int + // MaxFlakeAttempts captures whether the spec has been retried with ginkgo --flake-attempts=N or the use of the FlakeAttempts decorator. + MaxFlakeAttempts int + + // MaxMustPassRepeatedly captures whether the spec has the MustPassRepeatedly decorator + MaxMustPassRepeatedly int + // CapturedGinkgoWriterOutput contains text printed to the GinkgoWriter CapturedGinkgoWriterOutput string @@ -168,6 +179,12 @@ type SpecReport struct { // ProgressReports contains any progress reports generated during this spec. These can either be manually triggered, or automatically generated by Ginkgo via the PollProgressAfter() decorator ProgressReports []ProgressReport + + // AdditionalFailures contains any failures that occurred after the initial spec failure. These typically occur in cleanup nodes after the initial failure and are only emitted when running in verbose mode. + AdditionalFailures []AdditionalFailure + + // SpecEvents capture additional events that occur during the spec run + SpecEvents SpecEvents } func (report SpecReport) MarshalJSON() ([]byte, error) { @@ -187,10 +204,14 @@ func (report SpecReport) MarshalJSON() ([]byte, error) { ParallelProcess int Failure *Failure `json:",omitempty"` NumAttempts int - CapturedGinkgoWriterOutput string `json:",omitempty"` - CapturedStdOutErr string `json:",omitempty"` - ReportEntries ReportEntries `json:",omitempty"` - ProgressReports []ProgressReport `json:",omitempty"` + MaxFlakeAttempts int + MaxMustPassRepeatedly int + CapturedGinkgoWriterOutput string `json:",omitempty"` + CapturedStdOutErr string `json:",omitempty"` + ReportEntries ReportEntries `json:",omitempty"` + ProgressReports []ProgressReport `json:",omitempty"` + AdditionalFailures []AdditionalFailure `json:",omitempty"` + SpecEvents SpecEvents `json:",omitempty"` }{ ContainerHierarchyTexts: report.ContainerHierarchyTexts, ContainerHierarchyLocations: report.ContainerHierarchyLocations, @@ -207,6 +228,8 @@ func (report SpecReport) MarshalJSON() ([]byte, error) { Failure: nil, ReportEntries: nil, NumAttempts: report.NumAttempts, + MaxFlakeAttempts: report.MaxFlakeAttempts, + MaxMustPassRepeatedly: report.MaxMustPassRepeatedly, CapturedGinkgoWriterOutput: report.CapturedGinkgoWriterOutput, CapturedStdOutErr: report.CapturedStdOutErr, } @@ -220,6 +243,12 @@ func (report SpecReport) MarshalJSON() ([]byte, error) { if len(report.ProgressReports) > 0 { out.ProgressReports = report.ProgressReports } + if len(report.AdditionalFailures) > 0 { + out.AdditionalFailures = report.AdditionalFailures + } + if len(report.SpecEvents) > 0 { + out.SpecEvents = report.SpecEvents + } return json.Marshal(out) } @@ -237,13 +266,13 @@ func (report SpecReport) CombinedOutput() string { return report.CapturedStdOutErr + "\n" + report.CapturedGinkgoWriterOutput } -//Failed returns true if report.State is one of the SpecStateFailureStates +// Failed returns true if report.State is one of the SpecStateFailureStates // (SpecStateFailed, SpecStatePanicked, SpecStateinterrupted, SpecStateAborted) func (report SpecReport) Failed() bool { return report.State.Is(SpecStateFailureStates) } -//FullText returns a concatenation of all the report.ContainerHierarchyTexts and report.LeafNodeText +// FullText returns a concatenation of all the report.ContainerHierarchyTexts and report.LeafNodeText func (report SpecReport) FullText() string { texts := []string{} texts = append(texts, report.ContainerHierarchyTexts...) @@ -253,7 +282,7 @@ func (report SpecReport) FullText() string { return strings.Join(texts, " ") } -//Labels returns a deduped set of all the spec's Labels. +// Labels returns a deduped set of all the spec's Labels. func (report SpecReport) Labels() []string { out := []string{} seen := map[string]bool{} @@ -275,7 +304,7 @@ func (report SpecReport) Labels() []string { return out } -//MatchesLabelFilter returns true if the spec satisfies the passed in label filter query +// MatchesLabelFilter returns true if the spec satisfies the passed in label filter query func (report SpecReport) MatchesLabelFilter(query string) (bool, error) { filter, err := ParseLabelFilter(query) if err != nil { @@ -284,29 +313,54 @@ func (report SpecReport) MatchesLabelFilter(query string) (bool, error) { return filter(report.Labels()), nil } -//FileName() returns the name of the file containing the spec +// FileName() returns the name of the file containing the spec func (report SpecReport) FileName() string { return report.LeafNodeLocation.FileName } -//LineNumber() returns the line number of the leaf node +// LineNumber() returns the line number of the leaf node func (report SpecReport) LineNumber() int { return report.LeafNodeLocation.LineNumber } -//FailureMessage() returns the failure message (or empty string if the test hasn't failed) +// FailureMessage() returns the failure message (or empty string if the test hasn't failed) func (report SpecReport) FailureMessage() string { return report.Failure.Message } -//FailureLocation() returns the location of the failure (or an empty CodeLocation if the test hasn't failed) +// FailureLocation() returns the location of the failure (or an empty CodeLocation if the test hasn't failed) func (report SpecReport) FailureLocation() CodeLocation { return report.Failure.Location } +// Timeline() returns a timeline view of the report +func (report SpecReport) Timeline() Timeline { + timeline := Timeline{} + if !report.Failure.IsZero() { + timeline = append(timeline, report.Failure) + if report.Failure.AdditionalFailure != nil { + timeline = append(timeline, *(report.Failure.AdditionalFailure)) + } + } + for _, additionalFailure := range report.AdditionalFailures { + timeline = append(timeline, additionalFailure) + } + for _, reportEntry := range report.ReportEntries { + timeline = append(timeline, reportEntry) + } + for _, progressReport := range report.ProgressReports { + timeline = append(timeline, progressReport) + } + for _, specEvent := range report.SpecEvents { + timeline = append(timeline, specEvent) + } + sort.Sort(timeline) + return timeline +} + type SpecReports []SpecReport -//WithLeafNodeType returns the subset of SpecReports with LeafNodeType matching one of the requested NodeTypes +// WithLeafNodeType returns the subset of SpecReports with LeafNodeType matching one of the requested NodeTypes func (reports SpecReports) WithLeafNodeType(nodeTypes NodeType) SpecReports { count := 0 for i := range reports { @@ -326,7 +380,7 @@ func (reports SpecReports) WithLeafNodeType(nodeTypes NodeType) SpecReports { return out } -//WithState returns the subset of SpecReports with State matching one of the requested SpecStates +// WithState returns the subset of SpecReports with State matching one of the requested SpecStates func (reports SpecReports) WithState(states SpecState) SpecReports { count := 0 for i := range reports { @@ -345,7 +399,7 @@ func (reports SpecReports) WithState(states SpecState) SpecReports { return out } -//CountWithState returns the number of SpecReports with State matching one of the requested SpecStates +// CountWithState returns the number of SpecReports with State matching one of the requested SpecStates func (reports SpecReports) CountWithState(states SpecState) int { n := 0 for i := range reports { @@ -356,17 +410,75 @@ func (reports SpecReports) CountWithState(states SpecState) int { return n } -//CountWithState returns the number of SpecReports that passed after multiple attempts +// If the Spec passes, CountOfFlakedSpecs returns the number of SpecReports that failed after multiple attempts. func (reports SpecReports) CountOfFlakedSpecs() int { n := 0 for i := range reports { - if reports[i].State.Is(SpecStatePassed) && reports[i].NumAttempts > 1 { + if reports[i].MaxFlakeAttempts > 1 && reports[i].State.Is(SpecStatePassed) && reports[i].NumAttempts > 1 { + n += 1 + } + } + return n +} + +// If the Spec fails, CountOfRepeatedSpecs returns the number of SpecReports that passed after multiple attempts +func (reports SpecReports) CountOfRepeatedSpecs() int { + n := 0 + for i := range reports { + if reports[i].MaxMustPassRepeatedly > 1 && reports[i].State.Is(SpecStateFailureStates) && reports[i].NumAttempts > 1 { n += 1 } } return n } +// TimelineLocation captures the location of an event in the spec's timeline +type TimelineLocation struct { + //Offset is the offset (in bytes) of the event relative to the GinkgoWriter stream + Offset int `json:",omitempty"` + + //Order is the order of the event with respect to other events. The absolute value of Order + //is irrelevant. All that matters is that an event with a lower Order occurs before ane vent with a higher Order + Order int `json:",omitempty"` + + Time time.Time +} + +// TimelineEvent represent an event on the timeline +// consumers of Timeline will need to check the concrete type of each entry to determine how to handle it +type TimelineEvent interface { + GetTimelineLocation() TimelineLocation +} + +type Timeline []TimelineEvent + +func (t Timeline) Len() int { return len(t) } +func (t Timeline) Less(i, j int) bool { + return t[i].GetTimelineLocation().Order < t[j].GetTimelineLocation().Order +} +func (t Timeline) Swap(i, j int) { t[i], t[j] = t[j], t[i] } +func (t Timeline) WithoutHiddenReportEntries() Timeline { + out := Timeline{} + for _, event := range t { + if reportEntry, isReportEntry := event.(ReportEntry); isReportEntry && reportEntry.Visibility == ReportEntryVisibilityNever { + continue + } + out = append(out, event) + } + return out +} + +func (t Timeline) WithoutVeryVerboseSpecEvents() Timeline { + out := Timeline{} + for _, event := range t { + if specEvent, isSpecEvent := event.(SpecEvent); isSpecEvent && specEvent.IsOnlyVisibleAtVeryVerbose() { + continue + } + out = append(out, event) + } + return out +} + // Failure captures failure information for an individual test type Failure struct { // Message - the failure message passed into Fail(...). When using a matcher library @@ -379,6 +491,8 @@ type Failure struct { // This CodeLocation will include a fully-populated StackTrace Location CodeLocation + TimelineLocation TimelineLocation + // ForwardedPanic - if the failure represents a captured panic (i.e. Summary.State == SpecStatePanicked) // then ForwardedPanic will be populated with a string representation of the captured panic. ForwardedPanic string `json:",omitempty"` @@ -391,19 +505,29 @@ type Failure struct { // FailureNodeType will contain the NodeType of the node in which the failure occurred. // FailureNodeLocation will contain the CodeLocation of the node in which the failure occurred. // If populated, FailureNodeContainerIndex will be the index into SpecReport.ContainerHierarchyTexts and SpecReport.ContainerHierarchyLocations that represents the parent container of the node in which the failure occurred. - FailureNodeContext FailureNodeContext - FailureNodeType NodeType - FailureNodeLocation CodeLocation - FailureNodeContainerIndex int + FailureNodeContext FailureNodeContext `json:",omitempty"` + + FailureNodeType NodeType `json:",omitempty"` + + FailureNodeLocation CodeLocation `json:",omitempty"` + + FailureNodeContainerIndex int `json:",omitempty"` //ProgressReport is populated if the spec was interrupted or timed out - ProgressReport ProgressReport + ProgressReport ProgressReport `json:",omitempty"` + + //AdditionalFailure is non-nil if a follow-on failure occurred within the same node after the primary failure. This only happens when a node has timed out or been interrupted. In such cases the AdditionalFailure can include information about where/why the spec was stuck. + AdditionalFailure *AdditionalFailure `json:",omitempty"` } func (f Failure) IsZero() bool { return f.Message == "" && (f.Location == CodeLocation{}) } +func (f Failure) GetTimelineLocation() TimelineLocation { + return f.TimelineLocation +} + // FailureNodeContext captures the location context for the node containing the failing line of code type FailureNodeContext uint @@ -434,6 +558,18 @@ func (fnc FailureNodeContext) MarshalJSON() ([]byte, error) { return fncEnumSupport.MarshJSON(uint(fnc)) } +// AdditionalFailure capturs any additional failures that occur after the initial failure of a psec +// these typically occur in clean up nodes after the spec has failed. +// We can't simply use Failure as we want to track the SpecState to know what kind of failure this is +type AdditionalFailure struct { + State SpecState + Failure Failure +} + +func (f AdditionalFailure) GetTimelineLocation() TimelineLocation { + return f.Failure.TimelineLocation +} + // SpecState captures the state of a spec // To determine if a given `state` represents a failure state, use `state.Is(SpecStateFailureStates)` type SpecState uint @@ -448,6 +584,7 @@ const ( SpecStateAborted SpecStatePanicked SpecStateInterrupted + SpecStateTimedout ) var ssEnumSupport = NewEnumSupport(map[uint]string{ @@ -459,11 +596,15 @@ var ssEnumSupport = NewEnumSupport(map[uint]string{ uint(SpecStateAborted): "aborted", uint(SpecStatePanicked): "panicked", uint(SpecStateInterrupted): "interrupted", + uint(SpecStateTimedout): "timedout", }) func (ss SpecState) String() string { return ssEnumSupport.String(uint(ss)) } +func (ss SpecState) GomegaString() string { + return ssEnumSupport.String(uint(ss)) +} func (ss *SpecState) UnmarshalJSON(b []byte) error { out, err := ssEnumSupport.UnmarshJSON(b) *ss = SpecState(out) @@ -473,7 +614,7 @@ func (ss SpecState) MarshalJSON() ([]byte, error) { return ssEnumSupport.MarshJSON(uint(ss)) } -var SpecStateFailureStates = SpecStateFailed | SpecStateAborted | SpecStatePanicked | SpecStateInterrupted +var SpecStateFailureStates = SpecStateFailed | SpecStateTimedout | SpecStateAborted | SpecStatePanicked | SpecStateInterrupted func (ss SpecState) Is(states SpecState) bool { return ss&states != 0 @@ -481,35 +622,40 @@ func (ss SpecState) Is(states SpecState) bool { // ProgressReport captures the progress of the current spec. It is, effectively, a structured Ginkgo-aware stack trace type ProgressReport struct { - ParallelProcess int - RunningInParallel bool + Message string `json:",omitempty"` + ParallelProcess int `json:",omitempty"` + RunningInParallel bool `json:",omitempty"` - Time time.Time + ContainerHierarchyTexts []string `json:",omitempty"` + LeafNodeText string `json:",omitempty"` + LeafNodeLocation CodeLocation `json:",omitempty"` + SpecStartTime time.Time `json:",omitempty"` - ContainerHierarchyTexts []string - LeafNodeText string - LeafNodeLocation CodeLocation - SpecStartTime time.Time + CurrentNodeType NodeType `json:",omitempty"` + CurrentNodeText string `json:",omitempty"` + CurrentNodeLocation CodeLocation `json:",omitempty"` + CurrentNodeStartTime time.Time `json:",omitempty"` - CurrentNodeType NodeType - CurrentNodeText string - CurrentNodeLocation CodeLocation - CurrentNodeStartTime time.Time + CurrentStepText string `json:",omitempty"` + CurrentStepLocation CodeLocation `json:",omitempty"` + CurrentStepStartTime time.Time `json:",omitempty"` - CurrentStepText string - CurrentStepLocation CodeLocation - CurrentStepStartTime time.Time + AdditionalReports []string `json:",omitempty"` - CapturedGinkgoWriterOutput string `json:",omitempty"` - GinkgoWriterOffset int + CapturedGinkgoWriterOutput string `json:",omitempty"` + TimelineLocation TimelineLocation `json:",omitempty"` - Goroutines []Goroutine + Goroutines []Goroutine `json:",omitempty"` } func (pr ProgressReport) IsZero() bool { return pr.CurrentNodeType == NodeTypeInvalid } +func (pr ProgressReport) Time() time.Time { + return pr.TimelineLocation.Time +} + func (pr ProgressReport) SpecGoroutine() Goroutine { for _, goroutine := range pr.Goroutines { if goroutine.IsSpecGoroutine { @@ -547,6 +693,22 @@ func (pr ProgressReport) WithoutCapturedGinkgoWriterOutput() ProgressReport { return out } +func (pr ProgressReport) WithoutOtherGoroutines() ProgressReport { + out := pr + filteredGoroutines := []Goroutine{} + for _, goroutine := range pr.Goroutines { + if goroutine.IsSpecGoroutine || goroutine.HasHighlights() { + filteredGoroutines = append(filteredGoroutines, goroutine) + } + } + out.Goroutines = filteredGoroutines + return out +} + +func (pr ProgressReport) GetTimelineLocation() TimelineLocation { + return pr.TimelineLocation +} + type Goroutine struct { ID uint64 State string @@ -601,6 +763,7 @@ const ( NodeTypeReportBeforeEach NodeTypeReportAfterEach + NodeTypeReportBeforeSuite NodeTypeReportAfterSuite NodeTypeCleanupInvalid @@ -610,7 +773,9 @@ const ( ) var NodeTypesForContainerAndIt = NodeTypeContainer | NodeTypeIt -var NodeTypesForSuiteLevelNodes = NodeTypeBeforeSuite | NodeTypeSynchronizedBeforeSuite | NodeTypeAfterSuite | NodeTypeSynchronizedAfterSuite | NodeTypeReportAfterSuite | NodeTypeCleanupAfterSuite +var NodeTypesForSuiteLevelNodes = NodeTypeBeforeSuite | NodeTypeSynchronizedBeforeSuite | NodeTypeAfterSuite | NodeTypeSynchronizedAfterSuite | NodeTypeReportBeforeSuite | NodeTypeReportAfterSuite | NodeTypeCleanupAfterSuite +var NodeTypesAllowedDuringCleanupInterrupt = NodeTypeAfterEach | NodeTypeJustAfterEach | NodeTypeAfterAll | NodeTypeAfterSuite | NodeTypeSynchronizedAfterSuite | NodeTypeCleanupAfterEach | NodeTypeCleanupAfterAll | NodeTypeCleanupAfterSuite +var NodeTypesAllowedDuringReportInterrupt = NodeTypeReportBeforeEach | NodeTypeReportAfterEach | NodeTypeReportBeforeSuite | NodeTypeReportAfterSuite var ntEnumSupport = NewEnumSupport(map[uint]string{ uint(NodeTypeInvalid): "INVALID NODE TYPE", @@ -628,9 +793,10 @@ var ntEnumSupport = NewEnumSupport(map[uint]string{ uint(NodeTypeSynchronizedAfterSuite): "SynchronizedAfterSuite", uint(NodeTypeReportBeforeEach): "ReportBeforeEach", uint(NodeTypeReportAfterEach): "ReportAfterEach", + uint(NodeTypeReportBeforeSuite): "ReportBeforeSuite", uint(NodeTypeReportAfterSuite): "ReportAfterSuite", - uint(NodeTypeCleanupInvalid): "INVALID CLEANUP NODE", - uint(NodeTypeCleanupAfterEach): "DeferCleanup", + uint(NodeTypeCleanupInvalid): "DeferCleanup", + uint(NodeTypeCleanupAfterEach): "DeferCleanup (Each)", uint(NodeTypeCleanupAfterAll): "DeferCleanup (All)", uint(NodeTypeCleanupAfterSuite): "DeferCleanup (Suite)", }) @@ -650,3 +816,99 @@ func (nt NodeType) MarshalJSON() ([]byte, error) { func (nt NodeType) Is(nodeTypes NodeType) bool { return nt&nodeTypes != 0 } + +/* +SpecEvent captures a vareity of events that can occur when specs run. See SpecEventType for the list of available events. +*/ +type SpecEvent struct { + SpecEventType SpecEventType + + CodeLocation CodeLocation + TimelineLocation TimelineLocation + + Message string `json:",omitempty"` + Duration time.Duration `json:",omitempty"` + NodeType NodeType `json:",omitempty"` + Attempt int `json:",omitempty"` +} + +func (se SpecEvent) GetTimelineLocation() TimelineLocation { + return se.TimelineLocation +} + +func (se SpecEvent) IsOnlyVisibleAtVeryVerbose() bool { + return se.SpecEventType.Is(SpecEventByEnd | SpecEventNodeStart | SpecEventNodeEnd) +} + +func (se SpecEvent) GomegaString() string { + out := &strings.Builder{} + out.WriteString("[" + se.SpecEventType.String() + " SpecEvent] ") + if se.Message != "" { + out.WriteString("Message=") + out.WriteString(`"` + se.Message + `",`) + } + if se.Duration != 0 { + out.WriteString("Duration=" + se.Duration.String() + ",") + } + if se.NodeType != NodeTypeInvalid { + out.WriteString("NodeType=" + se.NodeType.String() + ",") + } + if se.Attempt != 0 { + out.WriteString(fmt.Sprintf("Attempt=%d", se.Attempt) + ",") + } + out.WriteString("CL=" + se.CodeLocation.String() + ",") + out.WriteString(fmt.Sprintf("TL.Offset=%d", se.TimelineLocation.Offset)) + + return out.String() +} + +type SpecEvents []SpecEvent + +func (se SpecEvents) WithType(seType SpecEventType) SpecEvents { + out := SpecEvents{} + for _, event := range se { + if event.SpecEventType.Is(seType) { + out = append(out, event) + } + } + return out +} + +type SpecEventType uint + +const ( + SpecEventInvalid SpecEventType = 0 + + SpecEventByStart SpecEventType = 1 << iota + SpecEventByEnd + SpecEventNodeStart + SpecEventNodeEnd + SpecEventSpecRepeat + SpecEventSpecRetry +) + +var seEnumSupport = NewEnumSupport(map[uint]string{ + uint(SpecEventInvalid): "INVALID SPEC EVENT", + uint(SpecEventByStart): "By", + uint(SpecEventByEnd): "By (End)", + uint(SpecEventNodeStart): "Node", + uint(SpecEventNodeEnd): "Node (End)", + uint(SpecEventSpecRepeat): "Repeat", + uint(SpecEventSpecRetry): "Retry", +}) + +func (se SpecEventType) String() string { + return seEnumSupport.String(uint(se)) +} +func (se *SpecEventType) UnmarshalJSON(b []byte) error { + out, err := seEnumSupport.UnmarshJSON(b) + *se = SpecEventType(out) + return err +} +func (se SpecEventType) MarshalJSON() ([]byte, error) { + return seEnumSupport.MarshJSON(uint(se)) +} + +func (se SpecEventType) Is(specEventTypes SpecEventType) bool { + return se&specEventTypes != 0 +} diff --git a/vendor/github.com/onsi/ginkgo/v2/types/version.go b/vendor/github.com/onsi/ginkgo/v2/types/version.go index 3974fdc26a..21fb22b6ec 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/version.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/version.go @@ -1,3 +1,3 @@ package types -const VERSION = "2.2.0" +const VERSION = "2.12.0" diff --git a/vendor/github.com/pelletier/go-toml/v2/ci.sh b/vendor/github.com/pelletier/go-toml/v2/ci.sh index 05c76f2975..9ae8b75375 100644 --- a/vendor/github.com/pelletier/go-toml/v2/ci.sh +++ b/vendor/github.com/pelletier/go-toml/v2/ci.sh @@ -79,6 +79,7 @@ cover() { go test -covermode=atomic -coverpkg=./... -coverprofile=coverage.out.tmp ./... cat coverage.out.tmp | grep -v fuzz | grep -v testsuite | grep -v tomltestgen | grep -v gotoml-test-decoder > coverage.out go tool cover -func=coverage.out + echo "Coverage profile for ${branch}: ${dir}/coverage.out" >&2 popd if [ "${branch}" != "HEAD" ]; then diff --git a/vendor/github.com/pelletier/go-toml/v2/marshaler.go b/vendor/github.com/pelletier/go-toml/v2/marshaler.go index 6ab1d82384..8387526070 100644 --- a/vendor/github.com/pelletier/go-toml/v2/marshaler.go +++ b/vendor/github.com/pelletier/go-toml/v2/marshaler.go @@ -273,7 +273,7 @@ func (enc *Encoder) encode(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, e return enc.encodeMap(b, ctx, v) case reflect.Struct: return enc.encodeStruct(b, ctx, v) - case reflect.Slice: + case reflect.Slice, reflect.Array: return enc.encodeSlice(b, ctx, v) case reflect.Interface: if v.IsNil() { @@ -930,7 +930,7 @@ func willConvertToTableOrArrayTable(ctx encoderCtx, v reflect.Value) bool { return willConvertToTableOrArrayTable(ctx, v.Elem()) } - if t.Kind() == reflect.Slice { + if t.Kind() == reflect.Slice || t.Kind() == reflect.Array { if v.Len() == 0 { // An empty slice should be a kv = []. return false diff --git a/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go b/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go index 393503431d..5cede0810f 100644 --- a/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go +++ b/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go @@ -1170,10 +1170,10 @@ func initAndDereferencePointer(v reflect.Value) reflect.Value { // Same as reflect.Value.FieldByIndex, but creates pointers if needed. func fieldByIndex(v reflect.Value, path []int) reflect.Value { - for i, x := range path { + for _, x := range path { v = v.Field(x) - if i < len(path)-1 && v.Kind() == reflect.Ptr { + if v.Kind() == reflect.Ptr { if v.IsNil() { v.Set(reflect.New(v.Type().Elem())) } diff --git a/vendor/github.com/power-devops/perfstat/config.go b/vendor/github.com/power-devops/perfstat/config.go index de7230d28c..a6df39c672 100644 --- a/vendor/github.com/power-devops/perfstat/config.go +++ b/vendor/github.com/power-devops/perfstat/config.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat diff --git a/vendor/github.com/power-devops/perfstat/cpustat.go b/vendor/github.com/power-devops/perfstat/cpustat.go index 902727fb8f..d456e68e15 100644 --- a/vendor/github.com/power-devops/perfstat/cpustat.go +++ b/vendor/github.com/power-devops/perfstat/cpustat.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat @@ -20,6 +21,13 @@ import ( "unsafe" ) +var old_cpu_total_stat *C.perfstat_cpu_total_t + +func init() { + old_cpu_total_stat = (*C.perfstat_cpu_total_t)(C.malloc(C.sizeof_perfstat_cpu_total_t)) + C.perfstat_cpu_total(nil, old_cpu_total_stat, C.sizeof_perfstat_cpu_total_t, 1) +} + func CpuStat() ([]CPU, error) { var cpustat *C.perfstat_cpu_t var cpu C.perfstat_id_t @@ -96,3 +104,36 @@ func CpuUtilStat(intvl time.Duration) (*CPUUtil, error) { u := perfstatcpuutil2cpuutil(cpuutil) return &u, nil } + +func CpuUtilTotalStat() (*CPUUtil, error) { + var cpuutil *C.perfstat_cpu_util_t + var new_cpu_total_stat *C.perfstat_cpu_total_t + var data C.perfstat_rawdata_t + + new_cpu_total_stat = (*C.perfstat_cpu_total_t)(C.malloc(C.sizeof_perfstat_cpu_total_t)) + cpuutil = (*C.perfstat_cpu_util_t)(C.malloc(C.sizeof_perfstat_cpu_util_t)) + defer C.free(unsafe.Pointer(cpuutil)) + + r := C.perfstat_cpu_total(nil, new_cpu_total_stat, C.sizeof_perfstat_cpu_total_t, 1) + if r <= 0 { + C.free(unsafe.Pointer(new_cpu_total_stat)) + return nil, fmt.Errorf("error perfstat_cpu_total()") + } + + data._type = C.UTIL_CPU_TOTAL + data.curstat = unsafe.Pointer(new_cpu_total_stat) + data.prevstat = unsafe.Pointer(old_cpu_total_stat) + data.sizeof_data = C.sizeof_perfstat_cpu_total_t + data.cur_elems = 1 + data.prev_elems = 1 + + r = C.perfstat_cpu_util(&data, cpuutil, C.sizeof_perfstat_cpu_util_t, 1) + C.free(unsafe.Pointer(old_cpu_total_stat)) + old_cpu_total_stat = new_cpu_total_stat + if r <= 0 { + return nil, fmt.Errorf("error perfstat_cpu_util()") + } + u := perfstatcpuutil2cpuutil(cpuutil) + return &u, nil +} + diff --git a/vendor/github.com/power-devops/perfstat/diskstat.go b/vendor/github.com/power-devops/perfstat/diskstat.go index fc70dfaa4e..06763b4bc9 100644 --- a/vendor/github.com/power-devops/perfstat/diskstat.go +++ b/vendor/github.com/power-devops/perfstat/diskstat.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat diff --git a/vendor/github.com/power-devops/perfstat/doc.go b/vendor/github.com/power-devops/perfstat/doc.go index 85eaf3e7ed..a0439c5a82 100644 --- a/vendor/github.com/power-devops/perfstat/doc.go +++ b/vendor/github.com/power-devops/perfstat/doc.go @@ -1,3 +1,4 @@ +//go:build !aix // +build !aix // Copyright 2020 Power-Devops.com. All rights reserved. diff --git a/vendor/github.com/power-devops/perfstat/fsstat.go b/vendor/github.com/power-devops/perfstat/fsstat.go index 27f4c06c15..d3913197ac 100644 --- a/vendor/github.com/power-devops/perfstat/fsstat.go +++ b/vendor/github.com/power-devops/perfstat/fsstat.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat diff --git a/vendor/github.com/power-devops/perfstat/helpers.go b/vendor/github.com/power-devops/perfstat/helpers.go index e8d6997665..654cdcf3c4 100644 --- a/vendor/github.com/power-devops/perfstat/helpers.go +++ b/vendor/github.com/power-devops/perfstat/helpers.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat @@ -754,7 +755,7 @@ func fsinfo2filesystem(n *C.struct_fsinfo) FileSystem { i.Device = C.GoString(n.devname) i.MountPoint = C.GoString(n.fsname) i.FSType = int(n.fstype) - i.Flags = int(n.flags) + i.Flags = uint(n.flags) i.TotalBlocks = int64(n.totalblks) i.FreeBlocks = int64(n.freeblks) i.TotalInodes = int64(n.totalinodes) diff --git a/vendor/github.com/power-devops/perfstat/lparstat.go b/vendor/github.com/power-devops/perfstat/lparstat.go index 0ce35e3c56..06f79fd5ba 100644 --- a/vendor/github.com/power-devops/perfstat/lparstat.go +++ b/vendor/github.com/power-devops/perfstat/lparstat.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat diff --git a/vendor/github.com/power-devops/perfstat/lvmstat.go b/vendor/github.com/power-devops/perfstat/lvmstat.go index eb2064c804..2ce99086ad 100644 --- a/vendor/github.com/power-devops/perfstat/lvmstat.go +++ b/vendor/github.com/power-devops/perfstat/lvmstat.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat diff --git a/vendor/github.com/power-devops/perfstat/memstat.go b/vendor/github.com/power-devops/perfstat/memstat.go index d211a73aac..52133f0a84 100644 --- a/vendor/github.com/power-devops/perfstat/memstat.go +++ b/vendor/github.com/power-devops/perfstat/memstat.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat diff --git a/vendor/github.com/power-devops/perfstat/netstat.go b/vendor/github.com/power-devops/perfstat/netstat.go index 4070da211b..847d2946ee 100644 --- a/vendor/github.com/power-devops/perfstat/netstat.go +++ b/vendor/github.com/power-devops/perfstat/netstat.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat diff --git a/vendor/github.com/power-devops/perfstat/procstat.go b/vendor/github.com/power-devops/perfstat/procstat.go index ecafebd8db..957ec2b33a 100644 --- a/vendor/github.com/power-devops/perfstat/procstat.go +++ b/vendor/github.com/power-devops/perfstat/procstat.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat diff --git a/vendor/github.com/power-devops/perfstat/sysconf.go b/vendor/github.com/power-devops/perfstat/sysconf.go index c7454d03d4..b557da0dea 100644 --- a/vendor/github.com/power-devops/perfstat/sysconf.go +++ b/vendor/github.com/power-devops/perfstat/sysconf.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat diff --git a/vendor/github.com/power-devops/perfstat/systemcfg.go b/vendor/github.com/power-devops/perfstat/systemcfg.go index 6287eb46ab..7f9277bc5f 100644 --- a/vendor/github.com/power-devops/perfstat/systemcfg.go +++ b/vendor/github.com/power-devops/perfstat/systemcfg.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat diff --git a/vendor/github.com/power-devops/perfstat/types_fs.go b/vendor/github.com/power-devops/perfstat/types_fs.go index 0be048a384..b4b43ac61a 100644 --- a/vendor/github.com/power-devops/perfstat/types_fs.go +++ b/vendor/github.com/power-devops/perfstat/types_fs.go @@ -8,7 +8,7 @@ type FileSystem struct { Device string /* name of the mounted device */ MountPoint string /* where the device is mounted */ FSType int /* File system type, see the constants below */ - Flags int /* Flags of the file system */ + Flags uint /* Flags of the file system */ TotalBlocks int64 /* number of 512 bytes blocks in the filesystem */ FreeBlocks int64 /* number of free 512 bytes block in the filesystem */ TotalInodes int64 /* total number of inodes in the filesystem */ diff --git a/vendor/github.com/power-devops/perfstat/uptime.go b/vendor/github.com/power-devops/perfstat/uptime.go index 2bd3e568d2..8608787479 100644 --- a/vendor/github.com/power-devops/perfstat/uptime.go +++ b/vendor/github.com/power-devops/perfstat/uptime.go @@ -1,3 +1,4 @@ +//go:build aix // +build aix package perfstat diff --git a/vendor/github.com/pterm/pterm/.golangci.yml b/vendor/github.com/pterm/pterm/.golangci.yml index 57ba35d86d..a964631f8f 100644 --- a/vendor/github.com/pterm/pterm/.golangci.yml +++ b/vendor/github.com/pterm/pterm/.golangci.yml @@ -28,7 +28,6 @@ linters: - gosec - govet - ineffassign - - interfacer - unconvert - gosimple - godox diff --git a/vendor/github.com/pterm/pterm/CHANGELOG.md b/vendor/github.com/pterm/pterm/CHANGELOG.md index 2e494cbebb..2d23495e8a 100644 --- a/vendor/github.com/pterm/pterm/CHANGELOG.md +++ b/vendor/github.com/pterm/pterm/CHANGELOG.md @@ -1,6 +1,34 @@ ## [Unreleased] +### Bug Fixes +- buggy basic text input ([#551](https://github.com/pterm/pterm/issues/551)) +- **textinput:** fixed buggy behavior ([#550](https://github.com/pterm/pterm/issues/550)) + + + +## [v0.12.64] - 2023-08-03 +### Features +- add custom delimiters to select printers ([#545](https://github.com/pterm/pterm/issues/545)) + + + +## [v0.12.63] - 2023-07-18 +### Features +- add filter option for `select` + +### Bug Fixes +- fixed area on Windows +- **box:** fixed wrong title length calculation + +### Code Refactoring +- use WithBoolean on multiselect printer +- use WithBoolean on multiselect printer +- use WithBoolean method on WithFilter method of select printer + + + +## [v0.12.62] - 2023-05-24 ### Bug Fixes - fixed not being able to add a custom graceful shutdown @@ -1183,7 +1211,10 @@ removed `Header` and put it's content directly into `HeaderPrinter` - initial commit -[Unreleased]: https://github.com/pterm/pterm/compare/v0.12.61...HEAD +[Unreleased]: https://github.com/pterm/pterm/compare/v0.12.64...HEAD +[v0.12.64]: https://github.com/pterm/pterm/compare/v0.12.63...v0.12.64 +[v0.12.63]: https://github.com/pterm/pterm/compare/v0.12.62...v0.12.63 +[v0.12.62]: https://github.com/pterm/pterm/compare/v0.12.61...v0.12.62 [v0.12.61]: https://github.com/pterm/pterm/compare/v0.12.60...v0.12.61 [v0.12.60]: https://github.com/pterm/pterm/compare/v0.12.59...v0.12.60 [v0.12.59]: https://github.com/pterm/pterm/compare/v0.12.58...v0.12.59 diff --git a/vendor/github.com/pterm/pterm/README.md b/vendor/github.com/pterm/pterm/README.md index b874ef124a..2648375bfc 100644 --- a/vendor/github.com/pterm/pterm/README.md +++ b/vendor/github.com/pterm/pterm/README.md @@ -98,9 +98,9 @@ go get github.com/pterm/pterm | Area
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/area) |Barchart
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/barchart) |Basictext
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/basictext) |Bigtext
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/bigtext) |Box
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/box) | | Bulletlist
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/bulletlist) |Center
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/center) |Coloring
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/coloring) |Demo
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/demo) |Header
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/header) | | Interactive confirm
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/interactive_confirm) |Interactive continue
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/interactive_continue) |Interactive multiselect
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/interactive_multiselect) |Interactive select
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/interactive_select) |Interactive textinput
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/interactive_textinput) | -| Logger
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/logger) |Panel
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/panel) |Paragraph
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/paragraph) |Prefix
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/prefix) |Progressbar
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/progressbar) | -| Section
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/section) |Spinner
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/spinner) |Style
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/style) |Table
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/table) |Theme
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/theme) | -| Tree
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/tree) | | | | | +| Logger
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/logger) |Multiple-live-printers
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/multiple-live-printers) |Panel
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/panel) |Paragraph
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/paragraph) |Prefix
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/prefix) | +| Progressbar
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/progressbar) |Section
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/section) |Spinner
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/spinner) |Style
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/style) |Table
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/table) | +| Theme
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/theme) |Tree
[(Examples)](https://github.com/pterm/pterm/tree/master/_examples/tree) | | | | @@ -2127,6 +2127,73 @@ func main() { +### multiple-live-printers/demo + +![Animation](https://raw.githubusercontent.com/pterm/pterm/master/_examples/multiple-live-printers/demo/animation.svg) + +
+ +SHOW SOURCE + +```go +package main + +import ( + "github.com/pterm/pterm" + "time" +) + +func main() { + multi := pterm.DefaultMultiPrinter + + spinner1, _ := pterm.DefaultSpinner.WithWriter(multi.NewWriter()).Start("Spinner 1") + spinner2, _ := pterm.DefaultSpinner.WithWriter(multi.NewWriter()).Start("Spinner 2") + pb1, _ := pterm.DefaultProgressbar.WithTotal(100).WithWriter(multi.NewWriter()).Start("Progressbar 1") + pb2, _ := pterm.DefaultProgressbar.WithTotal(100).WithWriter(multi.NewWriter()).Start("Progressbar 2") + pb3, _ := pterm.DefaultProgressbar.WithTotal(100).WithWriter(multi.NewWriter()).Start("Progressbar 3") + pb4, _ := pterm.DefaultProgressbar.WithTotal(100).WithWriter(multi.NewWriter()).Start("Progressbar 4") + pb5, _ := pterm.DefaultProgressbar.WithTotal(100).WithWriter(multi.NewWriter()).Start("Progressbar 5") + + multi.Start() + + // Randomly increment progress bars for demo purposes. + for i := 1; i <= 100; i++ { + pb1.Increment() + + if i%2 == 0 { + pb2.Add(3) + } + + if i%5 == 0 { + pb3.Increment() + } + + if i%10 == 0 { + pb4.Increment() + } + + if i%3 == 0 { + pb5.Increment() + } + + if i%50 == 0 { + spinner1.Success("Spinner 1 is done!") + } + + if i%60 == 0 { + spinner2.Fail("Spinner 2 failed!") + } + + time.Sleep(time.Millisecond * 50) + } + + multi.Stop() +} + +``` + +
+ ### panel/demo ![Animation](https://raw.githubusercontent.com/pterm/pterm/master/_examples/panel/demo/animation.svg) @@ -2289,6 +2356,63 @@ func main() { +### progressbar/multiple + +![Animation](https://raw.githubusercontent.com/pterm/pterm/master/_examples/progressbar/multiple/animation.svg) + +
+ +SHOW SOURCE + +```go +package main + +import ( + "github.com/pterm/pterm" + "time" +) + +func main() { + multi := pterm.DefaultMultiPrinter + + pb1, _ := pterm.DefaultProgressbar.WithTotal(100).WithWriter(multi.NewWriter()).Start("Progressbar 1") + pb2, _ := pterm.DefaultProgressbar.WithTotal(100).WithWriter(multi.NewWriter()).Start("Progressbar 2") + pb3, _ := pterm.DefaultProgressbar.WithTotal(100).WithWriter(multi.NewWriter()).Start("Progressbar 3") + pb4, _ := pterm.DefaultProgressbar.WithTotal(100).WithWriter(multi.NewWriter()).Start("Progressbar 4") + pb5, _ := pterm.DefaultProgressbar.WithTotal(100).WithWriter(multi.NewWriter()).Start("Progressbar 5") + + multi.Start() + + // Randomly increment progress bars for demo purposes. + for i := 1; i <= 100; i++ { + pb1.Increment() + + if i%2 == 0 { + pb2.Add(3) + } + + if i%5 == 0 { + pb3.Increment() + } + + if i%10 == 0 { + pb4.Increment() + } + + if i%3 == 0 { + pb5.Increment() + } + + time.Sleep(time.Millisecond * 50) + } + + multi.Stop() +} + +``` + +
+ ### section/demo ![Animation](https://raw.githubusercontent.com/pterm/pterm/master/_examples/section/demo/animation.svg) @@ -2383,6 +2507,45 @@ func main() { +### spinner/multiple + +![Animation](https://raw.githubusercontent.com/pterm/pterm/master/_examples/spinner/multiple/animation.svg) + +
+ +SHOW SOURCE + +```go +package main + +import ( + "github.com/pterm/pterm" + "time" +) + +func main() { + multi := pterm.DefaultMultiPrinter + + spinner1, _ := pterm.DefaultSpinner.WithWriter(multi.NewWriter()).Start("Spinner 1") + spinner2, _ := pterm.DefaultSpinner.WithWriter(multi.NewWriter()).Start("Spinner 2") + spinner3, _ := pterm.DefaultSpinner.WithWriter(multi.NewWriter()).Start("Spinner 3") + + multi.Start() + + time.Sleep(time.Millisecond * 1000) + spinner1.Success("Spinner 1 is done!") + time.Sleep(time.Millisecond * 750) + spinner2.Fail("Spinner 2 failed!") + time.Sleep(time.Millisecond * 500) + spinner3.Warning("Spinner 3 has a warning!") + + multi.Stop() +} + +``` + +
+ ### style/demo ![Animation](https://raw.githubusercontent.com/pterm/pterm/master/_examples/style/demo/animation.svg) diff --git a/vendor/github.com/pterm/pterm/area_printer.go b/vendor/github.com/pterm/pterm/area_printer.go index 5f3e5b0407..ed4b0c22e8 100644 --- a/vendor/github.com/pterm/pterm/area_printer.go +++ b/vendor/github.com/pterm/pterm/area_printer.go @@ -1,6 +1,7 @@ package pterm import ( + "io" "strings" "atomicgo.dev/cursor" @@ -47,6 +48,11 @@ func (p AreaPrinter) WithCenter(b ...bool) *AreaPrinter { return &p } +// SetWriter sets the writer for the AreaPrinter. +func (p *AreaPrinter) SetWriter(writer io.Writer) { + +} + // Update overwrites the content of the AreaPrinter. // Can be used live. func (p *AreaPrinter) Update(text ...interface{}) { diff --git a/vendor/github.com/pterm/pterm/box_printer.go b/vendor/github.com/pterm/pterm/box_printer.go index 8bff467119..3185e02412 100644 --- a/vendor/github.com/pterm/pterm/box_printer.go +++ b/vendor/github.com/pterm/pterm/box_printer.go @@ -240,8 +240,8 @@ func (p BoxPrinter) Sprint(a ...interface{}) string { maxWidth+p.LeftPadding+p.RightPadding) + p.BoxStyle.Sprint(p.TopLeftCornerString) } else { p.Title = strings.ReplaceAll(p.Title, "\n", " ") - if (maxWidth + p.RightPadding + p.LeftPadding - 4) < len(RemoveColorFromString(p.Title)) { - p.RightPadding = len(RemoveColorFromString(p.Title)) - (maxWidth + p.RightPadding + p.LeftPadding - 5) + if (maxWidth + p.RightPadding + p.LeftPadding - 4) < internal.GetStringMaxWidth(p.Title) { + p.RightPadding = internal.GetStringMaxWidth(p.Title) - (maxWidth + p.RightPadding + p.LeftPadding - 5) } if p.TitleTopLeft { topLine = p.BoxStyle.Sprint(p.BottomRightCornerString) + internal.AddTitleToLine(p.Title, p.BoxStyle.Sprint(p.HorizontalString), maxWidth+p.LeftPadding+p.RightPadding, true) + p.BoxStyle.Sprint(p.BottomLeftCornerString) diff --git a/vendor/github.com/pterm/pterm/interactive_confirm_printer.go b/vendor/github.com/pterm/pterm/interactive_confirm_printer.go index 6760ce69ed..a94cc5dc1e 100644 --- a/vendor/github.com/pterm/pterm/interactive_confirm_printer.go +++ b/vendor/github.com/pterm/pterm/interactive_confirm_printer.go @@ -7,35 +7,37 @@ import ( "atomicgo.dev/cursor" "atomicgo.dev/keyboard" "atomicgo.dev/keyboard/keys" + "github.com/pterm/pterm/internal" ) -var ( - // DefaultInteractiveConfirm is the default InteractiveConfirm printer. - // Pressing "y" will return true, "n" will return false. - // Pressing enter without typing "y" or "n" will return the configured default value (by default set to "no"). - DefaultInteractiveConfirm = InteractiveConfirmPrinter{ - DefaultValue: false, - DefaultText: "Please confirm", - TextStyle: &ThemeDefault.PrimaryStyle, - ConfirmText: "Yes", - ConfirmStyle: &ThemeDefault.SuccessMessageStyle, - RejectText: "No", - RejectStyle: &ThemeDefault.ErrorMessageStyle, - SuffixStyle: &ThemeDefault.SecondaryStyle, - } -) +// DefaultInteractiveConfirm is the default InteractiveConfirm printer. +// Pressing "y" will return true, "n" will return false. +// Pressing enter without typing "y" or "n" will return the configured default value (by default set to "no"). +var DefaultInteractiveConfirm = InteractiveConfirmPrinter{ + DefaultValue: false, + DefaultText: "Please confirm", + TextStyle: &ThemeDefault.PrimaryStyle, + ConfirmText: "Yes", + ConfirmStyle: &ThemeDefault.SuccessMessageStyle, + RejectText: "No", + RejectStyle: &ThemeDefault.ErrorMessageStyle, + SuffixStyle: &ThemeDefault.SecondaryStyle, + Delimiter: ": ", +} // InteractiveConfirmPrinter is a printer for interactive confirm prompts. type InteractiveConfirmPrinter struct { - DefaultValue bool - DefaultText string - TextStyle *Style - ConfirmText string - ConfirmStyle *Style - RejectText string - RejectStyle *Style - SuffixStyle *Style + DefaultValue bool + DefaultText string + Delimiter string + TextStyle *Style + ConfirmText string + ConfirmStyle *Style + RejectText string + RejectStyle *Style + SuffixStyle *Style + OnInterruptFunc func() } // WithDefaultText sets the default text. @@ -86,6 +88,18 @@ func (p InteractiveConfirmPrinter) WithSuffixStyle(style *Style) *InteractiveCon return &p } +// OnInterrupt sets the function to execute on exit of the input reader +func (p InteractiveConfirmPrinter) WithOnInterruptFunc(exitFunc func()) *InteractiveConfirmPrinter { + p.OnInterruptFunc = exitFunc + return &p +} + +// WithDelimiter sets the delimiter between the message and the input. +func (p InteractiveConfirmPrinter) WithDelimiter(delimiter string) *InteractiveConfirmPrinter { + p.Delimiter = delimiter + return &p +} + // Show shows the confirm prompt. // // Example: @@ -95,7 +109,7 @@ func (p InteractiveConfirmPrinter) WithSuffixStyle(style *Style) *InteractiveCon func (p InteractiveConfirmPrinter) Show(text ...string) (bool, error) { // should be the first defer statement to make sure it is executed last // and all the needed cleanup can be done before - cancel, exit := internal.NewCancelationSignal() + cancel, exit := internal.NewCancelationSignal(p.OnInterruptFunc) defer exit() var result bool @@ -104,7 +118,7 @@ func (p InteractiveConfirmPrinter) Show(text ...string) (bool, error) { text = []string{p.DefaultText} } - p.TextStyle.Print(text[0] + " " + p.getSuffix() + ": ") + p.TextStyle.Print(text[0] + " " + p.getSuffix() + p.Delimiter) y, n := p.getShortHandles() var interrupted bool diff --git a/vendor/github.com/pterm/pterm/interactive_continue_printer.go b/vendor/github.com/pterm/pterm/interactive_continue_printer.go index d0f91f13e9..f7e49e8a26 100644 --- a/vendor/github.com/pterm/pterm/interactive_continue_printer.go +++ b/vendor/github.com/pterm/pterm/interactive_continue_printer.go @@ -14,24 +14,24 @@ import ( "github.com/pterm/pterm/internal" ) -var ( - // DefaultInteractiveContinue is the default InteractiveContinue printer. - // Pressing "y" will return yes, "n" will return no, "a" returns all and "s" returns stop. - // Pressing enter without typing any letter will return the configured default value (by default set to "yes", the fisrt option). - DefaultInteractiveContinue = InteractiveContinuePrinter{ - DefaultValueIndex: 0, - DefaultText: "Do you want to continue", - TextStyle: &ThemeDefault.PrimaryStyle, - Options: []string{"yes", "no", "all", "cancel"}, - OptionsStyle: &ThemeDefault.SuccessMessageStyle, - SuffixStyle: &ThemeDefault.SecondaryStyle, - } -) +// DefaultInteractiveContinue is the default InteractiveContinue printer. +// Pressing "y" will return yes, "n" will return no, "a" returns all and "s" returns stop. +// Pressing enter without typing any letter will return the configured default value (by default set to "yes", the fisrt option). +var DefaultInteractiveContinue = InteractiveContinuePrinter{ + DefaultValueIndex: 0, + DefaultText: "Do you want to continue", + TextStyle: &ThemeDefault.PrimaryStyle, + Options: []string{"yes", "no", "all", "cancel"}, + OptionsStyle: &ThemeDefault.SuccessMessageStyle, + SuffixStyle: &ThemeDefault.SecondaryStyle, + Delimiter: ": ", +} // InteractiveContinuePrinter is a printer for interactive continue prompts. type InteractiveContinuePrinter struct { DefaultValueIndex int DefaultText string + Delimiter string TextStyle *Style Options []string OptionsStyle *Style @@ -108,6 +108,12 @@ func (p InteractiveContinuePrinter) WithSuffixStyle(style *Style) *InteractiveCo return &p } +// WithDelimiter sets the delimiter between the message and the input. +func (p InteractiveContinuePrinter) WithDelimiter(delimiter string) *InteractiveContinuePrinter { + p.Delimiter = delimiter + return &p +} + // Show shows the continue prompt. // // Example: @@ -121,7 +127,7 @@ func (p InteractiveContinuePrinter) Show(text ...string) (string, error) { text = []string{p.DefaultText} } - p.TextStyle.Print(text[0] + " " + p.getSuffix() + ": ") + p.TextStyle.Print(text[0] + " " + p.getSuffix() + p.Delimiter) err := keyboard.Listen(func(keyInfo keys.Key) (stop bool, err error) { if err != nil { diff --git a/vendor/github.com/pterm/pterm/interactive_multiselect_printer.go b/vendor/github.com/pterm/pterm/interactive_multiselect_printer.go index c80f9355b8..e3d592c894 100644 --- a/vendor/github.com/pterm/pterm/interactive_multiselect_printer.go +++ b/vendor/github.com/pterm/pterm/interactive_multiselect_printer.go @@ -32,16 +32,17 @@ var ( // InteractiveMultiselectPrinter is a printer for interactive multiselect menus. type InteractiveMultiselectPrinter struct { - DefaultText string - TextStyle *Style - Options []string - OptionStyle *Style - DefaultOptions []string - MaxHeight int - Selector string - SelectorStyle *Style - Filter bool - Checkmark *Checkmark + DefaultText string + TextStyle *Style + Options []string + OptionStyle *Style + DefaultOptions []string + MaxHeight int + Selector string + SelectorStyle *Style + Filter bool + Checkmark *Checkmark + OnInterruptFunc func() selectedOption int selectedOptions []int @@ -52,7 +53,10 @@ type InteractiveMultiselectPrinter struct { displayedOptionsStart int displayedOptionsEnd int - KeySelect keys.KeyCode + // KeySelect is the select key. It cannot be keys.Space when Filter is enabled. + KeySelect keys.KeyCode + + // KeyConfirm is the confirm key. It cannot be keys.Space when Filter is enabled. KeyConfirm keys.KeyCode } @@ -81,18 +85,20 @@ func (p InteractiveMultiselectPrinter) WithMaxHeight(maxHeight int) *Interactive } // WithFilter sets the Filter option -func (p InteractiveMultiselectPrinter) WithFilter(filter bool) *InteractiveMultiselectPrinter { - p.Filter = filter +func (p InteractiveMultiselectPrinter) WithFilter(b ...bool) *InteractiveMultiselectPrinter { + p.Filter = internal.WithBoolean(b) return &p } // WithKeySelect sets the confirm key +// It cannot be keys.Space when Filter is enabled. func (p InteractiveMultiselectPrinter) WithKeySelect(keySelect keys.KeyCode) *InteractiveMultiselectPrinter { p.KeySelect = keySelect return &p } // WithKeyConfirm sets the confirm key +// It cannot be keys.Space when Filter is enabled. func (p InteractiveMultiselectPrinter) WithKeyConfirm(keyConfirm keys.KeyCode) *InteractiveMultiselectPrinter { p.KeyConfirm = keyConfirm return &p @@ -104,11 +110,17 @@ func (p InteractiveMultiselectPrinter) WithCheckmark(checkmark *Checkmark) *Inte return &p } +// OnInterrupt sets the function to execute on exit of the input reader +func (p InteractiveMultiselectPrinter) WithOnInterruptFunc(exitFunc func()) *InteractiveMultiselectPrinter { + p.OnInterruptFunc = exitFunc + return &p +} + // Show shows the interactive multiselect menu and returns the selected entry. func (p *InteractiveMultiselectPrinter) Show(text ...string) ([]string, error) { // should be the first defer statement to make sure it is executed last // and all the needed cleanup can be done before - cancel, exit := internal.NewCancelationSignal() + cancel, exit := internal.NewCancelationSignal(p.OnInterruptFunc) defer exit() if len(text) == 0 || Sprint(text[0]) == "" { diff --git a/vendor/github.com/pterm/pterm/interactive_select_printer.go b/vendor/github.com/pterm/pterm/interactive_select_printer.go index 0af1a0d6ae..2dbab662de 100644 --- a/vendor/github.com/pterm/pterm/interactive_select_printer.go +++ b/vendor/github.com/pterm/pterm/interactive_select_printer.go @@ -23,19 +23,22 @@ var ( MaxHeight: 5, Selector: ">", SelectorStyle: &ThemeDefault.SecondaryStyle, + Filter: true, } ) // InteractiveSelectPrinter is a printer for interactive select menus. type InteractiveSelectPrinter struct { - TextStyle *Style - DefaultText string - Options []string - OptionStyle *Style - DefaultOption string - MaxHeight int - Selector string - SelectorStyle *Style + TextStyle *Style + DefaultText string + Options []string + OptionStyle *Style + DefaultOption string + MaxHeight int + Selector string + SelectorStyle *Style + OnInterruptFunc func() + Filter bool selectedOption int result string @@ -71,11 +74,23 @@ func (p InteractiveSelectPrinter) WithMaxHeight(maxHeight int) *InteractiveSelec return &p } +// OnInterrupt sets the function to execute on exit of the input reader +func (p InteractiveSelectPrinter) WithOnInterruptFunc(exitFunc func()) *InteractiveSelectPrinter { + p.OnInterruptFunc = exitFunc + return &p +} + +// WithFilter sets the Filter option +func (p InteractiveSelectPrinter) WithFilter(b ...bool) *InteractiveSelectPrinter { + p.Filter = internal.WithBoolean(b) + return &p +} + // Show shows the interactive select menu and returns the selected entry. func (p *InteractiveSelectPrinter) Show(text ...string) (string, error) { // should be the first defer statement to make sure it is executed last // and all the needed cleanup can be done before - cancel, exit := internal.NewCancelationSignal() + cancel, exit := internal.NewCancelationSignal(p.OnInterruptFunc) defer exit() if len(text) == 0 || Sprint(text[0]) == "" { @@ -142,14 +157,16 @@ func (p *InteractiveSelectPrinter) Show(text ...string) (string, error) { switch key { case keys.RuneKey: - // Fuzzy search for options - // append to fuzzy search string - p.fuzzySearchString += keyInfo.String() - p.selectedOption = 0 - p.displayedOptionsStart = 0 - p.displayedOptionsEnd = maxHeight - p.displayedOptions = append([]string{}, p.fuzzySearchMatches[:maxHeight]...) - area.Update(p.renderSelectMenu()) + if p.Filter { + // Fuzzy search for options + // append to fuzzy search string + p.fuzzySearchString += keyInfo.String() + p.selectedOption = 0 + p.displayedOptionsStart = 0 + p.displayedOptionsEnd = maxHeight + p.displayedOptions = append([]string{}, p.fuzzySearchMatches[:maxHeight]...) + area.Update(p.renderSelectMenu()) + } case keys.Space: p.fuzzySearchString += " " p.selectedOption = 0 @@ -245,7 +262,11 @@ func (p *InteractiveSelectPrinter) Show(text ...string) (string, error) { func (p *InteractiveSelectPrinter) renderSelectMenu() string { var content string - content += Sprintf("%s %s: %s\n", p.text, p.SelectorStyle.Sprint("[type to search]"), p.fuzzySearchString) + if p.Filter { + content += Sprintf("%s %s: %s\n", p.text, p.SelectorStyle.Sprint("[type to search]"), p.fuzzySearchString) + } else { + content += Sprintf("%s:\n", p.text) + } // find options that match fuzzy search string rankedResults := fuzzy.RankFindFold(p.fuzzySearchString, p.Options) diff --git a/vendor/github.com/pterm/pterm/interactive_textinput_printer.go b/vendor/github.com/pterm/pterm/interactive_textinput_printer.go index 512e24f975..2514ab122e 100644 --- a/vendor/github.com/pterm/pterm/interactive_textinput_printer.go +++ b/vendor/github.com/pterm/pterm/interactive_textinput_printer.go @@ -10,21 +10,22 @@ import ( "github.com/pterm/pterm/internal" ) -var ( - // DefaultInteractiveTextInput is the default InteractiveTextInput printer. - DefaultInteractiveTextInput = InteractiveTextInputPrinter{ - DefaultText: "Input text", - TextStyle: &ThemeDefault.PrimaryStyle, - Mask: "", - } -) +// DefaultInteractiveTextInput is the default InteractiveTextInput printer. +var DefaultInteractiveTextInput = InteractiveTextInputPrinter{ + DefaultText: "Input text", + Delimiter: ": ", + TextStyle: &ThemeDefault.PrimaryStyle, + Mask: "", +} // InteractiveTextInputPrinter is a printer for interactive select menus. type InteractiveTextInputPrinter struct { - TextStyle *Style - DefaultText string - MultiLine bool - Mask string + TextStyle *Style + DefaultText string + Delimiter string + MultiLine bool + Mask string + OnInterruptFunc func() input []string cursorXPos int @@ -56,11 +57,23 @@ func (p InteractiveTextInputPrinter) WithMask(mask string) *InteractiveTextInput return &p } +// WithOnInterruptFunc sets the function to execute on exit of the input reader +func (p InteractiveTextInputPrinter) WithOnInterruptFunc(exitFunc func()) *InteractiveTextInputPrinter { + p.OnInterruptFunc = exitFunc + return &p +} + +// WithDelimiter sets the delimiter between the message and the input. +func (p InteractiveTextInputPrinter) WithDelimiter(delimiter string) *InteractiveTextInputPrinter { + p.Delimiter = delimiter + return &p +} + // Show shows the interactive select menu and returns the selected entry. func (p InteractiveTextInputPrinter) Show(text ...string) (string, error) { // should be the first defer statement to make sure it is executed last // and all the needed cleanup can be done before - cancel, exit := internal.NewCancelationSignal() + cancel, exit := internal.NewCancelationSignal(p.OnInterruptFunc) defer exit() var areaText string @@ -70,24 +83,20 @@ func (p InteractiveTextInputPrinter) Show(text ...string) (string, error) { } if p.MultiLine { - areaText = p.TextStyle.Sprintfln("%s %s :", text[0], ThemeDefault.SecondaryStyle.Sprint("[Press tab to submit]")) + areaText = p.TextStyle.Sprintfln("%s %s %s", text[0], ThemeDefault.SecondaryStyle.Sprint("[Press tab to submit]"), p.Delimiter) } else { - areaText = p.TextStyle.Sprintf("%s: ", text[0]) + areaText = p.TextStyle.Sprintf("%s%s", text[0], p.Delimiter) } p.text = areaText - area, err := DefaultArea.Start(areaText) - defer area.Stop() - if err != nil { - return "", err - } + area := cursor.NewArea() + area.Update(areaText) + area.StartOfLine() - cursor.Up(1) - cursor.StartOfLine() if !p.MultiLine { cursor.Right(len(RemoveColorFromString(areaText))) } - err = keyboard.Listen(func(key keys.Key) (stop bool, err error) { + err := keyboard.Listen(func(key keys.Key) (stop bool, err error) { if !p.MultiLine { p.cursorYPos = 0 } @@ -98,6 +107,7 @@ func (p InteractiveTextInputPrinter) Show(text ...string) (string, error) { switch key.Code { case keys.Tab: if p.MultiLine { + area.Bottom() return true, nil } case keys.Enter: @@ -112,7 +122,6 @@ func (p InteractiveTextInputPrinter) Show(text ...string) (string, error) { p.input = append(p.input, appendAfterY...) p.cursorYPos++ p.cursorXPos = -internal.GetStringMaxWidth(p.input[p.cursorYPos]) - cursor.Down(1) cursor.StartOfLine() } else { return true, nil @@ -181,7 +190,7 @@ func (p InteractiveTextInputPrinter) Show(text ...string) (string, error) { } } - p.updateArea(area) + p.updateArea(&area) return false, nil }) @@ -203,7 +212,7 @@ func (p InteractiveTextInputPrinter) Show(text ...string) (string, error) { return strings.ReplaceAll(areaText, p.text, ""), nil } -func (p InteractiveTextInputPrinter) updateArea(area *AreaPrinter) string { +func (p InteractiveTextInputPrinter) updateArea(area *cursor.Area) string { if !p.MultiLine { p.cursorYPos = 0 } @@ -225,10 +234,10 @@ func (p InteractiveTextInputPrinter) updateArea(area *AreaPrinter) string { p.cursorXPos = -internal.GetStringMaxWidth(p.input[p.cursorYPos]) } - cursor.StartOfLine() area.Update(areaText) - cursor.Up(len(p.input) - p.cursorYPos) - cursor.StartOfLine() + area.Top() + area.Down(p.cursorYPos + 1) + area.StartOfLine() if p.MultiLine { cursor.Right(internal.GetStringMaxWidth(p.input[p.cursorYPos]) + p.cursorXPos) } else { diff --git a/vendor/github.com/pterm/pterm/interface_live_printer.go b/vendor/github.com/pterm/pterm/interface_live_printer.go index b8d3dbe3d7..69dce345ee 100644 --- a/vendor/github.com/pterm/pterm/interface_live_printer.go +++ b/vendor/github.com/pterm/pterm/interface_live_printer.go @@ -1,5 +1,7 @@ package pterm +import "io" + // LivePrinter is a printer which can update it's output live. type LivePrinter interface { // GenericStart runs Start, but returns a LivePrinter. @@ -11,4 +13,6 @@ type LivePrinter interface { // This is used for the interface LivePrinter. // You most likely want to use Stop instead of this in your program. GenericStop() (*LivePrinter, error) + + SetWriter(writer io.Writer) } diff --git a/vendor/github.com/pterm/pterm/internal/cancelation_signal.go b/vendor/github.com/pterm/pterm/internal/cancelation_signal.go index d6f79b0a14..ed424dafd6 100644 --- a/vendor/github.com/pterm/pterm/internal/cancelation_signal.go +++ b/vendor/github.com/pterm/pterm/internal/cancelation_signal.go @@ -1,19 +1,16 @@ package internal -import ( - "os" -) - // NewCancelationSignal for keeping track of a cancelation -func NewCancelationSignal() (func(), func()) { +func NewCancelationSignal(interruptFunc func()) (func(), func()) { canceled := false cancel := func() { canceled = true } + exit := func() { - if canceled { - os.Exit(1) + if canceled && interruptFunc != nil { + interruptFunc() } } diff --git a/vendor/github.com/pterm/pterm/internal/title_in_line.go b/vendor/github.com/pterm/pterm/internal/title_in_line.go index 3aae546b10..68e28ec60d 100644 --- a/vendor/github.com/pterm/pterm/internal/title_in_line.go +++ b/vendor/github.com/pterm/pterm/internal/title_in_line.go @@ -2,17 +2,15 @@ package internal import ( "strings" - - "github.com/gookit/color" ) // AddTitleToLine adds a title to a site of a line ex: "─ This is the title ──────" func AddTitleToLine(title, line string, length int, left bool) string { var ret string if left { - ret += line + " " + title + " " + line + strings.Repeat(line, length-(4+len(color.ClearCode(title)))) + ret += line + " " + title + " " + line + strings.Repeat(line, length-(4+GetStringMaxWidth(title))) } else { - ret += strings.Repeat(line, length-(4+len(color.ClearCode(title)))) + line + " " + title + " " + line + ret += strings.Repeat(line, length-(4+GetStringMaxWidth(title))) + line + " " + title + " " + line } return ret @@ -21,7 +19,7 @@ func AddTitleToLine(title, line string, length int, left bool) string { // AddTitleToLineCenter adds a title to the center of a line ex: "─ This is the title ──────" func AddTitleToLineCenter(title, line string, length int) string { var ret string - repeatString := length - (4 + len(color.ClearCode(title))) + repeatString := length - (4 + GetStringMaxWidth(title)) unevenRepeatString := repeatString % 2 ret += strings.Repeat(line, repeatString/2) + line + " " + title + " " + line + strings.Repeat(line, repeatString/2+unevenRepeatString) diff --git a/vendor/github.com/pterm/pterm/multi_live_printer.go b/vendor/github.com/pterm/pterm/multi_live_printer.go new file mode 100644 index 0000000000..b9e0d0e867 --- /dev/null +++ b/vendor/github.com/pterm/pterm/multi_live_printer.go @@ -0,0 +1,124 @@ +package pterm + +import ( + "atomicgo.dev/schedule" + "bytes" + "io" + "os" + "strings" + "time" +) + +var DefaultMultiPrinter = MultiPrinter{ + printers: []LivePrinter{}, + Writer: os.Stdout, + UpdateDelay: time.Millisecond * 200, + + buffers: []*bytes.Buffer{}, + area: DefaultArea, +} + +type MultiPrinter struct { + IsActive bool + Writer io.Writer + UpdateDelay time.Duration + + printers []LivePrinter + buffers []*bytes.Buffer + area AreaPrinter +} + +// SetWriter sets the writer for the AreaPrinter. +func (p *MultiPrinter) SetWriter(writer io.Writer) { + p.Writer = writer +} + +// WithWriter returns a fork of the MultiPrinter with a new writer. +func (p MultiPrinter) WithWriter(writer io.Writer) *MultiPrinter { + p.Writer = writer + return &p +} + +// WithUpdateDelay returns a fork of the MultiPrinter with a new update delay. +func (p MultiPrinter) WithUpdateDelay(delay time.Duration) *MultiPrinter { + p.UpdateDelay = delay + return &p +} + +func (p *MultiPrinter) NewWriter() io.Writer { + buf := bytes.NewBufferString("") + p.buffers = append(p.buffers, buf) + return buf +} + +// getString returns all buffers appended and separated by a newline. +func (p *MultiPrinter) getString() string { + var buffer bytes.Buffer + for _, b := range p.buffers { + s := b.String() + s = strings.Trim(s, "\n") + + parts := strings.Split(s, "\r") // only get the last override + s = parts[len(parts)-1] + + // check if s is empty, if so get one part before, repeat until not empty + for s == "" { + parts = parts[:len(parts)-1] + s = parts[len(parts)-1] + } + + s = strings.Trim(s, "\n\r") + buffer.WriteString(s) + buffer.WriteString("\n") + } + return buffer.String() +} + +func (p *MultiPrinter) Start() (*MultiPrinter, error) { + p.IsActive = true + for _, printer := range p.printers { + printer.GenericStart() + } + + schedule.Every(p.UpdateDelay, func() bool { + if !p.IsActive { + return false + } + + p.area.Update(p.getString()) + + return true + }) + + return p, nil +} + +func (p *MultiPrinter) Stop() (*MultiPrinter, error) { + p.IsActive = false + for _, printer := range p.printers { + printer.GenericStop() + } + time.Sleep(time.Millisecond * 20) + p.area.Update(p.getString()) + p.area.Stop() + + return p, nil +} + +// GenericStart runs Start, but returns a LivePrinter. +// This is used for the interface LivePrinter. +// You most likely want to use Start instead of this in your program. +func (p MultiPrinter) GenericStart() (*LivePrinter, error) { + p2, _ := p.Start() + lp := LivePrinter(p2) + return &lp, nil +} + +// GenericStop runs Stop, but returns a LivePrinter. +// This is used for the interface LivePrinter. +// You most likely want to use Stop instead of this in your program. +func (p MultiPrinter) GenericStop() (*LivePrinter, error) { + p2, _ := p.Stop() + lp := LivePrinter(p2) + return &lp, nil +} diff --git a/vendor/github.com/pterm/pterm/progressbar_printer.go b/vendor/github.com/pterm/pterm/progressbar_printer.go index 282adcda32..1cf4a0c2ac 100644 --- a/vendor/github.com/pterm/pterm/progressbar_printer.go +++ b/vendor/github.com/pterm/pterm/progressbar_printer.go @@ -18,23 +18,21 @@ import ( // Generally, there should only be one active ProgressbarPrinter at a time. var ActiveProgressBarPrinters []*ProgressbarPrinter -var ( - // DefaultProgressbar is the default ProgressbarPrinter. - DefaultProgressbar = ProgressbarPrinter{ - Total: 100, - BarCharacter: "█", - LastCharacter: "█", - ElapsedTimeRoundingFactor: time.Second, - BarStyle: &ThemeDefault.ProgressbarBarStyle, - TitleStyle: &ThemeDefault.ProgressbarTitleStyle, - ShowTitle: true, - ShowCount: true, - ShowPercentage: true, - ShowElapsedTime: true, - BarFiller: Gray("█"), - MaxWidth: 80, - } -) +// DefaultProgressbar is the default ProgressbarPrinter. +var DefaultProgressbar = ProgressbarPrinter{ + Total: 100, + BarCharacter: "█", + LastCharacter: "█", + ElapsedTimeRoundingFactor: time.Second, + BarStyle: &ThemeDefault.ProgressbarBarStyle, + TitleStyle: &ThemeDefault.ProgressbarTitleStyle, + ShowTitle: true, + ShowCount: true, + ShowPercentage: true, + ShowElapsedTime: true, + BarFiller: Gray("█"), + MaxWidth: 80, +} // ProgressbarPrinter shows a progress animation in the terminal. type ProgressbarPrinter struct { @@ -162,6 +160,11 @@ func (p ProgressbarPrinter) WithWriter(writer io.Writer) *ProgressbarPrinter { return &p } +// SetWriter sets the custom Writer. +func (p *ProgressbarPrinter) SetWriter(writer io.Writer) { + p.Writer = writer +} + // Increment current value by one. func (p *ProgressbarPrinter) Increment() *ProgressbarPrinter { p.Add(1) @@ -177,8 +180,13 @@ func (p *ProgressbarPrinter) UpdateTitle(title string) *ProgressbarPrinter { // This is the update logic, renders the progressbar func (p *ProgressbarPrinter) updateProgress() *ProgressbarPrinter { + Fprinto(p.Writer, p.getString()) + return p +} + +func (p *ProgressbarPrinter) getString() string { if !p.IsActive { - return p + return "" } if p.TitleStyle == nil { p.TitleStyle = NewStyle() @@ -187,7 +195,7 @@ func (p *ProgressbarPrinter) updateProgress() *ProgressbarPrinter { p.BarStyle = NewStyle() } if p.Total == 0 { - return nil + return "" } var before string @@ -235,10 +243,7 @@ func (p *ProgressbarPrinter) updateProgress() *ProgressbarPrinter { bar = p.BarStyle.Sprint(strings.Repeat(p.BarCharacter, barCurrentLength)+p.LastCharacter) + bar } - if !RawOutput { - Fprinto(p.Writer, before+bar+after) - } - return p + return before + bar + after } // Add to current value. @@ -251,6 +256,8 @@ func (p *ProgressbarPrinter) Add(count int) *ProgressbarPrinter { p.updateProgress() if p.Current >= p.Total { + p.Total = p.Current + p.updateProgress() p.Stop() } return p @@ -272,8 +279,9 @@ func (p ProgressbarPrinter) Start(title ...interface{}) (*ProgressbarPrinter, er p.updateProgress() if p.ShowElapsedTime { - p.rerenderTask = schedule.Every(time.Second, func() { + p.rerenderTask = schedule.Every(time.Second, func() bool { p.updateProgress() + return true }) } @@ -303,7 +311,7 @@ func (p *ProgressbarPrinter) Stop() (*ProgressbarPrinter, error) { // GenericStart runs Start, but returns a LivePrinter. // This is used for the interface LivePrinter. // You most likely want to use Start instead of this in your program. -func (p ProgressbarPrinter) GenericStart() (*LivePrinter, error) { +func (p *ProgressbarPrinter) GenericStart() (*LivePrinter, error) { p2, _ := p.Start() lp := LivePrinter(p2) return &lp, nil @@ -312,7 +320,7 @@ func (p ProgressbarPrinter) GenericStart() (*LivePrinter, error) { // GenericStop runs Stop, but returns a LivePrinter. // This is used for the interface LivePrinter. // You most likely want to use Stop instead of this in your program. -func (p ProgressbarPrinter) GenericStop() (*LivePrinter, error) { +func (p *ProgressbarPrinter) GenericStop() (*LivePrinter, error) { p2, _ := p.Stop() lp := LivePrinter(p2) return &lp, nil diff --git a/vendor/github.com/pterm/pterm/pterm.go b/vendor/github.com/pterm/pterm/pterm.go index ac05f0fd60..095571570b 100644 --- a/vendor/github.com/pterm/pterm/pterm.go +++ b/vendor/github.com/pterm/pterm/pterm.go @@ -77,7 +77,7 @@ func DisableStyling() { DisableColor() } -// RecalculateTerminalSize updates already initialized terminal dimensions. Has to be called after a termina resize to guarantee proper rendering. Applies only to new instances. +// RecalculateTerminalSize updates already initialized terminal dimensions. Has to be called after a terminal resize to guarantee proper rendering. Applies only to new instances. func RecalculateTerminalSize() { // keep in sync with DefaultBarChart DefaultBarChart.Width = GetTerminalWidth() * 2 / 3 diff --git a/vendor/github.com/pterm/pterm/spinner_printer.go b/vendor/github.com/pterm/pterm/spinner_printer.go index 82b84af7fb..044b6976e0 100644 --- a/vendor/github.com/pterm/pterm/spinner_printer.go +++ b/vendor/github.com/pterm/pterm/spinner_printer.go @@ -110,15 +110,18 @@ func (p SpinnerPrinter) WithWriter(writer io.Writer) *SpinnerPrinter { return &p } +// SetWriter sets the custom Writer. +func (p *SpinnerPrinter) SetWriter(writer io.Writer) { + p.Writer = writer +} + // UpdateText updates the message of the active SpinnerPrinter. // Can be used live. func (s *SpinnerPrinter) UpdateText(text string) { s.Text = text if !RawOutput { - fClearLine(s.Writer) Fprinto(s.Writer, s.Style.Sprint(s.currentSequence)+" "+s.MessageStyle.Sprint(s.Text)) - } - if RawOutput { + } else { Fprintln(s.Writer, s.Text) } } @@ -152,7 +155,6 @@ func (s SpinnerPrinter) Start(text ...interface{}) (*SpinnerPrinter, error) { if s.ShowTimer { timer = " (" + time.Since(s.startedAt).Round(s.TimerRoundingFactor).String() + ")" } - fClearLine(s.Writer) Fprinto(s.Writer, s.Style.Sprint(seq)+" "+s.MessageStyle.Sprint(s.Text)+s.TimerStyle.Sprint(timer)) s.currentSequence = seq time.Sleep(s.Delay) @@ -182,8 +184,8 @@ func (s *SpinnerPrinter) Stop() error { // This is used for the interface LivePrinter. // You most likely want to use Start instead of this in your program. func (s *SpinnerPrinter) GenericStart() (*LivePrinter, error) { - _, _ = s.Start() - lp := LivePrinter(s) + p2, _ := s.Start() + lp := LivePrinter(p2) return &lp, nil } diff --git a/vendor/github.com/quic-go/qtls-go1-18/LICENSE b/vendor/github.com/quic-go/qtls-go1-18/LICENSE deleted file mode 100644 index 6a66aea5ea..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -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 -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/quic-go/qtls-go1-18/README.md b/vendor/github.com/quic-go/qtls-go1-18/README.md deleted file mode 100644 index c592c4ca13..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# qtls - -[![Go Reference](https://pkg.go.dev/badge/github.com/quic-go/qtls-go1-18.svg)](https://pkg.go.dev/github.com/quic-go/qtls-go1-18) -[![.github/workflows/go-test.yml](https://github.com/quic-go/qtls-go1-18/actions/workflows/go-test.yml/badge.svg)](https://github.com/quic-go/qtls-go1-18/actions/workflows/go-test.yml) - -This repository contains a modified version of the standard library's TLS implementation, modified for the QUIC protocol. It is used by [quic-go](https://github.com/lucas-clemente/quic-go). diff --git a/vendor/github.com/quic-go/qtls-go1-18/alert.go b/vendor/github.com/quic-go/qtls-go1-18/alert.go deleted file mode 100644 index 3feac79be8..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/alert.go +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2009 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 qtls - -import "strconv" - -type alert uint8 - -// Alert is a TLS alert -type Alert = alert - -const ( - // alert level - alertLevelWarning = 1 - alertLevelError = 2 -) - -const ( - alertCloseNotify alert = 0 - alertUnexpectedMessage alert = 10 - alertBadRecordMAC alert = 20 - alertDecryptionFailed alert = 21 - alertRecordOverflow alert = 22 - alertDecompressionFailure alert = 30 - alertHandshakeFailure alert = 40 - alertBadCertificate alert = 42 - alertUnsupportedCertificate alert = 43 - alertCertificateRevoked alert = 44 - alertCertificateExpired alert = 45 - alertCertificateUnknown alert = 46 - alertIllegalParameter alert = 47 - alertUnknownCA alert = 48 - alertAccessDenied alert = 49 - alertDecodeError alert = 50 - alertDecryptError alert = 51 - alertExportRestriction alert = 60 - alertProtocolVersion alert = 70 - alertInsufficientSecurity alert = 71 - alertInternalError alert = 80 - alertInappropriateFallback alert = 86 - alertUserCanceled alert = 90 - alertNoRenegotiation alert = 100 - alertMissingExtension alert = 109 - alertUnsupportedExtension alert = 110 - alertCertificateUnobtainable alert = 111 - alertUnrecognizedName alert = 112 - alertBadCertificateStatusResponse alert = 113 - alertBadCertificateHashValue alert = 114 - alertUnknownPSKIdentity alert = 115 - alertCertificateRequired alert = 116 - alertNoApplicationProtocol alert = 120 -) - -var alertText = map[alert]string{ - alertCloseNotify: "close notify", - alertUnexpectedMessage: "unexpected message", - alertBadRecordMAC: "bad record MAC", - alertDecryptionFailed: "decryption failed", - alertRecordOverflow: "record overflow", - alertDecompressionFailure: "decompression failure", - alertHandshakeFailure: "handshake failure", - alertBadCertificate: "bad certificate", - alertUnsupportedCertificate: "unsupported certificate", - alertCertificateRevoked: "revoked certificate", - alertCertificateExpired: "expired certificate", - alertCertificateUnknown: "unknown certificate", - alertIllegalParameter: "illegal parameter", - alertUnknownCA: "unknown certificate authority", - alertAccessDenied: "access denied", - alertDecodeError: "error decoding message", - alertDecryptError: "error decrypting message", - alertExportRestriction: "export restriction", - alertProtocolVersion: "protocol version not supported", - alertInsufficientSecurity: "insufficient security level", - alertInternalError: "internal error", - alertInappropriateFallback: "inappropriate fallback", - alertUserCanceled: "user canceled", - alertNoRenegotiation: "no renegotiation", - alertMissingExtension: "missing extension", - alertUnsupportedExtension: "unsupported extension", - alertCertificateUnobtainable: "certificate unobtainable", - alertUnrecognizedName: "unrecognized name", - alertBadCertificateStatusResponse: "bad certificate status response", - alertBadCertificateHashValue: "bad certificate hash value", - alertUnknownPSKIdentity: "unknown PSK identity", - alertCertificateRequired: "certificate required", - alertNoApplicationProtocol: "no application protocol", -} - -func (e alert) String() string { - s, ok := alertText[e] - if ok { - return "tls: " + s - } - return "tls: alert(" + strconv.Itoa(int(e)) + ")" -} - -func (e alert) Error() string { - return e.String() -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/auth.go b/vendor/github.com/quic-go/qtls-go1-18/auth.go deleted file mode 100644 index 1ef675fd37..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/auth.go +++ /dev/null @@ -1,289 +0,0 @@ -// Copyright 2017 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 qtls - -import ( - "bytes" - "crypto" - "crypto/ecdsa" - "crypto/ed25519" - "crypto/elliptic" - "crypto/rsa" - "errors" - "fmt" - "hash" - "io" -) - -// verifyHandshakeSignature verifies a signature against pre-hashed -// (if required) handshake contents. -func verifyHandshakeSignature(sigType uint8, pubkey crypto.PublicKey, hashFunc crypto.Hash, signed, sig []byte) error { - switch sigType { - case signatureECDSA: - pubKey, ok := pubkey.(*ecdsa.PublicKey) - if !ok { - return fmt.Errorf("expected an ECDSA public key, got %T", pubkey) - } - if !ecdsa.VerifyASN1(pubKey, signed, sig) { - return errors.New("ECDSA verification failure") - } - case signatureEd25519: - pubKey, ok := pubkey.(ed25519.PublicKey) - if !ok { - return fmt.Errorf("expected an Ed25519 public key, got %T", pubkey) - } - if !ed25519.Verify(pubKey, signed, sig) { - return errors.New("Ed25519 verification failure") - } - case signaturePKCS1v15: - pubKey, ok := pubkey.(*rsa.PublicKey) - if !ok { - return fmt.Errorf("expected an RSA public key, got %T", pubkey) - } - if err := rsa.VerifyPKCS1v15(pubKey, hashFunc, signed, sig); err != nil { - return err - } - case signatureRSAPSS: - pubKey, ok := pubkey.(*rsa.PublicKey) - if !ok { - return fmt.Errorf("expected an RSA public key, got %T", pubkey) - } - signOpts := &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash} - if err := rsa.VerifyPSS(pubKey, hashFunc, signed, sig, signOpts); err != nil { - return err - } - default: - return errors.New("internal error: unknown signature type") - } - return nil -} - -const ( - serverSignatureContext = "TLS 1.3, server CertificateVerify\x00" - clientSignatureContext = "TLS 1.3, client CertificateVerify\x00" -) - -var signaturePadding = []byte{ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -} - -// signedMessage returns the pre-hashed (if necessary) message to be signed by -// certificate keys in TLS 1.3. See RFC 8446, Section 4.4.3. -func signedMessage(sigHash crypto.Hash, context string, transcript hash.Hash) []byte { - if sigHash == directSigning { - b := &bytes.Buffer{} - b.Write(signaturePadding) - io.WriteString(b, context) - b.Write(transcript.Sum(nil)) - return b.Bytes() - } - h := sigHash.New() - h.Write(signaturePadding) - io.WriteString(h, context) - h.Write(transcript.Sum(nil)) - return h.Sum(nil) -} - -// typeAndHashFromSignatureScheme returns the corresponding signature type and -// crypto.Hash for a given TLS SignatureScheme. -func typeAndHashFromSignatureScheme(signatureAlgorithm SignatureScheme) (sigType uint8, hash crypto.Hash, err error) { - switch signatureAlgorithm { - case PKCS1WithSHA1, PKCS1WithSHA256, PKCS1WithSHA384, PKCS1WithSHA512: - sigType = signaturePKCS1v15 - case PSSWithSHA256, PSSWithSHA384, PSSWithSHA512: - sigType = signatureRSAPSS - case ECDSAWithSHA1, ECDSAWithP256AndSHA256, ECDSAWithP384AndSHA384, ECDSAWithP521AndSHA512: - sigType = signatureECDSA - case Ed25519: - sigType = signatureEd25519 - default: - return 0, 0, fmt.Errorf("unsupported signature algorithm: %v", signatureAlgorithm) - } - switch signatureAlgorithm { - case PKCS1WithSHA1, ECDSAWithSHA1: - hash = crypto.SHA1 - case PKCS1WithSHA256, PSSWithSHA256, ECDSAWithP256AndSHA256: - hash = crypto.SHA256 - case PKCS1WithSHA384, PSSWithSHA384, ECDSAWithP384AndSHA384: - hash = crypto.SHA384 - case PKCS1WithSHA512, PSSWithSHA512, ECDSAWithP521AndSHA512: - hash = crypto.SHA512 - case Ed25519: - hash = directSigning - default: - return 0, 0, fmt.Errorf("unsupported signature algorithm: %v", signatureAlgorithm) - } - return sigType, hash, nil -} - -// legacyTypeAndHashFromPublicKey returns the fixed signature type and crypto.Hash for -// a given public key used with TLS 1.0 and 1.1, before the introduction of -// signature algorithm negotiation. -func legacyTypeAndHashFromPublicKey(pub crypto.PublicKey) (sigType uint8, hash crypto.Hash, err error) { - switch pub.(type) { - case *rsa.PublicKey: - return signaturePKCS1v15, crypto.MD5SHA1, nil - case *ecdsa.PublicKey: - return signatureECDSA, crypto.SHA1, nil - case ed25519.PublicKey: - // RFC 8422 specifies support for Ed25519 in TLS 1.0 and 1.1, - // but it requires holding on to a handshake transcript to do a - // full signature, and not even OpenSSL bothers with the - // complexity, so we can't even test it properly. - return 0, 0, fmt.Errorf("tls: Ed25519 public keys are not supported before TLS 1.2") - default: - return 0, 0, fmt.Errorf("tls: unsupported public key: %T", pub) - } -} - -var rsaSignatureSchemes = []struct { - scheme SignatureScheme - minModulusBytes int - maxVersion uint16 -}{ - // RSA-PSS is used with PSSSaltLengthEqualsHash, and requires - // emLen >= hLen + sLen + 2 - {PSSWithSHA256, crypto.SHA256.Size()*2 + 2, VersionTLS13}, - {PSSWithSHA384, crypto.SHA384.Size()*2 + 2, VersionTLS13}, - {PSSWithSHA512, crypto.SHA512.Size()*2 + 2, VersionTLS13}, - // PKCS #1 v1.5 uses prefixes from hashPrefixes in crypto/rsa, and requires - // emLen >= len(prefix) + hLen + 11 - // TLS 1.3 dropped support for PKCS #1 v1.5 in favor of RSA-PSS. - {PKCS1WithSHA256, 19 + crypto.SHA256.Size() + 11, VersionTLS12}, - {PKCS1WithSHA384, 19 + crypto.SHA384.Size() + 11, VersionTLS12}, - {PKCS1WithSHA512, 19 + crypto.SHA512.Size() + 11, VersionTLS12}, - {PKCS1WithSHA1, 15 + crypto.SHA1.Size() + 11, VersionTLS12}, -} - -// signatureSchemesForCertificate returns the list of supported SignatureSchemes -// for a given certificate, based on the public key and the protocol version, -// and optionally filtered by its explicit SupportedSignatureAlgorithms. -// -// This function must be kept in sync with supportedSignatureAlgorithms. -func signatureSchemesForCertificate(version uint16, cert *Certificate) []SignatureScheme { - priv, ok := cert.PrivateKey.(crypto.Signer) - if !ok { - return nil - } - - var sigAlgs []SignatureScheme - switch pub := priv.Public().(type) { - case *ecdsa.PublicKey: - if version != VersionTLS13 { - // In TLS 1.2 and earlier, ECDSA algorithms are not - // constrained to a single curve. - sigAlgs = []SignatureScheme{ - ECDSAWithP256AndSHA256, - ECDSAWithP384AndSHA384, - ECDSAWithP521AndSHA512, - ECDSAWithSHA1, - } - break - } - switch pub.Curve { - case elliptic.P256(): - sigAlgs = []SignatureScheme{ECDSAWithP256AndSHA256} - case elliptic.P384(): - sigAlgs = []SignatureScheme{ECDSAWithP384AndSHA384} - case elliptic.P521(): - sigAlgs = []SignatureScheme{ECDSAWithP521AndSHA512} - default: - return nil - } - case *rsa.PublicKey: - size := pub.Size() - sigAlgs = make([]SignatureScheme, 0, len(rsaSignatureSchemes)) - for _, candidate := range rsaSignatureSchemes { - if size >= candidate.minModulusBytes && version <= candidate.maxVersion { - sigAlgs = append(sigAlgs, candidate.scheme) - } - } - case ed25519.PublicKey: - sigAlgs = []SignatureScheme{Ed25519} - default: - return nil - } - - if cert.SupportedSignatureAlgorithms != nil { - var filteredSigAlgs []SignatureScheme - for _, sigAlg := range sigAlgs { - if isSupportedSignatureAlgorithm(sigAlg, cert.SupportedSignatureAlgorithms) { - filteredSigAlgs = append(filteredSigAlgs, sigAlg) - } - } - return filteredSigAlgs - } - return sigAlgs -} - -// selectSignatureScheme picks a SignatureScheme from the peer's preference list -// that works with the selected certificate. It's only called for protocol -// versions that support signature algorithms, so TLS 1.2 and 1.3. -func selectSignatureScheme(vers uint16, c *Certificate, peerAlgs []SignatureScheme) (SignatureScheme, error) { - supportedAlgs := signatureSchemesForCertificate(vers, c) - if len(supportedAlgs) == 0 { - return 0, unsupportedCertificateError(c) - } - if len(peerAlgs) == 0 && vers == VersionTLS12 { - // For TLS 1.2, if the client didn't send signature_algorithms then we - // can assume that it supports SHA1. See RFC 5246, Section 7.4.1.4.1. - peerAlgs = []SignatureScheme{PKCS1WithSHA1, ECDSAWithSHA1} - } - // Pick signature scheme in the peer's preference order, as our - // preference order is not configurable. - for _, preferredAlg := range peerAlgs { - if isSupportedSignatureAlgorithm(preferredAlg, supportedAlgs) { - return preferredAlg, nil - } - } - return 0, errors.New("tls: peer doesn't support any of the certificate's signature algorithms") -} - -// unsupportedCertificateError returns a helpful error for certificates with -// an unsupported private key. -func unsupportedCertificateError(cert *Certificate) error { - switch cert.PrivateKey.(type) { - case rsa.PrivateKey, ecdsa.PrivateKey: - return fmt.Errorf("tls: unsupported certificate: private key is %T, expected *%T", - cert.PrivateKey, cert.PrivateKey) - case *ed25519.PrivateKey: - return fmt.Errorf("tls: unsupported certificate: private key is *ed25519.PrivateKey, expected ed25519.PrivateKey") - } - - signer, ok := cert.PrivateKey.(crypto.Signer) - if !ok { - return fmt.Errorf("tls: certificate private key (%T) does not implement crypto.Signer", - cert.PrivateKey) - } - - switch pub := signer.Public().(type) { - case *ecdsa.PublicKey: - switch pub.Curve { - case elliptic.P256(): - case elliptic.P384(): - case elliptic.P521(): - default: - return fmt.Errorf("tls: unsupported certificate curve (%s)", pub.Curve.Params().Name) - } - case *rsa.PublicKey: - return fmt.Errorf("tls: certificate RSA key size too small for supported signature algorithms") - case ed25519.PublicKey: - default: - return fmt.Errorf("tls: unsupported certificate key (%T)", pub) - } - - if cert.SupportedSignatureAlgorithms != nil { - return fmt.Errorf("tls: peer doesn't support the certificate custom signature algorithms") - } - - return fmt.Errorf("tls: internal error: unsupported key (%T)", cert.PrivateKey) -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/cipher_suites.go b/vendor/github.com/quic-go/qtls-go1-18/cipher_suites.go deleted file mode 100644 index e0be514740..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/cipher_suites.go +++ /dev/null @@ -1,691 +0,0 @@ -// Copyright 2010 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 qtls - -import ( - "crypto" - "crypto/aes" - "crypto/cipher" - "crypto/des" - "crypto/hmac" - "crypto/rc4" - "crypto/sha1" - "crypto/sha256" - "fmt" - "hash" - - "golang.org/x/crypto/chacha20poly1305" -) - -// CipherSuite is a TLS cipher suite. Note that most functions in this package -// accept and expose cipher suite IDs instead of this type. -type CipherSuite struct { - ID uint16 - Name string - - // Supported versions is the list of TLS protocol versions that can - // negotiate this cipher suite. - SupportedVersions []uint16 - - // Insecure is true if the cipher suite has known security issues - // due to its primitives, design, or implementation. - Insecure bool -} - -var ( - supportedUpToTLS12 = []uint16{VersionTLS10, VersionTLS11, VersionTLS12} - supportedOnlyTLS12 = []uint16{VersionTLS12} - supportedOnlyTLS13 = []uint16{VersionTLS13} -) - -// CipherSuites returns a list of cipher suites currently implemented by this -// package, excluding those with security issues, which are returned by -// InsecureCipherSuites. -// -// The list is sorted by ID. Note that the default cipher suites selected by -// this package might depend on logic that can't be captured by a static list, -// and might not match those returned by this function. -func CipherSuites() []*CipherSuite { - return []*CipherSuite{ - {TLS_RSA_WITH_AES_128_CBC_SHA, "TLS_RSA_WITH_AES_128_CBC_SHA", supportedUpToTLS12, false}, - {TLS_RSA_WITH_AES_256_CBC_SHA, "TLS_RSA_WITH_AES_256_CBC_SHA", supportedUpToTLS12, false}, - {TLS_RSA_WITH_AES_128_GCM_SHA256, "TLS_RSA_WITH_AES_128_GCM_SHA256", supportedOnlyTLS12, false}, - {TLS_RSA_WITH_AES_256_GCM_SHA384, "TLS_RSA_WITH_AES_256_GCM_SHA384", supportedOnlyTLS12, false}, - - {TLS_AES_128_GCM_SHA256, "TLS_AES_128_GCM_SHA256", supportedOnlyTLS13, false}, - {TLS_AES_256_GCM_SHA384, "TLS_AES_256_GCM_SHA384", supportedOnlyTLS13, false}, - {TLS_CHACHA20_POLY1305_SHA256, "TLS_CHACHA20_POLY1305_SHA256", supportedOnlyTLS13, false}, - - {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", supportedUpToTLS12, false}, - {TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", supportedUpToTLS12, false}, - {TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", supportedUpToTLS12, false}, - {TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", supportedUpToTLS12, false}, - {TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", supportedOnlyTLS12, false}, - {TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", supportedOnlyTLS12, false}, - {TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", supportedOnlyTLS12, false}, - {TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", supportedOnlyTLS12, false}, - {TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", supportedOnlyTLS12, false}, - {TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", supportedOnlyTLS12, false}, - } -} - -// InsecureCipherSuites returns a list of cipher suites currently implemented by -// this package and which have security issues. -// -// Most applications should not use the cipher suites in this list, and should -// only use those returned by CipherSuites. -func InsecureCipherSuites() []*CipherSuite { - // This list includes RC4, CBC_SHA256, and 3DES cipher suites. See - // cipherSuitesPreferenceOrder for details. - return []*CipherSuite{ - {TLS_RSA_WITH_RC4_128_SHA, "TLS_RSA_WITH_RC4_128_SHA", supportedUpToTLS12, true}, - {TLS_RSA_WITH_3DES_EDE_CBC_SHA, "TLS_RSA_WITH_3DES_EDE_CBC_SHA", supportedUpToTLS12, true}, - {TLS_RSA_WITH_AES_128_CBC_SHA256, "TLS_RSA_WITH_AES_128_CBC_SHA256", supportedOnlyTLS12, true}, - {TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", supportedUpToTLS12, true}, - {TLS_ECDHE_RSA_WITH_RC4_128_SHA, "TLS_ECDHE_RSA_WITH_RC4_128_SHA", supportedUpToTLS12, true}, - {TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", supportedUpToTLS12, true}, - {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", supportedOnlyTLS12, true}, - {TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", supportedOnlyTLS12, true}, - } -} - -// CipherSuiteName returns the standard name for the passed cipher suite ID -// (e.g. "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"), or a fallback representation -// of the ID value if the cipher suite is not implemented by this package. -func CipherSuiteName(id uint16) string { - for _, c := range CipherSuites() { - if c.ID == id { - return c.Name - } - } - for _, c := range InsecureCipherSuites() { - if c.ID == id { - return c.Name - } - } - return fmt.Sprintf("0x%04X", id) -} - -const ( - // suiteECDHE indicates that the cipher suite involves elliptic curve - // Diffie-Hellman. This means that it should only be selected when the - // client indicates that it supports ECC with a curve and point format - // that we're happy with. - suiteECDHE = 1 << iota - // suiteECSign indicates that the cipher suite involves an ECDSA or - // EdDSA signature and therefore may only be selected when the server's - // certificate is ECDSA or EdDSA. If this is not set then the cipher suite - // is RSA based. - suiteECSign - // suiteTLS12 indicates that the cipher suite should only be advertised - // and accepted when using TLS 1.2. - suiteTLS12 - // suiteSHA384 indicates that the cipher suite uses SHA384 as the - // handshake hash. - suiteSHA384 -) - -// A cipherSuite is a TLS 1.0–1.2 cipher suite, and defines the key exchange -// mechanism, as well as the cipher+MAC pair or the AEAD. -type cipherSuite struct { - id uint16 - // the lengths, in bytes, of the key material needed for each component. - keyLen int - macLen int - ivLen int - ka func(version uint16) keyAgreement - // flags is a bitmask of the suite* values, above. - flags int - cipher func(key, iv []byte, isRead bool) any - mac func(key []byte) hash.Hash - aead func(key, fixedNonce []byte) aead -} - -var cipherSuites = []*cipherSuite{ // TODO: replace with a map, since the order doesn't matter. - {TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, 32, 0, 12, ecdheRSAKA, suiteECDHE | suiteTLS12, nil, nil, aeadChaCha20Poly1305}, - {TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, 32, 0, 12, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteTLS12, nil, nil, aeadChaCha20Poly1305}, - {TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 16, 0, 4, ecdheRSAKA, suiteECDHE | suiteTLS12, nil, nil, aeadAESGCM}, - {TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 16, 0, 4, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteTLS12, nil, nil, aeadAESGCM}, - {TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 32, 0, 4, ecdheRSAKA, suiteECDHE | suiteTLS12 | suiteSHA384, nil, nil, aeadAESGCM}, - {TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 32, 0, 4, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteTLS12 | suiteSHA384, nil, nil, aeadAESGCM}, - {TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, 16, 32, 16, ecdheRSAKA, suiteECDHE | suiteTLS12, cipherAES, macSHA256, nil}, - {TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 16, 20, 16, ecdheRSAKA, suiteECDHE, cipherAES, macSHA1, nil}, - {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, 16, 32, 16, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteTLS12, cipherAES, macSHA256, nil}, - {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 16, 20, 16, ecdheECDSAKA, suiteECDHE | suiteECSign, cipherAES, macSHA1, nil}, - {TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, 32, 20, 16, ecdheRSAKA, suiteECDHE, cipherAES, macSHA1, nil}, - {TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 32, 20, 16, ecdheECDSAKA, suiteECDHE | suiteECSign, cipherAES, macSHA1, nil}, - {TLS_RSA_WITH_AES_128_GCM_SHA256, 16, 0, 4, rsaKA, suiteTLS12, nil, nil, aeadAESGCM}, - {TLS_RSA_WITH_AES_256_GCM_SHA384, 32, 0, 4, rsaKA, suiteTLS12 | suiteSHA384, nil, nil, aeadAESGCM}, - {TLS_RSA_WITH_AES_128_CBC_SHA256, 16, 32, 16, rsaKA, suiteTLS12, cipherAES, macSHA256, nil}, - {TLS_RSA_WITH_AES_128_CBC_SHA, 16, 20, 16, rsaKA, 0, cipherAES, macSHA1, nil}, - {TLS_RSA_WITH_AES_256_CBC_SHA, 32, 20, 16, rsaKA, 0, cipherAES, macSHA1, nil}, - {TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, 24, 20, 8, ecdheRSAKA, suiteECDHE, cipher3DES, macSHA1, nil}, - {TLS_RSA_WITH_3DES_EDE_CBC_SHA, 24, 20, 8, rsaKA, 0, cipher3DES, macSHA1, nil}, - {TLS_RSA_WITH_RC4_128_SHA, 16, 20, 0, rsaKA, 0, cipherRC4, macSHA1, nil}, - {TLS_ECDHE_RSA_WITH_RC4_128_SHA, 16, 20, 0, ecdheRSAKA, suiteECDHE, cipherRC4, macSHA1, nil}, - {TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, 16, 20, 0, ecdheECDSAKA, suiteECDHE | suiteECSign, cipherRC4, macSHA1, nil}, -} - -// selectCipherSuite returns the first TLS 1.0–1.2 cipher suite from ids which -// is also in supportedIDs and passes the ok filter. -func selectCipherSuite(ids, supportedIDs []uint16, ok func(*cipherSuite) bool) *cipherSuite { - for _, id := range ids { - candidate := cipherSuiteByID(id) - if candidate == nil || !ok(candidate) { - continue - } - - for _, suppID := range supportedIDs { - if id == suppID { - return candidate - } - } - } - return nil -} - -// A cipherSuiteTLS13 defines only the pair of the AEAD algorithm and hash -// algorithm to be used with HKDF. See RFC 8446, Appendix B.4. -type cipherSuiteTLS13 struct { - id uint16 - keyLen int - aead func(key, fixedNonce []byte) aead - hash crypto.Hash -} - -type CipherSuiteTLS13 struct { - ID uint16 - KeyLen int - Hash crypto.Hash - AEAD func(key, fixedNonce []byte) cipher.AEAD -} - -func (c *CipherSuiteTLS13) IVLen() int { - return aeadNonceLength -} - -var cipherSuitesTLS13 = []*cipherSuiteTLS13{ // TODO: replace with a map. - {TLS_AES_128_GCM_SHA256, 16, aeadAESGCMTLS13, crypto.SHA256}, - {TLS_CHACHA20_POLY1305_SHA256, 32, aeadChaCha20Poly1305, crypto.SHA256}, - {TLS_AES_256_GCM_SHA384, 32, aeadAESGCMTLS13, crypto.SHA384}, -} - -// cipherSuitesPreferenceOrder is the order in which we'll select (on the -// server) or advertise (on the client) TLS 1.0–1.2 cipher suites. -// -// Cipher suites are filtered but not reordered based on the application and -// peer's preferences, meaning we'll never select a suite lower in this list if -// any higher one is available. This makes it more defensible to keep weaker -// cipher suites enabled, especially on the server side where we get the last -// word, since there are no known downgrade attacks on cipher suites selection. -// -// The list is sorted by applying the following priority rules, stopping at the -// first (most important) applicable one: -// -// - Anything else comes before RC4 -// -// RC4 has practically exploitable biases. See https://www.rc4nomore.com. -// -// - Anything else comes before CBC_SHA256 -// -// SHA-256 variants of the CBC ciphersuites don't implement any Lucky13 -// countermeasures. See http://www.isg.rhul.ac.uk/tls/Lucky13.html and -// https://www.imperialviolet.org/2013/02/04/luckythirteen.html. -// -// - Anything else comes before 3DES -// -// 3DES has 64-bit blocks, which makes it fundamentally susceptible to -// birthday attacks. See https://sweet32.info. -// -// - ECDHE comes before anything else -// -// Once we got the broken stuff out of the way, the most important -// property a cipher suite can have is forward secrecy. We don't -// implement FFDHE, so that means ECDHE. -// -// - AEADs come before CBC ciphers -// -// Even with Lucky13 countermeasures, MAC-then-Encrypt CBC cipher suites -// are fundamentally fragile, and suffered from an endless sequence of -// padding oracle attacks. See https://eprint.iacr.org/2015/1129, -// https://www.imperialviolet.org/2014/12/08/poodleagain.html, and -// https://blog.cloudflare.com/yet-another-padding-oracle-in-openssl-cbc-ciphersuites/. -// -// - AES comes before ChaCha20 -// -// When AES hardware is available, AES-128-GCM and AES-256-GCM are faster -// than ChaCha20Poly1305. -// -// When AES hardware is not available, AES-128-GCM is one or more of: much -// slower, way more complex, and less safe (because not constant time) -// than ChaCha20Poly1305. -// -// We use this list if we think both peers have AES hardware, and -// cipherSuitesPreferenceOrderNoAES otherwise. -// -// - AES-128 comes before AES-256 -// -// The only potential advantages of AES-256 are better multi-target -// margins, and hypothetical post-quantum properties. Neither apply to -// TLS, and AES-256 is slower due to its four extra rounds (which don't -// contribute to the advantages above). -// -// - ECDSA comes before RSA -// -// The relative order of ECDSA and RSA cipher suites doesn't matter, -// as they depend on the certificate. Pick one to get a stable order. -// -var cipherSuitesPreferenceOrder = []uint16{ - // AEADs w/ ECDHE - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, - - // CBC w/ ECDHE - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - - // AEADs w/o ECDHE - TLS_RSA_WITH_AES_128_GCM_SHA256, - TLS_RSA_WITH_AES_256_GCM_SHA384, - - // CBC w/o ECDHE - TLS_RSA_WITH_AES_128_CBC_SHA, - TLS_RSA_WITH_AES_256_CBC_SHA, - - // 3DES - TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, - TLS_RSA_WITH_3DES_EDE_CBC_SHA, - - // CBC_SHA256 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - TLS_RSA_WITH_AES_128_CBC_SHA256, - - // RC4 - TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, - TLS_RSA_WITH_RC4_128_SHA, -} - -var cipherSuitesPreferenceOrderNoAES = []uint16{ - // ChaCha20Poly1305 - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, - - // AES-GCM w/ ECDHE - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - - // The rest of cipherSuitesPreferenceOrder. - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - TLS_RSA_WITH_AES_128_GCM_SHA256, - TLS_RSA_WITH_AES_256_GCM_SHA384, - TLS_RSA_WITH_AES_128_CBC_SHA, - TLS_RSA_WITH_AES_256_CBC_SHA, - TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, - TLS_RSA_WITH_3DES_EDE_CBC_SHA, - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - TLS_RSA_WITH_AES_128_CBC_SHA256, - TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, - TLS_RSA_WITH_RC4_128_SHA, -} - -// disabledCipherSuites are not used unless explicitly listed in -// Config.CipherSuites. They MUST be at the end of cipherSuitesPreferenceOrder. -var disabledCipherSuites = []uint16{ - // CBC_SHA256 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - TLS_RSA_WITH_AES_128_CBC_SHA256, - - // RC4 - TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, - TLS_RSA_WITH_RC4_128_SHA, -} - -var ( - defaultCipherSuitesLen = len(cipherSuitesPreferenceOrder) - len(disabledCipherSuites) - defaultCipherSuites = cipherSuitesPreferenceOrder[:defaultCipherSuitesLen] -) - -// defaultCipherSuitesTLS13 is also the preference order, since there are no -// disabled by default TLS 1.3 cipher suites. The same AES vs ChaCha20 logic as -// cipherSuitesPreferenceOrder applies. -var defaultCipherSuitesTLS13 = []uint16{ - TLS_AES_128_GCM_SHA256, - TLS_AES_256_GCM_SHA384, - TLS_CHACHA20_POLY1305_SHA256, -} - -var defaultCipherSuitesTLS13NoAES = []uint16{ - TLS_CHACHA20_POLY1305_SHA256, - TLS_AES_128_GCM_SHA256, - TLS_AES_256_GCM_SHA384, -} - -var aesgcmCiphers = map[uint16]bool{ - // TLS 1.2 - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: true, - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: true, - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: true, - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: true, - // TLS 1.3 - TLS_AES_128_GCM_SHA256: true, - TLS_AES_256_GCM_SHA384: true, -} - -var nonAESGCMAEADCiphers = map[uint16]bool{ - // TLS 1.2 - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305: true, - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305: true, - // TLS 1.3 - TLS_CHACHA20_POLY1305_SHA256: true, -} - -// aesgcmPreferred returns whether the first known cipher in the preference list -// is an AES-GCM cipher, implying the peer has hardware support for it. -func aesgcmPreferred(ciphers []uint16) bool { - for _, cID := range ciphers { - if c := cipherSuiteByID(cID); c != nil { - return aesgcmCiphers[cID] - } - if c := cipherSuiteTLS13ByID(cID); c != nil { - return aesgcmCiphers[cID] - } - } - return false -} - -func cipherRC4(key, iv []byte, isRead bool) any { - cipher, _ := rc4.NewCipher(key) - return cipher -} - -func cipher3DES(key, iv []byte, isRead bool) any { - block, _ := des.NewTripleDESCipher(key) - if isRead { - return cipher.NewCBCDecrypter(block, iv) - } - return cipher.NewCBCEncrypter(block, iv) -} - -func cipherAES(key, iv []byte, isRead bool) any { - block, _ := aes.NewCipher(key) - if isRead { - return cipher.NewCBCDecrypter(block, iv) - } - return cipher.NewCBCEncrypter(block, iv) -} - -// macSHA1 returns a SHA-1 based constant time MAC. -func macSHA1(key []byte) hash.Hash { - return hmac.New(newConstantTimeHash(sha1.New), key) -} - -// macSHA256 returns a SHA-256 based MAC. This is only supported in TLS 1.2 and -// is currently only used in disabled-by-default cipher suites. -func macSHA256(key []byte) hash.Hash { - return hmac.New(sha256.New, key) -} - -type aead interface { - cipher.AEAD - - // explicitNonceLen returns the number of bytes of explicit nonce - // included in each record. This is eight for older AEADs and - // zero for modern ones. - explicitNonceLen() int -} - -const ( - aeadNonceLength = 12 - noncePrefixLength = 4 -) - -// prefixNonceAEAD wraps an AEAD and prefixes a fixed portion of the nonce to -// each call. -type prefixNonceAEAD struct { - // nonce contains the fixed part of the nonce in the first four bytes. - nonce [aeadNonceLength]byte - aead cipher.AEAD -} - -func (f *prefixNonceAEAD) NonceSize() int { return aeadNonceLength - noncePrefixLength } -func (f *prefixNonceAEAD) Overhead() int { return f.aead.Overhead() } -func (f *prefixNonceAEAD) explicitNonceLen() int { return f.NonceSize() } - -func (f *prefixNonceAEAD) Seal(out, nonce, plaintext, additionalData []byte) []byte { - copy(f.nonce[4:], nonce) - return f.aead.Seal(out, f.nonce[:], plaintext, additionalData) -} - -func (f *prefixNonceAEAD) Open(out, nonce, ciphertext, additionalData []byte) ([]byte, error) { - copy(f.nonce[4:], nonce) - return f.aead.Open(out, f.nonce[:], ciphertext, additionalData) -} - -// xoredNonceAEAD wraps an AEAD by XORing in a fixed pattern to the nonce -// before each call. -type xorNonceAEAD struct { - nonceMask [aeadNonceLength]byte - aead cipher.AEAD -} - -func (f *xorNonceAEAD) NonceSize() int { return 8 } // 64-bit sequence number -func (f *xorNonceAEAD) Overhead() int { return f.aead.Overhead() } -func (f *xorNonceAEAD) explicitNonceLen() int { return 0 } - -func (f *xorNonceAEAD) Seal(out, nonce, plaintext, additionalData []byte) []byte { - for i, b := range nonce { - f.nonceMask[4+i] ^= b - } - result := f.aead.Seal(out, f.nonceMask[:], plaintext, additionalData) - for i, b := range nonce { - f.nonceMask[4+i] ^= b - } - - return result -} - -func (f *xorNonceAEAD) Open(out, nonce, ciphertext, additionalData []byte) ([]byte, error) { - for i, b := range nonce { - f.nonceMask[4+i] ^= b - } - result, err := f.aead.Open(out, f.nonceMask[:], ciphertext, additionalData) - for i, b := range nonce { - f.nonceMask[4+i] ^= b - } - - return result, err -} - -func aeadAESGCM(key, noncePrefix []byte) aead { - if len(noncePrefix) != noncePrefixLength { - panic("tls: internal error: wrong nonce length") - } - aes, err := aes.NewCipher(key) - if err != nil { - panic(err) - } - aead, err := cipher.NewGCM(aes) - if err != nil { - panic(err) - } - - ret := &prefixNonceAEAD{aead: aead} - copy(ret.nonce[:], noncePrefix) - return ret -} - -// AEADAESGCMTLS13 creates a new AES-GCM AEAD for TLS 1.3 -func AEADAESGCMTLS13(key, fixedNonce []byte) cipher.AEAD { - return aeadAESGCMTLS13(key, fixedNonce) -} - -func aeadAESGCMTLS13(key, nonceMask []byte) aead { - if len(nonceMask) != aeadNonceLength { - panic("tls: internal error: wrong nonce length") - } - aes, err := aes.NewCipher(key) - if err != nil { - panic(err) - } - aead, err := cipher.NewGCM(aes) - if err != nil { - panic(err) - } - - ret := &xorNonceAEAD{aead: aead} - copy(ret.nonceMask[:], nonceMask) - return ret -} - -func aeadChaCha20Poly1305(key, nonceMask []byte) aead { - if len(nonceMask) != aeadNonceLength { - panic("tls: internal error: wrong nonce length") - } - aead, err := chacha20poly1305.New(key) - if err != nil { - panic(err) - } - - ret := &xorNonceAEAD{aead: aead} - copy(ret.nonceMask[:], nonceMask) - return ret -} - -type constantTimeHash interface { - hash.Hash - ConstantTimeSum(b []byte) []byte -} - -// cthWrapper wraps any hash.Hash that implements ConstantTimeSum, and replaces -// with that all calls to Sum. It's used to obtain a ConstantTimeSum-based HMAC. -type cthWrapper struct { - h constantTimeHash -} - -func (c *cthWrapper) Size() int { return c.h.Size() } -func (c *cthWrapper) BlockSize() int { return c.h.BlockSize() } -func (c *cthWrapper) Reset() { c.h.Reset() } -func (c *cthWrapper) Write(p []byte) (int, error) { return c.h.Write(p) } -func (c *cthWrapper) Sum(b []byte) []byte { return c.h.ConstantTimeSum(b) } - -func newConstantTimeHash(h func() hash.Hash) func() hash.Hash { - return func() hash.Hash { - return &cthWrapper{h().(constantTimeHash)} - } -} - -// tls10MAC implements the TLS 1.0 MAC function. RFC 2246, Section 6.2.3. -func tls10MAC(h hash.Hash, out, seq, header, data, extra []byte) []byte { - h.Reset() - h.Write(seq) - h.Write(header) - h.Write(data) - res := h.Sum(out) - if extra != nil { - h.Write(extra) - } - return res -} - -func rsaKA(version uint16) keyAgreement { - return rsaKeyAgreement{} -} - -func ecdheECDSAKA(version uint16) keyAgreement { - return &ecdheKeyAgreement{ - isRSA: false, - version: version, - } -} - -func ecdheRSAKA(version uint16) keyAgreement { - return &ecdheKeyAgreement{ - isRSA: true, - version: version, - } -} - -// mutualCipherSuite returns a cipherSuite given a list of supported -// ciphersuites and the id requested by the peer. -func mutualCipherSuite(have []uint16, want uint16) *cipherSuite { - for _, id := range have { - if id == want { - return cipherSuiteByID(id) - } - } - return nil -} - -func cipherSuiteByID(id uint16) *cipherSuite { - for _, cipherSuite := range cipherSuites { - if cipherSuite.id == id { - return cipherSuite - } - } - return nil -} - -func mutualCipherSuiteTLS13(have []uint16, want uint16) *cipherSuiteTLS13 { - for _, id := range have { - if id == want { - return cipherSuiteTLS13ByID(id) - } - } - return nil -} - -func cipherSuiteTLS13ByID(id uint16) *cipherSuiteTLS13 { - for _, cipherSuite := range cipherSuitesTLS13 { - if cipherSuite.id == id { - return cipherSuite - } - } - return nil -} - -// A list of cipher suite IDs that are, or have been, implemented by this -// package. -// -// See https://www.iana.org/assignments/tls-parameters/tls-parameters.xml -const ( - // TLS 1.0 - 1.2 cipher suites. - TLS_RSA_WITH_RC4_128_SHA uint16 = 0x0005 - TLS_RSA_WITH_3DES_EDE_CBC_SHA uint16 = 0x000a - TLS_RSA_WITH_AES_128_CBC_SHA uint16 = 0x002f - TLS_RSA_WITH_AES_256_CBC_SHA uint16 = 0x0035 - TLS_RSA_WITH_AES_128_CBC_SHA256 uint16 = 0x003c - TLS_RSA_WITH_AES_128_GCM_SHA256 uint16 = 0x009c - TLS_RSA_WITH_AES_256_GCM_SHA384 uint16 = 0x009d - TLS_ECDHE_ECDSA_WITH_RC4_128_SHA uint16 = 0xc007 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA uint16 = 0xc009 - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA uint16 = 0xc00a - TLS_ECDHE_RSA_WITH_RC4_128_SHA uint16 = 0xc011 - TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA uint16 = 0xc012 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA uint16 = 0xc013 - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA uint16 = 0xc014 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 uint16 = 0xc023 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 uint16 = 0xc027 - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 uint16 = 0xc02f - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 uint16 = 0xc02b - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 uint16 = 0xc030 - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 uint16 = 0xc02c - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xcca8 - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xcca9 - - // TLS 1.3 cipher suites. - TLS_AES_128_GCM_SHA256 uint16 = 0x1301 - TLS_AES_256_GCM_SHA384 uint16 = 0x1302 - TLS_CHACHA20_POLY1305_SHA256 uint16 = 0x1303 - - // TLS_FALLBACK_SCSV isn't a standard cipher suite but an indicator - // that the client is doing version fallback. See RFC 7507. - TLS_FALLBACK_SCSV uint16 = 0x5600 - - // Legacy names for the corresponding cipher suites with the correct _SHA256 - // suffix, retained for backward compatibility. - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 = TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 = TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 -) diff --git a/vendor/github.com/quic-go/qtls-go1-18/common.go b/vendor/github.com/quic-go/qtls-go1-18/common.go deleted file mode 100644 index 3e4ced7e28..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/common.go +++ /dev/null @@ -1,1508 +0,0 @@ -// Copyright 2009 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 qtls - -import ( - "bytes" - "container/list" - "context" - "crypto" - "crypto/ecdsa" - "crypto/ed25519" - "crypto/elliptic" - "crypto/rand" - "crypto/rsa" - "crypto/sha512" - "crypto/tls" - "crypto/x509" - "errors" - "fmt" - "io" - "net" - "strings" - "sync" - "time" -) - -const ( - VersionTLS10 = 0x0301 - VersionTLS11 = 0x0302 - VersionTLS12 = 0x0303 - VersionTLS13 = 0x0304 - - // Deprecated: SSLv3 is cryptographically broken, and is no longer - // supported by this package. See golang.org/issue/32716. - VersionSSL30 = 0x0300 -) - -const ( - maxPlaintext = 16384 // maximum plaintext payload length - maxCiphertext = 16384 + 2048 // maximum ciphertext payload length - maxCiphertextTLS13 = 16384 + 256 // maximum ciphertext length in TLS 1.3 - recordHeaderLen = 5 // record header length - maxHandshake = 65536 // maximum handshake we support (protocol max is 16 MB) - maxUselessRecords = 16 // maximum number of consecutive non-advancing records -) - -// TLS record types. -type recordType uint8 - -const ( - recordTypeChangeCipherSpec recordType = 20 - recordTypeAlert recordType = 21 - recordTypeHandshake recordType = 22 - recordTypeApplicationData recordType = 23 -) - -// TLS handshake message types. -const ( - typeHelloRequest uint8 = 0 - typeClientHello uint8 = 1 - typeServerHello uint8 = 2 - typeNewSessionTicket uint8 = 4 - typeEndOfEarlyData uint8 = 5 - typeEncryptedExtensions uint8 = 8 - typeCertificate uint8 = 11 - typeServerKeyExchange uint8 = 12 - typeCertificateRequest uint8 = 13 - typeServerHelloDone uint8 = 14 - typeCertificateVerify uint8 = 15 - typeClientKeyExchange uint8 = 16 - typeFinished uint8 = 20 - typeCertificateStatus uint8 = 22 - typeKeyUpdate uint8 = 24 - typeNextProtocol uint8 = 67 // Not IANA assigned - typeMessageHash uint8 = 254 // synthetic message -) - -// TLS compression types. -const ( - compressionNone uint8 = 0 -) - -type Extension struct { - Type uint16 - Data []byte -} - -// TLS extension numbers -const ( - extensionServerName uint16 = 0 - extensionStatusRequest uint16 = 5 - extensionSupportedCurves uint16 = 10 // supported_groups in TLS 1.3, see RFC 8446, Section 4.2.7 - extensionSupportedPoints uint16 = 11 - extensionSignatureAlgorithms uint16 = 13 - extensionALPN uint16 = 16 - extensionSCT uint16 = 18 - extensionSessionTicket uint16 = 35 - extensionPreSharedKey uint16 = 41 - extensionEarlyData uint16 = 42 - extensionSupportedVersions uint16 = 43 - extensionCookie uint16 = 44 - extensionPSKModes uint16 = 45 - extensionCertificateAuthorities uint16 = 47 - extensionSignatureAlgorithmsCert uint16 = 50 - extensionKeyShare uint16 = 51 - extensionRenegotiationInfo uint16 = 0xff01 -) - -// TLS signaling cipher suite values -const ( - scsvRenegotiation uint16 = 0x00ff -) - -type EncryptionLevel uint8 - -const ( - EncryptionHandshake EncryptionLevel = iota - Encryption0RTT - EncryptionApplication -) - -// CurveID is a tls.CurveID -type CurveID = tls.CurveID - -const ( - CurveP256 CurveID = 23 - CurveP384 CurveID = 24 - CurveP521 CurveID = 25 - X25519 CurveID = 29 -) - -// TLS 1.3 Key Share. See RFC 8446, Section 4.2.8. -type keyShare struct { - group CurveID - data []byte -} - -// TLS 1.3 PSK Key Exchange Modes. See RFC 8446, Section 4.2.9. -const ( - pskModePlain uint8 = 0 - pskModeDHE uint8 = 1 -) - -// TLS 1.3 PSK Identity. Can be a Session Ticket, or a reference to a saved -// session. See RFC 8446, Section 4.2.11. -type pskIdentity struct { - label []byte - obfuscatedTicketAge uint32 -} - -// TLS Elliptic Curve Point Formats -// https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-9 -const ( - pointFormatUncompressed uint8 = 0 -) - -// TLS CertificateStatusType (RFC 3546) -const ( - statusTypeOCSP uint8 = 1 -) - -// Certificate types (for certificateRequestMsg) -const ( - certTypeRSASign = 1 - certTypeECDSASign = 64 // ECDSA or EdDSA keys, see RFC 8422, Section 3. -) - -// Signature algorithms (for internal signaling use). Starting at 225 to avoid overlap with -// TLS 1.2 codepoints (RFC 5246, Appendix A.4.1), with which these have nothing to do. -const ( - signaturePKCS1v15 uint8 = iota + 225 - signatureRSAPSS - signatureECDSA - signatureEd25519 -) - -// directSigning is a standard Hash value that signals that no pre-hashing -// should be performed, and that the input should be signed directly. It is the -// hash function associated with the Ed25519 signature scheme. -var directSigning crypto.Hash = 0 - -// supportedSignatureAlgorithms contains the signature and hash algorithms that -// the code advertises as supported in a TLS 1.2+ ClientHello and in a TLS 1.2+ -// CertificateRequest. The two fields are merged to match with TLS 1.3. -// Note that in TLS 1.2, the ECDSA algorithms are not constrained to P-256, etc. -var supportedSignatureAlgorithms = []SignatureScheme{ - PSSWithSHA256, - ECDSAWithP256AndSHA256, - Ed25519, - PSSWithSHA384, - PSSWithSHA512, - PKCS1WithSHA256, - PKCS1WithSHA384, - PKCS1WithSHA512, - ECDSAWithP384AndSHA384, - ECDSAWithP521AndSHA512, - PKCS1WithSHA1, - ECDSAWithSHA1, -} - -// helloRetryRequestRandom is set as the Random value of a ServerHello -// to signal that the message is actually a HelloRetryRequest. -var helloRetryRequestRandom = []byte{ // See RFC 8446, Section 4.1.3. - 0xCF, 0x21, 0xAD, 0x74, 0xE5, 0x9A, 0x61, 0x11, - 0xBE, 0x1D, 0x8C, 0x02, 0x1E, 0x65, 0xB8, 0x91, - 0xC2, 0xA2, 0x11, 0x16, 0x7A, 0xBB, 0x8C, 0x5E, - 0x07, 0x9E, 0x09, 0xE2, 0xC8, 0xA8, 0x33, 0x9C, -} - -const ( - // downgradeCanaryTLS12 or downgradeCanaryTLS11 is embedded in the server - // random as a downgrade protection if the server would be capable of - // negotiating a higher version. See RFC 8446, Section 4.1.3. - downgradeCanaryTLS12 = "DOWNGRD\x01" - downgradeCanaryTLS11 = "DOWNGRD\x00" -) - -// testingOnlyForceDowngradeCanary is set in tests to force the server side to -// include downgrade canaries even if it's using its highers supported version. -var testingOnlyForceDowngradeCanary bool - -type ConnectionState = tls.ConnectionState - -// ConnectionState records basic TLS details about the connection. -type connectionState struct { - // Version is the TLS version used by the connection (e.g. VersionTLS12). - Version uint16 - - // HandshakeComplete is true if the handshake has concluded. - HandshakeComplete bool - - // DidResume is true if this connection was successfully resumed from a - // previous session with a session ticket or similar mechanism. - DidResume bool - - // CipherSuite is the cipher suite negotiated for the connection (e.g. - // TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_AES_128_GCM_SHA256). - CipherSuite uint16 - - // NegotiatedProtocol is the application protocol negotiated with ALPN. - NegotiatedProtocol string - - // NegotiatedProtocolIsMutual used to indicate a mutual NPN negotiation. - // - // Deprecated: this value is always true. - NegotiatedProtocolIsMutual bool - - // ServerName is the value of the Server Name Indication extension sent by - // the client. It's available both on the server and on the client side. - ServerName string - - // PeerCertificates are the parsed certificates sent by the peer, in the - // order in which they were sent. The first element is the leaf certificate - // that the connection is verified against. - // - // On the client side, it can't be empty. On the server side, it can be - // empty if Config.ClientAuth is not RequireAnyClientCert or - // RequireAndVerifyClientCert. - PeerCertificates []*x509.Certificate - - // VerifiedChains is a list of one or more chains where the first element is - // PeerCertificates[0] and the last element is from Config.RootCAs (on the - // client side) or Config.ClientCAs (on the server side). - // - // On the client side, it's set if Config.InsecureSkipVerify is false. On - // the server side, it's set if Config.ClientAuth is VerifyClientCertIfGiven - // (and the peer provided a certificate) or RequireAndVerifyClientCert. - VerifiedChains [][]*x509.Certificate - - // SignedCertificateTimestamps is a list of SCTs provided by the peer - // through the TLS handshake for the leaf certificate, if any. - SignedCertificateTimestamps [][]byte - - // OCSPResponse is a stapled Online Certificate Status Protocol (OCSP) - // response provided by the peer for the leaf certificate, if any. - OCSPResponse []byte - - // TLSUnique contains the "tls-unique" channel binding value (see RFC 5929, - // Section 3). This value will be nil for TLS 1.3 connections and for all - // resumed connections. - // - // Deprecated: there are conditions in which this value might not be unique - // to a connection. See the Security Considerations sections of RFC 5705 and - // RFC 7627, and https://mitls.org/pages/attacks/3SHAKE#channelbindings. - TLSUnique []byte - - // ekm is a closure exposed via ExportKeyingMaterial. - ekm func(label string, context []byte, length int) ([]byte, error) -} - -type ConnectionStateWith0RTT struct { - ConnectionState - - Used0RTT bool // true if 0-RTT was both offered and accepted -} - -// ClientAuthType is tls.ClientAuthType -type ClientAuthType = tls.ClientAuthType - -const ( - NoClientCert = tls.NoClientCert - RequestClientCert = tls.RequestClientCert - RequireAnyClientCert = tls.RequireAnyClientCert - VerifyClientCertIfGiven = tls.VerifyClientCertIfGiven - RequireAndVerifyClientCert = tls.RequireAndVerifyClientCert -) - -// requiresClientCert reports whether the ClientAuthType requires a client -// certificate to be provided. -func requiresClientCert(c ClientAuthType) bool { - switch c { - case RequireAnyClientCert, RequireAndVerifyClientCert: - return true - default: - return false - } -} - -// ClientSessionState contains the state needed by clients to resume TLS -// sessions. -type ClientSessionState = tls.ClientSessionState - -type clientSessionState struct { - sessionTicket []uint8 // Encrypted ticket used for session resumption with server - vers uint16 // TLS version negotiated for the session - cipherSuite uint16 // Ciphersuite negotiated for the session - masterSecret []byte // Full handshake MasterSecret, or TLS 1.3 resumption_master_secret - serverCertificates []*x509.Certificate // Certificate chain presented by the server - verifiedChains [][]*x509.Certificate // Certificate chains we built for verification - receivedAt time.Time // When the session ticket was received from the server - ocspResponse []byte // Stapled OCSP response presented by the server - scts [][]byte // SCTs presented by the server - - // TLS 1.3 fields. - nonce []byte // Ticket nonce sent by the server, to derive PSK - useBy time.Time // Expiration of the ticket lifetime as set by the server - ageAdd uint32 // Random obfuscation factor for sending the ticket age -} - -// ClientSessionCache is a cache of ClientSessionState objects that can be used -// by a client to resume a TLS session with a given server. ClientSessionCache -// implementations should expect to be called concurrently from different -// goroutines. Up to TLS 1.2, only ticket-based resumption is supported, not -// SessionID-based resumption. In TLS 1.3 they were merged into PSK modes, which -// are supported via this interface. -// -//go:generate sh -c "mockgen -package qtls -destination mock_client_session_cache_test.go github.com/quic-go/qtls-go1-18 ClientSessionCache" -type ClientSessionCache = tls.ClientSessionCache - -// SignatureScheme is a tls.SignatureScheme -type SignatureScheme = tls.SignatureScheme - -const ( - // RSASSA-PKCS1-v1_5 algorithms. - PKCS1WithSHA256 SignatureScheme = 0x0401 - PKCS1WithSHA384 SignatureScheme = 0x0501 - PKCS1WithSHA512 SignatureScheme = 0x0601 - - // RSASSA-PSS algorithms with public key OID rsaEncryption. - PSSWithSHA256 SignatureScheme = 0x0804 - PSSWithSHA384 SignatureScheme = 0x0805 - PSSWithSHA512 SignatureScheme = 0x0806 - - // ECDSA algorithms. Only constrained to a specific curve in TLS 1.3. - ECDSAWithP256AndSHA256 SignatureScheme = 0x0403 - ECDSAWithP384AndSHA384 SignatureScheme = 0x0503 - ECDSAWithP521AndSHA512 SignatureScheme = 0x0603 - - // EdDSA algorithms. - Ed25519 SignatureScheme = 0x0807 - - // Legacy signature and hash algorithms for TLS 1.2. - PKCS1WithSHA1 SignatureScheme = 0x0201 - ECDSAWithSHA1 SignatureScheme = 0x0203 -) - -// ClientHelloInfo contains information from a ClientHello message in order to -// guide application logic in the GetCertificate and GetConfigForClient callbacks. -type ClientHelloInfo = tls.ClientHelloInfo - -type clientHelloInfo struct { - // CipherSuites lists the CipherSuites supported by the client (e.g. - // TLS_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256). - CipherSuites []uint16 - - // ServerName indicates the name of the server requested by the client - // in order to support virtual hosting. ServerName is only set if the - // client is using SNI (see RFC 4366, Section 3.1). - ServerName string - - // SupportedCurves lists the elliptic curves supported by the client. - // SupportedCurves is set only if the Supported Elliptic Curves - // Extension is being used (see RFC 4492, Section 5.1.1). - SupportedCurves []CurveID - - // SupportedPoints lists the point formats supported by the client. - // SupportedPoints is set only if the Supported Point Formats Extension - // is being used (see RFC 4492, Section 5.1.2). - SupportedPoints []uint8 - - // SignatureSchemes lists the signature and hash schemes that the client - // is willing to verify. SignatureSchemes is set only if the Signature - // Algorithms Extension is being used (see RFC 5246, Section 7.4.1.4.1). - SignatureSchemes []SignatureScheme - - // SupportedProtos lists the application protocols supported by the client. - // SupportedProtos is set only if the Application-Layer Protocol - // Negotiation Extension is being used (see RFC 7301, Section 3.1). - // - // Servers can select a protocol by setting Config.NextProtos in a - // GetConfigForClient return value. - SupportedProtos []string - - // SupportedVersions lists the TLS versions supported by the client. - // For TLS versions less than 1.3, this is extrapolated from the max - // version advertised by the client, so values other than the greatest - // might be rejected if used. - SupportedVersions []uint16 - - // Conn is the underlying net.Conn for the connection. Do not read - // from, or write to, this connection; that will cause the TLS - // connection to fail. - Conn net.Conn - - // config is embedded by the GetCertificate or GetConfigForClient caller, - // for use with SupportsCertificate. - config *Config - - // ctx is the context of the handshake that is in progress. - ctx context.Context -} - -// Context returns the context of the handshake that is in progress. -// This context is a child of the context passed to HandshakeContext, -// if any, and is canceled when the handshake concludes. -func (c *clientHelloInfo) Context() context.Context { - return c.ctx -} - -// CertificateRequestInfo contains information from a server's -// CertificateRequest message, which is used to demand a certificate and proof -// of control from a client. -type CertificateRequestInfo = tls.CertificateRequestInfo - -type certificateRequestInfo struct { - // AcceptableCAs contains zero or more, DER-encoded, X.501 - // Distinguished Names. These are the names of root or intermediate CAs - // that the server wishes the returned certificate to be signed by. An - // empty slice indicates that the server has no preference. - AcceptableCAs [][]byte - - // SignatureSchemes lists the signature schemes that the server is - // willing to verify. - SignatureSchemes []SignatureScheme - - // Version is the TLS version that was negotiated for this connection. - Version uint16 - - // ctx is the context of the handshake that is in progress. - ctx context.Context -} - -// Context returns the context of the handshake that is in progress. -// This context is a child of the context passed to HandshakeContext, -// if any, and is canceled when the handshake concludes. -func (c *certificateRequestInfo) Context() context.Context { - return c.ctx -} - -// RenegotiationSupport enumerates the different levels of support for TLS -// renegotiation. TLS renegotiation is the act of performing subsequent -// handshakes on a connection after the first. This significantly complicates -// the state machine and has been the source of numerous, subtle security -// issues. Initiating a renegotiation is not supported, but support for -// accepting renegotiation requests may be enabled. -// -// Even when enabled, the server may not change its identity between handshakes -// (i.e. the leaf certificate must be the same). Additionally, concurrent -// handshake and application data flow is not permitted so renegotiation can -// only be used with protocols that synchronise with the renegotiation, such as -// HTTPS. -// -// Renegotiation is not defined in TLS 1.3. -type RenegotiationSupport = tls.RenegotiationSupport - -const ( - // RenegotiateNever disables renegotiation. - RenegotiateNever = tls.RenegotiateNever - - // RenegotiateOnceAsClient allows a remote server to request - // renegotiation once per connection. - RenegotiateOnceAsClient = tls.RenegotiateOnceAsClient - - // RenegotiateFreelyAsClient allows a remote server to repeatedly - // request renegotiation. - RenegotiateFreelyAsClient = tls.RenegotiateFreelyAsClient -) - -// A Config structure is used to configure a TLS client or server. -// After one has been passed to a TLS function it must not be -// modified. A Config may be reused; the tls package will also not -// modify it. -type Config = tls.Config - -type config struct { - // Rand provides the source of entropy for nonces and RSA blinding. - // If Rand is nil, TLS uses the cryptographic random reader in package - // crypto/rand. - // The Reader must be safe for use by multiple goroutines. - Rand io.Reader - - // Time returns the current time as the number of seconds since the epoch. - // If Time is nil, TLS uses time.Now. - Time func() time.Time - - // Certificates contains one or more certificate chains to present to the - // other side of the connection. The first certificate compatible with the - // peer's requirements is selected automatically. - // - // Server configurations must set one of Certificates, GetCertificate or - // GetConfigForClient. Clients doing client-authentication may set either - // Certificates or GetClientCertificate. - // - // Note: if there are multiple Certificates, and they don't have the - // optional field Leaf set, certificate selection will incur a significant - // per-handshake performance cost. - Certificates []Certificate - - // NameToCertificate maps from a certificate name to an element of - // Certificates. Note that a certificate name can be of the form - // '*.example.com' and so doesn't have to be a domain name as such. - // - // Deprecated: NameToCertificate only allows associating a single - // certificate with a given name. Leave this field nil to let the library - // select the first compatible chain from Certificates. - NameToCertificate map[string]*Certificate - - // GetCertificate returns a Certificate based on the given - // ClientHelloInfo. It will only be called if the client supplies SNI - // information or if Certificates is empty. - // - // If GetCertificate is nil or returns nil, then the certificate is - // retrieved from NameToCertificate. If NameToCertificate is nil, the - // best element of Certificates will be used. - GetCertificate func(*ClientHelloInfo) (*Certificate, error) - - // GetClientCertificate, if not nil, is called when a server requests a - // certificate from a client. If set, the contents of Certificates will - // be ignored. - // - // If GetClientCertificate returns an error, the handshake will be - // aborted and that error will be returned. Otherwise - // GetClientCertificate must return a non-nil Certificate. If - // Certificate.Certificate is empty then no certificate will be sent to - // the server. If this is unacceptable to the server then it may abort - // the handshake. - // - // GetClientCertificate may be called multiple times for the same - // connection if renegotiation occurs or if TLS 1.3 is in use. - GetClientCertificate func(*CertificateRequestInfo) (*Certificate, error) - - // GetConfigForClient, if not nil, is called after a ClientHello is - // received from a client. It may return a non-nil Config in order to - // change the Config that will be used to handle this connection. If - // the returned Config is nil, the original Config will be used. The - // Config returned by this callback may not be subsequently modified. - // - // If GetConfigForClient is nil, the Config passed to Server() will be - // used for all connections. - // - // If SessionTicketKey was explicitly set on the returned Config, or if - // SetSessionTicketKeys was called on the returned Config, those keys will - // be used. Otherwise, the original Config keys will be used (and possibly - // rotated if they are automatically managed). - GetConfigForClient func(*ClientHelloInfo) (*Config, error) - - // VerifyPeerCertificate, if not nil, is called after normal - // certificate verification by either a TLS client or server. It - // receives the raw ASN.1 certificates provided by the peer and also - // any verified chains that normal processing found. If it returns a - // non-nil error, the handshake is aborted and that error results. - // - // If normal verification fails then the handshake will abort before - // considering this callback. If normal verification is disabled by - // setting InsecureSkipVerify, or (for a server) when ClientAuth is - // RequestClientCert or RequireAnyClientCert, then this callback will - // be considered but the verifiedChains argument will always be nil. - VerifyPeerCertificate func(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error - - // VerifyConnection, if not nil, is called after normal certificate - // verification and after VerifyPeerCertificate by either a TLS client - // or server. If it returns a non-nil error, the handshake is aborted - // and that error results. - // - // If normal verification fails then the handshake will abort before - // considering this callback. This callback will run for all connections - // regardless of InsecureSkipVerify or ClientAuth settings. - VerifyConnection func(ConnectionState) error - - // RootCAs defines the set of root certificate authorities - // that clients use when verifying server certificates. - // If RootCAs is nil, TLS uses the host's root CA set. - RootCAs *x509.CertPool - - // NextProtos is a list of supported application level protocols, in - // order of preference. If both peers support ALPN, the selected - // protocol will be one from this list, and the connection will fail - // if there is no mutually supported protocol. If NextProtos is empty - // or the peer doesn't support ALPN, the connection will succeed and - // ConnectionState.NegotiatedProtocol will be empty. - NextProtos []string - - // ServerName is used to verify the hostname on the returned - // certificates unless InsecureSkipVerify is given. It is also included - // in the client's handshake to support virtual hosting unless it is - // an IP address. - ServerName string - - // ClientAuth determines the server's policy for - // TLS Client Authentication. The default is NoClientCert. - ClientAuth ClientAuthType - - // ClientCAs defines the set of root certificate authorities - // that servers use if required to verify a client certificate - // by the policy in ClientAuth. - ClientCAs *x509.CertPool - - // InsecureSkipVerify controls whether a client verifies the server's - // certificate chain and host name. If InsecureSkipVerify is true, crypto/tls - // accepts any certificate presented by the server and any host name in that - // certificate. In this mode, TLS is susceptible to machine-in-the-middle - // attacks unless custom verification is used. This should be used only for - // testing or in combination with VerifyConnection or VerifyPeerCertificate. - InsecureSkipVerify bool - - // CipherSuites is a list of enabled TLS 1.0–1.2 cipher suites. The order of - // the list is ignored. Note that TLS 1.3 ciphersuites are not configurable. - // - // If CipherSuites is nil, a safe default list is used. The default cipher - // suites might change over time. - CipherSuites []uint16 - - // PreferServerCipherSuites is a legacy field and has no effect. - // - // It used to control whether the server would follow the client's or the - // server's preference. Servers now select the best mutually supported - // cipher suite based on logic that takes into account inferred client - // hardware, server hardware, and security. - // - // Deprecated: PreferServerCipherSuites is ignored. - PreferServerCipherSuites bool - - // SessionTicketsDisabled may be set to true to disable session ticket and - // PSK (resumption) support. Note that on clients, session ticket support is - // also disabled if ClientSessionCache is nil. - SessionTicketsDisabled bool - - // SessionTicketKey is used by TLS servers to provide session resumption. - // See RFC 5077 and the PSK mode of RFC 8446. If zero, it will be filled - // with random data before the first server handshake. - // - // Deprecated: if this field is left at zero, session ticket keys will be - // automatically rotated every day and dropped after seven days. For - // customizing the rotation schedule or synchronizing servers that are - // terminating connections for the same host, use SetSessionTicketKeys. - SessionTicketKey [32]byte - - // ClientSessionCache is a cache of ClientSessionState entries for TLS - // session resumption. It is only used by clients. - ClientSessionCache ClientSessionCache - - // MinVersion contains the minimum TLS version that is acceptable. - // - // By default, TLS 1.2 is currently used as the minimum when acting as a - // client, and TLS 1.0 when acting as a server. TLS 1.0 is the minimum - // supported by this package, both as a client and as a server. - // - // The client-side default can temporarily be reverted to TLS 1.0 by - // including the value "x509sha1=1" in the GODEBUG environment variable. - // Note that this option will be removed in Go 1.19 (but it will still be - // possible to set this field to VersionTLS10 explicitly). - MinVersion uint16 - - // MaxVersion contains the maximum TLS version that is acceptable. - // - // By default, the maximum version supported by this package is used, - // which is currently TLS 1.3. - MaxVersion uint16 - - // CurvePreferences contains the elliptic curves that will be used in - // an ECDHE handshake, in preference order. If empty, the default will - // be used. The client will use the first preference as the type for - // its key share in TLS 1.3. This may change in the future. - CurvePreferences []CurveID - - // DynamicRecordSizingDisabled disables adaptive sizing of TLS records. - // When true, the largest possible TLS record size is always used. When - // false, the size of TLS records may be adjusted in an attempt to - // improve latency. - DynamicRecordSizingDisabled bool - - // Renegotiation controls what types of renegotiation are supported. - // The default, none, is correct for the vast majority of applications. - Renegotiation RenegotiationSupport - - // KeyLogWriter optionally specifies a destination for TLS master secrets - // in NSS key log format that can be used to allow external programs - // such as Wireshark to decrypt TLS connections. - // See https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format. - // Use of KeyLogWriter compromises security and should only be - // used for debugging. - KeyLogWriter io.Writer - - // mutex protects sessionTicketKeys and autoSessionTicketKeys. - mutex sync.RWMutex - // sessionTicketKeys contains zero or more ticket keys. If set, it means the - // the keys were set with SessionTicketKey or SetSessionTicketKeys. The - // first key is used for new tickets and any subsequent keys can be used to - // decrypt old tickets. The slice contents are not protected by the mutex - // and are immutable. - sessionTicketKeys []ticketKey - // autoSessionTicketKeys is like sessionTicketKeys but is owned by the - // auto-rotation logic. See Config.ticketKeys. - autoSessionTicketKeys []ticketKey -} - -// A RecordLayer handles encrypting and decrypting of TLS messages. -type RecordLayer interface { - SetReadKey(encLevel EncryptionLevel, suite *CipherSuiteTLS13, trafficSecret []byte) - SetWriteKey(encLevel EncryptionLevel, suite *CipherSuiteTLS13, trafficSecret []byte) - ReadHandshakeMessage() ([]byte, error) - WriteRecord([]byte) (int, error) - SendAlert(uint8) -} - -type ExtraConfig struct { - // GetExtensions, if not nil, is called before a message that allows - // sending of extensions is sent. - // Currently only implemented for the ClientHello message (for the client) - // and for the EncryptedExtensions message (for the server). - // Only valid for TLS 1.3. - GetExtensions func(handshakeMessageType uint8) []Extension - - // ReceivedExtensions, if not nil, is called when a message that allows the - // inclusion of extensions is received. - // It is called with an empty slice of extensions, if the message didn't - // contain any extensions. - // Currently only implemented for the ClientHello message (sent by the - // client) and for the EncryptedExtensions message (sent by the server). - // Only valid for TLS 1.3. - ReceivedExtensions func(handshakeMessageType uint8, exts []Extension) - - // AlternativeRecordLayer is used by QUIC - AlternativeRecordLayer RecordLayer - - // Enforce the selection of a supported application protocol. - // Only works for TLS 1.3. - // If enabled, client and server have to agree on an application protocol. - // Otherwise, connection establishment fails. - EnforceNextProtoSelection bool - - // If MaxEarlyData is greater than 0, the client will be allowed to send early - // data when resuming a session. - // Requires the AlternativeRecordLayer to be set. - // - // It has no meaning on the client. - MaxEarlyData uint32 - - // The Accept0RTT callback is called when the client offers 0-RTT. - // The server then has to decide if it wants to accept or reject 0-RTT. - // It is only used for servers. - Accept0RTT func(appData []byte) bool - - // 0RTTRejected is called when the server rejectes 0-RTT. - // It is only used for clients. - Rejected0RTT func() - - // If set, the client will export the 0-RTT key when resuming a session that - // allows sending of early data. - // Requires the AlternativeRecordLayer to be set. - // - // It has no meaning to the server. - Enable0RTT bool - - // Is called when the client saves a session ticket to the session ticket. - // This gives the application the opportunity to save some data along with the ticket, - // which can be restored when the session ticket is used. - GetAppDataForSessionState func() []byte - - // Is called when the client uses a session ticket. - // Restores the application data that was saved earlier on GetAppDataForSessionTicket. - SetAppDataFromSessionState func([]byte) -} - -// Clone clones. -func (c *ExtraConfig) Clone() *ExtraConfig { - return &ExtraConfig{ - GetExtensions: c.GetExtensions, - ReceivedExtensions: c.ReceivedExtensions, - AlternativeRecordLayer: c.AlternativeRecordLayer, - EnforceNextProtoSelection: c.EnforceNextProtoSelection, - MaxEarlyData: c.MaxEarlyData, - Enable0RTT: c.Enable0RTT, - Accept0RTT: c.Accept0RTT, - Rejected0RTT: c.Rejected0RTT, - GetAppDataForSessionState: c.GetAppDataForSessionState, - SetAppDataFromSessionState: c.SetAppDataFromSessionState, - } -} - -func (c *ExtraConfig) usesAlternativeRecordLayer() bool { - return c != nil && c.AlternativeRecordLayer != nil -} - -const ( - // ticketKeyNameLen is the number of bytes of identifier that is prepended to - // an encrypted session ticket in order to identify the key used to encrypt it. - ticketKeyNameLen = 16 - - // ticketKeyLifetime is how long a ticket key remains valid and can be used to - // resume a client connection. - ticketKeyLifetime = 7 * 24 * time.Hour // 7 days - - // ticketKeyRotation is how often the server should rotate the session ticket key - // that is used for new tickets. - ticketKeyRotation = 24 * time.Hour -) - -// ticketKey is the internal representation of a session ticket key. -type ticketKey struct { - // keyName is an opaque byte string that serves to identify the session - // ticket key. It's exposed as plaintext in every session ticket. - keyName [ticketKeyNameLen]byte - aesKey [16]byte - hmacKey [16]byte - // created is the time at which this ticket key was created. See Config.ticketKeys. - created time.Time -} - -// ticketKeyFromBytes converts from the external representation of a session -// ticket key to a ticketKey. Externally, session ticket keys are 32 random -// bytes and this function expands that into sufficient name and key material. -func (c *config) ticketKeyFromBytes(b [32]byte) (key ticketKey) { - hashed := sha512.Sum512(b[:]) - copy(key.keyName[:], hashed[:ticketKeyNameLen]) - copy(key.aesKey[:], hashed[ticketKeyNameLen:ticketKeyNameLen+16]) - copy(key.hmacKey[:], hashed[ticketKeyNameLen+16:ticketKeyNameLen+32]) - key.created = c.time() - return key -} - -// maxSessionTicketLifetime is the maximum allowed lifetime of a TLS 1.3 session -// ticket, and the lifetime we set for tickets we send. -const maxSessionTicketLifetime = 7 * 24 * time.Hour - -// Clone returns a shallow clone of c or nil if c is nil. It is safe to clone a Config that is -// being used concurrently by a TLS client or server. -func (c *config) Clone() *config { - if c == nil { - return nil - } - c.mutex.RLock() - defer c.mutex.RUnlock() - return &config{ - Rand: c.Rand, - Time: c.Time, - Certificates: c.Certificates, - NameToCertificate: c.NameToCertificate, - GetCertificate: c.GetCertificate, - GetClientCertificate: c.GetClientCertificate, - GetConfigForClient: c.GetConfigForClient, - VerifyPeerCertificate: c.VerifyPeerCertificate, - VerifyConnection: c.VerifyConnection, - RootCAs: c.RootCAs, - NextProtos: c.NextProtos, - ServerName: c.ServerName, - ClientAuth: c.ClientAuth, - ClientCAs: c.ClientCAs, - InsecureSkipVerify: c.InsecureSkipVerify, - CipherSuites: c.CipherSuites, - PreferServerCipherSuites: c.PreferServerCipherSuites, - SessionTicketsDisabled: c.SessionTicketsDisabled, - SessionTicketKey: c.SessionTicketKey, - ClientSessionCache: c.ClientSessionCache, - MinVersion: c.MinVersion, - MaxVersion: c.MaxVersion, - CurvePreferences: c.CurvePreferences, - DynamicRecordSizingDisabled: c.DynamicRecordSizingDisabled, - Renegotiation: c.Renegotiation, - KeyLogWriter: c.KeyLogWriter, - sessionTicketKeys: c.sessionTicketKeys, - autoSessionTicketKeys: c.autoSessionTicketKeys, - } -} - -// deprecatedSessionTicketKey is set as the prefix of SessionTicketKey if it was -// randomized for backwards compatibility but is not in use. -var deprecatedSessionTicketKey = []byte("DEPRECATED") - -// initLegacySessionTicketKeyRLocked ensures the legacy SessionTicketKey field is -// randomized if empty, and that sessionTicketKeys is populated from it otherwise. -func (c *config) initLegacySessionTicketKeyRLocked() { - // Don't write if SessionTicketKey is already defined as our deprecated string, - // or if it is defined by the user but sessionTicketKeys is already set. - if c.SessionTicketKey != [32]byte{} && - (bytes.HasPrefix(c.SessionTicketKey[:], deprecatedSessionTicketKey) || len(c.sessionTicketKeys) > 0) { - return - } - - // We need to write some data, so get an exclusive lock and re-check any conditions. - c.mutex.RUnlock() - defer c.mutex.RLock() - c.mutex.Lock() - defer c.mutex.Unlock() - if c.SessionTicketKey == [32]byte{} { - if _, err := io.ReadFull(c.rand(), c.SessionTicketKey[:]); err != nil { - panic(fmt.Sprintf("tls: unable to generate random session ticket key: %v", err)) - } - // Write the deprecated prefix at the beginning so we know we created - // it. This key with the DEPRECATED prefix isn't used as an actual - // session ticket key, and is only randomized in case the application - // reuses it for some reason. - copy(c.SessionTicketKey[:], deprecatedSessionTicketKey) - } else if !bytes.HasPrefix(c.SessionTicketKey[:], deprecatedSessionTicketKey) && len(c.sessionTicketKeys) == 0 { - c.sessionTicketKeys = []ticketKey{c.ticketKeyFromBytes(c.SessionTicketKey)} - } - -} - -// ticketKeys returns the ticketKeys for this connection. -// If configForClient has explicitly set keys, those will -// be returned. Otherwise, the keys on c will be used and -// may be rotated if auto-managed. -// During rotation, any expired session ticket keys are deleted from -// c.sessionTicketKeys. If the session ticket key that is currently -// encrypting tickets (ie. the first ticketKey in c.sessionTicketKeys) -// is not fresh, then a new session ticket key will be -// created and prepended to c.sessionTicketKeys. -func (c *config) ticketKeys(configForClient *config) []ticketKey { - // If the ConfigForClient callback returned a Config with explicitly set - // keys, use those, otherwise just use the original Config. - if configForClient != nil { - configForClient.mutex.RLock() - if configForClient.SessionTicketsDisabled { - return nil - } - configForClient.initLegacySessionTicketKeyRLocked() - if len(configForClient.sessionTicketKeys) != 0 { - ret := configForClient.sessionTicketKeys - configForClient.mutex.RUnlock() - return ret - } - configForClient.mutex.RUnlock() - } - - c.mutex.RLock() - defer c.mutex.RUnlock() - if c.SessionTicketsDisabled { - return nil - } - c.initLegacySessionTicketKeyRLocked() - if len(c.sessionTicketKeys) != 0 { - return c.sessionTicketKeys - } - // Fast path for the common case where the key is fresh enough. - if len(c.autoSessionTicketKeys) > 0 && c.time().Sub(c.autoSessionTicketKeys[0].created) < ticketKeyRotation { - return c.autoSessionTicketKeys - } - - // autoSessionTicketKeys are managed by auto-rotation. - c.mutex.RUnlock() - defer c.mutex.RLock() - c.mutex.Lock() - defer c.mutex.Unlock() - // Re-check the condition in case it changed since obtaining the new lock. - if len(c.autoSessionTicketKeys) == 0 || c.time().Sub(c.autoSessionTicketKeys[0].created) >= ticketKeyRotation { - var newKey [32]byte - if _, err := io.ReadFull(c.rand(), newKey[:]); err != nil { - panic(fmt.Sprintf("unable to generate random session ticket key: %v", err)) - } - valid := make([]ticketKey, 0, len(c.autoSessionTicketKeys)+1) - valid = append(valid, c.ticketKeyFromBytes(newKey)) - for _, k := range c.autoSessionTicketKeys { - // While rotating the current key, also remove any expired ones. - if c.time().Sub(k.created) < ticketKeyLifetime { - valid = append(valid, k) - } - } - c.autoSessionTicketKeys = valid - } - return c.autoSessionTicketKeys -} - -// SetSessionTicketKeys updates the session ticket keys for a server. -// -// The first key will be used when creating new tickets, while all keys can be -// used for decrypting tickets. It is safe to call this function while the -// server is running in order to rotate the session ticket keys. The function -// will panic if keys is empty. -// -// Calling this function will turn off automatic session ticket key rotation. -// -// If multiple servers are terminating connections for the same host they should -// all have the same session ticket keys. If the session ticket keys leaks, -// previously recorded and future TLS connections using those keys might be -// compromised. -func (c *config) SetSessionTicketKeys(keys [][32]byte) { - if len(keys) == 0 { - panic("tls: keys must have at least one key") - } - - newKeys := make([]ticketKey, len(keys)) - for i, bytes := range keys { - newKeys[i] = c.ticketKeyFromBytes(bytes) - } - - c.mutex.Lock() - c.sessionTicketKeys = newKeys - c.mutex.Unlock() -} - -func (c *config) rand() io.Reader { - r := c.Rand - if r == nil { - return rand.Reader - } - return r -} - -func (c *config) time() time.Time { - t := c.Time - if t == nil { - t = time.Now - } - return t() -} - -func (c *config) cipherSuites() []uint16 { - if c.CipherSuites != nil { - return c.CipherSuites - } - return defaultCipherSuites -} - -var supportedVersions = []uint16{ - VersionTLS13, - VersionTLS12, - VersionTLS11, - VersionTLS10, -} - -// debugEnableTLS10 enables TLS 1.0. See issue 45428. -// We don't care about TLS1.0 in qtls. Always disable it. -var debugEnableTLS10 = false - -// roleClient and roleServer are meant to call supportedVersions and parents -// with more readability at the callsite. -const roleClient = true -const roleServer = false - -func (c *config) supportedVersions(isClient bool) []uint16 { - versions := make([]uint16, 0, len(supportedVersions)) - for _, v := range supportedVersions { - if (c == nil || c.MinVersion == 0) && !debugEnableTLS10 && - isClient && v < VersionTLS12 { - continue - } - if c != nil && c.MinVersion != 0 && v < c.MinVersion { - continue - } - if c != nil && c.MaxVersion != 0 && v > c.MaxVersion { - continue - } - versions = append(versions, v) - } - return versions -} - -func (c *config) maxSupportedVersion(isClient bool) uint16 { - supportedVersions := c.supportedVersions(isClient) - if len(supportedVersions) == 0 { - return 0 - } - return supportedVersions[0] -} - -// supportedVersionsFromMax returns a list of supported versions derived from a -// legacy maximum version value. Note that only versions supported by this -// library are returned. Any newer peer will use supportedVersions anyway. -func supportedVersionsFromMax(maxVersion uint16) []uint16 { - versions := make([]uint16, 0, len(supportedVersions)) - for _, v := range supportedVersions { - if v > maxVersion { - continue - } - versions = append(versions, v) - } - return versions -} - -var defaultCurvePreferences = []CurveID{X25519, CurveP256, CurveP384, CurveP521} - -func (c *config) curvePreferences() []CurveID { - if c == nil || len(c.CurvePreferences) == 0 { - return defaultCurvePreferences - } - return c.CurvePreferences -} - -func (c *config) supportsCurve(curve CurveID) bool { - for _, cc := range c.curvePreferences() { - if cc == curve { - return true - } - } - return false -} - -// mutualVersion returns the protocol version to use given the advertised -// versions of the peer. Priority is given to the peer preference order. -func (c *config) mutualVersion(isClient bool, peerVersions []uint16) (uint16, bool) { - supportedVersions := c.supportedVersions(isClient) - for _, peerVersion := range peerVersions { - for _, v := range supportedVersions { - if v == peerVersion { - return v, true - } - } - } - return 0, false -} - -var errNoCertificates = errors.New("tls: no certificates configured") - -// getCertificate returns the best certificate for the given ClientHelloInfo, -// defaulting to the first element of c.Certificates. -func (c *config) getCertificate(clientHello *ClientHelloInfo) (*Certificate, error) { - if c.GetCertificate != nil && - (len(c.Certificates) == 0 || len(clientHello.ServerName) > 0) { - cert, err := c.GetCertificate(clientHello) - if cert != nil || err != nil { - return cert, err - } - } - - if len(c.Certificates) == 0 { - return nil, errNoCertificates - } - - if len(c.Certificates) == 1 { - // There's only one choice, so no point doing any work. - return &c.Certificates[0], nil - } - - if c.NameToCertificate != nil { - name := strings.ToLower(clientHello.ServerName) - if cert, ok := c.NameToCertificate[name]; ok { - return cert, nil - } - if len(name) > 0 { - labels := strings.Split(name, ".") - labels[0] = "*" - wildcardName := strings.Join(labels, ".") - if cert, ok := c.NameToCertificate[wildcardName]; ok { - return cert, nil - } - } - } - - for _, cert := range c.Certificates { - if err := clientHello.SupportsCertificate(&cert); err == nil { - return &cert, nil - } - } - - // If nothing matches, return the first certificate. - return &c.Certificates[0], nil -} - -// SupportsCertificate returns nil if the provided certificate is supported by -// the client that sent the ClientHello. Otherwise, it returns an error -// describing the reason for the incompatibility. -// -// If this ClientHelloInfo was passed to a GetConfigForClient or GetCertificate -// callback, this method will take into account the associated Config. Note that -// if GetConfigForClient returns a different Config, the change can't be -// accounted for by this method. -// -// This function will call x509.ParseCertificate unless c.Leaf is set, which can -// incur a significant performance cost. -func (chi *clientHelloInfo) SupportsCertificate(c *Certificate) error { - // Note we don't currently support certificate_authorities nor - // signature_algorithms_cert, and don't check the algorithms of the - // signatures on the chain (which anyway are a SHOULD, see RFC 8446, - // Section 4.4.2.2). - - config := chi.config - if config == nil { - config = &Config{} - } - conf := fromConfig(config) - vers, ok := conf.mutualVersion(roleServer, chi.SupportedVersions) - if !ok { - return errors.New("no mutually supported protocol versions") - } - - // If the client specified the name they are trying to connect to, the - // certificate needs to be valid for it. - if chi.ServerName != "" { - x509Cert, err := leafCertificate(c) - if err != nil { - return fmt.Errorf("failed to parse certificate: %w", err) - } - if err := x509Cert.VerifyHostname(chi.ServerName); err != nil { - return fmt.Errorf("certificate is not valid for requested server name: %w", err) - } - } - - // supportsRSAFallback returns nil if the certificate and connection support - // the static RSA key exchange, and unsupported otherwise. The logic for - // supporting static RSA is completely disjoint from the logic for - // supporting signed key exchanges, so we just check it as a fallback. - supportsRSAFallback := func(unsupported error) error { - // TLS 1.3 dropped support for the static RSA key exchange. - if vers == VersionTLS13 { - return unsupported - } - // The static RSA key exchange works by decrypting a challenge with the - // RSA private key, not by signing, so check the PrivateKey implements - // crypto.Decrypter, like *rsa.PrivateKey does. - if priv, ok := c.PrivateKey.(crypto.Decrypter); ok { - if _, ok := priv.Public().(*rsa.PublicKey); !ok { - return unsupported - } - } else { - return unsupported - } - // Finally, there needs to be a mutual cipher suite that uses the static - // RSA key exchange instead of ECDHE. - rsaCipherSuite := selectCipherSuite(chi.CipherSuites, conf.cipherSuites(), func(c *cipherSuite) bool { - if c.flags&suiteECDHE != 0 { - return false - } - if vers < VersionTLS12 && c.flags&suiteTLS12 != 0 { - return false - } - return true - }) - if rsaCipherSuite == nil { - return unsupported - } - return nil - } - - // If the client sent the signature_algorithms extension, ensure it supports - // schemes we can use with this certificate and TLS version. - if len(chi.SignatureSchemes) > 0 { - if _, err := selectSignatureScheme(vers, c, chi.SignatureSchemes); err != nil { - return supportsRSAFallback(err) - } - } - - // In TLS 1.3 we are done because supported_groups is only relevant to the - // ECDHE computation, point format negotiation is removed, cipher suites are - // only relevant to the AEAD choice, and static RSA does not exist. - if vers == VersionTLS13 { - return nil - } - - // The only signed key exchange we support is ECDHE. - if !supportsECDHE(conf, chi.SupportedCurves, chi.SupportedPoints) { - return supportsRSAFallback(errors.New("client doesn't support ECDHE, can only use legacy RSA key exchange")) - } - - var ecdsaCipherSuite bool - if priv, ok := c.PrivateKey.(crypto.Signer); ok { - switch pub := priv.Public().(type) { - case *ecdsa.PublicKey: - var curve CurveID - switch pub.Curve { - case elliptic.P256(): - curve = CurveP256 - case elliptic.P384(): - curve = CurveP384 - case elliptic.P521(): - curve = CurveP521 - default: - return supportsRSAFallback(unsupportedCertificateError(c)) - } - var curveOk bool - for _, c := range chi.SupportedCurves { - if c == curve && conf.supportsCurve(c) { - curveOk = true - break - } - } - if !curveOk { - return errors.New("client doesn't support certificate curve") - } - ecdsaCipherSuite = true - case ed25519.PublicKey: - if vers < VersionTLS12 || len(chi.SignatureSchemes) == 0 { - return errors.New("connection doesn't support Ed25519") - } - ecdsaCipherSuite = true - case *rsa.PublicKey: - default: - return supportsRSAFallback(unsupportedCertificateError(c)) - } - } else { - return supportsRSAFallback(unsupportedCertificateError(c)) - } - - // Make sure that there is a mutually supported cipher suite that works with - // this certificate. Cipher suite selection will then apply the logic in - // reverse to pick it. See also serverHandshakeState.cipherSuiteOk. - cipherSuite := selectCipherSuite(chi.CipherSuites, conf.cipherSuites(), func(c *cipherSuite) bool { - if c.flags&suiteECDHE == 0 { - return false - } - if c.flags&suiteECSign != 0 { - if !ecdsaCipherSuite { - return false - } - } else { - if ecdsaCipherSuite { - return false - } - } - if vers < VersionTLS12 && c.flags&suiteTLS12 != 0 { - return false - } - return true - }) - if cipherSuite == nil { - return supportsRSAFallback(errors.New("client doesn't support any cipher suites compatible with the certificate")) - } - - return nil -} - -// BuildNameToCertificate parses c.Certificates and builds c.NameToCertificate -// from the CommonName and SubjectAlternateName fields of each of the leaf -// certificates. -// -// Deprecated: NameToCertificate only allows associating a single certificate -// with a given name. Leave that field nil to let the library select the first -// compatible chain from Certificates. -func (c *config) BuildNameToCertificate() { - c.NameToCertificate = make(map[string]*Certificate) - for i := range c.Certificates { - cert := &c.Certificates[i] - x509Cert, err := leafCertificate(cert) - if err != nil { - continue - } - // If SANs are *not* present, some clients will consider the certificate - // valid for the name in the Common Name. - if x509Cert.Subject.CommonName != "" && len(x509Cert.DNSNames) == 0 { - c.NameToCertificate[x509Cert.Subject.CommonName] = cert - } - for _, san := range x509Cert.DNSNames { - c.NameToCertificate[san] = cert - } - } -} - -const ( - keyLogLabelTLS12 = "CLIENT_RANDOM" - keyLogLabelEarlyTraffic = "CLIENT_EARLY_TRAFFIC_SECRET" - keyLogLabelClientHandshake = "CLIENT_HANDSHAKE_TRAFFIC_SECRET" - keyLogLabelServerHandshake = "SERVER_HANDSHAKE_TRAFFIC_SECRET" - keyLogLabelClientTraffic = "CLIENT_TRAFFIC_SECRET_0" - keyLogLabelServerTraffic = "SERVER_TRAFFIC_SECRET_0" -) - -func (c *config) writeKeyLog(label string, clientRandom, secret []byte) error { - if c.KeyLogWriter == nil { - return nil - } - - logLine := []byte(fmt.Sprintf("%s %x %x\n", label, clientRandom, secret)) - - writerMutex.Lock() - _, err := c.KeyLogWriter.Write(logLine) - writerMutex.Unlock() - - return err -} - -// writerMutex protects all KeyLogWriters globally. It is rarely enabled, -// and is only for debugging, so a global mutex saves space. -var writerMutex sync.Mutex - -// A Certificate is a chain of one or more certificates, leaf first. -type Certificate = tls.Certificate - -// leaf returns the parsed leaf certificate, either from c.Leaf or by parsing -// the corresponding c.Certificate[0]. -func leafCertificate(c *Certificate) (*x509.Certificate, error) { - if c.Leaf != nil { - return c.Leaf, nil - } - return x509.ParseCertificate(c.Certificate[0]) -} - -type handshakeMessage interface { - marshal() []byte - unmarshal([]byte) bool -} - -// lruSessionCache is a ClientSessionCache implementation that uses an LRU -// caching strategy. -type lruSessionCache struct { - sync.Mutex - - m map[string]*list.Element - q *list.List - capacity int -} - -type lruSessionCacheEntry struct { - sessionKey string - state *ClientSessionState -} - -// NewLRUClientSessionCache returns a ClientSessionCache with the given -// capacity that uses an LRU strategy. If capacity is < 1, a default capacity -// is used instead. -func NewLRUClientSessionCache(capacity int) ClientSessionCache { - const defaultSessionCacheCapacity = 64 - - if capacity < 1 { - capacity = defaultSessionCacheCapacity - } - return &lruSessionCache{ - m: make(map[string]*list.Element), - q: list.New(), - capacity: capacity, - } -} - -// Put adds the provided (sessionKey, cs) pair to the cache. If cs is nil, the entry -// corresponding to sessionKey is removed from the cache instead. -func (c *lruSessionCache) Put(sessionKey string, cs *ClientSessionState) { - c.Lock() - defer c.Unlock() - - if elem, ok := c.m[sessionKey]; ok { - if cs == nil { - c.q.Remove(elem) - delete(c.m, sessionKey) - } else { - entry := elem.Value.(*lruSessionCacheEntry) - entry.state = cs - c.q.MoveToFront(elem) - } - return - } - - if c.q.Len() < c.capacity { - entry := &lruSessionCacheEntry{sessionKey, cs} - c.m[sessionKey] = c.q.PushFront(entry) - return - } - - elem := c.q.Back() - entry := elem.Value.(*lruSessionCacheEntry) - delete(c.m, entry.sessionKey) - entry.sessionKey = sessionKey - entry.state = cs - c.q.MoveToFront(elem) - c.m[sessionKey] = elem -} - -// Get returns the ClientSessionState value associated with a given key. It -// returns (nil, false) if no value is found. -func (c *lruSessionCache) Get(sessionKey string) (*ClientSessionState, bool) { - c.Lock() - defer c.Unlock() - - if elem, ok := c.m[sessionKey]; ok { - c.q.MoveToFront(elem) - return elem.Value.(*lruSessionCacheEntry).state, true - } - return nil, false -} - -var emptyConfig Config - -func defaultConfig() *Config { - return &emptyConfig -} - -func unexpectedMessageError(wanted, got any) error { - return fmt.Errorf("tls: received unexpected handshake message of type %T when waiting for %T", got, wanted) -} - -func isSupportedSignatureAlgorithm(sigAlg SignatureScheme, supportedSignatureAlgorithms []SignatureScheme) bool { - for _, s := range supportedSignatureAlgorithms { - if s == sigAlg { - return true - } - } - return false -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/conn.go b/vendor/github.com/quic-go/qtls-go1-18/conn.go deleted file mode 100644 index 2b8c7307e9..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/conn.go +++ /dev/null @@ -1,1617 +0,0 @@ -// Copyright 2010 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. - -// TLS low level connection and record layer - -package qtls - -import ( - "bytes" - "context" - "crypto/cipher" - "crypto/subtle" - "crypto/x509" - "errors" - "fmt" - "hash" - "io" - "net" - "sync" - "sync/atomic" - "time" -) - -// A Conn represents a secured connection. -// It implements the net.Conn interface. -type Conn struct { - // constant - conn net.Conn - isClient bool - handshakeFn func(context.Context) error // (*Conn).clientHandshake or serverHandshake - - // handshakeStatus is 1 if the connection is currently transferring - // application data (i.e. is not currently processing a handshake). - // handshakeStatus == 1 implies handshakeErr == nil. - // This field is only to be accessed with sync/atomic. - handshakeStatus uint32 - // constant after handshake; protected by handshakeMutex - handshakeMutex sync.Mutex - handshakeErr error // error resulting from handshake - vers uint16 // TLS version - haveVers bool // version has been negotiated - config *config // configuration passed to constructor - // handshakes counts the number of handshakes performed on the - // connection so far. If renegotiation is disabled then this is either - // zero or one. - extraConfig *ExtraConfig - - handshakes int - didResume bool // whether this connection was a session resumption - cipherSuite uint16 - ocspResponse []byte // stapled OCSP response - scts [][]byte // signed certificate timestamps from server - peerCertificates []*x509.Certificate - // verifiedChains contains the certificate chains that we built, as - // opposed to the ones presented by the server. - verifiedChains [][]*x509.Certificate - // serverName contains the server name indicated by the client, if any. - serverName string - // secureRenegotiation is true if the server echoed the secure - // renegotiation extension. (This is meaningless as a server because - // renegotiation is not supported in that case.) - secureRenegotiation bool - // ekm is a closure for exporting keying material. - ekm func(label string, context []byte, length int) ([]byte, error) - // For the client: - // resumptionSecret is the resumption_master_secret for handling - // NewSessionTicket messages. nil if config.SessionTicketsDisabled. - // For the server: - // resumptionSecret is the resumption_master_secret for generating - // NewSessionTicket messages. Only used when the alternative record - // layer is set. nil if config.SessionTicketsDisabled. - resumptionSecret []byte - - // ticketKeys is the set of active session ticket keys for this - // connection. The first one is used to encrypt new tickets and - // all are tried to decrypt tickets. - ticketKeys []ticketKey - - // clientFinishedIsFirst is true if the client sent the first Finished - // message during the most recent handshake. This is recorded because - // the first transmitted Finished message is the tls-unique - // channel-binding value. - clientFinishedIsFirst bool - - // closeNotifyErr is any error from sending the alertCloseNotify record. - closeNotifyErr error - // closeNotifySent is true if the Conn attempted to send an - // alertCloseNotify record. - closeNotifySent bool - - // clientFinished and serverFinished contain the Finished message sent - // by the client or server in the most recent handshake. This is - // retained to support the renegotiation extension and tls-unique - // channel-binding. - clientFinished [12]byte - serverFinished [12]byte - - // clientProtocol is the negotiated ALPN protocol. - clientProtocol string - - // input/output - in, out halfConn - rawInput bytes.Buffer // raw input, starting with a record header - input bytes.Reader // application data waiting to be read, from rawInput.Next - hand bytes.Buffer // handshake data waiting to be read - buffering bool // whether records are buffered in sendBuf - sendBuf []byte // a buffer of records waiting to be sent - - // bytesSent counts the bytes of application data sent. - // packetsSent counts packets. - bytesSent int64 - packetsSent int64 - - // retryCount counts the number of consecutive non-advancing records - // received by Conn.readRecord. That is, records that neither advance the - // handshake, nor deliver application data. Protected by in.Mutex. - retryCount int - - // activeCall is an atomic int32; the low bit is whether Close has - // been called. the rest of the bits are the number of goroutines - // in Conn.Write. - activeCall int32 - - used0RTT bool - - tmp [16]byte - - connStateMutex sync.Mutex - connState ConnectionStateWith0RTT -} - -// Access to net.Conn methods. -// Cannot just embed net.Conn because that would -// export the struct field too. - -// LocalAddr returns the local network address. -func (c *Conn) LocalAddr() net.Addr { - return c.conn.LocalAddr() -} - -// RemoteAddr returns the remote network address. -func (c *Conn) RemoteAddr() net.Addr { - return c.conn.RemoteAddr() -} - -// SetDeadline sets the read and write deadlines associated with the connection. -// A zero value for t means Read and Write will not time out. -// After a Write has timed out, the TLS state is corrupt and all future writes will return the same error. -func (c *Conn) SetDeadline(t time.Time) error { - return c.conn.SetDeadline(t) -} - -// SetReadDeadline sets the read deadline on the underlying connection. -// A zero value for t means Read will not time out. -func (c *Conn) SetReadDeadline(t time.Time) error { - return c.conn.SetReadDeadline(t) -} - -// SetWriteDeadline sets the write deadline on the underlying connection. -// A zero value for t means Write will not time out. -// After a Write has timed out, the TLS state is corrupt and all future writes will return the same error. -func (c *Conn) SetWriteDeadline(t time.Time) error { - return c.conn.SetWriteDeadline(t) -} - -// NetConn returns the underlying connection that is wrapped by c. -// Note that writing to or reading from this connection directly will corrupt the -// TLS session. -func (c *Conn) NetConn() net.Conn { - return c.conn -} - -// A halfConn represents one direction of the record layer -// connection, either sending or receiving. -type halfConn struct { - sync.Mutex - - err error // first permanent error - version uint16 // protocol version - cipher any // cipher algorithm - mac hash.Hash - seq [8]byte // 64-bit sequence number - - scratchBuf [13]byte // to avoid allocs; interface method args escape - - nextCipher any // next encryption state - nextMac hash.Hash // next MAC algorithm - - trafficSecret []byte // current TLS 1.3 traffic secret - - setKeyCallback func(encLevel EncryptionLevel, suite *CipherSuiteTLS13, trafficSecret []byte) -} - -type permanentError struct { - err net.Error -} - -func (e *permanentError) Error() string { return e.err.Error() } -func (e *permanentError) Unwrap() error { return e.err } -func (e *permanentError) Timeout() bool { return e.err.Timeout() } -func (e *permanentError) Temporary() bool { return false } - -func (hc *halfConn) setErrorLocked(err error) error { - if e, ok := err.(net.Error); ok { - hc.err = &permanentError{err: e} - } else { - hc.err = err - } - return hc.err -} - -// prepareCipherSpec sets the encryption and MAC states -// that a subsequent changeCipherSpec will use. -func (hc *halfConn) prepareCipherSpec(version uint16, cipher any, mac hash.Hash) { - hc.version = version - hc.nextCipher = cipher - hc.nextMac = mac -} - -// changeCipherSpec changes the encryption and MAC states -// to the ones previously passed to prepareCipherSpec. -func (hc *halfConn) changeCipherSpec() error { - if hc.nextCipher == nil || hc.version == VersionTLS13 { - return alertInternalError - } - hc.cipher = hc.nextCipher - hc.mac = hc.nextMac - hc.nextCipher = nil - hc.nextMac = nil - for i := range hc.seq { - hc.seq[i] = 0 - } - return nil -} - -func (hc *halfConn) exportKey(encLevel EncryptionLevel, suite *cipherSuiteTLS13, trafficSecret []byte) { - if hc.setKeyCallback != nil { - s := &CipherSuiteTLS13{ - ID: suite.id, - KeyLen: suite.keyLen, - Hash: suite.hash, - AEAD: func(key, fixedNonce []byte) cipher.AEAD { return suite.aead(key, fixedNonce) }, - } - hc.setKeyCallback(encLevel, s, trafficSecret) - } -} - -func (hc *halfConn) setTrafficSecret(suite *cipherSuiteTLS13, secret []byte) { - hc.trafficSecret = secret - key, iv := suite.trafficKey(secret) - hc.cipher = suite.aead(key, iv) - for i := range hc.seq { - hc.seq[i] = 0 - } -} - -// incSeq increments the sequence number. -func (hc *halfConn) incSeq() { - for i := 7; i >= 0; i-- { - hc.seq[i]++ - if hc.seq[i] != 0 { - return - } - } - - // Not allowed to let sequence number wrap. - // Instead, must renegotiate before it does. - // Not likely enough to bother. - panic("TLS: sequence number wraparound") -} - -// explicitNonceLen returns the number of bytes of explicit nonce or IV included -// in each record. Explicit nonces are present only in CBC modes after TLS 1.0 -// and in certain AEAD modes in TLS 1.2. -func (hc *halfConn) explicitNonceLen() int { - if hc.cipher == nil { - return 0 - } - - switch c := hc.cipher.(type) { - case cipher.Stream: - return 0 - case aead: - return c.explicitNonceLen() - case cbcMode: - // TLS 1.1 introduced a per-record explicit IV to fix the BEAST attack. - if hc.version >= VersionTLS11 { - return c.BlockSize() - } - return 0 - default: - panic("unknown cipher type") - } -} - -// extractPadding returns, in constant time, the length of the padding to remove -// from the end of payload. It also returns a byte which is equal to 255 if the -// padding was valid and 0 otherwise. See RFC 2246, Section 6.2.3.2. -func extractPadding(payload []byte) (toRemove int, good byte) { - if len(payload) < 1 { - return 0, 0 - } - - paddingLen := payload[len(payload)-1] - t := uint(len(payload)-1) - uint(paddingLen) - // if len(payload) >= (paddingLen - 1) then the MSB of t is zero - good = byte(int32(^t) >> 31) - - // The maximum possible padding length plus the actual length field - toCheck := 256 - // The length of the padded data is public, so we can use an if here - if toCheck > len(payload) { - toCheck = len(payload) - } - - for i := 0; i < toCheck; i++ { - t := uint(paddingLen) - uint(i) - // if i <= paddingLen then the MSB of t is zero - mask := byte(int32(^t) >> 31) - b := payload[len(payload)-1-i] - good &^= mask&paddingLen ^ mask&b - } - - // We AND together the bits of good and replicate the result across - // all the bits. - good &= good << 4 - good &= good << 2 - good &= good << 1 - good = uint8(int8(good) >> 7) - - // Zero the padding length on error. This ensures any unchecked bytes - // are included in the MAC. Otherwise, an attacker that could - // distinguish MAC failures from padding failures could mount an attack - // similar to POODLE in SSL 3.0: given a good ciphertext that uses a - // full block's worth of padding, replace the final block with another - // block. If the MAC check passed but the padding check failed, the - // last byte of that block decrypted to the block size. - // - // See also macAndPaddingGood logic below. - paddingLen &= good - - toRemove = int(paddingLen) + 1 - return -} - -func roundUp(a, b int) int { - return a + (b-a%b)%b -} - -// cbcMode is an interface for block ciphers using cipher block chaining. -type cbcMode interface { - cipher.BlockMode - SetIV([]byte) -} - -// decrypt authenticates and decrypts the record if protection is active at -// this stage. The returned plaintext might overlap with the input. -func (hc *halfConn) decrypt(record []byte) ([]byte, recordType, error) { - var plaintext []byte - typ := recordType(record[0]) - payload := record[recordHeaderLen:] - - // In TLS 1.3, change_cipher_spec messages are to be ignored without being - // decrypted. See RFC 8446, Appendix D.4. - if hc.version == VersionTLS13 && typ == recordTypeChangeCipherSpec { - return payload, typ, nil - } - - paddingGood := byte(255) - paddingLen := 0 - - explicitNonceLen := hc.explicitNonceLen() - - if hc.cipher != nil { - switch c := hc.cipher.(type) { - case cipher.Stream: - c.XORKeyStream(payload, payload) - case aead: - if len(payload) < explicitNonceLen { - return nil, 0, alertBadRecordMAC - } - nonce := payload[:explicitNonceLen] - if len(nonce) == 0 { - nonce = hc.seq[:] - } - payload = payload[explicitNonceLen:] - - var additionalData []byte - if hc.version == VersionTLS13 { - additionalData = record[:recordHeaderLen] - } else { - additionalData = append(hc.scratchBuf[:0], hc.seq[:]...) - additionalData = append(additionalData, record[:3]...) - n := len(payload) - c.Overhead() - additionalData = append(additionalData, byte(n>>8), byte(n)) - } - - var err error - plaintext, err = c.Open(payload[:0], nonce, payload, additionalData) - if err != nil { - return nil, 0, alertBadRecordMAC - } - case cbcMode: - blockSize := c.BlockSize() - minPayload := explicitNonceLen + roundUp(hc.mac.Size()+1, blockSize) - if len(payload)%blockSize != 0 || len(payload) < minPayload { - return nil, 0, alertBadRecordMAC - } - - if explicitNonceLen > 0 { - c.SetIV(payload[:explicitNonceLen]) - payload = payload[explicitNonceLen:] - } - c.CryptBlocks(payload, payload) - - // In a limited attempt to protect against CBC padding oracles like - // Lucky13, the data past paddingLen (which is secret) is passed to - // the MAC function as extra data, to be fed into the HMAC after - // computing the digest. This makes the MAC roughly constant time as - // long as the digest computation is constant time and does not - // affect the subsequent write, modulo cache effects. - paddingLen, paddingGood = extractPadding(payload) - default: - panic("unknown cipher type") - } - - if hc.version == VersionTLS13 { - if typ != recordTypeApplicationData { - return nil, 0, alertUnexpectedMessage - } - if len(plaintext) > maxPlaintext+1 { - return nil, 0, alertRecordOverflow - } - // Remove padding and find the ContentType scanning from the end. - for i := len(plaintext) - 1; i >= 0; i-- { - if plaintext[i] != 0 { - typ = recordType(plaintext[i]) - plaintext = plaintext[:i] - break - } - if i == 0 { - return nil, 0, alertUnexpectedMessage - } - } - } - } else { - plaintext = payload - } - - if hc.mac != nil { - macSize := hc.mac.Size() - if len(payload) < macSize { - return nil, 0, alertBadRecordMAC - } - - n := len(payload) - macSize - paddingLen - n = subtle.ConstantTimeSelect(int(uint32(n)>>31), 0, n) // if n < 0 { n = 0 } - record[3] = byte(n >> 8) - record[4] = byte(n) - remoteMAC := payload[n : n+macSize] - localMAC := tls10MAC(hc.mac, hc.scratchBuf[:0], hc.seq[:], record[:recordHeaderLen], payload[:n], payload[n+macSize:]) - - // This is equivalent to checking the MACs and paddingGood - // separately, but in constant-time to prevent distinguishing - // padding failures from MAC failures. Depending on what value - // of paddingLen was returned on bad padding, distinguishing - // bad MAC from bad padding can lead to an attack. - // - // See also the logic at the end of extractPadding. - macAndPaddingGood := subtle.ConstantTimeCompare(localMAC, remoteMAC) & int(paddingGood) - if macAndPaddingGood != 1 { - return nil, 0, alertBadRecordMAC - } - - plaintext = payload[:n] - } - - hc.incSeq() - return plaintext, typ, nil -} - -func (c *Conn) setAlternativeRecordLayer() { - if c.extraConfig != nil && c.extraConfig.AlternativeRecordLayer != nil { - c.in.setKeyCallback = c.extraConfig.AlternativeRecordLayer.SetReadKey - c.out.setKeyCallback = c.extraConfig.AlternativeRecordLayer.SetWriteKey - } -} - -// sliceForAppend extends the input slice by n bytes. head is the full extended -// slice, while tail is the appended part. If the original slice has sufficient -// capacity no allocation is performed. -func sliceForAppend(in []byte, n int) (head, tail []byte) { - if total := len(in) + n; cap(in) >= total { - head = in[:total] - } else { - head = make([]byte, total) - copy(head, in) - } - tail = head[len(in):] - return -} - -// encrypt encrypts payload, adding the appropriate nonce and/or MAC, and -// appends it to record, which must already contain the record header. -func (hc *halfConn) encrypt(record, payload []byte, rand io.Reader) ([]byte, error) { - if hc.cipher == nil { - return append(record, payload...), nil - } - - var explicitNonce []byte - if explicitNonceLen := hc.explicitNonceLen(); explicitNonceLen > 0 { - record, explicitNonce = sliceForAppend(record, explicitNonceLen) - if _, isCBC := hc.cipher.(cbcMode); !isCBC && explicitNonceLen < 16 { - // The AES-GCM construction in TLS has an explicit nonce so that the - // nonce can be random. However, the nonce is only 8 bytes which is - // too small for a secure, random nonce. Therefore we use the - // sequence number as the nonce. The 3DES-CBC construction also has - // an 8 bytes nonce but its nonces must be unpredictable (see RFC - // 5246, Appendix F.3), forcing us to use randomness. That's not - // 3DES' biggest problem anyway because the birthday bound on block - // collision is reached first due to its similarly small block size - // (see the Sweet32 attack). - copy(explicitNonce, hc.seq[:]) - } else { - if _, err := io.ReadFull(rand, explicitNonce); err != nil { - return nil, err - } - } - } - - var dst []byte - switch c := hc.cipher.(type) { - case cipher.Stream: - mac := tls10MAC(hc.mac, hc.scratchBuf[:0], hc.seq[:], record[:recordHeaderLen], payload, nil) - record, dst = sliceForAppend(record, len(payload)+len(mac)) - c.XORKeyStream(dst[:len(payload)], payload) - c.XORKeyStream(dst[len(payload):], mac) - case aead: - nonce := explicitNonce - if len(nonce) == 0 { - nonce = hc.seq[:] - } - - if hc.version == VersionTLS13 { - record = append(record, payload...) - - // Encrypt the actual ContentType and replace the plaintext one. - record = append(record, record[0]) - record[0] = byte(recordTypeApplicationData) - - n := len(payload) + 1 + c.Overhead() - record[3] = byte(n >> 8) - record[4] = byte(n) - - record = c.Seal(record[:recordHeaderLen], - nonce, record[recordHeaderLen:], record[:recordHeaderLen]) - } else { - additionalData := append(hc.scratchBuf[:0], hc.seq[:]...) - additionalData = append(additionalData, record[:recordHeaderLen]...) - record = c.Seal(record, nonce, payload, additionalData) - } - case cbcMode: - mac := tls10MAC(hc.mac, hc.scratchBuf[:0], hc.seq[:], record[:recordHeaderLen], payload, nil) - blockSize := c.BlockSize() - plaintextLen := len(payload) + len(mac) - paddingLen := blockSize - plaintextLen%blockSize - record, dst = sliceForAppend(record, plaintextLen+paddingLen) - copy(dst, payload) - copy(dst[len(payload):], mac) - for i := plaintextLen; i < len(dst); i++ { - dst[i] = byte(paddingLen - 1) - } - if len(explicitNonce) > 0 { - c.SetIV(explicitNonce) - } - c.CryptBlocks(dst, dst) - default: - panic("unknown cipher type") - } - - // Update length to include nonce, MAC and any block padding needed. - n := len(record) - recordHeaderLen - record[3] = byte(n >> 8) - record[4] = byte(n) - hc.incSeq() - - return record, nil -} - -// RecordHeaderError is returned when a TLS record header is invalid. -type RecordHeaderError struct { - // Msg contains a human readable string that describes the error. - Msg string - // RecordHeader contains the five bytes of TLS record header that - // triggered the error. - RecordHeader [5]byte - // Conn provides the underlying net.Conn in the case that a client - // sent an initial handshake that didn't look like TLS. - // It is nil if there's already been a handshake or a TLS alert has - // been written to the connection. - Conn net.Conn -} - -func (e RecordHeaderError) Error() string { return "tls: " + e.Msg } - -func (c *Conn) newRecordHeaderError(conn net.Conn, msg string) (err RecordHeaderError) { - err.Msg = msg - err.Conn = conn - copy(err.RecordHeader[:], c.rawInput.Bytes()) - return err -} - -func (c *Conn) readRecord() error { - return c.readRecordOrCCS(false) -} - -func (c *Conn) readChangeCipherSpec() error { - return c.readRecordOrCCS(true) -} - -// readRecordOrCCS reads one or more TLS records from the connection and -// updates the record layer state. Some invariants: -// * c.in must be locked -// * c.input must be empty -// During the handshake one and only one of the following will happen: -// - c.hand grows -// - c.in.changeCipherSpec is called -// - an error is returned -// After the handshake one and only one of the following will happen: -// - c.hand grows -// - c.input is set -// - an error is returned -func (c *Conn) readRecordOrCCS(expectChangeCipherSpec bool) error { - if c.in.err != nil { - return c.in.err - } - handshakeComplete := c.handshakeComplete() - - // This function modifies c.rawInput, which owns the c.input memory. - if c.input.Len() != 0 { - return c.in.setErrorLocked(errors.New("tls: internal error: attempted to read record with pending application data")) - } - c.input.Reset(nil) - - // Read header, payload. - if err := c.readFromUntil(c.conn, recordHeaderLen); err != nil { - // RFC 8446, Section 6.1 suggests that EOF without an alertCloseNotify - // is an error, but popular web sites seem to do this, so we accept it - // if and only if at the record boundary. - if err == io.ErrUnexpectedEOF && c.rawInput.Len() == 0 { - err = io.EOF - } - if e, ok := err.(net.Error); !ok || !e.Temporary() { - c.in.setErrorLocked(err) - } - return err - } - hdr := c.rawInput.Bytes()[:recordHeaderLen] - typ := recordType(hdr[0]) - - // No valid TLS record has a type of 0x80, however SSLv2 handshakes - // start with a uint16 length where the MSB is set and the first record - // is always < 256 bytes long. Therefore typ == 0x80 strongly suggests - // an SSLv2 client. - if !handshakeComplete && typ == 0x80 { - c.sendAlert(alertProtocolVersion) - return c.in.setErrorLocked(c.newRecordHeaderError(nil, "unsupported SSLv2 handshake received")) - } - - vers := uint16(hdr[1])<<8 | uint16(hdr[2]) - n := int(hdr[3])<<8 | int(hdr[4]) - if c.haveVers && c.vers != VersionTLS13 && vers != c.vers { - c.sendAlert(alertProtocolVersion) - msg := fmt.Sprintf("received record with version %x when expecting version %x", vers, c.vers) - return c.in.setErrorLocked(c.newRecordHeaderError(nil, msg)) - } - if !c.haveVers { - // First message, be extra suspicious: this might not be a TLS - // client. Bail out before reading a full 'body', if possible. - // The current max version is 3.3 so if the version is >= 16.0, - // it's probably not real. - if (typ != recordTypeAlert && typ != recordTypeHandshake) || vers >= 0x1000 { - return c.in.setErrorLocked(c.newRecordHeaderError(c.conn, "first record does not look like a TLS handshake")) - } - } - if c.vers == VersionTLS13 && n > maxCiphertextTLS13 || n > maxCiphertext { - c.sendAlert(alertRecordOverflow) - msg := fmt.Sprintf("oversized record received with length %d", n) - return c.in.setErrorLocked(c.newRecordHeaderError(nil, msg)) - } - if err := c.readFromUntil(c.conn, recordHeaderLen+n); err != nil { - if e, ok := err.(net.Error); !ok || !e.Temporary() { - c.in.setErrorLocked(err) - } - return err - } - - // Process message. - record := c.rawInput.Next(recordHeaderLen + n) - data, typ, err := c.in.decrypt(record) - if err != nil { - return c.in.setErrorLocked(c.sendAlert(err.(alert))) - } - if len(data) > maxPlaintext { - return c.in.setErrorLocked(c.sendAlert(alertRecordOverflow)) - } - - // Application Data messages are always protected. - if c.in.cipher == nil && typ == recordTypeApplicationData { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - - if typ != recordTypeAlert && typ != recordTypeChangeCipherSpec && len(data) > 0 { - // This is a state-advancing message: reset the retry count. - c.retryCount = 0 - } - - // Handshake messages MUST NOT be interleaved with other record types in TLS 1.3. - if c.vers == VersionTLS13 && typ != recordTypeHandshake && c.hand.Len() > 0 { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - - switch typ { - default: - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - - case recordTypeAlert: - if len(data) != 2 { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - if alert(data[1]) == alertCloseNotify { - return c.in.setErrorLocked(io.EOF) - } - if c.vers == VersionTLS13 { - return c.in.setErrorLocked(&net.OpError{Op: "remote error", Err: alert(data[1])}) - } - switch data[0] { - case alertLevelWarning: - // Drop the record on the floor and retry. - return c.retryReadRecord(expectChangeCipherSpec) - case alertLevelError: - return c.in.setErrorLocked(&net.OpError{Op: "remote error", Err: alert(data[1])}) - default: - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - - case recordTypeChangeCipherSpec: - if len(data) != 1 || data[0] != 1 { - return c.in.setErrorLocked(c.sendAlert(alertDecodeError)) - } - // Handshake messages are not allowed to fragment across the CCS. - if c.hand.Len() > 0 { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - // In TLS 1.3, change_cipher_spec records are ignored until the - // Finished. See RFC 8446, Appendix D.4. Note that according to Section - // 5, a server can send a ChangeCipherSpec before its ServerHello, when - // c.vers is still unset. That's not useful though and suspicious if the - // server then selects a lower protocol version, so don't allow that. - if c.vers == VersionTLS13 { - return c.retryReadRecord(expectChangeCipherSpec) - } - if !expectChangeCipherSpec { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - if err := c.in.changeCipherSpec(); err != nil { - return c.in.setErrorLocked(c.sendAlert(err.(alert))) - } - - case recordTypeApplicationData: - if !handshakeComplete || expectChangeCipherSpec { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - // Some OpenSSL servers send empty records in order to randomize the - // CBC IV. Ignore a limited number of empty records. - if len(data) == 0 { - return c.retryReadRecord(expectChangeCipherSpec) - } - // Note that data is owned by c.rawInput, following the Next call above, - // to avoid copying the plaintext. This is safe because c.rawInput is - // not read from or written to until c.input is drained. - c.input.Reset(data) - - case recordTypeHandshake: - if len(data) == 0 || expectChangeCipherSpec { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - c.hand.Write(data) - } - - return nil -} - -// retryReadRecord recurses into readRecordOrCCS to drop a non-advancing record, like -// a warning alert, empty application_data, or a change_cipher_spec in TLS 1.3. -func (c *Conn) retryReadRecord(expectChangeCipherSpec bool) error { - c.retryCount++ - if c.retryCount > maxUselessRecords { - c.sendAlert(alertUnexpectedMessage) - return c.in.setErrorLocked(errors.New("tls: too many ignored records")) - } - return c.readRecordOrCCS(expectChangeCipherSpec) -} - -// atLeastReader reads from R, stopping with EOF once at least N bytes have been -// read. It is different from an io.LimitedReader in that it doesn't cut short -// the last Read call, and in that it considers an early EOF an error. -type atLeastReader struct { - R io.Reader - N int64 -} - -func (r *atLeastReader) Read(p []byte) (int, error) { - if r.N <= 0 { - return 0, io.EOF - } - n, err := r.R.Read(p) - r.N -= int64(n) // won't underflow unless len(p) >= n > 9223372036854775809 - if r.N > 0 && err == io.EOF { - return n, io.ErrUnexpectedEOF - } - if r.N <= 0 && err == nil { - return n, io.EOF - } - return n, err -} - -// readFromUntil reads from r into c.rawInput until c.rawInput contains -// at least n bytes or else returns an error. -func (c *Conn) readFromUntil(r io.Reader, n int) error { - if c.rawInput.Len() >= n { - return nil - } - needs := n - c.rawInput.Len() - // There might be extra input waiting on the wire. Make a best effort - // attempt to fetch it so that it can be used in (*Conn).Read to - // "predict" closeNotify alerts. - c.rawInput.Grow(needs + bytes.MinRead) - _, err := c.rawInput.ReadFrom(&atLeastReader{r, int64(needs)}) - return err -} - -// sendAlert sends a TLS alert message. -func (c *Conn) sendAlertLocked(err alert) error { - switch err { - case alertNoRenegotiation, alertCloseNotify: - c.tmp[0] = alertLevelWarning - default: - c.tmp[0] = alertLevelError - } - c.tmp[1] = byte(err) - - _, writeErr := c.writeRecordLocked(recordTypeAlert, c.tmp[0:2]) - if err == alertCloseNotify { - // closeNotify is a special case in that it isn't an error. - return writeErr - } - - return c.out.setErrorLocked(&net.OpError{Op: "local error", Err: err}) -} - -// sendAlert sends a TLS alert message. -func (c *Conn) sendAlert(err alert) error { - if c.extraConfig != nil && c.extraConfig.AlternativeRecordLayer != nil { - c.extraConfig.AlternativeRecordLayer.SendAlert(uint8(err)) - return &net.OpError{Op: "local error", Err: err} - } - - c.out.Lock() - defer c.out.Unlock() - return c.sendAlertLocked(err) -} - -const ( - // tcpMSSEstimate is a conservative estimate of the TCP maximum segment - // size (MSS). A constant is used, rather than querying the kernel for - // the actual MSS, to avoid complexity. The value here is the IPv6 - // minimum MTU (1280 bytes) minus the overhead of an IPv6 header (40 - // bytes) and a TCP header with timestamps (32 bytes). - tcpMSSEstimate = 1208 - - // recordSizeBoostThreshold is the number of bytes of application data - // sent after which the TLS record size will be increased to the - // maximum. - recordSizeBoostThreshold = 128 * 1024 -) - -// maxPayloadSizeForWrite returns the maximum TLS payload size to use for the -// next application data record. There is the following trade-off: -// -// - For latency-sensitive applications, such as web browsing, each TLS -// record should fit in one TCP segment. -// - For throughput-sensitive applications, such as large file transfers, -// larger TLS records better amortize framing and encryption overheads. -// -// A simple heuristic that works well in practice is to use small records for -// the first 1MB of data, then use larger records for subsequent data, and -// reset back to smaller records after the connection becomes idle. See "High -// Performance Web Networking", Chapter 4, or: -// https://www.igvita.com/2013/10/24/optimizing-tls-record-size-and-buffering-latency/ -// -// In the interests of simplicity and determinism, this code does not attempt -// to reset the record size once the connection is idle, however. -func (c *Conn) maxPayloadSizeForWrite(typ recordType) int { - if c.config.DynamicRecordSizingDisabled || typ != recordTypeApplicationData { - return maxPlaintext - } - - if c.bytesSent >= recordSizeBoostThreshold { - return maxPlaintext - } - - // Subtract TLS overheads to get the maximum payload size. - payloadBytes := tcpMSSEstimate - recordHeaderLen - c.out.explicitNonceLen() - if c.out.cipher != nil { - switch ciph := c.out.cipher.(type) { - case cipher.Stream: - payloadBytes -= c.out.mac.Size() - case cipher.AEAD: - payloadBytes -= ciph.Overhead() - case cbcMode: - blockSize := ciph.BlockSize() - // The payload must fit in a multiple of blockSize, with - // room for at least one padding byte. - payloadBytes = (payloadBytes & ^(blockSize - 1)) - 1 - // The MAC is appended before padding so affects the - // payload size directly. - payloadBytes -= c.out.mac.Size() - default: - panic("unknown cipher type") - } - } - if c.vers == VersionTLS13 { - payloadBytes-- // encrypted ContentType - } - - // Allow packet growth in arithmetic progression up to max. - pkt := c.packetsSent - c.packetsSent++ - if pkt > 1000 { - return maxPlaintext // avoid overflow in multiply below - } - - n := payloadBytes * int(pkt+1) - if n > maxPlaintext { - n = maxPlaintext - } - return n -} - -func (c *Conn) write(data []byte) (int, error) { - if c.buffering { - c.sendBuf = append(c.sendBuf, data...) - return len(data), nil - } - - n, err := c.conn.Write(data) - c.bytesSent += int64(n) - return n, err -} - -func (c *Conn) flush() (int, error) { - if len(c.sendBuf) == 0 { - return 0, nil - } - - n, err := c.conn.Write(c.sendBuf) - c.bytesSent += int64(n) - c.sendBuf = nil - c.buffering = false - return n, err -} - -// outBufPool pools the record-sized scratch buffers used by writeRecordLocked. -var outBufPool = sync.Pool{ - New: func() any { - return new([]byte) - }, -} - -// writeRecordLocked writes a TLS record with the given type and payload to the -// connection and updates the record layer state. -func (c *Conn) writeRecordLocked(typ recordType, data []byte) (int, error) { - outBufPtr := outBufPool.Get().(*[]byte) - outBuf := *outBufPtr - defer func() { - // You might be tempted to simplify this by just passing &outBuf to Put, - // but that would make the local copy of the outBuf slice header escape - // to the heap, causing an allocation. Instead, we keep around the - // pointer to the slice header returned by Get, which is already on the - // heap, and overwrite and return that. - *outBufPtr = outBuf - outBufPool.Put(outBufPtr) - }() - - var n int - for len(data) > 0 { - m := len(data) - if maxPayload := c.maxPayloadSizeForWrite(typ); m > maxPayload { - m = maxPayload - } - - _, outBuf = sliceForAppend(outBuf[:0], recordHeaderLen) - outBuf[0] = byte(typ) - vers := c.vers - if vers == 0 { - // Some TLS servers fail if the record version is - // greater than TLS 1.0 for the initial ClientHello. - vers = VersionTLS10 - } else if vers == VersionTLS13 { - // TLS 1.3 froze the record layer version to 1.2. - // See RFC 8446, Section 5.1. - vers = VersionTLS12 - } - outBuf[1] = byte(vers >> 8) - outBuf[2] = byte(vers) - outBuf[3] = byte(m >> 8) - outBuf[4] = byte(m) - - var err error - outBuf, err = c.out.encrypt(outBuf, data[:m], c.config.rand()) - if err != nil { - return n, err - } - if _, err := c.write(outBuf); err != nil { - return n, err - } - n += m - data = data[m:] - } - - if typ == recordTypeChangeCipherSpec && c.vers != VersionTLS13 { - if err := c.out.changeCipherSpec(); err != nil { - return n, c.sendAlertLocked(err.(alert)) - } - } - - return n, nil -} - -// writeRecord writes a TLS record with the given type and payload to the -// connection and updates the record layer state. -func (c *Conn) writeRecord(typ recordType, data []byte) (int, error) { - if c.extraConfig != nil && c.extraConfig.AlternativeRecordLayer != nil { - if typ == recordTypeChangeCipherSpec { - return len(data), nil - } - return c.extraConfig.AlternativeRecordLayer.WriteRecord(data) - } - - c.out.Lock() - defer c.out.Unlock() - - return c.writeRecordLocked(typ, data) -} - -// readHandshake reads the next handshake message from -// the record layer. -func (c *Conn) readHandshake() (any, error) { - var data []byte - if c.extraConfig != nil && c.extraConfig.AlternativeRecordLayer != nil { - var err error - data, err = c.extraConfig.AlternativeRecordLayer.ReadHandshakeMessage() - if err != nil { - return nil, err - } - } else { - for c.hand.Len() < 4 { - if err := c.readRecord(); err != nil { - return nil, err - } - } - - data = c.hand.Bytes() - n := int(data[1])<<16 | int(data[2])<<8 | int(data[3]) - if n > maxHandshake { - c.sendAlertLocked(alertInternalError) - return nil, c.in.setErrorLocked(fmt.Errorf("tls: handshake message of length %d bytes exceeds maximum of %d bytes", n, maxHandshake)) - } - for c.hand.Len() < 4+n { - if err := c.readRecord(); err != nil { - return nil, err - } - } - data = c.hand.Next(4 + n) - } - var m handshakeMessage - switch data[0] { - case typeHelloRequest: - m = new(helloRequestMsg) - case typeClientHello: - m = new(clientHelloMsg) - case typeServerHello: - m = new(serverHelloMsg) - case typeNewSessionTicket: - if c.vers == VersionTLS13 { - m = new(newSessionTicketMsgTLS13) - } else { - m = new(newSessionTicketMsg) - } - case typeCertificate: - if c.vers == VersionTLS13 { - m = new(certificateMsgTLS13) - } else { - m = new(certificateMsg) - } - case typeCertificateRequest: - if c.vers == VersionTLS13 { - m = new(certificateRequestMsgTLS13) - } else { - m = &certificateRequestMsg{ - hasSignatureAlgorithm: c.vers >= VersionTLS12, - } - } - case typeCertificateStatus: - m = new(certificateStatusMsg) - case typeServerKeyExchange: - m = new(serverKeyExchangeMsg) - case typeServerHelloDone: - m = new(serverHelloDoneMsg) - case typeClientKeyExchange: - m = new(clientKeyExchangeMsg) - case typeCertificateVerify: - m = &certificateVerifyMsg{ - hasSignatureAlgorithm: c.vers >= VersionTLS12, - } - case typeFinished: - m = new(finishedMsg) - case typeEncryptedExtensions: - m = new(encryptedExtensionsMsg) - case typeEndOfEarlyData: - m = new(endOfEarlyDataMsg) - case typeKeyUpdate: - m = new(keyUpdateMsg) - default: - return nil, c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - - // The handshake message unmarshalers - // expect to be able to keep references to data, - // so pass in a fresh copy that won't be overwritten. - data = append([]byte(nil), data...) - - if !m.unmarshal(data) { - return nil, c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - return m, nil -} - -var ( - errShutdown = errors.New("tls: protocol is shutdown") -) - -// Write writes data to the connection. -// -// As Write calls Handshake, in order to prevent indefinite blocking a deadline -// must be set for both Read and Write before Write is called when the handshake -// has not yet completed. See SetDeadline, SetReadDeadline, and -// SetWriteDeadline. -func (c *Conn) Write(b []byte) (int, error) { - // interlock with Close below - for { - x := atomic.LoadInt32(&c.activeCall) - if x&1 != 0 { - return 0, net.ErrClosed - } - if atomic.CompareAndSwapInt32(&c.activeCall, x, x+2) { - break - } - } - defer atomic.AddInt32(&c.activeCall, -2) - - if err := c.Handshake(); err != nil { - return 0, err - } - - c.out.Lock() - defer c.out.Unlock() - - if err := c.out.err; err != nil { - return 0, err - } - - if !c.handshakeComplete() { - return 0, alertInternalError - } - - if c.closeNotifySent { - return 0, errShutdown - } - - // TLS 1.0 is susceptible to a chosen-plaintext - // attack when using block mode ciphers due to predictable IVs. - // This can be prevented by splitting each Application Data - // record into two records, effectively randomizing the IV. - // - // https://www.openssl.org/~bodo/tls-cbc.txt - // https://bugzilla.mozilla.org/show_bug.cgi?id=665814 - // https://www.imperialviolet.org/2012/01/15/beastfollowup.html - - var m int - if len(b) > 1 && c.vers == VersionTLS10 { - if _, ok := c.out.cipher.(cipher.BlockMode); ok { - n, err := c.writeRecordLocked(recordTypeApplicationData, b[:1]) - if err != nil { - return n, c.out.setErrorLocked(err) - } - m, b = 1, b[1:] - } - } - - n, err := c.writeRecordLocked(recordTypeApplicationData, b) - return n + m, c.out.setErrorLocked(err) -} - -// handleRenegotiation processes a HelloRequest handshake message. -func (c *Conn) handleRenegotiation() error { - if c.vers == VersionTLS13 { - return errors.New("tls: internal error: unexpected renegotiation") - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - - helloReq, ok := msg.(*helloRequestMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(helloReq, msg) - } - - if !c.isClient { - return c.sendAlert(alertNoRenegotiation) - } - - switch c.config.Renegotiation { - case RenegotiateNever: - return c.sendAlert(alertNoRenegotiation) - case RenegotiateOnceAsClient: - if c.handshakes > 1 { - return c.sendAlert(alertNoRenegotiation) - } - case RenegotiateFreelyAsClient: - // Ok. - default: - c.sendAlert(alertInternalError) - return errors.New("tls: unknown Renegotiation value") - } - - c.handshakeMutex.Lock() - defer c.handshakeMutex.Unlock() - - atomic.StoreUint32(&c.handshakeStatus, 0) - if c.handshakeErr = c.clientHandshake(context.Background()); c.handshakeErr == nil { - c.handshakes++ - } - return c.handshakeErr -} - -func (c *Conn) HandlePostHandshakeMessage() error { - return c.handlePostHandshakeMessage() -} - -// handlePostHandshakeMessage processes a handshake message arrived after the -// handshake is complete. Up to TLS 1.2, it indicates the start of a renegotiation. -func (c *Conn) handlePostHandshakeMessage() error { - if c.vers != VersionTLS13 { - return c.handleRenegotiation() - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - - c.retryCount++ - if c.retryCount > maxUselessRecords { - c.sendAlert(alertUnexpectedMessage) - return c.in.setErrorLocked(errors.New("tls: too many non-advancing records")) - } - - switch msg := msg.(type) { - case *newSessionTicketMsgTLS13: - return c.handleNewSessionTicket(msg) - case *keyUpdateMsg: - return c.handleKeyUpdate(msg) - default: - c.sendAlert(alertUnexpectedMessage) - return fmt.Errorf("tls: received unexpected handshake message of type %T", msg) - } -} - -func (c *Conn) handleKeyUpdate(keyUpdate *keyUpdateMsg) error { - cipherSuite := cipherSuiteTLS13ByID(c.cipherSuite) - if cipherSuite == nil { - return c.in.setErrorLocked(c.sendAlert(alertInternalError)) - } - - newSecret := cipherSuite.nextTrafficSecret(c.in.trafficSecret) - c.in.setTrafficSecret(cipherSuite, newSecret) - - if keyUpdate.updateRequested { - c.out.Lock() - defer c.out.Unlock() - - msg := &keyUpdateMsg{} - _, err := c.writeRecordLocked(recordTypeHandshake, msg.marshal()) - if err != nil { - // Surface the error at the next write. - c.out.setErrorLocked(err) - return nil - } - - newSecret := cipherSuite.nextTrafficSecret(c.out.trafficSecret) - c.out.setTrafficSecret(cipherSuite, newSecret) - } - - return nil -} - -// Read reads data from the connection. -// -// As Read calls Handshake, in order to prevent indefinite blocking a deadline -// must be set for both Read and Write before Read is called when the handshake -// has not yet completed. See SetDeadline, SetReadDeadline, and -// SetWriteDeadline. -func (c *Conn) Read(b []byte) (int, error) { - if err := c.Handshake(); err != nil { - return 0, err - } - if len(b) == 0 { - // Put this after Handshake, in case people were calling - // Read(nil) for the side effect of the Handshake. - return 0, nil - } - - c.in.Lock() - defer c.in.Unlock() - - for c.input.Len() == 0 { - if err := c.readRecord(); err != nil { - return 0, err - } - for c.hand.Len() > 0 { - if err := c.handlePostHandshakeMessage(); err != nil { - return 0, err - } - } - } - - n, _ := c.input.Read(b) - - // If a close-notify alert is waiting, read it so that we can return (n, - // EOF) instead of (n, nil), to signal to the HTTP response reading - // goroutine that the connection is now closed. This eliminates a race - // where the HTTP response reading goroutine would otherwise not observe - // the EOF until its next read, by which time a client goroutine might - // have already tried to reuse the HTTP connection for a new request. - // See https://golang.org/cl/76400046 and https://golang.org/issue/3514 - if n != 0 && c.input.Len() == 0 && c.rawInput.Len() > 0 && - recordType(c.rawInput.Bytes()[0]) == recordTypeAlert { - if err := c.readRecord(); err != nil { - return n, err // will be io.EOF on closeNotify - } - } - - return n, nil -} - -// Close closes the connection. -func (c *Conn) Close() error { - // Interlock with Conn.Write above. - var x int32 - for { - x = atomic.LoadInt32(&c.activeCall) - if x&1 != 0 { - return net.ErrClosed - } - if atomic.CompareAndSwapInt32(&c.activeCall, x, x|1) { - break - } - } - if x != 0 { - // io.Writer and io.Closer should not be used concurrently. - // If Close is called while a Write is currently in-flight, - // interpret that as a sign that this Close is really just - // being used to break the Write and/or clean up resources and - // avoid sending the alertCloseNotify, which may block - // waiting on handshakeMutex or the c.out mutex. - return c.conn.Close() - } - - var alertErr error - if c.handshakeComplete() { - if err := c.closeNotify(); err != nil { - alertErr = fmt.Errorf("tls: failed to send closeNotify alert (but connection was closed anyway): %w", err) - } - } - - if err := c.conn.Close(); err != nil { - return err - } - return alertErr -} - -var errEarlyCloseWrite = errors.New("tls: CloseWrite called before handshake complete") - -// CloseWrite shuts down the writing side of the connection. It should only be -// called once the handshake has completed and does not call CloseWrite on the -// underlying connection. Most callers should just use Close. -func (c *Conn) CloseWrite() error { - if !c.handshakeComplete() { - return errEarlyCloseWrite - } - - return c.closeNotify() -} - -func (c *Conn) closeNotify() error { - c.out.Lock() - defer c.out.Unlock() - - if !c.closeNotifySent { - // Set a Write Deadline to prevent possibly blocking forever. - c.SetWriteDeadline(time.Now().Add(time.Second * 5)) - c.closeNotifyErr = c.sendAlertLocked(alertCloseNotify) - c.closeNotifySent = true - // Any subsequent writes will fail. - c.SetWriteDeadline(time.Now()) - } - return c.closeNotifyErr -} - -// Handshake runs the client or server handshake -// protocol if it has not yet been run. -// -// Most uses of this package need not call Handshake explicitly: the -// first Read or Write will call it automatically. -// -// For control over canceling or setting a timeout on a handshake, use -// HandshakeContext or the Dialer's DialContext method instead. -func (c *Conn) Handshake() error { - return c.HandshakeContext(context.Background()) -} - -// HandshakeContext runs the client or server handshake -// protocol if it has not yet been run. -// -// The provided Context must be non-nil. If the context is canceled before -// the handshake is complete, the handshake is interrupted and an error is returned. -// Once the handshake has completed, cancellation of the context will not affect the -// connection. -// -// Most uses of this package need not call HandshakeContext explicitly: the -// first Read or Write will call it automatically. -func (c *Conn) HandshakeContext(ctx context.Context) error { - // Delegate to unexported method for named return - // without confusing documented signature. - return c.handshakeContext(ctx) -} - -func (c *Conn) handshakeContext(ctx context.Context) (ret error) { - // Fast sync/atomic-based exit if there is no handshake in flight and the - // last one succeeded without an error. Avoids the expensive context setup - // and mutex for most Read and Write calls. - if c.handshakeComplete() { - return nil - } - - handshakeCtx, cancel := context.WithCancel(ctx) - // Note: defer this before starting the "interrupter" goroutine - // so that we can tell the difference between the input being canceled and - // this cancellation. In the former case, we need to close the connection. - defer cancel() - - // Start the "interrupter" goroutine, if this context might be canceled. - // (The background context cannot). - // - // The interrupter goroutine waits for the input context to be done and - // closes the connection if this happens before the function returns. - if ctx.Done() != nil { - done := make(chan struct{}) - interruptRes := make(chan error, 1) - defer func() { - close(done) - if ctxErr := <-interruptRes; ctxErr != nil { - // Return context error to user. - ret = ctxErr - } - }() - go func() { - select { - case <-handshakeCtx.Done(): - // Close the connection, discarding the error - _ = c.conn.Close() - interruptRes <- handshakeCtx.Err() - case <-done: - interruptRes <- nil - } - }() - } - - c.handshakeMutex.Lock() - defer c.handshakeMutex.Unlock() - - if err := c.handshakeErr; err != nil { - return err - } - if c.handshakeComplete() { - return nil - } - - c.in.Lock() - defer c.in.Unlock() - - c.handshakeErr = c.handshakeFn(handshakeCtx) - if c.handshakeErr == nil { - c.handshakes++ - } else { - // If an error occurred during the handshake try to flush the - // alert that might be left in the buffer. - c.flush() - } - - if c.handshakeErr == nil && !c.handshakeComplete() { - c.handshakeErr = errors.New("tls: internal error: handshake should have had a result") - } - if c.handshakeErr != nil && c.handshakeComplete() { - panic("tls: internal error: handshake returned an error but is marked successful") - } - - return c.handshakeErr -} - -// ConnectionState returns basic TLS details about the connection. -func (c *Conn) ConnectionState() ConnectionState { - c.connStateMutex.Lock() - defer c.connStateMutex.Unlock() - return c.connState.ConnectionState -} - -// ConnectionStateWith0RTT returns basic TLS details (incl. 0-RTT status) about the connection. -func (c *Conn) ConnectionStateWith0RTT() ConnectionStateWith0RTT { - c.connStateMutex.Lock() - defer c.connStateMutex.Unlock() - return c.connState -} - -func (c *Conn) connectionStateLocked() ConnectionState { - var state connectionState - state.HandshakeComplete = c.handshakeComplete() - state.Version = c.vers - state.NegotiatedProtocol = c.clientProtocol - state.DidResume = c.didResume - state.NegotiatedProtocolIsMutual = true - state.ServerName = c.serverName - state.CipherSuite = c.cipherSuite - state.PeerCertificates = c.peerCertificates - state.VerifiedChains = c.verifiedChains - state.SignedCertificateTimestamps = c.scts - state.OCSPResponse = c.ocspResponse - if !c.didResume && c.vers != VersionTLS13 { - if c.clientFinishedIsFirst { - state.TLSUnique = c.clientFinished[:] - } else { - state.TLSUnique = c.serverFinished[:] - } - } - if c.config.Renegotiation != RenegotiateNever { - state.ekm = noExportedKeyingMaterial - } else { - state.ekm = c.ekm - } - return toConnectionState(state) -} - -func (c *Conn) updateConnectionState() { - c.connStateMutex.Lock() - defer c.connStateMutex.Unlock() - c.connState = ConnectionStateWith0RTT{ - Used0RTT: c.used0RTT, - ConnectionState: c.connectionStateLocked(), - } -} - -// OCSPResponse returns the stapled OCSP response from the TLS server, if -// any. (Only valid for client connections.) -func (c *Conn) OCSPResponse() []byte { - c.handshakeMutex.Lock() - defer c.handshakeMutex.Unlock() - - return c.ocspResponse -} - -// VerifyHostname checks that the peer certificate chain is valid for -// connecting to host. If so, it returns nil; if not, it returns an error -// describing the problem. -func (c *Conn) VerifyHostname(host string) error { - c.handshakeMutex.Lock() - defer c.handshakeMutex.Unlock() - if !c.isClient { - return errors.New("tls: VerifyHostname called on TLS server connection") - } - if !c.handshakeComplete() { - return errors.New("tls: handshake has not yet been performed") - } - if len(c.verifiedChains) == 0 { - return errors.New("tls: handshake did not verify certificate chain") - } - return c.peerCertificates[0].VerifyHostname(host) -} - -func (c *Conn) handshakeComplete() bool { - return atomic.LoadUint32(&c.handshakeStatus) == 1 -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/cpu.go b/vendor/github.com/quic-go/qtls-go1-18/cpu.go deleted file mode 100644 index 1219450879..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/cpu.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:build !js -// +build !js - -package qtls - -import ( - "runtime" - - "golang.org/x/sys/cpu" -) - -var ( - hasGCMAsmAMD64 = cpu.X86.HasAES && cpu.X86.HasPCLMULQDQ - hasGCMAsmARM64 = cpu.ARM64.HasAES && cpu.ARM64.HasPMULL - // Keep in sync with crypto/aes/cipher_s390x.go. - hasGCMAsmS390X = cpu.S390X.HasAES && cpu.S390X.HasAESCBC && cpu.S390X.HasAESCTR && - (cpu.S390X.HasGHASH || cpu.S390X.HasAESGCM) - - hasAESGCMHardwareSupport = runtime.GOARCH == "amd64" && hasGCMAsmAMD64 || - runtime.GOARCH == "arm64" && hasGCMAsmARM64 || - runtime.GOARCH == "s390x" && hasGCMAsmS390X -) diff --git a/vendor/github.com/quic-go/qtls-go1-18/cpu_other.go b/vendor/github.com/quic-go/qtls-go1-18/cpu_other.go deleted file mode 100644 index 33f7d21942..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/cpu_other.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build js -// +build js - -package qtls - -var ( - hasGCMAsmAMD64 = false - hasGCMAsmARM64 = false - hasGCMAsmS390X = false - - hasAESGCMHardwareSupport = false -) diff --git a/vendor/github.com/quic-go/qtls-go1-18/handshake_client.go b/vendor/github.com/quic-go/qtls-go1-18/handshake_client.go deleted file mode 100644 index a2a0eaea8c..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/handshake_client.go +++ /dev/null @@ -1,1112 +0,0 @@ -// Copyright 2009 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 qtls - -import ( - "bytes" - "context" - "crypto" - "crypto/ecdsa" - "crypto/ed25519" - "crypto/rsa" - "crypto/subtle" - "crypto/x509" - "errors" - "fmt" - "hash" - "io" - "net" - "strings" - "sync/atomic" - "time" - - "golang.org/x/crypto/cryptobyte" -) - -const clientSessionStateVersion = 1 - -type clientHandshakeState struct { - c *Conn - ctx context.Context - serverHello *serverHelloMsg - hello *clientHelloMsg - suite *cipherSuite - finishedHash finishedHash - masterSecret []byte - session *clientSessionState -} - -func (c *Conn) makeClientHello() (*clientHelloMsg, ecdheParameters, error) { - config := c.config - if len(config.ServerName) == 0 && !config.InsecureSkipVerify { - return nil, nil, errors.New("tls: either ServerName or InsecureSkipVerify must be specified in the tls.Config") - } - - nextProtosLength := 0 - for _, proto := range config.NextProtos { - if l := len(proto); l == 0 || l > 255 { - return nil, nil, errors.New("tls: invalid NextProtos value") - } else { - nextProtosLength += 1 + l - } - } - if nextProtosLength > 0xffff { - return nil, nil, errors.New("tls: NextProtos values too large") - } - - var supportedVersions []uint16 - var clientHelloVersion uint16 - if c.extraConfig.usesAlternativeRecordLayer() { - if config.maxSupportedVersion(roleClient) < VersionTLS13 { - return nil, nil, errors.New("tls: MaxVersion prevents QUIC from using TLS 1.3") - } - // Only offer TLS 1.3 when QUIC is used. - supportedVersions = []uint16{VersionTLS13} - clientHelloVersion = VersionTLS13 - } else { - supportedVersions = config.supportedVersions(roleClient) - if len(supportedVersions) == 0 { - return nil, nil, errors.New("tls: no supported versions satisfy MinVersion and MaxVersion") - } - clientHelloVersion = config.maxSupportedVersion(roleClient) - } - - // The version at the beginning of the ClientHello was capped at TLS 1.2 - // for compatibility reasons. The supported_versions extension is used - // to negotiate versions now. See RFC 8446, Section 4.2.1. - if clientHelloVersion > VersionTLS12 { - clientHelloVersion = VersionTLS12 - } - - hello := &clientHelloMsg{ - vers: clientHelloVersion, - compressionMethods: []uint8{compressionNone}, - random: make([]byte, 32), - ocspStapling: true, - scts: true, - serverName: hostnameInSNI(config.ServerName), - supportedCurves: config.curvePreferences(), - supportedPoints: []uint8{pointFormatUncompressed}, - secureRenegotiationSupported: true, - alpnProtocols: config.NextProtos, - supportedVersions: supportedVersions, - } - - if c.handshakes > 0 { - hello.secureRenegotiation = c.clientFinished[:] - } - - preferenceOrder := cipherSuitesPreferenceOrder - if !hasAESGCMHardwareSupport { - preferenceOrder = cipherSuitesPreferenceOrderNoAES - } - configCipherSuites := config.cipherSuites() - hello.cipherSuites = make([]uint16, 0, len(configCipherSuites)) - - for _, suiteId := range preferenceOrder { - suite := mutualCipherSuite(configCipherSuites, suiteId) - if suite == nil { - continue - } - // Don't advertise TLS 1.2-only cipher suites unless - // we're attempting TLS 1.2. - if hello.vers < VersionTLS12 && suite.flags&suiteTLS12 != 0 { - continue - } - hello.cipherSuites = append(hello.cipherSuites, suiteId) - } - - _, err := io.ReadFull(config.rand(), hello.random) - if err != nil { - return nil, nil, errors.New("tls: short read from Rand: " + err.Error()) - } - - // A random session ID is used to detect when the server accepted a ticket - // and is resuming a session (see RFC 5077). In TLS 1.3, it's always set as - // a compatibility measure (see RFC 8446, Section 4.1.2). - if c.extraConfig == nil || c.extraConfig.AlternativeRecordLayer == nil { - hello.sessionId = make([]byte, 32) - if _, err := io.ReadFull(config.rand(), hello.sessionId); err != nil { - return nil, nil, errors.New("tls: short read from Rand: " + err.Error()) - } - } - - if hello.vers >= VersionTLS12 { - hello.supportedSignatureAlgorithms = supportedSignatureAlgorithms - } - - var params ecdheParameters - if hello.supportedVersions[0] == VersionTLS13 { - var suites []uint16 - for _, suiteID := range configCipherSuites { - for _, suite := range cipherSuitesTLS13 { - if suite.id == suiteID { - suites = append(suites, suiteID) - } - } - } - if len(suites) > 0 { - hello.cipherSuites = suites - } else { - if hasAESGCMHardwareSupport { - hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13...) - } else { - hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13NoAES...) - } - } - - curveID := config.curvePreferences()[0] - if _, ok := curveForCurveID(curveID); curveID != X25519 && !ok { - return nil, nil, errors.New("tls: CurvePreferences includes unsupported curve") - } - params, err = generateECDHEParameters(config.rand(), curveID) - if err != nil { - return nil, nil, err - } - hello.keyShares = []keyShare{{group: curveID, data: params.PublicKey()}} - } - - if hello.supportedVersions[0] == VersionTLS13 && c.extraConfig != nil && c.extraConfig.GetExtensions != nil { - hello.additionalExtensions = c.extraConfig.GetExtensions(typeClientHello) - } - - return hello, params, nil -} - -func (c *Conn) clientHandshake(ctx context.Context) (err error) { - if c.config == nil { - c.config = fromConfig(defaultConfig()) - } - c.setAlternativeRecordLayer() - - // This may be a renegotiation handshake, in which case some fields - // need to be reset. - c.didResume = false - - hello, ecdheParams, err := c.makeClientHello() - if err != nil { - return err - } - c.serverName = hello.serverName - - cacheKey, session, earlySecret, binderKey := c.loadSession(hello) - if cacheKey != "" && session != nil { - var deletedTicket bool - if session.vers == VersionTLS13 && hello.earlyData && c.extraConfig != nil && c.extraConfig.Enable0RTT { - // don't reuse a session ticket that enabled 0-RTT - c.config.ClientSessionCache.Put(cacheKey, nil) - deletedTicket = true - - if suite := cipherSuiteTLS13ByID(session.cipherSuite); suite != nil { - h := suite.hash.New() - h.Write(hello.marshal()) - clientEarlySecret := suite.deriveSecret(earlySecret, "c e traffic", h) - c.out.exportKey(Encryption0RTT, suite, clientEarlySecret) - if err := c.config.writeKeyLog(keyLogLabelEarlyTraffic, hello.random, clientEarlySecret); err != nil { - c.sendAlert(alertInternalError) - return err - } - } - } - if !deletedTicket { - defer func() { - // If we got a handshake failure when resuming a session, throw away - // the session ticket. See RFC 5077, Section 3.2. - // - // RFC 8446 makes no mention of dropping tickets on failure, but it - // does require servers to abort on invalid binders, so we need to - // delete tickets to recover from a corrupted PSK. - if err != nil { - c.config.ClientSessionCache.Put(cacheKey, nil) - } - }() - } - } - - if _, err := c.writeRecord(recordTypeHandshake, hello.marshal()); err != nil { - return err - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - - serverHello, ok := msg.(*serverHelloMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(serverHello, msg) - } - - if err := c.pickTLSVersion(serverHello); err != nil { - return err - } - - // If we are negotiating a protocol version that's lower than what we - // support, check for the server downgrade canaries. - // See RFC 8446, Section 4.1.3. - maxVers := c.config.maxSupportedVersion(roleClient) - tls12Downgrade := string(serverHello.random[24:]) == downgradeCanaryTLS12 - tls11Downgrade := string(serverHello.random[24:]) == downgradeCanaryTLS11 - if maxVers == VersionTLS13 && c.vers <= VersionTLS12 && (tls12Downgrade || tls11Downgrade) || - maxVers == VersionTLS12 && c.vers <= VersionTLS11 && tls11Downgrade { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: downgrade attempt detected, possibly due to a MitM attack or a broken middlebox") - } - - if c.vers == VersionTLS13 { - hs := &clientHandshakeStateTLS13{ - c: c, - ctx: ctx, - serverHello: serverHello, - hello: hello, - ecdheParams: ecdheParams, - session: session, - earlySecret: earlySecret, - binderKey: binderKey, - } - - // In TLS 1.3, session tickets are delivered after the handshake. - return hs.handshake() - } - - hs := &clientHandshakeState{ - c: c, - ctx: ctx, - serverHello: serverHello, - hello: hello, - session: session, - } - - if err := hs.handshake(); err != nil { - return err - } - - // If we had a successful handshake and hs.session is different from - // the one already cached - cache a new one. - if cacheKey != "" && hs.session != nil && session != hs.session { - c.config.ClientSessionCache.Put(cacheKey, toClientSessionState(hs.session)) - } - - c.updateConnectionState() - return nil -} - -// extract the app data saved in the session.nonce, -// and set the session.nonce to the actual nonce value -func (c *Conn) decodeSessionState(session *clientSessionState) (uint32 /* max early data */, []byte /* app data */, bool /* ok */) { - s := cryptobyte.String(session.nonce) - var version uint16 - if !s.ReadUint16(&version) { - return 0, nil, false - } - if version != clientSessionStateVersion { - return 0, nil, false - } - var maxEarlyData uint32 - if !s.ReadUint32(&maxEarlyData) { - return 0, nil, false - } - var appData []byte - if !readUint16LengthPrefixed(&s, &appData) { - return 0, nil, false - } - var nonce []byte - if !readUint16LengthPrefixed(&s, &nonce) { - return 0, nil, false - } - session.nonce = nonce - return maxEarlyData, appData, true -} - -func (c *Conn) loadSession(hello *clientHelloMsg) (cacheKey string, - session *clientSessionState, earlySecret, binderKey []byte) { - if c.config.SessionTicketsDisabled || c.config.ClientSessionCache == nil { - return "", nil, nil, nil - } - - hello.ticketSupported = true - - if hello.supportedVersions[0] == VersionTLS13 { - // Require DHE on resumption as it guarantees forward secrecy against - // compromise of the session ticket key. See RFC 8446, Section 4.2.9. - hello.pskModes = []uint8{pskModeDHE} - } - - // Session resumption is not allowed if renegotiating because - // renegotiation is primarily used to allow a client to send a client - // certificate, which would be skipped if session resumption occurred. - if c.handshakes != 0 { - return "", nil, nil, nil - } - - // Try to resume a previously negotiated TLS session, if available. - cacheKey = clientSessionCacheKey(c.conn.RemoteAddr(), c.config) - sess, ok := c.config.ClientSessionCache.Get(cacheKey) - if !ok || sess == nil { - return cacheKey, nil, nil, nil - } - session = fromClientSessionState(sess) - - var appData []byte - var maxEarlyData uint32 - if session.vers == VersionTLS13 { - var ok bool - maxEarlyData, appData, ok = c.decodeSessionState(session) - if !ok { // delete it, if parsing failed - c.config.ClientSessionCache.Put(cacheKey, nil) - return cacheKey, nil, nil, nil - } - } - - // Check that version used for the previous session is still valid. - versOk := false - for _, v := range hello.supportedVersions { - if v == session.vers { - versOk = true - break - } - } - if !versOk { - return cacheKey, nil, nil, nil - } - - // Check that the cached server certificate is not expired, and that it's - // valid for the ServerName. This should be ensured by the cache key, but - // protect the application from a faulty ClientSessionCache implementation. - if !c.config.InsecureSkipVerify { - if len(session.verifiedChains) == 0 { - // The original connection had InsecureSkipVerify, while this doesn't. - return cacheKey, nil, nil, nil - } - serverCert := session.serverCertificates[0] - if c.config.time().After(serverCert.NotAfter) { - // Expired certificate, delete the entry. - c.config.ClientSessionCache.Put(cacheKey, nil) - return cacheKey, nil, nil, nil - } - if err := serverCert.VerifyHostname(c.config.ServerName); err != nil { - return cacheKey, nil, nil, nil - } - } - - if session.vers != VersionTLS13 { - // In TLS 1.2 the cipher suite must match the resumed session. Ensure we - // are still offering it. - if mutualCipherSuite(hello.cipherSuites, session.cipherSuite) == nil { - return cacheKey, nil, nil, nil - } - - hello.sessionTicket = session.sessionTicket - return - } - - // Check that the session ticket is not expired. - if c.config.time().After(session.useBy) { - c.config.ClientSessionCache.Put(cacheKey, nil) - return cacheKey, nil, nil, nil - } - - // In TLS 1.3 the KDF hash must match the resumed session. Ensure we - // offer at least one cipher suite with that hash. - cipherSuite := cipherSuiteTLS13ByID(session.cipherSuite) - if cipherSuite == nil { - return cacheKey, nil, nil, nil - } - cipherSuiteOk := false - for _, offeredID := range hello.cipherSuites { - offeredSuite := cipherSuiteTLS13ByID(offeredID) - if offeredSuite != nil && offeredSuite.hash == cipherSuite.hash { - cipherSuiteOk = true - break - } - } - if !cipherSuiteOk { - return cacheKey, nil, nil, nil - } - - // Set the pre_shared_key extension. See RFC 8446, Section 4.2.11.1. - ticketAge := uint32(c.config.time().Sub(session.receivedAt) / time.Millisecond) - identity := pskIdentity{ - label: session.sessionTicket, - obfuscatedTicketAge: ticketAge + session.ageAdd, - } - hello.pskIdentities = []pskIdentity{identity} - hello.pskBinders = [][]byte{make([]byte, cipherSuite.hash.Size())} - - // Compute the PSK binders. See RFC 8446, Section 4.2.11.2. - psk := cipherSuite.expandLabel(session.masterSecret, "resumption", - session.nonce, cipherSuite.hash.Size()) - earlySecret = cipherSuite.extract(psk, nil) - binderKey = cipherSuite.deriveSecret(earlySecret, resumptionBinderLabel, nil) - if c.extraConfig != nil { - hello.earlyData = c.extraConfig.Enable0RTT && maxEarlyData > 0 - } - transcript := cipherSuite.hash.New() - transcript.Write(hello.marshalWithoutBinders()) - pskBinders := [][]byte{cipherSuite.finishedHash(binderKey, transcript)} - hello.updateBinders(pskBinders) - - if session.vers == VersionTLS13 && c.extraConfig != nil && c.extraConfig.SetAppDataFromSessionState != nil { - c.extraConfig.SetAppDataFromSessionState(appData) - } - return -} - -func (c *Conn) pickTLSVersion(serverHello *serverHelloMsg) error { - peerVersion := serverHello.vers - if serverHello.supportedVersion != 0 { - peerVersion = serverHello.supportedVersion - } - - vers, ok := c.config.mutualVersion(roleClient, []uint16{peerVersion}) - if !ok { - c.sendAlert(alertProtocolVersion) - return fmt.Errorf("tls: server selected unsupported protocol version %x", peerVersion) - } - - c.vers = vers - c.haveVers = true - c.in.version = vers - c.out.version = vers - - return nil -} - -// Does the handshake, either a full one or resumes old session. Requires hs.c, -// hs.hello, hs.serverHello, and, optionally, hs.session to be set. -func (hs *clientHandshakeState) handshake() error { - c := hs.c - - isResume, err := hs.processServerHello() - if err != nil { - return err - } - - hs.finishedHash = newFinishedHash(c.vers, hs.suite) - - // No signatures of the handshake are needed in a resumption. - // Otherwise, in a full handshake, if we don't have any certificates - // configured then we will never send a CertificateVerify message and - // thus no signatures are needed in that case either. - if isResume || (len(c.config.Certificates) == 0 && c.config.GetClientCertificate == nil) { - hs.finishedHash.discardHandshakeBuffer() - } - - hs.finishedHash.Write(hs.hello.marshal()) - hs.finishedHash.Write(hs.serverHello.marshal()) - - c.buffering = true - c.didResume = isResume - if isResume { - if err := hs.establishKeys(); err != nil { - return err - } - if err := hs.readSessionTicket(); err != nil { - return err - } - if err := hs.readFinished(c.serverFinished[:]); err != nil { - return err - } - c.clientFinishedIsFirst = false - // Make sure the connection is still being verified whether or not this - // is a resumption. Resumptions currently don't reverify certificates so - // they don't call verifyServerCertificate. See Issue 31641. - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - if err := hs.sendFinished(c.clientFinished[:]); err != nil { - return err - } - if _, err := c.flush(); err != nil { - return err - } - } else { - if err := hs.doFullHandshake(); err != nil { - return err - } - if err := hs.establishKeys(); err != nil { - return err - } - if err := hs.sendFinished(c.clientFinished[:]); err != nil { - return err - } - if _, err := c.flush(); err != nil { - return err - } - c.clientFinishedIsFirst = true - if err := hs.readSessionTicket(); err != nil { - return err - } - if err := hs.readFinished(c.serverFinished[:]); err != nil { - return err - } - } - - c.ekm = ekmFromMasterSecret(c.vers, hs.suite, hs.masterSecret, hs.hello.random, hs.serverHello.random) - atomic.StoreUint32(&c.handshakeStatus, 1) - - return nil -} - -func (hs *clientHandshakeState) pickCipherSuite() error { - if hs.suite = mutualCipherSuite(hs.hello.cipherSuites, hs.serverHello.cipherSuite); hs.suite == nil { - hs.c.sendAlert(alertHandshakeFailure) - return errors.New("tls: server chose an unconfigured cipher suite") - } - - hs.c.cipherSuite = hs.suite.id - return nil -} - -func (hs *clientHandshakeState) doFullHandshake() error { - c := hs.c - - msg, err := c.readHandshake() - if err != nil { - return err - } - certMsg, ok := msg.(*certificateMsg) - if !ok || len(certMsg.certificates) == 0 { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certMsg, msg) - } - hs.finishedHash.Write(certMsg.marshal()) - - msg, err = c.readHandshake() - if err != nil { - return err - } - - cs, ok := msg.(*certificateStatusMsg) - if ok { - // RFC4366 on Certificate Status Request: - // The server MAY return a "certificate_status" message. - - if !hs.serverHello.ocspStapling { - // If a server returns a "CertificateStatus" message, then the - // server MUST have included an extension of type "status_request" - // with empty "extension_data" in the extended server hello. - - c.sendAlert(alertUnexpectedMessage) - return errors.New("tls: received unexpected CertificateStatus message") - } - hs.finishedHash.Write(cs.marshal()) - - c.ocspResponse = cs.response - - msg, err = c.readHandshake() - if err != nil { - return err - } - } - - if c.handshakes == 0 { - // If this is the first handshake on a connection, process and - // (optionally) verify the server's certificates. - if err := c.verifyServerCertificate(certMsg.certificates); err != nil { - return err - } - } else { - // This is a renegotiation handshake. We require that the - // server's identity (i.e. leaf certificate) is unchanged and - // thus any previous trust decision is still valid. - // - // See https://mitls.org/pages/attacks/3SHAKE for the - // motivation behind this requirement. - if !bytes.Equal(c.peerCertificates[0].Raw, certMsg.certificates[0]) { - c.sendAlert(alertBadCertificate) - return errors.New("tls: server's identity changed during renegotiation") - } - } - - keyAgreement := hs.suite.ka(c.vers) - - skx, ok := msg.(*serverKeyExchangeMsg) - if ok { - hs.finishedHash.Write(skx.marshal()) - err = keyAgreement.processServerKeyExchange(c.config, hs.hello, hs.serverHello, c.peerCertificates[0], skx) - if err != nil { - c.sendAlert(alertUnexpectedMessage) - return err - } - - msg, err = c.readHandshake() - if err != nil { - return err - } - } - - var chainToSend *Certificate - var certRequested bool - certReq, ok := msg.(*certificateRequestMsg) - if ok { - certRequested = true - hs.finishedHash.Write(certReq.marshal()) - - cri := certificateRequestInfoFromMsg(hs.ctx, c.vers, certReq) - if chainToSend, err = c.getClientCertificate(cri); err != nil { - c.sendAlert(alertInternalError) - return err - } - - msg, err = c.readHandshake() - if err != nil { - return err - } - } - - shd, ok := msg.(*serverHelloDoneMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(shd, msg) - } - hs.finishedHash.Write(shd.marshal()) - - // If the server requested a certificate then we have to send a - // Certificate message, even if it's empty because we don't have a - // certificate to send. - if certRequested { - certMsg = new(certificateMsg) - certMsg.certificates = chainToSend.Certificate - hs.finishedHash.Write(certMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certMsg.marshal()); err != nil { - return err - } - } - - preMasterSecret, ckx, err := keyAgreement.generateClientKeyExchange(c.config, hs.hello, c.peerCertificates[0]) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - if ckx != nil { - hs.finishedHash.Write(ckx.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, ckx.marshal()); err != nil { - return err - } - } - - if chainToSend != nil && len(chainToSend.Certificate) > 0 { - certVerify := &certificateVerifyMsg{} - - key, ok := chainToSend.PrivateKey.(crypto.Signer) - if !ok { - c.sendAlert(alertInternalError) - return fmt.Errorf("tls: client certificate private key of type %T does not implement crypto.Signer", chainToSend.PrivateKey) - } - - var sigType uint8 - var sigHash crypto.Hash - if c.vers >= VersionTLS12 { - signatureAlgorithm, err := selectSignatureScheme(c.vers, chainToSend, certReq.supportedSignatureAlgorithms) - if err != nil { - c.sendAlert(alertIllegalParameter) - return err - } - sigType, sigHash, err = typeAndHashFromSignatureScheme(signatureAlgorithm) - if err != nil { - return c.sendAlert(alertInternalError) - } - certVerify.hasSignatureAlgorithm = true - certVerify.signatureAlgorithm = signatureAlgorithm - } else { - sigType, sigHash, err = legacyTypeAndHashFromPublicKey(key.Public()) - if err != nil { - c.sendAlert(alertIllegalParameter) - return err - } - } - - signed := hs.finishedHash.hashForClientCertificate(sigType, sigHash, hs.masterSecret) - signOpts := crypto.SignerOpts(sigHash) - if sigType == signatureRSAPSS { - signOpts = &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash, Hash: sigHash} - } - certVerify.signature, err = key.Sign(c.config.rand(), signed, signOpts) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - - hs.finishedHash.Write(certVerify.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certVerify.marshal()); err != nil { - return err - } - } - - hs.masterSecret = masterFromPreMasterSecret(c.vers, hs.suite, preMasterSecret, hs.hello.random, hs.serverHello.random) - if err := c.config.writeKeyLog(keyLogLabelTLS12, hs.hello.random, hs.masterSecret); err != nil { - c.sendAlert(alertInternalError) - return errors.New("tls: failed to write to key log: " + err.Error()) - } - - hs.finishedHash.discardHandshakeBuffer() - - return nil -} - -func (hs *clientHandshakeState) establishKeys() error { - c := hs.c - - clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV := - keysFromMasterSecret(c.vers, hs.suite, hs.masterSecret, hs.hello.random, hs.serverHello.random, hs.suite.macLen, hs.suite.keyLen, hs.suite.ivLen) - var clientCipher, serverCipher any - var clientHash, serverHash hash.Hash - if hs.suite.cipher != nil { - clientCipher = hs.suite.cipher(clientKey, clientIV, false /* not for reading */) - clientHash = hs.suite.mac(clientMAC) - serverCipher = hs.suite.cipher(serverKey, serverIV, true /* for reading */) - serverHash = hs.suite.mac(serverMAC) - } else { - clientCipher = hs.suite.aead(clientKey, clientIV) - serverCipher = hs.suite.aead(serverKey, serverIV) - } - - c.in.prepareCipherSpec(c.vers, serverCipher, serverHash) - c.out.prepareCipherSpec(c.vers, clientCipher, clientHash) - return nil -} - -func (hs *clientHandshakeState) serverResumedSession() bool { - // If the server responded with the same sessionId then it means the - // sessionTicket is being used to resume a TLS session. - return hs.session != nil && hs.hello.sessionId != nil && - bytes.Equal(hs.serverHello.sessionId, hs.hello.sessionId) -} - -func (hs *clientHandshakeState) processServerHello() (bool, error) { - c := hs.c - - if err := hs.pickCipherSuite(); err != nil { - return false, err - } - - if hs.serverHello.compressionMethod != compressionNone { - c.sendAlert(alertUnexpectedMessage) - return false, errors.New("tls: server selected unsupported compression format") - } - - if c.handshakes == 0 && hs.serverHello.secureRenegotiationSupported { - c.secureRenegotiation = true - if len(hs.serverHello.secureRenegotiation) != 0 { - c.sendAlert(alertHandshakeFailure) - return false, errors.New("tls: initial handshake had non-empty renegotiation extension") - } - } - - if c.handshakes > 0 && c.secureRenegotiation { - var expectedSecureRenegotiation [24]byte - copy(expectedSecureRenegotiation[:], c.clientFinished[:]) - copy(expectedSecureRenegotiation[12:], c.serverFinished[:]) - if !bytes.Equal(hs.serverHello.secureRenegotiation, expectedSecureRenegotiation[:]) { - c.sendAlert(alertHandshakeFailure) - return false, errors.New("tls: incorrect renegotiation extension contents") - } - } - - if err := checkALPN(hs.hello.alpnProtocols, hs.serverHello.alpnProtocol); err != nil { - c.sendAlert(alertUnsupportedExtension) - return false, err - } - c.clientProtocol = hs.serverHello.alpnProtocol - - c.scts = hs.serverHello.scts - - if !hs.serverResumedSession() { - return false, nil - } - - if hs.session.vers != c.vers { - c.sendAlert(alertHandshakeFailure) - return false, errors.New("tls: server resumed a session with a different version") - } - - if hs.session.cipherSuite != hs.suite.id { - c.sendAlert(alertHandshakeFailure) - return false, errors.New("tls: server resumed a session with a different cipher suite") - } - - // Restore masterSecret, peerCerts, and ocspResponse from previous state - hs.masterSecret = hs.session.masterSecret - c.peerCertificates = hs.session.serverCertificates - c.verifiedChains = hs.session.verifiedChains - c.ocspResponse = hs.session.ocspResponse - // Let the ServerHello SCTs override the session SCTs from the original - // connection, if any are provided - if len(c.scts) == 0 && len(hs.session.scts) != 0 { - c.scts = hs.session.scts - } - - return true, nil -} - -// checkALPN ensure that the server's choice of ALPN protocol is compatible with -// the protocols that we advertised in the Client Hello. -func checkALPN(clientProtos []string, serverProto string) error { - if serverProto == "" { - return nil - } - if len(clientProtos) == 0 { - return errors.New("tls: server advertised unrequested ALPN extension") - } - for _, proto := range clientProtos { - if proto == serverProto { - return nil - } - } - return errors.New("tls: server selected unadvertised ALPN protocol") -} - -func (hs *clientHandshakeState) readFinished(out []byte) error { - c := hs.c - - if err := c.readChangeCipherSpec(); err != nil { - return err - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - serverFinished, ok := msg.(*finishedMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(serverFinished, msg) - } - - verify := hs.finishedHash.serverSum(hs.masterSecret) - if len(verify) != len(serverFinished.verifyData) || - subtle.ConstantTimeCompare(verify, serverFinished.verifyData) != 1 { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: server's Finished message was incorrect") - } - hs.finishedHash.Write(serverFinished.marshal()) - copy(out, verify) - return nil -} - -func (hs *clientHandshakeState) readSessionTicket() error { - if !hs.serverHello.ticketSupported { - return nil - } - - c := hs.c - msg, err := c.readHandshake() - if err != nil { - return err - } - sessionTicketMsg, ok := msg.(*newSessionTicketMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(sessionTicketMsg, msg) - } - hs.finishedHash.Write(sessionTicketMsg.marshal()) - - hs.session = &clientSessionState{ - sessionTicket: sessionTicketMsg.ticket, - vers: c.vers, - cipherSuite: hs.suite.id, - masterSecret: hs.masterSecret, - serverCertificates: c.peerCertificates, - verifiedChains: c.verifiedChains, - receivedAt: c.config.time(), - ocspResponse: c.ocspResponse, - scts: c.scts, - } - - return nil -} - -func (hs *clientHandshakeState) sendFinished(out []byte) error { - c := hs.c - - if _, err := c.writeRecord(recordTypeChangeCipherSpec, []byte{1}); err != nil { - return err - } - - finished := new(finishedMsg) - finished.verifyData = hs.finishedHash.clientSum(hs.masterSecret) - hs.finishedHash.Write(finished.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, finished.marshal()); err != nil { - return err - } - copy(out, finished.verifyData) - return nil -} - -// verifyServerCertificate parses and verifies the provided chain, setting -// c.verifiedChains and c.peerCertificates or sending the appropriate alert. -func (c *Conn) verifyServerCertificate(certificates [][]byte) error { - certs := make([]*x509.Certificate, len(certificates)) - for i, asn1Data := range certificates { - cert, err := x509.ParseCertificate(asn1Data) - if err != nil { - c.sendAlert(alertBadCertificate) - return errors.New("tls: failed to parse certificate from server: " + err.Error()) - } - certs[i] = cert - } - - if !c.config.InsecureSkipVerify { - opts := x509.VerifyOptions{ - Roots: c.config.RootCAs, - CurrentTime: c.config.time(), - DNSName: c.config.ServerName, - Intermediates: x509.NewCertPool(), - } - for _, cert := range certs[1:] { - opts.Intermediates.AddCert(cert) - } - var err error - c.verifiedChains, err = certs[0].Verify(opts) - if err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - switch certs[0].PublicKey.(type) { - case *rsa.PublicKey, *ecdsa.PublicKey, ed25519.PublicKey: - break - default: - c.sendAlert(alertUnsupportedCertificate) - return fmt.Errorf("tls: server's certificate contains an unsupported type of public key: %T", certs[0].PublicKey) - } - - c.peerCertificates = certs - - if c.config.VerifyPeerCertificate != nil { - if err := c.config.VerifyPeerCertificate(certificates, c.verifiedChains); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - return nil -} - -// certificateRequestInfoFromMsg generates a CertificateRequestInfo from a TLS -// <= 1.2 CertificateRequest, making an effort to fill in missing information. -func certificateRequestInfoFromMsg(ctx context.Context, vers uint16, certReq *certificateRequestMsg) *CertificateRequestInfo { - cri := &certificateRequestInfo{ - AcceptableCAs: certReq.certificateAuthorities, - Version: vers, - ctx: ctx, - } - - var rsaAvail, ecAvail bool - for _, certType := range certReq.certificateTypes { - switch certType { - case certTypeRSASign: - rsaAvail = true - case certTypeECDSASign: - ecAvail = true - } - } - - if !certReq.hasSignatureAlgorithm { - // Prior to TLS 1.2, signature schemes did not exist. In this case we - // make up a list based on the acceptable certificate types, to help - // GetClientCertificate and SupportsCertificate select the right certificate. - // The hash part of the SignatureScheme is a lie here, because - // TLS 1.0 and 1.1 always use MD5+SHA1 for RSA and SHA1 for ECDSA. - switch { - case rsaAvail && ecAvail: - cri.SignatureSchemes = []SignatureScheme{ - ECDSAWithP256AndSHA256, ECDSAWithP384AndSHA384, ECDSAWithP521AndSHA512, - PKCS1WithSHA256, PKCS1WithSHA384, PKCS1WithSHA512, PKCS1WithSHA1, - } - case rsaAvail: - cri.SignatureSchemes = []SignatureScheme{ - PKCS1WithSHA256, PKCS1WithSHA384, PKCS1WithSHA512, PKCS1WithSHA1, - } - case ecAvail: - cri.SignatureSchemes = []SignatureScheme{ - ECDSAWithP256AndSHA256, ECDSAWithP384AndSHA384, ECDSAWithP521AndSHA512, - } - } - return toCertificateRequestInfo(cri) - } - - // Filter the signature schemes based on the certificate types. - // See RFC 5246, Section 7.4.4 (where it calls this "somewhat complicated"). - cri.SignatureSchemes = make([]SignatureScheme, 0, len(certReq.supportedSignatureAlgorithms)) - for _, sigScheme := range certReq.supportedSignatureAlgorithms { - sigType, _, err := typeAndHashFromSignatureScheme(sigScheme) - if err != nil { - continue - } - switch sigType { - case signatureECDSA, signatureEd25519: - if ecAvail { - cri.SignatureSchemes = append(cri.SignatureSchemes, sigScheme) - } - case signatureRSAPSS, signaturePKCS1v15: - if rsaAvail { - cri.SignatureSchemes = append(cri.SignatureSchemes, sigScheme) - } - } - } - - return toCertificateRequestInfo(cri) -} - -func (c *Conn) getClientCertificate(cri *CertificateRequestInfo) (*Certificate, error) { - if c.config.GetClientCertificate != nil { - return c.config.GetClientCertificate(cri) - } - - for _, chain := range c.config.Certificates { - if err := cri.SupportsCertificate(&chain); err != nil { - continue - } - return &chain, nil - } - - // No acceptable certificate found. Don't send a certificate. - return new(Certificate), nil -} - -const clientSessionCacheKeyPrefix = "qtls-" - -// clientSessionCacheKey returns a key used to cache sessionTickets that could -// be used to resume previously negotiated TLS sessions with a server. -func clientSessionCacheKey(serverAddr net.Addr, config *config) string { - if len(config.ServerName) > 0 { - return clientSessionCacheKeyPrefix + config.ServerName - } - return clientSessionCacheKeyPrefix + serverAddr.String() -} - -// hostnameInSNI converts name into an appropriate hostname for SNI. -// Literal IP addresses and absolute FQDNs are not permitted as SNI values. -// See RFC 6066, Section 3. -func hostnameInSNI(name string) string { - host := name - if len(host) > 0 && host[0] == '[' && host[len(host)-1] == ']' { - host = host[1 : len(host)-1] - } - if i := strings.LastIndex(host, "%"); i > 0 { - host = host[:i] - } - if net.ParseIP(host) != nil { - return "" - } - for len(name) > 0 && name[len(name)-1] == '.' { - name = name[:len(name)-1] - } - return name -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/handshake_client_tls13.go b/vendor/github.com/quic-go/qtls-go1-18/handshake_client_tls13.go deleted file mode 100644 index 09d602d0b2..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/handshake_client_tls13.go +++ /dev/null @@ -1,734 +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. - -package qtls - -import ( - "bytes" - "context" - "crypto" - "crypto/hmac" - "crypto/rsa" - "encoding/binary" - "errors" - "hash" - "sync/atomic" - "time" - - "golang.org/x/crypto/cryptobyte" -) - -type clientHandshakeStateTLS13 struct { - c *Conn - ctx context.Context - serverHello *serverHelloMsg - hello *clientHelloMsg - ecdheParams ecdheParameters - - session *clientSessionState - earlySecret []byte - binderKey []byte - - certReq *certificateRequestMsgTLS13 - usingPSK bool - sentDummyCCS bool - suite *cipherSuiteTLS13 - transcript hash.Hash - masterSecret []byte - trafficSecret []byte // client_application_traffic_secret_0 -} - -// handshake requires hs.c, hs.hello, hs.serverHello, hs.ecdheParams, and, -// optionally, hs.session, hs.earlySecret and hs.binderKey to be set. -func (hs *clientHandshakeStateTLS13) handshake() error { - c := hs.c - - // The server must not select TLS 1.3 in a renegotiation. See RFC 8446, - // sections 4.1.2 and 4.1.3. - if c.handshakes > 0 { - c.sendAlert(alertProtocolVersion) - return errors.New("tls: server selected TLS 1.3 in a renegotiation") - } - - // Consistency check on the presence of a keyShare and its parameters. - if hs.ecdheParams == nil || len(hs.hello.keyShares) != 1 { - return c.sendAlert(alertInternalError) - } - - if err := hs.checkServerHelloOrHRR(); err != nil { - return err - } - - hs.transcript = hs.suite.hash.New() - hs.transcript.Write(hs.hello.marshal()) - - if bytes.Equal(hs.serverHello.random, helloRetryRequestRandom) { - if err := hs.sendDummyChangeCipherSpec(); err != nil { - return err - } - if err := hs.processHelloRetryRequest(); err != nil { - return err - } - } - - hs.transcript.Write(hs.serverHello.marshal()) - - c.buffering = true - if err := hs.processServerHello(); err != nil { - return err - } - c.updateConnectionState() - if err := hs.sendDummyChangeCipherSpec(); err != nil { - return err - } - if err := hs.establishHandshakeKeys(); err != nil { - return err - } - if err := hs.readServerParameters(); err != nil { - return err - } - if err := hs.readServerCertificate(); err != nil { - return err - } - c.updateConnectionState() - if err := hs.readServerFinished(); err != nil { - return err - } - if err := hs.sendClientCertificate(); err != nil { - return err - } - if err := hs.sendClientFinished(); err != nil { - return err - } - if _, err := c.flush(); err != nil { - return err - } - - atomic.StoreUint32(&c.handshakeStatus, 1) - c.updateConnectionState() - return nil -} - -// checkServerHelloOrHRR does validity checks that apply to both ServerHello and -// HelloRetryRequest messages. It sets hs.suite. -func (hs *clientHandshakeStateTLS13) checkServerHelloOrHRR() error { - c := hs.c - - if hs.serverHello.supportedVersion == 0 { - c.sendAlert(alertMissingExtension) - return errors.New("tls: server selected TLS 1.3 using the legacy version field") - } - - if hs.serverHello.supportedVersion != VersionTLS13 { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server selected an invalid version after a HelloRetryRequest") - } - - if hs.serverHello.vers != VersionTLS12 { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server sent an incorrect legacy version") - } - - if hs.serverHello.ocspStapling || - hs.serverHello.ticketSupported || - hs.serverHello.secureRenegotiationSupported || - len(hs.serverHello.secureRenegotiation) != 0 || - len(hs.serverHello.alpnProtocol) != 0 || - len(hs.serverHello.scts) != 0 { - c.sendAlert(alertUnsupportedExtension) - return errors.New("tls: server sent a ServerHello extension forbidden in TLS 1.3") - } - - if !bytes.Equal(hs.hello.sessionId, hs.serverHello.sessionId) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server did not echo the legacy session ID") - } - - if hs.serverHello.compressionMethod != compressionNone { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server selected unsupported compression format") - } - - selectedSuite := mutualCipherSuiteTLS13(hs.hello.cipherSuites, hs.serverHello.cipherSuite) - if hs.suite != nil && selectedSuite != hs.suite { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server changed cipher suite after a HelloRetryRequest") - } - if selectedSuite == nil { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server chose an unconfigured cipher suite") - } - hs.suite = selectedSuite - c.cipherSuite = hs.suite.id - - return nil -} - -// sendDummyChangeCipherSpec sends a ChangeCipherSpec record for compatibility -// with middleboxes that didn't implement TLS correctly. See RFC 8446, Appendix D.4. -func (hs *clientHandshakeStateTLS13) sendDummyChangeCipherSpec() error { - if hs.sentDummyCCS { - return nil - } - hs.sentDummyCCS = true - - _, err := hs.c.writeRecord(recordTypeChangeCipherSpec, []byte{1}) - return err -} - -// processHelloRetryRequest handles the HRR in hs.serverHello, modifies and -// resends hs.hello, and reads the new ServerHello into hs.serverHello. -func (hs *clientHandshakeStateTLS13) processHelloRetryRequest() error { - c := hs.c - - // The first ClientHello gets double-hashed into the transcript upon a - // HelloRetryRequest. (The idea is that the server might offload transcript - // storage to the client in the cookie.) See RFC 8446, Section 4.4.1. - chHash := hs.transcript.Sum(nil) - hs.transcript.Reset() - hs.transcript.Write([]byte{typeMessageHash, 0, 0, uint8(len(chHash))}) - hs.transcript.Write(chHash) - hs.transcript.Write(hs.serverHello.marshal()) - - // The only HelloRetryRequest extensions we support are key_share and - // cookie, and clients must abort the handshake if the HRR would not result - // in any change in the ClientHello. - if hs.serverHello.selectedGroup == 0 && hs.serverHello.cookie == nil { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server sent an unnecessary HelloRetryRequest message") - } - - if hs.serverHello.cookie != nil { - hs.hello.cookie = hs.serverHello.cookie - } - - if hs.serverHello.serverShare.group != 0 { - c.sendAlert(alertDecodeError) - return errors.New("tls: received malformed key_share extension") - } - - // If the server sent a key_share extension selecting a group, ensure it's - // a group we advertised but did not send a key share for, and send a key - // share for it this time. - if curveID := hs.serverHello.selectedGroup; curveID != 0 { - curveOK := false - for _, id := range hs.hello.supportedCurves { - if id == curveID { - curveOK = true - break - } - } - if !curveOK { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server selected unsupported group") - } - if hs.ecdheParams.CurveID() == curveID { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server sent an unnecessary HelloRetryRequest key_share") - } - if _, ok := curveForCurveID(curveID); curveID != X25519 && !ok { - c.sendAlert(alertInternalError) - return errors.New("tls: CurvePreferences includes unsupported curve") - } - params, err := generateECDHEParameters(c.config.rand(), curveID) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - hs.ecdheParams = params - hs.hello.keyShares = []keyShare{{group: curveID, data: params.PublicKey()}} - } - - hs.hello.raw = nil - if len(hs.hello.pskIdentities) > 0 { - pskSuite := cipherSuiteTLS13ByID(hs.session.cipherSuite) - if pskSuite == nil { - return c.sendAlert(alertInternalError) - } - if pskSuite.hash == hs.suite.hash { - // Update binders and obfuscated_ticket_age. - ticketAge := uint32(c.config.time().Sub(hs.session.receivedAt) / time.Millisecond) - hs.hello.pskIdentities[0].obfuscatedTicketAge = ticketAge + hs.session.ageAdd - - transcript := hs.suite.hash.New() - transcript.Write([]byte{typeMessageHash, 0, 0, uint8(len(chHash))}) - transcript.Write(chHash) - transcript.Write(hs.serverHello.marshal()) - transcript.Write(hs.hello.marshalWithoutBinders()) - pskBinders := [][]byte{hs.suite.finishedHash(hs.binderKey, transcript)} - hs.hello.updateBinders(pskBinders) - } else { - // Server selected a cipher suite incompatible with the PSK. - hs.hello.pskIdentities = nil - hs.hello.pskBinders = nil - } - } - - if hs.hello.earlyData && c.extraConfig != nil && c.extraConfig.Rejected0RTT != nil { - c.extraConfig.Rejected0RTT() - } - hs.hello.earlyData = false // disable 0-RTT - - hs.transcript.Write(hs.hello.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil { - return err - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - - serverHello, ok := msg.(*serverHelloMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(serverHello, msg) - } - hs.serverHello = serverHello - - if err := hs.checkServerHelloOrHRR(); err != nil { - return err - } - - return nil -} - -func (hs *clientHandshakeStateTLS13) processServerHello() error { - c := hs.c - - if bytes.Equal(hs.serverHello.random, helloRetryRequestRandom) { - c.sendAlert(alertUnexpectedMessage) - return errors.New("tls: server sent two HelloRetryRequest messages") - } - - if len(hs.serverHello.cookie) != 0 { - c.sendAlert(alertUnsupportedExtension) - return errors.New("tls: server sent a cookie in a normal ServerHello") - } - - if hs.serverHello.selectedGroup != 0 { - c.sendAlert(alertDecodeError) - return errors.New("tls: malformed key_share extension") - } - - if hs.serverHello.serverShare.group == 0 { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server did not send a key share") - } - if hs.serverHello.serverShare.group != hs.ecdheParams.CurveID() { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server selected unsupported group") - } - - if !hs.serverHello.selectedIdentityPresent { - return nil - } - - if int(hs.serverHello.selectedIdentity) >= len(hs.hello.pskIdentities) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server selected an invalid PSK") - } - - if len(hs.hello.pskIdentities) != 1 || hs.session == nil { - return c.sendAlert(alertInternalError) - } - pskSuite := cipherSuiteTLS13ByID(hs.session.cipherSuite) - if pskSuite == nil { - return c.sendAlert(alertInternalError) - } - if pskSuite.hash != hs.suite.hash { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server selected an invalid PSK and cipher suite pair") - } - - hs.usingPSK = true - c.didResume = true - c.peerCertificates = hs.session.serverCertificates - c.verifiedChains = hs.session.verifiedChains - c.ocspResponse = hs.session.ocspResponse - c.scts = hs.session.scts - return nil -} - -func (hs *clientHandshakeStateTLS13) establishHandshakeKeys() error { - c := hs.c - - sharedKey := hs.ecdheParams.SharedKey(hs.serverHello.serverShare.data) - if sharedKey == nil { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: invalid server key share") - } - - earlySecret := hs.earlySecret - if !hs.usingPSK { - earlySecret = hs.suite.extract(nil, nil) - } - handshakeSecret := hs.suite.extract(sharedKey, - hs.suite.deriveSecret(earlySecret, "derived", nil)) - - clientSecret := hs.suite.deriveSecret(handshakeSecret, - clientHandshakeTrafficLabel, hs.transcript) - c.out.exportKey(EncryptionHandshake, hs.suite, clientSecret) - c.out.setTrafficSecret(hs.suite, clientSecret) - serverSecret := hs.suite.deriveSecret(handshakeSecret, - serverHandshakeTrafficLabel, hs.transcript) - c.in.exportKey(EncryptionHandshake, hs.suite, serverSecret) - c.in.setTrafficSecret(hs.suite, serverSecret) - - err := c.config.writeKeyLog(keyLogLabelClientHandshake, hs.hello.random, clientSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - err = c.config.writeKeyLog(keyLogLabelServerHandshake, hs.hello.random, serverSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - - hs.masterSecret = hs.suite.extract(nil, - hs.suite.deriveSecret(handshakeSecret, "derived", nil)) - - return nil -} - -func (hs *clientHandshakeStateTLS13) readServerParameters() error { - c := hs.c - - msg, err := c.readHandshake() - if err != nil { - return err - } - - encryptedExtensions, ok := msg.(*encryptedExtensionsMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(encryptedExtensions, msg) - } - // Notify the caller if 0-RTT was rejected. - if !encryptedExtensions.earlyData && hs.hello.earlyData && c.extraConfig != nil && c.extraConfig.Rejected0RTT != nil { - c.extraConfig.Rejected0RTT() - } - c.used0RTT = encryptedExtensions.earlyData - if hs.c.extraConfig != nil && hs.c.extraConfig.ReceivedExtensions != nil { - hs.c.extraConfig.ReceivedExtensions(typeEncryptedExtensions, encryptedExtensions.additionalExtensions) - } - hs.transcript.Write(encryptedExtensions.marshal()) - - if err := checkALPN(hs.hello.alpnProtocols, encryptedExtensions.alpnProtocol); err != nil { - c.sendAlert(alertUnsupportedExtension) - return err - } - c.clientProtocol = encryptedExtensions.alpnProtocol - - if c.extraConfig != nil && c.extraConfig.EnforceNextProtoSelection { - if len(encryptedExtensions.alpnProtocol) == 0 { - // the server didn't select an ALPN - c.sendAlert(alertNoApplicationProtocol) - return errors.New("ALPN negotiation failed. Server didn't offer any protocols") - } - } - return nil -} - -func (hs *clientHandshakeStateTLS13) readServerCertificate() error { - c := hs.c - - // Either a PSK or a certificate is always used, but not both. - // See RFC 8446, Section 4.1.1. - if hs.usingPSK { - // Make sure the connection is still being verified whether or not this - // is a resumption. Resumptions currently don't reverify certificates so - // they don't call verifyServerCertificate. See Issue 31641. - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - return nil - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - - certReq, ok := msg.(*certificateRequestMsgTLS13) - if ok { - hs.transcript.Write(certReq.marshal()) - - hs.certReq = certReq - - msg, err = c.readHandshake() - if err != nil { - return err - } - } - - certMsg, ok := msg.(*certificateMsgTLS13) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certMsg, msg) - } - if len(certMsg.certificate.Certificate) == 0 { - c.sendAlert(alertDecodeError) - return errors.New("tls: received empty certificates message") - } - hs.transcript.Write(certMsg.marshal()) - - c.scts = certMsg.certificate.SignedCertificateTimestamps - c.ocspResponse = certMsg.certificate.OCSPStaple - - if err := c.verifyServerCertificate(certMsg.certificate.Certificate); err != nil { - return err - } - - msg, err = c.readHandshake() - if err != nil { - return err - } - - certVerify, ok := msg.(*certificateVerifyMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certVerify, msg) - } - - // See RFC 8446, Section 4.4.3. - if !isSupportedSignatureAlgorithm(certVerify.signatureAlgorithm, supportedSignatureAlgorithms) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: certificate used with invalid signature algorithm") - } - sigType, sigHash, err := typeAndHashFromSignatureScheme(certVerify.signatureAlgorithm) - if err != nil { - return c.sendAlert(alertInternalError) - } - if sigType == signaturePKCS1v15 || sigHash == crypto.SHA1 { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: certificate used with invalid signature algorithm") - } - signed := signedMessage(sigHash, serverSignatureContext, hs.transcript) - if err := verifyHandshakeSignature(sigType, c.peerCertificates[0].PublicKey, - sigHash, signed, certVerify.signature); err != nil { - c.sendAlert(alertDecryptError) - return errors.New("tls: invalid signature by the server certificate: " + err.Error()) - } - - hs.transcript.Write(certVerify.marshal()) - - return nil -} - -func (hs *clientHandshakeStateTLS13) readServerFinished() error { - c := hs.c - - msg, err := c.readHandshake() - if err != nil { - return err - } - - finished, ok := msg.(*finishedMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(finished, msg) - } - - expectedMAC := hs.suite.finishedHash(c.in.trafficSecret, hs.transcript) - if !hmac.Equal(expectedMAC, finished.verifyData) { - c.sendAlert(alertDecryptError) - return errors.New("tls: invalid server finished hash") - } - - hs.transcript.Write(finished.marshal()) - - // Derive secrets that take context through the server Finished. - - hs.trafficSecret = hs.suite.deriveSecret(hs.masterSecret, - clientApplicationTrafficLabel, hs.transcript) - serverSecret := hs.suite.deriveSecret(hs.masterSecret, - serverApplicationTrafficLabel, hs.transcript) - c.in.exportKey(EncryptionApplication, hs.suite, serverSecret) - c.in.setTrafficSecret(hs.suite, serverSecret) - - err = c.config.writeKeyLog(keyLogLabelClientTraffic, hs.hello.random, hs.trafficSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - err = c.config.writeKeyLog(keyLogLabelServerTraffic, hs.hello.random, serverSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - - c.ekm = hs.suite.exportKeyingMaterial(hs.masterSecret, hs.transcript) - - return nil -} - -func (hs *clientHandshakeStateTLS13) sendClientCertificate() error { - c := hs.c - - if hs.certReq == nil { - return nil - } - - cert, err := c.getClientCertificate(toCertificateRequestInfo(&certificateRequestInfo{ - AcceptableCAs: hs.certReq.certificateAuthorities, - SignatureSchemes: hs.certReq.supportedSignatureAlgorithms, - Version: c.vers, - ctx: hs.ctx, - })) - if err != nil { - return err - } - - certMsg := new(certificateMsgTLS13) - - certMsg.certificate = *cert - certMsg.scts = hs.certReq.scts && len(cert.SignedCertificateTimestamps) > 0 - certMsg.ocspStapling = hs.certReq.ocspStapling && len(cert.OCSPStaple) > 0 - - hs.transcript.Write(certMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certMsg.marshal()); err != nil { - return err - } - - // If we sent an empty certificate message, skip the CertificateVerify. - if len(cert.Certificate) == 0 { - return nil - } - - certVerifyMsg := new(certificateVerifyMsg) - certVerifyMsg.hasSignatureAlgorithm = true - - certVerifyMsg.signatureAlgorithm, err = selectSignatureScheme(c.vers, cert, hs.certReq.supportedSignatureAlgorithms) - if err != nil { - // getClientCertificate returned a certificate incompatible with the - // CertificateRequestInfo supported signature algorithms. - c.sendAlert(alertHandshakeFailure) - return err - } - - sigType, sigHash, err := typeAndHashFromSignatureScheme(certVerifyMsg.signatureAlgorithm) - if err != nil { - return c.sendAlert(alertInternalError) - } - - signed := signedMessage(sigHash, clientSignatureContext, hs.transcript) - signOpts := crypto.SignerOpts(sigHash) - if sigType == signatureRSAPSS { - signOpts = &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash, Hash: sigHash} - } - sig, err := cert.PrivateKey.(crypto.Signer).Sign(c.config.rand(), signed, signOpts) - if err != nil { - c.sendAlert(alertInternalError) - return errors.New("tls: failed to sign handshake: " + err.Error()) - } - certVerifyMsg.signature = sig - - hs.transcript.Write(certVerifyMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certVerifyMsg.marshal()); err != nil { - return err - } - - return nil -} - -func (hs *clientHandshakeStateTLS13) sendClientFinished() error { - c := hs.c - - finished := &finishedMsg{ - verifyData: hs.suite.finishedHash(c.out.trafficSecret, hs.transcript), - } - - hs.transcript.Write(finished.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, finished.marshal()); err != nil { - return err - } - - c.out.exportKey(EncryptionApplication, hs.suite, hs.trafficSecret) - c.out.setTrafficSecret(hs.suite, hs.trafficSecret) - - if !c.config.SessionTicketsDisabled && c.config.ClientSessionCache != nil { - c.resumptionSecret = hs.suite.deriveSecret(hs.masterSecret, - resumptionLabel, hs.transcript) - } - - return nil -} - -func (c *Conn) handleNewSessionTicket(msg *newSessionTicketMsgTLS13) error { - if !c.isClient { - c.sendAlert(alertUnexpectedMessage) - return errors.New("tls: received new session ticket from a client") - } - - if c.config.SessionTicketsDisabled || c.config.ClientSessionCache == nil { - return nil - } - - // See RFC 8446, Section 4.6.1. - if msg.lifetime == 0 { - return nil - } - lifetime := time.Duration(msg.lifetime) * time.Second - if lifetime > maxSessionTicketLifetime { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: received a session ticket with invalid lifetime") - } - - cipherSuite := cipherSuiteTLS13ByID(c.cipherSuite) - if cipherSuite == nil || c.resumptionSecret == nil { - return c.sendAlert(alertInternalError) - } - - // We need to save the max_early_data_size that the server sent us, in order - // to decide if we're going to try 0-RTT with this ticket. - // However, at the same time, the qtls.ClientSessionTicket needs to be equal to - // the tls.ClientSessionTicket, so we can't just add a new field to the struct. - // We therefore abuse the nonce field (which is a byte slice) - nonceWithEarlyData := make([]byte, len(msg.nonce)+4) - binary.BigEndian.PutUint32(nonceWithEarlyData, msg.maxEarlyData) - copy(nonceWithEarlyData[4:], msg.nonce) - - var appData []byte - if c.extraConfig != nil && c.extraConfig.GetAppDataForSessionState != nil { - appData = c.extraConfig.GetAppDataForSessionState() - } - var b cryptobyte.Builder - b.AddUint16(clientSessionStateVersion) // revision - b.AddUint32(msg.maxEarlyData) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(appData) - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(msg.nonce) - }) - - // Save the resumption_master_secret and nonce instead of deriving the PSK - // to do the least amount of work on NewSessionTicket messages before we - // know if the ticket will be used. Forward secrecy of resumed connections - // is guaranteed by the requirement for pskModeDHE. - session := &clientSessionState{ - sessionTicket: msg.label, - vers: c.vers, - cipherSuite: c.cipherSuite, - masterSecret: c.resumptionSecret, - serverCertificates: c.peerCertificates, - verifiedChains: c.verifiedChains, - receivedAt: c.config.time(), - nonce: b.BytesOrPanic(), - useBy: c.config.time().Add(lifetime), - ageAdd: msg.ageAdd, - ocspResponse: c.ocspResponse, - scts: c.scts, - } - - cacheKey := clientSessionCacheKey(c.conn.RemoteAddr(), c.config) - c.config.ClientSessionCache.Put(cacheKey, toClientSessionState(session)) - - return nil -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/handshake_messages.go b/vendor/github.com/quic-go/qtls-go1-18/handshake_messages.go deleted file mode 100644 index 5f87d4b81b..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/handshake_messages.go +++ /dev/null @@ -1,1831 +0,0 @@ -// Copyright 2009 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 qtls - -import ( - "fmt" - "strings" - - "golang.org/x/crypto/cryptobyte" -) - -// The marshalingFunction type is an adapter to allow the use of ordinary -// functions as cryptobyte.MarshalingValue. -type marshalingFunction func(b *cryptobyte.Builder) error - -func (f marshalingFunction) Marshal(b *cryptobyte.Builder) error { - return f(b) -} - -// addBytesWithLength appends a sequence of bytes to the cryptobyte.Builder. If -// the length of the sequence is not the value specified, it produces an error. -func addBytesWithLength(b *cryptobyte.Builder, v []byte, n int) { - b.AddValue(marshalingFunction(func(b *cryptobyte.Builder) error { - if len(v) != n { - return fmt.Errorf("invalid value length: expected %d, got %d", n, len(v)) - } - b.AddBytes(v) - return nil - })) -} - -// addUint64 appends a big-endian, 64-bit value to the cryptobyte.Builder. -func addUint64(b *cryptobyte.Builder, v uint64) { - b.AddUint32(uint32(v >> 32)) - b.AddUint32(uint32(v)) -} - -// readUint64 decodes a big-endian, 64-bit value into out and advances over it. -// It reports whether the read was successful. -func readUint64(s *cryptobyte.String, out *uint64) bool { - var hi, lo uint32 - if !s.ReadUint32(&hi) || !s.ReadUint32(&lo) { - return false - } - *out = uint64(hi)<<32 | uint64(lo) - return true -} - -// readUint8LengthPrefixed acts like s.ReadUint8LengthPrefixed, but targets a -// []byte instead of a cryptobyte.String. -func readUint8LengthPrefixed(s *cryptobyte.String, out *[]byte) bool { - return s.ReadUint8LengthPrefixed((*cryptobyte.String)(out)) -} - -// readUint16LengthPrefixed acts like s.ReadUint16LengthPrefixed, but targets a -// []byte instead of a cryptobyte.String. -func readUint16LengthPrefixed(s *cryptobyte.String, out *[]byte) bool { - return s.ReadUint16LengthPrefixed((*cryptobyte.String)(out)) -} - -// readUint24LengthPrefixed acts like s.ReadUint24LengthPrefixed, but targets a -// []byte instead of a cryptobyte.String. -func readUint24LengthPrefixed(s *cryptobyte.String, out *[]byte) bool { - return s.ReadUint24LengthPrefixed((*cryptobyte.String)(out)) -} - -type clientHelloMsg struct { - raw []byte - vers uint16 - random []byte - sessionId []byte - cipherSuites []uint16 - compressionMethods []uint8 - serverName string - ocspStapling bool - supportedCurves []CurveID - supportedPoints []uint8 - ticketSupported bool - sessionTicket []uint8 - supportedSignatureAlgorithms []SignatureScheme - supportedSignatureAlgorithmsCert []SignatureScheme - secureRenegotiationSupported bool - secureRenegotiation []byte - alpnProtocols []string - scts bool - supportedVersions []uint16 - cookie []byte - keyShares []keyShare - earlyData bool - pskModes []uint8 - pskIdentities []pskIdentity - pskBinders [][]byte - additionalExtensions []Extension -} - -func (m *clientHelloMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeClientHello) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(m.vers) - addBytesWithLength(b, m.random, 32) - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.sessionId) - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, suite := range m.cipherSuites { - b.AddUint16(suite) - } - }) - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.compressionMethods) - }) - - // If extensions aren't present, omit them. - var extensionsPresent bool - bWithoutExtensions := *b - - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if len(m.serverName) > 0 { - // RFC 6066, Section 3 - b.AddUint16(extensionServerName) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8(0) // name_type = host_name - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(m.serverName)) - }) - }) - }) - } - if m.ocspStapling { - // RFC 4366, Section 3.6 - b.AddUint16(extensionStatusRequest) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8(1) // status_type = ocsp - b.AddUint16(0) // empty responder_id_list - b.AddUint16(0) // empty request_extensions - }) - } - if len(m.supportedCurves) > 0 { - // RFC 4492, sections 5.1.1 and RFC 8446, Section 4.2.7 - b.AddUint16(extensionSupportedCurves) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, curve := range m.supportedCurves { - b.AddUint16(uint16(curve)) - } - }) - }) - } - if len(m.supportedPoints) > 0 { - // RFC 4492, Section 5.1.2 - b.AddUint16(extensionSupportedPoints) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.supportedPoints) - }) - }) - } - if m.ticketSupported { - // RFC 5077, Section 3.2 - b.AddUint16(extensionSessionTicket) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.sessionTicket) - }) - } - if len(m.supportedSignatureAlgorithms) > 0 { - // RFC 5246, Section 7.4.1.4.1 - b.AddUint16(extensionSignatureAlgorithms) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sigAlgo := range m.supportedSignatureAlgorithms { - b.AddUint16(uint16(sigAlgo)) - } - }) - }) - } - if len(m.supportedSignatureAlgorithmsCert) > 0 { - // RFC 8446, Section 4.2.3 - b.AddUint16(extensionSignatureAlgorithmsCert) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sigAlgo := range m.supportedSignatureAlgorithmsCert { - b.AddUint16(uint16(sigAlgo)) - } - }) - }) - } - if m.secureRenegotiationSupported { - // RFC 5746, Section 3.2 - b.AddUint16(extensionRenegotiationInfo) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.secureRenegotiation) - }) - }) - } - if len(m.alpnProtocols) > 0 { - // RFC 7301, Section 3.1 - b.AddUint16(extensionALPN) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, proto := range m.alpnProtocols { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(proto)) - }) - } - }) - }) - } - if m.scts { - // RFC 6962, Section 3.3.1 - b.AddUint16(extensionSCT) - b.AddUint16(0) // empty extension_data - } - if len(m.supportedVersions) > 0 { - // RFC 8446, Section 4.2.1 - b.AddUint16(extensionSupportedVersions) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - for _, vers := range m.supportedVersions { - b.AddUint16(vers) - } - }) - }) - } - if len(m.cookie) > 0 { - // RFC 8446, Section 4.2.2 - b.AddUint16(extensionCookie) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.cookie) - }) - }) - } - if len(m.keyShares) > 0 { - // RFC 8446, Section 4.2.8 - b.AddUint16(extensionKeyShare) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, ks := range m.keyShares { - b.AddUint16(uint16(ks.group)) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(ks.data) - }) - } - }) - }) - } - if m.earlyData { - // RFC 8446, Section 4.2.10 - b.AddUint16(extensionEarlyData) - b.AddUint16(0) // empty extension_data - } - if len(m.pskModes) > 0 { - // RFC 8446, Section 4.2.9 - b.AddUint16(extensionPSKModes) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.pskModes) - }) - }) - } - for _, ext := range m.additionalExtensions { - b.AddUint16(ext.Type) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(ext.Data) - }) - } - if len(m.pskIdentities) > 0 { // pre_shared_key must be the last extension - // RFC 8446, Section 4.2.11 - b.AddUint16(extensionPreSharedKey) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, psk := range m.pskIdentities { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(psk.label) - }) - b.AddUint32(psk.obfuscatedTicketAge) - } - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, binder := range m.pskBinders { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(binder) - }) - } - }) - }) - } - - extensionsPresent = len(b.BytesOrPanic()) > 2 - }) - - if !extensionsPresent { - *b = bWithoutExtensions - } - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -// marshalWithoutBinders returns the ClientHello through the -// PreSharedKeyExtension.identities field, according to RFC 8446, Section -// 4.2.11.2. Note that m.pskBinders must be set to slices of the correct length. -func (m *clientHelloMsg) marshalWithoutBinders() []byte { - bindersLen := 2 // uint16 length prefix - for _, binder := range m.pskBinders { - bindersLen += 1 // uint8 length prefix - bindersLen += len(binder) - } - - fullMessage := m.marshal() - return fullMessage[:len(fullMessage)-bindersLen] -} - -// updateBinders updates the m.pskBinders field, if necessary updating the -// cached marshaled representation. The supplied binders must have the same -// length as the current m.pskBinders. -func (m *clientHelloMsg) updateBinders(pskBinders [][]byte) { - if len(pskBinders) != len(m.pskBinders) { - panic("tls: internal error: pskBinders length mismatch") - } - for i := range m.pskBinders { - if len(pskBinders[i]) != len(m.pskBinders[i]) { - panic("tls: internal error: pskBinders length mismatch") - } - } - m.pskBinders = pskBinders - if m.raw != nil { - lenWithoutBinders := len(m.marshalWithoutBinders()) - b := cryptobyte.NewFixedBuilder(m.raw[:lenWithoutBinders]) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, binder := range m.pskBinders { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(binder) - }) - } - }) - if out, err := b.Bytes(); err != nil || len(out) != len(m.raw) { - panic("tls: internal error: failed to update binders") - } - } -} - -func (m *clientHelloMsg) unmarshal(data []byte) bool { - *m = clientHelloMsg{raw: data} - s := cryptobyte.String(data) - - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint16(&m.vers) || !s.ReadBytes(&m.random, 32) || - !readUint8LengthPrefixed(&s, &m.sessionId) { - return false - } - - var cipherSuites cryptobyte.String - if !s.ReadUint16LengthPrefixed(&cipherSuites) { - return false - } - m.cipherSuites = []uint16{} - m.secureRenegotiationSupported = false - for !cipherSuites.Empty() { - var suite uint16 - if !cipherSuites.ReadUint16(&suite) { - return false - } - if suite == scsvRenegotiation { - m.secureRenegotiationSupported = true - } - m.cipherSuites = append(m.cipherSuites, suite) - } - - if !readUint8LengthPrefixed(&s, &m.compressionMethods) { - return false - } - - if s.Empty() { - // ClientHello is optionally followed by extension data - return true - } - - var extensions cryptobyte.String - if !s.ReadUint16LengthPrefixed(&extensions) || !s.Empty() { - return false - } - - for !extensions.Empty() { - var ext uint16 - var extData cryptobyte.String - if !extensions.ReadUint16(&ext) || - !extensions.ReadUint16LengthPrefixed(&extData) { - return false - } - - switch ext { - case extensionServerName: - // RFC 6066, Section 3 - var nameList cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&nameList) || nameList.Empty() { - return false - } - for !nameList.Empty() { - var nameType uint8 - var serverName cryptobyte.String - if !nameList.ReadUint8(&nameType) || - !nameList.ReadUint16LengthPrefixed(&serverName) || - serverName.Empty() { - return false - } - if nameType != 0 { - continue - } - if len(m.serverName) != 0 { - // Multiple names of the same name_type are prohibited. - return false - } - m.serverName = string(serverName) - // An SNI value may not include a trailing dot. - if strings.HasSuffix(m.serverName, ".") { - return false - } - } - case extensionStatusRequest: - // RFC 4366, Section 3.6 - var statusType uint8 - var ignored cryptobyte.String - if !extData.ReadUint8(&statusType) || - !extData.ReadUint16LengthPrefixed(&ignored) || - !extData.ReadUint16LengthPrefixed(&ignored) { - return false - } - m.ocspStapling = statusType == statusTypeOCSP - case extensionSupportedCurves: - // RFC 4492, sections 5.1.1 and RFC 8446, Section 4.2.7 - var curves cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&curves) || curves.Empty() { - return false - } - for !curves.Empty() { - var curve uint16 - if !curves.ReadUint16(&curve) { - return false - } - m.supportedCurves = append(m.supportedCurves, CurveID(curve)) - } - case extensionSupportedPoints: - // RFC 4492, Section 5.1.2 - if !readUint8LengthPrefixed(&extData, &m.supportedPoints) || - len(m.supportedPoints) == 0 { - return false - } - case extensionSessionTicket: - // RFC 5077, Section 3.2 - m.ticketSupported = true - extData.ReadBytes(&m.sessionTicket, len(extData)) - case extensionSignatureAlgorithms: - // RFC 5246, Section 7.4.1.4.1 - var sigAndAlgs cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&sigAndAlgs) || sigAndAlgs.Empty() { - return false - } - for !sigAndAlgs.Empty() { - var sigAndAlg uint16 - if !sigAndAlgs.ReadUint16(&sigAndAlg) { - return false - } - m.supportedSignatureAlgorithms = append( - m.supportedSignatureAlgorithms, SignatureScheme(sigAndAlg)) - } - case extensionSignatureAlgorithmsCert: - // RFC 8446, Section 4.2.3 - var sigAndAlgs cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&sigAndAlgs) || sigAndAlgs.Empty() { - return false - } - for !sigAndAlgs.Empty() { - var sigAndAlg uint16 - if !sigAndAlgs.ReadUint16(&sigAndAlg) { - return false - } - m.supportedSignatureAlgorithmsCert = append( - m.supportedSignatureAlgorithmsCert, SignatureScheme(sigAndAlg)) - } - case extensionRenegotiationInfo: - // RFC 5746, Section 3.2 - if !readUint8LengthPrefixed(&extData, &m.secureRenegotiation) { - return false - } - m.secureRenegotiationSupported = true - case extensionALPN: - // RFC 7301, Section 3.1 - var protoList cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&protoList) || protoList.Empty() { - return false - } - for !protoList.Empty() { - var proto cryptobyte.String - if !protoList.ReadUint8LengthPrefixed(&proto) || proto.Empty() { - return false - } - m.alpnProtocols = append(m.alpnProtocols, string(proto)) - } - case extensionSCT: - // RFC 6962, Section 3.3.1 - m.scts = true - case extensionSupportedVersions: - // RFC 8446, Section 4.2.1 - var versList cryptobyte.String - if !extData.ReadUint8LengthPrefixed(&versList) || versList.Empty() { - return false - } - for !versList.Empty() { - var vers uint16 - if !versList.ReadUint16(&vers) { - return false - } - m.supportedVersions = append(m.supportedVersions, vers) - } - case extensionCookie: - // RFC 8446, Section 4.2.2 - if !readUint16LengthPrefixed(&extData, &m.cookie) || - len(m.cookie) == 0 { - return false - } - case extensionKeyShare: - // RFC 8446, Section 4.2.8 - var clientShares cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&clientShares) { - return false - } - for !clientShares.Empty() { - var ks keyShare - if !clientShares.ReadUint16((*uint16)(&ks.group)) || - !readUint16LengthPrefixed(&clientShares, &ks.data) || - len(ks.data) == 0 { - return false - } - m.keyShares = append(m.keyShares, ks) - } - case extensionEarlyData: - // RFC 8446, Section 4.2.10 - m.earlyData = true - case extensionPSKModes: - // RFC 8446, Section 4.2.9 - if !readUint8LengthPrefixed(&extData, &m.pskModes) { - return false - } - case extensionPreSharedKey: - // RFC 8446, Section 4.2.11 - if !extensions.Empty() { - return false // pre_shared_key must be the last extension - } - var identities cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&identities) || identities.Empty() { - return false - } - for !identities.Empty() { - var psk pskIdentity - if !readUint16LengthPrefixed(&identities, &psk.label) || - !identities.ReadUint32(&psk.obfuscatedTicketAge) || - len(psk.label) == 0 { - return false - } - m.pskIdentities = append(m.pskIdentities, psk) - } - var binders cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&binders) || binders.Empty() { - return false - } - for !binders.Empty() { - var binder []byte - if !readUint8LengthPrefixed(&binders, &binder) || - len(binder) == 0 { - return false - } - m.pskBinders = append(m.pskBinders, binder) - } - default: - m.additionalExtensions = append(m.additionalExtensions, Extension{Type: ext, Data: extData}) - continue - } - - if !extData.Empty() { - return false - } - } - - return true -} - -type serverHelloMsg struct { - raw []byte - vers uint16 - random []byte - sessionId []byte - cipherSuite uint16 - compressionMethod uint8 - ocspStapling bool - ticketSupported bool - secureRenegotiationSupported bool - secureRenegotiation []byte - alpnProtocol string - scts [][]byte - supportedVersion uint16 - serverShare keyShare - selectedIdentityPresent bool - selectedIdentity uint16 - supportedPoints []uint8 - - // HelloRetryRequest extensions - cookie []byte - selectedGroup CurveID -} - -func (m *serverHelloMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeServerHello) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(m.vers) - addBytesWithLength(b, m.random, 32) - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.sessionId) - }) - b.AddUint16(m.cipherSuite) - b.AddUint8(m.compressionMethod) - - // If extensions aren't present, omit them. - var extensionsPresent bool - bWithoutExtensions := *b - - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if m.ocspStapling { - b.AddUint16(extensionStatusRequest) - b.AddUint16(0) // empty extension_data - } - if m.ticketSupported { - b.AddUint16(extensionSessionTicket) - b.AddUint16(0) // empty extension_data - } - if m.secureRenegotiationSupported { - b.AddUint16(extensionRenegotiationInfo) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.secureRenegotiation) - }) - }) - } - if len(m.alpnProtocol) > 0 { - b.AddUint16(extensionALPN) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(m.alpnProtocol)) - }) - }) - }) - } - if len(m.scts) > 0 { - b.AddUint16(extensionSCT) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sct := range m.scts { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(sct) - }) - } - }) - }) - } - if m.supportedVersion != 0 { - b.AddUint16(extensionSupportedVersions) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(m.supportedVersion) - }) - } - if m.serverShare.group != 0 { - b.AddUint16(extensionKeyShare) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(uint16(m.serverShare.group)) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.serverShare.data) - }) - }) - } - if m.selectedIdentityPresent { - b.AddUint16(extensionPreSharedKey) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(m.selectedIdentity) - }) - } - - if len(m.cookie) > 0 { - b.AddUint16(extensionCookie) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.cookie) - }) - }) - } - if m.selectedGroup != 0 { - b.AddUint16(extensionKeyShare) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(uint16(m.selectedGroup)) - }) - } - if len(m.supportedPoints) > 0 { - b.AddUint16(extensionSupportedPoints) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.supportedPoints) - }) - }) - } - - extensionsPresent = len(b.BytesOrPanic()) > 2 - }) - - if !extensionsPresent { - *b = bWithoutExtensions - } - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *serverHelloMsg) unmarshal(data []byte) bool { - *m = serverHelloMsg{raw: data} - s := cryptobyte.String(data) - - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint16(&m.vers) || !s.ReadBytes(&m.random, 32) || - !readUint8LengthPrefixed(&s, &m.sessionId) || - !s.ReadUint16(&m.cipherSuite) || - !s.ReadUint8(&m.compressionMethod) { - return false - } - - if s.Empty() { - // ServerHello is optionally followed by extension data - return true - } - - var extensions cryptobyte.String - if !s.ReadUint16LengthPrefixed(&extensions) || !s.Empty() { - return false - } - - for !extensions.Empty() { - var extension uint16 - var extData cryptobyte.String - if !extensions.ReadUint16(&extension) || - !extensions.ReadUint16LengthPrefixed(&extData) { - return false - } - - switch extension { - case extensionStatusRequest: - m.ocspStapling = true - case extensionSessionTicket: - m.ticketSupported = true - case extensionRenegotiationInfo: - if !readUint8LengthPrefixed(&extData, &m.secureRenegotiation) { - return false - } - m.secureRenegotiationSupported = true - case extensionALPN: - var protoList cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&protoList) || protoList.Empty() { - return false - } - var proto cryptobyte.String - if !protoList.ReadUint8LengthPrefixed(&proto) || - proto.Empty() || !protoList.Empty() { - return false - } - m.alpnProtocol = string(proto) - case extensionSCT: - var sctList cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&sctList) || sctList.Empty() { - return false - } - for !sctList.Empty() { - var sct []byte - if !readUint16LengthPrefixed(&sctList, &sct) || - len(sct) == 0 { - return false - } - m.scts = append(m.scts, sct) - } - case extensionSupportedVersions: - if !extData.ReadUint16(&m.supportedVersion) { - return false - } - case extensionCookie: - if !readUint16LengthPrefixed(&extData, &m.cookie) || - len(m.cookie) == 0 { - return false - } - case extensionKeyShare: - // This extension has different formats in SH and HRR, accept either - // and let the handshake logic decide. See RFC 8446, Section 4.2.8. - if len(extData) == 2 { - if !extData.ReadUint16((*uint16)(&m.selectedGroup)) { - return false - } - } else { - if !extData.ReadUint16((*uint16)(&m.serverShare.group)) || - !readUint16LengthPrefixed(&extData, &m.serverShare.data) { - return false - } - } - case extensionPreSharedKey: - m.selectedIdentityPresent = true - if !extData.ReadUint16(&m.selectedIdentity) { - return false - } - case extensionSupportedPoints: - // RFC 4492, Section 5.1.2 - if !readUint8LengthPrefixed(&extData, &m.supportedPoints) || - len(m.supportedPoints) == 0 { - return false - } - default: - // Ignore unknown extensions. - continue - } - - if !extData.Empty() { - return false - } - } - - return true -} - -type encryptedExtensionsMsg struct { - raw []byte - alpnProtocol string - earlyData bool - - additionalExtensions []Extension -} - -func (m *encryptedExtensionsMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeEncryptedExtensions) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if len(m.alpnProtocol) > 0 { - b.AddUint16(extensionALPN) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(m.alpnProtocol)) - }) - }) - }) - } - if m.earlyData { - // RFC 8446, Section 4.2.10 - b.AddUint16(extensionEarlyData) - b.AddUint16(0) // empty extension_data - } - for _, ext := range m.additionalExtensions { - b.AddUint16(ext.Type) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(ext.Data) - }) - } - }) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *encryptedExtensionsMsg) unmarshal(data []byte) bool { - *m = encryptedExtensionsMsg{raw: data} - s := cryptobyte.String(data) - - var extensions cryptobyte.String - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint16LengthPrefixed(&extensions) || !s.Empty() { - return false - } - - for !extensions.Empty() { - var ext uint16 - var extData cryptobyte.String - if !extensions.ReadUint16(&ext) || - !extensions.ReadUint16LengthPrefixed(&extData) { - return false - } - - switch ext { - case extensionALPN: - var protoList cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&protoList) || protoList.Empty() { - return false - } - var proto cryptobyte.String - if !protoList.ReadUint8LengthPrefixed(&proto) || - proto.Empty() || !protoList.Empty() { - return false - } - m.alpnProtocol = string(proto) - case extensionEarlyData: - m.earlyData = true - default: - m.additionalExtensions = append(m.additionalExtensions, Extension{Type: ext, Data: extData}) - continue - } - - if !extData.Empty() { - return false - } - } - - return true -} - -type endOfEarlyDataMsg struct{} - -func (m *endOfEarlyDataMsg) marshal() []byte { - x := make([]byte, 4) - x[0] = typeEndOfEarlyData - return x -} - -func (m *endOfEarlyDataMsg) unmarshal(data []byte) bool { - return len(data) == 4 -} - -type keyUpdateMsg struct { - raw []byte - updateRequested bool -} - -func (m *keyUpdateMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeKeyUpdate) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - if m.updateRequested { - b.AddUint8(1) - } else { - b.AddUint8(0) - } - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *keyUpdateMsg) unmarshal(data []byte) bool { - m.raw = data - s := cryptobyte.String(data) - - var updateRequested uint8 - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint8(&updateRequested) || !s.Empty() { - return false - } - switch updateRequested { - case 0: - m.updateRequested = false - case 1: - m.updateRequested = true - default: - return false - } - return true -} - -type newSessionTicketMsgTLS13 struct { - raw []byte - lifetime uint32 - ageAdd uint32 - nonce []byte - label []byte - maxEarlyData uint32 -} - -func (m *newSessionTicketMsgTLS13) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeNewSessionTicket) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint32(m.lifetime) - b.AddUint32(m.ageAdd) - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.nonce) - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.label) - }) - - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if m.maxEarlyData > 0 { - b.AddUint16(extensionEarlyData) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint32(m.maxEarlyData) - }) - } - }) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *newSessionTicketMsgTLS13) unmarshal(data []byte) bool { - *m = newSessionTicketMsgTLS13{raw: data} - s := cryptobyte.String(data) - - var extensions cryptobyte.String - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint32(&m.lifetime) || - !s.ReadUint32(&m.ageAdd) || - !readUint8LengthPrefixed(&s, &m.nonce) || - !readUint16LengthPrefixed(&s, &m.label) || - !s.ReadUint16LengthPrefixed(&extensions) || - !s.Empty() { - return false - } - - for !extensions.Empty() { - var extension uint16 - var extData cryptobyte.String - if !extensions.ReadUint16(&extension) || - !extensions.ReadUint16LengthPrefixed(&extData) { - return false - } - - switch extension { - case extensionEarlyData: - if !extData.ReadUint32(&m.maxEarlyData) { - return false - } - default: - // Ignore unknown extensions. - continue - } - - if !extData.Empty() { - return false - } - } - - return true -} - -type certificateRequestMsgTLS13 struct { - raw []byte - ocspStapling bool - scts bool - supportedSignatureAlgorithms []SignatureScheme - supportedSignatureAlgorithmsCert []SignatureScheme - certificateAuthorities [][]byte -} - -func (m *certificateRequestMsgTLS13) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeCertificateRequest) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - // certificate_request_context (SHALL be zero length unless used for - // post-handshake authentication) - b.AddUint8(0) - - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if m.ocspStapling { - b.AddUint16(extensionStatusRequest) - b.AddUint16(0) // empty extension_data - } - if m.scts { - // RFC 8446, Section 4.4.2.1 makes no mention of - // signed_certificate_timestamp in CertificateRequest, but - // "Extensions in the Certificate message from the client MUST - // correspond to extensions in the CertificateRequest message - // from the server." and it appears in the table in Section 4.2. - b.AddUint16(extensionSCT) - b.AddUint16(0) // empty extension_data - } - if len(m.supportedSignatureAlgorithms) > 0 { - b.AddUint16(extensionSignatureAlgorithms) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sigAlgo := range m.supportedSignatureAlgorithms { - b.AddUint16(uint16(sigAlgo)) - } - }) - }) - } - if len(m.supportedSignatureAlgorithmsCert) > 0 { - b.AddUint16(extensionSignatureAlgorithmsCert) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sigAlgo := range m.supportedSignatureAlgorithmsCert { - b.AddUint16(uint16(sigAlgo)) - } - }) - }) - } - if len(m.certificateAuthorities) > 0 { - b.AddUint16(extensionCertificateAuthorities) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, ca := range m.certificateAuthorities { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(ca) - }) - } - }) - }) - } - }) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *certificateRequestMsgTLS13) unmarshal(data []byte) bool { - *m = certificateRequestMsgTLS13{raw: data} - s := cryptobyte.String(data) - - var context, extensions cryptobyte.String - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint8LengthPrefixed(&context) || !context.Empty() || - !s.ReadUint16LengthPrefixed(&extensions) || - !s.Empty() { - return false - } - - for !extensions.Empty() { - var extension uint16 - var extData cryptobyte.String - if !extensions.ReadUint16(&extension) || - !extensions.ReadUint16LengthPrefixed(&extData) { - return false - } - - switch extension { - case extensionStatusRequest: - m.ocspStapling = true - case extensionSCT: - m.scts = true - case extensionSignatureAlgorithms: - var sigAndAlgs cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&sigAndAlgs) || sigAndAlgs.Empty() { - return false - } - for !sigAndAlgs.Empty() { - var sigAndAlg uint16 - if !sigAndAlgs.ReadUint16(&sigAndAlg) { - return false - } - m.supportedSignatureAlgorithms = append( - m.supportedSignatureAlgorithms, SignatureScheme(sigAndAlg)) - } - case extensionSignatureAlgorithmsCert: - var sigAndAlgs cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&sigAndAlgs) || sigAndAlgs.Empty() { - return false - } - for !sigAndAlgs.Empty() { - var sigAndAlg uint16 - if !sigAndAlgs.ReadUint16(&sigAndAlg) { - return false - } - m.supportedSignatureAlgorithmsCert = append( - m.supportedSignatureAlgorithmsCert, SignatureScheme(sigAndAlg)) - } - case extensionCertificateAuthorities: - var auths cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&auths) || auths.Empty() { - return false - } - for !auths.Empty() { - var ca []byte - if !readUint16LengthPrefixed(&auths, &ca) || len(ca) == 0 { - return false - } - m.certificateAuthorities = append(m.certificateAuthorities, ca) - } - default: - // Ignore unknown extensions. - continue - } - - if !extData.Empty() { - return false - } - } - - return true -} - -type certificateMsg struct { - raw []byte - certificates [][]byte -} - -func (m *certificateMsg) marshal() (x []byte) { - if m.raw != nil { - return m.raw - } - - var i int - for _, slice := range m.certificates { - i += len(slice) - } - - length := 3 + 3*len(m.certificates) + i - x = make([]byte, 4+length) - x[0] = typeCertificate - x[1] = uint8(length >> 16) - x[2] = uint8(length >> 8) - x[3] = uint8(length) - - certificateOctets := length - 3 - x[4] = uint8(certificateOctets >> 16) - x[5] = uint8(certificateOctets >> 8) - x[6] = uint8(certificateOctets) - - y := x[7:] - for _, slice := range m.certificates { - y[0] = uint8(len(slice) >> 16) - y[1] = uint8(len(slice) >> 8) - y[2] = uint8(len(slice)) - copy(y[3:], slice) - y = y[3+len(slice):] - } - - m.raw = x - return -} - -func (m *certificateMsg) unmarshal(data []byte) bool { - if len(data) < 7 { - return false - } - - m.raw = data - certsLen := uint32(data[4])<<16 | uint32(data[5])<<8 | uint32(data[6]) - if uint32(len(data)) != certsLen+7 { - return false - } - - numCerts := 0 - d := data[7:] - for certsLen > 0 { - if len(d) < 4 { - return false - } - certLen := uint32(d[0])<<16 | uint32(d[1])<<8 | uint32(d[2]) - if uint32(len(d)) < 3+certLen { - return false - } - d = d[3+certLen:] - certsLen -= 3 + certLen - numCerts++ - } - - m.certificates = make([][]byte, numCerts) - d = data[7:] - for i := 0; i < numCerts; i++ { - certLen := uint32(d[0])<<16 | uint32(d[1])<<8 | uint32(d[2]) - m.certificates[i] = d[3 : 3+certLen] - d = d[3+certLen:] - } - - return true -} - -type certificateMsgTLS13 struct { - raw []byte - certificate Certificate - ocspStapling bool - scts bool -} - -func (m *certificateMsgTLS13) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeCertificate) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8(0) // certificate_request_context - - certificate := m.certificate - if !m.ocspStapling { - certificate.OCSPStaple = nil - } - if !m.scts { - certificate.SignedCertificateTimestamps = nil - } - marshalCertificate(b, certificate) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func marshalCertificate(b *cryptobyte.Builder, certificate Certificate) { - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - for i, cert := range certificate.Certificate { - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(cert) - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if i > 0 { - // This library only supports OCSP and SCT for leaf certificates. - return - } - if certificate.OCSPStaple != nil { - b.AddUint16(extensionStatusRequest) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8(statusTypeOCSP) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(certificate.OCSPStaple) - }) - }) - } - if certificate.SignedCertificateTimestamps != nil { - b.AddUint16(extensionSCT) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sct := range certificate.SignedCertificateTimestamps { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(sct) - }) - } - }) - }) - } - }) - } - }) -} - -func (m *certificateMsgTLS13) unmarshal(data []byte) bool { - *m = certificateMsgTLS13{raw: data} - s := cryptobyte.String(data) - - var context cryptobyte.String - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint8LengthPrefixed(&context) || !context.Empty() || - !unmarshalCertificate(&s, &m.certificate) || - !s.Empty() { - return false - } - - m.scts = m.certificate.SignedCertificateTimestamps != nil - m.ocspStapling = m.certificate.OCSPStaple != nil - - return true -} - -func unmarshalCertificate(s *cryptobyte.String, certificate *Certificate) bool { - var certList cryptobyte.String - if !s.ReadUint24LengthPrefixed(&certList) { - return false - } - for !certList.Empty() { - var cert []byte - var extensions cryptobyte.String - if !readUint24LengthPrefixed(&certList, &cert) || - !certList.ReadUint16LengthPrefixed(&extensions) { - return false - } - certificate.Certificate = append(certificate.Certificate, cert) - for !extensions.Empty() { - var extension uint16 - var extData cryptobyte.String - if !extensions.ReadUint16(&extension) || - !extensions.ReadUint16LengthPrefixed(&extData) { - return false - } - if len(certificate.Certificate) > 1 { - // This library only supports OCSP and SCT for leaf certificates. - continue - } - - switch extension { - case extensionStatusRequest: - var statusType uint8 - if !extData.ReadUint8(&statusType) || statusType != statusTypeOCSP || - !readUint24LengthPrefixed(&extData, &certificate.OCSPStaple) || - len(certificate.OCSPStaple) == 0 { - return false - } - case extensionSCT: - var sctList cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&sctList) || sctList.Empty() { - return false - } - for !sctList.Empty() { - var sct []byte - if !readUint16LengthPrefixed(&sctList, &sct) || - len(sct) == 0 { - return false - } - certificate.SignedCertificateTimestamps = append( - certificate.SignedCertificateTimestamps, sct) - } - default: - // Ignore unknown extensions. - continue - } - - if !extData.Empty() { - return false - } - } - } - return true -} - -type serverKeyExchangeMsg struct { - raw []byte - key []byte -} - -func (m *serverKeyExchangeMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - length := len(m.key) - x := make([]byte, length+4) - x[0] = typeServerKeyExchange - x[1] = uint8(length >> 16) - x[2] = uint8(length >> 8) - x[3] = uint8(length) - copy(x[4:], m.key) - - m.raw = x - return x -} - -func (m *serverKeyExchangeMsg) unmarshal(data []byte) bool { - m.raw = data - if len(data) < 4 { - return false - } - m.key = data[4:] - return true -} - -type certificateStatusMsg struct { - raw []byte - response []byte -} - -func (m *certificateStatusMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeCertificateStatus) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8(statusTypeOCSP) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.response) - }) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *certificateStatusMsg) unmarshal(data []byte) bool { - m.raw = data - s := cryptobyte.String(data) - - var statusType uint8 - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint8(&statusType) || statusType != statusTypeOCSP || - !readUint24LengthPrefixed(&s, &m.response) || - len(m.response) == 0 || !s.Empty() { - return false - } - return true -} - -type serverHelloDoneMsg struct{} - -func (m *serverHelloDoneMsg) marshal() []byte { - x := make([]byte, 4) - x[0] = typeServerHelloDone - return x -} - -func (m *serverHelloDoneMsg) unmarshal(data []byte) bool { - return len(data) == 4 -} - -type clientKeyExchangeMsg struct { - raw []byte - ciphertext []byte -} - -func (m *clientKeyExchangeMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - length := len(m.ciphertext) - x := make([]byte, length+4) - x[0] = typeClientKeyExchange - x[1] = uint8(length >> 16) - x[2] = uint8(length >> 8) - x[3] = uint8(length) - copy(x[4:], m.ciphertext) - - m.raw = x - return x -} - -func (m *clientKeyExchangeMsg) unmarshal(data []byte) bool { - m.raw = data - if len(data) < 4 { - return false - } - l := int(data[1])<<16 | int(data[2])<<8 | int(data[3]) - if l != len(data)-4 { - return false - } - m.ciphertext = data[4:] - return true -} - -type finishedMsg struct { - raw []byte - verifyData []byte -} - -func (m *finishedMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeFinished) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.verifyData) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *finishedMsg) unmarshal(data []byte) bool { - m.raw = data - s := cryptobyte.String(data) - return s.Skip(1) && - readUint24LengthPrefixed(&s, &m.verifyData) && - s.Empty() -} - -type certificateRequestMsg struct { - raw []byte - // hasSignatureAlgorithm indicates whether this message includes a list of - // supported signature algorithms. This change was introduced with TLS 1.2. - hasSignatureAlgorithm bool - - certificateTypes []byte - supportedSignatureAlgorithms []SignatureScheme - certificateAuthorities [][]byte -} - -func (m *certificateRequestMsg) marshal() (x []byte) { - if m.raw != nil { - return m.raw - } - - // See RFC 4346, Section 7.4.4. - length := 1 + len(m.certificateTypes) + 2 - casLength := 0 - for _, ca := range m.certificateAuthorities { - casLength += 2 + len(ca) - } - length += casLength - - if m.hasSignatureAlgorithm { - length += 2 + 2*len(m.supportedSignatureAlgorithms) - } - - x = make([]byte, 4+length) - x[0] = typeCertificateRequest - x[1] = uint8(length >> 16) - x[2] = uint8(length >> 8) - x[3] = uint8(length) - - x[4] = uint8(len(m.certificateTypes)) - - copy(x[5:], m.certificateTypes) - y := x[5+len(m.certificateTypes):] - - if m.hasSignatureAlgorithm { - n := len(m.supportedSignatureAlgorithms) * 2 - y[0] = uint8(n >> 8) - y[1] = uint8(n) - y = y[2:] - for _, sigAlgo := range m.supportedSignatureAlgorithms { - y[0] = uint8(sigAlgo >> 8) - y[1] = uint8(sigAlgo) - y = y[2:] - } - } - - y[0] = uint8(casLength >> 8) - y[1] = uint8(casLength) - y = y[2:] - for _, ca := range m.certificateAuthorities { - y[0] = uint8(len(ca) >> 8) - y[1] = uint8(len(ca)) - y = y[2:] - copy(y, ca) - y = y[len(ca):] - } - - m.raw = x - return -} - -func (m *certificateRequestMsg) unmarshal(data []byte) bool { - m.raw = data - - if len(data) < 5 { - return false - } - - length := uint32(data[1])<<16 | uint32(data[2])<<8 | uint32(data[3]) - if uint32(len(data))-4 != length { - return false - } - - numCertTypes := int(data[4]) - data = data[5:] - if numCertTypes == 0 || len(data) <= numCertTypes { - return false - } - - m.certificateTypes = make([]byte, numCertTypes) - if copy(m.certificateTypes, data) != numCertTypes { - return false - } - - data = data[numCertTypes:] - - if m.hasSignatureAlgorithm { - if len(data) < 2 { - return false - } - sigAndHashLen := uint16(data[0])<<8 | uint16(data[1]) - data = data[2:] - if sigAndHashLen&1 != 0 { - return false - } - if len(data) < int(sigAndHashLen) { - return false - } - numSigAlgos := sigAndHashLen / 2 - m.supportedSignatureAlgorithms = make([]SignatureScheme, numSigAlgos) - for i := range m.supportedSignatureAlgorithms { - m.supportedSignatureAlgorithms[i] = SignatureScheme(data[0])<<8 | SignatureScheme(data[1]) - data = data[2:] - } - } - - if len(data) < 2 { - return false - } - casLength := uint16(data[0])<<8 | uint16(data[1]) - data = data[2:] - if len(data) < int(casLength) { - return false - } - cas := make([]byte, casLength) - copy(cas, data) - data = data[casLength:] - - m.certificateAuthorities = nil - for len(cas) > 0 { - if len(cas) < 2 { - return false - } - caLen := uint16(cas[0])<<8 | uint16(cas[1]) - cas = cas[2:] - - if len(cas) < int(caLen) { - return false - } - - m.certificateAuthorities = append(m.certificateAuthorities, cas[:caLen]) - cas = cas[caLen:] - } - - return len(data) == 0 -} - -type certificateVerifyMsg struct { - raw []byte - hasSignatureAlgorithm bool // format change introduced in TLS 1.2 - signatureAlgorithm SignatureScheme - signature []byte -} - -func (m *certificateVerifyMsg) marshal() (x []byte) { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeCertificateVerify) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - if m.hasSignatureAlgorithm { - b.AddUint16(uint16(m.signatureAlgorithm)) - } - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.signature) - }) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *certificateVerifyMsg) unmarshal(data []byte) bool { - m.raw = data - s := cryptobyte.String(data) - - if !s.Skip(4) { // message type and uint24 length field - return false - } - if m.hasSignatureAlgorithm { - if !s.ReadUint16((*uint16)(&m.signatureAlgorithm)) { - return false - } - } - return readUint16LengthPrefixed(&s, &m.signature) && s.Empty() -} - -type newSessionTicketMsg struct { - raw []byte - ticket []byte -} - -func (m *newSessionTicketMsg) marshal() (x []byte) { - if m.raw != nil { - return m.raw - } - - // See RFC 5077, Section 3.3. - ticketLen := len(m.ticket) - length := 2 + 4 + ticketLen - x = make([]byte, 4+length) - x[0] = typeNewSessionTicket - x[1] = uint8(length >> 16) - x[2] = uint8(length >> 8) - x[3] = uint8(length) - x[8] = uint8(ticketLen >> 8) - x[9] = uint8(ticketLen) - copy(x[10:], m.ticket) - - m.raw = x - - return -} - -func (m *newSessionTicketMsg) unmarshal(data []byte) bool { - m.raw = data - - if len(data) < 10 { - return false - } - - length := uint32(data[1])<<16 | uint32(data[2])<<8 | uint32(data[3]) - if uint32(len(data))-4 != length { - return false - } - - ticketLen := int(data[8])<<8 + int(data[9]) - if len(data)-10 != ticketLen { - return false - } - - m.ticket = data[10:] - - return true -} - -type helloRequestMsg struct { -} - -func (*helloRequestMsg) marshal() []byte { - return []byte{typeHelloRequest, 0, 0, 0} -} - -func (*helloRequestMsg) unmarshal(data []byte) bool { - return len(data) == 4 -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/handshake_server.go b/vendor/github.com/quic-go/qtls-go1-18/handshake_server.go deleted file mode 100644 index a6519d7f58..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/handshake_server.go +++ /dev/null @@ -1,913 +0,0 @@ -// Copyright 2009 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 qtls - -import ( - "context" - "crypto" - "crypto/ecdsa" - "crypto/ed25519" - "crypto/rsa" - "crypto/subtle" - "crypto/x509" - "errors" - "fmt" - "hash" - "io" - "sync/atomic" - "time" -) - -// serverHandshakeState contains details of a server handshake in progress. -// It's discarded once the handshake has completed. -type serverHandshakeState struct { - c *Conn - ctx context.Context - clientHello *clientHelloMsg - hello *serverHelloMsg - suite *cipherSuite - ecdheOk bool - ecSignOk bool - rsaDecryptOk bool - rsaSignOk bool - sessionState *sessionState - finishedHash finishedHash - masterSecret []byte - cert *Certificate -} - -// serverHandshake performs a TLS handshake as a server. -func (c *Conn) serverHandshake(ctx context.Context) error { - c.setAlternativeRecordLayer() - - clientHello, err := c.readClientHello(ctx) - if err != nil { - return err - } - - if c.vers == VersionTLS13 { - hs := serverHandshakeStateTLS13{ - c: c, - ctx: ctx, - clientHello: clientHello, - } - return hs.handshake() - } else if c.extraConfig.usesAlternativeRecordLayer() { - // This should already have been caught by the check that the ClientHello doesn't - // offer any (supported) versions older than TLS 1.3. - // Check again to make sure we can't be tricked into using an older version. - c.sendAlert(alertProtocolVersion) - return errors.New("tls: negotiated TLS < 1.3 when using QUIC") - } - - hs := serverHandshakeState{ - c: c, - ctx: ctx, - clientHello: clientHello, - } - return hs.handshake() -} - -func (hs *serverHandshakeState) handshake() error { - c := hs.c - - if err := hs.processClientHello(); err != nil { - return err - } - - // For an overview of TLS handshaking, see RFC 5246, Section 7.3. - c.buffering = true - if hs.checkForResumption() { - // The client has included a session ticket and so we do an abbreviated handshake. - c.didResume = true - if err := hs.doResumeHandshake(); err != nil { - return err - } - if err := hs.establishKeys(); err != nil { - return err - } - if err := hs.sendSessionTicket(); err != nil { - return err - } - if err := hs.sendFinished(c.serverFinished[:]); err != nil { - return err - } - if _, err := c.flush(); err != nil { - return err - } - c.clientFinishedIsFirst = false - if err := hs.readFinished(nil); err != nil { - return err - } - } else { - // The client didn't include a session ticket, or it wasn't - // valid so we do a full handshake. - if err := hs.pickCipherSuite(); err != nil { - return err - } - if err := hs.doFullHandshake(); err != nil { - return err - } - if err := hs.establishKeys(); err != nil { - return err - } - if err := hs.readFinished(c.clientFinished[:]); err != nil { - return err - } - c.clientFinishedIsFirst = true - c.buffering = true - if err := hs.sendSessionTicket(); err != nil { - return err - } - if err := hs.sendFinished(nil); err != nil { - return err - } - if _, err := c.flush(); err != nil { - return err - } - } - - c.ekm = ekmFromMasterSecret(c.vers, hs.suite, hs.masterSecret, hs.clientHello.random, hs.hello.random) - atomic.StoreUint32(&c.handshakeStatus, 1) - - c.updateConnectionState() - return nil -} - -// readClientHello reads a ClientHello message and selects the protocol version. -func (c *Conn) readClientHello(ctx context.Context) (*clientHelloMsg, error) { - msg, err := c.readHandshake() - if err != nil { - return nil, err - } - clientHello, ok := msg.(*clientHelloMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return nil, unexpectedMessageError(clientHello, msg) - } - - var configForClient *config - originalConfig := c.config - if c.config.GetConfigForClient != nil { - chi := newClientHelloInfo(ctx, c, clientHello) - if cfc, err := c.config.GetConfigForClient(chi); err != nil { - c.sendAlert(alertInternalError) - return nil, err - } else if cfc != nil { - configForClient = fromConfig(cfc) - c.config = configForClient - } - } - c.ticketKeys = originalConfig.ticketKeys(configForClient) - - clientVersions := clientHello.supportedVersions - if len(clientHello.supportedVersions) == 0 { - clientVersions = supportedVersionsFromMax(clientHello.vers) - } - if c.extraConfig.usesAlternativeRecordLayer() { - // In QUIC, the client MUST NOT offer any old TLS versions. - // Here, we can only check that none of the other supported versions of this library - // (TLS 1.0 - TLS 1.2) is offered. We don't check for any SSL versions here. - for _, ver := range clientVersions { - if ver == VersionTLS13 { - continue - } - for _, v := range supportedVersions { - if ver == v { - c.sendAlert(alertProtocolVersion) - return nil, fmt.Errorf("tls: client offered old TLS version %#x", ver) - } - } - } - // Make the config we're using allows us to use TLS 1.3. - if c.config.maxSupportedVersion(roleServer) < VersionTLS13 { - c.sendAlert(alertInternalError) - return nil, errors.New("tls: MaxVersion prevents QUIC from using TLS 1.3") - } - } - c.vers, ok = c.config.mutualVersion(roleServer, clientVersions) - if !ok { - c.sendAlert(alertProtocolVersion) - return nil, fmt.Errorf("tls: client offered only unsupported versions: %x", clientVersions) - } - c.haveVers = true - c.in.version = c.vers - c.out.version = c.vers - - return clientHello, nil -} - -func (hs *serverHandshakeState) processClientHello() error { - c := hs.c - - hs.hello = new(serverHelloMsg) - hs.hello.vers = c.vers - - foundCompression := false - // We only support null compression, so check that the client offered it. - for _, compression := range hs.clientHello.compressionMethods { - if compression == compressionNone { - foundCompression = true - break - } - } - - if !foundCompression { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: client does not support uncompressed connections") - } - - hs.hello.random = make([]byte, 32) - serverRandom := hs.hello.random - // Downgrade protection canaries. See RFC 8446, Section 4.1.3. - maxVers := c.config.maxSupportedVersion(roleServer) - if maxVers >= VersionTLS12 && c.vers < maxVers || testingOnlyForceDowngradeCanary { - if c.vers == VersionTLS12 { - copy(serverRandom[24:], downgradeCanaryTLS12) - } else { - copy(serverRandom[24:], downgradeCanaryTLS11) - } - serverRandom = serverRandom[:24] - } - _, err := io.ReadFull(c.config.rand(), serverRandom) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - - if len(hs.clientHello.secureRenegotiation) != 0 { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: initial handshake had non-empty renegotiation extension") - } - - hs.hello.secureRenegotiationSupported = hs.clientHello.secureRenegotiationSupported - hs.hello.compressionMethod = compressionNone - if len(hs.clientHello.serverName) > 0 { - c.serverName = hs.clientHello.serverName - } - - selectedProto, err := negotiateALPN(c.config.NextProtos, hs.clientHello.alpnProtocols) - if err != nil { - c.sendAlert(alertNoApplicationProtocol) - return err - } - hs.hello.alpnProtocol = selectedProto - c.clientProtocol = selectedProto - - hs.cert, err = c.config.getCertificate(newClientHelloInfo(hs.ctx, c, hs.clientHello)) - if err != nil { - if err == errNoCertificates { - c.sendAlert(alertUnrecognizedName) - } else { - c.sendAlert(alertInternalError) - } - return err - } - if hs.clientHello.scts { - hs.hello.scts = hs.cert.SignedCertificateTimestamps - } - - hs.ecdheOk = supportsECDHE(c.config, hs.clientHello.supportedCurves, hs.clientHello.supportedPoints) - - if hs.ecdheOk && len(hs.clientHello.supportedPoints) > 0 { - // Although omitting the ec_point_formats extension is permitted, some - // old OpenSSL version will refuse to handshake if not present. - // - // Per RFC 4492, section 5.1.2, implementations MUST support the - // uncompressed point format. See golang.org/issue/31943. - hs.hello.supportedPoints = []uint8{pointFormatUncompressed} - } - - if priv, ok := hs.cert.PrivateKey.(crypto.Signer); ok { - switch priv.Public().(type) { - case *ecdsa.PublicKey: - hs.ecSignOk = true - case ed25519.PublicKey: - hs.ecSignOk = true - case *rsa.PublicKey: - hs.rsaSignOk = true - default: - c.sendAlert(alertInternalError) - return fmt.Errorf("tls: unsupported signing key type (%T)", priv.Public()) - } - } - if priv, ok := hs.cert.PrivateKey.(crypto.Decrypter); ok { - switch priv.Public().(type) { - case *rsa.PublicKey: - hs.rsaDecryptOk = true - default: - c.sendAlert(alertInternalError) - return fmt.Errorf("tls: unsupported decryption key type (%T)", priv.Public()) - } - } - - return nil -} - -// negotiateALPN picks a shared ALPN protocol that both sides support in server -// preference order. If ALPN is not configured or the peer doesn't support it, -// it returns "" and no error. -func negotiateALPN(serverProtos, clientProtos []string) (string, error) { - if len(serverProtos) == 0 || len(clientProtos) == 0 { - return "", nil - } - var http11fallback bool - for _, s := range serverProtos { - for _, c := range clientProtos { - if s == c { - return s, nil - } - if s == "h2" && c == "http/1.1" { - http11fallback = true - } - } - } - // As a special case, let http/1.1 clients connect to h2 servers as if they - // didn't support ALPN. We used not to enforce protocol overlap, so over - // time a number of HTTP servers were configured with only "h2", but - // expected to accept connections from "http/1.1" clients. See Issue 46310. - if http11fallback { - return "", nil - } - return "", fmt.Errorf("tls: client requested unsupported application protocols (%s)", clientProtos) -} - -// supportsECDHE returns whether ECDHE key exchanges can be used with this -// pre-TLS 1.3 client. -func supportsECDHE(c *config, supportedCurves []CurveID, supportedPoints []uint8) bool { - supportsCurve := false - for _, curve := range supportedCurves { - if c.supportsCurve(curve) { - supportsCurve = true - break - } - } - - supportsPointFormat := false - for _, pointFormat := range supportedPoints { - if pointFormat == pointFormatUncompressed { - supportsPointFormat = true - break - } - } - // Per RFC 8422, Section 5.1.2, if the Supported Point Formats extension is - // missing, uncompressed points are supported. If supportedPoints is empty, - // the extension must be missing, as an empty extension body is rejected by - // the parser. See https://go.dev/issue/49126. - if len(supportedPoints) == 0 { - supportsPointFormat = true - } - - return supportsCurve && supportsPointFormat -} - -func (hs *serverHandshakeState) pickCipherSuite() error { - c := hs.c - - preferenceOrder := cipherSuitesPreferenceOrder - if !hasAESGCMHardwareSupport || !aesgcmPreferred(hs.clientHello.cipherSuites) { - preferenceOrder = cipherSuitesPreferenceOrderNoAES - } - - configCipherSuites := c.config.cipherSuites() - preferenceList := make([]uint16, 0, len(configCipherSuites)) - for _, suiteID := range preferenceOrder { - for _, id := range configCipherSuites { - if id == suiteID { - preferenceList = append(preferenceList, id) - break - } - } - } - - hs.suite = selectCipherSuite(preferenceList, hs.clientHello.cipherSuites, hs.cipherSuiteOk) - if hs.suite == nil { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: no cipher suite supported by both client and server") - } - c.cipherSuite = hs.suite.id - - for _, id := range hs.clientHello.cipherSuites { - if id == TLS_FALLBACK_SCSV { - // The client is doing a fallback connection. See RFC 7507. - if hs.clientHello.vers < c.config.maxSupportedVersion(roleServer) { - c.sendAlert(alertInappropriateFallback) - return errors.New("tls: client using inappropriate protocol fallback") - } - break - } - } - - return nil -} - -func (hs *serverHandshakeState) cipherSuiteOk(c *cipherSuite) bool { - if c.flags&suiteECDHE != 0 { - if !hs.ecdheOk { - return false - } - if c.flags&suiteECSign != 0 { - if !hs.ecSignOk { - return false - } - } else if !hs.rsaSignOk { - return false - } - } else if !hs.rsaDecryptOk { - return false - } - if hs.c.vers < VersionTLS12 && c.flags&suiteTLS12 != 0 { - return false - } - return true -} - -// checkForResumption reports whether we should perform resumption on this connection. -func (hs *serverHandshakeState) checkForResumption() bool { - c := hs.c - - if c.config.SessionTicketsDisabled { - return false - } - - plaintext, usedOldKey := c.decryptTicket(hs.clientHello.sessionTicket) - if plaintext == nil { - return false - } - hs.sessionState = &sessionState{usedOldKey: usedOldKey} - ok := hs.sessionState.unmarshal(plaintext) - if !ok { - return false - } - - createdAt := time.Unix(int64(hs.sessionState.createdAt), 0) - if c.config.time().Sub(createdAt) > maxSessionTicketLifetime { - return false - } - - // Never resume a session for a different TLS version. - if c.vers != hs.sessionState.vers { - return false - } - - cipherSuiteOk := false - // Check that the client is still offering the ciphersuite in the session. - for _, id := range hs.clientHello.cipherSuites { - if id == hs.sessionState.cipherSuite { - cipherSuiteOk = true - break - } - } - if !cipherSuiteOk { - return false - } - - // Check that we also support the ciphersuite from the session. - hs.suite = selectCipherSuite([]uint16{hs.sessionState.cipherSuite}, - c.config.cipherSuites(), hs.cipherSuiteOk) - if hs.suite == nil { - return false - } - - sessionHasClientCerts := len(hs.sessionState.certificates) != 0 - needClientCerts := requiresClientCert(c.config.ClientAuth) - if needClientCerts && !sessionHasClientCerts { - return false - } - if sessionHasClientCerts && c.config.ClientAuth == NoClientCert { - return false - } - - return true -} - -func (hs *serverHandshakeState) doResumeHandshake() error { - c := hs.c - - hs.hello.cipherSuite = hs.suite.id - c.cipherSuite = hs.suite.id - // We echo the client's session ID in the ServerHello to let it know - // that we're doing a resumption. - hs.hello.sessionId = hs.clientHello.sessionId - hs.hello.ticketSupported = hs.sessionState.usedOldKey - hs.finishedHash = newFinishedHash(c.vers, hs.suite) - hs.finishedHash.discardHandshakeBuffer() - hs.finishedHash.Write(hs.clientHello.marshal()) - hs.finishedHash.Write(hs.hello.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil { - return err - } - - if err := c.processCertsFromClient(Certificate{ - Certificate: hs.sessionState.certificates, - }); err != nil { - return err - } - - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - hs.masterSecret = hs.sessionState.masterSecret - - return nil -} - -func (hs *serverHandshakeState) doFullHandshake() error { - c := hs.c - - if hs.clientHello.ocspStapling && len(hs.cert.OCSPStaple) > 0 { - hs.hello.ocspStapling = true - } - - hs.hello.ticketSupported = hs.clientHello.ticketSupported && !c.config.SessionTicketsDisabled - hs.hello.cipherSuite = hs.suite.id - - hs.finishedHash = newFinishedHash(hs.c.vers, hs.suite) - if c.config.ClientAuth == NoClientCert { - // No need to keep a full record of the handshake if client - // certificates won't be used. - hs.finishedHash.discardHandshakeBuffer() - } - hs.finishedHash.Write(hs.clientHello.marshal()) - hs.finishedHash.Write(hs.hello.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil { - return err - } - - certMsg := new(certificateMsg) - certMsg.certificates = hs.cert.Certificate - hs.finishedHash.Write(certMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certMsg.marshal()); err != nil { - return err - } - - if hs.hello.ocspStapling { - certStatus := new(certificateStatusMsg) - certStatus.response = hs.cert.OCSPStaple - hs.finishedHash.Write(certStatus.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certStatus.marshal()); err != nil { - return err - } - } - - keyAgreement := hs.suite.ka(c.vers) - skx, err := keyAgreement.generateServerKeyExchange(c.config, hs.cert, hs.clientHello, hs.hello) - if err != nil { - c.sendAlert(alertHandshakeFailure) - return err - } - if skx != nil { - hs.finishedHash.Write(skx.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, skx.marshal()); err != nil { - return err - } - } - - var certReq *certificateRequestMsg - if c.config.ClientAuth >= RequestClientCert { - // Request a client certificate - certReq = new(certificateRequestMsg) - certReq.certificateTypes = []byte{ - byte(certTypeRSASign), - byte(certTypeECDSASign), - } - if c.vers >= VersionTLS12 { - certReq.hasSignatureAlgorithm = true - certReq.supportedSignatureAlgorithms = supportedSignatureAlgorithms - } - - // An empty list of certificateAuthorities signals to - // the client that it may send any certificate in response - // to our request. When we know the CAs we trust, then - // we can send them down, so that the client can choose - // an appropriate certificate to give to us. - if c.config.ClientCAs != nil { - certReq.certificateAuthorities = c.config.ClientCAs.Subjects() - } - hs.finishedHash.Write(certReq.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certReq.marshal()); err != nil { - return err - } - } - - helloDone := new(serverHelloDoneMsg) - hs.finishedHash.Write(helloDone.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, helloDone.marshal()); err != nil { - return err - } - - if _, err := c.flush(); err != nil { - return err - } - - var pub crypto.PublicKey // public key for client auth, if any - - msg, err := c.readHandshake() - if err != nil { - return err - } - - // If we requested a client certificate, then the client must send a - // certificate message, even if it's empty. - if c.config.ClientAuth >= RequestClientCert { - certMsg, ok := msg.(*certificateMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certMsg, msg) - } - hs.finishedHash.Write(certMsg.marshal()) - - if err := c.processCertsFromClient(Certificate{ - Certificate: certMsg.certificates, - }); err != nil { - return err - } - if len(certMsg.certificates) != 0 { - pub = c.peerCertificates[0].PublicKey - } - - msg, err = c.readHandshake() - if err != nil { - return err - } - } - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - // Get client key exchange - ckx, ok := msg.(*clientKeyExchangeMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(ckx, msg) - } - hs.finishedHash.Write(ckx.marshal()) - - preMasterSecret, err := keyAgreement.processClientKeyExchange(c.config, hs.cert, ckx, c.vers) - if err != nil { - c.sendAlert(alertHandshakeFailure) - return err - } - hs.masterSecret = masterFromPreMasterSecret(c.vers, hs.suite, preMasterSecret, hs.clientHello.random, hs.hello.random) - if err := c.config.writeKeyLog(keyLogLabelTLS12, hs.clientHello.random, hs.masterSecret); err != nil { - c.sendAlert(alertInternalError) - return err - } - - // If we received a client cert in response to our certificate request message, - // the client will send us a certificateVerifyMsg immediately after the - // clientKeyExchangeMsg. This message is a digest of all preceding - // handshake-layer messages that is signed using the private key corresponding - // to the client's certificate. This allows us to verify that the client is in - // possession of the private key of the certificate. - if len(c.peerCertificates) > 0 { - msg, err = c.readHandshake() - if err != nil { - return err - } - certVerify, ok := msg.(*certificateVerifyMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certVerify, msg) - } - - var sigType uint8 - var sigHash crypto.Hash - if c.vers >= VersionTLS12 { - if !isSupportedSignatureAlgorithm(certVerify.signatureAlgorithm, certReq.supportedSignatureAlgorithms) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client certificate used with invalid signature algorithm") - } - sigType, sigHash, err = typeAndHashFromSignatureScheme(certVerify.signatureAlgorithm) - if err != nil { - return c.sendAlert(alertInternalError) - } - } else { - sigType, sigHash, err = legacyTypeAndHashFromPublicKey(pub) - if err != nil { - c.sendAlert(alertIllegalParameter) - return err - } - } - - signed := hs.finishedHash.hashForClientCertificate(sigType, sigHash, hs.masterSecret) - if err := verifyHandshakeSignature(sigType, pub, sigHash, signed, certVerify.signature); err != nil { - c.sendAlert(alertDecryptError) - return errors.New("tls: invalid signature by the client certificate: " + err.Error()) - } - - hs.finishedHash.Write(certVerify.marshal()) - } - - hs.finishedHash.discardHandshakeBuffer() - - return nil -} - -func (hs *serverHandshakeState) establishKeys() error { - c := hs.c - - clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV := - keysFromMasterSecret(c.vers, hs.suite, hs.masterSecret, hs.clientHello.random, hs.hello.random, hs.suite.macLen, hs.suite.keyLen, hs.suite.ivLen) - - var clientCipher, serverCipher any - var clientHash, serverHash hash.Hash - - if hs.suite.aead == nil { - clientCipher = hs.suite.cipher(clientKey, clientIV, true /* for reading */) - clientHash = hs.suite.mac(clientMAC) - serverCipher = hs.suite.cipher(serverKey, serverIV, false /* not for reading */) - serverHash = hs.suite.mac(serverMAC) - } else { - clientCipher = hs.suite.aead(clientKey, clientIV) - serverCipher = hs.suite.aead(serverKey, serverIV) - } - - c.in.prepareCipherSpec(c.vers, clientCipher, clientHash) - c.out.prepareCipherSpec(c.vers, serverCipher, serverHash) - - return nil -} - -func (hs *serverHandshakeState) readFinished(out []byte) error { - c := hs.c - - if err := c.readChangeCipherSpec(); err != nil { - return err - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - clientFinished, ok := msg.(*finishedMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(clientFinished, msg) - } - - verify := hs.finishedHash.clientSum(hs.masterSecret) - if len(verify) != len(clientFinished.verifyData) || - subtle.ConstantTimeCompare(verify, clientFinished.verifyData) != 1 { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: client's Finished message is incorrect") - } - - hs.finishedHash.Write(clientFinished.marshal()) - copy(out, verify) - return nil -} - -func (hs *serverHandshakeState) sendSessionTicket() error { - // ticketSupported is set in a resumption handshake if the - // ticket from the client was encrypted with an old session - // ticket key and thus a refreshed ticket should be sent. - if !hs.hello.ticketSupported { - return nil - } - - c := hs.c - m := new(newSessionTicketMsg) - - createdAt := uint64(c.config.time().Unix()) - if hs.sessionState != nil { - // If this is re-wrapping an old key, then keep - // the original time it was created. - createdAt = hs.sessionState.createdAt - } - - var certsFromClient [][]byte - for _, cert := range c.peerCertificates { - certsFromClient = append(certsFromClient, cert.Raw) - } - state := sessionState{ - vers: c.vers, - cipherSuite: hs.suite.id, - createdAt: createdAt, - masterSecret: hs.masterSecret, - certificates: certsFromClient, - } - var err error - m.ticket, err = c.encryptTicket(state.marshal()) - if err != nil { - return err - } - - hs.finishedHash.Write(m.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, m.marshal()); err != nil { - return err - } - - return nil -} - -func (hs *serverHandshakeState) sendFinished(out []byte) error { - c := hs.c - - if _, err := c.writeRecord(recordTypeChangeCipherSpec, []byte{1}); err != nil { - return err - } - - finished := new(finishedMsg) - finished.verifyData = hs.finishedHash.serverSum(hs.masterSecret) - hs.finishedHash.Write(finished.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, finished.marshal()); err != nil { - return err - } - - copy(out, finished.verifyData) - - return nil -} - -// processCertsFromClient takes a chain of client certificates either from a -// Certificates message or from a sessionState and verifies them. It returns -// the public key of the leaf certificate. -func (c *Conn) processCertsFromClient(certificate Certificate) error { - certificates := certificate.Certificate - certs := make([]*x509.Certificate, len(certificates)) - var err error - for i, asn1Data := range certificates { - if certs[i], err = x509.ParseCertificate(asn1Data); err != nil { - c.sendAlert(alertBadCertificate) - return errors.New("tls: failed to parse client certificate: " + err.Error()) - } - } - - if len(certs) == 0 && requiresClientCert(c.config.ClientAuth) { - c.sendAlert(alertBadCertificate) - return errors.New("tls: client didn't provide a certificate") - } - - if c.config.ClientAuth >= VerifyClientCertIfGiven && len(certs) > 0 { - opts := x509.VerifyOptions{ - Roots: c.config.ClientCAs, - CurrentTime: c.config.time(), - Intermediates: x509.NewCertPool(), - KeyUsages: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth}, - } - - for _, cert := range certs[1:] { - opts.Intermediates.AddCert(cert) - } - - chains, err := certs[0].Verify(opts) - if err != nil { - c.sendAlert(alertBadCertificate) - return errors.New("tls: failed to verify client certificate: " + err.Error()) - } - - c.verifiedChains = chains - } - - c.peerCertificates = certs - c.ocspResponse = certificate.OCSPStaple - c.scts = certificate.SignedCertificateTimestamps - - if len(certs) > 0 { - switch certs[0].PublicKey.(type) { - case *ecdsa.PublicKey, *rsa.PublicKey, ed25519.PublicKey: - default: - c.sendAlert(alertUnsupportedCertificate) - return fmt.Errorf("tls: client certificate contains an unsupported public key of type %T", certs[0].PublicKey) - } - } - - if c.config.VerifyPeerCertificate != nil { - if err := c.config.VerifyPeerCertificate(certificates, c.verifiedChains); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - return nil -} - -func newClientHelloInfo(ctx context.Context, c *Conn, clientHello *clientHelloMsg) *ClientHelloInfo { - supportedVersions := clientHello.supportedVersions - if len(clientHello.supportedVersions) == 0 { - supportedVersions = supportedVersionsFromMax(clientHello.vers) - } - - return toClientHelloInfo(&clientHelloInfo{ - CipherSuites: clientHello.cipherSuites, - ServerName: clientHello.serverName, - SupportedCurves: clientHello.supportedCurves, - SupportedPoints: clientHello.supportedPoints, - SignatureSchemes: clientHello.supportedSignatureAlgorithms, - SupportedProtos: clientHello.alpnProtocols, - SupportedVersions: supportedVersions, - Conn: c.conn, - config: toConfig(c.config), - ctx: ctx, - }) -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/handshake_server_tls13.go b/vendor/github.com/quic-go/qtls-go1-18/handshake_server_tls13.go deleted file mode 100644 index 7ce09c37b9..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/handshake_server_tls13.go +++ /dev/null @@ -1,898 +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. - -package qtls - -import ( - "bytes" - "context" - "crypto" - "crypto/hmac" - "crypto/rsa" - "errors" - "hash" - "io" - "sync/atomic" - "time" -) - -// maxClientPSKIdentities is the number of client PSK identities the server will -// attempt to validate. It will ignore the rest not to let cheap ClientHello -// messages cause too much work in session ticket decryption attempts. -const maxClientPSKIdentities = 5 - -type serverHandshakeStateTLS13 struct { - c *Conn - ctx context.Context - clientHello *clientHelloMsg - hello *serverHelloMsg - alpnNegotiationErr error - encryptedExtensions *encryptedExtensionsMsg - sentDummyCCS bool - usingPSK bool - suite *cipherSuiteTLS13 - cert *Certificate - sigAlg SignatureScheme - earlySecret []byte - sharedKey []byte - handshakeSecret []byte - masterSecret []byte - trafficSecret []byte // client_application_traffic_secret_0 - transcript hash.Hash - clientFinished []byte -} - -func (hs *serverHandshakeStateTLS13) handshake() error { - c := hs.c - - // For an overview of the TLS 1.3 handshake, see RFC 8446, Section 2. - if err := hs.processClientHello(); err != nil { - return err - } - if err := hs.checkForResumption(); err != nil { - return err - } - c.updateConnectionState() - if err := hs.pickCertificate(); err != nil { - return err - } - c.buffering = true - if err := hs.sendServerParameters(); err != nil { - return err - } - if err := hs.sendServerCertificate(); err != nil { - return err - } - if err := hs.sendServerFinished(); err != nil { - return err - } - // Note that at this point we could start sending application data without - // waiting for the client's second flight, but the application might not - // expect the lack of replay protection of the ClientHello parameters. - if _, err := c.flush(); err != nil { - return err - } - if err := hs.readClientCertificate(); err != nil { - return err - } - c.updateConnectionState() - if err := hs.readClientFinished(); err != nil { - return err - } - - atomic.StoreUint32(&c.handshakeStatus, 1) - c.updateConnectionState() - return nil -} - -func (hs *serverHandshakeStateTLS13) processClientHello() error { - c := hs.c - - hs.hello = new(serverHelloMsg) - hs.encryptedExtensions = new(encryptedExtensionsMsg) - - // TLS 1.3 froze the ServerHello.legacy_version field, and uses - // supported_versions instead. See RFC 8446, sections 4.1.3 and 4.2.1. - hs.hello.vers = VersionTLS12 - hs.hello.supportedVersion = c.vers - - if len(hs.clientHello.supportedVersions) == 0 { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client used the legacy version field to negotiate TLS 1.3") - } - - // Abort if the client is doing a fallback and landing lower than what we - // support. See RFC 7507, which however does not specify the interaction - // with supported_versions. The only difference is that with - // supported_versions a client has a chance to attempt a [TLS 1.2, TLS 1.4] - // handshake in case TLS 1.3 is broken but 1.2 is not. Alas, in that case, - // it will have to drop the TLS_FALLBACK_SCSV protection if it falls back to - // TLS 1.2, because a TLS 1.3 server would abort here. The situation before - // supported_versions was not better because there was just no way to do a - // TLS 1.4 handshake without risking the server selecting TLS 1.3. - for _, id := range hs.clientHello.cipherSuites { - if id == TLS_FALLBACK_SCSV { - // Use c.vers instead of max(supported_versions) because an attacker - // could defeat this by adding an arbitrary high version otherwise. - if c.vers < c.config.maxSupportedVersion(roleServer) { - c.sendAlert(alertInappropriateFallback) - return errors.New("tls: client using inappropriate protocol fallback") - } - break - } - } - - if len(hs.clientHello.compressionMethods) != 1 || - hs.clientHello.compressionMethods[0] != compressionNone { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: TLS 1.3 client supports illegal compression methods") - } - - hs.hello.random = make([]byte, 32) - if _, err := io.ReadFull(c.config.rand(), hs.hello.random); err != nil { - c.sendAlert(alertInternalError) - return err - } - - if len(hs.clientHello.secureRenegotiation) != 0 { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: initial handshake had non-empty renegotiation extension") - } - - hs.hello.sessionId = hs.clientHello.sessionId - hs.hello.compressionMethod = compressionNone - - if hs.suite == nil { - var preferenceList []uint16 - for _, suiteID := range c.config.CipherSuites { - for _, suite := range cipherSuitesTLS13 { - if suite.id == suiteID { - preferenceList = append(preferenceList, suiteID) - break - } - } - } - if len(preferenceList) == 0 { - preferenceList = defaultCipherSuitesTLS13 - if !hasAESGCMHardwareSupport || !aesgcmPreferred(hs.clientHello.cipherSuites) { - preferenceList = defaultCipherSuitesTLS13NoAES - } - } - for _, suiteID := range preferenceList { - hs.suite = mutualCipherSuiteTLS13(hs.clientHello.cipherSuites, suiteID) - if hs.suite != nil { - break - } - } - } - if hs.suite == nil { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: no cipher suite supported by both client and server") - } - c.cipherSuite = hs.suite.id - hs.hello.cipherSuite = hs.suite.id - hs.transcript = hs.suite.hash.New() - - // Pick the ECDHE group in server preference order, but give priority to - // groups with a key share, to avoid a HelloRetryRequest round-trip. - var selectedGroup CurveID - var clientKeyShare *keyShare -GroupSelection: - for _, preferredGroup := range c.config.curvePreferences() { - for _, ks := range hs.clientHello.keyShares { - if ks.group == preferredGroup { - selectedGroup = ks.group - clientKeyShare = &ks - break GroupSelection - } - } - if selectedGroup != 0 { - continue - } - for _, group := range hs.clientHello.supportedCurves { - if group == preferredGroup { - selectedGroup = group - break - } - } - } - if selectedGroup == 0 { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: no ECDHE curve supported by both client and server") - } - if clientKeyShare == nil { - if err := hs.doHelloRetryRequest(selectedGroup); err != nil { - return err - } - clientKeyShare = &hs.clientHello.keyShares[0] - } - - if _, ok := curveForCurveID(selectedGroup); selectedGroup != X25519 && !ok { - c.sendAlert(alertInternalError) - return errors.New("tls: CurvePreferences includes unsupported curve") - } - params, err := generateECDHEParameters(c.config.rand(), selectedGroup) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - hs.hello.serverShare = keyShare{group: selectedGroup, data: params.PublicKey()} - hs.sharedKey = params.SharedKey(clientKeyShare.data) - if hs.sharedKey == nil { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: invalid client key share") - } - - c.serverName = hs.clientHello.serverName - - if c.extraConfig != nil && c.extraConfig.ReceivedExtensions != nil { - c.extraConfig.ReceivedExtensions(typeClientHello, hs.clientHello.additionalExtensions) - } - - selectedProto, err := negotiateALPN(c.config.NextProtos, hs.clientHello.alpnProtocols) - if err != nil { - hs.alpnNegotiationErr = err - } - hs.encryptedExtensions.alpnProtocol = selectedProto - c.clientProtocol = selectedProto - - return nil -} - -func (hs *serverHandshakeStateTLS13) checkForResumption() error { - c := hs.c - - if c.config.SessionTicketsDisabled { - return nil - } - - modeOK := false - for _, mode := range hs.clientHello.pskModes { - if mode == pskModeDHE { - modeOK = true - break - } - } - if !modeOK { - return nil - } - - if len(hs.clientHello.pskIdentities) != len(hs.clientHello.pskBinders) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: invalid or missing PSK binders") - } - if len(hs.clientHello.pskIdentities) == 0 { - return nil - } - - for i, identity := range hs.clientHello.pskIdentities { - if i >= maxClientPSKIdentities { - break - } - - plaintext, _ := c.decryptTicket(identity.label) - if plaintext == nil { - continue - } - sessionState := new(sessionStateTLS13) - if ok := sessionState.unmarshal(plaintext); !ok { - continue - } - - if hs.clientHello.earlyData { - if sessionState.maxEarlyData == 0 { - c.sendAlert(alertUnsupportedExtension) - return errors.New("tls: client sent unexpected early data") - } - - if hs.alpnNegotiationErr == nil && sessionState.alpn == c.clientProtocol && - c.extraConfig != nil && c.extraConfig.MaxEarlyData > 0 && - c.extraConfig.Accept0RTT != nil && c.extraConfig.Accept0RTT(sessionState.appData) { - hs.encryptedExtensions.earlyData = true - c.used0RTT = true - } - } - - createdAt := time.Unix(int64(sessionState.createdAt), 0) - if c.config.time().Sub(createdAt) > maxSessionTicketLifetime { - continue - } - - // We don't check the obfuscated ticket age because it's affected by - // clock skew and it's only a freshness signal useful for shrinking the - // window for replay attacks, which don't affect us as we don't do 0-RTT. - - pskSuite := cipherSuiteTLS13ByID(sessionState.cipherSuite) - if pskSuite == nil || pskSuite.hash != hs.suite.hash { - continue - } - - // PSK connections don't re-establish client certificates, but carry - // them over in the session ticket. Ensure the presence of client certs - // in the ticket is consistent with the configured requirements. - sessionHasClientCerts := len(sessionState.certificate.Certificate) != 0 - needClientCerts := requiresClientCert(c.config.ClientAuth) - if needClientCerts && !sessionHasClientCerts { - continue - } - if sessionHasClientCerts && c.config.ClientAuth == NoClientCert { - continue - } - - psk := hs.suite.expandLabel(sessionState.resumptionSecret, "resumption", - nil, hs.suite.hash.Size()) - hs.earlySecret = hs.suite.extract(psk, nil) - binderKey := hs.suite.deriveSecret(hs.earlySecret, resumptionBinderLabel, nil) - // Clone the transcript in case a HelloRetryRequest was recorded. - transcript := cloneHash(hs.transcript, hs.suite.hash) - if transcript == nil { - c.sendAlert(alertInternalError) - return errors.New("tls: internal error: failed to clone hash") - } - transcript.Write(hs.clientHello.marshalWithoutBinders()) - pskBinder := hs.suite.finishedHash(binderKey, transcript) - if !hmac.Equal(hs.clientHello.pskBinders[i], pskBinder) { - c.sendAlert(alertDecryptError) - return errors.New("tls: invalid PSK binder") - } - - c.didResume = true - if err := c.processCertsFromClient(sessionState.certificate); err != nil { - return err - } - - h := cloneHash(hs.transcript, hs.suite.hash) - h.Write(hs.clientHello.marshal()) - if hs.encryptedExtensions.earlyData { - clientEarlySecret := hs.suite.deriveSecret(hs.earlySecret, "c e traffic", h) - c.in.exportKey(Encryption0RTT, hs.suite, clientEarlySecret) - if err := c.config.writeKeyLog(keyLogLabelEarlyTraffic, hs.clientHello.random, clientEarlySecret); err != nil { - c.sendAlert(alertInternalError) - return err - } - } - - hs.hello.selectedIdentityPresent = true - hs.hello.selectedIdentity = uint16(i) - hs.usingPSK = true - return nil - } - - return nil -} - -// cloneHash uses the encoding.BinaryMarshaler and encoding.BinaryUnmarshaler -// interfaces implemented by standard library hashes to clone the state of in -// to a new instance of h. It returns nil if the operation fails. -func cloneHash(in hash.Hash, h crypto.Hash) hash.Hash { - // Recreate the interface to avoid importing encoding. - type binaryMarshaler interface { - MarshalBinary() (data []byte, err error) - UnmarshalBinary(data []byte) error - } - marshaler, ok := in.(binaryMarshaler) - if !ok { - return nil - } - state, err := marshaler.MarshalBinary() - if err != nil { - return nil - } - out := h.New() - unmarshaler, ok := out.(binaryMarshaler) - if !ok { - return nil - } - if err := unmarshaler.UnmarshalBinary(state); err != nil { - return nil - } - return out -} - -func (hs *serverHandshakeStateTLS13) pickCertificate() error { - c := hs.c - - // Only one of PSK and certificates are used at a time. - if hs.usingPSK { - return nil - } - - // signature_algorithms is required in TLS 1.3. See RFC 8446, Section 4.2.3. - if len(hs.clientHello.supportedSignatureAlgorithms) == 0 { - return c.sendAlert(alertMissingExtension) - } - - certificate, err := c.config.getCertificate(newClientHelloInfo(hs.ctx, c, hs.clientHello)) - if err != nil { - if err == errNoCertificates { - c.sendAlert(alertUnrecognizedName) - } else { - c.sendAlert(alertInternalError) - } - return err - } - hs.sigAlg, err = selectSignatureScheme(c.vers, certificate, hs.clientHello.supportedSignatureAlgorithms) - if err != nil { - // getCertificate returned a certificate that is unsupported or - // incompatible with the client's signature algorithms. - c.sendAlert(alertHandshakeFailure) - return err - } - hs.cert = certificate - - return nil -} - -// sendDummyChangeCipherSpec sends a ChangeCipherSpec record for compatibility -// with middleboxes that didn't implement TLS correctly. See RFC 8446, Appendix D.4. -func (hs *serverHandshakeStateTLS13) sendDummyChangeCipherSpec() error { - if hs.sentDummyCCS { - return nil - } - hs.sentDummyCCS = true - - _, err := hs.c.writeRecord(recordTypeChangeCipherSpec, []byte{1}) - return err -} - -func (hs *serverHandshakeStateTLS13) doHelloRetryRequest(selectedGroup CurveID) error { - c := hs.c - - // The first ClientHello gets double-hashed into the transcript upon a - // HelloRetryRequest. See RFC 8446, Section 4.4.1. - hs.transcript.Write(hs.clientHello.marshal()) - chHash := hs.transcript.Sum(nil) - hs.transcript.Reset() - hs.transcript.Write([]byte{typeMessageHash, 0, 0, uint8(len(chHash))}) - hs.transcript.Write(chHash) - - helloRetryRequest := &serverHelloMsg{ - vers: hs.hello.vers, - random: helloRetryRequestRandom, - sessionId: hs.hello.sessionId, - cipherSuite: hs.hello.cipherSuite, - compressionMethod: hs.hello.compressionMethod, - supportedVersion: hs.hello.supportedVersion, - selectedGroup: selectedGroup, - } - - hs.transcript.Write(helloRetryRequest.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, helloRetryRequest.marshal()); err != nil { - return err - } - - if err := hs.sendDummyChangeCipherSpec(); err != nil { - return err - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - - clientHello, ok := msg.(*clientHelloMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(clientHello, msg) - } - - if len(clientHello.keyShares) != 1 || clientHello.keyShares[0].group != selectedGroup { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client sent invalid key share in second ClientHello") - } - - if clientHello.earlyData { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client indicated early data in second ClientHello") - } - - if illegalClientHelloChange(clientHello, hs.clientHello) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client illegally modified second ClientHello") - } - - if clientHello.earlyData { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client offered 0-RTT data in second ClientHello") - } - - hs.clientHello = clientHello - return nil -} - -// illegalClientHelloChange reports whether the two ClientHello messages are -// different, with the exception of the changes allowed before and after a -// HelloRetryRequest. See RFC 8446, Section 4.1.2. -func illegalClientHelloChange(ch, ch1 *clientHelloMsg) bool { - if len(ch.supportedVersions) != len(ch1.supportedVersions) || - len(ch.cipherSuites) != len(ch1.cipherSuites) || - len(ch.supportedCurves) != len(ch1.supportedCurves) || - len(ch.supportedSignatureAlgorithms) != len(ch1.supportedSignatureAlgorithms) || - len(ch.supportedSignatureAlgorithmsCert) != len(ch1.supportedSignatureAlgorithmsCert) || - len(ch.alpnProtocols) != len(ch1.alpnProtocols) { - return true - } - for i := range ch.supportedVersions { - if ch.supportedVersions[i] != ch1.supportedVersions[i] { - return true - } - } - for i := range ch.cipherSuites { - if ch.cipherSuites[i] != ch1.cipherSuites[i] { - return true - } - } - for i := range ch.supportedCurves { - if ch.supportedCurves[i] != ch1.supportedCurves[i] { - return true - } - } - for i := range ch.supportedSignatureAlgorithms { - if ch.supportedSignatureAlgorithms[i] != ch1.supportedSignatureAlgorithms[i] { - return true - } - } - for i := range ch.supportedSignatureAlgorithmsCert { - if ch.supportedSignatureAlgorithmsCert[i] != ch1.supportedSignatureAlgorithmsCert[i] { - return true - } - } - for i := range ch.alpnProtocols { - if ch.alpnProtocols[i] != ch1.alpnProtocols[i] { - return true - } - } - return ch.vers != ch1.vers || - !bytes.Equal(ch.random, ch1.random) || - !bytes.Equal(ch.sessionId, ch1.sessionId) || - !bytes.Equal(ch.compressionMethods, ch1.compressionMethods) || - ch.serverName != ch1.serverName || - ch.ocspStapling != ch1.ocspStapling || - !bytes.Equal(ch.supportedPoints, ch1.supportedPoints) || - ch.ticketSupported != ch1.ticketSupported || - !bytes.Equal(ch.sessionTicket, ch1.sessionTicket) || - ch.secureRenegotiationSupported != ch1.secureRenegotiationSupported || - !bytes.Equal(ch.secureRenegotiation, ch1.secureRenegotiation) || - ch.scts != ch1.scts || - !bytes.Equal(ch.cookie, ch1.cookie) || - !bytes.Equal(ch.pskModes, ch1.pskModes) -} - -func (hs *serverHandshakeStateTLS13) sendServerParameters() error { - c := hs.c - - hs.transcript.Write(hs.clientHello.marshal()) - hs.transcript.Write(hs.hello.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil { - return err - } - - if err := hs.sendDummyChangeCipherSpec(); err != nil { - return err - } - - earlySecret := hs.earlySecret - if earlySecret == nil { - earlySecret = hs.suite.extract(nil, nil) - } - hs.handshakeSecret = hs.suite.extract(hs.sharedKey, - hs.suite.deriveSecret(earlySecret, "derived", nil)) - - clientSecret := hs.suite.deriveSecret(hs.handshakeSecret, - clientHandshakeTrafficLabel, hs.transcript) - c.in.exportKey(EncryptionHandshake, hs.suite, clientSecret) - c.in.setTrafficSecret(hs.suite, clientSecret) - serverSecret := hs.suite.deriveSecret(hs.handshakeSecret, - serverHandshakeTrafficLabel, hs.transcript) - c.out.exportKey(EncryptionHandshake, hs.suite, serverSecret) - c.out.setTrafficSecret(hs.suite, serverSecret) - - err := c.config.writeKeyLog(keyLogLabelClientHandshake, hs.clientHello.random, clientSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - err = c.config.writeKeyLog(keyLogLabelServerHandshake, hs.clientHello.random, serverSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - - if hs.alpnNegotiationErr != nil { - c.sendAlert(alertNoApplicationProtocol) - return hs.alpnNegotiationErr - } - if hs.c.extraConfig != nil && hs.c.extraConfig.GetExtensions != nil { - hs.encryptedExtensions.additionalExtensions = hs.c.extraConfig.GetExtensions(typeEncryptedExtensions) - } - - hs.transcript.Write(hs.encryptedExtensions.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.encryptedExtensions.marshal()); err != nil { - return err - } - - return nil -} - -func (hs *serverHandshakeStateTLS13) requestClientCert() bool { - return hs.c.config.ClientAuth >= RequestClientCert && !hs.usingPSK -} - -func (hs *serverHandshakeStateTLS13) sendServerCertificate() error { - c := hs.c - - // Only one of PSK and certificates are used at a time. - if hs.usingPSK { - return nil - } - - if hs.requestClientCert() { - // Request a client certificate - certReq := new(certificateRequestMsgTLS13) - certReq.ocspStapling = true - certReq.scts = true - certReq.supportedSignatureAlgorithms = supportedSignatureAlgorithms - if c.config.ClientCAs != nil { - certReq.certificateAuthorities = c.config.ClientCAs.Subjects() - } - - hs.transcript.Write(certReq.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certReq.marshal()); err != nil { - return err - } - } - - certMsg := new(certificateMsgTLS13) - - certMsg.certificate = *hs.cert - certMsg.scts = hs.clientHello.scts && len(hs.cert.SignedCertificateTimestamps) > 0 - certMsg.ocspStapling = hs.clientHello.ocspStapling && len(hs.cert.OCSPStaple) > 0 - - hs.transcript.Write(certMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certMsg.marshal()); err != nil { - return err - } - - certVerifyMsg := new(certificateVerifyMsg) - certVerifyMsg.hasSignatureAlgorithm = true - certVerifyMsg.signatureAlgorithm = hs.sigAlg - - sigType, sigHash, err := typeAndHashFromSignatureScheme(hs.sigAlg) - if err != nil { - return c.sendAlert(alertInternalError) - } - - signed := signedMessage(sigHash, serverSignatureContext, hs.transcript) - signOpts := crypto.SignerOpts(sigHash) - if sigType == signatureRSAPSS { - signOpts = &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash, Hash: sigHash} - } - sig, err := hs.cert.PrivateKey.(crypto.Signer).Sign(c.config.rand(), signed, signOpts) - if err != nil { - public := hs.cert.PrivateKey.(crypto.Signer).Public() - if rsaKey, ok := public.(*rsa.PublicKey); ok && sigType == signatureRSAPSS && - rsaKey.N.BitLen()/8 < sigHash.Size()*2+2 { // key too small for RSA-PSS - c.sendAlert(alertHandshakeFailure) - } else { - c.sendAlert(alertInternalError) - } - return errors.New("tls: failed to sign handshake: " + err.Error()) - } - certVerifyMsg.signature = sig - - hs.transcript.Write(certVerifyMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certVerifyMsg.marshal()); err != nil { - return err - } - - return nil -} - -func (hs *serverHandshakeStateTLS13) sendServerFinished() error { - c := hs.c - - finished := &finishedMsg{ - verifyData: hs.suite.finishedHash(c.out.trafficSecret, hs.transcript), - } - - hs.transcript.Write(finished.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, finished.marshal()); err != nil { - return err - } - - // Derive secrets that take context through the server Finished. - - hs.masterSecret = hs.suite.extract(nil, - hs.suite.deriveSecret(hs.handshakeSecret, "derived", nil)) - - hs.trafficSecret = hs.suite.deriveSecret(hs.masterSecret, - clientApplicationTrafficLabel, hs.transcript) - serverSecret := hs.suite.deriveSecret(hs.masterSecret, - serverApplicationTrafficLabel, hs.transcript) - c.out.exportKey(EncryptionApplication, hs.suite, serverSecret) - c.out.setTrafficSecret(hs.suite, serverSecret) - - err := c.config.writeKeyLog(keyLogLabelClientTraffic, hs.clientHello.random, hs.trafficSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - err = c.config.writeKeyLog(keyLogLabelServerTraffic, hs.clientHello.random, serverSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - - c.ekm = hs.suite.exportKeyingMaterial(hs.masterSecret, hs.transcript) - - // If we did not request client certificates, at this point we can - // precompute the client finished and roll the transcript forward to send - // session tickets in our first flight. - if !hs.requestClientCert() { - if err := hs.sendSessionTickets(); err != nil { - return err - } - } - - return nil -} - -func (hs *serverHandshakeStateTLS13) shouldSendSessionTickets() bool { - if hs.c.config.SessionTicketsDisabled { - return false - } - - // Don't send tickets the client wouldn't use. See RFC 8446, Section 4.2.9. - for _, pskMode := range hs.clientHello.pskModes { - if pskMode == pskModeDHE { - return true - } - } - return false -} - -func (hs *serverHandshakeStateTLS13) sendSessionTickets() error { - c := hs.c - - hs.clientFinished = hs.suite.finishedHash(c.in.trafficSecret, hs.transcript) - finishedMsg := &finishedMsg{ - verifyData: hs.clientFinished, - } - hs.transcript.Write(finishedMsg.marshal()) - - if !hs.shouldSendSessionTickets() { - return nil - } - - c.resumptionSecret = hs.suite.deriveSecret(hs.masterSecret, - resumptionLabel, hs.transcript) - - // Don't send session tickets when the alternative record layer is set. - // Instead, save the resumption secret on the Conn. - // Session tickets can then be generated by calling Conn.GetSessionTicket(). - if hs.c.extraConfig != nil && hs.c.extraConfig.AlternativeRecordLayer != nil { - return nil - } - - m, err := hs.c.getSessionTicketMsg(nil) - if err != nil { - return err - } - - if _, err := c.writeRecord(recordTypeHandshake, m.marshal()); err != nil { - return err - } - - return nil -} - -func (hs *serverHandshakeStateTLS13) readClientCertificate() error { - c := hs.c - - if !hs.requestClientCert() { - // Make sure the connection is still being verified whether or not - // the server requested a client certificate. - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - return nil - } - - // If we requested a client certificate, then the client must send a - // certificate message. If it's empty, no CertificateVerify is sent. - - msg, err := c.readHandshake() - if err != nil { - return err - } - - certMsg, ok := msg.(*certificateMsgTLS13) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certMsg, msg) - } - hs.transcript.Write(certMsg.marshal()) - - if err := c.processCertsFromClient(certMsg.certificate); err != nil { - return err - } - - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - if len(certMsg.certificate.Certificate) != 0 { - msg, err = c.readHandshake() - if err != nil { - return err - } - - certVerify, ok := msg.(*certificateVerifyMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certVerify, msg) - } - - // See RFC 8446, Section 4.4.3. - if !isSupportedSignatureAlgorithm(certVerify.signatureAlgorithm, supportedSignatureAlgorithms) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client certificate used with invalid signature algorithm") - } - sigType, sigHash, err := typeAndHashFromSignatureScheme(certVerify.signatureAlgorithm) - if err != nil { - return c.sendAlert(alertInternalError) - } - if sigType == signaturePKCS1v15 || sigHash == crypto.SHA1 { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client certificate used with invalid signature algorithm") - } - signed := signedMessage(sigHash, clientSignatureContext, hs.transcript) - if err := verifyHandshakeSignature(sigType, c.peerCertificates[0].PublicKey, - sigHash, signed, certVerify.signature); err != nil { - c.sendAlert(alertDecryptError) - return errors.New("tls: invalid signature by the client certificate: " + err.Error()) - } - - hs.transcript.Write(certVerify.marshal()) - } - - // If we waited until the client certificates to send session tickets, we - // are ready to do it now. - if err := hs.sendSessionTickets(); err != nil { - return err - } - - return nil -} - -func (hs *serverHandshakeStateTLS13) readClientFinished() error { - c := hs.c - - msg, err := c.readHandshake() - if err != nil { - return err - } - - finished, ok := msg.(*finishedMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(finished, msg) - } - - if !hmac.Equal(hs.clientFinished, finished.verifyData) { - c.sendAlert(alertDecryptError) - return errors.New("tls: invalid client finished hash") - } - - c.in.exportKey(EncryptionApplication, hs.suite, hs.trafficSecret) - c.in.setTrafficSecret(hs.suite, hs.trafficSecret) - - return nil -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/key_agreement.go b/vendor/github.com/quic-go/qtls-go1-18/key_agreement.go deleted file mode 100644 index 453a8dcf08..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/key_agreement.go +++ /dev/null @@ -1,357 +0,0 @@ -// Copyright 2010 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 qtls - -import ( - "crypto" - "crypto/md5" - "crypto/rsa" - "crypto/sha1" - "crypto/x509" - "errors" - "fmt" - "io" -) - -// a keyAgreement implements the client and server side of a TLS key agreement -// protocol by generating and processing key exchange messages. -type keyAgreement interface { - // On the server side, the first two methods are called in order. - - // In the case that the key agreement protocol doesn't use a - // ServerKeyExchange message, generateServerKeyExchange can return nil, - // nil. - generateServerKeyExchange(*config, *Certificate, *clientHelloMsg, *serverHelloMsg) (*serverKeyExchangeMsg, error) - processClientKeyExchange(*config, *Certificate, *clientKeyExchangeMsg, uint16) ([]byte, error) - - // On the client side, the next two methods are called in order. - - // This method may not be called if the server doesn't send a - // ServerKeyExchange message. - processServerKeyExchange(*config, *clientHelloMsg, *serverHelloMsg, *x509.Certificate, *serverKeyExchangeMsg) error - generateClientKeyExchange(*config, *clientHelloMsg, *x509.Certificate) ([]byte, *clientKeyExchangeMsg, error) -} - -var errClientKeyExchange = errors.New("tls: invalid ClientKeyExchange message") -var errServerKeyExchange = errors.New("tls: invalid ServerKeyExchange message") - -// rsaKeyAgreement implements the standard TLS key agreement where the client -// encrypts the pre-master secret to the server's public key. -type rsaKeyAgreement struct{} - -func (ka rsaKeyAgreement) generateServerKeyExchange(config *config, cert *Certificate, clientHello *clientHelloMsg, hello *serverHelloMsg) (*serverKeyExchangeMsg, error) { - return nil, nil -} - -func (ka rsaKeyAgreement) processClientKeyExchange(config *config, cert *Certificate, ckx *clientKeyExchangeMsg, version uint16) ([]byte, error) { - if len(ckx.ciphertext) < 2 { - return nil, errClientKeyExchange - } - ciphertextLen := int(ckx.ciphertext[0])<<8 | int(ckx.ciphertext[1]) - if ciphertextLen != len(ckx.ciphertext)-2 { - return nil, errClientKeyExchange - } - ciphertext := ckx.ciphertext[2:] - - priv, ok := cert.PrivateKey.(crypto.Decrypter) - if !ok { - return nil, errors.New("tls: certificate private key does not implement crypto.Decrypter") - } - // Perform constant time RSA PKCS #1 v1.5 decryption - preMasterSecret, err := priv.Decrypt(config.rand(), ciphertext, &rsa.PKCS1v15DecryptOptions{SessionKeyLen: 48}) - if err != nil { - return nil, err - } - // We don't check the version number in the premaster secret. For one, - // by checking it, we would leak information about the validity of the - // encrypted pre-master secret. Secondly, it provides only a small - // benefit against a downgrade attack and some implementations send the - // wrong version anyway. See the discussion at the end of section - // 7.4.7.1 of RFC 4346. - return preMasterSecret, nil -} - -func (ka rsaKeyAgreement) processServerKeyExchange(config *config, clientHello *clientHelloMsg, serverHello *serverHelloMsg, cert *x509.Certificate, skx *serverKeyExchangeMsg) error { - return errors.New("tls: unexpected ServerKeyExchange") -} - -func (ka rsaKeyAgreement) generateClientKeyExchange(config *config, clientHello *clientHelloMsg, cert *x509.Certificate) ([]byte, *clientKeyExchangeMsg, error) { - preMasterSecret := make([]byte, 48) - preMasterSecret[0] = byte(clientHello.vers >> 8) - preMasterSecret[1] = byte(clientHello.vers) - _, err := io.ReadFull(config.rand(), preMasterSecret[2:]) - if err != nil { - return nil, nil, err - } - - rsaKey, ok := cert.PublicKey.(*rsa.PublicKey) - if !ok { - return nil, nil, errors.New("tls: server certificate contains incorrect key type for selected ciphersuite") - } - encrypted, err := rsa.EncryptPKCS1v15(config.rand(), rsaKey, preMasterSecret) - if err != nil { - return nil, nil, err - } - ckx := new(clientKeyExchangeMsg) - ckx.ciphertext = make([]byte, len(encrypted)+2) - ckx.ciphertext[0] = byte(len(encrypted) >> 8) - ckx.ciphertext[1] = byte(len(encrypted)) - copy(ckx.ciphertext[2:], encrypted) - return preMasterSecret, ckx, nil -} - -// sha1Hash calculates a SHA1 hash over the given byte slices. -func sha1Hash(slices [][]byte) []byte { - hsha1 := sha1.New() - for _, slice := range slices { - hsha1.Write(slice) - } - return hsha1.Sum(nil) -} - -// md5SHA1Hash implements TLS 1.0's hybrid hash function which consists of the -// concatenation of an MD5 and SHA1 hash. -func md5SHA1Hash(slices [][]byte) []byte { - md5sha1 := make([]byte, md5.Size+sha1.Size) - hmd5 := md5.New() - for _, slice := range slices { - hmd5.Write(slice) - } - copy(md5sha1, hmd5.Sum(nil)) - copy(md5sha1[md5.Size:], sha1Hash(slices)) - return md5sha1 -} - -// hashForServerKeyExchange hashes the given slices and returns their digest -// using the given hash function (for >= TLS 1.2) or using a default based on -// the sigType (for earlier TLS versions). For Ed25519 signatures, which don't -// do pre-hashing, it returns the concatenation of the slices. -func hashForServerKeyExchange(sigType uint8, hashFunc crypto.Hash, version uint16, slices ...[]byte) []byte { - if sigType == signatureEd25519 { - var signed []byte - for _, slice := range slices { - signed = append(signed, slice...) - } - return signed - } - if version >= VersionTLS12 { - h := hashFunc.New() - for _, slice := range slices { - h.Write(slice) - } - digest := h.Sum(nil) - return digest - } - if sigType == signatureECDSA { - return sha1Hash(slices) - } - return md5SHA1Hash(slices) -} - -// ecdheKeyAgreement implements a TLS key agreement where the server -// generates an ephemeral EC public/private key pair and signs it. The -// pre-master secret is then calculated using ECDH. The signature may -// be ECDSA, Ed25519 or RSA. -type ecdheKeyAgreement struct { - version uint16 - isRSA bool - params ecdheParameters - - // ckx and preMasterSecret are generated in processServerKeyExchange - // and returned in generateClientKeyExchange. - ckx *clientKeyExchangeMsg - preMasterSecret []byte -} - -func (ka *ecdheKeyAgreement) generateServerKeyExchange(config *config, cert *Certificate, clientHello *clientHelloMsg, hello *serverHelloMsg) (*serverKeyExchangeMsg, error) { - var curveID CurveID - for _, c := range clientHello.supportedCurves { - if config.supportsCurve(c) { - curveID = c - break - } - } - - if curveID == 0 { - return nil, errors.New("tls: no supported elliptic curves offered") - } - if _, ok := curveForCurveID(curveID); curveID != X25519 && !ok { - return nil, errors.New("tls: CurvePreferences includes unsupported curve") - } - - params, err := generateECDHEParameters(config.rand(), curveID) - if err != nil { - return nil, err - } - ka.params = params - - // See RFC 4492, Section 5.4. - ecdhePublic := params.PublicKey() - serverECDHEParams := make([]byte, 1+2+1+len(ecdhePublic)) - serverECDHEParams[0] = 3 // named curve - serverECDHEParams[1] = byte(curveID >> 8) - serverECDHEParams[2] = byte(curveID) - serverECDHEParams[3] = byte(len(ecdhePublic)) - copy(serverECDHEParams[4:], ecdhePublic) - - priv, ok := cert.PrivateKey.(crypto.Signer) - if !ok { - return nil, fmt.Errorf("tls: certificate private key of type %T does not implement crypto.Signer", cert.PrivateKey) - } - - var signatureAlgorithm SignatureScheme - var sigType uint8 - var sigHash crypto.Hash - if ka.version >= VersionTLS12 { - signatureAlgorithm, err = selectSignatureScheme(ka.version, cert, clientHello.supportedSignatureAlgorithms) - if err != nil { - return nil, err - } - sigType, sigHash, err = typeAndHashFromSignatureScheme(signatureAlgorithm) - if err != nil { - return nil, err - } - } else { - sigType, sigHash, err = legacyTypeAndHashFromPublicKey(priv.Public()) - if err != nil { - return nil, err - } - } - if (sigType == signaturePKCS1v15 || sigType == signatureRSAPSS) != ka.isRSA { - return nil, errors.New("tls: certificate cannot be used with the selected cipher suite") - } - - signed := hashForServerKeyExchange(sigType, sigHash, ka.version, clientHello.random, hello.random, serverECDHEParams) - - signOpts := crypto.SignerOpts(sigHash) - if sigType == signatureRSAPSS { - signOpts = &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash, Hash: sigHash} - } - sig, err := priv.Sign(config.rand(), signed, signOpts) - if err != nil { - return nil, errors.New("tls: failed to sign ECDHE parameters: " + err.Error()) - } - - skx := new(serverKeyExchangeMsg) - sigAndHashLen := 0 - if ka.version >= VersionTLS12 { - sigAndHashLen = 2 - } - skx.key = make([]byte, len(serverECDHEParams)+sigAndHashLen+2+len(sig)) - copy(skx.key, serverECDHEParams) - k := skx.key[len(serverECDHEParams):] - if ka.version >= VersionTLS12 { - k[0] = byte(signatureAlgorithm >> 8) - k[1] = byte(signatureAlgorithm) - k = k[2:] - } - k[0] = byte(len(sig) >> 8) - k[1] = byte(len(sig)) - copy(k[2:], sig) - - return skx, nil -} - -func (ka *ecdheKeyAgreement) processClientKeyExchange(config *config, cert *Certificate, ckx *clientKeyExchangeMsg, version uint16) ([]byte, error) { - if len(ckx.ciphertext) == 0 || int(ckx.ciphertext[0]) != len(ckx.ciphertext)-1 { - return nil, errClientKeyExchange - } - - preMasterSecret := ka.params.SharedKey(ckx.ciphertext[1:]) - if preMasterSecret == nil { - return nil, errClientKeyExchange - } - - return preMasterSecret, nil -} - -func (ka *ecdheKeyAgreement) processServerKeyExchange(config *config, clientHello *clientHelloMsg, serverHello *serverHelloMsg, cert *x509.Certificate, skx *serverKeyExchangeMsg) error { - if len(skx.key) < 4 { - return errServerKeyExchange - } - if skx.key[0] != 3 { // named curve - return errors.New("tls: server selected unsupported curve") - } - curveID := CurveID(skx.key[1])<<8 | CurveID(skx.key[2]) - - publicLen := int(skx.key[3]) - if publicLen+4 > len(skx.key) { - return errServerKeyExchange - } - serverECDHEParams := skx.key[:4+publicLen] - publicKey := serverECDHEParams[4:] - - sig := skx.key[4+publicLen:] - if len(sig) < 2 { - return errServerKeyExchange - } - - if _, ok := curveForCurveID(curveID); curveID != X25519 && !ok { - return errors.New("tls: server selected unsupported curve") - } - - params, err := generateECDHEParameters(config.rand(), curveID) - if err != nil { - return err - } - ka.params = params - - ka.preMasterSecret = params.SharedKey(publicKey) - if ka.preMasterSecret == nil { - return errServerKeyExchange - } - - ourPublicKey := params.PublicKey() - ka.ckx = new(clientKeyExchangeMsg) - ka.ckx.ciphertext = make([]byte, 1+len(ourPublicKey)) - ka.ckx.ciphertext[0] = byte(len(ourPublicKey)) - copy(ka.ckx.ciphertext[1:], ourPublicKey) - - var sigType uint8 - var sigHash crypto.Hash - if ka.version >= VersionTLS12 { - signatureAlgorithm := SignatureScheme(sig[0])<<8 | SignatureScheme(sig[1]) - sig = sig[2:] - if len(sig) < 2 { - return errServerKeyExchange - } - - if !isSupportedSignatureAlgorithm(signatureAlgorithm, clientHello.supportedSignatureAlgorithms) { - return errors.New("tls: certificate used with invalid signature algorithm") - } - sigType, sigHash, err = typeAndHashFromSignatureScheme(signatureAlgorithm) - if err != nil { - return err - } - } else { - sigType, sigHash, err = legacyTypeAndHashFromPublicKey(cert.PublicKey) - if err != nil { - return err - } - } - if (sigType == signaturePKCS1v15 || sigType == signatureRSAPSS) != ka.isRSA { - return errServerKeyExchange - } - - sigLen := int(sig[0])<<8 | int(sig[1]) - if sigLen+2 != len(sig) { - return errServerKeyExchange - } - sig = sig[2:] - - signed := hashForServerKeyExchange(sigType, sigHash, ka.version, clientHello.random, serverHello.random, serverECDHEParams) - if err := verifyHandshakeSignature(sigType, cert.PublicKey, sigHash, signed, sig); err != nil { - return errors.New("tls: invalid signature by the server certificate: " + err.Error()) - } - return nil -} - -func (ka *ecdheKeyAgreement) generateClientKeyExchange(config *config, clientHello *clientHelloMsg, cert *x509.Certificate) ([]byte, *clientKeyExchangeMsg, error) { - if ka.ckx == nil { - return nil, nil, errors.New("tls: missing ServerKeyExchange message") - } - - return ka.preMasterSecret, ka.ckx, nil -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/key_schedule.go b/vendor/github.com/quic-go/qtls-go1-18/key_schedule.go deleted file mode 100644 index da13904a6e..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/key_schedule.go +++ /dev/null @@ -1,199 +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. - -package qtls - -import ( - "crypto/elliptic" - "crypto/hmac" - "errors" - "hash" - "io" - "math/big" - - "golang.org/x/crypto/cryptobyte" - "golang.org/x/crypto/curve25519" - "golang.org/x/crypto/hkdf" -) - -// This file contains the functions necessary to compute the TLS 1.3 key -// schedule. See RFC 8446, Section 7. - -const ( - resumptionBinderLabel = "res binder" - clientHandshakeTrafficLabel = "c hs traffic" - serverHandshakeTrafficLabel = "s hs traffic" - clientApplicationTrafficLabel = "c ap traffic" - serverApplicationTrafficLabel = "s ap traffic" - exporterLabel = "exp master" - resumptionLabel = "res master" - trafficUpdateLabel = "traffic upd" -) - -// expandLabel implements HKDF-Expand-Label from RFC 8446, Section 7.1. -func (c *cipherSuiteTLS13) expandLabel(secret []byte, label string, context []byte, length int) []byte { - var hkdfLabel cryptobyte.Builder - hkdfLabel.AddUint16(uint16(length)) - hkdfLabel.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte("tls13 ")) - b.AddBytes([]byte(label)) - }) - hkdfLabel.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(context) - }) - out := make([]byte, length) - n, err := hkdf.Expand(c.hash.New, secret, hkdfLabel.BytesOrPanic()).Read(out) - if err != nil || n != length { - panic("tls: HKDF-Expand-Label invocation failed unexpectedly") - } - return out -} - -// deriveSecret implements Derive-Secret from RFC 8446, Section 7.1. -func (c *cipherSuiteTLS13) deriveSecret(secret []byte, label string, transcript hash.Hash) []byte { - if transcript == nil { - transcript = c.hash.New() - } - return c.expandLabel(secret, label, transcript.Sum(nil), c.hash.Size()) -} - -// extract implements HKDF-Extract with the cipher suite hash. -func (c *cipherSuiteTLS13) extract(newSecret, currentSecret []byte) []byte { - if newSecret == nil { - newSecret = make([]byte, c.hash.Size()) - } - return hkdf.Extract(c.hash.New, newSecret, currentSecret) -} - -// nextTrafficSecret generates the next traffic secret, given the current one, -// according to RFC 8446, Section 7.2. -func (c *cipherSuiteTLS13) nextTrafficSecret(trafficSecret []byte) []byte { - return c.expandLabel(trafficSecret, trafficUpdateLabel, nil, c.hash.Size()) -} - -// trafficKey generates traffic keys according to RFC 8446, Section 7.3. -func (c *cipherSuiteTLS13) trafficKey(trafficSecret []byte) (key, iv []byte) { - key = c.expandLabel(trafficSecret, "key", nil, c.keyLen) - iv = c.expandLabel(trafficSecret, "iv", nil, aeadNonceLength) - return -} - -// finishedHash generates the Finished verify_data or PskBinderEntry according -// to RFC 8446, Section 4.4.4. See sections 4.4 and 4.2.11.2 for the baseKey -// selection. -func (c *cipherSuiteTLS13) finishedHash(baseKey []byte, transcript hash.Hash) []byte { - finishedKey := c.expandLabel(baseKey, "finished", nil, c.hash.Size()) - verifyData := hmac.New(c.hash.New, finishedKey) - verifyData.Write(transcript.Sum(nil)) - return verifyData.Sum(nil) -} - -// exportKeyingMaterial implements RFC5705 exporters for TLS 1.3 according to -// RFC 8446, Section 7.5. -func (c *cipherSuiteTLS13) exportKeyingMaterial(masterSecret []byte, transcript hash.Hash) func(string, []byte, int) ([]byte, error) { - expMasterSecret := c.deriveSecret(masterSecret, exporterLabel, transcript) - return func(label string, context []byte, length int) ([]byte, error) { - secret := c.deriveSecret(expMasterSecret, label, nil) - h := c.hash.New() - h.Write(context) - return c.expandLabel(secret, "exporter", h.Sum(nil), length), nil - } -} - -// ecdheParameters implements Diffie-Hellman with either NIST curves or X25519, -// according to RFC 8446, Section 4.2.8.2. -type ecdheParameters interface { - CurveID() CurveID - PublicKey() []byte - SharedKey(peerPublicKey []byte) []byte -} - -func generateECDHEParameters(rand io.Reader, curveID CurveID) (ecdheParameters, error) { - if curveID == X25519 { - privateKey := make([]byte, curve25519.ScalarSize) - if _, err := io.ReadFull(rand, privateKey); err != nil { - return nil, err - } - publicKey, err := curve25519.X25519(privateKey, curve25519.Basepoint) - if err != nil { - return nil, err - } - return &x25519Parameters{privateKey: privateKey, publicKey: publicKey}, nil - } - - curve, ok := curveForCurveID(curveID) - if !ok { - return nil, errors.New("tls: internal error: unsupported curve") - } - - p := &nistParameters{curveID: curveID} - var err error - p.privateKey, p.x, p.y, err = elliptic.GenerateKey(curve, rand) - if err != nil { - return nil, err - } - return p, nil -} - -func curveForCurveID(id CurveID) (elliptic.Curve, bool) { - switch id { - case CurveP256: - return elliptic.P256(), true - case CurveP384: - return elliptic.P384(), true - case CurveP521: - return elliptic.P521(), true - default: - return nil, false - } -} - -type nistParameters struct { - privateKey []byte - x, y *big.Int // public key - curveID CurveID -} - -func (p *nistParameters) CurveID() CurveID { - return p.curveID -} - -func (p *nistParameters) PublicKey() []byte { - curve, _ := curveForCurveID(p.curveID) - return elliptic.Marshal(curve, p.x, p.y) -} - -func (p *nistParameters) SharedKey(peerPublicKey []byte) []byte { - curve, _ := curveForCurveID(p.curveID) - // Unmarshal also checks whether the given point is on the curve. - x, y := elliptic.Unmarshal(curve, peerPublicKey) - if x == nil { - return nil - } - - xShared, _ := curve.ScalarMult(x, y, p.privateKey) - sharedKey := make([]byte, (curve.Params().BitSize+7)/8) - return xShared.FillBytes(sharedKey) -} - -type x25519Parameters struct { - privateKey []byte - publicKey []byte -} - -func (p *x25519Parameters) CurveID() CurveID { - return X25519 -} - -func (p *x25519Parameters) PublicKey() []byte { - return p.publicKey[:] -} - -func (p *x25519Parameters) SharedKey(peerPublicKey []byte) []byte { - sharedKey, err := curve25519.X25519(p.privateKey, peerPublicKey) - if err != nil { - return nil - } - return sharedKey -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/prf.go b/vendor/github.com/quic-go/qtls-go1-18/prf.go deleted file mode 100644 index 9eb0221a0c..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/prf.go +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright 2009 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 qtls - -import ( - "crypto" - "crypto/hmac" - "crypto/md5" - "crypto/sha1" - "crypto/sha256" - "crypto/sha512" - "errors" - "fmt" - "hash" -) - -// Split a premaster secret in two as specified in RFC 4346, Section 5. -func splitPreMasterSecret(secret []byte) (s1, s2 []byte) { - s1 = secret[0 : (len(secret)+1)/2] - s2 = secret[len(secret)/2:] - return -} - -// pHash implements the P_hash function, as defined in RFC 4346, Section 5. -func pHash(result, secret, seed []byte, hash func() hash.Hash) { - h := hmac.New(hash, secret) - h.Write(seed) - a := h.Sum(nil) - - j := 0 - for j < len(result) { - h.Reset() - h.Write(a) - h.Write(seed) - b := h.Sum(nil) - copy(result[j:], b) - j += len(b) - - h.Reset() - h.Write(a) - a = h.Sum(nil) - } -} - -// prf10 implements the TLS 1.0 pseudo-random function, as defined in RFC 2246, Section 5. -func prf10(result, secret, label, seed []byte) { - hashSHA1 := sha1.New - hashMD5 := md5.New - - labelAndSeed := make([]byte, len(label)+len(seed)) - copy(labelAndSeed, label) - copy(labelAndSeed[len(label):], seed) - - s1, s2 := splitPreMasterSecret(secret) - pHash(result, s1, labelAndSeed, hashMD5) - result2 := make([]byte, len(result)) - pHash(result2, s2, labelAndSeed, hashSHA1) - - for i, b := range result2 { - result[i] ^= b - } -} - -// prf12 implements the TLS 1.2 pseudo-random function, as defined in RFC 5246, Section 5. -func prf12(hashFunc func() hash.Hash) func(result, secret, label, seed []byte) { - return func(result, secret, label, seed []byte) { - labelAndSeed := make([]byte, len(label)+len(seed)) - copy(labelAndSeed, label) - copy(labelAndSeed[len(label):], seed) - - pHash(result, secret, labelAndSeed, hashFunc) - } -} - -const ( - masterSecretLength = 48 // Length of a master secret in TLS 1.1. - finishedVerifyLength = 12 // Length of verify_data in a Finished message. -) - -var masterSecretLabel = []byte("master secret") -var keyExpansionLabel = []byte("key expansion") -var clientFinishedLabel = []byte("client finished") -var serverFinishedLabel = []byte("server finished") - -func prfAndHashForVersion(version uint16, suite *cipherSuite) (func(result, secret, label, seed []byte), crypto.Hash) { - switch version { - case VersionTLS10, VersionTLS11: - return prf10, crypto.Hash(0) - case VersionTLS12: - if suite.flags&suiteSHA384 != 0 { - return prf12(sha512.New384), crypto.SHA384 - } - return prf12(sha256.New), crypto.SHA256 - default: - panic("unknown version") - } -} - -func prfForVersion(version uint16, suite *cipherSuite) func(result, secret, label, seed []byte) { - prf, _ := prfAndHashForVersion(version, suite) - return prf -} - -// masterFromPreMasterSecret generates the master secret from the pre-master -// secret. See RFC 5246, Section 8.1. -func masterFromPreMasterSecret(version uint16, suite *cipherSuite, preMasterSecret, clientRandom, serverRandom []byte) []byte { - seed := make([]byte, 0, len(clientRandom)+len(serverRandom)) - seed = append(seed, clientRandom...) - seed = append(seed, serverRandom...) - - masterSecret := make([]byte, masterSecretLength) - prfForVersion(version, suite)(masterSecret, preMasterSecret, masterSecretLabel, seed) - return masterSecret -} - -// keysFromMasterSecret generates the connection keys from the master -// secret, given the lengths of the MAC key, cipher key and IV, as defined in -// RFC 2246, Section 6.3. -func keysFromMasterSecret(version uint16, suite *cipherSuite, masterSecret, clientRandom, serverRandom []byte, macLen, keyLen, ivLen int) (clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV []byte) { - seed := make([]byte, 0, len(serverRandom)+len(clientRandom)) - seed = append(seed, serverRandom...) - seed = append(seed, clientRandom...) - - n := 2*macLen + 2*keyLen + 2*ivLen - keyMaterial := make([]byte, n) - prfForVersion(version, suite)(keyMaterial, masterSecret, keyExpansionLabel, seed) - clientMAC = keyMaterial[:macLen] - keyMaterial = keyMaterial[macLen:] - serverMAC = keyMaterial[:macLen] - keyMaterial = keyMaterial[macLen:] - clientKey = keyMaterial[:keyLen] - keyMaterial = keyMaterial[keyLen:] - serverKey = keyMaterial[:keyLen] - keyMaterial = keyMaterial[keyLen:] - clientIV = keyMaterial[:ivLen] - keyMaterial = keyMaterial[ivLen:] - serverIV = keyMaterial[:ivLen] - return -} - -func newFinishedHash(version uint16, cipherSuite *cipherSuite) finishedHash { - var buffer []byte - if version >= VersionTLS12 { - buffer = []byte{} - } - - prf, hash := prfAndHashForVersion(version, cipherSuite) - if hash != 0 { - return finishedHash{hash.New(), hash.New(), nil, nil, buffer, version, prf} - } - - return finishedHash{sha1.New(), sha1.New(), md5.New(), md5.New(), buffer, version, prf} -} - -// A finishedHash calculates the hash of a set of handshake messages suitable -// for including in a Finished message. -type finishedHash struct { - client hash.Hash - server hash.Hash - - // Prior to TLS 1.2, an additional MD5 hash is required. - clientMD5 hash.Hash - serverMD5 hash.Hash - - // In TLS 1.2, a full buffer is sadly required. - buffer []byte - - version uint16 - prf func(result, secret, label, seed []byte) -} - -func (h *finishedHash) Write(msg []byte) (n int, err error) { - h.client.Write(msg) - h.server.Write(msg) - - if h.version < VersionTLS12 { - h.clientMD5.Write(msg) - h.serverMD5.Write(msg) - } - - if h.buffer != nil { - h.buffer = append(h.buffer, msg...) - } - - return len(msg), nil -} - -func (h finishedHash) Sum() []byte { - if h.version >= VersionTLS12 { - return h.client.Sum(nil) - } - - out := make([]byte, 0, md5.Size+sha1.Size) - out = h.clientMD5.Sum(out) - return h.client.Sum(out) -} - -// clientSum returns the contents of the verify_data member of a client's -// Finished message. -func (h finishedHash) clientSum(masterSecret []byte) []byte { - out := make([]byte, finishedVerifyLength) - h.prf(out, masterSecret, clientFinishedLabel, h.Sum()) - return out -} - -// serverSum returns the contents of the verify_data member of a server's -// Finished message. -func (h finishedHash) serverSum(masterSecret []byte) []byte { - out := make([]byte, finishedVerifyLength) - h.prf(out, masterSecret, serverFinishedLabel, h.Sum()) - return out -} - -// hashForClientCertificate returns the handshake messages so far, pre-hashed if -// necessary, suitable for signing by a TLS client certificate. -func (h finishedHash) hashForClientCertificate(sigType uint8, hashAlg crypto.Hash, masterSecret []byte) []byte { - if (h.version >= VersionTLS12 || sigType == signatureEd25519) && h.buffer == nil { - panic("tls: handshake hash for a client certificate requested after discarding the handshake buffer") - } - - if sigType == signatureEd25519 { - return h.buffer - } - - if h.version >= VersionTLS12 { - hash := hashAlg.New() - hash.Write(h.buffer) - return hash.Sum(nil) - } - - if sigType == signatureECDSA { - return h.server.Sum(nil) - } - - return h.Sum() -} - -// discardHandshakeBuffer is called when there is no more need to -// buffer the entirety of the handshake messages. -func (h *finishedHash) discardHandshakeBuffer() { - h.buffer = nil -} - -// noExportedKeyingMaterial is used as a value of -// ConnectionState.ekm when renegotiation is enabled and thus -// we wish to fail all key-material export requests. -func noExportedKeyingMaterial(label string, context []byte, length int) ([]byte, error) { - return nil, errors.New("crypto/tls: ExportKeyingMaterial is unavailable when renegotiation is enabled") -} - -// ekmFromMasterSecret generates exported keying material as defined in RFC 5705. -func ekmFromMasterSecret(version uint16, suite *cipherSuite, masterSecret, clientRandom, serverRandom []byte) func(string, []byte, int) ([]byte, error) { - return func(label string, context []byte, length int) ([]byte, error) { - switch label { - case "client finished", "server finished", "master secret", "key expansion": - // These values are reserved and may not be used. - return nil, fmt.Errorf("crypto/tls: reserved ExportKeyingMaterial label: %s", label) - } - - seedLen := len(serverRandom) + len(clientRandom) - if context != nil { - seedLen += 2 + len(context) - } - seed := make([]byte, 0, seedLen) - - seed = append(seed, clientRandom...) - seed = append(seed, serverRandom...) - - if context != nil { - if len(context) >= 1<<16 { - return nil, fmt.Errorf("crypto/tls: ExportKeyingMaterial context too long") - } - seed = append(seed, byte(len(context)>>8), byte(len(context))) - seed = append(seed, context...) - } - - keyMaterial := make([]byte, length) - prfForVersion(version, suite)(keyMaterial, masterSecret, []byte(label), seed) - return keyMaterial, nil - } -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/ticket.go b/vendor/github.com/quic-go/qtls-go1-18/ticket.go deleted file mode 100644 index 81e8a52eac..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/ticket.go +++ /dev/null @@ -1,274 +0,0 @@ -// 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. - -package qtls - -import ( - "bytes" - "crypto/aes" - "crypto/cipher" - "crypto/hmac" - "crypto/sha256" - "crypto/subtle" - "encoding/binary" - "errors" - "io" - "time" - - "golang.org/x/crypto/cryptobyte" -) - -// sessionState contains the information that is serialized into a session -// ticket in order to later resume a connection. -type sessionState struct { - vers uint16 - cipherSuite uint16 - createdAt uint64 - masterSecret []byte // opaque master_secret<1..2^16-1>; - // struct { opaque certificate<1..2^24-1> } Certificate; - certificates [][]byte // Certificate certificate_list<0..2^24-1>; - - // usedOldKey is true if the ticket from which this session came from - // was encrypted with an older key and thus should be refreshed. - usedOldKey bool -} - -func (m *sessionState) marshal() []byte { - var b cryptobyte.Builder - b.AddUint16(m.vers) - b.AddUint16(m.cipherSuite) - addUint64(&b, m.createdAt) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.masterSecret) - }) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - for _, cert := range m.certificates { - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(cert) - }) - } - }) - return b.BytesOrPanic() -} - -func (m *sessionState) unmarshal(data []byte) bool { - *m = sessionState{usedOldKey: m.usedOldKey} - s := cryptobyte.String(data) - if ok := s.ReadUint16(&m.vers) && - s.ReadUint16(&m.cipherSuite) && - readUint64(&s, &m.createdAt) && - readUint16LengthPrefixed(&s, &m.masterSecret) && - len(m.masterSecret) != 0; !ok { - return false - } - var certList cryptobyte.String - if !s.ReadUint24LengthPrefixed(&certList) { - return false - } - for !certList.Empty() { - var cert []byte - if !readUint24LengthPrefixed(&certList, &cert) { - return false - } - m.certificates = append(m.certificates, cert) - } - return s.Empty() -} - -// sessionStateTLS13 is the content of a TLS 1.3 session ticket. Its first -// version (revision = 0) doesn't carry any of the information needed for 0-RTT -// validation and the nonce is always empty. -// version (revision = 1) carries the max_early_data_size sent in the ticket. -// version (revision = 2) carries the ALPN sent in the ticket. -type sessionStateTLS13 struct { - // uint8 version = 0x0304; - // uint8 revision = 2; - cipherSuite uint16 - createdAt uint64 - resumptionSecret []byte // opaque resumption_master_secret<1..2^8-1>; - certificate Certificate // CertificateEntry certificate_list<0..2^24-1>; - maxEarlyData uint32 - alpn string - - appData []byte -} - -func (m *sessionStateTLS13) marshal() []byte { - var b cryptobyte.Builder - b.AddUint16(VersionTLS13) - b.AddUint8(2) // revision - b.AddUint16(m.cipherSuite) - addUint64(&b, m.createdAt) - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.resumptionSecret) - }) - marshalCertificate(&b, m.certificate) - b.AddUint32(m.maxEarlyData) - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(m.alpn)) - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.appData) - }) - return b.BytesOrPanic() -} - -func (m *sessionStateTLS13) unmarshal(data []byte) bool { - *m = sessionStateTLS13{} - s := cryptobyte.String(data) - var version uint16 - var revision uint8 - var alpn []byte - ret := s.ReadUint16(&version) && - version == VersionTLS13 && - s.ReadUint8(&revision) && - revision == 2 && - s.ReadUint16(&m.cipherSuite) && - readUint64(&s, &m.createdAt) && - readUint8LengthPrefixed(&s, &m.resumptionSecret) && - len(m.resumptionSecret) != 0 && - unmarshalCertificate(&s, &m.certificate) && - s.ReadUint32(&m.maxEarlyData) && - readUint8LengthPrefixed(&s, &alpn) && - readUint16LengthPrefixed(&s, &m.appData) && - s.Empty() - m.alpn = string(alpn) - return ret -} - -func (c *Conn) encryptTicket(state []byte) ([]byte, error) { - if len(c.ticketKeys) == 0 { - return nil, errors.New("tls: internal error: session ticket keys unavailable") - } - - encrypted := make([]byte, ticketKeyNameLen+aes.BlockSize+len(state)+sha256.Size) - keyName := encrypted[:ticketKeyNameLen] - iv := encrypted[ticketKeyNameLen : ticketKeyNameLen+aes.BlockSize] - macBytes := encrypted[len(encrypted)-sha256.Size:] - - if _, err := io.ReadFull(c.config.rand(), iv); err != nil { - return nil, err - } - key := c.ticketKeys[0] - copy(keyName, key.keyName[:]) - block, err := aes.NewCipher(key.aesKey[:]) - if err != nil { - return nil, errors.New("tls: failed to create cipher while encrypting ticket: " + err.Error()) - } - cipher.NewCTR(block, iv).XORKeyStream(encrypted[ticketKeyNameLen+aes.BlockSize:], state) - - mac := hmac.New(sha256.New, key.hmacKey[:]) - mac.Write(encrypted[:len(encrypted)-sha256.Size]) - mac.Sum(macBytes[:0]) - - return encrypted, nil -} - -func (c *Conn) decryptTicket(encrypted []byte) (plaintext []byte, usedOldKey bool) { - if len(encrypted) < ticketKeyNameLen+aes.BlockSize+sha256.Size { - return nil, false - } - - keyName := encrypted[:ticketKeyNameLen] - iv := encrypted[ticketKeyNameLen : ticketKeyNameLen+aes.BlockSize] - macBytes := encrypted[len(encrypted)-sha256.Size:] - ciphertext := encrypted[ticketKeyNameLen+aes.BlockSize : len(encrypted)-sha256.Size] - - keyIndex := -1 - for i, candidateKey := range c.ticketKeys { - if bytes.Equal(keyName, candidateKey.keyName[:]) { - keyIndex = i - break - } - } - if keyIndex == -1 { - return nil, false - } - key := &c.ticketKeys[keyIndex] - - mac := hmac.New(sha256.New, key.hmacKey[:]) - mac.Write(encrypted[:len(encrypted)-sha256.Size]) - expected := mac.Sum(nil) - - if subtle.ConstantTimeCompare(macBytes, expected) != 1 { - return nil, false - } - - block, err := aes.NewCipher(key.aesKey[:]) - if err != nil { - return nil, false - } - plaintext = make([]byte, len(ciphertext)) - cipher.NewCTR(block, iv).XORKeyStream(plaintext, ciphertext) - - return plaintext, keyIndex > 0 -} - -func (c *Conn) getSessionTicketMsg(appData []byte) (*newSessionTicketMsgTLS13, error) { - m := new(newSessionTicketMsgTLS13) - - var certsFromClient [][]byte - for _, cert := range c.peerCertificates { - certsFromClient = append(certsFromClient, cert.Raw) - } - state := sessionStateTLS13{ - cipherSuite: c.cipherSuite, - createdAt: uint64(c.config.time().Unix()), - resumptionSecret: c.resumptionSecret, - certificate: Certificate{ - Certificate: certsFromClient, - OCSPStaple: c.ocspResponse, - SignedCertificateTimestamps: c.scts, - }, - appData: appData, - alpn: c.clientProtocol, - } - if c.extraConfig != nil { - state.maxEarlyData = c.extraConfig.MaxEarlyData - } - var err error - m.label, err = c.encryptTicket(state.marshal()) - if err != nil { - return nil, err - } - m.lifetime = uint32(maxSessionTicketLifetime / time.Second) - - // ticket_age_add is a random 32-bit value. See RFC 8446, section 4.6.1 - // The value is not stored anywhere; we never need to check the ticket age - // because 0-RTT is not supported. - ageAdd := make([]byte, 4) - _, err = c.config.rand().Read(ageAdd) - if err != nil { - return nil, err - } - m.ageAdd = binary.LittleEndian.Uint32(ageAdd) - - // ticket_nonce, which must be unique per connection, is always left at - // zero because we only ever send one ticket per connection. - - if c.extraConfig != nil { - m.maxEarlyData = c.extraConfig.MaxEarlyData - } - return m, nil -} - -// GetSessionTicket generates a new session ticket. -// It should only be called after the handshake completes. -// It can only be used for servers, and only if the alternative record layer is set. -// The ticket may be nil if config.SessionTicketsDisabled is set, -// or if the client isn't able to receive session tickets. -func (c *Conn) GetSessionTicket(appData []byte) ([]byte, error) { - if c.isClient || !c.handshakeComplete() || c.extraConfig == nil || c.extraConfig.AlternativeRecordLayer == nil { - return nil, errors.New("GetSessionTicket is only valid for servers after completion of the handshake, and if an alternative record layer is set.") - } - if c.config.SessionTicketsDisabled { - return nil, nil - } - - m, err := c.getSessionTicketMsg(appData) - if err != nil { - return nil, err - } - return m.marshal(), nil -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/tls.go b/vendor/github.com/quic-go/qtls-go1-18/tls.go deleted file mode 100644 index 42207c235f..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/tls.go +++ /dev/null @@ -1,362 +0,0 @@ -// Copyright 2009 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 qtls partially implements TLS 1.2, as specified in RFC 5246, -// and TLS 1.3, as specified in RFC 8446. -package qtls - -// BUG(agl): The crypto/tls package only implements some countermeasures -// against Lucky13 attacks on CBC-mode encryption, and only on SHA1 -// variants. See http://www.isg.rhul.ac.uk/tls/TLStiming.pdf and -// https://www.imperialviolet.org/2013/02/04/luckythirteen.html. - -import ( - "bytes" - "context" - "crypto" - "crypto/ecdsa" - "crypto/ed25519" - "crypto/rsa" - "crypto/x509" - "encoding/pem" - "errors" - "fmt" - "net" - "os" - "strings" -) - -// Server returns a new TLS server side connection -// using conn as the underlying transport. -// The configuration config must be non-nil and must include -// at least one certificate or else set GetCertificate. -func Server(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { - c := &Conn{ - conn: conn, - config: fromConfig(config), - extraConfig: extraConfig, - } - c.handshakeFn = c.serverHandshake - return c -} - -// Client returns a new TLS client side connection -// using conn as the underlying transport. -// The config cannot be nil: users must set either ServerName or -// InsecureSkipVerify in the config. -func Client(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { - c := &Conn{ - conn: conn, - config: fromConfig(config), - extraConfig: extraConfig, - isClient: true, - } - c.handshakeFn = c.clientHandshake - return c -} - -// A listener implements a network listener (net.Listener) for TLS connections. -type listener struct { - net.Listener - config *Config - extraConfig *ExtraConfig -} - -// Accept waits for and returns the next incoming TLS connection. -// The returned connection is of type *Conn. -func (l *listener) Accept() (net.Conn, error) { - c, err := l.Listener.Accept() - if err != nil { - return nil, err - } - return Server(c, l.config, l.extraConfig), nil -} - -// NewListener creates a Listener which accepts connections from an inner -// Listener and wraps each connection with Server. -// The configuration config must be non-nil and must include -// at least one certificate or else set GetCertificate. -func NewListener(inner net.Listener, config *Config, extraConfig *ExtraConfig) net.Listener { - l := new(listener) - l.Listener = inner - l.config = config - l.extraConfig = extraConfig - return l -} - -// Listen creates a TLS listener accepting connections on the -// given network address using net.Listen. -// The configuration config must be non-nil and must include -// at least one certificate or else set GetCertificate. -func Listen(network, laddr string, config *Config, extraConfig *ExtraConfig) (net.Listener, error) { - if config == nil || len(config.Certificates) == 0 && - config.GetCertificate == nil && config.GetConfigForClient == nil { - return nil, errors.New("tls: neither Certificates, GetCertificate, nor GetConfigForClient set in Config") - } - l, err := net.Listen(network, laddr) - if err != nil { - return nil, err - } - return NewListener(l, config, extraConfig), nil -} - -type timeoutError struct{} - -func (timeoutError) Error() string { return "tls: DialWithDialer timed out" } -func (timeoutError) Timeout() bool { return true } -func (timeoutError) Temporary() bool { return true } - -// DialWithDialer connects to the given network address using dialer.Dial and -// then initiates a TLS handshake, returning the resulting TLS connection. Any -// timeout or deadline given in the dialer apply to connection and TLS -// handshake as a whole. -// -// DialWithDialer interprets a nil configuration as equivalent to the zero -// configuration; see the documentation of Config for the defaults. -// -// DialWithDialer uses context.Background internally; to specify the context, -// use Dialer.DialContext with NetDialer set to the desired dialer. -func DialWithDialer(dialer *net.Dialer, network, addr string, config *Config, extraConfig *ExtraConfig) (*Conn, error) { - return dial(context.Background(), dialer, network, addr, config, extraConfig) -} - -func dial(ctx context.Context, netDialer *net.Dialer, network, addr string, config *Config, extraConfig *ExtraConfig) (*Conn, error) { - if netDialer.Timeout != 0 { - var cancel context.CancelFunc - ctx, cancel = context.WithTimeout(ctx, netDialer.Timeout) - defer cancel() - } - - if !netDialer.Deadline.IsZero() { - var cancel context.CancelFunc - ctx, cancel = context.WithDeadline(ctx, netDialer.Deadline) - defer cancel() - } - - rawConn, err := netDialer.DialContext(ctx, network, addr) - if err != nil { - return nil, err - } - - colonPos := strings.LastIndex(addr, ":") - if colonPos == -1 { - colonPos = len(addr) - } - hostname := addr[:colonPos] - - if config == nil { - config = defaultConfig() - } - // If no ServerName is set, infer the ServerName - // from the hostname we're connecting to. - if config.ServerName == "" { - // Make a copy to avoid polluting argument or default. - c := config.Clone() - c.ServerName = hostname - config = c - } - - conn := Client(rawConn, config, extraConfig) - if err := conn.HandshakeContext(ctx); err != nil { - rawConn.Close() - return nil, err - } - return conn, nil -} - -// Dial connects to the given network address using net.Dial -// and then initiates a TLS handshake, returning the resulting -// TLS connection. -// Dial interprets a nil configuration as equivalent to -// the zero configuration; see the documentation of Config -// for the defaults. -func Dial(network, addr string, config *Config, extraConfig *ExtraConfig) (*Conn, error) { - return DialWithDialer(new(net.Dialer), network, addr, config, extraConfig) -} - -// Dialer dials TLS connections given a configuration and a Dialer for the -// underlying connection. -type Dialer struct { - // NetDialer is the optional dialer to use for the TLS connections' - // underlying TCP connections. - // A nil NetDialer is equivalent to the net.Dialer zero value. - NetDialer *net.Dialer - - // Config is the TLS configuration to use for new connections. - // A nil configuration is equivalent to the zero - // configuration; see the documentation of Config for the - // defaults. - Config *Config - - ExtraConfig *ExtraConfig -} - -// Dial connects to the given network address and initiates a TLS -// handshake, returning the resulting TLS connection. -// -// The returned Conn, if any, will always be of type *Conn. -// -// Dial uses context.Background internally; to specify the context, -// use DialContext. -func (d *Dialer) Dial(network, addr string) (net.Conn, error) { - return d.DialContext(context.Background(), network, addr) -} - -func (d *Dialer) netDialer() *net.Dialer { - if d.NetDialer != nil { - return d.NetDialer - } - return new(net.Dialer) -} - -// DialContext connects to the given network address and initiates a TLS -// handshake, returning the resulting TLS connection. -// -// The provided Context must be non-nil. If the context expires before -// the connection is complete, an error is returned. Once successfully -// connected, any expiration of the context will not affect the -// connection. -// -// The returned Conn, if any, will always be of type *Conn. -func (d *Dialer) DialContext(ctx context.Context, network, addr string) (net.Conn, error) { - c, err := dial(ctx, d.netDialer(), network, addr, d.Config, d.ExtraConfig) - if err != nil { - // Don't return c (a typed nil) in an interface. - return nil, err - } - return c, nil -} - -// LoadX509KeyPair reads and parses a public/private key pair from a pair -// of files. The files must contain PEM encoded data. The certificate file -// may contain intermediate certificates following the leaf certificate to -// form a certificate chain. On successful return, Certificate.Leaf will -// be nil because the parsed form of the certificate is not retained. -func LoadX509KeyPair(certFile, keyFile string) (Certificate, error) { - certPEMBlock, err := os.ReadFile(certFile) - if err != nil { - return Certificate{}, err - } - keyPEMBlock, err := os.ReadFile(keyFile) - if err != nil { - return Certificate{}, err - } - return X509KeyPair(certPEMBlock, keyPEMBlock) -} - -// X509KeyPair parses a public/private key pair from a pair of -// PEM encoded data. On successful return, Certificate.Leaf will be nil because -// the parsed form of the certificate is not retained. -func X509KeyPair(certPEMBlock, keyPEMBlock []byte) (Certificate, error) { - fail := func(err error) (Certificate, error) { return Certificate{}, err } - - var cert Certificate - var skippedBlockTypes []string - for { - var certDERBlock *pem.Block - certDERBlock, certPEMBlock = pem.Decode(certPEMBlock) - if certDERBlock == nil { - break - } - if certDERBlock.Type == "CERTIFICATE" { - cert.Certificate = append(cert.Certificate, certDERBlock.Bytes) - } else { - skippedBlockTypes = append(skippedBlockTypes, certDERBlock.Type) - } - } - - if len(cert.Certificate) == 0 { - if len(skippedBlockTypes) == 0 { - return fail(errors.New("tls: failed to find any PEM data in certificate input")) - } - if len(skippedBlockTypes) == 1 && strings.HasSuffix(skippedBlockTypes[0], "PRIVATE KEY") { - return fail(errors.New("tls: failed to find certificate PEM data in certificate input, but did find a private key; PEM inputs may have been switched")) - } - return fail(fmt.Errorf("tls: failed to find \"CERTIFICATE\" PEM block in certificate input after skipping PEM blocks of the following types: %v", skippedBlockTypes)) - } - - skippedBlockTypes = skippedBlockTypes[:0] - var keyDERBlock *pem.Block - for { - keyDERBlock, keyPEMBlock = pem.Decode(keyPEMBlock) - if keyDERBlock == nil { - if len(skippedBlockTypes) == 0 { - return fail(errors.New("tls: failed to find any PEM data in key input")) - } - if len(skippedBlockTypes) == 1 && skippedBlockTypes[0] == "CERTIFICATE" { - return fail(errors.New("tls: found a certificate rather than a key in the PEM for the private key")) - } - return fail(fmt.Errorf("tls: failed to find PEM block with type ending in \"PRIVATE KEY\" in key input after skipping PEM blocks of the following types: %v", skippedBlockTypes)) - } - if keyDERBlock.Type == "PRIVATE KEY" || strings.HasSuffix(keyDERBlock.Type, " PRIVATE KEY") { - break - } - skippedBlockTypes = append(skippedBlockTypes, keyDERBlock.Type) - } - - // We don't need to parse the public key for TLS, but we so do anyway - // to check that it looks sane and matches the private key. - x509Cert, err := x509.ParseCertificate(cert.Certificate[0]) - if err != nil { - return fail(err) - } - - cert.PrivateKey, err = parsePrivateKey(keyDERBlock.Bytes) - if err != nil { - return fail(err) - } - - switch pub := x509Cert.PublicKey.(type) { - case *rsa.PublicKey: - priv, ok := cert.PrivateKey.(*rsa.PrivateKey) - if !ok { - return fail(errors.New("tls: private key type does not match public key type")) - } - if pub.N.Cmp(priv.N) != 0 { - return fail(errors.New("tls: private key does not match public key")) - } - case *ecdsa.PublicKey: - priv, ok := cert.PrivateKey.(*ecdsa.PrivateKey) - if !ok { - return fail(errors.New("tls: private key type does not match public key type")) - } - if pub.X.Cmp(priv.X) != 0 || pub.Y.Cmp(priv.Y) != 0 { - return fail(errors.New("tls: private key does not match public key")) - } - case ed25519.PublicKey: - priv, ok := cert.PrivateKey.(ed25519.PrivateKey) - if !ok { - return fail(errors.New("tls: private key type does not match public key type")) - } - if !bytes.Equal(priv.Public().(ed25519.PublicKey), pub) { - return fail(errors.New("tls: private key does not match public key")) - } - default: - return fail(errors.New("tls: unknown public key algorithm")) - } - - return cert, nil -} - -// Attempt to parse the given private key DER block. OpenSSL 0.9.8 generates -// PKCS #1 private keys by default, while OpenSSL 1.0.0 generates PKCS #8 keys. -// OpenSSL ecparam generates SEC1 EC private keys for ECDSA. We try all three. -func parsePrivateKey(der []byte) (crypto.PrivateKey, error) { - if key, err := x509.ParsePKCS1PrivateKey(der); err == nil { - return key, nil - } - if key, err := x509.ParsePKCS8PrivateKey(der); err == nil { - switch key := key.(type) { - case *rsa.PrivateKey, *ecdsa.PrivateKey, ed25519.PrivateKey: - return key, nil - default: - return nil, errors.New("tls: found unknown private key type in PKCS#8 wrapping") - } - } - if key, err := x509.ParseECPrivateKey(der); err == nil { - return key, nil - } - - return nil, errors.New("tls: failed to parse private key") -} diff --git a/vendor/github.com/quic-go/qtls-go1-18/unsafe.go b/vendor/github.com/quic-go/qtls-go1-18/unsafe.go deleted file mode 100644 index 55fa01b3d6..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-18/unsafe.go +++ /dev/null @@ -1,96 +0,0 @@ -package qtls - -import ( - "crypto/tls" - "reflect" - "unsafe" -) - -func init() { - if !structsEqual(&tls.ConnectionState{}, &connectionState{}) { - panic("qtls.ConnectionState doesn't match") - } - if !structsEqual(&tls.ClientSessionState{}, &clientSessionState{}) { - panic("qtls.ClientSessionState doesn't match") - } - if !structsEqual(&tls.CertificateRequestInfo{}, &certificateRequestInfo{}) { - panic("qtls.CertificateRequestInfo doesn't match") - } - if !structsEqual(&tls.Config{}, &config{}) { - panic("qtls.Config doesn't match") - } - if !structsEqual(&tls.ClientHelloInfo{}, &clientHelloInfo{}) { - panic("qtls.ClientHelloInfo doesn't match") - } -} - -func toConnectionState(c connectionState) ConnectionState { - return *(*ConnectionState)(unsafe.Pointer(&c)) -} - -func toClientSessionState(s *clientSessionState) *ClientSessionState { - return (*ClientSessionState)(unsafe.Pointer(s)) -} - -func fromClientSessionState(s *ClientSessionState) *clientSessionState { - return (*clientSessionState)(unsafe.Pointer(s)) -} - -func toCertificateRequestInfo(i *certificateRequestInfo) *CertificateRequestInfo { - return (*CertificateRequestInfo)(unsafe.Pointer(i)) -} - -func toConfig(c *config) *Config { - return (*Config)(unsafe.Pointer(c)) -} - -func fromConfig(c *Config) *config { - return (*config)(unsafe.Pointer(c)) -} - -func toClientHelloInfo(chi *clientHelloInfo) *ClientHelloInfo { - return (*ClientHelloInfo)(unsafe.Pointer(chi)) -} - -func structsEqual(a, b interface{}) bool { - return compare(reflect.ValueOf(a), reflect.ValueOf(b)) -} - -func compare(a, b reflect.Value) bool { - sa := a.Elem() - sb := b.Elem() - if sa.NumField() != sb.NumField() { - return false - } - for i := 0; i < sa.NumField(); i++ { - fa := sa.Type().Field(i) - fb := sb.Type().Field(i) - if !reflect.DeepEqual(fa.Index, fb.Index) || fa.Name != fb.Name || fa.Anonymous != fb.Anonymous || fa.Offset != fb.Offset || !reflect.DeepEqual(fa.Type, fb.Type) { - if fa.Type.Kind() != fb.Type.Kind() { - return false - } - if fa.Type.Kind() == reflect.Slice { - if !compareStruct(fa.Type.Elem(), fb.Type.Elem()) { - return false - } - continue - } - return false - } - } - return true -} - -func compareStruct(a, b reflect.Type) bool { - if a.NumField() != b.NumField() { - return false - } - for i := 0; i < a.NumField(); i++ { - fa := a.Field(i) - fb := b.Field(i) - if !reflect.DeepEqual(fa.Index, fb.Index) || fa.Name != fb.Name || fa.Anonymous != fb.Anonymous || fa.Offset != fb.Offset || !reflect.DeepEqual(fa.Type, fb.Type) { - return false - } - } - return true -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/LICENSE b/vendor/github.com/quic-go/qtls-go1-19/LICENSE deleted file mode 100644 index 6a66aea5ea..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -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 -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/quic-go/qtls-go1-19/README.md b/vendor/github.com/quic-go/qtls-go1-19/README.md deleted file mode 100644 index bf41f1c5f1..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# qtls - -[![Go Reference](https://pkg.go.dev/badge/github.com/quic-go/qtls-go1-19.svg)](https://pkg.go.dev/github.com/quic-go/qtls-go1-19) -[![.github/workflows/go-test.yml](https://github.com/quic-go/qtls-go1-19/actions/workflows/go-test.yml/badge.svg)](https://github.com/quic-go/qtls-go1-19/actions/workflows/go-test.yml) - -This repository contains a modified version of the standard library's TLS implementation, modified for the QUIC protocol. It is used by [quic-go](https://github.com/lucas-clemente/quic-go). diff --git a/vendor/github.com/quic-go/qtls-go1-19/alert.go b/vendor/github.com/quic-go/qtls-go1-19/alert.go deleted file mode 100644 index 3feac79be8..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/alert.go +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2009 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 qtls - -import "strconv" - -type alert uint8 - -// Alert is a TLS alert -type Alert = alert - -const ( - // alert level - alertLevelWarning = 1 - alertLevelError = 2 -) - -const ( - alertCloseNotify alert = 0 - alertUnexpectedMessage alert = 10 - alertBadRecordMAC alert = 20 - alertDecryptionFailed alert = 21 - alertRecordOverflow alert = 22 - alertDecompressionFailure alert = 30 - alertHandshakeFailure alert = 40 - alertBadCertificate alert = 42 - alertUnsupportedCertificate alert = 43 - alertCertificateRevoked alert = 44 - alertCertificateExpired alert = 45 - alertCertificateUnknown alert = 46 - alertIllegalParameter alert = 47 - alertUnknownCA alert = 48 - alertAccessDenied alert = 49 - alertDecodeError alert = 50 - alertDecryptError alert = 51 - alertExportRestriction alert = 60 - alertProtocolVersion alert = 70 - alertInsufficientSecurity alert = 71 - alertInternalError alert = 80 - alertInappropriateFallback alert = 86 - alertUserCanceled alert = 90 - alertNoRenegotiation alert = 100 - alertMissingExtension alert = 109 - alertUnsupportedExtension alert = 110 - alertCertificateUnobtainable alert = 111 - alertUnrecognizedName alert = 112 - alertBadCertificateStatusResponse alert = 113 - alertBadCertificateHashValue alert = 114 - alertUnknownPSKIdentity alert = 115 - alertCertificateRequired alert = 116 - alertNoApplicationProtocol alert = 120 -) - -var alertText = map[alert]string{ - alertCloseNotify: "close notify", - alertUnexpectedMessage: "unexpected message", - alertBadRecordMAC: "bad record MAC", - alertDecryptionFailed: "decryption failed", - alertRecordOverflow: "record overflow", - alertDecompressionFailure: "decompression failure", - alertHandshakeFailure: "handshake failure", - alertBadCertificate: "bad certificate", - alertUnsupportedCertificate: "unsupported certificate", - alertCertificateRevoked: "revoked certificate", - alertCertificateExpired: "expired certificate", - alertCertificateUnknown: "unknown certificate", - alertIllegalParameter: "illegal parameter", - alertUnknownCA: "unknown certificate authority", - alertAccessDenied: "access denied", - alertDecodeError: "error decoding message", - alertDecryptError: "error decrypting message", - alertExportRestriction: "export restriction", - alertProtocolVersion: "protocol version not supported", - alertInsufficientSecurity: "insufficient security level", - alertInternalError: "internal error", - alertInappropriateFallback: "inappropriate fallback", - alertUserCanceled: "user canceled", - alertNoRenegotiation: "no renegotiation", - alertMissingExtension: "missing extension", - alertUnsupportedExtension: "unsupported extension", - alertCertificateUnobtainable: "certificate unobtainable", - alertUnrecognizedName: "unrecognized name", - alertBadCertificateStatusResponse: "bad certificate status response", - alertBadCertificateHashValue: "bad certificate hash value", - alertUnknownPSKIdentity: "unknown PSK identity", - alertCertificateRequired: "certificate required", - alertNoApplicationProtocol: "no application protocol", -} - -func (e alert) String() string { - s, ok := alertText[e] - if ok { - return "tls: " + s - } - return "tls: alert(" + strconv.Itoa(int(e)) + ")" -} - -func (e alert) Error() string { - return e.String() -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/auth.go b/vendor/github.com/quic-go/qtls-go1-19/auth.go deleted file mode 100644 index effc9aced8..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/auth.go +++ /dev/null @@ -1,293 +0,0 @@ -// Copyright 2017 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 qtls - -import ( - "bytes" - "crypto" - "crypto/ecdsa" - "crypto/ed25519" - "crypto/elliptic" - "crypto/rsa" - "errors" - "fmt" - "hash" - "io" -) - -// verifyHandshakeSignature verifies a signature against pre-hashed -// (if required) handshake contents. -func verifyHandshakeSignature(sigType uint8, pubkey crypto.PublicKey, hashFunc crypto.Hash, signed, sig []byte) error { - switch sigType { - case signatureECDSA: - pubKey, ok := pubkey.(*ecdsa.PublicKey) - if !ok { - return fmt.Errorf("expected an ECDSA public key, got %T", pubkey) - } - if !ecdsa.VerifyASN1(pubKey, signed, sig) { - return errors.New("ECDSA verification failure") - } - case signatureEd25519: - pubKey, ok := pubkey.(ed25519.PublicKey) - if !ok { - return fmt.Errorf("expected an Ed25519 public key, got %T", pubkey) - } - if !ed25519.Verify(pubKey, signed, sig) { - return errors.New("Ed25519 verification failure") - } - case signaturePKCS1v15: - pubKey, ok := pubkey.(*rsa.PublicKey) - if !ok { - return fmt.Errorf("expected an RSA public key, got %T", pubkey) - } - if err := rsa.VerifyPKCS1v15(pubKey, hashFunc, signed, sig); err != nil { - return err - } - case signatureRSAPSS: - pubKey, ok := pubkey.(*rsa.PublicKey) - if !ok { - return fmt.Errorf("expected an RSA public key, got %T", pubkey) - } - signOpts := &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash} - if err := rsa.VerifyPSS(pubKey, hashFunc, signed, sig, signOpts); err != nil { - return err - } - default: - return errors.New("internal error: unknown signature type") - } - return nil -} - -const ( - serverSignatureContext = "TLS 1.3, server CertificateVerify\x00" - clientSignatureContext = "TLS 1.3, client CertificateVerify\x00" -) - -var signaturePadding = []byte{ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -} - -// signedMessage returns the pre-hashed (if necessary) message to be signed by -// certificate keys in TLS 1.3. See RFC 8446, Section 4.4.3. -func signedMessage(sigHash crypto.Hash, context string, transcript hash.Hash) []byte { - if sigHash == directSigning { - b := &bytes.Buffer{} - b.Write(signaturePadding) - io.WriteString(b, context) - b.Write(transcript.Sum(nil)) - return b.Bytes() - } - h := sigHash.New() - h.Write(signaturePadding) - io.WriteString(h, context) - h.Write(transcript.Sum(nil)) - return h.Sum(nil) -} - -// typeAndHashFromSignatureScheme returns the corresponding signature type and -// crypto.Hash for a given TLS SignatureScheme. -func typeAndHashFromSignatureScheme(signatureAlgorithm SignatureScheme) (sigType uint8, hash crypto.Hash, err error) { - switch signatureAlgorithm { - case PKCS1WithSHA1, PKCS1WithSHA256, PKCS1WithSHA384, PKCS1WithSHA512: - sigType = signaturePKCS1v15 - case PSSWithSHA256, PSSWithSHA384, PSSWithSHA512: - sigType = signatureRSAPSS - case ECDSAWithSHA1, ECDSAWithP256AndSHA256, ECDSAWithP384AndSHA384, ECDSAWithP521AndSHA512: - sigType = signatureECDSA - case Ed25519: - sigType = signatureEd25519 - default: - return 0, 0, fmt.Errorf("unsupported signature algorithm: %v", signatureAlgorithm) - } - switch signatureAlgorithm { - case PKCS1WithSHA1, ECDSAWithSHA1: - hash = crypto.SHA1 - case PKCS1WithSHA256, PSSWithSHA256, ECDSAWithP256AndSHA256: - hash = crypto.SHA256 - case PKCS1WithSHA384, PSSWithSHA384, ECDSAWithP384AndSHA384: - hash = crypto.SHA384 - case PKCS1WithSHA512, PSSWithSHA512, ECDSAWithP521AndSHA512: - hash = crypto.SHA512 - case Ed25519: - hash = directSigning - default: - return 0, 0, fmt.Errorf("unsupported signature algorithm: %v", signatureAlgorithm) - } - return sigType, hash, nil -} - -// legacyTypeAndHashFromPublicKey returns the fixed signature type and crypto.Hash for -// a given public key used with TLS 1.0 and 1.1, before the introduction of -// signature algorithm negotiation. -func legacyTypeAndHashFromPublicKey(pub crypto.PublicKey) (sigType uint8, hash crypto.Hash, err error) { - switch pub.(type) { - case *rsa.PublicKey: - return signaturePKCS1v15, crypto.MD5SHA1, nil - case *ecdsa.PublicKey: - return signatureECDSA, crypto.SHA1, nil - case ed25519.PublicKey: - // RFC 8422 specifies support for Ed25519 in TLS 1.0 and 1.1, - // but it requires holding on to a handshake transcript to do a - // full signature, and not even OpenSSL bothers with the - // complexity, so we can't even test it properly. - return 0, 0, fmt.Errorf("tls: Ed25519 public keys are not supported before TLS 1.2") - default: - return 0, 0, fmt.Errorf("tls: unsupported public key: %T", pub) - } -} - -var rsaSignatureSchemes = []struct { - scheme SignatureScheme - minModulusBytes int - maxVersion uint16 -}{ - // RSA-PSS is used with PSSSaltLengthEqualsHash, and requires - // emLen >= hLen + sLen + 2 - {PSSWithSHA256, crypto.SHA256.Size()*2 + 2, VersionTLS13}, - {PSSWithSHA384, crypto.SHA384.Size()*2 + 2, VersionTLS13}, - {PSSWithSHA512, crypto.SHA512.Size()*2 + 2, VersionTLS13}, - // PKCS #1 v1.5 uses prefixes from hashPrefixes in crypto/rsa, and requires - // emLen >= len(prefix) + hLen + 11 - // TLS 1.3 dropped support for PKCS #1 v1.5 in favor of RSA-PSS. - {PKCS1WithSHA256, 19 + crypto.SHA256.Size() + 11, VersionTLS12}, - {PKCS1WithSHA384, 19 + crypto.SHA384.Size() + 11, VersionTLS12}, - {PKCS1WithSHA512, 19 + crypto.SHA512.Size() + 11, VersionTLS12}, - {PKCS1WithSHA1, 15 + crypto.SHA1.Size() + 11, VersionTLS12}, -} - -// signatureSchemesForCertificate returns the list of supported SignatureSchemes -// for a given certificate, based on the public key and the protocol version, -// and optionally filtered by its explicit SupportedSignatureAlgorithms. -// -// This function must be kept in sync with supportedSignatureAlgorithms. -// FIPS filtering is applied in the caller, selectSignatureScheme. -func signatureSchemesForCertificate(version uint16, cert *Certificate) []SignatureScheme { - priv, ok := cert.PrivateKey.(crypto.Signer) - if !ok { - return nil - } - - var sigAlgs []SignatureScheme - switch pub := priv.Public().(type) { - case *ecdsa.PublicKey: - if version != VersionTLS13 { - // In TLS 1.2 and earlier, ECDSA algorithms are not - // constrained to a single curve. - sigAlgs = []SignatureScheme{ - ECDSAWithP256AndSHA256, - ECDSAWithP384AndSHA384, - ECDSAWithP521AndSHA512, - ECDSAWithSHA1, - } - break - } - switch pub.Curve { - case elliptic.P256(): - sigAlgs = []SignatureScheme{ECDSAWithP256AndSHA256} - case elliptic.P384(): - sigAlgs = []SignatureScheme{ECDSAWithP384AndSHA384} - case elliptic.P521(): - sigAlgs = []SignatureScheme{ECDSAWithP521AndSHA512} - default: - return nil - } - case *rsa.PublicKey: - size := pub.Size() - sigAlgs = make([]SignatureScheme, 0, len(rsaSignatureSchemes)) - for _, candidate := range rsaSignatureSchemes { - if size >= candidate.minModulusBytes && version <= candidate.maxVersion { - sigAlgs = append(sigAlgs, candidate.scheme) - } - } - case ed25519.PublicKey: - sigAlgs = []SignatureScheme{Ed25519} - default: - return nil - } - - if cert.SupportedSignatureAlgorithms != nil { - var filteredSigAlgs []SignatureScheme - for _, sigAlg := range sigAlgs { - if isSupportedSignatureAlgorithm(sigAlg, cert.SupportedSignatureAlgorithms) { - filteredSigAlgs = append(filteredSigAlgs, sigAlg) - } - } - return filteredSigAlgs - } - return sigAlgs -} - -// selectSignatureScheme picks a SignatureScheme from the peer's preference list -// that works with the selected certificate. It's only called for protocol -// versions that support signature algorithms, so TLS 1.2 and 1.3. -func selectSignatureScheme(vers uint16, c *Certificate, peerAlgs []SignatureScheme) (SignatureScheme, error) { - supportedAlgs := signatureSchemesForCertificate(vers, c) - if len(supportedAlgs) == 0 { - return 0, unsupportedCertificateError(c) - } - if len(peerAlgs) == 0 && vers == VersionTLS12 { - // For TLS 1.2, if the client didn't send signature_algorithms then we - // can assume that it supports SHA1. See RFC 5246, Section 7.4.1.4.1. - peerAlgs = []SignatureScheme{PKCS1WithSHA1, ECDSAWithSHA1} - } - // Pick signature scheme in the peer's preference order, as our - // preference order is not configurable. - for _, preferredAlg := range peerAlgs { - if needFIPS() && !isSupportedSignatureAlgorithm(preferredAlg, fipsSupportedSignatureAlgorithms) { - continue - } - if isSupportedSignatureAlgorithm(preferredAlg, supportedAlgs) { - return preferredAlg, nil - } - } - return 0, errors.New("tls: peer doesn't support any of the certificate's signature algorithms") -} - -// unsupportedCertificateError returns a helpful error for certificates with -// an unsupported private key. -func unsupportedCertificateError(cert *Certificate) error { - switch cert.PrivateKey.(type) { - case rsa.PrivateKey, ecdsa.PrivateKey: - return fmt.Errorf("tls: unsupported certificate: private key is %T, expected *%T", - cert.PrivateKey, cert.PrivateKey) - case *ed25519.PrivateKey: - return fmt.Errorf("tls: unsupported certificate: private key is *ed25519.PrivateKey, expected ed25519.PrivateKey") - } - - signer, ok := cert.PrivateKey.(crypto.Signer) - if !ok { - return fmt.Errorf("tls: certificate private key (%T) does not implement crypto.Signer", - cert.PrivateKey) - } - - switch pub := signer.Public().(type) { - case *ecdsa.PublicKey: - switch pub.Curve { - case elliptic.P256(): - case elliptic.P384(): - case elliptic.P521(): - default: - return fmt.Errorf("tls: unsupported certificate curve (%s)", pub.Curve.Params().Name) - } - case *rsa.PublicKey: - return fmt.Errorf("tls: certificate RSA key size too small for supported signature algorithms") - case ed25519.PublicKey: - default: - return fmt.Errorf("tls: unsupported certificate key (%T)", pub) - } - - if cert.SupportedSignatureAlgorithms != nil { - return fmt.Errorf("tls: peer doesn't support the certificate custom signature algorithms") - } - - return fmt.Errorf("tls: internal error: unsupported key (%T)", cert.PrivateKey) -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/cipher_suites.go b/vendor/github.com/quic-go/qtls-go1-19/cipher_suites.go deleted file mode 100644 index 56dd454360..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/cipher_suites.go +++ /dev/null @@ -1,693 +0,0 @@ -// Copyright 2010 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 qtls - -import ( - "crypto" - "crypto/aes" - "crypto/cipher" - "crypto/des" - "crypto/hmac" - "crypto/rc4" - "crypto/sha1" - "crypto/sha256" - "fmt" - "hash" - - "golang.org/x/crypto/chacha20poly1305" -) - -// CipherSuite is a TLS cipher suite. Note that most functions in this package -// accept and expose cipher suite IDs instead of this type. -type CipherSuite struct { - ID uint16 - Name string - - // Supported versions is the list of TLS protocol versions that can - // negotiate this cipher suite. - SupportedVersions []uint16 - - // Insecure is true if the cipher suite has known security issues - // due to its primitives, design, or implementation. - Insecure bool -} - -var ( - supportedUpToTLS12 = []uint16{VersionTLS10, VersionTLS11, VersionTLS12} - supportedOnlyTLS12 = []uint16{VersionTLS12} - supportedOnlyTLS13 = []uint16{VersionTLS13} -) - -// CipherSuites returns a list of cipher suites currently implemented by this -// package, excluding those with security issues, which are returned by -// InsecureCipherSuites. -// -// The list is sorted by ID. Note that the default cipher suites selected by -// this package might depend on logic that can't be captured by a static list, -// and might not match those returned by this function. -func CipherSuites() []*CipherSuite { - return []*CipherSuite{ - {TLS_RSA_WITH_AES_128_CBC_SHA, "TLS_RSA_WITH_AES_128_CBC_SHA", supportedUpToTLS12, false}, - {TLS_RSA_WITH_AES_256_CBC_SHA, "TLS_RSA_WITH_AES_256_CBC_SHA", supportedUpToTLS12, false}, - {TLS_RSA_WITH_AES_128_GCM_SHA256, "TLS_RSA_WITH_AES_128_GCM_SHA256", supportedOnlyTLS12, false}, - {TLS_RSA_WITH_AES_256_GCM_SHA384, "TLS_RSA_WITH_AES_256_GCM_SHA384", supportedOnlyTLS12, false}, - - {TLS_AES_128_GCM_SHA256, "TLS_AES_128_GCM_SHA256", supportedOnlyTLS13, false}, - {TLS_AES_256_GCM_SHA384, "TLS_AES_256_GCM_SHA384", supportedOnlyTLS13, false}, - {TLS_CHACHA20_POLY1305_SHA256, "TLS_CHACHA20_POLY1305_SHA256", supportedOnlyTLS13, false}, - - {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", supportedUpToTLS12, false}, - {TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", supportedUpToTLS12, false}, - {TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", supportedUpToTLS12, false}, - {TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", supportedUpToTLS12, false}, - {TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", supportedOnlyTLS12, false}, - {TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", supportedOnlyTLS12, false}, - {TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", supportedOnlyTLS12, false}, - {TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", supportedOnlyTLS12, false}, - {TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", supportedOnlyTLS12, false}, - {TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", supportedOnlyTLS12, false}, - } -} - -// InsecureCipherSuites returns a list of cipher suites currently implemented by -// this package and which have security issues. -// -// Most applications should not use the cipher suites in this list, and should -// only use those returned by CipherSuites. -func InsecureCipherSuites() []*CipherSuite { - // This list includes RC4, CBC_SHA256, and 3DES cipher suites. See - // cipherSuitesPreferenceOrder for details. - return []*CipherSuite{ - {TLS_RSA_WITH_RC4_128_SHA, "TLS_RSA_WITH_RC4_128_SHA", supportedUpToTLS12, true}, - {TLS_RSA_WITH_3DES_EDE_CBC_SHA, "TLS_RSA_WITH_3DES_EDE_CBC_SHA", supportedUpToTLS12, true}, - {TLS_RSA_WITH_AES_128_CBC_SHA256, "TLS_RSA_WITH_AES_128_CBC_SHA256", supportedOnlyTLS12, true}, - {TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", supportedUpToTLS12, true}, - {TLS_ECDHE_RSA_WITH_RC4_128_SHA, "TLS_ECDHE_RSA_WITH_RC4_128_SHA", supportedUpToTLS12, true}, - {TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", supportedUpToTLS12, true}, - {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", supportedOnlyTLS12, true}, - {TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", supportedOnlyTLS12, true}, - } -} - -// CipherSuiteName returns the standard name for the passed cipher suite ID -// (e.g. "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"), or a fallback representation -// of the ID value if the cipher suite is not implemented by this package. -func CipherSuiteName(id uint16) string { - for _, c := range CipherSuites() { - if c.ID == id { - return c.Name - } - } - for _, c := range InsecureCipherSuites() { - if c.ID == id { - return c.Name - } - } - return fmt.Sprintf("0x%04X", id) -} - -const ( - // suiteECDHE indicates that the cipher suite involves elliptic curve - // Diffie-Hellman. This means that it should only be selected when the - // client indicates that it supports ECC with a curve and point format - // that we're happy with. - suiteECDHE = 1 << iota - // suiteECSign indicates that the cipher suite involves an ECDSA or - // EdDSA signature and therefore may only be selected when the server's - // certificate is ECDSA or EdDSA. If this is not set then the cipher suite - // is RSA based. - suiteECSign - // suiteTLS12 indicates that the cipher suite should only be advertised - // and accepted when using TLS 1.2. - suiteTLS12 - // suiteSHA384 indicates that the cipher suite uses SHA384 as the - // handshake hash. - suiteSHA384 -) - -// A cipherSuite is a TLS 1.0–1.2 cipher suite, and defines the key exchange -// mechanism, as well as the cipher+MAC pair or the AEAD. -type cipherSuite struct { - id uint16 - // the lengths, in bytes, of the key material needed for each component. - keyLen int - macLen int - ivLen int - ka func(version uint16) keyAgreement - // flags is a bitmask of the suite* values, above. - flags int - cipher func(key, iv []byte, isRead bool) any - mac func(key []byte) hash.Hash - aead func(key, fixedNonce []byte) aead -} - -var cipherSuites = []*cipherSuite{ // TODO: replace with a map, since the order doesn't matter. - {TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, 32, 0, 12, ecdheRSAKA, suiteECDHE | suiteTLS12, nil, nil, aeadChaCha20Poly1305}, - {TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, 32, 0, 12, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteTLS12, nil, nil, aeadChaCha20Poly1305}, - {TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 16, 0, 4, ecdheRSAKA, suiteECDHE | suiteTLS12, nil, nil, aeadAESGCM}, - {TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 16, 0, 4, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteTLS12, nil, nil, aeadAESGCM}, - {TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 32, 0, 4, ecdheRSAKA, suiteECDHE | suiteTLS12 | suiteSHA384, nil, nil, aeadAESGCM}, - {TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 32, 0, 4, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteTLS12 | suiteSHA384, nil, nil, aeadAESGCM}, - {TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, 16, 32, 16, ecdheRSAKA, suiteECDHE | suiteTLS12, cipherAES, macSHA256, nil}, - {TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 16, 20, 16, ecdheRSAKA, suiteECDHE, cipherAES, macSHA1, nil}, - {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, 16, 32, 16, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteTLS12, cipherAES, macSHA256, nil}, - {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 16, 20, 16, ecdheECDSAKA, suiteECDHE | suiteECSign, cipherAES, macSHA1, nil}, - {TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, 32, 20, 16, ecdheRSAKA, suiteECDHE, cipherAES, macSHA1, nil}, - {TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 32, 20, 16, ecdheECDSAKA, suiteECDHE | suiteECSign, cipherAES, macSHA1, nil}, - {TLS_RSA_WITH_AES_128_GCM_SHA256, 16, 0, 4, rsaKA, suiteTLS12, nil, nil, aeadAESGCM}, - {TLS_RSA_WITH_AES_256_GCM_SHA384, 32, 0, 4, rsaKA, suiteTLS12 | suiteSHA384, nil, nil, aeadAESGCM}, - {TLS_RSA_WITH_AES_128_CBC_SHA256, 16, 32, 16, rsaKA, suiteTLS12, cipherAES, macSHA256, nil}, - {TLS_RSA_WITH_AES_128_CBC_SHA, 16, 20, 16, rsaKA, 0, cipherAES, macSHA1, nil}, - {TLS_RSA_WITH_AES_256_CBC_SHA, 32, 20, 16, rsaKA, 0, cipherAES, macSHA1, nil}, - {TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, 24, 20, 8, ecdheRSAKA, suiteECDHE, cipher3DES, macSHA1, nil}, - {TLS_RSA_WITH_3DES_EDE_CBC_SHA, 24, 20, 8, rsaKA, 0, cipher3DES, macSHA1, nil}, - {TLS_RSA_WITH_RC4_128_SHA, 16, 20, 0, rsaKA, 0, cipherRC4, macSHA1, nil}, - {TLS_ECDHE_RSA_WITH_RC4_128_SHA, 16, 20, 0, ecdheRSAKA, suiteECDHE, cipherRC4, macSHA1, nil}, - {TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, 16, 20, 0, ecdheECDSAKA, suiteECDHE | suiteECSign, cipherRC4, macSHA1, nil}, -} - -// selectCipherSuite returns the first TLS 1.0–1.2 cipher suite from ids which -// is also in supportedIDs and passes the ok filter. -func selectCipherSuite(ids, supportedIDs []uint16, ok func(*cipherSuite) bool) *cipherSuite { - for _, id := range ids { - candidate := cipherSuiteByID(id) - if candidate == nil || !ok(candidate) { - continue - } - - for _, suppID := range supportedIDs { - if id == suppID { - return candidate - } - } - } - return nil -} - -// A cipherSuiteTLS13 defines only the pair of the AEAD algorithm and hash -// algorithm to be used with HKDF. See RFC 8446, Appendix B.4. -type cipherSuiteTLS13 struct { - id uint16 - keyLen int - aead func(key, fixedNonce []byte) aead - hash crypto.Hash -} - -type CipherSuiteTLS13 struct { - ID uint16 - KeyLen int - Hash crypto.Hash - AEAD func(key, fixedNonce []byte) cipher.AEAD -} - -func (c *CipherSuiteTLS13) IVLen() int { - return aeadNonceLength -} - -var cipherSuitesTLS13 = []*cipherSuiteTLS13{ // TODO: replace with a map. - {TLS_AES_128_GCM_SHA256, 16, aeadAESGCMTLS13, crypto.SHA256}, - {TLS_CHACHA20_POLY1305_SHA256, 32, aeadChaCha20Poly1305, crypto.SHA256}, - {TLS_AES_256_GCM_SHA384, 32, aeadAESGCMTLS13, crypto.SHA384}, -} - -// cipherSuitesPreferenceOrder is the order in which we'll select (on the -// server) or advertise (on the client) TLS 1.0–1.2 cipher suites. -// -// Cipher suites are filtered but not reordered based on the application and -// peer's preferences, meaning we'll never select a suite lower in this list if -// any higher one is available. This makes it more defensible to keep weaker -// cipher suites enabled, especially on the server side where we get the last -// word, since there are no known downgrade attacks on cipher suites selection. -// -// The list is sorted by applying the following priority rules, stopping at the -// first (most important) applicable one: -// -// - Anything else comes before RC4 -// -// RC4 has practically exploitable biases. See https://www.rc4nomore.com. -// -// - Anything else comes before CBC_SHA256 -// -// SHA-256 variants of the CBC ciphersuites don't implement any Lucky13 -// countermeasures. See http://www.isg.rhul.ac.uk/tls/Lucky13.html and -// https://www.imperialviolet.org/2013/02/04/luckythirteen.html. -// -// - Anything else comes before 3DES -// -// 3DES has 64-bit blocks, which makes it fundamentally susceptible to -// birthday attacks. See https://sweet32.info. -// -// - ECDHE comes before anything else -// -// Once we got the broken stuff out of the way, the most important -// property a cipher suite can have is forward secrecy. We don't -// implement FFDHE, so that means ECDHE. -// -// - AEADs come before CBC ciphers -// -// Even with Lucky13 countermeasures, MAC-then-Encrypt CBC cipher suites -// are fundamentally fragile, and suffered from an endless sequence of -// padding oracle attacks. See https://eprint.iacr.org/2015/1129, -// https://www.imperialviolet.org/2014/12/08/poodleagain.html, and -// https://blog.cloudflare.com/yet-another-padding-oracle-in-openssl-cbc-ciphersuites/. -// -// - AES comes before ChaCha20 -// -// When AES hardware is available, AES-128-GCM and AES-256-GCM are faster -// than ChaCha20Poly1305. -// -// When AES hardware is not available, AES-128-GCM is one or more of: much -// slower, way more complex, and less safe (because not constant time) -// than ChaCha20Poly1305. -// -// We use this list if we think both peers have AES hardware, and -// cipherSuitesPreferenceOrderNoAES otherwise. -// -// - AES-128 comes before AES-256 -// -// The only potential advantages of AES-256 are better multi-target -// margins, and hypothetical post-quantum properties. Neither apply to -// TLS, and AES-256 is slower due to its four extra rounds (which don't -// contribute to the advantages above). -// -// - ECDSA comes before RSA -// -// The relative order of ECDSA and RSA cipher suites doesn't matter, -// as they depend on the certificate. Pick one to get a stable order. -var cipherSuitesPreferenceOrder = []uint16{ - // AEADs w/ ECDHE - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, - - // CBC w/ ECDHE - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - - // AEADs w/o ECDHE - TLS_RSA_WITH_AES_128_GCM_SHA256, - TLS_RSA_WITH_AES_256_GCM_SHA384, - - // CBC w/o ECDHE - TLS_RSA_WITH_AES_128_CBC_SHA, - TLS_RSA_WITH_AES_256_CBC_SHA, - - // 3DES - TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, - TLS_RSA_WITH_3DES_EDE_CBC_SHA, - - // CBC_SHA256 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - TLS_RSA_WITH_AES_128_CBC_SHA256, - - // RC4 - TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, - TLS_RSA_WITH_RC4_128_SHA, -} - -var cipherSuitesPreferenceOrderNoAES = []uint16{ - // ChaCha20Poly1305 - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, - - // AES-GCM w/ ECDHE - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - - // The rest of cipherSuitesPreferenceOrder. - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - TLS_RSA_WITH_AES_128_GCM_SHA256, - TLS_RSA_WITH_AES_256_GCM_SHA384, - TLS_RSA_WITH_AES_128_CBC_SHA, - TLS_RSA_WITH_AES_256_CBC_SHA, - TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, - TLS_RSA_WITH_3DES_EDE_CBC_SHA, - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - TLS_RSA_WITH_AES_128_CBC_SHA256, - TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, - TLS_RSA_WITH_RC4_128_SHA, -} - -// disabledCipherSuites are not used unless explicitly listed in -// Config.CipherSuites. They MUST be at the end of cipherSuitesPreferenceOrder. -var disabledCipherSuites = []uint16{ - // CBC_SHA256 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - TLS_RSA_WITH_AES_128_CBC_SHA256, - - // RC4 - TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, - TLS_RSA_WITH_RC4_128_SHA, -} - -var ( - defaultCipherSuitesLen = len(cipherSuitesPreferenceOrder) - len(disabledCipherSuites) - defaultCipherSuites = cipherSuitesPreferenceOrder[:defaultCipherSuitesLen] -) - -// defaultCipherSuitesTLS13 is also the preference order, since there are no -// disabled by default TLS 1.3 cipher suites. The same AES vs ChaCha20 logic as -// cipherSuitesPreferenceOrder applies. -var defaultCipherSuitesTLS13 = []uint16{ - TLS_AES_128_GCM_SHA256, - TLS_AES_256_GCM_SHA384, - TLS_CHACHA20_POLY1305_SHA256, -} - -var defaultCipherSuitesTLS13NoAES = []uint16{ - TLS_CHACHA20_POLY1305_SHA256, - TLS_AES_128_GCM_SHA256, - TLS_AES_256_GCM_SHA384, -} - -var aesgcmCiphers = map[uint16]bool{ - // TLS 1.2 - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: true, - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: true, - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: true, - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: true, - // TLS 1.3 - TLS_AES_128_GCM_SHA256: true, - TLS_AES_256_GCM_SHA384: true, -} - -var nonAESGCMAEADCiphers = map[uint16]bool{ - // TLS 1.2 - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305: true, - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305: true, - // TLS 1.3 - TLS_CHACHA20_POLY1305_SHA256: true, -} - -// aesgcmPreferred returns whether the first known cipher in the preference list -// is an AES-GCM cipher, implying the peer has hardware support for it. -func aesgcmPreferred(ciphers []uint16) bool { - for _, cID := range ciphers { - if c := cipherSuiteByID(cID); c != nil { - return aesgcmCiphers[cID] - } - if c := cipherSuiteTLS13ByID(cID); c != nil { - return aesgcmCiphers[cID] - } - } - return false -} - -func cipherRC4(key, iv []byte, isRead bool) any { - cipher, _ := rc4.NewCipher(key) - return cipher -} - -func cipher3DES(key, iv []byte, isRead bool) any { - block, _ := des.NewTripleDESCipher(key) - if isRead { - return cipher.NewCBCDecrypter(block, iv) - } - return cipher.NewCBCEncrypter(block, iv) -} - -func cipherAES(key, iv []byte, isRead bool) any { - block, _ := aes.NewCipher(key) - if isRead { - return cipher.NewCBCDecrypter(block, iv) - } - return cipher.NewCBCEncrypter(block, iv) -} - -// macSHA1 returns a SHA-1 based constant time MAC. -func macSHA1(key []byte) hash.Hash { - h := sha1.New - h = newConstantTimeHash(h) - return hmac.New(h, key) -} - -// macSHA256 returns a SHA-256 based MAC. This is only supported in TLS 1.2 and -// is currently only used in disabled-by-default cipher suites. -func macSHA256(key []byte) hash.Hash { - return hmac.New(sha256.New, key) -} - -type aead interface { - cipher.AEAD - - // explicitNonceLen returns the number of bytes of explicit nonce - // included in each record. This is eight for older AEADs and - // zero for modern ones. - explicitNonceLen() int -} - -const ( - aeadNonceLength = 12 - noncePrefixLength = 4 -) - -// prefixNonceAEAD wraps an AEAD and prefixes a fixed portion of the nonce to -// each call. -type prefixNonceAEAD struct { - // nonce contains the fixed part of the nonce in the first four bytes. - nonce [aeadNonceLength]byte - aead cipher.AEAD -} - -func (f *prefixNonceAEAD) NonceSize() int { return aeadNonceLength - noncePrefixLength } -func (f *prefixNonceAEAD) Overhead() int { return f.aead.Overhead() } -func (f *prefixNonceAEAD) explicitNonceLen() int { return f.NonceSize() } - -func (f *prefixNonceAEAD) Seal(out, nonce, plaintext, additionalData []byte) []byte { - copy(f.nonce[4:], nonce) - return f.aead.Seal(out, f.nonce[:], plaintext, additionalData) -} - -func (f *prefixNonceAEAD) Open(out, nonce, ciphertext, additionalData []byte) ([]byte, error) { - copy(f.nonce[4:], nonce) - return f.aead.Open(out, f.nonce[:], ciphertext, additionalData) -} - -// xoredNonceAEAD wraps an AEAD by XORing in a fixed pattern to the nonce -// before each call. -type xorNonceAEAD struct { - nonceMask [aeadNonceLength]byte - aead cipher.AEAD -} - -func (f *xorNonceAEAD) NonceSize() int { return 8 } // 64-bit sequence number -func (f *xorNonceAEAD) Overhead() int { return f.aead.Overhead() } -func (f *xorNonceAEAD) explicitNonceLen() int { return 0 } - -func (f *xorNonceAEAD) Seal(out, nonce, plaintext, additionalData []byte) []byte { - for i, b := range nonce { - f.nonceMask[4+i] ^= b - } - result := f.aead.Seal(out, f.nonceMask[:], plaintext, additionalData) - for i, b := range nonce { - f.nonceMask[4+i] ^= b - } - - return result -} - -func (f *xorNonceAEAD) Open(out, nonce, ciphertext, additionalData []byte) ([]byte, error) { - for i, b := range nonce { - f.nonceMask[4+i] ^= b - } - result, err := f.aead.Open(out, f.nonceMask[:], ciphertext, additionalData) - for i, b := range nonce { - f.nonceMask[4+i] ^= b - } - - return result, err -} - -func aeadAESGCM(key, noncePrefix []byte) aead { - if len(noncePrefix) != noncePrefixLength { - panic("tls: internal error: wrong nonce length") - } - aes, err := aes.NewCipher(key) - if err != nil { - panic(err) - } - var aead cipher.AEAD - aead, err = cipher.NewGCM(aes) - if err != nil { - panic(err) - } - - ret := &prefixNonceAEAD{aead: aead} - copy(ret.nonce[:], noncePrefix) - return ret -} - -// AEADAESGCMTLS13 creates a new AES-GCM AEAD for TLS 1.3 -func AEADAESGCMTLS13(key, fixedNonce []byte) cipher.AEAD { - return aeadAESGCMTLS13(key, fixedNonce) -} - -func aeadAESGCMTLS13(key, nonceMask []byte) aead { - if len(nonceMask) != aeadNonceLength { - panic("tls: internal error: wrong nonce length") - } - aes, err := aes.NewCipher(key) - if err != nil { - panic(err) - } - aead, err := cipher.NewGCM(aes) - if err != nil { - panic(err) - } - - ret := &xorNonceAEAD{aead: aead} - copy(ret.nonceMask[:], nonceMask) - return ret -} - -func aeadChaCha20Poly1305(key, nonceMask []byte) aead { - if len(nonceMask) != aeadNonceLength { - panic("tls: internal error: wrong nonce length") - } - aead, err := chacha20poly1305.New(key) - if err != nil { - panic(err) - } - - ret := &xorNonceAEAD{aead: aead} - copy(ret.nonceMask[:], nonceMask) - return ret -} - -type constantTimeHash interface { - hash.Hash - ConstantTimeSum(b []byte) []byte -} - -// cthWrapper wraps any hash.Hash that implements ConstantTimeSum, and replaces -// with that all calls to Sum. It's used to obtain a ConstantTimeSum-based HMAC. -type cthWrapper struct { - h constantTimeHash -} - -func (c *cthWrapper) Size() int { return c.h.Size() } -func (c *cthWrapper) BlockSize() int { return c.h.BlockSize() } -func (c *cthWrapper) Reset() { c.h.Reset() } -func (c *cthWrapper) Write(p []byte) (int, error) { return c.h.Write(p) } -func (c *cthWrapper) Sum(b []byte) []byte { return c.h.ConstantTimeSum(b) } - -func newConstantTimeHash(h func() hash.Hash) func() hash.Hash { - return func() hash.Hash { - return &cthWrapper{h().(constantTimeHash)} - } -} - -// tls10MAC implements the TLS 1.0 MAC function. RFC 2246, Section 6.2.3. -func tls10MAC(h hash.Hash, out, seq, header, data, extra []byte) []byte { - h.Reset() - h.Write(seq) - h.Write(header) - h.Write(data) - res := h.Sum(out) - if extra != nil { - h.Write(extra) - } - return res -} - -func rsaKA(version uint16) keyAgreement { - return rsaKeyAgreement{} -} - -func ecdheECDSAKA(version uint16) keyAgreement { - return &ecdheKeyAgreement{ - isRSA: false, - version: version, - } -} - -func ecdheRSAKA(version uint16) keyAgreement { - return &ecdheKeyAgreement{ - isRSA: true, - version: version, - } -} - -// mutualCipherSuite returns a cipherSuite given a list of supported -// ciphersuites and the id requested by the peer. -func mutualCipherSuite(have []uint16, want uint16) *cipherSuite { - for _, id := range have { - if id == want { - return cipherSuiteByID(id) - } - } - return nil -} - -func cipherSuiteByID(id uint16) *cipherSuite { - for _, cipherSuite := range cipherSuites { - if cipherSuite.id == id { - return cipherSuite - } - } - return nil -} - -func mutualCipherSuiteTLS13(have []uint16, want uint16) *cipherSuiteTLS13 { - for _, id := range have { - if id == want { - return cipherSuiteTLS13ByID(id) - } - } - return nil -} - -func cipherSuiteTLS13ByID(id uint16) *cipherSuiteTLS13 { - for _, cipherSuite := range cipherSuitesTLS13 { - if cipherSuite.id == id { - return cipherSuite - } - } - return nil -} - -// A list of cipher suite IDs that are, or have been, implemented by this -// package. -// -// See https://www.iana.org/assignments/tls-parameters/tls-parameters.xml -const ( - // TLS 1.0 - 1.2 cipher suites. - TLS_RSA_WITH_RC4_128_SHA uint16 = 0x0005 - TLS_RSA_WITH_3DES_EDE_CBC_SHA uint16 = 0x000a - TLS_RSA_WITH_AES_128_CBC_SHA uint16 = 0x002f - TLS_RSA_WITH_AES_256_CBC_SHA uint16 = 0x0035 - TLS_RSA_WITH_AES_128_CBC_SHA256 uint16 = 0x003c - TLS_RSA_WITH_AES_128_GCM_SHA256 uint16 = 0x009c - TLS_RSA_WITH_AES_256_GCM_SHA384 uint16 = 0x009d - TLS_ECDHE_ECDSA_WITH_RC4_128_SHA uint16 = 0xc007 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA uint16 = 0xc009 - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA uint16 = 0xc00a - TLS_ECDHE_RSA_WITH_RC4_128_SHA uint16 = 0xc011 - TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA uint16 = 0xc012 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA uint16 = 0xc013 - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA uint16 = 0xc014 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 uint16 = 0xc023 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 uint16 = 0xc027 - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 uint16 = 0xc02f - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 uint16 = 0xc02b - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 uint16 = 0xc030 - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 uint16 = 0xc02c - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xcca8 - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xcca9 - - // TLS 1.3 cipher suites. - TLS_AES_128_GCM_SHA256 uint16 = 0x1301 - TLS_AES_256_GCM_SHA384 uint16 = 0x1302 - TLS_CHACHA20_POLY1305_SHA256 uint16 = 0x1303 - - // TLS_FALLBACK_SCSV isn't a standard cipher suite but an indicator - // that the client is doing version fallback. See RFC 7507. - TLS_FALLBACK_SCSV uint16 = 0x5600 - - // Legacy names for the corresponding cipher suites with the correct _SHA256 - // suffix, retained for backward compatibility. - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 = TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 = TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 -) diff --git a/vendor/github.com/quic-go/qtls-go1-19/common.go b/vendor/github.com/quic-go/qtls-go1-19/common.go deleted file mode 100644 index 6be26dced8..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/common.go +++ /dev/null @@ -1,1513 +0,0 @@ -// Copyright 2009 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 qtls - -import ( - "bytes" - "container/list" - "context" - "crypto" - "crypto/ecdsa" - "crypto/ed25519" - "crypto/elliptic" - "crypto/rand" - "crypto/rsa" - "crypto/sha512" - "crypto/tls" - "crypto/x509" - "errors" - "fmt" - "io" - "net" - "strings" - "sync" - "time" -) - -const ( - VersionTLS10 = 0x0301 - VersionTLS11 = 0x0302 - VersionTLS12 = 0x0303 - VersionTLS13 = 0x0304 - - // Deprecated: SSLv3 is cryptographically broken, and is no longer - // supported by this package. See golang.org/issue/32716. - VersionSSL30 = 0x0300 -) - -const ( - maxPlaintext = 16384 // maximum plaintext payload length - maxCiphertext = 16384 + 2048 // maximum ciphertext payload length - maxCiphertextTLS13 = 16384 + 256 // maximum ciphertext length in TLS 1.3 - recordHeaderLen = 5 // record header length - maxHandshake = 65536 // maximum handshake we support (protocol max is 16 MB) - maxUselessRecords = 16 // maximum number of consecutive non-advancing records -) - -// TLS record types. -type recordType uint8 - -const ( - recordTypeChangeCipherSpec recordType = 20 - recordTypeAlert recordType = 21 - recordTypeHandshake recordType = 22 - recordTypeApplicationData recordType = 23 -) - -// TLS handshake message types. -const ( - typeHelloRequest uint8 = 0 - typeClientHello uint8 = 1 - typeServerHello uint8 = 2 - typeNewSessionTicket uint8 = 4 - typeEndOfEarlyData uint8 = 5 - typeEncryptedExtensions uint8 = 8 - typeCertificate uint8 = 11 - typeServerKeyExchange uint8 = 12 - typeCertificateRequest uint8 = 13 - typeServerHelloDone uint8 = 14 - typeCertificateVerify uint8 = 15 - typeClientKeyExchange uint8 = 16 - typeFinished uint8 = 20 - typeCertificateStatus uint8 = 22 - typeKeyUpdate uint8 = 24 - typeNextProtocol uint8 = 67 // Not IANA assigned - typeMessageHash uint8 = 254 // synthetic message -) - -// TLS compression types. -const ( - compressionNone uint8 = 0 -) - -type Extension struct { - Type uint16 - Data []byte -} - -// TLS extension numbers -const ( - extensionServerName uint16 = 0 - extensionStatusRequest uint16 = 5 - extensionSupportedCurves uint16 = 10 // supported_groups in TLS 1.3, see RFC 8446, Section 4.2.7 - extensionSupportedPoints uint16 = 11 - extensionSignatureAlgorithms uint16 = 13 - extensionALPN uint16 = 16 - extensionSCT uint16 = 18 - extensionSessionTicket uint16 = 35 - extensionPreSharedKey uint16 = 41 - extensionEarlyData uint16 = 42 - extensionSupportedVersions uint16 = 43 - extensionCookie uint16 = 44 - extensionPSKModes uint16 = 45 - extensionCertificateAuthorities uint16 = 47 - extensionSignatureAlgorithmsCert uint16 = 50 - extensionKeyShare uint16 = 51 - extensionRenegotiationInfo uint16 = 0xff01 -) - -// TLS signaling cipher suite values -const ( - scsvRenegotiation uint16 = 0x00ff -) - -type EncryptionLevel uint8 - -const ( - EncryptionHandshake EncryptionLevel = iota - Encryption0RTT - EncryptionApplication -) - -// CurveID is a tls.CurveID -type CurveID = tls.CurveID - -const ( - CurveP256 CurveID = 23 - CurveP384 CurveID = 24 - CurveP521 CurveID = 25 - X25519 CurveID = 29 -) - -// TLS 1.3 Key Share. See RFC 8446, Section 4.2.8. -type keyShare struct { - group CurveID - data []byte -} - -// TLS 1.3 PSK Key Exchange Modes. See RFC 8446, Section 4.2.9. -const ( - pskModePlain uint8 = 0 - pskModeDHE uint8 = 1 -) - -// TLS 1.3 PSK Identity. Can be a Session Ticket, or a reference to a saved -// session. See RFC 8446, Section 4.2.11. -type pskIdentity struct { - label []byte - obfuscatedTicketAge uint32 -} - -// TLS Elliptic Curve Point Formats -// https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-9 -const ( - pointFormatUncompressed uint8 = 0 -) - -// TLS CertificateStatusType (RFC 3546) -const ( - statusTypeOCSP uint8 = 1 -) - -// Certificate types (for certificateRequestMsg) -const ( - certTypeRSASign = 1 - certTypeECDSASign = 64 // ECDSA or EdDSA keys, see RFC 8422, Section 3. -) - -// Signature algorithms (for internal signaling use). Starting at 225 to avoid overlap with -// TLS 1.2 codepoints (RFC 5246, Appendix A.4.1), with which these have nothing to do. -const ( - signaturePKCS1v15 uint8 = iota + 225 - signatureRSAPSS - signatureECDSA - signatureEd25519 -) - -// directSigning is a standard Hash value that signals that no pre-hashing -// should be performed, and that the input should be signed directly. It is the -// hash function associated with the Ed25519 signature scheme. -var directSigning crypto.Hash = 0 - -// defaultSupportedSignatureAlgorithms contains the signature and hash algorithms that -// the code advertises as supported in a TLS 1.2+ ClientHello and in a TLS 1.2+ -// CertificateRequest. The two fields are merged to match with TLS 1.3. -// Note that in TLS 1.2, the ECDSA algorithms are not constrained to P-256, etc. -var defaultSupportedSignatureAlgorithms = []SignatureScheme{ - PSSWithSHA256, - ECDSAWithP256AndSHA256, - Ed25519, - PSSWithSHA384, - PSSWithSHA512, - PKCS1WithSHA256, - PKCS1WithSHA384, - PKCS1WithSHA512, - ECDSAWithP384AndSHA384, - ECDSAWithP521AndSHA512, - PKCS1WithSHA1, - ECDSAWithSHA1, -} - -// helloRetryRequestRandom is set as the Random value of a ServerHello -// to signal that the message is actually a HelloRetryRequest. -var helloRetryRequestRandom = []byte{ // See RFC 8446, Section 4.1.3. - 0xCF, 0x21, 0xAD, 0x74, 0xE5, 0x9A, 0x61, 0x11, - 0xBE, 0x1D, 0x8C, 0x02, 0x1E, 0x65, 0xB8, 0x91, - 0xC2, 0xA2, 0x11, 0x16, 0x7A, 0xBB, 0x8C, 0x5E, - 0x07, 0x9E, 0x09, 0xE2, 0xC8, 0xA8, 0x33, 0x9C, -} - -const ( - // downgradeCanaryTLS12 or downgradeCanaryTLS11 is embedded in the server - // random as a downgrade protection if the server would be capable of - // negotiating a higher version. See RFC 8446, Section 4.1.3. - downgradeCanaryTLS12 = "DOWNGRD\x01" - downgradeCanaryTLS11 = "DOWNGRD\x00" -) - -// testingOnlyForceDowngradeCanary is set in tests to force the server side to -// include downgrade canaries even if it's using its highers supported version. -var testingOnlyForceDowngradeCanary bool - -type ConnectionState = tls.ConnectionState - -// ConnectionState records basic TLS details about the connection. -type connectionState struct { - // Version is the TLS version used by the connection (e.g. VersionTLS12). - Version uint16 - - // HandshakeComplete is true if the handshake has concluded. - HandshakeComplete bool - - // DidResume is true if this connection was successfully resumed from a - // previous session with a session ticket or similar mechanism. - DidResume bool - - // CipherSuite is the cipher suite negotiated for the connection (e.g. - // TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_AES_128_GCM_SHA256). - CipherSuite uint16 - - // NegotiatedProtocol is the application protocol negotiated with ALPN. - NegotiatedProtocol string - - // NegotiatedProtocolIsMutual used to indicate a mutual NPN negotiation. - // - // Deprecated: this value is always true. - NegotiatedProtocolIsMutual bool - - // ServerName is the value of the Server Name Indication extension sent by - // the client. It's available both on the server and on the client side. - ServerName string - - // PeerCertificates are the parsed certificates sent by the peer, in the - // order in which they were sent. The first element is the leaf certificate - // that the connection is verified against. - // - // On the client side, it can't be empty. On the server side, it can be - // empty if Config.ClientAuth is not RequireAnyClientCert or - // RequireAndVerifyClientCert. - PeerCertificates []*x509.Certificate - - // VerifiedChains is a list of one or more chains where the first element is - // PeerCertificates[0] and the last element is from Config.RootCAs (on the - // client side) or Config.ClientCAs (on the server side). - // - // On the client side, it's set if Config.InsecureSkipVerify is false. On - // the server side, it's set if Config.ClientAuth is VerifyClientCertIfGiven - // (and the peer provided a certificate) or RequireAndVerifyClientCert. - VerifiedChains [][]*x509.Certificate - - // SignedCertificateTimestamps is a list of SCTs provided by the peer - // through the TLS handshake for the leaf certificate, if any. - SignedCertificateTimestamps [][]byte - - // OCSPResponse is a stapled Online Certificate Status Protocol (OCSP) - // response provided by the peer for the leaf certificate, if any. - OCSPResponse []byte - - // TLSUnique contains the "tls-unique" channel binding value (see RFC 5929, - // Section 3). This value will be nil for TLS 1.3 connections and for all - // resumed connections. - // - // Deprecated: there are conditions in which this value might not be unique - // to a connection. See the Security Considerations sections of RFC 5705 and - // RFC 7627, and https://mitls.org/pages/attacks/3SHAKE#channelbindings. - TLSUnique []byte - - // ekm is a closure exposed via ExportKeyingMaterial. - ekm func(label string, context []byte, length int) ([]byte, error) -} - -type ConnectionStateWith0RTT struct { - ConnectionState - - Used0RTT bool // true if 0-RTT was both offered and accepted -} - -// ClientAuthType is tls.ClientAuthType -type ClientAuthType = tls.ClientAuthType - -const ( - NoClientCert = tls.NoClientCert - RequestClientCert = tls.RequestClientCert - RequireAnyClientCert = tls.RequireAnyClientCert - VerifyClientCertIfGiven = tls.VerifyClientCertIfGiven - RequireAndVerifyClientCert = tls.RequireAndVerifyClientCert -) - -// requiresClientCert reports whether the ClientAuthType requires a client -// certificate to be provided. -func requiresClientCert(c ClientAuthType) bool { - switch c { - case RequireAnyClientCert, RequireAndVerifyClientCert: - return true - default: - return false - } -} - -// ClientSessionState contains the state needed by clients to resume TLS -// sessions. -type ClientSessionState = tls.ClientSessionState - -type clientSessionState struct { - sessionTicket []uint8 // Encrypted ticket used for session resumption with server - vers uint16 // TLS version negotiated for the session - cipherSuite uint16 // Ciphersuite negotiated for the session - masterSecret []byte // Full handshake MasterSecret, or TLS 1.3 resumption_master_secret - serverCertificates []*x509.Certificate // Certificate chain presented by the server - verifiedChains [][]*x509.Certificate // Certificate chains we built for verification - receivedAt time.Time // When the session ticket was received from the server - ocspResponse []byte // Stapled OCSP response presented by the server - scts [][]byte // SCTs presented by the server - - // TLS 1.3 fields. - nonce []byte // Ticket nonce sent by the server, to derive PSK - useBy time.Time // Expiration of the ticket lifetime as set by the server - ageAdd uint32 // Random obfuscation factor for sending the ticket age -} - -// ClientSessionCache is a cache of ClientSessionState objects that can be used -// by a client to resume a TLS session with a given server. ClientSessionCache -// implementations should expect to be called concurrently from different -// goroutines. Up to TLS 1.2, only ticket-based resumption is supported, not -// SessionID-based resumption. In TLS 1.3 they were merged into PSK modes, which -// are supported via this interface. -// -//go:generate sh -c "mockgen -package qtls -destination mock_client_session_cache_test.go github.com/quic-go/qtls-go1-19 ClientSessionCache" -type ClientSessionCache = tls.ClientSessionCache - -// SignatureScheme is a tls.SignatureScheme -type SignatureScheme = tls.SignatureScheme - -const ( - // RSASSA-PKCS1-v1_5 algorithms. - PKCS1WithSHA256 SignatureScheme = 0x0401 - PKCS1WithSHA384 SignatureScheme = 0x0501 - PKCS1WithSHA512 SignatureScheme = 0x0601 - - // RSASSA-PSS algorithms with public key OID rsaEncryption. - PSSWithSHA256 SignatureScheme = 0x0804 - PSSWithSHA384 SignatureScheme = 0x0805 - PSSWithSHA512 SignatureScheme = 0x0806 - - // ECDSA algorithms. Only constrained to a specific curve in TLS 1.3. - ECDSAWithP256AndSHA256 SignatureScheme = 0x0403 - ECDSAWithP384AndSHA384 SignatureScheme = 0x0503 - ECDSAWithP521AndSHA512 SignatureScheme = 0x0603 - - // EdDSA algorithms. - Ed25519 SignatureScheme = 0x0807 - - // Legacy signature and hash algorithms for TLS 1.2. - PKCS1WithSHA1 SignatureScheme = 0x0201 - ECDSAWithSHA1 SignatureScheme = 0x0203 -) - -// ClientHelloInfo contains information from a ClientHello message in order to -// guide application logic in the GetCertificate and GetConfigForClient callbacks. -type ClientHelloInfo = tls.ClientHelloInfo - -type clientHelloInfo struct { - // CipherSuites lists the CipherSuites supported by the client (e.g. - // TLS_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256). - CipherSuites []uint16 - - // ServerName indicates the name of the server requested by the client - // in order to support virtual hosting. ServerName is only set if the - // client is using SNI (see RFC 4366, Section 3.1). - ServerName string - - // SupportedCurves lists the elliptic curves supported by the client. - // SupportedCurves is set only if the Supported Elliptic Curves - // Extension is being used (see RFC 4492, Section 5.1.1). - SupportedCurves []CurveID - - // SupportedPoints lists the point formats supported by the client. - // SupportedPoints is set only if the Supported Point Formats Extension - // is being used (see RFC 4492, Section 5.1.2). - SupportedPoints []uint8 - - // SignatureSchemes lists the signature and hash schemes that the client - // is willing to verify. SignatureSchemes is set only if the Signature - // Algorithms Extension is being used (see RFC 5246, Section 7.4.1.4.1). - SignatureSchemes []SignatureScheme - - // SupportedProtos lists the application protocols supported by the client. - // SupportedProtos is set only if the Application-Layer Protocol - // Negotiation Extension is being used (see RFC 7301, Section 3.1). - // - // Servers can select a protocol by setting Config.NextProtos in a - // GetConfigForClient return value. - SupportedProtos []string - - // SupportedVersions lists the TLS versions supported by the client. - // For TLS versions less than 1.3, this is extrapolated from the max - // version advertised by the client, so values other than the greatest - // might be rejected if used. - SupportedVersions []uint16 - - // Conn is the underlying net.Conn for the connection. Do not read - // from, or write to, this connection; that will cause the TLS - // connection to fail. - Conn net.Conn - - // config is embedded by the GetCertificate or GetConfigForClient caller, - // for use with SupportsCertificate. - config *Config - - // ctx is the context of the handshake that is in progress. - ctx context.Context -} - -// Context returns the context of the handshake that is in progress. -// This context is a child of the context passed to HandshakeContext, -// if any, and is canceled when the handshake concludes. -func (c *clientHelloInfo) Context() context.Context { - return c.ctx -} - -// CertificateRequestInfo contains information from a server's -// CertificateRequest message, which is used to demand a certificate and proof -// of control from a client. -type CertificateRequestInfo = tls.CertificateRequestInfo - -type certificateRequestInfo struct { - // AcceptableCAs contains zero or more, DER-encoded, X.501 - // Distinguished Names. These are the names of root or intermediate CAs - // that the server wishes the returned certificate to be signed by. An - // empty slice indicates that the server has no preference. - AcceptableCAs [][]byte - - // SignatureSchemes lists the signature schemes that the server is - // willing to verify. - SignatureSchemes []SignatureScheme - - // Version is the TLS version that was negotiated for this connection. - Version uint16 - - // ctx is the context of the handshake that is in progress. - ctx context.Context -} - -// Context returns the context of the handshake that is in progress. -// This context is a child of the context passed to HandshakeContext, -// if any, and is canceled when the handshake concludes. -func (c *certificateRequestInfo) Context() context.Context { - return c.ctx -} - -// RenegotiationSupport enumerates the different levels of support for TLS -// renegotiation. TLS renegotiation is the act of performing subsequent -// handshakes on a connection after the first. This significantly complicates -// the state machine and has been the source of numerous, subtle security -// issues. Initiating a renegotiation is not supported, but support for -// accepting renegotiation requests may be enabled. -// -// Even when enabled, the server may not change its identity between handshakes -// (i.e. the leaf certificate must be the same). Additionally, concurrent -// handshake and application data flow is not permitted so renegotiation can -// only be used with protocols that synchronise with the renegotiation, such as -// HTTPS. -// -// Renegotiation is not defined in TLS 1.3. -type RenegotiationSupport = tls.RenegotiationSupport - -const ( - // RenegotiateNever disables renegotiation. - RenegotiateNever = tls.RenegotiateNever - - // RenegotiateOnceAsClient allows a remote server to request - // renegotiation once per connection. - RenegotiateOnceAsClient = tls.RenegotiateOnceAsClient - - // RenegotiateFreelyAsClient allows a remote server to repeatedly - // request renegotiation. - RenegotiateFreelyAsClient = tls.RenegotiateFreelyAsClient -) - -// A Config structure is used to configure a TLS client or server. -// After one has been passed to a TLS function it must not be -// modified. A Config may be reused; the tls package will also not -// modify it. -type Config = tls.Config - -type config struct { - // Rand provides the source of entropy for nonces and RSA blinding. - // If Rand is nil, TLS uses the cryptographic random reader in package - // crypto/rand. - // The Reader must be safe for use by multiple goroutines. - Rand io.Reader - - // Time returns the current time as the number of seconds since the epoch. - // If Time is nil, TLS uses time.Now. - Time func() time.Time - - // Certificates contains one or more certificate chains to present to the - // other side of the connection. The first certificate compatible with the - // peer's requirements is selected automatically. - // - // Server configurations must set one of Certificates, GetCertificate or - // GetConfigForClient. Clients doing client-authentication may set either - // Certificates or GetClientCertificate. - // - // Note: if there are multiple Certificates, and they don't have the - // optional field Leaf set, certificate selection will incur a significant - // per-handshake performance cost. - Certificates []Certificate - - // NameToCertificate maps from a certificate name to an element of - // Certificates. Note that a certificate name can be of the form - // '*.example.com' and so doesn't have to be a domain name as such. - // - // Deprecated: NameToCertificate only allows associating a single - // certificate with a given name. Leave this field nil to let the library - // select the first compatible chain from Certificates. - NameToCertificate map[string]*Certificate - - // GetCertificate returns a Certificate based on the given - // ClientHelloInfo. It will only be called if the client supplies SNI - // information or if Certificates is empty. - // - // If GetCertificate is nil or returns nil, then the certificate is - // retrieved from NameToCertificate. If NameToCertificate is nil, the - // best element of Certificates will be used. - GetCertificate func(*ClientHelloInfo) (*Certificate, error) - - // GetClientCertificate, if not nil, is called when a server requests a - // certificate from a client. If set, the contents of Certificates will - // be ignored. - // - // If GetClientCertificate returns an error, the handshake will be - // aborted and that error will be returned. Otherwise - // GetClientCertificate must return a non-nil Certificate. If - // Certificate.Certificate is empty then no certificate will be sent to - // the server. If this is unacceptable to the server then it may abort - // the handshake. - // - // GetClientCertificate may be called multiple times for the same - // connection if renegotiation occurs or if TLS 1.3 is in use. - GetClientCertificate func(*CertificateRequestInfo) (*Certificate, error) - - // GetConfigForClient, if not nil, is called after a ClientHello is - // received from a client. It may return a non-nil Config in order to - // change the Config that will be used to handle this connection. If - // the returned Config is nil, the original Config will be used. The - // Config returned by this callback may not be subsequently modified. - // - // If GetConfigForClient is nil, the Config passed to Server() will be - // used for all connections. - // - // If SessionTicketKey was explicitly set on the returned Config, or if - // SetSessionTicketKeys was called on the returned Config, those keys will - // be used. Otherwise, the original Config keys will be used (and possibly - // rotated if they are automatically managed). - GetConfigForClient func(*ClientHelloInfo) (*Config, error) - - // VerifyPeerCertificate, if not nil, is called after normal - // certificate verification by either a TLS client or server. It - // receives the raw ASN.1 certificates provided by the peer and also - // any verified chains that normal processing found. If it returns a - // non-nil error, the handshake is aborted and that error results. - // - // If normal verification fails then the handshake will abort before - // considering this callback. If normal verification is disabled by - // setting InsecureSkipVerify, or (for a server) when ClientAuth is - // RequestClientCert or RequireAnyClientCert, then this callback will - // be considered but the verifiedChains argument will always be nil. - VerifyPeerCertificate func(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error - - // VerifyConnection, if not nil, is called after normal certificate - // verification and after VerifyPeerCertificate by either a TLS client - // or server. If it returns a non-nil error, the handshake is aborted - // and that error results. - // - // If normal verification fails then the handshake will abort before - // considering this callback. This callback will run for all connections - // regardless of InsecureSkipVerify or ClientAuth settings. - VerifyConnection func(ConnectionState) error - - // RootCAs defines the set of root certificate authorities - // that clients use when verifying server certificates. - // If RootCAs is nil, TLS uses the host's root CA set. - RootCAs *x509.CertPool - - // NextProtos is a list of supported application level protocols, in - // order of preference. If both peers support ALPN, the selected - // protocol will be one from this list, and the connection will fail - // if there is no mutually supported protocol. If NextProtos is empty - // or the peer doesn't support ALPN, the connection will succeed and - // ConnectionState.NegotiatedProtocol will be empty. - NextProtos []string - - // ServerName is used to verify the hostname on the returned - // certificates unless InsecureSkipVerify is given. It is also included - // in the client's handshake to support virtual hosting unless it is - // an IP address. - ServerName string - - // ClientAuth determines the server's policy for - // TLS Client Authentication. The default is NoClientCert. - ClientAuth ClientAuthType - - // ClientCAs defines the set of root certificate authorities - // that servers use if required to verify a client certificate - // by the policy in ClientAuth. - ClientCAs *x509.CertPool - - // InsecureSkipVerify controls whether a client verifies the server's - // certificate chain and host name. If InsecureSkipVerify is true, crypto/tls - // accepts any certificate presented by the server and any host name in that - // certificate. In this mode, TLS is susceptible to machine-in-the-middle - // attacks unless custom verification is used. This should be used only for - // testing or in combination with VerifyConnection or VerifyPeerCertificate. - InsecureSkipVerify bool - - // CipherSuites is a list of enabled TLS 1.0–1.2 cipher suites. The order of - // the list is ignored. Note that TLS 1.3 ciphersuites are not configurable. - // - // If CipherSuites is nil, a safe default list is used. The default cipher - // suites might change over time. - CipherSuites []uint16 - - // PreferServerCipherSuites is a legacy field and has no effect. - // - // It used to control whether the server would follow the client's or the - // server's preference. Servers now select the best mutually supported - // cipher suite based on logic that takes into account inferred client - // hardware, server hardware, and security. - // - // Deprecated: PreferServerCipherSuites is ignored. - PreferServerCipherSuites bool - - // SessionTicketsDisabled may be set to true to disable session ticket and - // PSK (resumption) support. Note that on clients, session ticket support is - // also disabled if ClientSessionCache is nil. - SessionTicketsDisabled bool - - // SessionTicketKey is used by TLS servers to provide session resumption. - // See RFC 5077 and the PSK mode of RFC 8446. If zero, it will be filled - // with random data before the first server handshake. - // - // Deprecated: if this field is left at zero, session ticket keys will be - // automatically rotated every day and dropped after seven days. For - // customizing the rotation schedule or synchronizing servers that are - // terminating connections for the same host, use SetSessionTicketKeys. - SessionTicketKey [32]byte - - // ClientSessionCache is a cache of ClientSessionState entries for TLS - // session resumption. It is only used by clients. - ClientSessionCache ClientSessionCache - - // MinVersion contains the minimum TLS version that is acceptable. - // - // By default, TLS 1.2 is currently used as the minimum when acting as a - // client, and TLS 1.0 when acting as a server. TLS 1.0 is the minimum - // supported by this package, both as a client and as a server. - // - // The client-side default can temporarily be reverted to TLS 1.0 by - // including the value "x509sha1=1" in the GODEBUG environment variable. - // Note that this option will be removed in Go 1.19 (but it will still be - // possible to set this field to VersionTLS10 explicitly). - MinVersion uint16 - - // MaxVersion contains the maximum TLS version that is acceptable. - // - // By default, the maximum version supported by this package is used, - // which is currently TLS 1.3. - MaxVersion uint16 - - // CurvePreferences contains the elliptic curves that will be used in - // an ECDHE handshake, in preference order. If empty, the default will - // be used. The client will use the first preference as the type for - // its key share in TLS 1.3. This may change in the future. - CurvePreferences []CurveID - - // DynamicRecordSizingDisabled disables adaptive sizing of TLS records. - // When true, the largest possible TLS record size is always used. When - // false, the size of TLS records may be adjusted in an attempt to - // improve latency. - DynamicRecordSizingDisabled bool - - // Renegotiation controls what types of renegotiation are supported. - // The default, none, is correct for the vast majority of applications. - Renegotiation RenegotiationSupport - - // KeyLogWriter optionally specifies a destination for TLS master secrets - // in NSS key log format that can be used to allow external programs - // such as Wireshark to decrypt TLS connections. - // See https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format. - // Use of KeyLogWriter compromises security and should only be - // used for debugging. - KeyLogWriter io.Writer - - // mutex protects sessionTicketKeys and autoSessionTicketKeys. - mutex sync.RWMutex - // sessionTicketKeys contains zero or more ticket keys. If set, it means the - // the keys were set with SessionTicketKey or SetSessionTicketKeys. The - // first key is used for new tickets and any subsequent keys can be used to - // decrypt old tickets. The slice contents are not protected by the mutex - // and are immutable. - sessionTicketKeys []ticketKey - // autoSessionTicketKeys is like sessionTicketKeys but is owned by the - // auto-rotation logic. See Config.ticketKeys. - autoSessionTicketKeys []ticketKey -} - -// A RecordLayer handles encrypting and decrypting of TLS messages. -type RecordLayer interface { - SetReadKey(encLevel EncryptionLevel, suite *CipherSuiteTLS13, trafficSecret []byte) - SetWriteKey(encLevel EncryptionLevel, suite *CipherSuiteTLS13, trafficSecret []byte) - ReadHandshakeMessage() ([]byte, error) - WriteRecord([]byte) (int, error) - SendAlert(uint8) -} - -type ExtraConfig struct { - // GetExtensions, if not nil, is called before a message that allows - // sending of extensions is sent. - // Currently only implemented for the ClientHello message (for the client) - // and for the EncryptedExtensions message (for the server). - // Only valid for TLS 1.3. - GetExtensions func(handshakeMessageType uint8) []Extension - - // ReceivedExtensions, if not nil, is called when a message that allows the - // inclusion of extensions is received. - // It is called with an empty slice of extensions, if the message didn't - // contain any extensions. - // Currently only implemented for the ClientHello message (sent by the - // client) and for the EncryptedExtensions message (sent by the server). - // Only valid for TLS 1.3. - ReceivedExtensions func(handshakeMessageType uint8, exts []Extension) - - // AlternativeRecordLayer is used by QUIC - AlternativeRecordLayer RecordLayer - - // Enforce the selection of a supported application protocol. - // Only works for TLS 1.3. - // If enabled, client and server have to agree on an application protocol. - // Otherwise, connection establishment fails. - EnforceNextProtoSelection bool - - // If MaxEarlyData is greater than 0, the client will be allowed to send early - // data when resuming a session. - // Requires the AlternativeRecordLayer to be set. - // - // It has no meaning on the client. - MaxEarlyData uint32 - - // The Accept0RTT callback is called when the client offers 0-RTT. - // The server then has to decide if it wants to accept or reject 0-RTT. - // It is only used for servers. - Accept0RTT func(appData []byte) bool - - // 0RTTRejected is called when the server rejectes 0-RTT. - // It is only used for clients. - Rejected0RTT func() - - // If set, the client will export the 0-RTT key when resuming a session that - // allows sending of early data. - // Requires the AlternativeRecordLayer to be set. - // - // It has no meaning to the server. - Enable0RTT bool - - // Is called when the client saves a session ticket to the session ticket. - // This gives the application the opportunity to save some data along with the ticket, - // which can be restored when the session ticket is used. - GetAppDataForSessionState func() []byte - - // Is called when the client uses a session ticket. - // Restores the application data that was saved earlier on GetAppDataForSessionTicket. - SetAppDataFromSessionState func([]byte) -} - -// Clone clones. -func (c *ExtraConfig) Clone() *ExtraConfig { - return &ExtraConfig{ - GetExtensions: c.GetExtensions, - ReceivedExtensions: c.ReceivedExtensions, - AlternativeRecordLayer: c.AlternativeRecordLayer, - EnforceNextProtoSelection: c.EnforceNextProtoSelection, - MaxEarlyData: c.MaxEarlyData, - Enable0RTT: c.Enable0RTT, - Accept0RTT: c.Accept0RTT, - Rejected0RTT: c.Rejected0RTT, - GetAppDataForSessionState: c.GetAppDataForSessionState, - SetAppDataFromSessionState: c.SetAppDataFromSessionState, - } -} - -func (c *ExtraConfig) usesAlternativeRecordLayer() bool { - return c != nil && c.AlternativeRecordLayer != nil -} - -const ( - // ticketKeyNameLen is the number of bytes of identifier that is prepended to - // an encrypted session ticket in order to identify the key used to encrypt it. - ticketKeyNameLen = 16 - - // ticketKeyLifetime is how long a ticket key remains valid and can be used to - // resume a client connection. - ticketKeyLifetime = 7 * 24 * time.Hour // 7 days - - // ticketKeyRotation is how often the server should rotate the session ticket key - // that is used for new tickets. - ticketKeyRotation = 24 * time.Hour -) - -// ticketKey is the internal representation of a session ticket key. -type ticketKey struct { - // keyName is an opaque byte string that serves to identify the session - // ticket key. It's exposed as plaintext in every session ticket. - keyName [ticketKeyNameLen]byte - aesKey [16]byte - hmacKey [16]byte - // created is the time at which this ticket key was created. See Config.ticketKeys. - created time.Time -} - -// ticketKeyFromBytes converts from the external representation of a session -// ticket key to a ticketKey. Externally, session ticket keys are 32 random -// bytes and this function expands that into sufficient name and key material. -func (c *config) ticketKeyFromBytes(b [32]byte) (key ticketKey) { - hashed := sha512.Sum512(b[:]) - copy(key.keyName[:], hashed[:ticketKeyNameLen]) - copy(key.aesKey[:], hashed[ticketKeyNameLen:ticketKeyNameLen+16]) - copy(key.hmacKey[:], hashed[ticketKeyNameLen+16:ticketKeyNameLen+32]) - key.created = c.time() - return key -} - -// maxSessionTicketLifetime is the maximum allowed lifetime of a TLS 1.3 session -// ticket, and the lifetime we set for tickets we send. -const maxSessionTicketLifetime = 7 * 24 * time.Hour - -// Clone returns a shallow clone of c or nil if c is nil. It is safe to clone a Config that is -// being used concurrently by a TLS client or server. -func (c *config) Clone() *config { - if c == nil { - return nil - } - c.mutex.RLock() - defer c.mutex.RUnlock() - return &config{ - Rand: c.Rand, - Time: c.Time, - Certificates: c.Certificates, - NameToCertificate: c.NameToCertificate, - GetCertificate: c.GetCertificate, - GetClientCertificate: c.GetClientCertificate, - GetConfigForClient: c.GetConfigForClient, - VerifyPeerCertificate: c.VerifyPeerCertificate, - VerifyConnection: c.VerifyConnection, - RootCAs: c.RootCAs, - NextProtos: c.NextProtos, - ServerName: c.ServerName, - ClientAuth: c.ClientAuth, - ClientCAs: c.ClientCAs, - InsecureSkipVerify: c.InsecureSkipVerify, - CipherSuites: c.CipherSuites, - PreferServerCipherSuites: c.PreferServerCipherSuites, - SessionTicketsDisabled: c.SessionTicketsDisabled, - SessionTicketKey: c.SessionTicketKey, - ClientSessionCache: c.ClientSessionCache, - MinVersion: c.MinVersion, - MaxVersion: c.MaxVersion, - CurvePreferences: c.CurvePreferences, - DynamicRecordSizingDisabled: c.DynamicRecordSizingDisabled, - Renegotiation: c.Renegotiation, - KeyLogWriter: c.KeyLogWriter, - sessionTicketKeys: c.sessionTicketKeys, - autoSessionTicketKeys: c.autoSessionTicketKeys, - } -} - -// deprecatedSessionTicketKey is set as the prefix of SessionTicketKey if it was -// randomized for backwards compatibility but is not in use. -var deprecatedSessionTicketKey = []byte("DEPRECATED") - -// initLegacySessionTicketKeyRLocked ensures the legacy SessionTicketKey field is -// randomized if empty, and that sessionTicketKeys is populated from it otherwise. -func (c *config) initLegacySessionTicketKeyRLocked() { - // Don't write if SessionTicketKey is already defined as our deprecated string, - // or if it is defined by the user but sessionTicketKeys is already set. - if c.SessionTicketKey != [32]byte{} && - (bytes.HasPrefix(c.SessionTicketKey[:], deprecatedSessionTicketKey) || len(c.sessionTicketKeys) > 0) { - return - } - - // We need to write some data, so get an exclusive lock and re-check any conditions. - c.mutex.RUnlock() - defer c.mutex.RLock() - c.mutex.Lock() - defer c.mutex.Unlock() - if c.SessionTicketKey == [32]byte{} { - if _, err := io.ReadFull(c.rand(), c.SessionTicketKey[:]); err != nil { - panic(fmt.Sprintf("tls: unable to generate random session ticket key: %v", err)) - } - // Write the deprecated prefix at the beginning so we know we created - // it. This key with the DEPRECATED prefix isn't used as an actual - // session ticket key, and is only randomized in case the application - // reuses it for some reason. - copy(c.SessionTicketKey[:], deprecatedSessionTicketKey) - } else if !bytes.HasPrefix(c.SessionTicketKey[:], deprecatedSessionTicketKey) && len(c.sessionTicketKeys) == 0 { - c.sessionTicketKeys = []ticketKey{c.ticketKeyFromBytes(c.SessionTicketKey)} - } - -} - -// ticketKeys returns the ticketKeys for this connection. -// If configForClient has explicitly set keys, those will -// be returned. Otherwise, the keys on c will be used and -// may be rotated if auto-managed. -// During rotation, any expired session ticket keys are deleted from -// c.sessionTicketKeys. If the session ticket key that is currently -// encrypting tickets (ie. the first ticketKey in c.sessionTicketKeys) -// is not fresh, then a new session ticket key will be -// created and prepended to c.sessionTicketKeys. -func (c *config) ticketKeys(configForClient *config) []ticketKey { - // If the ConfigForClient callback returned a Config with explicitly set - // keys, use those, otherwise just use the original Config. - if configForClient != nil { - configForClient.mutex.RLock() - if configForClient.SessionTicketsDisabled { - return nil - } - configForClient.initLegacySessionTicketKeyRLocked() - if len(configForClient.sessionTicketKeys) != 0 { - ret := configForClient.sessionTicketKeys - configForClient.mutex.RUnlock() - return ret - } - configForClient.mutex.RUnlock() - } - - c.mutex.RLock() - defer c.mutex.RUnlock() - if c.SessionTicketsDisabled { - return nil - } - c.initLegacySessionTicketKeyRLocked() - if len(c.sessionTicketKeys) != 0 { - return c.sessionTicketKeys - } - // Fast path for the common case where the key is fresh enough. - if len(c.autoSessionTicketKeys) > 0 && c.time().Sub(c.autoSessionTicketKeys[0].created) < ticketKeyRotation { - return c.autoSessionTicketKeys - } - - // autoSessionTicketKeys are managed by auto-rotation. - c.mutex.RUnlock() - defer c.mutex.RLock() - c.mutex.Lock() - defer c.mutex.Unlock() - // Re-check the condition in case it changed since obtaining the new lock. - if len(c.autoSessionTicketKeys) == 0 || c.time().Sub(c.autoSessionTicketKeys[0].created) >= ticketKeyRotation { - var newKey [32]byte - if _, err := io.ReadFull(c.rand(), newKey[:]); err != nil { - panic(fmt.Sprintf("unable to generate random session ticket key: %v", err)) - } - valid := make([]ticketKey, 0, len(c.autoSessionTicketKeys)+1) - valid = append(valid, c.ticketKeyFromBytes(newKey)) - for _, k := range c.autoSessionTicketKeys { - // While rotating the current key, also remove any expired ones. - if c.time().Sub(k.created) < ticketKeyLifetime { - valid = append(valid, k) - } - } - c.autoSessionTicketKeys = valid - } - return c.autoSessionTicketKeys -} - -// SetSessionTicketKeys updates the session ticket keys for a server. -// -// The first key will be used when creating new tickets, while all keys can be -// used for decrypting tickets. It is safe to call this function while the -// server is running in order to rotate the session ticket keys. The function -// will panic if keys is empty. -// -// Calling this function will turn off automatic session ticket key rotation. -// -// If multiple servers are terminating connections for the same host they should -// all have the same session ticket keys. If the session ticket keys leaks, -// previously recorded and future TLS connections using those keys might be -// compromised. -func (c *config) SetSessionTicketKeys(keys [][32]byte) { - if len(keys) == 0 { - panic("tls: keys must have at least one key") - } - - newKeys := make([]ticketKey, len(keys)) - for i, bytes := range keys { - newKeys[i] = c.ticketKeyFromBytes(bytes) - } - - c.mutex.Lock() - c.sessionTicketKeys = newKeys - c.mutex.Unlock() -} - -func (c *config) rand() io.Reader { - r := c.Rand - if r == nil { - return rand.Reader - } - return r -} - -func (c *config) time() time.Time { - t := c.Time - if t == nil { - t = time.Now - } - return t() -} - -func (c *config) cipherSuites() []uint16 { - if needFIPS() { - return fipsCipherSuites(c) - } - if c.CipherSuites != nil { - return c.CipherSuites - } - return defaultCipherSuites -} - -var supportedVersions = []uint16{ - VersionTLS13, - VersionTLS12, - VersionTLS11, - VersionTLS10, -} - -// roleClient and roleServer are meant to call supportedVersions and parents -// with more readability at the callsite. -const roleClient = true -const roleServer = false - -func (c *config) supportedVersions(isClient bool) []uint16 { - versions := make([]uint16, 0, len(supportedVersions)) - for _, v := range supportedVersions { - if needFIPS() && (v < fipsMinVersion(c) || v > fipsMaxVersion(c)) { - continue - } - if (c == nil || c.MinVersion == 0) && - isClient && v < VersionTLS12 { - continue - } - if c != nil && c.MinVersion != 0 && v < c.MinVersion { - continue - } - if c != nil && c.MaxVersion != 0 && v > c.MaxVersion { - continue - } - versions = append(versions, v) - } - return versions -} - -func (c *config) maxSupportedVersion(isClient bool) uint16 { - supportedVersions := c.supportedVersions(isClient) - if len(supportedVersions) == 0 { - return 0 - } - return supportedVersions[0] -} - -// supportedVersionsFromMax returns a list of supported versions derived from a -// legacy maximum version value. Note that only versions supported by this -// library are returned. Any newer peer will use supportedVersions anyway. -func supportedVersionsFromMax(maxVersion uint16) []uint16 { - versions := make([]uint16, 0, len(supportedVersions)) - for _, v := range supportedVersions { - if v > maxVersion { - continue - } - versions = append(versions, v) - } - return versions -} - -var defaultCurvePreferences = []CurveID{X25519, CurveP256, CurveP384, CurveP521} - -func (c *config) curvePreferences() []CurveID { - if needFIPS() { - return fipsCurvePreferences(c) - } - if c == nil || len(c.CurvePreferences) == 0 { - return defaultCurvePreferences - } - return c.CurvePreferences -} - -func (c *config) supportsCurve(curve CurveID) bool { - for _, cc := range c.curvePreferences() { - if cc == curve { - return true - } - } - return false -} - -// mutualVersion returns the protocol version to use given the advertised -// versions of the peer. Priority is given to the peer preference order. -func (c *config) mutualVersion(isClient bool, peerVersions []uint16) (uint16, bool) { - supportedVersions := c.supportedVersions(isClient) - for _, peerVersion := range peerVersions { - for _, v := range supportedVersions { - if v == peerVersion { - return v, true - } - } - } - return 0, false -} - -var errNoCertificates = errors.New("tls: no certificates configured") - -// getCertificate returns the best certificate for the given ClientHelloInfo, -// defaulting to the first element of c.Certificates. -func (c *config) getCertificate(clientHello *ClientHelloInfo) (*Certificate, error) { - if c.GetCertificate != nil && - (len(c.Certificates) == 0 || len(clientHello.ServerName) > 0) { - cert, err := c.GetCertificate(clientHello) - if cert != nil || err != nil { - return cert, err - } - } - - if len(c.Certificates) == 0 { - return nil, errNoCertificates - } - - if len(c.Certificates) == 1 { - // There's only one choice, so no point doing any work. - return &c.Certificates[0], nil - } - - if c.NameToCertificate != nil { - name := strings.ToLower(clientHello.ServerName) - if cert, ok := c.NameToCertificate[name]; ok { - return cert, nil - } - if len(name) > 0 { - labels := strings.Split(name, ".") - labels[0] = "*" - wildcardName := strings.Join(labels, ".") - if cert, ok := c.NameToCertificate[wildcardName]; ok { - return cert, nil - } - } - } - - for _, cert := range c.Certificates { - if err := clientHello.SupportsCertificate(&cert); err == nil { - return &cert, nil - } - } - - // If nothing matches, return the first certificate. - return &c.Certificates[0], nil -} - -// SupportsCertificate returns nil if the provided certificate is supported by -// the client that sent the ClientHello. Otherwise, it returns an error -// describing the reason for the incompatibility. -// -// If this ClientHelloInfo was passed to a GetConfigForClient or GetCertificate -// callback, this method will take into account the associated Config. Note that -// if GetConfigForClient returns a different Config, the change can't be -// accounted for by this method. -// -// This function will call x509.ParseCertificate unless c.Leaf is set, which can -// incur a significant performance cost. -func (chi *clientHelloInfo) SupportsCertificate(c *Certificate) error { - // Note we don't currently support certificate_authorities nor - // signature_algorithms_cert, and don't check the algorithms of the - // signatures on the chain (which anyway are a SHOULD, see RFC 8446, - // Section 4.4.2.2). - - config := chi.config - if config == nil { - config = &Config{} - } - conf := fromConfig(config) - vers, ok := conf.mutualVersion(roleServer, chi.SupportedVersions) - if !ok { - return errors.New("no mutually supported protocol versions") - } - - // If the client specified the name they are trying to connect to, the - // certificate needs to be valid for it. - if chi.ServerName != "" { - x509Cert, err := leafCertificate(c) - if err != nil { - return fmt.Errorf("failed to parse certificate: %w", err) - } - if err := x509Cert.VerifyHostname(chi.ServerName); err != nil { - return fmt.Errorf("certificate is not valid for requested server name: %w", err) - } - } - - // supportsRSAFallback returns nil if the certificate and connection support - // the static RSA key exchange, and unsupported otherwise. The logic for - // supporting static RSA is completely disjoint from the logic for - // supporting signed key exchanges, so we just check it as a fallback. - supportsRSAFallback := func(unsupported error) error { - // TLS 1.3 dropped support for the static RSA key exchange. - if vers == VersionTLS13 { - return unsupported - } - // The static RSA key exchange works by decrypting a challenge with the - // RSA private key, not by signing, so check the PrivateKey implements - // crypto.Decrypter, like *rsa.PrivateKey does. - if priv, ok := c.PrivateKey.(crypto.Decrypter); ok { - if _, ok := priv.Public().(*rsa.PublicKey); !ok { - return unsupported - } - } else { - return unsupported - } - // Finally, there needs to be a mutual cipher suite that uses the static - // RSA key exchange instead of ECDHE. - rsaCipherSuite := selectCipherSuite(chi.CipherSuites, conf.cipherSuites(), func(c *cipherSuite) bool { - if c.flags&suiteECDHE != 0 { - return false - } - if vers < VersionTLS12 && c.flags&suiteTLS12 != 0 { - return false - } - return true - }) - if rsaCipherSuite == nil { - return unsupported - } - return nil - } - - // If the client sent the signature_algorithms extension, ensure it supports - // schemes we can use with this certificate and TLS version. - if len(chi.SignatureSchemes) > 0 { - if _, err := selectSignatureScheme(vers, c, chi.SignatureSchemes); err != nil { - return supportsRSAFallback(err) - } - } - - // In TLS 1.3 we are done because supported_groups is only relevant to the - // ECDHE computation, point format negotiation is removed, cipher suites are - // only relevant to the AEAD choice, and static RSA does not exist. - if vers == VersionTLS13 { - return nil - } - - // The only signed key exchange we support is ECDHE. - if !supportsECDHE(conf, chi.SupportedCurves, chi.SupportedPoints) { - return supportsRSAFallback(errors.New("client doesn't support ECDHE, can only use legacy RSA key exchange")) - } - - var ecdsaCipherSuite bool - if priv, ok := c.PrivateKey.(crypto.Signer); ok { - switch pub := priv.Public().(type) { - case *ecdsa.PublicKey: - var curve CurveID - switch pub.Curve { - case elliptic.P256(): - curve = CurveP256 - case elliptic.P384(): - curve = CurveP384 - case elliptic.P521(): - curve = CurveP521 - default: - return supportsRSAFallback(unsupportedCertificateError(c)) - } - var curveOk bool - for _, c := range chi.SupportedCurves { - if c == curve && conf.supportsCurve(c) { - curveOk = true - break - } - } - if !curveOk { - return errors.New("client doesn't support certificate curve") - } - ecdsaCipherSuite = true - case ed25519.PublicKey: - if vers < VersionTLS12 || len(chi.SignatureSchemes) == 0 { - return errors.New("connection doesn't support Ed25519") - } - ecdsaCipherSuite = true - case *rsa.PublicKey: - default: - return supportsRSAFallback(unsupportedCertificateError(c)) - } - } else { - return supportsRSAFallback(unsupportedCertificateError(c)) - } - - // Make sure that there is a mutually supported cipher suite that works with - // this certificate. Cipher suite selection will then apply the logic in - // reverse to pick it. See also serverHandshakeState.cipherSuiteOk. - cipherSuite := selectCipherSuite(chi.CipherSuites, conf.cipherSuites(), func(c *cipherSuite) bool { - if c.flags&suiteECDHE == 0 { - return false - } - if c.flags&suiteECSign != 0 { - if !ecdsaCipherSuite { - return false - } - } else { - if ecdsaCipherSuite { - return false - } - } - if vers < VersionTLS12 && c.flags&suiteTLS12 != 0 { - return false - } - return true - }) - if cipherSuite == nil { - return supportsRSAFallback(errors.New("client doesn't support any cipher suites compatible with the certificate")) - } - - return nil -} - -// BuildNameToCertificate parses c.Certificates and builds c.NameToCertificate -// from the CommonName and SubjectAlternateName fields of each of the leaf -// certificates. -// -// Deprecated: NameToCertificate only allows associating a single certificate -// with a given name. Leave that field nil to let the library select the first -// compatible chain from Certificates. -func (c *config) BuildNameToCertificate() { - c.NameToCertificate = make(map[string]*Certificate) - for i := range c.Certificates { - cert := &c.Certificates[i] - x509Cert, err := leafCertificate(cert) - if err != nil { - continue - } - // If SANs are *not* present, some clients will consider the certificate - // valid for the name in the Common Name. - if x509Cert.Subject.CommonName != "" && len(x509Cert.DNSNames) == 0 { - c.NameToCertificate[x509Cert.Subject.CommonName] = cert - } - for _, san := range x509Cert.DNSNames { - c.NameToCertificate[san] = cert - } - } -} - -const ( - keyLogLabelTLS12 = "CLIENT_RANDOM" - keyLogLabelEarlyTraffic = "CLIENT_EARLY_TRAFFIC_SECRET" - keyLogLabelClientHandshake = "CLIENT_HANDSHAKE_TRAFFIC_SECRET" - keyLogLabelServerHandshake = "SERVER_HANDSHAKE_TRAFFIC_SECRET" - keyLogLabelClientTraffic = "CLIENT_TRAFFIC_SECRET_0" - keyLogLabelServerTraffic = "SERVER_TRAFFIC_SECRET_0" -) - -func (c *config) writeKeyLog(label string, clientRandom, secret []byte) error { - if c.KeyLogWriter == nil { - return nil - } - - logLine := []byte(fmt.Sprintf("%s %x %x\n", label, clientRandom, secret)) - - writerMutex.Lock() - _, err := c.KeyLogWriter.Write(logLine) - writerMutex.Unlock() - - return err -} - -// writerMutex protects all KeyLogWriters globally. It is rarely enabled, -// and is only for debugging, so a global mutex saves space. -var writerMutex sync.Mutex - -// A Certificate is a chain of one or more certificates, leaf first. -type Certificate = tls.Certificate - -// leaf returns the parsed leaf certificate, either from c.Leaf or by parsing -// the corresponding c.Certificate[0]. -func leafCertificate(c *Certificate) (*x509.Certificate, error) { - if c.Leaf != nil { - return c.Leaf, nil - } - return x509.ParseCertificate(c.Certificate[0]) -} - -type handshakeMessage interface { - marshal() []byte - unmarshal([]byte) bool -} - -// lruSessionCache is a ClientSessionCache implementation that uses an LRU -// caching strategy. -type lruSessionCache struct { - sync.Mutex - - m map[string]*list.Element - q *list.List - capacity int -} - -type lruSessionCacheEntry struct { - sessionKey string - state *ClientSessionState -} - -// NewLRUClientSessionCache returns a ClientSessionCache with the given -// capacity that uses an LRU strategy. If capacity is < 1, a default capacity -// is used instead. -func NewLRUClientSessionCache(capacity int) ClientSessionCache { - const defaultSessionCacheCapacity = 64 - - if capacity < 1 { - capacity = defaultSessionCacheCapacity - } - return &lruSessionCache{ - m: make(map[string]*list.Element), - q: list.New(), - capacity: capacity, - } -} - -// Put adds the provided (sessionKey, cs) pair to the cache. If cs is nil, the entry -// corresponding to sessionKey is removed from the cache instead. -func (c *lruSessionCache) Put(sessionKey string, cs *ClientSessionState) { - c.Lock() - defer c.Unlock() - - if elem, ok := c.m[sessionKey]; ok { - if cs == nil { - c.q.Remove(elem) - delete(c.m, sessionKey) - } else { - entry := elem.Value.(*lruSessionCacheEntry) - entry.state = cs - c.q.MoveToFront(elem) - } - return - } - - if c.q.Len() < c.capacity { - entry := &lruSessionCacheEntry{sessionKey, cs} - c.m[sessionKey] = c.q.PushFront(entry) - return - } - - elem := c.q.Back() - entry := elem.Value.(*lruSessionCacheEntry) - delete(c.m, entry.sessionKey) - entry.sessionKey = sessionKey - entry.state = cs - c.q.MoveToFront(elem) - c.m[sessionKey] = elem -} - -// Get returns the ClientSessionState value associated with a given key. It -// returns (nil, false) if no value is found. -func (c *lruSessionCache) Get(sessionKey string) (*ClientSessionState, bool) { - c.Lock() - defer c.Unlock() - - if elem, ok := c.m[sessionKey]; ok { - c.q.MoveToFront(elem) - return elem.Value.(*lruSessionCacheEntry).state, true - } - return nil, false -} - -var emptyConfig Config - -func defaultConfig() *Config { - return &emptyConfig -} - -func unexpectedMessageError(wanted, got any) error { - return fmt.Errorf("tls: received unexpected handshake message of type %T when waiting for %T", got, wanted) -} - -func isSupportedSignatureAlgorithm(sigAlg SignatureScheme, supportedSignatureAlgorithms []SignatureScheme) bool { - for _, s := range supportedSignatureAlgorithms { - if s == sigAlg { - return true - } - } - return false -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/conn.go b/vendor/github.com/quic-go/qtls-go1-19/conn.go deleted file mode 100644 index 5a17f7a14f..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/conn.go +++ /dev/null @@ -1,1619 +0,0 @@ -// Copyright 2010 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. - -// TLS low level connection and record layer - -package qtls - -import ( - "bytes" - "context" - "crypto/cipher" - "crypto/subtle" - "crypto/x509" - "errors" - "fmt" - "hash" - "io" - "net" - "sync" - "sync/atomic" - "time" -) - -// A Conn represents a secured connection. -// It implements the net.Conn interface. -type Conn struct { - // constant - conn net.Conn - isClient bool - handshakeFn func(context.Context) error // (*Conn).clientHandshake or serverHandshake - - // handshakeStatus is 1 if the connection is currently transferring - // application data (i.e. is not currently processing a handshake). - // handshakeStatus == 1 implies handshakeErr == nil. - // This field is only to be accessed with sync/atomic. - handshakeStatus uint32 - // constant after handshake; protected by handshakeMutex - handshakeMutex sync.Mutex - handshakeErr error // error resulting from handshake - vers uint16 // TLS version - haveVers bool // version has been negotiated - config *config // configuration passed to constructor - // handshakes counts the number of handshakes performed on the - // connection so far. If renegotiation is disabled then this is either - // zero or one. - extraConfig *ExtraConfig - - handshakes int - didResume bool // whether this connection was a session resumption - cipherSuite uint16 - ocspResponse []byte // stapled OCSP response - scts [][]byte // signed certificate timestamps from server - peerCertificates []*x509.Certificate - // verifiedChains contains the certificate chains that we built, as - // opposed to the ones presented by the server. - verifiedChains [][]*x509.Certificate - // serverName contains the server name indicated by the client, if any. - serverName string - // secureRenegotiation is true if the server echoed the secure - // renegotiation extension. (This is meaningless as a server because - // renegotiation is not supported in that case.) - secureRenegotiation bool - // ekm is a closure for exporting keying material. - ekm func(label string, context []byte, length int) ([]byte, error) - // For the client: - // resumptionSecret is the resumption_master_secret for handling - // NewSessionTicket messages. nil if config.SessionTicketsDisabled. - // For the server: - // resumptionSecret is the resumption_master_secret for generating - // NewSessionTicket messages. Only used when the alternative record - // layer is set. nil if config.SessionTicketsDisabled. - resumptionSecret []byte - - // ticketKeys is the set of active session ticket keys for this - // connection. The first one is used to encrypt new tickets and - // all are tried to decrypt tickets. - ticketKeys []ticketKey - - // clientFinishedIsFirst is true if the client sent the first Finished - // message during the most recent handshake. This is recorded because - // the first transmitted Finished message is the tls-unique - // channel-binding value. - clientFinishedIsFirst bool - - // closeNotifyErr is any error from sending the alertCloseNotify record. - closeNotifyErr error - // closeNotifySent is true if the Conn attempted to send an - // alertCloseNotify record. - closeNotifySent bool - - // clientFinished and serverFinished contain the Finished message sent - // by the client or server in the most recent handshake. This is - // retained to support the renegotiation extension and tls-unique - // channel-binding. - clientFinished [12]byte - serverFinished [12]byte - - // clientProtocol is the negotiated ALPN protocol. - clientProtocol string - - // input/output - in, out halfConn - rawInput bytes.Buffer // raw input, starting with a record header - input bytes.Reader // application data waiting to be read, from rawInput.Next - hand bytes.Buffer // handshake data waiting to be read - buffering bool // whether records are buffered in sendBuf - sendBuf []byte // a buffer of records waiting to be sent - - // bytesSent counts the bytes of application data sent. - // packetsSent counts packets. - bytesSent int64 - packetsSent int64 - - // retryCount counts the number of consecutive non-advancing records - // received by Conn.readRecord. That is, records that neither advance the - // handshake, nor deliver application data. Protected by in.Mutex. - retryCount int - - // activeCall is an atomic int32; the low bit is whether Close has - // been called. the rest of the bits are the number of goroutines - // in Conn.Write. - activeCall int32 - - used0RTT bool - - tmp [16]byte - - connStateMutex sync.Mutex - connState ConnectionStateWith0RTT -} - -// Access to net.Conn methods. -// Cannot just embed net.Conn because that would -// export the struct field too. - -// LocalAddr returns the local network address. -func (c *Conn) LocalAddr() net.Addr { - return c.conn.LocalAddr() -} - -// RemoteAddr returns the remote network address. -func (c *Conn) RemoteAddr() net.Addr { - return c.conn.RemoteAddr() -} - -// SetDeadline sets the read and write deadlines associated with the connection. -// A zero value for t means Read and Write will not time out. -// After a Write has timed out, the TLS state is corrupt and all future writes will return the same error. -func (c *Conn) SetDeadline(t time.Time) error { - return c.conn.SetDeadline(t) -} - -// SetReadDeadline sets the read deadline on the underlying connection. -// A zero value for t means Read will not time out. -func (c *Conn) SetReadDeadline(t time.Time) error { - return c.conn.SetReadDeadline(t) -} - -// SetWriteDeadline sets the write deadline on the underlying connection. -// A zero value for t means Write will not time out. -// After a Write has timed out, the TLS state is corrupt and all future writes will return the same error. -func (c *Conn) SetWriteDeadline(t time.Time) error { - return c.conn.SetWriteDeadline(t) -} - -// NetConn returns the underlying connection that is wrapped by c. -// Note that writing to or reading from this connection directly will corrupt the -// TLS session. -func (c *Conn) NetConn() net.Conn { - return c.conn -} - -// A halfConn represents one direction of the record layer -// connection, either sending or receiving. -type halfConn struct { - sync.Mutex - - err error // first permanent error - version uint16 // protocol version - cipher any // cipher algorithm - mac hash.Hash - seq [8]byte // 64-bit sequence number - - scratchBuf [13]byte // to avoid allocs; interface method args escape - - nextCipher any // next encryption state - nextMac hash.Hash // next MAC algorithm - - trafficSecret []byte // current TLS 1.3 traffic secret - - setKeyCallback func(encLevel EncryptionLevel, suite *CipherSuiteTLS13, trafficSecret []byte) -} - -type permanentError struct { - err net.Error -} - -func (e *permanentError) Error() string { return e.err.Error() } -func (e *permanentError) Unwrap() error { return e.err } -func (e *permanentError) Timeout() bool { return e.err.Timeout() } -func (e *permanentError) Temporary() bool { return false } - -func (hc *halfConn) setErrorLocked(err error) error { - if e, ok := err.(net.Error); ok { - hc.err = &permanentError{err: e} - } else { - hc.err = err - } - return hc.err -} - -// prepareCipherSpec sets the encryption and MAC states -// that a subsequent changeCipherSpec will use. -func (hc *halfConn) prepareCipherSpec(version uint16, cipher any, mac hash.Hash) { - hc.version = version - hc.nextCipher = cipher - hc.nextMac = mac -} - -// changeCipherSpec changes the encryption and MAC states -// to the ones previously passed to prepareCipherSpec. -func (hc *halfConn) changeCipherSpec() error { - if hc.nextCipher == nil || hc.version == VersionTLS13 { - return alertInternalError - } - hc.cipher = hc.nextCipher - hc.mac = hc.nextMac - hc.nextCipher = nil - hc.nextMac = nil - for i := range hc.seq { - hc.seq[i] = 0 - } - return nil -} - -func (hc *halfConn) exportKey(encLevel EncryptionLevel, suite *cipherSuiteTLS13, trafficSecret []byte) { - if hc.setKeyCallback != nil { - s := &CipherSuiteTLS13{ - ID: suite.id, - KeyLen: suite.keyLen, - Hash: suite.hash, - AEAD: func(key, fixedNonce []byte) cipher.AEAD { return suite.aead(key, fixedNonce) }, - } - hc.setKeyCallback(encLevel, s, trafficSecret) - } -} - -func (hc *halfConn) setTrafficSecret(suite *cipherSuiteTLS13, secret []byte) { - hc.trafficSecret = secret - key, iv := suite.trafficKey(secret) - hc.cipher = suite.aead(key, iv) - for i := range hc.seq { - hc.seq[i] = 0 - } -} - -// incSeq increments the sequence number. -func (hc *halfConn) incSeq() { - for i := 7; i >= 0; i-- { - hc.seq[i]++ - if hc.seq[i] != 0 { - return - } - } - - // Not allowed to let sequence number wrap. - // Instead, must renegotiate before it does. - // Not likely enough to bother. - panic("TLS: sequence number wraparound") -} - -// explicitNonceLen returns the number of bytes of explicit nonce or IV included -// in each record. Explicit nonces are present only in CBC modes after TLS 1.0 -// and in certain AEAD modes in TLS 1.2. -func (hc *halfConn) explicitNonceLen() int { - if hc.cipher == nil { - return 0 - } - - switch c := hc.cipher.(type) { - case cipher.Stream: - return 0 - case aead: - return c.explicitNonceLen() - case cbcMode: - // TLS 1.1 introduced a per-record explicit IV to fix the BEAST attack. - if hc.version >= VersionTLS11 { - return c.BlockSize() - } - return 0 - default: - panic("unknown cipher type") - } -} - -// extractPadding returns, in constant time, the length of the padding to remove -// from the end of payload. It also returns a byte which is equal to 255 if the -// padding was valid and 0 otherwise. See RFC 2246, Section 6.2.3.2. -func extractPadding(payload []byte) (toRemove int, good byte) { - if len(payload) < 1 { - return 0, 0 - } - - paddingLen := payload[len(payload)-1] - t := uint(len(payload)-1) - uint(paddingLen) - // if len(payload) >= (paddingLen - 1) then the MSB of t is zero - good = byte(int32(^t) >> 31) - - // The maximum possible padding length plus the actual length field - toCheck := 256 - // The length of the padded data is public, so we can use an if here - if toCheck > len(payload) { - toCheck = len(payload) - } - - for i := 0; i < toCheck; i++ { - t := uint(paddingLen) - uint(i) - // if i <= paddingLen then the MSB of t is zero - mask := byte(int32(^t) >> 31) - b := payload[len(payload)-1-i] - good &^= mask&paddingLen ^ mask&b - } - - // We AND together the bits of good and replicate the result across - // all the bits. - good &= good << 4 - good &= good << 2 - good &= good << 1 - good = uint8(int8(good) >> 7) - - // Zero the padding length on error. This ensures any unchecked bytes - // are included in the MAC. Otherwise, an attacker that could - // distinguish MAC failures from padding failures could mount an attack - // similar to POODLE in SSL 3.0: given a good ciphertext that uses a - // full block's worth of padding, replace the final block with another - // block. If the MAC check passed but the padding check failed, the - // last byte of that block decrypted to the block size. - // - // See also macAndPaddingGood logic below. - paddingLen &= good - - toRemove = int(paddingLen) + 1 - return -} - -func roundUp(a, b int) int { - return a + (b-a%b)%b -} - -// cbcMode is an interface for block ciphers using cipher block chaining. -type cbcMode interface { - cipher.BlockMode - SetIV([]byte) -} - -// decrypt authenticates and decrypts the record if protection is active at -// this stage. The returned plaintext might overlap with the input. -func (hc *halfConn) decrypt(record []byte) ([]byte, recordType, error) { - var plaintext []byte - typ := recordType(record[0]) - payload := record[recordHeaderLen:] - - // In TLS 1.3, change_cipher_spec messages are to be ignored without being - // decrypted. See RFC 8446, Appendix D.4. - if hc.version == VersionTLS13 && typ == recordTypeChangeCipherSpec { - return payload, typ, nil - } - - paddingGood := byte(255) - paddingLen := 0 - - explicitNonceLen := hc.explicitNonceLen() - - if hc.cipher != nil { - switch c := hc.cipher.(type) { - case cipher.Stream: - c.XORKeyStream(payload, payload) - case aead: - if len(payload) < explicitNonceLen { - return nil, 0, alertBadRecordMAC - } - nonce := payload[:explicitNonceLen] - if len(nonce) == 0 { - nonce = hc.seq[:] - } - payload = payload[explicitNonceLen:] - - var additionalData []byte - if hc.version == VersionTLS13 { - additionalData = record[:recordHeaderLen] - } else { - additionalData = append(hc.scratchBuf[:0], hc.seq[:]...) - additionalData = append(additionalData, record[:3]...) - n := len(payload) - c.Overhead() - additionalData = append(additionalData, byte(n>>8), byte(n)) - } - - var err error - plaintext, err = c.Open(payload[:0], nonce, payload, additionalData) - if err != nil { - return nil, 0, alertBadRecordMAC - } - case cbcMode: - blockSize := c.BlockSize() - minPayload := explicitNonceLen + roundUp(hc.mac.Size()+1, blockSize) - if len(payload)%blockSize != 0 || len(payload) < minPayload { - return nil, 0, alertBadRecordMAC - } - - if explicitNonceLen > 0 { - c.SetIV(payload[:explicitNonceLen]) - payload = payload[explicitNonceLen:] - } - c.CryptBlocks(payload, payload) - - // In a limited attempt to protect against CBC padding oracles like - // Lucky13, the data past paddingLen (which is secret) is passed to - // the MAC function as extra data, to be fed into the HMAC after - // computing the digest. This makes the MAC roughly constant time as - // long as the digest computation is constant time and does not - // affect the subsequent write, modulo cache effects. - paddingLen, paddingGood = extractPadding(payload) - default: - panic("unknown cipher type") - } - - if hc.version == VersionTLS13 { - if typ != recordTypeApplicationData { - return nil, 0, alertUnexpectedMessage - } - if len(plaintext) > maxPlaintext+1 { - return nil, 0, alertRecordOverflow - } - // Remove padding and find the ContentType scanning from the end. - for i := len(plaintext) - 1; i >= 0; i-- { - if plaintext[i] != 0 { - typ = recordType(plaintext[i]) - plaintext = plaintext[:i] - break - } - if i == 0 { - return nil, 0, alertUnexpectedMessage - } - } - } - } else { - plaintext = payload - } - - if hc.mac != nil { - macSize := hc.mac.Size() - if len(payload) < macSize { - return nil, 0, alertBadRecordMAC - } - - n := len(payload) - macSize - paddingLen - n = subtle.ConstantTimeSelect(int(uint32(n)>>31), 0, n) // if n < 0 { n = 0 } - record[3] = byte(n >> 8) - record[4] = byte(n) - remoteMAC := payload[n : n+macSize] - localMAC := tls10MAC(hc.mac, hc.scratchBuf[:0], hc.seq[:], record[:recordHeaderLen], payload[:n], payload[n+macSize:]) - - // This is equivalent to checking the MACs and paddingGood - // separately, but in constant-time to prevent distinguishing - // padding failures from MAC failures. Depending on what value - // of paddingLen was returned on bad padding, distinguishing - // bad MAC from bad padding can lead to an attack. - // - // See also the logic at the end of extractPadding. - macAndPaddingGood := subtle.ConstantTimeCompare(localMAC, remoteMAC) & int(paddingGood) - if macAndPaddingGood != 1 { - return nil, 0, alertBadRecordMAC - } - - plaintext = payload[:n] - } - - hc.incSeq() - return plaintext, typ, nil -} - -func (c *Conn) setAlternativeRecordLayer() { - if c.extraConfig != nil && c.extraConfig.AlternativeRecordLayer != nil { - c.in.setKeyCallback = c.extraConfig.AlternativeRecordLayer.SetReadKey - c.out.setKeyCallback = c.extraConfig.AlternativeRecordLayer.SetWriteKey - } -} - -// sliceForAppend extends the input slice by n bytes. head is the full extended -// slice, while tail is the appended part. If the original slice has sufficient -// capacity no allocation is performed. -func sliceForAppend(in []byte, n int) (head, tail []byte) { - if total := len(in) + n; cap(in) >= total { - head = in[:total] - } else { - head = make([]byte, total) - copy(head, in) - } - tail = head[len(in):] - return -} - -// encrypt encrypts payload, adding the appropriate nonce and/or MAC, and -// appends it to record, which must already contain the record header. -func (hc *halfConn) encrypt(record, payload []byte, rand io.Reader) ([]byte, error) { - if hc.cipher == nil { - return append(record, payload...), nil - } - - var explicitNonce []byte - if explicitNonceLen := hc.explicitNonceLen(); explicitNonceLen > 0 { - record, explicitNonce = sliceForAppend(record, explicitNonceLen) - if _, isCBC := hc.cipher.(cbcMode); !isCBC && explicitNonceLen < 16 { - // The AES-GCM construction in TLS has an explicit nonce so that the - // nonce can be random. However, the nonce is only 8 bytes which is - // too small for a secure, random nonce. Therefore we use the - // sequence number as the nonce. The 3DES-CBC construction also has - // an 8 bytes nonce but its nonces must be unpredictable (see RFC - // 5246, Appendix F.3), forcing us to use randomness. That's not - // 3DES' biggest problem anyway because the birthday bound on block - // collision is reached first due to its similarly small block size - // (see the Sweet32 attack). - copy(explicitNonce, hc.seq[:]) - } else { - if _, err := io.ReadFull(rand, explicitNonce); err != nil { - return nil, err - } - } - } - - var dst []byte - switch c := hc.cipher.(type) { - case cipher.Stream: - mac := tls10MAC(hc.mac, hc.scratchBuf[:0], hc.seq[:], record[:recordHeaderLen], payload, nil) - record, dst = sliceForAppend(record, len(payload)+len(mac)) - c.XORKeyStream(dst[:len(payload)], payload) - c.XORKeyStream(dst[len(payload):], mac) - case aead: - nonce := explicitNonce - if len(nonce) == 0 { - nonce = hc.seq[:] - } - - if hc.version == VersionTLS13 { - record = append(record, payload...) - - // Encrypt the actual ContentType and replace the plaintext one. - record = append(record, record[0]) - record[0] = byte(recordTypeApplicationData) - - n := len(payload) + 1 + c.Overhead() - record[3] = byte(n >> 8) - record[4] = byte(n) - - record = c.Seal(record[:recordHeaderLen], - nonce, record[recordHeaderLen:], record[:recordHeaderLen]) - } else { - additionalData := append(hc.scratchBuf[:0], hc.seq[:]...) - additionalData = append(additionalData, record[:recordHeaderLen]...) - record = c.Seal(record, nonce, payload, additionalData) - } - case cbcMode: - mac := tls10MAC(hc.mac, hc.scratchBuf[:0], hc.seq[:], record[:recordHeaderLen], payload, nil) - blockSize := c.BlockSize() - plaintextLen := len(payload) + len(mac) - paddingLen := blockSize - plaintextLen%blockSize - record, dst = sliceForAppend(record, plaintextLen+paddingLen) - copy(dst, payload) - copy(dst[len(payload):], mac) - for i := plaintextLen; i < len(dst); i++ { - dst[i] = byte(paddingLen - 1) - } - if len(explicitNonce) > 0 { - c.SetIV(explicitNonce) - } - c.CryptBlocks(dst, dst) - default: - panic("unknown cipher type") - } - - // Update length to include nonce, MAC and any block padding needed. - n := len(record) - recordHeaderLen - record[3] = byte(n >> 8) - record[4] = byte(n) - hc.incSeq() - - return record, nil -} - -// RecordHeaderError is returned when a TLS record header is invalid. -type RecordHeaderError struct { - // Msg contains a human readable string that describes the error. - Msg string - // RecordHeader contains the five bytes of TLS record header that - // triggered the error. - RecordHeader [5]byte - // Conn provides the underlying net.Conn in the case that a client - // sent an initial handshake that didn't look like TLS. - // It is nil if there's already been a handshake or a TLS alert has - // been written to the connection. - Conn net.Conn -} - -func (e RecordHeaderError) Error() string { return "tls: " + e.Msg } - -func (c *Conn) newRecordHeaderError(conn net.Conn, msg string) (err RecordHeaderError) { - err.Msg = msg - err.Conn = conn - copy(err.RecordHeader[:], c.rawInput.Bytes()) - return err -} - -func (c *Conn) readRecord() error { - return c.readRecordOrCCS(false) -} - -func (c *Conn) readChangeCipherSpec() error { - return c.readRecordOrCCS(true) -} - -// readRecordOrCCS reads one or more TLS records from the connection and -// updates the record layer state. Some invariants: -// - c.in must be locked -// - c.input must be empty -// -// During the handshake one and only one of the following will happen: -// - c.hand grows -// - c.in.changeCipherSpec is called -// - an error is returned -// -// After the handshake one and only one of the following will happen: -// - c.hand grows -// - c.input is set -// - an error is returned -func (c *Conn) readRecordOrCCS(expectChangeCipherSpec bool) error { - if c.in.err != nil { - return c.in.err - } - handshakeComplete := c.handshakeComplete() - - // This function modifies c.rawInput, which owns the c.input memory. - if c.input.Len() != 0 { - return c.in.setErrorLocked(errors.New("tls: internal error: attempted to read record with pending application data")) - } - c.input.Reset(nil) - - // Read header, payload. - if err := c.readFromUntil(c.conn, recordHeaderLen); err != nil { - // RFC 8446, Section 6.1 suggests that EOF without an alertCloseNotify - // is an error, but popular web sites seem to do this, so we accept it - // if and only if at the record boundary. - if err == io.ErrUnexpectedEOF && c.rawInput.Len() == 0 { - err = io.EOF - } - if e, ok := err.(net.Error); !ok || !e.Temporary() { - c.in.setErrorLocked(err) - } - return err - } - hdr := c.rawInput.Bytes()[:recordHeaderLen] - typ := recordType(hdr[0]) - - // No valid TLS record has a type of 0x80, however SSLv2 handshakes - // start with a uint16 length where the MSB is set and the first record - // is always < 256 bytes long. Therefore typ == 0x80 strongly suggests - // an SSLv2 client. - if !handshakeComplete && typ == 0x80 { - c.sendAlert(alertProtocolVersion) - return c.in.setErrorLocked(c.newRecordHeaderError(nil, "unsupported SSLv2 handshake received")) - } - - vers := uint16(hdr[1])<<8 | uint16(hdr[2]) - n := int(hdr[3])<<8 | int(hdr[4]) - if c.haveVers && c.vers != VersionTLS13 && vers != c.vers { - c.sendAlert(alertProtocolVersion) - msg := fmt.Sprintf("received record with version %x when expecting version %x", vers, c.vers) - return c.in.setErrorLocked(c.newRecordHeaderError(nil, msg)) - } - if !c.haveVers { - // First message, be extra suspicious: this might not be a TLS - // client. Bail out before reading a full 'body', if possible. - // The current max version is 3.3 so if the version is >= 16.0, - // it's probably not real. - if (typ != recordTypeAlert && typ != recordTypeHandshake) || vers >= 0x1000 { - return c.in.setErrorLocked(c.newRecordHeaderError(c.conn, "first record does not look like a TLS handshake")) - } - } - if c.vers == VersionTLS13 && n > maxCiphertextTLS13 || n > maxCiphertext { - c.sendAlert(alertRecordOverflow) - msg := fmt.Sprintf("oversized record received with length %d", n) - return c.in.setErrorLocked(c.newRecordHeaderError(nil, msg)) - } - if err := c.readFromUntil(c.conn, recordHeaderLen+n); err != nil { - if e, ok := err.(net.Error); !ok || !e.Temporary() { - c.in.setErrorLocked(err) - } - return err - } - - // Process message. - record := c.rawInput.Next(recordHeaderLen + n) - data, typ, err := c.in.decrypt(record) - if err != nil { - return c.in.setErrorLocked(c.sendAlert(err.(alert))) - } - if len(data) > maxPlaintext { - return c.in.setErrorLocked(c.sendAlert(alertRecordOverflow)) - } - - // Application Data messages are always protected. - if c.in.cipher == nil && typ == recordTypeApplicationData { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - - if typ != recordTypeAlert && typ != recordTypeChangeCipherSpec && len(data) > 0 { - // This is a state-advancing message: reset the retry count. - c.retryCount = 0 - } - - // Handshake messages MUST NOT be interleaved with other record types in TLS 1.3. - if c.vers == VersionTLS13 && typ != recordTypeHandshake && c.hand.Len() > 0 { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - - switch typ { - default: - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - - case recordTypeAlert: - if len(data) != 2 { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - if alert(data[1]) == alertCloseNotify { - return c.in.setErrorLocked(io.EOF) - } - if c.vers == VersionTLS13 { - return c.in.setErrorLocked(&net.OpError{Op: "remote error", Err: alert(data[1])}) - } - switch data[0] { - case alertLevelWarning: - // Drop the record on the floor and retry. - return c.retryReadRecord(expectChangeCipherSpec) - case alertLevelError: - return c.in.setErrorLocked(&net.OpError{Op: "remote error", Err: alert(data[1])}) - default: - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - - case recordTypeChangeCipherSpec: - if len(data) != 1 || data[0] != 1 { - return c.in.setErrorLocked(c.sendAlert(alertDecodeError)) - } - // Handshake messages are not allowed to fragment across the CCS. - if c.hand.Len() > 0 { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - // In TLS 1.3, change_cipher_spec records are ignored until the - // Finished. See RFC 8446, Appendix D.4. Note that according to Section - // 5, a server can send a ChangeCipherSpec before its ServerHello, when - // c.vers is still unset. That's not useful though and suspicious if the - // server then selects a lower protocol version, so don't allow that. - if c.vers == VersionTLS13 { - return c.retryReadRecord(expectChangeCipherSpec) - } - if !expectChangeCipherSpec { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - if err := c.in.changeCipherSpec(); err != nil { - return c.in.setErrorLocked(c.sendAlert(err.(alert))) - } - - case recordTypeApplicationData: - if !handshakeComplete || expectChangeCipherSpec { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - // Some OpenSSL servers send empty records in order to randomize the - // CBC IV. Ignore a limited number of empty records. - if len(data) == 0 { - return c.retryReadRecord(expectChangeCipherSpec) - } - // Note that data is owned by c.rawInput, following the Next call above, - // to avoid copying the plaintext. This is safe because c.rawInput is - // not read from or written to until c.input is drained. - c.input.Reset(data) - - case recordTypeHandshake: - if len(data) == 0 || expectChangeCipherSpec { - return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - c.hand.Write(data) - } - - return nil -} - -// retryReadRecord recurs into readRecordOrCCS to drop a non-advancing record, like -// a warning alert, empty application_data, or a change_cipher_spec in TLS 1.3. -func (c *Conn) retryReadRecord(expectChangeCipherSpec bool) error { - c.retryCount++ - if c.retryCount > maxUselessRecords { - c.sendAlert(alertUnexpectedMessage) - return c.in.setErrorLocked(errors.New("tls: too many ignored records")) - } - return c.readRecordOrCCS(expectChangeCipherSpec) -} - -// atLeastReader reads from R, stopping with EOF once at least N bytes have been -// read. It is different from an io.LimitedReader in that it doesn't cut short -// the last Read call, and in that it considers an early EOF an error. -type atLeastReader struct { - R io.Reader - N int64 -} - -func (r *atLeastReader) Read(p []byte) (int, error) { - if r.N <= 0 { - return 0, io.EOF - } - n, err := r.R.Read(p) - r.N -= int64(n) // won't underflow unless len(p) >= n > 9223372036854775809 - if r.N > 0 && err == io.EOF { - return n, io.ErrUnexpectedEOF - } - if r.N <= 0 && err == nil { - return n, io.EOF - } - return n, err -} - -// readFromUntil reads from r into c.rawInput until c.rawInput contains -// at least n bytes or else returns an error. -func (c *Conn) readFromUntil(r io.Reader, n int) error { - if c.rawInput.Len() >= n { - return nil - } - needs := n - c.rawInput.Len() - // There might be extra input waiting on the wire. Make a best effort - // attempt to fetch it so that it can be used in (*Conn).Read to - // "predict" closeNotify alerts. - c.rawInput.Grow(needs + bytes.MinRead) - _, err := c.rawInput.ReadFrom(&atLeastReader{r, int64(needs)}) - return err -} - -// sendAlert sends a TLS alert message. -func (c *Conn) sendAlertLocked(err alert) error { - switch err { - case alertNoRenegotiation, alertCloseNotify: - c.tmp[0] = alertLevelWarning - default: - c.tmp[0] = alertLevelError - } - c.tmp[1] = byte(err) - - _, writeErr := c.writeRecordLocked(recordTypeAlert, c.tmp[0:2]) - if err == alertCloseNotify { - // closeNotify is a special case in that it isn't an error. - return writeErr - } - - return c.out.setErrorLocked(&net.OpError{Op: "local error", Err: err}) -} - -// sendAlert sends a TLS alert message. -func (c *Conn) sendAlert(err alert) error { - if c.extraConfig != nil && c.extraConfig.AlternativeRecordLayer != nil { - c.extraConfig.AlternativeRecordLayer.SendAlert(uint8(err)) - return &net.OpError{Op: "local error", Err: err} - } - - c.out.Lock() - defer c.out.Unlock() - return c.sendAlertLocked(err) -} - -const ( - // tcpMSSEstimate is a conservative estimate of the TCP maximum segment - // size (MSS). A constant is used, rather than querying the kernel for - // the actual MSS, to avoid complexity. The value here is the IPv6 - // minimum MTU (1280 bytes) minus the overhead of an IPv6 header (40 - // bytes) and a TCP header with timestamps (32 bytes). - tcpMSSEstimate = 1208 - - // recordSizeBoostThreshold is the number of bytes of application data - // sent after which the TLS record size will be increased to the - // maximum. - recordSizeBoostThreshold = 128 * 1024 -) - -// maxPayloadSizeForWrite returns the maximum TLS payload size to use for the -// next application data record. There is the following trade-off: -// -// - For latency-sensitive applications, such as web browsing, each TLS -// record should fit in one TCP segment. -// - For throughput-sensitive applications, such as large file transfers, -// larger TLS records better amortize framing and encryption overheads. -// -// A simple heuristic that works well in practice is to use small records for -// the first 1MB of data, then use larger records for subsequent data, and -// reset back to smaller records after the connection becomes idle. See "High -// Performance Web Networking", Chapter 4, or: -// https://www.igvita.com/2013/10/24/optimizing-tls-record-size-and-buffering-latency/ -// -// In the interests of simplicity and determinism, this code does not attempt -// to reset the record size once the connection is idle, however. -func (c *Conn) maxPayloadSizeForWrite(typ recordType) int { - if c.config.DynamicRecordSizingDisabled || typ != recordTypeApplicationData { - return maxPlaintext - } - - if c.bytesSent >= recordSizeBoostThreshold { - return maxPlaintext - } - - // Subtract TLS overheads to get the maximum payload size. - payloadBytes := tcpMSSEstimate - recordHeaderLen - c.out.explicitNonceLen() - if c.out.cipher != nil { - switch ciph := c.out.cipher.(type) { - case cipher.Stream: - payloadBytes -= c.out.mac.Size() - case cipher.AEAD: - payloadBytes -= ciph.Overhead() - case cbcMode: - blockSize := ciph.BlockSize() - // The payload must fit in a multiple of blockSize, with - // room for at least one padding byte. - payloadBytes = (payloadBytes & ^(blockSize - 1)) - 1 - // The MAC is appended before padding so affects the - // payload size directly. - payloadBytes -= c.out.mac.Size() - default: - panic("unknown cipher type") - } - } - if c.vers == VersionTLS13 { - payloadBytes-- // encrypted ContentType - } - - // Allow packet growth in arithmetic progression up to max. - pkt := c.packetsSent - c.packetsSent++ - if pkt > 1000 { - return maxPlaintext // avoid overflow in multiply below - } - - n := payloadBytes * int(pkt+1) - if n > maxPlaintext { - n = maxPlaintext - } - return n -} - -func (c *Conn) write(data []byte) (int, error) { - if c.buffering { - c.sendBuf = append(c.sendBuf, data...) - return len(data), nil - } - - n, err := c.conn.Write(data) - c.bytesSent += int64(n) - return n, err -} - -func (c *Conn) flush() (int, error) { - if len(c.sendBuf) == 0 { - return 0, nil - } - - n, err := c.conn.Write(c.sendBuf) - c.bytesSent += int64(n) - c.sendBuf = nil - c.buffering = false - return n, err -} - -// outBufPool pools the record-sized scratch buffers used by writeRecordLocked. -var outBufPool = sync.Pool{ - New: func() any { - return new([]byte) - }, -} - -// writeRecordLocked writes a TLS record with the given type and payload to the -// connection and updates the record layer state. -func (c *Conn) writeRecordLocked(typ recordType, data []byte) (int, error) { - outBufPtr := outBufPool.Get().(*[]byte) - outBuf := *outBufPtr - defer func() { - // You might be tempted to simplify this by just passing &outBuf to Put, - // but that would make the local copy of the outBuf slice header escape - // to the heap, causing an allocation. Instead, we keep around the - // pointer to the slice header returned by Get, which is already on the - // heap, and overwrite and return that. - *outBufPtr = outBuf - outBufPool.Put(outBufPtr) - }() - - var n int - for len(data) > 0 { - m := len(data) - if maxPayload := c.maxPayloadSizeForWrite(typ); m > maxPayload { - m = maxPayload - } - - _, outBuf = sliceForAppend(outBuf[:0], recordHeaderLen) - outBuf[0] = byte(typ) - vers := c.vers - if vers == 0 { - // Some TLS servers fail if the record version is - // greater than TLS 1.0 for the initial ClientHello. - vers = VersionTLS10 - } else if vers == VersionTLS13 { - // TLS 1.3 froze the record layer version to 1.2. - // See RFC 8446, Section 5.1. - vers = VersionTLS12 - } - outBuf[1] = byte(vers >> 8) - outBuf[2] = byte(vers) - outBuf[3] = byte(m >> 8) - outBuf[4] = byte(m) - - var err error - outBuf, err = c.out.encrypt(outBuf, data[:m], c.config.rand()) - if err != nil { - return n, err - } - if _, err := c.write(outBuf); err != nil { - return n, err - } - n += m - data = data[m:] - } - - if typ == recordTypeChangeCipherSpec && c.vers != VersionTLS13 { - if err := c.out.changeCipherSpec(); err != nil { - return n, c.sendAlertLocked(err.(alert)) - } - } - - return n, nil -} - -// writeRecord writes a TLS record with the given type and payload to the -// connection and updates the record layer state. -func (c *Conn) writeRecord(typ recordType, data []byte) (int, error) { - if c.extraConfig != nil && c.extraConfig.AlternativeRecordLayer != nil { - if typ == recordTypeChangeCipherSpec { - return len(data), nil - } - return c.extraConfig.AlternativeRecordLayer.WriteRecord(data) - } - - c.out.Lock() - defer c.out.Unlock() - - return c.writeRecordLocked(typ, data) -} - -// readHandshake reads the next handshake message from -// the record layer. -func (c *Conn) readHandshake() (any, error) { - var data []byte - if c.extraConfig != nil && c.extraConfig.AlternativeRecordLayer != nil { - var err error - data, err = c.extraConfig.AlternativeRecordLayer.ReadHandshakeMessage() - if err != nil { - return nil, err - } - } else { - for c.hand.Len() < 4 { - if err := c.readRecord(); err != nil { - return nil, err - } - } - - data = c.hand.Bytes() - n := int(data[1])<<16 | int(data[2])<<8 | int(data[3]) - if n > maxHandshake { - c.sendAlertLocked(alertInternalError) - return nil, c.in.setErrorLocked(fmt.Errorf("tls: handshake message of length %d bytes exceeds maximum of %d bytes", n, maxHandshake)) - } - for c.hand.Len() < 4+n { - if err := c.readRecord(); err != nil { - return nil, err - } - } - data = c.hand.Next(4 + n) - } - var m handshakeMessage - switch data[0] { - case typeHelloRequest: - m = new(helloRequestMsg) - case typeClientHello: - m = new(clientHelloMsg) - case typeServerHello: - m = new(serverHelloMsg) - case typeNewSessionTicket: - if c.vers == VersionTLS13 { - m = new(newSessionTicketMsgTLS13) - } else { - m = new(newSessionTicketMsg) - } - case typeCertificate: - if c.vers == VersionTLS13 { - m = new(certificateMsgTLS13) - } else { - m = new(certificateMsg) - } - case typeCertificateRequest: - if c.vers == VersionTLS13 { - m = new(certificateRequestMsgTLS13) - } else { - m = &certificateRequestMsg{ - hasSignatureAlgorithm: c.vers >= VersionTLS12, - } - } - case typeCertificateStatus: - m = new(certificateStatusMsg) - case typeServerKeyExchange: - m = new(serverKeyExchangeMsg) - case typeServerHelloDone: - m = new(serverHelloDoneMsg) - case typeClientKeyExchange: - m = new(clientKeyExchangeMsg) - case typeCertificateVerify: - m = &certificateVerifyMsg{ - hasSignatureAlgorithm: c.vers >= VersionTLS12, - } - case typeFinished: - m = new(finishedMsg) - case typeEncryptedExtensions: - m = new(encryptedExtensionsMsg) - case typeEndOfEarlyData: - m = new(endOfEarlyDataMsg) - case typeKeyUpdate: - m = new(keyUpdateMsg) - default: - return nil, c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - - // The handshake message unmarshalers - // expect to be able to keep references to data, - // so pass in a fresh copy that won't be overwritten. - data = append([]byte(nil), data...) - - if !m.unmarshal(data) { - return nil, c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) - } - return m, nil -} - -var ( - errShutdown = errors.New("tls: protocol is shutdown") -) - -// Write writes data to the connection. -// -// As Write calls Handshake, in order to prevent indefinite blocking a deadline -// must be set for both Read and Write before Write is called when the handshake -// has not yet completed. See SetDeadline, SetReadDeadline, and -// SetWriteDeadline. -func (c *Conn) Write(b []byte) (int, error) { - // interlock with Close below - for { - x := atomic.LoadInt32(&c.activeCall) - if x&1 != 0 { - return 0, net.ErrClosed - } - if atomic.CompareAndSwapInt32(&c.activeCall, x, x+2) { - break - } - } - defer atomic.AddInt32(&c.activeCall, -2) - - if err := c.Handshake(); err != nil { - return 0, err - } - - c.out.Lock() - defer c.out.Unlock() - - if err := c.out.err; err != nil { - return 0, err - } - - if !c.handshakeComplete() { - return 0, alertInternalError - } - - if c.closeNotifySent { - return 0, errShutdown - } - - // TLS 1.0 is susceptible to a chosen-plaintext - // attack when using block mode ciphers due to predictable IVs. - // This can be prevented by splitting each Application Data - // record into two records, effectively randomizing the IV. - // - // https://www.openssl.org/~bodo/tls-cbc.txt - // https://bugzilla.mozilla.org/show_bug.cgi?id=665814 - // https://www.imperialviolet.org/2012/01/15/beastfollowup.html - - var m int - if len(b) > 1 && c.vers == VersionTLS10 { - if _, ok := c.out.cipher.(cipher.BlockMode); ok { - n, err := c.writeRecordLocked(recordTypeApplicationData, b[:1]) - if err != nil { - return n, c.out.setErrorLocked(err) - } - m, b = 1, b[1:] - } - } - - n, err := c.writeRecordLocked(recordTypeApplicationData, b) - return n + m, c.out.setErrorLocked(err) -} - -// handleRenegotiation processes a HelloRequest handshake message. -func (c *Conn) handleRenegotiation() error { - if c.vers == VersionTLS13 { - return errors.New("tls: internal error: unexpected renegotiation") - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - - helloReq, ok := msg.(*helloRequestMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(helloReq, msg) - } - - if !c.isClient { - return c.sendAlert(alertNoRenegotiation) - } - - switch c.config.Renegotiation { - case RenegotiateNever: - return c.sendAlert(alertNoRenegotiation) - case RenegotiateOnceAsClient: - if c.handshakes > 1 { - return c.sendAlert(alertNoRenegotiation) - } - case RenegotiateFreelyAsClient: - // Ok. - default: - c.sendAlert(alertInternalError) - return errors.New("tls: unknown Renegotiation value") - } - - c.handshakeMutex.Lock() - defer c.handshakeMutex.Unlock() - - atomic.StoreUint32(&c.handshakeStatus, 0) - if c.handshakeErr = c.clientHandshake(context.Background()); c.handshakeErr == nil { - c.handshakes++ - } - return c.handshakeErr -} - -func (c *Conn) HandlePostHandshakeMessage() error { - return c.handlePostHandshakeMessage() -} - -// handlePostHandshakeMessage processes a handshake message arrived after the -// handshake is complete. Up to TLS 1.2, it indicates the start of a renegotiation. -func (c *Conn) handlePostHandshakeMessage() error { - if c.vers != VersionTLS13 { - return c.handleRenegotiation() - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - - c.retryCount++ - if c.retryCount > maxUselessRecords { - c.sendAlert(alertUnexpectedMessage) - return c.in.setErrorLocked(errors.New("tls: too many non-advancing records")) - } - - switch msg := msg.(type) { - case *newSessionTicketMsgTLS13: - return c.handleNewSessionTicket(msg) - case *keyUpdateMsg: - return c.handleKeyUpdate(msg) - default: - c.sendAlert(alertUnexpectedMessage) - return fmt.Errorf("tls: received unexpected handshake message of type %T", msg) - } -} - -func (c *Conn) handleKeyUpdate(keyUpdate *keyUpdateMsg) error { - cipherSuite := cipherSuiteTLS13ByID(c.cipherSuite) - if cipherSuite == nil { - return c.in.setErrorLocked(c.sendAlert(alertInternalError)) - } - - newSecret := cipherSuite.nextTrafficSecret(c.in.trafficSecret) - c.in.setTrafficSecret(cipherSuite, newSecret) - - if keyUpdate.updateRequested { - c.out.Lock() - defer c.out.Unlock() - - msg := &keyUpdateMsg{} - _, err := c.writeRecordLocked(recordTypeHandshake, msg.marshal()) - if err != nil { - // Surface the error at the next write. - c.out.setErrorLocked(err) - return nil - } - - newSecret := cipherSuite.nextTrafficSecret(c.out.trafficSecret) - c.out.setTrafficSecret(cipherSuite, newSecret) - } - - return nil -} - -// Read reads data from the connection. -// -// As Read calls Handshake, in order to prevent indefinite blocking a deadline -// must be set for both Read and Write before Read is called when the handshake -// has not yet completed. See SetDeadline, SetReadDeadline, and -// SetWriteDeadline. -func (c *Conn) Read(b []byte) (int, error) { - if err := c.Handshake(); err != nil { - return 0, err - } - if len(b) == 0 { - // Put this after Handshake, in case people were calling - // Read(nil) for the side effect of the Handshake. - return 0, nil - } - - c.in.Lock() - defer c.in.Unlock() - - for c.input.Len() == 0 { - if err := c.readRecord(); err != nil { - return 0, err - } - for c.hand.Len() > 0 { - if err := c.handlePostHandshakeMessage(); err != nil { - return 0, err - } - } - } - - n, _ := c.input.Read(b) - - // If a close-notify alert is waiting, read it so that we can return (n, - // EOF) instead of (n, nil), to signal to the HTTP response reading - // goroutine that the connection is now closed. This eliminates a race - // where the HTTP response reading goroutine would otherwise not observe - // the EOF until its next read, by which time a client goroutine might - // have already tried to reuse the HTTP connection for a new request. - // See https://golang.org/cl/76400046 and https://golang.org/issue/3514 - if n != 0 && c.input.Len() == 0 && c.rawInput.Len() > 0 && - recordType(c.rawInput.Bytes()[0]) == recordTypeAlert { - if err := c.readRecord(); err != nil { - return n, err // will be io.EOF on closeNotify - } - } - - return n, nil -} - -// Close closes the connection. -func (c *Conn) Close() error { - // Interlock with Conn.Write above. - var x int32 - for { - x = atomic.LoadInt32(&c.activeCall) - if x&1 != 0 { - return net.ErrClosed - } - if atomic.CompareAndSwapInt32(&c.activeCall, x, x|1) { - break - } - } - if x != 0 { - // io.Writer and io.Closer should not be used concurrently. - // If Close is called while a Write is currently in-flight, - // interpret that as a sign that this Close is really just - // being used to break the Write and/or clean up resources and - // avoid sending the alertCloseNotify, which may block - // waiting on handshakeMutex or the c.out mutex. - return c.conn.Close() - } - - var alertErr error - if c.handshakeComplete() { - if err := c.closeNotify(); err != nil { - alertErr = fmt.Errorf("tls: failed to send closeNotify alert (but connection was closed anyway): %w", err) - } - } - - if err := c.conn.Close(); err != nil { - return err - } - return alertErr -} - -var errEarlyCloseWrite = errors.New("tls: CloseWrite called before handshake complete") - -// CloseWrite shuts down the writing side of the connection. It should only be -// called once the handshake has completed and does not call CloseWrite on the -// underlying connection. Most callers should just use Close. -func (c *Conn) CloseWrite() error { - if !c.handshakeComplete() { - return errEarlyCloseWrite - } - - return c.closeNotify() -} - -func (c *Conn) closeNotify() error { - c.out.Lock() - defer c.out.Unlock() - - if !c.closeNotifySent { - // Set a Write Deadline to prevent possibly blocking forever. - c.SetWriteDeadline(time.Now().Add(time.Second * 5)) - c.closeNotifyErr = c.sendAlertLocked(alertCloseNotify) - c.closeNotifySent = true - // Any subsequent writes will fail. - c.SetWriteDeadline(time.Now()) - } - return c.closeNotifyErr -} - -// Handshake runs the client or server handshake -// protocol if it has not yet been run. -// -// Most uses of this package need not call Handshake explicitly: the -// first Read or Write will call it automatically. -// -// For control over canceling or setting a timeout on a handshake, use -// HandshakeContext or the Dialer's DialContext method instead. -func (c *Conn) Handshake() error { - return c.HandshakeContext(context.Background()) -} - -// HandshakeContext runs the client or server handshake -// protocol if it has not yet been run. -// -// The provided Context must be non-nil. If the context is canceled before -// the handshake is complete, the handshake is interrupted and an error is returned. -// Once the handshake has completed, cancellation of the context will not affect the -// connection. -// -// Most uses of this package need not call HandshakeContext explicitly: the -// first Read or Write will call it automatically. -func (c *Conn) HandshakeContext(ctx context.Context) error { - // Delegate to unexported method for named return - // without confusing documented signature. - return c.handshakeContext(ctx) -} - -func (c *Conn) handshakeContext(ctx context.Context) (ret error) { - // Fast sync/atomic-based exit if there is no handshake in flight and the - // last one succeeded without an error. Avoids the expensive context setup - // and mutex for most Read and Write calls. - if c.handshakeComplete() { - return nil - } - - handshakeCtx, cancel := context.WithCancel(ctx) - // Note: defer this before starting the "interrupter" goroutine - // so that we can tell the difference between the input being canceled and - // this cancellation. In the former case, we need to close the connection. - defer cancel() - - // Start the "interrupter" goroutine, if this context might be canceled. - // (The background context cannot). - // - // The interrupter goroutine waits for the input context to be done and - // closes the connection if this happens before the function returns. - if ctx.Done() != nil { - done := make(chan struct{}) - interruptRes := make(chan error, 1) - defer func() { - close(done) - if ctxErr := <-interruptRes; ctxErr != nil { - // Return context error to user. - ret = ctxErr - } - }() - go func() { - select { - case <-handshakeCtx.Done(): - // Close the connection, discarding the error - _ = c.conn.Close() - interruptRes <- handshakeCtx.Err() - case <-done: - interruptRes <- nil - } - }() - } - - c.handshakeMutex.Lock() - defer c.handshakeMutex.Unlock() - - if err := c.handshakeErr; err != nil { - return err - } - if c.handshakeComplete() { - return nil - } - - c.in.Lock() - defer c.in.Unlock() - - c.handshakeErr = c.handshakeFn(handshakeCtx) - if c.handshakeErr == nil { - c.handshakes++ - } else { - // If an error occurred during the handshake try to flush the - // alert that might be left in the buffer. - c.flush() - } - - if c.handshakeErr == nil && !c.handshakeComplete() { - c.handshakeErr = errors.New("tls: internal error: handshake should have had a result") - } - if c.handshakeErr != nil && c.handshakeComplete() { - panic("tls: internal error: handshake returned an error but is marked successful") - } - - return c.handshakeErr -} - -// ConnectionState returns basic TLS details about the connection. -func (c *Conn) ConnectionState() ConnectionState { - c.connStateMutex.Lock() - defer c.connStateMutex.Unlock() - return c.connState.ConnectionState -} - -// ConnectionStateWith0RTT returns basic TLS details (incl. 0-RTT status) about the connection. -func (c *Conn) ConnectionStateWith0RTT() ConnectionStateWith0RTT { - c.connStateMutex.Lock() - defer c.connStateMutex.Unlock() - return c.connState -} - -func (c *Conn) connectionStateLocked() ConnectionState { - var state connectionState - state.HandshakeComplete = c.handshakeComplete() - state.Version = c.vers - state.NegotiatedProtocol = c.clientProtocol - state.DidResume = c.didResume - state.NegotiatedProtocolIsMutual = true - state.ServerName = c.serverName - state.CipherSuite = c.cipherSuite - state.PeerCertificates = c.peerCertificates - state.VerifiedChains = c.verifiedChains - state.SignedCertificateTimestamps = c.scts - state.OCSPResponse = c.ocspResponse - if !c.didResume && c.vers != VersionTLS13 { - if c.clientFinishedIsFirst { - state.TLSUnique = c.clientFinished[:] - } else { - state.TLSUnique = c.serverFinished[:] - } - } - if c.config.Renegotiation != RenegotiateNever { - state.ekm = noExportedKeyingMaterial - } else { - state.ekm = c.ekm - } - return toConnectionState(state) -} - -func (c *Conn) updateConnectionState() { - c.connStateMutex.Lock() - defer c.connStateMutex.Unlock() - c.connState = ConnectionStateWith0RTT{ - Used0RTT: c.used0RTT, - ConnectionState: c.connectionStateLocked(), - } -} - -// OCSPResponse returns the stapled OCSP response from the TLS server, if -// any. (Only valid for client connections.) -func (c *Conn) OCSPResponse() []byte { - c.handshakeMutex.Lock() - defer c.handshakeMutex.Unlock() - - return c.ocspResponse -} - -// VerifyHostname checks that the peer certificate chain is valid for -// connecting to host. If so, it returns nil; if not, it returns an error -// describing the problem. -func (c *Conn) VerifyHostname(host string) error { - c.handshakeMutex.Lock() - defer c.handshakeMutex.Unlock() - if !c.isClient { - return errors.New("tls: VerifyHostname called on TLS server connection") - } - if !c.handshakeComplete() { - return errors.New("tls: handshake has not yet been performed") - } - if len(c.verifiedChains) == 0 { - return errors.New("tls: handshake did not verify certificate chain") - } - return c.peerCertificates[0].VerifyHostname(host) -} - -func (c *Conn) handshakeComplete() bool { - return atomic.LoadUint32(&c.handshakeStatus) == 1 -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/cpu.go b/vendor/github.com/quic-go/qtls-go1-19/cpu.go deleted file mode 100644 index 1219450879..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/cpu.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:build !js -// +build !js - -package qtls - -import ( - "runtime" - - "golang.org/x/sys/cpu" -) - -var ( - hasGCMAsmAMD64 = cpu.X86.HasAES && cpu.X86.HasPCLMULQDQ - hasGCMAsmARM64 = cpu.ARM64.HasAES && cpu.ARM64.HasPMULL - // Keep in sync with crypto/aes/cipher_s390x.go. - hasGCMAsmS390X = cpu.S390X.HasAES && cpu.S390X.HasAESCBC && cpu.S390X.HasAESCTR && - (cpu.S390X.HasGHASH || cpu.S390X.HasAESGCM) - - hasAESGCMHardwareSupport = runtime.GOARCH == "amd64" && hasGCMAsmAMD64 || - runtime.GOARCH == "arm64" && hasGCMAsmARM64 || - runtime.GOARCH == "s390x" && hasGCMAsmS390X -) diff --git a/vendor/github.com/quic-go/qtls-go1-19/cpu_other.go b/vendor/github.com/quic-go/qtls-go1-19/cpu_other.go deleted file mode 100644 index 33f7d21942..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/cpu_other.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build js -// +build js - -package qtls - -var ( - hasGCMAsmAMD64 = false - hasGCMAsmARM64 = false - hasGCMAsmS390X = false - - hasAESGCMHardwareSupport = false -) diff --git a/vendor/github.com/quic-go/qtls-go1-19/handshake_client.go b/vendor/github.com/quic-go/qtls-go1-19/handshake_client.go deleted file mode 100644 index d373b88684..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/handshake_client.go +++ /dev/null @@ -1,1118 +0,0 @@ -// Copyright 2009 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 qtls - -import ( - "bytes" - "context" - "crypto" - "crypto/ecdsa" - "crypto/ed25519" - "crypto/rsa" - "crypto/subtle" - "crypto/x509" - "errors" - "fmt" - "hash" - "io" - "net" - "strings" - "sync/atomic" - "time" - - "golang.org/x/crypto/cryptobyte" -) - -const clientSessionStateVersion = 1 - -type clientHandshakeState struct { - c *Conn - ctx context.Context - serverHello *serverHelloMsg - hello *clientHelloMsg - suite *cipherSuite - finishedHash finishedHash - masterSecret []byte - session *clientSessionState -} - -var testingOnlyForceClientHelloSignatureAlgorithms []SignatureScheme - -func (c *Conn) makeClientHello() (*clientHelloMsg, ecdheParameters, error) { - config := c.config - if len(config.ServerName) == 0 && !config.InsecureSkipVerify { - return nil, nil, errors.New("tls: either ServerName or InsecureSkipVerify must be specified in the tls.Config") - } - - nextProtosLength := 0 - for _, proto := range config.NextProtos { - if l := len(proto); l == 0 || l > 255 { - return nil, nil, errors.New("tls: invalid NextProtos value") - } else { - nextProtosLength += 1 + l - } - } - if nextProtosLength > 0xffff { - return nil, nil, errors.New("tls: NextProtos values too large") - } - - var supportedVersions []uint16 - var clientHelloVersion uint16 - if c.extraConfig.usesAlternativeRecordLayer() { - if config.maxSupportedVersion(roleClient) < VersionTLS13 { - return nil, nil, errors.New("tls: MaxVersion prevents QUIC from using TLS 1.3") - } - // Only offer TLS 1.3 when QUIC is used. - supportedVersions = []uint16{VersionTLS13} - clientHelloVersion = VersionTLS13 - } else { - supportedVersions = config.supportedVersions(roleClient) - if len(supportedVersions) == 0 { - return nil, nil, errors.New("tls: no supported versions satisfy MinVersion and MaxVersion") - } - clientHelloVersion = config.maxSupportedVersion(roleClient) - } - - // The version at the beginning of the ClientHello was capped at TLS 1.2 - // for compatibility reasons. The supported_versions extension is used - // to negotiate versions now. See RFC 8446, Section 4.2.1. - if clientHelloVersion > VersionTLS12 { - clientHelloVersion = VersionTLS12 - } - - hello := &clientHelloMsg{ - vers: clientHelloVersion, - compressionMethods: []uint8{compressionNone}, - random: make([]byte, 32), - ocspStapling: true, - scts: true, - serverName: hostnameInSNI(config.ServerName), - supportedCurves: config.curvePreferences(), - supportedPoints: []uint8{pointFormatUncompressed}, - secureRenegotiationSupported: true, - alpnProtocols: config.NextProtos, - supportedVersions: supportedVersions, - } - - if c.handshakes > 0 { - hello.secureRenegotiation = c.clientFinished[:] - } - - preferenceOrder := cipherSuitesPreferenceOrder - if !hasAESGCMHardwareSupport { - preferenceOrder = cipherSuitesPreferenceOrderNoAES - } - configCipherSuites := config.cipherSuites() - hello.cipherSuites = make([]uint16, 0, len(configCipherSuites)) - - for _, suiteId := range preferenceOrder { - suite := mutualCipherSuite(configCipherSuites, suiteId) - if suite == nil { - continue - } - // Don't advertise TLS 1.2-only cipher suites unless - // we're attempting TLS 1.2. - if hello.vers < VersionTLS12 && suite.flags&suiteTLS12 != 0 { - continue - } - hello.cipherSuites = append(hello.cipherSuites, suiteId) - } - - _, err := io.ReadFull(config.rand(), hello.random) - if err != nil { - return nil, nil, errors.New("tls: short read from Rand: " + err.Error()) - } - - // A random session ID is used to detect when the server accepted a ticket - // and is resuming a session (see RFC 5077). In TLS 1.3, it's always set as - // a compatibility measure (see RFC 8446, Section 4.1.2). - if c.extraConfig == nil || c.extraConfig.AlternativeRecordLayer == nil { - hello.sessionId = make([]byte, 32) - if _, err := io.ReadFull(config.rand(), hello.sessionId); err != nil { - return nil, nil, errors.New("tls: short read from Rand: " + err.Error()) - } - } - - if hello.vers >= VersionTLS12 { - hello.supportedSignatureAlgorithms = supportedSignatureAlgorithms() - } - if testingOnlyForceClientHelloSignatureAlgorithms != nil { - hello.supportedSignatureAlgorithms = testingOnlyForceClientHelloSignatureAlgorithms - } - - var params ecdheParameters - if hello.supportedVersions[0] == VersionTLS13 { - var suites []uint16 - for _, suiteID := range configCipherSuites { - for _, suite := range cipherSuitesTLS13 { - if suite.id == suiteID { - suites = append(suites, suiteID) - } - } - } - if len(suites) > 0 { - hello.cipherSuites = suites - } else { - if hasAESGCMHardwareSupport { - hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13...) - } else { - hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13NoAES...) - } - } - - curveID := config.curvePreferences()[0] - if _, ok := curveForCurveID(curveID); curveID != X25519 && !ok { - return nil, nil, errors.New("tls: CurvePreferences includes unsupported curve") - } - params, err = generateECDHEParameters(config.rand(), curveID) - if err != nil { - return nil, nil, err - } - hello.keyShares = []keyShare{{group: curveID, data: params.PublicKey()}} - } - - if hello.supportedVersions[0] == VersionTLS13 && c.extraConfig != nil && c.extraConfig.GetExtensions != nil { - hello.additionalExtensions = c.extraConfig.GetExtensions(typeClientHello) - } - - return hello, params, nil -} - -func (c *Conn) clientHandshake(ctx context.Context) (err error) { - if c.config == nil { - c.config = fromConfig(defaultConfig()) - } - c.setAlternativeRecordLayer() - - // This may be a renegotiation handshake, in which case some fields - // need to be reset. - c.didResume = false - - hello, ecdheParams, err := c.makeClientHello() - if err != nil { - return err - } - c.serverName = hello.serverName - - cacheKey, session, earlySecret, binderKey := c.loadSession(hello) - if cacheKey != "" && session != nil { - var deletedTicket bool - if session.vers == VersionTLS13 && hello.earlyData && c.extraConfig != nil && c.extraConfig.Enable0RTT { - // don't reuse a session ticket that enabled 0-RTT - c.config.ClientSessionCache.Put(cacheKey, nil) - deletedTicket = true - - if suite := cipherSuiteTLS13ByID(session.cipherSuite); suite != nil { - h := suite.hash.New() - h.Write(hello.marshal()) - clientEarlySecret := suite.deriveSecret(earlySecret, "c e traffic", h) - c.out.exportKey(Encryption0RTT, suite, clientEarlySecret) - if err := c.config.writeKeyLog(keyLogLabelEarlyTraffic, hello.random, clientEarlySecret); err != nil { - c.sendAlert(alertInternalError) - return err - } - } - } - if !deletedTicket { - defer func() { - // If we got a handshake failure when resuming a session, throw away - // the session ticket. See RFC 5077, Section 3.2. - // - // RFC 8446 makes no mention of dropping tickets on failure, but it - // does require servers to abort on invalid binders, so we need to - // delete tickets to recover from a corrupted PSK. - if err != nil { - c.config.ClientSessionCache.Put(cacheKey, nil) - } - }() - } - } - - if _, err := c.writeRecord(recordTypeHandshake, hello.marshal()); err != nil { - return err - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - - serverHello, ok := msg.(*serverHelloMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(serverHello, msg) - } - - if err := c.pickTLSVersion(serverHello); err != nil { - return err - } - - // If we are negotiating a protocol version that's lower than what we - // support, check for the server downgrade canaries. - // See RFC 8446, Section 4.1.3. - maxVers := c.config.maxSupportedVersion(roleClient) - tls12Downgrade := string(serverHello.random[24:]) == downgradeCanaryTLS12 - tls11Downgrade := string(serverHello.random[24:]) == downgradeCanaryTLS11 - if maxVers == VersionTLS13 && c.vers <= VersionTLS12 && (tls12Downgrade || tls11Downgrade) || - maxVers == VersionTLS12 && c.vers <= VersionTLS11 && tls11Downgrade { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: downgrade attempt detected, possibly due to a MitM attack or a broken middlebox") - } - - if c.vers == VersionTLS13 { - hs := &clientHandshakeStateTLS13{ - c: c, - ctx: ctx, - serverHello: serverHello, - hello: hello, - ecdheParams: ecdheParams, - session: session, - earlySecret: earlySecret, - binderKey: binderKey, - } - - // In TLS 1.3, session tickets are delivered after the handshake. - return hs.handshake() - } - - hs := &clientHandshakeState{ - c: c, - ctx: ctx, - serverHello: serverHello, - hello: hello, - session: session, - } - - if err := hs.handshake(); err != nil { - return err - } - - // If we had a successful handshake and hs.session is different from - // the one already cached - cache a new one. - if cacheKey != "" && hs.session != nil && session != hs.session { - c.config.ClientSessionCache.Put(cacheKey, toClientSessionState(hs.session)) - } - - c.updateConnectionState() - return nil -} - -// extract the app data saved in the session.nonce, -// and set the session.nonce to the actual nonce value -func (c *Conn) decodeSessionState(session *clientSessionState) (uint32 /* max early data */, []byte /* app data */, bool /* ok */) { - s := cryptobyte.String(session.nonce) - var version uint16 - if !s.ReadUint16(&version) { - return 0, nil, false - } - if version != clientSessionStateVersion { - return 0, nil, false - } - var maxEarlyData uint32 - if !s.ReadUint32(&maxEarlyData) { - return 0, nil, false - } - var appData []byte - if !readUint16LengthPrefixed(&s, &appData) { - return 0, nil, false - } - var nonce []byte - if !readUint16LengthPrefixed(&s, &nonce) { - return 0, nil, false - } - session.nonce = nonce - return maxEarlyData, appData, true -} - -func (c *Conn) loadSession(hello *clientHelloMsg) (cacheKey string, - session *clientSessionState, earlySecret, binderKey []byte) { - if c.config.SessionTicketsDisabled || c.config.ClientSessionCache == nil { - return "", nil, nil, nil - } - - hello.ticketSupported = true - - if hello.supportedVersions[0] == VersionTLS13 { - // Require DHE on resumption as it guarantees forward secrecy against - // compromise of the session ticket key. See RFC 8446, Section 4.2.9. - hello.pskModes = []uint8{pskModeDHE} - } - - // Session resumption is not allowed if renegotiating because - // renegotiation is primarily used to allow a client to send a client - // certificate, which would be skipped if session resumption occurred. - if c.handshakes != 0 { - return "", nil, nil, nil - } - - // Try to resume a previously negotiated TLS session, if available. - cacheKey = clientSessionCacheKey(c.conn.RemoteAddr(), c.config) - sess, ok := c.config.ClientSessionCache.Get(cacheKey) - if !ok || sess == nil { - return cacheKey, nil, nil, nil - } - session = fromClientSessionState(sess) - - var appData []byte - var maxEarlyData uint32 - if session.vers == VersionTLS13 { - var ok bool - maxEarlyData, appData, ok = c.decodeSessionState(session) - if !ok { // delete it, if parsing failed - c.config.ClientSessionCache.Put(cacheKey, nil) - return cacheKey, nil, nil, nil - } - } - - // Check that version used for the previous session is still valid. - versOk := false - for _, v := range hello.supportedVersions { - if v == session.vers { - versOk = true - break - } - } - if !versOk { - return cacheKey, nil, nil, nil - } - - // Check that the cached server certificate is not expired, and that it's - // valid for the ServerName. This should be ensured by the cache key, but - // protect the application from a faulty ClientSessionCache implementation. - if !c.config.InsecureSkipVerify { - if len(session.verifiedChains) == 0 { - // The original connection had InsecureSkipVerify, while this doesn't. - return cacheKey, nil, nil, nil - } - serverCert := session.serverCertificates[0] - if c.config.time().After(serverCert.NotAfter) { - // Expired certificate, delete the entry. - c.config.ClientSessionCache.Put(cacheKey, nil) - return cacheKey, nil, nil, nil - } - if err := serverCert.VerifyHostname(c.config.ServerName); err != nil { - return cacheKey, nil, nil, nil - } - } - - if session.vers != VersionTLS13 { - // In TLS 1.2 the cipher suite must match the resumed session. Ensure we - // are still offering it. - if mutualCipherSuite(hello.cipherSuites, session.cipherSuite) == nil { - return cacheKey, nil, nil, nil - } - - hello.sessionTicket = session.sessionTicket - return - } - - // Check that the session ticket is not expired. - if c.config.time().After(session.useBy) { - c.config.ClientSessionCache.Put(cacheKey, nil) - return cacheKey, nil, nil, nil - } - - // In TLS 1.3 the KDF hash must match the resumed session. Ensure we - // offer at least one cipher suite with that hash. - cipherSuite := cipherSuiteTLS13ByID(session.cipherSuite) - if cipherSuite == nil { - return cacheKey, nil, nil, nil - } - cipherSuiteOk := false - for _, offeredID := range hello.cipherSuites { - offeredSuite := cipherSuiteTLS13ByID(offeredID) - if offeredSuite != nil && offeredSuite.hash == cipherSuite.hash { - cipherSuiteOk = true - break - } - } - if !cipherSuiteOk { - return cacheKey, nil, nil, nil - } - - // Set the pre_shared_key extension. See RFC 8446, Section 4.2.11.1. - ticketAge := uint32(c.config.time().Sub(session.receivedAt) / time.Millisecond) - identity := pskIdentity{ - label: session.sessionTicket, - obfuscatedTicketAge: ticketAge + session.ageAdd, - } - hello.pskIdentities = []pskIdentity{identity} - hello.pskBinders = [][]byte{make([]byte, cipherSuite.hash.Size())} - - // Compute the PSK binders. See RFC 8446, Section 4.2.11.2. - psk := cipherSuite.expandLabel(session.masterSecret, "resumption", - session.nonce, cipherSuite.hash.Size()) - earlySecret = cipherSuite.extract(psk, nil) - binderKey = cipherSuite.deriveSecret(earlySecret, resumptionBinderLabel, nil) - if c.extraConfig != nil { - hello.earlyData = c.extraConfig.Enable0RTT && maxEarlyData > 0 - } - transcript := cipherSuite.hash.New() - transcript.Write(hello.marshalWithoutBinders()) - pskBinders := [][]byte{cipherSuite.finishedHash(binderKey, transcript)} - hello.updateBinders(pskBinders) - - if session.vers == VersionTLS13 && c.extraConfig != nil && c.extraConfig.SetAppDataFromSessionState != nil { - c.extraConfig.SetAppDataFromSessionState(appData) - } - return -} - -func (c *Conn) pickTLSVersion(serverHello *serverHelloMsg) error { - peerVersion := serverHello.vers - if serverHello.supportedVersion != 0 { - peerVersion = serverHello.supportedVersion - } - - vers, ok := c.config.mutualVersion(roleClient, []uint16{peerVersion}) - if !ok { - c.sendAlert(alertProtocolVersion) - return fmt.Errorf("tls: server selected unsupported protocol version %x", peerVersion) - } - - c.vers = vers - c.haveVers = true - c.in.version = vers - c.out.version = vers - - return nil -} - -// Does the handshake, either a full one or resumes old session. Requires hs.c, -// hs.hello, hs.serverHello, and, optionally, hs.session to be set. -func (hs *clientHandshakeState) handshake() error { - c := hs.c - - isResume, err := hs.processServerHello() - if err != nil { - return err - } - - hs.finishedHash = newFinishedHash(c.vers, hs.suite) - - // No signatures of the handshake are needed in a resumption. - // Otherwise, in a full handshake, if we don't have any certificates - // configured then we will never send a CertificateVerify message and - // thus no signatures are needed in that case either. - if isResume || (len(c.config.Certificates) == 0 && c.config.GetClientCertificate == nil) { - hs.finishedHash.discardHandshakeBuffer() - } - - hs.finishedHash.Write(hs.hello.marshal()) - hs.finishedHash.Write(hs.serverHello.marshal()) - - c.buffering = true - c.didResume = isResume - if isResume { - if err := hs.establishKeys(); err != nil { - return err - } - if err := hs.readSessionTicket(); err != nil { - return err - } - if err := hs.readFinished(c.serverFinished[:]); err != nil { - return err - } - c.clientFinishedIsFirst = false - // Make sure the connection is still being verified whether or not this - // is a resumption. Resumptions currently don't reverify certificates so - // they don't call verifyServerCertificate. See Issue 31641. - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - if err := hs.sendFinished(c.clientFinished[:]); err != nil { - return err - } - if _, err := c.flush(); err != nil { - return err - } - } else { - if err := hs.doFullHandshake(); err != nil { - return err - } - if err := hs.establishKeys(); err != nil { - return err - } - if err := hs.sendFinished(c.clientFinished[:]); err != nil { - return err - } - if _, err := c.flush(); err != nil { - return err - } - c.clientFinishedIsFirst = true - if err := hs.readSessionTicket(); err != nil { - return err - } - if err := hs.readFinished(c.serverFinished[:]); err != nil { - return err - } - } - - c.ekm = ekmFromMasterSecret(c.vers, hs.suite, hs.masterSecret, hs.hello.random, hs.serverHello.random) - atomic.StoreUint32(&c.handshakeStatus, 1) - - return nil -} - -func (hs *clientHandshakeState) pickCipherSuite() error { - if hs.suite = mutualCipherSuite(hs.hello.cipherSuites, hs.serverHello.cipherSuite); hs.suite == nil { - hs.c.sendAlert(alertHandshakeFailure) - return errors.New("tls: server chose an unconfigured cipher suite") - } - - hs.c.cipherSuite = hs.suite.id - return nil -} - -func (hs *clientHandshakeState) doFullHandshake() error { - c := hs.c - - msg, err := c.readHandshake() - if err != nil { - return err - } - certMsg, ok := msg.(*certificateMsg) - if !ok || len(certMsg.certificates) == 0 { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certMsg, msg) - } - hs.finishedHash.Write(certMsg.marshal()) - - msg, err = c.readHandshake() - if err != nil { - return err - } - - cs, ok := msg.(*certificateStatusMsg) - if ok { - // RFC4366 on Certificate Status Request: - // The server MAY return a "certificate_status" message. - - if !hs.serverHello.ocspStapling { - // If a server returns a "CertificateStatus" message, then the - // server MUST have included an extension of type "status_request" - // with empty "extension_data" in the extended server hello. - - c.sendAlert(alertUnexpectedMessage) - return errors.New("tls: received unexpected CertificateStatus message") - } - hs.finishedHash.Write(cs.marshal()) - - c.ocspResponse = cs.response - - msg, err = c.readHandshake() - if err != nil { - return err - } - } - - if c.handshakes == 0 { - // If this is the first handshake on a connection, process and - // (optionally) verify the server's certificates. - if err := c.verifyServerCertificate(certMsg.certificates); err != nil { - return err - } - } else { - // This is a renegotiation handshake. We require that the - // server's identity (i.e. leaf certificate) is unchanged and - // thus any previous trust decision is still valid. - // - // See https://mitls.org/pages/attacks/3SHAKE for the - // motivation behind this requirement. - if !bytes.Equal(c.peerCertificates[0].Raw, certMsg.certificates[0]) { - c.sendAlert(alertBadCertificate) - return errors.New("tls: server's identity changed during renegotiation") - } - } - - keyAgreement := hs.suite.ka(c.vers) - - skx, ok := msg.(*serverKeyExchangeMsg) - if ok { - hs.finishedHash.Write(skx.marshal()) - err = keyAgreement.processServerKeyExchange(c.config, hs.hello, hs.serverHello, c.peerCertificates[0], skx) - if err != nil { - c.sendAlert(alertUnexpectedMessage) - return err - } - - msg, err = c.readHandshake() - if err != nil { - return err - } - } - - var chainToSend *Certificate - var certRequested bool - certReq, ok := msg.(*certificateRequestMsg) - if ok { - certRequested = true - hs.finishedHash.Write(certReq.marshal()) - - cri := certificateRequestInfoFromMsg(hs.ctx, c.vers, certReq) - if chainToSend, err = c.getClientCertificate(cri); err != nil { - c.sendAlert(alertInternalError) - return err - } - - msg, err = c.readHandshake() - if err != nil { - return err - } - } - - shd, ok := msg.(*serverHelloDoneMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(shd, msg) - } - hs.finishedHash.Write(shd.marshal()) - - // If the server requested a certificate then we have to send a - // Certificate message, even if it's empty because we don't have a - // certificate to send. - if certRequested { - certMsg = new(certificateMsg) - certMsg.certificates = chainToSend.Certificate - hs.finishedHash.Write(certMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certMsg.marshal()); err != nil { - return err - } - } - - preMasterSecret, ckx, err := keyAgreement.generateClientKeyExchange(c.config, hs.hello, c.peerCertificates[0]) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - if ckx != nil { - hs.finishedHash.Write(ckx.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, ckx.marshal()); err != nil { - return err - } - } - - if chainToSend != nil && len(chainToSend.Certificate) > 0 { - certVerify := &certificateVerifyMsg{} - - key, ok := chainToSend.PrivateKey.(crypto.Signer) - if !ok { - c.sendAlert(alertInternalError) - return fmt.Errorf("tls: client certificate private key of type %T does not implement crypto.Signer", chainToSend.PrivateKey) - } - - var sigType uint8 - var sigHash crypto.Hash - if c.vers >= VersionTLS12 { - signatureAlgorithm, err := selectSignatureScheme(c.vers, chainToSend, certReq.supportedSignatureAlgorithms) - if err != nil { - c.sendAlert(alertIllegalParameter) - return err - } - sigType, sigHash, err = typeAndHashFromSignatureScheme(signatureAlgorithm) - if err != nil { - return c.sendAlert(alertInternalError) - } - certVerify.hasSignatureAlgorithm = true - certVerify.signatureAlgorithm = signatureAlgorithm - } else { - sigType, sigHash, err = legacyTypeAndHashFromPublicKey(key.Public()) - if err != nil { - c.sendAlert(alertIllegalParameter) - return err - } - } - - signed := hs.finishedHash.hashForClientCertificate(sigType, sigHash, hs.masterSecret) - signOpts := crypto.SignerOpts(sigHash) - if sigType == signatureRSAPSS { - signOpts = &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash, Hash: sigHash} - } - certVerify.signature, err = key.Sign(c.config.rand(), signed, signOpts) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - - hs.finishedHash.Write(certVerify.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certVerify.marshal()); err != nil { - return err - } - } - - hs.masterSecret = masterFromPreMasterSecret(c.vers, hs.suite, preMasterSecret, hs.hello.random, hs.serverHello.random) - if err := c.config.writeKeyLog(keyLogLabelTLS12, hs.hello.random, hs.masterSecret); err != nil { - c.sendAlert(alertInternalError) - return errors.New("tls: failed to write to key log: " + err.Error()) - } - - hs.finishedHash.discardHandshakeBuffer() - - return nil -} - -func (hs *clientHandshakeState) establishKeys() error { - c := hs.c - - clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV := - keysFromMasterSecret(c.vers, hs.suite, hs.masterSecret, hs.hello.random, hs.serverHello.random, hs.suite.macLen, hs.suite.keyLen, hs.suite.ivLen) - var clientCipher, serverCipher any - var clientHash, serverHash hash.Hash - if hs.suite.cipher != nil { - clientCipher = hs.suite.cipher(clientKey, clientIV, false /* not for reading */) - clientHash = hs.suite.mac(clientMAC) - serverCipher = hs.suite.cipher(serverKey, serverIV, true /* for reading */) - serverHash = hs.suite.mac(serverMAC) - } else { - clientCipher = hs.suite.aead(clientKey, clientIV) - serverCipher = hs.suite.aead(serverKey, serverIV) - } - - c.in.prepareCipherSpec(c.vers, serverCipher, serverHash) - c.out.prepareCipherSpec(c.vers, clientCipher, clientHash) - return nil -} - -func (hs *clientHandshakeState) serverResumedSession() bool { - // If the server responded with the same sessionId then it means the - // sessionTicket is being used to resume a TLS session. - return hs.session != nil && hs.hello.sessionId != nil && - bytes.Equal(hs.serverHello.sessionId, hs.hello.sessionId) -} - -func (hs *clientHandshakeState) processServerHello() (bool, error) { - c := hs.c - - if err := hs.pickCipherSuite(); err != nil { - return false, err - } - - if hs.serverHello.compressionMethod != compressionNone { - c.sendAlert(alertUnexpectedMessage) - return false, errors.New("tls: server selected unsupported compression format") - } - - if c.handshakes == 0 && hs.serverHello.secureRenegotiationSupported { - c.secureRenegotiation = true - if len(hs.serverHello.secureRenegotiation) != 0 { - c.sendAlert(alertHandshakeFailure) - return false, errors.New("tls: initial handshake had non-empty renegotiation extension") - } - } - - if c.handshakes > 0 && c.secureRenegotiation { - var expectedSecureRenegotiation [24]byte - copy(expectedSecureRenegotiation[:], c.clientFinished[:]) - copy(expectedSecureRenegotiation[12:], c.serverFinished[:]) - if !bytes.Equal(hs.serverHello.secureRenegotiation, expectedSecureRenegotiation[:]) { - c.sendAlert(alertHandshakeFailure) - return false, errors.New("tls: incorrect renegotiation extension contents") - } - } - - if err := checkALPN(hs.hello.alpnProtocols, hs.serverHello.alpnProtocol); err != nil { - c.sendAlert(alertUnsupportedExtension) - return false, err - } - c.clientProtocol = hs.serverHello.alpnProtocol - - c.scts = hs.serverHello.scts - - if !hs.serverResumedSession() { - return false, nil - } - - if hs.session.vers != c.vers { - c.sendAlert(alertHandshakeFailure) - return false, errors.New("tls: server resumed a session with a different version") - } - - if hs.session.cipherSuite != hs.suite.id { - c.sendAlert(alertHandshakeFailure) - return false, errors.New("tls: server resumed a session with a different cipher suite") - } - - // Restore masterSecret, peerCerts, and ocspResponse from previous state - hs.masterSecret = hs.session.masterSecret - c.peerCertificates = hs.session.serverCertificates - c.verifiedChains = hs.session.verifiedChains - c.ocspResponse = hs.session.ocspResponse - // Let the ServerHello SCTs override the session SCTs from the original - // connection, if any are provided - if len(c.scts) == 0 && len(hs.session.scts) != 0 { - c.scts = hs.session.scts - } - - return true, nil -} - -// checkALPN ensure that the server's choice of ALPN protocol is compatible with -// the protocols that we advertised in the Client Hello. -func checkALPN(clientProtos []string, serverProto string) error { - if serverProto == "" { - return nil - } - if len(clientProtos) == 0 { - return errors.New("tls: server advertised unrequested ALPN extension") - } - for _, proto := range clientProtos { - if proto == serverProto { - return nil - } - } - return errors.New("tls: server selected unadvertised ALPN protocol") -} - -func (hs *clientHandshakeState) readFinished(out []byte) error { - c := hs.c - - if err := c.readChangeCipherSpec(); err != nil { - return err - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - serverFinished, ok := msg.(*finishedMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(serverFinished, msg) - } - - verify := hs.finishedHash.serverSum(hs.masterSecret) - if len(verify) != len(serverFinished.verifyData) || - subtle.ConstantTimeCompare(verify, serverFinished.verifyData) != 1 { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: server's Finished message was incorrect") - } - hs.finishedHash.Write(serverFinished.marshal()) - copy(out, verify) - return nil -} - -func (hs *clientHandshakeState) readSessionTicket() error { - if !hs.serverHello.ticketSupported { - return nil - } - - c := hs.c - msg, err := c.readHandshake() - if err != nil { - return err - } - sessionTicketMsg, ok := msg.(*newSessionTicketMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(sessionTicketMsg, msg) - } - hs.finishedHash.Write(sessionTicketMsg.marshal()) - - hs.session = &clientSessionState{ - sessionTicket: sessionTicketMsg.ticket, - vers: c.vers, - cipherSuite: hs.suite.id, - masterSecret: hs.masterSecret, - serverCertificates: c.peerCertificates, - verifiedChains: c.verifiedChains, - receivedAt: c.config.time(), - ocspResponse: c.ocspResponse, - scts: c.scts, - } - - return nil -} - -func (hs *clientHandshakeState) sendFinished(out []byte) error { - c := hs.c - - if _, err := c.writeRecord(recordTypeChangeCipherSpec, []byte{1}); err != nil { - return err - } - - finished := new(finishedMsg) - finished.verifyData = hs.finishedHash.clientSum(hs.masterSecret) - hs.finishedHash.Write(finished.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, finished.marshal()); err != nil { - return err - } - copy(out, finished.verifyData) - return nil -} - -// verifyServerCertificate parses and verifies the provided chain, setting -// c.verifiedChains and c.peerCertificates or sending the appropriate alert. -func (c *Conn) verifyServerCertificate(certificates [][]byte) error { - certs := make([]*x509.Certificate, len(certificates)) - for i, asn1Data := range certificates { - cert, err := x509.ParseCertificate(asn1Data) - if err != nil { - c.sendAlert(alertBadCertificate) - return errors.New("tls: failed to parse certificate from server: " + err.Error()) - } - certs[i] = cert - } - - if !c.config.InsecureSkipVerify { - opts := x509.VerifyOptions{ - Roots: c.config.RootCAs, - CurrentTime: c.config.time(), - DNSName: c.config.ServerName, - Intermediates: x509.NewCertPool(), - } - - for _, cert := range certs[1:] { - opts.Intermediates.AddCert(cert) - } - var err error - c.verifiedChains, err = certs[0].Verify(opts) - if err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - switch certs[0].PublicKey.(type) { - case *rsa.PublicKey, *ecdsa.PublicKey, ed25519.PublicKey: - break - default: - c.sendAlert(alertUnsupportedCertificate) - return fmt.Errorf("tls: server's certificate contains an unsupported type of public key: %T", certs[0].PublicKey) - } - - c.peerCertificates = certs - - if c.config.VerifyPeerCertificate != nil { - if err := c.config.VerifyPeerCertificate(certificates, c.verifiedChains); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - return nil -} - -// certificateRequestInfoFromMsg generates a CertificateRequestInfo from a TLS -// <= 1.2 CertificateRequest, making an effort to fill in missing information. -func certificateRequestInfoFromMsg(ctx context.Context, vers uint16, certReq *certificateRequestMsg) *CertificateRequestInfo { - cri := &certificateRequestInfo{ - AcceptableCAs: certReq.certificateAuthorities, - Version: vers, - ctx: ctx, - } - - var rsaAvail, ecAvail bool - for _, certType := range certReq.certificateTypes { - switch certType { - case certTypeRSASign: - rsaAvail = true - case certTypeECDSASign: - ecAvail = true - } - } - - if !certReq.hasSignatureAlgorithm { - // Prior to TLS 1.2, signature schemes did not exist. In this case we - // make up a list based on the acceptable certificate types, to help - // GetClientCertificate and SupportsCertificate select the right certificate. - // The hash part of the SignatureScheme is a lie here, because - // TLS 1.0 and 1.1 always use MD5+SHA1 for RSA and SHA1 for ECDSA. - switch { - case rsaAvail && ecAvail: - cri.SignatureSchemes = []SignatureScheme{ - ECDSAWithP256AndSHA256, ECDSAWithP384AndSHA384, ECDSAWithP521AndSHA512, - PKCS1WithSHA256, PKCS1WithSHA384, PKCS1WithSHA512, PKCS1WithSHA1, - } - case rsaAvail: - cri.SignatureSchemes = []SignatureScheme{ - PKCS1WithSHA256, PKCS1WithSHA384, PKCS1WithSHA512, PKCS1WithSHA1, - } - case ecAvail: - cri.SignatureSchemes = []SignatureScheme{ - ECDSAWithP256AndSHA256, ECDSAWithP384AndSHA384, ECDSAWithP521AndSHA512, - } - } - return toCertificateRequestInfo(cri) - } - - // Filter the signature schemes based on the certificate types. - // See RFC 5246, Section 7.4.4 (where it calls this "somewhat complicated"). - cri.SignatureSchemes = make([]SignatureScheme, 0, len(certReq.supportedSignatureAlgorithms)) - for _, sigScheme := range certReq.supportedSignatureAlgorithms { - sigType, _, err := typeAndHashFromSignatureScheme(sigScheme) - if err != nil { - continue - } - switch sigType { - case signatureECDSA, signatureEd25519: - if ecAvail { - cri.SignatureSchemes = append(cri.SignatureSchemes, sigScheme) - } - case signatureRSAPSS, signaturePKCS1v15: - if rsaAvail { - cri.SignatureSchemes = append(cri.SignatureSchemes, sigScheme) - } - } - } - - return toCertificateRequestInfo(cri) -} - -func (c *Conn) getClientCertificate(cri *CertificateRequestInfo) (*Certificate, error) { - if c.config.GetClientCertificate != nil { - return c.config.GetClientCertificate(cri) - } - - for _, chain := range c.config.Certificates { - if err := cri.SupportsCertificate(&chain); err != nil { - continue - } - return &chain, nil - } - - // No acceptable certificate found. Don't send a certificate. - return new(Certificate), nil -} - -const clientSessionCacheKeyPrefix = "qtls-" - -// clientSessionCacheKey returns a key used to cache sessionTickets that could -// be used to resume previously negotiated TLS sessions with a server. -func clientSessionCacheKey(serverAddr net.Addr, config *config) string { - if len(config.ServerName) > 0 { - return clientSessionCacheKeyPrefix + config.ServerName - } - return clientSessionCacheKeyPrefix + serverAddr.String() -} - -// hostnameInSNI converts name into an appropriate hostname for SNI. -// Literal IP addresses and absolute FQDNs are not permitted as SNI values. -// See RFC 6066, Section 3. -func hostnameInSNI(name string) string { - host := name - if len(host) > 0 && host[0] == '[' && host[len(host)-1] == ']' { - host = host[1 : len(host)-1] - } - if i := strings.LastIndex(host, "%"); i > 0 { - host = host[:i] - } - if net.ParseIP(host) != nil { - return "" - } - for len(name) > 0 && name[len(name)-1] == '.' { - name = name[:len(name)-1] - } - return name -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/handshake_client_tls13.go b/vendor/github.com/quic-go/qtls-go1-19/handshake_client_tls13.go deleted file mode 100644 index 5c3ed0bde3..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/handshake_client_tls13.go +++ /dev/null @@ -1,738 +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. - -package qtls - -import ( - "bytes" - "context" - "crypto" - "crypto/hmac" - "crypto/rsa" - "encoding/binary" - "errors" - "hash" - "sync/atomic" - "time" - - "golang.org/x/crypto/cryptobyte" -) - -type clientHandshakeStateTLS13 struct { - c *Conn - ctx context.Context - serverHello *serverHelloMsg - hello *clientHelloMsg - ecdheParams ecdheParameters - - session *clientSessionState - earlySecret []byte - binderKey []byte - - certReq *certificateRequestMsgTLS13 - usingPSK bool - sentDummyCCS bool - suite *cipherSuiteTLS13 - transcript hash.Hash - masterSecret []byte - trafficSecret []byte // client_application_traffic_secret_0 -} - -// handshake requires hs.c, hs.hello, hs.serverHello, hs.ecdheParams, and, -// optionally, hs.session, hs.earlySecret and hs.binderKey to be set. -func (hs *clientHandshakeStateTLS13) handshake() error { - c := hs.c - - if needFIPS() { - return errors.New("tls: internal error: TLS 1.3 reached in FIPS mode") - } - - // The server must not select TLS 1.3 in a renegotiation. See RFC 8446, - // sections 4.1.2 and 4.1.3. - if c.handshakes > 0 { - c.sendAlert(alertProtocolVersion) - return errors.New("tls: server selected TLS 1.3 in a renegotiation") - } - - // Consistency check on the presence of a keyShare and its parameters. - if hs.ecdheParams == nil || len(hs.hello.keyShares) != 1 { - return c.sendAlert(alertInternalError) - } - - if err := hs.checkServerHelloOrHRR(); err != nil { - return err - } - - hs.transcript = hs.suite.hash.New() - hs.transcript.Write(hs.hello.marshal()) - - if bytes.Equal(hs.serverHello.random, helloRetryRequestRandom) { - if err := hs.sendDummyChangeCipherSpec(); err != nil { - return err - } - if err := hs.processHelloRetryRequest(); err != nil { - return err - } - } - - hs.transcript.Write(hs.serverHello.marshal()) - - c.buffering = true - if err := hs.processServerHello(); err != nil { - return err - } - c.updateConnectionState() - if err := hs.sendDummyChangeCipherSpec(); err != nil { - return err - } - if err := hs.establishHandshakeKeys(); err != nil { - return err - } - if err := hs.readServerParameters(); err != nil { - return err - } - if err := hs.readServerCertificate(); err != nil { - return err - } - c.updateConnectionState() - if err := hs.readServerFinished(); err != nil { - return err - } - if err := hs.sendClientCertificate(); err != nil { - return err - } - if err := hs.sendClientFinished(); err != nil { - return err - } - if _, err := c.flush(); err != nil { - return err - } - - atomic.StoreUint32(&c.handshakeStatus, 1) - c.updateConnectionState() - return nil -} - -// checkServerHelloOrHRR does validity checks that apply to both ServerHello and -// HelloRetryRequest messages. It sets hs.suite. -func (hs *clientHandshakeStateTLS13) checkServerHelloOrHRR() error { - c := hs.c - - if hs.serverHello.supportedVersion == 0 { - c.sendAlert(alertMissingExtension) - return errors.New("tls: server selected TLS 1.3 using the legacy version field") - } - - if hs.serverHello.supportedVersion != VersionTLS13 { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server selected an invalid version after a HelloRetryRequest") - } - - if hs.serverHello.vers != VersionTLS12 { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server sent an incorrect legacy version") - } - - if hs.serverHello.ocspStapling || - hs.serverHello.ticketSupported || - hs.serverHello.secureRenegotiationSupported || - len(hs.serverHello.secureRenegotiation) != 0 || - len(hs.serverHello.alpnProtocol) != 0 || - len(hs.serverHello.scts) != 0 { - c.sendAlert(alertUnsupportedExtension) - return errors.New("tls: server sent a ServerHello extension forbidden in TLS 1.3") - } - - if !bytes.Equal(hs.hello.sessionId, hs.serverHello.sessionId) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server did not echo the legacy session ID") - } - - if hs.serverHello.compressionMethod != compressionNone { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server selected unsupported compression format") - } - - selectedSuite := mutualCipherSuiteTLS13(hs.hello.cipherSuites, hs.serverHello.cipherSuite) - if hs.suite != nil && selectedSuite != hs.suite { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server changed cipher suite after a HelloRetryRequest") - } - if selectedSuite == nil { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server chose an unconfigured cipher suite") - } - hs.suite = selectedSuite - c.cipherSuite = hs.suite.id - - return nil -} - -// sendDummyChangeCipherSpec sends a ChangeCipherSpec record for compatibility -// with middleboxes that didn't implement TLS correctly. See RFC 8446, Appendix D.4. -func (hs *clientHandshakeStateTLS13) sendDummyChangeCipherSpec() error { - if hs.sentDummyCCS { - return nil - } - hs.sentDummyCCS = true - - _, err := hs.c.writeRecord(recordTypeChangeCipherSpec, []byte{1}) - return err -} - -// processHelloRetryRequest handles the HRR in hs.serverHello, modifies and -// resends hs.hello, and reads the new ServerHello into hs.serverHello. -func (hs *clientHandshakeStateTLS13) processHelloRetryRequest() error { - c := hs.c - - // The first ClientHello gets double-hashed into the transcript upon a - // HelloRetryRequest. (The idea is that the server might offload transcript - // storage to the client in the cookie.) See RFC 8446, Section 4.4.1. - chHash := hs.transcript.Sum(nil) - hs.transcript.Reset() - hs.transcript.Write([]byte{typeMessageHash, 0, 0, uint8(len(chHash))}) - hs.transcript.Write(chHash) - hs.transcript.Write(hs.serverHello.marshal()) - - // The only HelloRetryRequest extensions we support are key_share and - // cookie, and clients must abort the handshake if the HRR would not result - // in any change in the ClientHello. - if hs.serverHello.selectedGroup == 0 && hs.serverHello.cookie == nil { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server sent an unnecessary HelloRetryRequest message") - } - - if hs.serverHello.cookie != nil { - hs.hello.cookie = hs.serverHello.cookie - } - - if hs.serverHello.serverShare.group != 0 { - c.sendAlert(alertDecodeError) - return errors.New("tls: received malformed key_share extension") - } - - // If the server sent a key_share extension selecting a group, ensure it's - // a group we advertised but did not send a key share for, and send a key - // share for it this time. - if curveID := hs.serverHello.selectedGroup; curveID != 0 { - curveOK := false - for _, id := range hs.hello.supportedCurves { - if id == curveID { - curveOK = true - break - } - } - if !curveOK { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server selected unsupported group") - } - if hs.ecdheParams.CurveID() == curveID { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server sent an unnecessary HelloRetryRequest key_share") - } - if _, ok := curveForCurveID(curveID); curveID != X25519 && !ok { - c.sendAlert(alertInternalError) - return errors.New("tls: CurvePreferences includes unsupported curve") - } - params, err := generateECDHEParameters(c.config.rand(), curveID) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - hs.ecdheParams = params - hs.hello.keyShares = []keyShare{{group: curveID, data: params.PublicKey()}} - } - - hs.hello.raw = nil - if len(hs.hello.pskIdentities) > 0 { - pskSuite := cipherSuiteTLS13ByID(hs.session.cipherSuite) - if pskSuite == nil { - return c.sendAlert(alertInternalError) - } - if pskSuite.hash == hs.suite.hash { - // Update binders and obfuscated_ticket_age. - ticketAge := uint32(c.config.time().Sub(hs.session.receivedAt) / time.Millisecond) - hs.hello.pskIdentities[0].obfuscatedTicketAge = ticketAge + hs.session.ageAdd - - transcript := hs.suite.hash.New() - transcript.Write([]byte{typeMessageHash, 0, 0, uint8(len(chHash))}) - transcript.Write(chHash) - transcript.Write(hs.serverHello.marshal()) - transcript.Write(hs.hello.marshalWithoutBinders()) - pskBinders := [][]byte{hs.suite.finishedHash(hs.binderKey, transcript)} - hs.hello.updateBinders(pskBinders) - } else { - // Server selected a cipher suite incompatible with the PSK. - hs.hello.pskIdentities = nil - hs.hello.pskBinders = nil - } - } - - if hs.hello.earlyData && c.extraConfig != nil && c.extraConfig.Rejected0RTT != nil { - c.extraConfig.Rejected0RTT() - } - hs.hello.earlyData = false // disable 0-RTT - - hs.transcript.Write(hs.hello.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil { - return err - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - - serverHello, ok := msg.(*serverHelloMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(serverHello, msg) - } - hs.serverHello = serverHello - - if err := hs.checkServerHelloOrHRR(); err != nil { - return err - } - - return nil -} - -func (hs *clientHandshakeStateTLS13) processServerHello() error { - c := hs.c - - if bytes.Equal(hs.serverHello.random, helloRetryRequestRandom) { - c.sendAlert(alertUnexpectedMessage) - return errors.New("tls: server sent two HelloRetryRequest messages") - } - - if len(hs.serverHello.cookie) != 0 { - c.sendAlert(alertUnsupportedExtension) - return errors.New("tls: server sent a cookie in a normal ServerHello") - } - - if hs.serverHello.selectedGroup != 0 { - c.sendAlert(alertDecodeError) - return errors.New("tls: malformed key_share extension") - } - - if hs.serverHello.serverShare.group == 0 { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server did not send a key share") - } - if hs.serverHello.serverShare.group != hs.ecdheParams.CurveID() { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server selected unsupported group") - } - - if !hs.serverHello.selectedIdentityPresent { - return nil - } - - if int(hs.serverHello.selectedIdentity) >= len(hs.hello.pskIdentities) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server selected an invalid PSK") - } - - if len(hs.hello.pskIdentities) != 1 || hs.session == nil { - return c.sendAlert(alertInternalError) - } - pskSuite := cipherSuiteTLS13ByID(hs.session.cipherSuite) - if pskSuite == nil { - return c.sendAlert(alertInternalError) - } - if pskSuite.hash != hs.suite.hash { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: server selected an invalid PSK and cipher suite pair") - } - - hs.usingPSK = true - c.didResume = true - c.peerCertificates = hs.session.serverCertificates - c.verifiedChains = hs.session.verifiedChains - c.ocspResponse = hs.session.ocspResponse - c.scts = hs.session.scts - return nil -} - -func (hs *clientHandshakeStateTLS13) establishHandshakeKeys() error { - c := hs.c - - sharedKey := hs.ecdheParams.SharedKey(hs.serverHello.serverShare.data) - if sharedKey == nil { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: invalid server key share") - } - - earlySecret := hs.earlySecret - if !hs.usingPSK { - earlySecret = hs.suite.extract(nil, nil) - } - handshakeSecret := hs.suite.extract(sharedKey, - hs.suite.deriveSecret(earlySecret, "derived", nil)) - - clientSecret := hs.suite.deriveSecret(handshakeSecret, - clientHandshakeTrafficLabel, hs.transcript) - c.out.exportKey(EncryptionHandshake, hs.suite, clientSecret) - c.out.setTrafficSecret(hs.suite, clientSecret) - serverSecret := hs.suite.deriveSecret(handshakeSecret, - serverHandshakeTrafficLabel, hs.transcript) - c.in.exportKey(EncryptionHandshake, hs.suite, serverSecret) - c.in.setTrafficSecret(hs.suite, serverSecret) - - err := c.config.writeKeyLog(keyLogLabelClientHandshake, hs.hello.random, clientSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - err = c.config.writeKeyLog(keyLogLabelServerHandshake, hs.hello.random, serverSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - - hs.masterSecret = hs.suite.extract(nil, - hs.suite.deriveSecret(handshakeSecret, "derived", nil)) - - return nil -} - -func (hs *clientHandshakeStateTLS13) readServerParameters() error { - c := hs.c - - msg, err := c.readHandshake() - if err != nil { - return err - } - - encryptedExtensions, ok := msg.(*encryptedExtensionsMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(encryptedExtensions, msg) - } - // Notify the caller if 0-RTT was rejected. - if !encryptedExtensions.earlyData && hs.hello.earlyData && c.extraConfig != nil && c.extraConfig.Rejected0RTT != nil { - c.extraConfig.Rejected0RTT() - } - c.used0RTT = encryptedExtensions.earlyData - if hs.c.extraConfig != nil && hs.c.extraConfig.ReceivedExtensions != nil { - hs.c.extraConfig.ReceivedExtensions(typeEncryptedExtensions, encryptedExtensions.additionalExtensions) - } - hs.transcript.Write(encryptedExtensions.marshal()) - - if err := checkALPN(hs.hello.alpnProtocols, encryptedExtensions.alpnProtocol); err != nil { - c.sendAlert(alertUnsupportedExtension) - return err - } - c.clientProtocol = encryptedExtensions.alpnProtocol - - if c.extraConfig != nil && c.extraConfig.EnforceNextProtoSelection { - if len(encryptedExtensions.alpnProtocol) == 0 { - // the server didn't select an ALPN - c.sendAlert(alertNoApplicationProtocol) - return errors.New("ALPN negotiation failed. Server didn't offer any protocols") - } - } - return nil -} - -func (hs *clientHandshakeStateTLS13) readServerCertificate() error { - c := hs.c - - // Either a PSK or a certificate is always used, but not both. - // See RFC 8446, Section 4.1.1. - if hs.usingPSK { - // Make sure the connection is still being verified whether or not this - // is a resumption. Resumptions currently don't reverify certificates so - // they don't call verifyServerCertificate. See Issue 31641. - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - return nil - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - - certReq, ok := msg.(*certificateRequestMsgTLS13) - if ok { - hs.transcript.Write(certReq.marshal()) - - hs.certReq = certReq - - msg, err = c.readHandshake() - if err != nil { - return err - } - } - - certMsg, ok := msg.(*certificateMsgTLS13) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certMsg, msg) - } - if len(certMsg.certificate.Certificate) == 0 { - c.sendAlert(alertDecodeError) - return errors.New("tls: received empty certificates message") - } - hs.transcript.Write(certMsg.marshal()) - - c.scts = certMsg.certificate.SignedCertificateTimestamps - c.ocspResponse = certMsg.certificate.OCSPStaple - - if err := c.verifyServerCertificate(certMsg.certificate.Certificate); err != nil { - return err - } - - msg, err = c.readHandshake() - if err != nil { - return err - } - - certVerify, ok := msg.(*certificateVerifyMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certVerify, msg) - } - - // See RFC 8446, Section 4.4.3. - if !isSupportedSignatureAlgorithm(certVerify.signatureAlgorithm, supportedSignatureAlgorithms()) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: certificate used with invalid signature algorithm") - } - sigType, sigHash, err := typeAndHashFromSignatureScheme(certVerify.signatureAlgorithm) - if err != nil { - return c.sendAlert(alertInternalError) - } - if sigType == signaturePKCS1v15 || sigHash == crypto.SHA1 { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: certificate used with invalid signature algorithm") - } - signed := signedMessage(sigHash, serverSignatureContext, hs.transcript) - if err := verifyHandshakeSignature(sigType, c.peerCertificates[0].PublicKey, - sigHash, signed, certVerify.signature); err != nil { - c.sendAlert(alertDecryptError) - return errors.New("tls: invalid signature by the server certificate: " + err.Error()) - } - - hs.transcript.Write(certVerify.marshal()) - - return nil -} - -func (hs *clientHandshakeStateTLS13) readServerFinished() error { - c := hs.c - - msg, err := c.readHandshake() - if err != nil { - return err - } - - finished, ok := msg.(*finishedMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(finished, msg) - } - - expectedMAC := hs.suite.finishedHash(c.in.trafficSecret, hs.transcript) - if !hmac.Equal(expectedMAC, finished.verifyData) { - c.sendAlert(alertDecryptError) - return errors.New("tls: invalid server finished hash") - } - - hs.transcript.Write(finished.marshal()) - - // Derive secrets that take context through the server Finished. - - hs.trafficSecret = hs.suite.deriveSecret(hs.masterSecret, - clientApplicationTrafficLabel, hs.transcript) - serverSecret := hs.suite.deriveSecret(hs.masterSecret, - serverApplicationTrafficLabel, hs.transcript) - c.in.exportKey(EncryptionApplication, hs.suite, serverSecret) - c.in.setTrafficSecret(hs.suite, serverSecret) - - err = c.config.writeKeyLog(keyLogLabelClientTraffic, hs.hello.random, hs.trafficSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - err = c.config.writeKeyLog(keyLogLabelServerTraffic, hs.hello.random, serverSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - - c.ekm = hs.suite.exportKeyingMaterial(hs.masterSecret, hs.transcript) - - return nil -} - -func (hs *clientHandshakeStateTLS13) sendClientCertificate() error { - c := hs.c - - if hs.certReq == nil { - return nil - } - - cert, err := c.getClientCertificate(toCertificateRequestInfo(&certificateRequestInfo{ - AcceptableCAs: hs.certReq.certificateAuthorities, - SignatureSchemes: hs.certReq.supportedSignatureAlgorithms, - Version: c.vers, - ctx: hs.ctx, - })) - if err != nil { - return err - } - - certMsg := new(certificateMsgTLS13) - - certMsg.certificate = *cert - certMsg.scts = hs.certReq.scts && len(cert.SignedCertificateTimestamps) > 0 - certMsg.ocspStapling = hs.certReq.ocspStapling && len(cert.OCSPStaple) > 0 - - hs.transcript.Write(certMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certMsg.marshal()); err != nil { - return err - } - - // If we sent an empty certificate message, skip the CertificateVerify. - if len(cert.Certificate) == 0 { - return nil - } - - certVerifyMsg := new(certificateVerifyMsg) - certVerifyMsg.hasSignatureAlgorithm = true - - certVerifyMsg.signatureAlgorithm, err = selectSignatureScheme(c.vers, cert, hs.certReq.supportedSignatureAlgorithms) - if err != nil { - // getClientCertificate returned a certificate incompatible with the - // CertificateRequestInfo supported signature algorithms. - c.sendAlert(alertHandshakeFailure) - return err - } - - sigType, sigHash, err := typeAndHashFromSignatureScheme(certVerifyMsg.signatureAlgorithm) - if err != nil { - return c.sendAlert(alertInternalError) - } - - signed := signedMessage(sigHash, clientSignatureContext, hs.transcript) - signOpts := crypto.SignerOpts(sigHash) - if sigType == signatureRSAPSS { - signOpts = &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash, Hash: sigHash} - } - sig, err := cert.PrivateKey.(crypto.Signer).Sign(c.config.rand(), signed, signOpts) - if err != nil { - c.sendAlert(alertInternalError) - return errors.New("tls: failed to sign handshake: " + err.Error()) - } - certVerifyMsg.signature = sig - - hs.transcript.Write(certVerifyMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certVerifyMsg.marshal()); err != nil { - return err - } - - return nil -} - -func (hs *clientHandshakeStateTLS13) sendClientFinished() error { - c := hs.c - - finished := &finishedMsg{ - verifyData: hs.suite.finishedHash(c.out.trafficSecret, hs.transcript), - } - - hs.transcript.Write(finished.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, finished.marshal()); err != nil { - return err - } - - c.out.exportKey(EncryptionApplication, hs.suite, hs.trafficSecret) - c.out.setTrafficSecret(hs.suite, hs.trafficSecret) - - if !c.config.SessionTicketsDisabled && c.config.ClientSessionCache != nil { - c.resumptionSecret = hs.suite.deriveSecret(hs.masterSecret, - resumptionLabel, hs.transcript) - } - - return nil -} - -func (c *Conn) handleNewSessionTicket(msg *newSessionTicketMsgTLS13) error { - if !c.isClient { - c.sendAlert(alertUnexpectedMessage) - return errors.New("tls: received new session ticket from a client") - } - - if c.config.SessionTicketsDisabled || c.config.ClientSessionCache == nil { - return nil - } - - // See RFC 8446, Section 4.6.1. - if msg.lifetime == 0 { - return nil - } - lifetime := time.Duration(msg.lifetime) * time.Second - if lifetime > maxSessionTicketLifetime { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: received a session ticket with invalid lifetime") - } - - cipherSuite := cipherSuiteTLS13ByID(c.cipherSuite) - if cipherSuite == nil || c.resumptionSecret == nil { - return c.sendAlert(alertInternalError) - } - - // We need to save the max_early_data_size that the server sent us, in order - // to decide if we're going to try 0-RTT with this ticket. - // However, at the same time, the qtls.ClientSessionTicket needs to be equal to - // the tls.ClientSessionTicket, so we can't just add a new field to the struct. - // We therefore abuse the nonce field (which is a byte slice) - nonceWithEarlyData := make([]byte, len(msg.nonce)+4) - binary.BigEndian.PutUint32(nonceWithEarlyData, msg.maxEarlyData) - copy(nonceWithEarlyData[4:], msg.nonce) - - var appData []byte - if c.extraConfig != nil && c.extraConfig.GetAppDataForSessionState != nil { - appData = c.extraConfig.GetAppDataForSessionState() - } - var b cryptobyte.Builder - b.AddUint16(clientSessionStateVersion) // revision - b.AddUint32(msg.maxEarlyData) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(appData) - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(msg.nonce) - }) - - // Save the resumption_master_secret and nonce instead of deriving the PSK - // to do the least amount of work on NewSessionTicket messages before we - // know if the ticket will be used. Forward secrecy of resumed connections - // is guaranteed by the requirement for pskModeDHE. - session := &clientSessionState{ - sessionTicket: msg.label, - vers: c.vers, - cipherSuite: c.cipherSuite, - masterSecret: c.resumptionSecret, - serverCertificates: c.peerCertificates, - verifiedChains: c.verifiedChains, - receivedAt: c.config.time(), - nonce: b.BytesOrPanic(), - useBy: c.config.time().Add(lifetime), - ageAdd: msg.ageAdd, - ocspResponse: c.ocspResponse, - scts: c.scts, - } - - cacheKey := clientSessionCacheKey(c.conn.RemoteAddr(), c.config) - c.config.ClientSessionCache.Put(cacheKey, toClientSessionState(session)) - - return nil -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/handshake_messages.go b/vendor/github.com/quic-go/qtls-go1-19/handshake_messages.go deleted file mode 100644 index 07193c8efc..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/handshake_messages.go +++ /dev/null @@ -1,1843 +0,0 @@ -// Copyright 2009 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 qtls - -import ( - "fmt" - "strings" - - "golang.org/x/crypto/cryptobyte" -) - -// The marshalingFunction type is an adapter to allow the use of ordinary -// functions as cryptobyte.MarshalingValue. -type marshalingFunction func(b *cryptobyte.Builder) error - -func (f marshalingFunction) Marshal(b *cryptobyte.Builder) error { - return f(b) -} - -// addBytesWithLength appends a sequence of bytes to the cryptobyte.Builder. If -// the length of the sequence is not the value specified, it produces an error. -func addBytesWithLength(b *cryptobyte.Builder, v []byte, n int) { - b.AddValue(marshalingFunction(func(b *cryptobyte.Builder) error { - if len(v) != n { - return fmt.Errorf("invalid value length: expected %d, got %d", n, len(v)) - } - b.AddBytes(v) - return nil - })) -} - -// addUint64 appends a big-endian, 64-bit value to the cryptobyte.Builder. -func addUint64(b *cryptobyte.Builder, v uint64) { - b.AddUint32(uint32(v >> 32)) - b.AddUint32(uint32(v)) -} - -// readUint64 decodes a big-endian, 64-bit value into out and advances over it. -// It reports whether the read was successful. -func readUint64(s *cryptobyte.String, out *uint64) bool { - var hi, lo uint32 - if !s.ReadUint32(&hi) || !s.ReadUint32(&lo) { - return false - } - *out = uint64(hi)<<32 | uint64(lo) - return true -} - -// readUint8LengthPrefixed acts like s.ReadUint8LengthPrefixed, but targets a -// []byte instead of a cryptobyte.String. -func readUint8LengthPrefixed(s *cryptobyte.String, out *[]byte) bool { - return s.ReadUint8LengthPrefixed((*cryptobyte.String)(out)) -} - -// readUint16LengthPrefixed acts like s.ReadUint16LengthPrefixed, but targets a -// []byte instead of a cryptobyte.String. -func readUint16LengthPrefixed(s *cryptobyte.String, out *[]byte) bool { - return s.ReadUint16LengthPrefixed((*cryptobyte.String)(out)) -} - -// readUint24LengthPrefixed acts like s.ReadUint24LengthPrefixed, but targets a -// []byte instead of a cryptobyte.String. -func readUint24LengthPrefixed(s *cryptobyte.String, out *[]byte) bool { - return s.ReadUint24LengthPrefixed((*cryptobyte.String)(out)) -} - -type clientHelloMsg struct { - raw []byte - vers uint16 - random []byte - sessionId []byte - cipherSuites []uint16 - compressionMethods []uint8 - serverName string - ocspStapling bool - supportedCurves []CurveID - supportedPoints []uint8 - ticketSupported bool - sessionTicket []uint8 - supportedSignatureAlgorithms []SignatureScheme - supportedSignatureAlgorithmsCert []SignatureScheme - secureRenegotiationSupported bool - secureRenegotiation []byte - alpnProtocols []string - scts bool - supportedVersions []uint16 - cookie []byte - keyShares []keyShare - earlyData bool - pskModes []uint8 - pskIdentities []pskIdentity - pskBinders [][]byte - additionalExtensions []Extension -} - -func (m *clientHelloMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeClientHello) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(m.vers) - addBytesWithLength(b, m.random, 32) - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.sessionId) - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, suite := range m.cipherSuites { - b.AddUint16(suite) - } - }) - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.compressionMethods) - }) - - // If extensions aren't present, omit them. - var extensionsPresent bool - bWithoutExtensions := *b - - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if len(m.serverName) > 0 { - // RFC 6066, Section 3 - b.AddUint16(extensionServerName) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8(0) // name_type = host_name - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(m.serverName)) - }) - }) - }) - } - if m.ocspStapling { - // RFC 4366, Section 3.6 - b.AddUint16(extensionStatusRequest) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8(1) // status_type = ocsp - b.AddUint16(0) // empty responder_id_list - b.AddUint16(0) // empty request_extensions - }) - } - if len(m.supportedCurves) > 0 { - // RFC 4492, sections 5.1.1 and RFC 8446, Section 4.2.7 - b.AddUint16(extensionSupportedCurves) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, curve := range m.supportedCurves { - b.AddUint16(uint16(curve)) - } - }) - }) - } - if len(m.supportedPoints) > 0 { - // RFC 4492, Section 5.1.2 - b.AddUint16(extensionSupportedPoints) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.supportedPoints) - }) - }) - } - if m.ticketSupported { - // RFC 5077, Section 3.2 - b.AddUint16(extensionSessionTicket) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.sessionTicket) - }) - } - if len(m.supportedSignatureAlgorithms) > 0 { - // RFC 5246, Section 7.4.1.4.1 - b.AddUint16(extensionSignatureAlgorithms) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sigAlgo := range m.supportedSignatureAlgorithms { - b.AddUint16(uint16(sigAlgo)) - } - }) - }) - } - if len(m.supportedSignatureAlgorithmsCert) > 0 { - // RFC 8446, Section 4.2.3 - b.AddUint16(extensionSignatureAlgorithmsCert) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sigAlgo := range m.supportedSignatureAlgorithmsCert { - b.AddUint16(uint16(sigAlgo)) - } - }) - }) - } - if m.secureRenegotiationSupported { - // RFC 5746, Section 3.2 - b.AddUint16(extensionRenegotiationInfo) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.secureRenegotiation) - }) - }) - } - if len(m.alpnProtocols) > 0 { - // RFC 7301, Section 3.1 - b.AddUint16(extensionALPN) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, proto := range m.alpnProtocols { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(proto)) - }) - } - }) - }) - } - if m.scts { - // RFC 6962, Section 3.3.1 - b.AddUint16(extensionSCT) - b.AddUint16(0) // empty extension_data - } - if len(m.supportedVersions) > 0 { - // RFC 8446, Section 4.2.1 - b.AddUint16(extensionSupportedVersions) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - for _, vers := range m.supportedVersions { - b.AddUint16(vers) - } - }) - }) - } - if len(m.cookie) > 0 { - // RFC 8446, Section 4.2.2 - b.AddUint16(extensionCookie) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.cookie) - }) - }) - } - if len(m.keyShares) > 0 { - // RFC 8446, Section 4.2.8 - b.AddUint16(extensionKeyShare) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, ks := range m.keyShares { - b.AddUint16(uint16(ks.group)) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(ks.data) - }) - } - }) - }) - } - if m.earlyData { - // RFC 8446, Section 4.2.10 - b.AddUint16(extensionEarlyData) - b.AddUint16(0) // empty extension_data - } - if len(m.pskModes) > 0 { - // RFC 8446, Section 4.2.9 - b.AddUint16(extensionPSKModes) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.pskModes) - }) - }) - } - for _, ext := range m.additionalExtensions { - b.AddUint16(ext.Type) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(ext.Data) - }) - } - if len(m.pskIdentities) > 0 { // pre_shared_key must be the last extension - // RFC 8446, Section 4.2.11 - b.AddUint16(extensionPreSharedKey) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, psk := range m.pskIdentities { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(psk.label) - }) - b.AddUint32(psk.obfuscatedTicketAge) - } - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, binder := range m.pskBinders { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(binder) - }) - } - }) - }) - } - - extensionsPresent = len(b.BytesOrPanic()) > 2 - }) - - if !extensionsPresent { - *b = bWithoutExtensions - } - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -// marshalWithoutBinders returns the ClientHello through the -// PreSharedKeyExtension.identities field, according to RFC 8446, Section -// 4.2.11.2. Note that m.pskBinders must be set to slices of the correct length. -func (m *clientHelloMsg) marshalWithoutBinders() []byte { - bindersLen := 2 // uint16 length prefix - for _, binder := range m.pskBinders { - bindersLen += 1 // uint8 length prefix - bindersLen += len(binder) - } - - fullMessage := m.marshal() - return fullMessage[:len(fullMessage)-bindersLen] -} - -// updateBinders updates the m.pskBinders field, if necessary updating the -// cached marshaled representation. The supplied binders must have the same -// length as the current m.pskBinders. -func (m *clientHelloMsg) updateBinders(pskBinders [][]byte) { - if len(pskBinders) != len(m.pskBinders) { - panic("tls: internal error: pskBinders length mismatch") - } - for i := range m.pskBinders { - if len(pskBinders[i]) != len(m.pskBinders[i]) { - panic("tls: internal error: pskBinders length mismatch") - } - } - m.pskBinders = pskBinders - if m.raw != nil { - lenWithoutBinders := len(m.marshalWithoutBinders()) - b := cryptobyte.NewFixedBuilder(m.raw[:lenWithoutBinders]) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, binder := range m.pskBinders { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(binder) - }) - } - }) - if out, err := b.Bytes(); err != nil || len(out) != len(m.raw) { - panic("tls: internal error: failed to update binders") - } - } -} - -func (m *clientHelloMsg) unmarshal(data []byte) bool { - *m = clientHelloMsg{raw: data} - s := cryptobyte.String(data) - - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint16(&m.vers) || !s.ReadBytes(&m.random, 32) || - !readUint8LengthPrefixed(&s, &m.sessionId) { - return false - } - - var cipherSuites cryptobyte.String - if !s.ReadUint16LengthPrefixed(&cipherSuites) { - return false - } - m.cipherSuites = []uint16{} - m.secureRenegotiationSupported = false - for !cipherSuites.Empty() { - var suite uint16 - if !cipherSuites.ReadUint16(&suite) { - return false - } - if suite == scsvRenegotiation { - m.secureRenegotiationSupported = true - } - m.cipherSuites = append(m.cipherSuites, suite) - } - - if !readUint8LengthPrefixed(&s, &m.compressionMethods) { - return false - } - - if s.Empty() { - // ClientHello is optionally followed by extension data - return true - } - - var extensions cryptobyte.String - if !s.ReadUint16LengthPrefixed(&extensions) || !s.Empty() { - return false - } - - seenExts := make(map[uint16]bool) - for !extensions.Empty() { - var extension uint16 - var extData cryptobyte.String - if !extensions.ReadUint16(&extension) || - !extensions.ReadUint16LengthPrefixed(&extData) { - return false - } - - if seenExts[extension] { - return false - } - seenExts[extension] = true - - switch extension { - case extensionServerName: - // RFC 6066, Section 3 - var nameList cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&nameList) || nameList.Empty() { - return false - } - for !nameList.Empty() { - var nameType uint8 - var serverName cryptobyte.String - if !nameList.ReadUint8(&nameType) || - !nameList.ReadUint16LengthPrefixed(&serverName) || - serverName.Empty() { - return false - } - if nameType != 0 { - continue - } - if len(m.serverName) != 0 { - // Multiple names of the same name_type are prohibited. - return false - } - m.serverName = string(serverName) - // An SNI value may not include a trailing dot. - if strings.HasSuffix(m.serverName, ".") { - return false - } - } - case extensionStatusRequest: - // RFC 4366, Section 3.6 - var statusType uint8 - var ignored cryptobyte.String - if !extData.ReadUint8(&statusType) || - !extData.ReadUint16LengthPrefixed(&ignored) || - !extData.ReadUint16LengthPrefixed(&ignored) { - return false - } - m.ocspStapling = statusType == statusTypeOCSP - case extensionSupportedCurves: - // RFC 4492, sections 5.1.1 and RFC 8446, Section 4.2.7 - var curves cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&curves) || curves.Empty() { - return false - } - for !curves.Empty() { - var curve uint16 - if !curves.ReadUint16(&curve) { - return false - } - m.supportedCurves = append(m.supportedCurves, CurveID(curve)) - } - case extensionSupportedPoints: - // RFC 4492, Section 5.1.2 - if !readUint8LengthPrefixed(&extData, &m.supportedPoints) || - len(m.supportedPoints) == 0 { - return false - } - case extensionSessionTicket: - // RFC 5077, Section 3.2 - m.ticketSupported = true - extData.ReadBytes(&m.sessionTicket, len(extData)) - case extensionSignatureAlgorithms: - // RFC 5246, Section 7.4.1.4.1 - var sigAndAlgs cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&sigAndAlgs) || sigAndAlgs.Empty() { - return false - } - for !sigAndAlgs.Empty() { - var sigAndAlg uint16 - if !sigAndAlgs.ReadUint16(&sigAndAlg) { - return false - } - m.supportedSignatureAlgorithms = append( - m.supportedSignatureAlgorithms, SignatureScheme(sigAndAlg)) - } - case extensionSignatureAlgorithmsCert: - // RFC 8446, Section 4.2.3 - var sigAndAlgs cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&sigAndAlgs) || sigAndAlgs.Empty() { - return false - } - for !sigAndAlgs.Empty() { - var sigAndAlg uint16 - if !sigAndAlgs.ReadUint16(&sigAndAlg) { - return false - } - m.supportedSignatureAlgorithmsCert = append( - m.supportedSignatureAlgorithmsCert, SignatureScheme(sigAndAlg)) - } - case extensionRenegotiationInfo: - // RFC 5746, Section 3.2 - if !readUint8LengthPrefixed(&extData, &m.secureRenegotiation) { - return false - } - m.secureRenegotiationSupported = true - case extensionALPN: - // RFC 7301, Section 3.1 - var protoList cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&protoList) || protoList.Empty() { - return false - } - for !protoList.Empty() { - var proto cryptobyte.String - if !protoList.ReadUint8LengthPrefixed(&proto) || proto.Empty() { - return false - } - m.alpnProtocols = append(m.alpnProtocols, string(proto)) - } - case extensionSCT: - // RFC 6962, Section 3.3.1 - m.scts = true - case extensionSupportedVersions: - // RFC 8446, Section 4.2.1 - var versList cryptobyte.String - if !extData.ReadUint8LengthPrefixed(&versList) || versList.Empty() { - return false - } - for !versList.Empty() { - var vers uint16 - if !versList.ReadUint16(&vers) { - return false - } - m.supportedVersions = append(m.supportedVersions, vers) - } - case extensionCookie: - // RFC 8446, Section 4.2.2 - if !readUint16LengthPrefixed(&extData, &m.cookie) || - len(m.cookie) == 0 { - return false - } - case extensionKeyShare: - // RFC 8446, Section 4.2.8 - var clientShares cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&clientShares) { - return false - } - for !clientShares.Empty() { - var ks keyShare - if !clientShares.ReadUint16((*uint16)(&ks.group)) || - !readUint16LengthPrefixed(&clientShares, &ks.data) || - len(ks.data) == 0 { - return false - } - m.keyShares = append(m.keyShares, ks) - } - case extensionEarlyData: - // RFC 8446, Section 4.2.10 - m.earlyData = true - case extensionPSKModes: - // RFC 8446, Section 4.2.9 - if !readUint8LengthPrefixed(&extData, &m.pskModes) { - return false - } - case extensionPreSharedKey: - // RFC 8446, Section 4.2.11 - if !extensions.Empty() { - return false // pre_shared_key must be the last extension - } - var identities cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&identities) || identities.Empty() { - return false - } - for !identities.Empty() { - var psk pskIdentity - if !readUint16LengthPrefixed(&identities, &psk.label) || - !identities.ReadUint32(&psk.obfuscatedTicketAge) || - len(psk.label) == 0 { - return false - } - m.pskIdentities = append(m.pskIdentities, psk) - } - var binders cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&binders) || binders.Empty() { - return false - } - for !binders.Empty() { - var binder []byte - if !readUint8LengthPrefixed(&binders, &binder) || - len(binder) == 0 { - return false - } - m.pskBinders = append(m.pskBinders, binder) - } - default: - m.additionalExtensions = append(m.additionalExtensions, Extension{Type: extension, Data: extData}) - continue - } - - if !extData.Empty() { - return false - } - } - - return true -} - -type serverHelloMsg struct { - raw []byte - vers uint16 - random []byte - sessionId []byte - cipherSuite uint16 - compressionMethod uint8 - ocspStapling bool - ticketSupported bool - secureRenegotiationSupported bool - secureRenegotiation []byte - alpnProtocol string - scts [][]byte - supportedVersion uint16 - serverShare keyShare - selectedIdentityPresent bool - selectedIdentity uint16 - supportedPoints []uint8 - - // HelloRetryRequest extensions - cookie []byte - selectedGroup CurveID -} - -func (m *serverHelloMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeServerHello) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(m.vers) - addBytesWithLength(b, m.random, 32) - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.sessionId) - }) - b.AddUint16(m.cipherSuite) - b.AddUint8(m.compressionMethod) - - // If extensions aren't present, omit them. - var extensionsPresent bool - bWithoutExtensions := *b - - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if m.ocspStapling { - b.AddUint16(extensionStatusRequest) - b.AddUint16(0) // empty extension_data - } - if m.ticketSupported { - b.AddUint16(extensionSessionTicket) - b.AddUint16(0) // empty extension_data - } - if m.secureRenegotiationSupported { - b.AddUint16(extensionRenegotiationInfo) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.secureRenegotiation) - }) - }) - } - if len(m.alpnProtocol) > 0 { - b.AddUint16(extensionALPN) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(m.alpnProtocol)) - }) - }) - }) - } - if len(m.scts) > 0 { - b.AddUint16(extensionSCT) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sct := range m.scts { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(sct) - }) - } - }) - }) - } - if m.supportedVersion != 0 { - b.AddUint16(extensionSupportedVersions) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(m.supportedVersion) - }) - } - if m.serverShare.group != 0 { - b.AddUint16(extensionKeyShare) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(uint16(m.serverShare.group)) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.serverShare.data) - }) - }) - } - if m.selectedIdentityPresent { - b.AddUint16(extensionPreSharedKey) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(m.selectedIdentity) - }) - } - - if len(m.cookie) > 0 { - b.AddUint16(extensionCookie) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.cookie) - }) - }) - } - if m.selectedGroup != 0 { - b.AddUint16(extensionKeyShare) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(uint16(m.selectedGroup)) - }) - } - if len(m.supportedPoints) > 0 { - b.AddUint16(extensionSupportedPoints) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.supportedPoints) - }) - }) - } - - extensionsPresent = len(b.BytesOrPanic()) > 2 - }) - - if !extensionsPresent { - *b = bWithoutExtensions - } - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *serverHelloMsg) unmarshal(data []byte) bool { - *m = serverHelloMsg{raw: data} - s := cryptobyte.String(data) - - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint16(&m.vers) || !s.ReadBytes(&m.random, 32) || - !readUint8LengthPrefixed(&s, &m.sessionId) || - !s.ReadUint16(&m.cipherSuite) || - !s.ReadUint8(&m.compressionMethod) { - return false - } - - if s.Empty() { - // ServerHello is optionally followed by extension data - return true - } - - var extensions cryptobyte.String - if !s.ReadUint16LengthPrefixed(&extensions) || !s.Empty() { - return false - } - - seenExts := make(map[uint16]bool) - for !extensions.Empty() { - var extension uint16 - var extData cryptobyte.String - if !extensions.ReadUint16(&extension) || - !extensions.ReadUint16LengthPrefixed(&extData) { - return false - } - - if seenExts[extension] { - return false - } - seenExts[extension] = true - - switch extension { - case extensionStatusRequest: - m.ocspStapling = true - case extensionSessionTicket: - m.ticketSupported = true - case extensionRenegotiationInfo: - if !readUint8LengthPrefixed(&extData, &m.secureRenegotiation) { - return false - } - m.secureRenegotiationSupported = true - case extensionALPN: - var protoList cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&protoList) || protoList.Empty() { - return false - } - var proto cryptobyte.String - if !protoList.ReadUint8LengthPrefixed(&proto) || - proto.Empty() || !protoList.Empty() { - return false - } - m.alpnProtocol = string(proto) - case extensionSCT: - var sctList cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&sctList) || sctList.Empty() { - return false - } - for !sctList.Empty() { - var sct []byte - if !readUint16LengthPrefixed(&sctList, &sct) || - len(sct) == 0 { - return false - } - m.scts = append(m.scts, sct) - } - case extensionSupportedVersions: - if !extData.ReadUint16(&m.supportedVersion) { - return false - } - case extensionCookie: - if !readUint16LengthPrefixed(&extData, &m.cookie) || - len(m.cookie) == 0 { - return false - } - case extensionKeyShare: - // This extension has different formats in SH and HRR, accept either - // and let the handshake logic decide. See RFC 8446, Section 4.2.8. - if len(extData) == 2 { - if !extData.ReadUint16((*uint16)(&m.selectedGroup)) { - return false - } - } else { - if !extData.ReadUint16((*uint16)(&m.serverShare.group)) || - !readUint16LengthPrefixed(&extData, &m.serverShare.data) { - return false - } - } - case extensionPreSharedKey: - m.selectedIdentityPresent = true - if !extData.ReadUint16(&m.selectedIdentity) { - return false - } - case extensionSupportedPoints: - // RFC 4492, Section 5.1.2 - if !readUint8LengthPrefixed(&extData, &m.supportedPoints) || - len(m.supportedPoints) == 0 { - return false - } - default: - // Ignore unknown extensions. - continue - } - - if !extData.Empty() { - return false - } - } - - return true -} - -type encryptedExtensionsMsg struct { - raw []byte - alpnProtocol string - earlyData bool - - additionalExtensions []Extension -} - -func (m *encryptedExtensionsMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeEncryptedExtensions) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if len(m.alpnProtocol) > 0 { - b.AddUint16(extensionALPN) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(m.alpnProtocol)) - }) - }) - }) - } - if m.earlyData { - // RFC 8446, Section 4.2.10 - b.AddUint16(extensionEarlyData) - b.AddUint16(0) // empty extension_data - } - for _, ext := range m.additionalExtensions { - b.AddUint16(ext.Type) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(ext.Data) - }) - } - }) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *encryptedExtensionsMsg) unmarshal(data []byte) bool { - *m = encryptedExtensionsMsg{raw: data} - s := cryptobyte.String(data) - - var extensions cryptobyte.String - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint16LengthPrefixed(&extensions) || !s.Empty() { - return false - } - - for !extensions.Empty() { - var ext uint16 - var extData cryptobyte.String - if !extensions.ReadUint16(&ext) || - !extensions.ReadUint16LengthPrefixed(&extData) { - return false - } - - switch ext { - case extensionALPN: - var protoList cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&protoList) || protoList.Empty() { - return false - } - var proto cryptobyte.String - if !protoList.ReadUint8LengthPrefixed(&proto) || - proto.Empty() || !protoList.Empty() { - return false - } - m.alpnProtocol = string(proto) - case extensionEarlyData: - m.earlyData = true - default: - m.additionalExtensions = append(m.additionalExtensions, Extension{Type: ext, Data: extData}) - continue - } - - if !extData.Empty() { - return false - } - } - - return true -} - -type endOfEarlyDataMsg struct{} - -func (m *endOfEarlyDataMsg) marshal() []byte { - x := make([]byte, 4) - x[0] = typeEndOfEarlyData - return x -} - -func (m *endOfEarlyDataMsg) unmarshal(data []byte) bool { - return len(data) == 4 -} - -type keyUpdateMsg struct { - raw []byte - updateRequested bool -} - -func (m *keyUpdateMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeKeyUpdate) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - if m.updateRequested { - b.AddUint8(1) - } else { - b.AddUint8(0) - } - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *keyUpdateMsg) unmarshal(data []byte) bool { - m.raw = data - s := cryptobyte.String(data) - - var updateRequested uint8 - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint8(&updateRequested) || !s.Empty() { - return false - } - switch updateRequested { - case 0: - m.updateRequested = false - case 1: - m.updateRequested = true - default: - return false - } - return true -} - -type newSessionTicketMsgTLS13 struct { - raw []byte - lifetime uint32 - ageAdd uint32 - nonce []byte - label []byte - maxEarlyData uint32 -} - -func (m *newSessionTicketMsgTLS13) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeNewSessionTicket) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint32(m.lifetime) - b.AddUint32(m.ageAdd) - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.nonce) - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.label) - }) - - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if m.maxEarlyData > 0 { - b.AddUint16(extensionEarlyData) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint32(m.maxEarlyData) - }) - } - }) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *newSessionTicketMsgTLS13) unmarshal(data []byte) bool { - *m = newSessionTicketMsgTLS13{raw: data} - s := cryptobyte.String(data) - - var extensions cryptobyte.String - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint32(&m.lifetime) || - !s.ReadUint32(&m.ageAdd) || - !readUint8LengthPrefixed(&s, &m.nonce) || - !readUint16LengthPrefixed(&s, &m.label) || - !s.ReadUint16LengthPrefixed(&extensions) || - !s.Empty() { - return false - } - - for !extensions.Empty() { - var extension uint16 - var extData cryptobyte.String - if !extensions.ReadUint16(&extension) || - !extensions.ReadUint16LengthPrefixed(&extData) { - return false - } - - switch extension { - case extensionEarlyData: - if !extData.ReadUint32(&m.maxEarlyData) { - return false - } - default: - // Ignore unknown extensions. - continue - } - - if !extData.Empty() { - return false - } - } - - return true -} - -type certificateRequestMsgTLS13 struct { - raw []byte - ocspStapling bool - scts bool - supportedSignatureAlgorithms []SignatureScheme - supportedSignatureAlgorithmsCert []SignatureScheme - certificateAuthorities [][]byte -} - -func (m *certificateRequestMsgTLS13) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeCertificateRequest) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - // certificate_request_context (SHALL be zero length unless used for - // post-handshake authentication) - b.AddUint8(0) - - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if m.ocspStapling { - b.AddUint16(extensionStatusRequest) - b.AddUint16(0) // empty extension_data - } - if m.scts { - // RFC 8446, Section 4.4.2.1 makes no mention of - // signed_certificate_timestamp in CertificateRequest, but - // "Extensions in the Certificate message from the client MUST - // correspond to extensions in the CertificateRequest message - // from the server." and it appears in the table in Section 4.2. - b.AddUint16(extensionSCT) - b.AddUint16(0) // empty extension_data - } - if len(m.supportedSignatureAlgorithms) > 0 { - b.AddUint16(extensionSignatureAlgorithms) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sigAlgo := range m.supportedSignatureAlgorithms { - b.AddUint16(uint16(sigAlgo)) - } - }) - }) - } - if len(m.supportedSignatureAlgorithmsCert) > 0 { - b.AddUint16(extensionSignatureAlgorithmsCert) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sigAlgo := range m.supportedSignatureAlgorithmsCert { - b.AddUint16(uint16(sigAlgo)) - } - }) - }) - } - if len(m.certificateAuthorities) > 0 { - b.AddUint16(extensionCertificateAuthorities) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, ca := range m.certificateAuthorities { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(ca) - }) - } - }) - }) - } - }) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *certificateRequestMsgTLS13) unmarshal(data []byte) bool { - *m = certificateRequestMsgTLS13{raw: data} - s := cryptobyte.String(data) - - var context, extensions cryptobyte.String - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint8LengthPrefixed(&context) || !context.Empty() || - !s.ReadUint16LengthPrefixed(&extensions) || - !s.Empty() { - return false - } - - for !extensions.Empty() { - var extension uint16 - var extData cryptobyte.String - if !extensions.ReadUint16(&extension) || - !extensions.ReadUint16LengthPrefixed(&extData) { - return false - } - - switch extension { - case extensionStatusRequest: - m.ocspStapling = true - case extensionSCT: - m.scts = true - case extensionSignatureAlgorithms: - var sigAndAlgs cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&sigAndAlgs) || sigAndAlgs.Empty() { - return false - } - for !sigAndAlgs.Empty() { - var sigAndAlg uint16 - if !sigAndAlgs.ReadUint16(&sigAndAlg) { - return false - } - m.supportedSignatureAlgorithms = append( - m.supportedSignatureAlgorithms, SignatureScheme(sigAndAlg)) - } - case extensionSignatureAlgorithmsCert: - var sigAndAlgs cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&sigAndAlgs) || sigAndAlgs.Empty() { - return false - } - for !sigAndAlgs.Empty() { - var sigAndAlg uint16 - if !sigAndAlgs.ReadUint16(&sigAndAlg) { - return false - } - m.supportedSignatureAlgorithmsCert = append( - m.supportedSignatureAlgorithmsCert, SignatureScheme(sigAndAlg)) - } - case extensionCertificateAuthorities: - var auths cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&auths) || auths.Empty() { - return false - } - for !auths.Empty() { - var ca []byte - if !readUint16LengthPrefixed(&auths, &ca) || len(ca) == 0 { - return false - } - m.certificateAuthorities = append(m.certificateAuthorities, ca) - } - default: - // Ignore unknown extensions. - continue - } - - if !extData.Empty() { - return false - } - } - - return true -} - -type certificateMsg struct { - raw []byte - certificates [][]byte -} - -func (m *certificateMsg) marshal() (x []byte) { - if m.raw != nil { - return m.raw - } - - var i int - for _, slice := range m.certificates { - i += len(slice) - } - - length := 3 + 3*len(m.certificates) + i - x = make([]byte, 4+length) - x[0] = typeCertificate - x[1] = uint8(length >> 16) - x[2] = uint8(length >> 8) - x[3] = uint8(length) - - certificateOctets := length - 3 - x[4] = uint8(certificateOctets >> 16) - x[5] = uint8(certificateOctets >> 8) - x[6] = uint8(certificateOctets) - - y := x[7:] - for _, slice := range m.certificates { - y[0] = uint8(len(slice) >> 16) - y[1] = uint8(len(slice) >> 8) - y[2] = uint8(len(slice)) - copy(y[3:], slice) - y = y[3+len(slice):] - } - - m.raw = x - return -} - -func (m *certificateMsg) unmarshal(data []byte) bool { - if len(data) < 7 { - return false - } - - m.raw = data - certsLen := uint32(data[4])<<16 | uint32(data[5])<<8 | uint32(data[6]) - if uint32(len(data)) != certsLen+7 { - return false - } - - numCerts := 0 - d := data[7:] - for certsLen > 0 { - if len(d) < 4 { - return false - } - certLen := uint32(d[0])<<16 | uint32(d[1])<<8 | uint32(d[2]) - if uint32(len(d)) < 3+certLen { - return false - } - d = d[3+certLen:] - certsLen -= 3 + certLen - numCerts++ - } - - m.certificates = make([][]byte, numCerts) - d = data[7:] - for i := 0; i < numCerts; i++ { - certLen := uint32(d[0])<<16 | uint32(d[1])<<8 | uint32(d[2]) - m.certificates[i] = d[3 : 3+certLen] - d = d[3+certLen:] - } - - return true -} - -type certificateMsgTLS13 struct { - raw []byte - certificate Certificate - ocspStapling bool - scts bool -} - -func (m *certificateMsgTLS13) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeCertificate) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8(0) // certificate_request_context - - certificate := m.certificate - if !m.ocspStapling { - certificate.OCSPStaple = nil - } - if !m.scts { - certificate.SignedCertificateTimestamps = nil - } - marshalCertificate(b, certificate) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func marshalCertificate(b *cryptobyte.Builder, certificate Certificate) { - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - for i, cert := range certificate.Certificate { - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(cert) - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if i > 0 { - // This library only supports OCSP and SCT for leaf certificates. - return - } - if certificate.OCSPStaple != nil { - b.AddUint16(extensionStatusRequest) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8(statusTypeOCSP) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(certificate.OCSPStaple) - }) - }) - } - if certificate.SignedCertificateTimestamps != nil { - b.AddUint16(extensionSCT) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sct := range certificate.SignedCertificateTimestamps { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(sct) - }) - } - }) - }) - } - }) - } - }) -} - -func (m *certificateMsgTLS13) unmarshal(data []byte) bool { - *m = certificateMsgTLS13{raw: data} - s := cryptobyte.String(data) - - var context cryptobyte.String - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint8LengthPrefixed(&context) || !context.Empty() || - !unmarshalCertificate(&s, &m.certificate) || - !s.Empty() { - return false - } - - m.scts = m.certificate.SignedCertificateTimestamps != nil - m.ocspStapling = m.certificate.OCSPStaple != nil - - return true -} - -func unmarshalCertificate(s *cryptobyte.String, certificate *Certificate) bool { - var certList cryptobyte.String - if !s.ReadUint24LengthPrefixed(&certList) { - return false - } - for !certList.Empty() { - var cert []byte - var extensions cryptobyte.String - if !readUint24LengthPrefixed(&certList, &cert) || - !certList.ReadUint16LengthPrefixed(&extensions) { - return false - } - certificate.Certificate = append(certificate.Certificate, cert) - for !extensions.Empty() { - var extension uint16 - var extData cryptobyte.String - if !extensions.ReadUint16(&extension) || - !extensions.ReadUint16LengthPrefixed(&extData) { - return false - } - if len(certificate.Certificate) > 1 { - // This library only supports OCSP and SCT for leaf certificates. - continue - } - - switch extension { - case extensionStatusRequest: - var statusType uint8 - if !extData.ReadUint8(&statusType) || statusType != statusTypeOCSP || - !readUint24LengthPrefixed(&extData, &certificate.OCSPStaple) || - len(certificate.OCSPStaple) == 0 { - return false - } - case extensionSCT: - var sctList cryptobyte.String - if !extData.ReadUint16LengthPrefixed(&sctList) || sctList.Empty() { - return false - } - for !sctList.Empty() { - var sct []byte - if !readUint16LengthPrefixed(&sctList, &sct) || - len(sct) == 0 { - return false - } - certificate.SignedCertificateTimestamps = append( - certificate.SignedCertificateTimestamps, sct) - } - default: - // Ignore unknown extensions. - continue - } - - if !extData.Empty() { - return false - } - } - } - return true -} - -type serverKeyExchangeMsg struct { - raw []byte - key []byte -} - -func (m *serverKeyExchangeMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - length := len(m.key) - x := make([]byte, length+4) - x[0] = typeServerKeyExchange - x[1] = uint8(length >> 16) - x[2] = uint8(length >> 8) - x[3] = uint8(length) - copy(x[4:], m.key) - - m.raw = x - return x -} - -func (m *serverKeyExchangeMsg) unmarshal(data []byte) bool { - m.raw = data - if len(data) < 4 { - return false - } - m.key = data[4:] - return true -} - -type certificateStatusMsg struct { - raw []byte - response []byte -} - -func (m *certificateStatusMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeCertificateStatus) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8(statusTypeOCSP) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.response) - }) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *certificateStatusMsg) unmarshal(data []byte) bool { - m.raw = data - s := cryptobyte.String(data) - - var statusType uint8 - if !s.Skip(4) || // message type and uint24 length field - !s.ReadUint8(&statusType) || statusType != statusTypeOCSP || - !readUint24LengthPrefixed(&s, &m.response) || - len(m.response) == 0 || !s.Empty() { - return false - } - return true -} - -type serverHelloDoneMsg struct{} - -func (m *serverHelloDoneMsg) marshal() []byte { - x := make([]byte, 4) - x[0] = typeServerHelloDone - return x -} - -func (m *serverHelloDoneMsg) unmarshal(data []byte) bool { - return len(data) == 4 -} - -type clientKeyExchangeMsg struct { - raw []byte - ciphertext []byte -} - -func (m *clientKeyExchangeMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - length := len(m.ciphertext) - x := make([]byte, length+4) - x[0] = typeClientKeyExchange - x[1] = uint8(length >> 16) - x[2] = uint8(length >> 8) - x[3] = uint8(length) - copy(x[4:], m.ciphertext) - - m.raw = x - return x -} - -func (m *clientKeyExchangeMsg) unmarshal(data []byte) bool { - m.raw = data - if len(data) < 4 { - return false - } - l := int(data[1])<<16 | int(data[2])<<8 | int(data[3]) - if l != len(data)-4 { - return false - } - m.ciphertext = data[4:] - return true -} - -type finishedMsg struct { - raw []byte - verifyData []byte -} - -func (m *finishedMsg) marshal() []byte { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeFinished) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.verifyData) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *finishedMsg) unmarshal(data []byte) bool { - m.raw = data - s := cryptobyte.String(data) - return s.Skip(1) && - readUint24LengthPrefixed(&s, &m.verifyData) && - s.Empty() -} - -type certificateRequestMsg struct { - raw []byte - // hasSignatureAlgorithm indicates whether this message includes a list of - // supported signature algorithms. This change was introduced with TLS 1.2. - hasSignatureAlgorithm bool - - certificateTypes []byte - supportedSignatureAlgorithms []SignatureScheme - certificateAuthorities [][]byte -} - -func (m *certificateRequestMsg) marshal() (x []byte) { - if m.raw != nil { - return m.raw - } - - // See RFC 4346, Section 7.4.4. - length := 1 + len(m.certificateTypes) + 2 - casLength := 0 - for _, ca := range m.certificateAuthorities { - casLength += 2 + len(ca) - } - length += casLength - - if m.hasSignatureAlgorithm { - length += 2 + 2*len(m.supportedSignatureAlgorithms) - } - - x = make([]byte, 4+length) - x[0] = typeCertificateRequest - x[1] = uint8(length >> 16) - x[2] = uint8(length >> 8) - x[3] = uint8(length) - - x[4] = uint8(len(m.certificateTypes)) - - copy(x[5:], m.certificateTypes) - y := x[5+len(m.certificateTypes):] - - if m.hasSignatureAlgorithm { - n := len(m.supportedSignatureAlgorithms) * 2 - y[0] = uint8(n >> 8) - y[1] = uint8(n) - y = y[2:] - for _, sigAlgo := range m.supportedSignatureAlgorithms { - y[0] = uint8(sigAlgo >> 8) - y[1] = uint8(sigAlgo) - y = y[2:] - } - } - - y[0] = uint8(casLength >> 8) - y[1] = uint8(casLength) - y = y[2:] - for _, ca := range m.certificateAuthorities { - y[0] = uint8(len(ca) >> 8) - y[1] = uint8(len(ca)) - y = y[2:] - copy(y, ca) - y = y[len(ca):] - } - - m.raw = x - return -} - -func (m *certificateRequestMsg) unmarshal(data []byte) bool { - m.raw = data - - if len(data) < 5 { - return false - } - - length := uint32(data[1])<<16 | uint32(data[2])<<8 | uint32(data[3]) - if uint32(len(data))-4 != length { - return false - } - - numCertTypes := int(data[4]) - data = data[5:] - if numCertTypes == 0 || len(data) <= numCertTypes { - return false - } - - m.certificateTypes = make([]byte, numCertTypes) - if copy(m.certificateTypes, data) != numCertTypes { - return false - } - - data = data[numCertTypes:] - - if m.hasSignatureAlgorithm { - if len(data) < 2 { - return false - } - sigAndHashLen := uint16(data[0])<<8 | uint16(data[1]) - data = data[2:] - if sigAndHashLen&1 != 0 { - return false - } - if len(data) < int(sigAndHashLen) { - return false - } - numSigAlgos := sigAndHashLen / 2 - m.supportedSignatureAlgorithms = make([]SignatureScheme, numSigAlgos) - for i := range m.supportedSignatureAlgorithms { - m.supportedSignatureAlgorithms[i] = SignatureScheme(data[0])<<8 | SignatureScheme(data[1]) - data = data[2:] - } - } - - if len(data) < 2 { - return false - } - casLength := uint16(data[0])<<8 | uint16(data[1]) - data = data[2:] - if len(data) < int(casLength) { - return false - } - cas := make([]byte, casLength) - copy(cas, data) - data = data[casLength:] - - m.certificateAuthorities = nil - for len(cas) > 0 { - if len(cas) < 2 { - return false - } - caLen := uint16(cas[0])<<8 | uint16(cas[1]) - cas = cas[2:] - - if len(cas) < int(caLen) { - return false - } - - m.certificateAuthorities = append(m.certificateAuthorities, cas[:caLen]) - cas = cas[caLen:] - } - - return len(data) == 0 -} - -type certificateVerifyMsg struct { - raw []byte - hasSignatureAlgorithm bool // format change introduced in TLS 1.2 - signatureAlgorithm SignatureScheme - signature []byte -} - -func (m *certificateVerifyMsg) marshal() (x []byte) { - if m.raw != nil { - return m.raw - } - - var b cryptobyte.Builder - b.AddUint8(typeCertificateVerify) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - if m.hasSignatureAlgorithm { - b.AddUint16(uint16(m.signatureAlgorithm)) - } - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.signature) - }) - }) - - m.raw = b.BytesOrPanic() - return m.raw -} - -func (m *certificateVerifyMsg) unmarshal(data []byte) bool { - m.raw = data - s := cryptobyte.String(data) - - if !s.Skip(4) { // message type and uint24 length field - return false - } - if m.hasSignatureAlgorithm { - if !s.ReadUint16((*uint16)(&m.signatureAlgorithm)) { - return false - } - } - return readUint16LengthPrefixed(&s, &m.signature) && s.Empty() -} - -type newSessionTicketMsg struct { - raw []byte - ticket []byte -} - -func (m *newSessionTicketMsg) marshal() (x []byte) { - if m.raw != nil { - return m.raw - } - - // See RFC 5077, Section 3.3. - ticketLen := len(m.ticket) - length := 2 + 4 + ticketLen - x = make([]byte, 4+length) - x[0] = typeNewSessionTicket - x[1] = uint8(length >> 16) - x[2] = uint8(length >> 8) - x[3] = uint8(length) - x[8] = uint8(ticketLen >> 8) - x[9] = uint8(ticketLen) - copy(x[10:], m.ticket) - - m.raw = x - - return -} - -func (m *newSessionTicketMsg) unmarshal(data []byte) bool { - m.raw = data - - if len(data) < 10 { - return false - } - - length := uint32(data[1])<<16 | uint32(data[2])<<8 | uint32(data[3]) - if uint32(len(data))-4 != length { - return false - } - - ticketLen := int(data[8])<<8 + int(data[9]) - if len(data)-10 != ticketLen { - return false - } - - m.ticket = data[10:] - - return true -} - -type helloRequestMsg struct { -} - -func (*helloRequestMsg) marshal() []byte { - return []byte{typeHelloRequest, 0, 0, 0} -} - -func (*helloRequestMsg) unmarshal(data []byte) bool { - return len(data) == 4 -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/handshake_server.go b/vendor/github.com/quic-go/qtls-go1-19/handshake_server.go deleted file mode 100644 index b363d53fef..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/handshake_server.go +++ /dev/null @@ -1,913 +0,0 @@ -// Copyright 2009 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 qtls - -import ( - "context" - "crypto" - "crypto/ecdsa" - "crypto/ed25519" - "crypto/rsa" - "crypto/subtle" - "crypto/x509" - "errors" - "fmt" - "hash" - "io" - "sync/atomic" - "time" -) - -// serverHandshakeState contains details of a server handshake in progress. -// It's discarded once the handshake has completed. -type serverHandshakeState struct { - c *Conn - ctx context.Context - clientHello *clientHelloMsg - hello *serverHelloMsg - suite *cipherSuite - ecdheOk bool - ecSignOk bool - rsaDecryptOk bool - rsaSignOk bool - sessionState *sessionState - finishedHash finishedHash - masterSecret []byte - cert *Certificate -} - -// serverHandshake performs a TLS handshake as a server. -func (c *Conn) serverHandshake(ctx context.Context) error { - c.setAlternativeRecordLayer() - - clientHello, err := c.readClientHello(ctx) - if err != nil { - return err - } - - if c.vers == VersionTLS13 { - hs := serverHandshakeStateTLS13{ - c: c, - ctx: ctx, - clientHello: clientHello, - } - return hs.handshake() - } else if c.extraConfig.usesAlternativeRecordLayer() { - // This should already have been caught by the check that the ClientHello doesn't - // offer any (supported) versions older than TLS 1.3. - // Check again to make sure we can't be tricked into using an older version. - c.sendAlert(alertProtocolVersion) - return errors.New("tls: negotiated TLS < 1.3 when using QUIC") - } - - hs := serverHandshakeState{ - c: c, - ctx: ctx, - clientHello: clientHello, - } - return hs.handshake() -} - -func (hs *serverHandshakeState) handshake() error { - c := hs.c - - if err := hs.processClientHello(); err != nil { - return err - } - - // For an overview of TLS handshaking, see RFC 5246, Section 7.3. - c.buffering = true - if hs.checkForResumption() { - // The client has included a session ticket and so we do an abbreviated handshake. - c.didResume = true - if err := hs.doResumeHandshake(); err != nil { - return err - } - if err := hs.establishKeys(); err != nil { - return err - } - if err := hs.sendSessionTicket(); err != nil { - return err - } - if err := hs.sendFinished(c.serverFinished[:]); err != nil { - return err - } - if _, err := c.flush(); err != nil { - return err - } - c.clientFinishedIsFirst = false - if err := hs.readFinished(nil); err != nil { - return err - } - } else { - // The client didn't include a session ticket, or it wasn't - // valid so we do a full handshake. - if err := hs.pickCipherSuite(); err != nil { - return err - } - if err := hs.doFullHandshake(); err != nil { - return err - } - if err := hs.establishKeys(); err != nil { - return err - } - if err := hs.readFinished(c.clientFinished[:]); err != nil { - return err - } - c.clientFinishedIsFirst = true - c.buffering = true - if err := hs.sendSessionTicket(); err != nil { - return err - } - if err := hs.sendFinished(nil); err != nil { - return err - } - if _, err := c.flush(); err != nil { - return err - } - } - - c.ekm = ekmFromMasterSecret(c.vers, hs.suite, hs.masterSecret, hs.clientHello.random, hs.hello.random) - atomic.StoreUint32(&c.handshakeStatus, 1) - - c.updateConnectionState() - return nil -} - -// readClientHello reads a ClientHello message and selects the protocol version. -func (c *Conn) readClientHello(ctx context.Context) (*clientHelloMsg, error) { - msg, err := c.readHandshake() - if err != nil { - return nil, err - } - clientHello, ok := msg.(*clientHelloMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return nil, unexpectedMessageError(clientHello, msg) - } - - var configForClient *config - originalConfig := c.config - if c.config.GetConfigForClient != nil { - chi := newClientHelloInfo(ctx, c, clientHello) - if cfc, err := c.config.GetConfigForClient(chi); err != nil { - c.sendAlert(alertInternalError) - return nil, err - } else if cfc != nil { - configForClient = fromConfig(cfc) - c.config = configForClient - } - } - c.ticketKeys = originalConfig.ticketKeys(configForClient) - - clientVersions := clientHello.supportedVersions - if len(clientHello.supportedVersions) == 0 { - clientVersions = supportedVersionsFromMax(clientHello.vers) - } - if c.extraConfig.usesAlternativeRecordLayer() { - // In QUIC, the client MUST NOT offer any old TLS versions. - // Here, we can only check that none of the other supported versions of this library - // (TLS 1.0 - TLS 1.2) is offered. We don't check for any SSL versions here. - for _, ver := range clientVersions { - if ver == VersionTLS13 { - continue - } - for _, v := range supportedVersions { - if ver == v { - c.sendAlert(alertProtocolVersion) - return nil, fmt.Errorf("tls: client offered old TLS version %#x", ver) - } - } - } - // Make the config we're using allows us to use TLS 1.3. - if c.config.maxSupportedVersion(roleServer) < VersionTLS13 { - c.sendAlert(alertInternalError) - return nil, errors.New("tls: MaxVersion prevents QUIC from using TLS 1.3") - } - } - c.vers, ok = c.config.mutualVersion(roleServer, clientVersions) - if !ok { - c.sendAlert(alertProtocolVersion) - return nil, fmt.Errorf("tls: client offered only unsupported versions: %x", clientVersions) - } - c.haveVers = true - c.in.version = c.vers - c.out.version = c.vers - - return clientHello, nil -} - -func (hs *serverHandshakeState) processClientHello() error { - c := hs.c - - hs.hello = new(serverHelloMsg) - hs.hello.vers = c.vers - - foundCompression := false - // We only support null compression, so check that the client offered it. - for _, compression := range hs.clientHello.compressionMethods { - if compression == compressionNone { - foundCompression = true - break - } - } - - if !foundCompression { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: client does not support uncompressed connections") - } - - hs.hello.random = make([]byte, 32) - serverRandom := hs.hello.random - // Downgrade protection canaries. See RFC 8446, Section 4.1.3. - maxVers := c.config.maxSupportedVersion(roleServer) - if maxVers >= VersionTLS12 && c.vers < maxVers || testingOnlyForceDowngradeCanary { - if c.vers == VersionTLS12 { - copy(serverRandom[24:], downgradeCanaryTLS12) - } else { - copy(serverRandom[24:], downgradeCanaryTLS11) - } - serverRandom = serverRandom[:24] - } - _, err := io.ReadFull(c.config.rand(), serverRandom) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - - if len(hs.clientHello.secureRenegotiation) != 0 { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: initial handshake had non-empty renegotiation extension") - } - - hs.hello.secureRenegotiationSupported = hs.clientHello.secureRenegotiationSupported - hs.hello.compressionMethod = compressionNone - if len(hs.clientHello.serverName) > 0 { - c.serverName = hs.clientHello.serverName - } - - selectedProto, err := negotiateALPN(c.config.NextProtos, hs.clientHello.alpnProtocols) - if err != nil { - c.sendAlert(alertNoApplicationProtocol) - return err - } - hs.hello.alpnProtocol = selectedProto - c.clientProtocol = selectedProto - - hs.cert, err = c.config.getCertificate(newClientHelloInfo(hs.ctx, c, hs.clientHello)) - if err != nil { - if err == errNoCertificates { - c.sendAlert(alertUnrecognizedName) - } else { - c.sendAlert(alertInternalError) - } - return err - } - if hs.clientHello.scts { - hs.hello.scts = hs.cert.SignedCertificateTimestamps - } - - hs.ecdheOk = supportsECDHE(c.config, hs.clientHello.supportedCurves, hs.clientHello.supportedPoints) - - if hs.ecdheOk && len(hs.clientHello.supportedPoints) > 0 { - // Although omitting the ec_point_formats extension is permitted, some - // old OpenSSL version will refuse to handshake if not present. - // - // Per RFC 4492, section 5.1.2, implementations MUST support the - // uncompressed point format. See golang.org/issue/31943. - hs.hello.supportedPoints = []uint8{pointFormatUncompressed} - } - - if priv, ok := hs.cert.PrivateKey.(crypto.Signer); ok { - switch priv.Public().(type) { - case *ecdsa.PublicKey: - hs.ecSignOk = true - case ed25519.PublicKey: - hs.ecSignOk = true - case *rsa.PublicKey: - hs.rsaSignOk = true - default: - c.sendAlert(alertInternalError) - return fmt.Errorf("tls: unsupported signing key type (%T)", priv.Public()) - } - } - if priv, ok := hs.cert.PrivateKey.(crypto.Decrypter); ok { - switch priv.Public().(type) { - case *rsa.PublicKey: - hs.rsaDecryptOk = true - default: - c.sendAlert(alertInternalError) - return fmt.Errorf("tls: unsupported decryption key type (%T)", priv.Public()) - } - } - - return nil -} - -// negotiateALPN picks a shared ALPN protocol that both sides support in server -// preference order. If ALPN is not configured or the peer doesn't support it, -// it returns "" and no error. -func negotiateALPN(serverProtos, clientProtos []string) (string, error) { - if len(serverProtos) == 0 || len(clientProtos) == 0 { - return "", nil - } - var http11fallback bool - for _, s := range serverProtos { - for _, c := range clientProtos { - if s == c { - return s, nil - } - if s == "h2" && c == "http/1.1" { - http11fallback = true - } - } - } - // As a special case, let http/1.1 clients connect to h2 servers as if they - // didn't support ALPN. We used not to enforce protocol overlap, so over - // time a number of HTTP servers were configured with only "h2", but - // expected to accept connections from "http/1.1" clients. See Issue 46310. - if http11fallback { - return "", nil - } - return "", fmt.Errorf("tls: client requested unsupported application protocols (%s)", clientProtos) -} - -// supportsECDHE returns whether ECDHE key exchanges can be used with this -// pre-TLS 1.3 client. -func supportsECDHE(c *config, supportedCurves []CurveID, supportedPoints []uint8) bool { - supportsCurve := false - for _, curve := range supportedCurves { - if c.supportsCurve(curve) { - supportsCurve = true - break - } - } - - supportsPointFormat := false - for _, pointFormat := range supportedPoints { - if pointFormat == pointFormatUncompressed { - supportsPointFormat = true - break - } - } - // Per RFC 8422, Section 5.1.2, if the Supported Point Formats extension is - // missing, uncompressed points are supported. If supportedPoints is empty, - // the extension must be missing, as an empty extension body is rejected by - // the parser. See https://go.dev/issue/49126. - if len(supportedPoints) == 0 { - supportsPointFormat = true - } - - return supportsCurve && supportsPointFormat -} - -func (hs *serverHandshakeState) pickCipherSuite() error { - c := hs.c - - preferenceOrder := cipherSuitesPreferenceOrder - if !hasAESGCMHardwareSupport || !aesgcmPreferred(hs.clientHello.cipherSuites) { - preferenceOrder = cipherSuitesPreferenceOrderNoAES - } - - configCipherSuites := c.config.cipherSuites() - preferenceList := make([]uint16, 0, len(configCipherSuites)) - for _, suiteID := range preferenceOrder { - for _, id := range configCipherSuites { - if id == suiteID { - preferenceList = append(preferenceList, id) - break - } - } - } - - hs.suite = selectCipherSuite(preferenceList, hs.clientHello.cipherSuites, hs.cipherSuiteOk) - if hs.suite == nil { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: no cipher suite supported by both client and server") - } - c.cipherSuite = hs.suite.id - - for _, id := range hs.clientHello.cipherSuites { - if id == TLS_FALLBACK_SCSV { - // The client is doing a fallback connection. See RFC 7507. - if hs.clientHello.vers < c.config.maxSupportedVersion(roleServer) { - c.sendAlert(alertInappropriateFallback) - return errors.New("tls: client using inappropriate protocol fallback") - } - break - } - } - - return nil -} - -func (hs *serverHandshakeState) cipherSuiteOk(c *cipherSuite) bool { - if c.flags&suiteECDHE != 0 { - if !hs.ecdheOk { - return false - } - if c.flags&suiteECSign != 0 { - if !hs.ecSignOk { - return false - } - } else if !hs.rsaSignOk { - return false - } - } else if !hs.rsaDecryptOk { - return false - } - if hs.c.vers < VersionTLS12 && c.flags&suiteTLS12 != 0 { - return false - } - return true -} - -// checkForResumption reports whether we should perform resumption on this connection. -func (hs *serverHandshakeState) checkForResumption() bool { - c := hs.c - - if c.config.SessionTicketsDisabled { - return false - } - - plaintext, usedOldKey := c.decryptTicket(hs.clientHello.sessionTicket) - if plaintext == nil { - return false - } - hs.sessionState = &sessionState{usedOldKey: usedOldKey} - ok := hs.sessionState.unmarshal(plaintext) - if !ok { - return false - } - - createdAt := time.Unix(int64(hs.sessionState.createdAt), 0) - if c.config.time().Sub(createdAt) > maxSessionTicketLifetime { - return false - } - - // Never resume a session for a different TLS version. - if c.vers != hs.sessionState.vers { - return false - } - - cipherSuiteOk := false - // Check that the client is still offering the ciphersuite in the session. - for _, id := range hs.clientHello.cipherSuites { - if id == hs.sessionState.cipherSuite { - cipherSuiteOk = true - break - } - } - if !cipherSuiteOk { - return false - } - - // Check that we also support the ciphersuite from the session. - hs.suite = selectCipherSuite([]uint16{hs.sessionState.cipherSuite}, - c.config.cipherSuites(), hs.cipherSuiteOk) - if hs.suite == nil { - return false - } - - sessionHasClientCerts := len(hs.sessionState.certificates) != 0 - needClientCerts := requiresClientCert(c.config.ClientAuth) - if needClientCerts && !sessionHasClientCerts { - return false - } - if sessionHasClientCerts && c.config.ClientAuth == NoClientCert { - return false - } - - return true -} - -func (hs *serverHandshakeState) doResumeHandshake() error { - c := hs.c - - hs.hello.cipherSuite = hs.suite.id - c.cipherSuite = hs.suite.id - // We echo the client's session ID in the ServerHello to let it know - // that we're doing a resumption. - hs.hello.sessionId = hs.clientHello.sessionId - hs.hello.ticketSupported = hs.sessionState.usedOldKey - hs.finishedHash = newFinishedHash(c.vers, hs.suite) - hs.finishedHash.discardHandshakeBuffer() - hs.finishedHash.Write(hs.clientHello.marshal()) - hs.finishedHash.Write(hs.hello.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil { - return err - } - - if err := c.processCertsFromClient(Certificate{ - Certificate: hs.sessionState.certificates, - }); err != nil { - return err - } - - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - hs.masterSecret = hs.sessionState.masterSecret - - return nil -} - -func (hs *serverHandshakeState) doFullHandshake() error { - c := hs.c - - if hs.clientHello.ocspStapling && len(hs.cert.OCSPStaple) > 0 { - hs.hello.ocspStapling = true - } - - hs.hello.ticketSupported = hs.clientHello.ticketSupported && !c.config.SessionTicketsDisabled - hs.hello.cipherSuite = hs.suite.id - - hs.finishedHash = newFinishedHash(hs.c.vers, hs.suite) - if c.config.ClientAuth == NoClientCert { - // No need to keep a full record of the handshake if client - // certificates won't be used. - hs.finishedHash.discardHandshakeBuffer() - } - hs.finishedHash.Write(hs.clientHello.marshal()) - hs.finishedHash.Write(hs.hello.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil { - return err - } - - certMsg := new(certificateMsg) - certMsg.certificates = hs.cert.Certificate - hs.finishedHash.Write(certMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certMsg.marshal()); err != nil { - return err - } - - if hs.hello.ocspStapling { - certStatus := new(certificateStatusMsg) - certStatus.response = hs.cert.OCSPStaple - hs.finishedHash.Write(certStatus.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certStatus.marshal()); err != nil { - return err - } - } - - keyAgreement := hs.suite.ka(c.vers) - skx, err := keyAgreement.generateServerKeyExchange(c.config, hs.cert, hs.clientHello, hs.hello) - if err != nil { - c.sendAlert(alertHandshakeFailure) - return err - } - if skx != nil { - hs.finishedHash.Write(skx.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, skx.marshal()); err != nil { - return err - } - } - - var certReq *certificateRequestMsg - if c.config.ClientAuth >= RequestClientCert { - // Request a client certificate - certReq = new(certificateRequestMsg) - certReq.certificateTypes = []byte{ - byte(certTypeRSASign), - byte(certTypeECDSASign), - } - if c.vers >= VersionTLS12 { - certReq.hasSignatureAlgorithm = true - certReq.supportedSignatureAlgorithms = supportedSignatureAlgorithms() - } - - // An empty list of certificateAuthorities signals to - // the client that it may send any certificate in response - // to our request. When we know the CAs we trust, then - // we can send them down, so that the client can choose - // an appropriate certificate to give to us. - if c.config.ClientCAs != nil { - certReq.certificateAuthorities = c.config.ClientCAs.Subjects() - } - hs.finishedHash.Write(certReq.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certReq.marshal()); err != nil { - return err - } - } - - helloDone := new(serverHelloDoneMsg) - hs.finishedHash.Write(helloDone.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, helloDone.marshal()); err != nil { - return err - } - - if _, err := c.flush(); err != nil { - return err - } - - var pub crypto.PublicKey // public key for client auth, if any - - msg, err := c.readHandshake() - if err != nil { - return err - } - - // If we requested a client certificate, then the client must send a - // certificate message, even if it's empty. - if c.config.ClientAuth >= RequestClientCert { - certMsg, ok := msg.(*certificateMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certMsg, msg) - } - hs.finishedHash.Write(certMsg.marshal()) - - if err := c.processCertsFromClient(Certificate{ - Certificate: certMsg.certificates, - }); err != nil { - return err - } - if len(certMsg.certificates) != 0 { - pub = c.peerCertificates[0].PublicKey - } - - msg, err = c.readHandshake() - if err != nil { - return err - } - } - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - // Get client key exchange - ckx, ok := msg.(*clientKeyExchangeMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(ckx, msg) - } - hs.finishedHash.Write(ckx.marshal()) - - preMasterSecret, err := keyAgreement.processClientKeyExchange(c.config, hs.cert, ckx, c.vers) - if err != nil { - c.sendAlert(alertHandshakeFailure) - return err - } - hs.masterSecret = masterFromPreMasterSecret(c.vers, hs.suite, preMasterSecret, hs.clientHello.random, hs.hello.random) - if err := c.config.writeKeyLog(keyLogLabelTLS12, hs.clientHello.random, hs.masterSecret); err != nil { - c.sendAlert(alertInternalError) - return err - } - - // If we received a client cert in response to our certificate request message, - // the client will send us a certificateVerifyMsg immediately after the - // clientKeyExchangeMsg. This message is a digest of all preceding - // handshake-layer messages that is signed using the private key corresponding - // to the client's certificate. This allows us to verify that the client is in - // possession of the private key of the certificate. - if len(c.peerCertificates) > 0 { - msg, err = c.readHandshake() - if err != nil { - return err - } - certVerify, ok := msg.(*certificateVerifyMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certVerify, msg) - } - - var sigType uint8 - var sigHash crypto.Hash - if c.vers >= VersionTLS12 { - if !isSupportedSignatureAlgorithm(certVerify.signatureAlgorithm, certReq.supportedSignatureAlgorithms) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client certificate used with invalid signature algorithm") - } - sigType, sigHash, err = typeAndHashFromSignatureScheme(certVerify.signatureAlgorithm) - if err != nil { - return c.sendAlert(alertInternalError) - } - } else { - sigType, sigHash, err = legacyTypeAndHashFromPublicKey(pub) - if err != nil { - c.sendAlert(alertIllegalParameter) - return err - } - } - - signed := hs.finishedHash.hashForClientCertificate(sigType, sigHash, hs.masterSecret) - if err := verifyHandshakeSignature(sigType, pub, sigHash, signed, certVerify.signature); err != nil { - c.sendAlert(alertDecryptError) - return errors.New("tls: invalid signature by the client certificate: " + err.Error()) - } - - hs.finishedHash.Write(certVerify.marshal()) - } - - hs.finishedHash.discardHandshakeBuffer() - - return nil -} - -func (hs *serverHandshakeState) establishKeys() error { - c := hs.c - - clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV := - keysFromMasterSecret(c.vers, hs.suite, hs.masterSecret, hs.clientHello.random, hs.hello.random, hs.suite.macLen, hs.suite.keyLen, hs.suite.ivLen) - - var clientCipher, serverCipher any - var clientHash, serverHash hash.Hash - - if hs.suite.aead == nil { - clientCipher = hs.suite.cipher(clientKey, clientIV, true /* for reading */) - clientHash = hs.suite.mac(clientMAC) - serverCipher = hs.suite.cipher(serverKey, serverIV, false /* not for reading */) - serverHash = hs.suite.mac(serverMAC) - } else { - clientCipher = hs.suite.aead(clientKey, clientIV) - serverCipher = hs.suite.aead(serverKey, serverIV) - } - - c.in.prepareCipherSpec(c.vers, clientCipher, clientHash) - c.out.prepareCipherSpec(c.vers, serverCipher, serverHash) - - return nil -} - -func (hs *serverHandshakeState) readFinished(out []byte) error { - c := hs.c - - if err := c.readChangeCipherSpec(); err != nil { - return err - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - clientFinished, ok := msg.(*finishedMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(clientFinished, msg) - } - - verify := hs.finishedHash.clientSum(hs.masterSecret) - if len(verify) != len(clientFinished.verifyData) || - subtle.ConstantTimeCompare(verify, clientFinished.verifyData) != 1 { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: client's Finished message is incorrect") - } - - hs.finishedHash.Write(clientFinished.marshal()) - copy(out, verify) - return nil -} - -func (hs *serverHandshakeState) sendSessionTicket() error { - // ticketSupported is set in a resumption handshake if the - // ticket from the client was encrypted with an old session - // ticket key and thus a refreshed ticket should be sent. - if !hs.hello.ticketSupported { - return nil - } - - c := hs.c - m := new(newSessionTicketMsg) - - createdAt := uint64(c.config.time().Unix()) - if hs.sessionState != nil { - // If this is re-wrapping an old key, then keep - // the original time it was created. - createdAt = hs.sessionState.createdAt - } - - var certsFromClient [][]byte - for _, cert := range c.peerCertificates { - certsFromClient = append(certsFromClient, cert.Raw) - } - state := sessionState{ - vers: c.vers, - cipherSuite: hs.suite.id, - createdAt: createdAt, - masterSecret: hs.masterSecret, - certificates: certsFromClient, - } - var err error - m.ticket, err = c.encryptTicket(state.marshal()) - if err != nil { - return err - } - - hs.finishedHash.Write(m.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, m.marshal()); err != nil { - return err - } - - return nil -} - -func (hs *serverHandshakeState) sendFinished(out []byte) error { - c := hs.c - - if _, err := c.writeRecord(recordTypeChangeCipherSpec, []byte{1}); err != nil { - return err - } - - finished := new(finishedMsg) - finished.verifyData = hs.finishedHash.serverSum(hs.masterSecret) - hs.finishedHash.Write(finished.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, finished.marshal()); err != nil { - return err - } - - copy(out, finished.verifyData) - - return nil -} - -// processCertsFromClient takes a chain of client certificates either from a -// Certificates message or from a sessionState and verifies them. It returns -// the public key of the leaf certificate. -func (c *Conn) processCertsFromClient(certificate Certificate) error { - certificates := certificate.Certificate - certs := make([]*x509.Certificate, len(certificates)) - var err error - for i, asn1Data := range certificates { - if certs[i], err = x509.ParseCertificate(asn1Data); err != nil { - c.sendAlert(alertBadCertificate) - return errors.New("tls: failed to parse client certificate: " + err.Error()) - } - } - - if len(certs) == 0 && requiresClientCert(c.config.ClientAuth) { - c.sendAlert(alertBadCertificate) - return errors.New("tls: client didn't provide a certificate") - } - - if c.config.ClientAuth >= VerifyClientCertIfGiven && len(certs) > 0 { - opts := x509.VerifyOptions{ - Roots: c.config.ClientCAs, - CurrentTime: c.config.time(), - Intermediates: x509.NewCertPool(), - KeyUsages: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth}, - } - - for _, cert := range certs[1:] { - opts.Intermediates.AddCert(cert) - } - - chains, err := certs[0].Verify(opts) - if err != nil { - c.sendAlert(alertBadCertificate) - return errors.New("tls: failed to verify client certificate: " + err.Error()) - } - - c.verifiedChains = chains - } - - c.peerCertificates = certs - c.ocspResponse = certificate.OCSPStaple - c.scts = certificate.SignedCertificateTimestamps - - if len(certs) > 0 { - switch certs[0].PublicKey.(type) { - case *ecdsa.PublicKey, *rsa.PublicKey, ed25519.PublicKey: - default: - c.sendAlert(alertUnsupportedCertificate) - return fmt.Errorf("tls: client certificate contains an unsupported public key of type %T", certs[0].PublicKey) - } - } - - if c.config.VerifyPeerCertificate != nil { - if err := c.config.VerifyPeerCertificate(certificates, c.verifiedChains); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - return nil -} - -func newClientHelloInfo(ctx context.Context, c *Conn, clientHello *clientHelloMsg) *ClientHelloInfo { - supportedVersions := clientHello.supportedVersions - if len(clientHello.supportedVersions) == 0 { - supportedVersions = supportedVersionsFromMax(clientHello.vers) - } - - return toClientHelloInfo(&clientHelloInfo{ - CipherSuites: clientHello.cipherSuites, - ServerName: clientHello.serverName, - SupportedCurves: clientHello.supportedCurves, - SupportedPoints: clientHello.supportedPoints, - SignatureSchemes: clientHello.supportedSignatureAlgorithms, - SupportedProtos: clientHello.alpnProtocols, - SupportedVersions: supportedVersions, - Conn: c.conn, - config: toConfig(c.config), - ctx: ctx, - }) -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/handshake_server_tls13.go b/vendor/github.com/quic-go/qtls-go1-19/handshake_server_tls13.go deleted file mode 100644 index 3801777686..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/handshake_server_tls13.go +++ /dev/null @@ -1,902 +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. - -package qtls - -import ( - "bytes" - "context" - "crypto" - "crypto/hmac" - "crypto/rsa" - "errors" - "hash" - "io" - "sync/atomic" - "time" -) - -// maxClientPSKIdentities is the number of client PSK identities the server will -// attempt to validate. It will ignore the rest not to let cheap ClientHello -// messages cause too much work in session ticket decryption attempts. -const maxClientPSKIdentities = 5 - -type serverHandshakeStateTLS13 struct { - c *Conn - ctx context.Context - clientHello *clientHelloMsg - hello *serverHelloMsg - alpnNegotiationErr error - encryptedExtensions *encryptedExtensionsMsg - sentDummyCCS bool - usingPSK bool - suite *cipherSuiteTLS13 - cert *Certificate - sigAlg SignatureScheme - earlySecret []byte - sharedKey []byte - handshakeSecret []byte - masterSecret []byte - trafficSecret []byte // client_application_traffic_secret_0 - transcript hash.Hash - clientFinished []byte -} - -func (hs *serverHandshakeStateTLS13) handshake() error { - c := hs.c - - if needFIPS() { - return errors.New("tls: internal error: TLS 1.3 reached in FIPS mode") - } - - // For an overview of the TLS 1.3 handshake, see RFC 8446, Section 2. - if err := hs.processClientHello(); err != nil { - return err - } - if err := hs.checkForResumption(); err != nil { - return err - } - c.updateConnectionState() - if err := hs.pickCertificate(); err != nil { - return err - } - c.buffering = true - if err := hs.sendServerParameters(); err != nil { - return err - } - if err := hs.sendServerCertificate(); err != nil { - return err - } - if err := hs.sendServerFinished(); err != nil { - return err - } - // Note that at this point we could start sending application data without - // waiting for the client's second flight, but the application might not - // expect the lack of replay protection of the ClientHello parameters. - if _, err := c.flush(); err != nil { - return err - } - if err := hs.readClientCertificate(); err != nil { - return err - } - c.updateConnectionState() - if err := hs.readClientFinished(); err != nil { - return err - } - - atomic.StoreUint32(&c.handshakeStatus, 1) - c.updateConnectionState() - return nil -} - -func (hs *serverHandshakeStateTLS13) processClientHello() error { - c := hs.c - - hs.hello = new(serverHelloMsg) - hs.encryptedExtensions = new(encryptedExtensionsMsg) - - // TLS 1.3 froze the ServerHello.legacy_version field, and uses - // supported_versions instead. See RFC 8446, sections 4.1.3 and 4.2.1. - hs.hello.vers = VersionTLS12 - hs.hello.supportedVersion = c.vers - - if len(hs.clientHello.supportedVersions) == 0 { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client used the legacy version field to negotiate TLS 1.3") - } - - // Abort if the client is doing a fallback and landing lower than what we - // support. See RFC 7507, which however does not specify the interaction - // with supported_versions. The only difference is that with - // supported_versions a client has a chance to attempt a [TLS 1.2, TLS 1.4] - // handshake in case TLS 1.3 is broken but 1.2 is not. Alas, in that case, - // it will have to drop the TLS_FALLBACK_SCSV protection if it falls back to - // TLS 1.2, because a TLS 1.3 server would abort here. The situation before - // supported_versions was not better because there was just no way to do a - // TLS 1.4 handshake without risking the server selecting TLS 1.3. - for _, id := range hs.clientHello.cipherSuites { - if id == TLS_FALLBACK_SCSV { - // Use c.vers instead of max(supported_versions) because an attacker - // could defeat this by adding an arbitrary high version otherwise. - if c.vers < c.config.maxSupportedVersion(roleServer) { - c.sendAlert(alertInappropriateFallback) - return errors.New("tls: client using inappropriate protocol fallback") - } - break - } - } - - if len(hs.clientHello.compressionMethods) != 1 || - hs.clientHello.compressionMethods[0] != compressionNone { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: TLS 1.3 client supports illegal compression methods") - } - - hs.hello.random = make([]byte, 32) - if _, err := io.ReadFull(c.config.rand(), hs.hello.random); err != nil { - c.sendAlert(alertInternalError) - return err - } - - if len(hs.clientHello.secureRenegotiation) != 0 { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: initial handshake had non-empty renegotiation extension") - } - - hs.hello.sessionId = hs.clientHello.sessionId - hs.hello.compressionMethod = compressionNone - - if hs.suite == nil { - var preferenceList []uint16 - for _, suiteID := range c.config.CipherSuites { - for _, suite := range cipherSuitesTLS13 { - if suite.id == suiteID { - preferenceList = append(preferenceList, suiteID) - break - } - } - } - if len(preferenceList) == 0 { - preferenceList = defaultCipherSuitesTLS13 - if !hasAESGCMHardwareSupport || !aesgcmPreferred(hs.clientHello.cipherSuites) { - preferenceList = defaultCipherSuitesTLS13NoAES - } - } - for _, suiteID := range preferenceList { - hs.suite = mutualCipherSuiteTLS13(hs.clientHello.cipherSuites, suiteID) - if hs.suite != nil { - break - } - } - } - if hs.suite == nil { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: no cipher suite supported by both client and server") - } - c.cipherSuite = hs.suite.id - hs.hello.cipherSuite = hs.suite.id - hs.transcript = hs.suite.hash.New() - - // Pick the ECDHE group in server preference order, but give priority to - // groups with a key share, to avoid a HelloRetryRequest round-trip. - var selectedGroup CurveID - var clientKeyShare *keyShare -GroupSelection: - for _, preferredGroup := range c.config.curvePreferences() { - for _, ks := range hs.clientHello.keyShares { - if ks.group == preferredGroup { - selectedGroup = ks.group - clientKeyShare = &ks - break GroupSelection - } - } - if selectedGroup != 0 { - continue - } - for _, group := range hs.clientHello.supportedCurves { - if group == preferredGroup { - selectedGroup = group - break - } - } - } - if selectedGroup == 0 { - c.sendAlert(alertHandshakeFailure) - return errors.New("tls: no ECDHE curve supported by both client and server") - } - if clientKeyShare == nil { - if err := hs.doHelloRetryRequest(selectedGroup); err != nil { - return err - } - clientKeyShare = &hs.clientHello.keyShares[0] - } - - if _, ok := curveForCurveID(selectedGroup); selectedGroup != X25519 && !ok { - c.sendAlert(alertInternalError) - return errors.New("tls: CurvePreferences includes unsupported curve") - } - params, err := generateECDHEParameters(c.config.rand(), selectedGroup) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - hs.hello.serverShare = keyShare{group: selectedGroup, data: params.PublicKey()} - hs.sharedKey = params.SharedKey(clientKeyShare.data) - if hs.sharedKey == nil { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: invalid client key share") - } - - c.serverName = hs.clientHello.serverName - - if c.extraConfig != nil && c.extraConfig.ReceivedExtensions != nil { - c.extraConfig.ReceivedExtensions(typeClientHello, hs.clientHello.additionalExtensions) - } - - selectedProto, err := negotiateALPN(c.config.NextProtos, hs.clientHello.alpnProtocols) - if err != nil { - hs.alpnNegotiationErr = err - } - hs.encryptedExtensions.alpnProtocol = selectedProto - c.clientProtocol = selectedProto - - return nil -} - -func (hs *serverHandshakeStateTLS13) checkForResumption() error { - c := hs.c - - if c.config.SessionTicketsDisabled { - return nil - } - - modeOK := false - for _, mode := range hs.clientHello.pskModes { - if mode == pskModeDHE { - modeOK = true - break - } - } - if !modeOK { - return nil - } - - if len(hs.clientHello.pskIdentities) != len(hs.clientHello.pskBinders) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: invalid or missing PSK binders") - } - if len(hs.clientHello.pskIdentities) == 0 { - return nil - } - - for i, identity := range hs.clientHello.pskIdentities { - if i >= maxClientPSKIdentities { - break - } - - plaintext, _ := c.decryptTicket(identity.label) - if plaintext == nil { - continue - } - sessionState := new(sessionStateTLS13) - if ok := sessionState.unmarshal(plaintext); !ok { - continue - } - - if hs.clientHello.earlyData { - if sessionState.maxEarlyData == 0 { - c.sendAlert(alertUnsupportedExtension) - return errors.New("tls: client sent unexpected early data") - } - - if hs.alpnNegotiationErr == nil && sessionState.alpn == c.clientProtocol && - c.extraConfig != nil && c.extraConfig.MaxEarlyData > 0 && - c.extraConfig.Accept0RTT != nil && c.extraConfig.Accept0RTT(sessionState.appData) { - hs.encryptedExtensions.earlyData = true - c.used0RTT = true - } - } - - createdAt := time.Unix(int64(sessionState.createdAt), 0) - if c.config.time().Sub(createdAt) > maxSessionTicketLifetime { - continue - } - - // We don't check the obfuscated ticket age because it's affected by - // clock skew and it's only a freshness signal useful for shrinking the - // window for replay attacks, which don't affect us as we don't do 0-RTT. - - pskSuite := cipherSuiteTLS13ByID(sessionState.cipherSuite) - if pskSuite == nil || pskSuite.hash != hs.suite.hash { - continue - } - - // PSK connections don't re-establish client certificates, but carry - // them over in the session ticket. Ensure the presence of client certs - // in the ticket is consistent with the configured requirements. - sessionHasClientCerts := len(sessionState.certificate.Certificate) != 0 - needClientCerts := requiresClientCert(c.config.ClientAuth) - if needClientCerts && !sessionHasClientCerts { - continue - } - if sessionHasClientCerts && c.config.ClientAuth == NoClientCert { - continue - } - - psk := hs.suite.expandLabel(sessionState.resumptionSecret, "resumption", - nil, hs.suite.hash.Size()) - hs.earlySecret = hs.suite.extract(psk, nil) - binderKey := hs.suite.deriveSecret(hs.earlySecret, resumptionBinderLabel, nil) - // Clone the transcript in case a HelloRetryRequest was recorded. - transcript := cloneHash(hs.transcript, hs.suite.hash) - if transcript == nil { - c.sendAlert(alertInternalError) - return errors.New("tls: internal error: failed to clone hash") - } - transcript.Write(hs.clientHello.marshalWithoutBinders()) - pskBinder := hs.suite.finishedHash(binderKey, transcript) - if !hmac.Equal(hs.clientHello.pskBinders[i], pskBinder) { - c.sendAlert(alertDecryptError) - return errors.New("tls: invalid PSK binder") - } - - c.didResume = true - if err := c.processCertsFromClient(sessionState.certificate); err != nil { - return err - } - - h := cloneHash(hs.transcript, hs.suite.hash) - h.Write(hs.clientHello.marshal()) - if hs.encryptedExtensions.earlyData { - clientEarlySecret := hs.suite.deriveSecret(hs.earlySecret, "c e traffic", h) - c.in.exportKey(Encryption0RTT, hs.suite, clientEarlySecret) - if err := c.config.writeKeyLog(keyLogLabelEarlyTraffic, hs.clientHello.random, clientEarlySecret); err != nil { - c.sendAlert(alertInternalError) - return err - } - } - - hs.hello.selectedIdentityPresent = true - hs.hello.selectedIdentity = uint16(i) - hs.usingPSK = true - return nil - } - - return nil -} - -// cloneHash uses the encoding.BinaryMarshaler and encoding.BinaryUnmarshaler -// interfaces implemented by standard library hashes to clone the state of in -// to a new instance of h. It returns nil if the operation fails. -func cloneHash(in hash.Hash, h crypto.Hash) hash.Hash { - // Recreate the interface to avoid importing encoding. - type binaryMarshaler interface { - MarshalBinary() (data []byte, err error) - UnmarshalBinary(data []byte) error - } - marshaler, ok := in.(binaryMarshaler) - if !ok { - return nil - } - state, err := marshaler.MarshalBinary() - if err != nil { - return nil - } - out := h.New() - unmarshaler, ok := out.(binaryMarshaler) - if !ok { - return nil - } - if err := unmarshaler.UnmarshalBinary(state); err != nil { - return nil - } - return out -} - -func (hs *serverHandshakeStateTLS13) pickCertificate() error { - c := hs.c - - // Only one of PSK and certificates are used at a time. - if hs.usingPSK { - return nil - } - - // signature_algorithms is required in TLS 1.3. See RFC 8446, Section 4.2.3. - if len(hs.clientHello.supportedSignatureAlgorithms) == 0 { - return c.sendAlert(alertMissingExtension) - } - - certificate, err := c.config.getCertificate(newClientHelloInfo(hs.ctx, c, hs.clientHello)) - if err != nil { - if err == errNoCertificates { - c.sendAlert(alertUnrecognizedName) - } else { - c.sendAlert(alertInternalError) - } - return err - } - hs.sigAlg, err = selectSignatureScheme(c.vers, certificate, hs.clientHello.supportedSignatureAlgorithms) - if err != nil { - // getCertificate returned a certificate that is unsupported or - // incompatible with the client's signature algorithms. - c.sendAlert(alertHandshakeFailure) - return err - } - hs.cert = certificate - - return nil -} - -// sendDummyChangeCipherSpec sends a ChangeCipherSpec record for compatibility -// with middleboxes that didn't implement TLS correctly. See RFC 8446, Appendix D.4. -func (hs *serverHandshakeStateTLS13) sendDummyChangeCipherSpec() error { - if hs.sentDummyCCS { - return nil - } - hs.sentDummyCCS = true - - _, err := hs.c.writeRecord(recordTypeChangeCipherSpec, []byte{1}) - return err -} - -func (hs *serverHandshakeStateTLS13) doHelloRetryRequest(selectedGroup CurveID) error { - c := hs.c - - // The first ClientHello gets double-hashed into the transcript upon a - // HelloRetryRequest. See RFC 8446, Section 4.4.1. - hs.transcript.Write(hs.clientHello.marshal()) - chHash := hs.transcript.Sum(nil) - hs.transcript.Reset() - hs.transcript.Write([]byte{typeMessageHash, 0, 0, uint8(len(chHash))}) - hs.transcript.Write(chHash) - - helloRetryRequest := &serverHelloMsg{ - vers: hs.hello.vers, - random: helloRetryRequestRandom, - sessionId: hs.hello.sessionId, - cipherSuite: hs.hello.cipherSuite, - compressionMethod: hs.hello.compressionMethod, - supportedVersion: hs.hello.supportedVersion, - selectedGroup: selectedGroup, - } - - hs.transcript.Write(helloRetryRequest.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, helloRetryRequest.marshal()); err != nil { - return err - } - - if err := hs.sendDummyChangeCipherSpec(); err != nil { - return err - } - - msg, err := c.readHandshake() - if err != nil { - return err - } - - clientHello, ok := msg.(*clientHelloMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(clientHello, msg) - } - - if len(clientHello.keyShares) != 1 || clientHello.keyShares[0].group != selectedGroup { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client sent invalid key share in second ClientHello") - } - - if clientHello.earlyData { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client indicated early data in second ClientHello") - } - - if illegalClientHelloChange(clientHello, hs.clientHello) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client illegally modified second ClientHello") - } - - if clientHello.earlyData { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client offered 0-RTT data in second ClientHello") - } - - hs.clientHello = clientHello - return nil -} - -// illegalClientHelloChange reports whether the two ClientHello messages are -// different, with the exception of the changes allowed before and after a -// HelloRetryRequest. See RFC 8446, Section 4.1.2. -func illegalClientHelloChange(ch, ch1 *clientHelloMsg) bool { - if len(ch.supportedVersions) != len(ch1.supportedVersions) || - len(ch.cipherSuites) != len(ch1.cipherSuites) || - len(ch.supportedCurves) != len(ch1.supportedCurves) || - len(ch.supportedSignatureAlgorithms) != len(ch1.supportedSignatureAlgorithms) || - len(ch.supportedSignatureAlgorithmsCert) != len(ch1.supportedSignatureAlgorithmsCert) || - len(ch.alpnProtocols) != len(ch1.alpnProtocols) { - return true - } - for i := range ch.supportedVersions { - if ch.supportedVersions[i] != ch1.supportedVersions[i] { - return true - } - } - for i := range ch.cipherSuites { - if ch.cipherSuites[i] != ch1.cipherSuites[i] { - return true - } - } - for i := range ch.supportedCurves { - if ch.supportedCurves[i] != ch1.supportedCurves[i] { - return true - } - } - for i := range ch.supportedSignatureAlgorithms { - if ch.supportedSignatureAlgorithms[i] != ch1.supportedSignatureAlgorithms[i] { - return true - } - } - for i := range ch.supportedSignatureAlgorithmsCert { - if ch.supportedSignatureAlgorithmsCert[i] != ch1.supportedSignatureAlgorithmsCert[i] { - return true - } - } - for i := range ch.alpnProtocols { - if ch.alpnProtocols[i] != ch1.alpnProtocols[i] { - return true - } - } - return ch.vers != ch1.vers || - !bytes.Equal(ch.random, ch1.random) || - !bytes.Equal(ch.sessionId, ch1.sessionId) || - !bytes.Equal(ch.compressionMethods, ch1.compressionMethods) || - ch.serverName != ch1.serverName || - ch.ocspStapling != ch1.ocspStapling || - !bytes.Equal(ch.supportedPoints, ch1.supportedPoints) || - ch.ticketSupported != ch1.ticketSupported || - !bytes.Equal(ch.sessionTicket, ch1.sessionTicket) || - ch.secureRenegotiationSupported != ch1.secureRenegotiationSupported || - !bytes.Equal(ch.secureRenegotiation, ch1.secureRenegotiation) || - ch.scts != ch1.scts || - !bytes.Equal(ch.cookie, ch1.cookie) || - !bytes.Equal(ch.pskModes, ch1.pskModes) -} - -func (hs *serverHandshakeStateTLS13) sendServerParameters() error { - c := hs.c - - hs.transcript.Write(hs.clientHello.marshal()) - hs.transcript.Write(hs.hello.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil { - return err - } - - if err := hs.sendDummyChangeCipherSpec(); err != nil { - return err - } - - earlySecret := hs.earlySecret - if earlySecret == nil { - earlySecret = hs.suite.extract(nil, nil) - } - hs.handshakeSecret = hs.suite.extract(hs.sharedKey, - hs.suite.deriveSecret(earlySecret, "derived", nil)) - - clientSecret := hs.suite.deriveSecret(hs.handshakeSecret, - clientHandshakeTrafficLabel, hs.transcript) - c.in.exportKey(EncryptionHandshake, hs.suite, clientSecret) - c.in.setTrafficSecret(hs.suite, clientSecret) - serverSecret := hs.suite.deriveSecret(hs.handshakeSecret, - serverHandshakeTrafficLabel, hs.transcript) - c.out.exportKey(EncryptionHandshake, hs.suite, serverSecret) - c.out.setTrafficSecret(hs.suite, serverSecret) - - err := c.config.writeKeyLog(keyLogLabelClientHandshake, hs.clientHello.random, clientSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - err = c.config.writeKeyLog(keyLogLabelServerHandshake, hs.clientHello.random, serverSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - - if hs.alpnNegotiationErr != nil { - c.sendAlert(alertNoApplicationProtocol) - return hs.alpnNegotiationErr - } - if hs.c.extraConfig != nil && hs.c.extraConfig.GetExtensions != nil { - hs.encryptedExtensions.additionalExtensions = hs.c.extraConfig.GetExtensions(typeEncryptedExtensions) - } - - hs.transcript.Write(hs.encryptedExtensions.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.encryptedExtensions.marshal()); err != nil { - return err - } - - return nil -} - -func (hs *serverHandshakeStateTLS13) requestClientCert() bool { - return hs.c.config.ClientAuth >= RequestClientCert && !hs.usingPSK -} - -func (hs *serverHandshakeStateTLS13) sendServerCertificate() error { - c := hs.c - - // Only one of PSK and certificates are used at a time. - if hs.usingPSK { - return nil - } - - if hs.requestClientCert() { - // Request a client certificate - certReq := new(certificateRequestMsgTLS13) - certReq.ocspStapling = true - certReq.scts = true - certReq.supportedSignatureAlgorithms = supportedSignatureAlgorithms() - if c.config.ClientCAs != nil { - certReq.certificateAuthorities = c.config.ClientCAs.Subjects() - } - - hs.transcript.Write(certReq.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certReq.marshal()); err != nil { - return err - } - } - - certMsg := new(certificateMsgTLS13) - - certMsg.certificate = *hs.cert - certMsg.scts = hs.clientHello.scts && len(hs.cert.SignedCertificateTimestamps) > 0 - certMsg.ocspStapling = hs.clientHello.ocspStapling && len(hs.cert.OCSPStaple) > 0 - - hs.transcript.Write(certMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certMsg.marshal()); err != nil { - return err - } - - certVerifyMsg := new(certificateVerifyMsg) - certVerifyMsg.hasSignatureAlgorithm = true - certVerifyMsg.signatureAlgorithm = hs.sigAlg - - sigType, sigHash, err := typeAndHashFromSignatureScheme(hs.sigAlg) - if err != nil { - return c.sendAlert(alertInternalError) - } - - signed := signedMessage(sigHash, serverSignatureContext, hs.transcript) - signOpts := crypto.SignerOpts(sigHash) - if sigType == signatureRSAPSS { - signOpts = &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash, Hash: sigHash} - } - sig, err := hs.cert.PrivateKey.(crypto.Signer).Sign(c.config.rand(), signed, signOpts) - if err != nil { - public := hs.cert.PrivateKey.(crypto.Signer).Public() - if rsaKey, ok := public.(*rsa.PublicKey); ok && sigType == signatureRSAPSS && - rsaKey.N.BitLen()/8 < sigHash.Size()*2+2 { // key too small for RSA-PSS - c.sendAlert(alertHandshakeFailure) - } else { - c.sendAlert(alertInternalError) - } - return errors.New("tls: failed to sign handshake: " + err.Error()) - } - certVerifyMsg.signature = sig - - hs.transcript.Write(certVerifyMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certVerifyMsg.marshal()); err != nil { - return err - } - - return nil -} - -func (hs *serverHandshakeStateTLS13) sendServerFinished() error { - c := hs.c - - finished := &finishedMsg{ - verifyData: hs.suite.finishedHash(c.out.trafficSecret, hs.transcript), - } - - hs.transcript.Write(finished.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, finished.marshal()); err != nil { - return err - } - - // Derive secrets that take context through the server Finished. - - hs.masterSecret = hs.suite.extract(nil, - hs.suite.deriveSecret(hs.handshakeSecret, "derived", nil)) - - hs.trafficSecret = hs.suite.deriveSecret(hs.masterSecret, - clientApplicationTrafficLabel, hs.transcript) - serverSecret := hs.suite.deriveSecret(hs.masterSecret, - serverApplicationTrafficLabel, hs.transcript) - c.out.exportKey(EncryptionApplication, hs.suite, serverSecret) - c.out.setTrafficSecret(hs.suite, serverSecret) - - err := c.config.writeKeyLog(keyLogLabelClientTraffic, hs.clientHello.random, hs.trafficSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - err = c.config.writeKeyLog(keyLogLabelServerTraffic, hs.clientHello.random, serverSecret) - if err != nil { - c.sendAlert(alertInternalError) - return err - } - - c.ekm = hs.suite.exportKeyingMaterial(hs.masterSecret, hs.transcript) - - // If we did not request client certificates, at this point we can - // precompute the client finished and roll the transcript forward to send - // session tickets in our first flight. - if !hs.requestClientCert() { - if err := hs.sendSessionTickets(); err != nil { - return err - } - } - - return nil -} - -func (hs *serverHandshakeStateTLS13) shouldSendSessionTickets() bool { - if hs.c.config.SessionTicketsDisabled { - return false - } - - // Don't send tickets the client wouldn't use. See RFC 8446, Section 4.2.9. - for _, pskMode := range hs.clientHello.pskModes { - if pskMode == pskModeDHE { - return true - } - } - return false -} - -func (hs *serverHandshakeStateTLS13) sendSessionTickets() error { - c := hs.c - - hs.clientFinished = hs.suite.finishedHash(c.in.trafficSecret, hs.transcript) - finishedMsg := &finishedMsg{ - verifyData: hs.clientFinished, - } - hs.transcript.Write(finishedMsg.marshal()) - - if !hs.shouldSendSessionTickets() { - return nil - } - - c.resumptionSecret = hs.suite.deriveSecret(hs.masterSecret, - resumptionLabel, hs.transcript) - - // Don't send session tickets when the alternative record layer is set. - // Instead, save the resumption secret on the Conn. - // Session tickets can then be generated by calling Conn.GetSessionTicket(). - if hs.c.extraConfig != nil && hs.c.extraConfig.AlternativeRecordLayer != nil { - return nil - } - - m, err := hs.c.getSessionTicketMsg(nil) - if err != nil { - return err - } - - if _, err := c.writeRecord(recordTypeHandshake, m.marshal()); err != nil { - return err - } - - return nil -} - -func (hs *serverHandshakeStateTLS13) readClientCertificate() error { - c := hs.c - - if !hs.requestClientCert() { - // Make sure the connection is still being verified whether or not - // the server requested a client certificate. - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - return nil - } - - // If we requested a client certificate, then the client must send a - // certificate message. If it's empty, no CertificateVerify is sent. - - msg, err := c.readHandshake() - if err != nil { - return err - } - - certMsg, ok := msg.(*certificateMsgTLS13) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certMsg, msg) - } - hs.transcript.Write(certMsg.marshal()) - - if err := c.processCertsFromClient(certMsg.certificate); err != nil { - return err - } - - if c.config.VerifyConnection != nil { - if err := c.config.VerifyConnection(c.connectionStateLocked()); err != nil { - c.sendAlert(alertBadCertificate) - return err - } - } - - if len(certMsg.certificate.Certificate) != 0 { - msg, err = c.readHandshake() - if err != nil { - return err - } - - certVerify, ok := msg.(*certificateVerifyMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certVerify, msg) - } - - // See RFC 8446, Section 4.4.3. - if !isSupportedSignatureAlgorithm(certVerify.signatureAlgorithm, supportedSignatureAlgorithms()) { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client certificate used with invalid signature algorithm") - } - sigType, sigHash, err := typeAndHashFromSignatureScheme(certVerify.signatureAlgorithm) - if err != nil { - return c.sendAlert(alertInternalError) - } - if sigType == signaturePKCS1v15 || sigHash == crypto.SHA1 { - c.sendAlert(alertIllegalParameter) - return errors.New("tls: client certificate used with invalid signature algorithm") - } - signed := signedMessage(sigHash, clientSignatureContext, hs.transcript) - if err := verifyHandshakeSignature(sigType, c.peerCertificates[0].PublicKey, - sigHash, signed, certVerify.signature); err != nil { - c.sendAlert(alertDecryptError) - return errors.New("tls: invalid signature by the client certificate: " + err.Error()) - } - - hs.transcript.Write(certVerify.marshal()) - } - - // If we waited until the client certificates to send session tickets, we - // are ready to do it now. - if err := hs.sendSessionTickets(); err != nil { - return err - } - - return nil -} - -func (hs *serverHandshakeStateTLS13) readClientFinished() error { - c := hs.c - - msg, err := c.readHandshake() - if err != nil { - return err - } - - finished, ok := msg.(*finishedMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(finished, msg) - } - - if !hmac.Equal(hs.clientFinished, finished.verifyData) { - c.sendAlert(alertDecryptError) - return errors.New("tls: invalid client finished hash") - } - - c.in.exportKey(EncryptionApplication, hs.suite, hs.trafficSecret) - c.in.setTrafficSecret(hs.suite, hs.trafficSecret) - - return nil -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/key_agreement.go b/vendor/github.com/quic-go/qtls-go1-19/key_agreement.go deleted file mode 100644 index 453a8dcf08..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/key_agreement.go +++ /dev/null @@ -1,357 +0,0 @@ -// Copyright 2010 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 qtls - -import ( - "crypto" - "crypto/md5" - "crypto/rsa" - "crypto/sha1" - "crypto/x509" - "errors" - "fmt" - "io" -) - -// a keyAgreement implements the client and server side of a TLS key agreement -// protocol by generating and processing key exchange messages. -type keyAgreement interface { - // On the server side, the first two methods are called in order. - - // In the case that the key agreement protocol doesn't use a - // ServerKeyExchange message, generateServerKeyExchange can return nil, - // nil. - generateServerKeyExchange(*config, *Certificate, *clientHelloMsg, *serverHelloMsg) (*serverKeyExchangeMsg, error) - processClientKeyExchange(*config, *Certificate, *clientKeyExchangeMsg, uint16) ([]byte, error) - - // On the client side, the next two methods are called in order. - - // This method may not be called if the server doesn't send a - // ServerKeyExchange message. - processServerKeyExchange(*config, *clientHelloMsg, *serverHelloMsg, *x509.Certificate, *serverKeyExchangeMsg) error - generateClientKeyExchange(*config, *clientHelloMsg, *x509.Certificate) ([]byte, *clientKeyExchangeMsg, error) -} - -var errClientKeyExchange = errors.New("tls: invalid ClientKeyExchange message") -var errServerKeyExchange = errors.New("tls: invalid ServerKeyExchange message") - -// rsaKeyAgreement implements the standard TLS key agreement where the client -// encrypts the pre-master secret to the server's public key. -type rsaKeyAgreement struct{} - -func (ka rsaKeyAgreement) generateServerKeyExchange(config *config, cert *Certificate, clientHello *clientHelloMsg, hello *serverHelloMsg) (*serverKeyExchangeMsg, error) { - return nil, nil -} - -func (ka rsaKeyAgreement) processClientKeyExchange(config *config, cert *Certificate, ckx *clientKeyExchangeMsg, version uint16) ([]byte, error) { - if len(ckx.ciphertext) < 2 { - return nil, errClientKeyExchange - } - ciphertextLen := int(ckx.ciphertext[0])<<8 | int(ckx.ciphertext[1]) - if ciphertextLen != len(ckx.ciphertext)-2 { - return nil, errClientKeyExchange - } - ciphertext := ckx.ciphertext[2:] - - priv, ok := cert.PrivateKey.(crypto.Decrypter) - if !ok { - return nil, errors.New("tls: certificate private key does not implement crypto.Decrypter") - } - // Perform constant time RSA PKCS #1 v1.5 decryption - preMasterSecret, err := priv.Decrypt(config.rand(), ciphertext, &rsa.PKCS1v15DecryptOptions{SessionKeyLen: 48}) - if err != nil { - return nil, err - } - // We don't check the version number in the premaster secret. For one, - // by checking it, we would leak information about the validity of the - // encrypted pre-master secret. Secondly, it provides only a small - // benefit against a downgrade attack and some implementations send the - // wrong version anyway. See the discussion at the end of section - // 7.4.7.1 of RFC 4346. - return preMasterSecret, nil -} - -func (ka rsaKeyAgreement) processServerKeyExchange(config *config, clientHello *clientHelloMsg, serverHello *serverHelloMsg, cert *x509.Certificate, skx *serverKeyExchangeMsg) error { - return errors.New("tls: unexpected ServerKeyExchange") -} - -func (ka rsaKeyAgreement) generateClientKeyExchange(config *config, clientHello *clientHelloMsg, cert *x509.Certificate) ([]byte, *clientKeyExchangeMsg, error) { - preMasterSecret := make([]byte, 48) - preMasterSecret[0] = byte(clientHello.vers >> 8) - preMasterSecret[1] = byte(clientHello.vers) - _, err := io.ReadFull(config.rand(), preMasterSecret[2:]) - if err != nil { - return nil, nil, err - } - - rsaKey, ok := cert.PublicKey.(*rsa.PublicKey) - if !ok { - return nil, nil, errors.New("tls: server certificate contains incorrect key type for selected ciphersuite") - } - encrypted, err := rsa.EncryptPKCS1v15(config.rand(), rsaKey, preMasterSecret) - if err != nil { - return nil, nil, err - } - ckx := new(clientKeyExchangeMsg) - ckx.ciphertext = make([]byte, len(encrypted)+2) - ckx.ciphertext[0] = byte(len(encrypted) >> 8) - ckx.ciphertext[1] = byte(len(encrypted)) - copy(ckx.ciphertext[2:], encrypted) - return preMasterSecret, ckx, nil -} - -// sha1Hash calculates a SHA1 hash over the given byte slices. -func sha1Hash(slices [][]byte) []byte { - hsha1 := sha1.New() - for _, slice := range slices { - hsha1.Write(slice) - } - return hsha1.Sum(nil) -} - -// md5SHA1Hash implements TLS 1.0's hybrid hash function which consists of the -// concatenation of an MD5 and SHA1 hash. -func md5SHA1Hash(slices [][]byte) []byte { - md5sha1 := make([]byte, md5.Size+sha1.Size) - hmd5 := md5.New() - for _, slice := range slices { - hmd5.Write(slice) - } - copy(md5sha1, hmd5.Sum(nil)) - copy(md5sha1[md5.Size:], sha1Hash(slices)) - return md5sha1 -} - -// hashForServerKeyExchange hashes the given slices and returns their digest -// using the given hash function (for >= TLS 1.2) or using a default based on -// the sigType (for earlier TLS versions). For Ed25519 signatures, which don't -// do pre-hashing, it returns the concatenation of the slices. -func hashForServerKeyExchange(sigType uint8, hashFunc crypto.Hash, version uint16, slices ...[]byte) []byte { - if sigType == signatureEd25519 { - var signed []byte - for _, slice := range slices { - signed = append(signed, slice...) - } - return signed - } - if version >= VersionTLS12 { - h := hashFunc.New() - for _, slice := range slices { - h.Write(slice) - } - digest := h.Sum(nil) - return digest - } - if sigType == signatureECDSA { - return sha1Hash(slices) - } - return md5SHA1Hash(slices) -} - -// ecdheKeyAgreement implements a TLS key agreement where the server -// generates an ephemeral EC public/private key pair and signs it. The -// pre-master secret is then calculated using ECDH. The signature may -// be ECDSA, Ed25519 or RSA. -type ecdheKeyAgreement struct { - version uint16 - isRSA bool - params ecdheParameters - - // ckx and preMasterSecret are generated in processServerKeyExchange - // and returned in generateClientKeyExchange. - ckx *clientKeyExchangeMsg - preMasterSecret []byte -} - -func (ka *ecdheKeyAgreement) generateServerKeyExchange(config *config, cert *Certificate, clientHello *clientHelloMsg, hello *serverHelloMsg) (*serverKeyExchangeMsg, error) { - var curveID CurveID - for _, c := range clientHello.supportedCurves { - if config.supportsCurve(c) { - curveID = c - break - } - } - - if curveID == 0 { - return nil, errors.New("tls: no supported elliptic curves offered") - } - if _, ok := curveForCurveID(curveID); curveID != X25519 && !ok { - return nil, errors.New("tls: CurvePreferences includes unsupported curve") - } - - params, err := generateECDHEParameters(config.rand(), curveID) - if err != nil { - return nil, err - } - ka.params = params - - // See RFC 4492, Section 5.4. - ecdhePublic := params.PublicKey() - serverECDHEParams := make([]byte, 1+2+1+len(ecdhePublic)) - serverECDHEParams[0] = 3 // named curve - serverECDHEParams[1] = byte(curveID >> 8) - serverECDHEParams[2] = byte(curveID) - serverECDHEParams[3] = byte(len(ecdhePublic)) - copy(serverECDHEParams[4:], ecdhePublic) - - priv, ok := cert.PrivateKey.(crypto.Signer) - if !ok { - return nil, fmt.Errorf("tls: certificate private key of type %T does not implement crypto.Signer", cert.PrivateKey) - } - - var signatureAlgorithm SignatureScheme - var sigType uint8 - var sigHash crypto.Hash - if ka.version >= VersionTLS12 { - signatureAlgorithm, err = selectSignatureScheme(ka.version, cert, clientHello.supportedSignatureAlgorithms) - if err != nil { - return nil, err - } - sigType, sigHash, err = typeAndHashFromSignatureScheme(signatureAlgorithm) - if err != nil { - return nil, err - } - } else { - sigType, sigHash, err = legacyTypeAndHashFromPublicKey(priv.Public()) - if err != nil { - return nil, err - } - } - if (sigType == signaturePKCS1v15 || sigType == signatureRSAPSS) != ka.isRSA { - return nil, errors.New("tls: certificate cannot be used with the selected cipher suite") - } - - signed := hashForServerKeyExchange(sigType, sigHash, ka.version, clientHello.random, hello.random, serverECDHEParams) - - signOpts := crypto.SignerOpts(sigHash) - if sigType == signatureRSAPSS { - signOpts = &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash, Hash: sigHash} - } - sig, err := priv.Sign(config.rand(), signed, signOpts) - if err != nil { - return nil, errors.New("tls: failed to sign ECDHE parameters: " + err.Error()) - } - - skx := new(serverKeyExchangeMsg) - sigAndHashLen := 0 - if ka.version >= VersionTLS12 { - sigAndHashLen = 2 - } - skx.key = make([]byte, len(serverECDHEParams)+sigAndHashLen+2+len(sig)) - copy(skx.key, serverECDHEParams) - k := skx.key[len(serverECDHEParams):] - if ka.version >= VersionTLS12 { - k[0] = byte(signatureAlgorithm >> 8) - k[1] = byte(signatureAlgorithm) - k = k[2:] - } - k[0] = byte(len(sig) >> 8) - k[1] = byte(len(sig)) - copy(k[2:], sig) - - return skx, nil -} - -func (ka *ecdheKeyAgreement) processClientKeyExchange(config *config, cert *Certificate, ckx *clientKeyExchangeMsg, version uint16) ([]byte, error) { - if len(ckx.ciphertext) == 0 || int(ckx.ciphertext[0]) != len(ckx.ciphertext)-1 { - return nil, errClientKeyExchange - } - - preMasterSecret := ka.params.SharedKey(ckx.ciphertext[1:]) - if preMasterSecret == nil { - return nil, errClientKeyExchange - } - - return preMasterSecret, nil -} - -func (ka *ecdheKeyAgreement) processServerKeyExchange(config *config, clientHello *clientHelloMsg, serverHello *serverHelloMsg, cert *x509.Certificate, skx *serverKeyExchangeMsg) error { - if len(skx.key) < 4 { - return errServerKeyExchange - } - if skx.key[0] != 3 { // named curve - return errors.New("tls: server selected unsupported curve") - } - curveID := CurveID(skx.key[1])<<8 | CurveID(skx.key[2]) - - publicLen := int(skx.key[3]) - if publicLen+4 > len(skx.key) { - return errServerKeyExchange - } - serverECDHEParams := skx.key[:4+publicLen] - publicKey := serverECDHEParams[4:] - - sig := skx.key[4+publicLen:] - if len(sig) < 2 { - return errServerKeyExchange - } - - if _, ok := curveForCurveID(curveID); curveID != X25519 && !ok { - return errors.New("tls: server selected unsupported curve") - } - - params, err := generateECDHEParameters(config.rand(), curveID) - if err != nil { - return err - } - ka.params = params - - ka.preMasterSecret = params.SharedKey(publicKey) - if ka.preMasterSecret == nil { - return errServerKeyExchange - } - - ourPublicKey := params.PublicKey() - ka.ckx = new(clientKeyExchangeMsg) - ka.ckx.ciphertext = make([]byte, 1+len(ourPublicKey)) - ka.ckx.ciphertext[0] = byte(len(ourPublicKey)) - copy(ka.ckx.ciphertext[1:], ourPublicKey) - - var sigType uint8 - var sigHash crypto.Hash - if ka.version >= VersionTLS12 { - signatureAlgorithm := SignatureScheme(sig[0])<<8 | SignatureScheme(sig[1]) - sig = sig[2:] - if len(sig) < 2 { - return errServerKeyExchange - } - - if !isSupportedSignatureAlgorithm(signatureAlgorithm, clientHello.supportedSignatureAlgorithms) { - return errors.New("tls: certificate used with invalid signature algorithm") - } - sigType, sigHash, err = typeAndHashFromSignatureScheme(signatureAlgorithm) - if err != nil { - return err - } - } else { - sigType, sigHash, err = legacyTypeAndHashFromPublicKey(cert.PublicKey) - if err != nil { - return err - } - } - if (sigType == signaturePKCS1v15 || sigType == signatureRSAPSS) != ka.isRSA { - return errServerKeyExchange - } - - sigLen := int(sig[0])<<8 | int(sig[1]) - if sigLen+2 != len(sig) { - return errServerKeyExchange - } - sig = sig[2:] - - signed := hashForServerKeyExchange(sigType, sigHash, ka.version, clientHello.random, serverHello.random, serverECDHEParams) - if err := verifyHandshakeSignature(sigType, cert.PublicKey, sigHash, signed, sig); err != nil { - return errors.New("tls: invalid signature by the server certificate: " + err.Error()) - } - return nil -} - -func (ka *ecdheKeyAgreement) generateClientKeyExchange(config *config, clientHello *clientHelloMsg, cert *x509.Certificate) ([]byte, *clientKeyExchangeMsg, error) { - if ka.ckx == nil { - return nil, nil, errors.New("tls: missing ServerKeyExchange message") - } - - return ka.preMasterSecret, ka.ckx, nil -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/key_schedule.go b/vendor/github.com/quic-go/qtls-go1-19/key_schedule.go deleted file mode 100644 index da13904a6e..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/key_schedule.go +++ /dev/null @@ -1,199 +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. - -package qtls - -import ( - "crypto/elliptic" - "crypto/hmac" - "errors" - "hash" - "io" - "math/big" - - "golang.org/x/crypto/cryptobyte" - "golang.org/x/crypto/curve25519" - "golang.org/x/crypto/hkdf" -) - -// This file contains the functions necessary to compute the TLS 1.3 key -// schedule. See RFC 8446, Section 7. - -const ( - resumptionBinderLabel = "res binder" - clientHandshakeTrafficLabel = "c hs traffic" - serverHandshakeTrafficLabel = "s hs traffic" - clientApplicationTrafficLabel = "c ap traffic" - serverApplicationTrafficLabel = "s ap traffic" - exporterLabel = "exp master" - resumptionLabel = "res master" - trafficUpdateLabel = "traffic upd" -) - -// expandLabel implements HKDF-Expand-Label from RFC 8446, Section 7.1. -func (c *cipherSuiteTLS13) expandLabel(secret []byte, label string, context []byte, length int) []byte { - var hkdfLabel cryptobyte.Builder - hkdfLabel.AddUint16(uint16(length)) - hkdfLabel.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte("tls13 ")) - b.AddBytes([]byte(label)) - }) - hkdfLabel.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(context) - }) - out := make([]byte, length) - n, err := hkdf.Expand(c.hash.New, secret, hkdfLabel.BytesOrPanic()).Read(out) - if err != nil || n != length { - panic("tls: HKDF-Expand-Label invocation failed unexpectedly") - } - return out -} - -// deriveSecret implements Derive-Secret from RFC 8446, Section 7.1. -func (c *cipherSuiteTLS13) deriveSecret(secret []byte, label string, transcript hash.Hash) []byte { - if transcript == nil { - transcript = c.hash.New() - } - return c.expandLabel(secret, label, transcript.Sum(nil), c.hash.Size()) -} - -// extract implements HKDF-Extract with the cipher suite hash. -func (c *cipherSuiteTLS13) extract(newSecret, currentSecret []byte) []byte { - if newSecret == nil { - newSecret = make([]byte, c.hash.Size()) - } - return hkdf.Extract(c.hash.New, newSecret, currentSecret) -} - -// nextTrafficSecret generates the next traffic secret, given the current one, -// according to RFC 8446, Section 7.2. -func (c *cipherSuiteTLS13) nextTrafficSecret(trafficSecret []byte) []byte { - return c.expandLabel(trafficSecret, trafficUpdateLabel, nil, c.hash.Size()) -} - -// trafficKey generates traffic keys according to RFC 8446, Section 7.3. -func (c *cipherSuiteTLS13) trafficKey(trafficSecret []byte) (key, iv []byte) { - key = c.expandLabel(trafficSecret, "key", nil, c.keyLen) - iv = c.expandLabel(trafficSecret, "iv", nil, aeadNonceLength) - return -} - -// finishedHash generates the Finished verify_data or PskBinderEntry according -// to RFC 8446, Section 4.4.4. See sections 4.4 and 4.2.11.2 for the baseKey -// selection. -func (c *cipherSuiteTLS13) finishedHash(baseKey []byte, transcript hash.Hash) []byte { - finishedKey := c.expandLabel(baseKey, "finished", nil, c.hash.Size()) - verifyData := hmac.New(c.hash.New, finishedKey) - verifyData.Write(transcript.Sum(nil)) - return verifyData.Sum(nil) -} - -// exportKeyingMaterial implements RFC5705 exporters for TLS 1.3 according to -// RFC 8446, Section 7.5. -func (c *cipherSuiteTLS13) exportKeyingMaterial(masterSecret []byte, transcript hash.Hash) func(string, []byte, int) ([]byte, error) { - expMasterSecret := c.deriveSecret(masterSecret, exporterLabel, transcript) - return func(label string, context []byte, length int) ([]byte, error) { - secret := c.deriveSecret(expMasterSecret, label, nil) - h := c.hash.New() - h.Write(context) - return c.expandLabel(secret, "exporter", h.Sum(nil), length), nil - } -} - -// ecdheParameters implements Diffie-Hellman with either NIST curves or X25519, -// according to RFC 8446, Section 4.2.8.2. -type ecdheParameters interface { - CurveID() CurveID - PublicKey() []byte - SharedKey(peerPublicKey []byte) []byte -} - -func generateECDHEParameters(rand io.Reader, curveID CurveID) (ecdheParameters, error) { - if curveID == X25519 { - privateKey := make([]byte, curve25519.ScalarSize) - if _, err := io.ReadFull(rand, privateKey); err != nil { - return nil, err - } - publicKey, err := curve25519.X25519(privateKey, curve25519.Basepoint) - if err != nil { - return nil, err - } - return &x25519Parameters{privateKey: privateKey, publicKey: publicKey}, nil - } - - curve, ok := curveForCurveID(curveID) - if !ok { - return nil, errors.New("tls: internal error: unsupported curve") - } - - p := &nistParameters{curveID: curveID} - var err error - p.privateKey, p.x, p.y, err = elliptic.GenerateKey(curve, rand) - if err != nil { - return nil, err - } - return p, nil -} - -func curveForCurveID(id CurveID) (elliptic.Curve, bool) { - switch id { - case CurveP256: - return elliptic.P256(), true - case CurveP384: - return elliptic.P384(), true - case CurveP521: - return elliptic.P521(), true - default: - return nil, false - } -} - -type nistParameters struct { - privateKey []byte - x, y *big.Int // public key - curveID CurveID -} - -func (p *nistParameters) CurveID() CurveID { - return p.curveID -} - -func (p *nistParameters) PublicKey() []byte { - curve, _ := curveForCurveID(p.curveID) - return elliptic.Marshal(curve, p.x, p.y) -} - -func (p *nistParameters) SharedKey(peerPublicKey []byte) []byte { - curve, _ := curveForCurveID(p.curveID) - // Unmarshal also checks whether the given point is on the curve. - x, y := elliptic.Unmarshal(curve, peerPublicKey) - if x == nil { - return nil - } - - xShared, _ := curve.ScalarMult(x, y, p.privateKey) - sharedKey := make([]byte, (curve.Params().BitSize+7)/8) - return xShared.FillBytes(sharedKey) -} - -type x25519Parameters struct { - privateKey []byte - publicKey []byte -} - -func (p *x25519Parameters) CurveID() CurveID { - return X25519 -} - -func (p *x25519Parameters) PublicKey() []byte { - return p.publicKey[:] -} - -func (p *x25519Parameters) SharedKey(peerPublicKey []byte) []byte { - sharedKey, err := curve25519.X25519(p.privateKey, peerPublicKey) - if err != nil { - return nil - } - return sharedKey -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/notboring.go b/vendor/github.com/quic-go/qtls-go1-19/notboring.go deleted file mode 100644 index f292e4f028..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/notboring.go +++ /dev/null @@ -1,18 +0,0 @@ -// 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 qtls - -func needFIPS() bool { return false } - -func supportedSignatureAlgorithms() []SignatureScheme { - return defaultSupportedSignatureAlgorithms -} - -func fipsMinVersion(c *config) uint16 { panic("fipsMinVersion") } -func fipsMaxVersion(c *config) uint16 { panic("fipsMaxVersion") } -func fipsCurvePreferences(c *config) []CurveID { panic("fipsCurvePreferences") } -func fipsCipherSuites(c *config) []uint16 { panic("fipsCipherSuites") } - -var fipsSupportedSignatureAlgorithms []SignatureScheme diff --git a/vendor/github.com/quic-go/qtls-go1-19/prf.go b/vendor/github.com/quic-go/qtls-go1-19/prf.go deleted file mode 100644 index 9eb0221a0c..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/prf.go +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright 2009 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 qtls - -import ( - "crypto" - "crypto/hmac" - "crypto/md5" - "crypto/sha1" - "crypto/sha256" - "crypto/sha512" - "errors" - "fmt" - "hash" -) - -// Split a premaster secret in two as specified in RFC 4346, Section 5. -func splitPreMasterSecret(secret []byte) (s1, s2 []byte) { - s1 = secret[0 : (len(secret)+1)/2] - s2 = secret[len(secret)/2:] - return -} - -// pHash implements the P_hash function, as defined in RFC 4346, Section 5. -func pHash(result, secret, seed []byte, hash func() hash.Hash) { - h := hmac.New(hash, secret) - h.Write(seed) - a := h.Sum(nil) - - j := 0 - for j < len(result) { - h.Reset() - h.Write(a) - h.Write(seed) - b := h.Sum(nil) - copy(result[j:], b) - j += len(b) - - h.Reset() - h.Write(a) - a = h.Sum(nil) - } -} - -// prf10 implements the TLS 1.0 pseudo-random function, as defined in RFC 2246, Section 5. -func prf10(result, secret, label, seed []byte) { - hashSHA1 := sha1.New - hashMD5 := md5.New - - labelAndSeed := make([]byte, len(label)+len(seed)) - copy(labelAndSeed, label) - copy(labelAndSeed[len(label):], seed) - - s1, s2 := splitPreMasterSecret(secret) - pHash(result, s1, labelAndSeed, hashMD5) - result2 := make([]byte, len(result)) - pHash(result2, s2, labelAndSeed, hashSHA1) - - for i, b := range result2 { - result[i] ^= b - } -} - -// prf12 implements the TLS 1.2 pseudo-random function, as defined in RFC 5246, Section 5. -func prf12(hashFunc func() hash.Hash) func(result, secret, label, seed []byte) { - return func(result, secret, label, seed []byte) { - labelAndSeed := make([]byte, len(label)+len(seed)) - copy(labelAndSeed, label) - copy(labelAndSeed[len(label):], seed) - - pHash(result, secret, labelAndSeed, hashFunc) - } -} - -const ( - masterSecretLength = 48 // Length of a master secret in TLS 1.1. - finishedVerifyLength = 12 // Length of verify_data in a Finished message. -) - -var masterSecretLabel = []byte("master secret") -var keyExpansionLabel = []byte("key expansion") -var clientFinishedLabel = []byte("client finished") -var serverFinishedLabel = []byte("server finished") - -func prfAndHashForVersion(version uint16, suite *cipherSuite) (func(result, secret, label, seed []byte), crypto.Hash) { - switch version { - case VersionTLS10, VersionTLS11: - return prf10, crypto.Hash(0) - case VersionTLS12: - if suite.flags&suiteSHA384 != 0 { - return prf12(sha512.New384), crypto.SHA384 - } - return prf12(sha256.New), crypto.SHA256 - default: - panic("unknown version") - } -} - -func prfForVersion(version uint16, suite *cipherSuite) func(result, secret, label, seed []byte) { - prf, _ := prfAndHashForVersion(version, suite) - return prf -} - -// masterFromPreMasterSecret generates the master secret from the pre-master -// secret. See RFC 5246, Section 8.1. -func masterFromPreMasterSecret(version uint16, suite *cipherSuite, preMasterSecret, clientRandom, serverRandom []byte) []byte { - seed := make([]byte, 0, len(clientRandom)+len(serverRandom)) - seed = append(seed, clientRandom...) - seed = append(seed, serverRandom...) - - masterSecret := make([]byte, masterSecretLength) - prfForVersion(version, suite)(masterSecret, preMasterSecret, masterSecretLabel, seed) - return masterSecret -} - -// keysFromMasterSecret generates the connection keys from the master -// secret, given the lengths of the MAC key, cipher key and IV, as defined in -// RFC 2246, Section 6.3. -func keysFromMasterSecret(version uint16, suite *cipherSuite, masterSecret, clientRandom, serverRandom []byte, macLen, keyLen, ivLen int) (clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV []byte) { - seed := make([]byte, 0, len(serverRandom)+len(clientRandom)) - seed = append(seed, serverRandom...) - seed = append(seed, clientRandom...) - - n := 2*macLen + 2*keyLen + 2*ivLen - keyMaterial := make([]byte, n) - prfForVersion(version, suite)(keyMaterial, masterSecret, keyExpansionLabel, seed) - clientMAC = keyMaterial[:macLen] - keyMaterial = keyMaterial[macLen:] - serverMAC = keyMaterial[:macLen] - keyMaterial = keyMaterial[macLen:] - clientKey = keyMaterial[:keyLen] - keyMaterial = keyMaterial[keyLen:] - serverKey = keyMaterial[:keyLen] - keyMaterial = keyMaterial[keyLen:] - clientIV = keyMaterial[:ivLen] - keyMaterial = keyMaterial[ivLen:] - serverIV = keyMaterial[:ivLen] - return -} - -func newFinishedHash(version uint16, cipherSuite *cipherSuite) finishedHash { - var buffer []byte - if version >= VersionTLS12 { - buffer = []byte{} - } - - prf, hash := prfAndHashForVersion(version, cipherSuite) - if hash != 0 { - return finishedHash{hash.New(), hash.New(), nil, nil, buffer, version, prf} - } - - return finishedHash{sha1.New(), sha1.New(), md5.New(), md5.New(), buffer, version, prf} -} - -// A finishedHash calculates the hash of a set of handshake messages suitable -// for including in a Finished message. -type finishedHash struct { - client hash.Hash - server hash.Hash - - // Prior to TLS 1.2, an additional MD5 hash is required. - clientMD5 hash.Hash - serverMD5 hash.Hash - - // In TLS 1.2, a full buffer is sadly required. - buffer []byte - - version uint16 - prf func(result, secret, label, seed []byte) -} - -func (h *finishedHash) Write(msg []byte) (n int, err error) { - h.client.Write(msg) - h.server.Write(msg) - - if h.version < VersionTLS12 { - h.clientMD5.Write(msg) - h.serverMD5.Write(msg) - } - - if h.buffer != nil { - h.buffer = append(h.buffer, msg...) - } - - return len(msg), nil -} - -func (h finishedHash) Sum() []byte { - if h.version >= VersionTLS12 { - return h.client.Sum(nil) - } - - out := make([]byte, 0, md5.Size+sha1.Size) - out = h.clientMD5.Sum(out) - return h.client.Sum(out) -} - -// clientSum returns the contents of the verify_data member of a client's -// Finished message. -func (h finishedHash) clientSum(masterSecret []byte) []byte { - out := make([]byte, finishedVerifyLength) - h.prf(out, masterSecret, clientFinishedLabel, h.Sum()) - return out -} - -// serverSum returns the contents of the verify_data member of a server's -// Finished message. -func (h finishedHash) serverSum(masterSecret []byte) []byte { - out := make([]byte, finishedVerifyLength) - h.prf(out, masterSecret, serverFinishedLabel, h.Sum()) - return out -} - -// hashForClientCertificate returns the handshake messages so far, pre-hashed if -// necessary, suitable for signing by a TLS client certificate. -func (h finishedHash) hashForClientCertificate(sigType uint8, hashAlg crypto.Hash, masterSecret []byte) []byte { - if (h.version >= VersionTLS12 || sigType == signatureEd25519) && h.buffer == nil { - panic("tls: handshake hash for a client certificate requested after discarding the handshake buffer") - } - - if sigType == signatureEd25519 { - return h.buffer - } - - if h.version >= VersionTLS12 { - hash := hashAlg.New() - hash.Write(h.buffer) - return hash.Sum(nil) - } - - if sigType == signatureECDSA { - return h.server.Sum(nil) - } - - return h.Sum() -} - -// discardHandshakeBuffer is called when there is no more need to -// buffer the entirety of the handshake messages. -func (h *finishedHash) discardHandshakeBuffer() { - h.buffer = nil -} - -// noExportedKeyingMaterial is used as a value of -// ConnectionState.ekm when renegotiation is enabled and thus -// we wish to fail all key-material export requests. -func noExportedKeyingMaterial(label string, context []byte, length int) ([]byte, error) { - return nil, errors.New("crypto/tls: ExportKeyingMaterial is unavailable when renegotiation is enabled") -} - -// ekmFromMasterSecret generates exported keying material as defined in RFC 5705. -func ekmFromMasterSecret(version uint16, suite *cipherSuite, masterSecret, clientRandom, serverRandom []byte) func(string, []byte, int) ([]byte, error) { - return func(label string, context []byte, length int) ([]byte, error) { - switch label { - case "client finished", "server finished", "master secret", "key expansion": - // These values are reserved and may not be used. - return nil, fmt.Errorf("crypto/tls: reserved ExportKeyingMaterial label: %s", label) - } - - seedLen := len(serverRandom) + len(clientRandom) - if context != nil { - seedLen += 2 + len(context) - } - seed := make([]byte, 0, seedLen) - - seed = append(seed, clientRandom...) - seed = append(seed, serverRandom...) - - if context != nil { - if len(context) >= 1<<16 { - return nil, fmt.Errorf("crypto/tls: ExportKeyingMaterial context too long") - } - seed = append(seed, byte(len(context)>>8), byte(len(context))) - seed = append(seed, context...) - } - - keyMaterial := make([]byte, length) - prfForVersion(version, suite)(keyMaterial, masterSecret, []byte(label), seed) - return keyMaterial, nil - } -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/ticket.go b/vendor/github.com/quic-go/qtls-go1-19/ticket.go deleted file mode 100644 index 81e8a52eac..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/ticket.go +++ /dev/null @@ -1,274 +0,0 @@ -// 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. - -package qtls - -import ( - "bytes" - "crypto/aes" - "crypto/cipher" - "crypto/hmac" - "crypto/sha256" - "crypto/subtle" - "encoding/binary" - "errors" - "io" - "time" - - "golang.org/x/crypto/cryptobyte" -) - -// sessionState contains the information that is serialized into a session -// ticket in order to later resume a connection. -type sessionState struct { - vers uint16 - cipherSuite uint16 - createdAt uint64 - masterSecret []byte // opaque master_secret<1..2^16-1>; - // struct { opaque certificate<1..2^24-1> } Certificate; - certificates [][]byte // Certificate certificate_list<0..2^24-1>; - - // usedOldKey is true if the ticket from which this session came from - // was encrypted with an older key and thus should be refreshed. - usedOldKey bool -} - -func (m *sessionState) marshal() []byte { - var b cryptobyte.Builder - b.AddUint16(m.vers) - b.AddUint16(m.cipherSuite) - addUint64(&b, m.createdAt) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.masterSecret) - }) - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - for _, cert := range m.certificates { - b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(cert) - }) - } - }) - return b.BytesOrPanic() -} - -func (m *sessionState) unmarshal(data []byte) bool { - *m = sessionState{usedOldKey: m.usedOldKey} - s := cryptobyte.String(data) - if ok := s.ReadUint16(&m.vers) && - s.ReadUint16(&m.cipherSuite) && - readUint64(&s, &m.createdAt) && - readUint16LengthPrefixed(&s, &m.masterSecret) && - len(m.masterSecret) != 0; !ok { - return false - } - var certList cryptobyte.String - if !s.ReadUint24LengthPrefixed(&certList) { - return false - } - for !certList.Empty() { - var cert []byte - if !readUint24LengthPrefixed(&certList, &cert) { - return false - } - m.certificates = append(m.certificates, cert) - } - return s.Empty() -} - -// sessionStateTLS13 is the content of a TLS 1.3 session ticket. Its first -// version (revision = 0) doesn't carry any of the information needed for 0-RTT -// validation and the nonce is always empty. -// version (revision = 1) carries the max_early_data_size sent in the ticket. -// version (revision = 2) carries the ALPN sent in the ticket. -type sessionStateTLS13 struct { - // uint8 version = 0x0304; - // uint8 revision = 2; - cipherSuite uint16 - createdAt uint64 - resumptionSecret []byte // opaque resumption_master_secret<1..2^8-1>; - certificate Certificate // CertificateEntry certificate_list<0..2^24-1>; - maxEarlyData uint32 - alpn string - - appData []byte -} - -func (m *sessionStateTLS13) marshal() []byte { - var b cryptobyte.Builder - b.AddUint16(VersionTLS13) - b.AddUint8(2) // revision - b.AddUint16(m.cipherSuite) - addUint64(&b, m.createdAt) - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.resumptionSecret) - }) - marshalCertificate(&b, m.certificate) - b.AddUint32(m.maxEarlyData) - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(m.alpn)) - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.appData) - }) - return b.BytesOrPanic() -} - -func (m *sessionStateTLS13) unmarshal(data []byte) bool { - *m = sessionStateTLS13{} - s := cryptobyte.String(data) - var version uint16 - var revision uint8 - var alpn []byte - ret := s.ReadUint16(&version) && - version == VersionTLS13 && - s.ReadUint8(&revision) && - revision == 2 && - s.ReadUint16(&m.cipherSuite) && - readUint64(&s, &m.createdAt) && - readUint8LengthPrefixed(&s, &m.resumptionSecret) && - len(m.resumptionSecret) != 0 && - unmarshalCertificate(&s, &m.certificate) && - s.ReadUint32(&m.maxEarlyData) && - readUint8LengthPrefixed(&s, &alpn) && - readUint16LengthPrefixed(&s, &m.appData) && - s.Empty() - m.alpn = string(alpn) - return ret -} - -func (c *Conn) encryptTicket(state []byte) ([]byte, error) { - if len(c.ticketKeys) == 0 { - return nil, errors.New("tls: internal error: session ticket keys unavailable") - } - - encrypted := make([]byte, ticketKeyNameLen+aes.BlockSize+len(state)+sha256.Size) - keyName := encrypted[:ticketKeyNameLen] - iv := encrypted[ticketKeyNameLen : ticketKeyNameLen+aes.BlockSize] - macBytes := encrypted[len(encrypted)-sha256.Size:] - - if _, err := io.ReadFull(c.config.rand(), iv); err != nil { - return nil, err - } - key := c.ticketKeys[0] - copy(keyName, key.keyName[:]) - block, err := aes.NewCipher(key.aesKey[:]) - if err != nil { - return nil, errors.New("tls: failed to create cipher while encrypting ticket: " + err.Error()) - } - cipher.NewCTR(block, iv).XORKeyStream(encrypted[ticketKeyNameLen+aes.BlockSize:], state) - - mac := hmac.New(sha256.New, key.hmacKey[:]) - mac.Write(encrypted[:len(encrypted)-sha256.Size]) - mac.Sum(macBytes[:0]) - - return encrypted, nil -} - -func (c *Conn) decryptTicket(encrypted []byte) (plaintext []byte, usedOldKey bool) { - if len(encrypted) < ticketKeyNameLen+aes.BlockSize+sha256.Size { - return nil, false - } - - keyName := encrypted[:ticketKeyNameLen] - iv := encrypted[ticketKeyNameLen : ticketKeyNameLen+aes.BlockSize] - macBytes := encrypted[len(encrypted)-sha256.Size:] - ciphertext := encrypted[ticketKeyNameLen+aes.BlockSize : len(encrypted)-sha256.Size] - - keyIndex := -1 - for i, candidateKey := range c.ticketKeys { - if bytes.Equal(keyName, candidateKey.keyName[:]) { - keyIndex = i - break - } - } - if keyIndex == -1 { - return nil, false - } - key := &c.ticketKeys[keyIndex] - - mac := hmac.New(sha256.New, key.hmacKey[:]) - mac.Write(encrypted[:len(encrypted)-sha256.Size]) - expected := mac.Sum(nil) - - if subtle.ConstantTimeCompare(macBytes, expected) != 1 { - return nil, false - } - - block, err := aes.NewCipher(key.aesKey[:]) - if err != nil { - return nil, false - } - plaintext = make([]byte, len(ciphertext)) - cipher.NewCTR(block, iv).XORKeyStream(plaintext, ciphertext) - - return plaintext, keyIndex > 0 -} - -func (c *Conn) getSessionTicketMsg(appData []byte) (*newSessionTicketMsgTLS13, error) { - m := new(newSessionTicketMsgTLS13) - - var certsFromClient [][]byte - for _, cert := range c.peerCertificates { - certsFromClient = append(certsFromClient, cert.Raw) - } - state := sessionStateTLS13{ - cipherSuite: c.cipherSuite, - createdAt: uint64(c.config.time().Unix()), - resumptionSecret: c.resumptionSecret, - certificate: Certificate{ - Certificate: certsFromClient, - OCSPStaple: c.ocspResponse, - SignedCertificateTimestamps: c.scts, - }, - appData: appData, - alpn: c.clientProtocol, - } - if c.extraConfig != nil { - state.maxEarlyData = c.extraConfig.MaxEarlyData - } - var err error - m.label, err = c.encryptTicket(state.marshal()) - if err != nil { - return nil, err - } - m.lifetime = uint32(maxSessionTicketLifetime / time.Second) - - // ticket_age_add is a random 32-bit value. See RFC 8446, section 4.6.1 - // The value is not stored anywhere; we never need to check the ticket age - // because 0-RTT is not supported. - ageAdd := make([]byte, 4) - _, err = c.config.rand().Read(ageAdd) - if err != nil { - return nil, err - } - m.ageAdd = binary.LittleEndian.Uint32(ageAdd) - - // ticket_nonce, which must be unique per connection, is always left at - // zero because we only ever send one ticket per connection. - - if c.extraConfig != nil { - m.maxEarlyData = c.extraConfig.MaxEarlyData - } - return m, nil -} - -// GetSessionTicket generates a new session ticket. -// It should only be called after the handshake completes. -// It can only be used for servers, and only if the alternative record layer is set. -// The ticket may be nil if config.SessionTicketsDisabled is set, -// or if the client isn't able to receive session tickets. -func (c *Conn) GetSessionTicket(appData []byte) ([]byte, error) { - if c.isClient || !c.handshakeComplete() || c.extraConfig == nil || c.extraConfig.AlternativeRecordLayer == nil { - return nil, errors.New("GetSessionTicket is only valid for servers after completion of the handshake, and if an alternative record layer is set.") - } - if c.config.SessionTicketsDisabled { - return nil, nil - } - - m, err := c.getSessionTicketMsg(appData) - if err != nil { - return nil, err - } - return m.marshal(), nil -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/tls.go b/vendor/github.com/quic-go/qtls-go1-19/tls.go deleted file mode 100644 index 42207c235f..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/tls.go +++ /dev/null @@ -1,362 +0,0 @@ -// Copyright 2009 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 qtls partially implements TLS 1.2, as specified in RFC 5246, -// and TLS 1.3, as specified in RFC 8446. -package qtls - -// BUG(agl): The crypto/tls package only implements some countermeasures -// against Lucky13 attacks on CBC-mode encryption, and only on SHA1 -// variants. See http://www.isg.rhul.ac.uk/tls/TLStiming.pdf and -// https://www.imperialviolet.org/2013/02/04/luckythirteen.html. - -import ( - "bytes" - "context" - "crypto" - "crypto/ecdsa" - "crypto/ed25519" - "crypto/rsa" - "crypto/x509" - "encoding/pem" - "errors" - "fmt" - "net" - "os" - "strings" -) - -// Server returns a new TLS server side connection -// using conn as the underlying transport. -// The configuration config must be non-nil and must include -// at least one certificate or else set GetCertificate. -func Server(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { - c := &Conn{ - conn: conn, - config: fromConfig(config), - extraConfig: extraConfig, - } - c.handshakeFn = c.serverHandshake - return c -} - -// Client returns a new TLS client side connection -// using conn as the underlying transport. -// The config cannot be nil: users must set either ServerName or -// InsecureSkipVerify in the config. -func Client(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { - c := &Conn{ - conn: conn, - config: fromConfig(config), - extraConfig: extraConfig, - isClient: true, - } - c.handshakeFn = c.clientHandshake - return c -} - -// A listener implements a network listener (net.Listener) for TLS connections. -type listener struct { - net.Listener - config *Config - extraConfig *ExtraConfig -} - -// Accept waits for and returns the next incoming TLS connection. -// The returned connection is of type *Conn. -func (l *listener) Accept() (net.Conn, error) { - c, err := l.Listener.Accept() - if err != nil { - return nil, err - } - return Server(c, l.config, l.extraConfig), nil -} - -// NewListener creates a Listener which accepts connections from an inner -// Listener and wraps each connection with Server. -// The configuration config must be non-nil and must include -// at least one certificate or else set GetCertificate. -func NewListener(inner net.Listener, config *Config, extraConfig *ExtraConfig) net.Listener { - l := new(listener) - l.Listener = inner - l.config = config - l.extraConfig = extraConfig - return l -} - -// Listen creates a TLS listener accepting connections on the -// given network address using net.Listen. -// The configuration config must be non-nil and must include -// at least one certificate or else set GetCertificate. -func Listen(network, laddr string, config *Config, extraConfig *ExtraConfig) (net.Listener, error) { - if config == nil || len(config.Certificates) == 0 && - config.GetCertificate == nil && config.GetConfigForClient == nil { - return nil, errors.New("tls: neither Certificates, GetCertificate, nor GetConfigForClient set in Config") - } - l, err := net.Listen(network, laddr) - if err != nil { - return nil, err - } - return NewListener(l, config, extraConfig), nil -} - -type timeoutError struct{} - -func (timeoutError) Error() string { return "tls: DialWithDialer timed out" } -func (timeoutError) Timeout() bool { return true } -func (timeoutError) Temporary() bool { return true } - -// DialWithDialer connects to the given network address using dialer.Dial and -// then initiates a TLS handshake, returning the resulting TLS connection. Any -// timeout or deadline given in the dialer apply to connection and TLS -// handshake as a whole. -// -// DialWithDialer interprets a nil configuration as equivalent to the zero -// configuration; see the documentation of Config for the defaults. -// -// DialWithDialer uses context.Background internally; to specify the context, -// use Dialer.DialContext with NetDialer set to the desired dialer. -func DialWithDialer(dialer *net.Dialer, network, addr string, config *Config, extraConfig *ExtraConfig) (*Conn, error) { - return dial(context.Background(), dialer, network, addr, config, extraConfig) -} - -func dial(ctx context.Context, netDialer *net.Dialer, network, addr string, config *Config, extraConfig *ExtraConfig) (*Conn, error) { - if netDialer.Timeout != 0 { - var cancel context.CancelFunc - ctx, cancel = context.WithTimeout(ctx, netDialer.Timeout) - defer cancel() - } - - if !netDialer.Deadline.IsZero() { - var cancel context.CancelFunc - ctx, cancel = context.WithDeadline(ctx, netDialer.Deadline) - defer cancel() - } - - rawConn, err := netDialer.DialContext(ctx, network, addr) - if err != nil { - return nil, err - } - - colonPos := strings.LastIndex(addr, ":") - if colonPos == -1 { - colonPos = len(addr) - } - hostname := addr[:colonPos] - - if config == nil { - config = defaultConfig() - } - // If no ServerName is set, infer the ServerName - // from the hostname we're connecting to. - if config.ServerName == "" { - // Make a copy to avoid polluting argument or default. - c := config.Clone() - c.ServerName = hostname - config = c - } - - conn := Client(rawConn, config, extraConfig) - if err := conn.HandshakeContext(ctx); err != nil { - rawConn.Close() - return nil, err - } - return conn, nil -} - -// Dial connects to the given network address using net.Dial -// and then initiates a TLS handshake, returning the resulting -// TLS connection. -// Dial interprets a nil configuration as equivalent to -// the zero configuration; see the documentation of Config -// for the defaults. -func Dial(network, addr string, config *Config, extraConfig *ExtraConfig) (*Conn, error) { - return DialWithDialer(new(net.Dialer), network, addr, config, extraConfig) -} - -// Dialer dials TLS connections given a configuration and a Dialer for the -// underlying connection. -type Dialer struct { - // NetDialer is the optional dialer to use for the TLS connections' - // underlying TCP connections. - // A nil NetDialer is equivalent to the net.Dialer zero value. - NetDialer *net.Dialer - - // Config is the TLS configuration to use for new connections. - // A nil configuration is equivalent to the zero - // configuration; see the documentation of Config for the - // defaults. - Config *Config - - ExtraConfig *ExtraConfig -} - -// Dial connects to the given network address and initiates a TLS -// handshake, returning the resulting TLS connection. -// -// The returned Conn, if any, will always be of type *Conn. -// -// Dial uses context.Background internally; to specify the context, -// use DialContext. -func (d *Dialer) Dial(network, addr string) (net.Conn, error) { - return d.DialContext(context.Background(), network, addr) -} - -func (d *Dialer) netDialer() *net.Dialer { - if d.NetDialer != nil { - return d.NetDialer - } - return new(net.Dialer) -} - -// DialContext connects to the given network address and initiates a TLS -// handshake, returning the resulting TLS connection. -// -// The provided Context must be non-nil. If the context expires before -// the connection is complete, an error is returned. Once successfully -// connected, any expiration of the context will not affect the -// connection. -// -// The returned Conn, if any, will always be of type *Conn. -func (d *Dialer) DialContext(ctx context.Context, network, addr string) (net.Conn, error) { - c, err := dial(ctx, d.netDialer(), network, addr, d.Config, d.ExtraConfig) - if err != nil { - // Don't return c (a typed nil) in an interface. - return nil, err - } - return c, nil -} - -// LoadX509KeyPair reads and parses a public/private key pair from a pair -// of files. The files must contain PEM encoded data. The certificate file -// may contain intermediate certificates following the leaf certificate to -// form a certificate chain. On successful return, Certificate.Leaf will -// be nil because the parsed form of the certificate is not retained. -func LoadX509KeyPair(certFile, keyFile string) (Certificate, error) { - certPEMBlock, err := os.ReadFile(certFile) - if err != nil { - return Certificate{}, err - } - keyPEMBlock, err := os.ReadFile(keyFile) - if err != nil { - return Certificate{}, err - } - return X509KeyPair(certPEMBlock, keyPEMBlock) -} - -// X509KeyPair parses a public/private key pair from a pair of -// PEM encoded data. On successful return, Certificate.Leaf will be nil because -// the parsed form of the certificate is not retained. -func X509KeyPair(certPEMBlock, keyPEMBlock []byte) (Certificate, error) { - fail := func(err error) (Certificate, error) { return Certificate{}, err } - - var cert Certificate - var skippedBlockTypes []string - for { - var certDERBlock *pem.Block - certDERBlock, certPEMBlock = pem.Decode(certPEMBlock) - if certDERBlock == nil { - break - } - if certDERBlock.Type == "CERTIFICATE" { - cert.Certificate = append(cert.Certificate, certDERBlock.Bytes) - } else { - skippedBlockTypes = append(skippedBlockTypes, certDERBlock.Type) - } - } - - if len(cert.Certificate) == 0 { - if len(skippedBlockTypes) == 0 { - return fail(errors.New("tls: failed to find any PEM data in certificate input")) - } - if len(skippedBlockTypes) == 1 && strings.HasSuffix(skippedBlockTypes[0], "PRIVATE KEY") { - return fail(errors.New("tls: failed to find certificate PEM data in certificate input, but did find a private key; PEM inputs may have been switched")) - } - return fail(fmt.Errorf("tls: failed to find \"CERTIFICATE\" PEM block in certificate input after skipping PEM blocks of the following types: %v", skippedBlockTypes)) - } - - skippedBlockTypes = skippedBlockTypes[:0] - var keyDERBlock *pem.Block - for { - keyDERBlock, keyPEMBlock = pem.Decode(keyPEMBlock) - if keyDERBlock == nil { - if len(skippedBlockTypes) == 0 { - return fail(errors.New("tls: failed to find any PEM data in key input")) - } - if len(skippedBlockTypes) == 1 && skippedBlockTypes[0] == "CERTIFICATE" { - return fail(errors.New("tls: found a certificate rather than a key in the PEM for the private key")) - } - return fail(fmt.Errorf("tls: failed to find PEM block with type ending in \"PRIVATE KEY\" in key input after skipping PEM blocks of the following types: %v", skippedBlockTypes)) - } - if keyDERBlock.Type == "PRIVATE KEY" || strings.HasSuffix(keyDERBlock.Type, " PRIVATE KEY") { - break - } - skippedBlockTypes = append(skippedBlockTypes, keyDERBlock.Type) - } - - // We don't need to parse the public key for TLS, but we so do anyway - // to check that it looks sane and matches the private key. - x509Cert, err := x509.ParseCertificate(cert.Certificate[0]) - if err != nil { - return fail(err) - } - - cert.PrivateKey, err = parsePrivateKey(keyDERBlock.Bytes) - if err != nil { - return fail(err) - } - - switch pub := x509Cert.PublicKey.(type) { - case *rsa.PublicKey: - priv, ok := cert.PrivateKey.(*rsa.PrivateKey) - if !ok { - return fail(errors.New("tls: private key type does not match public key type")) - } - if pub.N.Cmp(priv.N) != 0 { - return fail(errors.New("tls: private key does not match public key")) - } - case *ecdsa.PublicKey: - priv, ok := cert.PrivateKey.(*ecdsa.PrivateKey) - if !ok { - return fail(errors.New("tls: private key type does not match public key type")) - } - if pub.X.Cmp(priv.X) != 0 || pub.Y.Cmp(priv.Y) != 0 { - return fail(errors.New("tls: private key does not match public key")) - } - case ed25519.PublicKey: - priv, ok := cert.PrivateKey.(ed25519.PrivateKey) - if !ok { - return fail(errors.New("tls: private key type does not match public key type")) - } - if !bytes.Equal(priv.Public().(ed25519.PublicKey), pub) { - return fail(errors.New("tls: private key does not match public key")) - } - default: - return fail(errors.New("tls: unknown public key algorithm")) - } - - return cert, nil -} - -// Attempt to parse the given private key DER block. OpenSSL 0.9.8 generates -// PKCS #1 private keys by default, while OpenSSL 1.0.0 generates PKCS #8 keys. -// OpenSSL ecparam generates SEC1 EC private keys for ECDSA. We try all three. -func parsePrivateKey(der []byte) (crypto.PrivateKey, error) { - if key, err := x509.ParsePKCS1PrivateKey(der); err == nil { - return key, nil - } - if key, err := x509.ParsePKCS8PrivateKey(der); err == nil { - switch key := key.(type) { - case *rsa.PrivateKey, *ecdsa.PrivateKey, ed25519.PrivateKey: - return key, nil - default: - return nil, errors.New("tls: found unknown private key type in PKCS#8 wrapping") - } - } - if key, err := x509.ParseECPrivateKey(der); err == nil { - return key, nil - } - - return nil, errors.New("tls: failed to parse private key") -} diff --git a/vendor/github.com/quic-go/qtls-go1-19/unsafe.go b/vendor/github.com/quic-go/qtls-go1-19/unsafe.go deleted file mode 100644 index 55fa01b3d6..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-19/unsafe.go +++ /dev/null @@ -1,96 +0,0 @@ -package qtls - -import ( - "crypto/tls" - "reflect" - "unsafe" -) - -func init() { - if !structsEqual(&tls.ConnectionState{}, &connectionState{}) { - panic("qtls.ConnectionState doesn't match") - } - if !structsEqual(&tls.ClientSessionState{}, &clientSessionState{}) { - panic("qtls.ClientSessionState doesn't match") - } - if !structsEqual(&tls.CertificateRequestInfo{}, &certificateRequestInfo{}) { - panic("qtls.CertificateRequestInfo doesn't match") - } - if !structsEqual(&tls.Config{}, &config{}) { - panic("qtls.Config doesn't match") - } - if !structsEqual(&tls.ClientHelloInfo{}, &clientHelloInfo{}) { - panic("qtls.ClientHelloInfo doesn't match") - } -} - -func toConnectionState(c connectionState) ConnectionState { - return *(*ConnectionState)(unsafe.Pointer(&c)) -} - -func toClientSessionState(s *clientSessionState) *ClientSessionState { - return (*ClientSessionState)(unsafe.Pointer(s)) -} - -func fromClientSessionState(s *ClientSessionState) *clientSessionState { - return (*clientSessionState)(unsafe.Pointer(s)) -} - -func toCertificateRequestInfo(i *certificateRequestInfo) *CertificateRequestInfo { - return (*CertificateRequestInfo)(unsafe.Pointer(i)) -} - -func toConfig(c *config) *Config { - return (*Config)(unsafe.Pointer(c)) -} - -func fromConfig(c *Config) *config { - return (*config)(unsafe.Pointer(c)) -} - -func toClientHelloInfo(chi *clientHelloInfo) *ClientHelloInfo { - return (*ClientHelloInfo)(unsafe.Pointer(chi)) -} - -func structsEqual(a, b interface{}) bool { - return compare(reflect.ValueOf(a), reflect.ValueOf(b)) -} - -func compare(a, b reflect.Value) bool { - sa := a.Elem() - sb := b.Elem() - if sa.NumField() != sb.NumField() { - return false - } - for i := 0; i < sa.NumField(); i++ { - fa := sa.Type().Field(i) - fb := sb.Type().Field(i) - if !reflect.DeepEqual(fa.Index, fb.Index) || fa.Name != fb.Name || fa.Anonymous != fb.Anonymous || fa.Offset != fb.Offset || !reflect.DeepEqual(fa.Type, fb.Type) { - if fa.Type.Kind() != fb.Type.Kind() { - return false - } - if fa.Type.Kind() == reflect.Slice { - if !compareStruct(fa.Type.Elem(), fb.Type.Elem()) { - return false - } - continue - } - return false - } - } - return true -} - -func compareStruct(a, b reflect.Type) bool { - if a.NumField() != b.NumField() { - return false - } - for i := 0; i < a.NumField(); i++ { - fa := a.Field(i) - fb := b.Field(i) - if !reflect.DeepEqual(fa.Index, fb.Index) || fa.Name != fb.Name || fa.Anonymous != fb.Anonymous || fa.Offset != fb.Offset || !reflect.DeepEqual(fa.Type, fb.Type) { - return false - } - } - return true -} diff --git a/vendor/github.com/quic-go/qtls-go1-20/alert.go b/vendor/github.com/quic-go/qtls-go1-20/alert.go index 3feac79be8..687ada843c 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/alert.go +++ b/vendor/github.com/quic-go/qtls-go1-20/alert.go @@ -6,10 +6,17 @@ package qtls import "strconv" -type alert uint8 +// An AlertError is a TLS alert. +// +// When using a QUIC transport, QUICConn methods will return an error +// which wraps AlertError rather than sending a TLS alert. +type AlertError uint8 + +func (e AlertError) Error() string { + return alert(e).String() +} -// Alert is a TLS alert -type Alert = alert +type alert uint8 const ( // alert level diff --git a/vendor/github.com/quic-go/qtls-go1-20/cipher_suites.go b/vendor/github.com/quic-go/qtls-go1-20/cipher_suites.go index 43d2131573..2946ffb32e 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/cipher_suites.go +++ b/vendor/github.com/quic-go/qtls-go1-20/cipher_suites.go @@ -15,8 +15,10 @@ import ( "crypto/sha256" "fmt" "hash" + "runtime" "golang.org/x/crypto/chacha20poly1305" + "golang.org/x/sys/cpu" ) // CipherSuite is a TLS cipher suite. Note that most functions in this package @@ -195,17 +197,6 @@ type cipherSuiteTLS13 struct { hash crypto.Hash } -type CipherSuiteTLS13 struct { - ID uint16 - KeyLen int - Hash crypto.Hash - AEAD func(key, fixedNonce []byte) cipher.AEAD -} - -func (c *CipherSuiteTLS13) IVLen() int { - return aeadNonceLength -} - var cipherSuitesTLS13 = []*cipherSuiteTLS13{ // TODO: replace with a map. {TLS_AES_128_GCM_SHA256, 16, aeadAESGCMTLS13, crypto.SHA256}, {TLS_CHACHA20_POLY1305_SHA256, 32, aeadChaCha20Poly1305, crypto.SHA256}, @@ -362,6 +353,18 @@ var defaultCipherSuitesTLS13NoAES = []uint16{ TLS_AES_256_GCM_SHA384, } +var ( + hasGCMAsmAMD64 = cpu.X86.HasAES && cpu.X86.HasPCLMULQDQ + hasGCMAsmARM64 = cpu.ARM64.HasAES && cpu.ARM64.HasPMULL + // Keep in sync with crypto/aes/cipher_s390x.go. + hasGCMAsmS390X = cpu.S390X.HasAES && cpu.S390X.HasAESCBC && cpu.S390X.HasAESCTR && + (cpu.S390X.HasGHASH || cpu.S390X.HasAESGCM) + + hasAESGCMHardwareSupport = runtime.GOARCH == "amd64" && hasGCMAsmAMD64 || + runtime.GOARCH == "arm64" && hasGCMAsmARM64 || + runtime.GOARCH == "s390x" && hasGCMAsmS390X +) + var aesgcmCiphers = map[uint16]bool{ // TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: true, @@ -519,11 +522,6 @@ func aeadAESGCM(key, noncePrefix []byte) aead { return ret } -// AEADAESGCMTLS13 creates a new AES-GCM AEAD for TLS 1.3 -func AEADAESGCMTLS13(key, fixedNonce []byte) cipher.AEAD { - return aeadAESGCMTLS13(key, fixedNonce) -} - func aeadAESGCMTLS13(key, nonceMask []byte) aead { if len(nonceMask) != aeadNonceLength { panic("tls: internal error: wrong nonce length") diff --git a/vendor/github.com/quic-go/qtls-go1-20/common.go b/vendor/github.com/quic-go/qtls-go1-20/common.go index 4490e867ef..841c1a44b6 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/common.go +++ b/vendor/github.com/quic-go/qtls-go1-20/common.go @@ -82,11 +82,6 @@ const ( compressionNone uint8 = 0 ) -type Extension struct { - Type uint16 - Data []byte -} - // TLS extension numbers const ( extensionServerName uint16 = 0 @@ -105,6 +100,7 @@ const ( extensionCertificateAuthorities uint16 = 47 extensionSignatureAlgorithmsCert uint16 = 50 extensionKeyShare uint16 = 51 + extensionQUICTransportParameters uint16 = 57 extensionRenegotiationInfo uint16 = 0xff01 ) @@ -113,14 +109,6 @@ const ( scsvRenegotiation uint16 = 0x00ff ) -type EncryptionLevel uint8 - -const ( - EncryptionHandshake EncryptionLevel = iota - Encryption0RTT - EncryptionApplication -) - // CurveID is a tls.CurveID type CurveID = tls.CurveID @@ -294,12 +282,6 @@ type connectionState struct { ekm func(label string, context []byte, length int) ([]byte, error) } -type ConnectionStateWith0RTT struct { - ConnectionState - - Used0RTT bool // true if 0-RTT was both offered and accepted -} - // ClientAuthType is tls.ClientAuthType type ClientAuthType = tls.ClientAuthType @@ -349,8 +331,6 @@ type clientSessionState struct { // goroutines. Up to TLS 1.2, only ticket-based resumption is supported, not // SessionID-based resumption. In TLS 1.3 they were merged into PSK modes, which // are supported via this interface. -// -//go:generate sh -c "mockgen -package qtls -destination mock_client_session_cache_test.go github.com/quic-go/qtls-go1-20 ClientSessionCache" type ClientSessionCache = tls.ClientSessionCache // SignatureScheme is a tls.SignatureScheme @@ -736,64 +716,22 @@ type config struct { autoSessionTicketKeys []ticketKey } -// A RecordLayer handles encrypting and decrypting of TLS messages. -type RecordLayer interface { - SetReadKey(encLevel EncryptionLevel, suite *CipherSuiteTLS13, trafficSecret []byte) - SetWriteKey(encLevel EncryptionLevel, suite *CipherSuiteTLS13, trafficSecret []byte) - ReadHandshakeMessage() ([]byte, error) - WriteRecord([]byte) (int, error) - SendAlert(uint8) -} - type ExtraConfig struct { - // GetExtensions, if not nil, is called before a message that allows - // sending of extensions is sent. - // Currently only implemented for the ClientHello message (for the client) - // and for the EncryptedExtensions message (for the server). - // Only valid for TLS 1.3. - GetExtensions func(handshakeMessageType uint8) []Extension - - // ReceivedExtensions, if not nil, is called when a message that allows the - // inclusion of extensions is received. - // It is called with an empty slice of extensions, if the message didn't - // contain any extensions. - // Currently only implemented for the ClientHello message (sent by the - // client) and for the EncryptedExtensions message (sent by the server). - // Only valid for TLS 1.3. - ReceivedExtensions func(handshakeMessageType uint8, exts []Extension) - - // AlternativeRecordLayer is used by QUIC - AlternativeRecordLayer RecordLayer - - // Enforce the selection of a supported application protocol. - // Only works for TLS 1.3. - // If enabled, client and server have to agree on an application protocol. - // Otherwise, connection establishment fails. - EnforceNextProtoSelection bool - - // If MaxEarlyData is greater than 0, the client will be allowed to send early - // data when resuming a session. - // Requires the AlternativeRecordLayer to be set. + // If Enable0RTT is enabled, the client will be allowed to send early data when resuming a session. // // It has no meaning on the client. - MaxEarlyData uint32 + Enable0RTT bool + + // GetAppDataForSessionTicket requests application data to be sent with a session ticket. + // + // It has no meaning on the client. + GetAppDataForSessionTicket func() []byte // The Accept0RTT callback is called when the client offers 0-RTT. // The server then has to decide if it wants to accept or reject 0-RTT. // It is only used for servers. Accept0RTT func(appData []byte) bool - // 0RTTRejected is called when the server rejectes 0-RTT. - // It is only used for clients. - Rejected0RTT func() - - // If set, the client will export the 0-RTT key when resuming a session that - // allows sending of early data. - // Requires the AlternativeRecordLayer to be set. - // - // It has no meaning to the server. - Enable0RTT bool - // Is called when the client saves a session ticket to the session ticket. // This gives the application the opportunity to save some data along with the ticket, // which can be restored when the session ticket is used. @@ -807,23 +745,14 @@ type ExtraConfig struct { // Clone clones. func (c *ExtraConfig) Clone() *ExtraConfig { return &ExtraConfig{ - GetExtensions: c.GetExtensions, - ReceivedExtensions: c.ReceivedExtensions, - AlternativeRecordLayer: c.AlternativeRecordLayer, - EnforceNextProtoSelection: c.EnforceNextProtoSelection, - MaxEarlyData: c.MaxEarlyData, Enable0RTT: c.Enable0RTT, + GetAppDataForSessionTicket: c.GetAppDataForSessionTicket, Accept0RTT: c.Accept0RTT, - Rejected0RTT: c.Rejected0RTT, GetAppDataForSessionState: c.GetAppDataForSessionState, SetAppDataFromSessionState: c.SetAppDataFromSessionState, } } -func (c *ExtraConfig) usesAlternativeRecordLayer() bool { - return c != nil && c.AlternativeRecordLayer != nil -} - const ( // ticketKeyNameLen is the number of bytes of identifier that is prepended to // an encrypted session ticket in order to identify the key used to encrypt it. @@ -1384,7 +1313,6 @@ func (c *config) BuildNameToCertificate() { const ( keyLogLabelTLS12 = "CLIENT_RANDOM" - keyLogLabelEarlyTraffic = "CLIENT_EARLY_TRAFFIC_SECRET" keyLogLabelClientHandshake = "CLIENT_HANDSHAKE_TRAFFIC_SECRET" keyLogLabelServerHandshake = "SERVER_HANDSHAKE_TRAFFIC_SECRET" keyLogLabelClientTraffic = "CLIENT_TRAFFIC_SECRET_0" @@ -1422,7 +1350,7 @@ func leafCertificate(c *Certificate) (*x509.Certificate, error) { } type handshakeMessage interface { - marshal() []byte + marshal() ([]byte, error) unmarshal([]byte) bool } @@ -1523,16 +1451,4 @@ func isSupportedSignatureAlgorithm(sigAlg SignatureScheme, supportedSignatureAlg } // CertificateVerificationError is returned when certificate verification fails during the handshake. -type CertificateVerificationError struct { - // UnverifiedCertificates and its contents should not be modified. - UnverifiedCertificates []*x509.Certificate - Err error -} - -func (e *CertificateVerificationError) Error() string { - return fmt.Sprintf("tls: failed to verify certificate: %s", e.Err) -} - -func (e *CertificateVerificationError) Unwrap() error { - return e.Err -} +type CertificateVerificationError = tls.CertificateVerificationError diff --git a/vendor/github.com/quic-go/qtls-go1-20/conn.go b/vendor/github.com/quic-go/qtls-go1-20/conn.go index d84fa3442b..b7ebdb0a74 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/conn.go +++ b/vendor/github.com/quic-go/qtls-go1-20/conn.go @@ -29,6 +29,7 @@ type Conn struct { conn net.Conn isClient bool handshakeFn func(context.Context) error // (*Conn).clientHandshake or serverHandshake + quic *quicState // nil for non-QUIC connections // isHandshakeComplete is true if the connection is currently transferring // application data (i.e. is not currently processing a handshake). @@ -40,11 +41,10 @@ type Conn struct { vers uint16 // TLS version haveVers bool // version has been negotiated config *config // configuration passed to constructor + extraConfig *ExtraConfig // handshakes counts the number of handshakes performed on the // connection so far. If renegotiation is disabled then this is either // zero or one. - extraConfig *ExtraConfig - handshakes int didResume bool // whether this connection was a session resumption cipherSuite uint16 @@ -65,13 +65,8 @@ type Conn struct { secureRenegotiation bool // ekm is a closure for exporting keying material. ekm func(label string, context []byte, length int) ([]byte, error) - // For the client: // resumptionSecret is the resumption_master_secret for handling - // NewSessionTicket messages. nil if config.SessionTicketsDisabled. - // For the server: - // resumptionSecret is the resumption_master_secret for generating - // NewSessionTicket messages. Only used when the alternative record - // layer is set. nil if config.SessionTicketsDisabled. + // or sending NewSessionTicket messages. resumptionSecret []byte // ticketKeys is the set of active session ticket keys for this @@ -123,12 +118,7 @@ type Conn struct { // the rest of the bits are the number of goroutines in Conn.Write. activeCall atomic.Int32 - used0RTT bool - tmp [16]byte - - connStateMutex sync.Mutex - connState ConnectionStateWith0RTT } // Access to net.Conn methods. @@ -188,9 +178,8 @@ type halfConn struct { nextCipher any // next encryption state nextMac hash.Hash // next MAC algorithm - trafficSecret []byte // current TLS 1.3 traffic secret - - setKeyCallback func(encLevel EncryptionLevel, suite *CipherSuiteTLS13, trafficSecret []byte) + level QUICEncryptionLevel // current QUIC encryption level + trafficSecret []byte // current TLS 1.3 traffic secret } type permanentError struct { @@ -235,20 +224,9 @@ func (hc *halfConn) changeCipherSpec() error { return nil } -func (hc *halfConn) exportKey(encLevel EncryptionLevel, suite *cipherSuiteTLS13, trafficSecret []byte) { - if hc.setKeyCallback != nil { - s := &CipherSuiteTLS13{ - ID: suite.id, - KeyLen: suite.keyLen, - Hash: suite.hash, - AEAD: func(key, fixedNonce []byte) cipher.AEAD { return suite.aead(key, fixedNonce) }, - } - hc.setKeyCallback(encLevel, s, trafficSecret) - } -} - -func (hc *halfConn) setTrafficSecret(suite *cipherSuiteTLS13, secret []byte) { +func (hc *halfConn) setTrafficSecret(suite *cipherSuiteTLS13, level QUICEncryptionLevel, secret []byte) { hc.trafficSecret = secret + hc.level = level key, iv := suite.trafficKey(secret) hc.cipher = suite.aead(key, iv) for i := range hc.seq { @@ -481,13 +459,6 @@ func (hc *halfConn) decrypt(record []byte) ([]byte, recordType, error) { return plaintext, typ, nil } -func (c *Conn) setAlternativeRecordLayer() { - if c.extraConfig != nil && c.extraConfig.AlternativeRecordLayer != nil { - c.in.setKeyCallback = c.extraConfig.AlternativeRecordLayer.SetReadKey - c.out.setKeyCallback = c.extraConfig.AlternativeRecordLayer.SetWriteKey - } -} - // sliceForAppend extends the input slice by n bytes. head is the full extended // slice, while tail is the appended part. If the original slice has sufficient // capacity no allocation is performed. @@ -646,6 +617,10 @@ func (c *Conn) readRecordOrCCS(expectChangeCipherSpec bool) error { } c.input.Reset(nil) + if c.quic != nil { + return c.in.setErrorLocked(errors.New("tls: internal error: attempted to read record with QUIC transport")) + } + // Read header, payload. if err := c.readFromUntil(c.conn, recordHeaderLen); err != nil { // RFC 8446, Section 6.1 suggests that EOF without an alertCloseNotify @@ -729,6 +704,9 @@ func (c *Conn) readRecordOrCCS(expectChangeCipherSpec bool) error { return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) case recordTypeAlert: + if c.quic != nil { + return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) + } if len(data) != 2 { return c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) } @@ -846,6 +824,9 @@ func (c *Conn) readFromUntil(r io.Reader, n int) error { // sendAlert sends a TLS alert message. func (c *Conn) sendAlertLocked(err alert) error { + if c.quic != nil { + return c.out.setErrorLocked(&net.OpError{Op: "local error", Err: err}) + } switch err { case alertNoRenegotiation, alertCloseNotify: c.tmp[0] = alertLevelWarning @@ -865,11 +846,6 @@ func (c *Conn) sendAlertLocked(err alert) error { // sendAlert sends a TLS alert message. func (c *Conn) sendAlert(err alert) error { - if c.extraConfig != nil && c.extraConfig.AlternativeRecordLayer != nil { - c.extraConfig.AlternativeRecordLayer.SendAlert(uint8(err)) - return &net.OpError{Op: "local error", Err: err} - } - c.out.Lock() defer c.out.Unlock() return c.sendAlertLocked(err) @@ -985,6 +961,19 @@ var outBufPool = sync.Pool{ // writeRecordLocked writes a TLS record with the given type and payload to the // connection and updates the record layer state. func (c *Conn) writeRecordLocked(typ recordType, data []byte) (int, error) { + if c.quic != nil { + if typ != recordTypeHandshake { + return 0, errors.New("tls: internal error: sending non-handshake message to QUIC transport") + } + c.quicWriteCryptoData(c.out.level, data) + if !c.buffering { + if _, err := c.flush(); err != nil { + return 0, err + } + } + return len(data), nil + } + outBufPtr := outBufPool.Get().(*[]byte) outBuf := *outBufPtr defer func() { @@ -1042,52 +1031,67 @@ func (c *Conn) writeRecordLocked(typ recordType, data []byte) (int, error) { return n, nil } -// writeRecord writes a TLS record with the given type and payload to the -// connection and updates the record layer state. -func (c *Conn) writeRecord(typ recordType, data []byte) (int, error) { - if c.extraConfig != nil && c.extraConfig.AlternativeRecordLayer != nil { - if typ == recordTypeChangeCipherSpec { - return len(data), nil - } - return c.extraConfig.AlternativeRecordLayer.WriteRecord(data) +// writeHandshakeRecord writes a handshake message to the connection and updates +// the record layer state. If transcript is non-nil the marshalled message is +// written to it. +func (c *Conn) writeHandshakeRecord(msg handshakeMessage, transcript transcriptHash) (int, error) { + c.out.Lock() + defer c.out.Unlock() + + data, err := msg.marshal() + if err != nil { + return 0, err + } + if transcript != nil { + transcript.Write(data) } + return c.writeRecordLocked(recordTypeHandshake, data) +} + +// writeChangeCipherRecord writes a ChangeCipherSpec message to the connection and +// updates the record layer state. +func (c *Conn) writeChangeCipherRecord() error { c.out.Lock() defer c.out.Unlock() + _, err := c.writeRecordLocked(recordTypeChangeCipherSpec, []byte{1}) + return err +} - return c.writeRecordLocked(typ, data) +// readHandshakeBytes reads handshake data until c.hand contains at least n bytes. +func (c *Conn) readHandshakeBytes(n int) error { + if c.quic != nil { + return c.quicReadHandshakeBytes(n) + } + for c.hand.Len() < n { + if err := c.readRecord(); err != nil { + return err + } + } + return nil } // readHandshake reads the next handshake message from -// the record layer. -func (c *Conn) readHandshake() (any, error) { - var data []byte - if c.extraConfig != nil && c.extraConfig.AlternativeRecordLayer != nil { - var err error - data, err = c.extraConfig.AlternativeRecordLayer.ReadHandshakeMessage() - if err != nil { - return nil, err - } - } else { - for c.hand.Len() < 4 { - if err := c.readRecord(); err != nil { - return nil, err - } - } +// the record layer. If transcript is non-nil, the message +// is written to the passed transcriptHash. +func (c *Conn) readHandshake(transcript transcriptHash) (any, error) { + if err := c.readHandshakeBytes(4); err != nil { + return nil, err + } + data := c.hand.Bytes() + n := int(data[1])<<16 | int(data[2])<<8 | int(data[3]) + if n > maxHandshake { + c.sendAlertLocked(alertInternalError) + return nil, c.in.setErrorLocked(fmt.Errorf("tls: handshake message of length %d bytes exceeds maximum of %d bytes", n, maxHandshake)) + } + if err := c.readHandshakeBytes(4 + n); err != nil { + return nil, err + } + data = c.hand.Next(4 + n) + return c.unmarshalHandshakeMessage(data, transcript) +} - data = c.hand.Bytes() - n := int(data[1])<<16 | int(data[2])<<8 | int(data[3]) - if n > maxHandshake { - c.sendAlertLocked(alertInternalError) - return nil, c.in.setErrorLocked(fmt.Errorf("tls: handshake message of length %d bytes exceeds maximum of %d bytes", n, maxHandshake)) - } - for c.hand.Len() < 4+n { - if err := c.readRecord(); err != nil { - return nil, err - } - } - data = c.hand.Next(4 + n) - } +func (c *Conn) unmarshalHandshakeMessage(data []byte, transcript transcriptHash) (handshakeMessage, error) { var m handshakeMessage switch data[0] { case typeHelloRequest: @@ -1148,6 +1152,11 @@ func (c *Conn) readHandshake() (any, error) { if !m.unmarshal(data) { return nil, c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) } + + if transcript != nil { + transcript.Write(data) + } + return m, nil } @@ -1223,7 +1232,7 @@ func (c *Conn) handleRenegotiation() error { return errors.New("tls: internal error: unexpected renegotiation") } - msg, err := c.readHandshake() + msg, err := c.readHandshake(nil) if err != nil { return err } @@ -1262,10 +1271,6 @@ func (c *Conn) handleRenegotiation() error { return c.handshakeErr } -func (c *Conn) HandlePostHandshakeMessage() error { - return c.handlePostHandshakeMessage() -} - // handlePostHandshakeMessage processes a handshake message arrived after the // handshake is complete. Up to TLS 1.2, it indicates the start of a renegotiation. func (c *Conn) handlePostHandshakeMessage() error { @@ -1273,11 +1278,10 @@ func (c *Conn) handlePostHandshakeMessage() error { return c.handleRenegotiation() } - msg, err := c.readHandshake() + msg, err := c.readHandshake(nil) if err != nil { return err } - c.retryCount++ if c.retryCount > maxUselessRecords { c.sendAlert(alertUnexpectedMessage) @@ -1289,27 +1293,39 @@ func (c *Conn) handlePostHandshakeMessage() error { return c.handleNewSessionTicket(msg) case *keyUpdateMsg: return c.handleKeyUpdate(msg) - default: - c.sendAlert(alertUnexpectedMessage) - return fmt.Errorf("tls: received unexpected handshake message of type %T", msg) } + // The QUIC layer is supposed to treat an unexpected post-handshake CertificateRequest + // as a QUIC-level PROTOCOL_VIOLATION error (RFC 9001, Section 4.4). Returning an + // unexpected_message alert here doesn't provide it with enough information to distinguish + // this condition from other unexpected messages. This is probably fine. + c.sendAlert(alertUnexpectedMessage) + return fmt.Errorf("tls: received unexpected handshake message of type %T", msg) } func (c *Conn) handleKeyUpdate(keyUpdate *keyUpdateMsg) error { + if c.quic != nil { + c.sendAlert(alertUnexpectedMessage) + return c.in.setErrorLocked(errors.New("tls: received unexpected key update message")) + } + cipherSuite := cipherSuiteTLS13ByID(c.cipherSuite) if cipherSuite == nil { return c.in.setErrorLocked(c.sendAlert(alertInternalError)) } newSecret := cipherSuite.nextTrafficSecret(c.in.trafficSecret) - c.in.setTrafficSecret(cipherSuite, newSecret) + c.in.setTrafficSecret(cipherSuite, QUICEncryptionLevelInitial, newSecret) if keyUpdate.updateRequested { c.out.Lock() defer c.out.Unlock() msg := &keyUpdateMsg{} - _, err := c.writeRecordLocked(recordTypeHandshake, msg.marshal()) + msgBytes, err := msg.marshal() + if err != nil { + return err + } + _, err = c.writeRecordLocked(recordTypeHandshake, msgBytes) if err != nil { // Surface the error at the next write. c.out.setErrorLocked(err) @@ -1317,7 +1333,7 @@ func (c *Conn) handleKeyUpdate(keyUpdate *keyUpdateMsg) error { } newSecret := cipherSuite.nextTrafficSecret(c.out.trafficSecret) - c.out.setTrafficSecret(cipherSuite, newSecret) + c.out.setTrafficSecret(cipherSuite, QUICEncryptionLevelInitial, newSecret) } return nil @@ -1478,12 +1494,15 @@ func (c *Conn) handshakeContext(ctx context.Context) (ret error) { // this cancellation. In the former case, we need to close the connection. defer cancel() - // Start the "interrupter" goroutine, if this context might be canceled. - // (The background context cannot). - // - // The interrupter goroutine waits for the input context to be done and - // closes the connection if this happens before the function returns. - if ctx.Done() != nil { + if c.quic != nil { + c.quic.cancelc = handshakeCtx.Done() + c.quic.cancel = cancel + } else if ctx.Done() != nil { + // Start the "interrupter" goroutine, if this context might be canceled. + // (The background context cannot). + // + // The interrupter goroutine waits for the input context to be done and + // closes the connection if this happens before the function returns. done := make(chan struct{}) interruptRes := make(chan error, 1) defer func() { @@ -1534,21 +1553,38 @@ func (c *Conn) handshakeContext(ctx context.Context) (ret error) { panic("tls: internal error: handshake returned an error but is marked successful") } + if c.quic != nil { + if c.handshakeErr == nil { + c.quicHandshakeComplete() + // Provide the 1-RTT read secret now that the handshake is complete. + // The QUIC layer MUST NOT decrypt 1-RTT packets prior to completing + // the handshake (RFC 9001, Section 5.7). + c.quicSetReadSecret(QUICEncryptionLevelApplication, c.cipherSuite, c.in.trafficSecret) + } else { + var a alert + c.out.Lock() + if !errors.As(c.out.err, &a) { + a = alertInternalError + } + c.out.Unlock() + // Return an error which wraps both the handshake error and + // any alert error we may have sent, or alertInternalError + // if we didn't send an alert. + // Truncate the text of the alert to 0 characters. + c.handshakeErr = fmt.Errorf("%w%.0w", c.handshakeErr, AlertError(a)) + } + close(c.quic.blockedc) + close(c.quic.signalc) + } + return c.handshakeErr } // ConnectionState returns basic TLS details about the connection. func (c *Conn) ConnectionState() ConnectionState { - c.connStateMutex.Lock() - defer c.connStateMutex.Unlock() - return c.connState.ConnectionState -} - -// ConnectionStateWith0RTT returns basic TLS details (incl. 0-RTT status) about the connection. -func (c *Conn) ConnectionStateWith0RTT() ConnectionStateWith0RTT { - c.connStateMutex.Lock() - defer c.connStateMutex.Unlock() - return c.connState + c.handshakeMutex.Lock() + defer c.handshakeMutex.Unlock() + return c.connectionStateLocked() } func (c *Conn) connectionStateLocked() ConnectionState { @@ -1579,15 +1615,6 @@ func (c *Conn) connectionStateLocked() ConnectionState { return toConnectionState(state) } -func (c *Conn) updateConnectionState() { - c.connStateMutex.Lock() - defer c.connStateMutex.Unlock() - c.connState = ConnectionStateWith0RTT{ - Used0RTT: c.used0RTT, - ConnectionState: c.connectionStateLocked(), - } -} - // OCSPResponse returns the stapled OCSP response from the TLS server, if // any. (Only valid for client connections.) func (c *Conn) OCSPResponse() []byte { diff --git a/vendor/github.com/quic-go/qtls-go1-20/cpu.go b/vendor/github.com/quic-go/qtls-go1-20/cpu.go deleted file mode 100644 index 1219450879..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-20/cpu.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:build !js -// +build !js - -package qtls - -import ( - "runtime" - - "golang.org/x/sys/cpu" -) - -var ( - hasGCMAsmAMD64 = cpu.X86.HasAES && cpu.X86.HasPCLMULQDQ - hasGCMAsmARM64 = cpu.ARM64.HasAES && cpu.ARM64.HasPMULL - // Keep in sync with crypto/aes/cipher_s390x.go. - hasGCMAsmS390X = cpu.S390X.HasAES && cpu.S390X.HasAESCBC && cpu.S390X.HasAESCTR && - (cpu.S390X.HasGHASH || cpu.S390X.HasAESGCM) - - hasAESGCMHardwareSupport = runtime.GOARCH == "amd64" && hasGCMAsmAMD64 || - runtime.GOARCH == "arm64" && hasGCMAsmARM64 || - runtime.GOARCH == "s390x" && hasGCMAsmS390X -) diff --git a/vendor/github.com/quic-go/qtls-go1-20/cpu_other.go b/vendor/github.com/quic-go/qtls-go1-20/cpu_other.go deleted file mode 100644 index 33f7d21942..0000000000 --- a/vendor/github.com/quic-go/qtls-go1-20/cpu_other.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build js -// +build js - -package qtls - -var ( - hasGCMAsmAMD64 = false - hasGCMAsmARM64 = false - hasGCMAsmS390X = false - - hasAESGCMHardwareSupport = false -) diff --git a/vendor/github.com/quic-go/qtls-go1-20/handshake_client.go b/vendor/github.com/quic-go/qtls-go1-20/handshake_client.go index 67603455a8..a5fdd54caa 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/handshake_client.go +++ b/vendor/github.com/quic-go/qtls-go1-20/handshake_client.go @@ -58,23 +58,12 @@ func (c *Conn) makeClientHello() (*clientHelloMsg, *ecdh.PrivateKey, error) { return nil, nil, errors.New("tls: NextProtos values too large") } - var supportedVersions []uint16 - var clientHelloVersion uint16 - if c.extraConfig.usesAlternativeRecordLayer() { - if config.maxSupportedVersion(roleClient) < VersionTLS13 { - return nil, nil, errors.New("tls: MaxVersion prevents QUIC from using TLS 1.3") - } - // Only offer TLS 1.3 when QUIC is used. - supportedVersions = []uint16{VersionTLS13} - clientHelloVersion = VersionTLS13 - } else { - supportedVersions = config.supportedVersions(roleClient) - if len(supportedVersions) == 0 { - return nil, nil, errors.New("tls: no supported versions satisfy MinVersion and MaxVersion") - } - clientHelloVersion = config.maxSupportedVersion(roleClient) + supportedVersions := config.supportedVersions(roleClient) + if len(supportedVersions) == 0 { + return nil, nil, errors.New("tls: no supported versions satisfy MinVersion and MaxVersion") } + clientHelloVersion := config.maxSupportedVersion(roleClient) // The version at the beginning of the ClientHello was capped at TLS 1.2 // for compatibility reasons. The supported_versions extension is used // to negotiate versions now. See RFC 8446, Section 4.2.1. @@ -128,7 +117,9 @@ func (c *Conn) makeClientHello() (*clientHelloMsg, *ecdh.PrivateKey, error) { // A random session ID is used to detect when the server accepted a ticket // and is resuming a session (see RFC 5077). In TLS 1.3, it's always set as // a compatibility measure (see RFC 8446, Section 4.1.2). - if c.extraConfig == nil || c.extraConfig.AlternativeRecordLayer == nil { + // + // The session ID is not set for QUIC connections (see RFC 9001, Section 8.4). + if c.quic == nil { hello.sessionId = make([]byte, 32) if _, err := io.ReadFull(config.rand(), hello.sessionId); err != nil { return nil, nil, errors.New("tls: short read from Rand: " + err.Error()) @@ -144,22 +135,13 @@ func (c *Conn) makeClientHello() (*clientHelloMsg, *ecdh.PrivateKey, error) { var key *ecdh.PrivateKey if hello.supportedVersions[0] == VersionTLS13 { - var suites []uint16 - for _, suiteID := range configCipherSuites { - for _, suite := range cipherSuitesTLS13 { - if suite.id == suiteID { - suites = append(suites, suiteID) - } - } + if len(hello.supportedVersions) == 1 { + hello.cipherSuites = hello.cipherSuites[:0] } - if len(suites) > 0 { - hello.cipherSuites = suites + if hasAESGCMHardwareSupport { + hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13...) } else { - if hasAESGCMHardwareSupport { - hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13...) - } else { - hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13NoAES...) - } + hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13NoAES...) } curveID := config.curvePreferences()[0] @@ -173,8 +155,15 @@ func (c *Conn) makeClientHello() (*clientHelloMsg, *ecdh.PrivateKey, error) { hello.keyShares = []keyShare{{group: curveID, data: key.PublicKey().Bytes()}} } - if hello.supportedVersions[0] == VersionTLS13 && c.extraConfig != nil && c.extraConfig.GetExtensions != nil { - hello.additionalExtensions = c.extraConfig.GetExtensions(typeClientHello) + if c.quic != nil { + p, err := c.quicGetTransportParameters() + if err != nil { + return nil, nil, err + } + if p == nil { + p = []byte{} + } + hello.quicTransportParameters = p } return hello, key, nil @@ -184,7 +173,6 @@ func (c *Conn) clientHandshake(ctx context.Context) (err error) { if c.config == nil { c.config = fromConfig(defaultConfig()) } - c.setAlternativeRecordLayer() // This may be a renegotiation handshake, in which case some fields // need to be reset. @@ -196,45 +184,40 @@ func (c *Conn) clientHandshake(ctx context.Context) (err error) { } c.serverName = hello.serverName - cacheKey, session, earlySecret, binderKey := c.loadSession(hello) + cacheKey, session, earlySecret, binderKey, err := c.loadSession(hello) + if err != nil { + return err + } if cacheKey != "" && session != nil { - var deletedTicket bool - if session.vers == VersionTLS13 && hello.earlyData && c.extraConfig != nil && c.extraConfig.Enable0RTT { - // don't reuse a session ticket that enabled 0-RTT - c.config.ClientSessionCache.Put(cacheKey, nil) - deletedTicket = true - - if suite := cipherSuiteTLS13ByID(session.cipherSuite); suite != nil { - h := suite.hash.New() - h.Write(hello.marshal()) - clientEarlySecret := suite.deriveSecret(earlySecret, "c e traffic", h) - c.out.exportKey(Encryption0RTT, suite, clientEarlySecret) - if err := c.config.writeKeyLog(keyLogLabelEarlyTraffic, hello.random, clientEarlySecret); err != nil { - c.sendAlert(alertInternalError) - return err - } + defer func() { + // If we got a handshake failure when resuming a session, throw away + // the session ticket. See RFC 5077, Section 3.2. + // + // RFC 8446 makes no mention of dropping tickets on failure, but it + // does require servers to abort on invalid binders, so we need to + // delete tickets to recover from a corrupted PSK. + if err != nil { + c.config.ClientSessionCache.Put(cacheKey, nil) } - } - if !deletedTicket { - defer func() { - // If we got a handshake failure when resuming a session, throw away - // the session ticket. See RFC 5077, Section 3.2. - // - // RFC 8446 makes no mention of dropping tickets on failure, but it - // does require servers to abort on invalid binders, so we need to - // delete tickets to recover from a corrupted PSK. - if err != nil { - c.config.ClientSessionCache.Put(cacheKey, nil) - } - }() - } + }() } - if _, err := c.writeRecord(recordTypeHandshake, hello.marshal()); err != nil { + if _, err := c.writeHandshakeRecord(hello, nil); err != nil { return err } - msg, err := c.readHandshake() + if hello.earlyData { + suite := cipherSuiteTLS13ByID(session.cipherSuite) + transcript := suite.hash.New() + if err := transcriptMsg(hello, transcript); err != nil { + return err + } + earlyTrafficSecret := suite.deriveSecret(earlySecret, clientEarlyTrafficLabel, transcript) + c.quicSetWriteSecret(QUICEncryptionLevelEarly, suite.id, earlyTrafficSecret) + } + + // serverHelloMsg is not included in the transcript + msg, err := c.readHandshake(nil) if err != nil { return err } @@ -295,7 +278,6 @@ func (c *Conn) clientHandshake(ctx context.Context) (err error) { c.config.ClientSessionCache.Put(cacheKey, toClientSessionState(hs.session)) } - c.updateConnectionState() return nil } @@ -327,9 +309,9 @@ func (c *Conn) decodeSessionState(session *clientSessionState) (uint32 /* max ea } func (c *Conn) loadSession(hello *clientHelloMsg) (cacheKey string, - session *clientSessionState, earlySecret, binderKey []byte) { + session *clientSessionState, earlySecret, binderKey []byte, err error) { if c.config.SessionTicketsDisabled || c.config.ClientSessionCache == nil { - return "", nil, nil, nil + return "", nil, nil, nil, nil } hello.ticketSupported = true @@ -344,14 +326,17 @@ func (c *Conn) loadSession(hello *clientHelloMsg) (cacheKey string, // renegotiation is primarily used to allow a client to send a client // certificate, which would be skipped if session resumption occurred. if c.handshakes != 0 { - return "", nil, nil, nil + return "", nil, nil, nil, nil } // Try to resume a previously negotiated TLS session, if available. - cacheKey = clientSessionCacheKey(c.conn.RemoteAddr(), c.config) + cacheKey = c.clientSessionCacheKey() + if cacheKey == "" { + return "", nil, nil, nil, nil + } sess, ok := c.config.ClientSessionCache.Get(cacheKey) if !ok || sess == nil { - return cacheKey, nil, nil, nil + return cacheKey, nil, nil, nil, nil } session = fromClientSessionState(sess) @@ -362,7 +347,7 @@ func (c *Conn) loadSession(hello *clientHelloMsg) (cacheKey string, maxEarlyData, appData, ok = c.decodeSessionState(session) if !ok { // delete it, if parsing failed c.config.ClientSessionCache.Put(cacheKey, nil) - return cacheKey, nil, nil, nil + return cacheKey, nil, nil, nil, nil } } @@ -375,7 +360,7 @@ func (c *Conn) loadSession(hello *clientHelloMsg) (cacheKey string, } } if !versOk { - return cacheKey, nil, nil, nil + return cacheKey, nil, nil, nil, nil } // Check that the cached server certificate is not expired, and that it's @@ -384,16 +369,16 @@ func (c *Conn) loadSession(hello *clientHelloMsg) (cacheKey string, if !c.config.InsecureSkipVerify { if len(session.verifiedChains) == 0 { // The original connection had InsecureSkipVerify, while this doesn't. - return cacheKey, nil, nil, nil + return cacheKey, nil, nil, nil, nil } serverCert := session.serverCertificates[0] if c.config.time().After(serverCert.NotAfter) { // Expired certificate, delete the entry. c.config.ClientSessionCache.Put(cacheKey, nil) - return cacheKey, nil, nil, nil + return cacheKey, nil, nil, nil, nil } if err := serverCert.VerifyHostname(c.config.ServerName); err != nil { - return cacheKey, nil, nil, nil + return cacheKey, nil, nil, nil, nil } } @@ -401,7 +386,7 @@ func (c *Conn) loadSession(hello *clientHelloMsg) (cacheKey string, // In TLS 1.2 the cipher suite must match the resumed session. Ensure we // are still offering it. if mutualCipherSuite(hello.cipherSuites, session.cipherSuite) == nil { - return cacheKey, nil, nil, nil + return cacheKey, nil, nil, nil, nil } hello.sessionTicket = session.sessionTicket @@ -411,14 +396,14 @@ func (c *Conn) loadSession(hello *clientHelloMsg) (cacheKey string, // Check that the session ticket is not expired. if c.config.time().After(session.useBy) { c.config.ClientSessionCache.Put(cacheKey, nil) - return cacheKey, nil, nil, nil + return cacheKey, nil, nil, nil, nil } // In TLS 1.3 the KDF hash must match the resumed session. Ensure we // offer at least one cipher suite with that hash. cipherSuite := cipherSuiteTLS13ByID(session.cipherSuite) if cipherSuite == nil { - return cacheKey, nil, nil, nil + return cacheKey, nil, nil, nil, nil } cipherSuiteOk := false for _, offeredID := range hello.cipherSuites { @@ -429,7 +414,14 @@ func (c *Conn) loadSession(hello *clientHelloMsg) (cacheKey string, } } if !cipherSuiteOk { - return cacheKey, nil, nil, nil + return cacheKey, nil, nil, nil, nil + } + + if c.quic != nil && maxEarlyData > 0 { + // For 0-RTT, the cipher suite has to match exactly. + if mutualCipherSuiteTLS13(hello.cipherSuites, session.cipherSuite) != nil { + hello.earlyData = true + } } // Set the pre_shared_key extension. See RFC 8446, Section 4.2.11.1. @@ -446,13 +438,16 @@ func (c *Conn) loadSession(hello *clientHelloMsg) (cacheKey string, session.nonce, cipherSuite.hash.Size()) earlySecret = cipherSuite.extract(psk, nil) binderKey = cipherSuite.deriveSecret(earlySecret, resumptionBinderLabel, nil) - if c.extraConfig != nil { - hello.earlyData = c.extraConfig.Enable0RTT && maxEarlyData > 0 - } transcript := cipherSuite.hash.New() - transcript.Write(hello.marshalWithoutBinders()) + helloBytes, err := hello.marshalWithoutBinders() + if err != nil { + return "", nil, nil, nil, err + } + transcript.Write(helloBytes) pskBinders := [][]byte{cipherSuite.finishedHash(binderKey, transcript)} - hello.updateBinders(pskBinders) + if err := hello.updateBinders(pskBinders); err != nil { + return "", nil, nil, nil, err + } if session.vers == VersionTLS13 && c.extraConfig != nil && c.extraConfig.SetAppDataFromSessionState != nil { c.extraConfig.SetAppDataFromSessionState(appData) @@ -500,8 +495,12 @@ func (hs *clientHandshakeState) handshake() error { hs.finishedHash.discardHandshakeBuffer() } - hs.finishedHash.Write(hs.hello.marshal()) - hs.finishedHash.Write(hs.serverHello.marshal()) + if err := transcriptMsg(hs.hello, &hs.finishedHash); err != nil { + return err + } + if err := transcriptMsg(hs.serverHello, &hs.finishedHash); err != nil { + return err + } c.buffering = true c.didResume = isResume @@ -572,7 +571,7 @@ func (hs *clientHandshakeState) pickCipherSuite() error { func (hs *clientHandshakeState) doFullHandshake() error { c := hs.c - msg, err := c.readHandshake() + msg, err := c.readHandshake(&hs.finishedHash) if err != nil { return err } @@ -581,9 +580,8 @@ func (hs *clientHandshakeState) doFullHandshake() error { c.sendAlert(alertUnexpectedMessage) return unexpectedMessageError(certMsg, msg) } - hs.finishedHash.Write(certMsg.marshal()) - msg, err = c.readHandshake() + msg, err = c.readHandshake(&hs.finishedHash) if err != nil { return err } @@ -601,11 +599,10 @@ func (hs *clientHandshakeState) doFullHandshake() error { c.sendAlert(alertUnexpectedMessage) return errors.New("tls: received unexpected CertificateStatus message") } - hs.finishedHash.Write(cs.marshal()) c.ocspResponse = cs.response - msg, err = c.readHandshake() + msg, err = c.readHandshake(&hs.finishedHash) if err != nil { return err } @@ -634,14 +631,13 @@ func (hs *clientHandshakeState) doFullHandshake() error { skx, ok := msg.(*serverKeyExchangeMsg) if ok { - hs.finishedHash.Write(skx.marshal()) err = keyAgreement.processServerKeyExchange(c.config, hs.hello, hs.serverHello, c.peerCertificates[0], skx) if err != nil { c.sendAlert(alertUnexpectedMessage) return err } - msg, err = c.readHandshake() + msg, err = c.readHandshake(&hs.finishedHash) if err != nil { return err } @@ -652,7 +648,6 @@ func (hs *clientHandshakeState) doFullHandshake() error { certReq, ok := msg.(*certificateRequestMsg) if ok { certRequested = true - hs.finishedHash.Write(certReq.marshal()) cri := certificateRequestInfoFromMsg(hs.ctx, c.vers, certReq) if chainToSend, err = c.getClientCertificate(cri); err != nil { @@ -660,7 +655,7 @@ func (hs *clientHandshakeState) doFullHandshake() error { return err } - msg, err = c.readHandshake() + msg, err = c.readHandshake(&hs.finishedHash) if err != nil { return err } @@ -671,7 +666,6 @@ func (hs *clientHandshakeState) doFullHandshake() error { c.sendAlert(alertUnexpectedMessage) return unexpectedMessageError(shd, msg) } - hs.finishedHash.Write(shd.marshal()) // If the server requested a certificate then we have to send a // Certificate message, even if it's empty because we don't have a @@ -679,8 +673,7 @@ func (hs *clientHandshakeState) doFullHandshake() error { if certRequested { certMsg = new(certificateMsg) certMsg.certificates = chainToSend.Certificate - hs.finishedHash.Write(certMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certMsg.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(certMsg, &hs.finishedHash); err != nil { return err } } @@ -691,8 +684,7 @@ func (hs *clientHandshakeState) doFullHandshake() error { return err } if ckx != nil { - hs.finishedHash.Write(ckx.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, ckx.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(ckx, &hs.finishedHash); err != nil { return err } } @@ -739,8 +731,7 @@ func (hs *clientHandshakeState) doFullHandshake() error { return err } - hs.finishedHash.Write(certVerify.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certVerify.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(certVerify, &hs.finishedHash); err != nil { return err } } @@ -815,7 +806,7 @@ func (hs *clientHandshakeState) processServerHello() (bool, error) { } } - if err := checkALPN(hs.hello.alpnProtocols, hs.serverHello.alpnProtocol); err != nil { + if err := checkALPN(hs.hello.alpnProtocols, hs.serverHello.alpnProtocol, false); err != nil { c.sendAlert(alertUnsupportedExtension) return false, err } @@ -853,8 +844,12 @@ func (hs *clientHandshakeState) processServerHello() (bool, error) { // checkALPN ensure that the server's choice of ALPN protocol is compatible with // the protocols that we advertised in the Client Hello. -func checkALPN(clientProtos []string, serverProto string) error { +func checkALPN(clientProtos []string, serverProto string, quic bool) error { if serverProto == "" { + if quic && len(clientProtos) > 0 { + // RFC 9001, Section 8.1 + return errors.New("tls: server did not select an ALPN protocol") + } return nil } if len(clientProtos) == 0 { @@ -875,7 +870,10 @@ func (hs *clientHandshakeState) readFinished(out []byte) error { return err } - msg, err := c.readHandshake() + // finishedMsg is included in the transcript, but not until after we + // check the client version, since the state before this message was + // sent is used during verification. + msg, err := c.readHandshake(nil) if err != nil { return err } @@ -891,7 +889,11 @@ func (hs *clientHandshakeState) readFinished(out []byte) error { c.sendAlert(alertHandshakeFailure) return errors.New("tls: server's Finished message was incorrect") } - hs.finishedHash.Write(serverFinished.marshal()) + + if err := transcriptMsg(serverFinished, &hs.finishedHash); err != nil { + return err + } + copy(out, verify) return nil } @@ -902,7 +904,7 @@ func (hs *clientHandshakeState) readSessionTicket() error { } c := hs.c - msg, err := c.readHandshake() + msg, err := c.readHandshake(&hs.finishedHash) if err != nil { return err } @@ -911,7 +913,6 @@ func (hs *clientHandshakeState) readSessionTicket() error { c.sendAlert(alertUnexpectedMessage) return unexpectedMessageError(sessionTicketMsg, msg) } - hs.finishedHash.Write(sessionTicketMsg.marshal()) hs.session = &clientSessionState{ sessionTicket: sessionTicketMsg.ticket, @@ -931,20 +932,23 @@ func (hs *clientHandshakeState) readSessionTicket() error { func (hs *clientHandshakeState) sendFinished(out []byte) error { c := hs.c - if _, err := c.writeRecord(recordTypeChangeCipherSpec, []byte{1}); err != nil { + if err := c.writeChangeCipherRecord(); err != nil { return err } finished := new(finishedMsg) finished.verifyData = hs.finishedHash.clientSum(hs.masterSecret) - hs.finishedHash.Write(finished.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, finished.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(finished, &hs.finishedHash); err != nil { return err } copy(out, finished.verifyData) return nil } +// maxRSAKeySize is the maximum RSA key size in bits that we are willing +// to verify the signatures of during a TLS handshake. +const maxRSAKeySize = 8192 + // verifyServerCertificate parses and verifies the provided chain, setting // c.verifiedChains and c.peerCertificates or sending the appropriate alert. func (c *Conn) verifyServerCertificate(certificates [][]byte) error { @@ -956,6 +960,10 @@ func (c *Conn) verifyServerCertificate(certificates [][]byte) error { c.sendAlert(alertBadCertificate) return errors.New("tls: failed to parse certificate from server: " + err.Error()) } + if cert.cert.PublicKeyAlgorithm == x509.RSA && cert.cert.PublicKey.(*rsa.PublicKey).N.BitLen() > maxRSAKeySize { + c.sendAlert(alertBadCertificate) + return fmt.Errorf("tls: server sent certificate containing RSA key larger than %d bits", maxRSAKeySize) + } activeHandles[i] = cert certs[i] = cert.cert } @@ -1089,15 +1097,16 @@ func (c *Conn) getClientCertificate(cri *CertificateRequestInfo) (*Certificate, return new(Certificate), nil } -const clientSessionCacheKeyPrefix = "qtls-" - // clientSessionCacheKey returns a key used to cache sessionTickets that could // be used to resume previously negotiated TLS sessions with a server. -func clientSessionCacheKey(serverAddr net.Addr, config *config) string { - if len(config.ServerName) > 0 { - return clientSessionCacheKeyPrefix + config.ServerName +func (c *Conn) clientSessionCacheKey() string { + if len(c.config.ServerName) > 0 { + return c.config.ServerName + } + if c.conn != nil { + return c.conn.RemoteAddr().String() } - return clientSessionCacheKeyPrefix + serverAddr.String() + return "" } // hostnameInSNI converts name into an appropriate hostname for SNI. diff --git a/vendor/github.com/quic-go/qtls-go1-20/handshake_client_tls13.go b/vendor/github.com/quic-go/qtls-go1-20/handshake_client_tls13.go index caf42d8caa..e9d0a533ef 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/handshake_client_tls13.go +++ b/vendor/github.com/quic-go/qtls-go1-20/handshake_client_tls13.go @@ -65,7 +65,10 @@ func (hs *clientHandshakeStateTLS13) handshake() error { } hs.transcript = hs.suite.hash.New() - hs.transcript.Write(hs.hello.marshal()) + + if err := transcriptMsg(hs.hello, hs.transcript); err != nil { + return err + } if bytes.Equal(hs.serverHello.random, helloRetryRequestRandom) { if err := hs.sendDummyChangeCipherSpec(); err != nil { @@ -76,13 +79,14 @@ func (hs *clientHandshakeStateTLS13) handshake() error { } } - hs.transcript.Write(hs.serverHello.marshal()) + if err := transcriptMsg(hs.serverHello, hs.transcript); err != nil { + return err + } c.buffering = true if err := hs.processServerHello(); err != nil { return err } - c.updateConnectionState() if err := hs.sendDummyChangeCipherSpec(); err != nil { return err } @@ -95,7 +99,6 @@ func (hs *clientHandshakeStateTLS13) handshake() error { if err := hs.readServerCertificate(); err != nil { return err } - c.updateConnectionState() if err := hs.readServerFinished(); err != nil { return err } @@ -110,7 +113,7 @@ func (hs *clientHandshakeStateTLS13) handshake() error { } c.isHandshakeComplete.Store(true) - c.updateConnectionState() + return nil } @@ -172,13 +175,15 @@ func (hs *clientHandshakeStateTLS13) checkServerHelloOrHRR() error { // sendDummyChangeCipherSpec sends a ChangeCipherSpec record for compatibility // with middleboxes that didn't implement TLS correctly. See RFC 8446, Appendix D.4. func (hs *clientHandshakeStateTLS13) sendDummyChangeCipherSpec() error { + if hs.c.quic != nil { + return nil + } if hs.sentDummyCCS { return nil } hs.sentDummyCCS = true - _, err := hs.c.writeRecord(recordTypeChangeCipherSpec, []byte{1}) - return err + return hs.c.writeChangeCipherRecord() } // processHelloRetryRequest handles the HRR in hs.serverHello, modifies and @@ -193,7 +198,9 @@ func (hs *clientHandshakeStateTLS13) processHelloRetryRequest() error { hs.transcript.Reset() hs.transcript.Write([]byte{typeMessageHash, 0, 0, uint8(len(chHash))}) hs.transcript.Write(chHash) - hs.transcript.Write(hs.serverHello.marshal()) + if err := transcriptMsg(hs.serverHello, hs.transcript); err != nil { + return err + } // The only HelloRetryRequest extensions we support are key_share and // cookie, and clients must abort the handshake if the HRR would not result @@ -258,10 +265,18 @@ func (hs *clientHandshakeStateTLS13) processHelloRetryRequest() error { transcript := hs.suite.hash.New() transcript.Write([]byte{typeMessageHash, 0, 0, uint8(len(chHash))}) transcript.Write(chHash) - transcript.Write(hs.serverHello.marshal()) - transcript.Write(hs.hello.marshalWithoutBinders()) + if err := transcriptMsg(hs.serverHello, transcript); err != nil { + return err + } + helloBytes, err := hs.hello.marshalWithoutBinders() + if err != nil { + return err + } + transcript.Write(helloBytes) pskBinders := [][]byte{hs.suite.finishedHash(hs.binderKey, transcript)} - hs.hello.updateBinders(pskBinders) + if err := hs.hello.updateBinders(pskBinders); err != nil { + return err + } } else { // Server selected a cipher suite incompatible with the PSK. hs.hello.pskIdentities = nil @@ -269,17 +284,17 @@ func (hs *clientHandshakeStateTLS13) processHelloRetryRequest() error { } } - if hs.hello.earlyData && c.extraConfig != nil && c.extraConfig.Rejected0RTT != nil { - c.extraConfig.Rejected0RTT() + if hs.hello.earlyData { + hs.hello.earlyData = false + c.quicRejectedEarlyData() } - hs.hello.earlyData = false // disable 0-RTT - hs.transcript.Write(hs.hello.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(hs.hello, hs.transcript); err != nil { return err } - msg, err := c.readHandshake() + // serverHelloMsg is not included in the transcript + msg, err := c.readHandshake(nil) if err != nil { return err } @@ -373,17 +388,24 @@ func (hs *clientHandshakeStateTLS13) establishHandshakeKeys() error { if !hs.usingPSK { earlySecret = hs.suite.extract(nil, nil) } + handshakeSecret := hs.suite.extract(sharedKey, hs.suite.deriveSecret(earlySecret, "derived", nil)) clientSecret := hs.suite.deriveSecret(handshakeSecret, clientHandshakeTrafficLabel, hs.transcript) - c.out.exportKey(EncryptionHandshake, hs.suite, clientSecret) - c.out.setTrafficSecret(hs.suite, clientSecret) + c.out.setTrafficSecret(hs.suite, QUICEncryptionLevelHandshake, clientSecret) serverSecret := hs.suite.deriveSecret(handshakeSecret, serverHandshakeTrafficLabel, hs.transcript) - c.in.exportKey(EncryptionHandshake, hs.suite, serverSecret) - c.in.setTrafficSecret(hs.suite, serverSecret) + c.in.setTrafficSecret(hs.suite, QUICEncryptionLevelHandshake, serverSecret) + + if c.quic != nil { + if c.hand.Len() != 0 { + c.sendAlert(alertUnexpectedMessage) + } + c.quicSetWriteSecret(QUICEncryptionLevelHandshake, hs.suite.id, clientSecret) + c.quicSetReadSecret(QUICEncryptionLevelHandshake, hs.suite.id, serverSecret) + } err = c.config.writeKeyLog(keyLogLabelClientHandshake, hs.hello.random, clientSecret) if err != nil { @@ -405,7 +427,7 @@ func (hs *clientHandshakeStateTLS13) establishHandshakeKeys() error { func (hs *clientHandshakeStateTLS13) readServerParameters() error { c := hs.c - msg, err := c.readHandshake() + msg, err := c.readHandshake(hs.transcript) if err != nil { return err } @@ -415,29 +437,35 @@ func (hs *clientHandshakeStateTLS13) readServerParameters() error { c.sendAlert(alertUnexpectedMessage) return unexpectedMessageError(encryptedExtensions, msg) } - // Notify the caller if 0-RTT was rejected. - if !encryptedExtensions.earlyData && hs.hello.earlyData && c.extraConfig != nil && c.extraConfig.Rejected0RTT != nil { - c.extraConfig.Rejected0RTT() - } - c.used0RTT = encryptedExtensions.earlyData - if hs.c.extraConfig != nil && hs.c.extraConfig.ReceivedExtensions != nil { - hs.c.extraConfig.ReceivedExtensions(typeEncryptedExtensions, encryptedExtensions.additionalExtensions) - } - hs.transcript.Write(encryptedExtensions.marshal()) - if err := checkALPN(hs.hello.alpnProtocols, encryptedExtensions.alpnProtocol); err != nil { - c.sendAlert(alertUnsupportedExtension) + if err := checkALPN(hs.hello.alpnProtocols, encryptedExtensions.alpnProtocol, c.quic != nil); err != nil { + // RFC 8446 specifies that no_application_protocol is sent by servers, but + // does not specify how clients handle the selection of an incompatible protocol. + // RFC 9001 Section 8.1 specifies that QUIC clients send no_application_protocol + // in this case. Always sending no_application_protocol seems reasonable. + c.sendAlert(alertNoApplicationProtocol) return err } c.clientProtocol = encryptedExtensions.alpnProtocol - if c.extraConfig != nil && c.extraConfig.EnforceNextProtoSelection { - if len(encryptedExtensions.alpnProtocol) == 0 { - // the server didn't select an ALPN - c.sendAlert(alertNoApplicationProtocol) - return errors.New("ALPN negotiation failed. Server didn't offer any protocols") + if c.quic != nil { + if encryptedExtensions.quicTransportParameters == nil { + // RFC 9001 Section 8.2. + c.sendAlert(alertMissingExtension) + return errors.New("tls: server did not send a quic_transport_parameters extension") } + c.quicSetTransportParameters(encryptedExtensions.quicTransportParameters) + } else { + if encryptedExtensions.quicTransportParameters != nil { + c.sendAlert(alertUnsupportedExtension) + return errors.New("tls: server sent an unexpected quic_transport_parameters extension") + } + } + + if hs.hello.earlyData && !encryptedExtensions.earlyData { + c.quicRejectedEarlyData() } + return nil } @@ -459,18 +487,16 @@ func (hs *clientHandshakeStateTLS13) readServerCertificate() error { return nil } - msg, err := c.readHandshake() + msg, err := c.readHandshake(hs.transcript) if err != nil { return err } certReq, ok := msg.(*certificateRequestMsgTLS13) if ok { - hs.transcript.Write(certReq.marshal()) - hs.certReq = certReq - msg, err = c.readHandshake() + msg, err = c.readHandshake(hs.transcript) if err != nil { return err } @@ -485,7 +511,6 @@ func (hs *clientHandshakeStateTLS13) readServerCertificate() error { c.sendAlert(alertDecodeError) return errors.New("tls: received empty certificates message") } - hs.transcript.Write(certMsg.marshal()) c.scts = certMsg.certificate.SignedCertificateTimestamps c.ocspResponse = certMsg.certificate.OCSPStaple @@ -494,7 +519,10 @@ func (hs *clientHandshakeStateTLS13) readServerCertificate() error { return err } - msg, err = c.readHandshake() + // certificateVerifyMsg is included in the transcript, but not until + // after we verify the handshake signature, since the state before + // this message was sent is used. + msg, err = c.readHandshake(nil) if err != nil { return err } @@ -525,7 +553,9 @@ func (hs *clientHandshakeStateTLS13) readServerCertificate() error { return errors.New("tls: invalid signature by the server certificate: " + err.Error()) } - hs.transcript.Write(certVerify.marshal()) + if err := transcriptMsg(certVerify, hs.transcript); err != nil { + return err + } return nil } @@ -533,7 +563,10 @@ func (hs *clientHandshakeStateTLS13) readServerCertificate() error { func (hs *clientHandshakeStateTLS13) readServerFinished() error { c := hs.c - msg, err := c.readHandshake() + // finishedMsg is included in the transcript, but not until after we + // check the client version, since the state before this message was + // sent is used during verification. + msg, err := c.readHandshake(nil) if err != nil { return err } @@ -550,7 +583,9 @@ func (hs *clientHandshakeStateTLS13) readServerFinished() error { return errors.New("tls: invalid server finished hash") } - hs.transcript.Write(finished.marshal()) + if err := transcriptMsg(finished, hs.transcript); err != nil { + return err + } // Derive secrets that take context through the server Finished. @@ -558,8 +593,7 @@ func (hs *clientHandshakeStateTLS13) readServerFinished() error { clientApplicationTrafficLabel, hs.transcript) serverSecret := hs.suite.deriveSecret(hs.masterSecret, serverApplicationTrafficLabel, hs.transcript) - c.in.exportKey(EncryptionApplication, hs.suite, serverSecret) - c.in.setTrafficSecret(hs.suite, serverSecret) + c.in.setTrafficSecret(hs.suite, QUICEncryptionLevelApplication, serverSecret) err = c.config.writeKeyLog(keyLogLabelClientTraffic, hs.hello.random, hs.trafficSecret) if err != nil { @@ -600,8 +634,7 @@ func (hs *clientHandshakeStateTLS13) sendClientCertificate() error { certMsg.scts = hs.certReq.scts && len(cert.SignedCertificateTimestamps) > 0 certMsg.ocspStapling = hs.certReq.ocspStapling && len(cert.OCSPStaple) > 0 - hs.transcript.Write(certMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certMsg.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(certMsg, hs.transcript); err != nil { return err } @@ -638,8 +671,7 @@ func (hs *clientHandshakeStateTLS13) sendClientCertificate() error { } certVerifyMsg.signature = sig - hs.transcript.Write(certVerifyMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certVerifyMsg.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(certVerifyMsg, hs.transcript); err != nil { return err } @@ -653,19 +685,24 @@ func (hs *clientHandshakeStateTLS13) sendClientFinished() error { verifyData: hs.suite.finishedHash(c.out.trafficSecret, hs.transcript), } - hs.transcript.Write(finished.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, finished.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(finished, hs.transcript); err != nil { return err } - c.out.exportKey(EncryptionApplication, hs.suite, hs.trafficSecret) - c.out.setTrafficSecret(hs.suite, hs.trafficSecret) + c.out.setTrafficSecret(hs.suite, QUICEncryptionLevelApplication, hs.trafficSecret) if !c.config.SessionTicketsDisabled && c.config.ClientSessionCache != nil { c.resumptionSecret = hs.suite.deriveSecret(hs.masterSecret, resumptionLabel, hs.transcript) } + if c.quic != nil { + if c.hand.Len() != 0 { + c.sendAlert(alertUnexpectedMessage) + } + c.quicSetWriteSecret(QUICEncryptionLevelApplication, hs.suite.id, hs.trafficSecret) + } + return nil } @@ -736,8 +773,10 @@ func (c *Conn) handleNewSessionTicket(msg *newSessionTicketMsgTLS13) error { scts: c.scts, } - cacheKey := clientSessionCacheKey(c.conn.RemoteAddr(), c.config) - c.config.ClientSessionCache.Put(cacheKey, toClientSessionState(session)) + cacheKey := c.clientSessionCacheKey() + if cacheKey != "" { + c.config.ClientSessionCache.Put(cacheKey, toClientSessionState(session)) + } return nil } diff --git a/vendor/github.com/quic-go/qtls-go1-20/handshake_messages.go b/vendor/github.com/quic-go/qtls-go1-20/handshake_messages.go index 07193c8efc..37b0123637 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/handshake_messages.go +++ b/vendor/github.com/quic-go/qtls-go1-20/handshake_messages.go @@ -5,6 +5,7 @@ package qtls import ( + "errors" "fmt" "strings" @@ -92,12 +93,191 @@ type clientHelloMsg struct { pskModes []uint8 pskIdentities []pskIdentity pskBinders [][]byte - additionalExtensions []Extension + quicTransportParameters []byte } -func (m *clientHelloMsg) marshal() []byte { +func (m *clientHelloMsg) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil + } + + var exts cryptobyte.Builder + if len(m.serverName) > 0 { + // RFC 6066, Section 3 + exts.AddUint16(extensionServerName) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint8(0) // name_type = host_name + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes([]byte(m.serverName)) + }) + }) + }) + } + if m.ocspStapling { + // RFC 4366, Section 3.6 + exts.AddUint16(extensionStatusRequest) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint8(1) // status_type = ocsp + exts.AddUint16(0) // empty responder_id_list + exts.AddUint16(0) // empty request_extensions + }) + } + if len(m.supportedCurves) > 0 { + // RFC 4492, sections 5.1.1 and RFC 8446, Section 4.2.7 + exts.AddUint16(extensionSupportedCurves) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + for _, curve := range m.supportedCurves { + exts.AddUint16(uint16(curve)) + } + }) + }) + } + if len(m.supportedPoints) > 0 { + // RFC 4492, Section 5.1.2 + exts.AddUint16(extensionSupportedPoints) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(m.supportedPoints) + }) + }) + } + if m.ticketSupported { + // RFC 5077, Section 3.2 + exts.AddUint16(extensionSessionTicket) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(m.sessionTicket) + }) + } + if len(m.supportedSignatureAlgorithms) > 0 { + // RFC 5246, Section 7.4.1.4.1 + exts.AddUint16(extensionSignatureAlgorithms) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + for _, sigAlgo := range m.supportedSignatureAlgorithms { + exts.AddUint16(uint16(sigAlgo)) + } + }) + }) + } + if len(m.supportedSignatureAlgorithmsCert) > 0 { + // RFC 8446, Section 4.2.3 + exts.AddUint16(extensionSignatureAlgorithmsCert) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + for _, sigAlgo := range m.supportedSignatureAlgorithmsCert { + exts.AddUint16(uint16(sigAlgo)) + } + }) + }) + } + if m.secureRenegotiationSupported { + // RFC 5746, Section 3.2 + exts.AddUint16(extensionRenegotiationInfo) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(m.secureRenegotiation) + }) + }) + } + if len(m.alpnProtocols) > 0 { + // RFC 7301, Section 3.1 + exts.AddUint16(extensionALPN) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + for _, proto := range m.alpnProtocols { + exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes([]byte(proto)) + }) + } + }) + }) + } + if m.scts { + // RFC 6962, Section 3.3.1 + exts.AddUint16(extensionSCT) + exts.AddUint16(0) // empty extension_data + } + if len(m.supportedVersions) > 0 { + // RFC 8446, Section 4.2.1 + exts.AddUint16(extensionSupportedVersions) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) { + for _, vers := range m.supportedVersions { + exts.AddUint16(vers) + } + }) + }) + } + if len(m.cookie) > 0 { + // RFC 8446, Section 4.2.2 + exts.AddUint16(extensionCookie) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(m.cookie) + }) + }) + } + if len(m.keyShares) > 0 { + // RFC 8446, Section 4.2.8 + exts.AddUint16(extensionKeyShare) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + for _, ks := range m.keyShares { + exts.AddUint16(uint16(ks.group)) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(ks.data) + }) + } + }) + }) + } + if m.earlyData { + // RFC 8446, Section 4.2.10 + exts.AddUint16(extensionEarlyData) + exts.AddUint16(0) // empty extension_data + } + if len(m.pskModes) > 0 { + // RFC 8446, Section 4.2.9 + exts.AddUint16(extensionPSKModes) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(m.pskModes) + }) + }) + } + if m.quicTransportParameters != nil { // marshal zero-length parameters when present + // RFC 9001, Section 8.2 + exts.AddUint16(extensionQUICTransportParameters) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(m.quicTransportParameters) + }) + } + if len(m.pskIdentities) > 0 { // pre_shared_key must be the last extension + // RFC 8446, Section 4.2.11 + exts.AddUint16(extensionPreSharedKey) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + for _, psk := range m.pskIdentities { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(psk.label) + }) + exts.AddUint32(psk.obfuscatedTicketAge) + } + }) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + for _, binder := range m.pskBinders { + exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(binder) + }) + } + }) + }) + } + extBytes, err := exts.Bytes() + if err != nil { + return nil, err } var b cryptobyte.Builder @@ -117,225 +297,53 @@ func (m *clientHelloMsg) marshal() []byte { b.AddBytes(m.compressionMethods) }) - // If extensions aren't present, omit them. - var extensionsPresent bool - bWithoutExtensions := *b - - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if len(m.serverName) > 0 { - // RFC 6066, Section 3 - b.AddUint16(extensionServerName) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8(0) // name_type = host_name - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(m.serverName)) - }) - }) - }) - } - if m.ocspStapling { - // RFC 4366, Section 3.6 - b.AddUint16(extensionStatusRequest) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8(1) // status_type = ocsp - b.AddUint16(0) // empty responder_id_list - b.AddUint16(0) // empty request_extensions - }) - } - if len(m.supportedCurves) > 0 { - // RFC 4492, sections 5.1.1 and RFC 8446, Section 4.2.7 - b.AddUint16(extensionSupportedCurves) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, curve := range m.supportedCurves { - b.AddUint16(uint16(curve)) - } - }) - }) - } - if len(m.supportedPoints) > 0 { - // RFC 4492, Section 5.1.2 - b.AddUint16(extensionSupportedPoints) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.supportedPoints) - }) - }) - } - if m.ticketSupported { - // RFC 5077, Section 3.2 - b.AddUint16(extensionSessionTicket) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.sessionTicket) - }) - } - if len(m.supportedSignatureAlgorithms) > 0 { - // RFC 5246, Section 7.4.1.4.1 - b.AddUint16(extensionSignatureAlgorithms) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sigAlgo := range m.supportedSignatureAlgorithms { - b.AddUint16(uint16(sigAlgo)) - } - }) - }) - } - if len(m.supportedSignatureAlgorithmsCert) > 0 { - // RFC 8446, Section 4.2.3 - b.AddUint16(extensionSignatureAlgorithmsCert) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sigAlgo := range m.supportedSignatureAlgorithmsCert { - b.AddUint16(uint16(sigAlgo)) - } - }) - }) - } - if m.secureRenegotiationSupported { - // RFC 5746, Section 3.2 - b.AddUint16(extensionRenegotiationInfo) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.secureRenegotiation) - }) - }) - } - if len(m.alpnProtocols) > 0 { - // RFC 7301, Section 3.1 - b.AddUint16(extensionALPN) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, proto := range m.alpnProtocols { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(proto)) - }) - } - }) - }) - } - if m.scts { - // RFC 6962, Section 3.3.1 - b.AddUint16(extensionSCT) - b.AddUint16(0) // empty extension_data - } - if len(m.supportedVersions) > 0 { - // RFC 8446, Section 4.2.1 - b.AddUint16(extensionSupportedVersions) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - for _, vers := range m.supportedVersions { - b.AddUint16(vers) - } - }) - }) - } - if len(m.cookie) > 0 { - // RFC 8446, Section 4.2.2 - b.AddUint16(extensionCookie) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.cookie) - }) - }) - } - if len(m.keyShares) > 0 { - // RFC 8446, Section 4.2.8 - b.AddUint16(extensionKeyShare) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, ks := range m.keyShares { - b.AddUint16(uint16(ks.group)) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(ks.data) - }) - } - }) - }) - } - if m.earlyData { - // RFC 8446, Section 4.2.10 - b.AddUint16(extensionEarlyData) - b.AddUint16(0) // empty extension_data - } - if len(m.pskModes) > 0 { - // RFC 8446, Section 4.2.9 - b.AddUint16(extensionPSKModes) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.pskModes) - }) - }) - } - for _, ext := range m.additionalExtensions { - b.AddUint16(ext.Type) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(ext.Data) - }) - } - if len(m.pskIdentities) > 0 { // pre_shared_key must be the last extension - // RFC 8446, Section 4.2.11 - b.AddUint16(extensionPreSharedKey) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, psk := range m.pskIdentities { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(psk.label) - }) - b.AddUint32(psk.obfuscatedTicketAge) - } - }) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, binder := range m.pskBinders { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(binder) - }) - } - }) - }) - } - - extensionsPresent = len(b.BytesOrPanic()) > 2 - }) - - if !extensionsPresent { - *b = bWithoutExtensions + if len(extBytes) > 0 { + b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { + b.AddBytes(extBytes) + }) } }) - m.raw = b.BytesOrPanic() - return m.raw + m.raw, err = b.Bytes() + return m.raw, err } // marshalWithoutBinders returns the ClientHello through the // PreSharedKeyExtension.identities field, according to RFC 8446, Section // 4.2.11.2. Note that m.pskBinders must be set to slices of the correct length. -func (m *clientHelloMsg) marshalWithoutBinders() []byte { +func (m *clientHelloMsg) marshalWithoutBinders() ([]byte, error) { bindersLen := 2 // uint16 length prefix for _, binder := range m.pskBinders { bindersLen += 1 // uint8 length prefix bindersLen += len(binder) } - fullMessage := m.marshal() - return fullMessage[:len(fullMessage)-bindersLen] + fullMessage, err := m.marshal() + if err != nil { + return nil, err + } + return fullMessage[:len(fullMessage)-bindersLen], nil } // updateBinders updates the m.pskBinders field, if necessary updating the // cached marshaled representation. The supplied binders must have the same // length as the current m.pskBinders. -func (m *clientHelloMsg) updateBinders(pskBinders [][]byte) { +func (m *clientHelloMsg) updateBinders(pskBinders [][]byte) error { if len(pskBinders) != len(m.pskBinders) { - panic("tls: internal error: pskBinders length mismatch") + return errors.New("tls: internal error: pskBinders length mismatch") } for i := range m.pskBinders { if len(pskBinders[i]) != len(m.pskBinders[i]) { - panic("tls: internal error: pskBinders length mismatch") + return errors.New("tls: internal error: pskBinders length mismatch") } } m.pskBinders = pskBinders if m.raw != nil { - lenWithoutBinders := len(m.marshalWithoutBinders()) + helloBytes, err := m.marshalWithoutBinders() + if err != nil { + return err + } + lenWithoutBinders := len(helloBytes) b := cryptobyte.NewFixedBuilder(m.raw[:lenWithoutBinders]) b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { for _, binder := range m.pskBinders { @@ -345,9 +353,11 @@ func (m *clientHelloMsg) updateBinders(pskBinders [][]byte) { } }) if out, err := b.Bytes(); err != nil || len(out) != len(m.raw) { - panic("tls: internal error: failed to update binders") + return errors.New("tls: internal error: failed to update binders") } } + + return nil } func (m *clientHelloMsg) unmarshal(data []byte) bool { @@ -558,6 +568,11 @@ func (m *clientHelloMsg) unmarshal(data []byte) bool { if !readUint8LengthPrefixed(&extData, &m.pskModes) { return false } + case extensionQUICTransportParameters: + m.quicTransportParameters = make([]byte, len(extData)) + if !extData.CopyBytes(m.quicTransportParameters) { + return false + } case extensionPreSharedKey: // RFC 8446, Section 4.2.11 if !extensions.Empty() { @@ -589,7 +604,7 @@ func (m *clientHelloMsg) unmarshal(data []byte) bool { m.pskBinders = append(m.pskBinders, binder) } default: - m.additionalExtensions = append(m.additionalExtensions, Extension{Type: extension, Data: extData}) + // Ignore unknown extensions. continue } @@ -625,9 +640,98 @@ type serverHelloMsg struct { selectedGroup CurveID } -func (m *serverHelloMsg) marshal() []byte { +func (m *serverHelloMsg) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil + } + + var exts cryptobyte.Builder + if m.ocspStapling { + exts.AddUint16(extensionStatusRequest) + exts.AddUint16(0) // empty extension_data + } + if m.ticketSupported { + exts.AddUint16(extensionSessionTicket) + exts.AddUint16(0) // empty extension_data + } + if m.secureRenegotiationSupported { + exts.AddUint16(extensionRenegotiationInfo) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(m.secureRenegotiation) + }) + }) + } + if len(m.alpnProtocol) > 0 { + exts.AddUint16(extensionALPN) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes([]byte(m.alpnProtocol)) + }) + }) + }) + } + if len(m.scts) > 0 { + exts.AddUint16(extensionSCT) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + for _, sct := range m.scts { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(sct) + }) + } + }) + }) + } + if m.supportedVersion != 0 { + exts.AddUint16(extensionSupportedVersions) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16(m.supportedVersion) + }) + } + if m.serverShare.group != 0 { + exts.AddUint16(extensionKeyShare) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16(uint16(m.serverShare.group)) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(m.serverShare.data) + }) + }) + } + if m.selectedIdentityPresent { + exts.AddUint16(extensionPreSharedKey) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16(m.selectedIdentity) + }) + } + + if len(m.cookie) > 0 { + exts.AddUint16(extensionCookie) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(m.cookie) + }) + }) + } + if m.selectedGroup != 0 { + exts.AddUint16(extensionKeyShare) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint16(uint16(m.selectedGroup)) + }) + } + if len(m.supportedPoints) > 0 { + exts.AddUint16(extensionSupportedPoints) + exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) { + exts.AddBytes(m.supportedPoints) + }) + }) + } + + extBytes, err := exts.Bytes() + if err != nil { + return nil, err } var b cryptobyte.Builder @@ -641,104 +745,15 @@ func (m *serverHelloMsg) marshal() []byte { b.AddUint16(m.cipherSuite) b.AddUint8(m.compressionMethod) - // If extensions aren't present, omit them. - var extensionsPresent bool - bWithoutExtensions := *b - - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - if m.ocspStapling { - b.AddUint16(extensionStatusRequest) - b.AddUint16(0) // empty extension_data - } - if m.ticketSupported { - b.AddUint16(extensionSessionTicket) - b.AddUint16(0) // empty extension_data - } - if m.secureRenegotiationSupported { - b.AddUint16(extensionRenegotiationInfo) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.secureRenegotiation) - }) - }) - } - if len(m.alpnProtocol) > 0 { - b.AddUint16(extensionALPN) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes([]byte(m.alpnProtocol)) - }) - }) - }) - } - if len(m.scts) > 0 { - b.AddUint16(extensionSCT) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - for _, sct := range m.scts { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(sct) - }) - } - }) - }) - } - if m.supportedVersion != 0 { - b.AddUint16(extensionSupportedVersions) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(m.supportedVersion) - }) - } - if m.serverShare.group != 0 { - b.AddUint16(extensionKeyShare) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(uint16(m.serverShare.group)) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.serverShare.data) - }) - }) - } - if m.selectedIdentityPresent { - b.AddUint16(extensionPreSharedKey) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(m.selectedIdentity) - }) - } - - if len(m.cookie) > 0 { - b.AddUint16(extensionCookie) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.cookie) - }) - }) - } - if m.selectedGroup != 0 { - b.AddUint16(extensionKeyShare) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint16(uint16(m.selectedGroup)) - }) - } - if len(m.supportedPoints) > 0 { - b.AddUint16(extensionSupportedPoints) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(m.supportedPoints) - }) - }) - } - - extensionsPresent = len(b.BytesOrPanic()) > 2 - }) - - if !extensionsPresent { - *b = bWithoutExtensions + if len(extBytes) > 0 { + b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { + b.AddBytes(extBytes) + }) } }) - m.raw = b.BytesOrPanic() - return m.raw + m.raw, err = b.Bytes() + return m.raw, err } func (m *serverHelloMsg) unmarshal(data []byte) bool { @@ -858,16 +873,15 @@ func (m *serverHelloMsg) unmarshal(data []byte) bool { } type encryptedExtensionsMsg struct { - raw []byte - alpnProtocol string - earlyData bool - - additionalExtensions []Extension + raw []byte + alpnProtocol string + quicTransportParameters []byte + earlyData bool } -func (m *encryptedExtensionsMsg) marshal() []byte { +func (m *encryptedExtensionsMsg) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } var b cryptobyte.Builder @@ -884,22 +898,24 @@ func (m *encryptedExtensionsMsg) marshal() []byte { }) }) } + if m.quicTransportParameters != nil { // marshal zero-length parameters when present + // draft-ietf-quic-tls-32, Section 8.2 + b.AddUint16(extensionQUICTransportParameters) + b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { + b.AddBytes(m.quicTransportParameters) + }) + } if m.earlyData { // RFC 8446, Section 4.2.10 b.AddUint16(extensionEarlyData) b.AddUint16(0) // empty extension_data } - for _, ext := range m.additionalExtensions { - b.AddUint16(ext.Type) - b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(ext.Data) - }) - } }) }) - m.raw = b.BytesOrPanic() - return m.raw + var err error + m.raw, err = b.Bytes() + return m.raw, err } func (m *encryptedExtensionsMsg) unmarshal(data []byte) bool { @@ -913,14 +929,14 @@ func (m *encryptedExtensionsMsg) unmarshal(data []byte) bool { } for !extensions.Empty() { - var ext uint16 + var extension uint16 var extData cryptobyte.String - if !extensions.ReadUint16(&ext) || + if !extensions.ReadUint16(&extension) || !extensions.ReadUint16LengthPrefixed(&extData) { return false } - switch ext { + switch extension { case extensionALPN: var protoList cryptobyte.String if !extData.ReadUint16LengthPrefixed(&protoList) || protoList.Empty() { @@ -932,10 +948,15 @@ func (m *encryptedExtensionsMsg) unmarshal(data []byte) bool { return false } m.alpnProtocol = string(proto) + case extensionQUICTransportParameters: + m.quicTransportParameters = make([]byte, len(extData)) + if !extData.CopyBytes(m.quicTransportParameters) { + return false + } case extensionEarlyData: m.earlyData = true default: - m.additionalExtensions = append(m.additionalExtensions, Extension{Type: ext, Data: extData}) + // Ignore unknown extensions. continue } @@ -949,10 +970,10 @@ func (m *encryptedExtensionsMsg) unmarshal(data []byte) bool { type endOfEarlyDataMsg struct{} -func (m *endOfEarlyDataMsg) marshal() []byte { +func (m *endOfEarlyDataMsg) marshal() ([]byte, error) { x := make([]byte, 4) x[0] = typeEndOfEarlyData - return x + return x, nil } func (m *endOfEarlyDataMsg) unmarshal(data []byte) bool { @@ -964,9 +985,9 @@ type keyUpdateMsg struct { updateRequested bool } -func (m *keyUpdateMsg) marshal() []byte { +func (m *keyUpdateMsg) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } var b cryptobyte.Builder @@ -979,8 +1000,9 @@ func (m *keyUpdateMsg) marshal() []byte { } }) - m.raw = b.BytesOrPanic() - return m.raw + var err error + m.raw, err = b.Bytes() + return m.raw, err } func (m *keyUpdateMsg) unmarshal(data []byte) bool { @@ -1012,9 +1034,9 @@ type newSessionTicketMsgTLS13 struct { maxEarlyData uint32 } -func (m *newSessionTicketMsgTLS13) marshal() []byte { +func (m *newSessionTicketMsgTLS13) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } var b cryptobyte.Builder @@ -1039,8 +1061,9 @@ func (m *newSessionTicketMsgTLS13) marshal() []byte { }) }) - m.raw = b.BytesOrPanic() - return m.raw + var err error + m.raw, err = b.Bytes() + return m.raw, err } func (m *newSessionTicketMsgTLS13) unmarshal(data []byte) bool { @@ -1093,9 +1116,9 @@ type certificateRequestMsgTLS13 struct { certificateAuthorities [][]byte } -func (m *certificateRequestMsgTLS13) marshal() []byte { +func (m *certificateRequestMsgTLS13) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } var b cryptobyte.Builder @@ -1154,8 +1177,9 @@ func (m *certificateRequestMsgTLS13) marshal() []byte { }) }) - m.raw = b.BytesOrPanic() - return m.raw + var err error + m.raw, err = b.Bytes() + return m.raw, err } func (m *certificateRequestMsgTLS13) unmarshal(data []byte) bool { @@ -1239,9 +1263,9 @@ type certificateMsg struct { certificates [][]byte } -func (m *certificateMsg) marshal() (x []byte) { +func (m *certificateMsg) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } var i int @@ -1250,7 +1274,7 @@ func (m *certificateMsg) marshal() (x []byte) { } length := 3 + 3*len(m.certificates) + i - x = make([]byte, 4+length) + x := make([]byte, 4+length) x[0] = typeCertificate x[1] = uint8(length >> 16) x[2] = uint8(length >> 8) @@ -1271,7 +1295,7 @@ func (m *certificateMsg) marshal() (x []byte) { } m.raw = x - return + return m.raw, nil } func (m *certificateMsg) unmarshal(data []byte) bool { @@ -1318,9 +1342,9 @@ type certificateMsgTLS13 struct { scts bool } -func (m *certificateMsgTLS13) marshal() []byte { +func (m *certificateMsgTLS13) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } var b cryptobyte.Builder @@ -1338,8 +1362,9 @@ func (m *certificateMsgTLS13) marshal() []byte { marshalCertificate(b, certificate) }) - m.raw = b.BytesOrPanic() - return m.raw + var err error + m.raw, err = b.Bytes() + return m.raw, err } func marshalCertificate(b *cryptobyte.Builder, certificate Certificate) { @@ -1462,9 +1487,9 @@ type serverKeyExchangeMsg struct { key []byte } -func (m *serverKeyExchangeMsg) marshal() []byte { +func (m *serverKeyExchangeMsg) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } length := len(m.key) x := make([]byte, length+4) @@ -1475,7 +1500,7 @@ func (m *serverKeyExchangeMsg) marshal() []byte { copy(x[4:], m.key) m.raw = x - return x + return x, nil } func (m *serverKeyExchangeMsg) unmarshal(data []byte) bool { @@ -1492,9 +1517,9 @@ type certificateStatusMsg struct { response []byte } -func (m *certificateStatusMsg) marshal() []byte { +func (m *certificateStatusMsg) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } var b cryptobyte.Builder @@ -1506,8 +1531,9 @@ func (m *certificateStatusMsg) marshal() []byte { }) }) - m.raw = b.BytesOrPanic() - return m.raw + var err error + m.raw, err = b.Bytes() + return m.raw, err } func (m *certificateStatusMsg) unmarshal(data []byte) bool { @@ -1526,10 +1552,10 @@ func (m *certificateStatusMsg) unmarshal(data []byte) bool { type serverHelloDoneMsg struct{} -func (m *serverHelloDoneMsg) marshal() []byte { +func (m *serverHelloDoneMsg) marshal() ([]byte, error) { x := make([]byte, 4) x[0] = typeServerHelloDone - return x + return x, nil } func (m *serverHelloDoneMsg) unmarshal(data []byte) bool { @@ -1541,9 +1567,9 @@ type clientKeyExchangeMsg struct { ciphertext []byte } -func (m *clientKeyExchangeMsg) marshal() []byte { +func (m *clientKeyExchangeMsg) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } length := len(m.ciphertext) x := make([]byte, length+4) @@ -1554,7 +1580,7 @@ func (m *clientKeyExchangeMsg) marshal() []byte { copy(x[4:], m.ciphertext) m.raw = x - return x + return x, nil } func (m *clientKeyExchangeMsg) unmarshal(data []byte) bool { @@ -1575,9 +1601,9 @@ type finishedMsg struct { verifyData []byte } -func (m *finishedMsg) marshal() []byte { +func (m *finishedMsg) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } var b cryptobyte.Builder @@ -1586,8 +1612,9 @@ func (m *finishedMsg) marshal() []byte { b.AddBytes(m.verifyData) }) - m.raw = b.BytesOrPanic() - return m.raw + var err error + m.raw, err = b.Bytes() + return m.raw, err } func (m *finishedMsg) unmarshal(data []byte) bool { @@ -1609,9 +1636,9 @@ type certificateRequestMsg struct { certificateAuthorities [][]byte } -func (m *certificateRequestMsg) marshal() (x []byte) { +func (m *certificateRequestMsg) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } // See RFC 4346, Section 7.4.4. @@ -1626,7 +1653,7 @@ func (m *certificateRequestMsg) marshal() (x []byte) { length += 2 + 2*len(m.supportedSignatureAlgorithms) } - x = make([]byte, 4+length) + x := make([]byte, 4+length) x[0] = typeCertificateRequest x[1] = uint8(length >> 16) x[2] = uint8(length >> 8) @@ -1661,7 +1688,7 @@ func (m *certificateRequestMsg) marshal() (x []byte) { } m.raw = x - return + return m.raw, nil } func (m *certificateRequestMsg) unmarshal(data []byte) bool { @@ -1747,9 +1774,9 @@ type certificateVerifyMsg struct { signature []byte } -func (m *certificateVerifyMsg) marshal() (x []byte) { +func (m *certificateVerifyMsg) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } var b cryptobyte.Builder @@ -1763,8 +1790,9 @@ func (m *certificateVerifyMsg) marshal() (x []byte) { }) }) - m.raw = b.BytesOrPanic() - return m.raw + var err error + m.raw, err = b.Bytes() + return m.raw, err } func (m *certificateVerifyMsg) unmarshal(data []byte) bool { @@ -1787,15 +1815,15 @@ type newSessionTicketMsg struct { ticket []byte } -func (m *newSessionTicketMsg) marshal() (x []byte) { +func (m *newSessionTicketMsg) marshal() ([]byte, error) { if m.raw != nil { - return m.raw + return m.raw, nil } // See RFC 5077, Section 3.3. ticketLen := len(m.ticket) length := 2 + 4 + ticketLen - x = make([]byte, 4+length) + x := make([]byte, 4+length) x[0] = typeNewSessionTicket x[1] = uint8(length >> 16) x[2] = uint8(length >> 8) @@ -1806,7 +1834,7 @@ func (m *newSessionTicketMsg) marshal() (x []byte) { m.raw = x - return + return m.raw, nil } func (m *newSessionTicketMsg) unmarshal(data []byte) bool { @@ -1834,10 +1862,25 @@ func (m *newSessionTicketMsg) unmarshal(data []byte) bool { type helloRequestMsg struct { } -func (*helloRequestMsg) marshal() []byte { - return []byte{typeHelloRequest, 0, 0, 0} +func (*helloRequestMsg) marshal() ([]byte, error) { + return []byte{typeHelloRequest, 0, 0, 0}, nil } func (*helloRequestMsg) unmarshal(data []byte) bool { return len(data) == 4 } + +type transcriptHash interface { + Write([]byte) (int, error) +} + +// transcriptMsg is a helper used to marshal and hash messages which typically +// are not written to the wire, and as such aren't hashed during Conn.writeRecord. +func transcriptMsg(msg handshakeMessage, h transcriptHash) error { + data, err := msg.marshal() + if err != nil { + return err + } + h.Write(data) + return nil +} diff --git a/vendor/github.com/quic-go/qtls-go1-20/handshake_server.go b/vendor/github.com/quic-go/qtls-go1-20/handshake_server.go index 64bfa1fce3..7539c95d57 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/handshake_server.go +++ b/vendor/github.com/quic-go/qtls-go1-20/handshake_server.go @@ -39,8 +39,6 @@ type serverHandshakeState struct { // serverHandshake performs a TLS handshake as a server. func (c *Conn) serverHandshake(ctx context.Context) error { - c.setAlternativeRecordLayer() - clientHello, err := c.readClientHello(ctx) if err != nil { return err @@ -53,12 +51,6 @@ func (c *Conn) serverHandshake(ctx context.Context) error { clientHello: clientHello, } return hs.handshake() - } else if c.extraConfig.usesAlternativeRecordLayer() { - // This should already have been caught by the check that the ClientHello doesn't - // offer any (supported) versions older than TLS 1.3. - // Check again to make sure we can't be tricked into using an older version. - c.sendAlert(alertProtocolVersion) - return errors.New("tls: negotiated TLS < 1.3 when using QUIC") } hs := serverHandshakeState{ @@ -131,13 +123,14 @@ func (hs *serverHandshakeState) handshake() error { c.ekm = ekmFromMasterSecret(c.vers, hs.suite, hs.masterSecret, hs.clientHello.random, hs.hello.random) c.isHandshakeComplete.Store(true) - c.updateConnectionState() return nil } // readClientHello reads a ClientHello message and selects the protocol version. func (c *Conn) readClientHello(ctx context.Context) (*clientHelloMsg, error) { - msg, err := c.readHandshake() + // clientHelloMsg is included in the transcript, but we haven't initialized + // it yet. The respective handshake functions will record it themselves. + msg, err := c.readHandshake(nil) if err != nil { return nil, err } @@ -165,27 +158,6 @@ func (c *Conn) readClientHello(ctx context.Context) (*clientHelloMsg, error) { if len(clientHello.supportedVersions) == 0 { clientVersions = supportedVersionsFromMax(clientHello.vers) } - if c.extraConfig.usesAlternativeRecordLayer() { - // In QUIC, the client MUST NOT offer any old TLS versions. - // Here, we can only check that none of the other supported versions of this library - // (TLS 1.0 - TLS 1.2) is offered. We don't check for any SSL versions here. - for _, ver := range clientVersions { - if ver == VersionTLS13 { - continue - } - for _, v := range supportedVersions { - if ver == v { - c.sendAlert(alertProtocolVersion) - return nil, fmt.Errorf("tls: client offered old TLS version %#x", ver) - } - } - } - // Make the config we're using allows us to use TLS 1.3. - if c.config.maxSupportedVersion(roleServer) < VersionTLS13 { - c.sendAlert(alertInternalError) - return nil, errors.New("tls: MaxVersion prevents QUIC from using TLS 1.3") - } - } c.vers, ok = c.config.mutualVersion(roleServer, clientVersions) if !ok { c.sendAlert(alertProtocolVersion) @@ -247,7 +219,7 @@ func (hs *serverHandshakeState) processClientHello() error { c.serverName = hs.clientHello.serverName } - selectedProto, err := negotiateALPN(c.config.NextProtos, hs.clientHello.alpnProtocols) + selectedProto, err := negotiateALPN(c.config.NextProtos, hs.clientHello.alpnProtocols, false) if err != nil { c.sendAlert(alertNoApplicationProtocol) return err @@ -308,8 +280,12 @@ func (hs *serverHandshakeState) processClientHello() error { // negotiateALPN picks a shared ALPN protocol that both sides support in server // preference order. If ALPN is not configured or the peer doesn't support it, // it returns "" and no error. -func negotiateALPN(serverProtos, clientProtos []string) (string, error) { +func negotiateALPN(serverProtos, clientProtos []string, quic bool) (string, error) { if len(serverProtos) == 0 || len(clientProtos) == 0 { + if quic && len(serverProtos) != 0 { + // RFC 9001, Section 8.1 + return "", fmt.Errorf("tls: client did not request an application protocol") + } return "", nil } var http11fallback bool @@ -493,9 +469,10 @@ func (hs *serverHandshakeState) doResumeHandshake() error { hs.hello.ticketSupported = hs.sessionState.usedOldKey hs.finishedHash = newFinishedHash(c.vers, hs.suite) hs.finishedHash.discardHandshakeBuffer() - hs.finishedHash.Write(hs.clientHello.marshal()) - hs.finishedHash.Write(hs.hello.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil { + if err := transcriptMsg(hs.clientHello, &hs.finishedHash); err != nil { + return err + } + if _, err := hs.c.writeHandshakeRecord(hs.hello, &hs.finishedHash); err != nil { return err } @@ -533,24 +510,23 @@ func (hs *serverHandshakeState) doFullHandshake() error { // certificates won't be used. hs.finishedHash.discardHandshakeBuffer() } - hs.finishedHash.Write(hs.clientHello.marshal()) - hs.finishedHash.Write(hs.hello.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil { + if err := transcriptMsg(hs.clientHello, &hs.finishedHash); err != nil { + return err + } + if _, err := hs.c.writeHandshakeRecord(hs.hello, &hs.finishedHash); err != nil { return err } certMsg := new(certificateMsg) certMsg.certificates = hs.cert.Certificate - hs.finishedHash.Write(certMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certMsg.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(certMsg, &hs.finishedHash); err != nil { return err } if hs.hello.ocspStapling { certStatus := new(certificateStatusMsg) certStatus.response = hs.cert.OCSPStaple - hs.finishedHash.Write(certStatus.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certStatus.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(certStatus, &hs.finishedHash); err != nil { return err } } @@ -562,8 +538,7 @@ func (hs *serverHandshakeState) doFullHandshake() error { return err } if skx != nil { - hs.finishedHash.Write(skx.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, skx.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(skx, &hs.finishedHash); err != nil { return err } } @@ -589,15 +564,13 @@ func (hs *serverHandshakeState) doFullHandshake() error { if c.config.ClientCAs != nil { certReq.certificateAuthorities = c.config.ClientCAs.Subjects() } - hs.finishedHash.Write(certReq.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certReq.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(certReq, &hs.finishedHash); err != nil { return err } } helloDone := new(serverHelloDoneMsg) - hs.finishedHash.Write(helloDone.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, helloDone.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(helloDone, &hs.finishedHash); err != nil { return err } @@ -607,7 +580,7 @@ func (hs *serverHandshakeState) doFullHandshake() error { var pub crypto.PublicKey // public key for client auth, if any - msg, err := c.readHandshake() + msg, err := c.readHandshake(&hs.finishedHash) if err != nil { return err } @@ -620,7 +593,6 @@ func (hs *serverHandshakeState) doFullHandshake() error { c.sendAlert(alertUnexpectedMessage) return unexpectedMessageError(certMsg, msg) } - hs.finishedHash.Write(certMsg.marshal()) if err := c.processCertsFromClient(Certificate{ Certificate: certMsg.certificates, @@ -631,7 +603,7 @@ func (hs *serverHandshakeState) doFullHandshake() error { pub = c.peerCertificates[0].PublicKey } - msg, err = c.readHandshake() + msg, err = c.readHandshake(&hs.finishedHash) if err != nil { return err } @@ -649,7 +621,6 @@ func (hs *serverHandshakeState) doFullHandshake() error { c.sendAlert(alertUnexpectedMessage) return unexpectedMessageError(ckx, msg) } - hs.finishedHash.Write(ckx.marshal()) preMasterSecret, err := keyAgreement.processClientKeyExchange(c.config, hs.cert, ckx, c.vers) if err != nil { @@ -669,7 +640,10 @@ func (hs *serverHandshakeState) doFullHandshake() error { // to the client's certificate. This allows us to verify that the client is in // possession of the private key of the certificate. if len(c.peerCertificates) > 0 { - msg, err = c.readHandshake() + // certificateVerifyMsg is included in the transcript, but not until + // after we verify the handshake signature, since the state before + // this message was sent is used. + msg, err = c.readHandshake(nil) if err != nil { return err } @@ -704,7 +678,9 @@ func (hs *serverHandshakeState) doFullHandshake() error { return errors.New("tls: invalid signature by the client certificate: " + err.Error()) } - hs.finishedHash.Write(certVerify.marshal()) + if err := transcriptMsg(certVerify, &hs.finishedHash); err != nil { + return err + } } hs.finishedHash.discardHandshakeBuffer() @@ -744,7 +720,10 @@ func (hs *serverHandshakeState) readFinished(out []byte) error { return err } - msg, err := c.readHandshake() + // finishedMsg is included in the transcript, but not until after we + // check the client version, since the state before this message was + // sent is used during verification. + msg, err := c.readHandshake(nil) if err != nil { return err } @@ -761,7 +740,10 @@ func (hs *serverHandshakeState) readFinished(out []byte) error { return errors.New("tls: client's Finished message is incorrect") } - hs.finishedHash.Write(clientFinished.marshal()) + if err := transcriptMsg(clientFinished, &hs.finishedHash); err != nil { + return err + } + copy(out, verify) return nil } @@ -795,14 +777,16 @@ func (hs *serverHandshakeState) sendSessionTicket() error { masterSecret: hs.masterSecret, certificates: certsFromClient, } - var err error - m.ticket, err = c.encryptTicket(state.marshal()) + stateBytes, err := state.marshal() + if err != nil { + return err + } + m.ticket, err = c.encryptTicket(stateBytes) if err != nil { return err } - hs.finishedHash.Write(m.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, m.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(m, &hs.finishedHash); err != nil { return err } @@ -812,14 +796,13 @@ func (hs *serverHandshakeState) sendSessionTicket() error { func (hs *serverHandshakeState) sendFinished(out []byte) error { c := hs.c - if _, err := c.writeRecord(recordTypeChangeCipherSpec, []byte{1}); err != nil { + if err := c.writeChangeCipherRecord(); err != nil { return err } finished := new(finishedMsg) finished.verifyData = hs.finishedHash.serverSum(hs.masterSecret) - hs.finishedHash.Write(finished.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, finished.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(finished, &hs.finishedHash); err != nil { return err } @@ -840,6 +823,10 @@ func (c *Conn) processCertsFromClient(certificate Certificate) error { c.sendAlert(alertBadCertificate) return errors.New("tls: failed to parse client certificate: " + err.Error()) } + if certs[i].PublicKeyAlgorithm == x509.RSA && certs[i].PublicKey.(*rsa.PublicKey).N.BitLen() > maxRSAKeySize { + c.sendAlert(alertBadCertificate) + return fmt.Errorf("tls: client sent certificate containing RSA key larger than %d bits", maxRSAKeySize) + } } if len(certs) == 0 && requiresClientCert(c.config.ClientAuth) { diff --git a/vendor/github.com/quic-go/qtls-go1-20/handshake_server_tls13.go b/vendor/github.com/quic-go/qtls-go1-20/handshake_server_tls13.go index 3a5acfb96b..03bc5eb510 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/handshake_server_tls13.go +++ b/vendor/github.com/quic-go/qtls-go1-20/handshake_server_tls13.go @@ -40,6 +40,7 @@ type serverHandshakeStateTLS13 struct { trafficSecret []byte // client_application_traffic_secret_0 transcript hash.Hash clientFinished []byte + earlyData bool } func (hs *serverHandshakeStateTLS13) handshake() error { @@ -56,7 +57,6 @@ func (hs *serverHandshakeStateTLS13) handshake() error { if err := hs.checkForResumption(); err != nil { return err } - c.updateConnectionState() if err := hs.pickCertificate(); err != nil { return err } @@ -79,13 +79,12 @@ func (hs *serverHandshakeStateTLS13) handshake() error { if err := hs.readClientCertificate(); err != nil { return err } - c.updateConnectionState() if err := hs.readClientFinished(); err != nil { return err } c.isHandshakeComplete.Store(true) - c.updateConnectionState() + return nil } @@ -146,27 +145,14 @@ func (hs *serverHandshakeStateTLS13) processClientHello() error { hs.hello.sessionId = hs.clientHello.sessionId hs.hello.compressionMethod = compressionNone - if hs.suite == nil { - var preferenceList []uint16 - for _, suiteID := range c.config.CipherSuites { - for _, suite := range cipherSuitesTLS13 { - if suite.id == suiteID { - preferenceList = append(preferenceList, suiteID) - break - } - } - } - if len(preferenceList) == 0 { - preferenceList = defaultCipherSuitesTLS13 - if !hasAESGCMHardwareSupport || !aesgcmPreferred(hs.clientHello.cipherSuites) { - preferenceList = defaultCipherSuitesTLS13NoAES - } - } - for _, suiteID := range preferenceList { - hs.suite = mutualCipherSuiteTLS13(hs.clientHello.cipherSuites, suiteID) - if hs.suite != nil { - break - } + preferenceList := defaultCipherSuitesTLS13 + if !hasAESGCMHardwareSupport || !aesgcmPreferred(hs.clientHello.cipherSuites) { + preferenceList = defaultCipherSuitesTLS13NoAES + } + for _, suiteID := range preferenceList { + hs.suite = mutualCipherSuiteTLS13(hs.clientHello.cipherSuites, suiteID) + if hs.suite != nil { + break } } if hs.suite == nil { @@ -232,13 +218,23 @@ GroupSelection: return errors.New("tls: invalid client key share") } - c.serverName = hs.clientHello.serverName - - if c.extraConfig != nil && c.extraConfig.ReceivedExtensions != nil { - c.extraConfig.ReceivedExtensions(typeClientHello, hs.clientHello.additionalExtensions) + if c.quic != nil { + if hs.clientHello.quicTransportParameters == nil { + // RFC 9001 Section 8.2. + c.sendAlert(alertMissingExtension) + return errors.New("tls: client did not send a quic_transport_parameters extension") + } + c.quicSetTransportParameters(hs.clientHello.quicTransportParameters) + } else { + if hs.clientHello.quicTransportParameters != nil { + c.sendAlert(alertUnsupportedExtension) + return errors.New("tls: client sent an unexpected quic_transport_parameters extension") + } } - selectedProto, err := negotiateALPN(c.config.NextProtos, hs.clientHello.alpnProtocols) + c.serverName = hs.clientHello.serverName + + selectedProto, err := negotiateALPN(c.config.NextProtos, hs.clientHello.alpnProtocols, c.quic != nil) if err != nil { hs.alpnNegotiationErr = err } @@ -295,10 +291,9 @@ func (hs *serverHandshakeStateTLS13) checkForResumption() error { } if hs.alpnNegotiationErr == nil && sessionState.alpn == c.clientProtocol && - c.extraConfig != nil && c.extraConfig.MaxEarlyData > 0 && + c.extraConfig != nil && c.extraConfig.Enable0RTT && c.extraConfig.Accept0RTT != nil && c.extraConfig.Accept0RTT(sessionState.appData) { hs.encryptedExtensions.earlyData = true - c.used0RTT = true } } @@ -338,27 +333,33 @@ func (hs *serverHandshakeStateTLS13) checkForResumption() error { c.sendAlert(alertInternalError) return errors.New("tls: internal error: failed to clone hash") } - transcript.Write(hs.clientHello.marshalWithoutBinders()) + clientHelloBytes, err := hs.clientHello.marshalWithoutBinders() + if err != nil { + c.sendAlert(alertInternalError) + return err + } + transcript.Write(clientHelloBytes) pskBinder := hs.suite.finishedHash(binderKey, transcript) if !hmac.Equal(hs.clientHello.pskBinders[i], pskBinder) { c.sendAlert(alertDecryptError) return errors.New("tls: invalid PSK binder") } - c.didResume = true - if err := c.processCertsFromClient(sessionState.certificate); err != nil { - return err - } + if c.quic != nil && hs.clientHello.earlyData && hs.encryptedExtensions.earlyData && i == 0 && + sessionState.maxEarlyData > 0 && sessionState.cipherSuite == hs.suite.id { + hs.earlyData = true - h := cloneHash(hs.transcript, hs.suite.hash) - h.Write(hs.clientHello.marshal()) - if hs.encryptedExtensions.earlyData { - clientEarlySecret := hs.suite.deriveSecret(hs.earlySecret, "c e traffic", h) - c.in.exportKey(Encryption0RTT, hs.suite, clientEarlySecret) - if err := c.config.writeKeyLog(keyLogLabelEarlyTraffic, hs.clientHello.random, clientEarlySecret); err != nil { - c.sendAlert(alertInternalError) + transcript := hs.suite.hash.New() + if err := transcriptMsg(hs.clientHello, transcript); err != nil { return err } + earlyTrafficSecret := hs.suite.deriveSecret(hs.earlySecret, clientEarlyTrafficLabel, transcript) + c.quicSetReadSecret(QUICEncryptionLevelEarly, hs.suite.id, earlyTrafficSecret) + } + + c.didResume = true + if err := c.processCertsFromClient(sessionState.certificate); err != nil { + return err } hs.hello.selectedIdentityPresent = true @@ -435,13 +436,15 @@ func (hs *serverHandshakeStateTLS13) pickCertificate() error { // sendDummyChangeCipherSpec sends a ChangeCipherSpec record for compatibility // with middleboxes that didn't implement TLS correctly. See RFC 8446, Appendix D.4. func (hs *serverHandshakeStateTLS13) sendDummyChangeCipherSpec() error { + if hs.c.quic != nil { + return nil + } if hs.sentDummyCCS { return nil } hs.sentDummyCCS = true - _, err := hs.c.writeRecord(recordTypeChangeCipherSpec, []byte{1}) - return err + return hs.c.writeChangeCipherRecord() } func (hs *serverHandshakeStateTLS13) doHelloRetryRequest(selectedGroup CurveID) error { @@ -449,7 +452,9 @@ func (hs *serverHandshakeStateTLS13) doHelloRetryRequest(selectedGroup CurveID) // The first ClientHello gets double-hashed into the transcript upon a // HelloRetryRequest. See RFC 8446, Section 4.4.1. - hs.transcript.Write(hs.clientHello.marshal()) + if err := transcriptMsg(hs.clientHello, hs.transcript); err != nil { + return err + } chHash := hs.transcript.Sum(nil) hs.transcript.Reset() hs.transcript.Write([]byte{typeMessageHash, 0, 0, uint8(len(chHash))}) @@ -465,8 +470,7 @@ func (hs *serverHandshakeStateTLS13) doHelloRetryRequest(selectedGroup CurveID) selectedGroup: selectedGroup, } - hs.transcript.Write(helloRetryRequest.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, helloRetryRequest.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(helloRetryRequest, hs.transcript); err != nil { return err } @@ -474,7 +478,8 @@ func (hs *serverHandshakeStateTLS13) doHelloRetryRequest(selectedGroup CurveID) return err } - msg, err := c.readHandshake() + // clientHelloMsg is not included in the transcript. + msg, err := c.readHandshake(nil) if err != nil { return err } @@ -500,9 +505,9 @@ func (hs *serverHandshakeStateTLS13) doHelloRetryRequest(selectedGroup CurveID) return errors.New("tls: client illegally modified second ClientHello") } - if clientHello.earlyData { + if illegalClientHelloChange(clientHello, hs.clientHello) { c.sendAlert(alertIllegalParameter) - return errors.New("tls: client offered 0-RTT data in second ClientHello") + return errors.New("tls: client illegally modified second ClientHello") } hs.clientHello = clientHello @@ -570,9 +575,10 @@ func illegalClientHelloChange(ch, ch1 *clientHelloMsg) bool { func (hs *serverHandshakeStateTLS13) sendServerParameters() error { c := hs.c - hs.transcript.Write(hs.clientHello.marshal()) - hs.transcript.Write(hs.hello.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil { + if err := transcriptMsg(hs.clientHello, hs.transcript); err != nil { + return err + } + if _, err := hs.c.writeHandshakeRecord(hs.hello, hs.transcript); err != nil { return err } @@ -589,12 +595,18 @@ func (hs *serverHandshakeStateTLS13) sendServerParameters() error { clientSecret := hs.suite.deriveSecret(hs.handshakeSecret, clientHandshakeTrafficLabel, hs.transcript) - c.in.exportKey(EncryptionHandshake, hs.suite, clientSecret) - c.in.setTrafficSecret(hs.suite, clientSecret) + c.in.setTrafficSecret(hs.suite, QUICEncryptionLevelHandshake, clientSecret) serverSecret := hs.suite.deriveSecret(hs.handshakeSecret, serverHandshakeTrafficLabel, hs.transcript) - c.out.exportKey(EncryptionHandshake, hs.suite, serverSecret) - c.out.setTrafficSecret(hs.suite, serverSecret) + c.out.setTrafficSecret(hs.suite, QUICEncryptionLevelHandshake, serverSecret) + + if c.quic != nil { + if c.hand.Len() != 0 { + c.sendAlert(alertUnexpectedMessage) + } + c.quicSetWriteSecret(QUICEncryptionLevelHandshake, hs.suite.id, serverSecret) + c.quicSetReadSecret(QUICEncryptionLevelHandshake, hs.suite.id, clientSecret) + } err := c.config.writeKeyLog(keyLogLabelClientHandshake, hs.clientHello.random, clientSecret) if err != nil { @@ -607,16 +619,23 @@ func (hs *serverHandshakeStateTLS13) sendServerParameters() error { return err } - if hs.alpnNegotiationErr != nil { + selectedProto, err := negotiateALPN(c.config.NextProtos, hs.clientHello.alpnProtocols, c.quic != nil) + if err != nil { c.sendAlert(alertNoApplicationProtocol) - return hs.alpnNegotiationErr + return err } - if hs.c.extraConfig != nil && hs.c.extraConfig.GetExtensions != nil { - hs.encryptedExtensions.additionalExtensions = hs.c.extraConfig.GetExtensions(typeEncryptedExtensions) + hs.encryptedExtensions.alpnProtocol = selectedProto + c.clientProtocol = selectedProto + + if c.quic != nil { + p, err := c.quicGetTransportParameters() + if err != nil { + return err + } + hs.encryptedExtensions.quicTransportParameters = p } - hs.transcript.Write(hs.encryptedExtensions.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, hs.encryptedExtensions.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(hs.encryptedExtensions, hs.transcript); err != nil { return err } @@ -645,8 +664,7 @@ func (hs *serverHandshakeStateTLS13) sendServerCertificate() error { certReq.certificateAuthorities = c.config.ClientCAs.Subjects() } - hs.transcript.Write(certReq.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certReq.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(certReq, hs.transcript); err != nil { return err } } @@ -657,8 +675,7 @@ func (hs *serverHandshakeStateTLS13) sendServerCertificate() error { certMsg.scts = hs.clientHello.scts && len(hs.cert.SignedCertificateTimestamps) > 0 certMsg.ocspStapling = hs.clientHello.ocspStapling && len(hs.cert.OCSPStaple) > 0 - hs.transcript.Write(certMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certMsg.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(certMsg, hs.transcript); err != nil { return err } @@ -689,8 +706,7 @@ func (hs *serverHandshakeStateTLS13) sendServerCertificate() error { } certVerifyMsg.signature = sig - hs.transcript.Write(certVerifyMsg.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, certVerifyMsg.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(certVerifyMsg, hs.transcript); err != nil { return err } @@ -704,8 +720,7 @@ func (hs *serverHandshakeStateTLS13) sendServerFinished() error { verifyData: hs.suite.finishedHash(c.out.trafficSecret, hs.transcript), } - hs.transcript.Write(finished.marshal()) - if _, err := c.writeRecord(recordTypeHandshake, finished.marshal()); err != nil { + if _, err := hs.c.writeHandshakeRecord(finished, hs.transcript); err != nil { return err } @@ -718,8 +733,15 @@ func (hs *serverHandshakeStateTLS13) sendServerFinished() error { clientApplicationTrafficLabel, hs.transcript) serverSecret := hs.suite.deriveSecret(hs.masterSecret, serverApplicationTrafficLabel, hs.transcript) - c.out.exportKey(EncryptionApplication, hs.suite, serverSecret) - c.out.setTrafficSecret(hs.suite, serverSecret) + c.out.setTrafficSecret(hs.suite, QUICEncryptionLevelApplication, serverSecret) + + if c.quic != nil { + if c.hand.Len() != 0 { + // TODO: Handle this in setTrafficSecret? + c.sendAlert(alertUnexpectedMessage) + } + c.quicSetWriteSecret(QUICEncryptionLevelApplication, hs.suite.id, serverSecret) + } err := c.config.writeKeyLog(keyLogLabelClientTraffic, hs.clientHello.random, hs.trafficSecret) if err != nil { @@ -751,6 +773,10 @@ func (hs *serverHandshakeStateTLS13) shouldSendSessionTickets() bool { return false } + // QUIC tickets are sent by QUICConn.SendSessionTicket, not automatically. + if hs.c.quic != nil { + return false + } // Don't send tickets the client wouldn't use. See RFC 8446, Section 4.2.9. for _, pskMode := range hs.clientHello.pskModes { if pskMode == pskModeDHE { @@ -767,28 +793,71 @@ func (hs *serverHandshakeStateTLS13) sendSessionTickets() error { finishedMsg := &finishedMsg{ verifyData: hs.clientFinished, } - hs.transcript.Write(finishedMsg.marshal()) + if err := transcriptMsg(finishedMsg, hs.transcript); err != nil { + return err + } + c.resumptionSecret = hs.suite.deriveSecret(hs.masterSecret, + resumptionLabel, hs.transcript) if !hs.shouldSendSessionTickets() { return nil } + return c.sendSessionTicket(false) +} - c.resumptionSecret = hs.suite.deriveSecret(hs.masterSecret, - resumptionLabel, hs.transcript) +func (c *Conn) sendSessionTicket(earlyData bool) error { + suite := cipherSuiteTLS13ByID(c.cipherSuite) + if suite == nil { + return errors.New("tls: internal error: unknown cipher suite") + } - // Don't send session tickets when the alternative record layer is set. - // Instead, save the resumption secret on the Conn. - // Session tickets can then be generated by calling Conn.GetSessionTicket(). - if hs.c.extraConfig != nil && hs.c.extraConfig.AlternativeRecordLayer != nil { - return nil + m := new(newSessionTicketMsgTLS13) + + var certsFromClient [][]byte + for _, cert := range c.peerCertificates { + certsFromClient = append(certsFromClient, cert.Raw) + } + state := sessionStateTLS13{ + cipherSuite: suite.id, + createdAt: uint64(c.config.time().Unix()), + resumptionSecret: c.resumptionSecret, + certificate: Certificate{ + Certificate: certsFromClient, + OCSPStaple: c.ocspResponse, + SignedCertificateTimestamps: c.scts, + }, + alpn: c.clientProtocol, + } + if earlyData { + state.maxEarlyData = 0xffffffff + state.appData = c.extraConfig.GetAppDataForSessionTicket() } + stateBytes, err := state.marshal() + if err != nil { + c.sendAlert(alertInternalError) + return err + } + m.label, err = c.encryptTicket(stateBytes) + if err != nil { + return err + } + m.lifetime = uint32(maxSessionTicketLifetime / time.Second) - m, err := hs.c.getSessionTicketMsg(nil) + // ticket_age_add is a random 32-bit value. See RFC 8446, section 4.6.1 + // The value is not stored anywhere; we never need to check the ticket age + // because 0-RTT is not supported. + ageAdd := make([]byte, 4) + _, err = c.config.rand().Read(ageAdd) if err != nil { return err } - if _, err := c.writeRecord(recordTypeHandshake, m.marshal()); err != nil { + if earlyData { + // RFC 9001, Section 4.6.1 + m.maxEarlyData = 0xffffffff + } + + if _, err := c.writeHandshakeRecord(m, nil); err != nil { return err } @@ -813,7 +882,7 @@ func (hs *serverHandshakeStateTLS13) readClientCertificate() error { // If we requested a client certificate, then the client must send a // certificate message. If it's empty, no CertificateVerify is sent. - msg, err := c.readHandshake() + msg, err := c.readHandshake(hs.transcript) if err != nil { return err } @@ -823,7 +892,6 @@ func (hs *serverHandshakeStateTLS13) readClientCertificate() error { c.sendAlert(alertUnexpectedMessage) return unexpectedMessageError(certMsg, msg) } - hs.transcript.Write(certMsg.marshal()) if err := c.processCertsFromClient(certMsg.certificate); err != nil { return err @@ -837,7 +905,10 @@ func (hs *serverHandshakeStateTLS13) readClientCertificate() error { } if len(certMsg.certificate.Certificate) != 0 { - msg, err = c.readHandshake() + // certificateVerifyMsg is included in the transcript, but not until + // after we verify the handshake signature, since the state before + // this message was sent is used. + msg, err = c.readHandshake(nil) if err != nil { return err } @@ -868,7 +939,9 @@ func (hs *serverHandshakeStateTLS13) readClientCertificate() error { return errors.New("tls: invalid signature by the client certificate: " + err.Error()) } - hs.transcript.Write(certVerify.marshal()) + if err := transcriptMsg(certVerify, hs.transcript); err != nil { + return err + } } // If we waited until the client certificates to send session tickets, we @@ -883,7 +956,8 @@ func (hs *serverHandshakeStateTLS13) readClientCertificate() error { func (hs *serverHandshakeStateTLS13) readClientFinished() error { c := hs.c - msg, err := c.readHandshake() + // finishedMsg is not included in the transcript. + msg, err := c.readHandshake(nil) if err != nil { return err } @@ -899,8 +973,7 @@ func (hs *serverHandshakeStateTLS13) readClientFinished() error { return errors.New("tls: invalid client finished hash") } - c.in.exportKey(EncryptionApplication, hs.suite, hs.trafficSecret) - c.in.setTrafficSecret(hs.suite, hs.trafficSecret) + c.in.setTrafficSecret(hs.suite, QUICEncryptionLevelApplication, hs.trafficSecret) return nil } diff --git a/vendor/github.com/quic-go/qtls-go1-20/key_schedule.go b/vendor/github.com/quic-go/qtls-go1-20/key_schedule.go index ef6d1ba29d..a4568933de 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/key_schedule.go +++ b/vendor/github.com/quic-go/qtls-go1-20/key_schedule.go @@ -8,6 +8,7 @@ import ( "crypto/ecdh" "crypto/hmac" "errors" + "fmt" "hash" "io" @@ -20,6 +21,7 @@ import ( const ( resumptionBinderLabel = "res binder" + clientEarlyTrafficLabel = "c e traffic" clientHandshakeTrafficLabel = "c hs traffic" serverHandshakeTrafficLabel = "s hs traffic" clientApplicationTrafficLabel = "c ap traffic" @@ -40,8 +42,24 @@ func (c *cipherSuiteTLS13) expandLabel(secret []byte, label string, context []by hkdfLabel.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { b.AddBytes(context) }) + hkdfLabelBytes, err := hkdfLabel.Bytes() + if err != nil { + // Rather than calling BytesOrPanic, we explicitly handle this error, in + // order to provide a reasonable error message. It should be basically + // impossible for this to panic, and routing errors back through the + // tree rooted in this function is quite painful. The labels are fixed + // size, and the context is either a fixed-length computed hash, or + // parsed from a field which has the same length limitation. As such, an + // error here is likely to only be caused during development. + // + // NOTE: another reasonable approach here might be to return a + // randomized slice if we encounter an error, which would break the + // connection, but avoid panicking. This would perhaps be safer but + // significantly more confusing to users. + panic(fmt.Errorf("failed to construct HKDF label: %s", err)) + } out := make([]byte, length) - n, err := hkdf.Expand(c.hash.New, secret, hkdfLabel.BytesOrPanic()).Read(out) + n, err := hkdf.Expand(c.hash.New, secret, hkdfLabelBytes).Read(out) if err != nil || n != length { panic("tls: HKDF-Expand-Label invocation failed unexpectedly") } diff --git a/vendor/github.com/quic-go/qtls-go1-20/quic.go b/vendor/github.com/quic-go/qtls-go1-20/quic.go new file mode 100644 index 0000000000..6be1e91962 --- /dev/null +++ b/vendor/github.com/quic-go/qtls-go1-20/quic.go @@ -0,0 +1,412 @@ +// 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 qtls + +import ( + "context" + "errors" + "fmt" +) + +// QUICEncryptionLevel represents a QUIC encryption level used to transmit +// handshake messages. +type QUICEncryptionLevel int + +const ( + QUICEncryptionLevelInitial = QUICEncryptionLevel(iota) + QUICEncryptionLevelEarly + QUICEncryptionLevelHandshake + QUICEncryptionLevelApplication +) + +func (l QUICEncryptionLevel) String() string { + switch l { + case QUICEncryptionLevelInitial: + return "Initial" + case QUICEncryptionLevelEarly: + return "Early" + case QUICEncryptionLevelHandshake: + return "Handshake" + case QUICEncryptionLevelApplication: + return "Application" + default: + return fmt.Sprintf("QUICEncryptionLevel(%v)", int(l)) + } +} + +// A QUICConn represents a connection which uses a QUIC implementation as the underlying +// transport as described in RFC 9001. +// +// Methods of QUICConn are not safe for concurrent use. +type QUICConn struct { + conn *Conn + + sessionTicketSent bool +} + +// A QUICConfig configures a QUICConn. +type QUICConfig struct { + TLSConfig *Config + ExtraConfig *ExtraConfig +} + +// A QUICEventKind is a type of operation on a QUIC connection. +type QUICEventKind int + +const ( + // QUICNoEvent indicates that there are no events available. + QUICNoEvent QUICEventKind = iota + + // QUICSetReadSecret and QUICSetWriteSecret provide the read and write + // secrets for a given encryption level. + // QUICEvent.Level, QUICEvent.Data, and QUICEvent.Suite are set. + // + // Secrets for the Initial encryption level are derived from the initial + // destination connection ID, and are not provided by the QUICConn. + QUICSetReadSecret + QUICSetWriteSecret + + // QUICWriteData provides data to send to the peer in CRYPTO frames. + // QUICEvent.Data is set. + QUICWriteData + + // QUICTransportParameters provides the peer's QUIC transport parameters. + // QUICEvent.Data is set. + QUICTransportParameters + + // QUICTransportParametersRequired indicates that the caller must provide + // QUIC transport parameters to send to the peer. The caller should set + // the transport parameters with QUICConn.SetTransportParameters and call + // QUICConn.NextEvent again. + // + // If transport parameters are set before calling QUICConn.Start, the + // connection will never generate a QUICTransportParametersRequired event. + QUICTransportParametersRequired + + // QUICRejectedEarlyData indicates that the server rejected 0-RTT data even + // if we offered it. It's returned before QUICEncryptionLevelApplication + // keys are returned. + QUICRejectedEarlyData + + // QUICHandshakeDone indicates that the TLS handshake has completed. + QUICHandshakeDone +) + +// A QUICEvent is an event occurring on a QUIC connection. +// +// The type of event is specified by the Kind field. +// The contents of the other fields are kind-specific. +type QUICEvent struct { + Kind QUICEventKind + + // Set for QUICSetReadSecret, QUICSetWriteSecret, and QUICWriteData. + Level QUICEncryptionLevel + + // Set for QUICTransportParameters, QUICSetReadSecret, QUICSetWriteSecret, and QUICWriteData. + // The contents are owned by crypto/tls, and are valid until the next NextEvent call. + Data []byte + + // Set for QUICSetReadSecret and QUICSetWriteSecret. + Suite uint16 +} + +type quicState struct { + events []QUICEvent + nextEvent int + + // eventArr is a statically allocated event array, large enough to handle + // the usual maximum number of events resulting from a single call: transport + // parameters, Initial data, Early read secret, Handshake write and read + // secrets, Handshake data, Application write secret, Application data. + eventArr [8]QUICEvent + + started bool + signalc chan struct{} // handshake data is available to be read + blockedc chan struct{} // handshake is waiting for data, closed when done + cancelc <-chan struct{} // handshake has been canceled + cancel context.CancelFunc + + // readbuf is shared between HandleData and the handshake goroutine. + // HandshakeCryptoData passes ownership to the handshake goroutine by + // reading from signalc, and reclaims ownership by reading from blockedc. + readbuf []byte + + transportParams []byte // to send to the peer +} + +// QUICClient returns a new TLS client side connection using QUICTransport as the +// underlying transport. The config cannot be nil. +// +// The config's MinVersion must be at least TLS 1.3. +func QUICClient(config *QUICConfig) *QUICConn { + return newQUICConn(Client(nil, config.TLSConfig), config.ExtraConfig) +} + +// QUICServer returns a new TLS server side connection using QUICTransport as the +// underlying transport. The config cannot be nil. +// +// The config's MinVersion must be at least TLS 1.3. +func QUICServer(config *QUICConfig) *QUICConn { + return newQUICConn(Server(nil, config.TLSConfig), config.ExtraConfig) +} + +func newQUICConn(conn *Conn, extraConfig *ExtraConfig) *QUICConn { + conn.quic = &quicState{ + signalc: make(chan struct{}), + blockedc: make(chan struct{}), + } + conn.quic.events = conn.quic.eventArr[:0] + conn.extraConfig = extraConfig + return &QUICConn{ + conn: conn, + } +} + +// Start starts the client or server handshake protocol. +// It may produce connection events, which may be read with NextEvent. +// +// Start must be called at most once. +func (q *QUICConn) Start(ctx context.Context) error { + if q.conn.quic.started { + return quicError(errors.New("tls: Start called more than once")) + } + q.conn.quic.started = true + if q.conn.config.MinVersion < VersionTLS13 { + return quicError(errors.New("tls: Config MinVersion must be at least TLS 1.13")) + } + go q.conn.HandshakeContext(ctx) + if _, ok := <-q.conn.quic.blockedc; !ok { + return q.conn.handshakeErr + } + return nil +} + +// NextEvent returns the next event occurring on the connection. +// It returns an event with a Kind of QUICNoEvent when no events are available. +func (q *QUICConn) NextEvent() QUICEvent { + qs := q.conn.quic + if last := qs.nextEvent - 1; last >= 0 && len(qs.events[last].Data) > 0 { + // Write over some of the previous event's data, + // to catch callers erroniously retaining it. + qs.events[last].Data[0] = 0 + } + if qs.nextEvent >= len(qs.events) { + qs.events = qs.events[:0] + qs.nextEvent = 0 + return QUICEvent{Kind: QUICNoEvent} + } + e := qs.events[qs.nextEvent] + qs.events[qs.nextEvent] = QUICEvent{} // zero out references to data + qs.nextEvent++ + return e +} + +// Close closes the connection and stops any in-progress handshake. +func (q *QUICConn) Close() error { + if q.conn.quic.cancel == nil { + return nil // never started + } + q.conn.quic.cancel() + for range q.conn.quic.blockedc { + // Wait for the handshake goroutine to return. + } + return q.conn.handshakeErr +} + +// HandleData handles handshake bytes received from the peer. +// It may produce connection events, which may be read with NextEvent. +func (q *QUICConn) HandleData(level QUICEncryptionLevel, data []byte) error { + c := q.conn + if c.in.level != level { + return quicError(c.in.setErrorLocked(errors.New("tls: handshake data received at wrong level"))) + } + c.quic.readbuf = data + <-c.quic.signalc + _, ok := <-c.quic.blockedc + if ok { + // The handshake goroutine is waiting for more data. + return nil + } + // The handshake goroutine has exited. + c.hand.Write(c.quic.readbuf) + c.quic.readbuf = nil + for q.conn.hand.Len() >= 4 && q.conn.handshakeErr == nil { + b := q.conn.hand.Bytes() + n := int(b[1])<<16 | int(b[2])<<8 | int(b[3]) + if 4+n < len(b) { + return nil + } + if err := q.conn.handlePostHandshakeMessage(); err != nil { + return quicError(err) + } + } + if q.conn.handshakeErr != nil { + return quicError(q.conn.handshakeErr) + } + return nil +} + +// SendSessionTicket sends a session ticket to the client. +// It produces connection events, which may be read with NextEvent. +// Currently, it can only be called once. +func (q *QUICConn) SendSessionTicket(earlyData bool) error { + c := q.conn + if !c.isHandshakeComplete.Load() { + return quicError(errors.New("tls: SendSessionTicket called before handshake completed")) + } + if c.isClient { + return quicError(errors.New("tls: SendSessionTicket called on the client")) + } + if q.sessionTicketSent { + return quicError(errors.New("tls: SendSessionTicket called multiple times")) + } + q.sessionTicketSent = true + return quicError(c.sendSessionTicket(earlyData)) +} + +// ConnectionState returns basic TLS details about the connection. +func (q *QUICConn) ConnectionState() ConnectionState { + return q.conn.ConnectionState() +} + +// SetTransportParameters sets the transport parameters to send to the peer. +// +// Server connections may delay setting the transport parameters until after +// receiving the client's transport parameters. See QUICTransportParametersRequired. +func (q *QUICConn) SetTransportParameters(params []byte) { + if params == nil { + params = []byte{} + } + q.conn.quic.transportParams = params + if q.conn.quic.started { + <-q.conn.quic.signalc + <-q.conn.quic.blockedc + } +} + +// quicError ensures err is an AlertError. +// If err is not already, quicError wraps it with alertInternalError. +func quicError(err error) error { + if err == nil { + return nil + } + var ae AlertError + if errors.As(err, &ae) { + return err + } + var a alert + if !errors.As(err, &a) { + a = alertInternalError + } + // Return an error wrapping the original error and an AlertError. + // Truncate the text of the alert to 0 characters. + return fmt.Errorf("%w%.0w", err, AlertError(a)) +} + +func (c *Conn) quicReadHandshakeBytes(n int) error { + for c.hand.Len() < n { + if err := c.quicWaitForSignal(); err != nil { + return err + } + } + return nil +} + +func (c *Conn) quicSetReadSecret(level QUICEncryptionLevel, suite uint16, secret []byte) { + c.quic.events = append(c.quic.events, QUICEvent{ + Kind: QUICSetReadSecret, + Level: level, + Suite: suite, + Data: secret, + }) +} + +func (c *Conn) quicSetWriteSecret(level QUICEncryptionLevel, suite uint16, secret []byte) { + c.quic.events = append(c.quic.events, QUICEvent{ + Kind: QUICSetWriteSecret, + Level: level, + Suite: suite, + Data: secret, + }) +} + +func (c *Conn) quicWriteCryptoData(level QUICEncryptionLevel, data []byte) { + var last *QUICEvent + if len(c.quic.events) > 0 { + last = &c.quic.events[len(c.quic.events)-1] + } + if last == nil || last.Kind != QUICWriteData || last.Level != level { + c.quic.events = append(c.quic.events, QUICEvent{ + Kind: QUICWriteData, + Level: level, + }) + last = &c.quic.events[len(c.quic.events)-1] + } + last.Data = append(last.Data, data...) +} + +func (c *Conn) quicSetTransportParameters(params []byte) { + c.quic.events = append(c.quic.events, QUICEvent{ + Kind: QUICTransportParameters, + Data: params, + }) +} + +func (c *Conn) quicGetTransportParameters() ([]byte, error) { + if c.quic.transportParams == nil { + c.quic.events = append(c.quic.events, QUICEvent{ + Kind: QUICTransportParametersRequired, + }) + } + for c.quic.transportParams == nil { + if err := c.quicWaitForSignal(); err != nil { + return nil, err + } + } + return c.quic.transportParams, nil +} + +func (c *Conn) quicHandshakeComplete() { + c.quic.events = append(c.quic.events, QUICEvent{ + Kind: QUICHandshakeDone, + }) +} + +func (c *Conn) quicRejectedEarlyData() { + c.quic.events = append(c.quic.events, QUICEvent{ + Kind: QUICRejectedEarlyData, + }) +} + +// quicWaitForSignal notifies the QUICConn that handshake progress is blocked, +// and waits for a signal that the handshake should proceed. +// +// The handshake may become blocked waiting for handshake bytes +// or for the user to provide transport parameters. +func (c *Conn) quicWaitForSignal() error { + // Drop the handshake mutex while blocked to allow the user + // to call ConnectionState before the handshake completes. + c.handshakeMutex.Unlock() + defer c.handshakeMutex.Lock() + // Send on blockedc to notify the QUICConn that the handshake is blocked. + // Exported methods of QUICConn wait for the handshake to become blocked + // before returning to the user. + select { + case c.quic.blockedc <- struct{}{}: + case <-c.quic.cancelc: + return c.sendAlertLocked(alertCloseNotify) + } + // The QUICConn reads from signalc to notify us that the handshake may + // be able to proceed. (The QUICConn reads, because we close signalc to + // indicate that the handshake has completed.) + select { + case c.quic.signalc <- struct{}{}: + c.hand.Write(c.quic.readbuf) + c.quic.readbuf = nil + case <-c.quic.cancelc: + return c.sendAlertLocked(alertCloseNotify) + } + return nil +} diff --git a/vendor/github.com/quic-go/qtls-go1-20/ticket.go b/vendor/github.com/quic-go/qtls-go1-20/ticket.go index 7eb555c459..3666207071 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/ticket.go +++ b/vendor/github.com/quic-go/qtls-go1-20/ticket.go @@ -11,12 +11,9 @@ import ( "crypto/hmac" "crypto/sha256" "crypto/subtle" - "encoding/binary" "errors" - "io" - "time" - "golang.org/x/crypto/cryptobyte" + "io" ) // sessionState contains the information that is serialized into a session @@ -34,7 +31,7 @@ type sessionState struct { usedOldKey bool } -func (m *sessionState) marshal() []byte { +func (m *sessionState) marshal() ([]byte, error) { var b cryptobyte.Builder b.AddUint16(m.vers) b.AddUint16(m.cipherSuite) @@ -49,7 +46,7 @@ func (m *sessionState) marshal() []byte { }) } }) - return b.BytesOrPanic() + return b.Bytes() } func (m *sessionState) unmarshal(data []byte) bool { @@ -94,7 +91,7 @@ type sessionStateTLS13 struct { appData []byte } -func (m *sessionStateTLS13) marshal() []byte { +func (m *sessionStateTLS13) marshal() ([]byte, error) { var b cryptobyte.Builder b.AddUint16(VersionTLS13) b.AddUint8(2) // revision @@ -111,7 +108,7 @@ func (m *sessionStateTLS13) marshal() []byte { b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { b.AddBytes(m.appData) }) - return b.BytesOrPanic() + return b.Bytes() } func (m *sessionStateTLS13) unmarshal(data []byte) bool { @@ -204,71 +201,3 @@ func (c *Conn) decryptTicket(encrypted []byte) (plaintext []byte, usedOldKey boo return plaintext, keyIndex > 0 } - -func (c *Conn) getSessionTicketMsg(appData []byte) (*newSessionTicketMsgTLS13, error) { - m := new(newSessionTicketMsgTLS13) - - var certsFromClient [][]byte - for _, cert := range c.peerCertificates { - certsFromClient = append(certsFromClient, cert.Raw) - } - state := sessionStateTLS13{ - cipherSuite: c.cipherSuite, - createdAt: uint64(c.config.time().Unix()), - resumptionSecret: c.resumptionSecret, - certificate: Certificate{ - Certificate: certsFromClient, - OCSPStaple: c.ocspResponse, - SignedCertificateTimestamps: c.scts, - }, - appData: appData, - alpn: c.clientProtocol, - } - if c.extraConfig != nil { - state.maxEarlyData = c.extraConfig.MaxEarlyData - } - var err error - m.label, err = c.encryptTicket(state.marshal()) - if err != nil { - return nil, err - } - m.lifetime = uint32(maxSessionTicketLifetime / time.Second) - - // ticket_age_add is a random 32-bit value. See RFC 8446, section 4.6.1 - // The value is not stored anywhere; we never need to check the ticket age - // because 0-RTT is not supported. - ageAdd := make([]byte, 4) - _, err = c.config.rand().Read(ageAdd) - if err != nil { - return nil, err - } - m.ageAdd = binary.LittleEndian.Uint32(ageAdd) - - // ticket_nonce, which must be unique per connection, is always left at - // zero because we only ever send one ticket per connection. - - if c.extraConfig != nil { - m.maxEarlyData = c.extraConfig.MaxEarlyData - } - return m, nil -} - -// GetSessionTicket generates a new session ticket. -// It should only be called after the handshake completes. -// It can only be used for servers, and only if the alternative record layer is set. -// The ticket may be nil if config.SessionTicketsDisabled is set, -// or if the client isn't able to receive session tickets. -func (c *Conn) GetSessionTicket(appData []byte) ([]byte, error) { - if c.isClient || !c.isHandshakeComplete.Load() || c.extraConfig == nil || c.extraConfig.AlternativeRecordLayer == nil { - return nil, errors.New("GetSessionTicket is only valid for servers after completion of the handshake, and if an alternative record layer is set.") - } - if c.config.SessionTicketsDisabled { - return nil, nil - } - - m, err := c.getSessionTicketMsg(appData) - if err != nil { - return nil, err - } - return m.marshal(), nil -} diff --git a/vendor/github.com/quic-go/qtls-go1-20/tls.go b/vendor/github.com/quic-go/qtls-go1-20/tls.go index 42207c235f..47eed08558 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/tls.go +++ b/vendor/github.com/quic-go/qtls-go1-20/tls.go @@ -31,11 +31,10 @@ import ( // using conn as the underlying transport. // The configuration config must be non-nil and must include // at least one certificate or else set GetCertificate. -func Server(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { +func Server(conn net.Conn, config *Config) *Conn { c := &Conn{ - conn: conn, - config: fromConfig(config), - extraConfig: extraConfig, + conn: conn, + config: fromConfig(config), } c.handshakeFn = c.serverHandshake return c @@ -45,12 +44,11 @@ func Server(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { // using conn as the underlying transport. // The config cannot be nil: users must set either ServerName or // InsecureSkipVerify in the config. -func Client(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { +func Client(conn net.Conn, config *Config) *Conn { c := &Conn{ - conn: conn, - config: fromConfig(config), - extraConfig: extraConfig, - isClient: true, + conn: conn, + config: fromConfig(config), + isClient: true, } c.handshakeFn = c.clientHandshake return c @@ -59,8 +57,7 @@ func Client(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { // A listener implements a network listener (net.Listener) for TLS connections. type listener struct { net.Listener - config *Config - extraConfig *ExtraConfig + config *Config } // Accept waits for and returns the next incoming TLS connection. @@ -70,18 +67,17 @@ func (l *listener) Accept() (net.Conn, error) { if err != nil { return nil, err } - return Server(c, l.config, l.extraConfig), nil + return Server(c, l.config), nil } // NewListener creates a Listener which accepts connections from an inner // Listener and wraps each connection with Server. // The configuration config must be non-nil and must include // at least one certificate or else set GetCertificate. -func NewListener(inner net.Listener, config *Config, extraConfig *ExtraConfig) net.Listener { +func NewListener(inner net.Listener, config *Config) net.Listener { l := new(listener) l.Listener = inner l.config = config - l.extraConfig = extraConfig return l } @@ -89,7 +85,7 @@ func NewListener(inner net.Listener, config *Config, extraConfig *ExtraConfig) n // given network address using net.Listen. // The configuration config must be non-nil and must include // at least one certificate or else set GetCertificate. -func Listen(network, laddr string, config *Config, extraConfig *ExtraConfig) (net.Listener, error) { +func Listen(network, laddr string, config *Config) (net.Listener, error) { if config == nil || len(config.Certificates) == 0 && config.GetCertificate == nil && config.GetConfigForClient == nil { return nil, errors.New("tls: neither Certificates, GetCertificate, nor GetConfigForClient set in Config") @@ -98,7 +94,7 @@ func Listen(network, laddr string, config *Config, extraConfig *ExtraConfig) (ne if err != nil { return nil, err } - return NewListener(l, config, extraConfig), nil + return NewListener(l, config), nil } type timeoutError struct{} @@ -117,11 +113,11 @@ func (timeoutError) Temporary() bool { return true } // // DialWithDialer uses context.Background internally; to specify the context, // use Dialer.DialContext with NetDialer set to the desired dialer. -func DialWithDialer(dialer *net.Dialer, network, addr string, config *Config, extraConfig *ExtraConfig) (*Conn, error) { - return dial(context.Background(), dialer, network, addr, config, extraConfig) +func DialWithDialer(dialer *net.Dialer, network, addr string, config *Config) (*Conn, error) { + return dial(context.Background(), dialer, network, addr, config) } -func dial(ctx context.Context, netDialer *net.Dialer, network, addr string, config *Config, extraConfig *ExtraConfig) (*Conn, error) { +func dial(ctx context.Context, netDialer *net.Dialer, network, addr string, config *Config) (*Conn, error) { if netDialer.Timeout != 0 { var cancel context.CancelFunc ctx, cancel = context.WithTimeout(ctx, netDialer.Timeout) @@ -157,7 +153,7 @@ func dial(ctx context.Context, netDialer *net.Dialer, network, addr string, conf config = c } - conn := Client(rawConn, config, extraConfig) + conn := Client(rawConn, config) if err := conn.HandshakeContext(ctx); err != nil { rawConn.Close() return nil, err @@ -171,8 +167,8 @@ func dial(ctx context.Context, netDialer *net.Dialer, network, addr string, conf // Dial interprets a nil configuration as equivalent to // the zero configuration; see the documentation of Config // for the defaults. -func Dial(network, addr string, config *Config, extraConfig *ExtraConfig) (*Conn, error) { - return DialWithDialer(new(net.Dialer), network, addr, config, extraConfig) +func Dial(network, addr string, config *Config) (*Conn, error) { + return DialWithDialer(new(net.Dialer), network, addr, config) } // Dialer dials TLS connections given a configuration and a Dialer for the @@ -188,8 +184,6 @@ type Dialer struct { // configuration; see the documentation of Config for the // defaults. Config *Config - - ExtraConfig *ExtraConfig } // Dial connects to the given network address and initiates a TLS @@ -220,7 +214,7 @@ func (d *Dialer) netDialer() *net.Dialer { // // The returned Conn, if any, will always be of type *Conn. func (d *Dialer) DialContext(ctx context.Context, network, addr string) (net.Conn, error) { - c, err := dial(ctx, d.netDialer(), network, addr, d.Config, d.ExtraConfig) + c, err := dial(ctx, d.netDialer(), network, addr, d.Config) if err != nil { // Don't return c (a typed nil) in an interface. return nil, err diff --git a/vendor/github.com/quic-go/qtls-go1-20/unsafe.go b/vendor/github.com/quic-go/qtls-go1-20/unsafe.go index 55fa01b3d6..67a75677c1 100644 --- a/vendor/github.com/quic-go/qtls-go1-20/unsafe.go +++ b/vendor/github.com/quic-go/qtls-go1-20/unsafe.go @@ -94,3 +94,8 @@ func compareStruct(a, b reflect.Type) bool { } return true } + +// InitSessionTicketKeys triggers the initialization of session ticket keys. +func InitSessionTicketKeys(conf *Config) { + fromConfig(conf).ticketKeys(nil) +} diff --git a/vendor/github.com/quic-go/quic-go/.golangci.yml b/vendor/github.com/quic-go/quic-go/.golangci.yml index 2589c05389..1315759bc1 100644 --- a/vendor/github.com/quic-go/quic-go/.golangci.yml +++ b/vendor/github.com/quic-go/quic-go/.golangci.yml @@ -1,14 +1,17 @@ run: skip-files: - - internal/qtls/structs_equal_test.go - + - internal/handshake/cipher_suite.go linters-settings: depguard: type: blacklist packages: - github.com/marten-seemann/qtls + - github.com/quic-go/qtls-go1-19 + - github.com/quic-go/qtls-go1-20 packages-with-error-message: - github.com/marten-seemann/qtls: "importing qtls only allowed in internal/qtls" + - github.com/quic-go/qtls-go1-19: "importing qtls only allowed in internal/qtls" + - github.com/quic-go/qtls-go1-20: "importing qtls only allowed in internal/qtls" misspell: ignore-words: - ect @@ -17,7 +20,6 @@ linters: disable-all: true enable: - asciicheck - - deadcode - depguard - exhaustive - exportloopref @@ -30,11 +32,9 @@ linters: - prealloc - staticcheck - stylecheck - - structcheck - unconvert - unparam - unused - - varcheck - vet issues: diff --git a/vendor/github.com/quic-go/quic-go/README.md b/vendor/github.com/quic-go/quic-go/README.md index b41a2de4cc..a793f98476 100644 --- a/vendor/github.com/quic-go/quic-go/README.md +++ b/vendor/github.com/quic-go/quic-go/README.md @@ -4,29 +4,183 @@ [![PkgGoDev](https://pkg.go.dev/badge/github.com/quic-go/quic-go)](https://pkg.go.dev/github.com/quic-go/quic-go) [![Code Coverage](https://img.shields.io/codecov/c/github/quic-go/quic-go/master.svg?style=flat-square)](https://codecov.io/gh/quic-go/quic-go/) +[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/quic-go.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:quic-go) -quic-go is an implementation of the QUIC protocol ([RFC 9000](https://datatracker.ietf.org/doc/html/rfc9000), [RFC 9001](https://datatracker.ietf.org/doc/html/rfc9001), [RFC 9002](https://datatracker.ietf.org/doc/html/rfc9002)) in Go, including the Unreliable Datagram Extension ([RFC 9221](https://datatracker.ietf.org/doc/html/rfc9221)) and Datagram Packetization Layer Path MTU - Discovery (DPLPMTUD, [RFC 8899](https://datatracker.ietf.org/doc/html/rfc8899)). It has support for HTTP/3 ([RFC 9114](https://datatracker.ietf.org/doc/html/rfc9114)), including QPACK ([RFC 9204](https://datatracker.ietf.org/doc/html/rfc9204)). +quic-go is an implementation of the QUIC protocol ([RFC 9000](https://datatracker.ietf.org/doc/html/rfc9000), [RFC 9001](https://datatracker.ietf.org/doc/html/rfc9001), [RFC 9002](https://datatracker.ietf.org/doc/html/rfc9002)) in Go. It has support for HTTP/3 ([RFC 9114](https://datatracker.ietf.org/doc/html/rfc9114)), including QPACK ([RFC 9204](https://datatracker.ietf.org/doc/html/rfc9204)). -In addition to the RFCs listed above, it currently implements the [IETF QUIC draft-29](https://tools.ietf.org/html/draft-ietf-quic-transport-29). Support for draft-29 will eventually be dropped, as it is phased out of the ecosystem. +In addition to these base RFCs, it also implements the following RFCs: +* Unreliable Datagram Extension ([RFC 9221](https://datatracker.ietf.org/doc/html/rfc9221)) +* Datagram Packetization Layer Path MTU Discovery (DPLPMTUD, [RFC 8899](https://datatracker.ietf.org/doc/html/rfc8899)) +* QUIC Version 2 ([RFC 9369](https://datatracker.ietf.org/doc/html/rfc9369)) -## Guides +## Using QUIC -*We currently support Go 1.18.x and Go 1.19.x.* +### Running a Server -Running tests: +The central entry point is the `quic.Transport`. A transport manages QUIC connections running on a single UDP socket. Since QUIC uses Connection IDs, it can demultiplex a listener (accepting incoming connections) and an arbitrary number of outgoing QUIC connections on the same UDP socket. - go test ./... +```go +udpConn, err := net.ListenUDP("udp4", &net.UDPAddr{Port: 1234}) +// ... error handling +tr := quic.Transport{ + Conn: udpConn, +} +ln, err := tr.Listen(tlsConf, quicConf) +// ... error handling +go func() { + for { + conn, err := ln.Accept() + // ... error handling + // handle the connection, usually in a new Go routine + } +}() +``` + +The listener `ln` can now be used to accept incoming QUIC connections by (repeatedly) calling the `Accept` method (see below for more information on the `quic.Connection`). + +As a shortcut, `quic.Listen` and `quic.ListenAddr` can be used without explicitly initializing a `quic.Transport`: + +``` +ln, err := quic.Listen(udpConn, tlsConf, quicConf) +``` + +When using the shortcut, it's not possible to reuse the same UDP socket for outgoing connections. + +### Running a Client + +As mentioned above, multiple outgoing connections can share a single UDP socket, since QUIC uses Connection IDs to demultiplex connections. + +```go +ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) // 3s handshake timeout +defer cancel() +conn, err := tr.Dial(ctx, , , ) +// ... error handling +``` + +As a shortcut, `quic.Dial` and `quic.DialAddr` can be used without explictly initializing a `quic.Transport`: + +```go +ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) // 3s handshake timeout +defer cancel() +conn, err := quic.Dial(ctx, conn, , , ) +``` + +Just as we saw before when used a similar shortcut to run a server, it's also not possible to reuse the same UDP socket for other outgoing connections, or to listen for incoming connections. + +### Using a QUIC Connection + +#### Accepting Streams + +QUIC is a stream-multiplexed transport. A `quic.Connection` fundamentally differs from the `net.Conn` and the `net.PacketConn` interface defined in the standard library. Data is sent and received on (unidirectional and bidirectional) streams (and, if supported, in [datagrams](#quic-datagrams)), not on the connection itself. The stream state machine is described in detail in [Section 3 of RFC 9000](https://datatracker.ietf.org/doc/html/rfc9000#section-3). + +Note: A unidirectional stream is a stream that the initiator can only write to (`quic.SendStream`), and the receiver can only read from (`quic.ReceiveStream`). A bidirectional stream (`quic.Stream`) allows reading from and writing to for both sides. + +On the receiver side, streams are accepted using the `AcceptStream` (for bidirectional) and `AcceptUniStream` functions. For most user cases, it makes sense to call these functions in a loop: + +```go +for { + str, err := conn.AcceptStream(context.Background()) // for bidirectional streams + // ... error handling + // handle the stream, usually in a new Go routine +} +``` + +These functions return an error when the underlying QUIC connection is closed. + +#### Opening Streams + +There are two slightly different ways to open streams, one synchronous and one (potentially) asynchronous. This API is necessary since the receiver grants us a certain number of streams that we're allowed to open. It may grant us additional streams later on (typically when existing streams are closed), but it means that at the time we want to open a new stream, we might not be able to do so. + +Using the synchronous method `OpenStreamSync` for bidirectional streams, and `OpenUniStreamSync` for unidirectional streams, an application can block until the peer allows opening additional streams. In case that we're allowed to open a new stream, these methods return right away: + +```go +ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) +defer cancel() +str, err := conn.OpenStreamSync(ctx) // wait up to 5s to open a new bidirectional stream +``` + +The asynchronous version never blocks. If it's currently not possible to open a new stream, it returns a `net.Error` timeout error: + +```go +str, err := conn.OpenStream() +if nerr, ok := err.(net.Error); ok && nerr.Timeout() { + // It's currently not possible to open another stream, + // but it might be possible later, once the peer allowed us to do so. +} +``` + +These functions return an error when the underlying QUIC connection is closed. + +#### Using Streams + +Using QUIC streams is pretty straightforward. The `quic.ReceiveStream` implements the `io.Reader` interface, and the `quic.SendStream` implements the `io.Writer` interface. A bidirectional stream (`quic.Stream`) implements both these interfaces. Conceptually, a bidirectional stream can be thought of as the composition of two unidirectional streams in opposite directions. + +Calling `Close` on a `quic.SendStream` or a `quic.Stream` closes the send side of the stream. On the receiver side, this will be surfaced as an `io.EOF` returned from the `io.Reader` once all data has been consumed. Note that for bidirectional streams, `Close` _only_ closes the send side of the stream. It is still possible to read from the stream until the peer closes or resets the stream. + +In case the application wishes to abort sending on a `quic.SendStream` or a `quic.Stream` , it can reset the send side by calling `CancelWrite` with an application-defined error code (an unsigned 62-bit number). On the receiver side, this surfaced as a `quic.StreamError` containing that error code on the `io.Reader`. Note that for bidirectional streams, `CancelWrite` _only_ resets the send side of the stream. It is still possible to read from the stream until the peer closes or resets the stream. + +Conversely, in case the application wishes to abort receiving from a `quic.ReceiveStream` or a `quic.Stream`, it can ask the sender to abort data transmission by calling `CancelRead` with an application-defined error code (an unsigned 62-bit number). On the receiver side, this surfaced as a `quic.StreamError` containing that error code on the `io.Writer`. Note that for bidirectional streams, `CancelWrite` _only_ resets the receive side of the stream. It is still possible to write to the stream. + +A bidirectional stream is only closed once both the read and the write side of the stream have been either closed and reset. Only then the peer is granted a new stream according to the maximum number of concurrent streams configured via `quic.Config.MaxIncomingStreams`. + +### Configuring QUIC + +The `quic.Config` struct passed to both the listen and dial calls (see above) contains a wide range of configuration options for QUIC connections, incl. the ability to fine-tune flow control limits, the number of streams that the peer is allowed to open concurrently, keep-alives, idle timeouts, and many more. Please refer to the documentation for the `quic.Config` for details. + +The `quic.Transport` contains a few configuration options that don't apply to any single QUIC connection, but to all connections handled by that transport. It is highly recommend to set the `StatelessResetToken`, which allows endpoints to quickly recover from crashes / reboots of our node (see [Section 10.3 of RFC 9000](https://datatracker.ietf.org/doc/html/rfc9000#section-10.3)). + +### Closing a Connection + +#### When the remote Peer closes the Connection + +In case the peer closes the QUIC connection, all calls to open streams, accept streams, as well as all methods on streams immediately return an error. Additionally, it is set as cancellation cause of the connection context. Users can use errors assertions to find out what exactly went wrong: + +* `quic.VersionNegotiationError`: Happens during the handshake, if there is no overlap between our and the remote's supported QUIC versions. +* `quic.HandshakeTimeoutError`: Happens if the QUIC handshake doesn't complete within the time specified in `quic.Config.HandshakeTimeout`. +* `quic.IdleTimeoutError`: Happens after completion of the handshake if the connection is idle for longer than the minimum of both peers idle timeouts (as configured by `quic.Config.IdleTimeout`). The connection is considered idle when no stream data (and datagrams, if applicable) are exchanged for that period. The QUIC connection can be instructed to regularly send a packet to prevent a connection from going idle by setting `quic.Config.KeepAlive`. However, this is no guarantee that the peer doesn't suddenly go away (e.g. by abruptly shutting down the node or by crashing), or by a NAT binding expiring, in which case this error might still occur. +* `quic.StatelessResetError`: Happens when the remote peer lost the state required to decrypt the packet. This requires the `quic.Transport.StatelessResetToken` to be configured by the peer. +* `quic.TransportError`: Happens if when the QUIC protocol is violated. Unless the error code is `APPLICATION_ERROR`, this will not happen unless one of the QUIC stacks involved is misbehaving. Please open an issue if you encounter this error. +* `quic.ApplicationError`: Happens when the remote decides to close the connection, see below. + +#### Initiated by the Application + +A `quic.Connection` can be closed using `CloseWithError`: + +```go +conn.CloseWithError(0x42, "error 0x42 occurred") +``` -### QUIC without HTTP/3 +Applications can transmit both an error code (an unsigned 62-bit number) as well as a UTF-8 encoded human-readable reason. The error code allows the receiver to learn why the connection was closed, and the reason can be useful for debugging purposes. -Take a look at [this echo example](example/echo/echo.go). +On the receiver side, this is surfaced as a `quic.ApplicationError`. -## Usage +### QUIC Datagrams + +Unreliable datagrams are a QUIC extension ([RFC 9221](https://datatracker.ietf.org/doc/html/rfc9221)) that is negotiated during the handshake. Support can be enabled by setting the `quic.Config.EnableDatagram` flag. Note that this doesn't guarantee that the peer also supports datagrams. Whether or not the feature negotiation succeeded can be learned from the `quic.ConnectionState.SupportsDatagrams` obtained from `quic.Connection.ConnectionState()`. + +QUIC DATAGRAMs are a new QUIC frame type sent in QUIC 1-RTT packets (i.e. after completion of the handshake). Therefore, they're end-to-end encrypted and congestion-controlled. However, if a DATAGRAM frame is deemed lost by QUIC's loss detection mechanism, they are not automatically retransmitted. + +Datagrams are sent using the `SendMessage` method on the `quic.Connection`: + +```go +conn.SendMessage([]byte("foobar")) +``` + +And received using `ReceiveMessage`: + +```go +msg, err := conn.ReceiveMessage() +``` + +Note that this code path is currently not optimized. It works for datagrams that are sent occasionally, but it doesn't achieve the same throughput as writing data on a stream. Please get in touch on issue #3766 if your use case relies on high datagram throughput, or if you'd like to help fix this issue. There are also some restrictions regarding the maximum message size (see #3599). + + + +## Using HTTP/3 ### As a server -See the [example server](example/main.go). Starting a QUIC server is very similar to the standard lib http in go: +See the [example server](example/main.go). Starting a QUIC server is very similar to the standard library http package in Go: ```go http.Handle("/", http.FileServer(http.Dir(wwwDir))) @@ -45,18 +199,30 @@ http.Client{ ## Projects using quic-go -| Project | Description | Stars | -|-----------------------------------------------------------|---------------------------------------------------------------------------------------------------------|-------| -| [AdGuardHome](https://github.com/AdguardTeam/AdGuardHome) | Free and open source, powerful network-wide ads & trackers blocking DNS server. | ![GitHub Repo stars](https://img.shields.io/github/stars/AdguardTeam/AdGuardHome?style=flat-square) | -| [algernon](https://github.com/xyproto/algernon) | Small self-contained pure-Go web server with Lua, Markdown, HTTP/2, QUIC, Redis and PostgreSQL support | ![GitHub Repo stars](https://img.shields.io/github/stars/xyproto/algernon?style=flat-square) | -| [caddy](https://github.com/caddyserver/caddy/) | Fast, multi-platform web server with automatic HTTPS | ![GitHub Repo stars](https://img.shields.io/github/stars/caddyserver/caddy?style=flat-square) | -| [cloudflared](https://github.com/cloudflare/cloudflared) | A tunneling daemon that proxies traffic from the Cloudflare network to your origins | ![GitHub Repo stars](https://img.shields.io/github/stars/cloudflare/cloudflared?style=flat-square) | -| [go-libp2p](https://github.com/libp2p/go-libp2p) | libp2p implementation in Go, powering [Kubo](https://github.com/ipfs/kubo) (IPFS) and [Lotus](https://github.com/filecoin-project/lotus) (Filecoin), among others | ![GitHub Repo stars](https://img.shields.io/github/stars/libp2p/go-libp2p?style=flat-square) | -| [OONI Probe](https://github.com/ooni/probe-cli) | Next generation OONI Probe. Library and CLI tool. | ![GitHub Repo stars](https://img.shields.io/github/stars/ooni/probe-cli?style=flat-square) | -| [syncthing](https://github.com/syncthing/syncthing/) | Open Source Continuous File Synchronization | ![GitHub Repo stars](https://img.shields.io/github/stars/syncthing/syncthing?style=flat-square) | -| [traefik](https://github.com/traefik/traefik) | The Cloud Native Application Proxy | ![GitHub Repo stars](https://img.shields.io/github/stars/traefik/traefik?style=flat-square) | -| [v2ray-core](https://github.com/v2fly/v2ray-core) | A platform for building proxies to bypass network restrictions | ![GitHub Repo stars](https://img.shields.io/github/stars/v2fly/v2ray-core?style=flat-square) | -| [YoMo](https://github.com/yomorun/yomo) | Streaming Serverless Framework for Geo-distributed System | ![GitHub Repo stars](https://img.shields.io/github/stars/yomorun/yomo?style=flat-square) | +| Project | Description | Stars | +|-----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------| +| [AdGuardHome](https://github.com/AdguardTeam/AdGuardHome) | Free and open source, powerful network-wide ads & trackers blocking DNS server. | ![GitHub Repo stars](https://img.shields.io/github/stars/AdguardTeam/AdGuardHome?style=flat-square) | +| [algernon](https://github.com/xyproto/algernon) | Small self-contained pure-Go web server with Lua, Markdown, HTTP/2, QUIC, Redis and PostgreSQL support | ![GitHub Repo stars](https://img.shields.io/github/stars/xyproto/algernon?style=flat-square) | +| [caddy](https://github.com/caddyserver/caddy/) | Fast, multi-platform web server with automatic HTTPS | ![GitHub Repo stars](https://img.shields.io/github/stars/caddyserver/caddy?style=flat-square) | +| [cloudflared](https://github.com/cloudflare/cloudflared) | A tunneling daemon that proxies traffic from the Cloudflare network to your origins | ![GitHub Repo stars](https://img.shields.io/github/stars/cloudflare/cloudflared?style=flat-square) | +| [go-libp2p](https://github.com/libp2p/go-libp2p) | libp2p implementation in Go, powering [Kubo](https://github.com/ipfs/kubo) (IPFS) and [Lotus](https://github.com/filecoin-project/lotus) (Filecoin), among others | ![GitHub Repo stars](https://img.shields.io/github/stars/libp2p/go-libp2p?style=flat-square) | +| [Mercure](https://github.com/dunglas/mercure) | An open, easy, fast, reliable and battery-efficient solution for real-time communications | ![GitHub Repo stars](https://img.shields.io/github/stars/dunglas/mercure?style=flat-square) | +| [OONI Probe](https://github.com/ooni/probe-cli) | Next generation OONI Probe. Library and CLI tool. | ![GitHub Repo stars](https://img.shields.io/github/stars/ooni/probe-cli?style=flat-square) | +| [syncthing](https://github.com/syncthing/syncthing/) | Open Source Continuous File Synchronization | ![GitHub Repo stars](https://img.shields.io/github/stars/syncthing/syncthing?style=flat-square) | +| [traefik](https://github.com/traefik/traefik) | The Cloud Native Application Proxy | ![GitHub Repo stars](https://img.shields.io/github/stars/traefik/traefik?style=flat-square) | +| [v2ray-core](https://github.com/v2fly/v2ray-core) | A platform for building proxies to bypass network restrictions | ![GitHub Repo stars](https://img.shields.io/github/stars/v2fly/v2ray-core?style=flat-square) | +| [YoMo](https://github.com/yomorun/yomo) | Streaming Serverless Framework for Geo-distributed System | ![GitHub Repo stars](https://img.shields.io/github/stars/yomorun/yomo?style=flat-square) | + +If you'd like to see your project added to this list, please send us a PR. + +## Release Policy + +quic-go always aims to support the latest two Go releases. + +### Dependency on forked crypto/tls + +Since the standard library didn't provide any QUIC APIs before the Go 1.21 release, we had to fork crypto/tls to add the required APIs ourselves: [qtls for Go 1.20](https://github.com/quic-go/qtls-go1-20). +This had led to a lot of pain in the Go ecosystem, and we're happy that we can rely on Go 1.21 going forward. ## Contributing diff --git a/vendor/github.com/quic-go/quic-go/SECURITY.md b/vendor/github.com/quic-go/quic-go/SECURITY.md new file mode 100644 index 0000000000..c24c08f863 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/SECURITY.md @@ -0,0 +1,19 @@ +# Security Policy + +quic-go still in development. This means that there may be problems in our protocols, +or there may be mistakes in our implementations. +We take security vulnerabilities very seriously. If you discover a security issue, +please bring it to our attention right away! + +## Reporting a Vulnerability + +If you find a vulnerability that may affect live deployments -- for example, by exposing +a remote execution exploit -- please [**report privately**](https://github.com/quic-go/quic-go/security/advisories/new). +Please **DO NOT file a public issue**. + +If the issue is an implementation weakness that cannot be immediately exploited or +something not yet deployed, just discuss it openly. + +## Reporting a non security bug + +For non-security bugs, please simply file a GitHub [issue](https://github.com/quic-go/quic-go/issues/new). diff --git a/vendor/github.com/quic-go/quic-go/buffer_pool.go b/vendor/github.com/quic-go/quic-go/buffer_pool.go index f6745b0803..48589e1236 100644 --- a/vendor/github.com/quic-go/quic-go/buffer_pool.go +++ b/vendor/github.com/quic-go/quic-go/buffer_pool.go @@ -51,18 +51,22 @@ func (b *packetBuffer) Release() { } // Len returns the length of Data -func (b *packetBuffer) Len() protocol.ByteCount { - return protocol.ByteCount(len(b.Data)) -} +func (b *packetBuffer) Len() protocol.ByteCount { return protocol.ByteCount(len(b.Data)) } +func (b *packetBuffer) Cap() protocol.ByteCount { return protocol.ByteCount(cap(b.Data)) } func (b *packetBuffer) putBack() { - if cap(b.Data) != int(protocol.MaxPacketBufferSize) { - panic("putPacketBuffer called with packet of wrong size!") + if cap(b.Data) == protocol.MaxPacketBufferSize { + bufferPool.Put(b) + return + } + if cap(b.Data) == protocol.MaxLargePacketBufferSize { + largeBufferPool.Put(b) + return } - bufferPool.Put(b) + panic("putPacketBuffer called with packet of wrong size!") } -var bufferPool sync.Pool +var bufferPool, largeBufferPool sync.Pool func getPacketBuffer() *packetBuffer { buf := bufferPool.Get().(*packetBuffer) @@ -71,10 +75,18 @@ func getPacketBuffer() *packetBuffer { return buf } +func getLargePacketBuffer() *packetBuffer { + buf := largeBufferPool.Get().(*packetBuffer) + buf.refCount = 1 + buf.Data = buf.Data[:0] + return buf +} + func init() { - bufferPool.New = func() interface{} { - return &packetBuffer{ - Data: make([]byte, 0, protocol.MaxPacketBufferSize), - } + bufferPool.New = func() any { + return &packetBuffer{Data: make([]byte, 0, protocol.MaxPacketBufferSize)} + } + largeBufferPool.New = func() any { + return &packetBuffer{Data: make([]byte, 0, protocol.MaxLargePacketBufferSize)} } } diff --git a/vendor/github.com/quic-go/quic-go/client.go b/vendor/github.com/quic-go/quic-go/client.go index b05f0ab2e1..61cd752652 100644 --- a/vendor/github.com/quic-go/quic-go/client.go +++ b/vendor/github.com/quic-go/quic-go/client.go @@ -4,7 +4,6 @@ import ( "context" "crypto/tls" "errors" - "fmt" "net" "github.com/quic-go/quic-go/internal/protocol" @@ -13,20 +12,19 @@ import ( ) type client struct { - sconn sendConn - // If the client is created with DialAddr, we create a packet conn. - // If it is started with Dial, we take a packet conn as a parameter. - createdPacketConn bool + sendConn sendConn use0RTT bool packetHandlers packetHandlerManager + onClose func() tlsConf *tls.Config config *Config - srcConnID protocol.ConnectionID - destConnID protocol.ConnectionID + connIDGenerator ConnectionIDGenerator + srcConnID protocol.ConnectionID + destConnID protocol.ConnectionID initialPacketNumber protocol.PacketNumber hasNegotiatedVersion bool @@ -45,155 +43,107 @@ type client struct { var generateConnectionIDForInitial = protocol.GenerateConnectionIDForInitial // DialAddr establishes a new QUIC connection to a server. -// It uses a new UDP connection and closes this connection when the QUIC connection is closed. -// The hostname for SNI is taken from the given address. -// The tls.Config.CipherSuites allows setting of TLS 1.3 cipher suites. -func DialAddr( - addr string, - tlsConf *tls.Config, - config *Config, -) (Connection, error) { - return DialAddrContext(context.Background(), addr, tlsConf, config) +// It resolves the address, and then creates a new UDP connection to dial the QUIC server. +// When the QUIC connection is closed, this UDP connection is closed. +// See Dial for more details. +func DialAddr(ctx context.Context, addr string, tlsConf *tls.Config, conf *Config) (Connection, error) { + udpConn, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: 0}) + if err != nil { + return nil, err + } + udpAddr, err := net.ResolveUDPAddr("udp", addr) + if err != nil { + return nil, err + } + tr, err := setupTransport(udpConn, tlsConf, true) + if err != nil { + return nil, err + } + return tr.dial(ctx, udpAddr, addr, tlsConf, conf, false) } // DialAddrEarly establishes a new 0-RTT QUIC connection to a server. -// It uses a new UDP connection and closes this connection when the QUIC connection is closed. -// The hostname for SNI is taken from the given address. -// The tls.Config.CipherSuites allows setting of TLS 1.3 cipher suites. -func DialAddrEarly( - addr string, - tlsConf *tls.Config, - config *Config, -) (EarlyConnection, error) { - return DialAddrEarlyContext(context.Background(), addr, tlsConf, config) -} - -// DialAddrEarlyContext establishes a new 0-RTT QUIC connection to a server using provided context. -// See DialAddrEarly for details -func DialAddrEarlyContext( - ctx context.Context, - addr string, - tlsConf *tls.Config, - config *Config, -) (EarlyConnection, error) { - conn, err := dialAddrContext(ctx, addr, tlsConf, config, true) +// See DialAddr for more details. +func DialAddrEarly(ctx context.Context, addr string, tlsConf *tls.Config, conf *Config) (EarlyConnection, error) { + udpConn, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: 0}) if err != nil { return nil, err } - utils.Logger.WithPrefix(utils.DefaultLogger, "client").Debugf("Returning early connection") - return conn, nil -} - -// DialAddrContext establishes a new QUIC connection to a server using the provided context. -// See DialAddr for details. -func DialAddrContext( - ctx context.Context, - addr string, - tlsConf *tls.Config, - config *Config, -) (Connection, error) { - return dialAddrContext(ctx, addr, tlsConf, config, false) -} - -func dialAddrContext( - ctx context.Context, - addr string, - tlsConf *tls.Config, - config *Config, - use0RTT bool, -) (quicConn, error) { udpAddr, err := net.ResolveUDPAddr("udp", addr) if err != nil { return nil, err } - udpConn, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: 0}) + tr, err := setupTransport(udpConn, tlsConf, true) if err != nil { return nil, err } - return dialContext(ctx, udpConn, udpAddr, addr, tlsConf, config, use0RTT, true) -} - -// Dial establishes a new QUIC connection to a server using a net.PacketConn. If -// the PacketConn satisfies the OOBCapablePacketConn interface (as a net.UDPConn -// does), ECN and packet info support will be enabled. In this case, ReadMsgUDP -// and WriteMsgUDP will be used instead of ReadFrom and WriteTo to read/write -// packets. The same PacketConn can be used for multiple calls to Dial and -// Listen, QUIC connection IDs are used for demultiplexing the different -// connections. The host parameter is used for SNI. The tls.Config must define -// an application protocol (using NextProtos). -func Dial( - pconn net.PacketConn, - remoteAddr net.Addr, - host string, - tlsConf *tls.Config, - config *Config, -) (Connection, error) { - return dialContext(context.Background(), pconn, remoteAddr, host, tlsConf, config, false, false) + conn, err := tr.dial(ctx, udpAddr, addr, tlsConf, conf, true) + if err != nil { + tr.Close() + return nil, err + } + return conn, nil } // DialEarly establishes a new 0-RTT QUIC connection to a server using a net.PacketConn. -// The same PacketConn can be used for multiple calls to Dial and Listen, -// QUIC connection IDs are used for demultiplexing the different connections. -// The host parameter is used for SNI. -// The tls.Config must define an application protocol (using NextProtos). -func DialEarly( - pconn net.PacketConn, - remoteAddr net.Addr, - host string, - tlsConf *tls.Config, - config *Config, -) (EarlyConnection, error) { - return DialEarlyContext(context.Background(), pconn, remoteAddr, host, tlsConf, config) +// See Dial for more details. +func DialEarly(ctx context.Context, c net.PacketConn, addr net.Addr, tlsConf *tls.Config, conf *Config) (EarlyConnection, error) { + dl, err := setupTransport(c, tlsConf, false) + if err != nil { + return nil, err + } + conn, err := dl.DialEarly(ctx, addr, tlsConf, conf) + if err != nil { + dl.Close() + return nil, err + } + return conn, nil } -// DialEarlyContext establishes a new 0-RTT QUIC connection to a server using a net.PacketConn using the provided context. -// See DialEarly for details. -func DialEarlyContext( - ctx context.Context, - pconn net.PacketConn, - remoteAddr net.Addr, - host string, - tlsConf *tls.Config, - config *Config, -) (EarlyConnection, error) { - return dialContext(ctx, pconn, remoteAddr, host, tlsConf, config, true, false) +// Dial establishes a new QUIC connection to a server using a net.PacketConn. +// If the PacketConn satisfies the OOBCapablePacketConn interface (as a net.UDPConn does), +// ECN and packet info support will be enabled. In this case, ReadMsgUDP and WriteMsgUDP +// will be used instead of ReadFrom and WriteTo to read/write packets. +// The tls.Config must define an application protocol (using NextProtos). +// +// This is a convenience function. More advanced use cases should instantiate a Transport, +// which offers configuration options for a more fine-grained control of the connection establishment, +// including reusing the underlying UDP socket for multiple QUIC connections. +func Dial(ctx context.Context, c net.PacketConn, addr net.Addr, tlsConf *tls.Config, conf *Config) (Connection, error) { + dl, err := setupTransport(c, tlsConf, false) + if err != nil { + return nil, err + } + conn, err := dl.Dial(ctx, addr, tlsConf, conf) + if err != nil { + dl.Close() + return nil, err + } + return conn, nil } -// DialContext establishes a new QUIC connection to a server using a net.PacketConn using the provided context. -// See Dial for details. -func DialContext( - ctx context.Context, - pconn net.PacketConn, - remoteAddr net.Addr, - host string, - tlsConf *tls.Config, - config *Config, -) (Connection, error) { - return dialContext(ctx, pconn, remoteAddr, host, tlsConf, config, false, false) +func setupTransport(c net.PacketConn, tlsConf *tls.Config, createdPacketConn bool) (*Transport, error) { + if tlsConf == nil { + return nil, errors.New("quic: tls.Config not set") + } + return &Transport{ + Conn: c, + createdConn: createdPacketConn, + isSingleUse: true, + }, nil } -func dialContext( +func dial( ctx context.Context, - pconn net.PacketConn, - remoteAddr net.Addr, - host string, + conn sendConn, + connIDGenerator ConnectionIDGenerator, + packetHandlers packetHandlerManager, tlsConf *tls.Config, config *Config, + onClose func(), use0RTT bool, - createdPacketConn bool, ) (quicConn, error) { - if tlsConf == nil { - return nil, errors.New("quic: tls.Config not set") - } - if err := validateConfig(config); err != nil { - return nil, err - } - config = populateClientConfig(config, createdPacketConn) - packetHandlers, err := getMultiplexer().AddConn(pconn, config.ConnectionIDGenerator.ConnectionIDLen(), config.StatelessResetKey, config.Tracer) - if err != nil { - return nil, err - } - c, err := newClient(pconn, remoteAddr, config, tlsConf, host, use0RTT, createdPacketConn) + c, err := newClient(conn, connIDGenerator, config, tlsConf, onClose, use0RTT) if err != nil { return nil, err } @@ -201,14 +151,10 @@ func dialContext( c.tracingID = nextConnTracingID() if c.config.Tracer != nil { - c.tracer = c.config.Tracer.TracerForConnection( - context.WithValue(ctx, ConnectionTracingKey, c.tracingID), - protocol.PerspectiveClient, - c.destConnID, - ) + c.tracer = c.config.Tracer(context.WithValue(ctx, ConnectionTracingKey, c.tracingID), protocol.PerspectiveClient, c.destConnID) } if c.tracer != nil { - c.tracer.StartedConnection(c.sconn.LocalAddr(), c.sconn.RemoteAddr(), c.srcConnID, c.destConnID) + c.tracer.StartedConnection(c.sendConn.LocalAddr(), c.sendConn.RemoteAddr(), c.srcConnID, c.destConnID) } if err := c.dial(ctx); err != nil { return nil, err @@ -216,40 +162,8 @@ func dialContext( return c.conn, nil } -func newClient( - pconn net.PacketConn, - remoteAddr net.Addr, - config *Config, - tlsConf *tls.Config, - host string, - use0RTT bool, - createdPacketConn bool, -) (*client, error) { - if tlsConf == nil { - tlsConf = &tls.Config{} - } else { - tlsConf = tlsConf.Clone() - } - if tlsConf.ServerName == "" { - sni, _, err := net.SplitHostPort(host) - if err != nil { - // It's ok if net.SplitHostPort returns an error - it could be a hostname/IP address without a port. - sni = host - } - - tlsConf.ServerName = sni - } - - // check that all versions are actually supported - if config != nil { - for _, v := range config.Versions { - if !protocol.IsValidVersion(v) { - return nil, fmt.Errorf("%s is not a valid QUIC version", v) - } - } - } - - srcConnID, err := config.ConnectionIDGenerator.GenerateConnectionID() +func newClient(sendConn sendConn, connIDGenerator ConnectionIDGenerator, config *Config, tlsConf *tls.Config, onClose func(), use0RTT bool) (*client, error) { + srcConnID, err := connIDGenerator.GenerateConnectionID() if err != nil { return nil, err } @@ -258,28 +172,30 @@ func newClient( return nil, err } c := &client{ - srcConnID: srcConnID, - destConnID: destConnID, - sconn: newSendPconn(pconn, remoteAddr), - createdPacketConn: createdPacketConn, - use0RTT: use0RTT, - tlsConf: tlsConf, - config: config, - version: config.Versions[0], - handshakeChan: make(chan struct{}), - logger: utils.DefaultLogger.WithPrefix("client"), + connIDGenerator: connIDGenerator, + srcConnID: srcConnID, + destConnID: destConnID, + sendConn: sendConn, + use0RTT: use0RTT, + onClose: onClose, + tlsConf: tlsConf, + config: config, + version: config.Versions[0], + handshakeChan: make(chan struct{}), + logger: utils.DefaultLogger.WithPrefix("client"), } return c, nil } func (c *client) dial(ctx context.Context) error { - c.logger.Infof("Starting new connection to %s (%s -> %s), source connection ID %s, destination connection ID %s, version %s", c.tlsConf.ServerName, c.sconn.LocalAddr(), c.sconn.RemoteAddr(), c.srcConnID, c.destConnID, c.version) + c.logger.Infof("Starting new connection to %s (%s -> %s), source connection ID %s, destination connection ID %s, version %s", c.tlsConf.ServerName, c.sendConn.LocalAddr(), c.sendConn.RemoteAddr(), c.srcConnID, c.destConnID, c.version) c.conn = newClientConnection( - c.sconn, + c.sendConn, c.packetHandlers, c.destConnID, c.srcConnID, + c.connIDGenerator, c.config, c.tlsConf, c.initialPacketNumber, @@ -293,13 +209,18 @@ func (c *client) dial(ctx context.Context) error { c.packetHandlers.Add(c.srcConnID, c.conn) errorChan := make(chan error, 1) + recreateChan := make(chan errCloseForRecreating) go func() { - err := c.conn.run() // returns as soon as the connection is closed - - if e := (&errCloseForRecreating{}); !errors.As(err, &e) && c.createdPacketConn { - c.packetHandlers.Destroy() + err := c.conn.run() + var recreateErr *errCloseForRecreating + if errors.As(err, &recreateErr) { + recreateChan <- *recreateErr + return + } + if c.onClose != nil { + c.onClose() } - errorChan <- err + errorChan <- err // returns as soon as the connection is closed }() // only set when we're using 0-RTT @@ -314,18 +235,16 @@ func (c *client) dial(ctx context.Context) error { c.conn.shutdown() return ctx.Err() case err := <-errorChan: - var recreateErr *errCloseForRecreating - if errors.As(err, &recreateErr) { - c.initialPacketNumber = recreateErr.nextPacketNumber - c.version = recreateErr.nextVersion - c.hasNegotiatedVersion = true - return c.dial(ctx) - } return err + case recreateErr := <-recreateChan: + c.initialPacketNumber = recreateErr.nextPacketNumber + c.version = recreateErr.nextVersion + c.hasNegotiatedVersion = true + return c.dial(ctx) case <-earlyConnChan: // ready to send 0-RTT data return nil - case <-c.conn.HandshakeComplete().Done(): + case <-c.conn.HandshakeComplete(): // handshake successfully completed return nil } diff --git a/vendor/github.com/quic-go/quic-go/closed_conn.go b/vendor/github.com/quic-go/quic-go/closed_conn.go index 73904b8468..0c988b53e3 100644 --- a/vendor/github.com/quic-go/quic-go/closed_conn.go +++ b/vendor/github.com/quic-go/quic-go/closed_conn.go @@ -16,13 +16,13 @@ type closedLocalConn struct { perspective protocol.Perspective logger utils.Logger - sendPacket func(net.Addr, *packetInfo) + sendPacket func(net.Addr, packetInfo) } var _ packetHandler = &closedLocalConn{} // newClosedLocalConn creates a new closedLocalConn and runs it. -func newClosedLocalConn(sendPacket func(net.Addr, *packetInfo), pers protocol.Perspective, logger utils.Logger) packetHandler { +func newClosedLocalConn(sendPacket func(net.Addr, packetInfo), pers protocol.Perspective, logger utils.Logger) packetHandler { return &closedLocalConn{ sendPacket: sendPacket, perspective: pers, @@ -30,7 +30,7 @@ func newClosedLocalConn(sendPacket func(net.Addr, *packetInfo), pers protocol.Pe } } -func (c *closedLocalConn) handlePacket(p *receivedPacket) { +func (c *closedLocalConn) handlePacket(p receivedPacket) { c.counter++ // exponential backoff // only send a CONNECTION_CLOSE for the 1st, 2nd, 4th, 8th, 16th, ... packet arriving @@ -58,7 +58,7 @@ func newClosedRemoteConn(pers protocol.Perspective) packetHandler { return &closedRemoteConn{perspective: pers} } -func (s *closedRemoteConn) handlePacket(*receivedPacket) {} +func (s *closedRemoteConn) handlePacket(receivedPacket) {} func (s *closedRemoteConn) shutdown() {} func (s *closedRemoteConn) destroy(error) {} func (s *closedRemoteConn) getPerspective() protocol.Perspective { return s.perspective } diff --git a/vendor/github.com/quic-go/quic-go/codecov.yml b/vendor/github.com/quic-go/quic-go/codecov.yml index 074d983252..6943515097 100644 --- a/vendor/github.com/quic-go/quic-go/codecov.yml +++ b/vendor/github.com/quic-go/quic-go/codecov.yml @@ -8,6 +8,7 @@ coverage: - http3/gzip_reader.go - interop/ - internal/ackhandler/packet_linkedlist.go + - internal/handshake/cipher_suite.go - internal/utils/byteinterval_linkedlist.go - internal/utils/newconnectionid_linkedlist.go - internal/utils/packetinterval_linkedlist.go diff --git a/vendor/github.com/quic-go/quic-go/config.go b/vendor/github.com/quic-go/quic-go/config.go index 3ead9b7a1c..59df4cfd95 100644 --- a/vendor/github.com/quic-go/quic-go/config.go +++ b/vendor/github.com/quic-go/quic-go/config.go @@ -1,12 +1,13 @@ package quic import ( - "errors" + "fmt" "net" "time" "github.com/quic-go/quic-go/internal/protocol" "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/quicvarint" ) // Clone clones a Config @@ -23,11 +24,24 @@ func validateConfig(config *Config) error { if config == nil { return nil } - if config.MaxIncomingStreams > 1<<60 { - return errors.New("invalid value for Config.MaxIncomingStreams") + const maxStreams = 1 << 60 + if config.MaxIncomingStreams > maxStreams { + config.MaxIncomingStreams = maxStreams } - if config.MaxIncomingUniStreams > 1<<60 { - return errors.New("invalid value for Config.MaxIncomingUniStreams") + if config.MaxIncomingUniStreams > maxStreams { + config.MaxIncomingUniStreams = maxStreams + } + if config.MaxStreamReceiveWindow > quicvarint.Max { + config.MaxStreamReceiveWindow = quicvarint.Max + } + if config.MaxConnectionReceiveWindow > quicvarint.Max { + config.MaxConnectionReceiveWindow = quicvarint.Max + } + // check that all QUIC versions are actually supported + for _, v := range config.Versions { + if !protocol.IsValidVersion(v) { + return fmt.Errorf("invalid QUIC version: %s", v) + } } return nil } @@ -35,7 +49,7 @@ func validateConfig(config *Config) error { // populateServerConfig populates fields in the quic.Config with their default values, if none are set // it may be called with nil func populateServerConfig(config *Config) *Config { - config = populateConfig(config, protocol.DefaultConnectionIDLength) + config = populateConfig(config) if config.MaxTokenAge == 0 { config.MaxTokenAge = protocol.TokenValidity } @@ -48,19 +62,9 @@ func populateServerConfig(config *Config) *Config { return config } -// populateClientConfig populates fields in the quic.Config with their default values, if none are set +// populateConfig populates fields in the quic.Config with their default values, if none are set // it may be called with nil -func populateClientConfig(config *Config, createdPacketConn bool) *Config { - defaultConnIDLen := protocol.DefaultConnectionIDLength - if createdPacketConn { - defaultConnIDLen = 0 - } - - config = populateConfig(config, defaultConnIDLen) - return config -} - -func populateConfig(config *Config, defaultConnIDLen int) *Config { +func populateConfig(config *Config) *Config { if config == nil { config = &Config{} } @@ -68,10 +72,6 @@ func populateConfig(config *Config, defaultConnIDLen int) *Config { if len(versions) == 0 { versions = protocol.SupportedVersions } - conIDLen := config.ConnectionIDLength - if config.ConnectionIDLength == 0 { - conIDLen = defaultConnIDLen - } handshakeIdleTimeout := protocol.DefaultHandshakeIdleTimeout if config.HandshakeIdleTimeout != 0 { handshakeIdleTimeout = config.HandshakeIdleTimeout @@ -108,12 +108,9 @@ func populateConfig(config *Config, defaultConnIDLen int) *Config { } else if maxIncomingUniStreams < 0 { maxIncomingUniStreams = 0 } - connIDGenerator := config.ConnectionIDGenerator - if connIDGenerator == nil { - connIDGenerator = &protocol.DefaultConnectionIDGenerator{ConnLen: conIDLen} - } return &Config{ + GetConfigForClient: config.GetConfigForClient, Versions: versions, HandshakeIdleTimeout: handshakeIdleTimeout, MaxIdleTimeout: idleTimeout, @@ -128,9 +125,6 @@ func populateConfig(config *Config, defaultConnIDLen int) *Config { AllowConnectionWindowIncrease: config.AllowConnectionWindowIncrease, MaxIncomingStreams: maxIncomingStreams, MaxIncomingUniStreams: maxIncomingUniStreams, - ConnectionIDLength: conIDLen, - ConnectionIDGenerator: connIDGenerator, - StatelessResetKey: config.StatelessResetKey, TokenStore: config.TokenStore, EnableDatagrams: config.EnableDatagrams, DisablePathMTUDiscovery: config.DisablePathMTUDiscovery, diff --git a/vendor/github.com/quic-go/quic-go/connection.go b/vendor/github.com/quic-go/quic-go/connection.go index 18a02655dc..877f2d0331 100644 --- a/vendor/github.com/quic-go/quic-go/connection.go +++ b/vendor/github.com/quic-go/quic-go/connection.go @@ -52,20 +52,17 @@ type streamManager interface { } type cryptoStreamHandler interface { - RunHandshake() + StartHandshake() error ChangeConnectionID(protocol.ConnectionID) SetLargest1RTTAcked(protocol.PacketNumber) error SetHandshakeConfirmed() GetSessionTicket() ([]byte, error) + NextEvent() handshake.Event + DiscardInitialKeys() io.Closer ConnectionState() handshake.ConnectionState } -type packetInfo struct { - addr net.IP - ifIndex uint32 -} - type receivedPacket struct { buffer *packetBuffer @@ -75,7 +72,7 @@ type receivedPacket struct { ecn protocol.ECN - info *packetInfo + info packetInfo // only valid if the contained IP address is valid } func (p *receivedPacket) Size() protocol.ByteCount { return protocol.ByteCount(len(p.data)) } @@ -101,18 +98,6 @@ type connRunner interface { RemoveResetToken(protocol.StatelessResetToken) } -type handshakeRunner struct { - onReceivedParams func(*wire.TransportParameters) - onError func(error) - dropKeys func(protocol.EncryptionLevel) - onHandshakeComplete func() -} - -func (r *handshakeRunner) OnReceivedParams(tp *wire.TransportParameters) { r.onReceivedParams(tp) } -func (r *handshakeRunner) OnError(e error) { r.onError(e) } -func (r *handshakeRunner) DropKeys(el protocol.EncryptionLevel) { r.dropKeys(el) } -func (r *handshakeRunner) OnHandshakeComplete() { r.onHandshakeComplete() } - type closeError struct { err error remote bool @@ -170,10 +155,12 @@ type connection struct { packer packer mtuDiscoverer mtuDiscoverer // initialized when the handshake completes + initialStream cryptoStream + handshakeStream cryptoStream oneRTTStream cryptoStream // only set for the server cryptoStreamHandler cryptoStreamHandler - receivedPackets chan *receivedPacket + receivedPackets chan receivedPacket sendingScheduled chan struct{} closeOnce sync.Once @@ -181,24 +168,23 @@ type connection struct { closeChan chan closeError ctx context.Context - ctxCancel context.CancelFunc + ctxCancel context.CancelCauseFunc handshakeCtx context.Context handshakeCtxCancel context.CancelFunc - undecryptablePackets []*receivedPacket // undecryptable packets, waiting for a change in encryption level - undecryptablePacketsToProcess []*receivedPacket + undecryptablePackets []receivedPacket // undecryptable packets, waiting for a change in encryption level + undecryptablePacketsToProcess []receivedPacket - clientHelloWritten <-chan *wire.TransportParameters - earlyConnReadyChan chan struct{} - handshakeCompleteChan chan struct{} // is closed when the handshake completes - sentFirstPacket bool - handshakeComplete bool - handshakeConfirmed bool + earlyConnReadyChan chan struct{} + sentFirstPacket bool + handshakeComplete bool + handshakeConfirmed bool receivedRetry bool versionNegotiated bool receivedFirstPacket bool + // the minimum of the max_idle_timeout values advertised by both endpoints idleTimeout time.Duration creationTime time.Time // The idle timeout is set based on the max of the time we received the last packet... @@ -240,6 +226,7 @@ var newConnection = func( clientDestConnID protocol.ConnectionID, destConnID protocol.ConnectionID, srcConnID protocol.ConnectionID, + connIDGenerator ConnectionIDGenerator, statelessResetToken protocol.StatelessResetToken, conf *Config, tlsConf *tls.Config, @@ -251,17 +238,16 @@ var newConnection = func( v protocol.VersionNumber, ) quicConn { s := &connection{ - conn: conn, - config: conf, - handshakeDestConnID: destConnID, - srcConnIDLen: srcConnID.Len(), - tokenGenerator: tokenGenerator, - oneRTTStream: newCryptoStream(), - perspective: protocol.PerspectiveServer, - handshakeCompleteChan: make(chan struct{}), - tracer: tracer, - logger: logger, - version: v, + conn: conn, + config: conf, + handshakeDestConnID: destConnID, + srcConnIDLen: srcConnID.Len(), + tokenGenerator: tokenGenerator, + oneRTTStream: newCryptoStream(true), + perspective: protocol.PerspectiveServer, + tracer: tracer, + logger: logger, + version: v, } if origDestConnID.Len() > 0 { s.logID = origDestConnID.String() @@ -283,10 +269,10 @@ var newConnection = func( runner.Retire, runner.ReplaceWithClosed, s.queueControlFrame, - s.config.ConnectionIDGenerator, + connIDGenerator, ) s.preSetup() - s.ctx, s.ctxCancel = context.WithCancel(context.WithValue(context.Background(), ConnectionTracingKey, tracingID)) + s.ctx, s.ctxCancel = context.WithCancelCause(context.WithValue(context.Background(), ConnectionTracingKey, tracingID)) s.sentPacketHandler, s.receivedPacketHandler = ackhandler.NewAckHandler( 0, getMaxPacketSize(s.conn.RemoteAddr()), @@ -296,8 +282,7 @@ var newConnection = func( s.tracer, s.logger, ) - initialStream := newCryptoStream() - handshakeStream := newCryptoStream() + s.mtuDiscoverer = newMTUDiscoverer(s.rttStats, getMaxPacketSize(s.conn.RemoteAddr()), s.sentPacketHandler.SetMaxDatagramSize) params := &wire.TransportParameters{ InitialMaxStreamDataBidiLocal: protocol.ByteCount(s.config.InitialStreamReceiveWindow), InitialMaxStreamDataBidiRemote: protocol.ByteCount(s.config.InitialStreamReceiveWindow), @@ -311,9 +296,14 @@ var newConnection = func( DisableActiveMigration: true, StatelessResetToken: &statelessResetToken, OriginalDestinationConnectionID: origDestConnID, - ActiveConnectionIDLimit: protocol.MaxActiveConnectionIDs, - InitialSourceConnectionID: srcConnID, - RetrySourceConnectionID: retrySrcConnID, + // For interoperability with quic-go versions before May 2023, this value must be set to a value + // different from protocol.DefaultActiveConnectionIDLimit. + // If set to the default value, it will be omitted from the transport parameters, which will make + // old quic-go versions interpret it as 0, instead of the default value of 2. + // See https://github.com/quic-go/quic-go/pull/3806. + ActiveConnectionIDLimit: protocol.MaxActiveConnectionIDs, + InitialSourceConnectionID: srcConnID, + RetrySourceConnectionID: retrySrcConnID, } if s.config.EnableDatagrams { params.MaxDatagramFrameSize = protocol.MaxDatagramFrameSize @@ -323,37 +313,22 @@ var newConnection = func( if s.tracer != nil { s.tracer.SentTransportParameters(params) } - var allow0RTT func() bool - if conf.Allow0RTT != nil { - allow0RTT = func() bool { return conf.Allow0RTT(conn.RemoteAddr()) } - } cs := handshake.NewCryptoSetupServer( - initialStream, - handshakeStream, clientDestConnID, conn.LocalAddr(), conn.RemoteAddr(), params, - &handshakeRunner{ - onReceivedParams: s.handleTransportParameters, - onError: s.closeLocal, - dropKeys: s.dropEncryptionLevel, - onHandshakeComplete: func() { - runner.Retire(clientDestConnID) - close(s.handshakeCompleteChan) - }, - }, tlsConf, - allow0RTT, + conf.Allow0RTT, s.rttStats, tracer, logger, s.version, ) s.cryptoStreamHandler = cs - s.packer = newPacketPacker(srcConnID, s.connIDManager.Get, initialStream, handshakeStream, s.sentPacketHandler, s.retransmissionQueue, s.RemoteAddr(), cs, s.framer, s.receivedPacketHandler, s.datagramQueue, s.perspective) + s.packer = newPacketPacker(srcConnID, s.connIDManager.Get, s.initialStream, s.handshakeStream, s.sentPacketHandler, s.retransmissionQueue, cs, s.framer, s.receivedPacketHandler, s.datagramQueue, s.perspective) s.unpacker = newPacketUnpacker(cs, s.srcConnIDLen) - s.cryptoStreamManager = newCryptoStreamManager(cs, initialStream, handshakeStream, s.oneRTTStream) + s.cryptoStreamManager = newCryptoStreamManager(cs, s.initialStream, s.handshakeStream, s.oneRTTStream) return s } @@ -363,6 +338,7 @@ var newClientConnection = func( runner connRunner, destConnID protocol.ConnectionID, srcConnID protocol.ConnectionID, + connIDGenerator ConnectionIDGenerator, conf *Config, tlsConf *tls.Config, initialPacketNumber protocol.PacketNumber, @@ -374,18 +350,17 @@ var newClientConnection = func( v protocol.VersionNumber, ) quicConn { s := &connection{ - conn: conn, - config: conf, - origDestConnID: destConnID, - handshakeDestConnID: destConnID, - srcConnIDLen: srcConnID.Len(), - perspective: protocol.PerspectiveClient, - handshakeCompleteChan: make(chan struct{}), - logID: destConnID.String(), - logger: logger, - tracer: tracer, - versionNegotiated: hasNegotiatedVersion, - version: v, + conn: conn, + config: conf, + origDestConnID: destConnID, + handshakeDestConnID: destConnID, + srcConnIDLen: srcConnID.Len(), + perspective: protocol.PerspectiveClient, + logID: destConnID.String(), + logger: logger, + tracer: tracer, + versionNegotiated: hasNegotiatedVersion, + version: v, } s.connIDManager = newConnIDManager( destConnID, @@ -402,10 +377,10 @@ var newClientConnection = func( runner.Retire, runner.ReplaceWithClosed, s.queueControlFrame, - s.config.ConnectionIDGenerator, + connIDGenerator, ) s.preSetup() - s.ctx, s.ctxCancel = context.WithCancel(context.WithValue(context.Background(), ConnectionTracingKey, tracingID)) + s.ctx, s.ctxCancel = context.WithCancelCause(context.WithValue(context.Background(), ConnectionTracingKey, tracingID)) s.sentPacketHandler, s.receivedPacketHandler = ackhandler.NewAckHandler( initialPacketNumber, getMaxPacketSize(s.conn.RemoteAddr()), @@ -415,8 +390,8 @@ var newClientConnection = func( s.tracer, s.logger, ) - initialStream := newCryptoStream() - handshakeStream := newCryptoStream() + s.mtuDiscoverer = newMTUDiscoverer(s.rttStats, getMaxPacketSize(s.conn.RemoteAddr()), s.sentPacketHandler.SetMaxDatagramSize) + oneRTTStream := newCryptoStream(true) params := &wire.TransportParameters{ InitialMaxStreamDataBidiRemote: protocol.ByteCount(s.config.InitialStreamReceiveWindow), InitialMaxStreamDataBidiLocal: protocol.ByteCount(s.config.InitialStreamReceiveWindow), @@ -428,8 +403,13 @@ var newClientConnection = func( MaxAckDelay: protocol.MaxAckDelayInclGranularity, AckDelayExponent: protocol.AckDelayExponent, DisableActiveMigration: true, - ActiveConnectionIDLimit: protocol.MaxActiveConnectionIDs, - InitialSourceConnectionID: srcConnID, + // For interoperability with quic-go versions before May 2023, this value must be set to a value + // different from protocol.DefaultActiveConnectionIDLimit. + // If set to the default value, it will be omitted from the transport parameters, which will make + // old quic-go versions interpret it as 0, instead of the default value of 2. + // See https://github.com/quic-go/quic-go/pull/3806. + ActiveConnectionIDLimit: protocol.MaxActiveConnectionIDs, + InitialSourceConnectionID: srcConnID, } if s.config.EnableDatagrams { params.MaxDatagramFrameSize = protocol.MaxDatagramFrameSize @@ -439,19 +419,9 @@ var newClientConnection = func( if s.tracer != nil { s.tracer.SentTransportParameters(params) } - cs, clientHelloWritten := handshake.NewCryptoSetupClient( - initialStream, - handshakeStream, + cs := handshake.NewCryptoSetupClient( destConnID, - conn.LocalAddr(), - conn.RemoteAddr(), params, - &handshakeRunner{ - onReceivedParams: s.handleTransportParameters, - onError: s.closeLocal, - dropKeys: s.dropEncryptionLevel, - onHandshakeComplete: func() { close(s.handshakeCompleteChan) }, - }, tlsConf, enable0RTT, s.rttStats, @@ -459,11 +429,10 @@ var newClientConnection = func( logger, s.version, ) - s.clientHelloWritten = clientHelloWritten s.cryptoStreamHandler = cs - s.cryptoStreamManager = newCryptoStreamManager(cs, initialStream, handshakeStream, newCryptoStream()) + s.cryptoStreamManager = newCryptoStreamManager(cs, s.initialStream, s.handshakeStream, oneRTTStream) s.unpacker = newPacketUnpacker(cs, s.srcConnIDLen) - s.packer = newPacketPacker(srcConnID, s.connIDManager.Get, initialStream, handshakeStream, s.sentPacketHandler, s.retransmissionQueue, s.RemoteAddr(), cs, s.framer, s.receivedPacketHandler, s.datagramQueue, s.perspective) + s.packer = newPacketPacker(srcConnID, s.connIDManager.Get, s.initialStream, s.handshakeStream, s.sentPacketHandler, s.retransmissionQueue, cs, s.framer, s.receivedPacketHandler, s.datagramQueue, s.perspective) if len(tlsConf.ServerName) > 0 { s.tokenStoreKey = tlsConf.ServerName } else { @@ -478,6 +447,8 @@ var newClientConnection = func( } func (s *connection) preSetup() { + s.initialStream = newCryptoStream(false) + s.handshakeStream = newCryptoStream(false) s.sendQueue = newSendQueue(s.conn) s.retransmissionQueue = newRetransmissionQueue() s.frameParser = wire.NewFrameParser(s.config.EnableDatagrams) @@ -504,7 +475,7 @@ func (s *connection) preSetup() { s.perspective, ) s.framer = newFramer(s.streamsMap) - s.receivedPackets = make(chan *receivedPacket, protocol.MaxConnUnprocessedPackets) + s.receivedPackets = make(chan receivedPacket, protocol.MaxConnUnprocessedPackets) s.closeChan = make(chan closeError, 1) s.sendingScheduled = make(chan struct{}, 1) s.handshakeCtx, s.handshakeCtxCancel = context.WithCancel(context.Background()) @@ -520,15 +491,19 @@ func (s *connection) preSetup() { // run the connection main loop func (s *connection) run() error { - defer s.ctxCancel() + var closeErr closeError + defer func() { + s.ctxCancel(closeErr.err) + }() s.timer = *newTimer() - handshaking := make(chan struct{}) - go func() { - defer close(handshaking) - s.cryptoStreamHandler.RunHandshake() - }() + if err := s.cryptoStreamHandler.StartHandshake(); err != nil { + return err + } + if err := s.handleHandshakeEvents(); err != nil { + return err + } go func() { if err := s.sendQueue.Run(); err != nil { s.destroyImpl(err) @@ -536,23 +511,10 @@ func (s *connection) run() error { }() if s.perspective == protocol.PerspectiveClient { - select { - case zeroRTTParams := <-s.clientHelloWritten: - s.scheduleSending() - if zeroRTTParams != nil { - s.restoreTransportParameters(zeroRTTParams) - close(s.earlyConnReadyChan) - } - case closeErr := <-s.closeChan: - // put the close error back into the channel, so that the run loop can receive it - s.closeChan <- closeErr - } + s.scheduleSending() // so the ClientHello actually gets sent } - var ( - closeErr closeError - sendQueueAvailable <-chan struct{} - ) + var sendQueueAvailable <-chan struct{} runLoop: for { @@ -560,8 +522,6 @@ runLoop: select { case closeErr = <-s.closeChan: break runLoop - case <-s.handshakeCompleteChan: - s.handleHandshakeComplete() default: } @@ -632,8 +592,6 @@ runLoop: if !wasProcessed { continue } - case <-s.handshakeCompleteChan: - s.handleHandshakeComplete() } } @@ -657,7 +615,7 @@ runLoop: } else { idleTimeoutStartTime := s.idleTimeoutStartTime() if (!s.handshakeComplete && now.Sub(idleTimeoutStartTime) >= s.config.HandshakeIdleTimeout) || - (s.handshakeComplete && now.Sub(idleTimeoutStartTime) >= s.idleTimeout) { + (s.handshakeComplete && now.After(s.nextIdleTimeoutTime())) { s.destroyImpl(qerr.ErrIdleTimeout) continue } @@ -669,7 +627,7 @@ runLoop: sendQueueAvailable = s.sendQueue.Available() continue } - if err := s.sendPackets(); err != nil { + if err := s.triggerSending(); err != nil { s.closeLocal(err) } if s.sendQueue.WouldBlock() { @@ -680,13 +638,12 @@ runLoop: } s.cryptoStreamHandler.Close() - <-handshaking + s.sendQueue.Close() // close the send queue before sending the CONNECTION_CLOSE s.handleCloseError(&closeErr) if e := (&errCloseForRecreating{}); !errors.As(closeErr.err, &e) && s.tracer != nil { s.tracer.Close() } s.logger.Infof("Connection %s closed.", s.logID) - s.sendQueue.Close() s.timer.Stop() return closeErr.err } @@ -696,8 +653,8 @@ func (s *connection) earlyConnReady() <-chan struct{} { return s.earlyConnReadyChan } -func (s *connection) HandshakeComplete() context.Context { - return s.handshakeCtx +func (s *connection) HandshakeComplete() <-chan struct{} { + return s.handshakeCtx.Done() } func (s *connection) Context() context.Context { @@ -711,17 +668,26 @@ func (s *connection) supportsDatagrams() bool { func (s *connection) ConnectionState() ConnectionState { s.connStateMutex.Lock() defer s.connStateMutex.Unlock() - s.connState.TLS = s.cryptoStreamHandler.ConnectionState() + cs := s.cryptoStreamHandler.ConnectionState() + s.connState.TLS = cs.ConnectionState + s.connState.Used0RTT = cs.Used0RTT return s.connState } +// Time when the connection should time out +func (s *connection) nextIdleTimeoutTime() time.Time { + idleTimeout := utils.Max(s.idleTimeout, s.rttStats.PTO(true)*3) + return s.idleTimeoutStartTime().Add(idleTimeout) +} + // Time when the next keep-alive packet should be sent. // It returns a zero time if no keep-alive should be sent. func (s *connection) nextKeepAliveTime() time.Time { if s.config.KeepAlivePeriod == 0 || s.keepAlivePingSent || !s.firstAckElicitingPacketAfterIdleSentTime.IsZero() { return time.Time{} } - return s.lastPacketReceivedTime.Add(s.keepAliveInterval) + keepAliveInterval := utils.Max(s.keepAliveInterval, s.rttStats.PTO(true)*3/2) + return s.lastPacketReceivedTime.Add(keepAliveInterval) } func (s *connection) maybeResetTimer() { @@ -735,7 +701,7 @@ func (s *connection) maybeResetTimer() { if keepAliveTime := s.nextKeepAliveTime(); !keepAliveTime.IsZero() { deadline = keepAliveTime } else { - deadline = s.idleTimeoutStartTime().Add(s.idleTimeout) + deadline = s.nextIdleTimeoutTime() } } @@ -751,29 +717,32 @@ func (s *connection) idleTimeoutStartTime() time.Time { return utils.MaxTime(s.lastPacketReceivedTime, s.firstAckElicitingPacketAfterIdleSentTime) } -func (s *connection) handleHandshakeComplete() { - s.handshakeComplete = true - s.handshakeCompleteChan = nil // prevent this case from ever being selected again +func (s *connection) handleHandshakeComplete() error { defer s.handshakeCtxCancel() // Once the handshake completes, we have derived 1-RTT keys. - // There's no point in queueing undecryptable packets for later decryption any more. + // There's no point in queueing undecryptable packets for later decryption anymore. s.undecryptablePackets = nil s.connIDManager.SetHandshakeComplete() s.connIDGenerator.SetHandshakeComplete() + // The server applies transport parameters right away, but the client side has to wait for handshake completion. + // During a 0-RTT connection, the client is only allowed to use the new transport parameters for 1-RTT packets. if s.perspective == protocol.PerspectiveClient { s.applyTransportParameters() - return + return nil } - s.handleHandshakeConfirmed() + // All these only apply to the server side. + if err := s.handleHandshakeConfirmed(); err != nil { + return err + } ticket, err := s.cryptoStreamHandler.GetSessionTicket() if err != nil { - s.closeLocal(err) + return err } - if ticket != nil { + if ticket != nil { // may be nil if session tickets are disabled via tls.Config.SessionTicketsDisabled s.oneRTTStream.Write(ticket) for s.oneRTTStream.HasData() { s.queueControlFrame(s.oneRTTStream.PopCryptoFrame(protocol.MaxPostHandshakeCryptoFrameSize)) @@ -781,36 +750,33 @@ func (s *connection) handleHandshakeComplete() { } token, err := s.tokenGenerator.NewToken(s.conn.RemoteAddr()) if err != nil { - s.closeLocal(err) + return err } s.queueControlFrame(&wire.NewTokenFrame{Token: token}) s.queueControlFrame(&wire.HandshakeDoneFrame{}) + return nil } -func (s *connection) handleHandshakeConfirmed() { +func (s *connection) handleHandshakeConfirmed() error { + if err := s.dropEncryptionLevel(protocol.EncryptionHandshake); err != nil { + return err + } + s.handshakeConfirmed = true s.sentPacketHandler.SetHandshakeConfirmed() s.cryptoStreamHandler.SetHandshakeConfirmed() - if !s.config.DisablePathMTUDiscovery { + if !s.config.DisablePathMTUDiscovery && s.conn.capabilities().DF { maxPacketSize := s.peerParams.MaxUDPPayloadSize if maxPacketSize == 0 { maxPacketSize = protocol.MaxByteCount } - maxPacketSize = utils.Min(maxPacketSize, protocol.MaxPacketBufferSize) - s.mtuDiscoverer = newMTUDiscoverer( - s.rttStats, - getMaxPacketSize(s.conn.RemoteAddr()), - maxPacketSize, - func(size protocol.ByteCount) { - s.sentPacketHandler.SetMaxDatagramSize(size) - s.packer.SetMaxPacketSize(size) - }, - ) + s.mtuDiscoverer.Start(utils.Min(maxPacketSize, protocol.MaxPacketBufferSize)) } + return nil } -func (s *connection) handlePacketImpl(rp *receivedPacket) bool { +func (s *connection) handlePacketImpl(rp receivedPacket) bool { s.sentPacketHandler.ReceivedBytes(rp.Size()) if wire.IsVersionNegotiationPacket(rp.data) { @@ -826,7 +792,7 @@ func (s *connection) handlePacketImpl(rp *receivedPacket) bool { for len(data) > 0 { var destConnID protocol.ConnectionID if counter > 0 { - p = p.Clone() + p = *(p.Clone()) p.data = data var err error @@ -899,7 +865,7 @@ func (s *connection) handlePacketImpl(rp *receivedPacket) bool { return processed } -func (s *connection) handleShortHeaderPacket(p *receivedPacket, destConnID protocol.ConnectionID) bool { +func (s *connection) handleShortHeaderPacket(p receivedPacket, destConnID protocol.ConnectionID) bool { var wasQueued bool defer func() { @@ -950,7 +916,7 @@ func (s *connection) handleShortHeaderPacket(p *receivedPacket, destConnID proto return true } -func (s *connection) handleLongHeaderPacket(p *receivedPacket, hdr *wire.Header) bool /* was the packet successfully processed */ { +func (s *connection) handleLongHeaderPacket(p receivedPacket, hdr *wire.Header) bool /* was the packet successfully processed */ { var wasQueued bool defer func() { @@ -1007,7 +973,7 @@ func (s *connection) handleLongHeaderPacket(p *receivedPacket, hdr *wire.Header) return true } -func (s *connection) handleUnpackError(err error, p *receivedPacket, pt logging.PacketType) (wasQueued bool) { +func (s *connection) handleUnpackError(err error, p receivedPacket, pt logging.PacketType) (wasQueued bool) { switch err { case handshake.ErrKeysDropped: if s.tracer != nil { @@ -1109,7 +1075,7 @@ func (s *connection) handleRetryPacket(hdr *wire.Header, data []byte) bool /* wa return true } -func (s *connection) handleVersionNegotiationPacket(p *receivedPacket) { +func (s *connection) handleVersionNegotiationPacket(p receivedPacket) { if s.perspective == protocol.PerspectiveServer || // servers never receive version negotiation packets s.receivedFirstPacket || s.versionNegotiated { // ignore delayed / duplicated version negotiation packets if s.tracer != nil { @@ -1209,6 +1175,14 @@ func (s *connection) handleUnpackedLongHeaderPacket( } } + if s.perspective == protocol.PerspectiveServer && packet.encryptionLevel == protocol.EncryptionHandshake { + // On the server side, Initial keys are dropped as soon as the first Handshake packet is received. + // See Section 4.9.1 of RFC 9001. + if err := s.dropEncryptionLevel(protocol.EncryptionInitial); err != nil { + return err + } + } + s.lastPacketReceivedTime = rcvTime s.firstAckElicitingPacketAfterIdleSentTime = time.Time{} s.keepAlivePingSent = false @@ -1253,7 +1227,12 @@ func (s *connection) handleFrames( ) (isAckEliciting bool, _ error) { // Only used for tracing. // If we're not tracing, this slice will always remain empty. - var frames []wire.Frame + var frames []logging.Frame + if log != nil { + frames = make([]logging.Frame, 0, 4) + } + handshakeWasComplete := s.handshakeComplete + var handleErr error for len(data) > 0 { l, frame, err := s.frameParser.ParseNext(data, encLevel, s.version) if err != nil { @@ -1266,29 +1245,40 @@ func (s *connection) handleFrames( if ackhandler.IsFrameAckEliciting(frame) { isAckEliciting = true } - // Only process frames now if we're not logging. - // If we're logging, we need to make sure that the packet_received event is logged first. - if log == nil { - if err := s.handleFrame(frame, encLevel, destConnID); err != nil { + if log != nil { + frames = append(frames, logutils.ConvertFrame(frame)) + } + // An error occurred handling a previous frame. + // Don't handle the current frame. + if handleErr != nil { + continue + } + if err := s.handleFrame(frame, encLevel, destConnID); err != nil { + if log == nil { return false, err } - } else { - frames = append(frames, frame) + // If we're logging, we need to keep parsing (but not handling) all frames. + handleErr = err } } if log != nil { - fs := make([]logging.Frame, len(frames)) - for i, frame := range frames { - fs[i] = logutils.ConvertFrame(frame) + log(frames) + if handleErr != nil { + return false, handleErr } - log(fs) - for _, frame := range frames { - if err := s.handleFrame(frame, encLevel, destConnID); err != nil { - return false, err - } + } + + // Handle completion of the handshake after processing all the frames. + // This ensures that we correctly handle the following case on the server side: + // We receive a Handshake packet that contains the CRYPTO frame that allows us to complete the handshake, + // and an ACK serialized after that CRYPTO frame. In this case, we still want to process the ACK frame. + if !handshakeWasComplete && s.handshakeComplete { + if err := s.handleHandshakeComplete(); err != nil { + return false, err } } + return } @@ -1302,7 +1292,6 @@ func (s *connection) handleFrame(f wire.Frame, encLevel protocol.EncryptionLevel err = s.handleStreamFrame(frame) case *wire.AckFrame: err = s.handleAckFrame(frame, encLevel) - wire.PutAckFrame(frame) case *wire.ConnectionCloseFrame: s.handleConnectionCloseFrame(frame) case *wire.ResetStreamFrame: @@ -1341,7 +1330,7 @@ func (s *connection) handleFrame(f wire.Frame, encLevel protocol.EncryptionLevel } // handlePacket is called by the server with a new packet -func (s *connection) handlePacket(p *receivedPacket) { +func (s *connection) handlePacket(p receivedPacket) { // Discard packets once the amount of queued packets is larger than // the channel size, protocol.MaxConnUnprocessedPackets select { @@ -1371,16 +1360,43 @@ func (s *connection) handleConnectionCloseFrame(frame *wire.ConnectionCloseFrame } func (s *connection) handleCryptoFrame(frame *wire.CryptoFrame, encLevel protocol.EncryptionLevel) error { - encLevelChanged, err := s.cryptoStreamManager.HandleCryptoFrame(frame, encLevel) - if err != nil { + if err := s.cryptoStreamManager.HandleCryptoFrame(frame, encLevel); err != nil { return err } - if encLevelChanged { - // Queue all packets for decryption that have been undecryptable so far. - s.undecryptablePacketsToProcess = s.undecryptablePackets - s.undecryptablePackets = nil + return s.handleHandshakeEvents() +} + +func (s *connection) handleHandshakeEvents() error { + for { + ev := s.cryptoStreamHandler.NextEvent() + var err error + switch ev.Kind { + case handshake.EventNoEvent: + return nil + case handshake.EventHandshakeComplete: + // Don't call handleHandshakeComplete yet. + // It's advantageous to process ACK frames that might be serialized after the CRYPTO frame first. + s.handshakeComplete = true + case handshake.EventReceivedTransportParameters: + err = s.handleTransportParameters(ev.TransportParameters) + case handshake.EventRestoredTransportParameters: + s.restoreTransportParameters(ev.TransportParameters) + close(s.earlyConnReadyChan) + case handshake.EventReceivedReadKeys: + // Queue all packets for decryption that have been undecryptable so far. + s.undecryptablePacketsToProcess = s.undecryptablePackets + s.undecryptablePackets = nil + case handshake.EventDiscard0RTTKeys: + err = s.dropEncryptionLevel(protocol.Encryption0RTT) + case handshake.EventWriteInitialData: + _, err = s.initialStream.Write(ev.Data) + case handshake.EventWriteHandshakeData: + _, err = s.handshakeStream.Write(ev.Data) + } + if err != nil { + return err + } } - return nil } func (s *connection) handleStreamFrame(frame *wire.StreamFrame) error { @@ -1475,7 +1491,7 @@ func (s *connection) handleHandshakeDoneFrame() error { } } if !s.handshakeConfirmed { - s.handleHandshakeConfirmed() + return s.handleHandshakeConfirmed() } return nil } @@ -1488,8 +1504,13 @@ func (s *connection) handleAckFrame(frame *wire.AckFrame, encLevel protocol.Encr if !acked1RTTPacket { return nil } + // On the client side: If the packet acknowledged a 1-RTT packet, this confirms the handshake. + // This is only possible if the ACK was sent in a 1-RTT packet. + // This is an optimization over simply waiting for a HANDSHAKE_DONE frame, see section 4.1.2 of RFC 9001. if s.perspective == protocol.PerspectiveClient && !s.handshakeConfirmed { - s.handleHandshakeConfirmed() + if err := s.handleHandshakeConfirmed(); err != nil { + return err + } } return s.cryptoStreamHandler.SetLargest1RTTAcked(frame.LargestAcked()) } @@ -1621,21 +1642,24 @@ func (s *connection) handleCloseError(closeErr *closeError) { s.connIDGenerator.ReplaceWithClosed(s.perspective, connClosePacket) } -func (s *connection) dropEncryptionLevel(encLevel protocol.EncryptionLevel) { - s.sentPacketHandler.DropPackets(encLevel) - s.receivedPacketHandler.DropPackets(encLevel) +func (s *connection) dropEncryptionLevel(encLevel protocol.EncryptionLevel) error { if s.tracer != nil { s.tracer.DroppedEncryptionLevel(encLevel) } - if encLevel == protocol.Encryption0RTT { + s.sentPacketHandler.DropPackets(encLevel) + s.receivedPacketHandler.DropPackets(encLevel) + //nolint:exhaustive // only Initial and 0-RTT need special treatment + switch encLevel { + case protocol.EncryptionInitial: + s.cryptoStreamHandler.DiscardInitialKeys() + case protocol.Encryption0RTT: s.streamsMap.ResetFor0RTT() if err := s.connFlowController.Reset(); err != nil { - s.closeLocal(err) - } - if err := s.framer.Handle0RTTRejection(); err != nil { - s.closeLocal(err) + return err } + return s.framer.Handle0RTTRejection() } + return s.cryptoStreamManager.Drop(encLevel) } // is called for the client, when restoring transport parameters saved for 0-RTT @@ -1653,13 +1677,24 @@ func (s *connection) restoreTransportParameters(params *wire.TransportParameters s.connStateMutex.Unlock() } -func (s *connection) handleTransportParameters(params *wire.TransportParameters) { +func (s *connection) handleTransportParameters(params *wire.TransportParameters) error { + if s.tracer != nil { + s.tracer.ReceivedTransportParameters(params) + } if err := s.checkTransportParameters(params); err != nil { - s.closeLocal(&qerr.TransportError{ + return &qerr.TransportError{ ErrorCode: qerr.TransportParameterError, ErrorMessage: err.Error(), - }) + } + } + + if s.perspective == protocol.PerspectiveClient && s.peerParams != nil && s.ConnectionState().Used0RTT && !params.ValidForUpdate(s.peerParams) { + return &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "server sent reduced limits after accepting 0-RTT data", + } } + s.peerParams = params // On the client side we have to wait for handshake completion. // During a 0-RTT connection, we are only allowed to use the new transport parameters for 1-RTT packets. @@ -1673,15 +1708,13 @@ func (s *connection) handleTransportParameters(params *wire.TransportParameters) s.connStateMutex.Lock() s.connState.SupportsDatagrams = s.supportsDatagrams() s.connStateMutex.Unlock() + return nil } func (s *connection) checkTransportParameters(params *wire.TransportParameters) error { if s.logger.Debug() { s.logger.Debugf("Processed Transport Parameters: %s", params) } - if s.tracer != nil { - s.tracer.ReceivedTransportParameters(params) - } // check the initial_source_connection_id if params.InitialSourceConnectionID != s.handshakeDestConnID { @@ -1714,7 +1747,6 @@ func (s *connection) applyTransportParameters() { s.idleTimeout = utils.MinNonZeroDuration(s.config.MaxIdleTimeout, params.MaxIdleTimeout) s.keepAliveInterval = utils.Min(s.config.KeepAlivePeriod, utils.Min(s.idleTimeout/2, protocol.MaxKeepAliveInterval)) s.streamsMap.UpdateLimits(params) - s.packer.HandleTransportParameters(params) s.frameParser.SetAckDelayExponent(params.AckDelayExponent) s.connFlowController.UpdateSendWindow(params.InitialMaxData) s.rttStats.SetMaxAckDelay(params.MaxAckDelay) @@ -1729,99 +1761,236 @@ func (s *connection) applyTransportParameters() { } } -func (s *connection) sendPackets() error { +func (s *connection) triggerSending() error { s.pacingDeadline = time.Time{} + now := time.Now() + + sendMode := s.sentPacketHandler.SendMode(now) + //nolint:exhaustive // No need to handle pacing limited here. + switch sendMode { + case ackhandler.SendAny: + return s.sendPackets(now) + case ackhandler.SendNone: + return nil + case ackhandler.SendPacingLimited: + deadline := s.sentPacketHandler.TimeUntilSend() + if deadline.IsZero() { + deadline = deadlineSendImmediately + } + s.pacingDeadline = deadline + // Allow sending of an ACK if we're pacing limit. + // This makes sure that a peer that is mostly receiving data (and thus has an inaccurate cwnd estimate) + // sends enough ACKs to allow its peer to utilize the bandwidth. + fallthrough + case ackhandler.SendAck: + // We can at most send a single ACK only packet. + // There will only be a new ACK after receiving new packets. + // SendAck is only returned when we're congestion limited, so we don't need to set the pacinggs timer. + return s.maybeSendAckOnlyPacket(now) + case ackhandler.SendPTOInitial: + if err := s.sendProbePacket(protocol.EncryptionInitial, now); err != nil { + return err + } + if s.sendQueue.WouldBlock() { + s.scheduleSending() + return nil + } + return s.triggerSending() + case ackhandler.SendPTOHandshake: + if err := s.sendProbePacket(protocol.EncryptionHandshake, now); err != nil { + return err + } + if s.sendQueue.WouldBlock() { + s.scheduleSending() + return nil + } + return s.triggerSending() + case ackhandler.SendPTOAppData: + if err := s.sendProbePacket(protocol.Encryption1RTT, now); err != nil { + return err + } + if s.sendQueue.WouldBlock() { + s.scheduleSending() + return nil + } + return s.triggerSending() + default: + return fmt.Errorf("BUG: invalid send mode %d", sendMode) + } +} - var sentPacket bool // only used in for packets sent in send mode SendAny +func (s *connection) sendPackets(now time.Time) error { + // Path MTU Discovery + // Can't use GSO, since we need to send a single packet that's larger than our current maximum size. + // Performance-wise, this doesn't matter, since we only send a very small (<10) number of + // MTU probe packets per connection. + if s.handshakeConfirmed && s.mtuDiscoverer != nil && s.mtuDiscoverer.ShouldSendProbe(now) { + ping, size := s.mtuDiscoverer.GetPing() + p, buf, err := s.packer.PackMTUProbePacket(ping, size, s.version) + if err != nil { + return err + } + s.logShortHeaderPacket(p.DestConnID, p.Ack, p.Frames, p.StreamFrames, p.PacketNumber, p.PacketNumberLen, p.KeyPhase, buf.Len(), false) + s.registerPackedShortHeaderPacket(p, now) + s.sendQueue.Send(buf, buf.Len()) + // This is kind of a hack. We need to trigger sending again somehow. + s.pacingDeadline = deadlineSendImmediately + return nil + } + + if isBlocked, offset := s.connFlowController.IsNewlyBlocked(); isBlocked { + s.framer.QueueControlFrame(&wire.DataBlockedFrame{MaximumData: offset}) + } + s.windowUpdateQueue.QueueAll() + if cf := s.cryptoStreamManager.GetPostHandshakeData(protocol.MaxPostHandshakeCryptoFrameSize); cf != nil { + s.queueControlFrame(cf) + } + + if !s.handshakeConfirmed { + packet, err := s.packer.PackCoalescedPacket(false, s.mtuDiscoverer.CurrentSize(), s.version) + if err != nil || packet == nil { + return err + } + s.sentFirstPacket = true + if err := s.sendPackedCoalescedPacket(packet, now); err != nil { + return err + } + sendMode := s.sentPacketHandler.SendMode(now) + if sendMode == ackhandler.SendPacingLimited { + s.resetPacingDeadline() + } else if sendMode == ackhandler.SendAny { + s.pacingDeadline = deadlineSendImmediately + } + return nil + } + + if s.conn.capabilities().GSO { + return s.sendPacketsWithGSO(now) + } + return s.sendPacketsWithoutGSO(now) +} + +func (s *connection) sendPacketsWithoutGSO(now time.Time) error { for { - sendMode := s.sentPacketHandler.SendMode() - if sendMode == ackhandler.SendAny && s.handshakeComplete && !s.sentPacketHandler.HasPacingBudget() { - deadline := s.sentPacketHandler.TimeUntilSend() - if deadline.IsZero() { - deadline = deadlineSendImmediately - } - s.pacingDeadline = deadline - // Allow sending of an ACK if we're pacing limit (if we haven't sent out a packet yet). - // This makes sure that a peer that is mostly receiving data (and thus has an inaccurate cwnd estimate) - // sends enough ACKs to allow its peer to utilize the bandwidth. - if sentPacket { + buf := getPacketBuffer() + if _, err := s.appendPacket(buf, s.mtuDiscoverer.CurrentSize(), now); err != nil { + if err == errNothingToPack { + buf.Release() return nil } - sendMode = ackhandler.SendAck + return err } - switch sendMode { - case ackhandler.SendNone: + + s.sendQueue.Send(buf, buf.Len()) + + if s.sendQueue.WouldBlock() { return nil - case ackhandler.SendAck: - // If we already sent packets, and the send mode switches to SendAck, - // as we've just become congestion limited. - // There's no need to try to send an ACK at this moment. - if sentPacket { - return nil - } - // We can at most send a single ACK only packet. - // There will only be a new ACK after receiving new packets. - // SendAck is only returned when we're congestion limited, so we don't need to set the pacinggs timer. - return s.maybeSendAckOnlyPacket() - case ackhandler.SendPTOInitial: - if err := s.sendProbePacket(protocol.EncryptionInitial); err != nil { + } + sendMode := s.sentPacketHandler.SendMode(now) + if sendMode == ackhandler.SendPacingLimited { + s.resetPacingDeadline() + return nil + } + if sendMode != ackhandler.SendAny { + return nil + } + // Prioritize receiving of packets over sending out more packets. + if len(s.receivedPackets) > 0 { + s.pacingDeadline = deadlineSendImmediately + return nil + } + } +} + +func (s *connection) sendPacketsWithGSO(now time.Time) error { + buf := getLargePacketBuffer() + maxSize := s.mtuDiscoverer.CurrentSize() + + for { + var dontSendMore bool + size, err := s.appendPacket(buf, maxSize, now) + if err != nil { + if err != errNothingToPack { return err } - case ackhandler.SendPTOHandshake: - if err := s.sendProbePacket(protocol.EncryptionHandshake); err != nil { - return err + if buf.Len() == 0 { + buf.Release() + return nil } - case ackhandler.SendPTOAppData: - if err := s.sendProbePacket(protocol.Encryption1RTT); err != nil { - return err + dontSendMore = true + } + + if !dontSendMore { + sendMode := s.sentPacketHandler.SendMode(now) + if sendMode == ackhandler.SendPacingLimited { + s.resetPacingDeadline() } - case ackhandler.SendAny: - sent, err := s.sendPacket() - if err != nil || !sent { - return err + if sendMode != ackhandler.SendAny { + dontSendMore = true } - sentPacket = true - default: - return fmt.Errorf("BUG: invalid send mode %d", sendMode) } - // Prioritize receiving of packets over sending out more packets. - if len(s.receivedPackets) > 0 { - s.pacingDeadline = deadlineSendImmediately + + // Append another packet if + // 1. The congestion controller and pacer allow sending more + // 2. The last packet appended was a full-size packet + // 3. We still have enough space for another full-size packet in the buffer + if !dontSendMore && size == maxSize && buf.Len()+maxSize <= buf.Cap() { + continue + } + + s.sendQueue.Send(buf, maxSize) + + if dontSendMore { return nil } if s.sendQueue.WouldBlock() { return nil } + + // Prioritize receiving of packets over sending out more packets. + if len(s.receivedPackets) > 0 { + s.pacingDeadline = deadlineSendImmediately + return nil + } + + buf = getLargePacketBuffer() + } +} + +func (s *connection) resetPacingDeadline() { + deadline := s.sentPacketHandler.TimeUntilSend() + if deadline.IsZero() { + deadline = deadlineSendImmediately } + s.pacingDeadline = deadline } -func (s *connection) maybeSendAckOnlyPacket() error { +func (s *connection) maybeSendAckOnlyPacket(now time.Time) error { if !s.handshakeConfirmed { - packet, err := s.packer.PackCoalescedPacket(true, s.version) + packet, err := s.packer.PackCoalescedPacket(true, s.mtuDiscoverer.CurrentSize(), s.version) if err != nil { return err } if packet == nil { return nil } - s.sendPackedCoalescedPacket(packet, time.Now()) - return nil + return s.sendPackedCoalescedPacket(packet, time.Now()) } - now := time.Now() - p, buffer, err := s.packer.PackPacket(true, now, s.version) + p, buf, err := s.packer.PackAckOnlyPacket(s.mtuDiscoverer.CurrentSize(), s.version) if err != nil { if err == errNothingToPack { return nil } return err } - s.logShortHeaderPacket(p.DestConnID, p.Ack, p.Frames, p.PacketNumber, p.PacketNumberLen, p.KeyPhase, buffer.Len(), false) - s.sendPackedShortHeaderPacket(buffer, p.Packet, now) + s.logShortHeaderPacket(p.DestConnID, p.Ack, p.Frames, p.StreamFrames, p.PacketNumber, p.PacketNumberLen, p.KeyPhase, buf.Len(), false) + s.registerPackedShortHeaderPacket(p, now) + s.sendQueue.Send(buf, buf.Len()) return nil } -func (s *connection) sendProbePacket(encLevel protocol.EncryptionLevel) error { +func (s *connection) sendProbePacket(encLevel protocol.EncryptionLevel, now time.Time) error { // Queue probe packets until we actually send out a packet, // or until there are no more packets to queue. var packet *coalescedPacket @@ -1830,7 +1999,7 @@ func (s *connection) sendProbePacket(encLevel protocol.EncryptionLevel) error { break } var err error - packet, err = s.packer.MaybePackProbePacket(encLevel, s.version) + packet, err = s.packer.MaybePackProbePacket(encLevel, s.mtuDiscoverer.CurrentSize(), s.version) if err != nil { return err } @@ -1839,19 +2008,9 @@ func (s *connection) sendProbePacket(encLevel protocol.EncryptionLevel) error { } } if packet == nil { - //nolint:exhaustive // Cannot send probe packets for 0-RTT. - switch encLevel { - case protocol.EncryptionInitial: - s.retransmissionQueue.AddInitial(&wire.PingFrame{}) - case protocol.EncryptionHandshake: - s.retransmissionQueue.AddHandshake(&wire.PingFrame{}) - case protocol.Encryption1RTT: - s.retransmissionQueue.AddAppData(&wire.PingFrame{}) - default: - panic("unexpected encryption level") - } + s.retransmissionQueue.AddPing(encLevel) var err error - packet, err = s.packer.MaybePackProbePacket(encLevel, s.version) + packet, err = s.packer.MaybePackProbePacket(encLevel, s.mtuDiscoverer.CurrentSize(), s.version) if err != nil { return err } @@ -1859,73 +2018,68 @@ func (s *connection) sendProbePacket(encLevel protocol.EncryptionLevel) error { if packet == nil || (len(packet.longHdrPackets) == 0 && packet.shortHdrPacket == nil) { return fmt.Errorf("connection BUG: couldn't pack %s probe packet", encLevel) } - s.sendPackedCoalescedPacket(packet, time.Now()) - return nil + return s.sendPackedCoalescedPacket(packet, now) } -func (s *connection) sendPacket() (bool, error) { - if isBlocked, offset := s.connFlowController.IsNewlyBlocked(); isBlocked { - s.framer.QueueControlFrame(&wire.DataBlockedFrame{MaximumData: offset}) - } - s.windowUpdateQueue.QueueAll() - - now := time.Now() - if !s.handshakeConfirmed { - packet, err := s.packer.PackCoalescedPacket(false, s.version) - if err != nil || packet == nil { - return false, err - } - s.sentFirstPacket = true - s.sendPackedCoalescedPacket(packet, now) - return true, nil - } else if !s.config.DisablePathMTUDiscovery && s.mtuDiscoverer.ShouldSendProbe(now) { - ping, size := s.mtuDiscoverer.GetPing() - p, buffer, err := s.packer.PackMTUProbePacket(ping, size, now, s.version) - if err != nil { - return false, err - } - s.logShortHeaderPacket(p.DestConnID, p.Ack, p.Frames, p.PacketNumber, p.PacketNumberLen, p.KeyPhase, buffer.Len(), false) - s.sendPackedShortHeaderPacket(buffer, p.Packet, now) - return true, nil - } - p, buffer, err := s.packer.PackPacket(false, now, s.version) +// appendPacket appends a new packet to the given packetBuffer. +// If there was nothing to pack, the returned size is 0. +func (s *connection) appendPacket(buf *packetBuffer, maxSize protocol.ByteCount, now time.Time) (protocol.ByteCount, error) { + startLen := buf.Len() + p, err := s.packer.AppendPacket(buf, maxSize, s.version) if err != nil { - if err == errNothingToPack { - return false, nil - } - return false, err + return 0, err } - s.logShortHeaderPacket(p.DestConnID, p.Ack, p.Frames, p.PacketNumber, p.PacketNumberLen, p.KeyPhase, buffer.Len(), false) - s.sendPackedShortHeaderPacket(buffer, p.Packet, now) - return true, nil + size := buf.Len() - startLen + s.logShortHeaderPacket(p.DestConnID, p.Ack, p.Frames, p.StreamFrames, p.PacketNumber, p.PacketNumberLen, p.KeyPhase, size, false) + s.registerPackedShortHeaderPacket(p, now) + return size, nil } -func (s *connection) sendPackedShortHeaderPacket(buffer *packetBuffer, p *ackhandler.Packet, now time.Time) { - if s.firstAckElicitingPacketAfterIdleSentTime.IsZero() && ackhandler.HasAckElicitingFrames(p.Frames) { +func (s *connection) registerPackedShortHeaderPacket(p shortHeaderPacket, now time.Time) { + if s.firstAckElicitingPacketAfterIdleSentTime.IsZero() && (len(p.StreamFrames) > 0 || ackhandler.HasAckElicitingFrames(p.Frames)) { s.firstAckElicitingPacketAfterIdleSentTime = now } - s.sentPacketHandler.SentPacket(p) + largestAcked := protocol.InvalidPacketNumber + if p.Ack != nil { + largestAcked = p.Ack.LargestAcked() + } + s.sentPacketHandler.SentPacket(now, p.PacketNumber, largestAcked, p.StreamFrames, p.Frames, protocol.Encryption1RTT, p.Length, p.IsPathMTUProbePacket) s.connIDManager.SentPacket() - s.sendQueue.Send(buffer) } -func (s *connection) sendPackedCoalescedPacket(packet *coalescedPacket, now time.Time) { +func (s *connection) sendPackedCoalescedPacket(packet *coalescedPacket, now time.Time) error { s.logCoalescedPacket(packet) for _, p := range packet.longHdrPackets { if s.firstAckElicitingPacketAfterIdleSentTime.IsZero() && p.IsAckEliciting() { s.firstAckElicitingPacketAfterIdleSentTime = now } - s.sentPacketHandler.SentPacket(p.ToAckHandlerPacket(now, s.retransmissionQueue)) + largestAcked := protocol.InvalidPacketNumber + if p.ack != nil { + largestAcked = p.ack.LargestAcked() + } + s.sentPacketHandler.SentPacket(now, p.header.PacketNumber, largestAcked, p.streamFrames, p.frames, p.EncryptionLevel(), p.length, false) + if s.perspective == protocol.PerspectiveClient && p.EncryptionLevel() == protocol.EncryptionHandshake { + // On the client side, Initial keys are dropped as soon as the first Handshake packet is sent. + // See Section 4.9.1 of RFC 9001. + if err := s.dropEncryptionLevel(protocol.EncryptionInitial); err != nil { + return err + } + } } if p := packet.shortHdrPacket; p != nil { if s.firstAckElicitingPacketAfterIdleSentTime.IsZero() && p.IsAckEliciting() { s.firstAckElicitingPacketAfterIdleSentTime = now } - s.sentPacketHandler.SentPacket(p.Packet) + largestAcked := protocol.InvalidPacketNumber + if p.Ack != nil { + largestAcked = p.Ack.LargestAcked() + } + s.sentPacketHandler.SentPacket(now, p.PacketNumber, largestAcked, p.StreamFrames, p.Frames, protocol.Encryption1RTT, p.Length, p.IsPathMTUProbePacket) } s.connIDManager.SentPacket() - s.sendQueue.Send(packet.buffer) + s.sendQueue.Send(packet.buffer, packet.buffer.Len()) + return nil } func (s *connection) sendConnectionClose(e error) ([]byte, error) { @@ -1934,20 +2088,20 @@ func (s *connection) sendConnectionClose(e error) ([]byte, error) { var transportErr *qerr.TransportError var applicationErr *qerr.ApplicationError if errors.As(e, &transportErr) { - packet, err = s.packer.PackConnectionClose(transportErr, s.version) + packet, err = s.packer.PackConnectionClose(transportErr, s.mtuDiscoverer.CurrentSize(), s.version) } else if errors.As(e, &applicationErr) { - packet, err = s.packer.PackApplicationClose(applicationErr, s.version) + packet, err = s.packer.PackApplicationClose(applicationErr, s.mtuDiscoverer.CurrentSize(), s.version) } else { packet, err = s.packer.PackConnectionClose(&qerr.TransportError{ ErrorCode: qerr.InternalError, ErrorMessage: fmt.Sprintf("connection BUG: unspecified error type (msg: %s)", e.Error()), - }, s.version) + }, s.mtuDiscoverer.CurrentSize(), s.version) } if err != nil { return nil, err } s.logCoalescedPacket(packet) - return packet.buffer.Data, s.conn.Write(packet.buffer.Data) + return packet.buffer.Data, s.conn.Write(packet.buffer.Data, packet.buffer.Len()) } func (s *connection) logLongHeaderPacket(p *longHeaderPacket) { @@ -1960,6 +2114,9 @@ func (s *connection) logLongHeaderPacket(p *longHeaderPacket) { for _, frame := range p.frames { wire.LogFrame(s.logger, frame.Frame, true) } + for _, frame := range p.streamFrames { + wire.LogFrame(s.logger, frame.Frame, true) + } } // tracing @@ -1968,6 +2125,9 @@ func (s *connection) logLongHeaderPacket(p *longHeaderPacket) { for _, f := range p.frames { frames = append(frames, logutils.ConvertFrame(f.Frame)) } + for _, f := range p.streamFrames { + frames = append(frames, logutils.ConvertFrame(f.Frame)) + } var ack *logging.AckFrame if p.ack != nil { ack = logutils.ConvertAckFrame(p.ack) @@ -1979,7 +2139,8 @@ func (s *connection) logLongHeaderPacket(p *longHeaderPacket) { func (s *connection) logShortHeaderPacket( destConnID protocol.ConnectionID, ackFrame *wire.AckFrame, - frames []*ackhandler.Frame, + frames []ackhandler.Frame, + streamFrames []ackhandler.StreamFrame, pn protocol.PacketNumber, pnLen protocol.PacketNumberLen, kp protocol.KeyPhaseBit, @@ -1995,17 +2156,23 @@ func (s *connection) logShortHeaderPacket( if ackFrame != nil { wire.LogFrame(s.logger, ackFrame, true) } - for _, frame := range frames { - wire.LogFrame(s.logger, frame.Frame, true) + for _, f := range frames { + wire.LogFrame(s.logger, f.Frame, true) + } + for _, f := range streamFrames { + wire.LogFrame(s.logger, f.Frame, true) } } // tracing if s.tracer != nil { - fs := make([]logging.Frame, 0, len(frames)) + fs := make([]logging.Frame, 0, len(frames)+len(streamFrames)) for _, f := range frames { fs = append(fs, logutils.ConvertFrame(f.Frame)) } + for _, f := range streamFrames { + fs = append(fs, logutils.ConvertFrame(f.Frame)) + } var ack *logging.AckFrame if ackFrame != nil { ack = logutils.ConvertAckFrame(ackFrame) @@ -2026,6 +2193,22 @@ func (s *connection) logShortHeaderPacket( func (s *connection) logCoalescedPacket(packet *coalescedPacket) { if s.logger.Debug() { + // There's a short period between dropping both Initial and Handshake keys and completion of the handshake, + // during which we might call PackCoalescedPacket but just pack a short header packet. + if len(packet.longHdrPackets) == 0 && packet.shortHdrPacket != nil { + s.logShortHeaderPacket( + packet.shortHdrPacket.DestConnID, + packet.shortHdrPacket.Ack, + packet.shortHdrPacket.Frames, + packet.shortHdrPacket.StreamFrames, + packet.shortHdrPacket.PacketNumber, + packet.shortHdrPacket.PacketNumberLen, + packet.shortHdrPacket.KeyPhase, + packet.shortHdrPacket.Length, + false, + ) + return + } if len(packet.longHdrPackets) > 1 { s.logger.Debugf("-> Sending coalesced packet (%d parts, %d bytes) for connection %s", len(packet.longHdrPackets), packet.buffer.Len(), s.logID) } else { @@ -2036,7 +2219,7 @@ func (s *connection) logCoalescedPacket(packet *coalescedPacket) { s.logLongHeaderPacket(p) } if p := packet.shortHdrPacket; p != nil { - s.logShortHeaderPacket(p.DestConnID, p.Ack, p.Frames, p.PacketNumber, p.PacketNumberLen, p.KeyPhase, p.Length, true) + s.logShortHeaderPacket(p.DestConnID, p.Ack, p.Frames, p.StreamFrames, p.PacketNumber, p.PacketNumberLen, p.KeyPhase, p.Length, true) } } @@ -2097,7 +2280,7 @@ func (s *connection) scheduleSending() { // tryQueueingUndecryptablePacket queues a packet for which we're missing the decryption keys. // The logging.PacketType is only used for logging purposes. -func (s *connection) tryQueueingUndecryptablePacket(p *receivedPacket, pt logging.PacketType) { +func (s *connection) tryQueueingUndecryptablePacket(p receivedPacket, pt logging.PacketType) { if s.handshakeComplete { panic("shouldn't queue undecryptable packets after handshake completion") } @@ -2155,11 +2338,11 @@ func (s *connection) SendMessage(p []byte) error { return s.datagramQueue.AddAndWait(f) } -func (s *connection) ReceiveMessage() ([]byte, error) { +func (s *connection) ReceiveMessage(ctx context.Context) ([]byte, error) { if !s.config.EnableDatagrams { return nil, errors.New("datagram support disabled") } - return s.datagramQueue.Receive() + return s.datagramQueue.Receive(ctx) } func (s *connection) LocalAddr() net.Addr { @@ -2179,7 +2362,7 @@ func (s *connection) GetVersion() protocol.VersionNumber { } func (s *connection) NextConnection() Connection { - <-s.HandshakeComplete().Done() + <-s.HandshakeComplete() s.streamsMap.UseResetMaps() return s } diff --git a/vendor/github.com/quic-go/quic-go/crypto_stream.go b/vendor/github.com/quic-go/quic-go/crypto_stream.go index f10e91202f..5ce2125dec 100644 --- a/vendor/github.com/quic-go/quic-go/crypto_stream.go +++ b/vendor/github.com/quic-go/quic-go/crypto_stream.go @@ -30,10 +30,17 @@ type cryptoStreamImpl struct { writeOffset protocol.ByteCount writeBuf []byte + + // Reassemble TLS handshake messages before returning them from GetCryptoData. + // This is only needed because crypto/tls doesn't correctly handle post-handshake messages. + onlyCompleteMsg bool } -func newCryptoStream() cryptoStream { - return &cryptoStreamImpl{queue: newFrameSorter()} +func newCryptoStream(onlyCompleteMsg bool) cryptoStream { + return &cryptoStreamImpl{ + queue: newFrameSorter(), + onlyCompleteMsg: onlyCompleteMsg, + } } func (s *cryptoStreamImpl) HandleCryptoFrame(f *wire.CryptoFrame) error { @@ -71,17 +78,23 @@ func (s *cryptoStreamImpl) HandleCryptoFrame(f *wire.CryptoFrame) error { // GetCryptoData retrieves data that was received in CRYPTO frames func (s *cryptoStreamImpl) GetCryptoData() []byte { - if len(s.msgBuf) < 4 { - return nil - } - msgLen := 4 + int(s.msgBuf[1])<<16 + int(s.msgBuf[2])<<8 + int(s.msgBuf[3]) - if len(s.msgBuf) < msgLen { - return nil + if s.onlyCompleteMsg { + if len(s.msgBuf) < 4 { + return nil + } + msgLen := 4 + int(s.msgBuf[1])<<16 + int(s.msgBuf[2])<<8 + int(s.msgBuf[3]) + if len(s.msgBuf) < msgLen { + return nil + } + msg := make([]byte, msgLen) + copy(msg, s.msgBuf[:msgLen]) + s.msgBuf = s.msgBuf[msgLen:] + return msg } - msg := make([]byte, msgLen) - copy(msg, s.msgBuf[:msgLen]) - s.msgBuf = s.msgBuf[msgLen:] - return msg + + b := s.msgBuf + s.msgBuf = nil + return b } func (s *cryptoStreamImpl) Finish() error { diff --git a/vendor/github.com/quic-go/quic-go/crypto_stream_manager.go b/vendor/github.com/quic-go/quic-go/crypto_stream_manager.go index 91946acfa5..c48e238a78 100644 --- a/vendor/github.com/quic-go/quic-go/crypto_stream_manager.go +++ b/vendor/github.com/quic-go/quic-go/crypto_stream_manager.go @@ -3,12 +3,14 @@ package quic import ( "fmt" + "github.com/quic-go/quic-go/internal/handshake" "github.com/quic-go/quic-go/internal/protocol" "github.com/quic-go/quic-go/internal/wire" ) type cryptoDataHandler interface { - HandleMessage([]byte, protocol.EncryptionLevel) bool + HandleMessage([]byte, protocol.EncryptionLevel) error + NextEvent() handshake.Event } type cryptoStreamManager struct { @@ -33,7 +35,7 @@ func newCryptoStreamManager( } } -func (m *cryptoStreamManager) HandleCryptoFrame(frame *wire.CryptoFrame, encLevel protocol.EncryptionLevel) (bool /* encryption level changed */, error) { +func (m *cryptoStreamManager) HandleCryptoFrame(frame *wire.CryptoFrame, encLevel protocol.EncryptionLevel) error { var str cryptoStream //nolint:exhaustive // CRYPTO frames cannot be sent in 0-RTT packets. switch encLevel { @@ -44,18 +46,37 @@ func (m *cryptoStreamManager) HandleCryptoFrame(frame *wire.CryptoFrame, encLeve case protocol.Encryption1RTT: str = m.oneRTTStream default: - return false, fmt.Errorf("received CRYPTO frame with unexpected encryption level: %s", encLevel) + return fmt.Errorf("received CRYPTO frame with unexpected encryption level: %s", encLevel) } if err := str.HandleCryptoFrame(frame); err != nil { - return false, err + return err } for { data := str.GetCryptoData() if data == nil { - return false, nil + return nil } - if encLevelFinished := m.cryptoHandler.HandleMessage(data, encLevel); encLevelFinished { - return true, str.Finish() + if err := m.cryptoHandler.HandleMessage(data, encLevel); err != nil { + return err } } } + +func (m *cryptoStreamManager) GetPostHandshakeData(maxSize protocol.ByteCount) *wire.CryptoFrame { + if !m.oneRTTStream.HasData() { + return nil + } + return m.oneRTTStream.PopCryptoFrame(maxSize) +} + +func (m *cryptoStreamManager) Drop(encLevel protocol.EncryptionLevel) error { + //nolint:exhaustive // 1-RTT keys should never get dropped. + switch encLevel { + case protocol.EncryptionInitial: + return m.initialStream.Finish() + case protocol.EncryptionHandshake: + return m.handshakeStream.Finish() + default: + panic(fmt.Sprintf("dropped unexpected encryption level: %s", encLevel)) + } +} diff --git a/vendor/github.com/quic-go/quic-go/datagram_queue.go b/vendor/github.com/quic-go/quic-go/datagram_queue.go index 58aad3b8f1..ca80d404cb 100644 --- a/vendor/github.com/quic-go/quic-go/datagram_queue.go +++ b/vendor/github.com/quic-go/quic-go/datagram_queue.go @@ -1,6 +1,9 @@ package quic import ( + "context" + "sync" + "github.com/quic-go/quic-go/internal/protocol" "github.com/quic-go/quic-go/internal/utils" "github.com/quic-go/quic-go/internal/wire" @@ -9,7 +12,10 @@ import ( type datagramQueue struct { sendQueue chan *wire.DatagramFrame nextFrame *wire.DatagramFrame - rcvQueue chan []byte + + rcvMx sync.Mutex + rcvQueue [][]byte + rcvd chan struct{} // used to notify Receive that a new datagram was received closeErr error closed chan struct{} @@ -25,7 +31,7 @@ func newDatagramQueue(hasData func(), logger utils.Logger) *datagramQueue { return &datagramQueue{ hasData: hasData, sendQueue: make(chan *wire.DatagramFrame, 1), - rcvQueue: make(chan []byte, protocol.DatagramRcvQueueLen), + rcvd: make(chan struct{}, 1), dequeued: make(chan struct{}), closed: make(chan struct{}), logger: logger, @@ -76,20 +82,41 @@ func (h *datagramQueue) Pop() { func (h *datagramQueue) HandleDatagramFrame(f *wire.DatagramFrame) { data := make([]byte, len(f.Data)) copy(data, f.Data) - select { - case h.rcvQueue <- data: - default: + var queued bool + h.rcvMx.Lock() + if len(h.rcvQueue) < protocol.DatagramRcvQueueLen { + h.rcvQueue = append(h.rcvQueue, data) + queued = true + select { + case h.rcvd <- struct{}{}: + default: + } + } + h.rcvMx.Unlock() + if !queued && h.logger.Debug() { h.logger.Debugf("Discarding DATAGRAM frame (%d bytes payload)", len(f.Data)) } } // Receive gets a received DATAGRAM frame. -func (h *datagramQueue) Receive() ([]byte, error) { - select { - case data := <-h.rcvQueue: - return data, nil - case <-h.closed: - return nil, h.closeErr +func (h *datagramQueue) Receive(ctx context.Context) ([]byte, error) { + for { + h.rcvMx.Lock() + if len(h.rcvQueue) > 0 { + data := h.rcvQueue[0] + h.rcvQueue = h.rcvQueue[1:] + h.rcvMx.Unlock() + return data, nil + } + h.rcvMx.Unlock() + select { + case <-h.rcvd: + continue + case <-h.closed: + return nil, h.closeErr + case <-ctx.Done(): + return nil, ctx.Err() + } } } diff --git a/vendor/github.com/quic-go/quic-go/framer.go b/vendor/github.com/quic-go/quic-go/framer.go index 0b2059164a..9409af4c2e 100644 --- a/vendor/github.com/quic-go/quic-go/framer.go +++ b/vendor/github.com/quic-go/quic-go/framer.go @@ -6,6 +6,7 @@ import ( "github.com/quic-go/quic-go/internal/ackhandler" "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils/ringbuffer" "github.com/quic-go/quic-go/internal/wire" "github.com/quic-go/quic-go/quicvarint" ) @@ -14,10 +15,10 @@ type framer interface { HasData() bool QueueControlFrame(wire.Frame) - AppendControlFrames([]*ackhandler.Frame, protocol.ByteCount, protocol.VersionNumber) ([]*ackhandler.Frame, protocol.ByteCount) + AppendControlFrames([]ackhandler.Frame, protocol.ByteCount, protocol.VersionNumber) ([]ackhandler.Frame, protocol.ByteCount) AddActiveStream(protocol.StreamID) - AppendStreamFrames([]*ackhandler.Frame, protocol.ByteCount, protocol.VersionNumber) ([]*ackhandler.Frame, protocol.ByteCount) + AppendStreamFrames([]ackhandler.StreamFrame, protocol.ByteCount, protocol.VersionNumber) ([]ackhandler.StreamFrame, protocol.ByteCount) Handle0RTTRejection() error } @@ -28,7 +29,7 @@ type framerI struct { streamGetter streamGetter activeStreams map[protocol.StreamID]struct{} - streamQueue []protocol.StreamID + streamQueue ringbuffer.RingBuffer[protocol.StreamID] controlFrameMutex sync.Mutex controlFrames []wire.Frame @@ -45,7 +46,7 @@ func newFramer(streamGetter streamGetter) framer { func (f *framerI) HasData() bool { f.mutex.Lock() - hasData := len(f.streamQueue) > 0 + hasData := !f.streamQueue.Empty() f.mutex.Unlock() if hasData { return true @@ -62,7 +63,7 @@ func (f *framerI) QueueControlFrame(frame wire.Frame) { f.controlFrameMutex.Unlock() } -func (f *framerI) AppendControlFrames(frames []*ackhandler.Frame, maxLen protocol.ByteCount, v protocol.VersionNumber) ([]*ackhandler.Frame, protocol.ByteCount) { +func (f *framerI) AppendControlFrames(frames []ackhandler.Frame, maxLen protocol.ByteCount, v protocol.VersionNumber) ([]ackhandler.Frame, protocol.ByteCount) { var length protocol.ByteCount f.controlFrameMutex.Lock() for len(f.controlFrames) > 0 { @@ -71,9 +72,7 @@ func (f *framerI) AppendControlFrames(frames []*ackhandler.Frame, maxLen protoco if length+frameLen > maxLen { break } - af := ackhandler.GetFrame() - af.Frame = frame - frames = append(frames, af) + frames = append(frames, ackhandler.Frame{Frame: frame}) length += frameLen f.controlFrames = f.controlFrames[:len(f.controlFrames)-1] } @@ -84,24 +83,23 @@ func (f *framerI) AppendControlFrames(frames []*ackhandler.Frame, maxLen protoco func (f *framerI) AddActiveStream(id protocol.StreamID) { f.mutex.Lock() if _, ok := f.activeStreams[id]; !ok { - f.streamQueue = append(f.streamQueue, id) + f.streamQueue.PushBack(id) f.activeStreams[id] = struct{}{} } f.mutex.Unlock() } -func (f *framerI) AppendStreamFrames(frames []*ackhandler.Frame, maxLen protocol.ByteCount, v protocol.VersionNumber) ([]*ackhandler.Frame, protocol.ByteCount) { +func (f *framerI) AppendStreamFrames(frames []ackhandler.StreamFrame, maxLen protocol.ByteCount, v protocol.VersionNumber) ([]ackhandler.StreamFrame, protocol.ByteCount) { + startLen := len(frames) var length protocol.ByteCount - var lastFrame *ackhandler.Frame f.mutex.Lock() // pop STREAM frames, until less than MinStreamFrameSize bytes are left in the packet - numActiveStreams := len(f.streamQueue) + numActiveStreams := f.streamQueue.Len() for i := 0; i < numActiveStreams; i++ { if protocol.MinStreamFrameSize+length > maxLen { break } - id := f.streamQueue[0] - f.streamQueue = f.streamQueue[1:] + id := f.streamQueue.PopFront() // This should never return an error. Better check it anyway. // The stream will only be in the streamQueue, if it enqueued itself there. str, err := f.streamGetter.GetOrOpenSendStream(id) @@ -115,28 +113,27 @@ func (f *framerI) AppendStreamFrames(frames []*ackhandler.Frame, maxLen protocol // Therefore, we can pretend to have more bytes available when popping // the STREAM frame (which will always have the DataLen set). remainingLen += quicvarint.Len(uint64(remainingLen)) - frame, hasMoreData := str.popStreamFrame(remainingLen, v) + frame, ok, hasMoreData := str.popStreamFrame(remainingLen, v) if hasMoreData { // put the stream back in the queue (at the end) - f.streamQueue = append(f.streamQueue, id) - } else { // no more data to send. Stream is not active any more + f.streamQueue.PushBack(id) + } else { // no more data to send. Stream is not active delete(f.activeStreams, id) } - // The frame can be nil + // The frame can be "nil" // * if the receiveStream was canceled after it said it had data // * the remaining size doesn't allow us to add another STREAM frame - if frame == nil { + if !ok { continue } frames = append(frames, frame) - length += frame.Length(v) - lastFrame = frame + length += frame.Frame.Length(v) } f.mutex.Unlock() - if lastFrame != nil { - lastFrameLen := lastFrame.Length(v) + if len(frames) > startLen { + l := frames[len(frames)-1].Frame.Length(v) // account for the smaller size of the last STREAM frame - lastFrame.Frame.(*wire.StreamFrame).DataLenPresent = false - length += lastFrame.Length(v) - lastFrameLen + frames[len(frames)-1].Frame.DataLenPresent = false + length += frames[len(frames)-1].Frame.Length(v) - l } return frames, length } @@ -146,7 +143,7 @@ func (f *framerI) Handle0RTTRejection() error { defer f.mutex.Unlock() f.controlFrameMutex.Lock() - f.streamQueue = f.streamQueue[:0] + f.streamQueue.Clear() for id := range f.activeStreams { delete(f.activeStreams, id) } diff --git a/vendor/github.com/quic-go/quic-go/interface.go b/vendor/github.com/quic-go/quic-go/interface.go index e55f258e59..c3fb2b1058 100644 --- a/vendor/github.com/quic-go/quic-go/interface.go +++ b/vendor/github.com/quic-go/quic-go/interface.go @@ -2,6 +2,7 @@ package quic import ( "context" + "crypto/tls" "errors" "io" "net" @@ -19,10 +20,9 @@ type StreamID = protocol.StreamID type VersionNumber = protocol.VersionNumber const ( - // VersionDraft29 is IETF QUIC draft-29 - VersionDraft29 = protocol.VersionDraft29 // Version1 is RFC 9000 Version1 = protocol.Version1 + // Version2 is RFC 9369 Version2 = protocol.Version2 ) @@ -57,6 +57,10 @@ var ConnectionTracingKey = connTracingCtxKey{} type connTracingCtxKey struct{} +// QUICVersionContextKey can be used to find out the QUIC version of a TLS handshake from the +// context returned by tls.Config.ClientHelloInfo.Context. +var QUICVersionContextKey = handshake.QUICVersionContextKey + // Stream is the interface implemented by QUIC streams // In addition to the errors listed on the Connection, // calls to stream functions can return a StreamError if the stream is canceled. @@ -118,6 +122,8 @@ type SendStream interface { // The Context is canceled as soon as the write-side of the stream is closed. // This happens when Close() or CancelWrite() is called, or when the peer // cancels the read-side of their stream. + // The cancellation cause is set to the error that caused the stream to + // close, or `context.Canceled` in case the stream is closed without error. Context() context.Context // SetWriteDeadline sets the deadline for future Write calls // and any currently-blocked Write call. @@ -174,6 +180,8 @@ type Connection interface { // The error string will be sent to the peer. CloseWithError(ApplicationErrorCode, string) error // Context returns a context that is cancelled when the connection is closed. + // The cancellation cause is set to the error that caused the connection to + // close, or `context.Canceled` in case the listener is closed first. Context() context.Context // ConnectionState returns basic details about the QUIC connection. // Warning: This API should not be considered stable and might change soon. @@ -182,7 +190,7 @@ type Connection interface { // SendMessage sends a message as a datagram, as specified in RFC 9221. SendMessage([]byte) error // ReceiveMessage gets a message received in a datagram, as specified in RFC 9221. - ReceiveMessage() ([]byte, error) + ReceiveMessage(context.Context) ([]byte, error) } // An EarlyConnection is a connection that is handshaking. @@ -193,9 +201,10 @@ type EarlyConnection interface { Connection // HandshakeComplete blocks until the handshake completes (or fails). - // Data sent before completion of the handshake is encrypted with 1-RTT keys. - // Note that the client's identity hasn't been verified yet. - HandshakeComplete() context.Context + // For the client, data sent before completion of the handshake is encrypted with 0-RTT keys. + // For the server, data sent before completion of the handshake is encrypted with 1-RTT keys, + // however the client's identity is only verified once the handshake completes. + HandshakeComplete() <-chan struct{} NextConnection() Connection } @@ -234,21 +243,12 @@ type ConnectionIDGenerator interface { // Config contains all configuration data needed for a QUIC server or client. type Config struct { + // GetConfigForClient is called for incoming connections. + // If the error is not nil, the connection attempt is refused. + GetConfigForClient func(info *ClientHelloInfo) (*Config, error) // The QUIC versions that can be negotiated. // If not set, it uses all versions available. Versions []VersionNumber - // The length of the connection ID in bytes. - // It can be 0, or any value between 4 and 18. - // If not set, the interpretation depends on where the Config is used: - // If used for dialing an address, a 0 byte connection ID will be used. - // If used for a server, or dialing on a packet conn, a 4 byte connection ID will be used. - // When dialing on a packet conn, the ConnectionIDLength value must be the same for every Dial call. - ConnectionIDLength int - // An optional ConnectionIDGenerator to be used for ConnectionIDs generated during the lifecycle of a QUIC connection. - // The goal is to give some control on how connection IDs, which can be useful in some scenarios, in particular for servers. - // By default, if not provided, random connection IDs with the length given by ConnectionIDLength is used. - // Otherwise, if one is provided, then ConnectionIDLength is ignored. - ConnectionIDGenerator ConnectionIDGenerator // HandshakeIdleTimeout is the idle timeout before completion of the handshake. // Specifically, if we don't receive any packet from the peer within this time, the connection attempt is aborted. // If this value is zero, the timeout is set to 5 seconds. @@ -280,17 +280,21 @@ type Config struct { // If the application is consuming data quickly enough, the flow control auto-tuning algorithm // will increase the window up to MaxStreamReceiveWindow. // If this value is zero, it will default to 512 KB. + // Values larger than the maximum varint (quicvarint.Max) will be clipped to that value. InitialStreamReceiveWindow uint64 // MaxStreamReceiveWindow is the maximum stream-level flow control window for receiving data. // If this value is zero, it will default to 6 MB. + // Values larger than the maximum varint (quicvarint.Max) will be clipped to that value. MaxStreamReceiveWindow uint64 // InitialConnectionReceiveWindow is the initial size of the stream-level flow control window for receiving data. // If the application is consuming data quickly enough, the flow control auto-tuning algorithm // will increase the window up to MaxConnectionReceiveWindow. // If this value is zero, it will default to 512 KB. + // Values larger than the maximum varint (quicvarint.Max) will be clipped to that value. InitialConnectionReceiveWindow uint64 // MaxConnectionReceiveWindow is the connection-level flow control window for receiving data. // If this value is zero, it will default to 15 MB. + // Values larger than the maximum varint (quicvarint.Max) will be clipped to that value. MaxConnectionReceiveWindow uint64 // AllowConnectionWindowIncrease is called every time the connection flow controller attempts // to increase the connection flow control window. @@ -300,64 +304,51 @@ type Config struct { // in this callback. AllowConnectionWindowIncrease func(conn Connection, delta uint64) bool // MaxIncomingStreams is the maximum number of concurrent bidirectional streams that a peer is allowed to open. - // Values above 2^60 are invalid. // If not set, it will default to 100. // If set to a negative value, it doesn't allow any bidirectional streams. + // Values larger than 2^60 will be clipped to that value. MaxIncomingStreams int64 // MaxIncomingUniStreams is the maximum number of concurrent unidirectional streams that a peer is allowed to open. - // Values above 2^60 are invalid. // If not set, it will default to 100. // If set to a negative value, it doesn't allow any unidirectional streams. + // Values larger than 2^60 will be clipped to that value. MaxIncomingUniStreams int64 - // The StatelessResetKey is used to generate stateless reset tokens. - // If no key is configured, sending of stateless resets is disabled. - StatelessResetKey *StatelessResetKey // KeepAlivePeriod defines whether this peer will periodically send a packet to keep the connection alive. // If set to 0, then no keep alive is sent. Otherwise, the keep alive is sent on that period (or at most // every half of MaxIdleTimeout, whichever is smaller). KeepAlivePeriod time.Duration // DisablePathMTUDiscovery disables Path MTU Discovery (RFC 8899). - // Packets will then be at most 1252 (IPv4) / 1232 (IPv6) bytes in size. - // Note that if Path MTU discovery is causing issues on your system, please open a new issue + // This allows the sending of QUIC packets that fully utilize the available MTU of the path. + // Path MTU discovery is only available on systems that allow setting of the Don't Fragment (DF) bit. + // If unavailable or disabled, packets will be at most 1252 (IPv4) / 1232 (IPv6) bytes in size. DisablePathMTUDiscovery bool // DisableVersionNegotiationPackets disables the sending of Version Negotiation packets. // This can be useful if version information is exchanged out-of-band. // It has no effect for a client. DisableVersionNegotiationPackets bool // Allow0RTT allows the application to decide if a 0-RTT connection attempt should be accepted. - // When set, 0-RTT is enabled. When not set, 0-RTT is disabled. // Only valid for the server. - // Warning: This API should not be considered stable and might change soon. - Allow0RTT func(net.Addr) bool + Allow0RTT bool // Enable QUIC datagram support (RFC 9221). EnableDatagrams bool - Tracer logging.Tracer + Tracer func(context.Context, logging.Perspective, ConnectionID) logging.ConnectionTracer +} + +type ClientHelloInfo struct { + RemoteAddr net.Addr } // ConnectionState records basic details about a QUIC connection type ConnectionState struct { - TLS handshake.ConnectionState + // TLS contains information about the TLS connection state, incl. the tls.ConnectionState. + TLS tls.ConnectionState + // SupportsDatagrams says if support for QUIC datagrams (RFC 9221) was negotiated. + // This requires both nodes to support and enable the datagram extensions (via Config.EnableDatagrams). + // If datagram support was negotiated, datagrams can be sent and received using the + // SendMessage and ReceiveMessage methods on the Connection. SupportsDatagrams bool - Version VersionNumber -} - -// A Listener for incoming QUIC connections -type Listener interface { - // Close the server. All active connections will be closed. - Close() error - // Addr returns the local network addr that the server is listening on. - Addr() net.Addr - // Accept returns new connections. It should be called in a loop. - Accept(context.Context) (Connection, error) -} - -// An EarlyListener listens for incoming QUIC connections, -// and returns them before the handshake completes. -type EarlyListener interface { - // Close the server. All active connections will be closed. - Close() error - // Addr returns the local network addr that the server is listening on. - Addr() net.Addr - // Accept returns new early connections. It should be called in a loop. - Accept(context.Context) (EarlyConnection, error) + // Used0RTT says if 0-RTT resumption was used. + Used0RTT bool + // Version is the QUIC version of the QUIC connection. + Version VersionNumber } diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/ack_eliciting.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/ack_eliciting.go index 4bab419013..34506b12e0 100644 --- a/vendor/github.com/quic-go/quic-go/internal/ackhandler/ack_eliciting.go +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/ack_eliciting.go @@ -10,7 +10,7 @@ func IsFrameAckEliciting(f wire.Frame) bool { } // HasAckElicitingFrames returns true if at least one frame is ack-eliciting. -func HasAckElicitingFrames(fs []*Frame) bool { +func HasAckElicitingFrames(fs []Frame) bool { for _, f := range fs { if IsFrameAckEliciting(f.Frame) { return true diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/frame.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/frame.go index deb23cfcb1..e03a8080ce 100644 --- a/vendor/github.com/quic-go/quic-go/internal/ackhandler/frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/frame.go @@ -1,29 +1,21 @@ package ackhandler import ( - "sync" - "github.com/quic-go/quic-go/internal/wire" ) -type Frame struct { - wire.Frame // nil if the frame has already been acknowledged in another packet - OnLost func(wire.Frame) - OnAcked func(wire.Frame) +// FrameHandler handles the acknowledgement and the loss of a frame. +type FrameHandler interface { + OnAcked(wire.Frame) + OnLost(wire.Frame) } -var framePool = sync.Pool{New: func() any { return &Frame{} }} - -func GetFrame() *Frame { - f := framePool.Get().(*Frame) - f.OnLost = nil - f.OnAcked = nil - return f +type Frame struct { + Frame wire.Frame // nil if the frame has already been acknowledged in another packet + Handler FrameHandler } -func putFrame(f *Frame) { - f.Frame = nil - f.OnLost = nil - f.OnAcked = nil - framePool.Put(f) +type StreamFrame struct { + Frame *wire.StreamFrame + Handler FrameHandler } diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/interfaces.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/interfaces.go index 5924f84bda..ba95f8a9b1 100644 --- a/vendor/github.com/quic-go/quic-go/internal/ackhandler/interfaces.go +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/interfaces.go @@ -10,20 +10,20 @@ import ( // SentPacketHandler handles ACKs received for outgoing packets type SentPacketHandler interface { // SentPacket may modify the packet - SentPacket(packet *Packet) - ReceivedAck(ackFrame *wire.AckFrame, encLevel protocol.EncryptionLevel, recvTime time.Time) (bool /* 1-RTT packet acked */, error) + SentPacket(t time.Time, pn, largestAcked protocol.PacketNumber, streamFrames []StreamFrame, frames []Frame, encLevel protocol.EncryptionLevel, size protocol.ByteCount, isPathMTUProbePacket bool) + // ReceivedAck processes an ACK frame. + // It does not store a copy of the frame. + ReceivedAck(f *wire.AckFrame, encLevel protocol.EncryptionLevel, recvTime time.Time) (bool /* 1-RTT packet acked */, error) ReceivedBytes(protocol.ByteCount) DropPackets(protocol.EncryptionLevel) ResetForRetry() error SetHandshakeConfirmed() // The SendMode determines if and what kind of packets can be sent. - SendMode() SendMode + SendMode(now time.Time) SendMode // TimeUntilSend is the time when the next packet should be sent. // It is used for pacing packets. TimeUntilSend() time.Time - // HasPacingBudget says if the pacer allows sending of a (full size) packet at this moment. - HasPacingBudget() bool SetMaxDatagramSize(count protocol.ByteCount) // only to be called once the handshake is complete diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/mockgen.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/mockgen.go index 366e5520da..d61783671b 100644 --- a/vendor/github.com/quic-go/quic-go/internal/ackhandler/mockgen.go +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/mockgen.go @@ -1,3 +1,6 @@ +//go:build gomock || generate + package ackhandler -//go:generate sh -c "../../mockgen_private.sh ackhandler mock_sent_packet_tracker_test.go github.com/quic-go/quic-go/internal/ackhandler sentPacketTracker" +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package ackhandler -destination mock_sent_packet_tracker_test.go github.com/quic-go/quic-go/internal/ackhandler SentPacketTracker" +type SentPacketTracker = sentPacketTracker diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet.go index 394ee40a98..5f43689b59 100644 --- a/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet.go +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet.go @@ -8,13 +8,14 @@ import ( ) // A Packet is a packet -type Packet struct { +type packet struct { + SendTime time.Time PacketNumber protocol.PacketNumber - Frames []*Frame + StreamFrames []StreamFrame + Frames []Frame LargestAcked protocol.PacketNumber // InvalidPacketNumber if the packet doesn't contain an ACK Length protocol.ByteCount EncryptionLevel protocol.EncryptionLevel - SendTime time.Time IsPathMTUProbePacket bool // We don't report the loss of Path MTU probe packets to the congestion controller. @@ -23,15 +24,16 @@ type Packet struct { skippedPacket bool } -func (p *Packet) outstanding() bool { +func (p *packet) outstanding() bool { return !p.declaredLost && !p.skippedPacket && !p.IsPathMTUProbePacket } -var packetPool = sync.Pool{New: func() any { return &Packet{} }} +var packetPool = sync.Pool{New: func() any { return &packet{} }} -func GetPacket() *Packet { - p := packetPool.Get().(*Packet) +func getPacket() *packet { + p := packetPool.Get().(*packet) p.PacketNumber = 0 + p.StreamFrames = nil p.Frames = nil p.LargestAcked = 0 p.Length = 0 @@ -46,10 +48,8 @@ func GetPacket() *Packet { // We currently only return Packets back into the pool when they're acknowledged (not when they're lost). // This simplifies the code, and gives the vast majority of the performance benefit we can gain from using the pool. -func putPacket(p *Packet) { - for _, f := range p.Frames { - putFrame(f) - } +func putPacket(p *packet) { p.Frames = nil + p.StreamFrames = nil packetPool.Put(p) } diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet_number_generator.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet_number_generator.go index 9cf20a0b00..e84171e3cd 100644 --- a/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet_number_generator.go +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet_number_generator.go @@ -7,7 +7,10 @@ import ( type packetNumberGenerator interface { Peek() protocol.PacketNumber - Pop() protocol.PacketNumber + // Pop pops the packet number. + // It reports if the packet number (before the one just popped) was skipped. + // It never skips more than one packet number in a row. + Pop() (skipped bool, _ protocol.PacketNumber) } type sequentialPacketNumberGenerator struct { @@ -24,10 +27,10 @@ func (p *sequentialPacketNumberGenerator) Peek() protocol.PacketNumber { return p.next } -func (p *sequentialPacketNumberGenerator) Pop() protocol.PacketNumber { +func (p *sequentialPacketNumberGenerator) Pop() (bool, protocol.PacketNumber) { next := p.next p.next++ - return next + return false, next } // The skippingPacketNumberGenerator generates the packet number for the next packet @@ -56,21 +59,26 @@ func newSkippingPacketNumberGenerator(initial, initialPeriod, maxPeriod protocol } func (p *skippingPacketNumberGenerator) Peek() protocol.PacketNumber { + if p.next == p.nextToSkip { + return p.next + 1 + } return p.next } -func (p *skippingPacketNumberGenerator) Pop() protocol.PacketNumber { +func (p *skippingPacketNumberGenerator) Pop() (bool, protocol.PacketNumber) { next := p.next - p.next++ // generate a new packet number for the next packet if p.next == p.nextToSkip { - p.next++ + next++ + p.next += 2 p.generateNewSkip() + return true, next } - return next + p.next++ // generate a new packet number for the next packet + return false, next } func (p *skippingPacketNumberGenerator) generateNewSkip() { // make sure that there are never two consecutive packet numbers that are skipped - p.nextToSkip = p.next + 2 + protocol.PacketNumber(p.rng.Int31n(int32(2*p.period))) + p.nextToSkip = p.next + 3 + protocol.PacketNumber(p.rng.Int31n(int32(2*p.period))) p.period = utils.Min(2*p.period, p.maxPeriod) } diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_handler.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_handler.go index 3675694f4f..e11ee1eeb9 100644 --- a/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_handler.go +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_handler.go @@ -47,6 +47,11 @@ func (h *receivedPacketHandler) ReceivedPacket( case protocol.EncryptionInitial: return h.initialPackets.ReceivedPacket(pn, ecn, rcvTime, shouldInstigateAck) case protocol.EncryptionHandshake: + // The Handshake packet number space might already have been dropped as a result + // of processing the CRYPTO frame that was contained in this packet. + if h.handshakePackets == nil { + return nil + } return h.handshakePackets.ReceivedPacket(pn, ecn, rcvTime, shouldInstigateAck) case protocol.Encryption0RTT: if h.lowest1RTTPacket != protocol.InvalidPacketNumber && pn > h.lowest1RTTPacket { diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_tracker.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_tracker.go index 7132ccaade..b188386631 100644 --- a/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_tracker.go +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_tracker.go @@ -169,16 +169,18 @@ func (h *receivedPacketTracker) GetAckFrame(onlyIfQueued bool) *wire.AckFrame { } } - ack := wire.GetAckFrame() + // This function always returns the same ACK frame struct, filled with the most recent values. + ack := h.lastAck + if ack == nil { + ack = &wire.AckFrame{} + } + ack.Reset() ack.DelayTime = utils.Max(0, now.Sub(h.largestObservedReceivedTime)) ack.ECT0 = h.ect0 ack.ECT1 = h.ect1 ack.ECNCE = h.ecnce ack.AckRanges = h.packetHistory.AppendAckRanges(ack.AckRanges) - if h.lastAck != nil { - wire.PutAckFrame(h.lastAck) - } h.lastAck = ack h.ackAlarm = time.Time{} h.ackQueued = false diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/send_mode.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/send_mode.go index 3d5fe560fc..c03f3a6f05 100644 --- a/vendor/github.com/quic-go/quic-go/internal/ackhandler/send_mode.go +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/send_mode.go @@ -16,6 +16,10 @@ const ( SendPTOHandshake // SendPTOAppData means that an Application data probe packet should be sent SendPTOAppData + // SendPacingLimited means that the pacer doesn't allow sending of a packet right now, + // but will do in a little while. + // The timestamp when sending is allowed again can be obtained via the SentPacketHandler.TimeUntilSend. + SendPacingLimited // SendAny means that any packet should be sent SendAny ) @@ -34,6 +38,8 @@ func (s SendMode) String() string { return "pto (Application Data)" case SendAny: return "any" + case SendPacingLimited: + return "pacing limited" default: return fmt.Sprintf("invalid send mode: %d", s) } diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_handler.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_handler.go index 732bbc3a1d..c955da6e97 100644 --- a/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_handler.go +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_handler.go @@ -38,7 +38,7 @@ type packetNumberSpace struct { largestSent protocol.PacketNumber } -func newPacketNumberSpace(initialPN protocol.PacketNumber, skipPNs bool, rttStats *utils.RTTStats) *packetNumberSpace { +func newPacketNumberSpace(initialPN protocol.PacketNumber, skipPNs bool) *packetNumberSpace { var pns packetNumberGenerator if skipPNs { pns = newSkippingPacketNumberGenerator(initialPN, protocol.SkipPacketInitialPeriod, protocol.SkipPacketMaxPeriod) @@ -46,7 +46,7 @@ func newPacketNumberSpace(initialPN protocol.PacketNumber, skipPNs bool, rttStat pns = newSequentialPacketNumberGenerator(initialPN) } return &packetNumberSpace{ - history: newSentPacketHistory(rttStats), + history: newSentPacketHistory(), pns: pns, largestSent: protocol.InvalidPacketNumber, largestAcked: protocol.InvalidPacketNumber, @@ -75,7 +75,7 @@ type sentPacketHandler struct { // Only applies to the application-data packet number space. lowestNotConfirmedAcked protocol.PacketNumber - ackedPackets []*Packet // to avoid allocations in detectAndRemoveAckedPackets + ackedPackets []*packet // to avoid allocations in detectAndRemoveAckedPackets bytesInFlight protocol.ByteCount @@ -125,9 +125,9 @@ func newSentPacketHandler( return &sentPacketHandler{ peerCompletedAddressValidation: pers == protocol.PerspectiveServer, peerAddressValidated: pers == protocol.PerspectiveClient || clientAddressValidated, - initialPackets: newPacketNumberSpace(initialPN, false, rttStats), - handshakePackets: newPacketNumberSpace(0, false, rttStats), - appDataPackets: newPacketNumberSpace(0, true, rttStats), + initialPackets: newPacketNumberSpace(initialPN, false), + handshakePackets: newPacketNumberSpace(0, false), + appDataPackets: newPacketNumberSpace(0, true), rttStats: rttStats, congestion: congestion, perspective: pers, @@ -136,17 +136,7 @@ func newSentPacketHandler( } } -func (h *sentPacketHandler) DropPackets(encLevel protocol.EncryptionLevel) { - if h.perspective == protocol.PerspectiveClient && encLevel == protocol.EncryptionInitial { - // This function is called when the crypto setup seals a Handshake packet. - // If this Handshake packet is coalesced behind an Initial packet, we would drop the Initial packet number space - // before SentPacket() was called for that Initial packet. - return - } - h.dropPackets(encLevel) -} - -func (h *sentPacketHandler) removeFromBytesInFlight(p *Packet) { +func (h *sentPacketHandler) removeFromBytesInFlight(p *packet) { if p.includedInBytesInFlight { if p.Length > h.bytesInFlight { panic("negative bytes_in_flight") @@ -156,7 +146,7 @@ func (h *sentPacketHandler) removeFromBytesInFlight(p *Packet) { } } -func (h *sentPacketHandler) dropPackets(encLevel protocol.EncryptionLevel) { +func (h *sentPacketHandler) DropPackets(encLevel protocol.EncryptionLevel) { // The server won't await address validation after the handshake is confirmed. // This applies even if we didn't receive an ACK for a Handshake packet. if h.perspective == protocol.PerspectiveClient && encLevel == protocol.EncryptionHandshake { @@ -165,7 +155,11 @@ func (h *sentPacketHandler) dropPackets(encLevel protocol.EncryptionLevel) { // remove outstanding packets from bytes_in_flight if encLevel == protocol.EncryptionInitial || encLevel == protocol.EncryptionHandshake { pnSpace := h.getPacketNumberSpace(encLevel) - pnSpace.history.Iterate(func(p *Packet) (bool, error) { + // We might already have dropped this packet number space. + if pnSpace == nil { + return + } + pnSpace.history.Iterate(func(p *packet) (bool, error) { h.removeFromBytesInFlight(p) return true, nil }) @@ -182,8 +176,8 @@ func (h *sentPacketHandler) dropPackets(encLevel protocol.EncryptionLevel) { // and not when the client drops 0-RTT keys when the handshake completes. // When 0-RTT is rejected, all application data sent so far becomes invalid. // Delete the packets from the history and remove them from bytes_in_flight. - h.appDataPackets.history.Iterate(func(p *Packet) (bool, error) { - if p.EncryptionLevel != protocol.Encryption0RTT { + h.appDataPackets.history.Iterate(func(p *packet) (bool, error) { + if p.EncryptionLevel != protocol.Encryption0RTT && !p.skippedPacket { return false, nil } h.removeFromBytesInFlight(p) @@ -228,26 +222,60 @@ func (h *sentPacketHandler) packetsInFlight() int { return packetsInFlight } -func (h *sentPacketHandler) SentPacket(p *Packet) { - h.bytesSent += p.Length - // For the client, drop the Initial packet number space when the first Handshake packet is sent. - if h.perspective == protocol.PerspectiveClient && p.EncryptionLevel == protocol.EncryptionHandshake && h.initialPackets != nil { - h.dropPackets(protocol.EncryptionInitial) +func (h *sentPacketHandler) SentPacket( + t time.Time, + pn, largestAcked protocol.PacketNumber, + streamFrames []StreamFrame, + frames []Frame, + encLevel protocol.EncryptionLevel, + size protocol.ByteCount, + isPathMTUProbePacket bool, +) { + h.bytesSent += size + + pnSpace := h.getPacketNumberSpace(encLevel) + if h.logger.Debug() && pnSpace.history.HasOutstandingPackets() { + for p := utils.Max(0, pnSpace.largestSent+1); p < pn; p++ { + h.logger.Debugf("Skipping packet number %d", p) + } } - isAckEliciting := h.sentPacketImpl(p) + + pnSpace.largestSent = pn + isAckEliciting := len(streamFrames) > 0 || len(frames) > 0 + if isAckEliciting { - h.getPacketNumberSpace(p.EncryptionLevel).history.SentAckElicitingPacket(p) - } else { - h.getPacketNumberSpace(p.EncryptionLevel).history.SentNonAckElicitingPacket(p.PacketNumber, p.EncryptionLevel, p.SendTime) - putPacket(p) - p = nil //nolint:ineffassign // This is just to be on the safe side. + pnSpace.lastAckElicitingPacketTime = t + h.bytesInFlight += size + if h.numProbesToSend > 0 { + h.numProbesToSend-- + } } - if h.tracer != nil && isAckEliciting { - h.tracer.UpdatedMetrics(h.rttStats, h.congestion.GetCongestionWindow(), h.bytesInFlight, h.packetsInFlight()) + h.congestion.OnPacketSent(t, h.bytesInFlight, pn, size, isAckEliciting) + + if !isAckEliciting { + pnSpace.history.SentNonAckElicitingPacket(pn) + if !h.peerCompletedAddressValidation { + h.setLossDetectionTimer() + } + return } - if isAckEliciting || !h.peerCompletedAddressValidation { - h.setLossDetectionTimer() + + p := getPacket() + p.SendTime = t + p.PacketNumber = pn + p.EncryptionLevel = encLevel + p.Length = size + p.LargestAcked = largestAcked + p.StreamFrames = streamFrames + p.Frames = frames + p.IsPathMTUProbePacket = isPathMTUProbePacket + p.includedInBytesInFlight = true + + pnSpace.history.SentAckElicitingPacket(p) + if h.tracer != nil { + h.tracer.UpdatedMetrics(h.rttStats, h.congestion.GetCongestionWindow(), h.bytesInFlight, h.packetsInFlight()) } + h.setLossDetectionTimer() } func (h *sentPacketHandler) getPacketNumberSpace(encLevel protocol.EncryptionLevel) *packetNumberSpace { @@ -263,31 +291,6 @@ func (h *sentPacketHandler) getPacketNumberSpace(encLevel protocol.EncryptionLev } } -func (h *sentPacketHandler) sentPacketImpl(packet *Packet) bool /* is ack-eliciting */ { - pnSpace := h.getPacketNumberSpace(packet.EncryptionLevel) - - if h.logger.Debug() && pnSpace.history.HasOutstandingPackets() { - for p := utils.Max(0, pnSpace.largestSent+1); p < packet.PacketNumber; p++ { - h.logger.Debugf("Skipping packet number %d", p) - } - } - - pnSpace.largestSent = packet.PacketNumber - isAckEliciting := len(packet.Frames) > 0 - - if isAckEliciting { - pnSpace.lastAckElicitingPacketTime = packet.SendTime - packet.includedInBytesInFlight = true - h.bytesInFlight += packet.Length - if h.numProbesToSend > 0 { - h.numProbesToSend-- - } - } - h.congestion.OnPacketSent(packet.SendTime, h.bytesInFlight, packet.PacketNumber, packet.Length, isAckEliciting) - - return isAckEliciting -} - func (h *sentPacketHandler) ReceivedAck(ack *wire.AckFrame, encLevel protocol.EncryptionLevel, rcvTime time.Time) (bool /* contained 1-RTT packet */, error) { pnSpace := h.getPacketNumberSpace(encLevel) @@ -361,7 +364,6 @@ func (h *sentPacketHandler) ReceivedAck(ack *wire.AckFrame, encLevel protocol.En h.tracer.UpdatedMetrics(h.rttStats, h.congestion.GetCongestionWindow(), h.bytesInFlight, h.packetsInFlight()) } - pnSpace.history.DeleteOldPackets(rcvTime) h.setLossDetectionTimer() return acked1RTTPacket, nil } @@ -371,13 +373,13 @@ func (h *sentPacketHandler) GetLowestPacketNotConfirmedAcked() protocol.PacketNu } // Packets are returned in ascending packet number order. -func (h *sentPacketHandler) detectAndRemoveAckedPackets(ack *wire.AckFrame, encLevel protocol.EncryptionLevel) ([]*Packet, error) { +func (h *sentPacketHandler) detectAndRemoveAckedPackets(ack *wire.AckFrame, encLevel protocol.EncryptionLevel) ([]*packet, error) { pnSpace := h.getPacketNumberSpace(encLevel) h.ackedPackets = h.ackedPackets[:0] ackRangeIndex := 0 lowestAcked := ack.LowestAcked() largestAcked := ack.LargestAcked() - err := pnSpace.history.Iterate(func(p *Packet) (bool, error) { + err := pnSpace.history.Iterate(func(p *packet) (bool, error) { // Ignore packets below the lowest acked if p.PacketNumber < lowestAcked { return true, nil @@ -425,8 +427,13 @@ func (h *sentPacketHandler) detectAndRemoveAckedPackets(ack *wire.AckFrame, encL } for _, f := range p.Frames { - if f.OnAcked != nil { - f.OnAcked(f.Frame) + if f.Handler != nil { + f.Handler.OnAcked(f.Frame) + } + } + for _, f := range p.StreamFrames { + if f.Handler != nil { + f.Handler.OnAcked(f.Frame) } } if err := pnSpace.history.Remove(p.PacketNumber); err != nil { @@ -587,30 +594,31 @@ func (h *sentPacketHandler) detectLostPackets(now time.Time, encLevel protocol.E lostSendTime := now.Add(-lossDelay) priorInFlight := h.bytesInFlight - return pnSpace.history.Iterate(func(p *Packet) (bool, error) { + return pnSpace.history.Iterate(func(p *packet) (bool, error) { if p.PacketNumber > pnSpace.largestAcked { return false, nil } - if p.declaredLost || p.skippedPacket { - return true, nil - } var packetLost bool if p.SendTime.Before(lostSendTime) { packetLost = true - if h.logger.Debug() { - h.logger.Debugf("\tlost packet %d (time threshold)", p.PacketNumber) - } - if h.tracer != nil { - h.tracer.LostPacket(p.EncryptionLevel, p.PacketNumber, logging.PacketLossTimeThreshold) + if !p.skippedPacket { + if h.logger.Debug() { + h.logger.Debugf("\tlost packet %d (time threshold)", p.PacketNumber) + } + if h.tracer != nil { + h.tracer.LostPacket(p.EncryptionLevel, p.PacketNumber, logging.PacketLossTimeThreshold) + } } } else if pnSpace.largestAcked >= p.PacketNumber+packetThreshold { packetLost = true - if h.logger.Debug() { - h.logger.Debugf("\tlost packet %d (reordering threshold)", p.PacketNumber) - } - if h.tracer != nil { - h.tracer.LostPacket(p.EncryptionLevel, p.PacketNumber, logging.PacketLossReorderingThreshold) + if !p.skippedPacket { + if h.logger.Debug() { + h.logger.Debugf("\tlost packet %d (reordering threshold)", p.PacketNumber) + } + if h.tracer != nil { + h.tracer.LostPacket(p.EncryptionLevel, p.PacketNumber, logging.PacketLossReorderingThreshold) + } } } else if pnSpace.lossTime.IsZero() { // Note: This conditional is only entered once per call @@ -621,12 +629,14 @@ func (h *sentPacketHandler) detectLostPackets(now time.Time, encLevel protocol.E pnSpace.lossTime = lossTime } if packetLost { - p = pnSpace.history.DeclareLost(p) - // the bytes in flight need to be reduced no matter if the frames in this packet will be retransmitted - h.removeFromBytesInFlight(p) - h.queueFramesForRetransmission(p) - if !p.IsPathMTUProbePacket { - h.congestion.OnPacketLost(p.PacketNumber, p.Length, priorInFlight) + pnSpace.history.DeclareLost(p.PacketNumber) + if !p.skippedPacket { + // the bytes in flight need to be reduced no matter if the frames in this packet will be retransmitted + h.removeFromBytesInFlight(p) + h.queueFramesForRetransmission(p) + if !p.IsPathMTUProbePacket { + h.congestion.OnPacketLost(p.PacketNumber, p.Length, priorInFlight) + } } } return true, nil @@ -689,7 +699,8 @@ func (h *sentPacketHandler) OnLossDetectionTimeout() error { h.ptoMode = SendPTOHandshake case protocol.Encryption1RTT: // skip a packet number in order to elicit an immediate ACK - _ = h.PopPacketNumber(protocol.Encryption1RTT) + pn := h.PopPacketNumber(protocol.Encryption1RTT) + h.getPacketNumberSpace(protocol.Encryption1RTT).history.SkippedPacket(pn) h.ptoMode = SendPTOAppData default: return fmt.Errorf("PTO timer in unexpected encryption level: %s", encLevel) @@ -703,23 +714,25 @@ func (h *sentPacketHandler) GetLossDetectionTimeout() time.Time { func (h *sentPacketHandler) PeekPacketNumber(encLevel protocol.EncryptionLevel) (protocol.PacketNumber, protocol.PacketNumberLen) { pnSpace := h.getPacketNumberSpace(encLevel) - - var lowestUnacked protocol.PacketNumber - if p := pnSpace.history.FirstOutstanding(); p != nil { - lowestUnacked = p.PacketNumber - } else { - lowestUnacked = pnSpace.largestAcked + 1 - } - pn := pnSpace.pns.Peek() - return pn, protocol.GetPacketNumberLengthForHeader(pn, lowestUnacked) + // See section 17.1 of RFC 9000. + return pn, protocol.GetPacketNumberLengthForHeader(pn, pnSpace.largestAcked) } func (h *sentPacketHandler) PopPacketNumber(encLevel protocol.EncryptionLevel) protocol.PacketNumber { - return h.getPacketNumberSpace(encLevel).pns.Pop() + pnSpace := h.getPacketNumberSpace(encLevel) + skipped, pn := pnSpace.pns.Pop() + if skipped { + skippedPN := pn - 1 + pnSpace.history.SkippedPacket(skippedPN) + if h.logger.Debug() { + h.logger.Debugf("Skipping packet number %d", skippedPN) + } + } + return pn } -func (h *sentPacketHandler) SendMode() SendMode { +func (h *sentPacketHandler) SendMode(now time.Time) SendMode { numTrackedPackets := h.appDataPackets.history.Len() if h.initialPackets != nil { numTrackedPackets += h.initialPackets.history.Len() @@ -758,6 +771,9 @@ func (h *sentPacketHandler) SendMode() SendMode { } return SendAck } + if !h.congestion.HasPacingBudget(now) { + return SendPacingLimited + } return SendAny } @@ -765,10 +781,6 @@ func (h *sentPacketHandler) TimeUntilSend() time.Time { return h.congestion.TimeUntilSend(h.bytesInFlight) } -func (h *sentPacketHandler) HasPacingBudget() bool { - return h.congestion.HasPacingBudget() -} - func (h *sentPacketHandler) SetMaxDatagramSize(s protocol.ByteCount) { h.congestion.SetMaxDatagramSize(s) } @@ -790,24 +802,32 @@ func (h *sentPacketHandler) QueueProbePacket(encLevel protocol.EncryptionLevel) // TODO: don't declare the packet lost here. // Keep track of acknowledged frames instead. h.removeFromBytesInFlight(p) - pnSpace.history.DeclareLost(p) + pnSpace.history.DeclareLost(p.PacketNumber) return true } -func (h *sentPacketHandler) queueFramesForRetransmission(p *Packet) { - if len(p.Frames) == 0 { +func (h *sentPacketHandler) queueFramesForRetransmission(p *packet) { + if len(p.Frames) == 0 && len(p.StreamFrames) == 0 { panic("no frames") } for _, f := range p.Frames { - f.OnLost(f.Frame) + if f.Handler != nil { + f.Handler.OnLost(f.Frame) + } + } + for _, f := range p.StreamFrames { + if f.Handler != nil { + f.Handler.OnLost(f.Frame) + } } + p.StreamFrames = nil p.Frames = nil } func (h *sentPacketHandler) ResetForRetry() error { h.bytesInFlight = 0 var firstPacketSendTime time.Time - h.initialPackets.history.Iterate(func(p *Packet) (bool, error) { + h.initialPackets.history.Iterate(func(p *packet) (bool, error) { if firstPacketSendTime.IsZero() { firstPacketSendTime = p.SendTime } @@ -819,7 +839,7 @@ func (h *sentPacketHandler) ResetForRetry() error { }) // All application data packets sent at this point are 0-RTT packets. // In the case of a Retry, we can assume that the server dropped all of them. - h.appDataPackets.history.Iterate(func(p *Packet) (bool, error) { + h.appDataPackets.history.Iterate(func(p *packet) (bool, error) { if !p.declaredLost && !p.skippedPacket { h.queueFramesForRetransmission(p) } @@ -839,8 +859,8 @@ func (h *sentPacketHandler) ResetForRetry() error { h.tracer.UpdatedMetrics(h.rttStats, h.congestion.GetCongestionWindow(), h.bytesInFlight, h.packetsInFlight()) } } - h.initialPackets = newPacketNumberSpace(h.initialPackets.pns.Pop(), false, h.rttStats) - h.appDataPackets = newPacketNumberSpace(h.appDataPackets.pns.Pop(), true, h.rttStats) + h.initialPackets = newPacketNumberSpace(h.initialPackets.pns.Peek(), false) + h.appDataPackets = newPacketNumberSpace(h.appDataPackets.pns.Peek(), true) oldAlarm := h.alarm h.alarm = time.Time{} if h.tracer != nil { @@ -854,6 +874,12 @@ func (h *sentPacketHandler) ResetForRetry() error { } func (h *sentPacketHandler) SetHandshakeConfirmed() { + if h.initialPackets != nil { + panic("didn't drop initial correctly") + } + if h.handshakePackets != nil { + panic("didn't drop handshake correctly") + } h.handshakeConfirmed = true // We don't send PTOs for application data packets before the handshake completes. // Make sure the timer is armed now, if necessary. diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_history.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_history.go index 0647839914..c14c0f49ba 100644 --- a/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_history.go +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_history.go @@ -2,162 +2,176 @@ package ackhandler import ( "fmt" - "sync" - "time" "github.com/quic-go/quic-go/internal/protocol" - "github.com/quic-go/quic-go/internal/utils" - list "github.com/quic-go/quic-go/internal/utils/linkedlist" ) type sentPacketHistory struct { - rttStats *utils.RTTStats - outstandingPacketList *list.List[*Packet] - etcPacketList *list.List[*Packet] - packetMap map[protocol.PacketNumber]*list.Element[*Packet] - highestSent protocol.PacketNumber -} + packets []*packet -var packetElementPool sync.Pool + numOutstanding int -func init() { - packetElementPool = *list.NewPool[*Packet]() + highestPacketNumber protocol.PacketNumber } -func newSentPacketHistory(rttStats *utils.RTTStats) *sentPacketHistory { +func newSentPacketHistory() *sentPacketHistory { return &sentPacketHistory{ - rttStats: rttStats, - outstandingPacketList: list.NewWithPool[*Packet](&packetElementPool), - etcPacketList: list.NewWithPool[*Packet](&packetElementPool), - packetMap: make(map[protocol.PacketNumber]*list.Element[*Packet]), - highestSent: protocol.InvalidPacketNumber, + packets: make([]*packet, 0, 32), + highestPacketNumber: protocol.InvalidPacketNumber, } } -func (h *sentPacketHistory) SentNonAckElicitingPacket(pn protocol.PacketNumber, encLevel protocol.EncryptionLevel, t time.Time) { - h.registerSentPacket(pn, encLevel, t) +func (h *sentPacketHistory) checkSequentialPacketNumberUse(pn protocol.PacketNumber) { + if h.highestPacketNumber != protocol.InvalidPacketNumber { + if pn != h.highestPacketNumber+1 { + panic("non-sequential packet number use") + } + } } -func (h *sentPacketHistory) SentAckElicitingPacket(p *Packet) { - h.registerSentPacket(p.PacketNumber, p.EncryptionLevel, p.SendTime) +func (h *sentPacketHistory) SkippedPacket(pn protocol.PacketNumber) { + h.checkSequentialPacketNumberUse(pn) + h.highestPacketNumber = pn + h.packets = append(h.packets, &packet{ + PacketNumber: pn, + skippedPacket: true, + }) +} - var el *list.Element[*Packet] - if p.outstanding() { - el = h.outstandingPacketList.PushBack(p) - } else { - el = h.etcPacketList.PushBack(p) +func (h *sentPacketHistory) SentNonAckElicitingPacket(pn protocol.PacketNumber) { + h.checkSequentialPacketNumberUse(pn) + h.highestPacketNumber = pn + if len(h.packets) > 0 { + h.packets = append(h.packets, nil) } - h.packetMap[p.PacketNumber] = el } -func (h *sentPacketHistory) registerSentPacket(pn protocol.PacketNumber, encLevel protocol.EncryptionLevel, t time.Time) { - if pn <= h.highestSent { - panic("non-sequential packet number use") - } - // Skipped packet numbers. - for p := h.highestSent + 1; p < pn; p++ { - el := h.etcPacketList.PushBack(&Packet{ - PacketNumber: p, - EncryptionLevel: encLevel, - SendTime: t, - skippedPacket: true, - }) - h.packetMap[p] = el - } - h.highestSent = pn +func (h *sentPacketHistory) SentAckElicitingPacket(p *packet) { + h.checkSequentialPacketNumberUse(p.PacketNumber) + h.highestPacketNumber = p.PacketNumber + h.packets = append(h.packets, p) + if p.outstanding() { + h.numOutstanding++ + } } // Iterate iterates through all packets. -func (h *sentPacketHistory) Iterate(cb func(*Packet) (cont bool, err error)) error { - cont := true - outstandingEl := h.outstandingPacketList.Front() - etcEl := h.etcPacketList.Front() - var el *list.Element[*Packet] - // whichever has the next packet number is returned first - for cont { - if outstandingEl == nil || (etcEl != nil && etcEl.Value.PacketNumber < outstandingEl.Value.PacketNumber) { - el = etcEl - } else { - el = outstandingEl - } - if el == nil { - return nil +func (h *sentPacketHistory) Iterate(cb func(*packet) (cont bool, err error)) error { + for _, p := range h.packets { + if p == nil { + continue } - if el == outstandingEl { - outstandingEl = outstandingEl.Next() - } else { - etcEl = etcEl.Next() - } - var err error - cont, err = cb(el.Value) + cont, err := cb(p) if err != nil { return err } + if !cont { + return nil + } } return nil } // FirstOutstanding returns the first outstanding packet. -func (h *sentPacketHistory) FirstOutstanding() *Packet { - el := h.outstandingPacketList.Front() - if el == nil { +func (h *sentPacketHistory) FirstOutstanding() *packet { + if !h.HasOutstandingPackets() { return nil } - return el.Value + for _, p := range h.packets { + if p != nil && p.outstanding() { + return p + } + } + return nil } func (h *sentPacketHistory) Len() int { - return len(h.packetMap) + return len(h.packets) } -func (h *sentPacketHistory) Remove(p protocol.PacketNumber) error { - el, ok := h.packetMap[p] +func (h *sentPacketHistory) Remove(pn protocol.PacketNumber) error { + idx, ok := h.getIndex(pn) if !ok { - return fmt.Errorf("packet %d not found in sent packet history", p) + return fmt.Errorf("packet %d not found in sent packet history", pn) + } + p := h.packets[idx] + if p.outstanding() { + h.numOutstanding-- + if h.numOutstanding < 0 { + panic("negative number of outstanding packets") + } + } + h.packets[idx] = nil + // clean up all skipped packets directly before this packet number + for idx > 0 { + idx-- + p := h.packets[idx] + if p == nil || !p.skippedPacket { + break + } + h.packets[idx] = nil + } + if idx == 0 { + h.cleanupStart() + } + if len(h.packets) > 0 && h.packets[0] == nil { + panic("remove failed") } - el.List().Remove(el) - delete(h.packetMap, p) return nil } +// getIndex gets the index of packet p in the packets slice. +func (h *sentPacketHistory) getIndex(p protocol.PacketNumber) (int, bool) { + if len(h.packets) == 0 { + return 0, false + } + first := h.packets[0].PacketNumber + if p < first { + return 0, false + } + index := int(p - first) + if index > len(h.packets)-1 { + return 0, false + } + return index, true +} + func (h *sentPacketHistory) HasOutstandingPackets() bool { - return h.outstandingPacketList.Len() > 0 + return h.numOutstanding > 0 } -func (h *sentPacketHistory) DeleteOldPackets(now time.Time) { - maxAge := 3 * h.rttStats.PTO(false) - var nextEl *list.Element[*Packet] - // we don't iterate outstandingPacketList, as we should not delete outstanding packets. - // being outstanding for more than 3*PTO should only happen in the case of drastic RTT changes. - for el := h.etcPacketList.Front(); el != nil; el = nextEl { - nextEl = el.Next() - p := el.Value - if p.SendTime.After(now.Add(-maxAge)) { - break +// delete all nil entries at the beginning of the packets slice +func (h *sentPacketHistory) cleanupStart() { + for i, p := range h.packets { + if p != nil { + h.packets = h.packets[i:] + return } - delete(h.packetMap, p.PacketNumber) - h.etcPacketList.Remove(el) } + h.packets = h.packets[:0] +} + +func (h *sentPacketHistory) LowestPacketNumber() protocol.PacketNumber { + if len(h.packets) == 0 { + return protocol.InvalidPacketNumber + } + return h.packets[0].PacketNumber } -func (h *sentPacketHistory) DeclareLost(p *Packet) *Packet { - el, ok := h.packetMap[p.PacketNumber] +func (h *sentPacketHistory) DeclareLost(pn protocol.PacketNumber) { + idx, ok := h.getIndex(pn) if !ok { - return nil + return } - el.List().Remove(el) - p.declaredLost = true - // move it to the correct position in the etc list (based on the packet number) - for el = h.etcPacketList.Back(); el != nil; el = el.Prev() { - if el.Value.PacketNumber < p.PacketNumber { - break + p := h.packets[idx] + if p.outstanding() { + h.numOutstanding-- + if h.numOutstanding < 0 { + panic("negative number of outstanding packets") } } - if el == nil { - el = h.etcPacketList.PushFront(p) - } else { - el = h.etcPacketList.InsertAfter(p, el) + h.packets[idx] = nil + if idx == 0 { + h.cleanupStart() } - h.packetMap[p.PacketNumber] = el - return el.Value } diff --git a/vendor/github.com/quic-go/quic-go/internal/congestion/cubic_sender.go b/vendor/github.com/quic-go/quic-go/internal/congestion/cubic_sender.go index dac3118e3d..2e5084751a 100644 --- a/vendor/github.com/quic-go/quic-go/internal/congestion/cubic_sender.go +++ b/vendor/github.com/quic-go/quic-go/internal/congestion/cubic_sender.go @@ -120,8 +120,8 @@ func (c *cubicSender) TimeUntilSend(_ protocol.ByteCount) time.Time { return c.pacer.TimeUntilSend() } -func (c *cubicSender) HasPacingBudget() bool { - return c.pacer.Budget(c.clock.Now()) >= c.maxDatagramSize +func (c *cubicSender) HasPacingBudget(now time.Time) bool { + return c.pacer.Budget(now) >= c.maxDatagramSize } func (c *cubicSender) maxCongestionWindow() protocol.ByteCount { diff --git a/vendor/github.com/quic-go/quic-go/internal/congestion/interface.go b/vendor/github.com/quic-go/quic-go/internal/congestion/interface.go index 5db3ebae0c..484bd5f813 100644 --- a/vendor/github.com/quic-go/quic-go/internal/congestion/interface.go +++ b/vendor/github.com/quic-go/quic-go/internal/congestion/interface.go @@ -9,7 +9,7 @@ import ( // A SendAlgorithm performs congestion control type SendAlgorithm interface { TimeUntilSend(bytesInFlight protocol.ByteCount) time.Time - HasPacingBudget() bool + HasPacingBudget(now time.Time) bool OnPacketSent(sentTime time.Time, bytesInFlight protocol.ByteCount, packetNumber protocol.PacketNumber, bytes protocol.ByteCount, isRetransmittable bool) CanSend(bytesInFlight protocol.ByteCount) bool MaybeExitSlowStart() diff --git a/vendor/github.com/quic-go/quic-go/internal/congestion/pacer.go b/vendor/github.com/quic-go/quic-go/internal/congestion/pacer.go index a5861062e1..09ea268066 100644 --- a/vendor/github.com/quic-go/quic-go/internal/congestion/pacer.go +++ b/vendor/github.com/quic-go/quic-go/internal/congestion/pacer.go @@ -12,16 +12,16 @@ const maxBurstSizePackets = 10 // The pacer implements a token bucket pacing algorithm. type pacer struct { - budgetAtLastSent protocol.ByteCount - maxDatagramSize protocol.ByteCount - lastSentTime time.Time - getAdjustedBandwidth func() uint64 // in bytes/s + budgetAtLastSent protocol.ByteCount + maxDatagramSize protocol.ByteCount + lastSentTime time.Time + adjustedBandwidth func() uint64 // in bytes/s } func newPacer(getBandwidth func() Bandwidth) *pacer { p := &pacer{ maxDatagramSize: initialMaxDatagramSize, - getAdjustedBandwidth: func() uint64 { + adjustedBandwidth: func() uint64 { // Bandwidth is in bits/s. We need the value in bytes/s. bw := uint64(getBandwidth() / BytesPerSecond) // Use a slightly higher value than the actual measured bandwidth. @@ -49,13 +49,16 @@ func (p *pacer) Budget(now time.Time) protocol.ByteCount { if p.lastSentTime.IsZero() { return p.maxBurstSize() } - budget := p.budgetAtLastSent + (protocol.ByteCount(p.getAdjustedBandwidth())*protocol.ByteCount(now.Sub(p.lastSentTime).Nanoseconds()))/1e9 + budget := p.budgetAtLastSent + (protocol.ByteCount(p.adjustedBandwidth())*protocol.ByteCount(now.Sub(p.lastSentTime).Nanoseconds()))/1e9 + if budget < 0 { // protect against overflows + budget = protocol.MaxByteCount + } return utils.Min(p.maxBurstSize(), budget) } func (p *pacer) maxBurstSize() protocol.ByteCount { return utils.Max( - protocol.ByteCount(uint64((protocol.MinPacingDelay+protocol.TimerGranularity).Nanoseconds())*p.getAdjustedBandwidth())/1e9, + protocol.ByteCount(uint64((protocol.MinPacingDelay+protocol.TimerGranularity).Nanoseconds())*p.adjustedBandwidth())/1e9, maxBurstSizePackets*p.maxDatagramSize, ) } @@ -68,7 +71,7 @@ func (p *pacer) TimeUntilSend() time.Time { } return p.lastSentTime.Add(utils.Max( protocol.MinPacingDelay, - time.Duration(math.Ceil(float64(p.maxDatagramSize-p.budgetAtLastSent)*1e9/float64(p.getAdjustedBandwidth())))*time.Nanosecond, + time.Duration(math.Ceil(float64(p.maxDatagramSize-p.budgetAtLastSent)*1e9/float64(p.adjustedBandwidth())))*time.Nanosecond, )) } diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/aead.go b/vendor/github.com/quic-go/quic-go/internal/handshake/aead.go index 410745f1a8..6aa89fb3f3 100644 --- a/vendor/github.com/quic-go/quic-go/internal/handshake/aead.go +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/aead.go @@ -5,11 +5,10 @@ import ( "encoding/binary" "github.com/quic-go/quic-go/internal/protocol" - "github.com/quic-go/quic-go/internal/qtls" "github.com/quic-go/quic-go/internal/utils" ) -func createAEAD(suite *qtls.CipherSuiteTLS13, trafficSecret []byte, v protocol.VersionNumber) cipher.AEAD { +func createAEAD(suite *cipherSuite, trafficSecret []byte, v protocol.VersionNumber) cipher.AEAD { keyLabel := hkdfLabelKeyV1 ivLabel := hkdfLabelIVV1 if v == protocol.Version2 { @@ -93,69 +92,3 @@ func (o *longHeaderOpener) Open(dst, src []byte, pn protocol.PacketNumber, ad [] func (o *longHeaderOpener) DecryptHeader(sample []byte, firstByte *byte, pnBytes []byte) { o.headerProtector.DecryptHeader(sample, firstByte, pnBytes) } - -type handshakeSealer struct { - LongHeaderSealer - - dropInitialKeys func() - dropped bool -} - -func newHandshakeSealer( - aead cipher.AEAD, - headerProtector headerProtector, - dropInitialKeys func(), - perspective protocol.Perspective, -) LongHeaderSealer { - sealer := newLongHeaderSealer(aead, headerProtector) - // The client drops Initial keys when sending the first Handshake packet. - if perspective == protocol.PerspectiveServer { - return sealer - } - return &handshakeSealer{ - LongHeaderSealer: sealer, - dropInitialKeys: dropInitialKeys, - } -} - -func (s *handshakeSealer) Seal(dst, src []byte, pn protocol.PacketNumber, ad []byte) []byte { - data := s.LongHeaderSealer.Seal(dst, src, pn, ad) - if !s.dropped { - s.dropInitialKeys() - s.dropped = true - } - return data -} - -type handshakeOpener struct { - LongHeaderOpener - - dropInitialKeys func() - dropped bool -} - -func newHandshakeOpener( - aead cipher.AEAD, - headerProtector headerProtector, - dropInitialKeys func(), - perspective protocol.Perspective, -) LongHeaderOpener { - opener := newLongHeaderOpener(aead, headerProtector) - // The server drops Initial keys when first successfully processing a Handshake packet. - if perspective == protocol.PerspectiveClient { - return opener - } - return &handshakeOpener{ - LongHeaderOpener: opener, - dropInitialKeys: dropInitialKeys, - } -} - -func (o *handshakeOpener) Open(dst, src []byte, pn protocol.PacketNumber, ad []byte) ([]byte, error) { - dec, err := o.LongHeaderOpener.Open(dst, src, pn, ad) - if err == nil && !o.dropped { - o.dropInitialKeys() - o.dropped = true - } - return dec, err -} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/cipher_suite.go b/vendor/github.com/quic-go/quic-go/internal/handshake/cipher_suite.go new file mode 100644 index 0000000000..265231f0c6 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/cipher_suite.go @@ -0,0 +1,104 @@ +package handshake + +import ( + "crypto" + "crypto/aes" + "crypto/cipher" + "crypto/tls" + "fmt" + + "golang.org/x/crypto/chacha20poly1305" +) + +// These cipher suite implementations are copied from the standard library crypto/tls package. + +const aeadNonceLength = 12 + +type cipherSuite struct { + ID uint16 + Hash crypto.Hash + KeyLen int + AEAD func(key, nonceMask []byte) cipher.AEAD +} + +func (s cipherSuite) IVLen() int { return aeadNonceLength } + +func getCipherSuite(id uint16) *cipherSuite { + switch id { + case tls.TLS_AES_128_GCM_SHA256: + return &cipherSuite{ID: tls.TLS_AES_128_GCM_SHA256, Hash: crypto.SHA256, KeyLen: 16, AEAD: aeadAESGCMTLS13} + case tls.TLS_CHACHA20_POLY1305_SHA256: + return &cipherSuite{ID: tls.TLS_CHACHA20_POLY1305_SHA256, Hash: crypto.SHA256, KeyLen: 32, AEAD: aeadChaCha20Poly1305} + case tls.TLS_AES_256_GCM_SHA384: + return &cipherSuite{ID: tls.TLS_AES_256_GCM_SHA384, Hash: crypto.SHA384, KeyLen: 32, AEAD: aeadAESGCMTLS13} + default: + panic(fmt.Sprintf("unknown cypher suite: %d", id)) + } +} + +func aeadAESGCMTLS13(key, nonceMask []byte) cipher.AEAD { + if len(nonceMask) != aeadNonceLength { + panic("tls: internal error: wrong nonce length") + } + aes, err := aes.NewCipher(key) + if err != nil { + panic(err) + } + aead, err := cipher.NewGCM(aes) + if err != nil { + panic(err) + } + + ret := &xorNonceAEAD{aead: aead} + copy(ret.nonceMask[:], nonceMask) + return ret +} + +func aeadChaCha20Poly1305(key, nonceMask []byte) cipher.AEAD { + if len(nonceMask) != aeadNonceLength { + panic("tls: internal error: wrong nonce length") + } + aead, err := chacha20poly1305.New(key) + if err != nil { + panic(err) + } + + ret := &xorNonceAEAD{aead: aead} + copy(ret.nonceMask[:], nonceMask) + return ret +} + +// xorNonceAEAD wraps an AEAD by XORing in a fixed pattern to the nonce +// before each call. +type xorNonceAEAD struct { + nonceMask [aeadNonceLength]byte + aead cipher.AEAD +} + +func (f *xorNonceAEAD) NonceSize() int { return 8 } // 64-bit sequence number +func (f *xorNonceAEAD) Overhead() int { return f.aead.Overhead() } +func (f *xorNonceAEAD) explicitNonceLen() int { return 0 } + +func (f *xorNonceAEAD) Seal(out, nonce, plaintext, additionalData []byte) []byte { + for i, b := range nonce { + f.nonceMask[4+i] ^= b + } + result := f.aead.Seal(out, f.nonceMask[:], plaintext, additionalData) + for i, b := range nonce { + f.nonceMask[4+i] ^= b + } + + return result +} + +func (f *xorNonceAEAD) Open(out, nonce, ciphertext, additionalData []byte) ([]byte, error) { + for i, b := range nonce { + f.nonceMask[4+i] ^= b + } + result, err := f.aead.Open(out, f.nonceMask[:], ciphertext, additionalData) + for i, b := range nonce { + f.nonceMask[4+i] ^= b + } + + return result, err +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/conn.go b/vendor/github.com/quic-go/quic-go/internal/handshake/conn.go new file mode 100644 index 0000000000..54af823ba2 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/conn.go @@ -0,0 +1,21 @@ +package handshake + +import ( + "net" + "time" +) + +type conn struct { + localAddr, remoteAddr net.Addr +} + +var _ net.Conn = &conn{} + +func (c *conn) Read([]byte) (int, error) { return 0, nil } +func (c *conn) Write([]byte) (int, error) { return 0, nil } +func (c *conn) Close() error { return nil } +func (c *conn) RemoteAddr() net.Addr { return c.remoteAddr } +func (c *conn) LocalAddr() net.Addr { return c.localAddr } +func (c *conn) SetReadDeadline(time.Time) error { return nil } +func (c *conn) SetWriteDeadline(time.Time) error { return nil } +func (c *conn) SetDeadline(time.Time) error { return nil } diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/crypto_setup.go b/vendor/github.com/quic-go/quic-go/internal/handshake/crypto_setup.go index f9665b6199..332dbd7ef5 100644 --- a/vendor/github.com/quic-go/quic-go/internal/handshake/crypto_setup.go +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/crypto_setup.go @@ -2,13 +2,14 @@ package handshake import ( "bytes" + "context" "crypto/tls" "errors" "fmt" - "io" - "math" "net" + "strings" "sync" + "sync/atomic" "time" "github.com/quic-go/quic-go/internal/protocol" @@ -20,103 +21,25 @@ import ( "github.com/quic-go/quic-go/quicvarint" ) -// TLS unexpected_message alert -const alertUnexpectedMessage uint8 = 10 - -type messageType uint8 - -// TLS handshake message types. -const ( - typeClientHello messageType = 1 - typeServerHello messageType = 2 - typeNewSessionTicket messageType = 4 - typeEncryptedExtensions messageType = 8 - typeCertificate messageType = 11 - typeCertificateRequest messageType = 13 - typeCertificateVerify messageType = 15 - typeFinished messageType = 20 -) +type quicVersionContextKey struct{} -func (m messageType) String() string { - switch m { - case typeClientHello: - return "ClientHello" - case typeServerHello: - return "ServerHello" - case typeNewSessionTicket: - return "NewSessionTicket" - case typeEncryptedExtensions: - return "EncryptedExtensions" - case typeCertificate: - return "Certificate" - case typeCertificateRequest: - return "CertificateRequest" - case typeCertificateVerify: - return "CertificateVerify" - case typeFinished: - return "Finished" - default: - return fmt.Sprintf("unknown message type: %d", m) - } -} +var QUICVersionContextKey = &quicVersionContextKey{} const clientSessionStateRevision = 3 -type conn struct { - localAddr, remoteAddr net.Addr - version protocol.VersionNumber -} - -var _ ConnWithVersion = &conn{} - -func newConn(local, remote net.Addr, version protocol.VersionNumber) ConnWithVersion { - return &conn{ - localAddr: local, - remoteAddr: remote, - version: version, - } -} - -var _ net.Conn = &conn{} - -func (c *conn) Read([]byte) (int, error) { return 0, nil } -func (c *conn) Write([]byte) (int, error) { return 0, nil } -func (c *conn) Close() error { return nil } -func (c *conn) RemoteAddr() net.Addr { return c.remoteAddr } -func (c *conn) LocalAddr() net.Addr { return c.localAddr } -func (c *conn) SetReadDeadline(time.Time) error { return nil } -func (c *conn) SetWriteDeadline(time.Time) error { return nil } -func (c *conn) SetDeadline(time.Time) error { return nil } -func (c *conn) GetQUICVersion() protocol.VersionNumber { return c.version } - type cryptoSetup struct { - tlsConf *tls.Config - extraConf *qtls.ExtraConfig - conn *qtls.Conn + tlsConf *tls.Config + conn *qtls.QUICConn - version protocol.VersionNumber + events []Event - messageChan chan []byte - isReadingHandshakeMessage chan struct{} - readFirstHandshakeMessage bool + version protocol.VersionNumber ourParams *wire.TransportParameters peerParams *wire.TransportParameters - paramsChan <-chan []byte - runner handshakeRunner - - alertChan chan uint8 - // handshakeDone is closed as soon as the go routine running qtls.Handshake() returns - handshakeDone chan struct{} - // is closed when Close() is called - closeChan chan struct{} - - zeroRTTParameters *wire.TransportParameters - clientHelloWritten bool - clientHelloWrittenChan chan struct{} // is closed as soon as the ClientHello is written - zeroRTTParametersChan chan<- *wire.TransportParameters - allow0RTT func() bool + zeroRTTParameters *wire.TransportParameters + allow0RTT bool rttStats *utils.RTTStats @@ -129,88 +52,72 @@ type cryptoSetup struct { handshakeCompleteTime time.Time - readEncLevel protocol.EncryptionLevel - writeEncLevel protocol.EncryptionLevel - zeroRTTOpener LongHeaderOpener // only set for the server zeroRTTSealer LongHeaderSealer // only set for the client - initialStream io.Writer initialOpener LongHeaderOpener initialSealer LongHeaderSealer - handshakeStream io.Writer handshakeOpener LongHeaderOpener handshakeSealer LongHeaderSealer + used0RTT atomic.Bool + aead *updatableAEAD has1RTTSealer bool has1RTTOpener bool } -var ( - _ qtls.RecordLayer = &cryptoSetup{} - _ CryptoSetup = &cryptoSetup{} -) +var _ CryptoSetup = &cryptoSetup{} // NewCryptoSetupClient creates a new crypto setup for the client func NewCryptoSetupClient( - initialStream io.Writer, - handshakeStream io.Writer, connID protocol.ConnectionID, - localAddr net.Addr, - remoteAddr net.Addr, tp *wire.TransportParameters, - runner handshakeRunner, tlsConf *tls.Config, enable0RTT bool, rttStats *utils.RTTStats, tracer logging.ConnectionTracer, logger utils.Logger, version protocol.VersionNumber, -) (CryptoSetup, <-chan *wire.TransportParameters /* ClientHello written. Receive nil for non-0-RTT */) { - cs, clientHelloWritten := newCryptoSetup( - initialStream, - handshakeStream, +) CryptoSetup { + cs := newCryptoSetup( connID, tp, - runner, - tlsConf, - enable0RTT, rttStats, tracer, logger, protocol.PerspectiveClient, version, ) - cs.conn = qtls.Client(newConn(localAddr, remoteAddr, version), cs.tlsConf, cs.extraConf) - return cs, clientHelloWritten + + tlsConf = tlsConf.Clone() + tlsConf.MinVersion = tls.VersionTLS13 + quicConf := &qtls.QUICConfig{TLSConfig: tlsConf} + qtls.SetupConfigForClient(quicConf, cs.marshalDataForSessionState, cs.handleDataFromSessionState) + cs.tlsConf = tlsConf + + cs.conn = qtls.QUICClient(quicConf) + cs.conn.SetTransportParameters(cs.ourParams.Marshal(protocol.PerspectiveClient)) + + return cs } // NewCryptoSetupServer creates a new crypto setup for the server func NewCryptoSetupServer( - initialStream io.Writer, - handshakeStream io.Writer, connID protocol.ConnectionID, - localAddr net.Addr, - remoteAddr net.Addr, + localAddr, remoteAddr net.Addr, tp *wire.TransportParameters, - runner handshakeRunner, tlsConf *tls.Config, - allow0RTT func() bool, + allow0RTT bool, rttStats *utils.RTTStats, tracer logging.ConnectionTracer, logger utils.Logger, version protocol.VersionNumber, ) CryptoSetup { - cs, _ := newCryptoSetup( - initialStream, - handshakeStream, + cs := newCryptoSetup( connID, tp, - runner, - tlsConf, - allow0RTT != nil, rttStats, tracer, logger, @@ -218,73 +125,68 @@ func NewCryptoSetupServer( version, ) cs.allow0RTT = allow0RTT - cs.conn = qtls.Server(newConn(localAddr, remoteAddr, version), cs.tlsConf, cs.extraConf) + + quicConf := &qtls.QUICConfig{TLSConfig: tlsConf} + qtls.SetupConfigForServer(quicConf, cs.allow0RTT, cs.getDataForSessionTicket, cs.accept0RTT) + addConnToClientHelloInfo(quicConf.TLSConfig, localAddr, remoteAddr) + + cs.tlsConf = quicConf.TLSConfig + cs.conn = qtls.QUICServer(quicConf) + return cs } +// The tls.Config contains two callbacks that pass in a tls.ClientHelloInfo. +// Since crypto/tls doesn't do it, we need to make sure to set the Conn field with a fake net.Conn +// that allows the caller to get the local and the remote address. +func addConnToClientHelloInfo(conf *tls.Config, localAddr, remoteAddr net.Addr) { + if conf.GetConfigForClient != nil { + gcfc := conf.GetConfigForClient + conf.GetConfigForClient = func(info *tls.ClientHelloInfo) (*tls.Config, error) { + info.Conn = &conn{localAddr: localAddr, remoteAddr: remoteAddr} + c, err := gcfc(info) + if c != nil { + // We're returning a tls.Config here, so we need to apply this recursively. + addConnToClientHelloInfo(c, localAddr, remoteAddr) + } + return c, err + } + } + if conf.GetCertificate != nil { + gc := conf.GetCertificate + conf.GetCertificate = func(info *tls.ClientHelloInfo) (*tls.Certificate, error) { + info.Conn = &conn{localAddr: localAddr, remoteAddr: remoteAddr} + return gc(info) + } + } +} + func newCryptoSetup( - initialStream io.Writer, - handshakeStream io.Writer, connID protocol.ConnectionID, tp *wire.TransportParameters, - runner handshakeRunner, - tlsConf *tls.Config, - enable0RTT bool, rttStats *utils.RTTStats, tracer logging.ConnectionTracer, logger utils.Logger, perspective protocol.Perspective, version protocol.VersionNumber, -) (*cryptoSetup, <-chan *wire.TransportParameters /* ClientHello written. Receive nil for non-0-RTT */) { +) *cryptoSetup { initialSealer, initialOpener := NewInitialAEAD(connID, perspective, version) if tracer != nil { tracer.UpdatedKeyFromTLS(protocol.EncryptionInitial, protocol.PerspectiveClient) tracer.UpdatedKeyFromTLS(protocol.EncryptionInitial, protocol.PerspectiveServer) } - extHandler := newExtensionHandler(tp.Marshal(perspective), perspective, version) - zeroRTTParametersChan := make(chan *wire.TransportParameters, 1) - cs := &cryptoSetup{ - tlsConf: tlsConf, - initialStream: initialStream, - initialSealer: initialSealer, - initialOpener: initialOpener, - handshakeStream: handshakeStream, - aead: newUpdatableAEAD(rttStats, tracer, logger, version), - readEncLevel: protocol.EncryptionInitial, - writeEncLevel: protocol.EncryptionInitial, - runner: runner, - ourParams: tp, - paramsChan: extHandler.TransportParameters(), - rttStats: rttStats, - tracer: tracer, - logger: logger, - perspective: perspective, - handshakeDone: make(chan struct{}), - alertChan: make(chan uint8), - clientHelloWrittenChan: make(chan struct{}), - zeroRTTParametersChan: zeroRTTParametersChan, - messageChan: make(chan []byte, 100), - isReadingHandshakeMessage: make(chan struct{}), - closeChan: make(chan struct{}), - version: version, - } - var maxEarlyData uint32 - if enable0RTT { - maxEarlyData = math.MaxUint32 - } - cs.extraConf = &qtls.ExtraConfig{ - GetExtensions: extHandler.GetExtensions, - ReceivedExtensions: extHandler.ReceivedExtensions, - AlternativeRecordLayer: cs, - EnforceNextProtoSelection: true, - MaxEarlyData: maxEarlyData, - Accept0RTT: cs.accept0RTT, - Rejected0RTT: cs.rejected0RTT, - Enable0RTT: enable0RTT, - GetAppDataForSessionState: cs.marshalDataForSessionState, - SetAppDataFromSessionState: cs.handleDataFromSessionState, - } - return cs, zeroRTTParametersChan + return &cryptoSetup{ + initialSealer: initialSealer, + initialOpener: initialOpener, + aead: newUpdatableAEAD(rttStats, tracer, logger, version), + events: make([]Event, 0, 16), + ourParams: tp, + rttStats: rttStats, + tracer: tracer, + logger: logger, + perspective: perspective, + version: version, + } } func (h *cryptoSetup) ChangeConnectionID(id protocol.ConnectionID) { @@ -301,136 +203,109 @@ func (h *cryptoSetup) SetLargest1RTTAcked(pn protocol.PacketNumber) error { return h.aead.SetLargestAcked(pn) } -func (h *cryptoSetup) RunHandshake() { - // Handle errors that might occur when HandleData() is called. - handshakeComplete := make(chan struct{}) - handshakeErrChan := make(chan error, 1) - go func() { - defer close(h.handshakeDone) - if err := h.conn.Handshake(); err != nil { - handshakeErrChan <- err - return +func (h *cryptoSetup) StartHandshake() error { + err := h.conn.Start(context.WithValue(context.Background(), QUICVersionContextKey, h.version)) + if err != nil { + return wrapError(err) + } + for { + ev := h.conn.NextEvent() + done, err := h.handleEvent(ev) + if err != nil { + return wrapError(err) } - close(handshakeComplete) - }() - - if h.perspective == protocol.PerspectiveClient { - select { - case err := <-handshakeErrChan: - h.onError(0, err.Error()) - return - case <-h.clientHelloWrittenChan: + if done { + break } } - - select { - case <-handshakeComplete: // return when the handshake is done - h.mutex.Lock() - h.handshakeCompleteTime = time.Now() - h.mutex.Unlock() - h.runner.OnHandshakeComplete() - case <-h.closeChan: - // wait until the Handshake() go routine has returned - <-h.handshakeDone - case alert := <-h.alertChan: - handshakeErr := <-handshakeErrChan - h.onError(alert, handshakeErr.Error()) - } -} - -func (h *cryptoSetup) onError(alert uint8, message string) { - var err error - if alert == 0 { - err = &qerr.TransportError{ErrorCode: qerr.InternalError, ErrorMessage: message} - } else { - err = qerr.NewLocalCryptoError(alert, message) + if h.perspective == protocol.PerspectiveClient { + if h.zeroRTTSealer != nil && h.zeroRTTParameters != nil { + h.logger.Debugf("Doing 0-RTT.") + h.events = append(h.events, Event{Kind: EventRestoredTransportParameters, TransportParameters: h.zeroRTTParameters}) + } else { + h.logger.Debugf("Not doing 0-RTT. Has sealer: %t, has params: %t", h.zeroRTTSealer != nil, h.zeroRTTParameters != nil) + } } - h.runner.OnError(err) + return nil } // Close closes the crypto setup. // It aborts the handshake, if it is still running. -// It must only be called once. func (h *cryptoSetup) Close() error { - close(h.closeChan) - // wait until qtls.Handshake() actually returned - <-h.handshakeDone - return nil + return h.conn.Close() } -// handleMessage handles a TLS handshake message. +// HandleMessage handles a TLS handshake message. // It is called by the crypto streams when a new message is available. -// It returns if it is done with messages on the same encryption level. -func (h *cryptoSetup) HandleMessage(data []byte, encLevel protocol.EncryptionLevel) bool /* stream finished */ { - msgType := messageType(data[0]) - h.logger.Debugf("Received %s message (%d bytes, encryption level: %s)", msgType, len(data), encLevel) - if err := h.checkEncryptionLevel(msgType, encLevel); err != nil { - h.onError(alertUnexpectedMessage, err.Error()) - return false +func (h *cryptoSetup) HandleMessage(data []byte, encLevel protocol.EncryptionLevel) error { + if err := h.handleMessage(data, encLevel); err != nil { + return wrapError(err) } - h.messageChan <- data - if encLevel == protocol.Encryption1RTT { - h.handlePostHandshakeMessage() - return false + return nil +} + +func (h *cryptoSetup) handleMessage(data []byte, encLevel protocol.EncryptionLevel) error { + if err := h.conn.HandleData(qtls.ToTLSEncryptionLevel(encLevel), data); err != nil { + return err } -readLoop: for { - select { - case data := <-h.paramsChan: - if data == nil { - h.onError(0x6d, "missing quic_transport_parameters extension") - } else { - h.handleTransportParameters(data) - } - case <-h.isReadingHandshakeMessage: - break readLoop - case <-h.handshakeDone: - break readLoop - case <-h.closeChan: - break readLoop + ev := h.conn.NextEvent() + done, err := h.handleEvent(ev) + if err != nil { + return err + } + if done { + return nil } } - // We're done with the Initial encryption level after processing a ClientHello / ServerHello, - // but only if a handshake opener and sealer was created. - // Otherwise, a HelloRetryRequest was performed. - // We're done with the Handshake encryption level after processing the Finished message. - return ((msgType == typeClientHello || msgType == typeServerHello) && h.handshakeOpener != nil && h.handshakeSealer != nil) || - msgType == typeFinished -} - -func (h *cryptoSetup) checkEncryptionLevel(msgType messageType, encLevel protocol.EncryptionLevel) error { - var expected protocol.EncryptionLevel - switch msgType { - case typeClientHello, - typeServerHello: - expected = protocol.EncryptionInitial - case typeEncryptedExtensions, - typeCertificate, - typeCertificateRequest, - typeCertificateVerify, - typeFinished: - expected = protocol.EncryptionHandshake - case typeNewSessionTicket: - expected = protocol.Encryption1RTT +} + +func (h *cryptoSetup) handleEvent(ev qtls.QUICEvent) (done bool, err error) { + switch ev.Kind { + case qtls.QUICNoEvent: + return true, nil + case qtls.QUICSetReadSecret: + h.SetReadKey(ev.Level, ev.Suite, ev.Data) + return false, nil + case qtls.QUICSetWriteSecret: + h.SetWriteKey(ev.Level, ev.Suite, ev.Data) + return false, nil + case qtls.QUICTransportParameters: + return false, h.handleTransportParameters(ev.Data) + case qtls.QUICTransportParametersRequired: + h.conn.SetTransportParameters(h.ourParams.Marshal(h.perspective)) + return false, nil + case qtls.QUICRejectedEarlyData: + h.rejected0RTT() + return false, nil + case qtls.QUICWriteData: + h.WriteRecord(ev.Level, ev.Data) + return false, nil + case qtls.QUICHandshakeDone: + h.handshakeComplete() + return false, nil default: - return fmt.Errorf("unexpected handshake message: %d", msgType) + return false, fmt.Errorf("unexpected event: %d", ev.Kind) } - if encLevel != expected { - return fmt.Errorf("expected handshake message %s to have encryption level %s, has %s", msgType, expected, encLevel) +} + +func (h *cryptoSetup) NextEvent() Event { + if len(h.events) == 0 { + return Event{Kind: EventNoEvent} } - return nil + ev := h.events[0] + h.events = h.events[1:] + return ev } -func (h *cryptoSetup) handleTransportParameters(data []byte) { +func (h *cryptoSetup) handleTransportParameters(data []byte) error { var tp wire.TransportParameters if err := tp.Unmarshal(data, h.perspective.Opposite()); err != nil { - h.runner.OnError(&qerr.TransportError{ - ErrorCode: qerr.TransportParameterError, - ErrorMessage: err.Error(), - }) + return err } h.peerParams = &tp - h.runner.OnReceivedParams(h.peerParams) + h.events = append(h.events, Event{Kind: EventReceivedTransportParameters, TransportParameters: h.peerParams}) + return nil } // must be called after receiving the transport parameters @@ -471,17 +346,37 @@ func (h *cryptoSetup) handleDataFromSessionStateImpl(data []byte) (*wire.Transpo return &tp, nil } -// only valid for the server +func (h *cryptoSetup) getDataForSessionTicket() []byte { + return (&sessionTicket{ + Parameters: h.ourParams, + RTT: h.rttStats.SmoothedRTT(), + }).Marshal() +} + +// GetSessionTicket generates a new session ticket. +// Due to limitations in crypto/tls, it's only possible to generate a single session ticket per connection. +// It is only valid for the server. func (h *cryptoSetup) GetSessionTicket() ([]byte, error) { - var appData []byte - // Save transport parameters to the session ticket if we're allowing 0-RTT. - if h.extraConf.MaxEarlyData > 0 { - appData = (&sessionTicket{ - Parameters: h.ourParams, - RTT: h.rttStats.SmoothedRTT(), - }).Marshal() + if err := qtls.SendSessionTicket(h.conn, h.allow0RTT); err != nil { + // Session tickets might be disabled by tls.Config.SessionTicketsDisabled. + // We can't check h.tlsConfig here, since the actual config might have been obtained from + // the GetConfigForClient callback. + // See https://github.com/golang/go/issues/62032. + // Once that issue is resolved, this error assertion can be removed. + if strings.Contains(err.Error(), "session ticket keys unavailable") { + return nil, nil + } + return nil, err + } + ev := h.conn.NextEvent() + if ev.Kind != qtls.QUICWriteData || ev.Level != qtls.QUICEncryptionLevelApplication { + panic("crypto/tls bug: where's my session ticket?") } - return h.conn.GetSessionTicket(appData) + ticket := ev.Data + if ev := h.conn.NextEvent(); ev.Kind != qtls.QUICNoEvent { + panic("crypto/tls bug: why more than one ticket?") + } + return ticket, nil } // accept0RTT is called for the server when receiving the client's session ticket. @@ -497,7 +392,7 @@ func (h *cryptoSetup) accept0RTT(sessionTicketData []byte) bool { h.logger.Debugf("Transport parameters changed. Rejecting 0-RTT.") return false } - if !h.allow0RTT() { + if !h.allow0RTT { h.logger.Debugf("0-RTT not allowed. Rejecting 0-RTT.") return false } @@ -516,64 +411,16 @@ func (h *cryptoSetup) rejected0RTT() { h.mutex.Unlock() if had0RTTKeys { - h.runner.DropKeys(protocol.Encryption0RTT) + h.events = append(h.events, Event{Kind: EventDiscard0RTTKeys}) } } -func (h *cryptoSetup) handlePostHandshakeMessage() { - // make sure the handshake has already completed - <-h.handshakeDone - - done := make(chan struct{}) - defer close(done) - - // h.alertChan is an unbuffered channel. - // If an error occurs during conn.HandlePostHandshakeMessage, - // it will be sent on this channel. - // Read it from a go-routine so that HandlePostHandshakeMessage doesn't deadlock. - alertChan := make(chan uint8, 1) - go func() { - <-h.isReadingHandshakeMessage - select { - case alert := <-h.alertChan: - alertChan <- alert - case <-done: - } - }() - - if err := h.conn.HandlePostHandshakeMessage(); err != nil { - select { - case <-h.closeChan: - case alert := <-alertChan: - h.onError(alert, err.Error()) - } - } -} - -// ReadHandshakeMessage is called by TLS. -// It blocks until a new handshake message is available. -func (h *cryptoSetup) ReadHandshakeMessage() ([]byte, error) { - if !h.readFirstHandshakeMessage { - h.readFirstHandshakeMessage = true - } else { - select { - case h.isReadingHandshakeMessage <- struct{}{}: - case <-h.closeChan: - return nil, errors.New("error while handling the handshake message") - } - } - select { - case msg := <-h.messageChan: - return msg, nil - case <-h.closeChan: - return nil, errors.New("error while handling the handshake message") - } -} - -func (h *cryptoSetup) SetReadKey(encLevel qtls.EncryptionLevel, suite *qtls.CipherSuiteTLS13, trafficSecret []byte) { +func (h *cryptoSetup) SetReadKey(el qtls.QUICEncryptionLevel, suiteID uint16, trafficSecret []byte) { + suite := getCipherSuite(suiteID) h.mutex.Lock() - switch encLevel { - case qtls.Encryption0RTT: + //nolint:exhaustive // The TLS stack doesn't export Initial keys. + switch el { + case qtls.QUICEncryptionLevelEarly: if h.perspective == protocol.PerspectiveClient { panic("Received 0-RTT read key for the client") } @@ -581,27 +428,19 @@ func (h *cryptoSetup) SetReadKey(encLevel qtls.EncryptionLevel, suite *qtls.Ciph createAEAD(suite, trafficSecret, h.version), newHeaderProtector(suite, trafficSecret, true, h.version), ) - h.mutex.Unlock() + h.used0RTT.Store(true) if h.logger.Debug() { h.logger.Debugf("Installed 0-RTT Read keys (using %s)", tls.CipherSuiteName(suite.ID)) } - if h.tracer != nil { - h.tracer.UpdatedKeyFromTLS(protocol.Encryption0RTT, h.perspective.Opposite()) - } - return - case qtls.EncryptionHandshake: - h.readEncLevel = protocol.EncryptionHandshake - h.handshakeOpener = newHandshakeOpener( + case qtls.QUICEncryptionLevelHandshake: + h.handshakeOpener = newLongHeaderOpener( createAEAD(suite, trafficSecret, h.version), newHeaderProtector(suite, trafficSecret, true, h.version), - h.dropInitialKeys, - h.perspective, ) if h.logger.Debug() { h.logger.Debugf("Installed Handshake Read keys (using %s)", tls.CipherSuiteName(suite.ID)) } - case qtls.EncryptionApplication: - h.readEncLevel = protocol.Encryption1RTT + case qtls.QUICEncryptionLevelApplication: h.aead.SetReadKey(suite, trafficSecret) h.has1RTTOpener = true if h.logger.Debug() { @@ -611,15 +450,18 @@ func (h *cryptoSetup) SetReadKey(encLevel qtls.EncryptionLevel, suite *qtls.Ciph panic("unexpected read encryption level") } h.mutex.Unlock() + h.events = append(h.events, Event{Kind: EventReceivedReadKeys}) if h.tracer != nil { - h.tracer.UpdatedKeyFromTLS(h.readEncLevel, h.perspective.Opposite()) + h.tracer.UpdatedKeyFromTLS(qtls.FromTLSEncryptionLevel(el), h.perspective.Opposite()) } } -func (h *cryptoSetup) SetWriteKey(encLevel qtls.EncryptionLevel, suite *qtls.CipherSuiteTLS13, trafficSecret []byte) { +func (h *cryptoSetup) SetWriteKey(el qtls.QUICEncryptionLevel, suiteID uint16, trafficSecret []byte) { + suite := getCipherSuite(suiteID) h.mutex.Lock() - switch encLevel { - case qtls.Encryption0RTT: + //nolint:exhaustive // The TLS stack doesn't export Initial keys. + switch el { + case qtls.QUICEncryptionLevelEarly: if h.perspective == protocol.PerspectiveServer { panic("Received 0-RTT write key for the server") } @@ -634,26 +476,25 @@ func (h *cryptoSetup) SetWriteKey(encLevel qtls.EncryptionLevel, suite *qtls.Cip if h.tracer != nil { h.tracer.UpdatedKeyFromTLS(protocol.Encryption0RTT, h.perspective) } + // don't set used0RTT here. 0-RTT might still get rejected. return - case qtls.EncryptionHandshake: - h.writeEncLevel = protocol.EncryptionHandshake - h.handshakeSealer = newHandshakeSealer( + case qtls.QUICEncryptionLevelHandshake: + h.handshakeSealer = newLongHeaderSealer( createAEAD(suite, trafficSecret, h.version), newHeaderProtector(suite, trafficSecret, true, h.version), - h.dropInitialKeys, - h.perspective, ) if h.logger.Debug() { h.logger.Debugf("Installed Handshake Write keys (using %s)", tls.CipherSuiteName(suite.ID)) } - case qtls.EncryptionApplication: - h.writeEncLevel = protocol.Encryption1RTT + case qtls.QUICEncryptionLevelApplication: h.aead.SetWriteKey(suite, trafficSecret) h.has1RTTSealer = true if h.logger.Debug() { h.logger.Debugf("Installed 1-RTT Write keys (using %s)", tls.CipherSuiteName(suite.ID)) } if h.zeroRTTSealer != nil { + // Once we receive handshake keys, we know that 0-RTT was not rejected. + h.used0RTT.Store(true) h.zeroRTTSealer = nil h.logger.Debugf("Dropping 0-RTT keys.") if h.tracer != nil { @@ -665,55 +506,39 @@ func (h *cryptoSetup) SetWriteKey(encLevel qtls.EncryptionLevel, suite *qtls.Cip } h.mutex.Unlock() if h.tracer != nil { - h.tracer.UpdatedKeyFromTLS(h.writeEncLevel, h.perspective) + h.tracer.UpdatedKeyFromTLS(qtls.FromTLSEncryptionLevel(el), h.perspective) } } // WriteRecord is called when TLS writes data -func (h *cryptoSetup) WriteRecord(p []byte) (int, error) { - h.mutex.Lock() - defer h.mutex.Unlock() - - //nolint:exhaustive // LS records can only be written for Initial and Handshake. - switch h.writeEncLevel { - case protocol.EncryptionInitial: - // assume that the first WriteRecord call contains the ClientHello - n, err := h.initialStream.Write(p) - if !h.clientHelloWritten && h.perspective == protocol.PerspectiveClient { - h.clientHelloWritten = true - close(h.clientHelloWrittenChan) - if h.zeroRTTSealer != nil && h.zeroRTTParameters != nil { - h.logger.Debugf("Doing 0-RTT.") - h.zeroRTTParametersChan <- h.zeroRTTParameters - } else { - h.logger.Debugf("Not doing 0-RTT.") - h.zeroRTTParametersChan <- nil - } - } - return n, err - case protocol.EncryptionHandshake: - return h.handshakeStream.Write(p) +func (h *cryptoSetup) WriteRecord(encLevel qtls.QUICEncryptionLevel, p []byte) { + //nolint:exhaustive // handshake records can only be written for Initial and Handshake. + switch encLevel { + case qtls.QUICEncryptionLevelInitial: + h.events = append(h.events, Event{Kind: EventWriteInitialData, Data: p}) + case qtls.QUICEncryptionLevelHandshake: + h.events = append(h.events, Event{Kind: EventWriteHandshakeData, Data: p}) + case qtls.QUICEncryptionLevelApplication: + panic("unexpected write") default: - panic(fmt.Sprintf("unexpected write encryption level: %s", h.writeEncLevel)) + panic(fmt.Sprintf("unexpected write encryption level: %s", encLevel)) } } -func (h *cryptoSetup) SendAlert(alert uint8) { - select { - case h.alertChan <- alert: - case <-h.closeChan: - // no need to send an alert when we've already closed - } -} - -// used a callback in the handshakeSealer and handshakeOpener -func (h *cryptoSetup) dropInitialKeys() { +func (h *cryptoSetup) DiscardInitialKeys() { h.mutex.Lock() + dropped := h.initialOpener != nil h.initialOpener = nil h.initialSealer = nil h.mutex.Unlock() - h.runner.DropKeys(protocol.EncryptionInitial) - h.logger.Debugf("Dropping Initial keys.") + if dropped { + h.logger.Debugf("Dropping Initial keys.") + } +} + +func (h *cryptoSetup) handshakeComplete() { + h.handshakeCompleteTime = time.Now() + h.events = append(h.events, Event{Kind: EventHandshakeComplete}) } func (h *cryptoSetup) SetHandshakeConfirmed() { @@ -728,7 +553,6 @@ func (h *cryptoSetup) SetHandshakeConfirmed() { } h.mutex.Unlock() if dropped { - h.runner.DropKeys(protocol.EncryptionHandshake) h.logger.Debugf("Dropping Handshake keys.") } } @@ -833,5 +657,16 @@ func (h *cryptoSetup) Get1RTTOpener() (ShortHeaderOpener, error) { } func (h *cryptoSetup) ConnectionState() ConnectionState { - return qtls.GetConnectionState(h.conn) + return ConnectionState{ + ConnectionState: h.conn.ConnectionState(), + Used0RTT: h.used0RTT.Load(), + } +} + +func wrapError(err error) error { + // alert 80 is an internal error + if alertErr := qtls.AlertError(0); errors.As(err, &alertErr) && alertErr != 80 { + return qerr.NewLocalCryptoError(uint8(alertErr), err) + } + return &qerr.TransportError{ErrorCode: qerr.InternalError, ErrorMessage: err.Error()} } diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/header_protector.go b/vendor/github.com/quic-go/quic-go/internal/handshake/header_protector.go index 274fb30cbd..fb6092e040 100644 --- a/vendor/github.com/quic-go/quic-go/internal/handshake/header_protector.go +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/header_protector.go @@ -10,7 +10,6 @@ import ( "golang.org/x/crypto/chacha20" "github.com/quic-go/quic-go/internal/protocol" - "github.com/quic-go/quic-go/internal/qtls" ) type headerProtector interface { @@ -25,7 +24,7 @@ func hkdfHeaderProtectionLabel(v protocol.VersionNumber) string { return "quic hp" } -func newHeaderProtector(suite *qtls.CipherSuiteTLS13, trafficSecret []byte, isLongHeader bool, v protocol.VersionNumber) headerProtector { +func newHeaderProtector(suite *cipherSuite, trafficSecret []byte, isLongHeader bool, v protocol.VersionNumber) headerProtector { hkdfLabel := hkdfHeaderProtectionLabel(v) switch suite.ID { case tls.TLS_AES_128_GCM_SHA256, tls.TLS_AES_256_GCM_SHA384: @@ -45,7 +44,7 @@ type aesHeaderProtector struct { var _ headerProtector = &aesHeaderProtector{} -func newAESHeaderProtector(suite *qtls.CipherSuiteTLS13, trafficSecret []byte, isLongHeader bool, hkdfLabel string) headerProtector { +func newAESHeaderProtector(suite *cipherSuite, trafficSecret []byte, isLongHeader bool, hkdfLabel string) headerProtector { hpKey := hkdfExpandLabel(suite.Hash, trafficSecret, []byte{}, hkdfLabel, suite.KeyLen) block, err := aes.NewCipher(hpKey) if err != nil { @@ -90,7 +89,7 @@ type chachaHeaderProtector struct { var _ headerProtector = &chachaHeaderProtector{} -func newChaChaHeaderProtector(suite *qtls.CipherSuiteTLS13, trafficSecret []byte, isLongHeader bool, hkdfLabel string) headerProtector { +func newChaChaHeaderProtector(suite *cipherSuite, trafficSecret []byte, isLongHeader bool, hkdfLabel string) headerProtector { hpKey := hkdfExpandLabel(suite.Hash, trafficSecret, []byte{}, hkdfLabel, suite.KeyLen) p := &chachaHeaderProtector{ diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/initial_aead.go b/vendor/github.com/quic-go/quic-go/internal/handshake/initial_aead.go index 3967fdb83a..b0377c39a8 100644 --- a/vendor/github.com/quic-go/quic-go/internal/handshake/initial_aead.go +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/initial_aead.go @@ -7,13 +7,11 @@ import ( "golang.org/x/crypto/hkdf" "github.com/quic-go/quic-go/internal/protocol" - "github.com/quic-go/quic-go/internal/qtls" ) var ( - quicSaltOld = []byte{0xaf, 0xbf, 0xec, 0x28, 0x99, 0x93, 0xd2, 0x4c, 0x9e, 0x97, 0x86, 0xf1, 0x9c, 0x61, 0x11, 0xe0, 0x43, 0x90, 0xa8, 0x99} - quicSaltV1 = []byte{0x38, 0x76, 0x2c, 0xf7, 0xf5, 0x59, 0x34, 0xb3, 0x4d, 0x17, 0x9a, 0xe6, 0xa4, 0xc8, 0x0c, 0xad, 0xcc, 0xbb, 0x7f, 0x0a} - quicSaltV2 = []byte{0x0d, 0xed, 0xe3, 0xde, 0xf7, 0x00, 0xa6, 0xdb, 0x81, 0x93, 0x81, 0xbe, 0x6e, 0x26, 0x9d, 0xcb, 0xf9, 0xbd, 0x2e, 0xd9} + quicSaltV1 = []byte{0x38, 0x76, 0x2c, 0xf7, 0xf5, 0x59, 0x34, 0xb3, 0x4d, 0x17, 0x9a, 0xe6, 0xa4, 0xc8, 0x0c, 0xad, 0xcc, 0xbb, 0x7f, 0x0a} + quicSaltV2 = []byte{0x0d, 0xed, 0xe3, 0xde, 0xf7, 0x00, 0xa6, 0xdb, 0x81, 0x93, 0x81, 0xbe, 0x6e, 0x26, 0x9d, 0xcb, 0xf9, 0xbd, 0x2e, 0xd9} ) const ( @@ -27,18 +25,10 @@ func getSalt(v protocol.VersionNumber) []byte { if v == protocol.Version2 { return quicSaltV2 } - if v == protocol.Version1 { - return quicSaltV1 - } - return quicSaltOld + return quicSaltV1 } -var initialSuite = &qtls.CipherSuiteTLS13{ - ID: tls.TLS_AES_128_GCM_SHA256, - KeyLen: 16, - AEAD: qtls.AEADAESGCMTLS13, - Hash: crypto.SHA256, -} +var initialSuite = getCipherSuite(tls.TLS_AES_128_GCM_SHA256) // NewInitialAEAD creates a new AEAD for Initial encryption / decryption. func NewInitialAEAD(connID protocol.ConnectionID, pers protocol.Perspective, v protocol.VersionNumber) (LongHeaderSealer, LongHeaderOpener) { @@ -54,8 +44,8 @@ func NewInitialAEAD(connID protocol.ConnectionID, pers protocol.Perspective, v p myKey, myIV := computeInitialKeyAndIV(mySecret, v) otherKey, otherIV := computeInitialKeyAndIV(otherSecret, v) - encrypter := qtls.AEADAESGCMTLS13(myKey, myIV) - decrypter := qtls.AEADAESGCMTLS13(otherKey, otherIV) + encrypter := initialSuite.AEAD(myKey, myIV) + decrypter := initialSuite.AEAD(otherKey, otherIV) return newLongHeaderSealer(encrypter, newHeaderProtector(initialSuite, mySecret, true, v)), newLongHeaderOpener(decrypter, newAESHeaderProtector(initialSuite, otherSecret, true, hkdfHeaderProtectionLabel(v))) diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/interface.go b/vendor/github.com/quic-go/quic-go/internal/handshake/interface.go index e7baea9065..fab224f9bd 100644 --- a/vendor/github.com/quic-go/quic-go/internal/handshake/interface.go +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/interface.go @@ -1,13 +1,12 @@ package handshake import ( + "crypto/tls" "errors" "io" - "net" "time" "github.com/quic-go/quic-go/internal/protocol" - "github.com/quic-go/quic-go/internal/qtls" "github.com/quic-go/quic-go/internal/wire" ) @@ -23,9 +22,6 @@ var ( ErrDecryptionFailed = errors.New("decryption failed") ) -// ConnectionState contains information about the state of the connection. -type ConnectionState = qtls.ConnectionState - type headerDecryptor interface { DecryptHeader(sample []byte, firstByte *byte, pnBytes []byte) } @@ -57,29 +53,54 @@ type ShortHeaderSealer interface { KeyPhase() protocol.KeyPhaseBit } -// A tlsExtensionHandler sends and received the QUIC TLS extension. -type tlsExtensionHandler interface { - GetExtensions(msgType uint8) []qtls.Extension - ReceivedExtensions(msgType uint8, exts []qtls.Extension) - TransportParameters() <-chan []byte +type ConnectionState struct { + tls.ConnectionState + Used0RTT bool } -type handshakeRunner interface { - OnReceivedParams(*wire.TransportParameters) - OnHandshakeComplete() - OnError(error) - DropKeys(protocol.EncryptionLevel) +// EventKind is the kind of handshake event. +type EventKind uint8 + +const ( + // EventNoEvent signals that there are no new handshake events + EventNoEvent EventKind = iota + 1 + // EventWriteInitialData contains new CRYPTO data to send at the Initial encryption level + EventWriteInitialData + // EventWriteHandshakeData contains new CRYPTO data to send at the Handshake encryption level + EventWriteHandshakeData + // EventReceivedReadKeys signals that new decryption keys are available. + // It doesn't say which encryption level those keys are for. + EventReceivedReadKeys + // EventDiscard0RTTKeys signals that the Handshake keys were discarded. + EventDiscard0RTTKeys + // EventReceivedTransportParameters contains the transport parameters sent by the peer. + EventReceivedTransportParameters + // EventRestoredTransportParameters contains the transport parameters restored from the session ticket. + // It is only used for the client. + EventRestoredTransportParameters + // EventHandshakeComplete signals that the TLS handshake was completed. + EventHandshakeComplete +) + +// Event is a handshake event. +type Event struct { + Kind EventKind + Data []byte + TransportParameters *wire.TransportParameters } // CryptoSetup handles the handshake and protecting / unprotecting packets type CryptoSetup interface { - RunHandshake() + StartHandshake() error io.Closer ChangeConnectionID(protocol.ConnectionID) GetSessionTicket() ([]byte, error) - HandleMessage([]byte, protocol.EncryptionLevel) bool + HandleMessage([]byte, protocol.EncryptionLevel) error + NextEvent() Event + SetLargest1RTTAcked(protocol.PacketNumber) error + DiscardInitialKeys() SetHandshakeConfirmed() ConnectionState() ConnectionState @@ -93,10 +114,3 @@ type CryptoSetup interface { Get0RTTSealer() (LongHeaderSealer, error) Get1RTTSealer() (ShortHeaderSealer, error) } - -// ConnWithVersion is the connection used in the ClientHelloInfo. -// It can be used to determine the QUIC version in use. -type ConnWithVersion interface { - net.Conn - GetQUICVersion() protocol.VersionNumber -} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/mockgen.go b/vendor/github.com/quic-go/quic-go/internal/handshake/mockgen.go deleted file mode 100644 index f91e7e8a03..0000000000 --- a/vendor/github.com/quic-go/quic-go/internal/handshake/mockgen.go +++ /dev/null @@ -1,3 +0,0 @@ -package handshake - -//go:generate sh -c "../../mockgen_private.sh handshake mock_handshake_runner_test.go github.com/quic-go/quic-go/internal/handshake handshakeRunner" diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/retry.go b/vendor/github.com/quic-go/quic-go/internal/handshake/retry.go index ff14f7e0d2..68fa53ed13 100644 --- a/vendor/github.com/quic-go/quic-go/internal/handshake/retry.go +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/retry.go @@ -11,13 +11,11 @@ import ( ) var ( - retryAEADdraft29 cipher.AEAD // used for QUIC draft versions up to 34 - retryAEADv1 cipher.AEAD // used for QUIC v1 (RFC 9000) - retryAEADv2 cipher.AEAD // used for QUIC v2 + retryAEADv1 cipher.AEAD // used for QUIC v1 (RFC 9000) + retryAEADv2 cipher.AEAD // used for QUIC v2 (RFC 9369) ) func init() { - retryAEADdraft29 = initAEAD([16]byte{0xcc, 0xce, 0x18, 0x7e, 0xd0, 0x9a, 0x09, 0xd0, 0x57, 0x28, 0x15, 0x5a, 0x6c, 0xb9, 0x6b, 0xe1}) retryAEADv1 = initAEAD([16]byte{0xbe, 0x0c, 0x69, 0x0b, 0x9f, 0x66, 0x57, 0x5a, 0x1d, 0x76, 0x6b, 0x54, 0xe3, 0x68, 0xc8, 0x4e}) retryAEADv2 = initAEAD([16]byte{0x8f, 0xb4, 0xb0, 0x1b, 0x56, 0xac, 0x48, 0xe2, 0x60, 0xfb, 0xcb, 0xce, 0xad, 0x7c, 0xcc, 0x92}) } @@ -35,11 +33,10 @@ func initAEAD(key [16]byte) cipher.AEAD { } var ( - retryBuf bytes.Buffer - retryMutex sync.Mutex - retryNonceDraft29 = [12]byte{0xe5, 0x49, 0x30, 0xf9, 0x7f, 0x21, 0x36, 0xf0, 0x53, 0x0a, 0x8c, 0x1c} - retryNonceV1 = [12]byte{0x46, 0x15, 0x99, 0xd3, 0x5d, 0x63, 0x2b, 0xf2, 0x23, 0x98, 0x25, 0xbb} - retryNonceV2 = [12]byte{0xd8, 0x69, 0x69, 0xbc, 0x2d, 0x7c, 0x6d, 0x99, 0x90, 0xef, 0xb0, 0x4a} + retryBuf bytes.Buffer + retryMutex sync.Mutex + retryNonceV1 = [12]byte{0x46, 0x15, 0x99, 0xd3, 0x5d, 0x63, 0x2b, 0xf2, 0x23, 0x98, 0x25, 0xbb} + retryNonceV2 = [12]byte{0xd8, 0x69, 0x69, 0xbc, 0x2d, 0x7c, 0x6d, 0x99, 0x90, 0xef, 0xb0, 0x4a} ) // GetRetryIntegrityTag calculates the integrity tag on a Retry packet @@ -54,14 +51,10 @@ func GetRetryIntegrityTag(retry []byte, origDestConnID protocol.ConnectionID, ve var tag [16]byte var sealed []byte - //nolint:exhaustive // These are all the versions we support - switch version { - case protocol.Version1: - sealed = retryAEADv1.Seal(tag[:0], retryNonceV1[:], nil, retryBuf.Bytes()) - case protocol.Version2: + if version == protocol.Version2 { sealed = retryAEADv2.Seal(tag[:0], retryNonceV2[:], nil, retryBuf.Bytes()) - default: - sealed = retryAEADdraft29.Seal(tag[:0], retryNonceDraft29[:], nil, retryBuf.Bytes()) + } else { + sealed = retryAEADv1.Seal(tag[:0], retryNonceV1[:], nil, retryBuf.Bytes()) } if len(sealed) != 16 { panic(fmt.Sprintf("unexpected Retry integrity tag length: %d", len(sealed))) diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/session_ticket.go b/vendor/github.com/quic-go/quic-go/internal/handshake/session_ticket.go index 56bcbcd5d0..d3efeb2941 100644 --- a/vendor/github.com/quic-go/quic-go/internal/handshake/session_ticket.go +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/session_ticket.go @@ -10,7 +10,7 @@ import ( "github.com/quic-go/quic-go/quicvarint" ) -const sessionTicketRevision = 2 +const sessionTicketRevision = 3 type sessionTicket struct { Parameters *wire.TransportParameters diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/tls_extension_handler.go b/vendor/github.com/quic-go/quic-go/internal/handshake/tls_extension_handler.go deleted file mode 100644 index ec6431bdac..0000000000 --- a/vendor/github.com/quic-go/quic-go/internal/handshake/tls_extension_handler.go +++ /dev/null @@ -1,68 +0,0 @@ -package handshake - -import ( - "github.com/quic-go/quic-go/internal/protocol" - "github.com/quic-go/quic-go/internal/qtls" -) - -const ( - quicTLSExtensionTypeOldDrafts = 0xffa5 - quicTLSExtensionType = 0x39 -) - -type extensionHandler struct { - ourParams []byte - paramsChan chan []byte - - extensionType uint16 - - perspective protocol.Perspective -} - -var _ tlsExtensionHandler = &extensionHandler{} - -// newExtensionHandler creates a new extension handler -func newExtensionHandler(params []byte, pers protocol.Perspective, v protocol.VersionNumber) tlsExtensionHandler { - et := uint16(quicTLSExtensionType) - if v != protocol.Version1 { - et = quicTLSExtensionTypeOldDrafts - } - return &extensionHandler{ - ourParams: params, - paramsChan: make(chan []byte), - perspective: pers, - extensionType: et, - } -} - -func (h *extensionHandler) GetExtensions(msgType uint8) []qtls.Extension { - if (h.perspective == protocol.PerspectiveClient && messageType(msgType) != typeClientHello) || - (h.perspective == protocol.PerspectiveServer && messageType(msgType) != typeEncryptedExtensions) { - return nil - } - return []qtls.Extension{{ - Type: h.extensionType, - Data: h.ourParams, - }} -} - -func (h *extensionHandler) ReceivedExtensions(msgType uint8, exts []qtls.Extension) { - if (h.perspective == protocol.PerspectiveClient && messageType(msgType) != typeEncryptedExtensions) || - (h.perspective == protocol.PerspectiveServer && messageType(msgType) != typeClientHello) { - return - } - - var data []byte - for _, ext := range exts { - if ext.Type == h.extensionType { - data = ext.Data - break - } - } - - h.paramsChan <- data -} - -func (h *extensionHandler) TransportParameters() <-chan []byte { - return h.paramsChan -} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/updatable_aead.go b/vendor/github.com/quic-go/quic-go/internal/handshake/updatable_aead.go index 89a9dcd620..919b8a5bcf 100644 --- a/vendor/github.com/quic-go/quic-go/internal/handshake/updatable_aead.go +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/updatable_aead.go @@ -10,7 +10,6 @@ import ( "github.com/quic-go/quic-go/internal/protocol" "github.com/quic-go/quic-go/internal/qerr" - "github.com/quic-go/quic-go/internal/qtls" "github.com/quic-go/quic-go/internal/utils" "github.com/quic-go/quic-go/logging" ) @@ -19,15 +18,18 @@ import ( // It's a package-level variable to allow modifying it for testing purposes. var KeyUpdateInterval uint64 = protocol.KeyUpdateInterval +// FirstKeyUpdateInterval is the maximum number of packets we send or receive before initiating the first key update. +// It's a package-level variable to allow modifying it for testing purposes. +var FirstKeyUpdateInterval uint64 = 100 + type updatableAEAD struct { - suite *qtls.CipherSuiteTLS13 + suite *cipherSuite keyPhase protocol.KeyPhase largestAcked protocol.PacketNumber firstPacketNumber protocol.PacketNumber handshakeConfirmed bool - keyUpdateInterval uint64 invalidPacketLimit uint64 invalidPacketCount uint64 @@ -74,7 +76,6 @@ func newUpdatableAEAD(rttStats *utils.RTTStats, tracer logging.ConnectionTracer, largestAcked: protocol.InvalidPacketNumber, firstRcvdWithCurrentKey: protocol.InvalidPacketNumber, firstSentWithCurrentKey: protocol.InvalidPacketNumber, - keyUpdateInterval: KeyUpdateInterval, rttStats: rttStats, tracer: tracer, logger: logger, @@ -116,9 +117,10 @@ func (a *updatableAEAD) getNextTrafficSecret(hash crypto.Hash, ts []byte) []byte return hkdfExpandLabel(hash, ts, []byte{}, "quic ku", hash.Size()) } +// SetReadKey sets the read key. // For the client, this function is called before SetWriteKey. // For the server, this function is called after SetWriteKey. -func (a *updatableAEAD) SetReadKey(suite *qtls.CipherSuiteTLS13, trafficSecret []byte) { +func (a *updatableAEAD) SetReadKey(suite *cipherSuite, trafficSecret []byte) { a.rcvAEAD = createAEAD(suite, trafficSecret, a.version) a.headerDecrypter = newHeaderProtector(suite, trafficSecret, false, a.version) if a.suite == nil { @@ -129,9 +131,10 @@ func (a *updatableAEAD) SetReadKey(suite *qtls.CipherSuiteTLS13, trafficSecret [ a.nextRcvAEAD = createAEAD(suite, a.nextRcvTrafficSecret, a.version) } +// SetWriteKey sets the write key. // For the client, this function is called after SetReadKey. // For the server, this function is called before SetWriteKey. -func (a *updatableAEAD) SetWriteKey(suite *qtls.CipherSuiteTLS13, trafficSecret []byte) { +func (a *updatableAEAD) SetWriteKey(suite *cipherSuite, trafficSecret []byte) { a.sendAEAD = createAEAD(suite, trafficSecret, a.version) a.headerEncrypter = newHeaderProtector(suite, trafficSecret, false, a.version) if a.suite == nil { @@ -142,7 +145,7 @@ func (a *updatableAEAD) SetWriteKey(suite *qtls.CipherSuiteTLS13, trafficSecret a.nextSendAEAD = createAEAD(suite, a.nextSendTrafficSecret, a.version) } -func (a *updatableAEAD) setAEADParameters(aead cipher.AEAD, suite *qtls.CipherSuiteTLS13) { +func (a *updatableAEAD) setAEADParameters(aead cipher.AEAD, suite *cipherSuite) { a.nonceBuf = make([]byte, aead.NonceSize()) a.aeadOverhead = aead.Overhead() a.suite = suite @@ -284,11 +287,17 @@ func (a *updatableAEAD) shouldInitiateKeyUpdate() bool { if !a.updateAllowed() { return false } - if a.numRcvdWithCurrentKey >= a.keyUpdateInterval { + // Initiate the first key update shortly after the handshake, in order to exercise the key update mechanism. + if a.keyPhase == 0 { + if a.numRcvdWithCurrentKey >= FirstKeyUpdateInterval || a.numSentWithCurrentKey >= FirstKeyUpdateInterval { + return true + } + } + if a.numRcvdWithCurrentKey >= KeyUpdateInterval { a.logger.Debugf("Received %d packets with current key phase. Initiating key update to the next key phase: %d", a.numRcvdWithCurrentKey, a.keyPhase+1) return true } - if a.numSentWithCurrentKey >= a.keyUpdateInterval { + if a.numSentWithCurrentKey >= KeyUpdateInterval { a.logger.Debugf("Sent %d packets with current key phase. Initiating key update to the next key phase: %d", a.numSentWithCurrentKey, a.keyPhase+1) return true } diff --git a/vendor/github.com/quic-go/quic-go/internal/protocol/params.go b/vendor/github.com/quic-go/quic-go/internal/protocol/params.go index 60c8677944..fe3a756258 100644 --- a/vendor/github.com/quic-go/quic-go/internal/protocol/params.go +++ b/vendor/github.com/quic-go/quic-go/internal/protocol/params.go @@ -5,6 +5,9 @@ import "time" // DesiredReceiveBufferSize is the kernel UDP receive buffer size that we'd like to use. const DesiredReceiveBufferSize = (1 << 20) * 2 // 2 MB +// DesiredSendBufferSize is the kernel UDP send buffer size that we'd like to use. +const DesiredSendBufferSize = (1 << 20) * 2 // 2 MB + // InitialPacketSizeIPv4 is the maximum packet size that we use for sending IPv4 packets. const InitialPacketSizeIPv4 = 1252 diff --git a/vendor/github.com/quic-go/quic-go/internal/protocol/protocol.go b/vendor/github.com/quic-go/quic-go/internal/protocol/protocol.go index 8241e2741e..b8104882bc 100644 --- a/vendor/github.com/quic-go/quic-go/internal/protocol/protocol.go +++ b/vendor/github.com/quic-go/quic-go/internal/protocol/protocol.go @@ -43,6 +43,21 @@ const ( ECNCE // 11 ) +func (e ECN) String() string { + switch e { + case ECNNon: + return "Not-ECT" + case ECT1: + return "ECT(1)" + case ECT0: + return "ECT(0)" + case ECNCE: + return "CE" + default: + return fmt.Sprintf("invalid ECN value: %d", e) + } +} + // A ByteCount in QUIC type ByteCount int64 @@ -59,7 +74,10 @@ type StatelessResetToken [16]byte // ethernet's max size, minus the IP and UDP headers. IPv6 has a 40 byte header, // UDP adds an additional 8 bytes. This is a total overhead of 48 bytes. // Ethernet's max packet size is 1500 bytes, 1500 - 48 = 1452. -const MaxPacketBufferSize ByteCount = 1452 +const MaxPacketBufferSize = 1452 + +// MaxLargePacketBufferSize is used when using GSO +const MaxLargePacketBufferSize = 20 * 1024 // MinInitialPacketSize is the minimum size an Initial packet is required to have. const MinInitialPacketSize = 1200 @@ -77,6 +95,9 @@ const MinConnectionIDLenInitial = 8 // DefaultAckDelayExponent is the default ack delay exponent const DefaultAckDelayExponent = 3 +// DefaultActiveConnectionIDLimit is the default active connection ID limit +const DefaultActiveConnectionIDLimit = 2 + // MaxAckDelayExponent is the maximum ack delay exponent const MaxAckDelayExponent = 20 diff --git a/vendor/github.com/quic-go/quic-go/internal/protocol/version.go b/vendor/github.com/quic-go/quic-go/internal/protocol/version.go index 2ae7a1154e..5c2decbdc9 100644 --- a/vendor/github.com/quic-go/quic-go/internal/protocol/version.go +++ b/vendor/github.com/quic-go/quic-go/internal/protocol/version.go @@ -18,36 +18,27 @@ const ( // The version numbers, making grepping easier const ( - VersionTLS VersionNumber = 0x1 - VersionWhatever VersionNumber = math.MaxUint32 - 1 // for when the version doesn't matter - VersionUnknown VersionNumber = math.MaxUint32 - VersionDraft29 VersionNumber = 0xff00001d - Version1 VersionNumber = 0x1 - Version2 VersionNumber = 0x6b3343cf + VersionUnknown VersionNumber = math.MaxUint32 + versionDraft29 VersionNumber = 0xff00001d // draft-29 used to be a widely deployed version + Version1 VersionNumber = 0x1 + Version2 VersionNumber = 0x6b3343cf ) // SupportedVersions lists the versions that the server supports // must be in sorted descending order -var SupportedVersions = []VersionNumber{Version1, Version2, VersionDraft29} +var SupportedVersions = []VersionNumber{Version1, Version2} // IsValidVersion says if the version is known to quic-go func IsValidVersion(v VersionNumber) bool { - return v == VersionTLS || IsSupportedVersion(SupportedVersions, v) + return v == Version1 || IsSupportedVersion(SupportedVersions, v) } func (vn VersionNumber) String() string { - // For releases, VersionTLS will be set to a draft version. - // A switch statement can't contain duplicate cases. - if vn == VersionTLS && VersionTLS != VersionDraft29 && VersionTLS != Version1 { - return "TLS dev version (WIP)" - } //nolint:exhaustive switch vn { - case VersionWhatever: - return "whatever" case VersionUnknown: return "unknown" - case VersionDraft29: + case versionDraft29: return "draft-29" case Version1: return "v1" diff --git a/vendor/github.com/quic-go/quic-go/internal/qerr/error_codes.go b/vendor/github.com/quic-go/quic-go/internal/qerr/error_codes.go index cc846df6a7..a037acd22e 100644 --- a/vendor/github.com/quic-go/quic-go/internal/qerr/error_codes.go +++ b/vendor/github.com/quic-go/quic-go/internal/qerr/error_codes.go @@ -40,7 +40,7 @@ func (e TransportErrorCode) Message() string { if !e.IsCryptoError() { return "" } - return qtls.Alert(e - 0x100).Error() + return qtls.AlertError(e - 0x100).Error() } func (e TransportErrorCode) String() string { diff --git a/vendor/github.com/quic-go/quic-go/internal/qerr/errors.go b/vendor/github.com/quic-go/quic-go/internal/qerr/errors.go index 26ea344521..2d8511f776 100644 --- a/vendor/github.com/quic-go/quic-go/internal/qerr/errors.go +++ b/vendor/github.com/quic-go/quic-go/internal/qerr/errors.go @@ -17,15 +17,16 @@ type TransportError struct { FrameType uint64 ErrorCode TransportErrorCode ErrorMessage string + error error // only set for local errors, sometimes } var _ error = &TransportError{} // NewLocalCryptoError create a new TransportError instance for a crypto error -func NewLocalCryptoError(tlsAlert uint8, errorMessage string) *TransportError { +func NewLocalCryptoError(tlsAlert uint8, err error) *TransportError { return &TransportError{ - ErrorCode: 0x100 + TransportErrorCode(tlsAlert), - ErrorMessage: errorMessage, + ErrorCode: 0x100 + TransportErrorCode(tlsAlert), + error: err, } } @@ -35,6 +36,9 @@ func (e *TransportError) Error() string { str += fmt.Sprintf(" (frame type: %#x)", e.FrameType) } msg := e.ErrorMessage + if len(msg) == 0 && e.error != nil { + msg = e.error.Error() + } if len(msg) == 0 { msg = e.ErrorCode.Message() } @@ -48,6 +52,10 @@ func (e *TransportError) Is(target error) bool { return target == net.ErrClosed } +func (e *TransportError) Unwrap() error { + return e.error +} + // An ApplicationErrorCode is an application-defined error code. type ApplicationErrorCode uint64 diff --git a/vendor/github.com/quic-go/quic-go/internal/qtls/cipher_suite_go121.go b/vendor/github.com/quic-go/quic-go/internal/qtls/cipher_suite_go121.go new file mode 100644 index 0000000000..aa8c768fd2 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/qtls/cipher_suite_go121.go @@ -0,0 +1,66 @@ +//go:build go1.21 + +package qtls + +import ( + "crypto" + "crypto/cipher" + "crypto/tls" + "fmt" + "unsafe" +) + +type cipherSuiteTLS13 struct { + ID uint16 + KeyLen int + AEAD func(key, fixedNonce []byte) cipher.AEAD + Hash crypto.Hash +} + +//go:linkname cipherSuiteTLS13ByID crypto/tls.cipherSuiteTLS13ByID +func cipherSuiteTLS13ByID(id uint16) *cipherSuiteTLS13 + +//go:linkname cipherSuitesTLS13 crypto/tls.cipherSuitesTLS13 +var cipherSuitesTLS13 []unsafe.Pointer + +//go:linkname defaultCipherSuitesTLS13 crypto/tls.defaultCipherSuitesTLS13 +var defaultCipherSuitesTLS13 []uint16 + +//go:linkname defaultCipherSuitesTLS13NoAES crypto/tls.defaultCipherSuitesTLS13NoAES +var defaultCipherSuitesTLS13NoAES []uint16 + +var cipherSuitesModified bool + +// SetCipherSuite modifies the cipherSuiteTLS13 slice of cipher suites inside qtls +// such that it only contains the cipher suite with the chosen id. +// The reset function returned resets them back to the original value. +func SetCipherSuite(id uint16) (reset func()) { + if cipherSuitesModified { + panic("cipher suites modified multiple times without resetting") + } + cipherSuitesModified = true + + origCipherSuitesTLS13 := append([]unsafe.Pointer{}, cipherSuitesTLS13...) + origDefaultCipherSuitesTLS13 := append([]uint16{}, defaultCipherSuitesTLS13...) + origDefaultCipherSuitesTLS13NoAES := append([]uint16{}, defaultCipherSuitesTLS13NoAES...) + // The order is given by the order of the slice elements in cipherSuitesTLS13 in qtls. + switch id { + case tls.TLS_AES_128_GCM_SHA256: + cipherSuitesTLS13 = cipherSuitesTLS13[:1] + case tls.TLS_CHACHA20_POLY1305_SHA256: + cipherSuitesTLS13 = cipherSuitesTLS13[1:2] + case tls.TLS_AES_256_GCM_SHA384: + cipherSuitesTLS13 = cipherSuitesTLS13[2:] + default: + panic(fmt.Sprintf("unexpected cipher suite: %d", id)) + } + defaultCipherSuitesTLS13 = []uint16{id} + defaultCipherSuitesTLS13NoAES = []uint16{id} + + return func() { + cipherSuitesTLS13 = origCipherSuitesTLS13 + defaultCipherSuitesTLS13 = origDefaultCipherSuitesTLS13 + defaultCipherSuitesTLS13NoAES = origDefaultCipherSuitesTLS13NoAES + cipherSuitesModified = false + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/qtls/client_session_cache.go b/vendor/github.com/quic-go/quic-go/internal/qtls/client_session_cache.go new file mode 100644 index 0000000000..519895ee62 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/qtls/client_session_cache.go @@ -0,0 +1,61 @@ +//go:build go1.21 + +package qtls + +import ( + "crypto/tls" +) + +type clientSessionCache struct { + getData func() []byte + setData func([]byte) + wrapped tls.ClientSessionCache +} + +var _ tls.ClientSessionCache = &clientSessionCache{} + +func (c clientSessionCache) Put(key string, cs *tls.ClientSessionState) { + if cs == nil { + c.wrapped.Put(key, nil) + return + } + ticket, state, err := cs.ResumptionState() + if err != nil || state == nil { + c.wrapped.Put(key, cs) + return + } + state.Extra = append(state.Extra, addExtraPrefix(c.getData())) + newCS, err := tls.NewResumptionState(ticket, state) + if err != nil { + // It's not clear why this would error. Just save the original state. + c.wrapped.Put(key, cs) + return + } + c.wrapped.Put(key, newCS) +} + +func (c clientSessionCache) Get(key string) (*tls.ClientSessionState, bool) { + cs, ok := c.wrapped.Get(key) + if !ok || cs == nil { + return cs, ok + } + ticket, state, err := cs.ResumptionState() + if err != nil { + // It's not clear why this would error. + // Remove the ticket from the session cache, so we don't run into this error over and over again + c.wrapped.Put(key, nil) + return nil, false + } + // restore QUIC transport parameters and RTT stored in state.Extra + if extra := findExtraData(state.Extra); extra != nil { + c.setData(extra) + } + session, err := tls.NewResumptionState(ticket, state) + if err != nil { + // It's not clear why this would error. + // Remove the ticket from the session cache, so we don't run into this error over and over again + c.wrapped.Put(key, nil) + return nil, false + } + return session, true +} diff --git a/vendor/github.com/quic-go/quic-go/internal/qtls/go118.go b/vendor/github.com/quic-go/quic-go/internal/qtls/go118.go deleted file mode 100644 index e47dfe4c27..0000000000 --- a/vendor/github.com/quic-go/quic-go/internal/qtls/go118.go +++ /dev/null @@ -1,99 +0,0 @@ -//go:build go1.18 && !go1.19 - -package qtls - -import ( - "crypto" - "crypto/cipher" - "crypto/tls" - "net" - "unsafe" - - "github.com/quic-go/qtls-go1-18" -) - -type ( - // Alert is a TLS alert - Alert = qtls.Alert - // A Certificate is qtls.Certificate. - Certificate = qtls.Certificate - // CertificateRequestInfo contains inforamtion about a certificate request. - CertificateRequestInfo = qtls.CertificateRequestInfo - // A CipherSuiteTLS13 is a cipher suite for TLS 1.3 - CipherSuiteTLS13 = qtls.CipherSuiteTLS13 - // ClientHelloInfo contains information about a ClientHello. - ClientHelloInfo = qtls.ClientHelloInfo - // ClientSessionCache is a cache used for session resumption. - ClientSessionCache = qtls.ClientSessionCache - // ClientSessionState is a state needed for session resumption. - ClientSessionState = qtls.ClientSessionState - // A Config is a qtls.Config. - Config = qtls.Config - // A Conn is a qtls.Conn. - Conn = qtls.Conn - // ConnectionState contains information about the state of the connection. - ConnectionState = qtls.ConnectionStateWith0RTT - // EncryptionLevel is the encryption level of a message. - EncryptionLevel = qtls.EncryptionLevel - // Extension is a TLS extension - Extension = qtls.Extension - // ExtraConfig is the qtls.ExtraConfig - ExtraConfig = qtls.ExtraConfig - // RecordLayer is a qtls RecordLayer. - RecordLayer = qtls.RecordLayer -) - -const ( - // EncryptionHandshake is the Handshake encryption level - EncryptionHandshake = qtls.EncryptionHandshake - // Encryption0RTT is the 0-RTT encryption level - Encryption0RTT = qtls.Encryption0RTT - // EncryptionApplication is the application data encryption level - EncryptionApplication = qtls.EncryptionApplication -) - -// AEADAESGCMTLS13 creates a new AES-GCM AEAD for TLS 1.3 -func AEADAESGCMTLS13(key, fixedNonce []byte) cipher.AEAD { - return qtls.AEADAESGCMTLS13(key, fixedNonce) -} - -// Client returns a new TLS client side connection. -func Client(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { - return qtls.Client(conn, config, extraConfig) -} - -// Server returns a new TLS server side connection. -func Server(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { - return qtls.Server(conn, config, extraConfig) -} - -func GetConnectionState(conn *Conn) ConnectionState { - return conn.ConnectionStateWith0RTT() -} - -// ToTLSConnectionState extracts the tls.ConnectionState -func ToTLSConnectionState(cs ConnectionState) tls.ConnectionState { - return cs.ConnectionState -} - -type cipherSuiteTLS13 struct { - ID uint16 - KeyLen int - AEAD func(key, fixedNonce []byte) cipher.AEAD - Hash crypto.Hash -} - -//go:linkname cipherSuiteTLS13ByID github.com/quic-go/qtls-go1-18.cipherSuiteTLS13ByID -func cipherSuiteTLS13ByID(id uint16) *cipherSuiteTLS13 - -// CipherSuiteTLS13ByID gets a TLS 1.3 cipher suite. -func CipherSuiteTLS13ByID(id uint16) *CipherSuiteTLS13 { - val := cipherSuiteTLS13ByID(id) - cs := (*cipherSuiteTLS13)(unsafe.Pointer(val)) - return &qtls.CipherSuiteTLS13{ - ID: cs.ID, - KeyLen: cs.KeyLen, - AEAD: cs.AEAD, - Hash: cs.Hash, - } -} diff --git a/vendor/github.com/quic-go/quic-go/internal/qtls/go119.go b/vendor/github.com/quic-go/quic-go/internal/qtls/go119.go deleted file mode 100644 index 6c804ccef6..0000000000 --- a/vendor/github.com/quic-go/quic-go/internal/qtls/go119.go +++ /dev/null @@ -1,99 +0,0 @@ -//go:build go1.19 && !go1.20 - -package qtls - -import ( - "crypto" - "crypto/cipher" - "crypto/tls" - "net" - "unsafe" - - "github.com/quic-go/qtls-go1-19" -) - -type ( - // Alert is a TLS alert - Alert = qtls.Alert - // A Certificate is qtls.Certificate. - Certificate = qtls.Certificate - // CertificateRequestInfo contains information about a certificate request. - CertificateRequestInfo = qtls.CertificateRequestInfo - // A CipherSuiteTLS13 is a cipher suite for TLS 1.3 - CipherSuiteTLS13 = qtls.CipherSuiteTLS13 - // ClientHelloInfo contains information about a ClientHello. - ClientHelloInfo = qtls.ClientHelloInfo - // ClientSessionCache is a cache used for session resumption. - ClientSessionCache = qtls.ClientSessionCache - // ClientSessionState is a state needed for session resumption. - ClientSessionState = qtls.ClientSessionState - // A Config is a qtls.Config. - Config = qtls.Config - // A Conn is a qtls.Conn. - Conn = qtls.Conn - // ConnectionState contains information about the state of the connection. - ConnectionState = qtls.ConnectionStateWith0RTT - // EncryptionLevel is the encryption level of a message. - EncryptionLevel = qtls.EncryptionLevel - // Extension is a TLS extension - Extension = qtls.Extension - // ExtraConfig is the qtls.ExtraConfig - ExtraConfig = qtls.ExtraConfig - // RecordLayer is a qtls RecordLayer. - RecordLayer = qtls.RecordLayer -) - -const ( - // EncryptionHandshake is the Handshake encryption level - EncryptionHandshake = qtls.EncryptionHandshake - // Encryption0RTT is the 0-RTT encryption level - Encryption0RTT = qtls.Encryption0RTT - // EncryptionApplication is the application data encryption level - EncryptionApplication = qtls.EncryptionApplication -) - -// AEADAESGCMTLS13 creates a new AES-GCM AEAD for TLS 1.3 -func AEADAESGCMTLS13(key, fixedNonce []byte) cipher.AEAD { - return qtls.AEADAESGCMTLS13(key, fixedNonce) -} - -// Client returns a new TLS client side connection. -func Client(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { - return qtls.Client(conn, config, extraConfig) -} - -// Server returns a new TLS server side connection. -func Server(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { - return qtls.Server(conn, config, extraConfig) -} - -func GetConnectionState(conn *Conn) ConnectionState { - return conn.ConnectionStateWith0RTT() -} - -// ToTLSConnectionState extracts the tls.ConnectionState -func ToTLSConnectionState(cs ConnectionState) tls.ConnectionState { - return cs.ConnectionState -} - -type cipherSuiteTLS13 struct { - ID uint16 - KeyLen int - AEAD func(key, fixedNonce []byte) cipher.AEAD - Hash crypto.Hash -} - -//go:linkname cipherSuiteTLS13ByID github.com/quic-go/qtls-go1-19.cipherSuiteTLS13ByID -func cipherSuiteTLS13ByID(id uint16) *cipherSuiteTLS13 - -// CipherSuiteTLS13ByID gets a TLS 1.3 cipher suite. -func CipherSuiteTLS13ByID(id uint16) *CipherSuiteTLS13 { - val := cipherSuiteTLS13ByID(id) - cs := (*cipherSuiteTLS13)(unsafe.Pointer(val)) - return &qtls.CipherSuiteTLS13{ - ID: cs.ID, - KeyLen: cs.KeyLen, - AEAD: cs.AEAD, - Hash: cs.Hash, - } -} diff --git a/vendor/github.com/quic-go/quic-go/internal/qtls/go120.go b/vendor/github.com/quic-go/quic-go/internal/qtls/go120.go index b9baa52fe3..3b50441c47 100644 --- a/vendor/github.com/quic-go/quic-go/internal/qtls/go120.go +++ b/vendor/github.com/quic-go/quic-go/internal/qtls/go120.go @@ -1,99 +1,145 @@ -//go:build go1.20 +//go:build go1.20 && !go1.21 package qtls import ( - "crypto" - "crypto/cipher" "crypto/tls" - "net" + "fmt" "unsafe" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/qtls-go1-20" ) type ( - // Alert is a TLS alert - Alert = qtls.Alert - // A Certificate is qtls.Certificate. - Certificate = qtls.Certificate - // CertificateRequestInfo contains information about a certificate request. - CertificateRequestInfo = qtls.CertificateRequestInfo - // A CipherSuiteTLS13 is a cipher suite for TLS 1.3 - CipherSuiteTLS13 = qtls.CipherSuiteTLS13 - // ClientHelloInfo contains information about a ClientHello. - ClientHelloInfo = qtls.ClientHelloInfo - // ClientSessionCache is a cache used for session resumption. - ClientSessionCache = qtls.ClientSessionCache - // ClientSessionState is a state needed for session resumption. - ClientSessionState = qtls.ClientSessionState - // A Config is a qtls.Config. - Config = qtls.Config - // A Conn is a qtls.Conn. - Conn = qtls.Conn - // ConnectionState contains information about the state of the connection. - ConnectionState = qtls.ConnectionStateWith0RTT - // EncryptionLevel is the encryption level of a message. - EncryptionLevel = qtls.EncryptionLevel - // Extension is a TLS extension - Extension = qtls.Extension - // ExtraConfig is the qtls.ExtraConfig - ExtraConfig = qtls.ExtraConfig - // RecordLayer is a qtls RecordLayer. - RecordLayer = qtls.RecordLayer + QUICConn = qtls.QUICConn + QUICConfig = qtls.QUICConfig + QUICEvent = qtls.QUICEvent + QUICEventKind = qtls.QUICEventKind + QUICEncryptionLevel = qtls.QUICEncryptionLevel + AlertError = qtls.AlertError ) const ( - // EncryptionHandshake is the Handshake encryption level - EncryptionHandshake = qtls.EncryptionHandshake - // Encryption0RTT is the 0-RTT encryption level - Encryption0RTT = qtls.Encryption0RTT - // EncryptionApplication is the application data encryption level - EncryptionApplication = qtls.EncryptionApplication + QUICEncryptionLevelInitial = qtls.QUICEncryptionLevelInitial + QUICEncryptionLevelEarly = qtls.QUICEncryptionLevelEarly + QUICEncryptionLevelHandshake = qtls.QUICEncryptionLevelHandshake + QUICEncryptionLevelApplication = qtls.QUICEncryptionLevelApplication ) -// AEADAESGCMTLS13 creates a new AES-GCM AEAD for TLS 1.3 -func AEADAESGCMTLS13(key, fixedNonce []byte) cipher.AEAD { - return qtls.AEADAESGCMTLS13(key, fixedNonce) +const ( + QUICNoEvent = qtls.QUICNoEvent + QUICSetReadSecret = qtls.QUICSetReadSecret + QUICSetWriteSecret = qtls.QUICSetWriteSecret + QUICWriteData = qtls.QUICWriteData + QUICTransportParameters = qtls.QUICTransportParameters + QUICTransportParametersRequired = qtls.QUICTransportParametersRequired + QUICRejectedEarlyData = qtls.QUICRejectedEarlyData + QUICHandshakeDone = qtls.QUICHandshakeDone +) + +func SetupConfigForServer(conf *QUICConfig, enable0RTT bool, getDataForSessionTicket func() []byte, accept0RTT func([]byte) bool) { + qtls.InitSessionTicketKeys(conf.TLSConfig) + conf.TLSConfig = conf.TLSConfig.Clone() + conf.TLSConfig.MinVersion = tls.VersionTLS13 + conf.ExtraConfig = &qtls.ExtraConfig{ + Enable0RTT: enable0RTT, + Accept0RTT: accept0RTT, + GetAppDataForSessionTicket: getDataForSessionTicket, + } } -// Client returns a new TLS client side connection. -func Client(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { - return qtls.Client(conn, config, extraConfig) +func SetupConfigForClient(conf *QUICConfig, getDataForSessionState func() []byte, setDataFromSessionState func([]byte)) { + conf.ExtraConfig = &qtls.ExtraConfig{ + GetAppDataForSessionState: getDataForSessionState, + SetAppDataFromSessionState: setDataFromSessionState, + } } -// Server returns a new TLS server side connection. -func Server(conn net.Conn, config *Config, extraConfig *ExtraConfig) *Conn { - return qtls.Server(conn, config, extraConfig) +func QUICServer(config *QUICConfig) *QUICConn { + return qtls.QUICServer(config) } -func GetConnectionState(conn *Conn) ConnectionState { - return conn.ConnectionStateWith0RTT() +func QUICClient(config *QUICConfig) *QUICConn { + return qtls.QUICClient(config) } -// ToTLSConnectionState extracts the tls.ConnectionState -func ToTLSConnectionState(cs ConnectionState) tls.ConnectionState { - return cs.ConnectionState +func ToTLSEncryptionLevel(e protocol.EncryptionLevel) qtls.QUICEncryptionLevel { + switch e { + case protocol.EncryptionInitial: + return qtls.QUICEncryptionLevelInitial + case protocol.EncryptionHandshake: + return qtls.QUICEncryptionLevelHandshake + case protocol.Encryption1RTT: + return qtls.QUICEncryptionLevelApplication + case protocol.Encryption0RTT: + return qtls.QUICEncryptionLevelEarly + default: + panic(fmt.Sprintf("unexpected encryption level: %s", e)) + } } -type cipherSuiteTLS13 struct { - ID uint16 - KeyLen int - AEAD func(key, fixedNonce []byte) cipher.AEAD - Hash crypto.Hash +func FromTLSEncryptionLevel(e qtls.QUICEncryptionLevel) protocol.EncryptionLevel { + switch e { + case qtls.QUICEncryptionLevelInitial: + return protocol.EncryptionInitial + case qtls.QUICEncryptionLevelHandshake: + return protocol.EncryptionHandshake + case qtls.QUICEncryptionLevelApplication: + return protocol.Encryption1RTT + case qtls.QUICEncryptionLevelEarly: + return protocol.Encryption0RTT + default: + panic(fmt.Sprintf("unexpect encryption level: %s", e)) + } } -//go:linkname cipherSuiteTLS13ByID github.com/quic-go/qtls-go1-20.cipherSuiteTLS13ByID -func cipherSuiteTLS13ByID(id uint16) *cipherSuiteTLS13 - -// CipherSuiteTLS13ByID gets a TLS 1.3 cipher suite. -func CipherSuiteTLS13ByID(id uint16) *CipherSuiteTLS13 { - val := cipherSuiteTLS13ByID(id) - cs := (*cipherSuiteTLS13)(unsafe.Pointer(val)) - return &qtls.CipherSuiteTLS13{ - ID: cs.ID, - KeyLen: cs.KeyLen, - AEAD: cs.AEAD, - Hash: cs.Hash, +//go:linkname cipherSuitesTLS13 github.com/quic-go/qtls-go1-20.cipherSuitesTLS13 +var cipherSuitesTLS13 []unsafe.Pointer + +//go:linkname defaultCipherSuitesTLS13 github.com/quic-go/qtls-go1-20.defaultCipherSuitesTLS13 +var defaultCipherSuitesTLS13 []uint16 + +//go:linkname defaultCipherSuitesTLS13NoAES github.com/quic-go/qtls-go1-20.defaultCipherSuitesTLS13NoAES +var defaultCipherSuitesTLS13NoAES []uint16 + +var cipherSuitesModified bool + +// SetCipherSuite modifies the cipherSuiteTLS13 slice of cipher suites inside qtls +// such that it only contains the cipher suite with the chosen id. +// The reset function returned resets them back to the original value. +func SetCipherSuite(id uint16) (reset func()) { + if cipherSuitesModified { + panic("cipher suites modified multiple times without resetting") + } + cipherSuitesModified = true + + origCipherSuitesTLS13 := append([]unsafe.Pointer{}, cipherSuitesTLS13...) + origDefaultCipherSuitesTLS13 := append([]uint16{}, defaultCipherSuitesTLS13...) + origDefaultCipherSuitesTLS13NoAES := append([]uint16{}, defaultCipherSuitesTLS13NoAES...) + // The order is given by the order of the slice elements in cipherSuitesTLS13 in qtls. + switch id { + case tls.TLS_AES_128_GCM_SHA256: + cipherSuitesTLS13 = cipherSuitesTLS13[:1] + case tls.TLS_CHACHA20_POLY1305_SHA256: + cipherSuitesTLS13 = cipherSuitesTLS13[1:2] + case tls.TLS_AES_256_GCM_SHA384: + cipherSuitesTLS13 = cipherSuitesTLS13[2:] + default: + panic(fmt.Sprintf("unexpected cipher suite: %d", id)) } + defaultCipherSuitesTLS13 = []uint16{id} + defaultCipherSuitesTLS13NoAES = []uint16{id} + + return func() { + cipherSuitesTLS13 = origCipherSuitesTLS13 + defaultCipherSuitesTLS13 = origDefaultCipherSuitesTLS13 + defaultCipherSuitesTLS13NoAES = origDefaultCipherSuitesTLS13NoAES + cipherSuitesModified = false + } +} + +func SendSessionTicket(c *QUICConn, allow0RTT bool) error { + return c.SendSessionTicket(allow0RTT) } diff --git a/vendor/github.com/quic-go/quic-go/internal/qtls/go121.go b/vendor/github.com/quic-go/quic-go/internal/qtls/go121.go index b33406397b..4aebc4a14c 100644 --- a/vendor/github.com/quic-go/quic-go/internal/qtls/go121.go +++ b/vendor/github.com/quic-go/quic-go/internal/qtls/go121.go @@ -2,4 +2,160 @@ package qtls -var _ int = "The version of quic-go you're using can't be built on Go 1.21 yet. For more details, please see https://github.com/quic-go/quic-go/wiki/quic-go-and-Go-versions." +import ( + "bytes" + "crypto/tls" + "fmt" + + "github.com/quic-go/quic-go/internal/protocol" +) + +type ( + QUICConn = tls.QUICConn + QUICConfig = tls.QUICConfig + QUICEvent = tls.QUICEvent + QUICEventKind = tls.QUICEventKind + QUICEncryptionLevel = tls.QUICEncryptionLevel + QUICSessionTicketOptions = tls.QUICSessionTicketOptions + AlertError = tls.AlertError +) + +const ( + QUICEncryptionLevelInitial = tls.QUICEncryptionLevelInitial + QUICEncryptionLevelEarly = tls.QUICEncryptionLevelEarly + QUICEncryptionLevelHandshake = tls.QUICEncryptionLevelHandshake + QUICEncryptionLevelApplication = tls.QUICEncryptionLevelApplication +) + +const ( + QUICNoEvent = tls.QUICNoEvent + QUICSetReadSecret = tls.QUICSetReadSecret + QUICSetWriteSecret = tls.QUICSetWriteSecret + QUICWriteData = tls.QUICWriteData + QUICTransportParameters = tls.QUICTransportParameters + QUICTransportParametersRequired = tls.QUICTransportParametersRequired + QUICRejectedEarlyData = tls.QUICRejectedEarlyData + QUICHandshakeDone = tls.QUICHandshakeDone +) + +func QUICServer(config *QUICConfig) *QUICConn { return tls.QUICServer(config) } +func QUICClient(config *QUICConfig) *QUICConn { return tls.QUICClient(config) } + +func SetupConfigForServer(qconf *QUICConfig, _ bool, getData func() []byte, accept0RTT func([]byte) bool) { + conf := qconf.TLSConfig + + // Workaround for https://github.com/golang/go/issues/60506. + // This initializes the session tickets _before_ cloning the config. + _, _ = conf.DecryptTicket(nil, tls.ConnectionState{}) + + conf = conf.Clone() + conf.MinVersion = tls.VersionTLS13 + qconf.TLSConfig = conf + + // add callbacks to save transport parameters into the session ticket + origWrapSession := conf.WrapSession + conf.WrapSession = func(cs tls.ConnectionState, state *tls.SessionState) ([]byte, error) { + // Add QUIC transport parameters if this is a 0-RTT packet. + // TODO(#3853): also save the RTT for non-0-RTT tickets + if state.EarlyData { + state.Extra = append(state.Extra, addExtraPrefix(getData())) + } + if origWrapSession != nil { + return origWrapSession(cs, state) + } + b, err := conf.EncryptTicket(cs, state) + return b, err + } + origUnwrapSession := conf.UnwrapSession + // UnwrapSession might be called multiple times, as the client can use multiple session tickets. + // However, using 0-RTT is only possible with the first session ticket. + // crypto/tls guarantees that this callback is called in the same order as the session ticket in the ClientHello. + var unwrapCount int + conf.UnwrapSession = func(identity []byte, connState tls.ConnectionState) (*tls.SessionState, error) { + unwrapCount++ + var state *tls.SessionState + var err error + if origUnwrapSession != nil { + state, err = origUnwrapSession(identity, connState) + } else { + state, err = conf.DecryptTicket(identity, connState) + } + if err != nil || state == nil { + return nil, err + } + if state.EarlyData { + extra := findExtraData(state.Extra) + if unwrapCount == 1 && extra != nil { // first session ticket + state.EarlyData = accept0RTT(extra) + } else { // subsequent session ticket, can't be used for 0-RTT + state.EarlyData = false + } + } + return state, nil + } +} + +func SetupConfigForClient(qconf *QUICConfig, getData func() []byte, setData func([]byte)) { + conf := qconf.TLSConfig + if conf.ClientSessionCache != nil { + origCache := conf.ClientSessionCache + conf.ClientSessionCache = &clientSessionCache{ + wrapped: origCache, + getData: getData, + setData: setData, + } + } +} + +func ToTLSEncryptionLevel(e protocol.EncryptionLevel) tls.QUICEncryptionLevel { + switch e { + case protocol.EncryptionInitial: + return tls.QUICEncryptionLevelInitial + case protocol.EncryptionHandshake: + return tls.QUICEncryptionLevelHandshake + case protocol.Encryption1RTT: + return tls.QUICEncryptionLevelApplication + case protocol.Encryption0RTT: + return tls.QUICEncryptionLevelEarly + default: + panic(fmt.Sprintf("unexpected encryption level: %s", e)) + } +} + +func FromTLSEncryptionLevel(e tls.QUICEncryptionLevel) protocol.EncryptionLevel { + switch e { + case tls.QUICEncryptionLevelInitial: + return protocol.EncryptionInitial + case tls.QUICEncryptionLevelHandshake: + return protocol.EncryptionHandshake + case tls.QUICEncryptionLevelApplication: + return protocol.Encryption1RTT + case tls.QUICEncryptionLevelEarly: + return protocol.Encryption0RTT + default: + panic(fmt.Sprintf("unexpect encryption level: %s", e)) + } +} + +const extraPrefix = "quic-go1" + +func addExtraPrefix(b []byte) []byte { + return append([]byte(extraPrefix), b...) +} + +func findExtraData(extras [][]byte) []byte { + prefix := []byte(extraPrefix) + for _, extra := range extras { + if len(extra) < len(prefix) || !bytes.Equal(prefix, extra[:len(prefix)]) { + continue + } + return extra[len(prefix):] + } + return nil +} + +func SendSessionTicket(c *QUICConn, allow0RTT bool) error { + return c.SendSessionTicket(tls.QUICSessionTicketOptions{ + EarlyData: allow0RTT, + }) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/qtls/go_oldversion.go b/vendor/github.com/quic-go/quic-go/internal/qtls/go_oldversion.go index f433b328ce..0fca80a388 100644 --- a/vendor/github.com/quic-go/quic-go/internal/qtls/go_oldversion.go +++ b/vendor/github.com/quic-go/quic-go/internal/qtls/go_oldversion.go @@ -1,4 +1,4 @@ -//go:build !go1.18 +//go:build !go1.20 package qtls diff --git a/vendor/github.com/quic-go/quic-go/internal/utils/atomic_bool.go b/vendor/github.com/quic-go/quic-go/internal/utils/atomic_bool.go deleted file mode 100644 index cf4642504e..0000000000 --- a/vendor/github.com/quic-go/quic-go/internal/utils/atomic_bool.go +++ /dev/null @@ -1,22 +0,0 @@ -package utils - -import "sync/atomic" - -// An AtomicBool is an atomic bool -type AtomicBool struct { - v int32 -} - -// Set sets the value -func (a *AtomicBool) Set(value bool) { - var n int32 - if value { - n = 1 - } - atomic.StoreInt32(&a.v, n) -} - -// Get gets the value -func (a *AtomicBool) Get() bool { - return atomic.LoadInt32(&a.v) != 0 -} diff --git a/vendor/github.com/quic-go/quic-go/internal/utils/ringbuffer/ringbuffer.go b/vendor/github.com/quic-go/quic-go/internal/utils/ringbuffer/ringbuffer.go new file mode 100644 index 0000000000..81a5ad44b8 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/utils/ringbuffer/ringbuffer.go @@ -0,0 +1,86 @@ +package ringbuffer + +// A RingBuffer is a ring buffer. +// It acts as a heap that doesn't cause any allocations. +type RingBuffer[T any] struct { + ring []T + headPos, tailPos int + full bool +} + +// Init preallocs a buffer with a certain size. +func (r *RingBuffer[T]) Init(size int) { + r.ring = make([]T, size) +} + +// Len returns the number of elements in the ring buffer. +func (r *RingBuffer[T]) Len() int { + if r.full { + return len(r.ring) + } + if r.tailPos >= r.headPos { + return r.tailPos - r.headPos + } + return r.tailPos - r.headPos + len(r.ring) +} + +// Empty says if the ring buffer is empty. +func (r *RingBuffer[T]) Empty() bool { + return !r.full && r.headPos == r.tailPos +} + +// PushBack adds a new element. +// If the ring buffer is full, its capacity is increased first. +func (r *RingBuffer[T]) PushBack(t T) { + if r.full || len(r.ring) == 0 { + r.grow() + } + r.ring[r.tailPos] = t + r.tailPos++ + if r.tailPos == len(r.ring) { + r.tailPos = 0 + } + if r.tailPos == r.headPos { + r.full = true + } +} + +// PopFront returns the next element. +// It must not be called when the buffer is empty, that means that +// callers might need to check if there are elements in the buffer first. +func (r *RingBuffer[T]) PopFront() T { + if r.Empty() { + panic("github.com/quic-go/quic-go/internal/utils/ringbuffer: pop from an empty queue") + } + r.full = false + t := r.ring[r.headPos] + r.ring[r.headPos] = *new(T) + r.headPos++ + if r.headPos == len(r.ring) { + r.headPos = 0 + } + return t +} + +// Grow the maximum size of the queue. +// This method assume the queue is full. +func (r *RingBuffer[T]) grow() { + oldRing := r.ring + newSize := len(oldRing) * 2 + if newSize == 0 { + newSize = 1 + } + r.ring = make([]T, newSize) + headLen := copy(r.ring, oldRing[r.headPos:]) + copy(r.ring[headLen:], oldRing[:r.headPos]) + r.headPos, r.tailPos, r.full = 0, len(oldRing), false +} + +// Clear removes all elements. +func (r *RingBuffer[T]) Clear() { + var zeroValue T + for i := range r.ring { + r.ring[i] = zeroValue + } + r.headPos, r.tailPos, r.full = 0, 0, false +} diff --git a/vendor/github.com/quic-go/quic-go/internal/utils/rtt_stats.go b/vendor/github.com/quic-go/quic-go/internal/utils/rtt_stats.go index 527539e1e2..2cd9a1919b 100644 --- a/vendor/github.com/quic-go/quic-go/internal/utils/rtt_stats.go +++ b/vendor/github.com/quic-go/quic-go/internal/utils/rtt_stats.go @@ -103,8 +103,12 @@ func (r *RTTStats) SetMaxAckDelay(mad time.Duration) { // SetInitialRTT sets the initial RTT. // It is used during the 0-RTT handshake when restoring the RTT stats from the session state. func (r *RTTStats) SetInitialRTT(t time.Duration) { + // On the server side, by the time we get to process the session ticket, + // we might already have obtained an RTT measurement. + // This can happen if we received the ClientHello in multiple pieces, and one of those pieces was lost. + // Discard the restored value. A fresh measurement is always better. if r.hasMeasurement { - panic("initial RTT set after first measurement") + return } r.smoothedRTT = t r.latestRTT = t diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/ack_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/ack_frame.go index 5b01649a32..9b23cc25f9 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/ack_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/ack_frame.go @@ -22,23 +22,17 @@ type AckFrame struct { } // parseAckFrame reads an ACK frame -func parseAckFrame(r *bytes.Reader, ackDelayExponent uint8, _ protocol.VersionNumber) (*AckFrame, error) { - typeByte, err := r.ReadByte() - if err != nil { - return nil, err - } - ecn := typeByte&0x1 > 0 - - frame := GetAckFrame() +func parseAckFrame(frame *AckFrame, r *bytes.Reader, typ uint64, ackDelayExponent uint8, _ protocol.VersionNumber) error { + ecn := typ == ackECNFrameType la, err := quicvarint.Read(r) if err != nil { - return nil, err + return err } largestAcked := protocol.PacketNumber(la) delay, err := quicvarint.Read(r) if err != nil { - return nil, err + return err } delayTime := time.Duration(delay*1< largestAcked { - return nil, errors.New("invalid first ACK range") + return errors.New("invalid first ACK range") } smallest := largestAcked - ackBlock @@ -69,50 +63,59 @@ func parseAckFrame(r *bytes.Reader, ackDelayExponent uint8, _ protocol.VersionNu for i := uint64(0); i < numBlocks; i++ { g, err := quicvarint.Read(r) if err != nil { - return nil, err + return err } gap := protocol.PacketNumber(g) if smallest < gap+2 { - return nil, errInvalidAckRanges + return errInvalidAckRanges } largest := smallest - gap - 2 ab, err := quicvarint.Read(r) if err != nil { - return nil, err + return err } ackBlock := protocol.PacketNumber(ab) if ackBlock > largest { - return nil, errInvalidAckRanges + return errInvalidAckRanges } smallest = largest - ackBlock frame.AckRanges = append(frame.AckRanges, AckRange{Smallest: smallest, Largest: largest}) } if !frame.validateAckRanges() { - return nil, errInvalidAckRanges + return errInvalidAckRanges } - // parse (and skip) the ECN section if ecn { - for i := 0; i < 3; i++ { - if _, err := quicvarint.Read(r); err != nil { - return nil, err - } + ect0, err := quicvarint.Read(r) + if err != nil { + return err + } + frame.ECT0 = ect0 + ect1, err := quicvarint.Read(r) + if err != nil { + return err } + frame.ECT1 = ect1 + ecnce, err := quicvarint.Read(r) + if err != nil { + return err + } + frame.ECNCE = ecnce } - return frame, nil + return nil } // Append appends an ACK frame. func (f *AckFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { hasECN := f.ECT0 > 0 || f.ECT1 > 0 || f.ECNCE > 0 if hasECN { - b = append(b, 0b11) + b = append(b, ackECNFrameType) } else { - b = append(b, 0b10) + b = append(b, ackFrameType) } b = quicvarint.Append(b, uint64(f.LargestAcked())) b = quicvarint.Append(b, encodeAckDelay(f.DelayTime)) @@ -246,6 +249,18 @@ func (f *AckFrame) AcksPacket(p protocol.PacketNumber) bool { return p <= f.AckRanges[i].Largest } +func (f *AckFrame) Reset() { + f.DelayTime = 0 + f.ECT0 = 0 + f.ECT1 = 0 + f.ECNCE = 0 + for _, r := range f.AckRanges { + r.Largest = 0 + r.Smallest = 0 + } + f.AckRanges = f.AckRanges[:0] +} + func encodeAckDelay(delay time.Duration) uint64 { return uint64(delay.Nanoseconds() / (1000 * (1 << protocol.AckDelayExponent))) } diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/ack_frame_pool.go b/vendor/github.com/quic-go/quic-go/internal/wire/ack_frame_pool.go deleted file mode 100644 index a0c6a21d7d..0000000000 --- a/vendor/github.com/quic-go/quic-go/internal/wire/ack_frame_pool.go +++ /dev/null @@ -1,24 +0,0 @@ -package wire - -import "sync" - -var ackFramePool = sync.Pool{New: func() any { - return &AckFrame{} -}} - -func GetAckFrame() *AckFrame { - f := ackFramePool.Get().(*AckFrame) - f.AckRanges = f.AckRanges[:0] - f.ECNCE = 0 - f.ECT0 = 0 - f.ECT1 = 0 - f.DelayTime = 0 - return f -} - -func PutAckFrame(f *AckFrame) { - if cap(f.AckRanges) > 4 { - return - } - ackFramePool.Put(f) -} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/connection_close_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/connection_close_frame.go index de2283b3b1..f56c2c0d84 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/connection_close_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/connection_close_frame.go @@ -16,13 +16,8 @@ type ConnectionCloseFrame struct { ReasonPhrase string } -func parseConnectionCloseFrame(r *bytes.Reader, _ protocol.VersionNumber) (*ConnectionCloseFrame, error) { - typeByte, err := r.ReadByte() - if err != nil { - return nil, err - } - - f := &ConnectionCloseFrame{IsApplicationError: typeByte == 0x1d} +func parseConnectionCloseFrame(r *bytes.Reader, typ uint64, _ protocol.VersionNumber) (*ConnectionCloseFrame, error) { + f := &ConnectionCloseFrame{IsApplicationError: typ == applicationCloseFrameType} ec, err := quicvarint.Read(r) if err != nil { return nil, err @@ -68,9 +63,9 @@ func (f *ConnectionCloseFrame) Length(protocol.VersionNumber) protocol.ByteCount func (f *ConnectionCloseFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { if f.IsApplicationError { - b = append(b, 0x1d) + b = append(b, applicationCloseFrameType) } else { - b = append(b, 0x1c) + b = append(b, connectionCloseFrameType) } b = quicvarint.Append(b, f.ErrorCode) diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/crypto_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/crypto_frame.go index 99ffb21d0a..0f005c5ba4 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/crypto_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/crypto_frame.go @@ -15,10 +15,6 @@ type CryptoFrame struct { } func parseCryptoFrame(r *bytes.Reader, _ protocol.VersionNumber) (*CryptoFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } - frame := &CryptoFrame{} offset, err := quicvarint.Read(r) if err != nil { @@ -43,7 +39,7 @@ func parseCryptoFrame(r *bytes.Reader, _ protocol.VersionNumber) (*CryptoFrame, } func (f *CryptoFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { - b = append(b, 0x6) + b = append(b, cryptoFrameType) b = quicvarint.Append(b, uint64(f.Offset)) b = quicvarint.Append(b, uint64(len(f.Data))) b = append(b, f.Data...) diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/data_blocked_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/data_blocked_frame.go index b567af8a4b..0d4d1f5657 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/data_blocked_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/data_blocked_frame.go @@ -13,22 +13,16 @@ type DataBlockedFrame struct { } func parseDataBlockedFrame(r *bytes.Reader, _ protocol.VersionNumber) (*DataBlockedFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } offset, err := quicvarint.Read(r) if err != nil { return nil, err } - return &DataBlockedFrame{ - MaximumData: protocol.ByteCount(offset), - }, nil + return &DataBlockedFrame{MaximumData: protocol.ByteCount(offset)}, nil } func (f *DataBlockedFrame) Append(b []byte, version protocol.VersionNumber) ([]byte, error) { - b = append(b, 0x14) - b = quicvarint.Append(b, uint64(f.MaximumData)) - return b, nil + b = append(b, dataBlockedFrameType) + return quicvarint.Append(b, uint64(f.MaximumData)), nil } // Length of a written frame diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/datagram_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/datagram_frame.go index 756a23ffdc..e6c4519618 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/datagram_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/datagram_frame.go @@ -14,14 +14,9 @@ type DatagramFrame struct { Data []byte } -func parseDatagramFrame(r *bytes.Reader, _ protocol.VersionNumber) (*DatagramFrame, error) { - typeByte, err := r.ReadByte() - if err != nil { - return nil, err - } - +func parseDatagramFrame(r *bytes.Reader, typ uint64, _ protocol.VersionNumber) (*DatagramFrame, error) { f := &DatagramFrame{} - f.DataLenPresent = typeByte&0x1 > 0 + f.DataLenPresent = typ&0x1 > 0 var length uint64 if f.DataLenPresent { @@ -45,11 +40,11 @@ func parseDatagramFrame(r *bytes.Reader, _ protocol.VersionNumber) (*DatagramFra } func (f *DatagramFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { - typeByte := uint8(0x30) + typ := uint8(0x30) if f.DataLenPresent { - typeByte ^= 0b1 + typ ^= 0b1 } - b = append(b, typeByte) + b = append(b, typ) if f.DataLenPresent { b = quicvarint.Append(b, uint64(len(f.Data))) } diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/frame_parser.go b/vendor/github.com/quic-go/quic-go/internal/wire/frame_parser.go index ec744d903b..ff35dd101a 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/frame_parser.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/frame_parser.go @@ -8,14 +8,43 @@ import ( "github.com/quic-go/quic-go/internal/protocol" "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/quicvarint" +) + +const ( + pingFrameType = 0x1 + ackFrameType = 0x2 + ackECNFrameType = 0x3 + resetStreamFrameType = 0x4 + stopSendingFrameType = 0x5 + cryptoFrameType = 0x6 + newTokenFrameType = 0x7 + maxDataFrameType = 0x10 + maxStreamDataFrameType = 0x11 + bidiMaxStreamsFrameType = 0x12 + uniMaxStreamsFrameType = 0x13 + dataBlockedFrameType = 0x14 + streamDataBlockedFrameType = 0x15 + bidiStreamBlockedFrameType = 0x16 + uniStreamBlockedFrameType = 0x17 + newConnectionIDFrameType = 0x18 + retireConnectionIDFrameType = 0x19 + pathChallengeFrameType = 0x1a + pathResponseFrameType = 0x1b + connectionCloseFrameType = 0x1c + applicationCloseFrameType = 0x1d + handshakeDoneFrameType = 0x1e ) type frameParser struct { r bytes.Reader // cached bytes.Reader, so we don't have to repeatedly allocate them - ackDelayExponent uint8 - + ackDelayExponent uint8 supportsDatagrams bool + + // To avoid allocating when parsing, keep a single ACK frame struct. + // It is used over and over again. + ackFrame *AckFrame } var _ FrameParser = &frameParser{} @@ -25,6 +54,7 @@ func NewFrameParser(supportsDatagrams bool) *frameParser { return &frameParser{ r: *bytes.NewReader(nil), supportsDatagrams: supportsDatagrams, + ackFrame: &AckFrame{}, } } @@ -41,16 +71,21 @@ func (p *frameParser) ParseNext(data []byte, encLevel protocol.EncryptionLevel, func (p *frameParser) parseNext(r *bytes.Reader, encLevel protocol.EncryptionLevel, v protocol.VersionNumber) (Frame, error) { for r.Len() != 0 { - typeByte, _ := p.r.ReadByte() - if typeByte == 0x0 { // PADDING frame + typ, err := quicvarint.Read(r) + if err != nil { + return nil, &qerr.TransportError{ + ErrorCode: qerr.FrameEncodingError, + ErrorMessage: err.Error(), + } + } + if typ == 0x0 { // skip PADDING frames continue } - r.UnreadByte() - f, err := p.parseFrame(r, typeByte, encLevel, v) + f, err := p.parseFrame(r, typ, encLevel, v) if err != nil { return nil, &qerr.TransportError{ - FrameType: uint64(typeByte), + FrameType: typ, ErrorCode: qerr.FrameEncodingError, ErrorMessage: err.Error(), } @@ -60,56 +95,58 @@ func (p *frameParser) parseNext(r *bytes.Reader, encLevel protocol.EncryptionLev return nil, nil } -func (p *frameParser) parseFrame(r *bytes.Reader, typeByte byte, encLevel protocol.EncryptionLevel, v protocol.VersionNumber) (Frame, error) { +func (p *frameParser) parseFrame(r *bytes.Reader, typ uint64, encLevel protocol.EncryptionLevel, v protocol.VersionNumber) (Frame, error) { var frame Frame var err error - if typeByte&0xf8 == 0x8 { - frame, err = parseStreamFrame(r, v) + if typ&0xf8 == 0x8 { + frame, err = parseStreamFrame(r, typ, v) } else { - switch typeByte { - case 0x1: - frame, err = parsePingFrame(r, v) - case 0x2, 0x3: + switch typ { + case pingFrameType: + frame = &PingFrame{} + case ackFrameType, ackECNFrameType: ackDelayExponent := p.ackDelayExponent if encLevel != protocol.Encryption1RTT { ackDelayExponent = protocol.DefaultAckDelayExponent } - frame, err = parseAckFrame(r, ackDelayExponent, v) - case 0x4: + p.ackFrame.Reset() + err = parseAckFrame(p.ackFrame, r, typ, ackDelayExponent, v) + frame = p.ackFrame + case resetStreamFrameType: frame, err = parseResetStreamFrame(r, v) - case 0x5: + case stopSendingFrameType: frame, err = parseStopSendingFrame(r, v) - case 0x6: + case cryptoFrameType: frame, err = parseCryptoFrame(r, v) - case 0x7: + case newTokenFrameType: frame, err = parseNewTokenFrame(r, v) - case 0x10: + case maxDataFrameType: frame, err = parseMaxDataFrame(r, v) - case 0x11: + case maxStreamDataFrameType: frame, err = parseMaxStreamDataFrame(r, v) - case 0x12, 0x13: - frame, err = parseMaxStreamsFrame(r, v) - case 0x14: + case bidiMaxStreamsFrameType, uniMaxStreamsFrameType: + frame, err = parseMaxStreamsFrame(r, typ, v) + case dataBlockedFrameType: frame, err = parseDataBlockedFrame(r, v) - case 0x15: + case streamDataBlockedFrameType: frame, err = parseStreamDataBlockedFrame(r, v) - case 0x16, 0x17: - frame, err = parseStreamsBlockedFrame(r, v) - case 0x18: + case bidiStreamBlockedFrameType, uniStreamBlockedFrameType: + frame, err = parseStreamsBlockedFrame(r, typ, v) + case newConnectionIDFrameType: frame, err = parseNewConnectionIDFrame(r, v) - case 0x19: + case retireConnectionIDFrameType: frame, err = parseRetireConnectionIDFrame(r, v) - case 0x1a: + case pathChallengeFrameType: frame, err = parsePathChallengeFrame(r, v) - case 0x1b: + case pathResponseFrameType: frame, err = parsePathResponseFrame(r, v) - case 0x1c, 0x1d: - frame, err = parseConnectionCloseFrame(r, v) - case 0x1e: - frame, err = parseHandshakeDoneFrame(r, v) + case connectionCloseFrameType, applicationCloseFrameType: + frame, err = parseConnectionCloseFrame(r, typ, v) + case handshakeDoneFrameType: + frame = &HandshakeDoneFrame{} case 0x30, 0x31: if p.supportsDatagrams { - frame, err = parseDatagramFrame(r, v) + frame, err = parseDatagramFrame(r, typ, v) break } fallthrough diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/handshake_done_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/handshake_done_frame.go index 7bbc0e8887..29521bc9e9 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/handshake_done_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/handshake_done_frame.go @@ -1,24 +1,14 @@ package wire import ( - "bytes" - "github.com/quic-go/quic-go/internal/protocol" ) // A HandshakeDoneFrame is a HANDSHAKE_DONE frame type HandshakeDoneFrame struct{} -// ParseHandshakeDoneFrame parses a HandshakeDone frame -func parseHandshakeDoneFrame(r *bytes.Reader, _ protocol.VersionNumber) (*HandshakeDoneFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } - return &HandshakeDoneFrame{}, nil -} - func (f *HandshakeDoneFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { - return append(b, 0x1e), nil + return append(b, handshakeDoneFrameType), nil } // Length of a written frame diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/header.go b/vendor/github.com/quic-go/quic-go/internal/wire/header.go index 4d3c5049a6..0c60f4dd94 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/header.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/header.go @@ -13,8 +13,6 @@ import ( ) // ParseConnectionID parses the destination connection ID of a packet. -// It uses the data slice for the connection ID. -// That means that the connection ID must not be used after the packet buffer is released. func ParseConnectionID(data []byte, shortHeaderConnIDLen int) (protocol.ConnectionID, error) { if len(data) == 0 { return protocol.ConnectionID{}, io.EOF @@ -76,6 +74,10 @@ func parseArbitraryLenConnectionIDs(r *bytes.Reader) (dest, src protocol.Arbitra return destConnID, srcConnID, nil } +func IsPotentialQUICPacket(firstByte byte) bool { + return firstByte&0x40 > 0 +} + // IsLongHeaderPacket says if this is a Long Header packet func IsLongHeaderPacket(firstByte byte) bool { return firstByte&0x80 > 0 @@ -108,13 +110,15 @@ func Is0RTTPacket(b []byte) bool { return false } version := protocol.VersionNumber(binary.BigEndian.Uint32(b[1:5])) - if !protocol.IsSupportedVersion(protocol.SupportedVersions, version) { - return false - } - if version == protocol.Version2 { + //nolint:exhaustive // We only need to test QUIC versions that we support. + switch version { + case protocol.Version1: + return b[0]>>4&0b11 == 0b01 + case protocol.Version2: return b[0]>>4&0b11 == 0b10 + default: + return false } - return b[0]>>4&0b11 == 0b01 } var ErrUnsupportedVersion = errors.New("unsupported version") diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/max_data_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/max_data_frame.go index 427c811017..e61b0f9f3b 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/max_data_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/max_data_frame.go @@ -14,10 +14,6 @@ type MaxDataFrame struct { // parseMaxDataFrame parses a MAX_DATA frame func parseMaxDataFrame(r *bytes.Reader, _ protocol.VersionNumber) (*MaxDataFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } - frame := &MaxDataFrame{} byteOffset, err := quicvarint.Read(r) if err != nil { @@ -27,9 +23,8 @@ func parseMaxDataFrame(r *bytes.Reader, _ protocol.VersionNumber) (*MaxDataFrame return frame, nil } -// Write writes a MAX_STREAM_DATA frame func (f *MaxDataFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { - b = append(b, 0x10) + b = append(b, maxDataFrameType) b = quicvarint.Append(b, uint64(f.MaximumData)) return b, nil } diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/max_stream_data_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/max_stream_data_frame.go index 4218c09bd4..fe3d1e3f70 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/max_stream_data_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/max_stream_data_frame.go @@ -14,10 +14,6 @@ type MaxStreamDataFrame struct { } func parseMaxStreamDataFrame(r *bytes.Reader, _ protocol.VersionNumber) (*MaxStreamDataFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } - sid, err := quicvarint.Read(r) if err != nil { return nil, err @@ -34,7 +30,7 @@ func parseMaxStreamDataFrame(r *bytes.Reader, _ protocol.VersionNumber) (*MaxStr } func (f *MaxStreamDataFrame) Append(b []byte, version protocol.VersionNumber) ([]byte, error) { - b = append(b, 0x11) + b = append(b, maxStreamDataFrameType) b = quicvarint.Append(b, uint64(f.StreamID)) b = quicvarint.Append(b, uint64(f.MaximumStreamData)) return b, nil diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/max_streams_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/max_streams_frame.go index f417127c4e..bd278c02a8 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/max_streams_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/max_streams_frame.go @@ -14,17 +14,12 @@ type MaxStreamsFrame struct { MaxStreamNum protocol.StreamNum } -func parseMaxStreamsFrame(r *bytes.Reader, _ protocol.VersionNumber) (*MaxStreamsFrame, error) { - typeByte, err := r.ReadByte() - if err != nil { - return nil, err - } - +func parseMaxStreamsFrame(r *bytes.Reader, typ uint64, _ protocol.VersionNumber) (*MaxStreamsFrame, error) { f := &MaxStreamsFrame{} - switch typeByte { - case 0x12: + switch typ { + case bidiMaxStreamsFrameType: f.Type = protocol.StreamTypeBidi - case 0x13: + case uniMaxStreamsFrameType: f.Type = protocol.StreamTypeUni } streamID, err := quicvarint.Read(r) @@ -41,9 +36,9 @@ func parseMaxStreamsFrame(r *bytes.Reader, _ protocol.VersionNumber) (*MaxStream func (f *MaxStreamsFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { switch f.Type { case protocol.StreamTypeBidi: - b = append(b, 0x12) + b = append(b, bidiMaxStreamsFrameType) case protocol.StreamTypeUni: - b = append(b, 0x13) + b = append(b, uniMaxStreamsFrameType) } b = quicvarint.Append(b, uint64(f.MaxStreamNum)) return b, nil diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/new_connection_id_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/new_connection_id_frame.go index 5f6ab99807..83102d5d14 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/new_connection_id_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/new_connection_id_frame.go @@ -18,10 +18,6 @@ type NewConnectionIDFrame struct { } func parseNewConnectionIDFrame(r *bytes.Reader, _ protocol.VersionNumber) (*NewConnectionIDFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } - seq, err := quicvarint.Read(r) if err != nil { return nil, err @@ -58,7 +54,7 @@ func parseNewConnectionIDFrame(r *bytes.Reader, _ protocol.VersionNumber) (*NewC } func (f *NewConnectionIDFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { - b = append(b, 0x18) + b = append(b, newConnectionIDFrameType) b = quicvarint.Append(b, f.SequenceNumber) b = quicvarint.Append(b, f.RetirePriorTo) connIDLen := f.ConnectionID.Len() diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/new_token_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/new_token_frame.go index cc1d581966..c3fa178c17 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/new_token_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/new_token_frame.go @@ -15,9 +15,6 @@ type NewTokenFrame struct { } func parseNewTokenFrame(r *bytes.Reader, _ protocol.VersionNumber) (*NewTokenFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } tokenLen, err := quicvarint.Read(r) if err != nil { return nil, err @@ -36,7 +33,7 @@ func parseNewTokenFrame(r *bytes.Reader, _ protocol.VersionNumber) (*NewTokenFra } func (f *NewTokenFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { - b = append(b, 0x7) + b = append(b, newTokenFrameType) b = quicvarint.Append(b, uint64(len(f.Token))) b = append(b, f.Token...) return b, nil diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/path_challenge_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/path_challenge_frame.go index 5d32865e24..ad024330ac 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/path_challenge_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/path_challenge_frame.go @@ -13,9 +13,6 @@ type PathChallengeFrame struct { } func parsePathChallengeFrame(r *bytes.Reader, _ protocol.VersionNumber) (*PathChallengeFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } frame := &PathChallengeFrame{} if _, err := io.ReadFull(r, frame.Data[:]); err != nil { if err == io.ErrUnexpectedEOF { @@ -27,7 +24,7 @@ func parsePathChallengeFrame(r *bytes.Reader, _ protocol.VersionNumber) (*PathCh } func (f *PathChallengeFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { - b = append(b, 0x1a) + b = append(b, pathChallengeFrameType) b = append(b, f.Data[:]...) return b, nil } diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/path_response_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/path_response_frame.go index 5c49e12273..76e6510496 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/path_response_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/path_response_frame.go @@ -13,9 +13,6 @@ type PathResponseFrame struct { } func parsePathResponseFrame(r *bytes.Reader, _ protocol.VersionNumber) (*PathResponseFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } frame := &PathResponseFrame{} if _, err := io.ReadFull(r, frame.Data[:]); err != nil { if err == io.ErrUnexpectedEOF { @@ -27,7 +24,7 @@ func parsePathResponseFrame(r *bytes.Reader, _ protocol.VersionNumber) (*PathRes } func (f *PathResponseFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { - b = append(b, 0x1b) + b = append(b, pathResponseFrameType) b = append(b, f.Data[:]...) return b, nil } diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/ping_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/ping_frame.go index ba32d16704..dd24edc0c3 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/ping_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/ping_frame.go @@ -1,23 +1,14 @@ package wire import ( - "bytes" - "github.com/quic-go/quic-go/internal/protocol" ) // A PingFrame is a PING frame type PingFrame struct{} -func parsePingFrame(r *bytes.Reader, _ protocol.VersionNumber) (*PingFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } - return &PingFrame{}, nil -} - func (f *PingFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { - return append(b, 0x1), nil + return append(b, pingFrameType), nil } // Length of a written frame diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/reset_stream_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/reset_stream_frame.go index 462138130e..cd94c9408f 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/reset_stream_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/reset_stream_frame.go @@ -16,10 +16,6 @@ type ResetStreamFrame struct { } func parseResetStreamFrame(r *bytes.Reader, _ protocol.VersionNumber) (*ResetStreamFrame, error) { - if _, err := r.ReadByte(); err != nil { // read the TypeByte - return nil, err - } - var streamID protocol.StreamID var byteOffset protocol.ByteCount sid, err := quicvarint.Read(r) @@ -45,7 +41,7 @@ func parseResetStreamFrame(r *bytes.Reader, _ protocol.VersionNumber) (*ResetStr } func (f *ResetStreamFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { - b = append(b, 0x4) + b = append(b, resetStreamFrameType) b = quicvarint.Append(b, uint64(f.StreamID)) b = quicvarint.Append(b, uint64(f.ErrorCode)) b = quicvarint.Append(b, uint64(f.FinalSize)) diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/retire_connection_id_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/retire_connection_id_frame.go index 3e4f58ac39..8e9a41d89b 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/retire_connection_id_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/retire_connection_id_frame.go @@ -13,10 +13,6 @@ type RetireConnectionIDFrame struct { } func parseRetireConnectionIDFrame(r *bytes.Reader, _ protocol.VersionNumber) (*RetireConnectionIDFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } - seq, err := quicvarint.Read(r) if err != nil { return nil, err @@ -25,7 +21,7 @@ func parseRetireConnectionIDFrame(r *bytes.Reader, _ protocol.VersionNumber) (*R } func (f *RetireConnectionIDFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { - b = append(b, 0x19) + b = append(b, retireConnectionIDFrameType) b = quicvarint.Append(b, f.SequenceNumber) return b, nil } diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/stop_sending_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/stop_sending_frame.go index e47a0f4a81..d7b8b24029 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/stop_sending_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/stop_sending_frame.go @@ -16,10 +16,6 @@ type StopSendingFrame struct { // parseStopSendingFrame parses a STOP_SENDING frame func parseStopSendingFrame(r *bytes.Reader, _ protocol.VersionNumber) (*StopSendingFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } - streamID, err := quicvarint.Read(r) if err != nil { return nil, err @@ -41,7 +37,7 @@ func (f *StopSendingFrame) Length(_ protocol.VersionNumber) protocol.ByteCount { } func (f *StopSendingFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { - b = append(b, 0x5) + b = append(b, stopSendingFrameType) b = quicvarint.Append(b, uint64(f.StreamID)) b = quicvarint.Append(b, uint64(f.ErrorCode)) return b, nil diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/stream_data_blocked_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/stream_data_blocked_frame.go index 2d3fb07e0e..d42e59a2d5 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/stream_data_blocked_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/stream_data_blocked_frame.go @@ -14,10 +14,6 @@ type StreamDataBlockedFrame struct { } func parseStreamDataBlockedFrame(r *bytes.Reader, _ protocol.VersionNumber) (*StreamDataBlockedFrame, error) { - if _, err := r.ReadByte(); err != nil { - return nil, err - } - sid, err := quicvarint.Read(r) if err != nil { return nil, err diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/stream_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/stream_frame.go index ebf3101c40..d22e1c0526 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/stream_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/stream_frame.go @@ -20,15 +20,10 @@ type StreamFrame struct { fromPool bool } -func parseStreamFrame(r *bytes.Reader, _ protocol.VersionNumber) (*StreamFrame, error) { - typeByte, err := r.ReadByte() - if err != nil { - return nil, err - } - - hasOffset := typeByte&0b100 > 0 - fin := typeByte&0b1 > 0 - hasDataLen := typeByte&0b10 > 0 +func parseStreamFrame(r *bytes.Reader, typ uint64, _ protocol.VersionNumber) (*StreamFrame, error) { + hasOffset := typ&0b100 > 0 + fin := typ&0b1 > 0 + hasDataLen := typ&0b10 > 0 streamID, err := quicvarint.Read(r) if err != nil { @@ -89,18 +84,18 @@ func (f *StreamFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) return nil, errors.New("StreamFrame: attempting to write empty frame without FIN") } - typeByte := byte(0x8) + typ := byte(0x8) if f.Fin { - typeByte ^= 0b1 + typ ^= 0b1 } hasOffset := f.Offset != 0 if f.DataLenPresent { - typeByte ^= 0b10 + typ ^= 0b10 } if hasOffset { - typeByte ^= 0b100 + typ ^= 0b100 } - b = append(b, typeByte) + b = append(b, typ) b = quicvarint.Append(b, uint64(f.StreamID)) if hasOffset { b = quicvarint.Append(b, uint64(f.Offset)) diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/streams_blocked_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/streams_blocked_frame.go index 5e556cb896..4a5951c625 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/streams_blocked_frame.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/streams_blocked_frame.go @@ -14,17 +14,12 @@ type StreamsBlockedFrame struct { StreamLimit protocol.StreamNum } -func parseStreamsBlockedFrame(r *bytes.Reader, _ protocol.VersionNumber) (*StreamsBlockedFrame, error) { - typeByte, err := r.ReadByte() - if err != nil { - return nil, err - } - +func parseStreamsBlockedFrame(r *bytes.Reader, typ uint64, _ protocol.VersionNumber) (*StreamsBlockedFrame, error) { f := &StreamsBlockedFrame{} - switch typeByte { - case 0x16: + switch typ { + case bidiStreamBlockedFrameType: f.Type = protocol.StreamTypeBidi - case 0x17: + case uniStreamBlockedFrameType: f.Type = protocol.StreamTypeUni } streamLimit, err := quicvarint.Read(r) @@ -41,9 +36,9 @@ func parseStreamsBlockedFrame(r *bytes.Reader, _ protocol.VersionNumber) (*Strea func (f *StreamsBlockedFrame) Append(b []byte, _ protocol.VersionNumber) ([]byte, error) { switch f.Type { case protocol.StreamTypeBidi: - b = append(b, 0x16) + b = append(b, bidiStreamBlockedFrameType) case protocol.StreamTypeUni: - b = append(b, 0x17) + b = append(b, uniStreamBlockedFrameType) } b = quicvarint.Append(b, uint64(f.StreamLimit)) return b, nil diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/transport_parameters.go b/vendor/github.com/quic-go/quic-go/internal/wire/transport_parameters.go index a64638cbdc..7226521b05 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/transport_parameters.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/transport_parameters.go @@ -2,11 +2,11 @@ package wire import ( "bytes" + "crypto/rand" "encoding/binary" "errors" "fmt" "io" - "math/rand" "net" "sort" "time" @@ -17,11 +17,13 @@ import ( "github.com/quic-go/quic-go/quicvarint" ) -const transportParameterMarshalingVersion = 1 +// AdditionalTransportParametersClient are additional transport parameters that will be added +// to the client's transport parameters. +// This is not intended for production use, but _only_ to increase the size of the ClientHello beyond +// the usual size of less than 1 MTU. +var AdditionalTransportParametersClient map[uint64][]byte -func init() { - rand.Seed(time.Now().UTC().UnixNano()) -} +const transportParameterMarshalingVersion = 1 type transportParameterID uint64 @@ -106,6 +108,7 @@ func (p *TransportParameters) unmarshal(r *bytes.Reader, sentBy protocol.Perspec var ( readOriginalDestinationConnectionID bool readInitialSourceConnectionID bool + readActiveConnectionIDLimit bool ) p.AckDelayExponent = protocol.DefaultAckDelayExponent @@ -127,6 +130,9 @@ func (p *TransportParameters) unmarshal(r *bytes.Reader, sentBy protocol.Perspec } parameterIDs = append(parameterIDs, paramID) switch paramID { + case activeConnectionIDLimitParameterID: + readActiveConnectionIDLimit = true + fallthrough case maxIdleTimeoutParameterID, maxUDPPayloadSizeParameterID, initialMaxDataParameterID, @@ -136,7 +142,6 @@ func (p *TransportParameters) unmarshal(r *bytes.Reader, sentBy protocol.Perspec initialMaxStreamsBidiParameterID, initialMaxStreamsUniParameterID, maxAckDelayParameterID, - activeConnectionIDLimitParameterID, maxDatagramFrameSizeParameterID, ackDelayExponentParameterID: if err := p.readNumericTransportParameter(r, paramID, int(paramLen)); err != nil { @@ -184,6 +189,9 @@ func (p *TransportParameters) unmarshal(r *bytes.Reader, sentBy protocol.Perspec } } + if !readActiveConnectionIDLimit { + p.ActiveConnectionIDLimit = protocol.DefaultActiveConnectionIDLimit + } if !fromSessionTicket { if sentBy == protocol.PerspectiveServer && !readOriginalDestinationConnectionID { return errors.New("missing original_destination_connection_id") @@ -323,11 +331,12 @@ func (p *TransportParameters) Marshal(pers protocol.Perspective) []byte { b := make([]byte, 0, 256) // add a greased value - b = quicvarint.Append(b, uint64(27+31*rand.Intn(100))) - length := rand.Intn(16) + random := make([]byte, 18) + rand.Read(random) + b = quicvarint.Append(b, 27+31*uint64(random[0])) + length := random[1] % 16 b = quicvarint.Append(b, uint64(length)) - b = b[:len(b)+length] - rand.Read(b[len(b)-length:]) + b = append(b, random[2:2+length]...) // initial_max_stream_data_bidi_local b = p.marshalVarintParam(b, initialMaxStreamDataBidiLocalParameterID, uint64(p.InitialMaxStreamDataBidiLocal)) @@ -388,7 +397,9 @@ func (p *TransportParameters) Marshal(pers protocol.Perspective) []byte { } } // active_connection_id_limit - b = p.marshalVarintParam(b, activeConnectionIDLimitParameterID, p.ActiveConnectionIDLimit) + if p.ActiveConnectionIDLimit != protocol.DefaultActiveConnectionIDLimit { + b = p.marshalVarintParam(b, activeConnectionIDLimitParameterID, p.ActiveConnectionIDLimit) + } // initial_source_connection_id b = quicvarint.Append(b, uint64(initialSourceConnectionIDParameterID)) b = quicvarint.Append(b, uint64(p.InitialSourceConnectionID.Len())) @@ -402,6 +413,15 @@ func (p *TransportParameters) Marshal(pers protocol.Perspective) []byte { if p.MaxDatagramFrameSize != protocol.InvalidByteCount { b = p.marshalVarintParam(b, maxDatagramFrameSizeParameterID, uint64(p.MaxDatagramFrameSize)) } + + if pers == protocol.PerspectiveClient && len(AdditionalTransportParametersClient) > 0 { + for k, v := range AdditionalTransportParametersClient { + b = quicvarint.Append(b, k) + b = quicvarint.Append(b, uint64(len(v))) + b = append(b, v...) + } + } + return b } @@ -434,6 +454,10 @@ func (p *TransportParameters) MarshalForSessionTicket(b []byte) []byte { b = p.marshalVarintParam(b, initialMaxStreamsBidiParameterID, uint64(p.MaxBidiStreamNum)) // initial_max_uni_streams b = p.marshalVarintParam(b, initialMaxStreamsUniParameterID, uint64(p.MaxUniStreamNum)) + // max_datagram_frame_size + if p.MaxDatagramFrameSize != protocol.InvalidByteCount { + b = p.marshalVarintParam(b, maxDatagramFrameSizeParameterID, uint64(p.MaxDatagramFrameSize)) + } // active_connection_id_limit return p.marshalVarintParam(b, activeConnectionIDLimitParameterID, p.ActiveConnectionIDLimit) } @@ -452,6 +476,9 @@ func (p *TransportParameters) UnmarshalFromSessionTicket(r *bytes.Reader) error // ValidFor0RTT checks if the transport parameters match those saved in the session ticket. func (p *TransportParameters) ValidFor0RTT(saved *TransportParameters) bool { + if saved.MaxDatagramFrameSize != protocol.InvalidByteCount && (p.MaxDatagramFrameSize == protocol.InvalidByteCount || p.MaxDatagramFrameSize < saved.MaxDatagramFrameSize) { + return false + } return p.InitialMaxStreamDataBidiLocal >= saved.InitialMaxStreamDataBidiLocal && p.InitialMaxStreamDataBidiRemote >= saved.InitialMaxStreamDataBidiRemote && p.InitialMaxStreamDataUni >= saved.InitialMaxStreamDataUni && @@ -461,6 +488,21 @@ func (p *TransportParameters) ValidFor0RTT(saved *TransportParameters) bool { p.ActiveConnectionIDLimit == saved.ActiveConnectionIDLimit } +// ValidForUpdate checks that the new transport parameters don't reduce limits after resuming a 0-RTT connection. +// It is only used on the client side. +func (p *TransportParameters) ValidForUpdate(saved *TransportParameters) bool { + if saved.MaxDatagramFrameSize != protocol.InvalidByteCount && (p.MaxDatagramFrameSize == protocol.InvalidByteCount || p.MaxDatagramFrameSize < saved.MaxDatagramFrameSize) { + return false + } + return p.ActiveConnectionIDLimit >= saved.ActiveConnectionIDLimit && + p.InitialMaxData >= saved.InitialMaxData && + p.InitialMaxStreamDataBidiLocal >= saved.InitialMaxStreamDataBidiLocal && + p.InitialMaxStreamDataBidiRemote >= saved.InitialMaxStreamDataBidiRemote && + p.InitialMaxStreamDataUni >= saved.InitialMaxStreamDataUni && + p.MaxBidiStreamNum >= saved.MaxBidiStreamNum && + p.MaxUniStreamNum >= saved.MaxUniStreamNum +} + // String returns a string representation, intended for logging. func (p *TransportParameters) String() string { logString := "&wire.TransportParameters{OriginalDestinationConnectionID: %s, InitialSourceConnectionID: %s, " diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/version_negotiation.go b/vendor/github.com/quic-go/quic-go/internal/wire/version_negotiation.go index 3dc621135b..afde70fa4a 100644 --- a/vendor/github.com/quic-go/quic-go/internal/wire/version_negotiation.go +++ b/vendor/github.com/quic-go/quic-go/internal/wire/version_negotiation.go @@ -40,7 +40,10 @@ func ComposeVersionNegotiation(destConnID, srcConnID protocol.ArbitraryLenConnec buf := bytes.NewBuffer(make([]byte, 0, expectedLen)) r := make([]byte, 1) _, _ = rand.Read(r) // ignore the error here. It is not critical to have perfect random here. - buf.WriteByte(r[0] | 0x80) + // Setting the "QUIC bit" (0x40) is not required by the RFC, + // but it allows clients to demultiplex QUIC with a long list of other protocols. + // See RFC 9443 and https://mailarchive.ietf.org/arch/msg/quic/oR4kxGKY6mjtPC1CZegY1ED4beg/ for details. + buf.WriteByte(r[0] | 0xc0) utils.BigEndian.WriteUint32(buf, 0) // version 0 buf.WriteByte(uint8(destConnID.Len())) buf.Write(destConnID.Bytes()) diff --git a/vendor/github.com/quic-go/quic-go/logging/interface.go b/vendor/github.com/quic-go/quic-go/logging/interface.go index efcef151e1..2ce8582ecb 100644 --- a/vendor/github.com/quic-go/quic-go/logging/interface.go +++ b/vendor/github.com/quic-go/quic-go/logging/interface.go @@ -3,7 +3,6 @@ package logging import ( - "context" "net" "time" @@ -101,12 +100,6 @@ type ShortHeader struct { // A Tracer traces events. type Tracer interface { - // TracerForConnection requests a new tracer for a connection. - // The ODCID is the original destination connection ID: - // The destination connection ID that the client used on the first Initial packet it sent on this connection. - // If nil is returned, tracing will be disabled for this connection. - TracerForConnection(ctx context.Context, p Perspective, odcid ConnectionID) ConnectionTracer - SentPacket(net.Addr, *Header, ByteCount, []Frame) SentVersionNegotiationPacket(_ net.Addr, dest, src ArbitraryLenConnectionID, _ []VersionNumber) DroppedPacket(net.Addr, PacketType, ByteCount, PacketDropReason) diff --git a/vendor/github.com/quic-go/quic-go/logging/multiplex.go b/vendor/github.com/quic-go/quic-go/logging/multiplex.go index 8e85db494a..672a5cdbd8 100644 --- a/vendor/github.com/quic-go/quic-go/logging/multiplex.go +++ b/vendor/github.com/quic-go/quic-go/logging/multiplex.go @@ -1,7 +1,6 @@ package logging import ( - "context" "net" "time" ) @@ -23,16 +22,6 @@ func NewMultiplexedTracer(tracers ...Tracer) Tracer { return &tracerMultiplexer{tracers} } -func (m *tracerMultiplexer) TracerForConnection(ctx context.Context, p Perspective, odcid ConnectionID) ConnectionTracer { - var connTracers []ConnectionTracer - for _, t := range m.tracers { - if ct := t.TracerForConnection(ctx, p, odcid); ct != nil { - connTracers = append(connTracers, ct) - } - } - return NewMultiplexedConnectionTracer(connTracers...) -} - func (m *tracerMultiplexer) SentPacket(remote net.Addr, hdr *Header, size ByteCount, frames []Frame) { for _, t := range m.tracers { t.SentPacket(remote, hdr, size, frames) diff --git a/vendor/github.com/quic-go/quic-go/logging/null_tracer.go b/vendor/github.com/quic-go/quic-go/logging/null_tracer.go index 38052ae3b3..de97038579 100644 --- a/vendor/github.com/quic-go/quic-go/logging/null_tracer.go +++ b/vendor/github.com/quic-go/quic-go/logging/null_tracer.go @@ -1,7 +1,6 @@ package logging import ( - "context" "net" "time" ) @@ -12,9 +11,6 @@ type NullTracer struct{} var _ Tracer = &NullTracer{} -func (n NullTracer) TracerForConnection(context.Context, Perspective, ConnectionID) ConnectionTracer { - return NullConnectionTracer{} -} func (n NullTracer) SentPacket(net.Addr, *Header, ByteCount, []Frame) {} func (n NullTracer) SentVersionNegotiationPacket(_ net.Addr, dest, src ArbitraryLenConnectionID, _ []VersionNumber) { } diff --git a/vendor/github.com/quic-go/quic-go/mockgen.go b/vendor/github.com/quic-go/quic-go/mockgen.go index abe1faabc9..221c1367fc 100644 --- a/vendor/github.com/quic-go/quic-go/mockgen.go +++ b/vendor/github.com/quic-go/quic-go/mockgen.go @@ -1,27 +1,77 @@ +//go:build gomock || generate + package quic -//go:generate sh -c "./mockgen_private.sh quic mock_send_conn_test.go github.com/quic-go/quic-go sendConn" -//go:generate sh -c "./mockgen_private.sh quic mock_sender_test.go github.com/quic-go/quic-go sender" -//go:generate sh -c "./mockgen_private.sh quic mock_stream_internal_test.go github.com/quic-go/quic-go streamI" -//go:generate sh -c "./mockgen_private.sh quic mock_crypto_stream_test.go github.com/quic-go/quic-go cryptoStream" -//go:generate sh -c "./mockgen_private.sh quic mock_receive_stream_internal_test.go github.com/quic-go/quic-go receiveStreamI" -//go:generate sh -c "./mockgen_private.sh quic mock_send_stream_internal_test.go github.com/quic-go/quic-go sendStreamI" -//go:generate sh -c "./mockgen_private.sh quic mock_stream_sender_test.go github.com/quic-go/quic-go streamSender" -//go:generate sh -c "./mockgen_private.sh quic mock_stream_getter_test.go github.com/quic-go/quic-go streamGetter" -//go:generate sh -c "./mockgen_private.sh quic mock_crypto_data_handler_test.go github.com/quic-go/quic-go cryptoDataHandler" -//go:generate sh -c "./mockgen_private.sh quic mock_frame_source_test.go github.com/quic-go/quic-go frameSource" -//go:generate sh -c "./mockgen_private.sh quic mock_ack_frame_source_test.go github.com/quic-go/quic-go ackFrameSource" -//go:generate sh -c "./mockgen_private.sh quic mock_stream_manager_test.go github.com/quic-go/quic-go streamManager" -//go:generate sh -c "./mockgen_private.sh quic mock_sealing_manager_test.go github.com/quic-go/quic-go sealingManager" -//go:generate sh -c "./mockgen_private.sh quic mock_unpacker_test.go github.com/quic-go/quic-go unpacker" -//go:generate sh -c "./mockgen_private.sh quic mock_packer_test.go github.com/quic-go/quic-go packer" -//go:generate sh -c "./mockgen_private.sh quic mock_mtu_discoverer_test.go github.com/quic-go/quic-go mtuDiscoverer" -//go:generate sh -c "./mockgen_private.sh quic mock_conn_runner_test.go github.com/quic-go/quic-go connRunner" -//go:generate sh -c "./mockgen_private.sh quic mock_quic_conn_test.go github.com/quic-go/quic-go quicConn" -//go:generate sh -c "./mockgen_private.sh quic mock_packet_handler_test.go github.com/quic-go/quic-go packetHandler" -//go:generate sh -c "./mockgen_private.sh quic mock_unknown_packet_handler_test.go github.com/quic-go/quic-go unknownPacketHandler" -//go:generate sh -c "./mockgen_private.sh quic mock_packet_handler_manager_test.go github.com/quic-go/quic-go packetHandlerManager" -//go:generate sh -c "./mockgen_private.sh quic mock_multiplexer_test.go github.com/quic-go/quic-go multiplexer" -//go:generate sh -c "./mockgen_private.sh quic mock_batch_conn_test.go github.com/quic-go/quic-go batchConn" -//go:generate sh -c "go run github.com/golang/mock/mockgen -package quic -self_package github.com/quic-go/quic-go -destination mock_token_store_test.go github.com/quic-go/quic-go TokenStore" -//go:generate sh -c "go run github.com/golang/mock/mockgen -package quic -self_package github.com/quic-go/quic-go -destination mock_packetconn_test.go net PacketConn" +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_send_conn_test.go github.com/quic-go/quic-go SendConn" +type SendConn = sendConn + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_raw_conn_test.go github.com/quic-go/quic-go RawConn" +type RawConn = rawConn + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_sender_test.go github.com/quic-go/quic-go Sender" +type Sender = sender + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_stream_internal_test.go github.com/quic-go/quic-go StreamI" +type StreamI = streamI + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_crypto_stream_test.go github.com/quic-go/quic-go CryptoStream" +type CryptoStream = cryptoStream + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_receive_stream_internal_test.go github.com/quic-go/quic-go ReceiveStreamI" +type ReceiveStreamI = receiveStreamI + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_send_stream_internal_test.go github.com/quic-go/quic-go SendStreamI" +type SendStreamI = sendStreamI + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_stream_getter_test.go github.com/quic-go/quic-go StreamGetter" +type StreamGetter = streamGetter + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_stream_sender_test.go github.com/quic-go/quic-go StreamSender" +type StreamSender = streamSender + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_crypto_data_handler_test.go github.com/quic-go/quic-go CryptoDataHandler" +type CryptoDataHandler = cryptoDataHandler + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_frame_source_test.go github.com/quic-go/quic-go FrameSource" +type FrameSource = frameSource + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_ack_frame_source_test.go github.com/quic-go/quic-go AckFrameSource" +type AckFrameSource = ackFrameSource + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_stream_manager_test.go github.com/quic-go/quic-go StreamManager" +type StreamManager = streamManager + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_sealing_manager_test.go github.com/quic-go/quic-go SealingManager" +type SealingManager = sealingManager + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_unpacker_test.go github.com/quic-go/quic-go Unpacker" +type Unpacker = unpacker + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_packer_test.go github.com/quic-go/quic-go Packer" +type Packer = packer + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_mtu_discoverer_test.go github.com/quic-go/quic-go MTUDiscoverer" +type MTUDiscoverer = mtuDiscoverer + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_conn_runner_test.go github.com/quic-go/quic-go ConnRunner" +type ConnRunner = connRunner + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_quic_conn_test.go github.com/quic-go/quic-go QUICConn" +type QUICConn = quicConn + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_packet_handler_test.go github.com/quic-go/quic-go PacketHandler" +type PacketHandler = packetHandler + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_unknown_packet_handler_test.go github.com/quic-go/quic-go UnknownPacketHandler" +type UnknownPacketHandler = unknownPacketHandler + +//go:generate sh -c "go run github.com/golang/mock/mockgen -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_packet_handler_manager_test.go github.com/quic-go/quic-go PacketHandlerManager" +type PacketHandlerManager = packetHandlerManager + +// Need to use source mode for the batchConn, since reflect mode follows type aliases. +// See https://github.com/golang/mock/issues/244 for details. +// +//go:generate sh -c "go run github.com/golang/mock/mockgen -package quic -self_package github.com/quic-go/quic-go -source sys_conn_oob.go -destination mock_batch_conn_test.go -mock_names batchConn=MockBatchConn" + +//go:generate sh -c "go run github.com/golang/mock/mockgen -package quic -self_package github.com/quic-go/quic-go -self_package github.com/quic-go/quic-go -destination mock_token_store_test.go github.com/quic-go/quic-go TokenStore" +//go:generate sh -c "go run github.com/golang/mock/mockgen -package quic -self_package github.com/quic-go/quic-go -self_package github.com/quic-go/quic-go -destination mock_packetconn_test.go net PacketConn" diff --git a/vendor/github.com/quic-go/quic-go/mockgen_private.sh b/vendor/github.com/quic-go/quic-go/mockgen_private.sh deleted file mode 100644 index 79f63eee3e..0000000000 --- a/vendor/github.com/quic-go/quic-go/mockgen_private.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -DEST=$2 -PACKAGE=$3 -TMPFILE="mockgen_tmp.go" -# uppercase the name of the interface -ORIG_INTERFACE_NAME=$4 -INTERFACE_NAME="$(tr '[:lower:]' '[:upper:]' <<< ${ORIG_INTERFACE_NAME:0:1})${ORIG_INTERFACE_NAME:1}" - -# Gather all files that contain interface definitions. -# These interfaces might be used as embedded interfaces, -# so we need to pass them to mockgen as aux_files. -AUX=() -for f in *.go; do - if [[ -z ${f##*_test.go} ]]; then - # skip test files - continue; - fi - if $(egrep -qe "type (.*) interface" $f); then - AUX+=("github.com/quic-go/quic-go=$f") - fi -done - -# Find the file that defines the interface we're mocking. -for f in *.go; do - if [[ -z ${f##*_test.go} ]]; then - # skip test files - continue; - fi - INTERFACE=$(sed -n "/^type $ORIG_INTERFACE_NAME interface/,/^}/p" $f) - if [[ -n "$INTERFACE" ]]; then - SRC=$f - break - fi -done - -if [[ -z "$INTERFACE" ]]; then - echo "Interface $ORIG_INTERFACE_NAME not found." - exit 1 -fi - -AUX_FILES=$(IFS=, ; echo "${AUX[*]}") - -## create a public alias for the interface, so that mockgen can process it -echo -e "package $1\n" > $TMPFILE -echo "$INTERFACE" | sed "s/$ORIG_INTERFACE_NAME/$INTERFACE_NAME/" >> $TMPFILE -go run github.com/golang/mock/mockgen -package $1 -self_package $3 -destination $DEST -source=$TMPFILE -aux_files $AUX_FILES -sed "s/$TMPFILE/$SRC/" "$DEST" > "$DEST.new" && mv "$DEST.new" "$DEST" -rm "$TMPFILE" diff --git a/vendor/github.com/quic-go/quic-go/mtu_discoverer.go b/vendor/github.com/quic-go/quic-go/mtu_discoverer.go index 5a8484c76b..317b09292f 100644 --- a/vendor/github.com/quic-go/quic-go/mtu_discoverer.go +++ b/vendor/github.com/quic-go/quic-go/mtu_discoverer.go @@ -1,6 +1,7 @@ package quic import ( + "net" "time" "github.com/quic-go/quic-go/internal/ackhandler" @@ -10,7 +11,11 @@ import ( ) type mtuDiscoverer interface { + // Start starts the MTU discovery process. + // It's unnecessary to call ShouldSendProbe before that. + Start(maxPacketSize protocol.ByteCount) ShouldSendProbe(now time.Time) bool + CurrentSize() protocol.ByteCount GetPing() (ping ackhandler.Frame, datagramSize protocol.ByteCount) } @@ -22,25 +27,38 @@ const ( mtuProbeDelay = 5 ) +func getMaxPacketSize(addr net.Addr) protocol.ByteCount { + maxSize := protocol.ByteCount(protocol.MinInitialPacketSize) + // If this is not a UDP address, we don't know anything about the MTU. + // Use the minimum size of an Initial packet as the max packet size. + if udpAddr, ok := addr.(*net.UDPAddr); ok { + if utils.IsIPv4(udpAddr.IP) { + maxSize = protocol.InitialPacketSizeIPv4 + } else { + maxSize = protocol.InitialPacketSizeIPv6 + } + } + return maxSize +} + type mtuFinder struct { lastProbeTime time.Time - probeInFlight bool mtuIncreased func(protocol.ByteCount) rttStats *utils.RTTStats + inFlight protocol.ByteCount // the size of the probe packet currently in flight. InvalidByteCount if none is in flight current protocol.ByteCount max protocol.ByteCount // the maximum value, as advertised by the peer (or our maximum size buffer) } var _ mtuDiscoverer = &mtuFinder{} -func newMTUDiscoverer(rttStats *utils.RTTStats, start, max protocol.ByteCount, mtuIncreased func(protocol.ByteCount)) mtuDiscoverer { +func newMTUDiscoverer(rttStats *utils.RTTStats, start protocol.ByteCount, mtuIncreased func(protocol.ByteCount)) *mtuFinder { return &mtuFinder{ - current: start, - rttStats: rttStats, - lastProbeTime: time.Now(), // to make sure the first probe packet is not sent immediately - mtuIncreased: mtuIncreased, - max: max, + inFlight: protocol.InvalidByteCount, + current: start, + rttStats: rttStats, + mtuIncreased: mtuIncreased, } } @@ -48,8 +66,16 @@ func (f *mtuFinder) done() bool { return f.max-f.current <= maxMTUDiff+1 } +func (f *mtuFinder) Start(maxPacketSize protocol.ByteCount) { + f.lastProbeTime = time.Now() // makes sure the first probe packet is not sent immediately + f.max = maxPacketSize +} + func (f *mtuFinder) ShouldSendProbe(now time.Time) bool { - if f.probeInFlight || f.done() { + if f.max == 0 || f.lastProbeTime.IsZero() { + return false + } + if f.inFlight != protocol.InvalidByteCount || f.done() { return false } return !now.Before(f.lastProbeTime.Add(mtuProbeDelay * f.rttStats.SmoothedRTT())) @@ -58,17 +84,36 @@ func (f *mtuFinder) ShouldSendProbe(now time.Time) bool { func (f *mtuFinder) GetPing() (ackhandler.Frame, protocol.ByteCount) { size := (f.max + f.current) / 2 f.lastProbeTime = time.Now() - f.probeInFlight = true + f.inFlight = size return ackhandler.Frame{ - Frame: &wire.PingFrame{}, - OnLost: func(wire.Frame) { - f.probeInFlight = false - f.max = size - }, - OnAcked: func(wire.Frame) { - f.probeInFlight = false - f.current = size - f.mtuIncreased(size) - }, + Frame: &wire.PingFrame{}, + Handler: (*mtuFinderAckHandler)(f), }, size } + +func (f *mtuFinder) CurrentSize() protocol.ByteCount { + return f.current +} + +type mtuFinderAckHandler mtuFinder + +var _ ackhandler.FrameHandler = &mtuFinderAckHandler{} + +func (h *mtuFinderAckHandler) OnAcked(wire.Frame) { + size := h.inFlight + if size == protocol.InvalidByteCount { + panic("OnAcked callback called although there's no MTU probe packet in flight") + } + h.inFlight = protocol.InvalidByteCount + h.current = size + h.mtuIncreased(size) +} + +func (h *mtuFinderAckHandler) OnLost(wire.Frame) { + size := h.inFlight + if size == protocol.InvalidByteCount { + panic("OnLost callback called although there's no MTU probe packet in flight") + } + h.max = size + h.inFlight = protocol.InvalidByteCount +} diff --git a/vendor/github.com/quic-go/quic-go/multiplexer.go b/vendor/github.com/quic-go/quic-go/multiplexer.go index 37d4e75cf2..85f7f4034e 100644 --- a/vendor/github.com/quic-go/quic-go/multiplexer.go +++ b/vendor/github.com/quic-go/quic-go/multiplexer.go @@ -6,7 +6,6 @@ import ( "sync" "github.com/quic-go/quic-go/internal/utils" - "github.com/quic-go/quic-go/logging" ) var ( @@ -14,30 +13,19 @@ var ( connMuxer multiplexer ) -type indexableConn interface { - LocalAddr() net.Addr -} +type indexableConn interface{ LocalAddr() net.Addr } type multiplexer interface { - AddConn(c net.PacketConn, connIDLen int, statelessResetKey *StatelessResetKey, tracer logging.Tracer) (packetHandlerManager, error) + AddConn(conn indexableConn) RemoveConn(indexableConn) error } -type connManager struct { - connIDLen int - statelessResetKey *StatelessResetKey - tracer logging.Tracer - manager packetHandlerManager -} - // The connMultiplexer listens on multiple net.PacketConns and dispatches // incoming packets to the connection handler. type connMultiplexer struct { mutex sync.Mutex - conns map[string] /* LocalAddr().String() */ connManager - newPacketHandlerManager func(net.PacketConn, int, *StatelessResetKey, logging.Tracer, utils.Logger) (packetHandlerManager, error) // so it can be replaced in the tests - + conns map[string] /* LocalAddr().String() */ indexableConn logger utils.Logger } @@ -46,57 +34,38 @@ var _ multiplexer = &connMultiplexer{} func getMultiplexer() multiplexer { connMuxerOnce.Do(func() { connMuxer = &connMultiplexer{ - conns: make(map[string]connManager), - logger: utils.DefaultLogger.WithPrefix("muxer"), - newPacketHandlerManager: newPacketHandlerMap, + conns: make(map[string]indexableConn), + logger: utils.DefaultLogger.WithPrefix("muxer"), } }) return connMuxer } -func (m *connMultiplexer) AddConn( - c net.PacketConn, - connIDLen int, - statelessResetKey *StatelessResetKey, - tracer logging.Tracer, -) (packetHandlerManager, error) { +func (m *connMultiplexer) index(addr net.Addr) string { + return addr.Network() + " " + addr.String() +} + +func (m *connMultiplexer) AddConn(c indexableConn) { m.mutex.Lock() defer m.mutex.Unlock() - addr := c.LocalAddr() - connIndex := addr.Network() + " " + addr.String() + connIndex := m.index(c.LocalAddr()) p, ok := m.conns[connIndex] - if !ok { - manager, err := m.newPacketHandlerManager(c, connIDLen, statelessResetKey, tracer, m.logger) - if err != nil { - return nil, err - } - p = connManager{ - connIDLen: connIDLen, - statelessResetKey: statelessResetKey, - manager: manager, - tracer: tracer, - } - m.conns[connIndex] = p - } else { - if p.connIDLen != connIDLen { - return nil, fmt.Errorf("cannot use %d byte connection IDs on a connection that is already using %d byte connction IDs", connIDLen, p.connIDLen) - } - if statelessResetKey != nil && p.statelessResetKey != statelessResetKey { - return nil, fmt.Errorf("cannot use different stateless reset keys on the same packet conn") - } - if tracer != p.tracer { - return nil, fmt.Errorf("cannot use different tracers on the same packet conn") - } + if ok { + // Panics if we're already listening on this connection. + // This is a safeguard because we're introducing a breaking API change, see + // https://github.com/quic-go/quic-go/issues/3727 for details. + // We'll remove this at a later time, when most users of the library have made the switch. + panic("connection already exists") // TODO: write a nice message } - return p.manager, nil + m.conns[connIndex] = p } func (m *connMultiplexer) RemoveConn(c indexableConn) error { m.mutex.Lock() defer m.mutex.Unlock() - connIndex := c.LocalAddr().Network() + " " + c.LocalAddr().String() + connIndex := m.index(c.LocalAddr()) if _, ok := m.conns[connIndex]; !ok { return fmt.Errorf("cannote remove connection, connection is unknown") } diff --git a/vendor/github.com/quic-go/quic-go/oss-fuzz.sh b/vendor/github.com/quic-go/quic-go/oss-fuzz.sh new file mode 100644 index 0000000000..1efe6baa68 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/oss-fuzz.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Install Go manually, since oss-fuzz ships with an outdated Go version. +# See https://github.com/google/oss-fuzz/pull/10643. +export CXX="${CXX} -lresolv" # required by Go 1.20 +wget https://go.dev/dl/go1.20.5.linux-amd64.tar.gz \ + && mkdir temp-go \ + && rm -rf /root/.go/* \ + && tar -C temp-go/ -xzf go1.20.5.linux-amd64.tar.gz \ + && mv temp-go/go/* /root/.go/ \ + && rm -rf temp-go go1.20.5.linux-amd64.tar.gz + +( +# fuzz qpack +compile_go_fuzzer github.com/quic-go/qpack/fuzzing Fuzz qpack_fuzzer +) + +( +# fuzz quic-go +compile_go_fuzzer github.com/quic-go/quic-go/fuzzing/frames Fuzz frame_fuzzer +compile_go_fuzzer github.com/quic-go/quic-go/fuzzing/header Fuzz header_fuzzer +compile_go_fuzzer github.com/quic-go/quic-go/fuzzing/transportparameters Fuzz transportparameter_fuzzer +compile_go_fuzzer github.com/quic-go/quic-go/fuzzing/tokens Fuzz token_fuzzer +compile_go_fuzzer github.com/quic-go/quic-go/fuzzing/handshake Fuzz handshake_fuzzer + +if [ $SANITIZER == "coverage" ]; then + # no need for corpora if coverage + exit 0 +fi + +# generate seed corpora +cd $GOPATH/src/github.com/quic-go/quic-go/ +go generate -x ./fuzzing/... + +zip --quiet -r $OUT/header_fuzzer_seed_corpus.zip fuzzing/header/corpus +zip --quiet -r $OUT/frame_fuzzer_seed_corpus.zip fuzzing/frames/corpus +zip --quiet -r $OUT/transportparameter_fuzzer_seed_corpus.zip fuzzing/transportparameters/corpus +zip --quiet -r $OUT/handshake_fuzzer_seed_corpus.zip fuzzing/handshake/corpus +) + +# for debugging +ls -al $OUT diff --git a/vendor/github.com/quic-go/quic-go/packet_handler_map.go b/vendor/github.com/quic-go/quic-go/packet_handler_map.go index e2bc913ca9..e0f0567d70 100644 --- a/vendor/github.com/quic-go/quic-go/packet_handler_map.go +++ b/vendor/github.com/quic-go/quic-go/packet_handler_map.go @@ -5,147 +5,86 @@ import ( "crypto/rand" "crypto/sha256" "errors" - "fmt" "hash" "io" - "log" "net" - "os" - "strconv" - "strings" "sync" "time" "github.com/quic-go/quic-go/internal/protocol" "github.com/quic-go/quic-go/internal/utils" - "github.com/quic-go/quic-go/internal/wire" - "github.com/quic-go/quic-go/logging" ) -// rawConn is a connection that allow reading of a receivedPacket. +type connCapabilities struct { + // This connection has the Don't Fragment (DF) bit set. + // This means it makes to run DPLPMTUD. + DF bool + // GSO (Generic Segmentation Offload) supported + GSO bool +} + +// rawConn is a connection that allow reading of a receivedPackeh. type rawConn interface { - ReadPacket() (*receivedPacket, error) + ReadPacket() (receivedPacket, error) + // WritePacket writes a packet on the wire. + // If GSO is enabled, it's the caller's responsibility to set the correct control message. WritePacket(b []byte, addr net.Addr, oob []byte) (int, error) LocalAddr() net.Addr + SetReadDeadline(time.Time) error io.Closer + + capabilities() connCapabilities } type closePacket struct { payload []byte addr net.Addr - info *packetInfo + info packetInfo } -// The packetHandlerMap stores packetHandlers, identified by connection ID. -// It is used: -// * by the server to store connections -// * when multiplexing outgoing connections to store clients -type packetHandlerMap struct { - mutex sync.Mutex - - conn rawConn - connIDLen int +type unknownPacketHandler interface { + handlePacket(receivedPacket) + setCloseError(error) +} - closeQueue chan closePacket +var errListenerAlreadySet = errors.New("listener already set") - handlers map[protocol.ConnectionID]packetHandler - resetTokens map[protocol.StatelessResetToken] /* stateless reset token */ packetHandler - server unknownPacketHandler - numZeroRTTEntries int +type packetHandlerMap struct { + mutex sync.Mutex + handlers map[protocol.ConnectionID]packetHandler + resetTokens map[protocol.StatelessResetToken] /* stateless reset token */ packetHandler - listening chan struct{} // is closed when listen returns closed bool + closeChan chan struct{} + + enqueueClosePacket func(closePacket) deleteRetiredConnsAfter time.Duration - zeroRTTQueueDuration time.Duration - statelessResetEnabled bool - statelessResetMutex sync.Mutex - statelessResetHasher hash.Hash + statelessResetMutex sync.Mutex + statelessResetHasher hash.Hash - tracer logging.Tracer logger utils.Logger } var _ packetHandlerManager = &packetHandlerMap{} -func setReceiveBuffer(c net.PacketConn, logger utils.Logger) error { - conn, ok := c.(interface{ SetReadBuffer(int) error }) - if !ok { - return errors.New("connection doesn't allow setting of receive buffer size. Not a *net.UDPConn?") - } - size, err := inspectReadBuffer(c) - if err != nil { - return fmt.Errorf("failed to determine receive buffer size: %w", err) - } - if size >= protocol.DesiredReceiveBufferSize { - logger.Debugf("Conn has receive buffer of %d kiB (wanted: at least %d kiB)", size/1024, protocol.DesiredReceiveBufferSize/1024) - return nil - } - if err := conn.SetReadBuffer(protocol.DesiredReceiveBufferSize); err != nil { - return fmt.Errorf("failed to increase receive buffer size: %w", err) - } - newSize, err := inspectReadBuffer(c) - if err != nil { - return fmt.Errorf("failed to determine receive buffer size: %w", err) - } - if newSize == size { - return fmt.Errorf("failed to increase receive buffer size (wanted: %d kiB, got %d kiB)", protocol.DesiredReceiveBufferSize/1024, newSize/1024) - } - if newSize < protocol.DesiredReceiveBufferSize { - return fmt.Errorf("failed to sufficiently increase receive buffer size (was: %d kiB, wanted: %d kiB, got: %d kiB)", size/1024, protocol.DesiredReceiveBufferSize/1024, newSize/1024) - } - logger.Debugf("Increased receive buffer size to %d kiB", newSize/1024) - return nil -} - -// only print warnings about the UDP receive buffer size once -var receiveBufferWarningOnce sync.Once - -func newPacketHandlerMap( - c net.PacketConn, - connIDLen int, - statelessResetKey *StatelessResetKey, - tracer logging.Tracer, - logger utils.Logger, -) (packetHandlerManager, error) { - if err := setReceiveBuffer(c, logger); err != nil { - if !strings.Contains(err.Error(), "use of closed network connection") { - receiveBufferWarningOnce.Do(func() { - if disable, _ := strconv.ParseBool(os.Getenv("QUIC_GO_DISABLE_RECEIVE_BUFFER_WARNING")); disable { - return - } - log.Printf("%s. See https://github.com/quic-go/quic-go/wiki/UDP-Receive-Buffer-Size for details.", err) - }) - } - } - conn, err := wrapConn(c) - if err != nil { - return nil, err - } - m := &packetHandlerMap{ - conn: conn, - connIDLen: connIDLen, - listening: make(chan struct{}), +func newPacketHandlerMap(key *StatelessResetKey, enqueueClosePacket func(closePacket), logger utils.Logger) *packetHandlerMap { + h := &packetHandlerMap{ + closeChan: make(chan struct{}), handlers: make(map[protocol.ConnectionID]packetHandler), resetTokens: make(map[protocol.StatelessResetToken]packetHandler), deleteRetiredConnsAfter: protocol.RetiredConnectionIDDeleteTimeout, - zeroRTTQueueDuration: protocol.Max0RTTQueueingDuration, - closeQueue: make(chan closePacket, 4), - statelessResetEnabled: statelessResetKey != nil, - tracer: tracer, + enqueueClosePacket: enqueueClosePacket, logger: logger, } - if m.statelessResetEnabled { - m.statelessResetHasher = hmac.New(sha256.New, statelessResetKey[:]) + if key != nil { + h.statelessResetHasher = hmac.New(sha256.New, key[:]) } - go m.listen() - go m.runCloseQueue() - - if logger.Debug() { - go m.logUsage() + if h.logger.Debug() { + go h.logUsage() } - return m, nil + return h } func (h *packetHandlerMap) logUsage() { @@ -153,7 +92,7 @@ func (h *packetHandlerMap) logUsage() { var printedZero bool for { select { - case <-h.listening: + case <-h.closeChan: return case <-ticker.C: } @@ -174,6 +113,14 @@ func (h *packetHandlerMap) logUsage() { } } +func (h *packetHandlerMap) Get(id protocol.ConnectionID) (packetHandler, bool) { + h.mutex.Lock() + defer h.mutex.Unlock() + + handler, ok := h.handlers[id] + return handler, ok +} + func (h *packetHandlerMap) Add(id protocol.ConnectionID, handler packetHandler) bool /* was added */ { h.mutex.Lock() defer h.mutex.Unlock() @@ -187,26 +134,17 @@ func (h *packetHandlerMap) Add(id protocol.ConnectionID, handler packetHandler) return true } -func (h *packetHandlerMap) AddWithConnID(clientDestConnID, newConnID protocol.ConnectionID, fn func() packetHandler) bool { +func (h *packetHandlerMap) AddWithConnID(clientDestConnID, newConnID protocol.ConnectionID, fn func() (packetHandler, bool)) bool { h.mutex.Lock() defer h.mutex.Unlock() - var q *zeroRTTQueue - if handler, ok := h.handlers[clientDestConnID]; ok { - q, ok = handler.(*zeroRTTQueue) - if !ok { - h.logger.Debugf("Not adding connection ID %s for a new connection, as it already exists.", clientDestConnID) - return false - } - q.retireTimer.Stop() - h.numZeroRTTEntries-- - if h.numZeroRTTEntries < 0 { - panic("number of 0-RTT queues < 0") - } + if _, ok := h.handlers[clientDestConnID]; ok { + h.logger.Debugf("Not adding connection ID %s for a new connection, as it already exists.", clientDestConnID) + return false } - conn := fn() - if q != nil { - q.EnqueueAll(conn) + conn, ok := fn() + if !ok { + return false } h.handlers[clientDestConnID] = conn h.handlers[newConnID] = conn @@ -239,13 +177,8 @@ func (h *packetHandlerMap) ReplaceWithClosed(ids []protocol.ConnectionID, pers p var handler packetHandler if connClosePacket != nil { handler = newClosedLocalConn( - func(addr net.Addr, info *packetInfo) { - select { - case h.closeQueue <- closePacket{payload: connClosePacket, addr: addr, info: info}: - default: - // Oops, we're backlogged. - // Just drop the packet, sending CONNECTION_CLOSE copies is best effort anyway. - } + func(addr net.Addr, info packetInfo) { + h.enqueueClosePacket(closePacket{payload: connClosePacket, addr: addr, info: info}) }, pers, h.logger, @@ -272,17 +205,6 @@ func (h *packetHandlerMap) ReplaceWithClosed(ids []protocol.ConnectionID, pers p }) } -func (h *packetHandlerMap) runCloseQueue() { - for { - select { - case <-h.listening: - return - case p := <-h.closeQueue: - h.conn.WritePacket(p.payload, p.addr, p.info.OOB()) - } - } -} - func (h *packetHandlerMap) AddResetToken(token protocol.StatelessResetToken, handler packetHandler) { h.mutex.Lock() h.resetTokens[token] = handler @@ -295,19 +217,16 @@ func (h *packetHandlerMap) RemoveResetToken(token protocol.StatelessResetToken) h.mutex.Unlock() } -func (h *packetHandlerMap) SetServer(s unknownPacketHandler) { +func (h *packetHandlerMap) GetByResetToken(token protocol.StatelessResetToken) (packetHandler, bool) { h.mutex.Lock() - h.server = s - h.mutex.Unlock() + defer h.mutex.Unlock() + + handler, ok := h.resetTokens[token] + return handler, ok } func (h *packetHandlerMap) CloseServer() { h.mutex.Lock() - if h.server == nil { - h.mutex.Unlock() - return - } - h.server = nil var wg sync.WaitGroup for _, handler := range h.handlers { if handler.getPerspective() == protocol.PerspectiveServer { @@ -323,23 +242,16 @@ func (h *packetHandlerMap) CloseServer() { wg.Wait() } -// Destroy closes the underlying connection and waits until listen() has returned. -// It does not close active connections. -func (h *packetHandlerMap) Destroy() error { - if err := h.conn.Close(); err != nil { - return err - } - <-h.listening // wait until listening returns - return nil -} - -func (h *packetHandlerMap) close(e error) error { +func (h *packetHandlerMap) Close(e error) { h.mutex.Lock() + if h.closed { h.mutex.Unlock() - return nil + return } + close(h.closeChan) + var wg sync.WaitGroup for _, handler := range h.handlers { wg.Add(1) @@ -348,127 +260,14 @@ func (h *packetHandlerMap) close(e error) error { wg.Done() }(handler) } - - if h.server != nil { - h.server.setCloseError(e) - } h.closed = true h.mutex.Unlock() wg.Wait() - return getMultiplexer().RemoveConn(h.conn) -} - -func (h *packetHandlerMap) listen() { - defer close(h.listening) - for { - p, err := h.conn.ReadPacket() - //nolint:staticcheck // SA1019 ignore this! - // TODO: This code is used to ignore wsa errors on Windows. - // Since net.Error.Temporary is deprecated as of Go 1.18, we should find a better solution. - // See https://github.com/quic-go/quic-go/issues/1737 for details. - if nerr, ok := err.(net.Error); ok && nerr.Temporary() { - h.logger.Debugf("Temporary error reading from conn: %w", err) - continue - } - if err != nil { - h.close(err) - return - } - h.handlePacket(p) - } -} - -func (h *packetHandlerMap) handlePacket(p *receivedPacket) { - connID, err := wire.ParseConnectionID(p.data, h.connIDLen) - if err != nil { - h.logger.Debugf("error parsing connection ID on packet from %s: %s", p.remoteAddr, err) - if h.tracer != nil { - h.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropHeaderParseError) - } - p.buffer.MaybeRelease() - return - } - - h.mutex.Lock() - defer h.mutex.Unlock() - - if isStatelessReset := h.maybeHandleStatelessReset(p.data); isStatelessReset { - return - } - - if handler, ok := h.handlers[connID]; ok { - if ha, ok := handler.(*zeroRTTQueue); ok { // only enqueue 0-RTT packets in the 0-RTT queue - if wire.Is0RTTPacket(p.data) { - ha.handlePacket(p) - return - } - } else { // existing connection - handler.handlePacket(p) - return - } - } - if !wire.IsLongHeaderPacket(p.data[0]) { - go h.maybeSendStatelessReset(p, connID) - return - } - if h.server == nil { // no server set - h.logger.Debugf("received a packet with an unexpected connection ID %s", connID) - return - } - if wire.Is0RTTPacket(p.data) { - if h.numZeroRTTEntries >= protocol.Max0RTTQueues { - return - } - h.numZeroRTTEntries++ - queue := &zeroRTTQueue{queue: make([]*receivedPacket, 0, 8)} - h.handlers[connID] = queue - queue.retireTimer = time.AfterFunc(h.zeroRTTQueueDuration, func() { - h.mutex.Lock() - defer h.mutex.Unlock() - // The entry might have been replaced by an actual connection. - // Only delete it if it's still a 0-RTT queue. - if handler, ok := h.handlers[connID]; ok { - if q, ok := handler.(*zeroRTTQueue); ok { - delete(h.handlers, connID) - h.numZeroRTTEntries-- - if h.numZeroRTTEntries < 0 { - panic("number of 0-RTT queues < 0") - } - q.Clear() - if h.logger.Debug() { - h.logger.Debugf("Removing 0-RTT queue for %s.", connID) - } - } - } - }) - queue.handlePacket(p) - return - } - h.server.handlePacket(p) -} - -func (h *packetHandlerMap) maybeHandleStatelessReset(data []byte) bool { - // stateless resets are always short header packets - if wire.IsLongHeaderPacket(data[0]) { - return false - } - if len(data) < 17 /* type byte + 16 bytes for the reset token */ { - return false - } - - var token protocol.StatelessResetToken - copy(token[:], data[len(data)-16:]) - if sess, ok := h.resetTokens[token]; ok { - h.logger.Debugf("Received a stateless reset with token %#x. Closing connection.", token) - go sess.destroy(&StatelessResetError{Token: token}) - return true - } - return false } func (h *packetHandlerMap) GetStatelessResetToken(connID protocol.ConnectionID) protocol.StatelessResetToken { var token protocol.StatelessResetToken - if !h.statelessResetEnabled { + if h.statelessResetHasher == nil { // Return a random stateless reset token. // This token will be sent in the server's transport parameters. // By using a random token, an off-path attacker won't be able to disrupt the connection. @@ -482,24 +281,3 @@ func (h *packetHandlerMap) GetStatelessResetToken(connID protocol.ConnectionID) h.statelessResetMutex.Unlock() return token } - -func (h *packetHandlerMap) maybeSendStatelessReset(p *receivedPacket, connID protocol.ConnectionID) { - defer p.buffer.Release() - if !h.statelessResetEnabled { - return - } - // Don't send a stateless reset in response to very small packets. - // This includes packets that could be stateless resets. - if len(p.data) <= protocol.MinStatelessResetSize { - return - } - token := h.GetStatelessResetToken(connID) - h.logger.Debugf("Sending stateless reset to %s (connection ID: %s). Token: %#x", p.remoteAddr, connID, token) - data := make([]byte, protocol.MinStatelessResetSize-16, protocol.MinStatelessResetSize) - rand.Read(data) - data[0] = (data[0] & 0x7f) | 0x40 - data = append(data, token[:]...) - if _, err := h.conn.WritePacket(data, p.remoteAddr, p.info.OOB()); err != nil { - h.logger.Debugf("Error sending Stateless Reset: %s", err) - } -} diff --git a/vendor/github.com/quic-go/quic-go/packet_packer.go b/vendor/github.com/quic-go/quic-go/packet_packer.go index 14befd460f..577f3b043a 100644 --- a/vendor/github.com/quic-go/quic-go/packet_packer.go +++ b/vendor/github.com/quic-go/quic-go/packet_packer.go @@ -3,30 +3,25 @@ package quic import ( "errors" "fmt" - "net" - "time" "github.com/quic-go/quic-go/internal/ackhandler" "github.com/quic-go/quic-go/internal/handshake" "github.com/quic-go/quic-go/internal/protocol" "github.com/quic-go/quic-go/internal/qerr" - "github.com/quic-go/quic-go/internal/utils" "github.com/quic-go/quic-go/internal/wire" ) var errNothingToPack = errors.New("nothing to pack") type packer interface { - PackCoalescedPacket(onlyAck bool, v protocol.VersionNumber) (*coalescedPacket, error) - PackPacket(onlyAck bool, now time.Time, v protocol.VersionNumber) (shortHeaderPacket, *packetBuffer, error) - MaybePackProbePacket(protocol.EncryptionLevel, protocol.VersionNumber) (*coalescedPacket, error) - PackConnectionClose(*qerr.TransportError, protocol.VersionNumber) (*coalescedPacket, error) - PackApplicationClose(*qerr.ApplicationError, protocol.VersionNumber) (*coalescedPacket, error) + PackCoalescedPacket(onlyAck bool, maxPacketSize protocol.ByteCount, v protocol.VersionNumber) (*coalescedPacket, error) + PackAckOnlyPacket(maxPacketSize protocol.ByteCount, v protocol.VersionNumber) (shortHeaderPacket, *packetBuffer, error) + AppendPacket(buf *packetBuffer, maxPacketSize protocol.ByteCount, v protocol.VersionNumber) (shortHeaderPacket, error) + MaybePackProbePacket(protocol.EncryptionLevel, protocol.ByteCount, protocol.VersionNumber) (*coalescedPacket, error) + PackConnectionClose(*qerr.TransportError, protocol.ByteCount, protocol.VersionNumber) (*coalescedPacket, error) + PackApplicationClose(*qerr.ApplicationError, protocol.ByteCount, protocol.VersionNumber) (*coalescedPacket, error) + PackMTUProbePacket(ping ackhandler.Frame, size protocol.ByteCount, v protocol.VersionNumber) (shortHeaderPacket, *packetBuffer, error) - SetMaxPacketSize(protocol.ByteCount) - PackMTUProbePacket(ping ackhandler.Frame, size protocol.ByteCount, now time.Time, v protocol.VersionNumber) (shortHeaderPacket, *packetBuffer, error) - - HandleTransportParameters(*wire.TransportParameters) SetToken([]byte) } @@ -35,26 +30,31 @@ type sealer interface { } type payload struct { - frames []*ackhandler.Frame - ack *wire.AckFrame - length protocol.ByteCount + streamFrames []ackhandler.StreamFrame + frames []ackhandler.Frame + ack *wire.AckFrame + length protocol.ByteCount } type longHeaderPacket struct { - header *wire.ExtendedHeader - ack *wire.AckFrame - frames []*ackhandler.Frame + header *wire.ExtendedHeader + ack *wire.AckFrame + frames []ackhandler.Frame + streamFrames []ackhandler.StreamFrame // only used for 0-RTT packets length protocol.ByteCount - - isMTUProbePacket bool } type shortHeaderPacket struct { - *ackhandler.Packet + PacketNumber protocol.PacketNumber + Frames []ackhandler.Frame + StreamFrames []ackhandler.StreamFrame + Ack *wire.AckFrame + Length protocol.ByteCount + IsPathMTUProbePacket bool + // used for logging DestConnID protocol.ConnectionID - Ack *wire.AckFrame PacketNumberLen protocol.PacketNumberLen KeyPhase protocol.KeyPhaseBit } @@ -83,52 +83,6 @@ func (p *longHeaderPacket) EncryptionLevel() protocol.EncryptionLevel { func (p *longHeaderPacket) IsAckEliciting() bool { return ackhandler.HasAckElicitingFrames(p.frames) } -func (p *longHeaderPacket) ToAckHandlerPacket(now time.Time, q *retransmissionQueue) *ackhandler.Packet { - largestAcked := protocol.InvalidPacketNumber - if p.ack != nil { - largestAcked = p.ack.LargestAcked() - } - encLevel := p.EncryptionLevel() - for i := range p.frames { - if p.frames[i].OnLost != nil { - continue - } - //nolint:exhaustive // Short header packets are handled separately. - switch encLevel { - case protocol.EncryptionInitial: - p.frames[i].OnLost = q.AddInitial - case protocol.EncryptionHandshake: - p.frames[i].OnLost = q.AddHandshake - case protocol.Encryption0RTT: - p.frames[i].OnLost = q.AddAppData - } - } - - ap := ackhandler.GetPacket() - ap.PacketNumber = p.header.PacketNumber - ap.LargestAcked = largestAcked - ap.Frames = p.frames - ap.Length = p.length - ap.EncryptionLevel = encLevel - ap.SendTime = now - ap.IsPathMTUProbePacket = p.isMTUProbePacket - return ap -} - -func getMaxPacketSize(addr net.Addr) protocol.ByteCount { - maxSize := protocol.ByteCount(protocol.MinInitialPacketSize) - // If this is not a UDP address, we don't know anything about the MTU. - // Use the minimum size of an Initial packet as the max packet size. - if udpAddr, ok := addr.(*net.UDPAddr); ok { - if utils.IsIPv4(udpAddr.IP) { - maxSize = protocol.InitialPacketSizeIPv4 - } else { - maxSize = protocol.InitialPacketSizeIPv6 - } - } - return maxSize -} - type packetNumberManager interface { PeekPacketNumber(protocol.EncryptionLevel) (protocol.PacketNumber, protocol.PacketNumberLen) PopPacketNumber(protocol.EncryptionLevel) protocol.PacketNumber @@ -143,8 +97,8 @@ type sealingManager interface { type frameSource interface { HasData() bool - AppendStreamFrames([]*ackhandler.Frame, protocol.ByteCount, protocol.VersionNumber) ([]*ackhandler.Frame, protocol.ByteCount) - AppendControlFrames([]*ackhandler.Frame, protocol.ByteCount, protocol.VersionNumber) ([]*ackhandler.Frame, protocol.ByteCount) + AppendStreamFrames([]ackhandler.StreamFrame, protocol.ByteCount, protocol.VersionNumber) ([]ackhandler.StreamFrame, protocol.ByteCount) + AppendControlFrames([]ackhandler.Frame, protocol.ByteCount, protocol.VersionNumber) ([]ackhandler.Frame, protocol.ByteCount) } type ackFrameSource interface { @@ -169,13 +123,23 @@ type packetPacker struct { datagramQueue *datagramQueue retransmissionQueue *retransmissionQueue - maxPacketSize protocol.ByteCount numNonAckElicitingAcks int } var _ packer = &packetPacker{} -func newPacketPacker(srcConnID protocol.ConnectionID, getDestConnID func() protocol.ConnectionID, initialStream cryptoStream, handshakeStream cryptoStream, packetNumberManager packetNumberManager, retransmissionQueue *retransmissionQueue, remoteAddr net.Addr, cryptoSetup sealingManager, framer frameSource, acks ackFrameSource, datagramQueue *datagramQueue, perspective protocol.Perspective) *packetPacker { +func newPacketPacker( + srcConnID protocol.ConnectionID, + getDestConnID func() protocol.ConnectionID, + initialStream, handshakeStream cryptoStream, + packetNumberManager packetNumberManager, + retransmissionQueue *retransmissionQueue, + cryptoSetup sealingManager, + framer frameSource, + acks ackFrameSource, + datagramQueue *datagramQueue, + perspective protocol.Perspective, +) *packetPacker { return &packetPacker{ cryptoSetup: cryptoSetup, getDestConnID: getDestConnID, @@ -188,23 +152,22 @@ func newPacketPacker(srcConnID protocol.ConnectionID, getDestConnID func() proto framer: framer, acks: acks, pnManager: packetNumberManager, - maxPacketSize: getMaxPacketSize(remoteAddr), } } // PackConnectionClose packs a packet that closes the connection with a transport error. -func (p *packetPacker) PackConnectionClose(e *qerr.TransportError, v protocol.VersionNumber) (*coalescedPacket, error) { +func (p *packetPacker) PackConnectionClose(e *qerr.TransportError, maxPacketSize protocol.ByteCount, v protocol.VersionNumber) (*coalescedPacket, error) { var reason string // don't send details of crypto errors if !e.ErrorCode.IsCryptoError() { reason = e.ErrorMessage } - return p.packConnectionClose(false, uint64(e.ErrorCode), e.FrameType, reason, v) + return p.packConnectionClose(false, uint64(e.ErrorCode), e.FrameType, reason, maxPacketSize, v) } // PackApplicationClose packs a packet that closes the connection with an application error. -func (p *packetPacker) PackApplicationClose(e *qerr.ApplicationError, v protocol.VersionNumber) (*coalescedPacket, error) { - return p.packConnectionClose(true, uint64(e.ErrorCode), 0, e.ErrorMessage, v) +func (p *packetPacker) PackApplicationClose(e *qerr.ApplicationError, maxPacketSize protocol.ByteCount, v protocol.VersionNumber) (*coalescedPacket, error) { + return p.packConnectionClose(true, uint64(e.ErrorCode), 0, e.ErrorMessage, maxPacketSize, v) } func (p *packetPacker) packConnectionClose( @@ -212,6 +175,7 @@ func (p *packetPacker) packConnectionClose( errorCode uint64, frameType uint64, reason string, + maxPacketSize protocol.ByteCount, v protocol.VersionNumber, ) (*coalescedPacket, error) { var sealers [4]sealer @@ -241,7 +205,7 @@ func (p *packetPacker) packConnectionClose( ccf.ReasonPhrase = "" } pl := payload{ - frames: []*ackhandler.Frame{{Frame: ccf}}, + frames: []ackhandler.Frame{{Frame: ccf}}, length: ccf.Length(v), } @@ -293,20 +257,14 @@ func (p *packetPacker) packConnectionClose( } var paddingLen protocol.ByteCount if encLevel == protocol.EncryptionInitial { - paddingLen = p.initialPaddingLen(payloads[i].frames, size) + paddingLen = p.initialPaddingLen(payloads[i].frames, size, maxPacketSize) } if encLevel == protocol.Encryption1RTT { - ap, ack, err := p.appendShortHeaderPacket(buffer, connID, oneRTTPacketNumber, oneRTTPacketNumberLen, keyPhase, payloads[i], paddingLen, sealers[i], false, v) + shp, err := p.appendShortHeaderPacket(buffer, connID, oneRTTPacketNumber, oneRTTPacketNumberLen, keyPhase, payloads[i], paddingLen, maxPacketSize, sealers[i], false, v) if err != nil { return nil, err } - packet.shortHdrPacket = &shortHeaderPacket{ - Packet: ap, - DestConnID: connID, - Ack: ack, - PacketNumberLen: oneRTTPacketNumberLen, - KeyPhase: keyPhase, - } + packet.shortHdrPacket = &shp } else { longHdrPacket, err := p.appendLongHeaderPacket(buffer, hdrs[i], payloads[i], paddingLen, encLevel, sealers[i], v) if err != nil { @@ -342,25 +300,21 @@ func (p *packetPacker) shortHeaderPacketLength(connID protocol.ConnectionID, pnL } // size is the expected size of the packet, if no padding was applied. -func (p *packetPacker) initialPaddingLen(frames []*ackhandler.Frame, size protocol.ByteCount) protocol.ByteCount { +func (p *packetPacker) initialPaddingLen(frames []ackhandler.Frame, currentSize, maxPacketSize protocol.ByteCount) protocol.ByteCount { // For the server, only ack-eliciting Initial packets need to be padded. if p.perspective == protocol.PerspectiveServer && !ackhandler.HasAckElicitingFrames(frames) { return 0 } - if size >= p.maxPacketSize { + if currentSize >= maxPacketSize { return 0 } - return p.maxPacketSize - size + return maxPacketSize - currentSize } // PackCoalescedPacket packs a new packet. // It packs an Initial / Handshake if there is data to send in these packet number spaces. // It should only be called before the handshake is confirmed. -func (p *packetPacker) PackCoalescedPacket(onlyAck bool, v protocol.VersionNumber) (*coalescedPacket, error) { - maxPacketSize := p.maxPacketSize - if p.perspective == protocol.PerspectiveClient { - maxPacketSize = protocol.MinInitialPacketSize - } +func (p *packetPacker) PackCoalescedPacket(onlyAck bool, maxPacketSize protocol.ByteCount, v protocol.VersionNumber) (*coalescedPacket, error) { var ( initialHdr, handshakeHdr, zeroRTTHdr *wire.ExtendedHeader initialPayload, handshakePayload, zeroRTTPayload, oneRTTPayload payload @@ -417,7 +371,7 @@ func (p *packetPacker) PackCoalescedPacket(onlyAck bool, v protocol.VersionNumbe if oneRTTPayload.length > 0 { size += p.shortHeaderPacketLength(connID, oneRTTPacketNumberLen, oneRTTPayload) + protocol.ByteCount(oneRTTSealer.Overhead()) } - } else if p.perspective == protocol.PerspectiveClient { // 0-RTT + } else if p.perspective == protocol.PerspectiveClient && !onlyAck { // 0-RTT packets can't contain ACK frames var err error zeroRTTSealer, err = p.cryptoSetup.Get0RTTSealer() if err != nil && err != handshake.ErrKeysDropped && err != handshake.ErrKeysNotYetAvailable { @@ -442,7 +396,7 @@ func (p *packetPacker) PackCoalescedPacket(onlyAck bool, v protocol.VersionNumbe longHdrPackets: make([]*longHeaderPacket, 0, 3), } if initialPayload.length > 0 { - padding := p.initialPaddingLen(initialPayload.frames, size) + padding := p.initialPaddingLen(initialPayload.frames, size, maxPacketSize) cont, err := p.appendLongHeaderPacket(buffer, initialHdr, initialPayload, padding, protocol.EncryptionInitial, initialSealer, v) if err != nil { return nil, err @@ -463,48 +417,44 @@ func (p *packetPacker) PackCoalescedPacket(onlyAck bool, v protocol.VersionNumbe } packet.longHdrPackets = append(packet.longHdrPackets, longHdrPacket) } else if oneRTTPayload.length > 0 { - ap, ack, err := p.appendShortHeaderPacket(buffer, connID, oneRTTPacketNumber, oneRTTPacketNumberLen, kp, oneRTTPayload, 0, oneRTTSealer, false, v) + shp, err := p.appendShortHeaderPacket(buffer, connID, oneRTTPacketNumber, oneRTTPacketNumberLen, kp, oneRTTPayload, 0, maxPacketSize, oneRTTSealer, false, v) if err != nil { return nil, err } - packet.shortHdrPacket = &shortHeaderPacket{ - Packet: ap, - DestConnID: connID, - Ack: ack, - PacketNumberLen: oneRTTPacketNumberLen, - KeyPhase: kp, - } + packet.shortHdrPacket = &shp } return packet, nil } -// PackPacket packs a packet in the application data packet number space. +// PackAckOnlyPacket packs a packet containing only an ACK in the application data packet number space. +// It should be called after the handshake is confirmed. +func (p *packetPacker) PackAckOnlyPacket(maxPacketSize protocol.ByteCount, v protocol.VersionNumber) (shortHeaderPacket, *packetBuffer, error) { + buf := getPacketBuffer() + packet, err := p.appendPacket(buf, true, maxPacketSize, v) + return packet, buf, err +} + +// AppendPacket packs a packet in the application data packet number space. // It should be called after the handshake is confirmed. -func (p *packetPacker) PackPacket(onlyAck bool, now time.Time, v protocol.VersionNumber) (shortHeaderPacket, *packetBuffer, error) { +func (p *packetPacker) AppendPacket(buf *packetBuffer, maxPacketSize protocol.ByteCount, v protocol.VersionNumber) (shortHeaderPacket, error) { + return p.appendPacket(buf, false, maxPacketSize, v) +} + +func (p *packetPacker) appendPacket(buf *packetBuffer, onlyAck bool, maxPacketSize protocol.ByteCount, v protocol.VersionNumber) (shortHeaderPacket, error) { sealer, err := p.cryptoSetup.Get1RTTSealer() if err != nil { - return shortHeaderPacket{}, nil, err + return shortHeaderPacket{}, err } pn, pnLen := p.pnManager.PeekPacketNumber(protocol.Encryption1RTT) connID := p.getDestConnID() hdrLen := wire.ShortHeaderLen(connID, pnLen) - pl := p.maybeGetShortHeaderPacket(sealer, hdrLen, p.maxPacketSize, onlyAck, true, v) + pl := p.maybeGetShortHeaderPacket(sealer, hdrLen, maxPacketSize, onlyAck, true, v) if pl.length == 0 { - return shortHeaderPacket{}, nil, errNothingToPack + return shortHeaderPacket{}, errNothingToPack } kp := sealer.KeyPhase() - buffer := getPacketBuffer() - ap, ack, err := p.appendShortHeaderPacket(buffer, connID, pn, pnLen, kp, pl, 0, sealer, false, v) - if err != nil { - return shortHeaderPacket{}, nil, err - } - return shortHeaderPacket{ - Packet: ap, - DestConnID: connID, - Ack: ack, - PacketNumberLen: pnLen, - KeyPhase: kp, - }, buffer, nil + + return p.appendShortHeaderPacket(buf, connID, pn, pnLen, kp, pl, 0, maxPacketSize, sealer, false, v) } func (p *packetPacker) maybeGetCryptoPacket(maxPacketSize protocol.ByteCount, encLevel protocol.EncryptionLevel, onlyAck, ackAllowed bool, v protocol.VersionNumber) (*wire.ExtendedHeader, payload) { @@ -519,14 +469,17 @@ func (p *packetPacker) maybeGetCryptoPacket(maxPacketSize protocol.ByteCount, en } var s cryptoStream + var handler ackhandler.FrameHandler var hasRetransmission bool //nolint:exhaustive // Initial and Handshake are the only two encryption levels here. switch encLevel { case protocol.EncryptionInitial: s = p.initialStream + handler = p.retransmissionQueue.InitialAckHandler() hasRetransmission = p.retransmissionQueue.HasInitialData() case protocol.EncryptionHandshake: s = p.handshakeStream + handler = p.retransmissionQueue.HandshakeAckHandler() hasRetransmission = p.retransmissionQueue.HasHandshakeData() } @@ -550,27 +503,27 @@ func (p *packetPacker) maybeGetCryptoPacket(maxPacketSize protocol.ByteCount, en maxPacketSize -= hdr.GetLength(v) if hasRetransmission { for { - var f wire.Frame + var f ackhandler.Frame //nolint:exhaustive // 0-RTT packets can't contain any retransmission.s switch encLevel { case protocol.EncryptionInitial: - f = p.retransmissionQueue.GetInitialFrame(maxPacketSize, v) + f.Frame = p.retransmissionQueue.GetInitialFrame(maxPacketSize, v) + f.Handler = p.retransmissionQueue.InitialAckHandler() case protocol.EncryptionHandshake: - f = p.retransmissionQueue.GetHandshakeFrame(maxPacketSize, v) + f.Frame = p.retransmissionQueue.GetHandshakeFrame(maxPacketSize, v) + f.Handler = p.retransmissionQueue.HandshakeAckHandler() } - if f == nil { + if f.Frame == nil { break } - af := ackhandler.GetFrame() - af.Frame = f - pl.frames = append(pl.frames, af) - frameLen := f.Length(v) + pl.frames = append(pl.frames, f) + frameLen := f.Frame.Length(v) pl.length += frameLen maxPacketSize -= frameLen } } else if s.HasData() { cf := s.PopCryptoFrame(maxPacketSize) - pl.frames = []*ackhandler.Frame{{Frame: cf}} + pl.frames = []ackhandler.Frame{{Frame: cf, Handler: handler}} pl.length += cf.Length(v) } return hdr, pl @@ -595,18 +548,14 @@ func (p *packetPacker) maybeGetAppDataPacket(maxPayloadSize protocol.ByteCount, pl := p.composeNextPacket(maxPayloadSize, onlyAck, ackAllowed, v) // check if we have anything to send - if len(pl.frames) == 0 { + if len(pl.frames) == 0 && len(pl.streamFrames) == 0 { if pl.ack == nil { return payload{} } // the packet only contains an ACK if p.numNonAckElicitingAcks >= protocol.MaxNonAckElicitingAcks { ping := &wire.PingFrame{} - // don't retransmit the PING frame when it is lost - af := ackhandler.GetFrame() - af.Frame = ping - af.OnLost = func(wire.Frame) {} - pl.frames = append(pl.frames, af) + pl.frames = append(pl.frames, ackhandler.Frame{Frame: ping}) pl.length += ping.Length(v) p.numNonAckElicitingAcks = 0 } else { @@ -621,15 +570,12 @@ func (p *packetPacker) maybeGetAppDataPacket(maxPayloadSize protocol.ByteCount, func (p *packetPacker) composeNextPacket(maxFrameSize protocol.ByteCount, onlyAck, ackAllowed bool, v protocol.VersionNumber) payload { if onlyAck { if ack := p.acks.GetAckFrame(protocol.Encryption1RTT, true); ack != nil { - return payload{ - ack: ack, - length: ack.Length(v), - } + return payload{ack: ack, length: ack.Length(v)} } return payload{} } - pl := payload{frames: make([]*ackhandler.Frame, 0, 1)} + pl := payload{streamFrames: make([]ackhandler.StreamFrame, 0, 1)} hasData := p.framer.HasData() hasRetransmission := p.retransmissionQueue.HasAppData() @@ -647,11 +593,7 @@ func (p *packetPacker) composeNextPacket(maxFrameSize protocol.ByteCount, onlyAc if f := p.datagramQueue.Peek(); f != nil { size := f.Length(v) if size <= maxFrameSize-pl.length { - af := ackhandler.GetFrame() - af.Frame = f - // set it to a no-op. Then we won't set the default callback, which would retransmit the frame. - af.OnLost = func(wire.Frame) {} - pl.frames = append(pl.frames, af) + pl.frames = append(pl.frames, ackhandler.Frame{Frame: f}) pl.length += size p.datagramQueue.Pop() } @@ -672,25 +614,28 @@ func (p *packetPacker) composeNextPacket(maxFrameSize protocol.ByteCount, onlyAc if f == nil { break } - af := ackhandler.GetFrame() - af.Frame = f - pl.frames = append(pl.frames, af) + pl.frames = append(pl.frames, ackhandler.Frame{Frame: f, Handler: p.retransmissionQueue.AppDataAckHandler()}) pl.length += f.Length(v) } } if hasData { var lengthAdded protocol.ByteCount + startLen := len(pl.frames) pl.frames, lengthAdded = p.framer.AppendControlFrames(pl.frames, maxFrameSize-pl.length, v) pl.length += lengthAdded + // add handlers for the control frames that were added + for i := startLen; i < len(pl.frames); i++ { + pl.frames[i].Handler = p.retransmissionQueue.AppDataAckHandler() + } - pl.frames, lengthAdded = p.framer.AppendStreamFrames(pl.frames, maxFrameSize-pl.length, v) + pl.streamFrames, lengthAdded = p.framer.AppendStreamFrames(pl.streamFrames, maxFrameSize-pl.length, v) pl.length += lengthAdded } return pl } -func (p *packetPacker) MaybePackProbePacket(encLevel protocol.EncryptionLevel, v protocol.VersionNumber) (*coalescedPacket, error) { +func (p *packetPacker) MaybePackProbePacket(encLevel protocol.EncryptionLevel, maxPacketSize protocol.ByteCount, v protocol.VersionNumber) (*coalescedPacket, error) { if encLevel == protocol.Encryption1RTT { s, err := p.cryptoSetup.Get1RTTSealer() if err != nil { @@ -700,23 +645,17 @@ func (p *packetPacker) MaybePackProbePacket(encLevel protocol.EncryptionLevel, v connID := p.getDestConnID() pn, pnLen := p.pnManager.PeekPacketNumber(protocol.Encryption1RTT) hdrLen := wire.ShortHeaderLen(connID, pnLen) - pl := p.maybeGetAppDataPacket(p.maxPacketSize-protocol.ByteCount(s.Overhead())-hdrLen, false, true, v) + pl := p.maybeGetAppDataPacket(maxPacketSize-protocol.ByteCount(s.Overhead())-hdrLen, false, true, v) if pl.length == 0 { return nil, nil } buffer := getPacketBuffer() packet := &coalescedPacket{buffer: buffer} - ap, ack, err := p.appendShortHeaderPacket(buffer, connID, pn, pnLen, kp, pl, 0, s, false, v) + shp, err := p.appendShortHeaderPacket(buffer, connID, pn, pnLen, kp, pl, 0, maxPacketSize, s, false, v) if err != nil { return nil, err } - packet.shortHdrPacket = &shortHeaderPacket{ - Packet: ap, - DestConnID: connID, - Ack: ack, - PacketNumberLen: pnLen, - KeyPhase: kp, - } + packet.shortHdrPacket = &shp return packet, nil } @@ -731,14 +670,14 @@ func (p *packetPacker) MaybePackProbePacket(encLevel protocol.EncryptionLevel, v if err != nil { return nil, err } - hdr, pl = p.maybeGetCryptoPacket(p.maxPacketSize-protocol.ByteCount(sealer.Overhead()), protocol.EncryptionInitial, false, true, v) + hdr, pl = p.maybeGetCryptoPacket(maxPacketSize-protocol.ByteCount(sealer.Overhead()), protocol.EncryptionInitial, false, true, v) case protocol.EncryptionHandshake: var err error sealer, err = p.cryptoSetup.GetHandshakeSealer() if err != nil { return nil, err } - hdr, pl = p.maybeGetCryptoPacket(p.maxPacketSize-protocol.ByteCount(sealer.Overhead()), protocol.EncryptionHandshake, false, true, v) + hdr, pl = p.maybeGetCryptoPacket(maxPacketSize-protocol.ByteCount(sealer.Overhead()), protocol.EncryptionHandshake, false, true, v) default: panic("unknown encryption level") } @@ -751,7 +690,7 @@ func (p *packetPacker) MaybePackProbePacket(encLevel protocol.EncryptionLevel, v size := p.longHeaderPacketLength(hdr, pl, v) + protocol.ByteCount(sealer.Overhead()) var padding protocol.ByteCount if encLevel == protocol.EncryptionInitial { - padding = p.initialPaddingLen(pl.frames, size) + padding = p.initialPaddingLen(pl.frames, size, maxPacketSize) } longHdrPacket, err := p.appendLongHeaderPacket(buffer, hdr, pl, padding, encLevel, sealer, v) @@ -762,10 +701,10 @@ func (p *packetPacker) MaybePackProbePacket(encLevel protocol.EncryptionLevel, v return packet, nil } -func (p *packetPacker) PackMTUProbePacket(ping ackhandler.Frame, size protocol.ByteCount, now time.Time, v protocol.VersionNumber) (shortHeaderPacket, *packetBuffer, error) { +func (p *packetPacker) PackMTUProbePacket(ping ackhandler.Frame, size protocol.ByteCount, v protocol.VersionNumber) (shortHeaderPacket, *packetBuffer, error) { pl := payload{ - frames: []*ackhandler.Frame{&ping}, - length: ping.Length(v), + frames: []ackhandler.Frame{ping}, + length: ping.Frame.Length(v), } buffer := getPacketBuffer() s, err := p.cryptoSetup.Get1RTTSealer() @@ -776,17 +715,8 @@ func (p *packetPacker) PackMTUProbePacket(ping ackhandler.Frame, size protocol.B pn, pnLen := p.pnManager.PeekPacketNumber(protocol.Encryption1RTT) padding := size - p.shortHeaderPacketLength(connID, pnLen, pl) - protocol.ByteCount(s.Overhead()) kp := s.KeyPhase() - ap, ack, err := p.appendShortHeaderPacket(buffer, connID, pn, pnLen, kp, pl, padding, s, true, v) - if err != nil { - return shortHeaderPacket{}, nil, err - } - return shortHeaderPacket{ - Packet: ap, - DestConnID: connID, - Ack: ack, - PacketNumberLen: pnLen, - KeyPhase: kp, - }, buffer, nil + packet, err := p.appendShortHeaderPacket(buffer, connID, pn, pnLen, kp, pl, padding, size, s, true, v) + return packet, buffer, err } func (p *packetPacker) getLongHeader(encLevel protocol.EncryptionLevel, v protocol.VersionNumber) *wire.ExtendedHeader { @@ -829,23 +759,22 @@ func (p *packetPacker) appendLongHeaderPacket(buffer *packetBuffer, header *wire } payloadOffset := protocol.ByteCount(len(raw)) - pn := p.pnManager.PopPacketNumber(encLevel) - if pn != header.PacketNumber { - return nil, errors.New("packetPacker BUG: Peeked and Popped packet numbers do not match") - } - raw, err = p.appendPacketPayload(raw, pl, paddingLen, v) if err != nil { return nil, err } - raw = p.encryptPacket(raw, sealer, pn, payloadOffset, pnLen) + raw = p.encryptPacket(raw, sealer, header.PacketNumber, payloadOffset, pnLen) buffer.Data = buffer.Data[:len(buffer.Data)+len(raw)] + if pn := p.pnManager.PopPacketNumber(encLevel); pn != header.PacketNumber { + return nil, fmt.Errorf("packetPacker BUG: Peeked and Popped packet numbers do not match: expected %d, got %d", pn, header.PacketNumber) + } return &longHeaderPacket{ - header: header, - ack: pl.ack, - frames: pl.frames, - length: protocol.ByteCount(len(raw)), + header: header, + ack: pl.ack, + frames: pl.frames, + streamFrames: pl.streamFrames, + length: protocol.ByteCount(len(raw)), }, nil } @@ -856,11 +785,11 @@ func (p *packetPacker) appendShortHeaderPacket( pnLen protocol.PacketNumberLen, kp protocol.KeyPhaseBit, pl payload, - padding protocol.ByteCount, + padding, maxPacketSize protocol.ByteCount, sealer sealer, isMTUProbePacket bool, v protocol.VersionNumber, -) (*ackhandler.Packet, *wire.AckFrame, error) { +) (shortHeaderPacket, error) { var paddingLen protocol.ByteCount if pl.length < 4-protocol.ByteCount(pnLen) { paddingLen = 4 - protocol.ByteCount(pnLen) - pl.length @@ -871,48 +800,36 @@ func (p *packetPacker) appendShortHeaderPacket( raw := buffer.Data[startLen:] raw, err := wire.AppendShortHeader(raw, connID, pn, pnLen, kp) if err != nil { - return nil, nil, err + return shortHeaderPacket{}, err } payloadOffset := protocol.ByteCount(len(raw)) - if pn != p.pnManager.PopPacketNumber(protocol.Encryption1RTT) { - return nil, nil, errors.New("packetPacker BUG: Peeked and Popped packet numbers do not match") - } - raw, err = p.appendPacketPayload(raw, pl, paddingLen, v) if err != nil { - return nil, nil, err + return shortHeaderPacket{}, err } if !isMTUProbePacket { - if size := protocol.ByteCount(len(raw) + sealer.Overhead()); size > p.maxPacketSize { - return nil, nil, fmt.Errorf("PacketPacker BUG: packet too large (%d bytes, allowed %d bytes)", size, p.maxPacketSize) + if size := protocol.ByteCount(len(raw) + sealer.Overhead()); size > maxPacketSize { + return shortHeaderPacket{}, fmt.Errorf("PacketPacker BUG: packet too large (%d bytes, allowed %d bytes)", size, maxPacketSize) } } raw = p.encryptPacket(raw, sealer, pn, payloadOffset, protocol.ByteCount(pnLen)) buffer.Data = buffer.Data[:len(buffer.Data)+len(raw)] - // create the ackhandler.Packet - largestAcked := protocol.InvalidPacketNumber - if pl.ack != nil { - largestAcked = pl.ack.LargestAcked() + if newPN := p.pnManager.PopPacketNumber(protocol.Encryption1RTT); newPN != pn { + return shortHeaderPacket{}, fmt.Errorf("packetPacker BUG: Peeked and Popped packet numbers do not match: expected %d, got %d", pn, newPN) } - for i := range pl.frames { - if pl.frames[i].OnLost != nil { - continue - } - pl.frames[i].OnLost = p.retransmissionQueue.AddAppData - } - - ap := ackhandler.GetPacket() - ap.PacketNumber = pn - ap.LargestAcked = largestAcked - ap.Frames = pl.frames - ap.Length = protocol.ByteCount(len(raw)) - ap.EncryptionLevel = protocol.Encryption1RTT - ap.SendTime = time.Now() - ap.IsPathMTUProbePacket = isMTUProbePacket - - return ap, pl.ack, nil + return shortHeaderPacket{ + PacketNumber: pn, + PacketNumberLen: pnLen, + KeyPhase: kp, + StreamFrames: pl.streamFrames, + Frames: pl.frames, + Ack: pl.ack, + Length: protocol.ByteCount(len(raw)), + DestConnID: connID, + IsPathMTUProbePacket: isMTUProbePacket, + }, nil } func (p *packetPacker) appendPacketPayload(raw []byte, pl payload, paddingLen protocol.ByteCount, v protocol.VersionNumber) ([]byte, error) { @@ -927,9 +844,16 @@ func (p *packetPacker) appendPacketPayload(raw []byte, pl payload, paddingLen pr if paddingLen > 0 { raw = append(raw, make([]byte, paddingLen)...) } - for _, frame := range pl.frames { + for _, f := range pl.frames { var err error - raw, err = frame.Append(raw, v) + raw, err = f.Frame.Append(raw, v) + if err != nil { + return nil, err + } + } + for _, f := range pl.streamFrames { + var err error + raw, err = f.Frame.Append(raw, v) if err != nil { return nil, err } @@ -953,16 +877,3 @@ func (p *packetPacker) encryptPacket(raw []byte, sealer sealer, pn protocol.Pack func (p *packetPacker) SetToken(token []byte) { p.token = token } - -// When a higher MTU is discovered, use it. -func (p *packetPacker) SetMaxPacketSize(s protocol.ByteCount) { - p.maxPacketSize = s -} - -// If the peer sets a max_packet_size that's smaller than the size we're currently using, -// we need to reduce the size of packets we send. -func (p *packetPacker) HandleTransportParameters(params *wire.TransportParameters) { - if params.MaxUDPPayloadSize != 0 { - p.maxPacketSize = utils.Min(p.maxPacketSize, params.MaxUDPPayloadSize) - } -} diff --git a/vendor/github.com/quic-go/quic-go/quicvarint/varint.go b/vendor/github.com/quic-go/quic-go/quicvarint/varint.go index ea1a9107f5..3f12c07609 100644 --- a/vendor/github.com/quic-go/quic-go/quicvarint/varint.go +++ b/vendor/github.com/quic-go/quic-go/quicvarint/varint.go @@ -70,24 +70,7 @@ func Read(r io.ByteReader) (uint64, error) { return uint64(b8) + uint64(b7)<<8 + uint64(b6)<<16 + uint64(b5)<<24 + uint64(b4)<<32 + uint64(b3)<<40 + uint64(b2)<<48 + uint64(b1)<<56, nil } -// Write writes i in the QUIC varint format to w. -func Write(w Writer, i uint64) { - if i <= maxVarInt1 { - w.WriteByte(uint8(i)) - } else if i <= maxVarInt2 { - w.Write([]byte{uint8(i>>8) | 0x40, uint8(i)}) - } else if i <= maxVarInt4 { - w.Write([]byte{uint8(i>>24) | 0x80, uint8(i >> 16), uint8(i >> 8), uint8(i)}) - } else if i <= maxVarInt8 { - w.Write([]byte{ - uint8(i>>56) | 0xc0, uint8(i >> 48), uint8(i >> 40), uint8(i >> 32), - uint8(i >> 24), uint8(i >> 16), uint8(i >> 8), uint8(i), - }) - } else { - panic(fmt.Sprintf("%#x doesn't fit into 62 bits", i)) - } -} - +// Append appends i in the QUIC varint format. func Append(b []byte, i uint64) []byte { if i <= maxVarInt1 { return append(b, uint8(i)) diff --git a/vendor/github.com/quic-go/quic-go/receive_stream.go b/vendor/github.com/quic-go/quic-go/receive_stream.go index 5d220e2225..89d02b7379 100644 --- a/vendor/github.com/quic-go/quic-go/receive_stream.go +++ b/vendor/github.com/quic-go/quic-go/receive_stream.go @@ -34,18 +34,14 @@ type receiveStream struct { currentFrame []byte currentFrameDone func() - currentFrameIsLast bool // is the currentFrame the last frame on this stream readPosInFrame int + currentFrameIsLast bool // is the currentFrame the last frame on this stream + finRead bool // set once we read a frame with a Fin closeForShutdownErr error cancelReadErr error resetRemotelyErr *StreamError - closedForShutdown bool // set when CloseForShutdown() is called - finRead bool // set once we read a frame with a Fin - canceledRead bool // set when CancelRead() is called - resetRemotely bool // set when handleResetStreamFrame() is called - readChan chan struct{} readOnce chan struct{} // cap: 1, to protect against concurrent use of Read deadline time.Time @@ -100,13 +96,13 @@ func (s *receiveStream) readImpl(p []byte) (bool /*stream completed */, int, err if s.finRead { return false, 0, io.EOF } - if s.canceledRead { + if s.cancelReadErr != nil { return false, 0, s.cancelReadErr } - if s.resetRemotely { + if s.resetRemotelyErr != nil { return false, 0, s.resetRemotelyErr } - if s.closedForShutdown { + if s.closeForShutdownErr != nil { return false, 0, s.closeForShutdownErr } @@ -122,13 +118,13 @@ func (s *receiveStream) readImpl(p []byte) (bool /*stream completed */, int, err for { // Stop waiting on errors - if s.closedForShutdown { + if s.closeForShutdownErr != nil { return false, bytesRead, s.closeForShutdownErr } - if s.canceledRead { + if s.cancelReadErr != nil { return false, bytesRead, s.cancelReadErr } - if s.resetRemotely { + if s.resetRemotelyErr != nil { return false, bytesRead, s.resetRemotelyErr } @@ -175,13 +171,18 @@ func (s *receiveStream) readImpl(p []byte) (bool /*stream completed */, int, err s.readPosInFrame += m bytesRead += m - // when a RESET_STREAM was received, the was already informed about the final byteOffset for this stream - if !s.resetRemotely { + // when a RESET_STREAM was received, the flow controller was already + // informed about the final byteOffset for this stream + if s.resetRemotelyErr == nil { s.flowController.AddBytesRead(protocol.ByteCount(m)) } if s.readPosInFrame >= len(s.currentFrame) && s.currentFrameIsLast { s.finRead = true + s.currentFrame = nil + if s.currentFrameDone != nil { + s.currentFrameDone() + } return true, bytesRead, io.EOF } } @@ -211,10 +212,9 @@ func (s *receiveStream) CancelRead(errorCode StreamErrorCode) { } func (s *receiveStream) cancelReadImpl(errorCode qerr.StreamErrorCode) bool /* completed */ { - if s.finRead || s.canceledRead || s.resetRemotely { + if s.finRead || s.cancelReadErr != nil || s.resetRemotelyErr != nil { return false } - s.canceledRead = true s.cancelReadErr = &StreamError{StreamID: s.streamID, ErrorCode: errorCode, Remote: false} s.signalRead() s.sender.queueControlFrame(&wire.StopSendingFrame{ @@ -247,7 +247,7 @@ func (s *receiveStream) handleStreamFrameImpl(frame *wire.StreamFrame) (bool /* newlyRcvdFinalOffset = s.finalOffset == protocol.MaxByteCount s.finalOffset = maxOffset } - if s.canceledRead { + if s.cancelReadErr != nil { return newlyRcvdFinalOffset, nil } if err := s.frameQueue.Push(frame.Data, frame.Offset, frame.PutBack); err != nil { @@ -270,7 +270,7 @@ func (s *receiveStream) handleResetStreamFrame(frame *wire.ResetStreamFrame) err } func (s *receiveStream) handleResetStreamFrameImpl(frame *wire.ResetStreamFrame) (bool /*completed */, error) { - if s.closedForShutdown { + if s.closeForShutdownErr != nil { return false, nil } if err := s.flowController.UpdateHighestReceived(frame.FinalSize, true); err != nil { @@ -280,10 +280,9 @@ func (s *receiveStream) handleResetStreamFrameImpl(frame *wire.ResetStreamFrame) s.finalOffset = frame.FinalSize // ignore duplicate RESET_STREAM frames for this stream (after checking their final offset) - if s.resetRemotely { + if s.resetRemotelyErr != nil { return false, nil } - s.resetRemotely = true s.resetRemotelyErr = &StreamError{ StreamID: s.streamID, ErrorCode: frame.ErrorCode, @@ -310,7 +309,6 @@ func (s *receiveStream) SetReadDeadline(t time.Time) error { // The peer will NOT be informed about this: the stream is closed without sending a FIN or RESET. func (s *receiveStream) closeForShutdown(err error) { s.mutex.Lock() - s.closedForShutdown = true s.closeForShutdownErr = err s.mutex.Unlock() s.signalRead() diff --git a/vendor/github.com/quic-go/quic-go/retransmission_queue.go b/vendor/github.com/quic-go/quic-go/retransmission_queue.go index 2ce0b8931a..909ad6224a 100644 --- a/vendor/github.com/quic-go/quic-go/retransmission_queue.go +++ b/vendor/github.com/quic-go/quic-go/retransmission_queue.go @@ -3,6 +3,8 @@ package quic import ( "fmt" + "github.com/quic-go/quic-go/internal/ackhandler" + "github.com/quic-go/quic-go/internal/protocol" "github.com/quic-go/quic-go/internal/wire" ) @@ -21,7 +23,23 @@ func newRetransmissionQueue() *retransmissionQueue { return &retransmissionQueue{} } -func (q *retransmissionQueue) AddInitial(f wire.Frame) { +// AddPing queues a ping. +// It is used when a probe packet needs to be sent +func (q *retransmissionQueue) AddPing(encLevel protocol.EncryptionLevel) { + //nolint:exhaustive // Cannot send probe packets for 0-RTT. + switch encLevel { + case protocol.EncryptionInitial: + q.addInitial(&wire.PingFrame{}) + case protocol.EncryptionHandshake: + q.addHandshake(&wire.PingFrame{}) + case protocol.Encryption1RTT: + q.addAppData(&wire.PingFrame{}) + default: + panic("unexpected encryption level") + } +} + +func (q *retransmissionQueue) addInitial(f wire.Frame) { if cf, ok := f.(*wire.CryptoFrame); ok { q.initialCryptoData = append(q.initialCryptoData, cf) return @@ -29,7 +47,7 @@ func (q *retransmissionQueue) AddInitial(f wire.Frame) { q.initial = append(q.initial, f) } -func (q *retransmissionQueue) AddHandshake(f wire.Frame) { +func (q *retransmissionQueue) addHandshake(f wire.Frame) { if cf, ok := f.(*wire.CryptoFrame); ok { q.handshakeCryptoData = append(q.handshakeCryptoData, cf) return @@ -49,7 +67,7 @@ func (q *retransmissionQueue) HasAppData() bool { return len(q.appData) > 0 } -func (q *retransmissionQueue) AddAppData(f wire.Frame) { +func (q *retransmissionQueue) addAppData(f wire.Frame) { if _, ok := f.(*wire.StreamFrame); ok { panic("STREAM frames are handled with their respective streams.") } @@ -127,3 +145,36 @@ func (q *retransmissionQueue) DropPackets(encLevel protocol.EncryptionLevel) { panic(fmt.Sprintf("unexpected encryption level: %s", encLevel)) } } + +func (q *retransmissionQueue) InitialAckHandler() ackhandler.FrameHandler { + return (*retransmissionQueueInitialAckHandler)(q) +} + +func (q *retransmissionQueue) HandshakeAckHandler() ackhandler.FrameHandler { + return (*retransmissionQueueHandshakeAckHandler)(q) +} + +func (q *retransmissionQueue) AppDataAckHandler() ackhandler.FrameHandler { + return (*retransmissionQueueAppDataAckHandler)(q) +} + +type retransmissionQueueInitialAckHandler retransmissionQueue + +func (q *retransmissionQueueInitialAckHandler) OnAcked(wire.Frame) {} +func (q *retransmissionQueueInitialAckHandler) OnLost(f wire.Frame) { + (*retransmissionQueue)(q).addInitial(f) +} + +type retransmissionQueueHandshakeAckHandler retransmissionQueue + +func (q *retransmissionQueueHandshakeAckHandler) OnAcked(wire.Frame) {} +func (q *retransmissionQueueHandshakeAckHandler) OnLost(f wire.Frame) { + (*retransmissionQueue)(q).addHandshake(f) +} + +type retransmissionQueueAppDataAckHandler retransmissionQueue + +func (q *retransmissionQueueAppDataAckHandler) OnAcked(wire.Frame) {} +func (q *retransmissionQueueAppDataAckHandler) OnLost(f wire.Frame) { + (*retransmissionQueue)(q).addAppData(f) +} diff --git a/vendor/github.com/quic-go/quic-go/send_conn.go b/vendor/github.com/quic-go/quic-go/send_conn.go index c53ebdfab1..d8ddbc871a 100644 --- a/vendor/github.com/quic-go/quic-go/send_conn.go +++ b/vendor/github.com/quic-go/quic-go/send_conn.go @@ -1,74 +1,107 @@ package quic import ( + "fmt" + "math" "net" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" ) // A sendConn allows sending using a simple Write() on a non-connected packet conn. type sendConn interface { - Write([]byte) error + Write(b []byte, size protocol.ByteCount) error Close() error LocalAddr() net.Addr RemoteAddr() net.Addr + + capabilities() connCapabilities } type sconn struct { rawConn + localAddr net.Addr remoteAddr net.Addr - info *packetInfo - oob []byte + + logger utils.Logger + + info packetInfo + oob []byte + // If GSO enabled, and we receive a GSO error for this remote address, GSO is disabled. + gotGSOError bool } var _ sendConn = &sconn{} -func newSendConn(c rawConn, remote net.Addr, info *packetInfo) sendConn { +func newSendConn(c rawConn, remote net.Addr, info packetInfo, logger utils.Logger) *sconn { + localAddr := c.LocalAddr() + if info.addr.IsValid() { + if udpAddr, ok := localAddr.(*net.UDPAddr); ok { + addrCopy := *udpAddr + addrCopy.IP = info.addr.AsSlice() + localAddr = &addrCopy + } + } + + oob := info.OOB() + // add 32 bytes, so we can add the UDP_SEGMENT msg + l := len(oob) + oob = append(oob, make([]byte, 32)...) + oob = oob[:l] return &sconn{ rawConn: c, + localAddr: localAddr, remoteAddr: remote, info: info, - oob: info.OOB(), + oob: oob, + logger: logger, } } -func (c *sconn) Write(p []byte) error { - _, err := c.WritePacket(p, c.remoteAddr, c.oob) - return err -} - -func (c *sconn) RemoteAddr() net.Addr { - return c.remoteAddr -} - -func (c *sconn) LocalAddr() net.Addr { - addr := c.rawConn.LocalAddr() - if c.info != nil { - if udpAddr, ok := addr.(*net.UDPAddr); ok { - addrCopy := *udpAddr - addrCopy.IP = c.info.addr - addr = &addrCopy +func (c *sconn) Write(p []byte, size protocol.ByteCount) error { + if !c.capabilities().GSO { + if protocol.ByteCount(len(p)) != size { + panic(fmt.Sprintf("inconsistent packet size (%d vs %d)", len(p), size)) } + _, err := c.WritePacket(p, c.remoteAddr, c.oob) + return err + } + // GSO is supported. Append the control message and send. + if size > math.MaxUint16 { + panic("size overflow") + } + _, err := c.WritePacket(p, c.remoteAddr, appendUDPSegmentSizeMsg(c.oob, uint16(size))) + if err != nil && isGSOError(err) { + // disable GSO for future calls + c.gotGSOError = true + if c.logger.Debug() { + c.logger.Debugf("GSO failed when sending to %s", c.remoteAddr) + } + // send out the packets one by one + for len(p) > 0 { + l := len(p) + if l > int(size) { + l = int(size) + } + if _, err := c.WritePacket(p[:l], c.remoteAddr, c.oob); err != nil { + return err + } + p = p[l:] + } + return nil } - return addr -} - -type spconn struct { - net.PacketConn - - remoteAddr net.Addr -} - -var _ sendConn = &spconn{} - -func newSendPconn(c net.PacketConn, remote net.Addr) sendConn { - return &spconn{PacketConn: c, remoteAddr: remote} -} - -func (c *spconn) Write(p []byte) error { - _, err := c.WriteTo(p, c.remoteAddr) return err } -func (c *spconn) RemoteAddr() net.Addr { - return c.remoteAddr +func (c *sconn) capabilities() connCapabilities { + capabilities := c.rawConn.capabilities() + if capabilities.GSO { + capabilities.GSO = !c.gotGSOError + } + return capabilities } + +func (c *sconn) RemoteAddr() net.Addr { return c.remoteAddr } +func (c *sconn) LocalAddr() net.Addr { return c.localAddr } diff --git a/vendor/github.com/quic-go/quic-go/send_queue.go b/vendor/github.com/quic-go/quic-go/send_queue.go index 9eafcd374b..a9f7ca1a0e 100644 --- a/vendor/github.com/quic-go/quic-go/send_queue.go +++ b/vendor/github.com/quic-go/quic-go/send_queue.go @@ -1,15 +1,22 @@ package quic +import "github.com/quic-go/quic-go/internal/protocol" + type sender interface { - Send(p *packetBuffer) + Send(p *packetBuffer, packetSize protocol.ByteCount) Run() error WouldBlock() bool Available() <-chan struct{} Close() } +type queueEntry struct { + buf *packetBuffer + size protocol.ByteCount +} + type sendQueue struct { - queue chan *packetBuffer + queue chan queueEntry closeCalled chan struct{} // runStopped when Close() is called runStopped chan struct{} // runStopped when the run loop returns available chan struct{} @@ -26,16 +33,16 @@ func newSendQueue(conn sendConn) sender { runStopped: make(chan struct{}), closeCalled: make(chan struct{}), available: make(chan struct{}, 1), - queue: make(chan *packetBuffer, sendQueueCapacity), + queue: make(chan queueEntry, sendQueueCapacity), } } // Send sends out a packet. It's guaranteed to not block. // Callers need to make sure that there's actually space in the send queue by calling WouldBlock. // Otherwise Send will panic. -func (h *sendQueue) Send(p *packetBuffer) { +func (h *sendQueue) Send(p *packetBuffer, size protocol.ByteCount) { select { - case h.queue <- p: + case h.queue <- queueEntry{buf: p, size: size}: // clear available channel if we've reached capacity if len(h.queue) == sendQueueCapacity { select { @@ -69,17 +76,17 @@ func (h *sendQueue) Run() error { h.closeCalled = nil // prevent this case from being selected again // make sure that all queued packets are actually sent out shouldClose = true - case p := <-h.queue: - if err := h.conn.Write(p.Data); err != nil { + case e := <-h.queue: + if err := h.conn.Write(e.buf.Data, e.size); err != nil { // This additional check enables: // 1. Checking for "datagram too large" message from the kernel, as such, // 2. Path MTU discovery,and // 3. Eventual detection of loss PingFrame. - if !isMsgSizeErr(err) { + if !isSendMsgSizeErr(err) { return err } } - p.Release() + e.buf.Release() select { case h.available <- struct{}{}: default: diff --git a/vendor/github.com/quic-go/quic-go/send_stream.go b/vendor/github.com/quic-go/quic-go/send_stream.go index 6b1d7b179a..4113d9f0c1 100644 --- a/vendor/github.com/quic-go/quic-go/send_stream.go +++ b/vendor/github.com/quic-go/quic-go/send_stream.go @@ -18,7 +18,7 @@ type sendStreamI interface { SendStream handleStopSendingFrame(*wire.StopSendingFrame) hasData() bool - popStreamFrame(maxBytes protocol.ByteCount, v protocol.VersionNumber) (*ackhandler.Frame, bool) + popStreamFrame(maxBytes protocol.ByteCount, v protocol.VersionNumber) (frame ackhandler.StreamFrame, ok, hasMore bool) closeForShutdown(error) updateSendWindow(protocol.ByteCount) } @@ -30,7 +30,7 @@ type sendStream struct { retransmissionQueue []*wire.StreamFrame ctx context.Context - ctxCancel context.CancelFunc + ctxCancel context.CancelCauseFunc streamID protocol.StreamID sender streamSender @@ -40,11 +40,9 @@ type sendStream struct { cancelWriteErr error closeForShutdownErr error - closedForShutdown bool // set when CloseForShutdown() is called - finishedWriting bool // set once Close() is called - canceledWrite bool // set when CancelWrite() is called, or a STOP_SENDING frame is received - finSent bool // set when a STREAM_FRAME with FIN bit has been sent - completed bool // set when this stream has been reported to the streamSender as completed + finishedWriting bool // set once Close() is called + finSent bool // set when a STREAM_FRAME with FIN bit has been sent + completed bool // set when this stream has been reported to the streamSender as completed dataForWriting []byte // during a Write() call, this slice is the part of p that still needs to be sent out nextFrame *wire.StreamFrame @@ -73,7 +71,7 @@ func newSendStream( writeChan: make(chan struct{}, 1), writeOnce: make(chan struct{}, 1), // cap: 1, to protect against concurrent use of Write } - s.ctx, s.ctxCancel = context.WithCancel(context.Background()) + s.ctx, s.ctxCancel = context.WithCancelCause(context.Background()) return s } @@ -94,7 +92,7 @@ func (s *sendStream) Write(p []byte) (int, error) { if s.finishedWriting { return 0, fmt.Errorf("write on closed stream %d", s.streamID) } - if s.canceledWrite { + if s.cancelWriteErr != nil { return 0, s.cancelWriteErr } if s.closeForShutdownErr != nil { @@ -153,7 +151,7 @@ func (s *sendStream) Write(p []byte) (int, error) { } deadlineTimer.Reset(deadline) } - if s.dataForWriting == nil || s.canceledWrite || s.closedForShutdown { + if s.dataForWriting == nil || s.cancelWriteErr != nil || s.closeForShutdownErr != nil { break } } @@ -200,7 +198,7 @@ func (s *sendStream) canBufferStreamFrame() bool { // popStreamFrame returns the next STREAM frame that is supposed to be sent on this stream // maxBytes is the maximum length this frame (including frame header) will have. -func (s *sendStream) popStreamFrame(maxBytes protocol.ByteCount, v protocol.VersionNumber) (*ackhandler.Frame, bool /* has more data to send */) { +func (s *sendStream) popStreamFrame(maxBytes protocol.ByteCount, v protocol.VersionNumber) (af ackhandler.StreamFrame, ok, hasMore bool) { s.mutex.Lock() f, hasMoreData := s.popNewOrRetransmittedStreamFrame(maxBytes, v) if f != nil { @@ -209,17 +207,16 @@ func (s *sendStream) popStreamFrame(maxBytes protocol.ByteCount, v protocol.Vers s.mutex.Unlock() if f == nil { - return nil, hasMoreData + return ackhandler.StreamFrame{}, false, hasMoreData } - af := ackhandler.GetFrame() - af.Frame = f - af.OnLost = s.queueRetransmission - af.OnAcked = s.frameAcked - return af, hasMoreData + return ackhandler.StreamFrame{ + Frame: f, + Handler: (*sendStreamAckHandler)(s), + }, true, hasMoreData } func (s *sendStream) popNewOrRetransmittedStreamFrame(maxBytes protocol.ByteCount, v protocol.VersionNumber) (*wire.StreamFrame, bool /* has more data to send */) { - if s.canceledWrite || s.closeForShutdownErr != nil { + if s.cancelWriteErr != nil || s.closeForShutdownErr != nil { return nil, false } @@ -350,28 +347,8 @@ func (s *sendStream) getDataForWriting(f *wire.StreamFrame, maxBytes protocol.By } } -func (s *sendStream) frameAcked(f wire.Frame) { - f.(*wire.StreamFrame).PutBack() - - s.mutex.Lock() - if s.canceledWrite { - s.mutex.Unlock() - return - } - s.numOutstandingFrames-- - if s.numOutstandingFrames < 0 { - panic("numOutStandingFrames negative") - } - newlyCompleted := s.isNewlyCompleted() - s.mutex.Unlock() - - if newlyCompleted { - s.sender.onStreamCompleted(s.streamID) - } -} - func (s *sendStream) isNewlyCompleted() bool { - completed := (s.finSent || s.canceledWrite) && s.numOutstandingFrames == 0 && len(s.retransmissionQueue) == 0 + completed := (s.finSent || s.cancelWriteErr != nil) && s.numOutstandingFrames == 0 && len(s.retransmissionQueue) == 0 if completed && !s.completed { s.completed = true return true @@ -379,35 +356,17 @@ func (s *sendStream) isNewlyCompleted() bool { return false } -func (s *sendStream) queueRetransmission(f wire.Frame) { - sf := f.(*wire.StreamFrame) - sf.DataLenPresent = true - s.mutex.Lock() - if s.canceledWrite { - s.mutex.Unlock() - return - } - s.retransmissionQueue = append(s.retransmissionQueue, sf) - s.numOutstandingFrames-- - if s.numOutstandingFrames < 0 { - panic("numOutStandingFrames negative") - } - s.mutex.Unlock() - - s.sender.onHasStreamData(s.streamID) -} - func (s *sendStream) Close() error { s.mutex.Lock() - if s.closedForShutdown { + if s.closeForShutdownErr != nil { s.mutex.Unlock() return nil } - if s.canceledWrite { + if s.cancelWriteErr != nil { s.mutex.Unlock() return fmt.Errorf("close called for canceled stream %d", s.streamID) } - s.ctxCancel() + s.ctxCancel(nil) s.finishedWriting = true s.mutex.Unlock() @@ -422,13 +381,12 @@ func (s *sendStream) CancelWrite(errorCode StreamErrorCode) { // must be called after locking the mutex func (s *sendStream) cancelWriteImpl(errorCode qerr.StreamErrorCode, remote bool) { s.mutex.Lock() - if s.canceledWrite { + if s.cancelWriteErr != nil { s.mutex.Unlock() return } - s.ctxCancel() - s.canceledWrite = true s.cancelWriteErr = &StreamError{StreamID: s.streamID, ErrorCode: errorCode, Remote: remote} + s.ctxCancel(s.cancelWriteErr) s.numOutstandingFrames = 0 s.retransmissionQueue = nil newlyCompleted := s.isNewlyCompleted() @@ -477,8 +435,7 @@ func (s *sendStream) SetWriteDeadline(t time.Time) error { // The peer will NOT be informed about this: the stream is closed without sending a FIN or RST. func (s *sendStream) closeForShutdown(err error) { s.mutex.Lock() - s.ctxCancel() - s.closedForShutdown = true + s.ctxCancel(err) s.closeForShutdownErr = err s.mutex.Unlock() s.signalWrite() @@ -491,3 +448,45 @@ func (s *sendStream) signalWrite() { default: } } + +type sendStreamAckHandler sendStream + +var _ ackhandler.FrameHandler = &sendStreamAckHandler{} + +func (s *sendStreamAckHandler) OnAcked(f wire.Frame) { + sf := f.(*wire.StreamFrame) + sf.PutBack() + s.mutex.Lock() + if s.cancelWriteErr != nil { + s.mutex.Unlock() + return + } + s.numOutstandingFrames-- + if s.numOutstandingFrames < 0 { + panic("numOutStandingFrames negative") + } + newlyCompleted := (*sendStream)(s).isNewlyCompleted() + s.mutex.Unlock() + + if newlyCompleted { + s.sender.onStreamCompleted(s.streamID) + } +} + +func (s *sendStreamAckHandler) OnLost(f wire.Frame) { + sf := f.(*wire.StreamFrame) + s.mutex.Lock() + if s.cancelWriteErr != nil { + s.mutex.Unlock() + return + } + sf.DataLenPresent = true + s.retransmissionQueue = append(s.retransmissionQueue, sf) + s.numOutstandingFrames-- + if s.numOutstandingFrames < 0 { + panic("numOutStandingFrames negative") + } + s.mutex.Unlock() + + s.sender.onHasStreamData(s.streamID) +} diff --git a/vendor/github.com/quic-go/quic-go/server.go b/vendor/github.com/quic-go/quic-go/server.go index d934d8bd5a..c06228c917 100644 --- a/vendor/github.com/quic-go/quic-go/server.go +++ b/vendor/github.com/quic-go/quic-go/server.go @@ -20,33 +20,29 @@ import ( ) // ErrServerClosed is returned by the Listener or EarlyListener's Accept method after a call to Close. -var ErrServerClosed = errors.New("quic: Server closed") +var ErrServerClosed = errors.New("quic: server closed") // packetHandler handles packets type packetHandler interface { - handlePacket(*receivedPacket) + handlePacket(receivedPacket) shutdown() destroy(error) getPerspective() protocol.Perspective } -type unknownPacketHandler interface { - handlePacket(*receivedPacket) - setCloseError(error) -} - type packetHandlerManager interface { - AddWithConnID(protocol.ConnectionID, protocol.ConnectionID, func() packetHandler) bool - Destroy() error - connRunner - SetServer(unknownPacketHandler) + Get(protocol.ConnectionID) (packetHandler, bool) + GetByResetToken(protocol.StatelessResetToken) (packetHandler, bool) + AddWithConnID(protocol.ConnectionID, protocol.ConnectionID, func() (packetHandler, bool)) bool + Close(error) CloseServer() + connRunner } type quicConn interface { EarlyConnection earlyConnReady() <-chan struct{} - handlePacket(*receivedPacket) + handlePacket(receivedPacket) GetVersion() protocol.VersionNumber getPerspective() protocol.Perspective run() error @@ -54,6 +50,11 @@ type quicConn interface { shutdown() } +type zeroRTTQueue struct { + packets []receivedPacket + expiration time.Time +} + // A Listener of QUIC type baseServer struct { mutex sync.Mutex @@ -64,15 +65,17 @@ type baseServer struct { config *Config conn rawConn - // If the server is started with ListenAddr, we create a packet conn. - // If it is started with Listen, we take a packet conn as a parameter. - createdPacketConn bool tokenGenerator *handshake.TokenGenerator - connHandler packetHandlerManager + connIDGenerator ConnectionIDGenerator + connHandler packetHandlerManager + onClose func() + + receivedPackets chan receivedPacket - receivedPackets chan *receivedPacket + nextZeroRTTCleanup time.Time + zeroRTTQueues map[protocol.ConnectionID]*zeroRTTQueue // only initialized if acceptEarlyConns == true // set as a member, so they can be set in the tests newConn func( @@ -83,6 +86,7 @@ type baseServer struct { protocol.ConnectionID, /* client dest connection ID */ protocol.ConnectionID, /* destination connection ID */ protocol.ConnectionID, /* source connection ID */ + ConnectionIDGenerator, protocol.StatelessResetToken, *Config, *tls.Config, @@ -94,129 +98,164 @@ type baseServer struct { protocol.VersionNumber, ) quicConn - serverError error - errorChan chan struct{} - closed bool - running chan struct{} // closed as soon as run() returns + serverError error + errorChan chan struct{} + closed bool + running chan struct{} // closed as soon as run() returns + versionNegotiationQueue chan receivedPacket + invalidTokenQueue chan receivedPacket connQueue chan quicConn connQueueLen int32 // to be used as an atomic + tracer logging.Tracer + logger utils.Logger } -var ( - _ Listener = &baseServer{} - _ unknownPacketHandler = &baseServer{} -) +// A Listener listens for incoming QUIC connections. +// It returns connections once the handshake has completed. +type Listener struct { + baseServer *baseServer +} -type earlyServer struct{ *baseServer } +// Accept returns new connections. It should be called in a loop. +func (l *Listener) Accept(ctx context.Context) (Connection, error) { + return l.baseServer.Accept(ctx) +} -var _ EarlyListener = &earlyServer{} +// Close the server. All active connections will be closed. +func (l *Listener) Close() error { + return l.baseServer.Close() +} -func (s *earlyServer) Accept(ctx context.Context) (EarlyConnection, error) { - return s.baseServer.accept(ctx) +// Addr returns the local network address that the server is listening on. +func (l *Listener) Addr() net.Addr { + return l.baseServer.Addr() } -// ListenAddr creates a QUIC server listening on a given address. -// The tls.Config must not be nil and must contain a certificate configuration. -// The quic.Config may be nil, in that case the default values will be used. -func ListenAddr(addr string, tlsConf *tls.Config, config *Config) (Listener, error) { - return listenAddr(addr, tlsConf, config, false) +// An EarlyListener listens for incoming QUIC connections, and returns them before the handshake completes. +// For connections that don't use 0-RTT, this allows the server to send 0.5-RTT data. +// This data is encrypted with forward-secure keys, however, the client's identity has not yet been verified. +// For connection using 0-RTT, this allows the server to accept and respond to streams that the client opened in the +// 0-RTT data it sent. Note that at this point during the handshake, the live-ness of the +// client has not yet been confirmed, and the 0-RTT data could have been replayed by an attacker. +type EarlyListener struct { + baseServer *baseServer } -// ListenAddrEarly works like ListenAddr, but it returns connections before the handshake completes. -func ListenAddrEarly(addr string, tlsConf *tls.Config, config *Config) (EarlyListener, error) { - s, err := listenAddr(addr, tlsConf, config, true) - if err != nil { - return nil, err - } - return &earlyServer{s}, nil +// Accept returns a new connections. It should be called in a loop. +func (l *EarlyListener) Accept(ctx context.Context) (EarlyConnection, error) { + return l.baseServer.accept(ctx) } -func listenAddr(addr string, tlsConf *tls.Config, config *Config, acceptEarly bool) (*baseServer, error) { - udpAddr, err := net.ResolveUDPAddr("udp", addr) +// Close the server. All active connections will be closed. +func (l *EarlyListener) Close() error { + return l.baseServer.Close() +} + +// Addr returns the local network addr that the server is listening on. +func (l *EarlyListener) Addr() net.Addr { + return l.baseServer.Addr() +} + +// ListenAddr creates a QUIC server listening on a given address. +// See Listen for more details. +func ListenAddr(addr string, tlsConf *tls.Config, config *Config) (*Listener, error) { + conn, err := listenUDP(addr) if err != nil { return nil, err } - conn, err := net.ListenUDP("udp", udpAddr) + return (&Transport{ + Conn: conn, + createdConn: true, + isSingleUse: true, + }).Listen(tlsConf, config) +} + +// ListenAddrEarly works like ListenAddr, but it returns connections before the handshake completes. +func ListenAddrEarly(addr string, tlsConf *tls.Config, config *Config) (*EarlyListener, error) { + conn, err := listenUDP(addr) if err != nil { return nil, err } - serv, err := listen(conn, tlsConf, config, acceptEarly) + return (&Transport{ + Conn: conn, + createdConn: true, + isSingleUse: true, + }).ListenEarly(tlsConf, config) +} + +func listenUDP(addr string) (*net.UDPConn, error) { + udpAddr, err := net.ResolveUDPAddr("udp", addr) if err != nil { return nil, err } - serv.createdPacketConn = true - return serv, nil + return net.ListenUDP("udp", udpAddr) } -// Listen listens for QUIC connections on a given net.PacketConn. If the -// PacketConn satisfies the OOBCapablePacketConn interface (as a net.UDPConn -// does), ECN and packet info support will be enabled. In this case, ReadMsgUDP -// and WriteMsgUDP will be used instead of ReadFrom and WriteTo to read/write -// packets. A single net.PacketConn only be used for a single call to Listen. -// The PacketConn can be used for simultaneous calls to Dial. QUIC connection -// IDs are used for demultiplexing the different connections. The tls.Config -// must not be nil and must contain a certificate configuration. The -// tls.Config.CipherSuites allows setting of TLS 1.3 cipher suites. Furthermore, -// it must define an application control (using NextProtos). The quic.Config may -// be nil, in that case the default values will be used. -func Listen(conn net.PacketConn, tlsConf *tls.Config, config *Config) (Listener, error) { - return listen(conn, tlsConf, config, false) +// Listen listens for QUIC connections on a given net.PacketConn. +// If the PacketConn satisfies the OOBCapablePacketConn interface (as a net.UDPConn does), +// ECN and packet info support will be enabled. In this case, ReadMsgUDP and WriteMsgUDP +// will be used instead of ReadFrom and WriteTo to read/write packets. +// A single net.PacketConn can only be used for a single call to Listen. +// +// The tls.Config must not be nil and must contain a certificate configuration. +// Furthermore, it must define an application control (using NextProtos). +// The quic.Config may be nil, in that case the default values will be used. +// +// This is a convenience function. More advanced use cases should instantiate a Transport, +// which offers configuration options for a more fine-grained control of the connection establishment, +// including reusing the underlying UDP socket for outgoing QUIC connections. +func Listen(conn net.PacketConn, tlsConf *tls.Config, config *Config) (*Listener, error) { + tr := &Transport{Conn: conn, isSingleUse: true} + return tr.Listen(tlsConf, config) } // ListenEarly works like Listen, but it returns connections before the handshake completes. -func ListenEarly(conn net.PacketConn, tlsConf *tls.Config, config *Config) (EarlyListener, error) { - s, err := listen(conn, tlsConf, config, true) - if err != nil { - return nil, err - } - return &earlyServer{s}, nil +func ListenEarly(conn net.PacketConn, tlsConf *tls.Config, config *Config) (*EarlyListener, error) { + tr := &Transport{Conn: conn, isSingleUse: true} + return tr.ListenEarly(tlsConf, config) } -func listen(conn net.PacketConn, tlsConf *tls.Config, config *Config, acceptEarly bool) (*baseServer, error) { - if tlsConf == nil { - return nil, errors.New("quic: tls.Config not set") - } - if err := validateConfig(config); err != nil { - return nil, err - } - config = populateServerConfig(config) - for _, v := range config.Versions { - if !protocol.IsValidVersion(v) { - return nil, fmt.Errorf("%s is not a valid QUIC version", v) - } - } - - connHandler, err := getMultiplexer().AddConn(conn, config.ConnectionIDGenerator.ConnectionIDLen(), config.StatelessResetKey, config.Tracer) - if err != nil { - return nil, err - } +func newServer( + conn rawConn, + connHandler packetHandlerManager, + connIDGenerator ConnectionIDGenerator, + tlsConf *tls.Config, + config *Config, + tracer logging.Tracer, + onClose func(), + acceptEarly bool, +) (*baseServer, error) { tokenGenerator, err := handshake.NewTokenGenerator(rand.Reader) if err != nil { return nil, err } - c, err := wrapConn(conn) - if err != nil { - return nil, err - } s := &baseServer{ - conn: c, - tlsConf: tlsConf, - config: config, - tokenGenerator: tokenGenerator, - connHandler: connHandler, - connQueue: make(chan quicConn), - errorChan: make(chan struct{}), - running: make(chan struct{}), - receivedPackets: make(chan *receivedPacket, protocol.MaxServerUnprocessedPackets), - newConn: newConnection, - logger: utils.DefaultLogger.WithPrefix("server"), - acceptEarlyConns: acceptEarly, + conn: conn, + tlsConf: tlsConf, + config: config, + tokenGenerator: tokenGenerator, + connIDGenerator: connIDGenerator, + connHandler: connHandler, + connQueue: make(chan quicConn), + errorChan: make(chan struct{}), + running: make(chan struct{}), + receivedPackets: make(chan receivedPacket, protocol.MaxServerUnprocessedPackets), + versionNegotiationQueue: make(chan receivedPacket, 4), + invalidTokenQueue: make(chan receivedPacket, 4), + newConn: newConnection, + tracer: tracer, + logger: utils.DefaultLogger.WithPrefix("server"), + acceptEarlyConns: acceptEarly, + onClose: onClose, + } + if acceptEarly { + s.zeroRTTQueues = map[protocol.ConnectionID]*zeroRTTQueue{} } go s.run() - connHandler.SetServer(s) + go s.runSendQueue() s.logger.Debugf("Listening for %s connections on %s", conn.LocalAddr().Network(), conn.LocalAddr().String()) return s, nil } @@ -240,6 +279,19 @@ func (s *baseServer) run() { } } +func (s *baseServer) runSendQueue() { + for { + select { + case <-s.running: + return + case p := <-s.versionNegotiationQueue: + s.maybeSendVersionNegotiationPacket(p) + case p := <-s.invalidTokenQueue: + s.maybeSendInvalidToken(p) + } + } +} + // Accept returns connections that already completed the handshake. // It is only valid if acceptEarlyConns is false. func (s *baseServer) Accept(ctx context.Context) (Connection, error) { @@ -268,18 +320,12 @@ func (s *baseServer) Close() error { if s.serverError == nil { s.serverError = ErrServerClosed } - // If the server was started with ListenAddr, we created the packet conn. - // We need to close it in order to make the go routine reading from that conn return. - createdPacketConn := s.createdPacketConn s.closed = true close(s.errorChan) s.mutex.Unlock() <-s.running - s.connHandler.CloseServer() - if createdPacketConn { - return s.connHandler.Destroy() - } + s.onClose() return nil } @@ -299,22 +345,26 @@ func (s *baseServer) Addr() net.Addr { return s.conn.LocalAddr() } -func (s *baseServer) handlePacket(p *receivedPacket) { +func (s *baseServer) handlePacket(p receivedPacket) { select { case s.receivedPackets <- p: default: s.logger.Debugf("Dropping packet from %s (%d bytes). Server receive queue full.", p.remoteAddr, p.Size()) - if s.config.Tracer != nil { - s.config.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropDOSPrevention) + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropDOSPrevention) } } } -func (s *baseServer) handlePacketImpl(p *receivedPacket) bool /* is the buffer still in use? */ { +func (s *baseServer) handlePacketImpl(p receivedPacket) bool /* is the buffer still in use? */ { + if !s.nextZeroRTTCleanup.IsZero() && p.rcvTime.After(s.nextZeroRTTCleanup) { + defer s.cleanupZeroRTTQueues(p.rcvTime) + } + if wire.IsVersionNegotiationPacket(p.data) { s.logger.Debugf("Dropping Version Negotiation packet.") - if s.config.Tracer != nil { - s.config.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeVersionNegotiation, p.Size(), logging.PacketDropUnexpectedPacket) + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeVersionNegotiation, p.Size(), logging.PacketDropUnexpectedPacket) } return false } @@ -323,42 +373,54 @@ func (s *baseServer) handlePacketImpl(p *receivedPacket) bool /* is the buffer s panic(fmt.Sprintf("misrouted packet: %#v", p.data)) } v, err := wire.ParseVersion(p.data) + // drop the packet if we failed to parse the protocol version + if err != nil { + s.logger.Debugf("Dropping a packet with an unknown version") + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropUnexpectedPacket) + } + return false + } // send a Version Negotiation Packet if the client is speaking a different protocol version - if err != nil || !protocol.IsSupportedVersion(s.config.Versions, v) { - if err != nil || p.Size() < protocol.MinUnknownVersionPacketSize { - s.logger.Debugf("Dropping a packet with an unknown version that is too small (%d bytes)", p.Size()) - if s.config.Tracer != nil { - s.config.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropUnexpectedPacket) - } + if !protocol.IsSupportedVersion(s.config.Versions, v) { + if s.config.DisableVersionNegotiationPackets { return false } - _, src, dest, err := wire.ParseArbitraryLenConnectionIDs(p.data) - if err != nil { // should never happen - s.logger.Debugf("Dropping a packet with an unknown version for which we failed to parse connection IDs") - if s.config.Tracer != nil { - s.config.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropUnexpectedPacket) + + if p.Size() < protocol.MinUnknownVersionPacketSize { + s.logger.Debugf("Dropping a packet with an unsupported version number %d that is too small (%d bytes)", v, p.Size()) + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropUnexpectedPacket) } return false } - if !s.config.DisableVersionNegotiationPackets { - go s.sendVersionNegotiationPacket(p.remoteAddr, src, dest, p.info.OOB()) + return s.enqueueVersionNegotiationPacket(p) + } + + if wire.Is0RTTPacket(p.data) { + if !s.acceptEarlyConns { + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketType0RTT, p.Size(), logging.PacketDropUnexpectedPacket) + } + return false } - return false + return s.handle0RTTPacket(p) } + // If we're creating a new connection, the packet will be passed to the connection. // The header will then be parsed again. hdr, _, _, err := wire.ParsePacket(p.data) if err != nil { - if s.config.Tracer != nil { - s.config.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropHeaderParseError) + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropHeaderParseError) } s.logger.Debugf("Error parsing packet: %s", err) return false } if hdr.Type == protocol.PacketTypeInitial && p.Size() < protocol.MinInitialPacketSize { s.logger.Debugf("Dropping a packet that is too small to be a valid Initial (%d bytes)", p.Size()) - if s.config.Tracer != nil { - s.config.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeInitial, p.Size(), logging.PacketDropUnexpectedPacket) + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeInitial, p.Size(), logging.PacketDropUnexpectedPacket) } return false } @@ -368,8 +430,8 @@ func (s *baseServer) handlePacketImpl(p *receivedPacket) bool /* is the buffer s // There's little point in sending a Stateless Reset, since the client // might not have received the token yet. s.logger.Debugf("Dropping long header packet of type %s (%d bytes)", hdr.Type, len(p.data)) - if s.config.Tracer != nil { - s.config.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeFromHeader(hdr), p.Size(), logging.PacketDropUnexpectedPacket) + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeFromHeader(hdr), p.Size(), logging.PacketDropUnexpectedPacket) } return false } @@ -384,6 +446,74 @@ func (s *baseServer) handlePacketImpl(p *receivedPacket) bool /* is the buffer s return true } +func (s *baseServer) handle0RTTPacket(p receivedPacket) bool { + connID, err := wire.ParseConnectionID(p.data, 0) + if err != nil { + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketType0RTT, p.Size(), logging.PacketDropHeaderParseError) + } + return false + } + + // check again if we might have a connection now + if handler, ok := s.connHandler.Get(connID); ok { + handler.handlePacket(p) + return true + } + + if q, ok := s.zeroRTTQueues[connID]; ok { + if len(q.packets) >= protocol.Max0RTTQueueLen { + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketType0RTT, p.Size(), logging.PacketDropDOSPrevention) + } + return false + } + q.packets = append(q.packets, p) + return true + } + + if len(s.zeroRTTQueues) >= protocol.Max0RTTQueues { + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketType0RTT, p.Size(), logging.PacketDropDOSPrevention) + } + return false + } + queue := &zeroRTTQueue{packets: make([]receivedPacket, 1, 8)} + queue.packets[0] = p + expiration := p.rcvTime.Add(protocol.Max0RTTQueueingDuration) + queue.expiration = expiration + if s.nextZeroRTTCleanup.IsZero() || s.nextZeroRTTCleanup.After(expiration) { + s.nextZeroRTTCleanup = expiration + } + s.zeroRTTQueues[connID] = queue + return true +} + +func (s *baseServer) cleanupZeroRTTQueues(now time.Time) { + // Iterate over all queues to find those that are expired. + // This is ok since we're placing a pretty low limit on the number of queues. + var nextCleanup time.Time + for connID, q := range s.zeroRTTQueues { + if q.expiration.After(now) { + if nextCleanup.IsZero() || nextCleanup.After(q.expiration) { + nextCleanup = q.expiration + } + continue + } + for _, p := range q.packets { + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketType0RTT, p.Size(), logging.PacketDropDOSPrevention) + } + p.buffer.Release() + } + delete(s.zeroRTTQueues, connID) + if s.logger.Debug() { + s.logger.Debugf("Removing 0-RTT queue for %s.", connID) + } + } + s.nextZeroRTTCleanup = nextCleanup +} + // validateToken returns false if: // - address is invalid // - token is expired @@ -404,15 +534,23 @@ func (s *baseServer) validateToken(token *handshake.Token, addr net.Addr) bool { return true } -func (s *baseServer) handleInitialImpl(p *receivedPacket, hdr *wire.Header) error { +func (s *baseServer) handleInitialImpl(p receivedPacket, hdr *wire.Header) error { if len(hdr.Token) == 0 && hdr.DestConnectionID.Len() < protocol.MinConnectionIDLenInitial { p.buffer.Release() - if s.config.Tracer != nil { - s.config.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeInitial, p.Size(), logging.PacketDropUnexpectedPacket) + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeInitial, p.Size(), logging.PacketDropUnexpectedPacket) } return errors.New("too short connection ID") } + // The server queues packets for a while, and we might already have established a connection by now. + // This results in a second check in the connection map. + // That's ok since it's not the hot path (it's only taken by some Initial and 0-RTT packets). + if handler, ok := s.connHandler.Get(hdr.DestConnectionID); ok { + handler.handlePacket(p) + return nil + } + var ( token *handshake.Token retrySrcConnID *protocol.ConnectionID @@ -430,7 +568,6 @@ func (s *baseServer) handleInitialImpl(p *receivedPacket, hdr *wire.Header) erro } clientAddrIsValid := s.validateToken(token, p.remoteAddr) - if token != nil && !clientAddrIsValid { // For invalid and expired non-retry tokens, we don't send an INVALID_TOKEN error. // We just ignore them, and act as if there was no token on this packet at all. @@ -441,16 +578,13 @@ func (s *baseServer) handleInitialImpl(p *receivedPacket, hdr *wire.Header) erro // For Retry tokens, we send an INVALID_ERROR if // * the token is too old, or // * the token is invalid, in case of a retry token. - go func() { - defer p.buffer.Release() - if err := s.maybeSendInvalidToken(p, hdr); err != nil { - s.logger.Debugf("Error sending INVALID_TOKEN error: %s", err) - } - }() + s.enqueueInvalidToken(p) return nil } } if token == nil && s.config.RequireAddressValidation(p.remoteAddr) { + // Retry invalidates all 0-RTT packets sent. + delete(s.zeroRTTQueues, hdr.DestConnectionID) go func() { defer p.buffer.Release() if err := s.sendRetry(p.remoteAddr, hdr, p.info); err != nil { @@ -471,37 +605,43 @@ func (s *baseServer) handleInitialImpl(p *receivedPacket, hdr *wire.Header) erro return nil } - connID, err := s.config.ConnectionIDGenerator.GenerateConnectionID() + connID, err := s.connIDGenerator.GenerateConnectionID() if err != nil { return err } s.logger.Debugf("Changing connection ID to %s.", connID) var conn quicConn tracingID := nextConnTracingID() - if added := s.connHandler.AddWithConnID(hdr.DestConnectionID, connID, func() packetHandler { + if added := s.connHandler.AddWithConnID(hdr.DestConnectionID, connID, func() (packetHandler, bool) { + config := s.config + if s.config.GetConfigForClient != nil { + conf, err := s.config.GetConfigForClient(&ClientHelloInfo{RemoteAddr: p.remoteAddr}) + if err != nil { + s.logger.Debugf("Rejecting new connection due to GetConfigForClient callback") + return nil, false + } + config = populateConfig(conf) + } var tracer logging.ConnectionTracer - if s.config.Tracer != nil { + if config.Tracer != nil { // Use the same connection ID that is passed to the client's GetLogWriter callback. connID := hdr.DestConnectionID if origDestConnID.Len() > 0 { connID = origDestConnID } - tracer = s.config.Tracer.TracerForConnection( - context.WithValue(context.Background(), ConnectionTracingKey, tracingID), - protocol.PerspectiveServer, - connID, - ) + tracer = config.Tracer(context.WithValue(context.Background(), ConnectionTracingKey, tracingID), protocol.PerspectiveServer, connID) } conn = s.newConn( - newSendConn(s.conn, p.remoteAddr, p.info), + newSendConn(s.conn, p.remoteAddr, p.info, s.logger), s.connHandler, origDestConnID, retrySrcConnID, hdr.DestConnectionID, hdr.SrcConnectionID, connID, + s.connIDGenerator, s.connHandler.GetStatelessResetToken(connID), - s.config, + config, s.tlsConf, s.tokenGenerator, clientAddrIsValid, @@ -511,8 +651,22 @@ func (s *baseServer) handleInitialImpl(p *receivedPacket, hdr *wire.Header) erro hdr.Version, ) conn.handlePacket(p) - return conn + + if q, ok := s.zeroRTTQueues[hdr.DestConnectionID]; ok { + for _, p := range q.packets { + conn.handlePacket(p) + } + delete(s.zeroRTTQueues, hdr.DestConnectionID) + } + + return conn, true }); !added { + go func() { + defer p.buffer.Release() + if err := s.sendConnectionRefused(p.remoteAddr, hdr, p.info); err != nil { + s.logger.Debugf("Error rejecting connection: %s", err) + } + }() return nil } go conn.run() @@ -536,7 +690,7 @@ func (s *baseServer) handleNewConn(conn quicConn) { } else { // wait until the handshake is complete (or fails) select { - case <-conn.HandshakeComplete().Done(): + case <-conn.HandshakeComplete(): case <-connCtx.Done(): return } @@ -552,11 +706,11 @@ func (s *baseServer) handleNewConn(conn quicConn) { } } -func (s *baseServer) sendRetry(remoteAddr net.Addr, hdr *wire.Header, info *packetInfo) error { +func (s *baseServer) sendRetry(remoteAddr net.Addr, hdr *wire.Header, info packetInfo) error { // Log the Initial packet now. // If no Retry is sent, the packet will be logged by the connection. (&wire.ExtendedHeader{Header: *hdr}).Log(s.logger) - srcConnID, err := s.config.ConnectionIDGenerator.GenerateConnectionID() + srcConnID, err := s.connIDGenerator.GenerateConnectionID() if err != nil { return err } @@ -585,47 +739,69 @@ func (s *baseServer) sendRetry(remoteAddr net.Addr, hdr *wire.Header, info *pack // append the Retry integrity tag tag := handshake.GetRetryIntegrityTag(buf.Data, hdr.DestConnectionID, hdr.Version) buf.Data = append(buf.Data, tag[:]...) - if s.config.Tracer != nil { - s.config.Tracer.SentPacket(remoteAddr, &replyHdr.Header, protocol.ByteCount(len(buf.Data)), nil) + if s.tracer != nil { + s.tracer.SentPacket(remoteAddr, &replyHdr.Header, protocol.ByteCount(len(buf.Data)), nil) } _, err = s.conn.WritePacket(buf.Data, remoteAddr, info.OOB()) return err } -func (s *baseServer) maybeSendInvalidToken(p *receivedPacket, hdr *wire.Header) error { +func (s *baseServer) enqueueInvalidToken(p receivedPacket) { + select { + case s.invalidTokenQueue <- p: + default: + // it's fine to drop INVALID_TOKEN packets when we are busy + p.buffer.Release() + } +} + +func (s *baseServer) maybeSendInvalidToken(p receivedPacket) { + defer p.buffer.Release() + + hdr, _, _, err := wire.ParsePacket(p.data) + if err != nil { + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropHeaderParseError) + } + s.logger.Debugf("Error parsing packet: %s", err) + return + } + // Only send INVALID_TOKEN if we can unprotect the packet. // This makes sure that we won't send it for packets that were corrupted. sealer, opener := handshake.NewInitialAEAD(hdr.DestConnectionID, protocol.PerspectiveServer, hdr.Version) data := p.data[:hdr.ParsedLen()+hdr.Length] extHdr, err := unpackLongHeader(opener, hdr, data, hdr.Version) + // Only send INVALID_TOKEN if we can unprotect the packet. + // This makes sure that we won't send it for packets that were corrupted. if err != nil { - if s.config.Tracer != nil { - s.config.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeInitial, p.Size(), logging.PacketDropHeaderParseError) + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeInitial, p.Size(), logging.PacketDropHeaderParseError) } - // don't return the error here. Just drop the packet. - return nil + return } hdrLen := extHdr.ParsedLen() if _, err := opener.Open(data[hdrLen:hdrLen], data[hdrLen:], extHdr.PacketNumber, data[:hdrLen]); err != nil { - // don't return the error here. Just drop the packet. - if s.config.Tracer != nil { - s.config.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeInitial, p.Size(), logging.PacketDropPayloadDecryptError) + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeInitial, p.Size(), logging.PacketDropPayloadDecryptError) } - return nil + return } if s.logger.Debug() { s.logger.Debugf("Client sent an invalid retry token. Sending INVALID_TOKEN to %s.", p.remoteAddr) } - return s.sendError(p.remoteAddr, hdr, sealer, qerr.InvalidToken, p.info) + if err := s.sendError(p.remoteAddr, hdr, sealer, qerr.InvalidToken, p.info); err != nil { + s.logger.Debugf("Error sending INVALID_TOKEN error: %s", err) + } } -func (s *baseServer) sendConnectionRefused(remoteAddr net.Addr, hdr *wire.Header, info *packetInfo) error { +func (s *baseServer) sendConnectionRefused(remoteAddr net.Addr, hdr *wire.Header, info packetInfo) error { sealer, _ := handshake.NewInitialAEAD(hdr.DestConnectionID, protocol.PerspectiveServer, hdr.Version) return s.sendError(remoteAddr, hdr, sealer, qerr.ConnectionRefused, info) } // sendError sends the error as a response to the packet received with header hdr -func (s *baseServer) sendError(remoteAddr net.Addr, hdr *wire.Header, sealer handshake.LongHeaderSealer, errorCode qerr.TransportErrorCode, info *packetInfo) error { +func (s *baseServer) sendError(remoteAddr net.Addr, hdr *wire.Header, sealer handshake.LongHeaderSealer, errorCode qerr.TransportErrorCode, info packetInfo) error { b := getPacketBuffer() defer b.Release() @@ -662,21 +838,48 @@ func (s *baseServer) sendError(remoteAddr net.Addr, hdr *wire.Header, sealer han replyHdr.Log(s.logger) wire.LogFrame(s.logger, ccf, true) - if s.config.Tracer != nil { - s.config.Tracer.SentPacket(remoteAddr, &replyHdr.Header, protocol.ByteCount(len(b.Data)), []logging.Frame{ccf}) + if s.tracer != nil { + s.tracer.SentPacket(remoteAddr, &replyHdr.Header, protocol.ByteCount(len(b.Data)), []logging.Frame{ccf}) } _, err = s.conn.WritePacket(b.Data, remoteAddr, info.OOB()) return err } -func (s *baseServer) sendVersionNegotiationPacket(remote net.Addr, src, dest protocol.ArbitraryLenConnectionID, oob []byte) { - s.logger.Debugf("Client offered version %s, sending Version Negotiation") +func (s *baseServer) enqueueVersionNegotiationPacket(p receivedPacket) (bufferInUse bool) { + select { + case s.versionNegotiationQueue <- p: + return true + default: + // it's fine to not send version negotiation packets when we are busy + } + return false +} + +func (s *baseServer) maybeSendVersionNegotiationPacket(p receivedPacket) { + defer p.buffer.Release() + + v, err := wire.ParseVersion(p.data) + if err != nil { + s.logger.Debugf("failed to parse version for sending version negotiation packet: %s", err) + return + } + + _, src, dest, err := wire.ParseArbitraryLenConnectionIDs(p.data) + if err != nil { // should never happen + s.logger.Debugf("Dropping a packet with an unknown version for which we failed to parse connection IDs") + if s.tracer != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropUnexpectedPacket) + } + return + } + + s.logger.Debugf("Client offered version %s, sending Version Negotiation", v) data := wire.ComposeVersionNegotiation(dest, src, s.config.Versions) - if s.config.Tracer != nil { - s.config.Tracer.SentVersionNegotiationPacket(remote, src, dest, s.config.Versions) + if s.tracer != nil { + s.tracer.SentVersionNegotiationPacket(p.remoteAddr, src, dest, s.config.Versions) } - if _, err := s.conn.WritePacket(data, remote, oob); err != nil { + if _, err := s.conn.WritePacket(data, p.remoteAddr, p.info.OOB()); err != nil { s.logger.Debugf("Error sending Version Negotiation: %s", err) } } diff --git a/vendor/github.com/quic-go/quic-go/stream.go b/vendor/github.com/quic-go/quic-go/stream.go index 98d2fc6e47..ab76eaf802 100644 --- a/vendor/github.com/quic-go/quic-go/stream.go +++ b/vendor/github.com/quic-go/quic-go/stream.go @@ -60,7 +60,7 @@ type streamI interface { // for sending hasData() bool handleStopSendingFrame(*wire.StopSendingFrame) - popStreamFrame(maxBytes protocol.ByteCount, v protocol.VersionNumber) (*ackhandler.Frame, bool) + popStreamFrame(maxBytes protocol.ByteCount, v protocol.VersionNumber) (ackhandler.StreamFrame, bool, bool) updateSendWindow(protocol.ByteCount) } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn.go b/vendor/github.com/quic-go/quic-go/sys_conn.go index d6c1d61645..f2224e4cc2 100644 --- a/vendor/github.com/quic-go/quic-go/sys_conn.go +++ b/vendor/github.com/quic-go/quic-go/sys_conn.go @@ -1,7 +1,11 @@ package quic import ( + "log" "net" + "os" + "strconv" + "strings" "syscall" "time" @@ -15,6 +19,7 @@ import ( type OOBCapablePacketConn interface { net.PacketConn SyscallConn() (syscall.RawConn, error) + SetReadBuffer(int) error ReadMsgUDP(b, oob []byte) (n, oobn, flags int, addr *net.UDPAddr, err error) WriteMsgUDP(b, oob []byte, addr *net.UDPAddr) (n, oobn int, err error) } @@ -22,9 +27,31 @@ type OOBCapablePacketConn interface { var _ OOBCapablePacketConn = &net.UDPConn{} func wrapConn(pc net.PacketConn) (rawConn, error) { + if err := setReceiveBuffer(pc); err != nil { + if !strings.Contains(err.Error(), "use of closed network connection") { + setBufferWarningOnce.Do(func() { + if disable, _ := strconv.ParseBool(os.Getenv("QUIC_GO_DISABLE_RECEIVE_BUFFER_WARNING")); disable { + return + } + log.Printf("%s. See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details.", err) + }) + } + } + if err := setSendBuffer(pc); err != nil { + if !strings.Contains(err.Error(), "use of closed network connection") { + setBufferWarningOnce.Do(func() { + if disable, _ := strconv.ParseBool(os.Getenv("QUIC_GO_DISABLE_RECEIVE_BUFFER_WARNING")); disable { + return + } + log.Printf("%s. See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details.", err) + }) + } + } + conn, ok := pc.(interface { SyscallConn() (syscall.RawConn, error) }) + var supportsDF bool if ok { rawConn, err := conn.SyscallConn() if err != nil { @@ -33,7 +60,8 @@ func wrapConn(pc net.PacketConn) (rawConn, error) { if _, ok := pc.LocalAddr().(*net.UDPAddr); ok { // Only set DF on sockets that we expect to be able to handle that configuration. - err = setDF(rawConn) + var err error + supportsDF, err = setDF(rawConn) if err != nil { return nil, err } @@ -42,32 +70,33 @@ func wrapConn(pc net.PacketConn) (rawConn, error) { c, ok := pc.(OOBCapablePacketConn) if !ok { utils.DefaultLogger.Infof("PacketConn is not a net.UDPConn. Disabling optimizations possible on UDP connections.") - return &basicConn{PacketConn: pc}, nil + return &basicConn{PacketConn: pc, supportsDF: supportsDF}, nil } - return newConn(c) + return newConn(c, supportsDF) } -// The basicConn is the most trivial implementation of a connection. +// The basicConn is the most trivial implementation of a rawConn. // It reads a single packet from the underlying net.PacketConn. // It is used when // * the net.PacketConn is not a OOBCapablePacketConn, and // * when the OS doesn't support OOB. type basicConn struct { net.PacketConn + supportsDF bool } var _ rawConn = &basicConn{} -func (c *basicConn) ReadPacket() (*receivedPacket, error) { +func (c *basicConn) ReadPacket() (receivedPacket, error) { buffer := getPacketBuffer() // The packet size should not exceed protocol.MaxPacketBufferSize bytes // If it does, we only read a truncated packet, which will then end up undecryptable buffer.Data = buffer.Data[:protocol.MaxPacketBufferSize] n, addr, err := c.PacketConn.ReadFrom(buffer.Data) if err != nil { - return nil, err + return receivedPacket{}, err } - return &receivedPacket{ + return receivedPacket{ remoteAddr: addr, rcvTime: time.Now(), data: buffer.Data[:n], @@ -78,3 +107,5 @@ func (c *basicConn) ReadPacket() (*receivedPacket, error) { func (c *basicConn) WritePacket(b []byte, addr net.Addr, _ []byte) (n int, err error) { return c.PacketConn.WriteTo(b, addr) } + +func (c *basicConn) capabilities() connCapabilities { return connCapabilities{DF: c.supportsDF} } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_buffers.go b/vendor/github.com/quic-go/quic-go/sys_conn_buffers.go new file mode 100644 index 0000000000..8fe49162c0 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_buffers.go @@ -0,0 +1,68 @@ +package quic + +import ( + "errors" + "fmt" + "net" + "syscall" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" +) + +//go:generate sh -c "echo '// Code generated by go generate. DO NOT EDIT.\n// Source: sys_conn_buffers.go\n' > sys_conn_buffers_write.go && sed -e 's/SetReadBuffer/SetWriteBuffer/g' -e 's/setReceiveBuffer/setSendBuffer/g' -e 's/inspectReadBuffer/inspectWriteBuffer/g' -e 's/protocol\\.DesiredReceiveBufferSize/protocol\\.DesiredSendBufferSize/g' -e 's/forceSetReceiveBuffer/forceSetSendBuffer/g' -e 's/receive buffer/send buffer/g' sys_conn_buffers.go | sed '/^\\/\\/go:generate/d' >> sys_conn_buffers_write.go" +func setReceiveBuffer(c net.PacketConn) error { + conn, ok := c.(interface{ SetReadBuffer(int) error }) + if !ok { + return errors.New("connection doesn't allow setting of receive buffer size. Not a *net.UDPConn?") + } + + var syscallConn syscall.RawConn + if sc, ok := c.(interface { + SyscallConn() (syscall.RawConn, error) + }); ok { + var err error + syscallConn, err = sc.SyscallConn() + if err != nil { + syscallConn = nil + } + } + // The connection has a SetReadBuffer method, but we couldn't obtain a syscall.RawConn. + // This shouldn't happen for a net.UDPConn, but is possible if the connection just implements the + // net.PacketConn interface and the SetReadBuffer method. + // We have no way of checking if increasing the buffer size actually worked. + if syscallConn == nil { + return conn.SetReadBuffer(protocol.DesiredReceiveBufferSize) + } + + size, err := inspectReadBuffer(syscallConn) + if err != nil { + return fmt.Errorf("failed to determine receive buffer size: %w", err) + } + if size >= protocol.DesiredReceiveBufferSize { + utils.DefaultLogger.Debugf("Conn has receive buffer of %d kiB (wanted: at least %d kiB)", size/1024, protocol.DesiredReceiveBufferSize/1024) + return nil + } + // Ignore the error. We check if we succeeded by querying the buffer size afterward. + _ = conn.SetReadBuffer(protocol.DesiredReceiveBufferSize) + newSize, err := inspectReadBuffer(syscallConn) + if newSize < protocol.DesiredReceiveBufferSize { + // Try again with RCVBUFFORCE on Linux + _ = forceSetReceiveBuffer(syscallConn, protocol.DesiredReceiveBufferSize) + newSize, err = inspectReadBuffer(syscallConn) + if err != nil { + return fmt.Errorf("failed to determine receive buffer size: %w", err) + } + } + if err != nil { + return fmt.Errorf("failed to determine receive buffer size: %w", err) + } + if newSize == size { + return fmt.Errorf("failed to increase receive buffer size (wanted: %d kiB, got %d kiB)", protocol.DesiredReceiveBufferSize/1024, newSize/1024) + } + if newSize < protocol.DesiredReceiveBufferSize { + return fmt.Errorf("failed to sufficiently increase receive buffer size (was: %d kiB, wanted: %d kiB, got: %d kiB)", size/1024, protocol.DesiredReceiveBufferSize/1024, newSize/1024) + } + utils.DefaultLogger.Debugf("Increased receive buffer size to %d kiB", newSize/1024) + return nil +} diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_buffers_write.go b/vendor/github.com/quic-go/quic-go/sys_conn_buffers_write.go new file mode 100644 index 0000000000..c01a931b5f --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_buffers_write.go @@ -0,0 +1,70 @@ +// Code generated by go generate. DO NOT EDIT. +// Source: sys_conn_buffers.go + +package quic + +import ( + "errors" + "fmt" + "net" + "syscall" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" +) + +func setSendBuffer(c net.PacketConn) error { + conn, ok := c.(interface{ SetWriteBuffer(int) error }) + if !ok { + return errors.New("connection doesn't allow setting of send buffer size. Not a *net.UDPConn?") + } + + var syscallConn syscall.RawConn + if sc, ok := c.(interface { + SyscallConn() (syscall.RawConn, error) + }); ok { + var err error + syscallConn, err = sc.SyscallConn() + if err != nil { + syscallConn = nil + } + } + // The connection has a SetWriteBuffer method, but we couldn't obtain a syscall.RawConn. + // This shouldn't happen for a net.UDPConn, but is possible if the connection just implements the + // net.PacketConn interface and the SetWriteBuffer method. + // We have no way of checking if increasing the buffer size actually worked. + if syscallConn == nil { + return conn.SetWriteBuffer(protocol.DesiredSendBufferSize) + } + + size, err := inspectWriteBuffer(syscallConn) + if err != nil { + return fmt.Errorf("failed to determine send buffer size: %w", err) + } + if size >= protocol.DesiredSendBufferSize { + utils.DefaultLogger.Debugf("Conn has send buffer of %d kiB (wanted: at least %d kiB)", size/1024, protocol.DesiredSendBufferSize/1024) + return nil + } + // Ignore the error. We check if we succeeded by querying the buffer size afterward. + _ = conn.SetWriteBuffer(protocol.DesiredSendBufferSize) + newSize, err := inspectWriteBuffer(syscallConn) + if newSize < protocol.DesiredSendBufferSize { + // Try again with RCVBUFFORCE on Linux + _ = forceSetSendBuffer(syscallConn, protocol.DesiredSendBufferSize) + newSize, err = inspectWriteBuffer(syscallConn) + if err != nil { + return fmt.Errorf("failed to determine send buffer size: %w", err) + } + } + if err != nil { + return fmt.Errorf("failed to determine send buffer size: %w", err) + } + if newSize == size { + return fmt.Errorf("failed to increase send buffer size (wanted: %d kiB, got %d kiB)", protocol.DesiredSendBufferSize/1024, newSize/1024) + } + if newSize < protocol.DesiredSendBufferSize { + return fmt.Errorf("failed to sufficiently increase send buffer size (was: %d kiB, wanted: %d kiB, got: %d kiB)", size/1024, protocol.DesiredSendBufferSize/1024, newSize/1024) + } + utils.DefaultLogger.Debugf("Increased send buffer size to %d kiB", newSize/1024) + return nil +} diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_df.go b/vendor/github.com/quic-go/quic-go/sys_conn_df.go index ef9f981ac6..0db61509db 100644 --- a/vendor/github.com/quic-go/quic-go/sys_conn_df.go +++ b/vendor/github.com/quic-go/quic-go/sys_conn_df.go @@ -1,15 +1,22 @@ -//go:build !linux && !windows +//go:build !linux && !windows && !darwin package quic -import "syscall" +import ( + "syscall" +) -func setDF(rawConn syscall.RawConn) error { +func setDF(syscall.RawConn) (bool, error) { // no-op on unsupported platforms - return nil + return false, nil } -func isMsgSizeErr(err error) bool { +func isSendMsgSizeErr(err error) bool { + // to be implemented for more specific platforms + return false +} + +func isRecvMsgSizeErr(err error) bool { // to be implemented for more specific platforms return false } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_df_darwin.go b/vendor/github.com/quic-go/quic-go/sys_conn_df_darwin.go new file mode 100644 index 0000000000..b51cd8f1a7 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_df_darwin.go @@ -0,0 +1,74 @@ +//go:build darwin + +package quic + +import ( + "errors" + "strconv" + "strings" + "syscall" + + "golang.org/x/sys/unix" + + "github.com/quic-go/quic-go/internal/utils" +) + +func setDF(rawConn syscall.RawConn) (bool, error) { + // Setting DF bit is only supported from macOS11 + // https://github.com/chromium/chromium/blob/117.0.5881.2/net/socket/udp_socket_posix.cc#L555 + if supportsDF, err := isAtLeastMacOS11(); !supportsDF || err != nil { + return false, err + } + + // Enabling IP_DONTFRAG will force the kernel to return "sendto: message too long" + // and the datagram will not be fragmented + var errDFIPv4, errDFIPv6 error + if err := rawConn.Control(func(fd uintptr) { + errDFIPv4 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_DONTFRAG, 1) + errDFIPv6 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_DONTFRAG, 1) + }); err != nil { + return false, err + } + switch { + case errDFIPv4 == nil && errDFIPv6 == nil: + utils.DefaultLogger.Debugf("Setting DF for IPv4 and IPv6.") + case errDFIPv4 == nil && errDFIPv6 != nil: + utils.DefaultLogger.Debugf("Setting DF for IPv4.") + case errDFIPv4 != nil && errDFIPv6 == nil: + utils.DefaultLogger.Debugf("Setting DF for IPv6.") + // On macOS, the syscall for setting DF bit for IPv4 fails on dual-stack listeners. + // Treat the connection as not having DF enabled, even though the DF bit will be set + // when used for IPv6. + // See https://github.com/quic-go/quic-go/issues/3793 for details. + return false, nil + case errDFIPv4 != nil && errDFIPv6 != nil: + return false, errors.New("setting DF failed for both IPv4 and IPv6") + } + return true, nil +} + +func isSendMsgSizeErr(err error) bool { + return errors.Is(err, unix.EMSGSIZE) +} + +func isRecvMsgSizeErr(error) bool { return false } + +func isAtLeastMacOS11() (bool, error) { + uname := &unix.Utsname{} + err := unix.Uname(uname) + if err != nil { + return false, err + } + + release := string(uname.Release[:]) + if idx := strings.Index(release, "."); idx != -1 { + version, err := strconv.Atoi(release[:idx]) + if err != nil { + return false, err + } + // Darwin version 20 is macOS version 11 + // https://en.wikipedia.org/wiki/Darwin_(operating_system)#Darwin_20_onwards + return version >= 20, nil + } + return false, nil +} diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_df_linux.go b/vendor/github.com/quic-go/quic-go/sys_conn_df_linux.go index 98542b4102..f09eaa5dff 100644 --- a/vendor/github.com/quic-go/quic-go/sys_conn_df_linux.go +++ b/vendor/github.com/quic-go/quic-go/sys_conn_df_linux.go @@ -11,7 +11,7 @@ import ( "github.com/quic-go/quic-go/internal/utils" ) -func setDF(rawConn syscall.RawConn) error { +func setDF(rawConn syscall.RawConn) (bool, error) { // Enabling IP_MTU_DISCOVER will force the kernel to return "sendto: message too long" // and the datagram will not be fragmented var errDFIPv4, errDFIPv6 error @@ -19,7 +19,7 @@ func setDF(rawConn syscall.RawConn) error { errDFIPv4 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_MTU_DISCOVER, unix.IP_PMTUDISC_DO) errDFIPv6 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_MTU_DISCOVER, unix.IPV6_PMTUDISC_DO) }); err != nil { - return err + return false, err } switch { case errDFIPv4 == nil && errDFIPv6 == nil: @@ -29,12 +29,14 @@ func setDF(rawConn syscall.RawConn) error { case errDFIPv4 != nil && errDFIPv6 == nil: utils.DefaultLogger.Debugf("Setting DF for IPv6.") case errDFIPv4 != nil && errDFIPv6 != nil: - return errors.New("setting DF failed for both IPv4 and IPv6") + return false, errors.New("setting DF failed for both IPv4 and IPv6") } - return nil + return true, nil } -func isMsgSizeErr(err error) bool { +func isSendMsgSizeErr(err error) bool { // https://man7.org/linux/man-pages/man7/udp.7.html return errors.Is(err, unix.EMSGSIZE) } + +func isRecvMsgSizeErr(error) bool { return false } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_df_windows.go b/vendor/github.com/quic-go/quic-go/sys_conn_df_windows.go index 9855e8de8d..e27635ec9c 100644 --- a/vendor/github.com/quic-go/quic-go/sys_conn_df_windows.go +++ b/vendor/github.com/quic-go/quic-go/sys_conn_df_windows.go @@ -12,20 +12,23 @@ import ( ) const ( - // same for both IPv4 and IPv6 on Windows + // IP_DONTFRAGMENT controls the Don't Fragment (DF) bit. + // + // It's the same code point for both IPv4 and IPv6 on Windows. // https://microsoft.github.io/windows-docs-rs/doc/windows/Win32/Networking/WinSock/constant.IP_DONTFRAG.html // https://microsoft.github.io/windows-docs-rs/doc/windows/Win32/Networking/WinSock/constant.IPV6_DONTFRAG.html + // + //nolint:stylecheck IP_DONTFRAGMENT = 14 - IPV6_DONTFRAG = 14 ) -func setDF(rawConn syscall.RawConn) error { +func setDF(rawConn syscall.RawConn) (bool, error) { var errDFIPv4, errDFIPv6 error if err := rawConn.Control(func(fd uintptr) { errDFIPv4 = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IP, IP_DONTFRAGMENT, 1) - errDFIPv6 = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IPV6, IPV6_DONTFRAG, 1) + errDFIPv6 = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IPV6, IP_DONTFRAGMENT, 1) }); err != nil { - return err + return false, err } switch { case errDFIPv4 == nil && errDFIPv6 == nil: @@ -35,12 +38,17 @@ func setDF(rawConn syscall.RawConn) error { case errDFIPv4 != nil && errDFIPv6 == nil: utils.DefaultLogger.Debugf("Setting DF for IPv6.") case errDFIPv4 != nil && errDFIPv6 != nil: - return errors.New("setting DF failed for both IPv4 and IPv6") + return false, errors.New("setting DF failed for both IPv4 and IPv6") } - return nil + return true, nil } -func isMsgSizeErr(err error) bool { +func isSendMsgSizeErr(err error) bool { + // https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2 + return errors.Is(err, windows.WSAEMSGSIZE) +} + +func isRecvMsgSizeErr(err error) bool { // https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2 return errors.Is(err, windows.WSAEMSGSIZE) } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_helper_darwin.go b/vendor/github.com/quic-go/quic-go/sys_conn_helper_darwin.go index 7ad5f3af16..758cf77889 100644 --- a/vendor/github.com/quic-go/quic-go/sys_conn_helper_darwin.go +++ b/vendor/github.com/quic-go/quic-go/sys_conn_helper_darwin.go @@ -2,20 +2,33 @@ package quic -import "golang.org/x/sys/unix" +import ( + "encoding/binary" + "net/netip" + "syscall" -const msgTypeIPTOS = unix.IP_RECVTOS - -const ( - ipv4RECVPKTINFO = unix.IP_RECVPKTINFO - ipv6RECVPKTINFO = 0x3d + "golang.org/x/sys/unix" ) const ( - msgTypeIPv4PKTINFO = unix.IP_PKTINFO - msgTypeIPv6PKTINFO = 0x2e + msgTypeIPTOS = unix.IP_RECVTOS + ipv4PKTINFO = unix.IP_RECVPKTINFO ) // ReadBatch only returns a single packet on OSX, // see https://godoc.org/golang.org/x/net/ipv4#PacketConn.ReadBatch. const batchSize = 1 + +func parseIPv4PktInfo(body []byte) (ip netip.Addr, ifIndex uint32, ok bool) { + // struct in_pktinfo { + // unsigned int ipi_ifindex; /* Interface index */ + // struct in_addr ipi_spec_dst; /* Local address */ + // struct in_addr ipi_addr; /* Header Destination address */ + // }; + if len(body) != 12 { + return netip.Addr{}, 0, false + } + return netip.AddrFrom4(*(*[4]byte)(body[8:12])), binary.LittleEndian.Uint32(body), true +} + +func isGSOSupported(syscall.RawConn) bool { return false } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_helper_freebsd.go b/vendor/github.com/quic-go/quic-go/sys_conn_helper_freebsd.go index 8d16d0b910..a2baae3b38 100644 --- a/vendor/github.com/quic-go/quic-go/sys_conn_helper_freebsd.go +++ b/vendor/github.com/quic-go/quic-go/sys_conn_helper_freebsd.go @@ -2,20 +2,28 @@ package quic -import "golang.org/x/sys/unix" +import ( + "net/netip" + "syscall" -const ( - msgTypeIPTOS = unix.IP_RECVTOS -) - -const ( - ipv4RECVPKTINFO = 0x7 - ipv6RECVPKTINFO = 0x24 + "golang.org/x/sys/unix" ) const ( - msgTypeIPv4PKTINFO = 0x7 - msgTypeIPv6PKTINFO = 0x2e + msgTypeIPTOS = unix.IP_RECVTOS + ipv4PKTINFO = 0x7 ) const batchSize = 8 + +func parseIPv4PktInfo(body []byte) (ip netip.Addr, _ uint32, ok bool) { + // struct in_pktinfo { + // struct in_addr ipi_addr; /* Header Destination address */ + // }; + if len(body) != 4 { + return netip.Addr{}, 0, false + } + return netip.AddrFrom4(*(*[4]byte)(body)), 0, true +} + +func isGSOSupported(syscall.RawConn) bool { return false } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_helper_linux.go b/vendor/github.com/quic-go/quic-go/sys_conn_helper_linux.go index 61c3f54ba0..6a049241bd 100644 --- a/vendor/github.com/quic-go/quic-go/sys_conn_helper_linux.go +++ b/vendor/github.com/quic-go/quic-go/sys_conn_helper_linux.go @@ -2,18 +2,96 @@ package quic -import "golang.org/x/sys/unix" +import ( + "encoding/binary" + "errors" + "net/netip" + "os" + "strconv" + "syscall" + "unsafe" -const msgTypeIPTOS = unix.IP_TOS - -const ( - ipv4RECVPKTINFO = unix.IP_PKTINFO - ipv6RECVPKTINFO = unix.IPV6_RECVPKTINFO + "golang.org/x/sys/unix" ) const ( - msgTypeIPv4PKTINFO = unix.IP_PKTINFO - msgTypeIPv6PKTINFO = unix.IPV6_PKTINFO + msgTypeIPTOS = unix.IP_TOS + ipv4PKTINFO = unix.IP_PKTINFO ) const batchSize = 8 // needs to smaller than MaxUint8 (otherwise the type of oobConn.readPos has to be changed) + +func forceSetReceiveBuffer(c syscall.RawConn, bytes int) error { + var serr error + if err := c.Control(func(fd uintptr) { + serr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_RCVBUFFORCE, bytes) + }); err != nil { + return err + } + return serr +} + +func forceSetSendBuffer(c syscall.RawConn, bytes int) error { + var serr error + if err := c.Control(func(fd uintptr) { + serr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_SNDBUFFORCE, bytes) + }); err != nil { + return err + } + return serr +} + +func parseIPv4PktInfo(body []byte) (ip netip.Addr, ifIndex uint32, ok bool) { + // struct in_pktinfo { + // unsigned int ipi_ifindex; /* Interface index */ + // struct in_addr ipi_spec_dst; /* Local address */ + // struct in_addr ipi_addr; /* Header Destination address */ + // }; + if len(body) != 12 { + return netip.Addr{}, 0, false + } + return netip.AddrFrom4(*(*[4]byte)(body[8:12])), binary.LittleEndian.Uint32(body), true +} + +// isGSOSupported tests if the kernel supports GSO. +// Sending with GSO might still fail later on, if the interface doesn't support it (see isGSOError). +func isGSOSupported(conn syscall.RawConn) bool { + disabled, err := strconv.ParseBool(os.Getenv("QUIC_GO_DISABLE_GSO")) + if err == nil && disabled { + return false + } + var serr error + if err := conn.Control(func(fd uintptr) { + _, serr = unix.GetsockoptInt(int(fd), unix.IPPROTO_UDP, unix.UDP_SEGMENT) + }); err != nil { + return false + } + return serr == nil +} + +func appendUDPSegmentSizeMsg(b []byte, size uint16) []byte { + startLen := len(b) + const dataLen = 2 // payload is a uint16 + b = append(b, make([]byte, unix.CmsgSpace(dataLen))...) + h := (*unix.Cmsghdr)(unsafe.Pointer(&b[startLen])) + h.Level = syscall.IPPROTO_UDP + h.Type = unix.UDP_SEGMENT + h.SetLen(unix.CmsgLen(dataLen)) + + // UnixRights uses the private `data` method, but I *think* this achieves the same goal. + offset := startLen + unix.CmsgSpace(0) + *(*uint16)(unsafe.Pointer(&b[offset])) = size + return b +} + +func isGSOError(err error) bool { + var serr *os.SyscallError + if errors.As(err, &serr) { + // EIO is returned by udp_send_skb() if the device driver does not have tx checksums enabled, + // which is a hard requirement of UDP_SEGMENT. See: + // https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man7/udp.7?id=806eabd74910447f21005160e90957bde4db0183#n228 + // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/ipv4/udp.c?h=v6.2&id=c9c3395d5e3dcc6daee66c6908354d47bf98cb0c#n942 + return serr.Err == unix.EIO + } + return false +} diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_helper_nonlinux.go b/vendor/github.com/quic-go/quic-go/sys_conn_helper_nonlinux.go new file mode 100644 index 0000000000..cace82d5dc --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_helper_nonlinux.go @@ -0,0 +1,9 @@ +//go:build !linux + +package quic + +func forceSetReceiveBuffer(c any, bytes int) error { return nil } +func forceSetSendBuffer(c any, bytes int) error { return nil } + +func appendUDPSegmentSizeMsg([]byte, uint16) []byte { return nil } +func isGSOError(error) bool { return false } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_no_oob.go b/vendor/github.com/quic-go/quic-go/sys_conn_no_oob.go index 7ab5040aa1..2a1f807efd 100644 --- a/vendor/github.com/quic-go/quic-go/sys_conn_no_oob.go +++ b/vendor/github.com/quic-go/quic-go/sys_conn_no_oob.go @@ -2,14 +2,20 @@ package quic -import "net" +import ( + "net" + "net/netip" +) -func newConn(c net.PacketConn) (rawConn, error) { - return &basicConn{PacketConn: c}, nil +func newConn(c net.PacketConn, supportsDF bool) (*basicConn, error) { + return &basicConn{PacketConn: c, supportsDF: supportsDF}, nil } -func inspectReadBuffer(interface{}) (int, error) { - return 0, nil +func inspectReadBuffer(any) (int, error) { return 0, nil } +func inspectWriteBuffer(any) (int, error) { return 0, nil } + +type packetInfo struct { + addr netip.Addr } func (i *packetInfo) OOB() []byte { return nil } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_oob.go b/vendor/github.com/quic-go/quic-go/sys_conn_oob.go index 806dfb81a3..4026a7b32c 100644 --- a/vendor/github.com/quic-go/quic-go/sys_conn_oob.go +++ b/vendor/github.com/quic-go/quic-go/sys_conn_oob.go @@ -5,8 +5,10 @@ package quic import ( "encoding/binary" "errors" - "fmt" + "log" "net" + "net/netip" + "sync" "syscall" "time" @@ -32,20 +34,10 @@ type batchConn interface { ReadBatch(ms []ipv4.Message, flags int) (int, error) } -func inspectReadBuffer(c interface{}) (int, error) { - conn, ok := c.(interface { - SyscallConn() (syscall.RawConn, error) - }) - if !ok { - return 0, errors.New("doesn't have a SyscallConn") - } - rawConn, err := conn.SyscallConn() - if err != nil { - return 0, fmt.Errorf("couldn't get syscall.RawConn: %w", err) - } +func inspectReadBuffer(c syscall.RawConn) (int, error) { var size int var serr error - if err := rawConn.Control(func(fd uintptr) { + if err := c.Control(func(fd uintptr) { size, serr = unix.GetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_RCVBUF) }); err != nil { return 0, err @@ -53,6 +45,17 @@ func inspectReadBuffer(c interface{}) (int, error) { return size, serr } +func inspectWriteBuffer(c syscall.RawConn) (int, error) { + var size int + var serr error + if err := c.Control(func(fd uintptr) { + size, serr = unix.GetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_SNDBUF) + }); err != nil { + return 0, err + } + return size, serr +} + type oobConn struct { OOBCapablePacketConn batchConn batchConn @@ -61,11 +64,13 @@ type oobConn struct { // Packets received from the kernel, but not yet returned by ReadPacket(). messages []ipv4.Message buffers [batchSize]*packetBuffer + + cap connCapabilities } var _ rawConn = &oobConn{} -func newConn(c OOBCapablePacketConn) (*oobConn, error) { +func newConn(c OOBCapablePacketConn, supportsDF bool) (*oobConn, error) { rawConn, err := c.SyscallConn() if err != nil { return nil, err @@ -83,8 +88,8 @@ func newConn(c OOBCapablePacketConn) (*oobConn, error) { errECNIPv6 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_RECVTCLASS, 1) if needsPacketInfo { - errPIIPv4 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, ipv4RECVPKTINFO, 1) - errPIIPv6 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, ipv6RECVPKTINFO, 1) + errPIIPv4 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, ipv4PKTINFO, 1) + errPIIPv6 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_RECVPKTINFO, 1) } }); err != nil { return nil, err @@ -132,6 +137,10 @@ func newConn(c OOBCapablePacketConn) (*oobConn, error) { batchConn: bc, messages: msgs, readPos: batchSize, + cap: connCapabilities{ + DF: supportsDF, + GSO: isGSOSupported(rawConn), + }, } for i := 0; i < batchSize; i++ { oobConn.messages[i].OOB = make([]byte, oobBufferSize) @@ -139,7 +148,9 @@ func newConn(c OOBCapablePacketConn) (*oobConn, error) { return oobConn, nil } -func (c *oobConn) ReadPacket() (*receivedPacket, error) { +var invalidCmsgOnceV4, invalidCmsgOnceV6 sync.Once + +func (c *oobConn) ReadPacket() (receivedPacket, error) { if len(c.messages) == int(c.readPos) { // all messages read. Read the next batch of messages. c.messages = c.messages[:batchSize] // replace buffers data buffers up to the packet that has been consumed during the last ReadBatch call @@ -153,7 +164,7 @@ func (c *oobConn) ReadPacket() (*receivedPacket, error) { n, err := c.batchConn.ReadBatch(c.messages, 0) if n == 0 || err != nil { - return nil, err + return receivedPacket{}, err } c.messages = c.messages[:n] } @@ -163,99 +174,99 @@ func (c *oobConn) ReadPacket() (*receivedPacket, error) { c.readPos++ data := msg.OOB[:msg.NN] - var ecn protocol.ECN - var destIP net.IP - var ifIndex uint32 + p := receivedPacket{ + remoteAddr: msg.Addr, + rcvTime: time.Now(), + data: msg.Buffers[0][:msg.N], + buffer: buffer, + } for len(data) > 0 { hdr, body, remainder, err := unix.ParseOneSocketControlMessage(data) if err != nil { - return nil, err + return receivedPacket{}, err } if hdr.Level == unix.IPPROTO_IP { switch hdr.Type { case msgTypeIPTOS: - ecn = protocol.ECN(body[0] & ecnMask) - case msgTypeIPv4PKTINFO: - // struct in_pktinfo { - // unsigned int ipi_ifindex; /* Interface index */ - // struct in_addr ipi_spec_dst; /* Local address */ - // struct in_addr ipi_addr; /* Header Destination - // address */ - // }; - ip := make([]byte, 4) - if len(body) == 12 { - ifIndex = binary.LittleEndian.Uint32(body) - copy(ip, body[8:12]) - } else if len(body) == 4 { - // FreeBSD - copy(ip, body) + p.ecn = protocol.ECN(body[0] & ecnMask) + case ipv4PKTINFO: + ip, ifIndex, ok := parseIPv4PktInfo(body) + if ok { + p.info.addr = ip + p.info.ifIndex = ifIndex + } else { + invalidCmsgOnceV4.Do(func() { + log.Printf("Received invalid IPv4 packet info control message: %+x. "+ + "This should never occur, please open a new issue and include details about the architecture.", body) + }) } - destIP = net.IP(ip) } } if hdr.Level == unix.IPPROTO_IPV6 { switch hdr.Type { case unix.IPV6_TCLASS: - ecn = protocol.ECN(body[0] & ecnMask) - case msgTypeIPv6PKTINFO: + p.ecn = protocol.ECN(body[0] & ecnMask) + case unix.IPV6_PKTINFO: // struct in6_pktinfo { // struct in6_addr ipi6_addr; /* src/dst IPv6 address */ // unsigned int ipi6_ifindex; /* send/recv interface index */ // }; if len(body) == 20 { - ip := make([]byte, 16) - copy(ip, body[:16]) - destIP = net.IP(ip) - ifIndex = binary.LittleEndian.Uint32(body[16:]) + p.info.addr = netip.AddrFrom16(*(*[16]byte)(body[:16])) + p.info.ifIndex = binary.LittleEndian.Uint32(body[16:]) + } else { + invalidCmsgOnceV6.Do(func() { + log.Printf("Received invalid IPv6 packet info control message: %+x. "+ + "This should never occur, please open a new issue and include details about the architecture.", body) + }) } } } data = remainder } - var info *packetInfo - if destIP != nil { - info = &packetInfo{ - addr: destIP, - ifIndex: ifIndex, - } - } - return &receivedPacket{ - remoteAddr: msg.Addr, - rcvTime: time.Now(), - data: msg.Buffers[0][:msg.N], - ecn: ecn, - info: info, - buffer: buffer, - }, nil + return p, nil } -func (c *oobConn) WritePacket(b []byte, addr net.Addr, oob []byte) (n int, err error) { - n, _, err = c.OOBCapablePacketConn.WriteMsgUDP(b, oob, addr.(*net.UDPAddr)) +// WritePacket writes a new packet. +// If the connection supports GSO, it's the caller's responsibility to append the right control mesage. +func (c *oobConn) WritePacket(b []byte, addr net.Addr, oob []byte) (int, error) { + n, _, err := c.OOBCapablePacketConn.WriteMsgUDP(b, oob, addr.(*net.UDPAddr)) return n, err } +func (c *oobConn) capabilities() connCapabilities { + return c.cap +} + +type packetInfo struct { + addr netip.Addr + ifIndex uint32 +} + func (info *packetInfo) OOB() []byte { if info == nil { return nil } - if ip4 := info.addr.To4(); ip4 != nil { + if info.addr.Is4() { + ip := info.addr.As4() // struct in_pktinfo { // unsigned int ipi_ifindex; /* Interface index */ // struct in_addr ipi_spec_dst; /* Local address */ // struct in_addr ipi_addr; /* Header Destination address */ // }; cm := ipv4.ControlMessage{ - Src: ip4, + Src: ip[:], IfIndex: int(info.ifIndex), } return cm.Marshal() - } else if len(info.addr) == 16 { + } else if info.addr.Is6() { + ip := info.addr.As16() // struct in6_pktinfo { // struct in6_addr ipi6_addr; /* src/dst IPv6 address */ // unsigned int ipi6_ifindex; /* send/recv interface index */ // }; cm := ipv6.ControlMessage{ - Src: info.addr, + Src: ip[:], IfIndex: int(info.ifIndex), } return cm.Marshal() diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_windows.go b/vendor/github.com/quic-go/quic-go/sys_conn_windows.go index b003fe94af..b9c1cbc868 100644 --- a/vendor/github.com/quic-go/quic-go/sys_conn_windows.go +++ b/vendor/github.com/quic-go/quic-go/sys_conn_windows.go @@ -3,32 +3,20 @@ package quic import ( - "errors" - "fmt" - "net" + "net/netip" "syscall" "golang.org/x/sys/windows" ) -func newConn(c OOBCapablePacketConn) (rawConn, error) { - return &basicConn{PacketConn: c}, nil +func newConn(c OOBCapablePacketConn, supportsDF bool) (*basicConn, error) { + return &basicConn{PacketConn: c, supportsDF: supportsDF}, nil } -func inspectReadBuffer(c net.PacketConn) (int, error) { - conn, ok := c.(interface { - SyscallConn() (syscall.RawConn, error) - }) - if !ok { - return 0, errors.New("doesn't have a SyscallConn") - } - rawConn, err := conn.SyscallConn() - if err != nil { - return 0, fmt.Errorf("couldn't get syscall.RawConn: %w", err) - } +func inspectReadBuffer(c syscall.RawConn) (int, error) { var size int var serr error - if err := rawConn.Control(func(fd uintptr) { + if err := c.Control(func(fd uintptr) { size, serr = windows.GetsockoptInt(windows.Handle(fd), windows.SOL_SOCKET, windows.SO_RCVBUF) }); err != nil { return 0, err @@ -36,4 +24,19 @@ func inspectReadBuffer(c net.PacketConn) (int, error) { return size, serr } +func inspectWriteBuffer(c syscall.RawConn) (int, error) { + var size int + var serr error + if err := c.Control(func(fd uintptr) { + size, serr = windows.GetsockoptInt(windows.Handle(fd), windows.SOL_SOCKET, windows.SO_SNDBUF) + }); err != nil { + return 0, err + } + return size, serr +} + +type packetInfo struct { + addr netip.Addr +} + func (i *packetInfo) OOB() []byte { return nil } diff --git a/vendor/github.com/quic-go/quic-go/transport.go b/vendor/github.com/quic-go/quic-go/transport.go new file mode 100644 index 0000000000..d8da9b1a18 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/transport.go @@ -0,0 +1,491 @@ +package quic + +import ( + "context" + "crypto/rand" + "crypto/tls" + "errors" + "net" + "sync" + "sync/atomic" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" + "github.com/quic-go/quic-go/logging" +) + +// The Transport is the central point to manage incoming and outgoing QUIC connections. +// QUIC demultiplexes connections based on their QUIC Connection IDs, not based on the 4-tuple. +// This means that a single UDP socket can be used for listening for incoming connections, as well as +// for dialing an arbitrary number of outgoing connections. +// A Transport handles a single net.PacketConn, and offers a range of configuration options +// compared to the simple helper functions like Listen and Dial that this package provides. +type Transport struct { + // A single net.PacketConn can only be handled by one Transport. + // Bad things will happen if passed to multiple Transports. + // + // A number of optimizations will be enabled if the connections implements the OOBCapablePacketConn interface, + // as a *net.UDPConn does. + // 1. It enables the Don't Fragment (DF) bit on the IP header. + // This is required to run DPLPMTUD (Path MTU Discovery, RFC 8899). + // 2. It enables reading of the ECN bits from the IP header. + // This allows the remote node to speed up its loss detection and recovery. + // 3. It uses batched syscalls (recvmmsg) to more efficiently receive packets from the socket. + // 4. It uses Generic Segmentation Offload (GSO) to efficiently send batches of packets (on Linux). + // + // After passing the connection to the Transport, it's invalid to call ReadFrom or WriteTo on the connection. + Conn net.PacketConn + + // The length of the connection ID in bytes. + // It can be 0, or any value between 4 and 18. + // If unset, a 4 byte connection ID will be used. + ConnectionIDLength int + + // Use for generating new connection IDs. + // This allows the application to control of the connection IDs used, + // which allows routing / load balancing based on connection IDs. + // All Connection IDs returned by the ConnectionIDGenerator MUST + // have the same length. + ConnectionIDGenerator ConnectionIDGenerator + + // The StatelessResetKey is used to generate stateless reset tokens. + // If no key is configured, sending of stateless resets is disabled. + // It is highly recommended to configure a stateless reset key, as stateless resets + // allow the peer to quickly recover from crashes and reboots of this node. + // See section 10.3 of RFC 9000 for details. + StatelessResetKey *StatelessResetKey + + // A Tracer traces events that don't belong to a single QUIC connection. + Tracer logging.Tracer + + handlerMap packetHandlerManager + + mutex sync.Mutex + initOnce sync.Once + initErr error + + // Set in init. + // If no ConnectionIDGenerator is set, this is the ConnectionIDLength. + connIDLen int + // Set in init. + // If no ConnectionIDGenerator is set, this is set to a default. + connIDGenerator ConnectionIDGenerator + + server unknownPacketHandler + + conn rawConn + + closeQueue chan closePacket + statelessResetQueue chan receivedPacket + + listening chan struct{} // is closed when listen returns + closed bool + createdConn bool + isSingleUse bool // was created for a single server or client, i.e. by calling quic.Listen or quic.Dial + + readingNonQUICPackets atomic.Bool + nonQUICPackets chan receivedPacket + + logger utils.Logger +} + +// Listen starts listening for incoming QUIC connections. +// There can only be a single listener on any net.PacketConn. +// Listen may only be called again after the current Listener was closed. +func (t *Transport) Listen(tlsConf *tls.Config, conf *Config) (*Listener, error) { + if tlsConf == nil { + return nil, errors.New("quic: tls.Config not set") + } + if err := validateConfig(conf); err != nil { + return nil, err + } + + t.mutex.Lock() + defer t.mutex.Unlock() + + if t.server != nil { + return nil, errListenerAlreadySet + } + conf = populateServerConfig(conf) + if err := t.init(false); err != nil { + return nil, err + } + s, err := newServer(t.conn, t.handlerMap, t.connIDGenerator, tlsConf, conf, t.Tracer, t.closeServer, false) + if err != nil { + return nil, err + } + t.server = s + return &Listener{baseServer: s}, nil +} + +// ListenEarly starts listening for incoming QUIC connections. +// There can only be a single listener on any net.PacketConn. +// Listen may only be called again after the current Listener was closed. +func (t *Transport) ListenEarly(tlsConf *tls.Config, conf *Config) (*EarlyListener, error) { + if tlsConf == nil { + return nil, errors.New("quic: tls.Config not set") + } + if err := validateConfig(conf); err != nil { + return nil, err + } + + t.mutex.Lock() + defer t.mutex.Unlock() + + if t.server != nil { + return nil, errListenerAlreadySet + } + conf = populateServerConfig(conf) + if err := t.init(false); err != nil { + return nil, err + } + s, err := newServer(t.conn, t.handlerMap, t.connIDGenerator, tlsConf, conf, t.Tracer, t.closeServer, true) + if err != nil { + return nil, err + } + t.server = s + return &EarlyListener{baseServer: s}, nil +} + +// Dial dials a new connection to a remote host (not using 0-RTT). +func (t *Transport) Dial(ctx context.Context, addr net.Addr, tlsConf *tls.Config, conf *Config) (Connection, error) { + return t.dial(ctx, addr, "", tlsConf, conf, false) +} + +// DialEarly dials a new connection, attempting to use 0-RTT if possible. +func (t *Transport) DialEarly(ctx context.Context, addr net.Addr, tlsConf *tls.Config, conf *Config) (EarlyConnection, error) { + return t.dial(ctx, addr, "", tlsConf, conf, true) +} + +func (t *Transport) dial(ctx context.Context, addr net.Addr, host string, tlsConf *tls.Config, conf *Config, use0RTT bool) (EarlyConnection, error) { + if err := validateConfig(conf); err != nil { + return nil, err + } + conf = populateConfig(conf) + if err := t.init(t.isSingleUse); err != nil { + return nil, err + } + var onClose func() + if t.isSingleUse { + onClose = func() { t.Close() } + } + tlsConf = tlsConf.Clone() + tlsConf.MinVersion = tls.VersionTLS13 + setTLSConfigServerName(tlsConf, addr, host) + return dial(ctx, newSendConn(t.conn, addr, packetInfo{}, utils.DefaultLogger), t.connIDGenerator, t.handlerMap, tlsConf, conf, onClose, use0RTT) +} + +func (t *Transport) init(allowZeroLengthConnIDs bool) error { + t.initOnce.Do(func() { + var conn rawConn + if c, ok := t.Conn.(rawConn); ok { + conn = c + } else { + var err error + conn, err = wrapConn(t.Conn) + if err != nil { + t.initErr = err + return + } + } + + t.logger = utils.DefaultLogger // TODO: make this configurable + t.conn = conn + t.handlerMap = newPacketHandlerMap(t.StatelessResetKey, t.enqueueClosePacket, t.logger) + t.listening = make(chan struct{}) + + t.closeQueue = make(chan closePacket, 4) + t.statelessResetQueue = make(chan receivedPacket, 4) + + if t.ConnectionIDGenerator != nil { + t.connIDGenerator = t.ConnectionIDGenerator + t.connIDLen = t.ConnectionIDGenerator.ConnectionIDLen() + } else { + connIDLen := t.ConnectionIDLength + if t.ConnectionIDLength == 0 && !allowZeroLengthConnIDs { + connIDLen = protocol.DefaultConnectionIDLength + } + t.connIDLen = connIDLen + t.connIDGenerator = &protocol.DefaultConnectionIDGenerator{ConnLen: t.connIDLen} + } + + getMultiplexer().AddConn(t.Conn) + go t.listen(conn) + go t.runSendQueue() + }) + return t.initErr +} + +// WriteTo sends a packet on the underlying connection. +func (t *Transport) WriteTo(b []byte, addr net.Addr) (int, error) { + if err := t.init(false); err != nil { + return 0, err + } + return t.conn.WritePacket(b, addr, nil) +} + +func (t *Transport) enqueueClosePacket(p closePacket) { + select { + case t.closeQueue <- p: + default: + // Oops, we're backlogged. + // Just drop the packet, sending CONNECTION_CLOSE copies is best effort anyway. + } +} + +func (t *Transport) runSendQueue() { + for { + select { + case <-t.listening: + return + case p := <-t.closeQueue: + t.conn.WritePacket(p.payload, p.addr, p.info.OOB()) + case p := <-t.statelessResetQueue: + t.sendStatelessReset(p) + } + } +} + +// Close closes the underlying connection and waits until listen has returned. +// It is invalid to start new listeners or connections after that. +func (t *Transport) Close() error { + t.close(errors.New("closing")) + if t.createdConn { + if err := t.Conn.Close(); err != nil { + return err + } + } else if t.conn != nil { + t.conn.SetReadDeadline(time.Now()) + defer func() { t.conn.SetReadDeadline(time.Time{}) }() + } + if t.listening != nil { + <-t.listening // wait until listening returns + } + return nil +} + +func (t *Transport) closeServer() { + t.handlerMap.CloseServer() + t.mutex.Lock() + t.server = nil + if t.isSingleUse { + t.closed = true + } + t.mutex.Unlock() + if t.createdConn { + t.Conn.Close() + } + if t.isSingleUse { + t.conn.SetReadDeadline(time.Now()) + defer func() { t.conn.SetReadDeadline(time.Time{}) }() + <-t.listening // wait until listening returns + } +} + +func (t *Transport) close(e error) { + t.mutex.Lock() + defer t.mutex.Unlock() + if t.closed { + return + } + + if t.handlerMap != nil { + t.handlerMap.Close(e) + } + if t.server != nil { + t.server.setCloseError(e) + } + t.closed = true +} + +// only print warnings about the UDP receive buffer size once +var setBufferWarningOnce sync.Once + +func (t *Transport) listen(conn rawConn) { + defer close(t.listening) + defer getMultiplexer().RemoveConn(t.Conn) + + for { + p, err := conn.ReadPacket() + //nolint:staticcheck // SA1019 ignore this! + // TODO: This code is used to ignore wsa errors on Windows. + // Since net.Error.Temporary is deprecated as of Go 1.18, we should find a better solution. + // See https://github.com/quic-go/quic-go/issues/1737 for details. + if nerr, ok := err.(net.Error); ok && nerr.Temporary() { + t.mutex.Lock() + closed := t.closed + t.mutex.Unlock() + if closed { + return + } + t.logger.Debugf("Temporary error reading from conn: %w", err) + continue + } + if err != nil { + // Windows returns an error when receiving a UDP datagram that doesn't fit into the provided buffer. + if isRecvMsgSizeErr(err) { + continue + } + t.close(err) + return + } + t.handlePacket(p) + } +} + +func (t *Transport) handlePacket(p receivedPacket) { + if len(p.data) == 0 { + return + } + if !wire.IsPotentialQUICPacket(p.data[0]) && !wire.IsLongHeaderPacket(p.data[0]) { + t.handleNonQUICPacket(p) + return + } + connID, err := wire.ParseConnectionID(p.data, t.connIDLen) + if err != nil { + t.logger.Debugf("error parsing connection ID on packet from %s: %s", p.remoteAddr, err) + if t.Tracer != nil { + t.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropHeaderParseError) + } + p.buffer.MaybeRelease() + return + } + + if isStatelessReset := t.maybeHandleStatelessReset(p.data); isStatelessReset { + return + } + if handler, ok := t.handlerMap.Get(connID); ok { + handler.handlePacket(p) + return + } + if !wire.IsLongHeaderPacket(p.data[0]) { + t.maybeSendStatelessReset(p) + return + } + + t.mutex.Lock() + defer t.mutex.Unlock() + if t.server == nil { // no server set + t.logger.Debugf("received a packet with an unexpected connection ID %s", connID) + return + } + t.server.handlePacket(p) +} + +func (t *Transport) maybeSendStatelessReset(p receivedPacket) { + if t.StatelessResetKey == nil { + p.buffer.Release() + return + } + + // Don't send a stateless reset in response to very small packets. + // This includes packets that could be stateless resets. + if len(p.data) <= protocol.MinStatelessResetSize { + p.buffer.Release() + return + } + + select { + case t.statelessResetQueue <- p: + default: + // it's fine to not send a stateless reset when we're busy + p.buffer.Release() + } +} + +func (t *Transport) sendStatelessReset(p receivedPacket) { + defer p.buffer.Release() + + connID, err := wire.ParseConnectionID(p.data, t.connIDLen) + if err != nil { + t.logger.Errorf("error parsing connection ID on packet from %s: %s", p.remoteAddr, err) + return + } + token := t.handlerMap.GetStatelessResetToken(connID) + t.logger.Debugf("Sending stateless reset to %s (connection ID: %s). Token: %#x", p.remoteAddr, connID, token) + data := make([]byte, protocol.MinStatelessResetSize-16, protocol.MinStatelessResetSize) + rand.Read(data) + data[0] = (data[0] & 0x7f) | 0x40 + data = append(data, token[:]...) + if _, err := t.conn.WritePacket(data, p.remoteAddr, p.info.OOB()); err != nil { + t.logger.Debugf("Error sending Stateless Reset to %s: %s", p.remoteAddr, err) + } +} + +func (t *Transport) maybeHandleStatelessReset(data []byte) bool { + // stateless resets are always short header packets + if wire.IsLongHeaderPacket(data[0]) { + return false + } + if len(data) < 17 /* type byte + 16 bytes for the reset token */ { + return false + } + + token := *(*protocol.StatelessResetToken)(data[len(data)-16:]) + if conn, ok := t.handlerMap.GetByResetToken(token); ok { + t.logger.Debugf("Received a stateless reset with token %#x. Closing connection.", token) + go conn.destroy(&StatelessResetError{Token: token}) + return true + } + return false +} + +func (t *Transport) handleNonQUICPacket(p receivedPacket) { + // Strictly speaking, this is racy, + // but we only care about receiving packets at some point after ReadNonQUICPacket has been called. + if !t.readingNonQUICPackets.Load() { + return + } + select { + case t.nonQUICPackets <- p: + default: + if t.Tracer != nil { + t.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropDOSPrevention) + } + } +} + +const maxQueuedNonQUICPackets = 32 + +// ReadNonQUICPacket reads non-QUIC packets received on the underlying connection. +// The detection logic is very simple: Any packet that has the first and second bit of the packet set to 0. +// Note that this is stricter than the detection logic defined in RFC 9443. +func (t *Transport) ReadNonQUICPacket(ctx context.Context, b []byte) (int, net.Addr, error) { + if err := t.init(false); err != nil { + return 0, nil, err + } + if !t.readingNonQUICPackets.Load() { + t.nonQUICPackets = make(chan receivedPacket, maxQueuedNonQUICPackets) + t.readingNonQUICPackets.Store(true) + } + select { + case <-ctx.Done(): + return 0, nil, ctx.Err() + case p := <-t.nonQUICPackets: + n := copy(b, p.data) + return n, p.remoteAddr, nil + case <-t.listening: + return 0, nil, errors.New("closed") + } +} + +func setTLSConfigServerName(tlsConf *tls.Config, addr net.Addr, host string) { + // If no ServerName is set, infer the ServerName from the host we're connecting to. + if tlsConf.ServerName != "" { + return + } + if host == "" { + if udpAddr, ok := addr.(*net.UDPAddr); ok { + tlsConf.ServerName = udpAddr.IP.String() + return + } + } + h, _, err := net.SplitHostPort(host) + if err != nil { // This happens if the host doesn't contain a port number. + tlsConf.ServerName = host + return + } + tlsConf.ServerName = h +} diff --git a/vendor/github.com/quic-go/quic-go/zero_rtt_queue.go b/vendor/github.com/quic-go/quic-go/zero_rtt_queue.go deleted file mode 100644 index b81a936e07..0000000000 --- a/vendor/github.com/quic-go/quic-go/zero_rtt_queue.go +++ /dev/null @@ -1,34 +0,0 @@ -package quic - -import ( - "time" - - "github.com/quic-go/quic-go/internal/protocol" -) - -type zeroRTTQueue struct { - queue []*receivedPacket - retireTimer *time.Timer -} - -var _ packetHandler = &zeroRTTQueue{} - -func (h *zeroRTTQueue) handlePacket(p *receivedPacket) { - if len(h.queue) < protocol.Max0RTTQueueLen { - h.queue = append(h.queue, p) - } -} -func (h *zeroRTTQueue) shutdown() {} -func (h *zeroRTTQueue) destroy(error) {} -func (h *zeroRTTQueue) getPerspective() protocol.Perspective { return protocol.PerspectiveClient } -func (h *zeroRTTQueue) EnqueueAll(sess packetHandler) { - for _, p := range h.queue { - sess.handlePacket(p) - } -} - -func (h *zeroRTTQueue) Clear() { - for _, p := range h.queue { - p.buffer.Release() - } -} diff --git a/vendor/github.com/shirou/gopsutil/v3/common/env.go b/vendor/github.com/shirou/gopsutil/v3/common/env.go new file mode 100644 index 0000000000..4b5f4980c2 --- /dev/null +++ b/vendor/github.com/shirou/gopsutil/v3/common/env.go @@ -0,0 +1,23 @@ +package common + +type EnvKeyType string + +// EnvKey is a context key that can be used to set programmatically the environment +// gopsutil relies on to perform calls against the OS. +// Example of use: +// +// ctx := context.WithValue(context.Background(), common.EnvKey, EnvMap{common.HostProcEnvKey: "/myproc"}) +// avg, err := load.AvgWithContext(ctx) +var EnvKey = EnvKeyType("env") + +const ( + HostProcEnvKey EnvKeyType = "HOST_PROC" + HostSysEnvKey EnvKeyType = "HOST_SYS" + HostEtcEnvKey EnvKeyType = "HOST_ETC" + HostVarEnvKey EnvKeyType = "HOST_VAR" + HostRunEnvKey EnvKeyType = "HOST_RUN" + HostDevEnvKey EnvKeyType = "HOST_DEV" + HostRootEnvKey EnvKeyType = "HOST_ROOT" +) + +type EnvMap map[EnvKeyType]string diff --git a/vendor/github.com/shirou/gopsutil/v3/cpu/cpu_linux.go b/vendor/github.com/shirou/gopsutil/v3/cpu/cpu_linux.go index d4c575e80a..1b64241ce4 100644 --- a/vendor/github.com/shirou/gopsutil/v3/cpu/cpu_linux.go +++ b/vendor/github.com/shirou/gopsutil/v3/cpu/cpu_linux.go @@ -96,7 +96,7 @@ func Times(percpu bool) ([]TimesStat, error) { } func TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) { - filename := common.HostProc("stat") + filename := common.HostProcWithContext(ctx, "stat") lines := []string{} if percpu { statlines, err := common.ReadLines(filename) @@ -126,17 +126,17 @@ func TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) { return ret, nil } -func sysCPUPath(cpu int32, relPath string) string { - return common.HostSys(fmt.Sprintf("devices/system/cpu/cpu%d", cpu), relPath) +func sysCPUPath(ctx context.Context, cpu int32, relPath string) string { + return common.HostSysWithContext(ctx, fmt.Sprintf("devices/system/cpu/cpu%d", cpu), relPath) } -func finishCPUInfo(c *InfoStat) { +func finishCPUInfo(ctx context.Context, c *InfoStat) { var lines []string var err error var value float64 if len(c.CoreID) == 0 { - lines, err = common.ReadLines(sysCPUPath(c.CPU, "topology/core_id")) + lines, err = common.ReadLines(sysCPUPath(ctx, c.CPU, "topology/core_id")) if err == nil { c.CoreID = lines[0] } @@ -145,7 +145,7 @@ func finishCPUInfo(c *InfoStat) { // override the value of c.Mhz with cpufreq/cpuinfo_max_freq regardless // of the value from /proc/cpuinfo because we want to report the maximum // clock-speed of the CPU for c.Mhz, matching the behaviour of Windows - lines, err = common.ReadLines(sysCPUPath(c.CPU, "cpufreq/cpuinfo_max_freq")) + lines, err = common.ReadLines(sysCPUPath(ctx, c.CPU, "cpufreq/cpuinfo_max_freq")) // if we encounter errors below such as there are no cpuinfo_max_freq file, // we just ignore. so let Mhz is 0. if err != nil || len(lines) == 0 { @@ -173,7 +173,7 @@ func Info() ([]InfoStat, error) { } func InfoWithContext(ctx context.Context) ([]InfoStat, error) { - filename := common.HostProc("cpuinfo") + filename := common.HostProcWithContext(ctx, "cpuinfo") lines, _ := common.ReadLines(filename) var ret []InfoStat @@ -193,7 +193,7 @@ func InfoWithContext(ctx context.Context) ([]InfoStat, error) { processorName = value case "processor", "cpu number": if c.CPU >= 0 { - finishCPUInfo(&c) + finishCPUInfo(ctx, &c) ret = append(ret, c) } c = InfoStat{Cores: 1, ModelName: processorName} @@ -301,7 +301,7 @@ func InfoWithContext(ctx context.Context) ([]InfoStat, error) { } } if c.CPU >= 0 { - finishCPUInfo(&c) + finishCPUInfo(ctx, &c) ret = append(ret, c) } return ret, nil @@ -390,7 +390,7 @@ func CountsWithContext(ctx context.Context, logical bool) (int, error) { if logical { ret := 0 // https://github.com/giampaolo/psutil/blob/d01a9eaa35a8aadf6c519839e987a49d8be2d891/psutil/_pslinux.py#L599 - procCpuinfo := common.HostProc("cpuinfo") + procCpuinfo := common.HostProcWithContext(ctx, "cpuinfo") lines, err := common.ReadLines(procCpuinfo) if err == nil { for _, line := range lines { @@ -404,7 +404,7 @@ func CountsWithContext(ctx context.Context, logical bool) (int, error) { } } if ret == 0 { - procStat := common.HostProc("stat") + procStat := common.HostProcWithContext(ctx, "stat") lines, err = common.ReadLines(procStat) if err != nil { return 0, err @@ -425,7 +425,7 @@ func CountsWithContext(ctx context.Context, logical bool) (int, error) { // https://github.com/giampaolo/psutil/pull/1727#issuecomment-707624964 // https://lkml.org/lkml/2019/2/26/41 for _, glob := range []string{"devices/system/cpu/cpu[0-9]*/topology/core_cpus_list", "devices/system/cpu/cpu[0-9]*/topology/thread_siblings_list"} { - if files, err := filepath.Glob(common.HostSys(glob)); err == nil { + if files, err := filepath.Glob(common.HostSysWithContext(ctx, glob)); err == nil { for _, file := range files { lines, err := common.ReadLines(file) if err != nil || len(lines) != 1 { @@ -440,7 +440,7 @@ func CountsWithContext(ctx context.Context, logical bool) (int, error) { } } // https://github.com/giampaolo/psutil/blob/122174a10b75c9beebe15f6c07dcf3afbe3b120d/psutil/_pslinux.py#L631-L652 - filename := common.HostProc("cpuinfo") + filename := common.HostProcWithContext(ctx, "cpuinfo") lines, err := common.ReadLines(filename) if err != nil { return 0, err diff --git a/vendor/github.com/shirou/gopsutil/v3/internal/common/common.go b/vendor/github.com/shirou/gopsutil/v3/internal/common/common.go index c1e96ca7d4..9bfece3628 100644 --- a/vendor/github.com/shirou/gopsutil/v3/internal/common/common.go +++ b/vendor/github.com/shirou/gopsutil/v3/internal/common/common.go @@ -25,6 +25,8 @@ import ( "strconv" "strings" "time" + + "github.com/shirou/gopsutil/v3/common" ) var ( @@ -321,6 +323,23 @@ func PathExistsWithContents(filename string) bool { return info.Size() > 4 // at least 4 bytes } +// GetEnvWithContext retrieves the environment variable key. If it does not exist it returns the default. +// The context may optionally contain a map superseding os.EnvKey. +func GetEnvWithContext(ctx context.Context, key string, dfault string, combineWith ...string) string { + var value string + if env, ok := ctx.Value(common.EnvKey).(common.EnvMap); ok { + value = env[common.EnvKeyType(key)] + } + if value == "" { + value = os.Getenv(key) + } + if value == "" { + value = dfault + } + + return combine(value, combineWith) +} + // GetEnv retrieves the environment variable key. If it does not exist it returns the default. func GetEnv(key string, dfault string, combineWith ...string) string { value := os.Getenv(key) @@ -328,6 +347,10 @@ func GetEnv(key string, dfault string, combineWith ...string) string { value = dfault } + return combine(value, combineWith) +} + +func combine(value string, combineWith []string) string { switch len(combineWith) { case 0: return value @@ -369,6 +392,38 @@ func HostRoot(combineWith ...string) string { return GetEnv("HOST_ROOT", "/", combineWith...) } +func HostProcWithContext(ctx context.Context, combineWith ...string) string { + return GetEnvWithContext(ctx, "HOST_PROC", "/proc", combineWith...) +} + +func HostProcMountInfoWithContext(ctx context.Context, combineWith ...string) string { + return GetEnvWithContext(ctx, "HOST_PROC_MOUNTINFO", "", combineWith...) +} + +func HostSysWithContext(ctx context.Context, combineWith ...string) string { + return GetEnvWithContext(ctx, "HOST_SYS", "/sys", combineWith...) +} + +func HostEtcWithContext(ctx context.Context, combineWith ...string) string { + return GetEnvWithContext(ctx, "HOST_ETC", "/etc", combineWith...) +} + +func HostVarWithContext(ctx context.Context, combineWith ...string) string { + return GetEnvWithContext(ctx, "HOST_VAR", "/var", combineWith...) +} + +func HostRunWithContext(ctx context.Context, combineWith ...string) string { + return GetEnvWithContext(ctx, "HOST_RUN", "/run", combineWith...) +} + +func HostDevWithContext(ctx context.Context, combineWith ...string) string { + return GetEnvWithContext(ctx, "HOST_DEV", "/dev", combineWith...) +} + +func HostRootWithContext(ctx context.Context, combineWith ...string) string { + return GetEnvWithContext(ctx, "HOST_ROOT", "/", combineWith...) +} + // getSysctrlEnv sets LC_ALL=C in a list of env vars for use when running // sysctl commands (see DoSysctrl). func getSysctrlEnv(env []string) []string { diff --git a/vendor/github.com/shirou/gopsutil/v3/internal/common/common_linux.go b/vendor/github.com/shirou/gopsutil/v3/internal/common/common_linux.go index fa6373b555..b58edbeb0a 100644 --- a/vendor/github.com/shirou/gopsutil/v3/internal/common/common_linux.go +++ b/vendor/github.com/shirou/gopsutil/v3/internal/common/common_linux.go @@ -31,7 +31,11 @@ func DoSysctrl(mib string) ([]string, error) { } func NumProcs() (uint64, error) { - f, err := os.Open(HostProc()) + return NumProcsWithContext(context.Background()) +} + +func NumProcsWithContext(ctx context.Context) (uint64, error) { + f, err := os.Open(HostProcWithContext(ctx)) if err != nil { return 0, err } @@ -67,7 +71,7 @@ func BootTimeWithContext(ctx context.Context) (uint64, error) { statFile = "uptime" } - filename := HostProc(statFile) + filename := HostProcWithContext(ctx, statFile) lines, err := ReadLines(filename) if os.IsPermission(err) { var info syscall.Sysinfo_t @@ -139,7 +143,7 @@ func VirtualizationWithContext(ctx context.Context) (string, string, error) { } cachedVirtMutex.RUnlock() - filename := HostProc("xen") + filename := HostProcWithContext(ctx, "xen") if PathExists(filename) { system = "xen" role = "guest" // assume guest @@ -154,7 +158,7 @@ func VirtualizationWithContext(ctx context.Context) (string, string, error) { } } - filename = HostProc("modules") + filename = HostProcWithContext(ctx, "modules") if PathExists(filename) { contents, err := ReadLines(filename) if err == nil { @@ -177,7 +181,7 @@ func VirtualizationWithContext(ctx context.Context) (string, string, error) { } } - filename = HostProc("cpuinfo") + filename = HostProcWithContext(ctx, "cpuinfo") if PathExists(filename) { contents, err := ReadLines(filename) if err == nil { @@ -190,7 +194,7 @@ func VirtualizationWithContext(ctx context.Context) (string, string, error) { } } - filename = HostProc("bus/pci/devices") + filename = HostProcWithContext(ctx, "bus/pci/devices") if PathExists(filename) { contents, err := ReadLines(filename) if err == nil { @@ -200,7 +204,7 @@ func VirtualizationWithContext(ctx context.Context) (string, string, error) { } } - filename = HostProc() + filename = HostProcWithContext(ctx) if PathExists(filepath.Join(filename, "bc", "0")) { system = "openvz" role = "host" @@ -251,15 +255,15 @@ func VirtualizationWithContext(ctx context.Context) (string, string, error) { } } - if PathExists(HostEtc("os-release")) { - p, _, err := GetOSRelease() + if PathExists(HostEtcWithContext(ctx, "os-release")) { + p, _, err := GetOSReleaseWithContext(ctx) if err == nil && p == "coreos" { system = "rkt" // Is it true? role = "host" } } - if PathExists(HostRoot(".dockerenv")) { + if PathExists(HostRootWithContext(ctx, ".dockerenv")) { system = "docker" role = "guest" } @@ -278,7 +282,11 @@ func VirtualizationWithContext(ctx context.Context) (string, string, error) { } func GetOSRelease() (platform string, version string, err error) { - contents, err := ReadLines(HostEtc("os-release")) + return GetOSReleaseWithContext(context.Background()) +} + +func GetOSReleaseWithContext(ctx context.Context) (platform string, version string, err error) { + contents, err := ReadLines(HostEtcWithContext(ctx, "os-release")) if err != nil { return "", "", nil // return empty } diff --git a/vendor/github.com/shirou/gopsutil/v3/mem/mem_darwin.go b/vendor/github.com/shirou/gopsutil/v3/mem/mem_darwin.go index 0527dd93cb..a05a0faba0 100644 --- a/vendor/github.com/shirou/gopsutil/v3/mem/mem_darwin.go +++ b/vendor/github.com/shirou/gopsutil/v3/mem/mem_darwin.go @@ -8,8 +8,9 @@ import ( "fmt" "unsafe" - "github.com/shirou/gopsutil/v3/internal/common" "golang.org/x/sys/unix" + + "github.com/shirou/gopsutil/v3/internal/common" ) func getHwMemsize() (uint64, error) { diff --git a/vendor/github.com/shirou/gopsutil/v3/mem/mem_linux.go b/vendor/github.com/shirou/gopsutil/v3/mem/mem_linux.go index 059518dc52..361d06bcc1 100644 --- a/vendor/github.com/shirou/gopsutil/v3/mem/mem_linux.go +++ b/vendor/github.com/shirou/gopsutil/v3/mem/mem_linux.go @@ -37,7 +37,7 @@ func VirtualMemory() (*VirtualMemoryStat, error) { } func VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) { - vm, _, err := fillFromMeminfoWithContext() + vm, _, err := fillFromMeminfoWithContext(ctx) if err != nil { return nil, err } @@ -49,15 +49,15 @@ func VirtualMemoryEx() (*VirtualMemoryExStat, error) { } func VirtualMemoryExWithContext(ctx context.Context) (*VirtualMemoryExStat, error) { - _, vmEx, err := fillFromMeminfoWithContext() + _, vmEx, err := fillFromMeminfoWithContext(ctx) if err != nil { return nil, err } return vmEx, nil } -func fillFromMeminfoWithContext() (*VirtualMemoryStat, *VirtualMemoryExStat, error) { - filename := common.HostProc("meminfo") +func fillFromMeminfoWithContext(ctx context.Context) (*VirtualMemoryStat, *VirtualMemoryExStat, error) { + filename := common.HostProcWithContext(ctx, "meminfo") lines, _ := common.ReadLines(filename) // flag if MemAvailable is in /proc/meminfo (kernel 3.14+) @@ -318,7 +318,7 @@ func fillFromMeminfoWithContext() (*VirtualMemoryStat, *VirtualMemoryExStat, err if !memavail { if activeFile && inactiveFile && sReclaimable { - ret.Available = calculateAvailVmem(ret, retEx) + ret.Available = calculateAvailVmem(ctx, ret, retEx) } else { ret.Available = ret.Cached + ret.Free } @@ -351,7 +351,7 @@ func SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) { } else { ret.UsedPercent = 0 } - filename := common.HostProc("vmstat") + filename := common.HostProcWithContext(ctx, "vmstat") lines, _ := common.ReadLines(filename) for _, l := range lines { fields := strings.Fields(l) @@ -403,10 +403,10 @@ func SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) { // calculateAvailVmem is a fallback under kernel 3.14 where /proc/meminfo does not provide // "MemAvailable:" column. It reimplements an algorithm from the link below // https://github.com/giampaolo/psutil/pull/890 -func calculateAvailVmem(ret *VirtualMemoryStat, retEx *VirtualMemoryExStat) uint64 { +func calculateAvailVmem(ctx context.Context, ret *VirtualMemoryStat, retEx *VirtualMemoryExStat) uint64 { var watermarkLow uint64 - fn := common.HostProc("zoneinfo") + fn := common.HostProcWithContext(ctx, "zoneinfo") lines, err := common.ReadLines(fn) if err != nil { return ret.Free + ret.Cached // fallback under kernel 2.6.13 @@ -458,18 +458,18 @@ func SwapDevices() ([]*SwapDevice, error) { } func SwapDevicesWithContext(ctx context.Context) ([]*SwapDevice, error) { - swapsFilePath := common.HostProc(swapsFilename) + swapsFilePath := common.HostProcWithContext(ctx, swapsFilename) f, err := os.Open(swapsFilePath) if err != nil { return nil, err } defer f.Close() - return parseSwapsFile(f) + return parseSwapsFile(ctx, f) } -func parseSwapsFile(r io.Reader) ([]*SwapDevice, error) { - swapsFilePath := common.HostProc(swapsFilename) +func parseSwapsFile(ctx context.Context, r io.Reader) ([]*SwapDevice, error) { + swapsFilePath := common.HostProcWithContext(ctx, swapsFilename) scanner := bufio.NewScanner(r) if !scanner.Scan() { if err := scanner.Err(); err != nil { diff --git a/vendor/github.com/shirou/gopsutil/v3/net/net_darwin.go b/vendor/github.com/shirou/gopsutil/v3/net/net_darwin.go index 4d2cfbcd8c..8a7b637443 100644 --- a/vendor/github.com/shirou/gopsutil/v3/net/net_darwin.go +++ b/vendor/github.com/shirou/gopsutil/v3/net/net_darwin.go @@ -259,7 +259,7 @@ func IOCountersByFile(pernic bool, filename string) ([]IOCountersStat, error) { } func IOCountersByFileWithContext(ctx context.Context, pernic bool, filename string) ([]IOCountersStat, error) { - return IOCounters(pernic) + return IOCountersWithContext(ctx, pernic) } func FilterCounters() ([]FilterStat, error) { diff --git a/vendor/github.com/shirou/gopsutil/v3/net/net_linux.go b/vendor/github.com/shirou/gopsutil/v3/net/net_linux.go index dd62d47916..de0ea73452 100644 --- a/vendor/github.com/shirou/gopsutil/v3/net/net_linux.go +++ b/vendor/github.com/shirou/gopsutil/v3/net/net_linux.go @@ -50,7 +50,7 @@ func IOCounters(pernic bool) ([]IOCountersStat, error) { } func IOCountersWithContext(ctx context.Context, pernic bool) ([]IOCountersStat, error) { - filename := common.HostProc("net/dev") + filename := common.HostProcWithContext(ctx, "net/dev") return IOCountersByFileWithContext(ctx, pernic, filename) } @@ -177,7 +177,7 @@ func ProtoCountersWithContext(ctx context.Context, protocols []string) ([]ProtoC protos[p] = true } - filename := common.HostProc("net/snmp") + filename := common.HostProcWithContext(ctx, "net/snmp") lines, err := common.ReadLines(filename) if err != nil { return nil, err @@ -230,8 +230,8 @@ func FilterCounters() ([]FilterStat, error) { } func FilterCountersWithContext(ctx context.Context) ([]FilterStat, error) { - countfile := common.HostProc("sys/net/netfilter/nf_conntrack_count") - maxfile := common.HostProc("sys/net/netfilter/nf_conntrack_max") + countfile := common.HostProcWithContext(ctx, "sys/net/netfilter/nf_conntrack_count") + maxfile := common.HostProcWithContext(ctx, "sys/net/netfilter/nf_conntrack_max") count, err := common.ReadInts(countfile) if err != nil { @@ -260,7 +260,7 @@ func ConntrackStats(percpu bool) ([]ConntrackStat, error) { // ConntrackStatsWithContext returns more detailed info about the conntrack table func ConntrackStatsWithContext(ctx context.Context, percpu bool) ([]ConntrackStat, error) { - return conntrackStatsFromFile(common.HostProc("net/stat/nf_conntrack"), percpu) + return conntrackStatsFromFile(common.HostProcWithContext(ctx, "net/stat/nf_conntrack"), percpu) } // conntrackStatsFromFile returns more detailed info about the conntrack table @@ -459,7 +459,7 @@ func connectionsPidMaxWithoutUidsWithContext(ctx context.Context, kind string, p if !ok { return nil, fmt.Errorf("invalid kind, %s", kind) } - root := common.HostProc() + root := common.HostProcWithContext(ctx) var err error var inodes map[string][]inodeMap if pid == 0 { @@ -531,7 +531,7 @@ func statsFromInodesWithContext(ctx context.Context, root string, pid int32, tma if !skipUids { // fetch process owner Real, effective, saved set, and filesystem UIDs proc := process{Pid: conn.Pid} - conn.Uids, _ = proc.getUids() + conn.Uids, _ = proc.getUids(ctx) } ret = append(ret, conn) @@ -599,7 +599,7 @@ func Pids() ([]int32, error) { func PidsWithContext(ctx context.Context) ([]int32, error) { var ret []int32 - d, err := os.Open(common.HostProc()) + d, err := os.Open(common.HostProcWithContext(ctx)) if err != nil { return nil, err } @@ -631,8 +631,8 @@ type process struct { } // Uids returns user ids of the process as a slice of the int -func (p *process) getUids() ([]int32, error) { - err := p.fillFromStatus() +func (p *process) getUids(ctx context.Context) ([]int32, error) { + err := p.fillFromStatus(ctx) if err != nil { return []int32{}, err } @@ -640,9 +640,9 @@ func (p *process) getUids() ([]int32, error) { } // Get status from /proc/(pid)/status -func (p *process) fillFromStatus() error { +func (p *process) fillFromStatus(ctx context.Context) error { pid := p.Pid - statPath := common.HostProc(strconv.Itoa(int(pid)), "status") + statPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "status") contents, err := ioutil.ReadFile(statPath) if err != nil { return err diff --git a/vendor/github.com/shirou/gopsutil/v3/process/process_darwin.go b/vendor/github.com/shirou/gopsutil/v3/process/process_darwin.go index 61b340b63f..176661cbd6 100644 --- a/vendor/github.com/shirou/gopsutil/v3/process/process_darwin.go +++ b/vendor/github.com/shirou/gopsutil/v3/process/process_darwin.go @@ -10,10 +10,11 @@ import ( "strconv" "strings" - "github.com/shirou/gopsutil/v3/internal/common" - "github.com/shirou/gopsutil/v3/net" "github.com/tklauser/go-sysconf" "golang.org/x/sys/unix" + + "github.com/shirou/gopsutil/v3/internal/common" + "github.com/shirou/gopsutil/v3/net" ) // copied from sys/sysctl.h @@ -81,8 +82,6 @@ func (p *Process) NameWithContext(ctx context.Context) (string, error) { extendedName := filepath.Base(cmdName) if strings.HasPrefix(extendedName, p.name) { name = extendedName - } else { - name = cmdName } } } diff --git a/vendor/github.com/shirou/gopsutil/v3/process/process_freebsd.go b/vendor/github.com/shirou/gopsutil/v3/process/process_freebsd.go index a123ccf9b9..85134b7ee6 100644 --- a/vendor/github.com/shirou/gopsutil/v3/process/process_freebsd.go +++ b/vendor/github.com/shirou/gopsutil/v3/process/process_freebsd.go @@ -55,8 +55,6 @@ func (p *Process) NameWithContext(ctx context.Context) (string, error) { extendedName := filepath.Base(cmdlineSlice[0]) if strings.HasPrefix(extendedName, p.name) { name = extendedName - } else { - name = cmdlineSlice[0] } } } diff --git a/vendor/github.com/shirou/gopsutil/v3/process/process_linux.go b/vendor/github.com/shirou/gopsutil/v3/process/process_linux.go index 6dbef4c2fc..37cb7ca44b 100644 --- a/vendor/github.com/shirou/gopsutil/v3/process/process_linux.go +++ b/vendor/github.com/shirou/gopsutil/v3/process/process_linux.go @@ -101,7 +101,7 @@ func (p *Process) TgidWithContext(ctx context.Context) (int32, error) { } func (p *Process) ExeWithContext(ctx context.Context) (string, error) { - return p.fillFromExeWithContext() + return p.fillFromExeWithContext(ctx) } func (p *Process) CmdlineWithContext(ctx context.Context) (string, error) { @@ -121,7 +121,7 @@ func (p *Process) createTimeWithContext(ctx context.Context) (int64, error) { } func (p *Process) CwdWithContext(ctx context.Context) (string, error) { - return p.fillFromCwdWithContext() + return p.fillFromCwdWithContext(ctx) } func (p *Process) StatusWithContext(ctx context.Context) ([]string, error) { @@ -135,7 +135,7 @@ func (p *Process) StatusWithContext(ctx context.Context) ([]string, error) { func (p *Process) ForegroundWithContext(ctx context.Context) (bool, error) { // see https://github.com/shirou/gopsutil/issues/596#issuecomment-432707831 for implementation details pid := p.Pid - statPath := common.HostProc(strconv.Itoa(int(pid)), "stat") + statPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "stat") contents, err := ioutil.ReadFile(statPath) if err != nil { return false, err @@ -203,7 +203,7 @@ func (p *Process) RlimitWithContext(ctx context.Context) ([]RlimitStat, error) { } func (p *Process) RlimitUsageWithContext(ctx context.Context, gatherUsed bool) ([]RlimitStat, error) { - rlimits, err := p.fillFromLimitsWithContext() + rlimits, err := p.fillFromLimitsWithContext(ctx) if !gatherUsed || err != nil { return rlimits, err } @@ -258,7 +258,7 @@ func (p *Process) RlimitUsageWithContext(ctx context.Context, gatherUsed bool) ( } func (p *Process) IOCountersWithContext(ctx context.Context) (*IOCountersStat, error) { - return p.fillFromIOWithContext() + return p.fillFromIOWithContext(ctx) } func (p *Process) NumCtxSwitchesWithContext(ctx context.Context) (*NumCtxSwitchesStat, error) { @@ -284,7 +284,7 @@ func (p *Process) NumThreadsWithContext(ctx context.Context) (int32, error) { func (p *Process) ThreadsWithContext(ctx context.Context) (map[int32]*cpu.TimesStat, error) { ret := make(map[int32]*cpu.TimesStat) - taskPath := common.HostProc(strconv.Itoa(int(p.Pid)), "task") + taskPath := common.HostProcWithContext(ctx, strconv.Itoa(int(p.Pid)), "task") tids, err := readPidsFromDir(taskPath) if err != nil { @@ -315,7 +315,7 @@ func (p *Process) CPUAffinityWithContext(ctx context.Context) ([]int32, error) { } func (p *Process) MemoryInfoWithContext(ctx context.Context) (*MemoryInfoStat, error) { - meminfo, _, err := p.fillFromStatmWithContext() + meminfo, _, err := p.fillFromStatmWithContext(ctx) if err != nil { return nil, err } @@ -323,7 +323,7 @@ func (p *Process) MemoryInfoWithContext(ctx context.Context) (*MemoryInfoStat, e } func (p *Process) MemoryInfoExWithContext(ctx context.Context) (*MemoryInfoExStat, error) { - _, memInfoEx, err := p.fillFromStatmWithContext() + _, memInfoEx, err := p.fillFromStatmWithContext(ctx) if err != nil { return nil, err } @@ -381,12 +381,12 @@ func (p *Process) ConnectionsMaxWithContext(ctx context.Context, max int) ([]net func (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]MemoryMapsStat, error) { pid := p.Pid var ret []MemoryMapsStat - smapsPath := common.HostProc(strconv.Itoa(int(pid)), "smaps") + smapsPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "smaps") if grouped { ret = make([]MemoryMapsStat, 1) // If smaps_rollup exists (require kernel >= 4.15), then we will use it // for pre-summed memory information for a process. - smapsRollupPath := common.HostProc(strconv.Itoa(int(pid)), "smaps_rollup") + smapsRollupPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "smaps_rollup") if _, err := os.Stat(smapsRollupPath); !os.IsNotExist(err) { smapsPath = smapsRollupPath } @@ -482,7 +482,7 @@ func (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]M } func (p *Process) EnvironWithContext(ctx context.Context) ([]string, error) { - environPath := common.HostProc(strconv.Itoa(int(p.Pid)), "environ") + environPath := common.HostProcWithContext(ctx, strconv.Itoa(int(p.Pid)), "environ") environContent, err := ioutil.ReadFile(environPath) if err != nil { @@ -508,9 +508,9 @@ func limitToUint(val string) (uint64, error) { } // Get num_fds from /proc/(pid)/limits -func (p *Process) fillFromLimitsWithContext() ([]RlimitStat, error) { +func (p *Process) fillFromLimitsWithContext(ctx context.Context) ([]RlimitStat, error) { pid := p.Pid - limitsFile := common.HostProc(strconv.Itoa(int(pid)), "limits") + limitsFile := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "limits") d, err := os.Open(limitsFile) if err != nil { return nil, err @@ -603,7 +603,7 @@ func (p *Process) fillFromLimitsWithContext() ([]RlimitStat, error) { // Get list of /proc/(pid)/fd files func (p *Process) fillFromfdListWithContext(ctx context.Context) (string, []string, error) { pid := p.Pid - statPath := common.HostProc(strconv.Itoa(int(pid)), "fd") + statPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "fd") d, err := os.Open(statPath) if err != nil { return statPath, []string{}, err @@ -643,9 +643,9 @@ func (p *Process) fillFromfdWithContext(ctx context.Context) (int32, []*OpenFile } // Get cwd from /proc/(pid)/cwd -func (p *Process) fillFromCwdWithContext() (string, error) { +func (p *Process) fillFromCwdWithContext(ctx context.Context) (string, error) { pid := p.Pid - cwdPath := common.HostProc(strconv.Itoa(int(pid)), "cwd") + cwdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "cwd") cwd, err := os.Readlink(cwdPath) if err != nil { return "", err @@ -654,9 +654,9 @@ func (p *Process) fillFromCwdWithContext() (string, error) { } // Get exe from /proc/(pid)/exe -func (p *Process) fillFromExeWithContext() (string, error) { +func (p *Process) fillFromExeWithContext(ctx context.Context) (string, error) { pid := p.Pid - exePath := common.HostProc(strconv.Itoa(int(pid)), "exe") + exePath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "exe") exe, err := os.Readlink(exePath) if err != nil { return "", err @@ -667,7 +667,7 @@ func (p *Process) fillFromExeWithContext() (string, error) { // Get cmdline from /proc/(pid)/cmdline func (p *Process) fillFromCmdlineWithContext(ctx context.Context) (string, error) { pid := p.Pid - cmdPath := common.HostProc(strconv.Itoa(int(pid)), "cmdline") + cmdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "cmdline") cmdline, err := ioutil.ReadFile(cmdPath) if err != nil { return "", err @@ -681,7 +681,7 @@ func (p *Process) fillFromCmdlineWithContext(ctx context.Context) (string, error func (p *Process) fillSliceFromCmdlineWithContext(ctx context.Context) ([]string, error) { pid := p.Pid - cmdPath := common.HostProc(strconv.Itoa(int(pid)), "cmdline") + cmdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "cmdline") cmdline, err := ioutil.ReadFile(cmdPath) if err != nil { return nil, err @@ -702,9 +702,9 @@ func (p *Process) fillSliceFromCmdlineWithContext(ctx context.Context) ([]string } // Get IO status from /proc/(pid)/io -func (p *Process) fillFromIOWithContext() (*IOCountersStat, error) { +func (p *Process) fillFromIOWithContext(ctx context.Context) (*IOCountersStat, error) { pid := p.Pid - ioPath := common.HostProc(strconv.Itoa(int(pid)), "io") + ioPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "io") ioline, err := ioutil.ReadFile(ioPath) if err != nil { return nil, err @@ -738,9 +738,9 @@ func (p *Process) fillFromIOWithContext() (*IOCountersStat, error) { } // Get memory info from /proc/(pid)/statm -func (p *Process) fillFromStatmWithContext() (*MemoryInfoStat, *MemoryInfoExStat, error) { +func (p *Process) fillFromStatmWithContext(ctx context.Context) (*MemoryInfoStat, *MemoryInfoExStat, error) { pid := p.Pid - memPath := common.HostProc(strconv.Itoa(int(pid)), "statm") + memPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "statm") contents, err := ioutil.ReadFile(memPath) if err != nil { return nil, nil, err @@ -791,7 +791,7 @@ func (p *Process) fillFromStatmWithContext() (*MemoryInfoStat, *MemoryInfoExStat // Get name from /proc/(pid)/comm or /proc/(pid)/status func (p *Process) fillNameWithContext(ctx context.Context) error { - err := p.fillFromCommWithContext() + err := p.fillFromCommWithContext(ctx) if err == nil && p.name != "" && len(p.name) < 15 { return nil } @@ -799,9 +799,9 @@ func (p *Process) fillNameWithContext(ctx context.Context) error { } // Get name from /proc/(pid)/comm -func (p *Process) fillFromCommWithContext() error { +func (p *Process) fillFromCommWithContext(ctx context.Context) error { pid := p.Pid - statPath := common.HostProc(strconv.Itoa(int(pid)), "comm") + statPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "comm") contents, err := ioutil.ReadFile(statPath) if err != nil { return err @@ -818,7 +818,7 @@ func (p *Process) fillFromStatus() error { func (p *Process) fillFromStatusWithContext(ctx context.Context) error { pid := p.Pid - statPath := common.HostProc(strconv.Itoa(int(pid)), "status") + statPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "status") contents, err := ioutil.ReadFile(statPath) if err != nil { return err @@ -845,8 +845,6 @@ func (p *Process) fillFromStatusWithContext(ctx context.Context) error { extendedName := filepath.Base(cmdlineSlice[0]) if strings.HasPrefix(extendedName, p.name) { p.name = extendedName - } else { - p.name = cmdlineSlice[0] } } } @@ -1023,9 +1021,9 @@ func (p *Process) fillFromTIDStatWithContext(ctx context.Context, tid int32) (ui var statPath string if tid == -1 { - statPath = common.HostProc(strconv.Itoa(int(pid)), "stat") + statPath = common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "stat") } else { - statPath = common.HostProc(strconv.Itoa(int(pid)), "task", strconv.Itoa(int(tid)), "stat") + statPath = common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "task", strconv.Itoa(int(tid)), "stat") } contents, err := ioutil.ReadFile(statPath) @@ -1129,7 +1127,7 @@ func (p *Process) fillFromStatWithContext(ctx context.Context) (uint64, int32, * } func pidsWithContext(ctx context.Context) ([]int32, error) { - return readPidsFromDir(common.HostProc()) + return readPidsFromDir(common.HostProcWithContext(ctx)) } func ProcessesWithContext(ctx context.Context) ([]*Process, error) { diff --git a/vendor/github.com/shirou/gopsutil/v3/process/process_openbsd.go b/vendor/github.com/shirou/gopsutil/v3/process/process_openbsd.go index cbb1a77f69..a58c5eb113 100644 --- a/vendor/github.com/shirou/gopsutil/v3/process/process_openbsd.go +++ b/vendor/github.com/shirou/gopsutil/v3/process/process_openbsd.go @@ -60,8 +60,6 @@ func (p *Process) NameWithContext(ctx context.Context) (string, error) { extendedName := filepath.Base(cmdlineSlice[0]) if strings.HasPrefix(extendedName, p.name) { name = extendedName - } else { - name = cmdlineSlice[0] } } } diff --git a/vendor/github.com/shirou/gopsutil/v3/process/process_posix.go b/vendor/github.com/shirou/gopsutil/v3/process/process_posix.go index 7bd9b05600..a01f9ecfc0 100644 --- a/vendor/github.com/shirou/gopsutil/v3/process/process_posix.go +++ b/vendor/github.com/shirou/gopsutil/v3/process/process_posix.go @@ -109,8 +109,8 @@ func PidExistsWithContext(ctx context.Context, pid int32) (bool, error) { return false, err } - if isMount(common.HostProc()) { // if //proc exists and is mounted, check if //proc/ folder exists - _, err := os.Stat(common.HostProc(strconv.Itoa(int(pid)))) + if isMount(common.HostProcWithContext(ctx)) { // if //proc exists and is mounted, check if //proc/ folder exists + _, err := os.Stat(common.HostProcWithContext(ctx, strconv.Itoa(int(pid)))) if os.IsNotExist(err) { return false, nil } diff --git a/vendor/github.com/shirou/gopsutil/v3/process/process_solaris.go b/vendor/github.com/shirou/gopsutil/v3/process/process_solaris.go index 4f10a67bc6..ad1c3cfc19 100644 --- a/vendor/github.com/shirou/gopsutil/v3/process/process_solaris.go +++ b/vendor/github.com/shirou/gopsutil/v3/process/process_solaris.go @@ -30,7 +30,7 @@ type MemoryMapsStat struct { type MemoryInfoExStat struct{} func pidsWithContext(ctx context.Context) ([]int32, error) { - return readPidsFromDir(common.HostProc()) + return readPidsFromDir(common.HostProcWithContext(ctx)) } func ProcessesWithContext(ctx context.Context) ([]*Process, error) { @@ -199,7 +199,7 @@ func (p *Process) EnvironWithContext(ctx context.Context) ([]string, error) { func (p *Process) fillFromfdListWithContext(ctx context.Context) (string, []string, error) { pid := p.Pid - statPath := common.HostProc(strconv.Itoa(int(pid)), "fd") + statPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "fd") d, err := os.Open(statPath) if err != nil { return statPath, []string{}, err @@ -211,7 +211,7 @@ func (p *Process) fillFromfdListWithContext(ctx context.Context) (string, []stri func (p *Process) fillFromPathCwdWithContext(ctx context.Context) (string, error) { pid := p.Pid - cwdPath := common.HostProc(strconv.Itoa(int(pid)), "path", "cwd") + cwdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "path", "cwd") cwd, err := os.Readlink(cwdPath) if err != nil { return "", err @@ -221,7 +221,7 @@ func (p *Process) fillFromPathCwdWithContext(ctx context.Context) (string, error func (p *Process) fillFromPathAOutWithContext(ctx context.Context) (string, error) { pid := p.Pid - cwdPath := common.HostProc(strconv.Itoa(int(pid)), "path", "a.out") + cwdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "path", "a.out") exe, err := os.Readlink(cwdPath) if err != nil { return "", err @@ -231,7 +231,7 @@ func (p *Process) fillFromPathAOutWithContext(ctx context.Context) (string, erro func (p *Process) fillFromExecnameWithContext(ctx context.Context) (string, error) { pid := p.Pid - execNamePath := common.HostProc(strconv.Itoa(int(pid)), "execname") + execNamePath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "execname") exe, err := ioutil.ReadFile(execNamePath) if err != nil { return "", err @@ -241,7 +241,7 @@ func (p *Process) fillFromExecnameWithContext(ctx context.Context) (string, erro func (p *Process) fillFromCmdlineWithContext(ctx context.Context) (string, error) { pid := p.Pid - cmdPath := common.HostProc(strconv.Itoa(int(pid)), "cmdline") + cmdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "cmdline") cmdline, err := ioutil.ReadFile(cmdPath) if err != nil { return "", err @@ -258,7 +258,7 @@ func (p *Process) fillFromCmdlineWithContext(ctx context.Context) (string, error func (p *Process) fillSliceFromCmdlineWithContext(ctx context.Context) ([]string, error) { pid := p.Pid - cmdPath := common.HostProc(strconv.Itoa(int(pid)), "cmdline") + cmdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), "cmdline") cmdline, err := ioutil.ReadFile(cmdPath) if err != nil { return nil, err diff --git a/vendor/github.com/skycoin/skywire-utilities/pkg/httputil/health.go b/vendor/github.com/skycoin/skywire-utilities/pkg/httputil/health.go index 1249324700..6963bf2da7 100644 --- a/vendor/github.com/skycoin/skywire-utilities/pkg/httputil/health.go +++ b/vendor/github.com/skycoin/skywire-utilities/pkg/httputil/health.go @@ -15,6 +15,7 @@ var path = "/health" type HealthCheckResponse struct { BuildInfo *buildinfo.Info `json:"build_info,omitempty"` StartedAt time.Time `json:"started_at"` + DmsgAddr string `json:"dmsg_address,omitempty"` } // GetServiceHealth gets the response from the given service url diff --git a/vendor/github.com/stretchr/objx/README.md b/vendor/github.com/stretchr/objx/README.md index 246660b21a..736e1eb5a5 100644 --- a/vendor/github.com/stretchr/objx/README.md +++ b/vendor/github.com/stretchr/objx/README.md @@ -4,20 +4,20 @@ [![Maintainability](https://api.codeclimate.com/v1/badges/1d64bc6c8474c2074f2b/maintainability)](https://codeclimate.com/github/stretchr/objx/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/1d64bc6c8474c2074f2b/test_coverage)](https://codeclimate.com/github/stretchr/objx/test_coverage) [![Sourcegraph](https://sourcegraph.com/github.com/stretchr/objx/-/badge.svg)](https://sourcegraph.com/github.com/stretchr/objx) -[![GoDoc](https://godoc.org/github.com/stretchr/objx?status.svg)](https://godoc.org/github.com/stretchr/objx) +[![GoDoc](https://pkg.go.dev/badge/github.com/stretchr/objx?utm_source=godoc)](https://pkg.go.dev/github.com/stretchr/objx) Objx - Go package for dealing with maps, slices, JSON and other data. Get started: - Install Objx with [one line of code](#installation), or [update it with another](#staying-up-to-date) -- Check out the API Documentation http://godoc.org/github.com/stretchr/objx +- Check out the API Documentation http://pkg.go.dev/github.com/stretchr/objx ## Overview Objx provides the `objx.Map` type, which is a `map[string]interface{}` that exposes a powerful `Get` method (among others) that allows you to easily and quickly get access to data within the map, without having to worry too much about type assertions, missing data, default values etc. ### Pattern -Objx uses a preditable pattern to make access data from within `map[string]interface{}` easy. Call one of the `objx.` functions to create your `objx.Map` to get going: +Objx uses a predictable pattern to make access data from within `map[string]interface{}` easy. Call one of the `objx.` functions to create your `objx.Map` to get going: m, err := objx.FromJSON(json) @@ -74,7 +74,7 @@ To update Objx to the latest version, run: go get -u github.com/stretchr/objx ### Supported go versions -We support the lastest three major Go versions, which are 1.10, 1.11 and 1.12 at the moment. +We currently support the most recent major Go versions from 1.13 onward. ## Contributing Please feel free to submit issues, fork the repository and send pull requests! diff --git a/vendor/github.com/stretchr/objx/Taskfile.yml b/vendor/github.com/stretchr/objx/Taskfile.yml index 7746f516da..39f49d5a56 100644 --- a/vendor/github.com/stretchr/objx/Taskfile.yml +++ b/vendor/github.com/stretchr/objx/Taskfile.yml @@ -1,8 +1,5 @@ version: '2' -env: - GOFLAGS: -mod=vendor - tasks: default: deps: [test] diff --git a/vendor/github.com/stretchr/objx/accessors.go b/vendor/github.com/stretchr/objx/accessors.go index 4c60455886..72f1d1c1ce 100644 --- a/vendor/github.com/stretchr/objx/accessors.go +++ b/vendor/github.com/stretchr/objx/accessors.go @@ -14,17 +14,17 @@ const ( // For example, `location.address.city` PathSeparator string = "." - // arrayAccesRegexString is the regex used to extract the array number + // arrayAccessRegexString is the regex used to extract the array number // from the access path - arrayAccesRegexString = `^(.+)\[([0-9]+)\]$` + arrayAccessRegexString = `^(.+)\[([0-9]+)\]$` // mapAccessRegexString is the regex used to extract the map key // from the access path mapAccessRegexString = `^([^\[]*)\[([^\]]+)\](.*)$` ) -// arrayAccesRegex is the compiled arrayAccesRegexString -var arrayAccesRegex = regexp.MustCompile(arrayAccesRegexString) +// arrayAccessRegex is the compiled arrayAccessRegexString +var arrayAccessRegex = regexp.MustCompile(arrayAccessRegexString) // mapAccessRegex is the compiled mapAccessRegexString var mapAccessRegex = regexp.MustCompile(mapAccessRegexString) @@ -37,11 +37,11 @@ var mapAccessRegex = regexp.MustCompile(mapAccessRegexString) // // Get can only operate directly on map[string]interface{} and []interface. // -// Example +// # Example // // To access the title of the third chapter of the second book, do: // -// o.Get("books[1].chapters[2].title") +// o.Get("books[1].chapters[2].title") func (m Map) Get(selector string) *Value { rawObj := access(m, selector, nil, false) return &Value{data: rawObj} @@ -52,26 +52,26 @@ func (m Map) Get(selector string) *Value { // // Set can only operate directly on map[string]interface{} and []interface // -// Example +// # Example // // To set the title of the third chapter of the second book, do: // -// o.Set("books[1].chapters[2].title","Time to Go") +// o.Set("books[1].chapters[2].title","Time to Go") func (m Map) Set(selector string, value interface{}) Map { access(m, selector, value, true) return m } -// getIndex returns the index, which is hold in s by two braches. -// It also returns s withour the index part, e.g. name[1] will return (1, name). +// getIndex returns the index, which is hold in s by two branches. +// It also returns s without the index part, e.g. name[1] will return (1, name). // If no index is found, -1 is returned func getIndex(s string) (int, string) { - arrayMatches := arrayAccesRegex.FindStringSubmatch(s) + arrayMatches := arrayAccessRegex.FindStringSubmatch(s) if len(arrayMatches) > 0 { // Get the key into the map selector := arrayMatches[1] // Get the index into the array at the key - // We know this cannt fail because arrayMatches[2] is an int for sure + // We know this can't fail because arrayMatches[2] is an int for sure index, _ := strconv.Atoi(arrayMatches[2]) return index, selector } diff --git a/vendor/github.com/stretchr/objx/conversions.go b/vendor/github.com/stretchr/objx/conversions.go index 080aa46e47..01c63d7d3b 100644 --- a/vendor/github.com/stretchr/objx/conversions.go +++ b/vendor/github.com/stretchr/objx/conversions.go @@ -15,7 +15,7 @@ import ( const SignatureSeparator = "_" // URLValuesSliceKeySuffix is the character that is used to -// specify a suffic for slices parsed by URLValues. +// specify a suffix for slices parsed by URLValues. // If the suffix is set to "[i]", then the index of the slice // is used in place of i // Ex: Suffix "[]" would have the form a[]=b&a[]=c @@ -30,7 +30,7 @@ const ( ) // SetURLValuesSliceKeySuffix sets the character that is used to -// specify a suffic for slices parsed by URLValues. +// specify a suffix for slices parsed by URLValues. // If the suffix is set to "[i]", then the index of the slice // is used in place of i // Ex: Suffix "[]" would have the form a[]=b&a[]=c diff --git a/vendor/github.com/stretchr/objx/doc.go b/vendor/github.com/stretchr/objx/doc.go index 6d6af1a83a..b170af74b3 100644 --- a/vendor/github.com/stretchr/objx/doc.go +++ b/vendor/github.com/stretchr/objx/doc.go @@ -1,19 +1,19 @@ /* -Objx - Go package for dealing with maps, slices, JSON and other data. +Package objx provides utilities for dealing with maps, slices, JSON and other data. -Overview +# Overview Objx provides the `objx.Map` type, which is a `map[string]interface{}` that exposes a powerful `Get` method (among others) that allows you to easily and quickly get access to data within the map, without having to worry too much about type assertions, missing data, default values etc. -Pattern +# Pattern -Objx uses a preditable pattern to make access data from within `map[string]interface{}` easy. +Objx uses a predictable pattern to make access data from within `map[string]interface{}` easy. Call one of the `objx.` functions to create your `objx.Map` to get going: - m, err := objx.FromJSON(json) + m, err := objx.FromJSON(json) NOTE: Any methods or functions with the `Must` prefix will panic if something goes wrong, the rest will be optimistic and try to figure things out without panicking. @@ -21,46 +21,46 @@ the rest will be optimistic and try to figure things out without panicking. Use `Get` to access the value you're interested in. You can use dot and array notation too: - m.Get("places[0].latlng") + m.Get("places[0].latlng") Once you have sought the `Value` you're interested in, you can use the `Is*` methods to determine its type. - if m.Get("code").IsStr() { // Your code... } + if m.Get("code").IsStr() { // Your code... } Or you can just assume the type, and use one of the strong type methods to extract the real value: - m.Get("code").Int() + m.Get("code").Int() If there's no value there (or if it's the wrong type) then a default value will be returned, or you can be explicit about the default value. - Get("code").Int(-1) + Get("code").Int(-1) If you're dealing with a slice of data as a value, Objx provides many useful methods for iterating, manipulating and selecting that data. You can find out more by exploring the index below. -Reading data +# Reading data A simple example of how to use Objx: - // Use MustFromJSON to make an objx.Map from some JSON - m := objx.MustFromJSON(`{"name": "Mat", "age": 30}`) + // Use MustFromJSON to make an objx.Map from some JSON + m := objx.MustFromJSON(`{"name": "Mat", "age": 30}`) - // Get the details - name := m.Get("name").Str() - age := m.Get("age").Int() + // Get the details + name := m.Get("name").Str() + age := m.Get("age").Int() - // Get their nickname (or use their name if they don't have one) - nickname := m.Get("nickname").Str(name) + // Get their nickname (or use their name if they don't have one) + nickname := m.Get("nickname").Str(name) -Ranging +# Ranging Since `objx.Map` is a `map[string]interface{}` you can treat it as such. For example, to `range` the data, do what you would expect: - m := objx.MustFromJSON(json) - for key, value := range m { - // Your code... - } + m := objx.MustFromJSON(json) + for key, value := range m { + // Your code... + } */ package objx diff --git a/vendor/github.com/stretchr/objx/map.go b/vendor/github.com/stretchr/objx/map.go index a64712a08b..ab9f9ae67c 100644 --- a/vendor/github.com/stretchr/objx/map.go +++ b/vendor/github.com/stretchr/objx/map.go @@ -47,17 +47,16 @@ func New(data interface{}) Map { // // The arguments follow a key, value pattern. // -// // Returns nil if any key argument is non-string or if there are an odd number of arguments. // -// Example +// # Example // // To easily create Maps: // -// m := objx.MSI("name", "Mat", "age", 29, "subobj", objx.MSI("active", true)) +// m := objx.MSI("name", "Mat", "age", 29, "subobj", objx.MSI("active", true)) // -// // creates an Map equivalent to -// m := objx.Map{"name": "Mat", "age": 29, "subobj": objx.Map{"active": true}} +// // creates an Map equivalent to +// m := objx.Map{"name": "Mat", "age": 29, "subobj": objx.Map{"active": true}} func MSI(keyAndValuePairs ...interface{}) Map { newMap := Map{} keyAndValuePairsLen := len(keyAndValuePairs) diff --git a/vendor/github.com/tklauser/go-sysconf/.cirrus.yml b/vendor/github.com/tklauser/go-sysconf/.cirrus.yml index 6be2c35483..1b27f19628 100644 --- a/vendor/github.com/tklauser/go-sysconf/.cirrus.yml +++ b/vendor/github.com/tklauser/go-sysconf/.cirrus.yml @@ -1,6 +1,6 @@ env: CIRRUS_CLONE_DEPTH: 1 - GO_VERSION: go1.19.1 + GO_VERSION: go1.20 freebsd_12_task: freebsd_instance: diff --git a/vendor/github.com/tklauser/go-sysconf/sysconf_darwin.go b/vendor/github.com/tklauser/go-sysconf/sysconf_darwin.go index 4a5197b2fc..3f5d83f692 100644 --- a/vendor/github.com/tklauser/go-sysconf/sysconf_darwin.go +++ b/vendor/github.com/tklauser/go-sysconf/sysconf_darwin.go @@ -5,6 +5,10 @@ package sysconf import ( + "strconv" + "strings" + "sync" + "golang.org/x/sys/unix" ) @@ -14,8 +18,14 @@ const ( _SYMLOOP_MAX = _MAXSYMLINKS ) -// sysconf implements sysconf(3) as in the Darwin libc, version 1244.30.3 -// (derived from the FreeBSD libc). +var uname struct { + sync.Once + macOSMajor int +} + +// sysconf implements sysconf(4) as in the Darwin libc (derived from the FreeBSD +// libc), version 1534.81.1. +// See https://github.com/apple-oss-distributions/Libc/tree/Libc-1534.81.1. func sysconf(name int) (int64, error) { switch name { case SC_AIO_LISTIO_MAX: @@ -54,12 +64,16 @@ func sysconf(name int) (int64, error) { return sysctl32("kern.ngroups"), nil case SC_OPEN_MAX, SC_STREAM_MAX: var rlim unix.Rlimit - if err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlim); err == nil { - if rlim.Cur != unix.RLIM_INFINITY { - return int64(rlim.Cur), nil - } + if err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlim); err != nil { + return -1, nil } - return -1, nil + if rlim.Cur > unix.RLIM_INFINITY { + return -1, nil + } + if rlim.Cur > _LONG_MAX { + return -1, unix.EOVERFLOW + } + return int64(rlim.Cur), nil case SC_RTSIG_MAX: return -1, nil case SC_SEM_NSEMS_MAX: @@ -126,7 +140,22 @@ func sysconf(name int) (int64, error) { } return _POSIX_SEMAPHORES, nil case SC_SPAWN: - return _POSIX_SPAWN, nil + uname.Once.Do(func() { + var u unix.Utsname + err := unix.Uname(&u) + if err != nil { + return + } + rel := unix.ByteSliceToString(u.Release[:]) + ver := strings.Split(rel, ".") + maj, _ := strconv.Atoi(ver[0]) + uname.macOSMajor = maj + }) + if uname.macOSMajor < 22 { + return -1, nil + } + // macOS 13 (Ventura) and later + return 200112, nil case SC_SPIN_LOCKS: return _POSIX_SPIN_LOCKS, nil case SC_SPORADIC_SERVER: diff --git a/vendor/github.com/tklauser/go-sysconf/zsysconf_defs_darwin.go b/vendor/github.com/tklauser/go-sysconf/zsysconf_defs_darwin.go index 6fa7fde8af..6fadf3db1f 100644 --- a/vendor/github.com/tklauser/go-sysconf/zsysconf_defs_darwin.go +++ b/vendor/github.com/tklauser/go-sysconf/zsysconf_defs_darwin.go @@ -181,7 +181,6 @@ const ( _POSIX_SHARED_MEMORY_OBJECTS = -0x1 _POSIX_SHELL = 0x30db0 _POSIX_SIGQUEUE_MAX = 0x20 - _POSIX_SPAWN = -0x1 _POSIX_SPIN_LOCKS = -0x1 _POSIX_SPORADIC_SERVER = -0x1 _POSIX_SS_REPL_MAX = 0x4 @@ -248,7 +247,8 @@ const ( const ( _CHAR_BIT = 0x8 - _INT_MAX = 0x7fffffff + _INT_MAX = 0x7fffffff + _LONG_MAX = 0x7fffffffffffffff sizeofOffT = 0x8 ) diff --git a/vendor/github.com/zcalusic/sysinfo/os.go b/vendor/github.com/zcalusic/sysinfo/os.go index f6b716dfec..82486eda75 100644 --- a/vendor/github.com/zcalusic/sysinfo/os.go +++ b/vendor/github.com/zcalusic/sysinfo/os.go @@ -25,7 +25,7 @@ var ( reID = regexp.MustCompile(`^ID=(.*)$`) reVersionID = regexp.MustCompile(`^VERSION_ID=(.*)$`) reUbuntu = regexp.MustCompile(`[\( ]([\d\.]+)`) - reCentOS = regexp.MustCompile(`^CentOS( Linux)? release ([\d\.]+) `) + reCentOS = regexp.MustCompile(`^CentOS( Linux)? release ([\d\.]+)`) reRedHat = regexp.MustCompile(`[\( ]([\d\.]+)`) ) diff --git a/vendor/github.com/zcalusic/sysinfo/version.go b/vendor/github.com/zcalusic/sysinfo/version.go index 36ed533fcf..1a9bd4b63b 100644 --- a/vendor/github.com/zcalusic/sysinfo/version.go +++ b/vendor/github.com/zcalusic/sysinfo/version.go @@ -5,4 +5,4 @@ package sysinfo // Version of the sysinfo library. -const Version = "1.0.0" +const Version = "1.0.1" diff --git a/vendor/golang.org/x/arch/x86/x86asm/plan9x.go b/vendor/golang.org/x/arch/x86/x86asm/plan9x.go index de417946a4..9e866d87b6 100644 --- a/vendor/golang.org/x/arch/x86/x86asm/plan9x.go +++ b/vendor/golang.org/x/arch/x86/x86asm/plan9x.go @@ -83,6 +83,12 @@ func GoSyntax(inst Inst, pc uint64, symname SymLookup) string { } } + if inst.Op == CMP { + // Use reads-left-to-right ordering for comparisons. + // See issue 60920. + args[0], args[1] = args[1], args[0] + } + if args != nil { op += " " + strings.Join(args, ", ") } diff --git a/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go b/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go index 2681af35af..150f887e7a 100644 --- a/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go +++ b/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go @@ -13,7 +13,7 @@ import ( "sync" ) -// Regexp is a wrapper around regexp.Regexp, where the underlying regexp will be +// Regexp is a wrapper around [regexp.Regexp], where the underlying regexp will be // compiled the first time it is needed. type Regexp struct { str string diff --git a/vendor/golang.org/x/mod/modfile/read.go b/vendor/golang.org/x/mod/modfile/read.go index a503bc2105..5b5bb5e115 100644 --- a/vendor/golang.org/x/mod/modfile/read.go +++ b/vendor/golang.org/x/mod/modfile/read.go @@ -65,7 +65,7 @@ type Comments struct { } // Comment returns the receiver. This isn't useful by itself, but -// a Comments struct is embedded into all the expression +// a [Comments] struct is embedded into all the expression // implementation types, and this gives each of those a Comment // method to satisfy the Expr interface. func (c *Comments) Comment() *Comments { diff --git a/vendor/golang.org/x/mod/modfile/rule.go b/vendor/golang.org/x/mod/modfile/rule.go index b4dd7997b6..930b6c59bc 100644 --- a/vendor/golang.org/x/mod/modfile/rule.go +++ b/vendor/golang.org/x/mod/modfile/rule.go @@ -5,17 +5,17 @@ // Package modfile implements a parser and formatter for go.mod files. // // The go.mod syntax is described in -// https://golang.org/cmd/go/#hdr-The_go_mod_file. +// https://pkg.go.dev/cmd/go/#hdr-The_go_mod_file. // -// The Parse and ParseLax functions both parse a go.mod file and return an +// The [Parse] and [ParseLax] functions both parse a go.mod file and return an // abstract syntax tree. ParseLax ignores unknown statements and may be used to // parse go.mod files that may have been developed with newer versions of Go. // -// The File struct returned by Parse and ParseLax represent an abstract -// go.mod file. File has several methods like AddNewRequire and DropReplace -// that can be used to programmatically edit a file. +// The [File] struct returned by Parse and ParseLax represent an abstract +// go.mod file. File has several methods like [File.AddNewRequire] and +// [File.DropReplace] that can be used to programmatically edit a file. // -// The Format function formats a File back to a byte slice which can be +// The [Format] function formats a File back to a byte slice which can be // written to a file. package modfile @@ -226,7 +226,7 @@ var dontFixRetract VersionFixer = func(_, vers string) (string, error) { // data is the content of the file. // // fix is an optional function that canonicalizes module versions. -// If fix is nil, all module versions must be canonical (module.CanonicalVersion +// If fix is nil, all module versions must be canonical ([module.CanonicalVersion] // must return the same string). func Parse(file string, data []byte, fix VersionFixer) (*File, error) { return parseToFile(file, data, fix, true) @@ -923,7 +923,7 @@ func (f *File) Format() ([]byte, error) { } // Cleanup cleans up the file f after any edit operations. -// To avoid quadratic behavior, modifications like DropRequire +// To avoid quadratic behavior, modifications like [File.DropRequire] // clear the entry but do not remove it from the slice. // Cleanup cleans out all the cleared entries. func (f *File) Cleanup() { @@ -1075,8 +1075,8 @@ func (f *File) AddNewRequire(path, vers string, indirect bool) { // The requirements in req must specify at most one distinct version for each // module path. // -// If any existing requirements may be removed, the caller should call Cleanup -// after all edits are complete. +// If any existing requirements may be removed, the caller should call +// [File.Cleanup] after all edits are complete. func (f *File) SetRequire(req []*Require) { type elem struct { version string diff --git a/vendor/golang.org/x/mod/modfile/work.go b/vendor/golang.org/x/mod/modfile/work.go index 75dc1c5491..d7b99376eb 100644 --- a/vendor/golang.org/x/mod/modfile/work.go +++ b/vendor/golang.org/x/mod/modfile/work.go @@ -34,7 +34,7 @@ type Use struct { // data is the content of the file. // // fix is an optional function that canonicalizes module versions. -// If fix is nil, all module versions must be canonical (module.CanonicalVersion +// If fix is nil, all module versions must be canonical ([module.CanonicalVersion] // must return the same string). func ParseWork(file string, data []byte, fix VersionFixer) (*WorkFile, error) { fs, err := parse(file, data) @@ -83,7 +83,7 @@ func ParseWork(file string, data []byte, fix VersionFixer) (*WorkFile, error) { } // Cleanup cleans up the file f after any edit operations. -// To avoid quadratic behavior, modifications like DropRequire +// To avoid quadratic behavior, modifications like [WorkFile.DropRequire] // clear the entry but do not remove it from the slice. // Cleanup cleans out all the cleared entries. func (f *WorkFile) Cleanup() { diff --git a/vendor/golang.org/x/mod/module/module.go b/vendor/golang.org/x/mod/module/module.go index e9dec6e614..2a364b229b 100644 --- a/vendor/golang.org/x/mod/module/module.go +++ b/vendor/golang.org/x/mod/module/module.go @@ -4,7 +4,7 @@ // Package module defines the module.Version type along with support code. // -// The module.Version type is a simple Path, Version pair: +// The [module.Version] type is a simple Path, Version pair: // // type Version struct { // Path string @@ -12,7 +12,7 @@ // } // // There are no restrictions imposed directly by use of this structure, -// but additional checking functions, most notably Check, verify that +// but additional checking functions, most notably [Check], verify that // a particular path, version pair is valid. // // # Escaped Paths @@ -140,7 +140,7 @@ type ModuleError struct { Err error } -// VersionError returns a ModuleError derived from a Version and error, +// VersionError returns a [ModuleError] derived from a [Version] and error, // or err itself if it is already such an error. func VersionError(v Version, err error) error { var mErr *ModuleError @@ -169,7 +169,7 @@ func (e *ModuleError) Unwrap() error { return e.Err } // An InvalidVersionError indicates an error specific to a version, with the // module path unknown or specified externally. // -// A ModuleError may wrap an InvalidVersionError, but an InvalidVersionError +// A [ModuleError] may wrap an InvalidVersionError, but an InvalidVersionError // must not wrap a ModuleError. type InvalidVersionError struct { Version string @@ -193,8 +193,8 @@ func (e *InvalidVersionError) Error() string { func (e *InvalidVersionError) Unwrap() error { return e.Err } // An InvalidPathError indicates a module, import, or file path doesn't -// satisfy all naming constraints. See CheckPath, CheckImportPath, -// and CheckFilePath for specific restrictions. +// satisfy all naming constraints. See [CheckPath], [CheckImportPath], +// and [CheckFilePath] for specific restrictions. type InvalidPathError struct { Kind string // "module", "import", or "file" Path string @@ -294,7 +294,7 @@ func fileNameOK(r rune) bool { } // CheckPath checks that a module path is valid. -// A valid module path is a valid import path, as checked by CheckImportPath, +// A valid module path is a valid import path, as checked by [CheckImportPath], // with three additional constraints. // First, the leading path element (up to the first slash, if any), // by convention a domain name, must contain only lower-case ASCII letters, @@ -380,7 +380,7 @@ const ( // checkPath returns an error describing why the path is not valid. // Because these checks apply to module, import, and file paths, // and because other checks may be applied, the caller is expected to wrap -// this error with InvalidPathError. +// this error with [InvalidPathError]. func checkPath(path string, kind pathKind) error { if !utf8.ValidString(path) { return fmt.Errorf("invalid UTF-8") @@ -532,7 +532,7 @@ var badWindowsNames = []string{ // they require ".vN" instead of "/vN", and for all N, not just N >= 2. // SplitPathVersion returns with ok = false when presented with // a path whose last path element does not satisfy the constraints -// applied by CheckPath, such as "example.com/pkg/v1" or "example.com/pkg/v1.2". +// applied by [CheckPath], such as "example.com/pkg/v1" or "example.com/pkg/v1.2". func SplitPathVersion(path string) (prefix, pathMajor string, ok bool) { if strings.HasPrefix(path, "gopkg.in/") { return splitGopkgIn(path) @@ -582,7 +582,7 @@ func splitGopkgIn(path string) (prefix, pathMajor string, ok bool) { // MatchPathMajor reports whether the semantic version v // matches the path major version pathMajor. // -// MatchPathMajor returns true if and only if CheckPathMajor returns nil. +// MatchPathMajor returns true if and only if [CheckPathMajor] returns nil. func MatchPathMajor(v, pathMajor string) bool { return CheckPathMajor(v, pathMajor) == nil } @@ -622,7 +622,7 @@ func CheckPathMajor(v, pathMajor string) error { // PathMajorPrefix returns the major-version tag prefix implied by pathMajor. // An empty PathMajorPrefix allows either v0 or v1. // -// Note that MatchPathMajor may accept some versions that do not actually begin +// Note that [MatchPathMajor] may accept some versions that do not actually begin // with this prefix: namely, it accepts a 'v0.0.0-' prefix for a '.v1' // pathMajor, even though that pathMajor implies 'v1' tagging. func PathMajorPrefix(pathMajor string) string { @@ -643,7 +643,7 @@ func PathMajorPrefix(pathMajor string) string { } // CanonicalVersion returns the canonical form of the version string v. -// It is the same as semver.Canonical(v) except that it preserves the special build suffix "+incompatible". +// It is the same as [semver.Canonical] except that it preserves the special build suffix "+incompatible". func CanonicalVersion(v string) string { cv := semver.Canonical(v) if semver.Build(v) == "+incompatible" { @@ -652,8 +652,8 @@ func CanonicalVersion(v string) string { return cv } -// Sort sorts the list by Path, breaking ties by comparing Version fields. -// The Version fields are interpreted as semantic versions (using semver.Compare) +// Sort sorts the list by Path, breaking ties by comparing [Version] fields. +// The Version fields are interpreted as semantic versions (using [semver.Compare]) // optionally followed by a tie-breaking suffix introduced by a slash character, // like in "v0.0.1/go.mod". func Sort(list []Version) { @@ -793,7 +793,7 @@ func unescapeString(escaped string) (string, bool) { } // MatchPrefixPatterns reports whether any path prefix of target matches one of -// the glob patterns (as defined by path.Match) in the comma-separated globs +// the glob patterns (as defined by [path.Match]) in the comma-separated globs // list. This implements the algorithm used when matching a module path to the // GOPRIVATE environment variable, as described by 'go help module-private'. // diff --git a/vendor/golang.org/x/mod/module/pseudo.go b/vendor/golang.org/x/mod/module/pseudo.go index f04ad37886..9cf19d3254 100644 --- a/vendor/golang.org/x/mod/module/pseudo.go +++ b/vendor/golang.org/x/mod/module/pseudo.go @@ -125,7 +125,7 @@ func IsPseudoVersion(v string) bool { } // IsZeroPseudoVersion returns whether v is a pseudo-version with a zero base, -// timestamp, and revision, as returned by ZeroPseudoVersion. +// timestamp, and revision, as returned by [ZeroPseudoVersion]. func IsZeroPseudoVersion(v string) bool { return v == ZeroPseudoVersion(semver.Major(v)) } diff --git a/vendor/golang.org/x/mod/semver/semver.go b/vendor/golang.org/x/mod/semver/semver.go index a30a22bf20..9a2dfd33a7 100644 --- a/vendor/golang.org/x/mod/semver/semver.go +++ b/vendor/golang.org/x/mod/semver/semver.go @@ -140,7 +140,7 @@ func Compare(v, w string) int { // Max canonicalizes its arguments and then returns the version string // that compares greater. // -// Deprecated: use Compare instead. In most cases, returning a canonicalized +// Deprecated: use [Compare] instead. In most cases, returning a canonicalized // version is not expected or desired. func Max(v, w string) string { v = Canonical(v) @@ -151,7 +151,7 @@ func Max(v, w string) string { return w } -// ByVersion implements sort.Interface for sorting semantic version strings. +// ByVersion implements [sort.Interface] for sorting semantic version strings. type ByVersion []string func (vs ByVersion) Len() int { return len(vs) } @@ -164,7 +164,7 @@ func (vs ByVersion) Less(i, j int) bool { return vs[i] < vs[j] } -// Sort sorts a list of semantic version strings using ByVersion. +// Sort sorts a list of semantic version strings using [ByVersion]. func Sort(list []string) { sort.Sort(ByVersion(list)) } diff --git a/vendor/golang.org/x/net/html/render.go b/vendor/golang.org/x/net/html/render.go index 8b28031905..e8c1233455 100644 --- a/vendor/golang.org/x/net/html/render.go +++ b/vendor/golang.org/x/net/html/render.go @@ -194,9 +194,8 @@ func render1(w writer, n *Node) error { } } - // Render any child nodes. - switch n.Data { - case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp": + // Render any child nodes + if childTextNodesAreLiteral(n) { for c := n.FirstChild; c != nil; c = c.NextSibling { if c.Type == TextNode { if _, err := w.WriteString(c.Data); err != nil { @@ -213,7 +212,7 @@ func render1(w writer, n *Node) error { // last element in the file, with no closing tag. return plaintextAbort } - default: + } else { for c := n.FirstChild; c != nil; c = c.NextSibling { if err := render1(w, c); err != nil { return err @@ -231,6 +230,27 @@ func render1(w writer, n *Node) error { return w.WriteByte('>') } +func childTextNodesAreLiteral(n *Node) bool { + // Per WHATWG HTML 13.3, if the parent of the current node is a style, + // script, xmp, iframe, noembed, noframes, or plaintext element, and the + // current node is a text node, append the value of the node's data + // literally. The specification is not explicit about it, but we only + // enforce this if we are in the HTML namespace (i.e. when the namespace is + // ""). + // NOTE: we also always include noscript elements, although the + // specification states that they should only be rendered as such if + // scripting is enabled for the node (which is not something we track). + if n.Namespace != "" { + return false + } + switch n.Data { + case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp": + return true + default: + return false + } +} + // writeQuoted writes s to w surrounded by quotes. Normally it will use double // quotes, but if s contains a double quote, it will use single quotes. // It is used for writing the identifiers in a doctype declaration. diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go index 5c2a1f4efa..de67f938a1 100644 --- a/vendor/golang.org/x/net/html/token.go +++ b/vendor/golang.org/x/net/html/token.go @@ -913,7 +913,14 @@ func (z *Tokenizer) readTagAttrKey() { case ' ', '\n', '\r', '\t', '\f', '/': z.pendingAttr[0].end = z.raw.end - 1 return - case '=', '>': + case '=': + if z.pendingAttr[0].start+1 == z.raw.end { + // WHATWG 13.2.5.32, if we see an equals sign before the attribute name + // begins, we treat it as a character in the attribute name and continue. + continue + } + fallthrough + case '>': z.raw.end-- z.pendingAttr[0].end = z.raw.end return diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index 4f08ccba9a..b0d482f9f4 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -19,6 +19,7 @@ import ( "io/fs" "log" "math" + "math/bits" mathrand "math/rand" "net" "net/http" @@ -518,11 +519,14 @@ func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { func authorityAddr(scheme string, authority string) (addr string) { host, port, err := net.SplitHostPort(authority) if err != nil { // authority didn't have a port + host = authority + port = "" + } + if port == "" { // authority's port was empty port = "443" if scheme == "http" { port = "80" } - host = authority } if a, err := idna.ToASCII(host); err == nil { host = a @@ -1268,22 +1272,7 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { cancelRequest := func(cs *clientStream, err error) error { cs.cc.mu.Lock() - cs.abortStreamLocked(err) bodyClosed := cs.reqBodyClosed - if cs.ID != 0 { - // This request may have failed because of a problem with the connection, - // or for some unrelated reason. (For example, the user might have canceled - // the request without waiting for a response.) Mark the connection as - // not reusable, since trying to reuse a dead connection is worse than - // unnecessarily creating a new one. - // - // If cs.ID is 0, then the request was never allocated a stream ID and - // whatever went wrong was unrelated to the connection. We might have - // timed out waiting for a stream slot when StrictMaxConcurrentStreams - // is set, for example, in which case retrying on a different connection - // will not help. - cs.cc.doNotReuse = true - } cs.cc.mu.Unlock() // Wait for the request body to be closed. // @@ -1318,11 +1307,14 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { return handleResponseHeaders() default: waitDone() - return nil, cancelRequest(cs, cs.abortErr) + return nil, cs.abortErr } case <-ctx.Done(): - return nil, cancelRequest(cs, ctx.Err()) + err := ctx.Err() + cs.abortStream(err) + return nil, cancelRequest(cs, err) case <-cs.reqCancel: + cs.abortStream(errRequestCanceled) return nil, cancelRequest(cs, errRequestCanceled) } } @@ -1689,7 +1681,27 @@ func (cs *clientStream) frameScratchBufferLen(maxFrameSize int) int { return int(n) // doesn't truncate; max is 512K } -var bufPool sync.Pool // of *[]byte +// Seven bufPools manage different frame sizes. This helps to avoid scenarios where long-running +// streaming requests using small frame sizes occupy large buffers initially allocated for prior +// requests needing big buffers. The size ranges are as follows: +// {0 KB, 16 KB], {16 KB, 32 KB], {32 KB, 64 KB], {64 KB, 128 KB], {128 KB, 256 KB], +// {256 KB, 512 KB], {512 KB, infinity} +// In practice, the maximum scratch buffer size should not exceed 512 KB due to +// frameScratchBufferLen(maxFrameSize), thus the "infinity pool" should never be used. +// It exists mainly as a safety measure, for potential future increases in max buffer size. +var bufPools [7]sync.Pool // of *[]byte +func bufPoolIndex(size int) int { + if size <= 16384 { + return 0 + } + size -= 1 + bits := bits.Len(uint(size)) + index := bits - 14 + if index >= len(bufPools) { + return len(bufPools) - 1 + } + return index +} func (cs *clientStream) writeRequestBody(req *http.Request) (err error) { cc := cs.cc @@ -1707,12 +1719,13 @@ func (cs *clientStream) writeRequestBody(req *http.Request) (err error) { // Scratch buffer for reading into & writing from. scratchLen := cs.frameScratchBufferLen(maxFrameSize) var buf []byte - if bp, ok := bufPool.Get().(*[]byte); ok && len(*bp) >= scratchLen { - defer bufPool.Put(bp) + index := bufPoolIndex(scratchLen) + if bp, ok := bufPools[index].Get().(*[]byte); ok && len(*bp) >= scratchLen { + defer bufPools[index].Put(bp) buf = *bp } else { buf = make([]byte, scratchLen) - defer bufPool.Put(&buf) + defer bufPools[index].Put(&buf) } var sawEOF bool @@ -1880,6 +1893,9 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail 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" { diff --git a/vendor/golang.org/x/net/idna/idna9.0.0.go b/vendor/golang.org/x/net/idna/idna9.0.0.go index aae6aac872..ee1698cefb 100644 --- a/vendor/golang.org/x/net/idna/idna9.0.0.go +++ b/vendor/golang.org/x/net/idna/idna9.0.0.go @@ -121,7 +121,7 @@ func CheckJoiners(enable bool) Option { } } -// StrictDomainName limits the set of permissable ASCII characters to those +// StrictDomainName limits the set of permissible ASCII characters to those // allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the // hyphen). This is set by default for MapForLookup and ValidateForRegistration, // but is only useful if ValidateLabels is set. diff --git a/vendor/golang.org/x/net/idna/tables13.0.0.go b/vendor/golang.org/x/net/idna/tables13.0.0.go index 390c5e56d2..66701eadfb 100644 --- a/vendor/golang.org/x/net/idna/tables13.0.0.go +++ b/vendor/golang.org/x/net/idna/tables13.0.0.go @@ -1,151 +1,294 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -//go:build go1.16 -// +build go1.16 +//go:build go1.16 && !go1.21 +// +build go1.16,!go1.21 package idna // UnicodeVersion is the Unicode version from which the tables in this package are derived. const UnicodeVersion = "13.0.0" -var mappings string = "" + // Size: 8188 bytes - "\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" + - "\x053⁄4\x03i̇\x03l·\x03ʼn\x01s\x03dž\x03ⱥ\x03ⱦ\x01h\x01j\x01r\x01w\x01y" + - "\x03 ̆\x03 ̇\x03 ̊\x03 ̨\x03 ̃\x03 ̋\x01l\x01x\x04̈́\x03 ι\x01;\x05 ̈́" + - "\x04եւ\x04اٴ\x04وٴ\x04ۇٴ\x04يٴ\x06क़\x06ख़\x06ग़\x06ज़\x06ड़\x06ढ़\x06फ़" + - "\x06य़\x06ড়\x06ঢ়\x06য়\x06ਲ਼\x06ਸ਼\x06ਖ਼\x06ਗ਼\x06ਜ਼\x06ਫ਼\x06ଡ଼\x06ଢ଼" + - "\x06ํา\x06ໍາ\x06ຫນ\x06ຫມ\x06གྷ\x06ཌྷ\x06དྷ\x06བྷ\x06ཛྷ\x06ཀྵ\x06ཱི\x06ཱུ" + - "\x06ྲྀ\x09ྲཱྀ\x06ླྀ\x09ླཱྀ\x06ཱྀ\x06ྒྷ\x06ྜྷ\x06ྡྷ\x06ྦྷ\x06ྫྷ\x06ྐྵ\x02" + - "в\x02д\x02о\x02с\x02т\x02ъ\x02ѣ\x02æ\x01b\x01d\x01e\x02ǝ\x01g\x01i\x01k" + - "\x01m\x01n\x02ȣ\x01p\x01t\x01u\x02ɐ\x02ɑ\x02ə\x02ɛ\x02ɜ\x02ŋ\x02ɔ\x02ɯ" + - "\x01v\x02β\x02γ\x02δ\x02φ\x02χ\x02ρ\x02н\x02ɒ\x01c\x02ɕ\x02ð\x01f\x02ɟ" + - "\x02ɡ\x02ɥ\x02ɨ\x02ɩ\x02ɪ\x02ʝ\x02ɭ\x02ʟ\x02ɱ\x02ɰ\x02ɲ\x02ɳ\x02ɴ\x02ɵ" + - "\x02ɸ\x02ʂ\x02ʃ\x02ƫ\x02ʉ\x02ʊ\x02ʋ\x02ʌ\x01z\x02ʐ\x02ʑ\x02ʒ\x02θ\x02ss" + - "\x02ά\x02έ\x02ή\x02ί\x02ό\x02ύ\x02ώ\x05ἀι\x05ἁι\x05ἂι\x05ἃι\x05ἄι\x05ἅι" + - "\x05ἆι\x05ἇι\x05ἠι\x05ἡι\x05ἢι\x05ἣι\x05ἤι\x05ἥι\x05ἦι\x05ἧι\x05ὠι\x05ὡι" + - "\x05ὢι\x05ὣι\x05ὤι\x05ὥι\x05ὦι\x05ὧι\x05ὰι\x04αι\x04άι\x05ᾶι\x02ι\x05 ̈͂" + - "\x05ὴι\x04ηι\x04ήι\x05ῆι\x05 ̓̀\x05 ̓́\x05 ̓͂\x02ΐ\x05 ̔̀\x05 ̔́\x05 ̔͂" + - "\x02ΰ\x05 ̈̀\x01`\x05ὼι\x04ωι\x04ώι\x05ῶι\x06′′\x09′′′\x06‵‵\x09‵‵‵\x02!" + - "!\x02??\x02?!\x02!?\x0c′′′′\x010\x014\x015\x016\x017\x018\x019\x01+\x01=" + - "\x01(\x01)\x02rs\x02ħ\x02no\x01q\x02sm\x02tm\x02ω\x02å\x02א\x02ב\x02ג" + - "\x02ד\x02π\x051⁄7\x051⁄9\x061⁄10\x051⁄3\x052⁄3\x051⁄5\x052⁄5\x053⁄5\x054" + - "⁄5\x051⁄6\x055⁄6\x051⁄8\x053⁄8\x055⁄8\x057⁄8\x041⁄\x02ii\x02iv\x02vi" + - "\x04viii\x02ix\x02xi\x050⁄3\x06∫∫\x09∫∫∫\x06∮∮\x09∮∮∮\x0210\x0211\x0212" + - "\x0213\x0214\x0215\x0216\x0217\x0218\x0219\x0220\x04(10)\x04(11)\x04(12)" + - "\x04(13)\x04(14)\x04(15)\x04(16)\x04(17)\x04(18)\x04(19)\x04(20)\x0c∫∫∫∫" + - "\x02==\x05⫝̸\x02ɫ\x02ɽ\x02ȿ\x02ɀ\x01.\x04 ゙\x04 ゚\x06より\x06コト\x05(ᄀ)\x05" + - "(ᄂ)\x05(ᄃ)\x05(ᄅ)\x05(ᄆ)\x05(ᄇ)\x05(ᄉ)\x05(ᄋ)\x05(ᄌ)\x05(ᄎ)\x05(ᄏ)\x05(ᄐ" + - ")\x05(ᄑ)\x05(ᄒ)\x05(가)\x05(나)\x05(다)\x05(라)\x05(마)\x05(바)\x05(사)\x05(아)" + - "\x05(자)\x05(차)\x05(카)\x05(타)\x05(파)\x05(하)\x05(주)\x08(오전)\x08(오후)\x05(一)" + - "\x05(二)\x05(三)\x05(四)\x05(五)\x05(六)\x05(七)\x05(八)\x05(九)\x05(十)\x05(月)" + - "\x05(火)\x05(水)\x05(木)\x05(金)\x05(土)\x05(日)\x05(株)\x05(有)\x05(社)\x05(名)" + - "\x05(特)\x05(財)\x05(祝)\x05(労)\x05(代)\x05(呼)\x05(学)\x05(監)\x05(企)\x05(資)" + - "\x05(協)\x05(祭)\x05(休)\x05(自)\x05(至)\x0221\x0222\x0223\x0224\x0225\x0226" + - "\x0227\x0228\x0229\x0230\x0231\x0232\x0233\x0234\x0235\x06참고\x06주의\x0236" + - "\x0237\x0238\x0239\x0240\x0241\x0242\x0243\x0244\x0245\x0246\x0247\x0248" + - "\x0249\x0250\x041月\x042月\x043月\x044月\x045月\x046月\x047月\x048月\x049月\x0510" + - "月\x0511月\x0512月\x02hg\x02ev\x06令和\x0cアパート\x0cアルファ\x0cアンペア\x09アール\x0cイニ" + - "ング\x09インチ\x09ウォン\x0fエスクード\x0cエーカー\x09オンス\x09オーム\x09カイリ\x0cカラット\x0cカロリー" + - "\x09ガロン\x09ガンマ\x06ギガ\x09ギニー\x0cキュリー\x0cギルダー\x06キロ\x0fキログラム\x12キロメートル\x0f" + - "キロワット\x09グラム\x0fグラムトン\x0fクルゼイロ\x0cクローネ\x09ケース\x09コルナ\x09コーポ\x0cサイクル" + - "\x0fサンチーム\x0cシリング\x09センチ\x09セント\x09ダース\x06デシ\x06ドル\x06トン\x06ナノ\x09ノット" + - "\x09ハイツ\x0fパーセント\x09パーツ\x0cバーレル\x0fピアストル\x09ピクル\x06ピコ\x06ビル\x0fファラッド\x0c" + - "フィート\x0fブッシェル\x09フラン\x0fヘクタール\x06ペソ\x09ペニヒ\x09ヘルツ\x09ペンス\x09ページ\x09ベータ" + - "\x0cポイント\x09ボルト\x06ホン\x09ポンド\x09ホール\x09ホーン\x0cマイクロ\x09マイル\x09マッハ\x09マルク" + - "\x0fマンション\x0cミクロン\x06ミリ\x0fミリバール\x06メガ\x0cメガトン\x0cメートル\x09ヤード\x09ヤール\x09" + - "ユアン\x0cリットル\x06リラ\x09ルピー\x0cルーブル\x06レム\x0fレントゲン\x09ワット\x040点\x041点\x04" + - "2点\x043点\x044点\x045点\x046点\x047点\x048点\x049点\x0510点\x0511点\x0512点\x0513点" + - "\x0514点\x0515点\x0516点\x0517点\x0518点\x0519点\x0520点\x0521点\x0522点\x0523点" + - "\x0524点\x02da\x02au\x02ov\x02pc\x02dm\x02iu\x06平成\x06昭和\x06大正\x06明治\x0c株" + - "式会社\x02pa\x02na\x02ma\x02ka\x02kb\x02mb\x02gb\x04kcal\x02pf\x02nf\x02m" + - "g\x02kg\x02hz\x02ml\x02dl\x02kl\x02fm\x02nm\x02mm\x02cm\x02km\x02m2\x02m" + - "3\x05m∕s\x06m∕s2\x07rad∕s\x08rad∕s2\x02ps\x02ns\x02ms\x02pv\x02nv\x02mv" + - "\x02kv\x02pw\x02nw\x02mw\x02kw\x02bq\x02cc\x02cd\x06c∕kg\x02db\x02gy\x02" + - "ha\x02hp\x02in\x02kk\x02kt\x02lm\x02ln\x02lx\x02ph\x02pr\x02sr\x02sv\x02" + - "wb\x05v∕m\x05a∕m\x041日\x042日\x043日\x044日\x045日\x046日\x047日\x048日\x049日" + - "\x0510日\x0511日\x0512日\x0513日\x0514日\x0515日\x0516日\x0517日\x0518日\x0519日" + - "\x0520日\x0521日\x0522日\x0523日\x0524日\x0525日\x0526日\x0527日\x0528日\x0529日" + - "\x0530日\x0531日\x02ь\x02ɦ\x02ɬ\x02ʞ\x02ʇ\x02œ\x02ʍ\x04𤋮\x04𢡊\x04𢡄\x04𣏕" + - "\x04𥉉\x04𥳐\x04𧻓\x02ff\x02fi\x02fl\x02st\x04մն\x04մե\x04մի\x04վն\x04մխ" + - "\x04יִ\x04ײַ\x02ע\x02ה\x02כ\x02ל\x02ם\x02ר\x02ת\x04שׁ\x04שׂ\x06שּׁ\x06שּ" + - "ׂ\x04אַ\x04אָ\x04אּ\x04בּ\x04גּ\x04דּ\x04הּ\x04וּ\x04זּ\x04טּ\x04יּ\x04" + - "ךּ\x04כּ\x04לּ\x04מּ\x04נּ\x04סּ\x04ףּ\x04פּ\x04צּ\x04קּ\x04רּ\x04שּ" + - "\x04תּ\x04וֹ\x04בֿ\x04כֿ\x04פֿ\x04אל\x02ٱ\x02ٻ\x02پ\x02ڀ\x02ٺ\x02ٿ\x02ٹ" + - "\x02ڤ\x02ڦ\x02ڄ\x02ڃ\x02چ\x02ڇ\x02ڍ\x02ڌ\x02ڎ\x02ڈ\x02ژ\x02ڑ\x02ک\x02گ" + - "\x02ڳ\x02ڱ\x02ں\x02ڻ\x02ۀ\x02ہ\x02ھ\x02ے\x02ۓ\x02ڭ\x02ۇ\x02ۆ\x02ۈ\x02ۋ" + - "\x02ۅ\x02ۉ\x02ې\x02ى\x04ئا\x04ئە\x04ئو\x04ئۇ\x04ئۆ\x04ئۈ\x04ئې\x04ئى\x02" + - "ی\x04ئج\x04ئح\x04ئم\x04ئي\x04بج\x04بح\x04بخ\x04بم\x04بى\x04بي\x04تج\x04" + - "تح\x04تخ\x04تم\x04تى\x04تي\x04ثج\x04ثم\x04ثى\x04ثي\x04جح\x04جم\x04حج" + - "\x04حم\x04خج\x04خح\x04خم\x04سج\x04سح\x04سخ\x04سم\x04صح\x04صم\x04ضج\x04ضح" + - "\x04ضخ\x04ضم\x04طح\x04طم\x04ظم\x04عج\x04عم\x04غج\x04غم\x04فج\x04فح\x04فخ" + - "\x04فم\x04فى\x04في\x04قح\x04قم\x04قى\x04قي\x04كا\x04كج\x04كح\x04كخ\x04كل" + - "\x04كم\x04كى\x04كي\x04لج\x04لح\x04لخ\x04لم\x04لى\x04لي\x04مج\x04مح\x04مخ" + - "\x04مم\x04مى\x04مي\x04نج\x04نح\x04نخ\x04نم\x04نى\x04ني\x04هج\x04هم\x04هى" + - "\x04هي\x04يج\x04يح\x04يخ\x04يم\x04يى\x04يي\x04ذٰ\x04رٰ\x04ىٰ\x05 ٌّ\x05 " + - "ٍّ\x05 َّ\x05 ُّ\x05 ِّ\x05 ّٰ\x04ئر\x04ئز\x04ئن\x04بر\x04بز\x04بن\x04ت" + - "ر\x04تز\x04تن\x04ثر\x04ثز\x04ثن\x04ما\x04نر\x04نز\x04نن\x04ير\x04يز\x04" + - "ين\x04ئخ\x04ئه\x04به\x04ته\x04صخ\x04له\x04نه\x04هٰ\x04يه\x04ثه\x04سه" + - "\x04شم\x04شه\x06ـَّ\x06ـُّ\x06ـِّ\x04طى\x04طي\x04عى\x04عي\x04غى\x04غي" + - "\x04سى\x04سي\x04شى\x04شي\x04حى\x04حي\x04جى\x04جي\x04خى\x04خي\x04صى\x04صي" + - "\x04ضى\x04ضي\x04شج\x04شح\x04شخ\x04شر\x04سر\x04صر\x04ضر\x04اً\x06تجم\x06ت" + - "حج\x06تحم\x06تخم\x06تمج\x06تمح\x06تمخ\x06جمح\x06حمي\x06حمى\x06سحج\x06سج" + - "ح\x06سجى\x06سمح\x06سمج\x06سمم\x06صحح\x06صمم\x06شحم\x06شجي\x06شمخ\x06شمم" + - "\x06ضحى\x06ضخم\x06طمح\x06طمم\x06طمي\x06عجم\x06عمم\x06عمى\x06غمم\x06غمي" + - "\x06غمى\x06فخم\x06قمح\x06قمم\x06لحم\x06لحي\x06لحى\x06لجج\x06لخم\x06لمح" + - "\x06محج\x06محم\x06محي\x06مجح\x06مجم\x06مخج\x06مخم\x06مجخ\x06همج\x06همم" + - "\x06نحم\x06نحى\x06نجم\x06نجى\x06نمي\x06نمى\x06يمم\x06بخي\x06تجي\x06تجى" + - "\x06تخي\x06تخى\x06تمي\x06تمى\x06جمي\x06جحى\x06جمى\x06سخى\x06صحي\x06شحي" + - "\x06ضحي\x06لجي\x06لمي\x06يحي\x06يجي\x06يمي\x06ممي\x06قمي\x06نحي\x06عمي" + - "\x06كمي\x06نجح\x06مخي\x06لجم\x06كمم\x06جحي\x06حجي\x06مجي\x06فمي\x06بحي" + - "\x06سخي\x06نجي\x06صلے\x06قلے\x08الله\x08اكبر\x08محمد\x08صلعم\x08رسول\x08" + - "عليه\x08وسلم\x06صلى!صلى الله عليه وسلم\x0fجل جلاله\x08ریال\x01,\x01:" + - "\x01!\x01?\x01_\x01{\x01}\x01[\x01]\x01#\x01&\x01*\x01-\x01<\x01>\x01\\" + - "\x01$\x01%\x01@\x04ـً\x04ـَ\x04ـُ\x04ـِ\x04ـّ\x04ـْ\x02ء\x02آ\x02أ\x02ؤ" + - "\x02إ\x02ئ\x02ا\x02ب\x02ة\x02ت\x02ث\x02ج\x02ح\x02خ\x02د\x02ذ\x02ر\x02ز" + - "\x02س\x02ش\x02ص\x02ض\x02ط\x02ظ\x02ع\x02غ\x02ف\x02ق\x02ك\x02ل\x02م\x02ن" + - "\x02ه\x02و\x02ي\x04لآ\x04لأ\x04لإ\x04لا\x01\x22\x01'\x01/\x01^\x01|\x01~" + - "\x02¢\x02£\x02¬\x02¦\x02¥\x08𝅗𝅥\x08𝅘𝅥\x0c𝅘𝅥𝅮\x0c𝅘𝅥𝅯\x0c𝅘𝅥𝅰\x0c𝅘𝅥𝅱\x0c𝅘𝅥𝅲" + - "\x08𝆹𝅥\x08𝆺𝅥\x0c𝆹𝅥𝅮\x0c𝆺𝅥𝅮\x0c𝆹𝅥𝅯\x0c𝆺𝅥𝅯\x02ı\x02ȷ\x02α\x02ε\x02ζ\x02η" + - "\x02κ\x02λ\x02μ\x02ν\x02ξ\x02ο\x02σ\x02τ\x02υ\x02ψ\x03∇\x03∂\x02ϝ\x02ٮ" + - "\x02ڡ\x02ٯ\x020,\x021,\x022,\x023,\x024,\x025,\x026,\x027,\x028,\x029," + - "\x03(a)\x03(b)\x03(c)\x03(d)\x03(e)\x03(f)\x03(g)\x03(h)\x03(i)\x03(j)" + - "\x03(k)\x03(l)\x03(m)\x03(n)\x03(o)\x03(p)\x03(q)\x03(r)\x03(s)\x03(t)" + - "\x03(u)\x03(v)\x03(w)\x03(x)\x03(y)\x03(z)\x07〔s〕\x02wz\x02hv\x02sd\x03p" + - "pv\x02wc\x02mc\x02md\x02mr\x02dj\x06ほか\x06ココ\x03サ\x03手\x03字\x03双\x03デ" + - "\x03二\x03多\x03解\x03天\x03交\x03映\x03無\x03料\x03前\x03後\x03再\x03新\x03初\x03終" + - "\x03生\x03販\x03声\x03吹\x03演\x03投\x03捕\x03一\x03三\x03遊\x03左\x03中\x03右\x03指" + - "\x03走\x03打\x03禁\x03空\x03合\x03満\x03有\x03月\x03申\x03割\x03営\x03配\x09〔本〕\x09〔" + - "三〕\x09〔二〕\x09〔安〕\x09〔点〕\x09〔打〕\x09〔盗〕\x09〔勝〕\x09〔敗〕\x03得\x03可\x03丽\x03" + - "丸\x03乁\x03你\x03侮\x03侻\x03倂\x03偺\x03備\x03僧\x03像\x03㒞\x03免\x03兔\x03兤\x03" + - "具\x03㒹\x03內\x03冗\x03冤\x03仌\x03冬\x03况\x03凵\x03刃\x03㓟\x03刻\x03剆\x03剷\x03" + - "㔕\x03勇\x03勉\x03勤\x03勺\x03包\x03匆\x03北\x03卉\x03卑\x03博\x03即\x03卽\x03卿\x03" + - "灰\x03及\x03叟\x03叫\x03叱\x03吆\x03咞\x03吸\x03呈\x03周\x03咢\x03哶\x03唐\x03啓\x03" + - "啣\x03善\x03喙\x03喫\x03喳\x03嗂\x03圖\x03嘆\x03圗\x03噑\x03噴\x03切\x03壮\x03城\x03" + - "埴\x03堍\x03型\x03堲\x03報\x03墬\x03売\x03壷\x03夆\x03夢\x03奢\x03姬\x03娛\x03娧\x03" + - "姘\x03婦\x03㛮\x03嬈\x03嬾\x03寃\x03寘\x03寧\x03寳\x03寿\x03将\x03尢\x03㞁\x03屠\x03" + - "屮\x03峀\x03岍\x03嵃\x03嵮\x03嵫\x03嵼\x03巡\x03巢\x03㠯\x03巽\x03帨\x03帽\x03幩\x03" + - "㡢\x03㡼\x03庰\x03庳\x03庶\x03廊\x03廾\x03舁\x03弢\x03㣇\x03形\x03彫\x03㣣\x03徚\x03" + - "忍\x03志\x03忹\x03悁\x03㤺\x03㤜\x03悔\x03惇\x03慈\x03慌\x03慎\x03慺\x03憎\x03憲\x03" + - "憤\x03憯\x03懞\x03懲\x03懶\x03成\x03戛\x03扝\x03抱\x03拔\x03捐\x03挽\x03拼\x03捨\x03" + - "掃\x03揤\x03搢\x03揅\x03掩\x03㨮\x03摩\x03摾\x03撝\x03摷\x03㩬\x03敏\x03敬\x03旣\x03" + - "書\x03晉\x03㬙\x03暑\x03㬈\x03㫤\x03冒\x03冕\x03最\x03暜\x03肭\x03䏙\x03朗\x03望\x03" + - "朡\x03杞\x03杓\x03㭉\x03柺\x03枅\x03桒\x03梅\x03梎\x03栟\x03椔\x03㮝\x03楂\x03榣\x03" + - "槪\x03檨\x03櫛\x03㰘\x03次\x03歔\x03㱎\x03歲\x03殟\x03殺\x03殻\x03汎\x03沿\x03泍\x03" + - "汧\x03洖\x03派\x03海\x03流\x03浩\x03浸\x03涅\x03洴\x03港\x03湮\x03㴳\x03滋\x03滇\x03" + - "淹\x03潮\x03濆\x03瀹\x03瀞\x03瀛\x03㶖\x03灊\x03災\x03灷\x03炭\x03煅\x03熜\x03爨\x03" + - "爵\x03牐\x03犀\x03犕\x03獺\x03王\x03㺬\x03玥\x03㺸\x03瑇\x03瑜\x03瑱\x03璅\x03瓊\x03" + - "㼛\x03甤\x03甾\x03異\x03瘐\x03㿼\x03䀈\x03直\x03眞\x03真\x03睊\x03䀹\x03瞋\x03䁆\x03" + - "䂖\x03硎\x03碌\x03磌\x03䃣\x03祖\x03福\x03秫\x03䄯\x03穀\x03穊\x03穏\x03䈂\x03篆\x03" + - "築\x03䈧\x03糒\x03䊠\x03糨\x03糣\x03紀\x03絣\x03䌁\x03緇\x03縂\x03繅\x03䌴\x03䍙\x03" + - "罺\x03羕\x03翺\x03者\x03聠\x03聰\x03䏕\x03育\x03脃\x03䐋\x03脾\x03媵\x03舄\x03辞\x03" + - "䑫\x03芑\x03芋\x03芝\x03劳\x03花\x03芳\x03芽\x03苦\x03若\x03茝\x03荣\x03莭\x03茣\x03" + - "莽\x03菧\x03著\x03荓\x03菊\x03菌\x03菜\x03䔫\x03蓱\x03蓳\x03蔖\x03蕤\x03䕝\x03䕡\x03" + - "䕫\x03虐\x03虜\x03虧\x03虩\x03蚩\x03蚈\x03蜎\x03蛢\x03蝹\x03蜨\x03蝫\x03螆\x03蟡\x03" + - "蠁\x03䗹\x03衠\x03衣\x03裗\x03裞\x03䘵\x03裺\x03㒻\x03䚾\x03䛇\x03誠\x03諭\x03變\x03" + - "豕\x03貫\x03賁\x03贛\x03起\x03跋\x03趼\x03跰\x03軔\x03輸\x03邔\x03郱\x03鄑\x03鄛\x03" + - "鈸\x03鋗\x03鋘\x03鉼\x03鏹\x03鐕\x03開\x03䦕\x03閷\x03䧦\x03雃\x03嶲\x03霣\x03䩮\x03" + - "䩶\x03韠\x03䪲\x03頋\x03頩\x03飢\x03䬳\x03餩\x03馧\x03駂\x03駾\x03䯎\x03鬒\x03鱀\x03" + - "鳽\x03䳎\x03䳭\x03鵧\x03䳸\x03麻\x03䵖\x03黹\x03黾\x03鼅\x03鼏\x03鼖\x03鼻" +var mappings string = "" + // Size: 6539 bytes + " ̈a ̄23 ́ ̧1o1⁄41⁄23⁄4i̇l·ʼnsdžⱥⱦhjrwy ̆ ̇ ̊ ̨ ̃ ̋lẍ́ ι; ̈́եւاٴوٴۇٴيٴक" + + "़ख़ग़ज़ड़ढ़फ़य़ড়ঢ়য়ਲ਼ਸ਼ਖ਼ਗ਼ਜ਼ਫ਼ଡ଼ଢ଼ําໍາຫນຫມགྷཌྷདྷབྷཛྷཀྵཱཱིུྲྀྲཱྀླྀླཱ" + + "ཱྀྀྒྷྜྷྡྷྦྷྫྷྐྵвдостъѣæbdeǝgikmnȣptuɐɑəɛɜŋɔɯvβγδφχρнɒcɕðfɟɡɥɨɩɪʝɭʟɱɰɲɳ" + + "ɴɵɸʂʃƫʉʊʋʌzʐʑʒθssάέήίόύώἀιἁιἂιἃιἄιἅιἆιἇιἠιἡιἢιἣιἤιἥιἦιἧιὠιὡιὢιὣιὤιὥιὦιὧ" + + "ιὰιαιάιᾶιι ̈͂ὴιηιήιῆι ̓̀ ̓́ ̓͂ΐ ̔̀ ̔́ ̔͂ΰ ̈̀`ὼιωιώιῶι′′′′′‵‵‵‵‵!!???!!?" + + "′′′′0456789+=()rsħnoqsmtmωåאבגדπ1⁄71⁄91⁄101⁄32⁄31⁄52⁄53⁄54⁄51⁄65⁄61⁄83" + + "⁄85⁄87⁄81⁄iiivviviiiixxi0⁄3∫∫∫∫∫∮∮∮∮∮1011121314151617181920(10)(11)(12" + + ")(13)(14)(15)(16)(17)(18)(19)(20)∫∫∫∫==⫝̸ɫɽȿɀ. ゙ ゚よりコト(ᄀ)(ᄂ)(ᄃ)(ᄅ)(ᄆ)(ᄇ)" + + "(ᄉ)(ᄋ)(ᄌ)(ᄎ)(ᄏ)(ᄐ)(ᄑ)(ᄒ)(가)(나)(다)(라)(마)(바)(사)(아)(자)(차)(카)(타)(파)(하)(주)(오전" + + ")(오후)(一)(二)(三)(四)(五)(六)(七)(八)(九)(十)(月)(火)(水)(木)(金)(土)(日)(株)(有)(社)(名)(特)(" + + "財)(祝)(労)(代)(呼)(学)(監)(企)(資)(協)(祭)(休)(自)(至)21222324252627282930313233343" + + "5참고주의3637383940414243444546474849501月2月3月4月5月6月7月8月9月10月11月12月hgev令和アパート" + + "アルファアンペアアールイニングインチウォンエスクードエーカーオンスオームカイリカラットカロリーガロンガンマギガギニーキュリーギルダーキロキロ" + + "グラムキロメートルキロワットグラムグラムトンクルゼイロクローネケースコルナコーポサイクルサンチームシリングセンチセントダースデシドルトンナノ" + + "ノットハイツパーセントパーツバーレルピアストルピクルピコビルファラッドフィートブッシェルフランヘクタールペソペニヒヘルツペンスページベータポ" + + "イントボルトホンポンドホールホーンマイクロマイルマッハマルクマンションミクロンミリミリバールメガメガトンメートルヤードヤールユアンリットルリ" + + "ラルピールーブルレムレントゲンワット0点1点2点3点4点5点6点7点8点9点10点11点12点13点14点15点16点17点18点19点20" + + "点21点22点23点24点daauovpcdmiu平成昭和大正明治株式会社panamakakbmbgbkcalpfnfmgkghzmldlk" + + "lfmnmmmcmkmm2m3m∕sm∕s2rad∕srad∕s2psnsmspvnvmvkvpwnwmwkwbqcccdc∕kgdbgyhah" + + "pinkkktlmlnlxphprsrsvwbv∕ma∕m1日2日3日4日5日6日7日8日9日10日11日12日13日14日15日16日17日1" + + "8日19日20日21日22日23日24日25日26日27日28日29日30日31日ьɦɬʞʇœʍ𤋮𢡊𢡄𣏕𥉉𥳐𧻓fffiflstմնմեմիվնմ" + + "խיִײַעהכלםרתשׁשׂשּׁשּׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּנּסּףּפּצּקּרּשּתּו" + + "ֹבֿכֿפֿאלٱٻپڀٺٿٹڤڦڄڃچڇڍڌڎڈژڑکگڳڱںڻۀہھےۓڭۇۆۈۋۅۉېىئائەئوئۇئۆئۈئېئىیئجئحئم" + + "ئيبجبحبخبمبىبيتجتحتختمتىتيثجثمثىثيجحجمحجحمخجخحخمسجسحسخسمصحصمضجضحضخضمطحط" + + "مظمعجعمغجغمفجفحفخفمفىفيقحقمقىقيكاكجكحكخكلكمكىكيلجلحلخلملىليمجمحمخمممىمي" + + "نجنحنخنمنىنيهجهمهىهييجيحيخيميىييذٰرٰىٰ ٌّ ٍّ َّ ُّ ِّ ّٰئرئزئنبربزبنترت" + + "زتنثرثزثنمانرنزننيريزينئخئهبهتهصخلهنههٰيهثهسهشمشهـَّـُّـِّطىطيعىعيغىغيس" + + "ىسيشىشيحىحيجىجيخىخيصىصيضىضيشجشحشخشرسرصرضراًتجمتحجتحمتخمتمجتمحتمخجمححميح" + + "مىسحجسجحسجىسمحسمجسممصححصممشحمشجيشمخشممضحىضخمطمحطممطميعجمعممعمىغممغميغمى" + + "فخمقمحقمملحملحيلحىلججلخملمحمحجمحممحيمجحمجممخجمخممجخهمجهممنحمنحىنجمنجىنم" + + "ينمىيممبخيتجيتجىتخيتخىتميتمىجميجحىجمىسخىصحيشحيضحيلجيلمييحييجييميمميقمين" + + "حيعميكمينجحمخيلجمكممجحيحجيمجيفميبحيسخينجيصلےقلےاللهاكبرمحمدصلعمرسولعليه" + + "وسلمصلىصلى الله عليه وسلمجل جلالهریال,:!?_{}[]#&*-<>\\$%@ـًـَـُـِـّـْءآ" + + "أؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهويلآلألإلا\x22'/^|~¢£¬¦¥𝅗𝅥𝅘𝅥𝅘𝅥𝅮𝅘𝅥𝅯𝅘𝅥𝅰𝅘𝅥𝅱" + + "𝅘𝅥𝅲𝆹𝅥𝆺𝅥𝆹𝅥𝅮𝆺𝅥𝅮𝆹𝅥𝅯𝆺𝅥𝅯ıȷαεζηκλμνξοστυψ∇∂ϝٮڡٯ0,1,2,3,4,5,6,7,8,9,(a)(b)(c" + + ")(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)(y)(z)〔s" + + "〕wzhvsdppvwcmcmdmrdjほかココサ手字双デ二多解天交映無料前後再新初終生販声吹演投捕一三遊左中右指走打禁空合満有月申割営配〔" + + "本〕〔三〕〔二〕〔安〕〔点〕〔打〕〔盗〕〔勝〕〔敗〕得可丽丸乁你侮侻倂偺備僧像㒞免兔兤具㒹內冗冤仌冬况凵刃㓟刻剆剷㔕勇勉勤勺包匆北卉卑博即卽" + + "卿灰及叟叫叱吆咞吸呈周咢哶唐啓啣善喙喫喳嗂圖嘆圗噑噴切壮城埴堍型堲報墬売壷夆夢奢姬娛娧姘婦㛮嬈嬾寃寘寧寳寿将尢㞁屠屮峀岍嵃嵮嵫嵼巡巢㠯巽帨帽" + + "幩㡢㡼庰庳庶廊廾舁弢㣇形彫㣣徚忍志忹悁㤺㤜悔惇慈慌慎慺憎憲憤憯懞懲懶成戛扝抱拔捐挽拼捨掃揤搢揅掩㨮摩摾撝摷㩬敏敬旣書晉㬙暑㬈㫤冒冕最暜肭䏙朗" + + "望朡杞杓㭉柺枅桒梅梎栟椔㮝楂榣槪檨櫛㰘次歔㱎歲殟殺殻汎沿泍汧洖派海流浩浸涅洴港湮㴳滋滇淹潮濆瀹瀞瀛㶖灊災灷炭煅熜爨爵牐犀犕獺王㺬玥㺸瑇瑜瑱璅" + + "瓊㼛甤甾異瘐㿼䀈直眞真睊䀹瞋䁆䂖硎碌磌䃣祖福秫䄯穀穊穏䈂篆築䈧糒䊠糨糣紀絣䌁緇縂繅䌴䍙罺羕翺者聠聰䏕育脃䐋脾媵舄辞䑫芑芋芝劳花芳芽苦若茝荣莭" + + "茣莽菧著荓菊菌菜䔫蓱蓳蔖蕤䕝䕡䕫虐虜虧虩蚩蚈蜎蛢蝹蜨蝫螆蟡蠁䗹衠衣裗裞䘵裺㒻䚾䛇誠諭變豕貫賁贛起跋趼跰軔輸邔郱鄑鄛鈸鋗鋘鉼鏹鐕開䦕閷䧦雃嶲霣" + + "䩮䩶韠䪲頋頩飢䬳餩馧駂駾䯎鬒鱀鳽䳎䳭鵧䳸麻䵖黹黾鼅鼏鼖鼻" + +var mappingIndex = []uint16{ // 1650 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0001, 0x0004, 0x0005, 0x0008, 0x0009, 0x000a, + 0x000d, 0x0010, 0x0011, 0x0012, 0x0017, 0x001c, 0x0021, 0x0024, + 0x0027, 0x002a, 0x002b, 0x002e, 0x0031, 0x0034, 0x0035, 0x0036, + 0x0037, 0x0038, 0x0039, 0x003c, 0x003f, 0x0042, 0x0045, 0x0048, + 0x004b, 0x004c, 0x004d, 0x0051, 0x0054, 0x0055, 0x005a, 0x005e, + 0x0062, 0x0066, 0x006a, 0x006e, 0x0074, 0x007a, 0x0080, 0x0086, + 0x008c, 0x0092, 0x0098, 0x009e, 0x00a4, 0x00aa, 0x00b0, 0x00b6, + 0x00bc, 0x00c2, 0x00c8, 0x00ce, 0x00d4, 0x00da, 0x00e0, 0x00e6, + // Entry 40 - 7F + 0x00ec, 0x00f2, 0x00f8, 0x00fe, 0x0104, 0x010a, 0x0110, 0x0116, + 0x011c, 0x0122, 0x0128, 0x012e, 0x0137, 0x013d, 0x0146, 0x014c, + 0x0152, 0x0158, 0x015e, 0x0164, 0x016a, 0x0170, 0x0172, 0x0174, + 0x0176, 0x0178, 0x017a, 0x017c, 0x017e, 0x0180, 0x0181, 0x0182, + 0x0183, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, 0x018a, 0x018c, + 0x018d, 0x018e, 0x018f, 0x0191, 0x0193, 0x0195, 0x0197, 0x0199, + 0x019b, 0x019d, 0x019f, 0x01a0, 0x01a2, 0x01a4, 0x01a6, 0x01a8, + 0x01aa, 0x01ac, 0x01ae, 0x01b0, 0x01b1, 0x01b3, 0x01b5, 0x01b6, + // Entry 80 - BF + 0x01b8, 0x01ba, 0x01bc, 0x01be, 0x01c0, 0x01c2, 0x01c4, 0x01c6, + 0x01c8, 0x01ca, 0x01cc, 0x01ce, 0x01d0, 0x01d2, 0x01d4, 0x01d6, + 0x01d8, 0x01da, 0x01dc, 0x01de, 0x01e0, 0x01e2, 0x01e4, 0x01e5, + 0x01e7, 0x01e9, 0x01eb, 0x01ed, 0x01ef, 0x01f1, 0x01f3, 0x01f5, + 0x01f7, 0x01f9, 0x01fb, 0x01fd, 0x0202, 0x0207, 0x020c, 0x0211, + 0x0216, 0x021b, 0x0220, 0x0225, 0x022a, 0x022f, 0x0234, 0x0239, + 0x023e, 0x0243, 0x0248, 0x024d, 0x0252, 0x0257, 0x025c, 0x0261, + 0x0266, 0x026b, 0x0270, 0x0275, 0x027a, 0x027e, 0x0282, 0x0287, + // Entry C0 - FF + 0x0289, 0x028e, 0x0293, 0x0297, 0x029b, 0x02a0, 0x02a5, 0x02aa, + 0x02af, 0x02b1, 0x02b6, 0x02bb, 0x02c0, 0x02c2, 0x02c7, 0x02c8, + 0x02cd, 0x02d1, 0x02d5, 0x02da, 0x02e0, 0x02e9, 0x02ef, 0x02f8, + 0x02fa, 0x02fc, 0x02fe, 0x0300, 0x030c, 0x030d, 0x030e, 0x030f, + 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, + 0x0319, 0x031b, 0x031d, 0x031e, 0x0320, 0x0322, 0x0324, 0x0326, + 0x0328, 0x032a, 0x032c, 0x032e, 0x0330, 0x0335, 0x033a, 0x0340, + 0x0345, 0x034a, 0x034f, 0x0354, 0x0359, 0x035e, 0x0363, 0x0368, + // Entry 100 - 13F + 0x036d, 0x0372, 0x0377, 0x037c, 0x0380, 0x0382, 0x0384, 0x0386, + 0x038a, 0x038c, 0x038e, 0x0393, 0x0399, 0x03a2, 0x03a8, 0x03b1, + 0x03b3, 0x03b5, 0x03b7, 0x03b9, 0x03bb, 0x03bd, 0x03bf, 0x03c1, + 0x03c3, 0x03c5, 0x03c7, 0x03cb, 0x03cf, 0x03d3, 0x03d7, 0x03db, + 0x03df, 0x03e3, 0x03e7, 0x03eb, 0x03ef, 0x03f3, 0x03ff, 0x0401, + 0x0406, 0x0408, 0x040a, 0x040c, 0x040e, 0x040f, 0x0413, 0x0417, + 0x041d, 0x0423, 0x0428, 0x042d, 0x0432, 0x0437, 0x043c, 0x0441, + 0x0446, 0x044b, 0x0450, 0x0455, 0x045a, 0x045f, 0x0464, 0x0469, + // Entry 140 - 17F + 0x046e, 0x0473, 0x0478, 0x047d, 0x0482, 0x0487, 0x048c, 0x0491, + 0x0496, 0x049b, 0x04a0, 0x04a5, 0x04aa, 0x04af, 0x04b4, 0x04bc, + 0x04c4, 0x04c9, 0x04ce, 0x04d3, 0x04d8, 0x04dd, 0x04e2, 0x04e7, + 0x04ec, 0x04f1, 0x04f6, 0x04fb, 0x0500, 0x0505, 0x050a, 0x050f, + 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, + 0x053c, 0x0541, 0x0546, 0x054b, 0x0550, 0x0555, 0x055a, 0x055f, + 0x0564, 0x0569, 0x056e, 0x0573, 0x0578, 0x057a, 0x057c, 0x057e, + 0x0580, 0x0582, 0x0584, 0x0586, 0x0588, 0x058a, 0x058c, 0x058e, + // Entry 180 - 1BF + 0x0590, 0x0592, 0x0594, 0x0596, 0x059c, 0x05a2, 0x05a4, 0x05a6, + 0x05a8, 0x05aa, 0x05ac, 0x05ae, 0x05b0, 0x05b2, 0x05b4, 0x05b6, + 0x05b8, 0x05ba, 0x05bc, 0x05be, 0x05c0, 0x05c4, 0x05c8, 0x05cc, + 0x05d0, 0x05d4, 0x05d8, 0x05dc, 0x05e0, 0x05e4, 0x05e9, 0x05ee, + 0x05f3, 0x05f5, 0x05f7, 0x05fd, 0x0609, 0x0615, 0x0621, 0x062a, + 0x0636, 0x063f, 0x0648, 0x0657, 0x0663, 0x066c, 0x0675, 0x067e, + 0x068a, 0x0696, 0x069f, 0x06a8, 0x06ae, 0x06b7, 0x06c3, 0x06cf, + 0x06d5, 0x06e4, 0x06f6, 0x0705, 0x070e, 0x071d, 0x072c, 0x0738, + // Entry 1C0 - 1FF + 0x0741, 0x074a, 0x0753, 0x075f, 0x076e, 0x077a, 0x0783, 0x078c, + 0x0795, 0x079b, 0x07a1, 0x07a7, 0x07ad, 0x07b6, 0x07bf, 0x07ce, + 0x07d7, 0x07e3, 0x07f2, 0x07fb, 0x0801, 0x0807, 0x0816, 0x0822, + 0x0831, 0x083a, 0x0849, 0x084f, 0x0858, 0x0861, 0x086a, 0x0873, + 0x087c, 0x0888, 0x0891, 0x0897, 0x08a0, 0x08a9, 0x08b2, 0x08be, + 0x08c7, 0x08d0, 0x08d9, 0x08e8, 0x08f4, 0x08fa, 0x0909, 0x090f, + 0x091b, 0x0927, 0x0930, 0x0939, 0x0942, 0x094e, 0x0954, 0x095d, + 0x0969, 0x096f, 0x097e, 0x0987, 0x098b, 0x098f, 0x0993, 0x0997, + // Entry 200 - 23F + 0x099b, 0x099f, 0x09a3, 0x09a7, 0x09ab, 0x09af, 0x09b4, 0x09b9, + 0x09be, 0x09c3, 0x09c8, 0x09cd, 0x09d2, 0x09d7, 0x09dc, 0x09e1, + 0x09e6, 0x09eb, 0x09f0, 0x09f5, 0x09fa, 0x09fc, 0x09fe, 0x0a00, + 0x0a02, 0x0a04, 0x0a06, 0x0a0c, 0x0a12, 0x0a18, 0x0a1e, 0x0a2a, + 0x0a2c, 0x0a2e, 0x0a30, 0x0a32, 0x0a34, 0x0a36, 0x0a38, 0x0a3c, + 0x0a3e, 0x0a40, 0x0a42, 0x0a44, 0x0a46, 0x0a48, 0x0a4a, 0x0a4c, + 0x0a4e, 0x0a50, 0x0a52, 0x0a54, 0x0a56, 0x0a58, 0x0a5a, 0x0a5f, + 0x0a65, 0x0a6c, 0x0a74, 0x0a76, 0x0a78, 0x0a7a, 0x0a7c, 0x0a7e, + // Entry 240 - 27F + 0x0a80, 0x0a82, 0x0a84, 0x0a86, 0x0a88, 0x0a8a, 0x0a8c, 0x0a8e, + 0x0a90, 0x0a96, 0x0a98, 0x0a9a, 0x0a9c, 0x0a9e, 0x0aa0, 0x0aa2, + 0x0aa4, 0x0aa6, 0x0aa8, 0x0aaa, 0x0aac, 0x0aae, 0x0ab0, 0x0ab2, + 0x0ab4, 0x0ab9, 0x0abe, 0x0ac2, 0x0ac6, 0x0aca, 0x0ace, 0x0ad2, + 0x0ad6, 0x0ada, 0x0ade, 0x0ae2, 0x0ae7, 0x0aec, 0x0af1, 0x0af6, + 0x0afb, 0x0b00, 0x0b05, 0x0b0a, 0x0b0f, 0x0b14, 0x0b19, 0x0b1e, + 0x0b23, 0x0b28, 0x0b2d, 0x0b32, 0x0b37, 0x0b3c, 0x0b41, 0x0b46, + 0x0b4b, 0x0b50, 0x0b52, 0x0b54, 0x0b56, 0x0b58, 0x0b5a, 0x0b5c, + // Entry 280 - 2BF + 0x0b5e, 0x0b62, 0x0b66, 0x0b6a, 0x0b6e, 0x0b72, 0x0b76, 0x0b7a, + 0x0b7c, 0x0b7e, 0x0b80, 0x0b82, 0x0b86, 0x0b8a, 0x0b8e, 0x0b92, + 0x0b96, 0x0b9a, 0x0b9e, 0x0ba0, 0x0ba2, 0x0ba4, 0x0ba6, 0x0ba8, + 0x0baa, 0x0bac, 0x0bb0, 0x0bb4, 0x0bba, 0x0bc0, 0x0bc4, 0x0bc8, + 0x0bcc, 0x0bd0, 0x0bd4, 0x0bd8, 0x0bdc, 0x0be0, 0x0be4, 0x0be8, + 0x0bec, 0x0bf0, 0x0bf4, 0x0bf8, 0x0bfc, 0x0c00, 0x0c04, 0x0c08, + 0x0c0c, 0x0c10, 0x0c14, 0x0c18, 0x0c1c, 0x0c20, 0x0c24, 0x0c28, + 0x0c2c, 0x0c30, 0x0c34, 0x0c36, 0x0c38, 0x0c3a, 0x0c3c, 0x0c3e, + // Entry 2C0 - 2FF + 0x0c40, 0x0c42, 0x0c44, 0x0c46, 0x0c48, 0x0c4a, 0x0c4c, 0x0c4e, + 0x0c50, 0x0c52, 0x0c54, 0x0c56, 0x0c58, 0x0c5a, 0x0c5c, 0x0c5e, + 0x0c60, 0x0c62, 0x0c64, 0x0c66, 0x0c68, 0x0c6a, 0x0c6c, 0x0c6e, + 0x0c70, 0x0c72, 0x0c74, 0x0c76, 0x0c78, 0x0c7a, 0x0c7c, 0x0c7e, + 0x0c80, 0x0c82, 0x0c86, 0x0c8a, 0x0c8e, 0x0c92, 0x0c96, 0x0c9a, + 0x0c9e, 0x0ca2, 0x0ca4, 0x0ca8, 0x0cac, 0x0cb0, 0x0cb4, 0x0cb8, + 0x0cbc, 0x0cc0, 0x0cc4, 0x0cc8, 0x0ccc, 0x0cd0, 0x0cd4, 0x0cd8, + 0x0cdc, 0x0ce0, 0x0ce4, 0x0ce8, 0x0cec, 0x0cf0, 0x0cf4, 0x0cf8, + // Entry 300 - 33F + 0x0cfc, 0x0d00, 0x0d04, 0x0d08, 0x0d0c, 0x0d10, 0x0d14, 0x0d18, + 0x0d1c, 0x0d20, 0x0d24, 0x0d28, 0x0d2c, 0x0d30, 0x0d34, 0x0d38, + 0x0d3c, 0x0d40, 0x0d44, 0x0d48, 0x0d4c, 0x0d50, 0x0d54, 0x0d58, + 0x0d5c, 0x0d60, 0x0d64, 0x0d68, 0x0d6c, 0x0d70, 0x0d74, 0x0d78, + 0x0d7c, 0x0d80, 0x0d84, 0x0d88, 0x0d8c, 0x0d90, 0x0d94, 0x0d98, + 0x0d9c, 0x0da0, 0x0da4, 0x0da8, 0x0dac, 0x0db0, 0x0db4, 0x0db8, + 0x0dbc, 0x0dc0, 0x0dc4, 0x0dc8, 0x0dcc, 0x0dd0, 0x0dd4, 0x0dd8, + 0x0ddc, 0x0de0, 0x0de4, 0x0de8, 0x0dec, 0x0df0, 0x0df4, 0x0df8, + // Entry 340 - 37F + 0x0dfc, 0x0e00, 0x0e04, 0x0e08, 0x0e0c, 0x0e10, 0x0e14, 0x0e18, + 0x0e1d, 0x0e22, 0x0e27, 0x0e2c, 0x0e31, 0x0e36, 0x0e3a, 0x0e3e, + 0x0e42, 0x0e46, 0x0e4a, 0x0e4e, 0x0e52, 0x0e56, 0x0e5a, 0x0e5e, + 0x0e62, 0x0e66, 0x0e6a, 0x0e6e, 0x0e72, 0x0e76, 0x0e7a, 0x0e7e, + 0x0e82, 0x0e86, 0x0e8a, 0x0e8e, 0x0e92, 0x0e96, 0x0e9a, 0x0e9e, + 0x0ea2, 0x0ea6, 0x0eaa, 0x0eae, 0x0eb2, 0x0eb6, 0x0ebc, 0x0ec2, + 0x0ec8, 0x0ecc, 0x0ed0, 0x0ed4, 0x0ed8, 0x0edc, 0x0ee0, 0x0ee4, + 0x0ee8, 0x0eec, 0x0ef0, 0x0ef4, 0x0ef8, 0x0efc, 0x0f00, 0x0f04, + // Entry 380 - 3BF + 0x0f08, 0x0f0c, 0x0f10, 0x0f14, 0x0f18, 0x0f1c, 0x0f20, 0x0f24, + 0x0f28, 0x0f2c, 0x0f30, 0x0f34, 0x0f38, 0x0f3e, 0x0f44, 0x0f4a, + 0x0f50, 0x0f56, 0x0f5c, 0x0f62, 0x0f68, 0x0f6e, 0x0f74, 0x0f7a, + 0x0f80, 0x0f86, 0x0f8c, 0x0f92, 0x0f98, 0x0f9e, 0x0fa4, 0x0faa, + 0x0fb0, 0x0fb6, 0x0fbc, 0x0fc2, 0x0fc8, 0x0fce, 0x0fd4, 0x0fda, + 0x0fe0, 0x0fe6, 0x0fec, 0x0ff2, 0x0ff8, 0x0ffe, 0x1004, 0x100a, + 0x1010, 0x1016, 0x101c, 0x1022, 0x1028, 0x102e, 0x1034, 0x103a, + 0x1040, 0x1046, 0x104c, 0x1052, 0x1058, 0x105e, 0x1064, 0x106a, + // Entry 3C0 - 3FF + 0x1070, 0x1076, 0x107c, 0x1082, 0x1088, 0x108e, 0x1094, 0x109a, + 0x10a0, 0x10a6, 0x10ac, 0x10b2, 0x10b8, 0x10be, 0x10c4, 0x10ca, + 0x10d0, 0x10d6, 0x10dc, 0x10e2, 0x10e8, 0x10ee, 0x10f4, 0x10fa, + 0x1100, 0x1106, 0x110c, 0x1112, 0x1118, 0x111e, 0x1124, 0x112a, + 0x1130, 0x1136, 0x113c, 0x1142, 0x1148, 0x114e, 0x1154, 0x115a, + 0x1160, 0x1166, 0x116c, 0x1172, 0x1178, 0x1180, 0x1188, 0x1190, + 0x1198, 0x11a0, 0x11a8, 0x11b0, 0x11b6, 0x11d7, 0x11e6, 0x11ee, + 0x11ef, 0x11f0, 0x11f1, 0x11f2, 0x11f3, 0x11f4, 0x11f5, 0x11f6, + // Entry 400 - 43F + 0x11f7, 0x11f8, 0x11f9, 0x11fa, 0x11fb, 0x11fc, 0x11fd, 0x11fe, + 0x11ff, 0x1200, 0x1201, 0x1205, 0x1209, 0x120d, 0x1211, 0x1215, + 0x1219, 0x121b, 0x121d, 0x121f, 0x1221, 0x1223, 0x1225, 0x1227, + 0x1229, 0x122b, 0x122d, 0x122f, 0x1231, 0x1233, 0x1235, 0x1237, + 0x1239, 0x123b, 0x123d, 0x123f, 0x1241, 0x1243, 0x1245, 0x1247, + 0x1249, 0x124b, 0x124d, 0x124f, 0x1251, 0x1253, 0x1255, 0x1257, + 0x1259, 0x125b, 0x125d, 0x125f, 0x1263, 0x1267, 0x126b, 0x126f, + 0x1270, 0x1271, 0x1272, 0x1273, 0x1274, 0x1275, 0x1277, 0x1279, + // Entry 440 - 47F + 0x127b, 0x127d, 0x127f, 0x1287, 0x128f, 0x129b, 0x12a7, 0x12b3, + 0x12bf, 0x12cb, 0x12d3, 0x12db, 0x12e7, 0x12f3, 0x12ff, 0x130b, + 0x130d, 0x130f, 0x1311, 0x1313, 0x1315, 0x1317, 0x1319, 0x131b, + 0x131d, 0x131f, 0x1321, 0x1323, 0x1325, 0x1327, 0x1329, 0x132b, + 0x132e, 0x1331, 0x1333, 0x1335, 0x1337, 0x1339, 0x133b, 0x133d, + 0x133f, 0x1341, 0x1343, 0x1345, 0x1347, 0x1349, 0x134b, 0x134d, + 0x1350, 0x1353, 0x1356, 0x1359, 0x135c, 0x135f, 0x1362, 0x1365, + 0x1368, 0x136b, 0x136e, 0x1371, 0x1374, 0x1377, 0x137a, 0x137d, + // Entry 480 - 4BF + 0x1380, 0x1383, 0x1386, 0x1389, 0x138c, 0x138f, 0x1392, 0x1395, + 0x1398, 0x139b, 0x13a2, 0x13a4, 0x13a6, 0x13a8, 0x13ab, 0x13ad, + 0x13af, 0x13b1, 0x13b3, 0x13b5, 0x13bb, 0x13c1, 0x13c4, 0x13c7, + 0x13ca, 0x13cd, 0x13d0, 0x13d3, 0x13d6, 0x13d9, 0x13dc, 0x13df, + 0x13e2, 0x13e5, 0x13e8, 0x13eb, 0x13ee, 0x13f1, 0x13f4, 0x13f7, + 0x13fa, 0x13fd, 0x1400, 0x1403, 0x1406, 0x1409, 0x140c, 0x140f, + 0x1412, 0x1415, 0x1418, 0x141b, 0x141e, 0x1421, 0x1424, 0x1427, + 0x142a, 0x142d, 0x1430, 0x1433, 0x1436, 0x1439, 0x143c, 0x143f, + // Entry 4C0 - 4FF + 0x1442, 0x1445, 0x1448, 0x1451, 0x145a, 0x1463, 0x146c, 0x1475, + 0x147e, 0x1487, 0x1490, 0x1499, 0x149c, 0x149f, 0x14a2, 0x14a5, + 0x14a8, 0x14ab, 0x14ae, 0x14b1, 0x14b4, 0x14b7, 0x14ba, 0x14bd, + 0x14c0, 0x14c3, 0x14c6, 0x14c9, 0x14cc, 0x14cf, 0x14d2, 0x14d5, + 0x14d8, 0x14db, 0x14de, 0x14e1, 0x14e4, 0x14e7, 0x14ea, 0x14ed, + 0x14f0, 0x14f3, 0x14f6, 0x14f9, 0x14fc, 0x14ff, 0x1502, 0x1505, + 0x1508, 0x150b, 0x150e, 0x1511, 0x1514, 0x1517, 0x151a, 0x151d, + 0x1520, 0x1523, 0x1526, 0x1529, 0x152c, 0x152f, 0x1532, 0x1535, + // Entry 500 - 53F + 0x1538, 0x153b, 0x153e, 0x1541, 0x1544, 0x1547, 0x154a, 0x154d, + 0x1550, 0x1553, 0x1556, 0x1559, 0x155c, 0x155f, 0x1562, 0x1565, + 0x1568, 0x156b, 0x156e, 0x1571, 0x1574, 0x1577, 0x157a, 0x157d, + 0x1580, 0x1583, 0x1586, 0x1589, 0x158c, 0x158f, 0x1592, 0x1595, + 0x1598, 0x159b, 0x159e, 0x15a1, 0x15a4, 0x15a7, 0x15aa, 0x15ad, + 0x15b0, 0x15b3, 0x15b6, 0x15b9, 0x15bc, 0x15bf, 0x15c2, 0x15c5, + 0x15c8, 0x15cb, 0x15ce, 0x15d1, 0x15d4, 0x15d7, 0x15da, 0x15dd, + 0x15e0, 0x15e3, 0x15e6, 0x15e9, 0x15ec, 0x15ef, 0x15f2, 0x15f5, + // Entry 540 - 57F + 0x15f8, 0x15fb, 0x15fe, 0x1601, 0x1604, 0x1607, 0x160a, 0x160d, + 0x1610, 0x1613, 0x1616, 0x1619, 0x161c, 0x161f, 0x1622, 0x1625, + 0x1628, 0x162b, 0x162e, 0x1631, 0x1634, 0x1637, 0x163a, 0x163d, + 0x1640, 0x1643, 0x1646, 0x1649, 0x164c, 0x164f, 0x1652, 0x1655, + 0x1658, 0x165b, 0x165e, 0x1661, 0x1664, 0x1667, 0x166a, 0x166d, + 0x1670, 0x1673, 0x1676, 0x1679, 0x167c, 0x167f, 0x1682, 0x1685, + 0x1688, 0x168b, 0x168e, 0x1691, 0x1694, 0x1697, 0x169a, 0x169d, + 0x16a0, 0x16a3, 0x16a6, 0x16a9, 0x16ac, 0x16af, 0x16b2, 0x16b5, + // Entry 580 - 5BF + 0x16b8, 0x16bb, 0x16be, 0x16c1, 0x16c4, 0x16c7, 0x16ca, 0x16cd, + 0x16d0, 0x16d3, 0x16d6, 0x16d9, 0x16dc, 0x16df, 0x16e2, 0x16e5, + 0x16e8, 0x16eb, 0x16ee, 0x16f1, 0x16f4, 0x16f7, 0x16fa, 0x16fd, + 0x1700, 0x1703, 0x1706, 0x1709, 0x170c, 0x170f, 0x1712, 0x1715, + 0x1718, 0x171b, 0x171e, 0x1721, 0x1724, 0x1727, 0x172a, 0x172d, + 0x1730, 0x1733, 0x1736, 0x1739, 0x173c, 0x173f, 0x1742, 0x1745, + 0x1748, 0x174b, 0x174e, 0x1751, 0x1754, 0x1757, 0x175a, 0x175d, + 0x1760, 0x1763, 0x1766, 0x1769, 0x176c, 0x176f, 0x1772, 0x1775, + // Entry 5C0 - 5FF + 0x1778, 0x177b, 0x177e, 0x1781, 0x1784, 0x1787, 0x178a, 0x178d, + 0x1790, 0x1793, 0x1796, 0x1799, 0x179c, 0x179f, 0x17a2, 0x17a5, + 0x17a8, 0x17ab, 0x17ae, 0x17b1, 0x17b4, 0x17b7, 0x17ba, 0x17bd, + 0x17c0, 0x17c3, 0x17c6, 0x17c9, 0x17cc, 0x17cf, 0x17d2, 0x17d5, + 0x17d8, 0x17db, 0x17de, 0x17e1, 0x17e4, 0x17e7, 0x17ea, 0x17ed, + 0x17f0, 0x17f3, 0x17f6, 0x17f9, 0x17fc, 0x17ff, 0x1802, 0x1805, + 0x1808, 0x180b, 0x180e, 0x1811, 0x1814, 0x1817, 0x181a, 0x181d, + 0x1820, 0x1823, 0x1826, 0x1829, 0x182c, 0x182f, 0x1832, 0x1835, + // Entry 600 - 63F + 0x1838, 0x183b, 0x183e, 0x1841, 0x1844, 0x1847, 0x184a, 0x184d, + 0x1850, 0x1853, 0x1856, 0x1859, 0x185c, 0x185f, 0x1862, 0x1865, + 0x1868, 0x186b, 0x186e, 0x1871, 0x1874, 0x1877, 0x187a, 0x187d, + 0x1880, 0x1883, 0x1886, 0x1889, 0x188c, 0x188f, 0x1892, 0x1895, + 0x1898, 0x189b, 0x189e, 0x18a1, 0x18a4, 0x18a7, 0x18aa, 0x18ad, + 0x18b0, 0x18b3, 0x18b6, 0x18b9, 0x18bc, 0x18bf, 0x18c2, 0x18c5, + 0x18c8, 0x18cb, 0x18ce, 0x18d1, 0x18d4, 0x18d7, 0x18da, 0x18dd, + 0x18e0, 0x18e3, 0x18e6, 0x18e9, 0x18ec, 0x18ef, 0x18f2, 0x18f5, + // Entry 640 - 67F + 0x18f8, 0x18fb, 0x18fe, 0x1901, 0x1904, 0x1907, 0x190a, 0x190d, + 0x1910, 0x1913, 0x1916, 0x1919, 0x191c, 0x191f, 0x1922, 0x1925, + 0x1928, 0x192b, 0x192e, 0x1931, 0x1934, 0x1937, 0x193a, 0x193d, + 0x1940, 0x1943, 0x1946, 0x1949, 0x194c, 0x194f, 0x1952, 0x1955, + 0x1958, 0x195b, 0x195e, 0x1961, 0x1964, 0x1967, 0x196a, 0x196d, + 0x1970, 0x1973, 0x1976, 0x1979, 0x197c, 0x197f, 0x1982, 0x1985, + 0x1988, 0x198b, +} // Size: 3324 bytes var xorData string = "" + // Size: 4862 bytes "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" + @@ -547,7 +690,7 @@ func (t *idnaTrie) lookupStringUnsafe(s string) uint16 { return 0 } -// idnaTrie. Total size: 30288 bytes (29.58 KiB). Checksum: c0cd84404a2f6f19. +// idnaTrie. Total size: 30196 bytes (29.49 KiB). Checksum: e2ae95a945f04016. type idnaTrie struct{} func newIdnaTrie(i int) *idnaTrie { @@ -600,11 +743,11 @@ var idnaValues = [8192]uint16{ 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018, - 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018, - 0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a, - 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005, - 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018, - 0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018, + 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x0012, 0xe9: 0x0018, + 0xea: 0x0019, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x0022, + 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0029, 0xf3: 0x0031, 0xf4: 0x003a, 0xf5: 0x0005, + 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x0042, 0xf9: 0x0049, 0xfa: 0x0051, 0xfb: 0x0018, + 0xfc: 0x0059, 0xfd: 0x0061, 0xfe: 0x0069, 0xff: 0x0018, // Block 0x4, offset 0x100 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008, 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008, @@ -614,12 +757,12 @@ var idnaValues = [8192]uint16{ 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008, 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008, 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008, - 0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, + 0x130: 0x0071, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d, - 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199, + 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0079, // Block 0x5, offset 0x140 - 0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, - 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008, + 0x140: 0x0079, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, + 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x0081, 0x14a: 0xe00d, 0x14b: 0x0008, 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008, 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008, 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008, @@ -628,7 +771,7 @@ var idnaValues = [8192]uint16{ 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008, 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008, 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d, - 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9, + 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x0089, // Block 0x6, offset 0x180 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008, 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d, @@ -642,8 +785,8 @@ var idnaValues = [8192]uint16{ 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008, 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008, // Block 0x7, offset 0x1c0 - 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9, - 0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, + 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x0091, 0x1c5: 0x0091, + 0x1c6: 0x0091, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d, 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d, 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008, @@ -663,22 +806,22 @@ var idnaValues = [8192]uint16{ 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008, 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008, 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008, - 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d, - 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008, + 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0099, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x00a1, 0x23f: 0x0008, // Block 0x9, offset 0x240 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018, 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008, 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008, 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018, - 0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a, - 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369, + 0x258: 0x00d2, 0x259: 0x00da, 0x25a: 0x00e2, 0x25b: 0x00ea, 0x25c: 0x00f2, 0x25d: 0x00fa, + 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0101, 0x262: 0x0089, 0x263: 0x0109, 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018, 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018, 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018, 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, // Block 0xa, offset 0x280 - 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d, + 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0111, 0x285: 0x040d, 0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308, 0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308, 0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308, @@ -687,10 +830,10 @@ var idnaValues = [8192]uint16{ 0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308, 0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308, 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, - 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008, - 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, + 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x011a, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x0122, 0x2bf: 0x043d, // Block 0xb, offset 0x2c0 - 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x003a, 0x2c5: 0x012a, 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040, 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105, 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105, @@ -782,8 +925,8 @@ var idnaValues = [8192]uint16{ 0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808, 0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808, 0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08, - 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0429, - 0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, + 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0139, + 0x4b6: 0x0141, 0x4b7: 0x0149, 0x4b8: 0x0151, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, 0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08, // Block 0x13, offset 0x4c0 0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08, @@ -826,8 +969,8 @@ var idnaValues = [8192]uint16{ 0x586: 0x3308, 0x587: 0x3308, 0x588: 0x3308, 0x589: 0x3008, 0x58a: 0x3008, 0x58b: 0x3008, 0x58c: 0x3008, 0x58d: 0x3b08, 0x58e: 0x3008, 0x58f: 0x3008, 0x590: 0x0008, 0x591: 0x3308, 0x592: 0x3308, 0x593: 0x3308, 0x594: 0x3308, 0x595: 0x3308, 0x596: 0x3308, 0x597: 0x3308, - 0x598: 0x04c9, 0x599: 0x0501, 0x59a: 0x0539, 0x59b: 0x0571, 0x59c: 0x05a9, 0x59d: 0x05e1, - 0x59e: 0x0619, 0x59f: 0x0651, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x3308, 0x5a3: 0x3308, + 0x598: 0x0159, 0x599: 0x0161, 0x59a: 0x0169, 0x59b: 0x0171, 0x59c: 0x0179, 0x59d: 0x0181, + 0x59e: 0x0189, 0x59f: 0x0191, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x3308, 0x5a3: 0x3308, 0x5a4: 0x0018, 0x5a5: 0x0018, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008, 0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008, 0x5b0: 0x0018, 0x5b1: 0x0008, 0x5b2: 0x0008, 0x5b3: 0x0008, 0x5b4: 0x0008, 0x5b5: 0x0008, @@ -850,8 +993,8 @@ var idnaValues = [8192]uint16{ 0x606: 0x0040, 0x607: 0x3008, 0x608: 0x3008, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x3008, 0x60c: 0x3008, 0x60d: 0x3b08, 0x60e: 0x0008, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x0040, 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x3008, - 0x618: 0x0040, 0x619: 0x0040, 0x61a: 0x0040, 0x61b: 0x0040, 0x61c: 0x0689, 0x61d: 0x06c1, - 0x61e: 0x0040, 0x61f: 0x06f9, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x3308, 0x623: 0x3308, + 0x618: 0x0040, 0x619: 0x0040, 0x61a: 0x0040, 0x61b: 0x0040, 0x61c: 0x0199, 0x61d: 0x01a1, + 0x61e: 0x0040, 0x61f: 0x01a9, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x3308, 0x623: 0x3308, 0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008, 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, 0x630: 0x0008, 0x631: 0x0008, 0x632: 0x0018, 0x633: 0x0018, 0x634: 0x0018, 0x635: 0x0018, @@ -866,16 +1009,16 @@ var idnaValues = [8192]uint16{ 0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008, 0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040, 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, - 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0731, 0x674: 0x0040, 0x675: 0x0008, - 0x676: 0x0769, 0x677: 0x0040, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, + 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x01b1, 0x674: 0x0040, 0x675: 0x0008, + 0x676: 0x01b9, 0x677: 0x0040, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, 0x67c: 0x3308, 0x67d: 0x0040, 0x67e: 0x3008, 0x67f: 0x3008, // Block 0x1a, offset 0x680 0x680: 0x3008, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x0040, 0x684: 0x0040, 0x685: 0x0040, 0x686: 0x0040, 0x687: 0x3308, 0x688: 0x3308, 0x689: 0x0040, 0x68a: 0x0040, 0x68b: 0x3308, 0x68c: 0x3308, 0x68d: 0x3b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0040, 0x691: 0x3308, 0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040, - 0x698: 0x0040, 0x699: 0x07a1, 0x69a: 0x07d9, 0x69b: 0x0811, 0x69c: 0x0008, 0x69d: 0x0040, - 0x69e: 0x0849, 0x69f: 0x0040, 0x6a0: 0x0040, 0x6a1: 0x0040, 0x6a2: 0x0040, 0x6a3: 0x0040, + 0x698: 0x0040, 0x699: 0x01c1, 0x69a: 0x01c9, 0x69b: 0x01d1, 0x69c: 0x0008, 0x69d: 0x0040, + 0x69e: 0x01d9, 0x69f: 0x0040, 0x6a0: 0x0040, 0x6a1: 0x0040, 0x6a2: 0x0040, 0x6a3: 0x0040, 0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008, 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, 0x6b0: 0x3308, 0x6b1: 0x3308, 0x6b2: 0x0008, 0x6b3: 0x0008, 0x6b4: 0x0008, 0x6b5: 0x3308, @@ -922,7 +1065,7 @@ var idnaValues = [8192]uint16{ 0x786: 0x0040, 0x787: 0x3008, 0x788: 0x3008, 0x789: 0x0040, 0x78a: 0x0040, 0x78b: 0x3008, 0x78c: 0x3008, 0x78d: 0x3b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040, 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x3308, 0x796: 0x3308, 0x797: 0x3008, - 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x0881, 0x79d: 0x08b9, + 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x01e1, 0x79d: 0x01e9, 0x79e: 0x0040, 0x79f: 0x0008, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x3308, 0x7a3: 0x3308, 0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008, 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008, @@ -998,32 +1141,32 @@ var idnaValues = [8192]uint16{ 0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0008, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008, 0x924: 0x0040, 0x925: 0x0008, 0x926: 0x0040, 0x927: 0x0008, 0x928: 0x0008, 0x929: 0x0008, 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0008, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008, - 0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x0929, 0x934: 0x3308, 0x935: 0x3308, + 0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x01f9, 0x934: 0x3308, 0x935: 0x3308, 0x936: 0x3308, 0x937: 0x3308, 0x938: 0x3308, 0x939: 0x3308, 0x93a: 0x3b08, 0x93b: 0x3308, 0x93c: 0x3308, 0x93d: 0x0008, 0x93e: 0x0040, 0x93f: 0x0040, // Block 0x25, offset 0x940 - 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x09d1, 0x944: 0x0008, 0x945: 0x0008, + 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0211, 0x944: 0x0008, 0x945: 0x0008, 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0040, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008, - 0x94c: 0x0008, 0x94d: 0x0a09, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, - 0x952: 0x0a41, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0a79, - 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0ab1, 0x95d: 0x0008, + 0x94c: 0x0008, 0x94d: 0x0219, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, + 0x952: 0x0221, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0229, + 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0231, 0x95d: 0x0008, 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, - 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0ae9, + 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0239, 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0040, 0x96e: 0x0040, 0x96f: 0x0040, - 0x970: 0x0040, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x0b21, 0x974: 0x3308, 0x975: 0x0b59, - 0x976: 0x0b91, 0x977: 0x0bc9, 0x978: 0x0c19, 0x979: 0x0c51, 0x97a: 0x3308, 0x97b: 0x3308, + 0x970: 0x0040, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x0241, 0x974: 0x3308, 0x975: 0x0249, + 0x976: 0x0251, 0x977: 0x0259, 0x978: 0x0261, 0x979: 0x0269, 0x97a: 0x3308, 0x97b: 0x3308, 0x97c: 0x3308, 0x97d: 0x3308, 0x97e: 0x3308, 0x97f: 0x3008, // Block 0x26, offset 0x980 - 0x980: 0x3308, 0x981: 0x0ca1, 0x982: 0x3308, 0x983: 0x3308, 0x984: 0x3b08, 0x985: 0x0018, + 0x980: 0x3308, 0x981: 0x0271, 0x982: 0x3308, 0x983: 0x3308, 0x984: 0x3b08, 0x985: 0x0018, 0x986: 0x3308, 0x987: 0x3308, 0x988: 0x0008, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008, 0x98c: 0x0008, 0x98d: 0x3308, 0x98e: 0x3308, 0x98f: 0x3308, 0x990: 0x3308, 0x991: 0x3308, - 0x992: 0x3308, 0x993: 0x0cd9, 0x994: 0x3308, 0x995: 0x3308, 0x996: 0x3308, 0x997: 0x3308, - 0x998: 0x0040, 0x999: 0x3308, 0x99a: 0x3308, 0x99b: 0x3308, 0x99c: 0x3308, 0x99d: 0x0d11, - 0x99e: 0x3308, 0x99f: 0x3308, 0x9a0: 0x3308, 0x9a1: 0x3308, 0x9a2: 0x0d49, 0x9a3: 0x3308, - 0x9a4: 0x3308, 0x9a5: 0x3308, 0x9a6: 0x3308, 0x9a7: 0x0d81, 0x9a8: 0x3308, 0x9a9: 0x3308, - 0x9aa: 0x3308, 0x9ab: 0x3308, 0x9ac: 0x0db9, 0x9ad: 0x3308, 0x9ae: 0x3308, 0x9af: 0x3308, + 0x992: 0x3308, 0x993: 0x0279, 0x994: 0x3308, 0x995: 0x3308, 0x996: 0x3308, 0x997: 0x3308, + 0x998: 0x0040, 0x999: 0x3308, 0x99a: 0x3308, 0x99b: 0x3308, 0x99c: 0x3308, 0x99d: 0x0281, + 0x99e: 0x3308, 0x99f: 0x3308, 0x9a0: 0x3308, 0x9a1: 0x3308, 0x9a2: 0x0289, 0x9a3: 0x3308, + 0x9a4: 0x3308, 0x9a5: 0x3308, 0x9a6: 0x3308, 0x9a7: 0x0291, 0x9a8: 0x3308, 0x9a9: 0x3308, + 0x9aa: 0x3308, 0x9ab: 0x3308, 0x9ac: 0x0299, 0x9ad: 0x3308, 0x9ae: 0x3308, 0x9af: 0x3308, 0x9b0: 0x3308, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x3308, 0x9b4: 0x3308, 0x9b5: 0x3308, - 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x0df1, 0x9ba: 0x3308, 0x9bb: 0x3308, + 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x02a1, 0x9ba: 0x3308, 0x9bb: 0x3308, 0x9bc: 0x3308, 0x9bd: 0x0040, 0x9be: 0x0018, 0x9bf: 0x0018, // Block 0x27, offset 0x9c0 0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008, @@ -1033,34 +1176,34 @@ var idnaValues = [8192]uint16{ 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x0008, 0x9dc: 0x0008, 0x9dd: 0x0008, 0x9de: 0x0008, 0x9df: 0x0008, 0x9e0: 0x0008, 0x9e1: 0x0008, 0x9e2: 0x0008, 0x9e3: 0x0008, 0x9e4: 0x0008, 0x9e5: 0x0008, 0x9e6: 0x0008, 0x9e7: 0x0008, 0x9e8: 0x0008, 0x9e9: 0x0008, - 0x9ea: 0x0008, 0x9eb: 0x0008, 0x9ec: 0x0039, 0x9ed: 0x0ed1, 0x9ee: 0x0ee9, 0x9ef: 0x0008, - 0x9f0: 0x0ef9, 0x9f1: 0x0f09, 0x9f2: 0x0f19, 0x9f3: 0x0f31, 0x9f4: 0x0249, 0x9f5: 0x0f41, - 0x9f6: 0x0259, 0x9f7: 0x0f51, 0x9f8: 0x0359, 0x9f9: 0x0f61, 0x9fa: 0x0f71, 0x9fb: 0x0008, - 0x9fc: 0x00d9, 0x9fd: 0x0f81, 0x9fe: 0x0f99, 0x9ff: 0x0269, + 0x9ea: 0x0008, 0x9eb: 0x0008, 0x9ec: 0x0019, 0x9ed: 0x02e1, 0x9ee: 0x02e9, 0x9ef: 0x0008, + 0x9f0: 0x02f1, 0x9f1: 0x02f9, 0x9f2: 0x0301, 0x9f3: 0x0309, 0x9f4: 0x00a9, 0x9f5: 0x0311, + 0x9f6: 0x00b1, 0x9f7: 0x0319, 0x9f8: 0x0101, 0x9f9: 0x0321, 0x9fa: 0x0329, 0x9fb: 0x0008, + 0x9fc: 0x0051, 0x9fd: 0x0331, 0x9fe: 0x0339, 0x9ff: 0x00b9, // Block 0x28, offset 0xa00 - 0xa00: 0x0fa9, 0xa01: 0x0fb9, 0xa02: 0x0279, 0xa03: 0x0039, 0xa04: 0x0fc9, 0xa05: 0x0fe1, - 0xa06: 0x05b5, 0xa07: 0x0ee9, 0xa08: 0x0ef9, 0xa09: 0x0f09, 0xa0a: 0x0ff9, 0xa0b: 0x1011, - 0xa0c: 0x1029, 0xa0d: 0x0f31, 0xa0e: 0x0008, 0xa0f: 0x0f51, 0xa10: 0x0f61, 0xa11: 0x1041, - 0xa12: 0x00d9, 0xa13: 0x1059, 0xa14: 0x05cd, 0xa15: 0x05cd, 0xa16: 0x0f99, 0xa17: 0x0fa9, - 0xa18: 0x0fb9, 0xa19: 0x05b5, 0xa1a: 0x1071, 0xa1b: 0x1089, 0xa1c: 0x05e5, 0xa1d: 0x1099, - 0xa1e: 0x10b1, 0xa1f: 0x10c9, 0xa20: 0x10e1, 0xa21: 0x10f9, 0xa22: 0x0f41, 0xa23: 0x0269, - 0xa24: 0x0fb9, 0xa25: 0x1089, 0xa26: 0x1099, 0xa27: 0x10b1, 0xa28: 0x1111, 0xa29: 0x10e1, - 0xa2a: 0x10f9, 0xa2b: 0x0008, 0xa2c: 0x0008, 0xa2d: 0x0008, 0xa2e: 0x0008, 0xa2f: 0x0008, + 0xa00: 0x0341, 0xa01: 0x0349, 0xa02: 0x00c1, 0xa03: 0x0019, 0xa04: 0x0351, 0xa05: 0x0359, + 0xa06: 0x05b5, 0xa07: 0x02e9, 0xa08: 0x02f1, 0xa09: 0x02f9, 0xa0a: 0x0361, 0xa0b: 0x0369, + 0xa0c: 0x0371, 0xa0d: 0x0309, 0xa0e: 0x0008, 0xa0f: 0x0319, 0xa10: 0x0321, 0xa11: 0x0379, + 0xa12: 0x0051, 0xa13: 0x0381, 0xa14: 0x05cd, 0xa15: 0x05cd, 0xa16: 0x0339, 0xa17: 0x0341, + 0xa18: 0x0349, 0xa19: 0x05b5, 0xa1a: 0x0389, 0xa1b: 0x0391, 0xa1c: 0x05e5, 0xa1d: 0x0399, + 0xa1e: 0x03a1, 0xa1f: 0x03a9, 0xa20: 0x03b1, 0xa21: 0x03b9, 0xa22: 0x0311, 0xa23: 0x00b9, + 0xa24: 0x0349, 0xa25: 0x0391, 0xa26: 0x0399, 0xa27: 0x03a1, 0xa28: 0x03c1, 0xa29: 0x03b1, + 0xa2a: 0x03b9, 0xa2b: 0x0008, 0xa2c: 0x0008, 0xa2d: 0x0008, 0xa2e: 0x0008, 0xa2f: 0x0008, 0xa30: 0x0008, 0xa31: 0x0008, 0xa32: 0x0008, 0xa33: 0x0008, 0xa34: 0x0008, 0xa35: 0x0008, - 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x1129, 0xa39: 0x0008, 0xa3a: 0x0008, 0xa3b: 0x0008, + 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x03c9, 0xa39: 0x0008, 0xa3a: 0x0008, 0xa3b: 0x0008, 0xa3c: 0x0008, 0xa3d: 0x0008, 0xa3e: 0x0008, 0xa3f: 0x0008, // Block 0x29, offset 0xa40 0xa40: 0x0008, 0xa41: 0x0008, 0xa42: 0x0008, 0xa43: 0x0008, 0xa44: 0x0008, 0xa45: 0x0008, 0xa46: 0x0008, 0xa47: 0x0008, 0xa48: 0x0008, 0xa49: 0x0008, 0xa4a: 0x0008, 0xa4b: 0x0008, 0xa4c: 0x0008, 0xa4d: 0x0008, 0xa4e: 0x0008, 0xa4f: 0x0008, 0xa50: 0x0008, 0xa51: 0x0008, 0xa52: 0x0008, 0xa53: 0x0008, 0xa54: 0x0008, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008, - 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0008, 0xa5b: 0x1141, 0xa5c: 0x1159, 0xa5d: 0x1169, - 0xa5e: 0x1181, 0xa5f: 0x1029, 0xa60: 0x1199, 0xa61: 0x11a9, 0xa62: 0x11c1, 0xa63: 0x11d9, - 0xa64: 0x11f1, 0xa65: 0x1209, 0xa66: 0x1221, 0xa67: 0x05fd, 0xa68: 0x1239, 0xa69: 0x1251, - 0xa6a: 0xe17d, 0xa6b: 0x1269, 0xa6c: 0x1281, 0xa6d: 0x1299, 0xa6e: 0x12b1, 0xa6f: 0x12c9, - 0xa70: 0x12e1, 0xa71: 0x12f9, 0xa72: 0x1311, 0xa73: 0x1329, 0xa74: 0x1341, 0xa75: 0x1359, - 0xa76: 0x1371, 0xa77: 0x1389, 0xa78: 0x0615, 0xa79: 0x13a1, 0xa7a: 0x13b9, 0xa7b: 0x13d1, - 0xa7c: 0x13e1, 0xa7d: 0x13f9, 0xa7e: 0x1411, 0xa7f: 0x1429, + 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0008, 0xa5b: 0x03d1, 0xa5c: 0x03d9, 0xa5d: 0x03e1, + 0xa5e: 0x03e9, 0xa5f: 0x0371, 0xa60: 0x03f1, 0xa61: 0x03f9, 0xa62: 0x0401, 0xa63: 0x0409, + 0xa64: 0x0411, 0xa65: 0x0419, 0xa66: 0x0421, 0xa67: 0x05fd, 0xa68: 0x0429, 0xa69: 0x0431, + 0xa6a: 0xe17d, 0xa6b: 0x0439, 0xa6c: 0x0441, 0xa6d: 0x0449, 0xa6e: 0x0451, 0xa6f: 0x0459, + 0xa70: 0x0461, 0xa71: 0x0469, 0xa72: 0x0471, 0xa73: 0x0479, 0xa74: 0x0481, 0xa75: 0x0489, + 0xa76: 0x0491, 0xa77: 0x0499, 0xa78: 0x0615, 0xa79: 0x04a1, 0xa7a: 0x04a9, 0xa7b: 0x04b1, + 0xa7c: 0x04b9, 0xa7d: 0x04c1, 0xa7e: 0x04c9, 0xa7f: 0x04d1, // Block 0x2a, offset 0xa80 0xa80: 0xe00d, 0xa81: 0x0008, 0xa82: 0xe00d, 0xa83: 0x0008, 0xa84: 0xe00d, 0xa85: 0x0008, 0xa86: 0xe00d, 0xa87: 0x0008, 0xa88: 0xe00d, 0xa89: 0x0008, 0xa8a: 0xe00d, 0xa8b: 0x0008, @@ -1079,7 +1222,7 @@ var idnaValues = [8192]uint16{ 0xacc: 0xe00d, 0xacd: 0x0008, 0xace: 0xe00d, 0xacf: 0x0008, 0xad0: 0xe00d, 0xad1: 0x0008, 0xad2: 0xe00d, 0xad3: 0x0008, 0xad4: 0xe00d, 0xad5: 0x0008, 0xad6: 0x0008, 0xad7: 0x0008, 0xad8: 0x0008, 0xad9: 0x0008, 0xada: 0x062d, 0xadb: 0x064d, 0xadc: 0x0008, 0xadd: 0x0008, - 0xade: 0x1441, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008, + 0xade: 0x04d9, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008, 0xae4: 0xe00d, 0xae5: 0x0008, 0xae6: 0xe00d, 0xae7: 0x0008, 0xae8: 0xe00d, 0xae9: 0x0008, 0xaea: 0xe00d, 0xaeb: 0x0008, 0xaec: 0xe00d, 0xaed: 0x0008, 0xaee: 0xe00d, 0xaef: 0x0008, 0xaf0: 0xe00d, 0xaf1: 0x0008, 0xaf2: 0xe00d, 0xaf3: 0x0008, 0xaf4: 0xe00d, 0xaf5: 0x0008, @@ -1094,33 +1237,33 @@ var idnaValues = [8192]uint16{ 0xb1e: 0x0040, 0xb1f: 0xe045, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x0008, 0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045, 0xb2a: 0xe045, 0xb2b: 0xe045, 0xb2c: 0xe045, 0xb2d: 0xe045, 0xb2e: 0xe045, 0xb2f: 0xe045, - 0xb30: 0x0008, 0xb31: 0x1459, 0xb32: 0x0008, 0xb33: 0x1471, 0xb34: 0x0008, 0xb35: 0x1489, - 0xb36: 0x0008, 0xb37: 0x14a1, 0xb38: 0x0008, 0xb39: 0x14b9, 0xb3a: 0x0008, 0xb3b: 0x14d1, - 0xb3c: 0x0008, 0xb3d: 0x14e9, 0xb3e: 0x0040, 0xb3f: 0x0040, + 0xb30: 0x0008, 0xb31: 0x04e1, 0xb32: 0x0008, 0xb33: 0x04e9, 0xb34: 0x0008, 0xb35: 0x04f1, + 0xb36: 0x0008, 0xb37: 0x04f9, 0xb38: 0x0008, 0xb39: 0x0501, 0xb3a: 0x0008, 0xb3b: 0x0509, + 0xb3c: 0x0008, 0xb3d: 0x0511, 0xb3e: 0x0040, 0xb3f: 0x0040, // Block 0x2d, offset 0xb40 - 0xb40: 0x1501, 0xb41: 0x1531, 0xb42: 0x1561, 0xb43: 0x1591, 0xb44: 0x15c1, 0xb45: 0x15f1, - 0xb46: 0x1621, 0xb47: 0x1651, 0xb48: 0x1501, 0xb49: 0x1531, 0xb4a: 0x1561, 0xb4b: 0x1591, - 0xb4c: 0x15c1, 0xb4d: 0x15f1, 0xb4e: 0x1621, 0xb4f: 0x1651, 0xb50: 0x1681, 0xb51: 0x16b1, - 0xb52: 0x16e1, 0xb53: 0x1711, 0xb54: 0x1741, 0xb55: 0x1771, 0xb56: 0x17a1, 0xb57: 0x17d1, - 0xb58: 0x1681, 0xb59: 0x16b1, 0xb5a: 0x16e1, 0xb5b: 0x1711, 0xb5c: 0x1741, 0xb5d: 0x1771, - 0xb5e: 0x17a1, 0xb5f: 0x17d1, 0xb60: 0x1801, 0xb61: 0x1831, 0xb62: 0x1861, 0xb63: 0x1891, - 0xb64: 0x18c1, 0xb65: 0x18f1, 0xb66: 0x1921, 0xb67: 0x1951, 0xb68: 0x1801, 0xb69: 0x1831, - 0xb6a: 0x1861, 0xb6b: 0x1891, 0xb6c: 0x18c1, 0xb6d: 0x18f1, 0xb6e: 0x1921, 0xb6f: 0x1951, - 0xb70: 0x0008, 0xb71: 0x0008, 0xb72: 0x1981, 0xb73: 0x19b1, 0xb74: 0x19d9, 0xb75: 0x0040, - 0xb76: 0x0008, 0xb77: 0x1a01, 0xb78: 0xe045, 0xb79: 0xe045, 0xb7a: 0x0665, 0xb7b: 0x1459, - 0xb7c: 0x19b1, 0xb7d: 0x067e, 0xb7e: 0x1a31, 0xb7f: 0x069e, + 0xb40: 0x0519, 0xb41: 0x0521, 0xb42: 0x0529, 0xb43: 0x0531, 0xb44: 0x0539, 0xb45: 0x0541, + 0xb46: 0x0549, 0xb47: 0x0551, 0xb48: 0x0519, 0xb49: 0x0521, 0xb4a: 0x0529, 0xb4b: 0x0531, + 0xb4c: 0x0539, 0xb4d: 0x0541, 0xb4e: 0x0549, 0xb4f: 0x0551, 0xb50: 0x0559, 0xb51: 0x0561, + 0xb52: 0x0569, 0xb53: 0x0571, 0xb54: 0x0579, 0xb55: 0x0581, 0xb56: 0x0589, 0xb57: 0x0591, + 0xb58: 0x0559, 0xb59: 0x0561, 0xb5a: 0x0569, 0xb5b: 0x0571, 0xb5c: 0x0579, 0xb5d: 0x0581, + 0xb5e: 0x0589, 0xb5f: 0x0591, 0xb60: 0x0599, 0xb61: 0x05a1, 0xb62: 0x05a9, 0xb63: 0x05b1, + 0xb64: 0x05b9, 0xb65: 0x05c1, 0xb66: 0x05c9, 0xb67: 0x05d1, 0xb68: 0x0599, 0xb69: 0x05a1, + 0xb6a: 0x05a9, 0xb6b: 0x05b1, 0xb6c: 0x05b9, 0xb6d: 0x05c1, 0xb6e: 0x05c9, 0xb6f: 0x05d1, + 0xb70: 0x0008, 0xb71: 0x0008, 0xb72: 0x05d9, 0xb73: 0x05e1, 0xb74: 0x05e9, 0xb75: 0x0040, + 0xb76: 0x0008, 0xb77: 0x05f1, 0xb78: 0xe045, 0xb79: 0xe045, 0xb7a: 0x0665, 0xb7b: 0x04e1, + 0xb7c: 0x05e1, 0xb7d: 0x067e, 0xb7e: 0x05f9, 0xb7f: 0x069e, // Block 0x2e, offset 0xb80 - 0xb80: 0x06be, 0xb81: 0x1a4a, 0xb82: 0x1a79, 0xb83: 0x1aa9, 0xb84: 0x1ad1, 0xb85: 0x0040, - 0xb86: 0x0008, 0xb87: 0x1af9, 0xb88: 0x06dd, 0xb89: 0x1471, 0xb8a: 0x06f5, 0xb8b: 0x1489, - 0xb8c: 0x1aa9, 0xb8d: 0x1b2a, 0xb8e: 0x1b5a, 0xb8f: 0x1b8a, 0xb90: 0x0008, 0xb91: 0x0008, - 0xb92: 0x0008, 0xb93: 0x1bb9, 0xb94: 0x0040, 0xb95: 0x0040, 0xb96: 0x0008, 0xb97: 0x0008, - 0xb98: 0xe045, 0xb99: 0xe045, 0xb9a: 0x070d, 0xb9b: 0x14a1, 0xb9c: 0x0040, 0xb9d: 0x1bd2, - 0xb9e: 0x1c02, 0xb9f: 0x1c32, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x1c61, + 0xb80: 0x06be, 0xb81: 0x0602, 0xb82: 0x0609, 0xb83: 0x0611, 0xb84: 0x0619, 0xb85: 0x0040, + 0xb86: 0x0008, 0xb87: 0x0621, 0xb88: 0x06dd, 0xb89: 0x04e9, 0xb8a: 0x06f5, 0xb8b: 0x04f1, + 0xb8c: 0x0611, 0xb8d: 0x062a, 0xb8e: 0x0632, 0xb8f: 0x063a, 0xb90: 0x0008, 0xb91: 0x0008, + 0xb92: 0x0008, 0xb93: 0x0641, 0xb94: 0x0040, 0xb95: 0x0040, 0xb96: 0x0008, 0xb97: 0x0008, + 0xb98: 0xe045, 0xb99: 0xe045, 0xb9a: 0x070d, 0xb9b: 0x04f9, 0xb9c: 0x0040, 0xb9d: 0x064a, + 0xb9e: 0x0652, 0xb9f: 0x065a, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x0661, 0xba4: 0x0008, 0xba5: 0x0008, 0xba6: 0x0008, 0xba7: 0x0008, 0xba8: 0xe045, 0xba9: 0xe045, - 0xbaa: 0x0725, 0xbab: 0x14d1, 0xbac: 0xe04d, 0xbad: 0x1c7a, 0xbae: 0x03d2, 0xbaf: 0x1caa, - 0xbb0: 0x0040, 0xbb1: 0x0040, 0xbb2: 0x1cb9, 0xbb3: 0x1ce9, 0xbb4: 0x1d11, 0xbb5: 0x0040, - 0xbb6: 0x0008, 0xbb7: 0x1d39, 0xbb8: 0x073d, 0xbb9: 0x14b9, 0xbba: 0x0515, 0xbbb: 0x14e9, - 0xbbc: 0x1ce9, 0xbbd: 0x0756, 0xbbe: 0x0776, 0xbbf: 0x0040, + 0xbaa: 0x0725, 0xbab: 0x0509, 0xbac: 0xe04d, 0xbad: 0x066a, 0xbae: 0x012a, 0xbaf: 0x0672, + 0xbb0: 0x0040, 0xbb1: 0x0040, 0xbb2: 0x0679, 0xbb3: 0x0681, 0xbb4: 0x0689, 0xbb5: 0x0040, + 0xbb6: 0x0008, 0xbb7: 0x0691, 0xbb8: 0x073d, 0xbb9: 0x0501, 0xbba: 0x0515, 0xbbb: 0x0511, + 0xbbc: 0x0681, 0xbbd: 0x0756, 0xbbe: 0x0776, 0xbbf: 0x0040, // Block 0x2f, offset 0xbc0 0xbc0: 0x000a, 0xbc1: 0x000a, 0xbc2: 0x000a, 0xbc3: 0x000a, 0xbc4: 0x000a, 0xbc5: 0x000a, 0xbc6: 0x000a, 0xbc7: 0x000a, 0xbc8: 0x000a, 0xbc9: 0x000a, 0xbca: 0x000a, 0xbcb: 0x03c0, @@ -1130,72 +1273,72 @@ var idnaValues = [8192]uint16{ 0xbde: 0x0018, 0xbdf: 0x0018, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018, 0xbe4: 0x0040, 0xbe5: 0x0040, 0xbe6: 0x0040, 0xbe7: 0x0018, 0xbe8: 0x0040, 0xbe9: 0x0040, 0xbea: 0x0340, 0xbeb: 0x0340, 0xbec: 0x0340, 0xbed: 0x0340, 0xbee: 0x0340, 0xbef: 0x000a, - 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x1d69, 0xbf4: 0x1da1, 0xbf5: 0x0018, - 0xbf6: 0x1df1, 0xbf7: 0x1e29, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, - 0xbfc: 0x1e7a, 0xbfd: 0x0018, 0xbfe: 0x07b6, 0xbff: 0x0018, + 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x0699, 0xbf4: 0x06a1, 0xbf5: 0x0018, + 0xbf6: 0x06a9, 0xbf7: 0x06b1, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, + 0xbfc: 0x06ba, 0xbfd: 0x0018, 0xbfe: 0x07b6, 0xbff: 0x0018, // Block 0x30, offset 0xc00 0xc00: 0x0018, 0xc01: 0x0018, 0xc02: 0x0018, 0xc03: 0x0018, 0xc04: 0x0018, 0xc05: 0x0018, - 0xc06: 0x0018, 0xc07: 0x1e92, 0xc08: 0x1eaa, 0xc09: 0x1ec2, 0xc0a: 0x0018, 0xc0b: 0x0018, + 0xc06: 0x0018, 0xc07: 0x06c2, 0xc08: 0x06ca, 0xc09: 0x06d2, 0xc0a: 0x0018, 0xc0b: 0x0018, 0xc0c: 0x0018, 0xc0d: 0x0018, 0xc0e: 0x0018, 0xc0f: 0x0018, 0xc10: 0x0018, 0xc11: 0x0018, - 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x1ed9, + 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x06d9, 0xc18: 0x0018, 0xc19: 0x0018, 0xc1a: 0x0018, 0xc1b: 0x0018, 0xc1c: 0x0018, 0xc1d: 0x0018, 0xc1e: 0x0018, 0xc1f: 0x000a, 0xc20: 0x03c0, 0xc21: 0x0340, 0xc22: 0x0340, 0xc23: 0x0340, 0xc24: 0x03c0, 0xc25: 0x0040, 0xc26: 0x0040, 0xc27: 0x0040, 0xc28: 0x0040, 0xc29: 0x0040, 0xc2a: 0x0340, 0xc2b: 0x0340, 0xc2c: 0x0340, 0xc2d: 0x0340, 0xc2e: 0x0340, 0xc2f: 0x0340, - 0xc30: 0x1f41, 0xc31: 0x0f41, 0xc32: 0x0040, 0xc33: 0x0040, 0xc34: 0x1f51, 0xc35: 0x1f61, - 0xc36: 0x1f71, 0xc37: 0x1f81, 0xc38: 0x1f91, 0xc39: 0x1fa1, 0xc3a: 0x1fb2, 0xc3b: 0x07d5, - 0xc3c: 0x1fc2, 0xc3d: 0x1fd2, 0xc3e: 0x1fe2, 0xc3f: 0x0f71, + 0xc30: 0x06e1, 0xc31: 0x0311, 0xc32: 0x0040, 0xc33: 0x0040, 0xc34: 0x06e9, 0xc35: 0x06f1, + 0xc36: 0x06f9, 0xc37: 0x0701, 0xc38: 0x0709, 0xc39: 0x0711, 0xc3a: 0x071a, 0xc3b: 0x07d5, + 0xc3c: 0x0722, 0xc3d: 0x072a, 0xc3e: 0x0732, 0xc3f: 0x0329, // Block 0x31, offset 0xc40 - 0xc40: 0x1f41, 0xc41: 0x00c9, 0xc42: 0x0069, 0xc43: 0x0079, 0xc44: 0x1f51, 0xc45: 0x1f61, - 0xc46: 0x1f71, 0xc47: 0x1f81, 0xc48: 0x1f91, 0xc49: 0x1fa1, 0xc4a: 0x1fb2, 0xc4b: 0x07ed, - 0xc4c: 0x1fc2, 0xc4d: 0x1fd2, 0xc4e: 0x1fe2, 0xc4f: 0x0040, 0xc50: 0x0039, 0xc51: 0x0f09, - 0xc52: 0x00d9, 0xc53: 0x0369, 0xc54: 0x0ff9, 0xc55: 0x0249, 0xc56: 0x0f51, 0xc57: 0x0359, - 0xc58: 0x0f61, 0xc59: 0x0f71, 0xc5a: 0x0f99, 0xc5b: 0x01d9, 0xc5c: 0x0fa9, 0xc5d: 0x0040, + 0xc40: 0x06e1, 0xc41: 0x0049, 0xc42: 0x0029, 0xc43: 0x0031, 0xc44: 0x06e9, 0xc45: 0x06f1, + 0xc46: 0x06f9, 0xc47: 0x0701, 0xc48: 0x0709, 0xc49: 0x0711, 0xc4a: 0x071a, 0xc4b: 0x07ed, + 0xc4c: 0x0722, 0xc4d: 0x072a, 0xc4e: 0x0732, 0xc4f: 0x0040, 0xc50: 0x0019, 0xc51: 0x02f9, + 0xc52: 0x0051, 0xc53: 0x0109, 0xc54: 0x0361, 0xc55: 0x00a9, 0xc56: 0x0319, 0xc57: 0x0101, + 0xc58: 0x0321, 0xc59: 0x0329, 0xc5a: 0x0339, 0xc5b: 0x0089, 0xc5c: 0x0341, 0xc5d: 0x0040, 0xc5e: 0x0040, 0xc5f: 0x0040, 0xc60: 0x0018, 0xc61: 0x0018, 0xc62: 0x0018, 0xc63: 0x0018, - 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x1ff1, 0xc69: 0x0018, + 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x0739, 0xc69: 0x0018, 0xc6a: 0x0018, 0xc6b: 0x0018, 0xc6c: 0x0018, 0xc6d: 0x0018, 0xc6e: 0x0018, 0xc6f: 0x0018, 0xc70: 0x0018, 0xc71: 0x0018, 0xc72: 0x0018, 0xc73: 0x0018, 0xc74: 0x0018, 0xc75: 0x0018, 0xc76: 0x0018, 0xc77: 0x0018, 0xc78: 0x0018, 0xc79: 0x0018, 0xc7a: 0x0018, 0xc7b: 0x0018, 0xc7c: 0x0018, 0xc7d: 0x0018, 0xc7e: 0x0018, 0xc7f: 0x0018, // Block 0x32, offset 0xc80 - 0xc80: 0x0806, 0xc81: 0x0826, 0xc82: 0x1159, 0xc83: 0x0845, 0xc84: 0x0018, 0xc85: 0x0866, - 0xc86: 0x0886, 0xc87: 0x1011, 0xc88: 0x0018, 0xc89: 0x08a5, 0xc8a: 0x0f31, 0xc8b: 0x0249, - 0xc8c: 0x0249, 0xc8d: 0x0249, 0xc8e: 0x0249, 0xc8f: 0x2009, 0xc90: 0x0f41, 0xc91: 0x0f41, - 0xc92: 0x0359, 0xc93: 0x0359, 0xc94: 0x0018, 0xc95: 0x0f71, 0xc96: 0x2021, 0xc97: 0x0018, - 0xc98: 0x0018, 0xc99: 0x0f99, 0xc9a: 0x2039, 0xc9b: 0x0269, 0xc9c: 0x0269, 0xc9d: 0x0269, - 0xc9e: 0x0018, 0xc9f: 0x0018, 0xca0: 0x2049, 0xca1: 0x08c5, 0xca2: 0x2061, 0xca3: 0x0018, - 0xca4: 0x13d1, 0xca5: 0x0018, 0xca6: 0x2079, 0xca7: 0x0018, 0xca8: 0x13d1, 0xca9: 0x0018, - 0xcaa: 0x0f51, 0xcab: 0x2091, 0xcac: 0x0ee9, 0xcad: 0x1159, 0xcae: 0x0018, 0xcaf: 0x0f09, - 0xcb0: 0x0f09, 0xcb1: 0x1199, 0xcb2: 0x0040, 0xcb3: 0x0f61, 0xcb4: 0x00d9, 0xcb5: 0x20a9, - 0xcb6: 0x20c1, 0xcb7: 0x20d9, 0xcb8: 0x20f1, 0xcb9: 0x0f41, 0xcba: 0x0018, 0xcbb: 0x08e5, - 0xcbc: 0x2109, 0xcbd: 0x10b1, 0xcbe: 0x10b1, 0xcbf: 0x2109, + 0xc80: 0x0806, 0xc81: 0x0826, 0xc82: 0x03d9, 0xc83: 0x0845, 0xc84: 0x0018, 0xc85: 0x0866, + 0xc86: 0x0886, 0xc87: 0x0369, 0xc88: 0x0018, 0xc89: 0x08a5, 0xc8a: 0x0309, 0xc8b: 0x00a9, + 0xc8c: 0x00a9, 0xc8d: 0x00a9, 0xc8e: 0x00a9, 0xc8f: 0x0741, 0xc90: 0x0311, 0xc91: 0x0311, + 0xc92: 0x0101, 0xc93: 0x0101, 0xc94: 0x0018, 0xc95: 0x0329, 0xc96: 0x0749, 0xc97: 0x0018, + 0xc98: 0x0018, 0xc99: 0x0339, 0xc9a: 0x0751, 0xc9b: 0x00b9, 0xc9c: 0x00b9, 0xc9d: 0x00b9, + 0xc9e: 0x0018, 0xc9f: 0x0018, 0xca0: 0x0759, 0xca1: 0x08c5, 0xca2: 0x0761, 0xca3: 0x0018, + 0xca4: 0x04b1, 0xca5: 0x0018, 0xca6: 0x0769, 0xca7: 0x0018, 0xca8: 0x04b1, 0xca9: 0x0018, + 0xcaa: 0x0319, 0xcab: 0x0771, 0xcac: 0x02e9, 0xcad: 0x03d9, 0xcae: 0x0018, 0xcaf: 0x02f9, + 0xcb0: 0x02f9, 0xcb1: 0x03f1, 0xcb2: 0x0040, 0xcb3: 0x0321, 0xcb4: 0x0051, 0xcb5: 0x0779, + 0xcb6: 0x0781, 0xcb7: 0x0789, 0xcb8: 0x0791, 0xcb9: 0x0311, 0xcba: 0x0018, 0xcbb: 0x08e5, + 0xcbc: 0x0799, 0xcbd: 0x03a1, 0xcbe: 0x03a1, 0xcbf: 0x0799, // Block 0x33, offset 0xcc0 - 0xcc0: 0x0905, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x0ef9, - 0xcc6: 0x0ef9, 0xcc7: 0x0f09, 0xcc8: 0x0f41, 0xcc9: 0x0259, 0xcca: 0x0018, 0xccb: 0x0018, - 0xccc: 0x0018, 0xccd: 0x0018, 0xcce: 0x0008, 0xccf: 0x0018, 0xcd0: 0x2121, 0xcd1: 0x2151, - 0xcd2: 0x2181, 0xcd3: 0x21b9, 0xcd4: 0x21e9, 0xcd5: 0x2219, 0xcd6: 0x2249, 0xcd7: 0x2279, - 0xcd8: 0x22a9, 0xcd9: 0x22d9, 0xcda: 0x2309, 0xcdb: 0x2339, 0xcdc: 0x2369, 0xcdd: 0x2399, - 0xcde: 0x23c9, 0xcdf: 0x23f9, 0xce0: 0x0f41, 0xce1: 0x2421, 0xce2: 0x091d, 0xce3: 0x2439, - 0xce4: 0x1089, 0xce5: 0x2451, 0xce6: 0x093d, 0xce7: 0x2469, 0xce8: 0x2491, 0xce9: 0x0369, - 0xcea: 0x24a9, 0xceb: 0x095d, 0xcec: 0x0359, 0xced: 0x1159, 0xcee: 0x0ef9, 0xcef: 0x0f61, - 0xcf0: 0x0f41, 0xcf1: 0x2421, 0xcf2: 0x097d, 0xcf3: 0x2439, 0xcf4: 0x1089, 0xcf5: 0x2451, - 0xcf6: 0x099d, 0xcf7: 0x2469, 0xcf8: 0x2491, 0xcf9: 0x0369, 0xcfa: 0x24a9, 0xcfb: 0x09bd, - 0xcfc: 0x0359, 0xcfd: 0x1159, 0xcfe: 0x0ef9, 0xcff: 0x0f61, + 0xcc0: 0x0905, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x02f1, + 0xcc6: 0x02f1, 0xcc7: 0x02f9, 0xcc8: 0x0311, 0xcc9: 0x00b1, 0xcca: 0x0018, 0xccb: 0x0018, + 0xccc: 0x0018, 0xccd: 0x0018, 0xcce: 0x0008, 0xccf: 0x0018, 0xcd0: 0x07a1, 0xcd1: 0x07a9, + 0xcd2: 0x07b1, 0xcd3: 0x07b9, 0xcd4: 0x07c1, 0xcd5: 0x07c9, 0xcd6: 0x07d1, 0xcd7: 0x07d9, + 0xcd8: 0x07e1, 0xcd9: 0x07e9, 0xcda: 0x07f1, 0xcdb: 0x07f9, 0xcdc: 0x0801, 0xcdd: 0x0809, + 0xcde: 0x0811, 0xcdf: 0x0819, 0xce0: 0x0311, 0xce1: 0x0821, 0xce2: 0x091d, 0xce3: 0x0829, + 0xce4: 0x0391, 0xce5: 0x0831, 0xce6: 0x093d, 0xce7: 0x0839, 0xce8: 0x0841, 0xce9: 0x0109, + 0xcea: 0x0849, 0xceb: 0x095d, 0xcec: 0x0101, 0xced: 0x03d9, 0xcee: 0x02f1, 0xcef: 0x0321, + 0xcf0: 0x0311, 0xcf1: 0x0821, 0xcf2: 0x097d, 0xcf3: 0x0829, 0xcf4: 0x0391, 0xcf5: 0x0831, + 0xcf6: 0x099d, 0xcf7: 0x0839, 0xcf8: 0x0841, 0xcf9: 0x0109, 0xcfa: 0x0849, 0xcfb: 0x09bd, + 0xcfc: 0x0101, 0xcfd: 0x03d9, 0xcfe: 0x02f1, 0xcff: 0x0321, // Block 0x34, offset 0xd00 0xd00: 0x0018, 0xd01: 0x0018, 0xd02: 0x0018, 0xd03: 0x0018, 0xd04: 0x0018, 0xd05: 0x0018, 0xd06: 0x0018, 0xd07: 0x0018, 0xd08: 0x0018, 0xd09: 0x0018, 0xd0a: 0x0018, 0xd0b: 0x0040, 0xd0c: 0x0040, 0xd0d: 0x0040, 0xd0e: 0x0040, 0xd0f: 0x0040, 0xd10: 0x0040, 0xd11: 0x0040, 0xd12: 0x0040, 0xd13: 0x0040, 0xd14: 0x0040, 0xd15: 0x0040, 0xd16: 0x0040, 0xd17: 0x0040, 0xd18: 0x0040, 0xd19: 0x0040, 0xd1a: 0x0040, 0xd1b: 0x0040, 0xd1c: 0x0040, 0xd1d: 0x0040, - 0xd1e: 0x0040, 0xd1f: 0x0040, 0xd20: 0x00c9, 0xd21: 0x0069, 0xd22: 0x0079, 0xd23: 0x1f51, - 0xd24: 0x1f61, 0xd25: 0x1f71, 0xd26: 0x1f81, 0xd27: 0x1f91, 0xd28: 0x1fa1, 0xd29: 0x2601, - 0xd2a: 0x2619, 0xd2b: 0x2631, 0xd2c: 0x2649, 0xd2d: 0x2661, 0xd2e: 0x2679, 0xd2f: 0x2691, - 0xd30: 0x26a9, 0xd31: 0x26c1, 0xd32: 0x26d9, 0xd33: 0x26f1, 0xd34: 0x0a1e, 0xd35: 0x0a3e, + 0xd1e: 0x0040, 0xd1f: 0x0040, 0xd20: 0x0049, 0xd21: 0x0029, 0xd22: 0x0031, 0xd23: 0x06e9, + 0xd24: 0x06f1, 0xd25: 0x06f9, 0xd26: 0x0701, 0xd27: 0x0709, 0xd28: 0x0711, 0xd29: 0x0879, + 0xd2a: 0x0881, 0xd2b: 0x0889, 0xd2c: 0x0891, 0xd2d: 0x0899, 0xd2e: 0x08a1, 0xd2f: 0x08a9, + 0xd30: 0x08b1, 0xd31: 0x08b9, 0xd32: 0x08c1, 0xd33: 0x08c9, 0xd34: 0x0a1e, 0xd35: 0x0a3e, 0xd36: 0x0a5e, 0xd37: 0x0a7e, 0xd38: 0x0a9e, 0xd39: 0x0abe, 0xd3a: 0x0ade, 0xd3b: 0x0afe, - 0xd3c: 0x0b1e, 0xd3d: 0x270a, 0xd3e: 0x2732, 0xd3f: 0x275a, + 0xd3c: 0x0b1e, 0xd3d: 0x08d2, 0xd3e: 0x08da, 0xd3f: 0x08e2, // Block 0x35, offset 0xd40 - 0xd40: 0x2782, 0xd41: 0x27aa, 0xd42: 0x27d2, 0xd43: 0x27fa, 0xd44: 0x2822, 0xd45: 0x284a, - 0xd46: 0x2872, 0xd47: 0x289a, 0xd48: 0x0040, 0xd49: 0x0040, 0xd4a: 0x0040, 0xd4b: 0x0040, + 0xd40: 0x08ea, 0xd41: 0x08f2, 0xd42: 0x08fa, 0xd43: 0x0902, 0xd44: 0x090a, 0xd45: 0x0912, + 0xd46: 0x091a, 0xd47: 0x0922, 0xd48: 0x0040, 0xd49: 0x0040, 0xd4a: 0x0040, 0xd4b: 0x0040, 0xd4c: 0x0040, 0xd4d: 0x0040, 0xd4e: 0x0040, 0xd4f: 0x0040, 0xd50: 0x0040, 0xd51: 0x0040, 0xd52: 0x0040, 0xd53: 0x0040, 0xd54: 0x0040, 0xd55: 0x0040, 0xd56: 0x0040, 0xd57: 0x0040, 0xd58: 0x0040, 0xd59: 0x0040, 0xd5a: 0x0040, 0xd5b: 0x0040, 0xd5c: 0x0b3e, 0xd5d: 0x0b5e, @@ -1203,17 +1346,17 @@ var idnaValues = [8192]uint16{ 0xd64: 0x0c3e, 0xd65: 0x0c5e, 0xd66: 0x0c7e, 0xd67: 0x0c9e, 0xd68: 0x0cbe, 0xd69: 0x0cde, 0xd6a: 0x0cfe, 0xd6b: 0x0d1e, 0xd6c: 0x0d3e, 0xd6d: 0x0d5e, 0xd6e: 0x0d7e, 0xd6f: 0x0d9e, 0xd70: 0x0dbe, 0xd71: 0x0dde, 0xd72: 0x0dfe, 0xd73: 0x0e1e, 0xd74: 0x0e3e, 0xd75: 0x0e5e, - 0xd76: 0x0039, 0xd77: 0x0ee9, 0xd78: 0x1159, 0xd79: 0x0ef9, 0xd7a: 0x0f09, 0xd7b: 0x1199, - 0xd7c: 0x0f31, 0xd7d: 0x0249, 0xd7e: 0x0f41, 0xd7f: 0x0259, + 0xd76: 0x0019, 0xd77: 0x02e9, 0xd78: 0x03d9, 0xd79: 0x02f1, 0xd7a: 0x02f9, 0xd7b: 0x03f1, + 0xd7c: 0x0309, 0xd7d: 0x00a9, 0xd7e: 0x0311, 0xd7f: 0x00b1, // Block 0x36, offset 0xd80 - 0xd80: 0x0f51, 0xd81: 0x0359, 0xd82: 0x0f61, 0xd83: 0x0f71, 0xd84: 0x00d9, 0xd85: 0x0f99, - 0xd86: 0x2039, 0xd87: 0x0269, 0xd88: 0x01d9, 0xd89: 0x0fa9, 0xd8a: 0x0fb9, 0xd8b: 0x1089, - 0xd8c: 0x0279, 0xd8d: 0x0369, 0xd8e: 0x0289, 0xd8f: 0x13d1, 0xd90: 0x0039, 0xd91: 0x0ee9, - 0xd92: 0x1159, 0xd93: 0x0ef9, 0xd94: 0x0f09, 0xd95: 0x1199, 0xd96: 0x0f31, 0xd97: 0x0249, - 0xd98: 0x0f41, 0xd99: 0x0259, 0xd9a: 0x0f51, 0xd9b: 0x0359, 0xd9c: 0x0f61, 0xd9d: 0x0f71, - 0xd9e: 0x00d9, 0xd9f: 0x0f99, 0xda0: 0x2039, 0xda1: 0x0269, 0xda2: 0x01d9, 0xda3: 0x0fa9, - 0xda4: 0x0fb9, 0xda5: 0x1089, 0xda6: 0x0279, 0xda7: 0x0369, 0xda8: 0x0289, 0xda9: 0x13d1, - 0xdaa: 0x1f41, 0xdab: 0x0018, 0xdac: 0x0018, 0xdad: 0x0018, 0xdae: 0x0018, 0xdaf: 0x0018, + 0xd80: 0x0319, 0xd81: 0x0101, 0xd82: 0x0321, 0xd83: 0x0329, 0xd84: 0x0051, 0xd85: 0x0339, + 0xd86: 0x0751, 0xd87: 0x00b9, 0xd88: 0x0089, 0xd89: 0x0341, 0xd8a: 0x0349, 0xd8b: 0x0391, + 0xd8c: 0x00c1, 0xd8d: 0x0109, 0xd8e: 0x00c9, 0xd8f: 0x04b1, 0xd90: 0x0019, 0xd91: 0x02e9, + 0xd92: 0x03d9, 0xd93: 0x02f1, 0xd94: 0x02f9, 0xd95: 0x03f1, 0xd96: 0x0309, 0xd97: 0x00a9, + 0xd98: 0x0311, 0xd99: 0x00b1, 0xd9a: 0x0319, 0xd9b: 0x0101, 0xd9c: 0x0321, 0xd9d: 0x0329, + 0xd9e: 0x0051, 0xd9f: 0x0339, 0xda0: 0x0751, 0xda1: 0x00b9, 0xda2: 0x0089, 0xda3: 0x0341, + 0xda4: 0x0349, 0xda5: 0x0391, 0xda6: 0x00c1, 0xda7: 0x0109, 0xda8: 0x00c9, 0xda9: 0x04b1, + 0xdaa: 0x06e1, 0xdab: 0x0018, 0xdac: 0x0018, 0xdad: 0x0018, 0xdae: 0x0018, 0xdaf: 0x0018, 0xdb0: 0x0018, 0xdb1: 0x0018, 0xdb2: 0x0018, 0xdb3: 0x0018, 0xdb4: 0x0018, 0xdb5: 0x0018, 0xdb6: 0x0018, 0xdb7: 0x0018, 0xdb8: 0x0018, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018, 0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018, @@ -1223,12 +1366,12 @@ var idnaValues = [8192]uint16{ 0xdcc: 0x0008, 0xdcd: 0x0008, 0xdce: 0x0008, 0xdcf: 0x0008, 0xdd0: 0x0008, 0xdd1: 0x0008, 0xdd2: 0x0008, 0xdd3: 0x0008, 0xdd4: 0x0008, 0xdd5: 0x0008, 0xdd6: 0x0008, 0xdd7: 0x0008, 0xdd8: 0x0008, 0xdd9: 0x0008, 0xdda: 0x0008, 0xddb: 0x0008, 0xddc: 0x0008, 0xddd: 0x0008, - 0xdde: 0x0008, 0xddf: 0x0040, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0x2971, 0xde3: 0x0ed5, - 0xde4: 0x2989, 0xde5: 0x0008, 0xde6: 0x0008, 0xde7: 0xe07d, 0xde8: 0x0008, 0xde9: 0xe01d, - 0xdea: 0x0008, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0x0fe1, 0xdee: 0x1281, 0xdef: 0x0fc9, - 0xdf0: 0x1141, 0xdf1: 0x0008, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0008, 0xdf5: 0xe01d, + 0xdde: 0x0008, 0xddf: 0x0040, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0x0941, 0xde3: 0x0ed5, + 0xde4: 0x0949, 0xde5: 0x0008, 0xde6: 0x0008, 0xde7: 0xe07d, 0xde8: 0x0008, 0xde9: 0xe01d, + 0xdea: 0x0008, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0x0359, 0xdee: 0x0441, 0xdef: 0x0351, + 0xdf0: 0x03d1, 0xdf1: 0x0008, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0008, 0xdf5: 0xe01d, 0xdf6: 0x0008, 0xdf7: 0x0008, 0xdf8: 0x0008, 0xdf9: 0x0008, 0xdfa: 0x0008, 0xdfb: 0x0008, - 0xdfc: 0x0259, 0xdfd: 0x1089, 0xdfe: 0x29a1, 0xdff: 0x29b9, + 0xdfc: 0x00b1, 0xdfd: 0x0391, 0xdfe: 0x0951, 0xdff: 0x0959, // Block 0x38, offset 0xe00 0xe00: 0xe00d, 0xe01: 0x0008, 0xe02: 0xe00d, 0xe03: 0x0008, 0xe04: 0xe00d, 0xe05: 0x0008, 0xe06: 0xe00d, 0xe07: 0x0008, 0xe08: 0xe00d, 0xe09: 0x0008, 0xe0a: 0xe00d, 0xe0b: 0x0008, @@ -1254,7 +1397,7 @@ var idnaValues = [8192]uint16{ 0xe76: 0x0040, 0xe77: 0x0040, 0xe78: 0x0040, 0xe79: 0x0040, 0xe7a: 0x0040, 0xe7b: 0x0040, 0xe7c: 0x0040, 0xe7d: 0x0040, 0xe7e: 0x0040, 0xe7f: 0x0040, // Block 0x3a, offset 0xe80 - 0xe80: 0x000a, 0xe81: 0x0018, 0xe82: 0x29d1, 0xe83: 0x0018, 0xe84: 0x0018, 0xe85: 0x0008, + 0xe80: 0x000a, 0xe81: 0x0018, 0xe82: 0x0961, 0xe83: 0x0018, 0xe84: 0x0018, 0xe85: 0x0008, 0xe86: 0x0008, 0xe87: 0x0008, 0xe88: 0x0018, 0xe89: 0x0018, 0xe8a: 0x0018, 0xe8b: 0x0018, 0xe8c: 0x0018, 0xe8d: 0x0018, 0xe8e: 0x0018, 0xe8f: 0x0018, 0xe90: 0x0018, 0xe91: 0x0018, 0xe92: 0x0018, 0xe93: 0x0018, 0xe94: 0x0018, 0xe95: 0x0018, 0xe96: 0x0018, 0xe97: 0x0018, @@ -1290,17 +1433,17 @@ var idnaValues = [8192]uint16{ 0xf36: 0x0008, 0xf37: 0x0008, 0xf38: 0x0008, 0xf39: 0x0008, 0xf3a: 0x0008, 0xf3b: 0x0008, 0xf3c: 0x0008, 0xf3d: 0x0008, 0xf3e: 0x0008, 0xf3f: 0x0008, // Block 0x3d, offset 0xf40 - 0xf40: 0x36a2, 0xf41: 0x36d2, 0xf42: 0x3702, 0xf43: 0x3732, 0xf44: 0x32d5, 0xf45: 0x32f5, + 0xf40: 0x0b82, 0xf41: 0x0b8a, 0xf42: 0x0b92, 0xf43: 0x0b9a, 0xf44: 0x32d5, 0xf45: 0x32f5, 0xf46: 0x3315, 0xf47: 0x3335, 0xf48: 0x0018, 0xf49: 0x0018, 0xf4a: 0x0018, 0xf4b: 0x0018, - 0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x3355, 0xf51: 0x3761, - 0xf52: 0x3779, 0xf53: 0x3791, 0xf54: 0x37a9, 0xf55: 0x37c1, 0xf56: 0x37d9, 0xf57: 0x37f1, - 0xf58: 0x3809, 0xf59: 0x3821, 0xf5a: 0x3839, 0xf5b: 0x3851, 0xf5c: 0x3869, 0xf5d: 0x3881, - 0xf5e: 0x3899, 0xf5f: 0x38b1, 0xf60: 0x3375, 0xf61: 0x3395, 0xf62: 0x33b5, 0xf63: 0x33d5, + 0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x3355, 0xf51: 0x0ba1, + 0xf52: 0x0ba9, 0xf53: 0x0bb1, 0xf54: 0x0bb9, 0xf55: 0x0bc1, 0xf56: 0x0bc9, 0xf57: 0x0bd1, + 0xf58: 0x0bd9, 0xf59: 0x0be1, 0xf5a: 0x0be9, 0xf5b: 0x0bf1, 0xf5c: 0x0bf9, 0xf5d: 0x0c01, + 0xf5e: 0x0c09, 0xf5f: 0x0c11, 0xf60: 0x3375, 0xf61: 0x3395, 0xf62: 0x33b5, 0xf63: 0x33d5, 0xf64: 0x33f5, 0xf65: 0x33f5, 0xf66: 0x3415, 0xf67: 0x3435, 0xf68: 0x3455, 0xf69: 0x3475, 0xf6a: 0x3495, 0xf6b: 0x34b5, 0xf6c: 0x34d5, 0xf6d: 0x34f5, 0xf6e: 0x3515, 0xf6f: 0x3535, 0xf70: 0x3555, 0xf71: 0x3575, 0xf72: 0x3595, 0xf73: 0x35b5, 0xf74: 0x35d5, 0xf75: 0x35f5, 0xf76: 0x3615, 0xf77: 0x3635, 0xf78: 0x3655, 0xf79: 0x3675, 0xf7a: 0x3695, 0xf7b: 0x36b5, - 0xf7c: 0x38c9, 0xf7d: 0x3901, 0xf7e: 0x36d5, 0xf7f: 0x0018, + 0xf7c: 0x0c19, 0xf7d: 0x0c21, 0xf7e: 0x36d5, 0xf7f: 0x0018, // Block 0x3e, offset 0xf80 0xf80: 0x36f5, 0xf81: 0x3715, 0xf82: 0x3735, 0xf83: 0x3755, 0xf84: 0x3775, 0xf85: 0x3795, 0xf86: 0x37b5, 0xf87: 0x37d5, 0xf88: 0x37f5, 0xf89: 0x3815, 0xf8a: 0x3835, 0xf8b: 0x3855, @@ -1310,13 +1453,13 @@ var idnaValues = [8192]uint16{ 0xf9e: 0x3ab5, 0xf9f: 0x3ad5, 0xfa0: 0x3af5, 0xfa1: 0x3b15, 0xfa2: 0x3b35, 0xfa3: 0x3b55, 0xfa4: 0x3b75, 0xfa5: 0x3b95, 0xfa6: 0x1295, 0xfa7: 0x3bb5, 0xfa8: 0x3bd5, 0xfa9: 0x3bf5, 0xfaa: 0x3c15, 0xfab: 0x3c35, 0xfac: 0x3c55, 0xfad: 0x3c75, 0xfae: 0x23b5, 0xfaf: 0x3c95, - 0xfb0: 0x3cb5, 0xfb1: 0x3939, 0xfb2: 0x3951, 0xfb3: 0x3969, 0xfb4: 0x3981, 0xfb5: 0x3999, - 0xfb6: 0x39b1, 0xfb7: 0x39c9, 0xfb8: 0x39e1, 0xfb9: 0x39f9, 0xfba: 0x3a11, 0xfbb: 0x3a29, - 0xfbc: 0x3a41, 0xfbd: 0x3a59, 0xfbe: 0x3a71, 0xfbf: 0x3a89, + 0xfb0: 0x3cb5, 0xfb1: 0x0c29, 0xfb2: 0x0c31, 0xfb3: 0x0c39, 0xfb4: 0x0c41, 0xfb5: 0x0c49, + 0xfb6: 0x0c51, 0xfb7: 0x0c59, 0xfb8: 0x0c61, 0xfb9: 0x0c69, 0xfba: 0x0c71, 0xfbb: 0x0c79, + 0xfbc: 0x0c81, 0xfbd: 0x0c89, 0xfbe: 0x0c91, 0xfbf: 0x0c99, // Block 0x3f, offset 0xfc0 - 0xfc0: 0x3aa1, 0xfc1: 0x3ac9, 0xfc2: 0x3af1, 0xfc3: 0x3b19, 0xfc4: 0x3b41, 0xfc5: 0x3b69, - 0xfc6: 0x3b91, 0xfc7: 0x3bb9, 0xfc8: 0x3be1, 0xfc9: 0x3c09, 0xfca: 0x3c39, 0xfcb: 0x3c69, - 0xfcc: 0x3c99, 0xfcd: 0x3cd5, 0xfce: 0x3cb1, 0xfcf: 0x3cf5, 0xfd0: 0x3d15, 0xfd1: 0x3d2d, + 0xfc0: 0x0ca1, 0xfc1: 0x0ca9, 0xfc2: 0x0cb1, 0xfc3: 0x0cb9, 0xfc4: 0x0cc1, 0xfc5: 0x0cc9, + 0xfc6: 0x0cd1, 0xfc7: 0x0cd9, 0xfc8: 0x0ce1, 0xfc9: 0x0ce9, 0xfca: 0x0cf1, 0xfcb: 0x0cf9, + 0xfcc: 0x0d01, 0xfcd: 0x3cd5, 0xfce: 0x0d09, 0xfcf: 0x3cf5, 0xfd0: 0x3d15, 0xfd1: 0x3d2d, 0xfd2: 0x3d45, 0xfd3: 0x3d5d, 0xfd4: 0x3d75, 0xfd5: 0x3d75, 0xfd6: 0x3d5d, 0xfd7: 0x3d8d, 0xfd8: 0x07d5, 0xfd9: 0x3da5, 0xfda: 0x3dbd, 0xfdb: 0x3dd5, 0xfdc: 0x3ded, 0xfdd: 0x3e05, 0xfde: 0x3e1d, 0xfdf: 0x3e35, 0xfe0: 0x3e4d, 0xfe1: 0x3e65, 0xfe2: 0x3e7d, 0xfe3: 0x3e95, @@ -1324,769 +1467,769 @@ var idnaValues = [8192]uint16{ 0xfea: 0x3ef5, 0xfeb: 0x3f0d, 0xfec: 0x3f25, 0xfed: 0x3f3d, 0xfee: 0x3f55, 0xfef: 0x3f55, 0xff0: 0x3f6d, 0xff1: 0x3f6d, 0xff2: 0x3f6d, 0xff3: 0x3f85, 0xff4: 0x3f9d, 0xff5: 0x3fb5, 0xff6: 0x3fcd, 0xff7: 0x3fb5, 0xff8: 0x3fe5, 0xff9: 0x3ffd, 0xffa: 0x3f85, 0xffb: 0x4015, - 0xffc: 0x402d, 0xffd: 0x402d, 0xffe: 0x402d, 0xfff: 0x3cc9, + 0xffc: 0x402d, 0xffd: 0x402d, 0xffe: 0x402d, 0xfff: 0x0d11, // Block 0x40, offset 0x1000 - 0x1000: 0x3d01, 0x1001: 0x3d69, 0x1002: 0x3dd1, 0x1003: 0x3e39, 0x1004: 0x3e89, 0x1005: 0x3ef1, - 0x1006: 0x3f41, 0x1007: 0x3f91, 0x1008: 0x4011, 0x1009: 0x4079, 0x100a: 0x40c9, 0x100b: 0x4119, - 0x100c: 0x4169, 0x100d: 0x41d1, 0x100e: 0x4239, 0x100f: 0x4289, 0x1010: 0x42d9, 0x1011: 0x4311, - 0x1012: 0x4361, 0x1013: 0x43c9, 0x1014: 0x4431, 0x1015: 0x4469, 0x1016: 0x44e9, 0x1017: 0x4581, - 0x1018: 0x4601, 0x1019: 0x4651, 0x101a: 0x46d1, 0x101b: 0x4751, 0x101c: 0x47b9, 0x101d: 0x4809, - 0x101e: 0x4859, 0x101f: 0x48a9, 0x1020: 0x4911, 0x1021: 0x4991, 0x1022: 0x49f9, 0x1023: 0x4a49, - 0x1024: 0x4a99, 0x1025: 0x4ae9, 0x1026: 0x4b21, 0x1027: 0x4b59, 0x1028: 0x4b91, 0x1029: 0x4bc9, - 0x102a: 0x4c19, 0x102b: 0x4c69, 0x102c: 0x4ce9, 0x102d: 0x4d39, 0x102e: 0x4da1, 0x102f: 0x4e21, - 0x1030: 0x4e71, 0x1031: 0x4ea9, 0x1032: 0x4ee1, 0x1033: 0x4f61, 0x1034: 0x4fc9, 0x1035: 0x5049, - 0x1036: 0x5099, 0x1037: 0x5119, 0x1038: 0x5151, 0x1039: 0x51a1, 0x103a: 0x51f1, 0x103b: 0x5241, - 0x103c: 0x5291, 0x103d: 0x52e1, 0x103e: 0x5349, 0x103f: 0x5399, + 0x1000: 0x10f9, 0x1001: 0x1101, 0x1002: 0x40a5, 0x1003: 0x1109, 0x1004: 0x1111, 0x1005: 0x1119, + 0x1006: 0x1121, 0x1007: 0x1129, 0x1008: 0x40c5, 0x1009: 0x1131, 0x100a: 0x1139, 0x100b: 0x1141, + 0x100c: 0x40e5, 0x100d: 0x40e5, 0x100e: 0x1149, 0x100f: 0x1151, 0x1010: 0x1159, 0x1011: 0x4105, + 0x1012: 0x4125, 0x1013: 0x4145, 0x1014: 0x4165, 0x1015: 0x4185, 0x1016: 0x1161, 0x1017: 0x1169, + 0x1018: 0x1171, 0x1019: 0x1179, 0x101a: 0x1181, 0x101b: 0x41a5, 0x101c: 0x1189, 0x101d: 0x1191, + 0x101e: 0x1199, 0x101f: 0x41c5, 0x1020: 0x41e5, 0x1021: 0x11a1, 0x1022: 0x4205, 0x1023: 0x4225, + 0x1024: 0x4245, 0x1025: 0x11a9, 0x1026: 0x4265, 0x1027: 0x11b1, 0x1028: 0x11b9, 0x1029: 0x10f9, + 0x102a: 0x4285, 0x102b: 0x42a5, 0x102c: 0x42c5, 0x102d: 0x42e5, 0x102e: 0x11c1, 0x102f: 0x11c9, + 0x1030: 0x11d1, 0x1031: 0x11d9, 0x1032: 0x4305, 0x1033: 0x11e1, 0x1034: 0x11e9, 0x1035: 0x11f1, + 0x1036: 0x4325, 0x1037: 0x11f9, 0x1038: 0x1201, 0x1039: 0x11f9, 0x103a: 0x1209, 0x103b: 0x1211, + 0x103c: 0x4345, 0x103d: 0x1219, 0x103e: 0x1221, 0x103f: 0x1219, // Block 0x41, offset 0x1040 - 0x1040: 0x53d1, 0x1041: 0x5421, 0x1042: 0x5471, 0x1043: 0x54c1, 0x1044: 0x5529, 0x1045: 0x5579, - 0x1046: 0x55c9, 0x1047: 0x5619, 0x1048: 0x5699, 0x1049: 0x5701, 0x104a: 0x5739, 0x104b: 0x57b9, - 0x104c: 0x57f1, 0x104d: 0x5859, 0x104e: 0x58c1, 0x104f: 0x5911, 0x1050: 0x5961, 0x1051: 0x59b1, - 0x1052: 0x5a19, 0x1053: 0x5a51, 0x1054: 0x5aa1, 0x1055: 0x5b09, 0x1056: 0x5b41, 0x1057: 0x5bc1, - 0x1058: 0x5c11, 0x1059: 0x5c39, 0x105a: 0x5c61, 0x105b: 0x5c89, 0x105c: 0x5cb1, 0x105d: 0x5cd9, - 0x105e: 0x5d01, 0x105f: 0x5d29, 0x1060: 0x5d51, 0x1061: 0x5d79, 0x1062: 0x5da1, 0x1063: 0x5dd1, - 0x1064: 0x5e01, 0x1065: 0x5e31, 0x1066: 0x5e61, 0x1067: 0x5e91, 0x1068: 0x5ec1, 0x1069: 0x5ef1, - 0x106a: 0x5f21, 0x106b: 0x5f51, 0x106c: 0x5f81, 0x106d: 0x5fb1, 0x106e: 0x5fe1, 0x106f: 0x6011, - 0x1070: 0x6041, 0x1071: 0x4045, 0x1072: 0x6071, 0x1073: 0x6089, 0x1074: 0x4065, 0x1075: 0x60a1, - 0x1076: 0x60b9, 0x1077: 0x60d1, 0x1078: 0x4085, 0x1079: 0x4085, 0x107a: 0x60e9, 0x107b: 0x6101, - 0x107c: 0x6139, 0x107d: 0x6171, 0x107e: 0x61a9, 0x107f: 0x61e1, + 0x1040: 0x4365, 0x1041: 0x4385, 0x1042: 0x0040, 0x1043: 0x1229, 0x1044: 0x1231, 0x1045: 0x1239, + 0x1046: 0x1241, 0x1047: 0x0040, 0x1048: 0x1249, 0x1049: 0x1251, 0x104a: 0x1259, 0x104b: 0x1261, + 0x104c: 0x1269, 0x104d: 0x1271, 0x104e: 0x1199, 0x104f: 0x1279, 0x1050: 0x1281, 0x1051: 0x1289, + 0x1052: 0x43a5, 0x1053: 0x1291, 0x1054: 0x1121, 0x1055: 0x43c5, 0x1056: 0x43e5, 0x1057: 0x1299, + 0x1058: 0x0040, 0x1059: 0x4405, 0x105a: 0x12a1, 0x105b: 0x12a9, 0x105c: 0x12b1, 0x105d: 0x12b9, + 0x105e: 0x12c1, 0x105f: 0x12c9, 0x1060: 0x12d1, 0x1061: 0x12d9, 0x1062: 0x12e1, 0x1063: 0x12e9, + 0x1064: 0x12f1, 0x1065: 0x12f9, 0x1066: 0x1301, 0x1067: 0x1309, 0x1068: 0x1311, 0x1069: 0x1319, + 0x106a: 0x1321, 0x106b: 0x1329, 0x106c: 0x1331, 0x106d: 0x1339, 0x106e: 0x1341, 0x106f: 0x1349, + 0x1070: 0x1351, 0x1071: 0x1359, 0x1072: 0x1361, 0x1073: 0x1369, 0x1074: 0x1371, 0x1075: 0x1379, + 0x1076: 0x1381, 0x1077: 0x1389, 0x1078: 0x1391, 0x1079: 0x1399, 0x107a: 0x13a1, 0x107b: 0x13a9, + 0x107c: 0x13b1, 0x107d: 0x13b9, 0x107e: 0x13c1, 0x107f: 0x4425, // Block 0x42, offset 0x1080 - 0x1080: 0x6249, 0x1081: 0x6261, 0x1082: 0x40a5, 0x1083: 0x6279, 0x1084: 0x6291, 0x1085: 0x62a9, - 0x1086: 0x62c1, 0x1087: 0x62d9, 0x1088: 0x40c5, 0x1089: 0x62f1, 0x108a: 0x6319, 0x108b: 0x6331, - 0x108c: 0x40e5, 0x108d: 0x40e5, 0x108e: 0x6349, 0x108f: 0x6361, 0x1090: 0x6379, 0x1091: 0x4105, - 0x1092: 0x4125, 0x1093: 0x4145, 0x1094: 0x4165, 0x1095: 0x4185, 0x1096: 0x6391, 0x1097: 0x63a9, - 0x1098: 0x63c1, 0x1099: 0x63d9, 0x109a: 0x63f1, 0x109b: 0x41a5, 0x109c: 0x6409, 0x109d: 0x6421, - 0x109e: 0x6439, 0x109f: 0x41c5, 0x10a0: 0x41e5, 0x10a1: 0x6451, 0x10a2: 0x4205, 0x10a3: 0x4225, - 0x10a4: 0x4245, 0x10a5: 0x6469, 0x10a6: 0x4265, 0x10a7: 0x6481, 0x10a8: 0x64b1, 0x10a9: 0x6249, - 0x10aa: 0x4285, 0x10ab: 0x42a5, 0x10ac: 0x42c5, 0x10ad: 0x42e5, 0x10ae: 0x64e9, 0x10af: 0x6529, - 0x10b0: 0x6571, 0x10b1: 0x6589, 0x10b2: 0x4305, 0x10b3: 0x65a1, 0x10b4: 0x65b9, 0x10b5: 0x65d1, - 0x10b6: 0x4325, 0x10b7: 0x65e9, 0x10b8: 0x6601, 0x10b9: 0x65e9, 0x10ba: 0x6619, 0x10bb: 0x6631, - 0x10bc: 0x4345, 0x10bd: 0x6649, 0x10be: 0x6661, 0x10bf: 0x6649, + 0x1080: 0xe00d, 0x1081: 0x0008, 0x1082: 0xe00d, 0x1083: 0x0008, 0x1084: 0xe00d, 0x1085: 0x0008, + 0x1086: 0xe00d, 0x1087: 0x0008, 0x1088: 0xe00d, 0x1089: 0x0008, 0x108a: 0xe00d, 0x108b: 0x0008, + 0x108c: 0xe00d, 0x108d: 0x0008, 0x108e: 0xe00d, 0x108f: 0x0008, 0x1090: 0xe00d, 0x1091: 0x0008, + 0x1092: 0xe00d, 0x1093: 0x0008, 0x1094: 0xe00d, 0x1095: 0x0008, 0x1096: 0xe00d, 0x1097: 0x0008, + 0x1098: 0xe00d, 0x1099: 0x0008, 0x109a: 0xe00d, 0x109b: 0x0008, 0x109c: 0xe00d, 0x109d: 0x0008, + 0x109e: 0xe00d, 0x109f: 0x0008, 0x10a0: 0xe00d, 0x10a1: 0x0008, 0x10a2: 0xe00d, 0x10a3: 0x0008, + 0x10a4: 0xe00d, 0x10a5: 0x0008, 0x10a6: 0xe00d, 0x10a7: 0x0008, 0x10a8: 0xe00d, 0x10a9: 0x0008, + 0x10aa: 0xe00d, 0x10ab: 0x0008, 0x10ac: 0xe00d, 0x10ad: 0x0008, 0x10ae: 0x0008, 0x10af: 0x3308, + 0x10b0: 0x3318, 0x10b1: 0x3318, 0x10b2: 0x3318, 0x10b3: 0x0018, 0x10b4: 0x3308, 0x10b5: 0x3308, + 0x10b6: 0x3308, 0x10b7: 0x3308, 0x10b8: 0x3308, 0x10b9: 0x3308, 0x10ba: 0x3308, 0x10bb: 0x3308, + 0x10bc: 0x3308, 0x10bd: 0x3308, 0x10be: 0x0018, 0x10bf: 0x0008, // Block 0x43, offset 0x10c0 - 0x10c0: 0x4365, 0x10c1: 0x4385, 0x10c2: 0x0040, 0x10c3: 0x6679, 0x10c4: 0x6691, 0x10c5: 0x66a9, - 0x10c6: 0x66c1, 0x10c7: 0x0040, 0x10c8: 0x66f9, 0x10c9: 0x6711, 0x10ca: 0x6729, 0x10cb: 0x6741, - 0x10cc: 0x6759, 0x10cd: 0x6771, 0x10ce: 0x6439, 0x10cf: 0x6789, 0x10d0: 0x67a1, 0x10d1: 0x67b9, - 0x10d2: 0x43a5, 0x10d3: 0x67d1, 0x10d4: 0x62c1, 0x10d5: 0x43c5, 0x10d6: 0x43e5, 0x10d7: 0x67e9, - 0x10d8: 0x0040, 0x10d9: 0x4405, 0x10da: 0x6801, 0x10db: 0x6819, 0x10dc: 0x6831, 0x10dd: 0x6849, - 0x10de: 0x6861, 0x10df: 0x6891, 0x10e0: 0x68c1, 0x10e1: 0x68e9, 0x10e2: 0x6911, 0x10e3: 0x6939, - 0x10e4: 0x6961, 0x10e5: 0x6989, 0x10e6: 0x69b1, 0x10e7: 0x69d9, 0x10e8: 0x6a01, 0x10e9: 0x6a29, - 0x10ea: 0x6a59, 0x10eb: 0x6a89, 0x10ec: 0x6ab9, 0x10ed: 0x6ae9, 0x10ee: 0x6b19, 0x10ef: 0x6b49, - 0x10f0: 0x6b79, 0x10f1: 0x6ba9, 0x10f2: 0x6bd9, 0x10f3: 0x6c09, 0x10f4: 0x6c39, 0x10f5: 0x6c69, - 0x10f6: 0x6c99, 0x10f7: 0x6cc9, 0x10f8: 0x6cf9, 0x10f9: 0x6d29, 0x10fa: 0x6d59, 0x10fb: 0x6d89, - 0x10fc: 0x6db9, 0x10fd: 0x6de9, 0x10fe: 0x6e19, 0x10ff: 0x4425, + 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008, + 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008, + 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008, + 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008, + 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0x02d1, 0x10dd: 0x13c9, + 0x10de: 0x3308, 0x10df: 0x3308, 0x10e0: 0x0008, 0x10e1: 0x0008, 0x10e2: 0x0008, 0x10e3: 0x0008, + 0x10e4: 0x0008, 0x10e5: 0x0008, 0x10e6: 0x0008, 0x10e7: 0x0008, 0x10e8: 0x0008, 0x10e9: 0x0008, + 0x10ea: 0x0008, 0x10eb: 0x0008, 0x10ec: 0x0008, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x0008, + 0x10f0: 0x0008, 0x10f1: 0x0008, 0x10f2: 0x0008, 0x10f3: 0x0008, 0x10f4: 0x0008, 0x10f5: 0x0008, + 0x10f6: 0x0008, 0x10f7: 0x0008, 0x10f8: 0x0008, 0x10f9: 0x0008, 0x10fa: 0x0008, 0x10fb: 0x0008, + 0x10fc: 0x0008, 0x10fd: 0x0008, 0x10fe: 0x0008, 0x10ff: 0x0008, // Block 0x44, offset 0x1100 - 0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008, - 0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008, - 0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008, - 0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008, - 0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0xe00d, 0x111d: 0x0008, - 0x111e: 0xe00d, 0x111f: 0x0008, 0x1120: 0xe00d, 0x1121: 0x0008, 0x1122: 0xe00d, 0x1123: 0x0008, + 0x1100: 0x0018, 0x1101: 0x0018, 0x1102: 0x0018, 0x1103: 0x0018, 0x1104: 0x0018, 0x1105: 0x0018, + 0x1106: 0x0018, 0x1107: 0x0018, 0x1108: 0x0018, 0x1109: 0x0018, 0x110a: 0x0018, 0x110b: 0x0018, + 0x110c: 0x0018, 0x110d: 0x0018, 0x110e: 0x0018, 0x110f: 0x0018, 0x1110: 0x0018, 0x1111: 0x0018, + 0x1112: 0x0018, 0x1113: 0x0018, 0x1114: 0x0018, 0x1115: 0x0018, 0x1116: 0x0018, 0x1117: 0x0008, + 0x1118: 0x0008, 0x1119: 0x0008, 0x111a: 0x0008, 0x111b: 0x0008, 0x111c: 0x0008, 0x111d: 0x0008, + 0x111e: 0x0008, 0x111f: 0x0008, 0x1120: 0x0018, 0x1121: 0x0018, 0x1122: 0xe00d, 0x1123: 0x0008, 0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008, - 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x3308, - 0x1130: 0x3318, 0x1131: 0x3318, 0x1132: 0x3318, 0x1133: 0x0018, 0x1134: 0x3308, 0x1135: 0x3308, - 0x1136: 0x3308, 0x1137: 0x3308, 0x1138: 0x3308, 0x1139: 0x3308, 0x113a: 0x3308, 0x113b: 0x3308, - 0x113c: 0x3308, 0x113d: 0x3308, 0x113e: 0x0018, 0x113f: 0x0008, + 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0xe00d, 0x112f: 0x0008, + 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0xe00d, 0x1133: 0x0008, 0x1134: 0xe00d, 0x1135: 0x0008, + 0x1136: 0xe00d, 0x1137: 0x0008, 0x1138: 0xe00d, 0x1139: 0x0008, 0x113a: 0xe00d, 0x113b: 0x0008, + 0x113c: 0xe00d, 0x113d: 0x0008, 0x113e: 0xe00d, 0x113f: 0x0008, // Block 0x45, offset 0x1140 0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008, 0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008, 0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008, 0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008, - 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0x0ea1, 0x115d: 0x6e49, - 0x115e: 0x3308, 0x115f: 0x3308, 0x1160: 0x0008, 0x1161: 0x0008, 0x1162: 0x0008, 0x1163: 0x0008, - 0x1164: 0x0008, 0x1165: 0x0008, 0x1166: 0x0008, 0x1167: 0x0008, 0x1168: 0x0008, 0x1169: 0x0008, - 0x116a: 0x0008, 0x116b: 0x0008, 0x116c: 0x0008, 0x116d: 0x0008, 0x116e: 0x0008, 0x116f: 0x0008, - 0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, - 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0x0008, 0x117a: 0x0008, 0x117b: 0x0008, - 0x117c: 0x0008, 0x117d: 0x0008, 0x117e: 0x0008, 0x117f: 0x0008, + 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0xe00d, 0x115d: 0x0008, + 0x115e: 0xe00d, 0x115f: 0x0008, 0x1160: 0xe00d, 0x1161: 0x0008, 0x1162: 0xe00d, 0x1163: 0x0008, + 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008, + 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008, + 0x1170: 0xe0fd, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, + 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0xe01d, 0x117a: 0x0008, 0x117b: 0xe03d, + 0x117c: 0x0008, 0x117d: 0x4445, 0x117e: 0xe00d, 0x117f: 0x0008, // Block 0x46, offset 0x1180 - 0x1180: 0x0018, 0x1181: 0x0018, 0x1182: 0x0018, 0x1183: 0x0018, 0x1184: 0x0018, 0x1185: 0x0018, - 0x1186: 0x0018, 0x1187: 0x0018, 0x1188: 0x0018, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0x0018, - 0x118c: 0x0018, 0x118d: 0x0018, 0x118e: 0x0018, 0x118f: 0x0018, 0x1190: 0x0018, 0x1191: 0x0018, - 0x1192: 0x0018, 0x1193: 0x0018, 0x1194: 0x0018, 0x1195: 0x0018, 0x1196: 0x0018, 0x1197: 0x0008, - 0x1198: 0x0008, 0x1199: 0x0008, 0x119a: 0x0008, 0x119b: 0x0008, 0x119c: 0x0008, 0x119d: 0x0008, - 0x119e: 0x0008, 0x119f: 0x0008, 0x11a0: 0x0018, 0x11a1: 0x0018, 0x11a2: 0xe00d, 0x11a3: 0x0008, + 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008, + 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0x0008, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0xe03d, + 0x118c: 0x0008, 0x118d: 0x0409, 0x118e: 0x0008, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008, + 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0x0008, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008, + 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008, + 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008, 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, - 0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008, - 0x11b0: 0x0008, 0x11b1: 0x0008, 0x11b2: 0xe00d, 0x11b3: 0x0008, 0x11b4: 0xe00d, 0x11b5: 0x0008, + 0x11aa: 0x13d1, 0x11ab: 0x0371, 0x11ac: 0x0401, 0x11ad: 0x13d9, 0x11ae: 0x0421, 0x11af: 0x0008, + 0x11b0: 0x13e1, 0x11b1: 0x13e9, 0x11b2: 0x0429, 0x11b3: 0x4465, 0x11b4: 0xe00d, 0x11b5: 0x0008, 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0xe00d, 0x11b9: 0x0008, 0x11ba: 0xe00d, 0x11bb: 0x0008, 0x11bc: 0xe00d, 0x11bd: 0x0008, 0x11be: 0xe00d, 0x11bf: 0x0008, // Block 0x47, offset 0x11c0 - 0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008, - 0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0xe00d, 0x11c9: 0x0008, 0x11ca: 0xe00d, 0x11cb: 0x0008, - 0x11cc: 0xe00d, 0x11cd: 0x0008, 0x11ce: 0xe00d, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008, - 0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0xe00d, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008, - 0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008, - 0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008, - 0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008, - 0x11ea: 0xe00d, 0x11eb: 0x0008, 0x11ec: 0xe00d, 0x11ed: 0x0008, 0x11ee: 0xe00d, 0x11ef: 0x0008, - 0x11f0: 0xe0fd, 0x11f1: 0x0008, 0x11f2: 0x0008, 0x11f3: 0x0008, 0x11f4: 0x0008, 0x11f5: 0x0008, - 0x11f6: 0x0008, 0x11f7: 0x0008, 0x11f8: 0x0008, 0x11f9: 0xe01d, 0x11fa: 0x0008, 0x11fb: 0xe03d, - 0x11fc: 0x0008, 0x11fd: 0x4445, 0x11fe: 0xe00d, 0x11ff: 0x0008, + 0x11c0: 0x650d, 0x11c1: 0x652d, 0x11c2: 0x654d, 0x11c3: 0x656d, 0x11c4: 0x658d, 0x11c5: 0x65ad, + 0x11c6: 0x65cd, 0x11c7: 0x65ed, 0x11c8: 0x660d, 0x11c9: 0x662d, 0x11ca: 0x664d, 0x11cb: 0x666d, + 0x11cc: 0x668d, 0x11cd: 0x66ad, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0x66cd, 0x11d1: 0x0008, + 0x11d2: 0x66ed, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x670d, 0x11d6: 0x672d, 0x11d7: 0x674d, + 0x11d8: 0x676d, 0x11d9: 0x678d, 0x11da: 0x67ad, 0x11db: 0x67cd, 0x11dc: 0x67ed, 0x11dd: 0x680d, + 0x11de: 0x682d, 0x11df: 0x0008, 0x11e0: 0x684d, 0x11e1: 0x0008, 0x11e2: 0x686d, 0x11e3: 0x0008, + 0x11e4: 0x0008, 0x11e5: 0x688d, 0x11e6: 0x68ad, 0x11e7: 0x0008, 0x11e8: 0x0008, 0x11e9: 0x0008, + 0x11ea: 0x68cd, 0x11eb: 0x68ed, 0x11ec: 0x690d, 0x11ed: 0x692d, 0x11ee: 0x694d, 0x11ef: 0x696d, + 0x11f0: 0x698d, 0x11f1: 0x69ad, 0x11f2: 0x69cd, 0x11f3: 0x69ed, 0x11f4: 0x6a0d, 0x11f5: 0x6a2d, + 0x11f6: 0x6a4d, 0x11f7: 0x6a6d, 0x11f8: 0x6a8d, 0x11f9: 0x6aad, 0x11fa: 0x6acd, 0x11fb: 0x6aed, + 0x11fc: 0x6b0d, 0x11fd: 0x6b2d, 0x11fe: 0x6b4d, 0x11ff: 0x6b6d, // Block 0x48, offset 0x1200 - 0x1200: 0xe00d, 0x1201: 0x0008, 0x1202: 0xe00d, 0x1203: 0x0008, 0x1204: 0xe00d, 0x1205: 0x0008, - 0x1206: 0xe00d, 0x1207: 0x0008, 0x1208: 0x0008, 0x1209: 0x0018, 0x120a: 0x0018, 0x120b: 0xe03d, - 0x120c: 0x0008, 0x120d: 0x11d9, 0x120e: 0x0008, 0x120f: 0x0008, 0x1210: 0xe00d, 0x1211: 0x0008, - 0x1212: 0xe00d, 0x1213: 0x0008, 0x1214: 0x0008, 0x1215: 0x0008, 0x1216: 0xe00d, 0x1217: 0x0008, - 0x1218: 0xe00d, 0x1219: 0x0008, 0x121a: 0xe00d, 0x121b: 0x0008, 0x121c: 0xe00d, 0x121d: 0x0008, - 0x121e: 0xe00d, 0x121f: 0x0008, 0x1220: 0xe00d, 0x1221: 0x0008, 0x1222: 0xe00d, 0x1223: 0x0008, - 0x1224: 0xe00d, 0x1225: 0x0008, 0x1226: 0xe00d, 0x1227: 0x0008, 0x1228: 0xe00d, 0x1229: 0x0008, - 0x122a: 0x6e61, 0x122b: 0x1029, 0x122c: 0x11c1, 0x122d: 0x6e79, 0x122e: 0x1221, 0x122f: 0x0008, - 0x1230: 0x6e91, 0x1231: 0x6ea9, 0x1232: 0x1239, 0x1233: 0x4465, 0x1234: 0xe00d, 0x1235: 0x0008, - 0x1236: 0xe00d, 0x1237: 0x0008, 0x1238: 0xe00d, 0x1239: 0x0008, 0x123a: 0xe00d, 0x123b: 0x0008, - 0x123c: 0xe00d, 0x123d: 0x0008, 0x123e: 0xe00d, 0x123f: 0x0008, + 0x1200: 0x7acd, 0x1201: 0x7aed, 0x1202: 0x7b0d, 0x1203: 0x7b2d, 0x1204: 0x7b4d, 0x1205: 0x7b6d, + 0x1206: 0x7b8d, 0x1207: 0x7bad, 0x1208: 0x7bcd, 0x1209: 0x7bed, 0x120a: 0x7c0d, 0x120b: 0x7c2d, + 0x120c: 0x7c4d, 0x120d: 0x7c6d, 0x120e: 0x7c8d, 0x120f: 0x1409, 0x1210: 0x1411, 0x1211: 0x1419, + 0x1212: 0x7cad, 0x1213: 0x7ccd, 0x1214: 0x7ced, 0x1215: 0x1421, 0x1216: 0x1429, 0x1217: 0x1431, + 0x1218: 0x7d0d, 0x1219: 0x7d2d, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040, + 0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040, + 0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040, + 0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040, + 0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x0040, 0x1233: 0x0040, 0x1234: 0x0040, 0x1235: 0x0040, + 0x1236: 0x0040, 0x1237: 0x0040, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040, + 0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040, // Block 0x49, offset 0x1240 - 0x1240: 0x650d, 0x1241: 0x652d, 0x1242: 0x654d, 0x1243: 0x656d, 0x1244: 0x658d, 0x1245: 0x65ad, - 0x1246: 0x65cd, 0x1247: 0x65ed, 0x1248: 0x660d, 0x1249: 0x662d, 0x124a: 0x664d, 0x124b: 0x666d, - 0x124c: 0x668d, 0x124d: 0x66ad, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x66cd, 0x1251: 0x0008, - 0x1252: 0x66ed, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x670d, 0x1256: 0x672d, 0x1257: 0x674d, - 0x1258: 0x676d, 0x1259: 0x678d, 0x125a: 0x67ad, 0x125b: 0x67cd, 0x125c: 0x67ed, 0x125d: 0x680d, - 0x125e: 0x682d, 0x125f: 0x0008, 0x1260: 0x684d, 0x1261: 0x0008, 0x1262: 0x686d, 0x1263: 0x0008, - 0x1264: 0x0008, 0x1265: 0x688d, 0x1266: 0x68ad, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008, - 0x126a: 0x68cd, 0x126b: 0x68ed, 0x126c: 0x690d, 0x126d: 0x692d, 0x126e: 0x694d, 0x126f: 0x696d, - 0x1270: 0x698d, 0x1271: 0x69ad, 0x1272: 0x69cd, 0x1273: 0x69ed, 0x1274: 0x6a0d, 0x1275: 0x6a2d, - 0x1276: 0x6a4d, 0x1277: 0x6a6d, 0x1278: 0x6a8d, 0x1279: 0x6aad, 0x127a: 0x6acd, 0x127b: 0x6aed, - 0x127c: 0x6b0d, 0x127d: 0x6b2d, 0x127e: 0x6b4d, 0x127f: 0x6b6d, + 0x1240: 0x1439, 0x1241: 0x1441, 0x1242: 0x1449, 0x1243: 0x7d4d, 0x1244: 0x7d6d, 0x1245: 0x1451, + 0x1246: 0x1451, 0x1247: 0x0040, 0x1248: 0x0040, 0x1249: 0x0040, 0x124a: 0x0040, 0x124b: 0x0040, + 0x124c: 0x0040, 0x124d: 0x0040, 0x124e: 0x0040, 0x124f: 0x0040, 0x1250: 0x0040, 0x1251: 0x0040, + 0x1252: 0x0040, 0x1253: 0x1459, 0x1254: 0x1461, 0x1255: 0x1469, 0x1256: 0x1471, 0x1257: 0x1479, + 0x1258: 0x0040, 0x1259: 0x0040, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x1481, + 0x125e: 0x3308, 0x125f: 0x1489, 0x1260: 0x1491, 0x1261: 0x0779, 0x1262: 0x0791, 0x1263: 0x1499, + 0x1264: 0x14a1, 0x1265: 0x14a9, 0x1266: 0x14b1, 0x1267: 0x14b9, 0x1268: 0x14c1, 0x1269: 0x071a, + 0x126a: 0x14c9, 0x126b: 0x14d1, 0x126c: 0x14d9, 0x126d: 0x14e1, 0x126e: 0x14e9, 0x126f: 0x14f1, + 0x1270: 0x14f9, 0x1271: 0x1501, 0x1272: 0x1509, 0x1273: 0x1511, 0x1274: 0x1519, 0x1275: 0x1521, + 0x1276: 0x1529, 0x1277: 0x0040, 0x1278: 0x1531, 0x1279: 0x1539, 0x127a: 0x1541, 0x127b: 0x1549, + 0x127c: 0x1551, 0x127d: 0x0040, 0x127e: 0x1559, 0x127f: 0x0040, // Block 0x4a, offset 0x1280 - 0x1280: 0x7acd, 0x1281: 0x7aed, 0x1282: 0x7b0d, 0x1283: 0x7b2d, 0x1284: 0x7b4d, 0x1285: 0x7b6d, - 0x1286: 0x7b8d, 0x1287: 0x7bad, 0x1288: 0x7bcd, 0x1289: 0x7bed, 0x128a: 0x7c0d, 0x128b: 0x7c2d, - 0x128c: 0x7c4d, 0x128d: 0x7c6d, 0x128e: 0x7c8d, 0x128f: 0x6f19, 0x1290: 0x6f41, 0x1291: 0x6f69, - 0x1292: 0x7cad, 0x1293: 0x7ccd, 0x1294: 0x7ced, 0x1295: 0x6f91, 0x1296: 0x6fb9, 0x1297: 0x6fe1, - 0x1298: 0x7d0d, 0x1299: 0x7d2d, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x0040, - 0x129e: 0x0040, 0x129f: 0x0040, 0x12a0: 0x0040, 0x12a1: 0x0040, 0x12a2: 0x0040, 0x12a3: 0x0040, - 0x12a4: 0x0040, 0x12a5: 0x0040, 0x12a6: 0x0040, 0x12a7: 0x0040, 0x12a8: 0x0040, 0x12a9: 0x0040, - 0x12aa: 0x0040, 0x12ab: 0x0040, 0x12ac: 0x0040, 0x12ad: 0x0040, 0x12ae: 0x0040, 0x12af: 0x0040, - 0x12b0: 0x0040, 0x12b1: 0x0040, 0x12b2: 0x0040, 0x12b3: 0x0040, 0x12b4: 0x0040, 0x12b5: 0x0040, - 0x12b6: 0x0040, 0x12b7: 0x0040, 0x12b8: 0x0040, 0x12b9: 0x0040, 0x12ba: 0x0040, 0x12bb: 0x0040, - 0x12bc: 0x0040, 0x12bd: 0x0040, 0x12be: 0x0040, 0x12bf: 0x0040, + 0x1280: 0x1561, 0x1281: 0x1569, 0x1282: 0x0040, 0x1283: 0x1571, 0x1284: 0x1579, 0x1285: 0x0040, + 0x1286: 0x1581, 0x1287: 0x1589, 0x1288: 0x1591, 0x1289: 0x1599, 0x128a: 0x15a1, 0x128b: 0x15a9, + 0x128c: 0x15b1, 0x128d: 0x15b9, 0x128e: 0x15c1, 0x128f: 0x15c9, 0x1290: 0x15d1, 0x1291: 0x15d1, + 0x1292: 0x15d9, 0x1293: 0x15d9, 0x1294: 0x15d9, 0x1295: 0x15d9, 0x1296: 0x15e1, 0x1297: 0x15e1, + 0x1298: 0x15e1, 0x1299: 0x15e1, 0x129a: 0x15e9, 0x129b: 0x15e9, 0x129c: 0x15e9, 0x129d: 0x15e9, + 0x129e: 0x15f1, 0x129f: 0x15f1, 0x12a0: 0x15f1, 0x12a1: 0x15f1, 0x12a2: 0x15f9, 0x12a3: 0x15f9, + 0x12a4: 0x15f9, 0x12a5: 0x15f9, 0x12a6: 0x1601, 0x12a7: 0x1601, 0x12a8: 0x1601, 0x12a9: 0x1601, + 0x12aa: 0x1609, 0x12ab: 0x1609, 0x12ac: 0x1609, 0x12ad: 0x1609, 0x12ae: 0x1611, 0x12af: 0x1611, + 0x12b0: 0x1611, 0x12b1: 0x1611, 0x12b2: 0x1619, 0x12b3: 0x1619, 0x12b4: 0x1619, 0x12b5: 0x1619, + 0x12b6: 0x1621, 0x12b7: 0x1621, 0x12b8: 0x1621, 0x12b9: 0x1621, 0x12ba: 0x1629, 0x12bb: 0x1629, + 0x12bc: 0x1629, 0x12bd: 0x1629, 0x12be: 0x1631, 0x12bf: 0x1631, // Block 0x4b, offset 0x12c0 - 0x12c0: 0x7009, 0x12c1: 0x7021, 0x12c2: 0x7039, 0x12c3: 0x7d4d, 0x12c4: 0x7d6d, 0x12c5: 0x7051, - 0x12c6: 0x7051, 0x12c7: 0x0040, 0x12c8: 0x0040, 0x12c9: 0x0040, 0x12ca: 0x0040, 0x12cb: 0x0040, - 0x12cc: 0x0040, 0x12cd: 0x0040, 0x12ce: 0x0040, 0x12cf: 0x0040, 0x12d0: 0x0040, 0x12d1: 0x0040, - 0x12d2: 0x0040, 0x12d3: 0x7069, 0x12d4: 0x7091, 0x12d5: 0x70b9, 0x12d6: 0x70e1, 0x12d7: 0x7109, - 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x7131, - 0x12de: 0x3308, 0x12df: 0x7159, 0x12e0: 0x7181, 0x12e1: 0x20a9, 0x12e2: 0x20f1, 0x12e3: 0x7199, - 0x12e4: 0x71b1, 0x12e5: 0x71c9, 0x12e6: 0x71e1, 0x12e7: 0x71f9, 0x12e8: 0x7211, 0x12e9: 0x1fb2, - 0x12ea: 0x7229, 0x12eb: 0x7251, 0x12ec: 0x7279, 0x12ed: 0x72b1, 0x12ee: 0x72e9, 0x12ef: 0x7311, - 0x12f0: 0x7339, 0x12f1: 0x7361, 0x12f2: 0x7389, 0x12f3: 0x73b1, 0x12f4: 0x73d9, 0x12f5: 0x7401, - 0x12f6: 0x7429, 0x12f7: 0x0040, 0x12f8: 0x7451, 0x12f9: 0x7479, 0x12fa: 0x74a1, 0x12fb: 0x74c9, - 0x12fc: 0x74f1, 0x12fd: 0x0040, 0x12fe: 0x7519, 0x12ff: 0x0040, + 0x12c0: 0x1631, 0x12c1: 0x1631, 0x12c2: 0x1639, 0x12c3: 0x1639, 0x12c4: 0x1641, 0x12c5: 0x1641, + 0x12c6: 0x1649, 0x12c7: 0x1649, 0x12c8: 0x1651, 0x12c9: 0x1651, 0x12ca: 0x1659, 0x12cb: 0x1659, + 0x12cc: 0x1661, 0x12cd: 0x1661, 0x12ce: 0x1669, 0x12cf: 0x1669, 0x12d0: 0x1669, 0x12d1: 0x1669, + 0x12d2: 0x1671, 0x12d3: 0x1671, 0x12d4: 0x1671, 0x12d5: 0x1671, 0x12d6: 0x1679, 0x12d7: 0x1679, + 0x12d8: 0x1679, 0x12d9: 0x1679, 0x12da: 0x1681, 0x12db: 0x1681, 0x12dc: 0x1681, 0x12dd: 0x1681, + 0x12de: 0x1689, 0x12df: 0x1689, 0x12e0: 0x1691, 0x12e1: 0x1691, 0x12e2: 0x1691, 0x12e3: 0x1691, + 0x12e4: 0x1699, 0x12e5: 0x1699, 0x12e6: 0x16a1, 0x12e7: 0x16a1, 0x12e8: 0x16a1, 0x12e9: 0x16a1, + 0x12ea: 0x16a9, 0x12eb: 0x16a9, 0x12ec: 0x16a9, 0x12ed: 0x16a9, 0x12ee: 0x16b1, 0x12ef: 0x16b1, + 0x12f0: 0x16b9, 0x12f1: 0x16b9, 0x12f2: 0x0818, 0x12f3: 0x0818, 0x12f4: 0x0818, 0x12f5: 0x0818, + 0x12f6: 0x0818, 0x12f7: 0x0818, 0x12f8: 0x0818, 0x12f9: 0x0818, 0x12fa: 0x0818, 0x12fb: 0x0818, + 0x12fc: 0x0818, 0x12fd: 0x0818, 0x12fe: 0x0818, 0x12ff: 0x0818, // Block 0x4c, offset 0x1300 - 0x1300: 0x7541, 0x1301: 0x7569, 0x1302: 0x0040, 0x1303: 0x7591, 0x1304: 0x75b9, 0x1305: 0x0040, - 0x1306: 0x75e1, 0x1307: 0x7609, 0x1308: 0x7631, 0x1309: 0x7659, 0x130a: 0x7681, 0x130b: 0x76a9, - 0x130c: 0x76d1, 0x130d: 0x76f9, 0x130e: 0x7721, 0x130f: 0x7749, 0x1310: 0x7771, 0x1311: 0x7771, - 0x1312: 0x7789, 0x1313: 0x7789, 0x1314: 0x7789, 0x1315: 0x7789, 0x1316: 0x77a1, 0x1317: 0x77a1, - 0x1318: 0x77a1, 0x1319: 0x77a1, 0x131a: 0x77b9, 0x131b: 0x77b9, 0x131c: 0x77b9, 0x131d: 0x77b9, - 0x131e: 0x77d1, 0x131f: 0x77d1, 0x1320: 0x77d1, 0x1321: 0x77d1, 0x1322: 0x77e9, 0x1323: 0x77e9, - 0x1324: 0x77e9, 0x1325: 0x77e9, 0x1326: 0x7801, 0x1327: 0x7801, 0x1328: 0x7801, 0x1329: 0x7801, - 0x132a: 0x7819, 0x132b: 0x7819, 0x132c: 0x7819, 0x132d: 0x7819, 0x132e: 0x7831, 0x132f: 0x7831, - 0x1330: 0x7831, 0x1331: 0x7831, 0x1332: 0x7849, 0x1333: 0x7849, 0x1334: 0x7849, 0x1335: 0x7849, - 0x1336: 0x7861, 0x1337: 0x7861, 0x1338: 0x7861, 0x1339: 0x7861, 0x133a: 0x7879, 0x133b: 0x7879, - 0x133c: 0x7879, 0x133d: 0x7879, 0x133e: 0x7891, 0x133f: 0x7891, + 0x1300: 0x0818, 0x1301: 0x0818, 0x1302: 0x0040, 0x1303: 0x0040, 0x1304: 0x0040, 0x1305: 0x0040, + 0x1306: 0x0040, 0x1307: 0x0040, 0x1308: 0x0040, 0x1309: 0x0040, 0x130a: 0x0040, 0x130b: 0x0040, + 0x130c: 0x0040, 0x130d: 0x0040, 0x130e: 0x0040, 0x130f: 0x0040, 0x1310: 0x0040, 0x1311: 0x0040, + 0x1312: 0x0040, 0x1313: 0x16c1, 0x1314: 0x16c1, 0x1315: 0x16c1, 0x1316: 0x16c1, 0x1317: 0x16c9, + 0x1318: 0x16c9, 0x1319: 0x16d1, 0x131a: 0x16d1, 0x131b: 0x16d9, 0x131c: 0x16d9, 0x131d: 0x0149, + 0x131e: 0x16e1, 0x131f: 0x16e1, 0x1320: 0x16e9, 0x1321: 0x16e9, 0x1322: 0x16f1, 0x1323: 0x16f1, + 0x1324: 0x16f9, 0x1325: 0x16f9, 0x1326: 0x16f9, 0x1327: 0x16f9, 0x1328: 0x1701, 0x1329: 0x1701, + 0x132a: 0x1709, 0x132b: 0x1709, 0x132c: 0x1711, 0x132d: 0x1711, 0x132e: 0x1719, 0x132f: 0x1719, + 0x1330: 0x1721, 0x1331: 0x1721, 0x1332: 0x1729, 0x1333: 0x1729, 0x1334: 0x1731, 0x1335: 0x1731, + 0x1336: 0x1739, 0x1337: 0x1739, 0x1338: 0x1739, 0x1339: 0x1741, 0x133a: 0x1741, 0x133b: 0x1741, + 0x133c: 0x1749, 0x133d: 0x1749, 0x133e: 0x1749, 0x133f: 0x1749, // Block 0x4d, offset 0x1340 - 0x1340: 0x7891, 0x1341: 0x7891, 0x1342: 0x78a9, 0x1343: 0x78a9, 0x1344: 0x78c1, 0x1345: 0x78c1, - 0x1346: 0x78d9, 0x1347: 0x78d9, 0x1348: 0x78f1, 0x1349: 0x78f1, 0x134a: 0x7909, 0x134b: 0x7909, - 0x134c: 0x7921, 0x134d: 0x7921, 0x134e: 0x7939, 0x134f: 0x7939, 0x1350: 0x7939, 0x1351: 0x7939, - 0x1352: 0x7951, 0x1353: 0x7951, 0x1354: 0x7951, 0x1355: 0x7951, 0x1356: 0x7969, 0x1357: 0x7969, - 0x1358: 0x7969, 0x1359: 0x7969, 0x135a: 0x7981, 0x135b: 0x7981, 0x135c: 0x7981, 0x135d: 0x7981, - 0x135e: 0x7999, 0x135f: 0x7999, 0x1360: 0x79b1, 0x1361: 0x79b1, 0x1362: 0x79b1, 0x1363: 0x79b1, - 0x1364: 0x79c9, 0x1365: 0x79c9, 0x1366: 0x79e1, 0x1367: 0x79e1, 0x1368: 0x79e1, 0x1369: 0x79e1, - 0x136a: 0x79f9, 0x136b: 0x79f9, 0x136c: 0x79f9, 0x136d: 0x79f9, 0x136e: 0x7a11, 0x136f: 0x7a11, - 0x1370: 0x7a29, 0x1371: 0x7a29, 0x1372: 0x0818, 0x1373: 0x0818, 0x1374: 0x0818, 0x1375: 0x0818, - 0x1376: 0x0818, 0x1377: 0x0818, 0x1378: 0x0818, 0x1379: 0x0818, 0x137a: 0x0818, 0x137b: 0x0818, - 0x137c: 0x0818, 0x137d: 0x0818, 0x137e: 0x0818, 0x137f: 0x0818, + 0x1340: 0x1949, 0x1341: 0x1951, 0x1342: 0x1959, 0x1343: 0x1961, 0x1344: 0x1969, 0x1345: 0x1971, + 0x1346: 0x1979, 0x1347: 0x1981, 0x1348: 0x1989, 0x1349: 0x1991, 0x134a: 0x1999, 0x134b: 0x19a1, + 0x134c: 0x19a9, 0x134d: 0x19b1, 0x134e: 0x19b9, 0x134f: 0x19c1, 0x1350: 0x19c9, 0x1351: 0x19d1, + 0x1352: 0x19d9, 0x1353: 0x19e1, 0x1354: 0x19e9, 0x1355: 0x19f1, 0x1356: 0x19f9, 0x1357: 0x1a01, + 0x1358: 0x1a09, 0x1359: 0x1a11, 0x135a: 0x1a19, 0x135b: 0x1a21, 0x135c: 0x1a29, 0x135d: 0x1a31, + 0x135e: 0x1a3a, 0x135f: 0x1a42, 0x1360: 0x1a4a, 0x1361: 0x1a52, 0x1362: 0x1a5a, 0x1363: 0x1a62, + 0x1364: 0x1a69, 0x1365: 0x1a71, 0x1366: 0x1761, 0x1367: 0x1a79, 0x1368: 0x1741, 0x1369: 0x1769, + 0x136a: 0x1a81, 0x136b: 0x1a89, 0x136c: 0x1789, 0x136d: 0x1a91, 0x136e: 0x1791, 0x136f: 0x1799, + 0x1370: 0x1a99, 0x1371: 0x1aa1, 0x1372: 0x17b9, 0x1373: 0x1aa9, 0x1374: 0x17c1, 0x1375: 0x17c9, + 0x1376: 0x1ab1, 0x1377: 0x1ab9, 0x1378: 0x17d9, 0x1379: 0x1ac1, 0x137a: 0x17e1, 0x137b: 0x17e9, + 0x137c: 0x18d1, 0x137d: 0x18d9, 0x137e: 0x18f1, 0x137f: 0x18f9, // Block 0x4e, offset 0x1380 - 0x1380: 0x0818, 0x1381: 0x0818, 0x1382: 0x0040, 0x1383: 0x0040, 0x1384: 0x0040, 0x1385: 0x0040, - 0x1386: 0x0040, 0x1387: 0x0040, 0x1388: 0x0040, 0x1389: 0x0040, 0x138a: 0x0040, 0x138b: 0x0040, - 0x138c: 0x0040, 0x138d: 0x0040, 0x138e: 0x0040, 0x138f: 0x0040, 0x1390: 0x0040, 0x1391: 0x0040, - 0x1392: 0x0040, 0x1393: 0x7a41, 0x1394: 0x7a41, 0x1395: 0x7a41, 0x1396: 0x7a41, 0x1397: 0x7a59, - 0x1398: 0x7a59, 0x1399: 0x7a71, 0x139a: 0x7a71, 0x139b: 0x7a89, 0x139c: 0x7a89, 0x139d: 0x0479, - 0x139e: 0x7aa1, 0x139f: 0x7aa1, 0x13a0: 0x7ab9, 0x13a1: 0x7ab9, 0x13a2: 0x7ad1, 0x13a3: 0x7ad1, - 0x13a4: 0x7ae9, 0x13a5: 0x7ae9, 0x13a6: 0x7ae9, 0x13a7: 0x7ae9, 0x13a8: 0x7b01, 0x13a9: 0x7b01, - 0x13aa: 0x7b19, 0x13ab: 0x7b19, 0x13ac: 0x7b41, 0x13ad: 0x7b41, 0x13ae: 0x7b69, 0x13af: 0x7b69, - 0x13b0: 0x7b91, 0x13b1: 0x7b91, 0x13b2: 0x7bb9, 0x13b3: 0x7bb9, 0x13b4: 0x7be1, 0x13b5: 0x7be1, - 0x13b6: 0x7c09, 0x13b7: 0x7c09, 0x13b8: 0x7c09, 0x13b9: 0x7c31, 0x13ba: 0x7c31, 0x13bb: 0x7c31, - 0x13bc: 0x7c59, 0x13bd: 0x7c59, 0x13be: 0x7c59, 0x13bf: 0x7c59, + 0x1380: 0x1901, 0x1381: 0x1921, 0x1382: 0x1929, 0x1383: 0x1931, 0x1384: 0x1939, 0x1385: 0x1959, + 0x1386: 0x1961, 0x1387: 0x1969, 0x1388: 0x1ac9, 0x1389: 0x1989, 0x138a: 0x1ad1, 0x138b: 0x1ad9, + 0x138c: 0x19b9, 0x138d: 0x1ae1, 0x138e: 0x19c1, 0x138f: 0x19c9, 0x1390: 0x1a31, 0x1391: 0x1ae9, + 0x1392: 0x1af1, 0x1393: 0x1a09, 0x1394: 0x1af9, 0x1395: 0x1a11, 0x1396: 0x1a19, 0x1397: 0x1751, + 0x1398: 0x1759, 0x1399: 0x1b01, 0x139a: 0x1761, 0x139b: 0x1b09, 0x139c: 0x1771, 0x139d: 0x1779, + 0x139e: 0x1781, 0x139f: 0x1789, 0x13a0: 0x1b11, 0x13a1: 0x17a1, 0x13a2: 0x17a9, 0x13a3: 0x17b1, + 0x13a4: 0x17b9, 0x13a5: 0x1b19, 0x13a6: 0x17d9, 0x13a7: 0x17f1, 0x13a8: 0x17f9, 0x13a9: 0x1801, + 0x13aa: 0x1809, 0x13ab: 0x1811, 0x13ac: 0x1821, 0x13ad: 0x1829, 0x13ae: 0x1831, 0x13af: 0x1839, + 0x13b0: 0x1841, 0x13b1: 0x1849, 0x13b2: 0x1b21, 0x13b3: 0x1851, 0x13b4: 0x1859, 0x13b5: 0x1861, + 0x13b6: 0x1869, 0x13b7: 0x1871, 0x13b8: 0x1879, 0x13b9: 0x1889, 0x13ba: 0x1891, 0x13bb: 0x1899, + 0x13bc: 0x18a1, 0x13bd: 0x18a9, 0x13be: 0x18b1, 0x13bf: 0x18b9, // Block 0x4f, offset 0x13c0 - 0x13c0: 0x8649, 0x13c1: 0x8671, 0x13c2: 0x8699, 0x13c3: 0x86c1, 0x13c4: 0x86e9, 0x13c5: 0x8711, - 0x13c6: 0x8739, 0x13c7: 0x8761, 0x13c8: 0x8789, 0x13c9: 0x87b1, 0x13ca: 0x87d9, 0x13cb: 0x8801, - 0x13cc: 0x8829, 0x13cd: 0x8851, 0x13ce: 0x8879, 0x13cf: 0x88a1, 0x13d0: 0x88c9, 0x13d1: 0x88f1, - 0x13d2: 0x8919, 0x13d3: 0x8941, 0x13d4: 0x8969, 0x13d5: 0x8991, 0x13d6: 0x89b9, 0x13d7: 0x89e1, - 0x13d8: 0x8a09, 0x13d9: 0x8a31, 0x13da: 0x8a59, 0x13db: 0x8a81, 0x13dc: 0x8aa9, 0x13dd: 0x8ad1, - 0x13de: 0x8afa, 0x13df: 0x8b2a, 0x13e0: 0x8b5a, 0x13e1: 0x8b8a, 0x13e2: 0x8bba, 0x13e3: 0x8bea, - 0x13e4: 0x8c19, 0x13e5: 0x8c41, 0x13e6: 0x7cc1, 0x13e7: 0x8c69, 0x13e8: 0x7c31, 0x13e9: 0x7ce9, - 0x13ea: 0x8c91, 0x13eb: 0x8cb9, 0x13ec: 0x7d89, 0x13ed: 0x8ce1, 0x13ee: 0x7db1, 0x13ef: 0x7dd9, - 0x13f0: 0x8d09, 0x13f1: 0x8d31, 0x13f2: 0x7e79, 0x13f3: 0x8d59, 0x13f4: 0x7ea1, 0x13f5: 0x7ec9, - 0x13f6: 0x8d81, 0x13f7: 0x8da9, 0x13f8: 0x7f19, 0x13f9: 0x8dd1, 0x13fa: 0x7f41, 0x13fb: 0x7f69, - 0x13fc: 0x83f1, 0x13fd: 0x8419, 0x13fe: 0x8491, 0x13ff: 0x84b9, + 0x13c0: 0x18c1, 0x13c1: 0x18c9, 0x13c2: 0x18e1, 0x13c3: 0x18e9, 0x13c4: 0x1909, 0x13c5: 0x1911, + 0x13c6: 0x1919, 0x13c7: 0x1921, 0x13c8: 0x1929, 0x13c9: 0x1941, 0x13ca: 0x1949, 0x13cb: 0x1951, + 0x13cc: 0x1959, 0x13cd: 0x1b29, 0x13ce: 0x1971, 0x13cf: 0x1979, 0x13d0: 0x1981, 0x13d1: 0x1989, + 0x13d2: 0x19a1, 0x13d3: 0x19a9, 0x13d4: 0x19b1, 0x13d5: 0x19b9, 0x13d6: 0x1b31, 0x13d7: 0x19d1, + 0x13d8: 0x19d9, 0x13d9: 0x1b39, 0x13da: 0x19f1, 0x13db: 0x19f9, 0x13dc: 0x1a01, 0x13dd: 0x1a09, + 0x13de: 0x1b41, 0x13df: 0x1761, 0x13e0: 0x1b09, 0x13e1: 0x1789, 0x13e2: 0x1b11, 0x13e3: 0x17b9, + 0x13e4: 0x1b19, 0x13e5: 0x17d9, 0x13e6: 0x1b49, 0x13e7: 0x1841, 0x13e8: 0x1b51, 0x13e9: 0x1b59, + 0x13ea: 0x1b61, 0x13eb: 0x1921, 0x13ec: 0x1929, 0x13ed: 0x1959, 0x13ee: 0x19b9, 0x13ef: 0x1b31, + 0x13f0: 0x1a09, 0x13f1: 0x1b41, 0x13f2: 0x1b69, 0x13f3: 0x1b71, 0x13f4: 0x1b79, 0x13f5: 0x1b81, + 0x13f6: 0x1b89, 0x13f7: 0x1b91, 0x13f8: 0x1b99, 0x13f9: 0x1ba1, 0x13fa: 0x1ba9, 0x13fb: 0x1bb1, + 0x13fc: 0x1bb9, 0x13fd: 0x1bc1, 0x13fe: 0x1bc9, 0x13ff: 0x1bd1, // Block 0x50, offset 0x1400 - 0x1400: 0x84e1, 0x1401: 0x8581, 0x1402: 0x85a9, 0x1403: 0x85d1, 0x1404: 0x85f9, 0x1405: 0x8699, - 0x1406: 0x86c1, 0x1407: 0x86e9, 0x1408: 0x8df9, 0x1409: 0x8789, 0x140a: 0x8e21, 0x140b: 0x8e49, - 0x140c: 0x8879, 0x140d: 0x8e71, 0x140e: 0x88a1, 0x140f: 0x88c9, 0x1410: 0x8ad1, 0x1411: 0x8e99, - 0x1412: 0x8ec1, 0x1413: 0x8a09, 0x1414: 0x8ee9, 0x1415: 0x8a31, 0x1416: 0x8a59, 0x1417: 0x7c71, - 0x1418: 0x7c99, 0x1419: 0x8f11, 0x141a: 0x7cc1, 0x141b: 0x8f39, 0x141c: 0x7d11, 0x141d: 0x7d39, - 0x141e: 0x7d61, 0x141f: 0x7d89, 0x1420: 0x8f61, 0x1421: 0x7e01, 0x1422: 0x7e29, 0x1423: 0x7e51, - 0x1424: 0x7e79, 0x1425: 0x8f89, 0x1426: 0x7f19, 0x1427: 0x7f91, 0x1428: 0x7fb9, 0x1429: 0x7fe1, - 0x142a: 0x8009, 0x142b: 0x8031, 0x142c: 0x8081, 0x142d: 0x80a9, 0x142e: 0x80d1, 0x142f: 0x80f9, - 0x1430: 0x8121, 0x1431: 0x8149, 0x1432: 0x8fb1, 0x1433: 0x8171, 0x1434: 0x8199, 0x1435: 0x81c1, - 0x1436: 0x81e9, 0x1437: 0x8211, 0x1438: 0x8239, 0x1439: 0x8289, 0x143a: 0x82b1, 0x143b: 0x82d9, - 0x143c: 0x8301, 0x143d: 0x8329, 0x143e: 0x8351, 0x143f: 0x8379, + 0x1400: 0x1bd9, 0x1401: 0x1be1, 0x1402: 0x1be9, 0x1403: 0x1bf1, 0x1404: 0x1bf9, 0x1405: 0x1c01, + 0x1406: 0x1c09, 0x1407: 0x1c11, 0x1408: 0x1c19, 0x1409: 0x1c21, 0x140a: 0x1c29, 0x140b: 0x1c31, + 0x140c: 0x1b59, 0x140d: 0x1c39, 0x140e: 0x1c41, 0x140f: 0x1c49, 0x1410: 0x1c51, 0x1411: 0x1b81, + 0x1412: 0x1b89, 0x1413: 0x1b91, 0x1414: 0x1b99, 0x1415: 0x1ba1, 0x1416: 0x1ba9, 0x1417: 0x1bb1, + 0x1418: 0x1bb9, 0x1419: 0x1bc1, 0x141a: 0x1bc9, 0x141b: 0x1bd1, 0x141c: 0x1bd9, 0x141d: 0x1be1, + 0x141e: 0x1be9, 0x141f: 0x1bf1, 0x1420: 0x1bf9, 0x1421: 0x1c01, 0x1422: 0x1c09, 0x1423: 0x1c11, + 0x1424: 0x1c19, 0x1425: 0x1c21, 0x1426: 0x1c29, 0x1427: 0x1c31, 0x1428: 0x1b59, 0x1429: 0x1c39, + 0x142a: 0x1c41, 0x142b: 0x1c49, 0x142c: 0x1c51, 0x142d: 0x1c21, 0x142e: 0x1c29, 0x142f: 0x1c31, + 0x1430: 0x1b59, 0x1431: 0x1b51, 0x1432: 0x1b61, 0x1433: 0x1881, 0x1434: 0x1829, 0x1435: 0x1831, + 0x1436: 0x1839, 0x1437: 0x1c21, 0x1438: 0x1c29, 0x1439: 0x1c31, 0x143a: 0x1881, 0x143b: 0x1889, + 0x143c: 0x1c59, 0x143d: 0x1c59, 0x143e: 0x0018, 0x143f: 0x0018, // Block 0x51, offset 0x1440 - 0x1440: 0x83a1, 0x1441: 0x83c9, 0x1442: 0x8441, 0x1443: 0x8469, 0x1444: 0x8509, 0x1445: 0x8531, - 0x1446: 0x8559, 0x1447: 0x8581, 0x1448: 0x85a9, 0x1449: 0x8621, 0x144a: 0x8649, 0x144b: 0x8671, - 0x144c: 0x8699, 0x144d: 0x8fd9, 0x144e: 0x8711, 0x144f: 0x8739, 0x1450: 0x8761, 0x1451: 0x8789, - 0x1452: 0x8801, 0x1453: 0x8829, 0x1454: 0x8851, 0x1455: 0x8879, 0x1456: 0x9001, 0x1457: 0x88f1, - 0x1458: 0x8919, 0x1459: 0x9029, 0x145a: 0x8991, 0x145b: 0x89b9, 0x145c: 0x89e1, 0x145d: 0x8a09, - 0x145e: 0x9051, 0x145f: 0x7cc1, 0x1460: 0x8f39, 0x1461: 0x7d89, 0x1462: 0x8f61, 0x1463: 0x7e79, - 0x1464: 0x8f89, 0x1465: 0x7f19, 0x1466: 0x9079, 0x1467: 0x8121, 0x1468: 0x90a1, 0x1469: 0x90c9, - 0x146a: 0x90f1, 0x146b: 0x8581, 0x146c: 0x85a9, 0x146d: 0x8699, 0x146e: 0x8879, 0x146f: 0x9001, - 0x1470: 0x8a09, 0x1471: 0x9051, 0x1472: 0x9119, 0x1473: 0x9151, 0x1474: 0x9189, 0x1475: 0x91c1, - 0x1476: 0x91e9, 0x1477: 0x9211, 0x1478: 0x9239, 0x1479: 0x9261, 0x147a: 0x9289, 0x147b: 0x92b1, - 0x147c: 0x92d9, 0x147d: 0x9301, 0x147e: 0x9329, 0x147f: 0x9351, + 0x1440: 0x0040, 0x1441: 0x0040, 0x1442: 0x0040, 0x1443: 0x0040, 0x1444: 0x0040, 0x1445: 0x0040, + 0x1446: 0x0040, 0x1447: 0x0040, 0x1448: 0x0040, 0x1449: 0x0040, 0x144a: 0x0040, 0x144b: 0x0040, + 0x144c: 0x0040, 0x144d: 0x0040, 0x144e: 0x0040, 0x144f: 0x0040, 0x1450: 0x1c61, 0x1451: 0x1c69, + 0x1452: 0x1c69, 0x1453: 0x1c71, 0x1454: 0x1c79, 0x1455: 0x1c81, 0x1456: 0x1c89, 0x1457: 0x1c91, + 0x1458: 0x1c99, 0x1459: 0x1c99, 0x145a: 0x1ca1, 0x145b: 0x1ca9, 0x145c: 0x1cb1, 0x145d: 0x1cb9, + 0x145e: 0x1cc1, 0x145f: 0x1cc9, 0x1460: 0x1cc9, 0x1461: 0x1cd1, 0x1462: 0x1cd9, 0x1463: 0x1cd9, + 0x1464: 0x1ce1, 0x1465: 0x1ce1, 0x1466: 0x1ce9, 0x1467: 0x1cf1, 0x1468: 0x1cf1, 0x1469: 0x1cf9, + 0x146a: 0x1d01, 0x146b: 0x1d01, 0x146c: 0x1d09, 0x146d: 0x1d09, 0x146e: 0x1d11, 0x146f: 0x1d19, + 0x1470: 0x1d19, 0x1471: 0x1d21, 0x1472: 0x1d21, 0x1473: 0x1d29, 0x1474: 0x1d31, 0x1475: 0x1d39, + 0x1476: 0x1d41, 0x1477: 0x1d41, 0x1478: 0x1d49, 0x1479: 0x1d51, 0x147a: 0x1d59, 0x147b: 0x1d61, + 0x147c: 0x1d69, 0x147d: 0x1d69, 0x147e: 0x1d71, 0x147f: 0x1d79, // Block 0x52, offset 0x1480 - 0x1480: 0x9379, 0x1481: 0x93a1, 0x1482: 0x93c9, 0x1483: 0x93f1, 0x1484: 0x9419, 0x1485: 0x9441, - 0x1486: 0x9469, 0x1487: 0x9491, 0x1488: 0x94b9, 0x1489: 0x94e1, 0x148a: 0x9509, 0x148b: 0x9531, - 0x148c: 0x90c9, 0x148d: 0x9559, 0x148e: 0x9581, 0x148f: 0x95a9, 0x1490: 0x95d1, 0x1491: 0x91c1, - 0x1492: 0x91e9, 0x1493: 0x9211, 0x1494: 0x9239, 0x1495: 0x9261, 0x1496: 0x9289, 0x1497: 0x92b1, - 0x1498: 0x92d9, 0x1499: 0x9301, 0x149a: 0x9329, 0x149b: 0x9351, 0x149c: 0x9379, 0x149d: 0x93a1, - 0x149e: 0x93c9, 0x149f: 0x93f1, 0x14a0: 0x9419, 0x14a1: 0x9441, 0x14a2: 0x9469, 0x14a3: 0x9491, - 0x14a4: 0x94b9, 0x14a5: 0x94e1, 0x14a6: 0x9509, 0x14a7: 0x9531, 0x14a8: 0x90c9, 0x14a9: 0x9559, - 0x14aa: 0x9581, 0x14ab: 0x95a9, 0x14ac: 0x95d1, 0x14ad: 0x94e1, 0x14ae: 0x9509, 0x14af: 0x9531, - 0x14b0: 0x90c9, 0x14b1: 0x90a1, 0x14b2: 0x90f1, 0x14b3: 0x8261, 0x14b4: 0x80a9, 0x14b5: 0x80d1, - 0x14b6: 0x80f9, 0x14b7: 0x94e1, 0x14b8: 0x9509, 0x14b9: 0x9531, 0x14ba: 0x8261, 0x14bb: 0x8289, - 0x14bc: 0x95f9, 0x14bd: 0x95f9, 0x14be: 0x0018, 0x14bf: 0x0018, + 0x1480: 0x1f29, 0x1481: 0x1f31, 0x1482: 0x1f39, 0x1483: 0x1f11, 0x1484: 0x1d39, 0x1485: 0x1ce9, + 0x1486: 0x1f41, 0x1487: 0x1f49, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040, + 0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x0040, 0x1491: 0x0040, + 0x1492: 0x0040, 0x1493: 0x0040, 0x1494: 0x0040, 0x1495: 0x0040, 0x1496: 0x0040, 0x1497: 0x0040, + 0x1498: 0x0040, 0x1499: 0x0040, 0x149a: 0x0040, 0x149b: 0x0040, 0x149c: 0x0040, 0x149d: 0x0040, + 0x149e: 0x0040, 0x149f: 0x0040, 0x14a0: 0x0040, 0x14a1: 0x0040, 0x14a2: 0x0040, 0x14a3: 0x0040, + 0x14a4: 0x0040, 0x14a5: 0x0040, 0x14a6: 0x0040, 0x14a7: 0x0040, 0x14a8: 0x0040, 0x14a9: 0x0040, + 0x14aa: 0x0040, 0x14ab: 0x0040, 0x14ac: 0x0040, 0x14ad: 0x0040, 0x14ae: 0x0040, 0x14af: 0x0040, + 0x14b0: 0x1f51, 0x14b1: 0x1f59, 0x14b2: 0x1f61, 0x14b3: 0x1f69, 0x14b4: 0x1f71, 0x14b5: 0x1f79, + 0x14b6: 0x1f81, 0x14b7: 0x1f89, 0x14b8: 0x1f91, 0x14b9: 0x1f99, 0x14ba: 0x1fa2, 0x14bb: 0x1faa, + 0x14bc: 0x1fb1, 0x14bd: 0x0018, 0x14be: 0x0040, 0x14bf: 0x0040, // Block 0x53, offset 0x14c0 - 0x14c0: 0x0040, 0x14c1: 0x0040, 0x14c2: 0x0040, 0x14c3: 0x0040, 0x14c4: 0x0040, 0x14c5: 0x0040, - 0x14c6: 0x0040, 0x14c7: 0x0040, 0x14c8: 0x0040, 0x14c9: 0x0040, 0x14ca: 0x0040, 0x14cb: 0x0040, - 0x14cc: 0x0040, 0x14cd: 0x0040, 0x14ce: 0x0040, 0x14cf: 0x0040, 0x14d0: 0x9621, 0x14d1: 0x9659, - 0x14d2: 0x9659, 0x14d3: 0x9691, 0x14d4: 0x96c9, 0x14d5: 0x9701, 0x14d6: 0x9739, 0x14d7: 0x9771, - 0x14d8: 0x97a9, 0x14d9: 0x97a9, 0x14da: 0x97e1, 0x14db: 0x9819, 0x14dc: 0x9851, 0x14dd: 0x9889, - 0x14de: 0x98c1, 0x14df: 0x98f9, 0x14e0: 0x98f9, 0x14e1: 0x9931, 0x14e2: 0x9969, 0x14e3: 0x9969, - 0x14e4: 0x99a1, 0x14e5: 0x99a1, 0x14e6: 0x99d9, 0x14e7: 0x9a11, 0x14e8: 0x9a11, 0x14e9: 0x9a49, - 0x14ea: 0x9a81, 0x14eb: 0x9a81, 0x14ec: 0x9ab9, 0x14ed: 0x9ab9, 0x14ee: 0x9af1, 0x14ef: 0x9b29, - 0x14f0: 0x9b29, 0x14f1: 0x9b61, 0x14f2: 0x9b61, 0x14f3: 0x9b99, 0x14f4: 0x9bd1, 0x14f5: 0x9c09, - 0x14f6: 0x9c41, 0x14f7: 0x9c41, 0x14f8: 0x9c79, 0x14f9: 0x9cb1, 0x14fa: 0x9ce9, 0x14fb: 0x9d21, - 0x14fc: 0x9d59, 0x14fd: 0x9d59, 0x14fe: 0x9d91, 0x14ff: 0x9dc9, + 0x14c0: 0x33c0, 0x14c1: 0x33c0, 0x14c2: 0x33c0, 0x14c3: 0x33c0, 0x14c4: 0x33c0, 0x14c5: 0x33c0, + 0x14c6: 0x33c0, 0x14c7: 0x33c0, 0x14c8: 0x33c0, 0x14c9: 0x33c0, 0x14ca: 0x33c0, 0x14cb: 0x33c0, + 0x14cc: 0x33c0, 0x14cd: 0x33c0, 0x14ce: 0x33c0, 0x14cf: 0x33c0, 0x14d0: 0x1fba, 0x14d1: 0x7d8d, + 0x14d2: 0x0040, 0x14d3: 0x1fc2, 0x14d4: 0x0122, 0x14d5: 0x1fca, 0x14d6: 0x1fd2, 0x14d7: 0x7dad, + 0x14d8: 0x7dcd, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040, + 0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x3308, 0x14e1: 0x3308, 0x14e2: 0x3308, 0x14e3: 0x3308, + 0x14e4: 0x3308, 0x14e5: 0x3308, 0x14e6: 0x3308, 0x14e7: 0x3308, 0x14e8: 0x3308, 0x14e9: 0x3308, + 0x14ea: 0x3308, 0x14eb: 0x3308, 0x14ec: 0x3308, 0x14ed: 0x3308, 0x14ee: 0x3308, 0x14ef: 0x3308, + 0x14f0: 0x0040, 0x14f1: 0x7ded, 0x14f2: 0x7e0d, 0x14f3: 0x1fda, 0x14f4: 0x1fda, 0x14f5: 0x072a, + 0x14f6: 0x0732, 0x14f7: 0x1fe2, 0x14f8: 0x1fea, 0x14f9: 0x7e2d, 0x14fa: 0x7e4d, 0x14fb: 0x7e6d, + 0x14fc: 0x7e2d, 0x14fd: 0x7e8d, 0x14fe: 0x7ead, 0x14ff: 0x7e8d, // Block 0x54, offset 0x1500 - 0x1500: 0xa999, 0x1501: 0xa9d1, 0x1502: 0xaa09, 0x1503: 0xa8f1, 0x1504: 0x9c09, 0x1505: 0x99d9, - 0x1506: 0xaa41, 0x1507: 0xaa79, 0x1508: 0x0040, 0x1509: 0x0040, 0x150a: 0x0040, 0x150b: 0x0040, - 0x150c: 0x0040, 0x150d: 0x0040, 0x150e: 0x0040, 0x150f: 0x0040, 0x1510: 0x0040, 0x1511: 0x0040, - 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0040, 0x1515: 0x0040, 0x1516: 0x0040, 0x1517: 0x0040, - 0x1518: 0x0040, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040, - 0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x0040, 0x1521: 0x0040, 0x1522: 0x0040, 0x1523: 0x0040, - 0x1524: 0x0040, 0x1525: 0x0040, 0x1526: 0x0040, 0x1527: 0x0040, 0x1528: 0x0040, 0x1529: 0x0040, - 0x152a: 0x0040, 0x152b: 0x0040, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, - 0x1530: 0xaab1, 0x1531: 0xaae9, 0x1532: 0xab21, 0x1533: 0xab69, 0x1534: 0xabb1, 0x1535: 0xabf9, - 0x1536: 0xac41, 0x1537: 0xac89, 0x1538: 0xacd1, 0x1539: 0xad19, 0x153a: 0xad52, 0x153b: 0xae62, - 0x153c: 0xaee1, 0x153d: 0x0018, 0x153e: 0x0040, 0x153f: 0x0040, + 0x1500: 0x7ecd, 0x1501: 0x7eed, 0x1502: 0x7f0d, 0x1503: 0x7eed, 0x1504: 0x7f2d, 0x1505: 0x0018, + 0x1506: 0x0018, 0x1507: 0x1ff2, 0x1508: 0x1ffa, 0x1509: 0x7f4e, 0x150a: 0x7f6e, 0x150b: 0x7f8e, + 0x150c: 0x7fae, 0x150d: 0x1fda, 0x150e: 0x1fda, 0x150f: 0x1fda, 0x1510: 0x1fba, 0x1511: 0x7fcd, + 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0122, 0x1515: 0x1fc2, 0x1516: 0x1fd2, 0x1517: 0x1fca, + 0x1518: 0x7fed, 0x1519: 0x072a, 0x151a: 0x0732, 0x151b: 0x1fe2, 0x151c: 0x1fea, 0x151d: 0x7ecd, + 0x151e: 0x7f2d, 0x151f: 0x2002, 0x1520: 0x200a, 0x1521: 0x2012, 0x1522: 0x071a, 0x1523: 0x2019, + 0x1524: 0x2022, 0x1525: 0x202a, 0x1526: 0x0722, 0x1527: 0x0040, 0x1528: 0x2032, 0x1529: 0x203a, + 0x152a: 0x2042, 0x152b: 0x204a, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, + 0x1530: 0x800e, 0x1531: 0x2051, 0x1532: 0x802e, 0x1533: 0x0808, 0x1534: 0x804e, 0x1535: 0x0040, + 0x1536: 0x806e, 0x1537: 0x2059, 0x1538: 0x808e, 0x1539: 0x2061, 0x153a: 0x80ae, 0x153b: 0x2069, + 0x153c: 0x80ce, 0x153d: 0x2071, 0x153e: 0x80ee, 0x153f: 0x2079, // Block 0x55, offset 0x1540 - 0x1540: 0x33c0, 0x1541: 0x33c0, 0x1542: 0x33c0, 0x1543: 0x33c0, 0x1544: 0x33c0, 0x1545: 0x33c0, - 0x1546: 0x33c0, 0x1547: 0x33c0, 0x1548: 0x33c0, 0x1549: 0x33c0, 0x154a: 0x33c0, 0x154b: 0x33c0, - 0x154c: 0x33c0, 0x154d: 0x33c0, 0x154e: 0x33c0, 0x154f: 0x33c0, 0x1550: 0xaf2a, 0x1551: 0x7d8d, - 0x1552: 0x0040, 0x1553: 0xaf3a, 0x1554: 0x03c2, 0x1555: 0xaf4a, 0x1556: 0xaf5a, 0x1557: 0x7dad, - 0x1558: 0x7dcd, 0x1559: 0x0040, 0x155a: 0x0040, 0x155b: 0x0040, 0x155c: 0x0040, 0x155d: 0x0040, - 0x155e: 0x0040, 0x155f: 0x0040, 0x1560: 0x3308, 0x1561: 0x3308, 0x1562: 0x3308, 0x1563: 0x3308, - 0x1564: 0x3308, 0x1565: 0x3308, 0x1566: 0x3308, 0x1567: 0x3308, 0x1568: 0x3308, 0x1569: 0x3308, - 0x156a: 0x3308, 0x156b: 0x3308, 0x156c: 0x3308, 0x156d: 0x3308, 0x156e: 0x3308, 0x156f: 0x3308, - 0x1570: 0x0040, 0x1571: 0x7ded, 0x1572: 0x7e0d, 0x1573: 0xaf6a, 0x1574: 0xaf6a, 0x1575: 0x1fd2, - 0x1576: 0x1fe2, 0x1577: 0xaf7a, 0x1578: 0xaf8a, 0x1579: 0x7e2d, 0x157a: 0x7e4d, 0x157b: 0x7e6d, - 0x157c: 0x7e2d, 0x157d: 0x7e8d, 0x157e: 0x7ead, 0x157f: 0x7e8d, + 0x1540: 0x2081, 0x1541: 0x2089, 0x1542: 0x2089, 0x1543: 0x2091, 0x1544: 0x2091, 0x1545: 0x2099, + 0x1546: 0x2099, 0x1547: 0x20a1, 0x1548: 0x20a1, 0x1549: 0x20a9, 0x154a: 0x20a9, 0x154b: 0x20a9, + 0x154c: 0x20a9, 0x154d: 0x20b1, 0x154e: 0x20b1, 0x154f: 0x20b9, 0x1550: 0x20b9, 0x1551: 0x20b9, + 0x1552: 0x20b9, 0x1553: 0x20c1, 0x1554: 0x20c1, 0x1555: 0x20c9, 0x1556: 0x20c9, 0x1557: 0x20c9, + 0x1558: 0x20c9, 0x1559: 0x20d1, 0x155a: 0x20d1, 0x155b: 0x20d1, 0x155c: 0x20d1, 0x155d: 0x20d9, + 0x155e: 0x20d9, 0x155f: 0x20d9, 0x1560: 0x20d9, 0x1561: 0x20e1, 0x1562: 0x20e1, 0x1563: 0x20e1, + 0x1564: 0x20e1, 0x1565: 0x20e9, 0x1566: 0x20e9, 0x1567: 0x20e9, 0x1568: 0x20e9, 0x1569: 0x20f1, + 0x156a: 0x20f1, 0x156b: 0x20f9, 0x156c: 0x20f9, 0x156d: 0x2101, 0x156e: 0x2101, 0x156f: 0x2109, + 0x1570: 0x2109, 0x1571: 0x2111, 0x1572: 0x2111, 0x1573: 0x2111, 0x1574: 0x2111, 0x1575: 0x2119, + 0x1576: 0x2119, 0x1577: 0x2119, 0x1578: 0x2119, 0x1579: 0x2121, 0x157a: 0x2121, 0x157b: 0x2121, + 0x157c: 0x2121, 0x157d: 0x2129, 0x157e: 0x2129, 0x157f: 0x2129, // Block 0x56, offset 0x1580 - 0x1580: 0x7ecd, 0x1581: 0x7eed, 0x1582: 0x7f0d, 0x1583: 0x7eed, 0x1584: 0x7f2d, 0x1585: 0x0018, - 0x1586: 0x0018, 0x1587: 0xaf9a, 0x1588: 0xafaa, 0x1589: 0x7f4e, 0x158a: 0x7f6e, 0x158b: 0x7f8e, - 0x158c: 0x7fae, 0x158d: 0xaf6a, 0x158e: 0xaf6a, 0x158f: 0xaf6a, 0x1590: 0xaf2a, 0x1591: 0x7fcd, - 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x03c2, 0x1595: 0xaf3a, 0x1596: 0xaf5a, 0x1597: 0xaf4a, - 0x1598: 0x7fed, 0x1599: 0x1fd2, 0x159a: 0x1fe2, 0x159b: 0xaf7a, 0x159c: 0xaf8a, 0x159d: 0x7ecd, - 0x159e: 0x7f2d, 0x159f: 0xafba, 0x15a0: 0xafca, 0x15a1: 0xafda, 0x15a2: 0x1fb2, 0x15a3: 0xafe9, - 0x15a4: 0xaffa, 0x15a5: 0xb00a, 0x15a6: 0x1fc2, 0x15a7: 0x0040, 0x15a8: 0xb01a, 0x15a9: 0xb02a, - 0x15aa: 0xb03a, 0x15ab: 0xb04a, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040, - 0x15b0: 0x800e, 0x15b1: 0xb059, 0x15b2: 0x802e, 0x15b3: 0x0808, 0x15b4: 0x804e, 0x15b5: 0x0040, - 0x15b6: 0x806e, 0x15b7: 0xb081, 0x15b8: 0x808e, 0x15b9: 0xb0a9, 0x15ba: 0x80ae, 0x15bb: 0xb0d1, - 0x15bc: 0x80ce, 0x15bd: 0xb0f9, 0x15be: 0x80ee, 0x15bf: 0xb121, + 0x1580: 0x2129, 0x1581: 0x2131, 0x1582: 0x2131, 0x1583: 0x2131, 0x1584: 0x2131, 0x1585: 0x2139, + 0x1586: 0x2139, 0x1587: 0x2139, 0x1588: 0x2139, 0x1589: 0x2141, 0x158a: 0x2141, 0x158b: 0x2141, + 0x158c: 0x2141, 0x158d: 0x2149, 0x158e: 0x2149, 0x158f: 0x2149, 0x1590: 0x2149, 0x1591: 0x2151, + 0x1592: 0x2151, 0x1593: 0x2151, 0x1594: 0x2151, 0x1595: 0x2159, 0x1596: 0x2159, 0x1597: 0x2159, + 0x1598: 0x2159, 0x1599: 0x2161, 0x159a: 0x2161, 0x159b: 0x2161, 0x159c: 0x2161, 0x159d: 0x2169, + 0x159e: 0x2169, 0x159f: 0x2169, 0x15a0: 0x2169, 0x15a1: 0x2171, 0x15a2: 0x2171, 0x15a3: 0x2171, + 0x15a4: 0x2171, 0x15a5: 0x2179, 0x15a6: 0x2179, 0x15a7: 0x2179, 0x15a8: 0x2179, 0x15a9: 0x2181, + 0x15aa: 0x2181, 0x15ab: 0x2181, 0x15ac: 0x2181, 0x15ad: 0x2189, 0x15ae: 0x2189, 0x15af: 0x1701, + 0x15b0: 0x1701, 0x15b1: 0x2191, 0x15b2: 0x2191, 0x15b3: 0x2191, 0x15b4: 0x2191, 0x15b5: 0x2199, + 0x15b6: 0x2199, 0x15b7: 0x21a1, 0x15b8: 0x21a1, 0x15b9: 0x21a9, 0x15ba: 0x21a9, 0x15bb: 0x21b1, + 0x15bc: 0x21b1, 0x15bd: 0x0040, 0x15be: 0x0040, 0x15bf: 0x03c0, // Block 0x57, offset 0x15c0 - 0x15c0: 0xb149, 0x15c1: 0xb161, 0x15c2: 0xb161, 0x15c3: 0xb179, 0x15c4: 0xb179, 0x15c5: 0xb191, - 0x15c6: 0xb191, 0x15c7: 0xb1a9, 0x15c8: 0xb1a9, 0x15c9: 0xb1c1, 0x15ca: 0xb1c1, 0x15cb: 0xb1c1, - 0x15cc: 0xb1c1, 0x15cd: 0xb1d9, 0x15ce: 0xb1d9, 0x15cf: 0xb1f1, 0x15d0: 0xb1f1, 0x15d1: 0xb1f1, - 0x15d2: 0xb1f1, 0x15d3: 0xb209, 0x15d4: 0xb209, 0x15d5: 0xb221, 0x15d6: 0xb221, 0x15d7: 0xb221, - 0x15d8: 0xb221, 0x15d9: 0xb239, 0x15da: 0xb239, 0x15db: 0xb239, 0x15dc: 0xb239, 0x15dd: 0xb251, - 0x15de: 0xb251, 0x15df: 0xb251, 0x15e0: 0xb251, 0x15e1: 0xb269, 0x15e2: 0xb269, 0x15e3: 0xb269, - 0x15e4: 0xb269, 0x15e5: 0xb281, 0x15e6: 0xb281, 0x15e7: 0xb281, 0x15e8: 0xb281, 0x15e9: 0xb299, - 0x15ea: 0xb299, 0x15eb: 0xb2b1, 0x15ec: 0xb2b1, 0x15ed: 0xb2c9, 0x15ee: 0xb2c9, 0x15ef: 0xb2e1, - 0x15f0: 0xb2e1, 0x15f1: 0xb2f9, 0x15f2: 0xb2f9, 0x15f3: 0xb2f9, 0x15f4: 0xb2f9, 0x15f5: 0xb311, - 0x15f6: 0xb311, 0x15f7: 0xb311, 0x15f8: 0xb311, 0x15f9: 0xb329, 0x15fa: 0xb329, 0x15fb: 0xb329, - 0x15fc: 0xb329, 0x15fd: 0xb341, 0x15fe: 0xb341, 0x15ff: 0xb341, + 0x15c0: 0x0040, 0x15c1: 0x1fca, 0x15c2: 0x21ba, 0x15c3: 0x2002, 0x15c4: 0x203a, 0x15c5: 0x2042, + 0x15c6: 0x200a, 0x15c7: 0x21c2, 0x15c8: 0x072a, 0x15c9: 0x0732, 0x15ca: 0x2012, 0x15cb: 0x071a, + 0x15cc: 0x1fba, 0x15cd: 0x2019, 0x15ce: 0x0961, 0x15cf: 0x21ca, 0x15d0: 0x06e1, 0x15d1: 0x0049, + 0x15d2: 0x0029, 0x15d3: 0x0031, 0x15d4: 0x06e9, 0x15d5: 0x06f1, 0x15d6: 0x06f9, 0x15d7: 0x0701, + 0x15d8: 0x0709, 0x15d9: 0x0711, 0x15da: 0x1fc2, 0x15db: 0x0122, 0x15dc: 0x2022, 0x15dd: 0x0722, + 0x15de: 0x202a, 0x15df: 0x1fd2, 0x15e0: 0x204a, 0x15e1: 0x0019, 0x15e2: 0x02e9, 0x15e3: 0x03d9, + 0x15e4: 0x02f1, 0x15e5: 0x02f9, 0x15e6: 0x03f1, 0x15e7: 0x0309, 0x15e8: 0x00a9, 0x15e9: 0x0311, + 0x15ea: 0x00b1, 0x15eb: 0x0319, 0x15ec: 0x0101, 0x15ed: 0x0321, 0x15ee: 0x0329, 0x15ef: 0x0051, + 0x15f0: 0x0339, 0x15f1: 0x0751, 0x15f2: 0x00b9, 0x15f3: 0x0089, 0x15f4: 0x0341, 0x15f5: 0x0349, + 0x15f6: 0x0391, 0x15f7: 0x00c1, 0x15f8: 0x0109, 0x15f9: 0x00c9, 0x15fa: 0x04b1, 0x15fb: 0x1ff2, + 0x15fc: 0x2032, 0x15fd: 0x1ffa, 0x15fe: 0x21d2, 0x15ff: 0x1fda, // Block 0x58, offset 0x1600 - 0x1600: 0xb341, 0x1601: 0xb359, 0x1602: 0xb359, 0x1603: 0xb359, 0x1604: 0xb359, 0x1605: 0xb371, - 0x1606: 0xb371, 0x1607: 0xb371, 0x1608: 0xb371, 0x1609: 0xb389, 0x160a: 0xb389, 0x160b: 0xb389, - 0x160c: 0xb389, 0x160d: 0xb3a1, 0x160e: 0xb3a1, 0x160f: 0xb3a1, 0x1610: 0xb3a1, 0x1611: 0xb3b9, - 0x1612: 0xb3b9, 0x1613: 0xb3b9, 0x1614: 0xb3b9, 0x1615: 0xb3d1, 0x1616: 0xb3d1, 0x1617: 0xb3d1, - 0x1618: 0xb3d1, 0x1619: 0xb3e9, 0x161a: 0xb3e9, 0x161b: 0xb3e9, 0x161c: 0xb3e9, 0x161d: 0xb401, - 0x161e: 0xb401, 0x161f: 0xb401, 0x1620: 0xb401, 0x1621: 0xb419, 0x1622: 0xb419, 0x1623: 0xb419, - 0x1624: 0xb419, 0x1625: 0xb431, 0x1626: 0xb431, 0x1627: 0xb431, 0x1628: 0xb431, 0x1629: 0xb449, - 0x162a: 0xb449, 0x162b: 0xb449, 0x162c: 0xb449, 0x162d: 0xb461, 0x162e: 0xb461, 0x162f: 0x7b01, - 0x1630: 0x7b01, 0x1631: 0xb479, 0x1632: 0xb479, 0x1633: 0xb479, 0x1634: 0xb479, 0x1635: 0xb491, - 0x1636: 0xb491, 0x1637: 0xb4b9, 0x1638: 0xb4b9, 0x1639: 0xb4e1, 0x163a: 0xb4e1, 0x163b: 0xb509, - 0x163c: 0xb509, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0, + 0x1600: 0x0672, 0x1601: 0x0019, 0x1602: 0x02e9, 0x1603: 0x03d9, 0x1604: 0x02f1, 0x1605: 0x02f9, + 0x1606: 0x03f1, 0x1607: 0x0309, 0x1608: 0x00a9, 0x1609: 0x0311, 0x160a: 0x00b1, 0x160b: 0x0319, + 0x160c: 0x0101, 0x160d: 0x0321, 0x160e: 0x0329, 0x160f: 0x0051, 0x1610: 0x0339, 0x1611: 0x0751, + 0x1612: 0x00b9, 0x1613: 0x0089, 0x1614: 0x0341, 0x1615: 0x0349, 0x1616: 0x0391, 0x1617: 0x00c1, + 0x1618: 0x0109, 0x1619: 0x00c9, 0x161a: 0x04b1, 0x161b: 0x1fe2, 0x161c: 0x21da, 0x161d: 0x1fea, + 0x161e: 0x21e2, 0x161f: 0x810d, 0x1620: 0x812d, 0x1621: 0x0961, 0x1622: 0x814d, 0x1623: 0x814d, + 0x1624: 0x816d, 0x1625: 0x818d, 0x1626: 0x81ad, 0x1627: 0x81cd, 0x1628: 0x81ed, 0x1629: 0x820d, + 0x162a: 0x822d, 0x162b: 0x824d, 0x162c: 0x826d, 0x162d: 0x828d, 0x162e: 0x82ad, 0x162f: 0x82cd, + 0x1630: 0x82ed, 0x1631: 0x830d, 0x1632: 0x832d, 0x1633: 0x834d, 0x1634: 0x836d, 0x1635: 0x838d, + 0x1636: 0x83ad, 0x1637: 0x83cd, 0x1638: 0x83ed, 0x1639: 0x840d, 0x163a: 0x842d, 0x163b: 0x844d, + 0x163c: 0x81ed, 0x163d: 0x846d, 0x163e: 0x848d, 0x163f: 0x824d, // Block 0x59, offset 0x1640 - 0x1640: 0x0040, 0x1641: 0xaf4a, 0x1642: 0xb532, 0x1643: 0xafba, 0x1644: 0xb02a, 0x1645: 0xb03a, - 0x1646: 0xafca, 0x1647: 0xb542, 0x1648: 0x1fd2, 0x1649: 0x1fe2, 0x164a: 0xafda, 0x164b: 0x1fb2, - 0x164c: 0xaf2a, 0x164d: 0xafe9, 0x164e: 0x29d1, 0x164f: 0xb552, 0x1650: 0x1f41, 0x1651: 0x00c9, - 0x1652: 0x0069, 0x1653: 0x0079, 0x1654: 0x1f51, 0x1655: 0x1f61, 0x1656: 0x1f71, 0x1657: 0x1f81, - 0x1658: 0x1f91, 0x1659: 0x1fa1, 0x165a: 0xaf3a, 0x165b: 0x03c2, 0x165c: 0xaffa, 0x165d: 0x1fc2, - 0x165e: 0xb00a, 0x165f: 0xaf5a, 0x1660: 0xb04a, 0x1661: 0x0039, 0x1662: 0x0ee9, 0x1663: 0x1159, - 0x1664: 0x0ef9, 0x1665: 0x0f09, 0x1666: 0x1199, 0x1667: 0x0f31, 0x1668: 0x0249, 0x1669: 0x0f41, - 0x166a: 0x0259, 0x166b: 0x0f51, 0x166c: 0x0359, 0x166d: 0x0f61, 0x166e: 0x0f71, 0x166f: 0x00d9, - 0x1670: 0x0f99, 0x1671: 0x2039, 0x1672: 0x0269, 0x1673: 0x01d9, 0x1674: 0x0fa9, 0x1675: 0x0fb9, - 0x1676: 0x1089, 0x1677: 0x0279, 0x1678: 0x0369, 0x1679: 0x0289, 0x167a: 0x13d1, 0x167b: 0xaf9a, - 0x167c: 0xb01a, 0x167d: 0xafaa, 0x167e: 0xb562, 0x167f: 0xaf6a, + 0x1640: 0x84ad, 0x1641: 0x84cd, 0x1642: 0x84ed, 0x1643: 0x850d, 0x1644: 0x852d, 0x1645: 0x854d, + 0x1646: 0x856d, 0x1647: 0x858d, 0x1648: 0x850d, 0x1649: 0x85ad, 0x164a: 0x850d, 0x164b: 0x85cd, + 0x164c: 0x85cd, 0x164d: 0x85ed, 0x164e: 0x85ed, 0x164f: 0x860d, 0x1650: 0x854d, 0x1651: 0x862d, + 0x1652: 0x864d, 0x1653: 0x862d, 0x1654: 0x866d, 0x1655: 0x864d, 0x1656: 0x868d, 0x1657: 0x868d, + 0x1658: 0x86ad, 0x1659: 0x86ad, 0x165a: 0x86cd, 0x165b: 0x86cd, 0x165c: 0x864d, 0x165d: 0x814d, + 0x165e: 0x86ed, 0x165f: 0x870d, 0x1660: 0x0040, 0x1661: 0x872d, 0x1662: 0x874d, 0x1663: 0x876d, + 0x1664: 0x878d, 0x1665: 0x876d, 0x1666: 0x87ad, 0x1667: 0x87cd, 0x1668: 0x87ed, 0x1669: 0x87ed, + 0x166a: 0x880d, 0x166b: 0x880d, 0x166c: 0x882d, 0x166d: 0x882d, 0x166e: 0x880d, 0x166f: 0x880d, + 0x1670: 0x884d, 0x1671: 0x886d, 0x1672: 0x888d, 0x1673: 0x88ad, 0x1674: 0x88cd, 0x1675: 0x88ed, + 0x1676: 0x88ed, 0x1677: 0x88ed, 0x1678: 0x890d, 0x1679: 0x890d, 0x167a: 0x890d, 0x167b: 0x890d, + 0x167c: 0x87ed, 0x167d: 0x87ed, 0x167e: 0x87ed, 0x167f: 0x0040, // Block 0x5a, offset 0x1680 - 0x1680: 0x1caa, 0x1681: 0x0039, 0x1682: 0x0ee9, 0x1683: 0x1159, 0x1684: 0x0ef9, 0x1685: 0x0f09, - 0x1686: 0x1199, 0x1687: 0x0f31, 0x1688: 0x0249, 0x1689: 0x0f41, 0x168a: 0x0259, 0x168b: 0x0f51, - 0x168c: 0x0359, 0x168d: 0x0f61, 0x168e: 0x0f71, 0x168f: 0x00d9, 0x1690: 0x0f99, 0x1691: 0x2039, - 0x1692: 0x0269, 0x1693: 0x01d9, 0x1694: 0x0fa9, 0x1695: 0x0fb9, 0x1696: 0x1089, 0x1697: 0x0279, - 0x1698: 0x0369, 0x1699: 0x0289, 0x169a: 0x13d1, 0x169b: 0xaf7a, 0x169c: 0xb572, 0x169d: 0xaf8a, - 0x169e: 0xb582, 0x169f: 0x810d, 0x16a0: 0x812d, 0x16a1: 0x29d1, 0x16a2: 0x814d, 0x16a3: 0x814d, - 0x16a4: 0x816d, 0x16a5: 0x818d, 0x16a6: 0x81ad, 0x16a7: 0x81cd, 0x16a8: 0x81ed, 0x16a9: 0x820d, - 0x16aa: 0x822d, 0x16ab: 0x824d, 0x16ac: 0x826d, 0x16ad: 0x828d, 0x16ae: 0x82ad, 0x16af: 0x82cd, - 0x16b0: 0x82ed, 0x16b1: 0x830d, 0x16b2: 0x832d, 0x16b3: 0x834d, 0x16b4: 0x836d, 0x16b5: 0x838d, - 0x16b6: 0x83ad, 0x16b7: 0x83cd, 0x16b8: 0x83ed, 0x16b9: 0x840d, 0x16ba: 0x842d, 0x16bb: 0x844d, - 0x16bc: 0x81ed, 0x16bd: 0x846d, 0x16be: 0x848d, 0x16bf: 0x824d, + 0x1680: 0x0040, 0x1681: 0x0040, 0x1682: 0x874d, 0x1683: 0x872d, 0x1684: 0x892d, 0x1685: 0x872d, + 0x1686: 0x874d, 0x1687: 0x872d, 0x1688: 0x0040, 0x1689: 0x0040, 0x168a: 0x894d, 0x168b: 0x874d, + 0x168c: 0x896d, 0x168d: 0x892d, 0x168e: 0x896d, 0x168f: 0x874d, 0x1690: 0x0040, 0x1691: 0x0040, + 0x1692: 0x898d, 0x1693: 0x89ad, 0x1694: 0x88ad, 0x1695: 0x896d, 0x1696: 0x892d, 0x1697: 0x896d, + 0x1698: 0x0040, 0x1699: 0x0040, 0x169a: 0x89cd, 0x169b: 0x89ed, 0x169c: 0x89cd, 0x169d: 0x0040, + 0x169e: 0x0040, 0x169f: 0x0040, 0x16a0: 0x21e9, 0x16a1: 0x21f1, 0x16a2: 0x21f9, 0x16a3: 0x8a0e, + 0x16a4: 0x2201, 0x16a5: 0x2209, 0x16a6: 0x8a2d, 0x16a7: 0x0040, 0x16a8: 0x8a4d, 0x16a9: 0x8a6d, + 0x16aa: 0x8a8d, 0x16ab: 0x8a6d, 0x16ac: 0x8aad, 0x16ad: 0x8acd, 0x16ae: 0x8aed, 0x16af: 0x0040, + 0x16b0: 0x0040, 0x16b1: 0x0040, 0x16b2: 0x0040, 0x16b3: 0x0040, 0x16b4: 0x0040, 0x16b5: 0x0040, + 0x16b6: 0x0040, 0x16b7: 0x0040, 0x16b8: 0x0040, 0x16b9: 0x0340, 0x16ba: 0x0340, 0x16bb: 0x0340, + 0x16bc: 0x0040, 0x16bd: 0x0040, 0x16be: 0x0040, 0x16bf: 0x0040, // Block 0x5b, offset 0x16c0 - 0x16c0: 0x84ad, 0x16c1: 0x84cd, 0x16c2: 0x84ed, 0x16c3: 0x850d, 0x16c4: 0x852d, 0x16c5: 0x854d, - 0x16c6: 0x856d, 0x16c7: 0x858d, 0x16c8: 0x850d, 0x16c9: 0x85ad, 0x16ca: 0x850d, 0x16cb: 0x85cd, - 0x16cc: 0x85cd, 0x16cd: 0x85ed, 0x16ce: 0x85ed, 0x16cf: 0x860d, 0x16d0: 0x854d, 0x16d1: 0x862d, - 0x16d2: 0x864d, 0x16d3: 0x862d, 0x16d4: 0x866d, 0x16d5: 0x864d, 0x16d6: 0x868d, 0x16d7: 0x868d, - 0x16d8: 0x86ad, 0x16d9: 0x86ad, 0x16da: 0x86cd, 0x16db: 0x86cd, 0x16dc: 0x864d, 0x16dd: 0x814d, - 0x16de: 0x86ed, 0x16df: 0x870d, 0x16e0: 0x0040, 0x16e1: 0x872d, 0x16e2: 0x874d, 0x16e3: 0x876d, - 0x16e4: 0x878d, 0x16e5: 0x876d, 0x16e6: 0x87ad, 0x16e7: 0x87cd, 0x16e8: 0x87ed, 0x16e9: 0x87ed, - 0x16ea: 0x880d, 0x16eb: 0x880d, 0x16ec: 0x882d, 0x16ed: 0x882d, 0x16ee: 0x880d, 0x16ef: 0x880d, - 0x16f0: 0x884d, 0x16f1: 0x886d, 0x16f2: 0x888d, 0x16f3: 0x88ad, 0x16f4: 0x88cd, 0x16f5: 0x88ed, - 0x16f6: 0x88ed, 0x16f7: 0x88ed, 0x16f8: 0x890d, 0x16f9: 0x890d, 0x16fa: 0x890d, 0x16fb: 0x890d, - 0x16fc: 0x87ed, 0x16fd: 0x87ed, 0x16fe: 0x87ed, 0x16ff: 0x0040, + 0x16c0: 0x0a08, 0x16c1: 0x0a08, 0x16c2: 0x0a08, 0x16c3: 0x0a08, 0x16c4: 0x0a08, 0x16c5: 0x0c08, + 0x16c6: 0x0808, 0x16c7: 0x0c08, 0x16c8: 0x0818, 0x16c9: 0x0c08, 0x16ca: 0x0c08, 0x16cb: 0x0808, + 0x16cc: 0x0808, 0x16cd: 0x0908, 0x16ce: 0x0c08, 0x16cf: 0x0c08, 0x16d0: 0x0c08, 0x16d1: 0x0c08, + 0x16d2: 0x0c08, 0x16d3: 0x0a08, 0x16d4: 0x0a08, 0x16d5: 0x0a08, 0x16d6: 0x0a08, 0x16d7: 0x0908, + 0x16d8: 0x0a08, 0x16d9: 0x0a08, 0x16da: 0x0a08, 0x16db: 0x0a08, 0x16dc: 0x0a08, 0x16dd: 0x0c08, + 0x16de: 0x0a08, 0x16df: 0x0a08, 0x16e0: 0x0a08, 0x16e1: 0x0c08, 0x16e2: 0x0808, 0x16e3: 0x0808, + 0x16e4: 0x0c08, 0x16e5: 0x3308, 0x16e6: 0x3308, 0x16e7: 0x0040, 0x16e8: 0x0040, 0x16e9: 0x0040, + 0x16ea: 0x0040, 0x16eb: 0x0a18, 0x16ec: 0x0a18, 0x16ed: 0x0a18, 0x16ee: 0x0a18, 0x16ef: 0x0c18, + 0x16f0: 0x0818, 0x16f1: 0x0818, 0x16f2: 0x0818, 0x16f3: 0x0818, 0x16f4: 0x0818, 0x16f5: 0x0818, + 0x16f6: 0x0818, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0040, 0x16fa: 0x0040, 0x16fb: 0x0040, + 0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040, // Block 0x5c, offset 0x1700 - 0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x874d, 0x1703: 0x872d, 0x1704: 0x892d, 0x1705: 0x872d, - 0x1706: 0x874d, 0x1707: 0x872d, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x894d, 0x170b: 0x874d, - 0x170c: 0x896d, 0x170d: 0x892d, 0x170e: 0x896d, 0x170f: 0x874d, 0x1710: 0x0040, 0x1711: 0x0040, - 0x1712: 0x898d, 0x1713: 0x89ad, 0x1714: 0x88ad, 0x1715: 0x896d, 0x1716: 0x892d, 0x1717: 0x896d, - 0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x89cd, 0x171b: 0x89ed, 0x171c: 0x89cd, 0x171d: 0x0040, - 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0xb591, 0x1721: 0xb5a9, 0x1722: 0xb5c1, 0x1723: 0x8a0e, - 0x1724: 0xb5d9, 0x1725: 0xb5f1, 0x1726: 0x8a2d, 0x1727: 0x0040, 0x1728: 0x8a4d, 0x1729: 0x8a6d, - 0x172a: 0x8a8d, 0x172b: 0x8a6d, 0x172c: 0x8aad, 0x172d: 0x8acd, 0x172e: 0x8aed, 0x172f: 0x0040, + 0x1700: 0x0a08, 0x1701: 0x0c08, 0x1702: 0x0a08, 0x1703: 0x0c08, 0x1704: 0x0c08, 0x1705: 0x0c08, + 0x1706: 0x0a08, 0x1707: 0x0a08, 0x1708: 0x0a08, 0x1709: 0x0c08, 0x170a: 0x0a08, 0x170b: 0x0a08, + 0x170c: 0x0c08, 0x170d: 0x0a08, 0x170e: 0x0c08, 0x170f: 0x0c08, 0x1710: 0x0a08, 0x1711: 0x0c08, + 0x1712: 0x0040, 0x1713: 0x0040, 0x1714: 0x0040, 0x1715: 0x0040, 0x1716: 0x0040, 0x1717: 0x0040, + 0x1718: 0x0040, 0x1719: 0x0818, 0x171a: 0x0818, 0x171b: 0x0818, 0x171c: 0x0818, 0x171d: 0x0040, + 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x0040, 0x1721: 0x0040, 0x1722: 0x0040, 0x1723: 0x0040, + 0x1724: 0x0040, 0x1725: 0x0040, 0x1726: 0x0040, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0c18, + 0x172a: 0x0c18, 0x172b: 0x0c18, 0x172c: 0x0c18, 0x172d: 0x0a18, 0x172e: 0x0a18, 0x172f: 0x0818, 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040, - 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0340, 0x173a: 0x0340, 0x173b: 0x0340, + 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040, 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, // Block 0x5d, offset 0x1740 - 0x1740: 0x0a08, 0x1741: 0x0a08, 0x1742: 0x0a08, 0x1743: 0x0a08, 0x1744: 0x0a08, 0x1745: 0x0c08, - 0x1746: 0x0808, 0x1747: 0x0c08, 0x1748: 0x0818, 0x1749: 0x0c08, 0x174a: 0x0c08, 0x174b: 0x0808, - 0x174c: 0x0808, 0x174d: 0x0908, 0x174e: 0x0c08, 0x174f: 0x0c08, 0x1750: 0x0c08, 0x1751: 0x0c08, - 0x1752: 0x0c08, 0x1753: 0x0a08, 0x1754: 0x0a08, 0x1755: 0x0a08, 0x1756: 0x0a08, 0x1757: 0x0908, - 0x1758: 0x0a08, 0x1759: 0x0a08, 0x175a: 0x0a08, 0x175b: 0x0a08, 0x175c: 0x0a08, 0x175d: 0x0c08, - 0x175e: 0x0a08, 0x175f: 0x0a08, 0x1760: 0x0a08, 0x1761: 0x0c08, 0x1762: 0x0808, 0x1763: 0x0808, - 0x1764: 0x0c08, 0x1765: 0x3308, 0x1766: 0x3308, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0040, - 0x176a: 0x0040, 0x176b: 0x0a18, 0x176c: 0x0a18, 0x176d: 0x0a18, 0x176e: 0x0a18, 0x176f: 0x0c18, - 0x1770: 0x0818, 0x1771: 0x0818, 0x1772: 0x0818, 0x1773: 0x0818, 0x1774: 0x0818, 0x1775: 0x0818, - 0x1776: 0x0818, 0x1777: 0x0040, 0x1778: 0x0040, 0x1779: 0x0040, 0x177a: 0x0040, 0x177b: 0x0040, - 0x177c: 0x0040, 0x177d: 0x0040, 0x177e: 0x0040, 0x177f: 0x0040, + 0x1740: 0x3308, 0x1741: 0x3308, 0x1742: 0x3008, 0x1743: 0x3008, 0x1744: 0x0040, 0x1745: 0x0008, + 0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008, + 0x174c: 0x0008, 0x174d: 0x0040, 0x174e: 0x0040, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0040, + 0x1752: 0x0040, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008, + 0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008, + 0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008, + 0x1764: 0x0008, 0x1765: 0x0008, 0x1766: 0x0008, 0x1767: 0x0008, 0x1768: 0x0008, 0x1769: 0x0040, + 0x176a: 0x0008, 0x176b: 0x0008, 0x176c: 0x0008, 0x176d: 0x0008, 0x176e: 0x0008, 0x176f: 0x0008, + 0x1770: 0x0008, 0x1771: 0x0040, 0x1772: 0x0008, 0x1773: 0x0008, 0x1774: 0x0040, 0x1775: 0x0008, + 0x1776: 0x0008, 0x1777: 0x0008, 0x1778: 0x0008, 0x1779: 0x0008, 0x177a: 0x0040, 0x177b: 0x3308, + 0x177c: 0x3308, 0x177d: 0x0008, 0x177e: 0x3008, 0x177f: 0x3008, // Block 0x5e, offset 0x1780 - 0x1780: 0x0a08, 0x1781: 0x0c08, 0x1782: 0x0a08, 0x1783: 0x0c08, 0x1784: 0x0c08, 0x1785: 0x0c08, - 0x1786: 0x0a08, 0x1787: 0x0a08, 0x1788: 0x0a08, 0x1789: 0x0c08, 0x178a: 0x0a08, 0x178b: 0x0a08, - 0x178c: 0x0c08, 0x178d: 0x0a08, 0x178e: 0x0c08, 0x178f: 0x0c08, 0x1790: 0x0a08, 0x1791: 0x0c08, - 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x0040, - 0x1798: 0x0040, 0x1799: 0x0818, 0x179a: 0x0818, 0x179b: 0x0818, 0x179c: 0x0818, 0x179d: 0x0040, - 0x179e: 0x0040, 0x179f: 0x0040, 0x17a0: 0x0040, 0x17a1: 0x0040, 0x17a2: 0x0040, 0x17a3: 0x0040, - 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x0040, 0x17a7: 0x0040, 0x17a8: 0x0040, 0x17a9: 0x0c18, - 0x17aa: 0x0c18, 0x17ab: 0x0c18, 0x17ac: 0x0c18, 0x17ad: 0x0a18, 0x17ae: 0x0a18, 0x17af: 0x0818, - 0x17b0: 0x0040, 0x17b1: 0x0040, 0x17b2: 0x0040, 0x17b3: 0x0040, 0x17b4: 0x0040, 0x17b5: 0x0040, + 0x1780: 0x3308, 0x1781: 0x3008, 0x1782: 0x3008, 0x1783: 0x3008, 0x1784: 0x3008, 0x1785: 0x0040, + 0x1786: 0x0040, 0x1787: 0x3008, 0x1788: 0x3008, 0x1789: 0x0040, 0x178a: 0x0040, 0x178b: 0x3008, + 0x178c: 0x3008, 0x178d: 0x3808, 0x178e: 0x0040, 0x178f: 0x0040, 0x1790: 0x0008, 0x1791: 0x0040, + 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x3008, + 0x1798: 0x0040, 0x1799: 0x0040, 0x179a: 0x0040, 0x179b: 0x0040, 0x179c: 0x0040, 0x179d: 0x0008, + 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x3008, 0x17a3: 0x3008, + 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x3308, 0x17a7: 0x3308, 0x17a8: 0x3308, 0x17a9: 0x3308, + 0x17aa: 0x3308, 0x17ab: 0x3308, 0x17ac: 0x3308, 0x17ad: 0x0040, 0x17ae: 0x0040, 0x17af: 0x0040, + 0x17b0: 0x3308, 0x17b1: 0x3308, 0x17b2: 0x3308, 0x17b3: 0x3308, 0x17b4: 0x3308, 0x17b5: 0x0040, 0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040, 0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040, // Block 0x5f, offset 0x17c0 - 0x17c0: 0x3308, 0x17c1: 0x3308, 0x17c2: 0x3008, 0x17c3: 0x3008, 0x17c4: 0x0040, 0x17c5: 0x0008, - 0x17c6: 0x0008, 0x17c7: 0x0008, 0x17c8: 0x0008, 0x17c9: 0x0008, 0x17ca: 0x0008, 0x17cb: 0x0008, - 0x17cc: 0x0008, 0x17cd: 0x0040, 0x17ce: 0x0040, 0x17cf: 0x0008, 0x17d0: 0x0008, 0x17d1: 0x0040, - 0x17d2: 0x0040, 0x17d3: 0x0008, 0x17d4: 0x0008, 0x17d5: 0x0008, 0x17d6: 0x0008, 0x17d7: 0x0008, + 0x17c0: 0x0008, 0x17c1: 0x0008, 0x17c2: 0x0008, 0x17c3: 0x0008, 0x17c4: 0x0008, 0x17c5: 0x0008, + 0x17c6: 0x0008, 0x17c7: 0x0040, 0x17c8: 0x0040, 0x17c9: 0x0008, 0x17ca: 0x0040, 0x17cb: 0x0040, + 0x17cc: 0x0008, 0x17cd: 0x0008, 0x17ce: 0x0008, 0x17cf: 0x0008, 0x17d0: 0x0008, 0x17d1: 0x0008, + 0x17d2: 0x0008, 0x17d3: 0x0008, 0x17d4: 0x0040, 0x17d5: 0x0008, 0x17d6: 0x0008, 0x17d7: 0x0040, 0x17d8: 0x0008, 0x17d9: 0x0008, 0x17da: 0x0008, 0x17db: 0x0008, 0x17dc: 0x0008, 0x17dd: 0x0008, 0x17de: 0x0008, 0x17df: 0x0008, 0x17e0: 0x0008, 0x17e1: 0x0008, 0x17e2: 0x0008, 0x17e3: 0x0008, - 0x17e4: 0x0008, 0x17e5: 0x0008, 0x17e6: 0x0008, 0x17e7: 0x0008, 0x17e8: 0x0008, 0x17e9: 0x0040, + 0x17e4: 0x0008, 0x17e5: 0x0008, 0x17e6: 0x0008, 0x17e7: 0x0008, 0x17e8: 0x0008, 0x17e9: 0x0008, 0x17ea: 0x0008, 0x17eb: 0x0008, 0x17ec: 0x0008, 0x17ed: 0x0008, 0x17ee: 0x0008, 0x17ef: 0x0008, - 0x17f0: 0x0008, 0x17f1: 0x0040, 0x17f2: 0x0008, 0x17f3: 0x0008, 0x17f4: 0x0040, 0x17f5: 0x0008, - 0x17f6: 0x0008, 0x17f7: 0x0008, 0x17f8: 0x0008, 0x17f9: 0x0008, 0x17fa: 0x0040, 0x17fb: 0x3308, - 0x17fc: 0x3308, 0x17fd: 0x0008, 0x17fe: 0x3008, 0x17ff: 0x3008, + 0x17f0: 0x3008, 0x17f1: 0x3008, 0x17f2: 0x3008, 0x17f3: 0x3008, 0x17f4: 0x3008, 0x17f5: 0x3008, + 0x17f6: 0x0040, 0x17f7: 0x3008, 0x17f8: 0x3008, 0x17f9: 0x0040, 0x17fa: 0x0040, 0x17fb: 0x3308, + 0x17fc: 0x3308, 0x17fd: 0x3808, 0x17fe: 0x3b08, 0x17ff: 0x0008, // Block 0x60, offset 0x1800 - 0x1800: 0x3308, 0x1801: 0x3008, 0x1802: 0x3008, 0x1803: 0x3008, 0x1804: 0x3008, 0x1805: 0x0040, - 0x1806: 0x0040, 0x1807: 0x3008, 0x1808: 0x3008, 0x1809: 0x0040, 0x180a: 0x0040, 0x180b: 0x3008, - 0x180c: 0x3008, 0x180d: 0x3808, 0x180e: 0x0040, 0x180f: 0x0040, 0x1810: 0x0008, 0x1811: 0x0040, - 0x1812: 0x0040, 0x1813: 0x0040, 0x1814: 0x0040, 0x1815: 0x0040, 0x1816: 0x0040, 0x1817: 0x3008, - 0x1818: 0x0040, 0x1819: 0x0040, 0x181a: 0x0040, 0x181b: 0x0040, 0x181c: 0x0040, 0x181d: 0x0008, - 0x181e: 0x0008, 0x181f: 0x0008, 0x1820: 0x0008, 0x1821: 0x0008, 0x1822: 0x3008, 0x1823: 0x3008, - 0x1824: 0x0040, 0x1825: 0x0040, 0x1826: 0x3308, 0x1827: 0x3308, 0x1828: 0x3308, 0x1829: 0x3308, - 0x182a: 0x3308, 0x182b: 0x3308, 0x182c: 0x3308, 0x182d: 0x0040, 0x182e: 0x0040, 0x182f: 0x0040, - 0x1830: 0x3308, 0x1831: 0x3308, 0x1832: 0x3308, 0x1833: 0x3308, 0x1834: 0x3308, 0x1835: 0x0040, - 0x1836: 0x0040, 0x1837: 0x0040, 0x1838: 0x0040, 0x1839: 0x0040, 0x183a: 0x0040, 0x183b: 0x0040, - 0x183c: 0x0040, 0x183d: 0x0040, 0x183e: 0x0040, 0x183f: 0x0040, + 0x1800: 0x0019, 0x1801: 0x02e9, 0x1802: 0x03d9, 0x1803: 0x02f1, 0x1804: 0x02f9, 0x1805: 0x03f1, + 0x1806: 0x0309, 0x1807: 0x00a9, 0x1808: 0x0311, 0x1809: 0x00b1, 0x180a: 0x0319, 0x180b: 0x0101, + 0x180c: 0x0321, 0x180d: 0x0329, 0x180e: 0x0051, 0x180f: 0x0339, 0x1810: 0x0751, 0x1811: 0x00b9, + 0x1812: 0x0089, 0x1813: 0x0341, 0x1814: 0x0349, 0x1815: 0x0391, 0x1816: 0x00c1, 0x1817: 0x0109, + 0x1818: 0x00c9, 0x1819: 0x04b1, 0x181a: 0x0019, 0x181b: 0x02e9, 0x181c: 0x03d9, 0x181d: 0x02f1, + 0x181e: 0x02f9, 0x181f: 0x03f1, 0x1820: 0x0309, 0x1821: 0x00a9, 0x1822: 0x0311, 0x1823: 0x00b1, + 0x1824: 0x0319, 0x1825: 0x0101, 0x1826: 0x0321, 0x1827: 0x0329, 0x1828: 0x0051, 0x1829: 0x0339, + 0x182a: 0x0751, 0x182b: 0x00b9, 0x182c: 0x0089, 0x182d: 0x0341, 0x182e: 0x0349, 0x182f: 0x0391, + 0x1830: 0x00c1, 0x1831: 0x0109, 0x1832: 0x00c9, 0x1833: 0x04b1, 0x1834: 0x0019, 0x1835: 0x02e9, + 0x1836: 0x03d9, 0x1837: 0x02f1, 0x1838: 0x02f9, 0x1839: 0x03f1, 0x183a: 0x0309, 0x183b: 0x00a9, + 0x183c: 0x0311, 0x183d: 0x00b1, 0x183e: 0x0319, 0x183f: 0x0101, // Block 0x61, offset 0x1840 - 0x1840: 0x0008, 0x1841: 0x0008, 0x1842: 0x0008, 0x1843: 0x0008, 0x1844: 0x0008, 0x1845: 0x0008, - 0x1846: 0x0008, 0x1847: 0x0040, 0x1848: 0x0040, 0x1849: 0x0008, 0x184a: 0x0040, 0x184b: 0x0040, - 0x184c: 0x0008, 0x184d: 0x0008, 0x184e: 0x0008, 0x184f: 0x0008, 0x1850: 0x0008, 0x1851: 0x0008, - 0x1852: 0x0008, 0x1853: 0x0008, 0x1854: 0x0040, 0x1855: 0x0008, 0x1856: 0x0008, 0x1857: 0x0040, - 0x1858: 0x0008, 0x1859: 0x0008, 0x185a: 0x0008, 0x185b: 0x0008, 0x185c: 0x0008, 0x185d: 0x0008, - 0x185e: 0x0008, 0x185f: 0x0008, 0x1860: 0x0008, 0x1861: 0x0008, 0x1862: 0x0008, 0x1863: 0x0008, - 0x1864: 0x0008, 0x1865: 0x0008, 0x1866: 0x0008, 0x1867: 0x0008, 0x1868: 0x0008, 0x1869: 0x0008, - 0x186a: 0x0008, 0x186b: 0x0008, 0x186c: 0x0008, 0x186d: 0x0008, 0x186e: 0x0008, 0x186f: 0x0008, - 0x1870: 0x3008, 0x1871: 0x3008, 0x1872: 0x3008, 0x1873: 0x3008, 0x1874: 0x3008, 0x1875: 0x3008, - 0x1876: 0x0040, 0x1877: 0x3008, 0x1878: 0x3008, 0x1879: 0x0040, 0x187a: 0x0040, 0x187b: 0x3308, - 0x187c: 0x3308, 0x187d: 0x3808, 0x187e: 0x3b08, 0x187f: 0x0008, + 0x1840: 0x0321, 0x1841: 0x0329, 0x1842: 0x0051, 0x1843: 0x0339, 0x1844: 0x0751, 0x1845: 0x00b9, + 0x1846: 0x0089, 0x1847: 0x0341, 0x1848: 0x0349, 0x1849: 0x0391, 0x184a: 0x00c1, 0x184b: 0x0109, + 0x184c: 0x00c9, 0x184d: 0x04b1, 0x184e: 0x0019, 0x184f: 0x02e9, 0x1850: 0x03d9, 0x1851: 0x02f1, + 0x1852: 0x02f9, 0x1853: 0x03f1, 0x1854: 0x0309, 0x1855: 0x0040, 0x1856: 0x0311, 0x1857: 0x00b1, + 0x1858: 0x0319, 0x1859: 0x0101, 0x185a: 0x0321, 0x185b: 0x0329, 0x185c: 0x0051, 0x185d: 0x0339, + 0x185e: 0x0751, 0x185f: 0x00b9, 0x1860: 0x0089, 0x1861: 0x0341, 0x1862: 0x0349, 0x1863: 0x0391, + 0x1864: 0x00c1, 0x1865: 0x0109, 0x1866: 0x00c9, 0x1867: 0x04b1, 0x1868: 0x0019, 0x1869: 0x02e9, + 0x186a: 0x03d9, 0x186b: 0x02f1, 0x186c: 0x02f9, 0x186d: 0x03f1, 0x186e: 0x0309, 0x186f: 0x00a9, + 0x1870: 0x0311, 0x1871: 0x00b1, 0x1872: 0x0319, 0x1873: 0x0101, 0x1874: 0x0321, 0x1875: 0x0329, + 0x1876: 0x0051, 0x1877: 0x0339, 0x1878: 0x0751, 0x1879: 0x00b9, 0x187a: 0x0089, 0x187b: 0x0341, + 0x187c: 0x0349, 0x187d: 0x0391, 0x187e: 0x00c1, 0x187f: 0x0109, // Block 0x62, offset 0x1880 - 0x1880: 0x0039, 0x1881: 0x0ee9, 0x1882: 0x1159, 0x1883: 0x0ef9, 0x1884: 0x0f09, 0x1885: 0x1199, - 0x1886: 0x0f31, 0x1887: 0x0249, 0x1888: 0x0f41, 0x1889: 0x0259, 0x188a: 0x0f51, 0x188b: 0x0359, - 0x188c: 0x0f61, 0x188d: 0x0f71, 0x188e: 0x00d9, 0x188f: 0x0f99, 0x1890: 0x2039, 0x1891: 0x0269, - 0x1892: 0x01d9, 0x1893: 0x0fa9, 0x1894: 0x0fb9, 0x1895: 0x1089, 0x1896: 0x0279, 0x1897: 0x0369, - 0x1898: 0x0289, 0x1899: 0x13d1, 0x189a: 0x0039, 0x189b: 0x0ee9, 0x189c: 0x1159, 0x189d: 0x0ef9, - 0x189e: 0x0f09, 0x189f: 0x1199, 0x18a0: 0x0f31, 0x18a1: 0x0249, 0x18a2: 0x0f41, 0x18a3: 0x0259, - 0x18a4: 0x0f51, 0x18a5: 0x0359, 0x18a6: 0x0f61, 0x18a7: 0x0f71, 0x18a8: 0x00d9, 0x18a9: 0x0f99, - 0x18aa: 0x2039, 0x18ab: 0x0269, 0x18ac: 0x01d9, 0x18ad: 0x0fa9, 0x18ae: 0x0fb9, 0x18af: 0x1089, - 0x18b0: 0x0279, 0x18b1: 0x0369, 0x18b2: 0x0289, 0x18b3: 0x13d1, 0x18b4: 0x0039, 0x18b5: 0x0ee9, - 0x18b6: 0x1159, 0x18b7: 0x0ef9, 0x18b8: 0x0f09, 0x18b9: 0x1199, 0x18ba: 0x0f31, 0x18bb: 0x0249, - 0x18bc: 0x0f41, 0x18bd: 0x0259, 0x18be: 0x0f51, 0x18bf: 0x0359, + 0x1880: 0x00c9, 0x1881: 0x04b1, 0x1882: 0x0019, 0x1883: 0x02e9, 0x1884: 0x03d9, 0x1885: 0x02f1, + 0x1886: 0x02f9, 0x1887: 0x03f1, 0x1888: 0x0309, 0x1889: 0x00a9, 0x188a: 0x0311, 0x188b: 0x00b1, + 0x188c: 0x0319, 0x188d: 0x0101, 0x188e: 0x0321, 0x188f: 0x0329, 0x1890: 0x0051, 0x1891: 0x0339, + 0x1892: 0x0751, 0x1893: 0x00b9, 0x1894: 0x0089, 0x1895: 0x0341, 0x1896: 0x0349, 0x1897: 0x0391, + 0x1898: 0x00c1, 0x1899: 0x0109, 0x189a: 0x00c9, 0x189b: 0x04b1, 0x189c: 0x0019, 0x189d: 0x0040, + 0x189e: 0x03d9, 0x189f: 0x02f1, 0x18a0: 0x0040, 0x18a1: 0x0040, 0x18a2: 0x0309, 0x18a3: 0x0040, + 0x18a4: 0x0040, 0x18a5: 0x00b1, 0x18a6: 0x0319, 0x18a7: 0x0040, 0x18a8: 0x0040, 0x18a9: 0x0329, + 0x18aa: 0x0051, 0x18ab: 0x0339, 0x18ac: 0x0751, 0x18ad: 0x0040, 0x18ae: 0x0089, 0x18af: 0x0341, + 0x18b0: 0x0349, 0x18b1: 0x0391, 0x18b2: 0x00c1, 0x18b3: 0x0109, 0x18b4: 0x00c9, 0x18b5: 0x04b1, + 0x18b6: 0x0019, 0x18b7: 0x02e9, 0x18b8: 0x03d9, 0x18b9: 0x02f1, 0x18ba: 0x0040, 0x18bb: 0x03f1, + 0x18bc: 0x0040, 0x18bd: 0x00a9, 0x18be: 0x0311, 0x18bf: 0x00b1, // Block 0x63, offset 0x18c0 - 0x18c0: 0x0f61, 0x18c1: 0x0f71, 0x18c2: 0x00d9, 0x18c3: 0x0f99, 0x18c4: 0x2039, 0x18c5: 0x0269, - 0x18c6: 0x01d9, 0x18c7: 0x0fa9, 0x18c8: 0x0fb9, 0x18c9: 0x1089, 0x18ca: 0x0279, 0x18cb: 0x0369, - 0x18cc: 0x0289, 0x18cd: 0x13d1, 0x18ce: 0x0039, 0x18cf: 0x0ee9, 0x18d0: 0x1159, 0x18d1: 0x0ef9, - 0x18d2: 0x0f09, 0x18d3: 0x1199, 0x18d4: 0x0f31, 0x18d5: 0x0040, 0x18d6: 0x0f41, 0x18d7: 0x0259, - 0x18d8: 0x0f51, 0x18d9: 0x0359, 0x18da: 0x0f61, 0x18db: 0x0f71, 0x18dc: 0x00d9, 0x18dd: 0x0f99, - 0x18de: 0x2039, 0x18df: 0x0269, 0x18e0: 0x01d9, 0x18e1: 0x0fa9, 0x18e2: 0x0fb9, 0x18e3: 0x1089, - 0x18e4: 0x0279, 0x18e5: 0x0369, 0x18e6: 0x0289, 0x18e7: 0x13d1, 0x18e8: 0x0039, 0x18e9: 0x0ee9, - 0x18ea: 0x1159, 0x18eb: 0x0ef9, 0x18ec: 0x0f09, 0x18ed: 0x1199, 0x18ee: 0x0f31, 0x18ef: 0x0249, - 0x18f0: 0x0f41, 0x18f1: 0x0259, 0x18f2: 0x0f51, 0x18f3: 0x0359, 0x18f4: 0x0f61, 0x18f5: 0x0f71, - 0x18f6: 0x00d9, 0x18f7: 0x0f99, 0x18f8: 0x2039, 0x18f9: 0x0269, 0x18fa: 0x01d9, 0x18fb: 0x0fa9, - 0x18fc: 0x0fb9, 0x18fd: 0x1089, 0x18fe: 0x0279, 0x18ff: 0x0369, + 0x18c0: 0x0319, 0x18c1: 0x0101, 0x18c2: 0x0321, 0x18c3: 0x0329, 0x18c4: 0x0040, 0x18c5: 0x0339, + 0x18c6: 0x0751, 0x18c7: 0x00b9, 0x18c8: 0x0089, 0x18c9: 0x0341, 0x18ca: 0x0349, 0x18cb: 0x0391, + 0x18cc: 0x00c1, 0x18cd: 0x0109, 0x18ce: 0x00c9, 0x18cf: 0x04b1, 0x18d0: 0x0019, 0x18d1: 0x02e9, + 0x18d2: 0x03d9, 0x18d3: 0x02f1, 0x18d4: 0x02f9, 0x18d5: 0x03f1, 0x18d6: 0x0309, 0x18d7: 0x00a9, + 0x18d8: 0x0311, 0x18d9: 0x00b1, 0x18da: 0x0319, 0x18db: 0x0101, 0x18dc: 0x0321, 0x18dd: 0x0329, + 0x18de: 0x0051, 0x18df: 0x0339, 0x18e0: 0x0751, 0x18e1: 0x00b9, 0x18e2: 0x0089, 0x18e3: 0x0341, + 0x18e4: 0x0349, 0x18e5: 0x0391, 0x18e6: 0x00c1, 0x18e7: 0x0109, 0x18e8: 0x00c9, 0x18e9: 0x04b1, + 0x18ea: 0x0019, 0x18eb: 0x02e9, 0x18ec: 0x03d9, 0x18ed: 0x02f1, 0x18ee: 0x02f9, 0x18ef: 0x03f1, + 0x18f0: 0x0309, 0x18f1: 0x00a9, 0x18f2: 0x0311, 0x18f3: 0x00b1, 0x18f4: 0x0319, 0x18f5: 0x0101, + 0x18f6: 0x0321, 0x18f7: 0x0329, 0x18f8: 0x0051, 0x18f9: 0x0339, 0x18fa: 0x0751, 0x18fb: 0x00b9, + 0x18fc: 0x0089, 0x18fd: 0x0341, 0x18fe: 0x0349, 0x18ff: 0x0391, // Block 0x64, offset 0x1900 - 0x1900: 0x0289, 0x1901: 0x13d1, 0x1902: 0x0039, 0x1903: 0x0ee9, 0x1904: 0x1159, 0x1905: 0x0ef9, - 0x1906: 0x0f09, 0x1907: 0x1199, 0x1908: 0x0f31, 0x1909: 0x0249, 0x190a: 0x0f41, 0x190b: 0x0259, - 0x190c: 0x0f51, 0x190d: 0x0359, 0x190e: 0x0f61, 0x190f: 0x0f71, 0x1910: 0x00d9, 0x1911: 0x0f99, - 0x1912: 0x2039, 0x1913: 0x0269, 0x1914: 0x01d9, 0x1915: 0x0fa9, 0x1916: 0x0fb9, 0x1917: 0x1089, - 0x1918: 0x0279, 0x1919: 0x0369, 0x191a: 0x0289, 0x191b: 0x13d1, 0x191c: 0x0039, 0x191d: 0x0040, - 0x191e: 0x1159, 0x191f: 0x0ef9, 0x1920: 0x0040, 0x1921: 0x0040, 0x1922: 0x0f31, 0x1923: 0x0040, - 0x1924: 0x0040, 0x1925: 0x0259, 0x1926: 0x0f51, 0x1927: 0x0040, 0x1928: 0x0040, 0x1929: 0x0f71, - 0x192a: 0x00d9, 0x192b: 0x0f99, 0x192c: 0x2039, 0x192d: 0x0040, 0x192e: 0x01d9, 0x192f: 0x0fa9, - 0x1930: 0x0fb9, 0x1931: 0x1089, 0x1932: 0x0279, 0x1933: 0x0369, 0x1934: 0x0289, 0x1935: 0x13d1, - 0x1936: 0x0039, 0x1937: 0x0ee9, 0x1938: 0x1159, 0x1939: 0x0ef9, 0x193a: 0x0040, 0x193b: 0x1199, - 0x193c: 0x0040, 0x193d: 0x0249, 0x193e: 0x0f41, 0x193f: 0x0259, + 0x1900: 0x00c1, 0x1901: 0x0109, 0x1902: 0x00c9, 0x1903: 0x04b1, 0x1904: 0x0019, 0x1905: 0x02e9, + 0x1906: 0x0040, 0x1907: 0x02f1, 0x1908: 0x02f9, 0x1909: 0x03f1, 0x190a: 0x0309, 0x190b: 0x0040, + 0x190c: 0x0040, 0x190d: 0x00b1, 0x190e: 0x0319, 0x190f: 0x0101, 0x1910: 0x0321, 0x1911: 0x0329, + 0x1912: 0x0051, 0x1913: 0x0339, 0x1914: 0x0751, 0x1915: 0x0040, 0x1916: 0x0089, 0x1917: 0x0341, + 0x1918: 0x0349, 0x1919: 0x0391, 0x191a: 0x00c1, 0x191b: 0x0109, 0x191c: 0x00c9, 0x191d: 0x0040, + 0x191e: 0x0019, 0x191f: 0x02e9, 0x1920: 0x03d9, 0x1921: 0x02f1, 0x1922: 0x02f9, 0x1923: 0x03f1, + 0x1924: 0x0309, 0x1925: 0x00a9, 0x1926: 0x0311, 0x1927: 0x00b1, 0x1928: 0x0319, 0x1929: 0x0101, + 0x192a: 0x0321, 0x192b: 0x0329, 0x192c: 0x0051, 0x192d: 0x0339, 0x192e: 0x0751, 0x192f: 0x00b9, + 0x1930: 0x0089, 0x1931: 0x0341, 0x1932: 0x0349, 0x1933: 0x0391, 0x1934: 0x00c1, 0x1935: 0x0109, + 0x1936: 0x00c9, 0x1937: 0x04b1, 0x1938: 0x0019, 0x1939: 0x02e9, 0x193a: 0x0040, 0x193b: 0x02f1, + 0x193c: 0x02f9, 0x193d: 0x03f1, 0x193e: 0x0309, 0x193f: 0x0040, // Block 0x65, offset 0x1940 - 0x1940: 0x0f51, 0x1941: 0x0359, 0x1942: 0x0f61, 0x1943: 0x0f71, 0x1944: 0x0040, 0x1945: 0x0f99, - 0x1946: 0x2039, 0x1947: 0x0269, 0x1948: 0x01d9, 0x1949: 0x0fa9, 0x194a: 0x0fb9, 0x194b: 0x1089, - 0x194c: 0x0279, 0x194d: 0x0369, 0x194e: 0x0289, 0x194f: 0x13d1, 0x1950: 0x0039, 0x1951: 0x0ee9, - 0x1952: 0x1159, 0x1953: 0x0ef9, 0x1954: 0x0f09, 0x1955: 0x1199, 0x1956: 0x0f31, 0x1957: 0x0249, - 0x1958: 0x0f41, 0x1959: 0x0259, 0x195a: 0x0f51, 0x195b: 0x0359, 0x195c: 0x0f61, 0x195d: 0x0f71, - 0x195e: 0x00d9, 0x195f: 0x0f99, 0x1960: 0x2039, 0x1961: 0x0269, 0x1962: 0x01d9, 0x1963: 0x0fa9, - 0x1964: 0x0fb9, 0x1965: 0x1089, 0x1966: 0x0279, 0x1967: 0x0369, 0x1968: 0x0289, 0x1969: 0x13d1, - 0x196a: 0x0039, 0x196b: 0x0ee9, 0x196c: 0x1159, 0x196d: 0x0ef9, 0x196e: 0x0f09, 0x196f: 0x1199, - 0x1970: 0x0f31, 0x1971: 0x0249, 0x1972: 0x0f41, 0x1973: 0x0259, 0x1974: 0x0f51, 0x1975: 0x0359, - 0x1976: 0x0f61, 0x1977: 0x0f71, 0x1978: 0x00d9, 0x1979: 0x0f99, 0x197a: 0x2039, 0x197b: 0x0269, - 0x197c: 0x01d9, 0x197d: 0x0fa9, 0x197e: 0x0fb9, 0x197f: 0x1089, + 0x1940: 0x0311, 0x1941: 0x00b1, 0x1942: 0x0319, 0x1943: 0x0101, 0x1944: 0x0321, 0x1945: 0x0040, + 0x1946: 0x0051, 0x1947: 0x0040, 0x1948: 0x0040, 0x1949: 0x0040, 0x194a: 0x0089, 0x194b: 0x0341, + 0x194c: 0x0349, 0x194d: 0x0391, 0x194e: 0x00c1, 0x194f: 0x0109, 0x1950: 0x00c9, 0x1951: 0x0040, + 0x1952: 0x0019, 0x1953: 0x02e9, 0x1954: 0x03d9, 0x1955: 0x02f1, 0x1956: 0x02f9, 0x1957: 0x03f1, + 0x1958: 0x0309, 0x1959: 0x00a9, 0x195a: 0x0311, 0x195b: 0x00b1, 0x195c: 0x0319, 0x195d: 0x0101, + 0x195e: 0x0321, 0x195f: 0x0329, 0x1960: 0x0051, 0x1961: 0x0339, 0x1962: 0x0751, 0x1963: 0x00b9, + 0x1964: 0x0089, 0x1965: 0x0341, 0x1966: 0x0349, 0x1967: 0x0391, 0x1968: 0x00c1, 0x1969: 0x0109, + 0x196a: 0x00c9, 0x196b: 0x04b1, 0x196c: 0x0019, 0x196d: 0x02e9, 0x196e: 0x03d9, 0x196f: 0x02f1, + 0x1970: 0x02f9, 0x1971: 0x03f1, 0x1972: 0x0309, 0x1973: 0x00a9, 0x1974: 0x0311, 0x1975: 0x00b1, + 0x1976: 0x0319, 0x1977: 0x0101, 0x1978: 0x0321, 0x1979: 0x0329, 0x197a: 0x0051, 0x197b: 0x0339, + 0x197c: 0x0751, 0x197d: 0x00b9, 0x197e: 0x0089, 0x197f: 0x0341, // Block 0x66, offset 0x1980 - 0x1980: 0x0279, 0x1981: 0x0369, 0x1982: 0x0289, 0x1983: 0x13d1, 0x1984: 0x0039, 0x1985: 0x0ee9, - 0x1986: 0x0040, 0x1987: 0x0ef9, 0x1988: 0x0f09, 0x1989: 0x1199, 0x198a: 0x0f31, 0x198b: 0x0040, - 0x198c: 0x0040, 0x198d: 0x0259, 0x198e: 0x0f51, 0x198f: 0x0359, 0x1990: 0x0f61, 0x1991: 0x0f71, - 0x1992: 0x00d9, 0x1993: 0x0f99, 0x1994: 0x2039, 0x1995: 0x0040, 0x1996: 0x01d9, 0x1997: 0x0fa9, - 0x1998: 0x0fb9, 0x1999: 0x1089, 0x199a: 0x0279, 0x199b: 0x0369, 0x199c: 0x0289, 0x199d: 0x0040, - 0x199e: 0x0039, 0x199f: 0x0ee9, 0x19a0: 0x1159, 0x19a1: 0x0ef9, 0x19a2: 0x0f09, 0x19a3: 0x1199, - 0x19a4: 0x0f31, 0x19a5: 0x0249, 0x19a6: 0x0f41, 0x19a7: 0x0259, 0x19a8: 0x0f51, 0x19a9: 0x0359, - 0x19aa: 0x0f61, 0x19ab: 0x0f71, 0x19ac: 0x00d9, 0x19ad: 0x0f99, 0x19ae: 0x2039, 0x19af: 0x0269, - 0x19b0: 0x01d9, 0x19b1: 0x0fa9, 0x19b2: 0x0fb9, 0x19b3: 0x1089, 0x19b4: 0x0279, 0x19b5: 0x0369, - 0x19b6: 0x0289, 0x19b7: 0x13d1, 0x19b8: 0x0039, 0x19b9: 0x0ee9, 0x19ba: 0x0040, 0x19bb: 0x0ef9, - 0x19bc: 0x0f09, 0x19bd: 0x1199, 0x19be: 0x0f31, 0x19bf: 0x0040, + 0x1980: 0x0349, 0x1981: 0x0391, 0x1982: 0x00c1, 0x1983: 0x0109, 0x1984: 0x00c9, 0x1985: 0x04b1, + 0x1986: 0x0019, 0x1987: 0x02e9, 0x1988: 0x03d9, 0x1989: 0x02f1, 0x198a: 0x02f9, 0x198b: 0x03f1, + 0x198c: 0x0309, 0x198d: 0x00a9, 0x198e: 0x0311, 0x198f: 0x00b1, 0x1990: 0x0319, 0x1991: 0x0101, + 0x1992: 0x0321, 0x1993: 0x0329, 0x1994: 0x0051, 0x1995: 0x0339, 0x1996: 0x0751, 0x1997: 0x00b9, + 0x1998: 0x0089, 0x1999: 0x0341, 0x199a: 0x0349, 0x199b: 0x0391, 0x199c: 0x00c1, 0x199d: 0x0109, + 0x199e: 0x00c9, 0x199f: 0x04b1, 0x19a0: 0x0019, 0x19a1: 0x02e9, 0x19a2: 0x03d9, 0x19a3: 0x02f1, + 0x19a4: 0x02f9, 0x19a5: 0x03f1, 0x19a6: 0x0309, 0x19a7: 0x00a9, 0x19a8: 0x0311, 0x19a9: 0x00b1, + 0x19aa: 0x0319, 0x19ab: 0x0101, 0x19ac: 0x0321, 0x19ad: 0x0329, 0x19ae: 0x0051, 0x19af: 0x0339, + 0x19b0: 0x0751, 0x19b1: 0x00b9, 0x19b2: 0x0089, 0x19b3: 0x0341, 0x19b4: 0x0349, 0x19b5: 0x0391, + 0x19b6: 0x00c1, 0x19b7: 0x0109, 0x19b8: 0x00c9, 0x19b9: 0x04b1, 0x19ba: 0x0019, 0x19bb: 0x02e9, + 0x19bc: 0x03d9, 0x19bd: 0x02f1, 0x19be: 0x02f9, 0x19bf: 0x03f1, // Block 0x67, offset 0x19c0 - 0x19c0: 0x0f41, 0x19c1: 0x0259, 0x19c2: 0x0f51, 0x19c3: 0x0359, 0x19c4: 0x0f61, 0x19c5: 0x0040, - 0x19c6: 0x00d9, 0x19c7: 0x0040, 0x19c8: 0x0040, 0x19c9: 0x0040, 0x19ca: 0x01d9, 0x19cb: 0x0fa9, - 0x19cc: 0x0fb9, 0x19cd: 0x1089, 0x19ce: 0x0279, 0x19cf: 0x0369, 0x19d0: 0x0289, 0x19d1: 0x0040, - 0x19d2: 0x0039, 0x19d3: 0x0ee9, 0x19d4: 0x1159, 0x19d5: 0x0ef9, 0x19d6: 0x0f09, 0x19d7: 0x1199, - 0x19d8: 0x0f31, 0x19d9: 0x0249, 0x19da: 0x0f41, 0x19db: 0x0259, 0x19dc: 0x0f51, 0x19dd: 0x0359, - 0x19de: 0x0f61, 0x19df: 0x0f71, 0x19e0: 0x00d9, 0x19e1: 0x0f99, 0x19e2: 0x2039, 0x19e3: 0x0269, - 0x19e4: 0x01d9, 0x19e5: 0x0fa9, 0x19e6: 0x0fb9, 0x19e7: 0x1089, 0x19e8: 0x0279, 0x19e9: 0x0369, - 0x19ea: 0x0289, 0x19eb: 0x13d1, 0x19ec: 0x0039, 0x19ed: 0x0ee9, 0x19ee: 0x1159, 0x19ef: 0x0ef9, - 0x19f0: 0x0f09, 0x19f1: 0x1199, 0x19f2: 0x0f31, 0x19f3: 0x0249, 0x19f4: 0x0f41, 0x19f5: 0x0259, - 0x19f6: 0x0f51, 0x19f7: 0x0359, 0x19f8: 0x0f61, 0x19f9: 0x0f71, 0x19fa: 0x00d9, 0x19fb: 0x0f99, - 0x19fc: 0x2039, 0x19fd: 0x0269, 0x19fe: 0x01d9, 0x19ff: 0x0fa9, + 0x19c0: 0x0309, 0x19c1: 0x00a9, 0x19c2: 0x0311, 0x19c3: 0x00b1, 0x19c4: 0x0319, 0x19c5: 0x0101, + 0x19c6: 0x0321, 0x19c7: 0x0329, 0x19c8: 0x0051, 0x19c9: 0x0339, 0x19ca: 0x0751, 0x19cb: 0x00b9, + 0x19cc: 0x0089, 0x19cd: 0x0341, 0x19ce: 0x0349, 0x19cf: 0x0391, 0x19d0: 0x00c1, 0x19d1: 0x0109, + 0x19d2: 0x00c9, 0x19d3: 0x04b1, 0x19d4: 0x0019, 0x19d5: 0x02e9, 0x19d6: 0x03d9, 0x19d7: 0x02f1, + 0x19d8: 0x02f9, 0x19d9: 0x03f1, 0x19da: 0x0309, 0x19db: 0x00a9, 0x19dc: 0x0311, 0x19dd: 0x00b1, + 0x19de: 0x0319, 0x19df: 0x0101, 0x19e0: 0x0321, 0x19e1: 0x0329, 0x19e2: 0x0051, 0x19e3: 0x0339, + 0x19e4: 0x0751, 0x19e5: 0x00b9, 0x19e6: 0x0089, 0x19e7: 0x0341, 0x19e8: 0x0349, 0x19e9: 0x0391, + 0x19ea: 0x00c1, 0x19eb: 0x0109, 0x19ec: 0x00c9, 0x19ed: 0x04b1, 0x19ee: 0x0019, 0x19ef: 0x02e9, + 0x19f0: 0x03d9, 0x19f1: 0x02f1, 0x19f2: 0x02f9, 0x19f3: 0x03f1, 0x19f4: 0x0309, 0x19f5: 0x00a9, + 0x19f6: 0x0311, 0x19f7: 0x00b1, 0x19f8: 0x0319, 0x19f9: 0x0101, 0x19fa: 0x0321, 0x19fb: 0x0329, + 0x19fc: 0x0051, 0x19fd: 0x0339, 0x19fe: 0x0751, 0x19ff: 0x00b9, // Block 0x68, offset 0x1a00 - 0x1a00: 0x0fb9, 0x1a01: 0x1089, 0x1a02: 0x0279, 0x1a03: 0x0369, 0x1a04: 0x0289, 0x1a05: 0x13d1, - 0x1a06: 0x0039, 0x1a07: 0x0ee9, 0x1a08: 0x1159, 0x1a09: 0x0ef9, 0x1a0a: 0x0f09, 0x1a0b: 0x1199, - 0x1a0c: 0x0f31, 0x1a0d: 0x0249, 0x1a0e: 0x0f41, 0x1a0f: 0x0259, 0x1a10: 0x0f51, 0x1a11: 0x0359, - 0x1a12: 0x0f61, 0x1a13: 0x0f71, 0x1a14: 0x00d9, 0x1a15: 0x0f99, 0x1a16: 0x2039, 0x1a17: 0x0269, - 0x1a18: 0x01d9, 0x1a19: 0x0fa9, 0x1a1a: 0x0fb9, 0x1a1b: 0x1089, 0x1a1c: 0x0279, 0x1a1d: 0x0369, - 0x1a1e: 0x0289, 0x1a1f: 0x13d1, 0x1a20: 0x0039, 0x1a21: 0x0ee9, 0x1a22: 0x1159, 0x1a23: 0x0ef9, - 0x1a24: 0x0f09, 0x1a25: 0x1199, 0x1a26: 0x0f31, 0x1a27: 0x0249, 0x1a28: 0x0f41, 0x1a29: 0x0259, - 0x1a2a: 0x0f51, 0x1a2b: 0x0359, 0x1a2c: 0x0f61, 0x1a2d: 0x0f71, 0x1a2e: 0x00d9, 0x1a2f: 0x0f99, - 0x1a30: 0x2039, 0x1a31: 0x0269, 0x1a32: 0x01d9, 0x1a33: 0x0fa9, 0x1a34: 0x0fb9, 0x1a35: 0x1089, - 0x1a36: 0x0279, 0x1a37: 0x0369, 0x1a38: 0x0289, 0x1a39: 0x13d1, 0x1a3a: 0x0039, 0x1a3b: 0x0ee9, - 0x1a3c: 0x1159, 0x1a3d: 0x0ef9, 0x1a3e: 0x0f09, 0x1a3f: 0x1199, + 0x1a00: 0x0089, 0x1a01: 0x0341, 0x1a02: 0x0349, 0x1a03: 0x0391, 0x1a04: 0x00c1, 0x1a05: 0x0109, + 0x1a06: 0x00c9, 0x1a07: 0x04b1, 0x1a08: 0x0019, 0x1a09: 0x02e9, 0x1a0a: 0x03d9, 0x1a0b: 0x02f1, + 0x1a0c: 0x02f9, 0x1a0d: 0x03f1, 0x1a0e: 0x0309, 0x1a0f: 0x00a9, 0x1a10: 0x0311, 0x1a11: 0x00b1, + 0x1a12: 0x0319, 0x1a13: 0x0101, 0x1a14: 0x0321, 0x1a15: 0x0329, 0x1a16: 0x0051, 0x1a17: 0x0339, + 0x1a18: 0x0751, 0x1a19: 0x00b9, 0x1a1a: 0x0089, 0x1a1b: 0x0341, 0x1a1c: 0x0349, 0x1a1d: 0x0391, + 0x1a1e: 0x00c1, 0x1a1f: 0x0109, 0x1a20: 0x00c9, 0x1a21: 0x04b1, 0x1a22: 0x0019, 0x1a23: 0x02e9, + 0x1a24: 0x03d9, 0x1a25: 0x02f1, 0x1a26: 0x02f9, 0x1a27: 0x03f1, 0x1a28: 0x0309, 0x1a29: 0x00a9, + 0x1a2a: 0x0311, 0x1a2b: 0x00b1, 0x1a2c: 0x0319, 0x1a2d: 0x0101, 0x1a2e: 0x0321, 0x1a2f: 0x0329, + 0x1a30: 0x0051, 0x1a31: 0x0339, 0x1a32: 0x0751, 0x1a33: 0x00b9, 0x1a34: 0x0089, 0x1a35: 0x0341, + 0x1a36: 0x0349, 0x1a37: 0x0391, 0x1a38: 0x00c1, 0x1a39: 0x0109, 0x1a3a: 0x00c9, 0x1a3b: 0x04b1, + 0x1a3c: 0x0019, 0x1a3d: 0x02e9, 0x1a3e: 0x03d9, 0x1a3f: 0x02f1, // Block 0x69, offset 0x1a40 - 0x1a40: 0x0f31, 0x1a41: 0x0249, 0x1a42: 0x0f41, 0x1a43: 0x0259, 0x1a44: 0x0f51, 0x1a45: 0x0359, - 0x1a46: 0x0f61, 0x1a47: 0x0f71, 0x1a48: 0x00d9, 0x1a49: 0x0f99, 0x1a4a: 0x2039, 0x1a4b: 0x0269, - 0x1a4c: 0x01d9, 0x1a4d: 0x0fa9, 0x1a4e: 0x0fb9, 0x1a4f: 0x1089, 0x1a50: 0x0279, 0x1a51: 0x0369, - 0x1a52: 0x0289, 0x1a53: 0x13d1, 0x1a54: 0x0039, 0x1a55: 0x0ee9, 0x1a56: 0x1159, 0x1a57: 0x0ef9, - 0x1a58: 0x0f09, 0x1a59: 0x1199, 0x1a5a: 0x0f31, 0x1a5b: 0x0249, 0x1a5c: 0x0f41, 0x1a5d: 0x0259, - 0x1a5e: 0x0f51, 0x1a5f: 0x0359, 0x1a60: 0x0f61, 0x1a61: 0x0f71, 0x1a62: 0x00d9, 0x1a63: 0x0f99, - 0x1a64: 0x2039, 0x1a65: 0x0269, 0x1a66: 0x01d9, 0x1a67: 0x0fa9, 0x1a68: 0x0fb9, 0x1a69: 0x1089, - 0x1a6a: 0x0279, 0x1a6b: 0x0369, 0x1a6c: 0x0289, 0x1a6d: 0x13d1, 0x1a6e: 0x0039, 0x1a6f: 0x0ee9, - 0x1a70: 0x1159, 0x1a71: 0x0ef9, 0x1a72: 0x0f09, 0x1a73: 0x1199, 0x1a74: 0x0f31, 0x1a75: 0x0249, - 0x1a76: 0x0f41, 0x1a77: 0x0259, 0x1a78: 0x0f51, 0x1a79: 0x0359, 0x1a7a: 0x0f61, 0x1a7b: 0x0f71, - 0x1a7c: 0x00d9, 0x1a7d: 0x0f99, 0x1a7e: 0x2039, 0x1a7f: 0x0269, + 0x1a40: 0x02f9, 0x1a41: 0x03f1, 0x1a42: 0x0309, 0x1a43: 0x00a9, 0x1a44: 0x0311, 0x1a45: 0x00b1, + 0x1a46: 0x0319, 0x1a47: 0x0101, 0x1a48: 0x0321, 0x1a49: 0x0329, 0x1a4a: 0x0051, 0x1a4b: 0x0339, + 0x1a4c: 0x0751, 0x1a4d: 0x00b9, 0x1a4e: 0x0089, 0x1a4f: 0x0341, 0x1a50: 0x0349, 0x1a51: 0x0391, + 0x1a52: 0x00c1, 0x1a53: 0x0109, 0x1a54: 0x00c9, 0x1a55: 0x04b1, 0x1a56: 0x0019, 0x1a57: 0x02e9, + 0x1a58: 0x03d9, 0x1a59: 0x02f1, 0x1a5a: 0x02f9, 0x1a5b: 0x03f1, 0x1a5c: 0x0309, 0x1a5d: 0x00a9, + 0x1a5e: 0x0311, 0x1a5f: 0x00b1, 0x1a60: 0x0319, 0x1a61: 0x0101, 0x1a62: 0x0321, 0x1a63: 0x0329, + 0x1a64: 0x0051, 0x1a65: 0x0339, 0x1a66: 0x0751, 0x1a67: 0x00b9, 0x1a68: 0x0089, 0x1a69: 0x0341, + 0x1a6a: 0x0349, 0x1a6b: 0x0391, 0x1a6c: 0x00c1, 0x1a6d: 0x0109, 0x1a6e: 0x00c9, 0x1a6f: 0x04b1, + 0x1a70: 0x0019, 0x1a71: 0x02e9, 0x1a72: 0x03d9, 0x1a73: 0x02f1, 0x1a74: 0x02f9, 0x1a75: 0x03f1, + 0x1a76: 0x0309, 0x1a77: 0x00a9, 0x1a78: 0x0311, 0x1a79: 0x00b1, 0x1a7a: 0x0319, 0x1a7b: 0x0101, + 0x1a7c: 0x0321, 0x1a7d: 0x0329, 0x1a7e: 0x0051, 0x1a7f: 0x0339, // Block 0x6a, offset 0x1a80 - 0x1a80: 0x01d9, 0x1a81: 0x0fa9, 0x1a82: 0x0fb9, 0x1a83: 0x1089, 0x1a84: 0x0279, 0x1a85: 0x0369, - 0x1a86: 0x0289, 0x1a87: 0x13d1, 0x1a88: 0x0039, 0x1a89: 0x0ee9, 0x1a8a: 0x1159, 0x1a8b: 0x0ef9, - 0x1a8c: 0x0f09, 0x1a8d: 0x1199, 0x1a8e: 0x0f31, 0x1a8f: 0x0249, 0x1a90: 0x0f41, 0x1a91: 0x0259, - 0x1a92: 0x0f51, 0x1a93: 0x0359, 0x1a94: 0x0f61, 0x1a95: 0x0f71, 0x1a96: 0x00d9, 0x1a97: 0x0f99, - 0x1a98: 0x2039, 0x1a99: 0x0269, 0x1a9a: 0x01d9, 0x1a9b: 0x0fa9, 0x1a9c: 0x0fb9, 0x1a9d: 0x1089, - 0x1a9e: 0x0279, 0x1a9f: 0x0369, 0x1aa0: 0x0289, 0x1aa1: 0x13d1, 0x1aa2: 0x0039, 0x1aa3: 0x0ee9, - 0x1aa4: 0x1159, 0x1aa5: 0x0ef9, 0x1aa6: 0x0f09, 0x1aa7: 0x1199, 0x1aa8: 0x0f31, 0x1aa9: 0x0249, - 0x1aaa: 0x0f41, 0x1aab: 0x0259, 0x1aac: 0x0f51, 0x1aad: 0x0359, 0x1aae: 0x0f61, 0x1aaf: 0x0f71, - 0x1ab0: 0x00d9, 0x1ab1: 0x0f99, 0x1ab2: 0x2039, 0x1ab3: 0x0269, 0x1ab4: 0x01d9, 0x1ab5: 0x0fa9, - 0x1ab6: 0x0fb9, 0x1ab7: 0x1089, 0x1ab8: 0x0279, 0x1ab9: 0x0369, 0x1aba: 0x0289, 0x1abb: 0x13d1, - 0x1abc: 0x0039, 0x1abd: 0x0ee9, 0x1abe: 0x1159, 0x1abf: 0x0ef9, + 0x1a80: 0x0751, 0x1a81: 0x00b9, 0x1a82: 0x0089, 0x1a83: 0x0341, 0x1a84: 0x0349, 0x1a85: 0x0391, + 0x1a86: 0x00c1, 0x1a87: 0x0109, 0x1a88: 0x00c9, 0x1a89: 0x04b1, 0x1a8a: 0x0019, 0x1a8b: 0x02e9, + 0x1a8c: 0x03d9, 0x1a8d: 0x02f1, 0x1a8e: 0x02f9, 0x1a8f: 0x03f1, 0x1a90: 0x0309, 0x1a91: 0x00a9, + 0x1a92: 0x0311, 0x1a93: 0x00b1, 0x1a94: 0x0319, 0x1a95: 0x0101, 0x1a96: 0x0321, 0x1a97: 0x0329, + 0x1a98: 0x0051, 0x1a99: 0x0339, 0x1a9a: 0x0751, 0x1a9b: 0x00b9, 0x1a9c: 0x0089, 0x1a9d: 0x0341, + 0x1a9e: 0x0349, 0x1a9f: 0x0391, 0x1aa0: 0x00c1, 0x1aa1: 0x0109, 0x1aa2: 0x00c9, 0x1aa3: 0x04b1, + 0x1aa4: 0x2279, 0x1aa5: 0x2281, 0x1aa6: 0x0040, 0x1aa7: 0x0040, 0x1aa8: 0x2289, 0x1aa9: 0x0399, + 0x1aaa: 0x03a1, 0x1aab: 0x03a9, 0x1aac: 0x2291, 0x1aad: 0x2299, 0x1aae: 0x22a1, 0x1aaf: 0x04d1, + 0x1ab0: 0x05f9, 0x1ab1: 0x22a9, 0x1ab2: 0x22b1, 0x1ab3: 0x22b9, 0x1ab4: 0x22c1, 0x1ab5: 0x22c9, + 0x1ab6: 0x22d1, 0x1ab7: 0x0799, 0x1ab8: 0x03c1, 0x1ab9: 0x04d1, 0x1aba: 0x22d9, 0x1abb: 0x22e1, + 0x1abc: 0x22e9, 0x1abd: 0x03b1, 0x1abe: 0x03b9, 0x1abf: 0x22f1, // Block 0x6b, offset 0x1ac0 - 0x1ac0: 0x0f09, 0x1ac1: 0x1199, 0x1ac2: 0x0f31, 0x1ac3: 0x0249, 0x1ac4: 0x0f41, 0x1ac5: 0x0259, - 0x1ac6: 0x0f51, 0x1ac7: 0x0359, 0x1ac8: 0x0f61, 0x1ac9: 0x0f71, 0x1aca: 0x00d9, 0x1acb: 0x0f99, - 0x1acc: 0x2039, 0x1acd: 0x0269, 0x1ace: 0x01d9, 0x1acf: 0x0fa9, 0x1ad0: 0x0fb9, 0x1ad1: 0x1089, - 0x1ad2: 0x0279, 0x1ad3: 0x0369, 0x1ad4: 0x0289, 0x1ad5: 0x13d1, 0x1ad6: 0x0039, 0x1ad7: 0x0ee9, - 0x1ad8: 0x1159, 0x1ad9: 0x0ef9, 0x1ada: 0x0f09, 0x1adb: 0x1199, 0x1adc: 0x0f31, 0x1add: 0x0249, - 0x1ade: 0x0f41, 0x1adf: 0x0259, 0x1ae0: 0x0f51, 0x1ae1: 0x0359, 0x1ae2: 0x0f61, 0x1ae3: 0x0f71, - 0x1ae4: 0x00d9, 0x1ae5: 0x0f99, 0x1ae6: 0x2039, 0x1ae7: 0x0269, 0x1ae8: 0x01d9, 0x1ae9: 0x0fa9, - 0x1aea: 0x0fb9, 0x1aeb: 0x1089, 0x1aec: 0x0279, 0x1aed: 0x0369, 0x1aee: 0x0289, 0x1aef: 0x13d1, - 0x1af0: 0x0039, 0x1af1: 0x0ee9, 0x1af2: 0x1159, 0x1af3: 0x0ef9, 0x1af4: 0x0f09, 0x1af5: 0x1199, - 0x1af6: 0x0f31, 0x1af7: 0x0249, 0x1af8: 0x0f41, 0x1af9: 0x0259, 0x1afa: 0x0f51, 0x1afb: 0x0359, - 0x1afc: 0x0f61, 0x1afd: 0x0f71, 0x1afe: 0x00d9, 0x1aff: 0x0f99, + 0x1ac0: 0x0769, 0x1ac1: 0x22f9, 0x1ac2: 0x2289, 0x1ac3: 0x0399, 0x1ac4: 0x03a1, 0x1ac5: 0x03a9, + 0x1ac6: 0x2291, 0x1ac7: 0x2299, 0x1ac8: 0x22a1, 0x1ac9: 0x04d1, 0x1aca: 0x05f9, 0x1acb: 0x22a9, + 0x1acc: 0x22b1, 0x1acd: 0x22b9, 0x1ace: 0x22c1, 0x1acf: 0x22c9, 0x1ad0: 0x22d1, 0x1ad1: 0x0799, + 0x1ad2: 0x03c1, 0x1ad3: 0x22d9, 0x1ad4: 0x22d9, 0x1ad5: 0x22e1, 0x1ad6: 0x22e9, 0x1ad7: 0x03b1, + 0x1ad8: 0x03b9, 0x1ad9: 0x22f1, 0x1ada: 0x0769, 0x1adb: 0x2301, 0x1adc: 0x2291, 0x1add: 0x04d1, + 0x1ade: 0x22a9, 0x1adf: 0x03b1, 0x1ae0: 0x03c1, 0x1ae1: 0x0799, 0x1ae2: 0x2289, 0x1ae3: 0x0399, + 0x1ae4: 0x03a1, 0x1ae5: 0x03a9, 0x1ae6: 0x2291, 0x1ae7: 0x2299, 0x1ae8: 0x22a1, 0x1ae9: 0x04d1, + 0x1aea: 0x05f9, 0x1aeb: 0x22a9, 0x1aec: 0x22b1, 0x1aed: 0x22b9, 0x1aee: 0x22c1, 0x1aef: 0x22c9, + 0x1af0: 0x22d1, 0x1af1: 0x0799, 0x1af2: 0x03c1, 0x1af3: 0x04d1, 0x1af4: 0x22d9, 0x1af5: 0x22e1, + 0x1af6: 0x22e9, 0x1af7: 0x03b1, 0x1af8: 0x03b9, 0x1af9: 0x22f1, 0x1afa: 0x0769, 0x1afb: 0x22f9, + 0x1afc: 0x2289, 0x1afd: 0x0399, 0x1afe: 0x03a1, 0x1aff: 0x03a9, // Block 0x6c, offset 0x1b00 - 0x1b00: 0x2039, 0x1b01: 0x0269, 0x1b02: 0x01d9, 0x1b03: 0x0fa9, 0x1b04: 0x0fb9, 0x1b05: 0x1089, - 0x1b06: 0x0279, 0x1b07: 0x0369, 0x1b08: 0x0289, 0x1b09: 0x13d1, 0x1b0a: 0x0039, 0x1b0b: 0x0ee9, - 0x1b0c: 0x1159, 0x1b0d: 0x0ef9, 0x1b0e: 0x0f09, 0x1b0f: 0x1199, 0x1b10: 0x0f31, 0x1b11: 0x0249, - 0x1b12: 0x0f41, 0x1b13: 0x0259, 0x1b14: 0x0f51, 0x1b15: 0x0359, 0x1b16: 0x0f61, 0x1b17: 0x0f71, - 0x1b18: 0x00d9, 0x1b19: 0x0f99, 0x1b1a: 0x2039, 0x1b1b: 0x0269, 0x1b1c: 0x01d9, 0x1b1d: 0x0fa9, - 0x1b1e: 0x0fb9, 0x1b1f: 0x1089, 0x1b20: 0x0279, 0x1b21: 0x0369, 0x1b22: 0x0289, 0x1b23: 0x13d1, - 0x1b24: 0xbad1, 0x1b25: 0xbae9, 0x1b26: 0x0040, 0x1b27: 0x0040, 0x1b28: 0xbb01, 0x1b29: 0x1099, - 0x1b2a: 0x10b1, 0x1b2b: 0x10c9, 0x1b2c: 0xbb19, 0x1b2d: 0xbb31, 0x1b2e: 0xbb49, 0x1b2f: 0x1429, - 0x1b30: 0x1a31, 0x1b31: 0xbb61, 0x1b32: 0xbb79, 0x1b33: 0xbb91, 0x1b34: 0xbba9, 0x1b35: 0xbbc1, - 0x1b36: 0xbbd9, 0x1b37: 0x2109, 0x1b38: 0x1111, 0x1b39: 0x1429, 0x1b3a: 0xbbf1, 0x1b3b: 0xbc09, - 0x1b3c: 0xbc21, 0x1b3d: 0x10e1, 0x1b3e: 0x10f9, 0x1b3f: 0xbc39, + 0x1b00: 0x2291, 0x1b01: 0x2299, 0x1b02: 0x22a1, 0x1b03: 0x04d1, 0x1b04: 0x05f9, 0x1b05: 0x22a9, + 0x1b06: 0x22b1, 0x1b07: 0x22b9, 0x1b08: 0x22c1, 0x1b09: 0x22c9, 0x1b0a: 0x22d1, 0x1b0b: 0x0799, + 0x1b0c: 0x03c1, 0x1b0d: 0x22d9, 0x1b0e: 0x22d9, 0x1b0f: 0x22e1, 0x1b10: 0x22e9, 0x1b11: 0x03b1, + 0x1b12: 0x03b9, 0x1b13: 0x22f1, 0x1b14: 0x0769, 0x1b15: 0x2301, 0x1b16: 0x2291, 0x1b17: 0x04d1, + 0x1b18: 0x22a9, 0x1b19: 0x03b1, 0x1b1a: 0x03c1, 0x1b1b: 0x0799, 0x1b1c: 0x2289, 0x1b1d: 0x0399, + 0x1b1e: 0x03a1, 0x1b1f: 0x03a9, 0x1b20: 0x2291, 0x1b21: 0x2299, 0x1b22: 0x22a1, 0x1b23: 0x04d1, + 0x1b24: 0x05f9, 0x1b25: 0x22a9, 0x1b26: 0x22b1, 0x1b27: 0x22b9, 0x1b28: 0x22c1, 0x1b29: 0x22c9, + 0x1b2a: 0x22d1, 0x1b2b: 0x0799, 0x1b2c: 0x03c1, 0x1b2d: 0x04d1, 0x1b2e: 0x22d9, 0x1b2f: 0x22e1, + 0x1b30: 0x22e9, 0x1b31: 0x03b1, 0x1b32: 0x03b9, 0x1b33: 0x22f1, 0x1b34: 0x0769, 0x1b35: 0x22f9, + 0x1b36: 0x2289, 0x1b37: 0x0399, 0x1b38: 0x03a1, 0x1b39: 0x03a9, 0x1b3a: 0x2291, 0x1b3b: 0x2299, + 0x1b3c: 0x22a1, 0x1b3d: 0x04d1, 0x1b3e: 0x05f9, 0x1b3f: 0x22a9, // Block 0x6d, offset 0x1b40 - 0x1b40: 0x2079, 0x1b41: 0xbc51, 0x1b42: 0xbb01, 0x1b43: 0x1099, 0x1b44: 0x10b1, 0x1b45: 0x10c9, - 0x1b46: 0xbb19, 0x1b47: 0xbb31, 0x1b48: 0xbb49, 0x1b49: 0x1429, 0x1b4a: 0x1a31, 0x1b4b: 0xbb61, - 0x1b4c: 0xbb79, 0x1b4d: 0xbb91, 0x1b4e: 0xbba9, 0x1b4f: 0xbbc1, 0x1b50: 0xbbd9, 0x1b51: 0x2109, - 0x1b52: 0x1111, 0x1b53: 0xbbf1, 0x1b54: 0xbbf1, 0x1b55: 0xbc09, 0x1b56: 0xbc21, 0x1b57: 0x10e1, - 0x1b58: 0x10f9, 0x1b59: 0xbc39, 0x1b5a: 0x2079, 0x1b5b: 0xbc71, 0x1b5c: 0xbb19, 0x1b5d: 0x1429, - 0x1b5e: 0xbb61, 0x1b5f: 0x10e1, 0x1b60: 0x1111, 0x1b61: 0x2109, 0x1b62: 0xbb01, 0x1b63: 0x1099, - 0x1b64: 0x10b1, 0x1b65: 0x10c9, 0x1b66: 0xbb19, 0x1b67: 0xbb31, 0x1b68: 0xbb49, 0x1b69: 0x1429, - 0x1b6a: 0x1a31, 0x1b6b: 0xbb61, 0x1b6c: 0xbb79, 0x1b6d: 0xbb91, 0x1b6e: 0xbba9, 0x1b6f: 0xbbc1, - 0x1b70: 0xbbd9, 0x1b71: 0x2109, 0x1b72: 0x1111, 0x1b73: 0x1429, 0x1b74: 0xbbf1, 0x1b75: 0xbc09, - 0x1b76: 0xbc21, 0x1b77: 0x10e1, 0x1b78: 0x10f9, 0x1b79: 0xbc39, 0x1b7a: 0x2079, 0x1b7b: 0xbc51, - 0x1b7c: 0xbb01, 0x1b7d: 0x1099, 0x1b7e: 0x10b1, 0x1b7f: 0x10c9, + 0x1b40: 0x22b1, 0x1b41: 0x22b9, 0x1b42: 0x22c1, 0x1b43: 0x22c9, 0x1b44: 0x22d1, 0x1b45: 0x0799, + 0x1b46: 0x03c1, 0x1b47: 0x22d9, 0x1b48: 0x22d9, 0x1b49: 0x22e1, 0x1b4a: 0x22e9, 0x1b4b: 0x03b1, + 0x1b4c: 0x03b9, 0x1b4d: 0x22f1, 0x1b4e: 0x0769, 0x1b4f: 0x2301, 0x1b50: 0x2291, 0x1b51: 0x04d1, + 0x1b52: 0x22a9, 0x1b53: 0x03b1, 0x1b54: 0x03c1, 0x1b55: 0x0799, 0x1b56: 0x2289, 0x1b57: 0x0399, + 0x1b58: 0x03a1, 0x1b59: 0x03a9, 0x1b5a: 0x2291, 0x1b5b: 0x2299, 0x1b5c: 0x22a1, 0x1b5d: 0x04d1, + 0x1b5e: 0x05f9, 0x1b5f: 0x22a9, 0x1b60: 0x22b1, 0x1b61: 0x22b9, 0x1b62: 0x22c1, 0x1b63: 0x22c9, + 0x1b64: 0x22d1, 0x1b65: 0x0799, 0x1b66: 0x03c1, 0x1b67: 0x04d1, 0x1b68: 0x22d9, 0x1b69: 0x22e1, + 0x1b6a: 0x22e9, 0x1b6b: 0x03b1, 0x1b6c: 0x03b9, 0x1b6d: 0x22f1, 0x1b6e: 0x0769, 0x1b6f: 0x22f9, + 0x1b70: 0x2289, 0x1b71: 0x0399, 0x1b72: 0x03a1, 0x1b73: 0x03a9, 0x1b74: 0x2291, 0x1b75: 0x2299, + 0x1b76: 0x22a1, 0x1b77: 0x04d1, 0x1b78: 0x05f9, 0x1b79: 0x22a9, 0x1b7a: 0x22b1, 0x1b7b: 0x22b9, + 0x1b7c: 0x22c1, 0x1b7d: 0x22c9, 0x1b7e: 0x22d1, 0x1b7f: 0x0799, // Block 0x6e, offset 0x1b80 - 0x1b80: 0xbb19, 0x1b81: 0xbb31, 0x1b82: 0xbb49, 0x1b83: 0x1429, 0x1b84: 0x1a31, 0x1b85: 0xbb61, - 0x1b86: 0xbb79, 0x1b87: 0xbb91, 0x1b88: 0xbba9, 0x1b89: 0xbbc1, 0x1b8a: 0xbbd9, 0x1b8b: 0x2109, - 0x1b8c: 0x1111, 0x1b8d: 0xbbf1, 0x1b8e: 0xbbf1, 0x1b8f: 0xbc09, 0x1b90: 0xbc21, 0x1b91: 0x10e1, - 0x1b92: 0x10f9, 0x1b93: 0xbc39, 0x1b94: 0x2079, 0x1b95: 0xbc71, 0x1b96: 0xbb19, 0x1b97: 0x1429, - 0x1b98: 0xbb61, 0x1b99: 0x10e1, 0x1b9a: 0x1111, 0x1b9b: 0x2109, 0x1b9c: 0xbb01, 0x1b9d: 0x1099, - 0x1b9e: 0x10b1, 0x1b9f: 0x10c9, 0x1ba0: 0xbb19, 0x1ba1: 0xbb31, 0x1ba2: 0xbb49, 0x1ba3: 0x1429, - 0x1ba4: 0x1a31, 0x1ba5: 0xbb61, 0x1ba6: 0xbb79, 0x1ba7: 0xbb91, 0x1ba8: 0xbba9, 0x1ba9: 0xbbc1, - 0x1baa: 0xbbd9, 0x1bab: 0x2109, 0x1bac: 0x1111, 0x1bad: 0x1429, 0x1bae: 0xbbf1, 0x1baf: 0xbc09, - 0x1bb0: 0xbc21, 0x1bb1: 0x10e1, 0x1bb2: 0x10f9, 0x1bb3: 0xbc39, 0x1bb4: 0x2079, 0x1bb5: 0xbc51, - 0x1bb6: 0xbb01, 0x1bb7: 0x1099, 0x1bb8: 0x10b1, 0x1bb9: 0x10c9, 0x1bba: 0xbb19, 0x1bbb: 0xbb31, - 0x1bbc: 0xbb49, 0x1bbd: 0x1429, 0x1bbe: 0x1a31, 0x1bbf: 0xbb61, + 0x1b80: 0x03c1, 0x1b81: 0x22d9, 0x1b82: 0x22d9, 0x1b83: 0x22e1, 0x1b84: 0x22e9, 0x1b85: 0x03b1, + 0x1b86: 0x03b9, 0x1b87: 0x22f1, 0x1b88: 0x0769, 0x1b89: 0x2301, 0x1b8a: 0x2291, 0x1b8b: 0x04d1, + 0x1b8c: 0x22a9, 0x1b8d: 0x03b1, 0x1b8e: 0x03c1, 0x1b8f: 0x0799, 0x1b90: 0x2289, 0x1b91: 0x0399, + 0x1b92: 0x03a1, 0x1b93: 0x03a9, 0x1b94: 0x2291, 0x1b95: 0x2299, 0x1b96: 0x22a1, 0x1b97: 0x04d1, + 0x1b98: 0x05f9, 0x1b99: 0x22a9, 0x1b9a: 0x22b1, 0x1b9b: 0x22b9, 0x1b9c: 0x22c1, 0x1b9d: 0x22c9, + 0x1b9e: 0x22d1, 0x1b9f: 0x0799, 0x1ba0: 0x03c1, 0x1ba1: 0x04d1, 0x1ba2: 0x22d9, 0x1ba3: 0x22e1, + 0x1ba4: 0x22e9, 0x1ba5: 0x03b1, 0x1ba6: 0x03b9, 0x1ba7: 0x22f1, 0x1ba8: 0x0769, 0x1ba9: 0x22f9, + 0x1baa: 0x2289, 0x1bab: 0x0399, 0x1bac: 0x03a1, 0x1bad: 0x03a9, 0x1bae: 0x2291, 0x1baf: 0x2299, + 0x1bb0: 0x22a1, 0x1bb1: 0x04d1, 0x1bb2: 0x05f9, 0x1bb3: 0x22a9, 0x1bb4: 0x22b1, 0x1bb5: 0x22b9, + 0x1bb6: 0x22c1, 0x1bb7: 0x22c9, 0x1bb8: 0x22d1, 0x1bb9: 0x0799, 0x1bba: 0x03c1, 0x1bbb: 0x22d9, + 0x1bbc: 0x22d9, 0x1bbd: 0x22e1, 0x1bbe: 0x22e9, 0x1bbf: 0x03b1, // Block 0x6f, offset 0x1bc0 - 0x1bc0: 0xbb79, 0x1bc1: 0xbb91, 0x1bc2: 0xbba9, 0x1bc3: 0xbbc1, 0x1bc4: 0xbbd9, 0x1bc5: 0x2109, - 0x1bc6: 0x1111, 0x1bc7: 0xbbf1, 0x1bc8: 0xbbf1, 0x1bc9: 0xbc09, 0x1bca: 0xbc21, 0x1bcb: 0x10e1, - 0x1bcc: 0x10f9, 0x1bcd: 0xbc39, 0x1bce: 0x2079, 0x1bcf: 0xbc71, 0x1bd0: 0xbb19, 0x1bd1: 0x1429, - 0x1bd2: 0xbb61, 0x1bd3: 0x10e1, 0x1bd4: 0x1111, 0x1bd5: 0x2109, 0x1bd6: 0xbb01, 0x1bd7: 0x1099, - 0x1bd8: 0x10b1, 0x1bd9: 0x10c9, 0x1bda: 0xbb19, 0x1bdb: 0xbb31, 0x1bdc: 0xbb49, 0x1bdd: 0x1429, - 0x1bde: 0x1a31, 0x1bdf: 0xbb61, 0x1be0: 0xbb79, 0x1be1: 0xbb91, 0x1be2: 0xbba9, 0x1be3: 0xbbc1, - 0x1be4: 0xbbd9, 0x1be5: 0x2109, 0x1be6: 0x1111, 0x1be7: 0x1429, 0x1be8: 0xbbf1, 0x1be9: 0xbc09, - 0x1bea: 0xbc21, 0x1beb: 0x10e1, 0x1bec: 0x10f9, 0x1bed: 0xbc39, 0x1bee: 0x2079, 0x1bef: 0xbc51, - 0x1bf0: 0xbb01, 0x1bf1: 0x1099, 0x1bf2: 0x10b1, 0x1bf3: 0x10c9, 0x1bf4: 0xbb19, 0x1bf5: 0xbb31, - 0x1bf6: 0xbb49, 0x1bf7: 0x1429, 0x1bf8: 0x1a31, 0x1bf9: 0xbb61, 0x1bfa: 0xbb79, 0x1bfb: 0xbb91, - 0x1bfc: 0xbba9, 0x1bfd: 0xbbc1, 0x1bfe: 0xbbd9, 0x1bff: 0x2109, + 0x1bc0: 0x03b9, 0x1bc1: 0x22f1, 0x1bc2: 0x0769, 0x1bc3: 0x2301, 0x1bc4: 0x2291, 0x1bc5: 0x04d1, + 0x1bc6: 0x22a9, 0x1bc7: 0x03b1, 0x1bc8: 0x03c1, 0x1bc9: 0x0799, 0x1bca: 0x2309, 0x1bcb: 0x2309, + 0x1bcc: 0x0040, 0x1bcd: 0x0040, 0x1bce: 0x06e1, 0x1bcf: 0x0049, 0x1bd0: 0x0029, 0x1bd1: 0x0031, + 0x1bd2: 0x06e9, 0x1bd3: 0x06f1, 0x1bd4: 0x06f9, 0x1bd5: 0x0701, 0x1bd6: 0x0709, 0x1bd7: 0x0711, + 0x1bd8: 0x06e1, 0x1bd9: 0x0049, 0x1bda: 0x0029, 0x1bdb: 0x0031, 0x1bdc: 0x06e9, 0x1bdd: 0x06f1, + 0x1bde: 0x06f9, 0x1bdf: 0x0701, 0x1be0: 0x0709, 0x1be1: 0x0711, 0x1be2: 0x06e1, 0x1be3: 0x0049, + 0x1be4: 0x0029, 0x1be5: 0x0031, 0x1be6: 0x06e9, 0x1be7: 0x06f1, 0x1be8: 0x06f9, 0x1be9: 0x0701, + 0x1bea: 0x0709, 0x1beb: 0x0711, 0x1bec: 0x06e1, 0x1bed: 0x0049, 0x1bee: 0x0029, 0x1bef: 0x0031, + 0x1bf0: 0x06e9, 0x1bf1: 0x06f1, 0x1bf2: 0x06f9, 0x1bf3: 0x0701, 0x1bf4: 0x0709, 0x1bf5: 0x0711, + 0x1bf6: 0x06e1, 0x1bf7: 0x0049, 0x1bf8: 0x0029, 0x1bf9: 0x0031, 0x1bfa: 0x06e9, 0x1bfb: 0x06f1, + 0x1bfc: 0x06f9, 0x1bfd: 0x0701, 0x1bfe: 0x0709, 0x1bff: 0x0711, // Block 0x70, offset 0x1c00 - 0x1c00: 0x1111, 0x1c01: 0xbbf1, 0x1c02: 0xbbf1, 0x1c03: 0xbc09, 0x1c04: 0xbc21, 0x1c05: 0x10e1, - 0x1c06: 0x10f9, 0x1c07: 0xbc39, 0x1c08: 0x2079, 0x1c09: 0xbc71, 0x1c0a: 0xbb19, 0x1c0b: 0x1429, - 0x1c0c: 0xbb61, 0x1c0d: 0x10e1, 0x1c0e: 0x1111, 0x1c0f: 0x2109, 0x1c10: 0xbb01, 0x1c11: 0x1099, - 0x1c12: 0x10b1, 0x1c13: 0x10c9, 0x1c14: 0xbb19, 0x1c15: 0xbb31, 0x1c16: 0xbb49, 0x1c17: 0x1429, - 0x1c18: 0x1a31, 0x1c19: 0xbb61, 0x1c1a: 0xbb79, 0x1c1b: 0xbb91, 0x1c1c: 0xbba9, 0x1c1d: 0xbbc1, - 0x1c1e: 0xbbd9, 0x1c1f: 0x2109, 0x1c20: 0x1111, 0x1c21: 0x1429, 0x1c22: 0xbbf1, 0x1c23: 0xbc09, - 0x1c24: 0xbc21, 0x1c25: 0x10e1, 0x1c26: 0x10f9, 0x1c27: 0xbc39, 0x1c28: 0x2079, 0x1c29: 0xbc51, - 0x1c2a: 0xbb01, 0x1c2b: 0x1099, 0x1c2c: 0x10b1, 0x1c2d: 0x10c9, 0x1c2e: 0xbb19, 0x1c2f: 0xbb31, - 0x1c30: 0xbb49, 0x1c31: 0x1429, 0x1c32: 0x1a31, 0x1c33: 0xbb61, 0x1c34: 0xbb79, 0x1c35: 0xbb91, - 0x1c36: 0xbba9, 0x1c37: 0xbbc1, 0x1c38: 0xbbd9, 0x1c39: 0x2109, 0x1c3a: 0x1111, 0x1c3b: 0xbbf1, - 0x1c3c: 0xbbf1, 0x1c3d: 0xbc09, 0x1c3e: 0xbc21, 0x1c3f: 0x10e1, + 0x1c00: 0xe115, 0x1c01: 0xe115, 0x1c02: 0xe135, 0x1c03: 0xe135, 0x1c04: 0xe115, 0x1c05: 0xe115, + 0x1c06: 0xe175, 0x1c07: 0xe175, 0x1c08: 0xe115, 0x1c09: 0xe115, 0x1c0a: 0xe135, 0x1c0b: 0xe135, + 0x1c0c: 0xe115, 0x1c0d: 0xe115, 0x1c0e: 0xe1f5, 0x1c0f: 0xe1f5, 0x1c10: 0xe115, 0x1c11: 0xe115, + 0x1c12: 0xe135, 0x1c13: 0xe135, 0x1c14: 0xe115, 0x1c15: 0xe115, 0x1c16: 0xe175, 0x1c17: 0xe175, + 0x1c18: 0xe115, 0x1c19: 0xe115, 0x1c1a: 0xe135, 0x1c1b: 0xe135, 0x1c1c: 0xe115, 0x1c1d: 0xe115, + 0x1c1e: 0x8b3d, 0x1c1f: 0x8b3d, 0x1c20: 0x04b5, 0x1c21: 0x04b5, 0x1c22: 0x0a08, 0x1c23: 0x0a08, + 0x1c24: 0x0a08, 0x1c25: 0x0a08, 0x1c26: 0x0a08, 0x1c27: 0x0a08, 0x1c28: 0x0a08, 0x1c29: 0x0a08, + 0x1c2a: 0x0a08, 0x1c2b: 0x0a08, 0x1c2c: 0x0a08, 0x1c2d: 0x0a08, 0x1c2e: 0x0a08, 0x1c2f: 0x0a08, + 0x1c30: 0x0a08, 0x1c31: 0x0a08, 0x1c32: 0x0a08, 0x1c33: 0x0a08, 0x1c34: 0x0a08, 0x1c35: 0x0a08, + 0x1c36: 0x0a08, 0x1c37: 0x0a08, 0x1c38: 0x0a08, 0x1c39: 0x0a08, 0x1c3a: 0x0a08, 0x1c3b: 0x0a08, + 0x1c3c: 0x0a08, 0x1c3d: 0x0a08, 0x1c3e: 0x0a08, 0x1c3f: 0x0a08, // Block 0x71, offset 0x1c40 - 0x1c40: 0x10f9, 0x1c41: 0xbc39, 0x1c42: 0x2079, 0x1c43: 0xbc71, 0x1c44: 0xbb19, 0x1c45: 0x1429, - 0x1c46: 0xbb61, 0x1c47: 0x10e1, 0x1c48: 0x1111, 0x1c49: 0x2109, 0x1c4a: 0xbc91, 0x1c4b: 0xbc91, - 0x1c4c: 0x0040, 0x1c4d: 0x0040, 0x1c4e: 0x1f41, 0x1c4f: 0x00c9, 0x1c50: 0x0069, 0x1c51: 0x0079, - 0x1c52: 0x1f51, 0x1c53: 0x1f61, 0x1c54: 0x1f71, 0x1c55: 0x1f81, 0x1c56: 0x1f91, 0x1c57: 0x1fa1, - 0x1c58: 0x1f41, 0x1c59: 0x00c9, 0x1c5a: 0x0069, 0x1c5b: 0x0079, 0x1c5c: 0x1f51, 0x1c5d: 0x1f61, - 0x1c5e: 0x1f71, 0x1c5f: 0x1f81, 0x1c60: 0x1f91, 0x1c61: 0x1fa1, 0x1c62: 0x1f41, 0x1c63: 0x00c9, - 0x1c64: 0x0069, 0x1c65: 0x0079, 0x1c66: 0x1f51, 0x1c67: 0x1f61, 0x1c68: 0x1f71, 0x1c69: 0x1f81, - 0x1c6a: 0x1f91, 0x1c6b: 0x1fa1, 0x1c6c: 0x1f41, 0x1c6d: 0x00c9, 0x1c6e: 0x0069, 0x1c6f: 0x0079, - 0x1c70: 0x1f51, 0x1c71: 0x1f61, 0x1c72: 0x1f71, 0x1c73: 0x1f81, 0x1c74: 0x1f91, 0x1c75: 0x1fa1, - 0x1c76: 0x1f41, 0x1c77: 0x00c9, 0x1c78: 0x0069, 0x1c79: 0x0079, 0x1c7a: 0x1f51, 0x1c7b: 0x1f61, - 0x1c7c: 0x1f71, 0x1c7d: 0x1f81, 0x1c7e: 0x1f91, 0x1c7f: 0x1fa1, + 0x1c40: 0x20b1, 0x1c41: 0x20b9, 0x1c42: 0x20d9, 0x1c43: 0x20f1, 0x1c44: 0x0040, 0x1c45: 0x2189, + 0x1c46: 0x2109, 0x1c47: 0x20e1, 0x1c48: 0x2131, 0x1c49: 0x2191, 0x1c4a: 0x2161, 0x1c4b: 0x2169, + 0x1c4c: 0x2171, 0x1c4d: 0x2179, 0x1c4e: 0x2111, 0x1c4f: 0x2141, 0x1c50: 0x2151, 0x1c51: 0x2121, + 0x1c52: 0x2159, 0x1c53: 0x2101, 0x1c54: 0x2119, 0x1c55: 0x20c9, 0x1c56: 0x20d1, 0x1c57: 0x20e9, + 0x1c58: 0x20f9, 0x1c59: 0x2129, 0x1c5a: 0x2139, 0x1c5b: 0x2149, 0x1c5c: 0x2311, 0x1c5d: 0x1689, + 0x1c5e: 0x2319, 0x1c5f: 0x2321, 0x1c60: 0x0040, 0x1c61: 0x20b9, 0x1c62: 0x20d9, 0x1c63: 0x0040, + 0x1c64: 0x2181, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0x20e1, 0x1c68: 0x0040, 0x1c69: 0x2191, + 0x1c6a: 0x2161, 0x1c6b: 0x2169, 0x1c6c: 0x2171, 0x1c6d: 0x2179, 0x1c6e: 0x2111, 0x1c6f: 0x2141, + 0x1c70: 0x2151, 0x1c71: 0x2121, 0x1c72: 0x2159, 0x1c73: 0x0040, 0x1c74: 0x2119, 0x1c75: 0x20c9, + 0x1c76: 0x20d1, 0x1c77: 0x20e9, 0x1c78: 0x0040, 0x1c79: 0x2129, 0x1c7a: 0x0040, 0x1c7b: 0x2149, + 0x1c7c: 0x0040, 0x1c7d: 0x0040, 0x1c7e: 0x0040, 0x1c7f: 0x0040, // Block 0x72, offset 0x1c80 - 0x1c80: 0xe115, 0x1c81: 0xe115, 0x1c82: 0xe135, 0x1c83: 0xe135, 0x1c84: 0xe115, 0x1c85: 0xe115, - 0x1c86: 0xe175, 0x1c87: 0xe175, 0x1c88: 0xe115, 0x1c89: 0xe115, 0x1c8a: 0xe135, 0x1c8b: 0xe135, - 0x1c8c: 0xe115, 0x1c8d: 0xe115, 0x1c8e: 0xe1f5, 0x1c8f: 0xe1f5, 0x1c90: 0xe115, 0x1c91: 0xe115, - 0x1c92: 0xe135, 0x1c93: 0xe135, 0x1c94: 0xe115, 0x1c95: 0xe115, 0x1c96: 0xe175, 0x1c97: 0xe175, - 0x1c98: 0xe115, 0x1c99: 0xe115, 0x1c9a: 0xe135, 0x1c9b: 0xe135, 0x1c9c: 0xe115, 0x1c9d: 0xe115, - 0x1c9e: 0x8b3d, 0x1c9f: 0x8b3d, 0x1ca0: 0x04b5, 0x1ca1: 0x04b5, 0x1ca2: 0x0a08, 0x1ca3: 0x0a08, - 0x1ca4: 0x0a08, 0x1ca5: 0x0a08, 0x1ca6: 0x0a08, 0x1ca7: 0x0a08, 0x1ca8: 0x0a08, 0x1ca9: 0x0a08, - 0x1caa: 0x0a08, 0x1cab: 0x0a08, 0x1cac: 0x0a08, 0x1cad: 0x0a08, 0x1cae: 0x0a08, 0x1caf: 0x0a08, - 0x1cb0: 0x0a08, 0x1cb1: 0x0a08, 0x1cb2: 0x0a08, 0x1cb3: 0x0a08, 0x1cb4: 0x0a08, 0x1cb5: 0x0a08, - 0x1cb6: 0x0a08, 0x1cb7: 0x0a08, 0x1cb8: 0x0a08, 0x1cb9: 0x0a08, 0x1cba: 0x0a08, 0x1cbb: 0x0a08, - 0x1cbc: 0x0a08, 0x1cbd: 0x0a08, 0x1cbe: 0x0a08, 0x1cbf: 0x0a08, + 0x1c80: 0x0040, 0x1c81: 0x0040, 0x1c82: 0x20d9, 0x1c83: 0x0040, 0x1c84: 0x0040, 0x1c85: 0x0040, + 0x1c86: 0x0040, 0x1c87: 0x20e1, 0x1c88: 0x0040, 0x1c89: 0x2191, 0x1c8a: 0x0040, 0x1c8b: 0x2169, + 0x1c8c: 0x0040, 0x1c8d: 0x2179, 0x1c8e: 0x2111, 0x1c8f: 0x2141, 0x1c90: 0x0040, 0x1c91: 0x2121, + 0x1c92: 0x2159, 0x1c93: 0x0040, 0x1c94: 0x2119, 0x1c95: 0x0040, 0x1c96: 0x0040, 0x1c97: 0x20e9, + 0x1c98: 0x0040, 0x1c99: 0x2129, 0x1c9a: 0x0040, 0x1c9b: 0x2149, 0x1c9c: 0x0040, 0x1c9d: 0x1689, + 0x1c9e: 0x0040, 0x1c9f: 0x2321, 0x1ca0: 0x0040, 0x1ca1: 0x20b9, 0x1ca2: 0x20d9, 0x1ca3: 0x0040, + 0x1ca4: 0x2181, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0x20e1, 0x1ca8: 0x2131, 0x1ca9: 0x2191, + 0x1caa: 0x2161, 0x1cab: 0x0040, 0x1cac: 0x2171, 0x1cad: 0x2179, 0x1cae: 0x2111, 0x1caf: 0x2141, + 0x1cb0: 0x2151, 0x1cb1: 0x2121, 0x1cb2: 0x2159, 0x1cb3: 0x0040, 0x1cb4: 0x2119, 0x1cb5: 0x20c9, + 0x1cb6: 0x20d1, 0x1cb7: 0x20e9, 0x1cb8: 0x0040, 0x1cb9: 0x2129, 0x1cba: 0x2139, 0x1cbb: 0x2149, + 0x1cbc: 0x2311, 0x1cbd: 0x0040, 0x1cbe: 0x2319, 0x1cbf: 0x0040, // Block 0x73, offset 0x1cc0 - 0x1cc0: 0xb1d9, 0x1cc1: 0xb1f1, 0x1cc2: 0xb251, 0x1cc3: 0xb299, 0x1cc4: 0x0040, 0x1cc5: 0xb461, - 0x1cc6: 0xb2e1, 0x1cc7: 0xb269, 0x1cc8: 0xb359, 0x1cc9: 0xb479, 0x1cca: 0xb3e9, 0x1ccb: 0xb401, - 0x1ccc: 0xb419, 0x1ccd: 0xb431, 0x1cce: 0xb2f9, 0x1ccf: 0xb389, 0x1cd0: 0xb3b9, 0x1cd1: 0xb329, - 0x1cd2: 0xb3d1, 0x1cd3: 0xb2c9, 0x1cd4: 0xb311, 0x1cd5: 0xb221, 0x1cd6: 0xb239, 0x1cd7: 0xb281, - 0x1cd8: 0xb2b1, 0x1cd9: 0xb341, 0x1cda: 0xb371, 0x1cdb: 0xb3a1, 0x1cdc: 0xbca9, 0x1cdd: 0x7999, - 0x1cde: 0xbcc1, 0x1cdf: 0xbcd9, 0x1ce0: 0x0040, 0x1ce1: 0xb1f1, 0x1ce2: 0xb251, 0x1ce3: 0x0040, - 0x1ce4: 0xb449, 0x1ce5: 0x0040, 0x1ce6: 0x0040, 0x1ce7: 0xb269, 0x1ce8: 0x0040, 0x1ce9: 0xb479, - 0x1cea: 0xb3e9, 0x1ceb: 0xb401, 0x1cec: 0xb419, 0x1ced: 0xb431, 0x1cee: 0xb2f9, 0x1cef: 0xb389, - 0x1cf0: 0xb3b9, 0x1cf1: 0xb329, 0x1cf2: 0xb3d1, 0x1cf3: 0x0040, 0x1cf4: 0xb311, 0x1cf5: 0xb221, - 0x1cf6: 0xb239, 0x1cf7: 0xb281, 0x1cf8: 0x0040, 0x1cf9: 0xb341, 0x1cfa: 0x0040, 0x1cfb: 0xb3a1, + 0x1cc0: 0x20b1, 0x1cc1: 0x20b9, 0x1cc2: 0x20d9, 0x1cc3: 0x20f1, 0x1cc4: 0x2181, 0x1cc5: 0x2189, + 0x1cc6: 0x2109, 0x1cc7: 0x20e1, 0x1cc8: 0x2131, 0x1cc9: 0x2191, 0x1cca: 0x0040, 0x1ccb: 0x2169, + 0x1ccc: 0x2171, 0x1ccd: 0x2179, 0x1cce: 0x2111, 0x1ccf: 0x2141, 0x1cd0: 0x2151, 0x1cd1: 0x2121, + 0x1cd2: 0x2159, 0x1cd3: 0x2101, 0x1cd4: 0x2119, 0x1cd5: 0x20c9, 0x1cd6: 0x20d1, 0x1cd7: 0x20e9, + 0x1cd8: 0x20f9, 0x1cd9: 0x2129, 0x1cda: 0x2139, 0x1cdb: 0x2149, 0x1cdc: 0x0040, 0x1cdd: 0x0040, + 0x1cde: 0x0040, 0x1cdf: 0x0040, 0x1ce0: 0x0040, 0x1ce1: 0x20b9, 0x1ce2: 0x20d9, 0x1ce3: 0x20f1, + 0x1ce4: 0x0040, 0x1ce5: 0x2189, 0x1ce6: 0x2109, 0x1ce7: 0x20e1, 0x1ce8: 0x2131, 0x1ce9: 0x2191, + 0x1cea: 0x0040, 0x1ceb: 0x2169, 0x1cec: 0x2171, 0x1ced: 0x2179, 0x1cee: 0x2111, 0x1cef: 0x2141, + 0x1cf0: 0x2151, 0x1cf1: 0x2121, 0x1cf2: 0x2159, 0x1cf3: 0x2101, 0x1cf4: 0x2119, 0x1cf5: 0x20c9, + 0x1cf6: 0x20d1, 0x1cf7: 0x20e9, 0x1cf8: 0x20f9, 0x1cf9: 0x2129, 0x1cfa: 0x2139, 0x1cfb: 0x2149, 0x1cfc: 0x0040, 0x1cfd: 0x0040, 0x1cfe: 0x0040, 0x1cff: 0x0040, // Block 0x74, offset 0x1d00 - 0x1d00: 0x0040, 0x1d01: 0x0040, 0x1d02: 0xb251, 0x1d03: 0x0040, 0x1d04: 0x0040, 0x1d05: 0x0040, - 0x1d06: 0x0040, 0x1d07: 0xb269, 0x1d08: 0x0040, 0x1d09: 0xb479, 0x1d0a: 0x0040, 0x1d0b: 0xb401, - 0x1d0c: 0x0040, 0x1d0d: 0xb431, 0x1d0e: 0xb2f9, 0x1d0f: 0xb389, 0x1d10: 0x0040, 0x1d11: 0xb329, - 0x1d12: 0xb3d1, 0x1d13: 0x0040, 0x1d14: 0xb311, 0x1d15: 0x0040, 0x1d16: 0x0040, 0x1d17: 0xb281, - 0x1d18: 0x0040, 0x1d19: 0xb341, 0x1d1a: 0x0040, 0x1d1b: 0xb3a1, 0x1d1c: 0x0040, 0x1d1d: 0x7999, - 0x1d1e: 0x0040, 0x1d1f: 0xbcd9, 0x1d20: 0x0040, 0x1d21: 0xb1f1, 0x1d22: 0xb251, 0x1d23: 0x0040, - 0x1d24: 0xb449, 0x1d25: 0x0040, 0x1d26: 0x0040, 0x1d27: 0xb269, 0x1d28: 0xb359, 0x1d29: 0xb479, - 0x1d2a: 0xb3e9, 0x1d2b: 0x0040, 0x1d2c: 0xb419, 0x1d2d: 0xb431, 0x1d2e: 0xb2f9, 0x1d2f: 0xb389, - 0x1d30: 0xb3b9, 0x1d31: 0xb329, 0x1d32: 0xb3d1, 0x1d33: 0x0040, 0x1d34: 0xb311, 0x1d35: 0xb221, - 0x1d36: 0xb239, 0x1d37: 0xb281, 0x1d38: 0x0040, 0x1d39: 0xb341, 0x1d3a: 0xb371, 0x1d3b: 0xb3a1, - 0x1d3c: 0xbca9, 0x1d3d: 0x0040, 0x1d3e: 0xbcc1, 0x1d3f: 0x0040, + 0x1d00: 0x0040, 0x1d01: 0x232a, 0x1d02: 0x2332, 0x1d03: 0x233a, 0x1d04: 0x2342, 0x1d05: 0x234a, + 0x1d06: 0x2352, 0x1d07: 0x235a, 0x1d08: 0x2362, 0x1d09: 0x236a, 0x1d0a: 0x2372, 0x1d0b: 0x0018, + 0x1d0c: 0x0018, 0x1d0d: 0x0018, 0x1d0e: 0x0018, 0x1d0f: 0x0018, 0x1d10: 0x237a, 0x1d11: 0x2382, + 0x1d12: 0x238a, 0x1d13: 0x2392, 0x1d14: 0x239a, 0x1d15: 0x23a2, 0x1d16: 0x23aa, 0x1d17: 0x23b2, + 0x1d18: 0x23ba, 0x1d19: 0x23c2, 0x1d1a: 0x23ca, 0x1d1b: 0x23d2, 0x1d1c: 0x23da, 0x1d1d: 0x23e2, + 0x1d1e: 0x23ea, 0x1d1f: 0x23f2, 0x1d20: 0x23fa, 0x1d21: 0x2402, 0x1d22: 0x240a, 0x1d23: 0x2412, + 0x1d24: 0x241a, 0x1d25: 0x2422, 0x1d26: 0x242a, 0x1d27: 0x2432, 0x1d28: 0x243a, 0x1d29: 0x2442, + 0x1d2a: 0x2449, 0x1d2b: 0x03d9, 0x1d2c: 0x00b9, 0x1d2d: 0x1239, 0x1d2e: 0x2451, 0x1d2f: 0x0018, + 0x1d30: 0x0019, 0x1d31: 0x02e9, 0x1d32: 0x03d9, 0x1d33: 0x02f1, 0x1d34: 0x02f9, 0x1d35: 0x03f1, + 0x1d36: 0x0309, 0x1d37: 0x00a9, 0x1d38: 0x0311, 0x1d39: 0x00b1, 0x1d3a: 0x0319, 0x1d3b: 0x0101, + 0x1d3c: 0x0321, 0x1d3d: 0x0329, 0x1d3e: 0x0051, 0x1d3f: 0x0339, // Block 0x75, offset 0x1d40 - 0x1d40: 0xb1d9, 0x1d41: 0xb1f1, 0x1d42: 0xb251, 0x1d43: 0xb299, 0x1d44: 0xb449, 0x1d45: 0xb461, - 0x1d46: 0xb2e1, 0x1d47: 0xb269, 0x1d48: 0xb359, 0x1d49: 0xb479, 0x1d4a: 0x0040, 0x1d4b: 0xb401, - 0x1d4c: 0xb419, 0x1d4d: 0xb431, 0x1d4e: 0xb2f9, 0x1d4f: 0xb389, 0x1d50: 0xb3b9, 0x1d51: 0xb329, - 0x1d52: 0xb3d1, 0x1d53: 0xb2c9, 0x1d54: 0xb311, 0x1d55: 0xb221, 0x1d56: 0xb239, 0x1d57: 0xb281, - 0x1d58: 0xb2b1, 0x1d59: 0xb341, 0x1d5a: 0xb371, 0x1d5b: 0xb3a1, 0x1d5c: 0x0040, 0x1d5d: 0x0040, - 0x1d5e: 0x0040, 0x1d5f: 0x0040, 0x1d60: 0x0040, 0x1d61: 0xb1f1, 0x1d62: 0xb251, 0x1d63: 0xb299, - 0x1d64: 0x0040, 0x1d65: 0xb461, 0x1d66: 0xb2e1, 0x1d67: 0xb269, 0x1d68: 0xb359, 0x1d69: 0xb479, - 0x1d6a: 0x0040, 0x1d6b: 0xb401, 0x1d6c: 0xb419, 0x1d6d: 0xb431, 0x1d6e: 0xb2f9, 0x1d6f: 0xb389, - 0x1d70: 0xb3b9, 0x1d71: 0xb329, 0x1d72: 0xb3d1, 0x1d73: 0xb2c9, 0x1d74: 0xb311, 0x1d75: 0xb221, - 0x1d76: 0xb239, 0x1d77: 0xb281, 0x1d78: 0xb2b1, 0x1d79: 0xb341, 0x1d7a: 0xb371, 0x1d7b: 0xb3a1, - 0x1d7c: 0x0040, 0x1d7d: 0x0040, 0x1d7e: 0x0040, 0x1d7f: 0x0040, + 0x1d40: 0x0751, 0x1d41: 0x00b9, 0x1d42: 0x0089, 0x1d43: 0x0341, 0x1d44: 0x0349, 0x1d45: 0x0391, + 0x1d46: 0x00c1, 0x1d47: 0x0109, 0x1d48: 0x00c9, 0x1d49: 0x04b1, 0x1d4a: 0x2459, 0x1d4b: 0x11f9, + 0x1d4c: 0x2461, 0x1d4d: 0x04d9, 0x1d4e: 0x2469, 0x1d4f: 0x2471, 0x1d50: 0x0018, 0x1d51: 0x0018, + 0x1d52: 0x0018, 0x1d53: 0x0018, 0x1d54: 0x0018, 0x1d55: 0x0018, 0x1d56: 0x0018, 0x1d57: 0x0018, + 0x1d58: 0x0018, 0x1d59: 0x0018, 0x1d5a: 0x0018, 0x1d5b: 0x0018, 0x1d5c: 0x0018, 0x1d5d: 0x0018, + 0x1d5e: 0x0018, 0x1d5f: 0x0018, 0x1d60: 0x0018, 0x1d61: 0x0018, 0x1d62: 0x0018, 0x1d63: 0x0018, + 0x1d64: 0x0018, 0x1d65: 0x0018, 0x1d66: 0x0018, 0x1d67: 0x0018, 0x1d68: 0x0018, 0x1d69: 0x0018, + 0x1d6a: 0x2479, 0x1d6b: 0x2481, 0x1d6c: 0x2489, 0x1d6d: 0x0018, 0x1d6e: 0x0018, 0x1d6f: 0x0018, + 0x1d70: 0x0018, 0x1d71: 0x0018, 0x1d72: 0x0018, 0x1d73: 0x0018, 0x1d74: 0x0018, 0x1d75: 0x0018, + 0x1d76: 0x0018, 0x1d77: 0x0018, 0x1d78: 0x0018, 0x1d79: 0x0018, 0x1d7a: 0x0018, 0x1d7b: 0x0018, + 0x1d7c: 0x0018, 0x1d7d: 0x0018, 0x1d7e: 0x0018, 0x1d7f: 0x0018, // Block 0x76, offset 0x1d80 - 0x1d80: 0x0040, 0x1d81: 0xbcf2, 0x1d82: 0xbd0a, 0x1d83: 0xbd22, 0x1d84: 0xbd3a, 0x1d85: 0xbd52, - 0x1d86: 0xbd6a, 0x1d87: 0xbd82, 0x1d88: 0xbd9a, 0x1d89: 0xbdb2, 0x1d8a: 0xbdca, 0x1d8b: 0x0018, - 0x1d8c: 0x0018, 0x1d8d: 0x0018, 0x1d8e: 0x0018, 0x1d8f: 0x0018, 0x1d90: 0xbde2, 0x1d91: 0xbe02, - 0x1d92: 0xbe22, 0x1d93: 0xbe42, 0x1d94: 0xbe62, 0x1d95: 0xbe82, 0x1d96: 0xbea2, 0x1d97: 0xbec2, - 0x1d98: 0xbee2, 0x1d99: 0xbf02, 0x1d9a: 0xbf22, 0x1d9b: 0xbf42, 0x1d9c: 0xbf62, 0x1d9d: 0xbf82, - 0x1d9e: 0xbfa2, 0x1d9f: 0xbfc2, 0x1da0: 0xbfe2, 0x1da1: 0xc002, 0x1da2: 0xc022, 0x1da3: 0xc042, - 0x1da4: 0xc062, 0x1da5: 0xc082, 0x1da6: 0xc0a2, 0x1da7: 0xc0c2, 0x1da8: 0xc0e2, 0x1da9: 0xc102, - 0x1daa: 0xc121, 0x1dab: 0x1159, 0x1dac: 0x0269, 0x1dad: 0x66a9, 0x1dae: 0xc161, 0x1daf: 0x0018, - 0x1db0: 0x0039, 0x1db1: 0x0ee9, 0x1db2: 0x1159, 0x1db3: 0x0ef9, 0x1db4: 0x0f09, 0x1db5: 0x1199, - 0x1db6: 0x0f31, 0x1db7: 0x0249, 0x1db8: 0x0f41, 0x1db9: 0x0259, 0x1dba: 0x0f51, 0x1dbb: 0x0359, - 0x1dbc: 0x0f61, 0x1dbd: 0x0f71, 0x1dbe: 0x00d9, 0x1dbf: 0x0f99, + 0x1d80: 0x2499, 0x1d81: 0x24a1, 0x1d82: 0x24a9, 0x1d83: 0x0040, 0x1d84: 0x0040, 0x1d85: 0x0040, + 0x1d86: 0x0040, 0x1d87: 0x0040, 0x1d88: 0x0040, 0x1d89: 0x0040, 0x1d8a: 0x0040, 0x1d8b: 0x0040, + 0x1d8c: 0x0040, 0x1d8d: 0x0040, 0x1d8e: 0x0040, 0x1d8f: 0x0040, 0x1d90: 0x24b1, 0x1d91: 0x24b9, + 0x1d92: 0x24c1, 0x1d93: 0x24c9, 0x1d94: 0x24d1, 0x1d95: 0x24d9, 0x1d96: 0x24e1, 0x1d97: 0x24e9, + 0x1d98: 0x24f1, 0x1d99: 0x24f9, 0x1d9a: 0x2501, 0x1d9b: 0x2509, 0x1d9c: 0x2511, 0x1d9d: 0x2519, + 0x1d9e: 0x2521, 0x1d9f: 0x2529, 0x1da0: 0x2531, 0x1da1: 0x2539, 0x1da2: 0x2541, 0x1da3: 0x2549, + 0x1da4: 0x2551, 0x1da5: 0x2559, 0x1da6: 0x2561, 0x1da7: 0x2569, 0x1da8: 0x2571, 0x1da9: 0x2579, + 0x1daa: 0x2581, 0x1dab: 0x2589, 0x1dac: 0x2591, 0x1dad: 0x2599, 0x1dae: 0x25a1, 0x1daf: 0x25a9, + 0x1db0: 0x25b1, 0x1db1: 0x25b9, 0x1db2: 0x25c1, 0x1db3: 0x25c9, 0x1db4: 0x25d1, 0x1db5: 0x25d9, + 0x1db6: 0x25e1, 0x1db7: 0x25e9, 0x1db8: 0x25f1, 0x1db9: 0x25f9, 0x1dba: 0x2601, 0x1dbb: 0x2609, + 0x1dbc: 0x0040, 0x1dbd: 0x0040, 0x1dbe: 0x0040, 0x1dbf: 0x0040, // Block 0x77, offset 0x1dc0 - 0x1dc0: 0x2039, 0x1dc1: 0x0269, 0x1dc2: 0x01d9, 0x1dc3: 0x0fa9, 0x1dc4: 0x0fb9, 0x1dc5: 0x1089, - 0x1dc6: 0x0279, 0x1dc7: 0x0369, 0x1dc8: 0x0289, 0x1dc9: 0x13d1, 0x1dca: 0xc179, 0x1dcb: 0x65e9, - 0x1dcc: 0xc191, 0x1dcd: 0x1441, 0x1dce: 0xc1a9, 0x1dcf: 0xc1c9, 0x1dd0: 0x0018, 0x1dd1: 0x0018, - 0x1dd2: 0x0018, 0x1dd3: 0x0018, 0x1dd4: 0x0018, 0x1dd5: 0x0018, 0x1dd6: 0x0018, 0x1dd7: 0x0018, - 0x1dd8: 0x0018, 0x1dd9: 0x0018, 0x1dda: 0x0018, 0x1ddb: 0x0018, 0x1ddc: 0x0018, 0x1ddd: 0x0018, - 0x1dde: 0x0018, 0x1ddf: 0x0018, 0x1de0: 0x0018, 0x1de1: 0x0018, 0x1de2: 0x0018, 0x1de3: 0x0018, - 0x1de4: 0x0018, 0x1de5: 0x0018, 0x1de6: 0x0018, 0x1de7: 0x0018, 0x1de8: 0x0018, 0x1de9: 0x0018, - 0x1dea: 0xc1e1, 0x1deb: 0xc1f9, 0x1dec: 0xc211, 0x1ded: 0x0018, 0x1dee: 0x0018, 0x1def: 0x0018, - 0x1df0: 0x0018, 0x1df1: 0x0018, 0x1df2: 0x0018, 0x1df3: 0x0018, 0x1df4: 0x0018, 0x1df5: 0x0018, - 0x1df6: 0x0018, 0x1df7: 0x0018, 0x1df8: 0x0018, 0x1df9: 0x0018, 0x1dfa: 0x0018, 0x1dfb: 0x0018, - 0x1dfc: 0x0018, 0x1dfd: 0x0018, 0x1dfe: 0x0018, 0x1dff: 0x0018, + 0x1dc0: 0x2669, 0x1dc1: 0x2671, 0x1dc2: 0x2679, 0x1dc3: 0x8b55, 0x1dc4: 0x2681, 0x1dc5: 0x2689, + 0x1dc6: 0x2691, 0x1dc7: 0x2699, 0x1dc8: 0x26a1, 0x1dc9: 0x26a9, 0x1dca: 0x26b1, 0x1dcb: 0x26b9, + 0x1dcc: 0x26c1, 0x1dcd: 0x8b75, 0x1dce: 0x26c9, 0x1dcf: 0x26d1, 0x1dd0: 0x26d9, 0x1dd1: 0x26e1, + 0x1dd2: 0x8b95, 0x1dd3: 0x26e9, 0x1dd4: 0x26f1, 0x1dd5: 0x2521, 0x1dd6: 0x8bb5, 0x1dd7: 0x26f9, + 0x1dd8: 0x2701, 0x1dd9: 0x2709, 0x1dda: 0x2711, 0x1ddb: 0x2719, 0x1ddc: 0x8bd5, 0x1ddd: 0x2721, + 0x1dde: 0x2729, 0x1ddf: 0x2731, 0x1de0: 0x2739, 0x1de1: 0x2741, 0x1de2: 0x25f9, 0x1de3: 0x2749, + 0x1de4: 0x2751, 0x1de5: 0x2759, 0x1de6: 0x2761, 0x1de7: 0x2769, 0x1de8: 0x2771, 0x1de9: 0x2779, + 0x1dea: 0x2781, 0x1deb: 0x2789, 0x1dec: 0x2791, 0x1ded: 0x2799, 0x1dee: 0x27a1, 0x1def: 0x27a9, + 0x1df0: 0x27b1, 0x1df1: 0x27b9, 0x1df2: 0x27b9, 0x1df3: 0x27b9, 0x1df4: 0x8bf5, 0x1df5: 0x27c1, + 0x1df6: 0x27c9, 0x1df7: 0x27d1, 0x1df8: 0x8c15, 0x1df9: 0x27d9, 0x1dfa: 0x27e1, 0x1dfb: 0x27e9, + 0x1dfc: 0x27f1, 0x1dfd: 0x27f9, 0x1dfe: 0x2801, 0x1dff: 0x2809, // Block 0x78, offset 0x1e00 - 0x1e00: 0xc241, 0x1e01: 0xc279, 0x1e02: 0xc2b1, 0x1e03: 0x0040, 0x1e04: 0x0040, 0x1e05: 0x0040, - 0x1e06: 0x0040, 0x1e07: 0x0040, 0x1e08: 0x0040, 0x1e09: 0x0040, 0x1e0a: 0x0040, 0x1e0b: 0x0040, - 0x1e0c: 0x0040, 0x1e0d: 0x0040, 0x1e0e: 0x0040, 0x1e0f: 0x0040, 0x1e10: 0xc2d1, 0x1e11: 0xc2f1, - 0x1e12: 0xc311, 0x1e13: 0xc331, 0x1e14: 0xc351, 0x1e15: 0xc371, 0x1e16: 0xc391, 0x1e17: 0xc3b1, - 0x1e18: 0xc3d1, 0x1e19: 0xc3f1, 0x1e1a: 0xc411, 0x1e1b: 0xc431, 0x1e1c: 0xc451, 0x1e1d: 0xc471, - 0x1e1e: 0xc491, 0x1e1f: 0xc4b1, 0x1e20: 0xc4d1, 0x1e21: 0xc4f1, 0x1e22: 0xc511, 0x1e23: 0xc531, - 0x1e24: 0xc551, 0x1e25: 0xc571, 0x1e26: 0xc591, 0x1e27: 0xc5b1, 0x1e28: 0xc5d1, 0x1e29: 0xc5f1, - 0x1e2a: 0xc611, 0x1e2b: 0xc631, 0x1e2c: 0xc651, 0x1e2d: 0xc671, 0x1e2e: 0xc691, 0x1e2f: 0xc6b1, - 0x1e30: 0xc6d1, 0x1e31: 0xc6f1, 0x1e32: 0xc711, 0x1e33: 0xc731, 0x1e34: 0xc751, 0x1e35: 0xc771, - 0x1e36: 0xc791, 0x1e37: 0xc7b1, 0x1e38: 0xc7d1, 0x1e39: 0xc7f1, 0x1e3a: 0xc811, 0x1e3b: 0xc831, - 0x1e3c: 0x0040, 0x1e3d: 0x0040, 0x1e3e: 0x0040, 0x1e3f: 0x0040, + 0x1e00: 0x2811, 0x1e01: 0x2819, 0x1e02: 0x2821, 0x1e03: 0x2829, 0x1e04: 0x2831, 0x1e05: 0x2839, + 0x1e06: 0x2839, 0x1e07: 0x2841, 0x1e08: 0x2849, 0x1e09: 0x2851, 0x1e0a: 0x2859, 0x1e0b: 0x2861, + 0x1e0c: 0x2869, 0x1e0d: 0x2871, 0x1e0e: 0x2879, 0x1e0f: 0x2881, 0x1e10: 0x2889, 0x1e11: 0x2891, + 0x1e12: 0x2899, 0x1e13: 0x28a1, 0x1e14: 0x28a9, 0x1e15: 0x28b1, 0x1e16: 0x28b9, 0x1e17: 0x28c1, + 0x1e18: 0x28c9, 0x1e19: 0x8c35, 0x1e1a: 0x28d1, 0x1e1b: 0x28d9, 0x1e1c: 0x28e1, 0x1e1d: 0x24d9, + 0x1e1e: 0x28e9, 0x1e1f: 0x28f1, 0x1e20: 0x8c55, 0x1e21: 0x8c75, 0x1e22: 0x28f9, 0x1e23: 0x2901, + 0x1e24: 0x2909, 0x1e25: 0x2911, 0x1e26: 0x2919, 0x1e27: 0x2921, 0x1e28: 0x2040, 0x1e29: 0x2929, + 0x1e2a: 0x2931, 0x1e2b: 0x2931, 0x1e2c: 0x8c95, 0x1e2d: 0x2939, 0x1e2e: 0x2941, 0x1e2f: 0x2949, + 0x1e30: 0x2951, 0x1e31: 0x8cb5, 0x1e32: 0x2959, 0x1e33: 0x2961, 0x1e34: 0x2040, 0x1e35: 0x2969, + 0x1e36: 0x2971, 0x1e37: 0x2979, 0x1e38: 0x2981, 0x1e39: 0x2989, 0x1e3a: 0x2991, 0x1e3b: 0x8cd5, + 0x1e3c: 0x2999, 0x1e3d: 0x8cf5, 0x1e3e: 0x29a1, 0x1e3f: 0x29a9, // Block 0x79, offset 0x1e40 - 0x1e40: 0xcb61, 0x1e41: 0xcb81, 0x1e42: 0xcba1, 0x1e43: 0x8b55, 0x1e44: 0xcbc1, 0x1e45: 0xcbe1, - 0x1e46: 0xcc01, 0x1e47: 0xcc21, 0x1e48: 0xcc41, 0x1e49: 0xcc61, 0x1e4a: 0xcc81, 0x1e4b: 0xcca1, - 0x1e4c: 0xccc1, 0x1e4d: 0x8b75, 0x1e4e: 0xcce1, 0x1e4f: 0xcd01, 0x1e50: 0xcd21, 0x1e51: 0xcd41, - 0x1e52: 0x8b95, 0x1e53: 0xcd61, 0x1e54: 0xcd81, 0x1e55: 0xc491, 0x1e56: 0x8bb5, 0x1e57: 0xcda1, - 0x1e58: 0xcdc1, 0x1e59: 0xcde1, 0x1e5a: 0xce01, 0x1e5b: 0xce21, 0x1e5c: 0x8bd5, 0x1e5d: 0xce41, - 0x1e5e: 0xce61, 0x1e5f: 0xce81, 0x1e60: 0xcea1, 0x1e61: 0xcec1, 0x1e62: 0xc7f1, 0x1e63: 0xcee1, - 0x1e64: 0xcf01, 0x1e65: 0xcf21, 0x1e66: 0xcf41, 0x1e67: 0xcf61, 0x1e68: 0xcf81, 0x1e69: 0xcfa1, - 0x1e6a: 0xcfc1, 0x1e6b: 0xcfe1, 0x1e6c: 0xd001, 0x1e6d: 0xd021, 0x1e6e: 0xd041, 0x1e6f: 0xd061, - 0x1e70: 0xd081, 0x1e71: 0xd0a1, 0x1e72: 0xd0a1, 0x1e73: 0xd0a1, 0x1e74: 0x8bf5, 0x1e75: 0xd0c1, - 0x1e76: 0xd0e1, 0x1e77: 0xd101, 0x1e78: 0x8c15, 0x1e79: 0xd121, 0x1e7a: 0xd141, 0x1e7b: 0xd161, - 0x1e7c: 0xd181, 0x1e7d: 0xd1a1, 0x1e7e: 0xd1c1, 0x1e7f: 0xd1e1, + 0x1e40: 0x29b1, 0x1e41: 0x29b9, 0x1e42: 0x29c1, 0x1e43: 0x29c9, 0x1e44: 0x29d1, 0x1e45: 0x29d9, + 0x1e46: 0x29e1, 0x1e47: 0x29e9, 0x1e48: 0x29f1, 0x1e49: 0x8d15, 0x1e4a: 0x29f9, 0x1e4b: 0x2a01, + 0x1e4c: 0x2a09, 0x1e4d: 0x2a11, 0x1e4e: 0x2a19, 0x1e4f: 0x8d35, 0x1e50: 0x2a21, 0x1e51: 0x8d55, + 0x1e52: 0x8d75, 0x1e53: 0x2a29, 0x1e54: 0x2a31, 0x1e55: 0x2a31, 0x1e56: 0x2a39, 0x1e57: 0x8d95, + 0x1e58: 0x8db5, 0x1e59: 0x2a41, 0x1e5a: 0x2a49, 0x1e5b: 0x2a51, 0x1e5c: 0x2a59, 0x1e5d: 0x2a61, + 0x1e5e: 0x2a69, 0x1e5f: 0x2a71, 0x1e60: 0x2a79, 0x1e61: 0x2a81, 0x1e62: 0x2a89, 0x1e63: 0x2a91, + 0x1e64: 0x8dd5, 0x1e65: 0x2a99, 0x1e66: 0x2aa1, 0x1e67: 0x2aa9, 0x1e68: 0x2ab1, 0x1e69: 0x2aa9, + 0x1e6a: 0x2ab9, 0x1e6b: 0x2ac1, 0x1e6c: 0x2ac9, 0x1e6d: 0x2ad1, 0x1e6e: 0x2ad9, 0x1e6f: 0x2ae1, + 0x1e70: 0x2ae9, 0x1e71: 0x2af1, 0x1e72: 0x2af9, 0x1e73: 0x2b01, 0x1e74: 0x2b09, 0x1e75: 0x2b11, + 0x1e76: 0x2b19, 0x1e77: 0x2b21, 0x1e78: 0x8df5, 0x1e79: 0x2b29, 0x1e7a: 0x2b31, 0x1e7b: 0x2b39, + 0x1e7c: 0x2b41, 0x1e7d: 0x2b49, 0x1e7e: 0x8e15, 0x1e7f: 0x2b51, // Block 0x7a, offset 0x1e80 - 0x1e80: 0xd201, 0x1e81: 0xd221, 0x1e82: 0xd241, 0x1e83: 0xd261, 0x1e84: 0xd281, 0x1e85: 0xd2a1, - 0x1e86: 0xd2a1, 0x1e87: 0xd2c1, 0x1e88: 0xd2e1, 0x1e89: 0xd301, 0x1e8a: 0xd321, 0x1e8b: 0xd341, - 0x1e8c: 0xd361, 0x1e8d: 0xd381, 0x1e8e: 0xd3a1, 0x1e8f: 0xd3c1, 0x1e90: 0xd3e1, 0x1e91: 0xd401, - 0x1e92: 0xd421, 0x1e93: 0xd441, 0x1e94: 0xd461, 0x1e95: 0xd481, 0x1e96: 0xd4a1, 0x1e97: 0xd4c1, - 0x1e98: 0xd4e1, 0x1e99: 0x8c35, 0x1e9a: 0xd501, 0x1e9b: 0xd521, 0x1e9c: 0xd541, 0x1e9d: 0xc371, - 0x1e9e: 0xd561, 0x1e9f: 0xd581, 0x1ea0: 0x8c55, 0x1ea1: 0x8c75, 0x1ea2: 0xd5a1, 0x1ea3: 0xd5c1, - 0x1ea4: 0xd5e1, 0x1ea5: 0xd601, 0x1ea6: 0xd621, 0x1ea7: 0xd641, 0x1ea8: 0x2040, 0x1ea9: 0xd661, - 0x1eaa: 0xd681, 0x1eab: 0xd681, 0x1eac: 0x8c95, 0x1ead: 0xd6a1, 0x1eae: 0xd6c1, 0x1eaf: 0xd6e1, - 0x1eb0: 0xd701, 0x1eb1: 0x8cb5, 0x1eb2: 0xd721, 0x1eb3: 0xd741, 0x1eb4: 0x2040, 0x1eb5: 0xd761, - 0x1eb6: 0xd781, 0x1eb7: 0xd7a1, 0x1eb8: 0xd7c1, 0x1eb9: 0xd7e1, 0x1eba: 0xd801, 0x1ebb: 0x8cd5, - 0x1ebc: 0xd821, 0x1ebd: 0x8cf5, 0x1ebe: 0xd841, 0x1ebf: 0xd861, + 0x1e80: 0x2b59, 0x1e81: 0x2b61, 0x1e82: 0x2b69, 0x1e83: 0x2b71, 0x1e84: 0x2b79, 0x1e85: 0x2b81, + 0x1e86: 0x2b89, 0x1e87: 0x2b91, 0x1e88: 0x2b99, 0x1e89: 0x2ba1, 0x1e8a: 0x8e35, 0x1e8b: 0x2ba9, + 0x1e8c: 0x2bb1, 0x1e8d: 0x2bb9, 0x1e8e: 0x2bc1, 0x1e8f: 0x2bc9, 0x1e90: 0x2bd1, 0x1e91: 0x2bd9, + 0x1e92: 0x2be1, 0x1e93: 0x2be9, 0x1e94: 0x2bf1, 0x1e95: 0x2bf9, 0x1e96: 0x2c01, 0x1e97: 0x2c09, + 0x1e98: 0x2c11, 0x1e99: 0x2c19, 0x1e9a: 0x2c21, 0x1e9b: 0x2c29, 0x1e9c: 0x2c31, 0x1e9d: 0x8e55, + 0x1e9e: 0x2c39, 0x1e9f: 0x2c41, 0x1ea0: 0x2c49, 0x1ea1: 0x2c51, 0x1ea2: 0x2c59, 0x1ea3: 0x8e75, + 0x1ea4: 0x2c61, 0x1ea5: 0x2c69, 0x1ea6: 0x2c71, 0x1ea7: 0x2c79, 0x1ea8: 0x2c81, 0x1ea9: 0x2c89, + 0x1eaa: 0x2c91, 0x1eab: 0x2c99, 0x1eac: 0x7f0d, 0x1ead: 0x2ca1, 0x1eae: 0x2ca9, 0x1eaf: 0x2cb1, + 0x1eb0: 0x8e95, 0x1eb1: 0x2cb9, 0x1eb2: 0x2cc1, 0x1eb3: 0x2cc9, 0x1eb4: 0x2cd1, 0x1eb5: 0x2cd9, + 0x1eb6: 0x2ce1, 0x1eb7: 0x8eb5, 0x1eb8: 0x8ed5, 0x1eb9: 0x8ef5, 0x1eba: 0x2ce9, 0x1ebb: 0x8f15, + 0x1ebc: 0x2cf1, 0x1ebd: 0x2cf9, 0x1ebe: 0x2d01, 0x1ebf: 0x2d09, // Block 0x7b, offset 0x1ec0 - 0x1ec0: 0xd881, 0x1ec1: 0xd8a1, 0x1ec2: 0xd8c1, 0x1ec3: 0xd8e1, 0x1ec4: 0xd901, 0x1ec5: 0xd921, - 0x1ec6: 0xd941, 0x1ec7: 0xd961, 0x1ec8: 0xd981, 0x1ec9: 0x8d15, 0x1eca: 0xd9a1, 0x1ecb: 0xd9c1, - 0x1ecc: 0xd9e1, 0x1ecd: 0xda01, 0x1ece: 0xda21, 0x1ecf: 0x8d35, 0x1ed0: 0xda41, 0x1ed1: 0x8d55, - 0x1ed2: 0x8d75, 0x1ed3: 0xda61, 0x1ed4: 0xda81, 0x1ed5: 0xda81, 0x1ed6: 0xdaa1, 0x1ed7: 0x8d95, - 0x1ed8: 0x8db5, 0x1ed9: 0xdac1, 0x1eda: 0xdae1, 0x1edb: 0xdb01, 0x1edc: 0xdb21, 0x1edd: 0xdb41, - 0x1ede: 0xdb61, 0x1edf: 0xdb81, 0x1ee0: 0xdba1, 0x1ee1: 0xdbc1, 0x1ee2: 0xdbe1, 0x1ee3: 0xdc01, - 0x1ee4: 0x8dd5, 0x1ee5: 0xdc21, 0x1ee6: 0xdc41, 0x1ee7: 0xdc61, 0x1ee8: 0xdc81, 0x1ee9: 0xdc61, - 0x1eea: 0xdca1, 0x1eeb: 0xdcc1, 0x1eec: 0xdce1, 0x1eed: 0xdd01, 0x1eee: 0xdd21, 0x1eef: 0xdd41, - 0x1ef0: 0xdd61, 0x1ef1: 0xdd81, 0x1ef2: 0xdda1, 0x1ef3: 0xddc1, 0x1ef4: 0xdde1, 0x1ef5: 0xde01, - 0x1ef6: 0xde21, 0x1ef7: 0xde41, 0x1ef8: 0x8df5, 0x1ef9: 0xde61, 0x1efa: 0xde81, 0x1efb: 0xdea1, - 0x1efc: 0xdec1, 0x1efd: 0xdee1, 0x1efe: 0x8e15, 0x1eff: 0xdf01, + 0x1ec0: 0x2d11, 0x1ec1: 0x2d19, 0x1ec2: 0x2d21, 0x1ec3: 0x2d29, 0x1ec4: 0x2d31, 0x1ec5: 0x2d39, + 0x1ec6: 0x8f35, 0x1ec7: 0x2d41, 0x1ec8: 0x2d49, 0x1ec9: 0x2d51, 0x1eca: 0x2d59, 0x1ecb: 0x2d61, + 0x1ecc: 0x2d69, 0x1ecd: 0x8f55, 0x1ece: 0x2d71, 0x1ecf: 0x2d79, 0x1ed0: 0x8f75, 0x1ed1: 0x8f95, + 0x1ed2: 0x2d81, 0x1ed3: 0x2d89, 0x1ed4: 0x2d91, 0x1ed5: 0x2d99, 0x1ed6: 0x2da1, 0x1ed7: 0x2da9, + 0x1ed8: 0x2db1, 0x1ed9: 0x2db9, 0x1eda: 0x2dc1, 0x1edb: 0x8fb5, 0x1edc: 0x2dc9, 0x1edd: 0x8fd5, + 0x1ede: 0x2dd1, 0x1edf: 0x2040, 0x1ee0: 0x2dd9, 0x1ee1: 0x2de1, 0x1ee2: 0x2de9, 0x1ee3: 0x8ff5, + 0x1ee4: 0x2df1, 0x1ee5: 0x2df9, 0x1ee6: 0x9015, 0x1ee7: 0x9035, 0x1ee8: 0x2e01, 0x1ee9: 0x2e09, + 0x1eea: 0x2e11, 0x1eeb: 0x2e19, 0x1eec: 0x2e21, 0x1eed: 0x2e21, 0x1eee: 0x2e29, 0x1eef: 0x2e31, + 0x1ef0: 0x2e39, 0x1ef1: 0x2e41, 0x1ef2: 0x2e49, 0x1ef3: 0x2e51, 0x1ef4: 0x2e59, 0x1ef5: 0x9055, + 0x1ef6: 0x2e61, 0x1ef7: 0x9075, 0x1ef8: 0x2e69, 0x1ef9: 0x9095, 0x1efa: 0x2e71, 0x1efb: 0x90b5, + 0x1efc: 0x90d5, 0x1efd: 0x90f5, 0x1efe: 0x2e79, 0x1eff: 0x2e81, // Block 0x7c, offset 0x1f00 - 0x1f00: 0xe601, 0x1f01: 0xe621, 0x1f02: 0xe641, 0x1f03: 0xe661, 0x1f04: 0xe681, 0x1f05: 0xe6a1, - 0x1f06: 0x8f35, 0x1f07: 0xe6c1, 0x1f08: 0xe6e1, 0x1f09: 0xe701, 0x1f0a: 0xe721, 0x1f0b: 0xe741, - 0x1f0c: 0xe761, 0x1f0d: 0x8f55, 0x1f0e: 0xe781, 0x1f0f: 0xe7a1, 0x1f10: 0x8f75, 0x1f11: 0x8f95, - 0x1f12: 0xe7c1, 0x1f13: 0xe7e1, 0x1f14: 0xe801, 0x1f15: 0xe821, 0x1f16: 0xe841, 0x1f17: 0xe861, - 0x1f18: 0xe881, 0x1f19: 0xe8a1, 0x1f1a: 0xe8c1, 0x1f1b: 0x8fb5, 0x1f1c: 0xe8e1, 0x1f1d: 0x8fd5, - 0x1f1e: 0xe901, 0x1f1f: 0x2040, 0x1f20: 0xe921, 0x1f21: 0xe941, 0x1f22: 0xe961, 0x1f23: 0x8ff5, - 0x1f24: 0xe981, 0x1f25: 0xe9a1, 0x1f26: 0x9015, 0x1f27: 0x9035, 0x1f28: 0xe9c1, 0x1f29: 0xe9e1, - 0x1f2a: 0xea01, 0x1f2b: 0xea21, 0x1f2c: 0xea41, 0x1f2d: 0xea41, 0x1f2e: 0xea61, 0x1f2f: 0xea81, - 0x1f30: 0xeaa1, 0x1f31: 0xeac1, 0x1f32: 0xeae1, 0x1f33: 0xeb01, 0x1f34: 0xeb21, 0x1f35: 0x9055, - 0x1f36: 0xeb41, 0x1f37: 0x9075, 0x1f38: 0xeb61, 0x1f39: 0x9095, 0x1f3a: 0xeb81, 0x1f3b: 0x90b5, - 0x1f3c: 0x90d5, 0x1f3d: 0x90f5, 0x1f3e: 0xeba1, 0x1f3f: 0xebc1, + 0x1f00: 0x2e89, 0x1f01: 0x9115, 0x1f02: 0x9135, 0x1f03: 0x9155, 0x1f04: 0x9175, 0x1f05: 0x2e91, + 0x1f06: 0x2e99, 0x1f07: 0x2e99, 0x1f08: 0x2ea1, 0x1f09: 0x2ea9, 0x1f0a: 0x2eb1, 0x1f0b: 0x2eb9, + 0x1f0c: 0x2ec1, 0x1f0d: 0x9195, 0x1f0e: 0x2ec9, 0x1f0f: 0x2ed1, 0x1f10: 0x2ed9, 0x1f11: 0x2ee1, + 0x1f12: 0x91b5, 0x1f13: 0x2ee9, 0x1f14: 0x91d5, 0x1f15: 0x91f5, 0x1f16: 0x2ef1, 0x1f17: 0x2ef9, + 0x1f18: 0x2f01, 0x1f19: 0x2f09, 0x1f1a: 0x2f11, 0x1f1b: 0x2f19, 0x1f1c: 0x9215, 0x1f1d: 0x9235, + 0x1f1e: 0x9255, 0x1f1f: 0x2040, 0x1f20: 0x2f21, 0x1f21: 0x9275, 0x1f22: 0x2f29, 0x1f23: 0x2f31, + 0x1f24: 0x2f39, 0x1f25: 0x9295, 0x1f26: 0x2f41, 0x1f27: 0x2f49, 0x1f28: 0x2f51, 0x1f29: 0x2f59, + 0x1f2a: 0x2f61, 0x1f2b: 0x92b5, 0x1f2c: 0x2f69, 0x1f2d: 0x2f71, 0x1f2e: 0x2f79, 0x1f2f: 0x2f81, + 0x1f30: 0x2f89, 0x1f31: 0x2f91, 0x1f32: 0x92d5, 0x1f33: 0x92f5, 0x1f34: 0x2f99, 0x1f35: 0x9315, + 0x1f36: 0x2fa1, 0x1f37: 0x9335, 0x1f38: 0x2fa9, 0x1f39: 0x2fb1, 0x1f3a: 0x2fb9, 0x1f3b: 0x9355, + 0x1f3c: 0x9375, 0x1f3d: 0x2fc1, 0x1f3e: 0x9395, 0x1f3f: 0x2fc9, // Block 0x7d, offset 0x1f40 - 0x1f40: 0xebe1, 0x1f41: 0x9115, 0x1f42: 0x9135, 0x1f43: 0x9155, 0x1f44: 0x9175, 0x1f45: 0xec01, - 0x1f46: 0xec21, 0x1f47: 0xec21, 0x1f48: 0xec41, 0x1f49: 0xec61, 0x1f4a: 0xec81, 0x1f4b: 0xeca1, - 0x1f4c: 0xecc1, 0x1f4d: 0x9195, 0x1f4e: 0xece1, 0x1f4f: 0xed01, 0x1f50: 0xed21, 0x1f51: 0xed41, - 0x1f52: 0x91b5, 0x1f53: 0xed61, 0x1f54: 0x91d5, 0x1f55: 0x91f5, 0x1f56: 0xed81, 0x1f57: 0xeda1, - 0x1f58: 0xedc1, 0x1f59: 0xede1, 0x1f5a: 0xee01, 0x1f5b: 0xee21, 0x1f5c: 0x9215, 0x1f5d: 0x9235, - 0x1f5e: 0x9255, 0x1f5f: 0x2040, 0x1f60: 0xee41, 0x1f61: 0x9275, 0x1f62: 0xee61, 0x1f63: 0xee81, - 0x1f64: 0xeea1, 0x1f65: 0x9295, 0x1f66: 0xeec1, 0x1f67: 0xeee1, 0x1f68: 0xef01, 0x1f69: 0xef21, - 0x1f6a: 0xef41, 0x1f6b: 0x92b5, 0x1f6c: 0xef61, 0x1f6d: 0xef81, 0x1f6e: 0xefa1, 0x1f6f: 0xefc1, - 0x1f70: 0xefe1, 0x1f71: 0xf001, 0x1f72: 0x92d5, 0x1f73: 0x92f5, 0x1f74: 0xf021, 0x1f75: 0x9315, - 0x1f76: 0xf041, 0x1f77: 0x9335, 0x1f78: 0xf061, 0x1f79: 0xf081, 0x1f7a: 0xf0a1, 0x1f7b: 0x9355, - 0x1f7c: 0x9375, 0x1f7d: 0xf0c1, 0x1f7e: 0x9395, 0x1f7f: 0xf0e1, + 0x1f40: 0x93b5, 0x1f41: 0x2fd1, 0x1f42: 0x2fd9, 0x1f43: 0x2fe1, 0x1f44: 0x2fe9, 0x1f45: 0x2ff1, + 0x1f46: 0x2ff9, 0x1f47: 0x93d5, 0x1f48: 0x93f5, 0x1f49: 0x9415, 0x1f4a: 0x9435, 0x1f4b: 0x2a29, + 0x1f4c: 0x3001, 0x1f4d: 0x3009, 0x1f4e: 0x3011, 0x1f4f: 0x3019, 0x1f50: 0x3021, 0x1f51: 0x3029, + 0x1f52: 0x3031, 0x1f53: 0x3039, 0x1f54: 0x3041, 0x1f55: 0x3049, 0x1f56: 0x3051, 0x1f57: 0x9455, + 0x1f58: 0x3059, 0x1f59: 0x3061, 0x1f5a: 0x3069, 0x1f5b: 0x3071, 0x1f5c: 0x3079, 0x1f5d: 0x3081, + 0x1f5e: 0x3089, 0x1f5f: 0x3091, 0x1f60: 0x3099, 0x1f61: 0x30a1, 0x1f62: 0x30a9, 0x1f63: 0x30b1, + 0x1f64: 0x9475, 0x1f65: 0x9495, 0x1f66: 0x94b5, 0x1f67: 0x30b9, 0x1f68: 0x30c1, 0x1f69: 0x30c9, + 0x1f6a: 0x30d1, 0x1f6b: 0x94d5, 0x1f6c: 0x30d9, 0x1f6d: 0x94f5, 0x1f6e: 0x30e1, 0x1f6f: 0x30e9, + 0x1f70: 0x9515, 0x1f71: 0x9535, 0x1f72: 0x30f1, 0x1f73: 0x30f9, 0x1f74: 0x3101, 0x1f75: 0x3109, + 0x1f76: 0x3111, 0x1f77: 0x3119, 0x1f78: 0x3121, 0x1f79: 0x3129, 0x1f7a: 0x3131, 0x1f7b: 0x3139, + 0x1f7c: 0x3141, 0x1f7d: 0x3149, 0x1f7e: 0x3151, 0x1f7f: 0x2040, // Block 0x7e, offset 0x1f80 - 0x1f80: 0xf721, 0x1f81: 0xf741, 0x1f82: 0xf761, 0x1f83: 0xf781, 0x1f84: 0xf7a1, 0x1f85: 0x9555, - 0x1f86: 0xf7c1, 0x1f87: 0xf7e1, 0x1f88: 0xf801, 0x1f89: 0xf821, 0x1f8a: 0xf841, 0x1f8b: 0x9575, - 0x1f8c: 0x9595, 0x1f8d: 0xf861, 0x1f8e: 0xf881, 0x1f8f: 0xf8a1, 0x1f90: 0xf8c1, 0x1f91: 0xf8e1, - 0x1f92: 0xf901, 0x1f93: 0x95b5, 0x1f94: 0xf921, 0x1f95: 0xf941, 0x1f96: 0xf961, 0x1f97: 0xf981, - 0x1f98: 0x95d5, 0x1f99: 0x95f5, 0x1f9a: 0xf9a1, 0x1f9b: 0xf9c1, 0x1f9c: 0xf9e1, 0x1f9d: 0x9615, - 0x1f9e: 0xfa01, 0x1f9f: 0xfa21, 0x1fa0: 0x684d, 0x1fa1: 0x9635, 0x1fa2: 0xfa41, 0x1fa3: 0xfa61, - 0x1fa4: 0xfa81, 0x1fa5: 0x9655, 0x1fa6: 0xfaa1, 0x1fa7: 0xfac1, 0x1fa8: 0xfae1, 0x1fa9: 0xfb01, - 0x1faa: 0xfb21, 0x1fab: 0xfb41, 0x1fac: 0xfb61, 0x1fad: 0x9675, 0x1fae: 0xfb81, 0x1faf: 0xfba1, - 0x1fb0: 0xfbc1, 0x1fb1: 0x9695, 0x1fb2: 0xfbe1, 0x1fb3: 0xfc01, 0x1fb4: 0xfc21, 0x1fb5: 0xfc41, - 0x1fb6: 0x7b6d, 0x1fb7: 0x96b5, 0x1fb8: 0xfc61, 0x1fb9: 0xfc81, 0x1fba: 0xfca1, 0x1fbb: 0x96d5, - 0x1fbc: 0xfcc1, 0x1fbd: 0x96f5, 0x1fbe: 0xfce1, 0x1fbf: 0xfce1, + 0x1f80: 0x3159, 0x1f81: 0x3161, 0x1f82: 0x3169, 0x1f83: 0x3171, 0x1f84: 0x3179, 0x1f85: 0x9555, + 0x1f86: 0x3181, 0x1f87: 0x3189, 0x1f88: 0x3191, 0x1f89: 0x3199, 0x1f8a: 0x31a1, 0x1f8b: 0x9575, + 0x1f8c: 0x9595, 0x1f8d: 0x31a9, 0x1f8e: 0x31b1, 0x1f8f: 0x31b9, 0x1f90: 0x31c1, 0x1f91: 0x31c9, + 0x1f92: 0x31d1, 0x1f93: 0x95b5, 0x1f94: 0x31d9, 0x1f95: 0x31e1, 0x1f96: 0x31e9, 0x1f97: 0x31f1, + 0x1f98: 0x95d5, 0x1f99: 0x95f5, 0x1f9a: 0x31f9, 0x1f9b: 0x3201, 0x1f9c: 0x3209, 0x1f9d: 0x9615, + 0x1f9e: 0x3211, 0x1f9f: 0x3219, 0x1fa0: 0x684d, 0x1fa1: 0x9635, 0x1fa2: 0x3221, 0x1fa3: 0x3229, + 0x1fa4: 0x3231, 0x1fa5: 0x9655, 0x1fa6: 0x3239, 0x1fa7: 0x3241, 0x1fa8: 0x3249, 0x1fa9: 0x3251, + 0x1faa: 0x3259, 0x1fab: 0x3261, 0x1fac: 0x3269, 0x1fad: 0x9675, 0x1fae: 0x3271, 0x1faf: 0x3279, + 0x1fb0: 0x3281, 0x1fb1: 0x9695, 0x1fb2: 0x3289, 0x1fb3: 0x3291, 0x1fb4: 0x3299, 0x1fb5: 0x32a1, + 0x1fb6: 0x7b6d, 0x1fb7: 0x96b5, 0x1fb8: 0x32a9, 0x1fb9: 0x32b1, 0x1fba: 0x32b9, 0x1fbb: 0x96d5, + 0x1fbc: 0x32c1, 0x1fbd: 0x96f5, 0x1fbe: 0x32c9, 0x1fbf: 0x32c9, // Block 0x7f, offset 0x1fc0 - 0x1fc0: 0xfd01, 0x1fc1: 0x9715, 0x1fc2: 0xfd21, 0x1fc3: 0xfd41, 0x1fc4: 0xfd61, 0x1fc5: 0xfd81, - 0x1fc6: 0xfda1, 0x1fc7: 0xfdc1, 0x1fc8: 0xfde1, 0x1fc9: 0x9735, 0x1fca: 0xfe01, 0x1fcb: 0xfe21, - 0x1fcc: 0xfe41, 0x1fcd: 0xfe61, 0x1fce: 0xfe81, 0x1fcf: 0xfea1, 0x1fd0: 0x9755, 0x1fd1: 0xfec1, - 0x1fd2: 0x9775, 0x1fd3: 0x9795, 0x1fd4: 0x97b5, 0x1fd5: 0xfee1, 0x1fd6: 0xff01, 0x1fd7: 0xff21, - 0x1fd8: 0xff41, 0x1fd9: 0xff61, 0x1fda: 0xff81, 0x1fdb: 0xffa1, 0x1fdc: 0xffc1, 0x1fdd: 0x97d5, + 0x1fc0: 0x32d1, 0x1fc1: 0x9715, 0x1fc2: 0x32d9, 0x1fc3: 0x32e1, 0x1fc4: 0x32e9, 0x1fc5: 0x32f1, + 0x1fc6: 0x32f9, 0x1fc7: 0x3301, 0x1fc8: 0x3309, 0x1fc9: 0x9735, 0x1fca: 0x3311, 0x1fcb: 0x3319, + 0x1fcc: 0x3321, 0x1fcd: 0x3329, 0x1fce: 0x3331, 0x1fcf: 0x3339, 0x1fd0: 0x9755, 0x1fd1: 0x3341, + 0x1fd2: 0x9775, 0x1fd3: 0x9795, 0x1fd4: 0x97b5, 0x1fd5: 0x3349, 0x1fd6: 0x3351, 0x1fd7: 0x3359, + 0x1fd8: 0x3361, 0x1fd9: 0x3369, 0x1fda: 0x3371, 0x1fdb: 0x3379, 0x1fdc: 0x3381, 0x1fdd: 0x97d5, 0x1fde: 0x0040, 0x1fdf: 0x0040, 0x1fe0: 0x0040, 0x1fe1: 0x0040, 0x1fe2: 0x0040, 0x1fe3: 0x0040, 0x1fe4: 0x0040, 0x1fe5: 0x0040, 0x1fe6: 0x0040, 0x1fe7: 0x0040, 0x1fe8: 0x0040, 0x1fe9: 0x0040, 0x1fea: 0x0040, 0x1feb: 0x0040, 0x1fec: 0x0040, 0x1fed: 0x0040, 0x1fee: 0x0040, 0x1fef: 0x0040, @@ -2134,7 +2277,7 @@ var idnaIndex = [2368]uint16{ 0x1b8: 0xd6, 0x1b9: 0xd7, 0x1ba: 0xd8, 0x1bb: 0xd9, 0x1bc: 0xda, 0x1bd: 0xdb, 0x1be: 0xdc, 0x1bf: 0x37, // Block 0x7, offset 0x1c0 0x1c0: 0x38, 0x1c1: 0xdd, 0x1c2: 0xde, 0x1c3: 0xdf, 0x1c4: 0xe0, 0x1c5: 0x39, 0x1c6: 0x3a, 0x1c7: 0xe1, - 0x1c8: 0xe2, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0x3e, 0x1cd: 0x3f, 0x1ce: 0x40, 0x1cf: 0x41, + 0x1c8: 0xe2, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0xe3, 0x1cd: 0xe4, 0x1ce: 0x3e, 0x1cf: 0x3f, 0x1d0: 0xa0, 0x1d1: 0xa0, 0x1d2: 0xa0, 0x1d3: 0xa0, 0x1d4: 0xa0, 0x1d5: 0xa0, 0x1d6: 0xa0, 0x1d7: 0xa0, 0x1d8: 0xa0, 0x1d9: 0xa0, 0x1da: 0xa0, 0x1db: 0xa0, 0x1dc: 0xa0, 0x1dd: 0xa0, 0x1de: 0xa0, 0x1df: 0xa0, 0x1e0: 0xa0, 0x1e1: 0xa0, 0x1e2: 0xa0, 0x1e3: 0xa0, 0x1e4: 0xa0, 0x1e5: 0xa0, 0x1e6: 0xa0, 0x1e7: 0xa0, @@ -2167,143 +2310,143 @@ var idnaIndex = [2368]uint16{ 0x2a0: 0xa0, 0x2a1: 0xa0, 0x2a2: 0xa0, 0x2a3: 0xa0, 0x2a4: 0xa0, 0x2a5: 0xa0, 0x2a6: 0xa0, 0x2a7: 0xa0, 0x2a8: 0xa0, 0x2a9: 0xa0, 0x2aa: 0xa0, 0x2ab: 0xa0, 0x2ac: 0xa0, 0x2ad: 0xa0, 0x2ae: 0xa0, 0x2af: 0xa0, 0x2b0: 0xa0, 0x2b1: 0xa0, 0x2b2: 0xa0, 0x2b3: 0xa0, 0x2b4: 0xa0, 0x2b5: 0xa0, 0x2b6: 0xa0, 0x2b7: 0xa0, - 0x2b8: 0xa0, 0x2b9: 0xa0, 0x2ba: 0xa0, 0x2bb: 0xa0, 0x2bc: 0xa0, 0x2bd: 0xa0, 0x2be: 0xa0, 0x2bf: 0xe3, + 0x2b8: 0xa0, 0x2b9: 0xa0, 0x2ba: 0xa0, 0x2bb: 0xa0, 0x2bc: 0xa0, 0x2bd: 0xa0, 0x2be: 0xa0, 0x2bf: 0xe5, // Block 0xb, offset 0x2c0 0x2c0: 0xa0, 0x2c1: 0xa0, 0x2c2: 0xa0, 0x2c3: 0xa0, 0x2c4: 0xa0, 0x2c5: 0xa0, 0x2c6: 0xa0, 0x2c7: 0xa0, 0x2c8: 0xa0, 0x2c9: 0xa0, 0x2ca: 0xa0, 0x2cb: 0xa0, 0x2cc: 0xa0, 0x2cd: 0xa0, 0x2ce: 0xa0, 0x2cf: 0xa0, - 0x2d0: 0xa0, 0x2d1: 0xa0, 0x2d2: 0xe4, 0x2d3: 0xe5, 0x2d4: 0xa0, 0x2d5: 0xa0, 0x2d6: 0xa0, 0x2d7: 0xa0, - 0x2d8: 0xe6, 0x2d9: 0x42, 0x2da: 0x43, 0x2db: 0xe7, 0x2dc: 0x44, 0x2dd: 0x45, 0x2de: 0x46, 0x2df: 0xe8, - 0x2e0: 0xe9, 0x2e1: 0xea, 0x2e2: 0xeb, 0x2e3: 0xec, 0x2e4: 0xed, 0x2e5: 0xee, 0x2e6: 0xef, 0x2e7: 0xf0, - 0x2e8: 0xf1, 0x2e9: 0xf2, 0x2ea: 0xf3, 0x2eb: 0xf4, 0x2ec: 0xf5, 0x2ed: 0xf6, 0x2ee: 0xf7, 0x2ef: 0xf8, + 0x2d0: 0xa0, 0x2d1: 0xa0, 0x2d2: 0xe6, 0x2d3: 0xe7, 0x2d4: 0xa0, 0x2d5: 0xa0, 0x2d6: 0xa0, 0x2d7: 0xa0, + 0x2d8: 0xe8, 0x2d9: 0x40, 0x2da: 0x41, 0x2db: 0xe9, 0x2dc: 0x42, 0x2dd: 0x43, 0x2de: 0x44, 0x2df: 0xea, + 0x2e0: 0xeb, 0x2e1: 0xec, 0x2e2: 0xed, 0x2e3: 0xee, 0x2e4: 0xef, 0x2e5: 0xf0, 0x2e6: 0xf1, 0x2e7: 0xf2, + 0x2e8: 0xf3, 0x2e9: 0xf4, 0x2ea: 0xf5, 0x2eb: 0xf6, 0x2ec: 0xf7, 0x2ed: 0xf8, 0x2ee: 0xf9, 0x2ef: 0xfa, 0x2f0: 0xa0, 0x2f1: 0xa0, 0x2f2: 0xa0, 0x2f3: 0xa0, 0x2f4: 0xa0, 0x2f5: 0xa0, 0x2f6: 0xa0, 0x2f7: 0xa0, 0x2f8: 0xa0, 0x2f9: 0xa0, 0x2fa: 0xa0, 0x2fb: 0xa0, 0x2fc: 0xa0, 0x2fd: 0xa0, 0x2fe: 0xa0, 0x2ff: 0xa0, // Block 0xc, offset 0x300 0x300: 0xa0, 0x301: 0xa0, 0x302: 0xa0, 0x303: 0xa0, 0x304: 0xa0, 0x305: 0xa0, 0x306: 0xa0, 0x307: 0xa0, 0x308: 0xa0, 0x309: 0xa0, 0x30a: 0xa0, 0x30b: 0xa0, 0x30c: 0xa0, 0x30d: 0xa0, 0x30e: 0xa0, 0x30f: 0xa0, 0x310: 0xa0, 0x311: 0xa0, 0x312: 0xa0, 0x313: 0xa0, 0x314: 0xa0, 0x315: 0xa0, 0x316: 0xa0, 0x317: 0xa0, - 0x318: 0xa0, 0x319: 0xa0, 0x31a: 0xa0, 0x31b: 0xa0, 0x31c: 0xa0, 0x31d: 0xa0, 0x31e: 0xf9, 0x31f: 0xfa, + 0x318: 0xa0, 0x319: 0xa0, 0x31a: 0xa0, 0x31b: 0xa0, 0x31c: 0xa0, 0x31d: 0xa0, 0x31e: 0xfb, 0x31f: 0xfc, // Block 0xd, offset 0x340 - 0x340: 0xfb, 0x341: 0xfb, 0x342: 0xfb, 0x343: 0xfb, 0x344: 0xfb, 0x345: 0xfb, 0x346: 0xfb, 0x347: 0xfb, - 0x348: 0xfb, 0x349: 0xfb, 0x34a: 0xfb, 0x34b: 0xfb, 0x34c: 0xfb, 0x34d: 0xfb, 0x34e: 0xfb, 0x34f: 0xfb, - 0x350: 0xfb, 0x351: 0xfb, 0x352: 0xfb, 0x353: 0xfb, 0x354: 0xfb, 0x355: 0xfb, 0x356: 0xfb, 0x357: 0xfb, - 0x358: 0xfb, 0x359: 0xfb, 0x35a: 0xfb, 0x35b: 0xfb, 0x35c: 0xfb, 0x35d: 0xfb, 0x35e: 0xfb, 0x35f: 0xfb, - 0x360: 0xfb, 0x361: 0xfb, 0x362: 0xfb, 0x363: 0xfb, 0x364: 0xfb, 0x365: 0xfb, 0x366: 0xfb, 0x367: 0xfb, - 0x368: 0xfb, 0x369: 0xfb, 0x36a: 0xfb, 0x36b: 0xfb, 0x36c: 0xfb, 0x36d: 0xfb, 0x36e: 0xfb, 0x36f: 0xfb, - 0x370: 0xfb, 0x371: 0xfb, 0x372: 0xfb, 0x373: 0xfb, 0x374: 0xfb, 0x375: 0xfb, 0x376: 0xfb, 0x377: 0xfb, - 0x378: 0xfb, 0x379: 0xfb, 0x37a: 0xfb, 0x37b: 0xfb, 0x37c: 0xfb, 0x37d: 0xfb, 0x37e: 0xfb, 0x37f: 0xfb, + 0x340: 0xfd, 0x341: 0xfd, 0x342: 0xfd, 0x343: 0xfd, 0x344: 0xfd, 0x345: 0xfd, 0x346: 0xfd, 0x347: 0xfd, + 0x348: 0xfd, 0x349: 0xfd, 0x34a: 0xfd, 0x34b: 0xfd, 0x34c: 0xfd, 0x34d: 0xfd, 0x34e: 0xfd, 0x34f: 0xfd, + 0x350: 0xfd, 0x351: 0xfd, 0x352: 0xfd, 0x353: 0xfd, 0x354: 0xfd, 0x355: 0xfd, 0x356: 0xfd, 0x357: 0xfd, + 0x358: 0xfd, 0x359: 0xfd, 0x35a: 0xfd, 0x35b: 0xfd, 0x35c: 0xfd, 0x35d: 0xfd, 0x35e: 0xfd, 0x35f: 0xfd, + 0x360: 0xfd, 0x361: 0xfd, 0x362: 0xfd, 0x363: 0xfd, 0x364: 0xfd, 0x365: 0xfd, 0x366: 0xfd, 0x367: 0xfd, + 0x368: 0xfd, 0x369: 0xfd, 0x36a: 0xfd, 0x36b: 0xfd, 0x36c: 0xfd, 0x36d: 0xfd, 0x36e: 0xfd, 0x36f: 0xfd, + 0x370: 0xfd, 0x371: 0xfd, 0x372: 0xfd, 0x373: 0xfd, 0x374: 0xfd, 0x375: 0xfd, 0x376: 0xfd, 0x377: 0xfd, + 0x378: 0xfd, 0x379: 0xfd, 0x37a: 0xfd, 0x37b: 0xfd, 0x37c: 0xfd, 0x37d: 0xfd, 0x37e: 0xfd, 0x37f: 0xfd, // Block 0xe, offset 0x380 - 0x380: 0xfb, 0x381: 0xfb, 0x382: 0xfb, 0x383: 0xfb, 0x384: 0xfb, 0x385: 0xfb, 0x386: 0xfb, 0x387: 0xfb, - 0x388: 0xfb, 0x389: 0xfb, 0x38a: 0xfb, 0x38b: 0xfb, 0x38c: 0xfb, 0x38d: 0xfb, 0x38e: 0xfb, 0x38f: 0xfb, - 0x390: 0xfb, 0x391: 0xfb, 0x392: 0xfb, 0x393: 0xfb, 0x394: 0xfb, 0x395: 0xfb, 0x396: 0xfb, 0x397: 0xfb, - 0x398: 0xfb, 0x399: 0xfb, 0x39a: 0xfb, 0x39b: 0xfb, 0x39c: 0xfb, 0x39d: 0xfb, 0x39e: 0xfb, 0x39f: 0xfb, - 0x3a0: 0xfb, 0x3a1: 0xfb, 0x3a2: 0xfb, 0x3a3: 0xfb, 0x3a4: 0xfc, 0x3a5: 0xfd, 0x3a6: 0xfe, 0x3a7: 0xff, - 0x3a8: 0x47, 0x3a9: 0x100, 0x3aa: 0x101, 0x3ab: 0x48, 0x3ac: 0x49, 0x3ad: 0x4a, 0x3ae: 0x4b, 0x3af: 0x4c, - 0x3b0: 0x102, 0x3b1: 0x4d, 0x3b2: 0x4e, 0x3b3: 0x4f, 0x3b4: 0x50, 0x3b5: 0x51, 0x3b6: 0x103, 0x3b7: 0x52, - 0x3b8: 0x53, 0x3b9: 0x54, 0x3ba: 0x55, 0x3bb: 0x56, 0x3bc: 0x57, 0x3bd: 0x58, 0x3be: 0x59, 0x3bf: 0x5a, + 0x380: 0xfd, 0x381: 0xfd, 0x382: 0xfd, 0x383: 0xfd, 0x384: 0xfd, 0x385: 0xfd, 0x386: 0xfd, 0x387: 0xfd, + 0x388: 0xfd, 0x389: 0xfd, 0x38a: 0xfd, 0x38b: 0xfd, 0x38c: 0xfd, 0x38d: 0xfd, 0x38e: 0xfd, 0x38f: 0xfd, + 0x390: 0xfd, 0x391: 0xfd, 0x392: 0xfd, 0x393: 0xfd, 0x394: 0xfd, 0x395: 0xfd, 0x396: 0xfd, 0x397: 0xfd, + 0x398: 0xfd, 0x399: 0xfd, 0x39a: 0xfd, 0x39b: 0xfd, 0x39c: 0xfd, 0x39d: 0xfd, 0x39e: 0xfd, 0x39f: 0xfd, + 0x3a0: 0xfd, 0x3a1: 0xfd, 0x3a2: 0xfd, 0x3a3: 0xfd, 0x3a4: 0xfe, 0x3a5: 0xff, 0x3a6: 0x100, 0x3a7: 0x101, + 0x3a8: 0x45, 0x3a9: 0x102, 0x3aa: 0x103, 0x3ab: 0x46, 0x3ac: 0x47, 0x3ad: 0x48, 0x3ae: 0x49, 0x3af: 0x4a, + 0x3b0: 0x104, 0x3b1: 0x4b, 0x3b2: 0x4c, 0x3b3: 0x4d, 0x3b4: 0x4e, 0x3b5: 0x4f, 0x3b6: 0x105, 0x3b7: 0x50, + 0x3b8: 0x51, 0x3b9: 0x52, 0x3ba: 0x53, 0x3bb: 0x54, 0x3bc: 0x55, 0x3bd: 0x56, 0x3be: 0x57, 0x3bf: 0x58, // Block 0xf, offset 0x3c0 - 0x3c0: 0x104, 0x3c1: 0x105, 0x3c2: 0xa0, 0x3c3: 0x106, 0x3c4: 0x107, 0x3c5: 0x9c, 0x3c6: 0x108, 0x3c7: 0x109, - 0x3c8: 0xfb, 0x3c9: 0xfb, 0x3ca: 0x10a, 0x3cb: 0x10b, 0x3cc: 0x10c, 0x3cd: 0x10d, 0x3ce: 0x10e, 0x3cf: 0x10f, - 0x3d0: 0x110, 0x3d1: 0xa0, 0x3d2: 0x111, 0x3d3: 0x112, 0x3d4: 0x113, 0x3d5: 0x114, 0x3d6: 0xfb, 0x3d7: 0xfb, - 0x3d8: 0xa0, 0x3d9: 0xa0, 0x3da: 0xa0, 0x3db: 0xa0, 0x3dc: 0x115, 0x3dd: 0x116, 0x3de: 0xfb, 0x3df: 0xfb, - 0x3e0: 0x117, 0x3e1: 0x118, 0x3e2: 0x119, 0x3e3: 0x11a, 0x3e4: 0x11b, 0x3e5: 0xfb, 0x3e6: 0x11c, 0x3e7: 0x11d, - 0x3e8: 0x11e, 0x3e9: 0x11f, 0x3ea: 0x120, 0x3eb: 0x5b, 0x3ec: 0x121, 0x3ed: 0x122, 0x3ee: 0x5c, 0x3ef: 0xfb, - 0x3f0: 0x123, 0x3f1: 0x124, 0x3f2: 0x125, 0x3f3: 0x126, 0x3f4: 0x127, 0x3f5: 0xfb, 0x3f6: 0xfb, 0x3f7: 0xfb, - 0x3f8: 0xfb, 0x3f9: 0x128, 0x3fa: 0x129, 0x3fb: 0xfb, 0x3fc: 0x12a, 0x3fd: 0x12b, 0x3fe: 0x12c, 0x3ff: 0x12d, + 0x3c0: 0x106, 0x3c1: 0x107, 0x3c2: 0xa0, 0x3c3: 0x108, 0x3c4: 0x109, 0x3c5: 0x9c, 0x3c6: 0x10a, 0x3c7: 0x10b, + 0x3c8: 0xfd, 0x3c9: 0xfd, 0x3ca: 0x10c, 0x3cb: 0x10d, 0x3cc: 0x10e, 0x3cd: 0x10f, 0x3ce: 0x110, 0x3cf: 0x111, + 0x3d0: 0x112, 0x3d1: 0xa0, 0x3d2: 0x113, 0x3d3: 0x114, 0x3d4: 0x115, 0x3d5: 0x116, 0x3d6: 0xfd, 0x3d7: 0xfd, + 0x3d8: 0xa0, 0x3d9: 0xa0, 0x3da: 0xa0, 0x3db: 0xa0, 0x3dc: 0x117, 0x3dd: 0x118, 0x3de: 0xfd, 0x3df: 0xfd, + 0x3e0: 0x119, 0x3e1: 0x11a, 0x3e2: 0x11b, 0x3e3: 0x11c, 0x3e4: 0x11d, 0x3e5: 0xfd, 0x3e6: 0x11e, 0x3e7: 0x11f, + 0x3e8: 0x120, 0x3e9: 0x121, 0x3ea: 0x122, 0x3eb: 0x59, 0x3ec: 0x123, 0x3ed: 0x124, 0x3ee: 0x5a, 0x3ef: 0xfd, + 0x3f0: 0x125, 0x3f1: 0x126, 0x3f2: 0x127, 0x3f3: 0x128, 0x3f4: 0x129, 0x3f5: 0xfd, 0x3f6: 0xfd, 0x3f7: 0xfd, + 0x3f8: 0xfd, 0x3f9: 0x12a, 0x3fa: 0x12b, 0x3fb: 0xfd, 0x3fc: 0x12c, 0x3fd: 0x12d, 0x3fe: 0x12e, 0x3ff: 0x12f, // Block 0x10, offset 0x400 - 0x400: 0x12e, 0x401: 0x12f, 0x402: 0x130, 0x403: 0x131, 0x404: 0x132, 0x405: 0x133, 0x406: 0x134, 0x407: 0x135, - 0x408: 0x136, 0x409: 0xfb, 0x40a: 0x137, 0x40b: 0x138, 0x40c: 0x5d, 0x40d: 0x5e, 0x40e: 0xfb, 0x40f: 0xfb, - 0x410: 0x139, 0x411: 0x13a, 0x412: 0x13b, 0x413: 0x13c, 0x414: 0xfb, 0x415: 0xfb, 0x416: 0x13d, 0x417: 0x13e, - 0x418: 0x13f, 0x419: 0x140, 0x41a: 0x141, 0x41b: 0x142, 0x41c: 0x143, 0x41d: 0xfb, 0x41e: 0xfb, 0x41f: 0xfb, - 0x420: 0x144, 0x421: 0xfb, 0x422: 0x145, 0x423: 0x146, 0x424: 0x5f, 0x425: 0x147, 0x426: 0x148, 0x427: 0x149, - 0x428: 0x14a, 0x429: 0x14b, 0x42a: 0x14c, 0x42b: 0x14d, 0x42c: 0xfb, 0x42d: 0xfb, 0x42e: 0xfb, 0x42f: 0xfb, - 0x430: 0x14e, 0x431: 0x14f, 0x432: 0x150, 0x433: 0xfb, 0x434: 0x151, 0x435: 0x152, 0x436: 0x153, 0x437: 0xfb, - 0x438: 0xfb, 0x439: 0xfb, 0x43a: 0xfb, 0x43b: 0x154, 0x43c: 0xfb, 0x43d: 0xfb, 0x43e: 0x155, 0x43f: 0x156, + 0x400: 0x130, 0x401: 0x131, 0x402: 0x132, 0x403: 0x133, 0x404: 0x134, 0x405: 0x135, 0x406: 0x136, 0x407: 0x137, + 0x408: 0x138, 0x409: 0xfd, 0x40a: 0x139, 0x40b: 0x13a, 0x40c: 0x5b, 0x40d: 0x5c, 0x40e: 0xfd, 0x40f: 0xfd, + 0x410: 0x13b, 0x411: 0x13c, 0x412: 0x13d, 0x413: 0x13e, 0x414: 0xfd, 0x415: 0xfd, 0x416: 0x13f, 0x417: 0x140, + 0x418: 0x141, 0x419: 0x142, 0x41a: 0x143, 0x41b: 0x144, 0x41c: 0x145, 0x41d: 0xfd, 0x41e: 0xfd, 0x41f: 0xfd, + 0x420: 0x146, 0x421: 0xfd, 0x422: 0x147, 0x423: 0x148, 0x424: 0x5d, 0x425: 0x149, 0x426: 0x14a, 0x427: 0x14b, + 0x428: 0x14c, 0x429: 0x14d, 0x42a: 0x14e, 0x42b: 0x14f, 0x42c: 0xfd, 0x42d: 0xfd, 0x42e: 0xfd, 0x42f: 0xfd, + 0x430: 0x150, 0x431: 0x151, 0x432: 0x152, 0x433: 0xfd, 0x434: 0x153, 0x435: 0x154, 0x436: 0x155, 0x437: 0xfd, + 0x438: 0xfd, 0x439: 0xfd, 0x43a: 0xfd, 0x43b: 0x156, 0x43c: 0xfd, 0x43d: 0xfd, 0x43e: 0x157, 0x43f: 0x158, // Block 0x11, offset 0x440 0x440: 0xa0, 0x441: 0xa0, 0x442: 0xa0, 0x443: 0xa0, 0x444: 0xa0, 0x445: 0xa0, 0x446: 0xa0, 0x447: 0xa0, - 0x448: 0xa0, 0x449: 0xa0, 0x44a: 0xa0, 0x44b: 0xa0, 0x44c: 0xa0, 0x44d: 0xa0, 0x44e: 0x157, 0x44f: 0xfb, - 0x450: 0x9c, 0x451: 0x158, 0x452: 0xa0, 0x453: 0xa0, 0x454: 0xa0, 0x455: 0x159, 0x456: 0xfb, 0x457: 0xfb, - 0x458: 0xfb, 0x459: 0xfb, 0x45a: 0xfb, 0x45b: 0xfb, 0x45c: 0xfb, 0x45d: 0xfb, 0x45e: 0xfb, 0x45f: 0xfb, - 0x460: 0xfb, 0x461: 0xfb, 0x462: 0xfb, 0x463: 0xfb, 0x464: 0xfb, 0x465: 0xfb, 0x466: 0xfb, 0x467: 0xfb, - 0x468: 0xfb, 0x469: 0xfb, 0x46a: 0xfb, 0x46b: 0xfb, 0x46c: 0xfb, 0x46d: 0xfb, 0x46e: 0xfb, 0x46f: 0xfb, - 0x470: 0xfb, 0x471: 0xfb, 0x472: 0xfb, 0x473: 0xfb, 0x474: 0xfb, 0x475: 0xfb, 0x476: 0xfb, 0x477: 0xfb, - 0x478: 0xfb, 0x479: 0xfb, 0x47a: 0xfb, 0x47b: 0xfb, 0x47c: 0xfb, 0x47d: 0xfb, 0x47e: 0xfb, 0x47f: 0xfb, + 0x448: 0xa0, 0x449: 0xa0, 0x44a: 0xa0, 0x44b: 0xa0, 0x44c: 0xa0, 0x44d: 0xa0, 0x44e: 0x159, 0x44f: 0xfd, + 0x450: 0x9c, 0x451: 0x15a, 0x452: 0xa0, 0x453: 0xa0, 0x454: 0xa0, 0x455: 0x15b, 0x456: 0xfd, 0x457: 0xfd, + 0x458: 0xfd, 0x459: 0xfd, 0x45a: 0xfd, 0x45b: 0xfd, 0x45c: 0xfd, 0x45d: 0xfd, 0x45e: 0xfd, 0x45f: 0xfd, + 0x460: 0xfd, 0x461: 0xfd, 0x462: 0xfd, 0x463: 0xfd, 0x464: 0xfd, 0x465: 0xfd, 0x466: 0xfd, 0x467: 0xfd, + 0x468: 0xfd, 0x469: 0xfd, 0x46a: 0xfd, 0x46b: 0xfd, 0x46c: 0xfd, 0x46d: 0xfd, 0x46e: 0xfd, 0x46f: 0xfd, + 0x470: 0xfd, 0x471: 0xfd, 0x472: 0xfd, 0x473: 0xfd, 0x474: 0xfd, 0x475: 0xfd, 0x476: 0xfd, 0x477: 0xfd, + 0x478: 0xfd, 0x479: 0xfd, 0x47a: 0xfd, 0x47b: 0xfd, 0x47c: 0xfd, 0x47d: 0xfd, 0x47e: 0xfd, 0x47f: 0xfd, // Block 0x12, offset 0x480 0x480: 0xa0, 0x481: 0xa0, 0x482: 0xa0, 0x483: 0xa0, 0x484: 0xa0, 0x485: 0xa0, 0x486: 0xa0, 0x487: 0xa0, 0x488: 0xa0, 0x489: 0xa0, 0x48a: 0xa0, 0x48b: 0xa0, 0x48c: 0xa0, 0x48d: 0xa0, 0x48e: 0xa0, 0x48f: 0xa0, - 0x490: 0x15a, 0x491: 0xfb, 0x492: 0xfb, 0x493: 0xfb, 0x494: 0xfb, 0x495: 0xfb, 0x496: 0xfb, 0x497: 0xfb, - 0x498: 0xfb, 0x499: 0xfb, 0x49a: 0xfb, 0x49b: 0xfb, 0x49c: 0xfb, 0x49d: 0xfb, 0x49e: 0xfb, 0x49f: 0xfb, - 0x4a0: 0xfb, 0x4a1: 0xfb, 0x4a2: 0xfb, 0x4a3: 0xfb, 0x4a4: 0xfb, 0x4a5: 0xfb, 0x4a6: 0xfb, 0x4a7: 0xfb, - 0x4a8: 0xfb, 0x4a9: 0xfb, 0x4aa: 0xfb, 0x4ab: 0xfb, 0x4ac: 0xfb, 0x4ad: 0xfb, 0x4ae: 0xfb, 0x4af: 0xfb, - 0x4b0: 0xfb, 0x4b1: 0xfb, 0x4b2: 0xfb, 0x4b3: 0xfb, 0x4b4: 0xfb, 0x4b5: 0xfb, 0x4b6: 0xfb, 0x4b7: 0xfb, - 0x4b8: 0xfb, 0x4b9: 0xfb, 0x4ba: 0xfb, 0x4bb: 0xfb, 0x4bc: 0xfb, 0x4bd: 0xfb, 0x4be: 0xfb, 0x4bf: 0xfb, + 0x490: 0x15c, 0x491: 0xfd, 0x492: 0xfd, 0x493: 0xfd, 0x494: 0xfd, 0x495: 0xfd, 0x496: 0xfd, 0x497: 0xfd, + 0x498: 0xfd, 0x499: 0xfd, 0x49a: 0xfd, 0x49b: 0xfd, 0x49c: 0xfd, 0x49d: 0xfd, 0x49e: 0xfd, 0x49f: 0xfd, + 0x4a0: 0xfd, 0x4a1: 0xfd, 0x4a2: 0xfd, 0x4a3: 0xfd, 0x4a4: 0xfd, 0x4a5: 0xfd, 0x4a6: 0xfd, 0x4a7: 0xfd, + 0x4a8: 0xfd, 0x4a9: 0xfd, 0x4aa: 0xfd, 0x4ab: 0xfd, 0x4ac: 0xfd, 0x4ad: 0xfd, 0x4ae: 0xfd, 0x4af: 0xfd, + 0x4b0: 0xfd, 0x4b1: 0xfd, 0x4b2: 0xfd, 0x4b3: 0xfd, 0x4b4: 0xfd, 0x4b5: 0xfd, 0x4b6: 0xfd, 0x4b7: 0xfd, + 0x4b8: 0xfd, 0x4b9: 0xfd, 0x4ba: 0xfd, 0x4bb: 0xfd, 0x4bc: 0xfd, 0x4bd: 0xfd, 0x4be: 0xfd, 0x4bf: 0xfd, // Block 0x13, offset 0x4c0 - 0x4c0: 0xfb, 0x4c1: 0xfb, 0x4c2: 0xfb, 0x4c3: 0xfb, 0x4c4: 0xfb, 0x4c5: 0xfb, 0x4c6: 0xfb, 0x4c7: 0xfb, - 0x4c8: 0xfb, 0x4c9: 0xfb, 0x4ca: 0xfb, 0x4cb: 0xfb, 0x4cc: 0xfb, 0x4cd: 0xfb, 0x4ce: 0xfb, 0x4cf: 0xfb, + 0x4c0: 0xfd, 0x4c1: 0xfd, 0x4c2: 0xfd, 0x4c3: 0xfd, 0x4c4: 0xfd, 0x4c5: 0xfd, 0x4c6: 0xfd, 0x4c7: 0xfd, + 0x4c8: 0xfd, 0x4c9: 0xfd, 0x4ca: 0xfd, 0x4cb: 0xfd, 0x4cc: 0xfd, 0x4cd: 0xfd, 0x4ce: 0xfd, 0x4cf: 0xfd, 0x4d0: 0xa0, 0x4d1: 0xa0, 0x4d2: 0xa0, 0x4d3: 0xa0, 0x4d4: 0xa0, 0x4d5: 0xa0, 0x4d6: 0xa0, 0x4d7: 0xa0, - 0x4d8: 0xa0, 0x4d9: 0x15b, 0x4da: 0xfb, 0x4db: 0xfb, 0x4dc: 0xfb, 0x4dd: 0xfb, 0x4de: 0xfb, 0x4df: 0xfb, - 0x4e0: 0xfb, 0x4e1: 0xfb, 0x4e2: 0xfb, 0x4e3: 0xfb, 0x4e4: 0xfb, 0x4e5: 0xfb, 0x4e6: 0xfb, 0x4e7: 0xfb, - 0x4e8: 0xfb, 0x4e9: 0xfb, 0x4ea: 0xfb, 0x4eb: 0xfb, 0x4ec: 0xfb, 0x4ed: 0xfb, 0x4ee: 0xfb, 0x4ef: 0xfb, - 0x4f0: 0xfb, 0x4f1: 0xfb, 0x4f2: 0xfb, 0x4f3: 0xfb, 0x4f4: 0xfb, 0x4f5: 0xfb, 0x4f6: 0xfb, 0x4f7: 0xfb, - 0x4f8: 0xfb, 0x4f9: 0xfb, 0x4fa: 0xfb, 0x4fb: 0xfb, 0x4fc: 0xfb, 0x4fd: 0xfb, 0x4fe: 0xfb, 0x4ff: 0xfb, + 0x4d8: 0xa0, 0x4d9: 0x15d, 0x4da: 0xfd, 0x4db: 0xfd, 0x4dc: 0xfd, 0x4dd: 0xfd, 0x4de: 0xfd, 0x4df: 0xfd, + 0x4e0: 0xfd, 0x4e1: 0xfd, 0x4e2: 0xfd, 0x4e3: 0xfd, 0x4e4: 0xfd, 0x4e5: 0xfd, 0x4e6: 0xfd, 0x4e7: 0xfd, + 0x4e8: 0xfd, 0x4e9: 0xfd, 0x4ea: 0xfd, 0x4eb: 0xfd, 0x4ec: 0xfd, 0x4ed: 0xfd, 0x4ee: 0xfd, 0x4ef: 0xfd, + 0x4f0: 0xfd, 0x4f1: 0xfd, 0x4f2: 0xfd, 0x4f3: 0xfd, 0x4f4: 0xfd, 0x4f5: 0xfd, 0x4f6: 0xfd, 0x4f7: 0xfd, + 0x4f8: 0xfd, 0x4f9: 0xfd, 0x4fa: 0xfd, 0x4fb: 0xfd, 0x4fc: 0xfd, 0x4fd: 0xfd, 0x4fe: 0xfd, 0x4ff: 0xfd, // Block 0x14, offset 0x500 - 0x500: 0xfb, 0x501: 0xfb, 0x502: 0xfb, 0x503: 0xfb, 0x504: 0xfb, 0x505: 0xfb, 0x506: 0xfb, 0x507: 0xfb, - 0x508: 0xfb, 0x509: 0xfb, 0x50a: 0xfb, 0x50b: 0xfb, 0x50c: 0xfb, 0x50d: 0xfb, 0x50e: 0xfb, 0x50f: 0xfb, - 0x510: 0xfb, 0x511: 0xfb, 0x512: 0xfb, 0x513: 0xfb, 0x514: 0xfb, 0x515: 0xfb, 0x516: 0xfb, 0x517: 0xfb, - 0x518: 0xfb, 0x519: 0xfb, 0x51a: 0xfb, 0x51b: 0xfb, 0x51c: 0xfb, 0x51d: 0xfb, 0x51e: 0xfb, 0x51f: 0xfb, + 0x500: 0xfd, 0x501: 0xfd, 0x502: 0xfd, 0x503: 0xfd, 0x504: 0xfd, 0x505: 0xfd, 0x506: 0xfd, 0x507: 0xfd, + 0x508: 0xfd, 0x509: 0xfd, 0x50a: 0xfd, 0x50b: 0xfd, 0x50c: 0xfd, 0x50d: 0xfd, 0x50e: 0xfd, 0x50f: 0xfd, + 0x510: 0xfd, 0x511: 0xfd, 0x512: 0xfd, 0x513: 0xfd, 0x514: 0xfd, 0x515: 0xfd, 0x516: 0xfd, 0x517: 0xfd, + 0x518: 0xfd, 0x519: 0xfd, 0x51a: 0xfd, 0x51b: 0xfd, 0x51c: 0xfd, 0x51d: 0xfd, 0x51e: 0xfd, 0x51f: 0xfd, 0x520: 0xa0, 0x521: 0xa0, 0x522: 0xa0, 0x523: 0xa0, 0x524: 0xa0, 0x525: 0xa0, 0x526: 0xa0, 0x527: 0xa0, - 0x528: 0x14d, 0x529: 0x15c, 0x52a: 0xfb, 0x52b: 0x15d, 0x52c: 0x15e, 0x52d: 0x15f, 0x52e: 0x160, 0x52f: 0xfb, - 0x530: 0xfb, 0x531: 0xfb, 0x532: 0xfb, 0x533: 0xfb, 0x534: 0xfb, 0x535: 0xfb, 0x536: 0xfb, 0x537: 0xfb, - 0x538: 0xfb, 0x539: 0x161, 0x53a: 0x162, 0x53b: 0xfb, 0x53c: 0xa0, 0x53d: 0x163, 0x53e: 0x164, 0x53f: 0x165, + 0x528: 0x14f, 0x529: 0x15e, 0x52a: 0xfd, 0x52b: 0x15f, 0x52c: 0x160, 0x52d: 0x161, 0x52e: 0x162, 0x52f: 0xfd, + 0x530: 0xfd, 0x531: 0xfd, 0x532: 0xfd, 0x533: 0xfd, 0x534: 0xfd, 0x535: 0xfd, 0x536: 0xfd, 0x537: 0xfd, + 0x538: 0xfd, 0x539: 0x163, 0x53a: 0x164, 0x53b: 0xfd, 0x53c: 0xa0, 0x53d: 0x165, 0x53e: 0x166, 0x53f: 0x167, // Block 0x15, offset 0x540 0x540: 0xa0, 0x541: 0xa0, 0x542: 0xa0, 0x543: 0xa0, 0x544: 0xa0, 0x545: 0xa0, 0x546: 0xa0, 0x547: 0xa0, 0x548: 0xa0, 0x549: 0xa0, 0x54a: 0xa0, 0x54b: 0xa0, 0x54c: 0xa0, 0x54d: 0xa0, 0x54e: 0xa0, 0x54f: 0xa0, 0x550: 0xa0, 0x551: 0xa0, 0x552: 0xa0, 0x553: 0xa0, 0x554: 0xa0, 0x555: 0xa0, 0x556: 0xa0, 0x557: 0xa0, - 0x558: 0xa0, 0x559: 0xa0, 0x55a: 0xa0, 0x55b: 0xa0, 0x55c: 0xa0, 0x55d: 0xa0, 0x55e: 0xa0, 0x55f: 0x166, + 0x558: 0xa0, 0x559: 0xa0, 0x55a: 0xa0, 0x55b: 0xa0, 0x55c: 0xa0, 0x55d: 0xa0, 0x55e: 0xa0, 0x55f: 0x168, 0x560: 0xa0, 0x561: 0xa0, 0x562: 0xa0, 0x563: 0xa0, 0x564: 0xa0, 0x565: 0xa0, 0x566: 0xa0, 0x567: 0xa0, 0x568: 0xa0, 0x569: 0xa0, 0x56a: 0xa0, 0x56b: 0xa0, 0x56c: 0xa0, 0x56d: 0xa0, 0x56e: 0xa0, 0x56f: 0xa0, - 0x570: 0xa0, 0x571: 0xa0, 0x572: 0xa0, 0x573: 0x167, 0x574: 0x168, 0x575: 0xfb, 0x576: 0xfb, 0x577: 0xfb, - 0x578: 0xfb, 0x579: 0xfb, 0x57a: 0xfb, 0x57b: 0xfb, 0x57c: 0xfb, 0x57d: 0xfb, 0x57e: 0xfb, 0x57f: 0xfb, + 0x570: 0xa0, 0x571: 0xa0, 0x572: 0xa0, 0x573: 0x169, 0x574: 0x16a, 0x575: 0xfd, 0x576: 0xfd, 0x577: 0xfd, + 0x578: 0xfd, 0x579: 0xfd, 0x57a: 0xfd, 0x57b: 0xfd, 0x57c: 0xfd, 0x57d: 0xfd, 0x57e: 0xfd, 0x57f: 0xfd, // Block 0x16, offset 0x580 - 0x580: 0xa0, 0x581: 0xa0, 0x582: 0xa0, 0x583: 0xa0, 0x584: 0x169, 0x585: 0x16a, 0x586: 0xa0, 0x587: 0xa0, - 0x588: 0xa0, 0x589: 0xa0, 0x58a: 0xa0, 0x58b: 0x16b, 0x58c: 0xfb, 0x58d: 0xfb, 0x58e: 0xfb, 0x58f: 0xfb, - 0x590: 0xfb, 0x591: 0xfb, 0x592: 0xfb, 0x593: 0xfb, 0x594: 0xfb, 0x595: 0xfb, 0x596: 0xfb, 0x597: 0xfb, - 0x598: 0xfb, 0x599: 0xfb, 0x59a: 0xfb, 0x59b: 0xfb, 0x59c: 0xfb, 0x59d: 0xfb, 0x59e: 0xfb, 0x59f: 0xfb, - 0x5a0: 0xfb, 0x5a1: 0xfb, 0x5a2: 0xfb, 0x5a3: 0xfb, 0x5a4: 0xfb, 0x5a5: 0xfb, 0x5a6: 0xfb, 0x5a7: 0xfb, - 0x5a8: 0xfb, 0x5a9: 0xfb, 0x5aa: 0xfb, 0x5ab: 0xfb, 0x5ac: 0xfb, 0x5ad: 0xfb, 0x5ae: 0xfb, 0x5af: 0xfb, - 0x5b0: 0xa0, 0x5b1: 0x16c, 0x5b2: 0x16d, 0x5b3: 0xfb, 0x5b4: 0xfb, 0x5b5: 0xfb, 0x5b6: 0xfb, 0x5b7: 0xfb, - 0x5b8: 0xfb, 0x5b9: 0xfb, 0x5ba: 0xfb, 0x5bb: 0xfb, 0x5bc: 0xfb, 0x5bd: 0xfb, 0x5be: 0xfb, 0x5bf: 0xfb, + 0x580: 0xa0, 0x581: 0xa0, 0x582: 0xa0, 0x583: 0xa0, 0x584: 0x16b, 0x585: 0x16c, 0x586: 0xa0, 0x587: 0xa0, + 0x588: 0xa0, 0x589: 0xa0, 0x58a: 0xa0, 0x58b: 0x16d, 0x58c: 0xfd, 0x58d: 0xfd, 0x58e: 0xfd, 0x58f: 0xfd, + 0x590: 0xfd, 0x591: 0xfd, 0x592: 0xfd, 0x593: 0xfd, 0x594: 0xfd, 0x595: 0xfd, 0x596: 0xfd, 0x597: 0xfd, + 0x598: 0xfd, 0x599: 0xfd, 0x59a: 0xfd, 0x59b: 0xfd, 0x59c: 0xfd, 0x59d: 0xfd, 0x59e: 0xfd, 0x59f: 0xfd, + 0x5a0: 0xfd, 0x5a1: 0xfd, 0x5a2: 0xfd, 0x5a3: 0xfd, 0x5a4: 0xfd, 0x5a5: 0xfd, 0x5a6: 0xfd, 0x5a7: 0xfd, + 0x5a8: 0xfd, 0x5a9: 0xfd, 0x5aa: 0xfd, 0x5ab: 0xfd, 0x5ac: 0xfd, 0x5ad: 0xfd, 0x5ae: 0xfd, 0x5af: 0xfd, + 0x5b0: 0xa0, 0x5b1: 0x16e, 0x5b2: 0x16f, 0x5b3: 0xfd, 0x5b4: 0xfd, 0x5b5: 0xfd, 0x5b6: 0xfd, 0x5b7: 0xfd, + 0x5b8: 0xfd, 0x5b9: 0xfd, 0x5ba: 0xfd, 0x5bb: 0xfd, 0x5bc: 0xfd, 0x5bd: 0xfd, 0x5be: 0xfd, 0x5bf: 0xfd, // Block 0x17, offset 0x5c0 - 0x5c0: 0x9c, 0x5c1: 0x9c, 0x5c2: 0x9c, 0x5c3: 0x16e, 0x5c4: 0x16f, 0x5c5: 0x170, 0x5c6: 0x171, 0x5c7: 0x172, - 0x5c8: 0x9c, 0x5c9: 0x173, 0x5ca: 0xfb, 0x5cb: 0x174, 0x5cc: 0x9c, 0x5cd: 0x175, 0x5ce: 0xfb, 0x5cf: 0xfb, - 0x5d0: 0x60, 0x5d1: 0x61, 0x5d2: 0x62, 0x5d3: 0x63, 0x5d4: 0x64, 0x5d5: 0x65, 0x5d6: 0x66, 0x5d7: 0x67, - 0x5d8: 0x68, 0x5d9: 0x69, 0x5da: 0x6a, 0x5db: 0x6b, 0x5dc: 0x6c, 0x5dd: 0x6d, 0x5de: 0x6e, 0x5df: 0x6f, + 0x5c0: 0x9c, 0x5c1: 0x9c, 0x5c2: 0x9c, 0x5c3: 0x170, 0x5c4: 0x171, 0x5c5: 0x172, 0x5c6: 0x173, 0x5c7: 0x174, + 0x5c8: 0x9c, 0x5c9: 0x175, 0x5ca: 0xfd, 0x5cb: 0x176, 0x5cc: 0x9c, 0x5cd: 0x177, 0x5ce: 0xfd, 0x5cf: 0xfd, + 0x5d0: 0x5e, 0x5d1: 0x5f, 0x5d2: 0x60, 0x5d3: 0x61, 0x5d4: 0x62, 0x5d5: 0x63, 0x5d6: 0x64, 0x5d7: 0x65, + 0x5d8: 0x66, 0x5d9: 0x67, 0x5da: 0x68, 0x5db: 0x69, 0x5dc: 0x6a, 0x5dd: 0x6b, 0x5de: 0x6c, 0x5df: 0x6d, 0x5e0: 0x9c, 0x5e1: 0x9c, 0x5e2: 0x9c, 0x5e3: 0x9c, 0x5e4: 0x9c, 0x5e5: 0x9c, 0x5e6: 0x9c, 0x5e7: 0x9c, - 0x5e8: 0x176, 0x5e9: 0x177, 0x5ea: 0x178, 0x5eb: 0xfb, 0x5ec: 0xfb, 0x5ed: 0xfb, 0x5ee: 0xfb, 0x5ef: 0xfb, - 0x5f0: 0xfb, 0x5f1: 0xfb, 0x5f2: 0xfb, 0x5f3: 0xfb, 0x5f4: 0xfb, 0x5f5: 0xfb, 0x5f6: 0xfb, 0x5f7: 0xfb, - 0x5f8: 0xfb, 0x5f9: 0xfb, 0x5fa: 0xfb, 0x5fb: 0xfb, 0x5fc: 0xfb, 0x5fd: 0xfb, 0x5fe: 0xfb, 0x5ff: 0xfb, + 0x5e8: 0x178, 0x5e9: 0x179, 0x5ea: 0x17a, 0x5eb: 0xfd, 0x5ec: 0xfd, 0x5ed: 0xfd, 0x5ee: 0xfd, 0x5ef: 0xfd, + 0x5f0: 0xfd, 0x5f1: 0xfd, 0x5f2: 0xfd, 0x5f3: 0xfd, 0x5f4: 0xfd, 0x5f5: 0xfd, 0x5f6: 0xfd, 0x5f7: 0xfd, + 0x5f8: 0xfd, 0x5f9: 0xfd, 0x5fa: 0xfd, 0x5fb: 0xfd, 0x5fc: 0xfd, 0x5fd: 0xfd, 0x5fe: 0xfd, 0x5ff: 0xfd, // Block 0x18, offset 0x600 - 0x600: 0x179, 0x601: 0xfb, 0x602: 0xfb, 0x603: 0xfb, 0x604: 0x17a, 0x605: 0x17b, 0x606: 0xfb, 0x607: 0xfb, - 0x608: 0xfb, 0x609: 0xfb, 0x60a: 0xfb, 0x60b: 0x17c, 0x60c: 0xfb, 0x60d: 0xfb, 0x60e: 0xfb, 0x60f: 0xfb, - 0x610: 0xfb, 0x611: 0xfb, 0x612: 0xfb, 0x613: 0xfb, 0x614: 0xfb, 0x615: 0xfb, 0x616: 0xfb, 0x617: 0xfb, - 0x618: 0xfb, 0x619: 0xfb, 0x61a: 0xfb, 0x61b: 0xfb, 0x61c: 0xfb, 0x61d: 0xfb, 0x61e: 0xfb, 0x61f: 0xfb, - 0x620: 0x123, 0x621: 0x123, 0x622: 0x123, 0x623: 0x17d, 0x624: 0x70, 0x625: 0x17e, 0x626: 0xfb, 0x627: 0xfb, - 0x628: 0xfb, 0x629: 0xfb, 0x62a: 0xfb, 0x62b: 0xfb, 0x62c: 0xfb, 0x62d: 0xfb, 0x62e: 0xfb, 0x62f: 0xfb, - 0x630: 0xfb, 0x631: 0x17f, 0x632: 0x180, 0x633: 0xfb, 0x634: 0x181, 0x635: 0xfb, 0x636: 0xfb, 0x637: 0xfb, - 0x638: 0x71, 0x639: 0x72, 0x63a: 0x73, 0x63b: 0x182, 0x63c: 0xfb, 0x63d: 0xfb, 0x63e: 0xfb, 0x63f: 0xfb, + 0x600: 0x17b, 0x601: 0xfd, 0x602: 0xfd, 0x603: 0xfd, 0x604: 0x17c, 0x605: 0x17d, 0x606: 0xfd, 0x607: 0xfd, + 0x608: 0xfd, 0x609: 0xfd, 0x60a: 0xfd, 0x60b: 0x17e, 0x60c: 0xfd, 0x60d: 0xfd, 0x60e: 0xfd, 0x60f: 0xfd, + 0x610: 0xfd, 0x611: 0xfd, 0x612: 0xfd, 0x613: 0xfd, 0x614: 0xfd, 0x615: 0xfd, 0x616: 0xfd, 0x617: 0xfd, + 0x618: 0xfd, 0x619: 0xfd, 0x61a: 0xfd, 0x61b: 0xfd, 0x61c: 0xfd, 0x61d: 0xfd, 0x61e: 0xfd, 0x61f: 0xfd, + 0x620: 0x125, 0x621: 0x125, 0x622: 0x125, 0x623: 0x17f, 0x624: 0x6e, 0x625: 0x180, 0x626: 0xfd, 0x627: 0xfd, + 0x628: 0xfd, 0x629: 0xfd, 0x62a: 0xfd, 0x62b: 0xfd, 0x62c: 0xfd, 0x62d: 0xfd, 0x62e: 0xfd, 0x62f: 0xfd, + 0x630: 0xfd, 0x631: 0x181, 0x632: 0x182, 0x633: 0xfd, 0x634: 0x183, 0x635: 0xfd, 0x636: 0xfd, 0x637: 0xfd, + 0x638: 0x6f, 0x639: 0x70, 0x63a: 0x71, 0x63b: 0x184, 0x63c: 0xfd, 0x63d: 0xfd, 0x63e: 0xfd, 0x63f: 0xfd, // Block 0x19, offset 0x640 - 0x640: 0x183, 0x641: 0x9c, 0x642: 0x184, 0x643: 0x185, 0x644: 0x74, 0x645: 0x75, 0x646: 0x186, 0x647: 0x187, - 0x648: 0x76, 0x649: 0x188, 0x64a: 0xfb, 0x64b: 0xfb, 0x64c: 0x9c, 0x64d: 0x9c, 0x64e: 0x9c, 0x64f: 0x9c, + 0x640: 0x185, 0x641: 0x9c, 0x642: 0x186, 0x643: 0x187, 0x644: 0x72, 0x645: 0x73, 0x646: 0x188, 0x647: 0x189, + 0x648: 0x74, 0x649: 0x18a, 0x64a: 0xfd, 0x64b: 0xfd, 0x64c: 0x9c, 0x64d: 0x9c, 0x64e: 0x9c, 0x64f: 0x9c, 0x650: 0x9c, 0x651: 0x9c, 0x652: 0x9c, 0x653: 0x9c, 0x654: 0x9c, 0x655: 0x9c, 0x656: 0x9c, 0x657: 0x9c, - 0x658: 0x9c, 0x659: 0x9c, 0x65a: 0x9c, 0x65b: 0x189, 0x65c: 0x9c, 0x65d: 0x18a, 0x65e: 0x9c, 0x65f: 0x18b, - 0x660: 0x18c, 0x661: 0x18d, 0x662: 0x18e, 0x663: 0xfb, 0x664: 0x9c, 0x665: 0x18f, 0x666: 0x9c, 0x667: 0x190, - 0x668: 0x9c, 0x669: 0x191, 0x66a: 0x192, 0x66b: 0x193, 0x66c: 0x9c, 0x66d: 0x9c, 0x66e: 0x194, 0x66f: 0x195, - 0x670: 0xfb, 0x671: 0xfb, 0x672: 0xfb, 0x673: 0xfb, 0x674: 0xfb, 0x675: 0xfb, 0x676: 0xfb, 0x677: 0xfb, - 0x678: 0xfb, 0x679: 0xfb, 0x67a: 0xfb, 0x67b: 0xfb, 0x67c: 0xfb, 0x67d: 0xfb, 0x67e: 0xfb, 0x67f: 0xfb, + 0x658: 0x9c, 0x659: 0x9c, 0x65a: 0x9c, 0x65b: 0x18b, 0x65c: 0x9c, 0x65d: 0x18c, 0x65e: 0x9c, 0x65f: 0x18d, + 0x660: 0x18e, 0x661: 0x18f, 0x662: 0x190, 0x663: 0xfd, 0x664: 0x9c, 0x665: 0x191, 0x666: 0x9c, 0x667: 0x192, + 0x668: 0x9c, 0x669: 0x193, 0x66a: 0x194, 0x66b: 0x195, 0x66c: 0x9c, 0x66d: 0x9c, 0x66e: 0x196, 0x66f: 0x197, + 0x670: 0xfd, 0x671: 0xfd, 0x672: 0xfd, 0x673: 0xfd, 0x674: 0xfd, 0x675: 0xfd, 0x676: 0xfd, 0x677: 0xfd, + 0x678: 0xfd, 0x679: 0xfd, 0x67a: 0xfd, 0x67b: 0xfd, 0x67c: 0xfd, 0x67d: 0xfd, 0x67e: 0xfd, 0x67f: 0xfd, // Block 0x1a, offset 0x680 0x680: 0xa0, 0x681: 0xa0, 0x682: 0xa0, 0x683: 0xa0, 0x684: 0xa0, 0x685: 0xa0, 0x686: 0xa0, 0x687: 0xa0, 0x688: 0xa0, 0x689: 0xa0, 0x68a: 0xa0, 0x68b: 0xa0, 0x68c: 0xa0, 0x68d: 0xa0, 0x68e: 0xa0, 0x68f: 0xa0, 0x690: 0xa0, 0x691: 0xa0, 0x692: 0xa0, 0x693: 0xa0, 0x694: 0xa0, 0x695: 0xa0, 0x696: 0xa0, 0x697: 0xa0, - 0x698: 0xa0, 0x699: 0xa0, 0x69a: 0xa0, 0x69b: 0x196, 0x69c: 0xa0, 0x69d: 0xa0, 0x69e: 0xa0, 0x69f: 0xa0, + 0x698: 0xa0, 0x699: 0xa0, 0x69a: 0xa0, 0x69b: 0x198, 0x69c: 0xa0, 0x69d: 0xa0, 0x69e: 0xa0, 0x69f: 0xa0, 0x6a0: 0xa0, 0x6a1: 0xa0, 0x6a2: 0xa0, 0x6a3: 0xa0, 0x6a4: 0xa0, 0x6a5: 0xa0, 0x6a6: 0xa0, 0x6a7: 0xa0, 0x6a8: 0xa0, 0x6a9: 0xa0, 0x6aa: 0xa0, 0x6ab: 0xa0, 0x6ac: 0xa0, 0x6ad: 0xa0, 0x6ae: 0xa0, 0x6af: 0xa0, 0x6b0: 0xa0, 0x6b1: 0xa0, 0x6b2: 0xa0, 0x6b3: 0xa0, 0x6b4: 0xa0, 0x6b5: 0xa0, 0x6b6: 0xa0, 0x6b7: 0xa0, @@ -2312,8 +2455,8 @@ var idnaIndex = [2368]uint16{ 0x6c0: 0xa0, 0x6c1: 0xa0, 0x6c2: 0xa0, 0x6c3: 0xa0, 0x6c4: 0xa0, 0x6c5: 0xa0, 0x6c6: 0xa0, 0x6c7: 0xa0, 0x6c8: 0xa0, 0x6c9: 0xa0, 0x6ca: 0xa0, 0x6cb: 0xa0, 0x6cc: 0xa0, 0x6cd: 0xa0, 0x6ce: 0xa0, 0x6cf: 0xa0, 0x6d0: 0xa0, 0x6d1: 0xa0, 0x6d2: 0xa0, 0x6d3: 0xa0, 0x6d4: 0xa0, 0x6d5: 0xa0, 0x6d6: 0xa0, 0x6d7: 0xa0, - 0x6d8: 0xa0, 0x6d9: 0xa0, 0x6da: 0xa0, 0x6db: 0xa0, 0x6dc: 0x197, 0x6dd: 0xa0, 0x6de: 0xa0, 0x6df: 0xa0, - 0x6e0: 0x198, 0x6e1: 0xa0, 0x6e2: 0xa0, 0x6e3: 0xa0, 0x6e4: 0xa0, 0x6e5: 0xa0, 0x6e6: 0xa0, 0x6e7: 0xa0, + 0x6d8: 0xa0, 0x6d9: 0xa0, 0x6da: 0xa0, 0x6db: 0xa0, 0x6dc: 0x199, 0x6dd: 0xa0, 0x6de: 0xa0, 0x6df: 0xa0, + 0x6e0: 0x19a, 0x6e1: 0xa0, 0x6e2: 0xa0, 0x6e3: 0xa0, 0x6e4: 0xa0, 0x6e5: 0xa0, 0x6e6: 0xa0, 0x6e7: 0xa0, 0x6e8: 0xa0, 0x6e9: 0xa0, 0x6ea: 0xa0, 0x6eb: 0xa0, 0x6ec: 0xa0, 0x6ed: 0xa0, 0x6ee: 0xa0, 0x6ef: 0xa0, 0x6f0: 0xa0, 0x6f1: 0xa0, 0x6f2: 0xa0, 0x6f3: 0xa0, 0x6f4: 0xa0, 0x6f5: 0xa0, 0x6f6: 0xa0, 0x6f7: 0xa0, 0x6f8: 0xa0, 0x6f9: 0xa0, 0x6fa: 0xa0, 0x6fb: 0xa0, 0x6fc: 0xa0, 0x6fd: 0xa0, 0x6fe: 0xa0, 0x6ff: 0xa0, @@ -2325,34 +2468,34 @@ var idnaIndex = [2368]uint16{ 0x720: 0xa0, 0x721: 0xa0, 0x722: 0xa0, 0x723: 0xa0, 0x724: 0xa0, 0x725: 0xa0, 0x726: 0xa0, 0x727: 0xa0, 0x728: 0xa0, 0x729: 0xa0, 0x72a: 0xa0, 0x72b: 0xa0, 0x72c: 0xa0, 0x72d: 0xa0, 0x72e: 0xa0, 0x72f: 0xa0, 0x730: 0xa0, 0x731: 0xa0, 0x732: 0xa0, 0x733: 0xa0, 0x734: 0xa0, 0x735: 0xa0, 0x736: 0xa0, 0x737: 0xa0, - 0x738: 0xa0, 0x739: 0xa0, 0x73a: 0x199, 0x73b: 0xa0, 0x73c: 0xa0, 0x73d: 0xa0, 0x73e: 0xa0, 0x73f: 0xa0, + 0x738: 0xa0, 0x739: 0xa0, 0x73a: 0x19b, 0x73b: 0xa0, 0x73c: 0xa0, 0x73d: 0xa0, 0x73e: 0xa0, 0x73f: 0xa0, // Block 0x1d, offset 0x740 0x740: 0xa0, 0x741: 0xa0, 0x742: 0xa0, 0x743: 0xa0, 0x744: 0xa0, 0x745: 0xa0, 0x746: 0xa0, 0x747: 0xa0, 0x748: 0xa0, 0x749: 0xa0, 0x74a: 0xa0, 0x74b: 0xa0, 0x74c: 0xa0, 0x74d: 0xa0, 0x74e: 0xa0, 0x74f: 0xa0, 0x750: 0xa0, 0x751: 0xa0, 0x752: 0xa0, 0x753: 0xa0, 0x754: 0xa0, 0x755: 0xa0, 0x756: 0xa0, 0x757: 0xa0, 0x758: 0xa0, 0x759: 0xa0, 0x75a: 0xa0, 0x75b: 0xa0, 0x75c: 0xa0, 0x75d: 0xa0, 0x75e: 0xa0, 0x75f: 0xa0, 0x760: 0xa0, 0x761: 0xa0, 0x762: 0xa0, 0x763: 0xa0, 0x764: 0xa0, 0x765: 0xa0, 0x766: 0xa0, 0x767: 0xa0, - 0x768: 0xa0, 0x769: 0xa0, 0x76a: 0xa0, 0x76b: 0xa0, 0x76c: 0xa0, 0x76d: 0xa0, 0x76e: 0xa0, 0x76f: 0x19a, - 0x770: 0xfb, 0x771: 0xfb, 0x772: 0xfb, 0x773: 0xfb, 0x774: 0xfb, 0x775: 0xfb, 0x776: 0xfb, 0x777: 0xfb, - 0x778: 0xfb, 0x779: 0xfb, 0x77a: 0xfb, 0x77b: 0xfb, 0x77c: 0xfb, 0x77d: 0xfb, 0x77e: 0xfb, 0x77f: 0xfb, + 0x768: 0xa0, 0x769: 0xa0, 0x76a: 0xa0, 0x76b: 0xa0, 0x76c: 0xa0, 0x76d: 0xa0, 0x76e: 0xa0, 0x76f: 0x19c, + 0x770: 0xfd, 0x771: 0xfd, 0x772: 0xfd, 0x773: 0xfd, 0x774: 0xfd, 0x775: 0xfd, 0x776: 0xfd, 0x777: 0xfd, + 0x778: 0xfd, 0x779: 0xfd, 0x77a: 0xfd, 0x77b: 0xfd, 0x77c: 0xfd, 0x77d: 0xfd, 0x77e: 0xfd, 0x77f: 0xfd, // Block 0x1e, offset 0x780 - 0x780: 0xfb, 0x781: 0xfb, 0x782: 0xfb, 0x783: 0xfb, 0x784: 0xfb, 0x785: 0xfb, 0x786: 0xfb, 0x787: 0xfb, - 0x788: 0xfb, 0x789: 0xfb, 0x78a: 0xfb, 0x78b: 0xfb, 0x78c: 0xfb, 0x78d: 0xfb, 0x78e: 0xfb, 0x78f: 0xfb, - 0x790: 0xfb, 0x791: 0xfb, 0x792: 0xfb, 0x793: 0xfb, 0x794: 0xfb, 0x795: 0xfb, 0x796: 0xfb, 0x797: 0xfb, - 0x798: 0xfb, 0x799: 0xfb, 0x79a: 0xfb, 0x79b: 0xfb, 0x79c: 0xfb, 0x79d: 0xfb, 0x79e: 0xfb, 0x79f: 0xfb, - 0x7a0: 0x77, 0x7a1: 0x78, 0x7a2: 0x79, 0x7a3: 0x19b, 0x7a4: 0x7a, 0x7a5: 0x7b, 0x7a6: 0x19c, 0x7a7: 0x7c, - 0x7a8: 0x7d, 0x7a9: 0xfb, 0x7aa: 0xfb, 0x7ab: 0xfb, 0x7ac: 0xfb, 0x7ad: 0xfb, 0x7ae: 0xfb, 0x7af: 0xfb, - 0x7b0: 0xfb, 0x7b1: 0xfb, 0x7b2: 0xfb, 0x7b3: 0xfb, 0x7b4: 0xfb, 0x7b5: 0xfb, 0x7b6: 0xfb, 0x7b7: 0xfb, - 0x7b8: 0xfb, 0x7b9: 0xfb, 0x7ba: 0xfb, 0x7bb: 0xfb, 0x7bc: 0xfb, 0x7bd: 0xfb, 0x7be: 0xfb, 0x7bf: 0xfb, + 0x780: 0xfd, 0x781: 0xfd, 0x782: 0xfd, 0x783: 0xfd, 0x784: 0xfd, 0x785: 0xfd, 0x786: 0xfd, 0x787: 0xfd, + 0x788: 0xfd, 0x789: 0xfd, 0x78a: 0xfd, 0x78b: 0xfd, 0x78c: 0xfd, 0x78d: 0xfd, 0x78e: 0xfd, 0x78f: 0xfd, + 0x790: 0xfd, 0x791: 0xfd, 0x792: 0xfd, 0x793: 0xfd, 0x794: 0xfd, 0x795: 0xfd, 0x796: 0xfd, 0x797: 0xfd, + 0x798: 0xfd, 0x799: 0xfd, 0x79a: 0xfd, 0x79b: 0xfd, 0x79c: 0xfd, 0x79d: 0xfd, 0x79e: 0xfd, 0x79f: 0xfd, + 0x7a0: 0x75, 0x7a1: 0x76, 0x7a2: 0x77, 0x7a3: 0x78, 0x7a4: 0x79, 0x7a5: 0x7a, 0x7a6: 0x7b, 0x7a7: 0x7c, + 0x7a8: 0x7d, 0x7a9: 0xfd, 0x7aa: 0xfd, 0x7ab: 0xfd, 0x7ac: 0xfd, 0x7ad: 0xfd, 0x7ae: 0xfd, 0x7af: 0xfd, + 0x7b0: 0xfd, 0x7b1: 0xfd, 0x7b2: 0xfd, 0x7b3: 0xfd, 0x7b4: 0xfd, 0x7b5: 0xfd, 0x7b6: 0xfd, 0x7b7: 0xfd, + 0x7b8: 0xfd, 0x7b9: 0xfd, 0x7ba: 0xfd, 0x7bb: 0xfd, 0x7bc: 0xfd, 0x7bd: 0xfd, 0x7be: 0xfd, 0x7bf: 0xfd, // Block 0x1f, offset 0x7c0 0x7c0: 0xa0, 0x7c1: 0xa0, 0x7c2: 0xa0, 0x7c3: 0xa0, 0x7c4: 0xa0, 0x7c5: 0xa0, 0x7c6: 0xa0, 0x7c7: 0xa0, - 0x7c8: 0xa0, 0x7c9: 0xa0, 0x7ca: 0xa0, 0x7cb: 0xa0, 0x7cc: 0xa0, 0x7cd: 0x19d, 0x7ce: 0xfb, 0x7cf: 0xfb, - 0x7d0: 0xfb, 0x7d1: 0xfb, 0x7d2: 0xfb, 0x7d3: 0xfb, 0x7d4: 0xfb, 0x7d5: 0xfb, 0x7d6: 0xfb, 0x7d7: 0xfb, - 0x7d8: 0xfb, 0x7d9: 0xfb, 0x7da: 0xfb, 0x7db: 0xfb, 0x7dc: 0xfb, 0x7dd: 0xfb, 0x7de: 0xfb, 0x7df: 0xfb, - 0x7e0: 0xfb, 0x7e1: 0xfb, 0x7e2: 0xfb, 0x7e3: 0xfb, 0x7e4: 0xfb, 0x7e5: 0xfb, 0x7e6: 0xfb, 0x7e7: 0xfb, - 0x7e8: 0xfb, 0x7e9: 0xfb, 0x7ea: 0xfb, 0x7eb: 0xfb, 0x7ec: 0xfb, 0x7ed: 0xfb, 0x7ee: 0xfb, 0x7ef: 0xfb, - 0x7f0: 0xfb, 0x7f1: 0xfb, 0x7f2: 0xfb, 0x7f3: 0xfb, 0x7f4: 0xfb, 0x7f5: 0xfb, 0x7f6: 0xfb, 0x7f7: 0xfb, - 0x7f8: 0xfb, 0x7f9: 0xfb, 0x7fa: 0xfb, 0x7fb: 0xfb, 0x7fc: 0xfb, 0x7fd: 0xfb, 0x7fe: 0xfb, 0x7ff: 0xfb, + 0x7c8: 0xa0, 0x7c9: 0xa0, 0x7ca: 0xa0, 0x7cb: 0xa0, 0x7cc: 0xa0, 0x7cd: 0x19d, 0x7ce: 0xfd, 0x7cf: 0xfd, + 0x7d0: 0xfd, 0x7d1: 0xfd, 0x7d2: 0xfd, 0x7d3: 0xfd, 0x7d4: 0xfd, 0x7d5: 0xfd, 0x7d6: 0xfd, 0x7d7: 0xfd, + 0x7d8: 0xfd, 0x7d9: 0xfd, 0x7da: 0xfd, 0x7db: 0xfd, 0x7dc: 0xfd, 0x7dd: 0xfd, 0x7de: 0xfd, 0x7df: 0xfd, + 0x7e0: 0xfd, 0x7e1: 0xfd, 0x7e2: 0xfd, 0x7e3: 0xfd, 0x7e4: 0xfd, 0x7e5: 0xfd, 0x7e6: 0xfd, 0x7e7: 0xfd, + 0x7e8: 0xfd, 0x7e9: 0xfd, 0x7ea: 0xfd, 0x7eb: 0xfd, 0x7ec: 0xfd, 0x7ed: 0xfd, 0x7ee: 0xfd, 0x7ef: 0xfd, + 0x7f0: 0xfd, 0x7f1: 0xfd, 0x7f2: 0xfd, 0x7f3: 0xfd, 0x7f4: 0xfd, 0x7f5: 0xfd, 0x7f6: 0xfd, 0x7f7: 0xfd, + 0x7f8: 0xfd, 0x7f9: 0xfd, 0x7fa: 0xfd, 0x7fb: 0xfd, 0x7fc: 0xfd, 0x7fd: 0xfd, 0x7fe: 0xfd, 0x7ff: 0xfd, // Block 0x20, offset 0x800 0x810: 0x0d, 0x811: 0x0e, 0x812: 0x0f, 0x813: 0x10, 0x814: 0x11, 0x815: 0x0b, 0x816: 0x12, 0x817: 0x07, 0x818: 0x13, 0x819: 0x0b, 0x81a: 0x0b, 0x81b: 0x14, 0x81c: 0x0b, 0x81d: 0x15, 0x81e: 0x16, 0x81f: 0x17, @@ -2370,14 +2513,14 @@ var idnaIndex = [2368]uint16{ 0x870: 0x0b, 0x871: 0x0b, 0x872: 0x0b, 0x873: 0x0b, 0x874: 0x0b, 0x875: 0x0b, 0x876: 0x0b, 0x877: 0x0b, 0x878: 0x0b, 0x879: 0x0b, 0x87a: 0x0b, 0x87b: 0x0b, 0x87c: 0x0b, 0x87d: 0x0b, 0x87e: 0x0b, 0x87f: 0x0b, // Block 0x22, offset 0x880 - 0x880: 0x19e, 0x881: 0x19f, 0x882: 0xfb, 0x883: 0xfb, 0x884: 0x1a0, 0x885: 0x1a0, 0x886: 0x1a0, 0x887: 0x1a1, - 0x888: 0xfb, 0x889: 0xfb, 0x88a: 0xfb, 0x88b: 0xfb, 0x88c: 0xfb, 0x88d: 0xfb, 0x88e: 0xfb, 0x88f: 0xfb, - 0x890: 0xfb, 0x891: 0xfb, 0x892: 0xfb, 0x893: 0xfb, 0x894: 0xfb, 0x895: 0xfb, 0x896: 0xfb, 0x897: 0xfb, - 0x898: 0xfb, 0x899: 0xfb, 0x89a: 0xfb, 0x89b: 0xfb, 0x89c: 0xfb, 0x89d: 0xfb, 0x89e: 0xfb, 0x89f: 0xfb, - 0x8a0: 0xfb, 0x8a1: 0xfb, 0x8a2: 0xfb, 0x8a3: 0xfb, 0x8a4: 0xfb, 0x8a5: 0xfb, 0x8a6: 0xfb, 0x8a7: 0xfb, - 0x8a8: 0xfb, 0x8a9: 0xfb, 0x8aa: 0xfb, 0x8ab: 0xfb, 0x8ac: 0xfb, 0x8ad: 0xfb, 0x8ae: 0xfb, 0x8af: 0xfb, - 0x8b0: 0xfb, 0x8b1: 0xfb, 0x8b2: 0xfb, 0x8b3: 0xfb, 0x8b4: 0xfb, 0x8b5: 0xfb, 0x8b6: 0xfb, 0x8b7: 0xfb, - 0x8b8: 0xfb, 0x8b9: 0xfb, 0x8ba: 0xfb, 0x8bb: 0xfb, 0x8bc: 0xfb, 0x8bd: 0xfb, 0x8be: 0xfb, 0x8bf: 0xfb, + 0x880: 0x19e, 0x881: 0x19f, 0x882: 0xfd, 0x883: 0xfd, 0x884: 0x1a0, 0x885: 0x1a0, 0x886: 0x1a0, 0x887: 0x1a1, + 0x888: 0xfd, 0x889: 0xfd, 0x88a: 0xfd, 0x88b: 0xfd, 0x88c: 0xfd, 0x88d: 0xfd, 0x88e: 0xfd, 0x88f: 0xfd, + 0x890: 0xfd, 0x891: 0xfd, 0x892: 0xfd, 0x893: 0xfd, 0x894: 0xfd, 0x895: 0xfd, 0x896: 0xfd, 0x897: 0xfd, + 0x898: 0xfd, 0x899: 0xfd, 0x89a: 0xfd, 0x89b: 0xfd, 0x89c: 0xfd, 0x89d: 0xfd, 0x89e: 0xfd, 0x89f: 0xfd, + 0x8a0: 0xfd, 0x8a1: 0xfd, 0x8a2: 0xfd, 0x8a3: 0xfd, 0x8a4: 0xfd, 0x8a5: 0xfd, 0x8a6: 0xfd, 0x8a7: 0xfd, + 0x8a8: 0xfd, 0x8a9: 0xfd, 0x8aa: 0xfd, 0x8ab: 0xfd, 0x8ac: 0xfd, 0x8ad: 0xfd, 0x8ae: 0xfd, 0x8af: 0xfd, + 0x8b0: 0xfd, 0x8b1: 0xfd, 0x8b2: 0xfd, 0x8b3: 0xfd, 0x8b4: 0xfd, 0x8b5: 0xfd, 0x8b6: 0xfd, 0x8b7: 0xfd, + 0x8b8: 0xfd, 0x8b9: 0xfd, 0x8ba: 0xfd, 0x8bb: 0xfd, 0x8bc: 0xfd, 0x8bd: 0xfd, 0x8be: 0xfd, 0x8bf: 0xfd, // Block 0x23, offset 0x8c0 0x8c0: 0x0b, 0x8c1: 0x0b, 0x8c2: 0x0b, 0x8c3: 0x0b, 0x8c4: 0x0b, 0x8c5: 0x0b, 0x8c6: 0x0b, 0x8c7: 0x0b, 0x8c8: 0x0b, 0x8c9: 0x0b, 0x8ca: 0x0b, 0x8cb: 0x0b, 0x8cc: 0x0b, 0x8cd: 0x0b, 0x8ce: 0x0b, 0x8cf: 0x0b, @@ -2393,10 +2536,10 @@ var idnaIndex = [2368]uint16{ } // idnaSparseOffset: 292 entries, 584 bytes -var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x85, 0x8b, 0x94, 0xa4, 0xb2, 0xbd, 0xca, 0xdb, 0xe5, 0xec, 0xf9, 0x10a, 0x111, 0x11c, 0x12b, 0x139, 0x143, 0x145, 0x14a, 0x14d, 0x150, 0x152, 0x15e, 0x169, 0x171, 0x177, 0x17d, 0x182, 0x187, 0x18a, 0x18e, 0x194, 0x199, 0x1a5, 0x1af, 0x1b5, 0x1c6, 0x1d0, 0x1d3, 0x1db, 0x1de, 0x1eb, 0x1f3, 0x1f7, 0x1fe, 0x206, 0x216, 0x222, 0x225, 0x22f, 0x23b, 0x247, 0x253, 0x25b, 0x260, 0x26d, 0x27e, 0x282, 0x28d, 0x291, 0x29a, 0x2a2, 0x2a8, 0x2ad, 0x2b0, 0x2b4, 0x2ba, 0x2be, 0x2c2, 0x2c6, 0x2cc, 0x2d4, 0x2db, 0x2e6, 0x2f0, 0x2f4, 0x2f7, 0x2fd, 0x301, 0x303, 0x306, 0x308, 0x30b, 0x315, 0x318, 0x327, 0x32b, 0x330, 0x333, 0x337, 0x33c, 0x341, 0x347, 0x358, 0x368, 0x36e, 0x372, 0x381, 0x386, 0x38e, 0x398, 0x3a3, 0x3ab, 0x3bc, 0x3c5, 0x3d5, 0x3e2, 0x3ee, 0x3f3, 0x400, 0x404, 0x409, 0x40b, 0x40d, 0x411, 0x413, 0x417, 0x420, 0x426, 0x42a, 0x43a, 0x444, 0x449, 0x44c, 0x452, 0x459, 0x45e, 0x462, 0x468, 0x46d, 0x476, 0x47b, 0x481, 0x488, 0x48f, 0x496, 0x49a, 0x49f, 0x4a2, 0x4a7, 0x4b3, 0x4b9, 0x4be, 0x4c5, 0x4cd, 0x4d2, 0x4d6, 0x4e6, 0x4ed, 0x4f1, 0x4f5, 0x4fc, 0x4fe, 0x501, 0x504, 0x508, 0x511, 0x515, 0x51d, 0x525, 0x52d, 0x539, 0x545, 0x54b, 0x554, 0x560, 0x567, 0x570, 0x57b, 0x582, 0x591, 0x59e, 0x5ab, 0x5b4, 0x5b8, 0x5c7, 0x5cf, 0x5da, 0x5e3, 0x5e9, 0x5f1, 0x5fa, 0x605, 0x608, 0x614, 0x61d, 0x620, 0x625, 0x62e, 0x633, 0x640, 0x64b, 0x654, 0x65e, 0x661, 0x66b, 0x674, 0x680, 0x68d, 0x69a, 0x6a8, 0x6af, 0x6b3, 0x6b7, 0x6ba, 0x6bf, 0x6c2, 0x6c7, 0x6ca, 0x6d1, 0x6d8, 0x6dc, 0x6e7, 0x6ea, 0x6ed, 0x6f0, 0x6f6, 0x6fc, 0x705, 0x708, 0x70b, 0x70e, 0x711, 0x718, 0x71b, 0x720, 0x72a, 0x72d, 0x731, 0x740, 0x74c, 0x750, 0x755, 0x759, 0x75e, 0x762, 0x767, 0x770, 0x77b, 0x781, 0x787, 0x78d, 0x793, 0x79c, 0x79f, 0x7a2, 0x7a6, 0x7aa, 0x7ae, 0x7b4, 0x7ba, 0x7bf, 0x7c2, 0x7d2, 0x7d9, 0x7dc, 0x7e1, 0x7e5, 0x7eb, 0x7f2, 0x7f6, 0x7fa, 0x803, 0x80a, 0x80f, 0x813, 0x821, 0x824, 0x827, 0x82b, 0x82f, 0x832, 0x842, 0x853, 0x856, 0x85b, 0x85d, 0x85f} +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x85, 0x8b, 0x94, 0xa4, 0xb2, 0xbd, 0xca, 0xdb, 0xe5, 0xec, 0xf9, 0x10a, 0x111, 0x11c, 0x12b, 0x139, 0x143, 0x145, 0x14a, 0x14d, 0x150, 0x152, 0x15e, 0x169, 0x171, 0x177, 0x17d, 0x182, 0x187, 0x18a, 0x18e, 0x194, 0x199, 0x1a5, 0x1af, 0x1b5, 0x1c6, 0x1d0, 0x1d3, 0x1db, 0x1de, 0x1eb, 0x1f3, 0x1f7, 0x1fe, 0x206, 0x216, 0x222, 0x225, 0x22f, 0x23b, 0x247, 0x253, 0x25b, 0x260, 0x26d, 0x27e, 0x282, 0x28d, 0x291, 0x29a, 0x2a2, 0x2a8, 0x2ad, 0x2b0, 0x2b4, 0x2ba, 0x2be, 0x2c2, 0x2c6, 0x2cc, 0x2d4, 0x2db, 0x2e6, 0x2f0, 0x2f4, 0x2f7, 0x2fd, 0x301, 0x303, 0x306, 0x308, 0x30b, 0x315, 0x318, 0x327, 0x32b, 0x32f, 0x331, 0x33a, 0x33d, 0x341, 0x346, 0x34b, 0x351, 0x362, 0x372, 0x378, 0x37c, 0x38b, 0x390, 0x398, 0x3a2, 0x3ad, 0x3b5, 0x3c6, 0x3cf, 0x3df, 0x3ec, 0x3f8, 0x3fd, 0x40a, 0x40e, 0x413, 0x415, 0x417, 0x41b, 0x41d, 0x421, 0x42a, 0x430, 0x434, 0x444, 0x44e, 0x453, 0x456, 0x45c, 0x463, 0x468, 0x46c, 0x472, 0x477, 0x480, 0x485, 0x48b, 0x492, 0x499, 0x4a0, 0x4a4, 0x4a9, 0x4ac, 0x4b1, 0x4bd, 0x4c3, 0x4c8, 0x4cf, 0x4d7, 0x4dc, 0x4e0, 0x4f0, 0x4f7, 0x4fb, 0x4ff, 0x506, 0x508, 0x50b, 0x50e, 0x512, 0x51b, 0x51f, 0x527, 0x52f, 0x537, 0x543, 0x54f, 0x555, 0x55e, 0x56a, 0x571, 0x57a, 0x585, 0x58c, 0x59b, 0x5a8, 0x5b5, 0x5be, 0x5c2, 0x5d1, 0x5d9, 0x5e4, 0x5ed, 0x5f3, 0x5fb, 0x604, 0x60f, 0x612, 0x61e, 0x627, 0x62a, 0x62f, 0x638, 0x63d, 0x64a, 0x655, 0x65e, 0x668, 0x66b, 0x675, 0x67e, 0x68a, 0x697, 0x6a4, 0x6b2, 0x6b9, 0x6bd, 0x6c1, 0x6c4, 0x6c9, 0x6cc, 0x6d1, 0x6d4, 0x6db, 0x6e2, 0x6e6, 0x6f1, 0x6f4, 0x6f7, 0x6fa, 0x700, 0x706, 0x70f, 0x712, 0x715, 0x718, 0x71b, 0x722, 0x725, 0x72a, 0x734, 0x737, 0x73b, 0x74a, 0x756, 0x75a, 0x75f, 0x763, 0x768, 0x76c, 0x771, 0x77a, 0x785, 0x78b, 0x791, 0x797, 0x79d, 0x7a6, 0x7a9, 0x7ac, 0x7b0, 0x7b4, 0x7b8, 0x7be, 0x7c4, 0x7c9, 0x7cc, 0x7dc, 0x7e3, 0x7e6, 0x7eb, 0x7ef, 0x7f5, 0x7fc, 0x800, 0x804, 0x80d, 0x814, 0x819, 0x81d, 0x82b, 0x82e, 0x831, 0x835, 0x839, 0x83c, 0x83f, 0x844, 0x846, 0x848} -// idnaSparseValues: 2146 entries, 8584 bytes -var idnaSparseValues = [2146]valueRange{ +// idnaSparseValues: 2123 entries, 8492 bytes +var idnaSparseValues = [2123]valueRange{ // Block 0x0, offset 0x0 {value: 0x0000, lo: 0x07}, {value: 0xe105, lo: 0x80, hi: 0x96}, @@ -2427,15 +2570,15 @@ var idnaSparseValues = [2146]valueRange{ // Block 0x2, offset 0x19 {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x0249, lo: 0xb0, hi: 0xb0}, + {value: 0x00a9, lo: 0xb0, hi: 0xb0}, {value: 0x037d, lo: 0xb1, hi: 0xb1}, - {value: 0x0259, lo: 0xb2, hi: 0xb2}, - {value: 0x0269, lo: 0xb3, hi: 0xb3}, + {value: 0x00b1, lo: 0xb2, hi: 0xb2}, + {value: 0x00b9, lo: 0xb3, hi: 0xb3}, {value: 0x034d, lo: 0xb4, hi: 0xb4}, {value: 0x0395, lo: 0xb5, hi: 0xb5}, {value: 0xe1bd, lo: 0xb6, hi: 0xb6}, - {value: 0x0279, lo: 0xb7, hi: 0xb7}, - {value: 0x0289, lo: 0xb8, hi: 0xb8}, + {value: 0x00c1, lo: 0xb7, hi: 0xb7}, + {value: 0x00c9, lo: 0xb8, hi: 0xb8}, {value: 0x0008, lo: 0xb9, hi: 0xbf}, // Block 0x3, offset 0x25 {value: 0x0000, lo: 0x01}, @@ -2457,7 +2600,7 @@ var idnaSparseValues = [2146]valueRange{ // Block 0x6, offset 0x33 {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x0401, lo: 0x87, hi: 0x87}, + {value: 0x0131, lo: 0x87, hi: 0x87}, {value: 0x0008, lo: 0x88, hi: 0x88}, {value: 0x0018, lo: 0x89, hi: 0x8a}, {value: 0x0040, lo: 0x8b, hi: 0x8c}, @@ -2643,7 +2786,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0x81, hi: 0xb0}, {value: 0x3308, lo: 0xb1, hi: 0xb1}, {value: 0x0008, lo: 0xb2, hi: 0xb2}, - {value: 0x08f1, lo: 0xb3, hi: 0xb3}, + {value: 0x01f1, lo: 0xb3, hi: 0xb3}, {value: 0x3308, lo: 0xb4, hi: 0xb9}, {value: 0x3b08, lo: 0xba, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbe}, @@ -2666,8 +2809,8 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x8e, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9b}, - {value: 0x0961, lo: 0x9c, hi: 0x9c}, - {value: 0x0999, lo: 0x9d, hi: 0x9d}, + {value: 0x0201, lo: 0x9c, hi: 0x9c}, + {value: 0x0209, lo: 0x9d, hi: 0x9d}, {value: 0x0008, lo: 0x9e, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, // Block 0x18, offset 0xf9 @@ -3075,13 +3218,13 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0xbe, hi: 0xbf}, // Block 0x44, offset 0x260 {value: 0x0000, lo: 0x0c}, - {value: 0x0e29, lo: 0x80, hi: 0x80}, - {value: 0x0e41, lo: 0x81, hi: 0x81}, - {value: 0x0e59, lo: 0x82, hi: 0x82}, - {value: 0x0e71, lo: 0x83, hi: 0x83}, - {value: 0x0e89, lo: 0x84, hi: 0x85}, - {value: 0x0ea1, lo: 0x86, hi: 0x86}, - {value: 0x0eb9, lo: 0x87, hi: 0x87}, + {value: 0x02a9, lo: 0x80, hi: 0x80}, + {value: 0x02b1, lo: 0x81, hi: 0x81}, + {value: 0x02b9, lo: 0x82, hi: 0x82}, + {value: 0x02c1, lo: 0x83, hi: 0x83}, + {value: 0x02c9, lo: 0x84, hi: 0x85}, + {value: 0x02d1, lo: 0x86, hi: 0x86}, + {value: 0x02d9, lo: 0x87, hi: 0x87}, {value: 0x057d, lo: 0x88, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x8f}, {value: 0x059d, lo: 0x90, hi: 0xba}, @@ -3133,18 +3276,18 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x83, hi: 0x83}, {value: 0x0008, lo: 0x84, hi: 0x84}, {value: 0x0018, lo: 0x85, hi: 0x88}, - {value: 0x24c1, lo: 0x89, hi: 0x89}, + {value: 0x0851, lo: 0x89, hi: 0x89}, {value: 0x0018, lo: 0x8a, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xbf}, // Block 0x4a, offset 0x29a {value: 0x0000, lo: 0x07}, {value: 0x0018, lo: 0x80, hi: 0xab}, - {value: 0x24f1, lo: 0xac, hi: 0xac}, - {value: 0x2529, lo: 0xad, hi: 0xad}, + {value: 0x0859, lo: 0xac, hi: 0xac}, + {value: 0x0861, lo: 0xad, hi: 0xad}, {value: 0x0018, lo: 0xae, hi: 0xae}, - {value: 0x2579, lo: 0xaf, hi: 0xaf}, - {value: 0x25b1, lo: 0xb0, hi: 0xb0}, + {value: 0x0869, lo: 0xaf, hi: 0xaf}, + {value: 0x0871, lo: 0xb0, hi: 0xb0}, {value: 0x0018, lo: 0xb1, hi: 0xbf}, // Block 0x4b, offset 0x2a2 {value: 0x0000, lo: 0x05}, @@ -3166,19 +3309,19 @@ var idnaSparseValues = [2146]valueRange{ // Block 0x4e, offset 0x2b0 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x8b}, - {value: 0x28c1, lo: 0x8c, hi: 0x8c}, + {value: 0x0929, lo: 0x8c, hi: 0x8c}, {value: 0x0018, lo: 0x8d, hi: 0xbf}, // Block 0x4f, offset 0x2b4 {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0xb3}, {value: 0x0e7e, lo: 0xb4, hi: 0xb4}, - {value: 0x292a, lo: 0xb5, hi: 0xb5}, + {value: 0x0932, lo: 0xb5, hi: 0xb5}, {value: 0x0e9e, lo: 0xb6, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xbf}, // Block 0x50, offset 0x2ba {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x9b}, - {value: 0x2941, lo: 0x9c, hi: 0x9c}, + {value: 0x0939, lo: 0x9c, hi: 0x9c}, {value: 0x0018, lo: 0x9d, hi: 0xbf}, // Block 0x51, offset 0x2be {value: 0x0000, lo: 0x03}, @@ -3277,16 +3420,16 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0x80, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0x98}, {value: 0x3308, lo: 0x99, hi: 0x9a}, - {value: 0x29e2, lo: 0x9b, hi: 0x9b}, - {value: 0x2a0a, lo: 0x9c, hi: 0x9c}, + {value: 0x096a, lo: 0x9b, hi: 0x9b}, + {value: 0x0972, lo: 0x9c, hi: 0x9c}, {value: 0x0008, lo: 0x9d, hi: 0x9e}, - {value: 0x2a31, lo: 0x9f, hi: 0x9f}, + {value: 0x0979, lo: 0x9f, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xa0}, {value: 0x0008, lo: 0xa1, hi: 0xbf}, // Block 0x61, offset 0x315 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xbe}, - {value: 0x2a69, lo: 0xbf, hi: 0xbf}, + {value: 0x0981, lo: 0xbf, hi: 0xbf}, // Block 0x62, offset 0x318 {value: 0x0000, lo: 0x0e}, {value: 0x0040, lo: 0x80, hi: 0x84}, @@ -3309,46 +3452,58 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa4, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, // Block 0x64, offset 0x32b - {value: 0x0030, lo: 0x04}, - {value: 0x2aa2, lo: 0x80, hi: 0x9d}, - {value: 0x305a, lo: 0x9e, hi: 0x9e}, + {value: 0x0008, lo: 0x03}, + {value: 0x098a, lo: 0x80, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0x9f}, - {value: 0x30a2, lo: 0xa0, hi: 0xbf}, - // Block 0x65, offset 0x330 + {value: 0x0a82, lo: 0xa0, hi: 0xbf}, + // Block 0x65, offset 0x32f + {value: 0x0008, lo: 0x01}, + {value: 0x0d19, lo: 0x80, hi: 0xbf}, + // Block 0x66, offset 0x331 + {value: 0x0008, lo: 0x08}, + {value: 0x0f19, lo: 0x80, hi: 0xb0}, + {value: 0x4045, lo: 0xb1, hi: 0xb1}, + {value: 0x10a1, lo: 0xb2, hi: 0xb3}, + {value: 0x4065, lo: 0xb4, hi: 0xb4}, + {value: 0x10b1, lo: 0xb5, hi: 0xb7}, + {value: 0x4085, lo: 0xb8, hi: 0xb8}, + {value: 0x4085, lo: 0xb9, hi: 0xb9}, + {value: 0x10c9, lo: 0xba, hi: 0xbf}, + // Block 0x67, offset 0x33a {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0x66, offset 0x333 + // Block 0x68, offset 0x33d {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0x8c}, {value: 0x0040, lo: 0x8d, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xbf}, - // Block 0x67, offset 0x337 + // Block 0x69, offset 0x341 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0xbd}, {value: 0x0018, lo: 0xbe, hi: 0xbf}, - // Block 0x68, offset 0x33c + // Block 0x6a, offset 0x346 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x8c}, {value: 0x0018, lo: 0x8d, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xbf}, - // Block 0x69, offset 0x341 + // Block 0x6b, offset 0x34b {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0xa5}, {value: 0x0018, lo: 0xa6, hi: 0xaf}, {value: 0x3308, lo: 0xb0, hi: 0xb1}, {value: 0x0018, lo: 0xb2, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0x6a, offset 0x347 + // Block 0x6c, offset 0x351 {value: 0x0000, lo: 0x10}, {value: 0x0040, lo: 0x80, hi: 0x81}, {value: 0xe00d, lo: 0x82, hi: 0x82}, {value: 0x0008, lo: 0x83, hi: 0x83}, {value: 0x03f5, lo: 0x84, hi: 0x84}, - {value: 0x1329, lo: 0x85, hi: 0x85}, + {value: 0x0479, lo: 0x85, hi: 0x85}, {value: 0x447d, lo: 0x86, hi: 0x86}, {value: 0xe07d, lo: 0x87, hi: 0x87}, {value: 0x0008, lo: 0x88, hi: 0x88}, @@ -3357,10 +3512,10 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x8b, hi: 0xb4}, {value: 0xe01d, lo: 0xb5, hi: 0xb5}, {value: 0x0008, lo: 0xb6, hi: 0xb7}, - {value: 0x2009, lo: 0xb8, hi: 0xb8}, - {value: 0x6ec1, lo: 0xb9, hi: 0xb9}, + {value: 0x0741, lo: 0xb8, hi: 0xb8}, + {value: 0x13f1, lo: 0xb9, hi: 0xb9}, {value: 0x0008, lo: 0xba, hi: 0xbf}, - // Block 0x6b, offset 0x358 + // Block 0x6d, offset 0x362 {value: 0x0000, lo: 0x0f}, {value: 0x0008, lo: 0x80, hi: 0x81}, {value: 0x3308, lo: 0x82, hi: 0x82}, @@ -3377,19 +3532,19 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xad, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x6c, offset 0x368 + // Block 0x6e, offset 0x372 {value: 0x0000, lo: 0x05}, {value: 0x0208, lo: 0x80, hi: 0xb1}, {value: 0x0108, lo: 0xb2, hi: 0xb2}, {value: 0x0008, lo: 0xb3, hi: 0xb3}, {value: 0x0018, lo: 0xb4, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0x6d, offset 0x36e + // Block 0x6f, offset 0x378 {value: 0x0000, lo: 0x03}, {value: 0x3008, lo: 0x80, hi: 0x81}, {value: 0x0008, lo: 0x82, hi: 0xb3}, {value: 0x3008, lo: 0xb4, hi: 0xbf}, - // Block 0x6e, offset 0x372 + // Block 0x70, offset 0x37c {value: 0x0000, lo: 0x0e}, {value: 0x3008, lo: 0x80, hi: 0x83}, {value: 0x3b08, lo: 0x84, hi: 0x84}, @@ -3405,13 +3560,13 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0xbc, hi: 0xbc}, {value: 0x0008, lo: 0xbd, hi: 0xbe}, {value: 0x3308, lo: 0xbf, hi: 0xbf}, - // Block 0x6f, offset 0x381 + // Block 0x71, offset 0x38b {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xa5}, {value: 0x3308, lo: 0xa6, hi: 0xad}, {value: 0x0018, lo: 0xae, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x70, offset 0x386 + // Block 0x72, offset 0x390 {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0x86}, {value: 0x3308, lo: 0x87, hi: 0x91}, @@ -3420,7 +3575,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x94, hi: 0x9e}, {value: 0x0018, lo: 0x9f, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0x71, offset 0x38e + // Block 0x73, offset 0x398 {value: 0x0000, lo: 0x09}, {value: 0x3308, lo: 0x80, hi: 0x82}, {value: 0x3008, lo: 0x83, hi: 0x83}, @@ -3431,7 +3586,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0xba, hi: 0xbb}, {value: 0x3308, lo: 0xbc, hi: 0xbd}, {value: 0x3008, lo: 0xbe, hi: 0xbf}, - // Block 0x72, offset 0x398 + // Block 0x74, offset 0x3a2 {value: 0x0000, lo: 0x0a}, {value: 0x3808, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x8d}, @@ -3443,7 +3598,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xa5, hi: 0xa5}, {value: 0x0008, lo: 0xa6, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0x73, offset 0x3a3 + // Block 0x75, offset 0x3ad {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0xa8}, {value: 0x3308, lo: 0xa9, hi: 0xae}, @@ -3452,7 +3607,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0xb3, hi: 0xb4}, {value: 0x3308, lo: 0xb5, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x74, offset 0x3ab + // Block 0x76, offset 0x3b5 {value: 0x0000, lo: 0x10}, {value: 0x0008, lo: 0x80, hi: 0x82}, {value: 0x3308, lo: 0x83, hi: 0x83}, @@ -3470,7 +3625,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xbc, hi: 0xbc}, {value: 0x3008, lo: 0xbd, hi: 0xbd}, {value: 0x0008, lo: 0xbe, hi: 0xbf}, - // Block 0x75, offset 0x3bc + // Block 0x77, offset 0x3c6 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0xaf}, {value: 0x3308, lo: 0xb0, hi: 0xb0}, @@ -3480,7 +3635,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xb7, hi: 0xb8}, {value: 0x0008, lo: 0xb9, hi: 0xbd}, {value: 0x3308, lo: 0xbe, hi: 0xbf}, - // Block 0x76, offset 0x3c5 + // Block 0x78, offset 0x3cf {value: 0x0000, lo: 0x0f}, {value: 0x0008, lo: 0x80, hi: 0x80}, {value: 0x3308, lo: 0x81, hi: 0x81}, @@ -3497,7 +3652,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0xb5, hi: 0xb5}, {value: 0x3b08, lo: 0xb6, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x77, offset 0x3d5 + // Block 0x79, offset 0x3df {value: 0x0000, lo: 0x0c}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0008, lo: 0x81, hi: 0x86}, @@ -3511,26 +3666,26 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xa8, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x78, offset 0x3e2 + // Block 0x7a, offset 0x3ec {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0x9a}, {value: 0x0018, lo: 0x9b, hi: 0x9b}, {value: 0x449d, lo: 0x9c, hi: 0x9c}, {value: 0x44b5, lo: 0x9d, hi: 0x9d}, - {value: 0x2971, lo: 0x9e, hi: 0x9e}, + {value: 0x0941, lo: 0x9e, hi: 0x9e}, {value: 0xe06d, lo: 0x9f, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa8}, - {value: 0x6ed9, lo: 0xa9, hi: 0xa9}, + {value: 0x13f9, lo: 0xa9, hi: 0xa9}, {value: 0x0018, lo: 0xaa, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xaf}, {value: 0x44cd, lo: 0xb0, hi: 0xbf}, - // Block 0x79, offset 0x3ee + // Block 0x7b, offset 0x3f8 {value: 0x0000, lo: 0x04}, {value: 0x44ed, lo: 0x80, hi: 0x8f}, {value: 0x450d, lo: 0x90, hi: 0x9f}, {value: 0x452d, lo: 0xa0, hi: 0xaf}, {value: 0x450d, lo: 0xb0, hi: 0xbf}, - // Block 0x7a, offset 0x3f3 + // Block 0x7c, offset 0x3fd {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0xa2}, {value: 0x3008, lo: 0xa3, hi: 0xa4}, @@ -3544,76 +3699,76 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xae, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x7b, offset 0x400 + // Block 0x7d, offset 0x40a {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xa3}, {value: 0x0040, lo: 0xa4, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xbf}, - // Block 0x7c, offset 0x404 + // Block 0x7e, offset 0x40e {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x8a}, {value: 0x0018, lo: 0x8b, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x7d, offset 0x409 + // Block 0x7f, offset 0x413 {value: 0x0000, lo: 0x01}, {value: 0x0040, lo: 0x80, hi: 0xbf}, - // Block 0x7e, offset 0x40b + // Block 0x80, offset 0x415 {value: 0x0020, lo: 0x01}, {value: 0x454d, lo: 0x80, hi: 0xbf}, - // Block 0x7f, offset 0x40d + // Block 0x81, offset 0x417 {value: 0x0020, lo: 0x03}, {value: 0x4d4d, lo: 0x80, hi: 0x94}, {value: 0x4b0d, lo: 0x95, hi: 0x95}, {value: 0x4fed, lo: 0x96, hi: 0xbf}, - // Block 0x80, offset 0x411 + // Block 0x82, offset 0x41b {value: 0x0020, lo: 0x01}, {value: 0x552d, lo: 0x80, hi: 0xbf}, - // Block 0x81, offset 0x413 + // Block 0x83, offset 0x41d {value: 0x0020, lo: 0x03}, {value: 0x5d2d, lo: 0x80, hi: 0x84}, {value: 0x568d, lo: 0x85, hi: 0x85}, {value: 0x5dcd, lo: 0x86, hi: 0xbf}, - // Block 0x82, offset 0x417 + // Block 0x84, offset 0x421 {value: 0x0020, lo: 0x08}, {value: 0x6b8d, lo: 0x80, hi: 0x8f}, {value: 0x6d4d, lo: 0x90, hi: 0x90}, {value: 0x6d8d, lo: 0x91, hi: 0xab}, - {value: 0x6ef1, lo: 0xac, hi: 0xac}, + {value: 0x1401, lo: 0xac, hi: 0xac}, {value: 0x70ed, lo: 0xad, hi: 0xad}, {value: 0x0040, lo: 0xae, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xaf}, {value: 0x710d, lo: 0xb0, hi: 0xbf}, - // Block 0x83, offset 0x420 + // Block 0x85, offset 0x42a {value: 0x0020, lo: 0x05}, {value: 0x730d, lo: 0x80, hi: 0xad}, {value: 0x656d, lo: 0xae, hi: 0xae}, {value: 0x78cd, lo: 0xaf, hi: 0xb5}, {value: 0x6f8d, lo: 0xb6, hi: 0xb6}, {value: 0x79ad, lo: 0xb7, hi: 0xbf}, - // Block 0x84, offset 0x426 - {value: 0x0028, lo: 0x03}, - {value: 0x7c71, lo: 0x80, hi: 0x82}, - {value: 0x7c31, lo: 0x83, hi: 0x83}, - {value: 0x7ce9, lo: 0x84, hi: 0xbf}, - // Block 0x85, offset 0x42a - {value: 0x0038, lo: 0x0f}, - {value: 0x9e01, lo: 0x80, hi: 0x83}, - {value: 0x9ea9, lo: 0x84, hi: 0x85}, - {value: 0x9ee1, lo: 0x86, hi: 0x87}, - {value: 0x9f19, lo: 0x88, hi: 0x8f}, + // Block 0x86, offset 0x430 + {value: 0x0008, lo: 0x03}, + {value: 0x1751, lo: 0x80, hi: 0x82}, + {value: 0x1741, lo: 0x83, hi: 0x83}, + {value: 0x1769, lo: 0x84, hi: 0xbf}, + // Block 0x87, offset 0x434 + {value: 0x0008, lo: 0x0f}, + {value: 0x1d81, lo: 0x80, hi: 0x83}, + {value: 0x1d99, lo: 0x84, hi: 0x85}, + {value: 0x1da1, lo: 0x86, hi: 0x87}, + {value: 0x1da9, lo: 0x88, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0x90}, {value: 0x0040, lo: 0x91, hi: 0x91}, - {value: 0xa0d9, lo: 0x92, hi: 0x97}, - {value: 0xa1f1, lo: 0x98, hi: 0x9c}, - {value: 0xa2d1, lo: 0x9d, hi: 0xb3}, - {value: 0x9d91, lo: 0xb4, hi: 0xb4}, - {value: 0x9e01, lo: 0xb5, hi: 0xb5}, - {value: 0xa7d9, lo: 0xb6, hi: 0xbb}, - {value: 0xa8b9, lo: 0xbc, hi: 0xbc}, - {value: 0xa849, lo: 0xbd, hi: 0xbd}, - {value: 0xa929, lo: 0xbe, hi: 0xbf}, - // Block 0x86, offset 0x43a + {value: 0x1de9, lo: 0x92, hi: 0x97}, + {value: 0x1e11, lo: 0x98, hi: 0x9c}, + {value: 0x1e31, lo: 0x9d, hi: 0xb3}, + {value: 0x1d71, lo: 0xb4, hi: 0xb4}, + {value: 0x1d81, lo: 0xb5, hi: 0xb5}, + {value: 0x1ee9, lo: 0xb6, hi: 0xbb}, + {value: 0x1f09, lo: 0xbc, hi: 0xbc}, + {value: 0x1ef9, lo: 0xbd, hi: 0xbd}, + {value: 0x1f19, lo: 0xbe, hi: 0xbf}, + // Block 0x88, offset 0x444 {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8c}, @@ -3624,24 +3779,24 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xbc, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbe}, {value: 0x0008, lo: 0xbf, hi: 0xbf}, - // Block 0x87, offset 0x444 + // Block 0x89, offset 0x44e {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x8d}, {value: 0x0040, lo: 0x8e, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0xbf}, - // Block 0x88, offset 0x449 + // Block 0x8a, offset 0x453 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0x89, offset 0x44c + // Block 0x8b, offset 0x456 {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0x82}, {value: 0x0040, lo: 0x83, hi: 0x86}, {value: 0x0018, lo: 0x87, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0x8a, offset 0x452 + // Block 0x8c, offset 0x45c {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x8e}, {value: 0x0040, lo: 0x8f, hi: 0x8f}, @@ -3649,31 +3804,31 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x9d, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xa0}, {value: 0x0040, lo: 0xa1, hi: 0xbf}, - // Block 0x8b, offset 0x459 + // Block 0x8d, offset 0x463 {value: 0x0000, lo: 0x04}, {value: 0x0040, lo: 0x80, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xbc}, {value: 0x3308, lo: 0xbd, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x8c, offset 0x45e + // Block 0x8e, offset 0x468 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0x9c}, {value: 0x0040, lo: 0x9d, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x8d, offset 0x462 + // Block 0x8f, offset 0x46c {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x90}, {value: 0x0040, lo: 0x91, hi: 0x9f}, {value: 0x3308, lo: 0xa0, hi: 0xa0}, {value: 0x0018, lo: 0xa1, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x8e, offset 0x468 + // Block 0x90, offset 0x472 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xa3}, {value: 0x0040, lo: 0xa4, hi: 0xac}, {value: 0x0008, lo: 0xad, hi: 0xbf}, - // Block 0x8f, offset 0x46d + // Block 0x91, offset 0x477 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x81}, @@ -3683,20 +3838,20 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0x90, hi: 0xb5}, {value: 0x3308, lo: 0xb6, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0x90, offset 0x476 + // Block 0x92, offset 0x480 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0x9e}, {value: 0x0018, lo: 0x9f, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x91, offset 0x47b + // Block 0x93, offset 0x485 {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x83}, {value: 0x0040, lo: 0x84, hi: 0x87}, {value: 0x0008, lo: 0x88, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0xbf}, - // Block 0x92, offset 0x481 + // Block 0x94, offset 0x48b {value: 0x0000, lo: 0x06}, {value: 0xe145, lo: 0x80, hi: 0x87}, {value: 0xe1c5, lo: 0x88, hi: 0x8f}, @@ -3704,7 +3859,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x8b0d, lo: 0x98, hi: 0x9f}, {value: 0x8b25, lo: 0xa0, hi: 0xa7}, {value: 0x0008, lo: 0xa8, hi: 0xbf}, - // Block 0x93, offset 0x488 + // Block 0x95, offset 0x492 {value: 0x0000, lo: 0x06}, {value: 0x0008, lo: 0x80, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0x9f}, @@ -3712,7 +3867,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xaa, hi: 0xaf}, {value: 0x8b25, lo: 0xb0, hi: 0xb7}, {value: 0x8b0d, lo: 0xb8, hi: 0xbf}, - // Block 0x94, offset 0x48f + // Block 0x96, offset 0x499 {value: 0x0000, lo: 0x06}, {value: 0xe145, lo: 0x80, hi: 0x87}, {value: 0xe1c5, lo: 0x88, hi: 0x8f}, @@ -3720,28 +3875,28 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x94, hi: 0x97}, {value: 0x0008, lo: 0x98, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x95, offset 0x496 + // Block 0x97, offset 0x4a0 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xa7}, {value: 0x0040, lo: 0xa8, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x96, offset 0x49a + // Block 0x98, offset 0x4a4 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xa3}, {value: 0x0040, lo: 0xa4, hi: 0xae}, {value: 0x0018, lo: 0xaf, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0x97, offset 0x49f + // Block 0x99, offset 0x4a9 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x98, offset 0x4a2 + // Block 0x9a, offset 0x4ac {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa7}, {value: 0x0040, lo: 0xa8, hi: 0xbf}, - // Block 0x99, offset 0x4a7 + // Block 0x9b, offset 0x4b1 {value: 0x0000, lo: 0x0b}, {value: 0x0808, lo: 0x80, hi: 0x85}, {value: 0x0040, lo: 0x86, hi: 0x87}, @@ -3754,20 +3909,20 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0808, lo: 0xbc, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbe}, {value: 0x0808, lo: 0xbf, hi: 0xbf}, - // Block 0x9a, offset 0x4b3 + // Block 0x9c, offset 0x4bd {value: 0x0000, lo: 0x05}, {value: 0x0808, lo: 0x80, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0x96}, {value: 0x0818, lo: 0x97, hi: 0x9f}, {value: 0x0808, lo: 0xa0, hi: 0xb6}, {value: 0x0818, lo: 0xb7, hi: 0xbf}, - // Block 0x9b, offset 0x4b9 + // Block 0x9d, offset 0x4c3 {value: 0x0000, lo: 0x04}, {value: 0x0808, lo: 0x80, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0xa6}, {value: 0x0818, lo: 0xa7, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0x9c, offset 0x4be + // Block 0x9e, offset 0x4c8 {value: 0x0000, lo: 0x06}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x0808, lo: 0xa0, hi: 0xb2}, @@ -3775,7 +3930,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0808, lo: 0xb4, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xba}, {value: 0x0818, lo: 0xbb, hi: 0xbf}, - // Block 0x9d, offset 0x4c5 + // Block 0x9f, offset 0x4cf {value: 0x0000, lo: 0x07}, {value: 0x0808, lo: 0x80, hi: 0x95}, {value: 0x0818, lo: 0x96, hi: 0x9b}, @@ -3784,18 +3939,18 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0808, lo: 0xa0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbe}, {value: 0x0818, lo: 0xbf, hi: 0xbf}, - // Block 0x9e, offset 0x4cd + // Block 0xa0, offset 0x4d7 {value: 0x0000, lo: 0x04}, {value: 0x0808, lo: 0x80, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbb}, {value: 0x0818, lo: 0xbc, hi: 0xbd}, {value: 0x0808, lo: 0xbe, hi: 0xbf}, - // Block 0x9f, offset 0x4d2 + // Block 0xa1, offset 0x4dc {value: 0x0000, lo: 0x03}, {value: 0x0818, lo: 0x80, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0x91}, {value: 0x0818, lo: 0x92, hi: 0xbf}, - // Block 0xa0, offset 0x4d6 + // Block 0xa2, offset 0x4e0 {value: 0x0000, lo: 0x0f}, {value: 0x0808, lo: 0x80, hi: 0x80}, {value: 0x3308, lo: 0x81, hi: 0x83}, @@ -3812,7 +3967,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xb8, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbe}, {value: 0x3b08, lo: 0xbf, hi: 0xbf}, - // Block 0xa1, offset 0x4e6 + // Block 0xa3, offset 0x4f0 {value: 0x0000, lo: 0x06}, {value: 0x0818, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x8f}, @@ -3820,17 +3975,17 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x99, hi: 0x9f}, {value: 0x0808, lo: 0xa0, hi: 0xbc}, {value: 0x0818, lo: 0xbd, hi: 0xbf}, - // Block 0xa2, offset 0x4ed + // Block 0xa4, offset 0x4f7 {value: 0x0000, lo: 0x03}, {value: 0x0808, lo: 0x80, hi: 0x9c}, {value: 0x0818, lo: 0x9d, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0xa3, offset 0x4f1 + // Block 0xa5, offset 0x4fb {value: 0x0000, lo: 0x03}, {value: 0x0808, lo: 0x80, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xb8}, {value: 0x0018, lo: 0xb9, hi: 0xbf}, - // Block 0xa4, offset 0x4f5 + // Block 0xa6, offset 0x4ff {value: 0x0000, lo: 0x06}, {value: 0x0808, lo: 0x80, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0x97}, @@ -3838,23 +3993,23 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0808, lo: 0xa0, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xb7}, {value: 0x0818, lo: 0xb8, hi: 0xbf}, - // Block 0xa5, offset 0x4fc + // Block 0xa7, offset 0x506 {value: 0x0000, lo: 0x01}, {value: 0x0808, lo: 0x80, hi: 0xbf}, - // Block 0xa6, offset 0x4fe + // Block 0xa8, offset 0x508 {value: 0x0000, lo: 0x02}, {value: 0x0808, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0xbf}, - // Block 0xa7, offset 0x501 + // Block 0xa9, offset 0x50b {value: 0x0000, lo: 0x02}, {value: 0x03dd, lo: 0x80, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xbf}, - // Block 0xa8, offset 0x504 + // Block 0xaa, offset 0x50e {value: 0x0000, lo: 0x03}, {value: 0x0808, lo: 0x80, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xb9}, {value: 0x0818, lo: 0xba, hi: 0xbf}, - // Block 0xa9, offset 0x508 + // Block 0xab, offset 0x512 {value: 0x0000, lo: 0x08}, {value: 0x0908, lo: 0x80, hi: 0x80}, {value: 0x0a08, lo: 0x81, hi: 0xa1}, @@ -3864,12 +4019,12 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa8, hi: 0xaf}, {value: 0x0808, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0xaa, offset 0x511 + // Block 0xac, offset 0x51b {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x0818, lo: 0xa0, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xab, offset 0x515 + // Block 0xad, offset 0x51f {value: 0x0000, lo: 0x07}, {value: 0x0808, lo: 0x80, hi: 0xa9}, {value: 0x0040, lo: 0xaa, hi: 0xaa}, @@ -3878,7 +4033,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xae, hi: 0xaf}, {value: 0x0808, lo: 0xb0, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0xac, offset 0x51d + // Block 0xae, offset 0x527 {value: 0x0000, lo: 0x07}, {value: 0x0808, lo: 0x80, hi: 0x9c}, {value: 0x0818, lo: 0x9d, hi: 0xa6}, @@ -3887,7 +4042,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0a08, lo: 0xb0, hi: 0xb2}, {value: 0x0c08, lo: 0xb3, hi: 0xb3}, {value: 0x0a08, lo: 0xb4, hi: 0xbf}, - // Block 0xad, offset 0x525 + // Block 0xaf, offset 0x52f {value: 0x0000, lo: 0x07}, {value: 0x0a08, lo: 0x80, hi: 0x84}, {value: 0x0808, lo: 0x85, hi: 0x85}, @@ -3896,7 +4051,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0c18, lo: 0x94, hi: 0x94}, {value: 0x0818, lo: 0x95, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0xbf}, - // Block 0xae, offset 0x52d + // Block 0xb0, offset 0x537 {value: 0x0000, lo: 0x0b}, {value: 0x0040, lo: 0x80, hi: 0xaf}, {value: 0x0a08, lo: 0xb0, hi: 0xb0}, @@ -3909,7 +4064,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0a08, lo: 0xbb, hi: 0xbc}, {value: 0x0c08, lo: 0xbd, hi: 0xbd}, {value: 0x0a08, lo: 0xbe, hi: 0xbf}, - // Block 0xaf, offset 0x539 + // Block 0xb1, offset 0x543 {value: 0x0000, lo: 0x0b}, {value: 0x0808, lo: 0x80, hi: 0x80}, {value: 0x0a08, lo: 0x81, hi: 0x81}, @@ -3922,14 +4077,14 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x8c, hi: 0x9f}, {value: 0x0808, lo: 0xa0, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0xb0, offset 0x545 + // Block 0xb2, offset 0x54f {value: 0x0000, lo: 0x05}, {value: 0x3008, lo: 0x80, hi: 0x80}, {value: 0x3308, lo: 0x81, hi: 0x81}, {value: 0x3008, lo: 0x82, hi: 0x82}, {value: 0x0008, lo: 0x83, hi: 0xb7}, {value: 0x3308, lo: 0xb8, hi: 0xbf}, - // Block 0xb1, offset 0x54b + // Block 0xb3, offset 0x555 {value: 0x0000, lo: 0x08}, {value: 0x3308, lo: 0x80, hi: 0x85}, {value: 0x3b08, lo: 0x86, hi: 0x86}, @@ -3939,7 +4094,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xa6, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbe}, {value: 0x3b08, lo: 0xbf, hi: 0xbf}, - // Block 0xb2, offset 0x554 + // Block 0xb4, offset 0x55e {value: 0x0000, lo: 0x0b}, {value: 0x3308, lo: 0x80, hi: 0x81}, {value: 0x3008, lo: 0x82, hi: 0x82}, @@ -3952,7 +4107,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0xbb, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbd}, {value: 0x0018, lo: 0xbe, hi: 0xbf}, - // Block 0xb3, offset 0x560 + // Block 0xb5, offset 0x56a {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x81}, {value: 0x0040, lo: 0x82, hi: 0x8f}, @@ -3960,7 +4115,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa9, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0xb4, offset 0x567 + // Block 0xb6, offset 0x571 {value: 0x0000, lo: 0x08}, {value: 0x3308, lo: 0x80, hi: 0x82}, {value: 0x0008, lo: 0x83, hi: 0xa6}, @@ -3970,7 +4125,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3b08, lo: 0xb3, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xb5}, {value: 0x0008, lo: 0xb6, hi: 0xbf}, - // Block 0xb5, offset 0x570 + // Block 0xb7, offset 0x57a {value: 0x0000, lo: 0x0a}, {value: 0x0018, lo: 0x80, hi: 0x83}, {value: 0x0008, lo: 0x84, hi: 0x84}, @@ -3982,7 +4137,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0xb4, hi: 0xb5}, {value: 0x0008, lo: 0xb6, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0xb6, offset 0x57b + // Block 0xb8, offset 0x585 {value: 0x0000, lo: 0x06}, {value: 0x3308, lo: 0x80, hi: 0x81}, {value: 0x3008, lo: 0x82, hi: 0x82}, @@ -3990,7 +4145,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0xb3, hi: 0xb5}, {value: 0x3308, lo: 0xb6, hi: 0xbe}, {value: 0x3008, lo: 0xbf, hi: 0xbf}, - // Block 0xb7, offset 0x582 + // Block 0xb9, offset 0x58c {value: 0x0000, lo: 0x0e}, {value: 0x3808, lo: 0x80, hi: 0x80}, {value: 0x0008, lo: 0x81, hi: 0x84}, @@ -4006,7 +4161,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa0, hi: 0xa0}, {value: 0x0018, lo: 0xa1, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0xb8, offset 0x591 + // Block 0xba, offset 0x59b {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0x91}, {value: 0x0040, lo: 0x92, hi: 0x92}, @@ -4020,7 +4175,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0xb8, hi: 0xbd}, {value: 0x3308, lo: 0xbe, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xb9, offset 0x59e + // Block 0xbb, offset 0x5a8 {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x87}, @@ -4034,7 +4189,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0xa9, hi: 0xa9}, {value: 0x0040, lo: 0xaa, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0xba, offset 0x5ab + // Block 0xbc, offset 0x5b5 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0x9e}, {value: 0x3308, lo: 0x9f, hi: 0x9f}, @@ -4044,12 +4199,12 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xab, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0xbb, offset 0x5b4 + // Block 0xbd, offset 0x5be {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xb4}, {value: 0x3008, lo: 0xb5, hi: 0xb7}, {value: 0x3308, lo: 0xb8, hi: 0xbf}, - // Block 0xbc, offset 0x5b8 + // Block 0xbe, offset 0x5c2 {value: 0x0000, lo: 0x0e}, {value: 0x3008, lo: 0x80, hi: 0x81}, {value: 0x3b08, lo: 0x82, hi: 0x82}, @@ -4065,7 +4220,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0x9e, hi: 0x9e}, {value: 0x0008, lo: 0x9f, hi: 0xa1}, {value: 0x0040, lo: 0xa2, hi: 0xbf}, - // Block 0xbd, offset 0x5c7 + // Block 0xbf, offset 0x5d1 {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0xaf}, {value: 0x3008, lo: 0xb0, hi: 0xb2}, @@ -4074,7 +4229,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xba, hi: 0xba}, {value: 0x3008, lo: 0xbb, hi: 0xbe}, {value: 0x3308, lo: 0xbf, hi: 0xbf}, - // Block 0xbe, offset 0x5cf + // Block 0xc0, offset 0x5d9 {value: 0x0000, lo: 0x0a}, {value: 0x3308, lo: 0x80, hi: 0x80}, {value: 0x3008, lo: 0x81, hi: 0x81}, @@ -4086,7 +4241,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x88, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0xbf}, - // Block 0xbf, offset 0x5da + // Block 0xc1, offset 0x5e4 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0xae}, {value: 0x3008, lo: 0xaf, hi: 0xb1}, @@ -4096,14 +4251,14 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xbc, hi: 0xbd}, {value: 0x3008, lo: 0xbe, hi: 0xbe}, {value: 0x3b08, lo: 0xbf, hi: 0xbf}, - // Block 0xc0, offset 0x5e3 + // Block 0xc2, offset 0x5ed {value: 0x0000, lo: 0x05}, {value: 0x3308, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x97}, {value: 0x0008, lo: 0x98, hi: 0x9b}, {value: 0x3308, lo: 0x9c, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0xbf}, - // Block 0xc1, offset 0x5e9 + // Block 0xc3, offset 0x5f3 {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0xaf}, {value: 0x3008, lo: 0xb0, hi: 0xb2}, @@ -4112,7 +4267,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xbd, hi: 0xbd}, {value: 0x3008, lo: 0xbe, hi: 0xbe}, {value: 0x3b08, lo: 0xbf, hi: 0xbf}, - // Block 0xc2, offset 0x5f1 + // Block 0xc4, offset 0x5fb {value: 0x0000, lo: 0x08}, {value: 0x3308, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x83}, @@ -4122,7 +4277,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x9a, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xac}, {value: 0x0040, lo: 0xad, hi: 0xbf}, - // Block 0xc3, offset 0x5fa + // Block 0xc5, offset 0x604 {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0xaa}, {value: 0x3308, lo: 0xab, hi: 0xab}, @@ -4134,11 +4289,11 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xb7, hi: 0xb7}, {value: 0x0008, lo: 0xb8, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0xc4, offset 0x605 + // Block 0xc6, offset 0x60f {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x0040, lo: 0x8a, hi: 0xbf}, - // Block 0xc5, offset 0x608 + // Block 0xc7, offset 0x612 {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0x9a}, {value: 0x0040, lo: 0x9b, hi: 0x9c}, @@ -4151,7 +4306,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xac, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0018, lo: 0xba, hi: 0xbf}, - // Block 0xc6, offset 0x614 + // Block 0xc8, offset 0x61e {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0xab}, {value: 0x3008, lo: 0xac, hi: 0xae}, @@ -4161,17 +4316,17 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xba, hi: 0xba}, {value: 0x0018, lo: 0xbb, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0xc7, offset 0x61d + // Block 0xc9, offset 0x627 {value: 0x0000, lo: 0x02}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x049d, lo: 0xa0, hi: 0xbf}, - // Block 0xc8, offset 0x620 + // Block 0xca, offset 0x62a {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xa9}, {value: 0x0018, lo: 0xaa, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xbe}, {value: 0x0008, lo: 0xbf, hi: 0xbf}, - // Block 0xc9, offset 0x625 + // Block 0xcb, offset 0x62f {value: 0x0000, lo: 0x08}, {value: 0x3008, lo: 0x80, hi: 0x80}, {value: 0x0008, lo: 0x81, hi: 0x81}, @@ -4181,13 +4336,13 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x87, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0xbf}, - // Block 0xca, offset 0x62e + // Block 0xcc, offset 0x638 {value: 0x0000, lo: 0x04}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa7}, {value: 0x0040, lo: 0xa8, hi: 0xa9}, {value: 0x0008, lo: 0xaa, hi: 0xbf}, - // Block 0xcb, offset 0x633 + // Block 0xcd, offset 0x63d {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0x90}, {value: 0x3008, lo: 0x91, hi: 0x93}, @@ -4201,7 +4356,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xa3, hi: 0xa3}, {value: 0x3008, lo: 0xa4, hi: 0xa4}, {value: 0x0040, lo: 0xa5, hi: 0xbf}, - // Block 0xcc, offset 0x640 + // Block 0xce, offset 0x64a {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0x80}, {value: 0x3308, lo: 0x81, hi: 0x8a}, @@ -4213,7 +4368,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xba, hi: 0xba}, {value: 0x3308, lo: 0xbb, hi: 0xbe}, {value: 0x0018, lo: 0xbf, hi: 0xbf}, - // Block 0xcd, offset 0x64b + // Block 0xcf, offset 0x655 {value: 0x0000, lo: 0x08}, {value: 0x0018, lo: 0x80, hi: 0x86}, {value: 0x3b08, lo: 0x87, hi: 0x87}, @@ -4223,7 +4378,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0x97, hi: 0x98}, {value: 0x3308, lo: 0x99, hi: 0x9b}, {value: 0x0008, lo: 0x9c, hi: 0xbf}, - // Block 0xce, offset 0x654 + // Block 0xd0, offset 0x65e {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x3308, lo: 0x8a, hi: 0x96}, @@ -4234,11 +4389,11 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0x9d, hi: 0x9d}, {value: 0x0018, lo: 0x9e, hi: 0xa2}, {value: 0x0040, lo: 0xa3, hi: 0xbf}, - // Block 0xcf, offset 0x65e + // Block 0xd1, offset 0x668 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0xd0, offset 0x661 + // Block 0xd2, offset 0x66b {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x89}, @@ -4249,7 +4404,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xb8, hi: 0xbd}, {value: 0x3008, lo: 0xbe, hi: 0xbe}, {value: 0x3b08, lo: 0xbf, hi: 0xbf}, - // Block 0xd1, offset 0x66b + // Block 0xd3, offset 0x675 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x85}, @@ -4259,7 +4414,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xad, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb1}, {value: 0x0008, lo: 0xb2, hi: 0xbf}, - // Block 0xd2, offset 0x674 + // Block 0xd4, offset 0x67e {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0x91}, @@ -4272,7 +4427,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0xb4, hi: 0xb4}, {value: 0x3308, lo: 0xb5, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0xd3, offset 0x680 + // Block 0xd5, offset 0x68a {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x87}, @@ -4286,7 +4441,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xbc, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbe}, {value: 0x3308, lo: 0xbf, hi: 0xbf}, - // Block 0xd4, offset 0x68d + // Block 0xd6, offset 0x697 {value: 0x0000, lo: 0x0c}, {value: 0x3308, lo: 0x80, hi: 0x83}, {value: 0x3b08, lo: 0x84, hi: 0x85}, @@ -4300,7 +4455,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xa7, hi: 0xa8}, {value: 0x0040, lo: 0xa9, hi: 0xa9}, {value: 0x0008, lo: 0xaa, hi: 0xbf}, - // Block 0xd5, offset 0x69a + // Block 0xd7, offset 0x6a4 {value: 0x0000, lo: 0x0d}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x3008, lo: 0x8a, hi: 0x8e}, @@ -4315,7 +4470,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x99, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa9}, {value: 0x0040, lo: 0xaa, hi: 0xbf}, - // Block 0xd6, offset 0x6a8 + // Block 0xd8, offset 0x6b2 {value: 0x0000, lo: 0x06}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xb2}, @@ -4323,41 +4478,41 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0xb5, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0xd7, offset 0x6af + // Block 0xd9, offset 0x6b9 {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb0}, {value: 0x0040, lo: 0xb1, hi: 0xbf}, - // Block 0xd8, offset 0x6b3 + // Block 0xda, offset 0x6bd {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbe}, {value: 0x0018, lo: 0xbf, hi: 0xbf}, - // Block 0xd9, offset 0x6b7 + // Block 0xdb, offset 0x6c1 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0xbf}, - // Block 0xda, offset 0x6ba + // Block 0xdc, offset 0x6c4 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0xdb, offset 0x6bf + // Block 0xdd, offset 0x6c9 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x83}, {value: 0x0040, lo: 0x84, hi: 0xbf}, - // Block 0xdc, offset 0x6c2 + // Block 0xde, offset 0x6cc {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xaf}, {value: 0x0340, lo: 0xb0, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0xdd, offset 0x6c7 + // Block 0xdf, offset 0x6d1 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0xbf}, - // Block 0xde, offset 0x6ca + // Block 0xe0, offset 0x6d4 {value: 0x0000, lo: 0x06}, {value: 0x0008, lo: 0x80, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0x9f}, @@ -4365,7 +4520,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xaa, hi: 0xad}, {value: 0x0018, lo: 0xae, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0xdf, offset 0x6d1 + // Block 0xe1, offset 0x6db {value: 0x0000, lo: 0x06}, {value: 0x0040, lo: 0x80, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0xad}, @@ -4373,12 +4528,12 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xb0, hi: 0xb4}, {value: 0x0018, lo: 0xb5, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0xe0, offset 0x6d8 + // Block 0xe2, offset 0x6e2 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xaf}, {value: 0x3308, lo: 0xb0, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0xe1, offset 0x6dc + // Block 0xe3, offset 0x6e6 {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0x83}, {value: 0x0018, lo: 0x84, hi: 0x85}, @@ -4390,33 +4545,33 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xa3, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbc}, {value: 0x0008, lo: 0xbd, hi: 0xbf}, - // Block 0xe2, offset 0x6e7 + // Block 0xe4, offset 0x6f1 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0xbf}, - // Block 0xe3, offset 0x6ea + // Block 0xe5, offset 0x6f4 {value: 0x0000, lo: 0x02}, {value: 0xe105, lo: 0x80, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0xe4, offset 0x6ed + // Block 0xe6, offset 0x6f7 {value: 0x0000, lo: 0x02}, {value: 0x0018, lo: 0x80, hi: 0x9a}, {value: 0x0040, lo: 0x9b, hi: 0xbf}, - // Block 0xe5, offset 0x6f0 + // Block 0xe7, offset 0x6fa {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x8a}, {value: 0x0040, lo: 0x8b, hi: 0x8e}, {value: 0x3308, lo: 0x8f, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x90}, {value: 0x3008, lo: 0x91, hi: 0xbf}, - // Block 0xe6, offset 0x6f6 + // Block 0xe8, offset 0x700 {value: 0x0000, lo: 0x05}, {value: 0x3008, lo: 0x80, hi: 0x87}, {value: 0x0040, lo: 0x88, hi: 0x8e}, {value: 0x3308, lo: 0x8f, hi: 0x92}, {value: 0x0008, lo: 0x93, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0xe7, offset 0x6fc + // Block 0xe9, offset 0x706 {value: 0x0000, lo: 0x08}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa1}, @@ -4426,23 +4581,23 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa5, hi: 0xaf}, {value: 0x3008, lo: 0xb0, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0xe8, offset 0x705 + // Block 0xea, offset 0x70f {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0xe9, offset 0x708 + // Block 0xeb, offset 0x712 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0xbf}, - // Block 0xea, offset 0x70b + // Block 0xec, offset 0x715 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0xbf}, - // Block 0xeb, offset 0x70e + // Block 0xed, offset 0x718 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0xbf}, - // Block 0xec, offset 0x711 + // Block 0xee, offset 0x71b {value: 0x0000, lo: 0x06}, {value: 0x0040, lo: 0x80, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x92}, @@ -4450,17 +4605,17 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xa4, hi: 0xa7}, {value: 0x0040, lo: 0xa8, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0xed, offset 0x718 + // Block 0xef, offset 0x722 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0xee, offset 0x71b + // Block 0xf0, offset 0x725 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xaa}, {value: 0x0040, lo: 0xab, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0xef, offset 0x720 + // Block 0xf1, offset 0x72a {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x8f}, @@ -4471,32 +4626,32 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0x9f, hi: 0x9f}, {value: 0x03c0, lo: 0xa0, hi: 0xa3}, {value: 0x0040, lo: 0xa4, hi: 0xbf}, - // Block 0xf0, offset 0x72a + // Block 0xf2, offset 0x734 {value: 0x0000, lo: 0x02}, {value: 0x0018, lo: 0x80, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0xf1, offset 0x72d + // Block 0xf3, offset 0x737 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xa6}, {value: 0x0040, lo: 0xa7, hi: 0xa8}, {value: 0x0018, lo: 0xa9, hi: 0xbf}, - // Block 0xf2, offset 0x731 + // Block 0xf4, offset 0x73b {value: 0x0000, lo: 0x0e}, {value: 0x0018, lo: 0x80, hi: 0x9d}, - {value: 0xb609, lo: 0x9e, hi: 0x9e}, - {value: 0xb651, lo: 0x9f, hi: 0x9f}, - {value: 0xb699, lo: 0xa0, hi: 0xa0}, - {value: 0xb701, lo: 0xa1, hi: 0xa1}, - {value: 0xb769, lo: 0xa2, hi: 0xa2}, - {value: 0xb7d1, lo: 0xa3, hi: 0xa3}, - {value: 0xb839, lo: 0xa4, hi: 0xa4}, + {value: 0x2211, lo: 0x9e, hi: 0x9e}, + {value: 0x2219, lo: 0x9f, hi: 0x9f}, + {value: 0x2221, lo: 0xa0, hi: 0xa0}, + {value: 0x2229, lo: 0xa1, hi: 0xa1}, + {value: 0x2231, lo: 0xa2, hi: 0xa2}, + {value: 0x2239, lo: 0xa3, hi: 0xa3}, + {value: 0x2241, lo: 0xa4, hi: 0xa4}, {value: 0x3018, lo: 0xa5, hi: 0xa6}, {value: 0x3318, lo: 0xa7, hi: 0xa9}, {value: 0x0018, lo: 0xaa, hi: 0xac}, {value: 0x3018, lo: 0xad, hi: 0xb2}, {value: 0x0340, lo: 0xb3, hi: 0xba}, {value: 0x3318, lo: 0xbb, hi: 0xbf}, - // Block 0xf3, offset 0x740 + // Block 0xf5, offset 0x74a {value: 0x0000, lo: 0x0b}, {value: 0x3318, lo: 0x80, hi: 0x82}, {value: 0x0018, lo: 0x83, hi: 0x84}, @@ -4504,45 +4659,45 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0x8c, hi: 0xa9}, {value: 0x3318, lo: 0xaa, hi: 0xad}, {value: 0x0018, lo: 0xae, hi: 0xba}, - {value: 0xb8a1, lo: 0xbb, hi: 0xbb}, - {value: 0xb8e9, lo: 0xbc, hi: 0xbc}, - {value: 0xb931, lo: 0xbd, hi: 0xbd}, - {value: 0xb999, lo: 0xbe, hi: 0xbe}, - {value: 0xba01, lo: 0xbf, hi: 0xbf}, - // Block 0xf4, offset 0x74c + {value: 0x2249, lo: 0xbb, hi: 0xbb}, + {value: 0x2251, lo: 0xbc, hi: 0xbc}, + {value: 0x2259, lo: 0xbd, hi: 0xbd}, + {value: 0x2261, lo: 0xbe, hi: 0xbe}, + {value: 0x2269, lo: 0xbf, hi: 0xbf}, + // Block 0xf6, offset 0x756 {value: 0x0000, lo: 0x03}, - {value: 0xba69, lo: 0x80, hi: 0x80}, + {value: 0x2271, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0xa8}, {value: 0x0040, lo: 0xa9, hi: 0xbf}, - // Block 0xf5, offset 0x750 + // Block 0xf7, offset 0x75a {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x81}, {value: 0x3318, lo: 0x82, hi: 0x84}, {value: 0x0018, lo: 0x85, hi: 0x85}, {value: 0x0040, lo: 0x86, hi: 0xbf}, - // Block 0xf6, offset 0x755 + // Block 0xf8, offset 0x75f {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xbf}, - // Block 0xf7, offset 0x759 + // Block 0xf9, offset 0x763 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0xf8, offset 0x75e + // Block 0xfa, offset 0x768 {value: 0x0000, lo: 0x03}, {value: 0x3308, lo: 0x80, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xba}, {value: 0x3308, lo: 0xbb, hi: 0xbf}, - // Block 0xf9, offset 0x762 + // Block 0xfb, offset 0x76c {value: 0x0000, lo: 0x04}, {value: 0x3308, lo: 0x80, hi: 0xac}, {value: 0x0018, lo: 0xad, hi: 0xb4}, {value: 0x3308, lo: 0xb5, hi: 0xb5}, {value: 0x0018, lo: 0xb6, hi: 0xbf}, - // Block 0xfa, offset 0x767 + // Block 0xfc, offset 0x771 {value: 0x0000, lo: 0x08}, {value: 0x0018, lo: 0x80, hi: 0x83}, {value: 0x3308, lo: 0x84, hi: 0x84}, @@ -4552,7 +4707,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa0, hi: 0xa0}, {value: 0x3308, lo: 0xa1, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0xfb, offset 0x770 + // Block 0xfd, offset 0x77a {value: 0x0000, lo: 0x0a}, {value: 0x3308, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x87}, @@ -4564,35 +4719,35 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa5, hi: 0xa5}, {value: 0x3308, lo: 0xa6, hi: 0xaa}, {value: 0x0040, lo: 0xab, hi: 0xbf}, - // Block 0xfc, offset 0x77b + // Block 0xfe, offset 0x785 {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0xac}, {value: 0x0040, lo: 0xad, hi: 0xaf}, {value: 0x3308, lo: 0xb0, hi: 0xb6}, {value: 0x0008, lo: 0xb7, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0xfd, offset 0x781 + // Block 0xff, offset 0x78b {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x0040, lo: 0x8a, hi: 0x8d}, {value: 0x0008, lo: 0x8e, hi: 0x8e}, {value: 0x0018, lo: 0x8f, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0xbf}, - // Block 0xfe, offset 0x787 + // Block 0x100, offset 0x791 {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0xab}, {value: 0x3308, lo: 0xac, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbe}, {value: 0x0018, lo: 0xbf, hi: 0xbf}, - // Block 0xff, offset 0x78d + // Block 0x101, offset 0x797 {value: 0x0000, lo: 0x05}, {value: 0x0808, lo: 0x80, hi: 0x84}, {value: 0x0040, lo: 0x85, hi: 0x86}, {value: 0x0818, lo: 0x87, hi: 0x8f}, {value: 0x3308, lo: 0x90, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0xbf}, - // Block 0x100, offset 0x793 + // Block 0x102, offset 0x79d {value: 0x0000, lo: 0x08}, {value: 0x0a08, lo: 0x80, hi: 0x83}, {value: 0x3308, lo: 0x84, hi: 0x8a}, @@ -4602,71 +4757,71 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x9a, hi: 0x9d}, {value: 0x0818, lo: 0x9e, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0x101, offset 0x79c + // Block 0x103, offset 0x7a6 {value: 0x0000, lo: 0x02}, {value: 0x0040, lo: 0x80, hi: 0xb0}, {value: 0x0818, lo: 0xb1, hi: 0xbf}, - // Block 0x102, offset 0x79f + // Block 0x104, offset 0x7a9 {value: 0x0000, lo: 0x02}, {value: 0x0818, lo: 0x80, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0x103, offset 0x7a2 + // Block 0x105, offset 0x7ac {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0818, lo: 0x81, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x104, offset 0x7a6 + // Block 0x106, offset 0x7b0 {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0x105, offset 0x7aa + // Block 0x107, offset 0x7b4 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xbf}, - // Block 0x106, offset 0x7ae + // Block 0x108, offset 0x7b8 {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0x93}, {value: 0x0040, lo: 0x94, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xb0}, {value: 0x0018, lo: 0xb1, hi: 0xbf}, - // Block 0x107, offset 0x7b4 + // Block 0x109, offset 0x7be {value: 0x0000, lo: 0x05}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0x90}, {value: 0x0018, lo: 0x91, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0x108, offset 0x7ba + // Block 0x10a, offset 0x7c4 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x8f}, - {value: 0xc229, lo: 0x90, hi: 0x90}, + {value: 0x2491, lo: 0x90, hi: 0x90}, {value: 0x0018, lo: 0x91, hi: 0xad}, {value: 0x0040, lo: 0xae, hi: 0xbf}, - // Block 0x109, offset 0x7bf + // Block 0x10b, offset 0x7c9 {value: 0x0000, lo: 0x02}, {value: 0x0040, lo: 0x80, hi: 0xa5}, {value: 0x0018, lo: 0xa6, hi: 0xbf}, - // Block 0x10a, offset 0x7c2 + // Block 0x10c, offset 0x7cc {value: 0x0000, lo: 0x0f}, - {value: 0xc851, lo: 0x80, hi: 0x80}, - {value: 0xc8a1, lo: 0x81, hi: 0x81}, - {value: 0xc8f1, lo: 0x82, hi: 0x82}, - {value: 0xc941, lo: 0x83, hi: 0x83}, - {value: 0xc991, lo: 0x84, hi: 0x84}, - {value: 0xc9e1, lo: 0x85, hi: 0x85}, - {value: 0xca31, lo: 0x86, hi: 0x86}, - {value: 0xca81, lo: 0x87, hi: 0x87}, - {value: 0xcad1, lo: 0x88, hi: 0x88}, + {value: 0x2611, lo: 0x80, hi: 0x80}, + {value: 0x2619, lo: 0x81, hi: 0x81}, + {value: 0x2621, lo: 0x82, hi: 0x82}, + {value: 0x2629, lo: 0x83, hi: 0x83}, + {value: 0x2631, lo: 0x84, hi: 0x84}, + {value: 0x2639, lo: 0x85, hi: 0x85}, + {value: 0x2641, lo: 0x86, hi: 0x86}, + {value: 0x2649, lo: 0x87, hi: 0x87}, + {value: 0x2651, lo: 0x88, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x8f}, - {value: 0xcb21, lo: 0x90, hi: 0x90}, - {value: 0xcb41, lo: 0x91, hi: 0x91}, + {value: 0x2659, lo: 0x90, hi: 0x90}, + {value: 0x2661, lo: 0x91, hi: 0x91}, {value: 0x0040, lo: 0x92, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xa5}, {value: 0x0040, lo: 0xa6, hi: 0xbf}, - // Block 0x10b, offset 0x7d2 + // Block 0x10d, offset 0x7dc {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x97}, {value: 0x0040, lo: 0x98, hi: 0x9f}, @@ -4674,29 +4829,29 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xad, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0x10c, offset 0x7d9 + // Block 0x10e, offset 0x7e3 {value: 0x0000, lo: 0x02}, {value: 0x0018, lo: 0x80, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xbf}, - // Block 0x10d, offset 0x7dc + // Block 0x10f, offset 0x7e6 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x98}, {value: 0x0040, lo: 0x99, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xbf}, - // Block 0x10e, offset 0x7e1 + // Block 0x110, offset 0x7eb {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xbf}, - // Block 0x10f, offset 0x7e5 + // Block 0x111, offset 0x7ef {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0x87}, {value: 0x0040, lo: 0x88, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xbf}, - // Block 0x110, offset 0x7eb + // Block 0x112, offset 0x7f5 {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x87}, {value: 0x0040, lo: 0x88, hi: 0x8f}, @@ -4704,17 +4859,17 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xae, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0x111, offset 0x7f2 + // Block 0x113, offset 0x7fc {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xb9}, {value: 0x0018, lo: 0xba, hi: 0xbf}, - // Block 0x112, offset 0x7f6 + // Block 0x114, offset 0x800 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8c}, {value: 0x0018, lo: 0x8d, hi: 0xbf}, - // Block 0x113, offset 0x7fa + // Block 0x115, offset 0x804 {value: 0x0000, lo: 0x08}, {value: 0x0018, lo: 0x80, hi: 0x93}, {value: 0x0040, lo: 0x94, hi: 0x9f}, @@ -4724,7 +4879,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xb5, hi: 0xb7}, {value: 0x0018, lo: 0xb8, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0x114, offset 0x803 + // Block 0x116, offset 0x80d {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x8f}, @@ -4732,109 +4887,74 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa9, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x115, offset 0x80a + // Block 0x117, offset 0x814 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x82}, {value: 0x0040, lo: 0x83, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0xbf}, - // Block 0x116, offset 0x80f + // Block 0x118, offset 0x819 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x92}, {value: 0x0040, lo: 0x93, hi: 0x93}, {value: 0x0018, lo: 0x94, hi: 0xbf}, - // Block 0x117, offset 0x813 + // Block 0x119, offset 0x81d {value: 0x0000, lo: 0x0d}, {value: 0x0018, lo: 0x80, hi: 0x8a}, {value: 0x0040, lo: 0x8b, hi: 0xaf}, - {value: 0x1f41, lo: 0xb0, hi: 0xb0}, - {value: 0x00c9, lo: 0xb1, hi: 0xb1}, - {value: 0x0069, lo: 0xb2, hi: 0xb2}, - {value: 0x0079, lo: 0xb3, hi: 0xb3}, - {value: 0x1f51, lo: 0xb4, hi: 0xb4}, - {value: 0x1f61, lo: 0xb5, hi: 0xb5}, - {value: 0x1f71, lo: 0xb6, hi: 0xb6}, - {value: 0x1f81, lo: 0xb7, hi: 0xb7}, - {value: 0x1f91, lo: 0xb8, hi: 0xb8}, - {value: 0x1fa1, lo: 0xb9, hi: 0xb9}, + {value: 0x06e1, lo: 0xb0, hi: 0xb0}, + {value: 0x0049, lo: 0xb1, hi: 0xb1}, + {value: 0x0029, lo: 0xb2, hi: 0xb2}, + {value: 0x0031, lo: 0xb3, hi: 0xb3}, + {value: 0x06e9, lo: 0xb4, hi: 0xb4}, + {value: 0x06f1, lo: 0xb5, hi: 0xb5}, + {value: 0x06f9, lo: 0xb6, hi: 0xb6}, + {value: 0x0701, lo: 0xb7, hi: 0xb7}, + {value: 0x0709, lo: 0xb8, hi: 0xb8}, + {value: 0x0711, lo: 0xb9, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x118, offset 0x821 + // Block 0x11a, offset 0x82b {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0xbf}, - // Block 0x119, offset 0x824 + // Block 0x11b, offset 0x82e {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0x11a, offset 0x827 + // Block 0x11c, offset 0x831 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x11b, offset 0x82b + // Block 0x11d, offset 0x835 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xa1}, {value: 0x0040, lo: 0xa2, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x11c, offset 0x82f + // Block 0x11e, offset 0x839 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xa0}, {value: 0x0040, lo: 0xa1, hi: 0xbf}, - // Block 0x11d, offset 0x832 - {value: 0x0020, lo: 0x0f}, - {value: 0xdf21, lo: 0x80, hi: 0x89}, - {value: 0x8e35, lo: 0x8a, hi: 0x8a}, - {value: 0xe061, lo: 0x8b, hi: 0x9c}, - {value: 0x8e55, lo: 0x9d, hi: 0x9d}, - {value: 0xe2a1, lo: 0x9e, hi: 0xa2}, - {value: 0x8e75, lo: 0xa3, hi: 0xa3}, - {value: 0xe341, lo: 0xa4, hi: 0xab}, - {value: 0x7f0d, lo: 0xac, hi: 0xac}, - {value: 0xe441, lo: 0xad, hi: 0xaf}, - {value: 0x8e95, lo: 0xb0, hi: 0xb0}, - {value: 0xe4a1, lo: 0xb1, hi: 0xb6}, - {value: 0x8eb5, lo: 0xb7, hi: 0xb9}, - {value: 0xe561, lo: 0xba, hi: 0xba}, - {value: 0x8f15, lo: 0xbb, hi: 0xbb}, - {value: 0xe581, lo: 0xbc, hi: 0xbf}, - // Block 0x11e, offset 0x842 - {value: 0x0020, lo: 0x10}, - {value: 0x93b5, lo: 0x80, hi: 0x80}, - {value: 0xf101, lo: 0x81, hi: 0x86}, - {value: 0x93d5, lo: 0x87, hi: 0x8a}, - {value: 0xda61, lo: 0x8b, hi: 0x8b}, - {value: 0xf1c1, lo: 0x8c, hi: 0x96}, - {value: 0x9455, lo: 0x97, hi: 0x97}, - {value: 0xf321, lo: 0x98, hi: 0xa3}, - {value: 0x9475, lo: 0xa4, hi: 0xa6}, - {value: 0xf4a1, lo: 0xa7, hi: 0xaa}, - {value: 0x94d5, lo: 0xab, hi: 0xab}, - {value: 0xf521, lo: 0xac, hi: 0xac}, - {value: 0x94f5, lo: 0xad, hi: 0xad}, - {value: 0xf541, lo: 0xae, hi: 0xaf}, - {value: 0x9515, lo: 0xb0, hi: 0xb1}, - {value: 0xf581, lo: 0xb2, hi: 0xbe}, - {value: 0x2040, lo: 0xbf, hi: 0xbf}, - // Block 0x11f, offset 0x853 + // Block 0x11f, offset 0x83c {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x8a}, {value: 0x0040, lo: 0x8b, hi: 0xbf}, - // Block 0x120, offset 0x856 + // Block 0x120, offset 0x83f {value: 0x0000, lo: 0x04}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0340, lo: 0x81, hi: 0x81}, {value: 0x0040, lo: 0x82, hi: 0x9f}, {value: 0x0340, lo: 0xa0, hi: 0xbf}, - // Block 0x121, offset 0x85b + // Block 0x121, offset 0x844 {value: 0x0000, lo: 0x01}, {value: 0x0340, lo: 0x80, hi: 0xbf}, - // Block 0x122, offset 0x85d + // Block 0x122, offset 0x846 {value: 0x0000, lo: 0x01}, {value: 0x33c0, lo: 0x80, hi: 0xbf}, - // Block 0x123, offset 0x85f + // Block 0x123, offset 0x848 {value: 0x0000, lo: 0x02}, {value: 0x33c0, lo: 0x80, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, } -// Total table size 43370 bytes (42KiB); checksum: EBD909C0 +// Total table size 44953 bytes (43KiB); checksum: D51909DD diff --git a/vendor/golang.org/x/net/idna/tables15.0.0.go b/vendor/golang.org/x/net/idna/tables15.0.0.go new file mode 100644 index 0000000000..40033778f0 --- /dev/null +++ b/vendor/golang.org/x/net/idna/tables15.0.0.go @@ -0,0 +1,5145 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.21 +// +build go1.21 + +package idna + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "15.0.0" + +var mappings string = "" + // Size: 6704 bytes + " ̈a ̄23 ́ ̧1o1⁄41⁄23⁄4i̇l·ʼnsdžⱥⱦhjrwy ̆ ̇ ̊ ̨ ̃ ̋lẍ́ ι; ̈́եւاٴوٴۇٴيٴक" + + "़ख़ग़ज़ड़ढ़फ़य़ড়ঢ়য়ਲ਼ਸ਼ਖ਼ਗ਼ਜ਼ਫ਼ଡ଼ଢ଼ําໍາຫນຫມགྷཌྷདྷབྷཛྷཀྵཱཱིུྲྀྲཱྀླྀླཱ" + + "ཱྀྀྒྷྜྷྡྷྦྷྫྷྐྵвдостъѣæbdeǝgikmnȣptuɐɑəɛɜŋɔɯvβγδφχρнɒcɕðfɟɡɥɨɩɪʝɭʟɱɰɲɳ" + + "ɴɵɸʂʃƫʉʊʋʌzʐʑʒθssάέήίόύώἀιἁιἂιἃιἄιἅιἆιἇιἠιἡιἢιἣιἤιἥιἦιἧιὠιὡιὢιὣιὤιὥιὦιὧ" + + "ιὰιαιάιᾶιι ̈͂ὴιηιήιῆι ̓̀ ̓́ ̓͂ΐ ̔̀ ̔́ ̔͂ΰ ̈̀`ὼιωιώιῶι′′′′′‵‵‵‵‵!!???!!?" + + "′′′′0456789+=()rsħnoqsmtmωåאבגדπ1⁄71⁄91⁄101⁄32⁄31⁄52⁄53⁄54⁄51⁄65⁄61⁄83" + + "⁄85⁄87⁄81⁄iiivviviiiixxi0⁄3∫∫∫∫∫∮∮∮∮∮1011121314151617181920(10)(11)(12" + + ")(13)(14)(15)(16)(17)(18)(19)(20)∫∫∫∫==⫝̸ɫɽȿɀ. ゙ ゚よりコト(ᄀ)(ᄂ)(ᄃ)(ᄅ)(ᄆ)(ᄇ)" + + "(ᄉ)(ᄋ)(ᄌ)(ᄎ)(ᄏ)(ᄐ)(ᄑ)(ᄒ)(가)(나)(다)(라)(마)(바)(사)(아)(자)(차)(카)(타)(파)(하)(주)(오전" + + ")(오후)(一)(二)(三)(四)(五)(六)(七)(八)(九)(十)(月)(火)(水)(木)(金)(土)(日)(株)(有)(社)(名)(特)(" + + "財)(祝)(労)(代)(呼)(学)(監)(企)(資)(協)(祭)(休)(自)(至)21222324252627282930313233343" + + "5참고주의3637383940414243444546474849501月2月3月4月5月6月7月8月9月10月11月12月hgev令和アパート" + + "アルファアンペアアールイニングインチウォンエスクードエーカーオンスオームカイリカラットカロリーガロンガンマギガギニーキュリーギルダーキロキロ" + + "グラムキロメートルキロワットグラムグラムトンクルゼイロクローネケースコルナコーポサイクルサンチームシリングセンチセントダースデシドルトンナノ" + + "ノットハイツパーセントパーツバーレルピアストルピクルピコビルファラッドフィートブッシェルフランヘクタールペソペニヒヘルツペンスページベータポ" + + "イントボルトホンポンドホールホーンマイクロマイルマッハマルクマンションミクロンミリミリバールメガメガトンメートルヤードヤールユアンリットルリ" + + "ラルピールーブルレムレントゲンワット0点1点2点3点4点5点6点7点8点9点10点11点12点13点14点15点16点17点18点19点20" + + "点21点22点23点24点daauovpcdmiu平成昭和大正明治株式会社panamakakbmbgbkcalpfnfmgkghzmldlk" + + "lfmnmmmcmkmm2m3m∕sm∕s2rad∕srad∕s2psnsmspvnvmvkvpwnwmwkwbqcccdc∕kgdbgyhah" + + "pinkkktlmlnlxphprsrsvwbv∕ma∕m1日2日3日4日5日6日7日8日9日10日11日12日13日14日15日16日17日1" + + "8日19日20日21日22日23日24日25日26日27日28日29日30日31日ьɦɬʞʇœʍ𤋮𢡊𢡄𣏕𥉉𥳐𧻓fffiflstմնմեմիվնմ" + + "խיִײַעהכלםרתשׁשׂשּׁשּׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּנּסּףּפּצּקּרּשּתּו" + + "ֹבֿכֿפֿאלٱٻپڀٺٿٹڤڦڄڃچڇڍڌڎڈژڑکگڳڱںڻۀہھےۓڭۇۆۈۋۅۉېىئائەئوئۇئۆئۈئېئىیئجئحئم" + + "ئيبجبحبخبمبىبيتجتحتختمتىتيثجثمثىثيجحجمحجحمخجخحخمسجسحسخسمصحصمضجضحضخضمطحط" + + "مظمعجعمغجغمفجفحفخفمفىفيقحقمقىقيكاكجكحكخكلكمكىكيلجلحلخلملىليمجمحمخمممىمي" + + "نجنحنخنمنىنيهجهمهىهييجيحيخيميىييذٰرٰىٰ ٌّ ٍّ َّ ُّ ِّ ّٰئرئزئنبربزبنترت" + + "زتنثرثزثنمانرنزننيريزينئخئهبهتهصخلهنههٰيهثهسهشمشهـَّـُّـِّطىطيعىعيغىغيس" + + "ىسيشىشيحىحيجىجيخىخيصىصيضىضيشجشحشخشرسرصرضراًتجمتحجتحمتخمتمجتمحتمخجمححميح" + + "مىسحجسجحسجىسمحسمجسممصححصممشحمشجيشمخشممضحىضخمطمحطممطميعجمعممعمىغممغميغمى" + + "فخمقمحقمملحملحيلحىلججلخملمحمحجمحممحيمجحمجممخجمخممجخهمجهممنحمنحىنجمنجىنم" + + "ينمىيممبخيتجيتجىتخيتخىتميتمىجميجحىجمىسخىصحيشحيضحيلجيلمييحييجييميمميقمين" + + "حيعميكمينجحمخيلجمكممجحيحجيمجيفميبحيسخينجيصلےقلےاللهاكبرمحمدصلعمرسولعليه" + + "وسلمصلىصلى الله عليه وسلمجل جلالهریال,:!?_{}[]#&*-<>\\$%@ـًـَـُـِـّـْءآ" + + "أؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهويلآلألإلا\x22'/^|~¢£¬¦¥ːˑʙɓʣꭦʥʤɖɗᶑɘɞʩɤɢ" + + "ɠʛʜɧʄʪʫꞎɮʎøɶɷɺɾʀʨʦꭧʧʈⱱʏʡʢʘǀǁǂ𝅗𝅥𝅘𝅥𝅘𝅥𝅮𝅘𝅥𝅯𝅘𝅥𝅰𝅘𝅥𝅱𝅘𝅥𝅲𝆹𝅥𝆺𝅥𝆹𝅥𝅮𝆺𝅥𝅮𝆹𝅥𝅯𝆺𝅥𝅯ıȷαεζηκ" + + "λμνξοστυψ∇∂ϝабгежзиклмпруфхцчшыэюꚉәіјөүӏґѕџҫꙑұٮڡٯ0,1,2,3,4,5,6,7,8,9,(a" + + ")(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)(y" + + ")(z)〔s〕wzhvsdppvwcmcmdmrdjほかココサ手字双デ二多解天交映無料前後再新初終生販声吹演投捕一三遊左中右指走打禁空合満有月申" + + "割営配〔本〕〔三〕〔二〕〔安〕〔点〕〔打〕〔盗〕〔勝〕〔敗〕得可丽丸乁你侮侻倂偺備僧像㒞免兔兤具㒹內冗冤仌冬况凵刃㓟刻剆剷㔕勇勉勤勺包匆北卉" + + "卑博即卽卿灰及叟叫叱吆咞吸呈周咢哶唐啓啣善喙喫喳嗂圖嘆圗噑噴切壮城埴堍型堲報墬売壷夆夢奢姬娛娧姘婦㛮嬈嬾寃寘寧寳寿将尢㞁屠屮峀岍嵃嵮嵫嵼巡巢" + + "㠯巽帨帽幩㡢㡼庰庳庶廊廾舁弢㣇形彫㣣徚忍志忹悁㤺㤜悔惇慈慌慎慺憎憲憤憯懞懲懶成戛扝抱拔捐挽拼捨掃揤搢揅掩㨮摩摾撝摷㩬敏敬旣書晉㬙暑㬈㫤冒冕最" + + "暜肭䏙朗望朡杞杓㭉柺枅桒梅梎栟椔㮝楂榣槪檨櫛㰘次歔㱎歲殟殺殻汎沿泍汧洖派海流浩浸涅洴港湮㴳滋滇淹潮濆瀹瀞瀛㶖灊災灷炭煅熜爨爵牐犀犕獺王㺬玥㺸" + + "瑇瑜瑱璅瓊㼛甤甾異瘐㿼䀈直眞真睊䀹瞋䁆䂖硎碌磌䃣祖福秫䄯穀穊穏䈂篆築䈧糒䊠糨糣紀絣䌁緇縂繅䌴䍙罺羕翺者聠聰䏕育脃䐋脾媵舄辞䑫芑芋芝劳花芳芽苦" + + "若茝荣莭茣莽菧著荓菊菌菜䔫蓱蓳蔖蕤䕝䕡䕫虐虜虧虩蚩蚈蜎蛢蝹蜨蝫螆蟡蠁䗹衠衣裗裞䘵裺㒻䚾䛇誠諭變豕貫賁贛起跋趼跰軔輸邔郱鄑鄛鈸鋗鋘鉼鏹鐕開䦕閷" + + "䧦雃嶲霣䩮䩶韠䪲頋頩飢䬳餩馧駂駾䯎鬒鱀鳽䳎䳭鵧䳸麻䵖黹黾鼅鼏鼖鼻" + +var mappingIndex = []uint16{ // 1729 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0001, 0x0004, 0x0005, 0x0008, 0x0009, 0x000a, + 0x000d, 0x0010, 0x0011, 0x0012, 0x0017, 0x001c, 0x0021, 0x0024, + 0x0027, 0x002a, 0x002b, 0x002e, 0x0031, 0x0034, 0x0035, 0x0036, + 0x0037, 0x0038, 0x0039, 0x003c, 0x003f, 0x0042, 0x0045, 0x0048, + 0x004b, 0x004c, 0x004d, 0x0051, 0x0054, 0x0055, 0x005a, 0x005e, + 0x0062, 0x0066, 0x006a, 0x006e, 0x0074, 0x007a, 0x0080, 0x0086, + 0x008c, 0x0092, 0x0098, 0x009e, 0x00a4, 0x00aa, 0x00b0, 0x00b6, + 0x00bc, 0x00c2, 0x00c8, 0x00ce, 0x00d4, 0x00da, 0x00e0, 0x00e6, + // Entry 40 - 7F + 0x00ec, 0x00f2, 0x00f8, 0x00fe, 0x0104, 0x010a, 0x0110, 0x0116, + 0x011c, 0x0122, 0x0128, 0x012e, 0x0137, 0x013d, 0x0146, 0x014c, + 0x0152, 0x0158, 0x015e, 0x0164, 0x016a, 0x0170, 0x0172, 0x0174, + 0x0176, 0x0178, 0x017a, 0x017c, 0x017e, 0x0180, 0x0181, 0x0182, + 0x0183, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, 0x018a, 0x018c, + 0x018d, 0x018e, 0x018f, 0x0191, 0x0193, 0x0195, 0x0197, 0x0199, + 0x019b, 0x019d, 0x019f, 0x01a0, 0x01a2, 0x01a4, 0x01a6, 0x01a8, + 0x01aa, 0x01ac, 0x01ae, 0x01b0, 0x01b1, 0x01b3, 0x01b5, 0x01b6, + // Entry 80 - BF + 0x01b8, 0x01ba, 0x01bc, 0x01be, 0x01c0, 0x01c2, 0x01c4, 0x01c6, + 0x01c8, 0x01ca, 0x01cc, 0x01ce, 0x01d0, 0x01d2, 0x01d4, 0x01d6, + 0x01d8, 0x01da, 0x01dc, 0x01de, 0x01e0, 0x01e2, 0x01e4, 0x01e5, + 0x01e7, 0x01e9, 0x01eb, 0x01ed, 0x01ef, 0x01f1, 0x01f3, 0x01f5, + 0x01f7, 0x01f9, 0x01fb, 0x01fd, 0x0202, 0x0207, 0x020c, 0x0211, + 0x0216, 0x021b, 0x0220, 0x0225, 0x022a, 0x022f, 0x0234, 0x0239, + 0x023e, 0x0243, 0x0248, 0x024d, 0x0252, 0x0257, 0x025c, 0x0261, + 0x0266, 0x026b, 0x0270, 0x0275, 0x027a, 0x027e, 0x0282, 0x0287, + // Entry C0 - FF + 0x0289, 0x028e, 0x0293, 0x0297, 0x029b, 0x02a0, 0x02a5, 0x02aa, + 0x02af, 0x02b1, 0x02b6, 0x02bb, 0x02c0, 0x02c2, 0x02c7, 0x02c8, + 0x02cd, 0x02d1, 0x02d5, 0x02da, 0x02e0, 0x02e9, 0x02ef, 0x02f8, + 0x02fa, 0x02fc, 0x02fe, 0x0300, 0x030c, 0x030d, 0x030e, 0x030f, + 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, + 0x0319, 0x031b, 0x031d, 0x031e, 0x0320, 0x0322, 0x0324, 0x0326, + 0x0328, 0x032a, 0x032c, 0x032e, 0x0330, 0x0335, 0x033a, 0x0340, + 0x0345, 0x034a, 0x034f, 0x0354, 0x0359, 0x035e, 0x0363, 0x0368, + // Entry 100 - 13F + 0x036d, 0x0372, 0x0377, 0x037c, 0x0380, 0x0382, 0x0384, 0x0386, + 0x038a, 0x038c, 0x038e, 0x0393, 0x0399, 0x03a2, 0x03a8, 0x03b1, + 0x03b3, 0x03b5, 0x03b7, 0x03b9, 0x03bb, 0x03bd, 0x03bf, 0x03c1, + 0x03c3, 0x03c5, 0x03c7, 0x03cb, 0x03cf, 0x03d3, 0x03d7, 0x03db, + 0x03df, 0x03e3, 0x03e7, 0x03eb, 0x03ef, 0x03f3, 0x03ff, 0x0401, + 0x0406, 0x0408, 0x040a, 0x040c, 0x040e, 0x040f, 0x0413, 0x0417, + 0x041d, 0x0423, 0x0428, 0x042d, 0x0432, 0x0437, 0x043c, 0x0441, + 0x0446, 0x044b, 0x0450, 0x0455, 0x045a, 0x045f, 0x0464, 0x0469, + // Entry 140 - 17F + 0x046e, 0x0473, 0x0478, 0x047d, 0x0482, 0x0487, 0x048c, 0x0491, + 0x0496, 0x049b, 0x04a0, 0x04a5, 0x04aa, 0x04af, 0x04b4, 0x04bc, + 0x04c4, 0x04c9, 0x04ce, 0x04d3, 0x04d8, 0x04dd, 0x04e2, 0x04e7, + 0x04ec, 0x04f1, 0x04f6, 0x04fb, 0x0500, 0x0505, 0x050a, 0x050f, + 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, + 0x053c, 0x0541, 0x0546, 0x054b, 0x0550, 0x0555, 0x055a, 0x055f, + 0x0564, 0x0569, 0x056e, 0x0573, 0x0578, 0x057a, 0x057c, 0x057e, + 0x0580, 0x0582, 0x0584, 0x0586, 0x0588, 0x058a, 0x058c, 0x058e, + // Entry 180 - 1BF + 0x0590, 0x0592, 0x0594, 0x0596, 0x059c, 0x05a2, 0x05a4, 0x05a6, + 0x05a8, 0x05aa, 0x05ac, 0x05ae, 0x05b0, 0x05b2, 0x05b4, 0x05b6, + 0x05b8, 0x05ba, 0x05bc, 0x05be, 0x05c0, 0x05c4, 0x05c8, 0x05cc, + 0x05d0, 0x05d4, 0x05d8, 0x05dc, 0x05e0, 0x05e4, 0x05e9, 0x05ee, + 0x05f3, 0x05f5, 0x05f7, 0x05fd, 0x0609, 0x0615, 0x0621, 0x062a, + 0x0636, 0x063f, 0x0648, 0x0657, 0x0663, 0x066c, 0x0675, 0x067e, + 0x068a, 0x0696, 0x069f, 0x06a8, 0x06ae, 0x06b7, 0x06c3, 0x06cf, + 0x06d5, 0x06e4, 0x06f6, 0x0705, 0x070e, 0x071d, 0x072c, 0x0738, + // Entry 1C0 - 1FF + 0x0741, 0x074a, 0x0753, 0x075f, 0x076e, 0x077a, 0x0783, 0x078c, + 0x0795, 0x079b, 0x07a1, 0x07a7, 0x07ad, 0x07b6, 0x07bf, 0x07ce, + 0x07d7, 0x07e3, 0x07f2, 0x07fb, 0x0801, 0x0807, 0x0816, 0x0822, + 0x0831, 0x083a, 0x0849, 0x084f, 0x0858, 0x0861, 0x086a, 0x0873, + 0x087c, 0x0888, 0x0891, 0x0897, 0x08a0, 0x08a9, 0x08b2, 0x08be, + 0x08c7, 0x08d0, 0x08d9, 0x08e8, 0x08f4, 0x08fa, 0x0909, 0x090f, + 0x091b, 0x0927, 0x0930, 0x0939, 0x0942, 0x094e, 0x0954, 0x095d, + 0x0969, 0x096f, 0x097e, 0x0987, 0x098b, 0x098f, 0x0993, 0x0997, + // Entry 200 - 23F + 0x099b, 0x099f, 0x09a3, 0x09a7, 0x09ab, 0x09af, 0x09b4, 0x09b9, + 0x09be, 0x09c3, 0x09c8, 0x09cd, 0x09d2, 0x09d7, 0x09dc, 0x09e1, + 0x09e6, 0x09eb, 0x09f0, 0x09f5, 0x09fa, 0x09fc, 0x09fe, 0x0a00, + 0x0a02, 0x0a04, 0x0a06, 0x0a0c, 0x0a12, 0x0a18, 0x0a1e, 0x0a2a, + 0x0a2c, 0x0a2e, 0x0a30, 0x0a32, 0x0a34, 0x0a36, 0x0a38, 0x0a3c, + 0x0a3e, 0x0a40, 0x0a42, 0x0a44, 0x0a46, 0x0a48, 0x0a4a, 0x0a4c, + 0x0a4e, 0x0a50, 0x0a52, 0x0a54, 0x0a56, 0x0a58, 0x0a5a, 0x0a5f, + 0x0a65, 0x0a6c, 0x0a74, 0x0a76, 0x0a78, 0x0a7a, 0x0a7c, 0x0a7e, + // Entry 240 - 27F + 0x0a80, 0x0a82, 0x0a84, 0x0a86, 0x0a88, 0x0a8a, 0x0a8c, 0x0a8e, + 0x0a90, 0x0a96, 0x0a98, 0x0a9a, 0x0a9c, 0x0a9e, 0x0aa0, 0x0aa2, + 0x0aa4, 0x0aa6, 0x0aa8, 0x0aaa, 0x0aac, 0x0aae, 0x0ab0, 0x0ab2, + 0x0ab4, 0x0ab9, 0x0abe, 0x0ac2, 0x0ac6, 0x0aca, 0x0ace, 0x0ad2, + 0x0ad6, 0x0ada, 0x0ade, 0x0ae2, 0x0ae7, 0x0aec, 0x0af1, 0x0af6, + 0x0afb, 0x0b00, 0x0b05, 0x0b0a, 0x0b0f, 0x0b14, 0x0b19, 0x0b1e, + 0x0b23, 0x0b28, 0x0b2d, 0x0b32, 0x0b37, 0x0b3c, 0x0b41, 0x0b46, + 0x0b4b, 0x0b50, 0x0b52, 0x0b54, 0x0b56, 0x0b58, 0x0b5a, 0x0b5c, + // Entry 280 - 2BF + 0x0b5e, 0x0b62, 0x0b66, 0x0b6a, 0x0b6e, 0x0b72, 0x0b76, 0x0b7a, + 0x0b7c, 0x0b7e, 0x0b80, 0x0b82, 0x0b86, 0x0b8a, 0x0b8e, 0x0b92, + 0x0b96, 0x0b9a, 0x0b9e, 0x0ba0, 0x0ba2, 0x0ba4, 0x0ba6, 0x0ba8, + 0x0baa, 0x0bac, 0x0bb0, 0x0bb4, 0x0bba, 0x0bc0, 0x0bc4, 0x0bc8, + 0x0bcc, 0x0bd0, 0x0bd4, 0x0bd8, 0x0bdc, 0x0be0, 0x0be4, 0x0be8, + 0x0bec, 0x0bf0, 0x0bf4, 0x0bf8, 0x0bfc, 0x0c00, 0x0c04, 0x0c08, + 0x0c0c, 0x0c10, 0x0c14, 0x0c18, 0x0c1c, 0x0c20, 0x0c24, 0x0c28, + 0x0c2c, 0x0c30, 0x0c34, 0x0c36, 0x0c38, 0x0c3a, 0x0c3c, 0x0c3e, + // Entry 2C0 - 2FF + 0x0c40, 0x0c42, 0x0c44, 0x0c46, 0x0c48, 0x0c4a, 0x0c4c, 0x0c4e, + 0x0c50, 0x0c52, 0x0c54, 0x0c56, 0x0c58, 0x0c5a, 0x0c5c, 0x0c5e, + 0x0c60, 0x0c62, 0x0c64, 0x0c66, 0x0c68, 0x0c6a, 0x0c6c, 0x0c6e, + 0x0c70, 0x0c72, 0x0c74, 0x0c76, 0x0c78, 0x0c7a, 0x0c7c, 0x0c7e, + 0x0c80, 0x0c82, 0x0c86, 0x0c8a, 0x0c8e, 0x0c92, 0x0c96, 0x0c9a, + 0x0c9e, 0x0ca2, 0x0ca4, 0x0ca8, 0x0cac, 0x0cb0, 0x0cb4, 0x0cb8, + 0x0cbc, 0x0cc0, 0x0cc4, 0x0cc8, 0x0ccc, 0x0cd0, 0x0cd4, 0x0cd8, + 0x0cdc, 0x0ce0, 0x0ce4, 0x0ce8, 0x0cec, 0x0cf0, 0x0cf4, 0x0cf8, + // Entry 300 - 33F + 0x0cfc, 0x0d00, 0x0d04, 0x0d08, 0x0d0c, 0x0d10, 0x0d14, 0x0d18, + 0x0d1c, 0x0d20, 0x0d24, 0x0d28, 0x0d2c, 0x0d30, 0x0d34, 0x0d38, + 0x0d3c, 0x0d40, 0x0d44, 0x0d48, 0x0d4c, 0x0d50, 0x0d54, 0x0d58, + 0x0d5c, 0x0d60, 0x0d64, 0x0d68, 0x0d6c, 0x0d70, 0x0d74, 0x0d78, + 0x0d7c, 0x0d80, 0x0d84, 0x0d88, 0x0d8c, 0x0d90, 0x0d94, 0x0d98, + 0x0d9c, 0x0da0, 0x0da4, 0x0da8, 0x0dac, 0x0db0, 0x0db4, 0x0db8, + 0x0dbc, 0x0dc0, 0x0dc4, 0x0dc8, 0x0dcc, 0x0dd0, 0x0dd4, 0x0dd8, + 0x0ddc, 0x0de0, 0x0de4, 0x0de8, 0x0dec, 0x0df0, 0x0df4, 0x0df8, + // Entry 340 - 37F + 0x0dfc, 0x0e00, 0x0e04, 0x0e08, 0x0e0c, 0x0e10, 0x0e14, 0x0e18, + 0x0e1d, 0x0e22, 0x0e27, 0x0e2c, 0x0e31, 0x0e36, 0x0e3a, 0x0e3e, + 0x0e42, 0x0e46, 0x0e4a, 0x0e4e, 0x0e52, 0x0e56, 0x0e5a, 0x0e5e, + 0x0e62, 0x0e66, 0x0e6a, 0x0e6e, 0x0e72, 0x0e76, 0x0e7a, 0x0e7e, + 0x0e82, 0x0e86, 0x0e8a, 0x0e8e, 0x0e92, 0x0e96, 0x0e9a, 0x0e9e, + 0x0ea2, 0x0ea6, 0x0eaa, 0x0eae, 0x0eb2, 0x0eb6, 0x0ebc, 0x0ec2, + 0x0ec8, 0x0ecc, 0x0ed0, 0x0ed4, 0x0ed8, 0x0edc, 0x0ee0, 0x0ee4, + 0x0ee8, 0x0eec, 0x0ef0, 0x0ef4, 0x0ef8, 0x0efc, 0x0f00, 0x0f04, + // Entry 380 - 3BF + 0x0f08, 0x0f0c, 0x0f10, 0x0f14, 0x0f18, 0x0f1c, 0x0f20, 0x0f24, + 0x0f28, 0x0f2c, 0x0f30, 0x0f34, 0x0f38, 0x0f3e, 0x0f44, 0x0f4a, + 0x0f50, 0x0f56, 0x0f5c, 0x0f62, 0x0f68, 0x0f6e, 0x0f74, 0x0f7a, + 0x0f80, 0x0f86, 0x0f8c, 0x0f92, 0x0f98, 0x0f9e, 0x0fa4, 0x0faa, + 0x0fb0, 0x0fb6, 0x0fbc, 0x0fc2, 0x0fc8, 0x0fce, 0x0fd4, 0x0fda, + 0x0fe0, 0x0fe6, 0x0fec, 0x0ff2, 0x0ff8, 0x0ffe, 0x1004, 0x100a, + 0x1010, 0x1016, 0x101c, 0x1022, 0x1028, 0x102e, 0x1034, 0x103a, + 0x1040, 0x1046, 0x104c, 0x1052, 0x1058, 0x105e, 0x1064, 0x106a, + // Entry 3C0 - 3FF + 0x1070, 0x1076, 0x107c, 0x1082, 0x1088, 0x108e, 0x1094, 0x109a, + 0x10a0, 0x10a6, 0x10ac, 0x10b2, 0x10b8, 0x10be, 0x10c4, 0x10ca, + 0x10d0, 0x10d6, 0x10dc, 0x10e2, 0x10e8, 0x10ee, 0x10f4, 0x10fa, + 0x1100, 0x1106, 0x110c, 0x1112, 0x1118, 0x111e, 0x1124, 0x112a, + 0x1130, 0x1136, 0x113c, 0x1142, 0x1148, 0x114e, 0x1154, 0x115a, + 0x1160, 0x1166, 0x116c, 0x1172, 0x1178, 0x1180, 0x1188, 0x1190, + 0x1198, 0x11a0, 0x11a8, 0x11b0, 0x11b6, 0x11d7, 0x11e6, 0x11ee, + 0x11ef, 0x11f0, 0x11f1, 0x11f2, 0x11f3, 0x11f4, 0x11f5, 0x11f6, + // Entry 400 - 43F + 0x11f7, 0x11f8, 0x11f9, 0x11fa, 0x11fb, 0x11fc, 0x11fd, 0x11fe, + 0x11ff, 0x1200, 0x1201, 0x1205, 0x1209, 0x120d, 0x1211, 0x1215, + 0x1219, 0x121b, 0x121d, 0x121f, 0x1221, 0x1223, 0x1225, 0x1227, + 0x1229, 0x122b, 0x122d, 0x122f, 0x1231, 0x1233, 0x1235, 0x1237, + 0x1239, 0x123b, 0x123d, 0x123f, 0x1241, 0x1243, 0x1245, 0x1247, + 0x1249, 0x124b, 0x124d, 0x124f, 0x1251, 0x1253, 0x1255, 0x1257, + 0x1259, 0x125b, 0x125d, 0x125f, 0x1263, 0x1267, 0x126b, 0x126f, + 0x1270, 0x1271, 0x1272, 0x1273, 0x1274, 0x1275, 0x1277, 0x1279, + // Entry 440 - 47F + 0x127b, 0x127d, 0x127f, 0x1281, 0x1283, 0x1285, 0x1287, 0x1289, + 0x128c, 0x128e, 0x1290, 0x1292, 0x1294, 0x1297, 0x1299, 0x129b, + 0x129d, 0x129f, 0x12a1, 0x12a3, 0x12a5, 0x12a7, 0x12a9, 0x12ab, + 0x12ad, 0x12af, 0x12b2, 0x12b4, 0x12b6, 0x12b8, 0x12ba, 0x12bc, + 0x12be, 0x12c0, 0x12c2, 0x12c4, 0x12c6, 0x12c9, 0x12cb, 0x12cd, + 0x12d0, 0x12d2, 0x12d4, 0x12d6, 0x12d8, 0x12da, 0x12dc, 0x12de, + 0x12e6, 0x12ee, 0x12fa, 0x1306, 0x1312, 0x131e, 0x132a, 0x1332, + 0x133a, 0x1346, 0x1352, 0x135e, 0x136a, 0x136c, 0x136e, 0x1370, + // Entry 480 - 4BF + 0x1372, 0x1374, 0x1376, 0x1378, 0x137a, 0x137c, 0x137e, 0x1380, + 0x1382, 0x1384, 0x1386, 0x1388, 0x138a, 0x138d, 0x1390, 0x1392, + 0x1394, 0x1396, 0x1398, 0x139a, 0x139c, 0x139e, 0x13a0, 0x13a2, + 0x13a4, 0x13a6, 0x13a8, 0x13aa, 0x13ac, 0x13ae, 0x13b0, 0x13b2, + 0x13b4, 0x13b6, 0x13b8, 0x13ba, 0x13bc, 0x13bf, 0x13c1, 0x13c3, + 0x13c5, 0x13c7, 0x13c9, 0x13cb, 0x13cd, 0x13cf, 0x13d1, 0x13d3, + 0x13d6, 0x13d8, 0x13da, 0x13dc, 0x13de, 0x13e0, 0x13e2, 0x13e4, + 0x13e6, 0x13e8, 0x13ea, 0x13ec, 0x13ee, 0x13f0, 0x13f2, 0x13f5, + // Entry 4C0 - 4FF + 0x13f8, 0x13fb, 0x13fe, 0x1401, 0x1404, 0x1407, 0x140a, 0x140d, + 0x1410, 0x1413, 0x1416, 0x1419, 0x141c, 0x141f, 0x1422, 0x1425, + 0x1428, 0x142b, 0x142e, 0x1431, 0x1434, 0x1437, 0x143a, 0x143d, + 0x1440, 0x1447, 0x1449, 0x144b, 0x144d, 0x1450, 0x1452, 0x1454, + 0x1456, 0x1458, 0x145a, 0x1460, 0x1466, 0x1469, 0x146c, 0x146f, + 0x1472, 0x1475, 0x1478, 0x147b, 0x147e, 0x1481, 0x1484, 0x1487, + 0x148a, 0x148d, 0x1490, 0x1493, 0x1496, 0x1499, 0x149c, 0x149f, + 0x14a2, 0x14a5, 0x14a8, 0x14ab, 0x14ae, 0x14b1, 0x14b4, 0x14b7, + // Entry 500 - 53F + 0x14ba, 0x14bd, 0x14c0, 0x14c3, 0x14c6, 0x14c9, 0x14cc, 0x14cf, + 0x14d2, 0x14d5, 0x14d8, 0x14db, 0x14de, 0x14e1, 0x14e4, 0x14e7, + 0x14ea, 0x14ed, 0x14f6, 0x14ff, 0x1508, 0x1511, 0x151a, 0x1523, + 0x152c, 0x1535, 0x153e, 0x1541, 0x1544, 0x1547, 0x154a, 0x154d, + 0x1550, 0x1553, 0x1556, 0x1559, 0x155c, 0x155f, 0x1562, 0x1565, + 0x1568, 0x156b, 0x156e, 0x1571, 0x1574, 0x1577, 0x157a, 0x157d, + 0x1580, 0x1583, 0x1586, 0x1589, 0x158c, 0x158f, 0x1592, 0x1595, + 0x1598, 0x159b, 0x159e, 0x15a1, 0x15a4, 0x15a7, 0x15aa, 0x15ad, + // Entry 540 - 57F + 0x15b0, 0x15b3, 0x15b6, 0x15b9, 0x15bc, 0x15bf, 0x15c2, 0x15c5, + 0x15c8, 0x15cb, 0x15ce, 0x15d1, 0x15d4, 0x15d7, 0x15da, 0x15dd, + 0x15e0, 0x15e3, 0x15e6, 0x15e9, 0x15ec, 0x15ef, 0x15f2, 0x15f5, + 0x15f8, 0x15fb, 0x15fe, 0x1601, 0x1604, 0x1607, 0x160a, 0x160d, + 0x1610, 0x1613, 0x1616, 0x1619, 0x161c, 0x161f, 0x1622, 0x1625, + 0x1628, 0x162b, 0x162e, 0x1631, 0x1634, 0x1637, 0x163a, 0x163d, + 0x1640, 0x1643, 0x1646, 0x1649, 0x164c, 0x164f, 0x1652, 0x1655, + 0x1658, 0x165b, 0x165e, 0x1661, 0x1664, 0x1667, 0x166a, 0x166d, + // Entry 580 - 5BF + 0x1670, 0x1673, 0x1676, 0x1679, 0x167c, 0x167f, 0x1682, 0x1685, + 0x1688, 0x168b, 0x168e, 0x1691, 0x1694, 0x1697, 0x169a, 0x169d, + 0x16a0, 0x16a3, 0x16a6, 0x16a9, 0x16ac, 0x16af, 0x16b2, 0x16b5, + 0x16b8, 0x16bb, 0x16be, 0x16c1, 0x16c4, 0x16c7, 0x16ca, 0x16cd, + 0x16d0, 0x16d3, 0x16d6, 0x16d9, 0x16dc, 0x16df, 0x16e2, 0x16e5, + 0x16e8, 0x16eb, 0x16ee, 0x16f1, 0x16f4, 0x16f7, 0x16fa, 0x16fd, + 0x1700, 0x1703, 0x1706, 0x1709, 0x170c, 0x170f, 0x1712, 0x1715, + 0x1718, 0x171b, 0x171e, 0x1721, 0x1724, 0x1727, 0x172a, 0x172d, + // Entry 5C0 - 5FF + 0x1730, 0x1733, 0x1736, 0x1739, 0x173c, 0x173f, 0x1742, 0x1745, + 0x1748, 0x174b, 0x174e, 0x1751, 0x1754, 0x1757, 0x175a, 0x175d, + 0x1760, 0x1763, 0x1766, 0x1769, 0x176c, 0x176f, 0x1772, 0x1775, + 0x1778, 0x177b, 0x177e, 0x1781, 0x1784, 0x1787, 0x178a, 0x178d, + 0x1790, 0x1793, 0x1796, 0x1799, 0x179c, 0x179f, 0x17a2, 0x17a5, + 0x17a8, 0x17ab, 0x17ae, 0x17b1, 0x17b4, 0x17b7, 0x17ba, 0x17bd, + 0x17c0, 0x17c3, 0x17c6, 0x17c9, 0x17cc, 0x17cf, 0x17d2, 0x17d5, + 0x17d8, 0x17db, 0x17de, 0x17e1, 0x17e4, 0x17e7, 0x17ea, 0x17ed, + // Entry 600 - 63F + 0x17f0, 0x17f3, 0x17f6, 0x17f9, 0x17fc, 0x17ff, 0x1802, 0x1805, + 0x1808, 0x180b, 0x180e, 0x1811, 0x1814, 0x1817, 0x181a, 0x181d, + 0x1820, 0x1823, 0x1826, 0x1829, 0x182c, 0x182f, 0x1832, 0x1835, + 0x1838, 0x183b, 0x183e, 0x1841, 0x1844, 0x1847, 0x184a, 0x184d, + 0x1850, 0x1853, 0x1856, 0x1859, 0x185c, 0x185f, 0x1862, 0x1865, + 0x1868, 0x186b, 0x186e, 0x1871, 0x1874, 0x1877, 0x187a, 0x187d, + 0x1880, 0x1883, 0x1886, 0x1889, 0x188c, 0x188f, 0x1892, 0x1895, + 0x1898, 0x189b, 0x189e, 0x18a1, 0x18a4, 0x18a7, 0x18aa, 0x18ad, + // Entry 640 - 67F + 0x18b0, 0x18b3, 0x18b6, 0x18b9, 0x18bc, 0x18bf, 0x18c2, 0x18c5, + 0x18c8, 0x18cb, 0x18ce, 0x18d1, 0x18d4, 0x18d7, 0x18da, 0x18dd, + 0x18e0, 0x18e3, 0x18e6, 0x18e9, 0x18ec, 0x18ef, 0x18f2, 0x18f5, + 0x18f8, 0x18fb, 0x18fe, 0x1901, 0x1904, 0x1907, 0x190a, 0x190d, + 0x1910, 0x1913, 0x1916, 0x1919, 0x191c, 0x191f, 0x1922, 0x1925, + 0x1928, 0x192b, 0x192e, 0x1931, 0x1934, 0x1937, 0x193a, 0x193d, + 0x1940, 0x1943, 0x1946, 0x1949, 0x194c, 0x194f, 0x1952, 0x1955, + 0x1958, 0x195b, 0x195e, 0x1961, 0x1964, 0x1967, 0x196a, 0x196d, + // Entry 680 - 6BF + 0x1970, 0x1973, 0x1976, 0x1979, 0x197c, 0x197f, 0x1982, 0x1985, + 0x1988, 0x198b, 0x198e, 0x1991, 0x1994, 0x1997, 0x199a, 0x199d, + 0x19a0, 0x19a3, 0x19a6, 0x19a9, 0x19ac, 0x19af, 0x19b2, 0x19b5, + 0x19b8, 0x19bb, 0x19be, 0x19c1, 0x19c4, 0x19c7, 0x19ca, 0x19cd, + 0x19d0, 0x19d3, 0x19d6, 0x19d9, 0x19dc, 0x19df, 0x19e2, 0x19e5, + 0x19e8, 0x19eb, 0x19ee, 0x19f1, 0x19f4, 0x19f7, 0x19fa, 0x19fd, + 0x1a00, 0x1a03, 0x1a06, 0x1a09, 0x1a0c, 0x1a0f, 0x1a12, 0x1a15, + 0x1a18, 0x1a1b, 0x1a1e, 0x1a21, 0x1a24, 0x1a27, 0x1a2a, 0x1a2d, + // Entry 6C0 - 6FF + 0x1a30, +} // Size: 3482 bytes + +var xorData string = "" + // Size: 4907 bytes + "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" + + "\x02\x0f\x1f\x02\x0f\x1d\x02\x01\x13\x02\x0f\x16\x02\x0f\x0b\x02\x0f3" + + "\x02\x0f7\x02\x0f?\x02\x0f/\x02\x0f*\x02\x0c&\x02\x0c*\x02\x0c;\x02\x0c9" + + "\x02\x0c%\x02\xab\xed\x02\xab\xe2\x02\xab\xe3\x02\xa9\xe0\x02\xa9\xe1" + + "\x02\xa9\xe6\x02\xa3\xcb\x02\xa3\xc8\x02\xa3\xc9\x02\x01#\x02\x01\x08" + + "\x02\x0e>\x02\x0e'\x02\x0f\x03\x02\x03\x0d\x02\x03\x09\x02\x03\x17\x02" + + "\x03\x0e\x02\x02\x03\x02\x011\x02\x01\x00\x02\x01\x10\x02\x03<\x02\x07" + + "\x0d\x02\x02\x0c\x02\x0c0\x02\x01\x03\x02\x01\x01\x02\x01 \x02\x01\x22" + + "\x02\x01)\x02\x01\x0a\x02\x01\x0c\x02\x02\x06\x02\x02\x02\x02\x03\x10" + + "\x03\x037 \x03\x0b+\x03\x021\x00\x02\x01\x04\x02\x01\x02\x02\x019\x02" + + "\x03\x1c\x02\x02$\x03\x80p$\x02\x03:\x02\x03\x0a\x03\xc1r.\x03\xc1r,\x03" + + "\xc1r\x02\x02\x02:\x02\x02>\x02\x02,\x02\x02\x10\x02\x02\x00\x03\xc1s<" + + "\x03\xc1s*\x03\xc2L$\x03\xc2L;\x02\x09)\x02\x0a\x19\x03\x83\xab\xe3\x03" + + "\x83\xab\xf2\x03 4\xe0\x03\x81\xab\xea\x03\x81\xab\xf3\x03 4\xef\x03\x96" + + "\xe1\xcd\x03\x84\xe5\xc3\x02\x0d\x11\x03\x8b\xec\xcb\x03\x94\xec\xcf\x03" + + "\x9a\xec\xc2\x03\x8b\xec\xdb\x03\x94\xec\xdf\x03\x9a\xec\xd2\x03\x01\x0c" + + "!\x03\x01\x0c#\x03ʠ\x9d\x03ʣ\x9c\x03ʢ\x9f\x03ʥ\x9e\x03ʤ\x91\x03ʧ\x90\x03" + + "ʦ\x93\x03ʩ\x92\x03ʨ\x95\x03\xca\xf3\xb5\x03\xca\xf0\xb4\x03\xca\xf1\xb7" + + "\x03\xca\xf6\xb6\x03\xca\xf7\x89\x03\xca\xf4\x88\x03\xca\xf5\x8b\x03\xca" + + "\xfa\x8a\x03\xca\xfb\x8d\x03\xca\xf8\x8c\x03\xca\xf9\x8f\x03\xca\xfe\x8e" + + "\x03\xca\xff\x81\x03\xca\xfc\x80\x03\xca\xfd\x83\x03\xca\xe2\x82\x03\xca" + + "\xe3\x85\x03\xca\xe0\x84\x03\xca\xe1\x87\x03\xca\xe6\x86\x03\xca\xe7\x99" + + "\x03\xca\xe4\x98\x03\xca\xe5\x9b\x03\xca\xea\x9a\x03\xca\xeb\x9d\x03\xca" + + "\xe8\x9c\x03ؓ\x89\x03ߔ\x8b\x02\x010\x03\x03\x04\x1e\x03\x04\x15\x12\x03" + + "\x0b\x05,\x03\x06\x04\x00\x03\x06\x04)\x03\x06\x044\x03\x06\x04<\x03\x06" + + "\x05\x1d\x03\x06\x06\x00\x03\x06\x06\x0a\x03\x06\x06'\x03\x06\x062\x03" + + "\x0786\x03\x079/\x03\x079 \x03\x07:\x0e\x03\x07:\x1b\x03\x07:%\x03\x07;/" + + "\x03\x07;%\x03\x074\x11\x03\x076\x09\x03\x077*\x03\x070\x01\x03\x070\x0f" + + "\x03\x070.\x03\x071\x16\x03\x071\x04\x03\x0710\x03\x072\x18\x03\x072-" + + "\x03\x073\x14\x03\x073>\x03\x07'\x09\x03\x07 \x00\x03\x07\x1f\x0b\x03" + + "\x07\x18#\x03\x07\x18(\x03\x07\x186\x03\x07\x18\x03\x03\x07\x19\x16\x03" + + "\x07\x116\x03\x07\x12'\x03\x07\x13\x10\x03\x07\x0c&\x03\x07\x0c\x08\x03" + + "\x07\x0c\x13\x03\x07\x0d\x02\x03\x07\x0d\x1c\x03\x07\x0b5\x03\x07\x0b" + + "\x0a\x03\x07\x0b\x01\x03\x07\x0b\x0f\x03\x07\x05\x00\x03\x07\x05\x09\x03" + + "\x07\x05\x0b\x03\x07\x07\x01\x03\x07\x07\x08\x03\x07\x00<\x03\x07\x00+" + + "\x03\x07\x01)\x03\x07\x01\x1b\x03\x07\x01\x08\x03\x07\x03?\x03\x0445\x03" + + "\x044\x08\x03\x0454\x03\x04)/\x03\x04)5\x03\x04+\x05\x03\x04+\x14\x03" + + "\x04+ \x03\x04+<\x03\x04*&\x03\x04*\x22\x03\x04&8\x03\x04!\x01\x03\x04!" + + "\x22\x03\x04\x11+\x03\x04\x10.\x03\x04\x104\x03\x04\x13=\x03\x04\x12\x04" + + "\x03\x04\x12\x0a\x03\x04\x0d\x1d\x03\x04\x0d\x07\x03\x04\x0d \x03\x05<>" + + "\x03\x055<\x03\x055!\x03\x055#\x03\x055&\x03\x054\x1d\x03\x054\x02\x03" + + "\x054\x07\x03\x0571\x03\x053\x1a\x03\x053\x16\x03\x05.<\x03\x05.\x07\x03" + + "\x05):\x03\x05)<\x03\x05)\x0c\x03\x05)\x15\x03\x05+-\x03\x05+5\x03\x05$" + + "\x1e\x03\x05$\x14\x03\x05'\x04\x03\x05'\x14\x03\x05&\x02\x03\x05\x226" + + "\x03\x05\x22\x0c\x03\x05\x22\x1c\x03\x05\x19\x0a\x03\x05\x1b\x09\x03\x05" + + "\x1b\x0c\x03\x05\x14\x07\x03\x05\x16?\x03\x05\x16\x0c\x03\x05\x0c\x05" + + "\x03\x05\x0e\x0f\x03\x05\x01\x0e\x03\x05\x00(\x03\x05\x030\x03\x05\x03" + + "\x06\x03\x0a==\x03\x0a=1\x03\x0a=,\x03\x0a=\x0c\x03\x0a??\x03\x0a<\x08" + + "\x03\x0a9!\x03\x0a9)\x03\x0a97\x03\x0a99\x03\x0a6\x0a\x03\x0a6\x1c\x03" + + "\x0a6\x17\x03\x0a7'\x03\x0a78\x03\x0a73\x03\x0a'\x01\x03\x0a'&\x03\x0a" + + "\x1f\x0e\x03\x0a\x1f\x03\x03\x0a\x1f3\x03\x0a\x1b/\x03\x0a\x18\x19\x03" + + "\x0a\x19\x01\x03\x0a\x16\x14\x03\x0a\x0e\x22\x03\x0a\x0f\x10\x03\x0a\x0f" + + "\x02\x03\x0a\x0f \x03\x0a\x0c\x04\x03\x0a\x0b>\x03\x0a\x0b+\x03\x0a\x08/" + + "\x03\x0a\x046\x03\x0a\x05\x14\x03\x0a\x00\x04\x03\x0a\x00\x10\x03\x0a" + + "\x00\x14\x03\x0b<3\x03\x0b;*\x03\x0b9\x22\x03\x0b9)\x03\x0b97\x03\x0b+" + + "\x10\x03\x0b((\x03\x0b&5\x03\x0b$\x1c\x03\x0b$\x12\x03\x0b%\x04\x03\x0b#" + + "<\x03\x0b#0\x03\x0b#\x0d\x03\x0b#\x19\x03\x0b!:\x03\x0b!\x1f\x03\x0b!" + + "\x00\x03\x0b\x1e5\x03\x0b\x1c\x1d\x03\x0b\x1d-\x03\x0b\x1d(\x03\x0b\x18." + + "\x03\x0b\x18 \x03\x0b\x18\x16\x03\x0b\x14\x13\x03\x0b\x15$\x03\x0b\x15" + + "\x22\x03\x0b\x12\x1b\x03\x0b\x12\x10\x03\x0b\x132\x03\x0b\x13=\x03\x0b" + + "\x12\x18\x03\x0b\x0c&\x03\x0b\x061\x03\x0b\x06:\x03\x0b\x05#\x03\x0b\x05" + + "<\x03\x0b\x04\x0b\x03\x0b\x04\x04\x03\x0b\x04\x1b\x03\x0b\x042\x03\x0b" + + "\x041\x03\x0b\x03\x03\x03\x0b\x03\x1d\x03\x0b\x03/\x03\x0b\x03+\x03\x0b" + + "\x02\x1b\x03\x0b\x02\x00\x03\x0b\x01\x1e\x03\x0b\x01\x08\x03\x0b\x015" + + "\x03\x06\x0d9\x03\x06\x0d=\x03\x06\x0d?\x03\x02\x001\x03\x02\x003\x03" + + "\x02\x02\x19\x03\x02\x006\x03\x02\x02\x1b\x03\x02\x004\x03\x02\x00<\x03" + + "\x02\x02\x0a\x03\x02\x02\x0e\x03\x02\x01\x1a\x03\x02\x01\x07\x03\x02\x01" + + "\x05\x03\x02\x01\x0b\x03\x02\x01%\x03\x02\x01\x0c\x03\x02\x01\x04\x03" + + "\x02\x01\x1c\x03\x02\x00.\x03\x02\x002\x03\x02\x00>\x03\x02\x00\x12\x03" + + "\x02\x00\x16\x03\x02\x011\x03\x02\x013\x03\x02\x02 \x03\x02\x02%\x03\x02" + + "\x02$\x03\x02\x028\x03\x02\x02;\x03\x02\x024\x03\x02\x012\x03\x02\x022" + + "\x03\x02\x02/\x03\x02\x01,\x03\x02\x01\x13\x03\x02\x01\x16\x03\x02\x01" + + "\x11\x03\x02\x01\x1e\x03\x02\x01\x15\x03\x02\x01\x17\x03\x02\x01\x0f\x03" + + "\x02\x01\x08\x03\x02\x00?\x03\x02\x03\x07\x03\x02\x03\x0d\x03\x02\x03" + + "\x13\x03\x02\x03\x1d\x03\x02\x03\x1f\x03\x02\x00\x03\x03\x02\x00\x0d\x03" + + "\x02\x00\x01\x03\x02\x00\x1b\x03\x02\x00\x19\x03\x02\x00\x18\x03\x02\x00" + + "\x13\x03\x02\x00/\x03\x07>\x12\x03\x07<\x1f\x03\x07>\x1d\x03\x06\x1d\x0e" + + "\x03\x07>\x1c\x03\x07>:\x03\x07>\x13\x03\x04\x12+\x03\x07?\x03\x03\x07>" + + "\x02\x03\x06\x224\x03\x06\x1a.\x03\x07<%\x03\x06\x1c\x0b\x03\x0609\x03" + + "\x05\x1f\x01\x03\x04'\x08\x03\x93\xfd\xf5\x03\x02\x0d \x03\x02\x0d#\x03" + + "\x02\x0d!\x03\x02\x0d&\x03\x02\x0d\x22\x03\x02\x0d/\x03\x02\x0d,\x03\x02" + + "\x0d$\x03\x02\x0d'\x03\x02\x0d%\x03\x02\x0d;\x03\x02\x0d=\x03\x02\x0d?" + + "\x03\x099.\x03\x08\x0b7\x03\x08\x02\x14\x03\x08\x14\x0d\x03\x08.:\x03" + + "\x089'\x03\x0f\x0b\x18\x03\x0f\x1c1\x03\x0f\x17&\x03\x0f9\x1f\x03\x0f0" + + "\x0c\x03\x0e\x0a9\x03\x0e\x056\x03\x0e\x1c#\x03\x0f\x13\x0e\x03\x072\x00" + + "\x03\x070\x0d\x03\x072\x0b\x03\x06\x11\x18\x03\x070\x10\x03\x06\x0f(\x03" + + "\x072\x05\x03\x06\x0f,\x03\x073\x15\x03\x06\x07\x08\x03\x05\x16\x02\x03" + + "\x04\x0b \x03\x05:8\x03\x05\x16%\x03\x0a\x0d\x1f\x03\x06\x16\x10\x03\x05" + + "\x1d5\x03\x05*;\x03\x05\x16\x1b\x03\x04.-\x03\x06\x1a\x19\x03\x04\x03," + + "\x03\x0b87\x03\x04/\x0a\x03\x06\x00,\x03\x04-\x01\x03\x04\x1e-\x03\x06/(" + + "\x03\x0a\x0b5\x03\x06\x0e7\x03\x06\x07.\x03\x0597\x03\x0a*%\x03\x0760" + + "\x03\x06\x0c;\x03\x05'\x00\x03\x072.\x03\x072\x08\x03\x06=\x01\x03\x06" + + "\x05\x1b\x03\x06\x06\x12\x03\x06$=\x03\x06'\x0d\x03\x04\x11\x0f\x03\x076" + + ",\x03\x06\x07;\x03\x06.,\x03\x86\xf9\xea\x03\x8f\xff\xeb\x02\x092\x02" + + "\x095\x02\x094\x02\x09;\x02\x09>\x02\x098\x02\x09*\x02\x09/\x02\x09,\x02" + + "\x09%\x02\x09&\x02\x09#\x02\x09 \x02\x08!\x02\x08%\x02\x08$\x02\x08+\x02" + + "\x08.\x02\x08*\x02\x08&\x02\x088\x02\x08>\x02\x084\x02\x086\x02\x080\x02" + + "\x08\x10\x02\x08\x17\x02\x08\x12\x02\x08\x1d\x02\x08\x1f\x02\x08\x13\x02" + + "\x08\x15\x02\x08\x14\x02\x08\x0c\x03\x8b\xfd\xd0\x03\x81\xec\xc6\x03\x87" + + "\xe0\x8a\x03-2\xe3\x03\x80\xef\xe4\x03-2\xea\x03\x88\xe6\xeb\x03\x8e\xe6" + + "\xe8\x03\x84\xe6\xe9\x03\x97\xe6\xee\x03-2\xf9\x03-2\xf6\x03\x8e\xe3\xad" + + "\x03\x80\xe3\x92\x03\x88\xe3\x90\x03\x8e\xe3\x90\x03\x80\xe3\x97\x03\x88" + + "\xe3\x95\x03\x88\xfe\xcb\x03\x8e\xfe\xca\x03\x84\xfe\xcd\x03\x91\xef\xc9" + + "\x03-2\xc1\x03-2\xc0\x03-2\xcb\x03\x88@\x09\x03\x8e@\x08\x03\x8f\xe0\xf5" + + "\x03\x8e\xe6\xf9\x03\x8e\xe0\xfa\x03\x93\xff\xf4\x03\x84\xee\xd3\x03\x0b" + + "(\x04\x023 \x03\x0b)\x08\x021;\x02\x01*\x03\x0b#\x10\x03\x0b 0\x03\x0b!" + + "\x10\x03\x0b!0\x03\x07\x15\x08\x03\x09?5\x03\x07\x1f\x08\x03\x07\x17\x0b" + + "\x03\x09\x1f\x15\x03\x0b\x1c7\x03\x0a+#\x03\x06\x1a\x1b\x03\x06\x1a\x14" + + "\x03\x0a\x01\x18\x03\x06#\x1b\x03\x0a2\x0c\x03\x0a\x01\x04\x03\x09#;\x03" + + "\x08='\x03\x08\x1a\x0a\x03\x07\x03\x0a\x111\x03\x09\x1b\x09\x03\x073.\x03\x07" + + "\x01\x00\x03\x09/,\x03\x07#>\x03\x07\x048\x03\x0a\x1f\x22\x03\x098>\x03" + + "\x09\x11\x00\x03\x08/\x17\x03\x06'\x22\x03\x0b\x1a+\x03\x0a\x22\x19\x03" + + "\x0a/1\x03\x0974\x03\x09\x0f\x22\x03\x08,\x22\x03\x08?\x14\x03\x07$5\x03" + + "\x07<3\x03\x07=*\x03\x07\x13\x18\x03\x068\x0a\x03\x06\x09\x16\x03\x06" + + "\x13\x00\x03\x08\x067\x03\x08\x01\x03\x03\x08\x12\x1d\x03\x07+7\x03\x06(" + + ";\x03\x06\x1c?\x03\x07\x0e\x17\x03\x0a\x06\x1d\x03\x0a\x19\x07\x03\x08" + + "\x14$\x03\x07$;\x03\x08,$\x03\x08\x06\x0d\x03\x07\x16\x0a\x03\x06>>\x03" + + "\x0a\x06\x12\x03\x0a\x14)\x03\x09\x0d\x1f\x03\x09\x12\x17\x03\x09\x19" + + "\x01\x03\x08\x11 \x03\x08\x1d'\x03\x06<\x1a\x03\x0a.\x00\x03\x07'\x18" + + "\x03\x0a\x22\x08\x03\x08\x0d\x0a\x03\x08\x13)\x03\x07*)\x03\x06<,\x03" + + "\x07\x0b\x1a\x03\x09.\x14\x03\x09\x0d\x1e\x03\x07\x0e#\x03\x0b\x1d'\x03" + + "\x0a\x0a8\x03\x09%2\x03\x08+&\x03\x080\x12\x03\x0a)4\x03\x08\x06\x1f\x03" + + "\x0b\x1b\x1a\x03\x0a\x1b\x0f\x03\x0b\x1d*\x03\x09\x16$\x03\x090\x11\x03" + + "\x08\x11\x08\x03\x0a*(\x03\x0a\x042\x03\x089,\x03\x074'\x03\x07\x0f\x05" + + "\x03\x09\x0b\x0a\x03\x07\x1b\x01\x03\x09\x17:\x03\x09.\x0d\x03\x07.\x11" + + "\x03\x09+\x15\x03\x080\x13\x03\x0b\x1f\x19\x03\x0a \x11\x03\x0a\x220\x03" + + "\x09\x07;\x03\x08\x16\x1c\x03\x07,\x13\x03\x07\x0e/\x03\x06\x221\x03\x0a" + + ".\x0a\x03\x0a7\x02\x03\x0a\x032\x03\x0a\x1d.\x03\x091\x06\x03\x09\x19:" + + "\x03\x08\x02/\x03\x060+\x03\x06\x0f-\x03\x06\x1c\x1f\x03\x06\x1d\x07\x03" + + "\x0a,\x11\x03\x09=\x0d\x03\x09\x0b;\x03\x07\x1b/\x03\x0a\x1f:\x03\x09 " + + "\x1f\x03\x09.\x10\x03\x094\x0b\x03\x09\x1a1\x03\x08#\x1a\x03\x084\x1d" + + "\x03\x08\x01\x1f\x03\x08\x11\x22\x03\x07'8\x03\x07\x1a>\x03\x0757\x03" + + "\x06&9\x03\x06+\x11\x03\x0a.\x0b\x03\x0a,>\x03\x0a4#\x03\x08%\x17\x03" + + "\x07\x05\x22\x03\x07\x0c\x0b\x03\x0a\x1d+\x03\x0a\x19\x16\x03\x09+\x1f" + + "\x03\x09\x08\x0b\x03\x08\x16\x18\x03\x08+\x12\x03\x0b\x1d\x0c\x03\x0a=" + + "\x10\x03\x0a\x09\x0d\x03\x0a\x10\x11\x03\x09&0\x03\x08(\x1f\x03\x087\x07" + + "\x03\x08\x185\x03\x07'6\x03\x06.\x05\x03\x06=\x04\x03\x06;;\x03\x06\x06," + + "\x03\x0b\x18>\x03\x08\x00\x18\x03\x06 \x03\x03\x06<\x00\x03\x09%\x18\x03" + + "\x0b\x1c<\x03\x0a%!\x03\x0a\x09\x12\x03\x0a\x16\x02\x03\x090'\x03\x09" + + "\x0e=\x03\x08 \x0e\x03\x08>\x03\x03\x074>\x03\x06&?\x03\x06\x19\x09\x03" + + "\x06?(\x03\x0a-\x0e\x03\x09:3\x03\x098:\x03\x09\x12\x0b\x03\x09\x1d\x17" + + "\x03\x087\x05\x03\x082\x14\x03\x08\x06%\x03\x08\x13\x1f\x03\x06\x06\x0e" + + "\x03\x0a\x22<\x03\x09/<\x03\x06>+\x03\x0a'?\x03\x0a\x13\x0c\x03\x09\x10<" + + "\x03\x07\x1b=\x03\x0a\x19\x13\x03\x09\x22\x1d\x03\x09\x07\x0d\x03\x08)" + + "\x1c\x03\x06=\x1a\x03\x0a/4\x03\x0a7\x11\x03\x0a\x16:\x03\x09?3\x03\x09:" + + "/\x03\x09\x05\x0a\x03\x09\x14\x06\x03\x087\x22\x03\x080\x07\x03\x08\x1a" + + "\x1f\x03\x07\x04(\x03\x07\x04\x09\x03\x06 %\x03\x06<\x08\x03\x0a+\x14" + + "\x03\x09\x1d\x16\x03\x0a70\x03\x08 >\x03\x0857\x03\x070\x0a\x03\x06=\x12" + + "\x03\x06\x16%\x03\x06\x1d,\x03\x099#\x03\x09\x10>\x03\x07 \x1e\x03\x08" + + "\x0c<\x03\x08\x0b\x18\x03\x08\x15+\x03\x08,:\x03\x08%\x22\x03\x07\x0a$" + + "\x03\x0b\x1c=\x03\x07+\x08\x03\x0a/\x05\x03\x0a \x07\x03\x0a\x12'\x03" + + "\x09#\x11\x03\x08\x1b\x15\x03\x0a\x06\x01\x03\x09\x1c\x1b\x03\x0922\x03" + + "\x07\x14<\x03\x07\x09\x04\x03\x061\x04\x03\x07\x0e\x01\x03\x0a\x13\x18" + + "\x03\x0a-\x0c\x03\x0a?\x0d\x03\x0a\x09\x0a\x03\x091&\x03\x0a/\x0b\x03" + + "\x08$<\x03\x083\x1d\x03\x08\x0c$\x03\x08\x0d\x07\x03\x08\x0d?\x03\x08" + + "\x0e\x14\x03\x065\x0a\x03\x08\x1a#\x03\x08\x16#\x03\x0702\x03\x07\x03" + + "\x1a\x03\x06(\x1d\x03\x06+\x1b\x03\x06\x0b\x05\x03\x06\x0b\x17\x03\x06" + + "\x0c\x04\x03\x06\x1e\x19\x03\x06+0\x03\x062\x18\x03\x0b\x16\x1e\x03\x0a+" + + "\x16\x03\x0a-?\x03\x0a#:\x03\x0a#\x10\x03\x0a%$\x03\x0a>+\x03\x0a01\x03" + + "\x0a1\x10\x03\x0a\x099\x03\x0a\x0a\x12\x03\x0a\x19\x1f\x03\x0a\x19\x12" + + "\x03\x09*)\x03\x09-\x16\x03\x09.1\x03\x09.2\x03\x09<\x0e\x03\x09> \x03" + + "\x093\x12\x03\x09\x0b\x01\x03\x09\x1c2\x03\x09\x11\x1c\x03\x09\x15%\x03" + + "\x08,&\x03\x08!\x22\x03\x089(\x03\x08\x0b\x1a\x03\x08\x0d2\x03\x08\x0c" + + "\x04\x03\x08\x0c\x06\x03\x08\x0c\x1f\x03\x08\x0c\x0c\x03\x08\x0f\x1f\x03" + + "\x08\x0f\x1d\x03\x08\x00\x14\x03\x08\x03\x14\x03\x08\x06\x16\x03\x08\x1e" + + "#\x03\x08\x11\x11\x03\x08\x10\x18\x03\x08\x14(\x03\x07)\x1e\x03\x07.1" + + "\x03\x07 $\x03\x07 '\x03\x078\x08\x03\x07\x0d0\x03\x07\x0f7\x03\x07\x05#" + + "\x03\x07\x05\x1a\x03\x07\x1a7\x03\x07\x1d-\x03\x07\x17\x10\x03\x06)\x1f" + + "\x03\x062\x0b\x03\x066\x16\x03\x06\x09\x11\x03\x09(\x1e\x03\x07!5\x03" + + "\x0b\x11\x16\x03\x0a/\x04\x03\x0a,\x1a\x03\x0b\x173\x03\x0a,1\x03\x0a/5" + + "\x03\x0a\x221\x03\x0a\x22\x0d\x03\x0a?%\x03\x0a<,\x03\x0a?#\x03\x0a>\x19" + + "\x03\x0a\x08&\x03\x0a\x0b\x0e\x03\x0a\x0c:\x03\x0a\x0c+\x03\x0a\x03\x22" + + "\x03\x0a\x06)\x03\x0a\x11\x10\x03\x0a\x11\x1a\x03\x0a\x17-\x03\x0a\x14(" + + "\x03\x09)\x1e\x03\x09/\x09\x03\x09.\x00\x03\x09,\x07\x03\x09/*\x03\x09-9" + + "\x03\x09\x228\x03\x09%\x09\x03\x09:\x12\x03\x09;\x1d\x03\x09?\x06\x03" + + "\x093%\x03\x096\x05\x03\x096\x08\x03\x097\x02\x03\x09\x07,\x03\x09\x04," + + "\x03\x09\x1f\x16\x03\x09\x11\x03\x03\x09\x11\x12\x03\x09\x168\x03\x08*" + + "\x05\x03\x08/2\x03\x084:\x03\x08\x22+\x03\x08 0\x03\x08&\x0a\x03\x08;" + + "\x10\x03\x08>$\x03\x08>\x18\x03\x0829\x03\x082:\x03\x081,\x03\x081<\x03" + + "\x081\x1c\x03\x087#\x03\x087*\x03\x08\x09'\x03\x08\x00\x1d\x03\x08\x05-" + + "\x03\x08\x1f4\x03\x08\x1d\x04\x03\x08\x16\x0f\x03\x07*7\x03\x07'!\x03" + + "\x07%\x1b\x03\x077\x0c\x03\x07\x0c1\x03\x07\x0c.\x03\x07\x00\x06\x03\x07" + + "\x01\x02\x03\x07\x010\x03\x07\x06=\x03\x07\x01\x03\x03\x07\x01\x13\x03" + + "\x07\x06\x06\x03\x07\x05\x0a\x03\x07\x1f\x09\x03\x07\x17:\x03\x06*1\x03" + + "\x06-\x1d\x03\x06\x223\x03\x062:\x03\x060$\x03\x066\x1e\x03\x064\x12\x03" + + "\x0645\x03\x06\x0b\x00\x03\x06\x0b7\x03\x06\x07\x1f\x03\x06\x15\x12\x03" + + "\x0c\x05\x0f\x03\x0b+\x0b\x03\x0b+-\x03\x06\x16\x1b\x03\x06\x15\x17\x03" + + "\x89\xca\xea\x03\x89\xca\xe8\x03\x0c8\x10\x03\x0c8\x01\x03\x0c8\x0f\x03" + + "\x0d8%\x03\x0d8!\x03\x0c8-\x03\x0c8/\x03\x0c8+\x03\x0c87\x03\x0c85\x03" + + "\x0c9\x09\x03\x0c9\x0d\x03\x0c9\x0f\x03\x0c9\x0b\x03\xcfu\x0c\x03\xcfu" + + "\x0f\x03\xcfu\x0e\x03\xcfu\x09\x03\x0c9\x10\x03\x0d9\x0c\x03\xcf`;\x03" + + "\xcf`>\x03\xcf`9\x03\xcf`8\x03\xcf`7\x03\xcf`*\x03\xcf`-\x03\xcf`,\x03" + + "\x0d\x1b\x1a\x03\x0d\x1b&\x03\x0c=.\x03\x0c=%\x03\x0c>\x1e\x03\x0c>\x14" + + "\x03\x0c?\x06\x03\x0c?\x0b\x03\x0c?\x0c\x03\x0c?\x0d\x03\x0c?\x02\x03" + + "\x0c>\x0f\x03\x0c>\x08\x03\x0c>\x09\x03\x0c>,\x03\x0c>\x0c\x03\x0c?\x13" + + "\x03\x0c?\x16\x03\x0c?\x15\x03\x0c?\x1c\x03\x0c?\x1f\x03\x0c?\x1d\x03" + + "\x0c?\x1a\x03\x0c?\x17\x03\x0c?\x08\x03\x0c?\x09\x03\x0c?\x0e\x03\x0c?" + + "\x04\x03\x0c?\x05\x03\x0c" + + "\x03\x0c=2\x03\x0c=6\x03\x0c<\x07\x03\x0c<\x05\x03\x0e:!\x03\x0e:#\x03" + + "\x0e8\x09\x03\x0e:&\x03\x0e8\x0b\x03\x0e:$\x03\x0e:,\x03\x0e8\x1a\x03" + + "\x0e8\x1e\x03\x0e:*\x03\x0e:7\x03\x0e:5\x03\x0e:;\x03\x0e:\x15\x03\x0e:<" + + "\x03\x0e:4\x03\x0e:'\x03\x0e:-\x03\x0e:%\x03\x0e:?\x03\x0e:=\x03\x0e:)" + + "\x03\x0e:/\x03\xcfs'\x03\x0d=\x0f\x03\x0d+*\x03\x0d99\x03\x0d9;\x03\x0d9" + + "?\x03\x0d)\x0d\x03\x0d(%\x02\x01\x18\x02\x01(\x02\x03'\x02\x03)\x02\x03+" + + "\x02\x03/\x02\x03\x19\x02\x03\x1b\x02\x03\x1f\x03\x0d\x22\x18\x03\x0d" + + "\x22\x1a\x03\x0d\x22'\x03\x0d\x22/\x03\x0d\x223\x03\x0d\x22$\x02\x01\x1e" + + "\x03\x0f$!\x03\x0f87\x03\x0f4\x0e\x03\x0f5\x1d\x03\x06'\x03\x03\x0f\x08" + + "\x18\x03\x0f\x0d\x1b\x03\x0e2=\x03\x0e;\x08\x03\x0e:\x0b\x03\x0e\x06$" + + "\x03\x0e\x0d)\x03\x0e\x16\x1f\x03\x0e\x16\x1b\x03\x0d$\x0a\x03\x05,\x1d" + + "\x03\x0d. \x03\x0d.#\x03\x0c(/\x03\x09%\x02\x03\x0d90\x03\x0d\x0e4\x03" + + "\x0d\x0d\x0f\x03\x0c#\x00\x03\x0c,\x1e\x03\x0c2\x0e\x03\x0c\x01\x17\x03" + + "\x0c\x09:\x03\x0e\x173\x03\x0c\x08\x03\x03\x0c\x11\x07\x03\x0c\x10\x18" + + "\x03\x0c\x1f\x1c\x03\x0c\x19\x0e\x03\x0c\x1a\x1f\x03\x0f0>\x03\x0b->\x03" + + "\x0b<+\x03\x0b8\x13\x03\x0b\x043\x03\x0b\x14\x03\x03\x0b\x16%\x03\x0d" + + "\x22&\x03\x0b\x1a\x1a\x03\x0b\x1a\x04\x03\x0a%9\x03\x0a&2\x03\x0a&0\x03" + + "\x0a!\x1a\x03\x0a!7\x03\x0a5\x10\x03\x0a=4\x03\x0a?\x0e\x03\x0a>\x10\x03" + + "\x0a\x00 \x03\x0a\x0f:\x03\x0a\x0f9\x03\x0a\x0b\x0a\x03\x0a\x17%\x03\x0a" + + "\x1b-\x03\x09-\x1a\x03\x09,4\x03\x09.,\x03\x09)\x09\x03\x096!\x03\x091" + + "\x1f\x03\x093\x16\x03\x0c+\x1f\x03\x098 \x03\x098=\x03\x0c(\x1a\x03\x0c(" + + "\x16\x03\x09\x0a+\x03\x09\x16\x12\x03\x09\x13\x0e\x03\x09\x153\x03\x08)!" + + "\x03\x09\x1a\x01\x03\x09\x18\x01\x03\x08%#\x03\x08>\x22\x03\x08\x05%\x03" + + "\x08\x02*\x03\x08\x15;\x03\x08\x1b7\x03\x0f\x07\x1d\x03\x0f\x04\x03\x03" + + "\x070\x0c\x03\x07;\x0b\x03\x07\x08\x17\x03\x07\x12\x06\x03\x06/-\x03\x06" + + "71\x03\x065+\x03\x06>7\x03\x06\x049\x03\x05+\x1e\x03\x05,\x17\x03\x05 " + + "\x1d\x03\x05\x22\x05\x03\x050\x1d" + +// 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 *idnaTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[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 := idnaIndex[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 := idnaIndex[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 = idnaIndex[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 := idnaIndex[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 = idnaIndex[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 = idnaIndex[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 *idnaTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[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 *idnaTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[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 := idnaIndex[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 := idnaIndex[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 = idnaIndex[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 := idnaIndex[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 = idnaIndex[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 = idnaIndex[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 *idnaTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// idnaTrie. Total size: 31598 bytes (30.86 KiB). Checksum: d3118eda0d6b5360. +type idnaTrie struct{} + +func newIdnaTrie(i int) *idnaTrie { + return &idnaTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 133: + return uint16(idnaValues[n<<6+uint32(b)]) + default: + n -= 133 + return uint16(idnaSparse.lookup(n, b)) + } +} + +// idnaValues: 135 blocks, 8640 entries, 17280 bytes +// The third block is the zero block. +var idnaValues = [8640]uint16{ + // Block 0x0, offset 0x0 + 0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080, + 0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080, + 0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080, + 0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080, + 0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080, + 0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080, + 0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080, + 0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080, + 0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008, + 0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080, + 0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080, + // Block 0x1, offset 0x40 + 0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105, + 0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105, + 0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105, + 0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105, + 0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080, + 0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008, + 0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008, + 0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008, + 0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008, + 0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080, + 0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, + 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, + 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, + 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, + 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, + 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018, + 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x0012, 0xe9: 0x0018, + 0xea: 0x0019, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x0022, + 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0029, 0xf3: 0x0031, 0xf4: 0x003a, 0xf5: 0x0005, + 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x0042, 0xf9: 0x0049, 0xfa: 0x0051, 0xfb: 0x0018, + 0xfc: 0x0059, 0xfd: 0x0061, 0xfe: 0x0069, 0xff: 0x0018, + // Block 0x4, offset 0x100 + 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008, + 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008, + 0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008, + 0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008, + 0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008, + 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008, + 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008, + 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008, + 0x130: 0x0071, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, + 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d, + 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0079, + // Block 0x5, offset 0x140 + 0x140: 0x0079, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, + 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x0081, 0x14a: 0xe00d, 0x14b: 0x0008, + 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008, + 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008, + 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008, + 0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008, + 0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008, + 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008, + 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008, + 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d, + 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x0089, + // Block 0x6, offset 0x180 + 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008, + 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d, + 0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d, + 0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d, + 0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155, + 0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008, + 0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d, + 0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd, + 0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d, + 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008, + 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x0091, 0x1c5: 0x0091, + 0x1c6: 0x0091, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, + 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d, + 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d, + 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008, + 0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008, + 0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008, + 0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008, + 0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008, + 0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008, + 0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008, + // Block 0x8, offset 0x200 + 0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008, + 0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008, + 0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008, + 0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008, + 0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008, + 0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008, + 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008, + 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008, + 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008, + 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0099, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x00a1, 0x23f: 0x0008, + // Block 0x9, offset 0x240 + 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018, + 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008, + 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008, + 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018, + 0x258: 0x00d2, 0x259: 0x00da, 0x25a: 0x00e2, 0x25b: 0x00ea, 0x25c: 0x00f2, 0x25d: 0x00fa, + 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0101, 0x262: 0x0089, 0x263: 0x0109, + 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018, + 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018, + 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018, + 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, + 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, + // Block 0xa, offset 0x280 + 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0111, 0x285: 0x040d, + 0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308, + 0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308, + 0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308, + 0x298: 0x3308, 0x299: 0x3308, 0x29a: 0x3308, 0x29b: 0x3308, 0x29c: 0x3308, 0x29d: 0x3308, + 0x29e: 0x3308, 0x29f: 0x3308, 0x2a0: 0x3308, 0x2a1: 0x3308, 0x2a2: 0x3308, 0x2a3: 0x3308, + 0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308, + 0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308, + 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, + 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x011a, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x0122, 0x2bf: 0x043d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x003a, 0x2c5: 0x012a, + 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040, + 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105, + 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105, + 0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105, + 0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d, + 0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d, + 0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008, + 0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008, + 0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008, + 0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008, + // Block 0xc, offset 0x300 + 0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008, + 0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008, + 0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd, + 0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008, + 0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008, + 0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008, + 0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008, + 0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008, + 0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd, + 0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008, + 0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d, + // Block 0xd, offset 0x340 + 0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008, + 0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008, + 0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008, + 0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008, + 0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008, + 0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008, + 0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008, + 0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008, + 0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008, + 0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008, + 0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008, + // Block 0xe, offset 0x380 + 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x3308, 0x384: 0x3308, 0x385: 0x3308, + 0x386: 0x3308, 0x387: 0x3308, 0x388: 0x3318, 0x389: 0x3318, 0x38a: 0xe00d, 0x38b: 0x0008, + 0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008, + 0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008, + 0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008, + 0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008, + 0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008, + 0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008, + 0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008, + 0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008, + 0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d, + 0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d, + 0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008, + 0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008, + 0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008, + 0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008, + 0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008, + 0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008, + 0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008, + 0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008, + 0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008, + // Block 0x10, offset 0x400 + 0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008, + 0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008, + 0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008, + 0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008, + 0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008, + 0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008, + 0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008, + 0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008, + 0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5, + 0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5, + 0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5, + // Block 0x11, offset 0x440 + 0x440: 0x0840, 0x441: 0x0840, 0x442: 0x0840, 0x443: 0x0840, 0x444: 0x0840, 0x445: 0x0840, + 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0818, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0818, + 0x44c: 0x0018, 0x44d: 0x0818, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x3308, 0x451: 0x3308, + 0x452: 0x3308, 0x453: 0x3308, 0x454: 0x3308, 0x455: 0x3308, 0x456: 0x3308, 0x457: 0x3308, + 0x458: 0x3308, 0x459: 0x3308, 0x45a: 0x3308, 0x45b: 0x0818, 0x45c: 0x0b40, 0x45d: 0x0818, + 0x45e: 0x0818, 0x45f: 0x0818, 0x460: 0x0a08, 0x461: 0x0808, 0x462: 0x0c08, 0x463: 0x0c08, + 0x464: 0x0c08, 0x465: 0x0c08, 0x466: 0x0a08, 0x467: 0x0c08, 0x468: 0x0a08, 0x469: 0x0c08, + 0x46a: 0x0a08, 0x46b: 0x0a08, 0x46c: 0x0a08, 0x46d: 0x0a08, 0x46e: 0x0a08, 0x46f: 0x0c08, + 0x470: 0x0c08, 0x471: 0x0c08, 0x472: 0x0c08, 0x473: 0x0a08, 0x474: 0x0a08, 0x475: 0x0a08, + 0x476: 0x0a08, 0x477: 0x0a08, 0x478: 0x0a08, 0x479: 0x0a08, 0x47a: 0x0a08, 0x47b: 0x0a08, + 0x47c: 0x0a08, 0x47d: 0x0a08, 0x47e: 0x0a08, 0x47f: 0x0a08, + // Block 0x12, offset 0x480 + 0x480: 0x0818, 0x481: 0x0a08, 0x482: 0x0a08, 0x483: 0x0a08, 0x484: 0x0a08, 0x485: 0x0a08, + 0x486: 0x0a08, 0x487: 0x0a08, 0x488: 0x0c08, 0x489: 0x0a08, 0x48a: 0x0a08, 0x48b: 0x3308, + 0x48c: 0x3308, 0x48d: 0x3308, 0x48e: 0x3308, 0x48f: 0x3308, 0x490: 0x3308, 0x491: 0x3308, + 0x492: 0x3308, 0x493: 0x3308, 0x494: 0x3308, 0x495: 0x3308, 0x496: 0x3308, 0x497: 0x3308, + 0x498: 0x3308, 0x499: 0x3308, 0x49a: 0x3308, 0x49b: 0x3308, 0x49c: 0x3308, 0x49d: 0x3308, + 0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808, + 0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808, + 0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08, + 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0139, + 0x4b6: 0x0141, 0x4b7: 0x0149, 0x4b8: 0x0151, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, + 0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08, + 0x4c6: 0x0c08, 0x4c7: 0x0c08, 0x4c8: 0x0c08, 0x4c9: 0x0c08, 0x4ca: 0x0c08, 0x4cb: 0x0c08, + 0x4cc: 0x0a08, 0x4cd: 0x0c08, 0x4ce: 0x0a08, 0x4cf: 0x0c08, 0x4d0: 0x0a08, 0x4d1: 0x0a08, + 0x4d2: 0x0c08, 0x4d3: 0x0c08, 0x4d4: 0x0818, 0x4d5: 0x0c08, 0x4d6: 0x3308, 0x4d7: 0x3308, + 0x4d8: 0x3308, 0x4d9: 0x3308, 0x4da: 0x3308, 0x4db: 0x3308, 0x4dc: 0x3308, 0x4dd: 0x0840, + 0x4de: 0x0018, 0x4df: 0x3308, 0x4e0: 0x3308, 0x4e1: 0x3308, 0x4e2: 0x3308, 0x4e3: 0x3308, + 0x4e4: 0x3308, 0x4e5: 0x0808, 0x4e6: 0x0808, 0x4e7: 0x3308, 0x4e8: 0x3308, 0x4e9: 0x0018, + 0x4ea: 0x3308, 0x4eb: 0x3308, 0x4ec: 0x3308, 0x4ed: 0x3308, 0x4ee: 0x0c08, 0x4ef: 0x0c08, + 0x4f0: 0x0008, 0x4f1: 0x0008, 0x4f2: 0x0008, 0x4f3: 0x0008, 0x4f4: 0x0008, 0x4f5: 0x0008, + 0x4f6: 0x0008, 0x4f7: 0x0008, 0x4f8: 0x0008, 0x4f9: 0x0008, 0x4fa: 0x0a08, 0x4fb: 0x0a08, + 0x4fc: 0x0a08, 0x4fd: 0x0808, 0x4fe: 0x0808, 0x4ff: 0x0a08, + // Block 0x14, offset 0x500 + 0x500: 0x0818, 0x501: 0x0818, 0x502: 0x0818, 0x503: 0x0818, 0x504: 0x0818, 0x505: 0x0818, + 0x506: 0x0818, 0x507: 0x0818, 0x508: 0x0818, 0x509: 0x0818, 0x50a: 0x0818, 0x50b: 0x0818, + 0x50c: 0x0818, 0x50d: 0x0818, 0x50e: 0x0040, 0x50f: 0x0b40, 0x510: 0x0c08, 0x511: 0x3308, + 0x512: 0x0a08, 0x513: 0x0a08, 0x514: 0x0a08, 0x515: 0x0c08, 0x516: 0x0c08, 0x517: 0x0c08, + 0x518: 0x0c08, 0x519: 0x0c08, 0x51a: 0x0a08, 0x51b: 0x0a08, 0x51c: 0x0a08, 0x51d: 0x0a08, + 0x51e: 0x0c08, 0x51f: 0x0a08, 0x520: 0x0a08, 0x521: 0x0a08, 0x522: 0x0a08, 0x523: 0x0a08, + 0x524: 0x0a08, 0x525: 0x0a08, 0x526: 0x0a08, 0x527: 0x0a08, 0x528: 0x0c08, 0x529: 0x0a08, + 0x52a: 0x0c08, 0x52b: 0x0a08, 0x52c: 0x0c08, 0x52d: 0x0a08, 0x52e: 0x0a08, 0x52f: 0x0c08, + 0x530: 0x3308, 0x531: 0x3308, 0x532: 0x3308, 0x533: 0x3308, 0x534: 0x3308, 0x535: 0x3308, + 0x536: 0x3308, 0x537: 0x3308, 0x538: 0x3308, 0x539: 0x3308, 0x53a: 0x3308, 0x53b: 0x3308, + 0x53c: 0x3308, 0x53d: 0x3308, 0x53e: 0x3308, 0x53f: 0x3308, + // Block 0x15, offset 0x540 + 0x540: 0x0c08, 0x541: 0x0a08, 0x542: 0x0a08, 0x543: 0x0a08, 0x544: 0x0a08, 0x545: 0x0a08, + 0x546: 0x0c08, 0x547: 0x0c08, 0x548: 0x0a08, 0x549: 0x0c08, 0x54a: 0x0a08, 0x54b: 0x0a08, + 0x54c: 0x0a08, 0x54d: 0x0a08, 0x54e: 0x0a08, 0x54f: 0x0a08, 0x550: 0x0a08, 0x551: 0x0a08, + 0x552: 0x0a08, 0x553: 0x0a08, 0x554: 0x0c08, 0x555: 0x0a08, 0x556: 0x0c08, 0x557: 0x0c08, + 0x558: 0x0c08, 0x559: 0x3308, 0x55a: 0x3308, 0x55b: 0x3308, 0x55c: 0x0040, 0x55d: 0x0040, + 0x55e: 0x0818, 0x55f: 0x0040, 0x560: 0x0a08, 0x561: 0x0808, 0x562: 0x0a08, 0x563: 0x0a08, + 0x564: 0x0a08, 0x565: 0x0a08, 0x566: 0x0808, 0x567: 0x0c08, 0x568: 0x0a08, 0x569: 0x0c08, + 0x56a: 0x0c08, 0x56b: 0x0040, 0x56c: 0x0040, 0x56d: 0x0040, 0x56e: 0x0040, 0x56f: 0x0040, + 0x570: 0x0c08, 0x571: 0x0c08, 0x572: 0x0c08, 0x573: 0x0c08, 0x574: 0x0c08, 0x575: 0x0c08, + 0x576: 0x0c08, 0x577: 0x0c08, 0x578: 0x0c08, 0x579: 0x0c08, 0x57a: 0x0c08, 0x57b: 0x0c08, + 0x57c: 0x0c08, 0x57d: 0x0c08, 0x57e: 0x0c08, 0x57f: 0x0c08, + // Block 0x16, offset 0x580 + 0x580: 0x0c08, 0x581: 0x0c08, 0x582: 0x0c08, 0x583: 0x0808, 0x584: 0x0808, 0x585: 0x0808, + 0x586: 0x0a08, 0x587: 0x0808, 0x588: 0x0818, 0x589: 0x0a08, 0x58a: 0x0a08, 0x58b: 0x0a08, + 0x58c: 0x0a08, 0x58d: 0x0a08, 0x58e: 0x0c08, 0x58f: 0x0040, 0x590: 0x0840, 0x591: 0x0840, + 0x592: 0x0040, 0x593: 0x0040, 0x594: 0x0040, 0x595: 0x0040, 0x596: 0x0040, 0x597: 0x0040, + 0x598: 0x3308, 0x599: 0x3308, 0x59a: 0x3308, 0x59b: 0x3308, 0x59c: 0x3308, 0x59d: 0x3308, + 0x59e: 0x3308, 0x59f: 0x3308, 0x5a0: 0x0a08, 0x5a1: 0x0a08, 0x5a2: 0x0a08, 0x5a3: 0x0a08, + 0x5a4: 0x0a08, 0x5a5: 0x0a08, 0x5a6: 0x0a08, 0x5a7: 0x0a08, 0x5a8: 0x0a08, 0x5a9: 0x0a08, + 0x5aa: 0x0c08, 0x5ab: 0x0c08, 0x5ac: 0x0c08, 0x5ad: 0x0808, 0x5ae: 0x0c08, 0x5af: 0x0a08, + 0x5b0: 0x0a08, 0x5b1: 0x0c08, 0x5b2: 0x0c08, 0x5b3: 0x0a08, 0x5b4: 0x0a08, 0x5b5: 0x0a08, + 0x5b6: 0x0a08, 0x5b7: 0x0a08, 0x5b8: 0x0a08, 0x5b9: 0x0c08, 0x5ba: 0x0a08, 0x5bb: 0x0a08, + 0x5bc: 0x0a08, 0x5bd: 0x0a08, 0x5be: 0x0a08, 0x5bf: 0x0a08, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x3008, 0x5c1: 0x3308, 0x5c2: 0x3308, 0x5c3: 0x3308, 0x5c4: 0x3308, 0x5c5: 0x3308, + 0x5c6: 0x3308, 0x5c7: 0x3308, 0x5c8: 0x3308, 0x5c9: 0x3008, 0x5ca: 0x3008, 0x5cb: 0x3008, + 0x5cc: 0x3008, 0x5cd: 0x3b08, 0x5ce: 0x3008, 0x5cf: 0x3008, 0x5d0: 0x0008, 0x5d1: 0x3308, + 0x5d2: 0x3308, 0x5d3: 0x3308, 0x5d4: 0x3308, 0x5d5: 0x3308, 0x5d6: 0x3308, 0x5d7: 0x3308, + 0x5d8: 0x0159, 0x5d9: 0x0161, 0x5da: 0x0169, 0x5db: 0x0171, 0x5dc: 0x0179, 0x5dd: 0x0181, + 0x5de: 0x0189, 0x5df: 0x0191, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x3308, 0x5e3: 0x3308, + 0x5e4: 0x0018, 0x5e5: 0x0018, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0008, + 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, + 0x5f0: 0x0018, 0x5f1: 0x0008, 0x5f2: 0x0008, 0x5f3: 0x0008, 0x5f4: 0x0008, 0x5f5: 0x0008, + 0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0008, 0x5fb: 0x0008, + 0x5fc: 0x0008, 0x5fd: 0x0008, 0x5fe: 0x0008, 0x5ff: 0x0008, + // Block 0x18, offset 0x600 + 0x600: 0x0008, 0x601: 0x3308, 0x602: 0x3008, 0x603: 0x3008, 0x604: 0x0040, 0x605: 0x0008, + 0x606: 0x0008, 0x607: 0x0008, 0x608: 0x0008, 0x609: 0x0008, 0x60a: 0x0008, 0x60b: 0x0008, + 0x60c: 0x0008, 0x60d: 0x0040, 0x60e: 0x0040, 0x60f: 0x0008, 0x610: 0x0008, 0x611: 0x0040, + 0x612: 0x0040, 0x613: 0x0008, 0x614: 0x0008, 0x615: 0x0008, 0x616: 0x0008, 0x617: 0x0008, + 0x618: 0x0008, 0x619: 0x0008, 0x61a: 0x0008, 0x61b: 0x0008, 0x61c: 0x0008, 0x61d: 0x0008, + 0x61e: 0x0008, 0x61f: 0x0008, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x0008, 0x623: 0x0008, + 0x624: 0x0008, 0x625: 0x0008, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0040, + 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, + 0x630: 0x0008, 0x631: 0x0040, 0x632: 0x0008, 0x633: 0x0040, 0x634: 0x0040, 0x635: 0x0040, + 0x636: 0x0008, 0x637: 0x0008, 0x638: 0x0008, 0x639: 0x0008, 0x63a: 0x0040, 0x63b: 0x0040, + 0x63c: 0x3308, 0x63d: 0x0008, 0x63e: 0x3008, 0x63f: 0x3008, + // Block 0x19, offset 0x640 + 0x640: 0x3008, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3308, 0x644: 0x3308, 0x645: 0x0040, + 0x646: 0x0040, 0x647: 0x3008, 0x648: 0x3008, 0x649: 0x0040, 0x64a: 0x0040, 0x64b: 0x3008, + 0x64c: 0x3008, 0x64d: 0x3b08, 0x64e: 0x0008, 0x64f: 0x0040, 0x650: 0x0040, 0x651: 0x0040, + 0x652: 0x0040, 0x653: 0x0040, 0x654: 0x0040, 0x655: 0x0040, 0x656: 0x0040, 0x657: 0x3008, + 0x658: 0x0040, 0x659: 0x0040, 0x65a: 0x0040, 0x65b: 0x0040, 0x65c: 0x0199, 0x65d: 0x01a1, + 0x65e: 0x0040, 0x65f: 0x01a9, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x3308, 0x663: 0x3308, + 0x664: 0x0040, 0x665: 0x0040, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0008, + 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, + 0x670: 0x0008, 0x671: 0x0008, 0x672: 0x0018, 0x673: 0x0018, 0x674: 0x0018, 0x675: 0x0018, + 0x676: 0x0018, 0x677: 0x0018, 0x678: 0x0018, 0x679: 0x0018, 0x67a: 0x0018, 0x67b: 0x0018, + 0x67c: 0x0008, 0x67d: 0x0018, 0x67e: 0x3308, 0x67f: 0x0040, + // Block 0x1a, offset 0x680 + 0x680: 0x0040, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x3008, 0x684: 0x0040, 0x685: 0x0008, + 0x686: 0x0008, 0x687: 0x0008, 0x688: 0x0008, 0x689: 0x0008, 0x68a: 0x0008, 0x68b: 0x0040, + 0x68c: 0x0040, 0x68d: 0x0040, 0x68e: 0x0040, 0x68f: 0x0008, 0x690: 0x0008, 0x691: 0x0040, + 0x692: 0x0040, 0x693: 0x0008, 0x694: 0x0008, 0x695: 0x0008, 0x696: 0x0008, 0x697: 0x0008, + 0x698: 0x0008, 0x699: 0x0008, 0x69a: 0x0008, 0x69b: 0x0008, 0x69c: 0x0008, 0x69d: 0x0008, + 0x69e: 0x0008, 0x69f: 0x0008, 0x6a0: 0x0008, 0x6a1: 0x0008, 0x6a2: 0x0008, 0x6a3: 0x0008, + 0x6a4: 0x0008, 0x6a5: 0x0008, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0040, + 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, + 0x6b0: 0x0008, 0x6b1: 0x0040, 0x6b2: 0x0008, 0x6b3: 0x01b1, 0x6b4: 0x0040, 0x6b5: 0x0008, + 0x6b6: 0x01b9, 0x6b7: 0x0040, 0x6b8: 0x0008, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6bc: 0x3308, 0x6bd: 0x0040, 0x6be: 0x3008, 0x6bf: 0x3008, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x3008, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x0040, 0x6c4: 0x0040, 0x6c5: 0x0040, + 0x6c6: 0x0040, 0x6c7: 0x3308, 0x6c8: 0x3308, 0x6c9: 0x0040, 0x6ca: 0x0040, 0x6cb: 0x3308, + 0x6cc: 0x3308, 0x6cd: 0x3b08, 0x6ce: 0x0040, 0x6cf: 0x0040, 0x6d0: 0x0040, 0x6d1: 0x3308, + 0x6d2: 0x0040, 0x6d3: 0x0040, 0x6d4: 0x0040, 0x6d5: 0x0040, 0x6d6: 0x0040, 0x6d7: 0x0040, + 0x6d8: 0x0040, 0x6d9: 0x01c1, 0x6da: 0x01c9, 0x6db: 0x01d1, 0x6dc: 0x0008, 0x6dd: 0x0040, + 0x6de: 0x01d9, 0x6df: 0x0040, 0x6e0: 0x0040, 0x6e1: 0x0040, 0x6e2: 0x0040, 0x6e3: 0x0040, + 0x6e4: 0x0040, 0x6e5: 0x0040, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0008, + 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, + 0x6f0: 0x3308, 0x6f1: 0x3308, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0008, 0x6f5: 0x3308, + 0x6f6: 0x0018, 0x6f7: 0x0040, 0x6f8: 0x0040, 0x6f9: 0x0040, 0x6fa: 0x0040, 0x6fb: 0x0040, + 0x6fc: 0x0040, 0x6fd: 0x0040, 0x6fe: 0x0040, 0x6ff: 0x0040, + // Block 0x1c, offset 0x700 + 0x700: 0x0040, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3008, 0x704: 0x0040, 0x705: 0x0008, + 0x706: 0x0008, 0x707: 0x0008, 0x708: 0x0008, 0x709: 0x0008, 0x70a: 0x0008, 0x70b: 0x0008, + 0x70c: 0x0008, 0x70d: 0x0008, 0x70e: 0x0040, 0x70f: 0x0008, 0x710: 0x0008, 0x711: 0x0008, + 0x712: 0x0040, 0x713: 0x0008, 0x714: 0x0008, 0x715: 0x0008, 0x716: 0x0008, 0x717: 0x0008, + 0x718: 0x0008, 0x719: 0x0008, 0x71a: 0x0008, 0x71b: 0x0008, 0x71c: 0x0008, 0x71d: 0x0008, + 0x71e: 0x0008, 0x71f: 0x0008, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x0008, 0x723: 0x0008, + 0x724: 0x0008, 0x725: 0x0008, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0040, + 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, + 0x730: 0x0008, 0x731: 0x0040, 0x732: 0x0008, 0x733: 0x0008, 0x734: 0x0040, 0x735: 0x0008, + 0x736: 0x0008, 0x737: 0x0008, 0x738: 0x0008, 0x739: 0x0008, 0x73a: 0x0040, 0x73b: 0x0040, + 0x73c: 0x3308, 0x73d: 0x0008, 0x73e: 0x3008, 0x73f: 0x3008, + // Block 0x1d, offset 0x740 + 0x740: 0x3008, 0x741: 0x3308, 0x742: 0x3308, 0x743: 0x3308, 0x744: 0x3308, 0x745: 0x3308, + 0x746: 0x0040, 0x747: 0x3308, 0x748: 0x3308, 0x749: 0x3008, 0x74a: 0x0040, 0x74b: 0x3008, + 0x74c: 0x3008, 0x74d: 0x3b08, 0x74e: 0x0040, 0x74f: 0x0040, 0x750: 0x0008, 0x751: 0x0040, + 0x752: 0x0040, 0x753: 0x0040, 0x754: 0x0040, 0x755: 0x0040, 0x756: 0x0040, 0x757: 0x0040, + 0x758: 0x0040, 0x759: 0x0040, 0x75a: 0x0040, 0x75b: 0x0040, 0x75c: 0x0040, 0x75d: 0x0040, + 0x75e: 0x0040, 0x75f: 0x0040, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x3308, 0x763: 0x3308, + 0x764: 0x0040, 0x765: 0x0040, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0008, + 0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008, + 0x770: 0x0018, 0x771: 0x0018, 0x772: 0x0040, 0x773: 0x0040, 0x774: 0x0040, 0x775: 0x0040, + 0x776: 0x0040, 0x777: 0x0040, 0x778: 0x0040, 0x779: 0x0008, 0x77a: 0x3308, 0x77b: 0x3308, + 0x77c: 0x3308, 0x77d: 0x3308, 0x77e: 0x3308, 0x77f: 0x3308, + // Block 0x1e, offset 0x780 + 0x780: 0x0040, 0x781: 0x3308, 0x782: 0x3008, 0x783: 0x3008, 0x784: 0x0040, 0x785: 0x0008, + 0x786: 0x0008, 0x787: 0x0008, 0x788: 0x0008, 0x789: 0x0008, 0x78a: 0x0008, 0x78b: 0x0008, + 0x78c: 0x0008, 0x78d: 0x0040, 0x78e: 0x0040, 0x78f: 0x0008, 0x790: 0x0008, 0x791: 0x0040, + 0x792: 0x0040, 0x793: 0x0008, 0x794: 0x0008, 0x795: 0x0008, 0x796: 0x0008, 0x797: 0x0008, + 0x798: 0x0008, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0008, 0x79c: 0x0008, 0x79d: 0x0008, + 0x79e: 0x0008, 0x79f: 0x0008, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x0008, 0x7a3: 0x0008, + 0x7a4: 0x0008, 0x7a5: 0x0008, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0040, + 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008, + 0x7b0: 0x0008, 0x7b1: 0x0040, 0x7b2: 0x0008, 0x7b3: 0x0008, 0x7b4: 0x0040, 0x7b5: 0x0008, + 0x7b6: 0x0008, 0x7b7: 0x0008, 0x7b8: 0x0008, 0x7b9: 0x0008, 0x7ba: 0x0040, 0x7bb: 0x0040, + 0x7bc: 0x3308, 0x7bd: 0x0008, 0x7be: 0x3008, 0x7bf: 0x3308, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x3008, 0x7c1: 0x3308, 0x7c2: 0x3308, 0x7c3: 0x3308, 0x7c4: 0x3308, 0x7c5: 0x0040, + 0x7c6: 0x0040, 0x7c7: 0x3008, 0x7c8: 0x3008, 0x7c9: 0x0040, 0x7ca: 0x0040, 0x7cb: 0x3008, + 0x7cc: 0x3008, 0x7cd: 0x3b08, 0x7ce: 0x0040, 0x7cf: 0x0040, 0x7d0: 0x0040, 0x7d1: 0x0040, + 0x7d2: 0x0040, 0x7d3: 0x0040, 0x7d4: 0x0040, 0x7d5: 0x3308, 0x7d6: 0x3308, 0x7d7: 0x3008, + 0x7d8: 0x0040, 0x7d9: 0x0040, 0x7da: 0x0040, 0x7db: 0x0040, 0x7dc: 0x01e1, 0x7dd: 0x01e9, + 0x7de: 0x0040, 0x7df: 0x0008, 0x7e0: 0x0008, 0x7e1: 0x0008, 0x7e2: 0x3308, 0x7e3: 0x3308, + 0x7e4: 0x0040, 0x7e5: 0x0040, 0x7e6: 0x0008, 0x7e7: 0x0008, 0x7e8: 0x0008, 0x7e9: 0x0008, + 0x7ea: 0x0008, 0x7eb: 0x0008, 0x7ec: 0x0008, 0x7ed: 0x0008, 0x7ee: 0x0008, 0x7ef: 0x0008, + 0x7f0: 0x0018, 0x7f1: 0x0008, 0x7f2: 0x0018, 0x7f3: 0x0018, 0x7f4: 0x0018, 0x7f5: 0x0018, + 0x7f6: 0x0018, 0x7f7: 0x0018, 0x7f8: 0x0040, 0x7f9: 0x0040, 0x7fa: 0x0040, 0x7fb: 0x0040, + 0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x0040, 0x7ff: 0x0040, + // Block 0x20, offset 0x800 + 0x800: 0x0040, 0x801: 0x0040, 0x802: 0x3308, 0x803: 0x0008, 0x804: 0x0040, 0x805: 0x0008, + 0x806: 0x0008, 0x807: 0x0008, 0x808: 0x0008, 0x809: 0x0008, 0x80a: 0x0008, 0x80b: 0x0040, + 0x80c: 0x0040, 0x80d: 0x0040, 0x80e: 0x0008, 0x80f: 0x0008, 0x810: 0x0008, 0x811: 0x0040, + 0x812: 0x0008, 0x813: 0x0008, 0x814: 0x0008, 0x815: 0x0008, 0x816: 0x0040, 0x817: 0x0040, + 0x818: 0x0040, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0008, 0x81d: 0x0040, + 0x81e: 0x0008, 0x81f: 0x0008, 0x820: 0x0040, 0x821: 0x0040, 0x822: 0x0040, 0x823: 0x0008, + 0x824: 0x0008, 0x825: 0x0040, 0x826: 0x0040, 0x827: 0x0040, 0x828: 0x0008, 0x829: 0x0008, + 0x82a: 0x0008, 0x82b: 0x0040, 0x82c: 0x0040, 0x82d: 0x0040, 0x82e: 0x0008, 0x82f: 0x0008, + 0x830: 0x0008, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0008, 0x834: 0x0008, 0x835: 0x0008, + 0x836: 0x0008, 0x837: 0x0008, 0x838: 0x0008, 0x839: 0x0008, 0x83a: 0x0040, 0x83b: 0x0040, + 0x83c: 0x0040, 0x83d: 0x0040, 0x83e: 0x3008, 0x83f: 0x3008, + // Block 0x21, offset 0x840 + 0x840: 0x3308, 0x841: 0x3008, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x3008, 0x845: 0x0040, + 0x846: 0x3308, 0x847: 0x3308, 0x848: 0x3308, 0x849: 0x0040, 0x84a: 0x3308, 0x84b: 0x3308, + 0x84c: 0x3308, 0x84d: 0x3b08, 0x84e: 0x0040, 0x84f: 0x0040, 0x850: 0x0040, 0x851: 0x0040, + 0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0040, 0x855: 0x3308, 0x856: 0x3308, 0x857: 0x0040, + 0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0040, 0x85c: 0x0040, 0x85d: 0x0008, + 0x85e: 0x0040, 0x85f: 0x0040, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x3308, 0x863: 0x3308, + 0x864: 0x0040, 0x865: 0x0040, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0008, + 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, + 0x870: 0x0040, 0x871: 0x0040, 0x872: 0x0040, 0x873: 0x0040, 0x874: 0x0040, 0x875: 0x0040, + 0x876: 0x0040, 0x877: 0x0018, 0x878: 0x0018, 0x879: 0x0018, 0x87a: 0x0018, 0x87b: 0x0018, + 0x87c: 0x0018, 0x87d: 0x0018, 0x87e: 0x0018, 0x87f: 0x0018, + // Block 0x22, offset 0x880 + 0x880: 0x0008, 0x881: 0x3308, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x0018, 0x885: 0x0008, + 0x886: 0x0008, 0x887: 0x0008, 0x888: 0x0008, 0x889: 0x0008, 0x88a: 0x0008, 0x88b: 0x0008, + 0x88c: 0x0008, 0x88d: 0x0040, 0x88e: 0x0008, 0x88f: 0x0008, 0x890: 0x0008, 0x891: 0x0040, + 0x892: 0x0008, 0x893: 0x0008, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x0008, + 0x898: 0x0008, 0x899: 0x0008, 0x89a: 0x0008, 0x89b: 0x0008, 0x89c: 0x0008, 0x89d: 0x0008, + 0x89e: 0x0008, 0x89f: 0x0008, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x0008, 0x8a3: 0x0008, + 0x8a4: 0x0008, 0x8a5: 0x0008, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0040, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0008, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0008, 0x8b4: 0x0040, 0x8b5: 0x0008, + 0x8b6: 0x0008, 0x8b7: 0x0008, 0x8b8: 0x0008, 0x8b9: 0x0008, 0x8ba: 0x0040, 0x8bb: 0x0040, + 0x8bc: 0x3308, 0x8bd: 0x0008, 0x8be: 0x3008, 0x8bf: 0x3308, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x3008, 0x8c1: 0x3008, 0x8c2: 0x3008, 0x8c3: 0x3008, 0x8c4: 0x3008, 0x8c5: 0x0040, + 0x8c6: 0x3308, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008, + 0x8cc: 0x3308, 0x8cd: 0x3b08, 0x8ce: 0x0040, 0x8cf: 0x0040, 0x8d0: 0x0040, 0x8d1: 0x0040, + 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0040, 0x8d5: 0x3008, 0x8d6: 0x3008, 0x8d7: 0x0040, + 0x8d8: 0x0040, 0x8d9: 0x0040, 0x8da: 0x0040, 0x8db: 0x0040, 0x8dc: 0x0040, 0x8dd: 0x0008, + 0x8de: 0x0008, 0x8df: 0x0040, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x3308, 0x8e3: 0x3308, + 0x8e4: 0x0040, 0x8e5: 0x0040, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0008, + 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0008, 0x8ee: 0x0008, 0x8ef: 0x0008, + 0x8f0: 0x0040, 0x8f1: 0x0008, 0x8f2: 0x0008, 0x8f3: 0x3008, 0x8f4: 0x0040, 0x8f5: 0x0040, + 0x8f6: 0x0040, 0x8f7: 0x0040, 0x8f8: 0x0040, 0x8f9: 0x0040, 0x8fa: 0x0040, 0x8fb: 0x0040, + 0x8fc: 0x0040, 0x8fd: 0x0040, 0x8fe: 0x0040, 0x8ff: 0x0040, + // Block 0x24, offset 0x900 + 0x900: 0x3008, 0x901: 0x3308, 0x902: 0x3308, 0x903: 0x3308, 0x904: 0x3308, 0x905: 0x0040, + 0x906: 0x3008, 0x907: 0x3008, 0x908: 0x3008, 0x909: 0x0040, 0x90a: 0x3008, 0x90b: 0x3008, + 0x90c: 0x3008, 0x90d: 0x3b08, 0x90e: 0x0008, 0x90f: 0x0018, 0x910: 0x0040, 0x911: 0x0040, + 0x912: 0x0040, 0x913: 0x0040, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x3008, + 0x918: 0x0018, 0x919: 0x0018, 0x91a: 0x0018, 0x91b: 0x0018, 0x91c: 0x0018, 0x91d: 0x0018, + 0x91e: 0x0018, 0x91f: 0x0008, 0x920: 0x0008, 0x921: 0x0008, 0x922: 0x3308, 0x923: 0x3308, + 0x924: 0x0040, 0x925: 0x0040, 0x926: 0x0008, 0x927: 0x0008, 0x928: 0x0008, 0x929: 0x0008, + 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0008, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008, + 0x930: 0x0018, 0x931: 0x0018, 0x932: 0x0018, 0x933: 0x0018, 0x934: 0x0018, 0x935: 0x0018, + 0x936: 0x0018, 0x937: 0x0018, 0x938: 0x0018, 0x939: 0x0018, 0x93a: 0x0008, 0x93b: 0x0008, + 0x93c: 0x0008, 0x93d: 0x0008, 0x93e: 0x0008, 0x93f: 0x0008, + // Block 0x25, offset 0x940 + 0x940: 0x0040, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0040, 0x944: 0x0008, 0x945: 0x0040, + 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0040, + 0x94c: 0x0008, 0x94d: 0x0008, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, + 0x952: 0x0008, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0008, + 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0008, 0x95d: 0x0008, + 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, + 0x964: 0x0040, 0x965: 0x0008, 0x966: 0x0040, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0008, + 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0008, 0x96e: 0x0008, 0x96f: 0x0008, + 0x970: 0x0008, 0x971: 0x3308, 0x972: 0x0008, 0x973: 0x01f9, 0x974: 0x3308, 0x975: 0x3308, + 0x976: 0x3308, 0x977: 0x3308, 0x978: 0x3308, 0x979: 0x3308, 0x97a: 0x3b08, 0x97b: 0x3308, + 0x97c: 0x3308, 0x97d: 0x0008, 0x97e: 0x0040, 0x97f: 0x0040, + // Block 0x26, offset 0x980 + 0x980: 0x0008, 0x981: 0x0008, 0x982: 0x0008, 0x983: 0x0211, 0x984: 0x0008, 0x985: 0x0008, + 0x986: 0x0008, 0x987: 0x0008, 0x988: 0x0040, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008, + 0x98c: 0x0008, 0x98d: 0x0219, 0x98e: 0x0008, 0x98f: 0x0008, 0x990: 0x0008, 0x991: 0x0008, + 0x992: 0x0221, 0x993: 0x0008, 0x994: 0x0008, 0x995: 0x0008, 0x996: 0x0008, 0x997: 0x0229, + 0x998: 0x0008, 0x999: 0x0008, 0x99a: 0x0008, 0x99b: 0x0008, 0x99c: 0x0231, 0x99d: 0x0008, + 0x99e: 0x0008, 0x99f: 0x0008, 0x9a0: 0x0008, 0x9a1: 0x0008, 0x9a2: 0x0008, 0x9a3: 0x0008, + 0x9a4: 0x0008, 0x9a5: 0x0008, 0x9a6: 0x0008, 0x9a7: 0x0008, 0x9a8: 0x0008, 0x9a9: 0x0239, + 0x9aa: 0x0008, 0x9ab: 0x0008, 0x9ac: 0x0008, 0x9ad: 0x0040, 0x9ae: 0x0040, 0x9af: 0x0040, + 0x9b0: 0x0040, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x0241, 0x9b4: 0x3308, 0x9b5: 0x0249, + 0x9b6: 0x0251, 0x9b7: 0x0259, 0x9b8: 0x0261, 0x9b9: 0x0269, 0x9ba: 0x3308, 0x9bb: 0x3308, + 0x9bc: 0x3308, 0x9bd: 0x3308, 0x9be: 0x3308, 0x9bf: 0x3008, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x3308, 0x9c1: 0x0271, 0x9c2: 0x3308, 0x9c3: 0x3308, 0x9c4: 0x3b08, 0x9c5: 0x0018, + 0x9c6: 0x3308, 0x9c7: 0x3308, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, + 0x9cc: 0x0008, 0x9cd: 0x3308, 0x9ce: 0x3308, 0x9cf: 0x3308, 0x9d0: 0x3308, 0x9d1: 0x3308, + 0x9d2: 0x3308, 0x9d3: 0x0279, 0x9d4: 0x3308, 0x9d5: 0x3308, 0x9d6: 0x3308, 0x9d7: 0x3308, + 0x9d8: 0x0040, 0x9d9: 0x3308, 0x9da: 0x3308, 0x9db: 0x3308, 0x9dc: 0x3308, 0x9dd: 0x0281, + 0x9de: 0x3308, 0x9df: 0x3308, 0x9e0: 0x3308, 0x9e1: 0x3308, 0x9e2: 0x0289, 0x9e3: 0x3308, + 0x9e4: 0x3308, 0x9e5: 0x3308, 0x9e6: 0x3308, 0x9e7: 0x0291, 0x9e8: 0x3308, 0x9e9: 0x3308, + 0x9ea: 0x3308, 0x9eb: 0x3308, 0x9ec: 0x0299, 0x9ed: 0x3308, 0x9ee: 0x3308, 0x9ef: 0x3308, + 0x9f0: 0x3308, 0x9f1: 0x3308, 0x9f2: 0x3308, 0x9f3: 0x3308, 0x9f4: 0x3308, 0x9f5: 0x3308, + 0x9f6: 0x3308, 0x9f7: 0x3308, 0x9f8: 0x3308, 0x9f9: 0x02a1, 0x9fa: 0x3308, 0x9fb: 0x3308, + 0x9fc: 0x3308, 0x9fd: 0x0040, 0x9fe: 0x0018, 0x9ff: 0x0018, + // Block 0x28, offset 0xa00 + 0xa00: 0x0008, 0xa01: 0x0008, 0xa02: 0x0008, 0xa03: 0x0008, 0xa04: 0x0008, 0xa05: 0x0008, + 0xa06: 0x0008, 0xa07: 0x0008, 0xa08: 0x0008, 0xa09: 0x0008, 0xa0a: 0x0008, 0xa0b: 0x0008, + 0xa0c: 0x0008, 0xa0d: 0x0008, 0xa0e: 0x0008, 0xa0f: 0x0008, 0xa10: 0x0008, 0xa11: 0x0008, + 0xa12: 0x0008, 0xa13: 0x0008, 0xa14: 0x0008, 0xa15: 0x0008, 0xa16: 0x0008, 0xa17: 0x0008, + 0xa18: 0x0008, 0xa19: 0x0008, 0xa1a: 0x0008, 0xa1b: 0x0008, 0xa1c: 0x0008, 0xa1d: 0x0008, + 0xa1e: 0x0008, 0xa1f: 0x0008, 0xa20: 0x0008, 0xa21: 0x0008, 0xa22: 0x0008, 0xa23: 0x0008, + 0xa24: 0x0008, 0xa25: 0x0008, 0xa26: 0x0008, 0xa27: 0x0008, 0xa28: 0x0008, 0xa29: 0x0008, + 0xa2a: 0x0008, 0xa2b: 0x0008, 0xa2c: 0x0019, 0xa2d: 0x02e1, 0xa2e: 0x02e9, 0xa2f: 0x0008, + 0xa30: 0x02f1, 0xa31: 0x02f9, 0xa32: 0x0301, 0xa33: 0x0309, 0xa34: 0x00a9, 0xa35: 0x0311, + 0xa36: 0x00b1, 0xa37: 0x0319, 0xa38: 0x0101, 0xa39: 0x0321, 0xa3a: 0x0329, 0xa3b: 0x0008, + 0xa3c: 0x0051, 0xa3d: 0x0331, 0xa3e: 0x0339, 0xa3f: 0x00b9, + // Block 0x29, offset 0xa40 + 0xa40: 0x0341, 0xa41: 0x0349, 0xa42: 0x00c1, 0xa43: 0x0019, 0xa44: 0x0351, 0xa45: 0x0359, + 0xa46: 0x05b5, 0xa47: 0x02e9, 0xa48: 0x02f1, 0xa49: 0x02f9, 0xa4a: 0x0361, 0xa4b: 0x0369, + 0xa4c: 0x0371, 0xa4d: 0x0309, 0xa4e: 0x0008, 0xa4f: 0x0319, 0xa50: 0x0321, 0xa51: 0x0379, + 0xa52: 0x0051, 0xa53: 0x0381, 0xa54: 0x05cd, 0xa55: 0x05cd, 0xa56: 0x0339, 0xa57: 0x0341, + 0xa58: 0x0349, 0xa59: 0x05b5, 0xa5a: 0x0389, 0xa5b: 0x0391, 0xa5c: 0x05e5, 0xa5d: 0x0399, + 0xa5e: 0x03a1, 0xa5f: 0x03a9, 0xa60: 0x03b1, 0xa61: 0x03b9, 0xa62: 0x0311, 0xa63: 0x00b9, + 0xa64: 0x0349, 0xa65: 0x0391, 0xa66: 0x0399, 0xa67: 0x03a1, 0xa68: 0x03c1, 0xa69: 0x03b1, + 0xa6a: 0x03b9, 0xa6b: 0x0008, 0xa6c: 0x0008, 0xa6d: 0x0008, 0xa6e: 0x0008, 0xa6f: 0x0008, + 0xa70: 0x0008, 0xa71: 0x0008, 0xa72: 0x0008, 0xa73: 0x0008, 0xa74: 0x0008, 0xa75: 0x0008, + 0xa76: 0x0008, 0xa77: 0x0008, 0xa78: 0x03c9, 0xa79: 0x0008, 0xa7a: 0x0008, 0xa7b: 0x0008, + 0xa7c: 0x0008, 0xa7d: 0x0008, 0xa7e: 0x0008, 0xa7f: 0x0008, + // Block 0x2a, offset 0xa80 + 0xa80: 0x0008, 0xa81: 0x0008, 0xa82: 0x0008, 0xa83: 0x0008, 0xa84: 0x0008, 0xa85: 0x0008, + 0xa86: 0x0008, 0xa87: 0x0008, 0xa88: 0x0008, 0xa89: 0x0008, 0xa8a: 0x0008, 0xa8b: 0x0008, + 0xa8c: 0x0008, 0xa8d: 0x0008, 0xa8e: 0x0008, 0xa8f: 0x0008, 0xa90: 0x0008, 0xa91: 0x0008, + 0xa92: 0x0008, 0xa93: 0x0008, 0xa94: 0x0008, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008, + 0xa98: 0x0008, 0xa99: 0x0008, 0xa9a: 0x0008, 0xa9b: 0x03d1, 0xa9c: 0x03d9, 0xa9d: 0x03e1, + 0xa9e: 0x03e9, 0xa9f: 0x0371, 0xaa0: 0x03f1, 0xaa1: 0x03f9, 0xaa2: 0x0401, 0xaa3: 0x0409, + 0xaa4: 0x0411, 0xaa5: 0x0419, 0xaa6: 0x0421, 0xaa7: 0x05fd, 0xaa8: 0x0429, 0xaa9: 0x0431, + 0xaaa: 0xe17d, 0xaab: 0x0439, 0xaac: 0x0441, 0xaad: 0x0449, 0xaae: 0x0451, 0xaaf: 0x0459, + 0xab0: 0x0461, 0xab1: 0x0469, 0xab2: 0x0471, 0xab3: 0x0479, 0xab4: 0x0481, 0xab5: 0x0489, + 0xab6: 0x0491, 0xab7: 0x0499, 0xab8: 0x0615, 0xab9: 0x04a1, 0xaba: 0x04a9, 0xabb: 0x04b1, + 0xabc: 0x04b9, 0xabd: 0x04c1, 0xabe: 0x04c9, 0xabf: 0x04d1, + // Block 0x2b, offset 0xac0 + 0xac0: 0xe00d, 0xac1: 0x0008, 0xac2: 0xe00d, 0xac3: 0x0008, 0xac4: 0xe00d, 0xac5: 0x0008, + 0xac6: 0xe00d, 0xac7: 0x0008, 0xac8: 0xe00d, 0xac9: 0x0008, 0xaca: 0xe00d, 0xacb: 0x0008, + 0xacc: 0xe00d, 0xacd: 0x0008, 0xace: 0xe00d, 0xacf: 0x0008, 0xad0: 0xe00d, 0xad1: 0x0008, + 0xad2: 0xe00d, 0xad3: 0x0008, 0xad4: 0xe00d, 0xad5: 0x0008, 0xad6: 0xe00d, 0xad7: 0x0008, + 0xad8: 0xe00d, 0xad9: 0x0008, 0xada: 0xe00d, 0xadb: 0x0008, 0xadc: 0xe00d, 0xadd: 0x0008, + 0xade: 0xe00d, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008, + 0xae4: 0xe00d, 0xae5: 0x0008, 0xae6: 0xe00d, 0xae7: 0x0008, 0xae8: 0xe00d, 0xae9: 0x0008, + 0xaea: 0xe00d, 0xaeb: 0x0008, 0xaec: 0xe00d, 0xaed: 0x0008, 0xaee: 0xe00d, 0xaef: 0x0008, + 0xaf0: 0xe00d, 0xaf1: 0x0008, 0xaf2: 0xe00d, 0xaf3: 0x0008, 0xaf4: 0xe00d, 0xaf5: 0x0008, + 0xaf6: 0xe00d, 0xaf7: 0x0008, 0xaf8: 0xe00d, 0xaf9: 0x0008, 0xafa: 0xe00d, 0xafb: 0x0008, + 0xafc: 0xe00d, 0xafd: 0x0008, 0xafe: 0xe00d, 0xaff: 0x0008, + // Block 0x2c, offset 0xb00 + 0xb00: 0xe00d, 0xb01: 0x0008, 0xb02: 0xe00d, 0xb03: 0x0008, 0xb04: 0xe00d, 0xb05: 0x0008, + 0xb06: 0xe00d, 0xb07: 0x0008, 0xb08: 0xe00d, 0xb09: 0x0008, 0xb0a: 0xe00d, 0xb0b: 0x0008, + 0xb0c: 0xe00d, 0xb0d: 0x0008, 0xb0e: 0xe00d, 0xb0f: 0x0008, 0xb10: 0xe00d, 0xb11: 0x0008, + 0xb12: 0xe00d, 0xb13: 0x0008, 0xb14: 0xe00d, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008, + 0xb18: 0x0008, 0xb19: 0x0008, 0xb1a: 0x062d, 0xb1b: 0x064d, 0xb1c: 0x0008, 0xb1d: 0x0008, + 0xb1e: 0x04d9, 0xb1f: 0x0008, 0xb20: 0xe00d, 0xb21: 0x0008, 0xb22: 0xe00d, 0xb23: 0x0008, + 0xb24: 0xe00d, 0xb25: 0x0008, 0xb26: 0xe00d, 0xb27: 0x0008, 0xb28: 0xe00d, 0xb29: 0x0008, + 0xb2a: 0xe00d, 0xb2b: 0x0008, 0xb2c: 0xe00d, 0xb2d: 0x0008, 0xb2e: 0xe00d, 0xb2f: 0x0008, + 0xb30: 0xe00d, 0xb31: 0x0008, 0xb32: 0xe00d, 0xb33: 0x0008, 0xb34: 0xe00d, 0xb35: 0x0008, + 0xb36: 0xe00d, 0xb37: 0x0008, 0xb38: 0xe00d, 0xb39: 0x0008, 0xb3a: 0xe00d, 0xb3b: 0x0008, + 0xb3c: 0xe00d, 0xb3d: 0x0008, 0xb3e: 0xe00d, 0xb3f: 0x0008, + // Block 0x2d, offset 0xb40 + 0xb40: 0x0008, 0xb41: 0x0008, 0xb42: 0x0008, 0xb43: 0x0008, 0xb44: 0x0008, 0xb45: 0x0008, + 0xb46: 0x0040, 0xb47: 0x0040, 0xb48: 0xe045, 0xb49: 0xe045, 0xb4a: 0xe045, 0xb4b: 0xe045, + 0xb4c: 0xe045, 0xb4d: 0xe045, 0xb4e: 0x0040, 0xb4f: 0x0040, 0xb50: 0x0008, 0xb51: 0x0008, + 0xb52: 0x0008, 0xb53: 0x0008, 0xb54: 0x0008, 0xb55: 0x0008, 0xb56: 0x0008, 0xb57: 0x0008, + 0xb58: 0x0040, 0xb59: 0xe045, 0xb5a: 0x0040, 0xb5b: 0xe045, 0xb5c: 0x0040, 0xb5d: 0xe045, + 0xb5e: 0x0040, 0xb5f: 0xe045, 0xb60: 0x0008, 0xb61: 0x0008, 0xb62: 0x0008, 0xb63: 0x0008, + 0xb64: 0x0008, 0xb65: 0x0008, 0xb66: 0x0008, 0xb67: 0x0008, 0xb68: 0xe045, 0xb69: 0xe045, + 0xb6a: 0xe045, 0xb6b: 0xe045, 0xb6c: 0xe045, 0xb6d: 0xe045, 0xb6e: 0xe045, 0xb6f: 0xe045, + 0xb70: 0x0008, 0xb71: 0x04e1, 0xb72: 0x0008, 0xb73: 0x04e9, 0xb74: 0x0008, 0xb75: 0x04f1, + 0xb76: 0x0008, 0xb77: 0x04f9, 0xb78: 0x0008, 0xb79: 0x0501, 0xb7a: 0x0008, 0xb7b: 0x0509, + 0xb7c: 0x0008, 0xb7d: 0x0511, 0xb7e: 0x0040, 0xb7f: 0x0040, + // Block 0x2e, offset 0xb80 + 0xb80: 0x0519, 0xb81: 0x0521, 0xb82: 0x0529, 0xb83: 0x0531, 0xb84: 0x0539, 0xb85: 0x0541, + 0xb86: 0x0549, 0xb87: 0x0551, 0xb88: 0x0519, 0xb89: 0x0521, 0xb8a: 0x0529, 0xb8b: 0x0531, + 0xb8c: 0x0539, 0xb8d: 0x0541, 0xb8e: 0x0549, 0xb8f: 0x0551, 0xb90: 0x0559, 0xb91: 0x0561, + 0xb92: 0x0569, 0xb93: 0x0571, 0xb94: 0x0579, 0xb95: 0x0581, 0xb96: 0x0589, 0xb97: 0x0591, + 0xb98: 0x0559, 0xb99: 0x0561, 0xb9a: 0x0569, 0xb9b: 0x0571, 0xb9c: 0x0579, 0xb9d: 0x0581, + 0xb9e: 0x0589, 0xb9f: 0x0591, 0xba0: 0x0599, 0xba1: 0x05a1, 0xba2: 0x05a9, 0xba3: 0x05b1, + 0xba4: 0x05b9, 0xba5: 0x05c1, 0xba6: 0x05c9, 0xba7: 0x05d1, 0xba8: 0x0599, 0xba9: 0x05a1, + 0xbaa: 0x05a9, 0xbab: 0x05b1, 0xbac: 0x05b9, 0xbad: 0x05c1, 0xbae: 0x05c9, 0xbaf: 0x05d1, + 0xbb0: 0x0008, 0xbb1: 0x0008, 0xbb2: 0x05d9, 0xbb3: 0x05e1, 0xbb4: 0x05e9, 0xbb5: 0x0040, + 0xbb6: 0x0008, 0xbb7: 0x05f1, 0xbb8: 0xe045, 0xbb9: 0xe045, 0xbba: 0x0665, 0xbbb: 0x04e1, + 0xbbc: 0x05e1, 0xbbd: 0x067e, 0xbbe: 0x05f9, 0xbbf: 0x069e, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x06be, 0xbc1: 0x0602, 0xbc2: 0x0609, 0xbc3: 0x0611, 0xbc4: 0x0619, 0xbc5: 0x0040, + 0xbc6: 0x0008, 0xbc7: 0x0621, 0xbc8: 0x06dd, 0xbc9: 0x04e9, 0xbca: 0x06f5, 0xbcb: 0x04f1, + 0xbcc: 0x0611, 0xbcd: 0x062a, 0xbce: 0x0632, 0xbcf: 0x063a, 0xbd0: 0x0008, 0xbd1: 0x0008, + 0xbd2: 0x0008, 0xbd3: 0x0641, 0xbd4: 0x0040, 0xbd5: 0x0040, 0xbd6: 0x0008, 0xbd7: 0x0008, + 0xbd8: 0xe045, 0xbd9: 0xe045, 0xbda: 0x070d, 0xbdb: 0x04f9, 0xbdc: 0x0040, 0xbdd: 0x064a, + 0xbde: 0x0652, 0xbdf: 0x065a, 0xbe0: 0x0008, 0xbe1: 0x0008, 0xbe2: 0x0008, 0xbe3: 0x0661, + 0xbe4: 0x0008, 0xbe5: 0x0008, 0xbe6: 0x0008, 0xbe7: 0x0008, 0xbe8: 0xe045, 0xbe9: 0xe045, + 0xbea: 0x0725, 0xbeb: 0x0509, 0xbec: 0xe04d, 0xbed: 0x066a, 0xbee: 0x012a, 0xbef: 0x0672, + 0xbf0: 0x0040, 0xbf1: 0x0040, 0xbf2: 0x0679, 0xbf3: 0x0681, 0xbf4: 0x0689, 0xbf5: 0x0040, + 0xbf6: 0x0008, 0xbf7: 0x0691, 0xbf8: 0x073d, 0xbf9: 0x0501, 0xbfa: 0x0515, 0xbfb: 0x0511, + 0xbfc: 0x0681, 0xbfd: 0x0756, 0xbfe: 0x0776, 0xbff: 0x0040, + // Block 0x30, offset 0xc00 + 0xc00: 0x000a, 0xc01: 0x000a, 0xc02: 0x000a, 0xc03: 0x000a, 0xc04: 0x000a, 0xc05: 0x000a, + 0xc06: 0x000a, 0xc07: 0x000a, 0xc08: 0x000a, 0xc09: 0x000a, 0xc0a: 0x000a, 0xc0b: 0x03c0, + 0xc0c: 0x0003, 0xc0d: 0x0003, 0xc0e: 0x0340, 0xc0f: 0x0b40, 0xc10: 0x0018, 0xc11: 0xe00d, + 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x0796, + 0xc18: 0x0018, 0xc19: 0x0018, 0xc1a: 0x0018, 0xc1b: 0x0018, 0xc1c: 0x0018, 0xc1d: 0x0018, + 0xc1e: 0x0018, 0xc1f: 0x0018, 0xc20: 0x0018, 0xc21: 0x0018, 0xc22: 0x0018, 0xc23: 0x0018, + 0xc24: 0x0040, 0xc25: 0x0040, 0xc26: 0x0040, 0xc27: 0x0018, 0xc28: 0x0040, 0xc29: 0x0040, + 0xc2a: 0x0340, 0xc2b: 0x0340, 0xc2c: 0x0340, 0xc2d: 0x0340, 0xc2e: 0x0340, 0xc2f: 0x000a, + 0xc30: 0x0018, 0xc31: 0x0018, 0xc32: 0x0018, 0xc33: 0x0699, 0xc34: 0x06a1, 0xc35: 0x0018, + 0xc36: 0x06a9, 0xc37: 0x06b1, 0xc38: 0x0018, 0xc39: 0x0018, 0xc3a: 0x0018, 0xc3b: 0x0018, + 0xc3c: 0x06ba, 0xc3d: 0x0018, 0xc3e: 0x07b6, 0xc3f: 0x0018, + // Block 0x31, offset 0xc40 + 0xc40: 0x0018, 0xc41: 0x0018, 0xc42: 0x0018, 0xc43: 0x0018, 0xc44: 0x0018, 0xc45: 0x0018, + 0xc46: 0x0018, 0xc47: 0x06c2, 0xc48: 0x06ca, 0xc49: 0x06d2, 0xc4a: 0x0018, 0xc4b: 0x0018, + 0xc4c: 0x0018, 0xc4d: 0x0018, 0xc4e: 0x0018, 0xc4f: 0x0018, 0xc50: 0x0018, 0xc51: 0x0018, + 0xc52: 0x0018, 0xc53: 0x0018, 0xc54: 0x0018, 0xc55: 0x0018, 0xc56: 0x0018, 0xc57: 0x06d9, + 0xc58: 0x0018, 0xc59: 0x0018, 0xc5a: 0x0018, 0xc5b: 0x0018, 0xc5c: 0x0018, 0xc5d: 0x0018, + 0xc5e: 0x0018, 0xc5f: 0x000a, 0xc60: 0x03c0, 0xc61: 0x0340, 0xc62: 0x0340, 0xc63: 0x0340, + 0xc64: 0x03c0, 0xc65: 0x0040, 0xc66: 0x0040, 0xc67: 0x0040, 0xc68: 0x0040, 0xc69: 0x0040, + 0xc6a: 0x0340, 0xc6b: 0x0340, 0xc6c: 0x0340, 0xc6d: 0x0340, 0xc6e: 0x0340, 0xc6f: 0x0340, + 0xc70: 0x06e1, 0xc71: 0x0311, 0xc72: 0x0040, 0xc73: 0x0040, 0xc74: 0x06e9, 0xc75: 0x06f1, + 0xc76: 0x06f9, 0xc77: 0x0701, 0xc78: 0x0709, 0xc79: 0x0711, 0xc7a: 0x071a, 0xc7b: 0x07d5, + 0xc7c: 0x0722, 0xc7d: 0x072a, 0xc7e: 0x0732, 0xc7f: 0x0329, + // Block 0x32, offset 0xc80 + 0xc80: 0x06e1, 0xc81: 0x0049, 0xc82: 0x0029, 0xc83: 0x0031, 0xc84: 0x06e9, 0xc85: 0x06f1, + 0xc86: 0x06f9, 0xc87: 0x0701, 0xc88: 0x0709, 0xc89: 0x0711, 0xc8a: 0x071a, 0xc8b: 0x07ed, + 0xc8c: 0x0722, 0xc8d: 0x072a, 0xc8e: 0x0732, 0xc8f: 0x0040, 0xc90: 0x0019, 0xc91: 0x02f9, + 0xc92: 0x0051, 0xc93: 0x0109, 0xc94: 0x0361, 0xc95: 0x00a9, 0xc96: 0x0319, 0xc97: 0x0101, + 0xc98: 0x0321, 0xc99: 0x0329, 0xc9a: 0x0339, 0xc9b: 0x0089, 0xc9c: 0x0341, 0xc9d: 0x0040, + 0xc9e: 0x0040, 0xc9f: 0x0040, 0xca0: 0x0018, 0xca1: 0x0018, 0xca2: 0x0018, 0xca3: 0x0018, + 0xca4: 0x0018, 0xca5: 0x0018, 0xca6: 0x0018, 0xca7: 0x0018, 0xca8: 0x0739, 0xca9: 0x0018, + 0xcaa: 0x0018, 0xcab: 0x0018, 0xcac: 0x0018, 0xcad: 0x0018, 0xcae: 0x0018, 0xcaf: 0x0018, + 0xcb0: 0x0018, 0xcb1: 0x0018, 0xcb2: 0x0018, 0xcb3: 0x0018, 0xcb4: 0x0018, 0xcb5: 0x0018, + 0xcb6: 0x0018, 0xcb7: 0x0018, 0xcb8: 0x0018, 0xcb9: 0x0018, 0xcba: 0x0018, 0xcbb: 0x0018, + 0xcbc: 0x0018, 0xcbd: 0x0018, 0xcbe: 0x0018, 0xcbf: 0x0018, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x0806, 0xcc1: 0x0826, 0xcc2: 0x03d9, 0xcc3: 0x0845, 0xcc4: 0x0018, 0xcc5: 0x0866, + 0xcc6: 0x0886, 0xcc7: 0x0369, 0xcc8: 0x0018, 0xcc9: 0x08a5, 0xcca: 0x0309, 0xccb: 0x00a9, + 0xccc: 0x00a9, 0xccd: 0x00a9, 0xcce: 0x00a9, 0xccf: 0x0741, 0xcd0: 0x0311, 0xcd1: 0x0311, + 0xcd2: 0x0101, 0xcd3: 0x0101, 0xcd4: 0x0018, 0xcd5: 0x0329, 0xcd6: 0x0749, 0xcd7: 0x0018, + 0xcd8: 0x0018, 0xcd9: 0x0339, 0xcda: 0x0751, 0xcdb: 0x00b9, 0xcdc: 0x00b9, 0xcdd: 0x00b9, + 0xcde: 0x0018, 0xcdf: 0x0018, 0xce0: 0x0759, 0xce1: 0x08c5, 0xce2: 0x0761, 0xce3: 0x0018, + 0xce4: 0x04b1, 0xce5: 0x0018, 0xce6: 0x0769, 0xce7: 0x0018, 0xce8: 0x04b1, 0xce9: 0x0018, + 0xcea: 0x0319, 0xceb: 0x0771, 0xcec: 0x02e9, 0xced: 0x03d9, 0xcee: 0x0018, 0xcef: 0x02f9, + 0xcf0: 0x02f9, 0xcf1: 0x03f1, 0xcf2: 0x0040, 0xcf3: 0x0321, 0xcf4: 0x0051, 0xcf5: 0x0779, + 0xcf6: 0x0781, 0xcf7: 0x0789, 0xcf8: 0x0791, 0xcf9: 0x0311, 0xcfa: 0x0018, 0xcfb: 0x08e5, + 0xcfc: 0x0799, 0xcfd: 0x03a1, 0xcfe: 0x03a1, 0xcff: 0x0799, + // Block 0x34, offset 0xd00 + 0xd00: 0x0905, 0xd01: 0x0018, 0xd02: 0x0018, 0xd03: 0x0018, 0xd04: 0x0018, 0xd05: 0x02f1, + 0xd06: 0x02f1, 0xd07: 0x02f9, 0xd08: 0x0311, 0xd09: 0x00b1, 0xd0a: 0x0018, 0xd0b: 0x0018, + 0xd0c: 0x0018, 0xd0d: 0x0018, 0xd0e: 0x0008, 0xd0f: 0x0018, 0xd10: 0x07a1, 0xd11: 0x07a9, + 0xd12: 0x07b1, 0xd13: 0x07b9, 0xd14: 0x07c1, 0xd15: 0x07c9, 0xd16: 0x07d1, 0xd17: 0x07d9, + 0xd18: 0x07e1, 0xd19: 0x07e9, 0xd1a: 0x07f1, 0xd1b: 0x07f9, 0xd1c: 0x0801, 0xd1d: 0x0809, + 0xd1e: 0x0811, 0xd1f: 0x0819, 0xd20: 0x0311, 0xd21: 0x0821, 0xd22: 0x091d, 0xd23: 0x0829, + 0xd24: 0x0391, 0xd25: 0x0831, 0xd26: 0x093d, 0xd27: 0x0839, 0xd28: 0x0841, 0xd29: 0x0109, + 0xd2a: 0x0849, 0xd2b: 0x095d, 0xd2c: 0x0101, 0xd2d: 0x03d9, 0xd2e: 0x02f1, 0xd2f: 0x0321, + 0xd30: 0x0311, 0xd31: 0x0821, 0xd32: 0x097d, 0xd33: 0x0829, 0xd34: 0x0391, 0xd35: 0x0831, + 0xd36: 0x099d, 0xd37: 0x0839, 0xd38: 0x0841, 0xd39: 0x0109, 0xd3a: 0x0849, 0xd3b: 0x09bd, + 0xd3c: 0x0101, 0xd3d: 0x03d9, 0xd3e: 0x02f1, 0xd3f: 0x0321, + // Block 0x35, offset 0xd40 + 0xd40: 0x0018, 0xd41: 0x0018, 0xd42: 0x0018, 0xd43: 0x0018, 0xd44: 0x0018, 0xd45: 0x0018, + 0xd46: 0x0018, 0xd47: 0x0018, 0xd48: 0x0018, 0xd49: 0x0018, 0xd4a: 0x0018, 0xd4b: 0x0040, + 0xd4c: 0x0040, 0xd4d: 0x0040, 0xd4e: 0x0040, 0xd4f: 0x0040, 0xd50: 0x0040, 0xd51: 0x0040, + 0xd52: 0x0040, 0xd53: 0x0040, 0xd54: 0x0040, 0xd55: 0x0040, 0xd56: 0x0040, 0xd57: 0x0040, + 0xd58: 0x0040, 0xd59: 0x0040, 0xd5a: 0x0040, 0xd5b: 0x0040, 0xd5c: 0x0040, 0xd5d: 0x0040, + 0xd5e: 0x0040, 0xd5f: 0x0040, 0xd60: 0x0049, 0xd61: 0x0029, 0xd62: 0x0031, 0xd63: 0x06e9, + 0xd64: 0x06f1, 0xd65: 0x06f9, 0xd66: 0x0701, 0xd67: 0x0709, 0xd68: 0x0711, 0xd69: 0x0879, + 0xd6a: 0x0881, 0xd6b: 0x0889, 0xd6c: 0x0891, 0xd6d: 0x0899, 0xd6e: 0x08a1, 0xd6f: 0x08a9, + 0xd70: 0x08b1, 0xd71: 0x08b9, 0xd72: 0x08c1, 0xd73: 0x08c9, 0xd74: 0x0a1e, 0xd75: 0x0a3e, + 0xd76: 0x0a5e, 0xd77: 0x0a7e, 0xd78: 0x0a9e, 0xd79: 0x0abe, 0xd7a: 0x0ade, 0xd7b: 0x0afe, + 0xd7c: 0x0b1e, 0xd7d: 0x08d2, 0xd7e: 0x08da, 0xd7f: 0x08e2, + // Block 0x36, offset 0xd80 + 0xd80: 0x08ea, 0xd81: 0x08f2, 0xd82: 0x08fa, 0xd83: 0x0902, 0xd84: 0x090a, 0xd85: 0x0912, + 0xd86: 0x091a, 0xd87: 0x0922, 0xd88: 0x0040, 0xd89: 0x0040, 0xd8a: 0x0040, 0xd8b: 0x0040, + 0xd8c: 0x0040, 0xd8d: 0x0040, 0xd8e: 0x0040, 0xd8f: 0x0040, 0xd90: 0x0040, 0xd91: 0x0040, + 0xd92: 0x0040, 0xd93: 0x0040, 0xd94: 0x0040, 0xd95: 0x0040, 0xd96: 0x0040, 0xd97: 0x0040, + 0xd98: 0x0040, 0xd99: 0x0040, 0xd9a: 0x0040, 0xd9b: 0x0040, 0xd9c: 0x0b3e, 0xd9d: 0x0b5e, + 0xd9e: 0x0b7e, 0xd9f: 0x0b9e, 0xda0: 0x0bbe, 0xda1: 0x0bde, 0xda2: 0x0bfe, 0xda3: 0x0c1e, + 0xda4: 0x0c3e, 0xda5: 0x0c5e, 0xda6: 0x0c7e, 0xda7: 0x0c9e, 0xda8: 0x0cbe, 0xda9: 0x0cde, + 0xdaa: 0x0cfe, 0xdab: 0x0d1e, 0xdac: 0x0d3e, 0xdad: 0x0d5e, 0xdae: 0x0d7e, 0xdaf: 0x0d9e, + 0xdb0: 0x0dbe, 0xdb1: 0x0dde, 0xdb2: 0x0dfe, 0xdb3: 0x0e1e, 0xdb4: 0x0e3e, 0xdb5: 0x0e5e, + 0xdb6: 0x0019, 0xdb7: 0x02e9, 0xdb8: 0x03d9, 0xdb9: 0x02f1, 0xdba: 0x02f9, 0xdbb: 0x03f1, + 0xdbc: 0x0309, 0xdbd: 0x00a9, 0xdbe: 0x0311, 0xdbf: 0x00b1, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x0319, 0xdc1: 0x0101, 0xdc2: 0x0321, 0xdc3: 0x0329, 0xdc4: 0x0051, 0xdc5: 0x0339, + 0xdc6: 0x0751, 0xdc7: 0x00b9, 0xdc8: 0x0089, 0xdc9: 0x0341, 0xdca: 0x0349, 0xdcb: 0x0391, + 0xdcc: 0x00c1, 0xdcd: 0x0109, 0xdce: 0x00c9, 0xdcf: 0x04b1, 0xdd0: 0x0019, 0xdd1: 0x02e9, + 0xdd2: 0x03d9, 0xdd3: 0x02f1, 0xdd4: 0x02f9, 0xdd5: 0x03f1, 0xdd6: 0x0309, 0xdd7: 0x00a9, + 0xdd8: 0x0311, 0xdd9: 0x00b1, 0xdda: 0x0319, 0xddb: 0x0101, 0xddc: 0x0321, 0xddd: 0x0329, + 0xdde: 0x0051, 0xddf: 0x0339, 0xde0: 0x0751, 0xde1: 0x00b9, 0xde2: 0x0089, 0xde3: 0x0341, + 0xde4: 0x0349, 0xde5: 0x0391, 0xde6: 0x00c1, 0xde7: 0x0109, 0xde8: 0x00c9, 0xde9: 0x04b1, + 0xdea: 0x06e1, 0xdeb: 0x0018, 0xdec: 0x0018, 0xded: 0x0018, 0xdee: 0x0018, 0xdef: 0x0018, + 0xdf0: 0x0018, 0xdf1: 0x0018, 0xdf2: 0x0018, 0xdf3: 0x0018, 0xdf4: 0x0018, 0xdf5: 0x0018, + 0xdf6: 0x0018, 0xdf7: 0x0018, 0xdf8: 0x0018, 0xdf9: 0x0018, 0xdfa: 0x0018, 0xdfb: 0x0018, + 0xdfc: 0x0018, 0xdfd: 0x0018, 0xdfe: 0x0018, 0xdff: 0x0018, + // Block 0x38, offset 0xe00 + 0xe00: 0x0008, 0xe01: 0x0008, 0xe02: 0x0008, 0xe03: 0x0008, 0xe04: 0x0008, 0xe05: 0x0008, + 0xe06: 0x0008, 0xe07: 0x0008, 0xe08: 0x0008, 0xe09: 0x0008, 0xe0a: 0x0008, 0xe0b: 0x0008, + 0xe0c: 0x0008, 0xe0d: 0x0008, 0xe0e: 0x0008, 0xe0f: 0x0008, 0xe10: 0x0008, 0xe11: 0x0008, + 0xe12: 0x0008, 0xe13: 0x0008, 0xe14: 0x0008, 0xe15: 0x0008, 0xe16: 0x0008, 0xe17: 0x0008, + 0xe18: 0x0008, 0xe19: 0x0008, 0xe1a: 0x0008, 0xe1b: 0x0008, 0xe1c: 0x0008, 0xe1d: 0x0008, + 0xe1e: 0x0008, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0x0941, 0xe23: 0x0ed5, + 0xe24: 0x0949, 0xe25: 0x0008, 0xe26: 0x0008, 0xe27: 0xe07d, 0xe28: 0x0008, 0xe29: 0xe01d, + 0xe2a: 0x0008, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0x0359, 0xe2e: 0x0441, 0xe2f: 0x0351, + 0xe30: 0x03d1, 0xe31: 0x0008, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0008, 0xe35: 0xe01d, + 0xe36: 0x0008, 0xe37: 0x0008, 0xe38: 0x0008, 0xe39: 0x0008, 0xe3a: 0x0008, 0xe3b: 0x0008, + 0xe3c: 0x00b1, 0xe3d: 0x0391, 0xe3e: 0x0951, 0xe3f: 0x0959, + // Block 0x39, offset 0xe40 + 0xe40: 0xe00d, 0xe41: 0x0008, 0xe42: 0xe00d, 0xe43: 0x0008, 0xe44: 0xe00d, 0xe45: 0x0008, + 0xe46: 0xe00d, 0xe47: 0x0008, 0xe48: 0xe00d, 0xe49: 0x0008, 0xe4a: 0xe00d, 0xe4b: 0x0008, + 0xe4c: 0xe00d, 0xe4d: 0x0008, 0xe4e: 0xe00d, 0xe4f: 0x0008, 0xe50: 0xe00d, 0xe51: 0x0008, + 0xe52: 0xe00d, 0xe53: 0x0008, 0xe54: 0xe00d, 0xe55: 0x0008, 0xe56: 0xe00d, 0xe57: 0x0008, + 0xe58: 0xe00d, 0xe59: 0x0008, 0xe5a: 0xe00d, 0xe5b: 0x0008, 0xe5c: 0xe00d, 0xe5d: 0x0008, + 0xe5e: 0xe00d, 0xe5f: 0x0008, 0xe60: 0xe00d, 0xe61: 0x0008, 0xe62: 0xe00d, 0xe63: 0x0008, + 0xe64: 0x0008, 0xe65: 0x0018, 0xe66: 0x0018, 0xe67: 0x0018, 0xe68: 0x0018, 0xe69: 0x0018, + 0xe6a: 0x0018, 0xe6b: 0xe03d, 0xe6c: 0x0008, 0xe6d: 0xe01d, 0xe6e: 0x0008, 0xe6f: 0x3308, + 0xe70: 0x3308, 0xe71: 0x3308, 0xe72: 0xe00d, 0xe73: 0x0008, 0xe74: 0x0040, 0xe75: 0x0040, + 0xe76: 0x0040, 0xe77: 0x0040, 0xe78: 0x0040, 0xe79: 0x0018, 0xe7a: 0x0018, 0xe7b: 0x0018, + 0xe7c: 0x0018, 0xe7d: 0x0018, 0xe7e: 0x0018, 0xe7f: 0x0018, + // Block 0x3a, offset 0xe80 + 0xe80: 0x2715, 0xe81: 0x2735, 0xe82: 0x2755, 0xe83: 0x2775, 0xe84: 0x2795, 0xe85: 0x27b5, + 0xe86: 0x27d5, 0xe87: 0x27f5, 0xe88: 0x2815, 0xe89: 0x2835, 0xe8a: 0x2855, 0xe8b: 0x2875, + 0xe8c: 0x2895, 0xe8d: 0x28b5, 0xe8e: 0x28d5, 0xe8f: 0x28f5, 0xe90: 0x2915, 0xe91: 0x2935, + 0xe92: 0x2955, 0xe93: 0x2975, 0xe94: 0x2995, 0xe95: 0x29b5, 0xe96: 0x0040, 0xe97: 0x0040, + 0xe98: 0x0040, 0xe99: 0x0040, 0xe9a: 0x0040, 0xe9b: 0x0040, 0xe9c: 0x0040, 0xe9d: 0x0040, + 0xe9e: 0x0040, 0xe9f: 0x0040, 0xea0: 0x0040, 0xea1: 0x0040, 0xea2: 0x0040, 0xea3: 0x0040, + 0xea4: 0x0040, 0xea5: 0x0040, 0xea6: 0x0040, 0xea7: 0x0040, 0xea8: 0x0040, 0xea9: 0x0040, + 0xeaa: 0x0040, 0xeab: 0x0040, 0xeac: 0x0040, 0xead: 0x0040, 0xeae: 0x0040, 0xeaf: 0x0040, + 0xeb0: 0x0040, 0xeb1: 0x0040, 0xeb2: 0x0040, 0xeb3: 0x0040, 0xeb4: 0x0040, 0xeb5: 0x0040, + 0xeb6: 0x0040, 0xeb7: 0x0040, 0xeb8: 0x0040, 0xeb9: 0x0040, 0xeba: 0x0040, 0xebb: 0x0040, + 0xebc: 0x0040, 0xebd: 0x0040, 0xebe: 0x0040, 0xebf: 0x0040, + // Block 0x3b, offset 0xec0 + 0xec0: 0x000a, 0xec1: 0x0018, 0xec2: 0x0961, 0xec3: 0x0018, 0xec4: 0x0018, 0xec5: 0x0008, + 0xec6: 0x0008, 0xec7: 0x0008, 0xec8: 0x0018, 0xec9: 0x0018, 0xeca: 0x0018, 0xecb: 0x0018, + 0xecc: 0x0018, 0xecd: 0x0018, 0xece: 0x0018, 0xecf: 0x0018, 0xed0: 0x0018, 0xed1: 0x0018, + 0xed2: 0x0018, 0xed3: 0x0018, 0xed4: 0x0018, 0xed5: 0x0018, 0xed6: 0x0018, 0xed7: 0x0018, + 0xed8: 0x0018, 0xed9: 0x0018, 0xeda: 0x0018, 0xedb: 0x0018, 0xedc: 0x0018, 0xedd: 0x0018, + 0xede: 0x0018, 0xedf: 0x0018, 0xee0: 0x0018, 0xee1: 0x0018, 0xee2: 0x0018, 0xee3: 0x0018, + 0xee4: 0x0018, 0xee5: 0x0018, 0xee6: 0x0018, 0xee7: 0x0018, 0xee8: 0x0018, 0xee9: 0x0018, + 0xeea: 0x3308, 0xeeb: 0x3308, 0xeec: 0x3308, 0xeed: 0x3308, 0xeee: 0x3018, 0xeef: 0x3018, + 0xef0: 0x0018, 0xef1: 0x0018, 0xef2: 0x0018, 0xef3: 0x0018, 0xef4: 0x0018, 0xef5: 0x0018, + 0xef6: 0xe125, 0xef7: 0x0018, 0xef8: 0x29d5, 0xef9: 0x29f5, 0xefa: 0x2a15, 0xefb: 0x0018, + 0xefc: 0x0008, 0xefd: 0x0018, 0xefe: 0x0018, 0xeff: 0x0018, + // Block 0x3c, offset 0xf00 + 0xf00: 0x2b55, 0xf01: 0x2b75, 0xf02: 0x2b95, 0xf03: 0x2bb5, 0xf04: 0x2bd5, 0xf05: 0x2bf5, + 0xf06: 0x2bf5, 0xf07: 0x2bf5, 0xf08: 0x2c15, 0xf09: 0x2c15, 0xf0a: 0x2c15, 0xf0b: 0x2c15, + 0xf0c: 0x2c35, 0xf0d: 0x2c35, 0xf0e: 0x2c35, 0xf0f: 0x2c55, 0xf10: 0x2c75, 0xf11: 0x2c75, + 0xf12: 0x2a95, 0xf13: 0x2a95, 0xf14: 0x2c75, 0xf15: 0x2c75, 0xf16: 0x2c95, 0xf17: 0x2c95, + 0xf18: 0x2c75, 0xf19: 0x2c75, 0xf1a: 0x2a95, 0xf1b: 0x2a95, 0xf1c: 0x2c75, 0xf1d: 0x2c75, + 0xf1e: 0x2c55, 0xf1f: 0x2c55, 0xf20: 0x2cb5, 0xf21: 0x2cb5, 0xf22: 0x2cd5, 0xf23: 0x2cd5, + 0xf24: 0x0040, 0xf25: 0x2cf5, 0xf26: 0x2d15, 0xf27: 0x2d35, 0xf28: 0x2d35, 0xf29: 0x2d55, + 0xf2a: 0x2d75, 0xf2b: 0x2d95, 0xf2c: 0x2db5, 0xf2d: 0x2dd5, 0xf2e: 0x2df5, 0xf2f: 0x2e15, + 0xf30: 0x2e35, 0xf31: 0x2e55, 0xf32: 0x2e55, 0xf33: 0x2e75, 0xf34: 0x2e95, 0xf35: 0x2e95, + 0xf36: 0x2eb5, 0xf37: 0x2ed5, 0xf38: 0x2e75, 0xf39: 0x2ef5, 0xf3a: 0x2f15, 0xf3b: 0x2ef5, + 0xf3c: 0x2e75, 0xf3d: 0x2f35, 0xf3e: 0x2f55, 0xf3f: 0x2f75, + // Block 0x3d, offset 0xf40 + 0xf40: 0x2f95, 0xf41: 0x2fb5, 0xf42: 0x2d15, 0xf43: 0x2cf5, 0xf44: 0x2fd5, 0xf45: 0x2ff5, + 0xf46: 0x3015, 0xf47: 0x3035, 0xf48: 0x3055, 0xf49: 0x3075, 0xf4a: 0x3095, 0xf4b: 0x30b5, + 0xf4c: 0x30d5, 0xf4d: 0x30f5, 0xf4e: 0x3115, 0xf4f: 0x0040, 0xf50: 0x0018, 0xf51: 0x0018, + 0xf52: 0x3135, 0xf53: 0x3155, 0xf54: 0x3175, 0xf55: 0x3195, 0xf56: 0x31b5, 0xf57: 0x31d5, + 0xf58: 0x31f5, 0xf59: 0x3215, 0xf5a: 0x3235, 0xf5b: 0x3255, 0xf5c: 0x3175, 0xf5d: 0x3275, + 0xf5e: 0x3295, 0xf5f: 0x32b5, 0xf60: 0x0008, 0xf61: 0x0008, 0xf62: 0x0008, 0xf63: 0x0008, + 0xf64: 0x0008, 0xf65: 0x0008, 0xf66: 0x0008, 0xf67: 0x0008, 0xf68: 0x0008, 0xf69: 0x0008, + 0xf6a: 0x0008, 0xf6b: 0x0008, 0xf6c: 0x0008, 0xf6d: 0x0008, 0xf6e: 0x0008, 0xf6f: 0x0008, + 0xf70: 0x0008, 0xf71: 0x0008, 0xf72: 0x0008, 0xf73: 0x0008, 0xf74: 0x0008, 0xf75: 0x0008, + 0xf76: 0x0008, 0xf77: 0x0008, 0xf78: 0x0008, 0xf79: 0x0008, 0xf7a: 0x0008, 0xf7b: 0x0008, + 0xf7c: 0x0008, 0xf7d: 0x0008, 0xf7e: 0x0008, 0xf7f: 0x0008, + // Block 0x3e, offset 0xf80 + 0xf80: 0x0b82, 0xf81: 0x0b8a, 0xf82: 0x0b92, 0xf83: 0x0b9a, 0xf84: 0x32d5, 0xf85: 0x32f5, + 0xf86: 0x3315, 0xf87: 0x3335, 0xf88: 0x0018, 0xf89: 0x0018, 0xf8a: 0x0018, 0xf8b: 0x0018, + 0xf8c: 0x0018, 0xf8d: 0x0018, 0xf8e: 0x0018, 0xf8f: 0x0018, 0xf90: 0x3355, 0xf91: 0x0ba1, + 0xf92: 0x0ba9, 0xf93: 0x0bb1, 0xf94: 0x0bb9, 0xf95: 0x0bc1, 0xf96: 0x0bc9, 0xf97: 0x0bd1, + 0xf98: 0x0bd9, 0xf99: 0x0be1, 0xf9a: 0x0be9, 0xf9b: 0x0bf1, 0xf9c: 0x0bf9, 0xf9d: 0x0c01, + 0xf9e: 0x0c09, 0xf9f: 0x0c11, 0xfa0: 0x3375, 0xfa1: 0x3395, 0xfa2: 0x33b5, 0xfa3: 0x33d5, + 0xfa4: 0x33f5, 0xfa5: 0x33f5, 0xfa6: 0x3415, 0xfa7: 0x3435, 0xfa8: 0x3455, 0xfa9: 0x3475, + 0xfaa: 0x3495, 0xfab: 0x34b5, 0xfac: 0x34d5, 0xfad: 0x34f5, 0xfae: 0x3515, 0xfaf: 0x3535, + 0xfb0: 0x3555, 0xfb1: 0x3575, 0xfb2: 0x3595, 0xfb3: 0x35b5, 0xfb4: 0x35d5, 0xfb5: 0x35f5, + 0xfb6: 0x3615, 0xfb7: 0x3635, 0xfb8: 0x3655, 0xfb9: 0x3675, 0xfba: 0x3695, 0xfbb: 0x36b5, + 0xfbc: 0x0c19, 0xfbd: 0x0c21, 0xfbe: 0x36d5, 0xfbf: 0x0018, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x36f5, 0xfc1: 0x3715, 0xfc2: 0x3735, 0xfc3: 0x3755, 0xfc4: 0x3775, 0xfc5: 0x3795, + 0xfc6: 0x37b5, 0xfc7: 0x37d5, 0xfc8: 0x37f5, 0xfc9: 0x3815, 0xfca: 0x3835, 0xfcb: 0x3855, + 0xfcc: 0x3875, 0xfcd: 0x3895, 0xfce: 0x38b5, 0xfcf: 0x38d5, 0xfd0: 0x38f5, 0xfd1: 0x3915, + 0xfd2: 0x3935, 0xfd3: 0x3955, 0xfd4: 0x3975, 0xfd5: 0x3995, 0xfd6: 0x39b5, 0xfd7: 0x39d5, + 0xfd8: 0x39f5, 0xfd9: 0x3a15, 0xfda: 0x3a35, 0xfdb: 0x3a55, 0xfdc: 0x3a75, 0xfdd: 0x3a95, + 0xfde: 0x3ab5, 0xfdf: 0x3ad5, 0xfe0: 0x3af5, 0xfe1: 0x3b15, 0xfe2: 0x3b35, 0xfe3: 0x3b55, + 0xfe4: 0x3b75, 0xfe5: 0x3b95, 0xfe6: 0x1295, 0xfe7: 0x3bb5, 0xfe8: 0x3bd5, 0xfe9: 0x3bf5, + 0xfea: 0x3c15, 0xfeb: 0x3c35, 0xfec: 0x3c55, 0xfed: 0x3c75, 0xfee: 0x23b5, 0xfef: 0x3c95, + 0xff0: 0x3cb5, 0xff1: 0x0c29, 0xff2: 0x0c31, 0xff3: 0x0c39, 0xff4: 0x0c41, 0xff5: 0x0c49, + 0xff6: 0x0c51, 0xff7: 0x0c59, 0xff8: 0x0c61, 0xff9: 0x0c69, 0xffa: 0x0c71, 0xffb: 0x0c79, + 0xffc: 0x0c81, 0xffd: 0x0c89, 0xffe: 0x0c91, 0xfff: 0x0c99, + // Block 0x40, offset 0x1000 + 0x1000: 0x0ca1, 0x1001: 0x0ca9, 0x1002: 0x0cb1, 0x1003: 0x0cb9, 0x1004: 0x0cc1, 0x1005: 0x0cc9, + 0x1006: 0x0cd1, 0x1007: 0x0cd9, 0x1008: 0x0ce1, 0x1009: 0x0ce9, 0x100a: 0x0cf1, 0x100b: 0x0cf9, + 0x100c: 0x0d01, 0x100d: 0x3cd5, 0x100e: 0x0d09, 0x100f: 0x3cf5, 0x1010: 0x3d15, 0x1011: 0x3d2d, + 0x1012: 0x3d45, 0x1013: 0x3d5d, 0x1014: 0x3d75, 0x1015: 0x3d75, 0x1016: 0x3d5d, 0x1017: 0x3d8d, + 0x1018: 0x07d5, 0x1019: 0x3da5, 0x101a: 0x3dbd, 0x101b: 0x3dd5, 0x101c: 0x3ded, 0x101d: 0x3e05, + 0x101e: 0x3e1d, 0x101f: 0x3e35, 0x1020: 0x3e4d, 0x1021: 0x3e65, 0x1022: 0x3e7d, 0x1023: 0x3e95, + 0x1024: 0x3ead, 0x1025: 0x3ead, 0x1026: 0x3ec5, 0x1027: 0x3ec5, 0x1028: 0x3edd, 0x1029: 0x3edd, + 0x102a: 0x3ef5, 0x102b: 0x3f0d, 0x102c: 0x3f25, 0x102d: 0x3f3d, 0x102e: 0x3f55, 0x102f: 0x3f55, + 0x1030: 0x3f6d, 0x1031: 0x3f6d, 0x1032: 0x3f6d, 0x1033: 0x3f85, 0x1034: 0x3f9d, 0x1035: 0x3fb5, + 0x1036: 0x3fcd, 0x1037: 0x3fb5, 0x1038: 0x3fe5, 0x1039: 0x3ffd, 0x103a: 0x3f85, 0x103b: 0x4015, + 0x103c: 0x402d, 0x103d: 0x402d, 0x103e: 0x402d, 0x103f: 0x0d11, + // Block 0x41, offset 0x1040 + 0x1040: 0x10f9, 0x1041: 0x1101, 0x1042: 0x40a5, 0x1043: 0x1109, 0x1044: 0x1111, 0x1045: 0x1119, + 0x1046: 0x1121, 0x1047: 0x1129, 0x1048: 0x40c5, 0x1049: 0x1131, 0x104a: 0x1139, 0x104b: 0x1141, + 0x104c: 0x40e5, 0x104d: 0x40e5, 0x104e: 0x1149, 0x104f: 0x1151, 0x1050: 0x1159, 0x1051: 0x4105, + 0x1052: 0x4125, 0x1053: 0x4145, 0x1054: 0x4165, 0x1055: 0x4185, 0x1056: 0x1161, 0x1057: 0x1169, + 0x1058: 0x1171, 0x1059: 0x1179, 0x105a: 0x1181, 0x105b: 0x41a5, 0x105c: 0x1189, 0x105d: 0x1191, + 0x105e: 0x1199, 0x105f: 0x41c5, 0x1060: 0x41e5, 0x1061: 0x11a1, 0x1062: 0x4205, 0x1063: 0x4225, + 0x1064: 0x4245, 0x1065: 0x11a9, 0x1066: 0x4265, 0x1067: 0x11b1, 0x1068: 0x11b9, 0x1069: 0x10f9, + 0x106a: 0x4285, 0x106b: 0x42a5, 0x106c: 0x42c5, 0x106d: 0x42e5, 0x106e: 0x11c1, 0x106f: 0x11c9, + 0x1070: 0x11d1, 0x1071: 0x11d9, 0x1072: 0x4305, 0x1073: 0x11e1, 0x1074: 0x11e9, 0x1075: 0x11f1, + 0x1076: 0x4325, 0x1077: 0x11f9, 0x1078: 0x1201, 0x1079: 0x11f9, 0x107a: 0x1209, 0x107b: 0x1211, + 0x107c: 0x4345, 0x107d: 0x1219, 0x107e: 0x1221, 0x107f: 0x1219, + // Block 0x42, offset 0x1080 + 0x1080: 0x4365, 0x1081: 0x4385, 0x1082: 0x0040, 0x1083: 0x1229, 0x1084: 0x1231, 0x1085: 0x1239, + 0x1086: 0x1241, 0x1087: 0x0040, 0x1088: 0x1249, 0x1089: 0x1251, 0x108a: 0x1259, 0x108b: 0x1261, + 0x108c: 0x1269, 0x108d: 0x1271, 0x108e: 0x1199, 0x108f: 0x1279, 0x1090: 0x1281, 0x1091: 0x1289, + 0x1092: 0x43a5, 0x1093: 0x1291, 0x1094: 0x1121, 0x1095: 0x43c5, 0x1096: 0x43e5, 0x1097: 0x1299, + 0x1098: 0x0040, 0x1099: 0x4405, 0x109a: 0x12a1, 0x109b: 0x12a9, 0x109c: 0x12b1, 0x109d: 0x12b9, + 0x109e: 0x12c1, 0x109f: 0x12c9, 0x10a0: 0x12d1, 0x10a1: 0x12d9, 0x10a2: 0x12e1, 0x10a3: 0x12e9, + 0x10a4: 0x12f1, 0x10a5: 0x12f9, 0x10a6: 0x1301, 0x10a7: 0x1309, 0x10a8: 0x1311, 0x10a9: 0x1319, + 0x10aa: 0x1321, 0x10ab: 0x1329, 0x10ac: 0x1331, 0x10ad: 0x1339, 0x10ae: 0x1341, 0x10af: 0x1349, + 0x10b0: 0x1351, 0x10b1: 0x1359, 0x10b2: 0x1361, 0x10b3: 0x1369, 0x10b4: 0x1371, 0x10b5: 0x1379, + 0x10b6: 0x1381, 0x10b7: 0x1389, 0x10b8: 0x1391, 0x10b9: 0x1399, 0x10ba: 0x13a1, 0x10bb: 0x13a9, + 0x10bc: 0x13b1, 0x10bd: 0x13b9, 0x10be: 0x13c1, 0x10bf: 0x4425, + // Block 0x43, offset 0x10c0 + 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008, + 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008, + 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008, + 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008, + 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0xe00d, 0x10dd: 0x0008, + 0x10de: 0xe00d, 0x10df: 0x0008, 0x10e0: 0xe00d, 0x10e1: 0x0008, 0x10e2: 0xe00d, 0x10e3: 0x0008, + 0x10e4: 0xe00d, 0x10e5: 0x0008, 0x10e6: 0xe00d, 0x10e7: 0x0008, 0x10e8: 0xe00d, 0x10e9: 0x0008, + 0x10ea: 0xe00d, 0x10eb: 0x0008, 0x10ec: 0xe00d, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x3308, + 0x10f0: 0x3318, 0x10f1: 0x3318, 0x10f2: 0x3318, 0x10f3: 0x0018, 0x10f4: 0x3308, 0x10f5: 0x3308, + 0x10f6: 0x3308, 0x10f7: 0x3308, 0x10f8: 0x3308, 0x10f9: 0x3308, 0x10fa: 0x3308, 0x10fb: 0x3308, + 0x10fc: 0x3308, 0x10fd: 0x3308, 0x10fe: 0x0018, 0x10ff: 0x0008, + // Block 0x44, offset 0x1100 + 0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008, + 0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008, + 0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008, + 0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008, + 0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0x02d1, 0x111d: 0x13c9, + 0x111e: 0x3308, 0x111f: 0x3308, 0x1120: 0x0008, 0x1121: 0x0008, 0x1122: 0x0008, 0x1123: 0x0008, + 0x1124: 0x0008, 0x1125: 0x0008, 0x1126: 0x0008, 0x1127: 0x0008, 0x1128: 0x0008, 0x1129: 0x0008, + 0x112a: 0x0008, 0x112b: 0x0008, 0x112c: 0x0008, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x0008, + 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0x0008, 0x1133: 0x0008, 0x1134: 0x0008, 0x1135: 0x0008, + 0x1136: 0x0008, 0x1137: 0x0008, 0x1138: 0x0008, 0x1139: 0x0008, 0x113a: 0x0008, 0x113b: 0x0008, + 0x113c: 0x0008, 0x113d: 0x0008, 0x113e: 0x0008, 0x113f: 0x0008, + // Block 0x45, offset 0x1140 + 0x1140: 0x0018, 0x1141: 0x0018, 0x1142: 0x0018, 0x1143: 0x0018, 0x1144: 0x0018, 0x1145: 0x0018, + 0x1146: 0x0018, 0x1147: 0x0018, 0x1148: 0x0018, 0x1149: 0x0018, 0x114a: 0x0018, 0x114b: 0x0018, + 0x114c: 0x0018, 0x114d: 0x0018, 0x114e: 0x0018, 0x114f: 0x0018, 0x1150: 0x0018, 0x1151: 0x0018, + 0x1152: 0x0018, 0x1153: 0x0018, 0x1154: 0x0018, 0x1155: 0x0018, 0x1156: 0x0018, 0x1157: 0x0008, + 0x1158: 0x0008, 0x1159: 0x0008, 0x115a: 0x0008, 0x115b: 0x0008, 0x115c: 0x0008, 0x115d: 0x0008, + 0x115e: 0x0008, 0x115f: 0x0008, 0x1160: 0x0018, 0x1161: 0x0018, 0x1162: 0xe00d, 0x1163: 0x0008, + 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008, + 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008, + 0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0xe00d, 0x1173: 0x0008, 0x1174: 0xe00d, 0x1175: 0x0008, + 0x1176: 0xe00d, 0x1177: 0x0008, 0x1178: 0xe00d, 0x1179: 0x0008, 0x117a: 0xe00d, 0x117b: 0x0008, + 0x117c: 0xe00d, 0x117d: 0x0008, 0x117e: 0xe00d, 0x117f: 0x0008, + // Block 0x46, offset 0x1180 + 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008, + 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0xe00d, 0x1189: 0x0008, 0x118a: 0xe00d, 0x118b: 0x0008, + 0x118c: 0xe00d, 0x118d: 0x0008, 0x118e: 0xe00d, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008, + 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0xe00d, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008, + 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008, + 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008, + 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, + 0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008, + 0x11b0: 0xe0fd, 0x11b1: 0x0008, 0x11b2: 0x0008, 0x11b3: 0x0008, 0x11b4: 0x0008, 0x11b5: 0x0008, + 0x11b6: 0x0008, 0x11b7: 0x0008, 0x11b8: 0x0008, 0x11b9: 0xe01d, 0x11ba: 0x0008, 0x11bb: 0xe03d, + 0x11bc: 0x0008, 0x11bd: 0x4445, 0x11be: 0xe00d, 0x11bf: 0x0008, + // Block 0x47, offset 0x11c0 + 0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008, + 0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0x0008, 0x11c9: 0x0018, 0x11ca: 0x0018, 0x11cb: 0xe03d, + 0x11cc: 0x0008, 0x11cd: 0x0409, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008, + 0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008, + 0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008, + 0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008, + 0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008, + 0x11ea: 0x13d1, 0x11eb: 0x0371, 0x11ec: 0x0401, 0x11ed: 0x13d9, 0x11ee: 0x0421, 0x11ef: 0x0008, + 0x11f0: 0x13e1, 0x11f1: 0x13e9, 0x11f2: 0x0429, 0x11f3: 0x4465, 0x11f4: 0xe00d, 0x11f5: 0x0008, + 0x11f6: 0xe00d, 0x11f7: 0x0008, 0x11f8: 0xe00d, 0x11f9: 0x0008, 0x11fa: 0xe00d, 0x11fb: 0x0008, + 0x11fc: 0xe00d, 0x11fd: 0x0008, 0x11fe: 0xe00d, 0x11ff: 0x0008, + // Block 0x48, offset 0x1200 + 0x1200: 0xe00d, 0x1201: 0x0008, 0x1202: 0xe00d, 0x1203: 0x0008, 0x1204: 0x03f5, 0x1205: 0x0479, + 0x1206: 0x447d, 0x1207: 0xe07d, 0x1208: 0x0008, 0x1209: 0xe01d, 0x120a: 0x0008, 0x120b: 0x0040, + 0x120c: 0x0040, 0x120d: 0x0040, 0x120e: 0x0040, 0x120f: 0x0040, 0x1210: 0xe00d, 0x1211: 0x0008, + 0x1212: 0x0040, 0x1213: 0x0008, 0x1214: 0x0040, 0x1215: 0x0008, 0x1216: 0xe00d, 0x1217: 0x0008, + 0x1218: 0xe00d, 0x1219: 0x0008, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040, + 0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040, + 0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040, + 0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040, + 0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x03d9, 0x1233: 0x03f1, 0x1234: 0x0751, 0x1235: 0xe01d, + 0x1236: 0x0008, 0x1237: 0x0008, 0x1238: 0x0741, 0x1239: 0x13f1, 0x123a: 0x0008, 0x123b: 0x0008, + 0x123c: 0x0008, 0x123d: 0x0008, 0x123e: 0x0008, 0x123f: 0x0008, + // Block 0x49, offset 0x1240 + 0x1240: 0x650d, 0x1241: 0x652d, 0x1242: 0x654d, 0x1243: 0x656d, 0x1244: 0x658d, 0x1245: 0x65ad, + 0x1246: 0x65cd, 0x1247: 0x65ed, 0x1248: 0x660d, 0x1249: 0x662d, 0x124a: 0x664d, 0x124b: 0x666d, + 0x124c: 0x668d, 0x124d: 0x66ad, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x66cd, 0x1251: 0x0008, + 0x1252: 0x66ed, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x670d, 0x1256: 0x672d, 0x1257: 0x674d, + 0x1258: 0x676d, 0x1259: 0x678d, 0x125a: 0x67ad, 0x125b: 0x67cd, 0x125c: 0x67ed, 0x125d: 0x680d, + 0x125e: 0x682d, 0x125f: 0x0008, 0x1260: 0x684d, 0x1261: 0x0008, 0x1262: 0x686d, 0x1263: 0x0008, + 0x1264: 0x0008, 0x1265: 0x688d, 0x1266: 0x68ad, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008, + 0x126a: 0x68cd, 0x126b: 0x68ed, 0x126c: 0x690d, 0x126d: 0x692d, 0x126e: 0x694d, 0x126f: 0x696d, + 0x1270: 0x698d, 0x1271: 0x69ad, 0x1272: 0x69cd, 0x1273: 0x69ed, 0x1274: 0x6a0d, 0x1275: 0x6a2d, + 0x1276: 0x6a4d, 0x1277: 0x6a6d, 0x1278: 0x6a8d, 0x1279: 0x6aad, 0x127a: 0x6acd, 0x127b: 0x6aed, + 0x127c: 0x6b0d, 0x127d: 0x6b2d, 0x127e: 0x6b4d, 0x127f: 0x6b6d, + // Block 0x4a, offset 0x1280 + 0x1280: 0x7acd, 0x1281: 0x7aed, 0x1282: 0x7b0d, 0x1283: 0x7b2d, 0x1284: 0x7b4d, 0x1285: 0x7b6d, + 0x1286: 0x7b8d, 0x1287: 0x7bad, 0x1288: 0x7bcd, 0x1289: 0x7bed, 0x128a: 0x7c0d, 0x128b: 0x7c2d, + 0x128c: 0x7c4d, 0x128d: 0x7c6d, 0x128e: 0x7c8d, 0x128f: 0x1409, 0x1290: 0x1411, 0x1291: 0x1419, + 0x1292: 0x7cad, 0x1293: 0x7ccd, 0x1294: 0x7ced, 0x1295: 0x1421, 0x1296: 0x1429, 0x1297: 0x1431, + 0x1298: 0x7d0d, 0x1299: 0x7d2d, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x0040, + 0x129e: 0x0040, 0x129f: 0x0040, 0x12a0: 0x0040, 0x12a1: 0x0040, 0x12a2: 0x0040, 0x12a3: 0x0040, + 0x12a4: 0x0040, 0x12a5: 0x0040, 0x12a6: 0x0040, 0x12a7: 0x0040, 0x12a8: 0x0040, 0x12a9: 0x0040, + 0x12aa: 0x0040, 0x12ab: 0x0040, 0x12ac: 0x0040, 0x12ad: 0x0040, 0x12ae: 0x0040, 0x12af: 0x0040, + 0x12b0: 0x0040, 0x12b1: 0x0040, 0x12b2: 0x0040, 0x12b3: 0x0040, 0x12b4: 0x0040, 0x12b5: 0x0040, + 0x12b6: 0x0040, 0x12b7: 0x0040, 0x12b8: 0x0040, 0x12b9: 0x0040, 0x12ba: 0x0040, 0x12bb: 0x0040, + 0x12bc: 0x0040, 0x12bd: 0x0040, 0x12be: 0x0040, 0x12bf: 0x0040, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x1439, 0x12c1: 0x1441, 0x12c2: 0x1449, 0x12c3: 0x7d4d, 0x12c4: 0x7d6d, 0x12c5: 0x1451, + 0x12c6: 0x1451, 0x12c7: 0x0040, 0x12c8: 0x0040, 0x12c9: 0x0040, 0x12ca: 0x0040, 0x12cb: 0x0040, + 0x12cc: 0x0040, 0x12cd: 0x0040, 0x12ce: 0x0040, 0x12cf: 0x0040, 0x12d0: 0x0040, 0x12d1: 0x0040, + 0x12d2: 0x0040, 0x12d3: 0x1459, 0x12d4: 0x1461, 0x12d5: 0x1469, 0x12d6: 0x1471, 0x12d7: 0x1479, + 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x1481, + 0x12de: 0x3308, 0x12df: 0x1489, 0x12e0: 0x1491, 0x12e1: 0x0779, 0x12e2: 0x0791, 0x12e3: 0x1499, + 0x12e4: 0x14a1, 0x12e5: 0x14a9, 0x12e6: 0x14b1, 0x12e7: 0x14b9, 0x12e8: 0x14c1, 0x12e9: 0x071a, + 0x12ea: 0x14c9, 0x12eb: 0x14d1, 0x12ec: 0x14d9, 0x12ed: 0x14e1, 0x12ee: 0x14e9, 0x12ef: 0x14f1, + 0x12f0: 0x14f9, 0x12f1: 0x1501, 0x12f2: 0x1509, 0x12f3: 0x1511, 0x12f4: 0x1519, 0x12f5: 0x1521, + 0x12f6: 0x1529, 0x12f7: 0x0040, 0x12f8: 0x1531, 0x12f9: 0x1539, 0x12fa: 0x1541, 0x12fb: 0x1549, + 0x12fc: 0x1551, 0x12fd: 0x0040, 0x12fe: 0x1559, 0x12ff: 0x0040, + // Block 0x4c, offset 0x1300 + 0x1300: 0x1561, 0x1301: 0x1569, 0x1302: 0x0040, 0x1303: 0x1571, 0x1304: 0x1579, 0x1305: 0x0040, + 0x1306: 0x1581, 0x1307: 0x1589, 0x1308: 0x1591, 0x1309: 0x1599, 0x130a: 0x15a1, 0x130b: 0x15a9, + 0x130c: 0x15b1, 0x130d: 0x15b9, 0x130e: 0x15c1, 0x130f: 0x15c9, 0x1310: 0x15d1, 0x1311: 0x15d1, + 0x1312: 0x15d9, 0x1313: 0x15d9, 0x1314: 0x15d9, 0x1315: 0x15d9, 0x1316: 0x15e1, 0x1317: 0x15e1, + 0x1318: 0x15e1, 0x1319: 0x15e1, 0x131a: 0x15e9, 0x131b: 0x15e9, 0x131c: 0x15e9, 0x131d: 0x15e9, + 0x131e: 0x15f1, 0x131f: 0x15f1, 0x1320: 0x15f1, 0x1321: 0x15f1, 0x1322: 0x15f9, 0x1323: 0x15f9, + 0x1324: 0x15f9, 0x1325: 0x15f9, 0x1326: 0x1601, 0x1327: 0x1601, 0x1328: 0x1601, 0x1329: 0x1601, + 0x132a: 0x1609, 0x132b: 0x1609, 0x132c: 0x1609, 0x132d: 0x1609, 0x132e: 0x1611, 0x132f: 0x1611, + 0x1330: 0x1611, 0x1331: 0x1611, 0x1332: 0x1619, 0x1333: 0x1619, 0x1334: 0x1619, 0x1335: 0x1619, + 0x1336: 0x1621, 0x1337: 0x1621, 0x1338: 0x1621, 0x1339: 0x1621, 0x133a: 0x1629, 0x133b: 0x1629, + 0x133c: 0x1629, 0x133d: 0x1629, 0x133e: 0x1631, 0x133f: 0x1631, + // Block 0x4d, offset 0x1340 + 0x1340: 0x1631, 0x1341: 0x1631, 0x1342: 0x1639, 0x1343: 0x1639, 0x1344: 0x1641, 0x1345: 0x1641, + 0x1346: 0x1649, 0x1347: 0x1649, 0x1348: 0x1651, 0x1349: 0x1651, 0x134a: 0x1659, 0x134b: 0x1659, + 0x134c: 0x1661, 0x134d: 0x1661, 0x134e: 0x1669, 0x134f: 0x1669, 0x1350: 0x1669, 0x1351: 0x1669, + 0x1352: 0x1671, 0x1353: 0x1671, 0x1354: 0x1671, 0x1355: 0x1671, 0x1356: 0x1679, 0x1357: 0x1679, + 0x1358: 0x1679, 0x1359: 0x1679, 0x135a: 0x1681, 0x135b: 0x1681, 0x135c: 0x1681, 0x135d: 0x1681, + 0x135e: 0x1689, 0x135f: 0x1689, 0x1360: 0x1691, 0x1361: 0x1691, 0x1362: 0x1691, 0x1363: 0x1691, + 0x1364: 0x1699, 0x1365: 0x1699, 0x1366: 0x16a1, 0x1367: 0x16a1, 0x1368: 0x16a1, 0x1369: 0x16a1, + 0x136a: 0x16a9, 0x136b: 0x16a9, 0x136c: 0x16a9, 0x136d: 0x16a9, 0x136e: 0x16b1, 0x136f: 0x16b1, + 0x1370: 0x16b9, 0x1371: 0x16b9, 0x1372: 0x0818, 0x1373: 0x0818, 0x1374: 0x0818, 0x1375: 0x0818, + 0x1376: 0x0818, 0x1377: 0x0818, 0x1378: 0x0818, 0x1379: 0x0818, 0x137a: 0x0818, 0x137b: 0x0818, + 0x137c: 0x0818, 0x137d: 0x0818, 0x137e: 0x0818, 0x137f: 0x0818, + // Block 0x4e, offset 0x1380 + 0x1380: 0x0818, 0x1381: 0x0818, 0x1382: 0x0818, 0x1383: 0x0040, 0x1384: 0x0040, 0x1385: 0x0040, + 0x1386: 0x0040, 0x1387: 0x0040, 0x1388: 0x0040, 0x1389: 0x0040, 0x138a: 0x0040, 0x138b: 0x0040, + 0x138c: 0x0040, 0x138d: 0x0040, 0x138e: 0x0040, 0x138f: 0x0040, 0x1390: 0x0040, 0x1391: 0x0040, + 0x1392: 0x0040, 0x1393: 0x16c1, 0x1394: 0x16c1, 0x1395: 0x16c1, 0x1396: 0x16c1, 0x1397: 0x16c9, + 0x1398: 0x16c9, 0x1399: 0x16d1, 0x139a: 0x16d1, 0x139b: 0x16d9, 0x139c: 0x16d9, 0x139d: 0x0149, + 0x139e: 0x16e1, 0x139f: 0x16e1, 0x13a0: 0x16e9, 0x13a1: 0x16e9, 0x13a2: 0x16f1, 0x13a3: 0x16f1, + 0x13a4: 0x16f9, 0x13a5: 0x16f9, 0x13a6: 0x16f9, 0x13a7: 0x16f9, 0x13a8: 0x1701, 0x13a9: 0x1701, + 0x13aa: 0x1709, 0x13ab: 0x1709, 0x13ac: 0x1711, 0x13ad: 0x1711, 0x13ae: 0x1719, 0x13af: 0x1719, + 0x13b0: 0x1721, 0x13b1: 0x1721, 0x13b2: 0x1729, 0x13b3: 0x1729, 0x13b4: 0x1731, 0x13b5: 0x1731, + 0x13b6: 0x1739, 0x13b7: 0x1739, 0x13b8: 0x1739, 0x13b9: 0x1741, 0x13ba: 0x1741, 0x13bb: 0x1741, + 0x13bc: 0x1749, 0x13bd: 0x1749, 0x13be: 0x1749, 0x13bf: 0x1749, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x1949, 0x13c1: 0x1951, 0x13c2: 0x1959, 0x13c3: 0x1961, 0x13c4: 0x1969, 0x13c5: 0x1971, + 0x13c6: 0x1979, 0x13c7: 0x1981, 0x13c8: 0x1989, 0x13c9: 0x1991, 0x13ca: 0x1999, 0x13cb: 0x19a1, + 0x13cc: 0x19a9, 0x13cd: 0x19b1, 0x13ce: 0x19b9, 0x13cf: 0x19c1, 0x13d0: 0x19c9, 0x13d1: 0x19d1, + 0x13d2: 0x19d9, 0x13d3: 0x19e1, 0x13d4: 0x19e9, 0x13d5: 0x19f1, 0x13d6: 0x19f9, 0x13d7: 0x1a01, + 0x13d8: 0x1a09, 0x13d9: 0x1a11, 0x13da: 0x1a19, 0x13db: 0x1a21, 0x13dc: 0x1a29, 0x13dd: 0x1a31, + 0x13de: 0x1a3a, 0x13df: 0x1a42, 0x13e0: 0x1a4a, 0x13e1: 0x1a52, 0x13e2: 0x1a5a, 0x13e3: 0x1a62, + 0x13e4: 0x1a69, 0x13e5: 0x1a71, 0x13e6: 0x1761, 0x13e7: 0x1a79, 0x13e8: 0x1741, 0x13e9: 0x1769, + 0x13ea: 0x1a81, 0x13eb: 0x1a89, 0x13ec: 0x1789, 0x13ed: 0x1a91, 0x13ee: 0x1791, 0x13ef: 0x1799, + 0x13f0: 0x1a99, 0x13f1: 0x1aa1, 0x13f2: 0x17b9, 0x13f3: 0x1aa9, 0x13f4: 0x17c1, 0x13f5: 0x17c9, + 0x13f6: 0x1ab1, 0x13f7: 0x1ab9, 0x13f8: 0x17d9, 0x13f9: 0x1ac1, 0x13fa: 0x17e1, 0x13fb: 0x17e9, + 0x13fc: 0x18d1, 0x13fd: 0x18d9, 0x13fe: 0x18f1, 0x13ff: 0x18f9, + // Block 0x50, offset 0x1400 + 0x1400: 0x1901, 0x1401: 0x1921, 0x1402: 0x1929, 0x1403: 0x1931, 0x1404: 0x1939, 0x1405: 0x1959, + 0x1406: 0x1961, 0x1407: 0x1969, 0x1408: 0x1ac9, 0x1409: 0x1989, 0x140a: 0x1ad1, 0x140b: 0x1ad9, + 0x140c: 0x19b9, 0x140d: 0x1ae1, 0x140e: 0x19c1, 0x140f: 0x19c9, 0x1410: 0x1a31, 0x1411: 0x1ae9, + 0x1412: 0x1af1, 0x1413: 0x1a09, 0x1414: 0x1af9, 0x1415: 0x1a11, 0x1416: 0x1a19, 0x1417: 0x1751, + 0x1418: 0x1759, 0x1419: 0x1b01, 0x141a: 0x1761, 0x141b: 0x1b09, 0x141c: 0x1771, 0x141d: 0x1779, + 0x141e: 0x1781, 0x141f: 0x1789, 0x1420: 0x1b11, 0x1421: 0x17a1, 0x1422: 0x17a9, 0x1423: 0x17b1, + 0x1424: 0x17b9, 0x1425: 0x1b19, 0x1426: 0x17d9, 0x1427: 0x17f1, 0x1428: 0x17f9, 0x1429: 0x1801, + 0x142a: 0x1809, 0x142b: 0x1811, 0x142c: 0x1821, 0x142d: 0x1829, 0x142e: 0x1831, 0x142f: 0x1839, + 0x1430: 0x1841, 0x1431: 0x1849, 0x1432: 0x1b21, 0x1433: 0x1851, 0x1434: 0x1859, 0x1435: 0x1861, + 0x1436: 0x1869, 0x1437: 0x1871, 0x1438: 0x1879, 0x1439: 0x1889, 0x143a: 0x1891, 0x143b: 0x1899, + 0x143c: 0x18a1, 0x143d: 0x18a9, 0x143e: 0x18b1, 0x143f: 0x18b9, + // Block 0x51, offset 0x1440 + 0x1440: 0x18c1, 0x1441: 0x18c9, 0x1442: 0x18e1, 0x1443: 0x18e9, 0x1444: 0x1909, 0x1445: 0x1911, + 0x1446: 0x1919, 0x1447: 0x1921, 0x1448: 0x1929, 0x1449: 0x1941, 0x144a: 0x1949, 0x144b: 0x1951, + 0x144c: 0x1959, 0x144d: 0x1b29, 0x144e: 0x1971, 0x144f: 0x1979, 0x1450: 0x1981, 0x1451: 0x1989, + 0x1452: 0x19a1, 0x1453: 0x19a9, 0x1454: 0x19b1, 0x1455: 0x19b9, 0x1456: 0x1b31, 0x1457: 0x19d1, + 0x1458: 0x19d9, 0x1459: 0x1b39, 0x145a: 0x19f1, 0x145b: 0x19f9, 0x145c: 0x1a01, 0x145d: 0x1a09, + 0x145e: 0x1b41, 0x145f: 0x1761, 0x1460: 0x1b09, 0x1461: 0x1789, 0x1462: 0x1b11, 0x1463: 0x17b9, + 0x1464: 0x1b19, 0x1465: 0x17d9, 0x1466: 0x1b49, 0x1467: 0x1841, 0x1468: 0x1b51, 0x1469: 0x1b59, + 0x146a: 0x1b61, 0x146b: 0x1921, 0x146c: 0x1929, 0x146d: 0x1959, 0x146e: 0x19b9, 0x146f: 0x1b31, + 0x1470: 0x1a09, 0x1471: 0x1b41, 0x1472: 0x1b69, 0x1473: 0x1b71, 0x1474: 0x1b79, 0x1475: 0x1b81, + 0x1476: 0x1b89, 0x1477: 0x1b91, 0x1478: 0x1b99, 0x1479: 0x1ba1, 0x147a: 0x1ba9, 0x147b: 0x1bb1, + 0x147c: 0x1bb9, 0x147d: 0x1bc1, 0x147e: 0x1bc9, 0x147f: 0x1bd1, + // Block 0x52, offset 0x1480 + 0x1480: 0x1bd9, 0x1481: 0x1be1, 0x1482: 0x1be9, 0x1483: 0x1bf1, 0x1484: 0x1bf9, 0x1485: 0x1c01, + 0x1486: 0x1c09, 0x1487: 0x1c11, 0x1488: 0x1c19, 0x1489: 0x1c21, 0x148a: 0x1c29, 0x148b: 0x1c31, + 0x148c: 0x1b59, 0x148d: 0x1c39, 0x148e: 0x1c41, 0x148f: 0x1c49, 0x1490: 0x1c51, 0x1491: 0x1b81, + 0x1492: 0x1b89, 0x1493: 0x1b91, 0x1494: 0x1b99, 0x1495: 0x1ba1, 0x1496: 0x1ba9, 0x1497: 0x1bb1, + 0x1498: 0x1bb9, 0x1499: 0x1bc1, 0x149a: 0x1bc9, 0x149b: 0x1bd1, 0x149c: 0x1bd9, 0x149d: 0x1be1, + 0x149e: 0x1be9, 0x149f: 0x1bf1, 0x14a0: 0x1bf9, 0x14a1: 0x1c01, 0x14a2: 0x1c09, 0x14a3: 0x1c11, + 0x14a4: 0x1c19, 0x14a5: 0x1c21, 0x14a6: 0x1c29, 0x14a7: 0x1c31, 0x14a8: 0x1b59, 0x14a9: 0x1c39, + 0x14aa: 0x1c41, 0x14ab: 0x1c49, 0x14ac: 0x1c51, 0x14ad: 0x1c21, 0x14ae: 0x1c29, 0x14af: 0x1c31, + 0x14b0: 0x1b59, 0x14b1: 0x1b51, 0x14b2: 0x1b61, 0x14b3: 0x1881, 0x14b4: 0x1829, 0x14b5: 0x1831, + 0x14b6: 0x1839, 0x14b7: 0x1c21, 0x14b8: 0x1c29, 0x14b9: 0x1c31, 0x14ba: 0x1881, 0x14bb: 0x1889, + 0x14bc: 0x1c59, 0x14bd: 0x1c59, 0x14be: 0x0018, 0x14bf: 0x0018, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x0018, 0x14c1: 0x0018, 0x14c2: 0x0018, 0x14c3: 0x0018, 0x14c4: 0x0018, 0x14c5: 0x0018, + 0x14c6: 0x0018, 0x14c7: 0x0018, 0x14c8: 0x0018, 0x14c9: 0x0018, 0x14ca: 0x0018, 0x14cb: 0x0018, + 0x14cc: 0x0018, 0x14cd: 0x0018, 0x14ce: 0x0018, 0x14cf: 0x0018, 0x14d0: 0x1c61, 0x14d1: 0x1c69, + 0x14d2: 0x1c69, 0x14d3: 0x1c71, 0x14d4: 0x1c79, 0x14d5: 0x1c81, 0x14d6: 0x1c89, 0x14d7: 0x1c91, + 0x14d8: 0x1c99, 0x14d9: 0x1c99, 0x14da: 0x1ca1, 0x14db: 0x1ca9, 0x14dc: 0x1cb1, 0x14dd: 0x1cb9, + 0x14de: 0x1cc1, 0x14df: 0x1cc9, 0x14e0: 0x1cc9, 0x14e1: 0x1cd1, 0x14e2: 0x1cd9, 0x14e3: 0x1cd9, + 0x14e4: 0x1ce1, 0x14e5: 0x1ce1, 0x14e6: 0x1ce9, 0x14e7: 0x1cf1, 0x14e8: 0x1cf1, 0x14e9: 0x1cf9, + 0x14ea: 0x1d01, 0x14eb: 0x1d01, 0x14ec: 0x1d09, 0x14ed: 0x1d09, 0x14ee: 0x1d11, 0x14ef: 0x1d19, + 0x14f0: 0x1d19, 0x14f1: 0x1d21, 0x14f2: 0x1d21, 0x14f3: 0x1d29, 0x14f4: 0x1d31, 0x14f5: 0x1d39, + 0x14f6: 0x1d41, 0x14f7: 0x1d41, 0x14f8: 0x1d49, 0x14f9: 0x1d51, 0x14fa: 0x1d59, 0x14fb: 0x1d61, + 0x14fc: 0x1d69, 0x14fd: 0x1d69, 0x14fe: 0x1d71, 0x14ff: 0x1d79, + // Block 0x54, offset 0x1500 + 0x1500: 0x1f29, 0x1501: 0x1f31, 0x1502: 0x1f39, 0x1503: 0x1f11, 0x1504: 0x1d39, 0x1505: 0x1ce9, + 0x1506: 0x1f41, 0x1507: 0x1f49, 0x1508: 0x0040, 0x1509: 0x0040, 0x150a: 0x0040, 0x150b: 0x0040, + 0x150c: 0x0040, 0x150d: 0x0040, 0x150e: 0x0040, 0x150f: 0x0018, 0x1510: 0x0040, 0x1511: 0x0040, + 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0040, 0x1515: 0x0040, 0x1516: 0x0040, 0x1517: 0x0040, + 0x1518: 0x0040, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040, + 0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x0040, 0x1521: 0x0040, 0x1522: 0x0040, 0x1523: 0x0040, + 0x1524: 0x0040, 0x1525: 0x0040, 0x1526: 0x0040, 0x1527: 0x0040, 0x1528: 0x0040, 0x1529: 0x0040, + 0x152a: 0x0040, 0x152b: 0x0040, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, + 0x1530: 0x1f51, 0x1531: 0x1f59, 0x1532: 0x1f61, 0x1533: 0x1f69, 0x1534: 0x1f71, 0x1535: 0x1f79, + 0x1536: 0x1f81, 0x1537: 0x1f89, 0x1538: 0x1f91, 0x1539: 0x1f99, 0x153a: 0x1fa2, 0x153b: 0x1faa, + 0x153c: 0x1fb1, 0x153d: 0x0018, 0x153e: 0x0018, 0x153f: 0x0018, + // Block 0x55, offset 0x1540 + 0x1540: 0x33c0, 0x1541: 0x33c0, 0x1542: 0x33c0, 0x1543: 0x33c0, 0x1544: 0x33c0, 0x1545: 0x33c0, + 0x1546: 0x33c0, 0x1547: 0x33c0, 0x1548: 0x33c0, 0x1549: 0x33c0, 0x154a: 0x33c0, 0x154b: 0x33c0, + 0x154c: 0x33c0, 0x154d: 0x33c0, 0x154e: 0x33c0, 0x154f: 0x33c0, 0x1550: 0x1fba, 0x1551: 0x7d8d, + 0x1552: 0x0040, 0x1553: 0x1fc2, 0x1554: 0x0122, 0x1555: 0x1fca, 0x1556: 0x1fd2, 0x1557: 0x7dad, + 0x1558: 0x7dcd, 0x1559: 0x0040, 0x155a: 0x0040, 0x155b: 0x0040, 0x155c: 0x0040, 0x155d: 0x0040, + 0x155e: 0x0040, 0x155f: 0x0040, 0x1560: 0x3308, 0x1561: 0x3308, 0x1562: 0x3308, 0x1563: 0x3308, + 0x1564: 0x3308, 0x1565: 0x3308, 0x1566: 0x3308, 0x1567: 0x3308, 0x1568: 0x3308, 0x1569: 0x3308, + 0x156a: 0x3308, 0x156b: 0x3308, 0x156c: 0x3308, 0x156d: 0x3308, 0x156e: 0x3308, 0x156f: 0x3308, + 0x1570: 0x0040, 0x1571: 0x7ded, 0x1572: 0x7e0d, 0x1573: 0x1fda, 0x1574: 0x1fda, 0x1575: 0x072a, + 0x1576: 0x0732, 0x1577: 0x1fe2, 0x1578: 0x1fea, 0x1579: 0x7e2d, 0x157a: 0x7e4d, 0x157b: 0x7e6d, + 0x157c: 0x7e2d, 0x157d: 0x7e8d, 0x157e: 0x7ead, 0x157f: 0x7e8d, + // Block 0x56, offset 0x1580 + 0x1580: 0x7ecd, 0x1581: 0x7eed, 0x1582: 0x7f0d, 0x1583: 0x7eed, 0x1584: 0x7f2d, 0x1585: 0x0018, + 0x1586: 0x0018, 0x1587: 0x1ff2, 0x1588: 0x1ffa, 0x1589: 0x7f4e, 0x158a: 0x7f6e, 0x158b: 0x7f8e, + 0x158c: 0x7fae, 0x158d: 0x1fda, 0x158e: 0x1fda, 0x158f: 0x1fda, 0x1590: 0x1fba, 0x1591: 0x7fcd, + 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x0122, 0x1595: 0x1fc2, 0x1596: 0x1fd2, 0x1597: 0x1fca, + 0x1598: 0x7fed, 0x1599: 0x072a, 0x159a: 0x0732, 0x159b: 0x1fe2, 0x159c: 0x1fea, 0x159d: 0x7ecd, + 0x159e: 0x7f2d, 0x159f: 0x2002, 0x15a0: 0x200a, 0x15a1: 0x2012, 0x15a2: 0x071a, 0x15a3: 0x2019, + 0x15a4: 0x2022, 0x15a5: 0x202a, 0x15a6: 0x0722, 0x15a7: 0x0040, 0x15a8: 0x2032, 0x15a9: 0x203a, + 0x15aa: 0x2042, 0x15ab: 0x204a, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040, + 0x15b0: 0x800e, 0x15b1: 0x2051, 0x15b2: 0x802e, 0x15b3: 0x0808, 0x15b4: 0x804e, 0x15b5: 0x0040, + 0x15b6: 0x806e, 0x15b7: 0x2059, 0x15b8: 0x808e, 0x15b9: 0x2061, 0x15ba: 0x80ae, 0x15bb: 0x2069, + 0x15bc: 0x80ce, 0x15bd: 0x2071, 0x15be: 0x80ee, 0x15bf: 0x2079, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x2081, 0x15c1: 0x2089, 0x15c2: 0x2089, 0x15c3: 0x2091, 0x15c4: 0x2091, 0x15c5: 0x2099, + 0x15c6: 0x2099, 0x15c7: 0x20a1, 0x15c8: 0x20a1, 0x15c9: 0x20a9, 0x15ca: 0x20a9, 0x15cb: 0x20a9, + 0x15cc: 0x20a9, 0x15cd: 0x20b1, 0x15ce: 0x20b1, 0x15cf: 0x20b9, 0x15d0: 0x20b9, 0x15d1: 0x20b9, + 0x15d2: 0x20b9, 0x15d3: 0x20c1, 0x15d4: 0x20c1, 0x15d5: 0x20c9, 0x15d6: 0x20c9, 0x15d7: 0x20c9, + 0x15d8: 0x20c9, 0x15d9: 0x20d1, 0x15da: 0x20d1, 0x15db: 0x20d1, 0x15dc: 0x20d1, 0x15dd: 0x20d9, + 0x15de: 0x20d9, 0x15df: 0x20d9, 0x15e0: 0x20d9, 0x15e1: 0x20e1, 0x15e2: 0x20e1, 0x15e3: 0x20e1, + 0x15e4: 0x20e1, 0x15e5: 0x20e9, 0x15e6: 0x20e9, 0x15e7: 0x20e9, 0x15e8: 0x20e9, 0x15e9: 0x20f1, + 0x15ea: 0x20f1, 0x15eb: 0x20f9, 0x15ec: 0x20f9, 0x15ed: 0x2101, 0x15ee: 0x2101, 0x15ef: 0x2109, + 0x15f0: 0x2109, 0x15f1: 0x2111, 0x15f2: 0x2111, 0x15f3: 0x2111, 0x15f4: 0x2111, 0x15f5: 0x2119, + 0x15f6: 0x2119, 0x15f7: 0x2119, 0x15f8: 0x2119, 0x15f9: 0x2121, 0x15fa: 0x2121, 0x15fb: 0x2121, + 0x15fc: 0x2121, 0x15fd: 0x2129, 0x15fe: 0x2129, 0x15ff: 0x2129, + // Block 0x58, offset 0x1600 + 0x1600: 0x2129, 0x1601: 0x2131, 0x1602: 0x2131, 0x1603: 0x2131, 0x1604: 0x2131, 0x1605: 0x2139, + 0x1606: 0x2139, 0x1607: 0x2139, 0x1608: 0x2139, 0x1609: 0x2141, 0x160a: 0x2141, 0x160b: 0x2141, + 0x160c: 0x2141, 0x160d: 0x2149, 0x160e: 0x2149, 0x160f: 0x2149, 0x1610: 0x2149, 0x1611: 0x2151, + 0x1612: 0x2151, 0x1613: 0x2151, 0x1614: 0x2151, 0x1615: 0x2159, 0x1616: 0x2159, 0x1617: 0x2159, + 0x1618: 0x2159, 0x1619: 0x2161, 0x161a: 0x2161, 0x161b: 0x2161, 0x161c: 0x2161, 0x161d: 0x2169, + 0x161e: 0x2169, 0x161f: 0x2169, 0x1620: 0x2169, 0x1621: 0x2171, 0x1622: 0x2171, 0x1623: 0x2171, + 0x1624: 0x2171, 0x1625: 0x2179, 0x1626: 0x2179, 0x1627: 0x2179, 0x1628: 0x2179, 0x1629: 0x2181, + 0x162a: 0x2181, 0x162b: 0x2181, 0x162c: 0x2181, 0x162d: 0x2189, 0x162e: 0x2189, 0x162f: 0x1701, + 0x1630: 0x1701, 0x1631: 0x2191, 0x1632: 0x2191, 0x1633: 0x2191, 0x1634: 0x2191, 0x1635: 0x2199, + 0x1636: 0x2199, 0x1637: 0x21a1, 0x1638: 0x21a1, 0x1639: 0x21a9, 0x163a: 0x21a9, 0x163b: 0x21b1, + 0x163c: 0x21b1, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0, + // Block 0x59, offset 0x1640 + 0x1640: 0x0040, 0x1641: 0x1fca, 0x1642: 0x21ba, 0x1643: 0x2002, 0x1644: 0x203a, 0x1645: 0x2042, + 0x1646: 0x200a, 0x1647: 0x21c2, 0x1648: 0x072a, 0x1649: 0x0732, 0x164a: 0x2012, 0x164b: 0x071a, + 0x164c: 0x1fba, 0x164d: 0x2019, 0x164e: 0x0961, 0x164f: 0x21ca, 0x1650: 0x06e1, 0x1651: 0x0049, + 0x1652: 0x0029, 0x1653: 0x0031, 0x1654: 0x06e9, 0x1655: 0x06f1, 0x1656: 0x06f9, 0x1657: 0x0701, + 0x1658: 0x0709, 0x1659: 0x0711, 0x165a: 0x1fc2, 0x165b: 0x0122, 0x165c: 0x2022, 0x165d: 0x0722, + 0x165e: 0x202a, 0x165f: 0x1fd2, 0x1660: 0x204a, 0x1661: 0x0019, 0x1662: 0x02e9, 0x1663: 0x03d9, + 0x1664: 0x02f1, 0x1665: 0x02f9, 0x1666: 0x03f1, 0x1667: 0x0309, 0x1668: 0x00a9, 0x1669: 0x0311, + 0x166a: 0x00b1, 0x166b: 0x0319, 0x166c: 0x0101, 0x166d: 0x0321, 0x166e: 0x0329, 0x166f: 0x0051, + 0x1670: 0x0339, 0x1671: 0x0751, 0x1672: 0x00b9, 0x1673: 0x0089, 0x1674: 0x0341, 0x1675: 0x0349, + 0x1676: 0x0391, 0x1677: 0x00c1, 0x1678: 0x0109, 0x1679: 0x00c9, 0x167a: 0x04b1, 0x167b: 0x1ff2, + 0x167c: 0x2032, 0x167d: 0x1ffa, 0x167e: 0x21d2, 0x167f: 0x1fda, + // Block 0x5a, offset 0x1680 + 0x1680: 0x0672, 0x1681: 0x0019, 0x1682: 0x02e9, 0x1683: 0x03d9, 0x1684: 0x02f1, 0x1685: 0x02f9, + 0x1686: 0x03f1, 0x1687: 0x0309, 0x1688: 0x00a9, 0x1689: 0x0311, 0x168a: 0x00b1, 0x168b: 0x0319, + 0x168c: 0x0101, 0x168d: 0x0321, 0x168e: 0x0329, 0x168f: 0x0051, 0x1690: 0x0339, 0x1691: 0x0751, + 0x1692: 0x00b9, 0x1693: 0x0089, 0x1694: 0x0341, 0x1695: 0x0349, 0x1696: 0x0391, 0x1697: 0x00c1, + 0x1698: 0x0109, 0x1699: 0x00c9, 0x169a: 0x04b1, 0x169b: 0x1fe2, 0x169c: 0x21da, 0x169d: 0x1fea, + 0x169e: 0x21e2, 0x169f: 0x810d, 0x16a0: 0x812d, 0x16a1: 0x0961, 0x16a2: 0x814d, 0x16a3: 0x814d, + 0x16a4: 0x816d, 0x16a5: 0x818d, 0x16a6: 0x81ad, 0x16a7: 0x81cd, 0x16a8: 0x81ed, 0x16a9: 0x820d, + 0x16aa: 0x822d, 0x16ab: 0x824d, 0x16ac: 0x826d, 0x16ad: 0x828d, 0x16ae: 0x82ad, 0x16af: 0x82cd, + 0x16b0: 0x82ed, 0x16b1: 0x830d, 0x16b2: 0x832d, 0x16b3: 0x834d, 0x16b4: 0x836d, 0x16b5: 0x838d, + 0x16b6: 0x83ad, 0x16b7: 0x83cd, 0x16b8: 0x83ed, 0x16b9: 0x840d, 0x16ba: 0x842d, 0x16bb: 0x844d, + 0x16bc: 0x81ed, 0x16bd: 0x846d, 0x16be: 0x848d, 0x16bf: 0x824d, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x84ad, 0x16c1: 0x84cd, 0x16c2: 0x84ed, 0x16c3: 0x850d, 0x16c4: 0x852d, 0x16c5: 0x854d, + 0x16c6: 0x856d, 0x16c7: 0x858d, 0x16c8: 0x850d, 0x16c9: 0x85ad, 0x16ca: 0x850d, 0x16cb: 0x85cd, + 0x16cc: 0x85cd, 0x16cd: 0x85ed, 0x16ce: 0x85ed, 0x16cf: 0x860d, 0x16d0: 0x854d, 0x16d1: 0x862d, + 0x16d2: 0x864d, 0x16d3: 0x862d, 0x16d4: 0x866d, 0x16d5: 0x864d, 0x16d6: 0x868d, 0x16d7: 0x868d, + 0x16d8: 0x86ad, 0x16d9: 0x86ad, 0x16da: 0x86cd, 0x16db: 0x86cd, 0x16dc: 0x864d, 0x16dd: 0x814d, + 0x16de: 0x86ed, 0x16df: 0x870d, 0x16e0: 0x0040, 0x16e1: 0x872d, 0x16e2: 0x874d, 0x16e3: 0x876d, + 0x16e4: 0x878d, 0x16e5: 0x876d, 0x16e6: 0x87ad, 0x16e7: 0x87cd, 0x16e8: 0x87ed, 0x16e9: 0x87ed, + 0x16ea: 0x880d, 0x16eb: 0x880d, 0x16ec: 0x882d, 0x16ed: 0x882d, 0x16ee: 0x880d, 0x16ef: 0x880d, + 0x16f0: 0x884d, 0x16f1: 0x886d, 0x16f2: 0x888d, 0x16f3: 0x88ad, 0x16f4: 0x88cd, 0x16f5: 0x88ed, + 0x16f6: 0x88ed, 0x16f7: 0x88ed, 0x16f8: 0x890d, 0x16f9: 0x890d, 0x16fa: 0x890d, 0x16fb: 0x890d, + 0x16fc: 0x87ed, 0x16fd: 0x87ed, 0x16fe: 0x87ed, 0x16ff: 0x0040, + // Block 0x5c, offset 0x1700 + 0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x874d, 0x1703: 0x872d, 0x1704: 0x892d, 0x1705: 0x872d, + 0x1706: 0x874d, 0x1707: 0x872d, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x894d, 0x170b: 0x874d, + 0x170c: 0x896d, 0x170d: 0x892d, 0x170e: 0x896d, 0x170f: 0x874d, 0x1710: 0x0040, 0x1711: 0x0040, + 0x1712: 0x898d, 0x1713: 0x89ad, 0x1714: 0x88ad, 0x1715: 0x896d, 0x1716: 0x892d, 0x1717: 0x896d, + 0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x89cd, 0x171b: 0x89ed, 0x171c: 0x89cd, 0x171d: 0x0040, + 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x21e9, 0x1721: 0x21f1, 0x1722: 0x21f9, 0x1723: 0x8a0e, + 0x1724: 0x2201, 0x1725: 0x2209, 0x1726: 0x8a2d, 0x1727: 0x0040, 0x1728: 0x8a4d, 0x1729: 0x8a6d, + 0x172a: 0x8a8d, 0x172b: 0x8a6d, 0x172c: 0x8aad, 0x172d: 0x8acd, 0x172e: 0x8aed, 0x172f: 0x0040, + 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040, + 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0340, 0x173a: 0x0340, 0x173b: 0x0340, + 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, + // Block 0x5d, offset 0x1740 + 0x1740: 0x0008, 0x1741: 0x0008, 0x1742: 0x0008, 0x1743: 0x0008, 0x1744: 0x0008, 0x1745: 0x0008, + 0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008, + 0x174c: 0x0008, 0x174d: 0x0008, 0x174e: 0x0008, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0008, + 0x1752: 0x0008, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008, + 0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008, + 0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008, + 0x1764: 0x0040, 0x1765: 0x0040, 0x1766: 0x0040, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0040, + 0x176a: 0x0040, 0x176b: 0x0040, 0x176c: 0x0040, 0x176d: 0x0040, 0x176e: 0x0040, 0x176f: 0x0018, + 0x1770: 0x8b3d, 0x1771: 0x8b55, 0x1772: 0x8b6d, 0x1773: 0x8b55, 0x1774: 0x8b85, 0x1775: 0x8b55, + 0x1776: 0x8b6d, 0x1777: 0x8b55, 0x1778: 0x8b3d, 0x1779: 0x8b9d, 0x177a: 0x8bb5, 0x177b: 0x0040, + 0x177c: 0x8bcd, 0x177d: 0x8b9d, 0x177e: 0x8bb5, 0x177f: 0x8b9d, + // Block 0x5e, offset 0x1780 + 0x1780: 0xe13d, 0x1781: 0xe14d, 0x1782: 0xe15d, 0x1783: 0xe14d, 0x1784: 0xe17d, 0x1785: 0xe14d, + 0x1786: 0xe15d, 0x1787: 0xe14d, 0x1788: 0xe13d, 0x1789: 0xe1cd, 0x178a: 0xe1dd, 0x178b: 0x0040, + 0x178c: 0xe1fd, 0x178d: 0xe1cd, 0x178e: 0xe1dd, 0x178f: 0xe1cd, 0x1790: 0xe13d, 0x1791: 0xe14d, + 0x1792: 0xe15d, 0x1793: 0x0040, 0x1794: 0xe17d, 0x1795: 0xe14d, 0x1796: 0x0040, 0x1797: 0x0008, + 0x1798: 0x0008, 0x1799: 0x0008, 0x179a: 0x0008, 0x179b: 0x0008, 0x179c: 0x0008, 0x179d: 0x0008, + 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x0040, 0x17a3: 0x0008, + 0x17a4: 0x0008, 0x17a5: 0x0008, 0x17a6: 0x0008, 0x17a7: 0x0008, 0x17a8: 0x0008, 0x17a9: 0x0008, + 0x17aa: 0x0008, 0x17ab: 0x0008, 0x17ac: 0x0008, 0x17ad: 0x0008, 0x17ae: 0x0008, 0x17af: 0x0008, + 0x17b0: 0x0008, 0x17b1: 0x0008, 0x17b2: 0x0040, 0x17b3: 0x0008, 0x17b4: 0x0008, 0x17b5: 0x0008, + 0x17b6: 0x0008, 0x17b7: 0x0008, 0x17b8: 0x0008, 0x17b9: 0x0008, 0x17ba: 0x0040, 0x17bb: 0x0008, + 0x17bc: 0x0008, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x0008, 0x17c1: 0x2211, 0x17c2: 0x2219, 0x17c3: 0x02e1, 0x17c4: 0x2221, 0x17c5: 0x2229, + 0x17c6: 0x0040, 0x17c7: 0x2231, 0x17c8: 0x2239, 0x17c9: 0x2241, 0x17ca: 0x2249, 0x17cb: 0x2251, + 0x17cc: 0x2259, 0x17cd: 0x2261, 0x17ce: 0x2269, 0x17cf: 0x2271, 0x17d0: 0x2279, 0x17d1: 0x2281, + 0x17d2: 0x2289, 0x17d3: 0x2291, 0x17d4: 0x2299, 0x17d5: 0x0741, 0x17d6: 0x22a1, 0x17d7: 0x22a9, + 0x17d8: 0x22b1, 0x17d9: 0x22b9, 0x17da: 0x22c1, 0x17db: 0x13d9, 0x17dc: 0x8be5, 0x17dd: 0x22c9, + 0x17de: 0x22d1, 0x17df: 0x8c05, 0x17e0: 0x22d9, 0x17e1: 0x8c25, 0x17e2: 0x22e1, 0x17e3: 0x22e9, + 0x17e4: 0x22f1, 0x17e5: 0x0751, 0x17e6: 0x22f9, 0x17e7: 0x8c45, 0x17e8: 0x0949, 0x17e9: 0x2301, + 0x17ea: 0x2309, 0x17eb: 0x2311, 0x17ec: 0x2319, 0x17ed: 0x2321, 0x17ee: 0x2329, 0x17ef: 0x2331, + 0x17f0: 0x2339, 0x17f1: 0x0040, 0x17f2: 0x2341, 0x17f3: 0x2349, 0x17f4: 0x2351, 0x17f5: 0x2359, + 0x17f6: 0x2361, 0x17f7: 0x2369, 0x17f8: 0x2371, 0x17f9: 0x8c65, 0x17fa: 0x8c85, 0x17fb: 0x0040, + 0x17fc: 0x0040, 0x17fd: 0x0040, 0x17fe: 0x0040, 0x17ff: 0x0040, + // Block 0x60, offset 0x1800 + 0x1800: 0x0a08, 0x1801: 0x0a08, 0x1802: 0x0a08, 0x1803: 0x0a08, 0x1804: 0x0a08, 0x1805: 0x0c08, + 0x1806: 0x0808, 0x1807: 0x0c08, 0x1808: 0x0818, 0x1809: 0x0c08, 0x180a: 0x0c08, 0x180b: 0x0808, + 0x180c: 0x0808, 0x180d: 0x0908, 0x180e: 0x0c08, 0x180f: 0x0c08, 0x1810: 0x0c08, 0x1811: 0x0c08, + 0x1812: 0x0c08, 0x1813: 0x0a08, 0x1814: 0x0a08, 0x1815: 0x0a08, 0x1816: 0x0a08, 0x1817: 0x0908, + 0x1818: 0x0a08, 0x1819: 0x0a08, 0x181a: 0x0a08, 0x181b: 0x0a08, 0x181c: 0x0a08, 0x181d: 0x0c08, + 0x181e: 0x0a08, 0x181f: 0x0a08, 0x1820: 0x0a08, 0x1821: 0x0c08, 0x1822: 0x0808, 0x1823: 0x0808, + 0x1824: 0x0c08, 0x1825: 0x3308, 0x1826: 0x3308, 0x1827: 0x0040, 0x1828: 0x0040, 0x1829: 0x0040, + 0x182a: 0x0040, 0x182b: 0x0a18, 0x182c: 0x0a18, 0x182d: 0x0a18, 0x182e: 0x0a18, 0x182f: 0x0c18, + 0x1830: 0x0818, 0x1831: 0x0818, 0x1832: 0x0818, 0x1833: 0x0818, 0x1834: 0x0818, 0x1835: 0x0818, + 0x1836: 0x0818, 0x1837: 0x0040, 0x1838: 0x0040, 0x1839: 0x0040, 0x183a: 0x0040, 0x183b: 0x0040, + 0x183c: 0x0040, 0x183d: 0x0040, 0x183e: 0x0040, 0x183f: 0x0040, + // Block 0x61, offset 0x1840 + 0x1840: 0x0a08, 0x1841: 0x0c08, 0x1842: 0x0a08, 0x1843: 0x0c08, 0x1844: 0x0c08, 0x1845: 0x0c08, + 0x1846: 0x0a08, 0x1847: 0x0a08, 0x1848: 0x0a08, 0x1849: 0x0c08, 0x184a: 0x0a08, 0x184b: 0x0a08, + 0x184c: 0x0c08, 0x184d: 0x0a08, 0x184e: 0x0c08, 0x184f: 0x0c08, 0x1850: 0x0a08, 0x1851: 0x0c08, + 0x1852: 0x0040, 0x1853: 0x0040, 0x1854: 0x0040, 0x1855: 0x0040, 0x1856: 0x0040, 0x1857: 0x0040, + 0x1858: 0x0040, 0x1859: 0x0818, 0x185a: 0x0818, 0x185b: 0x0818, 0x185c: 0x0818, 0x185d: 0x0040, + 0x185e: 0x0040, 0x185f: 0x0040, 0x1860: 0x0040, 0x1861: 0x0040, 0x1862: 0x0040, 0x1863: 0x0040, + 0x1864: 0x0040, 0x1865: 0x0040, 0x1866: 0x0040, 0x1867: 0x0040, 0x1868: 0x0040, 0x1869: 0x0c18, + 0x186a: 0x0c18, 0x186b: 0x0c18, 0x186c: 0x0c18, 0x186d: 0x0a18, 0x186e: 0x0a18, 0x186f: 0x0818, + 0x1870: 0x0040, 0x1871: 0x0040, 0x1872: 0x0040, 0x1873: 0x0040, 0x1874: 0x0040, 0x1875: 0x0040, + 0x1876: 0x0040, 0x1877: 0x0040, 0x1878: 0x0040, 0x1879: 0x0040, 0x187a: 0x0040, 0x187b: 0x0040, + 0x187c: 0x0040, 0x187d: 0x0040, 0x187e: 0x0040, 0x187f: 0x0040, + // Block 0x62, offset 0x1880 + 0x1880: 0x3308, 0x1881: 0x3308, 0x1882: 0x3008, 0x1883: 0x3008, 0x1884: 0x0040, 0x1885: 0x0008, + 0x1886: 0x0008, 0x1887: 0x0008, 0x1888: 0x0008, 0x1889: 0x0008, 0x188a: 0x0008, 0x188b: 0x0008, + 0x188c: 0x0008, 0x188d: 0x0040, 0x188e: 0x0040, 0x188f: 0x0008, 0x1890: 0x0008, 0x1891: 0x0040, + 0x1892: 0x0040, 0x1893: 0x0008, 0x1894: 0x0008, 0x1895: 0x0008, 0x1896: 0x0008, 0x1897: 0x0008, + 0x1898: 0x0008, 0x1899: 0x0008, 0x189a: 0x0008, 0x189b: 0x0008, 0x189c: 0x0008, 0x189d: 0x0008, + 0x189e: 0x0008, 0x189f: 0x0008, 0x18a0: 0x0008, 0x18a1: 0x0008, 0x18a2: 0x0008, 0x18a3: 0x0008, + 0x18a4: 0x0008, 0x18a5: 0x0008, 0x18a6: 0x0008, 0x18a7: 0x0008, 0x18a8: 0x0008, 0x18a9: 0x0040, + 0x18aa: 0x0008, 0x18ab: 0x0008, 0x18ac: 0x0008, 0x18ad: 0x0008, 0x18ae: 0x0008, 0x18af: 0x0008, + 0x18b0: 0x0008, 0x18b1: 0x0040, 0x18b2: 0x0008, 0x18b3: 0x0008, 0x18b4: 0x0040, 0x18b5: 0x0008, + 0x18b6: 0x0008, 0x18b7: 0x0008, 0x18b8: 0x0008, 0x18b9: 0x0008, 0x18ba: 0x0040, 0x18bb: 0x3308, + 0x18bc: 0x3308, 0x18bd: 0x0008, 0x18be: 0x3008, 0x18bf: 0x3008, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x3308, 0x18c1: 0x3008, 0x18c2: 0x3008, 0x18c3: 0x3008, 0x18c4: 0x3008, 0x18c5: 0x0040, + 0x18c6: 0x0040, 0x18c7: 0x3008, 0x18c8: 0x3008, 0x18c9: 0x0040, 0x18ca: 0x0040, 0x18cb: 0x3008, + 0x18cc: 0x3008, 0x18cd: 0x3808, 0x18ce: 0x0040, 0x18cf: 0x0040, 0x18d0: 0x0008, 0x18d1: 0x0040, + 0x18d2: 0x0040, 0x18d3: 0x0040, 0x18d4: 0x0040, 0x18d5: 0x0040, 0x18d6: 0x0040, 0x18d7: 0x3008, + 0x18d8: 0x0040, 0x18d9: 0x0040, 0x18da: 0x0040, 0x18db: 0x0040, 0x18dc: 0x0040, 0x18dd: 0x0008, + 0x18de: 0x0008, 0x18df: 0x0008, 0x18e0: 0x0008, 0x18e1: 0x0008, 0x18e2: 0x3008, 0x18e3: 0x3008, + 0x18e4: 0x0040, 0x18e5: 0x0040, 0x18e6: 0x3308, 0x18e7: 0x3308, 0x18e8: 0x3308, 0x18e9: 0x3308, + 0x18ea: 0x3308, 0x18eb: 0x3308, 0x18ec: 0x3308, 0x18ed: 0x0040, 0x18ee: 0x0040, 0x18ef: 0x0040, + 0x18f0: 0x3308, 0x18f1: 0x3308, 0x18f2: 0x3308, 0x18f3: 0x3308, 0x18f4: 0x3308, 0x18f5: 0x0040, + 0x18f6: 0x0040, 0x18f7: 0x0040, 0x18f8: 0x0040, 0x18f9: 0x0040, 0x18fa: 0x0040, 0x18fb: 0x0040, + 0x18fc: 0x0040, 0x18fd: 0x0040, 0x18fe: 0x0040, 0x18ff: 0x0040, + // Block 0x64, offset 0x1900 + 0x1900: 0x0008, 0x1901: 0x0008, 0x1902: 0x0008, 0x1903: 0x0008, 0x1904: 0x0008, 0x1905: 0x0008, + 0x1906: 0x0008, 0x1907: 0x0040, 0x1908: 0x0040, 0x1909: 0x0008, 0x190a: 0x0040, 0x190b: 0x0040, + 0x190c: 0x0008, 0x190d: 0x0008, 0x190e: 0x0008, 0x190f: 0x0008, 0x1910: 0x0008, 0x1911: 0x0008, + 0x1912: 0x0008, 0x1913: 0x0008, 0x1914: 0x0040, 0x1915: 0x0008, 0x1916: 0x0008, 0x1917: 0x0040, + 0x1918: 0x0008, 0x1919: 0x0008, 0x191a: 0x0008, 0x191b: 0x0008, 0x191c: 0x0008, 0x191d: 0x0008, + 0x191e: 0x0008, 0x191f: 0x0008, 0x1920: 0x0008, 0x1921: 0x0008, 0x1922: 0x0008, 0x1923: 0x0008, + 0x1924: 0x0008, 0x1925: 0x0008, 0x1926: 0x0008, 0x1927: 0x0008, 0x1928: 0x0008, 0x1929: 0x0008, + 0x192a: 0x0008, 0x192b: 0x0008, 0x192c: 0x0008, 0x192d: 0x0008, 0x192e: 0x0008, 0x192f: 0x0008, + 0x1930: 0x3008, 0x1931: 0x3008, 0x1932: 0x3008, 0x1933: 0x3008, 0x1934: 0x3008, 0x1935: 0x3008, + 0x1936: 0x0040, 0x1937: 0x3008, 0x1938: 0x3008, 0x1939: 0x0040, 0x193a: 0x0040, 0x193b: 0x3308, + 0x193c: 0x3308, 0x193d: 0x3808, 0x193e: 0x3b08, 0x193f: 0x0008, + // Block 0x65, offset 0x1940 + 0x1940: 0x0019, 0x1941: 0x02e9, 0x1942: 0x03d9, 0x1943: 0x02f1, 0x1944: 0x02f9, 0x1945: 0x03f1, + 0x1946: 0x0309, 0x1947: 0x00a9, 0x1948: 0x0311, 0x1949: 0x00b1, 0x194a: 0x0319, 0x194b: 0x0101, + 0x194c: 0x0321, 0x194d: 0x0329, 0x194e: 0x0051, 0x194f: 0x0339, 0x1950: 0x0751, 0x1951: 0x00b9, + 0x1952: 0x0089, 0x1953: 0x0341, 0x1954: 0x0349, 0x1955: 0x0391, 0x1956: 0x00c1, 0x1957: 0x0109, + 0x1958: 0x00c9, 0x1959: 0x04b1, 0x195a: 0x0019, 0x195b: 0x02e9, 0x195c: 0x03d9, 0x195d: 0x02f1, + 0x195e: 0x02f9, 0x195f: 0x03f1, 0x1960: 0x0309, 0x1961: 0x00a9, 0x1962: 0x0311, 0x1963: 0x00b1, + 0x1964: 0x0319, 0x1965: 0x0101, 0x1966: 0x0321, 0x1967: 0x0329, 0x1968: 0x0051, 0x1969: 0x0339, + 0x196a: 0x0751, 0x196b: 0x00b9, 0x196c: 0x0089, 0x196d: 0x0341, 0x196e: 0x0349, 0x196f: 0x0391, + 0x1970: 0x00c1, 0x1971: 0x0109, 0x1972: 0x00c9, 0x1973: 0x04b1, 0x1974: 0x0019, 0x1975: 0x02e9, + 0x1976: 0x03d9, 0x1977: 0x02f1, 0x1978: 0x02f9, 0x1979: 0x03f1, 0x197a: 0x0309, 0x197b: 0x00a9, + 0x197c: 0x0311, 0x197d: 0x00b1, 0x197e: 0x0319, 0x197f: 0x0101, + // Block 0x66, offset 0x1980 + 0x1980: 0x0321, 0x1981: 0x0329, 0x1982: 0x0051, 0x1983: 0x0339, 0x1984: 0x0751, 0x1985: 0x00b9, + 0x1986: 0x0089, 0x1987: 0x0341, 0x1988: 0x0349, 0x1989: 0x0391, 0x198a: 0x00c1, 0x198b: 0x0109, + 0x198c: 0x00c9, 0x198d: 0x04b1, 0x198e: 0x0019, 0x198f: 0x02e9, 0x1990: 0x03d9, 0x1991: 0x02f1, + 0x1992: 0x02f9, 0x1993: 0x03f1, 0x1994: 0x0309, 0x1995: 0x0040, 0x1996: 0x0311, 0x1997: 0x00b1, + 0x1998: 0x0319, 0x1999: 0x0101, 0x199a: 0x0321, 0x199b: 0x0329, 0x199c: 0x0051, 0x199d: 0x0339, + 0x199e: 0x0751, 0x199f: 0x00b9, 0x19a0: 0x0089, 0x19a1: 0x0341, 0x19a2: 0x0349, 0x19a3: 0x0391, + 0x19a4: 0x00c1, 0x19a5: 0x0109, 0x19a6: 0x00c9, 0x19a7: 0x04b1, 0x19a8: 0x0019, 0x19a9: 0x02e9, + 0x19aa: 0x03d9, 0x19ab: 0x02f1, 0x19ac: 0x02f9, 0x19ad: 0x03f1, 0x19ae: 0x0309, 0x19af: 0x00a9, + 0x19b0: 0x0311, 0x19b1: 0x00b1, 0x19b2: 0x0319, 0x19b3: 0x0101, 0x19b4: 0x0321, 0x19b5: 0x0329, + 0x19b6: 0x0051, 0x19b7: 0x0339, 0x19b8: 0x0751, 0x19b9: 0x00b9, 0x19ba: 0x0089, 0x19bb: 0x0341, + 0x19bc: 0x0349, 0x19bd: 0x0391, 0x19be: 0x00c1, 0x19bf: 0x0109, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x00c9, 0x19c1: 0x04b1, 0x19c2: 0x0019, 0x19c3: 0x02e9, 0x19c4: 0x03d9, 0x19c5: 0x02f1, + 0x19c6: 0x02f9, 0x19c7: 0x03f1, 0x19c8: 0x0309, 0x19c9: 0x00a9, 0x19ca: 0x0311, 0x19cb: 0x00b1, + 0x19cc: 0x0319, 0x19cd: 0x0101, 0x19ce: 0x0321, 0x19cf: 0x0329, 0x19d0: 0x0051, 0x19d1: 0x0339, + 0x19d2: 0x0751, 0x19d3: 0x00b9, 0x19d4: 0x0089, 0x19d5: 0x0341, 0x19d6: 0x0349, 0x19d7: 0x0391, + 0x19d8: 0x00c1, 0x19d9: 0x0109, 0x19da: 0x00c9, 0x19db: 0x04b1, 0x19dc: 0x0019, 0x19dd: 0x0040, + 0x19de: 0x03d9, 0x19df: 0x02f1, 0x19e0: 0x0040, 0x19e1: 0x0040, 0x19e2: 0x0309, 0x19e3: 0x0040, + 0x19e4: 0x0040, 0x19e5: 0x00b1, 0x19e6: 0x0319, 0x19e7: 0x0040, 0x19e8: 0x0040, 0x19e9: 0x0329, + 0x19ea: 0x0051, 0x19eb: 0x0339, 0x19ec: 0x0751, 0x19ed: 0x0040, 0x19ee: 0x0089, 0x19ef: 0x0341, + 0x19f0: 0x0349, 0x19f1: 0x0391, 0x19f2: 0x00c1, 0x19f3: 0x0109, 0x19f4: 0x00c9, 0x19f5: 0x04b1, + 0x19f6: 0x0019, 0x19f7: 0x02e9, 0x19f8: 0x03d9, 0x19f9: 0x02f1, 0x19fa: 0x0040, 0x19fb: 0x03f1, + 0x19fc: 0x0040, 0x19fd: 0x00a9, 0x19fe: 0x0311, 0x19ff: 0x00b1, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x0319, 0x1a01: 0x0101, 0x1a02: 0x0321, 0x1a03: 0x0329, 0x1a04: 0x0040, 0x1a05: 0x0339, + 0x1a06: 0x0751, 0x1a07: 0x00b9, 0x1a08: 0x0089, 0x1a09: 0x0341, 0x1a0a: 0x0349, 0x1a0b: 0x0391, + 0x1a0c: 0x00c1, 0x1a0d: 0x0109, 0x1a0e: 0x00c9, 0x1a0f: 0x04b1, 0x1a10: 0x0019, 0x1a11: 0x02e9, + 0x1a12: 0x03d9, 0x1a13: 0x02f1, 0x1a14: 0x02f9, 0x1a15: 0x03f1, 0x1a16: 0x0309, 0x1a17: 0x00a9, + 0x1a18: 0x0311, 0x1a19: 0x00b1, 0x1a1a: 0x0319, 0x1a1b: 0x0101, 0x1a1c: 0x0321, 0x1a1d: 0x0329, + 0x1a1e: 0x0051, 0x1a1f: 0x0339, 0x1a20: 0x0751, 0x1a21: 0x00b9, 0x1a22: 0x0089, 0x1a23: 0x0341, + 0x1a24: 0x0349, 0x1a25: 0x0391, 0x1a26: 0x00c1, 0x1a27: 0x0109, 0x1a28: 0x00c9, 0x1a29: 0x04b1, + 0x1a2a: 0x0019, 0x1a2b: 0x02e9, 0x1a2c: 0x03d9, 0x1a2d: 0x02f1, 0x1a2e: 0x02f9, 0x1a2f: 0x03f1, + 0x1a30: 0x0309, 0x1a31: 0x00a9, 0x1a32: 0x0311, 0x1a33: 0x00b1, 0x1a34: 0x0319, 0x1a35: 0x0101, + 0x1a36: 0x0321, 0x1a37: 0x0329, 0x1a38: 0x0051, 0x1a39: 0x0339, 0x1a3a: 0x0751, 0x1a3b: 0x00b9, + 0x1a3c: 0x0089, 0x1a3d: 0x0341, 0x1a3e: 0x0349, 0x1a3f: 0x0391, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x00c1, 0x1a41: 0x0109, 0x1a42: 0x00c9, 0x1a43: 0x04b1, 0x1a44: 0x0019, 0x1a45: 0x02e9, + 0x1a46: 0x0040, 0x1a47: 0x02f1, 0x1a48: 0x02f9, 0x1a49: 0x03f1, 0x1a4a: 0x0309, 0x1a4b: 0x0040, + 0x1a4c: 0x0040, 0x1a4d: 0x00b1, 0x1a4e: 0x0319, 0x1a4f: 0x0101, 0x1a50: 0x0321, 0x1a51: 0x0329, + 0x1a52: 0x0051, 0x1a53: 0x0339, 0x1a54: 0x0751, 0x1a55: 0x0040, 0x1a56: 0x0089, 0x1a57: 0x0341, + 0x1a58: 0x0349, 0x1a59: 0x0391, 0x1a5a: 0x00c1, 0x1a5b: 0x0109, 0x1a5c: 0x00c9, 0x1a5d: 0x0040, + 0x1a5e: 0x0019, 0x1a5f: 0x02e9, 0x1a60: 0x03d9, 0x1a61: 0x02f1, 0x1a62: 0x02f9, 0x1a63: 0x03f1, + 0x1a64: 0x0309, 0x1a65: 0x00a9, 0x1a66: 0x0311, 0x1a67: 0x00b1, 0x1a68: 0x0319, 0x1a69: 0x0101, + 0x1a6a: 0x0321, 0x1a6b: 0x0329, 0x1a6c: 0x0051, 0x1a6d: 0x0339, 0x1a6e: 0x0751, 0x1a6f: 0x00b9, + 0x1a70: 0x0089, 0x1a71: 0x0341, 0x1a72: 0x0349, 0x1a73: 0x0391, 0x1a74: 0x00c1, 0x1a75: 0x0109, + 0x1a76: 0x00c9, 0x1a77: 0x04b1, 0x1a78: 0x0019, 0x1a79: 0x02e9, 0x1a7a: 0x0040, 0x1a7b: 0x02f1, + 0x1a7c: 0x02f9, 0x1a7d: 0x03f1, 0x1a7e: 0x0309, 0x1a7f: 0x0040, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x0311, 0x1a81: 0x00b1, 0x1a82: 0x0319, 0x1a83: 0x0101, 0x1a84: 0x0321, 0x1a85: 0x0040, + 0x1a86: 0x0051, 0x1a87: 0x0040, 0x1a88: 0x0040, 0x1a89: 0x0040, 0x1a8a: 0x0089, 0x1a8b: 0x0341, + 0x1a8c: 0x0349, 0x1a8d: 0x0391, 0x1a8e: 0x00c1, 0x1a8f: 0x0109, 0x1a90: 0x00c9, 0x1a91: 0x0040, + 0x1a92: 0x0019, 0x1a93: 0x02e9, 0x1a94: 0x03d9, 0x1a95: 0x02f1, 0x1a96: 0x02f9, 0x1a97: 0x03f1, + 0x1a98: 0x0309, 0x1a99: 0x00a9, 0x1a9a: 0x0311, 0x1a9b: 0x00b1, 0x1a9c: 0x0319, 0x1a9d: 0x0101, + 0x1a9e: 0x0321, 0x1a9f: 0x0329, 0x1aa0: 0x0051, 0x1aa1: 0x0339, 0x1aa2: 0x0751, 0x1aa3: 0x00b9, + 0x1aa4: 0x0089, 0x1aa5: 0x0341, 0x1aa6: 0x0349, 0x1aa7: 0x0391, 0x1aa8: 0x00c1, 0x1aa9: 0x0109, + 0x1aaa: 0x00c9, 0x1aab: 0x04b1, 0x1aac: 0x0019, 0x1aad: 0x02e9, 0x1aae: 0x03d9, 0x1aaf: 0x02f1, + 0x1ab0: 0x02f9, 0x1ab1: 0x03f1, 0x1ab2: 0x0309, 0x1ab3: 0x00a9, 0x1ab4: 0x0311, 0x1ab5: 0x00b1, + 0x1ab6: 0x0319, 0x1ab7: 0x0101, 0x1ab8: 0x0321, 0x1ab9: 0x0329, 0x1aba: 0x0051, 0x1abb: 0x0339, + 0x1abc: 0x0751, 0x1abd: 0x00b9, 0x1abe: 0x0089, 0x1abf: 0x0341, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x0349, 0x1ac1: 0x0391, 0x1ac2: 0x00c1, 0x1ac3: 0x0109, 0x1ac4: 0x00c9, 0x1ac5: 0x04b1, + 0x1ac6: 0x0019, 0x1ac7: 0x02e9, 0x1ac8: 0x03d9, 0x1ac9: 0x02f1, 0x1aca: 0x02f9, 0x1acb: 0x03f1, + 0x1acc: 0x0309, 0x1acd: 0x00a9, 0x1ace: 0x0311, 0x1acf: 0x00b1, 0x1ad0: 0x0319, 0x1ad1: 0x0101, + 0x1ad2: 0x0321, 0x1ad3: 0x0329, 0x1ad4: 0x0051, 0x1ad5: 0x0339, 0x1ad6: 0x0751, 0x1ad7: 0x00b9, + 0x1ad8: 0x0089, 0x1ad9: 0x0341, 0x1ada: 0x0349, 0x1adb: 0x0391, 0x1adc: 0x00c1, 0x1add: 0x0109, + 0x1ade: 0x00c9, 0x1adf: 0x04b1, 0x1ae0: 0x0019, 0x1ae1: 0x02e9, 0x1ae2: 0x03d9, 0x1ae3: 0x02f1, + 0x1ae4: 0x02f9, 0x1ae5: 0x03f1, 0x1ae6: 0x0309, 0x1ae7: 0x00a9, 0x1ae8: 0x0311, 0x1ae9: 0x00b1, + 0x1aea: 0x0319, 0x1aeb: 0x0101, 0x1aec: 0x0321, 0x1aed: 0x0329, 0x1aee: 0x0051, 0x1aef: 0x0339, + 0x1af0: 0x0751, 0x1af1: 0x00b9, 0x1af2: 0x0089, 0x1af3: 0x0341, 0x1af4: 0x0349, 0x1af5: 0x0391, + 0x1af6: 0x00c1, 0x1af7: 0x0109, 0x1af8: 0x00c9, 0x1af9: 0x04b1, 0x1afa: 0x0019, 0x1afb: 0x02e9, + 0x1afc: 0x03d9, 0x1afd: 0x02f1, 0x1afe: 0x02f9, 0x1aff: 0x03f1, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x0309, 0x1b01: 0x00a9, 0x1b02: 0x0311, 0x1b03: 0x00b1, 0x1b04: 0x0319, 0x1b05: 0x0101, + 0x1b06: 0x0321, 0x1b07: 0x0329, 0x1b08: 0x0051, 0x1b09: 0x0339, 0x1b0a: 0x0751, 0x1b0b: 0x00b9, + 0x1b0c: 0x0089, 0x1b0d: 0x0341, 0x1b0e: 0x0349, 0x1b0f: 0x0391, 0x1b10: 0x00c1, 0x1b11: 0x0109, + 0x1b12: 0x00c9, 0x1b13: 0x04b1, 0x1b14: 0x0019, 0x1b15: 0x02e9, 0x1b16: 0x03d9, 0x1b17: 0x02f1, + 0x1b18: 0x02f9, 0x1b19: 0x03f1, 0x1b1a: 0x0309, 0x1b1b: 0x00a9, 0x1b1c: 0x0311, 0x1b1d: 0x00b1, + 0x1b1e: 0x0319, 0x1b1f: 0x0101, 0x1b20: 0x0321, 0x1b21: 0x0329, 0x1b22: 0x0051, 0x1b23: 0x0339, + 0x1b24: 0x0751, 0x1b25: 0x00b9, 0x1b26: 0x0089, 0x1b27: 0x0341, 0x1b28: 0x0349, 0x1b29: 0x0391, + 0x1b2a: 0x00c1, 0x1b2b: 0x0109, 0x1b2c: 0x00c9, 0x1b2d: 0x04b1, 0x1b2e: 0x0019, 0x1b2f: 0x02e9, + 0x1b30: 0x03d9, 0x1b31: 0x02f1, 0x1b32: 0x02f9, 0x1b33: 0x03f1, 0x1b34: 0x0309, 0x1b35: 0x00a9, + 0x1b36: 0x0311, 0x1b37: 0x00b1, 0x1b38: 0x0319, 0x1b39: 0x0101, 0x1b3a: 0x0321, 0x1b3b: 0x0329, + 0x1b3c: 0x0051, 0x1b3d: 0x0339, 0x1b3e: 0x0751, 0x1b3f: 0x00b9, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x0089, 0x1b41: 0x0341, 0x1b42: 0x0349, 0x1b43: 0x0391, 0x1b44: 0x00c1, 0x1b45: 0x0109, + 0x1b46: 0x00c9, 0x1b47: 0x04b1, 0x1b48: 0x0019, 0x1b49: 0x02e9, 0x1b4a: 0x03d9, 0x1b4b: 0x02f1, + 0x1b4c: 0x02f9, 0x1b4d: 0x03f1, 0x1b4e: 0x0309, 0x1b4f: 0x00a9, 0x1b50: 0x0311, 0x1b51: 0x00b1, + 0x1b52: 0x0319, 0x1b53: 0x0101, 0x1b54: 0x0321, 0x1b55: 0x0329, 0x1b56: 0x0051, 0x1b57: 0x0339, + 0x1b58: 0x0751, 0x1b59: 0x00b9, 0x1b5a: 0x0089, 0x1b5b: 0x0341, 0x1b5c: 0x0349, 0x1b5d: 0x0391, + 0x1b5e: 0x00c1, 0x1b5f: 0x0109, 0x1b60: 0x00c9, 0x1b61: 0x04b1, 0x1b62: 0x0019, 0x1b63: 0x02e9, + 0x1b64: 0x03d9, 0x1b65: 0x02f1, 0x1b66: 0x02f9, 0x1b67: 0x03f1, 0x1b68: 0x0309, 0x1b69: 0x00a9, + 0x1b6a: 0x0311, 0x1b6b: 0x00b1, 0x1b6c: 0x0319, 0x1b6d: 0x0101, 0x1b6e: 0x0321, 0x1b6f: 0x0329, + 0x1b70: 0x0051, 0x1b71: 0x0339, 0x1b72: 0x0751, 0x1b73: 0x00b9, 0x1b74: 0x0089, 0x1b75: 0x0341, + 0x1b76: 0x0349, 0x1b77: 0x0391, 0x1b78: 0x00c1, 0x1b79: 0x0109, 0x1b7a: 0x00c9, 0x1b7b: 0x04b1, + 0x1b7c: 0x0019, 0x1b7d: 0x02e9, 0x1b7e: 0x03d9, 0x1b7f: 0x02f1, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x02f9, 0x1b81: 0x03f1, 0x1b82: 0x0309, 0x1b83: 0x00a9, 0x1b84: 0x0311, 0x1b85: 0x00b1, + 0x1b86: 0x0319, 0x1b87: 0x0101, 0x1b88: 0x0321, 0x1b89: 0x0329, 0x1b8a: 0x0051, 0x1b8b: 0x0339, + 0x1b8c: 0x0751, 0x1b8d: 0x00b9, 0x1b8e: 0x0089, 0x1b8f: 0x0341, 0x1b90: 0x0349, 0x1b91: 0x0391, + 0x1b92: 0x00c1, 0x1b93: 0x0109, 0x1b94: 0x00c9, 0x1b95: 0x04b1, 0x1b96: 0x0019, 0x1b97: 0x02e9, + 0x1b98: 0x03d9, 0x1b99: 0x02f1, 0x1b9a: 0x02f9, 0x1b9b: 0x03f1, 0x1b9c: 0x0309, 0x1b9d: 0x00a9, + 0x1b9e: 0x0311, 0x1b9f: 0x00b1, 0x1ba0: 0x0319, 0x1ba1: 0x0101, 0x1ba2: 0x0321, 0x1ba3: 0x0329, + 0x1ba4: 0x0051, 0x1ba5: 0x0339, 0x1ba6: 0x0751, 0x1ba7: 0x00b9, 0x1ba8: 0x0089, 0x1ba9: 0x0341, + 0x1baa: 0x0349, 0x1bab: 0x0391, 0x1bac: 0x00c1, 0x1bad: 0x0109, 0x1bae: 0x00c9, 0x1baf: 0x04b1, + 0x1bb0: 0x0019, 0x1bb1: 0x02e9, 0x1bb2: 0x03d9, 0x1bb3: 0x02f1, 0x1bb4: 0x02f9, 0x1bb5: 0x03f1, + 0x1bb6: 0x0309, 0x1bb7: 0x00a9, 0x1bb8: 0x0311, 0x1bb9: 0x00b1, 0x1bba: 0x0319, 0x1bbb: 0x0101, + 0x1bbc: 0x0321, 0x1bbd: 0x0329, 0x1bbe: 0x0051, 0x1bbf: 0x0339, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x0751, 0x1bc1: 0x00b9, 0x1bc2: 0x0089, 0x1bc3: 0x0341, 0x1bc4: 0x0349, 0x1bc5: 0x0391, + 0x1bc6: 0x00c1, 0x1bc7: 0x0109, 0x1bc8: 0x00c9, 0x1bc9: 0x04b1, 0x1bca: 0x0019, 0x1bcb: 0x02e9, + 0x1bcc: 0x03d9, 0x1bcd: 0x02f1, 0x1bce: 0x02f9, 0x1bcf: 0x03f1, 0x1bd0: 0x0309, 0x1bd1: 0x00a9, + 0x1bd2: 0x0311, 0x1bd3: 0x00b1, 0x1bd4: 0x0319, 0x1bd5: 0x0101, 0x1bd6: 0x0321, 0x1bd7: 0x0329, + 0x1bd8: 0x0051, 0x1bd9: 0x0339, 0x1bda: 0x0751, 0x1bdb: 0x00b9, 0x1bdc: 0x0089, 0x1bdd: 0x0341, + 0x1bde: 0x0349, 0x1bdf: 0x0391, 0x1be0: 0x00c1, 0x1be1: 0x0109, 0x1be2: 0x00c9, 0x1be3: 0x04b1, + 0x1be4: 0x23e1, 0x1be5: 0x23e9, 0x1be6: 0x0040, 0x1be7: 0x0040, 0x1be8: 0x23f1, 0x1be9: 0x0399, + 0x1bea: 0x03a1, 0x1beb: 0x03a9, 0x1bec: 0x23f9, 0x1bed: 0x2401, 0x1bee: 0x2409, 0x1bef: 0x04d1, + 0x1bf0: 0x05f9, 0x1bf1: 0x2411, 0x1bf2: 0x2419, 0x1bf3: 0x2421, 0x1bf4: 0x2429, 0x1bf5: 0x2431, + 0x1bf6: 0x2439, 0x1bf7: 0x0799, 0x1bf8: 0x03c1, 0x1bf9: 0x04d1, 0x1bfa: 0x2441, 0x1bfb: 0x2449, + 0x1bfc: 0x2451, 0x1bfd: 0x03b1, 0x1bfe: 0x03b9, 0x1bff: 0x2459, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x0769, 0x1c01: 0x2461, 0x1c02: 0x23f1, 0x1c03: 0x0399, 0x1c04: 0x03a1, 0x1c05: 0x03a9, + 0x1c06: 0x23f9, 0x1c07: 0x2401, 0x1c08: 0x2409, 0x1c09: 0x04d1, 0x1c0a: 0x05f9, 0x1c0b: 0x2411, + 0x1c0c: 0x2419, 0x1c0d: 0x2421, 0x1c0e: 0x2429, 0x1c0f: 0x2431, 0x1c10: 0x2439, 0x1c11: 0x0799, + 0x1c12: 0x03c1, 0x1c13: 0x2441, 0x1c14: 0x2441, 0x1c15: 0x2449, 0x1c16: 0x2451, 0x1c17: 0x03b1, + 0x1c18: 0x03b9, 0x1c19: 0x2459, 0x1c1a: 0x0769, 0x1c1b: 0x2469, 0x1c1c: 0x23f9, 0x1c1d: 0x04d1, + 0x1c1e: 0x2411, 0x1c1f: 0x03b1, 0x1c20: 0x03c1, 0x1c21: 0x0799, 0x1c22: 0x23f1, 0x1c23: 0x0399, + 0x1c24: 0x03a1, 0x1c25: 0x03a9, 0x1c26: 0x23f9, 0x1c27: 0x2401, 0x1c28: 0x2409, 0x1c29: 0x04d1, + 0x1c2a: 0x05f9, 0x1c2b: 0x2411, 0x1c2c: 0x2419, 0x1c2d: 0x2421, 0x1c2e: 0x2429, 0x1c2f: 0x2431, + 0x1c30: 0x2439, 0x1c31: 0x0799, 0x1c32: 0x03c1, 0x1c33: 0x04d1, 0x1c34: 0x2441, 0x1c35: 0x2449, + 0x1c36: 0x2451, 0x1c37: 0x03b1, 0x1c38: 0x03b9, 0x1c39: 0x2459, 0x1c3a: 0x0769, 0x1c3b: 0x2461, + 0x1c3c: 0x23f1, 0x1c3d: 0x0399, 0x1c3e: 0x03a1, 0x1c3f: 0x03a9, + // Block 0x71, offset 0x1c40 + 0x1c40: 0x23f9, 0x1c41: 0x2401, 0x1c42: 0x2409, 0x1c43: 0x04d1, 0x1c44: 0x05f9, 0x1c45: 0x2411, + 0x1c46: 0x2419, 0x1c47: 0x2421, 0x1c48: 0x2429, 0x1c49: 0x2431, 0x1c4a: 0x2439, 0x1c4b: 0x0799, + 0x1c4c: 0x03c1, 0x1c4d: 0x2441, 0x1c4e: 0x2441, 0x1c4f: 0x2449, 0x1c50: 0x2451, 0x1c51: 0x03b1, + 0x1c52: 0x03b9, 0x1c53: 0x2459, 0x1c54: 0x0769, 0x1c55: 0x2469, 0x1c56: 0x23f9, 0x1c57: 0x04d1, + 0x1c58: 0x2411, 0x1c59: 0x03b1, 0x1c5a: 0x03c1, 0x1c5b: 0x0799, 0x1c5c: 0x23f1, 0x1c5d: 0x0399, + 0x1c5e: 0x03a1, 0x1c5f: 0x03a9, 0x1c60: 0x23f9, 0x1c61: 0x2401, 0x1c62: 0x2409, 0x1c63: 0x04d1, + 0x1c64: 0x05f9, 0x1c65: 0x2411, 0x1c66: 0x2419, 0x1c67: 0x2421, 0x1c68: 0x2429, 0x1c69: 0x2431, + 0x1c6a: 0x2439, 0x1c6b: 0x0799, 0x1c6c: 0x03c1, 0x1c6d: 0x04d1, 0x1c6e: 0x2441, 0x1c6f: 0x2449, + 0x1c70: 0x2451, 0x1c71: 0x03b1, 0x1c72: 0x03b9, 0x1c73: 0x2459, 0x1c74: 0x0769, 0x1c75: 0x2461, + 0x1c76: 0x23f1, 0x1c77: 0x0399, 0x1c78: 0x03a1, 0x1c79: 0x03a9, 0x1c7a: 0x23f9, 0x1c7b: 0x2401, + 0x1c7c: 0x2409, 0x1c7d: 0x04d1, 0x1c7e: 0x05f9, 0x1c7f: 0x2411, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x2419, 0x1c81: 0x2421, 0x1c82: 0x2429, 0x1c83: 0x2431, 0x1c84: 0x2439, 0x1c85: 0x0799, + 0x1c86: 0x03c1, 0x1c87: 0x2441, 0x1c88: 0x2441, 0x1c89: 0x2449, 0x1c8a: 0x2451, 0x1c8b: 0x03b1, + 0x1c8c: 0x03b9, 0x1c8d: 0x2459, 0x1c8e: 0x0769, 0x1c8f: 0x2469, 0x1c90: 0x23f9, 0x1c91: 0x04d1, + 0x1c92: 0x2411, 0x1c93: 0x03b1, 0x1c94: 0x03c1, 0x1c95: 0x0799, 0x1c96: 0x23f1, 0x1c97: 0x0399, + 0x1c98: 0x03a1, 0x1c99: 0x03a9, 0x1c9a: 0x23f9, 0x1c9b: 0x2401, 0x1c9c: 0x2409, 0x1c9d: 0x04d1, + 0x1c9e: 0x05f9, 0x1c9f: 0x2411, 0x1ca0: 0x2419, 0x1ca1: 0x2421, 0x1ca2: 0x2429, 0x1ca3: 0x2431, + 0x1ca4: 0x2439, 0x1ca5: 0x0799, 0x1ca6: 0x03c1, 0x1ca7: 0x04d1, 0x1ca8: 0x2441, 0x1ca9: 0x2449, + 0x1caa: 0x2451, 0x1cab: 0x03b1, 0x1cac: 0x03b9, 0x1cad: 0x2459, 0x1cae: 0x0769, 0x1caf: 0x2461, + 0x1cb0: 0x23f1, 0x1cb1: 0x0399, 0x1cb2: 0x03a1, 0x1cb3: 0x03a9, 0x1cb4: 0x23f9, 0x1cb5: 0x2401, + 0x1cb6: 0x2409, 0x1cb7: 0x04d1, 0x1cb8: 0x05f9, 0x1cb9: 0x2411, 0x1cba: 0x2419, 0x1cbb: 0x2421, + 0x1cbc: 0x2429, 0x1cbd: 0x2431, 0x1cbe: 0x2439, 0x1cbf: 0x0799, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x03c1, 0x1cc1: 0x2441, 0x1cc2: 0x2441, 0x1cc3: 0x2449, 0x1cc4: 0x2451, 0x1cc5: 0x03b1, + 0x1cc6: 0x03b9, 0x1cc7: 0x2459, 0x1cc8: 0x0769, 0x1cc9: 0x2469, 0x1cca: 0x23f9, 0x1ccb: 0x04d1, + 0x1ccc: 0x2411, 0x1ccd: 0x03b1, 0x1cce: 0x03c1, 0x1ccf: 0x0799, 0x1cd0: 0x23f1, 0x1cd1: 0x0399, + 0x1cd2: 0x03a1, 0x1cd3: 0x03a9, 0x1cd4: 0x23f9, 0x1cd5: 0x2401, 0x1cd6: 0x2409, 0x1cd7: 0x04d1, + 0x1cd8: 0x05f9, 0x1cd9: 0x2411, 0x1cda: 0x2419, 0x1cdb: 0x2421, 0x1cdc: 0x2429, 0x1cdd: 0x2431, + 0x1cde: 0x2439, 0x1cdf: 0x0799, 0x1ce0: 0x03c1, 0x1ce1: 0x04d1, 0x1ce2: 0x2441, 0x1ce3: 0x2449, + 0x1ce4: 0x2451, 0x1ce5: 0x03b1, 0x1ce6: 0x03b9, 0x1ce7: 0x2459, 0x1ce8: 0x0769, 0x1ce9: 0x2461, + 0x1cea: 0x23f1, 0x1ceb: 0x0399, 0x1cec: 0x03a1, 0x1ced: 0x03a9, 0x1cee: 0x23f9, 0x1cef: 0x2401, + 0x1cf0: 0x2409, 0x1cf1: 0x04d1, 0x1cf2: 0x05f9, 0x1cf3: 0x2411, 0x1cf4: 0x2419, 0x1cf5: 0x2421, + 0x1cf6: 0x2429, 0x1cf7: 0x2431, 0x1cf8: 0x2439, 0x1cf9: 0x0799, 0x1cfa: 0x03c1, 0x1cfb: 0x2441, + 0x1cfc: 0x2441, 0x1cfd: 0x2449, 0x1cfe: 0x2451, 0x1cff: 0x03b1, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x03b9, 0x1d01: 0x2459, 0x1d02: 0x0769, 0x1d03: 0x2469, 0x1d04: 0x23f9, 0x1d05: 0x04d1, + 0x1d06: 0x2411, 0x1d07: 0x03b1, 0x1d08: 0x03c1, 0x1d09: 0x0799, 0x1d0a: 0x2471, 0x1d0b: 0x2471, + 0x1d0c: 0x0040, 0x1d0d: 0x0040, 0x1d0e: 0x06e1, 0x1d0f: 0x0049, 0x1d10: 0x0029, 0x1d11: 0x0031, + 0x1d12: 0x06e9, 0x1d13: 0x06f1, 0x1d14: 0x06f9, 0x1d15: 0x0701, 0x1d16: 0x0709, 0x1d17: 0x0711, + 0x1d18: 0x06e1, 0x1d19: 0x0049, 0x1d1a: 0x0029, 0x1d1b: 0x0031, 0x1d1c: 0x06e9, 0x1d1d: 0x06f1, + 0x1d1e: 0x06f9, 0x1d1f: 0x0701, 0x1d20: 0x0709, 0x1d21: 0x0711, 0x1d22: 0x06e1, 0x1d23: 0x0049, + 0x1d24: 0x0029, 0x1d25: 0x0031, 0x1d26: 0x06e9, 0x1d27: 0x06f1, 0x1d28: 0x06f9, 0x1d29: 0x0701, + 0x1d2a: 0x0709, 0x1d2b: 0x0711, 0x1d2c: 0x06e1, 0x1d2d: 0x0049, 0x1d2e: 0x0029, 0x1d2f: 0x0031, + 0x1d30: 0x06e9, 0x1d31: 0x06f1, 0x1d32: 0x06f9, 0x1d33: 0x0701, 0x1d34: 0x0709, 0x1d35: 0x0711, + 0x1d36: 0x06e1, 0x1d37: 0x0049, 0x1d38: 0x0029, 0x1d39: 0x0031, 0x1d3a: 0x06e9, 0x1d3b: 0x06f1, + 0x1d3c: 0x06f9, 0x1d3d: 0x0701, 0x1d3e: 0x0709, 0x1d3f: 0x0711, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x3308, 0x1d41: 0x3308, 0x1d42: 0x3308, 0x1d43: 0x3308, 0x1d44: 0x3308, 0x1d45: 0x3308, + 0x1d46: 0x3308, 0x1d47: 0x0040, 0x1d48: 0x3308, 0x1d49: 0x3308, 0x1d4a: 0x3308, 0x1d4b: 0x3308, + 0x1d4c: 0x3308, 0x1d4d: 0x3308, 0x1d4e: 0x3308, 0x1d4f: 0x3308, 0x1d50: 0x3308, 0x1d51: 0x3308, + 0x1d52: 0x3308, 0x1d53: 0x3308, 0x1d54: 0x3308, 0x1d55: 0x3308, 0x1d56: 0x3308, 0x1d57: 0x3308, + 0x1d58: 0x3308, 0x1d59: 0x0040, 0x1d5a: 0x0040, 0x1d5b: 0x3308, 0x1d5c: 0x3308, 0x1d5d: 0x3308, + 0x1d5e: 0x3308, 0x1d5f: 0x3308, 0x1d60: 0x3308, 0x1d61: 0x3308, 0x1d62: 0x0040, 0x1d63: 0x3308, + 0x1d64: 0x3308, 0x1d65: 0x0040, 0x1d66: 0x3308, 0x1d67: 0x3308, 0x1d68: 0x3308, 0x1d69: 0x3308, + 0x1d6a: 0x3308, 0x1d6b: 0x0040, 0x1d6c: 0x0040, 0x1d6d: 0x0040, 0x1d6e: 0x0040, 0x1d6f: 0x0040, + 0x1d70: 0x2479, 0x1d71: 0x2481, 0x1d72: 0x02a9, 0x1d73: 0x2489, 0x1d74: 0x02b1, 0x1d75: 0x2491, + 0x1d76: 0x2499, 0x1d77: 0x24a1, 0x1d78: 0x24a9, 0x1d79: 0x24b1, 0x1d7a: 0x24b9, 0x1d7b: 0x24c1, + 0x1d7c: 0x02b9, 0x1d7d: 0x24c9, 0x1d7e: 0x24d1, 0x1d7f: 0x02c1, + // Block 0x76, offset 0x1d80 + 0x1d80: 0x02c9, 0x1d81: 0x24d9, 0x1d82: 0x24e1, 0x1d83: 0x24e9, 0x1d84: 0x24f1, 0x1d85: 0x24f9, + 0x1d86: 0x2501, 0x1d87: 0x2509, 0x1d88: 0x2511, 0x1d89: 0x2519, 0x1d8a: 0x2521, 0x1d8b: 0x2529, + 0x1d8c: 0x2531, 0x1d8d: 0x2539, 0x1d8e: 0x2541, 0x1d8f: 0x2549, 0x1d90: 0x2551, 0x1d91: 0x2479, + 0x1d92: 0x2481, 0x1d93: 0x02a9, 0x1d94: 0x2489, 0x1d95: 0x02b1, 0x1d96: 0x2491, 0x1d97: 0x2499, + 0x1d98: 0x24a1, 0x1d99: 0x24a9, 0x1d9a: 0x24b1, 0x1d9b: 0x24b9, 0x1d9c: 0x02b9, 0x1d9d: 0x24c9, + 0x1d9e: 0x02c1, 0x1d9f: 0x24d9, 0x1da0: 0x24e1, 0x1da1: 0x24e9, 0x1da2: 0x24f1, 0x1da3: 0x24f9, + 0x1da4: 0x2501, 0x1da5: 0x02d1, 0x1da6: 0x2509, 0x1da7: 0x2559, 0x1da8: 0x2531, 0x1da9: 0x2561, + 0x1daa: 0x2569, 0x1dab: 0x2571, 0x1dac: 0x2579, 0x1dad: 0x2581, 0x1dae: 0x0040, 0x1daf: 0x0040, + 0x1db0: 0x0040, 0x1db1: 0x0040, 0x1db2: 0x0040, 0x1db3: 0x0040, 0x1db4: 0x0040, 0x1db5: 0x0040, + 0x1db6: 0x0040, 0x1db7: 0x0040, 0x1db8: 0x0040, 0x1db9: 0x0040, 0x1dba: 0x0040, 0x1dbb: 0x0040, + 0x1dbc: 0x0040, 0x1dbd: 0x0040, 0x1dbe: 0x0040, 0x1dbf: 0x0040, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xe115, 0x1dc1: 0xe115, 0x1dc2: 0xe135, 0x1dc3: 0xe135, 0x1dc4: 0xe115, 0x1dc5: 0xe115, + 0x1dc6: 0xe175, 0x1dc7: 0xe175, 0x1dc8: 0xe115, 0x1dc9: 0xe115, 0x1dca: 0xe135, 0x1dcb: 0xe135, + 0x1dcc: 0xe115, 0x1dcd: 0xe115, 0x1dce: 0xe1f5, 0x1dcf: 0xe1f5, 0x1dd0: 0xe115, 0x1dd1: 0xe115, + 0x1dd2: 0xe135, 0x1dd3: 0xe135, 0x1dd4: 0xe115, 0x1dd5: 0xe115, 0x1dd6: 0xe175, 0x1dd7: 0xe175, + 0x1dd8: 0xe115, 0x1dd9: 0xe115, 0x1dda: 0xe135, 0x1ddb: 0xe135, 0x1ddc: 0xe115, 0x1ddd: 0xe115, + 0x1dde: 0x8ca5, 0x1ddf: 0x8ca5, 0x1de0: 0x04b5, 0x1de1: 0x04b5, 0x1de2: 0x0a08, 0x1de3: 0x0a08, + 0x1de4: 0x0a08, 0x1de5: 0x0a08, 0x1de6: 0x0a08, 0x1de7: 0x0a08, 0x1de8: 0x0a08, 0x1de9: 0x0a08, + 0x1dea: 0x0a08, 0x1deb: 0x0a08, 0x1dec: 0x0a08, 0x1ded: 0x0a08, 0x1dee: 0x0a08, 0x1def: 0x0a08, + 0x1df0: 0x0a08, 0x1df1: 0x0a08, 0x1df2: 0x0a08, 0x1df3: 0x0a08, 0x1df4: 0x0a08, 0x1df5: 0x0a08, + 0x1df6: 0x0a08, 0x1df7: 0x0a08, 0x1df8: 0x0a08, 0x1df9: 0x0a08, 0x1dfa: 0x0a08, 0x1dfb: 0x0a08, + 0x1dfc: 0x0a08, 0x1dfd: 0x0a08, 0x1dfe: 0x0a08, 0x1dff: 0x0a08, + // Block 0x78, offset 0x1e00 + 0x1e00: 0x20b1, 0x1e01: 0x20b9, 0x1e02: 0x20d9, 0x1e03: 0x20f1, 0x1e04: 0x0040, 0x1e05: 0x2189, + 0x1e06: 0x2109, 0x1e07: 0x20e1, 0x1e08: 0x2131, 0x1e09: 0x2191, 0x1e0a: 0x2161, 0x1e0b: 0x2169, + 0x1e0c: 0x2171, 0x1e0d: 0x2179, 0x1e0e: 0x2111, 0x1e0f: 0x2141, 0x1e10: 0x2151, 0x1e11: 0x2121, + 0x1e12: 0x2159, 0x1e13: 0x2101, 0x1e14: 0x2119, 0x1e15: 0x20c9, 0x1e16: 0x20d1, 0x1e17: 0x20e9, + 0x1e18: 0x20f9, 0x1e19: 0x2129, 0x1e1a: 0x2139, 0x1e1b: 0x2149, 0x1e1c: 0x2589, 0x1e1d: 0x1689, + 0x1e1e: 0x2591, 0x1e1f: 0x2599, 0x1e20: 0x0040, 0x1e21: 0x20b9, 0x1e22: 0x20d9, 0x1e23: 0x0040, + 0x1e24: 0x2181, 0x1e25: 0x0040, 0x1e26: 0x0040, 0x1e27: 0x20e1, 0x1e28: 0x0040, 0x1e29: 0x2191, + 0x1e2a: 0x2161, 0x1e2b: 0x2169, 0x1e2c: 0x2171, 0x1e2d: 0x2179, 0x1e2e: 0x2111, 0x1e2f: 0x2141, + 0x1e30: 0x2151, 0x1e31: 0x2121, 0x1e32: 0x2159, 0x1e33: 0x0040, 0x1e34: 0x2119, 0x1e35: 0x20c9, + 0x1e36: 0x20d1, 0x1e37: 0x20e9, 0x1e38: 0x0040, 0x1e39: 0x2129, 0x1e3a: 0x0040, 0x1e3b: 0x2149, + 0x1e3c: 0x0040, 0x1e3d: 0x0040, 0x1e3e: 0x0040, 0x1e3f: 0x0040, + // Block 0x79, offset 0x1e40 + 0x1e40: 0x0040, 0x1e41: 0x0040, 0x1e42: 0x20d9, 0x1e43: 0x0040, 0x1e44: 0x0040, 0x1e45: 0x0040, + 0x1e46: 0x0040, 0x1e47: 0x20e1, 0x1e48: 0x0040, 0x1e49: 0x2191, 0x1e4a: 0x0040, 0x1e4b: 0x2169, + 0x1e4c: 0x0040, 0x1e4d: 0x2179, 0x1e4e: 0x2111, 0x1e4f: 0x2141, 0x1e50: 0x0040, 0x1e51: 0x2121, + 0x1e52: 0x2159, 0x1e53: 0x0040, 0x1e54: 0x2119, 0x1e55: 0x0040, 0x1e56: 0x0040, 0x1e57: 0x20e9, + 0x1e58: 0x0040, 0x1e59: 0x2129, 0x1e5a: 0x0040, 0x1e5b: 0x2149, 0x1e5c: 0x0040, 0x1e5d: 0x1689, + 0x1e5e: 0x0040, 0x1e5f: 0x2599, 0x1e60: 0x0040, 0x1e61: 0x20b9, 0x1e62: 0x20d9, 0x1e63: 0x0040, + 0x1e64: 0x2181, 0x1e65: 0x0040, 0x1e66: 0x0040, 0x1e67: 0x20e1, 0x1e68: 0x2131, 0x1e69: 0x2191, + 0x1e6a: 0x2161, 0x1e6b: 0x0040, 0x1e6c: 0x2171, 0x1e6d: 0x2179, 0x1e6e: 0x2111, 0x1e6f: 0x2141, + 0x1e70: 0x2151, 0x1e71: 0x2121, 0x1e72: 0x2159, 0x1e73: 0x0040, 0x1e74: 0x2119, 0x1e75: 0x20c9, + 0x1e76: 0x20d1, 0x1e77: 0x20e9, 0x1e78: 0x0040, 0x1e79: 0x2129, 0x1e7a: 0x2139, 0x1e7b: 0x2149, + 0x1e7c: 0x2589, 0x1e7d: 0x0040, 0x1e7e: 0x2591, 0x1e7f: 0x0040, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0x20b1, 0x1e81: 0x20b9, 0x1e82: 0x20d9, 0x1e83: 0x20f1, 0x1e84: 0x2181, 0x1e85: 0x2189, + 0x1e86: 0x2109, 0x1e87: 0x20e1, 0x1e88: 0x2131, 0x1e89: 0x2191, 0x1e8a: 0x0040, 0x1e8b: 0x2169, + 0x1e8c: 0x2171, 0x1e8d: 0x2179, 0x1e8e: 0x2111, 0x1e8f: 0x2141, 0x1e90: 0x2151, 0x1e91: 0x2121, + 0x1e92: 0x2159, 0x1e93: 0x2101, 0x1e94: 0x2119, 0x1e95: 0x20c9, 0x1e96: 0x20d1, 0x1e97: 0x20e9, + 0x1e98: 0x20f9, 0x1e99: 0x2129, 0x1e9a: 0x2139, 0x1e9b: 0x2149, 0x1e9c: 0x0040, 0x1e9d: 0x0040, + 0x1e9e: 0x0040, 0x1e9f: 0x0040, 0x1ea0: 0x0040, 0x1ea1: 0x20b9, 0x1ea2: 0x20d9, 0x1ea3: 0x20f1, + 0x1ea4: 0x0040, 0x1ea5: 0x2189, 0x1ea6: 0x2109, 0x1ea7: 0x20e1, 0x1ea8: 0x2131, 0x1ea9: 0x2191, + 0x1eaa: 0x0040, 0x1eab: 0x2169, 0x1eac: 0x2171, 0x1ead: 0x2179, 0x1eae: 0x2111, 0x1eaf: 0x2141, + 0x1eb0: 0x2151, 0x1eb1: 0x2121, 0x1eb2: 0x2159, 0x1eb3: 0x2101, 0x1eb4: 0x2119, 0x1eb5: 0x20c9, + 0x1eb6: 0x20d1, 0x1eb7: 0x20e9, 0x1eb8: 0x20f9, 0x1eb9: 0x2129, 0x1eba: 0x2139, 0x1ebb: 0x2149, + 0x1ebc: 0x0040, 0x1ebd: 0x0040, 0x1ebe: 0x0040, 0x1ebf: 0x0040, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0x0040, 0x1ec1: 0x25a2, 0x1ec2: 0x25aa, 0x1ec3: 0x25b2, 0x1ec4: 0x25ba, 0x1ec5: 0x25c2, + 0x1ec6: 0x25ca, 0x1ec7: 0x25d2, 0x1ec8: 0x25da, 0x1ec9: 0x25e2, 0x1eca: 0x25ea, 0x1ecb: 0x0018, + 0x1ecc: 0x0018, 0x1ecd: 0x0018, 0x1ece: 0x0018, 0x1ecf: 0x0018, 0x1ed0: 0x25f2, 0x1ed1: 0x25fa, + 0x1ed2: 0x2602, 0x1ed3: 0x260a, 0x1ed4: 0x2612, 0x1ed5: 0x261a, 0x1ed6: 0x2622, 0x1ed7: 0x262a, + 0x1ed8: 0x2632, 0x1ed9: 0x263a, 0x1eda: 0x2642, 0x1edb: 0x264a, 0x1edc: 0x2652, 0x1edd: 0x265a, + 0x1ede: 0x2662, 0x1edf: 0x266a, 0x1ee0: 0x2672, 0x1ee1: 0x267a, 0x1ee2: 0x2682, 0x1ee3: 0x268a, + 0x1ee4: 0x2692, 0x1ee5: 0x269a, 0x1ee6: 0x26a2, 0x1ee7: 0x26aa, 0x1ee8: 0x26b2, 0x1ee9: 0x26ba, + 0x1eea: 0x26c1, 0x1eeb: 0x03d9, 0x1eec: 0x00b9, 0x1eed: 0x1239, 0x1eee: 0x26c9, 0x1eef: 0x0018, + 0x1ef0: 0x0019, 0x1ef1: 0x02e9, 0x1ef2: 0x03d9, 0x1ef3: 0x02f1, 0x1ef4: 0x02f9, 0x1ef5: 0x03f1, + 0x1ef6: 0x0309, 0x1ef7: 0x00a9, 0x1ef8: 0x0311, 0x1ef9: 0x00b1, 0x1efa: 0x0319, 0x1efb: 0x0101, + 0x1efc: 0x0321, 0x1efd: 0x0329, 0x1efe: 0x0051, 0x1eff: 0x0339, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0x0751, 0x1f01: 0x00b9, 0x1f02: 0x0089, 0x1f03: 0x0341, 0x1f04: 0x0349, 0x1f05: 0x0391, + 0x1f06: 0x00c1, 0x1f07: 0x0109, 0x1f08: 0x00c9, 0x1f09: 0x04b1, 0x1f0a: 0x26d1, 0x1f0b: 0x11f9, + 0x1f0c: 0x26d9, 0x1f0d: 0x04d9, 0x1f0e: 0x26e1, 0x1f0f: 0x26e9, 0x1f10: 0x0018, 0x1f11: 0x0018, + 0x1f12: 0x0018, 0x1f13: 0x0018, 0x1f14: 0x0018, 0x1f15: 0x0018, 0x1f16: 0x0018, 0x1f17: 0x0018, + 0x1f18: 0x0018, 0x1f19: 0x0018, 0x1f1a: 0x0018, 0x1f1b: 0x0018, 0x1f1c: 0x0018, 0x1f1d: 0x0018, + 0x1f1e: 0x0018, 0x1f1f: 0x0018, 0x1f20: 0x0018, 0x1f21: 0x0018, 0x1f22: 0x0018, 0x1f23: 0x0018, + 0x1f24: 0x0018, 0x1f25: 0x0018, 0x1f26: 0x0018, 0x1f27: 0x0018, 0x1f28: 0x0018, 0x1f29: 0x0018, + 0x1f2a: 0x26f1, 0x1f2b: 0x26f9, 0x1f2c: 0x2701, 0x1f2d: 0x0018, 0x1f2e: 0x0018, 0x1f2f: 0x0018, + 0x1f30: 0x0018, 0x1f31: 0x0018, 0x1f32: 0x0018, 0x1f33: 0x0018, 0x1f34: 0x0018, 0x1f35: 0x0018, + 0x1f36: 0x0018, 0x1f37: 0x0018, 0x1f38: 0x0018, 0x1f39: 0x0018, 0x1f3a: 0x0018, 0x1f3b: 0x0018, + 0x1f3c: 0x0018, 0x1f3d: 0x0018, 0x1f3e: 0x0018, 0x1f3f: 0x0018, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0x2711, 0x1f41: 0x2719, 0x1f42: 0x2721, 0x1f43: 0x0040, 0x1f44: 0x0040, 0x1f45: 0x0040, + 0x1f46: 0x0040, 0x1f47: 0x0040, 0x1f48: 0x0040, 0x1f49: 0x0040, 0x1f4a: 0x0040, 0x1f4b: 0x0040, + 0x1f4c: 0x0040, 0x1f4d: 0x0040, 0x1f4e: 0x0040, 0x1f4f: 0x0040, 0x1f50: 0x2729, 0x1f51: 0x2731, + 0x1f52: 0x2739, 0x1f53: 0x2741, 0x1f54: 0x2749, 0x1f55: 0x2751, 0x1f56: 0x2759, 0x1f57: 0x2761, + 0x1f58: 0x2769, 0x1f59: 0x2771, 0x1f5a: 0x2779, 0x1f5b: 0x2781, 0x1f5c: 0x2789, 0x1f5d: 0x2791, + 0x1f5e: 0x2799, 0x1f5f: 0x27a1, 0x1f60: 0x27a9, 0x1f61: 0x27b1, 0x1f62: 0x27b9, 0x1f63: 0x27c1, + 0x1f64: 0x27c9, 0x1f65: 0x27d1, 0x1f66: 0x27d9, 0x1f67: 0x27e1, 0x1f68: 0x27e9, 0x1f69: 0x27f1, + 0x1f6a: 0x27f9, 0x1f6b: 0x2801, 0x1f6c: 0x2809, 0x1f6d: 0x2811, 0x1f6e: 0x2819, 0x1f6f: 0x2821, + 0x1f70: 0x2829, 0x1f71: 0x2831, 0x1f72: 0x2839, 0x1f73: 0x2841, 0x1f74: 0x2849, 0x1f75: 0x2851, + 0x1f76: 0x2859, 0x1f77: 0x2861, 0x1f78: 0x2869, 0x1f79: 0x2871, 0x1f7a: 0x2879, 0x1f7b: 0x2881, + 0x1f7c: 0x0040, 0x1f7d: 0x0040, 0x1f7e: 0x0040, 0x1f7f: 0x0040, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0x28e1, 0x1f81: 0x28e9, 0x1f82: 0x28f1, 0x1f83: 0x8cbd, 0x1f84: 0x28f9, 0x1f85: 0x2901, + 0x1f86: 0x2909, 0x1f87: 0x2911, 0x1f88: 0x2919, 0x1f89: 0x2921, 0x1f8a: 0x2929, 0x1f8b: 0x2931, + 0x1f8c: 0x2939, 0x1f8d: 0x8cdd, 0x1f8e: 0x2941, 0x1f8f: 0x2949, 0x1f90: 0x2951, 0x1f91: 0x2959, + 0x1f92: 0x8cfd, 0x1f93: 0x2961, 0x1f94: 0x2969, 0x1f95: 0x2799, 0x1f96: 0x8d1d, 0x1f97: 0x2971, + 0x1f98: 0x2979, 0x1f99: 0x2981, 0x1f9a: 0x2989, 0x1f9b: 0x2991, 0x1f9c: 0x8d3d, 0x1f9d: 0x2999, + 0x1f9e: 0x29a1, 0x1f9f: 0x29a9, 0x1fa0: 0x29b1, 0x1fa1: 0x29b9, 0x1fa2: 0x2871, 0x1fa3: 0x29c1, + 0x1fa4: 0x29c9, 0x1fa5: 0x29d1, 0x1fa6: 0x29d9, 0x1fa7: 0x29e1, 0x1fa8: 0x29e9, 0x1fa9: 0x29f1, + 0x1faa: 0x29f9, 0x1fab: 0x2a01, 0x1fac: 0x2a09, 0x1fad: 0x2a11, 0x1fae: 0x2a19, 0x1faf: 0x2a21, + 0x1fb0: 0x2a29, 0x1fb1: 0x2a31, 0x1fb2: 0x2a31, 0x1fb3: 0x2a31, 0x1fb4: 0x8d5d, 0x1fb5: 0x2a39, + 0x1fb6: 0x2a41, 0x1fb7: 0x2a49, 0x1fb8: 0x8d7d, 0x1fb9: 0x2a51, 0x1fba: 0x2a59, 0x1fbb: 0x2a61, + 0x1fbc: 0x2a69, 0x1fbd: 0x2a71, 0x1fbe: 0x2a79, 0x1fbf: 0x2a81, + // Block 0x7f, offset 0x1fc0 + 0x1fc0: 0x2a89, 0x1fc1: 0x2a91, 0x1fc2: 0x2a99, 0x1fc3: 0x2aa1, 0x1fc4: 0x2aa9, 0x1fc5: 0x2ab1, + 0x1fc6: 0x2ab1, 0x1fc7: 0x2ab9, 0x1fc8: 0x2ac1, 0x1fc9: 0x2ac9, 0x1fca: 0x2ad1, 0x1fcb: 0x2ad9, + 0x1fcc: 0x2ae1, 0x1fcd: 0x2ae9, 0x1fce: 0x2af1, 0x1fcf: 0x2af9, 0x1fd0: 0x2b01, 0x1fd1: 0x2b09, + 0x1fd2: 0x2b11, 0x1fd3: 0x2b19, 0x1fd4: 0x2b21, 0x1fd5: 0x2b29, 0x1fd6: 0x2b31, 0x1fd7: 0x2b39, + 0x1fd8: 0x2b41, 0x1fd9: 0x8d9d, 0x1fda: 0x2b49, 0x1fdb: 0x2b51, 0x1fdc: 0x2b59, 0x1fdd: 0x2751, + 0x1fde: 0x2b61, 0x1fdf: 0x2b69, 0x1fe0: 0x8dbd, 0x1fe1: 0x8ddd, 0x1fe2: 0x2b71, 0x1fe3: 0x2b79, + 0x1fe4: 0x2b81, 0x1fe5: 0x2b89, 0x1fe6: 0x2b91, 0x1fe7: 0x2b99, 0x1fe8: 0x2040, 0x1fe9: 0x2ba1, + 0x1fea: 0x2ba9, 0x1feb: 0x2ba9, 0x1fec: 0x8dfd, 0x1fed: 0x2bb1, 0x1fee: 0x2bb9, 0x1fef: 0x2bc1, + 0x1ff0: 0x2bc9, 0x1ff1: 0x8e1d, 0x1ff2: 0x2bd1, 0x1ff3: 0x2bd9, 0x1ff4: 0x2040, 0x1ff5: 0x2be1, + 0x1ff6: 0x2be9, 0x1ff7: 0x2bf1, 0x1ff8: 0x2bf9, 0x1ff9: 0x2c01, 0x1ffa: 0x2c09, 0x1ffb: 0x8e3d, + 0x1ffc: 0x2c11, 0x1ffd: 0x8e5d, 0x1ffe: 0x2c19, 0x1fff: 0x2c21, + // Block 0x80, offset 0x2000 + 0x2000: 0x2c29, 0x2001: 0x2c31, 0x2002: 0x2c39, 0x2003: 0x2c41, 0x2004: 0x2c49, 0x2005: 0x2c51, + 0x2006: 0x2c59, 0x2007: 0x2c61, 0x2008: 0x2c69, 0x2009: 0x8e7d, 0x200a: 0x2c71, 0x200b: 0x2c79, + 0x200c: 0x2c81, 0x200d: 0x2c89, 0x200e: 0x2c91, 0x200f: 0x8e9d, 0x2010: 0x2c99, 0x2011: 0x8ebd, + 0x2012: 0x8edd, 0x2013: 0x2ca1, 0x2014: 0x2ca9, 0x2015: 0x2ca9, 0x2016: 0x2cb1, 0x2017: 0x8efd, + 0x2018: 0x8f1d, 0x2019: 0x2cb9, 0x201a: 0x2cc1, 0x201b: 0x2cc9, 0x201c: 0x2cd1, 0x201d: 0x2cd9, + 0x201e: 0x2ce1, 0x201f: 0x2ce9, 0x2020: 0x2cf1, 0x2021: 0x2cf9, 0x2022: 0x2d01, 0x2023: 0x2d09, + 0x2024: 0x8f3d, 0x2025: 0x2d11, 0x2026: 0x2d19, 0x2027: 0x2d21, 0x2028: 0x2d29, 0x2029: 0x2d21, + 0x202a: 0x2d31, 0x202b: 0x2d39, 0x202c: 0x2d41, 0x202d: 0x2d49, 0x202e: 0x2d51, 0x202f: 0x2d59, + 0x2030: 0x2d61, 0x2031: 0x2d69, 0x2032: 0x2d71, 0x2033: 0x2d79, 0x2034: 0x2d81, 0x2035: 0x2d89, + 0x2036: 0x2d91, 0x2037: 0x2d99, 0x2038: 0x8f5d, 0x2039: 0x2da1, 0x203a: 0x2da9, 0x203b: 0x2db1, + 0x203c: 0x2db9, 0x203d: 0x2dc1, 0x203e: 0x8f7d, 0x203f: 0x2dc9, + // Block 0x81, offset 0x2040 + 0x2040: 0x2dd1, 0x2041: 0x2dd9, 0x2042: 0x2de1, 0x2043: 0x2de9, 0x2044: 0x2df1, 0x2045: 0x2df9, + 0x2046: 0x2e01, 0x2047: 0x2e09, 0x2048: 0x2e11, 0x2049: 0x2e19, 0x204a: 0x8f9d, 0x204b: 0x2e21, + 0x204c: 0x2e29, 0x204d: 0x2e31, 0x204e: 0x2e39, 0x204f: 0x2e41, 0x2050: 0x2e49, 0x2051: 0x2e51, + 0x2052: 0x2e59, 0x2053: 0x2e61, 0x2054: 0x2e69, 0x2055: 0x2e71, 0x2056: 0x2e79, 0x2057: 0x2e81, + 0x2058: 0x2e89, 0x2059: 0x2e91, 0x205a: 0x2e99, 0x205b: 0x2ea1, 0x205c: 0x2ea9, 0x205d: 0x8fbd, + 0x205e: 0x2eb1, 0x205f: 0x2eb9, 0x2060: 0x2ec1, 0x2061: 0x2ec9, 0x2062: 0x2ed1, 0x2063: 0x8fdd, + 0x2064: 0x2ed9, 0x2065: 0x2ee1, 0x2066: 0x2ee9, 0x2067: 0x2ef1, 0x2068: 0x2ef9, 0x2069: 0x2f01, + 0x206a: 0x2f09, 0x206b: 0x2f11, 0x206c: 0x7f0d, 0x206d: 0x2f19, 0x206e: 0x2f21, 0x206f: 0x2f29, + 0x2070: 0x8ffd, 0x2071: 0x2f31, 0x2072: 0x2f39, 0x2073: 0x2f41, 0x2074: 0x2f49, 0x2075: 0x2f51, + 0x2076: 0x2f59, 0x2077: 0x901d, 0x2078: 0x903d, 0x2079: 0x905d, 0x207a: 0x2f61, 0x207b: 0x907d, + 0x207c: 0x2f69, 0x207d: 0x2f71, 0x207e: 0x2f79, 0x207f: 0x2f81, + // Block 0x82, offset 0x2080 + 0x2080: 0x2f89, 0x2081: 0x2f91, 0x2082: 0x2f99, 0x2083: 0x2fa1, 0x2084: 0x2fa9, 0x2085: 0x2fb1, + 0x2086: 0x909d, 0x2087: 0x2fb9, 0x2088: 0x2fc1, 0x2089: 0x2fc9, 0x208a: 0x2fd1, 0x208b: 0x2fd9, + 0x208c: 0x2fe1, 0x208d: 0x90bd, 0x208e: 0x2fe9, 0x208f: 0x2ff1, 0x2090: 0x90dd, 0x2091: 0x90fd, + 0x2092: 0x2ff9, 0x2093: 0x3001, 0x2094: 0x3009, 0x2095: 0x3011, 0x2096: 0x3019, 0x2097: 0x3021, + 0x2098: 0x3029, 0x2099: 0x3031, 0x209a: 0x3039, 0x209b: 0x911d, 0x209c: 0x3041, 0x209d: 0x913d, + 0x209e: 0x3049, 0x209f: 0x2040, 0x20a0: 0x3051, 0x20a1: 0x3059, 0x20a2: 0x3061, 0x20a3: 0x915d, + 0x20a4: 0x3069, 0x20a5: 0x3071, 0x20a6: 0x917d, 0x20a7: 0x919d, 0x20a8: 0x3079, 0x20a9: 0x3081, + 0x20aa: 0x3089, 0x20ab: 0x3091, 0x20ac: 0x3099, 0x20ad: 0x3099, 0x20ae: 0x30a1, 0x20af: 0x30a9, + 0x20b0: 0x30b1, 0x20b1: 0x30b9, 0x20b2: 0x30c1, 0x20b3: 0x30c9, 0x20b4: 0x30d1, 0x20b5: 0x91bd, + 0x20b6: 0x30d9, 0x20b7: 0x91dd, 0x20b8: 0x30e1, 0x20b9: 0x91fd, 0x20ba: 0x30e9, 0x20bb: 0x921d, + 0x20bc: 0x923d, 0x20bd: 0x925d, 0x20be: 0x30f1, 0x20bf: 0x30f9, + // Block 0x83, offset 0x20c0 + 0x20c0: 0x3101, 0x20c1: 0x927d, 0x20c2: 0x929d, 0x20c3: 0x92bd, 0x20c4: 0x92dd, 0x20c5: 0x3109, + 0x20c6: 0x3111, 0x20c7: 0x3111, 0x20c8: 0x3119, 0x20c9: 0x3121, 0x20ca: 0x3129, 0x20cb: 0x3131, + 0x20cc: 0x3139, 0x20cd: 0x92fd, 0x20ce: 0x3141, 0x20cf: 0x3149, 0x20d0: 0x3151, 0x20d1: 0x3159, + 0x20d2: 0x931d, 0x20d3: 0x3161, 0x20d4: 0x933d, 0x20d5: 0x935d, 0x20d6: 0x3169, 0x20d7: 0x3171, + 0x20d8: 0x3179, 0x20d9: 0x3181, 0x20da: 0x3189, 0x20db: 0x3191, 0x20dc: 0x937d, 0x20dd: 0x939d, + 0x20de: 0x93bd, 0x20df: 0x2040, 0x20e0: 0x3199, 0x20e1: 0x93dd, 0x20e2: 0x31a1, 0x20e3: 0x31a9, + 0x20e4: 0x31b1, 0x20e5: 0x93fd, 0x20e6: 0x31b9, 0x20e7: 0x31c1, 0x20e8: 0x31c9, 0x20e9: 0x31d1, + 0x20ea: 0x31d9, 0x20eb: 0x941d, 0x20ec: 0x31e1, 0x20ed: 0x31e9, 0x20ee: 0x31f1, 0x20ef: 0x31f9, + 0x20f0: 0x3201, 0x20f1: 0x3209, 0x20f2: 0x943d, 0x20f3: 0x945d, 0x20f4: 0x3211, 0x20f5: 0x947d, + 0x20f6: 0x3219, 0x20f7: 0x949d, 0x20f8: 0x3221, 0x20f9: 0x3229, 0x20fa: 0x3231, 0x20fb: 0x94bd, + 0x20fc: 0x94dd, 0x20fd: 0x3239, 0x20fe: 0x94fd, 0x20ff: 0x3241, + // Block 0x84, offset 0x2100 + 0x2100: 0x951d, 0x2101: 0x3249, 0x2102: 0x3251, 0x2103: 0x3259, 0x2104: 0x3261, 0x2105: 0x3269, + 0x2106: 0x3271, 0x2107: 0x953d, 0x2108: 0x955d, 0x2109: 0x957d, 0x210a: 0x959d, 0x210b: 0x2ca1, + 0x210c: 0x3279, 0x210d: 0x3281, 0x210e: 0x3289, 0x210f: 0x3291, 0x2110: 0x3299, 0x2111: 0x32a1, + 0x2112: 0x32a9, 0x2113: 0x32b1, 0x2114: 0x32b9, 0x2115: 0x32c1, 0x2116: 0x32c9, 0x2117: 0x95bd, + 0x2118: 0x32d1, 0x2119: 0x32d9, 0x211a: 0x32e1, 0x211b: 0x32e9, 0x211c: 0x32f1, 0x211d: 0x32f9, + 0x211e: 0x3301, 0x211f: 0x3309, 0x2120: 0x3311, 0x2121: 0x3319, 0x2122: 0x3321, 0x2123: 0x3329, + 0x2124: 0x95dd, 0x2125: 0x95fd, 0x2126: 0x961d, 0x2127: 0x3331, 0x2128: 0x3339, 0x2129: 0x3341, + 0x212a: 0x3349, 0x212b: 0x963d, 0x212c: 0x3351, 0x212d: 0x965d, 0x212e: 0x3359, 0x212f: 0x3361, + 0x2130: 0x967d, 0x2131: 0x969d, 0x2132: 0x3369, 0x2133: 0x3371, 0x2134: 0x3379, 0x2135: 0x3381, + 0x2136: 0x3389, 0x2137: 0x3391, 0x2138: 0x3399, 0x2139: 0x33a1, 0x213a: 0x33a9, 0x213b: 0x33b1, + 0x213c: 0x33b9, 0x213d: 0x33c1, 0x213e: 0x33c9, 0x213f: 0x2040, + // Block 0x85, offset 0x2140 + 0x2140: 0x33d1, 0x2141: 0x33d9, 0x2142: 0x33e1, 0x2143: 0x33e9, 0x2144: 0x33f1, 0x2145: 0x96bd, + 0x2146: 0x33f9, 0x2147: 0x3401, 0x2148: 0x3409, 0x2149: 0x3411, 0x214a: 0x3419, 0x214b: 0x96dd, + 0x214c: 0x96fd, 0x214d: 0x3421, 0x214e: 0x3429, 0x214f: 0x3431, 0x2150: 0x3439, 0x2151: 0x3441, + 0x2152: 0x3449, 0x2153: 0x971d, 0x2154: 0x3451, 0x2155: 0x3459, 0x2156: 0x3461, 0x2157: 0x3469, + 0x2158: 0x973d, 0x2159: 0x975d, 0x215a: 0x3471, 0x215b: 0x3479, 0x215c: 0x3481, 0x215d: 0x977d, + 0x215e: 0x3489, 0x215f: 0x3491, 0x2160: 0x684d, 0x2161: 0x979d, 0x2162: 0x3499, 0x2163: 0x34a1, + 0x2164: 0x34a9, 0x2165: 0x97bd, 0x2166: 0x34b1, 0x2167: 0x34b9, 0x2168: 0x34c1, 0x2169: 0x34c9, + 0x216a: 0x34d1, 0x216b: 0x34d9, 0x216c: 0x34e1, 0x216d: 0x97dd, 0x216e: 0x34e9, 0x216f: 0x34f1, + 0x2170: 0x34f9, 0x2171: 0x97fd, 0x2172: 0x3501, 0x2173: 0x3509, 0x2174: 0x3511, 0x2175: 0x3519, + 0x2176: 0x7b6d, 0x2177: 0x981d, 0x2178: 0x3521, 0x2179: 0x3529, 0x217a: 0x3531, 0x217b: 0x983d, + 0x217c: 0x3539, 0x217d: 0x985d, 0x217e: 0x3541, 0x217f: 0x3541, + // Block 0x86, offset 0x2180 + 0x2180: 0x3549, 0x2181: 0x987d, 0x2182: 0x3551, 0x2183: 0x3559, 0x2184: 0x3561, 0x2185: 0x3569, + 0x2186: 0x3571, 0x2187: 0x3579, 0x2188: 0x3581, 0x2189: 0x989d, 0x218a: 0x3589, 0x218b: 0x3591, + 0x218c: 0x3599, 0x218d: 0x35a1, 0x218e: 0x35a9, 0x218f: 0x35b1, 0x2190: 0x98bd, 0x2191: 0x35b9, + 0x2192: 0x98dd, 0x2193: 0x98fd, 0x2194: 0x991d, 0x2195: 0x35c1, 0x2196: 0x35c9, 0x2197: 0x35d1, + 0x2198: 0x35d9, 0x2199: 0x35e1, 0x219a: 0x35e9, 0x219b: 0x35f1, 0x219c: 0x35f9, 0x219d: 0x993d, + 0x219e: 0x0040, 0x219f: 0x0040, 0x21a0: 0x0040, 0x21a1: 0x0040, 0x21a2: 0x0040, 0x21a3: 0x0040, + 0x21a4: 0x0040, 0x21a5: 0x0040, 0x21a6: 0x0040, 0x21a7: 0x0040, 0x21a8: 0x0040, 0x21a9: 0x0040, + 0x21aa: 0x0040, 0x21ab: 0x0040, 0x21ac: 0x0040, 0x21ad: 0x0040, 0x21ae: 0x0040, 0x21af: 0x0040, + 0x21b0: 0x0040, 0x21b1: 0x0040, 0x21b2: 0x0040, 0x21b3: 0x0040, 0x21b4: 0x0040, 0x21b5: 0x0040, + 0x21b6: 0x0040, 0x21b7: 0x0040, 0x21b8: 0x0040, 0x21b9: 0x0040, 0x21ba: 0x0040, 0x21bb: 0x0040, + 0x21bc: 0x0040, 0x21bd: 0x0040, 0x21be: 0x0040, 0x21bf: 0x0040, +} + +// idnaIndex: 39 blocks, 2496 entries, 4992 bytes +// Block 0 is the zero block. +var idnaIndex = [2496]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x85, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x86, 0xca: 0x87, 0xcb: 0x07, 0xcc: 0x88, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x89, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x8a, 0xd6: 0x8b, 0xd7: 0x8c, + 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x8d, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x8e, 0xde: 0x8f, 0xdf: 0x90, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x07, 0xea: 0x08, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x09, 0xee: 0x0a, 0xef: 0x0b, + 0xf0: 0x20, 0xf1: 0x21, 0xf2: 0x21, 0xf3: 0x23, 0xf4: 0x24, + // Block 0x4, offset 0x100 + 0x120: 0x91, 0x121: 0x13, 0x122: 0x14, 0x123: 0x92, 0x124: 0x93, 0x125: 0x15, 0x126: 0x16, 0x127: 0x17, + 0x128: 0x18, 0x129: 0x19, 0x12a: 0x1a, 0x12b: 0x1b, 0x12c: 0x1c, 0x12d: 0x1d, 0x12e: 0x1e, 0x12f: 0x94, + 0x130: 0x95, 0x131: 0x1f, 0x132: 0x20, 0x133: 0x21, 0x134: 0x96, 0x135: 0x22, 0x136: 0x97, 0x137: 0x98, + 0x138: 0x99, 0x139: 0x9a, 0x13a: 0x23, 0x13b: 0x9b, 0x13c: 0x9c, 0x13d: 0x24, 0x13e: 0x25, 0x13f: 0x9d, + // Block 0x5, offset 0x140 + 0x140: 0x9e, 0x141: 0x9f, 0x142: 0xa0, 0x143: 0xa1, 0x144: 0xa2, 0x145: 0xa3, 0x146: 0xa4, 0x147: 0xa5, + 0x148: 0xa6, 0x149: 0xa7, 0x14a: 0xa8, 0x14b: 0xa9, 0x14c: 0xaa, 0x14d: 0xab, 0x14e: 0xac, 0x14f: 0xad, + 0x150: 0xae, 0x151: 0xa6, 0x152: 0xa6, 0x153: 0xa6, 0x154: 0xa6, 0x155: 0xa6, 0x156: 0xa6, 0x157: 0xa6, + 0x158: 0xa6, 0x159: 0xaf, 0x15a: 0xb0, 0x15b: 0xb1, 0x15c: 0xb2, 0x15d: 0xb3, 0x15e: 0xb4, 0x15f: 0xb5, + 0x160: 0xb6, 0x161: 0xb7, 0x162: 0xb8, 0x163: 0xb9, 0x164: 0xba, 0x165: 0xbb, 0x166: 0xbc, 0x167: 0xbd, + 0x168: 0xbe, 0x169: 0xbf, 0x16a: 0xc0, 0x16b: 0xc1, 0x16c: 0xc2, 0x16d: 0xc3, 0x16e: 0xc4, 0x16f: 0xc5, + 0x170: 0xc6, 0x171: 0xc7, 0x172: 0xc8, 0x173: 0xc9, 0x174: 0x26, 0x175: 0x27, 0x176: 0x28, 0x177: 0x88, + 0x178: 0x29, 0x179: 0x29, 0x17a: 0x2a, 0x17b: 0x29, 0x17c: 0xca, 0x17d: 0x2b, 0x17e: 0x2c, 0x17f: 0x2d, + // Block 0x6, offset 0x180 + 0x180: 0x2e, 0x181: 0x2f, 0x182: 0x30, 0x183: 0xcb, 0x184: 0x31, 0x185: 0x32, 0x186: 0xcc, 0x187: 0xa2, + 0x188: 0xcd, 0x189: 0xce, 0x18a: 0xa2, 0x18b: 0xa2, 0x18c: 0xcf, 0x18d: 0xa2, 0x18e: 0xa2, 0x18f: 0xa2, + 0x190: 0xd0, 0x191: 0x33, 0x192: 0x34, 0x193: 0x35, 0x194: 0xa2, 0x195: 0xa2, 0x196: 0xa2, 0x197: 0xa2, + 0x198: 0xa2, 0x199: 0xa2, 0x19a: 0xa2, 0x19b: 0xa2, 0x19c: 0xa2, 0x19d: 0xa2, 0x19e: 0xa2, 0x19f: 0xa2, + 0x1a0: 0xa2, 0x1a1: 0xa2, 0x1a2: 0xa2, 0x1a3: 0xa2, 0x1a4: 0xa2, 0x1a5: 0xa2, 0x1a6: 0xa2, 0x1a7: 0xa2, + 0x1a8: 0xd1, 0x1a9: 0xd2, 0x1aa: 0xa2, 0x1ab: 0xd3, 0x1ac: 0xa2, 0x1ad: 0xd4, 0x1ae: 0xd5, 0x1af: 0xa2, + 0x1b0: 0xd6, 0x1b1: 0x36, 0x1b2: 0x29, 0x1b3: 0x37, 0x1b4: 0xd7, 0x1b5: 0xd8, 0x1b6: 0xd9, 0x1b7: 0xda, + 0x1b8: 0xdb, 0x1b9: 0xdc, 0x1ba: 0xdd, 0x1bb: 0xde, 0x1bc: 0xdf, 0x1bd: 0xe0, 0x1be: 0xe1, 0x1bf: 0x38, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x39, 0x1c1: 0xe2, 0x1c2: 0xe3, 0x1c3: 0xe4, 0x1c4: 0xe5, 0x1c5: 0x3a, 0x1c6: 0x3b, 0x1c7: 0xe6, + 0x1c8: 0xe7, 0x1c9: 0x3c, 0x1ca: 0x3d, 0x1cb: 0x3e, 0x1cc: 0xe8, 0x1cd: 0xe9, 0x1ce: 0x3f, 0x1cf: 0x40, + 0x1d0: 0xa6, 0x1d1: 0xa6, 0x1d2: 0xa6, 0x1d3: 0xa6, 0x1d4: 0xa6, 0x1d5: 0xa6, 0x1d6: 0xa6, 0x1d7: 0xa6, + 0x1d8: 0xa6, 0x1d9: 0xa6, 0x1da: 0xa6, 0x1db: 0xa6, 0x1dc: 0xa6, 0x1dd: 0xa6, 0x1de: 0xa6, 0x1df: 0xa6, + 0x1e0: 0xa6, 0x1e1: 0xa6, 0x1e2: 0xa6, 0x1e3: 0xa6, 0x1e4: 0xa6, 0x1e5: 0xa6, 0x1e6: 0xa6, 0x1e7: 0xa6, + 0x1e8: 0xa6, 0x1e9: 0xa6, 0x1ea: 0xa6, 0x1eb: 0xa6, 0x1ec: 0xa6, 0x1ed: 0xa6, 0x1ee: 0xa6, 0x1ef: 0xa6, + 0x1f0: 0xa6, 0x1f1: 0xa6, 0x1f2: 0xa6, 0x1f3: 0xa6, 0x1f4: 0xa6, 0x1f5: 0xa6, 0x1f6: 0xa6, 0x1f7: 0xa6, + 0x1f8: 0xa6, 0x1f9: 0xa6, 0x1fa: 0xa6, 0x1fb: 0xa6, 0x1fc: 0xa6, 0x1fd: 0xa6, 0x1fe: 0xa6, 0x1ff: 0xa6, + // Block 0x8, offset 0x200 + 0x200: 0xa6, 0x201: 0xa6, 0x202: 0xa6, 0x203: 0xa6, 0x204: 0xa6, 0x205: 0xa6, 0x206: 0xa6, 0x207: 0xa6, + 0x208: 0xa6, 0x209: 0xa6, 0x20a: 0xa6, 0x20b: 0xa6, 0x20c: 0xa6, 0x20d: 0xa6, 0x20e: 0xa6, 0x20f: 0xa6, + 0x210: 0xa6, 0x211: 0xa6, 0x212: 0xa6, 0x213: 0xa6, 0x214: 0xa6, 0x215: 0xa6, 0x216: 0xa6, 0x217: 0xa6, + 0x218: 0xa6, 0x219: 0xa6, 0x21a: 0xa6, 0x21b: 0xa6, 0x21c: 0xa6, 0x21d: 0xa6, 0x21e: 0xa6, 0x21f: 0xa6, + 0x220: 0xa6, 0x221: 0xa6, 0x222: 0xa6, 0x223: 0xa6, 0x224: 0xa6, 0x225: 0xa6, 0x226: 0xa6, 0x227: 0xa6, + 0x228: 0xa6, 0x229: 0xa6, 0x22a: 0xa6, 0x22b: 0xa6, 0x22c: 0xa6, 0x22d: 0xa6, 0x22e: 0xa6, 0x22f: 0xa6, + 0x230: 0xa6, 0x231: 0xa6, 0x232: 0xa6, 0x233: 0xa6, 0x234: 0xa6, 0x235: 0xa6, 0x236: 0xa6, 0x237: 0xa2, + 0x238: 0xa6, 0x239: 0xa6, 0x23a: 0xa6, 0x23b: 0xa6, 0x23c: 0xa6, 0x23d: 0xa6, 0x23e: 0xa6, 0x23f: 0xa6, + // Block 0x9, offset 0x240 + 0x240: 0xa6, 0x241: 0xa6, 0x242: 0xa6, 0x243: 0xa6, 0x244: 0xa6, 0x245: 0xa6, 0x246: 0xa6, 0x247: 0xa6, + 0x248: 0xa6, 0x249: 0xa6, 0x24a: 0xa6, 0x24b: 0xa6, 0x24c: 0xa6, 0x24d: 0xa6, 0x24e: 0xa6, 0x24f: 0xa6, + 0x250: 0xa6, 0x251: 0xa6, 0x252: 0xa6, 0x253: 0xa6, 0x254: 0xa6, 0x255: 0xa6, 0x256: 0xa6, 0x257: 0xa6, + 0x258: 0xa6, 0x259: 0xa6, 0x25a: 0xa6, 0x25b: 0xa6, 0x25c: 0xa6, 0x25d: 0xa6, 0x25e: 0xa6, 0x25f: 0xa6, + 0x260: 0xa6, 0x261: 0xa6, 0x262: 0xa6, 0x263: 0xa6, 0x264: 0xa6, 0x265: 0xa6, 0x266: 0xa6, 0x267: 0xa6, + 0x268: 0xa6, 0x269: 0xa6, 0x26a: 0xa6, 0x26b: 0xa6, 0x26c: 0xa6, 0x26d: 0xa6, 0x26e: 0xa6, 0x26f: 0xa6, + 0x270: 0xa6, 0x271: 0xa6, 0x272: 0xa6, 0x273: 0xa6, 0x274: 0xa6, 0x275: 0xa6, 0x276: 0xa6, 0x277: 0xa6, + 0x278: 0xa6, 0x279: 0xa6, 0x27a: 0xa6, 0x27b: 0xa6, 0x27c: 0xa6, 0x27d: 0xa6, 0x27e: 0xa6, 0x27f: 0xa6, + // Block 0xa, offset 0x280 + 0x280: 0xa6, 0x281: 0xa6, 0x282: 0xa6, 0x283: 0xa6, 0x284: 0xa6, 0x285: 0xa6, 0x286: 0xa6, 0x287: 0xa6, + 0x288: 0xa6, 0x289: 0xa6, 0x28a: 0xa6, 0x28b: 0xa6, 0x28c: 0xa6, 0x28d: 0xa6, 0x28e: 0xa6, 0x28f: 0xa6, + 0x290: 0xa6, 0x291: 0xa6, 0x292: 0xea, 0x293: 0xeb, 0x294: 0xa6, 0x295: 0xa6, 0x296: 0xa6, 0x297: 0xa6, + 0x298: 0xec, 0x299: 0x41, 0x29a: 0x42, 0x29b: 0xed, 0x29c: 0x43, 0x29d: 0x44, 0x29e: 0x45, 0x29f: 0x46, + 0x2a0: 0xee, 0x2a1: 0xef, 0x2a2: 0xf0, 0x2a3: 0xf1, 0x2a4: 0xf2, 0x2a5: 0xf3, 0x2a6: 0xf4, 0x2a7: 0xf5, + 0x2a8: 0xf6, 0x2a9: 0xf7, 0x2aa: 0xf8, 0x2ab: 0xf9, 0x2ac: 0xfa, 0x2ad: 0xfb, 0x2ae: 0xfc, 0x2af: 0xfd, + 0x2b0: 0xa6, 0x2b1: 0xa6, 0x2b2: 0xa6, 0x2b3: 0xa6, 0x2b4: 0xa6, 0x2b5: 0xa6, 0x2b6: 0xa6, 0x2b7: 0xa6, + 0x2b8: 0xa6, 0x2b9: 0xa6, 0x2ba: 0xa6, 0x2bb: 0xa6, 0x2bc: 0xa6, 0x2bd: 0xa6, 0x2be: 0xa6, 0x2bf: 0xa6, + // Block 0xb, offset 0x2c0 + 0x2c0: 0xa6, 0x2c1: 0xa6, 0x2c2: 0xa6, 0x2c3: 0xa6, 0x2c4: 0xa6, 0x2c5: 0xa6, 0x2c6: 0xa6, 0x2c7: 0xa6, + 0x2c8: 0xa6, 0x2c9: 0xa6, 0x2ca: 0xa6, 0x2cb: 0xa6, 0x2cc: 0xa6, 0x2cd: 0xa6, 0x2ce: 0xa6, 0x2cf: 0xa6, + 0x2d0: 0xa6, 0x2d1: 0xa6, 0x2d2: 0xa6, 0x2d3: 0xa6, 0x2d4: 0xa6, 0x2d5: 0xa6, 0x2d6: 0xa6, 0x2d7: 0xa6, + 0x2d8: 0xa6, 0x2d9: 0xa6, 0x2da: 0xa6, 0x2db: 0xa6, 0x2dc: 0xa6, 0x2dd: 0xa6, 0x2de: 0xfe, 0x2df: 0xff, + // Block 0xc, offset 0x300 + 0x300: 0x100, 0x301: 0x100, 0x302: 0x100, 0x303: 0x100, 0x304: 0x100, 0x305: 0x100, 0x306: 0x100, 0x307: 0x100, + 0x308: 0x100, 0x309: 0x100, 0x30a: 0x100, 0x30b: 0x100, 0x30c: 0x100, 0x30d: 0x100, 0x30e: 0x100, 0x30f: 0x100, + 0x310: 0x100, 0x311: 0x100, 0x312: 0x100, 0x313: 0x100, 0x314: 0x100, 0x315: 0x100, 0x316: 0x100, 0x317: 0x100, + 0x318: 0x100, 0x319: 0x100, 0x31a: 0x100, 0x31b: 0x100, 0x31c: 0x100, 0x31d: 0x100, 0x31e: 0x100, 0x31f: 0x100, + 0x320: 0x100, 0x321: 0x100, 0x322: 0x100, 0x323: 0x100, 0x324: 0x100, 0x325: 0x100, 0x326: 0x100, 0x327: 0x100, + 0x328: 0x100, 0x329: 0x100, 0x32a: 0x100, 0x32b: 0x100, 0x32c: 0x100, 0x32d: 0x100, 0x32e: 0x100, 0x32f: 0x100, + 0x330: 0x100, 0x331: 0x100, 0x332: 0x100, 0x333: 0x100, 0x334: 0x100, 0x335: 0x100, 0x336: 0x100, 0x337: 0x100, + 0x338: 0x100, 0x339: 0x100, 0x33a: 0x100, 0x33b: 0x100, 0x33c: 0x100, 0x33d: 0x100, 0x33e: 0x100, 0x33f: 0x100, + // Block 0xd, offset 0x340 + 0x340: 0x100, 0x341: 0x100, 0x342: 0x100, 0x343: 0x100, 0x344: 0x100, 0x345: 0x100, 0x346: 0x100, 0x347: 0x100, + 0x348: 0x100, 0x349: 0x100, 0x34a: 0x100, 0x34b: 0x100, 0x34c: 0x100, 0x34d: 0x100, 0x34e: 0x100, 0x34f: 0x100, + 0x350: 0x100, 0x351: 0x100, 0x352: 0x100, 0x353: 0x100, 0x354: 0x100, 0x355: 0x100, 0x356: 0x100, 0x357: 0x100, + 0x358: 0x100, 0x359: 0x100, 0x35a: 0x100, 0x35b: 0x100, 0x35c: 0x100, 0x35d: 0x100, 0x35e: 0x100, 0x35f: 0x100, + 0x360: 0x100, 0x361: 0x100, 0x362: 0x100, 0x363: 0x100, 0x364: 0x101, 0x365: 0x102, 0x366: 0x103, 0x367: 0x104, + 0x368: 0x47, 0x369: 0x105, 0x36a: 0x106, 0x36b: 0x48, 0x36c: 0x49, 0x36d: 0x4a, 0x36e: 0x4b, 0x36f: 0x4c, + 0x370: 0x107, 0x371: 0x4d, 0x372: 0x4e, 0x373: 0x4f, 0x374: 0x50, 0x375: 0x51, 0x376: 0x108, 0x377: 0x52, + 0x378: 0x53, 0x379: 0x54, 0x37a: 0x55, 0x37b: 0x56, 0x37c: 0x57, 0x37d: 0x58, 0x37e: 0x59, 0x37f: 0x5a, + // Block 0xe, offset 0x380 + 0x380: 0x109, 0x381: 0x10a, 0x382: 0xa6, 0x383: 0x10b, 0x384: 0x10c, 0x385: 0xa2, 0x386: 0x10d, 0x387: 0x10e, + 0x388: 0x100, 0x389: 0x100, 0x38a: 0x10f, 0x38b: 0x110, 0x38c: 0x111, 0x38d: 0x112, 0x38e: 0x113, 0x38f: 0x114, + 0x390: 0x115, 0x391: 0xa6, 0x392: 0x116, 0x393: 0x117, 0x394: 0x118, 0x395: 0x5b, 0x396: 0x5c, 0x397: 0x100, + 0x398: 0xa6, 0x399: 0xa6, 0x39a: 0xa6, 0x39b: 0xa6, 0x39c: 0x119, 0x39d: 0x11a, 0x39e: 0x5d, 0x39f: 0x100, + 0x3a0: 0x11b, 0x3a1: 0x11c, 0x3a2: 0x11d, 0x3a3: 0x11e, 0x3a4: 0x11f, 0x3a5: 0x100, 0x3a6: 0x120, 0x3a7: 0x121, + 0x3a8: 0x122, 0x3a9: 0x123, 0x3aa: 0x124, 0x3ab: 0x5e, 0x3ac: 0x125, 0x3ad: 0x126, 0x3ae: 0x5f, 0x3af: 0x100, + 0x3b0: 0x127, 0x3b1: 0x128, 0x3b2: 0x129, 0x3b3: 0x12a, 0x3b4: 0x12b, 0x3b5: 0x100, 0x3b6: 0x100, 0x3b7: 0x100, + 0x3b8: 0x100, 0x3b9: 0x12c, 0x3ba: 0x12d, 0x3bb: 0x12e, 0x3bc: 0x12f, 0x3bd: 0x130, 0x3be: 0x131, 0x3bf: 0x132, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x133, 0x3c1: 0x134, 0x3c2: 0x135, 0x3c3: 0x136, 0x3c4: 0x137, 0x3c5: 0x138, 0x3c6: 0x139, 0x3c7: 0x13a, + 0x3c8: 0x13b, 0x3c9: 0x13c, 0x3ca: 0x13d, 0x3cb: 0x13e, 0x3cc: 0x60, 0x3cd: 0x61, 0x3ce: 0x100, 0x3cf: 0x100, + 0x3d0: 0x13f, 0x3d1: 0x140, 0x3d2: 0x141, 0x3d3: 0x142, 0x3d4: 0x100, 0x3d5: 0x100, 0x3d6: 0x143, 0x3d7: 0x144, + 0x3d8: 0x145, 0x3d9: 0x146, 0x3da: 0x147, 0x3db: 0x148, 0x3dc: 0x149, 0x3dd: 0x14a, 0x3de: 0x100, 0x3df: 0x100, + 0x3e0: 0x14b, 0x3e1: 0x100, 0x3e2: 0x14c, 0x3e3: 0x14d, 0x3e4: 0x62, 0x3e5: 0x14e, 0x3e6: 0x14f, 0x3e7: 0x150, + 0x3e8: 0x151, 0x3e9: 0x152, 0x3ea: 0x153, 0x3eb: 0x154, 0x3ec: 0x155, 0x3ed: 0x100, 0x3ee: 0x100, 0x3ef: 0x100, + 0x3f0: 0x156, 0x3f1: 0x157, 0x3f2: 0x158, 0x3f3: 0x100, 0x3f4: 0x159, 0x3f5: 0x15a, 0x3f6: 0x15b, 0x3f7: 0x100, + 0x3f8: 0x100, 0x3f9: 0x100, 0x3fa: 0x100, 0x3fb: 0x15c, 0x3fc: 0x15d, 0x3fd: 0x15e, 0x3fe: 0x15f, 0x3ff: 0x160, + // Block 0x10, offset 0x400 + 0x400: 0xa6, 0x401: 0xa6, 0x402: 0xa6, 0x403: 0xa6, 0x404: 0xa6, 0x405: 0xa6, 0x406: 0xa6, 0x407: 0xa6, + 0x408: 0xa6, 0x409: 0xa6, 0x40a: 0xa6, 0x40b: 0xa6, 0x40c: 0xa6, 0x40d: 0xa6, 0x40e: 0x161, 0x40f: 0x100, + 0x410: 0xa2, 0x411: 0x162, 0x412: 0xa6, 0x413: 0xa6, 0x414: 0xa6, 0x415: 0x163, 0x416: 0x100, 0x417: 0x100, + 0x418: 0x100, 0x419: 0x100, 0x41a: 0x100, 0x41b: 0x100, 0x41c: 0x100, 0x41d: 0x100, 0x41e: 0x100, 0x41f: 0x100, + 0x420: 0x100, 0x421: 0x100, 0x422: 0x100, 0x423: 0x100, 0x424: 0x100, 0x425: 0x100, 0x426: 0x100, 0x427: 0x100, + 0x428: 0x100, 0x429: 0x100, 0x42a: 0x100, 0x42b: 0x100, 0x42c: 0x100, 0x42d: 0x100, 0x42e: 0x100, 0x42f: 0x100, + 0x430: 0x100, 0x431: 0x100, 0x432: 0x100, 0x433: 0x100, 0x434: 0x100, 0x435: 0x100, 0x436: 0x100, 0x437: 0x100, + 0x438: 0x100, 0x439: 0x100, 0x43a: 0x100, 0x43b: 0x100, 0x43c: 0x100, 0x43d: 0x100, 0x43e: 0x164, 0x43f: 0x165, + // Block 0x11, offset 0x440 + 0x440: 0xa6, 0x441: 0xa6, 0x442: 0xa6, 0x443: 0xa6, 0x444: 0xa6, 0x445: 0xa6, 0x446: 0xa6, 0x447: 0xa6, + 0x448: 0xa6, 0x449: 0xa6, 0x44a: 0xa6, 0x44b: 0xa6, 0x44c: 0xa6, 0x44d: 0xa6, 0x44e: 0xa6, 0x44f: 0xa6, + 0x450: 0x166, 0x451: 0x167, 0x452: 0x100, 0x453: 0x100, 0x454: 0x100, 0x455: 0x100, 0x456: 0x100, 0x457: 0x100, + 0x458: 0x100, 0x459: 0x100, 0x45a: 0x100, 0x45b: 0x100, 0x45c: 0x100, 0x45d: 0x100, 0x45e: 0x100, 0x45f: 0x100, + 0x460: 0x100, 0x461: 0x100, 0x462: 0x100, 0x463: 0x100, 0x464: 0x100, 0x465: 0x100, 0x466: 0x100, 0x467: 0x100, + 0x468: 0x100, 0x469: 0x100, 0x46a: 0x100, 0x46b: 0x100, 0x46c: 0x100, 0x46d: 0x100, 0x46e: 0x100, 0x46f: 0x100, + 0x470: 0x100, 0x471: 0x100, 0x472: 0x100, 0x473: 0x100, 0x474: 0x100, 0x475: 0x100, 0x476: 0x100, 0x477: 0x100, + 0x478: 0x100, 0x479: 0x100, 0x47a: 0x100, 0x47b: 0x100, 0x47c: 0x100, 0x47d: 0x100, 0x47e: 0x100, 0x47f: 0x100, + // Block 0x12, offset 0x480 + 0x480: 0x100, 0x481: 0x100, 0x482: 0x100, 0x483: 0x100, 0x484: 0x100, 0x485: 0x100, 0x486: 0x100, 0x487: 0x100, + 0x488: 0x100, 0x489: 0x100, 0x48a: 0x100, 0x48b: 0x100, 0x48c: 0x100, 0x48d: 0x100, 0x48e: 0x100, 0x48f: 0x100, + 0x490: 0xa6, 0x491: 0xa6, 0x492: 0xa6, 0x493: 0xa6, 0x494: 0xa6, 0x495: 0xa6, 0x496: 0xa6, 0x497: 0xa6, + 0x498: 0xa6, 0x499: 0x14a, 0x49a: 0x100, 0x49b: 0x100, 0x49c: 0x100, 0x49d: 0x100, 0x49e: 0x100, 0x49f: 0x100, + 0x4a0: 0x100, 0x4a1: 0x100, 0x4a2: 0x100, 0x4a3: 0x100, 0x4a4: 0x100, 0x4a5: 0x100, 0x4a6: 0x100, 0x4a7: 0x100, + 0x4a8: 0x100, 0x4a9: 0x100, 0x4aa: 0x100, 0x4ab: 0x100, 0x4ac: 0x100, 0x4ad: 0x100, 0x4ae: 0x100, 0x4af: 0x100, + 0x4b0: 0x100, 0x4b1: 0x100, 0x4b2: 0x100, 0x4b3: 0x100, 0x4b4: 0x100, 0x4b5: 0x100, 0x4b6: 0x100, 0x4b7: 0x100, + 0x4b8: 0x100, 0x4b9: 0x100, 0x4ba: 0x100, 0x4bb: 0x100, 0x4bc: 0x100, 0x4bd: 0x100, 0x4be: 0x100, 0x4bf: 0x100, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x100, 0x4c1: 0x100, 0x4c2: 0x100, 0x4c3: 0x100, 0x4c4: 0x100, 0x4c5: 0x100, 0x4c6: 0x100, 0x4c7: 0x100, + 0x4c8: 0x100, 0x4c9: 0x100, 0x4ca: 0x100, 0x4cb: 0x100, 0x4cc: 0x100, 0x4cd: 0x100, 0x4ce: 0x100, 0x4cf: 0x100, + 0x4d0: 0x100, 0x4d1: 0x100, 0x4d2: 0x100, 0x4d3: 0x100, 0x4d4: 0x100, 0x4d5: 0x100, 0x4d6: 0x100, 0x4d7: 0x100, + 0x4d8: 0x100, 0x4d9: 0x100, 0x4da: 0x100, 0x4db: 0x100, 0x4dc: 0x100, 0x4dd: 0x100, 0x4de: 0x100, 0x4df: 0x100, + 0x4e0: 0xa6, 0x4e1: 0xa6, 0x4e2: 0xa6, 0x4e3: 0xa6, 0x4e4: 0xa6, 0x4e5: 0xa6, 0x4e6: 0xa6, 0x4e7: 0xa6, + 0x4e8: 0x154, 0x4e9: 0x168, 0x4ea: 0x169, 0x4eb: 0x16a, 0x4ec: 0x16b, 0x4ed: 0x16c, 0x4ee: 0x16d, 0x4ef: 0x100, + 0x4f0: 0x100, 0x4f1: 0x100, 0x4f2: 0x100, 0x4f3: 0x100, 0x4f4: 0x100, 0x4f5: 0x100, 0x4f6: 0x100, 0x4f7: 0x100, + 0x4f8: 0x100, 0x4f9: 0x16e, 0x4fa: 0x16f, 0x4fb: 0x100, 0x4fc: 0xa6, 0x4fd: 0x170, 0x4fe: 0x171, 0x4ff: 0x172, + // Block 0x14, offset 0x500 + 0x500: 0xa6, 0x501: 0xa6, 0x502: 0xa6, 0x503: 0xa6, 0x504: 0xa6, 0x505: 0xa6, 0x506: 0xa6, 0x507: 0xa6, + 0x508: 0xa6, 0x509: 0xa6, 0x50a: 0xa6, 0x50b: 0xa6, 0x50c: 0xa6, 0x50d: 0xa6, 0x50e: 0xa6, 0x50f: 0xa6, + 0x510: 0xa6, 0x511: 0xa6, 0x512: 0xa6, 0x513: 0xa6, 0x514: 0xa6, 0x515: 0xa6, 0x516: 0xa6, 0x517: 0xa6, + 0x518: 0xa6, 0x519: 0xa6, 0x51a: 0xa6, 0x51b: 0xa6, 0x51c: 0xa6, 0x51d: 0xa6, 0x51e: 0xa6, 0x51f: 0x173, + 0x520: 0xa6, 0x521: 0xa6, 0x522: 0xa6, 0x523: 0xa6, 0x524: 0xa6, 0x525: 0xa6, 0x526: 0xa6, 0x527: 0xa6, + 0x528: 0xa6, 0x529: 0xa6, 0x52a: 0xa6, 0x52b: 0xa6, 0x52c: 0xa6, 0x52d: 0xa6, 0x52e: 0xa6, 0x52f: 0xa6, + 0x530: 0xa6, 0x531: 0xa6, 0x532: 0xa6, 0x533: 0x174, 0x534: 0x175, 0x535: 0x100, 0x536: 0x100, 0x537: 0x100, + 0x538: 0x100, 0x539: 0x100, 0x53a: 0x100, 0x53b: 0x100, 0x53c: 0x100, 0x53d: 0x100, 0x53e: 0x100, 0x53f: 0x100, + // Block 0x15, offset 0x540 + 0x540: 0x100, 0x541: 0x100, 0x542: 0x100, 0x543: 0x100, 0x544: 0x100, 0x545: 0x100, 0x546: 0x100, 0x547: 0x100, + 0x548: 0x100, 0x549: 0x100, 0x54a: 0x100, 0x54b: 0x100, 0x54c: 0x100, 0x54d: 0x100, 0x54e: 0x100, 0x54f: 0x100, + 0x550: 0x100, 0x551: 0x100, 0x552: 0x100, 0x553: 0x100, 0x554: 0x100, 0x555: 0x100, 0x556: 0x100, 0x557: 0x100, + 0x558: 0x100, 0x559: 0x100, 0x55a: 0x100, 0x55b: 0x100, 0x55c: 0x100, 0x55d: 0x100, 0x55e: 0x100, 0x55f: 0x100, + 0x560: 0x100, 0x561: 0x100, 0x562: 0x100, 0x563: 0x100, 0x564: 0x100, 0x565: 0x100, 0x566: 0x100, 0x567: 0x100, + 0x568: 0x100, 0x569: 0x100, 0x56a: 0x100, 0x56b: 0x100, 0x56c: 0x100, 0x56d: 0x100, 0x56e: 0x100, 0x56f: 0x100, + 0x570: 0x100, 0x571: 0x100, 0x572: 0x100, 0x573: 0x100, 0x574: 0x100, 0x575: 0x100, 0x576: 0x100, 0x577: 0x100, + 0x578: 0x100, 0x579: 0x100, 0x57a: 0x100, 0x57b: 0x100, 0x57c: 0x100, 0x57d: 0x100, 0x57e: 0x100, 0x57f: 0x176, + // Block 0x16, offset 0x580 + 0x580: 0xa6, 0x581: 0xa6, 0x582: 0xa6, 0x583: 0xa6, 0x584: 0x177, 0x585: 0x178, 0x586: 0xa6, 0x587: 0xa6, + 0x588: 0xa6, 0x589: 0xa6, 0x58a: 0xa6, 0x58b: 0x179, 0x58c: 0x100, 0x58d: 0x100, 0x58e: 0x100, 0x58f: 0x100, + 0x590: 0x100, 0x591: 0x100, 0x592: 0x100, 0x593: 0x100, 0x594: 0x100, 0x595: 0x100, 0x596: 0x100, 0x597: 0x100, + 0x598: 0x100, 0x599: 0x100, 0x59a: 0x100, 0x59b: 0x100, 0x59c: 0x100, 0x59d: 0x100, 0x59e: 0x100, 0x59f: 0x100, + 0x5a0: 0x100, 0x5a1: 0x100, 0x5a2: 0x100, 0x5a3: 0x100, 0x5a4: 0x100, 0x5a5: 0x100, 0x5a6: 0x100, 0x5a7: 0x100, + 0x5a8: 0x100, 0x5a9: 0x100, 0x5aa: 0x100, 0x5ab: 0x100, 0x5ac: 0x100, 0x5ad: 0x100, 0x5ae: 0x100, 0x5af: 0x100, + 0x5b0: 0xa6, 0x5b1: 0x17a, 0x5b2: 0x17b, 0x5b3: 0x100, 0x5b4: 0x100, 0x5b5: 0x100, 0x5b6: 0x100, 0x5b7: 0x100, + 0x5b8: 0x100, 0x5b9: 0x100, 0x5ba: 0x100, 0x5bb: 0x100, 0x5bc: 0x100, 0x5bd: 0x100, 0x5be: 0x100, 0x5bf: 0x100, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x100, 0x5c1: 0x100, 0x5c2: 0x100, 0x5c3: 0x100, 0x5c4: 0x100, 0x5c5: 0x100, 0x5c6: 0x100, 0x5c7: 0x100, + 0x5c8: 0x100, 0x5c9: 0x100, 0x5ca: 0x100, 0x5cb: 0x100, 0x5cc: 0x100, 0x5cd: 0x100, 0x5ce: 0x100, 0x5cf: 0x100, + 0x5d0: 0x100, 0x5d1: 0x100, 0x5d2: 0x100, 0x5d3: 0x100, 0x5d4: 0x100, 0x5d5: 0x100, 0x5d6: 0x100, 0x5d7: 0x100, + 0x5d8: 0x100, 0x5d9: 0x100, 0x5da: 0x100, 0x5db: 0x100, 0x5dc: 0x100, 0x5dd: 0x100, 0x5de: 0x100, 0x5df: 0x100, + 0x5e0: 0x100, 0x5e1: 0x100, 0x5e2: 0x100, 0x5e3: 0x100, 0x5e4: 0x100, 0x5e5: 0x100, 0x5e6: 0x100, 0x5e7: 0x100, + 0x5e8: 0x100, 0x5e9: 0x100, 0x5ea: 0x100, 0x5eb: 0x100, 0x5ec: 0x100, 0x5ed: 0x100, 0x5ee: 0x100, 0x5ef: 0x100, + 0x5f0: 0x100, 0x5f1: 0x100, 0x5f2: 0x100, 0x5f3: 0x100, 0x5f4: 0x100, 0x5f5: 0x100, 0x5f6: 0x100, 0x5f7: 0x100, + 0x5f8: 0x100, 0x5f9: 0x100, 0x5fa: 0x100, 0x5fb: 0x100, 0x5fc: 0x17c, 0x5fd: 0x17d, 0x5fe: 0xa2, 0x5ff: 0x17e, + // Block 0x18, offset 0x600 + 0x600: 0xa2, 0x601: 0xa2, 0x602: 0xa2, 0x603: 0x17f, 0x604: 0x180, 0x605: 0x181, 0x606: 0x182, 0x607: 0x183, + 0x608: 0xa2, 0x609: 0x184, 0x60a: 0x100, 0x60b: 0x185, 0x60c: 0xa2, 0x60d: 0x186, 0x60e: 0x100, 0x60f: 0x100, + 0x610: 0x63, 0x611: 0x64, 0x612: 0x65, 0x613: 0x66, 0x614: 0x67, 0x615: 0x68, 0x616: 0x69, 0x617: 0x6a, + 0x618: 0x6b, 0x619: 0x6c, 0x61a: 0x6d, 0x61b: 0x6e, 0x61c: 0x6f, 0x61d: 0x70, 0x61e: 0x71, 0x61f: 0x72, + 0x620: 0xa2, 0x621: 0xa2, 0x622: 0xa2, 0x623: 0xa2, 0x624: 0xa2, 0x625: 0xa2, 0x626: 0xa2, 0x627: 0xa2, + 0x628: 0x187, 0x629: 0x188, 0x62a: 0x189, 0x62b: 0x100, 0x62c: 0x100, 0x62d: 0x100, 0x62e: 0x100, 0x62f: 0x100, + 0x630: 0x100, 0x631: 0x100, 0x632: 0x100, 0x633: 0x100, 0x634: 0x100, 0x635: 0x100, 0x636: 0x100, 0x637: 0x100, + 0x638: 0x100, 0x639: 0x100, 0x63a: 0x100, 0x63b: 0x100, 0x63c: 0x18a, 0x63d: 0x100, 0x63e: 0x100, 0x63f: 0x100, + // Block 0x19, offset 0x640 + 0x640: 0x73, 0x641: 0x74, 0x642: 0x18b, 0x643: 0x100, 0x644: 0x18c, 0x645: 0x18d, 0x646: 0x100, 0x647: 0x100, + 0x648: 0x100, 0x649: 0x100, 0x64a: 0x18e, 0x64b: 0x18f, 0x64c: 0x100, 0x64d: 0x100, 0x64e: 0x100, 0x64f: 0x100, + 0x650: 0x100, 0x651: 0x100, 0x652: 0x100, 0x653: 0x190, 0x654: 0x100, 0x655: 0x100, 0x656: 0x100, 0x657: 0x100, + 0x658: 0x100, 0x659: 0x100, 0x65a: 0x100, 0x65b: 0x100, 0x65c: 0x100, 0x65d: 0x100, 0x65e: 0x100, 0x65f: 0x191, + 0x660: 0x127, 0x661: 0x127, 0x662: 0x127, 0x663: 0x192, 0x664: 0x75, 0x665: 0x193, 0x666: 0x100, 0x667: 0x100, + 0x668: 0x100, 0x669: 0x100, 0x66a: 0x100, 0x66b: 0x100, 0x66c: 0x100, 0x66d: 0x100, 0x66e: 0x100, 0x66f: 0x100, + 0x670: 0x100, 0x671: 0x194, 0x672: 0x195, 0x673: 0x100, 0x674: 0x196, 0x675: 0x100, 0x676: 0x100, 0x677: 0x100, + 0x678: 0x76, 0x679: 0x77, 0x67a: 0x78, 0x67b: 0x197, 0x67c: 0x100, 0x67d: 0x100, 0x67e: 0x100, 0x67f: 0x100, + // Block 0x1a, offset 0x680 + 0x680: 0x198, 0x681: 0xa2, 0x682: 0x199, 0x683: 0x19a, 0x684: 0x79, 0x685: 0x7a, 0x686: 0x19b, 0x687: 0x19c, + 0x688: 0x7b, 0x689: 0x19d, 0x68a: 0x100, 0x68b: 0x100, 0x68c: 0xa2, 0x68d: 0xa2, 0x68e: 0xa2, 0x68f: 0xa2, + 0x690: 0xa2, 0x691: 0xa2, 0x692: 0xa2, 0x693: 0xa2, 0x694: 0xa2, 0x695: 0xa2, 0x696: 0xa2, 0x697: 0xa2, + 0x698: 0xa2, 0x699: 0xa2, 0x69a: 0xa2, 0x69b: 0x19e, 0x69c: 0xa2, 0x69d: 0x19f, 0x69e: 0xa2, 0x69f: 0x1a0, + 0x6a0: 0x1a1, 0x6a1: 0x1a2, 0x6a2: 0x1a3, 0x6a3: 0x100, 0x6a4: 0xa2, 0x6a5: 0xa2, 0x6a6: 0xa2, 0x6a7: 0xa2, + 0x6a8: 0xa2, 0x6a9: 0x1a4, 0x6aa: 0x1a5, 0x6ab: 0x1a6, 0x6ac: 0xa2, 0x6ad: 0xa2, 0x6ae: 0x1a7, 0x6af: 0x1a8, + 0x6b0: 0x100, 0x6b1: 0x100, 0x6b2: 0x100, 0x6b3: 0x100, 0x6b4: 0x100, 0x6b5: 0x100, 0x6b6: 0x100, 0x6b7: 0x100, + 0x6b8: 0x100, 0x6b9: 0x100, 0x6ba: 0x100, 0x6bb: 0x100, 0x6bc: 0x100, 0x6bd: 0x100, 0x6be: 0x100, 0x6bf: 0x100, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0xa6, 0x6c1: 0xa6, 0x6c2: 0xa6, 0x6c3: 0xa6, 0x6c4: 0xa6, 0x6c5: 0xa6, 0x6c6: 0xa6, 0x6c7: 0xa6, + 0x6c8: 0xa6, 0x6c9: 0xa6, 0x6ca: 0xa6, 0x6cb: 0xa6, 0x6cc: 0xa6, 0x6cd: 0xa6, 0x6ce: 0xa6, 0x6cf: 0xa6, + 0x6d0: 0xa6, 0x6d1: 0xa6, 0x6d2: 0xa6, 0x6d3: 0xa6, 0x6d4: 0xa6, 0x6d5: 0xa6, 0x6d6: 0xa6, 0x6d7: 0xa6, + 0x6d8: 0xa6, 0x6d9: 0xa6, 0x6da: 0xa6, 0x6db: 0x1a9, 0x6dc: 0xa6, 0x6dd: 0xa6, 0x6de: 0xa6, 0x6df: 0xa6, + 0x6e0: 0xa6, 0x6e1: 0xa6, 0x6e2: 0xa6, 0x6e3: 0xa6, 0x6e4: 0xa6, 0x6e5: 0xa6, 0x6e6: 0xa6, 0x6e7: 0xa6, + 0x6e8: 0xa6, 0x6e9: 0xa6, 0x6ea: 0xa6, 0x6eb: 0xa6, 0x6ec: 0xa6, 0x6ed: 0xa6, 0x6ee: 0xa6, 0x6ef: 0xa6, + 0x6f0: 0xa6, 0x6f1: 0xa6, 0x6f2: 0xa6, 0x6f3: 0xa6, 0x6f4: 0xa6, 0x6f5: 0xa6, 0x6f6: 0xa6, 0x6f7: 0xa6, + 0x6f8: 0xa6, 0x6f9: 0xa6, 0x6fa: 0xa6, 0x6fb: 0xa6, 0x6fc: 0xa6, 0x6fd: 0xa6, 0x6fe: 0xa6, 0x6ff: 0xa6, + // Block 0x1c, offset 0x700 + 0x700: 0xa6, 0x701: 0xa6, 0x702: 0xa6, 0x703: 0xa6, 0x704: 0xa6, 0x705: 0xa6, 0x706: 0xa6, 0x707: 0xa6, + 0x708: 0xa6, 0x709: 0xa6, 0x70a: 0xa6, 0x70b: 0xa6, 0x70c: 0xa6, 0x70d: 0xa6, 0x70e: 0xa6, 0x70f: 0xa6, + 0x710: 0xa6, 0x711: 0xa6, 0x712: 0xa6, 0x713: 0xa6, 0x714: 0xa6, 0x715: 0xa6, 0x716: 0xa6, 0x717: 0xa6, + 0x718: 0xa6, 0x719: 0xa6, 0x71a: 0xa6, 0x71b: 0xa6, 0x71c: 0x1aa, 0x71d: 0xa6, 0x71e: 0xa6, 0x71f: 0xa6, + 0x720: 0x1ab, 0x721: 0xa6, 0x722: 0xa6, 0x723: 0xa6, 0x724: 0xa6, 0x725: 0xa6, 0x726: 0xa6, 0x727: 0xa6, + 0x728: 0xa6, 0x729: 0xa6, 0x72a: 0xa6, 0x72b: 0xa6, 0x72c: 0xa6, 0x72d: 0xa6, 0x72e: 0xa6, 0x72f: 0xa6, + 0x730: 0xa6, 0x731: 0xa6, 0x732: 0xa6, 0x733: 0xa6, 0x734: 0xa6, 0x735: 0xa6, 0x736: 0xa6, 0x737: 0xa6, + 0x738: 0xa6, 0x739: 0xa6, 0x73a: 0xa6, 0x73b: 0xa6, 0x73c: 0xa6, 0x73d: 0xa6, 0x73e: 0xa6, 0x73f: 0xa6, + // Block 0x1d, offset 0x740 + 0x740: 0xa6, 0x741: 0xa6, 0x742: 0xa6, 0x743: 0xa6, 0x744: 0xa6, 0x745: 0xa6, 0x746: 0xa6, 0x747: 0xa6, + 0x748: 0xa6, 0x749: 0xa6, 0x74a: 0xa6, 0x74b: 0xa6, 0x74c: 0xa6, 0x74d: 0xa6, 0x74e: 0xa6, 0x74f: 0xa6, + 0x750: 0xa6, 0x751: 0xa6, 0x752: 0xa6, 0x753: 0xa6, 0x754: 0xa6, 0x755: 0xa6, 0x756: 0xa6, 0x757: 0xa6, + 0x758: 0xa6, 0x759: 0xa6, 0x75a: 0xa6, 0x75b: 0xa6, 0x75c: 0xa6, 0x75d: 0xa6, 0x75e: 0xa6, 0x75f: 0xa6, + 0x760: 0xa6, 0x761: 0xa6, 0x762: 0xa6, 0x763: 0xa6, 0x764: 0xa6, 0x765: 0xa6, 0x766: 0xa6, 0x767: 0xa6, + 0x768: 0xa6, 0x769: 0xa6, 0x76a: 0xa6, 0x76b: 0xa6, 0x76c: 0xa6, 0x76d: 0xa6, 0x76e: 0xa6, 0x76f: 0xa6, + 0x770: 0xa6, 0x771: 0xa6, 0x772: 0xa6, 0x773: 0xa6, 0x774: 0xa6, 0x775: 0xa6, 0x776: 0xa6, 0x777: 0xa6, + 0x778: 0xa6, 0x779: 0xa6, 0x77a: 0x1ac, 0x77b: 0xa6, 0x77c: 0xa6, 0x77d: 0xa6, 0x77e: 0xa6, 0x77f: 0xa6, + // Block 0x1e, offset 0x780 + 0x780: 0xa6, 0x781: 0xa6, 0x782: 0xa6, 0x783: 0xa6, 0x784: 0xa6, 0x785: 0xa6, 0x786: 0xa6, 0x787: 0xa6, + 0x788: 0xa6, 0x789: 0xa6, 0x78a: 0xa6, 0x78b: 0xa6, 0x78c: 0xa6, 0x78d: 0xa6, 0x78e: 0xa6, 0x78f: 0xa6, + 0x790: 0xa6, 0x791: 0xa6, 0x792: 0xa6, 0x793: 0xa6, 0x794: 0xa6, 0x795: 0xa6, 0x796: 0xa6, 0x797: 0xa6, + 0x798: 0xa6, 0x799: 0xa6, 0x79a: 0xa6, 0x79b: 0xa6, 0x79c: 0xa6, 0x79d: 0xa6, 0x79e: 0xa6, 0x79f: 0xa6, + 0x7a0: 0xa6, 0x7a1: 0xa6, 0x7a2: 0xa6, 0x7a3: 0xa6, 0x7a4: 0xa6, 0x7a5: 0xa6, 0x7a6: 0xa6, 0x7a7: 0xa6, + 0x7a8: 0xa6, 0x7a9: 0xa6, 0x7aa: 0xa6, 0x7ab: 0xa6, 0x7ac: 0xa6, 0x7ad: 0xa6, 0x7ae: 0xa6, 0x7af: 0x1ad, + 0x7b0: 0x100, 0x7b1: 0x100, 0x7b2: 0x100, 0x7b3: 0x100, 0x7b4: 0x100, 0x7b5: 0x100, 0x7b6: 0x100, 0x7b7: 0x100, + 0x7b8: 0x100, 0x7b9: 0x100, 0x7ba: 0x100, 0x7bb: 0x100, 0x7bc: 0x100, 0x7bd: 0x100, 0x7be: 0x100, 0x7bf: 0x100, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x100, 0x7c1: 0x100, 0x7c2: 0x100, 0x7c3: 0x100, 0x7c4: 0x100, 0x7c5: 0x100, 0x7c6: 0x100, 0x7c7: 0x100, + 0x7c8: 0x100, 0x7c9: 0x100, 0x7ca: 0x100, 0x7cb: 0x100, 0x7cc: 0x100, 0x7cd: 0x100, 0x7ce: 0x100, 0x7cf: 0x100, + 0x7d0: 0x100, 0x7d1: 0x100, 0x7d2: 0x100, 0x7d3: 0x100, 0x7d4: 0x100, 0x7d5: 0x100, 0x7d6: 0x100, 0x7d7: 0x100, + 0x7d8: 0x100, 0x7d9: 0x100, 0x7da: 0x100, 0x7db: 0x100, 0x7dc: 0x100, 0x7dd: 0x100, 0x7de: 0x100, 0x7df: 0x100, + 0x7e0: 0x7c, 0x7e1: 0x7d, 0x7e2: 0x7e, 0x7e3: 0x7f, 0x7e4: 0x80, 0x7e5: 0x81, 0x7e6: 0x82, 0x7e7: 0x83, + 0x7e8: 0x84, 0x7e9: 0x100, 0x7ea: 0x100, 0x7eb: 0x100, 0x7ec: 0x100, 0x7ed: 0x100, 0x7ee: 0x100, 0x7ef: 0x100, + 0x7f0: 0x100, 0x7f1: 0x100, 0x7f2: 0x100, 0x7f3: 0x100, 0x7f4: 0x100, 0x7f5: 0x100, 0x7f6: 0x100, 0x7f7: 0x100, + 0x7f8: 0x100, 0x7f9: 0x100, 0x7fa: 0x100, 0x7fb: 0x100, 0x7fc: 0x100, 0x7fd: 0x100, 0x7fe: 0x100, 0x7ff: 0x100, + // Block 0x20, offset 0x800 + 0x800: 0xa6, 0x801: 0xa6, 0x802: 0xa6, 0x803: 0xa6, 0x804: 0xa6, 0x805: 0xa6, 0x806: 0xa6, 0x807: 0xa6, + 0x808: 0xa6, 0x809: 0xa6, 0x80a: 0xa6, 0x80b: 0xa6, 0x80c: 0xa6, 0x80d: 0x1ae, 0x80e: 0xa6, 0x80f: 0xa6, + 0x810: 0xa6, 0x811: 0xa6, 0x812: 0xa6, 0x813: 0xa6, 0x814: 0xa6, 0x815: 0xa6, 0x816: 0xa6, 0x817: 0xa6, + 0x818: 0xa6, 0x819: 0xa6, 0x81a: 0xa6, 0x81b: 0xa6, 0x81c: 0xa6, 0x81d: 0xa6, 0x81e: 0xa6, 0x81f: 0xa6, + 0x820: 0xa6, 0x821: 0xa6, 0x822: 0xa6, 0x823: 0xa6, 0x824: 0xa6, 0x825: 0xa6, 0x826: 0xa6, 0x827: 0xa6, + 0x828: 0xa6, 0x829: 0xa6, 0x82a: 0xa6, 0x82b: 0xa6, 0x82c: 0xa6, 0x82d: 0xa6, 0x82e: 0xa6, 0x82f: 0xa6, + 0x830: 0xa6, 0x831: 0xa6, 0x832: 0xa6, 0x833: 0xa6, 0x834: 0xa6, 0x835: 0xa6, 0x836: 0xa6, 0x837: 0xa6, + 0x838: 0xa6, 0x839: 0xa6, 0x83a: 0xa6, 0x83b: 0xa6, 0x83c: 0xa6, 0x83d: 0xa6, 0x83e: 0xa6, 0x83f: 0xa6, + // Block 0x21, offset 0x840 + 0x840: 0xa6, 0x841: 0xa6, 0x842: 0xa6, 0x843: 0xa6, 0x844: 0xa6, 0x845: 0xa6, 0x846: 0xa6, 0x847: 0xa6, + 0x848: 0xa6, 0x849: 0xa6, 0x84a: 0xa6, 0x84b: 0xa6, 0x84c: 0xa6, 0x84d: 0xa6, 0x84e: 0x1af, 0x84f: 0x100, + 0x850: 0x100, 0x851: 0x100, 0x852: 0x100, 0x853: 0x100, 0x854: 0x100, 0x855: 0x100, 0x856: 0x100, 0x857: 0x100, + 0x858: 0x100, 0x859: 0x100, 0x85a: 0x100, 0x85b: 0x100, 0x85c: 0x100, 0x85d: 0x100, 0x85e: 0x100, 0x85f: 0x100, + 0x860: 0x100, 0x861: 0x100, 0x862: 0x100, 0x863: 0x100, 0x864: 0x100, 0x865: 0x100, 0x866: 0x100, 0x867: 0x100, + 0x868: 0x100, 0x869: 0x100, 0x86a: 0x100, 0x86b: 0x100, 0x86c: 0x100, 0x86d: 0x100, 0x86e: 0x100, 0x86f: 0x100, + 0x870: 0x100, 0x871: 0x100, 0x872: 0x100, 0x873: 0x100, 0x874: 0x100, 0x875: 0x100, 0x876: 0x100, 0x877: 0x100, + 0x878: 0x100, 0x879: 0x100, 0x87a: 0x100, 0x87b: 0x100, 0x87c: 0x100, 0x87d: 0x100, 0x87e: 0x100, 0x87f: 0x100, + // Block 0x22, offset 0x880 + 0x890: 0x0c, 0x891: 0x0d, 0x892: 0x0e, 0x893: 0x0f, 0x894: 0x10, 0x895: 0x0a, 0x896: 0x11, 0x897: 0x07, + 0x898: 0x12, 0x899: 0x0a, 0x89a: 0x13, 0x89b: 0x14, 0x89c: 0x15, 0x89d: 0x16, 0x89e: 0x17, 0x89f: 0x18, + 0x8a0: 0x07, 0x8a1: 0x07, 0x8a2: 0x07, 0x8a3: 0x07, 0x8a4: 0x07, 0x8a5: 0x07, 0x8a6: 0x07, 0x8a7: 0x07, + 0x8a8: 0x07, 0x8a9: 0x07, 0x8aa: 0x19, 0x8ab: 0x1a, 0x8ac: 0x1b, 0x8ad: 0x07, 0x8ae: 0x1c, 0x8af: 0x1d, + 0x8b0: 0x07, 0x8b1: 0x1e, 0x8b2: 0x1f, 0x8b3: 0x0a, 0x8b4: 0x0a, 0x8b5: 0x0a, 0x8b6: 0x0a, 0x8b7: 0x0a, + 0x8b8: 0x0a, 0x8b9: 0x0a, 0x8ba: 0x0a, 0x8bb: 0x0a, 0x8bc: 0x0a, 0x8bd: 0x0a, 0x8be: 0x0a, 0x8bf: 0x0a, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0a, 0x8c1: 0x0a, 0x8c2: 0x0a, 0x8c3: 0x0a, 0x8c4: 0x0a, 0x8c5: 0x0a, 0x8c6: 0x0a, 0x8c7: 0x0a, + 0x8c8: 0x0a, 0x8c9: 0x0a, 0x8ca: 0x0a, 0x8cb: 0x0a, 0x8cc: 0x0a, 0x8cd: 0x0a, 0x8ce: 0x0a, 0x8cf: 0x0a, + 0x8d0: 0x0a, 0x8d1: 0x0a, 0x8d2: 0x0a, 0x8d3: 0x0a, 0x8d4: 0x0a, 0x8d5: 0x0a, 0x8d6: 0x0a, 0x8d7: 0x0a, + 0x8d8: 0x0a, 0x8d9: 0x0a, 0x8da: 0x0a, 0x8db: 0x0a, 0x8dc: 0x0a, 0x8dd: 0x0a, 0x8de: 0x0a, 0x8df: 0x0a, + 0x8e0: 0x0a, 0x8e1: 0x0a, 0x8e2: 0x0a, 0x8e3: 0x0a, 0x8e4: 0x0a, 0x8e5: 0x0a, 0x8e6: 0x0a, 0x8e7: 0x0a, + 0x8e8: 0x0a, 0x8e9: 0x0a, 0x8ea: 0x0a, 0x8eb: 0x0a, 0x8ec: 0x0a, 0x8ed: 0x0a, 0x8ee: 0x0a, 0x8ef: 0x0a, + 0x8f0: 0x0a, 0x8f1: 0x0a, 0x8f2: 0x0a, 0x8f3: 0x0a, 0x8f4: 0x0a, 0x8f5: 0x0a, 0x8f6: 0x0a, 0x8f7: 0x0a, + 0x8f8: 0x0a, 0x8f9: 0x0a, 0x8fa: 0x0a, 0x8fb: 0x0a, 0x8fc: 0x0a, 0x8fd: 0x0a, 0x8fe: 0x0a, 0x8ff: 0x0a, + // Block 0x24, offset 0x900 + 0x900: 0x1b0, 0x901: 0x1b1, 0x902: 0x100, 0x903: 0x100, 0x904: 0x1b2, 0x905: 0x1b2, 0x906: 0x1b2, 0x907: 0x1b3, + 0x908: 0x100, 0x909: 0x100, 0x90a: 0x100, 0x90b: 0x100, 0x90c: 0x100, 0x90d: 0x100, 0x90e: 0x100, 0x90f: 0x100, + 0x910: 0x100, 0x911: 0x100, 0x912: 0x100, 0x913: 0x100, 0x914: 0x100, 0x915: 0x100, 0x916: 0x100, 0x917: 0x100, + 0x918: 0x100, 0x919: 0x100, 0x91a: 0x100, 0x91b: 0x100, 0x91c: 0x100, 0x91d: 0x100, 0x91e: 0x100, 0x91f: 0x100, + 0x920: 0x100, 0x921: 0x100, 0x922: 0x100, 0x923: 0x100, 0x924: 0x100, 0x925: 0x100, 0x926: 0x100, 0x927: 0x100, + 0x928: 0x100, 0x929: 0x100, 0x92a: 0x100, 0x92b: 0x100, 0x92c: 0x100, 0x92d: 0x100, 0x92e: 0x100, 0x92f: 0x100, + 0x930: 0x100, 0x931: 0x100, 0x932: 0x100, 0x933: 0x100, 0x934: 0x100, 0x935: 0x100, 0x936: 0x100, 0x937: 0x100, + 0x938: 0x100, 0x939: 0x100, 0x93a: 0x100, 0x93b: 0x100, 0x93c: 0x100, 0x93d: 0x100, 0x93e: 0x100, 0x93f: 0x100, + // Block 0x25, offset 0x940 + 0x940: 0x0a, 0x941: 0x0a, 0x942: 0x0a, 0x943: 0x0a, 0x944: 0x0a, 0x945: 0x0a, 0x946: 0x0a, 0x947: 0x0a, + 0x948: 0x0a, 0x949: 0x0a, 0x94a: 0x0a, 0x94b: 0x0a, 0x94c: 0x0a, 0x94d: 0x0a, 0x94e: 0x0a, 0x94f: 0x0a, + 0x950: 0x0a, 0x951: 0x0a, 0x952: 0x0a, 0x953: 0x0a, 0x954: 0x0a, 0x955: 0x0a, 0x956: 0x0a, 0x957: 0x0a, + 0x958: 0x0a, 0x959: 0x0a, 0x95a: 0x0a, 0x95b: 0x0a, 0x95c: 0x0a, 0x95d: 0x0a, 0x95e: 0x0a, 0x95f: 0x0a, + 0x960: 0x22, 0x961: 0x0a, 0x962: 0x0a, 0x963: 0x0a, 0x964: 0x0a, 0x965: 0x0a, 0x966: 0x0a, 0x967: 0x0a, + 0x968: 0x0a, 0x969: 0x0a, 0x96a: 0x0a, 0x96b: 0x0a, 0x96c: 0x0a, 0x96d: 0x0a, 0x96e: 0x0a, 0x96f: 0x0a, + 0x970: 0x0a, 0x971: 0x0a, 0x972: 0x0a, 0x973: 0x0a, 0x974: 0x0a, 0x975: 0x0a, 0x976: 0x0a, 0x977: 0x0a, + 0x978: 0x0a, 0x979: 0x0a, 0x97a: 0x0a, 0x97b: 0x0a, 0x97c: 0x0a, 0x97d: 0x0a, 0x97e: 0x0a, 0x97f: 0x0a, + // Block 0x26, offset 0x980 + 0x980: 0x0a, 0x981: 0x0a, 0x982: 0x0a, 0x983: 0x0a, 0x984: 0x0a, 0x985: 0x0a, 0x986: 0x0a, 0x987: 0x0a, + 0x988: 0x0a, 0x989: 0x0a, 0x98a: 0x0a, 0x98b: 0x0a, 0x98c: 0x0a, 0x98d: 0x0a, 0x98e: 0x0a, 0x98f: 0x0a, +} + +// idnaSparseOffset: 303 entries, 606 bytes +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x7e, 0x87, 0x97, 0xa6, 0xb1, 0xbe, 0xcf, 0xd9, 0xe0, 0xed, 0xfe, 0x105, 0x110, 0x11f, 0x12d, 0x137, 0x139, 0x13e, 0x141, 0x144, 0x146, 0x152, 0x15d, 0x165, 0x16b, 0x171, 0x176, 0x17b, 0x17e, 0x182, 0x188, 0x18d, 0x198, 0x1a2, 0x1a8, 0x1b9, 0x1c4, 0x1c7, 0x1cf, 0x1d2, 0x1df, 0x1e7, 0x1eb, 0x1f2, 0x1fa, 0x20a, 0x216, 0x219, 0x223, 0x22f, 0x23b, 0x247, 0x24f, 0x254, 0x261, 0x272, 0x27d, 0x282, 0x28b, 0x293, 0x299, 0x29e, 0x2a1, 0x2a5, 0x2ab, 0x2af, 0x2b3, 0x2b7, 0x2bc, 0x2c4, 0x2cb, 0x2d6, 0x2e0, 0x2e4, 0x2e7, 0x2ed, 0x2f1, 0x2f3, 0x2f6, 0x2f8, 0x2fb, 0x305, 0x308, 0x317, 0x31b, 0x31f, 0x321, 0x32a, 0x32e, 0x333, 0x338, 0x33e, 0x34e, 0x354, 0x358, 0x367, 0x36c, 0x374, 0x37e, 0x389, 0x391, 0x3a2, 0x3ab, 0x3bb, 0x3c8, 0x3d4, 0x3d9, 0x3e6, 0x3ea, 0x3ef, 0x3f1, 0x3f3, 0x3f7, 0x3f9, 0x3fd, 0x406, 0x40c, 0x410, 0x420, 0x42a, 0x42f, 0x432, 0x438, 0x43f, 0x444, 0x448, 0x44e, 0x453, 0x45c, 0x461, 0x467, 0x46e, 0x475, 0x47c, 0x480, 0x483, 0x488, 0x494, 0x49a, 0x49f, 0x4a6, 0x4ae, 0x4b3, 0x4b7, 0x4c7, 0x4ce, 0x4d2, 0x4d6, 0x4dd, 0x4df, 0x4e2, 0x4e5, 0x4e9, 0x4f2, 0x4f6, 0x4fe, 0x501, 0x509, 0x514, 0x523, 0x52f, 0x535, 0x542, 0x54e, 0x556, 0x55f, 0x56a, 0x571, 0x580, 0x58d, 0x591, 0x59e, 0x5a7, 0x5ab, 0x5ba, 0x5c2, 0x5cd, 0x5d6, 0x5dc, 0x5e4, 0x5ed, 0x5f9, 0x5fc, 0x608, 0x60b, 0x614, 0x617, 0x61c, 0x625, 0x62a, 0x637, 0x642, 0x64b, 0x656, 0x659, 0x65c, 0x666, 0x66f, 0x67b, 0x688, 0x695, 0x6a3, 0x6aa, 0x6b5, 0x6bc, 0x6c0, 0x6c4, 0x6c7, 0x6cc, 0x6cf, 0x6d2, 0x6d6, 0x6d9, 0x6de, 0x6e5, 0x6e8, 0x6f0, 0x6f4, 0x6ff, 0x702, 0x705, 0x708, 0x70e, 0x714, 0x71d, 0x720, 0x723, 0x726, 0x72e, 0x733, 0x73c, 0x73f, 0x744, 0x74e, 0x752, 0x756, 0x759, 0x75c, 0x760, 0x76f, 0x77b, 0x77f, 0x784, 0x789, 0x78e, 0x792, 0x797, 0x7a0, 0x7a5, 0x7a9, 0x7af, 0x7b5, 0x7ba, 0x7c0, 0x7c6, 0x7d0, 0x7d6, 0x7df, 0x7e2, 0x7e5, 0x7e9, 0x7ed, 0x7f1, 0x7f7, 0x7fd, 0x802, 0x805, 0x815, 0x81c, 0x820, 0x827, 0x82b, 0x831, 0x838, 0x83f, 0x845, 0x84e, 0x852, 0x860, 0x863, 0x866, 0x86a, 0x86e, 0x871, 0x875, 0x878, 0x87d, 0x87f, 0x881} + +// idnaSparseValues: 2180 entries, 8720 bytes +var idnaSparseValues = [2180]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0000, lo: 0x07}, + {value: 0xe105, lo: 0x80, hi: 0x96}, + {value: 0x0018, lo: 0x97, hi: 0x97}, + {value: 0xe105, lo: 0x98, hi: 0x9e}, + {value: 0x001f, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbf}, + // Block 0x1, offset 0x8 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0xe01d, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0335, lo: 0x83, hi: 0x83}, + {value: 0x034d, lo: 0x84, hi: 0x84}, + {value: 0x0365, lo: 0x85, hi: 0x85}, + {value: 0xe00d, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0xe00d, lo: 0x88, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x89}, + {value: 0xe00d, lo: 0x8a, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe00d, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0x8d}, + {value: 0xe00d, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0xbf}, + // Block 0x2, offset 0x19 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x00a9, lo: 0xb0, hi: 0xb0}, + {value: 0x037d, lo: 0xb1, hi: 0xb1}, + {value: 0x00b1, lo: 0xb2, hi: 0xb2}, + {value: 0x00b9, lo: 0xb3, hi: 0xb3}, + {value: 0x034d, lo: 0xb4, hi: 0xb4}, + {value: 0x0395, lo: 0xb5, hi: 0xb5}, + {value: 0xe1bd, lo: 0xb6, hi: 0xb6}, + {value: 0x00c1, lo: 0xb7, hi: 0xb7}, + {value: 0x00c9, lo: 0xb8, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbf}, + // Block 0x3, offset 0x25 + {value: 0x0000, lo: 0x01}, + {value: 0x3308, lo: 0x80, hi: 0xbf}, + // Block 0x4, offset 0x27 + {value: 0x0000, lo: 0x04}, + {value: 0x03f5, lo: 0x80, hi: 0x8f}, + {value: 0xe105, lo: 0x90, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x5, offset 0x2c + {value: 0x0000, lo: 0x06}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x0545, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x0008, lo: 0x99, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x6, offset 0x33 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0131, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0018, lo: 0x89, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x3308, lo: 0x91, hi: 0xbd}, + {value: 0x0818, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x7, offset 0x3e + {value: 0x0000, lo: 0x0b}, + {value: 0x0818, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x82}, + {value: 0x0818, lo: 0x83, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x85}, + {value: 0x0818, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xae}, + {value: 0x0808, lo: 0xaf, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x8, offset 0x4a + {value: 0x0000, lo: 0x03}, + {value: 0x0a08, lo: 0x80, hi: 0x87}, + {value: 0x0c08, lo: 0x88, hi: 0x99}, + {value: 0x0a08, lo: 0x9a, hi: 0xbf}, + // Block 0x9, offset 0x4e + {value: 0x0000, lo: 0x0e}, + {value: 0x3308, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0c08, lo: 0x8d, hi: 0x8d}, + {value: 0x0a08, lo: 0x8e, hi: 0x98}, + {value: 0x0c08, lo: 0x99, hi: 0x9b}, + {value: 0x0a08, lo: 0x9c, hi: 0xaa}, + {value: 0x0c08, lo: 0xab, hi: 0xac}, + {value: 0x0a08, lo: 0xad, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb1}, + {value: 0x0a08, lo: 0xb2, hi: 0xb2}, + {value: 0x0c08, lo: 0xb3, hi: 0xb4}, + {value: 0x0a08, lo: 0xb5, hi: 0xb7}, + {value: 0x0c08, lo: 0xb8, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbf}, + // Block 0xa, offset 0x5d + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xb0}, + {value: 0x0808, lo: 0xb1, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xb, offset 0x62 + {value: 0x0000, lo: 0x09}, + {value: 0x0808, lo: 0x80, hi: 0x89}, + {value: 0x0a08, lo: 0x8a, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xb3}, + {value: 0x0808, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x0818, lo: 0xbe, hi: 0xbf}, + // Block 0xc, offset 0x6c + {value: 0x0000, lo: 0x0b}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x99}, + {value: 0x0808, lo: 0x9a, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa3}, + {value: 0x0808, lo: 0xa4, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa7}, + {value: 0x0808, lo: 0xa8, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0818, lo: 0xb0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xd, offset 0x78 + {value: 0x0000, lo: 0x05}, + {value: 0x0a08, lo: 0x80, hi: 0x88}, + {value: 0x0808, lo: 0x89, hi: 0x89}, + {value: 0x3308, lo: 0x8a, hi: 0xa1}, + {value: 0x0840, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xbf}, + // Block 0xe, offset 0x7e + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0xf, offset 0x87 + {value: 0x0000, lo: 0x0f}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x85}, + {value: 0x3008, lo: 0x86, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x3008, lo: 0x8a, hi: 0x8c}, + {value: 0x3b08, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x10, offset 0x97 + {value: 0x0000, lo: 0x0e}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x11, offset 0xa6 + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xba}, + {value: 0x3b08, lo: 0xbb, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x12, offset 0xb1 + {value: 0x0000, lo: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x13, offset 0xbe + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x89}, + {value: 0x3b08, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8e}, + {value: 0x3008, lo: 0x8f, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x3008, lo: 0x98, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x14, offset 0xcf + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb2}, + {value: 0x01f1, lo: 0xb3, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb9}, + {value: 0x3b08, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x15, offset 0xd9 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x8e}, + {value: 0x0018, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0xbf}, + // Block 0x16, offset 0xe0 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0201, lo: 0x9c, hi: 0x9c}, + {value: 0x0209, lo: 0x9d, hi: 0x9d}, + {value: 0x0008, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x17, offset 0xed + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe03d, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xb8}, + {value: 0x3308, lo: 0xb9, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x18, offset 0xfe + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // Block 0x19, offset 0x105 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x3008, lo: 0xab, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xb0}, + {value: 0x3008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x1a, offset 0x110 + {value: 0x0000, lo: 0x0e}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x3008, lo: 0x96, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x3308, lo: 0x9e, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xa1}, + {value: 0x3008, lo: 0xa2, hi: 0xa4}, + {value: 0x0008, lo: 0xa5, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xbf}, + // Block 0x1b, offset 0x11f + {value: 0x0000, lo: 0x0d}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x8c}, + {value: 0x3308, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x8e}, + {value: 0x3008, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x3008, lo: 0x9a, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x1c, offset 0x12d + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x86}, + {value: 0x055d, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8c}, + {value: 0x055d, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbb}, + {value: 0xe105, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0x1d, offset 0x137 + {value: 0x0000, lo: 0x01}, + {value: 0x0018, lo: 0x80, hi: 0xbf}, + // Block 0x1e, offset 0x139 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa0}, + {value: 0x2018, lo: 0xa1, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x1f, offset 0x13e + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa7}, + {value: 0x2018, lo: 0xa8, hi: 0xbf}, + // Block 0x20, offset 0x141 + {value: 0x0000, lo: 0x02}, + {value: 0x2018, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0xbf}, + // Block 0x21, offset 0x144 + {value: 0x0000, lo: 0x01}, + {value: 0x0008, lo: 0x80, hi: 0xbf}, + // Block 0x22, offset 0x146 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x23, offset 0x152 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x24, offset 0x15d + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x25, offset 0x165 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x26, offset 0x16b + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x27, offset 0x171 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x28, offset 0x176 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x29, offset 0x17b + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x2a, offset 0x17e + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xbf}, + // Block 0x2b, offset 0x182 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x2c, offset 0x188 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x2d, offset 0x18d + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x3b08, lo: 0x94, hi: 0x94}, + {value: 0x3808, lo: 0x95, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x9e}, + {value: 0x0008, lo: 0x9f, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3808, lo: 0xb4, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x2e, offset 0x198 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x2f, offset 0x1a2 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xb3}, + {value: 0x3340, lo: 0xb4, hi: 0xb5}, + {value: 0x3008, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x30, offset 0x1a8 + {value: 0x0000, lo: 0x10}, + {value: 0x3008, lo: 0x80, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x88}, + {value: 0x3308, lo: 0x89, hi: 0x91}, + {value: 0x3b08, lo: 0x92, hi: 0x92}, + {value: 0x3308, lo: 0x93, hi: 0x93}, + {value: 0x0018, lo: 0x94, hi: 0x96}, + {value: 0x0008, lo: 0x97, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x31, offset 0x1b9 + {value: 0x0000, lo: 0x0a}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x86}, + {value: 0x0218, lo: 0x87, hi: 0x87}, + {value: 0x0018, lo: 0x88, hi: 0x8a}, + {value: 0x33c0, lo: 0x8b, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x33c0, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xbf}, + // Block 0x32, offset 0x1c4 + {value: 0x0000, lo: 0x02}, + {value: 0x0208, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x33, offset 0x1c7 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x0208, lo: 0x87, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xa9}, + {value: 0x0208, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x34, offset 0x1cf + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x35, offset 0x1d2 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb8}, + {value: 0x3308, lo: 0xb9, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x36, offset 0x1df + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x37, offset 0x1e7 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x38, offset 0x1eb + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0028, lo: 0x9a, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xbf}, + // Block 0x39, offset 0x1f2 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x3308, lo: 0x97, hi: 0x98}, + {value: 0x3008, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x3a, offset 0x1fa + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x94}, + {value: 0x3008, lo: 0x95, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3b08, lo: 0xa0, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xac}, + {value: 0x3008, lo: 0xad, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x3b, offset 0x20a + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xbd}, + {value: 0x3318, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x3c, offset 0x216 + {value: 0x0000, lo: 0x02}, + {value: 0x3308, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0xbf}, + // Block 0x3d, offset 0x219 + {value: 0x0000, lo: 0x09}, + {value: 0x3308, lo: 0x80, hi: 0x83}, + {value: 0x3008, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbf}, + // Block 0x3e, offset 0x223 + {value: 0x0000, lo: 0x0b}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x3808, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x3f, offset 0x22f + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa9}, + {value: 0x3808, lo: 0xaa, hi: 0xaa}, + {value: 0x3b08, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xbf}, + // Block 0x40, offset 0x23b + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa9}, + {value: 0x3008, lo: 0xaa, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb1}, + {value: 0x3808, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbf}, + // Block 0x41, offset 0x247 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x3008, lo: 0xa4, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbf}, + // Block 0x42, offset 0x24f + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x43, offset 0x254 + {value: 0x0000, lo: 0x0c}, + {value: 0x02a9, lo: 0x80, hi: 0x80}, + {value: 0x02b1, lo: 0x81, hi: 0x81}, + {value: 0x02b9, lo: 0x82, hi: 0x82}, + {value: 0x02c1, lo: 0x83, hi: 0x83}, + {value: 0x02c9, lo: 0x84, hi: 0x85}, + {value: 0x02d1, lo: 0x86, hi: 0x86}, + {value: 0x02d9, lo: 0x87, hi: 0x87}, + {value: 0x057d, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x059d, lo: 0x90, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbc}, + {value: 0x059d, lo: 0xbd, hi: 0xbf}, + // Block 0x44, offset 0x261 + {value: 0x0000, lo: 0x10}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x92}, + {value: 0x0018, lo: 0x93, hi: 0x93}, + {value: 0x3308, lo: 0x94, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa8}, + {value: 0x0008, lo: 0xa9, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x3008, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x45, offset 0x272 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x87}, + {value: 0xe045, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0xe045, lo: 0x98, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0xe045, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbf}, + // Block 0x46, offset 0x27d + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x8f}, + {value: 0x3318, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x47, offset 0x282 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x88}, + {value: 0x0851, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x48, offset 0x28b + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0859, lo: 0xac, hi: 0xac}, + {value: 0x0861, lo: 0xad, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xae}, + {value: 0x0869, lo: 0xaf, hi: 0xaf}, + {value: 0x0871, lo: 0xb0, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x49, offset 0x293 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x9f}, + {value: 0x0080, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xad}, + {value: 0x0080, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x4a, offset 0x299 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xa8}, + {value: 0x09dd, lo: 0xa9, hi: 0xa9}, + {value: 0x09fd, lo: 0xaa, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xbf}, + // Block 0x4b, offset 0x29e + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0x4c, offset 0x2a1 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0929, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x4d, offset 0x2a5 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0e7e, lo: 0xb4, hi: 0xb4}, + {value: 0x0932, lo: 0xb5, hi: 0xb5}, + {value: 0x0e9e, lo: 0xb6, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x4e, offset 0x2ab + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9b}, + {value: 0x0939, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0xbf}, + // Block 0x4f, offset 0x2af + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x50, offset 0x2b3 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x96}, + {value: 0x0018, lo: 0x97, hi: 0xbf}, + // Block 0x51, offset 0x2b7 + {value: 0x0000, lo: 0x04}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x03f5, lo: 0x90, hi: 0x9f}, + {value: 0x0ebd, lo: 0xa0, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x52, offset 0x2bc + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x53, offset 0x2c4 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xae}, + {value: 0xe075, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0x54, offset 0x2cb + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x55, offset 0x2d6 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xbf}, + // Block 0x56, offset 0x2e0 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x57, offset 0x2e4 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0x58, offset 0x2e7 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9e}, + {value: 0x0ef5, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x59, offset 0x2ed + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb2}, + {value: 0x0f15, lo: 0xb3, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x5a, offset 0x2f1 + {value: 0x0020, lo: 0x01}, + {value: 0x0f35, lo: 0x80, hi: 0xbf}, + // Block 0x5b, offset 0x2f3 + {value: 0x0020, lo: 0x02}, + {value: 0x1735, lo: 0x80, hi: 0x8f}, + {value: 0x1915, lo: 0x90, hi: 0xbf}, + // Block 0x5c, offset 0x2f6 + {value: 0x0020, lo: 0x01}, + {value: 0x1f15, lo: 0x80, hi: 0xbf}, + // Block 0x5d, offset 0x2f8 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x5e, offset 0x2fb + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x3308, lo: 0x99, hi: 0x9a}, + {value: 0x096a, lo: 0x9b, hi: 0x9b}, + {value: 0x0972, lo: 0x9c, hi: 0x9c}, + {value: 0x0008, lo: 0x9d, hi: 0x9e}, + {value: 0x0979, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x5f, offset 0x305 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x0981, lo: 0xbf, hi: 0xbf}, + // Block 0x60, offset 0x308 + {value: 0x0000, lo: 0x0e}, + {value: 0x0040, lo: 0x80, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xb0}, + {value: 0x2a35, lo: 0xb1, hi: 0xb1}, + {value: 0x2a55, lo: 0xb2, hi: 0xb2}, + {value: 0x2a75, lo: 0xb3, hi: 0xb3}, + {value: 0x2a95, lo: 0xb4, hi: 0xb4}, + {value: 0x2a75, lo: 0xb5, hi: 0xb5}, + {value: 0x2ab5, lo: 0xb6, hi: 0xb6}, + {value: 0x2ad5, lo: 0xb7, hi: 0xb7}, + {value: 0x2af5, lo: 0xb8, hi: 0xb9}, + {value: 0x2b15, lo: 0xba, hi: 0xbb}, + {value: 0x2b35, lo: 0xbc, hi: 0xbd}, + {value: 0x2b15, lo: 0xbe, hi: 0xbf}, + // Block 0x61, offset 0x317 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x62, offset 0x31b + {value: 0x0008, lo: 0x03}, + {value: 0x098a, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0a82, lo: 0xa0, hi: 0xbf}, + // Block 0x63, offset 0x31f + {value: 0x0008, lo: 0x01}, + {value: 0x0d19, lo: 0x80, hi: 0xbf}, + // Block 0x64, offset 0x321 + {value: 0x0008, lo: 0x08}, + {value: 0x0f19, lo: 0x80, hi: 0xb0}, + {value: 0x4045, lo: 0xb1, hi: 0xb1}, + {value: 0x10a1, lo: 0xb2, hi: 0xb3}, + {value: 0x4065, lo: 0xb4, hi: 0xb4}, + {value: 0x10b1, lo: 0xb5, hi: 0xb7}, + {value: 0x4085, lo: 0xb8, hi: 0xb8}, + {value: 0x4085, lo: 0xb9, hi: 0xb9}, + {value: 0x10c9, lo: 0xba, hi: 0xbf}, + // Block 0x65, offset 0x32a + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x66, offset 0x32e + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x67, offset 0x333 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xbf}, + // Block 0x68, offset 0x338 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb1}, + {value: 0x0018, lo: 0xb2, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x69, offset 0x33e + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0x85}, + {value: 0x3b08, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x3308, lo: 0x8b, hi: 0x8b}, + {value: 0x0008, lo: 0x8c, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xab}, + {value: 0x3b08, lo: 0xac, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x6a, offset 0x34e + {value: 0x0000, lo: 0x05}, + {value: 0x0208, lo: 0x80, hi: 0xb1}, + {value: 0x0108, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x6b, offset 0x354 + {value: 0x0000, lo: 0x03}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xbf}, + // Block 0x6c, offset 0x358 + {value: 0x0000, lo: 0x0e}, + {value: 0x3008, lo: 0x80, hi: 0x83}, + {value: 0x3b08, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xba}, + {value: 0x0008, lo: 0xbb, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x6d, offset 0x367 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x6e, offset 0x36c + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x91}, + {value: 0x3008, lo: 0x92, hi: 0x92}, + {value: 0x3808, lo: 0x93, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x6f, offset 0x374 + {value: 0x0000, lo: 0x09}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb9}, + {value: 0x3008, lo: 0xba, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x70, offset 0x37e + {value: 0x0000, lo: 0x0a}, + {value: 0x3808, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x71, offset 0x389 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x72, offset 0x391 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x8b}, + {value: 0x3308, lo: 0x8c, hi: 0x8c}, + {value: 0x3008, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbd}, + {value: 0x0008, lo: 0xbe, hi: 0xbf}, + // Block 0x73, offset 0x3a2 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x74, offset 0x3ab + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x9a}, + {value: 0x0008, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xaa}, + {value: 0x3008, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb5}, + {value: 0x3b08, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x75, offset 0x3bb + {value: 0x0000, lo: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x90}, + {value: 0x0008, lo: 0x91, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x76, offset 0x3c8 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x449d, lo: 0x9c, hi: 0x9c}, + {value: 0x44b5, lo: 0x9d, hi: 0x9d}, + {value: 0x0941, lo: 0x9e, hi: 0x9e}, + {value: 0xe06d, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa8}, + {value: 0x13f9, lo: 0xa9, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x44cd, lo: 0xb0, hi: 0xbf}, + // Block 0x77, offset 0x3d4 + {value: 0x0000, lo: 0x04}, + {value: 0x44ed, lo: 0x80, hi: 0x8f}, + {value: 0x450d, lo: 0x90, hi: 0x9f}, + {value: 0x452d, lo: 0xa0, hi: 0xaf}, + {value: 0x450d, lo: 0xb0, hi: 0xbf}, + // Block 0x78, offset 0x3d9 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3b08, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x79, offset 0x3e6 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x7a, offset 0x3ea + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x7b, offset 0x3ef + {value: 0x0000, lo: 0x01}, + {value: 0x0040, lo: 0x80, hi: 0xbf}, + // Block 0x7c, offset 0x3f1 + {value: 0x0020, lo: 0x01}, + {value: 0x454d, lo: 0x80, hi: 0xbf}, + // Block 0x7d, offset 0x3f3 + {value: 0x0020, lo: 0x03}, + {value: 0x4d4d, lo: 0x80, hi: 0x94}, + {value: 0x4b0d, lo: 0x95, hi: 0x95}, + {value: 0x4fed, lo: 0x96, hi: 0xbf}, + // Block 0x7e, offset 0x3f7 + {value: 0x0020, lo: 0x01}, + {value: 0x552d, lo: 0x80, hi: 0xbf}, + // Block 0x7f, offset 0x3f9 + {value: 0x0020, lo: 0x03}, + {value: 0x5d2d, lo: 0x80, hi: 0x84}, + {value: 0x568d, lo: 0x85, hi: 0x85}, + {value: 0x5dcd, lo: 0x86, hi: 0xbf}, + // Block 0x80, offset 0x3fd + {value: 0x0020, lo: 0x08}, + {value: 0x6b8d, lo: 0x80, hi: 0x8f}, + {value: 0x6d4d, lo: 0x90, hi: 0x90}, + {value: 0x6d8d, lo: 0x91, hi: 0xab}, + {value: 0x1401, lo: 0xac, hi: 0xac}, + {value: 0x70ed, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x710d, lo: 0xb0, hi: 0xbf}, + // Block 0x81, offset 0x406 + {value: 0x0020, lo: 0x05}, + {value: 0x730d, lo: 0x80, hi: 0xad}, + {value: 0x656d, lo: 0xae, hi: 0xae}, + {value: 0x78cd, lo: 0xaf, hi: 0xb5}, + {value: 0x6f8d, lo: 0xb6, hi: 0xb6}, + {value: 0x79ad, lo: 0xb7, hi: 0xbf}, + // Block 0x82, offset 0x40c + {value: 0x0008, lo: 0x03}, + {value: 0x1751, lo: 0x80, hi: 0x82}, + {value: 0x1741, lo: 0x83, hi: 0x83}, + {value: 0x1769, lo: 0x84, hi: 0xbf}, + // Block 0x83, offset 0x410 + {value: 0x0008, lo: 0x0f}, + {value: 0x1d81, lo: 0x80, hi: 0x83}, + {value: 0x1d99, lo: 0x84, hi: 0x85}, + {value: 0x1da1, lo: 0x86, hi: 0x87}, + {value: 0x1da9, lo: 0x88, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x1de9, lo: 0x92, hi: 0x97}, + {value: 0x1e11, lo: 0x98, hi: 0x9c}, + {value: 0x1e31, lo: 0x9d, hi: 0xb3}, + {value: 0x1d71, lo: 0xb4, hi: 0xb4}, + {value: 0x1d81, lo: 0xb5, hi: 0xb5}, + {value: 0x1ee9, lo: 0xb6, hi: 0xbb}, + {value: 0x1f09, lo: 0xbc, hi: 0xbc}, + {value: 0x1ef9, lo: 0xbd, hi: 0xbd}, + {value: 0x1f19, lo: 0xbe, hi: 0xbf}, + // Block 0x84, offset 0x420 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x0008, lo: 0xbc, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x85, offset 0x42a + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0x86, offset 0x42f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x87, offset 0x432 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x88, offset 0x438 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x89, offset 0x43f + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x8a, offset 0x444 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x8b, offset 0x448 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x8c, offset 0x44e + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xbf}, + // Block 0x8d, offset 0x453 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x8e, offset 0x45c + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x8f, offset 0x461 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x90, offset 0x467 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x97}, + {value: 0x8b0d, lo: 0x98, hi: 0x9f}, + {value: 0x8b25, lo: 0xa0, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xbf}, + // Block 0x91, offset 0x46e + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x8b25, lo: 0xb0, hi: 0xb7}, + {value: 0x8b0d, lo: 0xb8, hi: 0xbf}, + // Block 0x92, offset 0x475 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x93, offset 0x47c + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x94, offset 0x480 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x95, offset 0x483 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xbf}, + // Block 0x96, offset 0x488 + {value: 0x0000, lo: 0x0b}, + {value: 0x0808, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0808, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0808, lo: 0x8a, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb6}, + {value: 0x0808, lo: 0xb7, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbb}, + {value: 0x0808, lo: 0xbc, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x0808, lo: 0xbf, hi: 0xbf}, + // Block 0x97, offset 0x494 + {value: 0x0000, lo: 0x05}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x96}, + {value: 0x0818, lo: 0x97, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb6}, + {value: 0x0818, lo: 0xb7, hi: 0xbf}, + // Block 0x98, offset 0x49a + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa6}, + {value: 0x0818, lo: 0xa7, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x99, offset 0x49f + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb3}, + {value: 0x0808, lo: 0xb4, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xba}, + {value: 0x0818, lo: 0xbb, hi: 0xbf}, + // Block 0x9a, offset 0x4a6 + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0818, lo: 0x96, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbe}, + {value: 0x0818, lo: 0xbf, hi: 0xbf}, + // Block 0x9b, offset 0x4ae + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbb}, + {value: 0x0818, lo: 0xbc, hi: 0xbd}, + {value: 0x0808, lo: 0xbe, hi: 0xbf}, + // Block 0x9c, offset 0x4b3 + {value: 0x0000, lo: 0x03}, + {value: 0x0818, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x0818, lo: 0x92, hi: 0xbf}, + // Block 0x9d, offset 0x4b7 + {value: 0x0000, lo: 0x0f}, + {value: 0x0808, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8b}, + {value: 0x3308, lo: 0x8c, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x94}, + {value: 0x0808, lo: 0x95, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x98}, + {value: 0x0808, lo: 0x99, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0x9e, offset 0x4c7 + {value: 0x0000, lo: 0x06}, + {value: 0x0818, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x0818, lo: 0x90, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xbc}, + {value: 0x0818, lo: 0xbd, hi: 0xbf}, + // Block 0x9f, offset 0x4ce + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0x9c}, + {value: 0x0818, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xa0, offset 0x4d2 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb8}, + {value: 0x0018, lo: 0xb9, hi: 0xbf}, + // Block 0xa1, offset 0x4d6 + {value: 0x0000, lo: 0x06}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0818, lo: 0x98, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb7}, + {value: 0x0818, lo: 0xb8, hi: 0xbf}, + // Block 0xa2, offset 0x4dd + {value: 0x0000, lo: 0x01}, + {value: 0x0808, lo: 0x80, hi: 0xbf}, + // Block 0xa3, offset 0x4df + {value: 0x0000, lo: 0x02}, + {value: 0x0808, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xa4, offset 0x4e2 + {value: 0x0000, lo: 0x02}, + {value: 0x03dd, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xa5, offset 0x4e5 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xbf}, + // Block 0xa6, offset 0x4e9 + {value: 0x0000, lo: 0x08}, + {value: 0x0908, lo: 0x80, hi: 0x80}, + {value: 0x0a08, lo: 0x81, hi: 0xa1}, + {value: 0x0c08, lo: 0xa2, hi: 0xa2}, + {value: 0x0a08, lo: 0xa3, hi: 0xa3}, + {value: 0x3308, lo: 0xa4, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0808, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xa7, offset 0x4f2 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0818, lo: 0xa0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xa8, offset 0x4f6 + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xac}, + {value: 0x0818, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0808, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xa9, offset 0x4fe + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbf}, + // Block 0xaa, offset 0x501 + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0x9c}, + {value: 0x0818, lo: 0x9d, hi: 0xa6}, + {value: 0x0808, lo: 0xa7, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0a08, lo: 0xb0, hi: 0xb2}, + {value: 0x0c08, lo: 0xb3, hi: 0xb3}, + {value: 0x0a08, lo: 0xb4, hi: 0xbf}, + // Block 0xab, offset 0x509 + {value: 0x0000, lo: 0x0a}, + {value: 0x0a08, lo: 0x80, hi: 0x84}, + {value: 0x0808, lo: 0x85, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x90}, + {value: 0x0a18, lo: 0x91, hi: 0x93}, + {value: 0x0c18, lo: 0x94, hi: 0x94}, + {value: 0x0818, lo: 0x95, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xaf}, + {value: 0x0a08, lo: 0xb0, hi: 0xb3}, + {value: 0x0c08, lo: 0xb4, hi: 0xb5}, + {value: 0x0a08, lo: 0xb6, hi: 0xbf}, + // Block 0xac, offset 0x514 + {value: 0x0000, lo: 0x0e}, + {value: 0x0a08, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x85}, + {value: 0x0818, lo: 0x86, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xaf}, + {value: 0x0a08, lo: 0xb0, hi: 0xb0}, + {value: 0x0808, lo: 0xb1, hi: 0xb1}, + {value: 0x0a08, lo: 0xb2, hi: 0xb3}, + {value: 0x0c08, lo: 0xb4, hi: 0xb6}, + {value: 0x0808, lo: 0xb7, hi: 0xb7}, + {value: 0x0a08, lo: 0xb8, hi: 0xb8}, + {value: 0x0c08, lo: 0xb9, hi: 0xba}, + {value: 0x0a08, lo: 0xbb, hi: 0xbc}, + {value: 0x0c08, lo: 0xbd, hi: 0xbd}, + {value: 0x0a08, lo: 0xbe, hi: 0xbf}, + // Block 0xad, offset 0x523 + {value: 0x0000, lo: 0x0b}, + {value: 0x0808, lo: 0x80, hi: 0x80}, + {value: 0x0a08, lo: 0x81, hi: 0x81}, + {value: 0x0c08, lo: 0x82, hi: 0x83}, + {value: 0x0a08, lo: 0x84, hi: 0x84}, + {value: 0x0818, lo: 0x85, hi: 0x88}, + {value: 0x0c18, lo: 0x89, hi: 0x89}, + {value: 0x0a18, lo: 0x8a, hi: 0x8a}, + {value: 0x0918, lo: 0x8b, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xae, offset 0x52f + {value: 0x0000, lo: 0x05}, + {value: 0x3008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xaf, offset 0x535 + {value: 0x0000, lo: 0x0c}, + {value: 0x3308, lo: 0x80, hi: 0x85}, + {value: 0x3b08, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x91}, + {value: 0x0018, lo: 0x92, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x3b08, lo: 0xb0, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xb0, offset 0x542 + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb6}, + {value: 0x3008, lo: 0xb7, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0xb1, offset 0x54e + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xb2, offset 0x556 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xb2}, + {value: 0x3b08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xbf}, + // Block 0xb3, offset 0x55f + {value: 0x0000, lo: 0x0a}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x3008, lo: 0x85, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xb4, offset 0x56a + {value: 0x0000, lo: 0x06}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xbe}, + {value: 0x3008, lo: 0xbf, hi: 0xbf}, + // Block 0xb5, offset 0x571 + {value: 0x0000, lo: 0x0e}, + {value: 0x3808, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x88}, + {value: 0x3308, lo: 0x89, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8d}, + {value: 0x3008, lo: 0x8e, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xb6, offset 0x580 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x3808, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0xb7, offset 0x58d + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0xbf}, + // Block 0xb8, offset 0x591 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0008, lo: 0x9f, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xb9, offset 0x59e + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x3308, lo: 0x9f, hi: 0x9f}, + {value: 0x3008, lo: 0xa0, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa9}, + {value: 0x3b08, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xba, offset 0x5a7 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xbb, offset 0x5ab + {value: 0x0000, lo: 0x0e}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x84}, + {value: 0x3008, lo: 0x85, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9d}, + {value: 0x3308, lo: 0x9e, hi: 0x9e}, + {value: 0x0008, lo: 0x9f, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xbf}, + // Block 0xbc, offset 0x5ba + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb8}, + {value: 0x3008, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0xbd, offset 0x5c2 + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x85}, + {value: 0x0018, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xbe, offset 0x5cd + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xbf, offset 0x5d6 + {value: 0x0000, lo: 0x05}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9b}, + {value: 0x3308, lo: 0x9c, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xc0, offset 0x5dc + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xc1, offset 0x5e4 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xc2, offset 0x5ed + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb5}, + {value: 0x3808, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xb8}, + {value: 0x0018, lo: 0xb9, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xc3, offset 0x5f9 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xc4, offset 0x5fc + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9f}, + {value: 0x3008, lo: 0xa0, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xaa}, + {value: 0x3b08, lo: 0xab, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbf}, + // Block 0xc5, offset 0x608 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xbf}, + // Block 0xc6, offset 0x60b + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0xc7, offset 0x614 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xbf}, + // Block 0xc8, offset 0x617 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0xc9, offset 0x61c + {value: 0x0000, lo: 0x08}, + {value: 0x3008, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xca, offset 0x625 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xbf}, + // Block 0xcb, offset 0x62a + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x3008, lo: 0x91, hi: 0x93}, + {value: 0x3308, lo: 0x94, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x99}, + {value: 0x3308, lo: 0x9a, hi: 0x9b}, + {value: 0x3008, lo: 0x9c, hi: 0x9f}, + {value: 0x3b08, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xa1}, + {value: 0x0018, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xa3}, + {value: 0x3008, lo: 0xa4, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xbf}, + // Block 0xcc, offset 0x637 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb8}, + {value: 0x3008, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0xcd, offset 0x642 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x3b08, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3308, lo: 0x91, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x98}, + {value: 0x3308, lo: 0x99, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0xbf}, + // Block 0xce, offset 0x64b + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x3308, lo: 0x8a, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x98}, + {value: 0x3b08, lo: 0x99, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9c}, + {value: 0x0008, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xa2}, + {value: 0x0040, lo: 0xa3, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xcf, offset 0x656 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xd0, offset 0x659 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xd1, offset 0x65c + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xd2, offset 0x666 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xbf}, + // Block 0xd3, offset 0x66f + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xa9}, + {value: 0x3308, lo: 0xaa, hi: 0xb0}, + {value: 0x3008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xd4, offset 0x67b + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0xd5, offset 0x688 + {value: 0x0000, lo: 0x0c}, + {value: 0x3308, lo: 0x80, hi: 0x83}, + {value: 0x3b08, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xbf}, + // Block 0xd6, offset 0x695 + {value: 0x0000, lo: 0x0d}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x3008, lo: 0x8a, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x92}, + {value: 0x3008, lo: 0x93, hi: 0x94}, + {value: 0x3308, lo: 0x95, hi: 0x95}, + {value: 0x3008, lo: 0x96, hi: 0x96}, + {value: 0x3b08, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xbf}, + // Block 0xd7, offset 0x6a3 + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xd8, offset 0x6aa + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0xd9, offset 0x6b5 + {value: 0x0000, lo: 0x06}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3808, lo: 0x81, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xda, offset 0x6bc + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0xdb, offset 0x6c0 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0xdc, offset 0x6c4 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xdd, offset 0x6c7 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xde, offset 0x6cc + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xdf, offset 0x6cf + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xbf}, + // Block 0xe0, offset 0x6d2 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xe1, offset 0x6d6 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x0340, lo: 0xb0, hi: 0xbf}, + // Block 0xe2, offset 0x6d9 + {value: 0x0000, lo: 0x04}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0xe3, offset 0x6de + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xe4, offset 0x6e5 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xe5, offset 0x6e8 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xe6, offset 0x6f0 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0xe7, offset 0x6f4 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0xe8, offset 0x6ff + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xe9, offset 0x702 + {value: 0x0000, lo: 0x02}, + {value: 0xe105, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0xea, offset 0x705 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // Block 0xeb, offset 0x708 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3008, lo: 0x91, hi: 0xbf}, + // Block 0xec, offset 0x70e + {value: 0x0000, lo: 0x05}, + {value: 0x3008, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xed, offset 0x714 + {value: 0x0000, lo: 0x08}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa1}, + {value: 0x0018, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xa3}, + {value: 0x3308, lo: 0xa4, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xee, offset 0x71d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0xef, offset 0x720 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0xf0, offset 0x723 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xf1, offset 0x726 + {value: 0x0000, lo: 0x07}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xf2, offset 0x72e + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa2}, + {value: 0x0040, lo: 0xa3, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xf3, offset 0x733 + {value: 0x0000, lo: 0x08}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0x94}, + {value: 0x0008, lo: 0x95, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xa3}, + {value: 0x0008, lo: 0xa4, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xf4, offset 0x73c + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0xf5, offset 0x73f + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0xf6, offset 0x744 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x03c0, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xbf}, + // Block 0xf7, offset 0x74e + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xbf}, + // Block 0xf8, offset 0x752 + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0xf9, offset 0x756 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xfa, offset 0x759 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xfb, offset 0x75c + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xbf}, + // Block 0xfc, offset 0x760 + {value: 0x0000, lo: 0x0e}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0x2379, lo: 0x9e, hi: 0x9e}, + {value: 0x2381, lo: 0x9f, hi: 0x9f}, + {value: 0x2389, lo: 0xa0, hi: 0xa0}, + {value: 0x2391, lo: 0xa1, hi: 0xa1}, + {value: 0x2399, lo: 0xa2, hi: 0xa2}, + {value: 0x23a1, lo: 0xa3, hi: 0xa3}, + {value: 0x23a9, lo: 0xa4, hi: 0xa4}, + {value: 0x3018, lo: 0xa5, hi: 0xa6}, + {value: 0x3318, lo: 0xa7, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xac}, + {value: 0x3018, lo: 0xad, hi: 0xb2}, + {value: 0x0340, lo: 0xb3, hi: 0xba}, + {value: 0x3318, lo: 0xbb, hi: 0xbf}, + // Block 0xfd, offset 0x76f + {value: 0x0000, lo: 0x0b}, + {value: 0x3318, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0x84}, + {value: 0x3318, lo: 0x85, hi: 0x8b}, + {value: 0x0018, lo: 0x8c, hi: 0xa9}, + {value: 0x3318, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xba}, + {value: 0x23b1, lo: 0xbb, hi: 0xbb}, + {value: 0x23b9, lo: 0xbc, hi: 0xbc}, + {value: 0x23c1, lo: 0xbd, hi: 0xbd}, + {value: 0x23c9, lo: 0xbe, hi: 0xbe}, + {value: 0x23d1, lo: 0xbf, hi: 0xbf}, + // Block 0xfe, offset 0x77b + {value: 0x0000, lo: 0x03}, + {value: 0x23d9, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0xff, offset 0x77f + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x3318, lo: 0x82, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0xbf}, + // Block 0x100, offset 0x784 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x101, offset 0x789 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x102, offset 0x78e + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0x103, offset 0x792 + {value: 0x0000, lo: 0x04}, + {value: 0x3308, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x104, offset 0x797 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x3308, lo: 0xa1, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x105, offset 0x7a0 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa4}, + {value: 0x0008, lo: 0xa5, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0x106, offset 0x7a5 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0x107, offset 0x7a9 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x108, offset 0x7af + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x8e}, + {value: 0x0018, lo: 0x8f, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0x109, offset 0x7b5 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xad}, + {value: 0x3308, lo: 0xae, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xbf}, + // Block 0x10a, offset 0x7ba + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x10b, offset 0x7c0 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x10c, offset 0x7c6 + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x10d, offset 0x7d0 + {value: 0x0000, lo: 0x05}, + {value: 0x0808, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x86}, + {value: 0x0818, lo: 0x87, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0x10e, offset 0x7d6 + {value: 0x0000, lo: 0x08}, + {value: 0x0a08, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x8a}, + {value: 0x0b08, lo: 0x8b, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0818, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x10f, offset 0x7df + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xb0}, + {value: 0x0818, lo: 0xb1, hi: 0xbf}, + // Block 0x110, offset 0x7e2 + {value: 0x0000, lo: 0x02}, + {value: 0x0818, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x111, offset 0x7e5 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0818, lo: 0x81, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x112, offset 0x7e9 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0x113, offset 0x7ed + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x114, offset 0x7f1 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x115, offset 0x7f7 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x116, offset 0x7fd + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0x2709, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0x117, offset 0x802 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xbf}, + // Block 0x118, offset 0x805 + {value: 0x0000, lo: 0x0f}, + {value: 0x2889, lo: 0x80, hi: 0x80}, + {value: 0x2891, lo: 0x81, hi: 0x81}, + {value: 0x2899, lo: 0x82, hi: 0x82}, + {value: 0x28a1, lo: 0x83, hi: 0x83}, + {value: 0x28a9, lo: 0x84, hi: 0x84}, + {value: 0x28b1, lo: 0x85, hi: 0x85}, + {value: 0x28b9, lo: 0x86, hi: 0x86}, + {value: 0x28c1, lo: 0x87, hi: 0x87}, + {value: 0x28c9, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x28d1, lo: 0x90, hi: 0x90}, + {value: 0x28d9, lo: 0x91, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xbf}, + // Block 0x119, offset 0x815 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x11a, offset 0x81c + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbf}, + // Block 0x11b, offset 0x820 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x11c, offset 0x827 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x11d, offset 0x82b + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x11e, offset 0x831 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0x11f, offset 0x838 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x120, offset 0x83f + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x121, offset 0x845 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x122, offset 0x84e + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0x93}, + {value: 0x0018, lo: 0x94, hi: 0xbf}, + // Block 0x123, offset 0x852 + {value: 0x0000, lo: 0x0d}, + {value: 0x0018, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0xaf}, + {value: 0x06e1, lo: 0xb0, hi: 0xb0}, + {value: 0x0049, lo: 0xb1, hi: 0xb1}, + {value: 0x0029, lo: 0xb2, hi: 0xb2}, + {value: 0x0031, lo: 0xb3, hi: 0xb3}, + {value: 0x06e9, lo: 0xb4, hi: 0xb4}, + {value: 0x06f1, lo: 0xb5, hi: 0xb5}, + {value: 0x06f9, lo: 0xb6, hi: 0xb6}, + {value: 0x0701, lo: 0xb7, hi: 0xb7}, + {value: 0x0709, lo: 0xb8, hi: 0xb8}, + {value: 0x0711, lo: 0xb9, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x124, offset 0x860 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x125, offset 0x863 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x126, offset 0x866 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x127, offset 0x86a + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x128, offset 0x86e + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x129, offset 0x871 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xbf}, + // Block 0x12a, offset 0x875 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x12b, offset 0x878 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0340, lo: 0x81, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0x9f}, + {value: 0x0340, lo: 0xa0, hi: 0xbf}, + // Block 0x12c, offset 0x87d + {value: 0x0000, lo: 0x01}, + {value: 0x0340, lo: 0x80, hi: 0xbf}, + // Block 0x12d, offset 0x87f + {value: 0x0000, lo: 0x01}, + {value: 0x33c0, lo: 0x80, hi: 0xbf}, + // Block 0x12e, offset 0x881 + {value: 0x0000, lo: 0x02}, + {value: 0x33c0, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, +} + +// Total table size 46723 bytes (45KiB); checksum: 4CF3143A diff --git a/vendor/golang.org/x/net/idna/trie.go b/vendor/golang.org/x/net/idna/trie.go index c4ef847e7a..4212741728 100644 --- a/vendor/golang.org/x/net/idna/trie.go +++ b/vendor/golang.org/x/net/idna/trie.go @@ -6,27 +6,6 @@ package idna -// appendMapping appends the mapping for the respective rune. isMapped must be -// true. A mapping is a categorization of a rune as defined in UTS #46. -func (c info) appendMapping(b []byte, s string) []byte { - index := int(c >> indexShift) - if c&xorBit == 0 { - s := mappings[index:] - return append(b, s[1:s[0]+1]...) - } - b = append(b, s...) - if c&inlineXOR == inlineXOR { - // TODO: support and handle two-byte inline masks - b[len(b)-1] ^= byte(index) - } else { - for p := len(b) - int(xorData[index]); p < len(b); p++ { - index++ - b[p] ^= xorData[index] - } - } - return b -} - // Sparse block handling code. type valueRange struct { diff --git a/vendor/golang.org/x/net/idna/trie12.0.0.go b/vendor/golang.org/x/net/idna/trie12.0.0.go new file mode 100644 index 0000000000..bb63f904b3 --- /dev/null +++ b/vendor/golang.org/x/net/idna/trie12.0.0.go @@ -0,0 +1,31 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// 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.16 +// +build !go1.16 + +package idna + +// appendMapping appends the mapping for the respective rune. isMapped must be +// true. A mapping is a categorization of a rune as defined in UTS #46. +func (c info) appendMapping(b []byte, s string) []byte { + index := int(c >> indexShift) + if c&xorBit == 0 { + s := mappings[index:] + return append(b, s[1:s[0]+1]...) + } + b = append(b, s...) + if c&inlineXOR == inlineXOR { + // TODO: support and handle two-byte inline masks + b[len(b)-1] ^= byte(index) + } else { + for p := len(b) - int(xorData[index]); p < len(b); p++ { + index++ + b[p] ^= xorData[index] + } + } + return b +} diff --git a/vendor/golang.org/x/net/idna/trie13.0.0.go b/vendor/golang.org/x/net/idna/trie13.0.0.go new file mode 100644 index 0000000000..7d68a8dc13 --- /dev/null +++ b/vendor/golang.org/x/net/idna/trie13.0.0.go @@ -0,0 +1,31 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// 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.16 +// +build go1.16 + +package idna + +// appendMapping appends the mapping for the respective rune. isMapped must be +// true. A mapping is a categorization of a rune as defined in UTS #46. +func (c info) appendMapping(b []byte, s string) []byte { + index := int(c >> indexShift) + if c&xorBit == 0 { + p := index + return append(b, mappings[mappingIndex[p]:mappingIndex[p+1]]...) + } + b = append(b, s...) + if c&inlineXOR == inlineXOR { + // TODO: support and handle two-byte inline masks + b[len(b)-1] ^= byte(index) + } else { + for p := len(b) - int(xorData[index]); p < len(b); p++ { + index++ + b[p] ^= xorData[index] + } + } + return b +} diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index 3156462715..8f775fafa6 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -519,7 +519,7 @@ ccflags="$@" $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || $2 ~ /^LO_(KEY|NAME)_SIZE$/ || $2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ || - $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ || + $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 ~ /^RAW_PAYLOAD_/ || @@ -624,7 +624,7 @@ ccflags="$@" $2 ~ /^MEM/ || $2 ~ /^WG/ || $2 ~ /^FIB_RULE_/ || - $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} + $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE|IOMIN$|IOOPT$|ALIGNOFF$|DISCARD|ROTATIONAL$|ZEROOUT$|GETDISKSEQ$)/ {printf("\t%s = C.%s\n", $2, $2)} $2 ~ /^__WCOREFLAG$/ {next} $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} diff --git a/vendor/golang.org/x/sys/unix/mmap_nomremap.go b/vendor/golang.org/x/sys/unix/mmap_nomremap.go new file mode 100644 index 0000000000..ca0513632e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mmap_nomremap.go @@ -0,0 +1,14 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || openbsd || solaris +// +build aix darwin dragonfly freebsd openbsd solaris + +package unix + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} diff --git a/vendor/golang.org/x/sys/unix/mremap.go b/vendor/golang.org/x/sys/unix/mremap.go new file mode 100644 index 0000000000..fa93d0aa90 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mremap.go @@ -0,0 +1,53 @@ +// 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. + +//go:build linux || netbsd +// +build linux netbsd + +package unix + +import "unsafe" + +type mremapMmapper struct { + mmapper + mremap func(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) +} + +var mapper = &mremapMmapper{ + mmapper: mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, + }, + mremap: mremap, +} + +func (m *mremapMmapper) Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) { + if newLength <= 0 || len(oldData) == 0 || len(oldData) != cap(oldData) || flags&mremapFixed != 0 { + return nil, EINVAL + } + + pOld := &oldData[cap(oldData)-1] + m.Lock() + defer m.Unlock() + bOld := m.active[pOld] + if bOld == nil || &bOld[0] != &oldData[0] { + return nil, EINVAL + } + newAddr, errno := m.mremap(uintptr(unsafe.Pointer(&bOld[0])), uintptr(len(bOld)), uintptr(newLength), flags, 0) + if errno != nil { + return nil, errno + } + bNew := unsafe.Slice((*byte)(unsafe.Pointer(newAddr)), newLength) + pNew := &bNew[cap(bNew)-1] + if flags&mremapDontunmap == 0 { + delete(m.active, pOld) + } + m.active[pNew] = bNew + return bNew, nil +} + +func Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) { + return mapper.Mremap(oldData, newLength, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go index c406ae00f4..9a6e5acacb 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -535,21 +535,6 @@ func Fsync(fd int) error { //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg //sys munmap(addr uintptr, length uintptr) (err error) - -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - //sys Madvise(b []byte, advice int) (err error) //sys Mprotect(b []byte, prot int) (err error) //sys Mlock(b []byte) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go index 7705c3270b..4217de518b 100644 --- a/vendor/golang.org/x/sys/unix/syscall_bsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -601,20 +601,6 @@ func Poll(fds []PollFd, timeout int) (n int, err error) { // Gethostuuid(uuid *byte, timeout *Timespec) (err error) // Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error) -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - //sys Madvise(b []byte, behav int) (err error) //sys Mlock(b []byte) (err error) //sys Mlockall(flags int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 206921504c..135cc3cd75 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -510,30 +510,36 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { return nil, err } - // Find size. - n := uintptr(0) - if err := sysctl(mib, nil, &n, nil, 0); err != nil { - return nil, err - } - if n == 0 { - return nil, nil - } - if n%SizeofKinfoProc != 0 { - return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) - } + for { + // Find size. + n := uintptr(0) + if err := sysctl(mib, nil, &n, nil, 0); err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + if n%SizeofKinfoProc != 0 { + return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) + } - // Read into buffer of that size. - buf := make([]KinfoProc, n/SizeofKinfoProc) - if err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil { - return nil, err - } - if n%SizeofKinfoProc != 0 { - return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) - } + // Read into buffer of that size. + buf := make([]KinfoProc, n/SizeofKinfoProc) + if err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil { + if err == ENOMEM { + // Process table grew. Try again. + continue + } + return nil, err + } + if n%SizeofKinfoProc != 0 { + return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) + } - // The actual call may return less than the original reported required - // size so ensure we deal with that. - return buf[:n/SizeofKinfoProc], nil + // The actual call may return less than the original reported required + // size so ensure we deal with that. + return buf[:n/SizeofKinfoProc], nil + } } //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 6de486befe..a730878e49 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -1885,7 +1885,7 @@ func Getpgrp() (pid int) { //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT //sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) -//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 +//sys pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Removexattr(path string, attr string) (err error) //sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) @@ -2124,21 +2124,7 @@ func writevRacedetect(iovecs []Iovec, n int) { // mmap varies by architecture; see syscall_linux_*.go. //sys munmap(addr uintptr, length uintptr) (err error) - -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - +//sys mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) //sys Madvise(b []byte, advice int) (err error) //sys Mprotect(b []byte, prot int) (err error) //sys Mlock(b []byte) (err error) @@ -2147,6 +2133,12 @@ func Munmap(b []byte) (err error) { //sys Munlock(b []byte) (err error) //sys Munlockall() (err error) +const ( + mremapFixed = MREMAP_FIXED + mremapDontunmap = MREMAP_DONTUNMAP + mremapMaymove = MREMAP_MAYMOVE +) + // Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd, // using the specified flags. func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { @@ -2446,6 +2438,39 @@ func Getresgid() (rgid, egid, sgid int) { return int(r), int(e), int(s) } +// Pselect is a wrapper around the Linux pselect6 system call. +// This version does not modify the timeout argument. +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + // Per https://man7.org/linux/man-pages/man2/select.2.html#NOTES, + // The Linux pselect6() system call modifies its timeout argument. + // [Not modifying the argument] is the behavior required by POSIX.1-2001. + var mutableTimeout *Timespec + if timeout != nil { + mutableTimeout = new(Timespec) + *mutableTimeout = *timeout + } + + // The final argument of the pselect6() system call is not a + // sigset_t * pointer, but is instead a structure + var kernelMask *sigset_argpack + if sigmask != nil { + wordBits := 32 << (^uintptr(0) >> 63) // see math.intSize + + // A sigset stores one bit per signal, + // offset by 1 (because signal 0 does not exist). + // So the number of words needed is ⌈__C_NSIG - 1 / wordBits⌉. + sigsetWords := (_C__NSIG - 1 + wordBits - 1) / (wordBits) + + sigsetBytes := uintptr(sigsetWords * (wordBits / 8)) + kernelMask = &sigset_argpack{ + ss: sigmask, + ssLen: sigsetBytes, + } + } + + return pselect6(nfd, r, w, e, mutableTimeout, kernelMask) +} + /* * Unimplemented */ @@ -2487,7 +2512,6 @@ func Getresgid() (rgid, egid, sgid int) { // MqTimedreceive // MqTimedsend // MqUnlink -// Mremap // Msgctl // Msgget // Msgrcv diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go index 5b21fcfd75..70601ce369 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -40,7 +40,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) 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 a81f5742b8..f5266689af 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -33,7 +33,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) 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 69d2d7c3db..f6ab02ec15 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go @@ -28,7 +28,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go index 76d564095e..93fe59d25d 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -31,7 +31,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) 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 35851ef70b..5e6ceee129 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -32,7 +32,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) @@ -177,3 +177,14 @@ func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error } return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) } + +//sys riscvHWProbe(pairs []RISCVHWProbePairs, cpuCount uintptr, cpus *CPUSet, flags uint) (err error) + +func RISCVHWProbe(pairs []RISCVHWProbePairs, set *CPUSet, flags uint) (err error) { + var setSize uintptr + + if set != nil { + setSize = uintptr(unsafe.Sizeof(*set)) + } + return riscvHWProbe(pairs, setSize, set, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go index 018d7d4782..ddd1ac8534 100644 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -360,6 +360,18 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { //sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) +const ( + mremapFixed = MAP_FIXED + mremapDontunmap = 0 + mremapMaymove = 0 +) + +//sys mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) = SYS_MREMAP + +func mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (uintptr, error) { + return mremapNetBSD(oldaddr, oldlength, newaddr, newlength, flags) +} + /* * Unimplemented */ @@ -564,7 +576,6 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { // mq_timedreceive // mq_timedsend // mq_unlink -// mremap // msgget // msgrcv // msgsnd diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go index b600a289d3..72d23575fa 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -716,20 +716,6 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { return } -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - // Event Ports type fileObjCookie struct { diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go index 8e48c29ec3..8bb30e7ce3 100644 --- a/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -147,6 +147,14 @@ func (m *mmapper) Munmap(data []byte) (err error) { return nil } +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + func Read(fd int, p []byte) (n int, err error) { n, err = read(fd, p) if raceenabled { 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 d3d49ec3ed..44e72edb42 100644 --- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -285,25 +285,11 @@ func Close(fd int) (err error) { return } -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - // Dummy function: there are no semantics for Madvise on z/OS func Madvise(b []byte, advice int) (err error) { return } -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - //sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A //sysnb Getegid() (egid int) //sysnb Geteuid() (uid int) diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index de936b677b..3784f402e5 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -493,6 +493,7 @@ const ( BPF_F_TEST_RUN_ON_CPU = 0x1 BPF_F_TEST_STATE_FREQ = 0x8 BPF_F_TEST_XDP_LIVE_FRAMES = 0x2 + BPF_F_XDP_DEV_BOUND_ONLY = 0x40 BPF_F_XDP_HAS_FRAGS = 0x20 BPF_H = 0x8 BPF_IMM = 0x0 @@ -826,9 +827,9 @@ const ( DM_UUID_FLAG = 0x4000 DM_UUID_LEN = 0x81 DM_VERSION = 0xc138fd00 - DM_VERSION_EXTRA = "-ioctl (2022-07-28)" + DM_VERSION_EXTRA = "-ioctl (2023-03-01)" DM_VERSION_MAJOR = 0x4 - DM_VERSION_MINOR = 0x2f + DM_VERSION_MINOR = 0x30 DM_VERSION_PATCHLEVEL = 0x0 DT_BLK = 0x6 DT_CHR = 0x2 @@ -1197,6 +1198,7 @@ const ( FAN_EVENT_METADATA_LEN = 0x18 FAN_EVENT_ON_CHILD = 0x8000000 FAN_FS_ERROR = 0x8000 + FAN_INFO = 0x20 FAN_MARK_ADD = 0x1 FAN_MARK_DONT_FOLLOW = 0x4 FAN_MARK_EVICTABLE = 0x200 @@ -1233,6 +1235,8 @@ const ( FAN_REPORT_PIDFD = 0x80 FAN_REPORT_TARGET_FID = 0x1000 FAN_REPORT_TID = 0x100 + FAN_RESPONSE_INFO_AUDIT_RULE = 0x1 + FAN_RESPONSE_INFO_NONE = 0x0 FAN_UNLIMITED_MARKS = 0x20 FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 @@ -1860,6 +1864,7 @@ const ( MEMWRITEOOB64 = 0xc0184d15 MFD_ALLOW_SEALING = 0x2 MFD_CLOEXEC = 0x1 + MFD_EXEC = 0x10 MFD_HUGETLB = 0x4 MFD_HUGE_16GB = 0x88000000 MFD_HUGE_16MB = 0x60000000 @@ -1875,6 +1880,7 @@ const ( MFD_HUGE_8MB = 0x5c000000 MFD_HUGE_MASK = 0x3f MFD_HUGE_SHIFT = 0x1a + MFD_NOEXEC_SEAL = 0x8 MINIX2_SUPER_MAGIC = 0x2468 MINIX2_SUPER_MAGIC2 = 0x2478 MINIX3_SUPER_MAGIC = 0x4d5a @@ -1898,6 +1904,9 @@ const ( MOUNT_ATTR_SIZE_VER0 = 0x20 MOUNT_ATTR_STRICTATIME = 0x20 MOUNT_ATTR__ATIME = 0x70 + MREMAP_DONTUNMAP = 0x4 + MREMAP_FIXED = 0x2 + MREMAP_MAYMOVE = 0x1 MSDOS_SUPER_MAGIC = 0x4d44 MSG_BATCH = 0x40000 MSG_CMSG_CLOEXEC = 0x40000000 @@ -2204,6 +2213,7 @@ const ( PACKET_USER = 0x6 PACKET_VERSION = 0xa PACKET_VNET_HDR = 0xf + PACKET_VNET_HDR_SZ = 0x18 PARITY_CRC16_PR0 = 0x2 PARITY_CRC16_PR0_CCITT = 0x4 PARITY_CRC16_PR1 = 0x3 @@ -2221,6 +2231,7 @@ const ( PERF_ATTR_SIZE_VER5 = 0x70 PERF_ATTR_SIZE_VER6 = 0x78 PERF_ATTR_SIZE_VER7 = 0x80 + PERF_ATTR_SIZE_VER8 = 0x88 PERF_AUX_FLAG_COLLISION = 0x8 PERF_AUX_FLAG_CORESIGHT_FORMAT_CORESIGHT = 0x0 PERF_AUX_FLAG_CORESIGHT_FORMAT_RAW = 0x100 @@ -2361,6 +2372,7 @@ const ( PR_FP_EXC_UND = 0x40000 PR_FP_MODE_FR = 0x1 PR_FP_MODE_FRE = 0x2 + PR_GET_AUXV = 0x41555856 PR_GET_CHILD_SUBREAPER = 0x25 PR_GET_DUMPABLE = 0x3 PR_GET_ENDIAN = 0x13 @@ -2369,6 +2381,8 @@ const ( PR_GET_FP_MODE = 0x2e PR_GET_IO_FLUSHER = 0x3a PR_GET_KEEPCAPS = 0x7 + PR_GET_MDWE = 0x42 + PR_GET_MEMORY_MERGE = 0x44 PR_GET_NAME = 0x10 PR_GET_NO_NEW_PRIVS = 0x27 PR_GET_PDEATHSIG = 0x2 @@ -2389,6 +2403,7 @@ const ( PR_MCE_KILL_GET = 0x22 PR_MCE_KILL_LATE = 0x0 PR_MCE_KILL_SET = 0x1 + PR_MDWE_REFUSE_EXEC_GAIN = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b PR_MTE_TAG_MASK = 0x7fff8 @@ -2423,6 +2438,8 @@ const ( PR_SET_FP_MODE = 0x2d PR_SET_IO_FLUSHER = 0x39 PR_SET_KEEPCAPS = 0x8 + PR_SET_MDWE = 0x41 + PR_SET_MEMORY_MERGE = 0x43 PR_SET_MM = 0x23 PR_SET_MM_ARG_END = 0x9 PR_SET_MM_ARG_START = 0x8 @@ -2506,6 +2523,7 @@ const ( PTRACE_GETSIGMASK = 0x420a PTRACE_GET_RSEQ_CONFIGURATION = 0x420f PTRACE_GET_SYSCALL_INFO = 0x420e + PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG = 0x4211 PTRACE_INTERRUPT = 0x4207 PTRACE_KILL = 0x8 PTRACE_LISTEN = 0x4208 @@ -2536,6 +2554,7 @@ const ( PTRACE_SETREGSET = 0x4205 PTRACE_SETSIGINFO = 0x4203 PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG = 0x4210 PTRACE_SINGLESTEP = 0x9 PTRACE_SYSCALL = 0x18 PTRACE_SYSCALL_INFO_ENTRY = 0x1 @@ -3072,7 +3091,7 @@ const ( TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 - TASKSTATS_VERSION = 0xd + TASKSTATS_VERSION = 0xe TCIFLUSH = 0x0 TCIOFF = 0x2 TCIOFLUSH = 0x2 @@ -3238,6 +3257,7 @@ const ( TP_STATUS_COPY = 0x2 TP_STATUS_CSUMNOTREADY = 0x8 TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_GSO_TCP = 0x100 TP_STATUS_KERNEL = 0x0 TP_STATUS_LOSING = 0x4 TP_STATUS_SENDING = 0x2 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 a46df0f1e5..cfb1430018 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80041270 BLKBSZSET = 0x40041271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80041272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 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 6cd4a3ea9d..df64f2d590 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 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 c7ebee24df..3025cd5b2d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80041270 BLKBSZSET = 0x40041271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80041272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 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 9d5352c3e4..09e1ffbef9 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 @@ -443,6 +452,7 @@ const ( TIOCSWINSZ = 0x5414 TIOCVHANGUP = 0x5437 TOSTOP = 0x100 + TPIDR2_MAGIC = 0x54504902 TUNATTACHFILTER = 0x401054d5 TUNDETACHFILTER = 0x401054d6 TUNGETDEVNETNS = 0x54e3 @@ -515,6 +525,7 @@ const ( XCASE = 0x4 XTABS = 0x1800 ZA_MAGIC = 0x54366345 + ZT_MAGIC = 0x5a544e01 _HIDIOCGRAWNAME = 0x80804804 _HIDIOCGRAWPHYS = 0x80404805 _HIDIOCGRAWUNIQ = 0x80404808 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 f26a164f4a..a457235407 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 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 890bc3c9b7..fee7dfb819 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40041272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 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 549f26ac64..a5b2373aea 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 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 e0365e32c1..5dde82c98a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 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 fdccce15ca..2e80ea6b33 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40041272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 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 b2205c83fa..a65dcd7cbe 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -27,22 +27,31 @@ const ( B57600 = 0x10 B576000 = 0x15 B921600 = 0x16 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40041272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1f BS1 = 0x8000 BSDLY = 0x8000 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 81aa5ad0f6..cbd34e3d89 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x10 B576000 = 0x15 B921600 = 0x16 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1f BS1 = 0x8000 BSDLY = 0x8000 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 76807a1fd4..e4afa7a317 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -27,22 +27,31 @@ const ( B57600 = 0x10 B576000 = 0x15 B921600 = 0x16 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1f BS1 = 0x8000 BSDLY = 0x8000 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 d4a5ab9e4e..44f45a039d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 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 66e65db951..74733e260f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 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 48984202c6..f5f3934b1a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -30,22 +30,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 722c29a008..a07321bed9 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -1356,7 +1356,7 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { +func pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) { r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) n = int(r0) if e1 != 0 { @@ -1868,6 +1868,17 @@ func munmap(addr uintptr, length uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldaddr), uintptr(oldlength), uintptr(newlength), uintptr(flags), uintptr(newaddr), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Madvise(b []byte, advice int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go index 0b29239583..0ab4f2ed72 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go @@ -531,3 +531,19 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func riscvHWProbe(pairs []RISCVHWProbePairs, cpuCount uintptr, cpus *CPUSet, flags uint) (err error) { + var _p0 unsafe.Pointer + if len(pairs) > 0 { + _p0 = unsafe.Pointer(&pairs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_RISCV_HWPROBE, uintptr(_p0), uintptr(len(pairs)), uintptr(cpuCount), uintptr(unsafe.Pointer(cpus)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go index cdb2af5ae0..35f499b32a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -1858,3 +1858,14 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go index 9d25f76b0b..3cda65b0da 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -1858,3 +1858,14 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go index d3f8035169..1e1fea902b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -1858,3 +1858,14 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go index 887188a529..3b77da1107 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go @@ -1858,3 +1858,14 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} 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 3e594a8c09..ef285c567b 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -251,6 +251,8 @@ const ( SYS_ACCEPT4 = 242 SYS_RECVMMSG = 243 SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_RISCV_HWPROBE = 258 + SYS_RISCV_FLUSH_ICACHE = 259 SYS_WAIT4 = 260 SYS_PRLIMIT64 = 261 SYS_FANOTIFY_INIT = 262 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 7ea465204b..e6ed7d637d 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -372,6 +372,7 @@ const ( SYS_LANDLOCK_CREATE_RULESET = 444 SYS_LANDLOCK_ADD_RULE = 445 SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index 00c3b8c20f..26ef52aafc 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -866,6 +866,11 @@ const ( POLLNVAL = 0x20 ) +type sigset_argpack struct { + ss *Sigset_t + ssLen uintptr +} + type SignalfdSiginfo struct { Signo uint32 Errno int32 @@ -1538,6 +1543,10 @@ const ( IFLA_GRO_MAX_SIZE = 0x3a IFLA_TSO_MAX_SIZE = 0x3b IFLA_TSO_MAX_SEGS = 0x3c + IFLA_ALLMULTI = 0x3d + IFLA_DEVLINK_PORT = 0x3e + IFLA_GSO_IPV4_MAX_SIZE = 0x3f + IFLA_GRO_IPV4_MAX_SIZE = 0x40 IFLA_PROTO_DOWN_REASON_UNSPEC = 0x0 IFLA_PROTO_DOWN_REASON_MASK = 0x1 IFLA_PROTO_DOWN_REASON_VALUE = 0x2 @@ -1968,7 +1977,7 @@ const ( NFT_MSG_GETFLOWTABLE = 0x17 NFT_MSG_DELFLOWTABLE = 0x18 NFT_MSG_GETRULE_RESET = 0x19 - NFT_MSG_MAX = 0x1a + NFT_MSG_MAX = 0x21 NFTA_LIST_UNSPEC = 0x0 NFTA_LIST_ELEM = 0x1 NFTA_HOOK_UNSPEC = 0x0 @@ -3651,7 +3660,7 @@ const ( ETHTOOL_MSG_PSE_GET = 0x24 ETHTOOL_MSG_PSE_SET = 0x25 ETHTOOL_MSG_RSS_GET = 0x26 - ETHTOOL_MSG_USER_MAX = 0x26 + ETHTOOL_MSG_USER_MAX = 0x2b ETHTOOL_MSG_KERNEL_NONE = 0x0 ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 @@ -3691,7 +3700,7 @@ const ( ETHTOOL_MSG_MODULE_NTF = 0x24 ETHTOOL_MSG_PSE_GET_REPLY = 0x25 ETHTOOL_MSG_RSS_GET_REPLY = 0x26 - ETHTOOL_MSG_KERNEL_MAX = 0x26 + ETHTOOL_MSG_KERNEL_MAX = 0x2b ETHTOOL_A_HEADER_UNSPEC = 0x0 ETHTOOL_A_HEADER_DEV_INDEX = 0x1 ETHTOOL_A_HEADER_DEV_NAME = 0x2 @@ -3795,7 +3804,7 @@ const ( ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 0xb ETHTOOL_A_RINGS_CQE_SIZE = 0xc ETHTOOL_A_RINGS_TX_PUSH = 0xd - ETHTOOL_A_RINGS_MAX = 0xd + ETHTOOL_A_RINGS_MAX = 0x10 ETHTOOL_A_CHANNELS_UNSPEC = 0x0 ETHTOOL_A_CHANNELS_HEADER = 0x1 ETHTOOL_A_CHANNELS_RX_MAX = 0x2 @@ -3833,14 +3842,14 @@ 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 = 0x19 + ETHTOOL_A_COALESCE_MAX = 0x1c ETHTOOL_A_PAUSE_UNSPEC = 0x0 ETHTOOL_A_PAUSE_HEADER = 0x1 ETHTOOL_A_PAUSE_AUTONEG = 0x2 ETHTOOL_A_PAUSE_RX = 0x3 ETHTOOL_A_PAUSE_TX = 0x4 ETHTOOL_A_PAUSE_STATS = 0x5 - ETHTOOL_A_PAUSE_MAX = 0x5 + ETHTOOL_A_PAUSE_MAX = 0x6 ETHTOOL_A_PAUSE_STAT_UNSPEC = 0x0 ETHTOOL_A_PAUSE_STAT_PAD = 0x1 ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 0x2 @@ -4490,7 +4499,7 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x141 + NL80211_ATTR_MAX = 0x145 NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce NL80211_ATTR_MAX_MATCH_SETS = 0x85 @@ -4719,7 +4728,7 @@ const ( NL80211_BAND_ATTR_HT_CAPA = 0x4 NL80211_BAND_ATTR_HT_MCS_SET = 0x3 NL80211_BAND_ATTR_IFTYPE_DATA = 0x9 - NL80211_BAND_ATTR_MAX = 0xb + NL80211_BAND_ATTR_MAX = 0xd NL80211_BAND_ATTR_RATES = 0x2 NL80211_BAND_ATTR_VHT_CAPA = 0x8 NL80211_BAND_ATTR_VHT_MCS_SET = 0x7 @@ -4860,7 +4869,7 @@ const ( NL80211_CMD_LEAVE_IBSS = 0x2c NL80211_CMD_LEAVE_MESH = 0x45 NL80211_CMD_LEAVE_OCB = 0x6d - NL80211_CMD_MAX = 0x98 + NL80211_CMD_MAX = 0x99 NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 NL80211_CMD_MODIFY_LINK_STA = 0x97 NL80211_CMD_NAN_MATCH = 0x78 @@ -5841,6 +5850,8 @@ const ( TUN_F_TSO6 = 0x4 TUN_F_TSO_ECN = 0x8 TUN_F_UFO = 0x10 + TUN_F_USO4 = 0x20 + TUN_F_USO6 = 0x40 ) const ( @@ -5850,9 +5861,10 @@ const ( ) const ( - VIRTIO_NET_HDR_GSO_NONE = 0x0 - VIRTIO_NET_HDR_GSO_TCPV4 = 0x1 - VIRTIO_NET_HDR_GSO_UDP = 0x3 - VIRTIO_NET_HDR_GSO_TCPV6 = 0x4 - VIRTIO_NET_HDR_GSO_ECN = 0x80 + VIRTIO_NET_HDR_GSO_NONE = 0x0 + VIRTIO_NET_HDR_GSO_TCPV4 = 0x1 + VIRTIO_NET_HDR_GSO_UDP = 0x3 + VIRTIO_NET_HDR_GSO_TCPV6 = 0x4 + VIRTIO_NET_HDR_GSO_UDP_L4 = 0x5 + VIRTIO_NET_HDR_GSO_ECN = 0x80 ) 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 4ecc1495cd..6d8acbcc57 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -337,6 +337,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 34fddff964..59293c6884 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -350,6 +350,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 3b14a6031f..40cfa38c29 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -328,6 +328,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 0517651ab3..055bc4216d 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -329,6 +329,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 3b0c518134..f28affbc60 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -330,6 +330,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 fccdf4dd0f..9d71e7ccd8 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -333,6 +333,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 500de8fc07..fd5ccd332a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -332,6 +332,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 d0434cd2c6..7704de77a2 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -332,6 +332,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 84206ba534..df00b87571 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -333,6 +333,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 ab078cf1f5..0942840db6 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -340,6 +340,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 42eb2c4cef..0348743950 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -339,6 +339,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 31304a4e8b..bad0670475 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -339,6 +339,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 c311f9612d..83c69c119f 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -357,6 +357,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint64 @@ -716,3 +718,26 @@ type SysvShmDesc struct { _ uint64 _ uint64 } + +type RISCVHWProbePairs struct { + Key int64 + Value uint64 +} + +const ( + RISCV_HWPROBE_KEY_MVENDORID = 0x0 + RISCV_HWPROBE_KEY_MARCHID = 0x1 + RISCV_HWPROBE_KEY_MIMPID = 0x2 + RISCV_HWPROBE_KEY_BASE_BEHAVIOR = 0x3 + RISCV_HWPROBE_BASE_BEHAVIOR_IMA = 0x1 + RISCV_HWPROBE_KEY_IMA_EXT_0 = 0x4 + RISCV_HWPROBE_IMA_FD = 0x1 + RISCV_HWPROBE_IMA_C = 0x2 + RISCV_HWPROBE_KEY_CPUPERF_0 = 0x5 + RISCV_HWPROBE_MISALIGNED_UNKNOWN = 0x0 + RISCV_HWPROBE_MISALIGNED_EMULATED = 0x1 + RISCV_HWPROBE_MISALIGNED_SLOW = 0x2 + RISCV_HWPROBE_MISALIGNED_FAST = 0x3 + RISCV_HWPROBE_MISALIGNED_UNSUPPORTED = 0x4 + RISCV_HWPROBE_MISALIGNED_MASK = 0x7 +) 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 bba3cefac1..aa268d025c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -352,6 +352,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total 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 ad8a013804..444045b6c5 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -334,6 +334,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go index c964b6848d..c44a1b9636 100644 --- a/vendor/golang.org/x/sys/windows/service.go +++ b/vendor/golang.org/x/sys/windows/service.go @@ -218,6 +218,10 @@ type SERVICE_FAILURE_ACTIONS struct { Actions *SC_ACTION } +type SERVICE_FAILURE_ACTIONS_FLAG struct { + FailureActionsOnNonCrashFailures int32 +} + type SC_ACTION struct { Type uint32 Delay uint32 diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index 9645900754..373d16388a 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -135,14 +135,14 @@ func Getpagesize() int { return 4096 } // NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention. // This is useful when interoperating with Windows code requiring callbacks. -// The argument is expected to be a function with with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. +// The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. func NewCallback(fn interface{}) uintptr { return syscall.NewCallback(fn) } // NewCallbackCDecl converts a Go function to a function pointer conforming to the cdecl calling convention. // This is useful when interoperating with Windows code requiring callbacks. -// The argument is expected to be a function with with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. +// The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. func NewCallbackCDecl(fn interface{}) uintptr { return syscall.NewCallbackCDecl(fn) } diff --git a/vendor/golang.org/x/term/term_unix.go b/vendor/golang.org/x/term/term_unix.go index a4e31ab1b2..62c2b3f41f 100644 --- a/vendor/golang.org/x/term/term_unix.go +++ b/vendor/golang.org/x/term/term_unix.go @@ -60,7 +60,7 @@ func restore(fd int, state *State) error { func getSize(fd int) (width, height int, err error) { ws, err := unix.IoctlGetWinsize(fd, unix.TIOCGWINSZ) if err != nil { - return -1, -1, err + return 0, 0, err } return int(ws.Col), int(ws.Row), nil } diff --git a/vendor/golang.org/x/text/cases/tables13.0.0.go b/vendor/golang.org/x/text/cases/tables13.0.0.go index cd874775b3..68d2981d18 100644 --- a/vendor/golang.org/x/text/cases/tables13.0.0.go +++ b/vendor/golang.org/x/text/cases/tables13.0.0.go @@ -1,7 +1,7 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -//go:build go1.16 -// +build go1.16 +//go:build go1.16 && !go1.21 +// +build go1.16,!go1.21 package cases diff --git a/vendor/golang.org/x/text/cases/tables15.0.0.go b/vendor/golang.org/x/text/cases/tables15.0.0.go new file mode 100644 index 0000000000..e431b99537 --- /dev/null +++ b/vendor/golang.org/x/text/cases/tables15.0.0.go @@ -0,0 +1,2528 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.21 +// +build go1.21 + +package cases + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "15.0.0" + +var xorData string = "" + // Size: 213 bytes + "\x00\x06\x07\x00\x01?\x00\x0f\x03\x00\x0f\x12\x00\x0f\x1f\x00\x0f\x1d" + + "\x00\x01\x13\x00\x0f\x16\x00\x0f\x0b\x00\x0f3\x00\x0f7\x00\x01#\x00\x0f?" + + "\x00\x0e'\x00\x0f/\x00\x0e>\x00\x0f*\x00\x0c&\x00\x0c*\x00\x0c;\x00\x0c9" + + "\x00\x0c%\x00\x01\x08\x00\x03\x0d\x00\x03\x09\x00\x02\x06\x00\x02\x02" + + "\x00\x02\x0c\x00\x01\x00\x00\x01\x03\x00\x01\x01\x00\x01 \x00\x01\x0c" + + "\x00\x01\x10\x00\x03\x10\x00\x036 \x00\x037 \x00\x0b#\x10\x00\x0b 0\x00" + + "\x0b!\x10\x00\x0b!0\x001\x00\x00\x0b(\x04\x00\x03\x04\x1e\x00\x0b)\x08" + + "\x00\x03\x0a\x00\x02:\x00\x02>\x00\x02,\x00\x02\x00\x00\x02\x10\x00\x01<" + + "\x00\x01&\x00\x01*\x00\x01.\x00\x010\x003 \x00\x01\x18\x00\x01(\x00\x03'" + + "\x00\x03)\x00\x03+\x00\x03/\x00\x03\x19\x00\x03\x1b\x00\x03\x1f\x00\x01" + + "\x1e\x00\x01\x22" + +var exceptions string = "" + // Size: 2450 bytes + "\x00\x12\x12μΜΜ\x12\x12ssSSSs\x13\x18i̇i̇\x10\x09II\x13\x1bʼnʼNʼN\x11" + + "\x09sSS\x12\x12dždžDž\x12\x12dždžDŽ\x10\x12DŽDž\x12\x12ljljLj\x12\x12ljljLJ\x10\x12LJLj" + + "\x12\x12njnjNj\x12\x12njnjNJ\x10\x12NJNj\x13\x1bǰJ̌J̌\x12\x12dzdzDz\x12\x12dzdzDZ\x10" + + "\x12DZDz\x13\x18ⱥⱥ\x13\x18ⱦⱦ\x10\x1bⱾⱾ\x10\x1bⱿⱿ\x10\x1bⱯⱯ\x10\x1bⱭⱭ\x10" + + "\x1bⱰⱰ\x10\x1bꞫꞫ\x10\x1bꞬꞬ\x10\x1bꞍꞍ\x10\x1bꞪꞪ\x10\x1bꞮꞮ\x10\x1bⱢⱢ\x10" + + "\x1bꞭꞭ\x10\x1bⱮⱮ\x10\x1bⱤⱤ\x10\x1bꟅꟅ\x10\x1bꞱꞱ\x10\x1bꞲꞲ\x10\x1bꞰꞰ2\x12ι" + + "ΙΙ\x166ΐΪ́Ϊ́\x166ΰΫ́Ϋ́\x12\x12σΣΣ\x12\x12βΒΒ\x12\x12θΘΘ\x12\x12" + + "φΦΦ\x12\x12πΠΠ\x12\x12κΚΚ\x12\x12ρΡΡ\x12\x12εΕΕ\x14$եւԵՒԵւ\x10\x1bᲐა" + + "\x10\x1bᲑბ\x10\x1bᲒგ\x10\x1bᲓდ\x10\x1bᲔე\x10\x1bᲕვ\x10\x1bᲖზ\x10\x1bᲗთ" + + "\x10\x1bᲘი\x10\x1bᲙკ\x10\x1bᲚლ\x10\x1bᲛმ\x10\x1bᲜნ\x10\x1bᲝო\x10\x1bᲞპ" + + "\x10\x1bᲟჟ\x10\x1bᲠრ\x10\x1bᲡს\x10\x1bᲢტ\x10\x1bᲣუ\x10\x1bᲤფ\x10\x1bᲥქ" + + "\x10\x1bᲦღ\x10\x1bᲧყ\x10\x1bᲨშ\x10\x1bᲩჩ\x10\x1bᲪც\x10\x1bᲫძ\x10\x1bᲬწ" + + "\x10\x1bᲭჭ\x10\x1bᲮხ\x10\x1bᲯჯ\x10\x1bᲰჰ\x10\x1bᲱჱ\x10\x1bᲲჲ\x10\x1bᲳჳ" + + "\x10\x1bᲴჴ\x10\x1bᲵჵ\x10\x1bᲶჶ\x10\x1bᲷჷ\x10\x1bᲸჸ\x10\x1bᲹჹ\x10\x1bᲺჺ" + + "\x10\x1bᲽჽ\x10\x1bᲾჾ\x10\x1bᲿჿ\x12\x12вВВ\x12\x12дДД\x12\x12оОО\x12\x12с" + + "СС\x12\x12тТТ\x12\x12тТТ\x12\x12ъЪЪ\x12\x12ѣѢѢ\x13\x1bꙋꙊꙊ\x13\x1bẖH̱H̱" + + "\x13\x1bẗT̈T̈\x13\x1bẘW̊W̊\x13\x1bẙY̊Y̊\x13\x1baʾAʾAʾ\x13\x1bṡṠṠ\x12" + + "\x10ssß\x14$ὐΥ̓Υ̓\x166ὒΥ̓̀Υ̓̀\x166ὔΥ̓́Υ̓́\x166ὖΥ̓͂Υ̓͂\x15+ἀιἈΙᾈ" + + "\x15+ἁιἉΙᾉ\x15+ἂιἊΙᾊ\x15+ἃιἋΙᾋ\x15+ἄιἌΙᾌ\x15+ἅιἍΙᾍ\x15+ἆιἎΙᾎ\x15+ἇιἏΙᾏ" + + "\x15\x1dἀιᾀἈΙ\x15\x1dἁιᾁἉΙ\x15\x1dἂιᾂἊΙ\x15\x1dἃιᾃἋΙ\x15\x1dἄιᾄἌΙ\x15" + + "\x1dἅιᾅἍΙ\x15\x1dἆιᾆἎΙ\x15\x1dἇιᾇἏΙ\x15+ἠιἨΙᾘ\x15+ἡιἩΙᾙ\x15+ἢιἪΙᾚ\x15+ἣι" + + "ἫΙᾛ\x15+ἤιἬΙᾜ\x15+ἥιἭΙᾝ\x15+ἦιἮΙᾞ\x15+ἧιἯΙᾟ\x15\x1dἠιᾐἨΙ\x15\x1dἡιᾑἩΙ" + + "\x15\x1dἢιᾒἪΙ\x15\x1dἣιᾓἫΙ\x15\x1dἤιᾔἬΙ\x15\x1dἥιᾕἭΙ\x15\x1dἦιᾖἮΙ\x15" + + "\x1dἧιᾗἯΙ\x15+ὠιὨΙᾨ\x15+ὡιὩΙᾩ\x15+ὢιὪΙᾪ\x15+ὣιὫΙᾫ\x15+ὤιὬΙᾬ\x15+ὥιὭΙᾭ" + + "\x15+ὦιὮΙᾮ\x15+ὧιὯΙᾯ\x15\x1dὠιᾠὨΙ\x15\x1dὡιᾡὩΙ\x15\x1dὢιᾢὪΙ\x15\x1dὣιᾣὫΙ" + + "\x15\x1dὤιᾤὬΙ\x15\x1dὥιᾥὭΙ\x15\x1dὦιᾦὮΙ\x15\x1dὧιᾧὯΙ\x15-ὰιᾺΙᾺͅ\x14#αιΑΙ" + + "ᾼ\x14$άιΆΙΆͅ\x14$ᾶΑ͂Α͂\x166ᾶιΑ͂Ιᾼ͂\x14\x1cαιᾳΑΙ\x12\x12ιΙΙ\x15-ὴιῊΙ" + + "Ὴͅ\x14#ηιΗΙῌ\x14$ήιΉΙΉͅ\x14$ῆΗ͂Η͂\x166ῆιΗ͂Ιῌ͂\x14\x1cηιῃΗΙ\x166ῒΙ" + + "̈̀Ϊ̀\x166ΐΪ́Ϊ́\x14$ῖΙ͂Ι͂\x166ῗΪ͂Ϊ͂\x166ῢΫ̀Ϋ̀\x166ΰΫ́Ϋ" + + "́\x14$ῤΡ̓Ρ̓\x14$ῦΥ͂Υ͂\x166ῧΫ͂Ϋ͂\x15-ὼιῺΙῺͅ\x14#ωιΩΙῼ\x14$ώιΏΙΏͅ" + + "\x14$ῶΩ͂Ω͂\x166ῶιΩ͂Ιῼ͂\x14\x1cωιῳΩΙ\x12\x10ωω\x11\x08kk\x12\x10åå\x12" + + "\x10ɫɫ\x12\x10ɽɽ\x10\x12ȺȺ\x10\x12ȾȾ\x12\x10ɑɑ\x12\x10ɱɱ\x12\x10ɐɐ\x12" + + "\x10ɒɒ\x12\x10ȿȿ\x12\x10ɀɀ\x12\x10ɥɥ\x12\x10ɦɦ\x12\x10ɜɜ\x12\x10ɡɡ\x12" + + "\x10ɬɬ\x12\x10ɪɪ\x12\x10ʞʞ\x12\x10ʇʇ\x12\x10ʝʝ\x12\x10ʂʂ\x12\x12ffFFFf" + + "\x12\x12fiFIFi\x12\x12flFLFl\x13\x1bffiFFIFfi\x13\x1bfflFFLFfl\x12\x12st" + + "STSt\x12\x12stSTSt\x14$մնՄՆՄն\x14$մեՄԵՄե\x14$միՄԻՄի\x14$վնՎՆՎն\x14$մխՄԽՄ" + + "խ" + +// 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 *caseTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return caseValues[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 := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return caseValues[c0] + } + i := caseIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = caseIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = caseIndex[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 *caseTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return caseValues[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 := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return caseValues[c0] + } + i := caseIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = caseIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = caseIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// caseTrie. Total size: 13398 bytes (13.08 KiB). Checksum: 544af6e6b1b70931. +type caseTrie struct{} + +func newCaseTrie(i int) *caseTrie { + return &caseTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *caseTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 22: + return uint16(caseValues[n<<6+uint32(b)]) + default: + n -= 22 + return uint16(sparse.lookup(n, b)) + } +} + +// caseValues: 24 blocks, 1536 entries, 3072 bytes +// The third block is the zero block. +var caseValues = [1536]uint16{ + // Block 0x0, offset 0x0 + 0x27: 0x0054, + 0x2e: 0x0054, + 0x30: 0x0010, 0x31: 0x0010, 0x32: 0x0010, 0x33: 0x0010, 0x34: 0x0010, 0x35: 0x0010, + 0x36: 0x0010, 0x37: 0x0010, 0x38: 0x0010, 0x39: 0x0010, 0x3a: 0x0054, + // Block 0x1, offset 0x40 + 0x41: 0x2013, 0x42: 0x2013, 0x43: 0x2013, 0x44: 0x2013, 0x45: 0x2013, + 0x46: 0x2013, 0x47: 0x2013, 0x48: 0x2013, 0x49: 0x2013, 0x4a: 0x2013, 0x4b: 0x2013, + 0x4c: 0x2013, 0x4d: 0x2013, 0x4e: 0x2013, 0x4f: 0x2013, 0x50: 0x2013, 0x51: 0x2013, + 0x52: 0x2013, 0x53: 0x2013, 0x54: 0x2013, 0x55: 0x2013, 0x56: 0x2013, 0x57: 0x2013, + 0x58: 0x2013, 0x59: 0x2013, 0x5a: 0x2013, + 0x5e: 0x0004, 0x5f: 0x0010, 0x60: 0x0004, 0x61: 0x2012, 0x62: 0x2012, 0x63: 0x2012, + 0x64: 0x2012, 0x65: 0x2012, 0x66: 0x2012, 0x67: 0x2012, 0x68: 0x2012, 0x69: 0x2012, + 0x6a: 0x2012, 0x6b: 0x2012, 0x6c: 0x2012, 0x6d: 0x2012, 0x6e: 0x2012, 0x6f: 0x2012, + 0x70: 0x2012, 0x71: 0x2012, 0x72: 0x2012, 0x73: 0x2012, 0x74: 0x2012, 0x75: 0x2012, + 0x76: 0x2012, 0x77: 0x2012, 0x78: 0x2012, 0x79: 0x2012, 0x7a: 0x2012, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0852, 0xc1: 0x0b53, 0xc2: 0x0113, 0xc3: 0x0112, 0xc4: 0x0113, 0xc5: 0x0112, + 0xc6: 0x0b53, 0xc7: 0x0f13, 0xc8: 0x0f12, 0xc9: 0x0e53, 0xca: 0x1153, 0xcb: 0x0713, + 0xcc: 0x0712, 0xcd: 0x0012, 0xce: 0x1453, 0xcf: 0x1753, 0xd0: 0x1a53, 0xd1: 0x0313, + 0xd2: 0x0312, 0xd3: 0x1d53, 0xd4: 0x2053, 0xd5: 0x2352, 0xd6: 0x2653, 0xd7: 0x2653, + 0xd8: 0x0113, 0xd9: 0x0112, 0xda: 0x2952, 0xdb: 0x0012, 0xdc: 0x1d53, 0xdd: 0x2c53, + 0xde: 0x2f52, 0xdf: 0x3253, 0xe0: 0x0113, 0xe1: 0x0112, 0xe2: 0x0113, 0xe3: 0x0112, + 0xe4: 0x0113, 0xe5: 0x0112, 0xe6: 0x3553, 0xe7: 0x0f13, 0xe8: 0x0f12, 0xe9: 0x3853, + 0xea: 0x0012, 0xeb: 0x0012, 0xec: 0x0113, 0xed: 0x0112, 0xee: 0x3553, 0xef: 0x1f13, + 0xf0: 0x1f12, 0xf1: 0x3b53, 0xf2: 0x3e53, 0xf3: 0x0713, 0xf4: 0x0712, 0xf5: 0x0313, + 0xf6: 0x0312, 0xf7: 0x4153, 0xf8: 0x0113, 0xf9: 0x0112, 0xfa: 0x0012, 0xfb: 0x0010, + 0xfc: 0x0113, 0xfd: 0x0112, 0xfe: 0x0012, 0xff: 0x4452, + // Block 0x4, offset 0x100 + 0x100: 0x0010, 0x101: 0x0010, 0x102: 0x0010, 0x103: 0x0010, 0x104: 0x02db, 0x105: 0x0359, + 0x106: 0x03da, 0x107: 0x043b, 0x108: 0x04b9, 0x109: 0x053a, 0x10a: 0x059b, 0x10b: 0x0619, + 0x10c: 0x069a, 0x10d: 0x0313, 0x10e: 0x0312, 0x10f: 0x1f13, 0x110: 0x1f12, 0x111: 0x0313, + 0x112: 0x0312, 0x113: 0x0713, 0x114: 0x0712, 0x115: 0x0313, 0x116: 0x0312, 0x117: 0x0f13, + 0x118: 0x0f12, 0x119: 0x0313, 0x11a: 0x0312, 0x11b: 0x0713, 0x11c: 0x0712, 0x11d: 0x1452, + 0x11e: 0x0113, 0x11f: 0x0112, 0x120: 0x0113, 0x121: 0x0112, 0x122: 0x0113, 0x123: 0x0112, + 0x124: 0x0113, 0x125: 0x0112, 0x126: 0x0113, 0x127: 0x0112, 0x128: 0x0113, 0x129: 0x0112, + 0x12a: 0x0113, 0x12b: 0x0112, 0x12c: 0x0113, 0x12d: 0x0112, 0x12e: 0x0113, 0x12f: 0x0112, + 0x130: 0x06fa, 0x131: 0x07ab, 0x132: 0x0829, 0x133: 0x08aa, 0x134: 0x0113, 0x135: 0x0112, + 0x136: 0x2353, 0x137: 0x4453, 0x138: 0x0113, 0x139: 0x0112, 0x13a: 0x0113, 0x13b: 0x0112, + 0x13c: 0x0113, 0x13d: 0x0112, 0x13e: 0x0113, 0x13f: 0x0112, + // Block 0x5, offset 0x140 + 0x140: 0x0a8a, 0x141: 0x0313, 0x142: 0x0312, 0x143: 0x0853, 0x144: 0x4753, 0x145: 0x4a53, + 0x146: 0x0113, 0x147: 0x0112, 0x148: 0x0113, 0x149: 0x0112, 0x14a: 0x0113, 0x14b: 0x0112, + 0x14c: 0x0113, 0x14d: 0x0112, 0x14e: 0x0113, 0x14f: 0x0112, 0x150: 0x0b0a, 0x151: 0x0b8a, + 0x152: 0x0c0a, 0x153: 0x0b52, 0x154: 0x0b52, 0x155: 0x0012, 0x156: 0x0e52, 0x157: 0x1152, + 0x158: 0x0012, 0x159: 0x1752, 0x15a: 0x0012, 0x15b: 0x1a52, 0x15c: 0x0c8a, 0x15d: 0x0012, + 0x15e: 0x0012, 0x15f: 0x0012, 0x160: 0x1d52, 0x161: 0x0d0a, 0x162: 0x0012, 0x163: 0x2052, + 0x164: 0x0012, 0x165: 0x0d8a, 0x166: 0x0e0a, 0x167: 0x0012, 0x168: 0x2652, 0x169: 0x2652, + 0x16a: 0x0e8a, 0x16b: 0x0f0a, 0x16c: 0x0f8a, 0x16d: 0x0012, 0x16e: 0x0012, 0x16f: 0x1d52, + 0x170: 0x0012, 0x171: 0x100a, 0x172: 0x2c52, 0x173: 0x0012, 0x174: 0x0012, 0x175: 0x3252, + 0x176: 0x0012, 0x177: 0x0012, 0x178: 0x0012, 0x179: 0x0012, 0x17a: 0x0012, 0x17b: 0x0012, + 0x17c: 0x0012, 0x17d: 0x108a, 0x17e: 0x0012, 0x17f: 0x0012, + // Block 0x6, offset 0x180 + 0x180: 0x3552, 0x181: 0x0012, 0x182: 0x110a, 0x183: 0x3852, 0x184: 0x0012, 0x185: 0x0012, + 0x186: 0x0012, 0x187: 0x118a, 0x188: 0x3552, 0x189: 0x4752, 0x18a: 0x3b52, 0x18b: 0x3e52, + 0x18c: 0x4a52, 0x18d: 0x0012, 0x18e: 0x0012, 0x18f: 0x0012, 0x190: 0x0012, 0x191: 0x0012, + 0x192: 0x4152, 0x193: 0x0012, 0x194: 0x0010, 0x195: 0x0012, 0x196: 0x0012, 0x197: 0x0012, + 0x198: 0x0012, 0x199: 0x0012, 0x19a: 0x0012, 0x19b: 0x0012, 0x19c: 0x0012, 0x19d: 0x120a, + 0x19e: 0x128a, 0x19f: 0x0012, 0x1a0: 0x0012, 0x1a1: 0x0012, 0x1a2: 0x0012, 0x1a3: 0x0012, + 0x1a4: 0x0012, 0x1a5: 0x0012, 0x1a6: 0x0012, 0x1a7: 0x0012, 0x1a8: 0x0012, 0x1a9: 0x0012, + 0x1aa: 0x0012, 0x1ab: 0x0012, 0x1ac: 0x0012, 0x1ad: 0x0012, 0x1ae: 0x0012, 0x1af: 0x0012, + 0x1b0: 0x0015, 0x1b1: 0x0015, 0x1b2: 0x0015, 0x1b3: 0x0015, 0x1b4: 0x0015, 0x1b5: 0x0015, + 0x1b6: 0x0015, 0x1b7: 0x0015, 0x1b8: 0x0015, 0x1b9: 0x0014, 0x1ba: 0x0014, 0x1bb: 0x0014, + 0x1bc: 0x0014, 0x1bd: 0x0014, 0x1be: 0x0014, 0x1bf: 0x0014, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0024, 0x1c1: 0x0024, 0x1c2: 0x0024, 0x1c3: 0x0024, 0x1c4: 0x0024, 0x1c5: 0x130d, + 0x1c6: 0x0024, 0x1c7: 0x0034, 0x1c8: 0x0034, 0x1c9: 0x0034, 0x1ca: 0x0024, 0x1cb: 0x0024, + 0x1cc: 0x0024, 0x1cd: 0x0034, 0x1ce: 0x0034, 0x1cf: 0x0014, 0x1d0: 0x0024, 0x1d1: 0x0024, + 0x1d2: 0x0024, 0x1d3: 0x0034, 0x1d4: 0x0034, 0x1d5: 0x0034, 0x1d6: 0x0034, 0x1d7: 0x0024, + 0x1d8: 0x0034, 0x1d9: 0x0034, 0x1da: 0x0034, 0x1db: 0x0024, 0x1dc: 0x0034, 0x1dd: 0x0034, + 0x1de: 0x0034, 0x1df: 0x0034, 0x1e0: 0x0034, 0x1e1: 0x0034, 0x1e2: 0x0034, 0x1e3: 0x0024, + 0x1e4: 0x0024, 0x1e5: 0x0024, 0x1e6: 0x0024, 0x1e7: 0x0024, 0x1e8: 0x0024, 0x1e9: 0x0024, + 0x1ea: 0x0024, 0x1eb: 0x0024, 0x1ec: 0x0024, 0x1ed: 0x0024, 0x1ee: 0x0024, 0x1ef: 0x0024, + 0x1f0: 0x0113, 0x1f1: 0x0112, 0x1f2: 0x0113, 0x1f3: 0x0112, 0x1f4: 0x0014, 0x1f5: 0x0004, + 0x1f6: 0x0113, 0x1f7: 0x0112, 0x1fa: 0x0015, 0x1fb: 0x4d52, + 0x1fc: 0x5052, 0x1fd: 0x5052, 0x1ff: 0x5353, + // Block 0x8, offset 0x200 + 0x204: 0x0004, 0x205: 0x0004, + 0x206: 0x2a13, 0x207: 0x0054, 0x208: 0x2513, 0x209: 0x2713, 0x20a: 0x2513, + 0x20c: 0x5653, 0x20e: 0x5953, 0x20f: 0x5c53, 0x210: 0x138a, 0x211: 0x2013, + 0x212: 0x2013, 0x213: 0x2013, 0x214: 0x2013, 0x215: 0x2013, 0x216: 0x2013, 0x217: 0x2013, + 0x218: 0x2013, 0x219: 0x2013, 0x21a: 0x2013, 0x21b: 0x2013, 0x21c: 0x2013, 0x21d: 0x2013, + 0x21e: 0x2013, 0x21f: 0x2013, 0x220: 0x5f53, 0x221: 0x5f53, 0x223: 0x5f53, + 0x224: 0x5f53, 0x225: 0x5f53, 0x226: 0x5f53, 0x227: 0x5f53, 0x228: 0x5f53, 0x229: 0x5f53, + 0x22a: 0x5f53, 0x22b: 0x5f53, 0x22c: 0x2a12, 0x22d: 0x2512, 0x22e: 0x2712, 0x22f: 0x2512, + 0x230: 0x14ca, 0x231: 0x2012, 0x232: 0x2012, 0x233: 0x2012, 0x234: 0x2012, 0x235: 0x2012, + 0x236: 0x2012, 0x237: 0x2012, 0x238: 0x2012, 0x239: 0x2012, 0x23a: 0x2012, 0x23b: 0x2012, + 0x23c: 0x2012, 0x23d: 0x2012, 0x23e: 0x2012, 0x23f: 0x2012, + // Block 0x9, offset 0x240 + 0x240: 0x5f52, 0x241: 0x5f52, 0x242: 0x160a, 0x243: 0x5f52, 0x244: 0x5f52, 0x245: 0x5f52, + 0x246: 0x5f52, 0x247: 0x5f52, 0x248: 0x5f52, 0x249: 0x5f52, 0x24a: 0x5f52, 0x24b: 0x5f52, + 0x24c: 0x5652, 0x24d: 0x5952, 0x24e: 0x5c52, 0x24f: 0x1813, 0x250: 0x168a, 0x251: 0x170a, + 0x252: 0x0013, 0x253: 0x0013, 0x254: 0x0013, 0x255: 0x178a, 0x256: 0x180a, 0x257: 0x1812, + 0x258: 0x0113, 0x259: 0x0112, 0x25a: 0x0113, 0x25b: 0x0112, 0x25c: 0x0113, 0x25d: 0x0112, + 0x25e: 0x0113, 0x25f: 0x0112, 0x260: 0x0113, 0x261: 0x0112, 0x262: 0x0113, 0x263: 0x0112, + 0x264: 0x0113, 0x265: 0x0112, 0x266: 0x0113, 0x267: 0x0112, 0x268: 0x0113, 0x269: 0x0112, + 0x26a: 0x0113, 0x26b: 0x0112, 0x26c: 0x0113, 0x26d: 0x0112, 0x26e: 0x0113, 0x26f: 0x0112, + 0x270: 0x188a, 0x271: 0x190a, 0x272: 0x0b12, 0x273: 0x5352, 0x274: 0x6253, 0x275: 0x198a, + 0x277: 0x0f13, 0x278: 0x0f12, 0x279: 0x0b13, 0x27a: 0x0113, 0x27b: 0x0112, + 0x27c: 0x0012, 0x27d: 0x4d53, 0x27e: 0x5053, 0x27f: 0x5053, + // Block 0xa, offset 0x280 + 0x280: 0x6852, 0x281: 0x6852, 0x282: 0x6852, 0x283: 0x6852, 0x284: 0x6852, 0x285: 0x6852, + 0x286: 0x6852, 0x287: 0x1a0a, 0x288: 0x0012, 0x28a: 0x0010, + 0x291: 0x0034, + 0x292: 0x0024, 0x293: 0x0024, 0x294: 0x0024, 0x295: 0x0024, 0x296: 0x0034, 0x297: 0x0024, + 0x298: 0x0024, 0x299: 0x0024, 0x29a: 0x0034, 0x29b: 0x0034, 0x29c: 0x0024, 0x29d: 0x0024, + 0x29e: 0x0024, 0x29f: 0x0024, 0x2a0: 0x0024, 0x2a1: 0x0024, 0x2a2: 0x0034, 0x2a3: 0x0034, + 0x2a4: 0x0034, 0x2a5: 0x0034, 0x2a6: 0x0034, 0x2a7: 0x0034, 0x2a8: 0x0024, 0x2a9: 0x0024, + 0x2aa: 0x0034, 0x2ab: 0x0024, 0x2ac: 0x0024, 0x2ad: 0x0034, 0x2ae: 0x0034, 0x2af: 0x0024, + 0x2b0: 0x0034, 0x2b1: 0x0034, 0x2b2: 0x0034, 0x2b3: 0x0034, 0x2b4: 0x0034, 0x2b5: 0x0034, + 0x2b6: 0x0034, 0x2b7: 0x0034, 0x2b8: 0x0034, 0x2b9: 0x0034, 0x2ba: 0x0034, 0x2bb: 0x0034, + 0x2bc: 0x0034, 0x2bd: 0x0034, 0x2bf: 0x0034, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x0010, 0x2c1: 0x0010, 0x2c2: 0x0010, 0x2c3: 0x0010, 0x2c4: 0x0010, 0x2c5: 0x0010, + 0x2c6: 0x0010, 0x2c7: 0x0010, 0x2c8: 0x0010, 0x2c9: 0x0014, 0x2ca: 0x0024, 0x2cb: 0x0024, + 0x2cc: 0x0024, 0x2cd: 0x0024, 0x2ce: 0x0024, 0x2cf: 0x0034, 0x2d0: 0x0034, 0x2d1: 0x0034, + 0x2d2: 0x0034, 0x2d3: 0x0034, 0x2d4: 0x0024, 0x2d5: 0x0024, 0x2d6: 0x0024, 0x2d7: 0x0024, + 0x2d8: 0x0024, 0x2d9: 0x0024, 0x2da: 0x0024, 0x2db: 0x0024, 0x2dc: 0x0024, 0x2dd: 0x0024, + 0x2de: 0x0024, 0x2df: 0x0024, 0x2e0: 0x0024, 0x2e1: 0x0024, 0x2e2: 0x0014, 0x2e3: 0x0034, + 0x2e4: 0x0024, 0x2e5: 0x0024, 0x2e6: 0x0034, 0x2e7: 0x0024, 0x2e8: 0x0024, 0x2e9: 0x0034, + 0x2ea: 0x0024, 0x2eb: 0x0024, 0x2ec: 0x0024, 0x2ed: 0x0034, 0x2ee: 0x0034, 0x2ef: 0x0034, + 0x2f0: 0x0034, 0x2f1: 0x0034, 0x2f2: 0x0034, 0x2f3: 0x0024, 0x2f4: 0x0024, 0x2f5: 0x0024, + 0x2f6: 0x0034, 0x2f7: 0x0024, 0x2f8: 0x0024, 0x2f9: 0x0034, 0x2fa: 0x0034, 0x2fb: 0x0024, + 0x2fc: 0x0024, 0x2fd: 0x0024, 0x2fe: 0x0024, 0x2ff: 0x0024, + // Block 0xc, offset 0x300 + 0x300: 0x7053, 0x301: 0x7053, 0x302: 0x7053, 0x303: 0x7053, 0x304: 0x7053, 0x305: 0x7053, + 0x307: 0x7053, + 0x30d: 0x7053, 0x310: 0x1aea, 0x311: 0x1b6a, + 0x312: 0x1bea, 0x313: 0x1c6a, 0x314: 0x1cea, 0x315: 0x1d6a, 0x316: 0x1dea, 0x317: 0x1e6a, + 0x318: 0x1eea, 0x319: 0x1f6a, 0x31a: 0x1fea, 0x31b: 0x206a, 0x31c: 0x20ea, 0x31d: 0x216a, + 0x31e: 0x21ea, 0x31f: 0x226a, 0x320: 0x22ea, 0x321: 0x236a, 0x322: 0x23ea, 0x323: 0x246a, + 0x324: 0x24ea, 0x325: 0x256a, 0x326: 0x25ea, 0x327: 0x266a, 0x328: 0x26ea, 0x329: 0x276a, + 0x32a: 0x27ea, 0x32b: 0x286a, 0x32c: 0x28ea, 0x32d: 0x296a, 0x32e: 0x29ea, 0x32f: 0x2a6a, + 0x330: 0x2aea, 0x331: 0x2b6a, 0x332: 0x2bea, 0x333: 0x2c6a, 0x334: 0x2cea, 0x335: 0x2d6a, + 0x336: 0x2dea, 0x337: 0x2e6a, 0x338: 0x2eea, 0x339: 0x2f6a, 0x33a: 0x2fea, + 0x33c: 0x0015, 0x33d: 0x306a, 0x33e: 0x30ea, 0x33f: 0x316a, + // Block 0xd, offset 0x340 + 0x340: 0x0812, 0x341: 0x0812, 0x342: 0x0812, 0x343: 0x0812, 0x344: 0x0812, 0x345: 0x0812, + 0x348: 0x0813, 0x349: 0x0813, 0x34a: 0x0813, 0x34b: 0x0813, + 0x34c: 0x0813, 0x34d: 0x0813, 0x350: 0x3b1a, 0x351: 0x0812, + 0x352: 0x3bfa, 0x353: 0x0812, 0x354: 0x3d3a, 0x355: 0x0812, 0x356: 0x3e7a, 0x357: 0x0812, + 0x359: 0x0813, 0x35b: 0x0813, 0x35d: 0x0813, + 0x35f: 0x0813, 0x360: 0x0812, 0x361: 0x0812, 0x362: 0x0812, 0x363: 0x0812, + 0x364: 0x0812, 0x365: 0x0812, 0x366: 0x0812, 0x367: 0x0812, 0x368: 0x0813, 0x369: 0x0813, + 0x36a: 0x0813, 0x36b: 0x0813, 0x36c: 0x0813, 0x36d: 0x0813, 0x36e: 0x0813, 0x36f: 0x0813, + 0x370: 0x9252, 0x371: 0x9252, 0x372: 0x9552, 0x373: 0x9552, 0x374: 0x9852, 0x375: 0x9852, + 0x376: 0x9b52, 0x377: 0x9b52, 0x378: 0x9e52, 0x379: 0x9e52, 0x37a: 0xa152, 0x37b: 0xa152, + 0x37c: 0x4d52, 0x37d: 0x4d52, + // Block 0xe, offset 0x380 + 0x380: 0x3fba, 0x381: 0x40aa, 0x382: 0x419a, 0x383: 0x428a, 0x384: 0x437a, 0x385: 0x446a, + 0x386: 0x455a, 0x387: 0x464a, 0x388: 0x4739, 0x389: 0x4829, 0x38a: 0x4919, 0x38b: 0x4a09, + 0x38c: 0x4af9, 0x38d: 0x4be9, 0x38e: 0x4cd9, 0x38f: 0x4dc9, 0x390: 0x4eba, 0x391: 0x4faa, + 0x392: 0x509a, 0x393: 0x518a, 0x394: 0x527a, 0x395: 0x536a, 0x396: 0x545a, 0x397: 0x554a, + 0x398: 0x5639, 0x399: 0x5729, 0x39a: 0x5819, 0x39b: 0x5909, 0x39c: 0x59f9, 0x39d: 0x5ae9, + 0x39e: 0x5bd9, 0x39f: 0x5cc9, 0x3a0: 0x5dba, 0x3a1: 0x5eaa, 0x3a2: 0x5f9a, 0x3a3: 0x608a, + 0x3a4: 0x617a, 0x3a5: 0x626a, 0x3a6: 0x635a, 0x3a7: 0x644a, 0x3a8: 0x6539, 0x3a9: 0x6629, + 0x3aa: 0x6719, 0x3ab: 0x6809, 0x3ac: 0x68f9, 0x3ad: 0x69e9, 0x3ae: 0x6ad9, 0x3af: 0x6bc9, + 0x3b0: 0x0812, 0x3b1: 0x0812, 0x3b2: 0x6cba, 0x3b3: 0x6dca, 0x3b4: 0x6e9a, + 0x3b6: 0x6f7a, 0x3b7: 0x705a, 0x3b8: 0x0813, 0x3b9: 0x0813, 0x3ba: 0x9253, 0x3bb: 0x9253, + 0x3bc: 0x7199, 0x3bd: 0x0004, 0x3be: 0x726a, 0x3bf: 0x0004, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0004, 0x3c1: 0x0004, 0x3c2: 0x72ea, 0x3c3: 0x73fa, 0x3c4: 0x74ca, + 0x3c6: 0x75aa, 0x3c7: 0x768a, 0x3c8: 0x9553, 0x3c9: 0x9553, 0x3ca: 0x9853, 0x3cb: 0x9853, + 0x3cc: 0x77c9, 0x3cd: 0x0004, 0x3ce: 0x0004, 0x3cf: 0x0004, 0x3d0: 0x0812, 0x3d1: 0x0812, + 0x3d2: 0x789a, 0x3d3: 0x79da, 0x3d6: 0x7b1a, 0x3d7: 0x7bfa, + 0x3d8: 0x0813, 0x3d9: 0x0813, 0x3da: 0x9b53, 0x3db: 0x9b53, 0x3dd: 0x0004, + 0x3de: 0x0004, 0x3df: 0x0004, 0x3e0: 0x0812, 0x3e1: 0x0812, 0x3e2: 0x7d3a, 0x3e3: 0x7e7a, + 0x3e4: 0x7fba, 0x3e5: 0x0912, 0x3e6: 0x809a, 0x3e7: 0x817a, 0x3e8: 0x0813, 0x3e9: 0x0813, + 0x3ea: 0xa153, 0x3eb: 0xa153, 0x3ec: 0x0913, 0x3ed: 0x0004, 0x3ee: 0x0004, 0x3ef: 0x0004, + 0x3f2: 0x82ba, 0x3f3: 0x83ca, 0x3f4: 0x849a, + 0x3f6: 0x857a, 0x3f7: 0x865a, 0x3f8: 0x9e53, 0x3f9: 0x9e53, 0x3fa: 0x4d53, 0x3fb: 0x4d53, + 0x3fc: 0x8799, 0x3fd: 0x0004, 0x3fe: 0x0004, + // Block 0x10, offset 0x400 + 0x402: 0x0013, + 0x407: 0x0013, 0x40a: 0x0012, 0x40b: 0x0013, + 0x40c: 0x0013, 0x40d: 0x0013, 0x40e: 0x0012, 0x40f: 0x0012, 0x410: 0x0013, 0x411: 0x0013, + 0x412: 0x0013, 0x413: 0x0012, 0x415: 0x0013, + 0x419: 0x0013, 0x41a: 0x0013, 0x41b: 0x0013, 0x41c: 0x0013, 0x41d: 0x0013, + 0x424: 0x0013, 0x426: 0x886b, 0x428: 0x0013, + 0x42a: 0x88cb, 0x42b: 0x890b, 0x42c: 0x0013, 0x42d: 0x0013, 0x42f: 0x0012, + 0x430: 0x0013, 0x431: 0x0013, 0x432: 0xa453, 0x433: 0x0013, 0x434: 0x0012, 0x435: 0x0010, + 0x436: 0x0010, 0x437: 0x0010, 0x438: 0x0010, 0x439: 0x0012, + 0x43c: 0x0012, 0x43d: 0x0012, 0x43e: 0x0013, 0x43f: 0x0013, + // Block 0x11, offset 0x440 + 0x440: 0x1a13, 0x441: 0x1a13, 0x442: 0x1e13, 0x443: 0x1e13, 0x444: 0x1a13, 0x445: 0x1a13, + 0x446: 0x2613, 0x447: 0x2613, 0x448: 0x2a13, 0x449: 0x2a13, 0x44a: 0x2e13, 0x44b: 0x2e13, + 0x44c: 0x2a13, 0x44d: 0x2a13, 0x44e: 0x2613, 0x44f: 0x2613, 0x450: 0xa752, 0x451: 0xa752, + 0x452: 0xaa52, 0x453: 0xaa52, 0x454: 0xad52, 0x455: 0xad52, 0x456: 0xaa52, 0x457: 0xaa52, + 0x458: 0xa752, 0x459: 0xa752, 0x45a: 0x1a12, 0x45b: 0x1a12, 0x45c: 0x1e12, 0x45d: 0x1e12, + 0x45e: 0x1a12, 0x45f: 0x1a12, 0x460: 0x2612, 0x461: 0x2612, 0x462: 0x2a12, 0x463: 0x2a12, + 0x464: 0x2e12, 0x465: 0x2e12, 0x466: 0x2a12, 0x467: 0x2a12, 0x468: 0x2612, 0x469: 0x2612, + // Block 0x12, offset 0x480 + 0x480: 0x6552, 0x481: 0x6552, 0x482: 0x6552, 0x483: 0x6552, 0x484: 0x6552, 0x485: 0x6552, + 0x486: 0x6552, 0x487: 0x6552, 0x488: 0x6552, 0x489: 0x6552, 0x48a: 0x6552, 0x48b: 0x6552, + 0x48c: 0x6552, 0x48d: 0x6552, 0x48e: 0x6552, 0x48f: 0x6552, 0x490: 0xb052, 0x491: 0xb052, + 0x492: 0xb052, 0x493: 0xb052, 0x494: 0xb052, 0x495: 0xb052, 0x496: 0xb052, 0x497: 0xb052, + 0x498: 0xb052, 0x499: 0xb052, 0x49a: 0xb052, 0x49b: 0xb052, 0x49c: 0xb052, 0x49d: 0xb052, + 0x49e: 0xb052, 0x49f: 0xb052, 0x4a0: 0x0113, 0x4a1: 0x0112, 0x4a2: 0x896b, 0x4a3: 0x8b53, + 0x4a4: 0x89cb, 0x4a5: 0x8a2a, 0x4a6: 0x8a8a, 0x4a7: 0x0f13, 0x4a8: 0x0f12, 0x4a9: 0x0313, + 0x4aa: 0x0312, 0x4ab: 0x0713, 0x4ac: 0x0712, 0x4ad: 0x8aeb, 0x4ae: 0x8b4b, 0x4af: 0x8bab, + 0x4b0: 0x8c0b, 0x4b1: 0x0012, 0x4b2: 0x0113, 0x4b3: 0x0112, 0x4b4: 0x0012, 0x4b5: 0x0313, + 0x4b6: 0x0312, 0x4b7: 0x0012, 0x4b8: 0x0012, 0x4b9: 0x0012, 0x4ba: 0x0012, 0x4bb: 0x0012, + 0x4bc: 0x0015, 0x4bd: 0x0015, 0x4be: 0x8c6b, 0x4bf: 0x8ccb, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x0113, 0x4c1: 0x0112, 0x4c2: 0x0113, 0x4c3: 0x0112, 0x4c4: 0x0113, 0x4c5: 0x0112, + 0x4c6: 0x0113, 0x4c7: 0x0112, 0x4c8: 0x0014, 0x4c9: 0x0014, 0x4ca: 0x0014, 0x4cb: 0x0713, + 0x4cc: 0x0712, 0x4cd: 0x8d2b, 0x4ce: 0x0012, 0x4cf: 0x0010, 0x4d0: 0x0113, 0x4d1: 0x0112, + 0x4d2: 0x0113, 0x4d3: 0x0112, 0x4d4: 0x6552, 0x4d5: 0x0012, 0x4d6: 0x0113, 0x4d7: 0x0112, + 0x4d8: 0x0113, 0x4d9: 0x0112, 0x4da: 0x0113, 0x4db: 0x0112, 0x4dc: 0x0113, 0x4dd: 0x0112, + 0x4de: 0x0113, 0x4df: 0x0112, 0x4e0: 0x0113, 0x4e1: 0x0112, 0x4e2: 0x0113, 0x4e3: 0x0112, + 0x4e4: 0x0113, 0x4e5: 0x0112, 0x4e6: 0x0113, 0x4e7: 0x0112, 0x4e8: 0x0113, 0x4e9: 0x0112, + 0x4ea: 0x8d8b, 0x4eb: 0x8deb, 0x4ec: 0x8e4b, 0x4ed: 0x8eab, 0x4ee: 0x8f0b, 0x4ef: 0x0012, + 0x4f0: 0x8f6b, 0x4f1: 0x8fcb, 0x4f2: 0x902b, 0x4f3: 0xb353, 0x4f4: 0x0113, 0x4f5: 0x0112, + 0x4f6: 0x0113, 0x4f7: 0x0112, 0x4f8: 0x0113, 0x4f9: 0x0112, 0x4fa: 0x0113, 0x4fb: 0x0112, + 0x4fc: 0x0113, 0x4fd: 0x0112, 0x4fe: 0x0113, 0x4ff: 0x0112, + // Block 0x14, offset 0x500 + 0x500: 0x90ea, 0x501: 0x916a, 0x502: 0x91ea, 0x503: 0x926a, 0x504: 0x931a, 0x505: 0x93ca, + 0x506: 0x944a, + 0x513: 0x94ca, 0x514: 0x95aa, 0x515: 0x968a, 0x516: 0x976a, 0x517: 0x984a, + 0x51d: 0x0010, + 0x51e: 0x0034, 0x51f: 0x0010, 0x520: 0x0010, 0x521: 0x0010, 0x522: 0x0010, 0x523: 0x0010, + 0x524: 0x0010, 0x525: 0x0010, 0x526: 0x0010, 0x527: 0x0010, 0x528: 0x0010, + 0x52a: 0x0010, 0x52b: 0x0010, 0x52c: 0x0010, 0x52d: 0x0010, 0x52e: 0x0010, 0x52f: 0x0010, + 0x530: 0x0010, 0x531: 0x0010, 0x532: 0x0010, 0x533: 0x0010, 0x534: 0x0010, 0x535: 0x0010, + 0x536: 0x0010, 0x538: 0x0010, 0x539: 0x0010, 0x53a: 0x0010, 0x53b: 0x0010, + 0x53c: 0x0010, 0x53e: 0x0010, + // Block 0x15, offset 0x540 + 0x540: 0x2713, 0x541: 0x2913, 0x542: 0x2b13, 0x543: 0x2913, 0x544: 0x2f13, 0x545: 0x2913, + 0x546: 0x2b13, 0x547: 0x2913, 0x548: 0x2713, 0x549: 0x3913, 0x54a: 0x3b13, + 0x54c: 0x3f13, 0x54d: 0x3913, 0x54e: 0x3b13, 0x54f: 0x3913, 0x550: 0x2713, 0x551: 0x2913, + 0x552: 0x2b13, 0x554: 0x2f13, 0x555: 0x2913, 0x557: 0xbc52, + 0x558: 0xbf52, 0x559: 0xc252, 0x55a: 0xbf52, 0x55b: 0xc552, 0x55c: 0xbf52, 0x55d: 0xc252, + 0x55e: 0xbf52, 0x55f: 0xbc52, 0x560: 0xc852, 0x561: 0xcb52, 0x563: 0xce52, + 0x564: 0xc852, 0x565: 0xcb52, 0x566: 0xc852, 0x567: 0x2712, 0x568: 0x2912, 0x569: 0x2b12, + 0x56a: 0x2912, 0x56b: 0x2f12, 0x56c: 0x2912, 0x56d: 0x2b12, 0x56e: 0x2912, 0x56f: 0x2712, + 0x570: 0x3912, 0x571: 0x3b12, 0x573: 0x3f12, 0x574: 0x3912, 0x575: 0x3b12, + 0x576: 0x3912, 0x577: 0x2712, 0x578: 0x2912, 0x579: 0x2b12, 0x57b: 0x2f12, + 0x57c: 0x2912, + // Block 0x16, offset 0x580 + 0x580: 0x2213, 0x581: 0x2213, 0x582: 0x2613, 0x583: 0x2613, 0x584: 0x2213, 0x585: 0x2213, + 0x586: 0x2e13, 0x587: 0x2e13, 0x588: 0x2213, 0x589: 0x2213, 0x58a: 0x2613, 0x58b: 0x2613, + 0x58c: 0x2213, 0x58d: 0x2213, 0x58e: 0x3e13, 0x58f: 0x3e13, 0x590: 0x2213, 0x591: 0x2213, + 0x592: 0x2613, 0x593: 0x2613, 0x594: 0x2213, 0x595: 0x2213, 0x596: 0x2e13, 0x597: 0x2e13, + 0x598: 0x2213, 0x599: 0x2213, 0x59a: 0x2613, 0x59b: 0x2613, 0x59c: 0x2213, 0x59d: 0x2213, + 0x59e: 0xd153, 0x59f: 0xd153, 0x5a0: 0xd453, 0x5a1: 0xd453, 0x5a2: 0x2212, 0x5a3: 0x2212, + 0x5a4: 0x2612, 0x5a5: 0x2612, 0x5a6: 0x2212, 0x5a7: 0x2212, 0x5a8: 0x2e12, 0x5a9: 0x2e12, + 0x5aa: 0x2212, 0x5ab: 0x2212, 0x5ac: 0x2612, 0x5ad: 0x2612, 0x5ae: 0x2212, 0x5af: 0x2212, + 0x5b0: 0x3e12, 0x5b1: 0x3e12, 0x5b2: 0x2212, 0x5b3: 0x2212, 0x5b4: 0x2612, 0x5b5: 0x2612, + 0x5b6: 0x2212, 0x5b7: 0x2212, 0x5b8: 0x2e12, 0x5b9: 0x2e12, 0x5ba: 0x2212, 0x5bb: 0x2212, + 0x5bc: 0x2612, 0x5bd: 0x2612, 0x5be: 0x2212, 0x5bf: 0x2212, + // Block 0x17, offset 0x5c0 + 0x5c2: 0x0010, + 0x5c7: 0x0010, 0x5c9: 0x0010, 0x5cb: 0x0010, + 0x5cd: 0x0010, 0x5ce: 0x0010, 0x5cf: 0x0010, 0x5d1: 0x0010, + 0x5d2: 0x0010, 0x5d4: 0x0010, 0x5d7: 0x0010, + 0x5d9: 0x0010, 0x5db: 0x0010, 0x5dd: 0x0010, + 0x5df: 0x0010, 0x5e1: 0x0010, 0x5e2: 0x0010, + 0x5e4: 0x0010, 0x5e7: 0x0010, 0x5e8: 0x0010, 0x5e9: 0x0010, + 0x5ea: 0x0010, 0x5ec: 0x0010, 0x5ed: 0x0010, 0x5ee: 0x0010, 0x5ef: 0x0010, + 0x5f0: 0x0010, 0x5f1: 0x0010, 0x5f2: 0x0010, 0x5f4: 0x0010, 0x5f5: 0x0010, + 0x5f6: 0x0010, 0x5f7: 0x0010, 0x5f9: 0x0010, 0x5fa: 0x0010, 0x5fb: 0x0010, + 0x5fc: 0x0010, 0x5fe: 0x0010, +} + +// caseIndex: 27 blocks, 1728 entries, 3456 bytes +// Block 0 is the zero block. +var caseIndex = [1728]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x16, 0xc3: 0x17, 0xc4: 0x18, 0xc5: 0x19, 0xc6: 0x01, 0xc7: 0x02, + 0xc8: 0x1a, 0xc9: 0x03, 0xca: 0x04, 0xcb: 0x1b, 0xcc: 0x1c, 0xcd: 0x05, 0xce: 0x06, 0xcf: 0x07, + 0xd0: 0x1d, 0xd1: 0x1e, 0xd2: 0x1f, 0xd3: 0x20, 0xd4: 0x21, 0xd5: 0x22, 0xd6: 0x08, 0xd7: 0x23, + 0xd8: 0x24, 0xd9: 0x25, 0xda: 0x26, 0xdb: 0x27, 0xdc: 0x28, 0xdd: 0x29, 0xde: 0x2a, 0xdf: 0x2b, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, + 0xea: 0x06, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x08, 0xef: 0x09, + 0xf0: 0x16, 0xf3: 0x18, + // Block 0x4, offset 0x100 + 0x120: 0x2c, 0x121: 0x2d, 0x122: 0x2e, 0x123: 0x09, 0x124: 0x2f, 0x125: 0x30, 0x126: 0x31, 0x127: 0x32, + 0x128: 0x33, 0x129: 0x34, 0x12a: 0x35, 0x12b: 0x36, 0x12c: 0x37, 0x12d: 0x38, 0x12e: 0x39, 0x12f: 0x3a, + 0x130: 0x3b, 0x131: 0x3c, 0x132: 0x3d, 0x133: 0x3e, 0x134: 0x3f, 0x135: 0x40, 0x136: 0x41, 0x137: 0x42, + 0x138: 0x43, 0x139: 0x44, 0x13a: 0x45, 0x13b: 0x46, 0x13c: 0x47, 0x13d: 0x48, 0x13e: 0x49, 0x13f: 0x4a, + // Block 0x5, offset 0x140 + 0x140: 0x4b, 0x141: 0x4c, 0x142: 0x4d, 0x143: 0x0a, 0x144: 0x26, 0x145: 0x26, 0x146: 0x26, 0x147: 0x26, + 0x148: 0x26, 0x149: 0x4e, 0x14a: 0x4f, 0x14b: 0x50, 0x14c: 0x51, 0x14d: 0x52, 0x14e: 0x53, 0x14f: 0x54, + 0x150: 0x55, 0x151: 0x26, 0x152: 0x26, 0x153: 0x26, 0x154: 0x26, 0x155: 0x26, 0x156: 0x26, 0x157: 0x26, + 0x158: 0x26, 0x159: 0x56, 0x15a: 0x57, 0x15b: 0x58, 0x15c: 0x59, 0x15d: 0x5a, 0x15e: 0x5b, 0x15f: 0x5c, + 0x160: 0x5d, 0x161: 0x5e, 0x162: 0x5f, 0x163: 0x60, 0x164: 0x61, 0x165: 0x62, 0x167: 0x63, + 0x168: 0x64, 0x169: 0x65, 0x16a: 0x66, 0x16b: 0x67, 0x16c: 0x68, 0x16d: 0x69, 0x16e: 0x6a, 0x16f: 0x6b, + 0x170: 0x6c, 0x171: 0x6d, 0x172: 0x6e, 0x173: 0x6f, 0x174: 0x70, 0x175: 0x71, 0x176: 0x72, 0x177: 0x73, + 0x178: 0x74, 0x179: 0x74, 0x17a: 0x75, 0x17b: 0x74, 0x17c: 0x76, 0x17d: 0x0b, 0x17e: 0x0c, 0x17f: 0x0d, + // Block 0x6, offset 0x180 + 0x180: 0x77, 0x181: 0x78, 0x182: 0x79, 0x183: 0x7a, 0x184: 0x0e, 0x185: 0x7b, 0x186: 0x7c, + 0x192: 0x7d, 0x193: 0x0f, + 0x1b0: 0x7e, 0x1b1: 0x10, 0x1b2: 0x74, 0x1b3: 0x7f, 0x1b4: 0x80, 0x1b5: 0x81, 0x1b6: 0x82, 0x1b7: 0x83, + 0x1b8: 0x84, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x85, 0x1c2: 0x86, 0x1c3: 0x87, 0x1c4: 0x88, 0x1c5: 0x26, 0x1c6: 0x89, + // Block 0x8, offset 0x200 + 0x200: 0x8a, 0x201: 0x26, 0x202: 0x26, 0x203: 0x26, 0x204: 0x26, 0x205: 0x26, 0x206: 0x26, 0x207: 0x26, + 0x208: 0x26, 0x209: 0x26, 0x20a: 0x26, 0x20b: 0x26, 0x20c: 0x26, 0x20d: 0x26, 0x20e: 0x26, 0x20f: 0x26, + 0x210: 0x26, 0x211: 0x26, 0x212: 0x8b, 0x213: 0x8c, 0x214: 0x26, 0x215: 0x26, 0x216: 0x26, 0x217: 0x26, + 0x218: 0x8d, 0x219: 0x8e, 0x21a: 0x8f, 0x21b: 0x90, 0x21c: 0x91, 0x21d: 0x92, 0x21e: 0x11, 0x21f: 0x93, + 0x220: 0x94, 0x221: 0x95, 0x222: 0x26, 0x223: 0x96, 0x224: 0x97, 0x225: 0x98, 0x226: 0x99, 0x227: 0x9a, + 0x228: 0x9b, 0x229: 0x9c, 0x22a: 0x9d, 0x22b: 0x9e, 0x22c: 0x9f, 0x22d: 0xa0, 0x22e: 0xa1, 0x22f: 0xa2, + 0x230: 0x26, 0x231: 0x26, 0x232: 0x26, 0x233: 0x26, 0x234: 0x26, 0x235: 0x26, 0x236: 0x26, 0x237: 0x26, + 0x238: 0x26, 0x239: 0x26, 0x23a: 0x26, 0x23b: 0x26, 0x23c: 0x26, 0x23d: 0x26, 0x23e: 0x26, 0x23f: 0x26, + // Block 0x9, offset 0x240 + 0x240: 0x26, 0x241: 0x26, 0x242: 0x26, 0x243: 0x26, 0x244: 0x26, 0x245: 0x26, 0x246: 0x26, 0x247: 0x26, + 0x248: 0x26, 0x249: 0x26, 0x24a: 0x26, 0x24b: 0x26, 0x24c: 0x26, 0x24d: 0x26, 0x24e: 0x26, 0x24f: 0x26, + 0x250: 0x26, 0x251: 0x26, 0x252: 0x26, 0x253: 0x26, 0x254: 0x26, 0x255: 0x26, 0x256: 0x26, 0x257: 0x26, + 0x258: 0x26, 0x259: 0x26, 0x25a: 0x26, 0x25b: 0x26, 0x25c: 0x26, 0x25d: 0x26, 0x25e: 0x26, 0x25f: 0x26, + 0x260: 0x26, 0x261: 0x26, 0x262: 0x26, 0x263: 0x26, 0x264: 0x26, 0x265: 0x26, 0x266: 0x26, 0x267: 0x26, + 0x268: 0x26, 0x269: 0x26, 0x26a: 0x26, 0x26b: 0x26, 0x26c: 0x26, 0x26d: 0x26, 0x26e: 0x26, 0x26f: 0x26, + 0x270: 0x26, 0x271: 0x26, 0x272: 0x26, 0x273: 0x26, 0x274: 0x26, 0x275: 0x26, 0x276: 0x26, 0x277: 0x26, + 0x278: 0x26, 0x279: 0x26, 0x27a: 0x26, 0x27b: 0x26, 0x27c: 0x26, 0x27d: 0x26, 0x27e: 0x26, 0x27f: 0x26, + // Block 0xa, offset 0x280 + 0x280: 0x26, 0x281: 0x26, 0x282: 0x26, 0x283: 0x26, 0x284: 0x26, 0x285: 0x26, 0x286: 0x26, 0x287: 0x26, + 0x288: 0x26, 0x289: 0x26, 0x28a: 0x26, 0x28b: 0x26, 0x28c: 0x26, 0x28d: 0x26, 0x28e: 0x26, 0x28f: 0x26, + 0x290: 0x26, 0x291: 0x26, 0x292: 0x26, 0x293: 0x26, 0x294: 0x26, 0x295: 0x26, 0x296: 0x26, 0x297: 0x26, + 0x298: 0x26, 0x299: 0x26, 0x29a: 0x26, 0x29b: 0x26, 0x29c: 0x26, 0x29d: 0x26, 0x29e: 0xa3, 0x29f: 0xa4, + // Block 0xb, offset 0x2c0 + 0x2ec: 0x12, 0x2ed: 0xa5, 0x2ee: 0xa6, 0x2ef: 0xa7, + 0x2f0: 0x26, 0x2f1: 0x26, 0x2f2: 0x26, 0x2f3: 0x26, 0x2f4: 0xa8, 0x2f5: 0xa9, 0x2f6: 0xaa, 0x2f7: 0xab, + 0x2f8: 0xac, 0x2f9: 0xad, 0x2fa: 0x26, 0x2fb: 0xae, 0x2fc: 0xaf, 0x2fd: 0xb0, 0x2fe: 0xb1, 0x2ff: 0xb2, + // Block 0xc, offset 0x300 + 0x300: 0xb3, 0x301: 0xb4, 0x302: 0x26, 0x303: 0xb5, 0x305: 0xb6, 0x307: 0xb7, + 0x30a: 0xb8, 0x30b: 0xb9, 0x30c: 0xba, 0x30d: 0xbb, 0x30e: 0xbc, 0x30f: 0xbd, + 0x310: 0xbe, 0x311: 0xbf, 0x312: 0xc0, 0x313: 0xc1, 0x314: 0xc2, 0x315: 0xc3, 0x316: 0x13, + 0x318: 0x26, 0x319: 0x26, 0x31a: 0x26, 0x31b: 0x26, 0x31c: 0xc4, 0x31d: 0xc5, 0x31e: 0xc6, + 0x320: 0xc7, 0x321: 0xc8, 0x322: 0xc9, 0x323: 0xca, 0x324: 0xcb, 0x326: 0xcc, + 0x328: 0xcd, 0x329: 0xce, 0x32a: 0xcf, 0x32b: 0xd0, 0x32c: 0x60, 0x32d: 0xd1, 0x32e: 0xd2, + 0x330: 0x26, 0x331: 0xd3, 0x332: 0xd4, 0x333: 0xd5, 0x334: 0xd6, + 0x33a: 0xd7, 0x33b: 0xd8, 0x33c: 0xd9, 0x33d: 0xda, 0x33e: 0xdb, 0x33f: 0xdc, + // Block 0xd, offset 0x340 + 0x340: 0xdd, 0x341: 0xde, 0x342: 0xdf, 0x343: 0xe0, 0x344: 0xe1, 0x345: 0xe2, 0x346: 0xe3, 0x347: 0xe4, + 0x348: 0xe5, 0x349: 0xe6, 0x34a: 0xe7, 0x34b: 0xe8, 0x34c: 0xe9, 0x34d: 0xea, + 0x350: 0xeb, 0x351: 0xec, 0x352: 0xed, 0x353: 0xee, 0x356: 0xef, 0x357: 0xf0, + 0x358: 0xf1, 0x359: 0xf2, 0x35a: 0xf3, 0x35b: 0xf4, 0x35c: 0xf5, + 0x360: 0xf6, 0x362: 0xf7, 0x363: 0xf8, 0x364: 0xf9, 0x365: 0xfa, 0x366: 0xfb, 0x367: 0xfc, + 0x368: 0xfd, 0x369: 0xfe, 0x36a: 0xff, 0x36b: 0x100, + 0x370: 0x101, 0x371: 0x102, 0x372: 0x103, 0x374: 0x104, 0x375: 0x105, 0x376: 0x106, + 0x37b: 0x107, 0x37c: 0x108, 0x37d: 0x109, 0x37e: 0x10a, + // Block 0xe, offset 0x380 + 0x380: 0x26, 0x381: 0x26, 0x382: 0x26, 0x383: 0x26, 0x384: 0x26, 0x385: 0x26, 0x386: 0x26, 0x387: 0x26, + 0x388: 0x26, 0x389: 0x26, 0x38a: 0x26, 0x38b: 0x26, 0x38c: 0x26, 0x38d: 0x26, 0x38e: 0x10b, + 0x390: 0x26, 0x391: 0x10c, 0x392: 0x26, 0x393: 0x26, 0x394: 0x26, 0x395: 0x10d, + 0x3be: 0xa9, 0x3bf: 0x10e, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x26, 0x3c1: 0x26, 0x3c2: 0x26, 0x3c3: 0x26, 0x3c4: 0x26, 0x3c5: 0x26, 0x3c6: 0x26, 0x3c7: 0x26, + 0x3c8: 0x26, 0x3c9: 0x26, 0x3ca: 0x26, 0x3cb: 0x26, 0x3cc: 0x26, 0x3cd: 0x26, 0x3ce: 0x26, 0x3cf: 0x26, + 0x3d0: 0x10f, 0x3d1: 0x110, + // Block 0x10, offset 0x400 + 0x410: 0x26, 0x411: 0x26, 0x412: 0x26, 0x413: 0x26, 0x414: 0x26, 0x415: 0x26, 0x416: 0x26, 0x417: 0x26, + 0x418: 0x26, 0x419: 0x111, + // Block 0x11, offset 0x440 + 0x460: 0x26, 0x461: 0x26, 0x462: 0x26, 0x463: 0x26, 0x464: 0x26, 0x465: 0x26, 0x466: 0x26, 0x467: 0x26, + 0x468: 0x100, 0x469: 0x112, 0x46a: 0x113, 0x46b: 0x114, 0x46c: 0x115, 0x46d: 0x116, 0x46e: 0x117, + 0x479: 0x118, 0x47c: 0x26, 0x47d: 0x119, 0x47e: 0x11a, 0x47f: 0x11b, + // Block 0x12, offset 0x480 + 0x4bf: 0x11c, + // Block 0x13, offset 0x4c0 + 0x4f0: 0x26, 0x4f1: 0x11d, 0x4f2: 0x11e, + // Block 0x14, offset 0x500 + 0x53c: 0x11f, 0x53d: 0x120, + // Block 0x15, offset 0x540 + 0x545: 0x121, 0x546: 0x122, + 0x549: 0x123, + 0x550: 0x124, 0x551: 0x125, 0x552: 0x126, 0x553: 0x127, 0x554: 0x128, 0x555: 0x129, 0x556: 0x12a, 0x557: 0x12b, + 0x558: 0x12c, 0x559: 0x12d, 0x55a: 0x12e, 0x55b: 0x12f, 0x55c: 0x130, 0x55d: 0x131, 0x55e: 0x132, 0x55f: 0x133, + 0x568: 0x134, 0x569: 0x135, 0x56a: 0x136, + 0x57c: 0x137, + // Block 0x16, offset 0x580 + 0x580: 0x138, 0x581: 0x139, 0x582: 0x13a, 0x584: 0x13b, 0x585: 0x13c, + 0x58a: 0x13d, 0x58b: 0x13e, + 0x593: 0x13f, + 0x59f: 0x140, + 0x5a0: 0x26, 0x5a1: 0x26, 0x5a2: 0x26, 0x5a3: 0x141, 0x5a4: 0x14, 0x5a5: 0x142, + 0x5b8: 0x143, 0x5b9: 0x15, 0x5ba: 0x144, + // Block 0x17, offset 0x5c0 + 0x5c4: 0x145, 0x5c5: 0x146, 0x5c6: 0x147, + 0x5cf: 0x148, + 0x5ef: 0x149, + // Block 0x18, offset 0x600 + 0x610: 0x0a, 0x611: 0x0b, 0x612: 0x0c, 0x613: 0x0d, 0x614: 0x0e, 0x616: 0x0f, + 0x61a: 0x10, 0x61b: 0x11, 0x61c: 0x12, 0x61d: 0x13, 0x61e: 0x14, 0x61f: 0x15, + // Block 0x19, offset 0x640 + 0x640: 0x14a, 0x641: 0x14b, 0x644: 0x14b, 0x645: 0x14b, 0x646: 0x14b, 0x647: 0x14c, + // Block 0x1a, offset 0x680 + 0x6a0: 0x17, +} + +// sparseOffsets: 312 entries, 624 bytes +var sparseOffsets = []uint16{0x0, 0x9, 0xf, 0x18, 0x24, 0x2e, 0x34, 0x37, 0x3b, 0x3e, 0x42, 0x4c, 0x4e, 0x57, 0x5e, 0x63, 0x71, 0x72, 0x80, 0x8f, 0x99, 0x9c, 0xa3, 0xab, 0xaf, 0xb7, 0xbd, 0xcb, 0xd6, 0xe3, 0xee, 0xfa, 0x104, 0x110, 0x11b, 0x127, 0x133, 0x13b, 0x145, 0x150, 0x15b, 0x167, 0x16d, 0x178, 0x17e, 0x186, 0x189, 0x18e, 0x192, 0x196, 0x19d, 0x1a6, 0x1ae, 0x1af, 0x1b8, 0x1bf, 0x1c7, 0x1cd, 0x1d2, 0x1d6, 0x1d9, 0x1db, 0x1de, 0x1e3, 0x1e4, 0x1e6, 0x1e8, 0x1ea, 0x1f1, 0x1f6, 0x1fa, 0x203, 0x206, 0x209, 0x20f, 0x210, 0x21b, 0x21c, 0x21d, 0x222, 0x22f, 0x238, 0x23e, 0x246, 0x24f, 0x258, 0x261, 0x266, 0x269, 0x274, 0x282, 0x284, 0x28b, 0x28f, 0x29b, 0x29c, 0x2a7, 0x2af, 0x2b7, 0x2bd, 0x2be, 0x2cc, 0x2d1, 0x2d4, 0x2d9, 0x2dd, 0x2e3, 0x2e8, 0x2eb, 0x2f0, 0x2f5, 0x2f6, 0x2fc, 0x2fe, 0x2ff, 0x301, 0x303, 0x306, 0x307, 0x309, 0x30c, 0x312, 0x316, 0x318, 0x31d, 0x324, 0x334, 0x33e, 0x33f, 0x348, 0x34c, 0x351, 0x359, 0x35f, 0x365, 0x36f, 0x374, 0x37d, 0x383, 0x38c, 0x390, 0x398, 0x39a, 0x39c, 0x39f, 0x3a1, 0x3a3, 0x3a4, 0x3a5, 0x3a7, 0x3a9, 0x3af, 0x3b4, 0x3b6, 0x3bd, 0x3c0, 0x3c2, 0x3c8, 0x3cd, 0x3cf, 0x3d0, 0x3d1, 0x3d2, 0x3d4, 0x3d6, 0x3d8, 0x3db, 0x3dd, 0x3e0, 0x3e8, 0x3eb, 0x3ef, 0x3f7, 0x3f9, 0x409, 0x40a, 0x40c, 0x411, 0x417, 0x419, 0x41a, 0x41c, 0x41e, 0x420, 0x42d, 0x42e, 0x42f, 0x433, 0x435, 0x436, 0x437, 0x438, 0x439, 0x43c, 0x43f, 0x440, 0x443, 0x44a, 0x450, 0x452, 0x456, 0x45e, 0x464, 0x468, 0x46f, 0x473, 0x477, 0x480, 0x48a, 0x48c, 0x492, 0x498, 0x4a2, 0x4ac, 0x4ae, 0x4b7, 0x4bd, 0x4c3, 0x4c9, 0x4cc, 0x4d2, 0x4d5, 0x4de, 0x4df, 0x4e6, 0x4ea, 0x4eb, 0x4ee, 0x4f8, 0x4fb, 0x4fd, 0x504, 0x50c, 0x512, 0x519, 0x51a, 0x520, 0x523, 0x52b, 0x532, 0x53c, 0x544, 0x547, 0x54c, 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x557, 0x55a, 0x55b, 0x55e, 0x55f, 0x562, 0x564, 0x568, 0x569, 0x56b, 0x56e, 0x570, 0x573, 0x576, 0x578, 0x57d, 0x57f, 0x580, 0x585, 0x589, 0x58a, 0x58d, 0x591, 0x59c, 0x5a0, 0x5a8, 0x5ad, 0x5b1, 0x5b4, 0x5b8, 0x5bb, 0x5be, 0x5c3, 0x5c7, 0x5cb, 0x5cf, 0x5d3, 0x5d5, 0x5d7, 0x5da, 0x5de, 0x5e4, 0x5e5, 0x5e6, 0x5e9, 0x5eb, 0x5ed, 0x5f0, 0x5f5, 0x5f9, 0x5fb, 0x601, 0x60a, 0x60f, 0x610, 0x613, 0x614, 0x615, 0x616, 0x618, 0x619, 0x61a} + +// sparseValues: 1562 entries, 6248 bytes +var sparseValues = [1562]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0004, lo: 0xa8, hi: 0xa8}, + {value: 0x0012, lo: 0xaa, hi: 0xaa}, + {value: 0x0014, lo: 0xad, hi: 0xad}, + {value: 0x0004, lo: 0xaf, hi: 0xaf}, + {value: 0x0004, lo: 0xb4, hi: 0xb4}, + {value: 0x001a, lo: 0xb5, hi: 0xb5}, + {value: 0x0054, lo: 0xb7, hi: 0xb7}, + {value: 0x0004, lo: 0xb8, hi: 0xb8}, + {value: 0x0012, lo: 0xba, hi: 0xba}, + // Block 0x1, offset 0x9 + {value: 0x2013, lo: 0x80, hi: 0x96}, + {value: 0x2013, lo: 0x98, hi: 0x9e}, + {value: 0x009a, lo: 0x9f, hi: 0x9f}, + {value: 0x2012, lo: 0xa0, hi: 0xb6}, + {value: 0x2012, lo: 0xb8, hi: 0xbe}, + {value: 0x0252, lo: 0xbf, hi: 0xbf}, + // Block 0x2, offset 0xf + {value: 0x0117, lo: 0x80, hi: 0xaf}, + {value: 0x011b, lo: 0xb0, hi: 0xb0}, + {value: 0x019a, lo: 0xb1, hi: 0xb1}, + {value: 0x0117, lo: 0xb2, hi: 0xb7}, + {value: 0x0012, lo: 0xb8, hi: 0xb8}, + {value: 0x0316, lo: 0xb9, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x0316, lo: 0xbd, hi: 0xbe}, + {value: 0x0553, lo: 0xbf, hi: 0xbf}, + // Block 0x3, offset 0x18 + {value: 0x0552, lo: 0x80, hi: 0x80}, + {value: 0x0316, lo: 0x81, hi: 0x82}, + {value: 0x0716, lo: 0x83, hi: 0x84}, + {value: 0x0316, lo: 0x85, hi: 0x86}, + {value: 0x0f16, lo: 0x87, hi: 0x88}, + {value: 0x01da, lo: 0x89, hi: 0x89}, + {value: 0x0117, lo: 0x8a, hi: 0xb7}, + {value: 0x0253, lo: 0xb8, hi: 0xb8}, + {value: 0x0316, lo: 0xb9, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x0316, lo: 0xbd, hi: 0xbe}, + {value: 0x028a, lo: 0xbf, hi: 0xbf}, + // Block 0x4, offset 0x24 + {value: 0x0117, lo: 0x80, hi: 0x9f}, + {value: 0x2f53, lo: 0xa0, hi: 0xa0}, + {value: 0x0012, lo: 0xa1, hi: 0xa1}, + {value: 0x0117, lo: 0xa2, hi: 0xb3}, + {value: 0x0012, lo: 0xb4, hi: 0xb9}, + {value: 0x090b, lo: 0xba, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x2953, lo: 0xbd, hi: 0xbd}, + {value: 0x098b, lo: 0xbe, hi: 0xbe}, + {value: 0x0a0a, lo: 0xbf, hi: 0xbf}, + // Block 0x5, offset 0x2e + {value: 0x0015, lo: 0x80, hi: 0x81}, + {value: 0x0014, lo: 0x82, hi: 0x97}, + {value: 0x0004, lo: 0x98, hi: 0x9d}, + {value: 0x0014, lo: 0x9e, hi: 0x9f}, + {value: 0x0015, lo: 0xa0, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xbf}, + // Block 0x6, offset 0x34 + {value: 0x0024, lo: 0x80, hi: 0x94}, + {value: 0x0034, lo: 0x95, hi: 0xbc}, + {value: 0x0024, lo: 0xbd, hi: 0xbf}, + // Block 0x7, offset 0x37 + {value: 0x6553, lo: 0x80, hi: 0x8f}, + {value: 0x2013, lo: 0x90, hi: 0x9f}, + {value: 0x5f53, lo: 0xa0, hi: 0xaf}, + {value: 0x2012, lo: 0xb0, hi: 0xbf}, + // Block 0x8, offset 0x3b + {value: 0x5f52, lo: 0x80, hi: 0x8f}, + {value: 0x6552, lo: 0x90, hi: 0x9f}, + {value: 0x0117, lo: 0xa0, hi: 0xbf}, + // Block 0x9, offset 0x3e + {value: 0x0117, lo: 0x80, hi: 0x81}, + {value: 0x0024, lo: 0x83, hi: 0x87}, + {value: 0x0014, lo: 0x88, hi: 0x89}, + {value: 0x0117, lo: 0x8a, hi: 0xbf}, + // Block 0xa, offset 0x42 + {value: 0x0f13, lo: 0x80, hi: 0x80}, + {value: 0x0316, lo: 0x81, hi: 0x82}, + {value: 0x0716, lo: 0x83, hi: 0x84}, + {value: 0x0316, lo: 0x85, hi: 0x86}, + {value: 0x0f16, lo: 0x87, hi: 0x88}, + {value: 0x0316, lo: 0x89, hi: 0x8a}, + {value: 0x0716, lo: 0x8b, hi: 0x8c}, + {value: 0x0316, lo: 0x8d, hi: 0x8e}, + {value: 0x0f12, lo: 0x8f, hi: 0x8f}, + {value: 0x0117, lo: 0x90, hi: 0xbf}, + // Block 0xb, offset 0x4c + {value: 0x0117, lo: 0x80, hi: 0xaf}, + {value: 0x6553, lo: 0xb1, hi: 0xbf}, + // Block 0xc, offset 0x4e + {value: 0x3013, lo: 0x80, hi: 0x8f}, + {value: 0x6853, lo: 0x90, hi: 0x96}, + {value: 0x0014, lo: 0x99, hi: 0x99}, + {value: 0x0010, lo: 0x9a, hi: 0x9c}, + {value: 0x0010, lo: 0x9e, hi: 0x9e}, + {value: 0x0054, lo: 0x9f, hi: 0x9f}, + {value: 0x0012, lo: 0xa0, hi: 0xa0}, + {value: 0x6552, lo: 0xa1, hi: 0xaf}, + {value: 0x3012, lo: 0xb0, hi: 0xbf}, + // Block 0xd, offset 0x57 + {value: 0x0034, lo: 0x81, hi: 0x82}, + {value: 0x0024, lo: 0x84, hi: 0x84}, + {value: 0x0034, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0x87, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0xaa}, + {value: 0x0010, lo: 0xaf, hi: 0xb3}, + {value: 0x0054, lo: 0xb4, hi: 0xb4}, + // Block 0xe, offset 0x5e + {value: 0x0014, lo: 0x80, hi: 0x85}, + {value: 0x0024, lo: 0x90, hi: 0x97}, + {value: 0x0034, lo: 0x98, hi: 0x9a}, + {value: 0x0014, lo: 0x9c, hi: 0x9c}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0xf, offset 0x63 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x8a}, + {value: 0x0034, lo: 0x8b, hi: 0x92}, + {value: 0x0024, lo: 0x93, hi: 0x94}, + {value: 0x0034, lo: 0x95, hi: 0x96}, + {value: 0x0024, lo: 0x97, hi: 0x9b}, + {value: 0x0034, lo: 0x9c, hi: 0x9c}, + {value: 0x0024, lo: 0x9d, hi: 0x9e}, + {value: 0x0034, lo: 0x9f, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0010, lo: 0xab, hi: 0xab}, + {value: 0x0010, lo: 0xae, hi: 0xaf}, + {value: 0x0034, lo: 0xb0, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xbf}, + // Block 0x10, offset 0x71 + {value: 0x0010, lo: 0x80, hi: 0xbf}, + // Block 0x11, offset 0x72 + {value: 0x0010, lo: 0x80, hi: 0x93}, + {value: 0x0010, lo: 0x95, hi: 0x95}, + {value: 0x0024, lo: 0x96, hi: 0x9c}, + {value: 0x0014, lo: 0x9d, hi: 0x9d}, + {value: 0x0024, lo: 0x9f, hi: 0xa2}, + {value: 0x0034, lo: 0xa3, hi: 0xa3}, + {value: 0x0024, lo: 0xa4, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xa6}, + {value: 0x0024, lo: 0xa7, hi: 0xa8}, + {value: 0x0034, lo: 0xaa, hi: 0xaa}, + {value: 0x0024, lo: 0xab, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xbc}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x12, offset 0x80 + {value: 0x0014, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0034, lo: 0x91, hi: 0x91}, + {value: 0x0010, lo: 0x92, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb0}, + {value: 0x0034, lo: 0xb1, hi: 0xb1}, + {value: 0x0024, lo: 0xb2, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0024, lo: 0xb5, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb9}, + {value: 0x0024, lo: 0xba, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbc}, + {value: 0x0024, lo: 0xbd, hi: 0xbd}, + {value: 0x0034, lo: 0xbe, hi: 0xbe}, + {value: 0x0024, lo: 0xbf, hi: 0xbf}, + // Block 0x13, offset 0x8f + {value: 0x0024, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0024, lo: 0x83, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x84}, + {value: 0x0024, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0024, lo: 0x87, hi: 0x87}, + {value: 0x0034, lo: 0x88, hi: 0x88}, + {value: 0x0024, lo: 0x89, hi: 0x8a}, + {value: 0x0010, lo: 0x8d, hi: 0xbf}, + // Block 0x14, offset 0x99 + {value: 0x0010, lo: 0x80, hi: 0xa5}, + {value: 0x0014, lo: 0xa6, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + // Block 0x15, offset 0x9c + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0024, lo: 0xab, hi: 0xb1}, + {value: 0x0034, lo: 0xb2, hi: 0xb2}, + {value: 0x0024, lo: 0xb3, hi: 0xb3}, + {value: 0x0014, lo: 0xb4, hi: 0xb5}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + {value: 0x0034, lo: 0xbd, hi: 0xbd}, + // Block 0x16, offset 0xa3 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0024, lo: 0x96, hi: 0x99}, + {value: 0x0014, lo: 0x9a, hi: 0x9a}, + {value: 0x0024, lo: 0x9b, hi: 0xa3}, + {value: 0x0014, lo: 0xa4, hi: 0xa4}, + {value: 0x0024, lo: 0xa5, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa8}, + {value: 0x0024, lo: 0xa9, hi: 0xad}, + // Block 0x17, offset 0xab + {value: 0x0010, lo: 0x80, hi: 0x98}, + {value: 0x0034, lo: 0x99, hi: 0x9b}, + {value: 0x0010, lo: 0xa0, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x18, offset 0xaf + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0004, lo: 0x88, hi: 0x88}, + {value: 0x0010, lo: 0x89, hi: 0x8e}, + {value: 0x0014, lo: 0x90, hi: 0x91}, + {value: 0x0024, lo: 0x98, hi: 0x98}, + {value: 0x0034, lo: 0x99, hi: 0x9b}, + {value: 0x0024, lo: 0x9c, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x19, offset 0xb7 + {value: 0x0014, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0xb9}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x1a, offset 0xbd + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x88}, + {value: 0x0010, lo: 0x89, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0024, lo: 0x91, hi: 0x91}, + {value: 0x0034, lo: 0x92, hi: 0x92}, + {value: 0x0024, lo: 0x93, hi: 0x94}, + {value: 0x0014, lo: 0x95, hi: 0x97}, + {value: 0x0010, lo: 0x98, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0014, lo: 0xb1, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xbf}, + // Block 0x1b, offset 0xcb + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb2}, + {value: 0x0010, lo: 0xb6, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x1c, offset 0xd6 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8e, hi: 0x8e}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x9c, hi: 0x9d}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xb1}, + {value: 0x0010, lo: 0xbc, hi: 0xbc}, + {value: 0x0024, lo: 0xbe, hi: 0xbe}, + // Block 0x1d, offset 0xe3 + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8a}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb6}, + {value: 0x0010, lo: 0xb8, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x1e, offset 0xee + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0014, lo: 0x87, hi: 0x88}, + {value: 0x0014, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0014, lo: 0x91, hi: 0x91}, + {value: 0x0010, lo: 0x99, hi: 0x9c}, + {value: 0x0010, lo: 0x9e, hi: 0x9e}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb5}, + // Block 0x1f, offset 0xfa + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8d}, + {value: 0x0010, lo: 0x8f, hi: 0x91}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x20, offset 0x104 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x85}, + {value: 0x0014, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x89, hi: 0x89}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb9, hi: 0xb9}, + {value: 0x0014, lo: 0xba, hi: 0xbf}, + // Block 0x21, offset 0x110 + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x22, offset 0x11b + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0014, lo: 0x95, hi: 0x96}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x9c, hi: 0x9d}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + // Block 0x23, offset 0x127 + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8a}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0x95}, + {value: 0x0010, lo: 0x99, hi: 0x9a}, + {value: 0x0010, lo: 0x9c, hi: 0x9c}, + {value: 0x0010, lo: 0x9e, hi: 0x9f}, + {value: 0x0010, lo: 0xa3, hi: 0xa4}, + {value: 0x0010, lo: 0xa8, hi: 0xaa}, + {value: 0x0010, lo: 0xae, hi: 0xb9}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x24, offset 0x133 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x82}, + {value: 0x0010, lo: 0x86, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + // Block 0x25, offset 0x13b + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x83}, + {value: 0x0014, lo: 0x84, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + {value: 0x0014, lo: 0xbe, hi: 0xbf}, + // Block 0x26, offset 0x145 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x84}, + {value: 0x0014, lo: 0x86, hi: 0x88}, + {value: 0x0014, lo: 0x8a, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0034, lo: 0x95, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x9a}, + {value: 0x0010, lo: 0x9d, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + // Block 0x27, offset 0x150 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x28, offset 0x15b + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0014, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x95, hi: 0x96}, + {value: 0x0010, lo: 0x9d, hi: 0x9e}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb1, hi: 0xb3}, + // Block 0x29, offset 0x167 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x2a, offset 0x16d + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x86, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8e, hi: 0x8e}, + {value: 0x0010, lo: 0x94, hi: 0x97}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xba, hi: 0xbf}, + // Block 0x2b, offset 0x178 + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x96}, + {value: 0x0010, lo: 0x9a, hi: 0xb1}, + {value: 0x0010, lo: 0xb3, hi: 0xbb}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + // Block 0x2c, offset 0x17e + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0010, lo: 0x8f, hi: 0x91}, + {value: 0x0014, lo: 0x92, hi: 0x94}, + {value: 0x0014, lo: 0x96, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x9f}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + // Block 0x2d, offset 0x186 + {value: 0x0014, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb4, hi: 0xb7}, + {value: 0x0034, lo: 0xb8, hi: 0xba}, + // Block 0x2e, offset 0x189 + {value: 0x0004, lo: 0x86, hi: 0x86}, + {value: 0x0014, lo: 0x87, hi: 0x87}, + {value: 0x0034, lo: 0x88, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x2f, offset 0x18e + {value: 0x0014, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb4, hi: 0xb7}, + {value: 0x0034, lo: 0xb8, hi: 0xba}, + {value: 0x0014, lo: 0xbb, hi: 0xbc}, + // Block 0x30, offset 0x192 + {value: 0x0004, lo: 0x86, hi: 0x86}, + {value: 0x0034, lo: 0x88, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x31, offset 0x196 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0034, lo: 0x98, hi: 0x99}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0034, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + {value: 0x0034, lo: 0xb9, hi: 0xb9}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x32, offset 0x19d + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0010, lo: 0x89, hi: 0xac}, + {value: 0x0034, lo: 0xb1, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xba, hi: 0xbd}, + {value: 0x0014, lo: 0xbe, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x33, offset 0x1a6 + {value: 0x0034, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0024, lo: 0x82, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x84}, + {value: 0x0024, lo: 0x86, hi: 0x87}, + {value: 0x0010, lo: 0x88, hi: 0x8c}, + {value: 0x0014, lo: 0x8d, hi: 0x97}, + {value: 0x0014, lo: 0x99, hi: 0xbc}, + // Block 0x34, offset 0x1ae + {value: 0x0034, lo: 0x86, hi: 0x86}, + // Block 0x35, offset 0x1af + {value: 0x0010, lo: 0xab, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + {value: 0x0010, lo: 0xb8, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbc}, + {value: 0x0014, lo: 0xbd, hi: 0xbe}, + // Block 0x36, offset 0x1b8 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x96, hi: 0x97}, + {value: 0x0014, lo: 0x98, hi: 0x99}, + {value: 0x0014, lo: 0x9e, hi: 0xa0}, + {value: 0x0010, lo: 0xa2, hi: 0xa4}, + {value: 0x0010, lo: 0xa7, hi: 0xad}, + {value: 0x0014, lo: 0xb1, hi: 0xb4}, + // Block 0x37, offset 0x1bf + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x84}, + {value: 0x0014, lo: 0x85, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8f, hi: 0x9c}, + {value: 0x0014, lo: 0x9d, hi: 0x9d}, + {value: 0x6c53, lo: 0xa0, hi: 0xbf}, + // Block 0x38, offset 0x1c7 + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x98}, + {value: 0x0010, lo: 0x9a, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x39, offset 0x1cd + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb5}, + {value: 0x0010, lo: 0xb8, hi: 0xbe}, + // Block 0x3a, offset 0x1d2 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x82, hi: 0x85}, + {value: 0x0010, lo: 0x88, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0xbf}, + // Block 0x3b, offset 0x1d6 + {value: 0x0010, lo: 0x80, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0x95}, + {value: 0x0010, lo: 0x98, hi: 0xbf}, + // Block 0x3c, offset 0x1d9 + {value: 0x0010, lo: 0x80, hi: 0x9a}, + {value: 0x0024, lo: 0x9d, hi: 0x9f}, + // Block 0x3d, offset 0x1db + {value: 0x0010, lo: 0x80, hi: 0x8f}, + {value: 0x7453, lo: 0xa0, hi: 0xaf}, + {value: 0x7853, lo: 0xb0, hi: 0xbf}, + // Block 0x3e, offset 0x1de + {value: 0x7c53, lo: 0x80, hi: 0x8f}, + {value: 0x8053, lo: 0x90, hi: 0x9f}, + {value: 0x7c53, lo: 0xa0, hi: 0xaf}, + {value: 0x0813, lo: 0xb0, hi: 0xb5}, + {value: 0x0892, lo: 0xb8, hi: 0xbd}, + // Block 0x3f, offset 0x1e3 + {value: 0x0010, lo: 0x81, hi: 0xbf}, + // Block 0x40, offset 0x1e4 + {value: 0x0010, lo: 0x80, hi: 0xac}, + {value: 0x0010, lo: 0xaf, hi: 0xbf}, + // Block 0x41, offset 0x1e6 + {value: 0x0010, lo: 0x81, hi: 0x9a}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x42, offset 0x1e8 + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0010, lo: 0xae, hi: 0xb8}, + // Block 0x43, offset 0x1ea + {value: 0x0010, lo: 0x80, hi: 0x91}, + {value: 0x0014, lo: 0x92, hi: 0x93}, + {value: 0x0034, lo: 0x94, hi: 0x94}, + {value: 0x0030, lo: 0x95, hi: 0x95}, + {value: 0x0010, lo: 0x9f, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb3}, + {value: 0x0030, lo: 0xb4, hi: 0xb4}, + // Block 0x44, offset 0x1f1 + {value: 0x0010, lo: 0x80, hi: 0x91}, + {value: 0x0014, lo: 0x92, hi: 0x93}, + {value: 0x0010, lo: 0xa0, hi: 0xac}, + {value: 0x0010, lo: 0xae, hi: 0xb0}, + {value: 0x0014, lo: 0xb2, hi: 0xb3}, + // Block 0x45, offset 0x1f6 + {value: 0x0014, lo: 0xb4, hi: 0xb5}, + {value: 0x0010, lo: 0xb6, hi: 0xb6}, + {value: 0x0014, lo: 0xb7, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x46, offset 0x1fa + {value: 0x0010, lo: 0x80, hi: 0x85}, + {value: 0x0014, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0014, lo: 0x89, hi: 0x91}, + {value: 0x0034, lo: 0x92, hi: 0x92}, + {value: 0x0014, lo: 0x93, hi: 0x93}, + {value: 0x0004, lo: 0x97, hi: 0x97}, + {value: 0x0024, lo: 0x9d, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + // Block 0x47, offset 0x203 + {value: 0x0014, lo: 0x8b, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x48, offset 0x206 + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0xb8}, + // Block 0x49, offset 0x209 + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0014, lo: 0x85, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0xa8}, + {value: 0x0034, lo: 0xa9, hi: 0xa9}, + {value: 0x0010, lo: 0xaa, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x4a, offset 0x20f + {value: 0x0010, lo: 0x80, hi: 0xb5}, + // Block 0x4b, offset 0x210 + {value: 0x0010, lo: 0x80, hi: 0x9e}, + {value: 0x0014, lo: 0xa0, hi: 0xa2}, + {value: 0x0010, lo: 0xa3, hi: 0xa6}, + {value: 0x0014, lo: 0xa7, hi: 0xa8}, + {value: 0x0010, lo: 0xa9, hi: 0xab}, + {value: 0x0010, lo: 0xb0, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb2}, + {value: 0x0010, lo: 0xb3, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xb9}, + {value: 0x0024, lo: 0xba, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbb}, + // Block 0x4c, offset 0x21b + {value: 0x0010, lo: 0x86, hi: 0x8f}, + // Block 0x4d, offset 0x21c + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x4e, offset 0x21d + {value: 0x0010, lo: 0x80, hi: 0x96}, + {value: 0x0024, lo: 0x97, hi: 0x97}, + {value: 0x0034, lo: 0x98, hi: 0x98}, + {value: 0x0010, lo: 0x99, hi: 0x9a}, + {value: 0x0014, lo: 0x9b, hi: 0x9b}, + // Block 0x4f, offset 0x222 + {value: 0x0010, lo: 0x95, hi: 0x95}, + {value: 0x0014, lo: 0x96, hi: 0x96}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0014, lo: 0x98, hi: 0x9e}, + {value: 0x0034, lo: 0xa0, hi: 0xa0}, + {value: 0x0010, lo: 0xa1, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa2}, + {value: 0x0010, lo: 0xa3, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xac}, + {value: 0x0010, lo: 0xad, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb4}, + {value: 0x0024, lo: 0xb5, hi: 0xbc}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x50, offset 0x22f + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0004, lo: 0xa7, hi: 0xa7}, + {value: 0x0024, lo: 0xb0, hi: 0xb4}, + {value: 0x0034, lo: 0xb5, hi: 0xba}, + {value: 0x0024, lo: 0xbb, hi: 0xbc}, + {value: 0x0034, lo: 0xbd, hi: 0xbd}, + {value: 0x0014, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x51, offset 0x238 + {value: 0x0034, lo: 0x80, hi: 0x80}, + {value: 0x0024, lo: 0x81, hi: 0x82}, + {value: 0x0034, lo: 0x83, hi: 0x84}, + {value: 0x0024, lo: 0x85, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0024, lo: 0x8b, hi: 0x8e}, + // Block 0x52, offset 0x23e + {value: 0x0014, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x53, offset 0x246 + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0030, lo: 0x84, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0024, lo: 0xab, hi: 0xab}, + {value: 0x0034, lo: 0xac, hi: 0xac}, + {value: 0x0024, lo: 0xad, hi: 0xb3}, + // Block 0x54, offset 0x24f + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa5}, + {value: 0x0010, lo: 0xa6, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa9}, + {value: 0x0030, lo: 0xaa, hi: 0xaa}, + {value: 0x0034, lo: 0xab, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xbf}, + // Block 0x55, offset 0x258 + {value: 0x0010, lo: 0x80, hi: 0xa5}, + {value: 0x0034, lo: 0xa6, hi: 0xa6}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa9}, + {value: 0x0010, lo: 0xaa, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xae}, + {value: 0x0014, lo: 0xaf, hi: 0xb1}, + {value: 0x0030, lo: 0xb2, hi: 0xb3}, + // Block 0x56, offset 0x261 + {value: 0x0010, lo: 0x80, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xb3}, + {value: 0x0010, lo: 0xb4, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + // Block 0x57, offset 0x266 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x8d, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbd}, + // Block 0x58, offset 0x269 + {value: 0x31ea, lo: 0x80, hi: 0x80}, + {value: 0x326a, lo: 0x81, hi: 0x81}, + {value: 0x32ea, lo: 0x82, hi: 0x82}, + {value: 0x336a, lo: 0x83, hi: 0x83}, + {value: 0x33ea, lo: 0x84, hi: 0x84}, + {value: 0x346a, lo: 0x85, hi: 0x85}, + {value: 0x34ea, lo: 0x86, hi: 0x86}, + {value: 0x356a, lo: 0x87, hi: 0x87}, + {value: 0x35ea, lo: 0x88, hi: 0x88}, + {value: 0x8353, lo: 0x90, hi: 0xba}, + {value: 0x8353, lo: 0xbd, hi: 0xbf}, + // Block 0x59, offset 0x274 + {value: 0x0024, lo: 0x90, hi: 0x92}, + {value: 0x0034, lo: 0x94, hi: 0x99}, + {value: 0x0024, lo: 0x9a, hi: 0x9b}, + {value: 0x0034, lo: 0x9c, hi: 0x9f}, + {value: 0x0024, lo: 0xa0, hi: 0xa0}, + {value: 0x0010, lo: 0xa1, hi: 0xa1}, + {value: 0x0034, lo: 0xa2, hi: 0xa8}, + {value: 0x0010, lo: 0xa9, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xb3}, + {value: 0x0024, lo: 0xb4, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb7}, + {value: 0x0024, lo: 0xb8, hi: 0xb9}, + {value: 0x0010, lo: 0xba, hi: 0xba}, + // Block 0x5a, offset 0x282 + {value: 0x0012, lo: 0x80, hi: 0xab}, + {value: 0x0015, lo: 0xac, hi: 0xbf}, + // Block 0x5b, offset 0x284 + {value: 0x0015, lo: 0x80, hi: 0xaa}, + {value: 0x0012, lo: 0xab, hi: 0xb7}, + {value: 0x0015, lo: 0xb8, hi: 0xb8}, + {value: 0x8752, lo: 0xb9, hi: 0xb9}, + {value: 0x0012, lo: 0xba, hi: 0xbc}, + {value: 0x8b52, lo: 0xbd, hi: 0xbd}, + {value: 0x0012, lo: 0xbe, hi: 0xbf}, + // Block 0x5c, offset 0x28b + {value: 0x0012, lo: 0x80, hi: 0x8d}, + {value: 0x8f52, lo: 0x8e, hi: 0x8e}, + {value: 0x0012, lo: 0x8f, hi: 0x9a}, + {value: 0x0015, lo: 0x9b, hi: 0xbf}, + // Block 0x5d, offset 0x28f + {value: 0x0024, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0024, lo: 0x83, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0024, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x90}, + {value: 0x0024, lo: 0x91, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xba}, + {value: 0x0024, lo: 0xbb, hi: 0xbb}, + {value: 0x0034, lo: 0xbc, hi: 0xbd}, + {value: 0x0024, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x5e, offset 0x29b + {value: 0x0117, lo: 0x80, hi: 0xbf}, + // Block 0x5f, offset 0x29c + {value: 0x0117, lo: 0x80, hi: 0x95}, + {value: 0x369a, lo: 0x96, hi: 0x96}, + {value: 0x374a, lo: 0x97, hi: 0x97}, + {value: 0x37fa, lo: 0x98, hi: 0x98}, + {value: 0x38aa, lo: 0x99, hi: 0x99}, + {value: 0x395a, lo: 0x9a, hi: 0x9a}, + {value: 0x3a0a, lo: 0x9b, hi: 0x9b}, + {value: 0x0012, lo: 0x9c, hi: 0x9d}, + {value: 0x3abb, lo: 0x9e, hi: 0x9e}, + {value: 0x0012, lo: 0x9f, hi: 0x9f}, + {value: 0x0117, lo: 0xa0, hi: 0xbf}, + // Block 0x60, offset 0x2a7 + {value: 0x0812, lo: 0x80, hi: 0x87}, + {value: 0x0813, lo: 0x88, hi: 0x8f}, + {value: 0x0812, lo: 0x90, hi: 0x95}, + {value: 0x0813, lo: 0x98, hi: 0x9d}, + {value: 0x0812, lo: 0xa0, hi: 0xa7}, + {value: 0x0813, lo: 0xa8, hi: 0xaf}, + {value: 0x0812, lo: 0xb0, hi: 0xb7}, + {value: 0x0813, lo: 0xb8, hi: 0xbf}, + // Block 0x61, offset 0x2af + {value: 0x0004, lo: 0x8b, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8f}, + {value: 0x0054, lo: 0x98, hi: 0x99}, + {value: 0x0054, lo: 0xa4, hi: 0xa4}, + {value: 0x0054, lo: 0xa7, hi: 0xa7}, + {value: 0x0014, lo: 0xaa, hi: 0xae}, + {value: 0x0010, lo: 0xaf, hi: 0xaf}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x62, offset 0x2b7 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x94, hi: 0x94}, + {value: 0x0014, lo: 0xa0, hi: 0xa4}, + {value: 0x0014, lo: 0xa6, hi: 0xaf}, + {value: 0x0015, lo: 0xb1, hi: 0xb1}, + {value: 0x0015, lo: 0xbf, hi: 0xbf}, + // Block 0x63, offset 0x2bd + {value: 0x0015, lo: 0x90, hi: 0x9c}, + // Block 0x64, offset 0x2be + {value: 0x0024, lo: 0x90, hi: 0x91}, + {value: 0x0034, lo: 0x92, hi: 0x93}, + {value: 0x0024, lo: 0x94, hi: 0x97}, + {value: 0x0034, lo: 0x98, hi: 0x9a}, + {value: 0x0024, lo: 0x9b, hi: 0x9c}, + {value: 0x0014, lo: 0x9d, hi: 0xa0}, + {value: 0x0024, lo: 0xa1, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa4}, + {value: 0x0034, lo: 0xa5, hi: 0xa6}, + {value: 0x0024, lo: 0xa7, hi: 0xa7}, + {value: 0x0034, lo: 0xa8, hi: 0xa8}, + {value: 0x0024, lo: 0xa9, hi: 0xa9}, + {value: 0x0034, lo: 0xaa, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb0}, + // Block 0x65, offset 0x2cc + {value: 0x0016, lo: 0x85, hi: 0x86}, + {value: 0x0012, lo: 0x87, hi: 0x89}, + {value: 0xa452, lo: 0x8e, hi: 0x8e}, + {value: 0x1013, lo: 0xa0, hi: 0xaf}, + {value: 0x1012, lo: 0xb0, hi: 0xbf}, + // Block 0x66, offset 0x2d1 + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0716, lo: 0x83, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x88}, + // Block 0x67, offset 0x2d4 + {value: 0xa753, lo: 0xb6, hi: 0xb7}, + {value: 0xaa53, lo: 0xb8, hi: 0xb9}, + {value: 0xad53, lo: 0xba, hi: 0xbb}, + {value: 0xaa53, lo: 0xbc, hi: 0xbd}, + {value: 0xa753, lo: 0xbe, hi: 0xbf}, + // Block 0x68, offset 0x2d9 + {value: 0x3013, lo: 0x80, hi: 0x8f}, + {value: 0x6553, lo: 0x90, hi: 0x9f}, + {value: 0xb053, lo: 0xa0, hi: 0xaf}, + {value: 0x3012, lo: 0xb0, hi: 0xbf}, + // Block 0x69, offset 0x2dd + {value: 0x0117, lo: 0x80, hi: 0xa3}, + {value: 0x0012, lo: 0xa4, hi: 0xa4}, + {value: 0x0716, lo: 0xab, hi: 0xac}, + {value: 0x0316, lo: 0xad, hi: 0xae}, + {value: 0x0024, lo: 0xaf, hi: 0xb1}, + {value: 0x0117, lo: 0xb2, hi: 0xb3}, + // Block 0x6a, offset 0x2e3 + {value: 0x6c52, lo: 0x80, hi: 0x9f}, + {value: 0x7052, lo: 0xa0, hi: 0xa5}, + {value: 0x7052, lo: 0xa7, hi: 0xa7}, + {value: 0x7052, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x6b, offset 0x2e8 + {value: 0x0010, lo: 0x80, hi: 0xa7}, + {value: 0x0014, lo: 0xaf, hi: 0xaf}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x6c, offset 0x2eb + {value: 0x0010, lo: 0x80, hi: 0x96}, + {value: 0x0010, lo: 0xa0, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xae}, + {value: 0x0010, lo: 0xb0, hi: 0xb6}, + {value: 0x0010, lo: 0xb8, hi: 0xbe}, + // Block 0x6d, offset 0x2f0 + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x88, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x9e}, + {value: 0x0024, lo: 0xa0, hi: 0xbf}, + // Block 0x6e, offset 0x2f5 + {value: 0x0014, lo: 0xaf, hi: 0xaf}, + // Block 0x6f, offset 0x2f6 + {value: 0x0014, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0xaa, hi: 0xad}, + {value: 0x0030, lo: 0xae, hi: 0xaf}, + {value: 0x0004, lo: 0xb1, hi: 0xb5}, + {value: 0x0014, lo: 0xbb, hi: 0xbb}, + {value: 0x0010, lo: 0xbc, hi: 0xbc}, + // Block 0x70, offset 0x2fc + {value: 0x0034, lo: 0x99, hi: 0x9a}, + {value: 0x0004, lo: 0x9b, hi: 0x9e}, + // Block 0x71, offset 0x2fe + {value: 0x0004, lo: 0xbc, hi: 0xbe}, + // Block 0x72, offset 0x2ff + {value: 0x0010, lo: 0x85, hi: 0xaf}, + {value: 0x0010, lo: 0xb1, hi: 0xbf}, + // Block 0x73, offset 0x301 + {value: 0x0010, lo: 0x80, hi: 0x8e}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x74, offset 0x303 + {value: 0x0010, lo: 0x80, hi: 0x94}, + {value: 0x0014, lo: 0x95, hi: 0x95}, + {value: 0x0010, lo: 0x96, hi: 0xbf}, + // Block 0x75, offset 0x306 + {value: 0x0010, lo: 0x80, hi: 0x8c}, + // Block 0x76, offset 0x307 + {value: 0x0010, lo: 0x90, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbd}, + // Block 0x77, offset 0x309 + {value: 0x0010, lo: 0x80, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0010, lo: 0x90, hi: 0xab}, + // Block 0x78, offset 0x30c + {value: 0x0117, lo: 0x80, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xae}, + {value: 0x0024, lo: 0xaf, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb2}, + {value: 0x0024, lo: 0xb4, hi: 0xbd}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x79, offset 0x312 + {value: 0x0117, lo: 0x80, hi: 0x9b}, + {value: 0x0015, lo: 0x9c, hi: 0x9d}, + {value: 0x0024, lo: 0x9e, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x7a, offset 0x316 + {value: 0x0010, lo: 0x80, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb1}, + // Block 0x7b, offset 0x318 + {value: 0x0004, lo: 0x80, hi: 0x87}, + {value: 0x0014, lo: 0x88, hi: 0xa1}, + {value: 0x0117, lo: 0xa2, hi: 0xaf}, + {value: 0x0012, lo: 0xb0, hi: 0xb1}, + {value: 0x0117, lo: 0xb2, hi: 0xbf}, + // Block 0x7c, offset 0x31d + {value: 0x0117, lo: 0x80, hi: 0xaf}, + {value: 0x0015, lo: 0xb0, hi: 0xb0}, + {value: 0x0012, lo: 0xb1, hi: 0xb8}, + {value: 0x0316, lo: 0xb9, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x8753, lo: 0xbd, hi: 0xbd}, + {value: 0x0117, lo: 0xbe, hi: 0xbf}, + // Block 0x7d, offset 0x324 + {value: 0x0117, lo: 0x80, hi: 0x83}, + {value: 0x6553, lo: 0x84, hi: 0x84}, + {value: 0x908b, lo: 0x85, hi: 0x85}, + {value: 0x8f53, lo: 0x86, hi: 0x86}, + {value: 0x0f16, lo: 0x87, hi: 0x88}, + {value: 0x0316, lo: 0x89, hi: 0x8a}, + {value: 0x0117, lo: 0x90, hi: 0x91}, + {value: 0x0012, lo: 0x93, hi: 0x93}, + {value: 0x0012, lo: 0x95, hi: 0x95}, + {value: 0x0117, lo: 0x96, hi: 0x99}, + {value: 0x0015, lo: 0xb2, hi: 0xb4}, + {value: 0x0316, lo: 0xb5, hi: 0xb6}, + {value: 0x0010, lo: 0xb7, hi: 0xb7}, + {value: 0x0015, lo: 0xb8, hi: 0xb9}, + {value: 0x0012, lo: 0xba, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbf}, + // Block 0x7e, offset 0x334 + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x8a}, + {value: 0x0014, lo: 0x8b, hi: 0x8b}, + {value: 0x0010, lo: 0x8c, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xa6}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + {value: 0x0034, lo: 0xac, hi: 0xac}, + // Block 0x7f, offset 0x33e + {value: 0x0010, lo: 0x80, hi: 0xb3}, + // Block 0x80, offset 0x33f + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x84}, + {value: 0x0014, lo: 0x85, hi: 0x85}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0024, lo: 0xa0, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xb7}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0010, lo: 0xbd, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x81, offset 0x348 + {value: 0x0010, lo: 0x80, hi: 0xa5}, + {value: 0x0014, lo: 0xa6, hi: 0xaa}, + {value: 0x0034, lo: 0xab, hi: 0xad}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x82, offset 0x34c + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0014, lo: 0x87, hi: 0x91}, + {value: 0x0010, lo: 0x92, hi: 0x92}, + {value: 0x0030, lo: 0x93, hi: 0x93}, + {value: 0x0010, lo: 0xa0, hi: 0xbc}, + // Block 0x83, offset 0x351 + {value: 0x0014, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0xb2}, + {value: 0x0034, lo: 0xb3, hi: 0xb3}, + {value: 0x0010, lo: 0xb4, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xb9}, + {value: 0x0010, lo: 0xba, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x84, offset 0x359 + {value: 0x0030, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0014, lo: 0xa5, hi: 0xa5}, + {value: 0x0004, lo: 0xa6, hi: 0xa6}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0x85, offset 0x35f + {value: 0x0010, lo: 0x80, hi: 0xa8}, + {value: 0x0014, lo: 0xa9, hi: 0xae}, + {value: 0x0010, lo: 0xaf, hi: 0xb0}, + {value: 0x0014, lo: 0xb1, hi: 0xb2}, + {value: 0x0010, lo: 0xb3, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb6}, + // Block 0x86, offset 0x365 + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0010, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0004, lo: 0xb0, hi: 0xb0}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + // Block 0x87, offset 0x36f + {value: 0x0024, lo: 0xb0, hi: 0xb0}, + {value: 0x0024, lo: 0xb2, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0024, lo: 0xb7, hi: 0xb8}, + {value: 0x0024, lo: 0xbe, hi: 0xbf}, + // Block 0x88, offset 0x374 + {value: 0x0024, lo: 0x81, hi: 0x81}, + {value: 0x0004, lo: 0x9d, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xaf}, + {value: 0x0010, lo: 0xb2, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xb6}, + // Block 0x89, offset 0x37d + {value: 0x0010, lo: 0x81, hi: 0x86}, + {value: 0x0010, lo: 0x89, hi: 0x8e}, + {value: 0x0010, lo: 0x91, hi: 0x96}, + {value: 0x0010, lo: 0xa0, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xae}, + {value: 0x0012, lo: 0xb0, hi: 0xbf}, + // Block 0x8a, offset 0x383 + {value: 0x0012, lo: 0x80, hi: 0x92}, + {value: 0xb352, lo: 0x93, hi: 0x93}, + {value: 0x0012, lo: 0x94, hi: 0x9a}, + {value: 0x0014, lo: 0x9b, hi: 0x9b}, + {value: 0x0015, lo: 0x9c, hi: 0x9f}, + {value: 0x0012, lo: 0xa0, hi: 0xa8}, + {value: 0x0015, lo: 0xa9, hi: 0xa9}, + {value: 0x0004, lo: 0xaa, hi: 0xab}, + {value: 0x74d2, lo: 0xb0, hi: 0xbf}, + // Block 0x8b, offset 0x38c + {value: 0x78d2, lo: 0x80, hi: 0x8f}, + {value: 0x7cd2, lo: 0x90, hi: 0x9f}, + {value: 0x80d2, lo: 0xa0, hi: 0xaf}, + {value: 0x7cd2, lo: 0xb0, hi: 0xbf}, + // Block 0x8c, offset 0x390 + {value: 0x0010, lo: 0x80, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xa5}, + {value: 0x0010, lo: 0xa6, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa8}, + {value: 0x0010, lo: 0xa9, hi: 0xaa}, + {value: 0x0010, lo: 0xac, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0x8d, offset 0x398 + {value: 0x0010, lo: 0x80, hi: 0xa3}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x8e, offset 0x39a + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x8b, hi: 0xbb}, + // Block 0x8f, offset 0x39c + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x83, hi: 0x84}, + {value: 0x0010, lo: 0x86, hi: 0xbf}, + // Block 0x90, offset 0x39f + {value: 0x0010, lo: 0x80, hi: 0xb1}, + {value: 0x0004, lo: 0xb2, hi: 0xbf}, + // Block 0x91, offset 0x3a1 + {value: 0x0004, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x93, hi: 0xbf}, + // Block 0x92, offset 0x3a3 + {value: 0x0010, lo: 0x80, hi: 0xbd}, + // Block 0x93, offset 0x3a4 + {value: 0x0010, lo: 0x90, hi: 0xbf}, + // Block 0x94, offset 0x3a5 + {value: 0x0010, lo: 0x80, hi: 0x8f}, + {value: 0x0010, lo: 0x92, hi: 0xbf}, + // Block 0x95, offset 0x3a7 + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0010, lo: 0xb0, hi: 0xbb}, + // Block 0x96, offset 0x3a9 + {value: 0x0014, lo: 0x80, hi: 0x8f}, + {value: 0x0054, lo: 0x93, hi: 0x93}, + {value: 0x0024, lo: 0xa0, hi: 0xa6}, + {value: 0x0034, lo: 0xa7, hi: 0xad}, + {value: 0x0024, lo: 0xae, hi: 0xaf}, + {value: 0x0010, lo: 0xb3, hi: 0xb4}, + // Block 0x97, offset 0x3af + {value: 0x0010, lo: 0x8d, hi: 0x8f}, + {value: 0x0054, lo: 0x92, hi: 0x92}, + {value: 0x0054, lo: 0x95, hi: 0x95}, + {value: 0x0010, lo: 0xb0, hi: 0xb4}, + {value: 0x0010, lo: 0xb6, hi: 0xbf}, + // Block 0x98, offset 0x3b4 + {value: 0x0010, lo: 0x80, hi: 0xbc}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x99, offset 0x3b6 + {value: 0x0054, lo: 0x87, hi: 0x87}, + {value: 0x0054, lo: 0x8e, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0054, lo: 0x9a, hi: 0x9a}, + {value: 0x5f53, lo: 0xa1, hi: 0xba}, + {value: 0x0004, lo: 0xbe, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x9a, offset 0x3bd + {value: 0x0004, lo: 0x80, hi: 0x80}, + {value: 0x5f52, lo: 0x81, hi: 0x9a}, + {value: 0x0004, lo: 0xb0, hi: 0xb0}, + // Block 0x9b, offset 0x3c0 + {value: 0x0014, lo: 0x9e, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xbe}, + // Block 0x9c, offset 0x3c2 + {value: 0x0010, lo: 0x82, hi: 0x87}, + {value: 0x0010, lo: 0x8a, hi: 0x8f}, + {value: 0x0010, lo: 0x92, hi: 0x97}, + {value: 0x0010, lo: 0x9a, hi: 0x9c}, + {value: 0x0004, lo: 0xa3, hi: 0xa3}, + {value: 0x0014, lo: 0xb9, hi: 0xbb}, + // Block 0x9d, offset 0x3c8 + {value: 0x0010, lo: 0x80, hi: 0x8b}, + {value: 0x0010, lo: 0x8d, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xba}, + {value: 0x0010, lo: 0xbc, hi: 0xbd}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x9e, offset 0x3cd + {value: 0x0010, lo: 0x80, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x9d}, + // Block 0x9f, offset 0x3cf + {value: 0x0010, lo: 0x80, hi: 0xba}, + // Block 0xa0, offset 0x3d0 + {value: 0x0010, lo: 0x80, hi: 0xb4}, + // Block 0xa1, offset 0x3d1 + {value: 0x0034, lo: 0xbd, hi: 0xbd}, + // Block 0xa2, offset 0x3d2 + {value: 0x0010, lo: 0x80, hi: 0x9c}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0xa3, offset 0x3d4 + {value: 0x0010, lo: 0x80, hi: 0x90}, + {value: 0x0034, lo: 0xa0, hi: 0xa0}, + // Block 0xa4, offset 0x3d6 + {value: 0x0010, lo: 0x80, hi: 0x9f}, + {value: 0x0010, lo: 0xad, hi: 0xbf}, + // Block 0xa5, offset 0x3d8 + {value: 0x0010, lo: 0x80, hi: 0x8a}, + {value: 0x0010, lo: 0x90, hi: 0xb5}, + {value: 0x0024, lo: 0xb6, hi: 0xba}, + // Block 0xa6, offset 0x3db + {value: 0x0010, lo: 0x80, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0xa7, offset 0x3dd + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x88, hi: 0x8f}, + {value: 0x0010, lo: 0x91, hi: 0x95}, + // Block 0xa8, offset 0x3e0 + {value: 0x2813, lo: 0x80, hi: 0x87}, + {value: 0x3813, lo: 0x88, hi: 0x8f}, + {value: 0x2813, lo: 0x90, hi: 0x97}, + {value: 0xb653, lo: 0x98, hi: 0x9f}, + {value: 0xb953, lo: 0xa0, hi: 0xa7}, + {value: 0x2812, lo: 0xa8, hi: 0xaf}, + {value: 0x3812, lo: 0xb0, hi: 0xb7}, + {value: 0x2812, lo: 0xb8, hi: 0xbf}, + // Block 0xa9, offset 0x3e8 + {value: 0xb652, lo: 0x80, hi: 0x87}, + {value: 0xb952, lo: 0x88, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0xbf}, + // Block 0xaa, offset 0x3eb + {value: 0x0010, lo: 0x80, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0xb953, lo: 0xb0, hi: 0xb7}, + {value: 0xb653, lo: 0xb8, hi: 0xbf}, + // Block 0xab, offset 0x3ef + {value: 0x2813, lo: 0x80, hi: 0x87}, + {value: 0x3813, lo: 0x88, hi: 0x8f}, + {value: 0x2813, lo: 0x90, hi: 0x93}, + {value: 0xb952, lo: 0x98, hi: 0x9f}, + {value: 0xb652, lo: 0xa0, hi: 0xa7}, + {value: 0x2812, lo: 0xa8, hi: 0xaf}, + {value: 0x3812, lo: 0xb0, hi: 0xb7}, + {value: 0x2812, lo: 0xb8, hi: 0xbb}, + // Block 0xac, offset 0x3f7 + {value: 0x0010, lo: 0x80, hi: 0xa7}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xad, offset 0x3f9 + {value: 0x0010, lo: 0x80, hi: 0xa3}, + {value: 0xbc53, lo: 0xb0, hi: 0xb0}, + {value: 0xbf53, lo: 0xb1, hi: 0xb1}, + {value: 0xc253, lo: 0xb2, hi: 0xb2}, + {value: 0xbf53, lo: 0xb3, hi: 0xb3}, + {value: 0xc553, lo: 0xb4, hi: 0xb4}, + {value: 0xbf53, lo: 0xb5, hi: 0xb5}, + {value: 0xc253, lo: 0xb6, hi: 0xb6}, + {value: 0xbf53, lo: 0xb7, hi: 0xb7}, + {value: 0xbc53, lo: 0xb8, hi: 0xb8}, + {value: 0xc853, lo: 0xb9, hi: 0xb9}, + {value: 0xcb53, lo: 0xba, hi: 0xba}, + {value: 0xce53, lo: 0xbc, hi: 0xbc}, + {value: 0xc853, lo: 0xbd, hi: 0xbd}, + {value: 0xcb53, lo: 0xbe, hi: 0xbe}, + {value: 0xc853, lo: 0xbf, hi: 0xbf}, + // Block 0xae, offset 0x409 + {value: 0x0010, lo: 0x80, hi: 0xb6}, + // Block 0xaf, offset 0x40a + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xa7}, + // Block 0xb0, offset 0x40c + {value: 0x0015, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0015, lo: 0x83, hi: 0x85}, + {value: 0x0015, lo: 0x87, hi: 0xb0}, + {value: 0x0015, lo: 0xb2, hi: 0xba}, + // Block 0xb1, offset 0x411 + {value: 0x0010, lo: 0x80, hi: 0x85}, + {value: 0x0010, lo: 0x88, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0xb5}, + {value: 0x0010, lo: 0xb7, hi: 0xb8}, + {value: 0x0010, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xb2, offset 0x417 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xb6}, + // Block 0xb3, offset 0x419 + {value: 0x0010, lo: 0x80, hi: 0x9e}, + // Block 0xb4, offset 0x41a + {value: 0x0010, lo: 0xa0, hi: 0xb2}, + {value: 0x0010, lo: 0xb4, hi: 0xb5}, + // Block 0xb5, offset 0x41c + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xb9}, + // Block 0xb6, offset 0x41e + {value: 0x0010, lo: 0x80, hi: 0xb7}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0xb7, offset 0x420 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x83}, + {value: 0x0014, lo: 0x85, hi: 0x86}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0014, lo: 0x8e, hi: 0x8e}, + {value: 0x0024, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x93}, + {value: 0x0010, lo: 0x95, hi: 0x97}, + {value: 0x0010, lo: 0x99, hi: 0xb5}, + {value: 0x0024, lo: 0xb8, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xb8, offset 0x42d + {value: 0x0010, lo: 0xa0, hi: 0xbc}, + // Block 0xb9, offset 0x42e + {value: 0x0010, lo: 0x80, hi: 0x9c}, + // Block 0xba, offset 0x42f + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0010, lo: 0x89, hi: 0xa4}, + {value: 0x0024, lo: 0xa5, hi: 0xa5}, + {value: 0x0034, lo: 0xa6, hi: 0xa6}, + // Block 0xbb, offset 0x433 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xb2}, + // Block 0xbc, offset 0x435 + {value: 0x0010, lo: 0x80, hi: 0x91}, + // Block 0xbd, offset 0x436 + {value: 0x0010, lo: 0x80, hi: 0x88}, + // Block 0xbe, offset 0x437 + {value: 0x5653, lo: 0x80, hi: 0xb2}, + // Block 0xbf, offset 0x438 + {value: 0x5652, lo: 0x80, hi: 0xb2}, + // Block 0xc0, offset 0x439 + {value: 0x0010, lo: 0x80, hi: 0xa3}, + {value: 0x0024, lo: 0xa4, hi: 0xa7}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xc1, offset 0x43c + {value: 0x0010, lo: 0x80, hi: 0xa9}, + {value: 0x0024, lo: 0xab, hi: 0xac}, + {value: 0x0010, lo: 0xb0, hi: 0xb1}, + // Block 0xc2, offset 0x43f + {value: 0x0034, lo: 0xbd, hi: 0xbf}, + // Block 0xc3, offset 0x440 + {value: 0x0010, lo: 0x80, hi: 0x9c}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xc4, offset 0x443 + {value: 0x0010, lo: 0x80, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x87}, + {value: 0x0024, lo: 0x88, hi: 0x8a}, + {value: 0x0034, lo: 0x8b, hi: 0x8b}, + {value: 0x0024, lo: 0x8c, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x90}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xc5, offset 0x44a + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0024, lo: 0x82, hi: 0x82}, + {value: 0x0034, lo: 0x83, hi: 0x83}, + {value: 0x0024, lo: 0x84, hi: 0x84}, + {value: 0x0034, lo: 0x85, hi: 0x85}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xc6, offset 0x450 + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0010, lo: 0xa0, hi: 0xb6}, + // Block 0xc7, offset 0x452 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbf}, + // Block 0xc8, offset 0x456 + {value: 0x0014, lo: 0x80, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0034, lo: 0xb0, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xc9, offset 0x45e + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb6}, + {value: 0x0010, lo: 0xb7, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0014, lo: 0xbd, hi: 0xbd}, + // Block 0xca, offset 0x464 + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0014, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0xa8}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xcb, offset 0x468 + {value: 0x0024, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0xa6}, + {value: 0x0014, lo: 0xa7, hi: 0xab}, + {value: 0x0010, lo: 0xac, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xb2}, + {value: 0x0034, lo: 0xb3, hi: 0xb4}, + {value: 0x0010, lo: 0xb6, hi: 0xbf}, + // Block 0xcc, offset 0x46f + {value: 0x0010, lo: 0x84, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0xb2}, + {value: 0x0034, lo: 0xb3, hi: 0xb3}, + {value: 0x0010, lo: 0xb6, hi: 0xb6}, + // Block 0xcd, offset 0x473 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xce, offset 0x477 + {value: 0x0030, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x84}, + {value: 0x0014, lo: 0x89, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0014, lo: 0x8b, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x8e}, + {value: 0x0014, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x9a}, + {value: 0x0010, lo: 0x9c, hi: 0x9c}, + // Block 0xcf, offset 0x480 + {value: 0x0010, lo: 0x80, hi: 0x91}, + {value: 0x0010, lo: 0x93, hi: 0xae}, + {value: 0x0014, lo: 0xaf, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0014, lo: 0xb4, hi: 0xb4}, + {value: 0x0030, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xb6}, + {value: 0x0014, lo: 0xb7, hi: 0xb7}, + {value: 0x0014, lo: 0xbe, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xd0, offset 0x48a + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + // Block 0xd1, offset 0x48c + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x88, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8d}, + {value: 0x0010, lo: 0x8f, hi: 0x9d}, + {value: 0x0010, lo: 0x9f, hi: 0xa8}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xd2, offset 0x492 + {value: 0x0010, lo: 0x80, hi: 0x9e}, + {value: 0x0014, lo: 0x9f, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa2}, + {value: 0x0014, lo: 0xa3, hi: 0xa8}, + {value: 0x0034, lo: 0xa9, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xd3, offset 0x498 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbb, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0xd4, offset 0x4a2 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0030, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x9d, hi: 0xa3}, + {value: 0x0024, lo: 0xa6, hi: 0xac}, + {value: 0x0024, lo: 0xb0, hi: 0xb4}, + // Block 0xd5, offset 0x4ac + {value: 0x0010, lo: 0x80, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbf}, + // Block 0xd6, offset 0x4ae + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x8a}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0024, lo: 0x9e, hi: 0x9e}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + // Block 0xd7, offset 0x4b7 + {value: 0x0010, lo: 0x80, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb8}, + {value: 0x0010, lo: 0xb9, hi: 0xb9}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0xd8, offset 0x4bd + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0x85}, + {value: 0x0010, lo: 0x87, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xd9, offset 0x4c3 + {value: 0x0010, lo: 0x80, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb5}, + {value: 0x0010, lo: 0xb8, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xda, offset 0x4c9 + {value: 0x0034, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x98, hi: 0x9b}, + {value: 0x0014, lo: 0x9c, hi: 0x9d}, + // Block 0xdb, offset 0x4cc + {value: 0x0010, lo: 0x80, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbc}, + {value: 0x0014, lo: 0xbd, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xdc, offset 0x4d2 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x84, hi: 0x84}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xdd, offset 0x4d5 + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0014, lo: 0xab, hi: 0xab}, + {value: 0x0010, lo: 0xac, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb5}, + {value: 0x0030, lo: 0xb6, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + {value: 0x0010, lo: 0xb8, hi: 0xb8}, + // Block 0xde, offset 0x4de + {value: 0x0010, lo: 0x80, hi: 0x89}, + // Block 0xdf, offset 0x4df + {value: 0x0014, lo: 0x9d, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa5}, + {value: 0x0010, lo: 0xa6, hi: 0xa6}, + {value: 0x0014, lo: 0xa7, hi: 0xaa}, + {value: 0x0034, lo: 0xab, hi: 0xab}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xe0, offset 0x4e6 + {value: 0x0010, lo: 0x80, hi: 0xae}, + {value: 0x0014, lo: 0xaf, hi: 0xb7}, + {value: 0x0010, lo: 0xb8, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + // Block 0xe1, offset 0x4ea + {value: 0x5f53, lo: 0xa0, hi: 0xbf}, + // Block 0xe2, offset 0x4eb + {value: 0x5f52, lo: 0x80, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xe3, offset 0x4ee + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x89, hi: 0x89}, + {value: 0x0010, lo: 0x8c, hi: 0x93}, + {value: 0x0010, lo: 0x95, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0xb5}, + {value: 0x0010, lo: 0xb7, hi: 0xb8}, + {value: 0x0014, lo: 0xbb, hi: 0xbc}, + {value: 0x0030, lo: 0xbd, hi: 0xbd}, + {value: 0x0034, lo: 0xbe, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xe4, offset 0x4f8 + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0034, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xe5, offset 0x4fb + {value: 0x0010, lo: 0xa0, hi: 0xa7}, + {value: 0x0010, lo: 0xaa, hi: 0xbf}, + // Block 0xe6, offset 0x4fd + {value: 0x0010, lo: 0x80, hi: 0x93}, + {value: 0x0014, lo: 0x94, hi: 0x97}, + {value: 0x0014, lo: 0x9a, hi: 0x9b}, + {value: 0x0010, lo: 0x9c, hi: 0x9f}, + {value: 0x0034, lo: 0xa0, hi: 0xa0}, + {value: 0x0010, lo: 0xa1, hi: 0xa1}, + {value: 0x0010, lo: 0xa3, hi: 0xa4}, + // Block 0xe7, offset 0x504 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x8a}, + {value: 0x0010, lo: 0x8b, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb8}, + {value: 0x0010, lo: 0xb9, hi: 0xba}, + {value: 0x0014, lo: 0xbb, hi: 0xbe}, + // Block 0xe8, offset 0x50c + {value: 0x0034, lo: 0x87, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0014, lo: 0x91, hi: 0x96}, + {value: 0x0010, lo: 0x97, hi: 0x98}, + {value: 0x0014, lo: 0x99, hi: 0x9b}, + {value: 0x0010, lo: 0x9c, hi: 0xbf}, + // Block 0xe9, offset 0x512 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0014, lo: 0x8a, hi: 0x96}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0014, lo: 0x98, hi: 0x98}, + {value: 0x0034, lo: 0x99, hi: 0x99}, + {value: 0x0010, lo: 0x9d, hi: 0x9d}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xea, offset 0x519 + {value: 0x0010, lo: 0x80, hi: 0xb8}, + // Block 0xeb, offset 0x51a + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb6}, + {value: 0x0014, lo: 0xb8, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xec, offset 0x520 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xb2, hi: 0xbf}, + // Block 0xed, offset 0x523 + {value: 0x0010, lo: 0x80, hi: 0x8f}, + {value: 0x0014, lo: 0x92, hi: 0xa7}, + {value: 0x0010, lo: 0xa9, hi: 0xa9}, + {value: 0x0014, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb4, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb6}, + // Block 0xee, offset 0x52b + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x88, hi: 0x89}, + {value: 0x0010, lo: 0x8b, hi: 0xb0}, + {value: 0x0014, lo: 0xb1, hi: 0xb6}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + {value: 0x0014, lo: 0xbc, hi: 0xbd}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0xef, offset 0x532 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x85}, + {value: 0x0010, lo: 0x86, hi: 0x86}, + {value: 0x0014, lo: 0x87, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xa0, hi: 0xa5}, + {value: 0x0010, lo: 0xa7, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xbf}, + // Block 0xf0, offset 0x53c + {value: 0x0010, lo: 0x80, hi: 0x8e}, + {value: 0x0014, lo: 0x90, hi: 0x91}, + {value: 0x0010, lo: 0x93, hi: 0x94}, + {value: 0x0014, lo: 0x95, hi: 0x95}, + {value: 0x0010, lo: 0x96, hi: 0x96}, + {value: 0x0034, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x98, hi: 0x98}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + // Block 0xf1, offset 0x544 + {value: 0x0010, lo: 0xa0, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb6}, + // Block 0xf2, offset 0x547 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xba}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0xf3, offset 0x54c + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0030, lo: 0x81, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xf4, offset 0x550 + {value: 0x0010, lo: 0xb0, hi: 0xb0}, + // Block 0xf5, offset 0x551 + {value: 0x0010, lo: 0x80, hi: 0x99}, + // Block 0xf6, offset 0x552 + {value: 0x0010, lo: 0x80, hi: 0xae}, + // Block 0xf7, offset 0x553 + {value: 0x0010, lo: 0x80, hi: 0x83}, + // Block 0xf8, offset 0x554 + {value: 0x0010, lo: 0x80, hi: 0xb0}, + // Block 0xf9, offset 0x555 + {value: 0x0010, lo: 0x80, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xbf}, + // Block 0xfa, offset 0x557 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x86}, + {value: 0x0014, lo: 0x87, hi: 0x95}, + // Block 0xfb, offset 0x55a + {value: 0x0010, lo: 0x80, hi: 0x86}, + // Block 0xfc, offset 0x55b + {value: 0x0010, lo: 0x80, hi: 0x9e}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xfd, offset 0x55e + {value: 0x0010, lo: 0x80, hi: 0xbe}, + // Block 0xfe, offset 0x55f + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x90, hi: 0xad}, + {value: 0x0034, lo: 0xb0, hi: 0xb4}, + // Block 0xff, offset 0x562 + {value: 0x0010, lo: 0x80, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb6}, + // Block 0x100, offset 0x564 + {value: 0x0014, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xa3, hi: 0xb7}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x101, offset 0x568 + {value: 0x0010, lo: 0x80, hi: 0x8f}, + // Block 0x102, offset 0x569 + {value: 0x2013, lo: 0x80, hi: 0x9f}, + {value: 0x2012, lo: 0xa0, hi: 0xbf}, + // Block 0x103, offset 0x56b + {value: 0x0010, lo: 0x80, hi: 0x8a}, + {value: 0x0014, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0xbf}, + // Block 0x104, offset 0x56e + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0014, lo: 0x8f, hi: 0x9f}, + // Block 0x105, offset 0x570 + {value: 0x0014, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa3, hi: 0xa4}, + {value: 0x0030, lo: 0xb0, hi: 0xb1}, + // Block 0x106, offset 0x573 + {value: 0x0004, lo: 0xb0, hi: 0xb3}, + {value: 0x0004, lo: 0xb5, hi: 0xbb}, + {value: 0x0004, lo: 0xbd, hi: 0xbe}, + // Block 0x107, offset 0x576 + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xbc}, + // Block 0x108, offset 0x578 + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0014, lo: 0x9d, hi: 0x9d}, + {value: 0x0034, lo: 0x9e, hi: 0x9e}, + {value: 0x0014, lo: 0xa0, hi: 0xa3}, + // Block 0x109, offset 0x57d + {value: 0x0014, lo: 0x80, hi: 0xad}, + {value: 0x0014, lo: 0xb0, hi: 0xbf}, + // Block 0x10a, offset 0x57f + {value: 0x0014, lo: 0x80, hi: 0x86}, + // Block 0x10b, offset 0x580 + {value: 0x0030, lo: 0xa5, hi: 0xa6}, + {value: 0x0034, lo: 0xa7, hi: 0xa9}, + {value: 0x0030, lo: 0xad, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbf}, + // Block 0x10c, offset 0x585 + {value: 0x0034, lo: 0x80, hi: 0x82}, + {value: 0x0024, lo: 0x85, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8b}, + {value: 0x0024, lo: 0xaa, hi: 0xad}, + // Block 0x10d, offset 0x589 + {value: 0x0024, lo: 0x82, hi: 0x84}, + // Block 0x10e, offset 0x58a + {value: 0x0013, lo: 0x80, hi: 0x99}, + {value: 0x0012, lo: 0x9a, hi: 0xb3}, + {value: 0x0013, lo: 0xb4, hi: 0xbf}, + // Block 0x10f, offset 0x58d + {value: 0x0013, lo: 0x80, hi: 0x8d}, + {value: 0x0012, lo: 0x8e, hi: 0x94}, + {value: 0x0012, lo: 0x96, hi: 0xa7}, + {value: 0x0013, lo: 0xa8, hi: 0xbf}, + // Block 0x110, offset 0x591 + {value: 0x0013, lo: 0x80, hi: 0x81}, + {value: 0x0012, lo: 0x82, hi: 0x9b}, + {value: 0x0013, lo: 0x9c, hi: 0x9c}, + {value: 0x0013, lo: 0x9e, hi: 0x9f}, + {value: 0x0013, lo: 0xa2, hi: 0xa2}, + {value: 0x0013, lo: 0xa5, hi: 0xa6}, + {value: 0x0013, lo: 0xa9, hi: 0xac}, + {value: 0x0013, lo: 0xae, hi: 0xb5}, + {value: 0x0012, lo: 0xb6, hi: 0xb9}, + {value: 0x0012, lo: 0xbb, hi: 0xbb}, + {value: 0x0012, lo: 0xbd, hi: 0xbf}, + // Block 0x111, offset 0x59c + {value: 0x0012, lo: 0x80, hi: 0x83}, + {value: 0x0012, lo: 0x85, hi: 0x8f}, + {value: 0x0013, lo: 0x90, hi: 0xa9}, + {value: 0x0012, lo: 0xaa, hi: 0xbf}, + // Block 0x112, offset 0x5a0 + {value: 0x0012, lo: 0x80, hi: 0x83}, + {value: 0x0013, lo: 0x84, hi: 0x85}, + {value: 0x0013, lo: 0x87, hi: 0x8a}, + {value: 0x0013, lo: 0x8d, hi: 0x94}, + {value: 0x0013, lo: 0x96, hi: 0x9c}, + {value: 0x0012, lo: 0x9e, hi: 0xb7}, + {value: 0x0013, lo: 0xb8, hi: 0xb9}, + {value: 0x0013, lo: 0xbb, hi: 0xbe}, + // Block 0x113, offset 0x5a8 + {value: 0x0013, lo: 0x80, hi: 0x84}, + {value: 0x0013, lo: 0x86, hi: 0x86}, + {value: 0x0013, lo: 0x8a, hi: 0x90}, + {value: 0x0012, lo: 0x92, hi: 0xab}, + {value: 0x0013, lo: 0xac, hi: 0xbf}, + // Block 0x114, offset 0x5ad + {value: 0x0013, lo: 0x80, hi: 0x85}, + {value: 0x0012, lo: 0x86, hi: 0x9f}, + {value: 0x0013, lo: 0xa0, hi: 0xb9}, + {value: 0x0012, lo: 0xba, hi: 0xbf}, + // Block 0x115, offset 0x5b1 + {value: 0x0012, lo: 0x80, hi: 0x93}, + {value: 0x0013, lo: 0x94, hi: 0xad}, + {value: 0x0012, lo: 0xae, hi: 0xbf}, + // Block 0x116, offset 0x5b4 + {value: 0x0012, lo: 0x80, hi: 0x87}, + {value: 0x0013, lo: 0x88, hi: 0xa1}, + {value: 0x0012, lo: 0xa2, hi: 0xbb}, + {value: 0x0013, lo: 0xbc, hi: 0xbf}, + // Block 0x117, offset 0x5b8 + {value: 0x0013, lo: 0x80, hi: 0x95}, + {value: 0x0012, lo: 0x96, hi: 0xaf}, + {value: 0x0013, lo: 0xb0, hi: 0xbf}, + // Block 0x118, offset 0x5bb + {value: 0x0013, lo: 0x80, hi: 0x89}, + {value: 0x0012, lo: 0x8a, hi: 0xa5}, + {value: 0x0013, lo: 0xa8, hi: 0xbf}, + // Block 0x119, offset 0x5be + {value: 0x0013, lo: 0x80, hi: 0x80}, + {value: 0x0012, lo: 0x82, hi: 0x9a}, + {value: 0x0012, lo: 0x9c, hi: 0xa1}, + {value: 0x0013, lo: 0xa2, hi: 0xba}, + {value: 0x0012, lo: 0xbc, hi: 0xbf}, + // Block 0x11a, offset 0x5c3 + {value: 0x0012, lo: 0x80, hi: 0x94}, + {value: 0x0012, lo: 0x96, hi: 0x9b}, + {value: 0x0013, lo: 0x9c, hi: 0xb4}, + {value: 0x0012, lo: 0xb6, hi: 0xbf}, + // Block 0x11b, offset 0x5c7 + {value: 0x0012, lo: 0x80, hi: 0x8e}, + {value: 0x0012, lo: 0x90, hi: 0x95}, + {value: 0x0013, lo: 0x96, hi: 0xae}, + {value: 0x0012, lo: 0xb0, hi: 0xbf}, + // Block 0x11c, offset 0x5cb + {value: 0x0012, lo: 0x80, hi: 0x88}, + {value: 0x0012, lo: 0x8a, hi: 0x8f}, + {value: 0x0013, lo: 0x90, hi: 0xa8}, + {value: 0x0012, lo: 0xaa, hi: 0xbf}, + // Block 0x11d, offset 0x5cf + {value: 0x0012, lo: 0x80, hi: 0x82}, + {value: 0x0012, lo: 0x84, hi: 0x89}, + {value: 0x0017, lo: 0x8a, hi: 0x8b}, + {value: 0x0010, lo: 0x8e, hi: 0xbf}, + // Block 0x11e, offset 0x5d3 + {value: 0x0014, lo: 0x80, hi: 0xb6}, + {value: 0x0014, lo: 0xbb, hi: 0xbf}, + // Block 0x11f, offset 0x5d5 + {value: 0x0014, lo: 0x80, hi: 0xac}, + {value: 0x0014, lo: 0xb5, hi: 0xb5}, + // Block 0x120, offset 0x5d7 + {value: 0x0014, lo: 0x84, hi: 0x84}, + {value: 0x0014, lo: 0x9b, hi: 0x9f}, + {value: 0x0014, lo: 0xa1, hi: 0xaf}, + // Block 0x121, offset 0x5da + {value: 0x0012, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x8a, hi: 0x8a}, + {value: 0x0012, lo: 0x8b, hi: 0x9e}, + {value: 0x0012, lo: 0xa5, hi: 0xaa}, + // Block 0x122, offset 0x5de + {value: 0x0024, lo: 0x80, hi: 0x86}, + {value: 0x0024, lo: 0x88, hi: 0x98}, + {value: 0x0024, lo: 0x9b, hi: 0xa1}, + {value: 0x0024, lo: 0xa3, hi: 0xa4}, + {value: 0x0024, lo: 0xa6, hi: 0xaa}, + {value: 0x0015, lo: 0xb0, hi: 0xbf}, + // Block 0x123, offset 0x5e4 + {value: 0x0015, lo: 0x80, hi: 0xad}, + // Block 0x124, offset 0x5e5 + {value: 0x0024, lo: 0x8f, hi: 0x8f}, + // Block 0x125, offset 0x5e6 + {value: 0x0010, lo: 0x80, hi: 0xac}, + {value: 0x0024, lo: 0xb0, hi: 0xb6}, + {value: 0x0014, lo: 0xb7, hi: 0xbd}, + // Block 0x126, offset 0x5e9 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x8e, hi: 0x8e}, + // Block 0x127, offset 0x5eb + {value: 0x0010, lo: 0x90, hi: 0xad}, + {value: 0x0024, lo: 0xae, hi: 0xae}, + // Block 0x128, offset 0x5ed + {value: 0x0010, lo: 0x80, hi: 0xab}, + {value: 0x0024, lo: 0xac, hi: 0xaf}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0x129, offset 0x5f0 + {value: 0x0010, lo: 0x90, hi: 0xaa}, + {value: 0x0014, lo: 0xab, hi: 0xab}, + {value: 0x0034, lo: 0xac, hi: 0xae}, + {value: 0x0024, lo: 0xaf, hi: 0xaf}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0x12a, offset 0x5f5 + {value: 0x0010, lo: 0xa0, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xab}, + {value: 0x0010, lo: 0xad, hi: 0xae}, + {value: 0x0010, lo: 0xb0, hi: 0xbe}, + // Block 0x12b, offset 0x5f9 + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0034, lo: 0x90, hi: 0x96}, + // Block 0x12c, offset 0x5fb + {value: 0xd152, lo: 0x80, hi: 0x81}, + {value: 0xd452, lo: 0x82, hi: 0x83}, + {value: 0x0024, lo: 0x84, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0014, lo: 0x8b, hi: 0x8b}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x12d, offset 0x601 + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x9f}, + {value: 0x0010, lo: 0xa1, hi: 0xa2}, + {value: 0x0010, lo: 0xa4, hi: 0xa4}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + {value: 0x0010, lo: 0xa9, hi: 0xb2}, + {value: 0x0010, lo: 0xb4, hi: 0xb7}, + {value: 0x0010, lo: 0xb9, hi: 0xb9}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + // Block 0x12e, offset 0x60a + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x8b, hi: 0x9b}, + {value: 0x0010, lo: 0xa1, hi: 0xa3}, + {value: 0x0010, lo: 0xa5, hi: 0xa9}, + {value: 0x0010, lo: 0xab, hi: 0xbb}, + // Block 0x12f, offset 0x60f + {value: 0x0013, lo: 0xb0, hi: 0xbf}, + // Block 0x130, offset 0x610 + {value: 0x0013, lo: 0x80, hi: 0x89}, + {value: 0x0013, lo: 0x90, hi: 0xa9}, + {value: 0x0013, lo: 0xb0, hi: 0xbf}, + // Block 0x131, offset 0x613 + {value: 0x0013, lo: 0x80, hi: 0x89}, + // Block 0x132, offset 0x614 + {value: 0x0014, lo: 0xbb, hi: 0xbf}, + // Block 0x133, offset 0x615 + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0x134, offset 0x616 + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0014, lo: 0xa0, hi: 0xbf}, + // Block 0x135, offset 0x618 + {value: 0x0014, lo: 0x80, hi: 0xbf}, + // Block 0x136, offset 0x619 + {value: 0x0014, lo: 0x80, hi: 0xaf}, +} + +// Total table size 16093 bytes (15KiB); checksum: EE91C452 diff --git a/vendor/golang.org/x/text/internal/language/compact/tables.go b/vendor/golang.org/x/text/internal/language/compact/tables.go index 32af9de599..a09ed198a5 100644 --- a/vendor/golang.org/x/text/internal/language/compact/tables.go +++ b/vendor/golang.org/x/text/internal/language/compact/tables.go @@ -790,226 +790,226 @@ const ( var coreTags = []language.CompactCoreInfo{ // 773 elements // Entry 0 - 1F - 0x00000000, 0x01600000, 0x016000d2, 0x01600161, - 0x01c00000, 0x01c00052, 0x02100000, 0x02100080, - 0x02700000, 0x0270006f, 0x03a00000, 0x03a00001, - 0x03a00023, 0x03a00039, 0x03a00062, 0x03a00067, - 0x03a0006b, 0x03a0006c, 0x03a0006d, 0x03a00097, - 0x03a0009b, 0x03a000a1, 0x03a000a8, 0x03a000ac, - 0x03a000b0, 0x03a000b9, 0x03a000ba, 0x03a000c9, - 0x03a000e1, 0x03a000ed, 0x03a000f3, 0x03a00108, + 0x00000000, 0x01600000, 0x016000d3, 0x01600162, + 0x01c00000, 0x01c00052, 0x02100000, 0x02100081, + 0x02700000, 0x02700070, 0x03a00000, 0x03a00001, + 0x03a00023, 0x03a00039, 0x03a00063, 0x03a00068, + 0x03a0006c, 0x03a0006d, 0x03a0006e, 0x03a00098, + 0x03a0009c, 0x03a000a2, 0x03a000a9, 0x03a000ad, + 0x03a000b1, 0x03a000ba, 0x03a000bb, 0x03a000ca, + 0x03a000e2, 0x03a000ee, 0x03a000f4, 0x03a00109, // Entry 20 - 3F - 0x03a0010b, 0x03a00115, 0x03a00117, 0x03a0011c, - 0x03a00120, 0x03a00128, 0x03a0015e, 0x04000000, - 0x04300000, 0x04300099, 0x04400000, 0x0440012f, - 0x04800000, 0x0480006e, 0x05800000, 0x05820000, - 0x05820032, 0x0585a000, 0x0585a032, 0x05e00000, + 0x03a0010c, 0x03a00116, 0x03a00118, 0x03a0011d, + 0x03a00121, 0x03a00129, 0x03a0015f, 0x04000000, + 0x04300000, 0x0430009a, 0x04400000, 0x04400130, + 0x04800000, 0x0480006f, 0x05800000, 0x05820000, + 0x05820032, 0x0585b000, 0x0585b032, 0x05e00000, 0x05e00052, 0x07100000, 0x07100047, 0x07500000, - 0x07500162, 0x07900000, 0x0790012f, 0x07e00000, - 0x07e00038, 0x08200000, 0x0a000000, 0x0a0000c3, + 0x07500163, 0x07900000, 0x07900130, 0x07e00000, + 0x07e00038, 0x08200000, 0x0a000000, 0x0a0000c4, // Entry 40 - 5F - 0x0a500000, 0x0a500035, 0x0a500099, 0x0a900000, - 0x0a900053, 0x0a900099, 0x0b200000, 0x0b200078, - 0x0b500000, 0x0b500099, 0x0b700000, 0x0b720000, - 0x0b720033, 0x0b75a000, 0x0b75a033, 0x0d700000, - 0x0d700022, 0x0d70006e, 0x0d700078, 0x0d70009e, - 0x0db00000, 0x0db00035, 0x0db00099, 0x0dc00000, - 0x0dc00106, 0x0df00000, 0x0df00131, 0x0e500000, - 0x0e500135, 0x0e900000, 0x0e90009b, 0x0e90009c, + 0x0a500000, 0x0a500035, 0x0a50009a, 0x0a900000, + 0x0a900053, 0x0a90009a, 0x0b200000, 0x0b200079, + 0x0b500000, 0x0b50009a, 0x0b700000, 0x0b720000, + 0x0b720033, 0x0b75b000, 0x0b75b033, 0x0d700000, + 0x0d700022, 0x0d70006f, 0x0d700079, 0x0d70009f, + 0x0db00000, 0x0db00035, 0x0db0009a, 0x0dc00000, + 0x0dc00107, 0x0df00000, 0x0df00132, 0x0e500000, + 0x0e500136, 0x0e900000, 0x0e90009c, 0x0e90009d, // Entry 60 - 7F - 0x0fa00000, 0x0fa0005e, 0x0fe00000, 0x0fe00106, - 0x10000000, 0x1000007b, 0x10100000, 0x10100063, - 0x10100082, 0x10800000, 0x108000a4, 0x10d00000, - 0x10d0002e, 0x10d00036, 0x10d0004e, 0x10d00060, - 0x10d0009e, 0x10d000b2, 0x10d000b7, 0x11700000, - 0x117000d4, 0x11f00000, 0x11f00060, 0x12400000, - 0x12400052, 0x12800000, 0x12b00000, 0x12b00114, - 0x12d00000, 0x12d00043, 0x12f00000, 0x12f000a4, + 0x0fa00000, 0x0fa0005f, 0x0fe00000, 0x0fe00107, + 0x10000000, 0x1000007c, 0x10100000, 0x10100064, + 0x10100083, 0x10800000, 0x108000a5, 0x10d00000, + 0x10d0002e, 0x10d00036, 0x10d0004e, 0x10d00061, + 0x10d0009f, 0x10d000b3, 0x10d000b8, 0x11700000, + 0x117000d5, 0x11f00000, 0x11f00061, 0x12400000, + 0x12400052, 0x12800000, 0x12b00000, 0x12b00115, + 0x12d00000, 0x12d00043, 0x12f00000, 0x12f000a5, // Entry 80 - 9F - 0x13000000, 0x13000080, 0x13000122, 0x13600000, - 0x1360005d, 0x13600087, 0x13900000, 0x13900001, + 0x13000000, 0x13000081, 0x13000123, 0x13600000, + 0x1360005e, 0x13600088, 0x13900000, 0x13900001, 0x1390001a, 0x13900025, 0x13900026, 0x1390002d, 0x1390002e, 0x1390002f, 0x13900034, 0x13900036, 0x1390003a, 0x1390003d, 0x13900042, 0x13900046, 0x13900048, 0x13900049, 0x1390004a, 0x1390004e, - 0x13900050, 0x13900052, 0x1390005c, 0x1390005d, - 0x13900060, 0x13900061, 0x13900063, 0x13900064, + 0x13900050, 0x13900052, 0x1390005d, 0x1390005e, + 0x13900061, 0x13900062, 0x13900064, 0x13900065, // Entry A0 - BF - 0x1390006d, 0x13900072, 0x13900073, 0x13900074, - 0x13900075, 0x1390007b, 0x1390007c, 0x1390007f, - 0x13900080, 0x13900081, 0x13900083, 0x1390008a, - 0x1390008c, 0x1390008d, 0x13900096, 0x13900097, - 0x13900098, 0x13900099, 0x1390009a, 0x1390009f, - 0x139000a0, 0x139000a4, 0x139000a7, 0x139000a9, - 0x139000ad, 0x139000b1, 0x139000b4, 0x139000b5, - 0x139000bf, 0x139000c0, 0x139000c6, 0x139000c7, + 0x1390006e, 0x13900073, 0x13900074, 0x13900075, + 0x13900076, 0x1390007c, 0x1390007d, 0x13900080, + 0x13900081, 0x13900082, 0x13900084, 0x1390008b, + 0x1390008d, 0x1390008e, 0x13900097, 0x13900098, + 0x13900099, 0x1390009a, 0x1390009b, 0x139000a0, + 0x139000a1, 0x139000a5, 0x139000a8, 0x139000aa, + 0x139000ae, 0x139000b2, 0x139000b5, 0x139000b6, + 0x139000c0, 0x139000c1, 0x139000c7, 0x139000c8, // Entry C0 - DF - 0x139000ca, 0x139000cb, 0x139000cc, 0x139000ce, - 0x139000d0, 0x139000d2, 0x139000d5, 0x139000d6, - 0x139000d9, 0x139000dd, 0x139000df, 0x139000e0, - 0x139000e6, 0x139000e7, 0x139000e8, 0x139000eb, - 0x139000ec, 0x139000f0, 0x13900107, 0x13900109, - 0x1390010a, 0x1390010b, 0x1390010c, 0x1390010d, - 0x1390010e, 0x1390010f, 0x13900112, 0x13900117, - 0x1390011b, 0x1390011d, 0x1390011f, 0x13900125, + 0x139000cb, 0x139000cc, 0x139000cd, 0x139000cf, + 0x139000d1, 0x139000d3, 0x139000d6, 0x139000d7, + 0x139000da, 0x139000de, 0x139000e0, 0x139000e1, + 0x139000e7, 0x139000e8, 0x139000e9, 0x139000ec, + 0x139000ed, 0x139000f1, 0x13900108, 0x1390010a, + 0x1390010b, 0x1390010c, 0x1390010d, 0x1390010e, + 0x1390010f, 0x13900110, 0x13900113, 0x13900118, + 0x1390011c, 0x1390011e, 0x13900120, 0x13900126, // Entry E0 - FF - 0x13900129, 0x1390012c, 0x1390012d, 0x1390012f, - 0x13900131, 0x13900133, 0x13900135, 0x13900139, - 0x1390013c, 0x1390013d, 0x1390013f, 0x13900142, - 0x13900161, 0x13900162, 0x13900164, 0x13c00000, + 0x1390012a, 0x1390012d, 0x1390012e, 0x13900130, + 0x13900132, 0x13900134, 0x13900136, 0x1390013a, + 0x1390013d, 0x1390013e, 0x13900140, 0x13900143, + 0x13900162, 0x13900163, 0x13900165, 0x13c00000, 0x13c00001, 0x13e00000, 0x13e0001f, 0x13e0002c, 0x13e0003f, 0x13e00041, 0x13e00048, 0x13e00051, - 0x13e00054, 0x13e00056, 0x13e00059, 0x13e00065, - 0x13e00068, 0x13e00069, 0x13e0006e, 0x13e00086, + 0x13e00054, 0x13e00057, 0x13e0005a, 0x13e00066, + 0x13e00069, 0x13e0006a, 0x13e0006f, 0x13e00087, // Entry 100 - 11F - 0x13e00089, 0x13e0008f, 0x13e00094, 0x13e000cf, - 0x13e000d8, 0x13e000e2, 0x13e000e4, 0x13e000e7, - 0x13e000ec, 0x13e000f1, 0x13e0011a, 0x13e00135, - 0x13e00136, 0x13e0013b, 0x14000000, 0x1400006a, - 0x14500000, 0x1450006e, 0x14600000, 0x14600052, - 0x14800000, 0x14800024, 0x1480009c, 0x14e00000, - 0x14e00052, 0x14e00084, 0x14e000c9, 0x14e00114, - 0x15100000, 0x15100072, 0x15300000, 0x153000e7, + 0x13e0008a, 0x13e00090, 0x13e00095, 0x13e000d0, + 0x13e000d9, 0x13e000e3, 0x13e000e5, 0x13e000e8, + 0x13e000ed, 0x13e000f2, 0x13e0011b, 0x13e00136, + 0x13e00137, 0x13e0013c, 0x14000000, 0x1400006b, + 0x14500000, 0x1450006f, 0x14600000, 0x14600052, + 0x14800000, 0x14800024, 0x1480009d, 0x14e00000, + 0x14e00052, 0x14e00085, 0x14e000ca, 0x14e00115, + 0x15100000, 0x15100073, 0x15300000, 0x153000e8, // Entry 120 - 13F - 0x15800000, 0x15800063, 0x15800076, 0x15e00000, + 0x15800000, 0x15800064, 0x15800077, 0x15e00000, 0x15e00036, 0x15e00037, 0x15e0003a, 0x15e0003b, 0x15e0003c, 0x15e00049, 0x15e0004b, 0x15e0004c, 0x15e0004d, 0x15e0004e, 0x15e0004f, 0x15e00052, - 0x15e00062, 0x15e00067, 0x15e00078, 0x15e0007a, - 0x15e0007e, 0x15e00084, 0x15e00085, 0x15e00086, - 0x15e00091, 0x15e000a8, 0x15e000b7, 0x15e000ba, - 0x15e000bb, 0x15e000be, 0x15e000bf, 0x15e000c3, + 0x15e00063, 0x15e00068, 0x15e00079, 0x15e0007b, + 0x15e0007f, 0x15e00085, 0x15e00086, 0x15e00087, + 0x15e00092, 0x15e000a9, 0x15e000b8, 0x15e000bb, + 0x15e000bc, 0x15e000bf, 0x15e000c0, 0x15e000c4, // Entry 140 - 15F - 0x15e000c8, 0x15e000c9, 0x15e000cc, 0x15e000d3, - 0x15e000d4, 0x15e000e5, 0x15e000ea, 0x15e00102, - 0x15e00107, 0x15e0010a, 0x15e00114, 0x15e0011c, - 0x15e00120, 0x15e00122, 0x15e00128, 0x15e0013f, - 0x15e00140, 0x15e0015f, 0x16900000, 0x1690009e, - 0x16d00000, 0x16d000d9, 0x16e00000, 0x16e00096, - 0x17e00000, 0x17e0007b, 0x19000000, 0x1900006e, - 0x1a300000, 0x1a30004e, 0x1a300078, 0x1a3000b2, + 0x15e000c9, 0x15e000ca, 0x15e000cd, 0x15e000d4, + 0x15e000d5, 0x15e000e6, 0x15e000eb, 0x15e00103, + 0x15e00108, 0x15e0010b, 0x15e00115, 0x15e0011d, + 0x15e00121, 0x15e00123, 0x15e00129, 0x15e00140, + 0x15e00141, 0x15e00160, 0x16900000, 0x1690009f, + 0x16d00000, 0x16d000da, 0x16e00000, 0x16e00097, + 0x17e00000, 0x17e0007c, 0x19000000, 0x1900006f, + 0x1a300000, 0x1a30004e, 0x1a300079, 0x1a3000b3, // Entry 160 - 17F - 0x1a400000, 0x1a400099, 0x1a900000, 0x1ab00000, - 0x1ab000a4, 0x1ac00000, 0x1ac00098, 0x1b400000, - 0x1b400080, 0x1b4000d4, 0x1b4000d6, 0x1b800000, - 0x1b800135, 0x1bc00000, 0x1bc00097, 0x1be00000, - 0x1be00099, 0x1d100000, 0x1d100033, 0x1d100090, - 0x1d200000, 0x1d200060, 0x1d500000, 0x1d500092, - 0x1d700000, 0x1d700028, 0x1e100000, 0x1e100095, - 0x1e700000, 0x1e7000d6, 0x1ea00000, 0x1ea00053, + 0x1a400000, 0x1a40009a, 0x1a900000, 0x1ab00000, + 0x1ab000a5, 0x1ac00000, 0x1ac00099, 0x1b400000, + 0x1b400081, 0x1b4000d5, 0x1b4000d7, 0x1b800000, + 0x1b800136, 0x1bc00000, 0x1bc00098, 0x1be00000, + 0x1be0009a, 0x1d100000, 0x1d100033, 0x1d100091, + 0x1d200000, 0x1d200061, 0x1d500000, 0x1d500093, + 0x1d700000, 0x1d700028, 0x1e100000, 0x1e100096, + 0x1e700000, 0x1e7000d7, 0x1ea00000, 0x1ea00053, // Entry 180 - 19F - 0x1f300000, 0x1f500000, 0x1f800000, 0x1f80009d, - 0x1f900000, 0x1f90004e, 0x1f90009e, 0x1f900113, - 0x1f900138, 0x1fa00000, 0x1fb00000, 0x20000000, - 0x200000a2, 0x20300000, 0x20700000, 0x20700052, - 0x20800000, 0x20a00000, 0x20a0012f, 0x20e00000, - 0x20f00000, 0x21000000, 0x2100007d, 0x21200000, - 0x21200067, 0x21600000, 0x21700000, 0x217000a4, - 0x21f00000, 0x22300000, 0x2230012f, 0x22700000, + 0x1f300000, 0x1f500000, 0x1f800000, 0x1f80009e, + 0x1f900000, 0x1f90004e, 0x1f90009f, 0x1f900114, + 0x1f900139, 0x1fa00000, 0x1fb00000, 0x20000000, + 0x200000a3, 0x20300000, 0x20700000, 0x20700052, + 0x20800000, 0x20a00000, 0x20a00130, 0x20e00000, + 0x20f00000, 0x21000000, 0x2100007e, 0x21200000, + 0x21200068, 0x21600000, 0x21700000, 0x217000a5, + 0x21f00000, 0x22300000, 0x22300130, 0x22700000, // Entry 1A0 - 1BF - 0x2270005a, 0x23400000, 0x234000c3, 0x23900000, - 0x239000a4, 0x24200000, 0x242000ae, 0x24400000, - 0x24400052, 0x24500000, 0x24500082, 0x24600000, - 0x246000a4, 0x24a00000, 0x24a000a6, 0x25100000, - 0x25100099, 0x25400000, 0x254000aa, 0x254000ab, - 0x25600000, 0x25600099, 0x26a00000, 0x26a00099, - 0x26b00000, 0x26b0012f, 0x26d00000, 0x26d00052, - 0x26e00000, 0x26e00060, 0x27400000, 0x28100000, + 0x2270005b, 0x23400000, 0x234000c4, 0x23900000, + 0x239000a5, 0x24200000, 0x242000af, 0x24400000, + 0x24400052, 0x24500000, 0x24500083, 0x24600000, + 0x246000a5, 0x24a00000, 0x24a000a7, 0x25100000, + 0x2510009a, 0x25400000, 0x254000ab, 0x254000ac, + 0x25600000, 0x2560009a, 0x26a00000, 0x26a0009a, + 0x26b00000, 0x26b00130, 0x26d00000, 0x26d00052, + 0x26e00000, 0x26e00061, 0x27400000, 0x28100000, // Entry 1C0 - 1DF - 0x2810007b, 0x28a00000, 0x28a000a5, 0x29100000, - 0x2910012f, 0x29500000, 0x295000b7, 0x2a300000, - 0x2a300131, 0x2af00000, 0x2af00135, 0x2b500000, + 0x2810007c, 0x28a00000, 0x28a000a6, 0x29100000, + 0x29100130, 0x29500000, 0x295000b8, 0x2a300000, + 0x2a300132, 0x2af00000, 0x2af00136, 0x2b500000, 0x2b50002a, 0x2b50004b, 0x2b50004c, 0x2b50004d, - 0x2b800000, 0x2b8000af, 0x2bf00000, 0x2bf0009b, - 0x2bf0009c, 0x2c000000, 0x2c0000b6, 0x2c200000, - 0x2c20004b, 0x2c400000, 0x2c4000a4, 0x2c500000, - 0x2c5000a4, 0x2c700000, 0x2c7000b8, 0x2d100000, + 0x2b800000, 0x2b8000b0, 0x2bf00000, 0x2bf0009c, + 0x2bf0009d, 0x2c000000, 0x2c0000b7, 0x2c200000, + 0x2c20004b, 0x2c400000, 0x2c4000a5, 0x2c500000, + 0x2c5000a5, 0x2c700000, 0x2c7000b9, 0x2d100000, // Entry 1E0 - 1FF - 0x2d1000a4, 0x2d10012f, 0x2e900000, 0x2e9000a4, - 0x2ed00000, 0x2ed000cc, 0x2f100000, 0x2f1000bf, - 0x2f200000, 0x2f2000d1, 0x2f400000, 0x2f400052, - 0x2ff00000, 0x2ff000c2, 0x30400000, 0x30400099, - 0x30b00000, 0x30b000c5, 0x31000000, 0x31b00000, - 0x31b00099, 0x31f00000, 0x31f0003e, 0x31f000d0, - 0x31f0010d, 0x32000000, 0x320000cb, 0x32500000, - 0x32500052, 0x33100000, 0x331000c4, 0x33a00000, + 0x2d1000a5, 0x2d100130, 0x2e900000, 0x2e9000a5, + 0x2ed00000, 0x2ed000cd, 0x2f100000, 0x2f1000c0, + 0x2f200000, 0x2f2000d2, 0x2f400000, 0x2f400052, + 0x2ff00000, 0x2ff000c3, 0x30400000, 0x3040009a, + 0x30b00000, 0x30b000c6, 0x31000000, 0x31b00000, + 0x31b0009a, 0x31f00000, 0x31f0003e, 0x31f000d1, + 0x31f0010e, 0x32000000, 0x320000cc, 0x32500000, + 0x32500052, 0x33100000, 0x331000c5, 0x33a00000, // Entry 200 - 21F - 0x33a0009c, 0x34100000, 0x34500000, 0x345000d2, - 0x34700000, 0x347000da, 0x34700110, 0x34e00000, - 0x34e00164, 0x35000000, 0x35000060, 0x350000d9, - 0x35100000, 0x35100099, 0x351000db, 0x36700000, - 0x36700030, 0x36700036, 0x36700040, 0x3670005b, - 0x367000d9, 0x36700116, 0x3670011b, 0x36800000, - 0x36800052, 0x36a00000, 0x36a000da, 0x36c00000, + 0x33a0009d, 0x34100000, 0x34500000, 0x345000d3, + 0x34700000, 0x347000db, 0x34700111, 0x34e00000, + 0x34e00165, 0x35000000, 0x35000061, 0x350000da, + 0x35100000, 0x3510009a, 0x351000dc, 0x36700000, + 0x36700030, 0x36700036, 0x36700040, 0x3670005c, + 0x367000da, 0x36700117, 0x3670011c, 0x36800000, + 0x36800052, 0x36a00000, 0x36a000db, 0x36c00000, 0x36c00052, 0x36f00000, 0x37500000, 0x37600000, // Entry 220 - 23F - 0x37a00000, 0x38000000, 0x38000117, 0x38700000, - 0x38900000, 0x38900131, 0x39000000, 0x3900006f, - 0x390000a4, 0x39500000, 0x39500099, 0x39800000, - 0x3980007d, 0x39800106, 0x39d00000, 0x39d05000, - 0x39d050e8, 0x39d36000, 0x39d36099, 0x3a100000, - 0x3b300000, 0x3b3000e9, 0x3bd00000, 0x3bd00001, + 0x37a00000, 0x38000000, 0x38000118, 0x38700000, + 0x38900000, 0x38900132, 0x39000000, 0x39000070, + 0x390000a5, 0x39500000, 0x3950009a, 0x39800000, + 0x3980007e, 0x39800107, 0x39d00000, 0x39d05000, + 0x39d050e9, 0x39d36000, 0x39d3609a, 0x3a100000, + 0x3b300000, 0x3b3000ea, 0x3bd00000, 0x3bd00001, 0x3be00000, 0x3be00024, 0x3c000000, 0x3c00002a, - 0x3c000041, 0x3c00004e, 0x3c00005a, 0x3c000086, + 0x3c000041, 0x3c00004e, 0x3c00005b, 0x3c000087, // Entry 240 - 25F - 0x3c00008b, 0x3c0000b7, 0x3c0000c6, 0x3c0000d1, - 0x3c0000ee, 0x3c000118, 0x3c000126, 0x3c400000, - 0x3c40003f, 0x3c400069, 0x3c4000e4, 0x3d400000, + 0x3c00008c, 0x3c0000b8, 0x3c0000c7, 0x3c0000d2, + 0x3c0000ef, 0x3c000119, 0x3c000127, 0x3c400000, + 0x3c40003f, 0x3c40006a, 0x3c4000e5, 0x3d400000, 0x3d40004e, 0x3d900000, 0x3d90003a, 0x3dc00000, - 0x3dc000bc, 0x3dc00104, 0x3de00000, 0x3de0012f, - 0x3e200000, 0x3e200047, 0x3e2000a5, 0x3e2000ae, - 0x3e2000bc, 0x3e200106, 0x3e200130, 0x3e500000, - 0x3e500107, 0x3e600000, 0x3e60012f, 0x3eb00000, + 0x3dc000bd, 0x3dc00105, 0x3de00000, 0x3de00130, + 0x3e200000, 0x3e200047, 0x3e2000a6, 0x3e2000af, + 0x3e2000bd, 0x3e200107, 0x3e200131, 0x3e500000, + 0x3e500108, 0x3e600000, 0x3e600130, 0x3eb00000, // Entry 260 - 27F - 0x3eb00106, 0x3ec00000, 0x3ec000a4, 0x3f300000, - 0x3f30012f, 0x3fa00000, 0x3fa000e8, 0x3fc00000, - 0x3fd00000, 0x3fd00072, 0x3fd000da, 0x3fd0010c, - 0x3ff00000, 0x3ff000d1, 0x40100000, 0x401000c3, + 0x3eb00107, 0x3ec00000, 0x3ec000a5, 0x3f300000, + 0x3f300130, 0x3fa00000, 0x3fa000e9, 0x3fc00000, + 0x3fd00000, 0x3fd00073, 0x3fd000db, 0x3fd0010d, + 0x3ff00000, 0x3ff000d2, 0x40100000, 0x401000c4, 0x40200000, 0x4020004c, 0x40700000, 0x40800000, - 0x4085a000, 0x4085a0ba, 0x408e8000, 0x408e80ba, - 0x40c00000, 0x40c000b3, 0x41200000, 0x41200111, - 0x41600000, 0x4160010f, 0x41c00000, 0x41d00000, + 0x4085b000, 0x4085b0bb, 0x408eb000, 0x408eb0bb, + 0x40c00000, 0x40c000b4, 0x41200000, 0x41200112, + 0x41600000, 0x41600110, 0x41c00000, 0x41d00000, // Entry 280 - 29F - 0x41e00000, 0x41f00000, 0x41f00072, 0x42200000, - 0x42300000, 0x42300164, 0x42900000, 0x42900062, - 0x4290006f, 0x429000a4, 0x42900115, 0x43100000, - 0x43100027, 0x431000c2, 0x4310014d, 0x43200000, - 0x43220000, 0x43220033, 0x432200bd, 0x43220105, - 0x4322014d, 0x4325a000, 0x4325a033, 0x4325a0bd, - 0x4325a105, 0x4325a14d, 0x43700000, 0x43a00000, - 0x43b00000, 0x44400000, 0x44400031, 0x44400072, + 0x41e00000, 0x41f00000, 0x41f00073, 0x42200000, + 0x42300000, 0x42300165, 0x42900000, 0x42900063, + 0x42900070, 0x429000a5, 0x42900116, 0x43100000, + 0x43100027, 0x431000c3, 0x4310014e, 0x43200000, + 0x43220000, 0x43220033, 0x432200be, 0x43220106, + 0x4322014e, 0x4325b000, 0x4325b033, 0x4325b0be, + 0x4325b106, 0x4325b14e, 0x43700000, 0x43a00000, + 0x43b00000, 0x44400000, 0x44400031, 0x44400073, // Entry 2A0 - 2BF - 0x4440010c, 0x44500000, 0x4450004b, 0x445000a4, - 0x4450012f, 0x44500131, 0x44e00000, 0x45000000, - 0x45000099, 0x450000b3, 0x450000d0, 0x4500010d, - 0x46100000, 0x46100099, 0x46400000, 0x464000a4, - 0x46400131, 0x46700000, 0x46700124, 0x46b00000, - 0x46b00123, 0x46f00000, 0x46f0006d, 0x46f0006f, - 0x47100000, 0x47600000, 0x47600127, 0x47a00000, - 0x48000000, 0x48200000, 0x48200129, 0x48a00000, + 0x4440010d, 0x44500000, 0x4450004b, 0x445000a5, + 0x44500130, 0x44500132, 0x44e00000, 0x45000000, + 0x4500009a, 0x450000b4, 0x450000d1, 0x4500010e, + 0x46100000, 0x4610009a, 0x46400000, 0x464000a5, + 0x46400132, 0x46700000, 0x46700125, 0x46b00000, + 0x46b00124, 0x46f00000, 0x46f0006e, 0x46f00070, + 0x47100000, 0x47600000, 0x47600128, 0x47a00000, + 0x48000000, 0x48200000, 0x4820012a, 0x48a00000, // Entry 2C0 - 2DF - 0x48a0005d, 0x48a0012b, 0x48e00000, 0x49400000, - 0x49400106, 0x4a400000, 0x4a4000d4, 0x4a900000, - 0x4a9000ba, 0x4ac00000, 0x4ac00053, 0x4ae00000, - 0x4ae00130, 0x4b400000, 0x4b400099, 0x4b4000e8, + 0x48a0005e, 0x48a0012c, 0x48e00000, 0x49400000, + 0x49400107, 0x4a400000, 0x4a4000d5, 0x4a900000, + 0x4a9000bb, 0x4ac00000, 0x4ac00053, 0x4ae00000, + 0x4ae00131, 0x4b400000, 0x4b40009a, 0x4b4000e9, 0x4bc00000, 0x4bc05000, 0x4bc05024, 0x4bc20000, - 0x4bc20137, 0x4bc5a000, 0x4bc5a137, 0x4be00000, - 0x4be5a000, 0x4be5a0b4, 0x4bef1000, 0x4bef10b4, - 0x4c000000, 0x4c300000, 0x4c30013e, 0x4c900000, + 0x4bc20138, 0x4bc5b000, 0x4bc5b138, 0x4be00000, + 0x4be5b000, 0x4be5b0b5, 0x4bef4000, 0x4bef40b5, + 0x4c000000, 0x4c300000, 0x4c30013f, 0x4c900000, // Entry 2E0 - 2FF - 0x4c900001, 0x4cc00000, 0x4cc0012f, 0x4ce00000, - 0x4cf00000, 0x4cf0004e, 0x4e500000, 0x4e500114, - 0x4f200000, 0x4fb00000, 0x4fb00131, 0x50900000, + 0x4c900001, 0x4cc00000, 0x4cc00130, 0x4ce00000, + 0x4cf00000, 0x4cf0004e, 0x4e500000, 0x4e500115, + 0x4f200000, 0x4fb00000, 0x4fb00132, 0x50900000, 0x50900052, 0x51200000, 0x51200001, 0x51800000, - 0x5180003b, 0x518000d6, 0x51f00000, 0x51f3b000, - 0x51f3b053, 0x51f3c000, 0x51f3c08d, 0x52800000, - 0x528000ba, 0x52900000, 0x5293b000, 0x5293b053, - 0x5293b08d, 0x5293b0c6, 0x5293b10d, 0x5293c000, + 0x5180003b, 0x518000d7, 0x51f00000, 0x51f3b000, + 0x51f3b053, 0x51f3c000, 0x51f3c08e, 0x52800000, + 0x528000bb, 0x52900000, 0x5293b000, 0x5293b053, + 0x5293b08e, 0x5293b0c7, 0x5293b10e, 0x5293c000, // Entry 300 - 31F - 0x5293c08d, 0x5293c0c6, 0x5293c12e, 0x52f00000, - 0x52f00161, + 0x5293c08e, 0x5293c0c7, 0x5293c12f, 0x52f00000, + 0x52f00162, } // Size: 3116 bytes const specialTagsStr string = "ca-ES-valencia en-US-u-va-posix" -// Total table size 3147 bytes (3KiB); checksum: 6772C83C +// Total table size 3147 bytes (3KiB); checksum: 5A8FFFA5 diff --git a/vendor/golang.org/x/text/internal/language/tables.go b/vendor/golang.org/x/text/internal/language/tables.go index fb6b58378b..14167e74e4 100644 --- a/vendor/golang.org/x/text/internal/language/tables.go +++ b/vendor/golang.org/x/text/internal/language/tables.go @@ -7,11 +7,11 @@ import "golang.org/x/text/internal/tag" // CLDRVersion is the CLDR version from which the tables in this package are derived. const CLDRVersion = "32" -const NumLanguages = 8752 +const NumLanguages = 8798 -const NumScripts = 258 +const NumScripts = 261 -const NumRegions = 357 +const NumRegions = 358 type FromTo struct { From uint16 @@ -263,7 +263,7 @@ var langNoIndex = [2197]uint8{ 0xff, 0xf8, 0xed, 0xfe, 0xeb, 0xd3, 0x3b, 0xd2, 0xfb, 0xbf, 0x7a, 0xfa, 0x37, 0x1d, 0x3c, 0x57, 0x6e, 0x97, 0x73, 0x38, 0xfb, 0xea, 0xbf, 0x70, - 0xad, 0x03, 0xff, 0xff, 0xcf, 0x05, 0x84, 0x62, + 0xad, 0x03, 0xff, 0xff, 0xcf, 0x05, 0x84, 0x72, 0xe9, 0xbf, 0xfd, 0xbf, 0xbf, 0xf7, 0xfd, 0x77, 0x0f, 0xff, 0xef, 0x6f, 0xff, 0xfb, 0xdf, 0xe2, 0xc9, 0xf8, 0x7f, 0x7e, 0x4d, 0xbc, 0x0a, 0x6a, @@ -278,7 +278,7 @@ var langNoIndex = [2197]uint8{ 0xa8, 0xff, 0x1f, 0x67, 0x7d, 0xeb, 0xef, 0xce, 0xff, 0xff, 0x9f, 0xff, 0xb7, 0xef, 0xfe, 0xcf, // Entry 80 - BF - 0xdb, 0xff, 0xf3, 0xcd, 0xfb, 0x6f, 0xff, 0xff, + 0xdb, 0xff, 0xf3, 0xcd, 0xfb, 0x7f, 0xff, 0xff, 0xbb, 0xee, 0xf7, 0xbd, 0xdb, 0xff, 0x5f, 0xf7, 0xfd, 0xf2, 0xfd, 0xff, 0x5e, 0x2f, 0x3b, 0xba, 0x7e, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xdd, 0xff, @@ -289,11 +289,11 @@ var langNoIndex = [2197]uint8{ // Entry C0 - FF 0xfb, 0x4a, 0xf2, 0x9f, 0xb4, 0x42, 0x41, 0x96, 0x1b, 0x14, 0x08, 0xf3, 0x2b, 0xe7, 0x17, 0x56, - 0x05, 0x7d, 0x0e, 0x1c, 0x37, 0x7b, 0xf3, 0xef, + 0x05, 0x7d, 0x0e, 0x1c, 0x37, 0x7f, 0xf3, 0xef, 0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10, 0xbc, 0x85, 0xaf, 0xdf, 0xff, 0xff, 0x7b, 0x35, 0x3e, 0xc7, 0xc7, 0xdf, 0xff, 0x01, 0x81, 0x00, - 0xb0, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, + 0xb0, 0x05, 0x80, 0x00, 0x20, 0x00, 0x00, 0x03, 0x40, 0x00, 0x40, 0x92, 0x21, 0x50, 0xb1, 0x5d, // Entry 100 - 13F 0xfd, 0xdc, 0xbe, 0x5e, 0x00, 0x00, 0x02, 0x64, @@ -303,20 +303,20 @@ var langNoIndex = [2197]uint8{ 0x86, 0x00, 0xd1, 0x00, 0xf0, 0xc7, 0x67, 0x5f, 0x56, 0x99, 0x5e, 0xb5, 0x6c, 0xaf, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0xc0, 0x37, 0xda, 0x56, - 0x90, 0x69, 0x01, 0x2c, 0x96, 0x69, 0x20, 0xfb, + 0x90, 0x6d, 0x01, 0x2e, 0x96, 0x69, 0x20, 0xfb, // Entry 140 - 17F 0xff, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x16, - 0x03, 0x00, 0x00, 0xb0, 0x14, 0x03, 0x50, 0x06, + 0x03, 0x00, 0x00, 0xb0, 0x14, 0x23, 0x50, 0x06, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x10, 0x11, 0x09, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x10, - 0x00, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x04, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x05, 0x08, 0x00, 0x00, 0x05, 0x00, 0x80, 0x28, 0x04, 0x00, 0x00, 0x40, 0xd5, 0x2d, 0x00, 0x64, 0x35, 0x24, 0x52, 0xf4, 0xd5, 0xbf, 0x62, 0xc9, 0x03, // Entry 180 - 1BF 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x13, 0x39, 0x01, 0xdd, 0x57, 0x98, - 0x21, 0x18, 0x81, 0x00, 0x00, 0x01, 0x40, 0x82, + 0x21, 0x18, 0x81, 0x08, 0x00, 0x01, 0x40, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x44, 0x00, 0x00, 0x80, 0xea, 0xa9, 0x39, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, @@ -337,7 +337,7 @@ var langNoIndex = [2197]uint8{ 0xa4, 0x45, 0x25, 0x9b, 0x02, 0xdf, 0xe1, 0xdf, 0x03, 0x44, 0x08, 0x90, 0x01, 0x04, 0x81, 0xe3, 0x92, 0x54, 0xdb, 0x28, 0xd3, 0x5f, 0xfe, 0x6d, - 0x79, 0xed, 0x1c, 0x7d, 0x04, 0x08, 0x00, 0x01, + 0x79, 0xed, 0x1c, 0x7f, 0x04, 0x08, 0x00, 0x01, 0x21, 0x12, 0x64, 0x5f, 0xdd, 0x0e, 0x85, 0x4f, 0x40, 0x40, 0x00, 0x04, 0xf1, 0xfd, 0x3d, 0x54, // Entry 240 - 27F @@ -359,13 +359,13 @@ var langNoIndex = [2197]uint8{ 0x03, 0x00, 0x00, 0x00, 0x8c, 0x50, 0x40, 0x04, 0x84, 0x47, 0x84, 0x40, 0x20, 0x10, 0x00, 0x20, // Entry 2C0 - 2FF - 0x02, 0x50, 0x80, 0x11, 0x00, 0x91, 0x6c, 0xe2, - 0x50, 0x27, 0x1d, 0x11, 0x29, 0x06, 0x59, 0xe9, + 0x02, 0x50, 0x80, 0x11, 0x00, 0x99, 0x6c, 0xe2, + 0x50, 0x27, 0x1d, 0x11, 0x29, 0x0e, 0x59, 0xe9, 0x33, 0x08, 0x00, 0x20, 0x04, 0x40, 0x10, 0x00, 0x00, 0x00, 0x50, 0x44, 0x92, 0x49, 0xd6, 0x5d, 0xa7, 0x81, 0x47, 0x97, 0xfb, 0x00, 0x10, 0x00, 0x08, 0x00, 0x80, 0x00, 0x40, 0x04, 0x00, 0x01, - 0x02, 0x00, 0x01, 0x40, 0x80, 0x00, 0x00, 0x08, + 0x02, 0x00, 0x01, 0x40, 0x80, 0x00, 0x40, 0x08, 0xd8, 0xeb, 0xf6, 0x39, 0xc4, 0x8d, 0x12, 0x00, // Entry 300 - 33F 0x00, 0x0c, 0x04, 0x01, 0x20, 0x20, 0xdd, 0xa0, @@ -392,14 +392,14 @@ var langNoIndex = [2197]uint8{ 0xee, 0xdb, 0x6f, 0xef, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0x5f, 0xd3, 0x3b, 0xfd, 0xd9, 0xdf, 0xeb, 0xbc, 0x08, 0x05, 0x24, 0xff, 0x07, 0x70, 0xfe, - 0xe6, 0x5e, 0x00, 0x08, 0x00, 0x83, 0x3d, 0x1b, + 0xe6, 0x5e, 0x00, 0x08, 0x00, 0x83, 0x7d, 0x1f, 0x06, 0xe6, 0x72, 0x60, 0xd1, 0x3c, 0x7f, 0x44, // Entry 3C0 - 3FF 0x02, 0x30, 0x9f, 0x7a, 0x16, 0xbd, 0x7f, 0x57, 0xf2, 0xff, 0x31, 0xff, 0xf2, 0x1e, 0x90, 0xf7, - 0xf1, 0xf9, 0x45, 0x80, 0x01, 0x02, 0x00, 0x00, - 0x40, 0x54, 0x9f, 0x8a, 0xdb, 0xf9, 0x2e, 0x11, - 0x86, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x40, 0x01, + 0xf1, 0xf9, 0x45, 0x80, 0x01, 0x02, 0x00, 0x20, + 0x40, 0x54, 0x9f, 0x8a, 0xdf, 0xf9, 0x6e, 0x11, + 0x86, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x40, 0x03, 0x05, 0xd1, 0x50, 0x5c, 0x00, 0x40, 0x00, 0x10, 0x04, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x17, 0xd2, 0xb9, 0xfd, 0xfc, 0xba, 0xfe, 0xef, 0xc7, 0xbe, @@ -424,12 +424,12 @@ var langNoIndex = [2197]uint8{ // Entry 480 - 4BF 0x93, 0x50, 0x5d, 0xaf, 0xa6, 0xff, 0x99, 0xfb, 0x63, 0x1d, 0x53, 0xff, 0xef, 0xb7, 0x35, 0x20, - 0x14, 0x00, 0x55, 0x51, 0x82, 0x65, 0xf5, 0x41, - 0xe2, 0xff, 0xfc, 0xdf, 0x02, 0x05, 0xc5, 0x05, + 0x14, 0x00, 0x55, 0x51, 0xc2, 0x65, 0xf5, 0x41, + 0xe2, 0xff, 0xfc, 0xdf, 0x02, 0x85, 0xc5, 0x05, 0x00, 0x22, 0x00, 0x74, 0x69, 0x10, 0x08, 0x05, 0x41, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x20, 0x05, 0x04, 0x01, 0x00, 0x00, - 0x06, 0x01, 0x20, 0x00, 0x18, 0x01, 0x92, 0xf1, + 0x06, 0x11, 0x20, 0x00, 0x18, 0x01, 0x92, 0xf1, // Entry 4C0 - 4FF 0xfd, 0x47, 0x69, 0x06, 0x95, 0x06, 0x57, 0xed, 0xfb, 0x4d, 0x1c, 0x6b, 0x83, 0x04, 0x62, 0x40, @@ -441,7 +441,7 @@ var langNoIndex = [2197]uint8{ 0xbe, 0xcf, 0xf7, 0xaf, 0x42, 0x04, 0x84, 0x41, // Entry 500 - 53F 0x30, 0xff, 0x79, 0x72, 0x04, 0x00, 0x00, 0x49, - 0x2d, 0x14, 0x27, 0x57, 0xed, 0xf1, 0x3f, 0xe7, + 0x2d, 0x14, 0x27, 0x5f, 0xed, 0xf1, 0x3f, 0xe7, 0x3f, 0x00, 0x00, 0x02, 0xc6, 0xa0, 0x1e, 0xf8, 0xbb, 0xff, 0xfd, 0xfb, 0xb7, 0xfd, 0xe7, 0xf7, 0xfd, 0xfc, 0xd5, 0xed, 0x47, 0xf4, 0x7e, 0x10, @@ -449,7 +449,7 @@ var langNoIndex = [2197]uint8{ 0x5b, 0x05, 0x86, 0xed, 0xf5, 0x77, 0xbd, 0x3c, 0x00, 0x00, 0x00, 0x42, 0x71, 0x42, 0x00, 0x40, // Entry 540 - 57F - 0x00, 0x00, 0x01, 0x43, 0x19, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x01, 0x43, 0x19, 0x24, 0x08, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, @@ -464,13 +464,13 @@ var langNoIndex = [2197]uint8{ 0x00, 0x00, 0x00, 0x00, 0xf0, 0xce, 0xfb, 0xbf, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x30, 0x15, 0xa3, 0x10, 0x00, 0x00, 0x00, - 0x11, 0x04, 0x16, 0x00, 0x00, 0x02, 0x00, 0x81, + 0x11, 0x04, 0x16, 0x00, 0x00, 0x02, 0x20, 0x81, 0xa3, 0x01, 0x50, 0x00, 0x00, 0x83, 0x11, 0x40, // Entry 5C0 - 5FF - 0x00, 0x00, 0x00, 0xf0, 0xdd, 0x7b, 0x3e, 0x02, + 0x00, 0x00, 0x00, 0xf0, 0xdd, 0x7b, 0xbe, 0x02, 0xaa, 0x10, 0x5d, 0x98, 0x52, 0x00, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x02, - 0x19, 0x00, 0x10, 0x02, 0x10, 0x61, 0x5a, 0x9d, + 0x3d, 0x40, 0x10, 0x02, 0x10, 0x61, 0x5a, 0x9d, 0x31, 0x00, 0x00, 0x00, 0x01, 0x18, 0x02, 0x20, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x20, 0x00, 0x00, 0x1f, 0xdf, 0xd2, 0xb9, 0xff, 0xfd, 0x3f, @@ -491,20 +491,20 @@ var langNoIndex = [2197]uint8{ 0x02, 0xfb, 0xa3, 0xef, 0xf3, 0xd6, 0xf2, 0xff, 0xb9, 0xda, 0x7d, 0xd0, 0x3e, 0x15, 0x7b, 0xb4, 0xf5, 0x3e, 0xff, 0xff, 0xf1, 0xf7, 0xff, 0xe7, - 0x5f, 0xff, 0xff, 0x9e, 0xdb, 0xf6, 0xd7, 0xb9, + 0x5f, 0xff, 0xff, 0x9e, 0xdf, 0xf6, 0xd7, 0xb9, 0xef, 0x27, 0x80, 0xbb, 0xc5, 0xff, 0xff, 0xe3, // Entry 680 - 6BF 0x97, 0x9d, 0xbf, 0x9f, 0xf7, 0xc7, 0xfd, 0x37, - 0xce, 0x7f, 0x04, 0x1d, 0x73, 0x7f, 0xf8, 0xda, + 0xce, 0x7f, 0x44, 0x1d, 0x73, 0x7f, 0xf8, 0xda, 0x5d, 0xce, 0x7d, 0x06, 0xb9, 0xea, 0x79, 0xa0, 0x1a, 0x20, 0x00, 0x30, 0x02, 0x04, 0x24, 0x08, 0x04, 0x00, 0x00, 0x40, 0xd4, 0x02, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x01, 0x06, + 0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x09, 0x06, 0x50, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0x00, 0x04, 0x00, 0x10, 0xdc, 0x58, 0xd7, 0x0d, 0x0f, // Entry 6C0 - 6FF - 0x14, 0x4d, 0xf1, 0x16, 0x44, 0xd5, 0x42, 0x08, - 0x40, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00, + 0x54, 0x4d, 0xf1, 0x16, 0x44, 0xd5, 0x42, 0x08, + 0x40, 0x02, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0xdc, 0xfb, 0xcb, 0x0e, 0x58, 0x48, 0x41, 0x24, 0x20, 0x04, 0x00, 0x30, 0x12, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -513,7 +513,7 @@ var langNoIndex = [2197]uint8{ 0x00, 0x00, 0x00, 0x80, 0x80, 0x25, 0x00, 0x00, // Entry 700 - 73F 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x80, 0x86, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x80, 0x86, 0xc2, 0x00, 0x00, 0x01, 0x00, 0x01, 0xff, 0x18, 0x02, 0x00, 0x02, 0xf0, 0xfd, 0x79, 0x3b, 0x00, 0x25, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, @@ -522,7 +522,7 @@ var langNoIndex = [2197]uint8{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 740 - 77F 0x00, 0x00, 0x00, 0xef, 0xd5, 0xfd, 0xcf, 0x7e, - 0xb0, 0x11, 0x00, 0x00, 0x00, 0x92, 0x01, 0x44, + 0xb0, 0x11, 0x00, 0x00, 0x00, 0x92, 0x01, 0x46, 0xcd, 0xf9, 0x5c, 0x00, 0x01, 0x00, 0x30, 0x04, 0x04, 0x55, 0x00, 0x01, 0x04, 0xf4, 0x3f, 0x4a, 0x01, 0x00, 0x00, 0xb0, 0x80, 0x20, 0x55, 0x75, @@ -530,12 +530,12 @@ var langNoIndex = [2197]uint8{ 0xd5, 0x57, 0x27, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0xf7, 0xcb, 0x1f, 0x14, 0x60, // Entry 780 - 7BF - 0x03, 0x68, 0x01, 0x10, 0x8b, 0x38, 0x8a, 0x01, + 0x83, 0x68, 0x01, 0x10, 0x8b, 0x38, 0x8a, 0x01, 0x00, 0x00, 0x20, 0x00, 0x24, 0x44, 0x00, 0x00, - 0x10, 0x03, 0x11, 0x02, 0x01, 0x00, 0x00, 0xf0, + 0x10, 0x03, 0x31, 0x02, 0x01, 0x00, 0x00, 0xf0, 0xf5, 0xff, 0xd5, 0x97, 0xbc, 0x70, 0xd6, 0x78, - 0x78, 0x15, 0x50, 0x01, 0xa4, 0x84, 0xa9, 0x41, - 0x00, 0x00, 0x00, 0x6b, 0x39, 0x52, 0x74, 0x00, + 0x78, 0x15, 0x50, 0x05, 0xa4, 0x84, 0xa9, 0x41, + 0x00, 0x00, 0x00, 0x6b, 0x39, 0x52, 0x74, 0x40, 0xe8, 0x30, 0x90, 0x6a, 0x92, 0x00, 0x00, 0x02, 0xff, 0xef, 0xff, 0x4b, 0x85, 0x53, 0xf4, 0xed, // Entry 7C0 - 7FF @@ -545,11 +545,11 @@ var langNoIndex = [2197]uint8{ 0xbd, 0xa4, 0xaf, 0x01, 0x44, 0x18, 0x01, 0x4d, 0x4e, 0x4a, 0x08, 0x50, 0x28, 0x30, 0xe0, 0x80, 0x10, 0x20, 0x24, 0x00, 0xff, 0x2f, 0xd3, 0x60, - 0xfe, 0x01, 0x02, 0x88, 0x0a, 0x40, 0x16, 0x01, + 0xfe, 0x01, 0x02, 0x88, 0x2a, 0x40, 0x16, 0x01, 0x01, 0x15, 0x2b, 0x3c, 0x01, 0x00, 0x00, 0x10, // Entry 800 - 83F 0x90, 0x49, 0x41, 0x02, 0x02, 0x01, 0xe1, 0xbf, - 0xbf, 0x03, 0x00, 0x00, 0x10, 0xd4, 0xa3, 0xd1, + 0xbf, 0x03, 0x00, 0x00, 0x10, 0xdc, 0xa3, 0xd1, 0x40, 0x9c, 0x44, 0xdf, 0xf5, 0x8f, 0x66, 0xb3, 0x55, 0x20, 0xd4, 0xc1, 0xd8, 0x30, 0x3d, 0x80, 0x00, 0x00, 0x00, 0x04, 0xd4, 0x11, 0xc5, 0x84, @@ -557,11 +557,11 @@ var langNoIndex = [2197]uint8{ 0x07, 0x00, 0x20, 0x10, 0x84, 0xb2, 0x45, 0x10, 0x06, 0x44, 0x00, 0x00, 0x12, 0x02, 0x11, 0x00, // Entry 840 - 87F - 0xf0, 0xfb, 0xfd, 0x7f, 0x05, 0x00, 0x16, 0x81, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, + 0xf0, 0xfb, 0xfd, 0x7f, 0x05, 0x00, 0x16, 0x89, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x02, 0x28, 0x84, 0x00, 0x21, 0xc0, 0x23, 0x24, 0x00, 0x00, - 0x00, 0xcb, 0xe4, 0x3a, 0x46, 0x88, 0x14, 0xf1, + 0x00, 0xcb, 0xe4, 0x3a, 0x46, 0x88, 0x54, 0xf1, 0xef, 0xff, 0x7f, 0x12, 0x01, 0x01, 0x84, 0x50, 0x07, 0xfc, 0xff, 0xff, 0x0f, 0x01, 0x00, 0x40, 0x10, 0x38, 0x01, 0x01, 0x1c, 0x12, 0x40, 0xe1, @@ -583,8 +583,8 @@ var altLangIndex = [6]uint16{ } // AliasMap maps langIDs to their suggested replacements. -// Size: 716 bytes, 179 elements -var AliasMap = [179]FromTo{ +// Size: 772 bytes, 193 elements +var AliasMap = [193]FromTo{ 0: {From: 0x82, To: 0x88}, 1: {From: 0x187, To: 0x1ae}, 2: {From: 0x1f3, To: 0x1e1}, @@ -599,223 +599,239 @@ var AliasMap = [179]FromTo{ 11: {From: 0x4a2, To: 0x21}, 12: {From: 0x53e, To: 0x544}, 13: {From: 0x58f, To: 0x12d}, - 14: {From: 0x630, To: 0x1eb1}, - 15: {From: 0x651, To: 0x431}, - 16: {From: 0x662, To: 0x431}, - 17: {From: 0x6ed, To: 0x3a}, - 18: {From: 0x6f8, To: 0x1d7}, - 19: {From: 0x709, To: 0x3625}, - 20: {From: 0x73e, To: 0x21a1}, - 21: {From: 0x7b3, To: 0x56}, - 22: {From: 0x7b9, To: 0x299b}, - 23: {From: 0x7c5, To: 0x58}, - 24: {From: 0x7e6, To: 0x145}, - 25: {From: 0x80c, To: 0x5a}, - 26: {From: 0x815, To: 0x8d}, - 27: {From: 0x87e, To: 0x810}, - 28: {From: 0x8a8, To: 0x8b7}, - 29: {From: 0x8c3, To: 0xee3}, - 30: {From: 0x8fa, To: 0x1dc}, - 31: {From: 0x9ef, To: 0x331}, - 32: {From: 0xa36, To: 0x2c5}, - 33: {From: 0xa3d, To: 0xbf}, - 34: {From: 0xabe, To: 0x3322}, - 35: {From: 0xb38, To: 0x529}, - 36: {From: 0xb75, To: 0x265a}, - 37: {From: 0xb7e, To: 0xbc3}, - 38: {From: 0xb9b, To: 0x44e}, - 39: {From: 0xbbc, To: 0x4229}, - 40: {From: 0xbbf, To: 0x529}, - 41: {From: 0xbfe, To: 0x2da7}, - 42: {From: 0xc2e, To: 0x3181}, - 43: {From: 0xcb9, To: 0xf3}, - 44: {From: 0xd08, To: 0xfa}, - 45: {From: 0xdc8, To: 0x11a}, - 46: {From: 0xdd7, To: 0x32d}, - 47: {From: 0xdf8, To: 0xdfb}, - 48: {From: 0xdfe, To: 0x531}, - 49: {From: 0xe01, To: 0xdf3}, - 50: {From: 0xedf, To: 0x205a}, - 51: {From: 0xee9, To: 0x222e}, - 52: {From: 0xeee, To: 0x2e9a}, - 53: {From: 0xf39, To: 0x367}, - 54: {From: 0x10d0, To: 0x140}, - 55: {From: 0x1104, To: 0x2d0}, - 56: {From: 0x11a0, To: 0x1ec}, - 57: {From: 0x1279, To: 0x21}, - 58: {From: 0x1424, To: 0x15e}, - 59: {From: 0x1470, To: 0x14e}, - 60: {From: 0x151f, To: 0xd9b}, - 61: {From: 0x1523, To: 0x390}, - 62: {From: 0x1532, To: 0x19f}, - 63: {From: 0x1580, To: 0x210}, - 64: {From: 0x1583, To: 0x10d}, - 65: {From: 0x15a3, To: 0x3caf}, - 66: {From: 0x1630, To: 0x222e}, - 67: {From: 0x166a, To: 0x19b}, - 68: {From: 0x16c8, To: 0x136}, - 69: {From: 0x1700, To: 0x29f8}, - 70: {From: 0x1718, To: 0x194}, - 71: {From: 0x1727, To: 0xf3f}, - 72: {From: 0x177a, To: 0x178}, - 73: {From: 0x1809, To: 0x17b6}, - 74: {From: 0x1816, To: 0x18f3}, - 75: {From: 0x188a, To: 0x436}, - 76: {From: 0x1979, To: 0x1d01}, - 77: {From: 0x1a74, To: 0x2bb0}, - 78: {From: 0x1a8a, To: 0x1f8}, - 79: {From: 0x1b5a, To: 0x1fa}, - 80: {From: 0x1b86, To: 0x1515}, - 81: {From: 0x1d64, To: 0x2c9b}, - 82: {From: 0x2038, To: 0x37b1}, - 83: {From: 0x203d, To: 0x20dd}, - 84: {From: 0x205a, To: 0x30b}, - 85: {From: 0x20e3, To: 0x274}, - 86: {From: 0x20ee, To: 0x263}, - 87: {From: 0x20f2, To: 0x22d}, - 88: {From: 0x20f9, To: 0x256}, - 89: {From: 0x210f, To: 0x21eb}, - 90: {From: 0x2135, To: 0x27d}, - 91: {From: 0x2160, To: 0x913}, - 92: {From: 0x2199, To: 0x121}, - 93: {From: 0x21ce, To: 0x1561}, - 94: {From: 0x21e6, To: 0x504}, - 95: {From: 0x21f4, To: 0x49f}, - 96: {From: 0x21fb, To: 0x269}, - 97: {From: 0x222d, To: 0x121}, - 98: {From: 0x2237, To: 0x121}, - 99: {From: 0x2262, To: 0x92a}, - 100: {From: 0x2316, To: 0x3226}, - 101: {From: 0x236a, To: 0x2835}, - 102: {From: 0x2382, To: 0x3365}, - 103: {From: 0x2472, To: 0x2c7}, - 104: {From: 0x24e4, To: 0x2ff}, - 105: {From: 0x24f0, To: 0x2fa}, - 106: {From: 0x24fa, To: 0x31f}, - 107: {From: 0x2550, To: 0xb5b}, - 108: {From: 0x25a9, To: 0xe2}, - 109: {From: 0x263e, To: 0x2d0}, - 110: {From: 0x26c9, To: 0x26b4}, - 111: {From: 0x26f9, To: 0x3c8}, - 112: {From: 0x2727, To: 0x3caf}, - 113: {From: 0x2755, To: 0x6a4}, - 114: {From: 0x2765, To: 0x26b4}, - 115: {From: 0x2789, To: 0x4358}, - 116: {From: 0x27c9, To: 0x2001}, - 117: {From: 0x28ea, To: 0x27b1}, - 118: {From: 0x28ef, To: 0x2837}, - 119: {From: 0x2914, To: 0x351}, - 120: {From: 0x2986, To: 0x2da7}, - 121: {From: 0x29f0, To: 0x96b}, - 122: {From: 0x2b1a, To: 0x38d}, - 123: {From: 0x2bfc, To: 0x395}, - 124: {From: 0x2c3f, To: 0x3caf}, - 125: {From: 0x2ce1, To: 0x2201}, - 126: {From: 0x2cfc, To: 0x3be}, - 127: {From: 0x2d13, To: 0x597}, - 128: {From: 0x2d47, To: 0x148}, - 129: {From: 0x2d48, To: 0x148}, - 130: {From: 0x2dff, To: 0x2f1}, - 131: {From: 0x2e08, To: 0x19cc}, - 132: {From: 0x2e1a, To: 0x2d95}, - 133: {From: 0x2e21, To: 0x292}, - 134: {From: 0x2e54, To: 0x7d}, - 135: {From: 0x2e65, To: 0x2282}, - 136: {From: 0x2ea0, To: 0x2e9b}, - 137: {From: 0x2eef, To: 0x2ed7}, - 138: {From: 0x3193, To: 0x3c4}, - 139: {From: 0x3366, To: 0x338e}, - 140: {From: 0x342a, To: 0x3dc}, - 141: {From: 0x34ee, To: 0x18d0}, - 142: {From: 0x35c8, To: 0x2c9b}, - 143: {From: 0x35e6, To: 0x412}, - 144: {From: 0x3658, To: 0x246}, - 145: {From: 0x3676, To: 0x3f4}, - 146: {From: 0x36fd, To: 0x445}, - 147: {From: 0x37c0, To: 0x121}, - 148: {From: 0x3816, To: 0x38f2}, - 149: {From: 0x382a, To: 0x2b48}, - 150: {From: 0x382b, To: 0x2c9b}, - 151: {From: 0x382f, To: 0xa9}, - 152: {From: 0x3832, To: 0x3228}, - 153: {From: 0x386c, To: 0x39a6}, - 154: {From: 0x3892, To: 0x3fc0}, - 155: {From: 0x38a5, To: 0x39d7}, - 156: {From: 0x38b4, To: 0x1fa4}, - 157: {From: 0x38b5, To: 0x2e9a}, - 158: {From: 0x395c, To: 0x47e}, - 159: {From: 0x3b4e, To: 0xd91}, - 160: {From: 0x3b78, To: 0x137}, - 161: {From: 0x3c99, To: 0x4bc}, - 162: {From: 0x3fbd, To: 0x100}, - 163: {From: 0x4208, To: 0xa91}, - 164: {From: 0x42be, To: 0x573}, - 165: {From: 0x42f9, To: 0x3f60}, - 166: {From: 0x4378, To: 0x25a}, - 167: {From: 0x43b8, To: 0xe6c}, - 168: {From: 0x43cd, To: 0x10f}, - 169: {From: 0x44af, To: 0x3322}, - 170: {From: 0x44e3, To: 0x512}, - 171: {From: 0x45ca, To: 0x2409}, - 172: {From: 0x45dd, To: 0x26dc}, - 173: {From: 0x4610, To: 0x48ae}, - 174: {From: 0x46ae, To: 0x46a0}, - 175: {From: 0x473e, To: 0x4745}, - 176: {From: 0x4817, To: 0x3503}, - 177: {From: 0x4916, To: 0x31f}, - 178: {From: 0x49a7, To: 0x523}, + 14: {From: 0x62b, To: 0x34}, + 15: {From: 0x62f, To: 0x14}, + 16: {From: 0x630, To: 0x1eb1}, + 17: {From: 0x651, To: 0x431}, + 18: {From: 0x662, To: 0x431}, + 19: {From: 0x6ed, To: 0x3a}, + 20: {From: 0x6f8, To: 0x1d7}, + 21: {From: 0x709, To: 0x3625}, + 22: {From: 0x73e, To: 0x21a1}, + 23: {From: 0x7b3, To: 0x56}, + 24: {From: 0x7b9, To: 0x299b}, + 25: {From: 0x7c5, To: 0x58}, + 26: {From: 0x7e6, To: 0x145}, + 27: {From: 0x80c, To: 0x5a}, + 28: {From: 0x815, To: 0x8d}, + 29: {From: 0x87e, To: 0x810}, + 30: {From: 0x8a8, To: 0x8b7}, + 31: {From: 0x8c3, To: 0xee3}, + 32: {From: 0x8fa, To: 0x1dc}, + 33: {From: 0x9ef, To: 0x331}, + 34: {From: 0xa36, To: 0x2c5}, + 35: {From: 0xa3d, To: 0xbf}, + 36: {From: 0xabe, To: 0x3322}, + 37: {From: 0xb38, To: 0x529}, + 38: {From: 0xb75, To: 0x265a}, + 39: {From: 0xb7e, To: 0xbc3}, + 40: {From: 0xb9b, To: 0x44e}, + 41: {From: 0xbbc, To: 0x4229}, + 42: {From: 0xbbf, To: 0x529}, + 43: {From: 0xbfe, To: 0x2da7}, + 44: {From: 0xc2e, To: 0x3181}, + 45: {From: 0xcb9, To: 0xf3}, + 46: {From: 0xd08, To: 0xfa}, + 47: {From: 0xdc8, To: 0x11a}, + 48: {From: 0xdd7, To: 0x32d}, + 49: {From: 0xdf8, To: 0xdfb}, + 50: {From: 0xdfe, To: 0x531}, + 51: {From: 0xe01, To: 0xdf3}, + 52: {From: 0xedf, To: 0x205a}, + 53: {From: 0xee9, To: 0x222e}, + 54: {From: 0xeee, To: 0x2e9a}, + 55: {From: 0xf39, To: 0x367}, + 56: {From: 0x10d0, To: 0x140}, + 57: {From: 0x1104, To: 0x2d0}, + 58: {From: 0x11a0, To: 0x1ec}, + 59: {From: 0x1279, To: 0x21}, + 60: {From: 0x1424, To: 0x15e}, + 61: {From: 0x1470, To: 0x14e}, + 62: {From: 0x151f, To: 0xd9b}, + 63: {From: 0x1523, To: 0x390}, + 64: {From: 0x1532, To: 0x19f}, + 65: {From: 0x1580, To: 0x210}, + 66: {From: 0x1583, To: 0x10d}, + 67: {From: 0x15a3, To: 0x3caf}, + 68: {From: 0x1630, To: 0x222e}, + 69: {From: 0x166a, To: 0x19b}, + 70: {From: 0x16c8, To: 0x136}, + 71: {From: 0x1700, To: 0x29f8}, + 72: {From: 0x1718, To: 0x194}, + 73: {From: 0x1727, To: 0xf3f}, + 74: {From: 0x177a, To: 0x178}, + 75: {From: 0x1809, To: 0x17b6}, + 76: {From: 0x1816, To: 0x18f3}, + 77: {From: 0x188a, To: 0x436}, + 78: {From: 0x1979, To: 0x1d01}, + 79: {From: 0x1a74, To: 0x2bb0}, + 80: {From: 0x1a8a, To: 0x1f8}, + 81: {From: 0x1b5a, To: 0x1fa}, + 82: {From: 0x1b86, To: 0x1515}, + 83: {From: 0x1d64, To: 0x2c9b}, + 84: {From: 0x2038, To: 0x37b1}, + 85: {From: 0x203d, To: 0x20dd}, + 86: {From: 0x2042, To: 0x2e00}, + 87: {From: 0x205a, To: 0x30b}, + 88: {From: 0x20e3, To: 0x274}, + 89: {From: 0x20ee, To: 0x263}, + 90: {From: 0x20f2, To: 0x22d}, + 91: {From: 0x20f9, To: 0x256}, + 92: {From: 0x210f, To: 0x21eb}, + 93: {From: 0x2135, To: 0x27d}, + 94: {From: 0x2160, To: 0x913}, + 95: {From: 0x2199, To: 0x121}, + 96: {From: 0x21ce, To: 0x1561}, + 97: {From: 0x21e6, To: 0x504}, + 98: {From: 0x21f4, To: 0x49f}, + 99: {From: 0x21fb, To: 0x269}, + 100: {From: 0x222d, To: 0x121}, + 101: {From: 0x2237, To: 0x121}, + 102: {From: 0x2248, To: 0x217d}, + 103: {From: 0x2262, To: 0x92a}, + 104: {From: 0x2316, To: 0x3226}, + 105: {From: 0x236a, To: 0x2835}, + 106: {From: 0x2382, To: 0x3365}, + 107: {From: 0x2472, To: 0x2c7}, + 108: {From: 0x24e4, To: 0x2ff}, + 109: {From: 0x24f0, To: 0x2fa}, + 110: {From: 0x24fa, To: 0x31f}, + 111: {From: 0x2550, To: 0xb5b}, + 112: {From: 0x25a9, To: 0xe2}, + 113: {From: 0x263e, To: 0x2d0}, + 114: {From: 0x26c9, To: 0x26b4}, + 115: {From: 0x26f9, To: 0x3c8}, + 116: {From: 0x2727, To: 0x3caf}, + 117: {From: 0x2755, To: 0x6a4}, + 118: {From: 0x2765, To: 0x26b4}, + 119: {From: 0x2789, To: 0x4358}, + 120: {From: 0x27c9, To: 0x2001}, + 121: {From: 0x28ea, To: 0x27b1}, + 122: {From: 0x28ef, To: 0x2837}, + 123: {From: 0x28fe, To: 0xaa5}, + 124: {From: 0x2914, To: 0x351}, + 125: {From: 0x2986, To: 0x2da7}, + 126: {From: 0x29f0, To: 0x96b}, + 127: {From: 0x2b1a, To: 0x38d}, + 128: {From: 0x2bfc, To: 0x395}, + 129: {From: 0x2c3f, To: 0x3caf}, + 130: {From: 0x2ce1, To: 0x2201}, + 131: {From: 0x2cfc, To: 0x3be}, + 132: {From: 0x2d13, To: 0x597}, + 133: {From: 0x2d47, To: 0x148}, + 134: {From: 0x2d48, To: 0x148}, + 135: {From: 0x2dff, To: 0x2f1}, + 136: {From: 0x2e08, To: 0x19cc}, + 137: {From: 0x2e10, To: 0xc45}, + 138: {From: 0x2e1a, To: 0x2d95}, + 139: {From: 0x2e21, To: 0x292}, + 140: {From: 0x2e54, To: 0x7d}, + 141: {From: 0x2e65, To: 0x2282}, + 142: {From: 0x2e97, To: 0x1a4}, + 143: {From: 0x2ea0, To: 0x2e9b}, + 144: {From: 0x2eef, To: 0x2ed7}, + 145: {From: 0x3193, To: 0x3c4}, + 146: {From: 0x3366, To: 0x338e}, + 147: {From: 0x342a, To: 0x3dc}, + 148: {From: 0x34ee, To: 0x18d0}, + 149: {From: 0x35c8, To: 0x2c9b}, + 150: {From: 0x35e6, To: 0x412}, + 151: {From: 0x35f5, To: 0x24b}, + 152: {From: 0x360d, To: 0x1dc}, + 153: {From: 0x3658, To: 0x246}, + 154: {From: 0x3676, To: 0x3f4}, + 155: {From: 0x36fd, To: 0x445}, + 156: {From: 0x3747, To: 0x3b42}, + 157: {From: 0x37c0, To: 0x121}, + 158: {From: 0x3816, To: 0x38f2}, + 159: {From: 0x382a, To: 0x2b48}, + 160: {From: 0x382b, To: 0x2c9b}, + 161: {From: 0x382f, To: 0xa9}, + 162: {From: 0x3832, To: 0x3228}, + 163: {From: 0x386c, To: 0x39a6}, + 164: {From: 0x3892, To: 0x3fc0}, + 165: {From: 0x38a0, To: 0x45f}, + 166: {From: 0x38a5, To: 0x39d7}, + 167: {From: 0x38b4, To: 0x1fa4}, + 168: {From: 0x38b5, To: 0x2e9a}, + 169: {From: 0x38fa, To: 0x38f1}, + 170: {From: 0x395c, To: 0x47e}, + 171: {From: 0x3b4e, To: 0xd91}, + 172: {From: 0x3b78, To: 0x137}, + 173: {From: 0x3c99, To: 0x4bc}, + 174: {From: 0x3fbd, To: 0x100}, + 175: {From: 0x4208, To: 0xa91}, + 176: {From: 0x42be, To: 0x573}, + 177: {From: 0x42f9, To: 0x3f60}, + 178: {From: 0x4378, To: 0x25a}, + 179: {From: 0x43b8, To: 0xe6c}, + 180: {From: 0x43cd, To: 0x10f}, + 181: {From: 0x43d4, To: 0x4848}, + 182: {From: 0x44af, To: 0x3322}, + 183: {From: 0x44e3, To: 0x512}, + 184: {From: 0x45ca, To: 0x2409}, + 185: {From: 0x45dd, To: 0x26dc}, + 186: {From: 0x4610, To: 0x48ae}, + 187: {From: 0x46ae, To: 0x46a0}, + 188: {From: 0x473e, To: 0x4745}, + 189: {From: 0x4817, To: 0x3503}, + 190: {From: 0x483b, To: 0x208b}, + 191: {From: 0x4916, To: 0x31f}, + 192: {From: 0x49a7, To: 0x523}, } -// Size: 179 bytes, 179 elements -var AliasTypes = [179]AliasType{ +// Size: 193 bytes, 193 elements +var AliasTypes = [193]AliasType{ // Entry 0 - 3F - 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 1, 2, - 1, 1, 2, 0, 0, 1, 0, 1, 2, 1, 1, 0, 0, 0, 0, 2, - 1, 1, 0, 2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 1, 1, - 1, 0, 0, 0, 0, 2, 1, 1, 1, 1, 2, 1, 0, 1, 1, 2, + 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 0, 0, + 1, 2, 1, 1, 2, 0, 0, 1, 0, 1, 2, 1, 1, 0, 0, 0, + 0, 2, 1, 1, 0, 2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, + 1, 1, 1, 0, 0, 0, 0, 2, 1, 1, 1, 1, 2, 1, 0, 1, // Entry 40 - 7F - 2, 0, 0, 1, 2, 0, 1, 0, 1, 1, 1, 1, 0, 0, 2, 1, - 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 2, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, + 1, 2, 2, 0, 0, 1, 2, 0, 1, 0, 1, 1, 1, 1, 0, 0, + 2, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 2, 0, + 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, // Entry 80 - BF - 2, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 0, 2, - 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 1, 2, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, + 1, 0, 0, 1, 0, 2, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 1, 1, 2, 0, 0, 2, 0, 0, 1, 1, 1, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 2, 0, + 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, + // Entry C0 - FF + 1, } const ( - _Latn = 90 + _Latn = 91 _Hani = 57 _Hans = 59 _Hant = 60 - _Qaaa = 147 - _Qaai = 155 - _Qabx = 196 - _Zinh = 252 - _Zyyy = 257 - _Zzzz = 258 + _Qaaa = 149 + _Qaai = 157 + _Qabx = 198 + _Zinh = 255 + _Zyyy = 260 + _Zzzz = 261 ) // script is an alphabetically sorted list of ISO 15924 codes. The index // of the script in the string, divided by 4, is the internal scriptID. -const script tag.Index = "" + // Size: 1040 bytes +const script tag.Index = "" + // Size: 1052 bytes "----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" + "BrahBraiBugiBuhdCakmCansCariChamCherChrsCirtCoptCpmnCprtCyrlCyrsDevaDiak" + "DogrDsrtDuplEgydEgyhEgypElbaElymEthiGeokGeorGlagGongGonmGothGranGrekGujr" + "GuruHanbHangHaniHanoHansHantHatrHebrHiraHluwHmngHmnpHrktHungIndsItalJamo" + - "JavaJpanJurcKaliKanaKharKhmrKhojKitlKitsKndaKoreKpelKthiLanaLaooLatfLatg" + - "LatnLekeLepcLimbLinaLinbLisuLomaLyciLydiMahjMakaMandManiMarcMayaMedfMend" + - "MercMeroMlymModiMongMoonMrooMteiMultMymrNandNarbNbatNewaNkdbNkgbNkooNshu" + - "OgamOlckOrkhOryaOsgeOsmaOugrPalmPaucPcunPelmPermPhagPhliPhlpPhlvPhnxPiqd" + - "PlrdPrtiPsinQaaaQaabQaacQaadQaaeQaafQaagQaahQaaiQaajQaakQaalQaamQaanQaao" + - "QaapQaaqQaarQaasQaatQaauQaavQaawQaaxQaayQaazQabaQabbQabcQabdQabeQabfQabg" + - "QabhQabiQabjQabkQablQabmQabnQaboQabpQabqQabrQabsQabtQabuQabvQabwQabxRanj" + - "RjngRohgRoroRunrSamrSaraSarbSaurSgnwShawShrdShuiSiddSindSinhSogdSogoSora" + - "SoyoSundSyloSyrcSyreSyrjSyrnTagbTakrTaleTaluTamlTangTavtTeluTengTfngTglg" + - "ThaaThaiTibtTirhTnsaTotoUgarVaiiVispVithWaraWchoWoleXpeoXsuxYeziYiiiZanb" + - "ZinhZmthZsyeZsymZxxxZyyyZzzz\xff\xff\xff\xff" + "JavaJpanJurcKaliKanaKawiKharKhmrKhojKitlKitsKndaKoreKpelKthiLanaLaooLatf" + + "LatgLatnLekeLepcLimbLinaLinbLisuLomaLyciLydiMahjMakaMandManiMarcMayaMedf" + + "MendMercMeroMlymModiMongMoonMrooMteiMultMymrNagmNandNarbNbatNewaNkdbNkgb" + + "NkooNshuOgamOlckOrkhOryaOsgeOsmaOugrPalmPaucPcunPelmPermPhagPhliPhlpPhlv" + + "PhnxPiqdPlrdPrtiPsinQaaaQaabQaacQaadQaaeQaafQaagQaahQaaiQaajQaakQaalQaam" + + "QaanQaaoQaapQaaqQaarQaasQaatQaauQaavQaawQaaxQaayQaazQabaQabbQabcQabdQabe" + + "QabfQabgQabhQabiQabjQabkQablQabmQabnQaboQabpQabqQabrQabsQabtQabuQabvQabw" + + "QabxRanjRjngRohgRoroRunrSamrSaraSarbSaurSgnwShawShrdShuiSiddSindSinhSogd" + + "SogoSoraSoyoSundSunuSyloSyrcSyreSyrjSyrnTagbTakrTaleTaluTamlTangTavtTelu" + + "TengTfngTglgThaaThaiTibtTirhTnsaTotoUgarVaiiVispVithWaraWchoWoleXpeoXsux" + + "YeziYiiiZanbZinhZmthZsyeZsymZxxxZyyyZzzz\xff\xff\xff\xff" // suppressScript is an index from langID to the dominant script for that language, // if it exists. If a script is given, it should be suppressed from the language tag. @@ -824,7 +840,7 @@ var suppressScript = [1330]uint8{ // Entry 0 - 3F 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -833,7 +849,7 @@ var suppressScript = [1330]uint8{ // Entry 40 - 7F 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -846,53 +862,53 @@ var suppressScript = [1330]uint8{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry C0 - FF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 100 - 13F - 0x5a, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, + 0x5b, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xea, 0x00, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, + 0xed, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, - 0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x5a, 0x00, + 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x5b, 0x00, // Entry 140 - 17F - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, - 0x00, 0x5a, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x5a, 0x00, + 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, + 0x00, 0x5b, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 180 - 1BF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x5a, 0x35, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5b, 0x35, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x22, 0x00, // Entry 1C0 - 1FF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x5a, 0x5a, 0x00, 0x5a, 0x5a, 0x00, 0x08, + 0x00, 0x5b, 0x5b, 0x00, 0x5b, 0x5b, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, - 0x5a, 0x5a, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, + 0x5b, 0x5b, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, // Entry 200 - 23F 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -903,9 +919,9 @@ var suppressScript = [1330]uint8{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 240 - 27F - 0x00, 0x00, 0x20, 0x00, 0x00, 0x5a, 0x00, 0x00, - 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x22, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x5b, 0x00, 0x00, + 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -913,93 +929,93 @@ var suppressScript = [1330]uint8{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 280 - 2BF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 2C0 - 2FF - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, // Entry 300 - 33F - 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x5a, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x5b, + 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, + 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, // Entry 340 - 37F - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, - 0x5a, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, - 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x5a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x5a, 0x00, - 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, + 0x5b, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, + 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x5b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x5b, 0x00, + 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 380 - 3BF - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // Entry 3C0 - 3FF - 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, - 0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x00, 0x5a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, + 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 400 - 43F - 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, - 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, - 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, + 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, + 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, // Entry 440 - 47F - 0x00, 0x00, 0x00, 0x00, 0x5a, 0x5a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5b, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe6, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0x2c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, - 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, + 0x00, 0xe9, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x2c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, + 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, // Entry 480 - 4BF - 0x5a, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, - 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, + 0x5b, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, + 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 4C0 - 4FF - 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 500 - 53F 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1007,7 +1023,7 @@ var suppressScript = [1330]uint8{ 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, } @@ -1016,16 +1032,16 @@ const ( _419 = 31 _BR = 65 _CA = 73 - _ES = 110 - _GB = 123 - _MD = 188 - _PT = 238 - _UK = 306 - _US = 309 - _ZZ = 357 - _XA = 323 - _XC = 325 - _XK = 333 + _ES = 111 + _GB = 124 + _MD = 189 + _PT = 239 + _UK = 307 + _US = 310 + _ZZ = 358 + _XA = 324 + _XC = 326 + _XK = 334 ) // isoRegionOffset needs to be added to the index of regionISO to obtain the regionID @@ -1034,8 +1050,8 @@ const ( const isoRegionOffset = 32 // regionTypes defines the status of a region for various standards. -// Size: 358 bytes, 358 elements -var regionTypes = [358]uint8{ +// Size: 359 bytes, 359 elements +var regionTypes = [359]uint8{ // Entry 0 - 3F 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1048,45 +1064,45 @@ var regionTypes = [358]uint8{ // Entry 40 - 7F 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x04, - 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, - 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, - 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x04, 0x06, + 0x04, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x04, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x00, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, // Entry 80 - BF 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x00, 0x04, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x00, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, // Entry C0 - FF - 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, - 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x04, 0x06, - 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, - 0x06, 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x00, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x04, + 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x00, 0x06, 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, // Entry 100 - 13F - 0x05, 0x05, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, + 0x05, 0x05, 0x05, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x02, 0x06, 0x04, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x02, 0x06, 0x04, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, // Entry 140 - 17F - 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x06, 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x06, - 0x04, 0x06, 0x06, 0x04, 0x06, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, + 0x06, 0x04, 0x06, 0x06, 0x04, 0x06, 0x05, } // regionISO holds a list of alphabetically sorted 2-letter ISO region codes. @@ -1094,27 +1110,27 @@ var regionTypes = [358]uint8{ // - [A-Z}{2}: the first letter of the 2-letter code plus these two // letters form the 3-letter ISO code. // - 0, n: index into altRegionISO3. -const regionISO tag.Index = "" + // Size: 1308 bytes +const regionISO tag.Index = "" + // Size: 1312 bytes "AAAAACSCADNDAEREAFFGAGTGAIIAALLBAMRMANNTAOGOAQTAARRGASSMATUTAUUSAWBWAXLA" + "AZZEBAIHBBRBBDGDBEELBFFABGGRBHHRBIDIBJENBLLMBMMUBNRNBOOLBQESBRRABSHSBTTN" + "BUURBVVTBWWABYLRBZLZCAANCCCKCDODCFAFCGOGCHHECIIVCKOKCLHLCMMRCNHNCOOLCPPT" + - "CRRICS\x00\x00CTTECUUBCVPVCWUWCXXRCYYPCZZEDDDRDEEUDGGADJJIDKNKDMMADOOMDY" + - "HYDZZAEA ECCUEESTEGGYEHSHERRIESSPETTHEU\x00\x03EZ FIINFJJIFKLKFMSMFORO" + - "FQ\x00\x18FRRAFXXXGAABGBBRGDRDGEEOGFUFGGGYGHHAGIIBGLRLGMMBGNINGPLPGQNQGR" + - "RCGS\x00\x06GTTMGUUMGWNBGYUYHKKGHMMDHNNDHRRVHTTIHUUNHVVOIC IDDNIERLILSR" + - "IMMNINNDIOOTIQRQIRRNISSLITTAJEEYJMAMJOORJPPNJTTNKEENKGGZKHHMKIIRKM\x00" + - "\x09KNNAKP\x00\x0cKRORKWWTKY\x00\x0fKZAZLAAOLBBNLCCALIIELKKALRBRLSSOLTTU" + - "LUUXLVVALYBYMAARMCCOMDDAMENEMFAFMGDGMHHLMIIDMKKDMLLIMMMRMNNGMOACMPNPMQTQ" + - "MRRTMSSRMTLTMUUSMVDVMWWIMXEXMYYSMZOZNAAMNCCLNEERNFFKNGGANHHBNIICNLLDNOOR" + - "NPPLNQ\x00\x1eNRRUNTTZNUIUNZZLOMMNPAANPCCIPEERPFYFPGNGPHHLPKAKPLOLPM\x00" + - "\x12PNCNPRRIPSSEPTRTPUUSPWLWPYRYPZCZQAATQMMMQNNNQOOOQPPPQQQQQRRRQSSSQTTT" + - "QU\x00\x03QVVVQWWWQXXXQYYYQZZZREEURHHOROOURS\x00\x15RUUSRWWASAAUSBLBSCYC" + - "SDDNSEWESGGPSHHNSIVNSJJMSKVKSLLESMMRSNENSOOMSRURSSSDSTTPSUUNSVLVSXXMSYYR" + - "SZWZTAAATCCATDCDTF\x00\x18TGGOTHHATJJKTKKLTLLSTMKMTNUNTOONTPMPTRURTTTOTV" + - "UVTWWNTZZAUAKRUGGAUK UMMIUN USSAUYRYUZZBVAATVCCTVDDRVEENVGGBVIIRVNNMVU" + - "UTWFLFWKAKWSSMXAAAXBBBXCCCXDDDXEEEXFFFXGGGXHHHXIIIXJJJXKKKXLLLXMMMXNNNXO" + - "OOXPPPXQQQXRRRXSSSXTTTXUUUXVVVXWWWXXXXXYYYXZZZYDMDYEEMYT\x00\x1bYUUGZAAF" + - "ZMMBZRARZWWEZZZZ\xff\xff\xff\xff" + "CQ CRRICS\x00\x00CTTECUUBCVPVCWUWCXXRCYYPCZZEDDDRDEEUDGGADJJIDKNKDMMADO" + + "OMDYHYDZZAEA ECCUEESTEGGYEHSHERRIESSPETTHEU\x00\x03EZ FIINFJJIFKLKFMSM" + + "FOROFQ\x00\x18FRRAFXXXGAABGBBRGDRDGEEOGFUFGGGYGHHAGIIBGLRLGMMBGNINGPLPGQ" + + "NQGRRCGS\x00\x06GTTMGUUMGWNBGYUYHKKGHMMDHNNDHRRVHTTIHUUNHVVOIC IDDNIERL" + + "ILSRIMMNINNDIOOTIQRQIRRNISSLITTAJEEYJMAMJOORJPPNJTTNKEENKGGZKHHMKIIRKM" + + "\x00\x09KNNAKP\x00\x0cKRORKWWTKY\x00\x0fKZAZLAAOLBBNLCCALIIELKKALRBRLSSO" + + "LTTULUUXLVVALYBYMAARMCCOMDDAMENEMFAFMGDGMHHLMIIDMKKDMLLIMMMRMNNGMOACMPNP" + + "MQTQMRRTMSSRMTLTMUUSMVDVMWWIMXEXMYYSMZOZNAAMNCCLNEERNFFKNGGANHHBNIICNLLD" + + "NOORNPPLNQ\x00\x1eNRRUNTTZNUIUNZZLOMMNPAANPCCIPEERPFYFPGNGPHHLPKAKPLOLPM" + + "\x00\x12PNCNPRRIPSSEPTRTPUUSPWLWPYRYPZCZQAATQMMMQNNNQOOOQPPPQQQQQRRRQSSS" + + "QTTTQU\x00\x03QVVVQWWWQXXXQYYYQZZZREEURHHOROOURS\x00\x15RUUSRWWASAAUSBLB" + + "SCYCSDDNSEWESGGPSHHNSIVNSJJMSKVKSLLESMMRSNENSOOMSRURSSSDSTTPSUUNSVLVSXXM" + + "SYYRSZWZTAAATCCATDCDTF\x00\x18TGGOTHHATJJKTKKLTLLSTMKMTNUNTOONTPMPTRURTT" + + "TOTVUVTWWNTZZAUAKRUGGAUK UMMIUN USSAUYRYUZZBVAATVCCTVDDRVEENVGGBVIIRVN" + + "NMVUUTWFLFWKAKWSSMXAAAXBBBXCCCXDDDXEEEXFFFXGGGXHHHXIIIXJJJXKKKXLLLXMMMXN" + + "NNXOOOXPPPXQQQXRRRXSSSXTTTXUUUXVVVXWWWXXXXXYYYXZZZYDMDYEEMYT\x00\x1bYUUG" + + "ZAAFZMMBZRARZWWEZZZZ\xff\xff\xff\xff" // altRegionISO3 holds a list of 3-letter region codes that cannot be // mapped to 2-letter codes using the default algorithm. This is a short list. @@ -1124,38 +1140,38 @@ const altRegionISO3 string = "SCGQUUSGSCOMPRKCYMSPMSRBATFMYTATN" // of the 3-letter ISO codes in altRegionISO3. // Size: 22 bytes, 11 elements var altRegionIDs = [11]uint16{ - 0x0057, 0x0070, 0x0088, 0x00a8, 0x00aa, 0x00ad, 0x00ea, 0x0105, - 0x0121, 0x015f, 0x00dc, + 0x0058, 0x0071, 0x0089, 0x00a9, 0x00ab, 0x00ae, 0x00eb, 0x0106, + 0x0122, 0x0160, 0x00dd, } // Size: 80 bytes, 20 elements var regionOldMap = [20]FromTo{ - 0: {From: 0x44, To: 0xc4}, - 1: {From: 0x58, To: 0xa7}, - 2: {From: 0x5f, To: 0x60}, - 3: {From: 0x66, To: 0x3b}, - 4: {From: 0x79, To: 0x78}, - 5: {From: 0x93, To: 0x37}, - 6: {From: 0xa3, To: 0x133}, - 7: {From: 0xc1, To: 0x133}, - 8: {From: 0xd7, To: 0x13f}, - 9: {From: 0xdc, To: 0x2b}, - 10: {From: 0xef, To: 0x133}, - 11: {From: 0xf2, To: 0xe2}, - 12: {From: 0xfc, To: 0x70}, - 13: {From: 0x103, To: 0x164}, - 14: {From: 0x12a, To: 0x126}, - 15: {From: 0x132, To: 0x7b}, - 16: {From: 0x13a, To: 0x13e}, - 17: {From: 0x141, To: 0x133}, - 18: {From: 0x15d, To: 0x15e}, - 19: {From: 0x163, To: 0x4b}, + 0: {From: 0x44, To: 0xc5}, + 1: {From: 0x59, To: 0xa8}, + 2: {From: 0x60, To: 0x61}, + 3: {From: 0x67, To: 0x3b}, + 4: {From: 0x7a, To: 0x79}, + 5: {From: 0x94, To: 0x37}, + 6: {From: 0xa4, To: 0x134}, + 7: {From: 0xc2, To: 0x134}, + 8: {From: 0xd8, To: 0x140}, + 9: {From: 0xdd, To: 0x2b}, + 10: {From: 0xf0, To: 0x134}, + 11: {From: 0xf3, To: 0xe3}, + 12: {From: 0xfd, To: 0x71}, + 13: {From: 0x104, To: 0x165}, + 14: {From: 0x12b, To: 0x127}, + 15: {From: 0x133, To: 0x7c}, + 16: {From: 0x13b, To: 0x13f}, + 17: {From: 0x142, To: 0x134}, + 18: {From: 0x15e, To: 0x15f}, + 19: {From: 0x164, To: 0x4b}, } // m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are // codes indicating collections of regions. -// Size: 716 bytes, 358 elements -var m49 = [358]int16{ +// Size: 718 bytes, 359 elements +var m49 = [359]int16{ // Entry 0 - 3F 0, 1, 2, 3, 5, 9, 11, 13, 14, 15, 17, 18, 19, 21, 29, 30, @@ -1168,45 +1184,45 @@ var m49 = [358]int16{ // Entry 40 - 7F 535, 76, 44, 64, 104, 74, 72, 112, 84, 124, 166, 180, 140, 178, 756, 384, - 184, 152, 120, 156, 170, 0, 188, 891, - 296, 192, 132, 531, 162, 196, 203, 278, - 276, 0, 262, 208, 212, 214, 204, 12, - 0, 218, 233, 818, 732, 232, 724, 231, - 967, 0, 246, 242, 238, 583, 234, 0, - 250, 249, 266, 826, 308, 268, 254, 831, + 184, 152, 120, 156, 170, 0, 0, 188, + 891, 296, 192, 132, 531, 162, 196, 203, + 278, 276, 0, 262, 208, 212, 214, 204, + 12, 0, 218, 233, 818, 732, 232, 724, + 231, 967, 0, 246, 242, 238, 583, 234, + 0, 250, 249, 266, 826, 308, 268, 254, // Entry 80 - BF - 288, 292, 304, 270, 324, 312, 226, 300, - 239, 320, 316, 624, 328, 344, 334, 340, - 191, 332, 348, 854, 0, 360, 372, 376, - 833, 356, 86, 368, 364, 352, 380, 832, - 388, 400, 392, 581, 404, 417, 116, 296, - 174, 659, 408, 410, 414, 136, 398, 418, - 422, 662, 438, 144, 430, 426, 440, 442, - 428, 434, 504, 492, 498, 499, 663, 450, + 831, 288, 292, 304, 270, 324, 312, 226, + 300, 239, 320, 316, 624, 328, 344, 334, + 340, 191, 332, 348, 854, 0, 360, 372, + 376, 833, 356, 86, 368, 364, 352, 380, + 832, 388, 400, 392, 581, 404, 417, 116, + 296, 174, 659, 408, 410, 414, 136, 398, + 418, 422, 662, 438, 144, 430, 426, 440, + 442, 428, 434, 504, 492, 498, 499, 663, // Entry C0 - FF - 584, 581, 807, 466, 104, 496, 446, 580, - 474, 478, 500, 470, 480, 462, 454, 484, - 458, 508, 516, 540, 562, 574, 566, 548, - 558, 528, 578, 524, 10, 520, 536, 570, - 554, 512, 591, 0, 604, 258, 598, 608, - 586, 616, 666, 612, 630, 275, 620, 581, - 585, 600, 591, 634, 959, 960, 961, 962, - 963, 964, 965, 966, 967, 968, 969, 970, + 450, 584, 581, 807, 466, 104, 496, 446, + 580, 474, 478, 500, 470, 480, 462, 454, + 484, 458, 508, 516, 540, 562, 574, 566, + 548, 558, 528, 578, 524, 10, 520, 536, + 570, 554, 512, 591, 0, 604, 258, 598, + 608, 586, 616, 666, 612, 630, 275, 620, + 581, 585, 600, 591, 634, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, // Entry 100 - 13F - 971, 972, 638, 716, 642, 688, 643, 646, - 682, 90, 690, 729, 752, 702, 654, 705, - 744, 703, 694, 674, 686, 706, 740, 728, - 678, 810, 222, 534, 760, 748, 0, 796, - 148, 260, 768, 764, 762, 772, 626, 795, - 788, 776, 626, 792, 780, 798, 158, 834, - 804, 800, 826, 581, 0, 840, 858, 860, - 336, 670, 704, 862, 92, 850, 704, 548, + 970, 971, 972, 638, 716, 642, 688, 643, + 646, 682, 90, 690, 729, 752, 702, 654, + 705, 744, 703, 694, 674, 686, 706, 740, + 728, 678, 810, 222, 534, 760, 748, 0, + 796, 148, 260, 768, 764, 762, 772, 626, + 795, 788, 776, 626, 792, 780, 798, 158, + 834, 804, 800, 826, 581, 0, 840, 858, + 860, 336, 670, 704, 862, 92, 850, 704, // Entry 140 - 17F - 876, 581, 882, 973, 974, 975, 976, 977, - 978, 979, 980, 981, 982, 983, 984, 985, - 986, 987, 988, 989, 990, 991, 992, 993, - 994, 995, 996, 997, 998, 720, 887, 175, - 891, 710, 894, 180, 716, 999, + 548, 876, 581, 882, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, + 985, 986, 987, 988, 989, 990, 991, 992, + 993, 994, 995, 996, 997, 998, 720, 887, + 175, 891, 710, 894, 180, 716, 999, } // m49Index gives indexes into fromM49 based on the three most significant bits @@ -1227,65 +1243,65 @@ var m49Index = [9]int16{ var fromM49 = [333]uint16{ // Entry 0 - 3F 0x0201, 0x0402, 0x0603, 0x0824, 0x0a04, 0x1027, 0x1205, 0x142b, - 0x1606, 0x1867, 0x1a07, 0x1c08, 0x1e09, 0x202d, 0x220a, 0x240b, + 0x1606, 0x1868, 0x1a07, 0x1c08, 0x1e09, 0x202d, 0x220a, 0x240b, 0x260c, 0x2822, 0x2a0d, 0x302a, 0x3825, 0x3a0e, 0x3c0f, 0x3e32, 0x402c, 0x4410, 0x4611, 0x482f, 0x4e12, 0x502e, 0x5842, 0x6039, 0x6435, 0x6628, 0x6834, 0x6a13, 0x6c14, 0x7036, 0x7215, 0x783d, 0x7a16, 0x8043, 0x883f, 0x8c33, 0x9046, 0x9445, 0x9841, 0xa848, - 0xac9a, 0xb509, 0xb93c, 0xc03e, 0xc838, 0xd0c4, 0xd83a, 0xe047, - 0xe8a6, 0xf052, 0xf849, 0x085a, 0x10ad, 0x184c, 0x1c17, 0x1e18, + 0xac9b, 0xb50a, 0xb93d, 0xc03e, 0xc838, 0xd0c5, 0xd83a, 0xe047, + 0xe8a7, 0xf052, 0xf849, 0x085b, 0x10ae, 0x184c, 0x1c17, 0x1e18, // Entry 40 - 7F - 0x20b3, 0x2219, 0x2920, 0x2c1a, 0x2e1b, 0x3051, 0x341c, 0x361d, - 0x3853, 0x3d2e, 0x445c, 0x4c4a, 0x5454, 0x5ca8, 0x5f5f, 0x644d, - 0x684b, 0x7050, 0x7856, 0x7e90, 0x8059, 0x885d, 0x941e, 0x965e, - 0x983b, 0xa063, 0xa864, 0xac65, 0xb469, 0xbd1a, 0xc486, 0xcc6f, - 0xce6f, 0xd06d, 0xd26a, 0xd476, 0xdc74, 0xde88, 0xe473, 0xec72, - 0xf031, 0xf279, 0xf478, 0xfc7e, 0x04e5, 0x0921, 0x0c62, 0x147a, - 0x187d, 0x1c83, 0x26ed, 0x2860, 0x2c5f, 0x3060, 0x4080, 0x4881, - 0x50a7, 0x5887, 0x6082, 0x687c, 0x7085, 0x788a, 0x8089, 0x8884, + 0x20b4, 0x2219, 0x2921, 0x2c1a, 0x2e1b, 0x3051, 0x341c, 0x361d, + 0x3853, 0x3d2f, 0x445d, 0x4c4a, 0x5454, 0x5ca9, 0x5f60, 0x644d, + 0x684b, 0x7050, 0x7857, 0x7e91, 0x805a, 0x885e, 0x941e, 0x965f, + 0x983b, 0xa064, 0xa865, 0xac66, 0xb46a, 0xbd1b, 0xc487, 0xcc70, + 0xce70, 0xd06e, 0xd26b, 0xd477, 0xdc75, 0xde89, 0xe474, 0xec73, + 0xf031, 0xf27a, 0xf479, 0xfc7f, 0x04e6, 0x0922, 0x0c63, 0x147b, + 0x187e, 0x1c84, 0x26ee, 0x2861, 0x2c60, 0x3061, 0x4081, 0x4882, + 0x50a8, 0x5888, 0x6083, 0x687d, 0x7086, 0x788b, 0x808a, 0x8885, // Entry 80 - BF - 0x908c, 0x9891, 0x9c8e, 0xa138, 0xa88f, 0xb08d, 0xb892, 0xc09d, - 0xc899, 0xd095, 0xd89c, 0xe09b, 0xe896, 0xf097, 0xf89e, 0x004f, - 0x08a0, 0x10a2, 0x1cae, 0x20a1, 0x28a4, 0x30aa, 0x34ab, 0x3cac, - 0x42a5, 0x44af, 0x461f, 0x4cb0, 0x54b5, 0x58b8, 0x5cb4, 0x64b9, - 0x6cb2, 0x70b6, 0x74b7, 0x7cc6, 0x84bf, 0x8cce, 0x94d0, 0x9ccd, - 0xa4c3, 0xaccb, 0xb4c8, 0xbcc9, 0xc0cc, 0xc8cf, 0xd8bb, 0xe0c5, - 0xe4bc, 0xe6bd, 0xe8ca, 0xf0ba, 0xf8d1, 0x00e1, 0x08d2, 0x10dd, - 0x18db, 0x20d9, 0x2429, 0x265b, 0x2a30, 0x2d1b, 0x2e40, 0x30de, + 0x908d, 0x9892, 0x9c8f, 0xa139, 0xa890, 0xb08e, 0xb893, 0xc09e, + 0xc89a, 0xd096, 0xd89d, 0xe09c, 0xe897, 0xf098, 0xf89f, 0x004f, + 0x08a1, 0x10a3, 0x1caf, 0x20a2, 0x28a5, 0x30ab, 0x34ac, 0x3cad, + 0x42a6, 0x44b0, 0x461f, 0x4cb1, 0x54b6, 0x58b9, 0x5cb5, 0x64ba, + 0x6cb3, 0x70b7, 0x74b8, 0x7cc7, 0x84c0, 0x8ccf, 0x94d1, 0x9cce, + 0xa4c4, 0xaccc, 0xb4c9, 0xbcca, 0xc0cd, 0xc8d0, 0xd8bc, 0xe0c6, + 0xe4bd, 0xe6be, 0xe8cb, 0xf0bb, 0xf8d2, 0x00e2, 0x08d3, 0x10de, + 0x18dc, 0x20da, 0x2429, 0x265c, 0x2a30, 0x2d1c, 0x2e40, 0x30df, // Entry C0 - FF - 0x38d3, 0x493f, 0x54e0, 0x5cd8, 0x64d4, 0x6cd6, 0x74df, 0x7cd5, - 0x84da, 0x88c7, 0x8b33, 0x8e75, 0x90c0, 0x92f0, 0x94e8, 0x9ee2, - 0xace6, 0xb0f1, 0xb8e4, 0xc0e7, 0xc8eb, 0xd0e9, 0xd8ee, 0xe08b, - 0xe526, 0xecec, 0xf4f3, 0xfd02, 0x0504, 0x0706, 0x0d07, 0x183c, - 0x1d0e, 0x26a9, 0x2826, 0x2cb1, 0x2ebe, 0x34ea, 0x3d39, 0x4513, - 0x4d18, 0x5508, 0x5d14, 0x6105, 0x650a, 0x6d12, 0x7d0d, 0x7f11, - 0x813e, 0x830f, 0x8515, 0x8d61, 0x9964, 0xa15d, 0xa86e, 0xb117, - 0xb30b, 0xb86c, 0xc10b, 0xc916, 0xd110, 0xd91d, 0xe10c, 0xe84e, + 0x38d4, 0x4940, 0x54e1, 0x5cd9, 0x64d5, 0x6cd7, 0x74e0, 0x7cd6, + 0x84db, 0x88c8, 0x8b34, 0x8e76, 0x90c1, 0x92f1, 0x94e9, 0x9ee3, + 0xace7, 0xb0f2, 0xb8e5, 0xc0e8, 0xc8ec, 0xd0ea, 0xd8ef, 0xe08c, + 0xe527, 0xeced, 0xf4f4, 0xfd03, 0x0505, 0x0707, 0x0d08, 0x183c, + 0x1d0f, 0x26aa, 0x2826, 0x2cb2, 0x2ebf, 0x34eb, 0x3d3a, 0x4514, + 0x4d19, 0x5509, 0x5d15, 0x6106, 0x650b, 0x6d13, 0x7d0e, 0x7f12, + 0x813f, 0x8310, 0x8516, 0x8d62, 0x9965, 0xa15e, 0xa86f, 0xb118, + 0xb30c, 0xb86d, 0xc10c, 0xc917, 0xd111, 0xd91e, 0xe10d, 0xe84e, // Entry 100 - 13F - 0xf11c, 0xf524, 0xf923, 0x0122, 0x0925, 0x1129, 0x192c, 0x2023, - 0x2928, 0x312b, 0x3727, 0x391f, 0x3d2d, 0x4131, 0x4930, 0x4ec2, - 0x5519, 0x646b, 0x747b, 0x7e7f, 0x809f, 0x8298, 0x852f, 0x9135, - 0xa53d, 0xac37, 0xb536, 0xb937, 0xbd3b, 0xd940, 0xe542, 0xed5e, - 0xef5e, 0xf657, 0xfd62, 0x7c20, 0x7ef4, 0x80f5, 0x82f6, 0x84f7, - 0x86f8, 0x88f9, 0x8afa, 0x8cfb, 0x8e70, 0x90fd, 0x92fe, 0x94ff, - 0x9700, 0x9901, 0x9b43, 0x9d44, 0x9f45, 0xa146, 0xa347, 0xa548, - 0xa749, 0xa94a, 0xab4b, 0xad4c, 0xaf4d, 0xb14e, 0xb34f, 0xb550, + 0xf11d, 0xf525, 0xf924, 0x0123, 0x0926, 0x112a, 0x192d, 0x2023, + 0x2929, 0x312c, 0x3728, 0x3920, 0x3d2e, 0x4132, 0x4931, 0x4ec3, + 0x551a, 0x646c, 0x747c, 0x7e80, 0x80a0, 0x8299, 0x8530, 0x9136, + 0xa53e, 0xac37, 0xb537, 0xb938, 0xbd3c, 0xd941, 0xe543, 0xed5f, + 0xef5f, 0xf658, 0xfd63, 0x7c20, 0x7ef5, 0x80f6, 0x82f7, 0x84f8, + 0x86f9, 0x88fa, 0x8afb, 0x8cfc, 0x8e71, 0x90fe, 0x92ff, 0x9500, + 0x9701, 0x9902, 0x9b44, 0x9d45, 0x9f46, 0xa147, 0xa348, 0xa549, + 0xa74a, 0xa94b, 0xab4c, 0xad4d, 0xaf4e, 0xb14f, 0xb350, 0xb551, // Entry 140 - 17F - 0xb751, 0xb952, 0xbb53, 0xbd54, 0xbf55, 0xc156, 0xc357, 0xc558, - 0xc759, 0xc95a, 0xcb5b, 0xcd5c, 0xcf65, + 0xb752, 0xb953, 0xbb54, 0xbd55, 0xbf56, 0xc157, 0xc358, 0xc559, + 0xc75a, 0xc95b, 0xcb5c, 0xcd5d, 0xcf66, } -// Size: 2014 bytes +// Size: 2128 bytes var variantIndex = map[string]uint8{ "1606nict": 0x0, "1694acad": 0x1, "1901": 0x2, "1959acad": 0x3, - "1994": 0x61, + "1994": 0x67, "1996": 0x4, "abl1943": 0x5, "akuapem": 0x6, - "alalc97": 0x63, + "alalc97": 0x69, "aluku": 0x7, "ao1990": 0x8, "aranes": 0x9, @@ -1299,94 +1315,100 @@ var variantIndex = map[string]uint8{ "barla": 0x11, "basiceng": 0x12, "bauddha": 0x13, - "biscayan": 0x14, - "biske": 0x5c, - "bohoric": 0x15, - "boont": 0x16, - "bornholm": 0x17, - "cisaup": 0x18, - "colb1945": 0x19, - "cornu": 0x1a, - "creiss": 0x1b, - "dajnko": 0x1c, - "ekavsk": 0x1d, - "emodeng": 0x1e, - "fonipa": 0x64, - "fonkirsh": 0x65, - "fonnapa": 0x66, - "fonupa": 0x67, - "fonxsamp": 0x68, - "gascon": 0x1f, - "grclass": 0x20, - "grital": 0x21, - "grmistr": 0x22, - "hepburn": 0x23, - "heploc": 0x62, - "hognorsk": 0x24, - "hsistemo": 0x25, - "ijekavsk": 0x26, - "itihasa": 0x27, - "ivanchov": 0x28, - "jauer": 0x29, - "jyutping": 0x2a, - "kkcor": 0x2b, - "kociewie": 0x2c, - "kscor": 0x2d, - "laukika": 0x2e, - "lemosin": 0x2f, - "lengadoc": 0x30, - "lipaw": 0x5d, - "luna1918": 0x31, - "metelko": 0x32, - "monoton": 0x33, - "ndyuka": 0x34, - "nedis": 0x35, - "newfound": 0x36, - "nicard": 0x37, - "njiva": 0x5e, - "nulik": 0x38, - "osojs": 0x5f, - "oxendict": 0x39, - "pahawh2": 0x3a, - "pahawh3": 0x3b, - "pahawh4": 0x3c, - "pamaka": 0x3d, - "peano": 0x3e, - "petr1708": 0x3f, - "pinyin": 0x40, - "polyton": 0x41, - "provenc": 0x42, - "puter": 0x43, - "rigik": 0x44, - "rozaj": 0x45, - "rumgr": 0x46, - "scotland": 0x47, - "scouse": 0x48, - "simple": 0x69, - "solba": 0x60, - "sotav": 0x49, - "spanglis": 0x4a, - "surmiran": 0x4b, - "sursilv": 0x4c, - "sutsilv": 0x4d, - "tarask": 0x4e, - "tongyong": 0x4f, - "tunumiit": 0x50, - "uccor": 0x51, - "ucrcor": 0x52, - "ulster": 0x53, - "unifon": 0x54, - "vaidika": 0x55, - "valencia": 0x56, - "vallader": 0x57, - "vecdruka": 0x58, - "vivaraup": 0x59, - "wadegile": 0x5a, - "xsistemo": 0x5b, + "bciav": 0x14, + "bcizbl": 0x15, + "biscayan": 0x16, + "biske": 0x62, + "bohoric": 0x17, + "boont": 0x18, + "bornholm": 0x19, + "cisaup": 0x1a, + "colb1945": 0x1b, + "cornu": 0x1c, + "creiss": 0x1d, + "dajnko": 0x1e, + "ekavsk": 0x1f, + "emodeng": 0x20, + "fonipa": 0x6a, + "fonkirsh": 0x6b, + "fonnapa": 0x6c, + "fonupa": 0x6d, + "fonxsamp": 0x6e, + "gallo": 0x21, + "gascon": 0x22, + "grclass": 0x23, + "grital": 0x24, + "grmistr": 0x25, + "hepburn": 0x26, + "heploc": 0x68, + "hognorsk": 0x27, + "hsistemo": 0x28, + "ijekavsk": 0x29, + "itihasa": 0x2a, + "ivanchov": 0x2b, + "jauer": 0x2c, + "jyutping": 0x2d, + "kkcor": 0x2e, + "kociewie": 0x2f, + "kscor": 0x30, + "laukika": 0x31, + "lemosin": 0x32, + "lengadoc": 0x33, + "lipaw": 0x63, + "ltg1929": 0x34, + "ltg2007": 0x35, + "luna1918": 0x36, + "metelko": 0x37, + "monoton": 0x38, + "ndyuka": 0x39, + "nedis": 0x3a, + "newfound": 0x3b, + "nicard": 0x3c, + "njiva": 0x64, + "nulik": 0x3d, + "osojs": 0x65, + "oxendict": 0x3e, + "pahawh2": 0x3f, + "pahawh3": 0x40, + "pahawh4": 0x41, + "pamaka": 0x42, + "peano": 0x43, + "petr1708": 0x44, + "pinyin": 0x45, + "polyton": 0x46, + "provenc": 0x47, + "puter": 0x48, + "rigik": 0x49, + "rozaj": 0x4a, + "rumgr": 0x4b, + "scotland": 0x4c, + "scouse": 0x4d, + "simple": 0x6f, + "solba": 0x66, + "sotav": 0x4e, + "spanglis": 0x4f, + "surmiran": 0x50, + "sursilv": 0x51, + "sutsilv": 0x52, + "synnejyl": 0x53, + "tarask": 0x54, + "tongyong": 0x55, + "tunumiit": 0x56, + "uccor": 0x57, + "ucrcor": 0x58, + "ulster": 0x59, + "unifon": 0x5a, + "vaidika": 0x5b, + "valencia": 0x5c, + "vallader": 0x5d, + "vecdruka": 0x5e, + "vivaraup": 0x5f, + "wadegile": 0x60, + "xsistemo": 0x61, } // variantNumSpecialized is the number of specialized variants in variants. -const variantNumSpecialized = 99 +const variantNumSpecialized = 105 // nRegionGroups is the number of region groups. const nRegionGroups = 33 @@ -1398,151 +1420,151 @@ type likelyLangRegion struct { // likelyScript is a lookup table, indexed by scriptID, for the most likely // languages and regions given a script. -// Size: 1040 bytes, 260 elements -var likelyScript = [260]likelyLangRegion{ - 1: {lang: 0x14e, region: 0x84}, - 3: {lang: 0x2a2, region: 0x106}, - 4: {lang: 0x1f, region: 0x99}, - 5: {lang: 0x3a, region: 0x6b}, - 7: {lang: 0x3b, region: 0x9c}, +// Size: 1052 bytes, 263 elements +var likelyScript = [263]likelyLangRegion{ + 1: {lang: 0x14e, region: 0x85}, + 3: {lang: 0x2a2, region: 0x107}, + 4: {lang: 0x1f, region: 0x9a}, + 5: {lang: 0x3a, region: 0x6c}, + 7: {lang: 0x3b, region: 0x9d}, 8: {lang: 0x1d7, region: 0x28}, - 9: {lang: 0x13, region: 0x9c}, - 10: {lang: 0x5b, region: 0x95}, + 9: {lang: 0x13, region: 0x9d}, + 10: {lang: 0x5b, region: 0x96}, 11: {lang: 0x60, region: 0x52}, - 12: {lang: 0xb9, region: 0xb4}, - 13: {lang: 0x63, region: 0x95}, + 12: {lang: 0xb9, region: 0xb5}, + 13: {lang: 0x63, region: 0x96}, 14: {lang: 0xa5, region: 0x35}, - 15: {lang: 0x3e9, region: 0x99}, - 17: {lang: 0x529, region: 0x12e}, - 18: {lang: 0x3b1, region: 0x99}, - 19: {lang: 0x15e, region: 0x78}, - 20: {lang: 0xc2, region: 0x95}, - 21: {lang: 0x9d, region: 0xe7}, + 15: {lang: 0x3e9, region: 0x9a}, + 17: {lang: 0x529, region: 0x12f}, + 18: {lang: 0x3b1, region: 0x9a}, + 19: {lang: 0x15e, region: 0x79}, + 20: {lang: 0xc2, region: 0x96}, + 21: {lang: 0x9d, region: 0xe8}, 22: {lang: 0xdb, region: 0x35}, 23: {lang: 0xf3, region: 0x49}, - 24: {lang: 0x4f0, region: 0x12b}, - 25: {lang: 0xe7, region: 0x13e}, - 26: {lang: 0xe5, region: 0x135}, - 29: {lang: 0xf1, region: 0x6b}, - 31: {lang: 0x1a0, region: 0x5d}, - 32: {lang: 0x3e2, region: 0x106}, - 34: {lang: 0x1be, region: 0x99}, - 38: {lang: 0x15e, region: 0x78}, - 41: {lang: 0x133, region: 0x6b}, + 24: {lang: 0x4f0, region: 0x12c}, + 25: {lang: 0xe7, region: 0x13f}, + 26: {lang: 0xe5, region: 0x136}, + 29: {lang: 0xf1, region: 0x6c}, + 31: {lang: 0x1a0, region: 0x5e}, + 32: {lang: 0x3e2, region: 0x107}, + 34: {lang: 0x1be, region: 0x9a}, + 38: {lang: 0x15e, region: 0x79}, + 41: {lang: 0x133, region: 0x6c}, 42: {lang: 0x431, region: 0x27}, - 44: {lang: 0x27, region: 0x6f}, - 46: {lang: 0x210, region: 0x7d}, + 44: {lang: 0x27, region: 0x70}, + 46: {lang: 0x210, region: 0x7e}, 47: {lang: 0xfe, region: 0x38}, - 49: {lang: 0x19b, region: 0x99}, - 50: {lang: 0x19e, region: 0x130}, - 51: {lang: 0x3e9, region: 0x99}, - 52: {lang: 0x136, region: 0x87}, - 53: {lang: 0x1a4, region: 0x99}, - 54: {lang: 0x39d, region: 0x99}, - 55: {lang: 0x529, region: 0x12e}, - 56: {lang: 0x254, region: 0xab}, + 49: {lang: 0x19b, region: 0x9a}, + 50: {lang: 0x19e, region: 0x131}, + 51: {lang: 0x3e9, region: 0x9a}, + 52: {lang: 0x136, region: 0x88}, + 53: {lang: 0x1a4, region: 0x9a}, + 54: {lang: 0x39d, region: 0x9a}, + 55: {lang: 0x529, region: 0x12f}, + 56: {lang: 0x254, region: 0xac}, 57: {lang: 0x529, region: 0x53}, - 58: {lang: 0x1cb, region: 0xe7}, + 58: {lang: 0x1cb, region: 0xe8}, 59: {lang: 0x529, region: 0x53}, - 60: {lang: 0x529, region: 0x12e}, - 61: {lang: 0x2fd, region: 0x9b}, - 62: {lang: 0x1bc, region: 0x97}, - 63: {lang: 0x200, region: 0xa2}, - 64: {lang: 0x1c5, region: 0x12b}, - 65: {lang: 0x1ca, region: 0xaf}, - 68: {lang: 0x1d5, region: 0x92}, - 70: {lang: 0x142, region: 0x9e}, - 71: {lang: 0x254, region: 0xab}, - 72: {lang: 0x20e, region: 0x95}, - 73: {lang: 0x200, region: 0xa2}, - 75: {lang: 0x135, region: 0xc4}, - 76: {lang: 0x200, region: 0xa2}, - 77: {lang: 0x3bb, region: 0xe8}, - 78: {lang: 0x24a, region: 0xa6}, - 79: {lang: 0x3fa, region: 0x99}, - 82: {lang: 0x251, region: 0x99}, - 83: {lang: 0x254, region: 0xab}, - 85: {lang: 0x88, region: 0x99}, - 86: {lang: 0x370, region: 0x123}, - 87: {lang: 0x2b8, region: 0xaf}, - 92: {lang: 0x29f, region: 0x99}, - 93: {lang: 0x2a8, region: 0x99}, - 94: {lang: 0x28f, region: 0x87}, - 95: {lang: 0x1a0, region: 0x87}, - 96: {lang: 0x2ac, region: 0x53}, - 98: {lang: 0x4f4, region: 0x12b}, - 99: {lang: 0x4f5, region: 0x12b}, - 100: {lang: 0x1be, region: 0x99}, - 102: {lang: 0x337, region: 0x9c}, - 103: {lang: 0x4f7, region: 0x53}, - 104: {lang: 0xa9, region: 0x53}, - 107: {lang: 0x2e8, region: 0x112}, - 108: {lang: 0x4f8, region: 0x10b}, - 109: {lang: 0x4f8, region: 0x10b}, - 110: {lang: 0x304, region: 0x99}, - 111: {lang: 0x31b, region: 0x99}, - 112: {lang: 0x30b, region: 0x53}, - 114: {lang: 0x31e, region: 0x35}, - 115: {lang: 0x30e, region: 0x99}, - 116: {lang: 0x414, region: 0xe8}, - 117: {lang: 0x331, region: 0xc4}, - 119: {lang: 0x4f9, region: 0x108}, - 120: {lang: 0x3b, region: 0xa1}, - 121: {lang: 0x353, region: 0xdb}, - 124: {lang: 0x2d0, region: 0x84}, - 125: {lang: 0x52a, region: 0x53}, - 126: {lang: 0x403, region: 0x96}, - 127: {lang: 0x3ee, region: 0x99}, - 128: {lang: 0x39b, region: 0xc5}, - 129: {lang: 0x395, region: 0x99}, - 130: {lang: 0x399, region: 0x135}, - 131: {lang: 0x429, region: 0x115}, - 133: {lang: 0x3b, region: 0x11c}, - 134: {lang: 0xfd, region: 0xc4}, - 137: {lang: 0x27d, region: 0x106}, - 138: {lang: 0x2c9, region: 0x53}, - 139: {lang: 0x39f, region: 0x9c}, - 140: {lang: 0x39f, region: 0x53}, - 142: {lang: 0x3ad, region: 0xb0}, - 144: {lang: 0x1c6, region: 0x53}, - 145: {lang: 0x4fd, region: 0x9c}, - 198: {lang: 0x3cb, region: 0x95}, - 201: {lang: 0x372, region: 0x10c}, - 202: {lang: 0x420, region: 0x97}, - 204: {lang: 0x4ff, region: 0x15e}, - 205: {lang: 0x3f0, region: 0x99}, - 206: {lang: 0x45, region: 0x135}, - 207: {lang: 0x139, region: 0x7b}, - 208: {lang: 0x3e9, region: 0x99}, - 210: {lang: 0x3e9, region: 0x99}, - 211: {lang: 0x3fa, region: 0x99}, - 212: {lang: 0x40c, region: 0xb3}, - 215: {lang: 0x433, region: 0x99}, - 216: {lang: 0xef, region: 0xc5}, - 217: {lang: 0x43e, region: 0x95}, - 218: {lang: 0x44d, region: 0x35}, - 219: {lang: 0x44e, region: 0x9b}, - 223: {lang: 0x45a, region: 0xe7}, - 224: {lang: 0x11a, region: 0x99}, - 225: {lang: 0x45e, region: 0x53}, - 226: {lang: 0x232, region: 0x53}, - 227: {lang: 0x450, region: 0x99}, - 228: {lang: 0x4a5, region: 0x53}, - 229: {lang: 0x9f, region: 0x13e}, - 230: {lang: 0x461, region: 0x99}, - 232: {lang: 0x528, region: 0xba}, - 233: {lang: 0x153, region: 0xe7}, - 234: {lang: 0x128, region: 0xcd}, - 235: {lang: 0x46b, region: 0x123}, - 236: {lang: 0xa9, region: 0x53}, - 237: {lang: 0x2ce, region: 0x99}, - 240: {lang: 0x4ad, region: 0x11c}, - 241: {lang: 0x4be, region: 0xb4}, - 244: {lang: 0x1ce, region: 0x99}, - 247: {lang: 0x3a9, region: 0x9c}, - 248: {lang: 0x22, region: 0x9b}, - 250: {lang: 0x1ea, region: 0x53}, - 251: {lang: 0xef, region: 0xc5}, + 60: {lang: 0x529, region: 0x12f}, + 61: {lang: 0x2fd, region: 0x9c}, + 62: {lang: 0x1bc, region: 0x98}, + 63: {lang: 0x200, region: 0xa3}, + 64: {lang: 0x1c5, region: 0x12c}, + 65: {lang: 0x1ca, region: 0xb0}, + 68: {lang: 0x1d5, region: 0x93}, + 70: {lang: 0x142, region: 0x9f}, + 71: {lang: 0x254, region: 0xac}, + 72: {lang: 0x20e, region: 0x96}, + 73: {lang: 0x200, region: 0xa3}, + 75: {lang: 0x135, region: 0xc5}, + 76: {lang: 0x200, region: 0xa3}, + 78: {lang: 0x3bb, region: 0xe9}, + 79: {lang: 0x24a, region: 0xa7}, + 80: {lang: 0x3fa, region: 0x9a}, + 83: {lang: 0x251, region: 0x9a}, + 84: {lang: 0x254, region: 0xac}, + 86: {lang: 0x88, region: 0x9a}, + 87: {lang: 0x370, region: 0x124}, + 88: {lang: 0x2b8, region: 0xb0}, + 93: {lang: 0x29f, region: 0x9a}, + 94: {lang: 0x2a8, region: 0x9a}, + 95: {lang: 0x28f, region: 0x88}, + 96: {lang: 0x1a0, region: 0x88}, + 97: {lang: 0x2ac, region: 0x53}, + 99: {lang: 0x4f4, region: 0x12c}, + 100: {lang: 0x4f5, region: 0x12c}, + 101: {lang: 0x1be, region: 0x9a}, + 103: {lang: 0x337, region: 0x9d}, + 104: {lang: 0x4f7, region: 0x53}, + 105: {lang: 0xa9, region: 0x53}, + 108: {lang: 0x2e8, region: 0x113}, + 109: {lang: 0x4f8, region: 0x10c}, + 110: {lang: 0x4f8, region: 0x10c}, + 111: {lang: 0x304, region: 0x9a}, + 112: {lang: 0x31b, region: 0x9a}, + 113: {lang: 0x30b, region: 0x53}, + 115: {lang: 0x31e, region: 0x35}, + 116: {lang: 0x30e, region: 0x9a}, + 117: {lang: 0x414, region: 0xe9}, + 118: {lang: 0x331, region: 0xc5}, + 121: {lang: 0x4f9, region: 0x109}, + 122: {lang: 0x3b, region: 0xa2}, + 123: {lang: 0x353, region: 0xdc}, + 126: {lang: 0x2d0, region: 0x85}, + 127: {lang: 0x52a, region: 0x53}, + 128: {lang: 0x403, region: 0x97}, + 129: {lang: 0x3ee, region: 0x9a}, + 130: {lang: 0x39b, region: 0xc6}, + 131: {lang: 0x395, region: 0x9a}, + 132: {lang: 0x399, region: 0x136}, + 133: {lang: 0x429, region: 0x116}, + 135: {lang: 0x3b, region: 0x11d}, + 136: {lang: 0xfd, region: 0xc5}, + 139: {lang: 0x27d, region: 0x107}, + 140: {lang: 0x2c9, region: 0x53}, + 141: {lang: 0x39f, region: 0x9d}, + 142: {lang: 0x39f, region: 0x53}, + 144: {lang: 0x3ad, region: 0xb1}, + 146: {lang: 0x1c6, region: 0x53}, + 147: {lang: 0x4fd, region: 0x9d}, + 200: {lang: 0x3cb, region: 0x96}, + 203: {lang: 0x372, region: 0x10d}, + 204: {lang: 0x420, region: 0x98}, + 206: {lang: 0x4ff, region: 0x15f}, + 207: {lang: 0x3f0, region: 0x9a}, + 208: {lang: 0x45, region: 0x136}, + 209: {lang: 0x139, region: 0x7c}, + 210: {lang: 0x3e9, region: 0x9a}, + 212: {lang: 0x3e9, region: 0x9a}, + 213: {lang: 0x3fa, region: 0x9a}, + 214: {lang: 0x40c, region: 0xb4}, + 217: {lang: 0x433, region: 0x9a}, + 218: {lang: 0xef, region: 0xc6}, + 219: {lang: 0x43e, region: 0x96}, + 221: {lang: 0x44d, region: 0x35}, + 222: {lang: 0x44e, region: 0x9c}, + 226: {lang: 0x45a, region: 0xe8}, + 227: {lang: 0x11a, region: 0x9a}, + 228: {lang: 0x45e, region: 0x53}, + 229: {lang: 0x232, region: 0x53}, + 230: {lang: 0x450, region: 0x9a}, + 231: {lang: 0x4a5, region: 0x53}, + 232: {lang: 0x9f, region: 0x13f}, + 233: {lang: 0x461, region: 0x9a}, + 235: {lang: 0x528, region: 0xbb}, + 236: {lang: 0x153, region: 0xe8}, + 237: {lang: 0x128, region: 0xce}, + 238: {lang: 0x46b, region: 0x124}, + 239: {lang: 0xa9, region: 0x53}, + 240: {lang: 0x2ce, region: 0x9a}, + 243: {lang: 0x4ad, region: 0x11d}, + 244: {lang: 0x4be, region: 0xb5}, + 247: {lang: 0x1ce, region: 0x9a}, + 250: {lang: 0x3a9, region: 0x9d}, + 251: {lang: 0x22, region: 0x9c}, + 253: {lang: 0x1ea, region: 0x53}, + 254: {lang: 0xef, region: 0xc6}, } type likelyScriptRegion struct { @@ -1557,1423 +1579,1423 @@ type likelyScriptRegion struct { // of the list in likelyLangList. // Size: 7980 bytes, 1330 elements var likelyLang = [1330]likelyScriptRegion{ - 0: {region: 0x135, script: 0x5a, flags: 0x0}, - 1: {region: 0x6f, script: 0x5a, flags: 0x0}, - 2: {region: 0x165, script: 0x5a, flags: 0x0}, - 3: {region: 0x165, script: 0x5a, flags: 0x0}, - 4: {region: 0x165, script: 0x5a, flags: 0x0}, - 5: {region: 0x7d, script: 0x20, flags: 0x0}, - 6: {region: 0x165, script: 0x5a, flags: 0x0}, - 7: {region: 0x165, script: 0x20, flags: 0x0}, - 8: {region: 0x80, script: 0x5a, flags: 0x0}, - 9: {region: 0x165, script: 0x5a, flags: 0x0}, - 10: {region: 0x165, script: 0x5a, flags: 0x0}, - 11: {region: 0x165, script: 0x5a, flags: 0x0}, - 12: {region: 0x95, script: 0x5a, flags: 0x0}, - 13: {region: 0x131, script: 0x5a, flags: 0x0}, - 14: {region: 0x80, script: 0x5a, flags: 0x0}, - 15: {region: 0x165, script: 0x5a, flags: 0x0}, - 16: {region: 0x165, script: 0x5a, flags: 0x0}, - 17: {region: 0x106, script: 0x20, flags: 0x0}, - 18: {region: 0x165, script: 0x5a, flags: 0x0}, - 19: {region: 0x9c, script: 0x9, flags: 0x0}, - 20: {region: 0x128, script: 0x5, flags: 0x0}, - 21: {region: 0x165, script: 0x5a, flags: 0x0}, - 22: {region: 0x161, script: 0x5a, flags: 0x0}, - 23: {region: 0x165, script: 0x5a, flags: 0x0}, - 24: {region: 0x165, script: 0x5a, flags: 0x0}, - 25: {region: 0x165, script: 0x5a, flags: 0x0}, - 26: {region: 0x165, script: 0x5a, flags: 0x0}, - 27: {region: 0x165, script: 0x5a, flags: 0x0}, - 28: {region: 0x52, script: 0x5a, flags: 0x0}, - 29: {region: 0x165, script: 0x5a, flags: 0x0}, - 30: {region: 0x165, script: 0x5a, flags: 0x0}, - 31: {region: 0x99, script: 0x4, flags: 0x0}, - 32: {region: 0x165, script: 0x5a, flags: 0x0}, - 33: {region: 0x80, script: 0x5a, flags: 0x0}, - 34: {region: 0x9b, script: 0xf8, flags: 0x0}, - 35: {region: 0x165, script: 0x5a, flags: 0x0}, - 36: {region: 0x165, script: 0x5a, flags: 0x0}, - 37: {region: 0x14d, script: 0x5a, flags: 0x0}, - 38: {region: 0x106, script: 0x20, flags: 0x0}, - 39: {region: 0x6f, script: 0x2c, flags: 0x0}, - 40: {region: 0x165, script: 0x5a, flags: 0x0}, - 41: {region: 0x165, script: 0x5a, flags: 0x0}, - 42: {region: 0xd6, script: 0x5a, flags: 0x0}, - 43: {region: 0x165, script: 0x5a, flags: 0x0}, - 45: {region: 0x165, script: 0x5a, flags: 0x0}, - 46: {region: 0x165, script: 0x5a, flags: 0x0}, - 47: {region: 0x165, script: 0x5a, flags: 0x0}, - 48: {region: 0x165, script: 0x5a, flags: 0x0}, - 49: {region: 0x165, script: 0x5a, flags: 0x0}, - 50: {region: 0x165, script: 0x5a, flags: 0x0}, - 51: {region: 0x95, script: 0x5a, flags: 0x0}, - 52: {region: 0x165, script: 0x5, flags: 0x0}, - 53: {region: 0x122, script: 0x5, flags: 0x0}, - 54: {region: 0x165, script: 0x5a, flags: 0x0}, - 55: {region: 0x165, script: 0x5a, flags: 0x0}, - 56: {region: 0x165, script: 0x5a, flags: 0x0}, - 57: {region: 0x165, script: 0x5a, flags: 0x0}, - 58: {region: 0x6b, script: 0x5, flags: 0x0}, + 0: {region: 0x136, script: 0x5b, flags: 0x0}, + 1: {region: 0x70, script: 0x5b, flags: 0x0}, + 2: {region: 0x166, script: 0x5b, flags: 0x0}, + 3: {region: 0x166, script: 0x5b, flags: 0x0}, + 4: {region: 0x166, script: 0x5b, flags: 0x0}, + 5: {region: 0x7e, script: 0x20, flags: 0x0}, + 6: {region: 0x166, script: 0x5b, flags: 0x0}, + 7: {region: 0x166, script: 0x20, flags: 0x0}, + 8: {region: 0x81, script: 0x5b, flags: 0x0}, + 9: {region: 0x166, script: 0x5b, flags: 0x0}, + 10: {region: 0x166, script: 0x5b, flags: 0x0}, + 11: {region: 0x166, script: 0x5b, flags: 0x0}, + 12: {region: 0x96, script: 0x5b, flags: 0x0}, + 13: {region: 0x132, script: 0x5b, flags: 0x0}, + 14: {region: 0x81, script: 0x5b, flags: 0x0}, + 15: {region: 0x166, script: 0x5b, flags: 0x0}, + 16: {region: 0x166, script: 0x5b, flags: 0x0}, + 17: {region: 0x107, script: 0x20, flags: 0x0}, + 18: {region: 0x166, script: 0x5b, flags: 0x0}, + 19: {region: 0x9d, script: 0x9, flags: 0x0}, + 20: {region: 0x129, script: 0x5, flags: 0x0}, + 21: {region: 0x166, script: 0x5b, flags: 0x0}, + 22: {region: 0x162, script: 0x5b, flags: 0x0}, + 23: {region: 0x166, script: 0x5b, flags: 0x0}, + 24: {region: 0x166, script: 0x5b, flags: 0x0}, + 25: {region: 0x166, script: 0x5b, flags: 0x0}, + 26: {region: 0x166, script: 0x5b, flags: 0x0}, + 27: {region: 0x166, script: 0x5b, flags: 0x0}, + 28: {region: 0x52, script: 0x5b, flags: 0x0}, + 29: {region: 0x166, script: 0x5b, flags: 0x0}, + 30: {region: 0x166, script: 0x5b, flags: 0x0}, + 31: {region: 0x9a, script: 0x4, flags: 0x0}, + 32: {region: 0x166, script: 0x5b, flags: 0x0}, + 33: {region: 0x81, script: 0x5b, flags: 0x0}, + 34: {region: 0x9c, script: 0xfb, flags: 0x0}, + 35: {region: 0x166, script: 0x5b, flags: 0x0}, + 36: {region: 0x166, script: 0x5b, flags: 0x0}, + 37: {region: 0x14e, script: 0x5b, flags: 0x0}, + 38: {region: 0x107, script: 0x20, flags: 0x0}, + 39: {region: 0x70, script: 0x2c, flags: 0x0}, + 40: {region: 0x166, script: 0x5b, flags: 0x0}, + 41: {region: 0x166, script: 0x5b, flags: 0x0}, + 42: {region: 0xd7, script: 0x5b, flags: 0x0}, + 43: {region: 0x166, script: 0x5b, flags: 0x0}, + 45: {region: 0x166, script: 0x5b, flags: 0x0}, + 46: {region: 0x166, script: 0x5b, flags: 0x0}, + 47: {region: 0x166, script: 0x5b, flags: 0x0}, + 48: {region: 0x166, script: 0x5b, flags: 0x0}, + 49: {region: 0x166, script: 0x5b, flags: 0x0}, + 50: {region: 0x166, script: 0x5b, flags: 0x0}, + 51: {region: 0x96, script: 0x5b, flags: 0x0}, + 52: {region: 0x166, script: 0x5, flags: 0x0}, + 53: {region: 0x123, script: 0x5, flags: 0x0}, + 54: {region: 0x166, script: 0x5b, flags: 0x0}, + 55: {region: 0x166, script: 0x5b, flags: 0x0}, + 56: {region: 0x166, script: 0x5b, flags: 0x0}, + 57: {region: 0x166, script: 0x5b, flags: 0x0}, + 58: {region: 0x6c, script: 0x5, flags: 0x0}, 59: {region: 0x0, script: 0x3, flags: 0x1}, - 60: {region: 0x165, script: 0x5a, flags: 0x0}, - 61: {region: 0x51, script: 0x5a, flags: 0x0}, - 62: {region: 0x3f, script: 0x5a, flags: 0x0}, - 63: {region: 0x67, script: 0x5, flags: 0x0}, - 65: {region: 0xba, script: 0x5, flags: 0x0}, - 66: {region: 0x6b, script: 0x5, flags: 0x0}, - 67: {region: 0x99, script: 0xe, flags: 0x0}, - 68: {region: 0x12f, script: 0x5a, flags: 0x0}, - 69: {region: 0x135, script: 0xce, flags: 0x0}, - 70: {region: 0x165, script: 0x5a, flags: 0x0}, - 71: {region: 0x165, script: 0x5a, flags: 0x0}, - 72: {region: 0x6e, script: 0x5a, flags: 0x0}, - 73: {region: 0x165, script: 0x5a, flags: 0x0}, - 74: {region: 0x165, script: 0x5a, flags: 0x0}, - 75: {region: 0x49, script: 0x5a, flags: 0x0}, - 76: {region: 0x165, script: 0x5a, flags: 0x0}, - 77: {region: 0x106, script: 0x20, flags: 0x0}, - 78: {region: 0x165, script: 0x5, flags: 0x0}, - 79: {region: 0x165, script: 0x5a, flags: 0x0}, - 80: {region: 0x165, script: 0x5a, flags: 0x0}, - 81: {region: 0x165, script: 0x5a, flags: 0x0}, - 82: {region: 0x99, script: 0x22, flags: 0x0}, - 83: {region: 0x165, script: 0x5a, flags: 0x0}, - 84: {region: 0x165, script: 0x5a, flags: 0x0}, - 85: {region: 0x165, script: 0x5a, flags: 0x0}, - 86: {region: 0x3f, script: 0x5a, flags: 0x0}, - 87: {region: 0x165, script: 0x5a, flags: 0x0}, + 60: {region: 0x166, script: 0x5b, flags: 0x0}, + 61: {region: 0x51, script: 0x5b, flags: 0x0}, + 62: {region: 0x3f, script: 0x5b, flags: 0x0}, + 63: {region: 0x68, script: 0x5, flags: 0x0}, + 65: {region: 0xbb, script: 0x5, flags: 0x0}, + 66: {region: 0x6c, script: 0x5, flags: 0x0}, + 67: {region: 0x9a, script: 0xe, flags: 0x0}, + 68: {region: 0x130, script: 0x5b, flags: 0x0}, + 69: {region: 0x136, script: 0xd0, flags: 0x0}, + 70: {region: 0x166, script: 0x5b, flags: 0x0}, + 71: {region: 0x166, script: 0x5b, flags: 0x0}, + 72: {region: 0x6f, script: 0x5b, flags: 0x0}, + 73: {region: 0x166, script: 0x5b, flags: 0x0}, + 74: {region: 0x166, script: 0x5b, flags: 0x0}, + 75: {region: 0x49, script: 0x5b, flags: 0x0}, + 76: {region: 0x166, script: 0x5b, flags: 0x0}, + 77: {region: 0x107, script: 0x20, flags: 0x0}, + 78: {region: 0x166, script: 0x5, flags: 0x0}, + 79: {region: 0x166, script: 0x5b, flags: 0x0}, + 80: {region: 0x166, script: 0x5b, flags: 0x0}, + 81: {region: 0x166, script: 0x5b, flags: 0x0}, + 82: {region: 0x9a, script: 0x22, flags: 0x0}, + 83: {region: 0x166, script: 0x5b, flags: 0x0}, + 84: {region: 0x166, script: 0x5b, flags: 0x0}, + 85: {region: 0x166, script: 0x5b, flags: 0x0}, + 86: {region: 0x3f, script: 0x5b, flags: 0x0}, + 87: {region: 0x166, script: 0x5b, flags: 0x0}, 88: {region: 0x3, script: 0x5, flags: 0x1}, - 89: {region: 0x106, script: 0x20, flags: 0x0}, - 90: {region: 0xe8, script: 0x5, flags: 0x0}, - 91: {region: 0x95, script: 0x5a, flags: 0x0}, - 92: {region: 0xdb, script: 0x22, flags: 0x0}, - 93: {region: 0x2e, script: 0x5a, flags: 0x0}, - 94: {region: 0x52, script: 0x5a, flags: 0x0}, - 95: {region: 0x165, script: 0x5a, flags: 0x0}, + 89: {region: 0x107, script: 0x20, flags: 0x0}, + 90: {region: 0xe9, script: 0x5, flags: 0x0}, + 91: {region: 0x96, script: 0x5b, flags: 0x0}, + 92: {region: 0xdc, script: 0x22, flags: 0x0}, + 93: {region: 0x2e, script: 0x5b, flags: 0x0}, + 94: {region: 0x52, script: 0x5b, flags: 0x0}, + 95: {region: 0x166, script: 0x5b, flags: 0x0}, 96: {region: 0x52, script: 0xb, flags: 0x0}, - 97: {region: 0x165, script: 0x5a, flags: 0x0}, - 98: {region: 0x165, script: 0x5a, flags: 0x0}, - 99: {region: 0x95, script: 0x5a, flags: 0x0}, - 100: {region: 0x165, script: 0x5a, flags: 0x0}, - 101: {region: 0x52, script: 0x5a, flags: 0x0}, - 102: {region: 0x165, script: 0x5a, flags: 0x0}, - 103: {region: 0x165, script: 0x5a, flags: 0x0}, - 104: {region: 0x165, script: 0x5a, flags: 0x0}, - 105: {region: 0x165, script: 0x5a, flags: 0x0}, - 106: {region: 0x4f, script: 0x5a, flags: 0x0}, - 107: {region: 0x165, script: 0x5a, flags: 0x0}, - 108: {region: 0x165, script: 0x5a, flags: 0x0}, - 109: {region: 0x165, script: 0x5a, flags: 0x0}, - 110: {region: 0x165, script: 0x2c, flags: 0x0}, - 111: {region: 0x165, script: 0x5a, flags: 0x0}, - 112: {region: 0x165, script: 0x5a, flags: 0x0}, + 97: {region: 0x166, script: 0x5b, flags: 0x0}, + 98: {region: 0x166, script: 0x5b, flags: 0x0}, + 99: {region: 0x96, script: 0x5b, flags: 0x0}, + 100: {region: 0x166, script: 0x5b, flags: 0x0}, + 101: {region: 0x52, script: 0x5b, flags: 0x0}, + 102: {region: 0x166, script: 0x5b, flags: 0x0}, + 103: {region: 0x166, script: 0x5b, flags: 0x0}, + 104: {region: 0x166, script: 0x5b, flags: 0x0}, + 105: {region: 0x166, script: 0x5b, flags: 0x0}, + 106: {region: 0x4f, script: 0x5b, flags: 0x0}, + 107: {region: 0x166, script: 0x5b, flags: 0x0}, + 108: {region: 0x166, script: 0x5b, flags: 0x0}, + 109: {region: 0x166, script: 0x5b, flags: 0x0}, + 110: {region: 0x166, script: 0x2c, flags: 0x0}, + 111: {region: 0x166, script: 0x5b, flags: 0x0}, + 112: {region: 0x166, script: 0x5b, flags: 0x0}, 113: {region: 0x47, script: 0x20, flags: 0x0}, - 114: {region: 0x165, script: 0x5a, flags: 0x0}, - 115: {region: 0x165, script: 0x5a, flags: 0x0}, - 116: {region: 0x10b, script: 0x5, flags: 0x0}, - 117: {region: 0x162, script: 0x5a, flags: 0x0}, - 118: {region: 0x165, script: 0x5a, flags: 0x0}, - 119: {region: 0x95, script: 0x5a, flags: 0x0}, - 120: {region: 0x165, script: 0x5a, flags: 0x0}, - 121: {region: 0x12f, script: 0x5a, flags: 0x0}, - 122: {region: 0x52, script: 0x5a, flags: 0x0}, - 123: {region: 0x99, script: 0xe3, flags: 0x0}, - 124: {region: 0xe8, script: 0x5, flags: 0x0}, - 125: {region: 0x99, script: 0x22, flags: 0x0}, + 114: {region: 0x166, script: 0x5b, flags: 0x0}, + 115: {region: 0x166, script: 0x5b, flags: 0x0}, + 116: {region: 0x10c, script: 0x5, flags: 0x0}, + 117: {region: 0x163, script: 0x5b, flags: 0x0}, + 118: {region: 0x166, script: 0x5b, flags: 0x0}, + 119: {region: 0x96, script: 0x5b, flags: 0x0}, + 120: {region: 0x166, script: 0x5b, flags: 0x0}, + 121: {region: 0x130, script: 0x5b, flags: 0x0}, + 122: {region: 0x52, script: 0x5b, flags: 0x0}, + 123: {region: 0x9a, script: 0xe6, flags: 0x0}, + 124: {region: 0xe9, script: 0x5, flags: 0x0}, + 125: {region: 0x9a, script: 0x22, flags: 0x0}, 126: {region: 0x38, script: 0x20, flags: 0x0}, - 127: {region: 0x99, script: 0x22, flags: 0x0}, - 128: {region: 0xe8, script: 0x5, flags: 0x0}, - 129: {region: 0x12b, script: 0x34, flags: 0x0}, - 131: {region: 0x99, script: 0x22, flags: 0x0}, - 132: {region: 0x165, script: 0x5a, flags: 0x0}, - 133: {region: 0x99, script: 0x22, flags: 0x0}, - 134: {region: 0xe7, script: 0x5a, flags: 0x0}, - 135: {region: 0x165, script: 0x5a, flags: 0x0}, - 136: {region: 0x99, script: 0x22, flags: 0x0}, - 137: {region: 0x165, script: 0x5a, flags: 0x0}, - 138: {region: 0x13f, script: 0x5a, flags: 0x0}, - 139: {region: 0x165, script: 0x5a, flags: 0x0}, - 140: {region: 0x165, script: 0x5a, flags: 0x0}, - 141: {region: 0xe7, script: 0x5a, flags: 0x0}, - 142: {region: 0x165, script: 0x5a, flags: 0x0}, - 143: {region: 0xd6, script: 0x5a, flags: 0x0}, - 144: {region: 0x165, script: 0x5a, flags: 0x0}, - 145: {region: 0x165, script: 0x5a, flags: 0x0}, - 146: {region: 0x165, script: 0x5a, flags: 0x0}, - 147: {region: 0x165, script: 0x2c, flags: 0x0}, - 148: {region: 0x99, script: 0x22, flags: 0x0}, - 149: {region: 0x95, script: 0x5a, flags: 0x0}, - 150: {region: 0x165, script: 0x5a, flags: 0x0}, - 151: {region: 0x165, script: 0x5a, flags: 0x0}, - 152: {region: 0x114, script: 0x5a, flags: 0x0}, - 153: {region: 0x165, script: 0x5a, flags: 0x0}, - 154: {region: 0x165, script: 0x5a, flags: 0x0}, - 155: {region: 0x52, script: 0x5a, flags: 0x0}, - 156: {region: 0x165, script: 0x5a, flags: 0x0}, - 157: {region: 0xe7, script: 0x5a, flags: 0x0}, - 158: {region: 0x165, script: 0x5a, flags: 0x0}, - 159: {region: 0x13e, script: 0xe5, flags: 0x0}, - 160: {region: 0xc3, script: 0x5a, flags: 0x0}, - 161: {region: 0x165, script: 0x5a, flags: 0x0}, - 162: {region: 0x165, script: 0x5a, flags: 0x0}, - 163: {region: 0xc3, script: 0x5a, flags: 0x0}, - 164: {region: 0x165, script: 0x5a, flags: 0x0}, + 127: {region: 0x9a, script: 0x22, flags: 0x0}, + 128: {region: 0xe9, script: 0x5, flags: 0x0}, + 129: {region: 0x12c, script: 0x34, flags: 0x0}, + 131: {region: 0x9a, script: 0x22, flags: 0x0}, + 132: {region: 0x166, script: 0x5b, flags: 0x0}, + 133: {region: 0x9a, script: 0x22, flags: 0x0}, + 134: {region: 0xe8, script: 0x5b, flags: 0x0}, + 135: {region: 0x166, script: 0x5b, flags: 0x0}, + 136: {region: 0x9a, script: 0x22, flags: 0x0}, + 137: {region: 0x166, script: 0x5b, flags: 0x0}, + 138: {region: 0x140, script: 0x5b, flags: 0x0}, + 139: {region: 0x166, script: 0x5b, flags: 0x0}, + 140: {region: 0x166, script: 0x5b, flags: 0x0}, + 141: {region: 0xe8, script: 0x5b, flags: 0x0}, + 142: {region: 0x166, script: 0x5b, flags: 0x0}, + 143: {region: 0xd7, script: 0x5b, flags: 0x0}, + 144: {region: 0x166, script: 0x5b, flags: 0x0}, + 145: {region: 0x166, script: 0x5b, flags: 0x0}, + 146: {region: 0x166, script: 0x5b, flags: 0x0}, + 147: {region: 0x166, script: 0x2c, flags: 0x0}, + 148: {region: 0x9a, script: 0x22, flags: 0x0}, + 149: {region: 0x96, script: 0x5b, flags: 0x0}, + 150: {region: 0x166, script: 0x5b, flags: 0x0}, + 151: {region: 0x166, script: 0x5b, flags: 0x0}, + 152: {region: 0x115, script: 0x5b, flags: 0x0}, + 153: {region: 0x166, script: 0x5b, flags: 0x0}, + 154: {region: 0x166, script: 0x5b, flags: 0x0}, + 155: {region: 0x52, script: 0x5b, flags: 0x0}, + 156: {region: 0x166, script: 0x5b, flags: 0x0}, + 157: {region: 0xe8, script: 0x5b, flags: 0x0}, + 158: {region: 0x166, script: 0x5b, flags: 0x0}, + 159: {region: 0x13f, script: 0xe8, flags: 0x0}, + 160: {region: 0xc4, script: 0x5b, flags: 0x0}, + 161: {region: 0x166, script: 0x5b, flags: 0x0}, + 162: {region: 0x166, script: 0x5b, flags: 0x0}, + 163: {region: 0xc4, script: 0x5b, flags: 0x0}, + 164: {region: 0x166, script: 0x5b, flags: 0x0}, 165: {region: 0x35, script: 0xe, flags: 0x0}, - 166: {region: 0x165, script: 0x5a, flags: 0x0}, - 167: {region: 0x165, script: 0x5a, flags: 0x0}, - 168: {region: 0x165, script: 0x5a, flags: 0x0}, - 169: {region: 0x53, script: 0xec, flags: 0x0}, - 170: {region: 0x165, script: 0x5a, flags: 0x0}, - 171: {region: 0x165, script: 0x5a, flags: 0x0}, - 172: {region: 0x165, script: 0x5a, flags: 0x0}, - 173: {region: 0x99, script: 0xe, flags: 0x0}, - 174: {region: 0x165, script: 0x5a, flags: 0x0}, - 175: {region: 0x9c, script: 0x5, flags: 0x0}, - 176: {region: 0x165, script: 0x5a, flags: 0x0}, - 177: {region: 0x4f, script: 0x5a, flags: 0x0}, - 178: {region: 0x78, script: 0x5a, flags: 0x0}, - 179: {region: 0x99, script: 0x22, flags: 0x0}, - 180: {region: 0xe8, script: 0x5, flags: 0x0}, - 181: {region: 0x99, script: 0x22, flags: 0x0}, - 182: {region: 0x165, script: 0x5a, flags: 0x0}, - 183: {region: 0x33, script: 0x5a, flags: 0x0}, - 184: {region: 0x165, script: 0x5a, flags: 0x0}, - 185: {region: 0xb4, script: 0xc, flags: 0x0}, - 186: {region: 0x52, script: 0x5a, flags: 0x0}, - 187: {region: 0x165, script: 0x2c, flags: 0x0}, - 188: {region: 0xe7, script: 0x5a, flags: 0x0}, - 189: {region: 0x165, script: 0x5a, flags: 0x0}, - 190: {region: 0xe8, script: 0x22, flags: 0x0}, - 191: {region: 0x106, script: 0x20, flags: 0x0}, - 192: {region: 0x15f, script: 0x5a, flags: 0x0}, - 193: {region: 0x165, script: 0x5a, flags: 0x0}, - 194: {region: 0x95, script: 0x5a, flags: 0x0}, - 195: {region: 0x165, script: 0x5a, flags: 0x0}, - 196: {region: 0x52, script: 0x5a, flags: 0x0}, - 197: {region: 0x165, script: 0x5a, flags: 0x0}, - 198: {region: 0x165, script: 0x5a, flags: 0x0}, - 199: {region: 0x165, script: 0x5a, flags: 0x0}, - 200: {region: 0x86, script: 0x5a, flags: 0x0}, - 201: {region: 0x165, script: 0x5a, flags: 0x0}, - 202: {region: 0x165, script: 0x5a, flags: 0x0}, - 203: {region: 0x165, script: 0x5a, flags: 0x0}, - 204: {region: 0x165, script: 0x5a, flags: 0x0}, - 205: {region: 0x6d, script: 0x2c, flags: 0x0}, - 206: {region: 0x165, script: 0x5a, flags: 0x0}, - 207: {region: 0x165, script: 0x5a, flags: 0x0}, - 208: {region: 0x52, script: 0x5a, flags: 0x0}, - 209: {region: 0x165, script: 0x5a, flags: 0x0}, - 210: {region: 0x165, script: 0x5a, flags: 0x0}, - 211: {region: 0xc3, script: 0x5a, flags: 0x0}, - 212: {region: 0x165, script: 0x5a, flags: 0x0}, - 213: {region: 0x165, script: 0x5a, flags: 0x0}, - 214: {region: 0x165, script: 0x5a, flags: 0x0}, - 215: {region: 0x6e, script: 0x5a, flags: 0x0}, - 216: {region: 0x165, script: 0x5a, flags: 0x0}, - 217: {region: 0x165, script: 0x5a, flags: 0x0}, - 218: {region: 0xd6, script: 0x5a, flags: 0x0}, + 166: {region: 0x166, script: 0x5b, flags: 0x0}, + 167: {region: 0x166, script: 0x5b, flags: 0x0}, + 168: {region: 0x166, script: 0x5b, flags: 0x0}, + 169: {region: 0x53, script: 0xef, flags: 0x0}, + 170: {region: 0x166, script: 0x5b, flags: 0x0}, + 171: {region: 0x166, script: 0x5b, flags: 0x0}, + 172: {region: 0x166, script: 0x5b, flags: 0x0}, + 173: {region: 0x9a, script: 0xe, flags: 0x0}, + 174: {region: 0x166, script: 0x5b, flags: 0x0}, + 175: {region: 0x9d, script: 0x5, flags: 0x0}, + 176: {region: 0x166, script: 0x5b, flags: 0x0}, + 177: {region: 0x4f, script: 0x5b, flags: 0x0}, + 178: {region: 0x79, script: 0x5b, flags: 0x0}, + 179: {region: 0x9a, script: 0x22, flags: 0x0}, + 180: {region: 0xe9, script: 0x5, flags: 0x0}, + 181: {region: 0x9a, script: 0x22, flags: 0x0}, + 182: {region: 0x166, script: 0x5b, flags: 0x0}, + 183: {region: 0x33, script: 0x5b, flags: 0x0}, + 184: {region: 0x166, script: 0x5b, flags: 0x0}, + 185: {region: 0xb5, script: 0xc, flags: 0x0}, + 186: {region: 0x52, script: 0x5b, flags: 0x0}, + 187: {region: 0x166, script: 0x2c, flags: 0x0}, + 188: {region: 0xe8, script: 0x5b, flags: 0x0}, + 189: {region: 0x166, script: 0x5b, flags: 0x0}, + 190: {region: 0xe9, script: 0x22, flags: 0x0}, + 191: {region: 0x107, script: 0x20, flags: 0x0}, + 192: {region: 0x160, script: 0x5b, flags: 0x0}, + 193: {region: 0x166, script: 0x5b, flags: 0x0}, + 194: {region: 0x96, script: 0x5b, flags: 0x0}, + 195: {region: 0x166, script: 0x5b, flags: 0x0}, + 196: {region: 0x52, script: 0x5b, flags: 0x0}, + 197: {region: 0x166, script: 0x5b, flags: 0x0}, + 198: {region: 0x166, script: 0x5b, flags: 0x0}, + 199: {region: 0x166, script: 0x5b, flags: 0x0}, + 200: {region: 0x87, script: 0x5b, flags: 0x0}, + 201: {region: 0x166, script: 0x5b, flags: 0x0}, + 202: {region: 0x166, script: 0x5b, flags: 0x0}, + 203: {region: 0x166, script: 0x5b, flags: 0x0}, + 204: {region: 0x166, script: 0x5b, flags: 0x0}, + 205: {region: 0x6e, script: 0x2c, flags: 0x0}, + 206: {region: 0x166, script: 0x5b, flags: 0x0}, + 207: {region: 0x166, script: 0x5b, flags: 0x0}, + 208: {region: 0x52, script: 0x5b, flags: 0x0}, + 209: {region: 0x166, script: 0x5b, flags: 0x0}, + 210: {region: 0x166, script: 0x5b, flags: 0x0}, + 211: {region: 0xc4, script: 0x5b, flags: 0x0}, + 212: {region: 0x166, script: 0x5b, flags: 0x0}, + 213: {region: 0x166, script: 0x5b, flags: 0x0}, + 214: {region: 0x166, script: 0x5b, flags: 0x0}, + 215: {region: 0x6f, script: 0x5b, flags: 0x0}, + 216: {region: 0x166, script: 0x5b, flags: 0x0}, + 217: {region: 0x166, script: 0x5b, flags: 0x0}, + 218: {region: 0xd7, script: 0x5b, flags: 0x0}, 219: {region: 0x35, script: 0x16, flags: 0x0}, - 220: {region: 0x106, script: 0x20, flags: 0x0}, - 221: {region: 0xe7, script: 0x5a, flags: 0x0}, - 222: {region: 0x165, script: 0x5a, flags: 0x0}, - 223: {region: 0x131, script: 0x5a, flags: 0x0}, - 224: {region: 0x8a, script: 0x5a, flags: 0x0}, - 225: {region: 0x75, script: 0x5a, flags: 0x0}, - 226: {region: 0x106, script: 0x20, flags: 0x0}, - 227: {region: 0x135, script: 0x5a, flags: 0x0}, - 228: {region: 0x49, script: 0x5a, flags: 0x0}, - 229: {region: 0x135, script: 0x1a, flags: 0x0}, - 230: {region: 0xa6, script: 0x5, flags: 0x0}, - 231: {region: 0x13e, script: 0x19, flags: 0x0}, - 232: {region: 0x165, script: 0x5a, flags: 0x0}, - 233: {region: 0x9b, script: 0x5, flags: 0x0}, - 234: {region: 0x165, script: 0x5a, flags: 0x0}, - 235: {region: 0x165, script: 0x5a, flags: 0x0}, - 236: {region: 0x165, script: 0x5a, flags: 0x0}, - 237: {region: 0x165, script: 0x5a, flags: 0x0}, - 238: {region: 0x165, script: 0x5a, flags: 0x0}, - 239: {region: 0xc5, script: 0xd8, flags: 0x0}, - 240: {region: 0x78, script: 0x5a, flags: 0x0}, - 241: {region: 0x6b, script: 0x1d, flags: 0x0}, - 242: {region: 0xe7, script: 0x5a, flags: 0x0}, + 220: {region: 0x107, script: 0x20, flags: 0x0}, + 221: {region: 0xe8, script: 0x5b, flags: 0x0}, + 222: {region: 0x166, script: 0x5b, flags: 0x0}, + 223: {region: 0x132, script: 0x5b, flags: 0x0}, + 224: {region: 0x8b, script: 0x5b, flags: 0x0}, + 225: {region: 0x76, script: 0x5b, flags: 0x0}, + 226: {region: 0x107, script: 0x20, flags: 0x0}, + 227: {region: 0x136, script: 0x5b, flags: 0x0}, + 228: {region: 0x49, script: 0x5b, flags: 0x0}, + 229: {region: 0x136, script: 0x1a, flags: 0x0}, + 230: {region: 0xa7, script: 0x5, flags: 0x0}, + 231: {region: 0x13f, script: 0x19, flags: 0x0}, + 232: {region: 0x166, script: 0x5b, flags: 0x0}, + 233: {region: 0x9c, script: 0x5, flags: 0x0}, + 234: {region: 0x166, script: 0x5b, flags: 0x0}, + 235: {region: 0x166, script: 0x5b, flags: 0x0}, + 236: {region: 0x166, script: 0x5b, flags: 0x0}, + 237: {region: 0x166, script: 0x5b, flags: 0x0}, + 238: {region: 0x166, script: 0x5b, flags: 0x0}, + 239: {region: 0xc6, script: 0xda, flags: 0x0}, + 240: {region: 0x79, script: 0x5b, flags: 0x0}, + 241: {region: 0x6c, script: 0x1d, flags: 0x0}, + 242: {region: 0xe8, script: 0x5b, flags: 0x0}, 243: {region: 0x49, script: 0x17, flags: 0x0}, - 244: {region: 0x130, script: 0x20, flags: 0x0}, + 244: {region: 0x131, script: 0x20, flags: 0x0}, 245: {region: 0x49, script: 0x17, flags: 0x0}, 246: {region: 0x49, script: 0x17, flags: 0x0}, 247: {region: 0x49, script: 0x17, flags: 0x0}, 248: {region: 0x49, script: 0x17, flags: 0x0}, - 249: {region: 0x10a, script: 0x5a, flags: 0x0}, - 250: {region: 0x5e, script: 0x5a, flags: 0x0}, - 251: {region: 0xe9, script: 0x5a, flags: 0x0}, + 249: {region: 0x10b, script: 0x5b, flags: 0x0}, + 250: {region: 0x5f, script: 0x5b, flags: 0x0}, + 251: {region: 0xea, script: 0x5b, flags: 0x0}, 252: {region: 0x49, script: 0x17, flags: 0x0}, - 253: {region: 0xc4, script: 0x86, flags: 0x0}, + 253: {region: 0xc5, script: 0x88, flags: 0x0}, 254: {region: 0x8, script: 0x2, flags: 0x1}, - 255: {region: 0x106, script: 0x20, flags: 0x0}, - 256: {region: 0x7b, script: 0x5a, flags: 0x0}, - 257: {region: 0x63, script: 0x5a, flags: 0x0}, - 258: {region: 0x165, script: 0x5a, flags: 0x0}, - 259: {region: 0x165, script: 0x5a, flags: 0x0}, - 260: {region: 0x165, script: 0x5a, flags: 0x0}, - 261: {region: 0x165, script: 0x5a, flags: 0x0}, - 262: {region: 0x135, script: 0x5a, flags: 0x0}, - 263: {region: 0x106, script: 0x20, flags: 0x0}, - 264: {region: 0xa4, script: 0x5a, flags: 0x0}, - 265: {region: 0x165, script: 0x5a, flags: 0x0}, - 266: {region: 0x165, script: 0x5a, flags: 0x0}, - 267: {region: 0x99, script: 0x5, flags: 0x0}, - 268: {region: 0x165, script: 0x5a, flags: 0x0}, - 269: {region: 0x60, script: 0x5a, flags: 0x0}, - 270: {region: 0x165, script: 0x5a, flags: 0x0}, - 271: {region: 0x49, script: 0x5a, flags: 0x0}, - 272: {region: 0x165, script: 0x5a, flags: 0x0}, - 273: {region: 0x165, script: 0x5a, flags: 0x0}, - 274: {region: 0x165, script: 0x5a, flags: 0x0}, - 275: {region: 0x165, script: 0x5, flags: 0x0}, - 276: {region: 0x49, script: 0x5a, flags: 0x0}, - 277: {region: 0x165, script: 0x5a, flags: 0x0}, - 278: {region: 0x165, script: 0x5a, flags: 0x0}, - 279: {region: 0xd4, script: 0x5a, flags: 0x0}, - 280: {region: 0x4f, script: 0x5a, flags: 0x0}, - 281: {region: 0x165, script: 0x5a, flags: 0x0}, - 282: {region: 0x99, script: 0x5, flags: 0x0}, - 283: {region: 0x165, script: 0x5a, flags: 0x0}, - 284: {region: 0x165, script: 0x5a, flags: 0x0}, - 285: {region: 0x165, script: 0x5a, flags: 0x0}, - 286: {region: 0x165, script: 0x2c, flags: 0x0}, - 287: {region: 0x60, script: 0x5a, flags: 0x0}, - 288: {region: 0xc3, script: 0x5a, flags: 0x0}, - 289: {region: 0xd0, script: 0x5a, flags: 0x0}, - 290: {region: 0x165, script: 0x5a, flags: 0x0}, - 291: {region: 0xdb, script: 0x22, flags: 0x0}, - 292: {region: 0x52, script: 0x5a, flags: 0x0}, - 293: {region: 0x165, script: 0x5a, flags: 0x0}, - 294: {region: 0x165, script: 0x5a, flags: 0x0}, - 295: {region: 0x165, script: 0x5a, flags: 0x0}, - 296: {region: 0xcd, script: 0xea, flags: 0x0}, - 297: {region: 0x165, script: 0x5a, flags: 0x0}, - 298: {region: 0x165, script: 0x5a, flags: 0x0}, - 299: {region: 0x114, script: 0x5a, flags: 0x0}, - 300: {region: 0x37, script: 0x5a, flags: 0x0}, - 301: {region: 0x43, script: 0xec, flags: 0x0}, - 302: {region: 0x165, script: 0x5a, flags: 0x0}, - 303: {region: 0xa4, script: 0x5a, flags: 0x0}, - 304: {region: 0x80, script: 0x5a, flags: 0x0}, - 305: {region: 0xd6, script: 0x5a, flags: 0x0}, - 306: {region: 0x9e, script: 0x5a, flags: 0x0}, - 307: {region: 0x6b, script: 0x29, flags: 0x0}, - 308: {region: 0x165, script: 0x5a, flags: 0x0}, - 309: {region: 0xc4, script: 0x4b, flags: 0x0}, - 310: {region: 0x87, script: 0x34, flags: 0x0}, - 311: {region: 0x165, script: 0x5a, flags: 0x0}, - 312: {region: 0x165, script: 0x5a, flags: 0x0}, + 255: {region: 0x107, script: 0x20, flags: 0x0}, + 256: {region: 0x7c, script: 0x5b, flags: 0x0}, + 257: {region: 0x64, script: 0x5b, flags: 0x0}, + 258: {region: 0x166, script: 0x5b, flags: 0x0}, + 259: {region: 0x166, script: 0x5b, flags: 0x0}, + 260: {region: 0x166, script: 0x5b, flags: 0x0}, + 261: {region: 0x166, script: 0x5b, flags: 0x0}, + 262: {region: 0x136, script: 0x5b, flags: 0x0}, + 263: {region: 0x107, script: 0x20, flags: 0x0}, + 264: {region: 0xa5, script: 0x5b, flags: 0x0}, + 265: {region: 0x166, script: 0x5b, flags: 0x0}, + 266: {region: 0x166, script: 0x5b, flags: 0x0}, + 267: {region: 0x9a, script: 0x5, flags: 0x0}, + 268: {region: 0x166, script: 0x5b, flags: 0x0}, + 269: {region: 0x61, script: 0x5b, flags: 0x0}, + 270: {region: 0x166, script: 0x5b, flags: 0x0}, + 271: {region: 0x49, script: 0x5b, flags: 0x0}, + 272: {region: 0x166, script: 0x5b, flags: 0x0}, + 273: {region: 0x166, script: 0x5b, flags: 0x0}, + 274: {region: 0x166, script: 0x5b, flags: 0x0}, + 275: {region: 0x166, script: 0x5, flags: 0x0}, + 276: {region: 0x49, script: 0x5b, flags: 0x0}, + 277: {region: 0x166, script: 0x5b, flags: 0x0}, + 278: {region: 0x166, script: 0x5b, flags: 0x0}, + 279: {region: 0xd5, script: 0x5b, flags: 0x0}, + 280: {region: 0x4f, script: 0x5b, flags: 0x0}, + 281: {region: 0x166, script: 0x5b, flags: 0x0}, + 282: {region: 0x9a, script: 0x5, flags: 0x0}, + 283: {region: 0x166, script: 0x5b, flags: 0x0}, + 284: {region: 0x166, script: 0x5b, flags: 0x0}, + 285: {region: 0x166, script: 0x5b, flags: 0x0}, + 286: {region: 0x166, script: 0x2c, flags: 0x0}, + 287: {region: 0x61, script: 0x5b, flags: 0x0}, + 288: {region: 0xc4, script: 0x5b, flags: 0x0}, + 289: {region: 0xd1, script: 0x5b, flags: 0x0}, + 290: {region: 0x166, script: 0x5b, flags: 0x0}, + 291: {region: 0xdc, script: 0x22, flags: 0x0}, + 292: {region: 0x52, script: 0x5b, flags: 0x0}, + 293: {region: 0x166, script: 0x5b, flags: 0x0}, + 294: {region: 0x166, script: 0x5b, flags: 0x0}, + 295: {region: 0x166, script: 0x5b, flags: 0x0}, + 296: {region: 0xce, script: 0xed, flags: 0x0}, + 297: {region: 0x166, script: 0x5b, flags: 0x0}, + 298: {region: 0x166, script: 0x5b, flags: 0x0}, + 299: {region: 0x115, script: 0x5b, flags: 0x0}, + 300: {region: 0x37, script: 0x5b, flags: 0x0}, + 301: {region: 0x43, script: 0xef, flags: 0x0}, + 302: {region: 0x166, script: 0x5b, flags: 0x0}, + 303: {region: 0xa5, script: 0x5b, flags: 0x0}, + 304: {region: 0x81, script: 0x5b, flags: 0x0}, + 305: {region: 0xd7, script: 0x5b, flags: 0x0}, + 306: {region: 0x9f, script: 0x5b, flags: 0x0}, + 307: {region: 0x6c, script: 0x29, flags: 0x0}, + 308: {region: 0x166, script: 0x5b, flags: 0x0}, + 309: {region: 0xc5, script: 0x4b, flags: 0x0}, + 310: {region: 0x88, script: 0x34, flags: 0x0}, + 311: {region: 0x166, script: 0x5b, flags: 0x0}, + 312: {region: 0x166, script: 0x5b, flags: 0x0}, 313: {region: 0xa, script: 0x2, flags: 0x1}, - 314: {region: 0x165, script: 0x5a, flags: 0x0}, - 315: {region: 0x165, script: 0x5a, flags: 0x0}, - 316: {region: 0x1, script: 0x5a, flags: 0x0}, - 317: {region: 0x165, script: 0x5a, flags: 0x0}, - 318: {region: 0x6e, script: 0x5a, flags: 0x0}, - 319: {region: 0x135, script: 0x5a, flags: 0x0}, - 320: {region: 0x6a, script: 0x5a, flags: 0x0}, - 321: {region: 0x165, script: 0x5a, flags: 0x0}, - 322: {region: 0x9e, script: 0x46, flags: 0x0}, - 323: {region: 0x165, script: 0x5a, flags: 0x0}, - 324: {region: 0x165, script: 0x5a, flags: 0x0}, - 325: {region: 0x6e, script: 0x5a, flags: 0x0}, - 326: {region: 0x52, script: 0x5a, flags: 0x0}, - 327: {region: 0x6e, script: 0x5a, flags: 0x0}, - 328: {region: 0x9c, script: 0x5, flags: 0x0}, - 329: {region: 0x165, script: 0x5a, flags: 0x0}, - 330: {region: 0x165, script: 0x5a, flags: 0x0}, - 331: {region: 0x165, script: 0x5a, flags: 0x0}, - 332: {region: 0x165, script: 0x5a, flags: 0x0}, - 333: {region: 0x86, script: 0x5a, flags: 0x0}, + 314: {region: 0x166, script: 0x5b, flags: 0x0}, + 315: {region: 0x166, script: 0x5b, flags: 0x0}, + 316: {region: 0x1, script: 0x5b, flags: 0x0}, + 317: {region: 0x166, script: 0x5b, flags: 0x0}, + 318: {region: 0x6f, script: 0x5b, flags: 0x0}, + 319: {region: 0x136, script: 0x5b, flags: 0x0}, + 320: {region: 0x6b, script: 0x5b, flags: 0x0}, + 321: {region: 0x166, script: 0x5b, flags: 0x0}, + 322: {region: 0x9f, script: 0x46, flags: 0x0}, + 323: {region: 0x166, script: 0x5b, flags: 0x0}, + 324: {region: 0x166, script: 0x5b, flags: 0x0}, + 325: {region: 0x6f, script: 0x5b, flags: 0x0}, + 326: {region: 0x52, script: 0x5b, flags: 0x0}, + 327: {region: 0x6f, script: 0x5b, flags: 0x0}, + 328: {region: 0x9d, script: 0x5, flags: 0x0}, + 329: {region: 0x166, script: 0x5b, flags: 0x0}, + 330: {region: 0x166, script: 0x5b, flags: 0x0}, + 331: {region: 0x166, script: 0x5b, flags: 0x0}, + 332: {region: 0x166, script: 0x5b, flags: 0x0}, + 333: {region: 0x87, script: 0x5b, flags: 0x0}, 334: {region: 0xc, script: 0x2, flags: 0x1}, - 335: {region: 0x165, script: 0x5a, flags: 0x0}, - 336: {region: 0xc3, script: 0x5a, flags: 0x0}, - 337: {region: 0x72, script: 0x5a, flags: 0x0}, - 338: {region: 0x10b, script: 0x5, flags: 0x0}, - 339: {region: 0xe7, script: 0x5a, flags: 0x0}, - 340: {region: 0x10c, script: 0x5a, flags: 0x0}, - 341: {region: 0x73, script: 0x5a, flags: 0x0}, - 342: {region: 0x165, script: 0x5a, flags: 0x0}, - 343: {region: 0x165, script: 0x5a, flags: 0x0}, - 344: {region: 0x76, script: 0x5a, flags: 0x0}, - 345: {region: 0x165, script: 0x5a, flags: 0x0}, - 346: {region: 0x3b, script: 0x5a, flags: 0x0}, - 347: {region: 0x165, script: 0x5a, flags: 0x0}, - 348: {region: 0x165, script: 0x5a, flags: 0x0}, - 349: {region: 0x165, script: 0x5a, flags: 0x0}, - 350: {region: 0x78, script: 0x5a, flags: 0x0}, - 351: {region: 0x135, script: 0x5a, flags: 0x0}, - 352: {region: 0x78, script: 0x5a, flags: 0x0}, - 353: {region: 0x60, script: 0x5a, flags: 0x0}, - 354: {region: 0x60, script: 0x5a, flags: 0x0}, + 335: {region: 0x166, script: 0x5b, flags: 0x0}, + 336: {region: 0xc4, script: 0x5b, flags: 0x0}, + 337: {region: 0x73, script: 0x5b, flags: 0x0}, + 338: {region: 0x10c, script: 0x5, flags: 0x0}, + 339: {region: 0xe8, script: 0x5b, flags: 0x0}, + 340: {region: 0x10d, script: 0x5b, flags: 0x0}, + 341: {region: 0x74, script: 0x5b, flags: 0x0}, + 342: {region: 0x166, script: 0x5b, flags: 0x0}, + 343: {region: 0x166, script: 0x5b, flags: 0x0}, + 344: {region: 0x77, script: 0x5b, flags: 0x0}, + 345: {region: 0x166, script: 0x5b, flags: 0x0}, + 346: {region: 0x3b, script: 0x5b, flags: 0x0}, + 347: {region: 0x166, script: 0x5b, flags: 0x0}, + 348: {region: 0x166, script: 0x5b, flags: 0x0}, + 349: {region: 0x166, script: 0x5b, flags: 0x0}, + 350: {region: 0x79, script: 0x5b, flags: 0x0}, + 351: {region: 0x136, script: 0x5b, flags: 0x0}, + 352: {region: 0x79, script: 0x5b, flags: 0x0}, + 353: {region: 0x61, script: 0x5b, flags: 0x0}, + 354: {region: 0x61, script: 0x5b, flags: 0x0}, 355: {region: 0x52, script: 0x5, flags: 0x0}, - 356: {region: 0x140, script: 0x5a, flags: 0x0}, - 357: {region: 0x165, script: 0x5a, flags: 0x0}, - 358: {region: 0x84, script: 0x5a, flags: 0x0}, - 359: {region: 0x165, script: 0x5a, flags: 0x0}, - 360: {region: 0xd4, script: 0x5a, flags: 0x0}, - 361: {region: 0x9e, script: 0x5a, flags: 0x0}, - 362: {region: 0xd6, script: 0x5a, flags: 0x0}, - 363: {region: 0x165, script: 0x5a, flags: 0x0}, - 364: {region: 0x10b, script: 0x5a, flags: 0x0}, - 365: {region: 0xd9, script: 0x5a, flags: 0x0}, - 366: {region: 0x96, script: 0x5a, flags: 0x0}, - 367: {region: 0x80, script: 0x5a, flags: 0x0}, - 368: {region: 0x165, script: 0x5a, flags: 0x0}, - 369: {region: 0xbc, script: 0x5a, flags: 0x0}, - 370: {region: 0x165, script: 0x5a, flags: 0x0}, - 371: {region: 0x165, script: 0x5a, flags: 0x0}, - 372: {region: 0x165, script: 0x5a, flags: 0x0}, + 356: {region: 0x141, script: 0x5b, flags: 0x0}, + 357: {region: 0x166, script: 0x5b, flags: 0x0}, + 358: {region: 0x85, script: 0x5b, flags: 0x0}, + 359: {region: 0x166, script: 0x5b, flags: 0x0}, + 360: {region: 0xd5, script: 0x5b, flags: 0x0}, + 361: {region: 0x9f, script: 0x5b, flags: 0x0}, + 362: {region: 0xd7, script: 0x5b, flags: 0x0}, + 363: {region: 0x166, script: 0x5b, flags: 0x0}, + 364: {region: 0x10c, script: 0x5b, flags: 0x0}, + 365: {region: 0xda, script: 0x5b, flags: 0x0}, + 366: {region: 0x97, script: 0x5b, flags: 0x0}, + 367: {region: 0x81, script: 0x5b, flags: 0x0}, + 368: {region: 0x166, script: 0x5b, flags: 0x0}, + 369: {region: 0xbd, script: 0x5b, flags: 0x0}, + 370: {region: 0x166, script: 0x5b, flags: 0x0}, + 371: {region: 0x166, script: 0x5b, flags: 0x0}, + 372: {region: 0x166, script: 0x5b, flags: 0x0}, 373: {region: 0x53, script: 0x3b, flags: 0x0}, - 374: {region: 0x165, script: 0x5a, flags: 0x0}, - 375: {region: 0x95, script: 0x5a, flags: 0x0}, - 376: {region: 0x165, script: 0x5a, flags: 0x0}, - 377: {region: 0x165, script: 0x5a, flags: 0x0}, - 378: {region: 0x99, script: 0x22, flags: 0x0}, - 379: {region: 0x165, script: 0x5a, flags: 0x0}, - 380: {region: 0x9c, script: 0x5, flags: 0x0}, - 381: {region: 0x7e, script: 0x5a, flags: 0x0}, - 382: {region: 0x7b, script: 0x5a, flags: 0x0}, - 383: {region: 0x165, script: 0x5a, flags: 0x0}, - 384: {region: 0x165, script: 0x5a, flags: 0x0}, - 385: {region: 0x165, script: 0x5a, flags: 0x0}, - 386: {region: 0x165, script: 0x5a, flags: 0x0}, - 387: {region: 0x165, script: 0x5a, flags: 0x0}, - 388: {region: 0x165, script: 0x5a, flags: 0x0}, - 389: {region: 0x6f, script: 0x2c, flags: 0x0}, - 390: {region: 0x165, script: 0x5a, flags: 0x0}, - 391: {region: 0xdb, script: 0x22, flags: 0x0}, - 392: {region: 0x165, script: 0x5a, flags: 0x0}, - 393: {region: 0xa7, script: 0x5a, flags: 0x0}, - 394: {region: 0x165, script: 0x5a, flags: 0x0}, - 395: {region: 0xe8, script: 0x5, flags: 0x0}, - 396: {region: 0x165, script: 0x5a, flags: 0x0}, - 397: {region: 0xe8, script: 0x5, flags: 0x0}, - 398: {region: 0x165, script: 0x5a, flags: 0x0}, - 399: {region: 0x165, script: 0x5a, flags: 0x0}, - 400: {region: 0x6e, script: 0x5a, flags: 0x0}, - 401: {region: 0x9c, script: 0x5, flags: 0x0}, - 402: {region: 0x165, script: 0x5a, flags: 0x0}, - 403: {region: 0x165, script: 0x2c, flags: 0x0}, - 404: {region: 0xf1, script: 0x5a, flags: 0x0}, - 405: {region: 0x165, script: 0x5a, flags: 0x0}, - 406: {region: 0x165, script: 0x5a, flags: 0x0}, - 407: {region: 0x165, script: 0x5a, flags: 0x0}, - 408: {region: 0x165, script: 0x2c, flags: 0x0}, - 409: {region: 0x165, script: 0x5a, flags: 0x0}, - 410: {region: 0x99, script: 0x22, flags: 0x0}, - 411: {region: 0x99, script: 0xe6, flags: 0x0}, - 412: {region: 0x95, script: 0x5a, flags: 0x0}, - 413: {region: 0xd9, script: 0x5a, flags: 0x0}, - 414: {region: 0x130, script: 0x32, flags: 0x0}, - 415: {region: 0x165, script: 0x5a, flags: 0x0}, + 374: {region: 0x166, script: 0x5b, flags: 0x0}, + 375: {region: 0x96, script: 0x5b, flags: 0x0}, + 376: {region: 0x166, script: 0x5b, flags: 0x0}, + 377: {region: 0x166, script: 0x5b, flags: 0x0}, + 378: {region: 0x9a, script: 0x22, flags: 0x0}, + 379: {region: 0x166, script: 0x5b, flags: 0x0}, + 380: {region: 0x9d, script: 0x5, flags: 0x0}, + 381: {region: 0x7f, script: 0x5b, flags: 0x0}, + 382: {region: 0x7c, script: 0x5b, flags: 0x0}, + 383: {region: 0x166, script: 0x5b, flags: 0x0}, + 384: {region: 0x166, script: 0x5b, flags: 0x0}, + 385: {region: 0x166, script: 0x5b, flags: 0x0}, + 386: {region: 0x166, script: 0x5b, flags: 0x0}, + 387: {region: 0x166, script: 0x5b, flags: 0x0}, + 388: {region: 0x166, script: 0x5b, flags: 0x0}, + 389: {region: 0x70, script: 0x2c, flags: 0x0}, + 390: {region: 0x166, script: 0x5b, flags: 0x0}, + 391: {region: 0xdc, script: 0x22, flags: 0x0}, + 392: {region: 0x166, script: 0x5b, flags: 0x0}, + 393: {region: 0xa8, script: 0x5b, flags: 0x0}, + 394: {region: 0x166, script: 0x5b, flags: 0x0}, + 395: {region: 0xe9, script: 0x5, flags: 0x0}, + 396: {region: 0x166, script: 0x5b, flags: 0x0}, + 397: {region: 0xe9, script: 0x5, flags: 0x0}, + 398: {region: 0x166, script: 0x5b, flags: 0x0}, + 399: {region: 0x166, script: 0x5b, flags: 0x0}, + 400: {region: 0x6f, script: 0x5b, flags: 0x0}, + 401: {region: 0x9d, script: 0x5, flags: 0x0}, + 402: {region: 0x166, script: 0x5b, flags: 0x0}, + 403: {region: 0x166, script: 0x2c, flags: 0x0}, + 404: {region: 0xf2, script: 0x5b, flags: 0x0}, + 405: {region: 0x166, script: 0x5b, flags: 0x0}, + 406: {region: 0x166, script: 0x5b, flags: 0x0}, + 407: {region: 0x166, script: 0x5b, flags: 0x0}, + 408: {region: 0x166, script: 0x2c, flags: 0x0}, + 409: {region: 0x166, script: 0x5b, flags: 0x0}, + 410: {region: 0x9a, script: 0x22, flags: 0x0}, + 411: {region: 0x9a, script: 0xe9, flags: 0x0}, + 412: {region: 0x96, script: 0x5b, flags: 0x0}, + 413: {region: 0xda, script: 0x5b, flags: 0x0}, + 414: {region: 0x131, script: 0x32, flags: 0x0}, + 415: {region: 0x166, script: 0x5b, flags: 0x0}, 416: {region: 0xe, script: 0x2, flags: 0x1}, - 417: {region: 0x99, script: 0xe, flags: 0x0}, - 418: {region: 0x165, script: 0x5a, flags: 0x0}, - 419: {region: 0x4e, script: 0x5a, flags: 0x0}, - 420: {region: 0x99, script: 0x35, flags: 0x0}, - 421: {region: 0x41, script: 0x5a, flags: 0x0}, - 422: {region: 0x54, script: 0x5a, flags: 0x0}, - 423: {region: 0x165, script: 0x5a, flags: 0x0}, - 424: {region: 0x80, script: 0x5a, flags: 0x0}, - 425: {region: 0x165, script: 0x5a, flags: 0x0}, - 426: {region: 0x165, script: 0x5a, flags: 0x0}, - 427: {region: 0xa4, script: 0x5a, flags: 0x0}, - 428: {region: 0x98, script: 0x5a, flags: 0x0}, - 429: {region: 0x165, script: 0x5a, flags: 0x0}, - 430: {region: 0xdb, script: 0x22, flags: 0x0}, - 431: {region: 0x165, script: 0x5a, flags: 0x0}, - 432: {region: 0x165, script: 0x5, flags: 0x0}, - 433: {region: 0x49, script: 0x5a, flags: 0x0}, - 434: {region: 0x165, script: 0x5, flags: 0x0}, - 435: {region: 0x165, script: 0x5a, flags: 0x0}, + 417: {region: 0x9a, script: 0xe, flags: 0x0}, + 418: {region: 0x166, script: 0x5b, flags: 0x0}, + 419: {region: 0x4e, script: 0x5b, flags: 0x0}, + 420: {region: 0x9a, script: 0x35, flags: 0x0}, + 421: {region: 0x41, script: 0x5b, flags: 0x0}, + 422: {region: 0x54, script: 0x5b, flags: 0x0}, + 423: {region: 0x166, script: 0x5b, flags: 0x0}, + 424: {region: 0x81, script: 0x5b, flags: 0x0}, + 425: {region: 0x166, script: 0x5b, flags: 0x0}, + 426: {region: 0x166, script: 0x5b, flags: 0x0}, + 427: {region: 0xa5, script: 0x5b, flags: 0x0}, + 428: {region: 0x99, script: 0x5b, flags: 0x0}, + 429: {region: 0x166, script: 0x5b, flags: 0x0}, + 430: {region: 0xdc, script: 0x22, flags: 0x0}, + 431: {region: 0x166, script: 0x5b, flags: 0x0}, + 432: {region: 0x166, script: 0x5, flags: 0x0}, + 433: {region: 0x49, script: 0x5b, flags: 0x0}, + 434: {region: 0x166, script: 0x5, flags: 0x0}, + 435: {region: 0x166, script: 0x5b, flags: 0x0}, 436: {region: 0x10, script: 0x3, flags: 0x1}, - 437: {region: 0x165, script: 0x5a, flags: 0x0}, + 437: {region: 0x166, script: 0x5b, flags: 0x0}, 438: {region: 0x53, script: 0x3b, flags: 0x0}, - 439: {region: 0x165, script: 0x5a, flags: 0x0}, - 440: {region: 0x135, script: 0x5a, flags: 0x0}, + 439: {region: 0x166, script: 0x5b, flags: 0x0}, + 440: {region: 0x136, script: 0x5b, flags: 0x0}, 441: {region: 0x24, script: 0x5, flags: 0x0}, - 442: {region: 0x165, script: 0x5a, flags: 0x0}, - 443: {region: 0x165, script: 0x2c, flags: 0x0}, - 444: {region: 0x97, script: 0x3e, flags: 0x0}, - 445: {region: 0x165, script: 0x5a, flags: 0x0}, - 446: {region: 0x99, script: 0x22, flags: 0x0}, - 447: {region: 0x165, script: 0x5a, flags: 0x0}, - 448: {region: 0x73, script: 0x5a, flags: 0x0}, - 449: {region: 0x165, script: 0x5a, flags: 0x0}, - 450: {region: 0x165, script: 0x5a, flags: 0x0}, - 451: {region: 0xe7, script: 0x5a, flags: 0x0}, - 452: {region: 0x165, script: 0x5a, flags: 0x0}, - 453: {region: 0x12b, script: 0x40, flags: 0x0}, - 454: {region: 0x53, script: 0x90, flags: 0x0}, - 455: {region: 0x165, script: 0x5a, flags: 0x0}, - 456: {region: 0xe8, script: 0x5, flags: 0x0}, - 457: {region: 0x99, script: 0x22, flags: 0x0}, - 458: {region: 0xaf, script: 0x41, flags: 0x0}, - 459: {region: 0xe7, script: 0x5a, flags: 0x0}, - 460: {region: 0xe8, script: 0x5, flags: 0x0}, - 461: {region: 0xe6, script: 0x5a, flags: 0x0}, - 462: {region: 0x99, script: 0x22, flags: 0x0}, - 463: {region: 0x99, script: 0x22, flags: 0x0}, - 464: {region: 0x165, script: 0x5a, flags: 0x0}, - 465: {region: 0x90, script: 0x5a, flags: 0x0}, - 466: {region: 0x60, script: 0x5a, flags: 0x0}, + 442: {region: 0x166, script: 0x5b, flags: 0x0}, + 443: {region: 0x166, script: 0x2c, flags: 0x0}, + 444: {region: 0x98, script: 0x3e, flags: 0x0}, + 445: {region: 0x166, script: 0x5b, flags: 0x0}, + 446: {region: 0x9a, script: 0x22, flags: 0x0}, + 447: {region: 0x166, script: 0x5b, flags: 0x0}, + 448: {region: 0x74, script: 0x5b, flags: 0x0}, + 449: {region: 0x166, script: 0x5b, flags: 0x0}, + 450: {region: 0x166, script: 0x5b, flags: 0x0}, + 451: {region: 0xe8, script: 0x5b, flags: 0x0}, + 452: {region: 0x166, script: 0x5b, flags: 0x0}, + 453: {region: 0x12c, script: 0x40, flags: 0x0}, + 454: {region: 0x53, script: 0x92, flags: 0x0}, + 455: {region: 0x166, script: 0x5b, flags: 0x0}, + 456: {region: 0xe9, script: 0x5, flags: 0x0}, + 457: {region: 0x9a, script: 0x22, flags: 0x0}, + 458: {region: 0xb0, script: 0x41, flags: 0x0}, + 459: {region: 0xe8, script: 0x5b, flags: 0x0}, + 460: {region: 0xe9, script: 0x5, flags: 0x0}, + 461: {region: 0xe7, script: 0x5b, flags: 0x0}, + 462: {region: 0x9a, script: 0x22, flags: 0x0}, + 463: {region: 0x9a, script: 0x22, flags: 0x0}, + 464: {region: 0x166, script: 0x5b, flags: 0x0}, + 465: {region: 0x91, script: 0x5b, flags: 0x0}, + 466: {region: 0x61, script: 0x5b, flags: 0x0}, 467: {region: 0x53, script: 0x3b, flags: 0x0}, - 468: {region: 0x91, script: 0x5a, flags: 0x0}, - 469: {region: 0x92, script: 0x5a, flags: 0x0}, - 470: {region: 0x165, script: 0x5a, flags: 0x0}, + 468: {region: 0x92, script: 0x5b, flags: 0x0}, + 469: {region: 0x93, script: 0x5b, flags: 0x0}, + 470: {region: 0x166, script: 0x5b, flags: 0x0}, 471: {region: 0x28, script: 0x8, flags: 0x0}, - 472: {region: 0xd2, script: 0x5a, flags: 0x0}, - 473: {region: 0x78, script: 0x5a, flags: 0x0}, - 474: {region: 0x165, script: 0x5a, flags: 0x0}, - 475: {region: 0x165, script: 0x5a, flags: 0x0}, - 476: {region: 0xd0, script: 0x5a, flags: 0x0}, - 477: {region: 0xd6, script: 0x5a, flags: 0x0}, - 478: {region: 0x165, script: 0x5a, flags: 0x0}, - 479: {region: 0x165, script: 0x5a, flags: 0x0}, - 480: {region: 0x165, script: 0x5a, flags: 0x0}, - 481: {region: 0x95, script: 0x5a, flags: 0x0}, - 482: {region: 0x165, script: 0x5a, flags: 0x0}, - 483: {region: 0x165, script: 0x5a, flags: 0x0}, - 484: {region: 0x165, script: 0x5a, flags: 0x0}, - 486: {region: 0x122, script: 0x5a, flags: 0x0}, - 487: {region: 0xd6, script: 0x5a, flags: 0x0}, - 488: {region: 0x165, script: 0x5a, flags: 0x0}, - 489: {region: 0x165, script: 0x5a, flags: 0x0}, - 490: {region: 0x53, script: 0xfa, flags: 0x0}, - 491: {region: 0x165, script: 0x5a, flags: 0x0}, - 492: {region: 0x135, script: 0x5a, flags: 0x0}, - 493: {region: 0x165, script: 0x5a, flags: 0x0}, - 494: {region: 0x49, script: 0x5a, flags: 0x0}, - 495: {region: 0x165, script: 0x5a, flags: 0x0}, - 496: {region: 0x165, script: 0x5a, flags: 0x0}, - 497: {region: 0xe7, script: 0x5a, flags: 0x0}, - 498: {region: 0x165, script: 0x5a, flags: 0x0}, - 499: {region: 0x95, script: 0x5a, flags: 0x0}, - 500: {region: 0x106, script: 0x20, flags: 0x0}, - 501: {region: 0x1, script: 0x5a, flags: 0x0}, - 502: {region: 0x165, script: 0x5a, flags: 0x0}, - 503: {region: 0x165, script: 0x5a, flags: 0x0}, - 504: {region: 0x9d, script: 0x5a, flags: 0x0}, - 505: {region: 0x9e, script: 0x5a, flags: 0x0}, + 472: {region: 0xd3, script: 0x5b, flags: 0x0}, + 473: {region: 0x79, script: 0x5b, flags: 0x0}, + 474: {region: 0x166, script: 0x5b, flags: 0x0}, + 475: {region: 0x166, script: 0x5b, flags: 0x0}, + 476: {region: 0xd1, script: 0x5b, flags: 0x0}, + 477: {region: 0xd7, script: 0x5b, flags: 0x0}, + 478: {region: 0x166, script: 0x5b, flags: 0x0}, + 479: {region: 0x166, script: 0x5b, flags: 0x0}, + 480: {region: 0x166, script: 0x5b, flags: 0x0}, + 481: {region: 0x96, script: 0x5b, flags: 0x0}, + 482: {region: 0x166, script: 0x5b, flags: 0x0}, + 483: {region: 0x166, script: 0x5b, flags: 0x0}, + 484: {region: 0x166, script: 0x5b, flags: 0x0}, + 486: {region: 0x123, script: 0x5b, flags: 0x0}, + 487: {region: 0xd7, script: 0x5b, flags: 0x0}, + 488: {region: 0x166, script: 0x5b, flags: 0x0}, + 489: {region: 0x166, script: 0x5b, flags: 0x0}, + 490: {region: 0x53, script: 0xfd, flags: 0x0}, + 491: {region: 0x166, script: 0x5b, flags: 0x0}, + 492: {region: 0x136, script: 0x5b, flags: 0x0}, + 493: {region: 0x166, script: 0x5b, flags: 0x0}, + 494: {region: 0x49, script: 0x5b, flags: 0x0}, + 495: {region: 0x166, script: 0x5b, flags: 0x0}, + 496: {region: 0x166, script: 0x5b, flags: 0x0}, + 497: {region: 0xe8, script: 0x5b, flags: 0x0}, + 498: {region: 0x166, script: 0x5b, flags: 0x0}, + 499: {region: 0x96, script: 0x5b, flags: 0x0}, + 500: {region: 0x107, script: 0x20, flags: 0x0}, + 501: {region: 0x1, script: 0x5b, flags: 0x0}, + 502: {region: 0x166, script: 0x5b, flags: 0x0}, + 503: {region: 0x166, script: 0x5b, flags: 0x0}, + 504: {region: 0x9e, script: 0x5b, flags: 0x0}, + 505: {region: 0x9f, script: 0x5b, flags: 0x0}, 506: {region: 0x49, script: 0x17, flags: 0x0}, - 507: {region: 0x97, script: 0x3e, flags: 0x0}, - 508: {region: 0x165, script: 0x5a, flags: 0x0}, - 509: {region: 0x165, script: 0x5a, flags: 0x0}, - 510: {region: 0x106, script: 0x5a, flags: 0x0}, - 511: {region: 0x165, script: 0x5a, flags: 0x0}, - 512: {region: 0xa2, script: 0x49, flags: 0x0}, - 513: {region: 0x165, script: 0x5a, flags: 0x0}, - 514: {region: 0xa0, script: 0x5a, flags: 0x0}, - 515: {region: 0x1, script: 0x5a, flags: 0x0}, - 516: {region: 0x165, script: 0x5a, flags: 0x0}, - 517: {region: 0x165, script: 0x5a, flags: 0x0}, - 518: {region: 0x165, script: 0x5a, flags: 0x0}, - 519: {region: 0x52, script: 0x5a, flags: 0x0}, - 520: {region: 0x130, script: 0x3e, flags: 0x0}, - 521: {region: 0x165, script: 0x5a, flags: 0x0}, - 522: {region: 0x12f, script: 0x5a, flags: 0x0}, - 523: {region: 0xdb, script: 0x22, flags: 0x0}, - 524: {region: 0x165, script: 0x5a, flags: 0x0}, - 525: {region: 0x63, script: 0x5a, flags: 0x0}, - 526: {region: 0x95, script: 0x5a, flags: 0x0}, - 527: {region: 0x95, script: 0x5a, flags: 0x0}, - 528: {region: 0x7d, script: 0x2e, flags: 0x0}, - 529: {region: 0x137, script: 0x20, flags: 0x0}, - 530: {region: 0x67, script: 0x5a, flags: 0x0}, - 531: {region: 0xc4, script: 0x5a, flags: 0x0}, - 532: {region: 0x165, script: 0x5a, flags: 0x0}, - 533: {region: 0x165, script: 0x5a, flags: 0x0}, - 534: {region: 0xd6, script: 0x5a, flags: 0x0}, - 535: {region: 0xa4, script: 0x5a, flags: 0x0}, - 536: {region: 0xc3, script: 0x5a, flags: 0x0}, - 537: {region: 0x106, script: 0x20, flags: 0x0}, - 538: {region: 0x165, script: 0x5a, flags: 0x0}, - 539: {region: 0x165, script: 0x5a, flags: 0x0}, - 540: {region: 0x165, script: 0x5a, flags: 0x0}, - 541: {region: 0x165, script: 0x5a, flags: 0x0}, - 542: {region: 0xd4, script: 0x5, flags: 0x0}, - 543: {region: 0xd6, script: 0x5a, flags: 0x0}, - 544: {region: 0x164, script: 0x5a, flags: 0x0}, - 545: {region: 0x165, script: 0x5a, flags: 0x0}, - 546: {region: 0x165, script: 0x5a, flags: 0x0}, - 547: {region: 0x12f, script: 0x5a, flags: 0x0}, - 548: {region: 0x122, script: 0x5, flags: 0x0}, - 549: {region: 0x165, script: 0x5a, flags: 0x0}, - 550: {region: 0x123, script: 0xeb, flags: 0x0}, - 551: {region: 0x5a, script: 0x5a, flags: 0x0}, - 552: {region: 0x52, script: 0x5a, flags: 0x0}, - 553: {region: 0x165, script: 0x5a, flags: 0x0}, - 554: {region: 0x4f, script: 0x5a, flags: 0x0}, - 555: {region: 0x99, script: 0x22, flags: 0x0}, - 556: {region: 0x99, script: 0x22, flags: 0x0}, - 557: {region: 0x4b, script: 0x5a, flags: 0x0}, - 558: {region: 0x95, script: 0x5a, flags: 0x0}, - 559: {region: 0x165, script: 0x5a, flags: 0x0}, - 560: {region: 0x41, script: 0x5a, flags: 0x0}, - 561: {region: 0x99, script: 0x5a, flags: 0x0}, - 562: {region: 0x53, script: 0xe2, flags: 0x0}, - 563: {region: 0x99, script: 0x22, flags: 0x0}, - 564: {region: 0xc3, script: 0x5a, flags: 0x0}, - 565: {region: 0x165, script: 0x5a, flags: 0x0}, - 566: {region: 0x99, script: 0x75, flags: 0x0}, - 567: {region: 0xe8, script: 0x5, flags: 0x0}, - 568: {region: 0x165, script: 0x5a, flags: 0x0}, - 569: {region: 0xa4, script: 0x5a, flags: 0x0}, - 570: {region: 0x165, script: 0x5a, flags: 0x0}, - 571: {region: 0x12b, script: 0x5a, flags: 0x0}, - 572: {region: 0x165, script: 0x5a, flags: 0x0}, - 573: {region: 0xd2, script: 0x5a, flags: 0x0}, - 574: {region: 0x165, script: 0x5a, flags: 0x0}, - 575: {region: 0xaf, script: 0x57, flags: 0x0}, - 576: {region: 0x165, script: 0x5a, flags: 0x0}, - 577: {region: 0x165, script: 0x5a, flags: 0x0}, + 507: {region: 0x98, script: 0x3e, flags: 0x0}, + 508: {region: 0x166, script: 0x5b, flags: 0x0}, + 509: {region: 0x166, script: 0x5b, flags: 0x0}, + 510: {region: 0x107, script: 0x5b, flags: 0x0}, + 511: {region: 0x166, script: 0x5b, flags: 0x0}, + 512: {region: 0xa3, script: 0x49, flags: 0x0}, + 513: {region: 0x166, script: 0x5b, flags: 0x0}, + 514: {region: 0xa1, script: 0x5b, flags: 0x0}, + 515: {region: 0x1, script: 0x5b, flags: 0x0}, + 516: {region: 0x166, script: 0x5b, flags: 0x0}, + 517: {region: 0x166, script: 0x5b, flags: 0x0}, + 518: {region: 0x166, script: 0x5b, flags: 0x0}, + 519: {region: 0x52, script: 0x5b, flags: 0x0}, + 520: {region: 0x131, script: 0x3e, flags: 0x0}, + 521: {region: 0x166, script: 0x5b, flags: 0x0}, + 522: {region: 0x130, script: 0x5b, flags: 0x0}, + 523: {region: 0xdc, script: 0x22, flags: 0x0}, + 524: {region: 0x166, script: 0x5b, flags: 0x0}, + 525: {region: 0x64, script: 0x5b, flags: 0x0}, + 526: {region: 0x96, script: 0x5b, flags: 0x0}, + 527: {region: 0x96, script: 0x5b, flags: 0x0}, + 528: {region: 0x7e, script: 0x2e, flags: 0x0}, + 529: {region: 0x138, script: 0x20, flags: 0x0}, + 530: {region: 0x68, script: 0x5b, flags: 0x0}, + 531: {region: 0xc5, script: 0x5b, flags: 0x0}, + 532: {region: 0x166, script: 0x5b, flags: 0x0}, + 533: {region: 0x166, script: 0x5b, flags: 0x0}, + 534: {region: 0xd7, script: 0x5b, flags: 0x0}, + 535: {region: 0xa5, script: 0x5b, flags: 0x0}, + 536: {region: 0xc4, script: 0x5b, flags: 0x0}, + 537: {region: 0x107, script: 0x20, flags: 0x0}, + 538: {region: 0x166, script: 0x5b, flags: 0x0}, + 539: {region: 0x166, script: 0x5b, flags: 0x0}, + 540: {region: 0x166, script: 0x5b, flags: 0x0}, + 541: {region: 0x166, script: 0x5b, flags: 0x0}, + 542: {region: 0xd5, script: 0x5, flags: 0x0}, + 543: {region: 0xd7, script: 0x5b, flags: 0x0}, + 544: {region: 0x165, script: 0x5b, flags: 0x0}, + 545: {region: 0x166, script: 0x5b, flags: 0x0}, + 546: {region: 0x166, script: 0x5b, flags: 0x0}, + 547: {region: 0x130, script: 0x5b, flags: 0x0}, + 548: {region: 0x123, script: 0x5, flags: 0x0}, + 549: {region: 0x166, script: 0x5b, flags: 0x0}, + 550: {region: 0x124, script: 0xee, flags: 0x0}, + 551: {region: 0x5b, script: 0x5b, flags: 0x0}, + 552: {region: 0x52, script: 0x5b, flags: 0x0}, + 553: {region: 0x166, script: 0x5b, flags: 0x0}, + 554: {region: 0x4f, script: 0x5b, flags: 0x0}, + 555: {region: 0x9a, script: 0x22, flags: 0x0}, + 556: {region: 0x9a, script: 0x22, flags: 0x0}, + 557: {region: 0x4b, script: 0x5b, flags: 0x0}, + 558: {region: 0x96, script: 0x5b, flags: 0x0}, + 559: {region: 0x166, script: 0x5b, flags: 0x0}, + 560: {region: 0x41, script: 0x5b, flags: 0x0}, + 561: {region: 0x9a, script: 0x5b, flags: 0x0}, + 562: {region: 0x53, script: 0xe5, flags: 0x0}, + 563: {region: 0x9a, script: 0x22, flags: 0x0}, + 564: {region: 0xc4, script: 0x5b, flags: 0x0}, + 565: {region: 0x166, script: 0x5b, flags: 0x0}, + 566: {region: 0x9a, script: 0x76, flags: 0x0}, + 567: {region: 0xe9, script: 0x5, flags: 0x0}, + 568: {region: 0x166, script: 0x5b, flags: 0x0}, + 569: {region: 0xa5, script: 0x5b, flags: 0x0}, + 570: {region: 0x166, script: 0x5b, flags: 0x0}, + 571: {region: 0x12c, script: 0x5b, flags: 0x0}, + 572: {region: 0x166, script: 0x5b, flags: 0x0}, + 573: {region: 0xd3, script: 0x5b, flags: 0x0}, + 574: {region: 0x166, script: 0x5b, flags: 0x0}, + 575: {region: 0xb0, script: 0x58, flags: 0x0}, + 576: {region: 0x166, script: 0x5b, flags: 0x0}, + 577: {region: 0x166, script: 0x5b, flags: 0x0}, 578: {region: 0x13, script: 0x6, flags: 0x1}, - 579: {region: 0x165, script: 0x5a, flags: 0x0}, - 580: {region: 0x52, script: 0x5a, flags: 0x0}, - 581: {region: 0x82, script: 0x5a, flags: 0x0}, - 582: {region: 0xa4, script: 0x5a, flags: 0x0}, - 583: {region: 0x165, script: 0x5a, flags: 0x0}, - 584: {region: 0x165, script: 0x5a, flags: 0x0}, - 585: {region: 0x165, script: 0x5a, flags: 0x0}, - 586: {region: 0xa6, script: 0x4e, flags: 0x0}, - 587: {region: 0x2a, script: 0x5a, flags: 0x0}, - 588: {region: 0x165, script: 0x5a, flags: 0x0}, - 589: {region: 0x165, script: 0x5a, flags: 0x0}, - 590: {region: 0x165, script: 0x5a, flags: 0x0}, - 591: {region: 0x165, script: 0x5a, flags: 0x0}, - 592: {region: 0x165, script: 0x5a, flags: 0x0}, - 593: {region: 0x99, script: 0x52, flags: 0x0}, - 594: {region: 0x8b, script: 0x5a, flags: 0x0}, - 595: {region: 0x165, script: 0x5a, flags: 0x0}, - 596: {region: 0xab, script: 0x53, flags: 0x0}, - 597: {region: 0x106, script: 0x20, flags: 0x0}, - 598: {region: 0x99, script: 0x22, flags: 0x0}, - 599: {region: 0x165, script: 0x5a, flags: 0x0}, - 600: {region: 0x75, script: 0x5a, flags: 0x0}, - 601: {region: 0x165, script: 0x5a, flags: 0x0}, - 602: {region: 0xb4, script: 0x5a, flags: 0x0}, - 603: {region: 0x165, script: 0x5a, flags: 0x0}, - 604: {region: 0x165, script: 0x5a, flags: 0x0}, - 605: {region: 0x165, script: 0x5a, flags: 0x0}, - 606: {region: 0x165, script: 0x5a, flags: 0x0}, - 607: {region: 0x165, script: 0x5a, flags: 0x0}, - 608: {region: 0x165, script: 0x5a, flags: 0x0}, - 609: {region: 0x165, script: 0x5a, flags: 0x0}, - 610: {region: 0x165, script: 0x2c, flags: 0x0}, - 611: {region: 0x165, script: 0x5a, flags: 0x0}, - 612: {region: 0x106, script: 0x20, flags: 0x0}, - 613: {region: 0x112, script: 0x5a, flags: 0x0}, - 614: {region: 0xe7, script: 0x5a, flags: 0x0}, - 615: {region: 0x106, script: 0x5a, flags: 0x0}, - 616: {region: 0x165, script: 0x5a, flags: 0x0}, - 617: {region: 0x99, script: 0x22, flags: 0x0}, - 618: {region: 0x99, script: 0x5, flags: 0x0}, - 619: {region: 0x12f, script: 0x5a, flags: 0x0}, - 620: {region: 0x165, script: 0x5a, flags: 0x0}, - 621: {region: 0x52, script: 0x5a, flags: 0x0}, - 622: {region: 0x60, script: 0x5a, flags: 0x0}, - 623: {region: 0x165, script: 0x5a, flags: 0x0}, - 624: {region: 0x165, script: 0x5a, flags: 0x0}, - 625: {region: 0x165, script: 0x2c, flags: 0x0}, - 626: {region: 0x165, script: 0x5a, flags: 0x0}, - 627: {region: 0x165, script: 0x5a, flags: 0x0}, + 579: {region: 0x166, script: 0x5b, flags: 0x0}, + 580: {region: 0x52, script: 0x5b, flags: 0x0}, + 581: {region: 0x83, script: 0x5b, flags: 0x0}, + 582: {region: 0xa5, script: 0x5b, flags: 0x0}, + 583: {region: 0x166, script: 0x5b, flags: 0x0}, + 584: {region: 0x166, script: 0x5b, flags: 0x0}, + 585: {region: 0x166, script: 0x5b, flags: 0x0}, + 586: {region: 0xa7, script: 0x4f, flags: 0x0}, + 587: {region: 0x2a, script: 0x5b, flags: 0x0}, + 588: {region: 0x166, script: 0x5b, flags: 0x0}, + 589: {region: 0x166, script: 0x5b, flags: 0x0}, + 590: {region: 0x166, script: 0x5b, flags: 0x0}, + 591: {region: 0x166, script: 0x5b, flags: 0x0}, + 592: {region: 0x166, script: 0x5b, flags: 0x0}, + 593: {region: 0x9a, script: 0x53, flags: 0x0}, + 594: {region: 0x8c, script: 0x5b, flags: 0x0}, + 595: {region: 0x166, script: 0x5b, flags: 0x0}, + 596: {region: 0xac, script: 0x54, flags: 0x0}, + 597: {region: 0x107, script: 0x20, flags: 0x0}, + 598: {region: 0x9a, script: 0x22, flags: 0x0}, + 599: {region: 0x166, script: 0x5b, flags: 0x0}, + 600: {region: 0x76, script: 0x5b, flags: 0x0}, + 601: {region: 0x166, script: 0x5b, flags: 0x0}, + 602: {region: 0xb5, script: 0x5b, flags: 0x0}, + 603: {region: 0x166, script: 0x5b, flags: 0x0}, + 604: {region: 0x166, script: 0x5b, flags: 0x0}, + 605: {region: 0x166, script: 0x5b, flags: 0x0}, + 606: {region: 0x166, script: 0x5b, flags: 0x0}, + 607: {region: 0x166, script: 0x5b, flags: 0x0}, + 608: {region: 0x166, script: 0x5b, flags: 0x0}, + 609: {region: 0x166, script: 0x5b, flags: 0x0}, + 610: {region: 0x166, script: 0x2c, flags: 0x0}, + 611: {region: 0x166, script: 0x5b, flags: 0x0}, + 612: {region: 0x107, script: 0x20, flags: 0x0}, + 613: {region: 0x113, script: 0x5b, flags: 0x0}, + 614: {region: 0xe8, script: 0x5b, flags: 0x0}, + 615: {region: 0x107, script: 0x5b, flags: 0x0}, + 616: {region: 0x166, script: 0x5b, flags: 0x0}, + 617: {region: 0x9a, script: 0x22, flags: 0x0}, + 618: {region: 0x9a, script: 0x5, flags: 0x0}, + 619: {region: 0x130, script: 0x5b, flags: 0x0}, + 620: {region: 0x166, script: 0x5b, flags: 0x0}, + 621: {region: 0x52, script: 0x5b, flags: 0x0}, + 622: {region: 0x61, script: 0x5b, flags: 0x0}, + 623: {region: 0x166, script: 0x5b, flags: 0x0}, + 624: {region: 0x166, script: 0x5b, flags: 0x0}, + 625: {region: 0x166, script: 0x2c, flags: 0x0}, + 626: {region: 0x166, script: 0x5b, flags: 0x0}, + 627: {region: 0x166, script: 0x5b, flags: 0x0}, 628: {region: 0x19, script: 0x3, flags: 0x1}, - 629: {region: 0x165, script: 0x5a, flags: 0x0}, - 630: {region: 0x165, script: 0x5a, flags: 0x0}, - 631: {region: 0x165, script: 0x5a, flags: 0x0}, - 632: {region: 0x165, script: 0x5a, flags: 0x0}, - 633: {region: 0x106, script: 0x20, flags: 0x0}, - 634: {region: 0x165, script: 0x5a, flags: 0x0}, - 635: {region: 0x165, script: 0x5a, flags: 0x0}, - 636: {region: 0x165, script: 0x5a, flags: 0x0}, - 637: {region: 0x106, script: 0x20, flags: 0x0}, - 638: {region: 0x165, script: 0x5a, flags: 0x0}, - 639: {region: 0x95, script: 0x5a, flags: 0x0}, - 640: {region: 0xe8, script: 0x5, flags: 0x0}, - 641: {region: 0x7b, script: 0x5a, flags: 0x0}, - 642: {region: 0x165, script: 0x5a, flags: 0x0}, - 643: {region: 0x165, script: 0x5a, flags: 0x0}, - 644: {region: 0x165, script: 0x5a, flags: 0x0}, - 645: {region: 0x165, script: 0x2c, flags: 0x0}, - 646: {region: 0x123, script: 0xeb, flags: 0x0}, - 647: {region: 0xe8, script: 0x5, flags: 0x0}, - 648: {region: 0x165, script: 0x5a, flags: 0x0}, - 649: {region: 0x165, script: 0x5a, flags: 0x0}, + 629: {region: 0x166, script: 0x5b, flags: 0x0}, + 630: {region: 0x166, script: 0x5b, flags: 0x0}, + 631: {region: 0x166, script: 0x5b, flags: 0x0}, + 632: {region: 0x166, script: 0x5b, flags: 0x0}, + 633: {region: 0x107, script: 0x20, flags: 0x0}, + 634: {region: 0x166, script: 0x5b, flags: 0x0}, + 635: {region: 0x166, script: 0x5b, flags: 0x0}, + 636: {region: 0x166, script: 0x5b, flags: 0x0}, + 637: {region: 0x107, script: 0x20, flags: 0x0}, + 638: {region: 0x166, script: 0x5b, flags: 0x0}, + 639: {region: 0x96, script: 0x5b, flags: 0x0}, + 640: {region: 0xe9, script: 0x5, flags: 0x0}, + 641: {region: 0x7c, script: 0x5b, flags: 0x0}, + 642: {region: 0x166, script: 0x5b, flags: 0x0}, + 643: {region: 0x166, script: 0x5b, flags: 0x0}, + 644: {region: 0x166, script: 0x5b, flags: 0x0}, + 645: {region: 0x166, script: 0x2c, flags: 0x0}, + 646: {region: 0x124, script: 0xee, flags: 0x0}, + 647: {region: 0xe9, script: 0x5, flags: 0x0}, + 648: {region: 0x166, script: 0x5b, flags: 0x0}, + 649: {region: 0x166, script: 0x5b, flags: 0x0}, 650: {region: 0x1c, script: 0x5, flags: 0x1}, - 651: {region: 0x165, script: 0x5a, flags: 0x0}, - 652: {region: 0x165, script: 0x5a, flags: 0x0}, - 653: {region: 0x165, script: 0x5a, flags: 0x0}, - 654: {region: 0x138, script: 0x5a, flags: 0x0}, - 655: {region: 0x87, script: 0x5e, flags: 0x0}, - 656: {region: 0x97, script: 0x3e, flags: 0x0}, - 657: {region: 0x12f, script: 0x5a, flags: 0x0}, - 658: {region: 0xe8, script: 0x5, flags: 0x0}, - 659: {region: 0x131, script: 0x5a, flags: 0x0}, - 660: {region: 0x165, script: 0x5a, flags: 0x0}, - 661: {region: 0xb7, script: 0x5a, flags: 0x0}, - 662: {region: 0x106, script: 0x20, flags: 0x0}, - 663: {region: 0x165, script: 0x5a, flags: 0x0}, - 664: {region: 0x95, script: 0x5a, flags: 0x0}, - 665: {region: 0x165, script: 0x5a, flags: 0x0}, - 666: {region: 0x53, script: 0xeb, flags: 0x0}, - 667: {region: 0x165, script: 0x5a, flags: 0x0}, - 668: {region: 0x165, script: 0x5a, flags: 0x0}, - 669: {region: 0x165, script: 0x5a, flags: 0x0}, - 670: {region: 0x165, script: 0x5a, flags: 0x0}, - 671: {region: 0x99, script: 0x5c, flags: 0x0}, - 672: {region: 0x165, script: 0x5a, flags: 0x0}, - 673: {region: 0x165, script: 0x5a, flags: 0x0}, - 674: {region: 0x106, script: 0x20, flags: 0x0}, - 675: {region: 0x131, script: 0x5a, flags: 0x0}, - 676: {region: 0x165, script: 0x5a, flags: 0x0}, - 677: {region: 0xd9, script: 0x5a, flags: 0x0}, - 678: {region: 0x165, script: 0x5a, flags: 0x0}, - 679: {region: 0x165, script: 0x5a, flags: 0x0}, + 651: {region: 0x166, script: 0x5b, flags: 0x0}, + 652: {region: 0x166, script: 0x5b, flags: 0x0}, + 653: {region: 0x166, script: 0x5b, flags: 0x0}, + 654: {region: 0x139, script: 0x5b, flags: 0x0}, + 655: {region: 0x88, script: 0x5f, flags: 0x0}, + 656: {region: 0x98, script: 0x3e, flags: 0x0}, + 657: {region: 0x130, script: 0x5b, flags: 0x0}, + 658: {region: 0xe9, script: 0x5, flags: 0x0}, + 659: {region: 0x132, script: 0x5b, flags: 0x0}, + 660: {region: 0x166, script: 0x5b, flags: 0x0}, + 661: {region: 0xb8, script: 0x5b, flags: 0x0}, + 662: {region: 0x107, script: 0x20, flags: 0x0}, + 663: {region: 0x166, script: 0x5b, flags: 0x0}, + 664: {region: 0x96, script: 0x5b, flags: 0x0}, + 665: {region: 0x166, script: 0x5b, flags: 0x0}, + 666: {region: 0x53, script: 0xee, flags: 0x0}, + 667: {region: 0x166, script: 0x5b, flags: 0x0}, + 668: {region: 0x166, script: 0x5b, flags: 0x0}, + 669: {region: 0x166, script: 0x5b, flags: 0x0}, + 670: {region: 0x166, script: 0x5b, flags: 0x0}, + 671: {region: 0x9a, script: 0x5d, flags: 0x0}, + 672: {region: 0x166, script: 0x5b, flags: 0x0}, + 673: {region: 0x166, script: 0x5b, flags: 0x0}, + 674: {region: 0x107, script: 0x20, flags: 0x0}, + 675: {region: 0x132, script: 0x5b, flags: 0x0}, + 676: {region: 0x166, script: 0x5b, flags: 0x0}, + 677: {region: 0xda, script: 0x5b, flags: 0x0}, + 678: {region: 0x166, script: 0x5b, flags: 0x0}, + 679: {region: 0x166, script: 0x5b, flags: 0x0}, 680: {region: 0x21, script: 0x2, flags: 0x1}, - 681: {region: 0x165, script: 0x5a, flags: 0x0}, - 682: {region: 0x165, script: 0x5a, flags: 0x0}, - 683: {region: 0x9e, script: 0x5a, flags: 0x0}, - 684: {region: 0x53, script: 0x60, flags: 0x0}, - 685: {region: 0x95, script: 0x5a, flags: 0x0}, - 686: {region: 0x9c, script: 0x5, flags: 0x0}, - 687: {region: 0x135, script: 0x5a, flags: 0x0}, - 688: {region: 0x165, script: 0x5a, flags: 0x0}, - 689: {region: 0x165, script: 0x5a, flags: 0x0}, - 690: {region: 0x99, script: 0xe6, flags: 0x0}, - 691: {region: 0x9e, script: 0x5a, flags: 0x0}, - 692: {region: 0x165, script: 0x5a, flags: 0x0}, - 693: {region: 0x4b, script: 0x5a, flags: 0x0}, - 694: {region: 0x165, script: 0x5a, flags: 0x0}, - 695: {region: 0x165, script: 0x5a, flags: 0x0}, - 696: {region: 0xaf, script: 0x57, flags: 0x0}, - 697: {region: 0x165, script: 0x5a, flags: 0x0}, - 698: {region: 0x165, script: 0x5a, flags: 0x0}, - 699: {region: 0x4b, script: 0x5a, flags: 0x0}, - 700: {region: 0x165, script: 0x5a, flags: 0x0}, - 701: {region: 0x165, script: 0x5a, flags: 0x0}, - 702: {region: 0x162, script: 0x5a, flags: 0x0}, - 703: {region: 0x9c, script: 0x5, flags: 0x0}, - 704: {region: 0xb6, script: 0x5a, flags: 0x0}, - 705: {region: 0xb8, script: 0x5a, flags: 0x0}, - 706: {region: 0x4b, script: 0x5a, flags: 0x0}, - 707: {region: 0x4b, script: 0x5a, flags: 0x0}, - 708: {region: 0xa4, script: 0x5a, flags: 0x0}, - 709: {region: 0xa4, script: 0x5a, flags: 0x0}, - 710: {region: 0x9c, script: 0x5, flags: 0x0}, - 711: {region: 0xb8, script: 0x5a, flags: 0x0}, - 712: {region: 0x123, script: 0xeb, flags: 0x0}, + 681: {region: 0x166, script: 0x5b, flags: 0x0}, + 682: {region: 0x166, script: 0x5b, flags: 0x0}, + 683: {region: 0x9f, script: 0x5b, flags: 0x0}, + 684: {region: 0x53, script: 0x61, flags: 0x0}, + 685: {region: 0x96, script: 0x5b, flags: 0x0}, + 686: {region: 0x9d, script: 0x5, flags: 0x0}, + 687: {region: 0x136, script: 0x5b, flags: 0x0}, + 688: {region: 0x166, script: 0x5b, flags: 0x0}, + 689: {region: 0x166, script: 0x5b, flags: 0x0}, + 690: {region: 0x9a, script: 0xe9, flags: 0x0}, + 691: {region: 0x9f, script: 0x5b, flags: 0x0}, + 692: {region: 0x166, script: 0x5b, flags: 0x0}, + 693: {region: 0x4b, script: 0x5b, flags: 0x0}, + 694: {region: 0x166, script: 0x5b, flags: 0x0}, + 695: {region: 0x166, script: 0x5b, flags: 0x0}, + 696: {region: 0xb0, script: 0x58, flags: 0x0}, + 697: {region: 0x166, script: 0x5b, flags: 0x0}, + 698: {region: 0x166, script: 0x5b, flags: 0x0}, + 699: {region: 0x4b, script: 0x5b, flags: 0x0}, + 700: {region: 0x166, script: 0x5b, flags: 0x0}, + 701: {region: 0x166, script: 0x5b, flags: 0x0}, + 702: {region: 0x163, script: 0x5b, flags: 0x0}, + 703: {region: 0x9d, script: 0x5, flags: 0x0}, + 704: {region: 0xb7, script: 0x5b, flags: 0x0}, + 705: {region: 0xb9, script: 0x5b, flags: 0x0}, + 706: {region: 0x4b, script: 0x5b, flags: 0x0}, + 707: {region: 0x4b, script: 0x5b, flags: 0x0}, + 708: {region: 0xa5, script: 0x5b, flags: 0x0}, + 709: {region: 0xa5, script: 0x5b, flags: 0x0}, + 710: {region: 0x9d, script: 0x5, flags: 0x0}, + 711: {region: 0xb9, script: 0x5b, flags: 0x0}, + 712: {region: 0x124, script: 0xee, flags: 0x0}, 713: {region: 0x53, script: 0x3b, flags: 0x0}, - 714: {region: 0x12b, script: 0x5a, flags: 0x0}, - 715: {region: 0x95, script: 0x5a, flags: 0x0}, - 716: {region: 0x52, script: 0x5a, flags: 0x0}, - 717: {region: 0x99, script: 0x22, flags: 0x0}, - 718: {region: 0x99, script: 0x22, flags: 0x0}, - 719: {region: 0x95, script: 0x5a, flags: 0x0}, + 714: {region: 0x12c, script: 0x5b, flags: 0x0}, + 715: {region: 0x96, script: 0x5b, flags: 0x0}, + 716: {region: 0x52, script: 0x5b, flags: 0x0}, + 717: {region: 0x9a, script: 0x22, flags: 0x0}, + 718: {region: 0x9a, script: 0x22, flags: 0x0}, + 719: {region: 0x96, script: 0x5b, flags: 0x0}, 720: {region: 0x23, script: 0x3, flags: 0x1}, - 721: {region: 0xa4, script: 0x5a, flags: 0x0}, - 722: {region: 0x165, script: 0x5a, flags: 0x0}, - 723: {region: 0xcf, script: 0x5a, flags: 0x0}, - 724: {region: 0x165, script: 0x5a, flags: 0x0}, - 725: {region: 0x165, script: 0x5a, flags: 0x0}, - 726: {region: 0x165, script: 0x5a, flags: 0x0}, - 727: {region: 0x165, script: 0x5a, flags: 0x0}, - 728: {region: 0x165, script: 0x5a, flags: 0x0}, - 729: {region: 0x165, script: 0x5a, flags: 0x0}, - 730: {region: 0x165, script: 0x5a, flags: 0x0}, - 731: {region: 0x165, script: 0x5a, flags: 0x0}, - 732: {region: 0x165, script: 0x5a, flags: 0x0}, - 733: {region: 0x165, script: 0x5a, flags: 0x0}, - 734: {region: 0x165, script: 0x5a, flags: 0x0}, - 735: {region: 0x165, script: 0x5, flags: 0x0}, - 736: {region: 0x106, script: 0x20, flags: 0x0}, - 737: {region: 0xe7, script: 0x5a, flags: 0x0}, - 738: {region: 0x165, script: 0x5a, flags: 0x0}, - 739: {region: 0x95, script: 0x5a, flags: 0x0}, - 740: {region: 0x165, script: 0x2c, flags: 0x0}, - 741: {region: 0x165, script: 0x5a, flags: 0x0}, - 742: {region: 0x165, script: 0x5a, flags: 0x0}, - 743: {region: 0x165, script: 0x5a, flags: 0x0}, - 744: {region: 0x112, script: 0x5a, flags: 0x0}, - 745: {region: 0xa4, script: 0x5a, flags: 0x0}, - 746: {region: 0x165, script: 0x5a, flags: 0x0}, - 747: {region: 0x165, script: 0x5a, flags: 0x0}, - 748: {region: 0x123, script: 0x5, flags: 0x0}, - 749: {region: 0xcc, script: 0x5a, flags: 0x0}, - 750: {region: 0x165, script: 0x5a, flags: 0x0}, - 751: {region: 0x165, script: 0x5a, flags: 0x0}, - 752: {region: 0x165, script: 0x5a, flags: 0x0}, - 753: {region: 0xbf, script: 0x5a, flags: 0x0}, - 754: {region: 0xd1, script: 0x5a, flags: 0x0}, - 755: {region: 0x165, script: 0x5a, flags: 0x0}, - 756: {region: 0x52, script: 0x5a, flags: 0x0}, - 757: {region: 0xdb, script: 0x22, flags: 0x0}, - 758: {region: 0x12f, script: 0x5a, flags: 0x0}, - 759: {region: 0xc0, script: 0x5a, flags: 0x0}, - 760: {region: 0x165, script: 0x5a, flags: 0x0}, - 761: {region: 0x165, script: 0x5a, flags: 0x0}, - 762: {region: 0xe0, script: 0x5a, flags: 0x0}, - 763: {region: 0x165, script: 0x5a, flags: 0x0}, - 764: {region: 0x95, script: 0x5a, flags: 0x0}, - 765: {region: 0x9b, script: 0x3d, flags: 0x0}, - 766: {region: 0x165, script: 0x5a, flags: 0x0}, - 767: {region: 0xc2, script: 0x20, flags: 0x0}, - 768: {region: 0x165, script: 0x5, flags: 0x0}, - 769: {region: 0x165, script: 0x5a, flags: 0x0}, - 770: {region: 0x165, script: 0x5a, flags: 0x0}, - 771: {region: 0x165, script: 0x5a, flags: 0x0}, - 772: {region: 0x99, script: 0x6e, flags: 0x0}, - 773: {region: 0x165, script: 0x5a, flags: 0x0}, - 774: {region: 0x165, script: 0x5a, flags: 0x0}, - 775: {region: 0x10b, script: 0x5a, flags: 0x0}, - 776: {region: 0x165, script: 0x5a, flags: 0x0}, - 777: {region: 0x165, script: 0x5a, flags: 0x0}, - 778: {region: 0x165, script: 0x5a, flags: 0x0}, + 721: {region: 0xa5, script: 0x5b, flags: 0x0}, + 722: {region: 0x166, script: 0x5b, flags: 0x0}, + 723: {region: 0xd0, script: 0x5b, flags: 0x0}, + 724: {region: 0x166, script: 0x5b, flags: 0x0}, + 725: {region: 0x166, script: 0x5b, flags: 0x0}, + 726: {region: 0x166, script: 0x5b, flags: 0x0}, + 727: {region: 0x166, script: 0x5b, flags: 0x0}, + 728: {region: 0x166, script: 0x5b, flags: 0x0}, + 729: {region: 0x166, script: 0x5b, flags: 0x0}, + 730: {region: 0x166, script: 0x5b, flags: 0x0}, + 731: {region: 0x166, script: 0x5b, flags: 0x0}, + 732: {region: 0x166, script: 0x5b, flags: 0x0}, + 733: {region: 0x166, script: 0x5b, flags: 0x0}, + 734: {region: 0x166, script: 0x5b, flags: 0x0}, + 735: {region: 0x166, script: 0x5, flags: 0x0}, + 736: {region: 0x107, script: 0x20, flags: 0x0}, + 737: {region: 0xe8, script: 0x5b, flags: 0x0}, + 738: {region: 0x166, script: 0x5b, flags: 0x0}, + 739: {region: 0x96, script: 0x5b, flags: 0x0}, + 740: {region: 0x166, script: 0x2c, flags: 0x0}, + 741: {region: 0x166, script: 0x5b, flags: 0x0}, + 742: {region: 0x166, script: 0x5b, flags: 0x0}, + 743: {region: 0x166, script: 0x5b, flags: 0x0}, + 744: {region: 0x113, script: 0x5b, flags: 0x0}, + 745: {region: 0xa5, script: 0x5b, flags: 0x0}, + 746: {region: 0x166, script: 0x5b, flags: 0x0}, + 747: {region: 0x166, script: 0x5b, flags: 0x0}, + 748: {region: 0x124, script: 0x5, flags: 0x0}, + 749: {region: 0xcd, script: 0x5b, flags: 0x0}, + 750: {region: 0x166, script: 0x5b, flags: 0x0}, + 751: {region: 0x166, script: 0x5b, flags: 0x0}, + 752: {region: 0x166, script: 0x5b, flags: 0x0}, + 753: {region: 0xc0, script: 0x5b, flags: 0x0}, + 754: {region: 0xd2, script: 0x5b, flags: 0x0}, + 755: {region: 0x166, script: 0x5b, flags: 0x0}, + 756: {region: 0x52, script: 0x5b, flags: 0x0}, + 757: {region: 0xdc, script: 0x22, flags: 0x0}, + 758: {region: 0x130, script: 0x5b, flags: 0x0}, + 759: {region: 0xc1, script: 0x5b, flags: 0x0}, + 760: {region: 0x166, script: 0x5b, flags: 0x0}, + 761: {region: 0x166, script: 0x5b, flags: 0x0}, + 762: {region: 0xe1, script: 0x5b, flags: 0x0}, + 763: {region: 0x166, script: 0x5b, flags: 0x0}, + 764: {region: 0x96, script: 0x5b, flags: 0x0}, + 765: {region: 0x9c, script: 0x3d, flags: 0x0}, + 766: {region: 0x166, script: 0x5b, flags: 0x0}, + 767: {region: 0xc3, script: 0x20, flags: 0x0}, + 768: {region: 0x166, script: 0x5, flags: 0x0}, + 769: {region: 0x166, script: 0x5b, flags: 0x0}, + 770: {region: 0x166, script: 0x5b, flags: 0x0}, + 771: {region: 0x166, script: 0x5b, flags: 0x0}, + 772: {region: 0x9a, script: 0x6f, flags: 0x0}, + 773: {region: 0x166, script: 0x5b, flags: 0x0}, + 774: {region: 0x166, script: 0x5b, flags: 0x0}, + 775: {region: 0x10c, script: 0x5b, flags: 0x0}, + 776: {region: 0x166, script: 0x5b, flags: 0x0}, + 777: {region: 0x166, script: 0x5b, flags: 0x0}, + 778: {region: 0x166, script: 0x5b, flags: 0x0}, 779: {region: 0x26, script: 0x3, flags: 0x1}, - 780: {region: 0x165, script: 0x5a, flags: 0x0}, - 781: {region: 0x165, script: 0x5a, flags: 0x0}, - 782: {region: 0x99, script: 0xe, flags: 0x0}, - 783: {region: 0xc4, script: 0x75, flags: 0x0}, - 785: {region: 0x165, script: 0x5a, flags: 0x0}, - 786: {region: 0x49, script: 0x5a, flags: 0x0}, - 787: {region: 0x49, script: 0x5a, flags: 0x0}, - 788: {region: 0x37, script: 0x5a, flags: 0x0}, - 789: {region: 0x165, script: 0x5a, flags: 0x0}, - 790: {region: 0x165, script: 0x5a, flags: 0x0}, - 791: {region: 0x165, script: 0x5a, flags: 0x0}, - 792: {region: 0x165, script: 0x5a, flags: 0x0}, - 793: {region: 0x165, script: 0x5a, flags: 0x0}, - 794: {region: 0x165, script: 0x5a, flags: 0x0}, - 795: {region: 0x99, script: 0x22, flags: 0x0}, - 796: {region: 0xdb, script: 0x22, flags: 0x0}, - 797: {region: 0x106, script: 0x20, flags: 0x0}, - 798: {region: 0x35, script: 0x72, flags: 0x0}, + 780: {region: 0x166, script: 0x5b, flags: 0x0}, + 781: {region: 0x166, script: 0x5b, flags: 0x0}, + 782: {region: 0x9a, script: 0xe, flags: 0x0}, + 783: {region: 0xc5, script: 0x76, flags: 0x0}, + 785: {region: 0x166, script: 0x5b, flags: 0x0}, + 786: {region: 0x49, script: 0x5b, flags: 0x0}, + 787: {region: 0x49, script: 0x5b, flags: 0x0}, + 788: {region: 0x37, script: 0x5b, flags: 0x0}, + 789: {region: 0x166, script: 0x5b, flags: 0x0}, + 790: {region: 0x166, script: 0x5b, flags: 0x0}, + 791: {region: 0x166, script: 0x5b, flags: 0x0}, + 792: {region: 0x166, script: 0x5b, flags: 0x0}, + 793: {region: 0x166, script: 0x5b, flags: 0x0}, + 794: {region: 0x166, script: 0x5b, flags: 0x0}, + 795: {region: 0x9a, script: 0x22, flags: 0x0}, + 796: {region: 0xdc, script: 0x22, flags: 0x0}, + 797: {region: 0x107, script: 0x20, flags: 0x0}, + 798: {region: 0x35, script: 0x73, flags: 0x0}, 799: {region: 0x29, script: 0x3, flags: 0x1}, - 800: {region: 0xcb, script: 0x5a, flags: 0x0}, - 801: {region: 0x165, script: 0x5a, flags: 0x0}, - 802: {region: 0x165, script: 0x5a, flags: 0x0}, - 803: {region: 0x165, script: 0x5a, flags: 0x0}, - 804: {region: 0x99, script: 0x22, flags: 0x0}, - 805: {region: 0x52, script: 0x5a, flags: 0x0}, - 807: {region: 0x165, script: 0x5a, flags: 0x0}, - 808: {region: 0x135, script: 0x5a, flags: 0x0}, - 809: {region: 0x165, script: 0x5a, flags: 0x0}, - 810: {region: 0x165, script: 0x5a, flags: 0x0}, - 811: {region: 0xe8, script: 0x5, flags: 0x0}, - 812: {region: 0xc3, script: 0x5a, flags: 0x0}, - 813: {region: 0x99, script: 0x22, flags: 0x0}, - 814: {region: 0x95, script: 0x5a, flags: 0x0}, - 815: {region: 0x164, script: 0x5a, flags: 0x0}, - 816: {region: 0x165, script: 0x5a, flags: 0x0}, - 817: {region: 0xc4, script: 0x75, flags: 0x0}, - 818: {region: 0x165, script: 0x5a, flags: 0x0}, - 819: {region: 0x165, script: 0x2c, flags: 0x0}, - 820: {region: 0x106, script: 0x20, flags: 0x0}, - 821: {region: 0x165, script: 0x5a, flags: 0x0}, - 822: {region: 0x131, script: 0x5a, flags: 0x0}, - 823: {region: 0x9c, script: 0x66, flags: 0x0}, - 824: {region: 0x165, script: 0x5a, flags: 0x0}, - 825: {region: 0x165, script: 0x5a, flags: 0x0}, - 826: {region: 0x9c, script: 0x5, flags: 0x0}, - 827: {region: 0x165, script: 0x5a, flags: 0x0}, - 828: {region: 0x165, script: 0x5a, flags: 0x0}, - 829: {region: 0x165, script: 0x5a, flags: 0x0}, - 830: {region: 0xdd, script: 0x5a, flags: 0x0}, - 831: {region: 0x165, script: 0x5a, flags: 0x0}, - 832: {region: 0x165, script: 0x5a, flags: 0x0}, - 834: {region: 0x165, script: 0x5a, flags: 0x0}, + 800: {region: 0xcc, script: 0x5b, flags: 0x0}, + 801: {region: 0x166, script: 0x5b, flags: 0x0}, + 802: {region: 0x166, script: 0x5b, flags: 0x0}, + 803: {region: 0x166, script: 0x5b, flags: 0x0}, + 804: {region: 0x9a, script: 0x22, flags: 0x0}, + 805: {region: 0x52, script: 0x5b, flags: 0x0}, + 807: {region: 0x166, script: 0x5b, flags: 0x0}, + 808: {region: 0x136, script: 0x5b, flags: 0x0}, + 809: {region: 0x166, script: 0x5b, flags: 0x0}, + 810: {region: 0x166, script: 0x5b, flags: 0x0}, + 811: {region: 0xe9, script: 0x5, flags: 0x0}, + 812: {region: 0xc4, script: 0x5b, flags: 0x0}, + 813: {region: 0x9a, script: 0x22, flags: 0x0}, + 814: {region: 0x96, script: 0x5b, flags: 0x0}, + 815: {region: 0x165, script: 0x5b, flags: 0x0}, + 816: {region: 0x166, script: 0x5b, flags: 0x0}, + 817: {region: 0xc5, script: 0x76, flags: 0x0}, + 818: {region: 0x166, script: 0x5b, flags: 0x0}, + 819: {region: 0x166, script: 0x2c, flags: 0x0}, + 820: {region: 0x107, script: 0x20, flags: 0x0}, + 821: {region: 0x166, script: 0x5b, flags: 0x0}, + 822: {region: 0x132, script: 0x5b, flags: 0x0}, + 823: {region: 0x9d, script: 0x67, flags: 0x0}, + 824: {region: 0x166, script: 0x5b, flags: 0x0}, + 825: {region: 0x166, script: 0x5b, flags: 0x0}, + 826: {region: 0x9d, script: 0x5, flags: 0x0}, + 827: {region: 0x166, script: 0x5b, flags: 0x0}, + 828: {region: 0x166, script: 0x5b, flags: 0x0}, + 829: {region: 0x166, script: 0x5b, flags: 0x0}, + 830: {region: 0xde, script: 0x5b, flags: 0x0}, + 831: {region: 0x166, script: 0x5b, flags: 0x0}, + 832: {region: 0x166, script: 0x5b, flags: 0x0}, + 834: {region: 0x166, script: 0x5b, flags: 0x0}, 835: {region: 0x53, script: 0x3b, flags: 0x0}, - 836: {region: 0x9e, script: 0x5a, flags: 0x0}, - 837: {region: 0xd2, script: 0x5a, flags: 0x0}, - 838: {region: 0x165, script: 0x5a, flags: 0x0}, - 839: {region: 0xda, script: 0x5a, flags: 0x0}, - 840: {region: 0x165, script: 0x5a, flags: 0x0}, - 841: {region: 0x165, script: 0x5a, flags: 0x0}, - 842: {region: 0x165, script: 0x5a, flags: 0x0}, - 843: {region: 0xcf, script: 0x5a, flags: 0x0}, - 844: {region: 0x165, script: 0x5a, flags: 0x0}, - 845: {region: 0x165, script: 0x5a, flags: 0x0}, - 846: {region: 0x164, script: 0x5a, flags: 0x0}, - 847: {region: 0xd1, script: 0x5a, flags: 0x0}, - 848: {region: 0x60, script: 0x5a, flags: 0x0}, - 849: {region: 0xdb, script: 0x22, flags: 0x0}, - 850: {region: 0x165, script: 0x5a, flags: 0x0}, - 851: {region: 0xdb, script: 0x22, flags: 0x0}, - 852: {region: 0x165, script: 0x5a, flags: 0x0}, - 853: {region: 0x165, script: 0x5a, flags: 0x0}, - 854: {region: 0xd2, script: 0x5a, flags: 0x0}, - 855: {region: 0x165, script: 0x5a, flags: 0x0}, - 856: {region: 0x165, script: 0x5a, flags: 0x0}, - 857: {region: 0xd1, script: 0x5a, flags: 0x0}, - 858: {region: 0x165, script: 0x5a, flags: 0x0}, - 859: {region: 0xcf, script: 0x5a, flags: 0x0}, - 860: {region: 0xcf, script: 0x5a, flags: 0x0}, - 861: {region: 0x165, script: 0x5a, flags: 0x0}, - 862: {region: 0x165, script: 0x5a, flags: 0x0}, - 863: {region: 0x95, script: 0x5a, flags: 0x0}, - 864: {region: 0x165, script: 0x5a, flags: 0x0}, - 865: {region: 0xdf, script: 0x5a, flags: 0x0}, - 866: {region: 0x165, script: 0x5a, flags: 0x0}, - 867: {region: 0x165, script: 0x5a, flags: 0x0}, - 868: {region: 0x99, script: 0x5a, flags: 0x0}, - 869: {region: 0x165, script: 0x5a, flags: 0x0}, - 870: {region: 0x165, script: 0x5a, flags: 0x0}, - 871: {region: 0xd9, script: 0x5a, flags: 0x0}, - 872: {region: 0x52, script: 0x5a, flags: 0x0}, - 873: {region: 0x165, script: 0x5a, flags: 0x0}, - 874: {region: 0xda, script: 0x5a, flags: 0x0}, - 875: {region: 0x165, script: 0x5a, flags: 0x0}, - 876: {region: 0x52, script: 0x5a, flags: 0x0}, - 877: {region: 0x165, script: 0x5a, flags: 0x0}, - 878: {region: 0x165, script: 0x5a, flags: 0x0}, - 879: {region: 0xda, script: 0x5a, flags: 0x0}, - 880: {region: 0x123, script: 0x56, flags: 0x0}, - 881: {region: 0x99, script: 0x22, flags: 0x0}, - 882: {region: 0x10c, script: 0xc9, flags: 0x0}, - 883: {region: 0x165, script: 0x5a, flags: 0x0}, - 884: {region: 0x165, script: 0x5a, flags: 0x0}, - 885: {region: 0x84, script: 0x7c, flags: 0x0}, - 886: {region: 0x161, script: 0x5a, flags: 0x0}, - 887: {region: 0x165, script: 0x5a, flags: 0x0}, + 836: {region: 0x9f, script: 0x5b, flags: 0x0}, + 837: {region: 0xd3, script: 0x5b, flags: 0x0}, + 838: {region: 0x166, script: 0x5b, flags: 0x0}, + 839: {region: 0xdb, script: 0x5b, flags: 0x0}, + 840: {region: 0x166, script: 0x5b, flags: 0x0}, + 841: {region: 0x166, script: 0x5b, flags: 0x0}, + 842: {region: 0x166, script: 0x5b, flags: 0x0}, + 843: {region: 0xd0, script: 0x5b, flags: 0x0}, + 844: {region: 0x166, script: 0x5b, flags: 0x0}, + 845: {region: 0x166, script: 0x5b, flags: 0x0}, + 846: {region: 0x165, script: 0x5b, flags: 0x0}, + 847: {region: 0xd2, script: 0x5b, flags: 0x0}, + 848: {region: 0x61, script: 0x5b, flags: 0x0}, + 849: {region: 0xdc, script: 0x22, flags: 0x0}, + 850: {region: 0x166, script: 0x5b, flags: 0x0}, + 851: {region: 0xdc, script: 0x22, flags: 0x0}, + 852: {region: 0x166, script: 0x5b, flags: 0x0}, + 853: {region: 0x166, script: 0x5b, flags: 0x0}, + 854: {region: 0xd3, script: 0x5b, flags: 0x0}, + 855: {region: 0x166, script: 0x5b, flags: 0x0}, + 856: {region: 0x166, script: 0x5b, flags: 0x0}, + 857: {region: 0xd2, script: 0x5b, flags: 0x0}, + 858: {region: 0x166, script: 0x5b, flags: 0x0}, + 859: {region: 0xd0, script: 0x5b, flags: 0x0}, + 860: {region: 0xd0, script: 0x5b, flags: 0x0}, + 861: {region: 0x166, script: 0x5b, flags: 0x0}, + 862: {region: 0x166, script: 0x5b, flags: 0x0}, + 863: {region: 0x96, script: 0x5b, flags: 0x0}, + 864: {region: 0x166, script: 0x5b, flags: 0x0}, + 865: {region: 0xe0, script: 0x5b, flags: 0x0}, + 866: {region: 0x166, script: 0x5b, flags: 0x0}, + 867: {region: 0x166, script: 0x5b, flags: 0x0}, + 868: {region: 0x9a, script: 0x5b, flags: 0x0}, + 869: {region: 0x166, script: 0x5b, flags: 0x0}, + 870: {region: 0x166, script: 0x5b, flags: 0x0}, + 871: {region: 0xda, script: 0x5b, flags: 0x0}, + 872: {region: 0x52, script: 0x5b, flags: 0x0}, + 873: {region: 0x166, script: 0x5b, flags: 0x0}, + 874: {region: 0xdb, script: 0x5b, flags: 0x0}, + 875: {region: 0x166, script: 0x5b, flags: 0x0}, + 876: {region: 0x52, script: 0x5b, flags: 0x0}, + 877: {region: 0x166, script: 0x5b, flags: 0x0}, + 878: {region: 0x166, script: 0x5b, flags: 0x0}, + 879: {region: 0xdb, script: 0x5b, flags: 0x0}, + 880: {region: 0x124, script: 0x57, flags: 0x0}, + 881: {region: 0x9a, script: 0x22, flags: 0x0}, + 882: {region: 0x10d, script: 0xcb, flags: 0x0}, + 883: {region: 0x166, script: 0x5b, flags: 0x0}, + 884: {region: 0x166, script: 0x5b, flags: 0x0}, + 885: {region: 0x85, script: 0x7e, flags: 0x0}, + 886: {region: 0x162, script: 0x5b, flags: 0x0}, + 887: {region: 0x166, script: 0x5b, flags: 0x0}, 888: {region: 0x49, script: 0x17, flags: 0x0}, - 889: {region: 0x165, script: 0x5a, flags: 0x0}, - 890: {region: 0x161, script: 0x5a, flags: 0x0}, - 891: {region: 0x165, script: 0x5a, flags: 0x0}, - 892: {region: 0x165, script: 0x5a, flags: 0x0}, - 893: {region: 0x165, script: 0x5a, flags: 0x0}, - 894: {region: 0x165, script: 0x5a, flags: 0x0}, - 895: {region: 0x165, script: 0x5a, flags: 0x0}, - 896: {region: 0x117, script: 0x5a, flags: 0x0}, - 897: {region: 0x165, script: 0x5a, flags: 0x0}, - 898: {region: 0x165, script: 0x5a, flags: 0x0}, - 899: {region: 0x135, script: 0x5a, flags: 0x0}, - 900: {region: 0x165, script: 0x5a, flags: 0x0}, - 901: {region: 0x53, script: 0x5a, flags: 0x0}, - 902: {region: 0x165, script: 0x5a, flags: 0x0}, - 903: {region: 0xce, script: 0x5a, flags: 0x0}, - 904: {region: 0x12f, script: 0x5a, flags: 0x0}, - 905: {region: 0x131, script: 0x5a, flags: 0x0}, - 906: {region: 0x80, script: 0x5a, flags: 0x0}, - 907: {region: 0x78, script: 0x5a, flags: 0x0}, - 908: {region: 0x165, script: 0x5a, flags: 0x0}, - 910: {region: 0x165, script: 0x5a, flags: 0x0}, - 911: {region: 0x165, script: 0x5a, flags: 0x0}, - 912: {region: 0x6f, script: 0x5a, flags: 0x0}, - 913: {region: 0x165, script: 0x5a, flags: 0x0}, - 914: {region: 0x165, script: 0x5a, flags: 0x0}, - 915: {region: 0x165, script: 0x5a, flags: 0x0}, - 916: {region: 0x165, script: 0x5a, flags: 0x0}, - 917: {region: 0x99, script: 0x81, flags: 0x0}, - 918: {region: 0x165, script: 0x5a, flags: 0x0}, - 919: {region: 0x165, script: 0x5, flags: 0x0}, - 920: {region: 0x7d, script: 0x20, flags: 0x0}, - 921: {region: 0x135, script: 0x82, flags: 0x0}, - 922: {region: 0x165, script: 0x5, flags: 0x0}, - 923: {region: 0xc5, script: 0x80, flags: 0x0}, - 924: {region: 0x165, script: 0x5a, flags: 0x0}, + 889: {region: 0x166, script: 0x5b, flags: 0x0}, + 890: {region: 0x162, script: 0x5b, flags: 0x0}, + 891: {region: 0x166, script: 0x5b, flags: 0x0}, + 892: {region: 0x166, script: 0x5b, flags: 0x0}, + 893: {region: 0x166, script: 0x5b, flags: 0x0}, + 894: {region: 0x166, script: 0x5b, flags: 0x0}, + 895: {region: 0x166, script: 0x5b, flags: 0x0}, + 896: {region: 0x118, script: 0x5b, flags: 0x0}, + 897: {region: 0x166, script: 0x5b, flags: 0x0}, + 898: {region: 0x166, script: 0x5b, flags: 0x0}, + 899: {region: 0x136, script: 0x5b, flags: 0x0}, + 900: {region: 0x166, script: 0x5b, flags: 0x0}, + 901: {region: 0x53, script: 0x5b, flags: 0x0}, + 902: {region: 0x166, script: 0x5b, flags: 0x0}, + 903: {region: 0xcf, script: 0x5b, flags: 0x0}, + 904: {region: 0x130, script: 0x5b, flags: 0x0}, + 905: {region: 0x132, script: 0x5b, flags: 0x0}, + 906: {region: 0x81, script: 0x5b, flags: 0x0}, + 907: {region: 0x79, script: 0x5b, flags: 0x0}, + 908: {region: 0x166, script: 0x5b, flags: 0x0}, + 910: {region: 0x166, script: 0x5b, flags: 0x0}, + 911: {region: 0x166, script: 0x5b, flags: 0x0}, + 912: {region: 0x70, script: 0x5b, flags: 0x0}, + 913: {region: 0x166, script: 0x5b, flags: 0x0}, + 914: {region: 0x166, script: 0x5b, flags: 0x0}, + 915: {region: 0x166, script: 0x5b, flags: 0x0}, + 916: {region: 0x166, script: 0x5b, flags: 0x0}, + 917: {region: 0x9a, script: 0x83, flags: 0x0}, + 918: {region: 0x166, script: 0x5b, flags: 0x0}, + 919: {region: 0x166, script: 0x5, flags: 0x0}, + 920: {region: 0x7e, script: 0x20, flags: 0x0}, + 921: {region: 0x136, script: 0x84, flags: 0x0}, + 922: {region: 0x166, script: 0x5, flags: 0x0}, + 923: {region: 0xc6, script: 0x82, flags: 0x0}, + 924: {region: 0x166, script: 0x5b, flags: 0x0}, 925: {region: 0x2c, script: 0x3, flags: 0x1}, - 926: {region: 0xe7, script: 0x5a, flags: 0x0}, + 926: {region: 0xe8, script: 0x5b, flags: 0x0}, 927: {region: 0x2f, script: 0x2, flags: 0x1}, - 928: {region: 0xe7, script: 0x5a, flags: 0x0}, - 929: {region: 0x30, script: 0x5a, flags: 0x0}, - 930: {region: 0xf0, script: 0x5a, flags: 0x0}, - 931: {region: 0x165, script: 0x5a, flags: 0x0}, - 932: {region: 0x78, script: 0x5a, flags: 0x0}, - 933: {region: 0xd6, script: 0x5a, flags: 0x0}, - 934: {region: 0x135, script: 0x5a, flags: 0x0}, - 935: {region: 0x49, script: 0x5a, flags: 0x0}, - 936: {region: 0x165, script: 0x5a, flags: 0x0}, - 937: {region: 0x9c, script: 0xf7, flags: 0x0}, - 938: {region: 0x165, script: 0x5a, flags: 0x0}, - 939: {region: 0x60, script: 0x5a, flags: 0x0}, - 940: {region: 0x165, script: 0x5, flags: 0x0}, - 941: {region: 0xb0, script: 0x8e, flags: 0x0}, - 943: {region: 0x165, script: 0x5a, flags: 0x0}, - 944: {region: 0x165, script: 0x5a, flags: 0x0}, - 945: {region: 0x99, script: 0x12, flags: 0x0}, - 946: {region: 0xa4, script: 0x5a, flags: 0x0}, - 947: {region: 0xe9, script: 0x5a, flags: 0x0}, - 948: {region: 0x165, script: 0x5a, flags: 0x0}, - 949: {region: 0x9e, script: 0x5a, flags: 0x0}, - 950: {region: 0x165, script: 0x5a, flags: 0x0}, - 951: {region: 0x165, script: 0x5a, flags: 0x0}, - 952: {region: 0x87, script: 0x34, flags: 0x0}, - 953: {region: 0x75, script: 0x5a, flags: 0x0}, - 954: {region: 0x165, script: 0x5a, flags: 0x0}, - 955: {region: 0xe8, script: 0x4d, flags: 0x0}, - 956: {region: 0x9c, script: 0x5, flags: 0x0}, - 957: {region: 0x1, script: 0x5a, flags: 0x0}, + 928: {region: 0xe8, script: 0x5b, flags: 0x0}, + 929: {region: 0x30, script: 0x5b, flags: 0x0}, + 930: {region: 0xf1, script: 0x5b, flags: 0x0}, + 931: {region: 0x166, script: 0x5b, flags: 0x0}, + 932: {region: 0x79, script: 0x5b, flags: 0x0}, + 933: {region: 0xd7, script: 0x5b, flags: 0x0}, + 934: {region: 0x136, script: 0x5b, flags: 0x0}, + 935: {region: 0x49, script: 0x5b, flags: 0x0}, + 936: {region: 0x166, script: 0x5b, flags: 0x0}, + 937: {region: 0x9d, script: 0xfa, flags: 0x0}, + 938: {region: 0x166, script: 0x5b, flags: 0x0}, + 939: {region: 0x61, script: 0x5b, flags: 0x0}, + 940: {region: 0x166, script: 0x5, flags: 0x0}, + 941: {region: 0xb1, script: 0x90, flags: 0x0}, + 943: {region: 0x166, script: 0x5b, flags: 0x0}, + 944: {region: 0x166, script: 0x5b, flags: 0x0}, + 945: {region: 0x9a, script: 0x12, flags: 0x0}, + 946: {region: 0xa5, script: 0x5b, flags: 0x0}, + 947: {region: 0xea, script: 0x5b, flags: 0x0}, + 948: {region: 0x166, script: 0x5b, flags: 0x0}, + 949: {region: 0x9f, script: 0x5b, flags: 0x0}, + 950: {region: 0x166, script: 0x5b, flags: 0x0}, + 951: {region: 0x166, script: 0x5b, flags: 0x0}, + 952: {region: 0x88, script: 0x34, flags: 0x0}, + 953: {region: 0x76, script: 0x5b, flags: 0x0}, + 954: {region: 0x166, script: 0x5b, flags: 0x0}, + 955: {region: 0xe9, script: 0x4e, flags: 0x0}, + 956: {region: 0x9d, script: 0x5, flags: 0x0}, + 957: {region: 0x1, script: 0x5b, flags: 0x0}, 958: {region: 0x24, script: 0x5, flags: 0x0}, - 959: {region: 0x165, script: 0x5a, flags: 0x0}, - 960: {region: 0x41, script: 0x5a, flags: 0x0}, - 961: {region: 0x165, script: 0x5a, flags: 0x0}, - 962: {region: 0x7a, script: 0x5a, flags: 0x0}, - 963: {region: 0x165, script: 0x5a, flags: 0x0}, - 964: {region: 0xe4, script: 0x5a, flags: 0x0}, - 965: {region: 0x89, script: 0x5a, flags: 0x0}, - 966: {region: 0x69, script: 0x5a, flags: 0x0}, - 967: {region: 0x165, script: 0x5a, flags: 0x0}, - 968: {region: 0x99, script: 0x22, flags: 0x0}, - 969: {region: 0x165, script: 0x5a, flags: 0x0}, - 970: {region: 0x102, script: 0x5a, flags: 0x0}, - 971: {region: 0x95, script: 0x5a, flags: 0x0}, - 972: {region: 0x165, script: 0x5a, flags: 0x0}, - 973: {region: 0x165, script: 0x5a, flags: 0x0}, - 974: {region: 0x9e, script: 0x5a, flags: 0x0}, - 975: {region: 0x165, script: 0x5, flags: 0x0}, - 976: {region: 0x99, script: 0x5a, flags: 0x0}, + 959: {region: 0x166, script: 0x5b, flags: 0x0}, + 960: {region: 0x41, script: 0x5b, flags: 0x0}, + 961: {region: 0x166, script: 0x5b, flags: 0x0}, + 962: {region: 0x7b, script: 0x5b, flags: 0x0}, + 963: {region: 0x166, script: 0x5b, flags: 0x0}, + 964: {region: 0xe5, script: 0x5b, flags: 0x0}, + 965: {region: 0x8a, script: 0x5b, flags: 0x0}, + 966: {region: 0x6a, script: 0x5b, flags: 0x0}, + 967: {region: 0x166, script: 0x5b, flags: 0x0}, + 968: {region: 0x9a, script: 0x22, flags: 0x0}, + 969: {region: 0x166, script: 0x5b, flags: 0x0}, + 970: {region: 0x103, script: 0x5b, flags: 0x0}, + 971: {region: 0x96, script: 0x5b, flags: 0x0}, + 972: {region: 0x166, script: 0x5b, flags: 0x0}, + 973: {region: 0x166, script: 0x5b, flags: 0x0}, + 974: {region: 0x9f, script: 0x5b, flags: 0x0}, + 975: {region: 0x166, script: 0x5, flags: 0x0}, + 976: {region: 0x9a, script: 0x5b, flags: 0x0}, 977: {region: 0x31, script: 0x2, flags: 0x1}, - 978: {region: 0xdb, script: 0x22, flags: 0x0}, + 978: {region: 0xdc, script: 0x22, flags: 0x0}, 979: {region: 0x35, script: 0xe, flags: 0x0}, - 980: {region: 0x4e, script: 0x5a, flags: 0x0}, - 981: {region: 0x72, script: 0x5a, flags: 0x0}, - 982: {region: 0x4e, script: 0x5a, flags: 0x0}, - 983: {region: 0x9c, script: 0x5, flags: 0x0}, - 984: {region: 0x10c, script: 0x5a, flags: 0x0}, - 985: {region: 0x3a, script: 0x5a, flags: 0x0}, - 986: {region: 0x165, script: 0x5a, flags: 0x0}, - 987: {region: 0xd1, script: 0x5a, flags: 0x0}, - 988: {region: 0x104, script: 0x5a, flags: 0x0}, - 989: {region: 0x95, script: 0x5a, flags: 0x0}, - 990: {region: 0x12f, script: 0x5a, flags: 0x0}, - 991: {region: 0x165, script: 0x5a, flags: 0x0}, - 992: {region: 0x165, script: 0x5a, flags: 0x0}, - 993: {region: 0x73, script: 0x5a, flags: 0x0}, - 994: {region: 0x106, script: 0x20, flags: 0x0}, - 995: {region: 0x130, script: 0x20, flags: 0x0}, - 996: {region: 0x109, script: 0x5a, flags: 0x0}, - 997: {region: 0x107, script: 0x5a, flags: 0x0}, - 998: {region: 0x12f, script: 0x5a, flags: 0x0}, - 999: {region: 0x165, script: 0x5a, flags: 0x0}, - 1000: {region: 0xa2, script: 0x4c, flags: 0x0}, - 1001: {region: 0x99, script: 0x22, flags: 0x0}, - 1002: {region: 0x80, script: 0x5a, flags: 0x0}, - 1003: {region: 0x106, script: 0x20, flags: 0x0}, - 1004: {region: 0xa4, script: 0x5a, flags: 0x0}, - 1005: {region: 0x95, script: 0x5a, flags: 0x0}, - 1006: {region: 0x99, script: 0x5a, flags: 0x0}, - 1007: {region: 0x114, script: 0x5a, flags: 0x0}, - 1008: {region: 0x99, script: 0xcd, flags: 0x0}, - 1009: {region: 0x165, script: 0x5a, flags: 0x0}, - 1010: {region: 0x165, script: 0x5a, flags: 0x0}, - 1011: {region: 0x12f, script: 0x5a, flags: 0x0}, - 1012: {region: 0x9e, script: 0x5a, flags: 0x0}, - 1013: {region: 0x99, script: 0x22, flags: 0x0}, - 1014: {region: 0x165, script: 0x5, flags: 0x0}, - 1015: {region: 0x9e, script: 0x5a, flags: 0x0}, - 1016: {region: 0x7b, script: 0x5a, flags: 0x0}, - 1017: {region: 0x49, script: 0x5a, flags: 0x0}, + 980: {region: 0x4e, script: 0x5b, flags: 0x0}, + 981: {region: 0x73, script: 0x5b, flags: 0x0}, + 982: {region: 0x4e, script: 0x5b, flags: 0x0}, + 983: {region: 0x9d, script: 0x5, flags: 0x0}, + 984: {region: 0x10d, script: 0x5b, flags: 0x0}, + 985: {region: 0x3a, script: 0x5b, flags: 0x0}, + 986: {region: 0x166, script: 0x5b, flags: 0x0}, + 987: {region: 0xd2, script: 0x5b, flags: 0x0}, + 988: {region: 0x105, script: 0x5b, flags: 0x0}, + 989: {region: 0x96, script: 0x5b, flags: 0x0}, + 990: {region: 0x130, script: 0x5b, flags: 0x0}, + 991: {region: 0x166, script: 0x5b, flags: 0x0}, + 992: {region: 0x166, script: 0x5b, flags: 0x0}, + 993: {region: 0x74, script: 0x5b, flags: 0x0}, + 994: {region: 0x107, script: 0x20, flags: 0x0}, + 995: {region: 0x131, script: 0x20, flags: 0x0}, + 996: {region: 0x10a, script: 0x5b, flags: 0x0}, + 997: {region: 0x108, script: 0x5b, flags: 0x0}, + 998: {region: 0x130, script: 0x5b, flags: 0x0}, + 999: {region: 0x166, script: 0x5b, flags: 0x0}, + 1000: {region: 0xa3, script: 0x4c, flags: 0x0}, + 1001: {region: 0x9a, script: 0x22, flags: 0x0}, + 1002: {region: 0x81, script: 0x5b, flags: 0x0}, + 1003: {region: 0x107, script: 0x20, flags: 0x0}, + 1004: {region: 0xa5, script: 0x5b, flags: 0x0}, + 1005: {region: 0x96, script: 0x5b, flags: 0x0}, + 1006: {region: 0x9a, script: 0x5b, flags: 0x0}, + 1007: {region: 0x115, script: 0x5b, flags: 0x0}, + 1008: {region: 0x9a, script: 0xcf, flags: 0x0}, + 1009: {region: 0x166, script: 0x5b, flags: 0x0}, + 1010: {region: 0x166, script: 0x5b, flags: 0x0}, + 1011: {region: 0x130, script: 0x5b, flags: 0x0}, + 1012: {region: 0x9f, script: 0x5b, flags: 0x0}, + 1013: {region: 0x9a, script: 0x22, flags: 0x0}, + 1014: {region: 0x166, script: 0x5, flags: 0x0}, + 1015: {region: 0x9f, script: 0x5b, flags: 0x0}, + 1016: {region: 0x7c, script: 0x5b, flags: 0x0}, + 1017: {region: 0x49, script: 0x5b, flags: 0x0}, 1018: {region: 0x33, script: 0x4, flags: 0x1}, - 1019: {region: 0x9e, script: 0x5a, flags: 0x0}, - 1020: {region: 0x9c, script: 0x5, flags: 0x0}, - 1021: {region: 0xda, script: 0x5a, flags: 0x0}, - 1022: {region: 0x4f, script: 0x5a, flags: 0x0}, - 1023: {region: 0xd1, script: 0x5a, flags: 0x0}, - 1024: {region: 0xcf, script: 0x5a, flags: 0x0}, - 1025: {region: 0xc3, script: 0x5a, flags: 0x0}, - 1026: {region: 0x4c, script: 0x5a, flags: 0x0}, - 1027: {region: 0x96, script: 0x7e, flags: 0x0}, - 1028: {region: 0xb6, script: 0x5a, flags: 0x0}, - 1029: {region: 0x165, script: 0x2c, flags: 0x0}, - 1030: {region: 0x165, script: 0x5a, flags: 0x0}, - 1032: {region: 0xba, script: 0xe8, flags: 0x0}, - 1033: {region: 0x165, script: 0x5a, flags: 0x0}, - 1034: {region: 0xc4, script: 0x75, flags: 0x0}, - 1035: {region: 0x165, script: 0x5, flags: 0x0}, - 1036: {region: 0xb3, script: 0xd4, flags: 0x0}, - 1037: {region: 0x6f, script: 0x5a, flags: 0x0}, - 1038: {region: 0x165, script: 0x5a, flags: 0x0}, - 1039: {region: 0x165, script: 0x5a, flags: 0x0}, - 1040: {region: 0x165, script: 0x5a, flags: 0x0}, - 1041: {region: 0x165, script: 0x5a, flags: 0x0}, - 1042: {region: 0x111, script: 0x5a, flags: 0x0}, - 1043: {region: 0x165, script: 0x5a, flags: 0x0}, - 1044: {region: 0xe8, script: 0x5, flags: 0x0}, - 1045: {region: 0x165, script: 0x5a, flags: 0x0}, - 1046: {region: 0x10f, script: 0x5a, flags: 0x0}, - 1047: {region: 0x165, script: 0x5a, flags: 0x0}, - 1048: {region: 0xe9, script: 0x5a, flags: 0x0}, - 1049: {region: 0x165, script: 0x5a, flags: 0x0}, - 1050: {region: 0x95, script: 0x5a, flags: 0x0}, - 1051: {region: 0x142, script: 0x5a, flags: 0x0}, - 1052: {region: 0x10c, script: 0x5a, flags: 0x0}, - 1054: {region: 0x10c, script: 0x5a, flags: 0x0}, - 1055: {region: 0x72, script: 0x5a, flags: 0x0}, - 1056: {region: 0x97, script: 0xca, flags: 0x0}, - 1057: {region: 0x165, script: 0x5a, flags: 0x0}, - 1058: {region: 0x72, script: 0x5a, flags: 0x0}, - 1059: {region: 0x164, script: 0x5a, flags: 0x0}, - 1060: {region: 0x165, script: 0x5a, flags: 0x0}, - 1061: {region: 0xc3, script: 0x5a, flags: 0x0}, - 1062: {region: 0x165, script: 0x5a, flags: 0x0}, - 1063: {region: 0x165, script: 0x5a, flags: 0x0}, - 1064: {region: 0x165, script: 0x5a, flags: 0x0}, - 1065: {region: 0x115, script: 0x5a, flags: 0x0}, - 1066: {region: 0x165, script: 0x5a, flags: 0x0}, - 1067: {region: 0x165, script: 0x5a, flags: 0x0}, - 1068: {region: 0x123, script: 0xeb, flags: 0x0}, - 1069: {region: 0x165, script: 0x5a, flags: 0x0}, - 1070: {region: 0x165, script: 0x5a, flags: 0x0}, - 1071: {region: 0x165, script: 0x5a, flags: 0x0}, - 1072: {region: 0x165, script: 0x5a, flags: 0x0}, - 1073: {region: 0x27, script: 0x5a, flags: 0x0}, + 1019: {region: 0x9f, script: 0x5b, flags: 0x0}, + 1020: {region: 0x9d, script: 0x5, flags: 0x0}, + 1021: {region: 0xdb, script: 0x5b, flags: 0x0}, + 1022: {region: 0x4f, script: 0x5b, flags: 0x0}, + 1023: {region: 0xd2, script: 0x5b, flags: 0x0}, + 1024: {region: 0xd0, script: 0x5b, flags: 0x0}, + 1025: {region: 0xc4, script: 0x5b, flags: 0x0}, + 1026: {region: 0x4c, script: 0x5b, flags: 0x0}, + 1027: {region: 0x97, script: 0x80, flags: 0x0}, + 1028: {region: 0xb7, script: 0x5b, flags: 0x0}, + 1029: {region: 0x166, script: 0x2c, flags: 0x0}, + 1030: {region: 0x166, script: 0x5b, flags: 0x0}, + 1032: {region: 0xbb, script: 0xeb, flags: 0x0}, + 1033: {region: 0x166, script: 0x5b, flags: 0x0}, + 1034: {region: 0xc5, script: 0x76, flags: 0x0}, + 1035: {region: 0x166, script: 0x5, flags: 0x0}, + 1036: {region: 0xb4, script: 0xd6, flags: 0x0}, + 1037: {region: 0x70, script: 0x5b, flags: 0x0}, + 1038: {region: 0x166, script: 0x5b, flags: 0x0}, + 1039: {region: 0x166, script: 0x5b, flags: 0x0}, + 1040: {region: 0x166, script: 0x5b, flags: 0x0}, + 1041: {region: 0x166, script: 0x5b, flags: 0x0}, + 1042: {region: 0x112, script: 0x5b, flags: 0x0}, + 1043: {region: 0x166, script: 0x5b, flags: 0x0}, + 1044: {region: 0xe9, script: 0x5, flags: 0x0}, + 1045: {region: 0x166, script: 0x5b, flags: 0x0}, + 1046: {region: 0x110, script: 0x5b, flags: 0x0}, + 1047: {region: 0x166, script: 0x5b, flags: 0x0}, + 1048: {region: 0xea, script: 0x5b, flags: 0x0}, + 1049: {region: 0x166, script: 0x5b, flags: 0x0}, + 1050: {region: 0x96, script: 0x5b, flags: 0x0}, + 1051: {region: 0x143, script: 0x5b, flags: 0x0}, + 1052: {region: 0x10d, script: 0x5b, flags: 0x0}, + 1054: {region: 0x10d, script: 0x5b, flags: 0x0}, + 1055: {region: 0x73, script: 0x5b, flags: 0x0}, + 1056: {region: 0x98, script: 0xcc, flags: 0x0}, + 1057: {region: 0x166, script: 0x5b, flags: 0x0}, + 1058: {region: 0x73, script: 0x5b, flags: 0x0}, + 1059: {region: 0x165, script: 0x5b, flags: 0x0}, + 1060: {region: 0x166, script: 0x5b, flags: 0x0}, + 1061: {region: 0xc4, script: 0x5b, flags: 0x0}, + 1062: {region: 0x166, script: 0x5b, flags: 0x0}, + 1063: {region: 0x166, script: 0x5b, flags: 0x0}, + 1064: {region: 0x166, script: 0x5b, flags: 0x0}, + 1065: {region: 0x116, script: 0x5b, flags: 0x0}, + 1066: {region: 0x166, script: 0x5b, flags: 0x0}, + 1067: {region: 0x166, script: 0x5b, flags: 0x0}, + 1068: {region: 0x124, script: 0xee, flags: 0x0}, + 1069: {region: 0x166, script: 0x5b, flags: 0x0}, + 1070: {region: 0x166, script: 0x5b, flags: 0x0}, + 1071: {region: 0x166, script: 0x5b, flags: 0x0}, + 1072: {region: 0x166, script: 0x5b, flags: 0x0}, + 1073: {region: 0x27, script: 0x5b, flags: 0x0}, 1074: {region: 0x37, script: 0x5, flags: 0x1}, - 1075: {region: 0x99, script: 0xd7, flags: 0x0}, - 1076: {region: 0x116, script: 0x5a, flags: 0x0}, - 1077: {region: 0x114, script: 0x5a, flags: 0x0}, - 1078: {region: 0x99, script: 0x22, flags: 0x0}, - 1079: {region: 0x161, script: 0x5a, flags: 0x0}, - 1080: {region: 0x165, script: 0x5a, flags: 0x0}, - 1081: {region: 0x165, script: 0x5a, flags: 0x0}, - 1082: {region: 0x6d, script: 0x5a, flags: 0x0}, - 1083: {region: 0x161, script: 0x5a, flags: 0x0}, - 1084: {region: 0x165, script: 0x5a, flags: 0x0}, - 1085: {region: 0x60, script: 0x5a, flags: 0x0}, - 1086: {region: 0x95, script: 0x5a, flags: 0x0}, - 1087: {region: 0x165, script: 0x5a, flags: 0x0}, - 1088: {region: 0x165, script: 0x5a, flags: 0x0}, - 1089: {region: 0x12f, script: 0x5a, flags: 0x0}, - 1090: {region: 0x165, script: 0x5a, flags: 0x0}, - 1091: {region: 0x84, script: 0x5a, flags: 0x0}, - 1092: {region: 0x10c, script: 0x5a, flags: 0x0}, - 1093: {region: 0x12f, script: 0x5a, flags: 0x0}, - 1094: {region: 0x15f, script: 0x5, flags: 0x0}, - 1095: {region: 0x4b, script: 0x5a, flags: 0x0}, - 1096: {region: 0x60, script: 0x5a, flags: 0x0}, - 1097: {region: 0x165, script: 0x5a, flags: 0x0}, - 1098: {region: 0x99, script: 0x22, flags: 0x0}, - 1099: {region: 0x95, script: 0x5a, flags: 0x0}, - 1100: {region: 0x165, script: 0x5a, flags: 0x0}, + 1075: {region: 0x9a, script: 0xd9, flags: 0x0}, + 1076: {region: 0x117, script: 0x5b, flags: 0x0}, + 1077: {region: 0x115, script: 0x5b, flags: 0x0}, + 1078: {region: 0x9a, script: 0x22, flags: 0x0}, + 1079: {region: 0x162, script: 0x5b, flags: 0x0}, + 1080: {region: 0x166, script: 0x5b, flags: 0x0}, + 1081: {region: 0x166, script: 0x5b, flags: 0x0}, + 1082: {region: 0x6e, script: 0x5b, flags: 0x0}, + 1083: {region: 0x162, script: 0x5b, flags: 0x0}, + 1084: {region: 0x166, script: 0x5b, flags: 0x0}, + 1085: {region: 0x61, script: 0x5b, flags: 0x0}, + 1086: {region: 0x96, script: 0x5b, flags: 0x0}, + 1087: {region: 0x166, script: 0x5b, flags: 0x0}, + 1088: {region: 0x166, script: 0x5b, flags: 0x0}, + 1089: {region: 0x130, script: 0x5b, flags: 0x0}, + 1090: {region: 0x166, script: 0x5b, flags: 0x0}, + 1091: {region: 0x85, script: 0x5b, flags: 0x0}, + 1092: {region: 0x10d, script: 0x5b, flags: 0x0}, + 1093: {region: 0x130, script: 0x5b, flags: 0x0}, + 1094: {region: 0x160, script: 0x5, flags: 0x0}, + 1095: {region: 0x4b, script: 0x5b, flags: 0x0}, + 1096: {region: 0x61, script: 0x5b, flags: 0x0}, + 1097: {region: 0x166, script: 0x5b, flags: 0x0}, + 1098: {region: 0x9a, script: 0x22, flags: 0x0}, + 1099: {region: 0x96, script: 0x5b, flags: 0x0}, + 1100: {region: 0x166, script: 0x5b, flags: 0x0}, 1101: {region: 0x35, script: 0xe, flags: 0x0}, - 1102: {region: 0x9b, script: 0xdb, flags: 0x0}, - 1103: {region: 0xe9, script: 0x5a, flags: 0x0}, - 1104: {region: 0x99, script: 0xe3, flags: 0x0}, - 1105: {region: 0xdb, script: 0x22, flags: 0x0}, - 1106: {region: 0x165, script: 0x5a, flags: 0x0}, - 1107: {region: 0x165, script: 0x5a, flags: 0x0}, - 1108: {region: 0x165, script: 0x5a, flags: 0x0}, - 1109: {region: 0x165, script: 0x5a, flags: 0x0}, - 1110: {region: 0x165, script: 0x5a, flags: 0x0}, - 1111: {region: 0x165, script: 0x5a, flags: 0x0}, - 1112: {region: 0x165, script: 0x5a, flags: 0x0}, - 1113: {region: 0x165, script: 0x5a, flags: 0x0}, - 1114: {region: 0xe7, script: 0x5a, flags: 0x0}, - 1115: {region: 0x165, script: 0x5a, flags: 0x0}, - 1116: {region: 0x165, script: 0x5a, flags: 0x0}, - 1117: {region: 0x99, script: 0x52, flags: 0x0}, - 1118: {region: 0x53, script: 0xe1, flags: 0x0}, - 1119: {region: 0xdb, script: 0x22, flags: 0x0}, - 1120: {region: 0xdb, script: 0x22, flags: 0x0}, - 1121: {region: 0x99, script: 0xe6, flags: 0x0}, - 1122: {region: 0x165, script: 0x5a, flags: 0x0}, - 1123: {region: 0x112, script: 0x5a, flags: 0x0}, - 1124: {region: 0x131, script: 0x5a, flags: 0x0}, - 1125: {region: 0x126, script: 0x5a, flags: 0x0}, - 1126: {region: 0x165, script: 0x5a, flags: 0x0}, + 1102: {region: 0x9c, script: 0xde, flags: 0x0}, + 1103: {region: 0xea, script: 0x5b, flags: 0x0}, + 1104: {region: 0x9a, script: 0xe6, flags: 0x0}, + 1105: {region: 0xdc, script: 0x22, flags: 0x0}, + 1106: {region: 0x166, script: 0x5b, flags: 0x0}, + 1107: {region: 0x166, script: 0x5b, flags: 0x0}, + 1108: {region: 0x166, script: 0x5b, flags: 0x0}, + 1109: {region: 0x166, script: 0x5b, flags: 0x0}, + 1110: {region: 0x166, script: 0x5b, flags: 0x0}, + 1111: {region: 0x166, script: 0x5b, flags: 0x0}, + 1112: {region: 0x166, script: 0x5b, flags: 0x0}, + 1113: {region: 0x166, script: 0x5b, flags: 0x0}, + 1114: {region: 0xe8, script: 0x5b, flags: 0x0}, + 1115: {region: 0x166, script: 0x5b, flags: 0x0}, + 1116: {region: 0x166, script: 0x5b, flags: 0x0}, + 1117: {region: 0x9a, script: 0x53, flags: 0x0}, + 1118: {region: 0x53, script: 0xe4, flags: 0x0}, + 1119: {region: 0xdc, script: 0x22, flags: 0x0}, + 1120: {region: 0xdc, script: 0x22, flags: 0x0}, + 1121: {region: 0x9a, script: 0xe9, flags: 0x0}, + 1122: {region: 0x166, script: 0x5b, flags: 0x0}, + 1123: {region: 0x113, script: 0x5b, flags: 0x0}, + 1124: {region: 0x132, script: 0x5b, flags: 0x0}, + 1125: {region: 0x127, script: 0x5b, flags: 0x0}, + 1126: {region: 0x166, script: 0x5b, flags: 0x0}, 1127: {region: 0x3c, script: 0x3, flags: 0x1}, - 1128: {region: 0x165, script: 0x5a, flags: 0x0}, - 1129: {region: 0x165, script: 0x5a, flags: 0x0}, - 1130: {region: 0x165, script: 0x5a, flags: 0x0}, - 1131: {region: 0x123, script: 0xeb, flags: 0x0}, - 1132: {region: 0xdb, script: 0x22, flags: 0x0}, - 1133: {region: 0xdb, script: 0x22, flags: 0x0}, - 1134: {region: 0xdb, script: 0x22, flags: 0x0}, - 1135: {region: 0x6f, script: 0x2c, flags: 0x0}, - 1136: {region: 0x165, script: 0x5a, flags: 0x0}, - 1137: {region: 0x6d, script: 0x2c, flags: 0x0}, - 1138: {region: 0x165, script: 0x5a, flags: 0x0}, - 1139: {region: 0x165, script: 0x5a, flags: 0x0}, - 1140: {region: 0x165, script: 0x5a, flags: 0x0}, - 1141: {region: 0xd6, script: 0x5a, flags: 0x0}, - 1142: {region: 0x127, script: 0x5a, flags: 0x0}, - 1143: {region: 0x125, script: 0x5a, flags: 0x0}, - 1144: {region: 0x32, script: 0x5a, flags: 0x0}, - 1145: {region: 0xdb, script: 0x22, flags: 0x0}, - 1146: {region: 0xe7, script: 0x5a, flags: 0x0}, - 1147: {region: 0x165, script: 0x5a, flags: 0x0}, - 1148: {region: 0x165, script: 0x5a, flags: 0x0}, - 1149: {region: 0x32, script: 0x5a, flags: 0x0}, - 1150: {region: 0xd4, script: 0x5a, flags: 0x0}, - 1151: {region: 0x165, script: 0x5a, flags: 0x0}, - 1152: {region: 0x161, script: 0x5a, flags: 0x0}, - 1153: {region: 0x165, script: 0x5a, flags: 0x0}, - 1154: {region: 0x129, script: 0x5a, flags: 0x0}, - 1155: {region: 0x165, script: 0x5a, flags: 0x0}, - 1156: {region: 0xce, script: 0x5a, flags: 0x0}, - 1157: {region: 0x165, script: 0x5a, flags: 0x0}, - 1158: {region: 0xe6, script: 0x5a, flags: 0x0}, - 1159: {region: 0x165, script: 0x5a, flags: 0x0}, - 1160: {region: 0x165, script: 0x5a, flags: 0x0}, - 1161: {region: 0x165, script: 0x5a, flags: 0x0}, - 1162: {region: 0x12b, script: 0x5a, flags: 0x0}, - 1163: {region: 0x12b, script: 0x5a, flags: 0x0}, - 1164: {region: 0x12e, script: 0x5a, flags: 0x0}, - 1165: {region: 0x165, script: 0x5, flags: 0x0}, - 1166: {region: 0x161, script: 0x5a, flags: 0x0}, - 1167: {region: 0x87, script: 0x34, flags: 0x0}, - 1168: {region: 0xdb, script: 0x22, flags: 0x0}, - 1169: {region: 0xe7, script: 0x5a, flags: 0x0}, - 1170: {region: 0x43, script: 0xec, flags: 0x0}, - 1171: {region: 0x165, script: 0x5a, flags: 0x0}, - 1172: {region: 0x106, script: 0x20, flags: 0x0}, - 1173: {region: 0x165, script: 0x5a, flags: 0x0}, - 1174: {region: 0x165, script: 0x5a, flags: 0x0}, - 1175: {region: 0x131, script: 0x5a, flags: 0x0}, - 1176: {region: 0x165, script: 0x5a, flags: 0x0}, - 1177: {region: 0x123, script: 0xeb, flags: 0x0}, - 1178: {region: 0x32, script: 0x5a, flags: 0x0}, - 1179: {region: 0x165, script: 0x5a, flags: 0x0}, - 1180: {region: 0x165, script: 0x5a, flags: 0x0}, - 1181: {region: 0xce, script: 0x5a, flags: 0x0}, - 1182: {region: 0x165, script: 0x5a, flags: 0x0}, - 1183: {region: 0x165, script: 0x5a, flags: 0x0}, - 1184: {region: 0x12d, script: 0x5a, flags: 0x0}, - 1185: {region: 0x165, script: 0x5a, flags: 0x0}, - 1187: {region: 0x165, script: 0x5a, flags: 0x0}, - 1188: {region: 0xd4, script: 0x5a, flags: 0x0}, - 1189: {region: 0x53, script: 0xe4, flags: 0x0}, - 1190: {region: 0xe5, script: 0x5a, flags: 0x0}, - 1191: {region: 0x165, script: 0x5a, flags: 0x0}, - 1192: {region: 0x106, script: 0x20, flags: 0x0}, - 1193: {region: 0xba, script: 0x5a, flags: 0x0}, - 1194: {region: 0x165, script: 0x5a, flags: 0x0}, - 1195: {region: 0x106, script: 0x20, flags: 0x0}, + 1128: {region: 0x166, script: 0x5b, flags: 0x0}, + 1129: {region: 0x166, script: 0x5b, flags: 0x0}, + 1130: {region: 0x166, script: 0x5b, flags: 0x0}, + 1131: {region: 0x124, script: 0xee, flags: 0x0}, + 1132: {region: 0xdc, script: 0x22, flags: 0x0}, + 1133: {region: 0xdc, script: 0x22, flags: 0x0}, + 1134: {region: 0xdc, script: 0x22, flags: 0x0}, + 1135: {region: 0x70, script: 0x2c, flags: 0x0}, + 1136: {region: 0x166, script: 0x5b, flags: 0x0}, + 1137: {region: 0x6e, script: 0x2c, flags: 0x0}, + 1138: {region: 0x166, script: 0x5b, flags: 0x0}, + 1139: {region: 0x166, script: 0x5b, flags: 0x0}, + 1140: {region: 0x166, script: 0x5b, flags: 0x0}, + 1141: {region: 0xd7, script: 0x5b, flags: 0x0}, + 1142: {region: 0x128, script: 0x5b, flags: 0x0}, + 1143: {region: 0x126, script: 0x5b, flags: 0x0}, + 1144: {region: 0x32, script: 0x5b, flags: 0x0}, + 1145: {region: 0xdc, script: 0x22, flags: 0x0}, + 1146: {region: 0xe8, script: 0x5b, flags: 0x0}, + 1147: {region: 0x166, script: 0x5b, flags: 0x0}, + 1148: {region: 0x166, script: 0x5b, flags: 0x0}, + 1149: {region: 0x32, script: 0x5b, flags: 0x0}, + 1150: {region: 0xd5, script: 0x5b, flags: 0x0}, + 1151: {region: 0x166, script: 0x5b, flags: 0x0}, + 1152: {region: 0x162, script: 0x5b, flags: 0x0}, + 1153: {region: 0x166, script: 0x5b, flags: 0x0}, + 1154: {region: 0x12a, script: 0x5b, flags: 0x0}, + 1155: {region: 0x166, script: 0x5b, flags: 0x0}, + 1156: {region: 0xcf, script: 0x5b, flags: 0x0}, + 1157: {region: 0x166, script: 0x5b, flags: 0x0}, + 1158: {region: 0xe7, script: 0x5b, flags: 0x0}, + 1159: {region: 0x166, script: 0x5b, flags: 0x0}, + 1160: {region: 0x166, script: 0x5b, flags: 0x0}, + 1161: {region: 0x166, script: 0x5b, flags: 0x0}, + 1162: {region: 0x12c, script: 0x5b, flags: 0x0}, + 1163: {region: 0x12c, script: 0x5b, flags: 0x0}, + 1164: {region: 0x12f, script: 0x5b, flags: 0x0}, + 1165: {region: 0x166, script: 0x5, flags: 0x0}, + 1166: {region: 0x162, script: 0x5b, flags: 0x0}, + 1167: {region: 0x88, script: 0x34, flags: 0x0}, + 1168: {region: 0xdc, script: 0x22, flags: 0x0}, + 1169: {region: 0xe8, script: 0x5b, flags: 0x0}, + 1170: {region: 0x43, script: 0xef, flags: 0x0}, + 1171: {region: 0x166, script: 0x5b, flags: 0x0}, + 1172: {region: 0x107, script: 0x20, flags: 0x0}, + 1173: {region: 0x166, script: 0x5b, flags: 0x0}, + 1174: {region: 0x166, script: 0x5b, flags: 0x0}, + 1175: {region: 0x132, script: 0x5b, flags: 0x0}, + 1176: {region: 0x166, script: 0x5b, flags: 0x0}, + 1177: {region: 0x124, script: 0xee, flags: 0x0}, + 1178: {region: 0x32, script: 0x5b, flags: 0x0}, + 1179: {region: 0x166, script: 0x5b, flags: 0x0}, + 1180: {region: 0x166, script: 0x5b, flags: 0x0}, + 1181: {region: 0xcf, script: 0x5b, flags: 0x0}, + 1182: {region: 0x166, script: 0x5b, flags: 0x0}, + 1183: {region: 0x166, script: 0x5b, flags: 0x0}, + 1184: {region: 0x12e, script: 0x5b, flags: 0x0}, + 1185: {region: 0x166, script: 0x5b, flags: 0x0}, + 1187: {region: 0x166, script: 0x5b, flags: 0x0}, + 1188: {region: 0xd5, script: 0x5b, flags: 0x0}, + 1189: {region: 0x53, script: 0xe7, flags: 0x0}, + 1190: {region: 0xe6, script: 0x5b, flags: 0x0}, + 1191: {region: 0x166, script: 0x5b, flags: 0x0}, + 1192: {region: 0x107, script: 0x20, flags: 0x0}, + 1193: {region: 0xbb, script: 0x5b, flags: 0x0}, + 1194: {region: 0x166, script: 0x5b, flags: 0x0}, + 1195: {region: 0x107, script: 0x20, flags: 0x0}, 1196: {region: 0x3f, script: 0x4, flags: 0x1}, - 1197: {region: 0x11c, script: 0xf0, flags: 0x0}, - 1198: {region: 0x130, script: 0x20, flags: 0x0}, - 1199: {region: 0x75, script: 0x5a, flags: 0x0}, - 1200: {region: 0x2a, script: 0x5a, flags: 0x0}, + 1197: {region: 0x11d, script: 0xf3, flags: 0x0}, + 1198: {region: 0x131, script: 0x20, flags: 0x0}, + 1199: {region: 0x76, script: 0x5b, flags: 0x0}, + 1200: {region: 0x2a, script: 0x5b, flags: 0x0}, 1202: {region: 0x43, script: 0x3, flags: 0x1}, - 1203: {region: 0x99, script: 0xe, flags: 0x0}, - 1204: {region: 0xe8, script: 0x5, flags: 0x0}, - 1205: {region: 0x165, script: 0x5a, flags: 0x0}, - 1206: {region: 0x165, script: 0x5a, flags: 0x0}, - 1207: {region: 0x165, script: 0x5a, flags: 0x0}, - 1208: {region: 0x165, script: 0x5a, flags: 0x0}, - 1209: {region: 0x165, script: 0x5a, flags: 0x0}, - 1210: {region: 0x165, script: 0x5a, flags: 0x0}, - 1211: {region: 0x165, script: 0x5a, flags: 0x0}, + 1203: {region: 0x9a, script: 0xe, flags: 0x0}, + 1204: {region: 0xe9, script: 0x5, flags: 0x0}, + 1205: {region: 0x166, script: 0x5b, flags: 0x0}, + 1206: {region: 0x166, script: 0x5b, flags: 0x0}, + 1207: {region: 0x166, script: 0x5b, flags: 0x0}, + 1208: {region: 0x166, script: 0x5b, flags: 0x0}, + 1209: {region: 0x166, script: 0x5b, flags: 0x0}, + 1210: {region: 0x166, script: 0x5b, flags: 0x0}, + 1211: {region: 0x166, script: 0x5b, flags: 0x0}, 1212: {region: 0x46, script: 0x4, flags: 0x1}, - 1213: {region: 0x165, script: 0x5a, flags: 0x0}, - 1214: {region: 0xb4, script: 0xf1, flags: 0x0}, - 1215: {region: 0x165, script: 0x5a, flags: 0x0}, - 1216: {region: 0x161, script: 0x5a, flags: 0x0}, - 1217: {region: 0x9e, script: 0x5a, flags: 0x0}, - 1218: {region: 0x106, script: 0x5a, flags: 0x0}, - 1219: {region: 0x13e, script: 0x5a, flags: 0x0}, - 1220: {region: 0x11b, script: 0x5a, flags: 0x0}, - 1221: {region: 0x165, script: 0x5a, flags: 0x0}, - 1222: {region: 0x36, script: 0x5a, flags: 0x0}, - 1223: {region: 0x60, script: 0x5a, flags: 0x0}, - 1224: {region: 0xd1, script: 0x5a, flags: 0x0}, - 1225: {region: 0x1, script: 0x5a, flags: 0x0}, - 1226: {region: 0x106, script: 0x5a, flags: 0x0}, - 1227: {region: 0x6a, script: 0x5a, flags: 0x0}, - 1228: {region: 0x12f, script: 0x5a, flags: 0x0}, - 1229: {region: 0x165, script: 0x5a, flags: 0x0}, - 1230: {region: 0x36, script: 0x5a, flags: 0x0}, - 1231: {region: 0x4e, script: 0x5a, flags: 0x0}, - 1232: {region: 0x165, script: 0x5a, flags: 0x0}, - 1233: {region: 0x6f, script: 0x2c, flags: 0x0}, - 1234: {region: 0x165, script: 0x5a, flags: 0x0}, - 1235: {region: 0xe7, script: 0x5a, flags: 0x0}, - 1236: {region: 0x2f, script: 0x5a, flags: 0x0}, - 1237: {region: 0x99, script: 0xe6, flags: 0x0}, - 1238: {region: 0x99, script: 0x22, flags: 0x0}, - 1239: {region: 0x165, script: 0x5a, flags: 0x0}, - 1240: {region: 0x165, script: 0x5a, flags: 0x0}, - 1241: {region: 0x165, script: 0x5a, flags: 0x0}, - 1242: {region: 0x165, script: 0x5a, flags: 0x0}, - 1243: {region: 0x165, script: 0x5a, flags: 0x0}, - 1244: {region: 0x165, script: 0x5a, flags: 0x0}, - 1245: {region: 0x165, script: 0x5a, flags: 0x0}, - 1246: {region: 0x165, script: 0x5a, flags: 0x0}, - 1247: {region: 0x165, script: 0x5a, flags: 0x0}, - 1248: {region: 0x140, script: 0x5a, flags: 0x0}, - 1249: {region: 0x165, script: 0x5a, flags: 0x0}, - 1250: {region: 0x165, script: 0x5a, flags: 0x0}, - 1251: {region: 0xa8, script: 0x5, flags: 0x0}, - 1252: {region: 0x165, script: 0x5a, flags: 0x0}, - 1253: {region: 0x114, script: 0x5a, flags: 0x0}, - 1254: {region: 0x165, script: 0x5a, flags: 0x0}, - 1255: {region: 0x165, script: 0x5a, flags: 0x0}, - 1256: {region: 0x165, script: 0x5a, flags: 0x0}, - 1257: {region: 0x165, script: 0x5a, flags: 0x0}, - 1258: {region: 0x99, script: 0x22, flags: 0x0}, + 1213: {region: 0x166, script: 0x5b, flags: 0x0}, + 1214: {region: 0xb5, script: 0xf4, flags: 0x0}, + 1215: {region: 0x166, script: 0x5b, flags: 0x0}, + 1216: {region: 0x162, script: 0x5b, flags: 0x0}, + 1217: {region: 0x9f, script: 0x5b, flags: 0x0}, + 1218: {region: 0x107, script: 0x5b, flags: 0x0}, + 1219: {region: 0x13f, script: 0x5b, flags: 0x0}, + 1220: {region: 0x11c, script: 0x5b, flags: 0x0}, + 1221: {region: 0x166, script: 0x5b, flags: 0x0}, + 1222: {region: 0x36, script: 0x5b, flags: 0x0}, + 1223: {region: 0x61, script: 0x5b, flags: 0x0}, + 1224: {region: 0xd2, script: 0x5b, flags: 0x0}, + 1225: {region: 0x1, script: 0x5b, flags: 0x0}, + 1226: {region: 0x107, script: 0x5b, flags: 0x0}, + 1227: {region: 0x6b, script: 0x5b, flags: 0x0}, + 1228: {region: 0x130, script: 0x5b, flags: 0x0}, + 1229: {region: 0x166, script: 0x5b, flags: 0x0}, + 1230: {region: 0x36, script: 0x5b, flags: 0x0}, + 1231: {region: 0x4e, script: 0x5b, flags: 0x0}, + 1232: {region: 0x166, script: 0x5b, flags: 0x0}, + 1233: {region: 0x70, script: 0x2c, flags: 0x0}, + 1234: {region: 0x166, script: 0x5b, flags: 0x0}, + 1235: {region: 0xe8, script: 0x5b, flags: 0x0}, + 1236: {region: 0x2f, script: 0x5b, flags: 0x0}, + 1237: {region: 0x9a, script: 0xe9, flags: 0x0}, + 1238: {region: 0x9a, script: 0x22, flags: 0x0}, + 1239: {region: 0x166, script: 0x5b, flags: 0x0}, + 1240: {region: 0x166, script: 0x5b, flags: 0x0}, + 1241: {region: 0x166, script: 0x5b, flags: 0x0}, + 1242: {region: 0x166, script: 0x5b, flags: 0x0}, + 1243: {region: 0x166, script: 0x5b, flags: 0x0}, + 1244: {region: 0x166, script: 0x5b, flags: 0x0}, + 1245: {region: 0x166, script: 0x5b, flags: 0x0}, + 1246: {region: 0x166, script: 0x5b, flags: 0x0}, + 1247: {region: 0x166, script: 0x5b, flags: 0x0}, + 1248: {region: 0x141, script: 0x5b, flags: 0x0}, + 1249: {region: 0x166, script: 0x5b, flags: 0x0}, + 1250: {region: 0x166, script: 0x5b, flags: 0x0}, + 1251: {region: 0xa9, script: 0x5, flags: 0x0}, + 1252: {region: 0x166, script: 0x5b, flags: 0x0}, + 1253: {region: 0x115, script: 0x5b, flags: 0x0}, + 1254: {region: 0x166, script: 0x5b, flags: 0x0}, + 1255: {region: 0x166, script: 0x5b, flags: 0x0}, + 1256: {region: 0x166, script: 0x5b, flags: 0x0}, + 1257: {region: 0x166, script: 0x5b, flags: 0x0}, + 1258: {region: 0x9a, script: 0x22, flags: 0x0}, 1259: {region: 0x53, script: 0x3b, flags: 0x0}, - 1260: {region: 0x165, script: 0x5a, flags: 0x0}, - 1261: {region: 0x165, script: 0x5a, flags: 0x0}, - 1262: {region: 0x41, script: 0x5a, flags: 0x0}, - 1263: {region: 0x165, script: 0x5a, flags: 0x0}, - 1264: {region: 0x12b, script: 0x18, flags: 0x0}, - 1265: {region: 0x165, script: 0x5a, flags: 0x0}, - 1266: {region: 0x161, script: 0x5a, flags: 0x0}, - 1267: {region: 0x165, script: 0x5a, flags: 0x0}, - 1268: {region: 0x12b, script: 0x62, flags: 0x0}, - 1269: {region: 0x12b, script: 0x63, flags: 0x0}, - 1270: {region: 0x7d, script: 0x2e, flags: 0x0}, - 1271: {region: 0x53, script: 0x67, flags: 0x0}, - 1272: {region: 0x10b, script: 0x6c, flags: 0x0}, - 1273: {region: 0x108, script: 0x77, flags: 0x0}, - 1274: {region: 0x99, script: 0x22, flags: 0x0}, - 1275: {region: 0x131, script: 0x5a, flags: 0x0}, - 1276: {region: 0x165, script: 0x5a, flags: 0x0}, - 1277: {region: 0x9c, script: 0x91, flags: 0x0}, - 1278: {region: 0x165, script: 0x5a, flags: 0x0}, - 1279: {region: 0x15e, script: 0xcc, flags: 0x0}, - 1280: {region: 0x165, script: 0x5a, flags: 0x0}, - 1281: {region: 0x165, script: 0x5a, flags: 0x0}, - 1282: {region: 0xdb, script: 0x22, flags: 0x0}, - 1283: {region: 0x165, script: 0x5a, flags: 0x0}, - 1284: {region: 0x165, script: 0x5a, flags: 0x0}, - 1285: {region: 0xd1, script: 0x5a, flags: 0x0}, - 1286: {region: 0x75, script: 0x5a, flags: 0x0}, - 1287: {region: 0x165, script: 0x5a, flags: 0x0}, - 1288: {region: 0x165, script: 0x5a, flags: 0x0}, - 1289: {region: 0x52, script: 0x5a, flags: 0x0}, - 1290: {region: 0x165, script: 0x5a, flags: 0x0}, - 1291: {region: 0x165, script: 0x5a, flags: 0x0}, - 1292: {region: 0x165, script: 0x5a, flags: 0x0}, - 1293: {region: 0x52, script: 0x5a, flags: 0x0}, - 1294: {region: 0x165, script: 0x5a, flags: 0x0}, - 1295: {region: 0x165, script: 0x5a, flags: 0x0}, - 1296: {region: 0x165, script: 0x5a, flags: 0x0}, - 1297: {region: 0x165, script: 0x5a, flags: 0x0}, + 1260: {region: 0x166, script: 0x5b, flags: 0x0}, + 1261: {region: 0x166, script: 0x5b, flags: 0x0}, + 1262: {region: 0x41, script: 0x5b, flags: 0x0}, + 1263: {region: 0x166, script: 0x5b, flags: 0x0}, + 1264: {region: 0x12c, script: 0x18, flags: 0x0}, + 1265: {region: 0x166, script: 0x5b, flags: 0x0}, + 1266: {region: 0x162, script: 0x5b, flags: 0x0}, + 1267: {region: 0x166, script: 0x5b, flags: 0x0}, + 1268: {region: 0x12c, script: 0x63, flags: 0x0}, + 1269: {region: 0x12c, script: 0x64, flags: 0x0}, + 1270: {region: 0x7e, script: 0x2e, flags: 0x0}, + 1271: {region: 0x53, script: 0x68, flags: 0x0}, + 1272: {region: 0x10c, script: 0x6d, flags: 0x0}, + 1273: {region: 0x109, script: 0x79, flags: 0x0}, + 1274: {region: 0x9a, script: 0x22, flags: 0x0}, + 1275: {region: 0x132, script: 0x5b, flags: 0x0}, + 1276: {region: 0x166, script: 0x5b, flags: 0x0}, + 1277: {region: 0x9d, script: 0x93, flags: 0x0}, + 1278: {region: 0x166, script: 0x5b, flags: 0x0}, + 1279: {region: 0x15f, script: 0xce, flags: 0x0}, + 1280: {region: 0x166, script: 0x5b, flags: 0x0}, + 1281: {region: 0x166, script: 0x5b, flags: 0x0}, + 1282: {region: 0xdc, script: 0x22, flags: 0x0}, + 1283: {region: 0x166, script: 0x5b, flags: 0x0}, + 1284: {region: 0x166, script: 0x5b, flags: 0x0}, + 1285: {region: 0xd2, script: 0x5b, flags: 0x0}, + 1286: {region: 0x76, script: 0x5b, flags: 0x0}, + 1287: {region: 0x166, script: 0x5b, flags: 0x0}, + 1288: {region: 0x166, script: 0x5b, flags: 0x0}, + 1289: {region: 0x52, script: 0x5b, flags: 0x0}, + 1290: {region: 0x166, script: 0x5b, flags: 0x0}, + 1291: {region: 0x166, script: 0x5b, flags: 0x0}, + 1292: {region: 0x166, script: 0x5b, flags: 0x0}, + 1293: {region: 0x52, script: 0x5b, flags: 0x0}, + 1294: {region: 0x166, script: 0x5b, flags: 0x0}, + 1295: {region: 0x166, script: 0x5b, flags: 0x0}, + 1296: {region: 0x166, script: 0x5b, flags: 0x0}, + 1297: {region: 0x166, script: 0x5b, flags: 0x0}, 1298: {region: 0x1, script: 0x3e, flags: 0x0}, - 1299: {region: 0x165, script: 0x5a, flags: 0x0}, - 1300: {region: 0x165, script: 0x5a, flags: 0x0}, - 1301: {region: 0x165, script: 0x5a, flags: 0x0}, - 1302: {region: 0x165, script: 0x5a, flags: 0x0}, - 1303: {region: 0x165, script: 0x5a, flags: 0x0}, - 1304: {region: 0xd6, script: 0x5a, flags: 0x0}, - 1305: {region: 0x165, script: 0x5a, flags: 0x0}, - 1306: {region: 0x165, script: 0x5a, flags: 0x0}, - 1307: {region: 0x165, script: 0x5a, flags: 0x0}, - 1308: {region: 0x41, script: 0x5a, flags: 0x0}, - 1309: {region: 0x165, script: 0x5a, flags: 0x0}, - 1310: {region: 0xcf, script: 0x5a, flags: 0x0}, + 1299: {region: 0x166, script: 0x5b, flags: 0x0}, + 1300: {region: 0x166, script: 0x5b, flags: 0x0}, + 1301: {region: 0x166, script: 0x5b, flags: 0x0}, + 1302: {region: 0x166, script: 0x5b, flags: 0x0}, + 1303: {region: 0x166, script: 0x5b, flags: 0x0}, + 1304: {region: 0xd7, script: 0x5b, flags: 0x0}, + 1305: {region: 0x166, script: 0x5b, flags: 0x0}, + 1306: {region: 0x166, script: 0x5b, flags: 0x0}, + 1307: {region: 0x166, script: 0x5b, flags: 0x0}, + 1308: {region: 0x41, script: 0x5b, flags: 0x0}, + 1309: {region: 0x166, script: 0x5b, flags: 0x0}, + 1310: {region: 0xd0, script: 0x5b, flags: 0x0}, 1311: {region: 0x4a, script: 0x3, flags: 0x1}, - 1312: {region: 0x165, script: 0x5a, flags: 0x0}, - 1313: {region: 0x165, script: 0x5a, flags: 0x0}, - 1314: {region: 0x165, script: 0x5a, flags: 0x0}, - 1315: {region: 0x53, script: 0x5a, flags: 0x0}, - 1316: {region: 0x10b, script: 0x5a, flags: 0x0}, - 1318: {region: 0xa8, script: 0x5, flags: 0x0}, - 1319: {region: 0xd9, script: 0x5a, flags: 0x0}, - 1320: {region: 0xba, script: 0xe8, flags: 0x0}, + 1312: {region: 0x166, script: 0x5b, flags: 0x0}, + 1313: {region: 0x166, script: 0x5b, flags: 0x0}, + 1314: {region: 0x166, script: 0x5b, flags: 0x0}, + 1315: {region: 0x53, script: 0x5b, flags: 0x0}, + 1316: {region: 0x10c, script: 0x5b, flags: 0x0}, + 1318: {region: 0xa9, script: 0x5, flags: 0x0}, + 1319: {region: 0xda, script: 0x5b, flags: 0x0}, + 1320: {region: 0xbb, script: 0xeb, flags: 0x0}, 1321: {region: 0x4d, script: 0x14, flags: 0x1}, - 1322: {region: 0x53, script: 0x7d, flags: 0x0}, - 1323: {region: 0x165, script: 0x5a, flags: 0x0}, - 1324: {region: 0x122, script: 0x5a, flags: 0x0}, - 1325: {region: 0xd0, script: 0x5a, flags: 0x0}, - 1326: {region: 0x165, script: 0x5a, flags: 0x0}, - 1327: {region: 0x161, script: 0x5a, flags: 0x0}, - 1329: {region: 0x12b, script: 0x5a, flags: 0x0}, + 1322: {region: 0x53, script: 0x7f, flags: 0x0}, + 1323: {region: 0x166, script: 0x5b, flags: 0x0}, + 1324: {region: 0x123, script: 0x5b, flags: 0x0}, + 1325: {region: 0xd1, script: 0x5b, flags: 0x0}, + 1326: {region: 0x166, script: 0x5b, flags: 0x0}, + 1327: {region: 0x162, script: 0x5b, flags: 0x0}, + 1329: {region: 0x12c, script: 0x5b, flags: 0x0}, } // likelyLangList holds lists info associated with likelyLang. // Size: 582 bytes, 97 elements var likelyLangList = [97]likelyScriptRegion{ - 0: {region: 0x9c, script: 0x7, flags: 0x0}, - 1: {region: 0xa1, script: 0x78, flags: 0x2}, - 2: {region: 0x11c, script: 0x85, flags: 0x2}, - 3: {region: 0x32, script: 0x5a, flags: 0x0}, - 4: {region: 0x9b, script: 0x5, flags: 0x4}, - 5: {region: 0x9c, script: 0x5, flags: 0x4}, - 6: {region: 0x106, script: 0x20, flags: 0x4}, - 7: {region: 0x9c, script: 0x5, flags: 0x2}, - 8: {region: 0x106, script: 0x20, flags: 0x0}, + 0: {region: 0x9d, script: 0x7, flags: 0x0}, + 1: {region: 0xa2, script: 0x7a, flags: 0x2}, + 2: {region: 0x11d, script: 0x87, flags: 0x2}, + 3: {region: 0x32, script: 0x5b, flags: 0x0}, + 4: {region: 0x9c, script: 0x5, flags: 0x4}, + 5: {region: 0x9d, script: 0x5, flags: 0x4}, + 6: {region: 0x107, script: 0x20, flags: 0x4}, + 7: {region: 0x9d, script: 0x5, flags: 0x2}, + 8: {region: 0x107, script: 0x20, flags: 0x0}, 9: {region: 0x38, script: 0x2f, flags: 0x2}, - 10: {region: 0x135, script: 0x5a, flags: 0x0}, - 11: {region: 0x7b, script: 0xcf, flags: 0x2}, - 12: {region: 0x114, script: 0x5a, flags: 0x0}, - 13: {region: 0x84, script: 0x1, flags: 0x2}, - 14: {region: 0x5d, script: 0x1f, flags: 0x0}, - 15: {region: 0x87, script: 0x5f, flags: 0x2}, - 16: {region: 0xd6, script: 0x5a, flags: 0x0}, + 10: {region: 0x136, script: 0x5b, flags: 0x0}, + 11: {region: 0x7c, script: 0xd1, flags: 0x2}, + 12: {region: 0x115, script: 0x5b, flags: 0x0}, + 13: {region: 0x85, script: 0x1, flags: 0x2}, + 14: {region: 0x5e, script: 0x1f, flags: 0x0}, + 15: {region: 0x88, script: 0x60, flags: 0x2}, + 16: {region: 0xd7, script: 0x5b, flags: 0x0}, 17: {region: 0x52, script: 0x5, flags: 0x4}, - 18: {region: 0x10b, script: 0x5, flags: 0x4}, - 19: {region: 0xae, script: 0x20, flags: 0x0}, + 18: {region: 0x10c, script: 0x5, flags: 0x4}, + 19: {region: 0xaf, script: 0x20, flags: 0x0}, 20: {region: 0x24, script: 0x5, flags: 0x4}, 21: {region: 0x53, script: 0x5, flags: 0x4}, - 22: {region: 0x9c, script: 0x5, flags: 0x4}, - 23: {region: 0xc5, script: 0x5, flags: 0x4}, + 22: {region: 0x9d, script: 0x5, flags: 0x4}, + 23: {region: 0xc6, script: 0x5, flags: 0x4}, 24: {region: 0x53, script: 0x5, flags: 0x2}, - 25: {region: 0x12b, script: 0x5a, flags: 0x0}, - 26: {region: 0xb0, script: 0x5, flags: 0x4}, - 27: {region: 0x9b, script: 0x5, flags: 0x2}, - 28: {region: 0xa5, script: 0x20, flags: 0x0}, + 25: {region: 0x12c, script: 0x5b, flags: 0x0}, + 26: {region: 0xb1, script: 0x5, flags: 0x4}, + 27: {region: 0x9c, script: 0x5, flags: 0x2}, + 28: {region: 0xa6, script: 0x20, flags: 0x0}, 29: {region: 0x53, script: 0x5, flags: 0x4}, - 30: {region: 0x12b, script: 0x5a, flags: 0x4}, + 30: {region: 0x12c, script: 0x5b, flags: 0x4}, 31: {region: 0x53, script: 0x5, flags: 0x2}, - 32: {region: 0x12b, script: 0x5a, flags: 0x2}, - 33: {region: 0xdb, script: 0x22, flags: 0x0}, - 34: {region: 0x99, script: 0x5d, flags: 0x2}, - 35: {region: 0x83, script: 0x5a, flags: 0x0}, - 36: {region: 0x84, script: 0x7c, flags: 0x4}, - 37: {region: 0x84, script: 0x7c, flags: 0x2}, - 38: {region: 0xc5, script: 0x20, flags: 0x0}, - 39: {region: 0x53, script: 0x70, flags: 0x4}, - 40: {region: 0x53, script: 0x70, flags: 0x2}, - 41: {region: 0xd0, script: 0x5a, flags: 0x0}, + 32: {region: 0x12c, script: 0x5b, flags: 0x2}, + 33: {region: 0xdc, script: 0x22, flags: 0x0}, + 34: {region: 0x9a, script: 0x5e, flags: 0x2}, + 35: {region: 0x84, script: 0x5b, flags: 0x0}, + 36: {region: 0x85, script: 0x7e, flags: 0x4}, + 37: {region: 0x85, script: 0x7e, flags: 0x2}, + 38: {region: 0xc6, script: 0x20, flags: 0x0}, + 39: {region: 0x53, script: 0x71, flags: 0x4}, + 40: {region: 0x53, script: 0x71, flags: 0x2}, + 41: {region: 0xd1, script: 0x5b, flags: 0x0}, 42: {region: 0x4a, script: 0x5, flags: 0x4}, - 43: {region: 0x95, script: 0x5, flags: 0x4}, - 44: {region: 0x99, script: 0x36, flags: 0x0}, - 45: {region: 0xe8, script: 0x5, flags: 0x4}, - 46: {region: 0xe8, script: 0x5, flags: 0x2}, - 47: {region: 0x9c, script: 0x8b, flags: 0x0}, - 48: {region: 0x53, script: 0x8c, flags: 0x2}, - 49: {region: 0xba, script: 0xe8, flags: 0x0}, - 50: {region: 0xd9, script: 0x5a, flags: 0x4}, - 51: {region: 0xe8, script: 0x5, flags: 0x0}, - 52: {region: 0x99, script: 0x22, flags: 0x2}, - 53: {region: 0x99, script: 0x4f, flags: 0x2}, - 54: {region: 0x99, script: 0xd3, flags: 0x2}, - 55: {region: 0x105, script: 0x20, flags: 0x0}, - 56: {region: 0xbd, script: 0x5a, flags: 0x4}, - 57: {region: 0x104, script: 0x5a, flags: 0x4}, - 58: {region: 0x106, script: 0x5a, flags: 0x4}, - 59: {region: 0x12b, script: 0x5a, flags: 0x4}, - 60: {region: 0x124, script: 0x20, flags: 0x0}, - 61: {region: 0xe8, script: 0x5, flags: 0x4}, - 62: {region: 0xe8, script: 0x5, flags: 0x2}, + 43: {region: 0x96, script: 0x5, flags: 0x4}, + 44: {region: 0x9a, script: 0x36, flags: 0x0}, + 45: {region: 0xe9, script: 0x5, flags: 0x4}, + 46: {region: 0xe9, script: 0x5, flags: 0x2}, + 47: {region: 0x9d, script: 0x8d, flags: 0x0}, + 48: {region: 0x53, script: 0x8e, flags: 0x2}, + 49: {region: 0xbb, script: 0xeb, flags: 0x0}, + 50: {region: 0xda, script: 0x5b, flags: 0x4}, + 51: {region: 0xe9, script: 0x5, flags: 0x0}, + 52: {region: 0x9a, script: 0x22, flags: 0x2}, + 53: {region: 0x9a, script: 0x50, flags: 0x2}, + 54: {region: 0x9a, script: 0xd5, flags: 0x2}, + 55: {region: 0x106, script: 0x20, flags: 0x0}, + 56: {region: 0xbe, script: 0x5b, flags: 0x4}, + 57: {region: 0x105, script: 0x5b, flags: 0x4}, + 58: {region: 0x107, script: 0x5b, flags: 0x4}, + 59: {region: 0x12c, script: 0x5b, flags: 0x4}, + 60: {region: 0x125, script: 0x20, flags: 0x0}, + 61: {region: 0xe9, script: 0x5, flags: 0x4}, + 62: {region: 0xe9, script: 0x5, flags: 0x2}, 63: {region: 0x53, script: 0x5, flags: 0x0}, - 64: {region: 0xae, script: 0x20, flags: 0x4}, - 65: {region: 0xc5, script: 0x20, flags: 0x4}, - 66: {region: 0xae, script: 0x20, flags: 0x2}, - 67: {region: 0x99, script: 0xe, flags: 0x0}, - 68: {region: 0xdb, script: 0x22, flags: 0x4}, - 69: {region: 0xdb, script: 0x22, flags: 0x2}, - 70: {region: 0x137, script: 0x5a, flags: 0x0}, + 64: {region: 0xaf, script: 0x20, flags: 0x4}, + 65: {region: 0xc6, script: 0x20, flags: 0x4}, + 66: {region: 0xaf, script: 0x20, flags: 0x2}, + 67: {region: 0x9a, script: 0xe, flags: 0x0}, + 68: {region: 0xdc, script: 0x22, flags: 0x4}, + 69: {region: 0xdc, script: 0x22, flags: 0x2}, + 70: {region: 0x138, script: 0x5b, flags: 0x0}, 71: {region: 0x24, script: 0x5, flags: 0x4}, 72: {region: 0x53, script: 0x20, flags: 0x4}, 73: {region: 0x24, script: 0x5, flags: 0x2}, - 74: {region: 0x8d, script: 0x3c, flags: 0x0}, + 74: {region: 0x8e, script: 0x3c, flags: 0x0}, 75: {region: 0x53, script: 0x3b, flags: 0x4}, 76: {region: 0x53, script: 0x3b, flags: 0x2}, 77: {region: 0x53, script: 0x3b, flags: 0x0}, 78: {region: 0x2f, script: 0x3c, flags: 0x4}, 79: {region: 0x3e, script: 0x3c, flags: 0x4}, - 80: {region: 0x7b, script: 0x3c, flags: 0x4}, - 81: {region: 0x7e, script: 0x3c, flags: 0x4}, - 82: {region: 0x8d, script: 0x3c, flags: 0x4}, - 83: {region: 0x95, script: 0x3c, flags: 0x4}, - 84: {region: 0xc6, script: 0x3c, flags: 0x4}, - 85: {region: 0xd0, script: 0x3c, flags: 0x4}, - 86: {region: 0xe2, script: 0x3c, flags: 0x4}, - 87: {region: 0xe5, script: 0x3c, flags: 0x4}, - 88: {region: 0xe7, script: 0x3c, flags: 0x4}, - 89: {region: 0x116, script: 0x3c, flags: 0x4}, - 90: {region: 0x123, script: 0x3c, flags: 0x4}, - 91: {region: 0x12e, script: 0x3c, flags: 0x4}, - 92: {region: 0x135, script: 0x3c, flags: 0x4}, - 93: {region: 0x13e, script: 0x3c, flags: 0x4}, - 94: {region: 0x12e, script: 0x11, flags: 0x2}, - 95: {region: 0x12e, script: 0x37, flags: 0x2}, - 96: {region: 0x12e, script: 0x3c, flags: 0x2}, + 80: {region: 0x7c, script: 0x3c, flags: 0x4}, + 81: {region: 0x7f, script: 0x3c, flags: 0x4}, + 82: {region: 0x8e, script: 0x3c, flags: 0x4}, + 83: {region: 0x96, script: 0x3c, flags: 0x4}, + 84: {region: 0xc7, script: 0x3c, flags: 0x4}, + 85: {region: 0xd1, script: 0x3c, flags: 0x4}, + 86: {region: 0xe3, script: 0x3c, flags: 0x4}, + 87: {region: 0xe6, script: 0x3c, flags: 0x4}, + 88: {region: 0xe8, script: 0x3c, flags: 0x4}, + 89: {region: 0x117, script: 0x3c, flags: 0x4}, + 90: {region: 0x124, script: 0x3c, flags: 0x4}, + 91: {region: 0x12f, script: 0x3c, flags: 0x4}, + 92: {region: 0x136, script: 0x3c, flags: 0x4}, + 93: {region: 0x13f, script: 0x3c, flags: 0x4}, + 94: {region: 0x12f, script: 0x11, flags: 0x2}, + 95: {region: 0x12f, script: 0x37, flags: 0x2}, + 96: {region: 0x12f, script: 0x3c, flags: 0x2}, } type likelyLangScript struct { @@ -2987,306 +3009,306 @@ type likelyLangScript struct { // for a given regionID, lang and script are the index and size respectively // of the list in likelyRegionList. // TODO: exclude containers and user-definable regions from the list. -// Size: 2148 bytes, 358 elements -var likelyRegion = [358]likelyLangScript{ - 34: {lang: 0xd7, script: 0x5a, flags: 0x0}, +// Size: 2154 bytes, 359 elements +var likelyRegion = [359]likelyLangScript{ + 34: {lang: 0xd7, script: 0x5b, flags: 0x0}, 35: {lang: 0x3a, script: 0x5, flags: 0x0}, 36: {lang: 0x0, script: 0x2, flags: 0x1}, 39: {lang: 0x2, script: 0x2, flags: 0x1}, 40: {lang: 0x4, script: 0x2, flags: 0x1}, - 42: {lang: 0x3c0, script: 0x5a, flags: 0x0}, - 43: {lang: 0x0, script: 0x5a, flags: 0x0}, - 44: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 45: {lang: 0x41b, script: 0x5a, flags: 0x0}, - 46: {lang: 0x10d, script: 0x5a, flags: 0x0}, - 48: {lang: 0x367, script: 0x5a, flags: 0x0}, - 49: {lang: 0x444, script: 0x5a, flags: 0x0}, - 50: {lang: 0x58, script: 0x5a, flags: 0x0}, + 42: {lang: 0x3c0, script: 0x5b, flags: 0x0}, + 43: {lang: 0x0, script: 0x5b, flags: 0x0}, + 44: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 45: {lang: 0x41b, script: 0x5b, flags: 0x0}, + 46: {lang: 0x10d, script: 0x5b, flags: 0x0}, + 48: {lang: 0x367, script: 0x5b, flags: 0x0}, + 49: {lang: 0x444, script: 0x5b, flags: 0x0}, + 50: {lang: 0x58, script: 0x5b, flags: 0x0}, 51: {lang: 0x6, script: 0x2, flags: 0x1}, 53: {lang: 0xa5, script: 0xe, flags: 0x0}, - 54: {lang: 0x367, script: 0x5a, flags: 0x0}, - 55: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 54: {lang: 0x367, script: 0x5b, flags: 0x0}, + 55: {lang: 0x15e, script: 0x5b, flags: 0x0}, 56: {lang: 0x7e, script: 0x20, flags: 0x0}, 57: {lang: 0x3a, script: 0x5, flags: 0x0}, - 58: {lang: 0x3d9, script: 0x5a, flags: 0x0}, - 59: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 60: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 62: {lang: 0x31f, script: 0x5a, flags: 0x0}, - 63: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 64: {lang: 0x3a1, script: 0x5a, flags: 0x0}, - 65: {lang: 0x3c0, script: 0x5a, flags: 0x0}, + 58: {lang: 0x3d9, script: 0x5b, flags: 0x0}, + 59: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 60: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 62: {lang: 0x31f, script: 0x5b, flags: 0x0}, + 63: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 64: {lang: 0x3a1, script: 0x5b, flags: 0x0}, + 65: {lang: 0x3c0, script: 0x5b, flags: 0x0}, 67: {lang: 0x8, script: 0x2, flags: 0x1}, - 69: {lang: 0x0, script: 0x5a, flags: 0x0}, + 69: {lang: 0x0, script: 0x5b, flags: 0x0}, 71: {lang: 0x71, script: 0x20, flags: 0x0}, 73: {lang: 0x512, script: 0x3e, flags: 0x2}, 74: {lang: 0x31f, script: 0x5, flags: 0x2}, - 75: {lang: 0x445, script: 0x5a, flags: 0x0}, - 76: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 77: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 78: {lang: 0x10d, script: 0x5a, flags: 0x0}, - 79: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 81: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 82: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 75: {lang: 0x445, script: 0x5b, flags: 0x0}, + 76: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 77: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 78: {lang: 0x10d, script: 0x5b, flags: 0x0}, + 79: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 81: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 82: {lang: 0x15e, script: 0x5b, flags: 0x0}, 83: {lang: 0xa, script: 0x4, flags: 0x1}, - 84: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 85: {lang: 0x0, script: 0x5a, flags: 0x0}, - 86: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 89: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 90: {lang: 0x3c0, script: 0x5a, flags: 0x0}, - 91: {lang: 0x3a1, script: 0x5a, flags: 0x0}, - 93: {lang: 0xe, script: 0x2, flags: 0x1}, - 94: {lang: 0xfa, script: 0x5a, flags: 0x0}, - 96: {lang: 0x10d, script: 0x5a, flags: 0x0}, - 98: {lang: 0x1, script: 0x5a, flags: 0x0}, - 99: {lang: 0x101, script: 0x5a, flags: 0x0}, - 101: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 103: {lang: 0x10, script: 0x2, flags: 0x1}, - 104: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 105: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 106: {lang: 0x140, script: 0x5a, flags: 0x0}, - 107: {lang: 0x3a, script: 0x5, flags: 0x0}, + 84: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 85: {lang: 0x0, script: 0x5b, flags: 0x0}, + 87: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 90: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 91: {lang: 0x3c0, script: 0x5b, flags: 0x0}, + 92: {lang: 0x3a1, script: 0x5b, flags: 0x0}, + 94: {lang: 0xe, script: 0x2, flags: 0x1}, + 95: {lang: 0xfa, script: 0x5b, flags: 0x0}, + 97: {lang: 0x10d, script: 0x5b, flags: 0x0}, + 99: {lang: 0x1, script: 0x5b, flags: 0x0}, + 100: {lang: 0x101, script: 0x5b, flags: 0x0}, + 102: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 104: {lang: 0x10, script: 0x2, flags: 0x1}, + 105: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 106: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 107: {lang: 0x140, script: 0x5b, flags: 0x0}, 108: {lang: 0x3a, script: 0x5, flags: 0x0}, - 109: {lang: 0x46f, script: 0x2c, flags: 0x0}, - 110: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 111: {lang: 0x12, script: 0x2, flags: 0x1}, - 113: {lang: 0x10d, script: 0x5a, flags: 0x0}, - 114: {lang: 0x151, script: 0x5a, flags: 0x0}, - 115: {lang: 0x1c0, script: 0x22, flags: 0x2}, - 118: {lang: 0x158, script: 0x5a, flags: 0x0}, - 120: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 122: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 123: {lang: 0x14, script: 0x2, flags: 0x1}, - 125: {lang: 0x16, script: 0x3, flags: 0x1}, - 126: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 128: {lang: 0x21, script: 0x5a, flags: 0x0}, - 130: {lang: 0x245, script: 0x5a, flags: 0x0}, - 132: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 133: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 134: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 135: {lang: 0x19, script: 0x2, flags: 0x1}, - 136: {lang: 0x0, script: 0x5a, flags: 0x0}, - 137: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 139: {lang: 0x3c0, script: 0x5a, flags: 0x0}, - 141: {lang: 0x529, script: 0x3c, flags: 0x0}, - 142: {lang: 0x0, script: 0x5a, flags: 0x0}, - 143: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 144: {lang: 0x1d1, script: 0x5a, flags: 0x0}, - 145: {lang: 0x1d4, script: 0x5a, flags: 0x0}, - 146: {lang: 0x1d5, script: 0x5a, flags: 0x0}, - 148: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 149: {lang: 0x1b, script: 0x2, flags: 0x1}, - 151: {lang: 0x1bc, script: 0x3e, flags: 0x0}, - 153: {lang: 0x1d, script: 0x3, flags: 0x1}, - 155: {lang: 0x3a, script: 0x5, flags: 0x0}, - 156: {lang: 0x20, script: 0x2, flags: 0x1}, - 157: {lang: 0x1f8, script: 0x5a, flags: 0x0}, - 158: {lang: 0x1f9, script: 0x5a, flags: 0x0}, - 161: {lang: 0x3a, script: 0x5, flags: 0x0}, - 162: {lang: 0x200, script: 0x49, flags: 0x0}, - 164: {lang: 0x445, script: 0x5a, flags: 0x0}, - 165: {lang: 0x28a, script: 0x20, flags: 0x0}, - 166: {lang: 0x22, script: 0x3, flags: 0x1}, - 168: {lang: 0x25, script: 0x2, flags: 0x1}, - 170: {lang: 0x254, script: 0x53, flags: 0x0}, - 171: {lang: 0x254, script: 0x53, flags: 0x0}, - 172: {lang: 0x3a, script: 0x5, flags: 0x0}, - 174: {lang: 0x3e2, script: 0x20, flags: 0x0}, - 175: {lang: 0x27, script: 0x2, flags: 0x1}, - 176: {lang: 0x3a, script: 0x5, flags: 0x0}, - 178: {lang: 0x10d, script: 0x5a, flags: 0x0}, - 179: {lang: 0x40c, script: 0xd4, flags: 0x0}, - 181: {lang: 0x43b, script: 0x5a, flags: 0x0}, - 182: {lang: 0x2c0, script: 0x5a, flags: 0x0}, - 183: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 184: {lang: 0x2c7, script: 0x5a, flags: 0x0}, - 185: {lang: 0x3a, script: 0x5, flags: 0x0}, - 186: {lang: 0x29, script: 0x2, flags: 0x1}, - 187: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 188: {lang: 0x2b, script: 0x2, flags: 0x1}, - 189: {lang: 0x432, script: 0x5a, flags: 0x0}, - 190: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 191: {lang: 0x2f1, script: 0x5a, flags: 0x0}, - 194: {lang: 0x2d, script: 0x2, flags: 0x1}, - 195: {lang: 0xa0, script: 0x5a, flags: 0x0}, - 196: {lang: 0x2f, script: 0x2, flags: 0x1}, - 197: {lang: 0x31, script: 0x2, flags: 0x1}, - 198: {lang: 0x33, script: 0x2, flags: 0x1}, - 200: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 201: {lang: 0x35, script: 0x2, flags: 0x1}, - 203: {lang: 0x320, script: 0x5a, flags: 0x0}, - 204: {lang: 0x37, script: 0x3, flags: 0x1}, - 205: {lang: 0x128, script: 0xea, flags: 0x0}, - 207: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 208: {lang: 0x31f, script: 0x5a, flags: 0x0}, - 209: {lang: 0x3c0, script: 0x5a, flags: 0x0}, - 210: {lang: 0x16, script: 0x5a, flags: 0x0}, - 211: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 212: {lang: 0x1b4, script: 0x5a, flags: 0x0}, - 214: {lang: 0x1b4, script: 0x5, flags: 0x2}, - 216: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 217: {lang: 0x367, script: 0x5a, flags: 0x0}, - 218: {lang: 0x347, script: 0x5a, flags: 0x0}, - 219: {lang: 0x351, script: 0x22, flags: 0x0}, - 225: {lang: 0x3a, script: 0x5, flags: 0x0}, - 226: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 228: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 229: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 230: {lang: 0x486, script: 0x5a, flags: 0x0}, - 231: {lang: 0x153, script: 0x5a, flags: 0x0}, - 232: {lang: 0x3a, script: 0x3, flags: 0x1}, - 233: {lang: 0x3b3, script: 0x5a, flags: 0x0}, - 234: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 236: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 237: {lang: 0x3a, script: 0x5, flags: 0x0}, - 238: {lang: 0x3c0, script: 0x5a, flags: 0x0}, - 240: {lang: 0x3a2, script: 0x5a, flags: 0x0}, - 241: {lang: 0x194, script: 0x5a, flags: 0x0}, - 243: {lang: 0x3a, script: 0x5, flags: 0x0}, - 258: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 260: {lang: 0x3d, script: 0x2, flags: 0x1}, - 261: {lang: 0x432, script: 0x20, flags: 0x0}, - 262: {lang: 0x3f, script: 0x2, flags: 0x1}, - 263: {lang: 0x3e5, script: 0x5a, flags: 0x0}, - 264: {lang: 0x3a, script: 0x5, flags: 0x0}, - 266: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 267: {lang: 0x3a, script: 0x5, flags: 0x0}, - 268: {lang: 0x41, script: 0x2, flags: 0x1}, - 271: {lang: 0x416, script: 0x5a, flags: 0x0}, - 272: {lang: 0x347, script: 0x5a, flags: 0x0}, - 273: {lang: 0x43, script: 0x2, flags: 0x1}, - 275: {lang: 0x1f9, script: 0x5a, flags: 0x0}, - 276: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 277: {lang: 0x429, script: 0x5a, flags: 0x0}, - 278: {lang: 0x367, script: 0x5a, flags: 0x0}, - 280: {lang: 0x3c0, script: 0x5a, flags: 0x0}, - 282: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 284: {lang: 0x45, script: 0x2, flags: 0x1}, - 288: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 289: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 290: {lang: 0x47, script: 0x2, flags: 0x1}, - 291: {lang: 0x49, script: 0x3, flags: 0x1}, - 292: {lang: 0x4c, script: 0x2, flags: 0x1}, - 293: {lang: 0x477, script: 0x5a, flags: 0x0}, - 294: {lang: 0x3c0, script: 0x5a, flags: 0x0}, - 295: {lang: 0x476, script: 0x5a, flags: 0x0}, - 296: {lang: 0x4e, script: 0x2, flags: 0x1}, - 297: {lang: 0x482, script: 0x5a, flags: 0x0}, - 299: {lang: 0x50, script: 0x4, flags: 0x1}, - 301: {lang: 0x4a0, script: 0x5a, flags: 0x0}, - 302: {lang: 0x54, script: 0x2, flags: 0x1}, - 303: {lang: 0x445, script: 0x5a, flags: 0x0}, - 304: {lang: 0x56, script: 0x3, flags: 0x1}, - 305: {lang: 0x445, script: 0x5a, flags: 0x0}, - 309: {lang: 0x512, script: 0x3e, flags: 0x2}, - 310: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 311: {lang: 0x4bc, script: 0x5a, flags: 0x0}, - 312: {lang: 0x1f9, script: 0x5a, flags: 0x0}, - 315: {lang: 0x13e, script: 0x5a, flags: 0x0}, - 318: {lang: 0x4c3, script: 0x5a, flags: 0x0}, - 319: {lang: 0x8a, script: 0x5a, flags: 0x0}, - 320: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 322: {lang: 0x41b, script: 0x5a, flags: 0x0}, - 333: {lang: 0x59, script: 0x2, flags: 0x1}, - 350: {lang: 0x3a, script: 0x5, flags: 0x0}, - 351: {lang: 0x5b, script: 0x2, flags: 0x1}, - 356: {lang: 0x423, script: 0x5a, flags: 0x0}, + 109: {lang: 0x3a, script: 0x5, flags: 0x0}, + 110: {lang: 0x46f, script: 0x2c, flags: 0x0}, + 111: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 112: {lang: 0x12, script: 0x2, flags: 0x1}, + 114: {lang: 0x10d, script: 0x5b, flags: 0x0}, + 115: {lang: 0x151, script: 0x5b, flags: 0x0}, + 116: {lang: 0x1c0, script: 0x22, flags: 0x2}, + 119: {lang: 0x158, script: 0x5b, flags: 0x0}, + 121: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 123: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 124: {lang: 0x14, script: 0x2, flags: 0x1}, + 126: {lang: 0x16, script: 0x3, flags: 0x1}, + 127: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 129: {lang: 0x21, script: 0x5b, flags: 0x0}, + 131: {lang: 0x245, script: 0x5b, flags: 0x0}, + 133: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 134: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 135: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 136: {lang: 0x19, script: 0x2, flags: 0x1}, + 137: {lang: 0x0, script: 0x5b, flags: 0x0}, + 138: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 140: {lang: 0x3c0, script: 0x5b, flags: 0x0}, + 142: {lang: 0x529, script: 0x3c, flags: 0x0}, + 143: {lang: 0x0, script: 0x5b, flags: 0x0}, + 144: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 145: {lang: 0x1d1, script: 0x5b, flags: 0x0}, + 146: {lang: 0x1d4, script: 0x5b, flags: 0x0}, + 147: {lang: 0x1d5, script: 0x5b, flags: 0x0}, + 149: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 150: {lang: 0x1b, script: 0x2, flags: 0x1}, + 152: {lang: 0x1bc, script: 0x3e, flags: 0x0}, + 154: {lang: 0x1d, script: 0x3, flags: 0x1}, + 156: {lang: 0x3a, script: 0x5, flags: 0x0}, + 157: {lang: 0x20, script: 0x2, flags: 0x1}, + 158: {lang: 0x1f8, script: 0x5b, flags: 0x0}, + 159: {lang: 0x1f9, script: 0x5b, flags: 0x0}, + 162: {lang: 0x3a, script: 0x5, flags: 0x0}, + 163: {lang: 0x200, script: 0x49, flags: 0x0}, + 165: {lang: 0x445, script: 0x5b, flags: 0x0}, + 166: {lang: 0x28a, script: 0x20, flags: 0x0}, + 167: {lang: 0x22, script: 0x3, flags: 0x1}, + 169: {lang: 0x25, script: 0x2, flags: 0x1}, + 171: {lang: 0x254, script: 0x54, flags: 0x0}, + 172: {lang: 0x254, script: 0x54, flags: 0x0}, + 173: {lang: 0x3a, script: 0x5, flags: 0x0}, + 175: {lang: 0x3e2, script: 0x20, flags: 0x0}, + 176: {lang: 0x27, script: 0x2, flags: 0x1}, + 177: {lang: 0x3a, script: 0x5, flags: 0x0}, + 179: {lang: 0x10d, script: 0x5b, flags: 0x0}, + 180: {lang: 0x40c, script: 0xd6, flags: 0x0}, + 182: {lang: 0x43b, script: 0x5b, flags: 0x0}, + 183: {lang: 0x2c0, script: 0x5b, flags: 0x0}, + 184: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 185: {lang: 0x2c7, script: 0x5b, flags: 0x0}, + 186: {lang: 0x3a, script: 0x5, flags: 0x0}, + 187: {lang: 0x29, script: 0x2, flags: 0x1}, + 188: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 189: {lang: 0x2b, script: 0x2, flags: 0x1}, + 190: {lang: 0x432, script: 0x5b, flags: 0x0}, + 191: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 192: {lang: 0x2f1, script: 0x5b, flags: 0x0}, + 195: {lang: 0x2d, script: 0x2, flags: 0x1}, + 196: {lang: 0xa0, script: 0x5b, flags: 0x0}, + 197: {lang: 0x2f, script: 0x2, flags: 0x1}, + 198: {lang: 0x31, script: 0x2, flags: 0x1}, + 199: {lang: 0x33, script: 0x2, flags: 0x1}, + 201: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 202: {lang: 0x35, script: 0x2, flags: 0x1}, + 204: {lang: 0x320, script: 0x5b, flags: 0x0}, + 205: {lang: 0x37, script: 0x3, flags: 0x1}, + 206: {lang: 0x128, script: 0xed, flags: 0x0}, + 208: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 209: {lang: 0x31f, script: 0x5b, flags: 0x0}, + 210: {lang: 0x3c0, script: 0x5b, flags: 0x0}, + 211: {lang: 0x16, script: 0x5b, flags: 0x0}, + 212: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 213: {lang: 0x1b4, script: 0x5b, flags: 0x0}, + 215: {lang: 0x1b4, script: 0x5, flags: 0x2}, + 217: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 218: {lang: 0x367, script: 0x5b, flags: 0x0}, + 219: {lang: 0x347, script: 0x5b, flags: 0x0}, + 220: {lang: 0x351, script: 0x22, flags: 0x0}, + 226: {lang: 0x3a, script: 0x5, flags: 0x0}, + 227: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 229: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 230: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 231: {lang: 0x486, script: 0x5b, flags: 0x0}, + 232: {lang: 0x153, script: 0x5b, flags: 0x0}, + 233: {lang: 0x3a, script: 0x3, flags: 0x1}, + 234: {lang: 0x3b3, script: 0x5b, flags: 0x0}, + 235: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 237: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 238: {lang: 0x3a, script: 0x5, flags: 0x0}, + 239: {lang: 0x3c0, script: 0x5b, flags: 0x0}, + 241: {lang: 0x3a2, script: 0x5b, flags: 0x0}, + 242: {lang: 0x194, script: 0x5b, flags: 0x0}, + 244: {lang: 0x3a, script: 0x5, flags: 0x0}, + 259: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 261: {lang: 0x3d, script: 0x2, flags: 0x1}, + 262: {lang: 0x432, script: 0x20, flags: 0x0}, + 263: {lang: 0x3f, script: 0x2, flags: 0x1}, + 264: {lang: 0x3e5, script: 0x5b, flags: 0x0}, + 265: {lang: 0x3a, script: 0x5, flags: 0x0}, + 267: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 268: {lang: 0x3a, script: 0x5, flags: 0x0}, + 269: {lang: 0x41, script: 0x2, flags: 0x1}, + 272: {lang: 0x416, script: 0x5b, flags: 0x0}, + 273: {lang: 0x347, script: 0x5b, flags: 0x0}, + 274: {lang: 0x43, script: 0x2, flags: 0x1}, + 276: {lang: 0x1f9, script: 0x5b, flags: 0x0}, + 277: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 278: {lang: 0x429, script: 0x5b, flags: 0x0}, + 279: {lang: 0x367, script: 0x5b, flags: 0x0}, + 281: {lang: 0x3c0, script: 0x5b, flags: 0x0}, + 283: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 285: {lang: 0x45, script: 0x2, flags: 0x1}, + 289: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 290: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 291: {lang: 0x47, script: 0x2, flags: 0x1}, + 292: {lang: 0x49, script: 0x3, flags: 0x1}, + 293: {lang: 0x4c, script: 0x2, flags: 0x1}, + 294: {lang: 0x477, script: 0x5b, flags: 0x0}, + 295: {lang: 0x3c0, script: 0x5b, flags: 0x0}, + 296: {lang: 0x476, script: 0x5b, flags: 0x0}, + 297: {lang: 0x4e, script: 0x2, flags: 0x1}, + 298: {lang: 0x482, script: 0x5b, flags: 0x0}, + 300: {lang: 0x50, script: 0x4, flags: 0x1}, + 302: {lang: 0x4a0, script: 0x5b, flags: 0x0}, + 303: {lang: 0x54, script: 0x2, flags: 0x1}, + 304: {lang: 0x445, script: 0x5b, flags: 0x0}, + 305: {lang: 0x56, script: 0x3, flags: 0x1}, + 306: {lang: 0x445, script: 0x5b, flags: 0x0}, + 310: {lang: 0x512, script: 0x3e, flags: 0x2}, + 311: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 312: {lang: 0x4bc, script: 0x5b, flags: 0x0}, + 313: {lang: 0x1f9, script: 0x5b, flags: 0x0}, + 316: {lang: 0x13e, script: 0x5b, flags: 0x0}, + 319: {lang: 0x4c3, script: 0x5b, flags: 0x0}, + 320: {lang: 0x8a, script: 0x5b, flags: 0x0}, + 321: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 323: {lang: 0x41b, script: 0x5b, flags: 0x0}, + 334: {lang: 0x59, script: 0x2, flags: 0x1}, + 351: {lang: 0x3a, script: 0x5, flags: 0x0}, + 352: {lang: 0x5b, script: 0x2, flags: 0x1}, + 357: {lang: 0x423, script: 0x5b, flags: 0x0}, } // likelyRegionList holds lists info associated with likelyRegion. // Size: 558 bytes, 93 elements var likelyRegionList = [93]likelyLangScript{ 0: {lang: 0x148, script: 0x5, flags: 0x0}, - 1: {lang: 0x476, script: 0x5a, flags: 0x0}, - 2: {lang: 0x431, script: 0x5a, flags: 0x0}, + 1: {lang: 0x476, script: 0x5b, flags: 0x0}, + 2: {lang: 0x431, script: 0x5b, flags: 0x0}, 3: {lang: 0x2ff, script: 0x20, flags: 0x0}, 4: {lang: 0x1d7, script: 0x8, flags: 0x0}, - 5: {lang: 0x274, script: 0x5a, flags: 0x0}, - 6: {lang: 0xb7, script: 0x5a, flags: 0x0}, + 5: {lang: 0x274, script: 0x5b, flags: 0x0}, + 6: {lang: 0xb7, script: 0x5b, flags: 0x0}, 7: {lang: 0x432, script: 0x20, flags: 0x0}, - 8: {lang: 0x12d, script: 0xec, flags: 0x0}, + 8: {lang: 0x12d, script: 0xef, flags: 0x0}, 9: {lang: 0x351, script: 0x22, flags: 0x0}, 10: {lang: 0x529, script: 0x3b, flags: 0x0}, 11: {lang: 0x4ac, script: 0x5, flags: 0x0}, - 12: {lang: 0x523, script: 0x5a, flags: 0x0}, - 13: {lang: 0x29a, script: 0xeb, flags: 0x0}, + 12: {lang: 0x523, script: 0x5b, flags: 0x0}, + 13: {lang: 0x29a, script: 0xee, flags: 0x0}, 14: {lang: 0x136, script: 0x34, flags: 0x0}, - 15: {lang: 0x48a, script: 0x5a, flags: 0x0}, + 15: {lang: 0x48a, script: 0x5b, flags: 0x0}, 16: {lang: 0x3a, script: 0x5, flags: 0x0}, - 17: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 17: {lang: 0x15e, script: 0x5b, flags: 0x0}, 18: {lang: 0x27, script: 0x2c, flags: 0x0}, - 19: {lang: 0x139, script: 0x5a, flags: 0x0}, + 19: {lang: 0x139, script: 0x5b, flags: 0x0}, 20: {lang: 0x26a, script: 0x5, flags: 0x2}, 21: {lang: 0x512, script: 0x3e, flags: 0x2}, 22: {lang: 0x210, script: 0x2e, flags: 0x0}, 23: {lang: 0x5, script: 0x20, flags: 0x0}, - 24: {lang: 0x274, script: 0x5a, flags: 0x0}, + 24: {lang: 0x274, script: 0x5b, flags: 0x0}, 25: {lang: 0x136, script: 0x34, flags: 0x0}, 26: {lang: 0x2ff, script: 0x20, flags: 0x0}, - 27: {lang: 0x1e1, script: 0x5a, flags: 0x0}, + 27: {lang: 0x1e1, script: 0x5b, flags: 0x0}, 28: {lang: 0x31f, script: 0x5, flags: 0x0}, 29: {lang: 0x1be, script: 0x22, flags: 0x0}, 30: {lang: 0x4b4, script: 0x5, flags: 0x0}, - 31: {lang: 0x236, script: 0x75, flags: 0x0}, + 31: {lang: 0x236, script: 0x76, flags: 0x0}, 32: {lang: 0x148, script: 0x5, flags: 0x0}, - 33: {lang: 0x476, script: 0x5a, flags: 0x0}, - 34: {lang: 0x24a, script: 0x4e, flags: 0x0}, + 33: {lang: 0x476, script: 0x5b, flags: 0x0}, + 34: {lang: 0x24a, script: 0x4f, flags: 0x0}, 35: {lang: 0xe6, script: 0x5, flags: 0x0}, - 36: {lang: 0x226, script: 0xeb, flags: 0x0}, + 36: {lang: 0x226, script: 0xee, flags: 0x0}, 37: {lang: 0x3a, script: 0x5, flags: 0x0}, - 38: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 39: {lang: 0x2b8, script: 0x57, flags: 0x0}, - 40: {lang: 0x226, script: 0xeb, flags: 0x0}, + 38: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 39: {lang: 0x2b8, script: 0x58, flags: 0x0}, + 40: {lang: 0x226, script: 0xee, flags: 0x0}, 41: {lang: 0x3a, script: 0x5, flags: 0x0}, - 42: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 43: {lang: 0x3dc, script: 0x5a, flags: 0x0}, + 42: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 43: {lang: 0x3dc, script: 0x5b, flags: 0x0}, 44: {lang: 0x4ae, script: 0x20, flags: 0x0}, 45: {lang: 0x2ff, script: 0x20, flags: 0x0}, - 46: {lang: 0x431, script: 0x5a, flags: 0x0}, - 47: {lang: 0x331, script: 0x75, flags: 0x0}, - 48: {lang: 0x213, script: 0x5a, flags: 0x0}, + 46: {lang: 0x431, script: 0x5b, flags: 0x0}, + 47: {lang: 0x331, script: 0x76, flags: 0x0}, + 48: {lang: 0x213, script: 0x5b, flags: 0x0}, 49: {lang: 0x30b, script: 0x20, flags: 0x0}, 50: {lang: 0x242, script: 0x5, flags: 0x0}, 51: {lang: 0x529, script: 0x3c, flags: 0x0}, - 52: {lang: 0x3c0, script: 0x5a, flags: 0x0}, + 52: {lang: 0x3c0, script: 0x5b, flags: 0x0}, 53: {lang: 0x3a, script: 0x5, flags: 0x0}, - 54: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 55: {lang: 0x2ed, script: 0x5a, flags: 0x0}, + 54: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 55: {lang: 0x2ed, script: 0x5b, flags: 0x0}, 56: {lang: 0x4b4, script: 0x5, flags: 0x0}, 57: {lang: 0x88, script: 0x22, flags: 0x0}, 58: {lang: 0x4b4, script: 0x5, flags: 0x0}, 59: {lang: 0x4b4, script: 0x5, flags: 0x0}, 60: {lang: 0xbe, script: 0x22, flags: 0x0}, - 61: {lang: 0x3dc, script: 0x5a, flags: 0x0}, + 61: {lang: 0x3dc, script: 0x5b, flags: 0x0}, 62: {lang: 0x7e, script: 0x20, flags: 0x0}, 63: {lang: 0x3e2, script: 0x20, flags: 0x0}, - 64: {lang: 0x267, script: 0x5a, flags: 0x0}, - 65: {lang: 0x444, script: 0x5a, flags: 0x0}, + 64: {lang: 0x267, script: 0x5b, flags: 0x0}, + 65: {lang: 0x444, script: 0x5b, flags: 0x0}, 66: {lang: 0x512, script: 0x3e, flags: 0x0}, - 67: {lang: 0x412, script: 0x5a, flags: 0x0}, + 67: {lang: 0x412, script: 0x5b, flags: 0x0}, 68: {lang: 0x4ae, script: 0x20, flags: 0x0}, 69: {lang: 0x3a, script: 0x5, flags: 0x0}, - 70: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 71: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 70: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 71: {lang: 0x15e, script: 0x5b, flags: 0x0}, 72: {lang: 0x35, script: 0x5, flags: 0x0}, - 73: {lang: 0x46b, script: 0xeb, flags: 0x0}, + 73: {lang: 0x46b, script: 0xee, flags: 0x0}, 74: {lang: 0x2ec, script: 0x5, flags: 0x0}, - 75: {lang: 0x30f, script: 0x75, flags: 0x0}, + 75: {lang: 0x30f, script: 0x76, flags: 0x0}, 76: {lang: 0x467, script: 0x20, flags: 0x0}, 77: {lang: 0x148, script: 0x5, flags: 0x0}, 78: {lang: 0x3a, script: 0x5, flags: 0x0}, - 79: {lang: 0x15e, script: 0x5a, flags: 0x0}, - 80: {lang: 0x48a, script: 0x5a, flags: 0x0}, + 79: {lang: 0x15e, script: 0x5b, flags: 0x0}, + 80: {lang: 0x48a, script: 0x5b, flags: 0x0}, 81: {lang: 0x58, script: 0x5, flags: 0x0}, 82: {lang: 0x219, script: 0x20, flags: 0x0}, 83: {lang: 0x81, script: 0x34, flags: 0x0}, 84: {lang: 0x529, script: 0x3c, flags: 0x0}, - 85: {lang: 0x48c, script: 0x5a, flags: 0x0}, + 85: {lang: 0x48c, script: 0x5b, flags: 0x0}, 86: {lang: 0x4ae, script: 0x20, flags: 0x0}, 87: {lang: 0x512, script: 0x3e, flags: 0x0}, - 88: {lang: 0x3b3, script: 0x5a, flags: 0x0}, - 89: {lang: 0x431, script: 0x5a, flags: 0x0}, + 88: {lang: 0x3b3, script: 0x5b, flags: 0x0}, + 89: {lang: 0x431, script: 0x5b, flags: 0x0}, 90: {lang: 0x432, script: 0x20, flags: 0x0}, - 91: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 91: {lang: 0x15e, script: 0x5b, flags: 0x0}, 92: {lang: 0x446, script: 0x5, flags: 0x0}, } @@ -3298,38 +3320,38 @@ type likelyTag struct { // Size: 198 bytes, 33 elements var likelyRegionGroup = [33]likelyTag{ - 1: {lang: 0x139, region: 0xd6, script: 0x5a}, - 2: {lang: 0x139, region: 0x135, script: 0x5a}, - 3: {lang: 0x3c0, region: 0x41, script: 0x5a}, - 4: {lang: 0x139, region: 0x2f, script: 0x5a}, - 5: {lang: 0x139, region: 0xd6, script: 0x5a}, - 6: {lang: 0x13e, region: 0xcf, script: 0x5a}, - 7: {lang: 0x445, region: 0x12f, script: 0x5a}, - 8: {lang: 0x3a, region: 0x6b, script: 0x5}, - 9: {lang: 0x445, region: 0x4b, script: 0x5a}, - 10: {lang: 0x139, region: 0x161, script: 0x5a}, - 11: {lang: 0x139, region: 0x135, script: 0x5a}, - 12: {lang: 0x139, region: 0x135, script: 0x5a}, - 13: {lang: 0x13e, region: 0x59, script: 0x5a}, + 1: {lang: 0x139, region: 0xd7, script: 0x5b}, + 2: {lang: 0x139, region: 0x136, script: 0x5b}, + 3: {lang: 0x3c0, region: 0x41, script: 0x5b}, + 4: {lang: 0x139, region: 0x2f, script: 0x5b}, + 5: {lang: 0x139, region: 0xd7, script: 0x5b}, + 6: {lang: 0x13e, region: 0xd0, script: 0x5b}, + 7: {lang: 0x445, region: 0x130, script: 0x5b}, + 8: {lang: 0x3a, region: 0x6c, script: 0x5}, + 9: {lang: 0x445, region: 0x4b, script: 0x5b}, + 10: {lang: 0x139, region: 0x162, script: 0x5b}, + 11: {lang: 0x139, region: 0x136, script: 0x5b}, + 12: {lang: 0x139, region: 0x136, script: 0x5b}, + 13: {lang: 0x13e, region: 0x5a, script: 0x5b}, 14: {lang: 0x529, region: 0x53, script: 0x3b}, - 15: {lang: 0x1be, region: 0x99, script: 0x22}, - 16: {lang: 0x1e1, region: 0x95, script: 0x5a}, - 17: {lang: 0x1f9, region: 0x9e, script: 0x5a}, - 18: {lang: 0x139, region: 0x2f, script: 0x5a}, - 19: {lang: 0x139, region: 0xe6, script: 0x5a}, - 20: {lang: 0x139, region: 0x8a, script: 0x5a}, - 21: {lang: 0x41b, region: 0x142, script: 0x5a}, + 15: {lang: 0x1be, region: 0x9a, script: 0x22}, + 16: {lang: 0x1e1, region: 0x96, script: 0x5b}, + 17: {lang: 0x1f9, region: 0x9f, script: 0x5b}, + 18: {lang: 0x139, region: 0x2f, script: 0x5b}, + 19: {lang: 0x139, region: 0xe7, script: 0x5b}, + 20: {lang: 0x139, region: 0x8b, script: 0x5b}, + 21: {lang: 0x41b, region: 0x143, script: 0x5b}, 22: {lang: 0x529, region: 0x53, script: 0x3b}, - 23: {lang: 0x4bc, region: 0x137, script: 0x5a}, - 24: {lang: 0x3a, region: 0x108, script: 0x5}, - 25: {lang: 0x3e2, region: 0x106, script: 0x20}, - 26: {lang: 0x3e2, region: 0x106, script: 0x20}, - 27: {lang: 0x139, region: 0x7b, script: 0x5a}, - 28: {lang: 0x10d, region: 0x60, script: 0x5a}, - 29: {lang: 0x139, region: 0xd6, script: 0x5a}, - 30: {lang: 0x13e, region: 0x1f, script: 0x5a}, - 31: {lang: 0x139, region: 0x9a, script: 0x5a}, - 32: {lang: 0x139, region: 0x7b, script: 0x5a}, + 23: {lang: 0x4bc, region: 0x138, script: 0x5b}, + 24: {lang: 0x3a, region: 0x109, script: 0x5}, + 25: {lang: 0x3e2, region: 0x107, script: 0x20}, + 26: {lang: 0x3e2, region: 0x107, script: 0x20}, + 27: {lang: 0x139, region: 0x7c, script: 0x5b}, + 28: {lang: 0x10d, region: 0x61, script: 0x5b}, + 29: {lang: 0x139, region: 0xd7, script: 0x5b}, + 30: {lang: 0x13e, region: 0x1f, script: 0x5b}, + 31: {lang: 0x139, region: 0x9b, script: 0x5b}, + 32: {lang: 0x139, region: 0x7c, script: 0x5b}, } // Size: 264 bytes, 33 elements @@ -3350,8 +3372,8 @@ var regionContainment = [33]uint64{ // regionInclusion maps region identifiers to sets of regions in regionInclusionBits, // where each set holds all groupings that are directly connected in a region // containment graph. -// Size: 358 bytes, 358 elements -var regionInclusion = [358]uint8{ +// Size: 359 bytes, 359 elements +var regionInclusion = [359]uint8{ // Entry 0 - 3F 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, @@ -3364,45 +3386,45 @@ var regionInclusion = [358]uint8{ // Entry 40 - 7F 0x26, 0x28, 0x26, 0x25, 0x31, 0x22, 0x32, 0x33, 0x34, 0x30, 0x22, 0x27, 0x27, 0x27, 0x35, 0x2d, - 0x29, 0x28, 0x27, 0x36, 0x28, 0x22, 0x34, 0x23, - 0x21, 0x26, 0x2d, 0x26, 0x22, 0x37, 0x2e, 0x35, - 0x2a, 0x22, 0x2f, 0x38, 0x26, 0x26, 0x21, 0x39, - 0x39, 0x28, 0x38, 0x39, 0x39, 0x2f, 0x3a, 0x2f, - 0x20, 0x21, 0x38, 0x3b, 0x28, 0x3c, 0x2c, 0x21, - 0x2a, 0x35, 0x27, 0x38, 0x26, 0x24, 0x28, 0x2c, + 0x29, 0x28, 0x27, 0x36, 0x28, 0x22, 0x21, 0x34, + 0x23, 0x21, 0x26, 0x2d, 0x26, 0x22, 0x37, 0x2e, + 0x35, 0x2a, 0x22, 0x2f, 0x38, 0x26, 0x26, 0x21, + 0x39, 0x39, 0x28, 0x38, 0x39, 0x39, 0x2f, 0x3a, + 0x2f, 0x20, 0x21, 0x38, 0x3b, 0x28, 0x3c, 0x2c, + 0x21, 0x2a, 0x35, 0x27, 0x38, 0x26, 0x24, 0x28, // Entry 80 - BF - 0x2d, 0x23, 0x30, 0x2d, 0x2d, 0x26, 0x27, 0x3a, - 0x22, 0x34, 0x3c, 0x2d, 0x28, 0x36, 0x22, 0x34, - 0x3a, 0x26, 0x2e, 0x21, 0x39, 0x31, 0x38, 0x24, - 0x2c, 0x25, 0x22, 0x24, 0x25, 0x2c, 0x3a, 0x2c, - 0x26, 0x24, 0x36, 0x21, 0x2f, 0x3d, 0x31, 0x3c, - 0x2f, 0x26, 0x36, 0x36, 0x24, 0x26, 0x3d, 0x31, - 0x24, 0x26, 0x35, 0x25, 0x2d, 0x32, 0x38, 0x2a, - 0x38, 0x39, 0x39, 0x35, 0x33, 0x23, 0x26, 0x2f, + 0x2c, 0x2d, 0x23, 0x30, 0x2d, 0x2d, 0x26, 0x27, + 0x3a, 0x22, 0x34, 0x3c, 0x2d, 0x28, 0x36, 0x22, + 0x34, 0x3a, 0x26, 0x2e, 0x21, 0x39, 0x31, 0x38, + 0x24, 0x2c, 0x25, 0x22, 0x24, 0x25, 0x2c, 0x3a, + 0x2c, 0x26, 0x24, 0x36, 0x21, 0x2f, 0x3d, 0x31, + 0x3c, 0x2f, 0x26, 0x36, 0x36, 0x24, 0x26, 0x3d, + 0x31, 0x24, 0x26, 0x35, 0x25, 0x2d, 0x32, 0x38, + 0x2a, 0x38, 0x39, 0x39, 0x35, 0x33, 0x23, 0x26, // Entry C0 - FF - 0x3c, 0x21, 0x23, 0x2d, 0x31, 0x36, 0x36, 0x3c, - 0x26, 0x2d, 0x26, 0x3a, 0x2f, 0x25, 0x2f, 0x34, - 0x31, 0x2f, 0x32, 0x3b, 0x2d, 0x2b, 0x2d, 0x21, - 0x34, 0x2a, 0x2c, 0x25, 0x21, 0x3c, 0x24, 0x29, - 0x2b, 0x24, 0x34, 0x21, 0x28, 0x29, 0x3b, 0x31, - 0x25, 0x2e, 0x30, 0x29, 0x26, 0x24, 0x3a, 0x21, - 0x3c, 0x28, 0x21, 0x24, 0x21, 0x21, 0x1f, 0x21, + 0x2f, 0x3c, 0x21, 0x23, 0x2d, 0x31, 0x36, 0x36, + 0x3c, 0x26, 0x2d, 0x26, 0x3a, 0x2f, 0x25, 0x2f, + 0x34, 0x31, 0x2f, 0x32, 0x3b, 0x2d, 0x2b, 0x2d, + 0x21, 0x34, 0x2a, 0x2c, 0x25, 0x21, 0x3c, 0x24, + 0x29, 0x2b, 0x24, 0x34, 0x21, 0x28, 0x29, 0x3b, + 0x31, 0x25, 0x2e, 0x30, 0x29, 0x26, 0x24, 0x3a, + 0x21, 0x3c, 0x28, 0x21, 0x24, 0x21, 0x21, 0x1f, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, // Entry 100 - 13F - 0x21, 0x21, 0x2f, 0x21, 0x2e, 0x23, 0x33, 0x2f, - 0x24, 0x3b, 0x2f, 0x39, 0x38, 0x31, 0x2d, 0x3a, - 0x2c, 0x2e, 0x2d, 0x23, 0x2d, 0x2f, 0x28, 0x2f, - 0x27, 0x33, 0x34, 0x26, 0x24, 0x32, 0x22, 0x26, - 0x27, 0x22, 0x2d, 0x31, 0x3d, 0x29, 0x31, 0x3d, - 0x39, 0x29, 0x31, 0x24, 0x26, 0x29, 0x36, 0x2f, - 0x33, 0x2f, 0x21, 0x22, 0x21, 0x30, 0x28, 0x3d, - 0x23, 0x26, 0x21, 0x28, 0x26, 0x26, 0x31, 0x3b, + 0x21, 0x21, 0x21, 0x2f, 0x21, 0x2e, 0x23, 0x33, + 0x2f, 0x24, 0x3b, 0x2f, 0x39, 0x38, 0x31, 0x2d, + 0x3a, 0x2c, 0x2e, 0x2d, 0x23, 0x2d, 0x2f, 0x28, + 0x2f, 0x27, 0x33, 0x34, 0x26, 0x24, 0x32, 0x22, + 0x26, 0x27, 0x22, 0x2d, 0x31, 0x3d, 0x29, 0x31, + 0x3d, 0x39, 0x29, 0x31, 0x24, 0x26, 0x29, 0x36, + 0x2f, 0x33, 0x2f, 0x21, 0x22, 0x21, 0x30, 0x28, + 0x3d, 0x23, 0x26, 0x21, 0x28, 0x26, 0x26, 0x31, // Entry 140 - 17F - 0x29, 0x21, 0x29, 0x21, 0x21, 0x21, 0x21, 0x21, - 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x21, 0x21, + 0x3b, 0x29, 0x21, 0x29, 0x21, 0x21, 0x21, 0x21, + 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, - 0x21, 0x21, 0x21, 0x21, 0x21, 0x24, 0x24, 0x2f, - 0x23, 0x32, 0x2f, 0x27, 0x2f, 0x21, + 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x24, 0x24, + 0x2f, 0x23, 0x32, 0x2f, 0x27, 0x2f, 0x21, } // regionInclusionBits is an array of bit vectors where every vector represents @@ -3462,11 +3484,11 @@ type parentRel struct { // Size: 414 bytes, 5 elements var parents = [5]parentRel{ - 0: {lang: 0x139, script: 0x0, maxScript: 0x5a, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x25, 0x26, 0x2f, 0x34, 0x36, 0x3d, 0x42, 0x46, 0x48, 0x49, 0x4a, 0x50, 0x52, 0x5c, 0x5d, 0x61, 0x64, 0x6d, 0x73, 0x74, 0x75, 0x7b, 0x7c, 0x7f, 0x80, 0x81, 0x83, 0x8c, 0x8d, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9f, 0xa0, 0xa4, 0xa7, 0xa9, 0xad, 0xb1, 0xb4, 0xb5, 0xbf, 0xc6, 0xca, 0xcb, 0xcc, 0xce, 0xd0, 0xd2, 0xd5, 0xd6, 0xdd, 0xdf, 0xe0, 0xe6, 0xe7, 0xe8, 0xeb, 0xf0, 0x107, 0x109, 0x10a, 0x10b, 0x10d, 0x10e, 0x112, 0x117, 0x11b, 0x11d, 0x11f, 0x125, 0x129, 0x12c, 0x12d, 0x12f, 0x131, 0x139, 0x13c, 0x13f, 0x142, 0x161, 0x162, 0x164}}, - 1: {lang: 0x139, script: 0x0, maxScript: 0x5a, toRegion: 0x1a, fromRegion: []uint16{0x2e, 0x4e, 0x60, 0x63, 0x72, 0xd9, 0x10c, 0x10f}}, - 2: {lang: 0x13e, script: 0x0, maxScript: 0x5a, toRegion: 0x1f, fromRegion: []uint16{0x2c, 0x3f, 0x41, 0x48, 0x51, 0x54, 0x56, 0x59, 0x65, 0x69, 0x89, 0x8f, 0xcf, 0xd8, 0xe2, 0xe4, 0xec, 0xf1, 0x11a, 0x135, 0x136, 0x13b}}, - 3: {lang: 0x3c0, script: 0x0, maxScript: 0x5a, toRegion: 0xee, fromRegion: []uint16{0x2a, 0x4e, 0x5a, 0x86, 0x8b, 0xb7, 0xc6, 0xd1, 0x118, 0x126}}, - 4: {lang: 0x529, script: 0x3c, maxScript: 0x3c, toRegion: 0x8d, fromRegion: []uint16{0xc6}}, + 0: {lang: 0x139, script: 0x0, maxScript: 0x5b, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x25, 0x26, 0x2f, 0x34, 0x36, 0x3d, 0x42, 0x46, 0x48, 0x49, 0x4a, 0x50, 0x52, 0x5d, 0x5e, 0x62, 0x65, 0x6e, 0x74, 0x75, 0x76, 0x7c, 0x7d, 0x80, 0x81, 0x82, 0x84, 0x8d, 0x8e, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0xa0, 0xa1, 0xa5, 0xa8, 0xaa, 0xae, 0xb2, 0xb5, 0xb6, 0xc0, 0xc7, 0xcb, 0xcc, 0xcd, 0xcf, 0xd1, 0xd3, 0xd6, 0xd7, 0xde, 0xe0, 0xe1, 0xe7, 0xe8, 0xe9, 0xec, 0xf1, 0x108, 0x10a, 0x10b, 0x10c, 0x10e, 0x10f, 0x113, 0x118, 0x11c, 0x11e, 0x120, 0x126, 0x12a, 0x12d, 0x12e, 0x130, 0x132, 0x13a, 0x13d, 0x140, 0x143, 0x162, 0x163, 0x165}}, + 1: {lang: 0x139, script: 0x0, maxScript: 0x5b, toRegion: 0x1a, fromRegion: []uint16{0x2e, 0x4e, 0x61, 0x64, 0x73, 0xda, 0x10d, 0x110}}, + 2: {lang: 0x13e, script: 0x0, maxScript: 0x5b, toRegion: 0x1f, fromRegion: []uint16{0x2c, 0x3f, 0x41, 0x48, 0x51, 0x54, 0x57, 0x5a, 0x66, 0x6a, 0x8a, 0x90, 0xd0, 0xd9, 0xe3, 0xe5, 0xed, 0xf2, 0x11b, 0x136, 0x137, 0x13c}}, + 3: {lang: 0x3c0, script: 0x0, maxScript: 0x5b, toRegion: 0xef, fromRegion: []uint16{0x2a, 0x4e, 0x5b, 0x87, 0x8c, 0xb8, 0xc7, 0xd2, 0x119, 0x127}}, + 4: {lang: 0x529, script: 0x3c, maxScript: 0x3c, toRegion: 0x8e, fromRegion: []uint16{0xc7}}, } -// Total table size 30244 bytes (29KiB); checksum: B6B15F30 +// Total table size 30466 bytes (29KiB); checksum: 7544152B diff --git a/vendor/golang.org/x/text/language/match.go b/vendor/golang.org/x/text/language/match.go index ee45f49474..1153baf291 100644 --- a/vendor/golang.org/x/text/language/match.go +++ b/vendor/golang.org/x/text/language/match.go @@ -434,7 +434,7 @@ func newMatcher(supported []Tag, options []MatchOption) *matcher { // (their canonicalization simply substitutes a different language code, but // nothing else), the match confidence is Exact, otherwise it is High. for i, lm := range language.AliasMap { - // If deprecated codes match and there is no fiddling with the script or + // If deprecated codes match and there is no fiddling with the script // or region, we consider it an exact match. conf := Exact if language.AliasTypes[i] != language.Macro { diff --git a/vendor/golang.org/x/text/language/tables.go b/vendor/golang.org/x/text/language/tables.go index 34a732b699..a6573dcb21 100644 --- a/vendor/golang.org/x/text/language/tables.go +++ b/vendor/golang.org/x/text/language/tables.go @@ -23,31 +23,31 @@ const ( _419 = 31 _BR = 65 _CA = 73 - _ES = 110 - _GB = 123 - _MD = 188 - _PT = 238 - _UK = 306 - _US = 309 - _ZZ = 357 - _XA = 323 - _XC = 325 - _XK = 333 + _ES = 111 + _GB = 124 + _MD = 189 + _PT = 239 + _UK = 307 + _US = 310 + _ZZ = 358 + _XA = 324 + _XC = 326 + _XK = 334 ) const ( - _Latn = 90 + _Latn = 91 _Hani = 57 _Hans = 59 _Hant = 60 - _Qaaa = 147 - _Qaai = 155 - _Qabx = 196 - _Zinh = 252 - _Zyyy = 257 - _Zzzz = 258 + _Qaaa = 149 + _Qaai = 157 + _Qabx = 198 + _Zinh = 255 + _Zyyy = 260 + _Zzzz = 261 ) -var regionToGroups = []uint8{ // 358 elements +var regionToGroups = []uint8{ // 359 elements // Entry 0 - 3F 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, @@ -60,51 +60,51 @@ var regionToGroups = []uint8{ // 358 elements // Entry 40 - 7F 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, // Entry 80 - BF - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x04, 0x02, 0x00, 0x04, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x02, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x04, // Entry C0 - FF - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x01, 0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x05, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 100 - 13F 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x04, 0x04, 0x05, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x05, 0x00, // Entry 140 - 17F 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -} // Size: 382 bytes + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +} // Size: 383 bytes var paradigmLocales = [][3]uint16{ // 3 elements - 0: [3]uint16{0x139, 0x0, 0x7b}, + 0: [3]uint16{0x139, 0x0, 0x7c}, 1: [3]uint16{0x13e, 0x0, 0x1f}, - 2: [3]uint16{0x3c0, 0x41, 0xee}, + 2: [3]uint16{0x3c0, 0x41, 0xef}, } // Size: 42 bytes type mutualIntelligibility struct { @@ -249,30 +249,30 @@ var matchLang = []mutualIntelligibility{ // 113 elements // matchScript holds pairs of scriptIDs where readers of one script // can typically also read the other. Each is associated with a confidence. var matchScript = []scriptIntelligibility{ // 26 elements - 0: {wantLang: 0x432, haveLang: 0x432, wantScript: 0x5a, haveScript: 0x20, distance: 0x5}, - 1: {wantLang: 0x432, haveLang: 0x432, wantScript: 0x20, haveScript: 0x5a, distance: 0x5}, - 2: {wantLang: 0x58, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa}, - 3: {wantLang: 0xa5, haveLang: 0x139, wantScript: 0xe, haveScript: 0x5a, distance: 0xa}, + 0: {wantLang: 0x432, haveLang: 0x432, wantScript: 0x5b, haveScript: 0x20, distance: 0x5}, + 1: {wantLang: 0x432, haveLang: 0x432, wantScript: 0x20, haveScript: 0x5b, distance: 0x5}, + 2: {wantLang: 0x58, haveLang: 0x3e2, wantScript: 0x5b, haveScript: 0x20, distance: 0xa}, + 3: {wantLang: 0xa5, haveLang: 0x139, wantScript: 0xe, haveScript: 0x5b, distance: 0xa}, 4: {wantLang: 0x1d7, haveLang: 0x3e2, wantScript: 0x8, haveScript: 0x20, distance: 0xa}, - 5: {wantLang: 0x210, haveLang: 0x139, wantScript: 0x2e, haveScript: 0x5a, distance: 0xa}, - 6: {wantLang: 0x24a, haveLang: 0x139, wantScript: 0x4e, haveScript: 0x5a, distance: 0xa}, - 7: {wantLang: 0x251, haveLang: 0x139, wantScript: 0x52, haveScript: 0x5a, distance: 0xa}, - 8: {wantLang: 0x2b8, haveLang: 0x139, wantScript: 0x57, haveScript: 0x5a, distance: 0xa}, - 9: {wantLang: 0x304, haveLang: 0x139, wantScript: 0x6e, haveScript: 0x5a, distance: 0xa}, - 10: {wantLang: 0x331, haveLang: 0x139, wantScript: 0x75, haveScript: 0x5a, distance: 0xa}, - 11: {wantLang: 0x351, haveLang: 0x139, wantScript: 0x22, haveScript: 0x5a, distance: 0xa}, - 12: {wantLang: 0x395, haveLang: 0x139, wantScript: 0x81, haveScript: 0x5a, distance: 0xa}, - 13: {wantLang: 0x39d, haveLang: 0x139, wantScript: 0x36, haveScript: 0x5a, distance: 0xa}, - 14: {wantLang: 0x3be, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa}, - 15: {wantLang: 0x3fa, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa}, - 16: {wantLang: 0x40c, haveLang: 0x139, wantScript: 0xd4, haveScript: 0x5a, distance: 0xa}, - 17: {wantLang: 0x450, haveLang: 0x139, wantScript: 0xe3, haveScript: 0x5a, distance: 0xa}, - 18: {wantLang: 0x461, haveLang: 0x139, wantScript: 0xe6, haveScript: 0x5a, distance: 0xa}, - 19: {wantLang: 0x46f, haveLang: 0x139, wantScript: 0x2c, haveScript: 0x5a, distance: 0xa}, - 20: {wantLang: 0x476, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa}, - 21: {wantLang: 0x4b4, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa}, - 22: {wantLang: 0x4bc, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa}, - 23: {wantLang: 0x512, haveLang: 0x139, wantScript: 0x3e, haveScript: 0x5a, distance: 0xa}, + 5: {wantLang: 0x210, haveLang: 0x139, wantScript: 0x2e, haveScript: 0x5b, distance: 0xa}, + 6: {wantLang: 0x24a, haveLang: 0x139, wantScript: 0x4f, haveScript: 0x5b, distance: 0xa}, + 7: {wantLang: 0x251, haveLang: 0x139, wantScript: 0x53, haveScript: 0x5b, distance: 0xa}, + 8: {wantLang: 0x2b8, haveLang: 0x139, wantScript: 0x58, haveScript: 0x5b, distance: 0xa}, + 9: {wantLang: 0x304, haveLang: 0x139, wantScript: 0x6f, haveScript: 0x5b, distance: 0xa}, + 10: {wantLang: 0x331, haveLang: 0x139, wantScript: 0x76, haveScript: 0x5b, distance: 0xa}, + 11: {wantLang: 0x351, haveLang: 0x139, wantScript: 0x22, haveScript: 0x5b, distance: 0xa}, + 12: {wantLang: 0x395, haveLang: 0x139, wantScript: 0x83, haveScript: 0x5b, distance: 0xa}, + 13: {wantLang: 0x39d, haveLang: 0x139, wantScript: 0x36, haveScript: 0x5b, distance: 0xa}, + 14: {wantLang: 0x3be, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5b, distance: 0xa}, + 15: {wantLang: 0x3fa, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5b, distance: 0xa}, + 16: {wantLang: 0x40c, haveLang: 0x139, wantScript: 0xd6, haveScript: 0x5b, distance: 0xa}, + 17: {wantLang: 0x450, haveLang: 0x139, wantScript: 0xe6, haveScript: 0x5b, distance: 0xa}, + 18: {wantLang: 0x461, haveLang: 0x139, wantScript: 0xe9, haveScript: 0x5b, distance: 0xa}, + 19: {wantLang: 0x46f, haveLang: 0x139, wantScript: 0x2c, haveScript: 0x5b, distance: 0xa}, + 20: {wantLang: 0x476, haveLang: 0x3e2, wantScript: 0x5b, haveScript: 0x20, distance: 0xa}, + 21: {wantLang: 0x4b4, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5b, distance: 0xa}, + 22: {wantLang: 0x4bc, haveLang: 0x3e2, wantScript: 0x5b, haveScript: 0x20, distance: 0xa}, + 23: {wantLang: 0x512, haveLang: 0x139, wantScript: 0x3e, haveScript: 0x5b, distance: 0xa}, 24: {wantLang: 0x529, haveLang: 0x529, wantScript: 0x3b, haveScript: 0x3c, distance: 0xf}, 25: {wantLang: 0x529, haveLang: 0x529, wantScript: 0x3c, haveScript: 0x3b, distance: 0x13}, } // Size: 232 bytes @@ -295,4 +295,4 @@ var matchRegion = []regionIntelligibility{ // 15 elements 14: {lang: 0x529, script: 0x3c, group: 0x80, distance: 0x5}, } // Size: 114 bytes -// Total table size 1472 bytes (1KiB); checksum: F86C669 +// Total table size 1473 bytes (1KiB); checksum: 7BB90B5C 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 index f248effae1..ffadb7bebd 100644 --- a/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go +++ b/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go @@ -1,7 +1,7 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -//go:build go1.16 -// +build go1.16 +//go:build go1.16 && !go1.21 +// +build go1.16,!go1.21 package bidi 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 new file mode 100644 index 0000000000..92cce5802c --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go @@ -0,0 +1,2043 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.21 +// +build go1.21 + +package bidi + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "15.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: 19904 bytes (19.44 KiB). Checksum: b1f201ed2debb6c8. +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: 259 blocks, 16576 entries, 16576 bytes +// The third block is the zero block. +var bidiValues = [16576]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: 0x0001, 0x610: 0x0005, 0x611: 0x0005, + 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, + 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, + // 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, + // 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, 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, 0x19bf: 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, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a, + 0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x009a, 0x1ad6: 0x008a, 0x1ad7: 0x00ba, + 0x1ad8: 0x00aa, 0x1ad9: 0x009a, 0x1ada: 0x008a, 0x1adb: 0x007a, 0x1adc: 0x006a, 0x1add: 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, 0x206c: 0x000c, + 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, 0x21bd: 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 + 0x232a: 0x000a, 0x232b: 0x000a, + // 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: 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: 0x000a, 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: 0x000a, 0x24bf: 0x000a, + // 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: 0x0001, 0x28e9: 0x0001, + 0x28ea: 0x0001, 0x28eb: 0x0001, 0x28ec: 0x0001, 0x28ed: 0x0001, 0x28ee: 0x0001, 0x28ef: 0x0001, + 0x28f0: 0x0005, 0x28f1: 0x0005, 0x28f2: 0x0005, 0x28f3: 0x0005, 0x28f4: 0x0005, 0x28f5: 0x0005, + 0x28f6: 0x0005, 0x28f7: 0x0005, 0x28f8: 0x0005, 0x28f9: 0x0005, 0x28fa: 0x0001, 0x28fb: 0x0001, + 0x28fc: 0x0001, 0x28fd: 0x0001, 0x28fe: 0x0001, 0x28ff: 0x0001, + // 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: 0x0001, 0x29b1: 0x0001, 0x29b2: 0x0001, 0x29b3: 0x0001, 0x29b4: 0x0001, 0x29b5: 0x0001, + 0x29b6: 0x0001, 0x29b7: 0x0001, 0x29b8: 0x0001, 0x29b9: 0x0001, 0x29ba: 0x0001, 0x29bb: 0x0001, + 0x29bc: 0x0001, 0x29bd: 0x000c, 0x29be: 0x000c, 0x29bf: 0x000c, + // 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: 0x0001, 0x29ec: 0x0001, 0x29ed: 0x0001, 0x29ee: 0x0001, 0x29ef: 0x0001, + 0x29f0: 0x000d, 0x29f1: 0x000d, 0x29f2: 0x000d, 0x29f3: 0x000d, 0x29f4: 0x000d, 0x29f5: 0x000d, + 0x29f6: 0x000d, 0x29f7: 0x000d, 0x29f8: 0x000d, 0x29f9: 0x000d, 0x29fa: 0x000d, 0x29fb: 0x000d, + 0x29fc: 0x000d, 0x29fd: 0x000d, 0x29fe: 0x000d, 0x29ff: 0x000d, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x000d, 0x2a01: 0x000d, 0x2a02: 0x000d, 0x2a03: 0x000d, 0x2a04: 0x000d, 0x2a05: 0x000d, + 0x2a06: 0x000c, 0x2a07: 0x000c, 0x2a08: 0x000c, 0x2a09: 0x000c, 0x2a0a: 0x000c, 0x2a0b: 0x000c, + 0x2a0c: 0x000c, 0x2a0d: 0x000c, 0x2a0e: 0x000c, 0x2a0f: 0x000c, 0x2a10: 0x000c, 0x2a11: 0x000d, + 0x2a12: 0x000d, 0x2a13: 0x000d, 0x2a14: 0x000d, 0x2a15: 0x000d, 0x2a16: 0x000d, 0x2a17: 0x000d, + 0x2a18: 0x000d, 0x2a19: 0x000d, 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: 0x0001, 0x2a3b: 0x0001, + 0x2a3c: 0x0001, 0x2a3d: 0x0001, 0x2a3e: 0x0001, 0x2a3f: 0x0001, + // Block 0xa9, offset 0x2a40 + 0x2a40: 0x0001, 0x2a41: 0x0001, 0x2a42: 0x000c, 0x2a43: 0x000c, 0x2a44: 0x000c, 0x2a45: 0x000c, + 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: 0x0001, 0x2a71: 0x0001, 0x2a72: 0x0001, 0x2a73: 0x0001, 0x2a74: 0x0001, 0x2a75: 0x0001, + 0x2a76: 0x0001, 0x2a77: 0x0001, 0x2a78: 0x0001, 0x2a79: 0x0001, 0x2a7a: 0x0001, 0x2a7b: 0x0001, + 0x2a7c: 0x0001, 0x2a7d: 0x0001, 0x2a7e: 0x0001, 0x2a7f: 0x0001, + // Block 0xaa, offset 0x2a80 + 0x2a81: 0x000c, + 0x2ab8: 0x000c, 0x2ab9: 0x000c, 0x2aba: 0x000c, 0x2abb: 0x000c, + 0x2abc: 0x000c, 0x2abd: 0x000c, 0x2abe: 0x000c, 0x2abf: 0x000c, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x000c, 0x2ac1: 0x000c, 0x2ac2: 0x000c, 0x2ac3: 0x000c, 0x2ac4: 0x000c, 0x2ac5: 0x000c, + 0x2ac6: 0x000c, + 0x2ad2: 0x000a, 0x2ad3: 0x000a, 0x2ad4: 0x000a, 0x2ad5: 0x000a, 0x2ad6: 0x000a, 0x2ad7: 0x000a, + 0x2ad8: 0x000a, 0x2ad9: 0x000a, 0x2ada: 0x000a, 0x2adb: 0x000a, 0x2adc: 0x000a, 0x2add: 0x000a, + 0x2ade: 0x000a, 0x2adf: 0x000a, 0x2ae0: 0x000a, 0x2ae1: 0x000a, 0x2ae2: 0x000a, 0x2ae3: 0x000a, + 0x2ae4: 0x000a, 0x2ae5: 0x000a, + 0x2af0: 0x000c, 0x2af3: 0x000c, 0x2af4: 0x000c, + 0x2aff: 0x000c, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x000c, 0x2b01: 0x000c, + 0x2b33: 0x000c, 0x2b34: 0x000c, 0x2b35: 0x000c, + 0x2b36: 0x000c, 0x2b39: 0x000c, 0x2b3a: 0x000c, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x000c, 0x2b41: 0x000c, 0x2b42: 0x000c, + 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c, + 0x2b6a: 0x000c, 0x2b6b: 0x000c, 0x2b6d: 0x000c, 0x2b6e: 0x000c, 0x2b6f: 0x000c, + 0x2b70: 0x000c, 0x2b71: 0x000c, 0x2b72: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c, + // Block 0xae, offset 0x2b80 + 0x2bb3: 0x000c, + // Block 0xaf, offset 0x2bc0 + 0x2bc0: 0x000c, 0x2bc1: 0x000c, + 0x2bf6: 0x000c, 0x2bf7: 0x000c, 0x2bf8: 0x000c, 0x2bf9: 0x000c, 0x2bfa: 0x000c, 0x2bfb: 0x000c, + 0x2bfc: 0x000c, 0x2bfd: 0x000c, 0x2bfe: 0x000c, + // Block 0xb0, offset 0x2c00 + 0x2c09: 0x000c, 0x2c0a: 0x000c, 0x2c0b: 0x000c, + 0x2c0c: 0x000c, 0x2c0f: 0x000c, + // Block 0xb1, offset 0x2c40 + 0x2c6f: 0x000c, + 0x2c70: 0x000c, 0x2c71: 0x000c, 0x2c74: 0x000c, + 0x2c76: 0x000c, 0x2c77: 0x000c, + 0x2c7e: 0x000c, + // Block 0xb2, offset 0x2c80 + 0x2c9f: 0x000c, 0x2ca3: 0x000c, + 0x2ca4: 0x000c, 0x2ca5: 0x000c, 0x2ca6: 0x000c, 0x2ca7: 0x000c, 0x2ca8: 0x000c, 0x2ca9: 0x000c, + 0x2caa: 0x000c, + // Block 0xb3, offset 0x2cc0 + 0x2cc0: 0x000c, + 0x2ce6: 0x000c, 0x2ce7: 0x000c, 0x2ce8: 0x000c, 0x2ce9: 0x000c, + 0x2cea: 0x000c, 0x2ceb: 0x000c, 0x2cec: 0x000c, + 0x2cf0: 0x000c, 0x2cf1: 0x000c, 0x2cf2: 0x000c, 0x2cf3: 0x000c, 0x2cf4: 0x000c, + // Block 0xb4, offset 0x2d00 + 0x2d38: 0x000c, 0x2d39: 0x000c, 0x2d3a: 0x000c, 0x2d3b: 0x000c, + 0x2d3c: 0x000c, 0x2d3d: 0x000c, 0x2d3e: 0x000c, 0x2d3f: 0x000c, + // Block 0xb5, offset 0x2d40 + 0x2d42: 0x000c, 0x2d43: 0x000c, 0x2d44: 0x000c, + 0x2d46: 0x000c, + 0x2d5e: 0x000c, + // Block 0xb6, offset 0x2d80 + 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, + 0x2db6: 0x000c, 0x2db7: 0x000c, 0x2db8: 0x000c, 0x2dba: 0x000c, + 0x2dbf: 0x000c, + // Block 0xb7, offset 0x2dc0 + 0x2dc0: 0x000c, 0x2dc2: 0x000c, 0x2dc3: 0x000c, + // Block 0xb8, offset 0x2e00 + 0x2e32: 0x000c, 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, + 0x2e3c: 0x000c, 0x2e3d: 0x000c, 0x2e3f: 0x000c, + // Block 0xb9, offset 0x2e40 + 0x2e40: 0x000c, + 0x2e5c: 0x000c, 0x2e5d: 0x000c, + // Block 0xba, offset 0x2e80 + 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, + 0x2eb6: 0x000c, 0x2eb7: 0x000c, 0x2eb8: 0x000c, 0x2eb9: 0x000c, 0x2eba: 0x000c, + 0x2ebd: 0x000c, 0x2ebf: 0x000c, + // Block 0xbb, offset 0x2ec0 + 0x2ec0: 0x000c, + 0x2ee0: 0x000a, 0x2ee1: 0x000a, 0x2ee2: 0x000a, 0x2ee3: 0x000a, + 0x2ee4: 0x000a, 0x2ee5: 0x000a, 0x2ee6: 0x000a, 0x2ee7: 0x000a, 0x2ee8: 0x000a, 0x2ee9: 0x000a, + 0x2eea: 0x000a, 0x2eeb: 0x000a, 0x2eec: 0x000a, + // Block 0xbc, offset 0x2f00 + 0x2f2b: 0x000c, 0x2f2d: 0x000c, + 0x2f30: 0x000c, 0x2f31: 0x000c, 0x2f32: 0x000c, 0x2f33: 0x000c, 0x2f34: 0x000c, 0x2f35: 0x000c, + 0x2f37: 0x000c, + // Block 0xbd, offset 0x2f40 + 0x2f5d: 0x000c, + 0x2f5e: 0x000c, 0x2f5f: 0x000c, 0x2f62: 0x000c, 0x2f63: 0x000c, + 0x2f64: 0x000c, 0x2f65: 0x000c, 0x2f67: 0x000c, 0x2f68: 0x000c, 0x2f69: 0x000c, + 0x2f6a: 0x000c, 0x2f6b: 0x000c, + // Block 0xbe, offset 0x2f80 + 0x2faf: 0x000c, + 0x2fb0: 0x000c, 0x2fb1: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb4: 0x000c, 0x2fb5: 0x000c, + 0x2fb6: 0x000c, 0x2fb7: 0x000c, 0x2fb9: 0x000c, 0x2fba: 0x000c, + // Block 0xbf, offset 0x2fc0 + 0x2ffb: 0x000c, + 0x2ffc: 0x000c, 0x2ffe: 0x000c, + // Block 0xc0, offset 0x3000 + 0x3003: 0x000c, + // Block 0xc1, offset 0x3040 + 0x3054: 0x000c, 0x3055: 0x000c, 0x3056: 0x000c, 0x3057: 0x000c, + 0x305a: 0x000c, 0x305b: 0x000c, + 0x3060: 0x000c, + // Block 0xc2, offset 0x3080 + 0x3081: 0x000c, 0x3082: 0x000c, 0x3083: 0x000c, 0x3084: 0x000c, 0x3085: 0x000c, + 0x3086: 0x000c, 0x3089: 0x000c, 0x308a: 0x000c, + 0x30b3: 0x000c, 0x30b4: 0x000c, 0x30b5: 0x000c, + 0x30b6: 0x000c, 0x30b7: 0x000c, 0x30b8: 0x000c, 0x30bb: 0x000c, + 0x30bc: 0x000c, 0x30bd: 0x000c, 0x30be: 0x000c, + // Block 0xc3, offset 0x30c0 + 0x30c7: 0x000c, + 0x30d1: 0x000c, + 0x30d2: 0x000c, 0x30d3: 0x000c, 0x30d4: 0x000c, 0x30d5: 0x000c, 0x30d6: 0x000c, + 0x30d9: 0x000c, 0x30da: 0x000c, 0x30db: 0x000c, + // Block 0xc4, offset 0x3100 + 0x310a: 0x000c, 0x310b: 0x000c, + 0x310c: 0x000c, 0x310d: 0x000c, 0x310e: 0x000c, 0x310f: 0x000c, 0x3110: 0x000c, 0x3111: 0x000c, + 0x3112: 0x000c, 0x3113: 0x000c, 0x3114: 0x000c, 0x3115: 0x000c, 0x3116: 0x000c, + 0x3118: 0x000c, 0x3119: 0x000c, + // Block 0xc5, offset 0x3140 + 0x3170: 0x000c, 0x3171: 0x000c, 0x3172: 0x000c, 0x3173: 0x000c, 0x3174: 0x000c, 0x3175: 0x000c, + 0x3176: 0x000c, 0x3178: 0x000c, 0x3179: 0x000c, 0x317a: 0x000c, 0x317b: 0x000c, + 0x317c: 0x000c, 0x317d: 0x000c, + // Block 0xc6, offset 0x3180 + 0x3192: 0x000c, 0x3193: 0x000c, 0x3194: 0x000c, 0x3195: 0x000c, 0x3196: 0x000c, 0x3197: 0x000c, + 0x3198: 0x000c, 0x3199: 0x000c, 0x319a: 0x000c, 0x319b: 0x000c, 0x319c: 0x000c, 0x319d: 0x000c, + 0x319e: 0x000c, 0x319f: 0x000c, 0x31a0: 0x000c, 0x31a1: 0x000c, 0x31a2: 0x000c, 0x31a3: 0x000c, + 0x31a4: 0x000c, 0x31a5: 0x000c, 0x31a6: 0x000c, 0x31a7: 0x000c, + 0x31aa: 0x000c, 0x31ab: 0x000c, 0x31ac: 0x000c, 0x31ad: 0x000c, 0x31ae: 0x000c, 0x31af: 0x000c, + 0x31b0: 0x000c, 0x31b2: 0x000c, 0x31b3: 0x000c, 0x31b5: 0x000c, + 0x31b6: 0x000c, + // Block 0xc7, offset 0x31c0 + 0x31f1: 0x000c, 0x31f2: 0x000c, 0x31f3: 0x000c, 0x31f4: 0x000c, 0x31f5: 0x000c, + 0x31f6: 0x000c, 0x31fa: 0x000c, + 0x31fc: 0x000c, 0x31fd: 0x000c, 0x31ff: 0x000c, + // Block 0xc8, offset 0x3200 + 0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3203: 0x000c, 0x3204: 0x000c, 0x3205: 0x000c, + 0x3207: 0x000c, + // Block 0xc9, offset 0x3240 + 0x3250: 0x000c, 0x3251: 0x000c, + 0x3255: 0x000c, 0x3257: 0x000c, + // Block 0xca, offset 0x3280 + 0x32b3: 0x000c, 0x32b4: 0x000c, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0x000c, 0x32c1: 0x000c, + 0x32f6: 0x000c, 0x32f7: 0x000c, 0x32f8: 0x000c, 0x32f9: 0x000c, 0x32fa: 0x000c, + // Block 0xcc, offset 0x3300 + 0x3300: 0x000c, 0x3302: 0x000c, + // Block 0xcd, offset 0x3340 + 0x3355: 0x000a, 0x3356: 0x000a, 0x3357: 0x000a, + 0x3358: 0x000a, 0x3359: 0x000a, 0x335a: 0x000a, 0x335b: 0x000a, 0x335c: 0x000a, 0x335d: 0x0004, + 0x335e: 0x0004, 0x335f: 0x0004, 0x3360: 0x0004, 0x3361: 0x000a, 0x3362: 0x000a, 0x3363: 0x000a, + 0x3364: 0x000a, 0x3365: 0x000a, 0x3366: 0x000a, 0x3367: 0x000a, 0x3368: 0x000a, 0x3369: 0x000a, + 0x336a: 0x000a, 0x336b: 0x000a, 0x336c: 0x000a, 0x336d: 0x000a, 0x336e: 0x000a, 0x336f: 0x000a, + 0x3370: 0x000a, 0x3371: 0x000a, + // Block 0xce, offset 0x3380 + 0x3380: 0x000c, + 0x3387: 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, + // Block 0xcf, offset 0x33c0 + 0x33f0: 0x000c, 0x33f1: 0x000c, 0x33f2: 0x000c, 0x33f3: 0x000c, 0x33f4: 0x000c, + // Block 0xd0, offset 0x3400 + 0x3430: 0x000c, 0x3431: 0x000c, 0x3432: 0x000c, 0x3433: 0x000c, 0x3434: 0x000c, 0x3435: 0x000c, + 0x3436: 0x000c, + // Block 0xd1, offset 0x3440 + 0x344f: 0x000c, + // Block 0xd2, offset 0x3480 + 0x348f: 0x000c, 0x3490: 0x000c, 0x3491: 0x000c, + 0x3492: 0x000c, + // Block 0xd3, offset 0x34c0 + 0x34e2: 0x000a, + 0x34e4: 0x000c, + // Block 0xd4, offset 0x3500 + 0x351d: 0x000c, + 0x351e: 0x000c, 0x3520: 0x000b, 0x3521: 0x000b, 0x3522: 0x000b, 0x3523: 0x000b, + // Block 0xd5, offset 0x3540 + 0x3540: 0x000c, 0x3541: 0x000c, 0x3542: 0x000c, 0x3543: 0x000c, 0x3544: 0x000c, 0x3545: 0x000c, + 0x3546: 0x000c, 0x3547: 0x000c, 0x3548: 0x000c, 0x3549: 0x000c, 0x354a: 0x000c, 0x354b: 0x000c, + 0x354c: 0x000c, 0x354d: 0x000c, 0x354e: 0x000c, 0x354f: 0x000c, 0x3550: 0x000c, 0x3551: 0x000c, + 0x3552: 0x000c, 0x3553: 0x000c, 0x3554: 0x000c, 0x3555: 0x000c, 0x3556: 0x000c, 0x3557: 0x000c, + 0x3558: 0x000c, 0x3559: 0x000c, 0x355a: 0x000c, 0x355b: 0x000c, 0x355c: 0x000c, 0x355d: 0x000c, + 0x355e: 0x000c, 0x355f: 0x000c, 0x3560: 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, + 0x3570: 0x000c, 0x3571: 0x000c, 0x3572: 0x000c, 0x3573: 0x000c, 0x3574: 0x000c, 0x3575: 0x000c, + 0x3576: 0x000c, 0x3577: 0x000c, 0x3578: 0x000c, 0x3579: 0x000c, 0x357a: 0x000c, 0x357b: 0x000c, + 0x357c: 0x000c, 0x357d: 0x000c, 0x357e: 0x000c, 0x357f: 0x000c, + // Block 0xd6, offset 0x3580 + 0x3580: 0x000c, 0x3581: 0x000c, 0x3582: 0x000c, 0x3583: 0x000c, 0x3584: 0x000c, 0x3585: 0x000c, + 0x3586: 0x000c, + // Block 0xd7, offset 0x35c0 + 0x35e7: 0x000c, 0x35e8: 0x000c, 0x35e9: 0x000c, + 0x35f3: 0x000b, 0x35f4: 0x000b, 0x35f5: 0x000b, + 0x35f6: 0x000b, 0x35f7: 0x000b, 0x35f8: 0x000b, 0x35f9: 0x000b, 0x35fa: 0x000b, 0x35fb: 0x000c, + 0x35fc: 0x000c, 0x35fd: 0x000c, 0x35fe: 0x000c, 0x35ff: 0x000c, + // Block 0xd8, offset 0x3600 + 0x3600: 0x000c, 0x3601: 0x000c, 0x3602: 0x000c, 0x3605: 0x000c, + 0x3606: 0x000c, 0x3607: 0x000c, 0x3608: 0x000c, 0x3609: 0x000c, 0x360a: 0x000c, 0x360b: 0x000c, + 0x362a: 0x000c, 0x362b: 0x000c, 0x362c: 0x000c, 0x362d: 0x000c, + // Block 0xd9, offset 0x3640 + 0x3669: 0x000a, + 0x366a: 0x000a, + // Block 0xda, offset 0x3680 + 0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000c, 0x3683: 0x000c, 0x3684: 0x000c, 0x3685: 0x000a, + // 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, 0x36d6: 0x000a, + // Block 0xdc, offset 0x3700 + 0x371b: 0x000a, + // Block 0xdd, offset 0x3740 + 0x3755: 0x000a, + // Block 0xde, offset 0x3780 + 0x378f: 0x000a, + // Block 0xdf, offset 0x37c0 + 0x37c9: 0x000a, + // Block 0xe0, offset 0x3800 + 0x3803: 0x000a, + 0x380e: 0x0002, 0x380f: 0x0002, 0x3810: 0x0002, 0x3811: 0x0002, + 0x3812: 0x0002, 0x3813: 0x0002, 0x3814: 0x0002, 0x3815: 0x0002, 0x3816: 0x0002, 0x3817: 0x0002, + 0x3818: 0x0002, 0x3819: 0x0002, 0x381a: 0x0002, 0x381b: 0x0002, 0x381c: 0x0002, 0x381d: 0x0002, + 0x381e: 0x0002, 0x381f: 0x0002, 0x3820: 0x0002, 0x3821: 0x0002, 0x3822: 0x0002, 0x3823: 0x0002, + 0x3824: 0x0002, 0x3825: 0x0002, 0x3826: 0x0002, 0x3827: 0x0002, 0x3828: 0x0002, 0x3829: 0x0002, + 0x382a: 0x0002, 0x382b: 0x0002, 0x382c: 0x0002, 0x382d: 0x0002, 0x382e: 0x0002, 0x382f: 0x0002, + 0x3830: 0x0002, 0x3831: 0x0002, 0x3832: 0x0002, 0x3833: 0x0002, 0x3834: 0x0002, 0x3835: 0x0002, + 0x3836: 0x0002, 0x3837: 0x0002, 0x3838: 0x0002, 0x3839: 0x0002, 0x383a: 0x0002, 0x383b: 0x0002, + 0x383c: 0x0002, 0x383d: 0x0002, 0x383e: 0x0002, 0x383f: 0x0002, + // Block 0xe1, offset 0x3840 + 0x3840: 0x000c, 0x3841: 0x000c, 0x3842: 0x000c, 0x3843: 0x000c, 0x3844: 0x000c, 0x3845: 0x000c, + 0x3846: 0x000c, 0x3847: 0x000c, 0x3848: 0x000c, 0x3849: 0x000c, 0x384a: 0x000c, 0x384b: 0x000c, + 0x384c: 0x000c, 0x384d: 0x000c, 0x384e: 0x000c, 0x384f: 0x000c, 0x3850: 0x000c, 0x3851: 0x000c, + 0x3852: 0x000c, 0x3853: 0x000c, 0x3854: 0x000c, 0x3855: 0x000c, 0x3856: 0x000c, 0x3857: 0x000c, + 0x3858: 0x000c, 0x3859: 0x000c, 0x385a: 0x000c, 0x385b: 0x000c, 0x385c: 0x000c, 0x385d: 0x000c, + 0x385e: 0x000c, 0x385f: 0x000c, 0x3860: 0x000c, 0x3861: 0x000c, 0x3862: 0x000c, 0x3863: 0x000c, + 0x3864: 0x000c, 0x3865: 0x000c, 0x3866: 0x000c, 0x3867: 0x000c, 0x3868: 0x000c, 0x3869: 0x000c, + 0x386a: 0x000c, 0x386b: 0x000c, 0x386c: 0x000c, 0x386d: 0x000c, 0x386e: 0x000c, 0x386f: 0x000c, + 0x3870: 0x000c, 0x3871: 0x000c, 0x3872: 0x000c, 0x3873: 0x000c, 0x3874: 0x000c, 0x3875: 0x000c, + 0x3876: 0x000c, 0x387b: 0x000c, + 0x387c: 0x000c, 0x387d: 0x000c, 0x387e: 0x000c, 0x387f: 0x000c, + // Block 0xe2, offset 0x3880 + 0x3880: 0x000c, 0x3881: 0x000c, 0x3882: 0x000c, 0x3883: 0x000c, 0x3884: 0x000c, 0x3885: 0x000c, + 0x3886: 0x000c, 0x3887: 0x000c, 0x3888: 0x000c, 0x3889: 0x000c, 0x388a: 0x000c, 0x388b: 0x000c, + 0x388c: 0x000c, 0x388d: 0x000c, 0x388e: 0x000c, 0x388f: 0x000c, 0x3890: 0x000c, 0x3891: 0x000c, + 0x3892: 0x000c, 0x3893: 0x000c, 0x3894: 0x000c, 0x3895: 0x000c, 0x3896: 0x000c, 0x3897: 0x000c, + 0x3898: 0x000c, 0x3899: 0x000c, 0x389a: 0x000c, 0x389b: 0x000c, 0x389c: 0x000c, 0x389d: 0x000c, + 0x389e: 0x000c, 0x389f: 0x000c, 0x38a0: 0x000c, 0x38a1: 0x000c, 0x38a2: 0x000c, 0x38a3: 0x000c, + 0x38a4: 0x000c, 0x38a5: 0x000c, 0x38a6: 0x000c, 0x38a7: 0x000c, 0x38a8: 0x000c, 0x38a9: 0x000c, + 0x38aa: 0x000c, 0x38ab: 0x000c, 0x38ac: 0x000c, + 0x38b5: 0x000c, + // Block 0xe3, offset 0x38c0 + 0x38c4: 0x000c, + 0x38db: 0x000c, 0x38dc: 0x000c, 0x38dd: 0x000c, + 0x38de: 0x000c, 0x38df: 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, + // Block 0xe4, offset 0x3900 + 0x3900: 0x000c, 0x3901: 0x000c, 0x3902: 0x000c, 0x3903: 0x000c, 0x3904: 0x000c, 0x3905: 0x000c, + 0x3906: 0x000c, 0x3908: 0x000c, 0x3909: 0x000c, 0x390a: 0x000c, 0x390b: 0x000c, + 0x390c: 0x000c, 0x390d: 0x000c, 0x390e: 0x000c, 0x390f: 0x000c, 0x3910: 0x000c, 0x3911: 0x000c, + 0x3912: 0x000c, 0x3913: 0x000c, 0x3914: 0x000c, 0x3915: 0x000c, 0x3916: 0x000c, 0x3917: 0x000c, + 0x3918: 0x000c, 0x391b: 0x000c, 0x391c: 0x000c, 0x391d: 0x000c, + 0x391e: 0x000c, 0x391f: 0x000c, 0x3920: 0x000c, 0x3921: 0x000c, 0x3923: 0x000c, + 0x3924: 0x000c, 0x3926: 0x000c, 0x3927: 0x000c, 0x3928: 0x000c, 0x3929: 0x000c, + 0x392a: 0x000c, + // Block 0xe5, offset 0x3940 + 0x396e: 0x000c, + // Block 0xe6, offset 0x3980 + 0x39ac: 0x000c, 0x39ad: 0x000c, 0x39ae: 0x000c, 0x39af: 0x000c, + 0x39bf: 0x0004, + // Block 0xe7, offset 0x39c0 + 0x39ec: 0x000c, 0x39ed: 0x000c, 0x39ee: 0x000c, 0x39ef: 0x000c, + // Block 0xe8, offset 0x3a00 + 0x3a00: 0x0001, 0x3a01: 0x0001, 0x3a02: 0x0001, 0x3a03: 0x0001, 0x3a04: 0x0001, 0x3a05: 0x0001, + 0x3a06: 0x0001, 0x3a07: 0x0001, 0x3a08: 0x0001, 0x3a09: 0x0001, 0x3a0a: 0x0001, 0x3a0b: 0x0001, + 0x3a0c: 0x0001, 0x3a0d: 0x0001, 0x3a0e: 0x0001, 0x3a0f: 0x0001, 0x3a10: 0x000c, 0x3a11: 0x000c, + 0x3a12: 0x000c, 0x3a13: 0x000c, 0x3a14: 0x000c, 0x3a15: 0x000c, 0x3a16: 0x000c, 0x3a17: 0x0001, + 0x3a18: 0x0001, 0x3a19: 0x0001, 0x3a1a: 0x0001, 0x3a1b: 0x0001, 0x3a1c: 0x0001, 0x3a1d: 0x0001, + 0x3a1e: 0x0001, 0x3a1f: 0x0001, 0x3a20: 0x0001, 0x3a21: 0x0001, 0x3a22: 0x0001, 0x3a23: 0x0001, + 0x3a24: 0x0001, 0x3a25: 0x0001, 0x3a26: 0x0001, 0x3a27: 0x0001, 0x3a28: 0x0001, 0x3a29: 0x0001, + 0x3a2a: 0x0001, 0x3a2b: 0x0001, 0x3a2c: 0x0001, 0x3a2d: 0x0001, 0x3a2e: 0x0001, 0x3a2f: 0x0001, + 0x3a30: 0x0001, 0x3a31: 0x0001, 0x3a32: 0x0001, 0x3a33: 0x0001, 0x3a34: 0x0001, 0x3a35: 0x0001, + 0x3a36: 0x0001, 0x3a37: 0x0001, 0x3a38: 0x0001, 0x3a39: 0x0001, 0x3a3a: 0x0001, 0x3a3b: 0x0001, + 0x3a3c: 0x0001, 0x3a3d: 0x0001, 0x3a3e: 0x0001, 0x3a3f: 0x0001, + // Block 0xe9, offset 0x3a40 + 0x3a40: 0x0001, 0x3a41: 0x0001, 0x3a42: 0x0001, 0x3a43: 0x0001, 0x3a44: 0x000c, 0x3a45: 0x000c, + 0x3a46: 0x000c, 0x3a47: 0x000c, 0x3a48: 0x000c, 0x3a49: 0x000c, 0x3a4a: 0x000c, 0x3a4b: 0x0001, + 0x3a4c: 0x0001, 0x3a4d: 0x0001, 0x3a4e: 0x0001, 0x3a4f: 0x0001, 0x3a50: 0x0001, 0x3a51: 0x0001, + 0x3a52: 0x0001, 0x3a53: 0x0001, 0x3a54: 0x0001, 0x3a55: 0x0001, 0x3a56: 0x0001, 0x3a57: 0x0001, + 0x3a58: 0x0001, 0x3a59: 0x0001, 0x3a5a: 0x0001, 0x3a5b: 0x0001, 0x3a5c: 0x0001, 0x3a5d: 0x0001, + 0x3a5e: 0x0001, 0x3a5f: 0x0001, 0x3a60: 0x0001, 0x3a61: 0x0001, 0x3a62: 0x0001, 0x3a63: 0x0001, + 0x3a64: 0x0001, 0x3a65: 0x0001, 0x3a66: 0x0001, 0x3a67: 0x0001, 0x3a68: 0x0001, 0x3a69: 0x0001, + 0x3a6a: 0x0001, 0x3a6b: 0x0001, 0x3a6c: 0x0001, 0x3a6d: 0x0001, 0x3a6e: 0x0001, 0x3a6f: 0x0001, + 0x3a70: 0x0001, 0x3a71: 0x0001, 0x3a72: 0x0001, 0x3a73: 0x0001, 0x3a74: 0x0001, 0x3a75: 0x0001, + 0x3a76: 0x0001, 0x3a77: 0x0001, 0x3a78: 0x0001, 0x3a79: 0x0001, 0x3a7a: 0x0001, 0x3a7b: 0x0001, + 0x3a7c: 0x0001, 0x3a7d: 0x0001, 0x3a7e: 0x0001, 0x3a7f: 0x0001, + // Block 0xea, offset 0x3a80 + 0x3a80: 0x0001, 0x3a81: 0x0001, 0x3a82: 0x0001, 0x3a83: 0x0001, 0x3a84: 0x0001, 0x3a85: 0x0001, + 0x3a86: 0x0001, 0x3a87: 0x0001, 0x3a88: 0x0001, 0x3a89: 0x0001, 0x3a8a: 0x0001, 0x3a8b: 0x0001, + 0x3a8c: 0x0001, 0x3a8d: 0x0001, 0x3a8e: 0x0001, 0x3a8f: 0x0001, 0x3a90: 0x0001, 0x3a91: 0x0001, + 0x3a92: 0x0001, 0x3a93: 0x0001, 0x3a94: 0x0001, 0x3a95: 0x0001, 0x3a96: 0x0001, 0x3a97: 0x0001, + 0x3a98: 0x0001, 0x3a99: 0x0001, 0x3a9a: 0x0001, 0x3a9b: 0x0001, 0x3a9c: 0x0001, 0x3a9d: 0x0001, + 0x3a9e: 0x0001, 0x3a9f: 0x0001, 0x3aa0: 0x0001, 0x3aa1: 0x0001, 0x3aa2: 0x0001, 0x3aa3: 0x0001, + 0x3aa4: 0x0001, 0x3aa5: 0x0001, 0x3aa6: 0x0001, 0x3aa7: 0x0001, 0x3aa8: 0x0001, 0x3aa9: 0x0001, + 0x3aaa: 0x0001, 0x3aab: 0x0001, 0x3aac: 0x0001, 0x3aad: 0x0001, 0x3aae: 0x0001, 0x3aaf: 0x0001, + 0x3ab0: 0x0001, 0x3ab1: 0x000d, 0x3ab2: 0x000d, 0x3ab3: 0x000d, 0x3ab4: 0x000d, 0x3ab5: 0x000d, + 0x3ab6: 0x000d, 0x3ab7: 0x000d, 0x3ab8: 0x000d, 0x3ab9: 0x000d, 0x3aba: 0x000d, 0x3abb: 0x000d, + 0x3abc: 0x000d, 0x3abd: 0x000d, 0x3abe: 0x000d, 0x3abf: 0x000d, + // Block 0xeb, offset 0x3ac0 + 0x3ac0: 0x000d, 0x3ac1: 0x000d, 0x3ac2: 0x000d, 0x3ac3: 0x000d, 0x3ac4: 0x000d, 0x3ac5: 0x000d, + 0x3ac6: 0x000d, 0x3ac7: 0x000d, 0x3ac8: 0x000d, 0x3ac9: 0x000d, 0x3aca: 0x000d, 0x3acb: 0x000d, + 0x3acc: 0x000d, 0x3acd: 0x000d, 0x3ace: 0x000d, 0x3acf: 0x000d, 0x3ad0: 0x000d, 0x3ad1: 0x000d, + 0x3ad2: 0x000d, 0x3ad3: 0x000d, 0x3ad4: 0x000d, 0x3ad5: 0x000d, 0x3ad6: 0x000d, 0x3ad7: 0x000d, + 0x3ad8: 0x000d, 0x3ad9: 0x000d, 0x3ada: 0x000d, 0x3adb: 0x000d, 0x3adc: 0x000d, 0x3add: 0x000d, + 0x3ade: 0x000d, 0x3adf: 0x000d, 0x3ae0: 0x000d, 0x3ae1: 0x000d, 0x3ae2: 0x000d, 0x3ae3: 0x000d, + 0x3ae4: 0x000d, 0x3ae5: 0x000d, 0x3ae6: 0x000d, 0x3ae7: 0x000d, 0x3ae8: 0x000d, 0x3ae9: 0x000d, + 0x3aea: 0x000d, 0x3aeb: 0x000d, 0x3aec: 0x000d, 0x3aed: 0x000d, 0x3aee: 0x000d, 0x3aef: 0x000d, + 0x3af0: 0x000d, 0x3af1: 0x000d, 0x3af2: 0x000d, 0x3af3: 0x000d, 0x3af4: 0x000d, 0x3af5: 0x0001, + 0x3af6: 0x0001, 0x3af7: 0x0001, 0x3af8: 0x0001, 0x3af9: 0x0001, 0x3afa: 0x0001, 0x3afb: 0x0001, + 0x3afc: 0x0001, 0x3afd: 0x0001, 0x3afe: 0x0001, 0x3aff: 0x0001, + // Block 0xec, offset 0x3b00 + 0x3b00: 0x0001, 0x3b01: 0x000d, 0x3b02: 0x000d, 0x3b03: 0x000d, 0x3b04: 0x000d, 0x3b05: 0x000d, + 0x3b06: 0x000d, 0x3b07: 0x000d, 0x3b08: 0x000d, 0x3b09: 0x000d, 0x3b0a: 0x000d, 0x3b0b: 0x000d, + 0x3b0c: 0x000d, 0x3b0d: 0x000d, 0x3b0e: 0x000d, 0x3b0f: 0x000d, 0x3b10: 0x000d, 0x3b11: 0x000d, + 0x3b12: 0x000d, 0x3b13: 0x000d, 0x3b14: 0x000d, 0x3b15: 0x000d, 0x3b16: 0x000d, 0x3b17: 0x000d, + 0x3b18: 0x000d, 0x3b19: 0x000d, 0x3b1a: 0x000d, 0x3b1b: 0x000d, 0x3b1c: 0x000d, 0x3b1d: 0x000d, + 0x3b1e: 0x000d, 0x3b1f: 0x000d, 0x3b20: 0x000d, 0x3b21: 0x000d, 0x3b22: 0x000d, 0x3b23: 0x000d, + 0x3b24: 0x000d, 0x3b25: 0x000d, 0x3b26: 0x000d, 0x3b27: 0x000d, 0x3b28: 0x000d, 0x3b29: 0x000d, + 0x3b2a: 0x000d, 0x3b2b: 0x000d, 0x3b2c: 0x000d, 0x3b2d: 0x000d, 0x3b2e: 0x000d, 0x3b2f: 0x000d, + 0x3b30: 0x000d, 0x3b31: 0x000d, 0x3b32: 0x000d, 0x3b33: 0x000d, 0x3b34: 0x000d, 0x3b35: 0x000d, + 0x3b36: 0x000d, 0x3b37: 0x000d, 0x3b38: 0x000d, 0x3b39: 0x000d, 0x3b3a: 0x000d, 0x3b3b: 0x000d, + 0x3b3c: 0x000d, 0x3b3d: 0x000d, 0x3b3e: 0x0001, 0x3b3f: 0x0001, + // Block 0xed, offset 0x3b40 + 0x3b40: 0x000d, 0x3b41: 0x000d, 0x3b42: 0x000d, 0x3b43: 0x000d, 0x3b44: 0x000d, 0x3b45: 0x000d, + 0x3b46: 0x000d, 0x3b47: 0x000d, 0x3b48: 0x000d, 0x3b49: 0x000d, 0x3b4a: 0x000d, 0x3b4b: 0x000d, + 0x3b4c: 0x000d, 0x3b4d: 0x000d, 0x3b4e: 0x000d, 0x3b4f: 0x000d, 0x3b50: 0x000d, 0x3b51: 0x000d, + 0x3b52: 0x000d, 0x3b53: 0x000d, 0x3b54: 0x000d, 0x3b55: 0x000d, 0x3b56: 0x000d, 0x3b57: 0x000d, + 0x3b58: 0x000d, 0x3b59: 0x000d, 0x3b5a: 0x000d, 0x3b5b: 0x000d, 0x3b5c: 0x000d, 0x3b5d: 0x000d, + 0x3b5e: 0x000d, 0x3b5f: 0x000d, 0x3b60: 0x000d, 0x3b61: 0x000d, 0x3b62: 0x000d, 0x3b63: 0x000d, + 0x3b64: 0x000d, 0x3b65: 0x000d, 0x3b66: 0x000d, 0x3b67: 0x000d, 0x3b68: 0x000d, 0x3b69: 0x000d, + 0x3b6a: 0x000d, 0x3b6b: 0x000d, 0x3b6c: 0x000d, 0x3b6d: 0x000d, 0x3b6e: 0x000d, 0x3b6f: 0x000d, + 0x3b70: 0x000a, 0x3b71: 0x000a, 0x3b72: 0x000d, 0x3b73: 0x000d, 0x3b74: 0x000d, 0x3b75: 0x000d, + 0x3b76: 0x000d, 0x3b77: 0x000d, 0x3b78: 0x000d, 0x3b79: 0x000d, 0x3b7a: 0x000d, 0x3b7b: 0x000d, + 0x3b7c: 0x000d, 0x3b7d: 0x000d, 0x3b7e: 0x000d, 0x3b7f: 0x000d, + // 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, + 0x3bb0: 0x000a, 0x3bb1: 0x000a, 0x3bb2: 0x000a, 0x3bb3: 0x000a, 0x3bb4: 0x000a, 0x3bb5: 0x000a, + 0x3bb6: 0x000a, 0x3bb7: 0x000a, 0x3bb8: 0x000a, 0x3bb9: 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, + 0x3bcc: 0x000a, 0x3bcd: 0x000a, 0x3bce: 0x000a, 0x3bcf: 0x000a, 0x3bd0: 0x000a, 0x3bd1: 0x000a, + 0x3bd2: 0x000a, 0x3bd3: 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, + 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 + 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, 0x3c11: 0x000a, + 0x3c12: 0x000a, 0x3c13: 0x000a, 0x3c14: 0x000a, 0x3c15: 0x000a, 0x3c16: 0x000a, 0x3c17: 0x000a, + 0x3c18: 0x000a, 0x3c19: 0x000a, 0x3c1a: 0x000a, 0x3c1b: 0x000a, 0x3c1c: 0x000a, 0x3c1d: 0x000a, + 0x3c1e: 0x000a, 0x3c1f: 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, 0x3c2e: 0x000a, 0x3c2f: 0x000a, + 0x3c30: 0x000a, 0x3c31: 0x000a, 0x3c32: 0x000a, 0x3c33: 0x000a, 0x3c34: 0x000a, 0x3c35: 0x000a, + // Block 0xf1, offset 0x3c40 + 0x3c40: 0x0002, 0x3c41: 0x0002, 0x3c42: 0x0002, 0x3c43: 0x0002, 0x3c44: 0x0002, 0x3c45: 0x0002, + 0x3c46: 0x0002, 0x3c47: 0x0002, 0x3c48: 0x0002, 0x3c49: 0x0002, 0x3c4a: 0x0002, 0x3c4b: 0x000a, + 0x3c4c: 0x000a, 0x3c4d: 0x000a, 0x3c4e: 0x000a, 0x3c4f: 0x000a, + 0x3c6f: 0x000a, + // Block 0xf2, offset 0x3c80 + 0x3caa: 0x000a, 0x3cab: 0x000a, 0x3cac: 0x000a, 0x3cad: 0x000a, 0x3cae: 0x000a, 0x3caf: 0x000a, + // Block 0xf3, offset 0x3cc0 + 0x3ced: 0x000a, + // Block 0xf4, offset 0x3d00 + 0x3d20: 0x000a, 0x3d21: 0x000a, 0x3d22: 0x000a, 0x3d23: 0x000a, + 0x3d24: 0x000a, 0x3d25: 0x000a, + // Block 0xf5, offset 0x3d40 + 0x3d40: 0x000a, 0x3d41: 0x000a, 0x3d42: 0x000a, 0x3d43: 0x000a, 0x3d44: 0x000a, 0x3d45: 0x000a, + 0x3d46: 0x000a, 0x3d47: 0x000a, 0x3d48: 0x000a, 0x3d49: 0x000a, 0x3d4a: 0x000a, 0x3d4b: 0x000a, + 0x3d4c: 0x000a, 0x3d4d: 0x000a, 0x3d4e: 0x000a, 0x3d4f: 0x000a, 0x3d50: 0x000a, 0x3d51: 0x000a, + 0x3d52: 0x000a, 0x3d53: 0x000a, 0x3d54: 0x000a, 0x3d55: 0x000a, 0x3d56: 0x000a, 0x3d57: 0x000a, + 0x3d5c: 0x000a, 0x3d5d: 0x000a, + 0x3d5e: 0x000a, 0x3d5f: 0x000a, 0x3d60: 0x000a, 0x3d61: 0x000a, 0x3d62: 0x000a, 0x3d63: 0x000a, + 0x3d64: 0x000a, 0x3d65: 0x000a, 0x3d66: 0x000a, 0x3d67: 0x000a, 0x3d68: 0x000a, 0x3d69: 0x000a, + 0x3d6a: 0x000a, 0x3d6b: 0x000a, 0x3d6c: 0x000a, + 0x3d70: 0x000a, 0x3d71: 0x000a, 0x3d72: 0x000a, 0x3d73: 0x000a, 0x3d74: 0x000a, 0x3d75: 0x000a, + 0x3d76: 0x000a, 0x3d77: 0x000a, 0x3d78: 0x000a, 0x3d79: 0x000a, 0x3d7a: 0x000a, 0x3d7b: 0x000a, + 0x3d7c: 0x000a, + // Block 0xf6, offset 0x3d80 + 0x3d80: 0x000a, 0x3d81: 0x000a, 0x3d82: 0x000a, 0x3d83: 0x000a, 0x3d84: 0x000a, 0x3d85: 0x000a, + 0x3d86: 0x000a, 0x3d87: 0x000a, 0x3d88: 0x000a, 0x3d89: 0x000a, 0x3d8a: 0x000a, 0x3d8b: 0x000a, + 0x3d8c: 0x000a, 0x3d8d: 0x000a, 0x3d8e: 0x000a, 0x3d8f: 0x000a, 0x3d90: 0x000a, 0x3d91: 0x000a, + 0x3d92: 0x000a, 0x3d93: 0x000a, 0x3d94: 0x000a, 0x3d95: 0x000a, 0x3d96: 0x000a, 0x3d97: 0x000a, + 0x3d98: 0x000a, 0x3d99: 0x000a, 0x3d9a: 0x000a, 0x3d9b: 0x000a, 0x3d9c: 0x000a, 0x3d9d: 0x000a, + 0x3d9e: 0x000a, 0x3d9f: 0x000a, 0x3da0: 0x000a, 0x3da1: 0x000a, 0x3da2: 0x000a, 0x3da3: 0x000a, + 0x3da4: 0x000a, 0x3da5: 0x000a, 0x3da6: 0x000a, 0x3da7: 0x000a, 0x3da8: 0x000a, 0x3da9: 0x000a, + 0x3daa: 0x000a, 0x3dab: 0x000a, 0x3dac: 0x000a, 0x3dad: 0x000a, 0x3dae: 0x000a, 0x3daf: 0x000a, + 0x3db0: 0x000a, 0x3db1: 0x000a, 0x3db2: 0x000a, 0x3db3: 0x000a, 0x3db4: 0x000a, 0x3db5: 0x000a, + 0x3db6: 0x000a, 0x3dbb: 0x000a, + 0x3dbc: 0x000a, 0x3dbd: 0x000a, 0x3dbe: 0x000a, 0x3dbf: 0x000a, + // Block 0xf7, offset 0x3dc0 + 0x3dc0: 0x000a, 0x3dc1: 0x000a, 0x3dc2: 0x000a, 0x3dc3: 0x000a, 0x3dc4: 0x000a, 0x3dc5: 0x000a, + 0x3dc6: 0x000a, 0x3dc7: 0x000a, 0x3dc8: 0x000a, 0x3dc9: 0x000a, 0x3dca: 0x000a, 0x3dcb: 0x000a, + 0x3dcc: 0x000a, 0x3dcd: 0x000a, 0x3dce: 0x000a, 0x3dcf: 0x000a, 0x3dd0: 0x000a, 0x3dd1: 0x000a, + 0x3dd2: 0x000a, 0x3dd3: 0x000a, 0x3dd4: 0x000a, 0x3dd5: 0x000a, 0x3dd6: 0x000a, 0x3dd7: 0x000a, + 0x3dd8: 0x000a, 0x3dd9: 0x000a, + 0x3de0: 0x000a, 0x3de1: 0x000a, 0x3de2: 0x000a, 0x3de3: 0x000a, + 0x3de4: 0x000a, 0x3de5: 0x000a, 0x3de6: 0x000a, 0x3de7: 0x000a, 0x3de8: 0x000a, 0x3de9: 0x000a, + 0x3dea: 0x000a, 0x3deb: 0x000a, + 0x3df0: 0x000a, + // Block 0xf8, offset 0x3e00 + 0x3e00: 0x000a, 0x3e01: 0x000a, 0x3e02: 0x000a, 0x3e03: 0x000a, 0x3e04: 0x000a, 0x3e05: 0x000a, + 0x3e06: 0x000a, 0x3e07: 0x000a, 0x3e08: 0x000a, 0x3e09: 0x000a, 0x3e0a: 0x000a, 0x3e0b: 0x000a, + 0x3e10: 0x000a, 0x3e11: 0x000a, + 0x3e12: 0x000a, 0x3e13: 0x000a, 0x3e14: 0x000a, 0x3e15: 0x000a, 0x3e16: 0x000a, 0x3e17: 0x000a, + 0x3e18: 0x000a, 0x3e19: 0x000a, 0x3e1a: 0x000a, 0x3e1b: 0x000a, 0x3e1c: 0x000a, 0x3e1d: 0x000a, + 0x3e1e: 0x000a, 0x3e1f: 0x000a, 0x3e20: 0x000a, 0x3e21: 0x000a, 0x3e22: 0x000a, 0x3e23: 0x000a, + 0x3e24: 0x000a, 0x3e25: 0x000a, 0x3e26: 0x000a, 0x3e27: 0x000a, 0x3e28: 0x000a, 0x3e29: 0x000a, + 0x3e2a: 0x000a, 0x3e2b: 0x000a, 0x3e2c: 0x000a, 0x3e2d: 0x000a, 0x3e2e: 0x000a, 0x3e2f: 0x000a, + 0x3e30: 0x000a, 0x3e31: 0x000a, 0x3e32: 0x000a, 0x3e33: 0x000a, 0x3e34: 0x000a, 0x3e35: 0x000a, + 0x3e36: 0x000a, 0x3e37: 0x000a, 0x3e38: 0x000a, 0x3e39: 0x000a, 0x3e3a: 0x000a, 0x3e3b: 0x000a, + 0x3e3c: 0x000a, 0x3e3d: 0x000a, 0x3e3e: 0x000a, 0x3e3f: 0x000a, + // Block 0xf9, offset 0x3e40 + 0x3e40: 0x000a, 0x3e41: 0x000a, 0x3e42: 0x000a, 0x3e43: 0x000a, 0x3e44: 0x000a, 0x3e45: 0x000a, + 0x3e46: 0x000a, 0x3e47: 0x000a, + 0x3e50: 0x000a, 0x3e51: 0x000a, + 0x3e52: 0x000a, 0x3e53: 0x000a, 0x3e54: 0x000a, 0x3e55: 0x000a, 0x3e56: 0x000a, 0x3e57: 0x000a, + 0x3e58: 0x000a, 0x3e59: 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, 0x3e6c: 0x000a, 0x3e6d: 0x000a, 0x3e6e: 0x000a, 0x3e6f: 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, + 0x3e90: 0x000a, 0x3e91: 0x000a, + 0x3e92: 0x000a, 0x3e93: 0x000a, 0x3e94: 0x000a, 0x3e95: 0x000a, 0x3e96: 0x000a, 0x3e97: 0x000a, + 0x3e98: 0x000a, 0x3e99: 0x000a, 0x3e9a: 0x000a, 0x3e9b: 0x000a, 0x3e9c: 0x000a, 0x3e9d: 0x000a, + 0x3e9e: 0x000a, 0x3e9f: 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, + 0x3eb0: 0x000a, 0x3eb1: 0x000a, + // Block 0xfb, offset 0x3ec0 + 0x3ec0: 0x000a, 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, 0x3ed0: 0x000a, 0x3ed1: 0x000a, + 0x3ed2: 0x000a, 0x3ed3: 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, + 0x3ef0: 0x000a, 0x3ef1: 0x000a, 0x3ef2: 0x000a, 0x3ef3: 0x000a, 0x3ef4: 0x000a, 0x3ef5: 0x000a, + 0x3ef6: 0x000a, 0x3ef7: 0x000a, 0x3ef8: 0x000a, 0x3ef9: 0x000a, 0x3efa: 0x000a, 0x3efb: 0x000a, + 0x3efc: 0x000a, + // Block 0xfc, offset 0x3f00 + 0x3f00: 0x000a, 0x3f01: 0x000a, 0x3f02: 0x000a, 0x3f03: 0x000a, 0x3f04: 0x000a, 0x3f05: 0x000a, + 0x3f06: 0x000a, 0x3f07: 0x000a, 0x3f08: 0x000a, + 0x3f10: 0x000a, 0x3f11: 0x000a, + 0x3f12: 0x000a, 0x3f13: 0x000a, 0x3f14: 0x000a, 0x3f15: 0x000a, 0x3f16: 0x000a, 0x3f17: 0x000a, + 0x3f18: 0x000a, 0x3f19: 0x000a, 0x3f1a: 0x000a, 0x3f1b: 0x000a, 0x3f1c: 0x000a, 0x3f1d: 0x000a, + 0x3f1e: 0x000a, 0x3f1f: 0x000a, 0x3f20: 0x000a, 0x3f21: 0x000a, 0x3f22: 0x000a, 0x3f23: 0x000a, + 0x3f24: 0x000a, 0x3f25: 0x000a, 0x3f26: 0x000a, 0x3f27: 0x000a, 0x3f28: 0x000a, 0x3f29: 0x000a, + 0x3f2a: 0x000a, 0x3f2b: 0x000a, 0x3f2c: 0x000a, 0x3f2d: 0x000a, 0x3f2e: 0x000a, 0x3f2f: 0x000a, + 0x3f30: 0x000a, 0x3f31: 0x000a, 0x3f32: 0x000a, 0x3f33: 0x000a, 0x3f34: 0x000a, 0x3f35: 0x000a, + 0x3f36: 0x000a, 0x3f37: 0x000a, 0x3f38: 0x000a, 0x3f39: 0x000a, 0x3f3a: 0x000a, 0x3f3b: 0x000a, + 0x3f3c: 0x000a, 0x3f3d: 0x000a, 0x3f3f: 0x000a, + // Block 0xfd, offset 0x3f40 + 0x3f40: 0x000a, 0x3f41: 0x000a, 0x3f42: 0x000a, 0x3f43: 0x000a, 0x3f44: 0x000a, 0x3f45: 0x000a, + 0x3f4e: 0x000a, 0x3f4f: 0x000a, 0x3f50: 0x000a, 0x3f51: 0x000a, + 0x3f52: 0x000a, 0x3f53: 0x000a, 0x3f54: 0x000a, 0x3f55: 0x000a, 0x3f56: 0x000a, 0x3f57: 0x000a, + 0x3f58: 0x000a, 0x3f59: 0x000a, 0x3f5a: 0x000a, 0x3f5b: 0x000a, + 0x3f60: 0x000a, 0x3f61: 0x000a, 0x3f62: 0x000a, 0x3f63: 0x000a, + 0x3f64: 0x000a, 0x3f65: 0x000a, 0x3f66: 0x000a, 0x3f67: 0x000a, 0x3f68: 0x000a, + 0x3f70: 0x000a, 0x3f71: 0x000a, 0x3f72: 0x000a, 0x3f73: 0x000a, 0x3f74: 0x000a, 0x3f75: 0x000a, + 0x3f76: 0x000a, 0x3f77: 0x000a, 0x3f78: 0x000a, + // Block 0xfe, offset 0x3f80 + 0x3f80: 0x000a, 0x3f81: 0x000a, 0x3f82: 0x000a, 0x3f83: 0x000a, 0x3f84: 0x000a, 0x3f85: 0x000a, + 0x3f86: 0x000a, 0x3f87: 0x000a, 0x3f88: 0x000a, 0x3f89: 0x000a, 0x3f8a: 0x000a, 0x3f8b: 0x000a, + 0x3f8c: 0x000a, 0x3f8d: 0x000a, 0x3f8e: 0x000a, 0x3f8f: 0x000a, 0x3f90: 0x000a, 0x3f91: 0x000a, + 0x3f92: 0x000a, 0x3f94: 0x000a, 0x3f95: 0x000a, 0x3f96: 0x000a, 0x3f97: 0x000a, + 0x3f98: 0x000a, 0x3f99: 0x000a, 0x3f9a: 0x000a, 0x3f9b: 0x000a, 0x3f9c: 0x000a, 0x3f9d: 0x000a, + 0x3f9e: 0x000a, 0x3f9f: 0x000a, 0x3fa0: 0x000a, 0x3fa1: 0x000a, 0x3fa2: 0x000a, 0x3fa3: 0x000a, + 0x3fa4: 0x000a, 0x3fa5: 0x000a, 0x3fa6: 0x000a, 0x3fa7: 0x000a, 0x3fa8: 0x000a, 0x3fa9: 0x000a, + 0x3faa: 0x000a, 0x3fab: 0x000a, 0x3fac: 0x000a, 0x3fad: 0x000a, 0x3fae: 0x000a, 0x3faf: 0x000a, + 0x3fb0: 0x000a, 0x3fb1: 0x000a, 0x3fb2: 0x000a, 0x3fb3: 0x000a, 0x3fb4: 0x000a, 0x3fb5: 0x000a, + 0x3fb6: 0x000a, 0x3fb7: 0x000a, 0x3fb8: 0x000a, 0x3fb9: 0x000a, 0x3fba: 0x000a, 0x3fbb: 0x000a, + 0x3fbc: 0x000a, 0x3fbd: 0x000a, 0x3fbe: 0x000a, 0x3fbf: 0x000a, + // Block 0xff, offset 0x3fc0 + 0x3fc0: 0x000a, 0x3fc1: 0x000a, 0x3fc2: 0x000a, 0x3fc3: 0x000a, 0x3fc4: 0x000a, 0x3fc5: 0x000a, + 0x3fc6: 0x000a, 0x3fc7: 0x000a, 0x3fc8: 0x000a, 0x3fc9: 0x000a, 0x3fca: 0x000a, + 0x3ff0: 0x0002, 0x3ff1: 0x0002, 0x3ff2: 0x0002, 0x3ff3: 0x0002, 0x3ff4: 0x0002, 0x3ff5: 0x0002, + 0x3ff6: 0x0002, 0x3ff7: 0x0002, 0x3ff8: 0x0002, 0x3ff9: 0x0002, + // Block 0x100, offset 0x4000 + 0x403e: 0x000b, 0x403f: 0x000b, + // Block 0x101, offset 0x4040 + 0x4040: 0x000b, 0x4041: 0x000b, 0x4042: 0x000b, 0x4043: 0x000b, 0x4044: 0x000b, 0x4045: 0x000b, + 0x4046: 0x000b, 0x4047: 0x000b, 0x4048: 0x000b, 0x4049: 0x000b, 0x404a: 0x000b, 0x404b: 0x000b, + 0x404c: 0x000b, 0x404d: 0x000b, 0x404e: 0x000b, 0x404f: 0x000b, 0x4050: 0x000b, 0x4051: 0x000b, + 0x4052: 0x000b, 0x4053: 0x000b, 0x4054: 0x000b, 0x4055: 0x000b, 0x4056: 0x000b, 0x4057: 0x000b, + 0x4058: 0x000b, 0x4059: 0x000b, 0x405a: 0x000b, 0x405b: 0x000b, 0x405c: 0x000b, 0x405d: 0x000b, + 0x405e: 0x000b, 0x405f: 0x000b, 0x4060: 0x000b, 0x4061: 0x000b, 0x4062: 0x000b, 0x4063: 0x000b, + 0x4064: 0x000b, 0x4065: 0x000b, 0x4066: 0x000b, 0x4067: 0x000b, 0x4068: 0x000b, 0x4069: 0x000b, + 0x406a: 0x000b, 0x406b: 0x000b, 0x406c: 0x000b, 0x406d: 0x000b, 0x406e: 0x000b, 0x406f: 0x000b, + 0x4070: 0x000b, 0x4071: 0x000b, 0x4072: 0x000b, 0x4073: 0x000b, 0x4074: 0x000b, 0x4075: 0x000b, + 0x4076: 0x000b, 0x4077: 0x000b, 0x4078: 0x000b, 0x4079: 0x000b, 0x407a: 0x000b, 0x407b: 0x000b, + 0x407c: 0x000b, 0x407d: 0x000b, 0x407e: 0x000b, 0x407f: 0x000b, + // Block 0x102, offset 0x4080 + 0x4080: 0x000c, 0x4081: 0x000c, 0x4082: 0x000c, 0x4083: 0x000c, 0x4084: 0x000c, 0x4085: 0x000c, + 0x4086: 0x000c, 0x4087: 0x000c, 0x4088: 0x000c, 0x4089: 0x000c, 0x408a: 0x000c, 0x408b: 0x000c, + 0x408c: 0x000c, 0x408d: 0x000c, 0x408e: 0x000c, 0x408f: 0x000c, 0x4090: 0x000c, 0x4091: 0x000c, + 0x4092: 0x000c, 0x4093: 0x000c, 0x4094: 0x000c, 0x4095: 0x000c, 0x4096: 0x000c, 0x4097: 0x000c, + 0x4098: 0x000c, 0x4099: 0x000c, 0x409a: 0x000c, 0x409b: 0x000c, 0x409c: 0x000c, 0x409d: 0x000c, + 0x409e: 0x000c, 0x409f: 0x000c, 0x40a0: 0x000c, 0x40a1: 0x000c, 0x40a2: 0x000c, 0x40a3: 0x000c, + 0x40a4: 0x000c, 0x40a5: 0x000c, 0x40a6: 0x000c, 0x40a7: 0x000c, 0x40a8: 0x000c, 0x40a9: 0x000c, + 0x40aa: 0x000c, 0x40ab: 0x000c, 0x40ac: 0x000c, 0x40ad: 0x000c, 0x40ae: 0x000c, 0x40af: 0x000c, + 0x40b0: 0x000b, 0x40b1: 0x000b, 0x40b2: 0x000b, 0x40b3: 0x000b, 0x40b4: 0x000b, 0x40b5: 0x000b, + 0x40b6: 0x000b, 0x40b7: 0x000b, 0x40b8: 0x000b, 0x40b9: 0x000b, 0x40ba: 0x000b, 0x40bb: 0x000b, + 0x40bc: 0x000b, 0x40bd: 0x000b, 0x40be: 0x000b, 0x40bf: 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: 0x64, 0x1af: 0x55, + 0x1b3: 0x65, 0x1b5: 0x66, 0x1b7: 0x67, + 0x1b8: 0x68, 0x1b9: 0x69, 0x1ba: 0x6a, 0x1bb: 0x6b, 0x1bc: 0x55, 0x1bd: 0x55, 0x1be: 0x55, 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: 0x55, + // 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, 0x26d: 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: 0x8f, 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: 0x55, 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: 0xa4, 0x2fc: 0xa5, 0x2fd: 0xa6, 0x2fe: 0xa7, 0x2ff: 0x9c, + // Block 0xc, offset 0x300 + 0x300: 0xa8, 0x301: 0xa9, 0x302: 0xaa, 0x303: 0x21, 0x304: 0xab, 0x305: 0xac, 0x306: 0xad, 0x307: 0xae, + 0x308: 0xaf, 0x309: 0x28, 0x30b: 0xb0, 0x30c: 0x26, 0x30d: 0xb1, + 0x310: 0xb2, 0x311: 0xb3, 0x312: 0xb4, 0x313: 0xb5, 0x316: 0xb6, 0x317: 0xb7, + 0x318: 0xb8, 0x319: 0xb9, 0x31a: 0xba, 0x31c: 0xbb, + 0x320: 0xbc, 0x324: 0xbd, 0x325: 0xbe, 0x327: 0xbf, + 0x328: 0xc0, 0x329: 0xc1, 0x32a: 0xc2, + 0x330: 0xc3, 0x332: 0xc4, 0x334: 0xc5, 0x335: 0xc6, 0x336: 0xc7, + 0x33b: 0xc8, 0x33c: 0xc9, 0x33d: 0xca, 0x33f: 0xcb, + // Block 0xd, offset 0x340 + 0x351: 0xcc, + // Block 0xe, offset 0x380 + 0x3ab: 0xcd, 0x3ac: 0xce, + 0x3bd: 0xcf, 0x3be: 0xd0, 0x3bf: 0xd1, + // Block 0xf, offset 0x3c0 + 0x3f2: 0xd2, + // Block 0x10, offset 0x400 + 0x43c: 0xd3, 0x43d: 0xd4, + // Block 0x11, offset 0x440 + 0x445: 0xd5, 0x446: 0xd6, 0x447: 0xd7, + 0x448: 0x55, 0x449: 0xd8, 0x44c: 0x55, 0x44d: 0xd9, + 0x45b: 0xda, 0x45c: 0xdb, 0x45d: 0xdc, 0x45e: 0xdd, 0x45f: 0xde, + 0x468: 0xdf, 0x469: 0xe0, 0x46a: 0xe1, + // Block 0x12, offset 0x480 + 0x480: 0xe2, 0x482: 0xcf, 0x484: 0xce, + 0x48a: 0xe3, 0x48b: 0xe4, + 0x493: 0xe5, + 0x4a0: 0x9c, 0x4a1: 0x9c, 0x4a2: 0x9c, 0x4a3: 0xe6, 0x4a4: 0x9c, 0x4a5: 0xe7, 0x4a6: 0x9c, 0x4a7: 0x9c, + 0x4a8: 0x9c, 0x4a9: 0x9c, 0x4aa: 0x9c, 0x4ab: 0x9c, 0x4ac: 0x9c, 0x4ad: 0x9c, 0x4ae: 0x9c, 0x4af: 0x9c, + 0x4b0: 0x9c, 0x4b1: 0xe8, 0x4b2: 0xe9, 0x4b3: 0x9c, 0x4b4: 0xea, 0x4b5: 0x9c, 0x4b6: 0x9c, 0x4b7: 0x9c, + 0x4b8: 0x0e, 0x4b9: 0x0e, 0x4ba: 0x0e, 0x4bb: 0xeb, 0x4bc: 0x9c, 0x4bd: 0x9c, 0x4be: 0x9c, 0x4bf: 0x9c, + // Block 0x13, offset 0x4c0 + 0x4c0: 0xec, 0x4c1: 0x55, 0x4c2: 0xed, 0x4c3: 0xee, 0x4c4: 0xef, 0x4c5: 0xf0, 0x4c6: 0xf1, + 0x4c9: 0xf2, 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: 0xf3, 0x4dc: 0x55, 0x4dd: 0xf4, 0x4de: 0x55, 0x4df: 0xf5, + 0x4e0: 0xf6, 0x4e1: 0xf7, 0x4e2: 0xf8, 0x4e4: 0x55, 0x4e5: 0x55, 0x4e6: 0x55, 0x4e7: 0x55, + 0x4e8: 0x55, 0x4e9: 0xf9, 0x4ea: 0xfa, 0x4eb: 0xfb, 0x4ec: 0x55, 0x4ed: 0x55, 0x4ee: 0xfc, 0x4ef: 0xfd, + 0x4ff: 0xfe, + // Block 0x14, offset 0x500 + 0x53f: 0xfe, + // 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: 0xff, 0x5c1: 0xff, 0x5c2: 0xff, 0x5c3: 0xff, 0x5c4: 0x05, 0x5c5: 0x05, 0x5c6: 0x05, 0x5c7: 0x100, + 0x5c8: 0xff, 0x5c9: 0xff, 0x5ca: 0xff, 0x5cb: 0xff, 0x5cc: 0xff, 0x5cd: 0xff, 0x5ce: 0xff, 0x5cf: 0xff, + 0x5d0: 0xff, 0x5d1: 0xff, 0x5d2: 0xff, 0x5d3: 0xff, 0x5d4: 0xff, 0x5d5: 0xff, 0x5d6: 0xff, 0x5d7: 0xff, + 0x5d8: 0xff, 0x5d9: 0xff, 0x5da: 0xff, 0x5db: 0xff, 0x5dc: 0xff, 0x5dd: 0xff, 0x5de: 0xff, 0x5df: 0xff, + 0x5e0: 0xff, 0x5e1: 0xff, 0x5e2: 0xff, 0x5e3: 0xff, 0x5e4: 0xff, 0x5e5: 0xff, 0x5e6: 0xff, 0x5e7: 0xff, + 0x5e8: 0xff, 0x5e9: 0xff, 0x5ea: 0xff, 0x5eb: 0xff, 0x5ec: 0xff, 0x5ed: 0xff, 0x5ee: 0xff, 0x5ef: 0xff, + 0x5f0: 0xff, 0x5f1: 0xff, 0x5f2: 0xff, 0x5f3: 0xff, 0x5f4: 0xff, 0x5f5: 0xff, 0x5f6: 0xff, 0x5f7: 0xff, + 0x5f8: 0xff, 0x5f9: 0xff, 0x5fa: 0xff, 0x5fb: 0xff, 0x5fc: 0xff, 0x5fd: 0xff, 0x5fe: 0xff, 0x5ff: 0xff, + // Block 0x18, offset 0x600 + 0x60f: 0x12, + 0x61f: 0x12, + 0x620: 0x15, + 0x62f: 0x12, + 0x63f: 0x12, + // Block 0x19, offset 0x640 + 0x64f: 0x12, +} + +// Total table size 19960 bytes (19KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go index 9115ef257e..f65785e8ac 100644 --- a/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go +++ b/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go @@ -1,7 +1,7 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -//go:build go1.16 -// +build go1.16 +//go:build go1.16 && !go1.21 +// +build go1.16,!go1.21 package norm 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 new file mode 100644 index 0000000000..e1858b879d --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go @@ -0,0 +1,7908 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.21 +// +build go1.21 + +package norm + +import "sync" + +const ( + // Version is the Unicode edition from which the tables are derived. + Version = "15.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 = [56]uint8{ + 0, 1, 6, 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 = 0x199A + firstCCC = 0x2DD5 + endMulti = 0x30A1 + firstLeadingCCC = 0x4AEF + firstCCCZeroExcept = 0x4BB9 + firstStarterWithNLead = 0x4BE0 + lastDecomp = 0x4BE2 + maxDecomp = 0x8000 +) + +// decomps: 19426 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, 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 + 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, + 0x42, 0xC9, 0xB6, 0x42, 0xC9, 0xB7, 0x42, 0xC9, + 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9, 0xBA, 0x42, + // Bytes 180 - 1bf + 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 + 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, 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, 0x99, 0x91, 0x43, 0xEA, + 0x9A, 0x89, 0x43, 0xEA, 0x9C, 0xA7, 0x43, 0xEA, + // Bytes 1740 - 177f + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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, 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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, 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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, 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 + 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 + 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 + 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 + 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, 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 0x86, 0xE3, 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, 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 0xCC, 0x80, 0xCD, 0x33, 0x42, 0xCC, 0x81, 0xCD, + 0x33, 0x42, 0xCC, 0x93, 0xCD, 0x33, 0x43, 0xE1, + // Bytes 4b00 - 4b3f + 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, 0x01, 0x00, + // Bytes 4b40 - 4b7f + 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, 0x86, 0xAA, + // Bytes 4b80 - 4bbf + 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, 0xCE, + 0x33, 0x43, 0xE3, 0x82, 0x99, 0x11, 0x04, 0x43, + // Bytes 4bc0 - 4bff + 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, +} + +// 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: 10798 bytes (10.54 KiB). Checksum: b5981cc85e3bd14. +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: 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, + // 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, + // 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, + // 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, + // 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, + // 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, + 0x20c: 0x9933, 0x20d: 0x8133, 0x20e: 0x8133, 0x20f: 0x9933, 0x210: 0x8133, 0x211: 0x9933, + 0x212: 0x8133, 0x213: 0x9933, 0x214: 0x9933, 0x215: 0x8134, 0x216: 0x812e, 0x217: 0x812e, + 0x218: 0x812e, 0x219: 0x812e, 0x21a: 0x8134, 0x21b: 0x992c, 0x21c: 0x812e, 0x21d: 0x812e, + 0x21e: 0x812e, 0x21f: 0x812e, 0x220: 0x812e, 0x221: 0x812a, 0x222: 0x812a, 0x223: 0x992e, + 0x224: 0x992e, 0x225: 0x992e, 0x226: 0x992e, 0x227: 0x992a, 0x228: 0x992a, 0x229: 0x812e, + 0x22a: 0x812e, 0x22b: 0x812e, 0x22c: 0x812e, 0x22d: 0x992e, 0x22e: 0x992e, 0x22f: 0x812e, + 0x230: 0x992e, 0x231: 0x992e, 0x232: 0x812e, 0x233: 0x812e, 0x234: 0x8101, 0x235: 0x8101, + 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: 0x4aef, 0x241: 0x4af4, 0x242: 0x9933, 0x243: 0x4af9, 0x244: 0x4bb2, 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, + 0x258: 0x8134, 0x259: 0x812e, 0x25a: 0x812e, 0x25b: 0x8133, 0x25c: 0x8135, 0x25d: 0x8136, + 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: 0x01ee, + 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, + 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, + 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, + 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, + 0x2d8: 0xa000, 0x2d9: 0x3892, 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, + 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, + // Block 0xd, offset 0x340 + 0x351: 0x812e, + 0x352: 0x8133, 0x353: 0x8133, 0x354: 0x8133, 0x355: 0x8133, 0x356: 0x812e, 0x357: 0x8133, + 0x358: 0x8133, 0x359: 0x8133, 0x35a: 0x812f, 0x35b: 0x812e, 0x35c: 0x8133, 0x35d: 0x8133, + 0x35e: 0x8133, 0x35f: 0x8133, 0x360: 0x8133, 0x361: 0x8133, 0x362: 0x812e, 0x363: 0x812e, + 0x364: 0x812e, 0x365: 0x812e, 0x366: 0x812e, 0x367: 0x812e, 0x368: 0x8133, 0x369: 0x8133, + 0x36a: 0x812e, 0x36b: 0x8133, 0x36c: 0x8133, 0x36d: 0x812f, 0x36e: 0x8132, 0x36f: 0x8133, + 0x370: 0x8106, 0x371: 0x8107, 0x372: 0x8108, 0x373: 0x8109, 0x374: 0x810a, 0x375: 0x810b, + 0x376: 0x810c, 0x377: 0x810d, 0x378: 0x810e, 0x379: 0x810f, 0x37a: 0x810f, 0x37b: 0x8110, + 0x37c: 0x8111, 0x37d: 0x8112, 0x37f: 0x8113, + // Block 0xe, offset 0x380 + 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8117, + 0x38c: 0x8118, 0x38d: 0x8119, 0x38e: 0x811a, 0x38f: 0x811b, 0x390: 0x811c, 0x391: 0x811d, + 0x392: 0x811e, 0x393: 0x9933, 0x394: 0x9933, 0x395: 0x992e, 0x396: 0x812e, 0x397: 0x8133, + 0x398: 0x8133, 0x399: 0x8133, 0x39a: 0x8133, 0x39b: 0x8133, 0x39c: 0x812e, 0x39d: 0x8133, + 0x39e: 0x8133, 0x39f: 0x812e, + 0x3b0: 0x811f, + // Block 0xf, offset 0x3c0 + 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, + 0x3ea: 0x8133, 0x3eb: 0x8133, 0x3ec: 0x8133, 0x3ed: 0x812e, 0x3ee: 0x812e, 0x3ef: 0x812e, + 0x3f0: 0x8117, 0x3f1: 0x8118, 0x3f2: 0x8119, 0x3f3: 0x8133, 0x3f4: 0x8133, 0x3f5: 0x8133, + 0x3f6: 0x812e, 0x3f7: 0x8133, 0x3f8: 0x8133, 0x3f9: 0x812e, 0x3fa: 0x812e, 0x3fb: 0x8133, + 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, + 0x434: 0x8103, 0x435: 0x9900, + 0x43a: 0xa000, 0x43b: 0x2e8d, + 0x43c: 0xa000, 0x43d: 0x2e95, 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, + 0x44c: 0x8133, 0x44d: 0x8136, 0x44e: 0x812b, 0x44f: 0x812e, 0x450: 0x812a, 0x451: 0x8133, + 0x452: 0x8133, 0x453: 0x8133, 0x454: 0x8133, 0x455: 0x8133, 0x456: 0x8133, 0x457: 0x8133, + 0x458: 0x8133, 0x459: 0x8133, 0x45a: 0x8133, 0x45b: 0x8133, 0x45c: 0x8133, 0x45d: 0x8133, + 0x45e: 0x8133, 0x45f: 0x8133, 0x460: 0x8133, 0x461: 0x8133, 0x462: 0x8133, 0x463: 0x8133, + 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, 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // Block 0x1a, offset 0x680 + 0x681: 0x3d47, 0x683: 0xa000, 0x684: 0x3d4e, 0x685: 0xa000, + 0x687: 0x3d55, 0x688: 0xa000, 0x689: 0x3d5c, + 0x68d: 0xa000, + 0x6a0: 0x30a6, 0x6a1: 0xa000, 0x6a2: 0x3d6a, + 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, + 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, + 0x6d1: 0xa000, + 0x6d2: 0xa000, + 0x6e2: 0xa000, + 0x6e8: 0xa000, 0x6e9: 0xa000, + 0x6eb: 0xa000, 0x6ec: 0x3de1, 0x6ed: 0x3de8, 0x6ee: 0x3def, 0x6ef: 0x3df6, + 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, + 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, + // Block 0x1d, offset 0x740 + 0x754: 0x4041, + 0x759: 0x9904, 0x75a: 0x9904, 0x75b: 0x8100, 0x75c: 0x8100, 0x75d: 0xa000, + 0x75e: 0x4111, + 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, + // 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, + 0x7af: 0xa000, + 0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x4119, + 0x7b7: 0x41e9, 0x7b8: 0x41f1, 0x7b9: 0x41f9, 0x7ba: 0x4201, + 0x7bd: 0xa000, 0x7be: 0x4209, + // 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, + 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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 +// 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, 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: 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: 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: 0x77, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, 0x1c4: 0x78, 0x1c5: 0x79, + 0x1c9: 0x7a, 0x1cc: 0x7b, 0x1cd: 0x7c, + // Block 0x8, offset 0x200 + 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: 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: 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: 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: 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: 0x9e, + 0x34b: 0x9f, 0x34d: 0xa0, + 0x368: 0xa1, 0x36b: 0xa2, + 0x374: 0xa3, + 0x37a: 0xa4, 0x37b: 0xa5, 0x37d: 0xa6, 0x37e: 0xa7, + // Block 0xe, offset 0x380 + 0x381: 0xa8, 0x382: 0xa9, 0x384: 0xaa, 0x385: 0x84, 0x387: 0xab, + 0x388: 0xac, 0x38b: 0xad, 0x38c: 0xae, 0x38d: 0xaf, + 0x391: 0xb0, 0x392: 0xb1, 0x393: 0xb2, 0x396: 0xb3, 0x397: 0xb4, + 0x398: 0x75, 0x39a: 0xb5, 0x39c: 0xb6, + 0x3a0: 0xb7, 0x3a4: 0xb8, 0x3a5: 0xb9, 0x3a7: 0xba, + 0x3a8: 0xbb, 0x3a9: 0xbc, 0x3aa: 0xbd, + 0x3b0: 0x75, 0x3b5: 0xbe, 0x3b6: 0xbf, + 0x3bd: 0xc0, + // Block 0xf, offset 0x3c0 + 0x3eb: 0xc1, 0x3ec: 0xc2, + 0x3ff: 0xc3, + // Block 0x10, offset 0x400 + 0x432: 0xc4, + // Block 0x11, offset 0x440 + 0x445: 0xc5, 0x446: 0xc6, 0x447: 0xc7, + 0x449: 0xc8, + // Block 0x12, offset 0x480 + 0x480: 0xc9, 0x482: 0xca, 0x484: 0xc2, + 0x48a: 0xcb, 0x48b: 0xcc, + 0x493: 0xcd, + 0x4a3: 0xce, 0x4a5: 0xcf, + // Block 0x13, offset 0x4c0 + 0x4c8: 0xd0, + // 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: 163 entries, 326 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, 0x12b, 0x134, 0x136, 0x139, 0x13b, 0x146, 0x14a, 0x158, 0x15b, 0x161, 0x167, 0x172, 0x176, 0x178, 0x17a, 0x17c, 0x17e, 0x180, 0x186, 0x18a, 0x18c, 0x18e, 0x196, 0x19a, 0x19d, 0x19f, 0x1a1, 0x1a4, 0x1a7, 0x1a9, 0x1ab, 0x1ad, 0x1af, 0x1b5, 0x1b8, 0x1ba, 0x1c1, 0x1c7, 0x1cd, 0x1d5, 0x1db, 0x1e1, 0x1e7, 0x1eb, 0x1f9, 0x202, 0x205, 0x208, 0x20a, 0x20d, 0x20f, 0x213, 0x218, 0x21a, 0x21c, 0x221, 0x227, 0x229, 0x22b, 0x22d, 0x233, 0x236, 0x238, 0x23a, 0x23c, 0x242, 0x246, 0x24a, 0x252, 0x259, 0x25c, 0x25f, 0x261, 0x264, 0x26c, 0x270, 0x277, 0x27a, 0x280, 0x282, 0x285, 0x287, 0x28a, 0x28f, 0x291, 0x293, 0x295, 0x297, 0x299, 0x29c, 0x29e, 0x2a0, 0x2a2, 0x2a4, 0x2a6, 0x2a8, 0x2b5, 0x2bf, 0x2c1, 0x2c3, 0x2c9, 0x2cb, 0x2cd, 0x2cf, 0x2d3, 0x2d5, 0x2d8} + +// nfcSparseValues: 730 entries, 2920 bytes +var nfcSparseValues = [730]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: 0x4823, lo: 0xa0, hi: 0xa1}, + {value: 0x4855, 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: 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: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x383e, 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: 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: 0xa000, lo: 0xb4, hi: 0xb5}, + {value: 0x395e, lo: 0xb6, hi: 0xb6}, + {value: 0x3964, lo: 0xb7, hi: 0xb7}, + // Block 0x6, offset 0x28 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x83, hi: 0x87}, + // Block 0x7, offset 0x2a + {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 0x8, offset 0x2f + {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: 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: 0xa000, lo: 0xa7, hi: 0xa7}, + // Block 0x9, offset 0x3a + {value: 0x0000, lo: 0x0e}, + {value: 0x39ac, lo: 0x80, hi: 0x80}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0x39a0, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x39a6, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x95, hi: 0x95}, + {value: 0x8133, lo: 0x96, hi: 0x9c}, + {value: 0x8133, lo: 0x9f, hi: 0xa2}, + {value: 0x812e, lo: 0xa3, hi: 0xa3}, + {value: 0x8133, lo: 0xa4, hi: 0xa4}, + {value: 0x8133, lo: 0xa7, hi: 0xa8}, + {value: 0x812e, lo: 0xaa, hi: 0xaa}, + {value: 0x8133, lo: 0xab, hi: 0xac}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + // Block 0xa, offset 0x49 + {value: 0x0000, lo: 0x0c}, + {value: 0x8120, lo: 0x91, hi: 0x91}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + {value: 0x812e, lo: 0xb1, hi: 0xb1}, + {value: 0x8133, lo: 0xb2, hi: 0xb3}, + {value: 0x812e, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb5, hi: 0xb6}, + {value: 0x812e, lo: 0xb7, hi: 0xb9}, + {value: 0x8133, lo: 0xba, hi: 0xba}, + {value: 0x812e, lo: 0xbb, hi: 0xbc}, + {value: 0x8133, lo: 0xbd, hi: 0xbd}, + {value: 0x812e, lo: 0xbe, hi: 0xbe}, + {value: 0x8133, lo: 0xbf, hi: 0xbf}, + // Block 0xb, offset 0x56 + {value: 0x0005, lo: 0x07}, + {value: 0x8133, lo: 0x80, hi: 0x80}, + {value: 0x8133, lo: 0x81, hi: 0x81}, + {value: 0x812e, lo: 0x82, hi: 0x83}, + {value: 0x812e, lo: 0x84, hi: 0x85}, + {value: 0x812e, lo: 0x86, hi: 0x87}, + {value: 0x812e, lo: 0x88, hi: 0x89}, + {value: 0x8133, lo: 0x8a, hi: 0x8a}, + // Block 0xc, offset 0x5e + {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 0xd, offset 0x63 + {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 0xe, offset 0x68 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x99, hi: 0x9b}, + // Block 0xf, offset 0x6a + {value: 0x0000, lo: 0x03}, + {value: 0x8133, lo: 0x98, 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: 0x4019, lo: 0xa9, hi: 0xa9}, + {value: 0xa000, lo: 0xb0, hi: 0xb0}, + {value: 0x4021, lo: 0xb1, hi: 0xb1}, + {value: 0xa000, lo: 0xb3, hi: 0xb3}, + {value: 0x4029, lo: 0xb4, hi: 0xb4}, + {value: 0x9903, lo: 0xbc, hi: 0xbc}, + // 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: 0x465d, 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 0x13, offset 0x80 + {value: 0x0008, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2dd5, 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: 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: 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}, + // Block 0x16, offset 0x90 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + // Block 0x17, offset 0x92 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + // 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: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x96, hi: 0x97}, + {value: 0x46e5, lo: 0x9c, hi: 0x9c}, + {value: 0x46ed, 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: 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: 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: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x8121, lo: 0x95, hi: 0x96}, + // Block 0x1c, offset 0xad + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + {value: 0xa000, lo: 0xbf, hi: 0xbf}, + // Block 0x1d, offset 0xb0 + {value: 0x0000, lo: 0x09}, + {value: 0x2e1d, 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: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x95, hi: 0x96}, + // Block 0x1e, offset 0xba + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // 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: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x20, offset 0xc4 + {value: 0x6ab3, 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}, + // Block 0x21, offset 0xcc + {value: 0x0000, lo: 0x02}, + {value: 0x8123, lo: 0xb8, hi: 0xb9}, + {value: 0x8105, lo: 0xba, hi: 0xba}, + // Block 0x22, offset 0xcf + {value: 0x0000, lo: 0x01}, + {value: 0x8124, lo: 0x88, hi: 0x8b}, + // Block 0x23, offset 0xd1 + {value: 0x0000, lo: 0x02}, + {value: 0x8125, lo: 0xb8, hi: 0xb9}, + {value: 0x8105, lo: 0xba, hi: 0xba}, + // Block 0x24, offset 0xd4 + {value: 0x0000, lo: 0x01}, + {value: 0x8126, lo: 0x88, hi: 0x8b}, + // 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 0x26, offset 0xdb + {value: 0x0000, lo: 0x10}, + {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: 0x4bc5, lo: 0xb3, hi: 0xb3}, + {value: 0x8129, lo: 0xb4, hi: 0xb4}, + {value: 0x4bce, lo: 0xb5, hi: 0xb5}, + {value: 0x46f5, lo: 0xb6, hi: 0xb6}, + {value: 0x8200, lo: 0xb7, hi: 0xb7}, + {value: 0x46fd, lo: 0xb8, hi: 0xb8}, + {value: 0x8200, lo: 0xb9, hi: 0xb9}, + {value: 0x8128, lo: 0xba, hi: 0xbd}, + // Block 0x27, offset 0xec + {value: 0x0000, lo: 0x0b}, + {value: 0x8128, lo: 0x80, hi: 0x80}, + {value: 0x4bd7, lo: 0x81, hi: 0x81}, + {value: 0x8133, lo: 0x82, hi: 0x83}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0x86, hi: 0x87}, + {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 0x29, offset 0xfa + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x2e55, lo: 0xa6, hi: 0xa6}, + {value: 0x9900, lo: 0xae, hi: 0xae}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + {value: 0x8105, lo: 0xb9, hi: 0xba}, + // Block 0x2a, offset 0x100 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x8d, hi: 0x8d}, + // Block 0x2b, offset 0x102 + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x80, hi: 0x92}, + // Block 0x2c, offset 0x104 + {value: 0x0000, lo: 0x01}, + {value: 0xb900, lo: 0xa1, hi: 0xb5}, + // Block 0x2d, offset 0x106 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xa8, hi: 0xbf}, + // Block 0x2e, offset 0x108 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0x80, hi: 0x82}, + // Block 0x2f, offset 0x10a + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x9d, hi: 0x9f}, + // Block 0x30, offset 0x10c + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x94, hi: 0x95}, + {value: 0x8105, lo: 0xb4, hi: 0xb4}, + // Block 0x31, offset 0x10f + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x92, hi: 0x92}, + {value: 0x8133, lo: 0x9d, hi: 0x9d}, + // Block 0x32, offset 0x112 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xa9, hi: 0xa9}, + // Block 0x33, offset 0x114 + {value: 0x0004, lo: 0x02}, + {value: 0x812f, lo: 0xb9, hi: 0xba}, + {value: 0x812e, lo: 0xbb, hi: 0xbb}, + // Block 0x34, offset 0x117 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x97, hi: 0x97}, + {value: 0x812e, lo: 0x98, hi: 0x98}, + // 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 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 0x37, offset 0x124 + {value: 0x0000, lo: 0x06}, + {value: 0x812e, lo: 0x80, hi: 0x80}, + {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: 0x8e}, + // Block 0x38, offset 0x12b + {value: 0x0000, lo: 0x08}, + {value: 0x2e9d, lo: 0x80, hi: 0x80}, + {value: 0x2ea5, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x2ead, 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 0x39, offset 0x134 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xaa, hi: 0xab}, + // Block 0x3a, offset 0x136 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xa6, hi: 0xa6}, + {value: 0x8105, lo: 0xb2, hi: 0xb3}, + // Block 0x3b, offset 0x139 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + // Block 0x3c, offset 0x13b + {value: 0x0000, lo: 0x0a}, + {value: 0x8133, lo: 0x90, hi: 0x92}, + {value: 0x8101, lo: 0x94, hi: 0x94}, + {value: 0x812e, lo: 0x95, hi: 0x99}, + {value: 0x8133, lo: 0x9a, hi: 0x9b}, + {value: 0x812e, lo: 0x9c, hi: 0x9f}, + {value: 0x8133, lo: 0xa0, hi: 0xa0}, + {value: 0x8101, lo: 0xa2, hi: 0xa8}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + {value: 0x8133, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb8, hi: 0xb9}, + // Block 0x3d, offset 0x146 + {value: 0x0004, lo: 0x03}, + {value: 0x052a, lo: 0x80, hi: 0x81}, + {value: 0x8100, lo: 0x97, hi: 0x97}, + {value: 0x8100, lo: 0xbe, hi: 0xbe}, + // Block 0x3e, offset 0x14a + {value: 0x0000, lo: 0x0d}, + {value: 0x8133, lo: 0x90, hi: 0x91}, + {value: 0x8101, lo: 0x92, hi: 0x93}, + {value: 0x8133, lo: 0x94, hi: 0x97}, + {value: 0x8101, lo: 0x98, hi: 0x9a}, + {value: 0x8133, lo: 0x9b, hi: 0x9c}, + {value: 0x8133, lo: 0xa1, hi: 0xa1}, + {value: 0x8101, lo: 0xa5, hi: 0xa6}, + {value: 0x8133, lo: 0xa7, hi: 0xa7}, + {value: 0x812e, lo: 0xa8, hi: 0xa8}, + {value: 0x8133, lo: 0xa9, hi: 0xa9}, + {value: 0x8101, lo: 0xaa, hi: 0xab}, + {value: 0x812e, lo: 0xac, hi: 0xaf}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + // Block 0x3f, offset 0x158 + {value: 0x43bc, lo: 0x02}, + {value: 0x023c, lo: 0xa6, hi: 0xa6}, + {value: 0x0057, lo: 0xaa, hi: 0xab}, + // Block 0x40, offset 0x15b + {value: 0x0007, lo: 0x05}, + {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}, + // Block 0x41, offset 0x161 + {value: 0x000e, lo: 0x05}, + {value: 0x3d0f, lo: 0x8d, hi: 0x8e}, + {value: 0x3d16, 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: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0x3d24, lo: 0x84, hi: 0x84}, + {value: 0xa000, lo: 0x88, hi: 0x88}, + {value: 0x3d2b, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x3d32, lo: 0x8c, hi: 0x8c}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0x3d39, lo: 0xa4, hi: 0xa5}, + {value: 0x3d40, 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}, + // 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}, + // Block 0x46, offset 0x17a + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xaf, hi: 0xb1}, + // Block 0x47, offset 0x17c + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x48, offset 0x17e + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa0, hi: 0xbf}, + // Block 0x49, offset 0x180 + {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 0x4a, offset 0x186 + {value: 0x0000, lo: 0x03}, + {value: 0x4be0, lo: 0xb3, hi: 0xb3}, + {value: 0x4be0, lo: 0xb5, hi: 0xb6}, + {value: 0x4be0, lo: 0xba, hi: 0xbf}, + // Block 0x4b, offset 0x18a + {value: 0x0000, lo: 0x01}, + {value: 0x4be0, lo: 0x8f, hi: 0xa3}, + // Block 0x4c, offset 0x18c + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xae, hi: 0xbe}, + // Block 0x4d, offset 0x18e + {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 0x196 + {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 0x19a + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xaf, hi: 0xaf}, + {value: 0x8133, lo: 0xb4, hi: 0xbd}, + // Block 0x50, offset 0x19d + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x9e, hi: 0x9f}, + // Block 0x51, offset 0x19f + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb0, hi: 0xb1}, + // Block 0x52, offset 0x1a1 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xac, hi: 0xac}, + // Block 0x53, offset 0x1a4 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0xa0, hi: 0xb1}, + // Block 0x54, offset 0x1a7 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xab, hi: 0xad}, + // Block 0x55, offset 0x1a9 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x93, hi: 0x93}, + // Block 0x56, offset 0x1ab + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xb3, hi: 0xb3}, + // Block 0x57, offset 0x1ad + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x80, hi: 0x80}, + // Block 0x58, offset 0x1af + {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 0x59, offset 0x1b5 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x81, hi: 0x81}, + {value: 0x8105, lo: 0xb6, hi: 0xb6}, + // Block 0x5a, offset 0x1b8 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xad, hi: 0xad}, + // Block 0x5b, offset 0x1ba + {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 0x1c1 + {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 0x1c7 + {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 0x1cd + {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 0x1d5 + {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 0x1db + {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 0x1e1 + {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 0x1e7 + {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 0x1eb + {value: 0x0006, lo: 0x0d}, + {value: 0x44d1, 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}, + // 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}, + // Block 0x65, offset 0x202 + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0xa4, hi: 0xa5}, + {value: 0x8100, lo: 0xb0, hi: 0xb1}, + // Block 0x66, offset 0x205 + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0x9b, hi: 0x9d}, + {value: 0x8200, lo: 0x9e, hi: 0xa3}, + // Block 0x67, offset 0x208 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x90, hi: 0x90}, + // Block 0x68, offset 0x20a + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0x99, hi: 0x99}, + {value: 0x8200, lo: 0xb2, hi: 0xb4}, + // Block 0x69, offset 0x20d + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xbc, hi: 0xbd}, + // Block 0x6a, offset 0x20f + {value: 0x0000, lo: 0x03}, + {value: 0x8133, lo: 0xa0, hi: 0xa6}, + {value: 0x812e, lo: 0xa7, hi: 0xad}, + {value: 0x8133, lo: 0xae, hi: 0xaf}, + // Block 0x6b, offset 0x213 + {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 0x218 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x81, hi: 0x8c}, + // Block 0x6d, offset 0x21a + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xb5, hi: 0xba}, + // Block 0x6e, offset 0x21c + {value: 0x0000, lo: 0x04}, + {value: 0x4be0, lo: 0x9e, hi: 0x9f}, + {value: 0x4be0, lo: 0xa3, hi: 0xa3}, + {value: 0x4be0, lo: 0xa5, hi: 0xa6}, + {value: 0x4be0, lo: 0xaa, hi: 0xaf}, + // Block 0x6f, offset 0x221 + {value: 0x0000, lo: 0x05}, + {value: 0x4be0, lo: 0x82, hi: 0x87}, + {value: 0x4be0, lo: 0x8a, hi: 0x8f}, + {value: 0x4be0, lo: 0x92, hi: 0x97}, + {value: 0x4be0, lo: 0x9a, hi: 0x9c}, + {value: 0x8100, lo: 0xa3, hi: 0xa3}, + // Block 0x70, offset 0x227 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + // Block 0x71, offset 0x229 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xa0, hi: 0xa0}, + // Block 0x72, offset 0x22b + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb6, hi: 0xba}, + // Block 0x73, offset 0x22d + {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 0x74, offset 0x233 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xa5, hi: 0xa5}, + {value: 0x812e, lo: 0xa6, hi: 0xa6}, + // Block 0x75, offset 0x236 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa4, hi: 0xa7}, + // Block 0x76, offset 0x238 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xab, hi: 0xac}, + // Block 0x77, offset 0x23a + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xbd, hi: 0xbf}, + // Block 0x78, offset 0x23c + {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 0x79, offset 0x242 + {value: 0x0005, lo: 0x03}, + {value: 0x8133, lo: 0x82, hi: 0x82}, + {value: 0x812e, lo: 0x83, hi: 0x84}, + {value: 0x812e, lo: 0x85, hi: 0x85}, + // Block 0x7a, offset 0x246 + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xb0, hi: 0xb0}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x7b, offset 0x24a + {value: 0x17fe, lo: 0x07}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x4379, lo: 0x9a, hi: 0x9a}, + {value: 0xa000, lo: 0x9b, hi: 0x9b}, + {value: 0x4383, lo: 0x9c, hi: 0x9c}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x438d, 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: 0xa000, lo: 0xb1, hi: 0xb2}, + {value: 0x8105, lo: 0xb3, hi: 0xb4}, + // Block 0x7d, offset 0x259 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x80, hi: 0x80}, + {value: 0x8103, lo: 0x8a, hi: 0x8a}, + // Block 0x7e, offset 0x25c + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb5, hi: 0xb5}, + {value: 0x8103, lo: 0xb6, hi: 0xb6}, + // Block 0x7f, offset 0x25f + {value: 0x0002, lo: 0x01}, + {value: 0x8103, lo: 0xa9, hi: 0xaa}, + // Block 0x80, offset 0x261 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // 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: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x8133, lo: 0xa6, hi: 0xac}, + {value: 0x8133, lo: 0xb0, hi: 0xb4}, + // Block 0x82, offset 0x26c + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0x82, hi: 0x82}, + {value: 0x8103, lo: 0x86, hi: 0x86}, + {value: 0x8133, lo: 0x9e, hi: 0x9e}, + // Block 0x83, offset 0x270 + {value: 0x6a23, 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}, + // Block 0x84, offset 0x277 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x82, hi: 0x82}, + {value: 0x8103, lo: 0x83, hi: 0x83}, + // Block 0x85, offset 0x27a + {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: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x86, offset 0x280 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0x80, hi: 0x80}, + // Block 0x87, offset 0x282 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb6, hi: 0xb6}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + // Block 0x88, offset 0x285 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xab, hi: 0xab}, + // Block 0x89, offset 0x287 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb9, hi: 0xb9}, + {value: 0x8103, lo: 0xba, hi: 0xba}, + // Block 0x8a, offset 0x28a + {value: 0x0000, lo: 0x04}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb5, hi: 0xb5}, + {value: 0x2f0f, lo: 0xb8, hi: 0xb8}, + {value: 0x8105, lo: 0xbd, hi: 0xbe}, + // Block 0x8b, offset 0x28f + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0x83, hi: 0x83}, + // Block 0x8c, offset 0x291 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xa0, hi: 0xa0}, + // Block 0x8d, offset 0x293 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xb4, hi: 0xb4}, + // Block 0x8e, offset 0x295 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x87, hi: 0x87}, + // Block 0x8f, offset 0x297 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x99, hi: 0x99}, + // Block 0x90, offset 0x299 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0x82, hi: 0x82}, + {value: 0x8105, lo: 0x84, hi: 0x85}, + // Block 0x91, offset 0x29c + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x97, hi: 0x97}, + // Block 0x92, offset 0x29e + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x81, hi: 0x82}, + // Block 0x93, offset 0x2a0 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0xb0, hi: 0xb4}, + // Block 0x94, offset 0x2a2 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb0, hi: 0xb6}, + // Block 0x95, offset 0x2a4 + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb0, hi: 0xb1}, + // Block 0x96, offset 0x2a6 + {value: 0x0000, lo: 0x01}, + {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: 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 0x98, offset 0x2b5 + {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: 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}, + // Block 0x99, offset 0x2bf + {value: 0x0000, lo: 0x01}, + {value: 0x47bb, lo: 0x80, hi: 0x80}, + // Block 0x9a, offset 0x2c1 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x82, hi: 0x84}, + // Block 0x9b, offset 0x2c3 + {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 0x9c, offset 0x2c9 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x8f, hi: 0x8f}, + // Block 0x9d, offset 0x2cb + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xae, hi: 0xae}, + // Block 0x9e, offset 0x2cd + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xac, hi: 0xaf}, + // Block 0x9f, offset 0x2cf + {value: 0x0000, lo: 0x03}, + {value: 0x8134, lo: 0xac, hi: 0xad}, + {value: 0x812e, lo: 0xae, hi: 0xae}, + {value: 0x8133, lo: 0xaf, hi: 0xaf}, + // Block 0xa0, offset 0x2d3 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x90, hi: 0x96}, + // Block 0xa1, offset 0x2d5 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x84, hi: 0x89}, + {value: 0x8103, lo: 0x8a, hi: 0x8a}, + // Block 0xa2, offset 0x2d8 + {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: 19260 bytes (18.81 KiB). Checksum: 1a0bbc4c8c24da49. +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 < 95: + return uint16(nfkcValues[n<<6+uint32(b)]) + default: + n -= 95 + return uint16(nfkcSparse.lookup(n, b)) + } +} + +// nfkcValues: 97 blocks, 6208 entries, 12416 bytes +// The third block is the zero block. +var nfkcValues = [6208]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: 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, + // 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, + // 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, + // 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, + // 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, + // 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, + 0x20c: 0x9933, 0x20d: 0x8133, 0x20e: 0x8133, 0x20f: 0x9933, 0x210: 0x8133, 0x211: 0x9933, + 0x212: 0x8133, 0x213: 0x9933, 0x214: 0x9933, 0x215: 0x8134, 0x216: 0x812e, 0x217: 0x812e, + 0x218: 0x812e, 0x219: 0x812e, 0x21a: 0x8134, 0x21b: 0x992c, 0x21c: 0x812e, 0x21d: 0x812e, + 0x21e: 0x812e, 0x21f: 0x812e, 0x220: 0x812e, 0x221: 0x812a, 0x222: 0x812a, 0x223: 0x992e, + 0x224: 0x992e, 0x225: 0x992e, 0x226: 0x992e, 0x227: 0x992a, 0x228: 0x992a, 0x229: 0x812e, + 0x22a: 0x812e, 0x22b: 0x812e, 0x22c: 0x812e, 0x22d: 0x992e, 0x22e: 0x992e, 0x22f: 0x812e, + 0x230: 0x992e, 0x231: 0x992e, 0x232: 0x812e, 0x233: 0x812e, 0x234: 0x8101, 0x235: 0x8101, + 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: 0x4aef, 0x241: 0x4af4, 0x242: 0x9933, 0x243: 0x4af9, 0x244: 0x4bb2, 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, + 0x258: 0x8134, 0x259: 0x812e, 0x25a: 0x812e, 0x25b: 0x8133, 0x25c: 0x8135, 0x25d: 0x8136, + 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: 0x01ee, + 0x27a: 0x43e6, + 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, + 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, + 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, + 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, + 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, + 0x318: 0xa000, 0x319: 0x3892, 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, + 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, + // Block 0xe, offset 0x380 + 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, + 0x39e: 0x8133, 0x39f: 0x8133, 0x3a0: 0x8133, 0x3a1: 0x8133, 0x3a2: 0x812e, 0x3a3: 0x812e, + 0x3a4: 0x812e, 0x3a5: 0x812e, 0x3a6: 0x812e, 0x3a7: 0x812e, 0x3a8: 0x8133, 0x3a9: 0x8133, + 0x3aa: 0x812e, 0x3ab: 0x8133, 0x3ac: 0x8133, 0x3ad: 0x812f, 0x3ae: 0x8132, 0x3af: 0x8133, + 0x3b0: 0x8106, 0x3b1: 0x8107, 0x3b2: 0x8108, 0x3b3: 0x8109, 0x3b4: 0x810a, 0x3b5: 0x810b, + 0x3b6: 0x810c, 0x3b7: 0x810d, 0x3b8: 0x810e, 0x3b9: 0x810f, 0x3ba: 0x810f, 0x3bb: 0x8110, + 0x3bc: 0x8111, 0x3bd: 0x8112, 0x3bf: 0x8113, + // Block 0xf, offset 0x3c0 + 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8117, + 0x3cc: 0x8118, 0x3cd: 0x8119, 0x3ce: 0x811a, 0x3cf: 0x811b, 0x3d0: 0x811c, 0x3d1: 0x811d, + 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: 0x1eb4, + 0x3f6: 0x2143, 0x3f7: 0x217f, 0x3f8: 0x217a, + // Block 0x10, offset 0x400 + 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, + 0x42a: 0x8133, 0x42b: 0x8133, 0x42c: 0x8133, 0x42d: 0x812e, 0x42e: 0x812e, 0x42f: 0x812e, + 0x430: 0x8117, 0x431: 0x8118, 0x432: 0x8119, 0x433: 0x8133, 0x434: 0x8133, 0x435: 0x8133, + 0x436: 0x812e, 0x437: 0x8133, 0x438: 0x8133, 0x439: 0x812e, 0x43a: 0x812e, 0x43b: 0x8133, + 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, + 0x474: 0x8103, 0x475: 0x9900, + 0x47a: 0xa000, 0x47b: 0x2e8d, + 0x47c: 0xa000, 0x47d: 0x2e95, 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, + 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: 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, + 0x50c: 0x8133, 0x50d: 0x8136, 0x50e: 0x812b, 0x50f: 0x812e, 0x510: 0x812a, 0x511: 0x8133, + 0x512: 0x8133, 0x513: 0x8133, 0x514: 0x8133, 0x515: 0x8133, 0x516: 0x8133, 0x517: 0x8133, + 0x518: 0x8133, 0x519: 0x8133, 0x51a: 0x8133, 0x51b: 0x8133, 0x51c: 0x8133, 0x51d: 0x8133, + 0x51e: 0x8133, 0x51f: 0x8133, 0x520: 0x8133, 0x521: 0x8133, 0x522: 0x8133, 0x523: 0x8133, + 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, 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // 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, + // Block 0x1d, offset 0x740 + 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: 0x1acf, 0x761: 0x1cf8, 0x762: 0x1ad8, + 0x764: 0x0075, 0x766: 0x023c, 0x768: 0x0075, + 0x76a: 0x0057, 0x76b: 0x4413, 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: 0x055a, 0x785: 0x0049, + 0x786: 0x0089, 0x787: 0x008b, 0x788: 0x0093, 0x789: 0x0095, + 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: 0x3d47, 0x7c3: 0xa000, 0x7c4: 0x3d4e, 0x7c5: 0xa000, + 0x7c7: 0x3d55, 0x7c8: 0xa000, 0x7c9: 0x3d5c, + 0x7cd: 0xa000, + 0x7e0: 0x30a6, 0x7e1: 0xa000, 0x7e2: 0x3d6a, + 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, + 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, + 0x811: 0xa000, + 0x812: 0xa000, + 0x822: 0xa000, + 0x828: 0xa000, 0x829: 0xa000, + 0x82b: 0xa000, 0x82c: 0x3de1, 0x82d: 0x3de8, 0x82e: 0x3def, 0x82f: 0x3df6, + 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: 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: 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: 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: 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: 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: 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, + 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, + // Block 0x27, offset 0x9c0 + 0x9d4: 0x4041, + 0x9d9: 0x9904, 0x9da: 0x9904, 0x9db: 0x441d, 0x9dc: 0x4423, 0x9dd: 0xa000, + 0x9de: 0x4111, 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, + // 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, + 0xa2f: 0xa000, + 0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x4119, + 0xa37: 0x41e9, 0xa38: 0x41f1, 0xa39: 0x41f9, 0xa3a: 0x4201, + 0xa3d: 0xa000, 0xa3e: 0x4209, 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, + 0xa4c: 0x0446, 0xa4d: 0x044a, 0xa4e: 0x044e, 0xa4f: 0x4afe, 0xa50: 0x4b04, 0xa51: 0x4b0a, + 0xa52: 0x4b10, 0xa53: 0x4b16, 0xa54: 0x4b1c, 0xa55: 0x4b22, 0xa56: 0x4b28, 0xa57: 0x4b2e, + 0xa58: 0x4b34, 0xa59: 0x4b3a, 0xa5a: 0x4b40, 0xa5b: 0x4b46, 0xa5c: 0x4b4c, 0xa5d: 0x4b52, + 0xa5e: 0x4b58, 0xa5f: 0x4b5e, 0xa60: 0x4b64, 0xa61: 0x4b6a, 0xa62: 0x4b70, 0xa63: 0x4b76, + 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: 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: 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: 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: 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, + // 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, + 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: 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: 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, + 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, + 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, + 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, + 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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, + 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, + // 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, + 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: 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: 0x45af, 0xf65: 0x45af, 0xf66: 0x03e0, 0xf67: 0x03e0, 0xf68: 0x03e0, 0xf69: 0x03e0, + 0xf6a: 0x03dd, 0xf6b: 0x03dd, 0xf6c: 0x03dd, 0xf6d: 0x03dd, 0xf6e: 0x03fb, 0xf6f: 0x03fb, + 0xf70: 0x45a9, 0xf71: 0x45a9, + // 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, + 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: 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: 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: 0x4561, 0x101c: 0x4567, 0x101d: 0x459d, + 0x101e: 0x45f4, 0x101f: 0x45fb, 0x1020: 0x4602, 0x1021: 0x4609, 0x1022: 0x4610, 0x1023: 0x4617, + 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: 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, + 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: 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: 0x4591, 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, + 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: 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: 0x4549, 0x10fd: 0x4549, + // Block 0x44, offset 0x1100 + 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: 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: 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: 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: 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: 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, + 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, + // 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, + 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: 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: 0x2f41, + 0x12b6: 0x2f41, 0x12b7: 0x2f49, 0x12b8: 0x2f49, 0x12b9: 0x2f51, 0x12ba: 0x2f51, 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: 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: 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: 0x4bb9, 0x131f: 0x4bbf, 0x1320: 0x04b6, 0x1321: 0x0406, 0x1322: 0x040a, 0x1323: 0x4b7c, + 0x1324: 0x040e, 0x1325: 0x4b82, 0x1326: 0x4b88, 0x1327: 0x0412, 0x1328: 0x0416, 0x1329: 0x041a, + 0x132a: 0x4b8e, 0x132b: 0x4b94, 0x132c: 0x4b9a, 0x132d: 0x4ba0, 0x132e: 0x4ba6, 0x132f: 0x4bac, + 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: 0x4afe, 0x1343: 0x4b04, 0x1344: 0x4b0a, 0x1345: 0x4b10, + 0x1346: 0x4b16, 0x1347: 0x4b1c, 0x134a: 0x4b22, 0x134b: 0x4b28, + 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, + 0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x053e, 0x1368: 0x0562, 0x1369: 0x0542, + 0x136a: 0x0546, 0x136b: 0x054a, 0x136c: 0x054e, 0x136d: 0x0566, 0x136e: 0x056a, + // Block 0x4e, offset 0x1380 + 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: 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: 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 + 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: 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: 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 + 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: 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: 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: 0x27dd, 0x15c1: 0x27f2, 0x15c2: 0x05fe, + 0x15d0: 0x0d0a, 0x15d1: 0x0b42, + 0x15d2: 0x09ce, 0x15d3: 0x4705, 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: 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: 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: 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: 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: 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: 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 +// 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: 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, + // Block 0x4, offset 0x100 + 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: 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: 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: 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: 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: 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: 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: 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: 0xca, 0x33d: 0x49, 0x33e: 0x4a, 0x33f: 0x4b, + // Block 0xd, offset 0x340 + 0x347: 0xcb, + 0x34b: 0xcc, 0x34d: 0xcd, + 0x35e: 0x4c, + 0x368: 0xce, 0x36b: 0xcf, + 0x374: 0xd0, + 0x37a: 0xd1, 0x37b: 0xd2, 0x37d: 0xd3, 0x37e: 0xd4, + // Block 0xe, offset 0x380 + 0x381: 0xd5, 0x382: 0xd6, 0x384: 0xd7, 0x385: 0xbc, 0x387: 0xd8, + 0x388: 0xd9, 0x38b: 0xda, 0x38c: 0xdb, 0x38d: 0xdc, + 0x391: 0xdd, 0x392: 0xde, 0x393: 0xdf, 0x396: 0xe0, 0x397: 0xe1, + 0x398: 0xe2, 0x39a: 0xe3, 0x39c: 0xe4, + 0x3a0: 0xe5, 0x3a4: 0xe6, 0x3a5: 0xe7, 0x3a7: 0xe8, + 0x3a8: 0xe9, 0x3a9: 0xea, 0x3aa: 0xeb, + 0x3b0: 0xe2, 0x3b5: 0xec, 0x3b6: 0xed, + 0x3bd: 0xee, + // Block 0xf, offset 0x3c0 + 0x3eb: 0xef, 0x3ec: 0xf0, + 0x3ff: 0xf1, + // Block 0x10, offset 0x400 + 0x432: 0xf2, + // Block 0x11, offset 0x440 + 0x445: 0xf3, 0x446: 0xf4, 0x447: 0xf5, + 0x449: 0xf6, + 0x450: 0xf7, 0x451: 0xf8, 0x452: 0xf9, 0x453: 0xfa, 0x454: 0xfb, 0x455: 0xfc, 0x456: 0xfd, 0x457: 0xfe, + 0x458: 0xff, 0x459: 0x100, 0x45a: 0x4d, 0x45b: 0x101, 0x45c: 0x102, 0x45d: 0x103, 0x45e: 0x104, 0x45f: 0x4e, + // Block 0x12, offset 0x480 + 0x480: 0x4f, 0x481: 0x50, 0x482: 0x105, 0x484: 0xf0, + 0x48a: 0x106, 0x48b: 0x107, + 0x493: 0x108, + 0x4a3: 0x109, 0x4a5: 0x10a, + 0x4b8: 0x51, 0x4b9: 0x52, 0x4ba: 0x53, + // Block 0x13, offset 0x4c0 + 0x4c4: 0x54, 0x4c5: 0x10b, 0x4c6: 0x10c, + 0x4c8: 0x55, 0x4c9: 0x10d, + 0x4ef: 0x10e, + // Block 0x14, offset 0x500 + 0x520: 0x56, 0x521: 0x57, 0x522: 0x58, 0x523: 0x59, 0x524: 0x5a, 0x525: 0x5b, 0x526: 0x5c, 0x527: 0x5d, + 0x528: 0x5e, + // Block 0x15, offset 0x540 + 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, +} + +// nfkcSparseOffset: 176 entries, 352 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, 0x140, 0x149, 0x14b, 0x14e, 0x150, 0x15b, 0x166, 0x174, 0x182, 0x192, 0x1a0, 0x1a7, 0x1ad, 0x1bc, 0x1c0, 0x1c2, 0x1c6, 0x1c8, 0x1cb, 0x1cd, 0x1d0, 0x1d2, 0x1d5, 0x1d7, 0x1d9, 0x1db, 0x1e7, 0x1f1, 0x1fb, 0x1fe, 0x202, 0x204, 0x206, 0x20b, 0x20e, 0x211, 0x213, 0x215, 0x217, 0x219, 0x21f, 0x222, 0x227, 0x229, 0x230, 0x236, 0x23c, 0x244, 0x24a, 0x250, 0x256, 0x25a, 0x25c, 0x25e, 0x260, 0x262, 0x268, 0x26b, 0x26d, 0x26f, 0x271, 0x277, 0x27b, 0x27f, 0x287, 0x28e, 0x291, 0x294, 0x296, 0x299, 0x2a1, 0x2a5, 0x2ac, 0x2af, 0x2b5, 0x2b7, 0x2b9, 0x2bc, 0x2be, 0x2c1, 0x2c6, 0x2c8, 0x2ca, 0x2cc, 0x2ce, 0x2d0, 0x2d3, 0x2d5, 0x2d7, 0x2d9, 0x2db, 0x2dd, 0x2df, 0x2ec, 0x2f6, 0x2f8, 0x2fa, 0x2fe, 0x303, 0x30f, 0x314, 0x31d, 0x323, 0x328, 0x32c, 0x331, 0x335, 0x345, 0x353, 0x361, 0x36f, 0x371, 0x373, 0x375, 0x379, 0x37b, 0x37e, 0x389, 0x38b, 0x395} + +// nfkcSparseValues: 919 entries, 3676 bytes +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: 0x0083, lo: 0xaa, hi: 0xaa}, + {value: 0x43a5, lo: 0xaf, hi: 0xaf}, + {value: 0x0025, lo: 0xb2, hi: 0xb3}, + {value: 0x439b, lo: 0xb4, hi: 0xb4}, + {value: 0x0260, lo: 0xb5, hi: 0xb5}, + {value: 0x43d2, lo: 0xb8, hi: 0xb8}, + {value: 0x0023, lo: 0xb9, hi: 0xb9}, + {value: 0x009f, lo: 0xba, hi: 0xba}, + {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: 0x4823, lo: 0xa0, hi: 0xa1}, + {value: 0x4855, lo: 0xaf, hi: 0xb0}, + {value: 0xa000, lo: 0xb7, hi: 0xb7}, + // Block 0x2, offset 0x12 + {value: 0x0004, lo: 0x09}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x0091, lo: 0xb0, hi: 0xb0}, + {value: 0x0140, lo: 0xb1, hi: 0xb1}, + {value: 0x0095, lo: 0xb2, hi: 0xb2}, + {value: 0x00a5, lo: 0xb3, hi: 0xb3}, + {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: 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: 0x0137, lo: 0xa0, hi: 0xa0}, + {value: 0x0099, lo: 0xa1, hi: 0xa1}, + {value: 0x00a7, lo: 0xa2, hi: 0xa3}, + {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: 0x38e6, lo: 0x90, hi: 0x90}, + {value: 0x38f2, lo: 0x91, hi: 0x91}, + {value: 0x38e0, 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: 0xa000, lo: 0xb4, hi: 0xb5}, + {value: 0x395e, lo: 0xb6, hi: 0xb6}, + {value: 0x3964, lo: 0xb7, hi: 0xb7}, + // Block 0x5, offset 0x36 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x83, hi: 0x87}, + // 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 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: 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: 0xa000, lo: 0xa7, hi: 0xa7}, + // Block 0x8, offset 0x48 + {value: 0x0000, lo: 0x0e}, + {value: 0x39ac, lo: 0x80, hi: 0x80}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0x39a0, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x39a6, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x95, hi: 0x95}, + {value: 0x8133, lo: 0x96, hi: 0x9c}, + {value: 0x8133, lo: 0x9f, hi: 0xa2}, + {value: 0x812e, lo: 0xa3, hi: 0xa3}, + {value: 0x8133, lo: 0xa4, hi: 0xa4}, + {value: 0x8133, lo: 0xa7, hi: 0xa8}, + {value: 0x812e, lo: 0xaa, hi: 0xaa}, + {value: 0x8133, lo: 0xab, hi: 0xac}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + // Block 0x9, offset 0x57 + {value: 0x0000, lo: 0x0c}, + {value: 0x8120, lo: 0x91, hi: 0x91}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + {value: 0x812e, lo: 0xb1, hi: 0xb1}, + {value: 0x8133, lo: 0xb2, hi: 0xb3}, + {value: 0x812e, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb5, hi: 0xb6}, + {value: 0x812e, lo: 0xb7, hi: 0xb9}, + {value: 0x8133, lo: 0xba, hi: 0xba}, + {value: 0x812e, lo: 0xbb, hi: 0xbc}, + {value: 0x8133, lo: 0xbd, hi: 0xbd}, + {value: 0x812e, lo: 0xbe, hi: 0xbe}, + {value: 0x8133, lo: 0xbf, hi: 0xbf}, + // Block 0xa, offset 0x64 + {value: 0x0005, lo: 0x07}, + {value: 0x8133, lo: 0x80, hi: 0x80}, + {value: 0x8133, lo: 0x81, hi: 0x81}, + {value: 0x812e, lo: 0x82, hi: 0x83}, + {value: 0x812e, lo: 0x84, hi: 0x85}, + {value: 0x812e, lo: 0x86, hi: 0x87}, + {value: 0x812e, lo: 0x88, hi: 0x89}, + {value: 0x8133, lo: 0x8a, hi: 0x8a}, + // 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 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 0x76 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x99, hi: 0x9b}, + // Block 0xe, offset 0x78 + {value: 0x0000, lo: 0x03}, + {value: 0x8133, lo: 0x98, 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: 0x4019, lo: 0xa9, hi: 0xa9}, + {value: 0xa000, lo: 0xb0, hi: 0xb0}, + {value: 0x4021, lo: 0xb1, hi: 0xb1}, + {value: 0xa000, lo: 0xb3, hi: 0xb3}, + {value: 0x4029, lo: 0xb4, hi: 0xb4}, + {value: 0x9903, lo: 0xbc, hi: 0xbc}, + // 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: 0x465d, 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 0x12, offset 0x8e + {value: 0x0008, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2dd5, 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: 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: 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}, + // Block 0x15, offset 0x9e + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + // Block 0x16, offset 0xa0 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + // 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: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x96, hi: 0x97}, + {value: 0x46e5, lo: 0x9c, hi: 0x9c}, + {value: 0x46ed, 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: 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: 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: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x8121, lo: 0x95, hi: 0x96}, + // Block 0x1b, offset 0xbb + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + {value: 0xa000, lo: 0xbf, hi: 0xbf}, + // Block 0x1c, offset 0xbe + {value: 0x0000, lo: 0x09}, + {value: 0x2e1d, 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: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x95, hi: 0x96}, + // Block 0x1d, offset 0xc8 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // 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: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1f, offset 0xd2 + {value: 0x6ab3, 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}, + // Block 0x20, offset 0xda + {value: 0x0000, lo: 0x03}, + {value: 0x2751, lo: 0xb3, hi: 0xb3}, + {value: 0x8123, lo: 0xb8, hi: 0xb9}, + {value: 0x8105, lo: 0xba, hi: 0xba}, + // Block 0x21, offset 0xde + {value: 0x0000, lo: 0x01}, + {value: 0x8124, lo: 0x88, hi: 0x8b}, + // Block 0x22, offset 0xe0 + {value: 0x0000, lo: 0x03}, + {value: 0x2766, lo: 0xb3, hi: 0xb3}, + {value: 0x8125, lo: 0xb8, hi: 0xb9}, + {value: 0x8105, lo: 0xba, hi: 0xba}, + // Block 0x23, offset 0xe4 + {value: 0x0000, lo: 0x03}, + {value: 0x8126, lo: 0x88, hi: 0x8b}, + {value: 0x2758, lo: 0x9c, hi: 0x9c}, + {value: 0x275f, lo: 0x9d, hi: 0x9d}, + // Block 0x24, offset 0xe8 + {value: 0x0000, lo: 0x05}, + {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 0x25, offset 0xee + {value: 0x0000, lo: 0x10}, + {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: 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: 0x8128, lo: 0xba, hi: 0xbd}, + // Block 0x26, offset 0xff + {value: 0x0000, lo: 0x0b}, + {value: 0x8128, lo: 0x80, hi: 0x80}, + {value: 0x4bd7, lo: 0x81, hi: 0x81}, + {value: 0x8133, lo: 0x82, hi: 0x83}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0x86, hi: 0x87}, + {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 0x28, offset 0x10d + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x2e55, 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 0x113 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x8d, hi: 0x8d}, + // Block 0x2a, offset 0x115 + {value: 0x0000, lo: 0x01}, + {value: 0x0402, lo: 0xbc, hi: 0xbc}, + // Block 0x2b, offset 0x117 + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x80, hi: 0x92}, + // Block 0x2c, offset 0x119 + {value: 0x0000, lo: 0x01}, + {value: 0xb900, lo: 0xa1, hi: 0xb5}, + // Block 0x2d, offset 0x11b + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xa8, hi: 0xbf}, + // Block 0x2e, offset 0x11d + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0x80, hi: 0x82}, + // Block 0x2f, offset 0x11f + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x9d, hi: 0x9f}, + // Block 0x30, offset 0x121 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x94, hi: 0x95}, + {value: 0x8105, lo: 0xb4, hi: 0xb4}, + // Block 0x31, offset 0x124 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x92, hi: 0x92}, + {value: 0x8133, lo: 0x9d, hi: 0x9d}, + // Block 0x32, offset 0x127 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xa9, hi: 0xa9}, + // Block 0x33, offset 0x129 + {value: 0x0004, lo: 0x02}, + {value: 0x812f, lo: 0xb9, hi: 0xba}, + {value: 0x812e, lo: 0xbb, hi: 0xbb}, + // Block 0x34, offset 0x12c + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x97, hi: 0x97}, + {value: 0x812e, lo: 0x98, hi: 0x98}, + // 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 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 0x37, offset 0x139 + {value: 0x0000, lo: 0x06}, + {value: 0x812e, lo: 0x80, hi: 0x80}, + {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: 0x8e}, + // Block 0x38, offset 0x140 + {value: 0x0000, lo: 0x08}, + {value: 0x2e9d, lo: 0x80, hi: 0x80}, + {value: 0x2ea5, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x2ead, 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 0x39, offset 0x149 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xaa, hi: 0xab}, + // Block 0x3a, offset 0x14b + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xa6, hi: 0xa6}, + {value: 0x8105, lo: 0xb2, hi: 0xb3}, + // Block 0x3b, offset 0x14e + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + // Block 0x3c, offset 0x150 + {value: 0x0000, lo: 0x0a}, + {value: 0x8133, lo: 0x90, hi: 0x92}, + {value: 0x8101, lo: 0x94, hi: 0x94}, + {value: 0x812e, lo: 0x95, hi: 0x99}, + {value: 0x8133, lo: 0x9a, hi: 0x9b}, + {value: 0x812e, lo: 0x9c, hi: 0x9f}, + {value: 0x8133, lo: 0xa0, hi: 0xa0}, + {value: 0x8101, lo: 0xa2, hi: 0xa8}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + {value: 0x8133, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb8, hi: 0xb9}, + // Block 0x3d, 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: 0x00ec, lo: 0xb2, hi: 0xb2}, + {value: 0x004f, lo: 0xb3, hi: 0xba}, + {value: 0x005f, lo: 0xbc, hi: 0xbc}, + {value: 0x00fe, lo: 0xbd, hi: 0xbd}, + {value: 0x0061, lo: 0xbe, hi: 0xbe}, + {value: 0x0065, lo: 0xbf, hi: 0xbf}, + // Block 0x3e, offset 0x166 + {value: 0x0000, lo: 0x0d}, + {value: 0x0001, lo: 0x80, hi: 0x8a}, + {value: 0x0532, lo: 0x91, hi: 0x91}, + {value: 0x43dc, lo: 0x97, hi: 0x97}, + {value: 0x001d, lo: 0xa4, hi: 0xa4}, + {value: 0x19a0, lo: 0xa5, hi: 0xa5}, + {value: 0x1c8c, lo: 0xa6, hi: 0xa6}, + {value: 0x0001, lo: 0xaf, hi: 0xaf}, + {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: 0x43aa, lo: 0xbe, hi: 0xbe}, + // Block 0x3f, offset 0x174 + {value: 0x0002, lo: 0x0d}, + {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: 0x055e, 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 0x182 + {value: 0x0002, lo: 0x0f}, + {value: 0x0021, lo: 0x80, hi: 0x89}, + {value: 0x0017, lo: 0x8a, hi: 0x8a}, + {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: 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: 0x1ac9, lo: 0xa8, hi: 0xa8}, + // Block 0x41, offset 0x192 + {value: 0x0000, lo: 0x0d}, + {value: 0x8133, lo: 0x90, hi: 0x91}, + {value: 0x8101, lo: 0x92, hi: 0x93}, + {value: 0x8133, lo: 0x94, hi: 0x97}, + {value: 0x8101, lo: 0x98, hi: 0x9a}, + {value: 0x8133, lo: 0x9b, hi: 0x9c}, + {value: 0x8133, lo: 0xa1, hi: 0xa1}, + {value: 0x8101, lo: 0xa5, hi: 0xa6}, + {value: 0x8133, lo: 0xa7, hi: 0xa7}, + {value: 0x812e, lo: 0xa8, hi: 0xa8}, + {value: 0x8133, lo: 0xa9, hi: 0xa9}, + {value: 0x8101, lo: 0xaa, hi: 0xab}, + {value: 0x812e, lo: 0xac, hi: 0xaf}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + // Block 0x42, offset 0x1a0 + {value: 0x0007, lo: 0x06}, + {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: 0x3cfa, lo: 0x9a, hi: 0x9b}, + {value: 0x3d08, 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: 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: 0xa000, lo: 0x88, hi: 0x88}, + {value: 0x3d2b, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x3d32, lo: 0x8c, hi: 0x8c}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0x3d39, lo: 0xa4, hi: 0xa4}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x3d40, 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}, + // Block 0x46, offset 0x1c0 + {value: 0x0004, lo: 0x01}, + {value: 0x0586, lo: 0xa9, hi: 0xaa}, + // Block 0x47, offset 0x1c2 + {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 0x1c6 + {value: 0x0000, lo: 0x01}, + {value: 0x2ad2, lo: 0x8c, hi: 0x8c}, + // Block 0x49, offset 0x1c8 + {value: 0x0266, lo: 0x02}, + {value: 0x1cbc, lo: 0xb4, hi: 0xb4}, + {value: 0x1a5a, lo: 0xb5, hi: 0xb6}, + // Block 0x4a, offset 0x1cb + {value: 0x0000, lo: 0x01}, + {value: 0x461e, lo: 0x9c, hi: 0x9c}, + // Block 0x4b, offset 0x1cd + {value: 0x0000, lo: 0x02}, + {value: 0x0095, lo: 0xbc, hi: 0xbc}, + {value: 0x006d, lo: 0xbd, hi: 0xbd}, + // Block 0x4c, offset 0x1d0 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xaf, hi: 0xb1}, + // Block 0x4d, offset 0x1d2 + {value: 0x0000, lo: 0x02}, + {value: 0x057a, lo: 0xaf, hi: 0xaf}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x4e, offset 0x1d5 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa0, hi: 0xbf}, + // Block 0x4f, offset 0x1d7 + {value: 0x0000, lo: 0x01}, + {value: 0x0ebe, lo: 0x9f, hi: 0x9f}, + // Block 0x50, offset 0x1d9 + {value: 0x0000, lo: 0x01}, + {value: 0x172a, lo: 0xb3, hi: 0xb3}, + // Block 0x51, offset 0x1db + {value: 0x0004, lo: 0x0b}, + {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 0x1e7 + {value: 0x0004, lo: 0x09}, + {value: 0x0001, lo: 0x80, hi: 0x80}, + {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: 0xae}, + {value: 0x8130, lo: 0xaf, hi: 0xaf}, + {value: 0x05ae, lo: 0xb6, hi: 0xb6}, + {value: 0x0982, lo: 0xb8, hi: 0xba}, + // Block 0x53, offset 0x1f1 + {value: 0x0006, lo: 0x09}, + {value: 0x0406, lo: 0xb1, hi: 0xb1}, + {value: 0x040a, lo: 0xb2, hi: 0xb2}, + {value: 0x4b7c, lo: 0xb3, hi: 0xb3}, + {value: 0x040e, lo: 0xb4, hi: 0xb4}, + {value: 0x4b82, lo: 0xb5, hi: 0xb6}, + {value: 0x0412, lo: 0xb7, hi: 0xb7}, + {value: 0x0416, lo: 0xb8, hi: 0xb8}, + {value: 0x041a, lo: 0xb9, hi: 0xb9}, + {value: 0x4b8e, lo: 0xba, hi: 0xbf}, + // Block 0x54, offset 0x1fb + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xaf, hi: 0xaf}, + {value: 0x8133, lo: 0xb4, hi: 0xbd}, + // Block 0x55, offset 0x1fe + {value: 0x0000, lo: 0x03}, + {value: 0x02d8, lo: 0x9c, hi: 0x9c}, + {value: 0x02de, lo: 0x9d, hi: 0x9d}, + {value: 0x8133, lo: 0x9e, hi: 0x9f}, + // Block 0x56, offset 0x202 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb0, hi: 0xb1}, + // Block 0x57, offset 0x204 + {value: 0x0000, lo: 0x01}, + {value: 0x173e, lo: 0xb0, hi: 0xb0}, + // Block 0x58, offset 0x206 + {value: 0x0006, lo: 0x04}, + {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 0x20b + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xac, hi: 0xac}, + // Block 0x5a, offset 0x20e + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0xa0, hi: 0xb1}, + // Block 0x5b, offset 0x211 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xab, hi: 0xad}, + // Block 0x5c, offset 0x213 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x93, hi: 0x93}, + // Block 0x5d, offset 0x215 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xb3, hi: 0xb3}, + // Block 0x5e, offset 0x217 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x80, hi: 0x80}, + // Block 0x5f, offset 0x219 + {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 0x60, offset 0x21f + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x81, hi: 0x81}, + {value: 0x8105, lo: 0xb6, hi: 0xb6}, + // Block 0x61, offset 0x222 + {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 0x227 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xad, hi: 0xad}, + // Block 0x63, offset 0x229 + {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 0x230 + {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 0x236 + {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 0x23c + {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 0x244 + {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 0x24a + {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 0x250 + {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 0x256 + {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 0x25a + {value: 0x0002, lo: 0x01}, + {value: 0x0003, lo: 0x81, hi: 0xbf}, + // Block 0x6c, offset 0x25c + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + // Block 0x6d, offset 0x25e + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xa0, hi: 0xa0}, + // Block 0x6e, offset 0x260 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb6, hi: 0xba}, + // Block 0x6f, offset 0x262 + {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 0x70, offset 0x268 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xa5, hi: 0xa5}, + {value: 0x812e, lo: 0xa6, hi: 0xa6}, + // Block 0x71, offset 0x26b + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa4, hi: 0xa7}, + // Block 0x72, offset 0x26d + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xab, hi: 0xac}, + // Block 0x73, offset 0x26f + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xbd, hi: 0xbf}, + // Block 0x74, offset 0x271 + {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 0x75, offset 0x277 + {value: 0x0005, lo: 0x03}, + {value: 0x8133, lo: 0x82, hi: 0x82}, + {value: 0x812e, lo: 0x83, hi: 0x84}, + {value: 0x812e, lo: 0x85, hi: 0x85}, + // Block 0x76, offset 0x27b + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xb0, hi: 0xb0}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x77, offset 0x27f + {value: 0x17fe, lo: 0x07}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x4379, lo: 0x9a, hi: 0x9a}, + {value: 0xa000, lo: 0x9b, hi: 0x9b}, + {value: 0x4383, lo: 0x9c, hi: 0x9c}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x438d, 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: 0xa000, lo: 0xb1, hi: 0xb2}, + {value: 0x8105, lo: 0xb3, hi: 0xb4}, + // Block 0x79, offset 0x28e + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x80, hi: 0x80}, + {value: 0x8103, lo: 0x8a, hi: 0x8a}, + // Block 0x7a, offset 0x291 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb5, hi: 0xb5}, + {value: 0x8103, lo: 0xb6, hi: 0xb6}, + // Block 0x7b, offset 0x294 + {value: 0x0002, lo: 0x01}, + {value: 0x8103, lo: 0xa9, hi: 0xaa}, + // Block 0x7c, offset 0x296 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // 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: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x8133, lo: 0xa6, hi: 0xac}, + {value: 0x8133, lo: 0xb0, hi: 0xb4}, + // Block 0x7e, offset 0x2a1 + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0x82, hi: 0x82}, + {value: 0x8103, lo: 0x86, hi: 0x86}, + {value: 0x8133, lo: 0x9e, hi: 0x9e}, + // Block 0x7f, offset 0x2a5 + {value: 0x6a23, 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}, + // Block 0x80, offset 0x2ac + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x82, hi: 0x82}, + {value: 0x8103, lo: 0x83, hi: 0x83}, + // Block 0x81, offset 0x2af + {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: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x82, offset 0x2b5 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0x80, hi: 0x80}, + // Block 0x83, offset 0x2b7 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x84, offset 0x2b9 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb6, hi: 0xb6}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + // Block 0x85, offset 0x2bc + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xab, hi: 0xab}, + // Block 0x86, offset 0x2be + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb9, hi: 0xb9}, + {value: 0x8103, lo: 0xba, hi: 0xba}, + // Block 0x87, offset 0x2c1 + {value: 0x0000, lo: 0x04}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb5, hi: 0xb5}, + {value: 0x2f0f, lo: 0xb8, hi: 0xb8}, + {value: 0x8105, lo: 0xbd, hi: 0xbe}, + // Block 0x88, offset 0x2c6 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0x83, hi: 0x83}, + // Block 0x89, offset 0x2c8 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xa0, hi: 0xa0}, + // Block 0x8a, offset 0x2ca + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xb4, hi: 0xb4}, + // Block 0x8b, offset 0x2cc + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x87, hi: 0x87}, + // Block 0x8c, offset 0x2ce + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x99, hi: 0x99}, + // Block 0x8d, offset 0x2d0 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0x82, hi: 0x82}, + {value: 0x8105, lo: 0x84, hi: 0x85}, + // Block 0x8e, offset 0x2d3 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x97, hi: 0x97}, + // Block 0x8f, offset 0x2d5 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x81, hi: 0x82}, + // Block 0x90, offset 0x2d7 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0xb0, hi: 0xb4}, + // Block 0x91, offset 0x2d9 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb0, hi: 0xb6}, + // Block 0x92, offset 0x2db + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb0, hi: 0xb1}, + // Block 0x93, offset 0x2dd + {value: 0x0000, lo: 0x01}, + {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: 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 0x95, offset 0x2ec + {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: 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}, + // Block 0x96, offset 0x2f6 + {value: 0x0000, lo: 0x01}, + {value: 0x47bb, lo: 0x80, hi: 0x80}, + // Block 0x97, offset 0x2f8 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x82, hi: 0x84}, + // Block 0x98, offset 0x2fa + {value: 0x0002, lo: 0x03}, + {value: 0x0043, lo: 0x80, hi: 0x99}, + {value: 0x0083, lo: 0x9a, hi: 0xb3}, + {value: 0x0043, lo: 0xb4, hi: 0xbf}, + // Block 0x99, offset 0x2fe + {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 0x9a, offset 0x303 + {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 0x9b, offset 0x30f + {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 0x9c, offset 0x314 + {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 0x9d, offset 0x31d + {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 0x9e, offset 0x323 + {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 0x9f, offset 0x328 + {value: 0x0002, lo: 0x03}, + {value: 0x008f, lo: 0x80, hi: 0x93}, + {value: 0x0043, lo: 0x94, hi: 0xad}, + {value: 0x0083, lo: 0xae, hi: 0xbf}, + // Block 0xa0, offset 0x32c + {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 0xa1, offset 0x331 + {value: 0x0002, lo: 0x03}, + {value: 0x004b, lo: 0x80, hi: 0x95}, + {value: 0x0083, lo: 0x96, hi: 0xaf}, + {value: 0x0043, lo: 0xb0, hi: 0xbf}, + // Block 0xa2, offset 0x335 + {value: 0x0003, lo: 0x0f}, + {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 0xa3, offset 0x345 + {value: 0x0003, lo: 0x0d}, + {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 0xa4, offset 0x353 + {value: 0x0003, lo: 0x0d}, + {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 0xa5, offset 0x361 + {value: 0x0003, lo: 0x0d}, + {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 0xa6, offset 0x36f + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x8f, hi: 0x8f}, + // Block 0xa7, offset 0x371 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xae, hi: 0xae}, + // Block 0xa8, offset 0x373 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xac, hi: 0xaf}, + // Block 0xa9, offset 0x375 + {value: 0x0000, lo: 0x03}, + {value: 0x8134, lo: 0xac, hi: 0xad}, + {value: 0x812e, lo: 0xae, hi: 0xae}, + {value: 0x8133, lo: 0xaf, hi: 0xaf}, + // Block 0xaa, offset 0x379 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x90, hi: 0x96}, + // Block 0xab, offset 0x37b + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x84, hi: 0x89}, + {value: 0x8103, lo: 0x8a, hi: 0x8a}, + // Block 0xac, offset 0x37e + {value: 0x0002, lo: 0x0a}, + {value: 0x0063, lo: 0x80, hi: 0x89}, + {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 0xad, offset 0x389 + {value: 0x0000, lo: 0x01}, + {value: 0x1a6c, lo: 0x90, hi: 0x90}, + // Block 0xae, offset 0x38b + {value: 0x0028, lo: 0x09}, + {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 0xaf, offset 0x395 + {value: 0x0002, lo: 0x01}, + {value: 0x0021, lo: 0xb0, hi: 0xb9}, +} + +// recompMap: 7528 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\x7f" + // 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\x7f\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 + "\x195\x190\x00\x01\x198" + // 0x19351930: 0x00011938 + "" + // Total size of tables: 56KB (57068 bytes) diff --git a/vendor/golang.org/x/tools/go/ast/inspector/inspector.go b/vendor/golang.org/x/tools/go/ast/inspector/inspector.go index 3fbfebf369..1fc1de0bd1 100644 --- a/vendor/golang.org/x/tools/go/ast/inspector/inspector.go +++ b/vendor/golang.org/x/tools/go/ast/inspector/inspector.go @@ -64,8 +64,9 @@ type event struct { // depth-first order. It calls f(n) for each node n before it visits // n's children. // +// The complete traversal sequence is determined by ast.Inspect. // The types argument, if non-empty, enables type-based filtering of -// events. The function f if is called only for nodes whose type +// events. The function f is called only for nodes whose type // matches an element of the types slice. func (in *Inspector) Preorder(types []ast.Node, f func(ast.Node)) { // Because it avoids postorder calls to f, and the pruning @@ -97,6 +98,7 @@ func (in *Inspector) Preorder(types []ast.Node, f func(ast.Node)) { // of the non-nil children of the node, followed by a call of // f(n, false). // +// The complete traversal sequence is determined by ast.Inspect. // The types argument, if non-empty, enables type-based filtering of // events. The function f if is called only for nodes whose type // matches an element of the types slice. diff --git a/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go b/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go index 18a002f82a..0454cdd78e 100644 --- a/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go +++ b/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go @@ -8,7 +8,6 @@ package packagesdriver import ( "context" "fmt" - "go/types" "strings" "golang.org/x/tools/internal/gocommand" @@ -16,7 +15,7 @@ import ( var debug = false -func GetSizesGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (types.Sizes, error) { +func GetSizesForArgsGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (string, string, error) { inv.Verb = "list" inv.Args = []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"} stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv) @@ -29,21 +28,21 @@ func GetSizesGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner * inv.Args = []string{"GOARCH"} envout, enverr := gocmdRunner.Run(ctx, inv) if enverr != nil { - return nil, enverr + return "", "", enverr } goarch = strings.TrimSpace(envout.String()) compiler = "gc" } else { - return nil, friendlyErr + return "", "", friendlyErr } } else { fields := strings.Fields(stdout.String()) if len(fields) < 2 { - return nil, fmt.Errorf("could not parse GOARCH and Go compiler in format \" \":\nstdout: <<%s>>\nstderr: <<%s>>", + return "", "", fmt.Errorf("could not parse GOARCH and Go compiler in format \" \":\nstdout: <<%s>>\nstderr: <<%s>>", stdout.String(), stderr.String()) } goarch = fields[0] compiler = fields[1] } - return types.SizesFor(compiler, goarch), nil + return compiler, goarch, nil } diff --git a/vendor/golang.org/x/tools/go/packages/golist.go b/vendor/golang.org/x/tools/go/packages/golist.go index e84f19dfa9..b5de9cf9f2 100644 --- a/vendor/golang.org/x/tools/go/packages/golist.go +++ b/vendor/golang.org/x/tools/go/packages/golist.go @@ -9,7 +9,6 @@ import ( "context" "encoding/json" "fmt" - "go/types" "io/ioutil" "log" "os" @@ -153,10 +152,10 @@ func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) { if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 { sizeswg.Add(1) go func() { - var sizes types.Sizes - sizes, sizeserr = packagesdriver.GetSizesGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner) - // types.SizesFor always returns nil or a *types.StdSizes. - response.dr.Sizes, _ = sizes.(*types.StdSizes) + compiler, arch, err := packagesdriver.GetSizesForArgsGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner) + sizeserr = err + response.dr.Compiler = compiler + response.dr.Arch = arch sizeswg.Done() }() } @@ -671,6 +670,9 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse // Temporary work-around for golang/go#39986. Parse filenames out of // error messages. This happens if there are unrecoverable syntax // errors in the source, so we can't match on a specific error message. + // + // TODO(rfindley): remove this heuristic, in favor of considering + // InvalidGoFiles from the list driver. if err := p.Error; err != nil && state.shouldAddFilenameFromError(p) { addFilenameFromPos := func(pos string) bool { split := strings.Split(pos, ":") diff --git a/vendor/golang.org/x/tools/go/packages/packages.go b/vendor/golang.org/x/tools/go/packages/packages.go index 632be722a2..124a6fe143 100644 --- a/vendor/golang.org/x/tools/go/packages/packages.go +++ b/vendor/golang.org/x/tools/go/packages/packages.go @@ -220,8 +220,10 @@ type driverResponse struct { // lists of multiple drivers, go/packages will fall back to the next driver. NotHandled bool - // Sizes, if not nil, is the types.Sizes to use when type checking. - Sizes *types.StdSizes + // Compiler and Arch are the arguments pass of types.SizesFor + // to get a types.Sizes to use when type checking. + Compiler string + Arch string // Roots is the set of package IDs that make up the root packages. // We have to encode this separately because when we encode a single package @@ -262,7 +264,7 @@ func Load(cfg *Config, patterns ...string) ([]*Package, error) { if err != nil { return nil, err } - l.sizes = response.Sizes + l.sizes = types.SizesFor(response.Compiler, response.Arch) return l.refine(response) } @@ -630,7 +632,7 @@ func newLoader(cfg *Config) *loader { return ld } -// refine connects the supplied packages into a graph and then adds type and +// refine connects the supplied packages into a graph and then adds type // and syntax information as requested by the LoadMode. func (ld *loader) refine(response *driverResponse) ([]*Package, error) { roots := response.Roots @@ -1043,6 +1045,9 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) { Error: appendError, Sizes: ld.sizes, } + if lpkg.Module != nil && lpkg.Module.GoVersion != "" { + typesinternal.SetGoVersion(tc, "go"+lpkg.Module.GoVersion) + } if (ld.Mode & typecheckCgo) != 0 { if !typesinternal.SetUsesCgo(tc) { appendError(Error{ diff --git a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go new file mode 100644 index 0000000000..fa5834baf7 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go @@ -0,0 +1,827 @@ +// 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. + +// Package objectpath defines a naming scheme for types.Objects +// (that is, named entities in Go programs) relative to their enclosing +// package. +// +// Type-checker objects are canonical, so they are usually identified by +// their address in memory (a pointer), but a pointer has meaning only +// within one address space. By contrast, objectpath names allow the +// identity of an object to be sent from one program to another, +// establishing a correspondence between types.Object variables that are +// distinct but logically equivalent. +// +// A single object may have multiple paths. In this example, +// +// type A struct{ X int } +// type B A +// +// the field X has two paths due to its membership of both A and B. +// The For(obj) function always returns one of these paths, arbitrarily +// but consistently. +package objectpath + +import ( + "fmt" + "go/types" + "sort" + "strconv" + "strings" + _ "unsafe" + + "golang.org/x/tools/internal/typeparams" + "golang.org/x/tools/internal/typesinternal" +) + +// A Path is an opaque name that identifies a types.Object +// relative to its package. Conceptually, the name consists of a +// sequence of destructuring operations applied to the package scope +// to obtain the original object. +// The name does not include the package itself. +type Path string + +// Encoding +// +// An object path is a textual and (with training) human-readable encoding +// of a sequence of destructuring operators, starting from a types.Package. +// The sequences represent a path through the package/object/type graph. +// We classify these operators by their type: +// +// PO package->object Package.Scope.Lookup +// OT object->type Object.Type +// TT type->type Type.{Elem,Key,Params,Results,Underlying} [EKPRU] +// TO type->object Type.{At,Field,Method,Obj} [AFMO] +// +// All valid paths start with a package and end at an object +// and thus may be defined by the regular language: +// +// objectpath = PO (OT TT* TO)* +// +// The concrete encoding follows directly: +// - The only PO operator is Package.Scope.Lookup, which requires an identifier. +// - The only OT operator is Object.Type, +// which we encode as '.' because dot cannot appear in an identifier. +// - The TT operators are encoded as [EKPRUTC]; +// one of these (TypeParam) requires an integer operand, +// which is encoded as a string of decimal digits. +// - The TO operators are encoded as [AFMO]; +// three of these (At,Field,Method) require an integer operand, +// which is encoded as a string of decimal digits. +// These indices are stable across different representations +// of the same package, even source and export data. +// The indices used are implementation specific and may not correspond to +// the argument to the go/types function. +// +// In the example below, +// +// package p +// +// type T interface { +// f() (a string, b struct{ X int }) +// } +// +// field X has the path "T.UM0.RA1.F0", +// representing the following sequence of operations: +// +// p.Lookup("T") T +// .Type().Underlying().Method(0). f +// .Type().Results().At(1) b +// .Type().Field(0) X +// +// The encoding is not maximally compact---every R or P is +// followed by an A, for example---but this simplifies the +// encoder and decoder. +const ( + // object->type operators + opType = '.' // .Type() (Object) + + // type->type operators + opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map) + opKey = 'K' // .Key() (Map) + opParams = 'P' // .Params() (Signature) + opResults = 'R' // .Results() (Signature) + opUnderlying = 'U' // .Underlying() (Named) + opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature) + opConstraint = 'C' // .Constraint() (TypeParam) + + // type->object operators + opAt = 'A' // .At(i) (Tuple) + opField = 'F' // .Field(i) (Struct) + opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored) + opObj = 'O' // .Obj() (Named, TypeParam) +) + +// For is equivalent to new(Encoder).For(obj). +// +// It may be more efficient to reuse a single Encoder across several calls. +func For(obj types.Object) (Path, error) { + return new(Encoder).For(obj) +} + +// An Encoder amortizes the cost of encoding the paths of multiple objects. +// The zero value of an Encoder is ready to use. +type Encoder struct { + scopeMemo map[*types.Scope][]types.Object // memoization of scopeObjects + namedMethodsMemo map[*types.Named][]*types.Func // memoization of namedMethods() + skipMethodSorting bool +} + +// Expose back doors so that gopls can avoid method sorting, which can dominate +// analysis on certain repositories. +// +// TODO(golang/go#61443): remove this. +func init() { + typesinternal.SkipEncoderMethodSorting = func(enc interface{}) { + enc.(*Encoder).skipMethodSorting = true + } + typesinternal.ObjectpathObject = object +} + +// For returns the path to an object relative to its package, +// or an error if the object is not accessible from the package's Scope. +// +// The For function guarantees to return a path only for the following objects: +// - package-level types +// - exported package-level non-types +// - methods +// - parameter and result variables +// - struct fields +// These objects are sufficient to define the API of their package. +// The objects described by a package's export data are drawn from this set. +// +// The set of objects accessible from a package's Scope depends on +// whether the package was produced by type-checking syntax, or +// reading export data; the latter may have a smaller Scope since +// export data trims objects that are not reachable from an exported +// declaration. For example, the For function will return a path for +// an exported method of an unexported type that is not reachable +// from any public declaration; this path will cause the Object +// function to fail if called on a package loaded from export data. +// TODO(adonovan): is this a bug or feature? Should this package +// compute accessibility in the same way? +// +// For does not return a path for predeclared names, imported package +// names, local names, and unexported package-level names (except +// types). +// +// Example: given this definition, +// +// package p +// +// type T interface { +// f() (a string, b struct{ X int }) +// } +// +// For(X) would return a path that denotes the following sequence of operations: +// +// p.Scope().Lookup("T") (TypeName T) +// .Type().Underlying().Method(0). (method Func f) +// .Type().Results().At(1) (field Var b) +// .Type().Field(0) (field Var X) +// +// where p is the package (*types.Package) to which X belongs. +func (enc *Encoder) For(obj types.Object) (Path, error) { + pkg := obj.Pkg() + + // This table lists the cases of interest. + // + // Object Action + // ------ ------ + // nil reject + // builtin reject + // pkgname reject + // label reject + // var + // package-level accept + // func param/result accept + // local reject + // struct field accept + // const + // package-level accept + // local reject + // func + // package-level accept + // init functions reject + // concrete method accept + // interface method accept + // type + // package-level accept + // local reject + // + // The only accessible package-level objects are members of pkg itself. + // + // The cases are handled in four steps: + // + // 1. reject nil and builtin + // 2. accept package-level objects + // 3. reject obviously invalid objects + // 4. search the API for the path to the param/result/field/method. + + // 1. reference to nil or builtin? + if pkg == nil { + return "", fmt.Errorf("predeclared %s has no path", obj) + } + scope := pkg.Scope() + + // 2. package-level object? + if scope.Lookup(obj.Name()) == obj { + // Only exported objects (and non-exported types) have a path. + // Non-exported types may be referenced by other objects. + if _, ok := obj.(*types.TypeName); !ok && !obj.Exported() { + return "", fmt.Errorf("no path for non-exported %v", obj) + } + return Path(obj.Name()), nil + } + + // 3. Not a package-level object. + // Reject obviously non-viable cases. + switch obj := obj.(type) { + case *types.TypeName: + if _, ok := obj.Type().(*typeparams.TypeParam); !ok { + // With the exception of type parameters, only package-level type names + // have a path. + return "", fmt.Errorf("no path for %v", obj) + } + case *types.Const, // Only package-level constants have a path. + *types.Label, // Labels are function-local. + *types.PkgName: // PkgNames are file-local. + return "", fmt.Errorf("no path for %v", obj) + + case *types.Var: + // Could be: + // - a field (obj.IsField()) + // - a func parameter or result + // - a local var. + // Sadly there is no way to distinguish + // a param/result from a local + // so we must proceed to the find. + + case *types.Func: + // A func, if not package-level, must be a method. + if recv := obj.Type().(*types.Signature).Recv(); recv == nil { + return "", fmt.Errorf("func is not a method: %v", obj) + } + + if path, ok := enc.concreteMethod(obj); ok { + // Fast path for concrete methods that avoids looping over scope. + return path, nil + } + + default: + panic(obj) + } + + // 4. Search the API for the path to the var (field/param/result) or method. + + // First inspect package-level named types. + // In the presence of path aliases, these give + // the best paths because non-types may + // refer to types, but not the reverse. + empty := make([]byte, 0, 48) // initial space + objs := enc.scopeObjects(scope) + for _, o := range objs { + tname, ok := o.(*types.TypeName) + if !ok { + continue // handle non-types in second pass + } + + path := append(empty, o.Name()...) + path = append(path, opType) + + T := o.Type() + + if tname.IsAlias() { + // type alias + if r := find(obj, T, path, nil); r != nil { + return Path(r), nil + } + } else { + if named, _ := T.(*types.Named); named != nil { + if r := findTypeParam(obj, typeparams.ForNamed(named), path, nil); r != nil { + // generic named type + return Path(r), nil + } + } + // defined (named) type + if r := find(obj, T.Underlying(), append(path, opUnderlying), nil); r != nil { + return Path(r), nil + } + } + } + + // Then inspect everything else: + // non-types, and declared methods of defined types. + for _, o := range objs { + path := append(empty, o.Name()...) + if _, ok := o.(*types.TypeName); !ok { + if o.Exported() { + // exported non-type (const, var, func) + if r := find(obj, o.Type(), append(path, opType), nil); r != nil { + return Path(r), nil + } + } + continue + } + + // Inspect declared methods of defined types. + if T, ok := o.Type().(*types.Named); ok { + path = append(path, opType) + if !enc.skipMethodSorting { + // Note that method index here is always with respect + // to canonical ordering of methods, regardless of how + // they appear in the underlying type. + for i, m := range enc.namedMethods(T) { + path2 := appendOpArg(path, opMethod, i) + if m == obj { + return Path(path2), nil // found declared method + } + if r := find(obj, m.Type(), append(path2, opType), nil); r != nil { + return Path(r), nil + } + } + } else { + // This branch must match the logic in the branch above, using go/types + // APIs without sorting. + for i := 0; i < T.NumMethods(); i++ { + m := T.Method(i) + path2 := appendOpArg(path, opMethod, i) + if m == obj { + return Path(path2), nil // found declared method + } + if r := find(obj, m.Type(), append(path2, opType), nil); r != nil { + return Path(r), nil + } + } + } + } + } + + return "", fmt.Errorf("can't find path for %v in %s", obj, pkg.Path()) +} + +func appendOpArg(path []byte, op byte, arg int) []byte { + path = append(path, op) + path = strconv.AppendInt(path, int64(arg), 10) + return path +} + +// concreteMethod returns the path for meth, which must have a non-nil receiver. +// The second return value indicates success and may be false if the method is +// an interface method or if it is an instantiated method. +// +// This function is just an optimization that avoids the general scope walking +// approach. You are expected to fall back to the general approach if this +// function fails. +func (enc *Encoder) concreteMethod(meth *types.Func) (Path, bool) { + // Concrete methods can only be declared on package-scoped named types. For + // that reason we can skip the expensive walk over the package scope: the + // path will always be package -> named type -> method. We can trivially get + // the type name from the receiver, and only have to look over the type's + // methods to find the method index. + // + // Methods on generic types require special consideration, however. Consider + // the following package: + // + // L1: type S[T any] struct{} + // L2: func (recv S[A]) Foo() { recv.Bar() } + // L3: func (recv S[B]) Bar() { } + // L4: type Alias = S[int] + // L5: func _[T any]() { var s S[int]; s.Foo() } + // + // The receivers of methods on generic types are instantiations. L2 and L3 + // instantiate S with the type-parameters A and B, which are scoped to the + // respective methods. L4 and L5 each instantiate S with int. Each of these + // instantiations has its own method set, full of methods (and thus objects) + // with receivers whose types are the respective instantiations. In other + // words, we have + // + // S[A].Foo, S[A].Bar + // S[B].Foo, S[B].Bar + // S[int].Foo, S[int].Bar + // + // We may thus be trying to produce object paths for any of these objects. + // + // S[A].Foo and S[B].Bar are the origin methods, and their paths are S.Foo + // and S.Bar, which are the paths that this function naturally produces. + // + // S[A].Bar, S[B].Foo, and both methods on S[int] are instantiations that + // don't correspond to the origin methods. For S[int], this is significant. + // The most precise object path for S[int].Foo, for example, is Alias.Foo, + // not S.Foo. Our function, however, would produce S.Foo, which would + // resolve to a different object. + // + // For S[A].Bar and S[B].Foo it could be argued that S.Bar and S.Foo are + // still the correct paths, since only the origin methods have meaningful + // paths. But this is likely only true for trivial cases and has edge cases. + // Since this function is only an optimization, we err on the side of giving + // up, deferring to the slower but definitely correct algorithm. Most users + // of objectpath will only be giving us origin methods, anyway, as referring + // to instantiated methods is usually not useful. + + if typeparams.OriginMethod(meth) != meth { + return "", false + } + + recvT := meth.Type().(*types.Signature).Recv().Type() + if ptr, ok := recvT.(*types.Pointer); ok { + recvT = ptr.Elem() + } + + named, ok := recvT.(*types.Named) + if !ok { + return "", false + } + + if types.IsInterface(named) { + // Named interfaces don't have to be package-scoped + // + // TODO(dominikh): opt: if scope.Lookup(name) == named, then we can apply this optimization to interface + // methods, too, I think. + return "", false + } + + // Preallocate space for the name, opType, opMethod, and some digits. + name := named.Obj().Name() + path := make([]byte, 0, len(name)+8) + path = append(path, name...) + path = append(path, opType) + + if !enc.skipMethodSorting { + for i, m := range enc.namedMethods(named) { + if m == meth { + path = appendOpArg(path, opMethod, i) + return Path(path), true + } + } + } else { + // This branch must match the logic of the branch above, using go/types + // APIs without sorting. + for i := 0; i < named.NumMethods(); i++ { + m := named.Method(i) + if m == meth { + path = appendOpArg(path, opMethod, i) + return Path(path), true + } + } + } + + // Due to golang/go#59944, go/types fails to associate the receiver with + // certain methods on cgo types. + // + // TODO(rfindley): replace this panic once golang/go#59944 is fixed in all Go + // versions gopls supports. + return "", false + // panic(fmt.Sprintf("couldn't find method %s on type %s; methods: %#v", meth, named, enc.namedMethods(named))) +} + +// find finds obj within type T, returning the path to it, or nil if not found. +// +// The seen map is used to short circuit cycles through type parameters. If +// nil, it will be allocated as necessary. +func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName]bool) []byte { + switch T := T.(type) { + case *types.Basic, *types.Named: + // Named types belonging to pkg were handled already, + // so T must belong to another package. No path. + return nil + case *types.Pointer: + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Slice: + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Array: + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Chan: + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Map: + if r := find(obj, T.Key(), append(path, opKey), seen); r != nil { + return r + } + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Signature: + if r := findTypeParam(obj, typeparams.ForSignature(T), path, seen); r != nil { + return r + } + if r := find(obj, T.Params(), append(path, opParams), seen); r != nil { + return r + } + return find(obj, T.Results(), append(path, opResults), seen) + case *types.Struct: + for i := 0; i < T.NumFields(); i++ { + fld := T.Field(i) + path2 := appendOpArg(path, opField, i) + if fld == obj { + return path2 // found field var + } + if r := find(obj, fld.Type(), append(path2, opType), seen); r != nil { + return r + } + } + return nil + case *types.Tuple: + for i := 0; i < T.Len(); i++ { + v := T.At(i) + path2 := appendOpArg(path, opAt, i) + if v == obj { + return path2 // found param/result var + } + if r := find(obj, v.Type(), append(path2, opType), seen); r != nil { + return r + } + } + return nil + case *types.Interface: + for i := 0; i < T.NumMethods(); i++ { + m := T.Method(i) + path2 := appendOpArg(path, opMethod, i) + if m == obj { + return path2 // found interface method + } + if r := find(obj, m.Type(), append(path2, opType), seen); r != nil { + return r + } + } + return nil + case *typeparams.TypeParam: + name := T.Obj() + if name == obj { + return append(path, opObj) + } + if seen[name] { + return nil + } + if seen == nil { + seen = make(map[*types.TypeName]bool) + } + seen[name] = true + if r := find(obj, T.Constraint(), append(path, opConstraint), seen); r != nil { + return r + } + return nil + } + panic(T) +} + +func findTypeParam(obj types.Object, list *typeparams.TypeParamList, path []byte, seen map[*types.TypeName]bool) []byte { + for i := 0; i < list.Len(); i++ { + tparam := list.At(i) + path2 := appendOpArg(path, opTypeParam, i) + if r := find(obj, tparam, path2, seen); r != nil { + return r + } + } + return nil +} + +// Object returns the object denoted by path p within the package pkg. +func Object(pkg *types.Package, p Path) (types.Object, error) { + return object(pkg, string(p), false) +} + +// Note: the skipMethodSorting parameter must match the value of +// Encoder.skipMethodSorting used during encoding. +func object(pkg *types.Package, pathstr string, skipMethodSorting bool) (types.Object, error) { + if pathstr == "" { + return nil, fmt.Errorf("empty path") + } + + var pkgobj, suffix string + if dot := strings.IndexByte(pathstr, opType); dot < 0 { + pkgobj = pathstr + } else { + pkgobj = pathstr[:dot] + suffix = pathstr[dot:] // suffix starts with "." + } + + obj := pkg.Scope().Lookup(pkgobj) + if obj == nil { + return nil, fmt.Errorf("package %s does not contain %q", pkg.Path(), pkgobj) + } + + // abstraction of *types.{Pointer,Slice,Array,Chan,Map} + type hasElem interface { + Elem() types.Type + } + // abstraction of *types.{Named,Signature} + type hasTypeParams interface { + TypeParams() *typeparams.TypeParamList + } + // abstraction of *types.{Named,TypeParam} + type hasObj interface { + Obj() *types.TypeName + } + + // The loop state is the pair (t, obj), + // exactly one of which is non-nil, initially obj. + // All suffixes start with '.' (the only object->type operation), + // followed by optional type->type operations, + // then a type->object operation. + // The cycle then repeats. + var t types.Type + for suffix != "" { + code := suffix[0] + suffix = suffix[1:] + + // Codes [AFM] have an integer operand. + var index int + switch code { + case opAt, opField, opMethod, opTypeParam: + rest := strings.TrimLeft(suffix, "0123456789") + numerals := suffix[:len(suffix)-len(rest)] + suffix = rest + i, err := strconv.Atoi(numerals) + if err != nil { + return nil, fmt.Errorf("invalid path: bad numeric operand %q for code %q", numerals, code) + } + index = int(i) + case opObj: + // no operand + default: + // The suffix must end with a type->object operation. + if suffix == "" { + return nil, fmt.Errorf("invalid path: ends with %q, want [AFMO]", code) + } + } + + if code == opType { + if t != nil { + return nil, fmt.Errorf("invalid path: unexpected %q in type context", opType) + } + t = obj.Type() + obj = nil + continue + } + + if t == nil { + return nil, fmt.Errorf("invalid path: code %q in object context", code) + } + + // Inv: t != nil, obj == nil + + switch code { + case opElem: + hasElem, ok := t.(hasElem) // Pointer, Slice, Array, Chan, Map + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want pointer, slice, array, chan or map)", code, t, t) + } + t = hasElem.Elem() + + case opKey: + mapType, ok := t.(*types.Map) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want map)", code, t, t) + } + t = mapType.Key() + + case opParams: + sig, ok := t.(*types.Signature) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) + } + t = sig.Params() + + case opResults: + sig, ok := t.(*types.Signature) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) + } + t = sig.Results() + + case opUnderlying: + named, ok := t.(*types.Named) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named)", code, t, t) + } + t = named.Underlying() + + case opTypeParam: + hasTypeParams, ok := t.(hasTypeParams) // Named, Signature + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or signature)", code, t, t) + } + tparams := hasTypeParams.TypeParams() + if n := tparams.Len(); index >= n { + return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) + } + t = tparams.At(index) + + case opConstraint: + tparam, ok := t.(*typeparams.TypeParam) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want type parameter)", code, t, t) + } + t = tparam.Constraint() + + case opAt: + tuple, ok := t.(*types.Tuple) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want tuple)", code, t, t) + } + if n := tuple.Len(); index >= n { + return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) + } + obj = tuple.At(index) + t = nil + + case opField: + structType, ok := t.(*types.Struct) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want struct)", code, t, t) + } + if n := structType.NumFields(); index >= n { + return nil, fmt.Errorf("field index %d out of range [0-%d)", index, n) + } + obj = structType.Field(index) + t = nil + + case opMethod: + switch t := t.(type) { + case *types.Interface: + if index >= t.NumMethods() { + return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) + } + obj = t.Method(index) // Id-ordered + + case *types.Named: + if index >= t.NumMethods() { + return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) + } + if skipMethodSorting { + obj = t.Method(index) + } else { + methods := namedMethods(t) // (unmemoized) + obj = methods[index] // Id-ordered + } + + default: + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want interface or named)", code, t, t) + } + t = nil + + case opObj: + hasObj, ok := t.(hasObj) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or type param)", code, t, t) + } + obj = hasObj.Obj() + t = nil + + default: + return nil, fmt.Errorf("invalid path: unknown code %q", code) + } + } + + if obj.Pkg() != pkg { + return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj) + } + + return obj, nil // success +} + +// namedMethods returns the methods of a Named type in ascending Id order. +func namedMethods(named *types.Named) []*types.Func { + methods := make([]*types.Func, named.NumMethods()) + for i := range methods { + methods[i] = named.Method(i) + } + sort.Slice(methods, func(i, j int) bool { + return methods[i].Id() < methods[j].Id() + }) + return methods +} + +// namedMethods is a memoization of the namedMethods function. Callers must not modify the result. +func (enc *Encoder) namedMethods(named *types.Named) []*types.Func { + m := enc.namedMethodsMemo + if m == nil { + m = make(map[*types.Named][]*types.Func) + enc.namedMethodsMemo = m + } + methods, ok := m[named] + if !ok { + methods = namedMethods(named) // allocates and sorts + m[named] = methods + } + return methods +} + +// scopeObjects is a memoization of scope objects. +// Callers must not modify the result. +func (enc *Encoder) scopeObjects(scope *types.Scope) []types.Object { + m := enc.scopeMemo + if m == nil { + m = make(map[*types.Scope][]types.Object) + enc.scopeMemo = m + } + objs, ok := m[scope] + if !ok { + names := scope.Names() // allocates and sorts + objs = make([]types.Object, len(names)) + for i, name := range names { + objs[i] = scope.Lookup(name) + } + m[scope] = objs + } + return objs +} diff --git a/vendor/golang.org/x/tools/internal/event/tag/tag.go b/vendor/golang.org/x/tools/internal/event/tag/tag.go index ff2f2ecd38..581b26c204 100644 --- a/vendor/golang.org/x/tools/internal/event/tag/tag.go +++ b/vendor/golang.org/x/tools/internal/event/tag/tag.go @@ -19,7 +19,7 @@ var ( File = keys.NewString("file", "") Directory = keys.New("directory", "") URI = keys.New("URI", "") - Package = keys.NewString("package", "") // Package ID + Package = keys.NewString("package", "") // sorted comma-separated list of Package IDs PackagePath = keys.NewString("package_path", "") Query = keys.New("query", "") Snapshot = keys.NewUInt64("snapshot", "") diff --git a/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go index 798fe599be..c40c7e9310 100644 --- a/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go +++ b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.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. -// Package fastwalk provides a faster version of filepath.Walk for file system +// Package fastwalk provides a faster version of [filepath.Walk] for file system // scanning tools. package fastwalk @@ -23,31 +23,31 @@ var ErrTraverseLink = errors.New("fastwalk: traverse symlink, assuming target is // Child directories will still be traversed. var ErrSkipFiles = errors.New("fastwalk: skip remaining files in directory") -// Walk is a faster implementation of filepath.Walk. +// Walk is a faster implementation of [filepath.Walk]. // -// filepath.Walk's design necessarily calls os.Lstat on each file, +// [filepath.Walk]'s design necessarily calls [os.Lstat] on each file, // even if the caller needs less info. // Many tools need only the type of each file. // On some platforms, this information is provided directly by the readdir // system call, avoiding the need to stat each file individually. // fastwalk_unix.go contains a fork of the syscall routines. // -// See golang.org/issue/16399 +// See golang.org/issue/16399. // // Walk walks the file tree rooted at root, calling walkFn for // each file or directory in the tree, including root. // -// If fastWalk returns filepath.SkipDir, the directory is skipped. +// If Walk returns [filepath.SkipDir], the directory is skipped. // -// Unlike filepath.Walk: +// Unlike [filepath.Walk]: // - file stat calls must be done by the user. // The only provided metadata is the file type, which does not include // any permission bits. // - multiple goroutines stat the filesystem concurrently. The provided // walkFn must be safe for concurrent use. -// - fastWalk can follow symlinks if walkFn returns the TraverseLink +// - Walk can follow symlinks if walkFn returns the TraverseLink // sentinel error. It is the walkFn's responsibility to prevent -// fastWalk from going into symlink cycles. +// Walk from going into symlink cycles. func Walk(root string, walkFn func(path string, typ os.FileMode) error) error { // TODO(bradfitz): make numWorkers configurable? We used a // minimum of 4 to give the kernel more info about multiple diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go index 3fc7989c08..6103dd7102 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go @@ -22,17 +22,23 @@ import ( "strconv" "strings" + "golang.org/x/tools/go/types/objectpath" "golang.org/x/tools/internal/tokeninternal" "golang.org/x/tools/internal/typeparams" ) // IExportShallow encodes "shallow" export data for the specified package. // -// No promises are made about the encoding other than that it can be -// decoded by the same version of IIExportShallow. If you plan to save -// export data in the file system, be sure to include a cryptographic -// digest of the executable in the key to avoid version skew. -func IExportShallow(fset *token.FileSet, pkg *types.Package) ([]byte, error) { +// No promises are made about the encoding other than that it can be decoded by +// the same version of IIExportShallow. If you plan to save export data in the +// file system, be sure to include a cryptographic digest of the executable in +// the key to avoid version skew. +// +// If the provided reportf func is non-nil, it will be used for reporting bugs +// encountered during export. +// TODO(rfindley): remove reportf when we are confident enough in the new +// objectpath encoding. +func IExportShallow(fset *token.FileSet, pkg *types.Package, reportf ReportFunc) ([]byte, error) { // In principle this operation can only fail if out.Write fails, // but that's impossible for bytes.Buffer---and as a matter of // fact iexportCommon doesn't even check for I/O errors. @@ -47,19 +53,27 @@ func IExportShallow(fset *token.FileSet, pkg *types.Package) ([]byte, error) { // IImportShallow decodes "shallow" types.Package data encoded by // IExportShallow in the same executable. This function cannot import data from // cmd/compile or gcexportdata.Write. -func IImportShallow(fset *token.FileSet, getPackage GetPackageFunc, data []byte, path string, insert InsertType) (*types.Package, error) { +// +// The importer calls getPackages to obtain package symbols for all +// packages mentioned in the export data, including the one being +// decoded. +// +// If the provided reportf func is non-nil, it will be used for reporting bugs +// encountered during import. +// TODO(rfindley): remove reportf when we are confident enough in the new +// objectpath encoding. +func IImportShallow(fset *token.FileSet, getPackages GetPackagesFunc, data []byte, path string, reportf ReportFunc) (*types.Package, error) { const bundle = false - pkgs, err := iimportCommon(fset, getPackage, data, bundle, path, insert) + const shallow = true + pkgs, err := iimportCommon(fset, getPackages, data, bundle, path, shallow, reportf) if err != nil { return nil, err } return pkgs[0], nil } -// InsertType is the type of a function that creates a types.TypeName -// object for a named type and inserts it into the scope of the -// specified Package. -type InsertType = func(pkg *types.Package, name string) +// ReportFunc is the type of a function used to report formatted bugs. +type ReportFunc = func(string, ...interface{}) // Current bundled export format version. Increase with each format change. // 0: initial implementation @@ -313,8 +327,9 @@ type iexporter struct { out *bytes.Buffer version int - shallow bool // don't put types from other packages in the index - localpkg *types.Package // (nil in bundle mode) + shallow bool // don't put types from other packages in the index + objEncoder *objectpath.Encoder // encodes objects from other packages in shallow mode; lazily allocated + localpkg *types.Package // (nil in bundle mode) // allPkgs tracks all packages that have been referenced by // the export data, so we can ensure to include them in the @@ -354,6 +369,17 @@ func (p *iexporter) trace(format string, args ...interface{}) { fmt.Printf(strings.Repeat("..", p.indent)+format+"\n", args...) } +// objectpathEncoder returns the lazily allocated objectpath.Encoder to use +// when encoding objects in other packages during shallow export. +// +// Using a shared Encoder amortizes some of cost of objectpath search. +func (p *iexporter) objectpathEncoder() *objectpath.Encoder { + if p.objEncoder == nil { + p.objEncoder = new(objectpath.Encoder) + } + return p.objEncoder +} + // stringOff returns the offset of s within the string section. // If not already present, it's added to the end. func (p *iexporter) stringOff(s string) uint64 { @@ -413,7 +439,6 @@ type exportWriter struct { p *iexporter data intWriter - currPkg *types.Package prevFile string prevLine int64 prevColumn int64 @@ -436,7 +461,6 @@ func (p *iexporter) doDecl(obj types.Object) { }() } w := p.newWriter() - w.setPkg(obj.Pkg(), false) switch obj := obj.(type) { case *types.Var: @@ -673,6 +697,9 @@ func (w *exportWriter) qualifiedType(obj *types.TypeName) { w.pkg(obj.Pkg()) } +// TODO(rfindley): what does 'pkg' even mean here? It would be better to pass +// it in explicitly into signatures and structs that may use it for +// constructing fields. func (w *exportWriter) typ(t types.Type, pkg *types.Package) { w.data.uint64(w.p.typOff(t, pkg)) } @@ -764,30 +791,53 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { case *types.Signature: w.startType(signatureType) - w.setPkg(pkg, true) + w.pkg(pkg) w.signature(t) case *types.Struct: w.startType(structType) n := t.NumFields() + // Even for struct{} we must emit some qualifying package, because that's + // what the compiler does, and thus that's what the importer expects. + fieldPkg := pkg if n > 0 { - w.setPkg(t.Field(0).Pkg(), true) // qualifying package for field objects - } else { - w.setPkg(pkg, true) + fieldPkg = t.Field(0).Pkg() } + if fieldPkg == nil { + // TODO(rfindley): improve this very hacky logic. + // + // The importer expects a package to be set for all struct types, even + // those with no fields. A better encoding might be to set NumFields + // before pkg. setPkg panics with a nil package, which may be possible + // to reach with invalid packages (and perhaps valid packages, too?), so + // (arbitrarily) set the localpkg if available. + // + // Alternatively, we may be able to simply guarantee that pkg != nil, by + // reconsidering the encoding of constant values. + if w.p.shallow { + fieldPkg = w.p.localpkg + } else { + panic(internalErrorf("no package to set for empty struct")) + } + } + w.pkg(fieldPkg) w.uint64(uint64(n)) + for i := 0; i < n; i++ { f := t.Field(i) + if w.p.shallow { + w.objectPath(f) + } w.pos(f.Pos()) w.string(f.Name()) // unexported fields implicitly qualified by prior setPkg - w.typ(f.Type(), pkg) + w.typ(f.Type(), fieldPkg) w.bool(f.Anonymous()) w.string(t.Tag(i)) // note (or tag) } case *types.Interface: w.startType(interfaceType) - w.setPkg(pkg, true) + w.pkg(pkg) n := t.NumEmbeddeds() w.uint64(uint64(n)) @@ -802,10 +852,16 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { w.typ(ft, tPkg) } + // See comment for struct fields. In shallow mode we change the encoding + // for interface methods that are promoted from other packages. + n = t.NumExplicitMethods() w.uint64(uint64(n)) for i := 0; i < n; i++ { m := t.ExplicitMethod(i) + if w.p.shallow { + w.objectPath(m) + } w.pos(m.Pos()) w.string(m.Name()) sig, _ := m.Type().(*types.Signature) @@ -827,12 +883,61 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { } } -func (w *exportWriter) setPkg(pkg *types.Package, write bool) { - if write { - w.pkg(pkg) +// objectPath writes the package and objectPath to use to look up obj in a +// different package, when encoding in "shallow" mode. +// +// When doing a shallow import, the importer creates only the local package, +// and requests package symbols for dependencies from the client. +// However, certain types defined in the local package may hold objects defined +// (perhaps deeply) within another package. +// +// For example, consider the following: +// +// package a +// func F() chan * map[string] struct { X int } +// +// package b +// import "a" +// var B = a.F() +// +// In this example, the type of b.B holds fields defined in package a. +// In order to have the correct canonical objects for the field defined in the +// type of B, they are encoded as objectPaths and later looked up in the +// importer. The same problem applies to interface methods. +func (w *exportWriter) objectPath(obj types.Object) { + if obj.Pkg() == nil || obj.Pkg() == w.p.localpkg { + // obj.Pkg() may be nil for the builtin error.Error. + // In this case, or if obj is declared in the local package, no need to + // encode. + w.string("") + return } - - w.currPkg = pkg + objectPath, err := w.p.objectpathEncoder().For(obj) + if err != nil { + // Fall back to the empty string, which will cause the importer to create a + // new object, which matches earlier behavior. Creating a new object is + // sufficient for many purposes (such as type checking), but causes certain + // references algorithms to fail (golang/go#60819). However, we didn't + // notice this problem during months of gopls@v0.12.0 testing. + // + // TODO(golang/go#61674): this workaround is insufficient, as in the case + // where the field forwarded from an instantiated type that may not appear + // in the export data of the original package: + // + // // package a + // type A[P any] struct{ F P } + // + // // package b + // type B a.A[int] + // + // We need to update references algorithms not to depend on this + // de-duplication, at which point we may want to simply remove the + // workaround here. + w.string("") + return + } + w.string(string(objectPath)) + w.pkg(obj.Pkg()) } func (w *exportWriter) signature(sig *types.Signature) { @@ -1205,6 +1310,13 @@ type internalError string func (e internalError) Error() string { return "gcimporter: " + string(e) } +// TODO(adonovan): make this call panic, so that it's symmetric with errorf. +// Otherwise it's easy to forget to do anything with the error. +// +// TODO(adonovan): also, consider switching the names "errorf" and +// "internalErrorf" as the former is used for bugs, whose cause is +// internal inconsistency, whereas the latter is used for ordinary +// situations like bad input, whose cause is external. func internalErrorf(format string, args ...interface{}) error { return internalError(fmt.Sprintf(format, args...)) } diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go index 94a5eba333..8e64cf644f 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go @@ -21,6 +21,7 @@ import ( "sort" "strings" + "golang.org/x/tools/go/types/objectpath" "golang.org/x/tools/internal/typeparams" ) @@ -85,7 +86,7 @@ const ( // If the export data version is not recognized or the format is otherwise // compromised, an error is returned. func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (int, *types.Package, error) { - pkgs, err := iimportCommon(fset, GetPackageFromMap(imports), data, false, path, nil) + pkgs, err := iimportCommon(fset, GetPackagesFromMap(imports), data, false, path, false, nil) if err != nil { return 0, nil, err } @@ -94,33 +95,49 @@ func IImportData(fset *token.FileSet, imports map[string]*types.Package, data [] // IImportBundle imports a set of packages from the serialized package bundle. func IImportBundle(fset *token.FileSet, imports map[string]*types.Package, data []byte) ([]*types.Package, error) { - return iimportCommon(fset, GetPackageFromMap(imports), data, true, "", nil) + return iimportCommon(fset, GetPackagesFromMap(imports), data, true, "", false, nil) } -// A GetPackageFunc is a function that gets the package with the given path -// from the importer state, creating it (with the specified name) if necessary. -// It is an abstraction of the map historically used to memoize package creation. +// A GetPackagesFunc function obtains the non-nil symbols for a set of +// packages, creating and recursively importing them as needed. An +// implementation should store each package symbol is in the Pkg +// field of the items array. // -// Two calls with the same path must return the same package. -// -// If the given getPackage func returns nil, the import will fail. -type GetPackageFunc = func(path, name string) *types.Package +// Any error causes importing to fail. This can be used to quickly read +// the import manifest of an export data file without fully decoding it. +type GetPackagesFunc = func(items []GetPackagesItem) error + +// A GetPackagesItem is a request from the importer for the package +// symbol of the specified name and path. +type GetPackagesItem struct { + Name, Path string + Pkg *types.Package // to be filled in by GetPackagesFunc call + + // private importer state + pathOffset uint64 + nameIndex map[string]uint64 +} -// GetPackageFromMap returns a GetPackageFunc that retrieves packages from the -// given map of package path -> package. +// GetPackagesFromMap returns a GetPackagesFunc that retrieves +// packages from the given map of package path to package. // -// The resulting func may mutate m: if a requested package is not found, a new -// package will be inserted into m. -func GetPackageFromMap(m map[string]*types.Package) GetPackageFunc { - return func(path, name string) *types.Package { - if _, ok := m[path]; !ok { - m[path] = types.NewPackage(path, name) +// The returned function may mutate m: each requested package that is not +// found is created with types.NewPackage and inserted into m. +func GetPackagesFromMap(m map[string]*types.Package) GetPackagesFunc { + return func(items []GetPackagesItem) error { + for i, item := range items { + pkg, ok := m[item.Path] + if !ok { + pkg = types.NewPackage(item.Path, item.Name) + m[item.Path] = pkg + } + items[i].Pkg = pkg } - return m[path] + return nil } } -func iimportCommon(fset *token.FileSet, getPackage GetPackageFunc, data []byte, bundle bool, path string, insert InsertType) (pkgs []*types.Package, err error) { +func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte, bundle bool, path string, shallow bool, reportf ReportFunc) (pkgs []*types.Package, err error) { const currentVersion = iexportVersionCurrent version := int64(-1) if !debug { @@ -159,7 +176,7 @@ func iimportCommon(fset *token.FileSet, getPackage GetPackageFunc, data []byte, sLen := int64(r.uint64()) var fLen int64 var fileOffset []uint64 - if insert != nil { + if shallow { // Shallow mode uses a different position encoding. fLen = int64(r.uint64()) fileOffset = make([]uint64, r.uint64()) @@ -178,7 +195,8 @@ func iimportCommon(fset *token.FileSet, getPackage GetPackageFunc, data []byte, p := iimporter{ version: int(version), ipath: path, - insert: insert, + shallow: shallow, + reportf: reportf, stringData: stringData, stringCache: make(map[uint64]string), @@ -205,8 +223,9 @@ func iimportCommon(fset *token.FileSet, getPackage GetPackageFunc, data []byte, p.typCache[uint64(i)] = pt } - pkgList := make([]*types.Package, r.uint64()) - for i := range pkgList { + // Gather the relevant packages from the manifest. + items := make([]GetPackagesItem, r.uint64()) + for i := range items { pkgPathOff := r.uint64() pkgPath := p.stringAt(pkgPathOff) pkgName := p.stringAt(r.uint64()) @@ -215,29 +234,42 @@ func iimportCommon(fset *token.FileSet, getPackage GetPackageFunc, data []byte, if pkgPath == "" { pkgPath = path } - pkg := getPackage(pkgPath, pkgName) - if pkg == nil { - errorf("internal error: getPackage returned nil package for %s", pkgPath) - } else if pkg.Name() != pkgName { - errorf("conflicting names %s and %s for package %q", pkg.Name(), pkgName, path) - } - if i == 0 && !bundle { - p.localpkg = pkg - } - - p.pkgCache[pkgPathOff] = pkg + items[i].Name = pkgName + items[i].Path = pkgPath + items[i].pathOffset = pkgPathOff // Read index for package. nameIndex := make(map[string]uint64) nSyms := r.uint64() - // In shallow mode we don't expect an index for other packages. - assert(nSyms == 0 || p.localpkg == pkg || p.insert == nil) + // In shallow mode, only the current package (i=0) has an index. + assert(!(shallow && i > 0 && nSyms != 0)) for ; nSyms > 0; nSyms-- { name := p.stringAt(r.uint64()) nameIndex[name] = r.uint64() } - p.pkgIndex[pkg] = nameIndex + items[i].nameIndex = nameIndex + } + + // Request packages all at once from the client, + // enabling a parallel implementation. + if err := getPackages(items); err != nil { + return nil, err // don't wrap this error + } + + // Check the results and complete the index. + pkgList := make([]*types.Package, len(items)) + for i, item := range items { + pkg := item.Pkg + if pkg == nil { + errorf("internal error: getPackages returned nil package for %q", item.Path) + } else if pkg.Path() != item.Path { + errorf("internal error: getPackages returned wrong path %q, want %q", pkg.Path(), item.Path) + } else if pkg.Name() != item.Name { + errorf("internal error: getPackages returned wrong name %s for package %q, want %s", pkg.Name(), item.Path, item.Name) + } + p.pkgCache[item.pathOffset] = pkg + p.pkgIndex[pkg] = item.nameIndex pkgList[i] = pkg } @@ -296,6 +328,13 @@ func iimportCommon(fset *token.FileSet, getPackage GetPackageFunc, data []byte, typ.Complete() } + // Workaround for golang/go#61561. See the doc for instanceList for details. + for _, typ := range p.instanceList { + if iface, _ := typ.Underlying().(*types.Interface); iface != nil { + iface.Complete() + } + } + return pkgs, nil } @@ -308,8 +347,8 @@ type iimporter struct { version int ipath string - localpkg *types.Package - insert func(pkg *types.Package, name string) // "shallow" mode only + shallow bool + reportf ReportFunc // if non-nil, used to report bugs stringData []byte stringCache map[uint64]string @@ -326,6 +365,12 @@ type iimporter struct { fake fakeFileSet interfaceList []*types.Interface + // Workaround for the go/types bug golang/go#61561: instances produced during + // instantiation may contain incomplete interfaces. Here we only complete the + // underlying type of the instance, which is the most common case but doesn't + // handle parameterized interface literals defined deeper in the type. + instanceList []types.Type // instances for later completion (see golang/go#61561) + // Arguments for calls to SetConstraint that are deferred due to recursive types later []setConstraintArgs @@ -357,13 +402,9 @@ func (p *iimporter) doDecl(pkg *types.Package, name string) { off, ok := p.pkgIndex[pkg][name] if !ok { - // In "shallow" mode, call back to the application to - // find the object and insert it into the package scope. - if p.insert != nil { - assert(pkg != p.localpkg) - p.insert(pkg, name) // "can't fail" - return - } + // In deep mode, the index should be complete. In shallow + // mode, we should have already recursively loaded necessary + // dependencies so the above Lookup succeeds. errorf("%v.%v not in index", pkg, name) } @@ -730,7 +771,8 @@ func (r *importReader) qualifiedIdent() (*types.Package, string) { } func (r *importReader) pos() token.Pos { - if r.p.insert != nil { // shallow mode + if r.p.shallow { + // precise offsets are encoded only in shallow mode return r.posv2() } if r.p.version >= iexportVersionPosCol { @@ -831,13 +873,28 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { fields := make([]*types.Var, r.uint64()) tags := make([]string, len(fields)) for i := range fields { + var field *types.Var + if r.p.shallow { + field, _ = r.objectPathObject().(*types.Var) + } + fpos := r.pos() fname := r.ident() ftyp := r.typ() emb := r.bool() tag := r.string() - fields[i] = types.NewField(fpos, r.currPkg, fname, ftyp, emb) + // Either this is not a shallow import, the field is local, or the + // encoded objectPath failed to produce an object (a bug). + // + // Even in this last, buggy case, fall back on creating a new field. As + // discussed in iexport.go, this is not correct, but mostly works and is + // preferable to failing (for now at least). + if field == nil { + field = types.NewField(fpos, r.currPkg, fname, ftyp, emb) + } + + fields[i] = field tags[i] = tag } return types.NewStruct(fields, tags) @@ -853,6 +910,11 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { methods := make([]*types.Func, r.uint64()) for i := range methods { + var method *types.Func + if r.p.shallow { + method, _ = r.objectPathObject().(*types.Func) + } + mpos := r.pos() mname := r.ident() @@ -862,9 +924,12 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { if base != nil { recv = types.NewVar(token.NoPos, r.currPkg, "", base) } - msig := r.signature(recv, nil, nil) - methods[i] = types.NewFunc(mpos, r.currPkg, mname, msig) + + if method == nil { + method = types.NewFunc(mpos, r.currPkg, mname, msig) + } + methods[i] = method } typ := newInterface(methods, embeddeds) @@ -902,6 +967,9 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { // we must always use the methods of the base (orig) type. // TODO provide a non-nil *Environment t, _ := typeparams.Instantiate(nil, baseType, targs, false) + + // Workaround for golang/go#61561. See the doc for instanceList for details. + r.p.instanceList = append(r.p.instanceList, t) return t case unionType: @@ -920,6 +988,26 @@ func (r *importReader) kind() itag { return itag(r.uint64()) } +// objectPathObject is the inverse of exportWriter.objectPath. +// +// In shallow mode, certain fields and methods may need to be looked up in an +// imported package. See the doc for exportWriter.objectPath for a full +// explanation. +func (r *importReader) objectPathObject() types.Object { + objPath := objectpath.Path(r.string()) + if objPath == "" { + return nil + } + pkg := r.pkg() + obj, err := objectpath.Object(pkg, objPath) + if err != nil { + if r.p.reportf != nil { + r.p.reportf("failed to find object for objectPath %q: %v", objPath, err) + } + } + return obj +} + func (r *importReader) signature(recv *types.Var, rparams []*typeparams.TypeParam, tparams []*typeparams.TypeParam) *types.Signature { params := r.paramList() results := r.paramList() diff --git a/vendor/golang.org/x/tools/internal/gocommand/invoke.go b/vendor/golang.org/x/tools/internal/gocommand/invoke.go index 8d9fc98d8f..53cf66da01 100644 --- a/vendor/golang.org/x/tools/internal/gocommand/invoke.go +++ b/vendor/golang.org/x/tools/internal/gocommand/invoke.go @@ -319,7 +319,7 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) { // Per https://pkg.go.dev/os#File.Close, the call to stdoutR.Close // should cause the Read call in io.Copy to unblock and return // immediately, but we still need to receive from stdoutErr to confirm - // that that has happened. + // that it has happened. <-stdoutErr err2 = ctx.Err() } @@ -333,7 +333,7 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) { // one goroutine at a time will call Write.” // // Since we're starting a goroutine that writes to cmd.Stdout, we must - // also update cmd.Stderr so that that still holds. + // also update cmd.Stderr so that it still holds. func() { defer func() { recover() }() if cmd.Stderr == prevStdout { diff --git a/vendor/golang.org/x/tools/internal/gopathwalk/walk.go b/vendor/golang.org/x/tools/internal/gopathwalk/walk.go index 1684053226..452e342c55 100644 --- a/vendor/golang.org/x/tools/internal/gopathwalk/walk.go +++ b/vendor/golang.org/x/tools/internal/gopathwalk/walk.go @@ -9,8 +9,6 @@ package gopathwalk import ( "bufio" "bytes" - "fmt" - "io/ioutil" "log" "os" "path/filepath" @@ -78,7 +76,7 @@ func walkDir(root Root, add func(Root, string), skip func(root Root, dir string) } start := time.Now() if opts.Logf != nil { - opts.Logf("gopathwalk: scanning %s", root.Path) + opts.Logf("scanning %s", root.Path) } w := &walker{ root: root, @@ -88,11 +86,15 @@ func walkDir(root Root, add func(Root, string), skip func(root Root, dir string) } w.init() if err := fastwalk.Walk(root.Path, w.walk); err != nil { - log.Printf("gopathwalk: scanning directory %v: %v", root.Path, err) + logf := opts.Logf + if logf == nil { + logf = log.Printf + } + logf("scanning directory %v: %v", root.Path, err) } if opts.Logf != nil { - opts.Logf("gopathwalk: scanned %s in %v", root.Path, time.Since(start)) + opts.Logf("scanned %s in %v", root.Path, time.Since(start)) } } @@ -135,7 +137,7 @@ func (w *walker) init() { // The provided path is one of the $GOPATH entries with "src" appended. func (w *walker) getIgnoredDirs(path string) []string { file := filepath.Join(path, ".goimportsignore") - slurp, err := ioutil.ReadFile(file) + slurp, err := os.ReadFile(file) if w.opts.Logf != nil { if err != nil { w.opts.Logf("%v", err) @@ -222,7 +224,11 @@ func (w *walker) walk(path string, typ os.FileMode) error { func (w *walker) shouldTraverse(path string) bool { ts, err := os.Stat(path) if err != nil { - fmt.Fprintln(os.Stderr, err) + logf := w.opts.Logf + if logf == nil { + logf = log.Printf + } + logf("%v", err) return false } if !ts.IsDir() { diff --git a/vendor/golang.org/x/tools/internal/imports/mod_cache.go b/vendor/golang.org/x/tools/internal/imports/mod_cache.go index 18dada495c..45690abbb4 100644 --- a/vendor/golang.org/x/tools/internal/imports/mod_cache.go +++ b/vendor/golang.org/x/tools/internal/imports/mod_cache.go @@ -12,7 +12,7 @@ import ( "golang.org/x/tools/internal/gopathwalk" ) -// To find packages to import, the resolver needs to know about all of the +// To find packages to import, the resolver needs to know about all of // the packages that could be imported. This includes packages that are // already in modules that are in (1) the current module, (2) replace targets, // and (3) packages in the module cache. Packages in (1) and (2) may change over diff --git a/vendor/golang.org/x/tools/internal/imports/zstdlib.go b/vendor/golang.org/x/tools/internal/imports/zstdlib.go index 31a75949cd..9f992c2bec 100644 --- a/vendor/golang.org/x/tools/internal/imports/zstdlib.go +++ b/vendor/golang.org/x/tools/internal/imports/zstdlib.go @@ -93,6 +93,7 @@ var stdlib = map[string][]string{ "Compare", "Contains", "ContainsAny", + "ContainsFunc", "ContainsRune", "Count", "Cut", @@ -147,6 +148,11 @@ var stdlib = map[string][]string{ "TrimSpace", "TrimSuffix", }, + "cmp": { + "Compare", + "Less", + "Ordered", + }, "compress/bzip2": { "NewReader", "StructuralError", @@ -228,6 +234,7 @@ var stdlib = map[string][]string{ "Ring", }, "context": { + "AfterFunc", "Background", "CancelCauseFunc", "CancelFunc", @@ -239,8 +246,11 @@ var stdlib = map[string][]string{ "WithCancel", "WithCancelCause", "WithDeadline", + "WithDeadlineCause", "WithTimeout", + "WithTimeoutCause", "WithValue", + "WithoutCancel", }, "crypto": { "BLAKE2b_256", @@ -445,6 +455,7 @@ var stdlib = map[string][]string{ "XORBytes", }, "crypto/tls": { + "AlertError", "Certificate", "CertificateRequestInfo", "CertificateVerificationError", @@ -476,6 +487,7 @@ var stdlib = map[string][]string{ "LoadX509KeyPair", "NewLRUClientSessionCache", "NewListener", + "NewResumptionState", "NoClientCert", "PKCS1WithSHA1", "PKCS1WithSHA256", @@ -484,6 +496,27 @@ var stdlib = map[string][]string{ "PSSWithSHA256", "PSSWithSHA384", "PSSWithSHA512", + "ParseSessionState", + "QUICClient", + "QUICConfig", + "QUICConn", + "QUICEncryptionLevel", + "QUICEncryptionLevelApplication", + "QUICEncryptionLevelEarly", + "QUICEncryptionLevelHandshake", + "QUICEncryptionLevelInitial", + "QUICEvent", + "QUICEventKind", + "QUICHandshakeDone", + "QUICNoEvent", + "QUICRejectedEarlyData", + "QUICServer", + "QUICSessionTicketOptions", + "QUICSetReadSecret", + "QUICSetWriteSecret", + "QUICTransportParameters", + "QUICTransportParametersRequired", + "QUICWriteData", "RecordHeaderError", "RenegotiateFreelyAsClient", "RenegotiateNever", @@ -493,6 +526,7 @@ var stdlib = map[string][]string{ "RequireAndVerifyClientCert", "RequireAnyClientCert", "Server", + "SessionState", "SignatureScheme", "TLS_AES_128_GCM_SHA256", "TLS_AES_256_GCM_SHA384", @@ -523,6 +557,7 @@ var stdlib = map[string][]string{ "TLS_RSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_RC4_128_SHA", "VerifyClientCertIfGiven", + "VersionName", "VersionSSL30", "VersionTLS10", "VersionTLS11", @@ -618,6 +653,7 @@ var stdlib = map[string][]string{ "PureEd25519", "RSA", "RevocationList", + "RevocationListEntry", "SHA1WithRSA", "SHA256WithRSA", "SHA256WithRSAPSS", @@ -1002,10 +1038,42 @@ var stdlib = map[string][]string{ "COMPRESS_LOOS", "COMPRESS_LOPROC", "COMPRESS_ZLIB", + "COMPRESS_ZSTD", "Chdr32", "Chdr64", "Class", "CompressionType", + "DF_1_CONFALT", + "DF_1_DIRECT", + "DF_1_DISPRELDNE", + "DF_1_DISPRELPND", + "DF_1_EDITED", + "DF_1_ENDFILTEE", + "DF_1_GLOBAL", + "DF_1_GLOBAUDIT", + "DF_1_GROUP", + "DF_1_IGNMULDEF", + "DF_1_INITFIRST", + "DF_1_INTERPOSE", + "DF_1_KMOD", + "DF_1_LOADFLTR", + "DF_1_NOCOMMON", + "DF_1_NODEFLIB", + "DF_1_NODELETE", + "DF_1_NODIRECT", + "DF_1_NODUMP", + "DF_1_NOHDR", + "DF_1_NOKSYMS", + "DF_1_NOOPEN", + "DF_1_NORELOC", + "DF_1_NOW", + "DF_1_ORIGIN", + "DF_1_PIE", + "DF_1_SINGLETON", + "DF_1_STUB", + "DF_1_SYMINTPOSE", + "DF_1_TRANS", + "DF_1_WEAKFILTER", "DF_BIND_NOW", "DF_ORIGIN", "DF_STATIC_TLS", @@ -1144,6 +1212,7 @@ var stdlib = map[string][]string{ "Dyn32", "Dyn64", "DynFlag", + "DynFlag1", "DynTag", "EI_ABIVERSION", "EI_CLASS", @@ -2111,6 +2180,7 @@ var stdlib = map[string][]string{ "R_PPC64_REL16_LO", "R_PPC64_REL24", "R_PPC64_REL24_NOTOC", + "R_PPC64_REL24_P9NOTOC", "R_PPC64_REL30", "R_PPC64_REL32", "R_PPC64_REL64", @@ -2848,6 +2918,7 @@ var stdlib = map[string][]string{ "MaxVarintLen16", "MaxVarintLen32", "MaxVarintLen64", + "NativeEndian", "PutUvarint", "PutVarint", "Read", @@ -2963,6 +3034,7 @@ var stdlib = map[string][]string{ }, "errors": { "As", + "ErrUnsupported", "Is", "Join", "New", @@ -2989,6 +3061,7 @@ var stdlib = map[string][]string{ "Arg", "Args", "Bool", + "BoolFunc", "BoolVar", "CommandLine", "ContinueOnError", @@ -3119,6 +3192,7 @@ var stdlib = map[string][]string{ "Inspect", "InterfaceType", "IsExported", + "IsGenerated", "KeyValueExpr", "LabeledStmt", "Lbl", @@ -3169,6 +3243,7 @@ var stdlib = map[string][]string{ "ArchChar", "Context", "Default", + "Directive", "FindOnly", "IgnoreVendor", "Import", @@ -3184,6 +3259,7 @@ var stdlib = map[string][]string{ "go/build/constraint": { "AndExpr", "Expr", + "GoVersion", "IsGoBuild", "IsPlusBuild", "NotExpr", @@ -3626,6 +3702,7 @@ var stdlib = map[string][]string{ "ErrBadHTML", "ErrBranchEnd", "ErrEndContext", + "ErrJSTemplate", "ErrNoSuchTemplate", "ErrOutputContext", "ErrPartialCharset", @@ -3870,6 +3947,8 @@ var stdlib = map[string][]string{ "FileInfo", "FileInfoToDirEntry", "FileMode", + "FormatDirEntry", + "FormatFileInfo", "Glob", "GlobFS", "ModeAppend", @@ -3942,6 +4021,78 @@ var stdlib = map[string][]string{ "SetPrefix", "Writer", }, + "log/slog": { + "Any", + "AnyValue", + "Attr", + "Bool", + "BoolValue", + "Debug", + "DebugContext", + "Default", + "Duration", + "DurationValue", + "Error", + "ErrorContext", + "Float64", + "Float64Value", + "Group", + "GroupValue", + "Handler", + "HandlerOptions", + "Info", + "InfoContext", + "Int", + "Int64", + "Int64Value", + "IntValue", + "JSONHandler", + "Kind", + "KindAny", + "KindBool", + "KindDuration", + "KindFloat64", + "KindGroup", + "KindInt64", + "KindLogValuer", + "KindString", + "KindTime", + "KindUint64", + "Level", + "LevelDebug", + "LevelError", + "LevelInfo", + "LevelKey", + "LevelVar", + "LevelWarn", + "Leveler", + "Log", + "LogAttrs", + "LogValuer", + "Logger", + "MessageKey", + "New", + "NewJSONHandler", + "NewLogLogger", + "NewRecord", + "NewTextHandler", + "Record", + "SetDefault", + "Source", + "SourceKey", + "String", + "StringValue", + "TextHandler", + "Time", + "TimeKey", + "TimeValue", + "Uint64", + "Uint64Value", + "Value", + "Warn", + "WarnContext", + "With", + }, "log/syslog": { "Dial", "LOG_ALERT", @@ -3977,6 +4128,13 @@ var stdlib = map[string][]string{ "Priority", "Writer", }, + "maps": { + "Clone", + "Copy", + "DeleteFunc", + "Equal", + "EqualFunc", + }, "math": { "Abs", "Acos", @@ -4371,6 +4529,7 @@ var stdlib = map[string][]string{ "ErrNoLocation", "ErrNotMultipart", "ErrNotSupported", + "ErrSchemeMismatch", "ErrServerClosed", "ErrShortBody", "ErrSkipAltProtocol", @@ -5084,6 +5243,8 @@ var stdlib = map[string][]string{ "NumCPU", "NumCgoCall", "NumGoroutine", + "PanicNilError", + "Pinner", "ReadMemStats", "ReadTrace", "SetBlockProfileRate", @@ -5172,6 +5333,37 @@ var stdlib = map[string][]string{ "Task", "WithRegion", }, + "slices": { + "BinarySearch", + "BinarySearchFunc", + "Clip", + "Clone", + "Compact", + "CompactFunc", + "Compare", + "CompareFunc", + "Contains", + "ContainsFunc", + "Delete", + "DeleteFunc", + "Equal", + "EqualFunc", + "Grow", + "Index", + "IndexFunc", + "Insert", + "IsSorted", + "IsSortedFunc", + "Max", + "MaxFunc", + "Min", + "MinFunc", + "Replace", + "Reverse", + "Sort", + "SortFunc", + "SortStableFunc", + }, "sort": { "Find", "Float64Slice", @@ -5242,6 +5434,7 @@ var stdlib = map[string][]string{ "Compare", "Contains", "ContainsAny", + "ContainsFunc", "ContainsRune", "Count", "Cut", @@ -5299,6 +5492,9 @@ var stdlib = map[string][]string{ "Mutex", "NewCond", "Once", + "OnceFunc", + "OnceValue", + "OnceValues", "Pool", "RWMutex", "WaitGroup", @@ -9135,10 +9331,12 @@ var stdlib = map[string][]string{ "SYS_AIO_CANCEL", "SYS_AIO_ERROR", "SYS_AIO_FSYNC", + "SYS_AIO_MLOCK", "SYS_AIO_READ", "SYS_AIO_RETURN", "SYS_AIO_SUSPEND", "SYS_AIO_SUSPEND_NOCANCEL", + "SYS_AIO_WAITCOMPLETE", "SYS_AIO_WRITE", "SYS_ALARM", "SYS_ARCH_PRCTL", @@ -9368,6 +9566,7 @@ var stdlib = map[string][]string{ "SYS_GET_MEMPOLICY", "SYS_GET_ROBUST_LIST", "SYS_GET_THREAD_AREA", + "SYS_GSSD_SYSCALL", "SYS_GTTY", "SYS_IDENTITYSVC", "SYS_IDLE", @@ -9411,8 +9610,24 @@ var stdlib = map[string][]string{ "SYS_KLDSYM", "SYS_KLDUNLOAD", "SYS_KLDUNLOADF", + "SYS_KMQ_NOTIFY", + "SYS_KMQ_OPEN", + "SYS_KMQ_SETATTR", + "SYS_KMQ_TIMEDRECEIVE", + "SYS_KMQ_TIMEDSEND", + "SYS_KMQ_UNLINK", "SYS_KQUEUE", "SYS_KQUEUE1", + "SYS_KSEM_CLOSE", + "SYS_KSEM_DESTROY", + "SYS_KSEM_GETVALUE", + "SYS_KSEM_INIT", + "SYS_KSEM_OPEN", + "SYS_KSEM_POST", + "SYS_KSEM_TIMEDWAIT", + "SYS_KSEM_TRYWAIT", + "SYS_KSEM_UNLINK", + "SYS_KSEM_WAIT", "SYS_KTIMER_CREATE", "SYS_KTIMER_DELETE", "SYS_KTIMER_GETOVERRUN", @@ -9504,11 +9719,14 @@ var stdlib = map[string][]string{ "SYS_NFSSVC", "SYS_NFSTAT", "SYS_NICE", + "SYS_NLM_SYSCALL", "SYS_NLSTAT", "SYS_NMOUNT", "SYS_NSTAT", "SYS_NTP_ADJTIME", "SYS_NTP_GETTIME", + "SYS_NUMA_GETAFFINITY", + "SYS_NUMA_SETAFFINITY", "SYS_OABI_SYSCALL_BASE", "SYS_OBREAK", "SYS_OLDFSTAT", @@ -9891,6 +10109,7 @@ var stdlib = map[string][]string{ "SYS___ACL_SET_FD", "SYS___ACL_SET_FILE", "SYS___ACL_SET_LINK", + "SYS___CAP_RIGHTS_GET", "SYS___CLONE", "SYS___DISABLE_THREADSIGNAL", "SYS___GETCWD", @@ -10574,6 +10793,7 @@ var stdlib = map[string][]string{ "Short", "T", "TB", + "Testing", "Verbose", }, "testing/fstest": { @@ -10603,6 +10823,9 @@ var stdlib = map[string][]string{ "SetupError", "Value", }, + "testing/slogtest": { + "TestHandler", + }, "text/scanner": { "Char", "Comment", @@ -10826,6 +11049,7 @@ var stdlib = map[string][]string{ "Cs", "Cuneiform", "Cypriot", + "Cypro_Minoan", "Cyrillic", "Dash", "Deprecated", @@ -10889,6 +11113,7 @@ var stdlib = map[string][]string{ "Kaithi", "Kannada", "Katakana", + "Kawi", "Kayah_Li", "Kharoshthi", "Khitan_Small_Script", @@ -10943,6 +11168,7 @@ var stdlib = map[string][]string{ "Myanmar", "N", "Nabataean", + "Nag_Mundari", "Nandinagari", "Nd", "New_Tai_Lue", @@ -10964,6 +11190,7 @@ var stdlib = map[string][]string{ "Old_Sogdian", "Old_South_Arabian", "Old_Turkic", + "Old_Uyghur", "Oriya", "Osage", "Osmanya", @@ -11038,6 +11265,7 @@ var stdlib = map[string][]string{ "Tai_Viet", "Takri", "Tamil", + "Tangsa", "Tangut", "Telugu", "Terminal_Punctuation", @@ -11052,6 +11280,7 @@ var stdlib = map[string][]string{ "ToLower", "ToTitle", "ToUpper", + "Toto", "TurkishCase", "Ugaritic", "Unified_Ideograph", @@ -11061,6 +11290,7 @@ var stdlib = map[string][]string{ "Vai", "Variation_Selector", "Version", + "Vithkuqi", "Wancho", "Warang_Citi", "White_Space", diff --git a/vendor/golang.org/x/tools/internal/typeparams/common.go b/vendor/golang.org/x/tools/internal/typeparams/common.go index b9e87c691a..d0d0649fe2 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/common.go +++ b/vendor/golang.org/x/tools/internal/typeparams/common.go @@ -23,6 +23,7 @@ package typeparams import ( + "fmt" "go/ast" "go/token" "go/types" @@ -125,6 +126,11 @@ func OriginMethod(fn *types.Func) *types.Func { } } + // In golang/go#61196, we observe another crash, this time inexplicable. + if gfn == nil { + panic(fmt.Sprintf("missing origin method for %s.%s; named == origin: %t, named.NumMethods(): %d, origin.NumMethods(): %d", named, fn, named == orig, named.NumMethods(), orig.NumMethods())) + } + return gfn.(*types.Func) } diff --git a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go index b4788978ff..7ed86e1711 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go +++ b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go @@ -129,7 +129,7 @@ func NamedTypeArgs(*types.Named) *TypeList { } // NamedTypeOrigin is the identity method at this Go version. -func NamedTypeOrigin(named *types.Named) types.Type { +func NamedTypeOrigin(named *types.Named) *types.Named { return named } diff --git a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go index 114a36b866..cf301af1db 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go +++ b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go @@ -103,7 +103,7 @@ func NamedTypeArgs(named *types.Named) *TypeList { } // NamedTypeOrigin returns named.Orig(). -func NamedTypeOrigin(named *types.Named) types.Type { +func NamedTypeOrigin(named *types.Named) *types.Named { return named.Origin() } diff --git a/vendor/golang.org/x/tools/internal/typesinternal/objectpath.go b/vendor/golang.org/x/tools/internal/typesinternal/objectpath.go new file mode 100644 index 0000000000..5e96e89557 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/typesinternal/objectpath.go @@ -0,0 +1,24 @@ +// 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 typesinternal + +import "go/types" + +// This file contains back doors that allow gopls to avoid method sorting when +// using the objectpath package. +// +// This is performance-critical in certain repositories, but changing the +// behavior of the objectpath package is still being discussed in +// golang/go#61443. If we decide to remove the sorting in objectpath we can +// simply delete these back doors. Otherwise, we should add a new API to +// objectpath that allows controlling the sorting. + +// SkipEncoderMethodSorting marks enc (which must be an *objectpath.Encoder) as +// not requiring sorted methods. +var SkipEncoderMethodSorting func(enc interface{}) + +// ObjectpathObject is like objectpath.Object, but allows suppressing method +// sorting. +var ObjectpathObject func(pkg *types.Package, p string, skipMethodSorting bool) (types.Object, error) diff --git a/vendor/golang.zx2c4.com/wireguard/conn/bind_std.go b/vendor/golang.zx2c4.com/wireguard/conn/bind_std.go index 69789b33fe..c701ef8724 100644 --- a/vendor/golang.zx2c4.com/wireguard/conn/bind_std.go +++ b/vendor/golang.zx2c4.com/wireguard/conn/bind_std.go @@ -81,11 +81,10 @@ func NewStdNetBind() Bind { type StdNetEndpoint struct { // AddrPort is the endpoint destination. netip.AddrPort - // src is the current sticky source address and interface index, if supported. - src struct { - netip.Addr - ifidx int32 - } + // src is the current sticky source address and interface index, if + // supported. Typically this is a PKTINFO structure from/for control + // messages, see unix.PKTINFO for an example. + src []byte } var ( @@ -104,21 +103,17 @@ func (*StdNetBind) ParseEndpoint(s string) (Endpoint, error) { } func (e *StdNetEndpoint) ClearSrc() { - e.src.ifidx = 0 - e.src.Addr = netip.Addr{} + if e.src != nil { + // Truncate src, no need to reallocate. + e.src = e.src[:0] + } } func (e *StdNetEndpoint) DstIP() netip.Addr { return e.AddrPort.Addr() } -func (e *StdNetEndpoint) SrcIP() netip.Addr { - return e.src.Addr -} - -func (e *StdNetEndpoint) SrcIfidx() int32 { - return e.src.ifidx -} +// See sticky_default,linux, etc for implementations of SrcIP and SrcIfidx. func (e *StdNetEndpoint) DstToBytes() []byte { b, _ := e.AddrPort.MarshalBinary() @@ -129,10 +124,6 @@ func (e *StdNetEndpoint) DstToString() string { return e.AddrPort.String() } -func (e *StdNetEndpoint) SrcToString() string { - return e.src.Addr.String() -} - func listenNet(network string, port int) (*net.UDPConn, int, error) { conn, err := listenConfig().ListenPacket(context.Background(), network, ":"+strconv.Itoa(port)) if err != nil { diff --git a/vendor/golang.zx2c4.com/wireguard/conn/bind_windows.go b/vendor/golang.zx2c4.com/wireguard/conn/bind_windows.go index 228167e39a..d5095e004b 100644 --- a/vendor/golang.zx2c4.com/wireguard/conn/bind_windows.go +++ b/vendor/golang.zx2c4.com/wireguard/conn/bind_windows.go @@ -164,7 +164,7 @@ func (e *WinRingEndpoint) DstToBytes() []byte { func (e *WinRingEndpoint) DstToString() string { switch e.family { case windows.AF_INET: - netip.AddrPortFrom(netip.AddrFrom4(*(*[4]byte)(e.data[2:6])), binary.BigEndian.Uint16(e.data[0:2])).String() + return netip.AddrPortFrom(netip.AddrFrom4(*(*[4]byte)(e.data[2:6])), binary.BigEndian.Uint16(e.data[0:2])).String() case windows.AF_INET6: var zone string if scope := *(*uint32)(unsafe.Pointer(&e.data[22])); scope > 0 { diff --git a/vendor/golang.zx2c4.com/wireguard/conn/controlfns_unix.go b/vendor/golang.zx2c4.com/wireguard/conn/controlfns_unix.go index c4536d4bb4..91692c0a65 100644 --- a/vendor/golang.zx2c4.com/wireguard/conn/controlfns_unix.go +++ b/vendor/golang.zx2c4.com/wireguard/conn/controlfns_unix.go @@ -1,4 +1,4 @@ -//go:build !windows && !linux && !js +//go:build !windows && !linux && !wasm /* SPDX-License-Identifier: MIT * diff --git a/vendor/golang.zx2c4.com/wireguard/conn/sticky_default.go b/vendor/golang.zx2c4.com/wireguard/conn/sticky_default.go index 05f00ea5b0..1fa8a0c4bb 100644 --- a/vendor/golang.zx2c4.com/wireguard/conn/sticky_default.go +++ b/vendor/golang.zx2c4.com/wireguard/conn/sticky_default.go @@ -7,6 +7,20 @@ package conn +import "net/netip" + +func (e *StdNetEndpoint) SrcIP() netip.Addr { + return netip.Addr{} +} + +func (e *StdNetEndpoint) SrcIfidx() int32 { + return 0 +} + +func (e *StdNetEndpoint) SrcToString() string { + return "" +} + // TODO: macOS, FreeBSD and other BSDs likely do support this feature set, but // use alternatively named flags and need ports and require testing. diff --git a/vendor/golang.zx2c4.com/wireguard/conn/sticky_linux.go b/vendor/golang.zx2c4.com/wireguard/conn/sticky_linux.go index 274fa38a12..a30ccc715c 100644 --- a/vendor/golang.zx2c4.com/wireguard/conn/sticky_linux.go +++ b/vendor/golang.zx2c4.com/wireguard/conn/sticky_linux.go @@ -14,6 +14,37 @@ import ( "golang.org/x/sys/unix" ) +func (e *StdNetEndpoint) SrcIP() netip.Addr { + switch len(e.src) { + case unix.CmsgSpace(unix.SizeofInet4Pktinfo): + info := (*unix.Inet4Pktinfo)(unsafe.Pointer(&e.src[unix.CmsgLen(0)])) + return netip.AddrFrom4(info.Spec_dst) + case unix.CmsgSpace(unix.SizeofInet6Pktinfo): + info := (*unix.Inet6Pktinfo)(unsafe.Pointer(&e.src[unix.CmsgLen(0)])) + // TODO: set zone. in order to do so we need to check if the address is + // link local, and if it is perform a syscall to turn the ifindex into a + // zone string because netip uses string zones. + return netip.AddrFrom16(info.Addr) + } + return netip.Addr{} +} + +func (e *StdNetEndpoint) SrcIfidx() int32 { + switch len(e.src) { + case unix.CmsgSpace(unix.SizeofInet4Pktinfo): + info := (*unix.Inet4Pktinfo)(unsafe.Pointer(&e.src[unix.CmsgLen(0)])) + return info.Ifindex + case unix.CmsgSpace(unix.SizeofInet6Pktinfo): + info := (*unix.Inet6Pktinfo)(unsafe.Pointer(&e.src[unix.CmsgLen(0)])) + return int32(info.Ifindex) + } + return 0 +} + +func (e *StdNetEndpoint) SrcToString() string { + return e.SrcIP().String() +} + // getSrcFromControl parses the control for PKTINFO and if found updates ep with // the source information found. func getSrcFromControl(control []byte, ep *StdNetEndpoint) { @@ -35,81 +66,43 @@ func getSrcFromControl(control []byte, ep *StdNetEndpoint) { if hdr.Level == unix.IPPROTO_IP && hdr.Type == unix.IP_PKTINFO { - info := pktInfoFromBuf[unix.Inet4Pktinfo](data) - ep.src.Addr = netip.AddrFrom4(info.Spec_dst) - ep.src.ifidx = info.Ifindex + if ep.src == nil || cap(ep.src) < unix.CmsgSpace(unix.SizeofInet4Pktinfo) { + ep.src = make([]byte, 0, unix.CmsgSpace(unix.SizeofInet4Pktinfo)) + } + ep.src = ep.src[:unix.CmsgSpace(unix.SizeofInet4Pktinfo)] + hdrBuf := unsafe.Slice((*byte)(unsafe.Pointer(&hdr)), unix.SizeofCmsghdr) + copy(ep.src, hdrBuf) + copy(ep.src[unix.CmsgLen(0):], data) return } if hdr.Level == unix.IPPROTO_IPV6 && hdr.Type == unix.IPV6_PKTINFO { - info := pktInfoFromBuf[unix.Inet6Pktinfo](data) - ep.src.Addr = netip.AddrFrom16(info.Addr) - ep.src.ifidx = int32(info.Ifindex) + if ep.src == nil || cap(ep.src) < unix.CmsgSpace(unix.SizeofInet6Pktinfo) { + ep.src = make([]byte, 0, unix.CmsgSpace(unix.SizeofInet6Pktinfo)) + } + + ep.src = ep.src[:unix.CmsgSpace(unix.SizeofInet6Pktinfo)] + hdrBuf := unsafe.Slice((*byte)(unsafe.Pointer(&hdr)), unix.SizeofCmsghdr) + copy(ep.src, hdrBuf) + copy(ep.src[unix.CmsgLen(0):], data) return } } } -// pktInfoFromBuf returns type T populated from the provided buf via copy(). It -// panics if buf is of insufficient size. -func pktInfoFromBuf[T unix.Inet4Pktinfo | unix.Inet6Pktinfo](buf []byte) (t T) { - size := int(unsafe.Sizeof(t)) - if len(buf) < size { - panic("pktInfoFromBuf: buffer too small") - } - copy(unsafe.Slice((*byte)(unsafe.Pointer(&t)), size), buf) - return t -} - // setSrcControl sets an IP{V6}_PKTINFO in control based on the source address // and source ifindex found in ep. control's len will be set to 0 in the event // that ep is a default value. func setSrcControl(control *[]byte, ep *StdNetEndpoint) { - *control = (*control)[:cap(*control)] - if len(*control) < int(unsafe.Sizeof(unix.Cmsghdr{})) { - *control = (*control)[:0] + if cap(*control) < len(ep.src) { return } - - if ep.src.ifidx == 0 && !ep.SrcIP().IsValid() { - *control = (*control)[:0] - return - } - - if len(*control) < srcControlSize { - *control = (*control)[:0] - return - } - - hdr := (*unix.Cmsghdr)(unsafe.Pointer(&(*control)[0])) - if ep.SrcIP().Is4() { - hdr.Level = unix.IPPROTO_IP - hdr.Type = unix.IP_PKTINFO - hdr.SetLen(unix.CmsgLen(unix.SizeofInet4Pktinfo)) - - info := (*unix.Inet4Pktinfo)(unsafe.Pointer(&(*control)[unix.SizeofCmsghdr])) - info.Ifindex = ep.src.ifidx - if ep.SrcIP().IsValid() { - info.Spec_dst = ep.SrcIP().As4() - } - *control = (*control)[:unix.CmsgSpace(unix.SizeofInet4Pktinfo)] - } else { - hdr.Level = unix.IPPROTO_IPV6 - hdr.Type = unix.IPV6_PKTINFO - hdr.SetLen(unix.CmsgLen(unix.SizeofInet6Pktinfo)) - - info := (*unix.Inet6Pktinfo)(unsafe.Pointer(&(*control)[unix.SizeofCmsghdr])) - info.Ifindex = uint32(ep.src.ifidx) - if ep.SrcIP().IsValid() { - info.Addr = ep.SrcIP().As16() - } - *control = (*control)[:unix.CmsgSpace(unix.SizeofInet6Pktinfo)] - } - + *control = (*control)[:0] + *control = append(*control, ep.src...) } var srcControlSize = unix.CmsgSpace(unix.SizeofInet6Pktinfo) diff --git a/vendor/golang.zx2c4.com/wireguard/rwcancel/rwcancel.go b/vendor/golang.zx2c4.com/wireguard/rwcancel/rwcancel.go index 63e1510b10..e397c0e8ae 100644 --- a/vendor/golang.zx2c4.com/wireguard/rwcancel/rwcancel.go +++ b/vendor/golang.zx2c4.com/wireguard/rwcancel/rwcancel.go @@ -1,4 +1,4 @@ -//go:build !windows && !js +//go:build !windows && !wasm /* SPDX-License-Identifier: MIT * diff --git a/vendor/golang.zx2c4.com/wireguard/rwcancel/rwcancel_stub.go b/vendor/golang.zx2c4.com/wireguard/rwcancel/rwcancel_stub.go index 182940b32e..2a98b2b4ad 100644 --- a/vendor/golang.zx2c4.com/wireguard/rwcancel/rwcancel_stub.go +++ b/vendor/golang.zx2c4.com/wireguard/rwcancel/rwcancel_stub.go @@ -1,4 +1,4 @@ -//go:build windows || js +//go:build windows || wasm // SPDX-License-Identifier: MIT 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 5c0e8f73f4..136f1b2157 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +++ b/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go @@ -183,13 +183,58 @@ const ( // Field names for google.protobuf.ExtensionRangeOptions. const ( ExtensionRangeOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + ExtensionRangeOptions_Declaration_field_name protoreflect.Name = "declaration" + ExtensionRangeOptions_Verification_field_name protoreflect.Name = "verification" ExtensionRangeOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.uninterpreted_option" + ExtensionRangeOptions_Declaration_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.declaration" + ExtensionRangeOptions_Verification_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.verification" ) // Field numbers for google.protobuf.ExtensionRangeOptions. const ( ExtensionRangeOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 + ExtensionRangeOptions_Declaration_field_number protoreflect.FieldNumber = 2 + ExtensionRangeOptions_Verification_field_number protoreflect.FieldNumber = 3 +) + +// Full and short names for google.protobuf.ExtensionRangeOptions.VerificationState. +const ( + ExtensionRangeOptions_VerificationState_enum_fullname = "google.protobuf.ExtensionRangeOptions.VerificationState" + ExtensionRangeOptions_VerificationState_enum_name = "VerificationState" +) + +// Names for google.protobuf.ExtensionRangeOptions.Declaration. +const ( + ExtensionRangeOptions_Declaration_message_name protoreflect.Name = "Declaration" + ExtensionRangeOptions_Declaration_message_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration" +) + +// Field names for google.protobuf.ExtensionRangeOptions.Declaration. +const ( + ExtensionRangeOptions_Declaration_Number_field_name protoreflect.Name = "number" + ExtensionRangeOptions_Declaration_FullName_field_name protoreflect.Name = "full_name" + ExtensionRangeOptions_Declaration_Type_field_name protoreflect.Name = "type" + ExtensionRangeOptions_Declaration_IsRepeated_field_name protoreflect.Name = "is_repeated" + ExtensionRangeOptions_Declaration_Reserved_field_name protoreflect.Name = "reserved" + ExtensionRangeOptions_Declaration_Repeated_field_name protoreflect.Name = "repeated" + + ExtensionRangeOptions_Declaration_Number_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.number" + ExtensionRangeOptions_Declaration_FullName_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.full_name" + ExtensionRangeOptions_Declaration_Type_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.type" + ExtensionRangeOptions_Declaration_IsRepeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.is_repeated" + ExtensionRangeOptions_Declaration_Reserved_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.reserved" + ExtensionRangeOptions_Declaration_Repeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.repeated" +) + +// Field numbers for google.protobuf.ExtensionRangeOptions.Declaration. +const ( + ExtensionRangeOptions_Declaration_Number_field_number protoreflect.FieldNumber = 1 + ExtensionRangeOptions_Declaration_FullName_field_number protoreflect.FieldNumber = 2 + ExtensionRangeOptions_Declaration_Type_field_number protoreflect.FieldNumber = 3 + ExtensionRangeOptions_Declaration_IsRepeated_field_number protoreflect.FieldNumber = 4 + ExtensionRangeOptions_Declaration_Reserved_field_number protoreflect.FieldNumber = 5 + ExtensionRangeOptions_Declaration_Repeated_field_number protoreflect.FieldNumber = 6 ) // Names for google.protobuf.FieldDescriptorProto. @@ -540,6 +585,7 @@ const ( FieldOptions_DebugRedact_field_name protoreflect.Name = "debug_redact" FieldOptions_Retention_field_name protoreflect.Name = "retention" FieldOptions_Target_field_name protoreflect.Name = "target" + FieldOptions_Targets_field_name protoreflect.Name = "targets" FieldOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" FieldOptions_Ctype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.ctype" @@ -552,6 +598,7 @@ const ( FieldOptions_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.debug_redact" FieldOptions_Retention_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.retention" FieldOptions_Target_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.target" + FieldOptions_Targets_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.targets" FieldOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.uninterpreted_option" ) @@ -567,6 +614,7 @@ const ( FieldOptions_DebugRedact_field_number protoreflect.FieldNumber = 16 FieldOptions_Retention_field_number protoreflect.FieldNumber = 17 FieldOptions_Target_field_number protoreflect.FieldNumber = 18 + FieldOptions_Targets_field_number protoreflect.FieldNumber = 19 FieldOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 ) diff --git a/vendor/google.golang.org/protobuf/internal/genid/type_gen.go b/vendor/google.golang.org/protobuf/internal/genid/type_gen.go index 3bc710138a..e0f75fea0a 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +++ b/vendor/google.golang.org/protobuf/internal/genid/type_gen.go @@ -32,6 +32,7 @@ const ( Type_Options_field_name protoreflect.Name = "options" Type_SourceContext_field_name protoreflect.Name = "source_context" Type_Syntax_field_name protoreflect.Name = "syntax" + Type_Edition_field_name protoreflect.Name = "edition" Type_Name_field_fullname protoreflect.FullName = "google.protobuf.Type.name" Type_Fields_field_fullname protoreflect.FullName = "google.protobuf.Type.fields" @@ -39,6 +40,7 @@ const ( Type_Options_field_fullname protoreflect.FullName = "google.protobuf.Type.options" Type_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Type.source_context" Type_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Type.syntax" + Type_Edition_field_fullname protoreflect.FullName = "google.protobuf.Type.edition" ) // Field numbers for google.protobuf.Type. @@ -49,6 +51,7 @@ const ( Type_Options_field_number protoreflect.FieldNumber = 4 Type_SourceContext_field_number protoreflect.FieldNumber = 5 Type_Syntax_field_number protoreflect.FieldNumber = 6 + Type_Edition_field_number protoreflect.FieldNumber = 7 ) // Names for google.protobuf.Field. @@ -121,12 +124,14 @@ const ( Enum_Options_field_name protoreflect.Name = "options" Enum_SourceContext_field_name protoreflect.Name = "source_context" Enum_Syntax_field_name protoreflect.Name = "syntax" + Enum_Edition_field_name protoreflect.Name = "edition" Enum_Name_field_fullname protoreflect.FullName = "google.protobuf.Enum.name" Enum_Enumvalue_field_fullname protoreflect.FullName = "google.protobuf.Enum.enumvalue" Enum_Options_field_fullname protoreflect.FullName = "google.protobuf.Enum.options" Enum_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Enum.source_context" Enum_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Enum.syntax" + Enum_Edition_field_fullname protoreflect.FullName = "google.protobuf.Enum.edition" ) // Field numbers for google.protobuf.Enum. @@ -136,6 +141,7 @@ const ( Enum_Options_field_number protoreflect.FieldNumber = 3 Enum_SourceContext_field_number protoreflect.FieldNumber = 4 Enum_Syntax_field_number protoreflect.FieldNumber = 5 + Enum_Edition_field_number protoreflect.FieldNumber = 6 ) // Names for google.protobuf.EnumValue. diff --git a/vendor/google.golang.org/protobuf/internal/order/order.go b/vendor/google.golang.org/protobuf/internal/order/order.go index 33745ed062..dea522e127 100644 --- a/vendor/google.golang.org/protobuf/internal/order/order.go +++ b/vendor/google.golang.org/protobuf/internal/order/order.go @@ -33,7 +33,7 @@ var ( return !inOneof(ox) && inOneof(oy) } // Fields in disjoint oneof sets are sorted by declaration index. - if ox != nil && oy != nil && ox != oy { + if inOneof(ox) && inOneof(oy) && ox != oy { return ox.Index() < oy.Index() } // Fields sorted by field number. diff --git a/vendor/google.golang.org/protobuf/proto/size.go b/vendor/google.golang.org/protobuf/proto/size.go index 554b9c6c09..f1692b49b6 100644 --- a/vendor/google.golang.org/protobuf/proto/size.go +++ b/vendor/google.golang.org/protobuf/proto/size.go @@ -73,23 +73,27 @@ func (o MarshalOptions) sizeField(fd protoreflect.FieldDescriptor, value protore } func (o MarshalOptions) sizeList(num protowire.Number, fd protoreflect.FieldDescriptor, list protoreflect.List) (size int) { + sizeTag := protowire.SizeTag(num) + if fd.IsPacked() && list.Len() > 0 { content := 0 for i, llen := 0, list.Len(); i < llen; i++ { content += o.sizeSingular(num, fd.Kind(), list.Get(i)) } - return protowire.SizeTag(num) + protowire.SizeBytes(content) + return sizeTag + protowire.SizeBytes(content) } for i, llen := 0, list.Len(); i < llen; i++ { - size += protowire.SizeTag(num) + o.sizeSingular(num, fd.Kind(), list.Get(i)) + size += sizeTag + o.sizeSingular(num, fd.Kind(), list.Get(i)) } return size } func (o MarshalOptions) sizeMap(num protowire.Number, fd protoreflect.FieldDescriptor, mapv protoreflect.Map) (size int) { + sizeTag := protowire.SizeTag(num) + mapv.Range(func(key protoreflect.MapKey, value protoreflect.Value) bool { - size += protowire.SizeTag(num) + size += sizeTag size += protowire.SizeBytes(o.sizeField(fd.MapKey(), key.Value()) + o.sizeField(fd.MapValue(), value)) return true }) 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 54ce326df9..717b106f3d 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go @@ -363,6 +363,8 @@ func (p *SourcePath) appendFieldOptions(b []byte) []byte { b = p.appendSingularField(b, "retention", nil) case 18: b = p.appendSingularField(b, "target", nil) + case 19: + b = p.appendRepeatedField(b, "targets", nil) case 999: b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) } @@ -418,6 +420,10 @@ func (p *SourcePath) appendExtensionRangeOptions(b []byte) []byte { switch (*p)[0] { case 999: b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) + case 2: + b = p.appendRepeatedField(b, "declaration", (*SourcePath).appendExtensionRangeOptions_Declaration) + case 3: + b = p.appendSingularField(b, "verification", nil) } return b } @@ -473,3 +479,24 @@ func (p *SourcePath) appendUninterpretedOption_NamePart(b []byte) []byte { } return b } + +func (p *SourcePath) appendExtensionRangeOptions_Declaration(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "number", nil) + case 2: + b = p.appendSingularField(b, "full_name", nil) + case 3: + b = p.appendSingularField(b, "type", nil) + case 4: + b = p.appendSingularField(b, "is_repeated", nil) + case 5: + b = p.appendSingularField(b, "reserved", nil) + case 6: + b = p.appendSingularField(b, "repeated", nil) + } + return b +} diff --git a/vendor/modules.txt b/vendor/modules.txt index e94a753448..417c0d2e41 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,4 +1,4 @@ -# atomicgo.dev/cursor v0.1.2 +# atomicgo.dev/cursor v0.2.0 ## explicit; go 1.15 atomicgo.dev/cursor # atomicgo.dev/keyboard v0.2.9 @@ -6,7 +6,7 @@ atomicgo.dev/cursor atomicgo.dev/keyboard atomicgo.dev/keyboard/internal atomicgo.dev/keyboard/keys -# atomicgo.dev/schedule v0.0.2 +# atomicgo.dev/schedule v0.1.0 ## explicit; go 1.18 atomicgo.dev/schedule # github.com/ActiveState/termtest/conpty v0.5.0 @@ -41,18 +41,18 @@ github.com/bitfield/script # github.com/blang/semver/v4 v4.0.0 ## explicit; go 1.14 github.com/blang/semver/v4 -# github.com/bytedance/sonic v1.9.1 -## explicit; go 1.15 +# github.com/bytedance/sonic v1.10.0 +## explicit; go 1.16 github.com/bytedance/sonic github.com/bytedance/sonic/ast github.com/bytedance/sonic/decoder github.com/bytedance/sonic/encoder +github.com/bytedance/sonic/internal/abi github.com/bytedance/sonic/internal/caching github.com/bytedance/sonic/internal/cpu github.com/bytedance/sonic/internal/decoder github.com/bytedance/sonic/internal/encoder github.com/bytedance/sonic/internal/jit -github.com/bytedance/sonic/internal/loader github.com/bytedance/sonic/internal/native github.com/bytedance/sonic/internal/native/avx github.com/bytedance/sonic/internal/native/avx2 @@ -67,9 +67,13 @@ github.com/bytedance/sonic/utf8 # github.com/ccding/go-stun/stun v0.0.0-20200514191101-4dc67bcdb029 ## explicit; go 1.14 github.com/ccding/go-stun/stun -# github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 -## explicit; go 1.15 +# github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d +## explicit; go 1.16 github.com/chenzhuoyu/base64x +# github.com/chenzhuoyu/iasm v0.9.0 +## explicit; go 1.16 +github.com/chenzhuoyu/iasm/expr +github.com/chenzhuoyu/iasm/x86_64 # github.com/containerd/console v1.0.3 ## explicit; go 1.13 github.com/containerd/console @@ -104,11 +108,11 @@ github.com/gin-gonic/gin/binding github.com/gin-gonic/gin/internal/bytesconv github.com/gin-gonic/gin/internal/json github.com/gin-gonic/gin/render -# github.com/go-chi/chi/v5 v5.0.8 +# github.com/go-chi/chi/v5 v5.0.10 ## explicit; go 1.14 github.com/go-chi/chi/v5 github.com/go-chi/chi/v5/middleware -# github.com/go-ole/go-ole v1.2.6 +# github.com/go-ole/go-ole v1.3.0 ## explicit; go 1.12 github.com/go-ole/go-ole github.com/go-ole/go-ole/oleutil @@ -119,10 +123,10 @@ github.com/go-playground/locales/currency # github.com/go-playground/universal-translator v0.18.1 ## explicit; go 1.18 github.com/go-playground/universal-translator -# github.com/go-playground/validator/v10 v10.14.1 +# github.com/go-playground/validator/v10 v10.15.1 ## explicit; go 1.18 github.com/go-playground/validator/v10 -# github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 +# github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 ## explicit; go 1.13 github.com/go-task/slim-sprig # github.com/gocarina/gocsv v0.0.0-20230616125104-99d496ca653d @@ -148,13 +152,13 @@ github.com/godbus/dbus/v5/prop ## explicit; go 1.11 github.com/golang/mock/mockgen github.com/golang/mock/mockgen/model -# github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 -## explicit; go 1.14 +# github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f +## explicit; go 1.19 github.com/google/pprof/profile -# github.com/google/uuid v1.3.0 +# github.com/google/uuid v1.3.1 ## explicit github.com/google/uuid -# github.com/gookit/color v1.5.3 +# github.com/gookit/color v1.5.4 ## explicit; go 1.18 github.com/gookit/color # github.com/gopherjs/gopherjs v1.17.2 @@ -172,7 +176,7 @@ github.com/hashicorp/yamux # github.com/inconshreveable/mousetrap v1.1.0 ## explicit; go 1.18 github.com/inconshreveable/mousetrap -# github.com/itchyny/gojq v0.12.12 +# github.com/itchyny/gojq v0.12.13 ## explicit; go 1.18 github.com/itchyny/gojq # github.com/itchyny/timefmt-go v0.1.5 @@ -181,10 +185,10 @@ github.com/itchyny/timefmt-go # github.com/ivanpirog/coloredcobra v1.0.1 ## explicit; go 1.15 github.com/ivanpirog/coloredcobra -# github.com/james-barrow/golang-ipc v1.1.0 +# github.com/james-barrow/golang-ipc v1.2.4 ## explicit; go 1.15 github.com/james-barrow/golang-ipc -# github.com/jaypipes/ghw v0.11.0 +# github.com/jaypipes/ghw v0.12.0 ## explicit; go 1.18 github.com/jaypipes/ghw github.com/jaypipes/ghw/pkg/baseboard @@ -213,13 +217,13 @@ github.com/jaypipes/pcidb # github.com/json-iterator/go v1.1.12 ## explicit; go 1.12 github.com/json-iterator/go -# github.com/klauspost/compress v1.16.6 +# github.com/klauspost/compress v1.16.7 ## explicit; go 1.18 github.com/klauspost/compress/flate # github.com/klauspost/cpuid/v2 v2.2.5 ## explicit; go 1.15 github.com/klauspost/cpuid/v2 -# github.com/klauspost/reedsolomon v1.11.7 +# github.com/klauspost/reedsolomon v1.11.8 ## explicit; go 1.17 github.com/klauspost/reedsolomon # github.com/konsorten/go-windows-terminal-sequences v1.0.3 @@ -236,7 +240,7 @@ github.com/lib/pq/scram # github.com/lithammer/fuzzysearch v1.1.8 ## explicit; go 1.15 github.com/lithammer/fuzzysearch/fuzzy -# github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 +# github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a ## explicit; go 1.16 github.com/lufia/plan9stats # github.com/mattn/go-colorable v0.1.13 @@ -245,7 +249,7 @@ github.com/mattn/go-colorable # github.com/mattn/go-isatty v0.0.19 ## explicit; go 1.15 github.com/mattn/go-isatty -# github.com/mattn/go-runewidth v0.0.14 +# github.com/mattn/go-runewidth v0.0.15 ## explicit; go 1.9 github.com/mattn/go-runewidth # github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d @@ -260,7 +264,7 @@ github.com/modern-go/concurrent # github.com/modern-go/reflect2 v1.0.2 ## explicit; go 1.12 github.com/modern-go/reflect2 -# github.com/onsi/ginkgo/v2 v2.2.0 +# github.com/onsi/ginkgo/v2 v2.12.0 ## explicit; go 1.18 github.com/onsi/ginkgo/v2/config github.com/onsi/ginkgo/v2/formatter @@ -281,7 +285,7 @@ github.com/onsi/ginkgo/v2/types # github.com/orandin/lumberjackrus v1.0.1 ## explicit github.com/orandin/lumberjackrus -# github.com/pelletier/go-toml/v2 v2.0.8 +# github.com/pelletier/go-toml/v2 v2.0.9 ## explicit; go 1.16 github.com/pelletier/go-toml/v2 github.com/pelletier/go-toml/v2/internal/characters @@ -294,25 +298,19 @@ github.com/pkg/errors # github.com/pmezard/go-difflib v1.0.0 ## explicit github.com/pmezard/go-difflib/difflib -# github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c +# github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b ## explicit; go 1.14 github.com/power-devops/perfstat -# github.com/pterm/pterm v0.12.62 +# github.com/pterm/pterm v0.12.66 ## explicit; go 1.18 github.com/pterm/pterm github.com/pterm/pterm/internal github.com/pterm/pterm/putils -# github.com/quic-go/qtls-go1-18 v0.2.0 -## explicit; go 1.18 -github.com/quic-go/qtls-go1-18 -# github.com/quic-go/qtls-go1-19 v0.2.0 -## explicit; go 1.19 -github.com/quic-go/qtls-go1-19 -# github.com/quic-go/qtls-go1-20 v0.1.0 +# github.com/quic-go/qtls-go1-20 v0.3.3 ## explicit; go 1.20 github.com/quic-go/qtls-go1-20 -# github.com/quic-go/quic-go v0.32.0 -## explicit; go 1.18 +# github.com/quic-go/quic-go v0.38.1 +## explicit; go 1.20 github.com/quic-go/quic-go github.com/quic-go/quic-go/internal/ackhandler github.com/quic-go/quic-go/internal/congestion @@ -324,14 +322,16 @@ github.com/quic-go/quic-go/internal/qerr github.com/quic-go/quic-go/internal/qtls github.com/quic-go/quic-go/internal/utils github.com/quic-go/quic-go/internal/utils/linkedlist +github.com/quic-go/quic-go/internal/utils/ringbuffer github.com/quic-go/quic-go/internal/wire github.com/quic-go/quic-go/logging github.com/quic-go/quic-go/quicvarint # github.com/rivo/uniseg v0.4.4 ## explicit; go 1.18 github.com/rivo/uniseg -# github.com/shirou/gopsutil/v3 v3.23.5 +# github.com/shirou/gopsutil/v3 v3.23.7 ## explicit; go 1.15 +github.com/shirou/gopsutil/v3/common github.com/shirou/gopsutil/v3/cpu github.com/shirou/gopsutil/v3/internal/common github.com/shirou/gopsutil/v3/mem @@ -344,8 +344,8 @@ github.com/shoenig/go-m1cpu ## explicit; go 1.13 github.com/sirupsen/logrus github.com/sirupsen/logrus/hooks/syslog -# github.com/skycoin/dmsg v1.3.0-rc1.0.20230619181939-277586bbacd7 -## explicit; go 1.16 +# github.com/skycoin/dmsg v1.3.11 +## explicit; go 1.18 github.com/skycoin/dmsg/internal/servermetrics github.com/skycoin/dmsg/pkg/direct github.com/skycoin/dmsg/pkg/disc @@ -368,7 +368,7 @@ github.com/skycoin/skycoin/src/cipher/ripemd160 github.com/skycoin/skycoin/src/cipher/secp256k1-go github.com/skycoin/skycoin/src/cipher/secp256k1-go/secp256k1-go2 github.com/skycoin/skycoin/src/util/logging -# github.com/skycoin/skywire-utilities v0.0.0-20230601232053-0abbc9604fbc +# github.com/skycoin/skywire-utilities v1.3.11 ## explicit; go 1.17 github.com/skycoin/skywire-utilities/pkg/buildinfo github.com/skycoin/skywire-utilities/pkg/cipher @@ -393,8 +393,8 @@ github.com/spf13/cobra # github.com/spf13/pflag v1.0.5 ## explicit; go 1.12 github.com/spf13/pflag -# github.com/stretchr/objx v0.5.0 -## explicit; go 1.12 +# github.com/stretchr/objx v0.5.1 +## explicit; go 1.13 github.com/stretchr/objx # github.com/stretchr/testify v1.8.4 ## explicit; go 1.20 @@ -413,7 +413,7 @@ github.com/templexxx/xor # github.com/tjfoc/gmsm v1.4.1 ## explicit; go 1.14 github.com/tjfoc/gmsm/sm4 -# github.com/tklauser/go-sysconf v0.3.11 +# github.com/tklauser/go-sysconf v0.3.12 ## explicit; go 1.13 github.com/tklauser/go-sysconf # github.com/tklauser/numcpus v0.6.1 @@ -461,17 +461,17 @@ github.com/xtaci/kcp-go # github.com/yusufpapurcu/wmi v1.2.3 ## explicit; go 1.16 github.com/yusufpapurcu/wmi -# github.com/zcalusic/sysinfo v1.0.0 +# github.com/zcalusic/sysinfo v1.0.1 ## explicit; go 1.20 github.com/zcalusic/sysinfo github.com/zcalusic/sysinfo/cpuid # go.etcd.io/bbolt v1.3.7 ## explicit; go 1.17 go.etcd.io/bbolt -# golang.org/x/arch v0.3.0 +# golang.org/x/arch v0.4.0 ## explicit; go 1.17 golang.org/x/arch/x86/x86asm -# golang.org/x/crypto v0.10.0 +# golang.org/x/crypto v0.12.0 ## explicit; go 1.17 golang.org/x/crypto/blake2b golang.org/x/crypto/blake2s @@ -494,16 +494,16 @@ golang.org/x/crypto/ssh/terminal golang.org/x/crypto/tea golang.org/x/crypto/twofish golang.org/x/crypto/xtea -# golang.org/x/exp v0.0.0-20221205204356-47842c84f3db -## explicit; go 1.18 +# golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 +## explicit; go 1.20 golang.org/x/exp/constraints -# golang.org/x/mod v0.11.0 +# golang.org/x/mod v0.12.0 ## explicit; go 1.17 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile golang.org/x/mod/module golang.org/x/mod/semver -# golang.org/x/net v0.11.0 +# golang.org/x/net v0.14.0 ## explicit; go 1.17 golang.org/x/net/bpf golang.org/x/net/context @@ -524,7 +524,7 @@ golang.org/x/net/proxy # golang.org/x/sync v0.3.0 ## explicit; go 1.17 golang.org/x/sync/errgroup -# golang.org/x/sys v0.9.0 +# golang.org/x/sys v0.11.0 ## explicit; go 1.17 golang.org/x/sys/cpu golang.org/x/sys/execabs @@ -533,10 +533,10 @@ golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry -# golang.org/x/term v0.9.0 +# golang.org/x/term v0.11.0 ## explicit; go 1.17 golang.org/x/term -# golang.org/x/text v0.10.0 +# golang.org/x/text v0.12.0 ## explicit; go 1.17 golang.org/x/text/cases golang.org/x/text/internal @@ -549,7 +549,7 @@ golang.org/x/text/secure/bidirule golang.org/x/text/transform golang.org/x/text/unicode/bidi golang.org/x/text/unicode/norm -# golang.org/x/tools v0.10.0 +# golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 ## explicit; go 1.18 golang.org/x/tools/cmd/stringer golang.org/x/tools/go/ast/astutil @@ -557,6 +557,7 @@ golang.org/x/tools/go/ast/inspector golang.org/x/tools/go/gcexportdata golang.org/x/tools/go/internal/packagesdriver golang.org/x/tools/go/packages +golang.org/x/tools/go/types/objectpath golang.org/x/tools/imports golang.org/x/tools/internal/event golang.org/x/tools/internal/event/core @@ -576,13 +577,13 @@ golang.org/x/tools/internal/typesinternal # golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 ## explicit; go 1.17 golang.zx2c4.com/wintun -# golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b +# golang.zx2c4.com/wireguard v0.0.0-20230704135630-469159ecf7d1 ## explicit; go 1.20 golang.zx2c4.com/wireguard/conn golang.zx2c4.com/wireguard/conn/winrio golang.zx2c4.com/wireguard/rwcancel golang.zx2c4.com/wireguard/tun -# google.golang.org/protobuf v1.30.0 +# google.golang.org/protobuf v1.31.0 ## explicit; go 1.11 google.golang.org/protobuf/encoding/protowire google.golang.org/protobuf/internal/detrand @@ -609,8 +610,8 @@ gopkg.in/yaml.v3 # howett.net/plist v1.0.0 ## explicit; go 1.12 howett.net/plist -# mvdan.cc/sh/v3 v3.6.0 -## explicit; go 1.18 +# mvdan.cc/sh/v3 v3.7.0 +## explicit; go 1.19 mvdan.cc/sh/v3/expand mvdan.cc/sh/v3/fileutil mvdan.cc/sh/v3/pattern diff --git a/vendor/mvdan.cc/sh/v3/expand/arith.go b/vendor/mvdan.cc/sh/v3/expand/arith.go index 3ce199ec65..20a45960f0 100644 --- a/vendor/mvdan.cc/sh/v3/expand/arith.go +++ b/vendor/mvdan.cc/sh/v3/expand/arith.go @@ -106,7 +106,7 @@ func oneIf(b bool) int { return 0 } -// atoi is like strconv.Atoi, but it ignores errors and trims whitespace. +// atoi is like [strconv.Atoi], but it ignores errors and trims whitespace. func atoi(s string) int { s = strings.TrimSpace(s) n, _ := strconv.Atoi(s) diff --git a/vendor/mvdan.cc/sh/v3/expand/braces.go b/vendor/mvdan.cc/sh/v3/expand/braces.go index e0363aa2fa..1938a8f069 100644 --- a/vendor/mvdan.cc/sh/v3/expand/braces.go +++ b/vendor/mvdan.cc/sh/v3/expand/braces.go @@ -10,7 +10,7 @@ import ( ) // Braces performs brace expansion on a word, given that it contains any -// syntax.BraceExp parts. For example, the word with a brace expansion +// [syntax.BraceExp] parts. For example, the word with a brace expansion // "foo{bar,baz}" will return two literal words, "foobar" and "foobaz". // // Note that the resulting words may share word parts. diff --git a/vendor/mvdan.cc/sh/v3/expand/environ.go b/vendor/mvdan.cc/sh/v3/expand/environ.go index 68ba384e1e..49cbf0523e 100644 --- a/vendor/mvdan.cc/sh/v3/expand/environ.go +++ b/vendor/mvdan.cc/sh/v3/expand/environ.go @@ -60,7 +60,7 @@ const ( // and a value. // // A Variable is unset if its Kind field is Unset, which can be checked via -// Variable.IsSet. The zero value of a Variable is thus a valid unset variable. +// [Variable.IsSet]. The zero value of a Variable is thus a valid unset variable. // // If a variable is set, its Value field will be a []string if it is an indexed // array, a map[string]string if it's an associative array, or a string diff --git a/vendor/mvdan.cc/sh/v3/expand/expand.go b/vendor/mvdan.cc/sh/v3/expand/expand.go index a3152dce83..996d496f8c 100644 --- a/vendor/mvdan.cc/sh/v3/expand/expand.go +++ b/vendor/mvdan.cc/sh/v3/expand/expand.go @@ -83,7 +83,7 @@ type Config struct { } // UnexpectedCommandError is returned if a command substitution is encountered -// when Config.CmdSubst is nil. +// when [Config.CmdSubst] is nil. type UnexpectedCommandError struct { Node *syntax.CmdSubst } @@ -182,9 +182,9 @@ func Document(cfg *Config, word *syntax.Word) (string, error) { const patMode = pattern.Filenames | pattern.Braces -// Pattern expands a single shell word as a pattern, using syntax.QuotePattern +// Pattern expands a single shell word as a pattern, using [syntax.QuotePattern] // on any non-quoted parts of the input word. The result can be used on -// syntax.TranslatePattern directly. +// [syntax.TranslatePattern] directly. // // The config specifies shell expansion options; nil behaves the same as an // empty config. @@ -287,9 +287,10 @@ formatLoop: case 'x', 'u', 'U': i++ max := 2 - if c == 'u' { + switch c { + case 'u': max = 4 - } else if c == 'U' { + case 'U': max = 8 } digits := readDigits(max, true) @@ -342,7 +343,7 @@ formatLoop: if len(args) > 0 { arg, args = args[0], args[1:] } - var farg interface{} + var farg any if c == 'b' { // Passing in nil for args ensures that % format // strings aren't processed; only escape sequences @@ -801,7 +802,7 @@ func findAllIndex(pat, name string, n int) [][]int { var rxGlobStar = regexp.MustCompile(".*") -// pathJoin2 is a simpler version of filepath.Join without cleaning the result, +// pathJoin2 is a simpler version of [filepath.Join] without cleaning the result, // since that's needed for globbing. func pathJoin2(elem1, elem2 string) string { if elem1 == "" { @@ -814,7 +815,7 @@ func pathJoin2(elem1, elem2 string) string { } // pathSplit splits a file path into its elements, retaining empty ones. Before -// splitting, slashes are replaced with filepath.Separator, so that splitting +// splitting, slashes are replaced with [filepath.Separator], so that splitting // Unix paths on Windows works as well. func pathSplit(path string) []string { path = filepath.FromSlash(path) @@ -976,7 +977,8 @@ func (cfg *Config) globDir(base, dir string, rx *regexp.Regexp, matchHidden bool return matches, nil } -// ReadFields TODO write doc. +// ReadFields splits and returns n fields from s, like the "read" shell builtin. +// If raw is set, backslash escape sequences are not interpreted. // // The config specifies shell expansion options; nil behaves the same as an // empty config. diff --git a/vendor/mvdan.cc/sh/v3/expand/param.go b/vendor/mvdan.cc/sh/v3/expand/param.go index bf0d23820e..1f1a475f5f 100644 --- a/vendor/mvdan.cc/sh/v3/expand/param.go +++ b/vendor/mvdan.cc/sh/v3/expand/param.go @@ -199,8 +199,7 @@ func (cfg *Config) paramExp(pe *syntax.ParamExp) (string, error) { if pe.Slice.Length != nil { str = str[:slicePos(sliceLen)] } - } else { // elems are already sliced - } + } // else, elems are already sliced case pe.Repl != nil: orig, err := Pattern(cfg, pe.Repl.Orig) if err != nil { diff --git a/vendor/mvdan.cc/sh/v3/fileutil/file.go b/vendor/mvdan.cc/sh/v3/fileutil/file.go index 1ccf6fef2b..249ae94c4e 100644 --- a/vendor/mvdan.cc/sh/v3/fileutil/file.go +++ b/vendor/mvdan.cc/sh/v3/fileutil/file.go @@ -1,8 +1,8 @@ // Copyright (c) 2016, Daniel Martí // See LICENSE for licensing information -// Package fileutil contains code to work with shell files, also known -// as shell scripts. +// Package fileutil allows inspecting shell files, such as detecting whether a +// file may be shell or extracting its shebang. package fileutil import ( diff --git a/vendor/mvdan.cc/sh/v3/pattern/pattern.go b/vendor/mvdan.cc/sh/v3/pattern/pattern.go index bde1ca7176..7cd98d1494 100644 --- a/vendor/mvdan.cc/sh/v3/pattern/pattern.go +++ b/vendor/mvdan.cc/sh/v3/pattern/pattern.go @@ -39,16 +39,16 @@ const ( var numRange = regexp.MustCompile(`^([+-]?\d+)\.\.([+-]?\d+)}`) // Regexp turns a shell pattern into a regular expression that can be used with -// regexp.Compile. It will return an error if the input pattern was incorrect. -// Otherwise, the returned expression can be passed to regexp.MustCompile. +// [regexp.Compile]. It will return an error if the input pattern was incorrect. +// Otherwise, the returned expression can be passed to [regexp.MustCompile]. // // For example, Regexp(`foo*bar?`, true) returns `foo.*bar.`. // -// Note that this function (and QuoteMeta) should not be directly used with file +// Note that this function (and [QuoteMeta]) should not be directly used with file // paths if Windows is supported, as the path separator on that platform is the // same character as the escaping character for shell patterns. func Regexp(pat string, mode Mode) (string, error) { - any := false + needsEscaping := false noopLoop: for _, r := range pat { switch r { @@ -56,11 +56,11 @@ noopLoop: // regular expression metacharacters case '*', '?', '[', '\\', '.', '+', '(', ')', '|', ']', '{', '}', '^', '$': - any = true + needsEscaping = true break noopLoop } } - if !any && mode&EntireString == 0 { // short-cut without a string copy + if !needsEscaping && mode&EntireString == 0 { // short-cut without a string copy return pat, nil } closingBraces := []int{} @@ -302,7 +302,7 @@ func HasMeta(pat string, mode Mode) bool { // // For example, QuoteMeta(`foo*bar?`) returns `foo\*bar\?`. func QuoteMeta(pat string, mode Mode) string { - any := false + needsEscaping := false loop: for _, r := range pat { switch r { @@ -312,11 +312,11 @@ loop: } fallthrough case '*', '?', '[', '\\': - any = true + needsEscaping = true break loop } } - if !any { // short-cut without a string copy + if !needsEscaping { // short-cut without a string copy return pat } var buf bytes.Buffer diff --git a/vendor/mvdan.cc/sh/v3/syntax/braces.go b/vendor/mvdan.cc/sh/v3/syntax/braces.go index dca854fd82..f3452819ed 100644 --- a/vendor/mvdan.cc/sh/v3/syntax/braces.go +++ b/vendor/mvdan.cc/sh/v3/syntax/braces.go @@ -23,7 +23,7 @@ var ( // It does not return an error; malformed brace expansions are simply skipped. // For example, the literal word "a{b" is left unchanged. func SplitBraces(word *Word) bool { - any := false + toSplit := false top := &Word{} acc := top var cur *BraceExp @@ -90,7 +90,7 @@ func SplitBraces(word *Word) bool { if cur == nil { continue } - any = true + toSplit = true addlitidx() br := pop() if len(br.Elems) == 1 { @@ -154,7 +154,7 @@ func SplitBraces(word *Word) bool { addLit(&left) } } - if !any { + if !toSplit { return false } // open braces that were never closed fall back to non-braces diff --git a/vendor/mvdan.cc/sh/v3/syntax/lexer.go b/vendor/mvdan.cc/sh/v3/syntax/lexer.go index 583abb61c8..b5dddab7e9 100644 --- a/vendor/mvdan.cc/sh/v3/syntax/lexer.go +++ b/vendor/mvdan.cc/sh/v3/syntax/lexer.go @@ -270,6 +270,18 @@ skipSpace: case ';', '"', '\'', '(', ')', '$', '|', '&', '>', '<', '`': p.tok = p.regToken(r) case '#': + // If we're parsing $foo#bar, ${foo}#bar, 'foo'#bar, or "foo"#bar, + // #bar is a continuation of the same word, not a comment. + // TODO: support $(foo)#bar and `foo`#bar as well, which is slightly tricky, + // as we can't easily tell them apart from (foo)#bar and `#bar`, + // where #bar should remain a comment. + if !p.spaced { + switch p.tok { + case _LitWord, rightBrace, sglQuote, dblQuote: + p.advanceLitNone(r) + return + } + } r = p.rune() p.newLit(r) runeLoop: @@ -372,10 +384,7 @@ func (p *Parser) extendedGlob() bool { // We do this after peeking for just one byte, so that the input `echo *` // followed by a newline does not hang an interactive shell parser until // another byte is input. - if p.peekBytes("()") { - return false - } - return true + return !p.peekBytes("()") } return false } @@ -420,9 +429,6 @@ func (p *Parser) regToken(r rune) token { p.rune() return andAnd case '>': - if p.lang == LangPOSIX { - break - } if p.rune() == '>' { p.rune() return appAll diff --git a/vendor/mvdan.cc/sh/v3/syntax/nodes.go b/vendor/mvdan.cc/sh/v3/syntax/nodes.go index a43021f7f7..88eb7feab5 100644 --- a/vendor/mvdan.cc/sh/v3/syntax/nodes.go +++ b/vendor/mvdan.cc/sh/v3/syntax/nodes.go @@ -112,14 +112,14 @@ func (p Pos) Offset() uint { return uint(p.offs) } // Line returns the line number of the position, starting at 1. // // Line is protected against overflows; if an input has too many lines, extra -// lines will have a line number of 0, rendered as "?" by Pos.String. +// lines will have a line number of 0, rendered as "?" by [Pos.String]. func (p Pos) Line() uint { return uint(p.lineCol >> colBitSize) } // Col returns the column number of the position, starting at 1. It counts in // bytes. // // Col is protected against overflows; if an input line has too many columns, -// extra columns will have a column number of 0, rendered as "?" by Pos.String. +// extra columns will have a column number of 0, rendered as "?" by [Pos.String]. func (p Pos) Col() uint { return uint(p.lineCol & colBitMask) } func (p Pos) String() string { @@ -139,7 +139,7 @@ func (p Pos) String() string { } // IsValid reports whether the position contains useful position information. -// Some positions returned via Parse may be invalid: for example, Stmt.Semicolon +// Some positions returned via [Parse] may be invalid: for example, [Stmt.Semicolon] // will only be valid if a statement contained a closing token such as ';'. func (p Pos) IsValid() bool { return p != Pos{} } diff --git a/vendor/mvdan.cc/sh/v3/syntax/parser.go b/vendor/mvdan.cc/sh/v3/syntax/parser.go index 86e7274c2c..99ae17c21a 100644 --- a/vendor/mvdan.cc/sh/v3/syntax/parser.go +++ b/vendor/mvdan.cc/sh/v3/syntax/parser.go @@ -230,8 +230,7 @@ func (w *wrappedReader) Read(p []byte) (n int, err error) { // called with said statements. // // If a line ending in an incomplete statement is parsed, the function will be -// called with any fully parsed statements, and Parser.Incomplete will return -// true. +// called with any fully parsed statements, and [Parser.Incomplete] will return true. // // One can imagine a simple interactive shell implementation as follows: // @@ -414,7 +413,7 @@ type Parser struct { // it needs to finish properly parsing a statement. // // It is only safe to call while the parser is blocked on a read. For an example -// use case, see the documentation for Parser.Interactive. +// use case, see [Parser.Interactive]. func (p *Parser) Incomplete() bool { // If we're in a quote state other than noState, we're parsing a node // such as a double-quoted string. @@ -738,7 +737,7 @@ func (p *Parser) quoteErr(lpos Pos, quote token) { p.tok.String(), quote) } -func (p *Parser) matchingErr(lpos Pos, left, right interface{}) { +func (p *Parser) matchingErr(lpos Pos, left, right any) { p.posErr(lpos, "reached %s without matching %s with %s", p.tok.String(), left, right) } @@ -762,7 +761,7 @@ func (p *Parser) errPass(err error) { } // IsIncomplete reports whether a Parser error could have been avoided with -// extra input bytes. For example, if an io.EOF was encountered while there was +// extra input bytes. For example, if an [io.EOF] was encountered while there was // an unclosed quote or parenthesis. func IsIncomplete(err error) bool { perr, ok := err.(ParseError) @@ -804,8 +803,8 @@ func IsKeyword(word string) bool { // the parser cannot recover. type ParseError struct { Filename string - Pos - Text string + Pos Pos + Text string Incomplete bool } @@ -822,9 +821,9 @@ func (e ParseError) Error() string { // in the current language variant, and what languages support it. type LangError struct { Filename string - Pos - Feature string - Langs []LangVariant + Pos Pos + Feature string + Langs []LangVariant } func (e LangError) Error() string { @@ -849,7 +848,7 @@ func (e LangError) Error() string { return buf.String() } -func (p *Parser) posErr(pos Pos, format string, a ...interface{}) { +func (p *Parser) posErr(pos Pos, format string, a ...any) { p.errPass(ParseError{ Filename: p.f.Name, Pos: pos, @@ -858,7 +857,7 @@ func (p *Parser) posErr(pos Pos, format string, a ...interface{}) { }) } -func (p *Parser) curErr(format string, a ...interface{}) { +func (p *Parser) curErr(format string, a ...any) { p.posErr(p.pos, format, a...) } @@ -1628,6 +1627,9 @@ func (p *Parser) doRedirect(s *Stmt) { if !p.lang.isBash() && r.N != nil && r.N.Value[0] == '{' { p.langErr(r.N.Pos(), "{varname} redirects", LangBash) } + if p.lang == LangPOSIX && (p.tok == rdrAll || p.tok == appAll) { + p.langErr(p.pos, "&> redirects", LangBash, LangMirBSDKorn) + } r.Op, r.OpPos = RedirOperator(p.tok), p.pos p.next() switch r.Op { @@ -2078,7 +2080,7 @@ func (p *Parser) caseClause(s *Stmt) { func (p *Parser) caseItems(stop string) (items []*CaseItem) { p.got(_Newl) - for p.tok != _EOF && !(p.tok == _LitWord && p.val == stop) { + for p.tok != _EOF && (p.tok != _LitWord || p.val != stop) { ci := &CaseItem{} ci.Comments, p.accComs = p.accComs, nil p.got(leftParen) diff --git a/vendor/mvdan.cc/sh/v3/syntax/printer.go b/vendor/mvdan.cc/sh/v3/syntax/printer.go index 6626b36392..84ad68502e 100644 --- a/vendor/mvdan.cc/sh/v3/syntax/printer.go +++ b/vendor/mvdan.cc/sh/v3/syntax/printer.go @@ -216,7 +216,7 @@ func (c *colCounter) Reset(w io.Writer) { // Printer holds the internal state of the printing mechanism of a // program. type Printer struct { - bufWriter + bufWriter // TODO: embedding this makes the methods part of the API, which we did not intend tabWriter *tabwriter.Writer cols colCounter @@ -308,7 +308,7 @@ func (p *Printer) spacePad(pos Pos) { // wantsNewline reports whether we want to print at least one newline before // printing a node at a given position. A zero position can be given to simply // tell if we want a newline following what's just been printed. -func (p *Printer) wantsNewline(pos Pos) bool { +func (p *Printer) wantsNewline(pos Pos, escapingNewline bool) bool { if p.mustNewline { // We must have a newline here. return true @@ -319,7 +319,10 @@ func (p *Printer) wantsNewline(pos Pos) bool { // as that might move them further down to the wrong place. return false } - // THe newline is optional, and we want it via either wantNewline or via + if escapingNewline && p.minify { + return false + } + // The newline is optional, and we want it via either wantNewline or via // the position's line. return p.wantNewline || pos.Line() > p.line } @@ -351,7 +354,7 @@ func (p *Printer) spacedToken(s string, pos Pos) { } func (p *Printer) semiOrNewl(s string, pos Pos) { - if p.wantsNewline(Pos{}) { + if p.wantsNewline(Pos{}, false) { p.newline(pos) p.indent() } else { @@ -509,7 +512,7 @@ func (p *Printer) newlines(pos Pos) { p.firstLine = false return // no empty lines at the top } - if !p.wantsNewline(pos) { + if !p.wantsNewline(pos, false) { return } p.flushHeredocs() @@ -527,7 +530,7 @@ func (p *Printer) newlines(pos Pos) { } func (p *Printer) rightParen(pos Pos) { - if !p.minify { + if len(p.pendingHdocs) > 0 || !p.minify { p.newlines(pos) } p.WriteByte(')') @@ -535,7 +538,7 @@ func (p *Printer) rightParen(pos Pos) { } func (p *Printer) semiRsrv(s string, pos Pos) { - if p.wantsNewline(pos) { + if p.wantsNewline(pos, false) { p.newlines(pos) } else { if !p.wroteSemi { @@ -955,7 +958,7 @@ func (p *Printer) casePatternJoin(pats []*Word) { if i > 0 { p.spacedToken("|", Pos{}) } - if p.wantsNewline(w.Pos()) { + if p.wantsNewline(w.Pos(), true) { if !anyNewline { p.incLevel() anyNewline = true @@ -1015,7 +1018,7 @@ func (p *Printer) stmt(s *Stmt) { } p.incLevel() for _, r := range s.Redirs[startRedirs:] { - if p.wantsNewline(r.OpPos) { + if p.wantsNewline(r.OpPos, true) { p.bslashNewl() } if p.wantSpace == spaceRequired { @@ -1413,7 +1416,7 @@ func (p *Printer) nestedStmts(stmts []*Stmt, last []Comment, closing Pos) { func (p *Printer) assigns(assigns []*Assign) { p.incLevel() for _, a := range assigns { - if p.wantsNewline(a.Pos()) { + if p.wantsNewline(a.Pos(), true) { p.bslashNewl() } else { p.spacePad(a.Pos()) diff --git a/vendor/mvdan.cc/sh/v3/syntax/simplify.go b/vendor/mvdan.cc/sh/v3/syntax/simplify.go index 5a93966e25..e82fd55afa 100644 --- a/vendor/mvdan.cc/sh/v3/syntax/simplify.go +++ b/vendor/mvdan.cc/sh/v3/syntax/simplify.go @@ -16,7 +16,6 @@ import "bytes" // Remove redundant quotes [[ "$var" == str ]] // Merge negations with unary operators [[ ! -n $var ]] // Use single quotes to shorten literals "\$foo" -// Remove redundant param expansion colons ${foo:-} func Simplify(n Node) bool { s := simplifier{} Walk(n, s.visit) @@ -38,10 +37,6 @@ func (s *simplifier) visit(node Node) bool { x.Index = s.removeParensArithm(x.Index) // don't inline params - same as above. - if x.Exp != nil && x.Exp.Op == DefaultUnsetOrNull && x.Exp.Word == nil { - s.modified = true - x.Exp.Op = DefaultUnset - } if x.Slice == nil { break } diff --git a/vendor/mvdan.cc/sh/v3/syntax/walk.go b/vendor/mvdan.cc/sh/v3/syntax/walk.go index be3f20909d..5be8f9c6a4 100644 --- a/vendor/mvdan.cc/sh/v3/syntax/walk.go +++ b/vendor/mvdan.cc/sh/v3/syntax/walk.go @@ -244,7 +244,7 @@ type debugPrinter struct { err error } -func (p *debugPrinter) printf(format string, args ...interface{}) { +func (p *debugPrinter) printf(format string, args ...any) { _, err := fmt.Fprintf(p.out, format, args...) if err != nil && p.err == nil { p.err = err